<?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>51791</bug_id>
          
          <creation_ts>2011-01-01 09:39:29 -0800</creation_ts>
          <short_desc>Eliminate HTMLInputElement::m_deprecatedTypeNumber, other input refactoring and renaming</short_desc>
          <delta_ts>2011-01-03 10:44:43 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>abarth</cc>
    
    <cc>dbates</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>328277</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-01 09:39:29 -0800</bug_when>
    <thetext>Eliminate HTMLInputElement::m_deprecatedTypeNumber, other input refactoring and renaming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328281</commentid>
    <comment_count>1</comment_count>
      <attachid>77745</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-01 10:21:58 -0800</bug_when>
    <thetext>Created attachment 77745
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328365</commentid>
    <comment_count>2</comment_count>
      <attachid>77770</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-01 23:09:53 -0800</bug_when>
    <thetext>Created attachment 77770
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328366</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-01 23:29:32 -0800</bug_when>
    <thetext>Attachment 77770 did not build on chromium:
Build output: http://queues.webkit.org/results/7233356</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328367</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-01 23:45:07 -0800</bug_when>
    <thetext>Attachment 77770 did not build on chromium:
Build output: http://queues.webkit.org/results/7319282</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328396</commentid>
    <comment_count>5</comment_count>
      <attachid>77770</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-02 08:33:56 -0800</bug_when>
    <thetext>Comment on attachment 77770
Patch

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

This is awesome, long collective work of factoring this out finally coming to a close. Almost wish we landed this patch in 2010 :)

&gt; WebCore/html/HTMLInputElement.cpp:604
&gt; +        if (renderer() &amp;&amp; renderer()-&gt;isRenderImage())

Seems like this could be a flag on the InputType?

&gt; WebCore/html/HTMLInputElement.cpp:-1394
&gt; -bool HTMLInputElement::defaultChecked() const
&gt; -{
&gt; -    return fastHasAttribute(checkedAttr);
&gt; -}
&gt; -

The EWS says that it&apos;s used it in WebKit/chromium/src/WebSearchableFormData.cpp. Can you change the code there to just query the attribute?

&gt; WebCore/html/InputType.h:75
&gt; +    // Type query functions (try not to use these; bad factoring)

Can you explain a bit more here, maybe indicate future intent of refactoring?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328411</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-02 12:04:08 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; WebCore/html/HTMLInputElement.cpp:604
&gt; &gt; +        if (renderer() &amp;&amp; renderer()-&gt;isRenderImage())
&gt; 
&gt; Seems like this could be a flag on the InputType?

I made an altAttributeChanged function. With that in place, HTMLInputElement doesn&apos;t even need to include RenderImage.h.

&gt; &gt; WebCore/html/HTMLInputElement.cpp:-1394
&gt; &gt; -bool HTMLInputElement::defaultChecked() const
&gt; &gt; -{
&gt; &gt; -    return fastHasAttribute(checkedAttr);
&gt; &gt; -}
&gt; &gt; -
&gt; 
&gt; The EWS says that it&apos;s used it in WebKit/chromium/src/WebSearchableFormData.cpp. Can you change the code there to just query the attribute?

Done.

&gt; &gt; WebCore/html/InputType.h:75
&gt; &gt; +    // Type query functions (try not to use these; bad factoring)
&gt; 
&gt; Can you explain a bit more here, maybe indicate future intent of refactoring?

Will write a better comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328472</commentid>
    <comment_count>7</comment_count>
      <attachid>77789</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-02 20:20:06 -0800</bug_when>
    <thetext>Created attachment 77789
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328474</commentid>
    <comment_count>8</comment_count>
      <attachid>77789</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-01-02 20:45:11 -0800</bug_when>
    <thetext>Comment on attachment 77789
Patch

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

Great!

&gt; WebCore/html/BaseTextInputType.h:43
&gt; +private:

nit: Should have a blank line before private:

&gt; WebCore/html/ImageInputType.cpp:100
&gt; +     image-&gt;updateAltText();

nit: wrong indentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328586</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-03 09:03:42 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; WebCore/html/BaseTextInputType.h:43
&gt; &gt; +private:
&gt; 
&gt; nit: Should have a blank line before private:

Thanks. Fixed.

&gt; &gt; WebCore/html/ImageInputType.cpp:100
&gt; &gt; +     image-&gt;updateAltText();
&gt; 
&gt; nit: wrong indentation.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328591</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-03 09:21:54 -0800</bug_when>
    <thetext>Committed r74895: &lt;http://trac.webkit.org/changeset/74895&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328598</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-03 09:28:29 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/74895 might have broken Qt Linux Release minimal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328615</commentid>
    <comment_count>12</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-01-03 10:21:20 -0800</bug_when>
    <thetext>Landed in changeset 74899 &lt;http://trac.webkit.org/changeset/74899&gt; the portion of the patch for file WebKit/chromium/src/WebSearchableFormData.cpp. For some reason only the change log corresponding to this change was landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328619</commentid>
    <comment_count>13</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-01-03 10:24:17 -0800</bug_when>
    <thetext>For historical preservation, Csaba Osztrogonac landed the Qt build fix in changeset 74900 &lt;http://trac.webkit.org/changeset/74900&gt;.

From briefly looking at the Qt build files, I&apos;m unclear why the Qt Linux Release Minimal bot is the only bot that complains about the missing ExceptionCode.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328640</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-03 10:44:02 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; For historical preservation, Csaba Osztrogonac landed the Qt build fix in changeset 74900 &lt;http://trac.webkit.org/changeset/74900&gt;.
&gt; 
&gt; From briefly looking at the Qt build files, I&apos;m unclear why the Qt Linux Release Minimal bot is the only bot that complains about the missing ExceptionCode.h.

I presume that in other configurations some other header is including ExceptionCode.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328642</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-03 10:44:43 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Landed in changeset 74899 &lt;http://trac.webkit.org/changeset/74899&gt; the portion of the patch for file WebKit/chromium/src/WebSearchableFormData.cpp. For some reason only the change log corresponding to this change was landed.

Strange. I landed using &quot;webkit-patch land&quot; and I believe the change was in my tree at that time. It was the same computer where I earlier used &quot;webkit-patch upload&quot;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77745</attachid>
            <date>2011-01-01 10:21:58 -0800</date>
            <delta_ts>2011-01-01 23:09:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51791-20110101102156.patch</filename>
            <type>text/plain</type>
            <size>139268</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDg0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzgxIEBACisyMDExLTAxLTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbGlt
aW5hdGUgSFRNTElucHV0RWxlbWVudDo6bV9kZXByZWNhdGVkVHlwZU51bWJlciwgb3RoZXIgaW5w
dXQgcmVmYWN0b3JpbmcgYW5kIHJlbmFtaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MTc5MQorCisgICAgICAgICogZG9tL0lucHV0RWxlbWVudC5o
OiBNYWtlIHNhbml0aXplVmFsdWVGb3JUZXh0RmllbGQgcHVibGljIHNvIGl0IGNhbgorICAgICAg
ICBiZSBjYWxsZWQgYnkgSW5wdXRUeXBlLgorCisgICAgICAgICogaHRtbC9CYXNlQnV0dG9uSW5w
dXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VCdXR0b25JbnB1dFR5cGU6OmFjY2Vz
c0tleUFjdGlvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QmFzZUJ1dHRvbklucHV0VHlw
ZTo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAgICAgKiBo
dG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0Jhc2VD
aGVja2FibGVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNoZWNrYWJsZUlu
cHV0VHlwZTo6Y2FuU2V0U3RyaW5nVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJh
c2VDaGVja2FibGVJbnB1dFR5cGU6OmFjY2Vzc0tleUFjdGlvbik6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6ZmFsbGJhY2tWYWx1ZSk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6QmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6c3RvcmVzVmFsdWVTZXBh
cmF0ZUZyb21BdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDaGVja2Fi
bGVJbnB1dFR5cGU6OmlzQ2hlY2thYmxlKTogQWRkZWQuCisgICAgICAgICogaHRtbC9CYXNlQ2hl
Y2thYmxlSW5wdXRUeXBlLmg6IERpdHRvLgorCisgICAgICAgICogaHRtbC9CYXNlRGF0ZUFuZFRp
bWVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRU
eXBlOjpoYXNTcGluQnV0dG9uKTogQWRkZWQuCisgICAgICAgICogaHRtbC9CYXNlRGF0ZUFuZFRp
bWVJbnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0Jhc2VUZXh0SW5wdXRUeXBl
Lmg6IE1hZGUgbW9yZSBmdW5jdGlvbnMgcHJpdmF0ZS4KKworICAgICAgICAqIGh0bWwvQnV0dG9u
SW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJ1dHRvbklucHV0VHlwZTo6aXNUZXh0
QnV0dG9uKTogQWRkZWQuCisgICAgICAgICogaHRtbC9CdXR0b25JbnB1dFR5cGUuaDogRGl0dG8u
CisKKyAgICAgICAgKiBodG1sL0NoZWNrYm94SW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNoZWNrYm94SW5wdXRUeXBlOjp3aWxsRGlzcGF0Y2hDbGljayk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2hlY2tib3hJbnB1dFR5cGU6OmRpZERpc3BhdGNoQ2xpY2spOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNoZWNrYm94SW5wdXRUeXBlOjppc0NoZWNrYm94KTogQWRkZWQu
CisgICAgICAgICogaHRtbC9DaGVja2JveElucHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAq
IGh0bWwvRGF0ZVRpbWVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVJ
bnB1dFR5cGU6OnNjYWxlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcik6IEZpeGVkCisgICAgICAg
IHR5cG8gaW4gbmFtZSBvZiB0aGlzIGZ1bmN0aW9uLgorICAgICAgICAqIGh0bWwvRGF0ZVRpbWVJ
bnB1dFR5cGUuaDogRGl0dG8uCisgICAgICAgICogaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTG9jYWxJbnB1dFR5cGU6OnNjYWxlZFN0
ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcik6IERpdHRvLgorICAgICAgICAqIGh0bWwvRGF0ZVRpbWVM
b2NhbElucHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvRW1haWxJbnB1dFR5cGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RW1haWxJbnB1dFR5cGU6OmlzRW1haWxGaWVsZCk6IEFk
ZGVkLgorICAgICAgICAqIGh0bWwvRW1haWxJbnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAg
KiBodG1sL0ZpbGVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlw
ZTo6RmlsZUlucHV0VHlwZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlw
ZTo6Y2FuU2V0U3RyaW5nVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1
dFR5cGU6OmNhbkNoYW5nZUZyb21Bbm90aGVyVHlwZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZUlucHV0VHlwZTo6ZmlsZXMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJ
bnB1dFR5cGU6OmNhblNldFZhbHVlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5w
dXRUeXBlOjpnZXRUeXBlU3BlY2lmaWNWYWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsZUlucHV0VHlwZTo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUpOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OnNldEZpbGVMaXN0KTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjppc0ZpbGVVcGxvYWQpOiBBZGRlZC4KKyAg
ICAgICAgKiBodG1sL0ZpbGVJbnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
SFRNTElucHV0RWxlbWVudCk6IFVwZGF0ZWQgZm9yIGRhdGEgbWVtYmVyCisgICAgICAgIHJlbmFt
aW5nIGFuZCByZW1vdmFsLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNW
YWxpZFZhbHVlKTogQ2FsbCBjYW5TZXRTdHJpbmdWYWx1ZQorICAgICAgICBpbnN0ZWFkIG9mIGNo
ZWNraW5nIHNwZWNpZmljIHR5cGUgbnVtYmVycy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6OmdldEFsbG93ZWRWYWx1ZVN0ZXBXaXRoRGVjaW1hbFBsYWNlcyk6CisgICAgICAg
IFVzZSBmYXN0R2V0QXR0cmlidXRlIGFuZCBmaXhlZCB0eXBvIGluIHRoZSBuYW1lIG9mIHRoZQor
ICAgICAgICBzY2FsZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIgZnVuY3Rpb24uCisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKTogQ2FsbAor
ICAgICAgICBJbnB1dFR5cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGU7IG1vdmVkIG1vc3Qgb2YgdGhl
IHR5cGUtc3BlY2lmaWMKKyAgICAgICAgbG9naWMgdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50OjpzaG91bGRVc2VJbnB1dE1ldGhvZCk6IENhbGwKKyAgICAgICAgSW5w
dXRUeXBlOjpzaG91bGRVc2VJbnB1dE1ldGhvZDsgbW92ZWQgdGhlIHR5cGUtc3BlY2lmaWMgbG9n
aWMgdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpoYW5kbGVCbHVy
RXZlbnQpOiBDYWxsCisgICAgICAgIElucHV0VHlwZTo6aGFuZGxlQmx1ckV2ZW50OyBtb3ZlZCB0
aGUgdHlwZS1zcGVjaWZpYyBsb2dpYyB0aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6OnNldFR5cGUpOiBUd2VhayB0aGUgbmFtZXMgYW5kIHR5cGVzCisgICAgICAgIGlu
IHRoaXMgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRh
dGVUeXBlKTogUmVtb3ZlZCB0aGUgY29kZSB0aGF0CisgICAgICAgIHNldCBtX2RlcHJlY2F0ZWRU
eXBlTnVtYmVyLiBDb21wYXJlIHR5cGVzIGJ5IGNvbXBhcmluZyB0aGUgdmFsdWUKKyAgICAgICAg
ZnJvbSBmb3JtQ29udHJvbFR5cGUuIFJlbW92ZWQgZmlsZS1zcGVjaWZpYyBsb2dpYyBhbmQgaW5z
dGVhZCBjYWxsCisgICAgICAgIElucHV0VHlwZTo6Y2FuQ2hhbmdlRnJvbUFub3RoZXJUeXBlLiBT
dHJlYW1saW5lZCB0aGUgbG9naWMgZm9yCisgICAgICAgIGFjdGl2YXRpb24gY2FsbGJhY2tzLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6YWNjZXNzS2V5QWN0aW9uKTogQ2Fs
bAorICAgICAgICBJbnB1dFR5cGU6OmFjY2Vzc0tleUFjdGlvbjsgbW92ZWQgdGhlIHR5cGUtc3Bl
Y2lmaWMgbG9naWMgdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpt
YXBUb0VudHJ5KTogQ2FsbAorICAgICAgICBJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RIZWlnaHRB
bmRXaWR0aEF0dHJpYnV0ZXMgYW5kCisgICAgICAgIElucHV0VHlwZTo6c2hvdWxkUmVzcGVjdEFs
aWduQXR0cmlidXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUpOiBVcGRhdGVkCisgICAgICAgIGZvciBuYW1lIGNoYW5nZXMgYW5kIHRo
ZSByZW1vdmFsIG9mIG1fZGVmYXVsdENoZWNrZWQuIENoYW5nZWQgdGhlCisgICAgICAgIGFsdCBh
dHRyaWJ1dGUgbG9naWMgdG8gYmUgYmFzZWQgb24gdGhlIGNsYXNzIG9mIHRoZSByZW5kZXJlci4K
KyAgICAgICAgQ2FsbCBJbnB1dFR5cGU6OnNyY0F0dHJpYnV0ZUNoYW5nZWQgYW5kIG1vdmVkIHRo
ZSB0eXBlLXNwZWNpZmljCisgICAgICAgIGxvZ2ljIHRoZXJlLiBDYWxsIHNob3VsZFJlc3BlY3RB
bGlnbkF0dHJpYnV0ZSBhbmQKKyAgICAgICAgc2hvdWxkUmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0
cmlidXRlcyByYXRoZXIgdGhhbiBoYXZpbmcKKyAgICAgICAgdHlwZS1zcGVjaWZpYyBsb2dpYyBo
ZXJlLiBDYWxsIG1pbk9yTWF4QXR0cmlidXRlQ2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQpOiBDYWxsCisgICAgICAgIElucHV0VHlw
ZTo6cmVuZGVyZXJJc05lZWRlZDsgbW92ZWQgdGhlIHR5cGUtc3BlY2lmaWMgbG9naWMgdGhlcmUu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjphdHRhY2gpOiBSZW1vdmVkIHRo
ZSB1bm5lZWRlZCBtX2luaXRlZAorICAgICAgICBmbGFnLCB3aGljaCB3YXMgcmVkdW5kYW50IHdp
dGggdGhlIG1faGF2ZVR5cGUgZmxhZy4gQ2FsbAorICAgICAgICBJbnB1dFR5cGU6OmF0dGFjaDsg
bW92ZWQgdGhlIHR5cGUtc3BlY2lmaWMgbG9naWMgdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50OjphbHRUZXh0KTogVXNlIGZhc3RHZXRBdHRyaWJ1dGUuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0b24pOiBD
YWxsCisgICAgICAgIElucHV0VHlwZTo6Y2FuQmVTdWNjZXNzZnVsU3VibWl0QnV0dG9uOyBtb3Zl
ZCB0aGUgdHlwZS1zcGVjaWZpYworICAgICAgICBsb2dpYyB0aGVyZS4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzQWN0aXZhdGVkU3VibWl0KTogVXBkYXRlZCBmb3IKKyAg
ICAgICAgbmFtZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
c2V0QWN0aXZhdGVkU3VibWl0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50OjpyZXNldCk6IFVwZGF0ZWQgdG8gdXNlCisgICAgICAgIElucHV0VHlwZTo6c3RvcmVz
VmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUuIEFsc28gdXNlCisgICAgICAgIGhhc0F0dHJpYnV0
ZShjaGVja2VkQXR0cikgcmF0aGVyIHRoYW4gbV9kZWZhdWx0Q2hlY2tlZCwKKyAgICAgICAgc2lu
Y2UgYm90aCBhcmUgdGhlIHNhbWUuIEFsc28gdXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UuCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRDaGVja2VkKTogVXBkYXRlZCBmb3Ig
bmFtZQorICAgICAgICBjaGFuZ2VzLiBBbHNvIGFkZGVkIGNhbGwgdG8KKyAgICAgICAgSW5wdXRU
eXBlOjpzaG91bGRTZW5kQ2hhbmdlRXZlbnRBZnRlckNoZWNrZWRDaGFuZ2VkIGFuZAorICAgICAg
ICBtb3ZlZCB0aGUgdHlwZS1zcGVjaWZpYyBsb2dpYyB0aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ6OnNldEluZGV0ZXJtaW5hdGUpOiBDYWxsCisgICAgICAgIGlzQ2hl
Y2thYmxlIHRvIHNlZSBpZiBpbmRldGVybWluYXRlIGlzIGFsbG93ZWQuCisgICAgICAgIEFsc28g
dXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6Y29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXMpOgorICAgICAgICBVcGRhdGVkIGZvciBu
YW1lIGNoYW5nZXMgYW5kIHJlbW92ZWQgZGF0YSBtZW1iZXJzLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudDo6dmFsdWUpOiBDYWxsCisgICAgICAgIElucHV0VHlwZTo6Z2V0VHlw
ZVNwZWNpZmljVmFsdWUgYW5kIElucHV0VHlwZTo6ZmFsbGJhY2tWYWx1ZS4KKyAgICAgICAgTW92
ZWQgdGhlIHR5cGUtc3BlY2lmaWMgbG9naWMgdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50Ojp2YWx1ZVdpdGhEZWZhdWx0KTogQ2FsbAorICAgICAgICBJbnB1dFR5cGU6
OmRlZmF1bHRWYWx1ZS4gTW92ZWQgdGhlIHR5cGUtc3BlY2lmaWMgbG9naWMgdGhlcmUuCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRTdWdnZXN0ZWRWYWx1ZSk6IENhbGwK
KyAgICAgICAgSW5wdXRUeXBlOjpjYW5TZXRTdWdnZXN0ZWRWYWx1ZS4gTW92ZWQgdGhlIHR5cGUt
c3BlY2lmaWMgbG9naWMKKyAgICAgICAgdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50OjpzZXRWYWx1ZSk6IENhbGwKKyAgICAgICAgSW5wdXRUeXBlOjpjYW5TZXRWYWx1
ZS4gTW92ZWQgdGhlIHR5cGUtc3BlY2lmaWMgbG9naWMgdGhlcmUuCisgICAgICAgIENsZWFyIHRo
ZSBmaWxlIGxpc3QgaWYgaXQgZXhpc3RzIHJhdGhlciB0aGFuIGNoZWNraW5nIHRoZQorICAgICAg
ICB0eXBlIGV4cGxpY2l0bHkuIFdlIGNvdWxkIHByb2JhYmx5IGRvIHRoYXQgYSBtb3JlIGVsZWdh
bnQgd2F5LgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cGxhY2Vob2xkZXIp
OiBVc2UgZmFzdEdldEF0dHJpYnV0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ6OnNldFZhbHVlRnJvbVJlbmRlcmVyKTogVXNlIHRoZQorICAgICAgICBpc0ZpbGVVcGxvYWQg
ZnVuY3Rpb24gaW4gdGhlIGFzc2VydGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6OnNldEZpbGVMaXN0RnJvbVJlbmRlcmVyKTogUHV0IG1vc3QKKyAgICAgICAgb2YgdGhl
IGNvZGUgZnJvbSB0aGlzIGZ1bmN0aW9uIGludG8gRmlsZUlucHV0VHlwZTo6c2V0RmlsZUxpc3Qu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpwcmVEaXNwYXRjaEV2ZW50SGFu
ZGxlcik6IENoYW5nZWQKKyAgICAgICAgdG8gY2FsbCBJbnB1dFR5cGU6OndpbGxEaXNwYXRjaENs
aWNrLCB3aGljaCBkb2VzIHRoZSB0eXBlLXNwZWNpZmljCisgICAgICAgIHdvcmsuIFN0aWxsIG5l
ZWQgdG8gdXNlIGEgc2luZ2xlIHN0cnVjdCBmb3IgYWxsIHR5cGVzLCBiZWNhdXNlCisgICAgICAg
IHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50IGNvdWxkIGNoYW5nZSBkdXJpbmcgdGhlIGV2ZW50IGhh
bmRsaW5nLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cG9zdERpc3BhdGNo
RXZlbnRIYW5kbGVyKTogQ2hhbmdlZAorICAgICAgICB0byBjYWxsIElucHV0VHlwZTo6ZGlkRGlz
cGF0Y2hDbGljay4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRW
YWx1ZSk6IFVzZSBmYXN0R2V0QXR0cmlidXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6YWNjZXB0KTogVXNlIGZhc3RHZXRBdHRyaWJ1dGUuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50OjphbHQpOiBVc2UgZmFzdEdldEF0dHJpYnV0ZS4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNyYyk6IFVzZSBmYXN0R2V0QXR0cmlidXRlLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0QXV0b2ZpbGxlZCk6IFVwZGF0
ZWQgZm9yIG5hbWUKKyAgICAgICAgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6OmZpbGVzKTogVXNlIElucHV0VHlwZTo6ZmlsZXMuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50Ojppc0FjY2VwdGFibGVWYWx1ZSk6IFVzZQorICAgICAgICBJbnB1
dFR5cGU6OmlzQWNjZXB0YWJsZVZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6c2FuaXRpemVWYWx1ZSk6IFVzZQorICAgICAgICBJbnB1dFR5cGU6OnNhbml0aXplVmFs
dWUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpoYXNVbmFjY2VwdGFibGVW
YWx1ZSk6IFVzZQorICAgICAgICBJbnB1dFR5cGU6Omhhc1VuYWNjZXB0YWJsZVZhbHVlLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6bmVlZHNBY3RpdmF0aW9uQ2FsbGJhY2sp
OiBVc2UKKyAgICAgICAgSW5wdXRUeXBlOjpzaG91bGRSZXNldE9uRG9jdW1lbnRBY3RpdmF0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVy
RG9jdW1lbnQpOiBVc2UKKyAgICAgICAgSW5wdXRUeXBlOjp3aWxsTW92ZVRvTmV3T3duZXJEb2N1
bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmRhdGFMaXN0KTogVXNl
CisgICAgICAgIElucHV0VHlwZTo6c2hvdWxkUmVzcGVjdExpc3RBdHRyaWJ1dGUuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3RlZE9wdGlvbik6IFR3ZWFrZWQgbG9n
aWMKKyAgICAgICAgYW5kIG5hbWluZyBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6OnN0ZXBVcEZyb21SZW5kZXJlcik6IFVzZQorICAgICAgICBmYXN0R2V0QXR0cmli
dXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNTcGVlY2hFbmFibGVk
KTogVXNlCisgICAgICAgIElucHV0VHlwZTo6c2hvdWxkUmVzcGVjdFNwZWVjaEF0dHJpYnV0ZS4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzVGV4dEJ1dHRvbik6IE5vIGxv
bmdlciBpbmxpbmUuCisgICAgICAgIENhbGxzIHRocm91Z2ggdG8gSW5wdXRUeXBlLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNSYWRpb0J1dHRvbik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNTZWFyY2hGaWVsZCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNJbnB1dFR5cGVIaWRkZW4pOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzUGFzc3dvcmRGaWVs
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNDaGVja2Jv
eCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNUZXh0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc0VtYWlsRmllbGQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzRmlsZVVwbG9h
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNJbWFnZUJ1
dHRvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNOdW1i
ZXJGaWVsZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNT
dWJtaXRCdXR0b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6
OmlzVGVsZXBob25lRmllbGQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6OmlzVVJMRmllbGQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6OmlzRW51bWVyYXRhYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50Ojppc0NoZWNrZWQpOiBObyBsb25nZXIgaW5saW5lLgorICAgICAgICBDYWxscyBJ
bnB1dFR5cGU6OmlzQ2hlY2thYmxlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6aGFzU3BpbkJ1dHRvbik6IE5vIGxvbmdlciBpbmxpbmUuCisgICAgICAgIENhbGxzIHRocm91
Z2ggdG8gSW5wdXRUeXBlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c3Vw
cG9ydHNQbGFjZWhvbGRlcik6IE5vIGxvbmdlcgorICAgICAgICBpbmxpbmUuIENhbGxzIGlzVGV4
dFR5cGUgYXMgYmVmb3JlLCBidXQgd2l0aCBubyBzcGVjaWFsIGNhc2UKKyAgICAgICAgZm9yIElT
SU5ERVguIFRoYXQgc3BlY2lhbCBjYXNlIHdhcyB1bm5lZWRlZCBzaW5jZSBpdCByZXR1cm5zCisg
ICAgICAgIHRydWUgZnJvbSBpc1RleHRUeXBlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6Y2hlY2tlZFJhZGlvQnV0dG9ucyk6IE5vIGxvbmdlcgorICAgICAgICBpbmxpbmUu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudCk6CisgICAgICAgIE5vIGxvbmdlciBpbmxpbmUuCisKKyAgICAgICAgKiBodG1s
L0hUTUxJbnB1dEVsZW1lbnQuaDogUmVtb3ZlZCBtdWx0aXBsZSB1bm5lZWRlZCBpbmNsdWRlcy4K
KyAgICAgICAgVGhlIGJpZyBvbmUgaXMgcHJvYmFibHkgSW5wdXRUeXBlLmgsIGJ1dCBhbHNvIEhU
TUxGb3JtRWxlbWVudC5oLgorICAgICAgICBSZW1vdmVkIHVubmVlZGVkIGZvcndhcmQgZGVjbGFy
YXRpb25zLiBNYWRlIG1hbnkgZnVuY3Rpb25zCisgICAgICAgIG5vIGxvbmdlciBpbmxpbmUgc2lu
Y2UgdGhleSBub3cgbmVlZCB0byBtYWtlIHZpcnR1YWwgZnVuY3Rpb24KKyAgICAgICAgZGlzcGF0
Y2hlcy4gUmVtb3ZlZCB0aGUgdW5uZWVkZWQgZGVmYXVsdENoZWNrZWQgYW5kCisgICAgICAgIHdl
YmtpdGRpcmVjdG9yeSBmdW5jdGlvbnMuIEJvdGggYXJlIGhhbmRsZWQgYnkgSFRNTCBhdHRyaWJ1
dGUKKyAgICAgICAgcmVmbGVjdGlvbiBmb3IgRE9NIGJpbmRpbmdzLCBhbmQgdGhlIGNhbGxlcnMg
aW5zdGVhZCBjYW4gZ2V0CisgICAgICAgIGF0IHRoZSBhdHRyaWJ1dGUuIE1hZGUgdXBkYXRlQ2hl
Y2tlZFJhZGlvQnV0dG9ucyBwdWJsaWMgc28gaXQKKyAgICAgICAgY2FuIGJlIGNhbGxlZCBieSBh
biBJbnB1dFR5cGUgY2xhc3MuIFJlbW92ZWQKKyAgICAgICAgRGVwcmVjYXRlZElucHV0VHlwZSwg
SW5wdXRUeXBlTWFwLCBjcmVhdGVUeXBlTWFwLAorICAgICAgICBkZXByZWNhdGVkSW5wdXRUeXBl
LCBhbGxvd3NJbmRldGVybWluYXRlLAorICAgICAgICByZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRy
cywgc3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUsCisgICAgICAgIG1faW1hZ2VMb2Fk
ZXIsIG1fZmlsZUxpc3QsIG1fZGVwcmVjYXRlZFR5cGVOdW1iZXIsCisgICAgICAgIG1fZGVmYXVs
dENoZWNrZWQsIGFuZCBtX2luaXRlZC4gUmVuYW1lZCBtX2NoZWNrZWQgdG8KKyAgICAgICAgbV9p
c0NoZWNrZWQsIG1fdXNlRGVmYXVsdENoZWNrZWQgdG8gbV9yZWZsZWN0c0NoZWNrZWRBdHRyaWJ1
dGUsCisgICAgICAgIG1faW5kZXRlcm1pbmF0ZSB0b21faXNJbmRldGVybWluYXRlLCBtX2hhdmVU
eXBlIHRvIG1faGFzVHlwZSwKKyAgICAgICAgbV9hY3RpdmVTdWJtaXQgdG8gbV9pc0FjdGl2YXRl
ZFN1Ym1pdCwgYW5kIG1fYXV0b2ZpbGxlZCB0bworICAgICAgICBtX2lzQXV0b2ZpbGxlZC4KKyAg
ICAgICAgCisgICAgICAgICogaHRtbC9IaWRkZW5JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SGlkZGVuSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24pOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhpZGRlbklucHV0VHlwZTo6cmVuZGVyZXJJc05lZWRlZCkgQWRkZWQuOgorICAg
ICAgICAoV2ViQ29yZTo6SGlkZGVuSW5wdXRUeXBlOjpzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0
dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SGlkZGVuSW5wdXRUeXBlOjppc0hp
ZGRlblR5cGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhpZGRlbklucHV0VHlwZTo6c2hv
dWxkUmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0cmlidXRlcyk6IEFkZGVkLgorICAgICAgICAqIGh0
bWwvSGlkZGVuSW5wdXRUeXBlLmg6IERpdHRvLgorCisgICAgICAgICogaHRtbC9JbWFnZUlucHV0
VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUlucHV0VHlwZTo6SW1hZ2VJbnB1dFR5
cGUpOiBNb3ZlZCBvdXQgb2YgdGhlIGhlYWRlciBmaWxlLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VJbnB1dFR5cGU6OnNyY0F0dHJpYnV0ZUNoYW5nZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlSW5wdXRUeXBlOjphdHRhY2gpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlSW5wdXRUeXBlOjp3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RBbGlnbkF0dHJpYnV0ZSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5cGU6OmNhbkJlU3VjY2Vzc2Z1
bFN1Ym1pdEJ1dHRvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5cGU6
OmlzSW1hZ2VCdXR0b24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlSW5wdXRUeXBl
Ojppc0VudW1lcmF0YWJsZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5
cGU6OnNob3VsZFJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJpYnV0ZXMpOiBBZGRlZC4KKyAgICAg
ICAgKiBodG1sL0ltYWdlSW5wdXRUeXBlLmg6IERpdHRvLgorCisgICAgICAgICogaHRtbC9JbnB1
dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpjcmVhdGUpOiBDaGFuZ2Vk
IGFyZ3VtZW50IHR5cGUgdG8gU3RyaW5nLiBUaGVyZQorICAgICAgICBpcyBubyB2YWx1ZSBpbiB0
YWtpbmcgYW4gQXRvbWljU3RyaW5nIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6
OnNjYWxlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcik6IEZpeGVkIHR5cG8gaW4KKyAgICAgICAg
dGhpcyBmdW5jdGlvbiBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpjYW5TZXRT
dHJpbmdWYWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjppc0tleWJv
YXJkRm9jdXNhYmxlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnNob3Vs
ZFVzZUlucHV0TWV0aG9kKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6Omhh
bmRsZUJsdXJFdmVudCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjphY2Nl
c3NLZXlBY3Rpb24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6YXR0YWNo
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnNyY0F0dHJpYnV0ZUNoYW5n
ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6d2lsbE1vdmVUb05ld093
bmVyRG9jdW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2hvdWxk
UmVzcGVjdEFsaWduQXR0cmlidXRlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5
cGU6OmNhbkNoYW5nZUZyb21Bbm90aGVyVHlwZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW5wdXRUeXBlOjptaW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklucHV0VHlwZTo6Y2FuQmVTdWNjZXNzZnVsU3VibWl0QnV0dG9uKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnJlbmRlcmVySXNOZWVkZWQpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6ZmlsZXMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OklucHV0VHlwZTo6Z2V0VHlwZVNwZWNpZmljVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklucHV0VHlwZTo6ZmFsbGJhY2tWYWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW5wdXRUeXBlOjpkZWZhdWx0VmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklu
cHV0VHlwZTo6Y2FuU2V0U3VnZ2VzdGVkVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklucHV0VHlwZTo6c2hvdWxkU2VuZENoYW5nZUV2ZW50QWZ0ZXJDaGVja2VkQ2hhbmdlZCk6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpzdG9yZXNWYWx1ZVNlcGFyYXRlRnJv
bUF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpjYW5TZXRW
YWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjp3aWxsRGlzcGF0Y2hD
bGljayk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpkaWREaXNwYXRjaENs
aWNrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzQWNjZXB0YWJsZVZh
bHVlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnNhbml0aXplVmFsdWUp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6aGFzVW5hY2NlcHRhYmxlVmFs
dWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2V0RmlsZUxpc3QpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2hvdWxkUmVzZXRPbkRvY3VtZW50
QWN0aXZhdGlvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpzaG91bGRS
ZXNwZWN0TGlzdEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBl
OjpzaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbnB1dFR5cGU6OmlzVGV4dEJ1dHRvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5w
dXRUeXBlOjppc1JhZGlvQnV0dG9uKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5
cGU6OmlzU2VhcmNoRmllbGQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6
aXNIaWRkZW5UeXBlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzUGFz
c3dvcmRGaWVsZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjppc0NoZWNr
Ym94KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzRW1haWxGaWVsZCk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjppc0ZpbGVVcGxvYWQpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6aXNJbWFnZUJ1dHRvbik6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjppc051bWJlckZpZWxkKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzU3VibWl0QnV0dG9uKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzVGVsZXBob25lRmllbGQpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklucHV0VHlwZTo6aXNVUkxGaWVsZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW5wdXRUeXBlOjppc0VudW1lcmF0YWJsZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW5wdXRUeXBlOjppc0NoZWNrYWJsZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRU
eXBlOjpoYXNTcGluQnV0dG9uKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6
OnNob3VsZFJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJpYnV0ZXMpOiBBZGRlZC4KKworICAgICAg
ICAqIGh0bWwvSW5wdXRUeXBlLmg6IFJlbW92ZWQgdW5uZWVkZWQgRXhjZXB0aW9uQ29kZS5oIGlu
Y2x1ZGUgYW5kCisgICAgICAgIHVzZWQgYSB0eXBlZGVmIGluc3RlYWQgYXMgd2UgZG8gd2hlbiB3
ZSB3YW50IGZvciBmb3J3YXJkIGRlY2xhcmUgaXQuCisgICAgICAgIEFkZGVkIGluY2x1ZGVzIGFu
ZCBmb3J3YXJkIGRlY2xhcmF0aW9ucyBuZWVkZWQgZm9yIG5ldyBmdW5jdGlvbnMuCisgICAgICAg
IEFkZGVkIENsaWNrSGFuZGxpbmdTdGF0ZSBzdHJ1Y3R1cmUuIENoYW5nZWQgdGhlIGFyZ3VtZW50
IHRvIGNyZWF0ZQorICAgICAgICB0byBhIFN0cmluZyByYXRoZXIgdGhhbiBBdG9taWNTdHJpbmcu
IEFkZGVkIG1hbnkgdmlydHVhbCBmdW5jdGlvbnMuCisgICAgICAgIAorICAgICAgICAqIGh0bWwv
SXNJbmRleElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJc0luZGV4SW5wdXRUeXBl
OjpzaG91bGRSZXNwZWN0TGlzdEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvSXNJ
bmRleElucHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvTnVtYmVySW5wdXRUeXBl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0VHlwZTo6aGFuZGxlQmx1ckV2ZW50
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6OmlzQWNjZXB0YWJs
ZVZhbHVlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6OnNhbml0
aXplVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0VHlwZTo6aGFz
VW5hY2NlcHRhYmxlVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0
VHlwZTo6c2hvdWxkUmVzcGVjdFNwZWVjaEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TnVtYmVySW5wdXRUeXBlOjppc051bWJlckZpZWxkKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6Omhhc1NwaW5CdXR0b24pOiBBZGRlZC4KKyAgICAgICAg
KiBodG1sL051bWJlcklucHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvUGFzc3dv
cmRJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzc3dvcmRJbnB1dFR5cGU6OnNo
b3VsZFVzZUlucHV0TWV0aG9kKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXNzd29yZElu
cHV0VHlwZTo6c2hvdWxkUmVzZXRPbkRvY3VtZW50QWN0aXZhdGlvbik6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UGFzc3dvcmRJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRl
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXNzd29yZElucHV0VHlwZTo6c2hvdWxkUmVz
cGVjdFNwZWVjaEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFzc3dvcmRJ
bnB1dFR5cGU6OmlzUGFzc3dvcmRGaWVsZCk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvUGFzc3dv
cmRJbnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL1JhZGlvSW5wdXRUeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvSW5wdXRUeXBlOjppc0tleWJvYXJkRm9jdXNhYmxl
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSYWRpb0lucHV0VHlwZTo6YXR0YWNoKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYWRpb0lucHV0VHlwZTo6c2hvdWxkU2VuZENoYW5nZUV2
ZW50QWZ0ZXJDaGVja2VkQ2hhbmdlZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9J
bnB1dFR5cGU6OndpbGxEaXNwYXRjaENsaWNrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpS
YWRpb0lucHV0VHlwZTo6ZGlkRGlzcGF0Y2hDbGljayk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmFkaW9JbnB1dFR5cGU6OmlzUmFkaW9CdXR0b24pOiBBZGRlZC4KKyAgICAgICAgKiBodG1s
L1JhZGlvSW5wdXRUeXBlLmg6IERpdHRvLgorCisgICAgICAgICogaHRtbC9SYW5nZUlucHV0VHlw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9u
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6bWluT3JNYXhBdHRy
aWJ1dGVDaGFuZ2VkKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6
ZmFsbGJhY2tWYWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6
OnNhbml0aXplVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlSW5wdXRUeXBl
OjpzaG91bGRSZXNwZWN0TGlzdEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvUmFu
Z2VJbnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL1Jlc2V0SW5wdXRUeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc2V0SW5wdXRUeXBlOjpkZWZhdWx0VmFsdWUpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc2V0SW5wdXRUeXBlOjppc1RleHRCdXR0b24pOiBBZGRl
ZC4KKyAgICAgICAgKiBodG1sL1Jlc2V0SW5wdXRUeXBlLmg6IERpdHRvLgorCisgICAgICAgICog
aHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoSW5wdXRU
eXBlOjpzaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpTZWFyY2hJbnB1dFR5cGU6OmlzU2VhcmNoRmllbGQpOiBBZGRlZC4KKyAgICAgICAgKiBo
dG1sL1NlYXJjaElucHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvU3VibWl0SW5w
dXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1Ym1pdElucHV0VHlwZTo6Y2FuQmVTdWNj
ZXNzZnVsU3VibWl0QnV0dG9uKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdWJtaXRJbnB1
dFR5cGU6OmRlZmF1bHRWYWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3VibWl0SW5w
dXRUeXBlOjppc1N1Ym1pdEJ1dHRvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3VibWl0
SW5wdXRUeXBlOjppc1RleHRCdXR0b24pOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL1N1Ym1pdElu
cHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvVGVsZXBob25lSW5wdXRUeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRlbGVwaG9uZUlucHV0VHlwZTo6c2hvdWxkUmVzcGVjdFNw
ZWVjaEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGVsZXBob25lSW5wdXRU
eXBlOjppc1RlbGVwaG9uZUZpZWxkKTogQWRkZWQuCisgICAgICAgICogaHRtbC9UZWxlcGhvbmVJ
bnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZFVzZUlucHV0
TWV0aG9kKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OnNh
bml0aXplVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlw
ZTo6c2hvdWxkUmVzcGVjdExpc3RBdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL1Rl
eHRGaWVsZElucHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvVGV4dElucHV0VHlw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SW5wdXRUeXBlOjpjYW5TZXRTdWdnZXN0ZWRW
YWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dElucHV0VHlwZTo6c2hvdWxkUmVz
cGVjdFNwZWVjaEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvVGV4dElucHV0VHlw
ZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvVGltZUlucHV0VHlwZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUaW1lSW5wdXRUeXBlOjpzY2FsZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIp
OiBGaXhlZAorICAgICAgICB0eXBvIGluIHRoZSBuYW1lIG9mIHRoaXMgZnVuY3Rpb24uCisgICAg
ICAgICogaHRtbC9UaW1lSW5wdXRUeXBlLmg6IERpdHRvLgorCisgICAgICAgICogaHRtbC9VUkxJ
bnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VVJMSW5wdXRUeXBlOjppc1VSTEZpZWxk
KTogQWRkZWQuCisgICAgICAgICogaHRtbC9VUkxJbnB1dFR5cGUuaDogRGl0dG8uCisKIDIwMTAt
MTItMzEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oCShyZXZpc2lvbiA3NDgzNSkKKysr
IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSwx
MiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGludCBzX21heGltdW1MZW5ndGg7CiAgICAg
c3RhdGljIGNvbnN0IGludCBzX2RlZmF1bHRTaXplOwogCisgICAgLy8gUmVwbGFjZXMgQ1JzIGFu
ZCBMRnMsIHNocmlua3MgdGhlIHZhbHVlIGZvciBzX21heGltdW1MZW5ndGguCisgICAgLy8gVGhp
cyBzaG91bGQgYmUgYXBwbGllZCB0byB2YWx1ZXMgZnJvbSB0aGUgSFRNTCB2YWx1ZSBhdHRyaWJ1
dGUgYW5kIHRoZSBET00gdmFsdWUgcHJvcGVydHkuCisgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91
bGQgYmUgY2FsbGVkIG9ubHkgYnkgc2FuaXRpemVWYWx1ZSgpIGltcGxlbWVudGF0aW9ucy4KKyAg
ICAvLyBQdWJsaWMgc28gaXQgY2FuIGJlIGNhbGxlZCBieSBJbnB1dFR5cGUuCisgICAgc3RhdGlj
IFN0cmluZyBzYW5pdGl6ZVZhbHVlRm9yVGV4dEZpZWxkKGNvbnN0IElucHV0RWxlbWVudCosIGNv
bnN0IFN0cmluZyYpOworCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hGb2N1
c0V2ZW50KElucHV0RWxlbWVudCosIEVsZW1lbnQqKTsKICAgICBzdGF0aWMgdm9pZCBkaXNwYXRj
aEJsdXJFdmVudChJbnB1dEVsZW1lbnQqLCBFbGVtZW50Kik7CkBAIC04MiwxMCArODgsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgdXBkYXRlU2VsZWN0aW9uUmFuZ2UoSW5wdXRFbGVt
ZW50KiwgRWxlbWVudCosIGludCBzdGFydCwgaW50IGVuZCk7CiAgICAgc3RhdGljIHZvaWQgYWJv
dXRUb1VubG9hZChJbnB1dEVsZW1lbnQqLCBFbGVtZW50Kik7CiAgICAgc3RhdGljIHZvaWQgc2V0
VmFsdWVGcm9tUmVuZGVyZXIoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0RWxlbWVudCosIEVsZW1l
bnQqLCBjb25zdCBTdHJpbmcmKTsKLSAgICAvLyBSZXBsYWNlcyBDUnMgYW5kIExGcywgc2hyaW5r
cyB0aGUgdmFsdWUgZm9yIHNfbWF4aW11bUxlbmd0aC4KLSAgICAvLyBUaGlzIHNob3VsZCBiZSBh
cHBsaWVkIHRvIHZhbHVlcyBmcm9tIHRoZSBIVE1MIHZhbHVlIGF0dHJpYnV0ZSBhbmQgdGhlIERP
TSB2YWx1ZSBwcm9wZXJ0eS4KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQg
b25seSBieSBzYW5pdGl6ZVZhbHVlKCkgaW1wbGVtZW50YXRpb25zLgotICAgIHN0YXRpYyBTdHJp
bmcgc2FuaXRpemVWYWx1ZUZvclRleHRGaWVsZChjb25zdCBJbnB1dEVsZW1lbnQqLCBjb25zdCBT
dHJpbmcmKTsKICAgICAvLyBSZXBsYWNlcyBDUnMgYW5kIExGcywgc2hyaW5rcyB0aGUgdmFsdWUg
Zm9yIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBsZW5ndGguCiAgICAgLy8gVGhpcyBzaG91bGQgYmUg
YXBwbGllZCB0byB2YWx1ZXMgc3BlY2lmaWVkIGJ5IHVzZXJzLgogICAgIC8vIFRoZSBpbnB1dCBz
dHJpbmcgbWF5IGJlIGEgZnJhZ21lbnQgb2YgdGhlIHdob2xlIHZhbHVlLgpJbmRleDogV2ViQ29y
ZS9odG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9CYXNlQnV0dG9uSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4MzUpCisrKyBXZWJDb3JlL2h0
bWwvQmFzZUJ1dHRvbklucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtODEsNCArODIsMTkgQEAg
UmVuZGVyT2JqZWN0KiBCYXNlQnV0dG9uSW5wdXRUeXBlOjpjcmVhdAogICAgIHJldHVybiBuZXcg
KGFyZW5hKSBSZW5kZXJCdXR0b24oZWxlbWVudCgpKTsKIH0KIAorLy8gRklYTUU6IENvdWxkIHNo
YXJlIHRoaXMgd2l0aCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlIGFuZCBSYW5nZUlucHV0VHlwZSBp
ZiB3ZSBoYWQgYSBjb21tb24gYmFzZSBjbGFzcy4KK3ZvaWQgQmFzZUJ1dHRvbklucHV0VHlwZTo6
YWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCkKK3sKKyAgICBJbnB1dFR5cGU6
OmFjY2Vzc0tleUFjdGlvbihzZW5kVG9BbnlFbGVtZW50KTsKKworICAgIC8vIFNlbmQgbW91c2Ug
YnV0dG9uIGV2ZW50cyBpZiB0aGUgY2FsbGVyIHNwZWNpZmllZCBzZW5kVG9BbnlFbGVtZW50Lgor
ICAgIC8vIEZJWE1FOiBUaGUgY29tbWVudCBhYm92ZSBpcyBubyBnb29kLiBJdCBzYXlzIHdoYXQg
d2UgZG8sIGJ1dCBub3Qgd2h5LgorICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hTaW11bGF0ZWRDbGlj
aygwLCBzZW5kVG9BbnlFbGVtZW50KTsKK30KKworYm9vbCBCYXNlQnV0dG9uSW5wdXRUeXBlOjpz
dG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpCit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvQmFzZUJ1dHRv
bklucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9CYXNlQnV0dG9uSW5wdXRU
eXBlLmgJKHJldmlzaW9uIDc0ODM1KQorKysgV2ViQ29yZS9odG1sL0Jhc2VCdXR0b25JbnB1dFR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVLZXlwcmVzc0V2ZW50KEtleWJvYXJkRXZlbnQqKTsKICAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlS2V5dXBFdmVudChLZXlib2FyZEV2ZW50Kik7CiAgICAgdmlydHVhbCBSZW5k
ZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVu
dCk7CisgICAgdmlydHVhbCBib29sIHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCk7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvQmFzZUNo
ZWNrYWJsZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0Jhc2VDaGVj
a2FibGVJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3NDgzNSkKKysrIFdlYkNvcmUvaHRtbC9CYXNl
Q2hlY2thYmxlSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC03Niw0ICs3NywzNCBAQCB2b2lk
IEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OmhhbmRsZUtleXByCiAgICAgfQogfQogCitib29sIEJh
c2VDaGVja2FibGVJbnB1dFR5cGU6OmNhblNldFN0cmluZ1ZhbHVlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKKy8vIEZJWE1FOiBDb3VsZCBzaGFyZSB0aGlzIHdpdGggQmFzZUJ1
dHRvbklucHV0VHlwZSBhbmQgUmFuZ2VJbnB1dFR5cGUgaWYgd2UgaGFkIGEgY29tbW9uIGJhc2Ug
Y2xhc3MuCit2b2lkIEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OmFjY2Vzc0tleUFjdGlvbihib29s
IHNlbmRUb0FueUVsZW1lbnQpCit7CisgICAgSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oc2Vu
ZFRvQW55RWxlbWVudCk7CisKKyAgICAvLyBTZW5kIG1vdXNlIGJ1dHRvbiBldmVudHMgaWYgdGhl
IGNhbGxlciBzcGVjaWZpZWQgc2VuZFRvQW55RWxlbWVudC4KKyAgICAvLyBGSVhNRTogVGhlIGNv
bW1lbnQgYWJvdmUgaXMgbm8gZ29vZC4gSXQgc2F5cyB3aGF0IHdlIGRvLCBidXQgbm90IHdoeS4K
KyAgICBlbGVtZW50KCktPmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soMCwgc2VuZFRvQW55RWxlbWVu
dCk7Cit9CisKK1N0cmluZyBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjpmYWxsYmFja1ZhbHVlKCkK
K3sKKyAgICByZXR1cm4gZWxlbWVudCgpLT5jaGVja2VkKCkgPyAib24iIDogIiI7Cit9CisKK2Jv
b2wgQmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1
dGUoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCYXNlQ2hlY2thYmxlSW5wdXRU
eXBlOjppc0NoZWNrYWJsZSgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9CYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0Jhc2VDaGVja2FibGVJbnB1dFR5cGUuaAkocmV2
aXNpb24gNzQ4MzUpCisrKyBXZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJsZUlucHV0VHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9p
ZCByZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIGhhbmRsZUtleXByZXNzRXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAgIHZp
cnR1YWwgYm9vbCBjYW5TZXRTdHJpbmdWYWx1ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBh
Y2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KTsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBmYWxsYmFja1ZhbHVlKCk7CisgICAgdmlydHVhbCBib29sIHN0b3Jlc1ZhbHVlU2VwYXJhdGVG
cm9tQXR0cmlidXRlKCk7CisgICAgdmlydHVhbCBib29sIGlzQ2hlY2thYmxlKCk7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1l
SW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1l
SW5wdXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4MzUpCisrKyBXZWJDb3JlL2h0bWwvQmFzZURhdGVB
bmRUaW1lSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDQgKzE3NCw5IEBAIFN0
cmluZyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNlcmlhbGkKICAgICByZXR1cm4gZGF0ZS50
b1N0cmluZyhEYXRlQ29tcG9uZW50czo6TWlsbGlzZWNvbmQpOwogfQogCitib29sIEJhc2VEYXRl
QW5kVGltZUlucHV0VHlwZTo6aGFzU3BpbkJ1dHRvbigpCit7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9CYXNlRGF0ZUFu
ZFRpbWVJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRU
aW1lSW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODM1KQorKysgV2ViQ29yZS9odG1sL0Jhc2VEYXRl
QW5kVGltZUlucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsMTAgQEAgcHJv
dGVjdGVkOgogICAgIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50KiBl
bGVtZW50KSA6IFRleHRGaWVsZElucHV0VHlwZShlbGVtZW50KSB7IH0KICAgICB2aXJ0dWFsIGRv
dWJsZSBwYXJzZVRvRG91YmxlKGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIHBhcnNlVG9EYXRlQ29tcG9uZW50cyhjb25zdCBTdHJpbmcmLCBEYXRlQ29tcG9u
ZW50cyopIGNvbnN0OwotICAgIC8vIEEgaGVscGVyIGZvciBwYXJzZVRvRGF0ZUNvbXBvbmVudHMo
KS4KLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VUb0RhdGVDb21wb25lbnRzSW50ZXJuYWwoY29uc3Qg
VUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIERhdGVDb21wb25lbnRzKikgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBzZXRNaWxsaXNlY29uZFRvRGF0ZUNvbXBvbmVudHMoZG91YmxlLCBEYXRl
Q29tcG9uZW50cyopIGNvbnN0ID0gMDsKIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VUb0RhdGVDb21wb25lbnRzSW50ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgs
IERhdGVDb21wb25lbnRzKikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzZXRNaWxsaXNl
Y29uZFRvRGF0ZUNvbXBvbmVudHMoZG91YmxlLCBEYXRlQ29tcG9uZW50cyopIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIGRvdWJsZSB2YWx1ZUFzRGF0ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRWYWx1ZUFzRGF0ZShkb3VibGUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICB2aXJ0
dWFsIGRvdWJsZSB2YWx1ZUFzTnVtYmVyKCkgY29uc3Q7CkBAIC02Miw2ICs2MSw3IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50Kik7
CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoV2hlZWxFdmVudCopOwogICAgIHZp
cnR1YWwgU3RyaW5nIHNlcmlhbGl6ZShkb3VibGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBo
YXNTcGluQnV0dG9uKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL2h0bWwvQmFzZVRleHRJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
QmFzZVRleHRJbnB1dFR5cGUuaAkocmV2aXNpb24gNzQ4MzUpCisrKyBXZWJDb3JlL2h0bWwvQmFz
ZVRleHRJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBCYXNlVGV4dElucHV0VHlwZSA6IHB1YmxpYyBUZXh0RmllbGRJ
bnB1dFR5cGUgewogcHJvdGVjdGVkOgogICAgIEJhc2VUZXh0SW5wdXRUeXBlKEhUTUxJbnB1dEVs
ZW1lbnQqIGVsZW1lbnQpIDogVGV4dEZpZWxkSW5wdXRUeXBlKGVsZW1lbnQpIHsgfQorcHJpdmF0
ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0VHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBwYXR0ZXJuTWlzbWF0Y2goY29uc3QgU3RyaW5nJikgY29uc3Q7CiB9OwpJbmRleDogV2ViQ29y
ZS9odG1sL0J1dHRvbklucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0J1
dHRvbklucHV0VHlwZS5jcHAJKHJldmlzaW9uIDc0ODM1KQorKysgV2ViQ29yZS9odG1sL0J1dHRv
bklucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDQgKzUwLDkgQEAgYm9vbCBCdXR0
b25JbnB1dFR5cGU6OnN1cHBvcnRzVmFsaWRhdGlvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAor
Ym9vbCBCdXR0b25JbnB1dFR5cGU6OmlzVGV4dEJ1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9C
dXR0b25JbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQnV0dG9uSW5wdXRU
eXBlLmgJKHJldmlzaW9uIDc0ODM1KQorKysgV2ViQ29yZS9odG1sL0J1dHRvbklucHV0VHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgQnV0dG9uSW5w
dXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogQmFzZUJ1dHRvbklucHV0VHlwZShl
bGVtZW50KSB7IH0KICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xU
eXBlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVmFsaWRhdGlvbigpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBpc1RleHRCdXR0b24oKSBjb25zdDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9DaGVja2JveElucHV0VHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NoZWNrYm94SW5wdXRUeXBlLmNwcAkocmV2aXNp
b24gNzQ4MzUpCisrKyBXZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKQEAgLTY2LDQgKzY3LDM4IEBAIHZvaWQgQ2hlY2tib3hJbnB1dFR5cGU6OmhhbmRsZUtleXVw
RXZlbnQKICAgICBkaXNwYXRjaFNpbXVsYXRlZENsaWNrSWZBY3RpdmUoZXZlbnQpOwogfQogCitQ
YXNzT3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gQ2hlY2tib3hJbnB1dFR5cGU6OndpbGxEaXNw
YXRjaENsaWNrKCkKK3sKKyAgICAvLyBBbiBldmVudCBoYW5kbGVyIGNhbiB1c2UgcHJldmVudERl
ZmF1bHQgb3IgInJldHVybiBmYWxzZSIgdG8gcmV2ZXJzZSB0aGUgY2hlY2tpbmcgd2UgZG8gaGVy
ZS4KKyAgICAvLyBUaGUgQ2xpY2tIYW5kbGluZ1N0YXRlIG9iamVjdCBjb250YWlucyB3aGF0IHdl
IG5lZWQgdG8gdW5kbyB3aGF0IHdlIGRpZCBoZXJlIGluIGRpZERpc3BhdGNoQ2xpY2suCisKKyAg
ICBPd25QdHI8Q2xpY2tIYW5kbGluZ1N0YXRlPiBzdGF0ZSA9IGFkb3B0UHRyKG5ldyBDbGlja0hh
bmRsaW5nU3RhdGUpOworCisgICAgc3RhdGUtPmNoZWNrZWQgPSBlbGVtZW50KCktPmNoZWNrZWQo
KTsKKyAgICBzdGF0ZS0+aW5kZXRlcm1pbmF0ZSA9IGVsZW1lbnQoKS0+aW5kZXRlcm1pbmF0ZSgp
OworCisgICAgaWYgKHN0YXRlLT5pbmRldGVybWluYXRlKQorICAgICAgICBlbGVtZW50KCktPnNl
dEluZGV0ZXJtaW5hdGUoZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgZWxlbWVudCgpLT5zZXRD
aGVja2VkKCFzdGF0ZS0+Y2hlY2tlZCwgdHJ1ZSk7CisKKyAgICByZXR1cm4gc3RhdGUucmVsZWFz
ZSgpOworfQorCit2b2lkIENoZWNrYm94SW5wdXRUeXBlOjpkaWREaXNwYXRjaENsaWNrKEV2ZW50
KiBldmVudCwgY29uc3QgQ2xpY2tIYW5kbGluZ1N0YXRlJiBzdGF0ZSkKK3sKKyAgICBpZiAoZXZl
bnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCBldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkgeworICAg
ICAgICBlbGVtZW50KCktPnNldEluZGV0ZXJtaW5hdGUoc3RhdGUuaW5kZXRlcm1pbmF0ZSk7Cisg
ICAgICAgIGVsZW1lbnQoKS0+c2V0Q2hlY2tlZChzdGF0ZS5jaGVja2VkKTsKKyAgICB9CisKKyAg
ICAvLyBUaGUgd29yayB3ZSBkaWQgaW4gd2lsbERpc3BhdGNoQ2xpY2sgd2FzIGRlZmF1bHQgaGFu
ZGxpbmcuCisgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKK2Jvb2wgQ2hlY2ti
b3hJbnB1dFR5cGU6OmlzQ2hlY2tib3goKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1
dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuaAko
cmV2aXNpb24gNzQ4MzUpCisrKyBXZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCB2
YWx1ZU1pc3NpbmcoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgdmFs
dWVNaXNzaW5nVGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXl1cEV2ZW50
KEtleWJvYXJkRXZlbnQqKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q2xpY2tIYW5kbGluZ1N0
YXRlPiB3aWxsRGlzcGF0Y2hDbGljaygpOworICAgIHZpcnR1YWwgdm9pZCBkaWREaXNwYXRjaENs
aWNrKEV2ZW50KiwgY29uc3QgQ2xpY2tIYW5kbGluZ1N0YXRlJik7CisgICAgdmlydHVhbCBib29s
IGlzQ2hlY2tib3goKSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvaHRtbC9EYXRlVGltZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4MzUpCisrKyBXZWJDb3Jl
L2h0bWwvRGF0ZVRpbWVJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3
IEBAIGRvdWJsZSBEYXRlVGltZUlucHV0VHlwZTo6c3RlcFNjYWxlRmFjdG8KICAgICByZXR1cm4g
ZGF0ZVRpbWVTdGVwU2NhbGVGYWN0b3I7CiB9CiAKLWJvb2wgRGF0ZVRpbWVJbnB1dFR5cGU6OnNj
YWxlZFN0ZXBWYWxldVNob3VsZEJlSW50ZWdlcigpIGNvbnN0Citib29sIERhdGVUaW1lSW5wdXRU
eXBlOjpzY2FsZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIoKSBjb25zdAogewogICAgIHJldHVy
biB0cnVlOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODM1
KQorKysgV2ViQ29yZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDcgKzQ3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGRvdWJsZSBtYXhpbXVtKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBkb3VibGUgZGVmYXVsdFN0ZXAoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGRvdWJsZSBzdGVwU2NhbGVGYWN0b3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2NhbGVk
U3RlcFZhbGV1U2hvdWxkQmVJbnRlZ2VyKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNjYWxl
ZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYXJz
ZVRvRGF0ZUNvbXBvbmVudHNJbnRlcm5hbChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwg
RGF0ZUNvbXBvbmVudHMqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2V0TWlsbGlzZWNvbmRU
b0RhdGVDb21wb25lbnRzKGRvdWJsZSwgRGF0ZUNvbXBvbmVudHMqKSBjb25zdDsKIH07CkluZGV4
OiBXZWJDb3JlL2h0bWwvRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3NDgzNSkK
KysrIFdlYkNvcmUvaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODUsNyArODUsNyBAQCBkb3VibGUgRGF0ZVRpbWVMb2NhbElucHV0VHlwZTo6c3RlcFNj
YWxlCiAgICAgcmV0dXJuIGRhdGVUaW1lTG9jYWxTdGVwU2NhbGVGYWN0b3I7CiB9CiAKLWJvb2wg
RGF0ZVRpbWVMb2NhbElucHV0VHlwZTo6c2NhbGVkU3RlcFZhbGV1U2hvdWxkQmVJbnRlZ2VyKCkg
Y29uc3QKK2Jvb2wgRGF0ZVRpbWVMb2NhbElucHV0VHlwZTo6c2NhbGVkU3RlcFZhbHVlU2hvdWxk
QmVJbnRlZ2VyKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFdlYkNvcmUv
aHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuaAkocmV2aXNpb24gNzQ4MzUpCisrKyBXZWJDb3JlL2h0
bWwvRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBkb3VibGUgbWF4aW11bSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgZG91YmxlIGRlZmF1bHRTdGVwKCkgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgc3Rl
cFNjYWxlRmFjdG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNjYWxlZFN0ZXBWYWxldVNo
b3VsZEJlSW50ZWdlcigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzY2FsZWRTdGVwVmFsdWVT
aG91bGRCZUludGVnZXIoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VUb0RhdGVDb21w
b25lbnRzSW50ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIERhdGVDb21wb25l
bnRzKikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9u
ZW50cyhkb3VibGUsIERhdGVDb21wb25lbnRzKikgY29uc3Q7CiB9OwpJbmRleDogV2ViQ29yZS9o
dG1sL0VtYWlsSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRW1haWxJ
bnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3NDgzNSkKKysrIFdlYkNvcmUvaHRtbC9FbWFpbElucHV0
VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDQgKzg1LDkgQEAgU3RyaW5nIEVtYWlsSW5w
dXRUeXBlOjp0eXBlTWlzbWF0Y2hUZXh0KAogICAgIHJldHVybiBlbGVtZW50KCktPm11bHRpcGxl
KCkgPyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvck11bHRpcGxlRW1haWxUZXh0KCkg
OiB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvckVtYWlsVGV4dCgpOwogfQogCitib29s
IEVtYWlsSW5wdXRUeXBlOjppc0VtYWlsRmllbGQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVl
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvRW1haWxJ
bnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRW1haWxJbnB1dFR5cGUuaAko
cmV2aXNpb24gNzQ4MzUpCisrKyBXZWJDb3JlL2h0bWwvRW1haWxJbnB1dFR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCB0eXBl
TWlzbWF0Y2hGb3IoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHR5cGVN
aXNtYXRjaCgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHR5cGVNaXNtYXRjaFRleHQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbWFpbEZpZWxkKCkgY29uc3Q7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3
NDgzNSkKKysrIFdlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI1LDgg
KzI1LDEwIEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVk
ZSAiRmlsZUxpc3QuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRm9ybURh
dGFMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC0zNCw2
ICszNiwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3VzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CisKK2lubGluZSBGaWxlSW5wdXRUeXBlOjpGaWxlSW5wdXRUeXBlKEhUTUxJbnB1dEVs
ZW1lbnQqIGVsZW1lbnQpCisgICAgOiBCYXNlQnV0dG9uSW5wdXRUeXBlKGVsZW1lbnQpCisgICAg
LCBtX2ZpbGVMaXN0KEZpbGVMaXN0OjpjcmVhdGUoKSkKK3sKK30KKwogUGFzc093blB0cjxJbnB1
dFR5cGU+IEZpbGVJbnB1dFR5cGU6OmNyZWF0ZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQog
ewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmlsZUlucHV0VHlwZShlbGVtZW50KSk7CkBAIC05
Niw0ICsxMDYsOTEgQEAgUmVuZGVyT2JqZWN0KiBGaWxlSW5wdXRUeXBlOjpjcmVhdGVSZW5kZQog
ICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbChlbGVtZW50KCkp
OwogfQogCitib29sIEZpbGVJbnB1dFR5cGU6OmNhblNldFN0cmluZ1ZhbHVlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRmlsZUlucHV0VHlwZTo6Y2FuQ2hhbmdlRnJv
bUFub3RoZXJUeXBlKCkgY29uc3QKK3sKKyAgICAvLyBEb24ndCBhbGxvdyB0aGUgdHlwZSB0byBi
ZSBjaGFuZ2VkIHRvIGZpbGUgYWZ0ZXIgdGhlIGZpcnN0IHR5cGUgY2hhbmdlLgorICAgIC8vIElu
IG90aGVyIGVuZ2luZXMgdGhpcyBtaWdodCBtZWFuIGEgSmF2YVNjcmlwdCBwcm9ncmFtbWVyIGNv
dWxkIHNldCBhIHRleHQKKyAgICAvLyBmaWVsZCdzIHZhbHVlIHRvIHNvbWV0aGluZyBsaWtlIC9l
dGMvcGFzc3dkIGFuZCB0aGVuIGNoYW5nZSBpdCB0byBhIGZpbGUgaW5wdXQuCisgICAgLy8gSSBk
b24ndCB0aGluayB0aGlzIHdvdWxkIGFjdHVhbGx5IG9jY3VyIGluIFdlYktpdCwgYnV0IHRoaXMg
cnVsZSBzdGlsbCBtYXkgYmUKKyAgICAvLyBpbXBvcnRhbnQgZm9yIGNvbXBhdGliaWxpdHkuCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitGaWxlTGlzdCogRmlsZUlucHV0VHlwZTo6ZmlsZXMoKQor
eworICAgIHJldHVybiBtX2ZpbGVMaXN0LmdldCgpOworfQorCitib29sIEZpbGVJbnB1dFR5cGU6
OmNhblNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgLy8gRm9yIHNlY3VyaXR5
IHJlYXNvbnMsIHdlIGRvbid0IGFsbG93IHNldHRpbmcgdGhlIGZpbGVuYW1lLCBidXQgd2UgZG8g
YWxsb3cgY2xlYXJpbmcgaXQuCisgICAgLy8gVGhlIEhUTUw1IHNwZWMgKGFzIG9mIHRoZSAxMC8y
NC8wOCB3b3JraW5nIGRyYWZ0KSBzYXlzIHRoYXQgdGhlIHZhbHVlIGF0dHJpYnV0ZSBpc24ndAor
ICAgIC8vIGFwcGxpY2FibGUgdG8gdGhlIGZpbGUgdXBsb2FkIGNvbnRyb2wgYXQgYWxsLCBidXQg
Zm9yIG5vdyB3ZSBhcmUga2VlcGluZyB0aGlzIGJlaGF2aW9yCisgICAgLy8gdG8gYXZvaWQgYnJl
YWtpbmcgZXhpc3Rpbmcgd2Vic2l0ZXMgdGhhdCBtYXkgYmUgcmVseWluZyBvbiB0aGlzLgorICAg
IHJldHVybiB2YWx1ZS5pc0VtcHR5KCk7Cit9CisKK2Jvb2wgRmlsZUlucHV0VHlwZTo6Z2V0VHlw
ZVNwZWNpZmljVmFsdWUoU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAobV9maWxlTGlzdC0+aXNF
bXB0eSgpKSB7CisgICAgICAgIHZhbHVlID0gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIC8vIEhUTUw1IHRlbGxzIHVzIHRoYXQgd2UncmUgc3VwcG9zZWQgdG8g
dXNlIHRoaXMgZ29vZnkgdmFsdWUgZm9yCisgICAgLy8gZmlsZSBpbnB1dCBjb250cm9scy4gSGlz
dG9yaWNhbGx5LCBicm93c2VycyByZXZlYWxlZCB0aGUgcmVhbAorICAgIC8vIGZpbGUgcGF0aCwg
YnV0IHRoYXQncyBhIHByaXZhY3kgcHJvYmxlbS4gQ29kZSBvbiB0aGUgd2ViCisgICAgLy8gZGVj
aWRlZCB0byB0cnkgdG8gcGFyc2UgdGhlIHZhbHVlIGJ5IGxvb2tpbmcgZm9yIGJhY2tzbGFzaGVz
CisgICAgLy8gKGJlY2F1c2UgdGhhdCdzIHdoYXQgV2luZG93cyBmaWxlIHBhdGhzIHVzZSkuIFRv
IGJlIGNvbXBhdGlibGUKKyAgICAvLyB3aXRoIHRoYXQgY29kZSwgd2UgbWFrZSB1cCBhIGZha2Ug
cGF0aCBmb3IgdGhlIGZpbGUuCisgICAgdmFsdWUgPSAiQzpcXGZha2VwYXRoXFwiICsgbV9maWxl
TGlzdC0+aXRlbSgwKS0+ZmlsZU5hbWUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBG
aWxlSW5wdXRUeXBlOjpzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpCit7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRmlsZUlucHV0VHlwZTo6c2V0RmlsZUxpc3QoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIG1fZmlsZUxpc3QtPmNsZWFyKCk7CisgICAg
c2l6ZV90IHNpemUgPSBwYXRocy5zaXplKCk7CisKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9B
RCkKKyAgICAvLyBJZiBhIGRpcmVjdG9yeSBpcyBiZWluZyBzZWxlY3RlZCwgdGhlIFVJIGFsbG93
cyBhIGRpcmVjdG9yeSB0byBiZSBjaG9zZW4KKyAgICAvLyBhbmQgdGhlIHBhdGhzIHByb3ZpZGVk
IGhlcmUgc2hhcmUgYSByb290IGRpcmVjdG9yeSBzb21ld2hlcmUgdXAgdGhlIHRyZWU7CisgICAg
Ly8gd2Ugd2FudCB0byBzdG9yZSBvbmx5IHRoZSByZWxhdGl2ZSBwYXRocyBmcm9tIHRoYXQgcG9p
bnQuCisgICAgaWYgKHNpemUgJiYgZWxlbWVudCgpLT5mYXN0SGFzQXR0cmlidXRlKHdlYmtpdGRp
cmVjdG9yeUF0dHIpKSB7CisgICAgICAgIC8vIEZpbmQgdGhlIGNvbW1vbiByb290IHBhdGguCisg
ICAgICAgIFN0cmluZyByb290UGF0aCA9IGRpcmVjdG9yeU5hbWUocGF0aHNbMF0pOworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgd2hpbGUg
KCFwYXRoc1tpXS5zdGFydHNXaXRoKHJvb3RQYXRoKSkKKyAgICAgICAgICAgICAgICByb290UGF0
aCA9IGRpcmVjdG9yeU5hbWUocm9vdFBhdGgpOworICAgICAgICB9CisgICAgICAgIHJvb3RQYXRo
ID0gZGlyZWN0b3J5TmFtZShyb290UGF0aCk7CisgICAgICAgIEFTU0VSVChyb290UGF0aC5sZW5n
dGgoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAg
ICAgICAgICAvLyBOb3JtYWxpemUgYmFja3NsYXNoZXMgdG8gc2xhc2hlcyBiZWZvcmUgZXhwb3Np
bmcgdGhlIHJlbGF0aXZlIHBhdGggdG8gc2NyaXB0LgorICAgICAgICAgICAgU3RyaW5nIHJlbGF0
aXZlUGF0aCA9IHBhdGhzW2ldLnN1YnN0cmluZygxICsgcm9vdFBhdGgubGVuZ3RoKCkpLnJlcGxh
Y2UoJ1xcJywnLycpOworICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0
ZShyZWxhdGl2ZVBhdGgsIHBhdGhzW2ldKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZgorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspCisg
ICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUocGF0aHNbaV0pKTsKK30KKwor
Ym9vbCBGaWxlSW5wdXRUeXBlOjppc0ZpbGVVcGxvYWQoKSBjb25zdAoreworICAgIHJldHVybiB0
cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvRmls
ZUlucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmgJ
KHJldmlzaW9uIDc0ODM1KQorKysgV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCkBAIC0zMiwyMSArMzMsMzQgQEAKICNkZWZpbmUgRmlsZUlucHV0VHlwZV9oCiAKICNpbmNs
dWRlICJCYXNlQnV0dG9uSW5wdXRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZpbGVMaXN0OworCiBjbGFzcyBGaWxlSW5wdXRU
eXBlIDogcHVibGljIEJhc2VCdXR0b25JbnB1dFR5cGUgewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzT3duUHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqKTsKIAogcHJpdmF0
ZToKLSAgICBGaWxlSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogQmFzZUJ1
dHRvbklucHV0VHlwZShlbGVtZW50KSB7IH0KKyAgICBGaWxlSW5wdXRUeXBlKEhUTUxJbnB1dEVs
ZW1lbnQqKTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBl
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYs
IGJvb2wpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCB2YWx1ZU1pc3NpbmcoY29uc3QgU3RyaW5n
JikgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgdmFsdWVNaXNzaW5nVGV4dCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50Kik7CiAgICAgdmly
dHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5
bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0U3RyaW5nVmFsdWUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgY2FuQ2hhbmdlRnJvbUFub3RoZXJUeXBlKCkgY29uc3Q7CisgICAg
dmlydHVhbCBGaWxlTGlzdCogZmlsZXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0VmFsdWUo
Y29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBib29sIGdldFR5cGVTcGVjaWZpY1ZhbHVlKFN0
cmluZyYpOyAvLyBDaGVja2VkIGZpcnN0LCBiZWZvcmUgaW50ZXJuYWwgc3RvcmFnZSBvciB0aGUg
dmFsdWUgYXR0cmlidXRlLgorICAgIHZpcnR1YWwgYm9vbCBzdG9yZXNWYWx1ZVNlcGFyYXRlRnJv
bUF0dHJpYnV0ZSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlTGlzdChjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGF0aHMpOworICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGVVcGxvYWQoKSBjb25zdDsK
KworICAgIFJlZlB0cjxGaWxlTGlzdD4gbV9maWxlTGlzdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDc0ODM1
KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IChhcEBueXBvcC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5p
ZyAoc2FtQHdlYmtpdC5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KQEAgLTgzLDE2ICs4MywxMyBAQCBjb25zdCBpbnQgbWF4U2F2ZWRS
ZXN1bHRzID0gMjU2OwogSFRNTElucHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVu
dCogZm9ybSkKICAgICA6IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50LCBmb3JtKQogICAgICwgbV9tYXhSZXN1bHRzKC0xKQotICAgICwgbV9kZXByZWNhdGVkVHlw
ZU51bWJlcihURVhUKQotICAgICwgbV9jaGVja2VkKGZhbHNlKQotICAgICwgbV9kZWZhdWx0Q2hl
Y2tlZChmYWxzZSkKLSAgICAsIG1fdXNlRGVmYXVsdENoZWNrZWQodHJ1ZSkKLSAgICAsIG1faW5k
ZXRlcm1pbmF0ZShmYWxzZSkKLSAgICAsIG1faGF2ZVR5cGUoZmFsc2UpCi0gICAgLCBtX2FjdGl2
ZVN1Ym1pdChmYWxzZSkKKyAgICAsIG1faXNDaGVja2VkKGZhbHNlKQorICAgICwgbV9yZWZsZWN0
c0NoZWNrZWRBdHRyaWJ1dGUodHJ1ZSkKKyAgICAsIG1faXNJbmRldGVybWluYXRlKGZhbHNlKQor
ICAgICwgbV9oYXNUeXBlKGZhbHNlKQorICAgICwgbV9pc0FjdGl2YXRlZFN1Ym1pdChmYWxzZSkK
ICAgICAsIG1fYXV0b2NvbXBsZXRlKFVuaW5pdGlhbGl6ZWQpCi0gICAgLCBtX2F1dG9maWxsZWQo
ZmFsc2UpCi0gICAgLCBtX2luaXRlZChmYWxzZSkKKyAgICAsIG1faXNBdXRvZmlsbGVkKGZhbHNl
KQogICAgICwgbV9pbnB1dFR5cGUoSW5wdXRUeXBlOjpjcmVhdGVUZXh0KHRoaXMpKQogewogICAg
IEFTU0VSVChoYXNUYWdOYW1lKGlucHV0VGFnKSB8fCBoYXNUYWdOYW1lKGlzaW5kZXhUYWcpKTsK
QEAgLTE2Nyw5ICsxNjQsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZUNoZWNrZWRS
YWRpCiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNWYWxpZFZhbHVlKGNvbnN0IFN0cmluZyYg
dmFsdWUpIGNvbnN0CiB7Ci0gICAgLy8gU2hvdWxkIG5vdCBjYWxsIGlzVmFsaWRWYWx1ZSgpIGZv
ciB0aGUgZm9sbG93aW5nIHR5cGVzIGJlY2F1c2UKLSAgICAvLyB3ZSBjYW4ndCBzZXQgc3RyaW5n
IHZhbHVlcyBmb3IgdGhlc2UgdHlwZXMuCi0gICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9
PSBDSEVDS0JPWCB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gRklMRSB8fCBkZXByZWNhdGVk
SW5wdXRUeXBlKCkgPT0gUkFESU8pIHsKKyAgICBpZiAoIW1faW5wdXRUeXBlLT5jYW5TZXRTdHJp
bmdWYWx1ZSgpKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQpAQCAtMjkzLDcgKzI4OCw3IEBAIGJvb2wgSFRNTElucHV0RWxlbWVu
dDo6Z2V0QWxsb3dlZFZhbHVlU3QKICAgICBkb3VibGUgc3RlcFNjYWxlRmFjdG9yID0gbV9pbnB1
dFR5cGUtPnN0ZXBTY2FsZUZhY3RvcigpOwogICAgIGlmICghaXNmaW5pdGUoZGVmYXVsdFN0ZXAp
IHx8ICFpc2Zpbml0ZShzdGVwU2NhbGVGYWN0b3IpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGVwU3RyaW5nID0gZ2V0QXR0cmlidXRlKHN0ZXBBdHRy
KTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0ZXBTdHJpbmcgPSBmYXN0R2V0QXR0cmlidXRl
KHN0ZXBBdHRyKTsKICAgICBpZiAoc3RlcFN0cmluZy5pc0VtcHR5KCkpIHsKICAgICAgICAgKnN0
ZXAgPSBkZWZhdWx0U3RlcCAqIHN0ZXBTY2FsZUZhY3RvcjsKICAgICAgICAgaWYgKGRlY2ltYWxQ
bGFjZXMpCkBAIC0zMjAsNyArMzE1LDcgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpnZXRBbGxv
d2VkVmFsdWVTdAogICAgICAgICBwYXJzZWQgPSBtYXgocm91bmQocGFyc2VkKSwgMS4wKTsKICAg
ICBkb3VibGUgcmVzdWx0ID0gcGFyc2VkICogc3RlcFNjYWxlRmFjdG9yOwogICAgIC8vIEZvciBk
YXRldGltZSwgZGF0ZXRpbWUtbG9jYWwsIHRpbWUsIHRoZSByZXN1bHQgc2hvdWxkIGJlIGFuIGlu
dGVnZXIuCi0gICAgaWYgKG1faW5wdXRUeXBlLT5zY2FsZWRTdGVwVmFsZXVTaG91bGRCZUludGVn
ZXIoKSkKKyAgICBpZiAobV9pbnB1dFR5cGUtPnNjYWxlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdl
cigpKQogICAgICAgICByZXN1bHQgPSBtYXgocm91bmQocmVzdWx0KSwgMS4wKTsKICAgICBBU1NF
UlQocmVzdWx0ID4gMCk7CiAgICAgKnN0ZXAgPSByZXN1bHQ7CkBAIC0zODksMzMgKzM4NCw5IEBA
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6c3RlcERvd24oaW50IG4sIEUKIAogYm9vbCBIVE1MSW5w
dXRFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25z
dAogewotICAgIC8vIElmIHRleHQgZmllbGRzIGNhbiBiZSBmb2N1c2VkLCB0aGVuIHRoZXkgc2hv
dWxkIGFsd2F5cyBiZSBrZXlib2FyZCBmb2N1c2FibGUKICAgICBpZiAoaXNUZXh0RmllbGQoKSkK
ICAgICAgICAgcmV0dXJuIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmlzRm9jdXNh
YmxlKCk7Ci0gICAgICAgIAotICAgIC8vIElmIHRoZSBiYXNlIGNsYXNzIHNheXMgd2UgY2FuJ3Qg
YmUgZm9jdXNlZCwgdGhlbiB3ZSBjYW4gc3RvcCBub3cuCi0gICAgaWYgKCFIVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlOjppc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBSQURJTykg
ewotICAgICAgICAvLyBXaGVuIHVzaW5nIFNwYXRpYWwgTmF2aWdhdGlvbiwgZXZlcnkgcmFkaW8g
YnV0dG9uIHNob3VsZCBiZSBmb2N1c2FibGUuCi0gICAgICAgIGlmIChpc1NwYXRpYWxOYXZpZ2F0
aW9uRW5hYmxlZChkb2N1bWVudCgpLT5mcmFtZSgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgICAgIC8vIE5ldmVyIGFsbG93IGtleWJvYXJkIHRhYmJpbmcgdG8gbGVhdmUgeW91
IGluIHRoZSBzYW1lIHJhZGlvIGdyb3VwLiAgQWx3YXlzCi0gICAgICAgIC8vIHNraXAgYW55IG90
aGVyIGVsZW1lbnRzIGluIHRoZSBncm91cC4KLSAgICAgICAgTm9kZSogY3VycmVudEZvY3VzZWRO
b2RlID0gZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRGb2N1
c2VkTm9kZSAmJiBjdXJyZW50Rm9jdXNlZE5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7Ci0g
ICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBmb2N1c2VkSW5wdXQgPSBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50Kj4oY3VycmVudEZvY3VzZWROb2RlKTsKLSAgICAgICAgICAgIGlmIChm
b2N1c2VkSW5wdXQtPmRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBSQURJTyAmJiBmb2N1c2VkSW5w
dXQtPmZvcm0oKSA9PSBmb3JtKCkgJiYgZm9jdXNlZElucHV0LT5uYW1lKCkgPT0gbmFtZSgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgLy8gQWxsb3cga2V5Ym9hcmQgZm9jdXMgaWYgd2UncmUgY2hlY2tlZCBvciBpZiBub3RoaW5n
IGluIHRoZSBncm91cCBpcyBjaGVja2VkLgotICAgICAgICByZXR1cm4gY2hlY2tlZCgpIHx8ICFj
aGVja2VkUmFkaW9CdXR0b25zKCkuY2hlY2tlZEJ1dHRvbkZvckdyb3VwKG5hbWUoKSk7Ci0gICAg
fQotICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlOjppc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSAmJiBtX2lucHV0VHlwZS0+
aXNLZXlib2FyZEZvY3VzYWJsZSgpOwogfQogCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzTW91
c2VGb2N1c2FibGUoKSBjb25zdApAQCAtNDQwLDExICs0MTEsNyBAQCB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OmFib3V0VG9VbmxvYWQoKQogCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnNob3VsZFVz
ZUlucHV0TWV0aG9kKCkgY29uc3QKIHsKLSAgICAvLyBUaGUgcmVhc29uIElNRSdzIGFyZSBkaXNh
YmxlZCBmb3IgdGhlIHBhc3N3b3JkIGZpZWxkIGlzIGJlY2F1c2UgSU1FcyAKLSAgICAvLyBjYW4g
YWNjZXNzIHRoZSB1bmRlcmx5aW5nIHBhc3N3b3JkIGFuZCBkaXNwbGF5IGl0IGluIGNsZWFyIHRl
eHQgLS0KLSAgICAvLyBlLmcuIHlvdSBjYW4gdXNlIGl0IHRvIGFjY2VzcyB0aGUgc3RvcmVkIHBh
c3N3b3JkIGZvciBhbnkgc2l0ZSAKLSAgICAvLyB3aXRoIG9ubHkgdHJpdmlhbCBlZmZvcnQuCi0g
ICAgcmV0dXJuIGlzVGV4dEZpZWxkKCkgJiYgZGVwcmVjYXRlZElucHV0VHlwZSgpICE9IFBBU1NX
T1JEOworICAgIHJldHVybiBtX2lucHV0VHlwZS0+c2hvdWxkVXNlSW5wdXRNZXRob2QoKTsKIH0K
IAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpoYW5kbGVGb2N1c0V2ZW50KCkKQEAgLTQ1NCwxMzUg
KzQyMSw5MiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmhhbmRsZUZvY3VzRXZlbnQoCiAKIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6aGFuZGxlQmx1ckV2ZW50KCkKIHsKLSAgICBpZiAoZGVwcmVj
YXRlZElucHV0VHlwZSgpID09IE5VTUJFUikgewotICAgICAgICAvLyBSZXNldCB0aGUgcmVuZGVy
ZXIgdmFsdWUsIHdoaWNoIG1pZ2h0IGJlIHVubWF0Y2hlZCB3aXRoIHRoZSBlbGVtZW50IHZhbHVl
LgotICAgICAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKLSAg
ICAgICAgLy8gV2UgbmVlZCB0byByZXNldCB0aGUgcmVuZGVyZXIgdmFsdWUgZXhwbGljaXRseSBi
ZWNhdXNlIGFuIHVuYWNjZXB0YWJsZQotICAgICAgICAvLyByZW5kZXJlciB2YWx1ZSBzaG91bGQg
YmUgcHVyZ2VkIGJlZm9yZSBzdHlsZSBjYWxjdWxhdGlvbi4KLSAgICAgICAgaWYgKHJlbmRlcmVy
KCkpCi0gICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIH0K
KyAgICBtX2lucHV0VHlwZS0+aGFuZGxlQmx1ckV2ZW50KCk7CiAgICAgSW5wdXRFbGVtZW50Ojpk
aXNwYXRjaEJsdXJFdmVudCh0aGlzLCB0aGlzKTsKIH0KIAotdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpzZXRUeXBlKGNvbnN0IFN0cmluZyYgdCkKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VHlw
ZShjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGp1c3Qg
Y2FsbCBzZXRBdHRyaWJ1dGUuIE5vIHJlYXNvbiB0byBoYW5kbGUgdGhlIGVtcHR5IHN0cmluZyBz
cGVjaWFsbHkuCiAgICAgLy8gV2Ugc2hvdWxkIHdyaXRlIGEgdGVzdCBjYXNlIHRvIHNob3cgdGhh
dCBzZXR0aW5nIHRvIHRoZSBlbXB0eSBzdHJpbmcgZG9lcyBub3QgcmVtb3ZlIHRoZQogICAgIC8v
IGF0dHJpYnV0ZSBpbiBvdGhlciBicm93c2VycyBhbmQgdGhlbiBmaXggdGhpcy4gTm90ZSB0aGF0
IHNldHRpbmcgdG8gbnVsbCAqZG9lcyogcmVtb3ZlCiAgICAgLy8gdGhlIGF0dHJpYnV0ZSBhbmQg
c2V0QXR0cmlidXRlIGltcGxlbWVudHMgdGhhdC4KLSAgICBpZiAodC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgaW50IGV4Y2NvZGU7Ci0gICAgICAgIHJlbW92ZUF0dHJpYnV0ZSh0eXBlQXR0ciwgZXhj
Y29kZSk7CisgICAgaWYgKHR5cGUuaXNFbXB0eSgpKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUg
ZWM7CisgICAgICAgIHJlbW92ZUF0dHJpYnV0ZSh0eXBlQXR0ciwgZWMpOwogICAgIH0gZWxzZQot
ICAgICAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHQpOwotfQotCi1QYXNzT3duUHRyPEhUTUxJ
bnB1dEVsZW1lbnQ6OklucHV0VHlwZU1hcD4gSFRNTElucHV0RWxlbWVudDo6Y3JlYXRlVHlwZU1h
cCgpCi17Ci0gICAgT3duUHRyPElucHV0VHlwZU1hcD4gbWFwID0gYWRvcHRQdHIobmV3IElucHV0
VHlwZU1hcCk7Ci0gICAgbWFwLT5hZGQoImJ1dHRvbiIsIEJVVFRPTik7Ci0gICAgbWFwLT5hZGQo
ImNoZWNrYm94IiwgQ0hFQ0tCT1gpOwotICAgIG1hcC0+YWRkKCJjb2xvciIsIENPTE9SKTsKLSAg
ICBtYXAtPmFkZCgiZGF0ZSIsIERBVEUpOwotICAgIG1hcC0+YWRkKCJkYXRldGltZSIsIERBVEVU
SU1FKTsKLSAgICBtYXAtPmFkZCgiZGF0ZXRpbWUtbG9jYWwiLCBEQVRFVElNRUxPQ0FMKTsKLSAg
ICBtYXAtPmFkZCgiZW1haWwiLCBFTUFJTCk7Ci0gICAgbWFwLT5hZGQoImZpbGUiLCBGSUxFKTsK
LSAgICBtYXAtPmFkZCgiaGlkZGVuIiwgSElEREVOKTsKLSAgICBtYXAtPmFkZCgiaW1hZ2UiLCBJ
TUFHRSk7Ci0gICAgbWFwLT5hZGQoImtodG1sX2lzaW5kZXgiLCBJU0lOREVYKTsKLSAgICBtYXAt
PmFkZCgibW9udGgiLCBNT05USCk7Ci0gICAgbWFwLT5hZGQoIm51bWJlciIsIE5VTUJFUik7Ci0g
ICAgbWFwLT5hZGQoInBhc3N3b3JkIiwgUEFTU1dPUkQpOwotICAgIG1hcC0+YWRkKCJyYWRpbyIs
IFJBRElPKTsKLSAgICBtYXAtPmFkZCgicmFuZ2UiLCBSQU5HRSk7Ci0gICAgbWFwLT5hZGQoInJl
c2V0IiwgUkVTRVQpOwotICAgIG1hcC0+YWRkKCJzZWFyY2giLCBTRUFSQ0gpOwotICAgIG1hcC0+
YWRkKCJzdWJtaXQiLCBTVUJNSVQpOwotICAgIG1hcC0+YWRkKCJ0ZWwiLCBURUxFUEhPTkUpOwot
ICAgIG1hcC0+YWRkKCJ0aW1lIiwgVElNRSk7Ci0gICAgbWFwLT5hZGQoInVybCIsIFVSTCk7Ci0g
ICAgbWFwLT5hZGQoIndlZWsiLCBXRUVLKTsKLSAgICAvLyBObyBuZWVkIHRvIHJlZ2lzdGVyICJ0
ZXh0IiBiZWNhdXNlIGl0IGlzIHRoZSBkZWZhdWx0IHR5cGUuCi0gICAgcmV0dXJuIG1hcC5yZWxl
YXNlKCk7CisgICAgICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdHlwZSk7CiB9CiAKIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6dXBkYXRlVHlwZSgpCiB7Ci0gICAgc3RhdGljIGNvbnN0IElucHV0
VHlwZU1hcCogdHlwZU1hcCA9IGNyZWF0ZVR5cGVNYXAoKS5sZWFrUHRyKCk7CiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlU3RyaW5nID0gZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci0g
ICAgRGVwcmVjYXRlZElucHV0VHlwZSBuZXdUeXBlID0gdHlwZVN0cmluZy5pc0VtcHR5KCkgPyBU
RVhUIDogdHlwZU1hcC0+Z2V0KHR5cGVTdHJpbmcpOwogCi0gICAgLy8gSU1QT1JUQU5UOiBEb24n
dCBhbGxvdyB0aGUgdHlwZSB0byBiZSBjaGFuZ2VkIHRvIEZJTEUgYWZ0ZXIgdGhlIGZpcnN0Ci0g
ICAgLy8gdHlwZSBjaGFuZ2UsIG90aGVyd2lzZSBhIEphdmFTY3JpcHQgcHJvZ3JhbW1lciB3b3Vs
ZCBiZSBhYmxlIHRvIHNldCBhIHRleHQKLSAgICAvLyBmaWVsZCdzIHZhbHVlIHRvIHNvbWV0aGlu
ZyBsaWtlIC9ldGMvcGFzc3dkIGFuZCB0aGVuIGNoYW5nZSBpdCB0byBhIGZpbGUgZmllbGQuCi0g
ICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSAhPSBuZXdUeXBlKSB7Ci0gICAgICAgIGlmIChu
ZXdUeXBlID09IEZJTEUgJiYgbV9oYXZlVHlwZSkKLSAgICAgICAgICAgIC8vIFNldCB0aGUgYXR0
cmlidXRlIGJhY2sgdG8gdGhlIG9sZCB2YWx1ZS4KLSAgICAgICAgICAgIC8vIFVzZWZ1bCBpbiBj
YXNlIHdlIHdlcmUgY2FsbGVkIGZyb20gaW5zaWRlIHBhcnNlTWFwcGVkQXR0cmlidXRlLgotICAg
ICAgICAgICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB0eXBlKCkpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24odGhpcyk7Cisg
ICAgT3duUHRyPElucHV0VHlwZT4gbmV3VHlwZSA9IElucHV0VHlwZTo6Y3JlYXRlKHRoaXMsIHR5
cGVTdHJpbmcpOwogCi0gICAgICAgICAgICBpZiAobmV3VHlwZSA9PSBGSUxFICYmICFtX2ZpbGVM
aXN0KQotICAgICAgICAgICAgICAgIG1fZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRlKCk7Cisg
ICAgaWYgKG1faGFzVHlwZSAmJiAhbmV3VHlwZS0+Y2FuQ2hhbmdlRnJvbUFub3RoZXJUeXBlKCkp
IHsKKyAgICAgICAgLy8gU2V0IHRoZSBhdHRyaWJ1dGUgYmFjayB0byB0aGUgb2xkIHZhbHVlLgor
ICAgICAgICAvLyBVc2VmdWwgaW4gY2FzZSB3ZSB3ZXJlIGNhbGxlZCBmcm9tIGluc2lkZSBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZS4KKyAgICAgICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB0eXBlKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgICAgICAgICBib29sIHdhc0F0dGFjaGVk
ID0gYXR0YWNoZWQoKTsKLSAgICAgICAgICAgIGlmICh3YXNBdHRhY2hlZCkKLSAgICAgICAgICAg
ICAgICBkZXRhY2goKTsKLQotICAgICAgICAgICAgYm9vbCBkaWRTdG9yZVZhbHVlID0gc3RvcmVz
VmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKTsKLSAgICAgICAgICAgIGJvb2wgd2FzUGFzc3dv
cmRGaWVsZCA9IGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBQQVNTV09SRDsKLSAgICAgICAgICAg
IGJvb2wgZGlkUmVzcGVjdEhlaWdodEFuZFdpZHRoID0gcmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0
cnMoKTsKLSAgICAgICAgICAgIG1fZGVwcmVjYXRlZFR5cGVOdW1iZXIgPSBuZXdUeXBlOwotICAg
ICAgICAgICAgbV9pbnB1dFR5cGUgPSBJbnB1dFR5cGU6OmNyZWF0ZSh0aGlzLCB0eXBlU3RyaW5n
KTsKLSAgICAgICAgICAgIHNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKTsKLSAgICAgICAgICAg
IGJvb2wgd2lsbFN0b3JlVmFsdWUgPSBzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgp
OwotICAgICAgICAgICAgYm9vbCBpc1Bhc3N3b3JkRmllbGQgPSBkZXByZWNhdGVkSW5wdXRUeXBl
KCkgPT0gUEFTU1dPUkQ7Ci0gICAgICAgICAgICBib29sIHdpbGxSZXNwZWN0SGVpZ2h0QW5kV2lk
dGggPSByZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRycygpOwotCi0gICAgICAgICAgICBpZiAoZGlk
U3RvcmVWYWx1ZSAmJiAhd2lsbFN0b3JlVmFsdWUgJiYgIW1fZGF0YS52YWx1ZSgpLmlzTnVsbCgp
KSB7Ci0gICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlKHZhbHVlQXR0ciwgbV9kYXRhLnZhbHVl
KCkpOwotICAgICAgICAgICAgICAgIG1fZGF0YS5zZXRWYWx1ZShTdHJpbmcoKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoIWRpZFN0b3JlVmFsdWUgJiYgd2lsbFN0b3JlVmFsdWUp
Ci0gICAgICAgICAgICAgICAgbV9kYXRhLnNldFZhbHVlKHNhbml0aXplVmFsdWUoZ2V0QXR0cmli
dXRlKHZhbHVlQXR0cikpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBJbnB1
dEVsZW1lbnQ6OnVwZGF0ZVZhbHVlSWZOZWVkZWQobV9kYXRhLCB0aGlzKTsKKyAgICBtX2hhc1R5
cGUgPSB0cnVlOwogCi0gICAgICAgICAgICBpZiAod2FzUGFzc3dvcmRGaWVsZCAmJiAhaXNQYXNz
d29yZEZpZWxkKQotICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJGb3JBY3RpdmF0aW9uQ2FsbGJh
Y2tJZk5lZWRlZCgpOwotICAgICAgICAgICAgZWxzZSBpZiAoIXdhc1Bhc3N3b3JkRmllbGQgJiYg
aXNQYXNzd29yZEZpZWxkKQotICAgICAgICAgICAgICAgIHJlZ2lzdGVyRm9yQWN0aXZhdGlvbkNh
bGxiYWNrSWZOZWVkZWQoKTsKKyAgICBpZiAobV9pbnB1dFR5cGUtPmZvcm1Db250cm9sVHlwZSgp
ID09IG5ld1R5cGUtPmZvcm1Db250cm9sVHlwZSgpKQorICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgICAgIGlmIChkaWRSZXNwZWN0SGVpZ2h0QW5kV2lkdGggIT0gd2lsbFJlc3BlY3RIZWlnaHRB
bmRXaWR0aCkgewotICAgICAgICAgICAgICAgIE5hbWVkTm9kZU1hcCogbWFwID0gYXR0cmlidXRl
TWFwKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1hcCk7Ci0gICAgICAgICAgICAgICAgaWYg
KEF0dHJpYnV0ZSogaGVpZ2h0ID0gbWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGhlaWdodEF0dHIpKQot
ICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkKGhlaWdodCwgZmFsc2UpOwotICAg
ICAgICAgICAgICAgIGlmIChBdHRyaWJ1dGUqIHdpZHRoID0gbWFwLT5nZXRBdHRyaWJ1dGVJdGVt
KHdpZHRoQXR0cikpCi0gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQod2lkdGgs
IGZhbHNlKTsKLSAgICAgICAgICAgICAgICBpZiAoQXR0cmlidXRlKiBhbGlnbiA9IG1hcC0+Z2V0
QXR0cmlidXRlSXRlbShhbGlnbkF0dHIpKQotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVD
aGFuZ2VkKGFsaWduLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh3
YXNBdHRhY2hlZCkgewotICAgICAgICAgICAgICAgIGF0dGFjaCgpOwotICAgICAgICAgICAgICAg
IGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IHRoaXMpCi0gICAgICAgICAgICAgICAg
ICAgIHVwZGF0ZUZvY3VzQXBwZWFyYW5jZSh0cnVlKTsKLSAgICAgICAgICAgIH0KKyAgICBjaGVj
a2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKHRoaXMpOwogCi0gICAgICAgICAgICBjaGVj
a2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwotICAgICAgICB9CisgICAgYm9vbCB3
YXNBdHRhY2hlZCA9IGF0dGFjaGVkKCk7CisgICAgaWYgKHdhc0F0dGFjaGVkKQorICAgICAgICBk
ZXRhY2goKTsKIAotICAgICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKLSAgICAgICAgSW5w
dXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMpOworICAgIGJvb2wgZGlkU3Rv
cmVWYWx1ZSA9IG1faW5wdXRUeXBlLT5zdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgp
OworICAgIGJvb2wgbmVlZGVkQWN0aXZhdGlvbkNhbGxiYWNrID0gbmVlZHNBY3RpdmF0aW9uQ2Fs
bGJhY2soKTsKKyAgICBib29sIGRpZFJlc3BlY3RIZWlnaHRBbmRXaWR0aCA9IG1faW5wdXRUeXBl
LT5zaG91bGRSZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRyaWJ1dGVzKCk7CisKKyAgICBtX2lucHV0
VHlwZSA9IG5ld1R5cGUucmVsZWFzZSgpOworCisgICAgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVj
aygpOworCisgICAgYm9vbCB3aWxsU3RvcmVWYWx1ZSA9IG1faW5wdXRUeXBlLT5zdG9yZXNWYWx1
ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpOworCisgICAgaWYgKGRpZFN0b3JlVmFsdWUgJiYgIXdp
bGxTdG9yZVZhbHVlICYmICFtX2RhdGEudmFsdWUoKS5pc051bGwoKSkgeworICAgICAgICBzZXRB
dHRyaWJ1dGUodmFsdWVBdHRyLCBtX2RhdGEudmFsdWUoKSk7CisgICAgICAgIG1fZGF0YS5zZXRW
YWx1ZShTdHJpbmcoKSk7CisgICAgfQorICAgIGlmICghZGlkU3RvcmVWYWx1ZSAmJiB3aWxsU3Rv
cmVWYWx1ZSkKKyAgICAgICAgbV9kYXRhLnNldFZhbHVlKHNhbml0aXplVmFsdWUoZmFzdEdldEF0
dHJpYnV0ZSh2YWx1ZUF0dHIpKSk7CisgICAgZWxzZQorICAgICAgICBJbnB1dEVsZW1lbnQ6OnVw
ZGF0ZVZhbHVlSWZOZWVkZWQobV9kYXRhLCB0aGlzKTsKKworICAgIGlmIChuZWVkZWRBY3RpdmF0
aW9uQ2FsbGJhY2spCisgICAgICAgIHVucmVnaXN0ZXJGb3JBY3RpdmF0aW9uQ2FsbGJhY2tJZk5l
ZWRlZCgpOworICAgIGVsc2UKKyAgICAgICAgcmVnaXN0ZXJGb3JBY3RpdmF0aW9uQ2FsbGJhY2tJ
Zk5lZWRlZCgpOworCisgICAgaWYgKGRpZFJlc3BlY3RIZWlnaHRBbmRXaWR0aCAhPSBtX2lucHV0
VHlwZS0+c2hvdWxkUmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0cmlidXRlcygpKSB7CisgICAgICAg
IE5hbWVkTm9kZU1hcCogbWFwID0gYXR0cmlidXRlTWFwKCk7CisgICAgICAgIEFTU0VSVChtYXAp
OworICAgICAgICBpZiAoQXR0cmlidXRlKiBoZWlnaHQgPSBtYXAtPmdldEF0dHJpYnV0ZUl0ZW0o
aGVpZ2h0QXR0cikpCisgICAgICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkKGhlaWdodCwgZmFsc2Up
OworICAgICAgICBpZiAoQXR0cmlidXRlKiB3aWR0aCA9IG1hcC0+Z2V0QXR0cmlidXRlSXRlbSh3
aWR0aEF0dHIpKQorICAgICAgICAgICAgYXR0cmlidXRlQ2hhbmdlZCh3aWR0aCwgZmFsc2UpOwor
ICAgICAgICBpZiAoQXR0cmlidXRlKiBhbGlnbiA9IG1hcC0+Z2V0QXR0cmlidXRlSXRlbShhbGln
bkF0dHIpKQorICAgICAgICAgICAgYXR0cmlidXRlQ2hhbmdlZChhbGlnbiwgZmFsc2UpOwogICAg
IH0KLSAgICBtX2hhdmVUeXBlID0gdHJ1ZTsKIAotICAgIGlmIChkZXByZWNhdGVkSW5wdXRUeXBl
KCkgIT0gSU1BR0UgJiYgbV9pbWFnZUxvYWRlcikKLSAgICAgICAgbV9pbWFnZUxvYWRlci5jbGVh
cigpOworICAgIGlmICh3YXNBdHRhY2hlZCkgeworICAgICAgICBhdHRhY2goKTsKKyAgICAgICAg
aWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgPT0gdGhpcykKKyAgICAgICAgICAgIHVwZGF0
ZUZvY3VzQXBwZWFyYW5jZSh0cnVlKTsKKyAgICB9CisKKyAgICBjaGVja2VkUmFkaW9CdXR0b25z
KCkuYWRkQnV0dG9uKHRoaXMpOworCisgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CisgICAg
SW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMpOwogfQogCiBjb25zdCBB
dG9taWNTdHJpbmcmIEhUTUxJbnB1dEVsZW1lbnQ6OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0CkBA
IC02MTQsNTggKzUzOCwyMiBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmNhbkhhdmVTZWxlY3Rp
b24oCiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6YWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRv
QW55RWxlbWVudCkKIHsKLSAgICBzd2l0Y2ggKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSkgewotICAg
IGNhc2UgQlVUVE9OOgotICAgIGNhc2UgQ0hFQ0tCT1g6Ci0gICAgY2FzZSBGSUxFOgotICAgIGNh
c2UgSU1BR0U6Ci0gICAgY2FzZSBSQURJTzoKLSAgICBjYXNlIFJBTkdFOgotICAgIGNhc2UgUkVT
RVQ6Ci0gICAgY2FzZSBTVUJNSVQ6Ci0gICAgICAgIGZvY3VzKGZhbHNlKTsKLSAgICAgICAgLy8g
c2VuZCB0aGUgbW91c2UgYnV0dG9uIGV2ZW50cyBpZmYgdGhlIGNhbGxlciBzcGVjaWZpZWQgc2Vu
ZFRvQW55RWxlbWVudAotICAgICAgICBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKDAsIHNlbmRUb0Fu
eUVsZW1lbnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEhJRERFTjoKLSAgICAgICAgLy8g
YSBuby1vcCBmb3IgdGhpcyB0eXBlCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ09MT1I6Ci0g
ICAgY2FzZSBEQVRFOgotICAgIGNhc2UgREFURVRJTUU6Ci0gICAgY2FzZSBEQVRFVElNRUxPQ0FM
OgotICAgIGNhc2UgRU1BSUw6Ci0gICAgY2FzZSBJU0lOREVYOgotICAgIGNhc2UgTU9OVEg6Ci0g
ICAgY2FzZSBOVU1CRVI6Ci0gICAgY2FzZSBQQVNTV09SRDoKLSAgICBjYXNlIFNFQVJDSDoKLSAg
ICBjYXNlIFRFTEVQSE9ORToKLSAgICBjYXNlIFRFWFQ6Ci0gICAgY2FzZSBUSU1FOgotICAgIGNh
c2UgVVJMOgotICAgIGNhc2UgV0VFSzoKLSAgICAgICAgLy8gc2hvdWxkIG5ldmVyIHJlc3RvcmUg
cHJldmlvdXMgc2VsZWN0aW9uIGhlcmUKLSAgICAgICAgZm9jdXMoZmFsc2UpOwotICAgICAgICAg
YnJlYWs7Ci0gICAgfQorICAgIG1faW5wdXRUeXBlLT5hY2Nlc3NLZXlBY3Rpb24oc2VuZFRvQW55
RWxlbWVudCk7CiB9CiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29u
c3QKIHsKLSAgICBpZiAoKChhdHRyTmFtZSA9PSBoZWlnaHRBdHRyIHx8IGF0dHJOYW1lID09IHdp
ZHRoQXR0cikgJiYgcmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0cnMoKSkKKyAgICBpZiAoKChhdHRy
TmFtZSA9PSBoZWlnaHRBdHRyIHx8IGF0dHJOYW1lID09IHdpZHRoQXR0cikgJiYgbV9pbnB1dFR5
cGUtPnNob3VsZFJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJpYnV0ZXMoKSkKICAgICAgICAgfHwg
YXR0ck5hbWUgPT0gdnNwYWNlQXR0ciAKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gaHNwYWNlQXR0
cikgewogICAgICAgICByZXN1bHQgPSBlVW5pdmVyc2FsOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfSAKIAotICAgIGlmIChhdHRyTmFtZSA9PSBhbGlnbkF0dHIpIHsKLSAgICAgICAgaWYg
KGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBJTUFHRSkgewotICAgICAgICAgICAgLy8gU2hhcmUg
d2l0aCA8aW1nPiBzaW5jZSB0aGUgYWxpZ25tZW50IGJlaGF2aW9yIGlzIHRoZSBzYW1lLgotICAg
ICAgICAgICAgcmVzdWx0ID0gZVJlcGxhY2VkOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9CisgICAgaWYgKGF0dHJOYW1lID09IGFsaWduQXR0ciAmJiBtX2lucHV0VHlwZS0+
c2hvdWxkUmVzcGVjdEFsaWduQXR0cmlidXRlKCkpIHsKKyAgICAgICAgLy8gU2hhcmUgd2l0aCA8
aW1nPiBzaW5jZSB0aGUgYWxpZ25tZW50IGJlaGF2aW9yIGlzIHRoZSBzYW1lLgorICAgICAgICBy
ZXN1bHQgPSBlUmVwbGFjZWQ7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBy
ZXR1cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnkoYXR0ck5hbWUsIHJlc3VsdCk7CkBAIC03MDIs
MTAgKzU5MCw5IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAg
ICAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7CiAgICAgICAg
IHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IGNoZWNrZWRBdHRyKSB7Ci0gICAgICAgIG1fZGVmYXVsdENoZWNrZWQgPSAhYXR0ci0+aXNOdWxs
KCk7Ci0gICAgICAgIGlmIChtX3VzZURlZmF1bHRDaGVja2VkKSB7Ci0gICAgICAgICAgICBzZXRD
aGVja2VkKG1fZGVmYXVsdENoZWNrZWQpOwotICAgICAgICAgICAgbV91c2VEZWZhdWx0Q2hlY2tl
ZCA9IHRydWU7CisgICAgICAgIGlmIChtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0ZSkgeworICAg
ICAgICAgICAgc2V0Q2hlY2tlZCghYXR0ci0+aXNOdWxsKCkpOworICAgICAgICAgICAgbV9yZWZs
ZWN0c0NoZWNrZWRBdHRyaWJ1dGUgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHNldE5lZWRz
VmFsaWRpdHlDaGVjaygpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1heGxlbmd0
aEF0dHIpIHsKQEAgLTcxNCwxNSArNjAxLDExIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWIKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzaXplQXR0cikK
ICAgICAgICAgSW5wdXRFbGVtZW50OjpwYXJzZVNpemVBdHRyaWJ1dGUobV9kYXRhLCB0aGlzLCBh
dHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWx0QXR0cikgewotICAgICAgICBp
ZiAocmVuZGVyZXIoKSAmJiBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gSU1BR0UpCisgICAgICAg
IGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzUmVuZGVySW1hZ2UoKSkKICAgICAgICAg
ICAgIHRvUmVuZGVySW1hZ2UocmVuZGVyZXIoKSktPnVwZGF0ZUFsdFRleHQoKTsKLSAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzcmNBdHRyKSB7Ci0gICAgICAgIGlmIChyZW5kZXJlcigp
ICYmIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBJTUFHRSkgewotICAgICAgICAgICAgaWYgKCFt
X2ltYWdlTG9hZGVyKQotICAgICAgICAgICAgICAgIG1faW1hZ2VMb2FkZXIgPSBhZG9wdFB0cihu
ZXcgSFRNTEltYWdlTG9hZGVyKHRoaXMpKTsKLSAgICAgICAgICAgIG1faW1hZ2VMb2FkZXItPnVw
ZGF0ZUZyb21FbGVtZW50SWdub3JpbmdQcmV2aW91c0Vycm9yKCk7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB1c2VtYXBBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBh
Y2Nlc3NrZXlBdHRyKSB7CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc3JjQXR0cikK
KyAgICAgICAgbV9pbnB1dFR5cGUtPnNyY0F0dHJpYnV0ZUNoYW5nZWQoKTsKKyAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gdXNlbWFwQXR0ciB8fCBhdHRyLT5uYW1lKCkgPT0gYWNjZXNza2V5
QXR0cikgewogICAgICAgICAvLyBGSVhNRTogaWdub3JlIGZvciB0aGUgbW9tZW50CiAgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdnNwYWNlQXR0cikgewogICAgICAgICBhZGRDU1NMZW5n
dGgoYXR0ciwgQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIGF0dHItPnZhbHVlKCkpOwpAQCAtNzMxLDEz
ICs2MTQsMTMgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogICAg
ICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCBhdHRyLT52YWx1
ZSgpKTsKICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQs
IGF0dHItPnZhbHVlKCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0
cikgewotICAgICAgICBpZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IElNQUdFKQorICAgICAg
ICBpZiAobV9pbnB1dFR5cGUtPnNob3VsZFJlc3BlY3RBbGlnbkF0dHJpYnV0ZSgpKQogICAgICAg
ICAgICAgYWRkSFRNTEFsaWdubWVudChhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSB3aWR0aEF0dHIpIHsKLSAgICAgICAgaWYgKHJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJz
KCkpCisgICAgICAgIGlmIChtX2lucHV0VHlwZS0+c2hvdWxkUmVzcGVjdEhlaWdodEFuZFdpZHRo
QXR0cmlidXRlcygpKQogICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU1Byb3BlcnR5
V2lkdGgsIGF0dHItPnZhbHVlKCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhl
aWdodEF0dHIpIHsKLSAgICAgICAgaWYgKHJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJzKCkpCisg
ICAgICAgIGlmIChtX2lucHV0VHlwZS0+c2hvdWxkUmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0cmli
dXRlcygpKQogICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU1Byb3BlcnR5SGVpZ2h0
LCBhdHRyLT52YWx1ZSgpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnNlYXJj
aEF0dHIpIHsKICAgICAgICAgLy8gU2VhcmNoIGZpZWxkIGFuZCBzbGlkZXIgYXR0cmlidXRlcyBh
bGwganVzdCBjYXVzZSB1cGRhdGVGcm9tRWxlbWVudCB0byBiZSBjYWxsZWQgdGhyb3VnaCBzdHls
ZSByZWNhbGNpbmcuCkBAIC03NTIsMjEgKzYzNSwxMiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgICAgICAgICBhdHRhY2goKTsKICAgICAgICAgfQogICAg
ICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gYXV0b3NhdmVBdHRyCi0gICAgICAgICAgICAgICB8fCBhdHRyLT5uYW1lKCkgPT0gaW5jcmVt
ZW50YWxBdHRyKQorICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGF1dG9zYXZlQXR0ciB8
fCBhdHRyLT5uYW1lKCkgPT0gaW5jcmVtZW50YWxBdHRyKQogICAgICAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKCk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1pbkF0dHIKLSAgICAgICAg
ICAgICB8fCBhdHRyLT5uYW1lKCkgPT0gbWF4QXR0cikgewotICAgICAgICBpZiAoZGVwcmVjYXRl
ZElucHV0VHlwZSgpID09IFJBTkdFKSB7Ci0gICAgICAgICAgICAvLyBTYW5pdGl6ZSB0aGUgdmFs
dWUuCi0gICAgICAgICAgICBzZXRWYWx1ZSh2YWx1ZSgpKTsKLSAgICAgICAgICAgIHNldE5lZWRz
U3R5bGVSZWNhbGMoKTsKLSAgICAgICAgfQorICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBt
aW5BdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBtYXhBdHRyKSB7CisgICAgICAgIG1faW5wdXRUeXBl
LT5taW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQoKTsKICAgICAgICAgc2V0TmVlZHNWYWxpZGl0eUNo
ZWNrKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbXVsdGlwbGVBdHRyCi0gICAg
ICAgICAgICAgfHwgYXR0ci0+bmFtZSgpID09IHBhdHRlcm5BdHRyCi0gICAgICAgICAgICAgfHwg
YXR0ci0+bmFtZSgpID09IHByZWNpc2lvbkF0dHIKLSAgICAgICAgICAgICB8fCBhdHRyLT5uYW1l
KCkgPT0gc3RlcEF0dHIpCisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbXVsdGlwbGVB
dHRyIHx8IGF0dHItPm5hbWUoKSA9PSBwYXR0ZXJuQXR0ciB8fCBhdHRyLT5uYW1lKCkgPT0gcHJl
Y2lzaW9uQXR0ciB8fCBhdHRyLT5uYW1lKCkgPT0gc3RlcEF0dHIpCiAgICAgICAgIHNldE5lZWRz
VmFsaWRpdHlDaGVjaygpOwogI2lmIEVOQUJMRShEQVRBTElTVCkKICAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gbGlzdEF0dHIpCkBAIC03ODUsMTEgKzY1OSw5IEBAIHZvaWQgSFRNTElucHV0
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi1ib29sIEhUTUxJbnB1dEVs
ZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKQorYm9vbCBIVE1MSW5w
dXRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKLSAgICBp
ZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IEhJRERFTikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpyZW5kZXJlcklz
TmVlZGVkKHN0eWxlKTsKKyAgICByZXR1cm4gbV9pbnB1dFR5cGUtPnJlbmRlcmVySXNOZWVkZWQo
KSAmJiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpyZW5kZXJlcklzTmVlZGVkKHN0
eWxlKTsKIH0KIAogUmVuZGVyT2JqZWN0KiBIVE1MSW5wdXRFbGVtZW50OjpjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkKQEAgLTc5OSwzMiArNjcx
LDEyIEBAIFJlbmRlck9iamVjdCogSFRNTElucHV0RWxlbWVudDo6Y3JlYXRlUmUKIAogdm9pZCBI
VE1MSW5wdXRFbGVtZW50OjphdHRhY2goKQogewotICAgIGlmICghbV9pbml0ZWQpIHsKLSAgICAg
ICAgaWYgKCFtX2hhdmVUeXBlKQotICAgICAgICAgICAgdXBkYXRlVHlwZSgpOwotICAgICAgICBt
X2luaXRlZCA9IHRydWU7Ci0gICAgfQorICAgIGlmICghbV9oYXNUeXBlKQorICAgICAgICB1cGRh
dGVUeXBlKCk7CiAKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjphdHRhY2go
KTsKIAotICAgIGlmIChkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gSU1BR0UpIHsKLSAgICAgICAg
aWYgKCFtX2ltYWdlTG9hZGVyKQotICAgICAgICAgICAgbV9pbWFnZUxvYWRlciA9IGFkb3B0UHRy
KG5ldyBIVE1MSW1hZ2VMb2FkZXIodGhpcykpOwotICAgICAgICBtX2ltYWdlTG9hZGVyLT51cGRh
dGVGcm9tRWxlbWVudCgpOwotICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiBtX2ltYWdlTG9hZGVy
LT5oYXZlRmlyZWRCZWZvcmVMb2FkRXZlbnQoKSkgewotICAgICAgICAgICAgUmVuZGVySW1hZ2Uq
IHJlbmRlckltYWdlID0gdG9SZW5kZXJJbWFnZShyZW5kZXJlcigpKTsKLSAgICAgICAgICAgIFJl
bmRlckltYWdlUmVzb3VyY2UqIHJlbmRlckltYWdlUmVzb3VyY2UgPSByZW5kZXJJbWFnZS0+aW1h
Z2VSZXNvdXJjZSgpOwotICAgICAgICAgICAgcmVuZGVySW1hZ2VSZXNvdXJjZS0+c2V0Q2FjaGVk
SW1hZ2UobV9pbWFnZUxvYWRlci0+aW1hZ2UoKSk7IAotCi0gICAgICAgICAgICAvLyBJZiB3ZSBo
YXZlIG5vIGltYWdlIGF0IGFsbCBiZWNhdXNlIHdlIGhhdmUgbm8gc3JjIGF0dHJpYnV0ZSwgc2V0
Ci0gICAgICAgICAgICAvLyBpbWFnZSBoZWlnaHQgYW5kIHdpZHRoIGZvciB0aGUgYWx0IHRleHQg
aW5zdGVhZC4KLSAgICAgICAgICAgIGlmICghbV9pbWFnZUxvYWRlci0+aW1hZ2UoKSAmJiAhcmVu
ZGVySW1hZ2VSZXNvdXJjZS0+Y2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICByZW5kZXJJ
bWFnZS0+c2V0SW1hZ2VTaXplRm9yQWx0VGV4dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBSQURJTykKLSAgICAgICAgdXBkYXRlQ2hlY2tl
ZFJhZGlvQnV0dG9ucygpOworICAgIG1faW5wdXRUeXBlLT5hdHRhY2goKTsKIAogICAgIGlmIChk
b2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IHRoaXMpCiAgICAgICAgIGRvY3VtZW50KCktPnVw
ZGF0ZUZvY3VzQXBwZWFyYW5jZVNvb24odHJ1ZSAvKiByZXN0b3JlIHNlbGVjdGlvbiAqLyk7CkBA
IC04NDEsNyArNjkzLDcgQEAgU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OmFsdFRleHQoKSBjb25z
dAogICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzE5OTgvUkVDLWh0bWw0MC0xOTk4MDQyNC9h
cHBlbmRpeC9ub3Rlcy5odG1sI2FsdGdlbgogICAgIC8vIGFsc28gaGVhdmlseSBkaXNjdXNzZWQg
YnkgSGl4aWUgb24gYnVnemlsbGEKICAgICAvLyBub3RlIHRoaXMgaXMgaW50ZW50aW9uYWxseSBk
aWZmZXJlbnQgdG8gSFRNTEltYWdlRWxlbWVudDo6YWx0VGV4dCgpCi0gICAgU3RyaW5nIGFsdCA9
IGdldEF0dHJpYnV0ZShhbHRBdHRyKTsKKyAgICBTdHJpbmcgYWx0ID0gZmFzdEdldEF0dHJpYnV0
ZShhbHRBdHRyKTsKICAgICAvLyBmYWxsIGJhY2sgdG8gdGl0bGUgYXR0cmlidXRlCiAgICAgaWYg
KGFsdC5pc051bGwoKSkKICAgICAgICAgYWx0ID0gZ2V0QXR0cmlidXRlKHRpdGxlQXR0cik7CkBA
IC04NTUsMTggKzcwNywxOCBAQCBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6YWx0VGV4dCgpIGNv
bnN0CiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpIGNv
bnN0CiB7CiAgICAgLy8gSFRNTCBzcGVjIHNheXMgdGhhdCBidXR0b25zIG11c3QgaGF2ZSBuYW1l
cyB0byBiZSBjb25zaWRlcmVkIHN1Y2Nlc3NmdWwuCi0gICAgLy8gSG93ZXZlciwgb3RoZXIgYnJv
d3NlcnMgZG8gbm90IGltcG9zZSB0aGlzIGNvbnN0cmFpbnQuIFNvIHdlIGRvIGxpa2V3aXNlLgot
ICAgIHJldHVybiAhZGlzYWJsZWQoKSAmJiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IElNQUdF
IHx8IGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBTVUJNSVQpOworICAgIC8vIEhvd2V2ZXIsIG90
aGVyIGJyb3dzZXJzIGRvIG5vdCBpbXBvc2UgdGhpcyBjb25zdHJhaW50LiBTbyB3ZSBkbyBub3Qu
CisgICAgcmV0dXJuICFkaXNhYmxlZCgpICYmIG1faW5wdXRUeXBlLT5jYW5CZVN1Y2Nlc3NmdWxT
dWJtaXRCdXR0b24oKTsKIH0KIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc0FjdGl2YXRlZFN1
Ym1pdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYWN0aXZlU3VibWl0OworICAgIHJldHVybiBt
X2lzQWN0aXZhdGVkU3VibWl0OwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEFjdGl2
YXRlZFN1Ym1pdChib29sIGZsYWcpCiB7Ci0gICAgbV9hY3RpdmVTdWJtaXQgPSBmbGFnOworICAg
IG1faXNBY3RpdmF0ZWRTdWJtaXQgPSBmbGFnOwogfQogCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6
OmFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYgZW5jb2RpbmcsIGJvb2wgbXVsdGlwYXJ0KQpA
QCAtODc2LDExICs3MjgsMTEgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50OjphcHBlbmRGb3JtRGF0
YShGbwogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnJlc2V0KCkKIHsKLSAgICBpZiAoc3RvcmVz
VmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKSkKKyAgICBpZiAobV9pbnB1dFR5cGUtPnN0b3Jl
c1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCkpCiAgICAgICAgIHNldFZhbHVlKFN0cmluZygp
KTsKIAotICAgIHNldENoZWNrZWQobV9kZWZhdWx0Q2hlY2tlZCk7Ci0gICAgbV91c2VEZWZhdWx0
Q2hlY2tlZCA9IHRydWU7CisgICAgc2V0Q2hlY2tlZChoYXNBdHRyaWJ1dGUoY2hlY2tlZEF0dHIp
KTsKKyAgICBtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0ZSA9IHRydWU7CiB9CiAKIGJvb2wgSFRN
TElucHV0RWxlbWVudDo6aXNUZXh0RmllbGQoKSBjb25zdApAQCAtOTAwLDggKzc1Miw4IEBAIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6c2V0Q2hlY2tlZChib29sIG4KIAogICAgIGNoZWNrZWRSYWRp
b0J1dHRvbnMoKS5yZW1vdmVCdXR0b24odGhpcyk7CiAKLSAgICBtX3VzZURlZmF1bHRDaGVja2Vk
ID0gZmFsc2U7Ci0gICAgbV9jaGVja2VkID0gbm93Q2hlY2tlZDsKKyAgICBtX3JlZmxlY3RzQ2hl
Y2tlZEF0dHJpYnV0ZSA9IGZhbHNlOworICAgIG1faXNDaGVja2VkID0gbm93Q2hlY2tlZDsKICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKICAgICB1cGRhdGVDaGVja2VkUmFkaW9CdXR0b25z
KCk7CkBAIC05MTcsMTcgKzc2OSwxNiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldENoZWNr
ZWQoYm9vbCBuCiAgICAgLy8gdW5jaGVja2VkIHRvIG1hdGNoIG90aGVyIGJyb3dzZXJzLiBET00g
aXMgbm90IGEgdXNlZnVsIHN0YW5kYXJkIGZvciB0aGlzCiAgICAgLy8gYmVjYXVzZSBpdCBzYXlz
IG9ubHkgdG8gZmlyZSBjaGFuZ2UgZXZlbnRzIGF0ICJsb3NlIGZvY3VzIiB0aW1lLCB3aGljaCBp
cwogICAgIC8vIGRlZmluaXRlbHkgd3JvbmcgaW4gcHJhY3RpY2UgZm9yIHRoZXNlIHR5cGVzIG9m
IGVsZW1lbnRzLgotICAgIGlmIChzZW5kQ2hhbmdlRXZlbnQgJiYgaW5Eb2N1bWVudCgpICYmIChk
ZXByZWNhdGVkSW5wdXRUeXBlKCkgIT0gUkFESU8gfHwgbm93Q2hlY2tlZCkpCisgICAgaWYgKHNl
bmRDaGFuZ2VFdmVudCAmJiBpbkRvY3VtZW50KCkgJiYgbV9pbnB1dFR5cGUtPnNob3VsZFNlbmRD
aGFuZ2VFdmVudEFmdGVyQ2hlY2tlZENoYW5nZWQoKSkKICAgICAgICAgZGlzcGF0Y2hGb3JtQ29u
dHJvbENoYW5nZUV2ZW50KCk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0SW5kZXRl
cm1pbmF0ZShib29sIG5ld1ZhbHVlKQogewotICAgIC8vIE9ubHkgY2hlY2tib3hlcyBhbmQgcmFk
aW8gYnV0dG9ucyBob25vciBpbmRldGVybWluYXRlLgotICAgIGlmICghYWxsb3dzSW5kZXRlcm1p
bmF0ZSgpIHx8IGluZGV0ZXJtaW5hdGUoKSA9PSBuZXdWYWx1ZSkKKyAgICBpZiAoIW1faW5wdXRU
eXBlLT5pc0NoZWNrYWJsZSgpIHx8IGluZGV0ZXJtaW5hdGUoKSA9PSBuZXdWYWx1ZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9pbmRldGVybWluYXRlID0gbmV3VmFsdWU7CisgICAgbV9pc0lu
ZGV0ZXJtaW5hdGUgPSBuZXdWYWx1ZTsKIAogICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIApA
QCAtOTQ1LDg0ICs3OTYsMzcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpjb3B5Tm9uQXR0cmli
dXRlUAogICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqIHNvdXJjZUVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxjb25zdCBIVE1MSW5wdXRFbGVtZW50Kj4oc291cmNlKTsKIAogICAgIG1fZGF0YS5zZXRW
YWx1ZShzb3VyY2VFbGVtZW50LT5tX2RhdGEudmFsdWUoKSk7Ci0gICAgc2V0Q2hlY2tlZChzb3Vy
Y2VFbGVtZW50LT5tX2NoZWNrZWQpOwotICAgIG1fZGVmYXVsdENoZWNrZWQgPSBzb3VyY2VFbGVt
ZW50LT5tX2RlZmF1bHRDaGVja2VkOwotICAgIG1fdXNlRGVmYXVsdENoZWNrZWQgPSBzb3VyY2VF
bGVtZW50LT5tX3VzZURlZmF1bHRDaGVja2VkOwotICAgIG1faW5kZXRlcm1pbmF0ZSA9IHNvdXJj
ZUVsZW1lbnQtPm1faW5kZXRlcm1pbmF0ZTsKKyAgICBzZXRDaGVja2VkKHNvdXJjZUVsZW1lbnQt
Pm1faXNDaGVja2VkKTsKKyAgICBtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0ZSA9IHNvdXJjZUVs
ZW1lbnQtPm1fcmVmbGVjdHNDaGVja2VkQXR0cmlidXRlOworICAgIG1faXNJbmRldGVybWluYXRl
ID0gc291cmNlRWxlbWVudC0+bV9pc0luZGV0ZXJtaW5hdGU7CiAKICAgICBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlOjpjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGllcyhzb3VyY2UpOwog
fQogCiBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6dmFsdWUoKSBjb25zdAogewotICAgIGlmIChk
ZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gRklMRSkgewotICAgICAgICBpZiAoIW1fZmlsZUxpc3Qt
PmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gSFRNTDUgdGVsbHMgdXMgdGhhdCB3ZSdyZSBz
dXBwb3NlZCB0byB1c2UgdGhpcyBnb29meSB2YWx1ZSBmb3IKLSAgICAgICAgICAgIC8vIGZpbGUg
aW5wdXQgY29udHJvbHMuICBIaXN0b3JpY2FsbHksIGJyb3dzZXJzIHJldmVhbHMgdGhlIHJlYWwK
LSAgICAgICAgICAgIC8vIGZpbGUgcGF0aCwgYnV0IHRoYXQncyBhIHByaXZhY3kgcHJvYmxlbS4g
IENvZGUgb24gdGhlIHdlYgotICAgICAgICAgICAgLy8gZGVjaWRlZCB0byB0cnkgdG8gcGFyc2Ug
dGhlIHZhbHVlIGJ5IGxvb2tpbmcgZm9yIGJhY2tzbGFzaGVzCi0gICAgICAgICAgICAvLyAoYmVj
YXVzZSB0aGF0J3Mgd2hhdCBXaW5kb3dzIGZpbGUgcGF0aHMgdXNlKS4gIFRvIGJlIGNvbXBhdGli
bGUKLSAgICAgICAgICAgIC8vIHdpdGggdGhhdCBjb2RlLCB3ZSBtYWtlIHVwIGEgZmFrZSBwYXRo
IGZvciB0aGUgZmlsZS4KLSAgICAgICAgICAgIHJldHVybiAiQzpcXGZha2VwYXRoXFwiICsgbV9m
aWxlTGlzdC0+aXRlbSgwKS0+ZmlsZU5hbWUoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgfQorICAgIFN0cmluZyB2YWx1ZTsKKyAgICBpZiAobV9pbnB1dFR5cGUt
PmdldFR5cGVTcGVjaWZpY1ZhbHVlKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisg
ICAgdmFsdWUgPSBtX2RhdGEudmFsdWUoKTsKKyAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gdmFsdWU7CisKKyAgICB2YWx1ZSA9IHNhbml0aXplVmFsdWUoZmFzdEdldEF0
dHJpYnV0ZSh2YWx1ZUF0dHIpKTsKKyAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gdmFsdWU7CiAKLSAgICBTdHJpbmcgdmFsdWUgPSBtX2RhdGEudmFsdWUoKTsKLSAgICBp
ZiAodmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgdmFsdWUgPSBzYW5pdGl6ZVZhbHVlKGZhc3RH
ZXRBdHRyaWJ1dGUodmFsdWVBdHRyKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiBubyBhdHRy
aWJ1dGUgZXhpc3RzLCBleHRyYSBoYW5kbGluZyBtYXkgYmUgbmVjZXNzYXJ5LgotICAgICAgICAv
LyBGb3IgQ2hlY2tib3ggVHlwZXMganVzdCB1c2UgIm9uIiBvciAiIiBiYXNlZCBvZmYgdGhlIGNo
ZWNrZWQoKSBzdGF0ZSBvZiB0aGUgY29udHJvbC4KLSAgICAgICAgLy8gRm9yIGEgUmFuZ2UgSW5w
dXQgdXNlIHRoZSBjYWxjdWxhdGVkIGRlZmF1bHQgdmFsdWUuCi0gICAgICAgIGlmICh2YWx1ZS5p
c051bGwoKSkgewotICAgICAgICAgICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBDSEVD
S0JPWCB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gUkFESU8pCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGNoZWNrZWQoKSA/ICJvbiIgOiAiIjsKLSAgICAgICAgICAgIGlmIChkZXByZWNhdGVk
SW5wdXRUeXBlKCkgPT0gUkFOR0UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZUZv
ck51bWJlclR5cGUoU3RlcFJhbmdlKHRoaXMpLmRlZmF1bHRWYWx1ZSgpKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiB2YWx1ZTsKKyAgICByZXR1cm4gbV9pbnB1dFR5cGUtPmZhbGxi
YWNrVmFsdWUoKTsKIH0KIAogU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlV2l0aERlZmF1
bHQoKSBjb25zdAogewotICAgIFN0cmluZyB2ID0gdmFsdWUoKTsKLSAgICBpZiAodi5pc051bGwo
KSkgewotICAgICAgICBzd2l0Y2ggKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSkgewotICAgICAgICBj
YXNlIEJVVFRPTjoKLSAgICAgICAgY2FzZSBDSEVDS0JPWDoKLSAgICAgICAgY2FzZSBDT0xPUjoK
LSAgICAgICAgY2FzZSBEQVRFOgotICAgICAgICBjYXNlIERBVEVUSU1FOgotICAgICAgICBjYXNl
IERBVEVUSU1FTE9DQUw6Ci0gICAgICAgIGNhc2UgRU1BSUw6Ci0gICAgICAgIGNhc2UgRklMRToK
LSAgICAgICAgY2FzZSBISURERU46Ci0gICAgICAgIGNhc2UgSU1BR0U6Ci0gICAgICAgIGNhc2Ug
SVNJTkRFWDoKLSAgICAgICAgY2FzZSBNT05USDoKLSAgICAgICAgY2FzZSBOVU1CRVI6Ci0gICAg
ICAgIGNhc2UgUEFTU1dPUkQ6Ci0gICAgICAgIGNhc2UgUkFESU86Ci0gICAgICAgIGNhc2UgUkFO
R0U6Ci0gICAgICAgIGNhc2UgU0VBUkNIOgotICAgICAgICBjYXNlIFRFTEVQSE9ORToKLSAgICAg
ICAgY2FzZSBURVhUOgotICAgICAgICBjYXNlIFRJTUU6Ci0gICAgICAgIGNhc2UgVVJMOgotICAg
ICAgICBjYXNlIFdFRUs6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSRVNFVDoK
LSAgICAgICAgICAgIHYgPSByZXNldEJ1dHRvbkRlZmF1bHRMYWJlbCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgU1VCTUlUOgotICAgICAgICAgICAgdiA9IHN1Ym1pdEJ1dHRv
bkRlZmF1bHRMYWJlbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIHY7CisgICAgU3RyaW5nIHZhbHVlID0gdGhpcy0+dmFsdWUoKTsKKyAgICBpZiAo
IXZhbHVlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICByZXR1cm4gbV9p
bnB1dFR5cGUtPmRlZmF1bHRWYWx1ZSgpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNl
dFZhbHVlRm9yVXNlcihjb25zdCBTdHJpbmcmIHZhbHVlKQpAQCAtMTAzOCw3ICs4NDIsNyBAQCBj
b25zdCBTdHJpbmcmIEhUTUxJbnB1dEVsZW1lbnQ6OnN1Z2dlc3RlCiAKIHZvaWQgSFRNTElucHV0
RWxlbWVudDo6c2V0U3VnZ2VzdGVkVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBp
ZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpICE9IFRFWFQpCisgICAgaWYgKCFtX2lucHV0VHlwZS0+
Y2FuU2V0U3VnZ2VzdGVkVmFsdWUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHNldEZvcm1Db250
cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpOwogICAgIG1fZGF0YS5zZXRTdWdnZXN0ZWRW
YWx1ZShzYW5pdGl6ZVZhbHVlKHZhbHVlKSk7CkBAIC0xMDUwLDE2ICs4NTQsMTMgQEAgdm9pZCBI
VE1MSW5wdXRFbGVtZW50OjpzZXRTdWdnZXN0ZWRWYWx1ZQogCiB2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgc2VuZENoYW5nZUV2ZW50KQog
ewotICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25zLCB3ZSBkb24ndCBhbGxvdyBzZXR0aW5nIHRo
ZSBmaWxlbmFtZSwgYnV0IHdlIGRvIGFsbG93IGNsZWFyaW5nIGl0LgotICAgIC8vIFRoZSBIVE1M
NSBzcGVjIChhcyBvZiB0aGUgMTAvMjQvMDggd29ya2luZyBkcmFmdCkgc2F5cyB0aGF0IHRoZSB2
YWx1ZSBhdHRyaWJ1dGUgaXNuJ3QgYXBwbGljYWJsZSB0byB0aGUgZmlsZSB1cGxvYWQgY29udHJv
bAotICAgIC8vIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGJyZWFrIGV4aXN0aW5nIHdlYnNpdGVzLCB3
aG8gbWF5IGJlIHJlbHlpbmcgb24gdGhpcyBtZXRob2QgdG8gY2xlYXIgdGhpbmdzLgotICAgIGlm
IChkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gRklMRSAmJiAhdmFsdWUuaXNFbXB0eSgpKQorICAg
IGlmICghbV9pbnB1dFR5cGUtPmNhblNldFZhbHVlKHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7Ci0gICAgaWYg
KHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCkpIHsKLSAgICAgICAgaWYgKGRlcHJl
Y2F0ZWRJbnB1dFR5cGUoKSA9PSBGSUxFKQotICAgICAgICAgICAgbV9maWxlTGlzdC0+Y2xlYXIo
KTsKKyAgICBpZiAobV9pbnB1dFR5cGUtPnN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRl
KCkpIHsKKyAgICAgICAgaWYgKGZpbGVzKCkpCisgICAgICAgICAgICBmaWxlcygpLT5jbGVhcigp
OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1fZGF0YS5zZXRWYWx1ZShzYW5pdGl6ZVZh
bHVlKHZhbHVlKSk7CiAgICAgICAgICAgICBpZiAoaXNUZXh0RmllbGQoKSkKQEAgLTExMTQsNyAr
OTE1LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUFzTnVtYmVyKAogCiBTdHJp
bmcgSFRNTElucHV0RWxlbWVudDo6cGxhY2Vob2xkZXIoKSBjb25zdAogewotICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUocGxhY2Vob2xkZXJBdHRyKS5zdHJpbmcoKTsKKyAgICByZXR1cm4gZmFzdEdl
dEF0dHJpYnV0ZShwbGFjZWhvbGRlckF0dHIpLnN0cmluZygpOwogfQogCiB2b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OnNldFBsYWNlaG9sZGVyKGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC0xMTMwLDcg
KzkzMSw4IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6c2VhcmNoRXZlbnRzU2hvdWwKIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKIHsKICAgICAvLyBGaWxlIHVwbG9hZCBjb250cm9scyB3aWxsIGFsd2F5cyB1c2Ugc2V0Rmls
ZUxpc3RGcm9tUmVuZGVyZXIuCi0gICAgQVNTRVJUKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSAhPSBG
SUxFKTsKKyAgICBBU1NFUlQoIWlzRmlsZVVwbG9hZCgpKTsKKwogICAgIG1fZGF0YS5zZXRTdWdn
ZXN0ZWRWYWx1ZShTdHJpbmcoKSk7CiAgICAgSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5k
ZXJlcihtX2RhdGEsIHRoaXMsIHRoaXMsIHZhbHVlKTsKICAgICB1cGRhdGVQbGFjZWhvbGRlclZp
c2liaWxpdHkoZmFsc2UpOwpAQCAtMTE0MiwxNDggKzk0NCwyOSBAQCB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRlCiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0Rmls
ZUxpc3RGcm9tUmVuZGVyZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKQogewotICAgIG1f
ZmlsZUxpc3QtPmNsZWFyKCk7Ci0gICAgaW50IHNpemUgPSBwYXRocy5zaXplKCk7Ci0KLSNpZiBF
TkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKLSAgICAvLyBJZiBhIGRpcmVjdG9yeSBpcyBiZWluZyBz
ZWxlY3RlZCwgdGhlIFVJIGFsbG93cyBhIGRpcmVjdG9yeSB0byBiZSBjaG9zZW4KLSAgICAvLyBh
bmQgdGhlIHBhdGhzIHByb3ZpZGVkIGhlcmUgc2hhcmUgYSByb290IGRpcmVjdG9yeSBzb21ld2hl
cmUgdXAgdGhlIHRyZWU7Ci0gICAgLy8gd2Ugd2FudCB0byBzdG9yZSBvbmx5IHRoZSByZWxhdGl2
ZSBwYXRocyBmcm9tIHRoYXQgcG9pbnQuCi0gICAgaWYgKHdlYmtpdGRpcmVjdG9yeSgpICYmIHNp
emUgPiAwKSB7Ci0gICAgICAgIFN0cmluZyByb290UGF0aCA9IGRpcmVjdG9yeU5hbWUocGF0aHNb
MF0pOwotICAgICAgICAvLyBGaW5kIHRoZSBjb21tb24gcm9vdCBwYXRoLgotICAgICAgICBmb3Ig
KGludCBpID0gMTsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgd2hpbGUgKCFwYXRoc1tp
XS5zdGFydHNXaXRoKHJvb3RQYXRoKSkKLSAgICAgICAgICAgICAgICByb290UGF0aCA9IGRpcmVj
dG9yeU5hbWUocm9vdFBhdGgpOwotICAgICAgICB9Ci0gICAgICAgIHJvb3RQYXRoID0gZGlyZWN0
b3J5TmFtZShyb290UGF0aCk7Ci0gICAgICAgIEFTU0VSVChyb290UGF0aC5sZW5ndGgoKSk7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAvLyBO
b3JtYWxpemUgYmFja3NsYXNoZXMgdG8gc2xhc2hlcyBiZWZvcmUgZXhwb3NpbmcgdGhlIHJlbGF0
aXZlIHBhdGggdG8gc2NyaXB0LgotICAgICAgICAgICAgU3RyaW5nIHJlbGF0aXZlUGF0aCA9IHBh
dGhzW2ldLnN1YnN0cmluZygxICsgcm9vdFBhdGgubGVuZ3RoKCkpLnJlcGxhY2UoJ1xcJywnLycp
OwotICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShyZWxhdGl2ZVBh
dGgsIHBhdGhzW2ldKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChG
aWxlOjpjcmVhdGUocGF0aHNbaV0pKTsKLSAgICB9Ci0jZWxzZQotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRl
KHBhdGhzW2ldKSk7Ci0jZW5kaWYKKyAgICBtX2lucHV0VHlwZS0+c2V0RmlsZUxpc3QocGF0aHMp
OwogCiAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcih0cnVlKTsKICAgICBJ
bnB1dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQodGhpcyk7CiAgICAgc2V0TmVlZHNW
YWxpZGl0eUNoZWNrKCk7CiB9CiAKLWJvb2wgSFRNTElucHV0RWxlbWVudDo6c3RvcmVzVmFsdWVT
ZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKSBjb25zdAordm9pZCogSFRNTElucHV0RWxlbWVudDo6cHJl
RGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewotICAgIHN3aXRjaCAoZGVwcmVj
YXRlZElucHV0VHlwZSgpKSB7Ci0gICAgY2FzZSBCVVRUT046Ci0gICAgY2FzZSBDSEVDS0JPWDoK
LSAgICBjYXNlIEhJRERFTjoKLSAgICBjYXNlIElNQUdFOgotICAgIGNhc2UgUkFESU86Ci0gICAg
Y2FzZSBSRVNFVDoKLSAgICBjYXNlIFNVQk1JVDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGNhc2UgQ09MT1I6Ci0gICAgY2FzZSBEQVRFOgotICAgIGNhc2UgREFURVRJTUU6Ci0gICAgY2Fz
ZSBEQVRFVElNRUxPQ0FMOgotICAgIGNhc2UgRU1BSUw6Ci0gICAgY2FzZSBGSUxFOgotICAgIGNh
c2UgSVNJTkRFWDoKLSAgICBjYXNlIE1PTlRIOgotICAgIGNhc2UgTlVNQkVSOgotICAgIGNhc2Ug
UEFTU1dPUkQ6Ci0gICAgY2FzZSBSQU5HRToKLSAgICBjYXNlIFNFQVJDSDoKLSAgICBjYXNlIFRF
TEVQSE9ORToKLSAgICBjYXNlIFRFWFQ6Ci0gICAgY2FzZSBUSU1FOgotICAgIGNhc2UgVVJMOgot
ICAgIGNhc2UgV0VFSzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotc3RydWN0IEV2ZW50SGFuZGxpbmdTdGF0ZSA6IEZhc3RBbGxvY0Jhc2Ugewot
ICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBtX2N1cnJSYWRpbzsKLSAgICBib29sIG1faW5k
ZXRlcm1pbmF0ZTsKLSAgICBib29sIG1fY2hlY2tlZDsKLSAgICAKLSAgICBFdmVudEhhbmRsaW5n
U3RhdGUoYm9vbCBpbmRldGVybWluYXRlLCBib29sIGNoZWNrZWQpCi0gICAgICAgIDogbV9pbmRl
dGVybWluYXRlKGluZGV0ZXJtaW5hdGUpCi0gICAgICAgICwgbV9jaGVja2VkKGNoZWNrZWQpIHsg
fQotfTsKLQotdm9pZCogSFRNTElucHV0RWxlbWVudDo6cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIo
RXZlbnQqIGV2dCkKLXsKLSAgICAvLyBwcmV2ZW50RGVmYXVsdCBvciAicmV0dXJuIGZhbHNlIiBh
cmUgdXNlZCB0byByZXZlcnNlIHRoZSBhdXRvbWF0aWMgY2hlY2tpbmcvc2VsZWN0aW9uIHdlIGRv
IGhlcmUuCi0gICAgLy8gVGhpcyByZXN1bHQgZ2l2ZXMgdXMgZW5vdWdoIGluZm8gdG8gcGVyZm9y
bSB0aGUgInVuZG8iIGluIHBvc3REaXNwYXRjaCBvZiB0aGUgYWN0aW9uIHdlIHRha2UgaGVyZS4K
LSAgICB2b2lkKiByZXN1bHQgPSAwOyAKLSAgICBpZiAoKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9
PSBDSEVDS0JPWCB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gUkFESU8pICYmIGV2dC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7Ci0gICAgICAgIE93blB0cjxFdmVudEhh
bmRsaW5nU3RhdGU+IHN0YXRlID0gYWRvcHRQdHIobmV3IEV2ZW50SGFuZGxpbmdTdGF0ZShpbmRl
dGVybWluYXRlKCksIGNoZWNrZWQoKSkpOwotICAgICAgICBpZiAoZGVwcmVjYXRlZElucHV0VHlw
ZSgpID09IENIRUNLQk9YKSB7Ci0gICAgICAgICAgICBpZiAoaW5kZXRlcm1pbmF0ZSgpKQotICAg
ICAgICAgICAgICAgIHNldEluZGV0ZXJtaW5hdGUoZmFsc2UpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHNldENoZWNrZWQoIWNoZWNrZWQoKSwgdHJ1ZSk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBGb3IgcmFkaW8gYnV0dG9ucywgc3RvcmUgdGhlIGN1cnJl
bnQgc2VsZWN0ZWQgcmFkaW8gb2JqZWN0LgotICAgICAgICAgICAgLy8gV2UgcmVhbGx5IHdhbnQg
cmFkaW8gZ3JvdXBzIHRvIGVuZCB1cCBpbiBzYW5lIHN0YXRlcywgaS5lLiwgdG8gaGF2ZSBzb21l
dGhpbmcgY2hlY2tlZC4KLSAgICAgICAgICAgIC8vIFRoZXJlZm9yZSBpZiBub3RoaW5nIGlzIGN1
cnJlbnRseSBzZWxlY3RlZCwgd2Ugd29uJ3QgYWxsb3cgdGhpcyBhY3Rpb24gdG8gYmUgInVuZG9u
ZSIsIHNpbmNlCi0gICAgICAgICAgICAvLyB3ZSB3YW50IHNvbWUgb2JqZWN0IGluIHRoZSByYWRp
byBncm91cCB0byBhY3R1YWxseSBnZXQgc2VsZWN0ZWQuCi0gICAgICAgICAgICBIVE1MSW5wdXRF
bGVtZW50KiBjdXJyUmFkaW8gPSBjaGVja2VkUmFkaW9CdXR0b25zKCkuY2hlY2tlZEJ1dHRvbkZv
ckdyb3VwKG5hbWUoKSk7Ci0gICAgICAgICAgICBpZiAoY3VyclJhZGlvKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gV2UgaGF2ZSBhIHJhZGlvIGJ1dHRvbiBzZWxlY3RlZCB0aGF0IGlzIG5vdCB1cy4g
IENhY2hlIGl0IGluIG91ciByZXN1bHQgZmllbGQgYW5kIHJlZiBpdCBzbwotICAgICAgICAgICAg
ICAgIC8vIHRoYXQgaXQgY2FuJ3QgYmUgZGVzdHJveWVkLgotICAgICAgICAgICAgICAgIHN0YXRl
LT5tX2N1cnJSYWRpbyA9IGN1cnJSYWRpbzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChpbmRldGVybWluYXRlKCkpCi0gICAgICAgICAgICAgICAgc2V0SW5kZXRlcm1pbmF0ZShmYWxz
ZSk7Ci0gICAgICAgICAgICBzZXRDaGVja2VkKHRydWUsIHRydWUpOwotICAgICAgICB9Ci0gICAg
ICAgIHJlc3VsdCA9IHN0YXRlLmxlYWtQdHIoKTsgLy8gRklYTUU6IENoZWNrIHdoZXRoZXIgdGhp
cyBhY3R1YWxseSBlbmRzIHVwIGxlYWtpbmcuCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpCisgICAgICAg
IHJldHVybiAwOworICAgIC8vIEZJWE1FOiBDaGVjayB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgY2Fz
ZXMgd2hlcmUgdGhpcyBhY3R1YWxseSBlbmRzIHVwIGxlYWtpbmcuCisgICAgcmV0dXJuIG1faW5w
dXRUeXBlLT53aWxsRGlzcGF0Y2hDbGljaygpLmxlYWtQdHIoKTsKIH0KIAotdm9pZCBIVE1MSW5w
dXRFbGVtZW50Ojpwb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQgKmV2dCwgdm9pZCogZGF0
YSkKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6cG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKEV2ZW50
KiBldmVudCwgdm9pZCogZGF0YUZyb21QcmVEaXNwYXRjaCkKIHsKLSAgICBpZiAoKGRlcHJlY2F0
ZWRJbnB1dFR5cGUoKSA9PSBDSEVDS0JPWCB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gUkFE
SU8pICYmIGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7Ci0gICAgICAg
IAotICAgICAgICBpZiAoRXZlbnRIYW5kbGluZ1N0YXRlKiBzdGF0ZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8RXZlbnRIYW5kbGluZ1N0YXRlKj4oZGF0YSkpIHsKLSAgICAgICAgICAgIGlmIChkZXByZWNh
dGVkSW5wdXRUeXBlKCkgPT0gQ0hFQ0tCT1gpIHsKLSAgICAgICAgICAgICAgICAvLyBSZXZlcnNl
IHRoZSBjaGVja2luZyB3ZSBkaWQgaW4gcHJlRGlzcGF0Y2guCi0gICAgICAgICAgICAgICAgaWYg
KGV2dC0+ZGVmYXVsdFByZXZlbnRlZCgpIHx8IGV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkgewotICAg
ICAgICAgICAgICAgICAgICBzZXRJbmRldGVybWluYXRlKHN0YXRlLT5tX2luZGV0ZXJtaW5hdGUp
OwotICAgICAgICAgICAgICAgICAgICBzZXRDaGVja2VkKHN0YXRlLT5tX2NoZWNrZWQpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0ZS0+bV9jdXJyUmFkaW8uZ2V0KCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGV2dC0+ZGVmYXVsdFByZXZlbnRlZCgpIHx8IGV2dC0+ZGVmYXVsdEhhbmRs
ZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBzZWxl
Y3RlZCByYWRpbyBidXR0b24gaWYgcG9zc2libGUuCi0gICAgICAgICAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSBpdCBpcyBzdGlsbCBhIHJhZGlvIGJ1dHRvbiBhbmQgb25seSBkbyB0aGUgcmVzdG9y
YXRpb24gaWYgaXQgc3RpbGwKLSAgICAgICAgICAgICAgICAgICAgLy8gYmVsb25ncyB0byBvdXIg
Z3JvdXAuCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5mb3JtKCkg
PT0gZm9ybSgpICYmIGlucHV0LT5kZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gUkFESU8gJiYgaW5w
dXQtPm5hbWUoKSA9PSBuYW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9rLCB0
aGUgb2xkIHJhZGlvIGJ1dHRvbiBpcyBzdGlsbCBpbiBvdXIgZm9ybSBhbmQgaW4gb3VyIGdyb3Vw
IGFuZCBpcyBzdGlsbCBhIAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmFkaW8gYnV0dG9u
LCBzbyBpdCdzIHNhZmUgdG8gcmVzdG9yZSBzZWxlY3Rpb24gdG8gaXQuCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpbnB1dC0+c2V0Q2hlY2tlZCh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBzZXRJbmRldGVybWluYXRlKHN0YXRlLT5tX2luZGV0ZXJt
aW5hdGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRl
bGV0ZSBzdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIExlZnQgY2xpY2tzIG9uIHJhZGlv
IGJ1dHRvbnMgYW5kIGNoZWNrIGJveGVzIGFscmVhZHkgcGVyZm9ybWVkIGRlZmF1bHQgYWN0aW9u
cyBpbiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlcigpLiAKLSAgICAgICAgZXZ0LT5zZXREZWZhdWx0
SGFuZGxlZCgpOwotICAgIH0KKyAgICBPd25QdHI8Q2xpY2tIYW5kbGluZ1N0YXRlPiBzdGF0ZSA9
IGFkb3B0UHRyKHN0YXRpY19jYXN0PENsaWNrSGFuZGxpbmdTdGF0ZSo+KGRhdGFGcm9tUHJlRGlz
cGF0Y2gpKTsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkuY2xpY2tFdmVu
dCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2lucHV0VHlwZS0+ZGlkRGlzcGF0Y2hDbGljayhldmVudCwgKnN0YXRlKTsKIH0KIAogdm9p
ZCBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCkBAIC0x
Mzc5LDcgKzEwNjIsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0
CiAKIFN0cmluZyBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0VmFsdWUoKSBjb25zdAogewotICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUodmFsdWVBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJp
YnV0ZSh2YWx1ZUF0dHIpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldERlZmF1bHRW
YWx1ZShjb25zdCBTdHJpbmcgJnZhbHVlKQpAQCAtMTM4NywxMSArMTA3MCw2IEBAIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6c2V0RGVmYXVsdFZhbHVlKGMKICAgICBzZXRBdHRyaWJ1dGUodmFsdWVB
dHRyLCB2YWx1ZSk7CiB9CiAKLWJvb2wgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdENoZWNrZWQo
KSBjb25zdAotewotICAgIHJldHVybiBmYXN0SGFzQXR0cmlidXRlKGNoZWNrZWRBdHRyKTsKLX0K
LQogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXREZWZhdWx0TmFtZShjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUpCiB7CiAgICAgbV9kYXRhLnNldE5hbWUobmFtZSk7CkBAIC0xMzk5LDEyICsxMDc3
LDEyIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0RGVmYXVsdE5hbWUoY28KIAogU3RyaW5n
IEhUTUxJbnB1dEVsZW1lbnQ6OmFjY2VwdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJp
YnV0ZShhY2NlcHRBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShhY2NlcHRBdHRy
KTsKIH0KIAogU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OmFsdCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShhbHRBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShh
bHRBdHRyKTsKIH0KIAogaW50IEhUTUxJbnB1dEVsZW1lbnQ6Om1heExlbmd0aCgpIGNvbnN0CkBA
IC0xNDI1LDEzICsxMTAzLDYgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50OjptdWx0aXBsZSgpIGNv
bnN0CiAgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUobXVsdGlwbGVBdHRyKTsKIH0KIAotI2lm
IEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQotYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojp3ZWJraXRk
aXJlY3RvcnkoKSBjb25zdAotewotICAgIHJldHVybiBmYXN0SGFzQXR0cmlidXRlKHdlYmtpdGRp
cmVjdG9yeUF0dHIpOwotfQotI2VuZGlmCi0KIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0U2l6
ZSh1bnNpZ25lZCBzaXplKQogewogICAgIHNldEF0dHJpYnV0ZShzaXplQXR0ciwgU3RyaW5nOjpu
dW1iZXIoc2l6ZSkpOwpAQCAtMTQzOSw1MiArMTExMCwzNiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnNldFNpemUodW5zaWduZWQgCiAKIEtVUkwgSFRNTElucHV0RWxlbWVudDo6c3JjKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKHNy
Y0F0dHIpKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZmFzdEdldEF0dHJp
YnV0ZShzcmNBdHRyKSk7CiB9CiAKLXZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0QXV0b2ZpbGxl
ZChib29sIGIpCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEF1dG9maWxsZWQoYm9vbCBhdXRv
ZmlsbGVkKQogewotICAgIGlmIChiID09IG1fYXV0b2ZpbGxlZCkKKyAgICBpZiAoYXV0b2ZpbGxl
ZCA9PSBtX2lzQXV0b2ZpbGxlZCkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBtX2F1
dG9maWxsZWQgPSBiOworICAgIG1faXNBdXRvZmlsbGVkID0gYXV0b2ZpbGxlZDsKICAgICBzZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7CiB9CiAKIEZpbGVMaXN0KiBIVE1MSW5wdXRFbGVtZW50OjpmaWxl
cygpCiB7Ci0gICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSAhPSBGSUxFKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gbV9maWxlTGlzdC5nZXQoKTsKKyAgICByZXR1cm4gbV9pbnB1
dFR5cGUtPmZpbGVzKCk7CiB9CiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNBY2NlcHRhYmxl
VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKSBjb25zdAogewotICAgIGlmIChkZXBy
ZWNhdGVkSW5wdXRUeXBlKCkgIT0gTlVNQkVSKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBy
ZXR1cm4gcHJvcG9zZWRWYWx1ZS5pc0VtcHR5KCkgfHwgcGFyc2VUb0RvdWJsZUZvck51bWJlclR5
cGUocHJvcG9zZWRWYWx1ZSwgMCk7CisgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5pc0FjY2VwdGFi
bGVWYWx1ZShwcm9wb3NlZFZhbHVlKTsKIH0KIAogU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OnNh
bml0aXplVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKSBjb25zdAogewotICAgIGlm
IChkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gTlVNQkVSKQotICAgICAgICByZXR1cm4gcGFyc2VU
b0RvdWJsZUZvck51bWJlclR5cGUocHJvcG9zZWRWYWx1ZSwgMCkgPyBwcm9wb3NlZFZhbHVlIDog
U3RyaW5nKCk7Ci0KLSAgICBpZiAoaXNUZXh0RmllbGQoKSkKLSAgICAgICAgcmV0dXJuIElucHV0
RWxlbWVudDo6c2FuaXRpemVWYWx1ZUZvclRleHRGaWVsZCh0aGlzLCBwcm9wb3NlZFZhbHVlKTsK
LQotICAgIC8vIElmIHRoZSBwcm9wb3NlZFZhbHVlIGlzIG51bGwgdGhhbiB0aGlzIGlzIGEgcmVz
ZXQgc2NlbmFyaW8gYW5kIHdlCi0gICAgLy8gd2FudCB0aGUgcmFuZ2UgaW5wdXQncyB2YWx1ZSBh
dHRyaWJ1dGUgdG8gdGFrZSBwcmlvcml0eSBvdmVyIHRoZQotICAgIC8vIGNhbGN1bGF0ZWQgZGVm
YXVsdCAobWlkZGxlKSB2YWx1ZS4KLSAgICBpZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IFJB
TkdFICYmICFwcm9wb3NlZFZhbHVlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gc2VyaWFsaXpl
Rm9yTnVtYmVyVHlwZShTdGVwUmFuZ2UodGhpcykuY2xhbXBWYWx1ZShwcm9wb3NlZFZhbHVlKSk7
Ci0KLSAgICByZXR1cm4gcHJvcG9zZWRWYWx1ZTsKKyAgICByZXR1cm4gbV9pbnB1dFR5cGUtPnNh
bml0aXplVmFsdWUocHJvcG9zZWRWYWx1ZSk7CiB9CiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6
aGFzVW5hY2NlcHRhYmxlVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiBkZXByZWNhdGVkSW5w
dXRUeXBlKCkgPT0gTlVNQkVSICYmIHJlbmRlcmVyKCkgJiYgIWlzQWNjZXB0YWJsZVZhbHVlKHRv
UmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnRleHQoKSk7CisgICAgcmV0dXJuIG1faW5w
dXRUeXBlLT5oYXNVbmFjY2VwdGFibGVWYWx1ZSgpOwogfQogCiBib29sIEhUTUxJbnB1dEVsZW1l
bnQ6OmlzSW5SYW5nZSgpIGNvbnN0CkBAIC0xNDk5LDcgKzExNTQsNyBAQCBib29sIEhUTUxJbnB1
dEVsZW1lbnQ6OmlzT3V0T2ZSYW5nZSgpIGNvCiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6bmVl
ZHNBY3RpdmF0aW9uQ2FsbGJhY2soKQogewotICAgIHJldHVybiBkZXByZWNhdGVkSW5wdXRUeXBl
KCkgPT0gUEFTU1dPUkQgfHwgbV9hdXRvY29tcGxldGUgPT0gT2ZmOworICAgIHJldHVybiBtX2F1
dG9jb21wbGV0ZSA9PSBPZmYgfHwgbV9pbnB1dFR5cGUtPnNob3VsZFJlc2V0T25Eb2N1bWVudEFj
dGl2YXRpb24oKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpyZWdpc3RlckZvckFjdGl2
YXRpb25DYWxsYmFja0lmTmVlZGVkKCkKQEAgLTE1NDgsMTUgKzEyMDMsMTQgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50Ojpkb2N1bWVudERpZEJlY29tZQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKIHsKLSAgICBpZiAobV9pbWFnZUxvYWRlcikK
LSAgICAgICAgbV9pbWFnZUxvYWRlci0+ZWxlbWVudFdpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50
KCk7CisgICAgbV9pbnB1dFR5cGUtPndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiAKICAg
ICAvLyBBbHdheXMgdW5yZWdpc3RlciBmb3IgY2FjaGUgY2FsbGJhY2tzIHdoZW4gbGVhdmluZyBh
IGRvY3VtZW50LCBldmVuIGlmIHdlIHdvdWxkIG90aGVyd2lzZSBsaWtlIHRvIGJlIHJlZ2lzdGVy
ZWQKICAgICBpZiAobmVlZHNBY3RpdmF0aW9uQ2FsbGJhY2soKSkKICAgICAgICAgZG9jdW1lbnQo
KS0+dW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsKICAgICAg
ICAgCiAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLnJlbW92ZUJ1dHRvbih0
aGlzKTsKLSAgICAKKwogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OndpbGxN
b3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiB9CiAKQEAgLTE1OTEsNTYgKzEyNDUsMzcgQEAgSFRN
TERhdGFMaXN0RWxlbWVudCogSFRNTElucHV0RWxlbWVudDo6ZAogICAgIGlmICghbV9oYXNOb25F
bXB0eUxpc3QpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgc3dpdGNoIChkZXByZWNhdGVkSW5w
dXRUeXBlKCkpIHsKLSAgICBjYXNlIENPTE9SOgotICAgIGNhc2UgREFURToKLSAgICBjYXNlIERB
VEVUSU1FOgotICAgIGNhc2UgREFURVRJTUVMT0NBTDoKLSAgICBjYXNlIEVNQUlMOgotICAgIGNh
c2UgTU9OVEg6Ci0gICAgY2FzZSBOVU1CRVI6Ci0gICAgY2FzZSBSQU5HRToKLSAgICBjYXNlIFNF
QVJDSDoKLSAgICBjYXNlIFRFTEVQSE9ORToKLSAgICBjYXNlIFRFWFQ6Ci0gICAgY2FzZSBUSU1F
OgotICAgIGNhc2UgVVJMOgotICAgIGNhc2UgV0VFSzogewotICAgICAgICBFbGVtZW50KiBlbGVt
ZW50ID0gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZ2V0QXR0cmlidXRlKGxpc3RBdHRyKSk7
Ci0gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoZGF0YWxpc3RUYWcp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxEYXRhTGlzdEVsZW1lbnQqPihl
bGVtZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQlVUVE9OOgotICAgIGNh
c2UgQ0hFQ0tCT1g6Ci0gICAgY2FzZSBGSUxFOgotICAgIGNhc2UgSElEREVOOgotICAgIGNhc2Ug
SU1BR0U6Ci0gICAgY2FzZSBJU0lOREVYOgotICAgIGNhc2UgUEFTU1dPUkQ6Ci0gICAgY2FzZSBS
QURJTzoKLSAgICBjYXNlIFJFU0VUOgotICAgIGNhc2UgU1VCTUlUOgotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX2lucHV0VHlwZS0+c2hvdWxkUmVzcGVj
dExpc3RBdHRyaWJ1dGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBFbGVtZW50KiBlbGVt
ZW50ID0gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZmFzdEdldEF0dHJpYnV0ZShsaXN0QXR0
cikpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFlbGVt
ZW50LT5oYXNUYWdOYW1lKGRhdGFsaXN0VGFnKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTERhdGFMaXN0RWxlbWVudCo+KGVsZW1lbnQpOwogfQogCiBI
VE1MT3B0aW9uRWxlbWVudCogSFRNTElucHV0RWxlbWVudDo6c2VsZWN0ZWRPcHRpb24oKSBjb25z
dAogewotICAgIFN0cmluZyBjdXJyZW50VmFsdWUgPSB2YWx1ZSgpOwotICAgIC8vIFRoZSBlbXB0
eSB2YWx1ZSBuZXZlciBtYXRjaGVzIHRvIGEgZGF0YWxpc3Qgb3B0aW9uIGJlY2F1c2UgaXQKKyAg
ICBTdHJpbmcgdmFsdWUgPSB0aGlzLT52YWx1ZSgpOworCisgICAgLy8gVGhlIGVtcHR5IHN0cmlu
ZyBuZXZlciBtYXRjaGVzIHRvIGEgZGF0YWxpc3Qgb3B0aW9uIGJlY2F1c2UgaXQKICAgICAvLyBk
b2Vzbid0IHJlcHJlc2VudCBhIHN1Z2dlc3Rpb24gYWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4K
LSAgICBpZiAoY3VycmVudFZhbHVlLmlzRW1wdHkoKSkKKyAgICBpZiAodmFsdWUuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQqIHNvdXJjZUVs
ZW1lbnQgPSBkYXRhTGlzdCgpOwogICAgIGlmICghc291cmNlRWxlbWVudCkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBvcHRpb25zID0gc291cmNlRWxlbWVu
dC0+b3B0aW9ucygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IG9wdGlvbnMgJiYgaSA8IG9w
dGlvbnMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICBpZiAoIW9wdGlvbnMpCisgICAgICAgIHJldHVy
biAwOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG9wdGlvbnMtPmxlbmd0aCgpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBIVE1MT3B0aW9uRWxl
bWVudCogb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihvcHRpb25zLT5p
dGVtKGkpKTsKLSAgICAgICAgaWYgKCFvcHRpb24tPmRpc2FibGVkKCkgJiYgY3VycmVudFZhbHVl
ID09IG9wdGlvbi0+dmFsdWUoKSkKKyAgICAgICAgaWYgKCFvcHRpb24tPmRpc2FibGVkKCkgJiYg
dmFsdWUgPT0gb3B0aW9uLT52YWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjsKICAg
ICB9CiAgICAgcmV0dXJuIDA7CkBAIC0xNjk3LDcgKzEzMzIsNyBAQCB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OnN0ZXBVcEZyb21SZW5kZXJlCiAgICAgLy8gVGhlIHZhbHVlIHdpbGwgYmUgdGhlIGRl
ZmF1bHQgdmFsdWUgYWZ0ZXIgc3RlcHBpbmcgZm9yIDxpbnB1dCB2YWx1ZT0oZW1wdHkvaW52YWxp
ZCkgc3RlcD0iYW55IiAvPgogICAgIC8vIEZJWE1FOiBOb3QgYW55IGNoYW5nZXMgYWZ0ZXIgc3Rl
cHBpbmcsIGV2ZW4gaWYgaXQgaXMgYW4gaW52YWxpZCB2YWx1ZSwgbWF5IGJlIGJldHRlci4KICAg
ICAvLyAoZS5nLiBTdGVwcGluZy11cCBmb3IgPGlucHV0IHR5cGU9Im51bWJlciIgdmFsdWU9ImZv
byIgc3RlcD0iYW55IiAvPiA9PiAiZm9vIikKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0
QXR0cmlidXRlKHN0ZXBBdHRyKSwgImFueSIpKQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShm
YXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSwgImFueSIpKQogICAgICAgICBzdGVwID0gMDsKICAg
ICBlbHNlIGlmICghZ2V0QWxsb3dlZFZhbHVlU3RlcFdpdGhEZWNpbWFsUGxhY2VzKCZzdGVwLCAm
c3RlcERlY2ltYWxQbGFjZXMpKQogICAgICAgICByZXR1cm47CkBAIC0xNzYyLDQ5ICsxMzk3LDEy
NiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnN0ZXBVcEZyb21SZW5kZXJlCiB9CiAKICNpZiBF
TkFCTEUoV0NTUykKKwogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRXYXBJbnB1dEZvcm1hdChT
dHJpbmcmIG1hc2spCiB7CiAgICAgU3RyaW5nIHZhbGlkYXRlTWFzayA9IHZhbGlkYXRlSW5wdXRN
YXNrKG1fZGF0YSwgbWFzayk7CiAgICAgaWYgKCF2YWxpZGF0ZU1hc2suaXNFbXB0eSgpKQogICAg
ICAgICBtX2RhdGEuc2V0SW5wdXRGb3JtYXRNYXNrKHZhbGlkYXRlTWFzayk7CiB9CisKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKKwogYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojpp
c1NwZWVjaEVuYWJsZWQoKSBjb25zdAogewotICAgIHN3aXRjaCAoZGVwcmVjYXRlZElucHV0VHlw
ZSgpKSB7CiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBSQU5HRSwgRU1BSUwsIFVSTCwg
Q09MT1IgYW5kIERBVEUvVElNRSBpbnB1dCB0eXBlcy4KLSAgICBjYXNlIE5VTUJFUjoKLSAgICBj
YXNlIFBBU1NXT1JEOgotICAgIGNhc2UgU0VBUkNIOgotICAgIGNhc2UgVEVMRVBIT05FOgotICAg
IGNhc2UgVEVYVDoKLSAgICAgICAgcmV0dXJuIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNwZWVj
aElucHV0RW5hYmxlZCgpICYmIGhhc0F0dHJpYnV0ZSh3ZWJraXRzcGVlY2hBdHRyKTsKLSAgICBj
YXNlIEJVVFRPTjoKLSAgICBjYXNlIENIRUNLQk9YOgotICAgIGNhc2UgQ09MT1I6Ci0gICAgY2Fz
ZSBEQVRFOgotICAgIGNhc2UgREFURVRJTUU6Ci0gICAgY2FzZSBEQVRFVElNRUxPQ0FMOgotICAg
IGNhc2UgRU1BSUw6Ci0gICAgY2FzZSBGSUxFOgotICAgIGNhc2UgSElEREVOOgotICAgIGNhc2Ug
SU1BR0U6Ci0gICAgY2FzZSBJU0lOREVYOgotICAgIGNhc2UgTU9OVEg6Ci0gICAgY2FzZSBSQURJ
TzoKLSAgICBjYXNlIFJBTkdFOgotICAgIGNhc2UgUkVTRVQ6Ci0gICAgY2FzZSBTVUJNSVQ6Ci0g
ICAgY2FzZSBUSU1FOgotICAgIGNhc2UgVVJMOgotICAgIGNhc2UgV0VFSzoKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1faW5wdXRU
eXBlLT5zaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKCkgJiYgUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c3BlZWNoSW5wdXRFbmFibGVkKCkgJiYgaGFzQXR0cmlidXRlKHdlYmtpdHNwZWVjaEF0
dHIpOwogfQogCiAjZW5kaWYKIAorYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc1RleHRCdXR0b24o
KSBjb25zdAoreworICAgIHJldHVybiBtX2lucHV0VHlwZS0+aXNUZXh0QnV0dG9uKCk7Cit9CisK
K2Jvb2wgSFRNTElucHV0RWxlbWVudDo6aXNSYWRpb0J1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1faW5wdXRUeXBlLT5pc1JhZGlvQnV0dG9uKCk7Cit9CisKK2Jvb2wgSFRNTElucHV0RWxl
bWVudDo6aXNTZWFyY2hGaWVsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5p
c1NlYXJjaEZpZWxkKCk7Cit9CisKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6aXNJbnB1dFR5cGVI
aWRkZW4oKSBjb25zdAoreworICAgIHJldHVybiBtX2lucHV0VHlwZS0+aXNIaWRkZW5UeXBlKCk7
Cit9CisKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6aXNQYXNzd29yZEZpZWxkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9pbnB1dFR5cGUtPmlzUGFzc3dvcmRGaWVsZCgpOworfQorCitib29sIEhU
TUxJbnB1dEVsZW1lbnQ6OmlzQ2hlY2tib3goKSBjb25zdAoreworICAgIHJldHVybiBtX2lucHV0
VHlwZS0+aXNDaGVja2JveCgpOworfQorCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzVGV4dCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5pc1RleHRUeXBlKCk7Cit9CisKK2Jv
b2wgSFRNTElucHV0RWxlbWVudDo6aXNFbWFpbEZpZWxkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9pbnB1dFR5cGUtPmlzRW1haWxGaWVsZCgpOworfQorCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6
OmlzRmlsZVVwbG9hZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5pc0ZpbGVV
cGxvYWQoKTsKK30KKworYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc0ltYWdlQnV0dG9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9pbnB1dFR5cGUtPmlzSW1hZ2VCdXR0b24oKTsKK30KKworYm9v
bCBIVE1MSW5wdXRFbGVtZW50Ojppc051bWJlckZpZWxkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9pbnB1dFR5cGUtPmlzTnVtYmVyRmllbGQoKTsKK30KKworYm9vbCBIVE1MSW5wdXRFbGVtZW50
Ojppc1N1Ym1pdEJ1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5pc1N1
Ym1pdEJ1dHRvbigpOworfQorCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzVGVsZXBob25lRmll
bGQoKSBjb25zdAoreworICAgIHJldHVybiBtX2lucHV0VHlwZS0+aXNUZWxlcGhvbmVGaWVsZCgp
OworfQorCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzVVJMRmllbGQoKSBjb25zdAoreworICAg
IHJldHVybiBtX2lucHV0VHlwZS0+aXNVUkxGaWVsZCgpOworfQorCitib29sIEhUTUxJbnB1dEVs
ZW1lbnQ6OmlzRW51bWVyYXRhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnB1dFR5cGUt
PmlzRW51bWVyYXRhYmxlKCk7Cit9CisKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6aXNDaGVja2Vk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2hlY2tlZCgpICYmIG1faW5wdXRUeXBlLT5pc0NoZWNr
YWJsZSgpOworfQorCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6Omhhc1NwaW5CdXR0b24oKSBjb25z
dAoreworICAgIHJldHVybiBtX2lucHV0VHlwZS0+aGFzU3BpbkJ1dHRvbigpOworfQorCitib29s
IEhUTUxJbnB1dEVsZW1lbnQ6OnN1cHBvcnRzUGxhY2Vob2xkZXIoKSBjb25zdAoreworICAgIHJl
dHVybiBpc1RleHRUeXBlKCk7Cit9CisKK0NoZWNrZWRSYWRpb0J1dHRvbnMmIEhUTUxJbnB1dEVs
ZW1lbnQ6OmNoZWNrZWRSYWRpb0J1dHRvbnMoKSBjb25zdAoreworICAgIGlmIChIVE1MRm9ybUVs
ZW1lbnQqIGZvcm1FbGVtZW50ID0gZm9ybSgpKQorICAgICAgICByZXR1cm4gZm9ybUVsZW1lbnQt
PmNoZWNrZWRSYWRpb0J1dHRvbnMoKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y2hlY2tlZFJh
ZGlvQnV0dG9ucygpOworfQorCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50KEV2ZW50KiBldmVudCkKK3sKKyAgICBJbnB1dEVsZW1lbnQ6OmhhbmRs
ZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KG1fZGF0YSwgdGhpcywgdGhpcywgZXZlbnQpOworfQor
CiB9IC8vIG5hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCShyZXZpc2lvbiA3
NDgzNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDIxICsyNSwxNSBAQAogI2RlZmluZSBIVE1MSW5wdXRFbGVtZW50X2gKIAogI2luY2x1
ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQu
aCIKICNpbmNsdWRlICJJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbnB1dFR5cGUuaCIKLSNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRGF0
ZUNvbXBvbmVudHM7CiBjbGFzcyBGaWxlTGlzdDsKIGNsYXNzIEhUTUxEYXRhTGlzdEVsZW1lbnQ7
Ci1jbGFzcyBIVE1MSW1hZ2VMb2FkZXI7CiBjbGFzcyBIVE1MT3B0aW9uRWxlbWVudDsKIGNsYXNz
IElucHV0VHlwZTsKIGNsYXNzIEtVUkw7Ci1jbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCiBjbGFz
cyBIVE1MSW5wdXRFbGVtZW50IDogcHVibGljIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LCBw
dWJsaWMgSW5wdXRFbGVtZW50IHsKIHB1YmxpYzoKQEAgLTg0LDM4ICs3OCwzOCBAQCBwdWJsaWM6
CiAgICAgLy8gc3RlcFVwKCkvc3RlcERvd24oKSBmb3IgdXNlci1pbnRlcmFjdGlvbi4KICAgICB2
b2lkIHN0ZXBVcEZyb21SZW5kZXJlcihpbnQpOwogCi0gICAgYm9vbCBpc1RleHRCdXR0b24oKSBj
b25zdCB7IHJldHVybiBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gU1VCTUlUIHx8IGRlcHJlY2F0
ZWRJbnB1dFR5cGUoKSA9PSBSRVNFVCB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gQlVUVE9O
OyB9CisgICAgYm9vbCBpc1RleHRCdXR0b24oKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBp
c1JhZGlvQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZGVwcmVjYXRlZElucHV0VHlwZSgpID09IFJB
RElPOyB9CisgICAgdmlydHVhbCBib29sIGlzUmFkaW9CdXR0b24oKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTZWFyY2hG
aWVsZCgpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBTRUFSQ0g7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNJbnB1dFR5cGVIaWRkZW4oKSBjb25zdCB7IHJldHVybiBkZXBy
ZWNhdGVkSW5wdXRUeXBlKCkgPT0gSElEREVOOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUGFzc3dv
cmRGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBQQVNTV09S
RDsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrYm94KCkgY29uc3QgeyByZXR1cm4gZGVwcmVj
YXRlZElucHV0VHlwZSgpID09IENIRUNLQk9YOyB9CisgICAgdmlydHVhbCBib29sIGlzU2VhcmNo
RmllbGQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNJbnB1dFR5cGVIaWRkZW4oKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQYXNzd29yZEZpZWxkKCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGlzQ2hlY2tib3goKSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBJdCdzIGhpZ2hseSBs
aWtlbHkgdGhhdCBhbnkgY2FsbCBzaXRlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBzaG91bGQgaW5z
dGVhZAogICAgIC8vIGJlIHVzaW5nIGEgZGlmZmVyZW50IG9uZS4gTWFueSBpbnB1dCBlbGVtZW50
cyBiZWhhdmUgbGlrZSB0ZXh0IGZpZWxkcywgYW5kIGluIGFkZGl0aW9uCiAgICAgLy8gYW55IHVu
a25vd24gaW5wdXQgdHlwZSBpcyB0cmVhdGVkIGFzIHRleHQuIENvbnNpZGVyLCBmb3IgZXhhbXBs
ZSwgaXNUZXh0RmllbGQgb3IKICAgICAvLyBpc1RleHRGaWVsZCAmJiAhaXNQYXNzd29yZEZpZWxk
LgotICAgIGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gZGVwcmVjYXRlZElucHV0VHlwZSgp
ID09IFRFWFQ7IH0KKyAgICBib29sIGlzVGV4dCgpIGNvbnN0OwogCi0gICAgYm9vbCBpc0VtYWls
RmllbGQoKSBjb25zdCB7IHJldHVybiBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gRU1BSUw7IH0K
LSAgICBib29sIGlzRmlsZVVwbG9hZCgpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJbnB1dFR5
cGUoKSA9PSBGSUxFOyB9Ci0gICAgYm9vbCBpc0ltYWdlQnV0dG9uKCkgY29uc3QgeyByZXR1cm4g
ZGVwcmVjYXRlZElucHV0VHlwZSgpID09IElNQUdFOyB9Ci0gICAgYm9vbCBpc051bWJlckZpZWxk
KCkgY29uc3QgeyByZXR1cm4gZGVwcmVjYXRlZElucHV0VHlwZSgpID09IE5VTUJFUjsgfQotICAg
IGJvb2wgaXNTdWJtaXRCdXR0b24oKSBjb25zdCB7IHJldHVybiBkZXByZWNhdGVkSW5wdXRUeXBl
KCkgPT0gU1VCTUlUOyB9Ci0gICAgYm9vbCBpc1RlbGVwaG9uZUZpZWxkKCkgY29uc3QgeyByZXR1
cm4gZGVwcmVjYXRlZElucHV0VHlwZSgpID09IFRFTEVQSE9ORTsgfQotICAgIGJvb2wgaXNVUkxG
aWVsZCgpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBVUkw7IH0KKyAg
ICBib29sIGlzRW1haWxGaWVsZCgpIGNvbnN0OworICAgIGJvb2wgaXNGaWxlVXBsb2FkKCkgY29u
c3Q7CisgICAgYm9vbCBpc0ltYWdlQnV0dG9uKCkgY29uc3Q7CisgICAgYm9vbCBpc051bWJlckZp
ZWxkKCkgY29uc3Q7CisgICAgYm9vbCBpc1N1Ym1pdEJ1dHRvbigpIGNvbnN0OworICAgIGJvb2wg
aXNUZWxlcGhvbmVGaWVsZCgpIGNvbnN0OworICAgIGJvb2wgaXNVUkxGaWVsZCgpIGNvbnN0Owog
CiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICB2aXJ0dWFsIGJvb2wgaXNTcGVlY2hFbmFi
bGVkKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIGJvb2wgY2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fY2hlY2tlZDsgfQorICAgIGJvb2wgY2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDaGVj
a2VkOyB9CiAgICAgdm9pZCBzZXRDaGVja2VkKGJvb2wsIGJvb2wgc2VuZENoYW5nZUV2ZW50ID0g
ZmFsc2UpOwogCiAgICAgLy8gJ2luZGV0ZXJtaW5hdGUnIGlzIGEgc3RhdGUgaW5kZXBlbmRlbnQg
b2YgdGhlIGNoZWNrZWQgc3RhdGUgdGhhdCBjYXVzZXMgdGhlIGNvbnRyb2wgdG8gZHJhdyBpbiBh
IHdheSB0aGF0IGhpZGVzIHRoZSBhY3R1YWwgc3RhdGUuCi0gICAgYm9vbCBpbmRldGVybWluYXRl
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRldGVybWluYXRlOyB9CisgICAgYm9vbCBpbmRldGVybWlu
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luZGV0ZXJtaW5hdGU7IH0KICAgICB2b2lkIHNldElu
ZGV0ZXJtaW5hdGUoYm9vbCk7CiAKICAgICB2aXJ0dWFsIGludCBzaXplKCkgY29uc3Q7CkBAIC0x
NjUsOCArMTU5LDYgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGRlZmF1bHRWYWx1ZSgpIGNvbnN0
OwogICAgIHZvaWQgc2V0RGVmYXVsdFZhbHVlKGNvbnN0IFN0cmluZyYpOwotICAgIAotICAgIGJv
b2wgZGVmYXVsdENoZWNrZWQoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RGVmYXVsdE5hbWUoY29u
c3QgQXRvbWljU3RyaW5nJik7CiAKQEAgLTE4MiwxMiArMTc0LDggQEAgcHVibGljOgogCiAgICAg
Ym9vbCBtdWx0aXBsZSgpIGNvbnN0OwogCi0jaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCi0g
ICAgYm9vbCB3ZWJraXRkaXJlY3RvcnkoKSBjb25zdDsKLSNlbmRpZgotCi0gICAgdmlydHVhbCBi
b29sIGlzQXV0b2ZpbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b2ZpbGxlZDsgfQotICAgIHZv
aWQgc2V0QXV0b2ZpbGxlZChib29sIHZhbHVlID0gdHJ1ZSk7CisgICAgdmlydHVhbCBib29sIGlz
QXV0b2ZpbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBdXRvZmlsbGVkOyB9CisgICAgdm9pZCBz
ZXRBdXRvZmlsbGVkKGJvb2wgPSB0cnVlKTsKIAogICAgIEZpbGVMaXN0KiBmaWxlcygpOwogCkBA
IC0yMDMsNjAgKzE5MSwyNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXYXBJbnB1dEZvcm1hdChT
dHJpbmcmIG1hc2spOwogI2VuZGlmCiAKLSAgICBpbmxpbmUgQ2hlY2tlZFJhZGlvQnV0dG9ucyYg
Y2hlY2tlZFJhZGlvQnV0dG9ucygpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoSFRNTEZvcm1F
bGVtZW50KiBmb3JtRWxlbWVudCA9IGZvcm0oKSkKLSAgICAgICAgICAgIHJldHVybiBmb3JtRWxl
bWVudC0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpOwotICAgICAgICByZXR1cm4gZG9jdW1lbnQoKS0+
Y2hlY2tlZFJhZGlvQnV0dG9ucygpOwotICAgIH0KLQotICAgIHZvaWQgaGFuZGxlQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQoRXZlbnQqIGV2ZW50KTsKLQorICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBh
cmUgcHVibGljIHNvIHRoZXkgY2FuIGJlIHVzZWQgaW4gSW5wdXRUeXBlIGNsYXNzZXMuCisgICAg
Ly8gT3RoZXJ3aXNlLCB0aGV5IHdvdWxkIGJlIHByaXZhdGUuCisgICAgQ2hlY2tlZFJhZGlvQnV0
dG9ucyYgY2hlY2tlZFJhZGlvQnV0dG9ucygpIGNvbnN0OworICAgIHZvaWQgaGFuZGxlQmVmb3Jl
VGV4dEluc2VydGVkRXZlbnQoRXZlbnQqKTsKKyAgICB2b2lkIHVwZGF0ZUNoZWNrZWRSYWRpb0J1
dHRvbnMoKTsKKyAgICAKIHByb3RlY3RlZDoKICAgICBIVE1MSW5wdXRFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CiAKIHByaXZhdGU6Ci0gICAg
ZW51bSBEZXByZWNhdGVkSW5wdXRUeXBlIHsKLSAgICAgICAgVEVYVCA9IDAsIC8vIFRFWFQgbXVz
dCBiZSAwLgotICAgICAgICBQQVNTV09SRCwKLSAgICAgICAgSVNJTkRFWCwKLSAgICAgICAgQ0hF
Q0tCT1gsCi0gICAgICAgIFJBRElPLAotICAgICAgICBTVUJNSVQsCi0gICAgICAgIFJFU0VULAot
ICAgICAgICBGSUxFLAotICAgICAgICBISURERU4sCi0gICAgICAgIElNQUdFLAotICAgICAgICBC
VVRUT04sCi0gICAgICAgIFNFQVJDSCwKLSAgICAgICAgUkFOR0UsCi0gICAgICAgIEVNQUlMLAot
ICAgICAgICBOVU1CRVIsCi0gICAgICAgIFRFTEVQSE9ORSwKLSAgICAgICAgVVJMLAotICAgICAg
ICBDT0xPUiwKLSAgICAgICAgREFURSwKLSAgICAgICAgREFURVRJTUUsCi0gICAgICAgIERBVEVU
SU1FTE9DQUwsCi0gICAgICAgIE1PTlRILAotICAgICAgICBUSU1FLAotICAgICAgICBXRUVLLAot
ICAgIH07Ci0KICAgICBlbnVtIEF1dG9Db21wbGV0ZVNldHRpbmcgeyBVbmluaXRpYWxpemVkLCBP
biwgT2ZmIH07CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBIVE1MSW5wdXRFbGVtZW50
OjpEZXByZWNhdGVkSW5wdXRUeXBlLCBDYXNlRm9sZGluZ0hhc2g+IElucHV0VHlwZU1hcDsKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGVNYXA+IGNyZWF0ZVR5cGVNYXAoKTsKLSAgICBE
ZXByZWNhdGVkSW5wdXRUeXBlIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxEZXByZWNhdGVkSW5wdXRUeXBlPihtX2RlcHJlY2F0ZWRUeXBlTnVtYmVyKTsg
fQotCiAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiAgICAg
dmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0Vu
dW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSAhPSBJTUFH
RTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVGb2N1c0FwcGVhcmFuY2UoYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rp
b24pOwogICAgIHZpcnR1YWwgdm9pZCBhYm91dFRvVW5sb2FkKCk7CiAgICAgdmlydHVhbCBib29s
IHNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3Q7CkBAIC0yNjQsMTYgKzIxOCwxNCBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbE5hbWUoKSBj
b25zdDsKICAKICAgICAvLyBpc0NoZWNrZWQgaXMgdXNlZCBieSB0aGUgcmVuZGVyaW5nIHRyZWUv
Q1NTIHdoaWxlIGNoZWNrZWQoKSBpcyB1c2VkIGJ5IEpTIHRvIGRldGVybWluZSBjaGVja2VkIHN0
YXRlCi0gICAgdmlydHVhbCBib29sIGlzQ2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIGNoZWNrZWQo
KSAmJiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IENIRUNLQk9YIHx8IGRlcHJlY2F0ZWRJbnB1
dFR5cGUoKSA9PSBSQURJTyk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2VkKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIGlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV0
ZXJtaW5hdGUoKTsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRGb3JtQ29udHJvbCgp
IGNvbnN0IHsgcmV0dXJuIGlzVGV4dEZpZWxkKCk7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBoYXNT
cGluQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZGVwcmVjYXRlZElucHV0VHlwZSgpID09IE5VTUJF
UiB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gREFURSB8fCBkZXByZWNhdGVkSW5wdXRUeXBl
KCkgPT0gREFURVRJTUUgfHwgZGVwcmVjYXRlZElucHV0VHlwZSgpID09IERBVEVUSU1FTE9DQUwg
fHwgZGVwcmVjYXRlZElucHV0VHlwZSgpID09IE1PTlRIIHx8IGRlcHJlY2F0ZWRJbnB1dFR5cGUo
KSA9PSBUSU1FIHx8IGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBXRUVLOyB9CisgICAgdmlydHVh
bCBib29sIGhhc1NwaW5CdXR0b24oKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2FuVHJpZ2dl
ckltcGxpY2l0U3VibWlzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGlzVGV4dEZpZWxkKCk7IH0KIAot
ICAgIGJvb2wgYWxsb3dzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJ
bnB1dFR5cGUoKSA9PSBDSEVDS0JPWCB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gUkFESU87
IH0KLQogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBj
b25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBzZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNoZWQo
KSBjb25zdDsKQEAgLTI5Niw5ICsyNDgsNiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29s
IGlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpIGNvbnN0OwogCi0gICAgLy8gUmVwb3J0IGlmIHRo
aXMgaW5wdXQgdHlwZSB1c2VzIGhlaWdodCAmIHdpZHRoIGF0dHJpYnV0ZXMKLSAgICBib29sIHJl
c3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJzKCkgY29uc3QgeyByZXR1cm4gZGVwcmVjYXRlZElucHV0
VHlwZSgpID09IElNQUdFIHx8IGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBISURERU47IH0KLQog
ICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwogCiAgICAgdmlydHVhbCB2b2lkKiBwcmVEaXNwYXRj
aEV2ZW50SGFuZGxlcihFdmVudCopOwpAQCAtMzE5LDggKzI2OCw2IEBAIHByaXZhdGU6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtV
Ukw+JikgY29uc3Q7CiAKLSAgICBib29sIHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRl
KCkgY29uc3Q7Ci0KICAgICBib29sIG5lZWRzQWN0aXZhdGlvbkNhbGxiYWNrKCk7CiAgICAgdm9p
ZCByZWdpc3RlckZvckFjdGl2YXRpb25DYWxsYmFja0lmTmVlZGVkKCk7CiAgICAgdm9pZCB1bnJl
Z2lzdGVyRm9yQWN0aXZhdGlvbkNhbGxiYWNrSWZOZWVkZWQoKTsKQEAgLTMyOCw3ICsyNzUsNyBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01heExlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIGlzVGV4dFR5cGUoKTsgfQogICAgIGJvb2wgaXNUZXh0VHlwZSgpIGNvbnN0OwogCi0g
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzUGxhY2Vob2xkZXIoKSBjb25zdCB7IHJldHVybiBpc1Rl
eHRUeXBlKCkgfHwgZGVwcmVjYXRlZElucHV0VHlwZSgpID09IElTSU5ERVg7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNQbGFjZWhvbGRlcigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBp
c0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiB2YWx1ZSgpLmlzRW1wdHkoKTsgfQogICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVGb2N1c0V2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUJs
dXJFdmVudCgpOwpAQCAtMzQxLDggKzI4OCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0
ZVR5cGUoKTsKIAotICAgIHZvaWQgdXBkYXRlQ2hlY2tlZFJhZGlvQnV0dG9ucygpOwotICAgIAog
ICAgIC8vIEhlbHBlciBmb3Igc3RlcFVwKCkvc3RlcERvd24oKS4gIEFkZHMgc3RlcCB2YWx1ZSAq
IGNvdW50IHRvIHRoZSBjdXJyZW50IHZhbHVlLgogICAgIHZvaWQgYXBwbHlTdGVwKGRvdWJsZSBj
b3VudCwgRXhjZXB0aW9uQ29kZSYpOwogCkBAIC0zNTYsMjkgKzMwMSwxOSBAQCBwcml2YXRlOgog
CiAgICAgSW5wdXRFbGVtZW50RGF0YSBtX2RhdGE7CiAgICAgc2hvcnQgbV9tYXhSZXN1bHRzOwot
ICAgIE93blB0cjxIVE1MSW1hZ2VMb2FkZXI+IG1faW1hZ2VMb2FkZXI7Ci0gICAgUmVmUHRyPEZp
bGVMaXN0PiBtX2ZpbGVMaXN0OwotICAgIHVuc2lnbmVkIG1fZGVwcmVjYXRlZFR5cGVOdW1iZXIg
OiA1OyAvLyBEZXByZWNhdGVkSW5wdXRUeXBlIAotICAgIGJvb2wgbV9jaGVja2VkIDogMTsKLSAg
ICBib29sIG1fZGVmYXVsdENoZWNrZWQgOiAxOwotICAgIGJvb2wgbV91c2VEZWZhdWx0Q2hlY2tl
ZCA6IDE7Ci0gICAgYm9vbCBtX2luZGV0ZXJtaW5hdGUgOiAxOwotICAgIGJvb2wgbV9oYXZlVHlw
ZSA6IDE7Ci0gICAgYm9vbCBtX2FjdGl2ZVN1Ym1pdCA6IDE7CisgICAgYm9vbCBtX2lzQ2hlY2tl
ZCA6IDE7CisgICAgYm9vbCBtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0ZSA6IDE7CisgICAgYm9v
bCBtX2lzSW5kZXRlcm1pbmF0ZSA6IDE7CisgICAgYm9vbCBtX2hhc1R5cGUgOiAxOworICAgIGJv
b2wgbV9pc0FjdGl2YXRlZFN1Ym1pdCA6IDE7CiAgICAgdW5zaWduZWQgbV9hdXRvY29tcGxldGUg
OiAyOyAvLyBBdXRvQ29tcGxldGVTZXR0aW5nCi0gICAgYm9vbCBtX2F1dG9maWxsZWQgOiAxOwot
ICAgIGJvb2wgbV9pbml0ZWQgOiAxOworICAgIGJvb2wgbV9pc0F1dG9maWxsZWQgOiAxOwogI2lm
IEVOQUJMRShEQVRBTElTVCkKICAgICBib29sIG1faGFzTm9uRW1wdHlMaXN0IDogMTsKICNlbmRp
ZgogICAgIE93blB0cjxJbnB1dFR5cGU+IG1faW5wdXRUeXBlOwogfTsKIAotaW5saW5lIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoRXZlbnQqIGV2
ZW50KQotewotICAgIElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQo
bV9kYXRhLCB0aGlzLCB0aGlzLCBldmVudCk7Ci19Ci0KIH0gLy9uYW1lc3BhY2UKIAogI2VuZGlm
CkluZGV4OiBXZWJDb3JlL2h0bWwvSGlkZGVuSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSGlkZGVuSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4MzUpCisrKyBXZWJD
b3JlL2h0bWwvSGlkZGVuSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC01NSw0ICs1NiwyOCBA
QCBSZW5kZXJPYmplY3QqIEhpZGRlbklucHV0VHlwZTo6Y3JlYXRlUmVuCiAgICAgcmV0dXJuIDA7
CiB9CiAKK3ZvaWQgSGlkZGVuSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oYm9vbCkKK3sKK30K
KworYm9vbCBIaWRkZW5JbnB1dFR5cGU6OnJlbmRlcmVySXNOZWVkZWQoKQoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBIaWRkZW5JbnB1dFR5cGU6OnN0b3Jlc1ZhbHVlU2VwYXJhdGVG
cm9tQXR0cmlidXRlKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSGlkZGVuSW5w
dXRUeXBlOjppc0hpZGRlblR5cGUoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIEhpZGRlbklucHV0VHlwZTo6c2hvdWxkUmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0cmlidXRl
cygpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IaWRkZW5JbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSGlkZGVuSW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODM1KQorKysgV2ViQ29yZS9odG1s
L0hpZGRlbklucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMSBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNWYWxpZGF0aW9uKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVy
U3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wgc2Vu
ZFRvQW55RWxlbWVudCk7CisgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgc3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNIaWRkZW5UeXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3Vs
ZFJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJpYnV0ZXMoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4MzUpCisr
KyBXZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjMsNiArMjMsOCBA
QAogI2luY2x1ZGUgIkltYWdlSW5wdXRUeXBlLmgiCiAKICNpbmNsdWRlICJGb3JtRGF0YUxpc3Qu
aCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VMb2Fk
ZXIuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVu
dC5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCkBAIC0zMCw2ICszMiwxMSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2lubGluZSBJbWFnZUlucHV0VHlwZTo6SW1hZ2VJbnB1dFR5cGUo
SFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKKyAgICA6IEJhc2VCdXR0b25JbnB1dFR5cGUoZWxl
bWVudCkKK3sKK30KKwogUGFzc093blB0cjxJbnB1dFR5cGU+IEltYWdlSW5wdXRUeXBlOjpjcmVh
dGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEltYWdlSW5wdXRUeXBlKGVsZW1lbnQpKTsKQEAgLTg1LDQgKzkyLDY5IEBAIFJlbmRlck9iamVj
dCogSW1hZ2VJbnB1dFR5cGU6OmNyZWF0ZVJlbmQKICAgICByZXR1cm4gaW1hZ2U7CiB9CiAKK3Zv
aWQgSW1hZ2VJbnB1dFR5cGU6OnNyY0F0dHJpYnV0ZUNoYW5nZWQoKQoreworICAgIGlmICghZWxl
bWVudCgpLT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX2ltYWdlTG9h
ZGVyKQorICAgICAgICBtX2ltYWdlTG9hZGVyID0gYWRvcHRQdHIobmV3IEhUTUxJbWFnZUxvYWRl
cihlbGVtZW50KCkpKTsKKyAgICBtX2ltYWdlTG9hZGVyLT51cGRhdGVGcm9tRWxlbWVudElnbm9y
aW5nUHJldmlvdXNFcnJvcigpOworfQorCit2b2lkIEltYWdlSW5wdXRUeXBlOjphdHRhY2goKQor
eworICAgIEJhc2VCdXR0b25JbnB1dFR5cGU6OmF0dGFjaCgpOworCisgICAgaWYgKCFtX2ltYWdl
TG9hZGVyKQorICAgICAgICBtX2ltYWdlTG9hZGVyID0gYWRvcHRQdHIobmV3IEhUTUxJbWFnZUxv
YWRlcihlbGVtZW50KCkpKTsKKyAgICBtX2ltYWdlTG9hZGVyLT51cGRhdGVGcm9tRWxlbWVudCgp
OworCisgICAgUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZShlbGVtZW50KCkt
PnJlbmRlcmVyKCkpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbV9pbWFnZUxvYWRlci0+aGF2ZUZpcmVkQmVmb3JlTG9hZEV2ZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFJlbmRlckltYWdlUmVzb3VyY2UqIGltYWdlUmVzb3VyY2UgPSByZW5k
ZXJlci0+aW1hZ2VSZXNvdXJjZSgpOworICAgIGltYWdlUmVzb3VyY2UtPnNldENhY2hlZEltYWdl
KG1faW1hZ2VMb2FkZXItPmltYWdlKCkpOyAKKworICAgIC8vIElmIHdlIGhhdmUgbm8gaW1hZ2Ug
YXQgYWxsIGJlY2F1c2Ugd2UgaGF2ZSBubyBzcmMgYXR0cmlidXRlLCBzZXQKKyAgICAvLyBpbWFn
ZSBoZWlnaHQgYW5kIHdpZHRoIGZvciB0aGUgYWx0IHRleHQgaW5zdGVhZC4KKyAgICBpZiAoIW1f
aW1hZ2VMb2FkZXItPmltYWdlKCkgJiYgIWltYWdlUmVzb3VyY2UtPmNhY2hlZEltYWdlKCkpCisg
ICAgICAgIHJlbmRlcmVyLT5zZXRJbWFnZVNpemVGb3JBbHRUZXh0KCk7Cit9CisKK3ZvaWQgSW1h
Z2VJbnB1dFR5cGU6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKK3sKKyAgICBCYXNlQnV0
dG9uSW5wdXRUeXBlOjp3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOworICAgIGlmIChtX2lt
YWdlTG9hZGVyKQorICAgICAgICBtX2ltYWdlTG9hZGVyLT5lbGVtZW50V2lsbE1vdmVUb05ld093
bmVyRG9jdW1lbnQoKTsKK30KKworYm9vbCBJbWFnZUlucHV0VHlwZTo6c2hvdWxkUmVzcGVjdEFs
aWduQXR0cmlidXRlKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbWFnZUlucHV0
VHlwZTo6Y2FuQmVTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBJbWFnZUlucHV0VHlwZTo6aXNJbWFnZUJ1dHRvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW1hZ2VJbnB1dFR5cGU6OmlzRW51bWVyYXRhYmxlKCkK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW1hZ2VJbnB1dFR5cGU6OnNob3VsZFJl
c3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJpYnV0ZXMoKQoreworICAgIHJldHVybiB0cnVlOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuaAkocmV2aXNp
b24gNzQ4MzUpCisrKyBXZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC0zMywyNCArMzQsMzUgQEAKIAogI2luY2x1ZGUgIkJhc2VCdXR0b25JbnB1dFR5cGUuaCIKICNp
bmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBIVE1MSW1hZ2VMb2FkZXI7CisKIGNsYXNzIEltYWdlSW5wdXRU
eXBlIDogcHVibGljIEJhc2VCdXR0b25JbnB1dFR5cGUgewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzT3duUHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqKTsKIAogcHJpdmF0
ZToKLSAgICBJbWFnZUlucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KSA6IEJhc2VC
dXR0b25JbnB1dFR5cGUoZWxlbWVudCkgeyB9CisgICAgSW1hZ2VJbnB1dFR5cGUoSFRNTElucHV0
RWxlbWVudCopOwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5
cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtRGF0YUFwcGVuZGFibGUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVmFsaWRhdGlvbigpIGNvbnN0OwogICAg
IHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRl
clN0eWxlKikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZURPTUFjdGl2YXRlRXZlbnQo
RXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3JjQXR0cmlidXRlQ2hhbmdlZCgpOworICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVy
RG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVjdEFsaWduQXR0cmlidXRl
KCk7CisgICAgdmlydHVhbCBib29sIGNhbkJlU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpOworICAg
IHZpcnR1YWwgYm9vbCBpc0ltYWdlQnV0dG9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlz
RW51bWVyYXRhYmxlKCk7CisgICAgdmlydHVhbCBib29sIHNob3VsZFJlc3BlY3RIZWlnaHRBbmRX
aWR0aEF0dHJpYnV0ZXMoKTsKIAotICAgIC8vIFRoaXMgaXMgdmFsaWQgb25seSBkdXJpbmcgSFRN
TEZvcm1FbGVtZW50OjpwcmVwYXJlU3VibWl0KCkuCi0gICAgSW50UG9pbnQgbV9jbGlja0xvY2F0
aW9uOworICAgIE93blB0cjxIVE1MSW1hZ2VMb2FkZXI+IG1faW1hZ2VMb2FkZXI7CisgICAgSW50
UG9pbnQgbV9jbGlja0xvY2F0aW9uOyAvLyBWYWxpZCBvbmx5IGR1cmluZyBIVE1MRm9ybUVsZW1l
bnQ6OnByZXBhcmVTdWJtaXQoKS4KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9J
bnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3NDgzNSkKKysrIFdlYkNvcmUvaHRtbC9JbnB1dFR5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTM4LDYgKzM4LDcgQEAK
ICNpbmNsdWRlICJFbWFpbElucHV0VHlwZS5oIgogI2luY2x1ZGUgIkZpbGVJbnB1dFR5cGUuaCIK
ICNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSGlkZGVuSW5wdXRUeXBl
LmgiCiAjaW5jbHVkZSAiSW1hZ2VJbnB1dFR5cGUuaCIKQEAgLTY4LDcgKzY5LDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCi10eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBQYXNzT3duUHRyPElucHV0VHlwZT4gKCopKEhUTUxJbnB1dEVsZW1lbnQqKSwgQ2Fz
ZUZvbGRpbmdIYXNoPiBJbnB1dFR5cGVGYWN0b3J5TWFwOwordHlwZWRlZiBQYXNzT3duUHRyPElu
cHV0VHlwZT4gKCpJbnB1dFR5cGVGYWN0b3J5RnVuY3Rpb24pKEhUTUxJbnB1dEVsZW1lbnQqKTsK
K3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIElucHV0VHlwZUZhY3RvcnlGdW5jdGlvbiwgQ2FzZUZv
bGRpbmdIYXNoPiBJbnB1dFR5cGVGYWN0b3J5TWFwOworCiBzdGF0aWMgUGFzc093blB0cjxJbnB1
dFR5cGVGYWN0b3J5TWFwPiBjcmVhdGVJbnB1dFR5cGVGYWN0b3J5TWFwKCkKIHsKICAgICBPd25Q
dHI8SW5wdXRUeXBlRmFjdG9yeU1hcD4gbWFwID0gYWRvcHRQdHIobmV3IElucHV0VHlwZUZhY3Rv
cnlNYXApOwpAQCAtOTksNyArMTAyLDcgQEAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlRmFj
dG9yeU1hcD4gYwogICAgIHJldHVybiBtYXAucmVsZWFzZSgpOwogfQogCi1QYXNzT3duUHRyPElu
cHV0VHlwZT4gSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCwgY29u
c3QgQXRvbWljU3RyaW5nJiB0eXBlTmFtZSkKK1Bhc3NPd25QdHI8SW5wdXRUeXBlPiBJbnB1dFR5
cGU6OmNyZWF0ZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHR5cGVO
YW1lKQogewogICAgIHN0YXRpYyBjb25zdCBJbnB1dFR5cGVGYWN0b3J5TWFwKiBmYWN0b3J5TWFw
ID0gY3JlYXRlSW5wdXRUeXBlRmFjdG9yeU1hcCgpLmxlYWtQdHIoKTsKICAgICBQYXNzT3duUHRy
PElucHV0VHlwZT4gKCpmYWN0b3J5KShIVE1MSW5wdXRFbGVtZW50KikgPSB0eXBlTmFtZS5pc0Vt
cHR5KCkgPyAwIDogZmFjdG9yeU1hcC0+Z2V0KHR5cGVOYW1lKTsKQEAgLTI3Nyw3ICsyODAsNyBA
QCBib29sIElucHV0VHlwZTo6cGFyc2VkU3RlcFZhbHVlU2hvdWxkQmVJCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIElucHV0VHlwZTo6c2NhbGVkU3RlcFZhbGV1U2hvdWxkQmVJbnRlZ2Vy
KCkgY29uc3QKK2Jvb2wgSW5wdXRUeXBlOjpzY2FsZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIo
KSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTM3Niw2ICszNzksMjM1IEBAIHZv
aWQgSW5wdXRUeXBlOjpkaXNwYXRjaFNpbXVsYXRlZENsaWNrSWYKICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKIH0KIAorYm9vbCBJbnB1dFR5cGU6OmNhblNldFN0cmluZ1ZhbHVlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OmlzS2V5Ym9h
cmRGb2N1c2FibGUoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitib29sIElucHV0
VHlwZTo6c2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBJbnB1dFR5cGU6OmhhbmRsZUJsdXJFdmVudCgpCit7Cit9CisKK3ZvaWQgSW5w
dXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oYm9vbCkKK3sKKyAgICBlbGVtZW50KCktPmZvY3VzKGZh
bHNlKTsKK30KKwordm9pZCBJbnB1dFR5cGU6OmF0dGFjaCgpCit7Cit9CisKK3ZvaWQgSW5wdXRU
eXBlOjpzcmNBdHRyaWJ1dGVDaGFuZ2VkKCkKK3sKK30KKwordm9pZCBJbnB1dFR5cGU6OndpbGxN
b3ZlVG9OZXdPd25lckRvY3VtZW50KCkKK3sKK30KKworYm9vbCBJbnB1dFR5cGU6OnNob3VsZFJl
c3BlY3RBbGlnbkF0dHJpYnV0ZSgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElu
cHV0VHlwZTo6Y2FuQ2hhbmdlRnJvbUFub3RoZXJUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBJbnB1dFR5cGU6Om1pbk9yTWF4QXR0cmlidXRlQ2hhbmdlZCgpCit7
Cit9CisKK2Jvb2wgSW5wdXRUeXBlOjpjYW5CZVN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKQorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OnJlbmRlcmVySXNOZWVkZWQo
KQoreworICAgIHJldHVybiB0cnVlOworfQorCitGaWxlTGlzdCogSW5wdXRUeXBlOjpmaWxlcygp
Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSW5wdXRUeXBlOjpnZXRUeXBlU3BlY2lmaWNW
YWx1ZShTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworU3RyaW5nIElucHV0VHlw
ZTo6ZmFsbGJhY2tWYWx1ZSgpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcg
SW5wdXRUeXBlOjpkZWZhdWx0VmFsdWUoKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwor
Ym9vbCBJbnB1dFR5cGU6OmNhblNldFN1Z2dlc3RlZFZhbHVlKCkKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgSW5wdXRUeXBlOjpzaG91bGRTZW5kQ2hhbmdlRXZlbnRBZnRlckNoZWNr
ZWRDaGFuZ2VkKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OnN0
b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBJbnB1dFR5cGU6OmNhblNldFZhbHVlKGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK1Bhc3NPd25QdHI8Q2xpY2tIYW5kbGluZ1N0YXRlPiBJbnB1dFR5cGU6
OndpbGxEaXNwYXRjaENsaWNrKCkKK3sKKyAgICByZXR1cm4gUGFzc093blB0cjxDbGlja0hhbmRs
aW5nU3RhdGU+KCk7Cit9CisKK3ZvaWQgSW5wdXRUeXBlOjpkaWREaXNwYXRjaENsaWNrKEV2ZW50
KiwgY29uc3QgQ2xpY2tIYW5kbGluZ1N0YXRlJikKK3sKK30KKworYm9vbCBJbnB1dFR5cGU6Omlz
QWNjZXB0YWJsZVZhbHVlKGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K1N0cmluZyBJbnB1dFR5cGU6OnNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZh
bHVlKQoreworICAgIHJldHVybiBwcm9wb3NlZFZhbHVlOworfQorCitib29sIElucHV0VHlwZTo6
aGFzVW5hY2NlcHRhYmxlVmFsdWUoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJ
bnB1dFR5cGU6OnNldEZpbGVMaXN0KGNvbnN0IFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBJbnB1dFR5cGU6OnNob3VsZFJlc2V0T25Eb2N1
bWVudEFjdGl2YXRpb24oKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5
cGU6OnNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRlKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgSW5wdXRUeXBlOjpzaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKCkKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5wdXRUeXBlOjppc1RleHRCdXR0b24oKSBjb25z
dAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OmlzUmFkaW9CdXR0
b24oKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5cGU6Omlz
U2VhcmNoRmllbGQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1
dFR5cGU6OmlzSGlkZGVuVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIElucHV0VHlwZTo6aXNQYXNzd29yZEZpZWxkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgSW5wdXRUeXBlOjppc0NoZWNrYm94KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5wdXRUeXBlOjppc0VtYWlsRmllbGQoKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OmlzRmlsZVVwbG9hZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElucHV0VHlwZTo6aXNJbWFnZUJ1
dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElucHV0VHlwZTo6
aXNOdW1iZXJGaWVsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElu
cHV0VHlwZTo6aXNTdWJtaXRCdXR0b24oKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBJbnB1dFR5cGU6OmlzVGVsZXBob25lRmllbGQoKSBjb25zdAoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OmlzVVJMRmllbGQoKSBjb25zdAoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OmlzRW51bWVyYXRhYmxlKCkKK3sK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OmlzQ2hlY2thYmxlKCkKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5wdXRUeXBlOjpoYXNTcGluQnV0dG9uKCkK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5wdXRUeXBlOjpzaG91bGRSZXNwZWN0
SGVpZ2h0QW5kV2lkdGhBdHRyaWJ1dGVzKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIG5h
bWVzcGFjZSBJbnB1dFR5cGVOYW1lcyB7CiAKIC8vIFRoZSB0eXBlIG5hbWVzIG11c3QgYmUgbG93
ZXJjYXNlZCBiZWNhdXNlIHRoZXkgd2lsbCBiZSB0aGUgcmV0dXJuIHZhbHVlcyBvZgpAQCAtNTI1
LDYgKzc1Nyw2IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgd2VlaygpCiAgICAgcmV0dXJuIG5hbWU7
CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmU6OklucHVUeXBlTmFtZXMKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmU6OklucHV0VHlwZU5hbWVzCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODM1KQorKysgV2ViQ29yZS9odG1sL0lucHV0VHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKQEAgLTMxLDE1ICszMiwxNyBAQAogI2lmbmRlZiBJbnB1dFR5cGVfaAogI2Rl
ZmluZSBJbnB1dFR5cGVfaAogCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDsKIGNsYXNzIERhdGVDb21wb25l
bnRzOwogY2xhc3MgRXZlbnQ7CitjbGFzcyBGaWxlTGlzdDsKIGNsYXNzIEZvcm1EYXRhTGlzdDsK
IGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CkBAIC01MCwy
MSArNTMsNDYgQEAgY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFz
cyBXaGVlbEV2ZW50OwogCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitzdHJ1Y3QgQ2xp
Y2tIYW5kbGluZ1N0YXRlIHsKKyAgICBib29sIGNoZWNrZWQ7CisgICAgYm9vbCBpbmRldGVybWlu
YXRlOworICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBjaGVja2VkUmFkaW9CdXR0b247CisK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRAorfTsKKwogLy8gQW4gSW5wdXRUeXBlIG9iamVj
dCByZXByZXNlbnRzIHRoZSB0eXBlLXNwZWNpZmljIHBhcnQgb2YgYW4gSFRNTElucHV0RWxlbWVu
dC4KIC8vIERvIG5vdCBleHBvc2UgaW5zdGFuY2VzIG9mIElucHV0VHlwZSBhbmQgY2xhc3NlcyBk
ZXJpdmVkIGZyb20gaXQgdG8gY2xhc3NlcwogLy8gb3RoZXIgdGhhbiBIVE1MSW5wdXRFbGVtZW50
LgogY2xhc3MgSW5wdXRUeXBlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRFbGVtZW50KiwgY29u
c3QgQXRvbWljU3RyaW5nJik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBjcmVh
dGUoSFRNTElucHV0RWxlbWVudCosIGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyBQYXNzT3du
UHRyPElucHV0VHlwZT4gY3JlYXRlVGV4dChIVE1MSW5wdXRFbGVtZW50Kik7CiAgICAgdmlydHVh
bCB+SW5wdXRUeXBlKCk7CiAKLSAgICAvLyBUeXBlIHF1ZXJ5IGZ1bmN0aW9ucworICAgIC8vIFR5
cGUgcXVlcnkgZnVuY3Rpb25zICh0cnkgbm90IHRvIHVzZSB0aGVzZTsgYmFkIGZhY3RvcmluZykK
KworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBib29sIGNhbkNoYW5nZUZyb21Bbm90aGVyVHlwZSgpIGNvbnN0
OwogCisgICAgdmlydHVhbCBib29sIGlzQ2hlY2tib3goKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNFbWFpbEZpZWxkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzRmlsZVVwbG9hZCgp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0hpZGRlblR5cGUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNJbWFnZUJ1dHRvbigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc051bWJl
ckZpZWxkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBpc1JhZGlvQnV0dG9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGlzUmFuZ2VDb250cm9sKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzU2VhcmNoRmll
bGQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTdWJtaXRCdXR0b24oKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNUZWxlcGhvbmVGaWVsZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBpc1RleHRCdXR0b24oKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0VHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBpc1JhbmdlQ29udHJvbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzVVJM
RmllbGQoKSBjb25zdDsKIAogICAgIC8vIEZvcm0gdmFsdWUgZnVuY3Rpb25zCiAKQEAgLTc1LDYg
KzEwMyw5IEBAIHB1YmxpYzoKIAogICAgIC8vIERPTSBwcm9wZXJ0eSBmdW5jdGlvbnMKIAorICAg
IHZpcnR1YWwgYm9vbCBnZXRUeXBlU3BlY2lmaWNWYWx1ZShTdHJpbmcmKTsgLy8gQ2hlY2tlZCBm
aXJzdCwgYmVmb3JlIGludGVybmFsIHN0b3JhZ2Ugb3IgdGhlIHZhbHVlIGF0dHJpYnV0ZS4KKyAg
ICB2aXJ0dWFsIFN0cmluZyBmYWxsYmFja1ZhbHVlKCk7IC8vIENoZWNrZWQgbGFzdCwgaWYgYm90
aCBpbnRlcm5hbCBzdG9yYWdlIGFuZCB2YWx1ZSBhdHRyaWJ1dGUgYXJlIG1pc3NpbmcuCisgICAg
dmlydHVhbCBTdHJpbmcgZGVmYXVsdFZhbHVlKCk7IC8vIENoZWNrZWQgYWZ0ZXIgZXZlbiBmYWxs
YmFja1ZhbHVlLCBvbmx5IHdoZW4gdGhlIHZhbHVlV2l0aERlZmF1bHQgZnVuY3Rpb24gaXMgY2Fs
bGVkLgogICAgIHZpcnR1YWwgZG91YmxlIHZhbHVlQXNEYXRlKCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIHNldFZhbHVlQXNEYXRlKGRvdWJsZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAg
IHZpcnR1YWwgZG91YmxlIHZhbHVlQXNOdW1iZXIoKSBjb25zdDsKQEAgLTk3LDIwICsxMjgsMjYg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgZG91YmxlIGRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgZG91YmxlIG1pbmltdW0oKSBjb25zdDsKICAgICB2aXJ0dWFsIGRv
dWJsZSBtYXhpbXVtKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHN0ZXBNaXNtYXRjaChjb25z
dCBTdHJpbmcmLCBkb3VibGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzdGVwTWlzbWF0Y2go
Y29uc3QgU3RyaW5nJiwgZG91YmxlIHN0ZXApIGNvbnN0OwogICAgIHZpcnR1YWwgZG91YmxlIHN0
ZXBCYXNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgc3RlcEJhc2VXaXRoRGVjaW1hbFBs
YWNlcyh1bnNpZ25lZCopIGNvbnN0OwogICAgIHZpcnR1YWwgZG91YmxlIGRlZmF1bHRTdGVwKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgc3RlcFNjYWxlRmFjdG9yKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHBhcnNlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcigpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBzY2FsZWRTdGVwVmFsZXVTaG91bGRCZUludGVnZXIoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgc2NhbGVkU3RlcFZhbHVlU2hvdWxkQmVJbnRlZ2VyKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBkb3VibGUgYWNjZXB0YWJsZUVycm9yKGRvdWJsZSkgY29uc3Q7CiAgICAgdmly
dHVhbCBTdHJpbmcgdHlwZU1pc21hdGNoVGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5n
IHZhbHVlTWlzc2luZ1RleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0U3RyaW5n
VmFsdWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlcHRhYmxlVmFsdWUoY29uc3Qg
U3RyaW5nJik7CisgICAgdmlydHVhbCBTdHJpbmcgc2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcm
KTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVW5hY2NlcHRhYmxlVmFsdWUoKTsKIAogICAgIC8vIEV2
ZW50IGhhbmRsZXJzCiAKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQ2xpY2tFdmVudChNb3VzZUV2
ZW50Kik7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gd2lsbERp
c3BhdGNoQ2xpY2soKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRGlzcGF0Y2hDbGljayhFdmVudCos
IGNvbnN0IENsaWNrSGFuZGxpbmdTdGF0ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVET01B
Y3RpdmF0ZUV2ZW50KEV2ZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWRvd25FdmVu
dChLZXlib2FyZEV2ZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleXByZXNzRXZlbnQo
S2V5Ym9hcmRFdmVudCopOwpAQCAtMTIxLDI1ICsxNTgsNTIgQEAgcHVibGljOgogICAgIC8vIEhl
bHBlcnMgZm9yIGV2ZW50IGhhbmRsZXJzLgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdWJtaXRJ
bXBsaWNpdGx5KEV2ZW50Kik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVu
dD4gZm9ybUZvclN1Ym1pc3Npb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2Fy
ZEZvY3VzYWJsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VJbnB1dE1ldGhv
ZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVCbHVyRXZlbnQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCk7CisgICAgdmly
dHVhbCBib29sIGNhbkJlU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpOwogCiAgICAgLy8gTWlzY2Vs
bGFuZW91cyBmdW5jdGlvbnMKIAorICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKCk7
CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwg
UmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CisgICAgdmly
dHVhbCB2b2lkIG1pbk9yTWF4QXR0cmlidXRlQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCBz
cmNBdHRyaWJ1dGVDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdPd25l
ckRvY3VtZW50KCk7CisgICAgdmlydHVhbCBib29sIHNob3VsZFJlc3BlY3RBbGlnbkF0dHJpYnV0
ZSgpOworICAgIHZpcnR1YWwgRmlsZUxpc3QqIGZpbGVzKCk7CisgICAgdmlydHVhbCBib29sIGNh
blNldFN1Z2dlc3RlZFZhbHVlKCk7CisgICAgdmlydHVhbCBib29sIHNob3VsZFNlbmRDaGFuZ2VF
dmVudEFmdGVyQ2hlY2tlZENoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0VmFsdWUo
Y29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBib29sIHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9t
QXR0cmlidXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHNldEZpbGVMaXN0KGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXRocyk7CisgICAgdmlydHVhbCBib29sIHNob3VsZFJlc2V0T25Eb2N1bWVudEFj
dGl2YXRpb24oKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVjdExpc3RBdHRyaWJ1dGUo
KTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVjdFNwZWVjaEF0dHJpYnV0ZSgpOworICAg
IHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpOworICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNr
YWJsZSgpOworICAgIHZpcnR1YWwgYm9vbCBoYXNTcGluQnV0dG9uKCk7CisgICAgdmlydHVhbCBi
b29sIHNob3VsZFJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJpYnV0ZXMoKTsKIAogICAgIC8vIFBh
cnNlcyB0aGUgc3BlY2lmaWVkIHN0cmluZyBmb3IgdGhlIHR5cGUsIGFuZCByZXR1cm4KICAgICAv
LyB0aGUgZG91YmxlIHZhbHVlIGZvciB0aGUgcGFyc2luZyByZXN1bHQgaWYgdGhlIHBhcnNpbmcK
ICAgICAvLyBzdWNjZWVkczsgUmV0dXJucyBkZWZhdWx0VmFsdWUgb3RoZXJ3aXNlLiBUaGlzIGZ1
bmN0aW9uIGNhbgogICAgIC8vIHJldHVybiBOYU4gb3IgSW5maW5pdHkgb25seSBpZiBkZWZhdWx0
VmFsdWUgaXMgTmFOIG9yIEluZmluaXR5LgogICAgIHZpcnR1YWwgZG91YmxlIHBhcnNlVG9Eb3Vi
bGUoY29uc3QgU3RyaW5nJiwgZG91YmxlIGRlZmF1bHRWYWx1ZSkgY29uc3Q7CisKICAgICAvLyBQ
YXJzZXMgdGhlIHNwZWNpZmllZCBzdHJpbmcgZm9yIHRoZSB0eXBlIGFzIHBhcnNlVG9Eb3VibGUo
KSBkb2VzLgogICAgIC8vIEluIGFkZGl0aW9uLCBpdCBzdG9yZXMgdGhlIG51bWJlciBvZiBkaWdp
dHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQKICAgICAvLyBpbnRvICpkZWNpbWFsUGxhY2VzLgot
ICAgIHZpcnR1YWwgZG91YmxlIHBhcnNlVG9Eb3VibGVXaXRoRGVjaW1hbFBsYWNlcyhjb25zdCBT
dHJpbmcmIHNyYywgZG91YmxlIGRlZmF1bHRWYWx1ZSwgdW5zaWduZWQgKmRlY2ltYWxQbGFjZXMp
IGNvbnN0OworICAgIHZpcnR1YWwgZG91YmxlIHBhcnNlVG9Eb3VibGVXaXRoRGVjaW1hbFBsYWNl
cyhjb25zdCBTdHJpbmcmLCBkb3VibGUgZGVmYXVsdFZhbHVlLCB1bnNpZ25lZCogZGVjaW1hbFBs
YWNlcykgY29uc3Q7CisKICAgICAvLyBQYXJzZXMgdGhlIHNwZWNpZmllZCBzdHJpbmcgZm9yIHRo
aXMgSW5wdXRUeXBlLCBhbmQgcmV0dXJucyB0cnVlIGlmIGl0CiAgICAgLy8gaXMgc3VjY2Vzc2Z1
bGx5IHBhcnNlZC4gQW4gaW5zdGFuY2UgcG9pbnRlZCBieSB0aGUgRGF0ZUNvbXBvbmVudHMqCiAg
ICAgLy8gcGFyYW1ldGVyIHdpbGwgaGF2ZSBwYXJzZWQgdmFsdWVzIGFuZCBiZSBtb2RpZmllZCBl
dmVuIGlmIHRoZSBwYXJzaW5nCiAgICAgLy8gZmFpbHMuIFRoZSBEYXRlQ29tcG9uZW50cyogcGFy
YW1ldGVyIG1heSBiZSAwLgogICAgIHZpcnR1YWwgYm9vbCBwYXJzZVRvRGF0ZUNvbXBvbmVudHMo
Y29uc3QgU3RyaW5nJiwgRGF0ZUNvbXBvbmVudHMqKSBjb25zdDsKKwogICAgIC8vIENyZWF0ZSBh
IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIGRvdWJsZSB2YWx1ZSBmb3Ig
dGhlCiAgICAgLy8gaW5wdXQgdHlwZS4gSWYgTmFOIG9yIEluZmluaXR5IGlzIHNwZWNpZmllZCwg
dGhpcyByZXR1cm5zIGFuIGVtcHR5CiAgICAgLy8gc3RyaW5nLiBUaGlzIHNob3VsZCBub3QgYmUg
Y2FsbGVkIGZvciB0eXBlcyB3aXRob3V0IHZhbHVlQXNOdW1iZXIuCkluZGV4OiBXZWJDb3JlL2h0
bWwvSXNJbmRleElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0lzSW5k
ZXhJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3NDgzNSkKKysrIFdlYkNvcmUvaHRtbC9Jc0luZGV4
SW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IklzSW5kZXhJbnB1dFR5cGUuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
SFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKQEAgLTcwLDQgKzcxLDkgQEAgUGFzc1JlZlB0cjxIVE1M
Rm9ybUVsZW1lbnQ+IElzSW5kZXhJbnB1dAogICAgIHJldHVybiBmb3JtLnJlbGVhc2UoKTsKIH0K
IAorYm9vbCBJc0luZGV4SW5wdXRUeXBlOjpzaG91bGRSZXNwZWN0TGlzdEF0dHJpYnV0ZSgpCit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL2h0bWwvSXNJbmRleElucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9Jc0luZGV4SW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODM1KQorKysgV2ViQ29yZS9odG1sL0lz
SW5kZXhJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNSZXF1aXJlZCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm1Gb3JTdWJtaXNzaW9uKCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRlKCk7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvTnVtYmVySW5wdXRUeXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvTnVtYmVySW5wdXRUeXBlLmNwcAkocmV2
aXNpb24gNzQ4MzUpCisrKyBXZWJDb3JlL2h0bWwvTnVtYmVySW5wdXRUeXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCkBAIC0zNiw2ICszNyw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
SFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRl
ICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYv
QVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC0yMzQsNCArMjM2
LDQ1IEBAIGRvdWJsZSBOdW1iZXJJbnB1dFR5cGU6OmFjY2VwdGFibGVFcnJvcigKICAgICByZXR1
cm4gc3RlcCAvIHBvdygyLjAsIEZMVF9NQU5UX0RJRyk7CiB9CiAKK3ZvaWQgTnVtYmVySW5wdXRU
eXBlOjpoYW5kbGVCbHVyRXZlbnQoKQoreworICAgIC8vIFJlc2V0IHRoZSByZW5kZXJlciB2YWx1
ZSwgd2hpY2ggbWlnaHQgYmUgdW5tYXRjaGVkIHdpdGggdGhlIGVsZW1lbnQgdmFsdWUuCisgICAg
ZWxlbWVudCgpLT5zZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKKwor
ICAgIC8vIFdlIG5lZWQgdG8gcmVzZXQgdGhlIHJlbmRlcmVyIHZhbHVlIGV4cGxpY2l0bHkgYmVj
YXVzZSBhbiB1bmFjY2VwdGFibGUKKyAgICAvLyByZW5kZXJlciB2YWx1ZSBzaG91bGQgYmUgcHVy
Z2VkIGJlZm9yZSBzdHlsZSBjYWxjdWxhdGlvbi4KKyAgICBpZiAoZWxlbWVudCgpLT5yZW5kZXJl
cigpKQorICAgICAgICBlbGVtZW50KCktPnJlbmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7
Cit9CisKK2Jvb2wgTnVtYmVySW5wdXRUeXBlOjppc0FjY2VwdGFibGVWYWx1ZShjb25zdCBTdHJp
bmcmIHByb3Bvc2VkVmFsdWUpCit7CisgICAgcmV0dXJuIHByb3Bvc2VkVmFsdWUuaXNFbXB0eSgp
IHx8IHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKHByb3Bvc2VkVmFsdWUsIDApOworfQorCitT
dHJpbmcgTnVtYmVySW5wdXRUeXBlOjpzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9z
ZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUocHJvcG9z
ZWRWYWx1ZSwgMCkgPyBwcm9wb3NlZFZhbHVlIDogU3RyaW5nKCk7Cit9CisKK2Jvb2wgTnVtYmVy
SW5wdXRUeXBlOjpoYXNVbmFjY2VwdGFibGVWYWx1ZSgpCit7CisgICAgcmV0dXJuIGVsZW1lbnQo
KS0+cmVuZGVyZXIoKSAmJiAhaXNBY2NlcHRhYmxlVmFsdWUodG9SZW5kZXJUZXh0Q29udHJvbChl
bGVtZW50KCktPnJlbmRlcmVyKCkpLT50ZXh0KCkpOworfQorCitib29sIE51bWJlcklucHV0VHlw
ZTo6c2hvdWxkUmVzcGVjdFNwZWVjaEF0dHJpYnV0ZSgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgTnVtYmVySW5wdXRUeXBlOjppc051bWJlckZpZWxkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOdW1iZXJJbnB1dFR5cGU6Omhhc1NwaW5CdXR0b24oKQor
eworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL2h0bWwvTnVtYmVySW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L051bWJlcklucHV0VHlwZS5oCShyZXZpc2lvbiA3NDgzNSkKKysrIFdlYkNvcmUvaHRtbC9OdW1i
ZXJJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTMgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIGRvdWJsZSBwYXJzZVRvRG91YmxlV2l0aERlY2ltYWxQbGFjZXMoY29uc3Qg
U3RyaW5nJiwgZG91YmxlLCB1bnNpZ25lZCopIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHNl
cmlhbGl6ZShkb3VibGUpIGNvbnN0OwogICAgIHZpcnR1YWwgZG91YmxlIGFjY2VwdGFibGVFcnJv
cihkb3VibGUpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVCbHVyRXZlbnQoKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNBY2NlcHRhYmxlVmFsdWUoY29uc3QgU3RyaW5nJik7CisgICAgdmly
dHVhbCBTdHJpbmcgc2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzVW5hY2NlcHRhYmxlVmFsdWUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVj
dFNwZWVjaEF0dHJpYnV0ZSgpOworICAgIHZpcnR1YWwgYm9vbCBpc051bWJlckZpZWxkKCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGhhc1NwaW5CdXR0b24oKTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9QYXNzd29yZElucHV0VHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1Bhc3N3b3JkSW5wdXRUeXBlLmNwcAkocmV2aXNpb24g
NzQ4MzUpCisrKyBXZWJDb3JlL2h0bWwvUGFzc3dvcmRJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
QEAgLTU4LDQgKzU5LDMxIEBAIHZvaWQgUGFzc3dvcmRJbnB1dFR5cGU6OnJlc3RvcmVGb3JtQ29u
dHIKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAorYm9vbCBQYXNzd29yZElucHV0VHlw
ZTo6c2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdAoreworICAgIC8vIElucHV0IG1ldGhvZHMg
YXJlIGRpc2FibGVkIGZvciB0aGUgcGFzc3dvcmQgZmllbGQgYmVjYXVzZSBvdGhlcndpc2UKKyAg
ICAvLyBhbnlvbmUgY2FuIGFjY2VzcyB0aGUgdW5kZXJseWluZyBwYXNzd29yZCBhbmQgZGlzcGxh
eSBpdCBpbiBjbGVhciB0ZXh0LgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQYXNzd29y
ZElucHV0VHlwZTo6c2hvdWxkUmVzZXRPbkRvY3VtZW50QWN0aXZhdGlvbigpCit7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgUGFzc3dvcmRJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RMaXN0
QXR0cmlidXRlKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGFzc3dvcmRJbnB1
dFR5cGU6OnNob3VsZFJlc3BlY3RTcGVlY2hBdHRyaWJ1dGUoKQoreworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFBhc3N3b3JkSW5wdXRUeXBlOjppc1Bhc3N3b3JkRmllbGQoKSBjb25zdAor
eworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL2h0bWwvUGFzc3dvcmRJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvUGFzc3dvcmRJbnB1dFR5cGUuaAkocmV2aXNpb24gNzQ4MzUpCisrKyBXZWJDb3JlL2h0bWwv
UGFzc3dvcmRJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTEgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNhdmVGb3JtQ29udHJvbFN0YXRlKFN0cmluZyYpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBTdHJp
bmcmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzZXRPbkRvY3VtZW50QWN0aXZhdGlvbigpOwor
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXNwZWN0TGlzdEF0dHJpYnV0ZSgpOworICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKCk7CisgICAgdmlydHVhbCBib29s
IGlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3NDgzNSkKKysrIFdlYkNvcmUv
aHRtbC9SYWRpb0lucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCkBAIC0xMTUsNCArMTE1LDgyIEBAIHZvaWQgUmFkaW9JbnB1dFR5cGU6
OmhhbmRsZUtleXVwRXZlbnQoS2UKICAgICBkaXNwYXRjaFNpbXVsYXRlZENsaWNrSWZBY3RpdmUo
ZXZlbnQpOwogfQogCitib29sIFJhZGlvSW5wdXRUeXBlOjppc0tleWJvYXJkRm9jdXNhYmxlKCkg
Y29uc3QKK3sKKyAgICAvLyBXaGVuIHVzaW5nIFNwYXRpYWwgTmF2aWdhdGlvbiwgZXZlcnkgcmFk
aW8gYnV0dG9uIHNob3VsZCBiZSBmb2N1c2FibGUuCisgICAgaWYgKGlzU3BhdGlhbE5hdmlnYXRp
b25FbmFibGVkKGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgLy8gTmV2ZXIgYWxsb3cga2V5Ym9hcmQgdGFiYmluZyB0byBsZWF2ZSB5
b3UgaW4gdGhlIHNhbWUgcmFkaW8gZ3JvdXAuICBBbHdheXMKKyAgICAvLyBza2lwIGFueSBvdGhl
ciBlbGVtZW50cyBpbiB0aGUgZ3JvdXAuCisgICAgTm9kZSogY3VycmVudEZvY3VzZWROb2RlID0g
ZWxlbWVudCgpLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpOworICAgIGlmIChjdXJyZW50Rm9j
dXNlZE5vZGUgJiYgY3VycmVudEZvY3VzZWROb2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkgewor
ICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBmb2N1c2VkSW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50Kj4oY3VycmVudEZvY3VzZWROb2RlKTsKKyAgICAgICAgaWYgKGZvY3VzZWRJ
bnB1dC0+aXNSYWRpb0J1dHRvbigpICYmIGZvY3VzZWRJbnB1dC0+Zm9ybSgpID09IGVsZW1lbnQo
KS0+Zm9ybSgpICYmIGZvY3VzZWRJbnB1dC0+bmFtZSgpID09IGVsZW1lbnQoKS0+bmFtZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEFsbG93IGtleWJvYXJk
IGZvY3VzIGlmIHdlJ3JlIGNoZWNrZWQgb3IgaWYgbm90aGluZyBpbiB0aGUgZ3JvdXAgaXMgY2hl
Y2tlZC4KKyAgICByZXR1cm4gZWxlbWVudCgpLT5jaGVja2VkKCkgfHwgIWVsZW1lbnQoKS0+Y2hl
Y2tlZFJhZGlvQnV0dG9ucygpLmNoZWNrZWRCdXR0b25Gb3JHcm91cChlbGVtZW50KCktPm5hbWUo
KSk7Cit9CisKK3ZvaWQgUmFkaW9JbnB1dFR5cGU6OmF0dGFjaCgpCit7CisgICAgSW5wdXRUeXBl
OjphdHRhY2goKTsKKyAgICBlbGVtZW50KCktPnVwZGF0ZUNoZWNrZWRSYWRpb0J1dHRvbnMoKTsK
K30KKworYm9vbCBSYWRpb0lucHV0VHlwZTo6c2hvdWxkU2VuZENoYW5nZUV2ZW50QWZ0ZXJDaGVj
a2VkQ2hhbmdlZCgpCit7CisgICAgLy8gRG9uJ3Qgc2VuZCBhIGNoYW5nZSBldmVudCBmb3IgYSBy
YWRpbyBidXR0b24gdGhhdCdzIGdldHRpbmcgdW5jaGVja2VkLgorICAgIC8vIFRoaXMgd2FzIGRv
bmUgdG8gbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIG90aGVyIGJyb3dzZXJzLgorICAgIHJldHVybiBl
bGVtZW50KCktPmNoZWNrZWQoKTsKK30KKworUGFzc093blB0cjxDbGlja0hhbmRsaW5nU3RhdGU+
IFJhZGlvSW5wdXRUeXBlOjp3aWxsRGlzcGF0Y2hDbGljaygpCit7CisgICAgLy8gQW4gZXZlbnQg
aGFuZGxlciBjYW4gdXNlIHByZXZlbnREZWZhdWx0IG9yICJyZXR1cm4gZmFsc2UiIHRvIHJldmVy
c2UgdGhlIHNlbGVjdGlvbiB3ZSBkbyBoZXJlLgorICAgIC8vIFRoZSBDbGlja0hhbmRsaW5nU3Rh
dGUgb2JqZWN0IGNvbnRhaW5zIHdoYXQgd2UgbmVlZCB0byB1bmRvIHdoYXQgd2UgZGlkIGhlcmUg
aW4gZGlkRGlzcGF0Y2hDbGljay4KKworICAgIC8vIFdlIHdhbnQgcmFkaW8gZ3JvdXBzIHRvIGVu
ZCB1cCBpbiBzYW5lIHN0YXRlcywgaS5lLiwgdG8gaGF2ZSBzb21ldGhpbmcgY2hlY2tlZC4KKyAg
ICAvLyBUaGVyZWZvcmUgaWYgbm90aGluZyBpcyBjdXJyZW50bHkgc2VsZWN0ZWQsIHdlIHdvbid0
IGFsbG93IHRoZSB1cGNvbWluZyBhY3Rpb24gdG8gYmUgInVuZG9uZSIsIHNpbmNlCisgICAgLy8g
d2Ugd2FudCBzb21lIG9iamVjdCBpbiB0aGUgcmFkaW8gZ3JvdXAgdG8gYWN0dWFsbHkgZ2V0IHNl
bGVjdGVkLgorCisgICAgT3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gc3RhdGUgPSBhZG9wdFB0
cihuZXcgQ2xpY2tIYW5kbGluZ1N0YXRlKTsKKworICAgIHN0YXRlLT5jaGVja2VkID0gZWxlbWVu
dCgpLT5jaGVja2VkKCk7CisgICAgc3RhdGUtPmluZGV0ZXJtaW5hdGUgPSBlbGVtZW50KCktPmlu
ZGV0ZXJtaW5hdGUoKTsKKyAgICBzdGF0ZS0+Y2hlY2tlZFJhZGlvQnV0dG9uID0gZWxlbWVudCgp
LT5jaGVja2VkUmFkaW9CdXR0b25zKCkuY2hlY2tlZEJ1dHRvbkZvckdyb3VwKGVsZW1lbnQoKS0+
bmFtZSgpKTsKKworICAgIGlmIChlbGVtZW50KCktPmluZGV0ZXJtaW5hdGUoKSkKKyAgICAgICAg
ZWxlbWVudCgpLT5zZXRJbmRldGVybWluYXRlKGZhbHNlKTsKKyAgICBlbGVtZW50KCktPnNldENo
ZWNrZWQodHJ1ZSwgdHJ1ZSk7CisKKyAgICByZXR1cm4gc3RhdGUucmVsZWFzZSgpOworfQorCit2
b2lkIFJhZGlvSW5wdXRUeXBlOjpkaWREaXNwYXRjaENsaWNrKEV2ZW50KiBldmVudCwgY29uc3Qg
Q2xpY2tIYW5kbGluZ1N0YXRlJiBzdGF0ZSkKK3sKKyAgICBpZiAoZXZlbnQtPmRlZmF1bHRQcmV2
ZW50ZWQoKSB8fCBldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkgeworICAgICAgICAvLyBSZXN0b3Jl
IHRoZSBvcmlnaW5hbCBzZWxlY3RlZCByYWRpbyBidXR0b24gaWYgcG9zc2libGUuCisgICAgICAg
IC8vIE1ha2Ugc3VyZSBpdCBpcyBzdGlsbCBhIHJhZGlvIGJ1dHRvbiBhbmQgb25seSBkbyB0aGUg
cmVzdG9yYXRpb24gaWYgaXQgc3RpbGwgYmVsb25ncyB0byBvdXIgZ3JvdXAuCisgICAgICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGNoZWNrZWRSYWRpb0J1dHRvbiA9IHN0YXRlLmNoZWNrZWRSYWRpb0J1
dHRvbi5nZXQoKTsKKyAgICAgICAgaWYgKGNoZWNrZWRSYWRpb0J1dHRvbgorICAgICAgICAgICAg
ICAgICYmIGNoZWNrZWRSYWRpb0J1dHRvbi0+aXNSYWRpb0J1dHRvbigpCisgICAgICAgICAgICAg
ICAgJiYgY2hlY2tlZFJhZGlvQnV0dG9uLT5mb3JtKCkgPT0gZWxlbWVudCgpLT5mb3JtKCkKKyAg
ICAgICAgICAgICAgICAmJiBjaGVja2VkUmFkaW9CdXR0b24tPm5hbWUoKSA9PSBlbGVtZW50KCkt
Pm5hbWUoKSkgeworICAgICAgICAgICAgY2hlY2tlZFJhZGlvQnV0dG9uLT5zZXRDaGVja2VkKHRy
dWUpOworICAgICAgICB9CisgICAgICAgIGVsZW1lbnQoKS0+c2V0SW5kZXRlcm1pbmF0ZShzdGF0
ZS5pbmRldGVybWluYXRlKTsKKyAgICB9CisKKyAgICAvLyBUaGUgd29yayB3ZSBkaWQgaW4gd2ls
bERpc3BhdGNoQ2xpY2sgd2FzIGRlZmF1bHQgaGFuZGxpbmcuCisgICAgZXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7Cit9CisKK2Jvb2wgUmFkaW9JbnB1dFR5cGU6OmlzUmFkaW9CdXR0b24oKSBj
b25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvUmFkaW9JbnB1dFR5cGUuaAkocmV2aXNpb24gNzQ4MzUpCisrKyBXZWJDb3JlL2h0bWwv
UmFkaW9JbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsMTIgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQ2xpY2tFdmVudChNb3VzZUV2ZW50Kik7CiAgICAg
dmlydHVhbCB2b2lkIGhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50Kik7CiAgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUtleXVwRXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAgIHZpcnR1YWwg
Ym9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGF0dGFj
aCgpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTZW5kQ2hhbmdlRXZlbnRBZnRlckNoZWNrZWRD
aGFuZ2VkKCk7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gd2ls
bERpc3BhdGNoQ2xpY2soKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRGlzcGF0Y2hDbGljayhFdmVu
dCosIGNvbnN0IENsaWNrSGFuZGxpbmdTdGF0ZSYpOworICAgIHZpcnR1YWwgYm9vbCBpc1JhZGlv
QnV0dG9uKCkgY29uc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9S
YW5nZUlucHV0VHlwZS5jcHAJKHJldmlzaW9uIDc0ODM1KQorKysgV2ViQ29yZS9odG1sL1Jhbmdl
SW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zNiw2ICszNyw3IEBACiAjaW5jbHVkZSAiSFRN
TFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJS
ZW5kZXJTbGlkZXIuaCIKKyNpbmNsdWRlICJTdGVwUmFuZ2UuaCIKICNpbmNsdWRlIDxsaW1pdHM+
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgpAQCAtMjA1LDQgKzIwNyw0NCBAQCBTdHJpbmcgUmFuZ2VJbnB1dFR5cGU6OnNlcmlhbGl6ZShk
b3VibGUgCiAgICAgcmV0dXJuIHNlcmlhbGl6ZUZvck51bWJlclR5cGUodmFsdWUpOwogfQogCisv
LyBGSVhNRTogQ291bGQgc2hhcmUgdGhpcyB3aXRoIEJhc2VCdXR0b25JbnB1dFR5cGUgYW5kIEJh
c2VDaGVja2FibGVJbnB1dFR5cGUgaWYgd2UgaGFkIGEgY29tbW9uIGJhc2UgY2xhc3MuCit2b2lk
IFJhbmdlSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KQor
eworICAgIElucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKHNlbmRUb0FueUVsZW1lbnQpOworCisg
ICAgLy8gU2VuZCBtb3VzZSBidXR0b24gZXZlbnRzIGlmIHRoZSBjYWxsZXIgc3BlY2lmaWVkIHNl
bmRUb0FueUVsZW1lbnQuCisgICAgLy8gRklYTUU6IFRoZSBjb21tZW50IGFib3ZlIGlzIG5vIGdv
b2QuIEl0IHNheXMgd2hhdCB3ZSBkbywgYnV0IG5vdCB3aHkuCisgICAgZWxlbWVudCgpLT5kaXNw
YXRjaFNpbXVsYXRlZENsaWNrKDAsIHNlbmRUb0FueUVsZW1lbnQpOworfQorCit2b2lkIFJhbmdl
SW5wdXRUeXBlOjptaW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQoKQoreworICAgIElucHV0VHlwZTo6
bWluT3JNYXhBdHRyaWJ1dGVDaGFuZ2VkKCk7CisKKyAgICAvLyBTYW5pdGl6ZSB0aGUgdmFsdWUu
CisgICAgZWxlbWVudCgpLT5zZXRWYWx1ZShlbGVtZW50KCktPnZhbHVlKCkpOworICAgIGVsZW1l
bnQoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworfQorCitTdHJpbmcgUmFuZ2VJbnB1dFR5cGU6
OmZhbGxiYWNrVmFsdWUoKQoreworICAgIHJldHVybiBzZXJpYWxpemVGb3JOdW1iZXJUeXBlKFN0
ZXBSYW5nZShlbGVtZW50KCkpLmRlZmF1bHRWYWx1ZSgpKTsKK30KKworU3RyaW5nIFJhbmdlSW5w
dXRUeXBlOjpzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkKK3sKKyAg
ICAvLyBJZiB0aGUgcHJvcG9zZWRWYWx1ZSBpcyBudWxsIHRoYW4gdGhpcyBpcyBhIHJlc2V0IHNj
ZW5hcmlvIGFuZCB3ZQorICAgIC8vIHdhbnQgdGhlIHJhbmdlIGlucHV0J3MgdmFsdWUgYXR0cmli
dXRlIHRvIHRha2UgcHJpb3JpdHkgb3ZlciB0aGUKKyAgICAvLyBjYWxjdWxhdGVkIGRlZmF1bHQg
KG1pZGRsZSkgdmFsdWUuCisgICAgaWYgKHByb3Bvc2VkVmFsdWUuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiBwcm9wb3NlZFZhbHVlOworCisgICAgcmV0dXJuIHNlcmlhbGl6ZUZvck51bWJlclR5
cGUoU3RlcFJhbmdlKGVsZW1lbnQoKSkuY2xhbXBWYWx1ZShwcm9wb3NlZFZhbHVlKSk7Cit9CisK
K2Jvb2wgUmFuZ2VJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRlKCkKK3sKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9odG1sL1JhbmdlSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1Jhbmdl
SW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODM1KQorKysgV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDExIEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5
bGUqKSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBwYXJzZVRvRG91YmxlKGNvbnN0IFN0cmlu
ZyYsIGRvdWJsZSkgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgc2VyaWFsaXplKGRvdWJsZSkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sIHNlbmRUb0FueUVs
ZW1lbnQpOworICAgIHZpcnR1YWwgdm9pZCBtaW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQoKTsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBmYWxsYmFja1ZhbHVlKCk7CisgICAgdmlydHVhbCBTdHJpbmcgc2Fu
aXRpemVWYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUpOworICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRSZXNwZWN0TGlzdEF0dHJpYnV0ZSgpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9odG1sL1Jlc2V0SW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvUmVzZXRJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3NDgzNSkKKysrIFdl
YkNvcmUvaHRtbC9SZXNldElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzIsNyArMzMsOSBA
QAogI2luY2x1ZGUgIlJlc2V0SW5wdXRUeXBlLmgiCiAKICNpbmNsdWRlICJFdmVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjAsNCArNjMsMTQgQEAgdm9pZCBSZXNldElu
cHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdgogICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOwogfQogCitTdHJpbmcgUmVzZXRJbnB1dFR5cGU6OmRlZmF1bHRWYWx1ZSgpCit7CisgICAg
cmV0dXJuIHJlc2V0QnV0dG9uRGVmYXVsdExhYmVsKCk7Cit9CisKK2Jvb2wgUmVzZXRJbnB1dFR5
cGU6OmlzVGV4dEJ1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9SZXNldElucHV0VHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9SZXNldElucHV0VHlwZS5oCShyZXZpc2lvbiA3NDgz
NSkKKysrIFdlYkNvcmUvaHRtbC9SZXNldElucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw2ICs0NCw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZv
cm1Db250cm9sVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1ZhbGlkYXRp
b24oKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVu
dCopOworICAgIHZpcnR1YWwgU3RyaW5nIGRlZmF1bHRWYWx1ZSgpOworICAgIHZpcnR1YWwgYm9v
bCBpc1RleHRCdXR0b24oKSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3NDgzNSkKKysrIFdlYkNvcmUv
aHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw0ICs0NSwxNCBA
QCBjb25zdCBBdG9taWNTdHJpbmcmIFNlYXJjaElucHV0VHlwZTo6Zm9yCiAgICAgcmV0dXJuIElu
cHV0VHlwZU5hbWVzOjpzZWFyY2goKTsKIH0KIAorYm9vbCBTZWFyY2hJbnB1dFR5cGU6OnNob3Vs
ZFJlc3BlY3RTcGVlY2hBdHRyaWJ1dGUoKQoreworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFNlYXJjaElucHV0VHlwZTo6aXNTZWFyY2hGaWVsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9TZWFy
Y2hJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBl
LmgJKHJldmlzaW9uIDc0ODM1KQorKysgV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU2Vh
cmNoSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogQmFzZVRleHRJbnB1dFR5
cGUoZWxlbWVudCkgeyB9CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250
cm9sVHlwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXNwZWN0U3BlZWNoQXR0
cmlidXRlKCk7CisgICAgdmlydHVhbCBib29sIGlzU2VhcmNoRmllbGQoKSBjb25zdDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9TdWJtaXRJbnB1dFR5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9TdWJtaXRJbnB1dFR5cGUuY3BwCShy
ZXZpc2lvbiA3NDgzNSkKKysrIFdlYkNvcmUvaHRtbC9TdWJtaXRJbnB1dFR5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKQEAgLTMzLDcgKzM0LDkgQEAKIAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAi
Rm9ybURhdGFMaXN0LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03Miw0ICs3
NSwyNCBAQCB2b2lkIFN1Ym1pdElucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFCiAgICAgZXZl
bnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CiAKK2Jvb2wgU3VibWl0SW5wdXRUeXBlOjpjYW5C
ZVN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKQoreworICAgIHJldHVybiB0cnVlOworfQorCitTdHJp
bmcgU3VibWl0SW5wdXRUeXBlOjpkZWZhdWx0VmFsdWUoKQoreworICAgIHJldHVybiBzdWJtaXRC
dXR0b25EZWZhdWx0TGFiZWwoKTsKK30KKworYm9vbCBTdWJtaXRJbnB1dFR5cGU6OmlzU3VibWl0
QnV0dG9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdWJtaXRJbnB1
dFR5cGU6OmlzVGV4dEJ1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9TdWJtaXRJbnB1dFR5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvU3VibWl0SW5wdXRUeXBlLmgJKHJldmlzaW9u
IDc0ODM1KQorKysgV2ViQ29yZS9odG1sL1N1Ym1pdElucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw2ICs0NSwxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBhcHBlbmRGb3Jt
RGF0YShGb3JtRGF0YUxpc3QmLCBib29sKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNSZXF1aXJlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVET01BY3RpdmF0ZUV2
ZW50KEV2ZW50Kik7CisgICAgdmlydHVhbCBib29sIGNhbkJlU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRv
bigpOworICAgIHZpcnR1YWwgU3RyaW5nIGRlZmF1bHRWYWx1ZSgpOworICAgIHZpcnR1YWwgYm9v
bCBpc1N1Ym1pdEJ1dHRvbigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1RleHRCdXR0b24o
KSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRt
bC9UZWxlcGhvbmVJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9UZWxl
cGhvbmVJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3NDgzNSkKKysrIFdlYkNvcmUvaHRtbC9UZWxl
cGhvbmVJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw0ICs0NSwxNCBAQCBjb25z
dCBBdG9taWNTdHJpbmcmIFRlbGVwaG9uZUlucHV0VHlwZTo6CiAgICAgcmV0dXJuIElucHV0VHlw
ZU5hbWVzOjp0ZWxlcGhvbmUoKTsKIH0KIAorYm9vbCBUZWxlcGhvbmVJbnB1dFR5cGU6OnNob3Vs
ZFJlc3BlY3RTcGVlY2hBdHRyaWJ1dGUoKQoreworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFRlbGVwaG9uZUlucHV0VHlwZTo6aXNUZWxlcGhvbmVGaWVsZCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRt
bC9UZWxlcGhvbmVJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvVGVsZXBo
b25lSW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODM1KQorKysgV2ViQ29yZS9odG1sL1RlbGVwaG9u
ZUlucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw4IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgVGVsZXBob25lSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQp
IDogQmFzZVRleHRJbnB1dFR5cGUoZWxlbWVudCkgeyB9CiAgICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKCk7CisgICAgdmlydHVhbCBib29sIGlzVGVsZXBob25l
RmllbGQoKSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3NDgzNSkKKysrIFdlYkNvcmUvaHRt
bC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTEwNCw0ICsxMDUsMTkgQEAg
UmVuZGVyT2JqZWN0KiBUZXh0RmllbGRJbnB1dFR5cGU6OmNyZWF0ZQogICAgIHJldHVybiBuZXcg
KGFyZW5hKSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoZWxlbWVudCgpLCBlbGVtZW50KCkt
PnBsYWNlaG9sZGVyU2hvdWxkQmVWaXNpYmxlKCkpOwogfQogCitib29sIFRleHRGaWVsZElucHV0
VHlwZTo6c2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOwor
fQorCitTdHJpbmcgVGV4dEZpZWxkSW5wdXRUeXBlOjpzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmlu
ZyYgcHJvcG9zZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSW5wdXRFbGVtZW50OjpzYW5pdGl6ZVZh
bHVlRm9yVGV4dEZpZWxkKGVsZW1lbnQoKSwgcHJvcG9zZWRWYWx1ZSk7Cit9CisKK2Jvb2wgVGV4
dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRSZXNwZWN0TGlzdEF0dHJpYnV0ZSgpCit7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRt
bC9UZXh0RmllbGRJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvVGV4dEZp
ZWxkSW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODM1KQorKysgV2ViQ29yZS9odG1sL1RleHRGaWVs
ZElucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNCArNDAsMTkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgVGV4dEZpZWxkSW5wdXRUeXBlIDogcHVibGljIElucHV0VHlwZSB7
CiBwcm90ZWN0ZWQ6CiAgICAgVGV4dEZpZWxkSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVs
ZW1lbnQpIDogSW5wdXRUeXBlKGVsZW1lbnQpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1RleHRG
aWVsZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCB2YWx1ZU1pc3NpbmcoY29uc3QgU3RyaW5n
JikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2
ZW50Kik7CiAgICAgdm9pZCBoYW5kbGVLZXlkb3duRXZlbnRGb3JTcGluQnV0dG9uKEtleWJvYXJk
RXZlbnQqKTsKICAgICB2b2lkIGhhbmRsZVdoZWVsRXZlbnRGb3JTcGluQnV0dG9uKFdoZWVsRXZl
bnQqKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgdmFsdWVNaXNzaW5nKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBmb3J3YXJkRXZlbnQoRXZlbnQqKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkU3VibWl0SW1wbGljaXRseShFdmVudCopOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBj
cmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJp
bmcgc2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUpOworICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRSZXNwZWN0TGlzdEF0dHJpYnV0ZSgpOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL1RleHRJbnB1dFR5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9UZXh0SW5wdXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4MzUpCisr
KyBXZWJDb3JlL2h0bWwvVGV4dElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDQg
KzQ1LDE1IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgVGV4dElucHV0VHlwZTo6Zm9ybUMKICAgICBy
ZXR1cm4gSW5wdXRUeXBlTmFtZXM6OnRleHQoKTsKIH0KIAorYm9vbCBUZXh0SW5wdXRUeXBlOjpj
YW5TZXRTdWdnZXN0ZWRWYWx1ZSgpCit7CisgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIHJlYWxs
eSBiZSByZXN0cmljdGVkIHRvIHBsYWluIHRleHQ/IFdoYXQgYWJvdXQgc2VhcmNoLCBmb3IgZXhh
bXBsZT8KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXh0SW5wdXRUeXBlOjpzaG91bGRS
ZXNwZWN0U3BlZWNoQXR0cmlidXRlKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL1RleHRJbnB1dFR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvVGV4dElucHV0VHlwZS5oCShyZXZpc2lvbiA3NDgzNSkK
KysrIFdlYkNvcmUvaHRtbC9UZXh0SW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYg
KzQyLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBUZXh0SW5wdXRUeXBlKEhUTUxJbnB1dEVs
ZW1lbnQqIGVsZW1lbnQpIDogQmFzZVRleHRJbnB1dFR5cGUoZWxlbWVudCkgeyB9CiAgICAgdmly
dHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBjYW5TZXRTdWdnZXN0ZWRWYWx1ZSgpOworICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL1RpbWVJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3NDgzNSkKKysrIFdlYkNvcmUv
aHRtbC9UaW1lSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBk
b3VibGUgVGltZUlucHV0VHlwZTo6c3RlcFNjYWxlRmFjdG9yKCkgCiAgICAgcmV0dXJuIHRpbWVT
dGVwU2NhbGVGYWN0b3I7CiB9CiAKLWJvb2wgVGltZUlucHV0VHlwZTo6c2NhbGVkU3RlcFZhbGV1
U2hvdWxkQmVJbnRlZ2VyKCkgY29uc3QKK2Jvb2wgVGltZUlucHV0VHlwZTo6c2NhbGVkU3RlcFZh
bHVlU2hvdWxkQmVJbnRlZ2VyKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6
IFdlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L1RpbWVJbnB1dFR5cGUuaAkocmV2aXNpb24gNzQ4MzUpCisrKyBXZWJDb3JlL2h0bWwvVGltZUlu
cHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBkb3VibGUgbWF4aW11bSgpIGNvbnN0OwogICAgIHZpcnR1YWwgZG91YmxlIGRlZmF1
bHRTdGVwKCkgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgc3RlcFNjYWxlRmFjdG9yKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIHNjYWxlZFN0ZXBWYWxldVNob3VsZEJlSW50ZWdlcigpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBzY2FsZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VUb0RhdGVDb21wb25lbnRzSW50ZXJuYWwoY29u
c3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIERhdGVDb21wb25lbnRzKikgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9uZW50cyhkb3VibGUsIERhdGVD
b21wb25lbnRzKikgY29uc3Q7CiB9OwpJbmRleDogV2ViQ29yZS9odG1sL1VSTElucHV0VHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1VSTElucHV0VHlwZS5jcHAJKHJldmlzaW9u
IDc0ODM1KQorKysgV2ViQ29yZS9odG1sL1VSTElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDQgKzYzLDkgQEAgU3RyaW5nIFVSTElucHV0VHlwZTo6dHlwZU1pc21hdGNoVGV4dCgp
IAogICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvclVSTFRleHQoKTsK
IH0KIAorYm9vbCBVUkxJbnB1dFR5cGU6OmlzVVJMRmllbGQoKSBjb25zdAoreworICAgIHJldHVy
biB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwv
VVJMSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1VSTElucHV0VHlwZS5o
CShyZXZpc2lvbiA3NDgzNSkKKysrIFdlYkNvcmUvaHRtbC9VUkxJbnB1dFR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCB0eXBl
TWlzbWF0Y2hGb3IoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHR5cGVN
aXNtYXRjaCgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHR5cGVNaXNtYXRjaFRleHQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNVUkxGaWVsZCgpIGNvbnN0OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77770</attachid>
            <date>2011-01-01 23:09:53 -0800</date>
            <delta_ts>2011-01-02 20:20:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51791-20110101230951.patch</filename>
            <type>text/plain</type>
            <size>139282</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDg1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzgxIEBACisyMDExLTAxLTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbGlt
aW5hdGUgSFRNTElucHV0RWxlbWVudDo6bV9kZXByZWNhdGVkVHlwZU51bWJlciwgb3RoZXIgaW5w
dXQgcmVmYWN0b3JpbmcgYW5kIHJlbmFtaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MTc5MQorCisgICAgICAgICogZG9tL0lucHV0RWxlbWVudC5o
OiBNYWtlIHNhbml0aXplVmFsdWVGb3JUZXh0RmllbGQgcHVibGljIHNvIGl0IGNhbgorICAgICAg
ICBiZSBjYWxsZWQgYnkgSW5wdXRUeXBlLgorCisgICAgICAgICogaHRtbC9CYXNlQnV0dG9uSW5w
dXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VCdXR0b25JbnB1dFR5cGU6OmFjY2Vz
c0tleUFjdGlvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QmFzZUJ1dHRvbklucHV0VHlw
ZTo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAgICAgKiBo
dG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0Jhc2VD
aGVja2FibGVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNoZWNrYWJsZUlu
cHV0VHlwZTo6Y2FuU2V0U3RyaW5nVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJh
c2VDaGVja2FibGVJbnB1dFR5cGU6OmFjY2Vzc0tleUFjdGlvbik6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6ZmFsbGJhY2tWYWx1ZSk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6QmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6c3RvcmVzVmFsdWVTZXBh
cmF0ZUZyb21BdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDaGVja2Fi
bGVJbnB1dFR5cGU6OmlzQ2hlY2thYmxlKTogQWRkZWQuCisgICAgICAgICogaHRtbC9CYXNlQ2hl
Y2thYmxlSW5wdXRUeXBlLmg6IERpdHRvLgorCisgICAgICAgICogaHRtbC9CYXNlRGF0ZUFuZFRp
bWVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRU
eXBlOjpoYXNTcGluQnV0dG9uKTogQWRkZWQuCisgICAgICAgICogaHRtbC9CYXNlRGF0ZUFuZFRp
bWVJbnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0Jhc2VUZXh0SW5wdXRUeXBl
Lmg6IE1hZGUgbW9yZSBmdW5jdGlvbnMgcHJpdmF0ZS4KKworICAgICAgICAqIGh0bWwvQnV0dG9u
SW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJ1dHRvbklucHV0VHlwZTo6aXNUZXh0
QnV0dG9uKTogQWRkZWQuCisgICAgICAgICogaHRtbC9CdXR0b25JbnB1dFR5cGUuaDogRGl0dG8u
CisKKyAgICAgICAgKiBodG1sL0NoZWNrYm94SW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNoZWNrYm94SW5wdXRUeXBlOjp3aWxsRGlzcGF0Y2hDbGljayk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2hlY2tib3hJbnB1dFR5cGU6OmRpZERpc3BhdGNoQ2xpY2spOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNoZWNrYm94SW5wdXRUeXBlOjppc0NoZWNrYm94KTogQWRkZWQu
CisgICAgICAgICogaHRtbC9DaGVja2JveElucHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAq
IGh0bWwvRGF0ZVRpbWVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVJ
bnB1dFR5cGU6OnNjYWxlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcik6IEZpeGVkCisgICAgICAg
IHR5cG8gaW4gbmFtZSBvZiB0aGlzIGZ1bmN0aW9uLgorICAgICAgICAqIGh0bWwvRGF0ZVRpbWVJ
bnB1dFR5cGUuaDogRGl0dG8uCisgICAgICAgICogaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTG9jYWxJbnB1dFR5cGU6OnNjYWxlZFN0
ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcik6IERpdHRvLgorICAgICAgICAqIGh0bWwvRGF0ZVRpbWVM
b2NhbElucHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvRW1haWxJbnB1dFR5cGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RW1haWxJbnB1dFR5cGU6OmlzRW1haWxGaWVsZCk6IEFk
ZGVkLgorICAgICAgICAqIGh0bWwvRW1haWxJbnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAg
KiBodG1sL0ZpbGVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlw
ZTo6RmlsZUlucHV0VHlwZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlw
ZTo6Y2FuU2V0U3RyaW5nVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1
dFR5cGU6OmNhbkNoYW5nZUZyb21Bbm90aGVyVHlwZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZUlucHV0VHlwZTo6ZmlsZXMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJ
bnB1dFR5cGU6OmNhblNldFZhbHVlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5w
dXRUeXBlOjpnZXRUeXBlU3BlY2lmaWNWYWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsZUlucHV0VHlwZTo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUpOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OnNldEZpbGVMaXN0KTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjppc0ZpbGVVcGxvYWQpOiBBZGRlZC4KKyAg
ICAgICAgKiBodG1sL0ZpbGVJbnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
SFRNTElucHV0RWxlbWVudCk6IFVwZGF0ZWQgZm9yIGRhdGEgbWVtYmVyCisgICAgICAgIHJlbmFt
aW5nIGFuZCByZW1vdmFsLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNW
YWxpZFZhbHVlKTogQ2FsbCBjYW5TZXRTdHJpbmdWYWx1ZQorICAgICAgICBpbnN0ZWFkIG9mIGNo
ZWNraW5nIHNwZWNpZmljIHR5cGUgbnVtYmVycy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6OmdldEFsbG93ZWRWYWx1ZVN0ZXBXaXRoRGVjaW1hbFBsYWNlcyk6CisgICAgICAg
IFVzZSBmYXN0R2V0QXR0cmlidXRlIGFuZCBmaXhlZCB0eXBvIGluIHRoZSBuYW1lIG9mIHRoZQor
ICAgICAgICBzY2FsZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIgZnVuY3Rpb24uCisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKTogQ2FsbAor
ICAgICAgICBJbnB1dFR5cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGU7IG1vdmVkIG1vc3Qgb2YgdGhl
IHR5cGUtc3BlY2lmaWMKKyAgICAgICAgbG9naWMgdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50OjpzaG91bGRVc2VJbnB1dE1ldGhvZCk6IENhbGwKKyAgICAgICAgSW5w
dXRUeXBlOjpzaG91bGRVc2VJbnB1dE1ldGhvZDsgbW92ZWQgdGhlIHR5cGUtc3BlY2lmaWMgbG9n
aWMgdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpoYW5kbGVCbHVy
RXZlbnQpOiBDYWxsCisgICAgICAgIElucHV0VHlwZTo6aGFuZGxlQmx1ckV2ZW50OyBtb3ZlZCB0
aGUgdHlwZS1zcGVjaWZpYyBsb2dpYyB0aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6OnNldFR5cGUpOiBUd2VhayB0aGUgbmFtZXMgYW5kIHR5cGVzCisgICAgICAgIGlu
IHRoaXMgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRh
dGVUeXBlKTogUmVtb3ZlZCB0aGUgY29kZSB0aGF0CisgICAgICAgIHNldCBtX2RlcHJlY2F0ZWRU
eXBlTnVtYmVyLiBDb21wYXJlIHR5cGVzIGJ5IGNvbXBhcmluZyB0aGUgdmFsdWUKKyAgICAgICAg
ZnJvbSBmb3JtQ29udHJvbFR5cGUuIFJlbW92ZWQgZmlsZS1zcGVjaWZpYyBsb2dpYyBhbmQgaW5z
dGVhZCBjYWxsCisgICAgICAgIElucHV0VHlwZTo6Y2FuQ2hhbmdlRnJvbUFub3RoZXJUeXBlLiBT
dHJlYW1saW5lZCB0aGUgbG9naWMgZm9yCisgICAgICAgIGFjdGl2YXRpb24gY2FsbGJhY2tzLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6YWNjZXNzS2V5QWN0aW9uKTogQ2Fs
bAorICAgICAgICBJbnB1dFR5cGU6OmFjY2Vzc0tleUFjdGlvbjsgbW92ZWQgdGhlIHR5cGUtc3Bl
Y2lmaWMgbG9naWMgdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpt
YXBUb0VudHJ5KTogQ2FsbAorICAgICAgICBJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RIZWlnaHRB
bmRXaWR0aEF0dHJpYnV0ZXMgYW5kCisgICAgICAgIElucHV0VHlwZTo6c2hvdWxkUmVzcGVjdEFs
aWduQXR0cmlidXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUpOiBVcGRhdGVkCisgICAgICAgIGZvciBuYW1lIGNoYW5nZXMgYW5kIHRo
ZSByZW1vdmFsIG9mIG1fZGVmYXVsdENoZWNrZWQuIENoYW5nZWQgdGhlCisgICAgICAgIGFsdCBh
dHRyaWJ1dGUgbG9naWMgdG8gYmUgYmFzZWQgb24gdGhlIGNsYXNzIG9mIHRoZSByZW5kZXJlci4K
KyAgICAgICAgQ2FsbCBJbnB1dFR5cGU6OnNyY0F0dHJpYnV0ZUNoYW5nZWQgYW5kIG1vdmVkIHRo
ZSB0eXBlLXNwZWNpZmljCisgICAgICAgIGxvZ2ljIHRoZXJlLiBDYWxsIHNob3VsZFJlc3BlY3RB
bGlnbkF0dHJpYnV0ZSBhbmQKKyAgICAgICAgc2hvdWxkUmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0
cmlidXRlcyByYXRoZXIgdGhhbiBoYXZpbmcKKyAgICAgICAgdHlwZS1zcGVjaWZpYyBsb2dpYyBo
ZXJlLiBDYWxsIG1pbk9yTWF4QXR0cmlidXRlQ2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQpOiBDYWxsCisgICAgICAgIElucHV0VHlw
ZTo6cmVuZGVyZXJJc05lZWRlZDsgbW92ZWQgdGhlIHR5cGUtc3BlY2lmaWMgbG9naWMgdGhlcmUu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjphdHRhY2gpOiBSZW1vdmVkIHRo
ZSB1bm5lZWRlZCBtX2luaXRlZAorICAgICAgICBmbGFnLCB3aGljaCB3YXMgcmVkdW5kYW50IHdp
dGggdGhlIG1faGF2ZVR5cGUgZmxhZy4gQ2FsbAorICAgICAgICBJbnB1dFR5cGU6OmF0dGFjaDsg
bW92ZWQgdGhlIHR5cGUtc3BlY2lmaWMgbG9naWMgdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50OjphbHRUZXh0KTogVXNlIGZhc3RHZXRBdHRyaWJ1dGUuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0b24pOiBD
YWxsCisgICAgICAgIElucHV0VHlwZTo6Y2FuQmVTdWNjZXNzZnVsU3VibWl0QnV0dG9uOyBtb3Zl
ZCB0aGUgdHlwZS1zcGVjaWZpYworICAgICAgICBsb2dpYyB0aGVyZS4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzQWN0aXZhdGVkU3VibWl0KTogVXBkYXRlZCBmb3IKKyAg
ICAgICAgbmFtZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
c2V0QWN0aXZhdGVkU3VibWl0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50OjpyZXNldCk6IFVwZGF0ZWQgdG8gdXNlCisgICAgICAgIElucHV0VHlwZTo6c3RvcmVz
VmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUuIEFsc28gdXNlCisgICAgICAgIGhhc0F0dHJpYnV0
ZShjaGVja2VkQXR0cikgcmF0aGVyIHRoYW4gbV9kZWZhdWx0Q2hlY2tlZCwKKyAgICAgICAgc2lu
Y2UgYm90aCBhcmUgdGhlIHNhbWUuIEFsc28gdXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UuCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRDaGVja2VkKTogVXBkYXRlZCBmb3Ig
bmFtZQorICAgICAgICBjaGFuZ2VzLiBBbHNvIGFkZGVkIGNhbGwgdG8KKyAgICAgICAgSW5wdXRU
eXBlOjpzaG91bGRTZW5kQ2hhbmdlRXZlbnRBZnRlckNoZWNrZWRDaGFuZ2VkIGFuZAorICAgICAg
ICBtb3ZlZCB0aGUgdHlwZS1zcGVjaWZpYyBsb2dpYyB0aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ6OnNldEluZGV0ZXJtaW5hdGUpOiBDYWxsCisgICAgICAgIGlzQ2hl
Y2thYmxlIHRvIHNlZSBpZiBpbmRldGVybWluYXRlIGlzIGFsbG93ZWQuCisgICAgICAgIEFsc28g
dXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6Y29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXMpOgorICAgICAgICBVcGRhdGVkIGZvciBu
YW1lIGNoYW5nZXMgYW5kIHJlbW92ZWQgZGF0YSBtZW1iZXJzLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudDo6dmFsdWUpOiBDYWxsCisgICAgICAgIElucHV0VHlwZTo6Z2V0VHlw
ZVNwZWNpZmljVmFsdWUgYW5kIElucHV0VHlwZTo6ZmFsbGJhY2tWYWx1ZS4KKyAgICAgICAgTW92
ZWQgdGhlIHR5cGUtc3BlY2lmaWMgbG9naWMgdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50Ojp2YWx1ZVdpdGhEZWZhdWx0KTogQ2FsbAorICAgICAgICBJbnB1dFR5cGU6
OmRlZmF1bHRWYWx1ZS4gTW92ZWQgdGhlIHR5cGUtc3BlY2lmaWMgbG9naWMgdGhlcmUuCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRTdWdnZXN0ZWRWYWx1ZSk6IENhbGwK
KyAgICAgICAgSW5wdXRUeXBlOjpjYW5TZXRTdWdnZXN0ZWRWYWx1ZS4gTW92ZWQgdGhlIHR5cGUt
c3BlY2lmaWMgbG9naWMKKyAgICAgICAgdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50OjpzZXRWYWx1ZSk6IENhbGwKKyAgICAgICAgSW5wdXRUeXBlOjpjYW5TZXRWYWx1
ZS4gTW92ZWQgdGhlIHR5cGUtc3BlY2lmaWMgbG9naWMgdGhlcmUuCisgICAgICAgIENsZWFyIHRo
ZSBmaWxlIGxpc3QgaWYgaXQgZXhpc3RzIHJhdGhlciB0aGFuIGNoZWNraW5nIHRoZQorICAgICAg
ICB0eXBlIGV4cGxpY2l0bHkuIFdlIGNvdWxkIHByb2JhYmx5IGRvIHRoYXQgYSBtb3JlIGVsZWdh
bnQgd2F5LgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cGxhY2Vob2xkZXIp
OiBVc2UgZmFzdEdldEF0dHJpYnV0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ6OnNldFZhbHVlRnJvbVJlbmRlcmVyKTogVXNlIHRoZQorICAgICAgICBpc0ZpbGVVcGxvYWQg
ZnVuY3Rpb24gaW4gdGhlIGFzc2VydGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6OnNldEZpbGVMaXN0RnJvbVJlbmRlcmVyKTogUHV0IG1vc3QKKyAgICAgICAgb2YgdGhl
IGNvZGUgZnJvbSB0aGlzIGZ1bmN0aW9uIGludG8gRmlsZUlucHV0VHlwZTo6c2V0RmlsZUxpc3Qu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpwcmVEaXNwYXRjaEV2ZW50SGFu
ZGxlcik6IENoYW5nZWQKKyAgICAgICAgdG8gY2FsbCBJbnB1dFR5cGU6OndpbGxEaXNwYXRjaENs
aWNrLCB3aGljaCBkb2VzIHRoZSB0eXBlLXNwZWNpZmljCisgICAgICAgIHdvcmsuIFN0aWxsIG5l
ZWQgdG8gdXNlIGEgc2luZ2xlIHN0cnVjdCBmb3IgYWxsIHR5cGVzLCBiZWNhdXNlCisgICAgICAg
IHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50IGNvdWxkIGNoYW5nZSBkdXJpbmcgdGhlIGV2ZW50IGhh
bmRsaW5nLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cG9zdERpc3BhdGNo
RXZlbnRIYW5kbGVyKTogQ2hhbmdlZAorICAgICAgICB0byBjYWxsIElucHV0VHlwZTo6ZGlkRGlz
cGF0Y2hDbGljay4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRW
YWx1ZSk6IFVzZSBmYXN0R2V0QXR0cmlidXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6YWNjZXB0KTogVXNlIGZhc3RHZXRBdHRyaWJ1dGUuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50OjphbHQpOiBVc2UgZmFzdEdldEF0dHJpYnV0ZS4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNyYyk6IFVzZSBmYXN0R2V0QXR0cmlidXRlLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0QXV0b2ZpbGxlZCk6IFVwZGF0
ZWQgZm9yIG5hbWUKKyAgICAgICAgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6OmZpbGVzKTogVXNlIElucHV0VHlwZTo6ZmlsZXMuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50Ojppc0FjY2VwdGFibGVWYWx1ZSk6IFVzZQorICAgICAgICBJbnB1
dFR5cGU6OmlzQWNjZXB0YWJsZVZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6c2FuaXRpemVWYWx1ZSk6IFVzZQorICAgICAgICBJbnB1dFR5cGU6OnNhbml0aXplVmFs
dWUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpoYXNVbmFjY2VwdGFibGVW
YWx1ZSk6IFVzZQorICAgICAgICBJbnB1dFR5cGU6Omhhc1VuYWNjZXB0YWJsZVZhbHVlLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6bmVlZHNBY3RpdmF0aW9uQ2FsbGJhY2sp
OiBVc2UKKyAgICAgICAgSW5wdXRUeXBlOjpzaG91bGRSZXNldE9uRG9jdW1lbnRBY3RpdmF0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVy
RG9jdW1lbnQpOiBVc2UKKyAgICAgICAgSW5wdXRUeXBlOjp3aWxsTW92ZVRvTmV3T3duZXJEb2N1
bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmRhdGFMaXN0KTogVXNl
CisgICAgICAgIElucHV0VHlwZTo6c2hvdWxkUmVzcGVjdExpc3RBdHRyaWJ1dGUuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3RlZE9wdGlvbik6IFR3ZWFrZWQgbG9n
aWMKKyAgICAgICAgYW5kIG5hbWluZyBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6OnN0ZXBVcEZyb21SZW5kZXJlcik6IFVzZQorICAgICAgICBmYXN0R2V0QXR0cmli
dXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNTcGVlY2hFbmFibGVk
KTogVXNlCisgICAgICAgIElucHV0VHlwZTo6c2hvdWxkUmVzcGVjdFNwZWVjaEF0dHJpYnV0ZS4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzVGV4dEJ1dHRvbik6IE5vIGxv
bmdlciBpbmxpbmUuCisgICAgICAgIENhbGxzIHRocm91Z2ggdG8gSW5wdXRUeXBlLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNSYWRpb0J1dHRvbik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNTZWFyY2hGaWVsZCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNJbnB1dFR5cGVIaWRkZW4pOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzUGFzc3dvcmRGaWVs
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNDaGVja2Jv
eCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNUZXh0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc0VtYWlsRmllbGQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzRmlsZVVwbG9h
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNJbWFnZUJ1
dHRvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNOdW1i
ZXJGaWVsZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNT
dWJtaXRCdXR0b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6
OmlzVGVsZXBob25lRmllbGQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6OmlzVVJMRmllbGQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6OmlzRW51bWVyYXRhYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50Ojppc0NoZWNrZWQpOiBObyBsb25nZXIgaW5saW5lLgorICAgICAgICBDYWxscyBJ
bnB1dFR5cGU6OmlzQ2hlY2thYmxlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6aGFzU3BpbkJ1dHRvbik6IE5vIGxvbmdlciBpbmxpbmUuCisgICAgICAgIENhbGxzIHRocm91
Z2ggdG8gSW5wdXRUeXBlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c3Vw
cG9ydHNQbGFjZWhvbGRlcik6IE5vIGxvbmdlcgorICAgICAgICBpbmxpbmUuIENhbGxzIGlzVGV4
dFR5cGUgYXMgYmVmb3JlLCBidXQgd2l0aCBubyBzcGVjaWFsIGNhc2UKKyAgICAgICAgZm9yIElT
SU5ERVguIFRoYXQgc3BlY2lhbCBjYXNlIHdhcyB1bm5lZWRlZCBzaW5jZSBpdCByZXR1cm5zCisg
ICAgICAgIHRydWUgZnJvbSBpc1RleHRUeXBlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6Y2hlY2tlZFJhZGlvQnV0dG9ucyk6IE5vIGxvbmdlcgorICAgICAgICBpbmxpbmUu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudCk6CisgICAgICAgIE5vIGxvbmdlciBpbmxpbmUuCisKKyAgICAgICAgKiBodG1s
L0hUTUxJbnB1dEVsZW1lbnQuaDogUmVtb3ZlZCBtdWx0aXBsZSB1bm5lZWRlZCBpbmNsdWRlcy4K
KyAgICAgICAgVGhlIGJpZyBvbmUgaXMgcHJvYmFibHkgSW5wdXRUeXBlLmgsIGJ1dCBhbHNvIEhU
TUxGb3JtRWxlbWVudC5oLgorICAgICAgICBSZW1vdmVkIHVubmVlZGVkIGZvcndhcmQgZGVjbGFy
YXRpb25zLiBNYWRlIG1hbnkgZnVuY3Rpb25zCisgICAgICAgIG5vIGxvbmdlciBpbmxpbmUgc2lu
Y2UgdGhleSBub3cgbmVlZCB0byBtYWtlIHZpcnR1YWwgZnVuY3Rpb24KKyAgICAgICAgZGlzcGF0
Y2hlcy4gUmVtb3ZlZCB0aGUgdW5uZWVkZWQgZGVmYXVsdENoZWNrZWQgYW5kCisgICAgICAgIHdl
YmtpdGRpcmVjdG9yeSBmdW5jdGlvbnMuIEJvdGggYXJlIGhhbmRsZWQgYnkgSFRNTCBhdHRyaWJ1
dGUKKyAgICAgICAgcmVmbGVjdGlvbiBmb3IgRE9NIGJpbmRpbmdzLCBhbmQgdGhlIGNhbGxlcnMg
aW5zdGVhZCBjYW4gZ2V0CisgICAgICAgIGF0IHRoZSBhdHRyaWJ1dGUuIE1hZGUgdXBkYXRlQ2hl
Y2tlZFJhZGlvQnV0dG9ucyBwdWJsaWMgc28gaXQKKyAgICAgICAgY2FuIGJlIGNhbGxlZCBieSBh
biBJbnB1dFR5cGUgY2xhc3MuIFJlbW92ZWQKKyAgICAgICAgRGVwcmVjYXRlZElucHV0VHlwZSwg
SW5wdXRUeXBlTWFwLCBjcmVhdGVUeXBlTWFwLAorICAgICAgICBkZXByZWNhdGVkSW5wdXRUeXBl
LCBhbGxvd3NJbmRldGVybWluYXRlLAorICAgICAgICByZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRy
cywgc3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUsCisgICAgICAgIG1faW1hZ2VMb2Fk
ZXIsIG1fZmlsZUxpc3QsIG1fZGVwcmVjYXRlZFR5cGVOdW1iZXIsCisgICAgICAgIG1fZGVmYXVs
dENoZWNrZWQsIGFuZCBtX2luaXRlZC4gUmVuYW1lZCBtX2NoZWNrZWQgdG8KKyAgICAgICAgbV9p
c0NoZWNrZWQsIG1fdXNlRGVmYXVsdENoZWNrZWQgdG8gbV9yZWZsZWN0c0NoZWNrZWRBdHRyaWJ1
dGUsCisgICAgICAgIG1faW5kZXRlcm1pbmF0ZSB0b21faXNJbmRldGVybWluYXRlLCBtX2hhdmVU
eXBlIHRvIG1faGFzVHlwZSwKKyAgICAgICAgbV9hY3RpdmVTdWJtaXQgdG8gbV9pc0FjdGl2YXRl
ZFN1Ym1pdCwgYW5kIG1fYXV0b2ZpbGxlZCB0bworICAgICAgICBtX2lzQXV0b2ZpbGxlZC4KKyAg
ICAgICAgCisgICAgICAgICogaHRtbC9IaWRkZW5JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SGlkZGVuSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24pOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhpZGRlbklucHV0VHlwZTo6cmVuZGVyZXJJc05lZWRlZCkgQWRkZWQuOgorICAg
ICAgICAoV2ViQ29yZTo6SGlkZGVuSW5wdXRUeXBlOjpzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0
dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SGlkZGVuSW5wdXRUeXBlOjppc0hp
ZGRlblR5cGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhpZGRlbklucHV0VHlwZTo6c2hv
dWxkUmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0cmlidXRlcyk6IEFkZGVkLgorICAgICAgICAqIGh0
bWwvSGlkZGVuSW5wdXRUeXBlLmg6IERpdHRvLgorCisgICAgICAgICogaHRtbC9JbWFnZUlucHV0
VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUlucHV0VHlwZTo6SW1hZ2VJbnB1dFR5
cGUpOiBNb3ZlZCBvdXQgb2YgdGhlIGhlYWRlciBmaWxlLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VJbnB1dFR5cGU6OnNyY0F0dHJpYnV0ZUNoYW5nZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlSW5wdXRUeXBlOjphdHRhY2gpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlSW5wdXRUeXBlOjp3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RBbGlnbkF0dHJpYnV0ZSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5cGU6OmNhbkJlU3VjY2Vzc2Z1
bFN1Ym1pdEJ1dHRvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5cGU6
OmlzSW1hZ2VCdXR0b24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlSW5wdXRUeXBl
Ojppc0VudW1lcmF0YWJsZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5
cGU6OnNob3VsZFJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJpYnV0ZXMpOiBBZGRlZC4KKyAgICAg
ICAgKiBodG1sL0ltYWdlSW5wdXRUeXBlLmg6IERpdHRvLgorCisgICAgICAgICogaHRtbC9JbnB1
dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpjcmVhdGUpOiBDaGFuZ2Vk
IGFyZ3VtZW50IHR5cGUgdG8gU3RyaW5nLiBUaGVyZQorICAgICAgICBpcyBubyB2YWx1ZSBpbiB0
YWtpbmcgYW4gQXRvbWljU3RyaW5nIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6
OnNjYWxlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcik6IEZpeGVkIHR5cG8gaW4KKyAgICAgICAg
dGhpcyBmdW5jdGlvbiBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpjYW5TZXRT
dHJpbmdWYWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjppc0tleWJv
YXJkRm9jdXNhYmxlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnNob3Vs
ZFVzZUlucHV0TWV0aG9kKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6Omhh
bmRsZUJsdXJFdmVudCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjphY2Nl
c3NLZXlBY3Rpb24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6YXR0YWNo
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnNyY0F0dHJpYnV0ZUNoYW5n
ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6d2lsbE1vdmVUb05ld093
bmVyRG9jdW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2hvdWxk
UmVzcGVjdEFsaWduQXR0cmlidXRlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5
cGU6OmNhbkNoYW5nZUZyb21Bbm90aGVyVHlwZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW5wdXRUeXBlOjptaW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklucHV0VHlwZTo6Y2FuQmVTdWNjZXNzZnVsU3VibWl0QnV0dG9uKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnJlbmRlcmVySXNOZWVkZWQpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6ZmlsZXMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OklucHV0VHlwZTo6Z2V0VHlwZVNwZWNpZmljVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklucHV0VHlwZTo6ZmFsbGJhY2tWYWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW5wdXRUeXBlOjpkZWZhdWx0VmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklu
cHV0VHlwZTo6Y2FuU2V0U3VnZ2VzdGVkVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklucHV0VHlwZTo6c2hvdWxkU2VuZENoYW5nZUV2ZW50QWZ0ZXJDaGVja2VkQ2hhbmdlZCk6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpzdG9yZXNWYWx1ZVNlcGFyYXRlRnJv
bUF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpjYW5TZXRW
YWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjp3aWxsRGlzcGF0Y2hD
bGljayk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpkaWREaXNwYXRjaENs
aWNrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzQWNjZXB0YWJsZVZh
bHVlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnNhbml0aXplVmFsdWUp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6aGFzVW5hY2NlcHRhYmxlVmFs
dWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2V0RmlsZUxpc3QpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2hvdWxkUmVzZXRPbkRvY3VtZW50
QWN0aXZhdGlvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpzaG91bGRS
ZXNwZWN0TGlzdEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBl
OjpzaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbnB1dFR5cGU6OmlzVGV4dEJ1dHRvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5w
dXRUeXBlOjppc1JhZGlvQnV0dG9uKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5
cGU6OmlzU2VhcmNoRmllbGQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6
aXNIaWRkZW5UeXBlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzUGFz
c3dvcmRGaWVsZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjppc0NoZWNr
Ym94KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzRW1haWxGaWVsZCk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjppc0ZpbGVVcGxvYWQpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6aXNJbWFnZUJ1dHRvbik6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjppc051bWJlckZpZWxkKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzU3VibWl0QnV0dG9uKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzVGVsZXBob25lRmllbGQpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklucHV0VHlwZTo6aXNVUkxGaWVsZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW5wdXRUeXBlOjppc0VudW1lcmF0YWJsZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW5wdXRUeXBlOjppc0NoZWNrYWJsZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRU
eXBlOjpoYXNTcGluQnV0dG9uKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6
OnNob3VsZFJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJpYnV0ZXMpOiBBZGRlZC4KKworICAgICAg
ICAqIGh0bWwvSW5wdXRUeXBlLmg6IFJlbW92ZWQgdW5uZWVkZWQgRXhjZXB0aW9uQ29kZS5oIGlu
Y2x1ZGUgYW5kCisgICAgICAgIHVzZWQgYSB0eXBlZGVmIGluc3RlYWQgYXMgd2UgZG8gd2hlbiB3
ZSB3YW50IGZvciBmb3J3YXJkIGRlY2xhcmUgaXQuCisgICAgICAgIEFkZGVkIGluY2x1ZGVzIGFu
ZCBmb3J3YXJkIGRlY2xhcmF0aW9ucyBuZWVkZWQgZm9yIG5ldyBmdW5jdGlvbnMuCisgICAgICAg
IEFkZGVkIENsaWNrSGFuZGxpbmdTdGF0ZSBzdHJ1Y3R1cmUuIENoYW5nZWQgdGhlIGFyZ3VtZW50
IHRvIGNyZWF0ZQorICAgICAgICB0byBhIFN0cmluZyByYXRoZXIgdGhhbiBBdG9taWNTdHJpbmcu
IEFkZGVkIG1hbnkgdmlydHVhbCBmdW5jdGlvbnMuCisgICAgICAgIAorICAgICAgICAqIGh0bWwv
SXNJbmRleElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJc0luZGV4SW5wdXRUeXBl
OjpzaG91bGRSZXNwZWN0TGlzdEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvSXNJ
bmRleElucHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvTnVtYmVySW5wdXRUeXBl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0VHlwZTo6aGFuZGxlQmx1ckV2ZW50
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6OmlzQWNjZXB0YWJs
ZVZhbHVlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6OnNhbml0
aXplVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0VHlwZTo6aGFz
VW5hY2NlcHRhYmxlVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0
VHlwZTo6c2hvdWxkUmVzcGVjdFNwZWVjaEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TnVtYmVySW5wdXRUeXBlOjppc051bWJlckZpZWxkKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6Omhhc1NwaW5CdXR0b24pOiBBZGRlZC4KKyAgICAgICAg
KiBodG1sL051bWJlcklucHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvUGFzc3dv
cmRJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzc3dvcmRJbnB1dFR5cGU6OnNo
b3VsZFVzZUlucHV0TWV0aG9kKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXNzd29yZElu
cHV0VHlwZTo6c2hvdWxkUmVzZXRPbkRvY3VtZW50QWN0aXZhdGlvbik6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UGFzc3dvcmRJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRl
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXNzd29yZElucHV0VHlwZTo6c2hvdWxkUmVz
cGVjdFNwZWVjaEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFzc3dvcmRJ
bnB1dFR5cGU6OmlzUGFzc3dvcmRGaWVsZCk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvUGFzc3dv
cmRJbnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL1JhZGlvSW5wdXRUeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvSW5wdXRUeXBlOjppc0tleWJvYXJkRm9jdXNhYmxl
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSYWRpb0lucHV0VHlwZTo6YXR0YWNoKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYWRpb0lucHV0VHlwZTo6c2hvdWxkU2VuZENoYW5nZUV2
ZW50QWZ0ZXJDaGVja2VkQ2hhbmdlZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9J
bnB1dFR5cGU6OndpbGxEaXNwYXRjaENsaWNrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpS
YWRpb0lucHV0VHlwZTo6ZGlkRGlzcGF0Y2hDbGljayk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmFkaW9JbnB1dFR5cGU6OmlzUmFkaW9CdXR0b24pOiBBZGRlZC4KKyAgICAgICAgKiBodG1s
L1JhZGlvSW5wdXRUeXBlLmg6IERpdHRvLgorCisgICAgICAgICogaHRtbC9SYW5nZUlucHV0VHlw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9u
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6bWluT3JNYXhBdHRy
aWJ1dGVDaGFuZ2VkKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6
ZmFsbGJhY2tWYWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6
OnNhbml0aXplVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlSW5wdXRUeXBl
OjpzaG91bGRSZXNwZWN0TGlzdEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvUmFu
Z2VJbnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL1Jlc2V0SW5wdXRUeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc2V0SW5wdXRUeXBlOjpkZWZhdWx0VmFsdWUpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc2V0SW5wdXRUeXBlOjppc1RleHRCdXR0b24pOiBBZGRl
ZC4KKyAgICAgICAgKiBodG1sL1Jlc2V0SW5wdXRUeXBlLmg6IERpdHRvLgorCisgICAgICAgICog
aHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoSW5wdXRU
eXBlOjpzaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpTZWFyY2hJbnB1dFR5cGU6OmlzU2VhcmNoRmllbGQpOiBBZGRlZC4KKyAgICAgICAgKiBo
dG1sL1NlYXJjaElucHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvU3VibWl0SW5w
dXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1Ym1pdElucHV0VHlwZTo6Y2FuQmVTdWNj
ZXNzZnVsU3VibWl0QnV0dG9uKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdWJtaXRJbnB1
dFR5cGU6OmRlZmF1bHRWYWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3VibWl0SW5w
dXRUeXBlOjppc1N1Ym1pdEJ1dHRvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3VibWl0
SW5wdXRUeXBlOjppc1RleHRCdXR0b24pOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL1N1Ym1pdElu
cHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvVGVsZXBob25lSW5wdXRUeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRlbGVwaG9uZUlucHV0VHlwZTo6c2hvdWxkUmVzcGVjdFNw
ZWVjaEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGVsZXBob25lSW5wdXRU
eXBlOjppc1RlbGVwaG9uZUZpZWxkKTogQWRkZWQuCisgICAgICAgICogaHRtbC9UZWxlcGhvbmVJ
bnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZFVzZUlucHV0
TWV0aG9kKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OnNh
bml0aXplVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlw
ZTo6c2hvdWxkUmVzcGVjdExpc3RBdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL1Rl
eHRGaWVsZElucHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvVGV4dElucHV0VHlw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SW5wdXRUeXBlOjpjYW5TZXRTdWdnZXN0ZWRW
YWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dElucHV0VHlwZTo6c2hvdWxkUmVz
cGVjdFNwZWVjaEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvVGV4dElucHV0VHlw
ZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvVGltZUlucHV0VHlwZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUaW1lSW5wdXRUeXBlOjpzY2FsZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIp
OiBGaXhlZAorICAgICAgICB0eXBvIGluIHRoZSBuYW1lIG9mIHRoaXMgZnVuY3Rpb24uCisgICAg
ICAgICogaHRtbC9UaW1lSW5wdXRUeXBlLmg6IERpdHRvLgorCisgICAgICAgICogaHRtbC9VUkxJ
bnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VVJMSW5wdXRUeXBlOjppc1VSTEZpZWxk
KTogQWRkZWQuCisgICAgICAgICogaHRtbC9VUkxJbnB1dFR5cGUuaDogRGl0dG8uCisKIDIwMTEt
MDEtMDEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oCShyZXZpc2lvbiA3NDg1OCkKKysr
IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSwx
MiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGludCBzX21heGltdW1MZW5ndGg7CiAgICAg
c3RhdGljIGNvbnN0IGludCBzX2RlZmF1bHRTaXplOwogCisgICAgLy8gUmVwbGFjZXMgQ1JzIGFu
ZCBMRnMsIHNocmlua3MgdGhlIHZhbHVlIGZvciBzX21heGltdW1MZW5ndGguCisgICAgLy8gVGhp
cyBzaG91bGQgYmUgYXBwbGllZCB0byB2YWx1ZXMgZnJvbSB0aGUgSFRNTCB2YWx1ZSBhdHRyaWJ1
dGUgYW5kIHRoZSBET00gdmFsdWUgcHJvcGVydHkuCisgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91
bGQgYmUgY2FsbGVkIG9ubHkgYnkgc2FuaXRpemVWYWx1ZSgpIGltcGxlbWVudGF0aW9ucy4KKyAg
ICAvLyBQdWJsaWMgc28gaXQgY2FuIGJlIGNhbGxlZCBieSBJbnB1dFR5cGUuCisgICAgc3RhdGlj
IFN0cmluZyBzYW5pdGl6ZVZhbHVlRm9yVGV4dEZpZWxkKGNvbnN0IElucHV0RWxlbWVudCosIGNv
bnN0IFN0cmluZyYpOworCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hGb2N1
c0V2ZW50KElucHV0RWxlbWVudCosIEVsZW1lbnQqKTsKICAgICBzdGF0aWMgdm9pZCBkaXNwYXRj
aEJsdXJFdmVudChJbnB1dEVsZW1lbnQqLCBFbGVtZW50Kik7CkBAIC04MiwxMCArODgsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgdXBkYXRlU2VsZWN0aW9uUmFuZ2UoSW5wdXRFbGVt
ZW50KiwgRWxlbWVudCosIGludCBzdGFydCwgaW50IGVuZCk7CiAgICAgc3RhdGljIHZvaWQgYWJv
dXRUb1VubG9hZChJbnB1dEVsZW1lbnQqLCBFbGVtZW50Kik7CiAgICAgc3RhdGljIHZvaWQgc2V0
VmFsdWVGcm9tUmVuZGVyZXIoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0RWxlbWVudCosIEVsZW1l
bnQqLCBjb25zdCBTdHJpbmcmKTsKLSAgICAvLyBSZXBsYWNlcyBDUnMgYW5kIExGcywgc2hyaW5r
cyB0aGUgdmFsdWUgZm9yIHNfbWF4aW11bUxlbmd0aC4KLSAgICAvLyBUaGlzIHNob3VsZCBiZSBh
cHBsaWVkIHRvIHZhbHVlcyBmcm9tIHRoZSBIVE1MIHZhbHVlIGF0dHJpYnV0ZSBhbmQgdGhlIERP
TSB2YWx1ZSBwcm9wZXJ0eS4KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQg
b25seSBieSBzYW5pdGl6ZVZhbHVlKCkgaW1wbGVtZW50YXRpb25zLgotICAgIHN0YXRpYyBTdHJp
bmcgc2FuaXRpemVWYWx1ZUZvclRleHRGaWVsZChjb25zdCBJbnB1dEVsZW1lbnQqLCBjb25zdCBT
dHJpbmcmKTsKICAgICAvLyBSZXBsYWNlcyBDUnMgYW5kIExGcywgc2hyaW5rcyB0aGUgdmFsdWUg
Zm9yIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBsZW5ndGguCiAgICAgLy8gVGhpcyBzaG91bGQgYmUg
YXBwbGllZCB0byB2YWx1ZXMgc3BlY2lmaWVkIGJ5IHVzZXJzLgogICAgIC8vIFRoZSBpbnB1dCBz
dHJpbmcgbWF5IGJlIGEgZnJhZ21lbnQgb2YgdGhlIHdob2xlIHZhbHVlLgpJbmRleDogV2ViQ29y
ZS9odG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9CYXNlQnV0dG9uSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4NTgpCisrKyBXZWJDb3JlL2h0
bWwvQmFzZUJ1dHRvbklucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtODEsNCArODIsMTkgQEAg
UmVuZGVyT2JqZWN0KiBCYXNlQnV0dG9uSW5wdXRUeXBlOjpjcmVhdAogICAgIHJldHVybiBuZXcg
KGFyZW5hKSBSZW5kZXJCdXR0b24oZWxlbWVudCgpKTsKIH0KIAorLy8gRklYTUU6IENvdWxkIHNo
YXJlIHRoaXMgd2l0aCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlIGFuZCBSYW5nZUlucHV0VHlwZSBp
ZiB3ZSBoYWQgYSBjb21tb24gYmFzZSBjbGFzcy4KK3ZvaWQgQmFzZUJ1dHRvbklucHV0VHlwZTo6
YWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCkKK3sKKyAgICBJbnB1dFR5cGU6
OmFjY2Vzc0tleUFjdGlvbihzZW5kVG9BbnlFbGVtZW50KTsKKworICAgIC8vIFNlbmQgbW91c2Ug
YnV0dG9uIGV2ZW50cyBpZiB0aGUgY2FsbGVyIHNwZWNpZmllZCBzZW5kVG9BbnlFbGVtZW50Lgor
ICAgIC8vIEZJWE1FOiBUaGUgY29tbWVudCBhYm92ZSBpcyBubyBnb29kLiBJdCBzYXlzIHdoYXQg
d2UgZG8sIGJ1dCBub3Qgd2h5LgorICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hTaW11bGF0ZWRDbGlj
aygwLCBzZW5kVG9BbnlFbGVtZW50KTsKK30KKworYm9vbCBCYXNlQnV0dG9uSW5wdXRUeXBlOjpz
dG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpCit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvQmFzZUJ1dHRv
bklucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9CYXNlQnV0dG9uSW5wdXRU
eXBlLmgJKHJldmlzaW9uIDc0ODU4KQorKysgV2ViQ29yZS9odG1sL0Jhc2VCdXR0b25JbnB1dFR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVLZXlwcmVzc0V2ZW50KEtleWJvYXJkRXZlbnQqKTsKICAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlS2V5dXBFdmVudChLZXlib2FyZEV2ZW50Kik7CiAgICAgdmlydHVhbCBSZW5k
ZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVu
dCk7CisgICAgdmlydHVhbCBib29sIHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCk7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvQmFzZUNo
ZWNrYWJsZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0Jhc2VDaGVj
a2FibGVJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3NDg1OCkKKysrIFdlYkNvcmUvaHRtbC9CYXNl
Q2hlY2thYmxlSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC03Niw0ICs3NywzNCBAQCB2b2lk
IEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OmhhbmRsZUtleXByCiAgICAgfQogfQogCitib29sIEJh
c2VDaGVja2FibGVJbnB1dFR5cGU6OmNhblNldFN0cmluZ1ZhbHVlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKKy8vIEZJWE1FOiBDb3VsZCBzaGFyZSB0aGlzIHdpdGggQmFzZUJ1
dHRvbklucHV0VHlwZSBhbmQgUmFuZ2VJbnB1dFR5cGUgaWYgd2UgaGFkIGEgY29tbW9uIGJhc2Ug
Y2xhc3MuCit2b2lkIEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OmFjY2Vzc0tleUFjdGlvbihib29s
IHNlbmRUb0FueUVsZW1lbnQpCit7CisgICAgSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oc2Vu
ZFRvQW55RWxlbWVudCk7CisKKyAgICAvLyBTZW5kIG1vdXNlIGJ1dHRvbiBldmVudHMgaWYgdGhl
IGNhbGxlciBzcGVjaWZpZWQgc2VuZFRvQW55RWxlbWVudC4KKyAgICAvLyBGSVhNRTogVGhlIGNv
bW1lbnQgYWJvdmUgaXMgbm8gZ29vZC4gSXQgc2F5cyB3aGF0IHdlIGRvLCBidXQgbm90IHdoeS4K
KyAgICBlbGVtZW50KCktPmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soMCwgc2VuZFRvQW55RWxlbWVu
dCk7Cit9CisKK1N0cmluZyBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjpmYWxsYmFja1ZhbHVlKCkK
K3sKKyAgICByZXR1cm4gZWxlbWVudCgpLT5jaGVja2VkKCkgPyAib24iIDogIiI7Cit9CisKK2Jv
b2wgQmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1
dGUoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCYXNlQ2hlY2thYmxlSW5wdXRU
eXBlOjppc0NoZWNrYWJsZSgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9CYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0Jhc2VDaGVja2FibGVJbnB1dFR5cGUuaAkocmV2
aXNpb24gNzQ4NTgpCisrKyBXZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJsZUlucHV0VHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9p
ZCByZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIGhhbmRsZUtleXByZXNzRXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAgIHZp
cnR1YWwgYm9vbCBjYW5TZXRTdHJpbmdWYWx1ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBh
Y2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KTsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBmYWxsYmFja1ZhbHVlKCk7CisgICAgdmlydHVhbCBib29sIHN0b3Jlc1ZhbHVlU2VwYXJhdGVG
cm9tQXR0cmlidXRlKCk7CisgICAgdmlydHVhbCBib29sIGlzQ2hlY2thYmxlKCk7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1l
SW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1l
SW5wdXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4NTgpCisrKyBXZWJDb3JlL2h0bWwvQmFzZURhdGVB
bmRUaW1lSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDQgKzE3NCw5IEBAIFN0
cmluZyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNlcmlhbGkKICAgICByZXR1cm4gZGF0ZS50
b1N0cmluZyhEYXRlQ29tcG9uZW50czo6TWlsbGlzZWNvbmQpOwogfQogCitib29sIEJhc2VEYXRl
QW5kVGltZUlucHV0VHlwZTo6aGFzU3BpbkJ1dHRvbigpCit7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9CYXNlRGF0ZUFu
ZFRpbWVJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRU
aW1lSW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODU4KQorKysgV2ViQ29yZS9odG1sL0Jhc2VEYXRl
QW5kVGltZUlucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsMTAgQEAgcHJv
dGVjdGVkOgogICAgIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50KiBl
bGVtZW50KSA6IFRleHRGaWVsZElucHV0VHlwZShlbGVtZW50KSB7IH0KICAgICB2aXJ0dWFsIGRv
dWJsZSBwYXJzZVRvRG91YmxlKGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIHBhcnNlVG9EYXRlQ29tcG9uZW50cyhjb25zdCBTdHJpbmcmLCBEYXRlQ29tcG9u
ZW50cyopIGNvbnN0OwotICAgIC8vIEEgaGVscGVyIGZvciBwYXJzZVRvRGF0ZUNvbXBvbmVudHMo
KS4KLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VUb0RhdGVDb21wb25lbnRzSW50ZXJuYWwoY29uc3Qg
VUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIERhdGVDb21wb25lbnRzKikgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBzZXRNaWxsaXNlY29uZFRvRGF0ZUNvbXBvbmVudHMoZG91YmxlLCBEYXRl
Q29tcG9uZW50cyopIGNvbnN0ID0gMDsKIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VUb0RhdGVDb21wb25lbnRzSW50ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgs
IERhdGVDb21wb25lbnRzKikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzZXRNaWxsaXNl
Y29uZFRvRGF0ZUNvbXBvbmVudHMoZG91YmxlLCBEYXRlQ29tcG9uZW50cyopIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIGRvdWJsZSB2YWx1ZUFzRGF0ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRWYWx1ZUFzRGF0ZShkb3VibGUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICB2aXJ0
dWFsIGRvdWJsZSB2YWx1ZUFzTnVtYmVyKCkgY29uc3Q7CkBAIC02Miw2ICs2MSw3IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50Kik7
CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoV2hlZWxFdmVudCopOwogICAgIHZp
cnR1YWwgU3RyaW5nIHNlcmlhbGl6ZShkb3VibGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBo
YXNTcGluQnV0dG9uKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL2h0bWwvQmFzZVRleHRJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
QmFzZVRleHRJbnB1dFR5cGUuaAkocmV2aXNpb24gNzQ4NTgpCisrKyBXZWJDb3JlL2h0bWwvQmFz
ZVRleHRJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBCYXNlVGV4dElucHV0VHlwZSA6IHB1YmxpYyBUZXh0RmllbGRJ
bnB1dFR5cGUgewogcHJvdGVjdGVkOgogICAgIEJhc2VUZXh0SW5wdXRUeXBlKEhUTUxJbnB1dEVs
ZW1lbnQqIGVsZW1lbnQpIDogVGV4dEZpZWxkSW5wdXRUeXBlKGVsZW1lbnQpIHsgfQorcHJpdmF0
ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0VHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBwYXR0ZXJuTWlzbWF0Y2goY29uc3QgU3RyaW5nJikgY29uc3Q7CiB9OwpJbmRleDogV2ViQ29y
ZS9odG1sL0J1dHRvbklucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0J1
dHRvbklucHV0VHlwZS5jcHAJKHJldmlzaW9uIDc0ODU4KQorKysgV2ViQ29yZS9odG1sL0J1dHRv
bklucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDQgKzUwLDkgQEAgYm9vbCBCdXR0
b25JbnB1dFR5cGU6OnN1cHBvcnRzVmFsaWRhdGlvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAor
Ym9vbCBCdXR0b25JbnB1dFR5cGU6OmlzVGV4dEJ1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9C
dXR0b25JbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQnV0dG9uSW5wdXRU
eXBlLmgJKHJldmlzaW9uIDc0ODU4KQorKysgV2ViQ29yZS9odG1sL0J1dHRvbklucHV0VHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgQnV0dG9uSW5w
dXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogQmFzZUJ1dHRvbklucHV0VHlwZShl
bGVtZW50KSB7IH0KICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xU
eXBlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVmFsaWRhdGlvbigpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBpc1RleHRCdXR0b24oKSBjb25zdDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9DaGVja2JveElucHV0VHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NoZWNrYm94SW5wdXRUeXBlLmNwcAkocmV2aXNp
b24gNzQ4NTgpCisrKyBXZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKQEAgLTY2LDQgKzY3LDM4IEBAIHZvaWQgQ2hlY2tib3hJbnB1dFR5cGU6OmhhbmRsZUtleXVw
RXZlbnQKICAgICBkaXNwYXRjaFNpbXVsYXRlZENsaWNrSWZBY3RpdmUoZXZlbnQpOwogfQogCitQ
YXNzT3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gQ2hlY2tib3hJbnB1dFR5cGU6OndpbGxEaXNw
YXRjaENsaWNrKCkKK3sKKyAgICAvLyBBbiBldmVudCBoYW5kbGVyIGNhbiB1c2UgcHJldmVudERl
ZmF1bHQgb3IgInJldHVybiBmYWxzZSIgdG8gcmV2ZXJzZSB0aGUgY2hlY2tpbmcgd2UgZG8gaGVy
ZS4KKyAgICAvLyBUaGUgQ2xpY2tIYW5kbGluZ1N0YXRlIG9iamVjdCBjb250YWlucyB3aGF0IHdl
IG5lZWQgdG8gdW5kbyB3aGF0IHdlIGRpZCBoZXJlIGluIGRpZERpc3BhdGNoQ2xpY2suCisKKyAg
ICBPd25QdHI8Q2xpY2tIYW5kbGluZ1N0YXRlPiBzdGF0ZSA9IGFkb3B0UHRyKG5ldyBDbGlja0hh
bmRsaW5nU3RhdGUpOworCisgICAgc3RhdGUtPmNoZWNrZWQgPSBlbGVtZW50KCktPmNoZWNrZWQo
KTsKKyAgICBzdGF0ZS0+aW5kZXRlcm1pbmF0ZSA9IGVsZW1lbnQoKS0+aW5kZXRlcm1pbmF0ZSgp
OworCisgICAgaWYgKHN0YXRlLT5pbmRldGVybWluYXRlKQorICAgICAgICBlbGVtZW50KCktPnNl
dEluZGV0ZXJtaW5hdGUoZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgZWxlbWVudCgpLT5zZXRD
aGVja2VkKCFzdGF0ZS0+Y2hlY2tlZCwgdHJ1ZSk7CisKKyAgICByZXR1cm4gc3RhdGUucmVsZWFz
ZSgpOworfQorCit2b2lkIENoZWNrYm94SW5wdXRUeXBlOjpkaWREaXNwYXRjaENsaWNrKEV2ZW50
KiBldmVudCwgY29uc3QgQ2xpY2tIYW5kbGluZ1N0YXRlJiBzdGF0ZSkKK3sKKyAgICBpZiAoZXZl
bnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCBldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkgeworICAg
ICAgICBlbGVtZW50KCktPnNldEluZGV0ZXJtaW5hdGUoc3RhdGUuaW5kZXRlcm1pbmF0ZSk7Cisg
ICAgICAgIGVsZW1lbnQoKS0+c2V0Q2hlY2tlZChzdGF0ZS5jaGVja2VkKTsKKyAgICB9CisKKyAg
ICAvLyBUaGUgd29yayB3ZSBkaWQgaW4gd2lsbERpc3BhdGNoQ2xpY2sgd2FzIGRlZmF1bHQgaGFu
ZGxpbmcuCisgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKK2Jvb2wgQ2hlY2ti
b3hJbnB1dFR5cGU6OmlzQ2hlY2tib3goKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1
dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuaAko
cmV2aXNpb24gNzQ4NTgpCisrKyBXZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCB2
YWx1ZU1pc3NpbmcoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgdmFs
dWVNaXNzaW5nVGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXl1cEV2ZW50
KEtleWJvYXJkRXZlbnQqKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q2xpY2tIYW5kbGluZ1N0
YXRlPiB3aWxsRGlzcGF0Y2hDbGljaygpOworICAgIHZpcnR1YWwgdm9pZCBkaWREaXNwYXRjaENs
aWNrKEV2ZW50KiwgY29uc3QgQ2xpY2tIYW5kbGluZ1N0YXRlJik7CisgICAgdmlydHVhbCBib29s
IGlzQ2hlY2tib3goKSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvaHRtbC9EYXRlVGltZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4NTgpCisrKyBXZWJDb3Jl
L2h0bWwvRGF0ZVRpbWVJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3
IEBAIGRvdWJsZSBEYXRlVGltZUlucHV0VHlwZTo6c3RlcFNjYWxlRmFjdG8KICAgICByZXR1cm4g
ZGF0ZVRpbWVTdGVwU2NhbGVGYWN0b3I7CiB9CiAKLWJvb2wgRGF0ZVRpbWVJbnB1dFR5cGU6OnNj
YWxlZFN0ZXBWYWxldVNob3VsZEJlSW50ZWdlcigpIGNvbnN0Citib29sIERhdGVUaW1lSW5wdXRU
eXBlOjpzY2FsZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIoKSBjb25zdAogewogICAgIHJldHVy
biB0cnVlOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODU4
KQorKysgV2ViQ29yZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDcgKzQ3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGRvdWJsZSBtYXhpbXVtKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBkb3VibGUgZGVmYXVsdFN0ZXAoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGRvdWJsZSBzdGVwU2NhbGVGYWN0b3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2NhbGVk
U3RlcFZhbGV1U2hvdWxkQmVJbnRlZ2VyKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNjYWxl
ZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYXJz
ZVRvRGF0ZUNvbXBvbmVudHNJbnRlcm5hbChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwg
RGF0ZUNvbXBvbmVudHMqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2V0TWlsbGlzZWNvbmRU
b0RhdGVDb21wb25lbnRzKGRvdWJsZSwgRGF0ZUNvbXBvbmVudHMqKSBjb25zdDsKIH07CkluZGV4
OiBXZWJDb3JlL2h0bWwvRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3NDg1OCkK
KysrIFdlYkNvcmUvaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODUsNyArODUsNyBAQCBkb3VibGUgRGF0ZVRpbWVMb2NhbElucHV0VHlwZTo6c3RlcFNj
YWxlCiAgICAgcmV0dXJuIGRhdGVUaW1lTG9jYWxTdGVwU2NhbGVGYWN0b3I7CiB9CiAKLWJvb2wg
RGF0ZVRpbWVMb2NhbElucHV0VHlwZTo6c2NhbGVkU3RlcFZhbGV1U2hvdWxkQmVJbnRlZ2VyKCkg
Y29uc3QKK2Jvb2wgRGF0ZVRpbWVMb2NhbElucHV0VHlwZTo6c2NhbGVkU3RlcFZhbHVlU2hvdWxk
QmVJbnRlZ2VyKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFdlYkNvcmUv
aHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuaAkocmV2aXNpb24gNzQ4NTgpCisrKyBXZWJDb3JlL2h0
bWwvRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBkb3VibGUgbWF4aW11bSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgZG91YmxlIGRlZmF1bHRTdGVwKCkgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgc3Rl
cFNjYWxlRmFjdG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNjYWxlZFN0ZXBWYWxldVNo
b3VsZEJlSW50ZWdlcigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzY2FsZWRTdGVwVmFsdWVT
aG91bGRCZUludGVnZXIoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VUb0RhdGVDb21w
b25lbnRzSW50ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIERhdGVDb21wb25l
bnRzKikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9u
ZW50cyhkb3VibGUsIERhdGVDb21wb25lbnRzKikgY29uc3Q7CiB9OwpJbmRleDogV2ViQ29yZS9o
dG1sL0VtYWlsSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRW1haWxJ
bnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3NDg1OCkKKysrIFdlYkNvcmUvaHRtbC9FbWFpbElucHV0
VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDQgKzg1LDkgQEAgU3RyaW5nIEVtYWlsSW5w
dXRUeXBlOjp0eXBlTWlzbWF0Y2hUZXh0KAogICAgIHJldHVybiBlbGVtZW50KCktPm11bHRpcGxl
KCkgPyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvck11bHRpcGxlRW1haWxUZXh0KCkg
OiB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvckVtYWlsVGV4dCgpOwogfQogCitib29s
IEVtYWlsSW5wdXRUeXBlOjppc0VtYWlsRmllbGQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVl
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvRW1haWxJ
bnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRW1haWxJbnB1dFR5cGUuaAko
cmV2aXNpb24gNzQ4NTgpCisrKyBXZWJDb3JlL2h0bWwvRW1haWxJbnB1dFR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCB0eXBl
TWlzbWF0Y2hGb3IoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHR5cGVN
aXNtYXRjaCgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHR5cGVNaXNtYXRjaFRleHQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbWFpbEZpZWxkKCkgY29uc3Q7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3
NDg1OCkKKysrIFdlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI1LDgg
KzI1LDEwIEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVk
ZSAiRmlsZUxpc3QuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRm9ybURh
dGFMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC0zNCw2
ICszNiwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3VzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CisKK2lubGluZSBGaWxlSW5wdXRUeXBlOjpGaWxlSW5wdXRUeXBlKEhUTUxJbnB1dEVs
ZW1lbnQqIGVsZW1lbnQpCisgICAgOiBCYXNlQnV0dG9uSW5wdXRUeXBlKGVsZW1lbnQpCisgICAg
LCBtX2ZpbGVMaXN0KEZpbGVMaXN0OjpjcmVhdGUoKSkKK3sKK30KKwogUGFzc093blB0cjxJbnB1
dFR5cGU+IEZpbGVJbnB1dFR5cGU6OmNyZWF0ZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQog
ewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmlsZUlucHV0VHlwZShlbGVtZW50KSk7CkBAIC05
Niw0ICsxMDYsOTEgQEAgUmVuZGVyT2JqZWN0KiBGaWxlSW5wdXRUeXBlOjpjcmVhdGVSZW5kZQog
ICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbChlbGVtZW50KCkp
OwogfQogCitib29sIEZpbGVJbnB1dFR5cGU6OmNhblNldFN0cmluZ1ZhbHVlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRmlsZUlucHV0VHlwZTo6Y2FuQ2hhbmdlRnJv
bUFub3RoZXJUeXBlKCkgY29uc3QKK3sKKyAgICAvLyBEb24ndCBhbGxvdyB0aGUgdHlwZSB0byBi
ZSBjaGFuZ2VkIHRvIGZpbGUgYWZ0ZXIgdGhlIGZpcnN0IHR5cGUgY2hhbmdlLgorICAgIC8vIElu
IG90aGVyIGVuZ2luZXMgdGhpcyBtaWdodCBtZWFuIGEgSmF2YVNjcmlwdCBwcm9ncmFtbWVyIGNv
dWxkIHNldCBhIHRleHQKKyAgICAvLyBmaWVsZCdzIHZhbHVlIHRvIHNvbWV0aGluZyBsaWtlIC9l
dGMvcGFzc3dkIGFuZCB0aGVuIGNoYW5nZSBpdCB0byBhIGZpbGUgaW5wdXQuCisgICAgLy8gSSBk
b24ndCB0aGluayB0aGlzIHdvdWxkIGFjdHVhbGx5IG9jY3VyIGluIFdlYktpdCwgYnV0IHRoaXMg
cnVsZSBzdGlsbCBtYXkgYmUKKyAgICAvLyBpbXBvcnRhbnQgZm9yIGNvbXBhdGliaWxpdHkuCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitGaWxlTGlzdCogRmlsZUlucHV0VHlwZTo6ZmlsZXMoKQor
eworICAgIHJldHVybiBtX2ZpbGVMaXN0LmdldCgpOworfQorCitib29sIEZpbGVJbnB1dFR5cGU6
OmNhblNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgLy8gRm9yIHNlY3VyaXR5
IHJlYXNvbnMsIHdlIGRvbid0IGFsbG93IHNldHRpbmcgdGhlIGZpbGVuYW1lLCBidXQgd2UgZG8g
YWxsb3cgY2xlYXJpbmcgaXQuCisgICAgLy8gVGhlIEhUTUw1IHNwZWMgKGFzIG9mIHRoZSAxMC8y
NC8wOCB3b3JraW5nIGRyYWZ0KSBzYXlzIHRoYXQgdGhlIHZhbHVlIGF0dHJpYnV0ZSBpc24ndAor
ICAgIC8vIGFwcGxpY2FibGUgdG8gdGhlIGZpbGUgdXBsb2FkIGNvbnRyb2wgYXQgYWxsLCBidXQg
Zm9yIG5vdyB3ZSBhcmUga2VlcGluZyB0aGlzIGJlaGF2aW9yCisgICAgLy8gdG8gYXZvaWQgYnJl
YWtpbmcgZXhpc3Rpbmcgd2Vic2l0ZXMgdGhhdCBtYXkgYmUgcmVseWluZyBvbiB0aGlzLgorICAg
IHJldHVybiB2YWx1ZS5pc0VtcHR5KCk7Cit9CisKK2Jvb2wgRmlsZUlucHV0VHlwZTo6Z2V0VHlw
ZVNwZWNpZmljVmFsdWUoU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAobV9maWxlTGlzdC0+aXNF
bXB0eSgpKSB7CisgICAgICAgIHZhbHVlID0gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIC8vIEhUTUw1IHRlbGxzIHVzIHRoYXQgd2UncmUgc3VwcG9zZWQgdG8g
dXNlIHRoaXMgZ29vZnkgdmFsdWUgZm9yCisgICAgLy8gZmlsZSBpbnB1dCBjb250cm9scy4gSGlz
dG9yaWNhbGx5LCBicm93c2VycyByZXZlYWxlZCB0aGUgcmVhbAorICAgIC8vIGZpbGUgcGF0aCwg
YnV0IHRoYXQncyBhIHByaXZhY3kgcHJvYmxlbS4gQ29kZSBvbiB0aGUgd2ViCisgICAgLy8gZGVj
aWRlZCB0byB0cnkgdG8gcGFyc2UgdGhlIHZhbHVlIGJ5IGxvb2tpbmcgZm9yIGJhY2tzbGFzaGVz
CisgICAgLy8gKGJlY2F1c2UgdGhhdCdzIHdoYXQgV2luZG93cyBmaWxlIHBhdGhzIHVzZSkuIFRv
IGJlIGNvbXBhdGlibGUKKyAgICAvLyB3aXRoIHRoYXQgY29kZSwgd2UgbWFrZSB1cCBhIGZha2Ug
cGF0aCBmb3IgdGhlIGZpbGUuCisgICAgdmFsdWUgPSAiQzpcXGZha2VwYXRoXFwiICsgbV9maWxl
TGlzdC0+aXRlbSgwKS0+ZmlsZU5hbWUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBG
aWxlSW5wdXRUeXBlOjpzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpCit7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRmlsZUlucHV0VHlwZTo6c2V0RmlsZUxpc3QoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIG1fZmlsZUxpc3QtPmNsZWFyKCk7CisgICAg
c2l6ZV90IHNpemUgPSBwYXRocy5zaXplKCk7CisKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9B
RCkKKyAgICAvLyBJZiBhIGRpcmVjdG9yeSBpcyBiZWluZyBzZWxlY3RlZCwgdGhlIFVJIGFsbG93
cyBhIGRpcmVjdG9yeSB0byBiZSBjaG9zZW4KKyAgICAvLyBhbmQgdGhlIHBhdGhzIHByb3ZpZGVk
IGhlcmUgc2hhcmUgYSByb290IGRpcmVjdG9yeSBzb21ld2hlcmUgdXAgdGhlIHRyZWU7CisgICAg
Ly8gd2Ugd2FudCB0byBzdG9yZSBvbmx5IHRoZSByZWxhdGl2ZSBwYXRocyBmcm9tIHRoYXQgcG9p
bnQuCisgICAgaWYgKHNpemUgJiYgZWxlbWVudCgpLT5mYXN0SGFzQXR0cmlidXRlKHdlYmtpdGRp
cmVjdG9yeUF0dHIpKSB7CisgICAgICAgIC8vIEZpbmQgdGhlIGNvbW1vbiByb290IHBhdGguCisg
ICAgICAgIFN0cmluZyByb290UGF0aCA9IGRpcmVjdG9yeU5hbWUocGF0aHNbMF0pOworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgd2hpbGUg
KCFwYXRoc1tpXS5zdGFydHNXaXRoKHJvb3RQYXRoKSkKKyAgICAgICAgICAgICAgICByb290UGF0
aCA9IGRpcmVjdG9yeU5hbWUocm9vdFBhdGgpOworICAgICAgICB9CisgICAgICAgIHJvb3RQYXRo
ID0gZGlyZWN0b3J5TmFtZShyb290UGF0aCk7CisgICAgICAgIEFTU0VSVChyb290UGF0aC5sZW5n
dGgoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAg
ICAgICAgICAvLyBOb3JtYWxpemUgYmFja3NsYXNoZXMgdG8gc2xhc2hlcyBiZWZvcmUgZXhwb3Np
bmcgdGhlIHJlbGF0aXZlIHBhdGggdG8gc2NyaXB0LgorICAgICAgICAgICAgU3RyaW5nIHJlbGF0
aXZlUGF0aCA9IHBhdGhzW2ldLnN1YnN0cmluZygxICsgcm9vdFBhdGgubGVuZ3RoKCkpLnJlcGxh
Y2UoJ1xcJywnLycpOworICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0
ZShyZWxhdGl2ZVBhdGgsIHBhdGhzW2ldKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZgorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspCisg
ICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUocGF0aHNbaV0pKTsKK30KKwor
Ym9vbCBGaWxlSW5wdXRUeXBlOjppc0ZpbGVVcGxvYWQoKSBjb25zdAoreworICAgIHJldHVybiB0
cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvRmls
ZUlucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmgJ
KHJldmlzaW9uIDc0ODU4KQorKysgV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCkBAIC0zMiwyMSArMzMsMzQgQEAKICNkZWZpbmUgRmlsZUlucHV0VHlwZV9oCiAKICNpbmNs
dWRlICJCYXNlQnV0dG9uSW5wdXRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZpbGVMaXN0OworCiBjbGFzcyBGaWxlSW5wdXRU
eXBlIDogcHVibGljIEJhc2VCdXR0b25JbnB1dFR5cGUgewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzT3duUHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqKTsKIAogcHJpdmF0
ZToKLSAgICBGaWxlSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogQmFzZUJ1
dHRvbklucHV0VHlwZShlbGVtZW50KSB7IH0KKyAgICBGaWxlSW5wdXRUeXBlKEhUTUxJbnB1dEVs
ZW1lbnQqKTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBl
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYs
IGJvb2wpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCB2YWx1ZU1pc3NpbmcoY29uc3QgU3RyaW5n
JikgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgdmFsdWVNaXNzaW5nVGV4dCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50Kik7CiAgICAgdmly
dHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5
bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0U3RyaW5nVmFsdWUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgY2FuQ2hhbmdlRnJvbUFub3RoZXJUeXBlKCkgY29uc3Q7CisgICAg
dmlydHVhbCBGaWxlTGlzdCogZmlsZXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0VmFsdWUo
Y29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBib29sIGdldFR5cGVTcGVjaWZpY1ZhbHVlKFN0
cmluZyYpOyAvLyBDaGVja2VkIGZpcnN0LCBiZWZvcmUgaW50ZXJuYWwgc3RvcmFnZSBvciB0aGUg
dmFsdWUgYXR0cmlidXRlLgorICAgIHZpcnR1YWwgYm9vbCBzdG9yZXNWYWx1ZVNlcGFyYXRlRnJv
bUF0dHJpYnV0ZSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlTGlzdChjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGF0aHMpOworICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGVVcGxvYWQoKSBjb25zdDsK
KworICAgIFJlZlB0cjxGaWxlTGlzdD4gbV9maWxlTGlzdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDc0ODU4
KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IChhcEBueXBvcC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5p
ZyAoc2FtQHdlYmtpdC5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KQEAgLTgzLDE2ICs4MywxMyBAQCBjb25zdCBpbnQgbWF4U2F2ZWRS
ZXN1bHRzID0gMjU2OwogSFRNTElucHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVu
dCogZm9ybSkKICAgICA6IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50LCBmb3JtKQogICAgICwgbV9tYXhSZXN1bHRzKC0xKQotICAgICwgbV9kZXByZWNhdGVkVHlw
ZU51bWJlcihURVhUKQotICAgICwgbV9jaGVja2VkKGZhbHNlKQotICAgICwgbV9kZWZhdWx0Q2hl
Y2tlZChmYWxzZSkKLSAgICAsIG1fdXNlRGVmYXVsdENoZWNrZWQodHJ1ZSkKLSAgICAsIG1faW5k
ZXRlcm1pbmF0ZShmYWxzZSkKLSAgICAsIG1faGF2ZVR5cGUoZmFsc2UpCi0gICAgLCBtX2FjdGl2
ZVN1Ym1pdChmYWxzZSkKKyAgICAsIG1faXNDaGVja2VkKGZhbHNlKQorICAgICwgbV9yZWZsZWN0
c0NoZWNrZWRBdHRyaWJ1dGUodHJ1ZSkKKyAgICAsIG1faXNJbmRldGVybWluYXRlKGZhbHNlKQor
ICAgICwgbV9oYXNUeXBlKGZhbHNlKQorICAgICwgbV9pc0FjdGl2YXRlZFN1Ym1pdChmYWxzZSkK
ICAgICAsIG1fYXV0b2NvbXBsZXRlKFVuaW5pdGlhbGl6ZWQpCi0gICAgLCBtX2F1dG9maWxsZWQo
ZmFsc2UpCi0gICAgLCBtX2luaXRlZChmYWxzZSkKKyAgICAsIG1faXNBdXRvZmlsbGVkKGZhbHNl
KQogICAgICwgbV9pbnB1dFR5cGUoSW5wdXRUeXBlOjpjcmVhdGVUZXh0KHRoaXMpKQogewogICAg
IEFTU0VSVChoYXNUYWdOYW1lKGlucHV0VGFnKSB8fCBoYXNUYWdOYW1lKGlzaW5kZXhUYWcpKTsK
QEAgLTE2Nyw5ICsxNjQsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZUNoZWNrZWRS
YWRpCiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNWYWxpZFZhbHVlKGNvbnN0IFN0cmluZyYg
dmFsdWUpIGNvbnN0CiB7Ci0gICAgLy8gU2hvdWxkIG5vdCBjYWxsIGlzVmFsaWRWYWx1ZSgpIGZv
ciB0aGUgZm9sbG93aW5nIHR5cGVzIGJlY2F1c2UKLSAgICAvLyB3ZSBjYW4ndCBzZXQgc3RyaW5n
IHZhbHVlcyBmb3IgdGhlc2UgdHlwZXMuCi0gICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9
PSBDSEVDS0JPWCB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gRklMRSB8fCBkZXByZWNhdGVk
SW5wdXRUeXBlKCkgPT0gUkFESU8pIHsKKyAgICBpZiAoIW1faW5wdXRUeXBlLT5jYW5TZXRTdHJp
bmdWYWx1ZSgpKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQpAQCAtMjkzLDcgKzI4OCw3IEBAIGJvb2wgSFRNTElucHV0RWxlbWVu
dDo6Z2V0QWxsb3dlZFZhbHVlU3QKICAgICBkb3VibGUgc3RlcFNjYWxlRmFjdG9yID0gbV9pbnB1
dFR5cGUtPnN0ZXBTY2FsZUZhY3RvcigpOwogICAgIGlmICghaXNmaW5pdGUoZGVmYXVsdFN0ZXAp
IHx8ICFpc2Zpbml0ZShzdGVwU2NhbGVGYWN0b3IpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGVwU3RyaW5nID0gZ2V0QXR0cmlidXRlKHN0ZXBBdHRy
KTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0ZXBTdHJpbmcgPSBmYXN0R2V0QXR0cmlidXRl
KHN0ZXBBdHRyKTsKICAgICBpZiAoc3RlcFN0cmluZy5pc0VtcHR5KCkpIHsKICAgICAgICAgKnN0
ZXAgPSBkZWZhdWx0U3RlcCAqIHN0ZXBTY2FsZUZhY3RvcjsKICAgICAgICAgaWYgKGRlY2ltYWxQ
bGFjZXMpCkBAIC0zMjAsNyArMzE1LDcgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpnZXRBbGxv
d2VkVmFsdWVTdAogICAgICAgICBwYXJzZWQgPSBtYXgocm91bmQocGFyc2VkKSwgMS4wKTsKICAg
ICBkb3VibGUgcmVzdWx0ID0gcGFyc2VkICogc3RlcFNjYWxlRmFjdG9yOwogICAgIC8vIEZvciBk
YXRldGltZSwgZGF0ZXRpbWUtbG9jYWwsIHRpbWUsIHRoZSByZXN1bHQgc2hvdWxkIGJlIGFuIGlu
dGVnZXIuCi0gICAgaWYgKG1faW5wdXRUeXBlLT5zY2FsZWRTdGVwVmFsZXVTaG91bGRCZUludGVn
ZXIoKSkKKyAgICBpZiAobV9pbnB1dFR5cGUtPnNjYWxlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdl
cigpKQogICAgICAgICByZXN1bHQgPSBtYXgocm91bmQocmVzdWx0KSwgMS4wKTsKICAgICBBU1NF
UlQocmVzdWx0ID4gMCk7CiAgICAgKnN0ZXAgPSByZXN1bHQ7CkBAIC0zODksMzMgKzM4NCw5IEBA
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6c3RlcERvd24oaW50IG4sIEUKIAogYm9vbCBIVE1MSW5w
dXRFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25z
dAogewotICAgIC8vIElmIHRleHQgZmllbGRzIGNhbiBiZSBmb2N1c2VkLCB0aGVuIHRoZXkgc2hv
dWxkIGFsd2F5cyBiZSBrZXlib2FyZCBmb2N1c2FibGUKICAgICBpZiAoaXNUZXh0RmllbGQoKSkK
ICAgICAgICAgcmV0dXJuIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmlzRm9jdXNh
YmxlKCk7Ci0gICAgICAgIAotICAgIC8vIElmIHRoZSBiYXNlIGNsYXNzIHNheXMgd2UgY2FuJ3Qg
YmUgZm9jdXNlZCwgdGhlbiB3ZSBjYW4gc3RvcCBub3cuCi0gICAgaWYgKCFIVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlOjppc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBSQURJTykg
ewotICAgICAgICAvLyBXaGVuIHVzaW5nIFNwYXRpYWwgTmF2aWdhdGlvbiwgZXZlcnkgcmFkaW8g
YnV0dG9uIHNob3VsZCBiZSBmb2N1c2FibGUuCi0gICAgICAgIGlmIChpc1NwYXRpYWxOYXZpZ2F0
aW9uRW5hYmxlZChkb2N1bWVudCgpLT5mcmFtZSgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgICAgIC8vIE5ldmVyIGFsbG93IGtleWJvYXJkIHRhYmJpbmcgdG8gbGVhdmUgeW91
IGluIHRoZSBzYW1lIHJhZGlvIGdyb3VwLiAgQWx3YXlzCi0gICAgICAgIC8vIHNraXAgYW55IG90
aGVyIGVsZW1lbnRzIGluIHRoZSBncm91cC4KLSAgICAgICAgTm9kZSogY3VycmVudEZvY3VzZWRO
b2RlID0gZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRGb2N1
c2VkTm9kZSAmJiBjdXJyZW50Rm9jdXNlZE5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7Ci0g
ICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBmb2N1c2VkSW5wdXQgPSBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50Kj4oY3VycmVudEZvY3VzZWROb2RlKTsKLSAgICAgICAgICAgIGlmIChm
b2N1c2VkSW5wdXQtPmRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBSQURJTyAmJiBmb2N1c2VkSW5w
dXQtPmZvcm0oKSA9PSBmb3JtKCkgJiYgZm9jdXNlZElucHV0LT5uYW1lKCkgPT0gbmFtZSgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgLy8gQWxsb3cga2V5Ym9hcmQgZm9jdXMgaWYgd2UncmUgY2hlY2tlZCBvciBpZiBub3RoaW5n
IGluIHRoZSBncm91cCBpcyBjaGVja2VkLgotICAgICAgICByZXR1cm4gY2hlY2tlZCgpIHx8ICFj
aGVja2VkUmFkaW9CdXR0b25zKCkuY2hlY2tlZEJ1dHRvbkZvckdyb3VwKG5hbWUoKSk7Ci0gICAg
fQotICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlOjppc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSAmJiBtX2lucHV0VHlwZS0+
aXNLZXlib2FyZEZvY3VzYWJsZSgpOwogfQogCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzTW91
c2VGb2N1c2FibGUoKSBjb25zdApAQCAtNDQwLDExICs0MTEsNyBAQCB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OmFib3V0VG9VbmxvYWQoKQogCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnNob3VsZFVz
ZUlucHV0TWV0aG9kKCkgY29uc3QKIHsKLSAgICAvLyBUaGUgcmVhc29uIElNRSdzIGFyZSBkaXNh
YmxlZCBmb3IgdGhlIHBhc3N3b3JkIGZpZWxkIGlzIGJlY2F1c2UgSU1FcyAKLSAgICAvLyBjYW4g
YWNjZXNzIHRoZSB1bmRlcmx5aW5nIHBhc3N3b3JkIGFuZCBkaXNwbGF5IGl0IGluIGNsZWFyIHRl
eHQgLS0KLSAgICAvLyBlLmcuIHlvdSBjYW4gdXNlIGl0IHRvIGFjY2VzcyB0aGUgc3RvcmVkIHBh
c3N3b3JkIGZvciBhbnkgc2l0ZSAKLSAgICAvLyB3aXRoIG9ubHkgdHJpdmlhbCBlZmZvcnQuCi0g
ICAgcmV0dXJuIGlzVGV4dEZpZWxkKCkgJiYgZGVwcmVjYXRlZElucHV0VHlwZSgpICE9IFBBU1NX
T1JEOworICAgIHJldHVybiBtX2lucHV0VHlwZS0+c2hvdWxkVXNlSW5wdXRNZXRob2QoKTsKIH0K
IAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpoYW5kbGVGb2N1c0V2ZW50KCkKQEAgLTQ1NCwxMzUg
KzQyMSw5MiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmhhbmRsZUZvY3VzRXZlbnQoCiAKIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6aGFuZGxlQmx1ckV2ZW50KCkKIHsKLSAgICBpZiAoZGVwcmVj
YXRlZElucHV0VHlwZSgpID09IE5VTUJFUikgewotICAgICAgICAvLyBSZXNldCB0aGUgcmVuZGVy
ZXIgdmFsdWUsIHdoaWNoIG1pZ2h0IGJlIHVubWF0Y2hlZCB3aXRoIHRoZSBlbGVtZW50IHZhbHVl
LgotICAgICAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKLSAg
ICAgICAgLy8gV2UgbmVlZCB0byByZXNldCB0aGUgcmVuZGVyZXIgdmFsdWUgZXhwbGljaXRseSBi
ZWNhdXNlIGFuIHVuYWNjZXB0YWJsZQotICAgICAgICAvLyByZW5kZXJlciB2YWx1ZSBzaG91bGQg
YmUgcHVyZ2VkIGJlZm9yZSBzdHlsZSBjYWxjdWxhdGlvbi4KLSAgICAgICAgaWYgKHJlbmRlcmVy
KCkpCi0gICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIH0K
KyAgICBtX2lucHV0VHlwZS0+aGFuZGxlQmx1ckV2ZW50KCk7CiAgICAgSW5wdXRFbGVtZW50Ojpk
aXNwYXRjaEJsdXJFdmVudCh0aGlzLCB0aGlzKTsKIH0KIAotdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpzZXRUeXBlKGNvbnN0IFN0cmluZyYgdCkKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VHlw
ZShjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGp1c3Qg
Y2FsbCBzZXRBdHRyaWJ1dGUuIE5vIHJlYXNvbiB0byBoYW5kbGUgdGhlIGVtcHR5IHN0cmluZyBz
cGVjaWFsbHkuCiAgICAgLy8gV2Ugc2hvdWxkIHdyaXRlIGEgdGVzdCBjYXNlIHRvIHNob3cgdGhh
dCBzZXR0aW5nIHRvIHRoZSBlbXB0eSBzdHJpbmcgZG9lcyBub3QgcmVtb3ZlIHRoZQogICAgIC8v
IGF0dHJpYnV0ZSBpbiBvdGhlciBicm93c2VycyBhbmQgdGhlbiBmaXggdGhpcy4gTm90ZSB0aGF0
IHNldHRpbmcgdG8gbnVsbCAqZG9lcyogcmVtb3ZlCiAgICAgLy8gdGhlIGF0dHJpYnV0ZSBhbmQg
c2V0QXR0cmlidXRlIGltcGxlbWVudHMgdGhhdC4KLSAgICBpZiAodC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgaW50IGV4Y2NvZGU7Ci0gICAgICAgIHJlbW92ZUF0dHJpYnV0ZSh0eXBlQXR0ciwgZXhj
Y29kZSk7CisgICAgaWYgKHR5cGUuaXNFbXB0eSgpKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUg
ZWM7CisgICAgICAgIHJlbW92ZUF0dHJpYnV0ZSh0eXBlQXR0ciwgZWMpOwogICAgIH0gZWxzZQot
ICAgICAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHQpOwotfQotCi1QYXNzT3duUHRyPEhUTUxJ
bnB1dEVsZW1lbnQ6OklucHV0VHlwZU1hcD4gSFRNTElucHV0RWxlbWVudDo6Y3JlYXRlVHlwZU1h
cCgpCi17Ci0gICAgT3duUHRyPElucHV0VHlwZU1hcD4gbWFwID0gYWRvcHRQdHIobmV3IElucHV0
VHlwZU1hcCk7Ci0gICAgbWFwLT5hZGQoImJ1dHRvbiIsIEJVVFRPTik7Ci0gICAgbWFwLT5hZGQo
ImNoZWNrYm94IiwgQ0hFQ0tCT1gpOwotICAgIG1hcC0+YWRkKCJjb2xvciIsIENPTE9SKTsKLSAg
ICBtYXAtPmFkZCgiZGF0ZSIsIERBVEUpOwotICAgIG1hcC0+YWRkKCJkYXRldGltZSIsIERBVEVU
SU1FKTsKLSAgICBtYXAtPmFkZCgiZGF0ZXRpbWUtbG9jYWwiLCBEQVRFVElNRUxPQ0FMKTsKLSAg
ICBtYXAtPmFkZCgiZW1haWwiLCBFTUFJTCk7Ci0gICAgbWFwLT5hZGQoImZpbGUiLCBGSUxFKTsK
LSAgICBtYXAtPmFkZCgiaGlkZGVuIiwgSElEREVOKTsKLSAgICBtYXAtPmFkZCgiaW1hZ2UiLCBJ
TUFHRSk7Ci0gICAgbWFwLT5hZGQoImtodG1sX2lzaW5kZXgiLCBJU0lOREVYKTsKLSAgICBtYXAt
PmFkZCgibW9udGgiLCBNT05USCk7Ci0gICAgbWFwLT5hZGQoIm51bWJlciIsIE5VTUJFUik7Ci0g
ICAgbWFwLT5hZGQoInBhc3N3b3JkIiwgUEFTU1dPUkQpOwotICAgIG1hcC0+YWRkKCJyYWRpbyIs
IFJBRElPKTsKLSAgICBtYXAtPmFkZCgicmFuZ2UiLCBSQU5HRSk7Ci0gICAgbWFwLT5hZGQoInJl
c2V0IiwgUkVTRVQpOwotICAgIG1hcC0+YWRkKCJzZWFyY2giLCBTRUFSQ0gpOwotICAgIG1hcC0+
YWRkKCJzdWJtaXQiLCBTVUJNSVQpOwotICAgIG1hcC0+YWRkKCJ0ZWwiLCBURUxFUEhPTkUpOwot
ICAgIG1hcC0+YWRkKCJ0aW1lIiwgVElNRSk7Ci0gICAgbWFwLT5hZGQoInVybCIsIFVSTCk7Ci0g
ICAgbWFwLT5hZGQoIndlZWsiLCBXRUVLKTsKLSAgICAvLyBObyBuZWVkIHRvIHJlZ2lzdGVyICJ0
ZXh0IiBiZWNhdXNlIGl0IGlzIHRoZSBkZWZhdWx0IHR5cGUuCi0gICAgcmV0dXJuIG1hcC5yZWxl
YXNlKCk7CisgICAgICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdHlwZSk7CiB9CiAKIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6dXBkYXRlVHlwZSgpCiB7Ci0gICAgc3RhdGljIGNvbnN0IElucHV0
VHlwZU1hcCogdHlwZU1hcCA9IGNyZWF0ZVR5cGVNYXAoKS5sZWFrUHRyKCk7CiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlU3RyaW5nID0gZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci0g
ICAgRGVwcmVjYXRlZElucHV0VHlwZSBuZXdUeXBlID0gdHlwZVN0cmluZy5pc0VtcHR5KCkgPyBU
RVhUIDogdHlwZU1hcC0+Z2V0KHR5cGVTdHJpbmcpOwogCi0gICAgLy8gSU1QT1JUQU5UOiBEb24n
dCBhbGxvdyB0aGUgdHlwZSB0byBiZSBjaGFuZ2VkIHRvIEZJTEUgYWZ0ZXIgdGhlIGZpcnN0Ci0g
ICAgLy8gdHlwZSBjaGFuZ2UsIG90aGVyd2lzZSBhIEphdmFTY3JpcHQgcHJvZ3JhbW1lciB3b3Vs
ZCBiZSBhYmxlIHRvIHNldCBhIHRleHQKLSAgICAvLyBmaWVsZCdzIHZhbHVlIHRvIHNvbWV0aGlu
ZyBsaWtlIC9ldGMvcGFzc3dkIGFuZCB0aGVuIGNoYW5nZSBpdCB0byBhIGZpbGUgZmllbGQuCi0g
ICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSAhPSBuZXdUeXBlKSB7Ci0gICAgICAgIGlmIChu
ZXdUeXBlID09IEZJTEUgJiYgbV9oYXZlVHlwZSkKLSAgICAgICAgICAgIC8vIFNldCB0aGUgYXR0
cmlidXRlIGJhY2sgdG8gdGhlIG9sZCB2YWx1ZS4KLSAgICAgICAgICAgIC8vIFVzZWZ1bCBpbiBj
YXNlIHdlIHdlcmUgY2FsbGVkIGZyb20gaW5zaWRlIHBhcnNlTWFwcGVkQXR0cmlidXRlLgotICAg
ICAgICAgICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB0eXBlKCkpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24odGhpcyk7Cisg
ICAgT3duUHRyPElucHV0VHlwZT4gbmV3VHlwZSA9IElucHV0VHlwZTo6Y3JlYXRlKHRoaXMsIHR5
cGVTdHJpbmcpOwogCi0gICAgICAgICAgICBpZiAobmV3VHlwZSA9PSBGSUxFICYmICFtX2ZpbGVM
aXN0KQotICAgICAgICAgICAgICAgIG1fZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRlKCk7Cisg
ICAgaWYgKG1faGFzVHlwZSAmJiAhbmV3VHlwZS0+Y2FuQ2hhbmdlRnJvbUFub3RoZXJUeXBlKCkp
IHsKKyAgICAgICAgLy8gU2V0IHRoZSBhdHRyaWJ1dGUgYmFjayB0byB0aGUgb2xkIHZhbHVlLgor
ICAgICAgICAvLyBVc2VmdWwgaW4gY2FzZSB3ZSB3ZXJlIGNhbGxlZCBmcm9tIGluc2lkZSBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZS4KKyAgICAgICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB0eXBlKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgICAgICAgICBib29sIHdhc0F0dGFjaGVk
ID0gYXR0YWNoZWQoKTsKLSAgICAgICAgICAgIGlmICh3YXNBdHRhY2hlZCkKLSAgICAgICAgICAg
ICAgICBkZXRhY2goKTsKLQotICAgICAgICAgICAgYm9vbCBkaWRTdG9yZVZhbHVlID0gc3RvcmVz
VmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKTsKLSAgICAgICAgICAgIGJvb2wgd2FzUGFzc3dv
cmRGaWVsZCA9IGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBQQVNTV09SRDsKLSAgICAgICAgICAg
IGJvb2wgZGlkUmVzcGVjdEhlaWdodEFuZFdpZHRoID0gcmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0
cnMoKTsKLSAgICAgICAgICAgIG1fZGVwcmVjYXRlZFR5cGVOdW1iZXIgPSBuZXdUeXBlOwotICAg
ICAgICAgICAgbV9pbnB1dFR5cGUgPSBJbnB1dFR5cGU6OmNyZWF0ZSh0aGlzLCB0eXBlU3RyaW5n
KTsKLSAgICAgICAgICAgIHNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKTsKLSAgICAgICAgICAg
IGJvb2wgd2lsbFN0b3JlVmFsdWUgPSBzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgp
OwotICAgICAgICAgICAgYm9vbCBpc1Bhc3N3b3JkRmllbGQgPSBkZXByZWNhdGVkSW5wdXRUeXBl
KCkgPT0gUEFTU1dPUkQ7Ci0gICAgICAgICAgICBib29sIHdpbGxSZXNwZWN0SGVpZ2h0QW5kV2lk
dGggPSByZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRycygpOwotCi0gICAgICAgICAgICBpZiAoZGlk
U3RvcmVWYWx1ZSAmJiAhd2lsbFN0b3JlVmFsdWUgJiYgIW1fZGF0YS52YWx1ZSgpLmlzTnVsbCgp
KSB7Ci0gICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlKHZhbHVlQXR0ciwgbV9kYXRhLnZhbHVl
KCkpOwotICAgICAgICAgICAgICAgIG1fZGF0YS5zZXRWYWx1ZShTdHJpbmcoKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoIWRpZFN0b3JlVmFsdWUgJiYgd2lsbFN0b3JlVmFsdWUp
Ci0gICAgICAgICAgICAgICAgbV9kYXRhLnNldFZhbHVlKHNhbml0aXplVmFsdWUoZ2V0QXR0cmli
dXRlKHZhbHVlQXR0cikpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBJbnB1
dEVsZW1lbnQ6OnVwZGF0ZVZhbHVlSWZOZWVkZWQobV9kYXRhLCB0aGlzKTsKKyAgICBtX2hhc1R5
cGUgPSB0cnVlOwogCi0gICAgICAgICAgICBpZiAod2FzUGFzc3dvcmRGaWVsZCAmJiAhaXNQYXNz
d29yZEZpZWxkKQotICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJGb3JBY3RpdmF0aW9uQ2FsbGJh
Y2tJZk5lZWRlZCgpOwotICAgICAgICAgICAgZWxzZSBpZiAoIXdhc1Bhc3N3b3JkRmllbGQgJiYg
aXNQYXNzd29yZEZpZWxkKQotICAgICAgICAgICAgICAgIHJlZ2lzdGVyRm9yQWN0aXZhdGlvbkNh
bGxiYWNrSWZOZWVkZWQoKTsKKyAgICBpZiAobV9pbnB1dFR5cGUtPmZvcm1Db250cm9sVHlwZSgp
ID09IG5ld1R5cGUtPmZvcm1Db250cm9sVHlwZSgpKQorICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgICAgIGlmIChkaWRSZXNwZWN0SGVpZ2h0QW5kV2lkdGggIT0gd2lsbFJlc3BlY3RIZWlnaHRB
bmRXaWR0aCkgewotICAgICAgICAgICAgICAgIE5hbWVkTm9kZU1hcCogbWFwID0gYXR0cmlidXRl
TWFwKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1hcCk7Ci0gICAgICAgICAgICAgICAgaWYg
KEF0dHJpYnV0ZSogaGVpZ2h0ID0gbWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGhlaWdodEF0dHIpKQot
ICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkKGhlaWdodCwgZmFsc2UpOwotICAg
ICAgICAgICAgICAgIGlmIChBdHRyaWJ1dGUqIHdpZHRoID0gbWFwLT5nZXRBdHRyaWJ1dGVJdGVt
KHdpZHRoQXR0cikpCi0gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQod2lkdGgs
IGZhbHNlKTsKLSAgICAgICAgICAgICAgICBpZiAoQXR0cmlidXRlKiBhbGlnbiA9IG1hcC0+Z2V0
QXR0cmlidXRlSXRlbShhbGlnbkF0dHIpKQotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVD
aGFuZ2VkKGFsaWduLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh3
YXNBdHRhY2hlZCkgewotICAgICAgICAgICAgICAgIGF0dGFjaCgpOwotICAgICAgICAgICAgICAg
IGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IHRoaXMpCi0gICAgICAgICAgICAgICAg
ICAgIHVwZGF0ZUZvY3VzQXBwZWFyYW5jZSh0cnVlKTsKLSAgICAgICAgICAgIH0KKyAgICBjaGVj
a2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKHRoaXMpOwogCi0gICAgICAgICAgICBjaGVj
a2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwotICAgICAgICB9CisgICAgYm9vbCB3
YXNBdHRhY2hlZCA9IGF0dGFjaGVkKCk7CisgICAgaWYgKHdhc0F0dGFjaGVkKQorICAgICAgICBk
ZXRhY2goKTsKIAotICAgICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKLSAgICAgICAgSW5w
dXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMpOworICAgIGJvb2wgZGlkU3Rv
cmVWYWx1ZSA9IG1faW5wdXRUeXBlLT5zdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgp
OworICAgIGJvb2wgbmVlZGVkQWN0aXZhdGlvbkNhbGxiYWNrID0gbmVlZHNBY3RpdmF0aW9uQ2Fs
bGJhY2soKTsKKyAgICBib29sIGRpZFJlc3BlY3RIZWlnaHRBbmRXaWR0aCA9IG1faW5wdXRUeXBl
LT5zaG91bGRSZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRyaWJ1dGVzKCk7CisKKyAgICBtX2lucHV0
VHlwZSA9IG5ld1R5cGUucmVsZWFzZSgpOworCisgICAgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVj
aygpOworCisgICAgYm9vbCB3aWxsU3RvcmVWYWx1ZSA9IG1faW5wdXRUeXBlLT5zdG9yZXNWYWx1
ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpOworCisgICAgaWYgKGRpZFN0b3JlVmFsdWUgJiYgIXdp
bGxTdG9yZVZhbHVlICYmICFtX2RhdGEudmFsdWUoKS5pc051bGwoKSkgeworICAgICAgICBzZXRB
dHRyaWJ1dGUodmFsdWVBdHRyLCBtX2RhdGEudmFsdWUoKSk7CisgICAgICAgIG1fZGF0YS5zZXRW
YWx1ZShTdHJpbmcoKSk7CisgICAgfQorICAgIGlmICghZGlkU3RvcmVWYWx1ZSAmJiB3aWxsU3Rv
cmVWYWx1ZSkKKyAgICAgICAgbV9kYXRhLnNldFZhbHVlKHNhbml0aXplVmFsdWUoZmFzdEdldEF0
dHJpYnV0ZSh2YWx1ZUF0dHIpKSk7CisgICAgZWxzZQorICAgICAgICBJbnB1dEVsZW1lbnQ6OnVw
ZGF0ZVZhbHVlSWZOZWVkZWQobV9kYXRhLCB0aGlzKTsKKworICAgIGlmIChuZWVkZWRBY3RpdmF0
aW9uQ2FsbGJhY2spCisgICAgICAgIHVucmVnaXN0ZXJGb3JBY3RpdmF0aW9uQ2FsbGJhY2tJZk5l
ZWRlZCgpOworICAgIGVsc2UKKyAgICAgICAgcmVnaXN0ZXJGb3JBY3RpdmF0aW9uQ2FsbGJhY2tJ
Zk5lZWRlZCgpOworCisgICAgaWYgKGRpZFJlc3BlY3RIZWlnaHRBbmRXaWR0aCAhPSBtX2lucHV0
VHlwZS0+c2hvdWxkUmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0cmlidXRlcygpKSB7CisgICAgICAg
IE5hbWVkTm9kZU1hcCogbWFwID0gYXR0cmlidXRlTWFwKCk7CisgICAgICAgIEFTU0VSVChtYXAp
OworICAgICAgICBpZiAoQXR0cmlidXRlKiBoZWlnaHQgPSBtYXAtPmdldEF0dHJpYnV0ZUl0ZW0o
aGVpZ2h0QXR0cikpCisgICAgICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkKGhlaWdodCwgZmFsc2Up
OworICAgICAgICBpZiAoQXR0cmlidXRlKiB3aWR0aCA9IG1hcC0+Z2V0QXR0cmlidXRlSXRlbSh3
aWR0aEF0dHIpKQorICAgICAgICAgICAgYXR0cmlidXRlQ2hhbmdlZCh3aWR0aCwgZmFsc2UpOwor
ICAgICAgICBpZiAoQXR0cmlidXRlKiBhbGlnbiA9IG1hcC0+Z2V0QXR0cmlidXRlSXRlbShhbGln
bkF0dHIpKQorICAgICAgICAgICAgYXR0cmlidXRlQ2hhbmdlZChhbGlnbiwgZmFsc2UpOwogICAg
IH0KLSAgICBtX2hhdmVUeXBlID0gdHJ1ZTsKIAotICAgIGlmIChkZXByZWNhdGVkSW5wdXRUeXBl
KCkgIT0gSU1BR0UgJiYgbV9pbWFnZUxvYWRlcikKLSAgICAgICAgbV9pbWFnZUxvYWRlci5jbGVh
cigpOworICAgIGlmICh3YXNBdHRhY2hlZCkgeworICAgICAgICBhdHRhY2goKTsKKyAgICAgICAg
aWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgPT0gdGhpcykKKyAgICAgICAgICAgIHVwZGF0
ZUZvY3VzQXBwZWFyYW5jZSh0cnVlKTsKKyAgICB9CisKKyAgICBjaGVja2VkUmFkaW9CdXR0b25z
KCkuYWRkQnV0dG9uKHRoaXMpOworCisgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CisgICAg
SW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMpOwogfQogCiBjb25zdCBB
dG9taWNTdHJpbmcmIEhUTUxJbnB1dEVsZW1lbnQ6OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0CkBA
IC02MTQsNTggKzUzOCwyMiBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmNhbkhhdmVTZWxlY3Rp
b24oCiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6YWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRv
QW55RWxlbWVudCkKIHsKLSAgICBzd2l0Y2ggKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSkgewotICAg
IGNhc2UgQlVUVE9OOgotICAgIGNhc2UgQ0hFQ0tCT1g6Ci0gICAgY2FzZSBGSUxFOgotICAgIGNh
c2UgSU1BR0U6Ci0gICAgY2FzZSBSQURJTzoKLSAgICBjYXNlIFJBTkdFOgotICAgIGNhc2UgUkVT
RVQ6Ci0gICAgY2FzZSBTVUJNSVQ6Ci0gICAgICAgIGZvY3VzKGZhbHNlKTsKLSAgICAgICAgLy8g
c2VuZCB0aGUgbW91c2UgYnV0dG9uIGV2ZW50cyBpZmYgdGhlIGNhbGxlciBzcGVjaWZpZWQgc2Vu
ZFRvQW55RWxlbWVudAotICAgICAgICBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKDAsIHNlbmRUb0Fu
eUVsZW1lbnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEhJRERFTjoKLSAgICAgICAgLy8g
YSBuby1vcCBmb3IgdGhpcyB0eXBlCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ09MT1I6Ci0g
ICAgY2FzZSBEQVRFOgotICAgIGNhc2UgREFURVRJTUU6Ci0gICAgY2FzZSBEQVRFVElNRUxPQ0FM
OgotICAgIGNhc2UgRU1BSUw6Ci0gICAgY2FzZSBJU0lOREVYOgotICAgIGNhc2UgTU9OVEg6Ci0g
ICAgY2FzZSBOVU1CRVI6Ci0gICAgY2FzZSBQQVNTV09SRDoKLSAgICBjYXNlIFNFQVJDSDoKLSAg
ICBjYXNlIFRFTEVQSE9ORToKLSAgICBjYXNlIFRFWFQ6Ci0gICAgY2FzZSBUSU1FOgotICAgIGNh
c2UgVVJMOgotICAgIGNhc2UgV0VFSzoKLSAgICAgICAgLy8gc2hvdWxkIG5ldmVyIHJlc3RvcmUg
cHJldmlvdXMgc2VsZWN0aW9uIGhlcmUKLSAgICAgICAgZm9jdXMoZmFsc2UpOwotICAgICAgICAg
YnJlYWs7Ci0gICAgfQorICAgIG1faW5wdXRUeXBlLT5hY2Nlc3NLZXlBY3Rpb24oc2VuZFRvQW55
RWxlbWVudCk7CiB9CiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29u
c3QKIHsKLSAgICBpZiAoKChhdHRyTmFtZSA9PSBoZWlnaHRBdHRyIHx8IGF0dHJOYW1lID09IHdp
ZHRoQXR0cikgJiYgcmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0cnMoKSkKKyAgICBpZiAoKChhdHRy
TmFtZSA9PSBoZWlnaHRBdHRyIHx8IGF0dHJOYW1lID09IHdpZHRoQXR0cikgJiYgbV9pbnB1dFR5
cGUtPnNob3VsZFJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJpYnV0ZXMoKSkKICAgICAgICAgfHwg
YXR0ck5hbWUgPT0gdnNwYWNlQXR0ciAKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gaHNwYWNlQXR0
cikgewogICAgICAgICByZXN1bHQgPSBlVW5pdmVyc2FsOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfSAKIAotICAgIGlmIChhdHRyTmFtZSA9PSBhbGlnbkF0dHIpIHsKLSAgICAgICAgaWYg
KGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBJTUFHRSkgewotICAgICAgICAgICAgLy8gU2hhcmUg
d2l0aCA8aW1nPiBzaW5jZSB0aGUgYWxpZ25tZW50IGJlaGF2aW9yIGlzIHRoZSBzYW1lLgotICAg
ICAgICAgICAgcmVzdWx0ID0gZVJlcGxhY2VkOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9CisgICAgaWYgKGF0dHJOYW1lID09IGFsaWduQXR0ciAmJiBtX2lucHV0VHlwZS0+
c2hvdWxkUmVzcGVjdEFsaWduQXR0cmlidXRlKCkpIHsKKyAgICAgICAgLy8gU2hhcmUgd2l0aCA8
aW1nPiBzaW5jZSB0aGUgYWxpZ25tZW50IGJlaGF2aW9yIGlzIHRoZSBzYW1lLgorICAgICAgICBy
ZXN1bHQgPSBlUmVwbGFjZWQ7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBy
ZXR1cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnkoYXR0ck5hbWUsIHJlc3VsdCk7CkBAIC03MDIs
MTAgKzU5MCw5IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAg
ICAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7CiAgICAgICAg
IHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IGNoZWNrZWRBdHRyKSB7Ci0gICAgICAgIG1fZGVmYXVsdENoZWNrZWQgPSAhYXR0ci0+aXNOdWxs
KCk7Ci0gICAgICAgIGlmIChtX3VzZURlZmF1bHRDaGVja2VkKSB7Ci0gICAgICAgICAgICBzZXRD
aGVja2VkKG1fZGVmYXVsdENoZWNrZWQpOwotICAgICAgICAgICAgbV91c2VEZWZhdWx0Q2hlY2tl
ZCA9IHRydWU7CisgICAgICAgIGlmIChtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0ZSkgeworICAg
ICAgICAgICAgc2V0Q2hlY2tlZCghYXR0ci0+aXNOdWxsKCkpOworICAgICAgICAgICAgbV9yZWZs
ZWN0c0NoZWNrZWRBdHRyaWJ1dGUgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHNldE5lZWRz
VmFsaWRpdHlDaGVjaygpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1heGxlbmd0
aEF0dHIpIHsKQEAgLTcxNCwxNSArNjAxLDExIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWIKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzaXplQXR0cikK
ICAgICAgICAgSW5wdXRFbGVtZW50OjpwYXJzZVNpemVBdHRyaWJ1dGUobV9kYXRhLCB0aGlzLCBh
dHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWx0QXR0cikgewotICAgICAgICBp
ZiAocmVuZGVyZXIoKSAmJiBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gSU1BR0UpCisgICAgICAg
IGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzUmVuZGVySW1hZ2UoKSkKICAgICAgICAg
ICAgIHRvUmVuZGVySW1hZ2UocmVuZGVyZXIoKSktPnVwZGF0ZUFsdFRleHQoKTsKLSAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzcmNBdHRyKSB7Ci0gICAgICAgIGlmIChyZW5kZXJlcigp
ICYmIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBJTUFHRSkgewotICAgICAgICAgICAgaWYgKCFt
X2ltYWdlTG9hZGVyKQotICAgICAgICAgICAgICAgIG1faW1hZ2VMb2FkZXIgPSBhZG9wdFB0cihu
ZXcgSFRNTEltYWdlTG9hZGVyKHRoaXMpKTsKLSAgICAgICAgICAgIG1faW1hZ2VMb2FkZXItPnVw
ZGF0ZUZyb21FbGVtZW50SWdub3JpbmdQcmV2aW91c0Vycm9yKCk7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB1c2VtYXBBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBh
Y2Nlc3NrZXlBdHRyKSB7CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc3JjQXR0cikK
KyAgICAgICAgbV9pbnB1dFR5cGUtPnNyY0F0dHJpYnV0ZUNoYW5nZWQoKTsKKyAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gdXNlbWFwQXR0ciB8fCBhdHRyLT5uYW1lKCkgPT0gYWNjZXNza2V5
QXR0cikgewogICAgICAgICAvLyBGSVhNRTogaWdub3JlIGZvciB0aGUgbW9tZW50CiAgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdnNwYWNlQXR0cikgewogICAgICAgICBhZGRDU1NMZW5n
dGgoYXR0ciwgQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIGF0dHItPnZhbHVlKCkpOwpAQCAtNzMxLDEz
ICs2MTQsMTMgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogICAg
ICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCBhdHRyLT52YWx1
ZSgpKTsKICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQs
IGF0dHItPnZhbHVlKCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0
cikgewotICAgICAgICBpZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IElNQUdFKQorICAgICAg
ICBpZiAobV9pbnB1dFR5cGUtPnNob3VsZFJlc3BlY3RBbGlnbkF0dHJpYnV0ZSgpKQogICAgICAg
ICAgICAgYWRkSFRNTEFsaWdubWVudChhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSB3aWR0aEF0dHIpIHsKLSAgICAgICAgaWYgKHJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJz
KCkpCisgICAgICAgIGlmIChtX2lucHV0VHlwZS0+c2hvdWxkUmVzcGVjdEhlaWdodEFuZFdpZHRo
QXR0cmlidXRlcygpKQogICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU1Byb3BlcnR5
V2lkdGgsIGF0dHItPnZhbHVlKCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhl
aWdodEF0dHIpIHsKLSAgICAgICAgaWYgKHJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJzKCkpCisg
ICAgICAgIGlmIChtX2lucHV0VHlwZS0+c2hvdWxkUmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0cmli
dXRlcygpKQogICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU1Byb3BlcnR5SGVpZ2h0
LCBhdHRyLT52YWx1ZSgpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnNlYXJj
aEF0dHIpIHsKICAgICAgICAgLy8gU2VhcmNoIGZpZWxkIGFuZCBzbGlkZXIgYXR0cmlidXRlcyBh
bGwganVzdCBjYXVzZSB1cGRhdGVGcm9tRWxlbWVudCB0byBiZSBjYWxsZWQgdGhyb3VnaCBzdHls
ZSByZWNhbGNpbmcuCkBAIC03NTIsMjEgKzYzNSwxMiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgICAgICAgICBhdHRhY2goKTsKICAgICAgICAgfQogICAg
ICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gYXV0b3NhdmVBdHRyCi0gICAgICAgICAgICAgICB8fCBhdHRyLT5uYW1lKCkgPT0gaW5jcmVt
ZW50YWxBdHRyKQorICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGF1dG9zYXZlQXR0ciB8
fCBhdHRyLT5uYW1lKCkgPT0gaW5jcmVtZW50YWxBdHRyKQogICAgICAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKCk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1pbkF0dHIKLSAgICAgICAg
ICAgICB8fCBhdHRyLT5uYW1lKCkgPT0gbWF4QXR0cikgewotICAgICAgICBpZiAoZGVwcmVjYXRl
ZElucHV0VHlwZSgpID09IFJBTkdFKSB7Ci0gICAgICAgICAgICAvLyBTYW5pdGl6ZSB0aGUgdmFs
dWUuCi0gICAgICAgICAgICBzZXRWYWx1ZSh2YWx1ZSgpKTsKLSAgICAgICAgICAgIHNldE5lZWRz
U3R5bGVSZWNhbGMoKTsKLSAgICAgICAgfQorICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBt
aW5BdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBtYXhBdHRyKSB7CisgICAgICAgIG1faW5wdXRUeXBl
LT5taW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQoKTsKICAgICAgICAgc2V0TmVlZHNWYWxpZGl0eUNo
ZWNrKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbXVsdGlwbGVBdHRyCi0gICAg
ICAgICAgICAgfHwgYXR0ci0+bmFtZSgpID09IHBhdHRlcm5BdHRyCi0gICAgICAgICAgICAgfHwg
YXR0ci0+bmFtZSgpID09IHByZWNpc2lvbkF0dHIKLSAgICAgICAgICAgICB8fCBhdHRyLT5uYW1l
KCkgPT0gc3RlcEF0dHIpCisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbXVsdGlwbGVB
dHRyIHx8IGF0dHItPm5hbWUoKSA9PSBwYXR0ZXJuQXR0ciB8fCBhdHRyLT5uYW1lKCkgPT0gcHJl
Y2lzaW9uQXR0ciB8fCBhdHRyLT5uYW1lKCkgPT0gc3RlcEF0dHIpCiAgICAgICAgIHNldE5lZWRz
VmFsaWRpdHlDaGVjaygpOwogI2lmIEVOQUJMRShEQVRBTElTVCkKICAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gbGlzdEF0dHIpCkBAIC03ODUsMTEgKzY1OSw5IEBAIHZvaWQgSFRNTElucHV0
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi1ib29sIEhUTUxJbnB1dEVs
ZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKQorYm9vbCBIVE1MSW5w
dXRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKLSAgICBp
ZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IEhJRERFTikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpyZW5kZXJlcklz
TmVlZGVkKHN0eWxlKTsKKyAgICByZXR1cm4gbV9pbnB1dFR5cGUtPnJlbmRlcmVySXNOZWVkZWQo
KSAmJiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpyZW5kZXJlcklzTmVlZGVkKHN0
eWxlKTsKIH0KIAogUmVuZGVyT2JqZWN0KiBIVE1MSW5wdXRFbGVtZW50OjpjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkKQEAgLTc5OSwzMiArNjcx
LDEyIEBAIFJlbmRlck9iamVjdCogSFRNTElucHV0RWxlbWVudDo6Y3JlYXRlUmUKIAogdm9pZCBI
VE1MSW5wdXRFbGVtZW50OjphdHRhY2goKQogewotICAgIGlmICghbV9pbml0ZWQpIHsKLSAgICAg
ICAgaWYgKCFtX2hhdmVUeXBlKQotICAgICAgICAgICAgdXBkYXRlVHlwZSgpOwotICAgICAgICBt
X2luaXRlZCA9IHRydWU7Ci0gICAgfQorICAgIGlmICghbV9oYXNUeXBlKQorICAgICAgICB1cGRh
dGVUeXBlKCk7CiAKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjphdHRhY2go
KTsKIAotICAgIGlmIChkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gSU1BR0UpIHsKLSAgICAgICAg
aWYgKCFtX2ltYWdlTG9hZGVyKQotICAgICAgICAgICAgbV9pbWFnZUxvYWRlciA9IGFkb3B0UHRy
KG5ldyBIVE1MSW1hZ2VMb2FkZXIodGhpcykpOwotICAgICAgICBtX2ltYWdlTG9hZGVyLT51cGRh
dGVGcm9tRWxlbWVudCgpOwotICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiBtX2ltYWdlTG9hZGVy
LT5oYXZlRmlyZWRCZWZvcmVMb2FkRXZlbnQoKSkgewotICAgICAgICAgICAgUmVuZGVySW1hZ2Uq
IHJlbmRlckltYWdlID0gdG9SZW5kZXJJbWFnZShyZW5kZXJlcigpKTsKLSAgICAgICAgICAgIFJl
bmRlckltYWdlUmVzb3VyY2UqIHJlbmRlckltYWdlUmVzb3VyY2UgPSByZW5kZXJJbWFnZS0+aW1h
Z2VSZXNvdXJjZSgpOwotICAgICAgICAgICAgcmVuZGVySW1hZ2VSZXNvdXJjZS0+c2V0Q2FjaGVk
SW1hZ2UobV9pbWFnZUxvYWRlci0+aW1hZ2UoKSk7IAotCi0gICAgICAgICAgICAvLyBJZiB3ZSBo
YXZlIG5vIGltYWdlIGF0IGFsbCBiZWNhdXNlIHdlIGhhdmUgbm8gc3JjIGF0dHJpYnV0ZSwgc2V0
Ci0gICAgICAgICAgICAvLyBpbWFnZSBoZWlnaHQgYW5kIHdpZHRoIGZvciB0aGUgYWx0IHRleHQg
aW5zdGVhZC4KLSAgICAgICAgICAgIGlmICghbV9pbWFnZUxvYWRlci0+aW1hZ2UoKSAmJiAhcmVu
ZGVySW1hZ2VSZXNvdXJjZS0+Y2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICByZW5kZXJJ
bWFnZS0+c2V0SW1hZ2VTaXplRm9yQWx0VGV4dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBSQURJTykKLSAgICAgICAgdXBkYXRlQ2hlY2tl
ZFJhZGlvQnV0dG9ucygpOworICAgIG1faW5wdXRUeXBlLT5hdHRhY2goKTsKIAogICAgIGlmIChk
b2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IHRoaXMpCiAgICAgICAgIGRvY3VtZW50KCktPnVw
ZGF0ZUZvY3VzQXBwZWFyYW5jZVNvb24odHJ1ZSAvKiByZXN0b3JlIHNlbGVjdGlvbiAqLyk7CkBA
IC04NDEsNyArNjkzLDcgQEAgU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OmFsdFRleHQoKSBjb25z
dAogICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzE5OTgvUkVDLWh0bWw0MC0xOTk4MDQyNC9h
cHBlbmRpeC9ub3Rlcy5odG1sI2FsdGdlbgogICAgIC8vIGFsc28gaGVhdmlseSBkaXNjdXNzZWQg
YnkgSGl4aWUgb24gYnVnemlsbGEKICAgICAvLyBub3RlIHRoaXMgaXMgaW50ZW50aW9uYWxseSBk
aWZmZXJlbnQgdG8gSFRNTEltYWdlRWxlbWVudDo6YWx0VGV4dCgpCi0gICAgU3RyaW5nIGFsdCA9
IGdldEF0dHJpYnV0ZShhbHRBdHRyKTsKKyAgICBTdHJpbmcgYWx0ID0gZmFzdEdldEF0dHJpYnV0
ZShhbHRBdHRyKTsKICAgICAvLyBmYWxsIGJhY2sgdG8gdGl0bGUgYXR0cmlidXRlCiAgICAgaWYg
KGFsdC5pc051bGwoKSkKICAgICAgICAgYWx0ID0gZ2V0QXR0cmlidXRlKHRpdGxlQXR0cik7CkBA
IC04NTUsMTggKzcwNywxOCBAQCBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6YWx0VGV4dCgpIGNv
bnN0CiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpIGNv
bnN0CiB7CiAgICAgLy8gSFRNTCBzcGVjIHNheXMgdGhhdCBidXR0b25zIG11c3QgaGF2ZSBuYW1l
cyB0byBiZSBjb25zaWRlcmVkIHN1Y2Nlc3NmdWwuCi0gICAgLy8gSG93ZXZlciwgb3RoZXIgYnJv
d3NlcnMgZG8gbm90IGltcG9zZSB0aGlzIGNvbnN0cmFpbnQuIFNvIHdlIGRvIGxpa2V3aXNlLgot
ICAgIHJldHVybiAhZGlzYWJsZWQoKSAmJiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IElNQUdF
IHx8IGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBTVUJNSVQpOworICAgIC8vIEhvd2V2ZXIsIG90
aGVyIGJyb3dzZXJzIGRvIG5vdCBpbXBvc2UgdGhpcyBjb25zdHJhaW50LiBTbyB3ZSBkbyBub3Qu
CisgICAgcmV0dXJuICFkaXNhYmxlZCgpICYmIG1faW5wdXRUeXBlLT5jYW5CZVN1Y2Nlc3NmdWxT
dWJtaXRCdXR0b24oKTsKIH0KIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc0FjdGl2YXRlZFN1
Ym1pdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYWN0aXZlU3VibWl0OworICAgIHJldHVybiBt
X2lzQWN0aXZhdGVkU3VibWl0OwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEFjdGl2
YXRlZFN1Ym1pdChib29sIGZsYWcpCiB7Ci0gICAgbV9hY3RpdmVTdWJtaXQgPSBmbGFnOworICAg
IG1faXNBY3RpdmF0ZWRTdWJtaXQgPSBmbGFnOwogfQogCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6
OmFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYgZW5jb2RpbmcsIGJvb2wgbXVsdGlwYXJ0KQpA
QCAtODc2LDExICs3MjgsMTEgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50OjphcHBlbmRGb3JtRGF0
YShGbwogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnJlc2V0KCkKIHsKLSAgICBpZiAoc3RvcmVz
VmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKSkKKyAgICBpZiAobV9pbnB1dFR5cGUtPnN0b3Jl
c1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCkpCiAgICAgICAgIHNldFZhbHVlKFN0cmluZygp
KTsKIAotICAgIHNldENoZWNrZWQobV9kZWZhdWx0Q2hlY2tlZCk7Ci0gICAgbV91c2VEZWZhdWx0
Q2hlY2tlZCA9IHRydWU7CisgICAgc2V0Q2hlY2tlZChoYXNBdHRyaWJ1dGUoY2hlY2tlZEF0dHIp
KTsKKyAgICBtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0ZSA9IHRydWU7CiB9CiAKIGJvb2wgSFRN
TElucHV0RWxlbWVudDo6aXNUZXh0RmllbGQoKSBjb25zdApAQCAtOTAwLDggKzc1Miw4IEBAIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6c2V0Q2hlY2tlZChib29sIG4KIAogICAgIGNoZWNrZWRSYWRp
b0J1dHRvbnMoKS5yZW1vdmVCdXR0b24odGhpcyk7CiAKLSAgICBtX3VzZURlZmF1bHRDaGVja2Vk
ID0gZmFsc2U7Ci0gICAgbV9jaGVja2VkID0gbm93Q2hlY2tlZDsKKyAgICBtX3JlZmxlY3RzQ2hl
Y2tlZEF0dHJpYnV0ZSA9IGZhbHNlOworICAgIG1faXNDaGVja2VkID0gbm93Q2hlY2tlZDsKICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKICAgICB1cGRhdGVDaGVja2VkUmFkaW9CdXR0b25z
KCk7CkBAIC05MTcsMTcgKzc2OSwxNiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldENoZWNr
ZWQoYm9vbCBuCiAgICAgLy8gdW5jaGVja2VkIHRvIG1hdGNoIG90aGVyIGJyb3dzZXJzLiBET00g
aXMgbm90IGEgdXNlZnVsIHN0YW5kYXJkIGZvciB0aGlzCiAgICAgLy8gYmVjYXVzZSBpdCBzYXlz
IG9ubHkgdG8gZmlyZSBjaGFuZ2UgZXZlbnRzIGF0ICJsb3NlIGZvY3VzIiB0aW1lLCB3aGljaCBp
cwogICAgIC8vIGRlZmluaXRlbHkgd3JvbmcgaW4gcHJhY3RpY2UgZm9yIHRoZXNlIHR5cGVzIG9m
IGVsZW1lbnRzLgotICAgIGlmIChzZW5kQ2hhbmdlRXZlbnQgJiYgaW5Eb2N1bWVudCgpICYmIChk
ZXByZWNhdGVkSW5wdXRUeXBlKCkgIT0gUkFESU8gfHwgbm93Q2hlY2tlZCkpCisgICAgaWYgKHNl
bmRDaGFuZ2VFdmVudCAmJiBpbkRvY3VtZW50KCkgJiYgbV9pbnB1dFR5cGUtPnNob3VsZFNlbmRD
aGFuZ2VFdmVudEFmdGVyQ2hlY2tlZENoYW5nZWQoKSkKICAgICAgICAgZGlzcGF0Y2hGb3JtQ29u
dHJvbENoYW5nZUV2ZW50KCk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0SW5kZXRl
cm1pbmF0ZShib29sIG5ld1ZhbHVlKQogewotICAgIC8vIE9ubHkgY2hlY2tib3hlcyBhbmQgcmFk
aW8gYnV0dG9ucyBob25vciBpbmRldGVybWluYXRlLgotICAgIGlmICghYWxsb3dzSW5kZXRlcm1p
bmF0ZSgpIHx8IGluZGV0ZXJtaW5hdGUoKSA9PSBuZXdWYWx1ZSkKKyAgICBpZiAoIW1faW5wdXRU
eXBlLT5pc0NoZWNrYWJsZSgpIHx8IGluZGV0ZXJtaW5hdGUoKSA9PSBuZXdWYWx1ZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9pbmRldGVybWluYXRlID0gbmV3VmFsdWU7CisgICAgbV9pc0lu
ZGV0ZXJtaW5hdGUgPSBuZXdWYWx1ZTsKIAogICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIApA
QCAtOTQ1LDg0ICs3OTYsMzcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpjb3B5Tm9uQXR0cmli
dXRlUAogICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqIHNvdXJjZUVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxjb25zdCBIVE1MSW5wdXRFbGVtZW50Kj4oc291cmNlKTsKIAogICAgIG1fZGF0YS5zZXRW
YWx1ZShzb3VyY2VFbGVtZW50LT5tX2RhdGEudmFsdWUoKSk7Ci0gICAgc2V0Q2hlY2tlZChzb3Vy
Y2VFbGVtZW50LT5tX2NoZWNrZWQpOwotICAgIG1fZGVmYXVsdENoZWNrZWQgPSBzb3VyY2VFbGVt
ZW50LT5tX2RlZmF1bHRDaGVja2VkOwotICAgIG1fdXNlRGVmYXVsdENoZWNrZWQgPSBzb3VyY2VF
bGVtZW50LT5tX3VzZURlZmF1bHRDaGVja2VkOwotICAgIG1faW5kZXRlcm1pbmF0ZSA9IHNvdXJj
ZUVsZW1lbnQtPm1faW5kZXRlcm1pbmF0ZTsKKyAgICBzZXRDaGVja2VkKHNvdXJjZUVsZW1lbnQt
Pm1faXNDaGVja2VkKTsKKyAgICBtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0ZSA9IHNvdXJjZUVs
ZW1lbnQtPm1fcmVmbGVjdHNDaGVja2VkQXR0cmlidXRlOworICAgIG1faXNJbmRldGVybWluYXRl
ID0gc291cmNlRWxlbWVudC0+bV9pc0luZGV0ZXJtaW5hdGU7CiAKICAgICBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlOjpjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGllcyhzb3VyY2UpOwog
fQogCiBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6dmFsdWUoKSBjb25zdAogewotICAgIGlmIChk
ZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gRklMRSkgewotICAgICAgICBpZiAoIW1fZmlsZUxpc3Qt
PmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gSFRNTDUgdGVsbHMgdXMgdGhhdCB3ZSdyZSBz
dXBwb3NlZCB0byB1c2UgdGhpcyBnb29meSB2YWx1ZSBmb3IKLSAgICAgICAgICAgIC8vIGZpbGUg
aW5wdXQgY29udHJvbHMuICBIaXN0b3JpY2FsbHksIGJyb3dzZXJzIHJldmVhbHMgdGhlIHJlYWwK
LSAgICAgICAgICAgIC8vIGZpbGUgcGF0aCwgYnV0IHRoYXQncyBhIHByaXZhY3kgcHJvYmxlbS4g
IENvZGUgb24gdGhlIHdlYgotICAgICAgICAgICAgLy8gZGVjaWRlZCB0byB0cnkgdG8gcGFyc2Ug
dGhlIHZhbHVlIGJ5IGxvb2tpbmcgZm9yIGJhY2tzbGFzaGVzCi0gICAgICAgICAgICAvLyAoYmVj
YXVzZSB0aGF0J3Mgd2hhdCBXaW5kb3dzIGZpbGUgcGF0aHMgdXNlKS4gIFRvIGJlIGNvbXBhdGli
bGUKLSAgICAgICAgICAgIC8vIHdpdGggdGhhdCBjb2RlLCB3ZSBtYWtlIHVwIGEgZmFrZSBwYXRo
IGZvciB0aGUgZmlsZS4KLSAgICAgICAgICAgIHJldHVybiAiQzpcXGZha2VwYXRoXFwiICsgbV9m
aWxlTGlzdC0+aXRlbSgwKS0+ZmlsZU5hbWUoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgfQorICAgIFN0cmluZyB2YWx1ZTsKKyAgICBpZiAobV9pbnB1dFR5cGUt
PmdldFR5cGVTcGVjaWZpY1ZhbHVlKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisg
ICAgdmFsdWUgPSBtX2RhdGEudmFsdWUoKTsKKyAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gdmFsdWU7CisKKyAgICB2YWx1ZSA9IHNhbml0aXplVmFsdWUoZmFzdEdldEF0
dHJpYnV0ZSh2YWx1ZUF0dHIpKTsKKyAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gdmFsdWU7CiAKLSAgICBTdHJpbmcgdmFsdWUgPSBtX2RhdGEudmFsdWUoKTsKLSAgICBp
ZiAodmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgdmFsdWUgPSBzYW5pdGl6ZVZhbHVlKGZhc3RH
ZXRBdHRyaWJ1dGUodmFsdWVBdHRyKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiBubyBhdHRy
aWJ1dGUgZXhpc3RzLCBleHRyYSBoYW5kbGluZyBtYXkgYmUgbmVjZXNzYXJ5LgotICAgICAgICAv
LyBGb3IgQ2hlY2tib3ggVHlwZXMganVzdCB1c2UgIm9uIiBvciAiIiBiYXNlZCBvZmYgdGhlIGNo
ZWNrZWQoKSBzdGF0ZSBvZiB0aGUgY29udHJvbC4KLSAgICAgICAgLy8gRm9yIGEgUmFuZ2UgSW5w
dXQgdXNlIHRoZSBjYWxjdWxhdGVkIGRlZmF1bHQgdmFsdWUuCi0gICAgICAgIGlmICh2YWx1ZS5p
c051bGwoKSkgewotICAgICAgICAgICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBDSEVD
S0JPWCB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gUkFESU8pCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGNoZWNrZWQoKSA/ICJvbiIgOiAiIjsKLSAgICAgICAgICAgIGlmIChkZXByZWNhdGVk
SW5wdXRUeXBlKCkgPT0gUkFOR0UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZUZv
ck51bWJlclR5cGUoU3RlcFJhbmdlKHRoaXMpLmRlZmF1bHRWYWx1ZSgpKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiB2YWx1ZTsKKyAgICByZXR1cm4gbV9pbnB1dFR5cGUtPmZhbGxi
YWNrVmFsdWUoKTsKIH0KIAogU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlV2l0aERlZmF1
bHQoKSBjb25zdAogewotICAgIFN0cmluZyB2ID0gdmFsdWUoKTsKLSAgICBpZiAodi5pc051bGwo
KSkgewotICAgICAgICBzd2l0Y2ggKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSkgewotICAgICAgICBj
YXNlIEJVVFRPTjoKLSAgICAgICAgY2FzZSBDSEVDS0JPWDoKLSAgICAgICAgY2FzZSBDT0xPUjoK
LSAgICAgICAgY2FzZSBEQVRFOgotICAgICAgICBjYXNlIERBVEVUSU1FOgotICAgICAgICBjYXNl
IERBVEVUSU1FTE9DQUw6Ci0gICAgICAgIGNhc2UgRU1BSUw6Ci0gICAgICAgIGNhc2UgRklMRToK
LSAgICAgICAgY2FzZSBISURERU46Ci0gICAgICAgIGNhc2UgSU1BR0U6Ci0gICAgICAgIGNhc2Ug
SVNJTkRFWDoKLSAgICAgICAgY2FzZSBNT05USDoKLSAgICAgICAgY2FzZSBOVU1CRVI6Ci0gICAg
ICAgIGNhc2UgUEFTU1dPUkQ6Ci0gICAgICAgIGNhc2UgUkFESU86Ci0gICAgICAgIGNhc2UgUkFO
R0U6Ci0gICAgICAgIGNhc2UgU0VBUkNIOgotICAgICAgICBjYXNlIFRFTEVQSE9ORToKLSAgICAg
ICAgY2FzZSBURVhUOgotICAgICAgICBjYXNlIFRJTUU6Ci0gICAgICAgIGNhc2UgVVJMOgotICAg
ICAgICBjYXNlIFdFRUs6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSRVNFVDoK
LSAgICAgICAgICAgIHYgPSByZXNldEJ1dHRvbkRlZmF1bHRMYWJlbCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgU1VCTUlUOgotICAgICAgICAgICAgdiA9IHN1Ym1pdEJ1dHRv
bkRlZmF1bHRMYWJlbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIHY7CisgICAgU3RyaW5nIHZhbHVlID0gdGhpcy0+dmFsdWUoKTsKKyAgICBpZiAo
IXZhbHVlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICByZXR1cm4gbV9p
bnB1dFR5cGUtPmRlZmF1bHRWYWx1ZSgpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNl
dFZhbHVlRm9yVXNlcihjb25zdCBTdHJpbmcmIHZhbHVlKQpAQCAtMTAzOCw3ICs4NDIsNyBAQCBj
b25zdCBTdHJpbmcmIEhUTUxJbnB1dEVsZW1lbnQ6OnN1Z2dlc3RlCiAKIHZvaWQgSFRNTElucHV0
RWxlbWVudDo6c2V0U3VnZ2VzdGVkVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBp
ZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpICE9IFRFWFQpCisgICAgaWYgKCFtX2lucHV0VHlwZS0+
Y2FuU2V0U3VnZ2VzdGVkVmFsdWUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHNldEZvcm1Db250
cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpOwogICAgIG1fZGF0YS5zZXRTdWdnZXN0ZWRW
YWx1ZShzYW5pdGl6ZVZhbHVlKHZhbHVlKSk7CkBAIC0xMDUwLDE2ICs4NTQsMTMgQEAgdm9pZCBI
VE1MSW5wdXRFbGVtZW50OjpzZXRTdWdnZXN0ZWRWYWx1ZQogCiB2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgc2VuZENoYW5nZUV2ZW50KQog
ewotICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25zLCB3ZSBkb24ndCBhbGxvdyBzZXR0aW5nIHRo
ZSBmaWxlbmFtZSwgYnV0IHdlIGRvIGFsbG93IGNsZWFyaW5nIGl0LgotICAgIC8vIFRoZSBIVE1M
NSBzcGVjIChhcyBvZiB0aGUgMTAvMjQvMDggd29ya2luZyBkcmFmdCkgc2F5cyB0aGF0IHRoZSB2
YWx1ZSBhdHRyaWJ1dGUgaXNuJ3QgYXBwbGljYWJsZSB0byB0aGUgZmlsZSB1cGxvYWQgY29udHJv
bAotICAgIC8vIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGJyZWFrIGV4aXN0aW5nIHdlYnNpdGVzLCB3
aG8gbWF5IGJlIHJlbHlpbmcgb24gdGhpcyBtZXRob2QgdG8gY2xlYXIgdGhpbmdzLgotICAgIGlm
IChkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gRklMRSAmJiAhdmFsdWUuaXNFbXB0eSgpKQorICAg
IGlmICghbV9pbnB1dFR5cGUtPmNhblNldFZhbHVlKHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7Ci0gICAgaWYg
KHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCkpIHsKLSAgICAgICAgaWYgKGRlcHJl
Y2F0ZWRJbnB1dFR5cGUoKSA9PSBGSUxFKQotICAgICAgICAgICAgbV9maWxlTGlzdC0+Y2xlYXIo
KTsKKyAgICBpZiAobV9pbnB1dFR5cGUtPnN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRl
KCkpIHsKKyAgICAgICAgaWYgKGZpbGVzKCkpCisgICAgICAgICAgICBmaWxlcygpLT5jbGVhcigp
OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1fZGF0YS5zZXRWYWx1ZShzYW5pdGl6ZVZh
bHVlKHZhbHVlKSk7CiAgICAgICAgICAgICBpZiAoaXNUZXh0RmllbGQoKSkKQEAgLTExMTQsNyAr
OTE1LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUFzTnVtYmVyKAogCiBTdHJp
bmcgSFRNTElucHV0RWxlbWVudDo6cGxhY2Vob2xkZXIoKSBjb25zdAogewotICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUocGxhY2Vob2xkZXJBdHRyKS5zdHJpbmcoKTsKKyAgICByZXR1cm4gZmFzdEdl
dEF0dHJpYnV0ZShwbGFjZWhvbGRlckF0dHIpLnN0cmluZygpOwogfQogCiB2b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OnNldFBsYWNlaG9sZGVyKGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC0xMTMwLDcg
KzkzMSw4IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6c2VhcmNoRXZlbnRzU2hvdWwKIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKIHsKICAgICAvLyBGaWxlIHVwbG9hZCBjb250cm9scyB3aWxsIGFsd2F5cyB1c2Ugc2V0Rmls
ZUxpc3RGcm9tUmVuZGVyZXIuCi0gICAgQVNTRVJUKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSAhPSBG
SUxFKTsKKyAgICBBU1NFUlQoIWlzRmlsZVVwbG9hZCgpKTsKKwogICAgIG1fZGF0YS5zZXRTdWdn
ZXN0ZWRWYWx1ZShTdHJpbmcoKSk7CiAgICAgSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5k
ZXJlcihtX2RhdGEsIHRoaXMsIHRoaXMsIHZhbHVlKTsKICAgICB1cGRhdGVQbGFjZWhvbGRlclZp
c2liaWxpdHkoZmFsc2UpOwpAQCAtMTE0MiwxNDggKzk0NCwyOSBAQCB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRlCiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0Rmls
ZUxpc3RGcm9tUmVuZGVyZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKQogewotICAgIG1f
ZmlsZUxpc3QtPmNsZWFyKCk7Ci0gICAgaW50IHNpemUgPSBwYXRocy5zaXplKCk7Ci0KLSNpZiBF
TkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKLSAgICAvLyBJZiBhIGRpcmVjdG9yeSBpcyBiZWluZyBz
ZWxlY3RlZCwgdGhlIFVJIGFsbG93cyBhIGRpcmVjdG9yeSB0byBiZSBjaG9zZW4KLSAgICAvLyBh
bmQgdGhlIHBhdGhzIHByb3ZpZGVkIGhlcmUgc2hhcmUgYSByb290IGRpcmVjdG9yeSBzb21ld2hl
cmUgdXAgdGhlIHRyZWU7Ci0gICAgLy8gd2Ugd2FudCB0byBzdG9yZSBvbmx5IHRoZSByZWxhdGl2
ZSBwYXRocyBmcm9tIHRoYXQgcG9pbnQuCi0gICAgaWYgKHdlYmtpdGRpcmVjdG9yeSgpICYmIHNp
emUgPiAwKSB7Ci0gICAgICAgIFN0cmluZyByb290UGF0aCA9IGRpcmVjdG9yeU5hbWUocGF0aHNb
MF0pOwotICAgICAgICAvLyBGaW5kIHRoZSBjb21tb24gcm9vdCBwYXRoLgotICAgICAgICBmb3Ig
KGludCBpID0gMTsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgd2hpbGUgKCFwYXRoc1tp
XS5zdGFydHNXaXRoKHJvb3RQYXRoKSkKLSAgICAgICAgICAgICAgICByb290UGF0aCA9IGRpcmVj
dG9yeU5hbWUocm9vdFBhdGgpOwotICAgICAgICB9Ci0gICAgICAgIHJvb3RQYXRoID0gZGlyZWN0
b3J5TmFtZShyb290UGF0aCk7Ci0gICAgICAgIEFTU0VSVChyb290UGF0aC5sZW5ndGgoKSk7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAvLyBO
b3JtYWxpemUgYmFja3NsYXNoZXMgdG8gc2xhc2hlcyBiZWZvcmUgZXhwb3NpbmcgdGhlIHJlbGF0
aXZlIHBhdGggdG8gc2NyaXB0LgotICAgICAgICAgICAgU3RyaW5nIHJlbGF0aXZlUGF0aCA9IHBh
dGhzW2ldLnN1YnN0cmluZygxICsgcm9vdFBhdGgubGVuZ3RoKCkpLnJlcGxhY2UoJ1xcJywnLycp
OwotICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShyZWxhdGl2ZVBh
dGgsIHBhdGhzW2ldKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChG
aWxlOjpjcmVhdGUocGF0aHNbaV0pKTsKLSAgICB9Ci0jZWxzZQotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRl
KHBhdGhzW2ldKSk7Ci0jZW5kaWYKKyAgICBtX2lucHV0VHlwZS0+c2V0RmlsZUxpc3QocGF0aHMp
OwogCiAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcih0cnVlKTsKICAgICBJ
bnB1dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQodGhpcyk7CiAgICAgc2V0TmVlZHNW
YWxpZGl0eUNoZWNrKCk7CiB9CiAKLWJvb2wgSFRNTElucHV0RWxlbWVudDo6c3RvcmVzVmFsdWVT
ZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKSBjb25zdAordm9pZCogSFRNTElucHV0RWxlbWVudDo6cHJl
RGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewotICAgIHN3aXRjaCAoZGVwcmVj
YXRlZElucHV0VHlwZSgpKSB7Ci0gICAgY2FzZSBCVVRUT046Ci0gICAgY2FzZSBDSEVDS0JPWDoK
LSAgICBjYXNlIEhJRERFTjoKLSAgICBjYXNlIElNQUdFOgotICAgIGNhc2UgUkFESU86Ci0gICAg
Y2FzZSBSRVNFVDoKLSAgICBjYXNlIFNVQk1JVDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGNhc2UgQ09MT1I6Ci0gICAgY2FzZSBEQVRFOgotICAgIGNhc2UgREFURVRJTUU6Ci0gICAgY2Fz
ZSBEQVRFVElNRUxPQ0FMOgotICAgIGNhc2UgRU1BSUw6Ci0gICAgY2FzZSBGSUxFOgotICAgIGNh
c2UgSVNJTkRFWDoKLSAgICBjYXNlIE1PTlRIOgotICAgIGNhc2UgTlVNQkVSOgotICAgIGNhc2Ug
UEFTU1dPUkQ6Ci0gICAgY2FzZSBSQU5HRToKLSAgICBjYXNlIFNFQVJDSDoKLSAgICBjYXNlIFRF
TEVQSE9ORToKLSAgICBjYXNlIFRFWFQ6Ci0gICAgY2FzZSBUSU1FOgotICAgIGNhc2UgVVJMOgot
ICAgIGNhc2UgV0VFSzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotc3RydWN0IEV2ZW50SGFuZGxpbmdTdGF0ZSA6IEZhc3RBbGxvY0Jhc2Ugewot
ICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBtX2N1cnJSYWRpbzsKLSAgICBib29sIG1faW5k
ZXRlcm1pbmF0ZTsKLSAgICBib29sIG1fY2hlY2tlZDsKLSAgICAKLSAgICBFdmVudEhhbmRsaW5n
U3RhdGUoYm9vbCBpbmRldGVybWluYXRlLCBib29sIGNoZWNrZWQpCi0gICAgICAgIDogbV9pbmRl
dGVybWluYXRlKGluZGV0ZXJtaW5hdGUpCi0gICAgICAgICwgbV9jaGVja2VkKGNoZWNrZWQpIHsg
fQotfTsKLQotdm9pZCogSFRNTElucHV0RWxlbWVudDo6cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIo
RXZlbnQqIGV2dCkKLXsKLSAgICAvLyBwcmV2ZW50RGVmYXVsdCBvciAicmV0dXJuIGZhbHNlIiBh
cmUgdXNlZCB0byByZXZlcnNlIHRoZSBhdXRvbWF0aWMgY2hlY2tpbmcvc2VsZWN0aW9uIHdlIGRv
IGhlcmUuCi0gICAgLy8gVGhpcyByZXN1bHQgZ2l2ZXMgdXMgZW5vdWdoIGluZm8gdG8gcGVyZm9y
bSB0aGUgInVuZG8iIGluIHBvc3REaXNwYXRjaCBvZiB0aGUgYWN0aW9uIHdlIHRha2UgaGVyZS4K
LSAgICB2b2lkKiByZXN1bHQgPSAwOyAKLSAgICBpZiAoKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9
PSBDSEVDS0JPWCB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gUkFESU8pICYmIGV2dC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7Ci0gICAgICAgIE93blB0cjxFdmVudEhh
bmRsaW5nU3RhdGU+IHN0YXRlID0gYWRvcHRQdHIobmV3IEV2ZW50SGFuZGxpbmdTdGF0ZShpbmRl
dGVybWluYXRlKCksIGNoZWNrZWQoKSkpOwotICAgICAgICBpZiAoZGVwcmVjYXRlZElucHV0VHlw
ZSgpID09IENIRUNLQk9YKSB7Ci0gICAgICAgICAgICBpZiAoaW5kZXRlcm1pbmF0ZSgpKQotICAg
ICAgICAgICAgICAgIHNldEluZGV0ZXJtaW5hdGUoZmFsc2UpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHNldENoZWNrZWQoIWNoZWNrZWQoKSwgdHJ1ZSk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBGb3IgcmFkaW8gYnV0dG9ucywgc3RvcmUgdGhlIGN1cnJl
bnQgc2VsZWN0ZWQgcmFkaW8gb2JqZWN0LgotICAgICAgICAgICAgLy8gV2UgcmVhbGx5IHdhbnQg
cmFkaW8gZ3JvdXBzIHRvIGVuZCB1cCBpbiBzYW5lIHN0YXRlcywgaS5lLiwgdG8gaGF2ZSBzb21l
dGhpbmcgY2hlY2tlZC4KLSAgICAgICAgICAgIC8vIFRoZXJlZm9yZSBpZiBub3RoaW5nIGlzIGN1
cnJlbnRseSBzZWxlY3RlZCwgd2Ugd29uJ3QgYWxsb3cgdGhpcyBhY3Rpb24gdG8gYmUgInVuZG9u
ZSIsIHNpbmNlCi0gICAgICAgICAgICAvLyB3ZSB3YW50IHNvbWUgb2JqZWN0IGluIHRoZSByYWRp
byBncm91cCB0byBhY3R1YWxseSBnZXQgc2VsZWN0ZWQuCi0gICAgICAgICAgICBIVE1MSW5wdXRF
bGVtZW50KiBjdXJyUmFkaW8gPSBjaGVja2VkUmFkaW9CdXR0b25zKCkuY2hlY2tlZEJ1dHRvbkZv
ckdyb3VwKG5hbWUoKSk7Ci0gICAgICAgICAgICBpZiAoY3VyclJhZGlvKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gV2UgaGF2ZSBhIHJhZGlvIGJ1dHRvbiBzZWxlY3RlZCB0aGF0IGlzIG5vdCB1cy4g
IENhY2hlIGl0IGluIG91ciByZXN1bHQgZmllbGQgYW5kIHJlZiBpdCBzbwotICAgICAgICAgICAg
ICAgIC8vIHRoYXQgaXQgY2FuJ3QgYmUgZGVzdHJveWVkLgotICAgICAgICAgICAgICAgIHN0YXRl
LT5tX2N1cnJSYWRpbyA9IGN1cnJSYWRpbzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChpbmRldGVybWluYXRlKCkpCi0gICAgICAgICAgICAgICAgc2V0SW5kZXRlcm1pbmF0ZShmYWxz
ZSk7Ci0gICAgICAgICAgICBzZXRDaGVja2VkKHRydWUsIHRydWUpOwotICAgICAgICB9Ci0gICAg
ICAgIHJlc3VsdCA9IHN0YXRlLmxlYWtQdHIoKTsgLy8gRklYTUU6IENoZWNrIHdoZXRoZXIgdGhp
cyBhY3R1YWxseSBlbmRzIHVwIGxlYWtpbmcuCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpCisgICAgICAg
IHJldHVybiAwOworICAgIC8vIEZJWE1FOiBDaGVjayB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgY2Fz
ZXMgd2hlcmUgdGhpcyBhY3R1YWxseSBlbmRzIHVwIGxlYWtpbmcuCisgICAgcmV0dXJuIG1faW5w
dXRUeXBlLT53aWxsRGlzcGF0Y2hDbGljaygpLmxlYWtQdHIoKTsKIH0KIAotdm9pZCBIVE1MSW5w
dXRFbGVtZW50Ojpwb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQgKmV2dCwgdm9pZCogZGF0
YSkKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6cG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKEV2ZW50
KiBldmVudCwgdm9pZCogZGF0YUZyb21QcmVEaXNwYXRjaCkKIHsKLSAgICBpZiAoKGRlcHJlY2F0
ZWRJbnB1dFR5cGUoKSA9PSBDSEVDS0JPWCB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gUkFE
SU8pICYmIGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7Ci0gICAgICAg
IAotICAgICAgICBpZiAoRXZlbnRIYW5kbGluZ1N0YXRlKiBzdGF0ZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8RXZlbnRIYW5kbGluZ1N0YXRlKj4oZGF0YSkpIHsKLSAgICAgICAgICAgIGlmIChkZXByZWNh
dGVkSW5wdXRUeXBlKCkgPT0gQ0hFQ0tCT1gpIHsKLSAgICAgICAgICAgICAgICAvLyBSZXZlcnNl
IHRoZSBjaGVja2luZyB3ZSBkaWQgaW4gcHJlRGlzcGF0Y2guCi0gICAgICAgICAgICAgICAgaWYg
KGV2dC0+ZGVmYXVsdFByZXZlbnRlZCgpIHx8IGV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkgewotICAg
ICAgICAgICAgICAgICAgICBzZXRJbmRldGVybWluYXRlKHN0YXRlLT5tX2luZGV0ZXJtaW5hdGUp
OwotICAgICAgICAgICAgICAgICAgICBzZXRDaGVja2VkKHN0YXRlLT5tX2NoZWNrZWQpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0ZS0+bV9jdXJyUmFkaW8uZ2V0KCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGV2dC0+ZGVmYXVsdFByZXZlbnRlZCgpIHx8IGV2dC0+ZGVmYXVsdEhhbmRs
ZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBzZWxl
Y3RlZCByYWRpbyBidXR0b24gaWYgcG9zc2libGUuCi0gICAgICAgICAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSBpdCBpcyBzdGlsbCBhIHJhZGlvIGJ1dHRvbiBhbmQgb25seSBkbyB0aGUgcmVzdG9y
YXRpb24gaWYgaXQgc3RpbGwKLSAgICAgICAgICAgICAgICAgICAgLy8gYmVsb25ncyB0byBvdXIg
Z3JvdXAuCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5mb3JtKCkg
PT0gZm9ybSgpICYmIGlucHV0LT5kZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gUkFESU8gJiYgaW5w
dXQtPm5hbWUoKSA9PSBuYW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9rLCB0
aGUgb2xkIHJhZGlvIGJ1dHRvbiBpcyBzdGlsbCBpbiBvdXIgZm9ybSBhbmQgaW4gb3VyIGdyb3Vw
IGFuZCBpcyBzdGlsbCBhIAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmFkaW8gYnV0dG9u
LCBzbyBpdCdzIHNhZmUgdG8gcmVzdG9yZSBzZWxlY3Rpb24gdG8gaXQuCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpbnB1dC0+c2V0Q2hlY2tlZCh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBzZXRJbmRldGVybWluYXRlKHN0YXRlLT5tX2luZGV0ZXJt
aW5hdGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRl
bGV0ZSBzdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIExlZnQgY2xpY2tzIG9uIHJhZGlv
IGJ1dHRvbnMgYW5kIGNoZWNrIGJveGVzIGFscmVhZHkgcGVyZm9ybWVkIGRlZmF1bHQgYWN0aW9u
cyBpbiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlcigpLiAKLSAgICAgICAgZXZ0LT5zZXREZWZhdWx0
SGFuZGxlZCgpOwotICAgIH0KKyAgICBPd25QdHI8Q2xpY2tIYW5kbGluZ1N0YXRlPiBzdGF0ZSA9
IGFkb3B0UHRyKHN0YXRpY19jYXN0PENsaWNrSGFuZGxpbmdTdGF0ZSo+KGRhdGFGcm9tUHJlRGlz
cGF0Y2gpKTsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkuY2xpY2tFdmVu
dCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2lucHV0VHlwZS0+ZGlkRGlzcGF0Y2hDbGljayhldmVudCwgKnN0YXRlKTsKIH0KIAogdm9p
ZCBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCkBAIC0x
Mzc5LDcgKzEwNjIsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0
CiAKIFN0cmluZyBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0VmFsdWUoKSBjb25zdAogewotICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUodmFsdWVBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJp
YnV0ZSh2YWx1ZUF0dHIpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldERlZmF1bHRW
YWx1ZShjb25zdCBTdHJpbmcgJnZhbHVlKQpAQCAtMTM4NywxMSArMTA3MCw2IEBAIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6c2V0RGVmYXVsdFZhbHVlKGMKICAgICBzZXRBdHRyaWJ1dGUodmFsdWVB
dHRyLCB2YWx1ZSk7CiB9CiAKLWJvb2wgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdENoZWNrZWQo
KSBjb25zdAotewotICAgIHJldHVybiBmYXN0SGFzQXR0cmlidXRlKGNoZWNrZWRBdHRyKTsKLX0K
LQogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXREZWZhdWx0TmFtZShjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUpCiB7CiAgICAgbV9kYXRhLnNldE5hbWUobmFtZSk7CkBAIC0xMzk5LDEyICsxMDc3
LDEyIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0RGVmYXVsdE5hbWUoY28KIAogU3RyaW5n
IEhUTUxJbnB1dEVsZW1lbnQ6OmFjY2VwdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJp
YnV0ZShhY2NlcHRBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShhY2NlcHRBdHRy
KTsKIH0KIAogU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OmFsdCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShhbHRBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShh
bHRBdHRyKTsKIH0KIAogaW50IEhUTUxJbnB1dEVsZW1lbnQ6Om1heExlbmd0aCgpIGNvbnN0CkBA
IC0xNDI1LDEzICsxMTAzLDYgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50OjptdWx0aXBsZSgpIGNv
bnN0CiAgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUobXVsdGlwbGVBdHRyKTsKIH0KIAotI2lm
IEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQotYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojp3ZWJraXRk
aXJlY3RvcnkoKSBjb25zdAotewotICAgIHJldHVybiBmYXN0SGFzQXR0cmlidXRlKHdlYmtpdGRp
cmVjdG9yeUF0dHIpOwotfQotI2VuZGlmCi0KIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0U2l6
ZSh1bnNpZ25lZCBzaXplKQogewogICAgIHNldEF0dHJpYnV0ZShzaXplQXR0ciwgU3RyaW5nOjpu
dW1iZXIoc2l6ZSkpOwpAQCAtMTQzOSw1MiArMTExMCwzNiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnNldFNpemUodW5zaWduZWQgCiAKIEtVUkwgSFRNTElucHV0RWxlbWVudDo6c3JjKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKHNy
Y0F0dHIpKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZmFzdEdldEF0dHJp
YnV0ZShzcmNBdHRyKSk7CiB9CiAKLXZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0QXV0b2ZpbGxl
ZChib29sIGIpCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEF1dG9maWxsZWQoYm9vbCBhdXRv
ZmlsbGVkKQogewotICAgIGlmIChiID09IG1fYXV0b2ZpbGxlZCkKKyAgICBpZiAoYXV0b2ZpbGxl
ZCA9PSBtX2lzQXV0b2ZpbGxlZCkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBtX2F1
dG9maWxsZWQgPSBiOworICAgIG1faXNBdXRvZmlsbGVkID0gYXV0b2ZpbGxlZDsKICAgICBzZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7CiB9CiAKIEZpbGVMaXN0KiBIVE1MSW5wdXRFbGVtZW50OjpmaWxl
cygpCiB7Ci0gICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSAhPSBGSUxFKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gbV9maWxlTGlzdC5nZXQoKTsKKyAgICByZXR1cm4gbV9pbnB1
dFR5cGUtPmZpbGVzKCk7CiB9CiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNBY2NlcHRhYmxl
VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKSBjb25zdAogewotICAgIGlmIChkZXBy
ZWNhdGVkSW5wdXRUeXBlKCkgIT0gTlVNQkVSKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBy
ZXR1cm4gcHJvcG9zZWRWYWx1ZS5pc0VtcHR5KCkgfHwgcGFyc2VUb0RvdWJsZUZvck51bWJlclR5
cGUocHJvcG9zZWRWYWx1ZSwgMCk7CisgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5pc0FjY2VwdGFi
bGVWYWx1ZShwcm9wb3NlZFZhbHVlKTsKIH0KIAogU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OnNh
bml0aXplVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKSBjb25zdAogewotICAgIGlm
IChkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gTlVNQkVSKQotICAgICAgICByZXR1cm4gcGFyc2VU
b0RvdWJsZUZvck51bWJlclR5cGUocHJvcG9zZWRWYWx1ZSwgMCkgPyBwcm9wb3NlZFZhbHVlIDog
U3RyaW5nKCk7Ci0KLSAgICBpZiAoaXNUZXh0RmllbGQoKSkKLSAgICAgICAgcmV0dXJuIElucHV0
RWxlbWVudDo6c2FuaXRpemVWYWx1ZUZvclRleHRGaWVsZCh0aGlzLCBwcm9wb3NlZFZhbHVlKTsK
LQotICAgIC8vIElmIHRoZSBwcm9wb3NlZFZhbHVlIGlzIG51bGwgdGhhbiB0aGlzIGlzIGEgcmVz
ZXQgc2NlbmFyaW8gYW5kIHdlCi0gICAgLy8gd2FudCB0aGUgcmFuZ2UgaW5wdXQncyB2YWx1ZSBh
dHRyaWJ1dGUgdG8gdGFrZSBwcmlvcml0eSBvdmVyIHRoZQotICAgIC8vIGNhbGN1bGF0ZWQgZGVm
YXVsdCAobWlkZGxlKSB2YWx1ZS4KLSAgICBpZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IFJB
TkdFICYmICFwcm9wb3NlZFZhbHVlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gc2VyaWFsaXpl
Rm9yTnVtYmVyVHlwZShTdGVwUmFuZ2UodGhpcykuY2xhbXBWYWx1ZShwcm9wb3NlZFZhbHVlKSk7
Ci0KLSAgICByZXR1cm4gcHJvcG9zZWRWYWx1ZTsKKyAgICByZXR1cm4gbV9pbnB1dFR5cGUtPnNh
bml0aXplVmFsdWUocHJvcG9zZWRWYWx1ZSk7CiB9CiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6
aGFzVW5hY2NlcHRhYmxlVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiBkZXByZWNhdGVkSW5w
dXRUeXBlKCkgPT0gTlVNQkVSICYmIHJlbmRlcmVyKCkgJiYgIWlzQWNjZXB0YWJsZVZhbHVlKHRv
UmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnRleHQoKSk7CisgICAgcmV0dXJuIG1faW5w
dXRUeXBlLT5oYXNVbmFjY2VwdGFibGVWYWx1ZSgpOwogfQogCiBib29sIEhUTUxJbnB1dEVsZW1l
bnQ6OmlzSW5SYW5nZSgpIGNvbnN0CkBAIC0xNDk5LDcgKzExNTQsNyBAQCBib29sIEhUTUxJbnB1
dEVsZW1lbnQ6OmlzT3V0T2ZSYW5nZSgpIGNvCiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6bmVl
ZHNBY3RpdmF0aW9uQ2FsbGJhY2soKQogewotICAgIHJldHVybiBkZXByZWNhdGVkSW5wdXRUeXBl
KCkgPT0gUEFTU1dPUkQgfHwgbV9hdXRvY29tcGxldGUgPT0gT2ZmOworICAgIHJldHVybiBtX2F1
dG9jb21wbGV0ZSA9PSBPZmYgfHwgbV9pbnB1dFR5cGUtPnNob3VsZFJlc2V0T25Eb2N1bWVudEFj
dGl2YXRpb24oKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpyZWdpc3RlckZvckFjdGl2
YXRpb25DYWxsYmFja0lmTmVlZGVkKCkKQEAgLTE1NDgsMTUgKzEyMDMsMTQgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50Ojpkb2N1bWVudERpZEJlY29tZQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKIHsKLSAgICBpZiAobV9pbWFnZUxvYWRlcikK
LSAgICAgICAgbV9pbWFnZUxvYWRlci0+ZWxlbWVudFdpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50
KCk7CisgICAgbV9pbnB1dFR5cGUtPndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiAKICAg
ICAvLyBBbHdheXMgdW5yZWdpc3RlciBmb3IgY2FjaGUgY2FsbGJhY2tzIHdoZW4gbGVhdmluZyBh
IGRvY3VtZW50LCBldmVuIGlmIHdlIHdvdWxkIG90aGVyd2lzZSBsaWtlIHRvIGJlIHJlZ2lzdGVy
ZWQKICAgICBpZiAobmVlZHNBY3RpdmF0aW9uQ2FsbGJhY2soKSkKICAgICAgICAgZG9jdW1lbnQo
KS0+dW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsKICAgICAg
ICAgCiAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLnJlbW92ZUJ1dHRvbih0
aGlzKTsKLSAgICAKKwogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OndpbGxN
b3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiB9CiAKQEAgLTE1OTEsNTYgKzEyNDUsMzcgQEAgSFRN
TERhdGFMaXN0RWxlbWVudCogSFRNTElucHV0RWxlbWVudDo6ZAogICAgIGlmICghbV9oYXNOb25F
bXB0eUxpc3QpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgc3dpdGNoIChkZXByZWNhdGVkSW5w
dXRUeXBlKCkpIHsKLSAgICBjYXNlIENPTE9SOgotICAgIGNhc2UgREFURToKLSAgICBjYXNlIERB
VEVUSU1FOgotICAgIGNhc2UgREFURVRJTUVMT0NBTDoKLSAgICBjYXNlIEVNQUlMOgotICAgIGNh
c2UgTU9OVEg6Ci0gICAgY2FzZSBOVU1CRVI6Ci0gICAgY2FzZSBSQU5HRToKLSAgICBjYXNlIFNF
QVJDSDoKLSAgICBjYXNlIFRFTEVQSE9ORToKLSAgICBjYXNlIFRFWFQ6Ci0gICAgY2FzZSBUSU1F
OgotICAgIGNhc2UgVVJMOgotICAgIGNhc2UgV0VFSzogewotICAgICAgICBFbGVtZW50KiBlbGVt
ZW50ID0gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZ2V0QXR0cmlidXRlKGxpc3RBdHRyKSk7
Ci0gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoZGF0YWxpc3RUYWcp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxEYXRhTGlzdEVsZW1lbnQqPihl
bGVtZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQlVUVE9OOgotICAgIGNh
c2UgQ0hFQ0tCT1g6Ci0gICAgY2FzZSBGSUxFOgotICAgIGNhc2UgSElEREVOOgotICAgIGNhc2Ug
SU1BR0U6Ci0gICAgY2FzZSBJU0lOREVYOgotICAgIGNhc2UgUEFTU1dPUkQ6Ci0gICAgY2FzZSBS
QURJTzoKLSAgICBjYXNlIFJFU0VUOgotICAgIGNhc2UgU1VCTUlUOgotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX2lucHV0VHlwZS0+c2hvdWxkUmVzcGVj
dExpc3RBdHRyaWJ1dGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBFbGVtZW50KiBlbGVt
ZW50ID0gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZmFzdEdldEF0dHJpYnV0ZShsaXN0QXR0
cikpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFlbGVt
ZW50LT5oYXNUYWdOYW1lKGRhdGFsaXN0VGFnKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTERhdGFMaXN0RWxlbWVudCo+KGVsZW1lbnQpOwogfQogCiBI
VE1MT3B0aW9uRWxlbWVudCogSFRNTElucHV0RWxlbWVudDo6c2VsZWN0ZWRPcHRpb24oKSBjb25z
dAogewotICAgIFN0cmluZyBjdXJyZW50VmFsdWUgPSB2YWx1ZSgpOwotICAgIC8vIFRoZSBlbXB0
eSB2YWx1ZSBuZXZlciBtYXRjaGVzIHRvIGEgZGF0YWxpc3Qgb3B0aW9uIGJlY2F1c2UgaXQKKyAg
ICBTdHJpbmcgdmFsdWUgPSB0aGlzLT52YWx1ZSgpOworCisgICAgLy8gVGhlIGVtcHR5IHN0cmlu
ZyBuZXZlciBtYXRjaGVzIHRvIGEgZGF0YWxpc3Qgb3B0aW9uIGJlY2F1c2UgaXQKICAgICAvLyBk
b2Vzbid0IHJlcHJlc2VudCBhIHN1Z2dlc3Rpb24gYWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4K
LSAgICBpZiAoY3VycmVudFZhbHVlLmlzRW1wdHkoKSkKKyAgICBpZiAodmFsdWUuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQqIHNvdXJjZUVs
ZW1lbnQgPSBkYXRhTGlzdCgpOwogICAgIGlmICghc291cmNlRWxlbWVudCkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBvcHRpb25zID0gc291cmNlRWxlbWVu
dC0+b3B0aW9ucygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IG9wdGlvbnMgJiYgaSA8IG9w
dGlvbnMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICBpZiAoIW9wdGlvbnMpCisgICAgICAgIHJldHVy
biAwOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG9wdGlvbnMtPmxlbmd0aCgpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBIVE1MT3B0aW9uRWxl
bWVudCogb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihvcHRpb25zLT5p
dGVtKGkpKTsKLSAgICAgICAgaWYgKCFvcHRpb24tPmRpc2FibGVkKCkgJiYgY3VycmVudFZhbHVl
ID09IG9wdGlvbi0+dmFsdWUoKSkKKyAgICAgICAgaWYgKCFvcHRpb24tPmRpc2FibGVkKCkgJiYg
dmFsdWUgPT0gb3B0aW9uLT52YWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjsKICAg
ICB9CiAgICAgcmV0dXJuIDA7CkBAIC0xNjk3LDcgKzEzMzIsNyBAQCB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OnN0ZXBVcEZyb21SZW5kZXJlCiAgICAgLy8gVGhlIHZhbHVlIHdpbGwgYmUgdGhlIGRl
ZmF1bHQgdmFsdWUgYWZ0ZXIgc3RlcHBpbmcgZm9yIDxpbnB1dCB2YWx1ZT0oZW1wdHkvaW52YWxp
ZCkgc3RlcD0iYW55IiAvPgogICAgIC8vIEZJWE1FOiBOb3QgYW55IGNoYW5nZXMgYWZ0ZXIgc3Rl
cHBpbmcsIGV2ZW4gaWYgaXQgaXMgYW4gaW52YWxpZCB2YWx1ZSwgbWF5IGJlIGJldHRlci4KICAg
ICAvLyAoZS5nLiBTdGVwcGluZy11cCBmb3IgPGlucHV0IHR5cGU9Im51bWJlciIgdmFsdWU9ImZv
byIgc3RlcD0iYW55IiAvPiA9PiAiZm9vIikKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0
QXR0cmlidXRlKHN0ZXBBdHRyKSwgImFueSIpKQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShm
YXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSwgImFueSIpKQogICAgICAgICBzdGVwID0gMDsKICAg
ICBlbHNlIGlmICghZ2V0QWxsb3dlZFZhbHVlU3RlcFdpdGhEZWNpbWFsUGxhY2VzKCZzdGVwLCAm
c3RlcERlY2ltYWxQbGFjZXMpKQogICAgICAgICByZXR1cm47CkBAIC0xNzYyLDQ5ICsxMzk3LDEy
NiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnN0ZXBVcEZyb21SZW5kZXJlCiB9CiAKICNpZiBF
TkFCTEUoV0NTUykKKwogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRXYXBJbnB1dEZvcm1hdChT
dHJpbmcmIG1hc2spCiB7CiAgICAgU3RyaW5nIHZhbGlkYXRlTWFzayA9IHZhbGlkYXRlSW5wdXRN
YXNrKG1fZGF0YSwgbWFzayk7CiAgICAgaWYgKCF2YWxpZGF0ZU1hc2suaXNFbXB0eSgpKQogICAg
ICAgICBtX2RhdGEuc2V0SW5wdXRGb3JtYXRNYXNrKHZhbGlkYXRlTWFzayk7CiB9CisKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKKwogYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojpp
c1NwZWVjaEVuYWJsZWQoKSBjb25zdAogewotICAgIHN3aXRjaCAoZGVwcmVjYXRlZElucHV0VHlw
ZSgpKSB7CiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBSQU5HRSwgRU1BSUwsIFVSTCwg
Q09MT1IgYW5kIERBVEUvVElNRSBpbnB1dCB0eXBlcy4KLSAgICBjYXNlIE5VTUJFUjoKLSAgICBj
YXNlIFBBU1NXT1JEOgotICAgIGNhc2UgU0VBUkNIOgotICAgIGNhc2UgVEVMRVBIT05FOgotICAg
IGNhc2UgVEVYVDoKLSAgICAgICAgcmV0dXJuIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNwZWVj
aElucHV0RW5hYmxlZCgpICYmIGhhc0F0dHJpYnV0ZSh3ZWJraXRzcGVlY2hBdHRyKTsKLSAgICBj
YXNlIEJVVFRPTjoKLSAgICBjYXNlIENIRUNLQk9YOgotICAgIGNhc2UgQ09MT1I6Ci0gICAgY2Fz
ZSBEQVRFOgotICAgIGNhc2UgREFURVRJTUU6Ci0gICAgY2FzZSBEQVRFVElNRUxPQ0FMOgotICAg
IGNhc2UgRU1BSUw6Ci0gICAgY2FzZSBGSUxFOgotICAgIGNhc2UgSElEREVOOgotICAgIGNhc2Ug
SU1BR0U6Ci0gICAgY2FzZSBJU0lOREVYOgotICAgIGNhc2UgTU9OVEg6Ci0gICAgY2FzZSBSQURJ
TzoKLSAgICBjYXNlIFJBTkdFOgotICAgIGNhc2UgUkVTRVQ6Ci0gICAgY2FzZSBTVUJNSVQ6Ci0g
ICAgY2FzZSBUSU1FOgotICAgIGNhc2UgVVJMOgotICAgIGNhc2UgV0VFSzoKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1faW5wdXRU
eXBlLT5zaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKCkgJiYgUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c3BlZWNoSW5wdXRFbmFibGVkKCkgJiYgaGFzQXR0cmlidXRlKHdlYmtpdHNwZWVjaEF0
dHIpOwogfQogCiAjZW5kaWYKIAorYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc1RleHRCdXR0b24o
KSBjb25zdAoreworICAgIHJldHVybiBtX2lucHV0VHlwZS0+aXNUZXh0QnV0dG9uKCk7Cit9CisK
K2Jvb2wgSFRNTElucHV0RWxlbWVudDo6aXNSYWRpb0J1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1faW5wdXRUeXBlLT5pc1JhZGlvQnV0dG9uKCk7Cit9CisKK2Jvb2wgSFRNTElucHV0RWxl
bWVudDo6aXNTZWFyY2hGaWVsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5p
c1NlYXJjaEZpZWxkKCk7Cit9CisKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6aXNJbnB1dFR5cGVI
aWRkZW4oKSBjb25zdAoreworICAgIHJldHVybiBtX2lucHV0VHlwZS0+aXNIaWRkZW5UeXBlKCk7
Cit9CisKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6aXNQYXNzd29yZEZpZWxkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9pbnB1dFR5cGUtPmlzUGFzc3dvcmRGaWVsZCgpOworfQorCitib29sIEhU
TUxJbnB1dEVsZW1lbnQ6OmlzQ2hlY2tib3goKSBjb25zdAoreworICAgIHJldHVybiBtX2lucHV0
VHlwZS0+aXNDaGVja2JveCgpOworfQorCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzVGV4dCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5pc1RleHRUeXBlKCk7Cit9CisKK2Jv
b2wgSFRNTElucHV0RWxlbWVudDo6aXNFbWFpbEZpZWxkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9pbnB1dFR5cGUtPmlzRW1haWxGaWVsZCgpOworfQorCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6
OmlzRmlsZVVwbG9hZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5pc0ZpbGVV
cGxvYWQoKTsKK30KKworYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc0ltYWdlQnV0dG9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9pbnB1dFR5cGUtPmlzSW1hZ2VCdXR0b24oKTsKK30KKworYm9v
bCBIVE1MSW5wdXRFbGVtZW50Ojppc051bWJlckZpZWxkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9pbnB1dFR5cGUtPmlzTnVtYmVyRmllbGQoKTsKK30KKworYm9vbCBIVE1MSW5wdXRFbGVtZW50
Ojppc1N1Ym1pdEJ1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5pc1N1
Ym1pdEJ1dHRvbigpOworfQorCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzVGVsZXBob25lRmll
bGQoKSBjb25zdAoreworICAgIHJldHVybiBtX2lucHV0VHlwZS0+aXNUZWxlcGhvbmVGaWVsZCgp
OworfQorCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzVVJMRmllbGQoKSBjb25zdAoreworICAg
IHJldHVybiBtX2lucHV0VHlwZS0+aXNVUkxGaWVsZCgpOworfQorCitib29sIEhUTUxJbnB1dEVs
ZW1lbnQ6OmlzRW51bWVyYXRhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnB1dFR5cGUt
PmlzRW51bWVyYXRhYmxlKCk7Cit9CisKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6aXNDaGVja2Vk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2hlY2tlZCgpICYmIG1faW5wdXRUeXBlLT5pc0NoZWNr
YWJsZSgpOworfQorCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6Omhhc1NwaW5CdXR0b24oKSBjb25z
dAoreworICAgIHJldHVybiBtX2lucHV0VHlwZS0+aGFzU3BpbkJ1dHRvbigpOworfQorCitib29s
IEhUTUxJbnB1dEVsZW1lbnQ6OnN1cHBvcnRzUGxhY2Vob2xkZXIoKSBjb25zdAoreworICAgIHJl
dHVybiBpc1RleHRUeXBlKCk7Cit9CisKK0NoZWNrZWRSYWRpb0J1dHRvbnMmIEhUTUxJbnB1dEVs
ZW1lbnQ6OmNoZWNrZWRSYWRpb0J1dHRvbnMoKSBjb25zdAoreworICAgIGlmIChIVE1MRm9ybUVs
ZW1lbnQqIGZvcm1FbGVtZW50ID0gZm9ybSgpKQorICAgICAgICByZXR1cm4gZm9ybUVsZW1lbnQt
PmNoZWNrZWRSYWRpb0J1dHRvbnMoKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y2hlY2tlZFJh
ZGlvQnV0dG9ucygpOworfQorCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50KEV2ZW50KiBldmVudCkKK3sKKyAgICBJbnB1dEVsZW1lbnQ6OmhhbmRs
ZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KG1fZGF0YSwgdGhpcywgdGhpcywgZXZlbnQpOworfQor
CiB9IC8vIG5hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCShyZXZpc2lvbiA3
NDg1OCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDIxICsyNSwxNSBAQAogI2RlZmluZSBIVE1MSW5wdXRFbGVtZW50X2gKIAogI2luY2x1
ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQu
aCIKICNpbmNsdWRlICJJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbnB1dFR5cGUuaCIKLSNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRGF0
ZUNvbXBvbmVudHM7CiBjbGFzcyBGaWxlTGlzdDsKIGNsYXNzIEhUTUxEYXRhTGlzdEVsZW1lbnQ7
Ci1jbGFzcyBIVE1MSW1hZ2VMb2FkZXI7CiBjbGFzcyBIVE1MT3B0aW9uRWxlbWVudDsKIGNsYXNz
IElucHV0VHlwZTsKIGNsYXNzIEtVUkw7Ci1jbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCiBjbGFz
cyBIVE1MSW5wdXRFbGVtZW50IDogcHVibGljIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LCBw
dWJsaWMgSW5wdXRFbGVtZW50IHsKIHB1YmxpYzoKQEAgLTg0LDM4ICs3OCwzOCBAQCBwdWJsaWM6
CiAgICAgLy8gc3RlcFVwKCkvc3RlcERvd24oKSBmb3IgdXNlci1pbnRlcmFjdGlvbi4KICAgICB2
b2lkIHN0ZXBVcEZyb21SZW5kZXJlcihpbnQpOwogCi0gICAgYm9vbCBpc1RleHRCdXR0b24oKSBj
b25zdCB7IHJldHVybiBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gU1VCTUlUIHx8IGRlcHJlY2F0
ZWRJbnB1dFR5cGUoKSA9PSBSRVNFVCB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gQlVUVE9O
OyB9CisgICAgYm9vbCBpc1RleHRCdXR0b24oKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBp
c1JhZGlvQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZGVwcmVjYXRlZElucHV0VHlwZSgpID09IFJB
RElPOyB9CisgICAgdmlydHVhbCBib29sIGlzUmFkaW9CdXR0b24oKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTZWFyY2hG
aWVsZCgpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBTRUFSQ0g7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNJbnB1dFR5cGVIaWRkZW4oKSBjb25zdCB7IHJldHVybiBkZXBy
ZWNhdGVkSW5wdXRUeXBlKCkgPT0gSElEREVOOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUGFzc3dv
cmRGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBQQVNTV09S
RDsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrYm94KCkgY29uc3QgeyByZXR1cm4gZGVwcmVj
YXRlZElucHV0VHlwZSgpID09IENIRUNLQk9YOyB9CisgICAgdmlydHVhbCBib29sIGlzU2VhcmNo
RmllbGQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNJbnB1dFR5cGVIaWRkZW4oKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQYXNzd29yZEZpZWxkKCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGlzQ2hlY2tib3goKSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBJdCdzIGhpZ2hseSBs
aWtlbHkgdGhhdCBhbnkgY2FsbCBzaXRlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBzaG91bGQgaW5z
dGVhZAogICAgIC8vIGJlIHVzaW5nIGEgZGlmZmVyZW50IG9uZS4gTWFueSBpbnB1dCBlbGVtZW50
cyBiZWhhdmUgbGlrZSB0ZXh0IGZpZWxkcywgYW5kIGluIGFkZGl0aW9uCiAgICAgLy8gYW55IHVu
a25vd24gaW5wdXQgdHlwZSBpcyB0cmVhdGVkIGFzIHRleHQuIENvbnNpZGVyLCBmb3IgZXhhbXBs
ZSwgaXNUZXh0RmllbGQgb3IKICAgICAvLyBpc1RleHRGaWVsZCAmJiAhaXNQYXNzd29yZEZpZWxk
LgotICAgIGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gZGVwcmVjYXRlZElucHV0VHlwZSgp
ID09IFRFWFQ7IH0KKyAgICBib29sIGlzVGV4dCgpIGNvbnN0OwogCi0gICAgYm9vbCBpc0VtYWls
RmllbGQoKSBjb25zdCB7IHJldHVybiBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gRU1BSUw7IH0K
LSAgICBib29sIGlzRmlsZVVwbG9hZCgpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJbnB1dFR5
cGUoKSA9PSBGSUxFOyB9Ci0gICAgYm9vbCBpc0ltYWdlQnV0dG9uKCkgY29uc3QgeyByZXR1cm4g
ZGVwcmVjYXRlZElucHV0VHlwZSgpID09IElNQUdFOyB9Ci0gICAgYm9vbCBpc051bWJlckZpZWxk
KCkgY29uc3QgeyByZXR1cm4gZGVwcmVjYXRlZElucHV0VHlwZSgpID09IE5VTUJFUjsgfQotICAg
IGJvb2wgaXNTdWJtaXRCdXR0b24oKSBjb25zdCB7IHJldHVybiBkZXByZWNhdGVkSW5wdXRUeXBl
KCkgPT0gU1VCTUlUOyB9Ci0gICAgYm9vbCBpc1RlbGVwaG9uZUZpZWxkKCkgY29uc3QgeyByZXR1
cm4gZGVwcmVjYXRlZElucHV0VHlwZSgpID09IFRFTEVQSE9ORTsgfQotICAgIGJvb2wgaXNVUkxG
aWVsZCgpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBVUkw7IH0KKyAg
ICBib29sIGlzRW1haWxGaWVsZCgpIGNvbnN0OworICAgIGJvb2wgaXNGaWxlVXBsb2FkKCkgY29u
c3Q7CisgICAgYm9vbCBpc0ltYWdlQnV0dG9uKCkgY29uc3Q7CisgICAgYm9vbCBpc051bWJlckZp
ZWxkKCkgY29uc3Q7CisgICAgYm9vbCBpc1N1Ym1pdEJ1dHRvbigpIGNvbnN0OworICAgIGJvb2wg
aXNUZWxlcGhvbmVGaWVsZCgpIGNvbnN0OworICAgIGJvb2wgaXNVUkxGaWVsZCgpIGNvbnN0Owog
CiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICB2aXJ0dWFsIGJvb2wgaXNTcGVlY2hFbmFi
bGVkKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIGJvb2wgY2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fY2hlY2tlZDsgfQorICAgIGJvb2wgY2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDaGVj
a2VkOyB9CiAgICAgdm9pZCBzZXRDaGVja2VkKGJvb2wsIGJvb2wgc2VuZENoYW5nZUV2ZW50ID0g
ZmFsc2UpOwogCiAgICAgLy8gJ2luZGV0ZXJtaW5hdGUnIGlzIGEgc3RhdGUgaW5kZXBlbmRlbnQg
b2YgdGhlIGNoZWNrZWQgc3RhdGUgdGhhdCBjYXVzZXMgdGhlIGNvbnRyb2wgdG8gZHJhdyBpbiBh
IHdheSB0aGF0IGhpZGVzIHRoZSBhY3R1YWwgc3RhdGUuCi0gICAgYm9vbCBpbmRldGVybWluYXRl
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRldGVybWluYXRlOyB9CisgICAgYm9vbCBpbmRldGVybWlu
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luZGV0ZXJtaW5hdGU7IH0KICAgICB2b2lkIHNldElu
ZGV0ZXJtaW5hdGUoYm9vbCk7CiAKICAgICB2aXJ0dWFsIGludCBzaXplKCkgY29uc3Q7CkBAIC0x
NjUsOCArMTU5LDYgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGRlZmF1bHRWYWx1ZSgpIGNvbnN0
OwogICAgIHZvaWQgc2V0RGVmYXVsdFZhbHVlKGNvbnN0IFN0cmluZyYpOwotICAgIAotICAgIGJv
b2wgZGVmYXVsdENoZWNrZWQoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RGVmYXVsdE5hbWUoY29u
c3QgQXRvbWljU3RyaW5nJik7CiAKQEAgLTE4MiwxMiArMTc0LDggQEAgcHVibGljOgogCiAgICAg
Ym9vbCBtdWx0aXBsZSgpIGNvbnN0OwogCi0jaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCi0g
ICAgYm9vbCB3ZWJraXRkaXJlY3RvcnkoKSBjb25zdDsKLSNlbmRpZgotCi0gICAgdmlydHVhbCBi
b29sIGlzQXV0b2ZpbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b2ZpbGxlZDsgfQotICAgIHZv
aWQgc2V0QXV0b2ZpbGxlZChib29sIHZhbHVlID0gdHJ1ZSk7CisgICAgdmlydHVhbCBib29sIGlz
QXV0b2ZpbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBdXRvZmlsbGVkOyB9CisgICAgdm9pZCBz
ZXRBdXRvZmlsbGVkKGJvb2wgPSB0cnVlKTsKIAogICAgIEZpbGVMaXN0KiBmaWxlcygpOwogCkBA
IC0yMDMsNjAgKzE5MSwyNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXYXBJbnB1dEZvcm1hdChT
dHJpbmcmIG1hc2spOwogI2VuZGlmCiAKLSAgICBpbmxpbmUgQ2hlY2tlZFJhZGlvQnV0dG9ucyYg
Y2hlY2tlZFJhZGlvQnV0dG9ucygpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoSFRNTEZvcm1F
bGVtZW50KiBmb3JtRWxlbWVudCA9IGZvcm0oKSkKLSAgICAgICAgICAgIHJldHVybiBmb3JtRWxl
bWVudC0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpOwotICAgICAgICByZXR1cm4gZG9jdW1lbnQoKS0+
Y2hlY2tlZFJhZGlvQnV0dG9ucygpOwotICAgIH0KLQotICAgIHZvaWQgaGFuZGxlQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQoRXZlbnQqIGV2ZW50KTsKLQorICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBh
cmUgcHVibGljIHNvIHRoZXkgY2FuIGJlIHVzZWQgaW4gSW5wdXRUeXBlIGNsYXNzZXMuCisgICAg
Ly8gT3RoZXJ3aXNlLCB0aGV5IHdvdWxkIGJlIHByaXZhdGUuCisgICAgQ2hlY2tlZFJhZGlvQnV0
dG9ucyYgY2hlY2tlZFJhZGlvQnV0dG9ucygpIGNvbnN0OworICAgIHZvaWQgaGFuZGxlQmVmb3Jl
VGV4dEluc2VydGVkRXZlbnQoRXZlbnQqKTsKKyAgICB2b2lkIHVwZGF0ZUNoZWNrZWRSYWRpb0J1
dHRvbnMoKTsKKyAgICAKIHByb3RlY3RlZDoKICAgICBIVE1MSW5wdXRFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CiAKIHByaXZhdGU6Ci0gICAg
ZW51bSBEZXByZWNhdGVkSW5wdXRUeXBlIHsKLSAgICAgICAgVEVYVCA9IDAsIC8vIFRFWFQgbXVz
dCBiZSAwLgotICAgICAgICBQQVNTV09SRCwKLSAgICAgICAgSVNJTkRFWCwKLSAgICAgICAgQ0hF
Q0tCT1gsCi0gICAgICAgIFJBRElPLAotICAgICAgICBTVUJNSVQsCi0gICAgICAgIFJFU0VULAot
ICAgICAgICBGSUxFLAotICAgICAgICBISURERU4sCi0gICAgICAgIElNQUdFLAotICAgICAgICBC
VVRUT04sCi0gICAgICAgIFNFQVJDSCwKLSAgICAgICAgUkFOR0UsCi0gICAgICAgIEVNQUlMLAot
ICAgICAgICBOVU1CRVIsCi0gICAgICAgIFRFTEVQSE9ORSwKLSAgICAgICAgVVJMLAotICAgICAg
ICBDT0xPUiwKLSAgICAgICAgREFURSwKLSAgICAgICAgREFURVRJTUUsCi0gICAgICAgIERBVEVU
SU1FTE9DQUwsCi0gICAgICAgIE1PTlRILAotICAgICAgICBUSU1FLAotICAgICAgICBXRUVLLAot
ICAgIH07Ci0KICAgICBlbnVtIEF1dG9Db21wbGV0ZVNldHRpbmcgeyBVbmluaXRpYWxpemVkLCBP
biwgT2ZmIH07CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBIVE1MSW5wdXRFbGVtZW50
OjpEZXByZWNhdGVkSW5wdXRUeXBlLCBDYXNlRm9sZGluZ0hhc2g+IElucHV0VHlwZU1hcDsKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGVNYXA+IGNyZWF0ZVR5cGVNYXAoKTsKLSAgICBE
ZXByZWNhdGVkSW5wdXRUeXBlIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxEZXByZWNhdGVkSW5wdXRUeXBlPihtX2RlcHJlY2F0ZWRUeXBlTnVtYmVyKTsg
fQotCiAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiAgICAg
dmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0Vu
dW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSAhPSBJTUFH
RTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVGb2N1c0FwcGVhcmFuY2UoYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rp
b24pOwogICAgIHZpcnR1YWwgdm9pZCBhYm91dFRvVW5sb2FkKCk7CiAgICAgdmlydHVhbCBib29s
IHNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3Q7CkBAIC0yNjQsMTYgKzIxOCwxNCBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbE5hbWUoKSBj
b25zdDsKICAKICAgICAvLyBpc0NoZWNrZWQgaXMgdXNlZCBieSB0aGUgcmVuZGVyaW5nIHRyZWUv
Q1NTIHdoaWxlIGNoZWNrZWQoKSBpcyB1c2VkIGJ5IEpTIHRvIGRldGVybWluZSBjaGVja2VkIHN0
YXRlCi0gICAgdmlydHVhbCBib29sIGlzQ2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIGNoZWNrZWQo
KSAmJiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IENIRUNLQk9YIHx8IGRlcHJlY2F0ZWRJbnB1
dFR5cGUoKSA9PSBSQURJTyk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2VkKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIGlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV0
ZXJtaW5hdGUoKTsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRGb3JtQ29udHJvbCgp
IGNvbnN0IHsgcmV0dXJuIGlzVGV4dEZpZWxkKCk7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBoYXNT
cGluQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZGVwcmVjYXRlZElucHV0VHlwZSgpID09IE5VTUJF
UiB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gREFURSB8fCBkZXByZWNhdGVkSW5wdXRUeXBl
KCkgPT0gREFURVRJTUUgfHwgZGVwcmVjYXRlZElucHV0VHlwZSgpID09IERBVEVUSU1FTE9DQUwg
fHwgZGVwcmVjYXRlZElucHV0VHlwZSgpID09IE1PTlRIIHx8IGRlcHJlY2F0ZWRJbnB1dFR5cGUo
KSA9PSBUSU1FIHx8IGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBXRUVLOyB9CisgICAgdmlydHVh
bCBib29sIGhhc1NwaW5CdXR0b24oKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2FuVHJpZ2dl
ckltcGxpY2l0U3VibWlzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGlzVGV4dEZpZWxkKCk7IH0KIAot
ICAgIGJvb2wgYWxsb3dzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJ
bnB1dFR5cGUoKSA9PSBDSEVDS0JPWCB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gUkFESU87
IH0KLQogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBj
b25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBzZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNoZWQo
KSBjb25zdDsKQEAgLTI5Niw5ICsyNDgsNiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29s
IGlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpIGNvbnN0OwogCi0gICAgLy8gUmVwb3J0IGlmIHRo
aXMgaW5wdXQgdHlwZSB1c2VzIGhlaWdodCAmIHdpZHRoIGF0dHJpYnV0ZXMKLSAgICBib29sIHJl
c3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJzKCkgY29uc3QgeyByZXR1cm4gZGVwcmVjYXRlZElucHV0
VHlwZSgpID09IElNQUdFIHx8IGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBISURERU47IH0KLQog
ICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwogCiAgICAgdmlydHVhbCB2b2lkKiBwcmVEaXNwYXRj
aEV2ZW50SGFuZGxlcihFdmVudCopOwpAQCAtMzE5LDggKzI2OCw2IEBAIHByaXZhdGU6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtV
Ukw+JikgY29uc3Q7CiAKLSAgICBib29sIHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRl
KCkgY29uc3Q7Ci0KICAgICBib29sIG5lZWRzQWN0aXZhdGlvbkNhbGxiYWNrKCk7CiAgICAgdm9p
ZCByZWdpc3RlckZvckFjdGl2YXRpb25DYWxsYmFja0lmTmVlZGVkKCk7CiAgICAgdm9pZCB1bnJl
Z2lzdGVyRm9yQWN0aXZhdGlvbkNhbGxiYWNrSWZOZWVkZWQoKTsKQEAgLTMyOCw3ICsyNzUsNyBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01heExlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIGlzVGV4dFR5cGUoKTsgfQogICAgIGJvb2wgaXNUZXh0VHlwZSgpIGNvbnN0OwogCi0g
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzUGxhY2Vob2xkZXIoKSBjb25zdCB7IHJldHVybiBpc1Rl
eHRUeXBlKCkgfHwgZGVwcmVjYXRlZElucHV0VHlwZSgpID09IElTSU5ERVg7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNQbGFjZWhvbGRlcigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBp
c0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiB2YWx1ZSgpLmlzRW1wdHkoKTsgfQogICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVGb2N1c0V2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUJs
dXJFdmVudCgpOwpAQCAtMzQxLDggKzI4OCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0
ZVR5cGUoKTsKIAotICAgIHZvaWQgdXBkYXRlQ2hlY2tlZFJhZGlvQnV0dG9ucygpOwotICAgIAog
ICAgIC8vIEhlbHBlciBmb3Igc3RlcFVwKCkvc3RlcERvd24oKS4gIEFkZHMgc3RlcCB2YWx1ZSAq
IGNvdW50IHRvIHRoZSBjdXJyZW50IHZhbHVlLgogICAgIHZvaWQgYXBwbHlTdGVwKGRvdWJsZSBj
b3VudCwgRXhjZXB0aW9uQ29kZSYpOwogCkBAIC0zNTYsMjkgKzMwMSwxOSBAQCBwcml2YXRlOgog
CiAgICAgSW5wdXRFbGVtZW50RGF0YSBtX2RhdGE7CiAgICAgc2hvcnQgbV9tYXhSZXN1bHRzOwot
ICAgIE93blB0cjxIVE1MSW1hZ2VMb2FkZXI+IG1faW1hZ2VMb2FkZXI7Ci0gICAgUmVmUHRyPEZp
bGVMaXN0PiBtX2ZpbGVMaXN0OwotICAgIHVuc2lnbmVkIG1fZGVwcmVjYXRlZFR5cGVOdW1iZXIg
OiA1OyAvLyBEZXByZWNhdGVkSW5wdXRUeXBlIAotICAgIGJvb2wgbV9jaGVja2VkIDogMTsKLSAg
ICBib29sIG1fZGVmYXVsdENoZWNrZWQgOiAxOwotICAgIGJvb2wgbV91c2VEZWZhdWx0Q2hlY2tl
ZCA6IDE7Ci0gICAgYm9vbCBtX2luZGV0ZXJtaW5hdGUgOiAxOwotICAgIGJvb2wgbV9oYXZlVHlw
ZSA6IDE7Ci0gICAgYm9vbCBtX2FjdGl2ZVN1Ym1pdCA6IDE7CisgICAgYm9vbCBtX2lzQ2hlY2tl
ZCA6IDE7CisgICAgYm9vbCBtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0ZSA6IDE7CisgICAgYm9v
bCBtX2lzSW5kZXRlcm1pbmF0ZSA6IDE7CisgICAgYm9vbCBtX2hhc1R5cGUgOiAxOworICAgIGJv
b2wgbV9pc0FjdGl2YXRlZFN1Ym1pdCA6IDE7CiAgICAgdW5zaWduZWQgbV9hdXRvY29tcGxldGUg
OiAyOyAvLyBBdXRvQ29tcGxldGVTZXR0aW5nCi0gICAgYm9vbCBtX2F1dG9maWxsZWQgOiAxOwot
ICAgIGJvb2wgbV9pbml0ZWQgOiAxOworICAgIGJvb2wgbV9pc0F1dG9maWxsZWQgOiAxOwogI2lm
IEVOQUJMRShEQVRBTElTVCkKICAgICBib29sIG1faGFzTm9uRW1wdHlMaXN0IDogMTsKICNlbmRp
ZgogICAgIE93blB0cjxJbnB1dFR5cGU+IG1faW5wdXRUeXBlOwogfTsKIAotaW5saW5lIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoRXZlbnQqIGV2
ZW50KQotewotICAgIElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQo
bV9kYXRhLCB0aGlzLCB0aGlzLCBldmVudCk7Ci19Ci0KIH0gLy9uYW1lc3BhY2UKIAogI2VuZGlm
CkluZGV4OiBXZWJDb3JlL2h0bWwvSGlkZGVuSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSGlkZGVuSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4NTgpCisrKyBXZWJD
b3JlL2h0bWwvSGlkZGVuSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC01NSw0ICs1NiwyOCBA
QCBSZW5kZXJPYmplY3QqIEhpZGRlbklucHV0VHlwZTo6Y3JlYXRlUmVuCiAgICAgcmV0dXJuIDA7
CiB9CiAKK3ZvaWQgSGlkZGVuSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oYm9vbCkKK3sKK30K
KworYm9vbCBIaWRkZW5JbnB1dFR5cGU6OnJlbmRlcmVySXNOZWVkZWQoKQoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBIaWRkZW5JbnB1dFR5cGU6OnN0b3Jlc1ZhbHVlU2VwYXJhdGVG
cm9tQXR0cmlidXRlKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSGlkZGVuSW5w
dXRUeXBlOjppc0hpZGRlblR5cGUoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIEhpZGRlbklucHV0VHlwZTo6c2hvdWxkUmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0cmlidXRl
cygpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IaWRkZW5JbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSGlkZGVuSW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODU4KQorKysgV2ViQ29yZS9odG1s
L0hpZGRlbklucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMSBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNWYWxpZGF0aW9uKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVy
U3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wgc2Vu
ZFRvQW55RWxlbWVudCk7CisgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgc3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNIaWRkZW5UeXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3Vs
ZFJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJpYnV0ZXMoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4NTgpCisr
KyBXZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjMsNiArMjMsOCBA
QAogI2luY2x1ZGUgIkltYWdlSW5wdXRUeXBlLmgiCiAKICNpbmNsdWRlICJGb3JtRGF0YUxpc3Qu
aCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VMb2Fk
ZXIuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVu
dC5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCkBAIC0zMCw2ICszMiwxMSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2lubGluZSBJbWFnZUlucHV0VHlwZTo6SW1hZ2VJbnB1dFR5cGUo
SFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKKyAgICA6IEJhc2VCdXR0b25JbnB1dFR5cGUoZWxl
bWVudCkKK3sKK30KKwogUGFzc093blB0cjxJbnB1dFR5cGU+IEltYWdlSW5wdXRUeXBlOjpjcmVh
dGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEltYWdlSW5wdXRUeXBlKGVsZW1lbnQpKTsKQEAgLTg1LDQgKzkyLDY5IEBAIFJlbmRlck9iamVj
dCogSW1hZ2VJbnB1dFR5cGU6OmNyZWF0ZVJlbmQKICAgICByZXR1cm4gaW1hZ2U7CiB9CiAKK3Zv
aWQgSW1hZ2VJbnB1dFR5cGU6OnNyY0F0dHJpYnV0ZUNoYW5nZWQoKQoreworICAgIGlmICghZWxl
bWVudCgpLT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX2ltYWdlTG9h
ZGVyKQorICAgICAgICBtX2ltYWdlTG9hZGVyID0gYWRvcHRQdHIobmV3IEhUTUxJbWFnZUxvYWRl
cihlbGVtZW50KCkpKTsKKyAgICBtX2ltYWdlTG9hZGVyLT51cGRhdGVGcm9tRWxlbWVudElnbm9y
aW5nUHJldmlvdXNFcnJvcigpOworfQorCit2b2lkIEltYWdlSW5wdXRUeXBlOjphdHRhY2goKQor
eworICAgIEJhc2VCdXR0b25JbnB1dFR5cGU6OmF0dGFjaCgpOworCisgICAgaWYgKCFtX2ltYWdl
TG9hZGVyKQorICAgICAgICBtX2ltYWdlTG9hZGVyID0gYWRvcHRQdHIobmV3IEhUTUxJbWFnZUxv
YWRlcihlbGVtZW50KCkpKTsKKyAgICBtX2ltYWdlTG9hZGVyLT51cGRhdGVGcm9tRWxlbWVudCgp
OworCisgICAgUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZShlbGVtZW50KCkt
PnJlbmRlcmVyKCkpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbV9pbWFnZUxvYWRlci0+aGF2ZUZpcmVkQmVmb3JlTG9hZEV2ZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFJlbmRlckltYWdlUmVzb3VyY2UqIGltYWdlUmVzb3VyY2UgPSByZW5k
ZXJlci0+aW1hZ2VSZXNvdXJjZSgpOworICAgIGltYWdlUmVzb3VyY2UtPnNldENhY2hlZEltYWdl
KG1faW1hZ2VMb2FkZXItPmltYWdlKCkpOyAKKworICAgIC8vIElmIHdlIGhhdmUgbm8gaW1hZ2Ug
YXQgYWxsIGJlY2F1c2Ugd2UgaGF2ZSBubyBzcmMgYXR0cmlidXRlLCBzZXQKKyAgICAvLyBpbWFn
ZSBoZWlnaHQgYW5kIHdpZHRoIGZvciB0aGUgYWx0IHRleHQgaW5zdGVhZC4KKyAgICBpZiAoIW1f
aW1hZ2VMb2FkZXItPmltYWdlKCkgJiYgIWltYWdlUmVzb3VyY2UtPmNhY2hlZEltYWdlKCkpCisg
ICAgICAgIHJlbmRlcmVyLT5zZXRJbWFnZVNpemVGb3JBbHRUZXh0KCk7Cit9CisKK3ZvaWQgSW1h
Z2VJbnB1dFR5cGU6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKK3sKKyAgICBCYXNlQnV0
dG9uSW5wdXRUeXBlOjp3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOworICAgIGlmIChtX2lt
YWdlTG9hZGVyKQorICAgICAgICBtX2ltYWdlTG9hZGVyLT5lbGVtZW50V2lsbE1vdmVUb05ld093
bmVyRG9jdW1lbnQoKTsKK30KKworYm9vbCBJbWFnZUlucHV0VHlwZTo6c2hvdWxkUmVzcGVjdEFs
aWduQXR0cmlidXRlKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbWFnZUlucHV0
VHlwZTo6Y2FuQmVTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBJbWFnZUlucHV0VHlwZTo6aXNJbWFnZUJ1dHRvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW1hZ2VJbnB1dFR5cGU6OmlzRW51bWVyYXRhYmxlKCkK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW1hZ2VJbnB1dFR5cGU6OnNob3VsZFJl
c3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJpYnV0ZXMoKQoreworICAgIHJldHVybiB0cnVlOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuaAkocmV2aXNp
b24gNzQ4NTgpCisrKyBXZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC0zMywyNCArMzQsMzUgQEAKIAogI2luY2x1ZGUgIkJhc2VCdXR0b25JbnB1dFR5cGUuaCIKICNp
bmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBIVE1MSW1hZ2VMb2FkZXI7CisKIGNsYXNzIEltYWdlSW5wdXRU
eXBlIDogcHVibGljIEJhc2VCdXR0b25JbnB1dFR5cGUgewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzT3duUHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqKTsKIAogcHJpdmF0
ZToKLSAgICBJbWFnZUlucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KSA6IEJhc2VC
dXR0b25JbnB1dFR5cGUoZWxlbWVudCkgeyB9CisgICAgSW1hZ2VJbnB1dFR5cGUoSFRNTElucHV0
RWxlbWVudCopOwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5
cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtRGF0YUFwcGVuZGFibGUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVmFsaWRhdGlvbigpIGNvbnN0OwogICAg
IHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRl
clN0eWxlKikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZURPTUFjdGl2YXRlRXZlbnQo
RXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3JjQXR0cmlidXRlQ2hhbmdlZCgpOworICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVy
RG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVjdEFsaWduQXR0cmlidXRl
KCk7CisgICAgdmlydHVhbCBib29sIGNhbkJlU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpOworICAg
IHZpcnR1YWwgYm9vbCBpc0ltYWdlQnV0dG9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlz
RW51bWVyYXRhYmxlKCk7CisgICAgdmlydHVhbCBib29sIHNob3VsZFJlc3BlY3RIZWlnaHRBbmRX
aWR0aEF0dHJpYnV0ZXMoKTsKIAotICAgIC8vIFRoaXMgaXMgdmFsaWQgb25seSBkdXJpbmcgSFRN
TEZvcm1FbGVtZW50OjpwcmVwYXJlRm9yU3VibWlzc2lvbigpLgotICAgIEludFBvaW50IG1fY2xp
Y2tMb2NhdGlvbjsKKyAgICBPd25QdHI8SFRNTEltYWdlTG9hZGVyPiBtX2ltYWdlTG9hZGVyOwor
ICAgIEludFBvaW50IG1fY2xpY2tMb2NhdGlvbjsgLy8gVmFsaWQgb25seSBkdXJpbmcgSFRNTEZv
cm1FbGVtZW50OjpwcmVwYXJlRm9yU3VibWlzc2lvbigpLgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAJKHJldmlzaW9uIDc0ODU4KQorKysgV2ViQ29yZS9o
dG1sL0lucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkK
ICAqIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKICAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAt
MzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkVtYWlsSW5wdXRUeXBlLmgiCiAjaW5jbHVkZSAiRmls
ZUlucHV0VHlwZS5oIgogI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5oIgorI2luY2x1ZGUgIkhUTUxG
b3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJI
aWRkZW5JbnB1dFR5cGUuaCIKICNpbmNsdWRlICJJbWFnZUlucHV0VHlwZS5oIgpAQCAtNjgsNyAr
NjksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLXR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFBhc3NPd25QdHI8SW5wdXRUeXBlPiAoKikoSFRNTElucHV0
RWxlbWVudCopLCBDYXNlRm9sZGluZ0hhc2g+IElucHV0VHlwZUZhY3RvcnlNYXA7Cit0eXBlZGVm
IFBhc3NPd25QdHI8SW5wdXRUeXBlPiAoKklucHV0VHlwZUZhY3RvcnlGdW5jdGlvbikoSFRNTElu
cHV0RWxlbWVudCopOwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSW5wdXRUeXBlRmFjdG9yeUZ1
bmN0aW9uLCBDYXNlRm9sZGluZ0hhc2g+IElucHV0VHlwZUZhY3RvcnlNYXA7CisKIHN0YXRpYyBQ
YXNzT3duUHRyPElucHV0VHlwZUZhY3RvcnlNYXA+IGNyZWF0ZUlucHV0VHlwZUZhY3RvcnlNYXAo
KQogewogICAgIE93blB0cjxJbnB1dFR5cGVGYWN0b3J5TWFwPiBtYXAgPSBhZG9wdFB0cihuZXcg
SW5wdXRUeXBlRmFjdG9yeU1hcCk7CkBAIC05OSw3ICsxMDIsNyBAQCBzdGF0aWMgUGFzc093blB0
cjxJbnB1dFR5cGVGYWN0b3J5TWFwPiBjCiAgICAgcmV0dXJuIG1hcC5yZWxlYXNlKCk7CiB9CiAK
LVBhc3NPd25QdHI8SW5wdXRUeXBlPiBJbnB1dFR5cGU6OmNyZWF0ZShIVE1MSW5wdXRFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGVOYW1lKQorUGFzc093blB0cjxJbnB1
dFR5cGU+IElucHV0VHlwZTo6Y3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IFN0cmluZyYgdHlwZU5hbWUpCiB7CiAgICAgc3RhdGljIGNvbnN0IElucHV0VHlwZUZhY3RvcnlN
YXAqIGZhY3RvcnlNYXAgPSBjcmVhdGVJbnB1dFR5cGVGYWN0b3J5TWFwKCkubGVha1B0cigpOwog
ICAgIFBhc3NPd25QdHI8SW5wdXRUeXBlPiAoKmZhY3RvcnkpKEhUTUxJbnB1dEVsZW1lbnQqKSA9
IHR5cGVOYW1lLmlzRW1wdHkoKSA/IDAgOiBmYWN0b3J5TWFwLT5nZXQodHlwZU5hbWUpOwpAQCAt
Mjc3LDcgKzI4MCw3IEBAIGJvb2wgSW5wdXRUeXBlOjpwYXJzZWRTdGVwVmFsdWVTaG91bGRCZUkK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW5wdXRUeXBlOjpzY2FsZWRTdGVwVmFsZXVT
aG91bGRCZUludGVnZXIoKSBjb25zdAorYm9vbCBJbnB1dFR5cGU6OnNjYWxlZFN0ZXBWYWx1ZVNo
b3VsZEJlSW50ZWdlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMzc2LDYg
KzM3OSwyMzUgQEAgdm9pZCBJbnB1dFR5cGU6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2tJZgogICAg
IGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCitib29sIElucHV0VHlwZTo6Y2FuU2V0
U3RyaW5nVmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitib29sIElucHV0
VHlwZTo6aXNLZXlib2FyZEZvY3VzYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgSW5wdXRUeXBlOjpzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIElucHV0VHlwZTo6aGFuZGxlQmx1ckV2ZW50KCkKK3sK
K30KKwordm9pZCBJbnB1dFR5cGU6OmFjY2Vzc0tleUFjdGlvbihib29sKQoreworICAgIGVsZW1l
bnQoKS0+Zm9jdXMoZmFsc2UpOworfQorCit2b2lkIElucHV0VHlwZTo6YXR0YWNoKCkKK3sKK30K
Kwordm9pZCBJbnB1dFR5cGU6OnNyY0F0dHJpYnV0ZUNoYW5nZWQoKQoreworfQorCit2b2lkIElu
cHV0VHlwZTo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKQoreworfQorCitib29sIElucHV0
VHlwZTo6c2hvdWxkUmVzcGVjdEFsaWduQXR0cmlidXRlKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgSW5wdXRUeXBlOjpjYW5DaGFuZ2VGcm9tQW5vdGhlclR5cGUoKSBjb25zdAor
eworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIElucHV0VHlwZTo6bWluT3JNYXhBdHRyaWJ1
dGVDaGFuZ2VkKCkKK3sKK30KKworYm9vbCBJbnB1dFR5cGU6OmNhbkJlU3VjY2Vzc2Z1bFN1Ym1p
dEJ1dHRvbigpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElucHV0VHlwZTo6cmVu
ZGVyZXJJc05lZWRlZCgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0ZpbGVMaXN0KiBJbnB1
dFR5cGU6OmZpbGVzKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBJbnB1dFR5cGU6Omdl
dFR5cGVTcGVjaWZpY1ZhbHVlKFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitT
dHJpbmcgSW5wdXRUeXBlOjpmYWxsYmFja1ZhbHVlKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7
Cit9CisKK1N0cmluZyBJbnB1dFR5cGU6OmRlZmF1bHRWYWx1ZSgpCit7CisgICAgcmV0dXJuIFN0
cmluZygpOworfQorCitib29sIElucHV0VHlwZTo6Y2FuU2V0U3VnZ2VzdGVkVmFsdWUoKQorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OnNob3VsZFNlbmRDaGFuZ2VF
dmVudEFmdGVyQ2hlY2tlZENoYW5nZWQoKQoreworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IElucHV0VHlwZTo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKQoreworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIElucHV0VHlwZTo6Y2FuU2V0VmFsdWUoY29uc3QgU3RyaW5n
JikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc093blB0cjxDbGlja0hhbmRsaW5nU3Rh
dGU+IElucHV0VHlwZTo6d2lsbERpc3BhdGNoQ2xpY2soKQoreworICAgIHJldHVybiBQYXNzT3du
UHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4oKTsKK30KKwordm9pZCBJbnB1dFR5cGU6OmRpZERpc3Bh
dGNoQ2xpY2soRXZlbnQqLCBjb25zdCBDbGlja0hhbmRsaW5nU3RhdGUmKQoreworfQorCitib29s
IElucHV0VHlwZTo6aXNBY2NlcHRhYmxlVmFsdWUoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworU3RyaW5nIElucHV0VHlwZTo6c2FuaXRpemVWYWx1ZShjb25zdCBTdHJp
bmcmIHByb3Bvc2VkVmFsdWUpCit7CisgICAgcmV0dXJuIHByb3Bvc2VkVmFsdWU7Cit9CisKK2Jv
b2wgSW5wdXRUeXBlOjpoYXNVbmFjY2VwdGFibGVWYWx1ZSgpCit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIElucHV0VHlwZTo6c2V0RmlsZUxpc3QoY29uc3QgVmVjdG9yPFN0cmluZz4m
KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitib29sIElucHV0VHlwZTo6c2hv
dWxkUmVzZXRPbkRvY3VtZW50QWN0aXZhdGlvbigpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIElucHV0VHlwZTo6c2hvdWxkUmVzcGVjdExpc3RBdHRyaWJ1dGUoKQoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RTcGVlY2hBdHRy
aWJ1dGUoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OmlzVGV4
dEJ1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElucHV0VHlw
ZTo6aXNSYWRpb0J1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IElucHV0VHlwZTo6aXNTZWFyY2hGaWVsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIElucHV0VHlwZTo6aXNIaWRkZW5UeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgSW5wdXRUeXBlOjppc1Bhc3N3b3JkRmllbGQoKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OmlzQ2hlY2tib3goKSBjb25z
dAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OmlzRW1haWxGaWVs
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElucHV0VHlwZTo6aXNG
aWxlVXBsb2FkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5wdXRU
eXBlOjppc0ltYWdlQnV0dG9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgSW5wdXRUeXBlOjppc051bWJlckZpZWxkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgSW5wdXRUeXBlOjppc1N1Ym1pdEJ1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIElucHV0VHlwZTo6aXNUZWxlcGhvbmVGaWVsZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElucHV0VHlwZTo6aXNVUkxGaWVsZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElucHV0VHlwZTo6aXNFbnVt
ZXJhdGFibGUoKQoreworICAgIHJldHVybiB0cnVlOworfQorCitib29sIElucHV0VHlwZTo6aXND
aGVja2FibGUoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5cGU6Omhh
c1NwaW5CdXR0b24oKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5cGU6
OnNob3VsZFJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJpYnV0ZXMoKQoreworICAgIHJldHVybiBm
YWxzZTsKK30KKwogbmFtZXNwYWNlIElucHV0VHlwZU5hbWVzIHsKIAogLy8gVGhlIHR5cGUgbmFt
ZXMgbXVzdCBiZSBsb3dlcmNhc2VkIGJlY2F1c2UgdGhleSB3aWxsIGJlIHRoZSByZXR1cm4gdmFs
dWVzIG9mCkBAIC01MjUsNiArNzU3LDYgQEAgY29uc3QgQXRvbWljU3RyaW5nJiB3ZWVrKCkKICAg
ICByZXR1cm4gbmFtZTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZTo6SW5wdVR5cGVOYW1l
cworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZTo6SW5wdXRUeXBlTmFtZXMKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAkocmV2aXNpb24gNzQ4NTgpCisrKyBXZWJDb3JlL2h0
bWwvSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzEsMTUgKzMyLDE3IEBACiAjaWZuZGVmIElu
cHV0VHlwZV9oCiAjZGVmaW5lIElucHV0VHlwZV9oCiAKLSNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50OwogY2xh
c3MgRGF0ZUNvbXBvbmVudHM7CiBjbGFzcyBFdmVudDsKK2NsYXNzIEZpbGVMaXN0OwogY2xhc3Mg
Rm9ybURhdGFMaXN0OwogY2xhc3MgSFRNTEZvcm1FbGVtZW50OwogY2xhc3MgSFRNTElucHV0RWxl
bWVudDsKQEAgLTUwLDIxICs1Myw0NiBAQCBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5k
ZXJTdHlsZTsKIGNsYXNzIFdoZWVsRXZlbnQ7CiAKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7
CisKK3N0cnVjdCBDbGlja0hhbmRsaW5nU3RhdGUgeworICAgIGJvb2wgY2hlY2tlZDsKKyAgICBi
b29sIGluZGV0ZXJtaW5hdGU7CisgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGNoZWNrZWRS
YWRpb0J1dHRvbjsKKworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVECit9OworCiAvLyBBbiBJ
bnB1dFR5cGUgb2JqZWN0IHJlcHJlc2VudHMgdGhlIHR5cGUtc3BlY2lmaWMgcGFydCBvZiBhbiBI
VE1MSW5wdXRFbGVtZW50LgogLy8gRG8gbm90IGV4cG9zZSBpbnN0YW5jZXMgb2YgSW5wdXRUeXBl
IGFuZCBjbGFzc2VzIGRlcml2ZWQgZnJvbSBpdCB0byBjbGFzc2VzCiAvLyBvdGhlciB0aGFuIEhU
TUxJbnB1dEVsZW1lbnQuCiBjbGFzcyBJbnB1dFR5cGUgOiBwdWJsaWMgTm9uY29weWFibGUgewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1
dEVsZW1lbnQqLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxJ
bnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRFbGVtZW50KiwgY29uc3QgU3RyaW5nJik7CiAgICAg
c3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBjcmVhdGVUZXh0KEhUTUxJbnB1dEVsZW1lbnQq
KTsKICAgICB2aXJ0dWFsIH5JbnB1dFR5cGUoKTsKIAotICAgIC8vIFR5cGUgcXVlcnkgZnVuY3Rp
b25zCisgICAgLy8gVHlwZSBxdWVyeSBmdW5jdGlvbnMgKHRyeSBub3QgdG8gdXNlIHRoZXNlOyBi
YWQgZmFjdG9yaW5nKQorCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250
cm9sVHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQ2hhbmdlRnJvbUFub3Ro
ZXJUeXBlKCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2JveCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBpc0VtYWlsRmllbGQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNGaWxlVXBsb2FkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzSGlkZGVuVHlwZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdlQnV0dG9uKCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGlzTnVtYmVyRmllbGQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQYXNzd29y
ZEZpZWxkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzUmFkaW9CdXR0b24oKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNSYW5nZUNvbnRyb2woKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNTZWFyY2hGaWVsZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1N1Ym1pdEJ1dHRv
bigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1RlbGVwaG9uZUZpZWxkKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIGlzVGV4dEJ1dHRvbigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBp
c1RleHRGaWVsZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRUeXBlKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIGlzUmFuZ2VDb250cm9sKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNVUkxGaWVsZCgpIGNvbnN0OwogCiAgICAgLy8gRm9ybSB2YWx1ZSBmdW5jdGlv
bnMKIApAQCAtNzUsNiArMTAzLDkgQEAgcHVibGljOgogCiAgICAgLy8gRE9NIHByb3BlcnR5IGZ1
bmN0aW9ucwogCisgICAgdmlydHVhbCBib29sIGdldFR5cGVTcGVjaWZpY1ZhbHVlKFN0cmluZyYp
OyAvLyBDaGVja2VkIGZpcnN0LCBiZWZvcmUgaW50ZXJuYWwgc3RvcmFnZSBvciB0aGUgdmFsdWUg
YXR0cmlidXRlLgorICAgIHZpcnR1YWwgU3RyaW5nIGZhbGxiYWNrVmFsdWUoKTsgLy8gQ2hlY2tl
ZCBsYXN0LCBpZiBib3RoIGludGVybmFsIHN0b3JhZ2UgYW5kIHZhbHVlIGF0dHJpYnV0ZSBhcmUg
bWlzc2luZy4KKyAgICB2aXJ0dWFsIFN0cmluZyBkZWZhdWx0VmFsdWUoKTsgLy8gQ2hlY2tlZCBh
ZnRlciBldmVuIGZhbGxiYWNrVmFsdWUsIG9ubHkgd2hlbiB0aGUgdmFsdWVXaXRoRGVmYXVsdCBm
dW5jdGlvbiBpcyBjYWxsZWQuCiAgICAgdmlydHVhbCBkb3VibGUgdmFsdWVBc0RhdGUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0RhdGUoZG91YmxlLCBFeGNlcHRpb25Db2Rl
JikgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgdmFsdWVBc051bWJlcigpIGNvbnN0OwpAQCAt
OTcsMjAgKzEyOCwyNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBkb3VibGUgZGVmYXVsdFZhbHVl
Rm9yU3RlcFVwKCkgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgbWluaW11bSgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgZG91YmxlIG1heGltdW0oKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc3Rl
cE1pc21hdGNoKGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IHN0ZXBNaXNtYXRjaChjb25zdCBTdHJpbmcmLCBkb3VibGUgc3RlcCkgY29uc3Q7CiAgICAgdmly
dHVhbCBkb3VibGUgc3RlcEJhc2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBzdGVwQmFz
ZVdpdGhEZWNpbWFsUGxhY2VzKHVuc2lnbmVkKikgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUg
ZGVmYXVsdFN0ZXAoKSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBzdGVwU2NhbGVGYWN0b3Io
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VkU3RlcFZhbHVlU2hvdWxkQmVJbnRlZ2Vy
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNjYWxlZFN0ZXBWYWxldVNob3VsZEJlSW50ZWdl
cigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzY2FsZWRTdGVwVmFsdWVTaG91bGRCZUludGVn
ZXIoKSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBhY2NlcHRhYmxlRXJyb3IoZG91YmxlKSBj
b25zdDsKICAgICB2aXJ0dWFsIFN0cmluZyB0eXBlTWlzbWF0Y2hUZXh0KCkgY29uc3Q7CiAgICAg
dmlydHVhbCBTdHJpbmcgdmFsdWVNaXNzaW5nVGV4dCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBjYW5TZXRTdHJpbmdWYWx1ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VwdGFi
bGVWYWx1ZShjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBzYW5pdGl6ZVZhbHVl
KGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgYm9vbCBoYXNVbmFjY2VwdGFibGVWYWx1ZSgp
OwogCiAgICAgLy8gRXZlbnQgaGFuZGxlcnMKIAogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVDbGlj
a0V2ZW50KE1vdXNlRXZlbnQqKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q2xpY2tIYW5kbGlu
Z1N0YXRlPiB3aWxsRGlzcGF0Y2hDbGljaygpOworICAgIHZpcnR1YWwgdm9pZCBkaWREaXNwYXRj
aENsaWNrKEV2ZW50KiwgY29uc3QgQ2xpY2tIYW5kbGluZ1N0YXRlJik7CiAgICAgdmlydHVhbCB2
b2lkIGhhbmRsZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
S2V5cHJlc3NFdmVudChLZXlib2FyZEV2ZW50Kik7CkBAIC0xMjEsMjUgKzE1OCw1MiBAQCBwdWJs
aWM6CiAgICAgLy8gSGVscGVycyBmb3IgZXZlbnQgaGFuZGxlcnMuCiAgICAgdmlydHVhbCBib29s
IHNob3VsZFN1Ym1pdEltcGxpY2l0bHkoRXZlbnQqKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SFRNTEZvcm1FbGVtZW50PiBmb3JtRm9yU3VibWlzc2lvbigpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3Vs
ZFVzZUlucHV0TWV0aG9kKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUJsdXJFdmVu
dCgpOworICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVt
ZW50KTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQmVTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCk7CiAK
ICAgICAvLyBNaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucwogCisgICAgdmlydHVhbCBib29sIHJlbmRl
cmVySXNOZWVkZWQoKTsKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhdHRh
Y2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWluT3JNYXhBdHRyaWJ1dGVDaGFuZ2VkKCk7CisgICAg
dmlydHVhbCB2b2lkIHNyY0F0dHJpYnV0ZUNoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2ls
bE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVj
dEFsaWduQXR0cmlidXRlKCk7CisgICAgdmlydHVhbCBGaWxlTGlzdCogZmlsZXMoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgY2FuU2V0U3VnZ2VzdGVkVmFsdWUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkU2VuZENoYW5nZUV2ZW50QWZ0ZXJDaGVja2VkQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgYm9v
bCBjYW5TZXRWYWx1ZShjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3RvcmVzVmFs
dWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUxpc3Qo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVz
ZXRPbkRvY3VtZW50QWN0aXZhdGlvbigpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXNwZWN0
TGlzdEF0dHJpYnV0ZSgpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXNwZWN0U3BlZWNoQXR0
cmlidXRlKCk7CisgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCk7CisgICAgdmlydHVh
bCBib29sIGlzQ2hlY2thYmxlKCk7CisgICAgdmlydHVhbCBib29sIGhhc1NwaW5CdXR0b24oKTsK
KyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0cmlidXRlcygp
OwogCiAgICAgLy8gUGFyc2VzIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGZvciB0aGUgdHlwZSwgYW5k
IHJldHVybgogICAgIC8vIHRoZSBkb3VibGUgdmFsdWUgZm9yIHRoZSBwYXJzaW5nIHJlc3VsdCBp
ZiB0aGUgcGFyc2luZwogICAgIC8vIHN1Y2NlZWRzOyBSZXR1cm5zIGRlZmF1bHRWYWx1ZSBvdGhl
cndpc2UuIFRoaXMgZnVuY3Rpb24gY2FuCiAgICAgLy8gcmV0dXJuIE5hTiBvciBJbmZpbml0eSBv
bmx5IGlmIGRlZmF1bHRWYWx1ZSBpcyBOYU4gb3IgSW5maW5pdHkuCiAgICAgdmlydHVhbCBkb3Vi
bGUgcGFyc2VUb0RvdWJsZShjb25zdCBTdHJpbmcmLCBkb3VibGUgZGVmYXVsdFZhbHVlKSBjb25z
dDsKKwogICAgIC8vIFBhcnNlcyB0aGUgc3BlY2lmaWVkIHN0cmluZyBmb3IgdGhlIHR5cGUgYXMg
cGFyc2VUb0RvdWJsZSgpIGRvZXMuCiAgICAgLy8gSW4gYWRkaXRpb24sIGl0IHN0b3JlcyB0aGUg
bnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludAogICAgIC8vIGludG8gKmRl
Y2ltYWxQbGFjZXMuCi0gICAgdmlydHVhbCBkb3VibGUgcGFyc2VUb0RvdWJsZVdpdGhEZWNpbWFs
UGxhY2VzKGNvbnN0IFN0cmluZyYgc3JjLCBkb3VibGUgZGVmYXVsdFZhbHVlLCB1bnNpZ25lZCAq
ZGVjaW1hbFBsYWNlcykgY29uc3Q7CisgICAgdmlydHVhbCBkb3VibGUgcGFyc2VUb0RvdWJsZVdp
dGhEZWNpbWFsUGxhY2VzKGNvbnN0IFN0cmluZyYsIGRvdWJsZSBkZWZhdWx0VmFsdWUsIHVuc2ln
bmVkKiBkZWNpbWFsUGxhY2VzKSBjb25zdDsKKwogICAgIC8vIFBhcnNlcyB0aGUgc3BlY2lmaWVk
IHN0cmluZyBmb3IgdGhpcyBJbnB1dFR5cGUsIGFuZCByZXR1cm5zIHRydWUgaWYgaXQKICAgICAv
LyBpcyBzdWNjZXNzZnVsbHkgcGFyc2VkLiBBbiBpbnN0YW5jZSBwb2ludGVkIGJ5IHRoZSBEYXRl
Q29tcG9uZW50cyoKICAgICAvLyBwYXJhbWV0ZXIgd2lsbCBoYXZlIHBhcnNlZCB2YWx1ZXMgYW5k
IGJlIG1vZGlmaWVkIGV2ZW4gaWYgdGhlIHBhcnNpbmcKICAgICAvLyBmYWlscy4gVGhlIERhdGVD
b21wb25lbnRzKiBwYXJhbWV0ZXIgbWF5IGJlIDAuCiAgICAgdmlydHVhbCBib29sIHBhcnNlVG9E
YXRlQ29tcG9uZW50cyhjb25zdCBTdHJpbmcmLCBEYXRlQ29tcG9uZW50cyopIGNvbnN0OworCiAg
ICAgLy8gQ3JlYXRlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgZG91
YmxlIHZhbHVlIGZvciB0aGUKICAgICAvLyBpbnB1dCB0eXBlLiBJZiBOYU4gb3IgSW5maW5pdHkg
aXMgc3BlY2lmaWVkLCB0aGlzIHJldHVybnMgYW4gZW1wdHkKICAgICAvLyBzdHJpbmcuIFRoaXMg
c2hvdWxkIG5vdCBiZSBjYWxsZWQgZm9yIHR5cGVzIHdpdGhvdXQgdmFsdWVBc051bWJlci4KSW5k
ZXg6IFdlYkNvcmUvaHRtbC9Jc0luZGV4SW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSXNJbmRleElucHV0VHlwZS5jcHAJKHJldmlzaW9uIDc0ODU4KQorKysgV2ViQ29y
ZS9odG1sL0lzSW5kZXhJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiSXNJbmRleElucHV0VHlwZS5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVt
ZW50LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIApAQCAtNzAsNCArNzEsOSBAQCBQ
YXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gSXNJbmRleElucHV0CiAgICAgcmV0dXJuIGZvcm0u
cmVsZWFzZSgpOwogfQogCitib29sIElzSW5kZXhJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RMaXN0
QXR0cmlidXRlKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9Jc0luZGV4SW5wdXRUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0lzSW5kZXhJbnB1dFR5cGUuaAkocmV2aXNpb24gNzQ4NTgpCisrKyBX
ZWJDb3JlL2h0bWwvSXNJbmRleElucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0
NSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250
cm9sVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1JlcXVpcmVkKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9ybUZvclN1Ym1p
c3Npb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVjdExpc3RBdHRyaWJ1
dGUoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9O
dW1iZXJJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9OdW1iZXJJbnB1
dFR5cGUuY3BwCShyZXZpc2lvbiA3NDg1OCkKKysrIFdlYkNvcmUvaHRtbC9OdW1iZXJJbnB1dFR5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKQEAgLTM2LDYgKzM3LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVu
dC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSA8bGltaXRzPgog
I2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
QEAgLTIzNCw0ICsyMzYsNDUgQEAgZG91YmxlIE51bWJlcklucHV0VHlwZTo6YWNjZXB0YWJsZUVy
cm9yKAogICAgIHJldHVybiBzdGVwIC8gcG93KDIuMCwgRkxUX01BTlRfRElHKTsKIH0KIAordm9p
ZCBOdW1iZXJJbnB1dFR5cGU6OmhhbmRsZUJsdXJFdmVudCgpCit7CisgICAgLy8gUmVzZXQgdGhl
IHJlbmRlcmVyIHZhbHVlLCB3aGljaCBtaWdodCBiZSB1bm1hdGNoZWQgd2l0aCB0aGUgZWxlbWVu
dCB2YWx1ZS4KKyAgICBlbGVtZW50KCktPnNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVy
ZXIoZmFsc2UpOworCisgICAgLy8gV2UgbmVlZCB0byByZXNldCB0aGUgcmVuZGVyZXIgdmFsdWUg
ZXhwbGljaXRseSBiZWNhdXNlIGFuIHVuYWNjZXB0YWJsZQorICAgIC8vIHJlbmRlcmVyIHZhbHVl
IHNob3VsZCBiZSBwdXJnZWQgYmVmb3JlIHN0eWxlIGNhbGN1bGF0aW9uLgorICAgIGlmIChlbGVt
ZW50KCktPnJlbmRlcmVyKCkpCisgICAgICAgIGVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+dXBkYXRl
RnJvbUVsZW1lbnQoKTsKK30KKworYm9vbCBOdW1iZXJJbnB1dFR5cGU6OmlzQWNjZXB0YWJsZVZh
bHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gcHJvcG9zZWRW
YWx1ZS5pc0VtcHR5KCkgfHwgcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUocHJvcG9zZWRWYWx1
ZSwgMCk7Cit9CisKK1N0cmluZyBOdW1iZXJJbnB1dFR5cGU6OnNhbml0aXplVmFsdWUoY29uc3Qg
U3RyaW5nJiBwcm9wb3NlZFZhbHVlKQoreworICAgIHJldHVybiBwYXJzZVRvRG91YmxlRm9yTnVt
YmVyVHlwZShwcm9wb3NlZFZhbHVlLCAwKSA/IHByb3Bvc2VkVmFsdWUgOiBTdHJpbmcoKTsKK30K
KworYm9vbCBOdW1iZXJJbnB1dFR5cGU6Omhhc1VuYWNjZXB0YWJsZVZhbHVlKCkKK3sKKyAgICBy
ZXR1cm4gZWxlbWVudCgpLT5yZW5kZXJlcigpICYmICFpc0FjY2VwdGFibGVWYWx1ZSh0b1JlbmRl
clRleHRDb250cm9sKGVsZW1lbnQoKS0+cmVuZGVyZXIoKSktPnRleHQoKSk7Cit9CisKK2Jvb2wg
TnVtYmVySW5wdXRUeXBlOjpzaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKCkKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOdW1iZXJJbnB1dFR5cGU6OmlzTnVtYmVyRmllbGQoKSBj
b25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE51bWJlcklucHV0VHlwZTo6aGFz
U3BpbkJ1dHRvbigpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9OdW1iZXJJbnB1dFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvTnVtYmVySW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODU4KQorKysgV2Vi
Q29yZS9odG1sL051bWJlcklucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Mywx
MyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgZG91YmxlIHBhcnNlVG9Eb3VibGVXaXRoRGVjaW1h
bFBsYWNlcyhjb25zdCBTdHJpbmcmLCBkb3VibGUsIHVuc2lnbmVkKikgY29uc3Q7CiAgICAgdmly
dHVhbCBTdHJpbmcgc2VyaWFsaXplKGRvdWJsZSkgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUg
YWNjZXB0YWJsZUVycm9yKGRvdWJsZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUJs
dXJFdmVudCgpOworICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VwdGFibGVWYWx1ZShjb25zdCBTdHJp
bmcmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYpOwor
ICAgIHZpcnR1YWwgYm9vbCBoYXNVbmFjY2VwdGFibGVWYWx1ZSgpOworICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKCk7CisgICAgdmlydHVhbCBib29sIGlzTnVt
YmVyRmllbGQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzU3BpbkJ1dHRvbigpOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL1Bhc3N3b3JkSW5w
dXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvUGFzc3dvcmRJbnB1dFR5cGUu
Y3BwCShyZXZpc2lvbiA3NDg1OCkKKysrIFdlYkNvcmUvaHRtbC9QYXNzd29yZElucHV0VHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQpAQCAtNTgsNCArNTksMzEgQEAgdm9pZCBQYXNzd29yZElucHV0VHlwZTo6
cmVzdG9yZUZvcm1Db250cgogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCitib29sIFBh
c3N3b3JkSW5wdXRUeXBlOjpzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0Cit7CisgICAgLy8g
SW5wdXQgbWV0aG9kcyBhcmUgZGlzYWJsZWQgZm9yIHRoZSBwYXNzd29yZCBmaWVsZCBiZWNhdXNl
IG90aGVyd2lzZQorICAgIC8vIGFueW9uZSBjYW4gYWNjZXNzIHRoZSB1bmRlcmx5aW5nIHBhc3N3
b3JkIGFuZCBkaXNwbGF5IGl0IGluIGNsZWFyIHRleHQuCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFBhc3N3b3JkSW5wdXRUeXBlOjpzaG91bGRSZXNldE9uRG9jdW1lbnRBY3RpdmF0aW9u
KCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYXNzd29yZElucHV0VHlwZTo6c2hv
dWxkUmVzcGVjdExpc3RBdHRyaWJ1dGUoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBQYXNzd29yZElucHV0VHlwZTo6c2hvdWxkUmVzcGVjdFNwZWVjaEF0dHJpYnV0ZSgpCit7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUGFzc3dvcmRJbnB1dFR5cGU6OmlzUGFzc3dvcmRG
aWVsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9QYXNzd29yZElucHV0VHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9QYXNzd29yZElucHV0VHlwZS5oCShyZXZpc2lvbiA3NDg1OCkKKysr
IFdlYkNvcmUvaHRtbC9QYXNzd29yZElucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2
ICs0NCwxMSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3Jt
Q29udHJvbFR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2F2ZUZvcm1Db250cm9sU3Rh
dGUoU3RyaW5nJikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHJlc3RvcmVGb3JtQ29udHJvbFN0
YXRlKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VJbnB1
dE1ldGhvZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXNldE9uRG9jdW1lbnRB
Y3RpdmF0aW9uKCk7CisgICAgdmlydHVhbCBib29sIHNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRl
KCk7CisgICAgdmlydHVhbCBib29sIHNob3VsZFJlc3BlY3RTcGVlY2hBdHRyaWJ1dGUoKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNQYXNzd29yZEZpZWxkKCkgY29uc3Q7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAJKHJldmlzaW9uIDc0ODU4
KQorKysgV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTExNSw0ICsxMTUsODIgQEAgdm9pZCBS
YWRpb0lucHV0VHlwZTo6aGFuZGxlS2V5dXBFdmVudChLZQogICAgIGRpc3BhdGNoU2ltdWxhdGVk
Q2xpY2tJZkFjdGl2ZShldmVudCk7CiB9CiAKK2Jvb2wgUmFkaW9JbnB1dFR5cGU6OmlzS2V5Ym9h
cmRGb2N1c2FibGUoKSBjb25zdAoreworICAgIC8vIFdoZW4gdXNpbmcgU3BhdGlhbCBOYXZpZ2F0
aW9uLCBldmVyeSByYWRpbyBidXR0b24gc2hvdWxkIGJlIGZvY3VzYWJsZS4KKyAgICBpZiAoaXNT
cGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZWxlbWVudCgpLT5kb2N1bWVudCgpLT5mcmFtZSgpKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOZXZlciBhbGxvdyBrZXlib2FyZCB0YWJi
aW5nIHRvIGxlYXZlIHlvdSBpbiB0aGUgc2FtZSByYWRpbyBncm91cC4gIEFsd2F5cworICAgIC8v
IHNraXAgYW55IG90aGVyIGVsZW1lbnRzIGluIHRoZSBncm91cC4KKyAgICBOb2RlKiBjdXJyZW50
Rm9jdXNlZE5vZGUgPSBlbGVtZW50KCktPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCk7CisgICAg
aWYgKGN1cnJlbnRGb2N1c2VkTm9kZSAmJiBjdXJyZW50Rm9jdXNlZE5vZGUtPmhhc1RhZ05hbWUo
aW5wdXRUYWcpKSB7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGZvY3VzZWRJbnB1dCA9IHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihjdXJyZW50Rm9jdXNlZE5vZGUpOworICAgICAg
ICBpZiAoZm9jdXNlZElucHV0LT5pc1JhZGlvQnV0dG9uKCkgJiYgZm9jdXNlZElucHV0LT5mb3Jt
KCkgPT0gZWxlbWVudCgpLT5mb3JtKCkgJiYgZm9jdXNlZElucHV0LT5uYW1lKCkgPT0gZWxlbWVu
dCgpLT5uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8g
QWxsb3cga2V5Ym9hcmQgZm9jdXMgaWYgd2UncmUgY2hlY2tlZCBvciBpZiBub3RoaW5nIGluIHRo
ZSBncm91cCBpcyBjaGVja2VkLgorICAgIHJldHVybiBlbGVtZW50KCktPmNoZWNrZWQoKSB8fCAh
ZWxlbWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuY2hlY2tlZEJ1dHRvbkZvckdyb3VwKGVs
ZW1lbnQoKS0+bmFtZSgpKTsKK30KKwordm9pZCBSYWRpb0lucHV0VHlwZTo6YXR0YWNoKCkKK3sK
KyAgICBJbnB1dFR5cGU6OmF0dGFjaCgpOworICAgIGVsZW1lbnQoKS0+dXBkYXRlQ2hlY2tlZFJh
ZGlvQnV0dG9ucygpOworfQorCitib29sIFJhZGlvSW5wdXRUeXBlOjpzaG91bGRTZW5kQ2hhbmdl
RXZlbnRBZnRlckNoZWNrZWRDaGFuZ2VkKCkKK3sKKyAgICAvLyBEb24ndCBzZW5kIGEgY2hhbmdl
IGV2ZW50IGZvciBhIHJhZGlvIGJ1dHRvbiB0aGF0J3MgZ2V0dGluZyB1bmNoZWNrZWQuCisgICAg
Ly8gVGhpcyB3YXMgZG9uZSB0byBtYXRjaCB0aGUgYmVoYXZpb3Igb2Ygb3RoZXIgYnJvd3NlcnMu
CisgICAgcmV0dXJuIGVsZW1lbnQoKS0+Y2hlY2tlZCgpOworfQorCitQYXNzT3duUHRyPENsaWNr
SGFuZGxpbmdTdGF0ZT4gUmFkaW9JbnB1dFR5cGU6OndpbGxEaXNwYXRjaENsaWNrKCkKK3sKKyAg
ICAvLyBBbiBldmVudCBoYW5kbGVyIGNhbiB1c2UgcHJldmVudERlZmF1bHQgb3IgInJldHVybiBm
YWxzZSIgdG8gcmV2ZXJzZSB0aGUgc2VsZWN0aW9uIHdlIGRvIGhlcmUuCisgICAgLy8gVGhlIENs
aWNrSGFuZGxpbmdTdGF0ZSBvYmplY3QgY29udGFpbnMgd2hhdCB3ZSBuZWVkIHRvIHVuZG8gd2hh
dCB3ZSBkaWQgaGVyZSBpbiBkaWREaXNwYXRjaENsaWNrLgorCisgICAgLy8gV2Ugd2FudCByYWRp
byBncm91cHMgdG8gZW5kIHVwIGluIHNhbmUgc3RhdGVzLCBpLmUuLCB0byBoYXZlIHNvbWV0aGlu
ZyBjaGVja2VkLgorICAgIC8vIFRoZXJlZm9yZSBpZiBub3RoaW5nIGlzIGN1cnJlbnRseSBzZWxl
Y3RlZCwgd2Ugd29uJ3QgYWxsb3cgdGhlIHVwY29taW5nIGFjdGlvbiB0byBiZSAidW5kb25lIiwg
c2luY2UKKyAgICAvLyB3ZSB3YW50IHNvbWUgb2JqZWN0IGluIHRoZSByYWRpbyBncm91cCB0byBh
Y3R1YWxseSBnZXQgc2VsZWN0ZWQuCisKKyAgICBPd25QdHI8Q2xpY2tIYW5kbGluZ1N0YXRlPiBz
dGF0ZSA9IGFkb3B0UHRyKG5ldyBDbGlja0hhbmRsaW5nU3RhdGUpOworCisgICAgc3RhdGUtPmNo
ZWNrZWQgPSBlbGVtZW50KCktPmNoZWNrZWQoKTsKKyAgICBzdGF0ZS0+aW5kZXRlcm1pbmF0ZSA9
IGVsZW1lbnQoKS0+aW5kZXRlcm1pbmF0ZSgpOworICAgIHN0YXRlLT5jaGVja2VkUmFkaW9CdXR0
b24gPSBlbGVtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5jaGVja2VkQnV0dG9uRm9yR3Jv
dXAoZWxlbWVudCgpLT5uYW1lKCkpOworCisgICAgaWYgKGVsZW1lbnQoKS0+aW5kZXRlcm1pbmF0
ZSgpKQorICAgICAgICBlbGVtZW50KCktPnNldEluZGV0ZXJtaW5hdGUoZmFsc2UpOworICAgIGVs
ZW1lbnQoKS0+c2V0Q2hlY2tlZCh0cnVlLCB0cnVlKTsKKworICAgIHJldHVybiBzdGF0ZS5yZWxl
YXNlKCk7Cit9CisKK3ZvaWQgUmFkaW9JbnB1dFR5cGU6OmRpZERpc3BhdGNoQ2xpY2soRXZlbnQq
IGV2ZW50LCBjb25zdCBDbGlja0hhbmRsaW5nU3RhdGUmIHN0YXRlKQoreworICAgIGlmIChldmVu
dC0+ZGVmYXVsdFByZXZlbnRlZCgpIHx8IGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKSB7CisgICAg
ICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHNlbGVjdGVkIHJhZGlvIGJ1dHRvbiBpZiBwb3Nz
aWJsZS4KKyAgICAgICAgLy8gTWFrZSBzdXJlIGl0IGlzIHN0aWxsIGEgcmFkaW8gYnV0dG9uIGFu
ZCBvbmx5IGRvIHRoZSByZXN0b3JhdGlvbiBpZiBpdCBzdGlsbCBiZWxvbmdzIHRvIG91ciBncm91
cC4KKyAgICAgICAgSFRNTElucHV0RWxlbWVudCogY2hlY2tlZFJhZGlvQnV0dG9uID0gc3RhdGUu
Y2hlY2tlZFJhZGlvQnV0dG9uLmdldCgpOworICAgICAgICBpZiAoY2hlY2tlZFJhZGlvQnV0dG9u
CisgICAgICAgICAgICAgICAgJiYgY2hlY2tlZFJhZGlvQnV0dG9uLT5pc1JhZGlvQnV0dG9uKCkK
KyAgICAgICAgICAgICAgICAmJiBjaGVja2VkUmFkaW9CdXR0b24tPmZvcm0oKSA9PSBlbGVtZW50
KCktPmZvcm0oKQorICAgICAgICAgICAgICAgICYmIGNoZWNrZWRSYWRpb0J1dHRvbi0+bmFtZSgp
ID09IGVsZW1lbnQoKS0+bmFtZSgpKSB7CisgICAgICAgICAgICBjaGVja2VkUmFkaW9CdXR0b24t
PnNldENoZWNrZWQodHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxlbWVudCgpLT5zZXRJbmRl
dGVybWluYXRlKHN0YXRlLmluZGV0ZXJtaW5hdGUpOworICAgIH0KKworICAgIC8vIFRoZSB3b3Jr
IHdlIGRpZCBpbiB3aWxsRGlzcGF0Y2hDbGljayB3YXMgZGVmYXVsdCBoYW5kbGluZy4KKyAgICBl
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKworYm9vbCBSYWRpb0lucHV0VHlwZTo6aXNS
YWRpb0J1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5oCShyZXZpc2lvbiA3NDg1OCkKKysr
IFdlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0
NywxMiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVDbGlja0V2ZW50KE1vdXNl
RXZlbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZl
bnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5dXBFdmVudChLZXlib2FyZEV2ZW50Kik7
CisgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgYXR0YWNoKCk7CisgICAgdmlydHVhbCBib29sIHNob3VsZFNlbmRDaGFuZ2VFdmVu
dEFmdGVyQ2hlY2tlZENoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q2xpY2tIYW5k
bGluZ1N0YXRlPiB3aWxsRGlzcGF0Y2hDbGljaygpOworICAgIHZpcnR1YWwgdm9pZCBkaWREaXNw
YXRjaENsaWNrKEV2ZW50KiwgY29uc3QgQ2xpY2tIYW5kbGluZ1N0YXRlJik7CisgICAgdmlydHVh
bCBib29sIGlzUmFkaW9CdXR0b24oKSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4NTgpCisrKyBXZWJD
b3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM2LDYgKzM3LDcgQEAK
ICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5o
IgogI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgorI2luY2x1ZGUgIlN0ZXBSYW5nZS5oIgogI2lu
Y2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CkBAIC0yMDUsNCArMjA3LDQ0IEBAIFN0cmluZyBSYW5nZUlucHV0VHlw
ZTo6c2VyaWFsaXplKGRvdWJsZSAKICAgICByZXR1cm4gc2VyaWFsaXplRm9yTnVtYmVyVHlwZSh2
YWx1ZSk7CiB9CiAKKy8vIEZJWE1FOiBDb3VsZCBzaGFyZSB0aGlzIHdpdGggQmFzZUJ1dHRvbklu
cHV0VHlwZSBhbmQgQmFzZUNoZWNrYWJsZUlucHV0VHlwZSBpZiB3ZSBoYWQgYSBjb21tb24gYmFz
ZSBjbGFzcy4KK3ZvaWQgUmFuZ2VJbnB1dFR5cGU6OmFjY2Vzc0tleUFjdGlvbihib29sIHNlbmRU
b0FueUVsZW1lbnQpCit7CisgICAgSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oc2VuZFRvQW55
RWxlbWVudCk7CisKKyAgICAvLyBTZW5kIG1vdXNlIGJ1dHRvbiBldmVudHMgaWYgdGhlIGNhbGxl
ciBzcGVjaWZpZWQgc2VuZFRvQW55RWxlbWVudC4KKyAgICAvLyBGSVhNRTogVGhlIGNvbW1lbnQg
YWJvdmUgaXMgbm8gZ29vZC4gSXQgc2F5cyB3aGF0IHdlIGRvLCBidXQgbm90IHdoeS4KKyAgICBl
bGVtZW50KCktPmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soMCwgc2VuZFRvQW55RWxlbWVudCk7Cit9
CisKK3ZvaWQgUmFuZ2VJbnB1dFR5cGU6Om1pbk9yTWF4QXR0cmlidXRlQ2hhbmdlZCgpCit7Cisg
ICAgSW5wdXRUeXBlOjptaW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQoKTsKKworICAgIC8vIFNhbml0
aXplIHRoZSB2YWx1ZS4KKyAgICBlbGVtZW50KCktPnNldFZhbHVlKGVsZW1lbnQoKS0+dmFsdWUo
KSk7CisgICAgZWxlbWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7Cit9CisKK1N0cmluZyBS
YW5nZUlucHV0VHlwZTo6ZmFsbGJhY2tWYWx1ZSgpCit7CisgICAgcmV0dXJuIHNlcmlhbGl6ZUZv
ck51bWJlclR5cGUoU3RlcFJhbmdlKGVsZW1lbnQoKSkuZGVmYXVsdFZhbHVlKCkpOworfQorCitT
dHJpbmcgUmFuZ2VJbnB1dFR5cGU6OnNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3Nl
ZFZhbHVlKQoreworICAgIC8vIElmIHRoZSBwcm9wb3NlZFZhbHVlIGlzIG51bGwgdGhhbiB0aGlz
IGlzIGEgcmVzZXQgc2NlbmFyaW8gYW5kIHdlCisgICAgLy8gd2FudCB0aGUgcmFuZ2UgaW5wdXQn
cyB2YWx1ZSBhdHRyaWJ1dGUgdG8gdGFrZSBwcmlvcml0eSBvdmVyIHRoZQorICAgIC8vIGNhbGN1
bGF0ZWQgZGVmYXVsdCAobWlkZGxlKSB2YWx1ZS4KKyAgICBpZiAocHJvcG9zZWRWYWx1ZS5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIHByb3Bvc2VkVmFsdWU7CisKKyAgICByZXR1cm4gc2VyaWFs
aXplRm9yTnVtYmVyVHlwZShTdGVwUmFuZ2UoZWxlbWVudCgpKS5jbGFtcFZhbHVlKHByb3Bvc2Vk
VmFsdWUpKTsKK30KKworYm9vbCBSYW5nZUlucHV0VHlwZTo6c2hvdWxkUmVzcGVjdExpc3RBdHRy
aWJ1dGUoKQoreworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuaAkocmV2aXNpb24gNzQ4NTgpCisrKyBXZWJDb3JlL2h0
bWwvUmFuZ2VJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsMTEgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJl
bmEqLCBSZW5kZXJTdHlsZSopIGNvbnN0OwogICAgIHZpcnR1YWwgZG91YmxlIHBhcnNlVG9Eb3Vi
bGUoY29uc3QgU3RyaW5nJiwgZG91YmxlKSBjb25zdDsKICAgICB2aXJ0dWFsIFN0cmluZyBzZXJp
YWxpemUoZG91YmxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJv
b2wgc2VuZFRvQW55RWxlbWVudCk7CisgICAgdmlydHVhbCB2b2lkIG1pbk9yTWF4QXR0cmlidXRl
Q2hhbmdlZCgpOworICAgIHZpcnR1YWwgU3RyaW5nIGZhbGxiYWNrVmFsdWUoKTsKKyAgICB2aXJ0
dWFsIFN0cmluZyBzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSk7Cisg
ICAgdmlydHVhbCBib29sIHNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRlKCk7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvUmVzZXRJbnB1dFR5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9SZXNldElucHV0VHlwZS5jcHAJKHJldmlzaW9u
IDc0ODU4KQorKysgV2ViQ29yZS9odG1sL1Jlc2V0SW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC0zMiw3ICszMyw5IEBACiAjaW5jbHVkZSAiUmVzZXRJbnB1dFR5cGUuaCIKIAogI2luY2x1ZGUg
IkV2ZW50LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElu
cHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02MCw0ICs2MywxNCBA
QCB2b2lkIFJlc2V0SW5wdXRUeXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2CiAgICAgZXZlbnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7CiB9CiAKK1N0cmluZyBSZXNldElucHV0VHlwZTo6ZGVmYXVsdFZh
bHVlKCkKK3sKKyAgICByZXR1cm4gcmVzZXRCdXR0b25EZWZhdWx0TGFiZWwoKTsKK30KKworYm9v
bCBSZXNldElucHV0VHlwZTo6aXNUZXh0QnV0dG9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL1Jlc2V0
SW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1Jlc2V0SW5wdXRUeXBlLmgJ
KHJldmlzaW9uIDc0ODU4KQorKysgV2ViQ29yZS9odG1sL1Jlc2V0SW5wdXRUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzVmFsaWRhdGlvbigpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVET01BY3Rp
dmF0ZUV2ZW50KEV2ZW50Kik7CisgICAgdmlydHVhbCBTdHJpbmcgZGVmYXVsdFZhbHVlKCk7Cisg
ICAgdmlydHVhbCBib29sIGlzVGV4dEJ1dHRvbigpIGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5jcHAJKHJldmlzaW9uIDc0ODU4
KQorKysgV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDQgKzQ1LDE0IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU2VhcmNoSW5wdXRUeXBlOjpmb3IK
ICAgICByZXR1cm4gSW5wdXRUeXBlTmFtZXM6OnNlYXJjaCgpOwogfQogCitib29sIFNlYXJjaElu
cHV0VHlwZTo6c2hvdWxkUmVzcGVjdFNwZWVjaEF0dHJpYnV0ZSgpCit7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgU2VhcmNoSW5wdXRUeXBlOjppc1NlYXJjaEZpZWxkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9T
ZWFyY2hJbnB1dFR5cGUuaAkocmV2aXNpb24gNzQ4NTgpCisrKyBXZWJDb3JlL2h0bWwvU2VhcmNo
SW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDggQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBTZWFyY2hJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkgOiBC
YXNlVGV4dElucHV0VHlwZShlbGVtZW50KSB7IH0KICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3VsZFJl
c3BlY3RTcGVlY2hBdHRyaWJ1dGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTZWFyY2hGaWVsZCgp
IGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1s
L1N1Ym1pdElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1N1Ym1pdElu
cHV0VHlwZS5jcHAJKHJldmlzaW9uIDc0ODU4KQorKysgV2ViQ29yZS9odG1sL1N1Ym1pdElucHV0
VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzMsNyArMzQsOSBAQAogCiAjaW5jbHVkZSAiRXZlbnQu
aCIKICNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3Ry
aW5ncy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTcyLDQgKzc1LDI0IEBAIHZvaWQgU3VibWl0SW5wdXRUeXBlOjpoYW5kbGVET01BY3Rp
dmF0ZUUKICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIAorYm9vbCBTdWJtaXRJ
bnB1dFR5cGU6OmNhbkJlU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpCit7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK1N0cmluZyBTdWJtaXRJbnB1dFR5cGU6OmRlZmF1bHRWYWx1ZSgpCit7CisgICAg
cmV0dXJuIHN1Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCgpOworfQorCitib29sIFN1Ym1pdElucHV0
VHlwZTo6aXNTdWJtaXRCdXR0b24oKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFN1Ym1pdElucHV0VHlwZTo6aXNUZXh0QnV0dG9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL1N1
Ym1pdElucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9TdWJtaXRJbnB1dFR5
cGUuaAkocmV2aXNpb24gNzQ4NTgpCisrKyBXZWJDb3JlL2h0bWwvU3VibWl0SW5wdXRUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIGFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYsIGJvb2wpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c1JlcXVpcmVkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRs
ZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQqKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQmVTdWNjZXNz
ZnVsU3VibWl0QnV0dG9uKCk7CisgICAgdmlydHVhbCBTdHJpbmcgZGVmYXVsdFZhbHVlKCk7Cisg
ICAgdmlydHVhbCBib29sIGlzU3VibWl0QnV0dG9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGlzVGV4dEJ1dHRvbigpIGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9odG1sL1RlbGVwaG9uZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL1RlbGVwaG9uZUlucHV0VHlwZS5jcHAJKHJldmlzaW9uIDc0ODU4KQorKysgV2Vi
Q29yZS9odG1sL1RlbGVwaG9uZUlucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDQg
KzQ1LDE0IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgVGVsZXBob25lSW5wdXRUeXBlOjoKICAgICBy
ZXR1cm4gSW5wdXRUeXBlTmFtZXM6OnRlbGVwaG9uZSgpOwogfQogCitib29sIFRlbGVwaG9uZUlu
cHV0VHlwZTo6c2hvdWxkUmVzcGVjdFNwZWVjaEF0dHJpYnV0ZSgpCit7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgVGVsZXBob25lSW5wdXRUeXBlOjppc1RlbGVwaG9uZUZpZWxkKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9odG1sL1RlbGVwaG9uZUlucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9UZWxlcGhvbmVJbnB1dFR5cGUuaAkocmV2aXNpb24gNzQ4NTgpCisrKyBXZWJDb3Jl
L2h0bWwvVGVsZXBob25lSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDgg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBUZWxlcGhvbmVJbnB1dFR5cGUoSFRNTElucHV0RWxl
bWVudCogZWxlbWVudCkgOiBCYXNlVGV4dElucHV0VHlwZShlbGVtZW50KSB7IH0KICAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHNob3VsZFJlc3BlY3RTcGVlY2hBdHRyaWJ1dGUoKTsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNUZWxlcGhvbmVGaWVsZCgpIGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAJKHJldmlzaW9uIDc0ODU4KQor
KysgV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMTA0
LDQgKzEwNSwxOSBAQCBSZW5kZXJPYmplY3QqIFRleHRGaWVsZElucHV0VHlwZTo6Y3JlYXRlCiAg
ICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShlbGVtZW50
KCksIGVsZW1lbnQoKS0+cGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKSk7CiB9CiAKK2Jvb2wg
VGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK1N0cmluZyBUZXh0RmllbGRJbnB1dFR5cGU6OnNhbml0aXplVmFs
dWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKQoreworICAgIHJldHVybiBJbnB1dEVsZW1l
bnQ6OnNhbml0aXplVmFsdWVGb3JUZXh0RmllbGQoZWxlbWVudCgpLCBwcm9wb3NlZFZhbHVlKTsK
K30KKworYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRl
KCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuaAkocmV2aXNpb24gNzQ4NTgpCisrKyBXZWJDb3Jl
L2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE0ICs0MCwx
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBUZXh0RmllbGRJbnB1dFR5cGUgOiBwdWJs
aWMgSW5wdXRUeXBlIHsKIHByb3RlY3RlZDoKICAgICBUZXh0RmllbGRJbnB1dFR5cGUoSFRNTElu
cHV0RWxlbWVudCogZWxlbWVudCkgOiBJbnB1dFR5cGUoZWxlbWVudCkgeyB9Ci0gICAgdmlydHVh
bCBib29sIGlzVGV4dEZpZWxkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHZhbHVlTWlzc2lu
Zyhjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5ZG93bkV2
ZW50KEtleWJvYXJkRXZlbnQqKTsKICAgICB2b2lkIGhhbmRsZUtleWRvd25FdmVudEZvclNwaW5C
dXR0b24oS2V5Ym9hcmRFdmVudCopOwogICAgIHZvaWQgaGFuZGxlV2hlZWxFdmVudEZvclNwaW5C
dXR0b24oV2hlZWxFdmVudCopOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBpc1RleHRG
aWVsZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCB2YWx1ZU1pc3NpbmcoY29uc3QgU3RyaW5n
JikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGZvcndhcmRFdmVudChFdmVudCopOwogICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRTdWJtaXRJbXBsaWNpdGx5KEV2ZW50Kik7CiAgICAgdmlydHVhbCBS
ZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1
ZSk7CisgICAgdmlydHVhbCBib29sIHNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRlKCk7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvVGV4dElucHV0VHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1RleHRJbnB1dFR5cGUuY3BwCShyZXZp
c2lvbiA3NDg1OCkKKysrIFdlYkNvcmUvaHRtbC9UZXh0SW5wdXRUeXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNCArNDUsMTUgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBUZXh0SW5wdXRUeXBl
Ojpmb3JtQwogICAgIHJldHVybiBJbnB1dFR5cGVOYW1lczo6dGV4dCgpOwogfQogCitib29sIFRl
eHRJbnB1dFR5cGU6OmNhblNldFN1Z2dlc3RlZFZhbHVlKCkKK3sKKyAgICAvLyBGSVhNRTogU2hv
dWxkIHRoaXMgcmVhbGx5IGJlIHJlc3RyaWN0ZWQgdG8gcGxhaW4gdGV4dD8gV2hhdCBhYm91dCBz
ZWFyY2gsIGZvciBleGFtcGxlPworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRleHRJbnB1
dFR5cGU6OnNob3VsZFJlc3BlY3RTcGVlY2hBdHRyaWJ1dGUoKQoreworICAgIHJldHVybiB0cnVl
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvVGV4dElu
cHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9UZXh0SW5wdXRUeXBlLmgJKHJl
dmlzaW9uIDc0ODU4KQorKysgV2ViQ29yZS9odG1sL1RleHRJbnB1dFR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNiArNDIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFRleHRJbnB1dFR5
cGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkgOiBCYXNlVGV4dElucHV0VHlwZShlbGVtZW50
KSB7IH0KICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGNhblNldFN1Z2dlc3RlZFZhbHVlKCk7CisgICAgdmly
dHVhbCBib29sIHNob3VsZFJlc3BlY3RTcGVlY2hBdHRyaWJ1dGUoKTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5jcHAJKHJldmlzaW9uIDc0ODU4
KQorKysgV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MSw3ICs5MSw3IEBAIGRvdWJsZSBUaW1lSW5wdXRUeXBlOjpzdGVwU2NhbGVGYWN0b3IoKSAKICAg
ICByZXR1cm4gdGltZVN0ZXBTY2FsZUZhY3RvcjsKIH0KIAotYm9vbCBUaW1lSW5wdXRUeXBlOjpz
Y2FsZWRTdGVwVmFsZXVTaG91bGRCZUludGVnZXIoKSBjb25zdAorYm9vbCBUaW1lSW5wdXRUeXBl
OjpzY2FsZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIoKSBjb25zdAogewogICAgIHJldHVybiB0
cnVlOwogfQpJbmRleDogV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5oCShyZXZpc2lvbiA3NDg1OCkKKysrIFdlYkNv
cmUvaHRtbC9UaW1lSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGRvdWJsZSBtYXhpbXVtKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBkb3VibGUgZGVmYXVsdFN0ZXAoKSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBzdGVwU2Nh
bGVGYWN0b3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2NhbGVkU3RlcFZhbGV1U2hvdWxk
QmVJbnRlZ2VyKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNjYWxlZFN0ZXBWYWx1ZVNob3Vs
ZEJlSW50ZWdlcigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYXJzZVRvRGF0ZUNvbXBvbmVu
dHNJbnRlcm5hbChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwgRGF0ZUNvbXBvbmVudHMq
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2V0TWlsbGlzZWNvbmRUb0RhdGVDb21wb25lbnRz
KGRvdWJsZSwgRGF0ZUNvbXBvbmVudHMqKSBjb25zdDsKIH07CkluZGV4OiBXZWJDb3JlL2h0bWwv
VVJMSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvVVJMSW5wdXRUeXBl
LmNwcAkocmV2aXNpb24gNzQ4NTgpCisrKyBXZWJDb3JlL2h0bWwvVVJMSW5wdXRUeXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjMsNCArNjMsOSBAQCBTdHJpbmcgVVJMSW5wdXRUeXBlOjp0eXBl
TWlzbWF0Y2hUZXh0KCkgCiAgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNo
Rm9yVVJMVGV4dCgpOwogfQogCitib29sIFVSTElucHV0VHlwZTo6aXNVUkxGaWVsZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvaHRtbC9VUkxJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
VVJMSW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODU4KQorKysgV2ViQ29yZS9odG1sL1VSTElucHV0
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCBib29sIHR5cGVNaXNtYXRjaEZvcihjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgdHlwZU1pc21hdGNoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgdHlwZU1p
c21hdGNoVGV4dCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1VSTEZpZWxkKCkgY29uc3Q7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77789</attachid>
            <date>2011-01-02 20:20:06 -0800</date>
            <delta_ts>2011-01-02 20:45:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51791-20110102201946.patch</filename>
            <type>text/plain</type>
            <size>143548</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDg3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzgxIEBACisyMDExLTAxLTAyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbGlt
aW5hdGUgSFRNTElucHV0RWxlbWVudDo6bV9kZXByZWNhdGVkVHlwZU51bWJlciwgb3RoZXIgaW5w
dXQgcmVmYWN0b3JpbmcgYW5kIHJlbmFtaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MTc5MQorCisgICAgICAgICogZG9tL0lucHV0RWxlbWVudC5o
OiBNYWtlIHNhbml0aXplVmFsdWVGb3JUZXh0RmllbGQgcHVibGljIHNvIGl0IGNhbgorICAgICAg
ICBiZSBjYWxsZWQgYnkgSW5wdXRUeXBlLgorCisgICAgICAgICogaHRtbC9CYXNlQnV0dG9uSW5w
dXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VCdXR0b25JbnB1dFR5cGU6OmFjY2Vz
c0tleUFjdGlvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QmFzZUJ1dHRvbklucHV0VHlw
ZTo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAgICAgKiBo
dG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0Jhc2VD
aGVja2FibGVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNoZWNrYWJsZUlu
cHV0VHlwZTo6Y2FuU2V0U3RyaW5nVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJh
c2VDaGVja2FibGVJbnB1dFR5cGU6OmFjY2Vzc0tleUFjdGlvbik6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6ZmFsbGJhY2tWYWx1ZSk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6QmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6c3RvcmVzVmFsdWVTZXBh
cmF0ZUZyb21BdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDaGVja2Fi
bGVJbnB1dFR5cGU6OmlzQ2hlY2thYmxlKTogQWRkZWQuCisgICAgICAgICogaHRtbC9CYXNlQ2hl
Y2thYmxlSW5wdXRUeXBlLmg6IERpdHRvLgorCisgICAgICAgICogaHRtbC9CYXNlRGF0ZUFuZFRp
bWVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRU
eXBlOjpoYXNTcGluQnV0dG9uKTogQWRkZWQuCisgICAgICAgICogaHRtbC9CYXNlRGF0ZUFuZFRp
bWVJbnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0Jhc2VUZXh0SW5wdXRUeXBl
Lmg6IE1hZGUgbW9yZSBmdW5jdGlvbnMgcHJpdmF0ZS4KKworICAgICAgICAqIGh0bWwvQnV0dG9u
SW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJ1dHRvbklucHV0VHlwZTo6aXNUZXh0
QnV0dG9uKTogQWRkZWQuCisgICAgICAgICogaHRtbC9CdXR0b25JbnB1dFR5cGUuaDogRGl0dG8u
CisKKyAgICAgICAgKiBodG1sL0NoZWNrYm94SW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNoZWNrYm94SW5wdXRUeXBlOjp3aWxsRGlzcGF0Y2hDbGljayk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2hlY2tib3hJbnB1dFR5cGU6OmRpZERpc3BhdGNoQ2xpY2spOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNoZWNrYm94SW5wdXRUeXBlOjppc0NoZWNrYm94KTogQWRkZWQu
CisgICAgICAgICogaHRtbC9DaGVja2JveElucHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAq
IGh0bWwvRGF0ZVRpbWVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVJ
bnB1dFR5cGU6OnNjYWxlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcik6IEZpeGVkCisgICAgICAg
IHR5cG8gaW4gbmFtZSBvZiB0aGlzIGZ1bmN0aW9uLgorICAgICAgICAqIGh0bWwvRGF0ZVRpbWVJ
bnB1dFR5cGUuaDogRGl0dG8uCisgICAgICAgICogaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTG9jYWxJbnB1dFR5cGU6OnNjYWxlZFN0
ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcik6IERpdHRvLgorICAgICAgICAqIGh0bWwvRGF0ZVRpbWVM
b2NhbElucHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvRW1haWxJbnB1dFR5cGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RW1haWxJbnB1dFR5cGU6OmlzRW1haWxGaWVsZCk6IEFk
ZGVkLgorICAgICAgICAqIGh0bWwvRW1haWxJbnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAg
KiBodG1sL0ZpbGVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlw
ZTo6RmlsZUlucHV0VHlwZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlw
ZTo6Y2FuU2V0U3RyaW5nVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1
dFR5cGU6OmNhbkNoYW5nZUZyb21Bbm90aGVyVHlwZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZUlucHV0VHlwZTo6ZmlsZXMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJ
bnB1dFR5cGU6OmNhblNldFZhbHVlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5w
dXRUeXBlOjpnZXRUeXBlU3BlY2lmaWNWYWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsZUlucHV0VHlwZTo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUpOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OnNldEZpbGVMaXN0KTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjppc0ZpbGVVcGxvYWQpOiBBZGRlZC4KKyAg
ICAgICAgKiBodG1sL0ZpbGVJbnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
SFRNTElucHV0RWxlbWVudCk6IFVwZGF0ZWQgZm9yIGRhdGEgbWVtYmVyCisgICAgICAgIHJlbmFt
aW5nIGFuZCByZW1vdmFsLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNW
YWxpZFZhbHVlKTogQ2FsbCBjYW5TZXRTdHJpbmdWYWx1ZQorICAgICAgICBpbnN0ZWFkIG9mIGNo
ZWNraW5nIHNwZWNpZmljIHR5cGUgbnVtYmVycy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6OmdldEFsbG93ZWRWYWx1ZVN0ZXBXaXRoRGVjaW1hbFBsYWNlcyk6CisgICAgICAg
IFVzZSBmYXN0R2V0QXR0cmlidXRlIGFuZCBmaXhlZCB0eXBvIGluIHRoZSBuYW1lIG9mIHRoZQor
ICAgICAgICBzY2FsZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIgZnVuY3Rpb24uCisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKTogQ2FsbAor
ICAgICAgICBJbnB1dFR5cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGU7IG1vdmVkIG1vc3Qgb2YgdGhl
IHR5cGUtc3BlY2lmaWMKKyAgICAgICAgbG9naWMgdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50OjpzaG91bGRVc2VJbnB1dE1ldGhvZCk6IENhbGwKKyAgICAgICAgSW5w
dXRUeXBlOjpzaG91bGRVc2VJbnB1dE1ldGhvZDsgbW92ZWQgdGhlIHR5cGUtc3BlY2lmaWMgbG9n
aWMgdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpoYW5kbGVCbHVy
RXZlbnQpOiBDYWxsCisgICAgICAgIElucHV0VHlwZTo6aGFuZGxlQmx1ckV2ZW50OyBtb3ZlZCB0
aGUgdHlwZS1zcGVjaWZpYyBsb2dpYyB0aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6OnNldFR5cGUpOiBUd2VhayB0aGUgbmFtZXMgYW5kIHR5cGVzCisgICAgICAgIGlu
IHRoaXMgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRh
dGVUeXBlKTogUmVtb3ZlZCB0aGUgY29kZSB0aGF0CisgICAgICAgIHNldCBtX2RlcHJlY2F0ZWRU
eXBlTnVtYmVyLiBDb21wYXJlIHR5cGVzIGJ5IGNvbXBhcmluZyB0aGUgdmFsdWUKKyAgICAgICAg
ZnJvbSBmb3JtQ29udHJvbFR5cGUuIFJlbW92ZWQgZmlsZS1zcGVjaWZpYyBsb2dpYyBhbmQgaW5z
dGVhZCBjYWxsCisgICAgICAgIElucHV0VHlwZTo6Y2FuQ2hhbmdlRnJvbUFub3RoZXJUeXBlLiBT
dHJlYW1saW5lZCB0aGUgbG9naWMgZm9yCisgICAgICAgIGFjdGl2YXRpb24gY2FsbGJhY2tzLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6YWNjZXNzS2V5QWN0aW9uKTogQ2Fs
bAorICAgICAgICBJbnB1dFR5cGU6OmFjY2Vzc0tleUFjdGlvbjsgbW92ZWQgdGhlIHR5cGUtc3Bl
Y2lmaWMgbG9naWMgdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpt
YXBUb0VudHJ5KTogQ2FsbAorICAgICAgICBJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RIZWlnaHRB
bmRXaWR0aEF0dHJpYnV0ZXMgYW5kCisgICAgICAgIElucHV0VHlwZTo6c2hvdWxkUmVzcGVjdEFs
aWduQXR0cmlidXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUpOiBVcGRhdGVkCisgICAgICAgIGZvciBuYW1lIGNoYW5nZXMgYW5kIHRo
ZSByZW1vdmFsIG9mIG1fZGVmYXVsdENoZWNrZWQuIENoYW5nZWQgdGhlCisgICAgICAgIGFsdCBh
dHRyaWJ1dGUgbG9naWMgdG8gYmUgYmFzZWQgb24gdGhlIGNsYXNzIG9mIHRoZSByZW5kZXJlci4K
KyAgICAgICAgQ2FsbCBJbnB1dFR5cGU6OnNyY0F0dHJpYnV0ZUNoYW5nZWQgYW5kIG1vdmVkIHRo
ZSB0eXBlLXNwZWNpZmljCisgICAgICAgIGxvZ2ljIHRoZXJlLiBDYWxsIHNob3VsZFJlc3BlY3RB
bGlnbkF0dHJpYnV0ZSBhbmQKKyAgICAgICAgc2hvdWxkUmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0
cmlidXRlcyByYXRoZXIgdGhhbiBoYXZpbmcKKyAgICAgICAgdHlwZS1zcGVjaWZpYyBsb2dpYyBo
ZXJlLiBDYWxsIG1pbk9yTWF4QXR0cmlidXRlQ2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQpOiBDYWxsCisgICAgICAgIElucHV0VHlw
ZTo6cmVuZGVyZXJJc05lZWRlZDsgbW92ZWQgdGhlIHR5cGUtc3BlY2lmaWMgbG9naWMgdGhlcmUu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjphdHRhY2gpOiBSZW1vdmVkIHRo
ZSB1bm5lZWRlZCBtX2luaXRlZAorICAgICAgICBmbGFnLCB3aGljaCB3YXMgcmVkdW5kYW50IHdp
dGggdGhlIG1faGF2ZVR5cGUgZmxhZy4gQ2FsbAorICAgICAgICBJbnB1dFR5cGU6OmF0dGFjaDsg
bW92ZWQgdGhlIHR5cGUtc3BlY2lmaWMgbG9naWMgdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50OjphbHRUZXh0KTogVXNlIGZhc3RHZXRBdHRyaWJ1dGUuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0b24pOiBD
YWxsCisgICAgICAgIElucHV0VHlwZTo6Y2FuQmVTdWNjZXNzZnVsU3VibWl0QnV0dG9uOyBtb3Zl
ZCB0aGUgdHlwZS1zcGVjaWZpYworICAgICAgICBsb2dpYyB0aGVyZS4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzQWN0aXZhdGVkU3VibWl0KTogVXBkYXRlZCBmb3IKKyAg
ICAgICAgbmFtZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
c2V0QWN0aXZhdGVkU3VibWl0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50OjpyZXNldCk6IFVwZGF0ZWQgdG8gdXNlCisgICAgICAgIElucHV0VHlwZTo6c3RvcmVz
VmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUuIEFsc28gdXNlCisgICAgICAgIGhhc0F0dHJpYnV0
ZShjaGVja2VkQXR0cikgcmF0aGVyIHRoYW4gbV9kZWZhdWx0Q2hlY2tlZCwKKyAgICAgICAgc2lu
Y2UgYm90aCBhcmUgdGhlIHNhbWUuIEFsc28gdXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UuCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRDaGVja2VkKTogVXBkYXRlZCBmb3Ig
bmFtZQorICAgICAgICBjaGFuZ2VzLiBBbHNvIGFkZGVkIGNhbGwgdG8KKyAgICAgICAgSW5wdXRU
eXBlOjpzaG91bGRTZW5kQ2hhbmdlRXZlbnRBZnRlckNoZWNrZWRDaGFuZ2VkIGFuZAorICAgICAg
ICBtb3ZlZCB0aGUgdHlwZS1zcGVjaWZpYyBsb2dpYyB0aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ6OnNldEluZGV0ZXJtaW5hdGUpOiBDYWxsCisgICAgICAgIGlzQ2hl
Y2thYmxlIHRvIHNlZSBpZiBpbmRldGVybWluYXRlIGlzIGFsbG93ZWQuCisgICAgICAgIEFsc28g
dXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6Y29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXMpOgorICAgICAgICBVcGRhdGVkIGZvciBu
YW1lIGNoYW5nZXMgYW5kIHJlbW92ZWQgZGF0YSBtZW1iZXJzLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudDo6dmFsdWUpOiBDYWxsCisgICAgICAgIElucHV0VHlwZTo6Z2V0VHlw
ZVNwZWNpZmljVmFsdWUgYW5kIElucHV0VHlwZTo6ZmFsbGJhY2tWYWx1ZS4KKyAgICAgICAgTW92
ZWQgdGhlIHR5cGUtc3BlY2lmaWMgbG9naWMgdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50Ojp2YWx1ZVdpdGhEZWZhdWx0KTogQ2FsbAorICAgICAgICBJbnB1dFR5cGU6
OmRlZmF1bHRWYWx1ZS4gTW92ZWQgdGhlIHR5cGUtc3BlY2lmaWMgbG9naWMgdGhlcmUuCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRTdWdnZXN0ZWRWYWx1ZSk6IENhbGwK
KyAgICAgICAgSW5wdXRUeXBlOjpjYW5TZXRTdWdnZXN0ZWRWYWx1ZS4gTW92ZWQgdGhlIHR5cGUt
c3BlY2lmaWMgbG9naWMKKyAgICAgICAgdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50OjpzZXRWYWx1ZSk6IENhbGwKKyAgICAgICAgSW5wdXRUeXBlOjpjYW5TZXRWYWx1
ZS4gTW92ZWQgdGhlIHR5cGUtc3BlY2lmaWMgbG9naWMgdGhlcmUuCisgICAgICAgIENsZWFyIHRo
ZSBmaWxlIGxpc3QgaWYgaXQgZXhpc3RzIHJhdGhlciB0aGFuIGNoZWNraW5nIHRoZQorICAgICAg
ICB0eXBlIGV4cGxpY2l0bHkuIFdlIGNvdWxkIHByb2JhYmx5IGRvIHRoYXQgYSBtb3JlIGVsZWdh
bnQgd2F5LgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cGxhY2Vob2xkZXIp
OiBVc2UgZmFzdEdldEF0dHJpYnV0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ6OnNldFZhbHVlRnJvbVJlbmRlcmVyKTogVXNlIHRoZQorICAgICAgICBpc0ZpbGVVcGxvYWQg
ZnVuY3Rpb24gaW4gdGhlIGFzc2VydGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6OnNldEZpbGVMaXN0RnJvbVJlbmRlcmVyKTogUHV0IG1vc3QKKyAgICAgICAgb2YgdGhl
IGNvZGUgZnJvbSB0aGlzIGZ1bmN0aW9uIGludG8gRmlsZUlucHV0VHlwZTo6c2V0RmlsZUxpc3Qu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpwcmVEaXNwYXRjaEV2ZW50SGFu
ZGxlcik6IENoYW5nZWQKKyAgICAgICAgdG8gY2FsbCBJbnB1dFR5cGU6OndpbGxEaXNwYXRjaENs
aWNrLCB3aGljaCBkb2VzIHRoZSB0eXBlLXNwZWNpZmljCisgICAgICAgIHdvcmsuIFN0aWxsIG5l
ZWQgdG8gdXNlIGEgc2luZ2xlIHN0cnVjdCBmb3IgYWxsIHR5cGVzLCBiZWNhdXNlCisgICAgICAg
IHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50IGNvdWxkIGNoYW5nZSBkdXJpbmcgdGhlIGV2ZW50IGhh
bmRsaW5nLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cG9zdERpc3BhdGNo
RXZlbnRIYW5kbGVyKTogQ2hhbmdlZAorICAgICAgICB0byBjYWxsIElucHV0VHlwZTo6ZGlkRGlz
cGF0Y2hDbGljay4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRW
YWx1ZSk6IFVzZSBmYXN0R2V0QXR0cmlidXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6YWNjZXB0KTogVXNlIGZhc3RHZXRBdHRyaWJ1dGUuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50OjphbHQpOiBVc2UgZmFzdEdldEF0dHJpYnV0ZS4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNyYyk6IFVzZSBmYXN0R2V0QXR0cmlidXRlLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0QXV0b2ZpbGxlZCk6IFVwZGF0
ZWQgZm9yIG5hbWUKKyAgICAgICAgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6OmZpbGVzKTogVXNlIElucHV0VHlwZTo6ZmlsZXMuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50Ojppc0FjY2VwdGFibGVWYWx1ZSk6IFVzZQorICAgICAgICBJbnB1
dFR5cGU6OmlzQWNjZXB0YWJsZVZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6c2FuaXRpemVWYWx1ZSk6IFVzZQorICAgICAgICBJbnB1dFR5cGU6OnNhbml0aXplVmFs
dWUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpoYXNVbmFjY2VwdGFibGVW
YWx1ZSk6IFVzZQorICAgICAgICBJbnB1dFR5cGU6Omhhc1VuYWNjZXB0YWJsZVZhbHVlLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6bmVlZHNBY3RpdmF0aW9uQ2FsbGJhY2sp
OiBVc2UKKyAgICAgICAgSW5wdXRUeXBlOjpzaG91bGRSZXNldE9uRG9jdW1lbnRBY3RpdmF0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVy
RG9jdW1lbnQpOiBVc2UKKyAgICAgICAgSW5wdXRUeXBlOjp3aWxsTW92ZVRvTmV3T3duZXJEb2N1
bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmRhdGFMaXN0KTogVXNl
CisgICAgICAgIElucHV0VHlwZTo6c2hvdWxkUmVzcGVjdExpc3RBdHRyaWJ1dGUuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3RlZE9wdGlvbik6IFR3ZWFrZWQgbG9n
aWMKKyAgICAgICAgYW5kIG5hbWluZyBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6OnN0ZXBVcEZyb21SZW5kZXJlcik6IFVzZQorICAgICAgICBmYXN0R2V0QXR0cmli
dXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNTcGVlY2hFbmFibGVk
KTogVXNlCisgICAgICAgIElucHV0VHlwZTo6c2hvdWxkUmVzcGVjdFNwZWVjaEF0dHJpYnV0ZS4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzVGV4dEJ1dHRvbik6IE5vIGxv
bmdlciBpbmxpbmUuCisgICAgICAgIENhbGxzIHRocm91Z2ggdG8gSW5wdXRUeXBlLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNSYWRpb0J1dHRvbik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNTZWFyY2hGaWVsZCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNJbnB1dFR5cGVIaWRkZW4pOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzUGFzc3dvcmRGaWVs
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNDaGVja2Jv
eCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNUZXh0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc0VtYWlsRmllbGQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzRmlsZVVwbG9h
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNJbWFnZUJ1
dHRvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNOdW1i
ZXJGaWVsZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNT
dWJtaXRCdXR0b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6
OmlzVGVsZXBob25lRmllbGQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6OmlzVVJMRmllbGQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6OmlzRW51bWVyYXRhYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50Ojppc0NoZWNrZWQpOiBObyBsb25nZXIgaW5saW5lLgorICAgICAgICBDYWxscyBJ
bnB1dFR5cGU6OmlzQ2hlY2thYmxlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6aGFzU3BpbkJ1dHRvbik6IE5vIGxvbmdlciBpbmxpbmUuCisgICAgICAgIENhbGxzIHRocm91
Z2ggdG8gSW5wdXRUeXBlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c3Vw
cG9ydHNQbGFjZWhvbGRlcik6IE5vIGxvbmdlcgorICAgICAgICBpbmxpbmUuIENhbGxzIGlzVGV4
dFR5cGUgYXMgYmVmb3JlLCBidXQgd2l0aCBubyBzcGVjaWFsIGNhc2UKKyAgICAgICAgZm9yIElT
SU5ERVguIFRoYXQgc3BlY2lhbCBjYXNlIHdhcyB1bm5lZWRlZCBzaW5jZSBpdCByZXR1cm5zCisg
ICAgICAgIHRydWUgZnJvbSBpc1RleHRUeXBlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6Y2hlY2tlZFJhZGlvQnV0dG9ucyk6IE5vIGxvbmdlcgorICAgICAgICBpbmxpbmUu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudCk6CisgICAgICAgIE5vIGxvbmdlciBpbmxpbmUuCisKKyAgICAgICAgKiBodG1s
L0hUTUxJbnB1dEVsZW1lbnQuaDogUmVtb3ZlZCBtdWx0aXBsZSB1bm5lZWRlZCBpbmNsdWRlcy4K
KyAgICAgICAgVGhlIGJpZyBvbmUgaXMgcHJvYmFibHkgSW5wdXRUeXBlLmgsIGJ1dCBhbHNvIEhU
TUxGb3JtRWxlbWVudC5oLgorICAgICAgICBSZW1vdmVkIHVubmVlZGVkIGZvcndhcmQgZGVjbGFy
YXRpb25zLiBNYWRlIG1hbnkgZnVuY3Rpb25zCisgICAgICAgIG5vIGxvbmdlciBpbmxpbmUgc2lu
Y2UgdGhleSBub3cgbmVlZCB0byBtYWtlIHZpcnR1YWwgZnVuY3Rpb24KKyAgICAgICAgZGlzcGF0
Y2hlcy4gUmVtb3ZlZCB0aGUgdW5uZWVkZWQgZGVmYXVsdENoZWNrZWQgYW5kCisgICAgICAgIHdl
YmtpdGRpcmVjdG9yeSBmdW5jdGlvbnMuIEJvdGggYXJlIGhhbmRsZWQgYnkgSFRNTCBhdHRyaWJ1
dGUKKyAgICAgICAgcmVmbGVjdGlvbiBmb3IgRE9NIGJpbmRpbmdzLCBhbmQgdGhlIGNhbGxlcnMg
aW5zdGVhZCBjYW4gZ2V0CisgICAgICAgIGF0IHRoZSBhdHRyaWJ1dGUuIE1hZGUgdXBkYXRlQ2hl
Y2tlZFJhZGlvQnV0dG9ucyBwdWJsaWMgc28gaXQKKyAgICAgICAgY2FuIGJlIGNhbGxlZCBieSBh
biBJbnB1dFR5cGUgY2xhc3MuIFJlbW92ZWQKKyAgICAgICAgRGVwcmVjYXRlZElucHV0VHlwZSwg
SW5wdXRUeXBlTWFwLCBjcmVhdGVUeXBlTWFwLAorICAgICAgICBkZXByZWNhdGVkSW5wdXRUeXBl
LCBhbGxvd3NJbmRldGVybWluYXRlLAorICAgICAgICByZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRy
cywgc3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUsCisgICAgICAgIG1faW1hZ2VMb2Fk
ZXIsIG1fZmlsZUxpc3QsIG1fZGVwcmVjYXRlZFR5cGVOdW1iZXIsCisgICAgICAgIG1fZGVmYXVs
dENoZWNrZWQsIGFuZCBtX2luaXRlZC4gUmVuYW1lZCBtX2NoZWNrZWQgdG8KKyAgICAgICAgbV9p
c0NoZWNrZWQsIG1fdXNlRGVmYXVsdENoZWNrZWQgdG8gbV9yZWZsZWN0c0NoZWNrZWRBdHRyaWJ1
dGUsCisgICAgICAgIG1faW5kZXRlcm1pbmF0ZSB0b21faXNJbmRldGVybWluYXRlLCBtX2hhdmVU
eXBlIHRvIG1faGFzVHlwZSwKKyAgICAgICAgbV9hY3RpdmVTdWJtaXQgdG8gbV9pc0FjdGl2YXRl
ZFN1Ym1pdCwgYW5kIG1fYXV0b2ZpbGxlZCB0bworICAgICAgICBtX2lzQXV0b2ZpbGxlZC4KKyAg
ICAgICAgCisgICAgICAgICogaHRtbC9IaWRkZW5JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SGlkZGVuSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24pOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhpZGRlbklucHV0VHlwZTo6cmVuZGVyZXJJc05lZWRlZCkgQWRkZWQuOgorICAg
ICAgICAoV2ViQ29yZTo6SGlkZGVuSW5wdXRUeXBlOjpzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0
dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SGlkZGVuSW5wdXRUeXBlOjppc0hp
ZGRlblR5cGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhpZGRlbklucHV0VHlwZTo6c2hv
dWxkUmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0cmlidXRlcyk6IEFkZGVkLgorICAgICAgICAqIGh0
bWwvSGlkZGVuSW5wdXRUeXBlLmg6IERpdHRvLgorCisgICAgICAgICogaHRtbC9JbWFnZUlucHV0
VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUlucHV0VHlwZTo6SW1hZ2VJbnB1dFR5
cGUpOiBNb3ZlZCBvdXQgb2YgdGhlIGhlYWRlciBmaWxlLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VJbnB1dFR5cGU6OnNyY0F0dHJpYnV0ZUNoYW5nZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlSW5wdXRUeXBlOjphdHRhY2gpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlSW5wdXRUeXBlOjp3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RBbGlnbkF0dHJpYnV0ZSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5cGU6OmNhbkJlU3VjY2Vzc2Z1
bFN1Ym1pdEJ1dHRvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5cGU6
OmlzSW1hZ2VCdXR0b24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlSW5wdXRUeXBl
Ojppc0VudW1lcmF0YWJsZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5
cGU6OnNob3VsZFJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJpYnV0ZXMpOiBBZGRlZC4KKyAgICAg
ICAgKiBodG1sL0ltYWdlSW5wdXRUeXBlLmg6IERpdHRvLgorCisgICAgICAgICogaHRtbC9JbnB1
dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpjcmVhdGUpOiBDaGFuZ2Vk
IGFyZ3VtZW50IHR5cGUgdG8gU3RyaW5nLiBUaGVyZQorICAgICAgICBpcyBubyB2YWx1ZSBpbiB0
YWtpbmcgYW4gQXRvbWljU3RyaW5nIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6
OnNjYWxlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcik6IEZpeGVkIHR5cG8gaW4KKyAgICAgICAg
dGhpcyBmdW5jdGlvbiBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpjYW5TZXRT
dHJpbmdWYWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjppc0tleWJv
YXJkRm9jdXNhYmxlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnNob3Vs
ZFVzZUlucHV0TWV0aG9kKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6Omhh
bmRsZUJsdXJFdmVudCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjphY2Nl
c3NLZXlBY3Rpb24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6YXR0YWNo
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnNyY0F0dHJpYnV0ZUNoYW5n
ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6d2lsbE1vdmVUb05ld093
bmVyRG9jdW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2hvdWxk
UmVzcGVjdEFsaWduQXR0cmlidXRlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5
cGU6OmNhbkNoYW5nZUZyb21Bbm90aGVyVHlwZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW5wdXRUeXBlOjptaW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklucHV0VHlwZTo6Y2FuQmVTdWNjZXNzZnVsU3VibWl0QnV0dG9uKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnJlbmRlcmVySXNOZWVkZWQpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6ZmlsZXMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OklucHV0VHlwZTo6Z2V0VHlwZVNwZWNpZmljVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklucHV0VHlwZTo6ZmFsbGJhY2tWYWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW5wdXRUeXBlOjpkZWZhdWx0VmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklu
cHV0VHlwZTo6Y2FuU2V0U3VnZ2VzdGVkVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklucHV0VHlwZTo6c2hvdWxkU2VuZENoYW5nZUV2ZW50QWZ0ZXJDaGVja2VkQ2hhbmdlZCk6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpzdG9yZXNWYWx1ZVNlcGFyYXRlRnJv
bUF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpjYW5TZXRW
YWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjp3aWxsRGlzcGF0Y2hD
bGljayk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpkaWREaXNwYXRjaENs
aWNrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzQWNjZXB0YWJsZVZh
bHVlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnNhbml0aXplVmFsdWUp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6aGFzVW5hY2NlcHRhYmxlVmFs
dWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2V0RmlsZUxpc3QpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2hvdWxkUmVzZXRPbkRvY3VtZW50
QWN0aXZhdGlvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpzaG91bGRS
ZXNwZWN0TGlzdEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBl
OjpzaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbnB1dFR5cGU6OmlzVGV4dEJ1dHRvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5w
dXRUeXBlOjppc1JhZGlvQnV0dG9uKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5
cGU6OmlzU2VhcmNoRmllbGQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6
aXNIaWRkZW5UeXBlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzUGFz
c3dvcmRGaWVsZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjppc0NoZWNr
Ym94KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzRW1haWxGaWVsZCk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjppc0ZpbGVVcGxvYWQpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6aXNJbWFnZUJ1dHRvbik6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjppc051bWJlckZpZWxkKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzU3VibWl0QnV0dG9uKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzVGVsZXBob25lRmllbGQpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklucHV0VHlwZTo6aXNVUkxGaWVsZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW5wdXRUeXBlOjppc0VudW1lcmF0YWJsZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW5wdXRUeXBlOjppc0NoZWNrYWJsZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRU
eXBlOjpoYXNTcGluQnV0dG9uKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6
OnNob3VsZFJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJpYnV0ZXMpOiBBZGRlZC4KKworICAgICAg
ICAqIGh0bWwvSW5wdXRUeXBlLmg6IFJlbW92ZWQgdW5uZWVkZWQgRXhjZXB0aW9uQ29kZS5oIGlu
Y2x1ZGUgYW5kCisgICAgICAgIHVzZWQgYSB0eXBlZGVmIGluc3RlYWQgYXMgd2UgZG8gd2hlbiB3
ZSB3YW50IGZvciBmb3J3YXJkIGRlY2xhcmUgaXQuCisgICAgICAgIEFkZGVkIGluY2x1ZGVzIGFu
ZCBmb3J3YXJkIGRlY2xhcmF0aW9ucyBuZWVkZWQgZm9yIG5ldyBmdW5jdGlvbnMuCisgICAgICAg
IEFkZGVkIENsaWNrSGFuZGxpbmdTdGF0ZSBzdHJ1Y3R1cmUuIENoYW5nZWQgdGhlIGFyZ3VtZW50
IHRvIGNyZWF0ZQorICAgICAgICB0byBhIFN0cmluZyByYXRoZXIgdGhhbiBBdG9taWNTdHJpbmcu
IEFkZGVkIG1hbnkgdmlydHVhbCBmdW5jdGlvbnMuCisgICAgICAgIAorICAgICAgICAqIGh0bWwv
SXNJbmRleElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJc0luZGV4SW5wdXRUeXBl
OjpzaG91bGRSZXNwZWN0TGlzdEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvSXNJ
bmRleElucHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvTnVtYmVySW5wdXRUeXBl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0VHlwZTo6aGFuZGxlQmx1ckV2ZW50
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6OmlzQWNjZXB0YWJs
ZVZhbHVlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6OnNhbml0
aXplVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0VHlwZTo6aGFz
VW5hY2NlcHRhYmxlVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0
VHlwZTo6c2hvdWxkUmVzcGVjdFNwZWVjaEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TnVtYmVySW5wdXRUeXBlOjppc051bWJlckZpZWxkKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6Omhhc1NwaW5CdXR0b24pOiBBZGRlZC4KKyAgICAgICAg
KiBodG1sL051bWJlcklucHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvUGFzc3dv
cmRJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzc3dvcmRJbnB1dFR5cGU6OnNo
b3VsZFVzZUlucHV0TWV0aG9kKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXNzd29yZElu
cHV0VHlwZTo6c2hvdWxkUmVzZXRPbkRvY3VtZW50QWN0aXZhdGlvbik6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UGFzc3dvcmRJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRl
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXNzd29yZElucHV0VHlwZTo6c2hvdWxkUmVz
cGVjdFNwZWVjaEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFzc3dvcmRJ
bnB1dFR5cGU6OmlzUGFzc3dvcmRGaWVsZCk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvUGFzc3dv
cmRJbnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL1JhZGlvSW5wdXRUeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvSW5wdXRUeXBlOjppc0tleWJvYXJkRm9jdXNhYmxl
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSYWRpb0lucHV0VHlwZTo6YXR0YWNoKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYWRpb0lucHV0VHlwZTo6c2hvdWxkU2VuZENoYW5nZUV2
ZW50QWZ0ZXJDaGVja2VkQ2hhbmdlZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9J
bnB1dFR5cGU6OndpbGxEaXNwYXRjaENsaWNrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpS
YWRpb0lucHV0VHlwZTo6ZGlkRGlzcGF0Y2hDbGljayk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmFkaW9JbnB1dFR5cGU6OmlzUmFkaW9CdXR0b24pOiBBZGRlZC4KKyAgICAgICAgKiBodG1s
L1JhZGlvSW5wdXRUeXBlLmg6IERpdHRvLgorCisgICAgICAgICogaHRtbC9SYW5nZUlucHV0VHlw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9u
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6bWluT3JNYXhBdHRy
aWJ1dGVDaGFuZ2VkKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6
ZmFsbGJhY2tWYWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6
OnNhbml0aXplVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlSW5wdXRUeXBl
OjpzaG91bGRSZXNwZWN0TGlzdEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvUmFu
Z2VJbnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL1Jlc2V0SW5wdXRUeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc2V0SW5wdXRUeXBlOjpkZWZhdWx0VmFsdWUpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc2V0SW5wdXRUeXBlOjppc1RleHRCdXR0b24pOiBBZGRl
ZC4KKyAgICAgICAgKiBodG1sL1Jlc2V0SW5wdXRUeXBlLmg6IERpdHRvLgorCisgICAgICAgICog
aHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoSW5wdXRU
eXBlOjpzaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpTZWFyY2hJbnB1dFR5cGU6OmlzU2VhcmNoRmllbGQpOiBBZGRlZC4KKyAgICAgICAgKiBo
dG1sL1NlYXJjaElucHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvU3VibWl0SW5w
dXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1Ym1pdElucHV0VHlwZTo6Y2FuQmVTdWNj
ZXNzZnVsU3VibWl0QnV0dG9uKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdWJtaXRJbnB1
dFR5cGU6OmRlZmF1bHRWYWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3VibWl0SW5w
dXRUeXBlOjppc1N1Ym1pdEJ1dHRvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3VibWl0
SW5wdXRUeXBlOjppc1RleHRCdXR0b24pOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL1N1Ym1pdElu
cHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvVGVsZXBob25lSW5wdXRUeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRlbGVwaG9uZUlucHV0VHlwZTo6c2hvdWxkUmVzcGVjdFNw
ZWVjaEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGVsZXBob25lSW5wdXRU
eXBlOjppc1RlbGVwaG9uZUZpZWxkKTogQWRkZWQuCisgICAgICAgICogaHRtbC9UZWxlcGhvbmVJ
bnB1dFR5cGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZFVzZUlucHV0
TWV0aG9kKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OnNh
bml0aXplVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlw
ZTo6c2hvdWxkUmVzcGVjdExpc3RBdHRyaWJ1dGUpOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL1Rl
eHRGaWVsZElucHV0VHlwZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvVGV4dElucHV0VHlw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SW5wdXRUeXBlOjpjYW5TZXRTdWdnZXN0ZWRW
YWx1ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dElucHV0VHlwZTo6c2hvdWxkUmVz
cGVjdFNwZWVjaEF0dHJpYnV0ZSk6IEFkZGVkLgorICAgICAgICAqIGh0bWwvVGV4dElucHV0VHlw
ZS5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvVGltZUlucHV0VHlwZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUaW1lSW5wdXRUeXBlOjpzY2FsZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIp
OiBGaXhlZAorICAgICAgICB0eXBvIGluIHRoZSBuYW1lIG9mIHRoaXMgZnVuY3Rpb24uCisgICAg
ICAgICogaHRtbC9UaW1lSW5wdXRUeXBlLmg6IERpdHRvLgorCisgICAgICAgICogaHRtbC9VUkxJ
bnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VVJMSW5wdXRUeXBlOjppc1VSTEZpZWxk
KTogQWRkZWQuCisgICAgICAgICogaHRtbC9VUkxJbnB1dFR5cGUuaDogRGl0dG8uCisKIDIwMTEt
MDEtMDIgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
W0NNYWtlXSBVbnJldmlld2VkIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYkNvcmUvZG9tL0lucHV0RWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oCShyZXZpc2lv
biA3NDg3MSkKKysrIFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03NSw2ICs3NSwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGludCBzX21heGltdW1M
ZW5ndGg7CiAgICAgc3RhdGljIGNvbnN0IGludCBzX2RlZmF1bHRTaXplOwogCisgICAgLy8gUmVw
bGFjZXMgQ1JzIGFuZCBMRnMsIHNocmlua3MgdGhlIHZhbHVlIGZvciBzX21heGltdW1MZW5ndGgu
CisgICAgLy8gVGhpcyBzaG91bGQgYmUgYXBwbGllZCB0byB2YWx1ZXMgZnJvbSB0aGUgSFRNTCB2
YWx1ZSBhdHRyaWJ1dGUgYW5kIHRoZSBET00gdmFsdWUgcHJvcGVydHkuCisgICAgLy8gVGhpcyBm
dW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYnkgc2FuaXRpemVWYWx1ZSgpIGltcGxlbWVu
dGF0aW9ucy4KKyAgICAvLyBQdWJsaWMgc28gaXQgY2FuIGJlIGNhbGxlZCBieSBJbnB1dFR5cGUu
CisgICAgc3RhdGljIFN0cmluZyBzYW5pdGl6ZVZhbHVlRm9yVGV4dEZpZWxkKGNvbnN0IElucHV0
RWxlbWVudCosIGNvbnN0IFN0cmluZyYpOworCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQg
ZGlzcGF0Y2hGb2N1c0V2ZW50KElucHV0RWxlbWVudCosIEVsZW1lbnQqKTsKICAgICBzdGF0aWMg
dm9pZCBkaXNwYXRjaEJsdXJFdmVudChJbnB1dEVsZW1lbnQqLCBFbGVtZW50Kik7CkBAIC04Miwx
MCArODgsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgdXBkYXRlU2VsZWN0aW9uUmFu
Z2UoSW5wdXRFbGVtZW50KiwgRWxlbWVudCosIGludCBzdGFydCwgaW50IGVuZCk7CiAgICAgc3Rh
dGljIHZvaWQgYWJvdXRUb1VubG9hZChJbnB1dEVsZW1lbnQqLCBFbGVtZW50Kik7CiAgICAgc3Rh
dGljIHZvaWQgc2V0VmFsdWVGcm9tUmVuZGVyZXIoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0RWxl
bWVudCosIEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmKTsKLSAgICAvLyBSZXBsYWNlcyBDUnMgYW5k
IExGcywgc2hyaW5rcyB0aGUgdmFsdWUgZm9yIHNfbWF4aW11bUxlbmd0aC4KLSAgICAvLyBUaGlz
IHNob3VsZCBiZSBhcHBsaWVkIHRvIHZhbHVlcyBmcm9tIHRoZSBIVE1MIHZhbHVlIGF0dHJpYnV0
ZSBhbmQgdGhlIERPTSB2YWx1ZSBwcm9wZXJ0eS4KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3Vs
ZCBiZSBjYWxsZWQgb25seSBieSBzYW5pdGl6ZVZhbHVlKCkgaW1wbGVtZW50YXRpb25zLgotICAg
IHN0YXRpYyBTdHJpbmcgc2FuaXRpemVWYWx1ZUZvclRleHRGaWVsZChjb25zdCBJbnB1dEVsZW1l
bnQqLCBjb25zdCBTdHJpbmcmKTsKICAgICAvLyBSZXBsYWNlcyBDUnMgYW5kIExGcywgc2hyaW5r
cyB0aGUgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBsZW5ndGguCiAgICAgLy8gVGhp
cyBzaG91bGQgYmUgYXBwbGllZCB0byB2YWx1ZXMgc3BlY2lmaWVkIGJ5IHVzZXJzLgogICAgIC8v
IFRoZSBpbnB1dCBzdHJpbmcgbWF5IGJlIGEgZnJhZ21lbnQgb2YgdGhlIHdob2xlIHZhbHVlLgpJ
bmRleDogV2ViQ29yZS9odG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9CYXNlQnV0dG9uSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4NzEpCisr
KyBXZWJDb3JlL2h0bWwvQmFzZUJ1dHRvbklucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtODEs
NCArODIsMTkgQEAgUmVuZGVyT2JqZWN0KiBCYXNlQnV0dG9uSW5wdXRUeXBlOjpjcmVhdAogICAg
IHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJCdXR0b24oZWxlbWVudCgpKTsKIH0KIAorLy8gRklY
TUU6IENvdWxkIHNoYXJlIHRoaXMgd2l0aCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlIGFuZCBSYW5n
ZUlucHV0VHlwZSBpZiB3ZSBoYWQgYSBjb21tb24gYmFzZSBjbGFzcy4KK3ZvaWQgQmFzZUJ1dHRv
bklucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCkKK3sKKyAg
ICBJbnB1dFR5cGU6OmFjY2Vzc0tleUFjdGlvbihzZW5kVG9BbnlFbGVtZW50KTsKKworICAgIC8v
IFNlbmQgbW91c2UgYnV0dG9uIGV2ZW50cyBpZiB0aGUgY2FsbGVyIHNwZWNpZmllZCBzZW5kVG9B
bnlFbGVtZW50LgorICAgIC8vIEZJWE1FOiBUaGUgY29tbWVudCBhYm92ZSBpcyBubyBnb29kLiBJ
dCBzYXlzIHdoYXQgd2UgZG8sIGJ1dCBub3Qgd2h5LgorICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hT
aW11bGF0ZWRDbGljaygwLCBzZW5kVG9BbnlFbGVtZW50KTsKK30KKworYm9vbCBCYXNlQnV0dG9u
SW5wdXRUeXBlOjpzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpCit7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0
bWwvQmFzZUJ1dHRvbklucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9CYXNl
QnV0dG9uSW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODcxKQorKysgV2ViQ29yZS9odG1sL0Jhc2VC
dXR0b25JbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOCBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlwcmVzc0V2ZW50KEtleWJvYXJkRXZlbnQqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5dXBFdmVudChLZXlib2FyZEV2ZW50Kik7CiAgICAg
dmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVy
U3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wgc2Vu
ZFRvQW55RWxlbWVudCk7CisgICAgdmlydHVhbCBib29sIHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9t
QXR0cmlidXRlKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2h0bWwvQmFzZUNoZWNrYWJsZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0Jhc2VDaGVja2FibGVJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3NDg3MSkKKysrIFdlYkNv
cmUvaHRtbC9CYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC03Niw0ICs3
NywzNCBAQCB2b2lkIEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OmhhbmRsZUtleXByCiAgICAgfQog
fQogCitib29sIEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OmNhblNldFN0cmluZ1ZhbHVlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIEZJWE1FOiBDb3VsZCBzaGFyZSB0aGlz
IHdpdGggQmFzZUJ1dHRvbklucHV0VHlwZSBhbmQgUmFuZ2VJbnB1dFR5cGUgaWYgd2UgaGFkIGEg
Y29tbW9uIGJhc2UgY2xhc3MuCit2b2lkIEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OmFjY2Vzc0tl
eUFjdGlvbihib29sIHNlbmRUb0FueUVsZW1lbnQpCit7CisgICAgSW5wdXRUeXBlOjphY2Nlc3NL
ZXlBY3Rpb24oc2VuZFRvQW55RWxlbWVudCk7CisKKyAgICAvLyBTZW5kIG1vdXNlIGJ1dHRvbiBl
dmVudHMgaWYgdGhlIGNhbGxlciBzcGVjaWZpZWQgc2VuZFRvQW55RWxlbWVudC4KKyAgICAvLyBG
SVhNRTogVGhlIGNvbW1lbnQgYWJvdmUgaXMgbm8gZ29vZC4gSXQgc2F5cyB3aGF0IHdlIGRvLCBi
dXQgbm90IHdoeS4KKyAgICBlbGVtZW50KCktPmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soMCwgc2Vu
ZFRvQW55RWxlbWVudCk7Cit9CisKK1N0cmluZyBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjpmYWxs
YmFja1ZhbHVlKCkKK3sKKyAgICByZXR1cm4gZWxlbWVudCgpLT5jaGVja2VkKCkgPyAib24iIDog
IiI7Cit9CisKK2Jvb2wgQmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6c3RvcmVzVmFsdWVTZXBhcmF0
ZUZyb21BdHRyaWJ1dGUoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCYXNlQ2hl
Y2thYmxlSW5wdXRUeXBlOjppc0NoZWNrYWJsZSgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9CYXNlQ2hlY2thYmxl
SW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0Jhc2VDaGVja2FibGVJbnB1
dFR5cGUuaAkocmV2aXNpb24gNzQ4NzEpCisrKyBXZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJsZUlu
cHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMSBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgdm9pZCByZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBTdHJpbmcmKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleXByZXNzRXZlbnQoS2V5Ym9hcmRFdmVu
dCopOworICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRTdHJpbmdWYWx1ZSgpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KTsKKyAgICB2
aXJ0dWFsIFN0cmluZyBmYWxsYmFja1ZhbHVlKCk7CisgICAgdmlydHVhbCBib29sIHN0b3Jlc1Zh
bHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCk7CisgICAgdmlydHVhbCBib29sIGlzQ2hlY2thYmxl
KCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvQmFz
ZURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQmFz
ZURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4NzEpCisrKyBXZWJDb3JlL2h0
bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDQg
KzE3NCw5IEBAIFN0cmluZyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNlcmlhbGkKICAgICBy
ZXR1cm4gZGF0ZS50b1N0cmluZyhEYXRlQ29tcG9uZW50czo6TWlsbGlzZWNvbmQpOwogfQogCiti
b29sIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6aGFzU3BpbkJ1dHRvbigpCit7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRt
bC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODcxKQorKysgV2ViQ29yZS9o
dG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSAr
NDIsMTAgQEAgcHJvdGVjdGVkOgogICAgIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZShIVE1MSW5w
dXRFbGVtZW50KiBlbGVtZW50KSA6IFRleHRGaWVsZElucHV0VHlwZShlbGVtZW50KSB7IH0KICAg
ICB2aXJ0dWFsIGRvdWJsZSBwYXJzZVRvRG91YmxlKGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIHBhcnNlVG9EYXRlQ29tcG9uZW50cyhjb25zdCBTdHJpbmcm
LCBEYXRlQ29tcG9uZW50cyopIGNvbnN0OwotICAgIC8vIEEgaGVscGVyIGZvciBwYXJzZVRvRGF0
ZUNvbXBvbmVudHMoKS4KLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VUb0RhdGVDb21wb25lbnRzSW50
ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIERhdGVDb21wb25lbnRzKikgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzZXRNaWxsaXNlY29uZFRvRGF0ZUNvbXBvbmVudHMo
ZG91YmxlLCBEYXRlQ29tcG9uZW50cyopIGNvbnN0ID0gMDsKIAogcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VUb0RhdGVDb21wb25lbnRzSW50ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNp
Z25lZCBsZW5ndGgsIERhdGVDb21wb25lbnRzKikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBzZXRNaWxsaXNlY29uZFRvRGF0ZUNvbXBvbmVudHMoZG91YmxlLCBEYXRlQ29tcG9uZW50cyop
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGRvdWJsZSB2YWx1ZUFzRGF0ZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRGF0ZShkb3VibGUsIEV4Y2VwdGlvbkNvZGUmKSBjb25z
dDsKICAgICB2aXJ0dWFsIGRvdWJsZSB2YWx1ZUFzTnVtYmVyKCkgY29uc3Q7CkBAIC02Miw2ICs2
MSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWRvd25FdmVudChLZXli
b2FyZEV2ZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoV2hlZWxFdmVu
dCopOwogICAgIHZpcnR1YWwgU3RyaW5nIHNlcmlhbGl6ZShkb3VibGUpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBoYXNTcGluQnV0dG9uKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2h0bWwvQmFzZVRleHRJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvQmFzZVRleHRJbnB1dFR5cGUuaAkocmV2aXNpb24gNzQ4NzEpCisrKyBXZWJD
b3JlL2h0bWwvQmFzZVRleHRJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBCYXNlVGV4dElucHV0VHlwZSA6IHB1Ymxp
YyBUZXh0RmllbGRJbnB1dFR5cGUgewogcHJvdGVjdGVkOgogICAgIEJhc2VUZXh0SW5wdXRUeXBl
KEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogVGV4dEZpZWxkSW5wdXRUeXBlKGVsZW1lbnQp
IHsgfQorcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0VHlwZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBwYXR0ZXJuTWlzbWF0Y2goY29uc3QgU3RyaW5nJikgY29uc3Q7CiB9OwpJ
bmRleDogV2ViQ29yZS9odG1sL0J1dHRvbklucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0J1dHRvbklucHV0VHlwZS5jcHAJKHJldmlzaW9uIDc0ODcxKQorKysgV2ViQ29y
ZS9odG1sL0J1dHRvbklucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDQgKzUwLDkg
QEAgYm9vbCBCdXR0b25JbnB1dFR5cGU6OnN1cHBvcnRzVmFsaWRhdGlvbgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAorYm9vbCBCdXR0b25JbnB1dFR5cGU6OmlzVGV4dEJ1dHRvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvaHRtbC9CdXR0b25JbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
QnV0dG9uSW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODcxKQorKysgV2ViQ29yZS9odG1sL0J1dHRv
bklucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIHByaXZhdGU6CiAg
ICAgQnV0dG9uSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogQmFzZUJ1dHRv
bklucHV0VHlwZShlbGVtZW50KSB7IH0KICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVmFsaWRh
dGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1RleHRCdXR0b24oKSBjb25zdDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9DaGVja2JveElu
cHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NoZWNrYm94SW5wdXRUeXBl
LmNwcAkocmV2aXNpb24gNzQ4NzEpCisrKyBXZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKQEAgLTY2LDQgKzY3LDM4IEBAIHZvaWQgQ2hlY2tib3hJbnB1dFR5cGU6
OmhhbmRsZUtleXVwRXZlbnQKICAgICBkaXNwYXRjaFNpbXVsYXRlZENsaWNrSWZBY3RpdmUoZXZl
bnQpOwogfQogCitQYXNzT3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gQ2hlY2tib3hJbnB1dFR5
cGU6OndpbGxEaXNwYXRjaENsaWNrKCkKK3sKKyAgICAvLyBBbiBldmVudCBoYW5kbGVyIGNhbiB1
c2UgcHJldmVudERlZmF1bHQgb3IgInJldHVybiBmYWxzZSIgdG8gcmV2ZXJzZSB0aGUgY2hlY2tp
bmcgd2UgZG8gaGVyZS4KKyAgICAvLyBUaGUgQ2xpY2tIYW5kbGluZ1N0YXRlIG9iamVjdCBjb250
YWlucyB3aGF0IHdlIG5lZWQgdG8gdW5kbyB3aGF0IHdlIGRpZCBoZXJlIGluIGRpZERpc3BhdGNo
Q2xpY2suCisKKyAgICBPd25QdHI8Q2xpY2tIYW5kbGluZ1N0YXRlPiBzdGF0ZSA9IGFkb3B0UHRy
KG5ldyBDbGlja0hhbmRsaW5nU3RhdGUpOworCisgICAgc3RhdGUtPmNoZWNrZWQgPSBlbGVtZW50
KCktPmNoZWNrZWQoKTsKKyAgICBzdGF0ZS0+aW5kZXRlcm1pbmF0ZSA9IGVsZW1lbnQoKS0+aW5k
ZXRlcm1pbmF0ZSgpOworCisgICAgaWYgKHN0YXRlLT5pbmRldGVybWluYXRlKQorICAgICAgICBl
bGVtZW50KCktPnNldEluZGV0ZXJtaW5hdGUoZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgZWxl
bWVudCgpLT5zZXRDaGVja2VkKCFzdGF0ZS0+Y2hlY2tlZCwgdHJ1ZSk7CisKKyAgICByZXR1cm4g
c3RhdGUucmVsZWFzZSgpOworfQorCit2b2lkIENoZWNrYm94SW5wdXRUeXBlOjpkaWREaXNwYXRj
aENsaWNrKEV2ZW50KiBldmVudCwgY29uc3QgQ2xpY2tIYW5kbGluZ1N0YXRlJiBzdGF0ZSkKK3sK
KyAgICBpZiAoZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCBldmVudC0+ZGVmYXVsdEhhbmRs
ZWQoKSkgeworICAgICAgICBlbGVtZW50KCktPnNldEluZGV0ZXJtaW5hdGUoc3RhdGUuaW5kZXRl
cm1pbmF0ZSk7CisgICAgICAgIGVsZW1lbnQoKS0+c2V0Q2hlY2tlZChzdGF0ZS5jaGVja2VkKTsK
KyAgICB9CisKKyAgICAvLyBUaGUgd29yayB3ZSBkaWQgaW4gd2lsbERpc3BhdGNoQ2xpY2sgd2Fz
IGRlZmF1bHQgaGFuZGxpbmcuCisgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisK
K2Jvb2wgQ2hlY2tib3hJbnB1dFR5cGU6OmlzQ2hlY2tib3goKSBjb25zdAoreworICAgIHJldHVy
biB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwv
Q2hlY2tib3hJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2hlY2tib3hJ
bnB1dFR5cGUuaAkocmV2aXNpb24gNzQ4NzEpCisrKyBXZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1
dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOSBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCB2YWx1ZU1pc3NpbmcoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdmlydHVh
bCBTdHJpbmcgdmFsdWVNaXNzaW5nVGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVLZXl1cEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q2xp
Y2tIYW5kbGluZ1N0YXRlPiB3aWxsRGlzcGF0Y2hDbGljaygpOworICAgIHZpcnR1YWwgdm9pZCBk
aWREaXNwYXRjaENsaWNrKEV2ZW50KiwgY29uc3QgQ2xpY2tIYW5kbGluZ1N0YXRlJik7CisgICAg
dmlydHVhbCBib29sIGlzQ2hlY2tib3goKSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9EYXRlVGltZUlucHV0VHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4NzEp
CisrKyBXZWJDb3JlL2h0bWwvRGF0ZVRpbWVJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OSw3ICs3OSw3IEBAIGRvdWJsZSBEYXRlVGltZUlucHV0VHlwZTo6c3RlcFNjYWxlRmFjdG8K
ICAgICByZXR1cm4gZGF0ZVRpbWVTdGVwU2NhbGVGYWN0b3I7CiB9CiAKLWJvb2wgRGF0ZVRpbWVJ
bnB1dFR5cGU6OnNjYWxlZFN0ZXBWYWxldVNob3VsZEJlSW50ZWdlcigpIGNvbnN0Citib29sIERh
dGVUaW1lSW5wdXRUeXBlOjpzY2FsZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIoKSBjb25zdAog
ewogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0RhdGVUaW1lSW5wdXRU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmgJKHJl
dmlzaW9uIDc0ODcxKQorKysgV2ViQ29yZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGRvdWJsZSBt
YXhpbXVtKCkgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgZGVmYXVsdFN0ZXAoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGRvdWJsZSBzdGVwU2NhbGVGYWN0b3IoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgc2NhbGVkU3RlcFZhbGV1U2hvdWxkQmVJbnRlZ2VyKCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIHNjYWxlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcigpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBwYXJzZVRvRGF0ZUNvbXBvbmVudHNJbnRlcm5hbChjb25zdCBVQ2hhciosIHVuc2ln
bmVkIGxlbmd0aCwgRGF0ZUNvbXBvbmVudHMqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2V0
TWlsbGlzZWNvbmRUb0RhdGVDb21wb25lbnRzKGRvdWJsZSwgRGF0ZUNvbXBvbmVudHMqKSBjb25z
dDsKIH07CkluZGV4OiBXZWJDb3JlL2h0bWwvRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuY3BwCShyZXZp
c2lvbiA3NDg3MSkKKysrIFdlYkNvcmUvaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBkb3VibGUgRGF0ZVRpbWVMb2NhbElucHV0
VHlwZTo6c3RlcFNjYWxlCiAgICAgcmV0dXJuIGRhdGVUaW1lTG9jYWxTdGVwU2NhbGVGYWN0b3I7
CiB9CiAKLWJvb2wgRGF0ZVRpbWVMb2NhbElucHV0VHlwZTo6c2NhbGVkU3RlcFZhbGV1U2hvdWxk
QmVJbnRlZ2VyKCkgY29uc3QKK2Jvb2wgRGF0ZVRpbWVMb2NhbElucHV0VHlwZTo6c2NhbGVkU3Rl
cFZhbHVlU2hvdWxkQmVJbnRlZ2VyKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5k
ZXg6IFdlYkNvcmUvaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuaAkocmV2aXNpb24gNzQ4NzEpCisr
KyBXZWJDb3JlL2h0bWwvRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw3ICs0OCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBkb3VibGUgbWF4aW11bSgpIGNv
bnN0OwogICAgIHZpcnR1YWwgZG91YmxlIGRlZmF1bHRTdGVwKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBkb3VibGUgc3RlcFNjYWxlRmFjdG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNjYWxl
ZFN0ZXBWYWxldVNob3VsZEJlSW50ZWdlcigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzY2Fs
ZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VUb0RhdGVDb21wb25lbnRzSW50ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgs
IERhdGVDb21wb25lbnRzKikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNldE1pbGxpc2Vjb25k
VG9EYXRlQ29tcG9uZW50cyhkb3VibGUsIERhdGVDb21wb25lbnRzKikgY29uc3Q7CiB9OwpJbmRl
eDogV2ViQ29yZS9odG1sL0VtYWlsSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvRW1haWxJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3NDg3MSkKKysrIFdlYkNvcmUvaHRt
bC9FbWFpbElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDQgKzg1LDkgQEAgU3Ry
aW5nIEVtYWlsSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2hUZXh0KAogICAgIHJldHVybiBlbGVtZW50
KCktPm11bHRpcGxlKCkgPyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvck11bHRpcGxl
RW1haWxUZXh0KCkgOiB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvckVtYWlsVGV4dCgp
OwogfQogCitib29sIEVtYWlsSW5wdXRUeXBlOjppc0VtYWlsRmllbGQoKSBjb25zdAoreworICAg
IHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2h0bWwvRW1haWxJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRW1haWxJ
bnB1dFR5cGUuaAkocmV2aXNpb24gNzQ4NzEpCisrKyBXZWJDb3JlL2h0bWwvRW1haWxJbnB1dFR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgYm9vbCB0eXBlTWlzbWF0Y2hGb3IoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIHR5cGVNaXNtYXRjaCgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHR5cGVNaXNt
YXRjaFRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbWFpbEZpZWxkKCkgY29uc3Q7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvRmlsZUlu
cHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3Bw
CShyZXZpc2lvbiA3NDg3MSkKKysrIFdlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKQEAgLTI1LDggKzI1LDEwIEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJGaWxl
LmgiCiAjaW5jbHVkZSAiRmlsZUxpc3QuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5j
bHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNs
dWRlICJSZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CkBAIC0zNCw2ICszNiwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3VzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CisKK2lubGluZSBGaWxlSW5wdXRUeXBlOjpGaWxlSW5wdXRUeXBl
KEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCisgICAgOiBCYXNlQnV0dG9uSW5wdXRUeXBlKGVs
ZW1lbnQpCisgICAgLCBtX2ZpbGVMaXN0KEZpbGVMaXN0OjpjcmVhdGUoKSkKK3sKK30KKwogUGFz
c093blB0cjxJbnB1dFR5cGU+IEZpbGVJbnB1dFR5cGU6OmNyZWF0ZShIVE1MSW5wdXRFbGVtZW50
KiBlbGVtZW50KQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmlsZUlucHV0VHlwZShlbGVt
ZW50KSk7CkBAIC05Niw0ICsxMDYsOTEgQEAgUmVuZGVyT2JqZWN0KiBGaWxlSW5wdXRUeXBlOjpj
cmVhdGVSZW5kZQogICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJGaWxlVXBsb2FkQ29udHJv
bChlbGVtZW50KCkpOwogfQogCitib29sIEZpbGVJbnB1dFR5cGU6OmNhblNldFN0cmluZ1ZhbHVl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRmlsZUlucHV0VHlwZTo6
Y2FuQ2hhbmdlRnJvbUFub3RoZXJUeXBlKCkgY29uc3QKK3sKKyAgICAvLyBEb24ndCBhbGxvdyB0
aGUgdHlwZSB0byBiZSBjaGFuZ2VkIHRvIGZpbGUgYWZ0ZXIgdGhlIGZpcnN0IHR5cGUgY2hhbmdl
LgorICAgIC8vIEluIG90aGVyIGVuZ2luZXMgdGhpcyBtaWdodCBtZWFuIGEgSmF2YVNjcmlwdCBw
cm9ncmFtbWVyIGNvdWxkIHNldCBhIHRleHQKKyAgICAvLyBmaWVsZCdzIHZhbHVlIHRvIHNvbWV0
aGluZyBsaWtlIC9ldGMvcGFzc3dkIGFuZCB0aGVuIGNoYW5nZSBpdCB0byBhIGZpbGUgaW5wdXQu
CisgICAgLy8gSSBkb24ndCB0aGluayB0aGlzIHdvdWxkIGFjdHVhbGx5IG9jY3VyIGluIFdlYktp
dCwgYnV0IHRoaXMgcnVsZSBzdGlsbCBtYXkgYmUKKyAgICAvLyBpbXBvcnRhbnQgZm9yIGNvbXBh
dGliaWxpdHkuCisgICAgcmV0dXJuIGZhbHNlOworfQorCitGaWxlTGlzdCogRmlsZUlucHV0VHlw
ZTo6ZmlsZXMoKQoreworICAgIHJldHVybiBtX2ZpbGVMaXN0LmdldCgpOworfQorCitib29sIEZp
bGVJbnB1dFR5cGU6OmNhblNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgLy8g
Rm9yIHNlY3VyaXR5IHJlYXNvbnMsIHdlIGRvbid0IGFsbG93IHNldHRpbmcgdGhlIGZpbGVuYW1l
LCBidXQgd2UgZG8gYWxsb3cgY2xlYXJpbmcgaXQuCisgICAgLy8gVGhlIEhUTUw1IHNwZWMgKGFz
IG9mIHRoZSAxMC8yNC8wOCB3b3JraW5nIGRyYWZ0KSBzYXlzIHRoYXQgdGhlIHZhbHVlIGF0dHJp
YnV0ZSBpc24ndAorICAgIC8vIGFwcGxpY2FibGUgdG8gdGhlIGZpbGUgdXBsb2FkIGNvbnRyb2wg
YXQgYWxsLCBidXQgZm9yIG5vdyB3ZSBhcmUga2VlcGluZyB0aGlzIGJlaGF2aW9yCisgICAgLy8g
dG8gYXZvaWQgYnJlYWtpbmcgZXhpc3Rpbmcgd2Vic2l0ZXMgdGhhdCBtYXkgYmUgcmVseWluZyBv
biB0aGlzLgorICAgIHJldHVybiB2YWx1ZS5pc0VtcHR5KCk7Cit9CisKK2Jvb2wgRmlsZUlucHV0
VHlwZTo6Z2V0VHlwZVNwZWNpZmljVmFsdWUoU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAobV9m
aWxlTGlzdC0+aXNFbXB0eSgpKSB7CisgICAgICAgIHZhbHVlID0gU3RyaW5nKCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIEhUTUw1IHRlbGxzIHVzIHRoYXQgd2UncmUg
c3VwcG9zZWQgdG8gdXNlIHRoaXMgZ29vZnkgdmFsdWUgZm9yCisgICAgLy8gZmlsZSBpbnB1dCBj
b250cm9scy4gSGlzdG9yaWNhbGx5LCBicm93c2VycyByZXZlYWxlZCB0aGUgcmVhbAorICAgIC8v
IGZpbGUgcGF0aCwgYnV0IHRoYXQncyBhIHByaXZhY3kgcHJvYmxlbS4gQ29kZSBvbiB0aGUgd2Vi
CisgICAgLy8gZGVjaWRlZCB0byB0cnkgdG8gcGFyc2UgdGhlIHZhbHVlIGJ5IGxvb2tpbmcgZm9y
IGJhY2tzbGFzaGVzCisgICAgLy8gKGJlY2F1c2UgdGhhdCdzIHdoYXQgV2luZG93cyBmaWxlIHBh
dGhzIHVzZSkuIFRvIGJlIGNvbXBhdGlibGUKKyAgICAvLyB3aXRoIHRoYXQgY29kZSwgd2UgbWFr
ZSB1cCBhIGZha2UgcGF0aCBmb3IgdGhlIGZpbGUuCisgICAgdmFsdWUgPSAiQzpcXGZha2VwYXRo
XFwiICsgbV9maWxlTGlzdC0+aXRlbSgwKS0+ZmlsZU5hbWUoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBGaWxlSW5wdXRUeXBlOjpzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0
ZSgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRmlsZUlucHV0VHlwZTo6c2V0Rmls
ZUxpc3QoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIG1fZmlsZUxpc3QtPmNs
ZWFyKCk7CisgICAgc2l6ZV90IHNpemUgPSBwYXRocy5zaXplKCk7CisKKyNpZiBFTkFCTEUoRElS
RUNUT1JZX1VQTE9BRCkKKyAgICAvLyBJZiBhIGRpcmVjdG9yeSBpcyBiZWluZyBzZWxlY3RlZCwg
dGhlIFVJIGFsbG93cyBhIGRpcmVjdG9yeSB0byBiZSBjaG9zZW4KKyAgICAvLyBhbmQgdGhlIHBh
dGhzIHByb3ZpZGVkIGhlcmUgc2hhcmUgYSByb290IGRpcmVjdG9yeSBzb21ld2hlcmUgdXAgdGhl
IHRyZWU7CisgICAgLy8gd2Ugd2FudCB0byBzdG9yZSBvbmx5IHRoZSByZWxhdGl2ZSBwYXRocyBm
cm9tIHRoYXQgcG9pbnQuCisgICAgaWYgKHNpemUgJiYgZWxlbWVudCgpLT5mYXN0SGFzQXR0cmli
dXRlKHdlYmtpdGRpcmVjdG9yeUF0dHIpKSB7CisgICAgICAgIC8vIEZpbmQgdGhlIGNvbW1vbiBy
b290IHBhdGguCisgICAgICAgIFN0cmluZyByb290UGF0aCA9IGRpcmVjdG9yeU5hbWUocGF0aHNb
MF0pOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7IGkrKykgeworICAgICAg
ICAgICAgd2hpbGUgKCFwYXRoc1tpXS5zdGFydHNXaXRoKHJvb3RQYXRoKSkKKyAgICAgICAgICAg
ICAgICByb290UGF0aCA9IGRpcmVjdG9yeU5hbWUocm9vdFBhdGgpOworICAgICAgICB9CisgICAg
ICAgIHJvb3RQYXRoID0gZGlyZWN0b3J5TmFtZShyb290UGF0aCk7CisgICAgICAgIEFTU0VSVChy
b290UGF0aC5sZW5ndGgoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKSB7CisgICAgICAgICAgICAvLyBOb3JtYWxpemUgYmFja3NsYXNoZXMgdG8gc2xhc2hlcyBi
ZWZvcmUgZXhwb3NpbmcgdGhlIHJlbGF0aXZlIHBhdGggdG8gc2NyaXB0LgorICAgICAgICAgICAg
U3RyaW5nIHJlbGF0aXZlUGF0aCA9IHBhdGhzW2ldLnN1YnN0cmluZygxICsgcm9vdFBhdGgubGVu
Z3RoKCkpLnJlcGxhY2UoJ1xcJywgJy8nKTsKKyAgICAgICAgICAgIG1fZmlsZUxpc3QtPmFwcGVu
ZChGaWxlOjpjcmVhdGUocmVsYXRpdmVQYXRoLCBwYXRoc1tpXSkpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKQorICAgICAgICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHBhdGhz
W2ldKSk7Cit9CisKK2Jvb2wgRmlsZUlucHV0VHlwZTo6aXNGaWxlVXBsb2FkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRmls
ZUlucHV0VHlwZS5oCShyZXZpc2lvbiA3NDg3MSkKKysrIFdlYkNvcmUvaHRtbC9GaWxlSW5wdXRU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQpAQCAtMzIsMjEgKzMzLDM0IEBACiAjZGVmaW5lIEZpbGVJbnB1dFR5
cGVfaAogCiAjaW5jbHVkZSAiQmFzZUJ1dHRvbklucHV0VHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGaWxlTGlzdDsKKwogY2xh
c3MgRmlsZUlucHV0VHlwZSA6IHB1YmxpYyBCYXNlQnV0dG9uSW5wdXRUeXBlIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRFbGVtZW50
Kik7CiAKIHByaXZhdGU6Ci0gICAgRmlsZUlucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50KiBlbGVt
ZW50KSA6IEJhc2VCdXR0b25JbnB1dFR5cGUoZWxlbWVudCkgeyB9CisgICAgRmlsZUlucHV0VHlw
ZShIVE1MSW5wdXRFbGVtZW50Kik7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZv
cm1Db250cm9sVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBhcHBlbmRGb3JtRGF0YShG
b3JtRGF0YUxpc3QmLCBib29sKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgdmFsdWVNaXNzaW5n
KGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlTWlzc2luZ1Rl
eHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVu
dCopOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSosIFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGNhblNldFN0cmluZ1Zh
bHVlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGNhbkNoYW5nZUZyb21Bbm90aGVyVHlwZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgRmlsZUxpc3QqIGZpbGVzKCk7CisgICAgdmlydHVhbCBib29s
IGNhblNldFZhbHVlKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRUeXBlU3Bl
Y2lmaWNWYWx1ZShTdHJpbmcmKTsgLy8gQ2hlY2tlZCBmaXJzdCwgYmVmb3JlIGludGVybmFsIHN0
b3JhZ2Ugb3IgdGhlIHZhbHVlIGF0dHJpYnV0ZS4KKyAgICB2aXJ0dWFsIGJvb2wgc3RvcmVzVmFs
dWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUxpc3Qo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNGaWxlVXBs
b2FkKCkgY29uc3Q7CisKKyAgICBSZWZQdHI8RmlsZUxpc3Q+IG1fZmlsZUxpc3Q7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA3NDg3MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDYg
QWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA3
IFNhbXVlbCBXZWluaWcgKHNhbUB3ZWJraXQub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0zMSwyMyArMzEsMTMgQEAKICNpbmNs
dWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oIgog
I2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIK
LSNpbmNsdWRlICJEYXRlQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRWRpdG9yLmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudEhhbmRs
ZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgotI2luY2x1ZGUgIkZpbGUuaCIKICNpbmNsdWRlICJGaWxlTGlzdC5oIgotI2luY2x1ZGUgIkZp
bGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJGb3Jt
RGF0YUxpc3QuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9u
LmgiCiAjaW5jbHVkZSAiSFRNTERhdGFMaXN0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3Jt
RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxJbWFnZUxvYWRlci5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFBh
cnNlcklkaW9tcy5oIgpAQCAtNTUsMjIgKzQ1LDEzIEBACiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVu
dC5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckZpbGVVcGxvYWRDb250cm9s
LmgiCi0jaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJSZW5k
ZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRl
ICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRl
ICJTdGVwUmFuZ2UuaCIKLSNpbmNsdWRlICJUZXh0RXZlbnQuaCIKICNpbmNsdWRlICJXaGVlbEV2
ZW50LmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTgzLDE2ICs2NCwxMyBA
QCBjb25zdCBpbnQgbWF4U2F2ZWRSZXN1bHRzID0gMjU2OwogSFRNTElucHV0RWxlbWVudDo6SFRN
TElucHV0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
dW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKICAgICA6IEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBmb3JtKQogICAgICwgbV9tYXhSZXN1bHRzKC0xKQot
ICAgICwgbV9kZXByZWNhdGVkVHlwZU51bWJlcihURVhUKQotICAgICwgbV9jaGVja2VkKGZhbHNl
KQotICAgICwgbV9kZWZhdWx0Q2hlY2tlZChmYWxzZSkKLSAgICAsIG1fdXNlRGVmYXVsdENoZWNr
ZWQodHJ1ZSkKLSAgICAsIG1faW5kZXRlcm1pbmF0ZShmYWxzZSkKLSAgICAsIG1faGF2ZVR5cGUo
ZmFsc2UpCi0gICAgLCBtX2FjdGl2ZVN1Ym1pdChmYWxzZSkKKyAgICAsIG1faXNDaGVja2VkKGZh
bHNlKQorICAgICwgbV9yZWZsZWN0c0NoZWNrZWRBdHRyaWJ1dGUodHJ1ZSkKKyAgICAsIG1faXNJ
bmRldGVybWluYXRlKGZhbHNlKQorICAgICwgbV9oYXNUeXBlKGZhbHNlKQorICAgICwgbV9pc0Fj
dGl2YXRlZFN1Ym1pdChmYWxzZSkKICAgICAsIG1fYXV0b2NvbXBsZXRlKFVuaW5pdGlhbGl6ZWQp
Ci0gICAgLCBtX2F1dG9maWxsZWQoZmFsc2UpCi0gICAgLCBtX2luaXRlZChmYWxzZSkKKyAgICAs
IG1faXNBdXRvZmlsbGVkKGZhbHNlKQogICAgICwgbV9pbnB1dFR5cGUoSW5wdXRUeXBlOjpjcmVh
dGVUZXh0KHRoaXMpKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGlucHV0VGFnKSB8fCBoYXNU
YWdOYW1lKGlzaW5kZXhUYWcpKTsKQEAgLTE2Nyw5ICsxNDUsNyBAQCB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OnVwZGF0ZUNoZWNrZWRSYWRpCiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNWYWxp
ZFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7Ci0gICAgLy8gU2hvdWxkIG5vdCBj
YWxsIGlzVmFsaWRWYWx1ZSgpIGZvciB0aGUgZm9sbG93aW5nIHR5cGVzIGJlY2F1c2UKLSAgICAv
LyB3ZSBjYW4ndCBzZXQgc3RyaW5nIHZhbHVlcyBmb3IgdGhlc2UgdHlwZXMuCi0gICAgaWYgKGRl
cHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBDSEVDS0JPWCB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkg
PT0gRklMRSB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gUkFESU8pIHsKKyAgICBpZiAoIW1f
aW5wdXRUeXBlLT5jYW5TZXRTdHJpbmdWYWx1ZSgpKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMjkzLDcgKzI2OSw3IEBA
IGJvb2wgSFRNTElucHV0RWxlbWVudDo6Z2V0QWxsb3dlZFZhbHVlU3QKICAgICBkb3VibGUgc3Rl
cFNjYWxlRmFjdG9yID0gbV9pbnB1dFR5cGUtPnN0ZXBTY2FsZUZhY3RvcigpOwogICAgIGlmICgh
aXNmaW5pdGUoZGVmYXVsdFN0ZXApIHx8ICFpc2Zpbml0ZShzdGVwU2NhbGVGYWN0b3IpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGVwU3RyaW5nID0g
Z2V0QXR0cmlidXRlKHN0ZXBBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0ZXBTdHJp
bmcgPSBmYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKTsKICAgICBpZiAoc3RlcFN0cmluZy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgKnN0ZXAgPSBkZWZhdWx0U3RlcCAqIHN0ZXBTY2FsZUZhY3RvcjsK
ICAgICAgICAgaWYgKGRlY2ltYWxQbGFjZXMpCkBAIC0zMjAsNyArMjk2LDcgQEAgYm9vbCBIVE1M
SW5wdXRFbGVtZW50OjpnZXRBbGxvd2VkVmFsdWVTdAogICAgICAgICBwYXJzZWQgPSBtYXgocm91
bmQocGFyc2VkKSwgMS4wKTsKICAgICBkb3VibGUgcmVzdWx0ID0gcGFyc2VkICogc3RlcFNjYWxl
RmFjdG9yOwogICAgIC8vIEZvciBkYXRldGltZSwgZGF0ZXRpbWUtbG9jYWwsIHRpbWUsIHRoZSBy
ZXN1bHQgc2hvdWxkIGJlIGFuIGludGVnZXIuCi0gICAgaWYgKG1faW5wdXRUeXBlLT5zY2FsZWRT
dGVwVmFsZXVTaG91bGRCZUludGVnZXIoKSkKKyAgICBpZiAobV9pbnB1dFR5cGUtPnNjYWxlZFN0
ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcigpKQogICAgICAgICByZXN1bHQgPSBtYXgocm91bmQocmVz
dWx0KSwgMS4wKTsKICAgICBBU1NFUlQocmVzdWx0ID4gMCk7CiAgICAgKnN0ZXAgPSByZXN1bHQ7
CkBAIC0zODksMzMgKzM2NSw5IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c3RlcERvd24oaW50
IG4sIEUKIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJv
YXJkRXZlbnQqIGV2ZW50KSBjb25zdAogewotICAgIC8vIElmIHRleHQgZmllbGRzIGNhbiBiZSBm
b2N1c2VkLCB0aGVuIHRoZXkgc2hvdWxkIGFsd2F5cyBiZSBrZXlib2FyZCBmb2N1c2FibGUKICAg
ICBpZiAoaXNUZXh0RmllbGQoKSkKICAgICAgICAgcmV0dXJuIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGU6OmlzRm9jdXNhYmxlKCk7Ci0gICAgICAgIAotICAgIC8vIElmIHRoZSBiYXNl
IGNsYXNzIHNheXMgd2UgY2FuJ3QgYmUgZm9jdXNlZCwgdGhlbiB3ZSBjYW4gc3RvcCBub3cuCi0g
ICAgaWYgKCFIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjppc0tleWJvYXJkRm9jdXNh
YmxlKGV2ZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGRlcHJlY2F0ZWRJ
bnB1dFR5cGUoKSA9PSBSQURJTykgewotICAgICAgICAvLyBXaGVuIHVzaW5nIFNwYXRpYWwgTmF2
aWdhdGlvbiwgZXZlcnkgcmFkaW8gYnV0dG9uIHNob3VsZCBiZSBmb2N1c2FibGUuCi0gICAgICAg
IGlmIChpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChkb2N1bWVudCgpLT5mcmFtZSgpKSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIC8vIE5ldmVyIGFsbG93IGtleWJvYXJk
IHRhYmJpbmcgdG8gbGVhdmUgeW91IGluIHRoZSBzYW1lIHJhZGlvIGdyb3VwLiAgQWx3YXlzCi0g
ICAgICAgIC8vIHNraXAgYW55IG90aGVyIGVsZW1lbnRzIGluIHRoZSBncm91cC4KLSAgICAgICAg
Tm9kZSogY3VycmVudEZvY3VzZWROb2RlID0gZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsKLSAg
ICAgICAgaWYgKGN1cnJlbnRGb2N1c2VkTm9kZSAmJiBjdXJyZW50Rm9jdXNlZE5vZGUtPmhhc1Rh
Z05hbWUoaW5wdXRUYWcpKSB7Ci0gICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBmb2N1c2Vk
SW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oY3VycmVudEZvY3VzZWROb2Rl
KTsKLSAgICAgICAgICAgIGlmIChmb2N1c2VkSW5wdXQtPmRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9
PSBSQURJTyAmJiBmb2N1c2VkSW5wdXQtPmZvcm0oKSA9PSBmb3JtKCkgJiYgZm9jdXNlZElucHV0
LT5uYW1lKCkgPT0gbmFtZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgLy8gQWxsb3cga2V5Ym9hcmQgZm9jdXMgaWYgd2UncmUg
Y2hlY2tlZCBvciBpZiBub3RoaW5nIGluIHRoZSBncm91cCBpcyBjaGVja2VkLgotICAgICAgICBy
ZXR1cm4gY2hlY2tlZCgpIHx8ICFjaGVja2VkUmFkaW9CdXR0b25zKCkuY2hlY2tlZEJ1dHRvbkZv
ckdyb3VwKG5hbWUoKSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjppc0tleWJvYXJkRm9jdXNhYmxlKGV2
ZW50KSAmJiBtX2lucHV0VHlwZS0+aXNLZXlib2FyZEZvY3VzYWJsZSgpOwogfQogCiBib29sIEhU
TUxJbnB1dEVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUoKSBjb25zdApAQCAtNDQwLDExICszOTIs
NyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmFib3V0VG9VbmxvYWQoKQogCiBib29sIEhUTUxJ
bnB1dEVsZW1lbnQ6OnNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3QKIHsKLSAgICAvLyBUaGUg
cmVhc29uIElNRSdzIGFyZSBkaXNhYmxlZCBmb3IgdGhlIHBhc3N3b3JkIGZpZWxkIGlzIGJlY2F1
c2UgSU1FcyAKLSAgICAvLyBjYW4gYWNjZXNzIHRoZSB1bmRlcmx5aW5nIHBhc3N3b3JkIGFuZCBk
aXNwbGF5IGl0IGluIGNsZWFyIHRleHQgLS0KLSAgICAvLyBlLmcuIHlvdSBjYW4gdXNlIGl0IHRv
IGFjY2VzcyB0aGUgc3RvcmVkIHBhc3N3b3JkIGZvciBhbnkgc2l0ZSAKLSAgICAvLyB3aXRoIG9u
bHkgdHJpdmlhbCBlZmZvcnQuCi0gICAgcmV0dXJuIGlzVGV4dEZpZWxkKCkgJiYgZGVwcmVjYXRl
ZElucHV0VHlwZSgpICE9IFBBU1NXT1JEOworICAgIHJldHVybiBtX2lucHV0VHlwZS0+c2hvdWxk
VXNlSW5wdXRNZXRob2QoKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpoYW5kbGVGb2N1
c0V2ZW50KCkKQEAgLTQ1NCwxMzUgKzQwMiw5MiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6Omhh
bmRsZUZvY3VzRXZlbnQoCiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6aGFuZGxlQmx1ckV2ZW50
KCkKIHsKLSAgICBpZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IE5VTUJFUikgewotICAgICAg
ICAvLyBSZXNldCB0aGUgcmVuZGVyZXIgdmFsdWUsIHdoaWNoIG1pZ2h0IGJlIHVubWF0Y2hlZCB3
aXRoIHRoZSBlbGVtZW50IHZhbHVlLgotICAgICAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hl
c1JlbmRlcmVyKGZhbHNlKTsKLSAgICAgICAgLy8gV2UgbmVlZCB0byByZXNldCB0aGUgcmVuZGVy
ZXIgdmFsdWUgZXhwbGljaXRseSBiZWNhdXNlIGFuIHVuYWNjZXB0YWJsZQotICAgICAgICAvLyBy
ZW5kZXJlciB2YWx1ZSBzaG91bGQgYmUgcHVyZ2VkIGJlZm9yZSBzdHlsZSBjYWxjdWxhdGlvbi4K
LSAgICAgICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVG
cm9tRWxlbWVudCgpOwotICAgIH0KKyAgICBtX2lucHV0VHlwZS0+aGFuZGxlQmx1ckV2ZW50KCk7
CiAgICAgSW5wdXRFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCh0aGlzLCB0aGlzKTsKIH0KIAot
dm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyYgdCkKK3ZvaWQgSFRN
TElucHV0RWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGp1c3QgY2FsbCBzZXRBdHRyaWJ1dGUuIE5vIHJlYXNvbiB0byBoYW5k
bGUgdGhlIGVtcHR5IHN0cmluZyBzcGVjaWFsbHkuCiAgICAgLy8gV2Ugc2hvdWxkIHdyaXRlIGEg
dGVzdCBjYXNlIHRvIHNob3cgdGhhdCBzZXR0aW5nIHRvIHRoZSBlbXB0eSBzdHJpbmcgZG9lcyBu
b3QgcmVtb3ZlIHRoZQogICAgIC8vIGF0dHJpYnV0ZSBpbiBvdGhlciBicm93c2VycyBhbmQgdGhl
biBmaXggdGhpcy4gTm90ZSB0aGF0IHNldHRpbmcgdG8gbnVsbCAqZG9lcyogcmVtb3ZlCiAgICAg
Ly8gdGhlIGF0dHJpYnV0ZSBhbmQgc2V0QXR0cmlidXRlIGltcGxlbWVudHMgdGhhdC4KLSAgICBp
ZiAodC5pc0VtcHR5KCkpIHsKLSAgICAgICAgaW50IGV4Y2NvZGU7Ci0gICAgICAgIHJlbW92ZUF0
dHJpYnV0ZSh0eXBlQXR0ciwgZXhjY29kZSk7CisgICAgaWYgKHR5cGUuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgIHJlbW92ZUF0dHJpYnV0ZSh0eXBlQXR0
ciwgZWMpOwogICAgIH0gZWxzZQotICAgICAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHQpOwot
fQotCi1QYXNzT3duUHRyPEhUTUxJbnB1dEVsZW1lbnQ6OklucHV0VHlwZU1hcD4gSFRNTElucHV0
RWxlbWVudDo6Y3JlYXRlVHlwZU1hcCgpCi17Ci0gICAgT3duUHRyPElucHV0VHlwZU1hcD4gbWFw
ID0gYWRvcHRQdHIobmV3IElucHV0VHlwZU1hcCk7Ci0gICAgbWFwLT5hZGQoImJ1dHRvbiIsIEJV
VFRPTik7Ci0gICAgbWFwLT5hZGQoImNoZWNrYm94IiwgQ0hFQ0tCT1gpOwotICAgIG1hcC0+YWRk
KCJjb2xvciIsIENPTE9SKTsKLSAgICBtYXAtPmFkZCgiZGF0ZSIsIERBVEUpOwotICAgIG1hcC0+
YWRkKCJkYXRldGltZSIsIERBVEVUSU1FKTsKLSAgICBtYXAtPmFkZCgiZGF0ZXRpbWUtbG9jYWwi
LCBEQVRFVElNRUxPQ0FMKTsKLSAgICBtYXAtPmFkZCgiZW1haWwiLCBFTUFJTCk7Ci0gICAgbWFw
LT5hZGQoImZpbGUiLCBGSUxFKTsKLSAgICBtYXAtPmFkZCgiaGlkZGVuIiwgSElEREVOKTsKLSAg
ICBtYXAtPmFkZCgiaW1hZ2UiLCBJTUFHRSk7Ci0gICAgbWFwLT5hZGQoImtodG1sX2lzaW5kZXgi
LCBJU0lOREVYKTsKLSAgICBtYXAtPmFkZCgibW9udGgiLCBNT05USCk7Ci0gICAgbWFwLT5hZGQo
Im51bWJlciIsIE5VTUJFUik7Ci0gICAgbWFwLT5hZGQoInBhc3N3b3JkIiwgUEFTU1dPUkQpOwot
ICAgIG1hcC0+YWRkKCJyYWRpbyIsIFJBRElPKTsKLSAgICBtYXAtPmFkZCgicmFuZ2UiLCBSQU5H
RSk7Ci0gICAgbWFwLT5hZGQoInJlc2V0IiwgUkVTRVQpOwotICAgIG1hcC0+YWRkKCJzZWFyY2gi
LCBTRUFSQ0gpOwotICAgIG1hcC0+YWRkKCJzdWJtaXQiLCBTVUJNSVQpOwotICAgIG1hcC0+YWRk
KCJ0ZWwiLCBURUxFUEhPTkUpOwotICAgIG1hcC0+YWRkKCJ0aW1lIiwgVElNRSk7Ci0gICAgbWFw
LT5hZGQoInVybCIsIFVSTCk7Ci0gICAgbWFwLT5hZGQoIndlZWsiLCBXRUVLKTsKLSAgICAvLyBO
byBuZWVkIHRvIHJlZ2lzdGVyICJ0ZXh0IiBiZWNhdXNlIGl0IGlzIHRoZSBkZWZhdWx0IHR5cGUu
Ci0gICAgcmV0dXJuIG1hcC5yZWxlYXNlKCk7CisgICAgICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0
ciwgdHlwZSk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6dXBkYXRlVHlwZSgpCiB7Ci0g
ICAgc3RhdGljIGNvbnN0IElucHV0VHlwZU1hcCogdHlwZU1hcCA9IGNyZWF0ZVR5cGVNYXAoKS5s
ZWFrUHRyKCk7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlU3RyaW5nID0gZmFzdEdldEF0
dHJpYnV0ZSh0eXBlQXR0cik7Ci0gICAgRGVwcmVjYXRlZElucHV0VHlwZSBuZXdUeXBlID0gdHlw
ZVN0cmluZy5pc0VtcHR5KCkgPyBURVhUIDogdHlwZU1hcC0+Z2V0KHR5cGVTdHJpbmcpOwogCi0g
ICAgLy8gSU1QT1JUQU5UOiBEb24ndCBhbGxvdyB0aGUgdHlwZSB0byBiZSBjaGFuZ2VkIHRvIEZJ
TEUgYWZ0ZXIgdGhlIGZpcnN0Ci0gICAgLy8gdHlwZSBjaGFuZ2UsIG90aGVyd2lzZSBhIEphdmFT
Y3JpcHQgcHJvZ3JhbW1lciB3b3VsZCBiZSBhYmxlIHRvIHNldCBhIHRleHQKLSAgICAvLyBmaWVs
ZCdzIHZhbHVlIHRvIHNvbWV0aGluZyBsaWtlIC9ldGMvcGFzc3dkIGFuZCB0aGVuIGNoYW5nZSBp
dCB0byBhIGZpbGUgZmllbGQuCi0gICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSAhPSBuZXdU
eXBlKSB7Ci0gICAgICAgIGlmIChuZXdUeXBlID09IEZJTEUgJiYgbV9oYXZlVHlwZSkKLSAgICAg
ICAgICAgIC8vIFNldCB0aGUgYXR0cmlidXRlIGJhY2sgdG8gdGhlIG9sZCB2YWx1ZS4KLSAgICAg
ICAgICAgIC8vIFVzZWZ1bCBpbiBjYXNlIHdlIHdlcmUgY2FsbGVkIGZyb20gaW5zaWRlIHBhcnNl
TWFwcGVkQXR0cmlidXRlLgotICAgICAgICAgICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB0eXBl
KCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5y
ZW1vdmVCdXR0b24odGhpcyk7CisgICAgT3duUHRyPElucHV0VHlwZT4gbmV3VHlwZSA9IElucHV0
VHlwZTo6Y3JlYXRlKHRoaXMsIHR5cGVTdHJpbmcpOwogCi0gICAgICAgICAgICBpZiAobmV3VHlw
ZSA9PSBGSUxFICYmICFtX2ZpbGVMaXN0KQotICAgICAgICAgICAgICAgIG1fZmlsZUxpc3QgPSBG
aWxlTGlzdDo6Y3JlYXRlKCk7CisgICAgaWYgKG1faGFzVHlwZSAmJiAhbmV3VHlwZS0+Y2FuQ2hh
bmdlRnJvbUFub3RoZXJUeXBlKCkpIHsKKyAgICAgICAgLy8gU2V0IHRoZSBhdHRyaWJ1dGUgYmFj
ayB0byB0aGUgb2xkIHZhbHVlLgorICAgICAgICAvLyBVc2VmdWwgaW4gY2FzZSB3ZSB3ZXJlIGNh
bGxlZCBmcm9tIGluc2lkZSBwYXJzZU1hcHBlZEF0dHJpYnV0ZS4KKyAgICAgICAgc2V0QXR0cmli
dXRlKHR5cGVBdHRyLCB0eXBlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgICAg
ICAgICBib29sIHdhc0F0dGFjaGVkID0gYXR0YWNoZWQoKTsKLSAgICAgICAgICAgIGlmICh3YXNB
dHRhY2hlZCkKLSAgICAgICAgICAgICAgICBkZXRhY2goKTsKLQotICAgICAgICAgICAgYm9vbCBk
aWRTdG9yZVZhbHVlID0gc3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKTsKLSAgICAg
ICAgICAgIGJvb2wgd2FzUGFzc3dvcmRGaWVsZCA9IGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBQ
QVNTV09SRDsKLSAgICAgICAgICAgIGJvb2wgZGlkUmVzcGVjdEhlaWdodEFuZFdpZHRoID0gcmVz
cGVjdEhlaWdodEFuZFdpZHRoQXR0cnMoKTsKLSAgICAgICAgICAgIG1fZGVwcmVjYXRlZFR5cGVO
dW1iZXIgPSBuZXdUeXBlOwotICAgICAgICAgICAgbV9pbnB1dFR5cGUgPSBJbnB1dFR5cGU6OmNy
ZWF0ZSh0aGlzLCB0eXBlU3RyaW5nKTsKLSAgICAgICAgICAgIHNldE5lZWRzV2lsbFZhbGlkYXRl
Q2hlY2soKTsKLSAgICAgICAgICAgIGJvb2wgd2lsbFN0b3JlVmFsdWUgPSBzdG9yZXNWYWx1ZVNl
cGFyYXRlRnJvbUF0dHJpYnV0ZSgpOwotICAgICAgICAgICAgYm9vbCBpc1Bhc3N3b3JkRmllbGQg
PSBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gUEFTU1dPUkQ7Ci0gICAgICAgICAgICBib29sIHdp
bGxSZXNwZWN0SGVpZ2h0QW5kV2lkdGggPSByZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRycygpOwot
Ci0gICAgICAgICAgICBpZiAoZGlkU3RvcmVWYWx1ZSAmJiAhd2lsbFN0b3JlVmFsdWUgJiYgIW1f
ZGF0YS52YWx1ZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlKHZh
bHVlQXR0ciwgbV9kYXRhLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgIG1fZGF0YS5zZXRWYWx1
ZShTdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWRpZFN0b3JlVmFs
dWUgJiYgd2lsbFN0b3JlVmFsdWUpCi0gICAgICAgICAgICAgICAgbV9kYXRhLnNldFZhbHVlKHNh
bml0aXplVmFsdWUoZ2V0QXR0cmlidXRlKHZhbHVlQXR0cikpKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBJbnB1dEVsZW1lbnQ6OnVwZGF0ZVZhbHVlSWZOZWVkZWQobV9kYXRh
LCB0aGlzKTsKKyAgICBtX2hhc1R5cGUgPSB0cnVlOwogCi0gICAgICAgICAgICBpZiAod2FzUGFz
c3dvcmRGaWVsZCAmJiAhaXNQYXNzd29yZEZpZWxkKQotICAgICAgICAgICAgICAgIHVucmVnaXN0
ZXJGb3JBY3RpdmF0aW9uQ2FsbGJhY2tJZk5lZWRlZCgpOwotICAgICAgICAgICAgZWxzZSBpZiAo
IXdhc1Bhc3N3b3JkRmllbGQgJiYgaXNQYXNzd29yZEZpZWxkKQotICAgICAgICAgICAgICAgIHJl
Z2lzdGVyRm9yQWN0aXZhdGlvbkNhbGxiYWNrSWZOZWVkZWQoKTsKKyAgICBpZiAobV9pbnB1dFR5
cGUtPmZvcm1Db250cm9sVHlwZSgpID09IG5ld1R5cGUtPmZvcm1Db250cm9sVHlwZSgpKQorICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIGlmIChkaWRSZXNwZWN0SGVpZ2h0QW5kV2lkdGgg
IT0gd2lsbFJlc3BlY3RIZWlnaHRBbmRXaWR0aCkgewotICAgICAgICAgICAgICAgIE5hbWVkTm9k
ZU1hcCogbWFwID0gYXR0cmlidXRlTWFwKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1hcCk7
Ci0gICAgICAgICAgICAgICAgaWYgKEF0dHJpYnV0ZSogaGVpZ2h0ID0gbWFwLT5nZXRBdHRyaWJ1
dGVJdGVtKGhlaWdodEF0dHIpKQotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVDaGFuZ2Vk
KGhlaWdodCwgZmFsc2UpOwotICAgICAgICAgICAgICAgIGlmIChBdHRyaWJ1dGUqIHdpZHRoID0g
bWFwLT5nZXRBdHRyaWJ1dGVJdGVtKHdpZHRoQXR0cikpCi0gICAgICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZUNoYW5nZWQod2lkdGgsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBpZiAoQXR0cmli
dXRlKiBhbGlnbiA9IG1hcC0+Z2V0QXR0cmlidXRlSXRlbShhbGlnbkF0dHIpKQotICAgICAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkKGFsaWduLCBmYWxzZSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICh3YXNBdHRhY2hlZCkgewotICAgICAgICAgICAgICAgIGF0dGFj
aCgpOwotICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IHRo
aXMpCi0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUZvY3VzQXBwZWFyYW5jZSh0cnVlKTsKLSAg
ICAgICAgICAgIH0KKyAgICBjaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKHRoaXMp
OwogCi0gICAgICAgICAgICBjaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwot
ICAgICAgICB9CisgICAgYm9vbCB3YXNBdHRhY2hlZCA9IGF0dGFjaGVkKCk7CisgICAgaWYgKHdh
c0F0dGFjaGVkKQorICAgICAgICBkZXRhY2goKTsKIAotICAgICAgICBzZXROZWVkc1ZhbGlkaXR5
Q2hlY2soKTsKLSAgICAgICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRo
aXMpOworICAgIGJvb2wgZGlkU3RvcmVWYWx1ZSA9IG1faW5wdXRUeXBlLT5zdG9yZXNWYWx1ZVNl
cGFyYXRlRnJvbUF0dHJpYnV0ZSgpOworICAgIGJvb2wgbmVlZGVkQWN0aXZhdGlvbkNhbGxiYWNr
ID0gbmVlZHNBY3RpdmF0aW9uQ2FsbGJhY2soKTsKKyAgICBib29sIGRpZFJlc3BlY3RIZWlnaHRB
bmRXaWR0aCA9IG1faW5wdXRUeXBlLT5zaG91bGRSZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRyaWJ1
dGVzKCk7CisKKyAgICBtX2lucHV0VHlwZSA9IG5ld1R5cGUucmVsZWFzZSgpOworCisgICAgc2V0
TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOworCisgICAgYm9vbCB3aWxsU3RvcmVWYWx1ZSA9IG1f
aW5wdXRUeXBlLT5zdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpOworCisgICAgaWYg
KGRpZFN0b3JlVmFsdWUgJiYgIXdpbGxTdG9yZVZhbHVlICYmICFtX2RhdGEudmFsdWUoKS5pc051
bGwoKSkgeworICAgICAgICBzZXRBdHRyaWJ1dGUodmFsdWVBdHRyLCBtX2RhdGEudmFsdWUoKSk7
CisgICAgICAgIG1fZGF0YS5zZXRWYWx1ZShTdHJpbmcoKSk7CisgICAgfQorICAgIGlmICghZGlk
U3RvcmVWYWx1ZSAmJiB3aWxsU3RvcmVWYWx1ZSkKKyAgICAgICAgbV9kYXRhLnNldFZhbHVlKHNh
bml0aXplVmFsdWUoZmFzdEdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpKSk7CisgICAgZWxzZQorICAg
ICAgICBJbnB1dEVsZW1lbnQ6OnVwZGF0ZVZhbHVlSWZOZWVkZWQobV9kYXRhLCB0aGlzKTsKKwor
ICAgIGlmIChuZWVkZWRBY3RpdmF0aW9uQ2FsbGJhY2spCisgICAgICAgIHVucmVnaXN0ZXJGb3JB
Y3RpdmF0aW9uQ2FsbGJhY2tJZk5lZWRlZCgpOworICAgIGVsc2UKKyAgICAgICAgcmVnaXN0ZXJG
b3JBY3RpdmF0aW9uQ2FsbGJhY2tJZk5lZWRlZCgpOworCisgICAgaWYgKGRpZFJlc3BlY3RIZWln
aHRBbmRXaWR0aCAhPSBtX2lucHV0VHlwZS0+c2hvdWxkUmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0
cmlidXRlcygpKSB7CisgICAgICAgIE5hbWVkTm9kZU1hcCogbWFwID0gYXR0cmlidXRlTWFwKCk7
CisgICAgICAgIEFTU0VSVChtYXApOworICAgICAgICBpZiAoQXR0cmlidXRlKiBoZWlnaHQgPSBt
YXAtPmdldEF0dHJpYnV0ZUl0ZW0oaGVpZ2h0QXR0cikpCisgICAgICAgICAgICBhdHRyaWJ1dGVD
aGFuZ2VkKGhlaWdodCwgZmFsc2UpOworICAgICAgICBpZiAoQXR0cmlidXRlKiB3aWR0aCA9IG1h
cC0+Z2V0QXR0cmlidXRlSXRlbSh3aWR0aEF0dHIpKQorICAgICAgICAgICAgYXR0cmlidXRlQ2hh
bmdlZCh3aWR0aCwgZmFsc2UpOworICAgICAgICBpZiAoQXR0cmlidXRlKiBhbGlnbiA9IG1hcC0+
Z2V0QXR0cmlidXRlSXRlbShhbGlnbkF0dHIpKQorICAgICAgICAgICAgYXR0cmlidXRlQ2hhbmdl
ZChhbGlnbiwgZmFsc2UpOwogICAgIH0KLSAgICBtX2hhdmVUeXBlID0gdHJ1ZTsKIAotICAgIGlm
IChkZXByZWNhdGVkSW5wdXRUeXBlKCkgIT0gSU1BR0UgJiYgbV9pbWFnZUxvYWRlcikKLSAgICAg
ICAgbV9pbWFnZUxvYWRlci5jbGVhcigpOworICAgIGlmICh3YXNBdHRhY2hlZCkgeworICAgICAg
ICBhdHRhY2goKTsKKyAgICAgICAgaWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgPT0gdGhp
cykKKyAgICAgICAgICAgIHVwZGF0ZUZvY3VzQXBwZWFyYW5jZSh0cnVlKTsKKyAgICB9CisKKyAg
ICBjaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOworCisgICAgc2V0TmVlZHNW
YWxpZGl0eUNoZWNrKCk7CisgICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2Vk
KHRoaXMpOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxJbnB1dEVsZW1lbnQ6OmZvcm1D
b250cm9sVHlwZSgpIGNvbnN0CkBAIC02MTQsNTggKzUxOSwyMiBAQCBib29sIEhUTUxJbnB1dEVs
ZW1lbnQ6OmNhbkhhdmVTZWxlY3Rpb24oCiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6YWNjZXNz
S2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCkKIHsKLSAgICBzd2l0Y2ggKGRlcHJlY2F0
ZWRJbnB1dFR5cGUoKSkgewotICAgIGNhc2UgQlVUVE9OOgotICAgIGNhc2UgQ0hFQ0tCT1g6Ci0g
ICAgY2FzZSBGSUxFOgotICAgIGNhc2UgSU1BR0U6Ci0gICAgY2FzZSBSQURJTzoKLSAgICBjYXNl
IFJBTkdFOgotICAgIGNhc2UgUkVTRVQ6Ci0gICAgY2FzZSBTVUJNSVQ6Ci0gICAgICAgIGZvY3Vz
KGZhbHNlKTsKLSAgICAgICAgLy8gc2VuZCB0aGUgbW91c2UgYnV0dG9uIGV2ZW50cyBpZmYgdGhl
IGNhbGxlciBzcGVjaWZpZWQgc2VuZFRvQW55RWxlbWVudAotICAgICAgICBkaXNwYXRjaFNpbXVs
YXRlZENsaWNrKDAsIHNlbmRUb0FueUVsZW1lbnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEhJRERFTjoKLSAgICAgICAgLy8gYSBuby1vcCBmb3IgdGhpcyB0eXBlCi0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ09MT1I6Ci0gICAgY2FzZSBEQVRFOgotICAgIGNhc2UgREFURVRJTUU6Ci0g
ICAgY2FzZSBEQVRFVElNRUxPQ0FMOgotICAgIGNhc2UgRU1BSUw6Ci0gICAgY2FzZSBJU0lOREVY
OgotICAgIGNhc2UgTU9OVEg6Ci0gICAgY2FzZSBOVU1CRVI6Ci0gICAgY2FzZSBQQVNTV09SRDoK
LSAgICBjYXNlIFNFQVJDSDoKLSAgICBjYXNlIFRFTEVQSE9ORToKLSAgICBjYXNlIFRFWFQ6Ci0g
ICAgY2FzZSBUSU1FOgotICAgIGNhc2UgVVJMOgotICAgIGNhc2UgV0VFSzoKLSAgICAgICAgLy8g
c2hvdWxkIG5ldmVyIHJlc3RvcmUgcHJldmlvdXMgc2VsZWN0aW9uIGhlcmUKLSAgICAgICAgZm9j
dXMoZmFsc2UpOwotICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIG1faW5wdXRUeXBlLT5hY2Nl
c3NLZXlBY3Rpb24oc2VuZFRvQW55RWxlbWVudCk7CiB9CiAKIGJvb2wgSFRNTElucHV0RWxlbWVu
dDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmli
dXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKLSAgICBpZiAoKChhdHRyTmFtZSA9PSBoZWlnaHRB
dHRyIHx8IGF0dHJOYW1lID09IHdpZHRoQXR0cikgJiYgcmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0
cnMoKSkKKyAgICBpZiAoKChhdHRyTmFtZSA9PSBoZWlnaHRBdHRyIHx8IGF0dHJOYW1lID09IHdp
ZHRoQXR0cikgJiYgbV9pbnB1dFR5cGUtPnNob3VsZFJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJp
YnV0ZXMoKSkKICAgICAgICAgfHwgYXR0ck5hbWUgPT0gdnNwYWNlQXR0ciAKICAgICAgICAgfHwg
YXR0ck5hbWUgPT0gaHNwYWNlQXR0cikgewogICAgICAgICByZXN1bHQgPSBlVW5pdmVyc2FsOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSAKIAotICAgIGlmIChhdHRyTmFtZSA9PSBhbGln
bkF0dHIpIHsKLSAgICAgICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBJTUFHRSkgewot
ICAgICAgICAgICAgLy8gU2hhcmUgd2l0aCA8aW1nPiBzaW5jZSB0aGUgYWxpZ25tZW50IGJlaGF2
aW9yIGlzIHRoZSBzYW1lLgotICAgICAgICAgICAgcmVzdWx0ID0gZVJlcGxhY2VkOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgaWYgKGF0dHJOYW1lID09IGFsaWdu
QXR0ciAmJiBtX2lucHV0VHlwZS0+c2hvdWxkUmVzcGVjdEFsaWduQXR0cmlidXRlKCkpIHsKKyAg
ICAgICAgLy8gU2hhcmUgd2l0aCA8aW1nPiBzaW5jZSB0aGUgYWxpZ25tZW50IGJlaGF2aW9yIGlz
IHRoZSBzYW1lLgorICAgICAgICByZXN1bHQgPSBlUmVwbGFjZWQ7CisgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKICAgICByZXR1cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnkoYXR0ck5h
bWUsIHJlc3VsdCk7CkBAIC03MDIsMTAgKzU3MSw5IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5k
ZXJlcihmYWxzZSk7CiAgICAgICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwogICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IGNoZWNrZWRBdHRyKSB7Ci0gICAgICAgIG1fZGVmYXVsdENo
ZWNrZWQgPSAhYXR0ci0+aXNOdWxsKCk7Ci0gICAgICAgIGlmIChtX3VzZURlZmF1bHRDaGVja2Vk
KSB7Ci0gICAgICAgICAgICBzZXRDaGVja2VkKG1fZGVmYXVsdENoZWNrZWQpOwotICAgICAgICAg
ICAgbV91c2VEZWZhdWx0Q2hlY2tlZCA9IHRydWU7CisgICAgICAgIGlmIChtX3JlZmxlY3RzQ2hl
Y2tlZEF0dHJpYnV0ZSkgeworICAgICAgICAgICAgc2V0Q2hlY2tlZCghYXR0ci0+aXNOdWxsKCkp
OworICAgICAgICAgICAgbV9yZWZsZWN0c0NoZWNrZWRBdHRyaWJ1dGUgPSB0cnVlOwogICAgICAg
ICB9CiAgICAgICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG1heGxlbmd0aEF0dHIpIHsKQEAgLTcxMywxNiArNTgxLDExIEBAIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgc2V0TmVlZHNWYWxp
ZGl0eUNoZWNrKCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc2l6ZUF0dHIpCiAg
ICAgICAgIElucHV0RWxlbWVudDo6cGFyc2VTaXplQXR0cmlidXRlKG1fZGF0YSwgdGhpcywgYXR0
cik7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFsdEF0dHIpIHsKLSAgICAgICAgaWYg
KHJlbmRlcmVyKCkgJiYgZGVwcmVjYXRlZElucHV0VHlwZSgpID09IElNQUdFKQotICAgICAgICAg
ICAgdG9SZW5kZXJJbWFnZShyZW5kZXJlcigpKS0+dXBkYXRlQWx0VGV4dCgpOwotICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IHNyY0F0dHIpIHsKLSAgICAgICAgaWYgKHJlbmRlcmVyKCkg
JiYgZGVwcmVjYXRlZElucHV0VHlwZSgpID09IElNQUdFKSB7Ci0gICAgICAgICAgICBpZiAoIW1f
aW1hZ2VMb2FkZXIpCi0gICAgICAgICAgICAgICAgbV9pbWFnZUxvYWRlciA9IGFkb3B0UHRyKG5l
dyBIVE1MSW1hZ2VMb2FkZXIodGhpcykpOwotICAgICAgICAgICAgbV9pbWFnZUxvYWRlci0+dXBk
YXRlRnJvbUVsZW1lbnRJZ25vcmluZ1ByZXZpb3VzRXJyb3IoKTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHVzZW1hcEF0dHIgfHwgYXR0ci0+bmFtZSgpID09IGFj
Y2Vzc2tleUF0dHIpIHsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWx0QXR0cikKKyAg
ICAgICAgbV9pbnB1dFR5cGUtPmFsdEF0dHJpYnV0ZUNoYW5nZWQoKTsKKyAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gc3JjQXR0cikKKyAgICAgICAgbV9pbnB1dFR5cGUtPnNyY0F0dHJpYnV0
ZUNoYW5nZWQoKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdXNlbWFwQXR0ciB8fCBh
dHRyLT5uYW1lKCkgPT0gYWNjZXNza2V5QXR0cikgewogICAgICAgICAvLyBGSVhNRTogaWdub3Jl
IGZvciB0aGUgbW9tZW50CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdnNwYWNlQXR0
cikgewogICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIGF0
dHItPnZhbHVlKCkpOwpAQCAtNzMxLDEzICs1OTQsMTMgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYgogICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTUHJvcGVy
dHlNYXJnaW5MZWZ0LCBhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIs
IENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsIGF0dHItPnZhbHVlKCkpOwogICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IGFsaWduQXR0cikgewotICAgICAgICBpZiAoZGVwcmVjYXRlZElucHV0
VHlwZSgpID09IElNQUdFKQorICAgICAgICBpZiAobV9pbnB1dFR5cGUtPnNob3VsZFJlc3BlY3RB
bGlnbkF0dHJpYnV0ZSgpKQogICAgICAgICAgICAgYWRkSFRNTEFsaWdubWVudChhdHRyKTsKICAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB3aWR0aEF0dHIpIHsKLSAgICAgICAgaWYgKHJl
c3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJzKCkpCisgICAgICAgIGlmIChtX2lucHV0VHlwZS0+c2hv
dWxkUmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0cmlidXRlcygpKQogICAgICAgICAgICAgYWRkQ1NT
TGVuZ3RoKGF0dHIsIENTU1Byb3BlcnR5V2lkdGgsIGF0dHItPnZhbHVlKCkpOwogICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IGhlaWdodEF0dHIpIHsKLSAgICAgICAgaWYgKHJlc3BlY3RI
ZWlnaHRBbmRXaWR0aEF0dHJzKCkpCisgICAgICAgIGlmIChtX2lucHV0VHlwZS0+c2hvdWxkUmVz
cGVjdEhlaWdodEFuZFdpZHRoQXR0cmlidXRlcygpKQogICAgICAgICAgICAgYWRkQ1NTTGVuZ3Ro
KGF0dHIsIENTU1Byb3BlcnR5SGVpZ2h0LCBhdHRyLT52YWx1ZSgpKTsKICAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBvbnNlYXJjaEF0dHIpIHsKICAgICAgICAgLy8gU2VhcmNoIGZpZWxk
IGFuZCBzbGlkZXIgYXR0cmlidXRlcyBhbGwganVzdCBjYXVzZSB1cGRhdGVGcm9tRWxlbWVudCB0
byBiZSBjYWxsZWQgdGhyb3VnaCBzdHlsZSByZWNhbGNpbmcuCkBAIC03NTIsMjEgKzYxNSwxMiBA
QCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgICAgICAgICBh
dHRhY2goKTsKICAgICAgICAgfQogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYXV0b3NhdmVBdHRyCi0gICAgICAgICAgICAgICB8
fCBhdHRyLT5uYW1lKCkgPT0gaW5jcmVtZW50YWxBdHRyKQorICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IGF1dG9zYXZlQXR0ciB8fCBhdHRyLT5uYW1lKCkgPT0gaW5jcmVtZW50YWxBdHRy
KQogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IG1pbkF0dHIKLSAgICAgICAgICAgICB8fCBhdHRyLT5uYW1lKCkgPT0gbWF4QXR0cikg
ewotICAgICAgICBpZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IFJBTkdFKSB7Ci0gICAgICAg
ICAgICAvLyBTYW5pdGl6ZSB0aGUgdmFsdWUuCi0gICAgICAgICAgICBzZXRWYWx1ZSh2YWx1ZSgp
KTsKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICAgICAgfQorICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtaW5BdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBtYXhBdHRy
KSB7CisgICAgICAgIG1faW5wdXRUeXBlLT5taW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQoKTsKICAg
ICAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gbXVsdGlwbGVBdHRyCi0gICAgICAgICAgICAgfHwgYXR0ci0+bmFtZSgpID09IHBhdHRl
cm5BdHRyCi0gICAgICAgICAgICAgfHwgYXR0ci0+bmFtZSgpID09IHByZWNpc2lvbkF0dHIKLSAg
ICAgICAgICAgICB8fCBhdHRyLT5uYW1lKCkgPT0gc3RlcEF0dHIpCisgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gbXVsdGlwbGVBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBwYXR0ZXJuQXR0
ciB8fCBhdHRyLT5uYW1lKCkgPT0gcHJlY2lzaW9uQXR0ciB8fCBhdHRyLT5uYW1lKCkgPT0gc3Rl
cEF0dHIpCiAgICAgICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwogI2lmIEVOQUJMRShEQVRB
TElTVCkKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbGlzdEF0dHIpCkBAIC03ODUsMTEg
KzYzOSw5IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAg
ICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OwogfQogCi1ib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5
bGUgKnN0eWxlKQorYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRl
clN0eWxlKiBzdHlsZSkKIHsKLSAgICBpZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IEhJRERF
TikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlOjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsKKyAgICByZXR1cm4gbV9pbnB1
dFR5cGUtPnJlbmRlcmVySXNOZWVkZWQoKSAmJiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlOjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsKIH0KIAogUmVuZGVyT2JqZWN0KiBIVE1MSW5w
dXRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxl
KiBzdHlsZSkKQEAgLTc5OSwzMiArNjUxLDEyIEBAIFJlbmRlck9iamVjdCogSFRNTElucHV0RWxl
bWVudDo6Y3JlYXRlUmUKIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjphdHRhY2goKQogewotICAg
IGlmICghbV9pbml0ZWQpIHsKLSAgICAgICAgaWYgKCFtX2hhdmVUeXBlKQotICAgICAgICAgICAg
dXBkYXRlVHlwZSgpOwotICAgICAgICBtX2luaXRlZCA9IHRydWU7Ci0gICAgfQorICAgIGlmICgh
bV9oYXNUeXBlKQorICAgICAgICB1cGRhdGVUeXBlKCk7CiAKICAgICBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlOjphdHRhY2goKTsKIAotICAgIGlmIChkZXByZWNhdGVkSW5wdXRUeXBl
KCkgPT0gSU1BR0UpIHsKLSAgICAgICAgaWYgKCFtX2ltYWdlTG9hZGVyKQotICAgICAgICAgICAg
bV9pbWFnZUxvYWRlciA9IGFkb3B0UHRyKG5ldyBIVE1MSW1hZ2VMb2FkZXIodGhpcykpOwotICAg
ICAgICBtX2ltYWdlTG9hZGVyLT51cGRhdGVGcm9tRWxlbWVudCgpOwotICAgICAgICBpZiAocmVu
ZGVyZXIoKSAmJiBtX2ltYWdlTG9hZGVyLT5oYXZlRmlyZWRCZWZvcmVMb2FkRXZlbnQoKSkgewot
ICAgICAgICAgICAgUmVuZGVySW1hZ2UqIHJlbmRlckltYWdlID0gdG9SZW5kZXJJbWFnZShyZW5k
ZXJlcigpKTsKLSAgICAgICAgICAgIFJlbmRlckltYWdlUmVzb3VyY2UqIHJlbmRlckltYWdlUmVz
b3VyY2UgPSByZW5kZXJJbWFnZS0+aW1hZ2VSZXNvdXJjZSgpOwotICAgICAgICAgICAgcmVuZGVy
SW1hZ2VSZXNvdXJjZS0+c2V0Q2FjaGVkSW1hZ2UobV9pbWFnZUxvYWRlci0+aW1hZ2UoKSk7IAot
Ci0gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIGltYWdlIGF0IGFsbCBiZWNhdXNlIHdlIGhh
dmUgbm8gc3JjIGF0dHJpYnV0ZSwgc2V0Ci0gICAgICAgICAgICAvLyBpbWFnZSBoZWlnaHQgYW5k
IHdpZHRoIGZvciB0aGUgYWx0IHRleHQgaW5zdGVhZC4KLSAgICAgICAgICAgIGlmICghbV9pbWFn
ZUxvYWRlci0+aW1hZ2UoKSAmJiAhcmVuZGVySW1hZ2VSZXNvdXJjZS0+Y2FjaGVkSW1hZ2UoKSkK
LSAgICAgICAgICAgICAgICByZW5kZXJJbWFnZS0+c2V0SW1hZ2VTaXplRm9yQWx0VGV4dCgpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBSQURJ
TykKLSAgICAgICAgdXBkYXRlQ2hlY2tlZFJhZGlvQnV0dG9ucygpOworICAgIG1faW5wdXRUeXBl
LT5hdHRhY2goKTsKIAogICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IHRoaXMp
CiAgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZUZvY3VzQXBwZWFyYW5jZVNvb24odHJ1ZSAvKiBy
ZXN0b3JlIHNlbGVjdGlvbiAqLyk7CkBAIC04NDEsNyArNjczLDcgQEAgU3RyaW5nIEhUTUxJbnB1
dEVsZW1lbnQ6OmFsdFRleHQoKSBjb25zdAogICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzE5
OTgvUkVDLWh0bWw0MC0xOTk4MDQyNC9hcHBlbmRpeC9ub3Rlcy5odG1sI2FsdGdlbgogICAgIC8v
IGFsc28gaGVhdmlseSBkaXNjdXNzZWQgYnkgSGl4aWUgb24gYnVnemlsbGEKICAgICAvLyBub3Rl
IHRoaXMgaXMgaW50ZW50aW9uYWxseSBkaWZmZXJlbnQgdG8gSFRNTEltYWdlRWxlbWVudDo6YWx0
VGV4dCgpCi0gICAgU3RyaW5nIGFsdCA9IGdldEF0dHJpYnV0ZShhbHRBdHRyKTsKKyAgICBTdHJp
bmcgYWx0ID0gZmFzdEdldEF0dHJpYnV0ZShhbHRBdHRyKTsKICAgICAvLyBmYWxsIGJhY2sgdG8g
dGl0bGUgYXR0cmlidXRlCiAgICAgaWYgKGFsdC5pc051bGwoKSkKICAgICAgICAgYWx0ID0gZ2V0
QXR0cmlidXRlKHRpdGxlQXR0cik7CkBAIC04NTUsMTggKzY4NywxOCBAQCBTdHJpbmcgSFRNTElu
cHV0RWxlbWVudDo6YWx0VGV4dCgpIGNvbnN0CiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzU3Vj
Y2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpIGNvbnN0CiB7CiAgICAgLy8gSFRNTCBzcGVjIHNheXMgdGhh
dCBidXR0b25zIG11c3QgaGF2ZSBuYW1lcyB0byBiZSBjb25zaWRlcmVkIHN1Y2Nlc3NmdWwuCi0g
ICAgLy8gSG93ZXZlciwgb3RoZXIgYnJvd3NlcnMgZG8gbm90IGltcG9zZSB0aGlzIGNvbnN0cmFp
bnQuIFNvIHdlIGRvIGxpa2V3aXNlLgotICAgIHJldHVybiAhZGlzYWJsZWQoKSAmJiAoZGVwcmVj
YXRlZElucHV0VHlwZSgpID09IElNQUdFIHx8IGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBTVUJN
SVQpOworICAgIC8vIEhvd2V2ZXIsIG90aGVyIGJyb3dzZXJzIGRvIG5vdCBpbXBvc2UgdGhpcyBj
b25zdHJhaW50LiBTbyB3ZSBkbyBub3QuCisgICAgcmV0dXJuICFkaXNhYmxlZCgpICYmIG1faW5w
dXRUeXBlLT5jYW5CZVN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKTsKIH0KIAogYm9vbCBIVE1MSW5w
dXRFbGVtZW50Ojppc0FjdGl2YXRlZFN1Ym1pdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYWN0
aXZlU3VibWl0OworICAgIHJldHVybiBtX2lzQWN0aXZhdGVkU3VibWl0OwogfQogCiB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OnNldEFjdGl2YXRlZFN1Ym1pdChib29sIGZsYWcpCiB7Ci0gICAgbV9h
Y3RpdmVTdWJtaXQgPSBmbGFnOworICAgIG1faXNBY3RpdmF0ZWRTdWJtaXQgPSBmbGFnOwogfQog
CiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYgZW5j
b2RpbmcsIGJvb2wgbXVsdGlwYXJ0KQpAQCAtODc2LDExICs3MDgsMTEgQEAgYm9vbCBIVE1MSW5w
dXRFbGVtZW50OjphcHBlbmRGb3JtRGF0YShGbwogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnJl
c2V0KCkKIHsKLSAgICBpZiAoc3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKSkKKyAg
ICBpZiAobV9pbnB1dFR5cGUtPnN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCkpCiAg
ICAgICAgIHNldFZhbHVlKFN0cmluZygpKTsKIAotICAgIHNldENoZWNrZWQobV9kZWZhdWx0Q2hl
Y2tlZCk7Ci0gICAgbV91c2VEZWZhdWx0Q2hlY2tlZCA9IHRydWU7CisgICAgc2V0Q2hlY2tlZCho
YXNBdHRyaWJ1dGUoY2hlY2tlZEF0dHIpKTsKKyAgICBtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0
ZSA9IHRydWU7CiB9CiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNUZXh0RmllbGQoKSBjb25z
dApAQCAtOTAwLDggKzczMiw4IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0Q2hlY2tlZChi
b29sIG4KIAogICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24odGhpcyk7CiAK
LSAgICBtX3VzZURlZmF1bHRDaGVja2VkID0gZmFsc2U7Ci0gICAgbV9jaGVja2VkID0gbm93Q2hl
Y2tlZDsKKyAgICBtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0ZSA9IGZhbHNlOworICAgIG1faXND
aGVja2VkID0gbm93Q2hlY2tlZDsKICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKICAgICB1
cGRhdGVDaGVja2VkUmFkaW9CdXR0b25zKCk7CkBAIC05MTcsMTcgKzc0OSwxNiBAQCB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OnNldENoZWNrZWQoYm9vbCBuCiAgICAgLy8gdW5jaGVja2VkIHRvIG1h
dGNoIG90aGVyIGJyb3dzZXJzLiBET00gaXMgbm90IGEgdXNlZnVsIHN0YW5kYXJkIGZvciB0aGlz
CiAgICAgLy8gYmVjYXVzZSBpdCBzYXlzIG9ubHkgdG8gZmlyZSBjaGFuZ2UgZXZlbnRzIGF0ICJs
b3NlIGZvY3VzIiB0aW1lLCB3aGljaCBpcwogICAgIC8vIGRlZmluaXRlbHkgd3JvbmcgaW4gcHJh
Y3RpY2UgZm9yIHRoZXNlIHR5cGVzIG9mIGVsZW1lbnRzLgotICAgIGlmIChzZW5kQ2hhbmdlRXZl
bnQgJiYgaW5Eb2N1bWVudCgpICYmIChkZXByZWNhdGVkSW5wdXRUeXBlKCkgIT0gUkFESU8gfHwg
bm93Q2hlY2tlZCkpCisgICAgaWYgKHNlbmRDaGFuZ2VFdmVudCAmJiBpbkRvY3VtZW50KCkgJiYg
bV9pbnB1dFR5cGUtPnNob3VsZFNlbmRDaGFuZ2VFdmVudEFmdGVyQ2hlY2tlZENoYW5nZWQoKSkK
ICAgICAgICAgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiB9CiAKIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6c2V0SW5kZXRlcm1pbmF0ZShib29sIG5ld1ZhbHVlKQogewotICAgIC8v
IE9ubHkgY2hlY2tib3hlcyBhbmQgcmFkaW8gYnV0dG9ucyBob25vciBpbmRldGVybWluYXRlLgot
ICAgIGlmICghYWxsb3dzSW5kZXRlcm1pbmF0ZSgpIHx8IGluZGV0ZXJtaW5hdGUoKSA9PSBuZXdW
YWx1ZSkKKyAgICBpZiAoIW1faW5wdXRUeXBlLT5pc0NoZWNrYWJsZSgpIHx8IGluZGV0ZXJtaW5h
dGUoKSA9PSBuZXdWYWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9pbmRldGVybWluYXRl
ID0gbmV3VmFsdWU7CisgICAgbV9pc0luZGV0ZXJtaW5hdGUgPSBuZXdWYWx1ZTsKIAogICAgIHNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKIApAQCAtOTQ1LDg0ICs3NzYsMzcgQEAgdm9pZCBIVE1MSW5w
dXRFbGVtZW50Ojpjb3B5Tm9uQXR0cmlidXRlUAogICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQq
IHNvdXJjZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MSW5wdXRFbGVtZW50Kj4oc291
cmNlKTsKIAogICAgIG1fZGF0YS5zZXRWYWx1ZShzb3VyY2VFbGVtZW50LT5tX2RhdGEudmFsdWUo
KSk7Ci0gICAgc2V0Q2hlY2tlZChzb3VyY2VFbGVtZW50LT5tX2NoZWNrZWQpOwotICAgIG1fZGVm
YXVsdENoZWNrZWQgPSBzb3VyY2VFbGVtZW50LT5tX2RlZmF1bHRDaGVja2VkOwotICAgIG1fdXNl
RGVmYXVsdENoZWNrZWQgPSBzb3VyY2VFbGVtZW50LT5tX3VzZURlZmF1bHRDaGVja2VkOwotICAg
IG1faW5kZXRlcm1pbmF0ZSA9IHNvdXJjZUVsZW1lbnQtPm1faW5kZXRlcm1pbmF0ZTsKKyAgICBz
ZXRDaGVja2VkKHNvdXJjZUVsZW1lbnQtPm1faXNDaGVja2VkKTsKKyAgICBtX3JlZmxlY3RzQ2hl
Y2tlZEF0dHJpYnV0ZSA9IHNvdXJjZUVsZW1lbnQtPm1fcmVmbGVjdHNDaGVja2VkQXR0cmlidXRl
OworICAgIG1faXNJbmRldGVybWluYXRlID0gc291cmNlRWxlbWVudC0+bV9pc0luZGV0ZXJtaW5h
dGU7CiAKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpjb3B5Tm9uQXR0cmli
dXRlUHJvcGVydGllcyhzb3VyY2UpOwogfQogCiBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6dmFs
dWUoKSBjb25zdAogewotICAgIGlmIChkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gRklMRSkgewot
ICAgICAgICBpZiAoIW1fZmlsZUxpc3QtPmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gSFRN
TDUgdGVsbHMgdXMgdGhhdCB3ZSdyZSBzdXBwb3NlZCB0byB1c2UgdGhpcyBnb29meSB2YWx1ZSBm
b3IKLSAgICAgICAgICAgIC8vIGZpbGUgaW5wdXQgY29udHJvbHMuICBIaXN0b3JpY2FsbHksIGJy
b3dzZXJzIHJldmVhbHMgdGhlIHJlYWwKLSAgICAgICAgICAgIC8vIGZpbGUgcGF0aCwgYnV0IHRo
YXQncyBhIHByaXZhY3kgcHJvYmxlbS4gIENvZGUgb24gdGhlIHdlYgotICAgICAgICAgICAgLy8g
ZGVjaWRlZCB0byB0cnkgdG8gcGFyc2UgdGhlIHZhbHVlIGJ5IGxvb2tpbmcgZm9yIGJhY2tzbGFz
aGVzCi0gICAgICAgICAgICAvLyAoYmVjYXVzZSB0aGF0J3Mgd2hhdCBXaW5kb3dzIGZpbGUgcGF0
aHMgdXNlKS4gIFRvIGJlIGNvbXBhdGlibGUKLSAgICAgICAgICAgIC8vIHdpdGggdGhhdCBjb2Rl
LCB3ZSBtYWtlIHVwIGEgZmFrZSBwYXRoIGZvciB0aGUgZmlsZS4KLSAgICAgICAgICAgIHJldHVy
biAiQzpcXGZha2VwYXRoXFwiICsgbV9maWxlTGlzdC0+aXRlbSgwKS0+ZmlsZU5hbWUoKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgfQorICAgIFN0cmluZyB2YWx1
ZTsKKyAgICBpZiAobV9pbnB1dFR5cGUtPmdldFR5cGVTcGVjaWZpY1ZhbHVlKHZhbHVlKSkKKyAg
ICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgdmFsdWUgPSBtX2RhdGEudmFsdWUoKTsKKyAgICBp
ZiAoIXZhbHVlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICB2YWx1ZSA9
IHNhbml0aXplVmFsdWUoZmFzdEdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpKTsKKyAgICBpZiAoIXZh
bHVlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CiAKLSAgICBTdHJpbmcgdmFsdWUg
PSBtX2RhdGEudmFsdWUoKTsKLSAgICBpZiAodmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgdmFs
dWUgPSBzYW5pdGl6ZVZhbHVlKGZhc3RHZXRBdHRyaWJ1dGUodmFsdWVBdHRyKSk7Ci0gICAgICAg
IAotICAgICAgICAvLyBJZiBubyBhdHRyaWJ1dGUgZXhpc3RzLCBleHRyYSBoYW5kbGluZyBtYXkg
YmUgbmVjZXNzYXJ5LgotICAgICAgICAvLyBGb3IgQ2hlY2tib3ggVHlwZXMganVzdCB1c2UgIm9u
IiBvciAiIiBiYXNlZCBvZmYgdGhlIGNoZWNrZWQoKSBzdGF0ZSBvZiB0aGUgY29udHJvbC4KLSAg
ICAgICAgLy8gRm9yIGEgUmFuZ2UgSW5wdXQgdXNlIHRoZSBjYWxjdWxhdGVkIGRlZmF1bHQgdmFs
dWUuCi0gICAgICAgIGlmICh2YWx1ZS5pc051bGwoKSkgewotICAgICAgICAgICAgaWYgKGRlcHJl
Y2F0ZWRJbnB1dFR5cGUoKSA9PSBDSEVDS0JPWCB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0g
UkFESU8pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWQoKSA/ICJvbiIgOiAiIjsKLSAg
ICAgICAgICAgIGlmIChkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gUkFOR0UpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHNlcmlhbGl6ZUZvck51bWJlclR5cGUoU3RlcFJhbmdlKHRoaXMpLmRlZmF1
bHRWYWx1ZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB2YWx1ZTsKKyAgICBy
ZXR1cm4gbV9pbnB1dFR5cGUtPmZhbGxiYWNrVmFsdWUoKTsKIH0KIAogU3RyaW5nIEhUTUxJbnB1
dEVsZW1lbnQ6OnZhbHVlV2l0aERlZmF1bHQoKSBjb25zdAogewotICAgIFN0cmluZyB2ID0gdmFs
dWUoKTsKLSAgICBpZiAodi5pc051bGwoKSkgewotICAgICAgICBzd2l0Y2ggKGRlcHJlY2F0ZWRJ
bnB1dFR5cGUoKSkgewotICAgICAgICBjYXNlIEJVVFRPTjoKLSAgICAgICAgY2FzZSBDSEVDS0JP
WDoKLSAgICAgICAgY2FzZSBDT0xPUjoKLSAgICAgICAgY2FzZSBEQVRFOgotICAgICAgICBjYXNl
IERBVEVUSU1FOgotICAgICAgICBjYXNlIERBVEVUSU1FTE9DQUw6Ci0gICAgICAgIGNhc2UgRU1B
SUw6Ci0gICAgICAgIGNhc2UgRklMRToKLSAgICAgICAgY2FzZSBISURERU46Ci0gICAgICAgIGNh
c2UgSU1BR0U6Ci0gICAgICAgIGNhc2UgSVNJTkRFWDoKLSAgICAgICAgY2FzZSBNT05USDoKLSAg
ICAgICAgY2FzZSBOVU1CRVI6Ci0gICAgICAgIGNhc2UgUEFTU1dPUkQ6Ci0gICAgICAgIGNhc2Ug
UkFESU86Ci0gICAgICAgIGNhc2UgUkFOR0U6Ci0gICAgICAgIGNhc2UgU0VBUkNIOgotICAgICAg
ICBjYXNlIFRFTEVQSE9ORToKLSAgICAgICAgY2FzZSBURVhUOgotICAgICAgICBjYXNlIFRJTUU6
Ci0gICAgICAgIGNhc2UgVVJMOgotICAgICAgICBjYXNlIFdFRUs6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBSRVNFVDoKLSAgICAgICAgICAgIHYgPSByZXNldEJ1dHRvbkRlZmF1
bHRMYWJlbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1VCTUlUOgotICAg
ICAgICAgICAgdiA9IHN1Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHY7CisgICAgU3RyaW5nIHZhbHVlID0g
dGhpcy0+dmFsdWUoKTsKKyAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
dmFsdWU7CisKKyAgICByZXR1cm4gbV9pbnB1dFR5cGUtPmRlZmF1bHRWYWx1ZSgpOwogfQogCiB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRm9yVXNlcihjb25zdCBTdHJpbmcmIHZhbHVl
KQpAQCAtMTAzOCw3ICs4MjIsNyBAQCBjb25zdCBTdHJpbmcmIEhUTUxJbnB1dEVsZW1lbnQ6OnN1
Z2dlc3RlCiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0U3VnZ2VzdGVkVmFsdWUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBpZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpICE9IFRFWFQp
CisgICAgaWYgKCFtX2lucHV0VHlwZS0+Y2FuU2V0U3VnZ2VzdGVkVmFsdWUoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpOwog
ICAgIG1fZGF0YS5zZXRTdWdnZXN0ZWRWYWx1ZShzYW5pdGl6ZVZhbHVlKHZhbHVlKSk7CkBAIC0x
MDUwLDE2ICs4MzQsMTMgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRTdWdnZXN0ZWRWYWx1
ZQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUs
IGJvb2wgc2VuZENoYW5nZUV2ZW50KQogewotICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25zLCB3
ZSBkb24ndCBhbGxvdyBzZXR0aW5nIHRoZSBmaWxlbmFtZSwgYnV0IHdlIGRvIGFsbG93IGNsZWFy
aW5nIGl0LgotICAgIC8vIFRoZSBIVE1MNSBzcGVjIChhcyBvZiB0aGUgMTAvMjQvMDggd29ya2lu
ZyBkcmFmdCkgc2F5cyB0aGF0IHRoZSB2YWx1ZSBhdHRyaWJ1dGUgaXNuJ3QgYXBwbGljYWJsZSB0
byB0aGUgZmlsZSB1cGxvYWQgY29udHJvbAotICAgIC8vIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGJy
ZWFrIGV4aXN0aW5nIHdlYnNpdGVzLCB3aG8gbWF5IGJlIHJlbHlpbmcgb24gdGhpcyBtZXRob2Qg
dG8gY2xlYXIgdGhpbmdzLgotICAgIGlmIChkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gRklMRSAm
JiAhdmFsdWUuaXNFbXB0eSgpKQorICAgIGlmICghbV9pbnB1dFR5cGUtPmNhblNldFZhbHVlKHZh
bHVlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNS
ZW5kZXJlcihmYWxzZSk7Ci0gICAgaWYgKHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRl
KCkpIHsKLSAgICAgICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBGSUxFKQotICAgICAg
ICAgICAgbV9maWxlTGlzdC0+Y2xlYXIoKTsKKyAgICBpZiAobV9pbnB1dFR5cGUtPnN0b3Jlc1Zh
bHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCkpIHsKKyAgICAgICAgaWYgKGZpbGVzKCkpCisgICAg
ICAgICAgICBmaWxlcygpLT5jbGVhcigpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1f
ZGF0YS5zZXRWYWx1ZShzYW5pdGl6ZVZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgICBpZiAoaXNU
ZXh0RmllbGQoKSkKQEAgLTExMTQsNyArODk1LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpz
ZXRWYWx1ZUFzTnVtYmVyKAogCiBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6cGxhY2Vob2xkZXIo
KSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUocGxhY2Vob2xkZXJBdHRyKS5zdHJp
bmcoKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShwbGFjZWhvbGRlckF0dHIpLnN0cmlu
ZygpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFBsYWNlaG9sZGVyKGNvbnN0IFN0
cmluZyYgdmFsdWUpCkBAIC0xMTMwLDcgKzkxMSw4IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6
c2VhcmNoRXZlbnRzU2hvdWwKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVu
ZGVyZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICAvLyBGaWxlIHVwbG9hZCBjb250cm9s
cyB3aWxsIGFsd2F5cyB1c2Ugc2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIuCi0gICAgQVNTRVJUKGRl
cHJlY2F0ZWRJbnB1dFR5cGUoKSAhPSBGSUxFKTsKKyAgICBBU1NFUlQoIWlzRmlsZVVwbG9hZCgp
KTsKKwogICAgIG1fZGF0YS5zZXRTdWdnZXN0ZWRWYWx1ZShTdHJpbmcoKSk7CiAgICAgSW5wdXRF
bGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcihtX2RhdGEsIHRoaXMsIHRoaXMsIHZhbHVlKTsK
ICAgICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoZmFsc2UpOwpAQCAtMTE0MiwxNDggKzky
NCwyOSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRlCiAKIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIoY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhdGhzKQogewotICAgIG1fZmlsZUxpc3QtPmNsZWFyKCk7Ci0gICAgaW50IHNpemUg
PSBwYXRocy5zaXplKCk7Ci0KLSNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKLSAgICAvLyBJ
ZiBhIGRpcmVjdG9yeSBpcyBiZWluZyBzZWxlY3RlZCwgdGhlIFVJIGFsbG93cyBhIGRpcmVjdG9y
eSB0byBiZSBjaG9zZW4KLSAgICAvLyBhbmQgdGhlIHBhdGhzIHByb3ZpZGVkIGhlcmUgc2hhcmUg
YSByb290IGRpcmVjdG9yeSBzb21ld2hlcmUgdXAgdGhlIHRyZWU7Ci0gICAgLy8gd2Ugd2FudCB0
byBzdG9yZSBvbmx5IHRoZSByZWxhdGl2ZSBwYXRocyBmcm9tIHRoYXQgcG9pbnQuCi0gICAgaWYg
KHdlYmtpdGRpcmVjdG9yeSgpICYmIHNpemUgPiAwKSB7Ci0gICAgICAgIFN0cmluZyByb290UGF0
aCA9IGRpcmVjdG9yeU5hbWUocGF0aHNbMF0pOwotICAgICAgICAvLyBGaW5kIHRoZSBjb21tb24g
cm9vdCBwYXRoLgotICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHNpemU7IGkrKykgewotICAg
ICAgICAgICAgd2hpbGUgKCFwYXRoc1tpXS5zdGFydHNXaXRoKHJvb3RQYXRoKSkKLSAgICAgICAg
ICAgICAgICByb290UGF0aCA9IGRpcmVjdG9yeU5hbWUocm9vdFBhdGgpOwotICAgICAgICB9Ci0g
ICAgICAgIHJvb3RQYXRoID0gZGlyZWN0b3J5TmFtZShyb290UGF0aCk7Ci0gICAgICAgIEFTU0VS
VChyb290UGF0aC5sZW5ndGgoKSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKSB7Ci0gICAgICAgICAgICAvLyBOb3JtYWxpemUgYmFja3NsYXNoZXMgdG8gc2xhc2hlcyBi
ZWZvcmUgZXhwb3NpbmcgdGhlIHJlbGF0aXZlIHBhdGggdG8gc2NyaXB0LgotICAgICAgICAgICAg
U3RyaW5nIHJlbGF0aXZlUGF0aCA9IHBhdGhzW2ldLnN1YnN0cmluZygxICsgcm9vdFBhdGgubGVu
Z3RoKCkpLnJlcGxhY2UoJ1xcJywnLycpOwotICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5k
KEZpbGU6OmNyZWF0ZShyZWxhdGl2ZVBhdGgsIHBhdGhzW2ldKSk7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAg
ICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUocGF0aHNbaV0pKTsKLSAgICB9Ci0j
ZWxzZQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICBtX2ZpbGVM
aXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHBhdGhzW2ldKSk7Ci0jZW5kaWYKKyAgICBtX2lucHV0
VHlwZS0+c2V0RmlsZUxpc3QocGF0aHMpOwogCiAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNo
ZXNSZW5kZXJlcih0cnVlKTsKICAgICBJbnB1dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5n
ZWQodGhpcyk7CiAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CiB9CiAKLWJvb2wgSFRNTElu
cHV0RWxlbWVudDo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKSBjb25zdAordm9p
ZCogSFRNTElucHV0RWxlbWVudDo6cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50
KQogewotICAgIHN3aXRjaCAoZGVwcmVjYXRlZElucHV0VHlwZSgpKSB7Ci0gICAgY2FzZSBCVVRU
T046Ci0gICAgY2FzZSBDSEVDS0JPWDoKLSAgICBjYXNlIEhJRERFTjoKLSAgICBjYXNlIElNQUdF
OgotICAgIGNhc2UgUkFESU86Ci0gICAgY2FzZSBSRVNFVDoKLSAgICBjYXNlIFNVQk1JVDoKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgQ09MT1I6Ci0gICAgY2FzZSBEQVRFOgotICAg
IGNhc2UgREFURVRJTUU6Ci0gICAgY2FzZSBEQVRFVElNRUxPQ0FMOgotICAgIGNhc2UgRU1BSUw6
Ci0gICAgY2FzZSBGSUxFOgotICAgIGNhc2UgSVNJTkRFWDoKLSAgICBjYXNlIE1PTlRIOgotICAg
IGNhc2UgTlVNQkVSOgotICAgIGNhc2UgUEFTU1dPUkQ6Ci0gICAgY2FzZSBSQU5HRToKLSAgICBj
YXNlIFNFQVJDSDoKLSAgICBjYXNlIFRFTEVQSE9ORToKLSAgICBjYXNlIFRFWFQ6Ci0gICAgY2Fz
ZSBUSU1FOgotICAgIGNhc2UgVVJMOgotICAgIGNhc2UgV0VFSzoKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RydWN0IEV2ZW50SGFuZGxpbmdT
dGF0ZSA6IEZhc3RBbGxvY0Jhc2UgewotICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBtX2N1
cnJSYWRpbzsKLSAgICBib29sIG1faW5kZXRlcm1pbmF0ZTsKLSAgICBib29sIG1fY2hlY2tlZDsK
LSAgICAKLSAgICBFdmVudEhhbmRsaW5nU3RhdGUoYm9vbCBpbmRldGVybWluYXRlLCBib29sIGNo
ZWNrZWQpCi0gICAgICAgIDogbV9pbmRldGVybWluYXRlKGluZGV0ZXJtaW5hdGUpCi0gICAgICAg
ICwgbV9jaGVja2VkKGNoZWNrZWQpIHsgfQotfTsKLQotdm9pZCogSFRNTElucHV0RWxlbWVudDo6
cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQqIGV2dCkKLXsKLSAgICAvLyBwcmV2ZW50RGVm
YXVsdCBvciAicmV0dXJuIGZhbHNlIiBhcmUgdXNlZCB0byByZXZlcnNlIHRoZSBhdXRvbWF0aWMg
Y2hlY2tpbmcvc2VsZWN0aW9uIHdlIGRvIGhlcmUuCi0gICAgLy8gVGhpcyByZXN1bHQgZ2l2ZXMg
dXMgZW5vdWdoIGluZm8gdG8gcGVyZm9ybSB0aGUgInVuZG8iIGluIHBvc3REaXNwYXRjaCBvZiB0
aGUgYWN0aW9uIHdlIHRha2UgaGVyZS4KLSAgICB2b2lkKiByZXN1bHQgPSAwOyAKLSAgICBpZiAo
KGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBDSEVDS0JPWCB8fCBkZXByZWNhdGVkSW5wdXRUeXBl
KCkgPT0gUkFESU8pICYmIGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7
Ci0gICAgICAgIE93blB0cjxFdmVudEhhbmRsaW5nU3RhdGU+IHN0YXRlID0gYWRvcHRQdHIobmV3
IEV2ZW50SGFuZGxpbmdTdGF0ZShpbmRldGVybWluYXRlKCksIGNoZWNrZWQoKSkpOwotICAgICAg
ICBpZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IENIRUNLQk9YKSB7Ci0gICAgICAgICAgICBp
ZiAoaW5kZXRlcm1pbmF0ZSgpKQotICAgICAgICAgICAgICAgIHNldEluZGV0ZXJtaW5hdGUoZmFs
c2UpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNldENoZWNrZWQoIWNoZWNr
ZWQoKSwgdHJ1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGb3IgcmFkaW8g
YnV0dG9ucywgc3RvcmUgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgcmFkaW8gb2JqZWN0LgotICAgICAg
ICAgICAgLy8gV2UgcmVhbGx5IHdhbnQgcmFkaW8gZ3JvdXBzIHRvIGVuZCB1cCBpbiBzYW5lIHN0
YXRlcywgaS5lLiwgdG8gaGF2ZSBzb21ldGhpbmcgY2hlY2tlZC4KLSAgICAgICAgICAgIC8vIFRo
ZXJlZm9yZSBpZiBub3RoaW5nIGlzIGN1cnJlbnRseSBzZWxlY3RlZCwgd2Ugd29uJ3QgYWxsb3cg
dGhpcyBhY3Rpb24gdG8gYmUgInVuZG9uZSIsIHNpbmNlCi0gICAgICAgICAgICAvLyB3ZSB3YW50
IHNvbWUgb2JqZWN0IGluIHRoZSByYWRpbyBncm91cCB0byBhY3R1YWxseSBnZXQgc2VsZWN0ZWQu
Ci0gICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBjdXJyUmFkaW8gPSBjaGVja2VkUmFkaW9C
dXR0b25zKCkuY2hlY2tlZEJ1dHRvbkZvckdyb3VwKG5hbWUoKSk7Ci0gICAgICAgICAgICBpZiAo
Y3VyclJhZGlvKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIHJhZGlvIGJ1dHRvbiBz
ZWxlY3RlZCB0aGF0IGlzIG5vdCB1cy4gIENhY2hlIGl0IGluIG91ciByZXN1bHQgZmllbGQgYW5k
IHJlZiBpdCBzbwotICAgICAgICAgICAgICAgIC8vIHRoYXQgaXQgY2FuJ3QgYmUgZGVzdHJveWVk
LgotICAgICAgICAgICAgICAgIHN0YXRlLT5tX2N1cnJSYWRpbyA9IGN1cnJSYWRpbzsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRldGVybWluYXRlKCkpCi0gICAgICAgICAgICAg
ICAgc2V0SW5kZXRlcm1pbmF0ZShmYWxzZSk7Ci0gICAgICAgICAgICBzZXRDaGVja2VkKHRydWUs
IHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IHN0YXRlLmxlYWtQdHIoKTsgLy8g
RklYTUU6IENoZWNrIHdoZXRoZXIgdGhpcyBhY3R1YWxseSBlbmRzIHVwIGxlYWtpbmcuCi0gICAg
fQotICAgIHJldHVybiByZXN1bHQ7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1l
cygpLmNsaWNrRXZlbnQpCisgICAgICAgIHJldHVybiAwOworICAgIC8vIEZJWE1FOiBDaGVjayB3
aGV0aGVyIHRoZXJlIGFyZSBhbnkgY2FzZXMgd2hlcmUgdGhpcyBhY3R1YWxseSBlbmRzIHVwIGxl
YWtpbmcuCisgICAgcmV0dXJuIG1faW5wdXRUeXBlLT53aWxsRGlzcGF0Y2hDbGljaygpLmxlYWtQ
dHIoKTsKIH0KIAotdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpwb3N0RGlzcGF0Y2hFdmVudEhhbmRs
ZXIoRXZlbnQgKmV2dCwgdm9pZCogZGF0YSkKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6cG9zdERp
c3BhdGNoRXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCwgdm9pZCogZGF0YUZyb21QcmVEaXNwYXRj
aCkKIHsKLSAgICBpZiAoKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBDSEVDS0JPWCB8fCBkZXBy
ZWNhdGVkSW5wdXRUeXBlKCkgPT0gUkFESU8pICYmIGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5jbGlja0V2ZW50KSB7Ci0gICAgICAgIAotICAgICAgICBpZiAoRXZlbnRIYW5kbGluZ1N0YXRl
KiBzdGF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXZlbnRIYW5kbGluZ1N0YXRlKj4oZGF0YSkpIHsK
LSAgICAgICAgICAgIGlmIChkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gQ0hFQ0tCT1gpIHsKLSAg
ICAgICAgICAgICAgICAvLyBSZXZlcnNlIHRoZSBjaGVja2luZyB3ZSBkaWQgaW4gcHJlRGlzcGF0
Y2guCi0gICAgICAgICAgICAgICAgaWYgKGV2dC0+ZGVmYXVsdFByZXZlbnRlZCgpIHx8IGV2dC0+
ZGVmYXVsdEhhbmRsZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBzZXRJbmRldGVybWluYXRl
KHN0YXRlLT5tX2luZGV0ZXJtaW5hdGUpOwotICAgICAgICAgICAgICAgICAgICBzZXRDaGVja2Vk
KHN0YXRlLT5tX2NoZWNrZWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0ZS0+bV9j
dXJyUmFkaW8uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGV2dC0+ZGVmYXVsdFByZXZlbnRl
ZCgpIHx8IGV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBS
ZXN0b3JlIHRoZSBvcmlnaW5hbCBzZWxlY3RlZCByYWRpbyBidXR0b24gaWYgcG9zc2libGUuCi0g
ICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBpdCBpcyBzdGlsbCBhIHJhZGlvIGJ1dHRv
biBhbmQgb25seSBkbyB0aGUgcmVzdG9yYXRpb24gaWYgaXQgc3RpbGwKLSAgICAgICAgICAgICAg
ICAgICAgLy8gYmVsb25ncyB0byBvdXIgZ3JvdXAuCi0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KGlucHV0ICYmIGlucHV0LT5mb3JtKCkgPT0gZm9ybSgpICYmIGlucHV0LT5kZXByZWNhdGVkSW5w
dXRUeXBlKCkgPT0gUkFESU8gJiYgaW5wdXQtPm5hbWUoKSA9PSBuYW1lKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIE9rLCB0aGUgb2xkIHJhZGlvIGJ1dHRvbiBpcyBzdGlsbCBpbiBv
dXIgZm9ybSBhbmQgaW4gb3VyIGdyb3VwIGFuZCBpcyBzdGlsbCBhIAotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gcmFkaW8gYnV0dG9uLCBzbyBpdCdzIHNhZmUgdG8gcmVzdG9yZSBzZWxlY3Rp
b24gdG8gaXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC0+c2V0Q2hlY2tlZCh0cnVl
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzZXRJbmRldGVy
bWluYXRlKHN0YXRlLT5tX2luZGV0ZXJtaW5hdGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIExlZnQgY2xpY2tzIG9uIHJhZGlvIGJ1dHRvbnMgYW5kIGNoZWNrIGJveGVzIGFscmVhZHkg
cGVyZm9ybWVkIGRlZmF1bHQgYWN0aW9ucyBpbiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlcigpLiAK
LSAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0KKyAgICBPd25QdHI8Q2xp
Y2tIYW5kbGluZ1N0YXRlPiBzdGF0ZSA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PENsaWNrSGFuZGxp
bmdTdGF0ZSo+KGRhdGFGcm9tUHJlRGlzcGF0Y2gpKTsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSAh
PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghc3Rh
dGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lucHV0VHlwZS0+ZGlkRGlzcGF0Y2hDbGljayhl
dmVudCwgKnN0YXRlKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50KiBldnQpCkBAIC0xMzc5LDcgKzEwNDIsNyBAQCBib29sIEhUTUxJbnB1dEVs
ZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0CiAKIFN0cmluZyBIVE1MSW5wdXRFbGVtZW50OjpkZWZh
dWx0VmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodmFsdWVBdHRyKTsK
KyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpOwogfQogCiB2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6OnNldERlZmF1bHRWYWx1ZShjb25zdCBTdHJpbmcgJnZhbHVlKQpAQCAtMTM4
NywxMSArMTA1MCw2IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0RGVmYXVsdFZhbHVlKGMK
ICAgICBzZXRBdHRyaWJ1dGUodmFsdWVBdHRyLCB2YWx1ZSk7CiB9CiAKLWJvb2wgSFRNTElucHV0
RWxlbWVudDo6ZGVmYXVsdENoZWNrZWQoKSBjb25zdAotewotICAgIHJldHVybiBmYXN0SGFzQXR0
cmlidXRlKGNoZWNrZWRBdHRyKTsKLX0KLQogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXREZWZh
dWx0TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7CiAgICAgbV9kYXRhLnNldE5hbWUo
bmFtZSk7CkBAIC0xMzk5LDEyICsxMDU3LDEyIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0
RGVmYXVsdE5hbWUoY28KIAogU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OmFjY2VwdCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhY2NlcHRBdHRyKTsKKyAgICByZXR1cm4gZmFz
dEdldEF0dHJpYnV0ZShhY2NlcHRBdHRyKTsKIH0KIAogU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6
OmFsdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbHRBdHRyKTsKKyAgICBy
ZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShhbHRBdHRyKTsKIH0KIAogaW50IEhUTUxJbnB1dEVsZW1l
bnQ6Om1heExlbmd0aCgpIGNvbnN0CkBAIC0xNDI1LDEzICsxMDgzLDYgQEAgYm9vbCBIVE1MSW5w
dXRFbGVtZW50OjptdWx0aXBsZSgpIGNvbnN0CiAgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUo
bXVsdGlwbGVBdHRyKTsKIH0KIAotI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQotYm9vbCBI
VE1MSW5wdXRFbGVtZW50Ojp3ZWJraXRkaXJlY3RvcnkoKSBjb25zdAotewotICAgIHJldHVybiBm
YXN0SGFzQXR0cmlidXRlKHdlYmtpdGRpcmVjdG9yeUF0dHIpOwotfQotI2VuZGlmCi0KIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6c2V0U2l6ZSh1bnNpZ25lZCBzaXplKQogewogICAgIHNldEF0dHJp
YnV0ZShzaXplQXR0ciwgU3RyaW5nOjpudW1iZXIoc2l6ZSkpOwpAQCAtMTQzOSw1MiArMTA5MCwz
NiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFNpemUodW5zaWduZWQgCiAKIEtVUkwgSFRN
TElucHV0RWxlbWVudDo6c3JjKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwoZ2V0QXR0cmlidXRlKHNyY0F0dHIpKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+
Y29tcGxldGVVUkwoZmFzdEdldEF0dHJpYnV0ZShzcmNBdHRyKSk7CiB9CiAKLXZvaWQgSFRNTElu
cHV0RWxlbWVudDo6c2V0QXV0b2ZpbGxlZChib29sIGIpCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OnNldEF1dG9maWxsZWQoYm9vbCBhdXRvZmlsbGVkKQogewotICAgIGlmIChiID09IG1fYXV0b2Zp
bGxlZCkKKyAgICBpZiAoYXV0b2ZpbGxlZCA9PSBtX2lzQXV0b2ZpbGxlZCkKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKLSAgICBtX2F1dG9maWxsZWQgPSBiOworICAgIG1faXNBdXRvZmlsbGVk
ID0gYXV0b2ZpbGxlZDsKICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiB9CiAKIEZpbGVMaXN0
KiBIVE1MSW5wdXRFbGVtZW50OjpmaWxlcygpCiB7Ci0gICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5
cGUoKSAhPSBGSUxFKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9maWxlTGlzdC5n
ZXQoKTsKKyAgICByZXR1cm4gbV9pbnB1dFR5cGUtPmZpbGVzKCk7CiB9CiAKIGJvb2wgSFRNTElu
cHV0RWxlbWVudDo6aXNBY2NlcHRhYmxlVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVl
KSBjb25zdAogewotICAgIGlmIChkZXByZWNhdGVkSW5wdXRUeXBlKCkgIT0gTlVNQkVSKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gcHJvcG9zZWRWYWx1ZS5pc0VtcHR5KCkgfHwg
cGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUocHJvcG9zZWRWYWx1ZSwgMCk7CisgICAgcmV0dXJu
IG1faW5wdXRUeXBlLT5pc0FjY2VwdGFibGVWYWx1ZShwcm9wb3NlZFZhbHVlKTsKIH0KIAogU3Ry
aW5nIEhUTUxJbnB1dEVsZW1lbnQ6OnNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3Nl
ZFZhbHVlKSBjb25zdAogewotICAgIGlmIChkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gTlVNQkVS
KQotICAgICAgICByZXR1cm4gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUocHJvcG9zZWRWYWx1
ZSwgMCkgPyBwcm9wb3NlZFZhbHVlIDogU3RyaW5nKCk7Ci0KLSAgICBpZiAoaXNUZXh0RmllbGQo
KSkKLSAgICAgICAgcmV0dXJuIElucHV0RWxlbWVudDo6c2FuaXRpemVWYWx1ZUZvclRleHRGaWVs
ZCh0aGlzLCBwcm9wb3NlZFZhbHVlKTsKLQotICAgIC8vIElmIHRoZSBwcm9wb3NlZFZhbHVlIGlz
IG51bGwgdGhhbiB0aGlzIGlzIGEgcmVzZXQgc2NlbmFyaW8gYW5kIHdlCi0gICAgLy8gd2FudCB0
aGUgcmFuZ2UgaW5wdXQncyB2YWx1ZSBhdHRyaWJ1dGUgdG8gdGFrZSBwcmlvcml0eSBvdmVyIHRo
ZQotICAgIC8vIGNhbGN1bGF0ZWQgZGVmYXVsdCAobWlkZGxlKSB2YWx1ZS4KLSAgICBpZiAoZGVw
cmVjYXRlZElucHV0VHlwZSgpID09IFJBTkdFICYmICFwcm9wb3NlZFZhbHVlLmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm4gc2VyaWFsaXplRm9yTnVtYmVyVHlwZShTdGVwUmFuZ2UodGhpcykuY2xh
bXBWYWx1ZShwcm9wb3NlZFZhbHVlKSk7Ci0KLSAgICByZXR1cm4gcHJvcG9zZWRWYWx1ZTsKKyAg
ICByZXR1cm4gbV9pbnB1dFR5cGUtPnNhbml0aXplVmFsdWUocHJvcG9zZWRWYWx1ZSk7CiB9CiAK
IGJvb2wgSFRNTElucHV0RWxlbWVudDo6aGFzVW5hY2NlcHRhYmxlVmFsdWUoKSBjb25zdAogewot
ICAgIHJldHVybiBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gTlVNQkVSICYmIHJlbmRlcmVyKCkg
JiYgIWlzQWNjZXB0YWJsZVZhbHVlKHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnRl
eHQoKSk7CisgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5oYXNVbmFjY2VwdGFibGVWYWx1ZSgpOwog
fQogCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzSW5SYW5nZSgpIGNvbnN0CkBAIC0xNDk5LDcg
KzExMzQsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzT3V0T2ZSYW5nZSgpIGNvCiAKIGJv
b2wgSFRNTElucHV0RWxlbWVudDo6bmVlZHNBY3RpdmF0aW9uQ2FsbGJhY2soKQogewotICAgIHJl
dHVybiBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gUEFTU1dPUkQgfHwgbV9hdXRvY29tcGxldGUg
PT0gT2ZmOworICAgIHJldHVybiBtX2F1dG9jb21wbGV0ZSA9PSBPZmYgfHwgbV9pbnB1dFR5cGUt
PnNob3VsZFJlc2V0T25Eb2N1bWVudEFjdGl2YXRpb24oKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpyZWdpc3RlckZvckFjdGl2YXRpb25DYWxsYmFja0lmTmVlZGVkKCkKQEAgLTE1NDgs
MTUgKzExODMsMTQgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpkb2N1bWVudERpZEJlY29tZQog
CiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKIHsK
LSAgICBpZiAobV9pbWFnZUxvYWRlcikKLSAgICAgICAgbV9pbWFnZUxvYWRlci0+ZWxlbWVudFdp
bGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CisgICAgbV9pbnB1dFR5cGUtPndpbGxNb3ZlVG9O
ZXdPd25lckRvY3VtZW50KCk7CiAKICAgICAvLyBBbHdheXMgdW5yZWdpc3RlciBmb3IgY2FjaGUg
Y2FsbGJhY2tzIHdoZW4gbGVhdmluZyBhIGRvY3VtZW50LCBldmVuIGlmIHdlIHdvdWxkIG90aGVy
d2lzZSBsaWtlIHRvIGJlIHJlZ2lzdGVyZWQKICAgICBpZiAobmVlZHNBY3RpdmF0aW9uQ2FsbGJh
Y2soKSkKICAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlv
bkNhbGxiYWNrcyh0aGlzKTsKICAgICAgICAgCiAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlv
QnV0dG9ucygpLnJlbW92ZUJ1dHRvbih0aGlzKTsKLSAgICAKKwogICAgIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnRXaXRoU3RhdGU6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiB9CiAKQEAg
LTE1OTEsNTYgKzEyMjUsMzcgQEAgSFRNTERhdGFMaXN0RWxlbWVudCogSFRNTElucHV0RWxlbWVu
dDo6ZAogICAgIGlmICghbV9oYXNOb25FbXB0eUxpc3QpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgc3dpdGNoIChkZXByZWNhdGVkSW5wdXRUeXBlKCkpIHsKLSAgICBjYXNlIENPTE9SOgotICAg
IGNhc2UgREFURToKLSAgICBjYXNlIERBVEVUSU1FOgotICAgIGNhc2UgREFURVRJTUVMT0NBTDoK
LSAgICBjYXNlIEVNQUlMOgotICAgIGNhc2UgTU9OVEg6Ci0gICAgY2FzZSBOVU1CRVI6Ci0gICAg
Y2FzZSBSQU5HRToKLSAgICBjYXNlIFNFQVJDSDoKLSAgICBjYXNlIFRFTEVQSE9ORToKLSAgICBj
YXNlIFRFWFQ6Ci0gICAgY2FzZSBUSU1FOgotICAgIGNhc2UgVVJMOgotICAgIGNhc2UgV0VFSzog
ewotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQo
Z2V0QXR0cmlidXRlKGxpc3RBdHRyKSk7Ci0gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQt
Pmhhc1RhZ05hbWUoZGF0YWxpc3RUYWcpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxEYXRhTGlzdEVsZW1lbnQqPihlbGVtZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgQlVUVE9OOgotICAgIGNhc2UgQ0hFQ0tCT1g6Ci0gICAgY2FzZSBGSUxFOgotICAg
IGNhc2UgSElEREVOOgotICAgIGNhc2UgSU1BR0U6Ci0gICAgY2FzZSBJU0lOREVYOgotICAgIGNh
c2UgUEFTU1dPUkQ6Ci0gICAgY2FzZSBSQURJTzoKLSAgICBjYXNlIFJFU0VUOgotICAgIGNhc2Ug
U1VCTUlUOgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFt
X2lucHV0VHlwZS0+c2hvdWxkUmVzcGVjdExpc3RBdHRyaWJ1dGUoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQo
ZmFzdEdldEF0dHJpYnV0ZShsaXN0QXR0cikpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgaWYgKCFlbGVtZW50LT5oYXNUYWdOYW1lKGRhdGFsaXN0VGFnKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTERhdGFMaXN0RWxl
bWVudCo+KGVsZW1lbnQpOwogfQogCiBIVE1MT3B0aW9uRWxlbWVudCogSFRNTElucHV0RWxlbWVu
dDo6c2VsZWN0ZWRPcHRpb24oKSBjb25zdAogewotICAgIFN0cmluZyBjdXJyZW50VmFsdWUgPSB2
YWx1ZSgpOwotICAgIC8vIFRoZSBlbXB0eSB2YWx1ZSBuZXZlciBtYXRjaGVzIHRvIGEgZGF0YWxp
c3Qgb3B0aW9uIGJlY2F1c2UgaXQKKyAgICBTdHJpbmcgdmFsdWUgPSB0aGlzLT52YWx1ZSgpOwor
CisgICAgLy8gVGhlIGVtcHR5IHN0cmluZyBuZXZlciBtYXRjaGVzIHRvIGEgZGF0YWxpc3Qgb3B0
aW9uIGJlY2F1c2UgaXQKICAgICAvLyBkb2Vzbid0IHJlcHJlc2VudCBhIHN1Z2dlc3Rpb24gYWNj
b3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4KLSAgICBpZiAoY3VycmVudFZhbHVlLmlzRW1wdHkoKSkK
KyAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEhUTUxE
YXRhTGlzdEVsZW1lbnQqIHNvdXJjZUVsZW1lbnQgPSBkYXRhTGlzdCgpOwogICAgIGlmICghc291
cmNlRWxlbWVudCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiBvcHRpb25zID0gc291cmNlRWxlbWVudC0+b3B0aW9ucygpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IG9wdGlvbnMgJiYgaSA8IG9wdGlvbnMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICBpZiAo
IW9wdGlvbnMpCisgICAgICAgIHJldHVybiAwOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG9wdGlv
bnMtPmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewogICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9w
dGlvbkVsZW1lbnQqPihvcHRpb25zLT5pdGVtKGkpKTsKLSAgICAgICAgaWYgKCFvcHRpb24tPmRp
c2FibGVkKCkgJiYgY3VycmVudFZhbHVlID09IG9wdGlvbi0+dmFsdWUoKSkKKyAgICAgICAgaWYg
KCFvcHRpb24tPmRpc2FibGVkKCkgJiYgdmFsdWUgPT0gb3B0aW9uLT52YWx1ZSgpKQogICAgICAg
ICAgICAgcmV0dXJuIG9wdGlvbjsKICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC0xNjk3LDcgKzEz
MTIsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnN0ZXBVcEZyb21SZW5kZXJlCiAgICAgLy8g
VGhlIHZhbHVlIHdpbGwgYmUgdGhlIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgc3RlcHBpbmcgZm9yIDxp
bnB1dCB2YWx1ZT0oZW1wdHkvaW52YWxpZCkgc3RlcD0iYW55IiAvPgogICAgIC8vIEZJWE1FOiBO
b3QgYW55IGNoYW5nZXMgYWZ0ZXIgc3RlcHBpbmcsIGV2ZW4gaWYgaXQgaXMgYW4gaW52YWxpZCB2
YWx1ZSwgbWF5IGJlIGJldHRlci4KICAgICAvLyAoZS5nLiBTdGVwcGluZy11cCBmb3IgPGlucHV0
IHR5cGU9Im51bWJlciIgdmFsdWU9ImZvbyIgc3RlcD0iYW55IiAvPiA9PiAiZm9vIikKLSAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlKHN0ZXBBdHRyKSwgImFueSIpKQorICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSwgImFueSIp
KQogICAgICAgICBzdGVwID0gMDsKICAgICBlbHNlIGlmICghZ2V0QWxsb3dlZFZhbHVlU3RlcFdp
dGhEZWNpbWFsUGxhY2VzKCZzdGVwLCAmc3RlcERlY2ltYWxQbGFjZXMpKQogICAgICAgICByZXR1
cm47CkBAIC0xNzYyLDQ5ICsxMzc3LDEyNiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnN0ZXBV
cEZyb21SZW5kZXJlCiB9CiAKICNpZiBFTkFCTEUoV0NTUykKKwogdm9pZCBIVE1MSW5wdXRFbGVt
ZW50OjpzZXRXYXBJbnB1dEZvcm1hdChTdHJpbmcmIG1hc2spCiB7CiAgICAgU3RyaW5nIHZhbGlk
YXRlTWFzayA9IHZhbGlkYXRlSW5wdXRNYXNrKG1fZGF0YSwgbWFzayk7CiAgICAgaWYgKCF2YWxp
ZGF0ZU1hc2suaXNFbXB0eSgpKQogICAgICAgICBtX2RhdGEuc2V0SW5wdXRGb3JtYXRNYXNrKHZh
bGlkYXRlTWFzayk7CiB9CisKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKKwog
Ym9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc1NwZWVjaEVuYWJsZWQoKSBjb25zdAogewotICAgIHN3
aXRjaCAoZGVwcmVjYXRlZElucHV0VHlwZSgpKSB7CiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBSQU5HRSwgRU1BSUwsIFVSTCwgQ09MT1IgYW5kIERBVEUvVElNRSBpbnB1dCB0eXBlcy4K
LSAgICBjYXNlIE5VTUJFUjoKLSAgICBjYXNlIFBBU1NXT1JEOgotICAgIGNhc2UgU0VBUkNIOgot
ICAgIGNhc2UgVEVMRVBIT05FOgotICAgIGNhc2UgVEVYVDoKLSAgICAgICAgcmV0dXJuIFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNwZWVjaElucHV0RW5hYmxlZCgpICYmIGhhc0F0dHJpYnV0ZSh3
ZWJraXRzcGVlY2hBdHRyKTsKLSAgICBjYXNlIEJVVFRPTjoKLSAgICBjYXNlIENIRUNLQk9YOgot
ICAgIGNhc2UgQ09MT1I6Ci0gICAgY2FzZSBEQVRFOgotICAgIGNhc2UgREFURVRJTUU6Ci0gICAg
Y2FzZSBEQVRFVElNRUxPQ0FMOgotICAgIGNhc2UgRU1BSUw6Ci0gICAgY2FzZSBGSUxFOgotICAg
IGNhc2UgSElEREVOOgotICAgIGNhc2UgSU1BR0U6Ci0gICAgY2FzZSBJU0lOREVYOgotICAgIGNh
c2UgTU9OVEg6Ci0gICAgY2FzZSBSQURJTzoKLSAgICBjYXNlIFJBTkdFOgotICAgIGNhc2UgUkVT
RVQ6Ci0gICAgY2FzZSBTVUJNSVQ6Ci0gICAgY2FzZSBUSU1FOgotICAgIGNhc2UgVVJMOgotICAg
IGNhc2UgV0VFSzoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5zaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRl
KCkgJiYgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c3BlZWNoSW5wdXRFbmFibGVkKCkgJiYgaGFz
QXR0cmlidXRlKHdlYmtpdHNwZWVjaEF0dHIpOwogfQogCiAjZW5kaWYKIAorYm9vbCBIVE1MSW5w
dXRFbGVtZW50Ojppc1RleHRCdXR0b24oKSBjb25zdAoreworICAgIHJldHVybiBtX2lucHV0VHlw
ZS0+aXNUZXh0QnV0dG9uKCk7Cit9CisKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6aXNSYWRpb0J1
dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5pc1JhZGlvQnV0dG9uKCk7
Cit9CisKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6aXNTZWFyY2hGaWVsZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faW5wdXRUeXBlLT5pc1NlYXJjaEZpZWxkKCk7Cit9CisKK2Jvb2wgSFRNTElu
cHV0RWxlbWVudDo6aXNJbnB1dFR5cGVIaWRkZW4oKSBjb25zdAoreworICAgIHJldHVybiBtX2lu
cHV0VHlwZS0+aXNIaWRkZW5UeXBlKCk7Cit9CisKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6aXNQ
YXNzd29yZEZpZWxkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnB1dFR5cGUtPmlzUGFzc3dv
cmRGaWVsZCgpOworfQorCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzQ2hlY2tib3goKSBjb25z
dAoreworICAgIHJldHVybiBtX2lucHV0VHlwZS0+aXNDaGVja2JveCgpOworfQorCitib29sIEhU
TUxJbnB1dEVsZW1lbnQ6OmlzVGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5wdXRUeXBl
LT5pc1RleHRUeXBlKCk7Cit9CisKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6aXNFbWFpbEZpZWxk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnB1dFR5cGUtPmlzRW1haWxGaWVsZCgpOworfQor
Citib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzRmlsZVVwbG9hZCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1faW5wdXRUeXBlLT5pc0ZpbGVVcGxvYWQoKTsKK30KKworYm9vbCBIVE1MSW5wdXRFbGVt
ZW50Ojppc0ltYWdlQnV0dG9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnB1dFR5cGUtPmlz
SW1hZ2VCdXR0b24oKTsKK30KKworYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc051bWJlckZpZWxk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnB1dFR5cGUtPmlzTnVtYmVyRmllbGQoKTsKK30K
KworYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc1N1Ym1pdEJ1dHRvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1faW5wdXRUeXBlLT5pc1N1Ym1pdEJ1dHRvbigpOworfQorCitib29sIEhUTUxJbnB1
dEVsZW1lbnQ6OmlzVGVsZXBob25lRmllbGQoKSBjb25zdAoreworICAgIHJldHVybiBtX2lucHV0
VHlwZS0+aXNUZWxlcGhvbmVGaWVsZCgpOworfQorCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6Omlz
VVJMRmllbGQoKSBjb25zdAoreworICAgIHJldHVybiBtX2lucHV0VHlwZS0+aXNVUkxGaWVsZCgp
OworfQorCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzRW51bWVyYXRhYmxlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9pbnB1dFR5cGUtPmlzRW51bWVyYXRhYmxlKCk7Cit9CisKK2Jvb2wgSFRN
TElucHV0RWxlbWVudDo6aXNDaGVja2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2hlY2tlZCgp
ICYmIG1faW5wdXRUeXBlLT5pc0NoZWNrYWJsZSgpOworfQorCitib29sIEhUTUxJbnB1dEVsZW1l
bnQ6Omhhc1NwaW5CdXR0b24oKSBjb25zdAoreworICAgIHJldHVybiBtX2lucHV0VHlwZS0+aGFz
U3BpbkJ1dHRvbigpOworfQorCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnN1cHBvcnRzUGxhY2Vo
b2xkZXIoKSBjb25zdAoreworICAgIHJldHVybiBpc1RleHRUeXBlKCk7Cit9CisKK0NoZWNrZWRS
YWRpb0J1dHRvbnMmIEhUTUxJbnB1dEVsZW1lbnQ6OmNoZWNrZWRSYWRpb0J1dHRvbnMoKSBjb25z
dAoreworICAgIGlmIChIVE1MRm9ybUVsZW1lbnQqIGZvcm1FbGVtZW50ID0gZm9ybSgpKQorICAg
ICAgICByZXR1cm4gZm9ybUVsZW1lbnQtPmNoZWNrZWRSYWRpb0J1dHRvbnMoKTsKKyAgICByZXR1
cm4gZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpOworfQorCit2b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KEV2ZW50KiBldmVudCkKK3sK
KyAgICBJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KG1fZGF0YSwg
dGhpcywgdGhpcywgZXZlbnQpOworfQorCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElu
cHV0RWxlbWVudC5oCShyZXZpc2lvbiA3NDg3MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDIxICsyNSwxNSBAQAogI2RlZmluZSBIVE1M
SW5wdXRFbGVtZW50X2gKIAogI2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKLSNp
bmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnB1dEVsZW1lbnQuaCIKLSNp
bmNsdWRlICJJbnB1dFR5cGUuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgRGF0ZUNvbXBvbmVudHM7CiBjbGFzcyBGaWxlTGlzdDsKIGNs
YXNzIEhUTUxEYXRhTGlzdEVsZW1lbnQ7Ci1jbGFzcyBIVE1MSW1hZ2VMb2FkZXI7CiBjbGFzcyBI
VE1MT3B0aW9uRWxlbWVudDsKIGNsYXNzIElucHV0VHlwZTsKIGNsYXNzIEtVUkw7Ci1jbGFzcyBW
aXNpYmxlU2VsZWN0aW9uOwogCiBjbGFzcyBIVE1MSW5wdXRFbGVtZW50IDogcHVibGljIEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50LCBwdWJsaWMgSW5wdXRFbGVtZW50IHsKIHB1YmxpYzoKQEAg
LTg0LDM4ICs3OCwzOCBAQCBwdWJsaWM6CiAgICAgLy8gc3RlcFVwKCkvc3RlcERvd24oKSBmb3Ig
dXNlci1pbnRlcmFjdGlvbi4KICAgICB2b2lkIHN0ZXBVcEZyb21SZW5kZXJlcihpbnQpOwogCi0g
ICAgYm9vbCBpc1RleHRCdXR0b24oKSBjb25zdCB7IHJldHVybiBkZXByZWNhdGVkSW5wdXRUeXBl
KCkgPT0gU1VCTUlUIHx8IGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBSRVNFVCB8fCBkZXByZWNh
dGVkSW5wdXRUeXBlKCkgPT0gQlVUVE9OOyB9CisgICAgYm9vbCBpc1RleHRCdXR0b24oKSBjb25z
dDsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1JhZGlvQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZGVw
cmVjYXRlZElucHV0VHlwZSgpID09IFJBRElPOyB9CisgICAgdmlydHVhbCBib29sIGlzUmFkaW9C
dXR0b24oKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNTZWFyY2hGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJ
bnB1dFR5cGUoKSA9PSBTRUFSQ0g7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNJbnB1dFR5cGVIaWRk
ZW4oKSBjb25zdCB7IHJldHVybiBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gSElEREVOOyB9Ci0g
ICAgdmlydHVhbCBib29sIGlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0
ZWRJbnB1dFR5cGUoKSA9PSBQQVNTV09SRDsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrYm94
KCkgY29uc3QgeyByZXR1cm4gZGVwcmVjYXRlZElucHV0VHlwZSgpID09IENIRUNLQk9YOyB9Cisg
ICAgdmlydHVhbCBib29sIGlzU2VhcmNoRmllbGQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNJbnB1dFR5cGVIaWRkZW4oKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQYXNzd29yZEZp
ZWxkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzQ2hlY2tib3goKSBjb25zdDsKIAogICAg
IC8vIEZJWE1FOiBJdCdzIGhpZ2hseSBsaWtlbHkgdGhhdCBhbnkgY2FsbCBzaXRlIGNhbGxpbmcg
dGhpcyBmdW5jdGlvbiBzaG91bGQgaW5zdGVhZAogICAgIC8vIGJlIHVzaW5nIGEgZGlmZmVyZW50
IG9uZS4gTWFueSBpbnB1dCBlbGVtZW50cyBiZWhhdmUgbGlrZSB0ZXh0IGZpZWxkcywgYW5kIGlu
IGFkZGl0aW9uCiAgICAgLy8gYW55IHVua25vd24gaW5wdXQgdHlwZSBpcyB0cmVhdGVkIGFzIHRl
eHQuIENvbnNpZGVyLCBmb3IgZXhhbXBsZSwgaXNUZXh0RmllbGQgb3IKICAgICAvLyBpc1RleHRG
aWVsZCAmJiAhaXNQYXNzd29yZEZpZWxkLgotICAgIGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1
cm4gZGVwcmVjYXRlZElucHV0VHlwZSgpID09IFRFWFQ7IH0KKyAgICBib29sIGlzVGV4dCgpIGNv
bnN0OwogCi0gICAgYm9vbCBpc0VtYWlsRmllbGQoKSBjb25zdCB7IHJldHVybiBkZXByZWNhdGVk
SW5wdXRUeXBlKCkgPT0gRU1BSUw7IH0KLSAgICBib29sIGlzRmlsZVVwbG9hZCgpIGNvbnN0IHsg
cmV0dXJuIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBGSUxFOyB9Ci0gICAgYm9vbCBpc0ltYWdl
QnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZGVwcmVjYXRlZElucHV0VHlwZSgpID09IElNQUdFOyB9
Ci0gICAgYm9vbCBpc051bWJlckZpZWxkKCkgY29uc3QgeyByZXR1cm4gZGVwcmVjYXRlZElucHV0
VHlwZSgpID09IE5VTUJFUjsgfQotICAgIGJvb2wgaXNTdWJtaXRCdXR0b24oKSBjb25zdCB7IHJl
dHVybiBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gU1VCTUlUOyB9Ci0gICAgYm9vbCBpc1RlbGVw
aG9uZUZpZWxkKCkgY29uc3QgeyByZXR1cm4gZGVwcmVjYXRlZElucHV0VHlwZSgpID09IFRFTEVQ
SE9ORTsgfQotICAgIGJvb2wgaXNVUkxGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJ
bnB1dFR5cGUoKSA9PSBVUkw7IH0KKyAgICBib29sIGlzRW1haWxGaWVsZCgpIGNvbnN0OworICAg
IGJvb2wgaXNGaWxlVXBsb2FkKCkgY29uc3Q7CisgICAgYm9vbCBpc0ltYWdlQnV0dG9uKCkgY29u
c3Q7CisgICAgYm9vbCBpc051bWJlckZpZWxkKCkgY29uc3Q7CisgICAgYm9vbCBpc1N1Ym1pdEJ1
dHRvbigpIGNvbnN0OworICAgIGJvb2wgaXNUZWxlcGhvbmVGaWVsZCgpIGNvbnN0OworICAgIGJv
b2wgaXNVUkxGaWVsZCgpIGNvbnN0OwogCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICB2
aXJ0dWFsIGJvb2wgaXNTcGVlY2hFbmFibGVkKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIGJvb2wg
Y2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hlY2tlZDsgfQorICAgIGJvb2wgY2hlY2tlZCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNDaGVja2VkOyB9CiAgICAgdm9pZCBzZXRDaGVja2VkKGJvb2ws
IGJvb2wgc2VuZENoYW5nZUV2ZW50ID0gZmFsc2UpOwogCiAgICAgLy8gJ2luZGV0ZXJtaW5hdGUn
IGlzIGEgc3RhdGUgaW5kZXBlbmRlbnQgb2YgdGhlIGNoZWNrZWQgc3RhdGUgdGhhdCBjYXVzZXMg
dGhlIGNvbnRyb2wgdG8gZHJhdyBpbiBhIHdheSB0aGF0IGhpZGVzIHRoZSBhY3R1YWwgc3RhdGUu
Ci0gICAgYm9vbCBpbmRldGVybWluYXRlKCkgY29uc3QgeyByZXR1cm4gbV9pbmRldGVybWluYXRl
OyB9CisgICAgYm9vbCBpbmRldGVybWluYXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luZGV0ZXJt
aW5hdGU7IH0KICAgICB2b2lkIHNldEluZGV0ZXJtaW5hdGUoYm9vbCk7CiAKICAgICB2aXJ0dWFs
IGludCBzaXplKCkgY29uc3Q7CkBAIC0xNjUsOCArMTU5LDYgQEAgcHVibGljOgogCiAgICAgU3Ry
aW5nIGRlZmF1bHRWYWx1ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0RGVmYXVsdFZhbHVlKGNvbnN0
IFN0cmluZyYpOwotICAgIAotICAgIGJvb2wgZGVmYXVsdENoZWNrZWQoKSBjb25zdDsKIAogICAg
IHZvaWQgc2V0RGVmYXVsdE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKQEAgLTE4MiwxMiAr
MTc0LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBtdWx0aXBsZSgpIGNvbnN0OwogCi0jaWYgRU5B
QkxFKERJUkVDVE9SWV9VUExPQUQpCi0gICAgYm9vbCB3ZWJraXRkaXJlY3RvcnkoKSBjb25zdDsK
LSNlbmRpZgotCi0gICAgdmlydHVhbCBib29sIGlzQXV0b2ZpbGxlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fYXV0b2ZpbGxlZDsgfQotICAgIHZvaWQgc2V0QXV0b2ZpbGxlZChib29sIHZhbHVlID0gdHJ1
ZSk7CisgICAgdmlydHVhbCBib29sIGlzQXV0b2ZpbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNB
dXRvZmlsbGVkOyB9CisgICAgdm9pZCBzZXRBdXRvZmlsbGVkKGJvb2wgPSB0cnVlKTsKIAogICAg
IEZpbGVMaXN0KiBmaWxlcygpOwogCkBAIC0yMDMsNjAgKzE5MSwyNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRXYXBJbnB1dEZvcm1hdChTdHJpbmcmIG1hc2spOwogI2VuZGlmCiAKLSAgICBpbmxp
bmUgQ2hlY2tlZFJhZGlvQnV0dG9ucyYgY2hlY2tlZFJhZGlvQnV0dG9ucygpIGNvbnN0Ci0gICAg
ewotICAgICAgICBpZiAoSFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudCA9IGZvcm0oKSkKLSAg
ICAgICAgICAgIHJldHVybiBmb3JtRWxlbWVudC0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpOwotICAg
ICAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpOwotICAgIH0KLQot
ICAgIHZvaWQgaGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoRXZlbnQqIGV2ZW50KTsKLQor
ICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcHVibGljIHNvIHRoZXkgY2FuIGJlIHVzZWQgaW4g
SW5wdXRUeXBlIGNsYXNzZXMuCisgICAgLy8gT3RoZXJ3aXNlLCB0aGV5IHdvdWxkIGJlIHByaXZh
dGUuCisgICAgQ2hlY2tlZFJhZGlvQnV0dG9ucyYgY2hlY2tlZFJhZGlvQnV0dG9ucygpIGNvbnN0
OworICAgIHZvaWQgaGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoRXZlbnQqKTsKKyAgICB2
b2lkIHVwZGF0ZUNoZWNrZWRSYWRpb0J1dHRvbnMoKTsKKyAgICAKIHByb3RlY3RlZDoKICAgICBI
VE1MSW5wdXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3Jt
RWxlbWVudCogPSAwKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50Kik7CiAKIHByaXZhdGU6Ci0gICAgZW51bSBEZXByZWNhdGVkSW5wdXRUeXBlIHsKLSAgICAg
ICAgVEVYVCA9IDAsIC8vIFRFWFQgbXVzdCBiZSAwLgotICAgICAgICBQQVNTV09SRCwKLSAgICAg
ICAgSVNJTkRFWCwKLSAgICAgICAgQ0hFQ0tCT1gsCi0gICAgICAgIFJBRElPLAotICAgICAgICBT
VUJNSVQsCi0gICAgICAgIFJFU0VULAotICAgICAgICBGSUxFLAotICAgICAgICBISURERU4sCi0g
ICAgICAgIElNQUdFLAotICAgICAgICBCVVRUT04sCi0gICAgICAgIFNFQVJDSCwKLSAgICAgICAg
UkFOR0UsCi0gICAgICAgIEVNQUlMLAotICAgICAgICBOVU1CRVIsCi0gICAgICAgIFRFTEVQSE9O
RSwKLSAgICAgICAgVVJMLAotICAgICAgICBDT0xPUiwKLSAgICAgICAgREFURSwKLSAgICAgICAg
REFURVRJTUUsCi0gICAgICAgIERBVEVUSU1FTE9DQUwsCi0gICAgICAgIE1PTlRILAotICAgICAg
ICBUSU1FLAotICAgICAgICBXRUVLLAotICAgIH07Ci0KICAgICBlbnVtIEF1dG9Db21wbGV0ZVNl
dHRpbmcgeyBVbmluaXRpYWxpemVkLCBPbiwgT2ZmIH07CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBIVE1MSW5wdXRFbGVtZW50OjpEZXByZWNhdGVkSW5wdXRUeXBlLCBDYXNlRm9sZGlu
Z0hhc2g+IElucHV0VHlwZU1hcDsKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGVNYXA+
IGNyZWF0ZVR5cGVNYXAoKTsKLSAgICBEZXByZWNhdGVkSW5wdXRUeXBlIGRlcHJlY2F0ZWRJbnB1
dFR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxEZXByZWNhdGVkSW5wdXRUeXBlPiht
X2RlcHJlY2F0ZWRUeXBlTnVtYmVyKTsgfQotCiAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9O
ZXdPd25lckRvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld093bmVyRG9j
dW1lbnQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJk
RXZlbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGRlcHJl
Y2F0ZWRJbnB1dFR5cGUoKSAhPSBJTUFHRTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0
YWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGb2N1c0FwcGVhcmFuY2UoYm9v
bCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pOwogICAgIHZpcnR1YWwgdm9pZCBhYm91dFRvVW5s
b2FkKCk7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3Q7CkBA
IC0yNjQsMTYgKzIxOCwxNCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmb3JtQ29udHJvbE5hbWUoKSBjb25zdDsKICAKICAgICAvLyBpc0NoZWNrZWQgaXMgdXNl
ZCBieSB0aGUgcmVuZGVyaW5nIHRyZWUvQ1NTIHdoaWxlIGNoZWNrZWQoKSBpcyB1c2VkIGJ5IEpT
IHRvIGRldGVybWluZSBjaGVja2VkIHN0YXRlCi0gICAgdmlydHVhbCBib29sIGlzQ2hlY2tlZCgp
IGNvbnN0IHsgcmV0dXJuIGNoZWNrZWQoKSAmJiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IENI
RUNLQk9YIHx8IGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBSQURJTyk7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNDaGVja2VkKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzSW5kZXRlcm1pbmF0
ZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV0ZXJtaW5hdGUoKTsgfQogICAgIAogICAgIHZpcnR1YWwg
Ym9vbCBpc1RleHRGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIGlzVGV4dEZpZWxkKCk7IH0K
IAotICAgIHZpcnR1YWwgYm9vbCBoYXNTcGluQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZGVwcmVj
YXRlZElucHV0VHlwZSgpID09IE5VTUJFUiB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gREFU
RSB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gREFURVRJTUUgfHwgZGVwcmVjYXRlZElucHV0
VHlwZSgpID09IERBVEVUSU1FTE9DQUwgfHwgZGVwcmVjYXRlZElucHV0VHlwZSgpID09IE1PTlRI
IHx8IGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBUSU1FIHx8IGRlcHJlY2F0ZWRJbnB1dFR5cGUo
KSA9PSBXRUVLOyB9CisgICAgdmlydHVhbCBib29sIGhhc1NwaW5CdXR0b24oKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgY2FuVHJpZ2dlckltcGxpY2l0U3VibWlzc2lvbigpIGNvbnN0IHsgcmV0
dXJuIGlzVGV4dEZpZWxkKCk7IH0KIAotICAgIGJvb2wgYWxsb3dzSW5kZXRlcm1pbmF0ZSgpIGNv
bnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBDSEVDS0JPWCB8fCBkZXByZWNh
dGVkSW5wdXRUeXBlKCkgPT0gUkFESU87IH0KLQogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBzZWFyY2hF
dmVudHNTaG91bGRCZURpc3BhdGNoZWQoKSBjb25zdDsKQEAgLTI5Niw5ICsyNDgsNiBAQCBwcml2
YXRlOgogCiAgICAgdmlydHVhbCBib29sIGlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpIGNvbnN0
OwogCi0gICAgLy8gUmVwb3J0IGlmIHRoaXMgaW5wdXQgdHlwZSB1c2VzIGhlaWdodCAmIHdpZHRo
IGF0dHJpYnV0ZXMKLSAgICBib29sIHJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJzKCkgY29uc3Qg
eyByZXR1cm4gZGVwcmVjYXRlZElucHV0VHlwZSgpID09IElNQUdFIHx8IGRlcHJlY2F0ZWRJbnB1
dFR5cGUoKSA9PSBISURERU47IH0KLQogICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwogCiAgICAg
dmlydHVhbCB2b2lkKiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlcihFdmVudCopOwpAQCAtMzE5LDgg
KzI2OCw2IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VBdHRy
aWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29uc3Q7CiAKLSAgICBib29sIHN0b3Jlc1Zh
bHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCkgY29uc3Q7Ci0KICAgICBib29sIG5lZWRzQWN0aXZh
dGlvbkNhbGxiYWNrKCk7CiAgICAgdm9pZCByZWdpc3RlckZvckFjdGl2YXRpb25DYWxsYmFja0lm
TmVlZGVkKCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyRm9yQWN0aXZhdGlvbkNhbGxiYWNrSWZOZWVk
ZWQoKTsKQEAgLTMyOCw3ICsyNzUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c01heExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIGlzVGV4dFR5cGUoKTsgfQogICAgIGJvb2wg
aXNUZXh0VHlwZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzUGxhY2Vob2xk
ZXIoKSBjb25zdCB7IHJldHVybiBpc1RleHRUeXBlKCkgfHwgZGVwcmVjYXRlZElucHV0VHlwZSgp
ID09IElTSU5ERVg7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNQbGFjZWhvbGRlcigpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiB2YWx1
ZSgpLmlzRW1wdHkoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVGb2N1c0V2ZW50KCk7CiAg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZUJsdXJFdmVudCgpOwpAQCAtMzQxLDggKzI4OCw2IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZVR5cGUoKTsKIAotICAgIHZvaWQgdXBkYXRlQ2hlY2tl
ZFJhZGlvQnV0dG9ucygpOwotICAgIAogICAgIC8vIEhlbHBlciBmb3Igc3RlcFVwKCkvc3RlcERv
d24oKS4gIEFkZHMgc3RlcCB2YWx1ZSAqIGNvdW50IHRvIHRoZSBjdXJyZW50IHZhbHVlLgogICAg
IHZvaWQgYXBwbHlTdGVwKGRvdWJsZSBjb3VudCwgRXhjZXB0aW9uQ29kZSYpOwogCkBAIC0zNTYs
MjkgKzMwMSwxOSBAQCBwcml2YXRlOgogCiAgICAgSW5wdXRFbGVtZW50RGF0YSBtX2RhdGE7CiAg
ICAgc2hvcnQgbV9tYXhSZXN1bHRzOwotICAgIE93blB0cjxIVE1MSW1hZ2VMb2FkZXI+IG1faW1h
Z2VMb2FkZXI7Ci0gICAgUmVmUHRyPEZpbGVMaXN0PiBtX2ZpbGVMaXN0OwotICAgIHVuc2lnbmVk
IG1fZGVwcmVjYXRlZFR5cGVOdW1iZXIgOiA1OyAvLyBEZXByZWNhdGVkSW5wdXRUeXBlIAotICAg
IGJvb2wgbV9jaGVja2VkIDogMTsKLSAgICBib29sIG1fZGVmYXVsdENoZWNrZWQgOiAxOwotICAg
IGJvb2wgbV91c2VEZWZhdWx0Q2hlY2tlZCA6IDE7Ci0gICAgYm9vbCBtX2luZGV0ZXJtaW5hdGUg
OiAxOwotICAgIGJvb2wgbV9oYXZlVHlwZSA6IDE7Ci0gICAgYm9vbCBtX2FjdGl2ZVN1Ym1pdCA6
IDE7CisgICAgYm9vbCBtX2lzQ2hlY2tlZCA6IDE7CisgICAgYm9vbCBtX3JlZmxlY3RzQ2hlY2tl
ZEF0dHJpYnV0ZSA6IDE7CisgICAgYm9vbCBtX2lzSW5kZXRlcm1pbmF0ZSA6IDE7CisgICAgYm9v
bCBtX2hhc1R5cGUgOiAxOworICAgIGJvb2wgbV9pc0FjdGl2YXRlZFN1Ym1pdCA6IDE7CiAgICAg
dW5zaWduZWQgbV9hdXRvY29tcGxldGUgOiAyOyAvLyBBdXRvQ29tcGxldGVTZXR0aW5nCi0gICAg
Ym9vbCBtX2F1dG9maWxsZWQgOiAxOwotICAgIGJvb2wgbV9pbml0ZWQgOiAxOworICAgIGJvb2wg
bV9pc0F1dG9maWxsZWQgOiAxOwogI2lmIEVOQUJMRShEQVRBTElTVCkKICAgICBib29sIG1faGFz
Tm9uRW1wdHlMaXN0IDogMTsKICNlbmRpZgogICAgIE93blB0cjxJbnB1dFR5cGU+IG1faW5wdXRU
eXBlOwogfTsKIAotaW5saW5lIHZvaWQgSFRNTElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQoRXZlbnQqIGV2ZW50KQotewotICAgIElucHV0RWxlbWVudDo6aGFuZGxl
QmVmb3JlVGV4dEluc2VydGVkRXZlbnQobV9kYXRhLCB0aGlzLCB0aGlzLCBldmVudCk7Ci19Ci0K
IH0gLy9uYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2h0bWwvSGlkZGVuSW5wdXRU
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSGlkZGVuSW5wdXRUeXBlLmNwcAko
cmV2aXNpb24gNzQ4NzEpCisrKyBXZWJDb3JlL2h0bWwvSGlkZGVuSW5wdXRUeXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCkBAIC01NSw0ICs1NiwyOCBAQCBSZW5kZXJPYmplY3QqIEhpZGRlbklucHV0VHlwZTo6
Y3JlYXRlUmVuCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgSGlkZGVuSW5wdXRUeXBlOjphY2Nl
c3NLZXlBY3Rpb24oYm9vbCkKK3sKK30KKworYm9vbCBIaWRkZW5JbnB1dFR5cGU6OnJlbmRlcmVy
SXNOZWVkZWQoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBIaWRkZW5JbnB1dFR5
cGU6OnN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCkKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgSGlkZGVuSW5wdXRUeXBlOjppc0hpZGRlblR5cGUoKSBjb25zdAorewor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIEhpZGRlbklucHV0VHlwZTo6c2hvdWxkUmVzcGVj
dEhlaWdodEFuZFdpZHRoQXR0cmlidXRlcygpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9IaWRkZW5JbnB1dFR5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSGlkZGVuSW5wdXRUeXBlLmgJKHJldmlzaW9u
IDc0ODcxKQorKysgV2ViQ29yZS9odG1sL0hpZGRlbklucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw2ICs0NCwxMSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNW
YWxpZGF0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
YWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCk7CisgICAgdmlydHVhbCBib29s
IHJlbmRlcmVySXNOZWVkZWQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3RvcmVzVmFsdWVTZXBhcmF0
ZUZyb21BdHRyaWJ1dGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNIaWRkZW5UeXBlKCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHNob3VsZFJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJpYnV0ZXMo
KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9JbWFn
ZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBl
LmNwcAkocmV2aXNpb24gNzQ4NzEpCisrKyBXZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgpAQCAtMjMsNiArMjMsOCBAQAogI2luY2x1ZGUgIkltYWdlSW5wdXRUeXBlLmgiCiAK
ICNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJIVE1MSW1hZ2VMb2FkZXIuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50
LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCkBA
IC0zMCw2ICszMiwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2lubGluZSBJbWFnZUlu
cHV0VHlwZTo6SW1hZ2VJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKKyAgICA6
IEJhc2VCdXR0b25JbnB1dFR5cGUoZWxlbWVudCkKK3sKK30KKwogUGFzc093blB0cjxJbnB1dFR5
cGU+IEltYWdlSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKIHsK
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEltYWdlSW5wdXRUeXBlKGVsZW1lbnQpKTsKQEAgLTg1
LDQgKzkyLDc3IEBAIFJlbmRlck9iamVjdCogSW1hZ2VJbnB1dFR5cGU6OmNyZWF0ZVJlbmQKICAg
ICByZXR1cm4gaW1hZ2U7CiB9CiAKK3ZvaWQgSW1hZ2VJbnB1dFR5cGU6OmFsdEF0dHJpYnV0ZUNo
YW5nZWQoKQoreworICAgIFJlbmRlckltYWdlKiBpbWFnZSA9IHRvUmVuZGVySW1hZ2UoZWxlbWVu
dCgpLT5yZW5kZXJlcigpKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAg
IGltYWdlLT51cGRhdGVBbHRUZXh0KCk7Cit9CisKK3ZvaWQgSW1hZ2VJbnB1dFR5cGU6OnNyY0F0
dHJpYnV0ZUNoYW5nZWQoKQoreworICAgIGlmICghZWxlbWVudCgpLT5yZW5kZXJlcigpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKCFtX2ltYWdlTG9hZGVyKQorICAgICAgICBtX2ltYWdlTG9h
ZGVyID0gYWRvcHRQdHIobmV3IEhUTUxJbWFnZUxvYWRlcihlbGVtZW50KCkpKTsKKyAgICBtX2lt
YWdlTG9hZGVyLT51cGRhdGVGcm9tRWxlbWVudElnbm9yaW5nUHJldmlvdXNFcnJvcigpOworfQor
Cit2b2lkIEltYWdlSW5wdXRUeXBlOjphdHRhY2goKQoreworICAgIEJhc2VCdXR0b25JbnB1dFR5
cGU6OmF0dGFjaCgpOworCisgICAgaWYgKCFtX2ltYWdlTG9hZGVyKQorICAgICAgICBtX2ltYWdl
TG9hZGVyID0gYWRvcHRQdHIobmV3IEhUTUxJbWFnZUxvYWRlcihlbGVtZW50KCkpKTsKKyAgICBt
X2ltYWdlTG9hZGVyLT51cGRhdGVGcm9tRWxlbWVudCgpOworCisgICAgUmVuZGVySW1hZ2UqIHJl
bmRlcmVyID0gdG9SZW5kZXJJbWFnZShlbGVtZW50KCktPnJlbmRlcmVyKCkpOworICAgIGlmICgh
cmVuZGVyZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9pbWFnZUxvYWRlci0+aGF2
ZUZpcmVkQmVmb3JlTG9hZEV2ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlcklt
YWdlUmVzb3VyY2UqIGltYWdlUmVzb3VyY2UgPSByZW5kZXJlci0+aW1hZ2VSZXNvdXJjZSgpOwor
ICAgIGltYWdlUmVzb3VyY2UtPnNldENhY2hlZEltYWdlKG1faW1hZ2VMb2FkZXItPmltYWdlKCkp
OyAKKworICAgIC8vIElmIHdlIGhhdmUgbm8gaW1hZ2UgYXQgYWxsIGJlY2F1c2Ugd2UgaGF2ZSBu
byBzcmMgYXR0cmlidXRlLCBzZXQKKyAgICAvLyBpbWFnZSBoZWlnaHQgYW5kIHdpZHRoIGZvciB0
aGUgYWx0IHRleHQgaW5zdGVhZC4KKyAgICBpZiAoIW1faW1hZ2VMb2FkZXItPmltYWdlKCkgJiYg
IWltYWdlUmVzb3VyY2UtPmNhY2hlZEltYWdlKCkpCisgICAgICAgIHJlbmRlcmVyLT5zZXRJbWFn
ZVNpemVGb3JBbHRUZXh0KCk7Cit9CisKK3ZvaWQgSW1hZ2VJbnB1dFR5cGU6OndpbGxNb3ZlVG9O
ZXdPd25lckRvY3VtZW50KCkKK3sKKyAgICBCYXNlQnV0dG9uSW5wdXRUeXBlOjp3aWxsTW92ZVRv
TmV3T3duZXJEb2N1bWVudCgpOworICAgIGlmIChtX2ltYWdlTG9hZGVyKQorICAgICAgICBtX2lt
YWdlTG9hZGVyLT5lbGVtZW50V2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKK30KKworYm9v
bCBJbWFnZUlucHV0VHlwZTo6c2hvdWxkUmVzcGVjdEFsaWduQXR0cmlidXRlKCkKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbWFnZUlucHV0VHlwZTo6Y2FuQmVTdWNjZXNzZnVsU3Vi
bWl0QnV0dG9uKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbWFnZUlucHV0VHlw
ZTo6aXNJbWFnZUJ1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
SW1hZ2VJbnB1dFR5cGU6OmlzRW51bWVyYXRhYmxlKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgSW1hZ2VJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJp
YnV0ZXMoKQoreworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuaAkocmV2aXNpb24gNzQ4NzEpCisrKyBXZWJDb3JlL2h0
bWwvSW1hZ2VJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMywyNCArMzQsMzYgQEAKIAogI2lu
Y2x1ZGUgIkJhc2VCdXR0b25JbnB1dFR5cGUuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBIVE1M
SW1hZ2VMb2FkZXI7CisKIGNsYXNzIEltYWdlSW5wdXRUeXBlIDogcHVibGljIEJhc2VCdXR0b25J
bnB1dFR5cGUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPElucHV0VHlwZT4gY3Jl
YXRlKEhUTUxJbnB1dEVsZW1lbnQqKTsKIAogcHJpdmF0ZToKLSAgICBJbWFnZUlucHV0VHlwZShI
VE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KSA6IEJhc2VCdXR0b25JbnB1dFR5cGUoZWxlbWVudCkg
eyB9CisgICAgSW1hZ2VJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCopOwogICAgIHZpcnR1YWwg
Y29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgaXNGb3JtRGF0YUFwcGVuZGFibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXBw
ZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzVmFsaWRhdGlvbigpIGNvbnN0OwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBj
cmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIGhhbmRsZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWx0QXR0cmlidXRlQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCBzcmNBdHRyaWJ1dGVD
aGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOworICAgIHZpcnR1YWwgdm9pZCB3
aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXNw
ZWN0QWxpZ25BdHRyaWJ1dGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQmVTdWNjZXNzZnVsU3Vi
bWl0QnV0dG9uKCk7CisgICAgdmlydHVhbCBib29sIGlzSW1hZ2VCdXR0b24oKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNFbnVtZXJhdGFibGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
UmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0cmlidXRlcygpOwogCi0gICAgLy8gVGhpcyBpcyB2YWxp
ZCBvbmx5IGR1cmluZyBIVE1MRm9ybUVsZW1lbnQ6OnByZXBhcmVGb3JTdWJtaXNzaW9uKCkuCi0g
ICAgSW50UG9pbnQgbV9jbGlja0xvY2F0aW9uOworICAgIE93blB0cjxIVE1MSW1hZ2VMb2FkZXI+
IG1faW1hZ2VMb2FkZXI7CisgICAgSW50UG9pbnQgbV9jbGlja0xvY2F0aW9uOyAvLyBWYWxpZCBv
bmx5IGR1cmluZyBIVE1MRm9ybUVsZW1lbnQ6OnByZXBhcmVGb3JTdWJtaXNzaW9uKCkuCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4
NzEpCisrKyBXZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw3
ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtv
diAoYXBAbnlwb3AuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgKHNh
bUB3ZWJraXQub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRW1haWxJbnB1dFR5cGUu
aCIKICNpbmNsdWRlICJGaWxlSW5wdXRUeXBlLmgiCiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0Lmgi
CisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhpZGRlbklucHV0VHlwZS5oIgogI2luY2x1ZGUgIkltYWdlSW5wdXRU
eXBlLmgiCkBAIC02OCw3ICs2OSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIAotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUGFzc093blB0cjxJbnB1dFR5
cGU+ICgqKShIVE1MSW5wdXRFbGVtZW50KiksIENhc2VGb2xkaW5nSGFzaD4gSW5wdXRUeXBlRmFj
dG9yeU1hcDsKK3R5cGVkZWYgUGFzc093blB0cjxJbnB1dFR5cGU+ICgqSW5wdXRUeXBlRmFjdG9y
eUZ1bmN0aW9uKShIVE1MSW5wdXRFbGVtZW50Kik7Cit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBJ
bnB1dFR5cGVGYWN0b3J5RnVuY3Rpb24sIENhc2VGb2xkaW5nSGFzaD4gSW5wdXRUeXBlRmFjdG9y
eU1hcDsKKwogc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlRmFjdG9yeU1hcD4gY3JlYXRlSW5w
dXRUeXBlRmFjdG9yeU1hcCgpCiB7CiAgICAgT3duUHRyPElucHV0VHlwZUZhY3RvcnlNYXA+IG1h
cCA9IGFkb3B0UHRyKG5ldyBJbnB1dFR5cGVGYWN0b3J5TWFwKTsKQEAgLTk5LDcgKzEwMiw3IEBA
IHN0YXRpYyBQYXNzT3duUHRyPElucHV0VHlwZUZhY3RvcnlNYXA+IGMKICAgICByZXR1cm4gbWFw
LnJlbGVhc2UoKTsKIH0KIAotUGFzc093blB0cjxJbnB1dFR5cGU+IElucHV0VHlwZTo6Y3JlYXRl
KEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZU5hbWUp
CitQYXNzT3duUHRyPElucHV0VHlwZT4gSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVu
dCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiB0eXBlTmFtZSkKIHsKICAgICBzdGF0aWMgY29uc3Qg
SW5wdXRUeXBlRmFjdG9yeU1hcCogZmFjdG9yeU1hcCA9IGNyZWF0ZUlucHV0VHlwZUZhY3RvcnlN
YXAoKS5sZWFrUHRyKCk7CiAgICAgUGFzc093blB0cjxJbnB1dFR5cGU+ICgqZmFjdG9yeSkoSFRN
TElucHV0RWxlbWVudCopID0gdHlwZU5hbWUuaXNFbXB0eSgpID8gMCA6IGZhY3RvcnlNYXAtPmdl
dCh0eXBlTmFtZSk7CkBAIC0yNzcsNyArMjgwLDcgQEAgYm9vbCBJbnB1dFR5cGU6OnBhcnNlZFN0
ZXBWYWx1ZVNob3VsZEJlSQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJbnB1dFR5cGU6
OnNjYWxlZFN0ZXBWYWxldVNob3VsZEJlSW50ZWdlcigpIGNvbnN0Citib29sIElucHV0VHlwZTo6
c2NhbGVkU3RlcFZhbHVlU2hvdWxkQmVJbnRlZ2VyKCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFs
c2U7CiB9CkBAIC0zNzYsNiArMzc5LDIzOSBAQCB2b2lkIElucHV0VHlwZTo6ZGlzcGF0Y2hTaW11
bGF0ZWRDbGlja0lmCiAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CiAKK2Jvb2wg
SW5wdXRUeXBlOjpjYW5TZXRTdHJpbmdWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgSW5wdXRUeXBlOjppc0tleWJvYXJkRm9jdXNhYmxlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OnNob3VsZFVzZUlucHV0TWV0aG9k
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5wdXRUeXBlOjpoYW5k
bGVCbHVyRXZlbnQoKQoreworfQorCit2b2lkIElucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKGJv
b2wpCit7CisgICAgZWxlbWVudCgpLT5mb2N1cyhmYWxzZSk7Cit9CisKK3ZvaWQgSW5wdXRUeXBl
OjphdHRhY2goKQoreworfQorCit2b2lkIElucHV0VHlwZTo6YWx0QXR0cmlidXRlQ2hhbmdlZCgp
Cit7Cit9CisKK3ZvaWQgSW5wdXRUeXBlOjpzcmNBdHRyaWJ1dGVDaGFuZ2VkKCkKK3sKK30KKwor
dm9pZCBJbnB1dFR5cGU6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKK3sKK30KKworYm9v
bCBJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RBbGlnbkF0dHJpYnV0ZSgpCit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIElucHV0VHlwZTo6Y2FuQ2hhbmdlRnJvbUFub3RoZXJUeXBlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJbnB1dFR5cGU6Om1pbk9yTWF4
QXR0cmlidXRlQ2hhbmdlZCgpCit7Cit9CisKK2Jvb2wgSW5wdXRUeXBlOjpjYW5CZVN1Y2Nlc3Nm
dWxTdWJtaXRCdXR0b24oKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5
cGU6OnJlbmRlcmVySXNOZWVkZWQoKQoreworICAgIHJldHVybiB0cnVlOworfQorCitGaWxlTGlz
dCogSW5wdXRUeXBlOjpmaWxlcygpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSW5wdXRU
eXBlOjpnZXRUeXBlU3BlY2lmaWNWYWx1ZShTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsK
K30KKworU3RyaW5nIElucHV0VHlwZTo6ZmFsbGJhY2tWYWx1ZSgpCit7CisgICAgcmV0dXJuIFN0
cmluZygpOworfQorCitTdHJpbmcgSW5wdXRUeXBlOjpkZWZhdWx0VmFsdWUoKQoreworICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KKworYm9vbCBJbnB1dFR5cGU6OmNhblNldFN1Z2dlc3RlZFZhbHVl
KCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5wdXRUeXBlOjpzaG91bGRTZW5k
Q2hhbmdlRXZlbnRBZnRlckNoZWNrZWRDaGFuZ2VkKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBJbnB1dFR5cGU6OnN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCkKK3sK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OmNhblNldFZhbHVlKGNvbnN0
IFN0cmluZyYpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NPd25QdHI8Q2xpY2tIYW5k
bGluZ1N0YXRlPiBJbnB1dFR5cGU6OndpbGxEaXNwYXRjaENsaWNrKCkKK3sKKyAgICByZXR1cm4g
UGFzc093blB0cjxDbGlja0hhbmRsaW5nU3RhdGU+KCk7Cit9CisKK3ZvaWQgSW5wdXRUeXBlOjpk
aWREaXNwYXRjaENsaWNrKEV2ZW50KiwgY29uc3QgQ2xpY2tIYW5kbGluZ1N0YXRlJikKK3sKK30K
KworYm9vbCBJbnB1dFR5cGU6OmlzQWNjZXB0YWJsZVZhbHVlKGNvbnN0IFN0cmluZyYpCit7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK1N0cmluZyBJbnB1dFR5cGU6OnNhbml0aXplVmFsdWUoY29u
c3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKQoreworICAgIHJldHVybiBwcm9wb3NlZFZhbHVlOwor
fQorCitib29sIElucHV0VHlwZTo6aGFzVW5hY2NlcHRhYmxlVmFsdWUoKQoreworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBJbnB1dFR5cGU6OnNldEZpbGVMaXN0KGNvbnN0IFZlY3RvcjxT
dHJpbmc+JikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBJbnB1dFR5
cGU6OnNob3VsZFJlc2V0T25Eb2N1bWVudEFjdGl2YXRpb24oKQoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRlKCkKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5wdXRUeXBlOjpzaG91bGRSZXNwZWN0U3Bl
ZWNoQXR0cmlidXRlKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5wdXRUeXBl
Ojppc1RleHRCdXR0b24oKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJ
bnB1dFR5cGU6OmlzUmFkaW9CdXR0b24oKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBJbnB1dFR5cGU6OmlzU2VhcmNoRmllbGQoKSBjb25zdAoreworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OmlzSGlkZGVuVHlwZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIElucHV0VHlwZTo6aXNQYXNzd29yZEZpZWxkKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5wdXRUeXBlOjppc0NoZWNrYm94
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5wdXRUeXBlOjppc0Vt
YWlsRmllbGQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5
cGU6OmlzRmlsZVVwbG9hZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IElucHV0VHlwZTo6aXNJbWFnZUJ1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIElucHV0VHlwZTo6aXNOdW1iZXJGaWVsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIElucHV0VHlwZTo6aXNTdWJtaXRCdXR0b24oKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OmlzVGVsZXBob25lRmllbGQo
KSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5cGU6OmlzVVJM
RmllbGQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnB1dFR5cGU6
OmlzRW51bWVyYXRhYmxlKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnB1dFR5
cGU6OmlzQ2hlY2thYmxlKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5wdXRU
eXBlOjpoYXNTcGluQnV0dG9uKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5w
dXRUeXBlOjpzaG91bGRSZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRyaWJ1dGVzKCkKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKIG5hbWVzcGFjZSBJbnB1dFR5cGVOYW1lcyB7CiAKIC8vIFRoZSB0
eXBlIG5hbWVzIG11c3QgYmUgbG93ZXJjYXNlZCBiZWNhdXNlIHRoZXkgd2lsbCBiZSB0aGUgcmV0
dXJuIHZhbHVlcyBvZgpAQCAtNTI1LDYgKzc2MSw2IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgd2Vl
aygpCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmU6OklucHVU
eXBlTmFtZXMKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmU6OklucHV0VHlwZU5hbWVzCiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODcxKQorKysgV2Vi
Q29yZS9odG1sL0lucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMxLDE1ICszMiwxNyBAQAogI2lm
bmRlZiBJbnB1dFR5cGVfaAogI2RlZmluZSBJbnB1dFR5cGVfaAogCi0jaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dDsKIGNsYXNzIERhdGVDb21wb25lbnRzOwogY2xhc3MgRXZlbnQ7CitjbGFzcyBGaWxlTGlzdDsK
IGNsYXNzIEZvcm1EYXRhTGlzdDsKIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKIGNsYXNzIEhUTUxJ
bnB1dEVsZW1lbnQ7CkBAIC01MCwyMSArNTMsNTMgQEAgY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xh
c3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBXaGVlbEV2ZW50OwogCit0eXBlZGVmIGludCBFeGNlcHRp
b25Db2RlOworCitzdHJ1Y3QgQ2xpY2tIYW5kbGluZ1N0YXRlIHsKKyAgICBib29sIGNoZWNrZWQ7
CisgICAgYm9vbCBpbmRldGVybWluYXRlOworICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBj
aGVja2VkUmFkaW9CdXR0b247CisKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRAorfTsKKwog
Ly8gQW4gSW5wdXRUeXBlIG9iamVjdCByZXByZXNlbnRzIHRoZSB0eXBlLXNwZWNpZmljIHBhcnQg
b2YgYW4gSFRNTElucHV0RWxlbWVudC4KIC8vIERvIG5vdCBleHBvc2UgaW5zdGFuY2VzIG9mIElu
cHV0VHlwZSBhbmQgY2xhc3NlcyBkZXJpdmVkIGZyb20gaXQgdG8gY2xhc3NlcwogLy8gb3RoZXIg
dGhhbiBIVE1MSW5wdXRFbGVtZW50LgogY2xhc3MgSW5wdXRUeXBlIDogcHVibGljIE5vbmNvcHlh
YmxlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNyZWF0ZShI
VE1MSW5wdXRFbGVtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgc3RhdGljIFBhc3NP
d25QdHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElucHV0RWxlbWVudCosIGNvbnN0IFN0cmluZyYp
OwogICAgIHN0YXRpYyBQYXNzT3duUHRyPElucHV0VHlwZT4gY3JlYXRlVGV4dChIVE1MSW5wdXRF
bGVtZW50Kik7CiAgICAgdmlydHVhbCB+SW5wdXRUeXBlKCk7CiAKKyAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBjYW5DaGFuZ2VGcm9tQW5vdGhlclR5cGUoKSBjb25zdDsKKwogICAgIC8vIFR5cGUgcXVl
cnkgZnVuY3Rpb25zCiAKKyAgICAvLyBBbnkgdGltZSB3ZSBhcmUgdXNpbmcgb25lIG9mIHRoZXNl
IGZ1bmN0aW9ucyBpdCdzIGJlc3QgdG8gcmVmYWN0b3IKKyAgICAvLyB0byBhZGQgYSB2aXJ0dWFs
IGZ1bmN0aW9uIHRvIGFsbG93IHRoZSBpbnB1dCB0eXBlIG9iamVjdCB0byBkbyB0aGUKKyAgICAv
LyB3b3JrIGluc3RlYWQsIG9yIGF0IGxlYXN0IG1ha2UgYSBxdWVyeSBmdW5jdGlvbiB0aGF0IGFz
a3MgYSBoaWdoZXIKKyAgICAvLyBsZXZlbCBxdWVzdGlvbi4gVGhlc2UgZnVuY3Rpb25zIG1ha2Ug
dGhlIEhUTUxJbnB1dEVsZW1lbnQgY2xhc3MKKyAgICAvLyBpbmZsZXhpYmxlIGJlY2F1c2UgaXQn
cyBoYXJkZXIgdG8gYWRkIG5ldyBpbnB1dCB0eXBlcyBpZiB0aGVyZSBpcworICAgIC8vIHNjYXR0
ZXJlZCBjb2RlIHdpdGggc3BlY2lhbCBjYXNlcyBmb3IgdmFyaW91cyB0eXBlcy4KKworICAgIHZp
cnR1YWwgYm9vbCBpc0NoZWNrYm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzRW1haWxG
aWVsZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGVVcGxvYWQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNIaWRkZW5UeXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlz
SW1hZ2VCdXR0b24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNOdW1iZXJGaWVsZCgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1Bhc3N3b3JkRmllbGQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNSYWRpb0J1dHRvbigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1Jhbmdl
Q29udHJvbCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1NlYXJjaEZpZWxkKCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGlzU3VibWl0QnV0dG9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGlzVGVsZXBob25lRmllbGQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0QnV0
dG9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzVGV4dEZpZWxkKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIGlzVGV4dFR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNSYW5n
ZUNvbnRyb2woKSBjb25zdDsKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNv
bnRyb2xUeXBlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1VSTEZpZWxkKCkgY29u
c3Q7CiAKICAgICAvLyBGb3JtIHZhbHVlIGZ1bmN0aW9ucwogCkBAIC03NSw2ICsxMTAsOSBAQCBw
dWJsaWM6CiAKICAgICAvLyBET00gcHJvcGVydHkgZnVuY3Rpb25zCiAKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0VHlwZVNwZWNpZmljVmFsdWUoU3RyaW5nJik7IC8vIENoZWNrZWQgZmlyc3QsIGJlZm9y
ZSBpbnRlcm5hbCBzdG9yYWdlIG9yIHRoZSB2YWx1ZSBhdHRyaWJ1dGUuCisgICAgdmlydHVhbCBT
dHJpbmcgZmFsbGJhY2tWYWx1ZSgpOyAvLyBDaGVja2VkIGxhc3QsIGlmIGJvdGggaW50ZXJuYWwg
c3RvcmFnZSBhbmQgdmFsdWUgYXR0cmlidXRlIGFyZSBtaXNzaW5nLgorICAgIHZpcnR1YWwgU3Ry
aW5nIGRlZmF1bHRWYWx1ZSgpOyAvLyBDaGVja2VkIGFmdGVyIGV2ZW4gZmFsbGJhY2tWYWx1ZSwg
b25seSB3aGVuIHRoZSB2YWx1ZVdpdGhEZWZhdWx0IGZ1bmN0aW9uIGlzIGNhbGxlZC4KICAgICB2
aXJ0dWFsIGRvdWJsZSB2YWx1ZUFzRGF0ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRW
YWx1ZUFzRGF0ZShkb3VibGUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICB2aXJ0dWFsIGRv
dWJsZSB2YWx1ZUFzTnVtYmVyKCkgY29uc3Q7CkBAIC05NywyMCArMTM1LDI2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGRvdWJsZSBkZWZhdWx0VmFsdWVGb3JTdGVwVXAoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGRvdWJsZSBtaW5pbXVtKCkgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgbWF4aW11
bSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzdGVwTWlzbWF0Y2goY29uc3QgU3RyaW5nJiwg
ZG91YmxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc3RlcE1pc21hdGNoKGNvbnN0IFN0cmlu
ZyYsIGRvdWJsZSBzdGVwKSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBzdGVwQmFzZSgpIGNv
bnN0OwogICAgIHZpcnR1YWwgZG91YmxlIHN0ZXBCYXNlV2l0aERlY2ltYWxQbGFjZXModW5zaWdu
ZWQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBkZWZhdWx0U3RlcCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgZG91YmxlIHN0ZXBTY2FsZUZhY3RvcigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBwYXJzZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgc2NhbGVkU3RlcFZhbGV1U2hvdWxkQmVJbnRlZ2VyKCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIHNjYWxlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcigpIGNvbnN0OwogICAgIHZpcnR1YWwg
ZG91YmxlIGFjY2VwdGFibGVFcnJvcihkb3VibGUpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5n
IHR5cGVNaXNtYXRjaFRleHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZU1pc3Np
bmdUZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGNhblNldFN0cmluZ1ZhbHVlKCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGlzQWNjZXB0YWJsZVZhbHVlKGNvbnN0IFN0cmluZyYpOwor
ICAgIHZpcnR1YWwgU3RyaW5nIHNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5nJik7CisgICAgdmly
dHVhbCBib29sIGhhc1VuYWNjZXB0YWJsZVZhbHVlKCk7CiAKICAgICAvLyBFdmVudCBoYW5kbGVy
cwogCiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUNsaWNrRXZlbnQoTW91c2VFdmVudCopOworICAg
IHZpcnR1YWwgUGFzc093blB0cjxDbGlja0hhbmRsaW5nU3RhdGU+IHdpbGxEaXNwYXRjaENsaWNr
KCk7CisgICAgdmlydHVhbCB2b2lkIGRpZERpc3BhdGNoQ2xpY2soRXZlbnQqLCBjb25zdCBDbGlj
a0hhbmRsaW5nU3RhdGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRE9NQWN0aXZhdGVFdmVu
dChFdmVudCopOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRF
dmVudCopOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlwcmVzc0V2ZW50KEtleWJvYXJkRXZl
bnQqKTsKQEAgLTEyMSwyNSArMTY1LDUzIEBAIHB1YmxpYzoKICAgICAvLyBIZWxwZXJzIGZvciBl
dmVudCBoYW5kbGVycy4KICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3VibWl0SW1wbGljaXRseShF
dmVudCopOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm1Gb3JT
dWJtaXNzaW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQmx1ckV2ZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGFj
Y2Vzc0tleUFjdGlvbihib29sIHNlbmRUb0FueUVsZW1lbnQpOworICAgIHZpcnR1YWwgYm9vbCBj
YW5CZVN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKTsKIAogICAgIC8vIE1pc2NlbGxhbmVvdXMgZnVu
Y3Rpb25zCiAKKyAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZCgpOwogICAgIHZpcnR1
YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxl
KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOworICAgIHZpcnR1YWwgdm9pZCBt
aW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWx0QXR0cmlidXRl
Q2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCBzcmNBdHRyaWJ1dGVDaGFuZ2VkKCk7CisgICAg
dmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CisgICAgdmlydHVhbCBi
b29sIHNob3VsZFJlc3BlY3RBbGlnbkF0dHJpYnV0ZSgpOworICAgIHZpcnR1YWwgRmlsZUxpc3Qq
IGZpbGVzKCk7CisgICAgdmlydHVhbCBib29sIGNhblNldFN1Z2dlc3RlZFZhbHVlKCk7CisgICAg
dmlydHVhbCBib29sIHNob3VsZFNlbmRDaGFuZ2VFdmVudEFmdGVyQ2hlY2tlZENoYW5nZWQoKTsK
KyAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0VmFsdWUoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVh
bCBib29sIHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCk7CisgICAgdmlydHVhbCB2
b2lkIHNldEZpbGVMaXN0KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocyk7CisgICAgdmlydHVh
bCBib29sIHNob3VsZFJlc2V0T25Eb2N1bWVudEFjdGl2YXRpb24oKTsKKyAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkUmVzcGVjdExpc3RBdHRyaWJ1dGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
UmVzcGVjdFNwZWVjaEF0dHJpYnV0ZSgpOworICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0YWJs
ZSgpOworICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrYWJsZSgpOworICAgIHZpcnR1YWwgYm9vbCBo
YXNTcGluQnV0dG9uKCk7CisgICAgdmlydHVhbCBib29sIHNob3VsZFJlc3BlY3RIZWlnaHRBbmRX
aWR0aEF0dHJpYnV0ZXMoKTsKIAogICAgIC8vIFBhcnNlcyB0aGUgc3BlY2lmaWVkIHN0cmluZyBm
b3IgdGhlIHR5cGUsIGFuZCByZXR1cm4KICAgICAvLyB0aGUgZG91YmxlIHZhbHVlIGZvciB0aGUg
cGFyc2luZyByZXN1bHQgaWYgdGhlIHBhcnNpbmcKICAgICAvLyBzdWNjZWVkczsgUmV0dXJucyBk
ZWZhdWx0VmFsdWUgb3RoZXJ3aXNlLiBUaGlzIGZ1bmN0aW9uIGNhbgogICAgIC8vIHJldHVybiBO
YU4gb3IgSW5maW5pdHkgb25seSBpZiBkZWZhdWx0VmFsdWUgaXMgTmFOIG9yIEluZmluaXR5Lgog
ICAgIHZpcnR1YWwgZG91YmxlIHBhcnNlVG9Eb3VibGUoY29uc3QgU3RyaW5nJiwgZG91YmxlIGRl
ZmF1bHRWYWx1ZSkgY29uc3Q7CisKICAgICAvLyBQYXJzZXMgdGhlIHNwZWNpZmllZCBzdHJpbmcg
Zm9yIHRoZSB0eXBlIGFzIHBhcnNlVG9Eb3VibGUoKSBkb2VzLgogICAgIC8vIEluIGFkZGl0aW9u
LCBpdCBzdG9yZXMgdGhlIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQK
ICAgICAvLyBpbnRvICpkZWNpbWFsUGxhY2VzLgotICAgIHZpcnR1YWwgZG91YmxlIHBhcnNlVG9E
b3VibGVXaXRoRGVjaW1hbFBsYWNlcyhjb25zdCBTdHJpbmcmIHNyYywgZG91YmxlIGRlZmF1bHRW
YWx1ZSwgdW5zaWduZWQgKmRlY2ltYWxQbGFjZXMpIGNvbnN0OworICAgIHZpcnR1YWwgZG91Ymxl
IHBhcnNlVG9Eb3VibGVXaXRoRGVjaW1hbFBsYWNlcyhjb25zdCBTdHJpbmcmLCBkb3VibGUgZGVm
YXVsdFZhbHVlLCB1bnNpZ25lZCogZGVjaW1hbFBsYWNlcykgY29uc3Q7CisKICAgICAvLyBQYXJz
ZXMgdGhlIHNwZWNpZmllZCBzdHJpbmcgZm9yIHRoaXMgSW5wdXRUeXBlLCBhbmQgcmV0dXJucyB0
cnVlIGlmIGl0CiAgICAgLy8gaXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4gQW4gaW5zdGFuY2UgcG9p
bnRlZCBieSB0aGUgRGF0ZUNvbXBvbmVudHMqCiAgICAgLy8gcGFyYW1ldGVyIHdpbGwgaGF2ZSBw
YXJzZWQgdmFsdWVzIGFuZCBiZSBtb2RpZmllZCBldmVuIGlmIHRoZSBwYXJzaW5nCiAgICAgLy8g
ZmFpbHMuIFRoZSBEYXRlQ29tcG9uZW50cyogcGFyYW1ldGVyIG1heSBiZSAwLgogICAgIHZpcnR1
YWwgYm9vbCBwYXJzZVRvRGF0ZUNvbXBvbmVudHMoY29uc3QgU3RyaW5nJiwgRGF0ZUNvbXBvbmVu
dHMqKSBjb25zdDsKKwogICAgIC8vIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0
aGUgc3BlY2lmaWVkIGRvdWJsZSB2YWx1ZSBmb3IgdGhlCiAgICAgLy8gaW5wdXQgdHlwZS4gSWYg
TmFOIG9yIEluZmluaXR5IGlzIHNwZWNpZmllZCwgdGhpcyByZXR1cm5zIGFuIGVtcHR5CiAgICAg
Ly8gc3RyaW5nLiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIGZvciB0eXBlcyB3aXRob3V0IHZh
bHVlQXNOdW1iZXIuCkluZGV4OiBXZWJDb3JlL2h0bWwvSXNJbmRleElucHV0VHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0lzSW5kZXhJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3
NDg3MSkKKysrIFdlYkNvcmUvaHRtbC9Jc0luZGV4SW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIklzSW5kZXhJbnB1dFR5cGUuaCIKIAogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKQEAg
LTcwLDQgKzcxLDkgQEAgUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IElzSW5kZXhJbnB1dAog
ICAgIHJldHVybiBmb3JtLnJlbGVhc2UoKTsKIH0KIAorYm9vbCBJc0luZGV4SW5wdXRUeXBlOjpz
aG91bGRSZXNwZWN0TGlzdEF0dHJpYnV0ZSgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSXNJbmRleElucHV0VHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9Jc0luZGV4SW5wdXRUeXBlLmgJKHJldmlz
aW9uIDc0ODcxKQorKysgV2ViQ29yZS9odG1sL0lzSW5kZXhJbnB1dFR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNiArNDUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNSZXF1aXJlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1l
bnQ+IGZvcm1Gb3JTdWJtaXNzaW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3VsZFJl
c3BlY3RMaXN0QXR0cmlidXRlKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL2h0bWwvTnVtYmVySW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvTnVtYmVySW5wdXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4NzEpCisrKyBXZWJDb3JlL2h0
bWwvTnVtYmVySW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zNiw2ICszNyw3IEBACiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1
ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2lu
Y2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CkBAIC0yMzQsNCArMjM2LDQ1IEBAIGRvdWJsZSBOdW1iZXJJbnB1dFR5
cGU6OmFjY2VwdGFibGVFcnJvcigKICAgICByZXR1cm4gc3RlcCAvIHBvdygyLjAsIEZMVF9NQU5U
X0RJRyk7CiB9CiAKK3ZvaWQgTnVtYmVySW5wdXRUeXBlOjpoYW5kbGVCbHVyRXZlbnQoKQorewor
ICAgIC8vIFJlc2V0IHRoZSByZW5kZXJlciB2YWx1ZSwgd2hpY2ggbWlnaHQgYmUgdW5tYXRjaGVk
IHdpdGggdGhlIGVsZW1lbnQgdmFsdWUuCisgICAgZWxlbWVudCgpLT5zZXRGb3JtQ29udHJvbFZh
bHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKKworICAgIC8vIFdlIG5lZWQgdG8gcmVzZXQgdGhl
IHJlbmRlcmVyIHZhbHVlIGV4cGxpY2l0bHkgYmVjYXVzZSBhbiB1bmFjY2VwdGFibGUKKyAgICAv
LyByZW5kZXJlciB2YWx1ZSBzaG91bGQgYmUgcHVyZ2VkIGJlZm9yZSBzdHlsZSBjYWxjdWxhdGlv
bi4KKyAgICBpZiAoZWxlbWVudCgpLT5yZW5kZXJlcigpKQorICAgICAgICBlbGVtZW50KCktPnJl
bmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7Cit9CisKK2Jvb2wgTnVtYmVySW5wdXRUeXBl
Ojppc0FjY2VwdGFibGVWYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUpCit7CisgICAg
cmV0dXJuIHByb3Bvc2VkVmFsdWUuaXNFbXB0eSgpIHx8IHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJU
eXBlKHByb3Bvc2VkVmFsdWUsIDApOworfQorCitTdHJpbmcgTnVtYmVySW5wdXRUeXBlOjpzYW5p
dGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gcGFy
c2VUb0RvdWJsZUZvck51bWJlclR5cGUocHJvcG9zZWRWYWx1ZSwgMCkgPyBwcm9wb3NlZFZhbHVl
IDogU3RyaW5nKCk7Cit9CisKK2Jvb2wgTnVtYmVySW5wdXRUeXBlOjpoYXNVbmFjY2VwdGFibGVW
YWx1ZSgpCit7CisgICAgcmV0dXJuIGVsZW1lbnQoKS0+cmVuZGVyZXIoKSAmJiAhaXNBY2NlcHRh
YmxlVmFsdWUodG9SZW5kZXJUZXh0Q29udHJvbChlbGVtZW50KCktPnJlbmRlcmVyKCkpLT50ZXh0
KCkpOworfQorCitib29sIE51bWJlcklucHV0VHlwZTo6c2hvdWxkUmVzcGVjdFNwZWVjaEF0dHJp
YnV0ZSgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTnVtYmVySW5wdXRUeXBlOjpp
c051bWJlckZpZWxkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOdW1i
ZXJJbnB1dFR5cGU6Omhhc1NwaW5CdXR0b24oKQoreworICAgIHJldHVybiB0cnVlOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvTnVtYmVySW5wdXRUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL051bWJlcklucHV0VHlwZS5oCShyZXZpc2lv
biA3NDg3MSkKKysrIFdlYkNvcmUvaHRtbC9OdW1iZXJJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNjMsNiArNjMsMTMgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGRvdWJsZSBwYXJzZVRv
RG91YmxlV2l0aERlY2ltYWxQbGFjZXMoY29uc3QgU3RyaW5nJiwgZG91YmxlLCB1bnNpZ25lZCop
IGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHNlcmlhbGl6ZShkb3VibGUpIGNvbnN0OwogICAg
IHZpcnR1YWwgZG91YmxlIGFjY2VwdGFibGVFcnJvcihkb3VibGUpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVCbHVyRXZlbnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlcHRhYmxl
VmFsdWUoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBTdHJpbmcgc2FuaXRpemVWYWx1ZShj
b25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVW5hY2NlcHRhYmxlVmFsdWUoKTsK
KyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVjdFNwZWVjaEF0dHJpYnV0ZSgpOworICAgIHZp
cnR1YWwgYm9vbCBpc051bWJlckZpZWxkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGhhc1Nw
aW5CdXR0b24oKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
aHRtbC9QYXNzd29yZElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1Bh
c3N3b3JkSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4NzEpCisrKyBXZWJDb3JlL2h0bWwvUGFz
c3dvcmRJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTU4LDQgKzU5LDMxIEBAIHZvaWQgUGFz
c3dvcmRJbnB1dFR5cGU6OnJlc3RvcmVGb3JtQ29udHIKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAorYm9vbCBQYXNzd29yZElucHV0VHlwZTo6c2hvdWxkVXNlSW5wdXRNZXRob2QoKSBj
b25zdAoreworICAgIC8vIElucHV0IG1ldGhvZHMgYXJlIGRpc2FibGVkIGZvciB0aGUgcGFzc3dv
cmQgZmllbGQgYmVjYXVzZSBvdGhlcndpc2UKKyAgICAvLyBhbnlvbmUgY2FuIGFjY2VzcyB0aGUg
dW5kZXJseWluZyBwYXNzd29yZCBhbmQgZGlzcGxheSBpdCBpbiBjbGVhciB0ZXh0LgorICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBQYXNzd29yZElucHV0VHlwZTo6c2hvdWxkUmVzZXRPbkRv
Y3VtZW50QWN0aXZhdGlvbigpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUGFzc3dv
cmRJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRlKCkKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgUGFzc3dvcmRJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RTcGVlY2hB
dHRyaWJ1dGUoKQoreworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBhc3N3b3JkSW5wdXRU
eXBlOjppc1Bhc3N3b3JkRmllbGQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvUGFzc3dvcmRJbnB1dFR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvUGFzc3dvcmRJbnB1dFR5cGUuaAkocmV2
aXNpb24gNzQ4NzEpCisrKyBXZWJDb3JlL2h0bWwvUGFzc3dvcmRJbnB1dFR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNiArNDQsMTEgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNh
dmVGb3JtQ29udHJvbFN0YXRlKFN0cmluZyYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCByZXN0
b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
UmVzZXRPbkRvY3VtZW50QWN0aXZhdGlvbigpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXNw
ZWN0TGlzdEF0dHJpYnV0ZSgpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXNwZWN0U3BlZWNo
QXR0cmlidXRlKCk7CisgICAgdmlydHVhbCBib29sIGlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0Owog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL1JhZGlvSW5w
dXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3Bw
CShyZXZpc2lvbiA3NDg3MSkKKysrIFdlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xMTUsNCAr
MTE1LDgyIEBAIHZvaWQgUmFkaW9JbnB1dFR5cGU6OmhhbmRsZUtleXVwRXZlbnQoS2UKICAgICBk
aXNwYXRjaFNpbXVsYXRlZENsaWNrSWZBY3RpdmUoZXZlbnQpOwogfQogCitib29sIFJhZGlvSW5w
dXRUeXBlOjppc0tleWJvYXJkRm9jdXNhYmxlKCkgY29uc3QKK3sKKyAgICAvLyBXaGVuIHVzaW5n
IFNwYXRpYWwgTmF2aWdhdGlvbiwgZXZlcnkgcmFkaW8gYnV0dG9uIHNob3VsZCBiZSBmb2N1c2Fi
bGUuCisgICAgaWYgKGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGVsZW1lbnQoKS0+ZG9jdW1l
bnQoKS0+ZnJhbWUoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gTmV2ZXIgYWxs
b3cga2V5Ym9hcmQgdGFiYmluZyB0byBsZWF2ZSB5b3UgaW4gdGhlIHNhbWUgcmFkaW8gZ3JvdXAu
ICBBbHdheXMKKyAgICAvLyBza2lwIGFueSBvdGhlciBlbGVtZW50cyBpbiB0aGUgZ3JvdXAuCisg
ICAgTm9kZSogY3VycmVudEZvY3VzZWROb2RlID0gZWxlbWVudCgpLT5kb2N1bWVudCgpLT5mb2N1
c2VkTm9kZSgpOworICAgIGlmIChjdXJyZW50Rm9jdXNlZE5vZGUgJiYgY3VycmVudEZvY3VzZWRO
b2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBm
b2N1c2VkSW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oY3VycmVudEZvY3Vz
ZWROb2RlKTsKKyAgICAgICAgaWYgKGZvY3VzZWRJbnB1dC0+aXNSYWRpb0J1dHRvbigpICYmIGZv
Y3VzZWRJbnB1dC0+Zm9ybSgpID09IGVsZW1lbnQoKS0+Zm9ybSgpICYmIGZvY3VzZWRJbnB1dC0+
bmFtZSgpID09IGVsZW1lbnQoKS0+bmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIC8vIEFsbG93IGtleWJvYXJkIGZvY3VzIGlmIHdlJ3JlIGNoZWNrZWQgb3Ig
aWYgbm90aGluZyBpbiB0aGUgZ3JvdXAgaXMgY2hlY2tlZC4KKyAgICByZXR1cm4gZWxlbWVudCgp
LT5jaGVja2VkKCkgfHwgIWVsZW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmNoZWNrZWRC
dXR0b25Gb3JHcm91cChlbGVtZW50KCktPm5hbWUoKSk7Cit9CisKK3ZvaWQgUmFkaW9JbnB1dFR5
cGU6OmF0dGFjaCgpCit7CisgICAgSW5wdXRUeXBlOjphdHRhY2goKTsKKyAgICBlbGVtZW50KCkt
PnVwZGF0ZUNoZWNrZWRSYWRpb0J1dHRvbnMoKTsKK30KKworYm9vbCBSYWRpb0lucHV0VHlwZTo6
c2hvdWxkU2VuZENoYW5nZUV2ZW50QWZ0ZXJDaGVja2VkQ2hhbmdlZCgpCit7CisgICAgLy8gRG9u
J3Qgc2VuZCBhIGNoYW5nZSBldmVudCBmb3IgYSByYWRpbyBidXR0b24gdGhhdCdzIGdldHRpbmcg
dW5jaGVja2VkLgorICAgIC8vIFRoaXMgd2FzIGRvbmUgdG8gbWF0Y2ggdGhlIGJlaGF2aW9yIG9m
IG90aGVyIGJyb3dzZXJzLgorICAgIHJldHVybiBlbGVtZW50KCktPmNoZWNrZWQoKTsKK30KKwor
UGFzc093blB0cjxDbGlja0hhbmRsaW5nU3RhdGU+IFJhZGlvSW5wdXRUeXBlOjp3aWxsRGlzcGF0
Y2hDbGljaygpCit7CisgICAgLy8gQW4gZXZlbnQgaGFuZGxlciBjYW4gdXNlIHByZXZlbnREZWZh
dWx0IG9yICJyZXR1cm4gZmFsc2UiIHRvIHJldmVyc2UgdGhlIHNlbGVjdGlvbiB3ZSBkbyBoZXJl
LgorICAgIC8vIFRoZSBDbGlja0hhbmRsaW5nU3RhdGUgb2JqZWN0IGNvbnRhaW5zIHdoYXQgd2Ug
bmVlZCB0byB1bmRvIHdoYXQgd2UgZGlkIGhlcmUgaW4gZGlkRGlzcGF0Y2hDbGljay4KKworICAg
IC8vIFdlIHdhbnQgcmFkaW8gZ3JvdXBzIHRvIGVuZCB1cCBpbiBzYW5lIHN0YXRlcywgaS5lLiwg
dG8gaGF2ZSBzb21ldGhpbmcgY2hlY2tlZC4KKyAgICAvLyBUaGVyZWZvcmUgaWYgbm90aGluZyBp
cyBjdXJyZW50bHkgc2VsZWN0ZWQsIHdlIHdvbid0IGFsbG93IHRoZSB1cGNvbWluZyBhY3Rpb24g
dG8gYmUgInVuZG9uZSIsIHNpbmNlCisgICAgLy8gd2Ugd2FudCBzb21lIG9iamVjdCBpbiB0aGUg
cmFkaW8gZ3JvdXAgdG8gYWN0dWFsbHkgZ2V0IHNlbGVjdGVkLgorCisgICAgT3duUHRyPENsaWNr
SGFuZGxpbmdTdGF0ZT4gc3RhdGUgPSBhZG9wdFB0cihuZXcgQ2xpY2tIYW5kbGluZ1N0YXRlKTsK
KworICAgIHN0YXRlLT5jaGVja2VkID0gZWxlbWVudCgpLT5jaGVja2VkKCk7CisgICAgc3RhdGUt
PmluZGV0ZXJtaW5hdGUgPSBlbGVtZW50KCktPmluZGV0ZXJtaW5hdGUoKTsKKyAgICBzdGF0ZS0+
Y2hlY2tlZFJhZGlvQnV0dG9uID0gZWxlbWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuY2hl
Y2tlZEJ1dHRvbkZvckdyb3VwKGVsZW1lbnQoKS0+bmFtZSgpKTsKKworICAgIGlmIChlbGVtZW50
KCktPmluZGV0ZXJtaW5hdGUoKSkKKyAgICAgICAgZWxlbWVudCgpLT5zZXRJbmRldGVybWluYXRl
KGZhbHNlKTsKKyAgICBlbGVtZW50KCktPnNldENoZWNrZWQodHJ1ZSwgdHJ1ZSk7CisKKyAgICBy
ZXR1cm4gc3RhdGUucmVsZWFzZSgpOworfQorCit2b2lkIFJhZGlvSW5wdXRUeXBlOjpkaWREaXNw
YXRjaENsaWNrKEV2ZW50KiBldmVudCwgY29uc3QgQ2xpY2tIYW5kbGluZ1N0YXRlJiBzdGF0ZSkK
K3sKKyAgICBpZiAoZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCBldmVudC0+ZGVmYXVsdEhh
bmRsZWQoKSkgeworICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBzZWxlY3RlZCByYWRp
byBidXR0b24gaWYgcG9zc2libGUuCisgICAgICAgIC8vIE1ha2Ugc3VyZSBpdCBpcyBzdGlsbCBh
IHJhZGlvIGJ1dHRvbiBhbmQgb25seSBkbyB0aGUgcmVzdG9yYXRpb24gaWYgaXQgc3RpbGwgYmVs
b25ncyB0byBvdXIgZ3JvdXAuCisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGNoZWNrZWRSYWRp
b0J1dHRvbiA9IHN0YXRlLmNoZWNrZWRSYWRpb0J1dHRvbi5nZXQoKTsKKyAgICAgICAgaWYgKGNo
ZWNrZWRSYWRpb0J1dHRvbgorICAgICAgICAgICAgICAgICYmIGNoZWNrZWRSYWRpb0J1dHRvbi0+
aXNSYWRpb0J1dHRvbigpCisgICAgICAgICAgICAgICAgJiYgY2hlY2tlZFJhZGlvQnV0dG9uLT5m
b3JtKCkgPT0gZWxlbWVudCgpLT5mb3JtKCkKKyAgICAgICAgICAgICAgICAmJiBjaGVja2VkUmFk
aW9CdXR0b24tPm5hbWUoKSA9PSBlbGVtZW50KCktPm5hbWUoKSkgeworICAgICAgICAgICAgY2hl
Y2tlZFJhZGlvQnV0dG9uLT5zZXRDaGVja2VkKHRydWUpOworICAgICAgICB9CisgICAgICAgIGVs
ZW1lbnQoKS0+c2V0SW5kZXRlcm1pbmF0ZShzdGF0ZS5pbmRldGVybWluYXRlKTsKKyAgICB9CisK
KyAgICAvLyBUaGUgd29yayB3ZSBkaWQgaW4gd2lsbERpc3BhdGNoQ2xpY2sgd2FzIGRlZmF1bHQg
aGFuZGxpbmcuCisgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKK2Jvb2wgUmFk
aW9JbnB1dFR5cGU6OmlzUmFkaW9CdXR0b24oKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvUmFkaW9JbnB1
dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuaAkocmV2
aXNpb24gNzQ4NzEpCisrKyBXZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDcsNiArNDcsMTIgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
Q2xpY2tFdmVudChNb3VzZUV2ZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWRvd25F
dmVudChLZXlib2FyZEV2ZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleXVwRXZlbnQo
S2V5Ym9hcmRFdmVudCopOworICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOworICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRTZW5kQ2hhbmdlRXZlbnRBZnRlckNoZWNrZWRDaGFuZ2VkKCk7CisgICAgdmlydHVhbCBQYXNz
T3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gd2lsbERpc3BhdGNoQ2xpY2soKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkRGlzcGF0Y2hDbGljayhFdmVudCosIGNvbnN0IENsaWNrSGFuZGxpbmdTdGF0
ZSYpOworICAgIHZpcnR1YWwgYm9vbCBpc1JhZGlvQnV0dG9uKCkgY29uc3Q7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAJKHJldmlzaW9u
IDc0ODcxKQorKysgV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC0zNiw2ICszNyw3IEBACiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUg
IktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKKyNpbmNsdWRlICJT
dGVwUmFuZ2UuaCIKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtMjA1LDQgKzIwNyw0NCBAQCBTdHJp
bmcgUmFuZ2VJbnB1dFR5cGU6OnNlcmlhbGl6ZShkb3VibGUgCiAgICAgcmV0dXJuIHNlcmlhbGl6
ZUZvck51bWJlclR5cGUodmFsdWUpOwogfQogCisvLyBGSVhNRTogQ291bGQgc2hhcmUgdGhpcyB3
aXRoIEJhc2VCdXR0b25JbnB1dFR5cGUgYW5kIEJhc2VDaGVja2FibGVJbnB1dFR5cGUgaWYgd2Ug
aGFkIGEgY29tbW9uIGJhc2UgY2xhc3MuCit2b2lkIFJhbmdlSW5wdXRUeXBlOjphY2Nlc3NLZXlB
Y3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KQoreworICAgIElucHV0VHlwZTo6YWNjZXNzS2V5
QWN0aW9uKHNlbmRUb0FueUVsZW1lbnQpOworCisgICAgLy8gU2VuZCBtb3VzZSBidXR0b24gZXZl
bnRzIGlmIHRoZSBjYWxsZXIgc3BlY2lmaWVkIHNlbmRUb0FueUVsZW1lbnQuCisgICAgLy8gRklY
TUU6IFRoZSBjb21tZW50IGFib3ZlIGlzIG5vIGdvb2QuIEl0IHNheXMgd2hhdCB3ZSBkbywgYnV0
IG5vdCB3aHkuCisgICAgZWxlbWVudCgpLT5kaXNwYXRjaFNpbXVsYXRlZENsaWNrKDAsIHNlbmRU
b0FueUVsZW1lbnQpOworfQorCit2b2lkIFJhbmdlSW5wdXRUeXBlOjptaW5Pck1heEF0dHJpYnV0
ZUNoYW5nZWQoKQoreworICAgIElucHV0VHlwZTo6bWluT3JNYXhBdHRyaWJ1dGVDaGFuZ2VkKCk7
CisKKyAgICAvLyBTYW5pdGl6ZSB0aGUgdmFsdWUuCisgICAgZWxlbWVudCgpLT5zZXRWYWx1ZShl
bGVtZW50KCktPnZhbHVlKCkpOworICAgIGVsZW1lbnQoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygp
OworfQorCitTdHJpbmcgUmFuZ2VJbnB1dFR5cGU6OmZhbGxiYWNrVmFsdWUoKQoreworICAgIHJl
dHVybiBzZXJpYWxpemVGb3JOdW1iZXJUeXBlKFN0ZXBSYW5nZShlbGVtZW50KCkpLmRlZmF1bHRW
YWx1ZSgpKTsKK30KKworU3RyaW5nIFJhbmdlSW5wdXRUeXBlOjpzYW5pdGl6ZVZhbHVlKGNvbnN0
IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkKK3sKKyAgICAvLyBJZiB0aGUgcHJvcG9zZWRWYWx1ZSBp
cyBudWxsIHRoYW4gdGhpcyBpcyBhIHJlc2V0IHNjZW5hcmlvIGFuZCB3ZQorICAgIC8vIHdhbnQg
dGhlIHJhbmdlIGlucHV0J3MgdmFsdWUgYXR0cmlidXRlIHRvIHRha2UgcHJpb3JpdHkgb3ZlciB0
aGUKKyAgICAvLyBjYWxjdWxhdGVkIGRlZmF1bHQgKG1pZGRsZSkgdmFsdWUuCisgICAgaWYgKHBy
b3Bvc2VkVmFsdWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBwcm9wb3NlZFZhbHVlOworCisg
ICAgcmV0dXJuIHNlcmlhbGl6ZUZvck51bWJlclR5cGUoU3RlcFJhbmdlKGVsZW1lbnQoKSkuY2xh
bXBWYWx1ZShwcm9wb3NlZFZhbHVlKSk7Cit9CisKK2Jvb2wgUmFuZ2VJbnB1dFR5cGU6OnNob3Vs
ZFJlc3BlY3RMaXN0QXR0cmlidXRlKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODcx
KQorKysgV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDYgKzYwLDExIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKSBjb25zdDsKICAgICB2aXJ0dWFsIGRv
dWJsZSBwYXJzZVRvRG91YmxlKGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgY29uc3Q7CiAgICAgdmly
dHVhbCBTdHJpbmcgc2VyaWFsaXplKGRvdWJsZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFj
Y2Vzc0tleUFjdGlvbihib29sIHNlbmRUb0FueUVsZW1lbnQpOworICAgIHZpcnR1YWwgdm9pZCBt
aW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBmYWxsYmFja1Zh
bHVlKCk7CisgICAgdmlydHVhbCBTdHJpbmcgc2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcmIHBy
b3Bvc2VkVmFsdWUpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXNwZWN0TGlzdEF0dHJpYnV0
ZSgpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL1Jl
c2V0SW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvUmVzZXRJbnB1dFR5
cGUuY3BwCShyZXZpc2lvbiA3NDg3MSkKKysrIFdlYkNvcmUvaHRtbC9SZXNldElucHV0VHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQpAQCAtMzIsNyArMzMsOSBAQAogI2luY2x1ZGUgIlJlc2V0SW5wdXRUeXBl
LmgiCiAKICNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdz
LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNjAsNCArNjMsMTQgQEAgdm9pZCBSZXNldElucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVF
dgogICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCitTdHJpbmcgUmVzZXRJbnB1
dFR5cGU6OmRlZmF1bHRWYWx1ZSgpCit7CisgICAgcmV0dXJuIHJlc2V0QnV0dG9uRGVmYXVsdExh
YmVsKCk7Cit9CisKK2Jvb2wgUmVzZXRJbnB1dFR5cGU6OmlzVGV4dEJ1dHRvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvaHRtbC9SZXNldElucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9S
ZXNldElucHV0VHlwZS5oCShyZXZpc2lvbiA3NDg3MSkKKysrIFdlYkNvcmUvaHRtbC9SZXNldElu
cHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw4IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c1ZhbGlkYXRpb24oKSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVudCopOworICAgIHZpcnR1YWwgU3RyaW5nIGRl
ZmF1bHRWYWx1ZSgpOworICAgIHZpcnR1YWwgYm9vbCBpc1RleHRCdXR0b24oKSBjb25zdDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9TZWFyY2hJbnB1
dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuY3Bw
CShyZXZpc2lvbiA3NDg3MSkKKysrIFdlYkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw0ICs0NSwxNCBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFNlYXJj
aElucHV0VHlwZTo6Zm9yCiAgICAgcmV0dXJuIElucHV0VHlwZU5hbWVzOjpzZWFyY2goKTsKIH0K
IAorYm9vbCBTZWFyY2hJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RTcGVlY2hBdHRyaWJ1dGUoKQor
eworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNlYXJjaElucHV0VHlwZTo6aXNTZWFyY2hG
aWVsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODcxKQorKysgV2Vi
Q29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw4
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU2VhcmNoSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1l
bnQqIGVsZW1lbnQpIDogQmFzZVRleHRJbnB1dFR5cGUoZWxlbWVudCkgeyB9CiAgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKCk7CisgICAgdmlydHVhbCBib29s
IGlzU2VhcmNoRmllbGQoKSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9TdWJtaXRJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9TdWJtaXRJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA3NDg3MSkKKysrIFdlYkNvcmUv
aHRtbC9TdWJtaXRJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMzLDcgKzM0LDkgQEAKIAog
I2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCisjaW5jbHVkZSAi
SFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1
ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03Miw0ICs3NSwyNCBAQCB2b2lkIFN1Ym1pdElucHV0VHlw
ZTo6aGFuZGxlRE9NQWN0aXZhdGVFCiAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9
CiAKK2Jvb2wgU3VibWl0SW5wdXRUeXBlOjpjYW5CZVN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKQor
eworICAgIHJldHVybiB0cnVlOworfQorCitTdHJpbmcgU3VibWl0SW5wdXRUeXBlOjpkZWZhdWx0
VmFsdWUoKQoreworICAgIHJldHVybiBzdWJtaXRCdXR0b25EZWZhdWx0TGFiZWwoKTsKK30KKwor
Ym9vbCBTdWJtaXRJbnB1dFR5cGU6OmlzU3VibWl0QnV0dG9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBTdWJtaXRJbnB1dFR5cGU6OmlzVGV4dEJ1dHRvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvaHRtbC9TdWJtaXRJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvU3VibWl0SW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0ODcxKQorKysgV2ViQ29yZS9odG1sL1N1
Ym1pdElucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxMCBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgYm9vbCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmLCBib29sKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNSZXF1aXJlZCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50Kik7CisgICAgdmlydHVhbCBi
b29sIGNhbkJlU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpOworICAgIHZpcnR1YWwgU3RyaW5nIGRl
ZmF1bHRWYWx1ZSgpOworICAgIHZpcnR1YWwgYm9vbCBpc1N1Ym1pdEJ1dHRvbigpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBpc1RleHRCdXR0b24oKSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9UZWxlcGhvbmVJbnB1dFR5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9UZWxlcGhvbmVJbnB1dFR5cGUuY3BwCShyZXZpc2lv
biA3NDg3MSkKKysrIFdlYkNvcmUvaHRtbC9UZWxlcGhvbmVJbnB1dFR5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw0ICs0NSwxNCBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFRlbGVwaG9uZUlu
cHV0VHlwZTo6CiAgICAgcmV0dXJuIElucHV0VHlwZU5hbWVzOjp0ZWxlcGhvbmUoKTsKIH0KIAor
Ym9vbCBUZWxlcGhvbmVJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RTcGVlY2hBdHRyaWJ1dGUoKQor
eworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRlbGVwaG9uZUlucHV0VHlwZTo6aXNUZWxl
cGhvbmVGaWVsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9UZWxlcGhvbmVJbnB1dFR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvVGVsZXBob25lSW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0
ODcxKQorKysgV2ViQ29yZS9odG1sL1RlbGVwaG9uZUlucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw2ICs0Miw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgVGVsZXBob25lSW5wdXRU
eXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogQmFzZVRleHRJbnB1dFR5cGUoZWxlbWVu
dCkgeyB9CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKCk7
CisgICAgdmlydHVhbCBib29sIGlzVGVsZXBob25lRmllbGQoKSBjb25zdDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCShy
ZXZpc2lvbiA3NDg3MSkKKysrIFdlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKQEAgLTEwNCw0ICsxMDUsMTkgQEAgUmVuZGVyT2JqZWN0KiBUZXh0RmllbGRJbnB1
dFR5cGU6OmNyZWF0ZQogICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUoZWxlbWVudCgpLCBlbGVtZW50KCktPnBsYWNlaG9sZGVyU2hvdWxkQmVWaXNpYmxl
KCkpOwogfQogCitib29sIFRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkVXNlSW5wdXRNZXRob2Qo
KSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitTdHJpbmcgVGV4dEZpZWxkSW5wdXRU
eXBlOjpzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkKK3sKKyAgICBy
ZXR1cm4gSW5wdXRFbGVtZW50OjpzYW5pdGl6ZVZhbHVlRm9yVGV4dEZpZWxkKGVsZW1lbnQoKSwg
cHJvcG9zZWRWYWx1ZSk7Cit9CisKK2Jvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRSZXNw
ZWN0TGlzdEF0dHJpYnV0ZSgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmgJKHJldmlzaW9uIDc0
ODcxKQorKysgV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCwxNCArNDAsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgVGV4dEZpZWxk
SW5wdXRUeXBlIDogcHVibGljIElucHV0VHlwZSB7CiBwcm90ZWN0ZWQ6CiAgICAgVGV4dEZpZWxk
SW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogSW5wdXRUeXBlKGVsZW1lbnQp
IHsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1RleHRGaWVsZCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCB2YWx1ZU1pc3NpbmcoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IGhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50Kik7CiAgICAgdm9pZCBoYW5kbGVLZXlk
b3duRXZlbnRGb3JTcGluQnV0dG9uKEtleWJvYXJkRXZlbnQqKTsKICAgICB2b2lkIGhhbmRsZVdo
ZWVsRXZlbnRGb3JTcGluQnV0dG9uKFdoZWVsRXZlbnQqKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgdmFsdWVNaXNz
aW5nKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBmb3J3YXJkRXZlbnQo
RXZlbnQqKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3VibWl0SW1wbGljaXRseShFdmVudCop
OwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSos
IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUlucHV0TWV0
aG9kKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgc2FuaXRpemVWYWx1ZShjb25zdCBTdHJp
bmcmIHByb3Bvc2VkVmFsdWUpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXNwZWN0TGlzdEF0
dHJpYnV0ZSgpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9o
dG1sL1RleHRJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9UZXh0SW5w
dXRUeXBlLmNwcAkocmV2aXNpb24gNzQ4NzEpCisrKyBXZWJDb3JlL2h0bWwvVGV4dElucHV0VHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDQgKzQ1LDE1IEBAIGNvbnN0IEF0b21pY1N0cmlu
ZyYgVGV4dElucHV0VHlwZTo6Zm9ybUMKICAgICByZXR1cm4gSW5wdXRUeXBlTmFtZXM6OnRleHQo
KTsKIH0KIAorYm9vbCBUZXh0SW5wdXRUeXBlOjpjYW5TZXRTdWdnZXN0ZWRWYWx1ZSgpCit7Cisg
ICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIHJlYWxseSBiZSByZXN0cmljdGVkIHRvIHBsYWluIHRl
eHQ/IFdoYXQgYWJvdXQgc2VhcmNoLCBmb3IgZXhhbXBsZT8KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBUZXh0SW5wdXRUeXBlOjpzaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKCkKK3sK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9odG1sL1RleHRJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvVGV4
dElucHV0VHlwZS5oCShyZXZpc2lvbiA3NDg3MSkKKysrIFdlYkNvcmUvaHRtbC9UZXh0SW5wdXRU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDggQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBUZXh0SW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogQmFzZVRleHRJ
bnB1dFR5cGUoZWxlbWVudCkgeyB9CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZv
cm1Db250cm9sVHlwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRTdWdnZXN0ZWRW
YWx1ZSgpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKCk7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvVGltZUlu
cHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuY3Bw
CShyZXZpc2lvbiA3NDg3MSkKKysrIFdlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBkb3VibGUgVGltZUlucHV0VHlwZTo6c3RlcFNj
YWxlRmFjdG9yKCkgCiAgICAgcmV0dXJuIHRpbWVTdGVwU2NhbGVGYWN0b3I7CiB9CiAKLWJvb2wg
VGltZUlucHV0VHlwZTo6c2NhbGVkU3RlcFZhbGV1U2hvdWxkQmVJbnRlZ2VyKCkgY29uc3QKK2Jv
b2wgVGltZUlucHV0VHlwZTo6c2NhbGVkU3RlcFZhbHVlU2hvdWxkQmVJbnRlZ2VyKCkgY29uc3QK
IHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuaAkocmV2aXNpb24g
NzQ4NzEpCisrKyBXZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBkb3VibGUgbWF4aW11bSgpIGNv
bnN0OwogICAgIHZpcnR1YWwgZG91YmxlIGRlZmF1bHRTdGVwKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBkb3VibGUgc3RlcFNjYWxlRmFjdG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNjYWxl
ZFN0ZXBWYWxldVNob3VsZEJlSW50ZWdlcigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzY2Fs
ZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VUb0RhdGVDb21wb25lbnRzSW50ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgs
IERhdGVDb21wb25lbnRzKikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNldE1pbGxpc2Vjb25k
VG9EYXRlQ29tcG9uZW50cyhkb3VibGUsIERhdGVDb21wb25lbnRzKikgY29uc3Q7CiB9OwpJbmRl
eDogV2ViQ29yZS9odG1sL1VSTElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL1VSTElucHV0VHlwZS5jcHAJKHJldmlzaW9uIDc0ODcxKQorKysgV2ViQ29yZS9odG1sL1VS
TElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDQgKzYzLDkgQEAgU3RyaW5nIFVS
TElucHV0VHlwZTo6dHlwZU1pc21hdGNoVGV4dCgpIAogICAgIHJldHVybiB2YWxpZGF0aW9uTWVz
c2FnZVR5cGVNaXNtYXRjaEZvclVSTFRleHQoKTsKIH0KIAorYm9vbCBVUkxJbnB1dFR5cGU6Omlz
VVJMRmllbGQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvVVJMSW5wdXRUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL1VSTElucHV0VHlwZS5oCShyZXZpc2lvbiA3NDg3MSkKKysrIFdlYkNv
cmUvaHRtbC9VUkxJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCB0eXBlTWlzbWF0Y2hGb3IoY29uc3QgU3RyaW5nJikg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIHR5cGVNaXNtYXRjaCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgU3RyaW5nIHR5cGVNaXNtYXRjaFRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNV
UkxGaWVsZCgpIGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCShyZXZpc2lvbiA3NDg3MSkKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wMS0wMiAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRWxpbWluYXRlIEhUTUxJbnB1dEVsZW1lbnQ6Om1fZGVwcmVjYXRlZFR5cGVOdW1i
ZXIsIG90aGVyIGlucHV0IHJlZmFjdG9yaW5nIGFuZCByZW5hbWluZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE3OTEKKworICAgICAgICAqIHNyYy9X
ZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwOgorICAgICAgICAoSFRNTE5hbWVzOjpJc0luRGVmYXVs
dFN0YXRlKTogVXNlIGhhc0F0dHJpYnV0ZShjaGVja2VkQXR0cikKKyAgICAgICAgdG8gZmluZCBv
dXQgd2hldGhlciBhIGJ1dHRvbiBzaG91bGQgYmUgY2hlY2tlZCBieSBkZWZhdWx0LAorICAgICAg
ICByYXRoZXIgdGhhbiBjYWxsaW5nIHRoZSBkZWZhdWx0Q2hlY2tlZCBmdW5jdGlvbi4KKwogMjAx
MS0wMS0wMiAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNo
YWJsZUZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNl
YXJjaGFibGVGb3JtRGF0YS5jcHAJKHJldmlzaW9uIDc0ODcxKQorKysgV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0
Niw3IEBACiAjaW5jbHVkZSAiV2ViRm9ybUVsZW1lbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBuYW1lc3BhY2UgewogCkBAIC0x
MjgsMTMgKzEyOSwxMyBAQCBib29sIElzU2VsZWN0SW5EZWZhdWx0U3RhdGUoY29uc3QgSFRNTFNl
CiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZvcm0gZWxlbWVudCBpcyBpbiBpdHMgZGVmYXVsdCBz
dGF0ZSwgZmFsc2Ugb3RoZXJ3aXNlLgogLy8gVGhlIGRlZmF1bHQgc3RhdGUgaXMgdGhlIHN0YXRl
IG9mIHRoZSBmb3JtIGVsZW1lbnQgb24gaW5pdGlhbCBsb2FkIG9mIHRoZQogLy8gcGFnZSwgYW5k
IHZhcmllcyBkZXBlbmRpbmcgdXBvbiB0aGUgZm9ybSBlbGVtZW50LiBGb3IgZXhhbXBsZSwgYSBj
aGVja2JveCBpcwotLy8gaW4gaXRzIGRlZmF1bHQgc3RhdGUgaWYgdGhlIGNoZWNrZWQgc3RhdGUg
bWF0Y2hlcyB0aGUgZGVmYXVsdENoZWNrZWQgc3RhdGUuCisvLyBpbiBpdHMgZGVmYXVsdCBzdGF0
ZSBpZiB0aGUgY2hlY2tlZCBzdGF0ZSBtYXRjaGVzIHRoZSBzdGF0ZSBvZiB0aGUgY2hlY2tlZCBh
dHRyaWJ1dGUuCiBib29sIElzSW5EZWZhdWx0U3RhdGUoY29uc3QgSFRNTEZvcm1Db250cm9sRWxl
bWVudCogZm9ybUVsZW1lbnQpCiB7CiAgICAgaWYgKGZvcm1FbGVtZW50LT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aW5wdXRUYWcpKSB7CiAgICAgICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0RWxlbWVudCA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqPihmb3JtRWxl
bWVudCk7CiAgICAgICAgIGlmIChpbnB1dEVsZW1lbnQtPmlzQ2hlY2tib3goKSB8fCBpbnB1dEVs
ZW1lbnQtPmlzUmFkaW9CdXR0b24oKSkKLSAgICAgICAgICAgIHJldHVybiBpbnB1dEVsZW1lbnQt
PmNoZWNrZWQoKSA9PSBpbnB1dEVsZW1lbnQtPmRlZmF1bHRDaGVja2VkKCk7CisgICAgICAgICAg
ICByZXR1cm4gaW5wdXRFbGVtZW50LT5jaGVja2VkKCkgPT0gaW5wdXRFbGVtZW50LT5oYXNBdHRy
aWJ1dGUoY2hlY2tlZEF0dHIpOwogICAgIH0gZWxzZSBpZiAoZm9ybUVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpzZWxlY3RUYWcpKQogICAgICAgICByZXR1cm4gSXNTZWxlY3RJbkRlZmF1
bHRTdGF0ZShzdGF0aWNfY2FzdDxjb25zdCBIVE1MU2VsZWN0RWxlbWVudCo+KGZvcm1FbGVtZW50
KSk7CiAgICAgcmV0dXJuIHRydWU7Cg==
</data>
<flag name="review"
          id="68974"
          type_id="1"
          status="+"
          setter="tkent"
    />
          </attachment>
      

    </bug>

</bugzilla>