<?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>41320</bug_id>
          
          <creation_ts>2010-06-28 17:49:38 -0700</creation_ts>
          <short_desc>Add adoptPtr and leakPtr functions for OwnPtr and PassOwnPtr</short_desc>
          <delta_ts>2011-12-25 19:34:38 -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>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>41712</dependson>
          <blocked>41321</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>244011</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-28 17:49:38 -0700</bug_when>
    <thetext>Add adoptPtr and releasePtr functions for OwnPtr and PassOwnPtr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244471</commentid>
    <comment_count>1</comment_count>
      <attachid>60051</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-29 14:10:48 -0700</bug_when>
    <thetext>Created attachment 60051
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244479</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-29 14:14:44 -0700</bug_when>
    <thetext>Attachment 60051 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
JavaScriptCore/wtf/OwnPtr.h:38:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
JavaScriptCore/wtf/PassOwnPtr.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 2 in 31 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244501</commentid>
    <comment_count>3</comment_count>
      <attachid>60060</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-29 14:54:00 -0700</bug_when>
    <thetext>Created attachment 60060
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244504</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-29 14:55:40 -0700</bug_when>
    <thetext>Attachment 60060 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
JavaScriptCore/wtf/OwnPtr.h:38:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
JavaScriptCore/wtf/PassOwnPtr.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 2 in 31 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244523</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-29 15:21:20 -0700</bug_when>
    <thetext>Attachment 60051 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3349242</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244526</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-29 15:24:52 -0700</bug_when>
    <thetext>From the output of the Chromium EWS bot it looks like JavaScriptCore/wtf/MessageQueue.h has some release calls that have to be changed to call leakPtr instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244572</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-29 17:30:34 -0700</bug_when>
    <thetext>Attachment 60060 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3313961</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244598</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-29 18:55:03 -0700</bug_when>
    <thetext>Attachment 60060 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/3382020</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244601</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-29 19:12:57 -0700</bug_when>
    <thetext>Attachment 60060 did not build on win:
Build output: http://webkit-commit-queue.appspot.com/results/3376019</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244980</commentid>
    <comment_count>10</comment_count>
      <attachid>60159</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-30 15:59:42 -0700</bug_when>
    <thetext>Created attachment 60159
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245003</commentid>
    <comment_count>11</comment_count>
      <attachid>60159</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-30 16:27:21 -0700</bug_when>
    <thetext>Comment on attachment 60159
Patch

I&apos;m slightly nervous about the CrossOriginPreflightResultCache part because I don&apos;t understand it fully.

JavaScriptCore/wtf/PassOwnPtr.h:79
 +          PassOwnPtr(PtrType ptr) : m_ptr(ptr) { }
Explicit?  I guess it wasn&apos;t explicit before....

JavaScriptCore/wtf/PassOwnPtr.h:85
 +          explicit PassOwnPtr(PtrType ptr) : m_ptr(ptr) { }
How does this differ from the above?

WebCore/css/CSSSegmentedFontFace.cpp:113
 +          if (const SimpleFontData* faceFontData = m_fontFaces[i]-&gt;getFontData(fontDescription, syntheticBold, syntheticItalic)) {
Seems slightly unrelated, but yay for removing static_cast

WebCore/loader/CrossOriginPreflightResultCache.cpp:155
 +          delete addResult.first-&gt;second;
Is this a real leak that you&apos;re fixing at the same time?  Might be better to do in a separate patch.  I don&apos;t understand this part well enough to know if it&apos;s right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245009</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-30 16:49:37 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; JavaScriptCore/wtf/PassOwnPtr.h:79
&gt;  +          PassOwnPtr(PtrType ptr) : m_ptr(ptr) { }
&gt; Explicit?  I guess it wasn&apos;t explicit before....
&gt; 
&gt; JavaScriptCore/wtf/PassOwnPtr.h:85
&gt;  +          explicit PassOwnPtr(PtrType ptr) : m_ptr(ptr) { }
&gt; How does this differ from the above?

The difference is that it’s private.

&gt; WebCore/css/CSSSegmentedFontFace.cpp:113
&gt;  +          if (const SimpleFontData* faceFontData = m_fontFaces[i]-&gt;getFontData(fontDescription, syntheticBold, syntheticItalic)) {
&gt; Seems slightly unrelated, but yay for removing static_cast

The history here is funny. An earlier patch had this erroneously as an OwnPtr.

&gt; WebCore/loader/CrossOriginPreflightResultCache.cpp:155
&gt;  +          delete addResult.first-&gt;second;
&gt; Is this a real leak that you&apos;re fixing at the same time?  Might be better to do in a separate patch.  I don&apos;t understand this part well enough to know if it&apos;s right.

I do think it&apos;s a real, theoretical leak. I don’t know how to make it actually leak. I could definitely leave that delete out and instead put in a FIXME, then add the deletion in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245010</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-30 16:50:12 -0700</bug_when>
    <thetext>I’m worried that the Qt-bot said fail, but gave me no details!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245013</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-30 16:54:01 -0700</bug_when>
    <thetext>boo.  The Qt bot should have details.  The style bot also failed to give results.  Odd.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247093</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-06 09:15:05 -0700</bug_when>
    <thetext>Committed r62551: &lt;http://trac.webkit.org/changeset/62551&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247097</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-06 09:33:32 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/62551 might have broken Chromium Linux Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60051</attachid>
            <date>2010-06-29 14:10:48 -0700</date>
            <delta_ts>2010-06-29 14:53:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41320-20100629141046.patch</filename>
            <type>text/plain</type>
            <size>51703</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMTQ1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTAtMDYtMjggIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBhZG9wdFB0ciBhbmQgbGVha1B0ciBmdW5jdGlvbnMgZm9yIE93
blB0ciBhbmQgUGFzc093blB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDEzMjAKKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVwYXJzZUZvckV4Y2VwdGlvbkluZm9JZk5lY2Vzc2Fy
eSk6IFVzZSBhc3NpZ25tZW50CisgICAgICAgIGluc3RlYWQgb2Ygc2V0IHNpbmNlIHRoZSByZXN1
bHQgb2YgcmVwYXJzZUV4Y2VwdGlvbkluZm8gaXMgbm93IGEKKyAgICAgICAgUGFzc093blB0ci4K
KworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOiBDaGFuZ2UgZXh0cmFjdEV4Y2VwdGlv
bkluZm8gdG8gcmV0dXJuIGEKKyAgICAgICAgUGFzc093blB0ciBpbnN0ZWFkIG9mIGEgcmF3IHBv
aW50ZXIuCisKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkV4ZWN1dGFibGU6OnJlcGFyc2VFeGNlcHRpb25JbmZvKTogUmV0dXJuIGEgUGFz
c093blB0ci4KKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OnJlcGFyc2VFeGNlcHRpb25J
bmZvKTogRGl0dG8uCisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpyZXBhcnNlRXhj
ZXB0aW9uSW5mbyk6IEFkZGVkLiBUaGlzIHdhcworICAgICAgICBpbiB0aGUgaGVhZGVyIGJlZm9y
ZSwgYnV0IGl0J3MgYmV0dGVyIHRvIG5vdCBoYXZlIGl0IHRoZXJlIHRvIHJlZHVjZQorICAgICAg
ICBoZWFkZXIgZGVwZW5kZW5jaWVzLiBSZXR1cm4gYSBQYXNzT3duUHRyLgorCisgICAgICAgICog
cnVudGltZS9FeGVjdXRhYmxlLmg6IE1hZGUgcmVwYXJzZUV4Y2VwdGlvbkluZm8gcmV0dXJuIGEg
UGFzc093blB0ciwKKyAgICAgICAgYW5kIHB1dCBpdCBpbiB0aGUgcHJpdmF0ZSBzZWN0aW9ucyBv
ZiBjbGFzc2VzIG90aGVyIHRoYW4gdGhlIGJhc2UgY2xhc3MuCisgICAgICAgIAorICAgICAgICAq
IHd0Zi9Pd25QdHIuaDogVHdlYWtlZCBmb3JtYXR0aW5nLiBDaGFuZ2VkIHRoZSByZWxlYXNlIGZ1
bmN0aW9uIHRvIHJldHVybgorICAgICAgICBhIFBhc3NPd25QdHIgcmF0aGVyIHRoYW4gYSByYXcg
cG9pbnRlci4gQWRkZWQgYSBsZWFrUHRyIGZ1bmN0aW9uIHRoYXQKKyAgICAgICAgcmV0dXJucyBh
IHJhdyBwb2ludGVyLiBQdXQgdGhlIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYSByYXcgcG9pbnRl
ciBhbmQKKyAgICAgICAgdGhlIHNldCBmdW5jdGlvbiBpbnRvIGEgc2VjdGlvbiBndWFyZGVkIGJ5
IExPT1NFX09XTl9QVFIuIEFkYXB0ZWQgdG8gdGhlCisgICAgICAgIG5ldyBhZG9wdFB0ciBmdW5j
dGlvbiBmcm9tIFBhc3NPd25QdHIuaC4KKworICAgICAgICAqIHd0Zi9QYXNzT3duUHRyLmg6IFR3
ZWFrZWQgZm9ybWF0dGluZy4gUmVuYW1lZCB0aGUgcmVsZWFzZSBmdW5jdGlvbgorICAgICAgICB0
byBsZWFrUHRyLiBBZGRlZCBhbiBhZG9wdFB0ciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcg
UGFzc093blB0ci4KKyAgICAgICAgUHV0IHRoZSBjb25zdHJ1Y3RvciBhbmQgYXNzaWdubWVudCBv
cGVyYXRvcnMgdGhhdCB0YWtlIGEgcmF3IHBvaW50ZXIKKyAgICAgICAgaW50byBhIHNlY3Rpb24g
Z3VhcmRlZCBieSBMT09TRV9QQVNTX09XTl9QVFIuCisKIDIwMTAtMDYtMjkgIE5hdGhhbiBMYXdy
ZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZy
ZXkgR2FyZW4uCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDYyMTQ1KQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC0xNTM4LDcgKzE1MzgsNyBAQCBib29sIENvZGVCbG9jazo6cmVwYXJz
ZUZvckV4Y2VwdGlvbkluZm9JCiAgICAgICAgICAgICBzY29wZUNoYWluID0gc2NvcGVDaGFpbi0+
bmV4dDsKICAgICB9CiAKLSAgICBtX2V4Y2VwdGlvbkluZm8uc2V0KG1fb3duZXJFeGVjdXRhYmxl
LT5yZXBhcnNlRXhjZXB0aW9uSW5mbyhtX2dsb2JhbERhdGEsIHNjb3BlQ2hhaW4sIHRoaXMpKTsK
KyAgICBtX2V4Y2VwdGlvbkluZm8gPSBtX293bmVyRXhlY3V0YWJsZS0+cmVwYXJzZUV4Y2VwdGlv
bkluZm8obV9nbG9iYWxEYXRhLCBzY29wZUNoYWluLCB0aGlzKTsKICAgICByZXR1cm4gbV9leGNl
cHRpb25JbmZvOwogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2
aXNpb24gNjIxNDUpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiUmVnRXhwLmgiCiAjaW5j
bHVkZSAiVVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCkBAIC00NDYsNyArNDQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgYm9vbCBoYXNFeGNlcHRpb25JbmZvKCkgY29uc3QgeyByZXR1cm4gbV9leGNlcHRpb25J
bmZvOyB9CiAgICAgICAgIHZvaWQgY2xlYXJFeGNlcHRpb25JbmZvKCkgeyBtX2V4Y2VwdGlvbklu
Zm8uY2xlYXIoKTsgfQotICAgICAgICBFeGNlcHRpb25JbmZvKiBleHRyYWN0RXhjZXB0aW9uSW5m
bygpIHsgQVNTRVJUKG1fZXhjZXB0aW9uSW5mbyk7IHJldHVybiBtX2V4Y2VwdGlvbkluZm8ucmVs
ZWFzZSgpOyB9CisgICAgICAgIFBhc3NPd25QdHI8RXhjZXB0aW9uSW5mbz4gZXh0cmFjdEV4Y2Vw
dGlvbkluZm8oKTsKIAogICAgICAgICB2b2lkIGFkZEV4cHJlc3Npb25JbmZvKGNvbnN0IEV4cHJl
c3Npb25SYW5nZUluZm8mIGV4cHJlc3Npb25JbmZvKSB7IEFTU0VSVChtX2V4Y2VwdGlvbkluZm8p
OyBtX2V4Y2VwdGlvbkluZm8tPm1fZXhwcmVzc2lvbkluZm8uYXBwZW5kKGV4cHJlc3Npb25JbmZv
KTsgfQogICAgICAgICB2b2lkIGFkZEdldEJ5SWRFeGNlcHRpb25JbmZvKGNvbnN0IEdldEJ5SWRF
eGNlcHRpb25JbmZvJiBpbmZvKSB7IEFTU0VSVChtX2V4Y2VwdGlvbkluZm8pOyBtX2V4Y2VwdGlv
bkluZm8tPm1fZ2V0QnlJZEV4Y2VwdGlvbkluZm8uYXBwZW5kKGluZm8pOyB9CkBAIC02NjUsNiAr
NjY2LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgfTsKIAorICAgIGlubGlu
ZSBQYXNzT3duUHRyPEV4Y2VwdGlvbkluZm8+IENvZGVCbG9jazo6ZXh0cmFjdEV4Y2VwdGlvbklu
Zm8oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZXhjZXB0aW9uSW5mbyk7CisgICAgICAgIHJl
dHVybiBtX2V4Y2VwdGlvbkluZm8ucmVsZWFzZSgpOworICAgIH0KKwogICAgIGlubGluZSBSZWdp
c3RlciYgRXhlY1N0YXRlOjpyKGludCBpbmRleCkKICAgICB7CiAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDYyMTQ1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjI5LDExICsyMjksMTEgQEAgdm9pZCBG
dW5jdGlvbkV4ZWN1dGFibGU6Om1hcmtBZ2dyZWdhdGUoTQogICAgICAgICBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdC0+bWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwogfQogCi1FeGNlcHRpb25JbmZv
KiBGdW5jdGlvbkV4ZWN1dGFibGU6OnJlcGFyc2VFeGNlcHRpb25JbmZvKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKK1Bhc3NPd25QdHI8RXhjZXB0aW9uSW5mbz4gRnVuY3Rpb25FeGVjdXRhYmxlOjpy
ZXBhcnNlRXhjZXB0aW9uSW5mbyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluTm9kZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgUmVmUHRy
PEZ1bmN0aW9uQm9keU5vZGU+IG5ld0Z1bmN0aW9uQm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+
cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZ2xvYmFsRGF0YSwgMCwgMCwgbV9zb3VyY2UpOwogICAg
IGlmICghbmV3RnVuY3Rpb25Cb2R5KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJu
IFBhc3NPd25QdHI8RXhjZXB0aW9uSW5mbz4oKTsKICAgICBpZiAobV9mb3JjZVVzZXNBcmd1bWVu
dHMpCiAgICAgICAgIG5ld0Z1bmN0aW9uQm9keS0+c2V0VXNlc0FyZ3VtZW50cygpOwogICAgIG5l
d0Z1bmN0aW9uQm9keS0+ZmluaXNoUGFyc2luZyhtX3BhcmFtZXRlcnMsIG1fbmFtZSk7CkBAIC0y
NjAsMTEgKzI2MCwxMSBAQCBFeGNlcHRpb25JbmZvKiBGdW5jdGlvbkV4ZWN1dGFibGU6OnJlcGFy
CiAgICAgcmV0dXJuIG5ld0NvZGVCbG9jay0+ZXh0cmFjdEV4Y2VwdGlvbkluZm8oKTsKIH0KIAot
RXhjZXB0aW9uSW5mbyogRXZhbEV4ZWN1dGFibGU6OnJlcGFyc2VFeGNlcHRpb25JbmZvKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK1Bhc3NPd25QdHI8RXhjZXB0aW9uSW5mbz4gRXZhbEV4ZWN1dGFi
bGU6OnJlcGFyc2VFeGNlcHRpb25JbmZvKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBS
ZWZQdHI8RXZhbE5vZGU+IG5ld0V2YWxCb2R5ID0gZ2xvYmFsRGF0YS0+cGFyc2VyLT5wYXJzZTxF
dmFsTm9kZT4oZ2xvYmFsRGF0YSwgMCwgMCwgbV9zb3VyY2UpOwogICAgIGlmICghbmV3RXZhbEJv
ZHkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gUGFzc093blB0cjxFeGNlcHRp
b25JbmZvPigpOwogCiAgICAgU2NvcGVDaGFpbiBzY29wZUNoYWluKHNjb3BlQ2hhaW5Ob2RlKTsK
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbi5nbG9iYWxPYmpl
Y3QoKTsKQEAgLTMzNCw2ICszMzQsMTAgQEAgVVN0cmluZyBGdW5jdGlvbkV4ZWN1dGFibGU6OnBh
cmFtU3RyaW5nKAogICAgIHJldHVybiBidWlsZGVyLmJ1aWxkKCk7CiB9CiAKLX07Ci0KK1Bhc3NP
d25QdHI8RXhjZXB0aW9uSW5mbz4gUHJvZ3JhbUV4ZWN1dGFibGU6OnJlcGFyc2VFeGNlcHRpb25J
bmZvKEpTR2xvYmFsRGF0YSosIFNjb3BlQ2hhaW5Ob2RlKiwgQ29kZUJsb2NrKikKK3sKKyAgICAv
LyBDb2RlQmxvY2tzIGZvciBwcm9ncmFtIGNvZGUgYXJlIHRyYW5zaWVudCBhbmQgdGhlcmVmb3Jl
IGRvIG5vdCBnYWluIGZyb20gZnJvbSB0aHJvd2luZyBvdXQgdGhlaXIgZXhjZXB0aW9uIGluZm9y
bWF0aW9uLgorICAgIHJldHVybiBQYXNzT3duUHRyPEV4Y2VwdGlvbkluZm8+KCk7Cit9CiAKK30K
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiA2MjE0NSkKKysr
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJOb2Rlcy5oIgog
I2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNzEsNyArMTcyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMgJiBB
cmd1bWVudHNGZWF0dXJlOyB9CiAgICAgICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9mZWF0dXJlcyAmIChFdmFsRmVhdHVyZSB8IENsb3N1cmVGZWF0dXJlIHwgV2l0
aEZlYXR1cmUgfCBDYXRjaEZlYXR1cmUpOyB9CiAKLSAgICAgICAgdmlydHVhbCBFeGNlcHRpb25J
bmZvKiByZXBhcnNlRXhjZXB0aW9uSW5mbyhKU0dsb2JhbERhdGEqLCBTY29wZUNoYWluTm9kZSos
IENvZGVCbG9jayopID0gMDsKKyAgICAgICAgdmlydHVhbCBQYXNzT3duUHRyPEV4Y2VwdGlvbklu
Zm8+IHJlcGFyc2VFeGNlcHRpb25JbmZvKEpTR2xvYmFsRGF0YSosIFNjb3BlQ2hhaW5Ob2RlKiwg
Q29kZUJsb2NrKikgPSAwOwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2b2lkIHJlY29yZFBh
cnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQpA
QCAtMjAzLDcgKzIwNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTT2JqZWN0KiBj
b21waWxlKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAKLSAgICAgICAgRXhjZXB0aW9u
SW5mbyogcmVwYXJzZUV4Y2VwdGlvbkluZm8oSlNHbG9iYWxEYXRhKiwgU2NvcGVDaGFpbk5vZGUq
LCBDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZhbEV4ZWN1dGFibGU+
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IEV2YWxFeGVjdXRhYmxlKGV4ZWMsIHNvdXJjZSkpOyB9CiAKICAgICBw
cml2YXRlOgpAQCAtMjEyLDYgKzIxMiw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
LCBtX2V2YWxDb2RlQmxvY2soMCkKICAgICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgdmly
dHVhbCBQYXNzT3duUHRyPEV4Y2VwdGlvbkluZm8+IHJlcGFyc2VFeGNlcHRpb25JbmZvKEpTR2xv
YmFsRGF0YSosIFNjb3BlQ2hhaW5Ob2RlKiwgQ29kZUJsb2NrKik7CisKICAgICAgICAgRXZhbENv
ZGVCbG9jayogbV9ldmFsQ29kZUJsb2NrOwogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTI0OSwxNSAr
MjUyLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU09iamVjdCogY2hlY2tTeW50YXgo
RXhlY1N0YXRlKik7CiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlKEV4ZWNTdGF0ZSosIFNjb3Bl
Q2hhaW5Ob2RlKik7CiAKLSAgICAgICAgLy8gQ29kZUJsb2NrcyBmb3IgcHJvZ3JhbSBjb2RlIGFy
ZSB0cmFuc2llbnQgYW5kIHRoZXJlZm9yZSBkbyBub3QgZ2FpbiBmcm9tIGZyb20gdGhyb3dpbmcg
b3V0IHRoZXJlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbi4KLSAgICAgICAgRXhjZXB0aW9uSW5mbyog
cmVwYXJzZUV4Y2VwdGlvbkluZm8oSlNHbG9iYWxEYXRhKiwgU2NvcGVDaGFpbk5vZGUqLCBDb2Rl
QmxvY2sqKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQotCiAgICAgcHJpdmF0
ZToKICAgICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UpCiAgICAgICAgICAgICA6IFNjcmlwdEV4ZWN1dGFibGUoZXhlYywgc291
cmNlKQogICAgICAgICAgICAgLCBtX3Byb2dyYW1Db2RlQmxvY2soMCkKICAgICAgICAgewogICAg
ICAgICB9CisKKyAgICAgICAgdmlydHVhbCBQYXNzT3duUHRyPEV4Y2VwdGlvbkluZm8+IHJlcGFy
c2VFeGNlcHRpb25JbmZvKEpTR2xvYmFsRGF0YSosIFNjb3BlQ2hhaW5Ob2RlKiwgQ29kZUJsb2Nr
Kik7CisKICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogbV9wcm9ncmFtQ29kZUJsb2NrOwogCiAj
aWYgRU5BQkxFKEpJVCkKQEAgLTM1MCw3ICszNTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zeW1i
b2xUYWJsZTsgfQogCiAgICAgICAgIHZvaWQgcmVjb21waWxlKEV4ZWNTdGF0ZSopOwotICAgICAg
ICBFeGNlcHRpb25JbmZvKiByZXBhcnNlRXhjZXB0aW9uSW5mbyhKU0dsb2JhbERhdGEqLCBTY29w
ZUNoYWluTm9kZSosIENvZGVCbG9jayopOwogICAgICAgICB2b2lkIG1hcmtBZ2dyZWdhdGUoTWFy
a1N0YWNrJiBtYXJrU3RhY2spOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGdW5jdGlvbkV4
ZWN1dGFibGU+IGZyb21HbG9iYWxDb2RlKGNvbnN0IElkZW50aWZpZXImLCBFeGVjU3RhdGUqLCBE
ZWJ1Z2dlciosIGNvbnN0IFNvdXJjZUNvZGUmLCBpbnQqIGVyckxpbmUgPSAwLCBVU3RyaW5nKiBl
cnJNc2cgPSAwKTsKIApAQCAtMzg2LDYgKzM4OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIGNvbXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAgICAg
ICAgIGJvb2wgY29tcGlsZUZvckNvbnN0cnVjdChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSop
OwogCisgICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxFeGNlcHRpb25JbmZvPiByZXBhcnNlRXhj
ZXB0aW9uSW5mbyhKU0dsb2JhbERhdGEqLCBTY29wZUNoYWluTm9kZSosIENvZGVCbG9jayopOwor
CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtVmFyaWFibGVzIDogMzE7CiAgICAgICAgIGJvb2wgbV9m
b3JjZVVzZXNBcmd1bWVudHMgOiAxOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvT3duUHRy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL093blB0ci5oCShyZXZpc2lvbiA2
MjE0NSkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9Pd25QdHIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDM2ICsyOCwzOSBAQAogI2luY2x1ZGUgPGFsZ29y
aXRobT4KICNpbmNsdWRlIDxtZW1vcnk+CiAKKy8vIFJlbW92ZSB0aGlzIG9uY2Ugd2UgbWFrZSBh
bGwgV2ViS2l0IGNvZGUgY29tcGF0aWJsZSB3aXRoIHN0cmljdGVyIHJ1bGVzIGFib3V0IE93blB0
ci4KKyNkZWZpbmUgTE9PU0VfT1dOX1BUUgorCiBuYW1lc3BhY2UgV1RGIHsKIAogICAgIC8vIFVu
bGlrZSBtb3N0IG9mIG91ciBzbWFydCBwb2ludGVycywgT3duUHRyIGNhbiB0YWtlIGVpdGhlciB0
aGUgcG9pbnRlciB0eXBlIG9yIHRoZSBwb2ludGVkLXRvIHR5cGUuCiAKLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gY2xhc3MgUGFzc093blB0cjsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
bGFzcyBQYXNzT3duUHRyOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFBhc3NPd25QdHI8VD4g
YWRvcHRQdHIoVCopOwogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIE93blB0ciA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgT3du
UHRyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgUmVtb3ZlUG9pbnRlcjxUPjo6VHlwZSBWYWx1ZVR5cGU7CiAgICAgICAgIHR5cGVk
ZWYgVmFsdWVUeXBlKiBQdHJUeXBlOwogCi0gICAgICAgIGV4cGxpY2l0IE93blB0cihQdHJUeXBl
IHB0ciA9IDApIDogbV9wdHIocHRyKSB7IH0KKyAgICAgICAgT3duUHRyKCkgOiBtX3B0cigwKSB7
IH0KKwogICAgICAgICAvLyBTZWUgY29tbWVudCBpbiBQYXNzT3duUHRyLmggZm9yIHdoeSB0aGlz
IHRha2VzIGEgY29uc3QgcmVmZXJlbmNlLgotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4g
T3duUHRyKGNvbnN0IFBhc3NPd25QdHI8VT4mIG8pOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBPd25QdHIoY29uc3QgUGFzc093blB0cjxVPiYgbyk7CiAKICAgICAgICAgLy8gVGhpcyBj
b3B5IGNvbnN0cnVjdG9yIGlzIHVzZWQgaW1wbGljaXRseSBieSBnY2Mgd2hlbiBpdCBnZW5lcmF0
ZXMKICAgICAgICAgLy8gdHJhbnNpZW50cyBmb3IgYXNzaWduaW5nIGEgUGFzc093blB0cjxUPiBv
YmplY3QgdG8gYSBzdGFjay1hbGxvY2F0ZWQKLSAgICAgICAgLy8gT3duUHRyPFQ+IG9iamVjdC4g
IEl0IHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZXhwbGljaXRseSBhbmQgZ2NjCisgICAgICAgIC8v
IE93blB0cjxUPiBvYmplY3QuIEl0IHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZXhwbGljaXRseSBh
bmQgZ2NjCiAgICAgICAgIC8vIHNob3VsZCBvcHRpbWl6ZSBhd2F5IHRoZSBjb25zdHJ1Y3RvciB3
aGVuIGdlbmVyYXRpbmcgY29kZS4KLSAgICAgICAgT3duUHRyKGNvbnN0IE93blB0cjxWYWx1ZVR5
cGU+JiBvKTsKKyAgICAgICAgT3duUHRyKGNvbnN0IE93blB0cjxWYWx1ZVR5cGU+Jik7CiAKICAg
ICAgICAgfk93blB0cigpIHsgZGVsZXRlT3duZWRQdHIobV9wdHIpOyB9CiAKICAgICAgICAgUHRy
VHlwZSBnZXQoKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQotICAgICAgICBQdHJUeXBlIHJlbGVh
c2UoKSB7IFB0clR5cGUgcHRyID0gbV9wdHI7IG1fcHRyID0gMDsgcmV0dXJuIHB0cjsgfQotCi0g
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSByZW5hbWVkIHRvIGFkb3B0LiAKLSAgICAg
ICAgdm9pZCBzZXQoUHRyVHlwZSBwdHIpIHsgQVNTRVJUKCFwdHIgfHwgbV9wdHIgIT0gcHRyKTsg
ZGVsZXRlT3duZWRQdHIobV9wdHIpOyBtX3B0ciA9IHB0cjsgfQogCiAgICAgICAgIHZvaWQgY2xl
YXIoKSB7IGRlbGV0ZU93bmVkUHRyKG1fcHRyKTsgbV9wdHIgPSAwOyB9CisgICAgICAgIFBhc3NP
d25QdHI8VD4gcmVsZWFzZSgpOworICAgICAgICBQdHJUeXBlIGxlYWtQdHIoKTsKIAogICAgICAg
ICBWYWx1ZVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJuICpt
X3B0cjsgfQogICAgICAgICBQdHJUeXBlIG9wZXJhdG9yLT4oKSBjb25zdCB7IEFTU0VSVChtX3B0
cik7IHJldHVybiBtX3B0cjsgfQpAQCAtNjksNjUgKzcyLDkzIEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9w
dHIgPyAmT3duUHRyOjptX3B0ciA6IDA7IH0KIAogICAgICAgICBPd25QdHImIG9wZXJhdG9yPShj
b25zdCBQYXNzT3duUHRyPFQ+Jik7Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBPd25Q
dHImIG9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRyPFU+Jik7CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IE93blB0ciYgb3BlcmF0b3I9KGNvbnN0IFBhc3NPd25QdHI8VT4mKTsKIAogICAg
ICAgICB2b2lkIHN3YXAoT3duUHRyJiBvKSB7IHN0ZDo6c3dhcChtX3B0ciwgby5tX3B0cik7IH0K
IAorI2lmZGVmIExPT1NFX09XTl9QVFIKKyAgICAgICAgZXhwbGljaXQgT3duUHRyKFB0clR5cGUg
cHRyKSA6IG1fcHRyKHB0cikgeyB9CisgICAgICAgIHZvaWQgc2V0KFB0clR5cGUpOworI2VuZGlm
CisKICAgICBwcml2YXRlOgogICAgICAgICBQdHJUeXBlIG1fcHRyOwogICAgIH07CiAKLSAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdGVtcGxhdGUgPHR5cGVuYW1lIFU+IGlubGluZSBPd25QdHI8
VD46Ok93blB0cihjb25zdCBQYXNzT3duUHRyPFU+JiBvKQotICAgICAgICA6IG1fcHRyKG8ucmVs
ZWFzZSgpKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+IGlu
bGluZSBPd25QdHI8VD46Ok93blB0cihjb25zdCBQYXNzT3duUHRyPFU+JiBvKQorICAgICAgICA6
IG1fcHRyKG8ubGVha1B0cigpKQorICAgIHsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgUGFzc093blB0cjxUPiBPd25QdHI8VD46OnJlbGVhc2UoKQogICAgIHsKKyAg
ICAgICAgUHRyVHlwZSBwdHIgPSBtX3B0cjsKKyAgICAgICAgbV9wdHIgPSAwOworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIocHRyKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgdHlwZW5hbWUgT3duUHRyPFQ+OjpQdHJUeXBlIE93blB0cjxUPjo6bGVha1B0cigpCisg
ICAgeworICAgICAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOworICAgICAgICBtX3B0ciA9IDA7Cisg
ICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisjaWZkZWYgTE9PU0VfT1dOX1BUUgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIE93blB0cjxUPjo6c2V0KFB0clR5cGUgcHRy
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFwdHIgfHwgbV9wdHIgIT0gcHRyKTsKKyAgICAgICAg
ZGVsZXRlT3duZWRQdHIobV9wdHIpOworICAgICAgICBtX3B0ciA9IHB0cjsKICAgICB9CisjZW5k
aWYKIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgT3duUHRyPFQ+JiBPd25QdHI8
VD46Om9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRyPFQ+JiBvKQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBPd25QdHI8VD4mIE93blB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFBhc3NP
d25QdHI8VD4mIG8pCiAgICAgewogICAgICAgICBUKiBwdHIgPSBtX3B0cjsKLSAgICAgICAgbV9w
dHIgPSBvLnJlbGVhc2UoKTsKKyAgICAgICAgbV9wdHIgPSBvLmxlYWtQdHIoKTsKICAgICAgICAg
QVNTRVJUKCFwdHIgfHwgbV9wdHIgIT0gcHRyKTsKICAgICAgICAgaWYgKHB0cikKICAgICAgICAg
ICAgIGRlbGV0ZU93bmVkUHRyKHB0cik7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAK
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdGVtcGxhdGUgPHR5cGVuYW1lIFU+IGlubGluZSBP
d25QdHI8VD4mIE93blB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFBhc3NPd25QdHI8VT4mIG8pCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUgVT4gaW5saW5lIE93blB0
cjxUPiYgT3duUHRyPFQ+OjpvcGVyYXRvcj0oY29uc3QgUGFzc093blB0cjxVPiYgbykKICAgICB7
CiAgICAgICAgIFQqIHB0ciA9IG1fcHRyOwotICAgICAgICBtX3B0ciA9IG8ucmVsZWFzZSgpOwor
ICAgICAgICBtX3B0ciA9IG8ubGVha1B0cigpOwogICAgICAgICBBU1NFUlQoIXB0ciB8fCBtX3B0
ciAhPSBwdHIpOwogICAgICAgICBpZiAocHRyKQogICAgICAgICAgICAgZGVsZXRlT3duZWRQdHIo
cHRyKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBpbmxpbmUgdm9pZCBzd2FwKE93blB0cjxUPiYgYSwgT3duUHRyPFQ+JiBiKQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIHN3YXAoT3duUHRyPFQ+JiBhLCBPd25Q
dHI8VD4mIGIpCiAgICAgewogICAgICAgICBhLnN3YXAoYik7CiAgICAgfQogCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
T3duUHRyPFQ+JiBhLCBVKiBiKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgT3duUHRyPFQ+JiBhLCBVKiBiKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGEuZ2V0KCkgPT0gYjsgCiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oVCogYSwgY29uc3Qg
T3duUHRyPFU+JiBiKSAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KFQqIGEsIGNvbnN0IE93blB0cjxVPiYgYikgCiAgICAgewogICAg
ICAgICByZXR1cm4gYSA9PSBiLmdldCgpOyAKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBPd25QdHI8VD4m
IGEsIFUqIGIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBPd25QdHI8VD4mIGEsIFUqIGIpCiAgICAgewogICAgICAgICBy
ZXR1cm4gYS5nZXQoKSAhPSBiOyAKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShUKiBhLCBjb25zdCBPd25QdHI8VT4m
IGIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShUKiBhLCBjb25zdCBPd25QdHI8VT4mIGIpCiAgICAgewogICAgICAgICByZXR1cm4g
YSAhPSBiLmdldCgpOyAKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5l
IHR5cGVuYW1lIE93blB0cjxUPjo6UHRyVHlwZSBnZXRQdHIoY29uc3QgT3duUHRyPFQ+JiBwKQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBPd25QdHI8VD46OlB0clR5
cGUgZ2V0UHRyKGNvbnN0IE93blB0cjxUPiYgcCkKICAgICB7CiAgICAgICAgIHJldHVybiBwLmdl
dCgpOwogICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9QYXNzT3duUHRyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NPd25QdHIuaAkocmV2aXNpb24gNjIxNDUp
CisrKyBKYXZhU2NyaXB0Q29yZS93dGYvUGFzc093blB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwz
MSArMzAsMzYgQEAKICNpbmNsdWRlICJPd25QdHJDb21tb24uaCIKICNpbmNsdWRlICJUeXBlVHJh
aXRzLmgiCiAKKy8vIFJlbW92ZSB0aGlzIG9uY2Ugd2UgbWFrZSBhbGwgV2ViS2l0IGNvZGUgY29t
cGF0aWJsZSB3aXRoIHN0cmljdGVyIHJ1bGVzIGFib3V0IFBhc3NPd25QdHIuCisjZGVmaW5lIExP
T1NFX1BBU1NfT1dOX1BUUgorCiBuYW1lc3BhY2UgV1RGIHsKIAogICAgIC8vIFVubGlrZSBtb3N0
IG9mIG91ciBzbWFydCBwb2ludGVycywgUGFzc093blB0ciBjYW4gdGFrZSBlaXRoZXIgdGhlIHBv
aW50ZXIgdHlwZSBvciB0aGUgcG9pbnRlZC10byB0eXBlLgogCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGNsYXNzIE93blB0cjsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBPd25Q
dHI7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc093blB0cjsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBQYXNzT3duUHRyPFQ+IGFkb3B0UHRyKFQqKTsKIAotICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzT3duUHRyIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjbGFzcyBQYXNzT3duUHRyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgUmVtb3ZlUG9pbnRlcjxUPjo6VHlwZSBWYWx1ZVR5cGU7CiAgICAgICAgIHR5cGVkZWYg
VmFsdWVUeXBlKiBQdHJUeXBlOwogCi0gICAgICAgIFBhc3NPd25QdHIoUHRyVHlwZSBwdHIgPSAw
KSA6IG1fcHRyKHB0cikgeyB9CisgICAgICAgIFBhc3NPd25QdHIoKSA6IG1fcHRyKDApIHsgfQor
CiAgICAgICAgIC8vIEl0IHNvbWV3aGF0IGJyZWFrcyB0aGUgdHlwZSBzeXN0ZW0gdG8gYWxsb3cg
dHJhbnNmZXIgb2Ygb3duZXJzaGlwIG91dCBvZgogICAgICAgICAvLyBhIGNvbnN0IFBhc3NPd25Q
dHIuIEhvd2V2ZXIsIGl0IG1ha2VzIGl0IG11Y2ggZWFzaWVyIHRvIHdvcmsgd2l0aCBQYXNzT3du
UHRyCi0gICAgICAgIC8vIHRlbXBvcmFyaWVzLCBhbmQgd2UgZG9uJ3QgcmVhbGx5IGhhdmUgYSBu
ZWVkIHRvIHVzZSByZWFsIGNvbnN0IFBhc3NPd25QdHJzIAotICAgICAgICAvLyBhbnl3YXkuCi0g
ICAgICAgIFBhc3NPd25QdHIoY29uc3QgUGFzc093blB0ciYgbykgOiBtX3B0cihvLnJlbGVhc2Uo
KSkgeyB9Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBQYXNzT3duUHRyKGNvbnN0IFBh
c3NPd25QdHI8VT4mIG8pIDogbV9wdHIoby5yZWxlYXNlKCkpIHsgfQorICAgICAgICAvLyB0ZW1w
b3JhcmllcywgYW5kIHdlIGRvbid0IGhhdmUgYSBuZWVkIHRvIHVzZSByZWFsIGNvbnN0IFBhc3NP
d25QdHJzIGFueXdheS4KKyAgICAgICAgUGFzc093blB0cihjb25zdCBQYXNzT3duUHRyJiBvKSA6
IG1fcHRyKG8ubGVha1B0cigpKSB7IH0KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gUGFz
c093blB0cihjb25zdCBQYXNzT3duUHRyPFU+JiBvKSA6IG1fcHRyKG8ubGVha1B0cigpKSB7IH0K
IAogICAgICAgICB+UGFzc093blB0cigpIHsgZGVsZXRlT3duZWRQdHIobV9wdHIpOyB9CiAKICAg
ICAgICAgUHRyVHlwZSBnZXQoKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQogCiAgICAgICAgIHZv
aWQgY2xlYXIoKSB7IG1fcHRyID0gMDsgfQotICAgICAgICBQdHJUeXBlIHJlbGVhc2UoKSBjb25z
dCB7IFB0clR5cGUgcHRyID0gbV9wdHI7IG1fcHRyID0gMDsgcmV0dXJuIHB0cjsgfQorICAgICAg
ICBQdHJUeXBlIGxlYWtQdHIoKSBjb25zdDsKIAogICAgICAgICBWYWx1ZVR5cGUmIG9wZXJhdG9y
KigpIGNvbnN0IHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJuICptX3B0cjsgfQogICAgICAgICBQdHJU
eXBlIG9wZXJhdG9yLT4oKSBjb25zdCB7IEFTU0VSVChtX3B0cik7IHJldHVybiBtX3B0cjsgfQpA
QCAtNjUsMTA1ICs3MCwxMjkgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHR5cGVkZWYgUHRy
VHlwZSBQYXNzT3duUHRyOjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKICAgICAgICAgb3BlcmF0b3Ig
VW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyID8gJlBhc3NPd25QdHI6
Om1fcHRyIDogMDsgfQogCi0gICAgICAgIFBhc3NPd25QdHImIG9wZXJhdG9yPShUKik7CiAgICAg
ICAgIFBhc3NPd25QdHImIG9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRyPFQ+Jik7Ci0gICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBQYXNzT3duUHRyJiBvcGVyYXRvcj0oY29uc3QgUGFzc093
blB0cjxVPiYpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBQYXNzT3duUHRyJiBvcGVy
YXRvcj0oY29uc3QgUGFzc093blB0cjxVPiYpOworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+IGZyaWVuZCBQYXNzT3duUHRyPFU+IGFkb3B0UHRyKFUqKTsKKworI2lmZGVmIExPT1NFX1BB
U1NfT1dOX1BUUgorICAgICAgICBQYXNzT3duUHRyKFB0clR5cGUgcHRyKSA6IG1fcHRyKHB0cikg
eyB9CisgICAgICAgIFBhc3NPd25QdHImIG9wZXJhdG9yPShQdHJUeXBlKTsKKyNlbmRpZgogCiAg
ICAgcHJpdmF0ZToKKyNpZm5kZWYgTE9PU0VfUEFTU19PV05fUFRSCisgICAgICAgIGV4cGxpY2l0
IFBhc3NPd25QdHIoUHRyVHlwZSBwdHIpIDogbV9wdHIocHRyKSB7IH0KKyNlbmRpZgorCiAgICAg
ICAgIG11dGFibGUgUHRyVHlwZSBtX3B0cjsKICAgICB9OwogCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGlubGluZSBQYXNzT3duUHRyPFQ+JiBQYXNzT3duUHRyPFQ+OjpvcGVyYXRvcj0oVCog
b3B0cikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgUGFzc093blB0
cjxUPjo6UHRyVHlwZSBQYXNzT3duUHRyPFQ+OjpsZWFrUHRyKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIFQqIHB0ciA9IG1fcHRyOworICAgICAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOworICAgICAg
ICBtX3B0ciA9IDA7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisjaWZkZWYgTE9PU0Vf
UEFTU19PV05fUFRSCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NPd25QdHI8
VD4mIFBhc3NPd25QdHI8VD46Om9wZXJhdG9yPShQdHJUeXBlIG9wdHIpCisgICAgeworICAgICAg
ICBQdHJUeXBlIHB0ciA9IG1fcHRyOwogICAgICAgICBtX3B0ciA9IG9wdHI7CiAgICAgICAgIEFT
U0VSVCghcHRyIHx8IG1fcHRyICE9IHB0cik7CiAgICAgICAgIGlmIChwdHIpCiAgICAgICAgICAg
ICBkZWxldGVPd25lZFB0cihwdHIpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQorI2Vu
ZGlmCiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NPd25QdHI8VD4mIFBh
c3NPd25QdHI8VD46Om9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRyPFQ+JiBvcHRyKQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzT3duUHRyPFQ+JiBQYXNzT3duUHRyPFQ+Ojpv
cGVyYXRvcj0oY29uc3QgUGFzc093blB0cjxUPiYgb3B0cikKICAgICB7Ci0gICAgICAgIFQqIHB0
ciA9IG1fcHRyOwotICAgICAgICBtX3B0ciA9IG9wdHIucmVsZWFzZSgpOworICAgICAgICBQdHJU
eXBlIHB0ciA9IG1fcHRyOworICAgICAgICBtX3B0ciA9IG9wdHIubGVha1B0cigpOwogICAgICAg
ICBBU1NFUlQoIXB0ciB8fCBtX3B0ciAhPSBwdHIpOwogICAgICAgICBpZiAocHRyKQogICAgICAg
ICAgICAgZGVsZXRlT3duZWRQdHIocHRyKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0K
IAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gaW5saW5l
IFBhc3NPd25QdHI8VD4mIFBhc3NPd25QdHI8VD46Om9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRy
PFU+JiBvcHRyKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+
IGlubGluZSBQYXNzT3duUHRyPFQ+JiBQYXNzT3duUHRyPFQ+OjpvcGVyYXRvcj0oY29uc3QgUGFz
c093blB0cjxVPiYgb3B0cikKICAgICB7Ci0gICAgICAgIFQqIHB0ciA9IG1fcHRyOwotICAgICAg
ICBtX3B0ciA9IG9wdHIucmVsZWFzZSgpOworICAgICAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOwor
ICAgICAgICBtX3B0ciA9IG9wdHIubGVha1B0cigpOwogICAgICAgICBBU1NFUlQoIXB0ciB8fCBt
X3B0ciAhPSBwdHIpOwogICAgICAgICBpZiAocHRyKQogICAgICAgICAgICAgZGVsZXRlT3duZWRQ
dHIocHRyKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBhc3NP
d25QdHI8VD4mIGEsIGNvbnN0IFBhc3NPd25QdHI8VT4mIGIpIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUGFzc093blB0
cjxUPiYgYSwgY29uc3QgUGFzc093blB0cjxVPiYgYikgCiAgICAgewogICAgICAgICByZXR1cm4g
YS5nZXQoKSA9PSBiLmdldCgpOyAKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQYXNzT3duUHRyPFQ+JiBh
LCBjb25zdCBPd25QdHI8VT4mIGIpIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUGFzc093blB0cjxUPiYgYSwgY29uc3Qg
T3duUHRyPFU+JiBiKSAKICAgICB7CiAgICAgICAgIHJldHVybiBhLmdldCgpID09IGIuZ2V0KCk7
IAogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPd25QdHI8VD4mIGEsIGNvbnN0IFBhc3NPd25QdHI8
VT4mIGIpIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgT3duUHRyPFQ+JiBhLCBjb25zdCBQYXNzT3duUHRyPFU+JiBiKSAK
ICAgICB7CiAgICAgICAgIHJldHVybiBhLmdldCgpID09IGIuZ2V0KCk7IAogICAgIH0KICAgICAK
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBQYXNzT3duUHRyPFQ+JiBhLCBVKiBiKSAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBhc3NPd25QdHI8
VD4mIGEsIFUqIGIpIAogICAgIHsKICAgICAgICAgcmV0dXJuIGEuZ2V0KCkgPT0gYjsgCiAgICAg
fQogICAgIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KFQqIGEsIGNvbnN0IFBhc3NPd25QdHI8VT4mIGIpIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oVCogYSwgY29u
c3QgUGFzc093blB0cjxVPiYgYikgCiAgICAgewogICAgICAgICByZXR1cm4gYSA9PSBiLmdldCgp
OyAKICAgICB9CiAgICAgCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUGFzc093blB0cjxUPiYgYSwgY29uc3QgUGFzc093
blB0cjxVPiYgYikgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBQYXNzT3duUHRyPFQ+JiBhLCBjb25zdCBQYXNzT3duUHRy
PFU+JiBiKSAKICAgICB7CiAgICAgICAgIHJldHVybiBhLmdldCgpICE9IGIuZ2V0KCk7IAogICAg
IH0KICAgICAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBQYXNzT3duUHRyPFQ+JiBhLCBjb25zdCBPd25QdHI8VT4mIGIp
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgUGFzc093blB0cjxUPiYgYSwgY29uc3QgT3duUHRyPFU+JiBiKSAKICAgICB7
CiAgICAgICAgIHJldHVybiBhLmdldCgpICE9IGIuZ2V0KCk7IAogICAgIH0KICAgICAKLSAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBPd25QdHI8VD4mIGEsIGNvbnN0IFBhc3NPd25QdHI8VT4mIGIpIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgT3du
UHRyPFQ+JiBhLCBjb25zdCBQYXNzT3duUHRyPFU+JiBiKSAKICAgICB7CiAgICAgICAgIHJldHVy
biBhLmdldCgpICE9IGIuZ2V0KCk7IAogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQYXNzT3duUHRy
PFQ+JiBhLCBVKiBiKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUGFzc093blB0cjxUPiYgYSwgVSogYikKICAgICB7CiAg
ICAgICAgIHJldHVybiBhLmdldCgpICE9IGI7IAogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShUKiBhLCBjb25z
dCBQYXNzT3duUHRyPFU+JiBiKSAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFQqIGEsIGNvbnN0IFBhc3NPd25QdHI8VT4mIGIpIAog
ICAgIHsKICAgICAgICAgcmV0dXJuIGEgIT0gYi5nZXQoKTsgCiAgICAgfQogCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBQYXNzT3duUHRyPFQ+IHN0YXRpY19w
b2ludGVyX2Nhc3QoY29uc3QgUGFzc093blB0cjxVPiYgcCkgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIFBhc3NPd25QdHI8VD4gYWRvcHRQdHIoVCogcHRyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFBhc3NPd25QdHI8VD4ocHRyKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgUGFzc093blB0cjxUPiBzdGF0aWNfcG9pbnRlcl9j
YXN0KGNvbnN0IFBhc3NPd25QdHI8VT4mIHApIAogICAgIHsKLSAgICAgICAgcmV0dXJuIFBhc3NP
d25QdHI8VD4oc3RhdGljX2Nhc3Q8VCo+KHAucmVsZWFzZSgpKSk7IAorICAgICAgICByZXR1cm4g
YWRvcHRQdHIoc3RhdGljX2Nhc3Q8VCo+KHAubGVha1B0cigpKSk7CiAgICAgfQogCi0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBQYXNzT3duUHRyPFQ+IGNvbnN0
X3BvaW50ZXJfY2FzdChjb25zdCBQYXNzT3duUHRyPFU+JiBwKSAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgUGFzc093blB0cjxUPiBjb25zdF9wb2ludGVyX2Nh
c3QoY29uc3QgUGFzc093blB0cjxVPiYgcCkgCiAgICAgewotICAgICAgICByZXR1cm4gUGFzc093
blB0cjxUPihjb25zdF9jYXN0PFQqPihwLnJlbGVhc2UoKSkpOyAKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKGNvbnN0X2Nhc3Q8VCo+KHAubGVha1B0cigpKSk7CiAgICAgfQogCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHIoY29uc3QgUGFzc093blB0cjxUPiYgcCkK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyKGNvbnN0IFBhc3NPd25Q
dHI8VD4mIHApCiAgICAgewogICAgICAgICByZXR1cm4gcC5nZXQoKTsKICAgICB9CkBAIC0xNzEs
NiArMjAwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcg
V1RGOjpQYXNzT3duUHRyOwordXNpbmcgV1RGOjphZG9wdFB0cjsKIHVzaW5nIFdURjo6Y29uc3Rf
cG9pbnRlcl9jYXN0OwogdXNpbmcgV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0OwogCkluZGV4OiBX
ZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gNjIxNDUpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDEwNiBAQAorMjAxMC0wNi0yOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFkb3B0UHRy
IGFuZCBsZWFrUHRyIGZ1bmN0aW9ucyBmb3IgT3duUHRyIGFuZCBQYXNzT3duUHRyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTMyMAorCisgICAgICAg
IE1hZGUgY29kZSBjaGFuZ2VzIHJlcXVpcmVkIGJlY2F1c2Ugb2YgdGhlIGNoYW5nZSB0byB0aGUg
cmVsZWFzZSBmdW5jdGlvbi4KKyAgICAgICAgVGhlIGVxdWl2YWxlbnQgdG8gdGhlIG9sZCByZWxl
YXNlIGZ1bmN0aW9uIGlzIG5vdyBuYW1lZCBsZWFrUHRyIGFuZAorICAgICAgICBzaG91bGQgYmUg
dXNlZCBzcGFyaW5nbHkuIFRoZSBuZXcgcmVsZWFzZSBmdW5jdGlvbiByZXR1cm5zIGEgUGFzc093
blB0ci4KKworICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEpOiBDaGFuZ2VkIGNvZGUgdG8g
Y2FsbAorICAgICAgICBsZWFrUHRyIGluc3RlYWQgb2YgcmVsZWFzZS4KKyAgICAgICAgKiBjc3Mv
Q1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6YWRkUHJvcGVydHkp
OiBEaXR0by4KKworICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFjZTo6Z2V0Rm9udERhdGEpOiBSZW1vdmVk
IHVubmVlZGVkIHR5cGUKKyAgICAgICAgY2FzdGluZy4gTm90IHN1cmUgd2h5IHRoaXMgY2hhbmdl
ZCB0aGUgdHlwZSB0byBGb250RGF0YSogYW5kIHRoZW4KKyAgICAgICAgY2FzdGVkIGJhY2sgdG8g
U2ltcGxlRm9udERhdGEqLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6TWVkaWFRdWVyeSk6IFJlbW92ZWQgY2FsbCB0byByZWxl
YXNlIG9uIGEKKyAgICAgICAgUGFzc093blB0ciwgc2luY2UgdGhlIGRhdGEgbWVtYmVyIGlzIG5v
dyBhbiBPd25QdHIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5Ojp+TWVkaWFRdWVyeSk6
IFJlbW92ZWQgbm93LXVubmVlZGVkIGRlbGV0ZS4KKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeS5o
OiBDaGFuZ2VkIG1fZXhwcmVzc2lvbnMgdG8gYmUgYW4gT3duUHRyLgorCisgICAgICAgICogaHRt
bC9IVE1MVG9rZW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY0hUTUxUb2tlbjo6QXRvbWlj
SFRNTFRva2VuKTogVXNlIGFzc2lnbm1lbnQgaW5zdGVhZAorICAgICAgICBvZiB0aGUgc2V0IGZ1
bmN0aW9uIHNpbmNlIHRoZXJlIGFyZSBubyByYXcgcG9pbnRlcnMgaW52b2x2ZWQuCisgICAgICAg
ICogbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJl
c291cmNlOjptYWtlUHVyZ2VhYmxlKTogRGl0dG8uCisKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc09y
aWdpblByZWZsaWdodFJlc3VsdENhY2hlOjphcHBlbmRFbnRyeSk6IFVzZQorICAgICAgICBsZWFr
UHRyIGluc3RlYWQgb2YgcmVsZWFzZSwgYW5kIGFsc28gYWRkIGNvZGUgdG8gZGVsZXRlIHRoZQor
ICAgICAgICBvbGQgdmFsdWUgaWYgdGhlIG9yaWdpbmFsIGFuZCBVUkwgYXJlIGFscmVhZHkgaW4g
dGhlIG1hcC4gSQorICAgICAgICBiZWxpZXZlIHRoaXMgZml4ZXMgYSBzdG9yYWdlIGxlYWsuCisK
KyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oOiBDaGFu
Z2UgdGhlIGFyZ3VtZW50CisgICAgICAgIHRvIGJlIFBhc3NPd25QdHIgaW5zdGVhZCBvZiBhIHJh
dyBwb2ludGVyLCBzaW5jZSB0aGlzIGZ1bmN0aW9uCisgICAgICAgIGRvZXMgdGFrZSBvd25lcnNo
aXAuCisKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6RG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyKToKKyAgICAgICAgVXNlIGFzc2lnbm1lbnQgaW5zdGVhZCBvZiB0aGUgc2V0IGZ1
bmN0aW9uIHNpbmNlIHRoZXJlIGFyZSBubyByYXcKKyAgICAgICAgcG9pbnRlcnMgaW52b2x2ZWQu
CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjpzdGFydEljb25Mb2FkZXIpOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvVGV4
dFJlc291cmNlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNv
ZGVyOjpkZWNvZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURlY29k
ZXI6OmZsdXNoKTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0RPTVRpbWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVRpbWVyOjpmaXJlZCk6IFVzZSBPd25QdHIgaW5zdGVhZCBvZiBhbiBl
eHBsaWNpdAorICAgICAgICBkZWxldGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVh
ZENvcGllci5oOiBSZW1vdmVkIGV4cGxpY2l0IGNvZGUgdGhhdCB0cmllZAorICAgICAgICB0byBj
b3B5IFBhc3NPd25QdHIgaW4gYSBjb21wbGljYXRlZCB3YXkuIEl0IGRpZCBub3RoaW5nIGRpZmZl
cmVudAorICAgICAgICBmcm9tIGp1c3QgcmV0dXJuaW5nIHRoZSBQYXNzT3duUHRyLiBUaGlzIHBy
ZXN1bWFibHkgd2FzIGRvbmUgYmVjYXVzZQorICAgICAgICBQYXNzUmVmUHRyIGhhcyBpc3N1ZXMg
d2hlbiBjb3BpZWQgY3Jvc3MtdGhyZWFkLCBidXQgdGhlcmUgYXJlIG5vCisgICAgICAgIHNpbWls
YXIgaXNzdWVzIGZvciBQYXNzT3duUHRyLiBTb21lb25lIHdpdGggbW9yZSBleHBlcmllbmNlIHRo
YW4gSQorICAgICAgICBtaWdodCBiZSBhYmxlIHRvIHJlbW92ZSB0aGUgc3BlY2lhbGl6YXRpb24g
YWx0b2dldGhlciwgYmVjYXVzZQorICAgICAgICBDcm9zc1RocmVhZENvcGllclBhc3NUaHJvdWdo
IGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGluIHRoaXMgY2FzZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFkb3B0
UHVyZ2VhYmxlQnVmZmVyKTogQ2hhbmdlZCBhcmd1bWVudCB0bworICAgICAgICBiZSBhIFBhc3NP
d25QdHIuCisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OnJlbGVhc2VQdXJnZWFibGVC
dWZmZXIpOiBDaGFuZ2VkIHJlc3VsdCB0bworICAgICAgICBiZSBhIFBhc3NPd25QdHIuCisgICAg
ICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmg6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgYWJvdmUu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOiBD
aGFuZ2VkIG9uZSBzaXRlCisgICAgICAgIHRvIHVzZSBhc3NpZ25tZW50IGluc3RlYWQgb2YgdGhl
IHNldCBmdW5jdGlvbiBzaW5jZSB0aGVyZSBhcmUgbm8gcmF3CisgICAgICAgIHBvaW50ZXJzIGlu
dm9sdmVkLiBDaGFuZ2VkIGFub3RoZXIgc2l0ZSB0byB1c2UgbGVha1B0ciBpbnN0ZWFkCisgICAg
ICAgIG9mIHJlbGVhc2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYXNrQW5kU3dhcENvbnRleHRG
b3JUZXh0R3JhZGllbnQpOiBVc2UgYXNzaWdubWVudAorICAgICAgICBpbnN0ZWFkIG9mIHRoZSBz
ZXQgZnVuY3Rpb24gc2luY2UgdGhlcmUgYXJlIG5vIHJhdyBwb2ludGVycyBpbnZvbHZlZC4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTdHlsZTo6c2V0Q29udGVudCk6IFVzZSBsZWFrUHRyIGluc3RlYWQgb2YgcmVs
ZWFzZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpOiBEaXR0
by4KKworICAgICAgICAqIHdvcmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmNvbm5l
Y3RUb1dvcmtlcik6CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgY2FsbCB0byByZWxlYXNlIGZ1
bmN0aW9uIGluIGEgY29kZSBwYXRoIHRoYXQgcGFzc2VzCisgICAgICAgIGEgUGFzc093blB0ciB0
byBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBQYXNzT3duUHRyLgorCisgICAgICAgICogd29ya2Vy
cy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OnNl
dFRpbWVvdXQpOiBDaGFuZ2VkIGFyZ3VtZW50IHR5cGUgdG8gUGFzc093blB0ci4KKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OnNldEludGVydmFsKTogRGl0dG8uCisgICAgICAgICog
d29ya2Vycy9Xb3JrZXJDb250ZXh0Lmg6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgYWJvdmUuCisKKyAg
ICAgICAgKiB3b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0TWVzc2FnZVRvV29ya2Vy
Q29udGV4dCk6CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgY2FsbCB0byByZWxlYXNlIGZ1bmN0
aW9uIGluIGNvZGUgcGF0aHMgdGhhdCBwYXNzCisgICAgICAgIGEgUGFzc093blB0ciB0byBhIGZ1
bmN0aW9uIHRoYXQgdGFrZXMgYSBQYXNzT3duUHRyLgorCiAyMDEwLTA2LTI5ICBLZW5uZXRoIFJ1
c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEds
YXprb3YuCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCShyZXZpc2lvbiA2MjE0NSkK
KysrIFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTg3LDggKzE4NywxMCBAQCBTaW1wbGVGb250RGF0YSogQ1NTRm9udEZhY2VTb3VyY2U6OmdldEZv
CiAgICAgICAgIGZvbnREYXRhLnNldChuZXcgU2ltcGxlRm9udERhdGEodGVtcERhdGEtPnBsYXRm
b3JtRGF0YSgpLCB0cnVlLCB0cnVlKSk7CiAgICAgfQogCi0gICAgbV9mb250RGF0YVRhYmxlLnNl
dChoYXNoS2V5LCBmb250RGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIGZvbnREYXRhLnJlbGVhc2Uo
KTsKKyAgICBTaW1wbGVGb250RGF0YSogZm9udERhdGFSYXdQdHIgPSBmb250RGF0YS5sZWFrUHRy
KCk7CisgICAgbV9mb250RGF0YVRhYmxlLnNldChoYXNoS2V5LCBmb250RGF0YVJhd1B0cik7CisK
KyAgICByZXR1cm4gZm9udERhdGFSYXdQdHI7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvY3NzL0NT
U1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2
aXNpb24gNjIxNDUpCisrKyBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zODcsOSArMzg3LDkgQEAgdm9pZCBDU1NQYXJzZXI6OmFkZFByb3BlcnR5KGludCBwcm9w
SWQsIAogICAgICAgICBpZiAobV9tYXhQYXJzZWRQcm9wZXJ0aWVzID4gVUlOVF9NQVggLyBzaXpl
b2YoQ1NTUHJvcGVydHkqKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9wYXJzZWRQ
cm9wZXJ0aWVzID0gc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHkqKj4oZmFzdFJlYWxsb2MobV9wYXJz
ZWRQcm9wZXJ0aWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fbWF4UGFyc2VkUHJvcGVydGllcyAqIHNpemVvZihDU1NQcm9wZXJ0eSop
KSk7CisgICAgICAgICAgICBtX21heFBhcnNlZFByb3BlcnRpZXMgKiBzaXplb2YoQ1NTUHJvcGVy
dHkqKSkpOwogICAgIH0KLSAgICBtX3BhcnNlZFByb3BlcnRpZXNbbV9udW1QYXJzZWRQcm9wZXJ0
aWVzKytdID0gcHJvcC5yZWxlYXNlKCk7CisgICAgbV9wYXJzZWRQcm9wZXJ0aWVzW21fbnVtUGFy
c2VkUHJvcGVydGllcysrXSA9IHByb3AubGVha1B0cigpOwogfQogCiB2b2lkIENTU1BhcnNlcjo6
cm9sbGJhY2tMYXN0UHJvcGVydGllcyhpbnQgbnVtKQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU2Vn
bWVudGVkRm9udEZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1NlZ21lbnRl
ZEZvbnRGYWNlLmNwcAkocmV2aXNpb24gNjIxNDUpCisrKyBXZWJDb3JlL2Nzcy9DU1NTZWdtZW50
ZWRGb250RmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCwxNSArMTEwLDE1IEBAIEZvbnRE
YXRhKiBDU1NTZWdtZW50ZWRGb250RmFjZTo6Z2V0Rm9udEQKICAgICAgICAgRm9udFRyYWl0c01h
c2sgdHJhaXRzTWFzayA9IG1fZm9udEZhY2VzW2ldLT50cmFpdHNNYXNrKCk7CiAgICAgICAgIGJv
b2wgc3ludGhldGljQm9sZCA9ICEodHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8IEZv
bnRXZWlnaHQ3MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFzaykp
ICYmIChkZXNpcmVkVHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8IEZvbnRXZWlnaHQ3
MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFzaykpOwogICAgICAg
ICBib29sIHN5bnRoZXRpY0l0YWxpYyA9ICEodHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01h
c2spICYmIChkZXNpcmVkVHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01hc2spOwotICAgICAg
ICBpZiAoY29uc3QgRm9udERhdGEqIGZhY2VGb250RGF0YSA9IG1fZm9udEZhY2VzW2ldLT5nZXRG
b250RGF0YShmb250RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykp
IHsKKyAgICAgICAgaWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmYWNlRm9udERhdGEgPSBtX2Zv
bnRGYWNlc1tpXS0+Z2V0Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzeW50aGV0aWNCb2xkLCBz
eW50aGV0aWNJdGFsaWMpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIWZhY2VGb250RGF0YS0+aXNT
ZWdtZW50ZWQoKSk7CiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8Q1NTRm9udEZhY2U6OlVuaWNv
ZGVSYW5nZT4mIHJhbmdlcyA9IG1fZm9udEZhY2VzW2ldLT5yYW5nZXMoKTsKICAgICAgICAgICAg
IHVuc2lnbmVkIG51bVJhbmdlcyA9IHJhbmdlcy5zaXplKCk7CiAgICAgICAgICAgICBpZiAoIW51
bVJhbmdlcykKLSAgICAgICAgICAgICAgICBmb250RGF0YS0+YXBwZW5kUmFuZ2UoRm9udERhdGFS
YW5nZSgwLCAweDdGRkZGRkZGLCBzdGF0aWNfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KGZh
Y2VGb250RGF0YSkpKTsKKyAgICAgICAgICAgICAgICBmb250RGF0YS0+YXBwZW5kUmFuZ2UoRm9u
dERhdGFSYW5nZSgwLCAweDdGRkZGRkZGLCBmYWNlRm9udERhdGEpKTsKICAgICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBudW1SYW5nZXM7
ICsraikKLSAgICAgICAgICAgICAgICAgICAgZm9udERhdGEtPmFwcGVuZFJhbmdlKEZvbnREYXRh
UmFuZ2UocmFuZ2VzW2pdLmZyb20oKSwgcmFuZ2VzW2pdLnRvKCksIHN0YXRpY19jYXN0PGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4oZmFjZUZvbnREYXRhKSkpOworICAgICAgICAgICAgICAgICAgICBm
b250RGF0YS0+YXBwZW5kUmFuZ2UoRm9udERhdGFSYW5nZShyYW5nZXNbal0uZnJvbSgpLCByYW5n
ZXNbal0udG8oKSwgZmFjZUZvbnREYXRhKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CkluZGV4OiBXZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2Nzcy9NZWRpYVF1ZXJ5LmNwcAkocmV2aXNpb24gNjIxNDUpCisrKyBXZWJDb3JlL2Nzcy9N
ZWRpYVF1ZXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBzdGF0aWMgYm9v
bCBleHByZXNzaW9uQ29tcGFyZShjb25zdCBNZWRpCiBNZWRpYVF1ZXJ5OjpNZWRpYVF1ZXJ5KFJl
c3RyaWN0b3IgciwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIFBhc3NPd25QdHI8VmVjdG9yPE1l
ZGlhUXVlcnlFeHAqPiA+IGV4cHJzKQogICAgIDogbV9yZXN0cmljdG9yKHIpCiAgICAgLCBtX21l
ZGlhVHlwZShtZWRpYVR5cGUubG93ZXIoKSkKLSAgICAsIG1fZXhwcmVzc2lvbnMoZXhwcnMucmVs
ZWFzZSgpKQorICAgICwgbV9leHByZXNzaW9ucyhleHBycykKICAgICAsIG1faWdub3JlZChmYWxz
ZSkKIHsKICAgICBpZiAoIW1fZXhwcmVzc2lvbnMpIHsKQEAgLTEwOCw3ICsxMDgsNiBAQCBNZWRp
YVF1ZXJ5OjpNZWRpYVF1ZXJ5KFJlc3RyaWN0b3IgciwgY29uCiBNZWRpYVF1ZXJ5Ojp+TWVkaWFR
dWVyeSgpCiB7CiAgICAgZGVsZXRlQWxsVmFsdWVzKCptX2V4cHJlc3Npb25zKTsKLSAgICBkZWxl
dGUgbV9leHByZXNzaW9uczsKIH0KIAogLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20v
I2NvbXBhcmUtbWVkaWEtcXVlcmllcwpJbmRleDogV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL01lZGlhUXVlcnkuaAkocmV2aXNpb24gNjIxNDUpCisr
KyBXZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0Mywx
MSBAQCBwdWJsaWM6CiAgICAgICAgIE9ubHksIE5vdCwgTm9uZQogICAgIH07CiAKLSAgICBNZWRp
YVF1ZXJ5KFJlc3RyaWN0b3IgciwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIFBhc3NPd25QdHI8
VmVjdG9yPE1lZGlhUXVlcnlFeHAqPiA+IGV4cHJzKTsKKyAgICBNZWRpYVF1ZXJ5KFJlc3RyaWN0
b3IsIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlLCBQYXNzT3duUHRyPFZlY3RvcjxNZWRpYVF1ZXJ5
RXhwKj4gPiBleHBycyk7CiAgICAgfk1lZGlhUXVlcnkoKTsKIAogICAgIFJlc3RyaWN0b3IgcmVz
dHJpY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJpY3RvcjsgfQotICAgIGNvbnN0IFZlY3Rv
cjxNZWRpYVF1ZXJ5RXhwKj4qIGV4cHJlc3Npb25zKCkgY29uc3QgeyByZXR1cm4gbV9leHByZXNz
aW9uczsgfQorICAgIGNvbnN0IFZlY3RvcjxNZWRpYVF1ZXJ5RXhwKj4qIGV4cHJlc3Npb25zKCkg
Y29uc3QgeyByZXR1cm4gbV9leHByZXNzaW9ucy5nZXQoKTsgfQogICAgIFN0cmluZyBtZWRpYVR5
cGUoKSBjb25zdCB7IHJldHVybiBtX21lZGlhVHlwZTsgfQogICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBNZWRpYVF1ZXJ5JiBvdGhlcikgY29uc3Q7CiAgICAgU3RyaW5nIGNzc1RleHQoKSBjb25z
dDsKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogIHByaXZhdGU6CiAgICAgUmVzdHJpY3RvciBt
X3Jlc3RyaWN0b3I7CiAgICAgU3RyaW5nIG1fbWVkaWFUeXBlOwotICAgIFZlY3RvcjxNZWRpYVF1
ZXJ5RXhwKj4qIG1fZXhwcmVzc2lvbnM7CisgICAgT3duUHRyPFZlY3RvcjxNZWRpYVF1ZXJ5RXhw
Kj4gPiBtX2V4cHJlc3Npb25zOwogICAgIGJvb2wgbV9pZ25vcmVkOwogICAgIFN0cmluZyBtX3Nl
cmlhbGl6YXRpb25DYWNoZTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUb2tlbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVG9rZW4uaAkocmV2aXNpb24gNjIxNDUpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTFRva2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yOTEsNyArMjkyLDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSFRNTFRva2VuOjpET0NUWVBFOgogICAgICAgICAg
ICAgbV9uYW1lID0gQXRvbWljU3RyaW5nKHRva2VuLm5hbWUoKS5kYXRhKCksIHRva2VuLm5hbWUo
KS5zaXplKCkpOwotICAgICAgICAgICAgbV9kb2N0eXBlRGF0YS5zZXQodG9rZW4ubV9kb2N0eXBl
RGF0YS5yZWxlYXNlKCkpOworICAgICAgICAgICAgbV9kb2N0eXBlRGF0YSA9IHRva2VuLm1fZG9j
dHlwZURhdGEucmVsZWFzZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSFRN
TFRva2VuOjpFbmRPZkZpbGU6CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZFJlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNo
ZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDYyMTQ1KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
UmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjcsOSArNDY3LDkgQEAgYm9vbCBDYWNo
ZWRSZXNvdXJjZTo6bWFrZVB1cmdlYWJsZShib29sIAogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKICAgICAgICAgaWYgKG1fZGF0YS0+aGFzUHVyZ2VhYmxlQnVmZmVyKCkpIHsK
LSAgICAgICAgICAgIG1fcHVyZ2VhYmxlRGF0YS5zZXQobV9kYXRhLT5yZWxlYXNlUHVyZ2VhYmxl
QnVmZmVyKCkpOworICAgICAgICAgICAgbV9wdXJnZWFibGVEYXRhID0gbV9kYXRhLT5yZWxlYXNl
UHVyZ2VhYmxlQnVmZmVyKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3B1cmdl
YWJsZURhdGEuc2V0KFB1cmdlYWJsZUJ1ZmZlcjo6Y3JlYXRlKG1fZGF0YS0+ZGF0YSgpLCBtX2Rh
dGEtPnNpemUoKSkpOworICAgICAgICAgICAgbV9wdXJnZWFibGVEYXRhID0gUHVyZ2VhYmxlQnVm
ZmVyOjpjcmVhdGUobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKTsKICAgICAgICAgICAg
IGlmICghbV9wdXJnZWFibGVEYXRhKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRD
YWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGln
aHRSZXN1bHRDYWNoZS5jcHAJKHJldmlzaW9uIDYyMTQ1KQorKysgV2ViQ29yZS9sb2FkZXIvQ3Jv
c3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYg
KzM1LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1c2luZyBuYW1lc3BhY2Ugc3RkOwor
CiAvLyBUaGVzZSB2YWx1ZXMgYXJlIGF0IHRoZSBkaXNjcmV0aW9uIG9mIHRoZSB1c2VyIGFnZW50
Lgogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRQcmVmbGlnaHRDYWNoZVRpbWVvdXRTZWNv
bmRzID0gNTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhQcmVmbGlnaHRDYWNoZVRpbWVvdXRT
ZWNvbmRzID0gNjAwOyAvLyBTaG91bGQgYmUgc2hvcnQgZW5vdWdoIHRvIG1pbmltaXplIHRoZSBy
aXNrIG9mIHVzaW5nIGEgcG9pc29uZWQgY2FjaGUgYWZ0ZXIgc3dpdGNoaW5nIHRvIGEgc2VjdXJl
IG5ldHdvcmsuCkBAIC0xNDMsMTAgKzE0NSwxNiBAQCBDcm9zc09yaWdpblByZWZsaWdodFJlc3Vs
dENhY2hlJiBDcm9zc09yCiAgICAgcmV0dXJuIGNhY2hlOwogfQogCi12b2lkIENyb3NzT3JpZ2lu
UHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OmFwcGVuZEVudHJ5KGNvbnN0IFN0cmluZyYgb3JpZ2luLCBj
b25zdCBLVVJMJiB1cmwsIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtKiBwcmVm
bGlnaHRSZXN1bHQpCit2b2lkIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OmFwcGVu
ZEVudHJ5KGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBLVVJMJiB1cmwsIFBhc3NPd25QdHI8
Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0+IHByZWZsaWdodFJlc3VsdCkKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG1fcHJlZmxpZ2h0SGFzaE1hcC5zZXQo
c3RkOjptYWtlX3BhaXIob3JpZ2luLCB1cmwpLCBwcmVmbGlnaHRSZXN1bHQpOworICAgIENyb3Nz
T3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtKiByZXN1bHRQdHIgPSBwcmVmbGlnaHRSZXN1
bHQubGVha1B0cigpOworICAgIHBhaXI8Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRIYXNoTWFw
OjppdGVyYXRvciwgYm9vbD4gYWRkUmVzdWx0ID0gbV9wcmVmbGlnaHRIYXNoTWFwLmFkZChtYWtl
X3BhaXIob3JpZ2luLCB1cmwpLCByZXN1bHRQdHIpOworICAgIGlmICghYWRkUmVzdWx0LnNlY29u
ZCkgeworICAgICAgICAvLyBEZWxldGUgdGhlIG9sZCB2YWx1ZSBiZWZvcmUgcmVwbGFjaW5nIHdp
dGggdGhlIG5ldyBvbmUuCisgICAgICAgIGRlbGV0ZSBhZGRSZXN1bHQuZmlyc3QtPnNlY29uZDsK
KyAgICAgICAgYWRkUmVzdWx0LmZpcnN0LT5zZWNvbmQgPSByZXN1bHRQdHI7CisgICAgfQogfQog
CiBib29sIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OmNhblNraXBQcmVmbGlnaHQo
Y29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IEtVUkwmIHVybCwgYm9vbCBpbmNsdWRlQ3JlZGVu
dGlhbHMsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBIVFRQSGVhZGVyTWFwJiByZXF1ZXN0
SGVhZGVycykKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdo
dFJlc3VsdENhY2hlLmgJKHJldmlzaW9uIDYyMTQ1KQorKysgV2ViQ29yZS9sb2FkZXIvQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3
IEBACiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY2LDcgKzY3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0
Q2FjaGUmIHNoYXJlZCgpOwogCi0gICAgICAgIHZvaWQgYXBwZW5kRW50cnkoY29uc3QgU3RyaW5n
JiBvcmlnaW4sIGNvbnN0IEtVUkwmLCBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRl
bSopOworICAgICAgICB2b2lkIGFwcGVuZEVudHJ5KGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25z
dCBLVVJMJiwgUGFzc093blB0cjxDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbT4p
OwogICAgICAgICBib29sIGNhblNraXBQcmVmbGlnaHQoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNv
bnN0IEtVUkwmLCBib29sIGluY2x1ZGVDcmVkZW50aWFscywgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IGNvbnN0IEhUVFBIZWFkZXJNYXAmIHJlcXVlc3RIZWFkZXJzKTsKIAogICAgICAgICB2b2lkIGVt
cHR5KCk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5j
cHAJKHJldmlzaW9uIDYyMTQ1KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkCiAgICAgaWYgKCFtX29wdGlvbnMuZm9yY2VQcmVm
bGlnaHQgJiYgaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY3Jvc3NPcmlnaW5SZXF1
ZXN0LT5odHRwTWV0aG9kKCksIGNyb3NzT3JpZ2luUmVxdWVzdC0+aHR0cEhlYWRlckZpZWxkcygp
KSkKICAgICAgICAgbWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdCgqY3Jvc3NPcmln
aW5SZXF1ZXN0KTsKICAgICBlbHNlIHsKLSAgICAgICAgbV9hY3R1YWxSZXF1ZXN0LnNldChjcm9z
c09yaWdpblJlcXVlc3QucmVsZWFzZSgpKTsKKyAgICAgICAgbV9hY3R1YWxSZXF1ZXN0ID0gY3Jv
c3NPcmlnaW5SZXF1ZXN0LnJlbGVhc2UoKTsKIAogICAgICAgICBpZiAoQ3Jvc3NPcmlnaW5QcmVm
bGlnaHRSZXN1bHRDYWNoZTo6c2hhcmVkKCkuY2FuU2tpcFByZWZsaWdodChkb2N1bWVudC0+c2Vj
dXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbV9hY3R1YWxSZXF1ZXN0LT51cmwoKSwgbV9vcHRp
b25zLmFsbG93Q3JlZGVudGlhbHMsIG1fYWN0dWFsUmVxdWVzdC0+aHR0cE1ldGhvZCgpLCBtX2Fj
dHVhbFJlcXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKSkpCiAgICAgICAgICAgICBwcmVmbGlnaHRT
dWNjZXNzKCk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA2MjE0NSkKKysr
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAzLDcg
KzgwMyw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN0YXJ0SWNvbkxvYWRlcigpCiAKICAgICAvLyBU
aGlzIGlzIGVpdGhlciBhIHJlbG9hZCBvciB0aGUgaWNvbiBkYXRhYmFzZSBzYWlkICJ5ZXMsIGxv
YWQgdGhlIGljb24iLCBzbyBraWNrIG9mZiB0aGUgbG9hZCEKICAgICBpZiAoIW1faWNvbkxvYWRl
cikKLSAgICAgICAgbV9pY29uTG9hZGVyLnNldChJY29uTG9hZGVyOjpjcmVhdGUobV9mcmFtZSku
cmVsZWFzZSgpKTsKKyAgICAgICAgbV9pY29uTG9hZGVyID0gSWNvbkxvYWRlcjo6Y3JlYXRlKG1f
ZnJhbWUpOwogICAgICAgICAKICAgICBtX2ljb25Mb2FkZXItPnN0YXJ0TG9hZGluZygpOwogfQpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDYyMTQ1
KQorKysgV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgxMiw3ICs4MTIsNyBAQCBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2Rl
KGNvbnN0CiAgICAgQVNTRVJUKG1fZW5jb2RpbmcuaXNWYWxpZCgpKTsKIAogICAgIGlmICghbV9j
b2RlYykKLSAgICAgICAgbV9jb2RlYy5zZXQobmV3VGV4dENvZGVjKG1fZW5jb2RpbmcpLnJlbGVh
c2UoKSk7CisgICAgICAgIG1fY29kZWMgPSBuZXdUZXh0Q29kZWMobV9lbmNvZGluZyk7CiAKICAg
ICBpZiAobV9idWZmZXIuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9jb2RlYy0+ZGVjb2Rl
KGRhdGEgKyBsZW5ndGhPZkJPTSwgbGVuIC0gbGVuZ3RoT2ZCT00sIGZhbHNlLCBtX2NvbnRlbnRU
eXBlID09IFhNTCwgbV9zYXdFcnJvcik7CkBAIC04NDIsNyArODQyLDcgQEAgU3RyaW5nIFRleHRS
ZXNvdXJjZURlY29kZXI6OmZsdXNoKCkKICAgICB9CiAKICAgICBpZiAoIW1fY29kZWMpCi0gICAg
ICAgIG1fY29kZWMuc2V0KG5ld1RleHRDb2RlYyhtX2VuY29kaW5nKS5yZWxlYXNlKCkpOworICAg
ICAgICBtX2NvZGVjID0gbmV3VGV4dENvZGVjKG1fZW5jb2RpbmcpOwogCiAgICAgU3RyaW5nIHJl
c3VsdCA9IG1fY29kZWMtPmRlY29kZShtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLnNpemUoKSwg
dHJ1ZSwgbV9jb250ZW50VHlwZSA9PSBYTUwgJiYgIW1fdXNlTGVuaWVudFhNTERlY29kaW5nLCBt
X3Nhd0Vycm9yKTsKICAgICBtX2J1ZmZlci5jbGVhcigpOwpJbmRleDogV2ViQ29yZS9wYWdlL0RP
TVRpbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NVGltZXIuY3BwCShyZXZp
c2lvbiA2MjE0NSkKKysrIFdlYkNvcmUvcGFnZS9ET01UaW1lci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzNiwxNyArMTM2LDE4IEBAIHZvaWQgRE9NVGltZXI6OmZpcmVkKCkKICAgICB9CiAKICAg
ICAvLyBEZWxldGUgdGltZXIgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9uIGZvciBvbmUtc2hv
dCB0aW1lcnMuCi0gICAgU2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24gPSBtX2FjdGlvbi5yZWxlYXNl
KCk7CisgICAgT3duUHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gbV9hY3Rpb24ucmVsZWFz
ZSgpOwogCiAgICAgLy8gTm8gYWNjZXNzIHRvIG1lbWJlciB2YXJpYWJsZXMgYWZ0ZXIgdGhpcyBw
b2ludC4KICAgICBkZWxldGUgdGhpczsKIAogICAgIGFjdGlvbi0+ZXhlY3V0ZShjb250ZXh0KTsK
KwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQq
IHRpbWVsaW5lQWdlbnQgPSBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpyZXRyaWV2ZShjb250ZXh0
KSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkRmlyZVRpbWVyKCk7CiAjZW5kaWYKLSAgICBk
ZWxldGUgYWN0aW9uOworCiAgICAgdGltZXJOZXN0aW5nTGV2ZWwgPSAwOwogfQogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCShyZXZpc2lvbiA2MjE0NSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODEsOSAr
ODEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgUGFzc093blB0cjxUPiA+
IHsKICAgICAgICAgdHlwZWRlZiBQYXNzT3duUHRyPFQ+IFR5cGU7Ci0gICAgICAgIHN0YXRpYyBU
eXBlIGNvcHkoY29uc3QgUGFzc093blB0cjxUPiYgb3duUHRyKQorICAgICAgICBzdGF0aWMgVHlw
ZSBjb3B5KFR5cGUgb3duUHRyKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUGFzc093
blB0cjxUPihzdGF0aWNfY2FzdDxUKj4ob3duUHRyLnJlbGVhc2UoKSkpOworICAgICAgICAgICAg
cmV0dXJuIG93blB0cjsKICAgICAgICAgfQogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vU2hhcmVkQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1NoYXJl
ZEJ1ZmZlci5jcHAJKHJldmlzaW9uIDYyMTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCiAKICNpbmNsdWRlICJQdXJnZWFibGVCdWZmZXIuaCIKKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC04NiwxMSArODcs
MTEgQEAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6YQogICAgIHJldHVy
biBidWZmZXIucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVk
QnVmZmVyOjphZG9wdFB1cmdlYWJsZUJ1ZmZlcihQdXJnZWFibGVCdWZmZXIqIHB1cmdlYWJsZUJ1
ZmZlcikgCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjphZG9wdFB1cmdl
YWJsZUJ1ZmZlcihQYXNzT3duUHRyPFB1cmdlYWJsZUJ1ZmZlcj4gcHVyZ2VhYmxlQnVmZmVyKSAK
IHsgCiAgICAgQVNTRVJUKCFwdXJnZWFibGVCdWZmZXItPmlzUHVyZ2VhYmxlKCkpOwogICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IGNyZWF0ZSgpOwotICAgIGJ1ZmZlci0+bV9wdXJn
ZWFibGVCdWZmZXIuc2V0KHB1cmdlYWJsZUJ1ZmZlcik7CisgICAgYnVmZmVyLT5tX3B1cmdlYWJs
ZUJ1ZmZlciA9IHB1cmdlYWJsZUJ1ZmZlcjsKICAgICByZXR1cm4gYnVmZmVyLnJlbGVhc2UoKTsK
IH0KIApAQCAtMTg0LDcgKzE4NSw3IEBAIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRC
dWZmZXI6OmMKICAgICByZXR1cm4gY2xvbmU7CiB9CiAKLVB1cmdlYWJsZUJ1ZmZlciogU2hhcmVk
QnVmZmVyOjpyZWxlYXNlUHVyZ2VhYmxlQnVmZmVyKCkKK1Bhc3NPd25QdHI8UHVyZ2VhYmxlQnVm
ZmVyPiBTaGFyZWRCdWZmZXI6OnJlbGVhc2VQdXJnZWFibGVCdWZmZXIoKQogeyAKICAgICBBU1NF
UlQoaGFzT25lUmVmKCkpOyAKICAgICByZXR1cm4gbV9wdXJnZWFibGVCdWZmZXIucmVsZWFzZSgp
OyAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkocmV2aXNpb24gNjIxNDUpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3
IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBUaGUgYnVmZmVyIG11c3QgYmUgaW4gbm9uLXB1cmdl
YWJsZSBzdGF0ZSBiZWZvcmUgYWRvcHRlZCB0byBhIFNoYXJlZEJ1ZmZlci4gCiAgICAgLy8gSXQg
d2lsbCBzdGF5IHRoYXQgd2F5IHVudGlsIHJlbGVhc2VkLgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gYWRvcHRQdXJnZWFibGVCdWZmZXIoUHVyZ2VhYmxlQnVmZmVyKiBidWZm
ZXIpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYWRvcHRQdXJnZWFibGVC
dWZmZXIoUGFzc093blB0cjxQdXJnZWFibGVCdWZmZXI+KTsKICAgICAKICAgICB+U2hhcmVkQnVm
ZmVyKCk7CiAgICAgCkBAIC05OCw3ICs5OCw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1B1cmdl
YWJsZUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fcHVyZ2VhYmxlQnVmZmVyLmdldCgpOyB9CiAK
ICAgICAvLyBFbnN1cmUgdGhpcyBidWZmZXIgaGFzIG5vIG90aGVyIGNsaWVudHMgYmVmb3JlIGNh
bGxpbmcgdGhpcy4KLSAgICBQdXJnZWFibGVCdWZmZXIqIHJlbGVhc2VQdXJnZWFibGVCdWZmZXIo
KTsKKyAgICBQYXNzT3duUHRyPFB1cmdlYWJsZUJ1ZmZlcj4gcmVsZWFzZVB1cmdlYWJsZUJ1ZmZl
cigpOwogCiAgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgYnl0ZXMgYWZ0
ZXIgInBvc2l0aW9uIi4gImRhdGEiCiAgICAgLy8gcG9pbnRzIHRvIHRoZSBmaXJzdCBieXRlLgpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAko
cmV2aXNpb24gNjIxNDUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOSwxMSArMjE5LDEzIEBAIGJvb2wgUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3UKICAgICBzb3VyY2VHcmFwaGljQ29udGV4dC0+
dHJhbnNsYXRlKC1jbGlwcGVkU291cmNlUmVjdC54KCksIC1jbGlwcGVkU291cmNlUmVjdC55KCkp
OwogICAgIHNvdXJjZUdyYXBoaWNDb250ZXh0LT5zY2FsZShzY2FsZSk7CiAgICAgc291cmNlR3Jh
cGhpY0NvbnRleHQtPmNsZWFyUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBwYWludFJlY3Qu
c2l6ZSgpKSk7Ci0gICAgZmlsdGVyRGF0YS0+c291cmNlR3JhcGhpY0J1ZmZlci5zZXQoc291cmNl
R3JhcGhpYy5yZWxlYXNlKCkpOworICAgIGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNCdWZmZXIg
PSBzb3VyY2VHcmFwaGljLnJlbGVhc2UoKTsKICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQg
PSBjb250ZXh0OwogCiAgICAgY29udGV4dCA9IHNvdXJjZUdyYXBoaWNDb250ZXh0OwotICAgIG1f
ZmlsdGVyLnNldChvYmplY3QsIGZpbHRlckRhdGEucmVsZWFzZSgpKTsKKworICAgIEFTU0VSVCgh
bV9maWx0ZXIuY29udGFpbnMob2JqZWN0KSk7CisgICAgbV9maWx0ZXIuc2V0KG9iamVjdCwgZmls
dGVyRGF0YS5sZWFrUHRyKCkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAkocmV2aXNpb24g
NjIxNDUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBj
cmVhdGVNYXNrQW5kU3dhcENvbnQKICAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLW1h
c2tBYnNvbHV0ZUJvdW5kaW5nQm94LngoKSwgLW1hc2tBYnNvbHV0ZUJvdW5kaW5nQm94LnkoKSk7
CiAgICAgbWFza0ltYWdlQ29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7CiAKLSAgICBpbWFn
ZUJ1ZmZlci5zZXQobWFza0ltYWdlLnJlbGVhc2UoKSk7CisgICAgaW1hZ2VCdWZmZXIgPSBtYXNr
SW1hZ2UucmVsZWFzZSgpOwogICAgIHNhdmVkQ29udGV4dCA9IGNvbnRleHQ7CiAgICAgY29udGV4
dCA9IG1hc2tJbWFnZUNvbnRleHQ7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5jcHAJKHJldmlzaW9uIDYyMTQ1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODksNyArNTg5LDcgQEAgdm9pZCBS
ZW5kZXJTdHlsZTo6c2V0Q29udGVudChQYXNzUmVmUHRyPAogICAgIENvbnRlbnREYXRhKiBuZXdD
b250ZW50RGF0YTsKICAgICBpZiAocmV1c2VDb250ZW50ICYmIGNvbnRlbnQpIHsKICAgICAgICAg
Y29udGVudC0+Y2xlYXIoKTsKLSAgICAgICAgbmV3Q29udGVudERhdGEgPSBjb250ZW50LnJlbGVh
c2UoKTsKKyAgICAgICAgbmV3Q29udGVudERhdGEgPSBjb250ZW50LmxlYWtQdHIoKTsKICAgICB9
IGVsc2UKICAgICAgICAgbmV3Q29udGVudERhdGEgPSBuZXcgQ29udGVudERhdGE7CiAKQEAgLTYy
NSw3ICs2MjUsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRDb250ZW50KFBhc3NSZWZQdHI8CiAg
ICAgQ29udGVudERhdGEqIG5ld0NvbnRlbnREYXRhID0gMDsKICAgICBpZiAocmV1c2VDb250ZW50
ICYmIGNvbnRlbnQpIHsKICAgICAgICAgY29udGVudC0+Y2xlYXIoKTsKLSAgICAgICAgbmV3Q29u
dGVudERhdGEgPSBjb250ZW50LnJlbGVhc2UoKTsKKyAgICAgICAgbmV3Q29udGVudERhdGEgPSBj
b250ZW50LmxlYWtQdHIoKTsKICAgICB9IGVsc2UKICAgICAgICAgbmV3Q29udGVudERhdGEgPSBu
ZXcgQ29udGVudERhdGE7CiAKQEAgLTY1MSw3ICs2NTEsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpz
ZXRDb250ZW50KENvdW50ZXJDb250CiAgICAgQ29udGVudERhdGEqIG5ld0NvbnRlbnREYXRhID0g
MDsKICAgICBpZiAocmV1c2VDb250ZW50ICYmIGNvbnRlbnQpIHsKICAgICAgICAgY29udGVudC0+
Y2xlYXIoKTsKLSAgICAgICAgbmV3Q29udGVudERhdGEgPSBjb250ZW50LnJlbGVhc2UoKTsKKyAg
ICAgICAgbmV3Q29udGVudERhdGEgPSBjb250ZW50LmxlYWtQdHIoKTsKICAgICB9IGVsc2UKICAg
ICAgICAgbmV3Q29udGVudERhdGEgPSBuZXcgQ29udGVudERhdGE7CiAKQEAgLTczNSw3ICs3MzUs
NyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3coU2hhZG93RGF0CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBzaGFkb3dEYXRhLT5zZXROZXh0KHJhcmVEYXRhLT5tX2JveFNo
YWRvdy5yZWxlYXNlKCkpOworICAgIHNoYWRvd0RhdGEtPnNldE5leHQocmFyZURhdGEtPm1fYm94
U2hhZG93LmxlYWtQdHIoKSk7CiAgICAgcmFyZURhdGEtPm1fYm94U2hhZG93LnNldChzaGFkb3dE
YXRhKTsKIH0KIApJbmRleDogV2ViQ29yZS93b3JrZXJzL0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBv
c2l0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdv
cmtlclJlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiA2MjE0NSkKKysrIFdlYkNvcmUvd29ya2Vycy9E
ZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Nyw3
ICszODcsNyBAQCB2b2lkIERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpjb25uCiAgICAg
aWYgKHByb3h5LT50aHJlYWQoKSkKICAgICAgICAgcHJveHktPnRocmVhZCgpLT5ydW5Mb29wKCku
cG9zdFRhc2soU2hhcmVkV29ya2VyQ29ubmVjdFRhc2s6OmNyZWF0ZShwb3J0KSk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXI+IGxvYWRlciA9IGFk
b3B0UmVmKG5ldyBTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXIod29ya2VyLCBwb3J0LnJlbGVhc2Uo
KSwgcHJveHkucmVsZWFzZSgpKSk7CisgICAgICAgIFJlZlB0cjxTaGFyZWRXb3JrZXJTY3JpcHRM
b2FkZXI+IGxvYWRlciA9IGFkb3B0UmVmKG5ldyBTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXIod29y
a2VyLCBwb3J0LCBwcm94eS5yZWxlYXNlKCkpKTsKICAgICAgICAgbG9hZGVyLT5sb2FkKHVybCk7
CiAgICAgfQogfQpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAkocmV2aXNpb24gNjIx
NDUpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIFdvcmtlckNvbnRleHQ6OnBvc3RUYXNrKFBhc3NPd25Q
dHI8CiAgICAgdGhyZWFkKCktPnJ1bkxvb3AoKS5wb3N0VGFzayh0YXNrKTsKIH0KIAotaW50IFdv
cmtlckNvbnRleHQ6OnNldFRpbWVvdXQoU2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24sIGludCB0aW1l
b3V0KQoraW50IFdvcmtlckNvbnRleHQ6OnNldFRpbWVvdXQoUGFzc093blB0cjxTY2hlZHVsZWRB
Y3Rpb24+IGFjdGlvbiwgaW50IHRpbWVvdXQpCiB7CiAgICAgcmV0dXJuIERPTVRpbWVyOjppbnN0
YWxsKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYWN0aW9uLCB0aW1lb3V0LCB0cnVlKTsKIH0K
QEAgLTE5Miw3ICsxOTIsNyBAQCB2b2lkIFdvcmtlckNvbnRleHQ6OmNsZWFyVGltZW91dChpbnQg
dGltCiAgICAgRE9NVGltZXI6OnJlbW92ZUJ5SWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0
aW1lb3V0SWQpOwogfQogCi1pbnQgV29ya2VyQ29udGV4dDo6c2V0SW50ZXJ2YWwoU2NoZWR1bGVk
QWN0aW9uKiBhY3Rpb24sIGludCB0aW1lb3V0KQoraW50IFdvcmtlckNvbnRleHQ6OnNldEludGVy
dmFsKFBhc3NPd25QdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24sIGludCB0aW1lb3V0KQogewog
ICAgIHJldHVybiBET01UaW1lcjo6aW5zdGFsbChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGFj
dGlvbiwgdGltZW91dCwgZmFsc2UpOwogfQpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCShy
ZXZpc2lvbiA2MjE0NSkKKysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTg5LDkgKzg5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBX
b3JrZXJOYXZpZ2F0b3IqIG5hdmlnYXRvcigpIGNvbnN0OwogCiAgICAgICAgIC8vIFRpbWVycwot
ICAgICAgICBpbnQgc2V0VGltZW91dChTY2hlZHVsZWRBY3Rpb24qLCBpbnQgdGltZW91dCk7Cisg
ICAgICAgIGludCBzZXRUaW1lb3V0KFBhc3NPd25QdHI8U2NoZWR1bGVkQWN0aW9uPiwgaW50IHRp
bWVvdXQpOwogICAgICAgICB2b2lkIGNsZWFyVGltZW91dChpbnQgdGltZW91dElkKTsKLSAgICAg
ICAgaW50IHNldEludGVydmFsKFNjaGVkdWxlZEFjdGlvbiosIGludCB0aW1lb3V0KTsKKyAgICAg
ICAgaW50IHNldEludGVydmFsKFBhc3NPd25QdHI8U2NoZWR1bGVkQWN0aW9uPiwgaW50IHRpbWVv
dXQpOwogICAgICAgICB2b2lkIGNsZWFySW50ZXJ2YWwoaW50IHRpbWVvdXRJZCk7CiAKICAgICAg
ICAgLy8gU2NyaXB0RXhlY3V0aW9uQ29udGV4dApJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtl
ck1lc3NhZ2luZ1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2Vy
TWVzc2FnaW5nUHJveHkuY3BwCShyZXZpc2lvbiA2MjE0NSkKKysrIFdlYkNvcmUvd29ya2Vycy9X
b3JrZXJNZXNzYWdpbmdQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Myw3ICsyNDMsNyBA
QCB2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5OjpzdGFydFdvcmtlckNvCiAKIHZvaWQgV29ya2Vy
TWVzc2FnaW5nUHJveHk6OnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVs
QXJyYXk+IGNoYW5uZWxzKQogewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRh
c2soTWVzc2FnZVdvcmtlclRhc2s6OmNyZWF0ZShtZXNzYWdlLCBjaGFubmVscy5yZWxlYXNlKCks
IHRoaXMpKTsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKE1lc3NhZ2VX
b3JrZXJUYXNrOjpjcmVhdGUobWVzc2FnZSwgY2hhbm5lbHMsIHRoaXMpKTsKIH0KIAogdm9pZCBX
b3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRD
aGFubmVsQXJyYXk+IGNoYW5uZWxzKQpAQCAtMjUzLDkgKzI1Myw5IEBAIHZvaWQgV29ya2VyTWVz
c2FnaW5nUHJveHk6OnBvc3RNZXNzYWdlVG8KIAogICAgIGlmIChtX3dvcmtlclRocmVhZCkgewog
ICAgICAgICArK21fdW5jb25maXJtZWRNZXNzYWdlQ291bnQ7Ci0gICAgICAgIG1fd29ya2VyVGhy
ZWFkLT5ydW5Mb29wKCkucG9zdFRhc2soTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpjcmVhdGUo
bWVzc2FnZSwgY2hhbm5lbHMucmVsZWFzZSgpKSk7CisgICAgICAgIG1fd29ya2VyVGhyZWFkLT5y
dW5Mb29wKCkucG9zdFRhc2soTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpjcmVhdGUobWVzc2Fn
ZSwgY2hhbm5lbHMpKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9xdWV1ZWRFYXJseVRhc2tzLmFw
cGVuZChNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s6OmNyZWF0ZShtZXNzYWdlLCBjaGFubmVscy5y
ZWxlYXNlKCkpKTsKKyAgICAgICAgbV9xdWV1ZWRFYXJseVRhc2tzLmFwcGVuZChNZXNzYWdlV29y
a2VyQ29udGV4dFRhc2s6OmNyZWF0ZShtZXNzYWdlLCBjaGFubmVscykpOwogfQogCiB2b2lkIFdv
cmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoUGFzc093
blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTdHJpbmcmIG1v
ZGUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60060</attachid>
            <date>2010-06-29 14:54:00 -0700</date>
            <delta_ts>2010-06-30 14:21:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41320-20100629145359.patch</filename>
            <type>text/plain</type>
            <size>51703</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMTQ1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTAtMDYtMjggIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBhZG9wdFB0ciBhbmQgbGVha1B0ciBmdW5jdGlvbnMgZm9yIE93
blB0ciBhbmQgUGFzc093blB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDEzMjAKKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVwYXJzZUZvckV4Y2VwdGlvbkluZm9JZk5lY2Vzc2Fy
eSk6IFVzZSBhc3NpZ25tZW50CisgICAgICAgIGluc3RlYWQgb2Ygc2V0IHNpbmNlIHRoZSByZXN1
bHQgb2YgcmVwYXJzZUV4Y2VwdGlvbkluZm8gaXMgbm93IGEKKyAgICAgICAgUGFzc093blB0ci4K
KworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOiBDaGFuZ2UgZXh0cmFjdEV4Y2VwdGlv
bkluZm8gdG8gcmV0dXJuIGEKKyAgICAgICAgUGFzc093blB0ciBpbnN0ZWFkIG9mIGEgcmF3IHBv
aW50ZXIuCisKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkV4ZWN1dGFibGU6OnJlcGFyc2VFeGNlcHRpb25JbmZvKTogUmV0dXJuIGEgUGFz
c093blB0ci4KKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OnJlcGFyc2VFeGNlcHRpb25J
bmZvKTogRGl0dG8uCisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpyZXBhcnNlRXhj
ZXB0aW9uSW5mbyk6IEFkZGVkLiBUaGlzIHdhcworICAgICAgICBpbiB0aGUgaGVhZGVyIGJlZm9y
ZSwgYnV0IGl0J3MgYmV0dGVyIHRvIG5vdCBoYXZlIGl0IHRoZXJlIHRvIHJlZHVjZQorICAgICAg
ICBoZWFkZXIgZGVwZW5kZW5jaWVzLiBSZXR1cm4gYSBQYXNzT3duUHRyLgorCisgICAgICAgICog
cnVudGltZS9FeGVjdXRhYmxlLmg6IE1hZGUgcmVwYXJzZUV4Y2VwdGlvbkluZm8gcmV0dXJuIGEg
UGFzc093blB0ciwKKyAgICAgICAgYW5kIHB1dCBpdCBpbiB0aGUgcHJpdmF0ZSBzZWN0aW9ucyBv
ZiBjbGFzc2VzIG90aGVyIHRoYW4gdGhlIGJhc2UgY2xhc3MuCisgICAgICAgIAorICAgICAgICAq
IHd0Zi9Pd25QdHIuaDogVHdlYWtlZCBmb3JtYXR0aW5nLiBDaGFuZ2VkIHRoZSByZWxlYXNlIGZ1
bmN0aW9uIHRvIHJldHVybgorICAgICAgICBhIFBhc3NPd25QdHIgcmF0aGVyIHRoYW4gYSByYXcg
cG9pbnRlci4gQWRkZWQgYSBsZWFrUHRyIGZ1bmN0aW9uIHRoYXQKKyAgICAgICAgcmV0dXJucyBh
IHJhdyBwb2ludGVyLiBQdXQgdGhlIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYSByYXcgcG9pbnRl
ciBhbmQKKyAgICAgICAgdGhlIHNldCBmdW5jdGlvbiBpbnRvIGEgc2VjdGlvbiBndWFyZGVkIGJ5
IExPT1NFX09XTl9QVFIuIEFkYXB0ZWQgdG8gdGhlCisgICAgICAgIG5ldyBhZG9wdFB0ciBmdW5j
dGlvbiBmcm9tIFBhc3NPd25QdHIuaC4KKworICAgICAgICAqIHd0Zi9QYXNzT3duUHRyLmg6IFR3
ZWFrZWQgZm9ybWF0dGluZy4gUmVuYW1lZCB0aGUgcmVsZWFzZSBmdW5jdGlvbgorICAgICAgICB0
byBsZWFrUHRyLiBBZGRlZCBhbiBhZG9wdFB0ciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcg
UGFzc093blB0ci4KKyAgICAgICAgUHV0IHRoZSBjb25zdHJ1Y3RvciBhbmQgYXNzaWdubWVudCBv
cGVyYXRvcnMgdGhhdCB0YWtlIGEgcmF3IHBvaW50ZXIKKyAgICAgICAgaW50byBhIHNlY3Rpb24g
Z3VhcmRlZCBieSBMT09TRV9QQVNTX09XTl9QVFIuCisKIDIwMTAtMDYtMjkgIE5hdGhhbiBMYXdy
ZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZy
ZXkgR2FyZW4uCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDYyMTQ1KQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC0xNTM4LDcgKzE1MzgsNyBAQCBib29sIENvZGVCbG9jazo6cmVwYXJz
ZUZvckV4Y2VwdGlvbkluZm9JCiAgICAgICAgICAgICBzY29wZUNoYWluID0gc2NvcGVDaGFpbi0+
bmV4dDsKICAgICB9CiAKLSAgICBtX2V4Y2VwdGlvbkluZm8uc2V0KG1fb3duZXJFeGVjdXRhYmxl
LT5yZXBhcnNlRXhjZXB0aW9uSW5mbyhtX2dsb2JhbERhdGEsIHNjb3BlQ2hhaW4sIHRoaXMpKTsK
KyAgICBtX2V4Y2VwdGlvbkluZm8gPSBtX293bmVyRXhlY3V0YWJsZS0+cmVwYXJzZUV4Y2VwdGlv
bkluZm8obV9nbG9iYWxEYXRhLCBzY29wZUNoYWluLCB0aGlzKTsKICAgICByZXR1cm4gbV9leGNl
cHRpb25JbmZvOwogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2
aXNpb24gNjIxNDUpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiUmVnRXhwLmgiCiAjaW5j
bHVkZSAiVVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCkBAIC00NDYsNyArNDQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgYm9vbCBoYXNFeGNlcHRpb25JbmZvKCkgY29uc3QgeyByZXR1cm4gbV9leGNlcHRpb25J
bmZvOyB9CiAgICAgICAgIHZvaWQgY2xlYXJFeGNlcHRpb25JbmZvKCkgeyBtX2V4Y2VwdGlvbklu
Zm8uY2xlYXIoKTsgfQotICAgICAgICBFeGNlcHRpb25JbmZvKiBleHRyYWN0RXhjZXB0aW9uSW5m
bygpIHsgQVNTRVJUKG1fZXhjZXB0aW9uSW5mbyk7IHJldHVybiBtX2V4Y2VwdGlvbkluZm8ucmVs
ZWFzZSgpOyB9CisgICAgICAgIFBhc3NPd25QdHI8RXhjZXB0aW9uSW5mbz4gZXh0cmFjdEV4Y2Vw
dGlvbkluZm8oKTsKIAogICAgICAgICB2b2lkIGFkZEV4cHJlc3Npb25JbmZvKGNvbnN0IEV4cHJl
c3Npb25SYW5nZUluZm8mIGV4cHJlc3Npb25JbmZvKSB7IEFTU0VSVChtX2V4Y2VwdGlvbkluZm8p
OyBtX2V4Y2VwdGlvbkluZm8tPm1fZXhwcmVzc2lvbkluZm8uYXBwZW5kKGV4cHJlc3Npb25JbmZv
KTsgfQogICAgICAgICB2b2lkIGFkZEdldEJ5SWRFeGNlcHRpb25JbmZvKGNvbnN0IEdldEJ5SWRF
eGNlcHRpb25JbmZvJiBpbmZvKSB7IEFTU0VSVChtX2V4Y2VwdGlvbkluZm8pOyBtX2V4Y2VwdGlv
bkluZm8tPm1fZ2V0QnlJZEV4Y2VwdGlvbkluZm8uYXBwZW5kKGluZm8pOyB9CkBAIC02NjUsNiAr
NjY2LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgfTsKIAorICAgIGlubGlu
ZSBQYXNzT3duUHRyPEV4Y2VwdGlvbkluZm8+IENvZGVCbG9jazo6ZXh0cmFjdEV4Y2VwdGlvbklu
Zm8oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZXhjZXB0aW9uSW5mbyk7CisgICAgICAgIHJl
dHVybiBtX2V4Y2VwdGlvbkluZm8ucmVsZWFzZSgpOworICAgIH0KKwogICAgIGlubGluZSBSZWdp
c3RlciYgRXhlY1N0YXRlOjpyKGludCBpbmRleCkKICAgICB7CiAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDYyMTQ1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjI5LDExICsyMjksMTEgQEAgdm9pZCBG
dW5jdGlvbkV4ZWN1dGFibGU6Om1hcmtBZ2dyZWdhdGUoTQogICAgICAgICBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdC0+bWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwogfQogCi1FeGNlcHRpb25JbmZv
KiBGdW5jdGlvbkV4ZWN1dGFibGU6OnJlcGFyc2VFeGNlcHRpb25JbmZvKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKK1Bhc3NPd25QdHI8RXhjZXB0aW9uSW5mbz4gRnVuY3Rpb25FeGVjdXRhYmxlOjpy
ZXBhcnNlRXhjZXB0aW9uSW5mbyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluTm9kZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgUmVmUHRy
PEZ1bmN0aW9uQm9keU5vZGU+IG5ld0Z1bmN0aW9uQm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+
cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZ2xvYmFsRGF0YSwgMCwgMCwgbV9zb3VyY2UpOwogICAg
IGlmICghbmV3RnVuY3Rpb25Cb2R5KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJu
IFBhc3NPd25QdHI8RXhjZXB0aW9uSW5mbz4oKTsKICAgICBpZiAobV9mb3JjZVVzZXNBcmd1bWVu
dHMpCiAgICAgICAgIG5ld0Z1bmN0aW9uQm9keS0+c2V0VXNlc0FyZ3VtZW50cygpOwogICAgIG5l
d0Z1bmN0aW9uQm9keS0+ZmluaXNoUGFyc2luZyhtX3BhcmFtZXRlcnMsIG1fbmFtZSk7CkBAIC0y
NjAsMTEgKzI2MCwxMSBAQCBFeGNlcHRpb25JbmZvKiBGdW5jdGlvbkV4ZWN1dGFibGU6OnJlcGFy
CiAgICAgcmV0dXJuIG5ld0NvZGVCbG9jay0+ZXh0cmFjdEV4Y2VwdGlvbkluZm8oKTsKIH0KIAot
RXhjZXB0aW9uSW5mbyogRXZhbEV4ZWN1dGFibGU6OnJlcGFyc2VFeGNlcHRpb25JbmZvKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK1Bhc3NPd25QdHI8RXhjZXB0aW9uSW5mbz4gRXZhbEV4ZWN1dGFi
bGU6OnJlcGFyc2VFeGNlcHRpb25JbmZvKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBS
ZWZQdHI8RXZhbE5vZGU+IG5ld0V2YWxCb2R5ID0gZ2xvYmFsRGF0YS0+cGFyc2VyLT5wYXJzZTxF
dmFsTm9kZT4oZ2xvYmFsRGF0YSwgMCwgMCwgbV9zb3VyY2UpOwogICAgIGlmICghbmV3RXZhbEJv
ZHkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gUGFzc093blB0cjxFeGNlcHRp
b25JbmZvPigpOwogCiAgICAgU2NvcGVDaGFpbiBzY29wZUNoYWluKHNjb3BlQ2hhaW5Ob2RlKTsK
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbi5nbG9iYWxPYmpl
Y3QoKTsKQEAgLTMzNCw2ICszMzQsMTAgQEAgVVN0cmluZyBGdW5jdGlvbkV4ZWN1dGFibGU6OnBh
cmFtU3RyaW5nKAogICAgIHJldHVybiBidWlsZGVyLmJ1aWxkKCk7CiB9CiAKLX07Ci0KK1Bhc3NP
d25QdHI8RXhjZXB0aW9uSW5mbz4gUHJvZ3JhbUV4ZWN1dGFibGU6OnJlcGFyc2VFeGNlcHRpb25J
bmZvKEpTR2xvYmFsRGF0YSosIFNjb3BlQ2hhaW5Ob2RlKiwgQ29kZUJsb2NrKikKK3sKKyAgICAv
LyBDb2RlQmxvY2tzIGZvciBwcm9ncmFtIGNvZGUgYXJlIHRyYW5zaWVudCBhbmQgdGhlcmVmb3Jl
IGRvIG5vdCBnYWluIGZyb20gZnJvbSB0aHJvd2luZyBvdXQgdGhlaXIgZXhjZXB0aW9uIGluZm9y
bWF0aW9uLgorICAgIHJldHVybiBQYXNzT3duUHRyPEV4Y2VwdGlvbkluZm8+KCk7Cit9CiAKK30K
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiA2MjE0NSkKKysr
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJOb2Rlcy5oIgog
I2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNzEsNyArMTcyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMgJiBB
cmd1bWVudHNGZWF0dXJlOyB9CiAgICAgICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9mZWF0dXJlcyAmIChFdmFsRmVhdHVyZSB8IENsb3N1cmVGZWF0dXJlIHwgV2l0
aEZlYXR1cmUgfCBDYXRjaEZlYXR1cmUpOyB9CiAKLSAgICAgICAgdmlydHVhbCBFeGNlcHRpb25J
bmZvKiByZXBhcnNlRXhjZXB0aW9uSW5mbyhKU0dsb2JhbERhdGEqLCBTY29wZUNoYWluTm9kZSos
IENvZGVCbG9jayopID0gMDsKKyAgICAgICAgdmlydHVhbCBQYXNzT3duUHRyPEV4Y2VwdGlvbklu
Zm8+IHJlcGFyc2VFeGNlcHRpb25JbmZvKEpTR2xvYmFsRGF0YSosIFNjb3BlQ2hhaW5Ob2RlKiwg
Q29kZUJsb2NrKikgPSAwOwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2b2lkIHJlY29yZFBh
cnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQpA
QCAtMjAzLDcgKzIwNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTT2JqZWN0KiBj
b21waWxlKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAKLSAgICAgICAgRXhjZXB0aW9u
SW5mbyogcmVwYXJzZUV4Y2VwdGlvbkluZm8oSlNHbG9iYWxEYXRhKiwgU2NvcGVDaGFpbk5vZGUq
LCBDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZhbEV4ZWN1dGFibGU+
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IEV2YWxFeGVjdXRhYmxlKGV4ZWMsIHNvdXJjZSkpOyB9CiAKICAgICBw
cml2YXRlOgpAQCAtMjEyLDYgKzIxMiw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
LCBtX2V2YWxDb2RlQmxvY2soMCkKICAgICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgdmly
dHVhbCBQYXNzT3duUHRyPEV4Y2VwdGlvbkluZm8+IHJlcGFyc2VFeGNlcHRpb25JbmZvKEpTR2xv
YmFsRGF0YSosIFNjb3BlQ2hhaW5Ob2RlKiwgQ29kZUJsb2NrKik7CisKICAgICAgICAgRXZhbENv
ZGVCbG9jayogbV9ldmFsQ29kZUJsb2NrOwogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTI0OSwxNSAr
MjUyLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU09iamVjdCogY2hlY2tTeW50YXgo
RXhlY1N0YXRlKik7CiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlKEV4ZWNTdGF0ZSosIFNjb3Bl
Q2hhaW5Ob2RlKik7CiAKLSAgICAgICAgLy8gQ29kZUJsb2NrcyBmb3IgcHJvZ3JhbSBjb2RlIGFy
ZSB0cmFuc2llbnQgYW5kIHRoZXJlZm9yZSBkbyBub3QgZ2FpbiBmcm9tIGZyb20gdGhyb3dpbmcg
b3V0IHRoZXJlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbi4KLSAgICAgICAgRXhjZXB0aW9uSW5mbyog
cmVwYXJzZUV4Y2VwdGlvbkluZm8oSlNHbG9iYWxEYXRhKiwgU2NvcGVDaGFpbk5vZGUqLCBDb2Rl
QmxvY2sqKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQotCiAgICAgcHJpdmF0
ZToKICAgICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UpCiAgICAgICAgICAgICA6IFNjcmlwdEV4ZWN1dGFibGUoZXhlYywgc291
cmNlKQogICAgICAgICAgICAgLCBtX3Byb2dyYW1Db2RlQmxvY2soMCkKICAgICAgICAgewogICAg
ICAgICB9CisKKyAgICAgICAgdmlydHVhbCBQYXNzT3duUHRyPEV4Y2VwdGlvbkluZm8+IHJlcGFy
c2VFeGNlcHRpb25JbmZvKEpTR2xvYmFsRGF0YSosIFNjb3BlQ2hhaW5Ob2RlKiwgQ29kZUJsb2Nr
Kik7CisKICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogbV9wcm9ncmFtQ29kZUJsb2NrOwogCiAj
aWYgRU5BQkxFKEpJVCkKQEAgLTM1MCw3ICszNTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zeW1i
b2xUYWJsZTsgfQogCiAgICAgICAgIHZvaWQgcmVjb21waWxlKEV4ZWNTdGF0ZSopOwotICAgICAg
ICBFeGNlcHRpb25JbmZvKiByZXBhcnNlRXhjZXB0aW9uSW5mbyhKU0dsb2JhbERhdGEqLCBTY29w
ZUNoYWluTm9kZSosIENvZGVCbG9jayopOwogICAgICAgICB2b2lkIG1hcmtBZ2dyZWdhdGUoTWFy
a1N0YWNrJiBtYXJrU3RhY2spOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGdW5jdGlvbkV4
ZWN1dGFibGU+IGZyb21HbG9iYWxDb2RlKGNvbnN0IElkZW50aWZpZXImLCBFeGVjU3RhdGUqLCBE
ZWJ1Z2dlciosIGNvbnN0IFNvdXJjZUNvZGUmLCBpbnQqIGVyckxpbmUgPSAwLCBVU3RyaW5nKiBl
cnJNc2cgPSAwKTsKIApAQCAtMzg2LDYgKzM4OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIGNvbXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAgICAg
ICAgIGJvb2wgY29tcGlsZUZvckNvbnN0cnVjdChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSop
OwogCisgICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxFeGNlcHRpb25JbmZvPiByZXBhcnNlRXhj
ZXB0aW9uSW5mbyhKU0dsb2JhbERhdGEqLCBTY29wZUNoYWluTm9kZSosIENvZGVCbG9jayopOwor
CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtVmFyaWFibGVzIDogMzE7CiAgICAgICAgIGJvb2wgbV9m
b3JjZVVzZXNBcmd1bWVudHMgOiAxOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvT3duUHRy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL093blB0ci5oCShyZXZpc2lvbiA2
MjE0NSkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9Pd25QdHIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDM2ICsyOCwzOSBAQAogI2luY2x1ZGUgPGFsZ29y
aXRobT4KICNpbmNsdWRlIDxtZW1vcnk+CiAKKy8vIFJlbW92ZSB0aGlzIG9uY2Ugd2UgbWFrZSBh
bGwgV2ViS2l0IGNvZGUgY29tcGF0aWJsZSB3aXRoIHN0cmljdGVyIHJ1bGVzIGFib3V0IE93blB0
ci4KKyNkZWZpbmUgTE9PU0VfT1dOX1BUUgorCiBuYW1lc3BhY2UgV1RGIHsKIAogICAgIC8vIFVu
bGlrZSBtb3N0IG9mIG91ciBzbWFydCBwb2ludGVycywgT3duUHRyIGNhbiB0YWtlIGVpdGhlciB0
aGUgcG9pbnRlciB0eXBlIG9yIHRoZSBwb2ludGVkLXRvIHR5cGUuCiAKLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gY2xhc3MgUGFzc093blB0cjsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
bGFzcyBQYXNzT3duUHRyOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFBhc3NPd25QdHI8VD4g
YWRvcHRQdHIoVCopOwogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIE93blB0ciA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgT3du
UHRyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgUmVtb3ZlUG9pbnRlcjxUPjo6VHlwZSBWYWx1ZVR5cGU7CiAgICAgICAgIHR5cGVk
ZWYgVmFsdWVUeXBlKiBQdHJUeXBlOwogCi0gICAgICAgIGV4cGxpY2l0IE93blB0cihQdHJUeXBl
IHB0ciA9IDApIDogbV9wdHIocHRyKSB7IH0KKyAgICAgICAgT3duUHRyKCkgOiBtX3B0cigwKSB7
IH0KKwogICAgICAgICAvLyBTZWUgY29tbWVudCBpbiBQYXNzT3duUHRyLmggZm9yIHdoeSB0aGlz
IHRha2VzIGEgY29uc3QgcmVmZXJlbmNlLgotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4g
T3duUHRyKGNvbnN0IFBhc3NPd25QdHI8VT4mIG8pOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBPd25QdHIoY29uc3QgUGFzc093blB0cjxVPiYgbyk7CiAKICAgICAgICAgLy8gVGhpcyBj
b3B5IGNvbnN0cnVjdG9yIGlzIHVzZWQgaW1wbGljaXRseSBieSBnY2Mgd2hlbiBpdCBnZW5lcmF0
ZXMKICAgICAgICAgLy8gdHJhbnNpZW50cyBmb3IgYXNzaWduaW5nIGEgUGFzc093blB0cjxUPiBv
YmplY3QgdG8gYSBzdGFjay1hbGxvY2F0ZWQKLSAgICAgICAgLy8gT3duUHRyPFQ+IG9iamVjdC4g
IEl0IHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZXhwbGljaXRseSBhbmQgZ2NjCisgICAgICAgIC8v
IE93blB0cjxUPiBvYmplY3QuIEl0IHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZXhwbGljaXRseSBh
bmQgZ2NjCiAgICAgICAgIC8vIHNob3VsZCBvcHRpbWl6ZSBhd2F5IHRoZSBjb25zdHJ1Y3RvciB3
aGVuIGdlbmVyYXRpbmcgY29kZS4KLSAgICAgICAgT3duUHRyKGNvbnN0IE93blB0cjxWYWx1ZVR5
cGU+JiBvKTsKKyAgICAgICAgT3duUHRyKGNvbnN0IE93blB0cjxWYWx1ZVR5cGU+Jik7CiAKICAg
ICAgICAgfk93blB0cigpIHsgZGVsZXRlT3duZWRQdHIobV9wdHIpOyB9CiAKICAgICAgICAgUHRy
VHlwZSBnZXQoKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQotICAgICAgICBQdHJUeXBlIHJlbGVh
c2UoKSB7IFB0clR5cGUgcHRyID0gbV9wdHI7IG1fcHRyID0gMDsgcmV0dXJuIHB0cjsgfQotCi0g
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSByZW5hbWVkIHRvIGFkb3B0LiAKLSAgICAg
ICAgdm9pZCBzZXQoUHRyVHlwZSBwdHIpIHsgQVNTRVJUKCFwdHIgfHwgbV9wdHIgIT0gcHRyKTsg
ZGVsZXRlT3duZWRQdHIobV9wdHIpOyBtX3B0ciA9IHB0cjsgfQogCiAgICAgICAgIHZvaWQgY2xl
YXIoKSB7IGRlbGV0ZU93bmVkUHRyKG1fcHRyKTsgbV9wdHIgPSAwOyB9CisgICAgICAgIFBhc3NP
d25QdHI8VD4gcmVsZWFzZSgpOworICAgICAgICBQdHJUeXBlIGxlYWtQdHIoKTsKIAogICAgICAg
ICBWYWx1ZVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJuICpt
X3B0cjsgfQogICAgICAgICBQdHJUeXBlIG9wZXJhdG9yLT4oKSBjb25zdCB7IEFTU0VSVChtX3B0
cik7IHJldHVybiBtX3B0cjsgfQpAQCAtNjksNjUgKzcyLDkzIEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9w
dHIgPyAmT3duUHRyOjptX3B0ciA6IDA7IH0KIAogICAgICAgICBPd25QdHImIG9wZXJhdG9yPShj
b25zdCBQYXNzT3duUHRyPFQ+Jik7Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBPd25Q
dHImIG9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRyPFU+Jik7CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IE93blB0ciYgb3BlcmF0b3I9KGNvbnN0IFBhc3NPd25QdHI8VT4mKTsKIAogICAg
ICAgICB2b2lkIHN3YXAoT3duUHRyJiBvKSB7IHN0ZDo6c3dhcChtX3B0ciwgby5tX3B0cik7IH0K
IAorI2lmZGVmIExPT1NFX09XTl9QVFIKKyAgICAgICAgZXhwbGljaXQgT3duUHRyKFB0clR5cGUg
cHRyKSA6IG1fcHRyKHB0cikgeyB9CisgICAgICAgIHZvaWQgc2V0KFB0clR5cGUpOworI2VuZGlm
CisKICAgICBwcml2YXRlOgogICAgICAgICBQdHJUeXBlIG1fcHRyOwogICAgIH07CiAKLSAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdGVtcGxhdGUgPHR5cGVuYW1lIFU+IGlubGluZSBPd25QdHI8
VD46Ok93blB0cihjb25zdCBQYXNzT3duUHRyPFU+JiBvKQotICAgICAgICA6IG1fcHRyKG8ucmVs
ZWFzZSgpKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+IGlu
bGluZSBPd25QdHI8VD46Ok93blB0cihjb25zdCBQYXNzT3duUHRyPFU+JiBvKQorICAgICAgICA6
IG1fcHRyKG8ubGVha1B0cigpKQorICAgIHsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgUGFzc093blB0cjxUPiBPd25QdHI8VD46OnJlbGVhc2UoKQogICAgIHsKKyAg
ICAgICAgUHRyVHlwZSBwdHIgPSBtX3B0cjsKKyAgICAgICAgbV9wdHIgPSAwOworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIocHRyKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgdHlwZW5hbWUgT3duUHRyPFQ+OjpQdHJUeXBlIE93blB0cjxUPjo6bGVha1B0cigpCisg
ICAgeworICAgICAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOworICAgICAgICBtX3B0ciA9IDA7Cisg
ICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisjaWZkZWYgTE9PU0VfT1dOX1BUUgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIE93blB0cjxUPjo6c2V0KFB0clR5cGUgcHRy
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFwdHIgfHwgbV9wdHIgIT0gcHRyKTsKKyAgICAgICAg
ZGVsZXRlT3duZWRQdHIobV9wdHIpOworICAgICAgICBtX3B0ciA9IHB0cjsKICAgICB9CisjZW5k
aWYKIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgT3duUHRyPFQ+JiBPd25QdHI8
VD46Om9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRyPFQ+JiBvKQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBPd25QdHI8VD4mIE93blB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFBhc3NP
d25QdHI8VD4mIG8pCiAgICAgewogICAgICAgICBUKiBwdHIgPSBtX3B0cjsKLSAgICAgICAgbV9w
dHIgPSBvLnJlbGVhc2UoKTsKKyAgICAgICAgbV9wdHIgPSBvLmxlYWtQdHIoKTsKICAgICAgICAg
QVNTRVJUKCFwdHIgfHwgbV9wdHIgIT0gcHRyKTsKICAgICAgICAgaWYgKHB0cikKICAgICAgICAg
ICAgIGRlbGV0ZU93bmVkUHRyKHB0cik7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAK
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdGVtcGxhdGUgPHR5cGVuYW1lIFU+IGlubGluZSBP
d25QdHI8VD4mIE93blB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFBhc3NPd25QdHI8VT4mIG8pCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUgVT4gaW5saW5lIE93blB0
cjxUPiYgT3duUHRyPFQ+OjpvcGVyYXRvcj0oY29uc3QgUGFzc093blB0cjxVPiYgbykKICAgICB7
CiAgICAgICAgIFQqIHB0ciA9IG1fcHRyOwotICAgICAgICBtX3B0ciA9IG8ucmVsZWFzZSgpOwor
ICAgICAgICBtX3B0ciA9IG8ubGVha1B0cigpOwogICAgICAgICBBU1NFUlQoIXB0ciB8fCBtX3B0
ciAhPSBwdHIpOwogICAgICAgICBpZiAocHRyKQogICAgICAgICAgICAgZGVsZXRlT3duZWRQdHIo
cHRyKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBpbmxpbmUgdm9pZCBzd2FwKE93blB0cjxUPiYgYSwgT3duUHRyPFQ+JiBiKQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIHN3YXAoT3duUHRyPFQ+JiBhLCBPd25Q
dHI8VD4mIGIpCiAgICAgewogICAgICAgICBhLnN3YXAoYik7CiAgICAgfQogCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
T3duUHRyPFQ+JiBhLCBVKiBiKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgT3duUHRyPFQ+JiBhLCBVKiBiKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGEuZ2V0KCkgPT0gYjsgCiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oVCogYSwgY29uc3Qg
T3duUHRyPFU+JiBiKSAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KFQqIGEsIGNvbnN0IE93blB0cjxVPiYgYikgCiAgICAgewogICAg
ICAgICByZXR1cm4gYSA9PSBiLmdldCgpOyAKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBPd25QdHI8VD4m
IGEsIFUqIGIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBPd25QdHI8VD4mIGEsIFUqIGIpCiAgICAgewogICAgICAgICBy
ZXR1cm4gYS5nZXQoKSAhPSBiOyAKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShUKiBhLCBjb25zdCBPd25QdHI8VT4m
IGIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShUKiBhLCBjb25zdCBPd25QdHI8VT4mIGIpCiAgICAgewogICAgICAgICByZXR1cm4g
YSAhPSBiLmdldCgpOyAKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5l
IHR5cGVuYW1lIE93blB0cjxUPjo6UHRyVHlwZSBnZXRQdHIoY29uc3QgT3duUHRyPFQ+JiBwKQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBPd25QdHI8VD46OlB0clR5
cGUgZ2V0UHRyKGNvbnN0IE93blB0cjxUPiYgcCkKICAgICB7CiAgICAgICAgIHJldHVybiBwLmdl
dCgpOwogICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9QYXNzT3duUHRyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NPd25QdHIuaAkocmV2aXNpb24gNjIxNDUp
CisrKyBKYXZhU2NyaXB0Q29yZS93dGYvUGFzc093blB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwz
MSArMzAsMzYgQEAKICNpbmNsdWRlICJPd25QdHJDb21tb24uaCIKICNpbmNsdWRlICJUeXBlVHJh
aXRzLmgiCiAKKy8vIFJlbW92ZSB0aGlzIG9uY2Ugd2UgbWFrZSBhbGwgV2ViS2l0IGNvZGUgY29t
cGF0aWJsZSB3aXRoIHN0cmljdGVyIHJ1bGVzIGFib3V0IFBhc3NPd25QdHIuCisjZGVmaW5lIExP
T1NFX1BBU1NfT1dOX1BUUgorCiBuYW1lc3BhY2UgV1RGIHsKIAogICAgIC8vIFVubGlrZSBtb3N0
IG9mIG91ciBzbWFydCBwb2ludGVycywgUGFzc093blB0ciBjYW4gdGFrZSBlaXRoZXIgdGhlIHBv
aW50ZXIgdHlwZSBvciB0aGUgcG9pbnRlZC10byB0eXBlLgogCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGNsYXNzIE93blB0cjsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBPd25Q
dHI7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc093blB0cjsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBQYXNzT3duUHRyPFQ+IGFkb3B0UHRyKFQqKTsKIAotICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzT3duUHRyIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjbGFzcyBQYXNzT3duUHRyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgUmVtb3ZlUG9pbnRlcjxUPjo6VHlwZSBWYWx1ZVR5cGU7CiAgICAgICAgIHR5cGVkZWYg
VmFsdWVUeXBlKiBQdHJUeXBlOwogCi0gICAgICAgIFBhc3NPd25QdHIoUHRyVHlwZSBwdHIgPSAw
KSA6IG1fcHRyKHB0cikgeyB9CisgICAgICAgIFBhc3NPd25QdHIoKSA6IG1fcHRyKDApIHsgfQor
CiAgICAgICAgIC8vIEl0IHNvbWV3aGF0IGJyZWFrcyB0aGUgdHlwZSBzeXN0ZW0gdG8gYWxsb3cg
dHJhbnNmZXIgb2Ygb3duZXJzaGlwIG91dCBvZgogICAgICAgICAvLyBhIGNvbnN0IFBhc3NPd25Q
dHIuIEhvd2V2ZXIsIGl0IG1ha2VzIGl0IG11Y2ggZWFzaWVyIHRvIHdvcmsgd2l0aCBQYXNzT3du
UHRyCi0gICAgICAgIC8vIHRlbXBvcmFyaWVzLCBhbmQgd2UgZG9uJ3QgcmVhbGx5IGhhdmUgYSBu
ZWVkIHRvIHVzZSByZWFsIGNvbnN0IFBhc3NPd25QdHJzIAotICAgICAgICAvLyBhbnl3YXkuCi0g
ICAgICAgIFBhc3NPd25QdHIoY29uc3QgUGFzc093blB0ciYgbykgOiBtX3B0cihvLnJlbGVhc2Uo
KSkgeyB9Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBQYXNzT3duUHRyKGNvbnN0IFBh
c3NPd25QdHI8VT4mIG8pIDogbV9wdHIoby5yZWxlYXNlKCkpIHsgfQorICAgICAgICAvLyB0ZW1w
b3JhcmllcywgYW5kIHdlIGRvbid0IGhhdmUgYSBuZWVkIHRvIHVzZSByZWFsIGNvbnN0IFBhc3NP
d25QdHJzIGFueXdheS4KKyAgICAgICAgUGFzc093blB0cihjb25zdCBQYXNzT3duUHRyJiBvKSA6
IG1fcHRyKG8ubGVha1B0cigpKSB7IH0KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gUGFz
c093blB0cihjb25zdCBQYXNzT3duUHRyPFU+JiBvKSA6IG1fcHRyKG8ubGVha1B0cigpKSB7IH0K
IAogICAgICAgICB+UGFzc093blB0cigpIHsgZGVsZXRlT3duZWRQdHIobV9wdHIpOyB9CiAKICAg
ICAgICAgUHRyVHlwZSBnZXQoKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQogCiAgICAgICAgIHZv
aWQgY2xlYXIoKSB7IG1fcHRyID0gMDsgfQotICAgICAgICBQdHJUeXBlIHJlbGVhc2UoKSBjb25z
dCB7IFB0clR5cGUgcHRyID0gbV9wdHI7IG1fcHRyID0gMDsgcmV0dXJuIHB0cjsgfQorICAgICAg
ICBQdHJUeXBlIGxlYWtQdHIoKSBjb25zdDsKIAogICAgICAgICBWYWx1ZVR5cGUmIG9wZXJhdG9y
KigpIGNvbnN0IHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJuICptX3B0cjsgfQogICAgICAgICBQdHJU
eXBlIG9wZXJhdG9yLT4oKSBjb25zdCB7IEFTU0VSVChtX3B0cik7IHJldHVybiBtX3B0cjsgfQpA
QCAtNjUsMTA1ICs3MCwxMjkgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHR5cGVkZWYgUHRy
VHlwZSBQYXNzT3duUHRyOjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKICAgICAgICAgb3BlcmF0b3Ig
VW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyID8gJlBhc3NPd25QdHI6
Om1fcHRyIDogMDsgfQogCi0gICAgICAgIFBhc3NPd25QdHImIG9wZXJhdG9yPShUKik7CiAgICAg
ICAgIFBhc3NPd25QdHImIG9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRyPFQ+Jik7Ci0gICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBQYXNzT3duUHRyJiBvcGVyYXRvcj0oY29uc3QgUGFzc093
blB0cjxVPiYpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBQYXNzT3duUHRyJiBvcGVy
YXRvcj0oY29uc3QgUGFzc093blB0cjxVPiYpOworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+IGZyaWVuZCBQYXNzT3duUHRyPFU+IGFkb3B0UHRyKFUqKTsKKworI2lmZGVmIExPT1NFX1BB
U1NfT1dOX1BUUgorICAgICAgICBQYXNzT3duUHRyKFB0clR5cGUgcHRyKSA6IG1fcHRyKHB0cikg
eyB9CisgICAgICAgIFBhc3NPd25QdHImIG9wZXJhdG9yPShQdHJUeXBlKTsKKyNlbmRpZgogCiAg
ICAgcHJpdmF0ZToKKyNpZm5kZWYgTE9PU0VfUEFTU19PV05fUFRSCisgICAgICAgIGV4cGxpY2l0
IFBhc3NPd25QdHIoUHRyVHlwZSBwdHIpIDogbV9wdHIocHRyKSB7IH0KKyNlbmRpZgorCiAgICAg
ICAgIG11dGFibGUgUHRyVHlwZSBtX3B0cjsKICAgICB9OwogCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGlubGluZSBQYXNzT3duUHRyPFQ+JiBQYXNzT3duUHRyPFQ+OjpvcGVyYXRvcj0oVCog
b3B0cikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgUGFzc093blB0
cjxUPjo6UHRyVHlwZSBQYXNzT3duUHRyPFQ+OjpsZWFrUHRyKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIFQqIHB0ciA9IG1fcHRyOworICAgICAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOworICAgICAg
ICBtX3B0ciA9IDA7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisjaWZkZWYgTE9PU0Vf
UEFTU19PV05fUFRSCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NPd25QdHI8
VD4mIFBhc3NPd25QdHI8VD46Om9wZXJhdG9yPShQdHJUeXBlIG9wdHIpCisgICAgeworICAgICAg
ICBQdHJUeXBlIHB0ciA9IG1fcHRyOwogICAgICAgICBtX3B0ciA9IG9wdHI7CiAgICAgICAgIEFT
U0VSVCghcHRyIHx8IG1fcHRyICE9IHB0cik7CiAgICAgICAgIGlmIChwdHIpCiAgICAgICAgICAg
ICBkZWxldGVPd25lZFB0cihwdHIpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQorI2Vu
ZGlmCiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NPd25QdHI8VD4mIFBh
c3NPd25QdHI8VD46Om9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRyPFQ+JiBvcHRyKQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzT3duUHRyPFQ+JiBQYXNzT3duUHRyPFQ+Ojpv
cGVyYXRvcj0oY29uc3QgUGFzc093blB0cjxUPiYgb3B0cikKICAgICB7Ci0gICAgICAgIFQqIHB0
ciA9IG1fcHRyOwotICAgICAgICBtX3B0ciA9IG9wdHIucmVsZWFzZSgpOworICAgICAgICBQdHJU
eXBlIHB0ciA9IG1fcHRyOworICAgICAgICBtX3B0ciA9IG9wdHIubGVha1B0cigpOwogICAgICAg
ICBBU1NFUlQoIXB0ciB8fCBtX3B0ciAhPSBwdHIpOwogICAgICAgICBpZiAocHRyKQogICAgICAg
ICAgICAgZGVsZXRlT3duZWRQdHIocHRyKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0K
IAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gaW5saW5l
IFBhc3NPd25QdHI8VD4mIFBhc3NPd25QdHI8VD46Om9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRy
PFU+JiBvcHRyKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+
IGlubGluZSBQYXNzT3duUHRyPFQ+JiBQYXNzT3duUHRyPFQ+OjpvcGVyYXRvcj0oY29uc3QgUGFz
c093blB0cjxVPiYgb3B0cikKICAgICB7Ci0gICAgICAgIFQqIHB0ciA9IG1fcHRyOwotICAgICAg
ICBtX3B0ciA9IG9wdHIucmVsZWFzZSgpOworICAgICAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOwor
ICAgICAgICBtX3B0ciA9IG9wdHIubGVha1B0cigpOwogICAgICAgICBBU1NFUlQoIXB0ciB8fCBt
X3B0ciAhPSBwdHIpOwogICAgICAgICBpZiAocHRyKQogICAgICAgICAgICAgZGVsZXRlT3duZWRQ
dHIocHRyKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBhc3NP
d25QdHI8VD4mIGEsIGNvbnN0IFBhc3NPd25QdHI8VT4mIGIpIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUGFzc093blB0
cjxUPiYgYSwgY29uc3QgUGFzc093blB0cjxVPiYgYikgCiAgICAgewogICAgICAgICByZXR1cm4g
YS5nZXQoKSA9PSBiLmdldCgpOyAKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQYXNzT3duUHRyPFQ+JiBh
LCBjb25zdCBPd25QdHI8VT4mIGIpIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUGFzc093blB0cjxUPiYgYSwgY29uc3Qg
T3duUHRyPFU+JiBiKSAKICAgICB7CiAgICAgICAgIHJldHVybiBhLmdldCgpID09IGIuZ2V0KCk7
IAogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPd25QdHI8VD4mIGEsIGNvbnN0IFBhc3NPd25QdHI8
VT4mIGIpIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgT3duUHRyPFQ+JiBhLCBjb25zdCBQYXNzT3duUHRyPFU+JiBiKSAK
ICAgICB7CiAgICAgICAgIHJldHVybiBhLmdldCgpID09IGIuZ2V0KCk7IAogICAgIH0KICAgICAK
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBQYXNzT3duUHRyPFQ+JiBhLCBVKiBiKSAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBhc3NPd25QdHI8
VD4mIGEsIFUqIGIpIAogICAgIHsKICAgICAgICAgcmV0dXJuIGEuZ2V0KCkgPT0gYjsgCiAgICAg
fQogICAgIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KFQqIGEsIGNvbnN0IFBhc3NPd25QdHI8VT4mIGIpIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oVCogYSwgY29u
c3QgUGFzc093blB0cjxVPiYgYikgCiAgICAgewogICAgICAgICByZXR1cm4gYSA9PSBiLmdldCgp
OyAKICAgICB9CiAgICAgCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUGFzc093blB0cjxUPiYgYSwgY29uc3QgUGFzc093
blB0cjxVPiYgYikgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBQYXNzT3duUHRyPFQ+JiBhLCBjb25zdCBQYXNzT3duUHRy
PFU+JiBiKSAKICAgICB7CiAgICAgICAgIHJldHVybiBhLmdldCgpICE9IGIuZ2V0KCk7IAogICAg
IH0KICAgICAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBQYXNzT3duUHRyPFQ+JiBhLCBjb25zdCBPd25QdHI8VT4mIGIp
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgUGFzc093blB0cjxUPiYgYSwgY29uc3QgT3duUHRyPFU+JiBiKSAKICAgICB7
CiAgICAgICAgIHJldHVybiBhLmdldCgpICE9IGIuZ2V0KCk7IAogICAgIH0KICAgICAKLSAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBPd25QdHI8VD4mIGEsIGNvbnN0IFBhc3NPd25QdHI8VT4mIGIpIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgT3du
UHRyPFQ+JiBhLCBjb25zdCBQYXNzT3duUHRyPFU+JiBiKSAKICAgICB7CiAgICAgICAgIHJldHVy
biBhLmdldCgpICE9IGIuZ2V0KCk7IAogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQYXNzT3duUHRy
PFQ+JiBhLCBVKiBiKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUGFzc093blB0cjxUPiYgYSwgVSogYikKICAgICB7CiAg
ICAgICAgIHJldHVybiBhLmdldCgpICE9IGI7IAogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShUKiBhLCBjb25z
dCBQYXNzT3duUHRyPFU+JiBiKSAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFQqIGEsIGNvbnN0IFBhc3NPd25QdHI8VT4mIGIpIAog
ICAgIHsKICAgICAgICAgcmV0dXJuIGEgIT0gYi5nZXQoKTsgCiAgICAgfQogCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBQYXNzT3duUHRyPFQ+IHN0YXRpY19w
b2ludGVyX2Nhc3QoY29uc3QgUGFzc093blB0cjxVPiYgcCkgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIFBhc3NPd25QdHI8VD4gYWRvcHRQdHIoVCogcHRyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFBhc3NPd25QdHI8VD4ocHRyKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgUGFzc093blB0cjxUPiBzdGF0aWNfcG9pbnRlcl9j
YXN0KGNvbnN0IFBhc3NPd25QdHI8VT4mIHApIAogICAgIHsKLSAgICAgICAgcmV0dXJuIFBhc3NP
d25QdHI8VD4oc3RhdGljX2Nhc3Q8VCo+KHAucmVsZWFzZSgpKSk7IAorICAgICAgICByZXR1cm4g
YWRvcHRQdHIoc3RhdGljX2Nhc3Q8VCo+KHAubGVha1B0cigpKSk7CiAgICAgfQogCi0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBQYXNzT3duUHRyPFQ+IGNvbnN0
X3BvaW50ZXJfY2FzdChjb25zdCBQYXNzT3duUHRyPFU+JiBwKSAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgUGFzc093blB0cjxUPiBjb25zdF9wb2ludGVyX2Nh
c3QoY29uc3QgUGFzc093blB0cjxVPiYgcCkgCiAgICAgewotICAgICAgICByZXR1cm4gUGFzc093
blB0cjxUPihjb25zdF9jYXN0PFQqPihwLnJlbGVhc2UoKSkpOyAKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKGNvbnN0X2Nhc3Q8VCo+KHAubGVha1B0cigpKSk7CiAgICAgfQogCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHIoY29uc3QgUGFzc093blB0cjxUPiYgcCkK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyKGNvbnN0IFBhc3NPd25Q
dHI8VD4mIHApCiAgICAgewogICAgICAgICByZXR1cm4gcC5nZXQoKTsKICAgICB9CkBAIC0xNzEs
NiArMjAwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcg
V1RGOjpQYXNzT3duUHRyOwordXNpbmcgV1RGOjphZG9wdFB0cjsKIHVzaW5nIFdURjo6Y29uc3Rf
cG9pbnRlcl9jYXN0OwogdXNpbmcgV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0OwogCkluZGV4OiBX
ZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gNjIxNDUpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDEwNiBAQAorMjAxMC0wNi0yOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFkb3B0UHRy
IGFuZCBsZWFrUHRyIGZ1bmN0aW9ucyBmb3IgT3duUHRyIGFuZCBQYXNzT3duUHRyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTMyMAorCisgICAgICAg
IE1hZGUgY29kZSBjaGFuZ2VzIHJlcXVpcmVkIGJlY2F1c2Ugb2YgdGhlIGNoYW5nZSB0byB0aGUg
cmVsZWFzZSBmdW5jdGlvbi4KKyAgICAgICAgVGhlIGVxdWl2YWxlbnQgdG8gdGhlIG9sZCByZWxl
YXNlIGZ1bmN0aW9uIGlzIG5vdyBuYW1lZCBsZWFrUHRyIGFuZAorICAgICAgICBzaG91bGQgYmUg
dXNlZCBzcGFyaW5nbHkuIFRoZSBuZXcgcmVsZWFzZSBmdW5jdGlvbiByZXR1cm5zIGEgUGFzc093
blB0ci4KKworICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEpOiBDaGFuZ2VkIGNvZGUgdG8g
Y2FsbAorICAgICAgICBsZWFrUHRyIGluc3RlYWQgb2YgcmVsZWFzZS4KKyAgICAgICAgKiBjc3Mv
Q1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6YWRkUHJvcGVydHkp
OiBEaXR0by4KKworICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFjZTo6Z2V0Rm9udERhdGEpOiBSZW1vdmVk
IHVubmVlZGVkIHR5cGUKKyAgICAgICAgY2FzdGluZy4gTm90IHN1cmUgd2h5IHRoaXMgY2hhbmdl
ZCB0aGUgdHlwZSB0byBGb250RGF0YSogYW5kIHRoZW4KKyAgICAgICAgY2FzdGVkIGJhY2sgdG8g
U2ltcGxlRm9udERhdGEqLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6TWVkaWFRdWVyeSk6IFJlbW92ZWQgY2FsbCB0byByZWxl
YXNlIG9uIGEKKyAgICAgICAgUGFzc093blB0ciwgc2luY2UgdGhlIGRhdGEgbWVtYmVyIGlzIG5v
dyBhbiBPd25QdHIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5Ojp+TWVkaWFRdWVyeSk6
IFJlbW92ZWQgbm93LXVubmVlZGVkIGRlbGV0ZS4KKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeS5o
OiBDaGFuZ2VkIG1fZXhwcmVzc2lvbnMgdG8gYmUgYW4gT3duUHRyLgorCisgICAgICAgICogaHRt
bC9IVE1MVG9rZW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY0hUTUxUb2tlbjo6QXRvbWlj
SFRNTFRva2VuKTogVXNlIGFzc2lnbm1lbnQgaW5zdGVhZAorICAgICAgICBvZiB0aGUgc2V0IGZ1
bmN0aW9uIHNpbmNlIHRoZXJlIGFyZSBubyByYXcgcG9pbnRlcnMgaW52b2x2ZWQuCisgICAgICAg
ICogbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJl
c291cmNlOjptYWtlUHVyZ2VhYmxlKTogRGl0dG8uCisKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc09y
aWdpblByZWZsaWdodFJlc3VsdENhY2hlOjphcHBlbmRFbnRyeSk6IFVzZQorICAgICAgICBsZWFr
UHRyIGluc3RlYWQgb2YgcmVsZWFzZSwgYW5kIGFsc28gYWRkIGNvZGUgdG8gZGVsZXRlIHRoZQor
ICAgICAgICBvbGQgdmFsdWUgaWYgdGhlIG9yaWdpbmFsIGFuZCBVUkwgYXJlIGFscmVhZHkgaW4g
dGhlIG1hcC4gSQorICAgICAgICBiZWxpZXZlIHRoaXMgZml4ZXMgYSBzdG9yYWdlIGxlYWsuCisK
KyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oOiBDaGFu
Z2UgdGhlIGFyZ3VtZW50CisgICAgICAgIHRvIGJlIFBhc3NPd25QdHIgaW5zdGVhZCBvZiBhIHJh
dyBwb2ludGVyLCBzaW5jZSB0aGlzIGZ1bmN0aW9uCisgICAgICAgIGRvZXMgdGFrZSBvd25lcnNo
aXAuCisKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6RG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyKToKKyAgICAgICAgVXNlIGFzc2lnbm1lbnQgaW5zdGVhZCBvZiB0aGUgc2V0IGZ1
bmN0aW9uIHNpbmNlIHRoZXJlIGFyZSBubyByYXcKKyAgICAgICAgcG9pbnRlcnMgaW52b2x2ZWQu
CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjpzdGFydEljb25Mb2FkZXIpOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvVGV4
dFJlc291cmNlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNv
ZGVyOjpkZWNvZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURlY29k
ZXI6OmZsdXNoKTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0RPTVRpbWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVRpbWVyOjpmaXJlZCk6IFVzZSBPd25QdHIgaW5zdGVhZCBvZiBhbiBl
eHBsaWNpdAorICAgICAgICBkZWxldGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVh
ZENvcGllci5oOiBSZW1vdmVkIGV4cGxpY2l0IGNvZGUgdGhhdCB0cmllZAorICAgICAgICB0byBj
b3B5IFBhc3NPd25QdHIgaW4gYSBjb21wbGljYXRlZCB3YXkuIEl0IGRpZCBub3RoaW5nIGRpZmZl
cmVudAorICAgICAgICBmcm9tIGp1c3QgcmV0dXJuaW5nIHRoZSBQYXNzT3duUHRyLiBUaGlzIHBy
ZXN1bWFibHkgd2FzIGRvbmUgYmVjYXVzZQorICAgICAgICBQYXNzUmVmUHRyIGhhcyBpc3N1ZXMg
d2hlbiBjb3BpZWQgY3Jvc3MtdGhyZWFkLCBidXQgdGhlcmUgYXJlIG5vCisgICAgICAgIHNpbWls
YXIgaXNzdWVzIGZvciBQYXNzT3duUHRyLiBTb21lb25lIHdpdGggbW9yZSBleHBlcmllbmNlIHRo
YW4gSQorICAgICAgICBtaWdodCBiZSBhYmxlIHRvIHJlbW92ZSB0aGUgc3BlY2lhbGl6YXRpb24g
YWx0b2dldGhlciwgYmVjYXVzZQorICAgICAgICBDcm9zc1RocmVhZENvcGllclBhc3NUaHJvdWdo
IGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGluIHRoaXMgY2FzZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFkb3B0
UHVyZ2VhYmxlQnVmZmVyKTogQ2hhbmdlZCBhcmd1bWVudCB0bworICAgICAgICBiZSBhIFBhc3NP
d25QdHIuCisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OnJlbGVhc2VQdXJnZWFibGVC
dWZmZXIpOiBDaGFuZ2VkIHJlc3VsdCB0bworICAgICAgICBiZSBhIFBhc3NPd25QdHIuCisgICAg
ICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmg6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgYWJvdmUu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOiBD
aGFuZ2VkIG9uZSBzaXRlCisgICAgICAgIHRvIHVzZSBhc3NpZ25tZW50IGluc3RlYWQgb2YgdGhl
IHNldCBmdW5jdGlvbiBzaW5jZSB0aGVyZSBhcmUgbm8gcmF3CisgICAgICAgIHBvaW50ZXJzIGlu
dm9sdmVkLiBDaGFuZ2VkIGFub3RoZXIgc2l0ZSB0byB1c2UgbGVha1B0ciBpbnN0ZWFkCisgICAg
ICAgIG9mIHJlbGVhc2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYXNrQW5kU3dhcENvbnRleHRG
b3JUZXh0R3JhZGllbnQpOiBVc2UgYXNzaWdubWVudAorICAgICAgICBpbnN0ZWFkIG9mIHRoZSBz
ZXQgZnVuY3Rpb24gc2luY2UgdGhlcmUgYXJlIG5vIHJhdyBwb2ludGVycyBpbnZvbHZlZC4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTdHlsZTo6c2V0Q29udGVudCk6IFVzZSBsZWFrUHRyIGluc3RlYWQgb2YgcmVs
ZWFzZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpOiBEaXR0
by4KKworICAgICAgICAqIHdvcmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmNvbm5l
Y3RUb1dvcmtlcik6CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgY2FsbCB0byByZWxlYXNlIGZ1
bmN0aW9uIGluIGEgY29kZSBwYXRoIHRoYXQgcGFzc2VzCisgICAgICAgIGEgUGFzc093blB0ciB0
byBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBQYXNzT3duUHRyLgorCisgICAgICAgICogd29ya2Vy
cy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OnNl
dFRpbWVvdXQpOiBDaGFuZ2VkIGFyZ3VtZW50IHR5cGUgdG8gUGFzc093blB0ci4KKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OnNldEludGVydmFsKTogRGl0dG8uCisgICAgICAgICog
d29ya2Vycy9Xb3JrZXJDb250ZXh0Lmg6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgYWJvdmUuCisKKyAg
ICAgICAgKiB3b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0TWVzc2FnZVRvV29ya2Vy
Q29udGV4dCk6CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgY2FsbCB0byByZWxlYXNlIGZ1bmN0
aW9uIGluIGNvZGUgcGF0aHMgdGhhdCBwYXNzCisgICAgICAgIGEgUGFzc093blB0ciB0byBhIGZ1
bmN0aW9uIHRoYXQgdGFrZXMgYSBQYXNzT3duUHRyLgorCiAyMDEwLTA2LTI5ICBLZW5uZXRoIFJ1
c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEds
YXprb3YuCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCShyZXZpc2lvbiA2MjE0NSkK
KysrIFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTg3LDggKzE4NywxMCBAQCBTaW1wbGVGb250RGF0YSogQ1NTRm9udEZhY2VTb3VyY2U6OmdldEZv
CiAgICAgICAgIGZvbnREYXRhLnNldChuZXcgU2ltcGxlRm9udERhdGEodGVtcERhdGEtPnBsYXRm
b3JtRGF0YSgpLCB0cnVlLCB0cnVlKSk7CiAgICAgfQogCi0gICAgbV9mb250RGF0YVRhYmxlLnNl
dChoYXNoS2V5LCBmb250RGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIGZvbnREYXRhLnJlbGVhc2Uo
KTsKKyAgICBTaW1wbGVGb250RGF0YSogZm9udERhdGFSYXdQdHIgPSBmb250RGF0YS5sZWFrUHRy
KCk7CisgICAgbV9mb250RGF0YVRhYmxlLnNldChoYXNoS2V5LCBmb250RGF0YVJhd1B0cik7CisK
KyAgICByZXR1cm4gZm9udERhdGFSYXdQdHI7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvY3NzL0NT
U1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2
aXNpb24gNjIxNDUpCisrKyBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zODcsOSArMzg3LDkgQEAgdm9pZCBDU1NQYXJzZXI6OmFkZFByb3BlcnR5KGludCBwcm9w
SWQsIAogICAgICAgICBpZiAobV9tYXhQYXJzZWRQcm9wZXJ0aWVzID4gVUlOVF9NQVggLyBzaXpl
b2YoQ1NTUHJvcGVydHkqKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9wYXJzZWRQ
cm9wZXJ0aWVzID0gc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHkqKj4oZmFzdFJlYWxsb2MobV9wYXJz
ZWRQcm9wZXJ0aWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fbWF4UGFyc2VkUHJvcGVydGllcyAqIHNpemVvZihDU1NQcm9wZXJ0eSop
KSk7CisgICAgICAgICAgICBtX21heFBhcnNlZFByb3BlcnRpZXMgKiBzaXplb2YoQ1NTUHJvcGVy
dHkqKSkpOwogICAgIH0KLSAgICBtX3BhcnNlZFByb3BlcnRpZXNbbV9udW1QYXJzZWRQcm9wZXJ0
aWVzKytdID0gcHJvcC5yZWxlYXNlKCk7CisgICAgbV9wYXJzZWRQcm9wZXJ0aWVzW21fbnVtUGFy
c2VkUHJvcGVydGllcysrXSA9IHByb3AubGVha1B0cigpOwogfQogCiB2b2lkIENTU1BhcnNlcjo6
cm9sbGJhY2tMYXN0UHJvcGVydGllcyhpbnQgbnVtKQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU2Vn
bWVudGVkRm9udEZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1NlZ21lbnRl
ZEZvbnRGYWNlLmNwcAkocmV2aXNpb24gNjIxNDUpCisrKyBXZWJDb3JlL2Nzcy9DU1NTZWdtZW50
ZWRGb250RmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCwxNSArMTEwLDE1IEBAIEZvbnRE
YXRhKiBDU1NTZWdtZW50ZWRGb250RmFjZTo6Z2V0Rm9udEQKICAgICAgICAgRm9udFRyYWl0c01h
c2sgdHJhaXRzTWFzayA9IG1fZm9udEZhY2VzW2ldLT50cmFpdHNNYXNrKCk7CiAgICAgICAgIGJv
b2wgc3ludGhldGljQm9sZCA9ICEodHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8IEZv
bnRXZWlnaHQ3MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFzaykp
ICYmIChkZXNpcmVkVHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8IEZvbnRXZWlnaHQ3
MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFzaykpOwogICAgICAg
ICBib29sIHN5bnRoZXRpY0l0YWxpYyA9ICEodHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01h
c2spICYmIChkZXNpcmVkVHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01hc2spOwotICAgICAg
ICBpZiAoY29uc3QgRm9udERhdGEqIGZhY2VGb250RGF0YSA9IG1fZm9udEZhY2VzW2ldLT5nZXRG
b250RGF0YShmb250RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykp
IHsKKyAgICAgICAgaWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmYWNlRm9udERhdGEgPSBtX2Zv
bnRGYWNlc1tpXS0+Z2V0Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzeW50aGV0aWNCb2xkLCBz
eW50aGV0aWNJdGFsaWMpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIWZhY2VGb250RGF0YS0+aXNT
ZWdtZW50ZWQoKSk7CiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8Q1NTRm9udEZhY2U6OlVuaWNv
ZGVSYW5nZT4mIHJhbmdlcyA9IG1fZm9udEZhY2VzW2ldLT5yYW5nZXMoKTsKICAgICAgICAgICAg
IHVuc2lnbmVkIG51bVJhbmdlcyA9IHJhbmdlcy5zaXplKCk7CiAgICAgICAgICAgICBpZiAoIW51
bVJhbmdlcykKLSAgICAgICAgICAgICAgICBmb250RGF0YS0+YXBwZW5kUmFuZ2UoRm9udERhdGFS
YW5nZSgwLCAweDdGRkZGRkZGLCBzdGF0aWNfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KGZh
Y2VGb250RGF0YSkpKTsKKyAgICAgICAgICAgICAgICBmb250RGF0YS0+YXBwZW5kUmFuZ2UoRm9u
dERhdGFSYW5nZSgwLCAweDdGRkZGRkZGLCBmYWNlRm9udERhdGEpKTsKICAgICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBudW1SYW5nZXM7
ICsraikKLSAgICAgICAgICAgICAgICAgICAgZm9udERhdGEtPmFwcGVuZFJhbmdlKEZvbnREYXRh
UmFuZ2UocmFuZ2VzW2pdLmZyb20oKSwgcmFuZ2VzW2pdLnRvKCksIHN0YXRpY19jYXN0PGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4oZmFjZUZvbnREYXRhKSkpOworICAgICAgICAgICAgICAgICAgICBm
b250RGF0YS0+YXBwZW5kUmFuZ2UoRm9udERhdGFSYW5nZShyYW5nZXNbal0uZnJvbSgpLCByYW5n
ZXNbal0udG8oKSwgZmFjZUZvbnREYXRhKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CkluZGV4OiBXZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2Nzcy9NZWRpYVF1ZXJ5LmNwcAkocmV2aXNpb24gNjIxNDUpCisrKyBXZWJDb3JlL2Nzcy9N
ZWRpYVF1ZXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBzdGF0aWMgYm9v
bCBleHByZXNzaW9uQ29tcGFyZShjb25zdCBNZWRpCiBNZWRpYVF1ZXJ5OjpNZWRpYVF1ZXJ5KFJl
c3RyaWN0b3IgciwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIFBhc3NPd25QdHI8VmVjdG9yPE1l
ZGlhUXVlcnlFeHAqPiA+IGV4cHJzKQogICAgIDogbV9yZXN0cmljdG9yKHIpCiAgICAgLCBtX21l
ZGlhVHlwZShtZWRpYVR5cGUubG93ZXIoKSkKLSAgICAsIG1fZXhwcmVzc2lvbnMoZXhwcnMucmVs
ZWFzZSgpKQorICAgICwgbV9leHByZXNzaW9ucyhleHBycykKICAgICAsIG1faWdub3JlZChmYWxz
ZSkKIHsKICAgICBpZiAoIW1fZXhwcmVzc2lvbnMpIHsKQEAgLTEwOCw3ICsxMDgsNiBAQCBNZWRp
YVF1ZXJ5OjpNZWRpYVF1ZXJ5KFJlc3RyaWN0b3IgciwgY29uCiBNZWRpYVF1ZXJ5Ojp+TWVkaWFR
dWVyeSgpCiB7CiAgICAgZGVsZXRlQWxsVmFsdWVzKCptX2V4cHJlc3Npb25zKTsKLSAgICBkZWxl
dGUgbV9leHByZXNzaW9uczsKIH0KIAogLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20v
I2NvbXBhcmUtbWVkaWEtcXVlcmllcwpJbmRleDogV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL01lZGlhUXVlcnkuaAkocmV2aXNpb24gNjIxNDUpCisr
KyBXZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0Mywx
MSBAQCBwdWJsaWM6CiAgICAgICAgIE9ubHksIE5vdCwgTm9uZQogICAgIH07CiAKLSAgICBNZWRp
YVF1ZXJ5KFJlc3RyaWN0b3IgciwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIFBhc3NPd25QdHI8
VmVjdG9yPE1lZGlhUXVlcnlFeHAqPiA+IGV4cHJzKTsKKyAgICBNZWRpYVF1ZXJ5KFJlc3RyaWN0
b3IsIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlLCBQYXNzT3duUHRyPFZlY3RvcjxNZWRpYVF1ZXJ5
RXhwKj4gPiBleHBycyk7CiAgICAgfk1lZGlhUXVlcnkoKTsKIAogICAgIFJlc3RyaWN0b3IgcmVz
dHJpY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJpY3RvcjsgfQotICAgIGNvbnN0IFZlY3Rv
cjxNZWRpYVF1ZXJ5RXhwKj4qIGV4cHJlc3Npb25zKCkgY29uc3QgeyByZXR1cm4gbV9leHByZXNz
aW9uczsgfQorICAgIGNvbnN0IFZlY3RvcjxNZWRpYVF1ZXJ5RXhwKj4qIGV4cHJlc3Npb25zKCkg
Y29uc3QgeyByZXR1cm4gbV9leHByZXNzaW9ucy5nZXQoKTsgfQogICAgIFN0cmluZyBtZWRpYVR5
cGUoKSBjb25zdCB7IHJldHVybiBtX21lZGlhVHlwZTsgfQogICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBNZWRpYVF1ZXJ5JiBvdGhlcikgY29uc3Q7CiAgICAgU3RyaW5nIGNzc1RleHQoKSBjb25z
dDsKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogIHByaXZhdGU6CiAgICAgUmVzdHJpY3RvciBt
X3Jlc3RyaWN0b3I7CiAgICAgU3RyaW5nIG1fbWVkaWFUeXBlOwotICAgIFZlY3RvcjxNZWRpYVF1
ZXJ5RXhwKj4qIG1fZXhwcmVzc2lvbnM7CisgICAgT3duUHRyPFZlY3RvcjxNZWRpYVF1ZXJ5RXhw
Kj4gPiBtX2V4cHJlc3Npb25zOwogICAgIGJvb2wgbV9pZ25vcmVkOwogICAgIFN0cmluZyBtX3Nl
cmlhbGl6YXRpb25DYWNoZTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUb2tlbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVG9rZW4uaAkocmV2aXNpb24gNjIxNDUpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTFRva2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yOTEsNyArMjkyLDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSFRNTFRva2VuOjpET0NUWVBFOgogICAgICAgICAg
ICAgbV9uYW1lID0gQXRvbWljU3RyaW5nKHRva2VuLm5hbWUoKS5kYXRhKCksIHRva2VuLm5hbWUo
KS5zaXplKCkpOwotICAgICAgICAgICAgbV9kb2N0eXBlRGF0YS5zZXQodG9rZW4ubV9kb2N0eXBl
RGF0YS5yZWxlYXNlKCkpOworICAgICAgICAgICAgbV9kb2N0eXBlRGF0YSA9IHRva2VuLm1fZG9j
dHlwZURhdGEucmVsZWFzZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSFRN
TFRva2VuOjpFbmRPZkZpbGU6CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZFJlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNo
ZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDYyMTQ1KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
UmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjcsOSArNDY3LDkgQEAgYm9vbCBDYWNo
ZWRSZXNvdXJjZTo6bWFrZVB1cmdlYWJsZShib29sIAogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKICAgICAgICAgaWYgKG1fZGF0YS0+aGFzUHVyZ2VhYmxlQnVmZmVyKCkpIHsK
LSAgICAgICAgICAgIG1fcHVyZ2VhYmxlRGF0YS5zZXQobV9kYXRhLT5yZWxlYXNlUHVyZ2VhYmxl
QnVmZmVyKCkpOworICAgICAgICAgICAgbV9wdXJnZWFibGVEYXRhID0gbV9kYXRhLT5yZWxlYXNl
UHVyZ2VhYmxlQnVmZmVyKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3B1cmdl
YWJsZURhdGEuc2V0KFB1cmdlYWJsZUJ1ZmZlcjo6Y3JlYXRlKG1fZGF0YS0+ZGF0YSgpLCBtX2Rh
dGEtPnNpemUoKSkpOworICAgICAgICAgICAgbV9wdXJnZWFibGVEYXRhID0gUHVyZ2VhYmxlQnVm
ZmVyOjpjcmVhdGUobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKTsKICAgICAgICAgICAg
IGlmICghbV9wdXJnZWFibGVEYXRhKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRD
YWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGln
aHRSZXN1bHRDYWNoZS5jcHAJKHJldmlzaW9uIDYyMTQ1KQorKysgV2ViQ29yZS9sb2FkZXIvQ3Jv
c3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYg
KzM1LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1c2luZyBuYW1lc3BhY2Ugc3RkOwor
CiAvLyBUaGVzZSB2YWx1ZXMgYXJlIGF0IHRoZSBkaXNjcmV0aW9uIG9mIHRoZSB1c2VyIGFnZW50
Lgogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRQcmVmbGlnaHRDYWNoZVRpbWVvdXRTZWNv
bmRzID0gNTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhQcmVmbGlnaHRDYWNoZVRpbWVvdXRT
ZWNvbmRzID0gNjAwOyAvLyBTaG91bGQgYmUgc2hvcnQgZW5vdWdoIHRvIG1pbmltaXplIHRoZSBy
aXNrIG9mIHVzaW5nIGEgcG9pc29uZWQgY2FjaGUgYWZ0ZXIgc3dpdGNoaW5nIHRvIGEgc2VjdXJl
IG5ldHdvcmsuCkBAIC0xNDMsMTAgKzE0NSwxNiBAQCBDcm9zc09yaWdpblByZWZsaWdodFJlc3Vs
dENhY2hlJiBDcm9zc09yCiAgICAgcmV0dXJuIGNhY2hlOwogfQogCi12b2lkIENyb3NzT3JpZ2lu
UHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OmFwcGVuZEVudHJ5KGNvbnN0IFN0cmluZyYgb3JpZ2luLCBj
b25zdCBLVVJMJiB1cmwsIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtKiBwcmVm
bGlnaHRSZXN1bHQpCit2b2lkIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OmFwcGVu
ZEVudHJ5KGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBLVVJMJiB1cmwsIFBhc3NPd25QdHI8
Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0+IHByZWZsaWdodFJlc3VsdCkKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG1fcHJlZmxpZ2h0SGFzaE1hcC5zZXQo
c3RkOjptYWtlX3BhaXIob3JpZ2luLCB1cmwpLCBwcmVmbGlnaHRSZXN1bHQpOworICAgIENyb3Nz
T3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtKiByZXN1bHRQdHIgPSBwcmVmbGlnaHRSZXN1
bHQubGVha1B0cigpOworICAgIHBhaXI8Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRIYXNoTWFw
OjppdGVyYXRvciwgYm9vbD4gYWRkUmVzdWx0ID0gbV9wcmVmbGlnaHRIYXNoTWFwLmFkZChtYWtl
X3BhaXIob3JpZ2luLCB1cmwpLCByZXN1bHRQdHIpOworICAgIGlmICghYWRkUmVzdWx0LnNlY29u
ZCkgeworICAgICAgICAvLyBEZWxldGUgdGhlIG9sZCB2YWx1ZSBiZWZvcmUgcmVwbGFjaW5nIHdp
dGggdGhlIG5ldyBvbmUuCisgICAgICAgIGRlbGV0ZSBhZGRSZXN1bHQuZmlyc3QtPnNlY29uZDsK
KyAgICAgICAgYWRkUmVzdWx0LmZpcnN0LT5zZWNvbmQgPSByZXN1bHRQdHI7CisgICAgfQogfQog
CiBib29sIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OmNhblNraXBQcmVmbGlnaHQo
Y29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IEtVUkwmIHVybCwgYm9vbCBpbmNsdWRlQ3JlZGVu
dGlhbHMsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBIVFRQSGVhZGVyTWFwJiByZXF1ZXN0
SGVhZGVycykKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdo
dFJlc3VsdENhY2hlLmgJKHJldmlzaW9uIDYyMTQ1KQorKysgV2ViQ29yZS9sb2FkZXIvQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3
IEBACiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY2LDcgKzY3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0
Q2FjaGUmIHNoYXJlZCgpOwogCi0gICAgICAgIHZvaWQgYXBwZW5kRW50cnkoY29uc3QgU3RyaW5n
JiBvcmlnaW4sIGNvbnN0IEtVUkwmLCBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRl
bSopOworICAgICAgICB2b2lkIGFwcGVuZEVudHJ5KGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25z
dCBLVVJMJiwgUGFzc093blB0cjxDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbT4p
OwogICAgICAgICBib29sIGNhblNraXBQcmVmbGlnaHQoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNv
bnN0IEtVUkwmLCBib29sIGluY2x1ZGVDcmVkZW50aWFscywgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IGNvbnN0IEhUVFBIZWFkZXJNYXAmIHJlcXVlc3RIZWFkZXJzKTsKIAogICAgICAgICB2b2lkIGVt
cHR5KCk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5j
cHAJKHJldmlzaW9uIDYyMTQ1KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkCiAgICAgaWYgKCFtX29wdGlvbnMuZm9yY2VQcmVm
bGlnaHQgJiYgaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY3Jvc3NPcmlnaW5SZXF1
ZXN0LT5odHRwTWV0aG9kKCksIGNyb3NzT3JpZ2luUmVxdWVzdC0+aHR0cEhlYWRlckZpZWxkcygp
KSkKICAgICAgICAgbWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdCgqY3Jvc3NPcmln
aW5SZXF1ZXN0KTsKICAgICBlbHNlIHsKLSAgICAgICAgbV9hY3R1YWxSZXF1ZXN0LnNldChjcm9z
c09yaWdpblJlcXVlc3QucmVsZWFzZSgpKTsKKyAgICAgICAgbV9hY3R1YWxSZXF1ZXN0ID0gY3Jv
c3NPcmlnaW5SZXF1ZXN0LnJlbGVhc2UoKTsKIAogICAgICAgICBpZiAoQ3Jvc3NPcmlnaW5QcmVm
bGlnaHRSZXN1bHRDYWNoZTo6c2hhcmVkKCkuY2FuU2tpcFByZWZsaWdodChkb2N1bWVudC0+c2Vj
dXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbV9hY3R1YWxSZXF1ZXN0LT51cmwoKSwgbV9vcHRp
b25zLmFsbG93Q3JlZGVudGlhbHMsIG1fYWN0dWFsUmVxdWVzdC0+aHR0cE1ldGhvZCgpLCBtX2Fj
dHVhbFJlcXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKSkpCiAgICAgICAgICAgICBwcmVmbGlnaHRT
dWNjZXNzKCk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA2MjE0NSkKKysr
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAzLDcg
KzgwMyw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN0YXJ0SWNvbkxvYWRlcigpCiAKICAgICAvLyBU
aGlzIGlzIGVpdGhlciBhIHJlbG9hZCBvciB0aGUgaWNvbiBkYXRhYmFzZSBzYWlkICJ5ZXMsIGxv
YWQgdGhlIGljb24iLCBzbyBraWNrIG9mZiB0aGUgbG9hZCEKICAgICBpZiAoIW1faWNvbkxvYWRl
cikKLSAgICAgICAgbV9pY29uTG9hZGVyLnNldChJY29uTG9hZGVyOjpjcmVhdGUobV9mcmFtZSku
cmVsZWFzZSgpKTsKKyAgICAgICAgbV9pY29uTG9hZGVyID0gSWNvbkxvYWRlcjo6Y3JlYXRlKG1f
ZnJhbWUpOwogICAgICAgICAKICAgICBtX2ljb25Mb2FkZXItPnN0YXJ0TG9hZGluZygpOwogfQpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDYyMTQ1
KQorKysgV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgxMiw3ICs4MTIsNyBAQCBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2Rl
KGNvbnN0CiAgICAgQVNTRVJUKG1fZW5jb2RpbmcuaXNWYWxpZCgpKTsKIAogICAgIGlmICghbV9j
b2RlYykKLSAgICAgICAgbV9jb2RlYy5zZXQobmV3VGV4dENvZGVjKG1fZW5jb2RpbmcpLnJlbGVh
c2UoKSk7CisgICAgICAgIG1fY29kZWMgPSBuZXdUZXh0Q29kZWMobV9lbmNvZGluZyk7CiAKICAg
ICBpZiAobV9idWZmZXIuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9jb2RlYy0+ZGVjb2Rl
KGRhdGEgKyBsZW5ndGhPZkJPTSwgbGVuIC0gbGVuZ3RoT2ZCT00sIGZhbHNlLCBtX2NvbnRlbnRU
eXBlID09IFhNTCwgbV9zYXdFcnJvcik7CkBAIC04NDIsNyArODQyLDcgQEAgU3RyaW5nIFRleHRS
ZXNvdXJjZURlY29kZXI6OmZsdXNoKCkKICAgICB9CiAKICAgICBpZiAoIW1fY29kZWMpCi0gICAg
ICAgIG1fY29kZWMuc2V0KG5ld1RleHRDb2RlYyhtX2VuY29kaW5nKS5yZWxlYXNlKCkpOworICAg
ICAgICBtX2NvZGVjID0gbmV3VGV4dENvZGVjKG1fZW5jb2RpbmcpOwogCiAgICAgU3RyaW5nIHJl
c3VsdCA9IG1fY29kZWMtPmRlY29kZShtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLnNpemUoKSwg
dHJ1ZSwgbV9jb250ZW50VHlwZSA9PSBYTUwgJiYgIW1fdXNlTGVuaWVudFhNTERlY29kaW5nLCBt
X3Nhd0Vycm9yKTsKICAgICBtX2J1ZmZlci5jbGVhcigpOwpJbmRleDogV2ViQ29yZS9wYWdlL0RP
TVRpbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NVGltZXIuY3BwCShyZXZp
c2lvbiA2MjE0NSkKKysrIFdlYkNvcmUvcGFnZS9ET01UaW1lci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzNiwxNyArMTM2LDE4IEBAIHZvaWQgRE9NVGltZXI6OmZpcmVkKCkKICAgICB9CiAKICAg
ICAvLyBEZWxldGUgdGltZXIgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9uIGZvciBvbmUtc2hv
dCB0aW1lcnMuCi0gICAgU2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24gPSBtX2FjdGlvbi5yZWxlYXNl
KCk7CisgICAgT3duUHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gbV9hY3Rpb24ucmVsZWFz
ZSgpOwogCiAgICAgLy8gTm8gYWNjZXNzIHRvIG1lbWJlciB2YXJpYWJsZXMgYWZ0ZXIgdGhpcyBw
b2ludC4KICAgICBkZWxldGUgdGhpczsKIAogICAgIGFjdGlvbi0+ZXhlY3V0ZShjb250ZXh0KTsK
KwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQq
IHRpbWVsaW5lQWdlbnQgPSBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpyZXRyaWV2ZShjb250ZXh0
KSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkRmlyZVRpbWVyKCk7CiAjZW5kaWYKLSAgICBk
ZWxldGUgYWN0aW9uOworCiAgICAgdGltZXJOZXN0aW5nTGV2ZWwgPSAwOwogfQogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCShyZXZpc2lvbiA2MjE0NSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODEsOSAr
ODEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgUGFzc093blB0cjxUPiA+
IHsKICAgICAgICAgdHlwZWRlZiBQYXNzT3duUHRyPFQ+IFR5cGU7Ci0gICAgICAgIHN0YXRpYyBU
eXBlIGNvcHkoY29uc3QgUGFzc093blB0cjxUPiYgb3duUHRyKQorICAgICAgICBzdGF0aWMgVHlw
ZSBjb3B5KFR5cGUgb3duUHRyKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUGFzc093
blB0cjxUPihzdGF0aWNfY2FzdDxUKj4ob3duUHRyLnJlbGVhc2UoKSkpOworICAgICAgICAgICAg
cmV0dXJuIG93blB0cjsKICAgICAgICAgfQogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vU2hhcmVkQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1NoYXJl
ZEJ1ZmZlci5jcHAJKHJldmlzaW9uIDYyMTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCiAKICNpbmNsdWRlICJQdXJnZWFibGVCdWZmZXIuaCIKKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC04NiwxMSArODcs
MTEgQEAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6YQogICAgIHJldHVy
biBidWZmZXIucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVk
QnVmZmVyOjphZG9wdFB1cmdlYWJsZUJ1ZmZlcihQdXJnZWFibGVCdWZmZXIqIHB1cmdlYWJsZUJ1
ZmZlcikgCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjphZG9wdFB1cmdl
YWJsZUJ1ZmZlcihQYXNzT3duUHRyPFB1cmdlYWJsZUJ1ZmZlcj4gcHVyZ2VhYmxlQnVmZmVyKSAK
IHsgCiAgICAgQVNTRVJUKCFwdXJnZWFibGVCdWZmZXItPmlzUHVyZ2VhYmxlKCkpOwogICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IGNyZWF0ZSgpOwotICAgIGJ1ZmZlci0+bV9wdXJn
ZWFibGVCdWZmZXIuc2V0KHB1cmdlYWJsZUJ1ZmZlcik7CisgICAgYnVmZmVyLT5tX3B1cmdlYWJs
ZUJ1ZmZlciA9IHB1cmdlYWJsZUJ1ZmZlcjsKICAgICByZXR1cm4gYnVmZmVyLnJlbGVhc2UoKTsK
IH0KIApAQCAtMTg0LDcgKzE4NSw3IEBAIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRC
dWZmZXI6OmMKICAgICByZXR1cm4gY2xvbmU7CiB9CiAKLVB1cmdlYWJsZUJ1ZmZlciogU2hhcmVk
QnVmZmVyOjpyZWxlYXNlUHVyZ2VhYmxlQnVmZmVyKCkKK1Bhc3NPd25QdHI8UHVyZ2VhYmxlQnVm
ZmVyPiBTaGFyZWRCdWZmZXI6OnJlbGVhc2VQdXJnZWFibGVCdWZmZXIoKQogeyAKICAgICBBU1NF
UlQoaGFzT25lUmVmKCkpOyAKICAgICByZXR1cm4gbV9wdXJnZWFibGVCdWZmZXIucmVsZWFzZSgp
OyAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkocmV2aXNpb24gNjIxNDUpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3
IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBUaGUgYnVmZmVyIG11c3QgYmUgaW4gbm9uLXB1cmdl
YWJsZSBzdGF0ZSBiZWZvcmUgYWRvcHRlZCB0byBhIFNoYXJlZEJ1ZmZlci4gCiAgICAgLy8gSXQg
d2lsbCBzdGF5IHRoYXQgd2F5IHVudGlsIHJlbGVhc2VkLgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gYWRvcHRQdXJnZWFibGVCdWZmZXIoUHVyZ2VhYmxlQnVmZmVyKiBidWZm
ZXIpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYWRvcHRQdXJnZWFibGVC
dWZmZXIoUGFzc093blB0cjxQdXJnZWFibGVCdWZmZXI+KTsKICAgICAKICAgICB+U2hhcmVkQnVm
ZmVyKCk7CiAgICAgCkBAIC05OCw3ICs5OCw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1B1cmdl
YWJsZUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fcHVyZ2VhYmxlQnVmZmVyLmdldCgpOyB9CiAK
ICAgICAvLyBFbnN1cmUgdGhpcyBidWZmZXIgaGFzIG5vIG90aGVyIGNsaWVudHMgYmVmb3JlIGNh
bGxpbmcgdGhpcy4KLSAgICBQdXJnZWFibGVCdWZmZXIqIHJlbGVhc2VQdXJnZWFibGVCdWZmZXIo
KTsKKyAgICBQYXNzT3duUHRyPFB1cmdlYWJsZUJ1ZmZlcj4gcmVsZWFzZVB1cmdlYWJsZUJ1ZmZl
cigpOwogCiAgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgYnl0ZXMgYWZ0
ZXIgInBvc2l0aW9uIi4gImRhdGEiCiAgICAgLy8gcG9pbnRzIHRvIHRoZSBmaXJzdCBieXRlLgpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAko
cmV2aXNpb24gNjIxNDUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOSwxMSArMjE5LDEzIEBAIGJvb2wgUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3UKICAgICBzb3VyY2VHcmFwaGljQ29udGV4dC0+
dHJhbnNsYXRlKC1jbGlwcGVkU291cmNlUmVjdC54KCksIC1jbGlwcGVkU291cmNlUmVjdC55KCkp
OwogICAgIHNvdXJjZUdyYXBoaWNDb250ZXh0LT5zY2FsZShzY2FsZSk7CiAgICAgc291cmNlR3Jh
cGhpY0NvbnRleHQtPmNsZWFyUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBwYWludFJlY3Qu
c2l6ZSgpKSk7Ci0gICAgZmlsdGVyRGF0YS0+c291cmNlR3JhcGhpY0J1ZmZlci5zZXQoc291cmNl
R3JhcGhpYy5yZWxlYXNlKCkpOworICAgIGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNCdWZmZXIg
PSBzb3VyY2VHcmFwaGljLnJlbGVhc2UoKTsKICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQg
PSBjb250ZXh0OwogCiAgICAgY29udGV4dCA9IHNvdXJjZUdyYXBoaWNDb250ZXh0OwotICAgIG1f
ZmlsdGVyLnNldChvYmplY3QsIGZpbHRlckRhdGEucmVsZWFzZSgpKTsKKworICAgIEFTU0VSVCgh
bV9maWx0ZXIuY29udGFpbnMob2JqZWN0KSk7CisgICAgbV9maWx0ZXIuc2V0KG9iamVjdCwgZmls
dGVyRGF0YS5sZWFrUHRyKCkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAkocmV2aXNpb24g
NjIxNDUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBj
cmVhdGVNYXNrQW5kU3dhcENvbnQKICAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLW1h
c2tBYnNvbHV0ZUJvdW5kaW5nQm94LngoKSwgLW1hc2tBYnNvbHV0ZUJvdW5kaW5nQm94LnkoKSk7
CiAgICAgbWFza0ltYWdlQ29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7CiAKLSAgICBpbWFn
ZUJ1ZmZlci5zZXQobWFza0ltYWdlLnJlbGVhc2UoKSk7CisgICAgaW1hZ2VCdWZmZXIgPSBtYXNr
SW1hZ2UucmVsZWFzZSgpOwogICAgIHNhdmVkQ29udGV4dCA9IGNvbnRleHQ7CiAgICAgY29udGV4
dCA9IG1hc2tJbWFnZUNvbnRleHQ7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5jcHAJKHJldmlzaW9uIDYyMTQ1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODksNyArNTg5LDcgQEAgdm9pZCBS
ZW5kZXJTdHlsZTo6c2V0Q29udGVudChQYXNzUmVmUHRyPAogICAgIENvbnRlbnREYXRhKiBuZXdD
b250ZW50RGF0YTsKICAgICBpZiAocmV1c2VDb250ZW50ICYmIGNvbnRlbnQpIHsKICAgICAgICAg
Y29udGVudC0+Y2xlYXIoKTsKLSAgICAgICAgbmV3Q29udGVudERhdGEgPSBjb250ZW50LnJlbGVh
c2UoKTsKKyAgICAgICAgbmV3Q29udGVudERhdGEgPSBjb250ZW50LmxlYWtQdHIoKTsKICAgICB9
IGVsc2UKICAgICAgICAgbmV3Q29udGVudERhdGEgPSBuZXcgQ29udGVudERhdGE7CiAKQEAgLTYy
NSw3ICs2MjUsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRDb250ZW50KFBhc3NSZWZQdHI8CiAg
ICAgQ29udGVudERhdGEqIG5ld0NvbnRlbnREYXRhID0gMDsKICAgICBpZiAocmV1c2VDb250ZW50
ICYmIGNvbnRlbnQpIHsKICAgICAgICAgY29udGVudC0+Y2xlYXIoKTsKLSAgICAgICAgbmV3Q29u
dGVudERhdGEgPSBjb250ZW50LnJlbGVhc2UoKTsKKyAgICAgICAgbmV3Q29udGVudERhdGEgPSBj
b250ZW50LmxlYWtQdHIoKTsKICAgICB9IGVsc2UKICAgICAgICAgbmV3Q29udGVudERhdGEgPSBu
ZXcgQ29udGVudERhdGE7CiAKQEAgLTY1MSw3ICs2NTEsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpz
ZXRDb250ZW50KENvdW50ZXJDb250CiAgICAgQ29udGVudERhdGEqIG5ld0NvbnRlbnREYXRhID0g
MDsKICAgICBpZiAocmV1c2VDb250ZW50ICYmIGNvbnRlbnQpIHsKICAgICAgICAgY29udGVudC0+
Y2xlYXIoKTsKLSAgICAgICAgbmV3Q29udGVudERhdGEgPSBjb250ZW50LnJlbGVhc2UoKTsKKyAg
ICAgICAgbmV3Q29udGVudERhdGEgPSBjb250ZW50LmxlYWtQdHIoKTsKICAgICB9IGVsc2UKICAg
ICAgICAgbmV3Q29udGVudERhdGEgPSBuZXcgQ29udGVudERhdGE7CiAKQEAgLTczNSw3ICs3MzUs
NyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3coU2hhZG93RGF0CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBzaGFkb3dEYXRhLT5zZXROZXh0KHJhcmVEYXRhLT5tX2JveFNo
YWRvdy5yZWxlYXNlKCkpOworICAgIHNoYWRvd0RhdGEtPnNldE5leHQocmFyZURhdGEtPm1fYm94
U2hhZG93LmxlYWtQdHIoKSk7CiAgICAgcmFyZURhdGEtPm1fYm94U2hhZG93LnNldChzaGFkb3dE
YXRhKTsKIH0KIApJbmRleDogV2ViQ29yZS93b3JrZXJzL0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBv
c2l0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdv
cmtlclJlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiA2MjE0NSkKKysrIFdlYkNvcmUvd29ya2Vycy9E
ZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Nyw3
ICszODcsNyBAQCB2b2lkIERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpjb25uCiAgICAg
aWYgKHByb3h5LT50aHJlYWQoKSkKICAgICAgICAgcHJveHktPnRocmVhZCgpLT5ydW5Mb29wKCku
cG9zdFRhc2soU2hhcmVkV29ya2VyQ29ubmVjdFRhc2s6OmNyZWF0ZShwb3J0KSk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXI+IGxvYWRlciA9IGFk
b3B0UmVmKG5ldyBTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXIod29ya2VyLCBwb3J0LnJlbGVhc2Uo
KSwgcHJveHkucmVsZWFzZSgpKSk7CisgICAgICAgIFJlZlB0cjxTaGFyZWRXb3JrZXJTY3JpcHRM
b2FkZXI+IGxvYWRlciA9IGFkb3B0UmVmKG5ldyBTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXIod29y
a2VyLCBwb3J0LCBwcm94eS5yZWxlYXNlKCkpKTsKICAgICAgICAgbG9hZGVyLT5sb2FkKHVybCk7
CiAgICAgfQogfQpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAkocmV2aXNpb24gNjIx
NDUpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIFdvcmtlckNvbnRleHQ6OnBvc3RUYXNrKFBhc3NPd25Q
dHI8CiAgICAgdGhyZWFkKCktPnJ1bkxvb3AoKS5wb3N0VGFzayh0YXNrKTsKIH0KIAotaW50IFdv
cmtlckNvbnRleHQ6OnNldFRpbWVvdXQoU2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24sIGludCB0aW1l
b3V0KQoraW50IFdvcmtlckNvbnRleHQ6OnNldFRpbWVvdXQoUGFzc093blB0cjxTY2hlZHVsZWRB
Y3Rpb24+IGFjdGlvbiwgaW50IHRpbWVvdXQpCiB7CiAgICAgcmV0dXJuIERPTVRpbWVyOjppbnN0
YWxsKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYWN0aW9uLCB0aW1lb3V0LCB0cnVlKTsKIH0K
QEAgLTE5Miw3ICsxOTIsNyBAQCB2b2lkIFdvcmtlckNvbnRleHQ6OmNsZWFyVGltZW91dChpbnQg
dGltCiAgICAgRE9NVGltZXI6OnJlbW92ZUJ5SWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0
aW1lb3V0SWQpOwogfQogCi1pbnQgV29ya2VyQ29udGV4dDo6c2V0SW50ZXJ2YWwoU2NoZWR1bGVk
QWN0aW9uKiBhY3Rpb24sIGludCB0aW1lb3V0KQoraW50IFdvcmtlckNvbnRleHQ6OnNldEludGVy
dmFsKFBhc3NPd25QdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24sIGludCB0aW1lb3V0KQogewog
ICAgIHJldHVybiBET01UaW1lcjo6aW5zdGFsbChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGFj
dGlvbiwgdGltZW91dCwgZmFsc2UpOwogfQpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCShy
ZXZpc2lvbiA2MjE0NSkKKysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTg5LDkgKzg5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBX
b3JrZXJOYXZpZ2F0b3IqIG5hdmlnYXRvcigpIGNvbnN0OwogCiAgICAgICAgIC8vIFRpbWVycwot
ICAgICAgICBpbnQgc2V0VGltZW91dChTY2hlZHVsZWRBY3Rpb24qLCBpbnQgdGltZW91dCk7Cisg
ICAgICAgIGludCBzZXRUaW1lb3V0KFBhc3NPd25QdHI8U2NoZWR1bGVkQWN0aW9uPiwgaW50IHRp
bWVvdXQpOwogICAgICAgICB2b2lkIGNsZWFyVGltZW91dChpbnQgdGltZW91dElkKTsKLSAgICAg
ICAgaW50IHNldEludGVydmFsKFNjaGVkdWxlZEFjdGlvbiosIGludCB0aW1lb3V0KTsKKyAgICAg
ICAgaW50IHNldEludGVydmFsKFBhc3NPd25QdHI8U2NoZWR1bGVkQWN0aW9uPiwgaW50IHRpbWVv
dXQpOwogICAgICAgICB2b2lkIGNsZWFySW50ZXJ2YWwoaW50IHRpbWVvdXRJZCk7CiAKICAgICAg
ICAgLy8gU2NyaXB0RXhlY3V0aW9uQ29udGV4dApJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtl
ck1lc3NhZ2luZ1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2Vy
TWVzc2FnaW5nUHJveHkuY3BwCShyZXZpc2lvbiA2MjE0NSkKKysrIFdlYkNvcmUvd29ya2Vycy9X
b3JrZXJNZXNzYWdpbmdQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Myw3ICsyNDMsNyBA
QCB2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5OjpzdGFydFdvcmtlckNvCiAKIHZvaWQgV29ya2Vy
TWVzc2FnaW5nUHJveHk6OnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVs
QXJyYXk+IGNoYW5uZWxzKQogewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRh
c2soTWVzc2FnZVdvcmtlclRhc2s6OmNyZWF0ZShtZXNzYWdlLCBjaGFubmVscy5yZWxlYXNlKCks
IHRoaXMpKTsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKE1lc3NhZ2VX
b3JrZXJUYXNrOjpjcmVhdGUobWVzc2FnZSwgY2hhbm5lbHMsIHRoaXMpKTsKIH0KIAogdm9pZCBX
b3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRD
aGFubmVsQXJyYXk+IGNoYW5uZWxzKQpAQCAtMjUzLDkgKzI1Myw5IEBAIHZvaWQgV29ya2VyTWVz
c2FnaW5nUHJveHk6OnBvc3RNZXNzYWdlVG8KIAogICAgIGlmIChtX3dvcmtlclRocmVhZCkgewog
ICAgICAgICArK21fdW5jb25maXJtZWRNZXNzYWdlQ291bnQ7Ci0gICAgICAgIG1fd29ya2VyVGhy
ZWFkLT5ydW5Mb29wKCkucG9zdFRhc2soTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpjcmVhdGUo
bWVzc2FnZSwgY2hhbm5lbHMucmVsZWFzZSgpKSk7CisgICAgICAgIG1fd29ya2VyVGhyZWFkLT5y
dW5Mb29wKCkucG9zdFRhc2soTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpjcmVhdGUobWVzc2Fn
ZSwgY2hhbm5lbHMpKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9xdWV1ZWRFYXJseVRhc2tzLmFw
cGVuZChNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s6OmNyZWF0ZShtZXNzYWdlLCBjaGFubmVscy5y
ZWxlYXNlKCkpKTsKKyAgICAgICAgbV9xdWV1ZWRFYXJseVRhc2tzLmFwcGVuZChNZXNzYWdlV29y
a2VyQ29udGV4dFRhc2s6OmNyZWF0ZShtZXNzYWdlLCBjaGFubmVscykpOwogfQogCiB2b2lkIFdv
cmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoUGFzc093
blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTdHJpbmcmIG1v
ZGUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60159</attachid>
            <date>2010-06-30 15:59:42 -0700</date>
            <delta_ts>2010-06-30 16:27:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41320-20100630155940.patch</filename>
            <type>text/plain</type>
            <size>52956</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMjA3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTAtMDYtMzAgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBhZG9wdFB0ciBhbmQgbGVha1B0ciBmdW5jdGlvbnMgZm9yIE93
blB0ciBhbmQgUGFzc093blB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDEzMjAKKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVwYXJzZUZvckV4Y2VwdGlvbkluZm9JZk5lY2Vzc2Fy
eSk6IFVzZSBhc3NpZ25tZW50CisgICAgICAgIGluc3RlYWQgb2Ygc2V0IHNpbmNlIHRoZSByZXN1
bHQgb2YgcmVwYXJzZUV4Y2VwdGlvbkluZm8gaXMgbm93IGEKKyAgICAgICAgUGFzc093blB0ci4K
KworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOiBDaGFuZ2UgZXh0cmFjdEV4Y2VwdGlv
bkluZm8gdG8gcmV0dXJuIGEKKyAgICAgICAgUGFzc093blB0ciBpbnN0ZWFkIG9mIGEgcmF3IHBv
aW50ZXIuCisKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkV4ZWN1dGFibGU6OnJlcGFyc2VFeGNlcHRpb25JbmZvKTogUmV0dXJuIGEgUGFz
c093blB0ci4KKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OnJlcGFyc2VFeGNlcHRpb25J
bmZvKTogRGl0dG8uCisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpyZXBhcnNlRXhj
ZXB0aW9uSW5mbyk6IEFkZGVkLiBUaGlzIHdhcworICAgICAgICBpbiB0aGUgaGVhZGVyIGJlZm9y
ZSwgYnV0IGl0J3MgYmV0dGVyIHRvIG5vdCBoYXZlIGl0IHRoZXJlIHRvIHJlZHVjZQorICAgICAg
ICBoZWFkZXIgZGVwZW5kZW5jaWVzLiBSZXR1cm4gYSBQYXNzT3duUHRyLgorCisgICAgICAgICog
cnVudGltZS9FeGVjdXRhYmxlLmg6IE1hZGUgcmVwYXJzZUV4Y2VwdGlvbkluZm8gcmV0dXJuIGEg
UGFzc093blB0ciwKKyAgICAgICAgYW5kIHB1dCBpdCBpbiB0aGUgcHJpdmF0ZSBzZWN0aW9ucyBv
ZiBjbGFzc2VzIG90aGVyIHRoYW4gdGhlIGJhc2UgY2xhc3MuCisKKyAgICAgICAgKiB3dGYvTWVz
c2FnZVF1ZXVlLmg6CisgICAgICAgIChXVEY6Ok1lc3NhZ2VRdWV1ZTo6YXBwZW5kKTogVXNlIGxl
YWtQdHIgaW5zdGVhZCBvZiByZWxlYXNlLgorICAgICAgICAoV1RGOjpNZXNzYWdlUXVldWU6OmFw
cGVuZEFuZENoZWNrRW1wdHkpOiBEaXR0by4KKyAgICAgICAgKFdURjo6TWVzc2FnZVF1ZXVlOjpw
cmVwZW5kKTogRGl0dG8uCisKKyAgICAgICAgKiB3dGYvT3duUHRyLmg6IFR3ZWFrZWQgZm9ybWF0
dGluZy4gQ2hhbmdlZCB0aGUgcmVsZWFzZSBmdW5jdGlvbiB0byByZXR1cm4KKyAgICAgICAgYSBQ
YXNzT3duUHRyIHJhdGhlciB0aGFuIGEgcmF3IHBvaW50ZXIuIEFkZGVkIGEgbGVha1B0ciBmdW5j
dGlvbiB0aGF0CisgICAgICAgIHJldHVybnMgYSByYXcgcG9pbnRlci4gUHV0IHRoZSBjb25zdHJ1
Y3RvciB0aGF0IHRha2VzIGEgcmF3IHBvaW50ZXIgYW5kCisgICAgICAgIHRoZSBzZXQgZnVuY3Rp
b24gaW50byBhIHNlY3Rpb24gZ3VhcmRlZCBieSBMT09TRV9PV05fUFRSLiBBZGFwdGVkIHRvIHRo
ZQorICAgICAgICBuZXcgYWRvcHRQdHIgZnVuY3Rpb24gZnJvbSBQYXNzT3duUHRyLmguCisKKyAg
ICAgICAgKiB3dGYvUGFzc093blB0ci5oOiBUd2Vha2VkIGZvcm1hdHRpbmcuIFJlbmFtZWQgdGhl
IHJlbGVhc2UgZnVuY3Rpb24KKyAgICAgICAgdG8gbGVha1B0ci4gQWRkZWQgYW4gYWRvcHRQdHIg
ZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFBhc3NPd25QdHIuCisgICAgICAgIFB1dCB0aGUg
Y29uc3RydWN0b3IgYW5kIGFzc2lnbm1lbnQgb3BlcmF0b3JzIHRoYXQgdGFrZSBhIHJhdyBwb2lu
dGVyCisgICAgICAgIGludG8gYSBzZWN0aW9uIGd1YXJkZWQgYnkgTE9PU0VfUEFTU19PV05fUFRS
LgorCiAyMDEwLTA2LTI5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiA2MjIwMCkKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3YXJp
Y2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTUzOCw3ICsxNTM4LDcgQEAg
Ym9vbCBDb2RlQmxvY2s6OnJlcGFyc2VGb3JFeGNlcHRpb25JbmZvSQogICAgICAgICAgICAgc2Nv
cGVDaGFpbiA9IHNjb3BlQ2hhaW4tPm5leHQ7CiAgICAgfQogCi0gICAgbV9leGNlcHRpb25JbmZv
LnNldChtX293bmVyRXhlY3V0YWJsZS0+cmVwYXJzZUV4Y2VwdGlvbkluZm8obV9nbG9iYWxEYXRh
LCBzY29wZUNoYWluLCB0aGlzKSk7CisgICAgbV9leGNlcHRpb25JbmZvID0gbV9vd25lckV4ZWN1
dGFibGUtPnJlcGFyc2VFeGNlcHRpb25JbmZvKG1fZ2xvYmFsRGF0YSwgc2NvcGVDaGFpbiwgdGhp
cyk7CiAgICAgcmV0dXJuIG1fZXhjZXB0aW9uSW5mbzsKIH0KIApJbmRleDogSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDYyMjAwKQorKysgSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3YXJp
Y2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzksNiArMzksNyBAQAogI2lu
Y2x1ZGUgIlJlZ0V4cC5oIgogI2luY2x1ZGUgIlVTdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvRmFz
dEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDQ2LDcgKzQ0Nyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgaGFzRXhjZXB0aW9uSW5mbygpIGNvbnN0
IHsgcmV0dXJuIG1fZXhjZXB0aW9uSW5mbzsgfQogICAgICAgICB2b2lkIGNsZWFyRXhjZXB0aW9u
SW5mbygpIHsgbV9leGNlcHRpb25JbmZvLmNsZWFyKCk7IH0KLSAgICAgICAgRXhjZXB0aW9uSW5m
byogZXh0cmFjdEV4Y2VwdGlvbkluZm8oKSB7IEFTU0VSVChtX2V4Y2VwdGlvbkluZm8pOyByZXR1
cm4gbV9leGNlcHRpb25JbmZvLnJlbGVhc2UoKTsgfQorICAgICAgICBQYXNzT3duUHRyPEV4Y2Vw
dGlvbkluZm8+IGV4dHJhY3RFeGNlcHRpb25JbmZvKCk7CiAKICAgICAgICAgdm9pZCBhZGRFeHBy
ZXNzaW9uSW5mbyhjb25zdCBFeHByZXNzaW9uUmFuZ2VJbmZvJiBleHByZXNzaW9uSW5mbykgeyBB
U1NFUlQobV9leGNlcHRpb25JbmZvKTsgbV9leGNlcHRpb25JbmZvLT5tX2V4cHJlc3Npb25JbmZv
LmFwcGVuZChleHByZXNzaW9uSW5mbyk7IH0KICAgICAgICAgdm9pZCBhZGRHZXRCeUlkRXhjZXB0
aW9uSW5mbyhjb25zdCBHZXRCeUlkRXhjZXB0aW9uSW5mbyYgaW5mbykgeyBBU1NFUlQobV9leGNl
cHRpb25JbmZvKTsgbV9leGNlcHRpb25JbmZvLT5tX2dldEJ5SWRFeGNlcHRpb25JbmZvLmFwcGVu
ZChpbmZvKTsgfQpAQCAtNjY1LDYgKzY2NiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
fQogICAgIH07CiAKKyAgICBpbmxpbmUgUGFzc093blB0cjxFeGNlcHRpb25JbmZvPiBDb2RlQmxv
Y2s6OmV4dHJhY3RFeGNlcHRpb25JbmZvKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2V4Y2Vw
dGlvbkluZm8pOworICAgICAgICByZXR1cm4gbV9leGNlcHRpb25JbmZvLnJlbGVhc2UoKTsKKyAg
ICB9CisKICAgICBpbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6cihpbnQgaW5kZXgpCiAgICAg
ewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwpJbmRl
eDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiA2MjIwMCkKKysr
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIy
OSwxMSArMjI5LDExIEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjptYXJrQWdncmVnYXRlKE0K
ICAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPm1hcmtBZ2dyZWdhdGUobWFya1N0YWNr
KTsKIH0KIAotRXhjZXB0aW9uSW5mbyogRnVuY3Rpb25FeGVjdXRhYmxlOjpyZXBhcnNlRXhjZXB0
aW9uSW5mbyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluTm9kZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCitQYXNzT3duUHRyPEV4Y2VwdGlvbkluZm8+
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6cmVwYXJzZUV4Y2VwdGlvbkluZm8oSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIENvZGVCbG9jayogY29k
ZUJsb2NrKQogewogICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBuZXdGdW5jdGlvbkJvZHkg
PSBnbG9iYWxEYXRhLT5wYXJzZXItPnBhcnNlPEZ1bmN0aW9uQm9keU5vZGU+KGdsb2JhbERhdGEs
IDAsIDAsIG1fc291cmNlKTsKICAgICBpZiAoIW5ld0Z1bmN0aW9uQm9keSkKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBQYXNzT3duUHRyPEV4Y2VwdGlvbkluZm8+KCk7CiAgICAg
aWYgKG1fZm9yY2VVc2VzQXJndW1lbnRzKQogICAgICAgICBuZXdGdW5jdGlvbkJvZHktPnNldFVz
ZXNBcmd1bWVudHMoKTsKICAgICBuZXdGdW5jdGlvbkJvZHktPmZpbmlzaFBhcnNpbmcobV9wYXJh
bWV0ZXJzLCBtX25hbWUpOwpAQCAtMjYwLDExICsyNjAsMTEgQEAgRXhjZXB0aW9uSW5mbyogRnVu
Y3Rpb25FeGVjdXRhYmxlOjpyZXBhcgogICAgIHJldHVybiBuZXdDb2RlQmxvY2stPmV4dHJhY3RF
eGNlcHRpb25JbmZvKCk7CiB9CiAKLUV4Y2VwdGlvbkluZm8qIEV2YWxFeGVjdXRhYmxlOjpyZXBh
cnNlRXhjZXB0aW9uSW5mbyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNjb3BlQ2hhaW5Ob2Rl
KiBzY29wZUNoYWluTm9kZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCitQYXNzT3duUHRyPEV4Y2Vw
dGlvbkluZm8+IEV2YWxFeGVjdXRhYmxlOjpyZXBhcnNlRXhjZXB0aW9uSW5mbyhKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCiB7CiAgICAgUmVmUHRyPEV2YWxOb2RlPiBuZXdFdmFsQm9keSA9IGdsb2Jh
bERhdGEtPnBhcnNlci0+cGFyc2U8RXZhbE5vZGU+KGdsb2JhbERhdGEsIDAsIDAsIG1fc291cmNl
KTsKICAgICBpZiAoIW5ld0V2YWxCb2R5KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIFBhc3NPd25QdHI8RXhjZXB0aW9uSW5mbz4oKTsKIAogICAgIFNjb3BlQ2hhaW4gc2NvcGVD
aGFpbihzY29wZUNoYWluTm9kZSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IHNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCk7CkBAIC0zMzQsNiArMzM0LDEwIEBAIFVTdHJpbmcg
RnVuY3Rpb25FeGVjdXRhYmxlOjpwYXJhbVN0cmluZygKICAgICByZXR1cm4gYnVpbGRlci5idWls
ZCgpOwogfQogCi19OwotCitQYXNzT3duUHRyPEV4Y2VwdGlvbkluZm8+IFByb2dyYW1FeGVjdXRh
YmxlOjpyZXBhcnNlRXhjZXB0aW9uSW5mbyhKU0dsb2JhbERhdGEqLCBTY29wZUNoYWluTm9kZSos
IENvZGVCbG9jayopCit7CisgICAgLy8gQ29kZUJsb2NrcyBmb3IgcHJvZ3JhbSBjb2RlIGFyZSB0
cmFuc2llbnQgYW5kIHRoZXJlZm9yZSBkbyBub3QgZ2FpbiBmcm9tIGZyb20gdGhyb3dpbmcgb3V0
IHRoZWlyIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbi4KKyAgICByZXR1cm4gUGFzc093blB0cjxFeGNl
cHRpb25JbmZvPigpOworfQogCit9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
aAkocmV2aXNpb24gNjIyMDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkludGVycHJldGVyLmgi
CiAjaW5jbHVkZSAiTm9kZXMuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTcxLDcgKzE3Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHVzZXNBcmd1bWVudHMoKSBjb25zdCB7
IHJldHVybiBtX2ZlYXR1cmVzICYgQXJndW1lbnRzRmVhdHVyZTsgfQogICAgICAgICBib29sIG5l
ZWRzQWN0aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMgJiAoRXZhbEZlYXR1cmUg
fCBDbG9zdXJlRmVhdHVyZSB8IFdpdGhGZWF0dXJlIHwgQ2F0Y2hGZWF0dXJlKTsgfQogCi0gICAg
ICAgIHZpcnR1YWwgRXhjZXB0aW9uSW5mbyogcmVwYXJzZUV4Y2VwdGlvbkluZm8oSlNHbG9iYWxE
YXRhKiwgU2NvcGVDaGFpbk5vZGUqLCBDb2RlQmxvY2sqKSA9IDA7CisgICAgICAgIHZpcnR1YWwg
UGFzc093blB0cjxFeGNlcHRpb25JbmZvPiByZXBhcnNlRXhjZXB0aW9uSW5mbyhKU0dsb2JhbERh
dGEqLCBTY29wZUNoYWluTm9kZSosIENvZGVCbG9jayopID0gMDsKIAogICAgIHByb3RlY3RlZDoK
ICAgICAgICAgdm9pZCByZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBmaXJz
dExpbmUsIGludCBsYXN0TGluZSkKQEAgLTIwMyw3ICsyMDQsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBKU09iamVjdCogY29tcGlsZShFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSop
OwogCi0gICAgICAgIEV4Y2VwdGlvbkluZm8qIHJlcGFyc2VFeGNlcHRpb25JbmZvKEpTR2xvYmFs
RGF0YSosIFNjb3BlQ2hhaW5Ob2RlKiwgQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEV2YWxFeGVjdXRhYmxlPiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBFdmFsRXhlY3V0YWJsZShleGVj
LCBzb3VyY2UpKTsgfQogCiAgICAgcHJpdmF0ZToKQEAgLTIxMiw2ICsyMTIsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgICwgbV9ldmFsQ29kZUJsb2NrKDApCiAgICAgICAgIHsKICAg
ICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxFeGNlcHRpb25JbmZvPiByZXBh
cnNlRXhjZXB0aW9uSW5mbyhKU0dsb2JhbERhdGEqLCBTY29wZUNoYWluTm9kZSosIENvZGVCbG9j
ayopOworCiAgICAgICAgIEV2YWxDb2RlQmxvY2sqIG1fZXZhbENvZGVCbG9jazsKIAogI2lmIEVO
QUJMRShKSVQpCkBAIC0yNDksMTUgKzI1MiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
SlNPYmplY3QqIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSopOwogICAgICAgICBKU09iamVjdCogY29t
cGlsZShFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwogCi0gICAgICAgIC8vIENvZGVCbG9j
a3MgZm9yIHByb2dyYW0gY29kZSBhcmUgdHJhbnNpZW50IGFuZCB0aGVyZWZvcmUgZG8gbm90IGdh
aW4gZnJvbSBmcm9tIHRocm93aW5nIG91dCB0aGVyZSBleGNlcHRpb24gaW5mb3JtYXRpb24uCi0g
ICAgICAgIEV4Y2VwdGlvbkluZm8qIHJlcGFyc2VFeGNlcHRpb25JbmZvKEpTR2xvYmFsRGF0YSos
IFNjb3BlQ2hhaW5Ob2RlKiwgQ29kZUJsb2NrKikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIDA7IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQogICAgICAgICAgICAgOiBTY3Jp
cHRFeGVjdXRhYmxlKGV4ZWMsIHNvdXJjZSkKICAgICAgICAgICAgICwgbV9wcm9ncmFtQ29kZUJs
b2NrKDApCiAgICAgICAgIHsKICAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgUGFzc093blB0
cjxFeGNlcHRpb25JbmZvPiByZXBhcnNlRXhjZXB0aW9uSW5mbyhKU0dsb2JhbERhdGEqLCBTY29w
ZUNoYWluTm9kZSosIENvZGVCbG9jayopOworCiAgICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIG1f
cHJvZ3JhbUNvZGVCbG9jazsKIAogI2lmIEVOQUJMRShKSVQpCkBAIC0zNTAsNyArMzUzLDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3ltYm9sVGFibGU7IH0KIAogICAgICAgICB2b2lkIHJlY29tcGls
ZShFeGVjU3RhdGUqKTsKLSAgICAgICAgRXhjZXB0aW9uSW5mbyogcmVwYXJzZUV4Y2VwdGlvbklu
Zm8oSlNHbG9iYWxEYXRhKiwgU2NvcGVDaGFpbk5vZGUqLCBDb2RlQmxvY2sqKTsKICAgICAgICAg
dm9pZCBtYXJrQWdncmVnYXRlKE1hcmtTdGFjayYgbWFya1N0YWNrKTsKICAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RnVuY3Rpb25FeGVjdXRhYmxlPiBmcm9tR2xvYmFsQ29kZShjb25zdCBJZGVu
dGlmaWVyJiwgRXhlY1N0YXRlKiwgRGVidWdnZXIqLCBjb25zdCBTb3VyY2VDb2RlJiwgaW50KiBl
cnJMaW5lID0gMCwgVVN0cmluZyogZXJyTXNnID0gMCk7CiAKQEAgLTM4Niw2ICszODgsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21waWxlRm9yQ2FsbChFeGVjU3RhdGUqLCBT
Y29wZUNoYWluTm9kZSopOwogICAgICAgICBib29sIGNvbXBpbGVGb3JDb25zdHJ1Y3QoRXhlY1N0
YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKIAorICAgICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8RXhj
ZXB0aW9uSW5mbz4gcmVwYXJzZUV4Y2VwdGlvbkluZm8oSlNHbG9iYWxEYXRhKiwgU2NvcGVDaGFp
bk5vZGUqLCBDb2RlQmxvY2sqKTsKKwogICAgICAgICB1bnNpZ25lZCBtX251bVZhcmlhYmxlcyA6
IDMxOwogICAgICAgICBib29sIG1fZm9yY2VVc2VzQXJndW1lbnRzIDogMTsKIApJbmRleDogSmF2
YVNjcmlwdENvcmUvd3RmL01lc3NhZ2VRdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3d0Zi9NZXNzYWdlUXVldWUuaAkocmV2aXNpb24gNjIyMDApCisrKyBKYXZhU2NyaXB0Q29y
ZS93dGYvTWVzc2FnZVF1ZXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgaW5saW5lIHZvaWQgTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6YXBw
ZW5kKFBhc3NPd25QdHI8RGF0YVR5cGU+IG1lc3NhZ2UpCiAgICAgewogICAgICAgICBNdXRleExv
Y2tlciBsb2NrKG1fbXV0ZXgpOwotICAgICAgICBtX3F1ZXVlLmFwcGVuZChtZXNzYWdlLnJlbGVh
c2UoKSk7CisgICAgICAgIG1fcXVldWUuYXBwZW5kKG1lc3NhZ2UubGVha1B0cigpKTsKICAgICAg
ICAgbV9jb25kaXRpb24uc2lnbmFsKCk7CiAgICAgfQogCkBAIC0xMDIsNyArMTAyLDcgQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgewogICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwog
ICAgICAgICBib29sIHdhc0VtcHR5ID0gbV9xdWV1ZS5pc0VtcHR5KCk7Ci0gICAgICAgIG1fcXVl
dWUuYXBwZW5kKG1lc3NhZ2UucmVsZWFzZSgpKTsKKyAgICAgICAgbV9xdWV1ZS5hcHBlbmQobWVz
c2FnZS5sZWFrUHRyKCkpOwogICAgICAgICBtX2NvbmRpdGlvbi5zaWduYWwoKTsKICAgICAgICAg
cmV0dXJuIHdhc0VtcHR5OwogICAgIH0KQEAgLTExMSw3ICsxMTEsNyBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICBpbmxpbmUgdm9pZCBNZXNzYWdlUXVldWU8RGF0YVR5cGU+OjpwcmVwZW5kKFBhc3NP
d25QdHI8RGF0YVR5cGU+IG1lc3NhZ2UpCiAgICAgewogICAgICAgICBNdXRleExvY2tlciBsb2Nr
KG1fbXV0ZXgpOwotICAgICAgICBtX3F1ZXVlLnByZXBlbmQobWVzc2FnZS5yZWxlYXNlKCkpOwor
ICAgICAgICBtX3F1ZXVlLnByZXBlbmQobWVzc2FnZS5sZWFrUHRyKCkpOwogICAgICAgICBtX2Nv
bmRpdGlvbi5zaWduYWwoKTsKICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9Pd25Q
dHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvT3duUHRyLmgJKHJldmlzaW9u
IDYyMjAwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL093blB0ci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsMzYgKzI4LDM5IEBACiAjaW5jbHVkZSA8YWxn
b3JpdGhtPgogI2luY2x1ZGUgPG1lbW9yeT4KIAorLy8gUmVtb3ZlIHRoaXMgb25jZSB3ZSBtYWtl
IGFsbCBXZWJLaXQgY29kZSBjb21wYXRpYmxlIHdpdGggc3RyaWN0ZXIgcnVsZXMgYWJvdXQgT3du
UHRyLgorI2RlZmluZSBMT09TRV9PV05fUFRSCisKIG5hbWVzcGFjZSBXVEYgewogCiAgICAgLy8g
VW5saWtlIG1vc3Qgb2Ygb3VyIHNtYXJ0IHBvaW50ZXJzLCBPd25QdHIgY2FuIHRha2UgZWl0aGVy
IHRoZSBwb2ludGVyIHR5cGUgb3IgdGhlIHBvaW50ZWQtdG8gdHlwZS4KIAotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzT3duUHRyOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNsYXNzIFBhc3NPd25QdHI7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc093blB0cjxU
PiBhZG9wdFB0cihUKik7CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgT3duUHRy
IDogcHVibGljIE5vbmNvcHlhYmxlIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBP
d25QdHIgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBSZW1vdmVQb2ludGVyPFQ+OjpUeXBlIFZhbHVlVHlwZTsKICAgICAgICAgdHlw
ZWRlZiBWYWx1ZVR5cGUqIFB0clR5cGU7CiAKLSAgICAgICAgZXhwbGljaXQgT3duUHRyKFB0clR5
cGUgcHRyID0gMCkgOiBtX3B0cihwdHIpIHsgfQorICAgICAgICBPd25QdHIoKSA6IG1fcHRyKDAp
IHsgfQorCiAgICAgICAgIC8vIFNlZSBjb21tZW50IGluIFBhc3NPd25QdHIuaCBmb3Igd2h5IHRo
aXMgdGFrZXMgYSBjb25zdCByZWZlcmVuY2UuCi0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBV
PiBPd25QdHIoY29uc3QgUGFzc093blB0cjxVPiYgbyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IE93blB0cihjb25zdCBQYXNzT3duUHRyPFU+JiBvKTsKIAogICAgICAgICAvLyBUaGlz
IGNvcHkgY29uc3RydWN0b3IgaXMgdXNlZCBpbXBsaWNpdGx5IGJ5IGdjYyB3aGVuIGl0IGdlbmVy
YXRlcwogICAgICAgICAvLyB0cmFuc2llbnRzIGZvciBhc3NpZ25pbmcgYSBQYXNzT3duUHRyPFQ+
IG9iamVjdCB0byBhIHN0YWNrLWFsbG9jYXRlZAotICAgICAgICAvLyBPd25QdHI8VD4gb2JqZWN0
LiAgSXQgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBleHBsaWNpdGx5IGFuZCBnY2MKKyAgICAgICAg
Ly8gT3duUHRyPFQ+IG9iamVjdC4gSXQgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBleHBsaWNpdGx5
IGFuZCBnY2MKICAgICAgICAgLy8gc2hvdWxkIG9wdGltaXplIGF3YXkgdGhlIGNvbnN0cnVjdG9y
IHdoZW4gZ2VuZXJhdGluZyBjb2RlLgotICAgICAgICBPd25QdHIoY29uc3QgT3duUHRyPFZhbHVl
VHlwZT4mIG8pOworICAgICAgICBPd25QdHIoY29uc3QgT3duUHRyPFZhbHVlVHlwZT4mKTsKIAog
ICAgICAgICB+T3duUHRyKCkgeyBkZWxldGVPd25lZFB0cihtX3B0cik7IH0KIAogICAgICAgICBQ
dHJUeXBlIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9Ci0gICAgICAgIFB0clR5cGUgcmVs
ZWFzZSgpIHsgUHRyVHlwZSBwdHIgPSBtX3B0cjsgbV9wdHIgPSAwOyByZXR1cm4gcHRyOyB9Ci0K
LSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJlbmFtZWQgdG8gYWRvcHQuIAotICAg
ICAgICB2b2lkIHNldChQdHJUeXBlIHB0cikgeyBBU1NFUlQoIXB0ciB8fCBtX3B0ciAhPSBwdHIp
OyBkZWxldGVPd25lZFB0cihtX3B0cik7IG1fcHRyID0gcHRyOyB9CiAKICAgICAgICAgdm9pZCBj
bGVhcigpIHsgZGVsZXRlT3duZWRQdHIobV9wdHIpOyBtX3B0ciA9IDA7IH0KKyAgICAgICAgUGFz
c093blB0cjxUPiByZWxlYXNlKCk7CisgICAgICAgIFB0clR5cGUgbGVha1B0cigpOwogCiAgICAg
ICAgIFZhbHVlVHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyBBU1NFUlQobV9wdHIpOyByZXR1cm4g
Km1fcHRyOyB9CiAgICAgICAgIFB0clR5cGUgb3BlcmF0b3ItPigpIGNvbnN0IHsgQVNTRVJUKG1f
cHRyKTsgcmV0dXJuIG1fcHRyOyB9CkBAIC02OSw2NSArNzIsOTMgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3B0ciA/ICZPd25QdHI6Om1fcHRyIDogMDsgfQogCiAgICAgICAgIE93blB0ciYgb3BlcmF0b3I9
KGNvbnN0IFBhc3NPd25QdHI8VD4mKTsKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IE93
blB0ciYgb3BlcmF0b3I9KGNvbnN0IFBhc3NPd25QdHI8VT4mKTsKKyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4gT3duUHRyJiBvcGVyYXRvcj0oY29uc3QgUGFzc093blB0cjxVPiYpOwogCiAg
ICAgICAgIHZvaWQgc3dhcChPd25QdHImIG8pIHsgc3RkOjpzd2FwKG1fcHRyLCBvLm1fcHRyKTsg
fQogCisjaWZkZWYgTE9PU0VfT1dOX1BUUgorICAgICAgICBleHBsaWNpdCBPd25QdHIoUHRyVHlw
ZSBwdHIpIDogbV9wdHIocHRyKSB7IH0KKyAgICAgICAgdm9pZCBzZXQoUHRyVHlwZSk7CisjZW5k
aWYKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFB0clR5cGUgbV9wdHI7CiAgICAgfTsKIAotICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gaW5saW5lIE93blB0
cjxUPjo6T3duUHRyKGNvbnN0IFBhc3NPd25QdHI8VT4mIG8pCi0gICAgICAgIDogbV9wdHIoby5y
ZWxlYXNlKCkpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUgVT4g
aW5saW5lIE93blB0cjxUPjo6T3duUHRyKGNvbnN0IFBhc3NPd25QdHI8VT4mIG8pCisgICAgICAg
IDogbV9wdHIoby5sZWFrUHRyKCkpCisgICAgeworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBQYXNzT3duUHRyPFQ+IE93blB0cjxUPjo6cmVsZWFzZSgpCiAgICAgewor
ICAgICAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOworICAgICAgICBtX3B0ciA9IDA7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihwdHIpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSB0eXBlbmFtZSBPd25QdHI8VD46OlB0clR5cGUgT3duUHRyPFQ+OjpsZWFrUHRyKCkK
KyAgICB7CisgICAgICAgIFB0clR5cGUgcHRyID0gbV9wdHI7CisgICAgICAgIG1fcHRyID0gMDsK
KyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyNpZmRlZiBMT09TRV9PV05fUFRSCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgT3duUHRyPFQ+OjpzZXQoUHRyVHlwZSBw
dHIpCisgICAgeworICAgICAgICBBU1NFUlQoIXB0ciB8fCBtX3B0ciAhPSBwdHIpOworICAgICAg
ICBkZWxldGVPd25lZFB0cihtX3B0cik7CisgICAgICAgIG1fcHRyID0gcHRyOwogICAgIH0KKyNl
bmRpZgogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBPd25QdHI8VD4mIE93blB0
cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFBhc3NPd25QdHI8VD4mIG8pCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIE93blB0cjxUPiYgT3duUHRyPFQ+OjpvcGVyYXRvcj0oY29uc3QgUGFz
c093blB0cjxUPiYgbykKICAgICB7CiAgICAgICAgIFQqIHB0ciA9IG1fcHRyOwotICAgICAgICBt
X3B0ciA9IG8ucmVsZWFzZSgpOworICAgICAgICBtX3B0ciA9IG8ubGVha1B0cigpOwogICAgICAg
ICBBU1NFUlQoIXB0ciB8fCBtX3B0ciAhPSBwdHIpOwogICAgICAgICBpZiAocHRyKQogICAgICAg
ICAgICAgZGVsZXRlT3duZWRQdHIocHRyKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0K
IAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gaW5saW5l
IE93blB0cjxUPiYgT3duUHRyPFQ+OjpvcGVyYXRvcj0oY29uc3QgUGFzc093blB0cjxVPiYgbykK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBpbmxpbmUgT3du
UHRyPFQ+JiBPd25QdHI8VD46Om9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRyPFU+JiBvKQogICAg
IHsKICAgICAgICAgVCogcHRyID0gbV9wdHI7Ci0gICAgICAgIG1fcHRyID0gby5yZWxlYXNlKCk7
CisgICAgICAgIG1fcHRyID0gby5sZWFrUHRyKCk7CiAgICAgICAgIEFTU0VSVCghcHRyIHx8IG1f
cHRyICE9IHB0cik7CiAgICAgICAgIGlmIChwdHIpCiAgICAgICAgICAgICBkZWxldGVPd25lZFB0
cihwdHIpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGlubGluZSB2b2lkIHN3YXAoT3duUHRyPFQ+JiBhLCBPd25QdHI8VD4mIGIpCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgc3dhcChPd25QdHI8VD4mIGEsIE93
blB0cjxUPiYgYikKICAgICB7CiAgICAgICAgIGEuc3dhcChiKTsKICAgICB9CiAKLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBPd25QdHI8VD4mIGEsIFUqIGIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPd25QdHI8VD4mIGEsIFUqIGIpCiAgICAg
ewogICAgICAgICByZXR1cm4gYS5nZXQoKSA9PSBiOyAKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShUKiBhLCBjb25z
dCBPd25QdHI8VT4mIGIpIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBib29sIG9wZXJhdG9yPT0oVCogYSwgY29uc3QgT3duUHRyPFU+JiBiKSAKICAgICB7CiAg
ICAgICAgIHJldHVybiBhID09IGIuZ2V0KCk7IAogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE93blB0cjxU
PiYgYSwgVSogYikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IE93blB0cjxUPiYgYSwgVSogYikKICAgICB7CiAgICAgICAg
IHJldHVybiBhLmdldCgpICE9IGI7IAogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFQqIGEsIGNvbnN0IE93blB0cjxV
PiYgYikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBv
cGVyYXRvciE9KFQqIGEsIGNvbnN0IE93blB0cjxVPiYgYikKICAgICB7CiAgICAgICAgIHJldHVy
biBhICE9IGIuZ2V0KCk7IAogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxp
bmUgdHlwZW5hbWUgT3duUHRyPFQ+OjpQdHJUeXBlIGdldFB0cihjb25zdCBPd25QdHI8VD4mIHAp
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIE93blB0cjxUPjo6UHRy
VHlwZSBnZXRQdHIoY29uc3QgT3duUHRyPFQ+JiBwKQogICAgIHsKICAgICAgICAgcmV0dXJuIHAu
Z2V0KCk7CiAgICAgfQpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NPd25QdHIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUGFzc093blB0ci5oCShyZXZpc2lvbiA2MjIw
MCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9QYXNzT3duUHRyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMw
LDMxICszMCwzNiBAQAogI2luY2x1ZGUgIk93blB0ckNvbW1vbi5oIgogI2luY2x1ZGUgIlR5cGVU
cmFpdHMuaCIKIAorLy8gUmVtb3ZlIHRoaXMgb25jZSB3ZSBtYWtlIGFsbCBXZWJLaXQgY29kZSBj
b21wYXRpYmxlIHdpdGggc3RyaWN0ZXIgcnVsZXMgYWJvdXQgUGFzc093blB0ci4KKyNkZWZpbmUg
TE9PU0VfUEFTU19PV05fUFRSCisKIG5hbWVzcGFjZSBXVEYgewogCiAgICAgLy8gVW5saWtlIG1v
c3Qgb2Ygb3VyIHNtYXJ0IHBvaW50ZXJzLCBQYXNzT3duUHRyIGNhbiB0YWtlIGVpdGhlciB0aGUg
cG9pbnRlciB0eXBlIG9yIHRoZSBwb2ludGVkLXRvIHR5cGUuCiAKLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gY2xhc3MgT3duUHRyOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIE93
blB0cjsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzT3duUHRyOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IFBhc3NPd25QdHI8VD4gYWRvcHRQdHIoVCopOwogCi0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NPd25QdHIgeworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNsYXNzIFBhc3NPd25QdHIgewogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBSZW1vdmVQb2ludGVyPFQ+OjpUeXBlIFZhbHVlVHlwZTsKICAgICAgICAgdHlwZWRl
ZiBWYWx1ZVR5cGUqIFB0clR5cGU7CiAKLSAgICAgICAgUGFzc093blB0cihQdHJUeXBlIHB0ciA9
IDApIDogbV9wdHIocHRyKSB7IH0KKyAgICAgICAgUGFzc093blB0cigpIDogbV9wdHIoMCkgeyB9
CisKICAgICAgICAgLy8gSXQgc29tZXdoYXQgYnJlYWtzIHRoZSB0eXBlIHN5c3RlbSB0byBhbGxv
dyB0cmFuc2ZlciBvZiBvd25lcnNoaXAgb3V0IG9mCiAgICAgICAgIC8vIGEgY29uc3QgUGFzc093
blB0ci4gSG93ZXZlciwgaXQgbWFrZXMgaXQgbXVjaCBlYXNpZXIgdG8gd29yayB3aXRoIFBhc3NP
d25QdHIKLSAgICAgICAgLy8gdGVtcG9yYXJpZXMsIGFuZCB3ZSBkb24ndCByZWFsbHkgaGF2ZSBh
IG5lZWQgdG8gdXNlIHJlYWwgY29uc3QgUGFzc093blB0cnMgCi0gICAgICAgIC8vIGFueXdheS4K
LSAgICAgICAgUGFzc093blB0cihjb25zdCBQYXNzT3duUHRyJiBvKSA6IG1fcHRyKG8ucmVsZWFz
ZSgpKSB7IH0KLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IFBhc3NPd25QdHIoY29uc3Qg
UGFzc093blB0cjxVPiYgbykgOiBtX3B0cihvLnJlbGVhc2UoKSkgeyB9CisgICAgICAgIC8vIHRl
bXBvcmFyaWVzLCBhbmQgd2UgZG9uJ3QgaGF2ZSBhIG5lZWQgdG8gdXNlIHJlYWwgY29uc3QgUGFz
c093blB0cnMgYW55d2F5LgorICAgICAgICBQYXNzT3duUHRyKGNvbnN0IFBhc3NPd25QdHImIG8p
IDogbV9wdHIoby5sZWFrUHRyKCkpIHsgfQorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBQ
YXNzT3duUHRyKGNvbnN0IFBhc3NPd25QdHI8VT4mIG8pIDogbV9wdHIoby5sZWFrUHRyKCkpIHsg
fQogCiAgICAgICAgIH5QYXNzT3duUHRyKCkgeyBkZWxldGVPd25lZFB0cihtX3B0cik7IH0KIAog
ICAgICAgICBQdHJUeXBlIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CiAKICAgICAgICAg
dm9pZCBjbGVhcigpIHsgbV9wdHIgPSAwOyB9Ci0gICAgICAgIFB0clR5cGUgcmVsZWFzZSgpIGNv
bnN0IHsgUHRyVHlwZSBwdHIgPSBtX3B0cjsgbV9wdHIgPSAwOyByZXR1cm4gcHRyOyB9CisgICAg
ICAgIFB0clR5cGUgbGVha1B0cigpIGNvbnN0OwogCiAgICAgICAgIFZhbHVlVHlwZSYgb3BlcmF0
b3IqKCkgY29uc3QgeyBBU1NFUlQobV9wdHIpOyByZXR1cm4gKm1fcHRyOyB9CiAgICAgICAgIFB0
clR5cGUgb3BlcmF0b3ItPigpIGNvbnN0IHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJuIG1fcHRyOyB9
CkBAIC02NSwxMDUgKzcwLDEyOSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgdHlwZWRlZiBQ
dHJUeXBlIFBhc3NPd25QdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlOwogICAgICAgICBvcGVyYXRv
ciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9wdHIgPyAmUGFzc093blB0
cjo6bV9wdHIgOiAwOyB9CiAKLSAgICAgICAgUGFzc093blB0ciYgb3BlcmF0b3I9KFQqKTsKICAg
ICAgICAgUGFzc093blB0ciYgb3BlcmF0b3I9KGNvbnN0IFBhc3NPd25QdHI8VD4mKTsKLSAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IFBhc3NPd25QdHImIG9wZXJhdG9yPShjb25zdCBQYXNz
T3duUHRyPFU+Jik7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFBhc3NPd25QdHImIG9w
ZXJhdG9yPShjb25zdCBQYXNzT3duUHRyPFU+Jik7CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4gZnJpZW5kIFBhc3NPd25QdHI8VT4gYWRvcHRQdHIoVSopOworCisjaWZkZWYgTE9PU0Vf
UEFTU19PV05fUFRSCisgICAgICAgIFBhc3NPd25QdHIoUHRyVHlwZSBwdHIpIDogbV9wdHIocHRy
KSB7IH0KKyAgICAgICAgUGFzc093blB0ciYgb3BlcmF0b3I9KFB0clR5cGUpOworI2VuZGlmCiAK
ICAgICBwcml2YXRlOgorI2lmbmRlZiBMT09TRV9QQVNTX09XTl9QVFIKKyAgICAgICAgZXhwbGlj
aXQgUGFzc093blB0cihQdHJUeXBlIHB0cikgOiBtX3B0cihwdHIpIHsgfQorI2VuZGlmCisKICAg
ICAgICAgbXV0YWJsZSBQdHJUeXBlIG1fcHRyOwogICAgIH07CiAKLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gaW5saW5lIFBhc3NPd25QdHI8VD4mIFBhc3NPd25QdHI8VD46Om9wZXJhdG9yPShU
KiBvcHRyKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBQYXNzT3du
UHRyPFQ+OjpQdHJUeXBlIFBhc3NPd25QdHI8VD46OmxlYWtQdHIoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgVCogcHRyID0gbV9wdHI7CisgICAgICAgIFB0clR5cGUgcHRyID0gbV9wdHI7CisgICAg
ICAgIG1fcHRyID0gMDsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyNpZmRlZiBMT09T
RV9QQVNTX09XTl9QVFIKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUGFzc093blB0
cjxUPiYgUGFzc093blB0cjxUPjo6b3BlcmF0b3I9KFB0clR5cGUgb3B0cikKKyAgICB7CisgICAg
ICAgIFB0clR5cGUgcHRyID0gbV9wdHI7CiAgICAgICAgIG1fcHRyID0gb3B0cjsKICAgICAgICAg
QVNTRVJUKCFwdHIgfHwgbV9wdHIgIT0gcHRyKTsKICAgICAgICAgaWYgKHB0cikKICAgICAgICAg
ICAgIGRlbGV0ZU93bmVkUHRyKHB0cik7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9Cisj
ZW5kaWYKIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgUGFzc093blB0cjxUPiYg
UGFzc093blB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFBhc3NPd25QdHI8VD4mIG9wdHIpCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NPd25QdHI8VD4mIFBhc3NPd25QdHI8VD46
Om9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRyPFQ+JiBvcHRyKQogICAgIHsKLSAgICAgICAgVCog
cHRyID0gbV9wdHI7Ci0gICAgICAgIG1fcHRyID0gb3B0ci5yZWxlYXNlKCk7CisgICAgICAgIFB0
clR5cGUgcHRyID0gbV9wdHI7CisgICAgICAgIG1fcHRyID0gb3B0ci5sZWFrUHRyKCk7CiAgICAg
ICAgIEFTU0VSVCghcHRyIHx8IG1fcHRyICE9IHB0cik7CiAgICAgICAgIGlmIChwdHIpCiAgICAg
ICAgICAgICBkZWxldGVPd25lZFB0cihwdHIpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
fQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBpbmxp
bmUgUGFzc093blB0cjxUPiYgUGFzc093blB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFBhc3NPd25Q
dHI8VT4mIG9wdHIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUg
VT4gaW5saW5lIFBhc3NPd25QdHI8VD4mIFBhc3NPd25QdHI8VD46Om9wZXJhdG9yPShjb25zdCBQ
YXNzT3duUHRyPFU+JiBvcHRyKQogICAgIHsKLSAgICAgICAgVCogcHRyID0gbV9wdHI7Ci0gICAg
ICAgIG1fcHRyID0gb3B0ci5yZWxlYXNlKCk7CisgICAgICAgIFB0clR5cGUgcHRyID0gbV9wdHI7
CisgICAgICAgIG1fcHRyID0gb3B0ci5sZWFrUHRyKCk7CiAgICAgICAgIEFTU0VSVCghcHRyIHx8
IG1fcHRyICE9IHB0cik7CiAgICAgICAgIGlmIChwdHIpCiAgICAgICAgICAgICBkZWxldGVPd25l
ZFB0cihwdHIpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUGFz
c093blB0cjxUPiYgYSwgY29uc3QgUGFzc093blB0cjxVPiYgYikgCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQYXNzT3du
UHRyPFQ+JiBhLCBjb25zdCBQYXNzT3duUHRyPFU+JiBiKSAKICAgICB7CiAgICAgICAgIHJldHVy
biBhLmdldCgpID09IGIuZ2V0KCk7IAogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBhc3NPd25QdHI8VD4m
IGEsIGNvbnN0IE93blB0cjxVPiYgYikgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQYXNzT3duUHRyPFQ+JiBhLCBjb25z
dCBPd25QdHI8VT4mIGIpIAogICAgIHsKICAgICAgICAgcmV0dXJuIGEuZ2V0KCkgPT0gYi5nZXQo
KTsgCiAgICAgfQogICAgIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE93blB0cjxUPiYgYSwgY29uc3QgUGFzc093blB0
cjxVPiYgYikgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBPd25QdHI8VD4mIGEsIGNvbnN0IFBhc3NPd25QdHI8VT4mIGIp
IAogICAgIHsKICAgICAgICAgcmV0dXJuIGEuZ2V0KCkgPT0gYi5nZXQoKTsgCiAgICAgfQogICAg
IAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFBhc3NPd25QdHI8VD4mIGEsIFUqIGIpIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUGFzc093blB0
cjxUPiYgYSwgVSogYikgCiAgICAgewogICAgICAgICByZXR1cm4gYS5nZXQoKSA9PSBiOyAKICAg
ICB9CiAgICAgCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBi
b29sIG9wZXJhdG9yPT0oVCogYSwgY29uc3QgUGFzc093blB0cjxVPiYgYikgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShUKiBhLCBj
b25zdCBQYXNzT3duUHRyPFU+JiBiKSAKICAgICB7CiAgICAgICAgIHJldHVybiBhID09IGIuZ2V0
KCk7IAogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQYXNzT3duUHRyPFQ+JiBhLCBjb25zdCBQYXNz
T3duUHRyPFU+JiBiKSAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBhc3NPd25QdHI8VD4mIGEsIGNvbnN0IFBhc3NPd25Q
dHI8VT4mIGIpIAogICAgIHsKICAgICAgICAgcmV0dXJuIGEuZ2V0KCkgIT0gYi5nZXQoKTsgCiAg
ICAgfQogICAgIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFBhc3NPd25QdHI8VD4mIGEsIGNvbnN0IE93blB0cjxVPiYg
YikgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBQYXNzT3duUHRyPFQ+JiBhLCBjb25zdCBPd25QdHI8VT4mIGIpIAogICAg
IHsKICAgICAgICAgcmV0dXJuIGEuZ2V0KCkgIT0gYi5nZXQoKTsgCiAgICAgfQogICAgIAotICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IE93blB0cjxUPiYgYSwgY29uc3QgUGFzc093blB0cjxVPiYgYikgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBP
d25QdHI8VD4mIGEsIGNvbnN0IFBhc3NPd25QdHI8VT4mIGIpIAogICAgIHsKICAgICAgICAgcmV0
dXJuIGEuZ2V0KCkgIT0gYi5nZXQoKTsgCiAgICAgfQogICAgIAotICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBhc3NPd25Q
dHI8VD4mIGEsIFUqIGIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQYXNzT3duUHRyPFQ+JiBhLCBVKiBiKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGEuZ2V0KCkgIT0gYjsgCiAgICAgfQogICAgIAotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFQqIGEsIGNv
bnN0IFBhc3NPd25QdHI8VT4mIGIpIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0oVCogYSwgY29uc3QgUGFzc093blB0cjxVPiYgYikg
CiAgICAgewogICAgICAgICByZXR1cm4gYSAhPSBiLmdldCgpOyAKICAgICB9CiAKLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIFBhc3NPd25QdHI8VD4gc3RhdGlj
X3BvaW50ZXJfY2FzdChjb25zdCBQYXNzT3duUHRyPFU+JiBwKSAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgUGFzc093blB0cjxUPiBhZG9wdFB0cihUKiBwdHIpCisgICAgeworICAg
ICAgICByZXR1cm4gUGFzc093blB0cjxUPihwdHIpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBQYXNzT3duUHRyPFQ+IHN0YXRpY19wb2ludGVy
X2Nhc3QoY29uc3QgUGFzc093blB0cjxVPiYgcCkgCiAgICAgewotICAgICAgICByZXR1cm4gUGFz
c093blB0cjxUPihzdGF0aWNfY2FzdDxUKj4ocC5yZWxlYXNlKCkpKTsgCisgICAgICAgIHJldHVy
biBhZG9wdFB0cihzdGF0aWNfY2FzdDxUKj4ocC5sZWFrUHRyKCkpKTsKICAgICB9CiAKLSAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIFBhc3NPd25QdHI8VD4gY29u
c3RfcG9pbnRlcl9jYXN0KGNvbnN0IFBhc3NPd25QdHI8VT4mIHApIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBQYXNzT3duUHRyPFQ+IGNvbnN0X3BvaW50ZXJf
Y2FzdChjb25zdCBQYXNzT3duUHRyPFU+JiBwKSAKICAgICB7Ci0gICAgICAgIHJldHVybiBQYXNz
T3duUHRyPFQ+KGNvbnN0X2Nhc3Q8VCo+KHAucmVsZWFzZSgpKSk7IAorICAgICAgICByZXR1cm4g
YWRvcHRQdHIoY29uc3RfY2FzdDxUKj4ocC5sZWFrUHRyKCkpKTsKICAgICB9CiAKLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0cihjb25zdCBQYXNzT3duUHRyPFQ+JiBw
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHIoY29uc3QgUGFzc093
blB0cjxUPiYgcCkKICAgICB7CiAgICAgICAgIHJldHVybiBwLmdldCgpOwogICAgIH0KQEAgLTE3
MSw2ICsyMDAsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2lu
ZyBXVEY6OlBhc3NPd25QdHI7Cit1c2luZyBXVEY6OmFkb3B0UHRyOwogdXNpbmcgV1RGOjpjb25z
dF9wb2ludGVyX2Nhc3Q7CiB1c2luZyBXVEY6OnN0YXRpY19wb2ludGVyX2Nhc3Q7CiAKSW5kZXg6
IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZp
c2lvbiA2MjIwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTA2IEBACisyMDEwLTA2LTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYWRvcHRQ
dHIgYW5kIGxlYWtQdHIgZnVuY3Rpb25zIGZvciBPd25QdHIgYW5kIFBhc3NPd25QdHIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMzIwCisKKyAgICAg
ICAgTWFkZSBjb2RlIGNoYW5nZXMgcmVxdWlyZWQgYmVjYXVzZSBvZiB0aGUgY2hhbmdlIHRvIHRo
ZSByZWxlYXNlIGZ1bmN0aW9uLgorICAgICAgICBUaGUgZXF1aXZhbGVudCB0byB0aGUgb2xkIHJl
bGVhc2UgZnVuY3Rpb24gaXMgbm93IG5hbWVkIGxlYWtQdHIgYW5kCisgICAgICAgIHNob3VsZCBi
ZSB1c2VkIHNwYXJpbmdseS4gVGhlIG5ldyByZWxlYXNlIGZ1bmN0aW9uIHJldHVybnMgYSBQYXNz
T3duUHRyLgorCisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YSk6IENoYW5nZWQgY29kZSB0
byBjYWxsCisgICAgICAgIGxlYWtQdHIgaW5zdGVhZCBvZiByZWxlYXNlLgorICAgICAgICAqIGNz
cy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGRQcm9wZXJ0
eSk6IERpdHRvLgorCisgICAgICAgICogY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1NlZ21lbnRlZEZvbnRGYWNlOjpnZXRGb250RGF0YSk6IFJlbW92
ZWQgdW5uZWVkZWQgdHlwZQorICAgICAgICBjYXN0aW5nLiBOb3Qgc3VyZSB3aHkgdGhpcyBjaGFu
Z2VkIHRoZSB0eXBlIHRvIEZvbnREYXRhKiBhbmQgdGhlbgorICAgICAgICBjYXN0ZWQgYmFjayB0
byBTaW1wbGVGb250RGF0YSouCisKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5OjpNZWRpYVF1ZXJ5KTogUmVtb3ZlZCBjYWxsIHRvIHJl
bGVhc2Ugb24gYQorICAgICAgICBQYXNzT3duUHRyLCBzaW5jZSB0aGUgZGF0YSBtZW1iZXIgaXMg
bm93IGFuIE93blB0ci4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnk6On5NZWRpYVF1ZXJ5
KTogUmVtb3ZlZCBub3ctdW5uZWVkZWQgZGVsZXRlLgorICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5
Lmg6IENoYW5nZWQgbV9leHByZXNzaW9ucyB0byBiZSBhbiBPd25QdHIuCisKKyAgICAgICAgKiBo
dG1sL0hUTUxUb2tlbi5oOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljSFRNTFRva2VuOjpBdG9t
aWNIVE1MVG9rZW4pOiBVc2UgYXNzaWdubWVudCBpbnN0ZWFkCisgICAgICAgIG9mIHRoZSBzZXQg
ZnVuY3Rpb24gc2luY2UgdGhlcmUgYXJlIG5vIHJhdyBwb2ludGVycyBpbnZvbHZlZC4KKyAgICAg
ICAgKiBsb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UmVzb3VyY2U6Om1ha2VQdXJnZWFibGUpOiBEaXR0by4KKworICAgICAgICAqIGxvYWRlci9Dcm9z
c09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyb3Nz
T3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OmFwcGVuZEVudHJ5KTogVXNlCisgICAgICAgIGxl
YWtQdHIgaW5zdGVhZCBvZiByZWxlYXNlLCBhbmQgYWxzbyBhZGQgY29kZSB0byBkZWxldGUgdGhl
CisgICAgICAgIG9sZCB2YWx1ZSBpZiB0aGUgb3JpZ2luYWwgYW5kIFVSTCBhcmUgYWxyZWFkeSBp
biB0aGUgbWFwLiBJCisgICAgICAgIGJlbGlldmUgdGhpcyBmaXhlcyBhIHN0b3JhZ2UgbGVhay4K
KworICAgICAgICAqIGxvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmg6IENo
YW5nZSB0aGUgYXJndW1lbnQKKyAgICAgICAgdG8gYmUgUGFzc093blB0ciBpbnN0ZWFkIG9mIGEg
cmF3IHBvaW50ZXIsIHNpbmNlIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgZG9lcyB0YWtlIG93bmVy
c2hpcC4KKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXIpOgorICAgICAgICBVc2UgYXNzaWdubWVudCBpbnN0ZWFkIG9mIHRoZSBzZXQg
ZnVuY3Rpb24gc2luY2UgdGhlcmUgYXJlIG5vIHJhdworICAgICAgICBwb2ludGVycyBpbnZvbHZl
ZC4KKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXI6OnN0YXJ0SWNvbkxvYWRlcik6IERpdHRvLgorICAgICAgICAqIGxvYWRlci9U
ZXh0UmVzb3VyY2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURl
Y29kZXI6OmRlY29kZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVj
b2Rlcjo6Zmx1c2gpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvRE9NVGltZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NVGltZXI6OmZpcmVkKTogVXNlIE93blB0ciBpbnN0ZWFkIG9mIGFu
IGV4cGxpY2l0CisgICAgICAgIGRlbGV0ZS4KKworICAgICAgICAqIHBsYXRmb3JtL0Nyb3NzVGhy
ZWFkQ29waWVyLmg6IFJlbW92ZWQgZXhwbGljaXQgY29kZSB0aGF0IHRyaWVkCisgICAgICAgIHRv
IGNvcHkgUGFzc093blB0ciBpbiBhIGNvbXBsaWNhdGVkIHdheS4gSXQgZGlkIG5vdGhpbmcgZGlm
ZmVyZW50CisgICAgICAgIGZyb20ganVzdCByZXR1cm5pbmcgdGhlIFBhc3NPd25QdHIuIFRoaXMg
cHJlc3VtYWJseSB3YXMgZG9uZSBiZWNhdXNlCisgICAgICAgIFBhc3NSZWZQdHIgaGFzIGlzc3Vl
cyB3aGVuIGNvcGllZCBjcm9zcy10aHJlYWQsIGJ1dCB0aGVyZSBhcmUgbm8KKyAgICAgICAgc2lt
aWxhciBpc3N1ZXMgZm9yIFBhc3NPd25QdHIuIFNvbWVvbmUgd2l0aCBtb3JlIGV4cGVyaWVuY2Ug
dGhhbiBJCisgICAgICAgIG1pZ2h0IGJlIGFibGUgdG8gcmVtb3ZlIHRoZSBzcGVjaWFsaXphdGlv
biBhbHRvZ2V0aGVyLCBiZWNhdXNlCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyUGFzc1Rocm91
Z2ggZG9lcyB0aGUgcmlnaHQgdGhpbmcgaW4gdGhpcyBjYXNlLgorCisgICAgICAgICogcGxhdGZv
cm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6YWRv
cHRQdXJnZWFibGVCdWZmZXIpOiBDaGFuZ2VkIGFyZ3VtZW50IHRvCisgICAgICAgIGJlIGEgUGFz
c093blB0ci4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6cmVsZWFzZVB1cmdlYWJs
ZUJ1ZmZlcik6IENoYW5nZWQgcmVzdWx0IHRvCisgICAgICAgIGJlIGEgUGFzc093blB0ci4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDogVXBkYXRlZCBmb3IgY2hhbmdlcyBhYm92
ZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6
IENoYW5nZWQgb25lIHNpdGUKKyAgICAgICAgdG8gdXNlIGFzc2lnbm1lbnQgaW5zdGVhZCBvZiB0
aGUgc2V0IGZ1bmN0aW9uIHNpbmNlIHRoZXJlIGFyZSBubyByYXcKKyAgICAgICAgcG9pbnRlcnMg
aW52b2x2ZWQuIENoYW5nZWQgYW5vdGhlciBzaXRlIHRvIHVzZSBsZWFrUHRyIGluc3RlYWQKKyAg
ICAgICAgb2YgcmVsZWFzZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1hc2tBbmRTd2FwQ29udGV4
dEZvclRleHRHcmFkaWVudCk6IFVzZSBhc3NpZ25tZW50CisgICAgICAgIGluc3RlYWQgb2YgdGhl
IHNldCBmdW5jdGlvbiBzaW5jZSB0aGVyZSBhcmUgbm8gcmF3IHBvaW50ZXJzIGludm9sdmVkLgor
CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclN0eWxlOjpzZXRDb250ZW50KTogVXNlIGxlYWtQdHIgaW5zdGVhZCBvZiBy
ZWxlYXNlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldEJveFNoYWRvdyk6IERp
dHRvLgorCisgICAgICAgICogd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6Y29u
bmVjdFRvV29ya2VyKToKKyAgICAgICAgUmVtb3ZlZCB1bm5lZWRlZCBjYWxsIHRvIHJlbGVhc2Ug
ZnVuY3Rpb24gaW4gYSBjb2RlIHBhdGggdGhhdCBwYXNzZXMKKyAgICAgICAgYSBQYXNzT3duUHRy
IHRvIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIFBhc3NPd25QdHIuCisKKyAgICAgICAgKiB3b3Jr
ZXJzL1dvcmtlckNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6
c2V0VGltZW91dCk6IENoYW5nZWQgYXJndW1lbnQgdHlwZSB0byBQYXNzT3duUHRyLgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6c2V0SW50ZXJ2YWwpOiBEaXR0by4KKyAgICAgICAg
KiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaDogVXBkYXRlZCBmb3IgY2hhbmdlcyBhYm92ZS4KKwor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RNZXNzYWdlVG9Xb3Jr
ZXJDb250ZXh0KToKKyAgICAgICAgUmVtb3ZlZCB1bm5lZWRlZCBjYWxsIHRvIHJlbGVhc2UgZnVu
Y3Rpb24gaW4gY29kZSBwYXRocyB0aGF0IHBhc3MKKyAgICAgICAgYSBQYXNzT3duUHRyIHRvIGEg
ZnVuY3Rpb24gdGhhdCB0YWtlcyBhIFBhc3NPd25QdHIuCisKIDIwMTAtMDYtMzAgIFhhbiBMb3Bl
eiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEd1c3Rhdm8gTm9y
b25oYS4KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHJldmlzaW9uIDYyMjAwKQor
KysgV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODcsOCArMTg3LDEwIEBAIFNpbXBsZUZvbnREYXRhKiBDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm8K
ICAgICAgICAgZm9udERhdGEuc2V0KG5ldyBTaW1wbGVGb250RGF0YSh0ZW1wRGF0YS0+cGxhdGZv
cm1EYXRhKCksIHRydWUsIHRydWUpKTsKICAgICB9CiAKLSAgICBtX2ZvbnREYXRhVGFibGUuc2V0
KGhhc2hLZXksIGZvbnREYXRhLmdldCgpKTsKLSAgICByZXR1cm4gZm9udERhdGEucmVsZWFzZSgp
OworICAgIFNpbXBsZUZvbnREYXRhKiBmb250RGF0YVJhd1B0ciA9IGZvbnREYXRhLmxlYWtQdHIo
KTsKKyAgICBtX2ZvbnREYXRhVGFibGUuc2V0KGhhc2hLZXksIGZvbnREYXRhUmF3UHRyKTsKKwor
ICAgIHJldHVybiBmb250RGF0YVJhd1B0cjsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCShyZXZp
c2lvbiA2MjIwMCkKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4Nyw5ICszODcsOSBAQCB2b2lkIENTU1BhcnNlcjo6YWRkUHJvcGVydHkoaW50IHByb3BJ
ZCwgCiAgICAgICAgIGlmIChtX21heFBhcnNlZFByb3BlcnRpZXMgPiBVSU5UX01BWCAvIHNpemVv
ZihDU1NQcm9wZXJ0eSopKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX3BhcnNlZFBy
b3BlcnRpZXMgPSBzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eSoqPihmYXN0UmVhbGxvYyhtX3BhcnNl
ZFByb3BlcnRpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9tYXhQYXJzZWRQcm9wZXJ0aWVzICogc2l6ZW9mKENTU1Byb3BlcnR5Kikp
KTsKKyAgICAgICAgICAgIG1fbWF4UGFyc2VkUHJvcGVydGllcyAqIHNpemVvZihDU1NQcm9wZXJ0
eSopKSk7CiAgICAgfQotICAgIG1fcGFyc2VkUHJvcGVydGllc1ttX251bVBhcnNlZFByb3BlcnRp
ZXMrK10gPSBwcm9wLnJlbGVhc2UoKTsKKyAgICBtX3BhcnNlZFByb3BlcnRpZXNbbV9udW1QYXJz
ZWRQcm9wZXJ0aWVzKytdID0gcHJvcC5sZWFrUHRyKCk7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjpy
b2xsYmFja0xhc3RQcm9wZXJ0aWVzKGludCBudW0pCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTZWdt
ZW50ZWRGb250RmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVk
Rm9udEZhY2UuY3BwCShyZXZpc2lvbiA2MjIwMCkKKysrIFdlYkNvcmUvY3NzL0NTU1NlZ21lbnRl
ZEZvbnRGYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDE1ICsxMTAsMTUgQEAgRm9udERh
dGEqIENTU1NlZ21lbnRlZEZvbnRGYWNlOjpnZXRGb250RAogICAgICAgICBGb250VHJhaXRzTWFz
ayB0cmFpdHNNYXNrID0gbV9mb250RmFjZXNbaV0tPnRyYWl0c01hc2soKTsKICAgICAgICAgYm9v
bCBzeW50aGV0aWNCb2xkID0gISh0cmFpdHNNYXNrICYgKEZvbnRXZWlnaHQ2MDBNYXNrIHwgRm9u
dFdlaWdodDcwME1hc2sgfCBGb250V2VpZ2h0ODAwTWFzayB8IEZvbnRXZWlnaHQ5MDBNYXNrKSkg
JiYgKGRlc2lyZWRUcmFpdHNNYXNrICYgKEZvbnRXZWlnaHQ2MDBNYXNrIHwgRm9udFdlaWdodDcw
ME1hc2sgfCBGb250V2VpZ2h0ODAwTWFzayB8IEZvbnRXZWlnaHQ5MDBNYXNrKSk7CiAgICAgICAg
IGJvb2wgc3ludGhldGljSXRhbGljID0gISh0cmFpdHNNYXNrICYgRm9udFN0eWxlSXRhbGljTWFz
aykgJiYgKGRlc2lyZWRUcmFpdHNNYXNrICYgRm9udFN0eWxlSXRhbGljTWFzayk7Ci0gICAgICAg
IGlmIChjb25zdCBGb250RGF0YSogZmFjZUZvbnREYXRhID0gbV9mb250RmFjZXNbaV0tPmdldEZv
bnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSkg
eworICAgICAgICBpZiAoY29uc3QgU2ltcGxlRm9udERhdGEqIGZhY2VGb250RGF0YSA9IG1fZm9u
dEZhY2VzW2ldLT5nZXRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5
bnRoZXRpY0l0YWxpYykpIHsKICAgICAgICAgICAgIEFTU0VSVCghZmFjZUZvbnREYXRhLT5pc1Nl
Z21lbnRlZCgpKTsKICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxDU1NGb250RmFjZTo6VW5pY29k
ZVJhbmdlPiYgcmFuZ2VzID0gbV9mb250RmFjZXNbaV0tPnJhbmdlcygpOwogICAgICAgICAgICAg
dW5zaWduZWQgbnVtUmFuZ2VzID0gcmFuZ2VzLnNpemUoKTsKICAgICAgICAgICAgIGlmICghbnVt
UmFuZ2VzKQotICAgICAgICAgICAgICAgIGZvbnREYXRhLT5hcHBlbmRSYW5nZShGb250RGF0YVJh
bmdlKDAsIDB4N0ZGRkZGRkYsIHN0YXRpY19jYXN0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4oZmFj
ZUZvbnREYXRhKSkpOworICAgICAgICAgICAgICAgIGZvbnREYXRhLT5hcHBlbmRSYW5nZShGb250
RGF0YVJhbmdlKDAsIDB4N0ZGRkZGRkYsIGZhY2VGb250RGF0YSkpOwogICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG51bVJhbmdlczsg
KytqKQotICAgICAgICAgICAgICAgICAgICBmb250RGF0YS0+YXBwZW5kUmFuZ2UoRm9udERhdGFS
YW5nZShyYW5nZXNbal0uZnJvbSgpLCByYW5nZXNbal0udG8oKSwgc3RhdGljX2Nhc3Q8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPihmYWNlRm9udERhdGEpKSk7CisgICAgICAgICAgICAgICAgICAgIGZv
bnREYXRhLT5hcHBlbmRSYW5nZShGb250RGF0YVJhbmdlKHJhbmdlc1tqXS5mcm9tKCksIHJhbmdl
c1tqXS50bygpLCBmYWNlRm9udERhdGEpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KSW5kZXg6IFdlYkNvcmUvY3NzL01lZGlhUXVlcnkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL01lZGlhUXVlcnkuY3BwCShyZXZpc2lvbiA2MjIwMCkKKysrIFdlYkNvcmUvY3NzL01l
ZGlhUXVlcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHN0YXRpYyBib29s
IGV4cHJlc3Npb25Db21wYXJlKGNvbnN0IE1lZGkKIE1lZGlhUXVlcnk6Ok1lZGlhUXVlcnkoUmVz
dHJpY3RvciByLCBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSwgUGFzc093blB0cjxWZWN0b3I8TWVk
aWFRdWVyeUV4cCo+ID4gZXhwcnMpCiAgICAgOiBtX3Jlc3RyaWN0b3IocikKICAgICAsIG1fbWVk
aWFUeXBlKG1lZGlhVHlwZS5sb3dlcigpKQotICAgICwgbV9leHByZXNzaW9ucyhleHBycy5yZWxl
YXNlKCkpCisgICAgLCBtX2V4cHJlc3Npb25zKGV4cHJzKQogICAgICwgbV9pZ25vcmVkKGZhbHNl
KQogewogICAgIGlmICghbV9leHByZXNzaW9ucykgewpAQCAtMTA4LDcgKzEwOCw2IEBAIE1lZGlh
UXVlcnk6Ok1lZGlhUXVlcnkoUmVzdHJpY3RvciByLCBjb24KIE1lZGlhUXVlcnk6On5NZWRpYVF1
ZXJ5KCkKIHsKICAgICBkZWxldGVBbGxWYWx1ZXMoKm1fZXhwcmVzc2lvbnMpOwotICAgIGRlbGV0
ZSBtX2V4cHJlc3Npb25zOwogfQogCiAvLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3NvbS8j
Y29tcGFyZS1tZWRpYS1xdWVyaWVzCkluZGV4OiBXZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oCShyZXZpc2lvbiA2MjIwMCkKKysr
IFdlYkNvcmUvY3NzL01lZGlhUXVlcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDEx
IEBAIHB1YmxpYzoKICAgICAgICAgT25seSwgTm90LCBOb25lCiAgICAgfTsKIAotICAgIE1lZGlh
UXVlcnkoUmVzdHJpY3RvciByLCBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSwgUGFzc093blB0cjxW
ZWN0b3I8TWVkaWFRdWVyeUV4cCo+ID4gZXhwcnMpOworICAgIE1lZGlhUXVlcnkoUmVzdHJpY3Rv
ciwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIFBhc3NPd25QdHI8VmVjdG9yPE1lZGlhUXVlcnlF
eHAqPiA+IGV4cHJzKTsKICAgICB+TWVkaWFRdWVyeSgpOwogCiAgICAgUmVzdHJpY3RvciByZXN0
cmljdG9yKCkgY29uc3QgeyByZXR1cm4gbV9yZXN0cmljdG9yOyB9Ci0gICAgY29uc3QgVmVjdG9y
PE1lZGlhUXVlcnlFeHAqPiogZXhwcmVzc2lvbnMoKSBjb25zdCB7IHJldHVybiBtX2V4cHJlc3Np
b25zOyB9CisgICAgY29uc3QgVmVjdG9yPE1lZGlhUXVlcnlFeHAqPiogZXhwcmVzc2lvbnMoKSBj
b25zdCB7IHJldHVybiBtX2V4cHJlc3Npb25zLmdldCgpOyB9CiAgICAgU3RyaW5nIG1lZGlhVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFUeXBlOyB9CiAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IE1lZGlhUXVlcnkmIG90aGVyKSBjb25zdDsKICAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0
OwpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgcHJpdmF0ZToKICAgICBSZXN0cmljdG9yIG1f
cmVzdHJpY3RvcjsKICAgICBTdHJpbmcgbV9tZWRpYVR5cGU7Ci0gICAgVmVjdG9yPE1lZGlhUXVl
cnlFeHAqPiogbV9leHByZXNzaW9uczsKKyAgICBPd25QdHI8VmVjdG9yPE1lZGlhUXVlcnlFeHAq
PiA+IG1fZXhwcmVzc2lvbnM7CiAgICAgYm9vbCBtX2lnbm9yZWQ7CiAgICAgU3RyaW5nIG1fc2Vy
aWFsaXphdGlvbkNhY2hlOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRva2VuLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUb2tlbi5oCShyZXZpc2lvbiA2MjIwMCkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MVG9rZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI5Nyw3ICsyOTgsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBIVE1MVG9rZW46OkRPQ1RZUEU6CiAgICAgICAgICAg
ICBtX25hbWUgPSBBdG9taWNTdHJpbmcodG9rZW4ubmFtZSgpLmRhdGEoKSwgdG9rZW4ubmFtZSgp
LnNpemUoKSk7Ci0gICAgICAgICAgICBtX2RvY3R5cGVEYXRhLnNldCh0b2tlbi5tX2RvY3R5cGVE
YXRhLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBtX2RvY3R5cGVEYXRhID0gdG9rZW4ubV9kb2N0
eXBlRGF0YS5yZWxlYXNlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIVE1M
VG9rZW46OkVuZE9mRmlsZToKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hl
ZFJlc291cmNlLmNwcAkocmV2aXNpb24gNjIyMDApCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRS
ZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2Nyw5ICs0NjcsOSBAQCBib29sIENhY2hl
ZFJlc291cmNlOjptYWtlUHVyZ2VhYmxlKGJvb2wgCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAogICAgICAgICBpZiAobV9kYXRhLT5oYXNQdXJnZWFibGVCdWZmZXIoKSkgewot
ICAgICAgICAgICAgbV9wdXJnZWFibGVEYXRhLnNldChtX2RhdGEtPnJlbGVhc2VQdXJnZWFibGVC
dWZmZXIoKSk7CisgICAgICAgICAgICBtX3B1cmdlYWJsZURhdGEgPSBtX2RhdGEtPnJlbGVhc2VQ
dXJnZWFibGVCdWZmZXIoKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fcHVyZ2Vh
YmxlRGF0YS5zZXQoUHVyZ2VhYmxlQnVmZmVyOjpjcmVhdGUobV9kYXRhLT5kYXRhKCksIG1fZGF0
YS0+c2l6ZSgpKSk7CisgICAgICAgICAgICBtX3B1cmdlYWJsZURhdGEgPSBQdXJnZWFibGVCdWZm
ZXI6OmNyZWF0ZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOwogICAgICAgICAgICAg
aWYgKCFtX3B1cmdlYWJsZURhdGEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENh
Y2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdo
dFJlc3VsdENhY2hlLmNwcAkocmV2aXNpb24gNjIyMDApCisrKyBXZWJDb3JlL2xvYWRlci9Dcm9z
c09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiAr
MzUsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisK
IC8vIFRoZXNlIHZhbHVlcyBhcmUgYXQgdGhlIGRpc2NyZXRpb24gb2YgdGhlIHVzZXIgYWdlbnQu
CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdFByZWZsaWdodENhY2hlVGltZW91dFNlY29u
ZHMgPSA1Owogc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFByZWZsaWdodENhY2hlVGltZW91dFNl
Y29uZHMgPSA2MDA7IC8vIFNob3VsZCBiZSBzaG9ydCBlbm91Z2ggdG8gbWluaW1pemUgdGhlIHJp
c2sgb2YgdXNpbmcgYSBwb2lzb25lZCBjYWNoZSBhZnRlciBzd2l0Y2hpbmcgdG8gYSBzZWN1cmUg
bmV0d29yay4KQEAgLTE0MywxMCArMTQ1LDE2IEBAIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0
Q2FjaGUmIENyb3NzT3IKICAgICByZXR1cm4gY2FjaGU7CiB9CiAKLXZvaWQgQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZTo6YXBwZW5kRW50cnkoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNv
bnN0IEtVUkwmIHVybCwgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0qIHByZWZs
aWdodFJlc3VsdCkKK3ZvaWQgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6YXBwZW5k
RW50cnkoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IEtVUkwmIHVybCwgUGFzc093blB0cjxD
cm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbT4gcHJlZmxpZ2h0UmVzdWx0KQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbV9wcmVmbGlnaHRIYXNoTWFwLnNldChz
dGQ6Om1ha2VfcGFpcihvcmlnaW4sIHVybCksIHByZWZsaWdodFJlc3VsdCk7CisgICAgQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0qIHJlc3VsdFB0ciA9IHByZWZsaWdodFJlc3Vs
dC5sZWFrUHRyKCk7CisgICAgcGFpcjxDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdEhhc2hNYXA6
Oml0ZXJhdG9yLCBib29sPiBhZGRSZXN1bHQgPSBtX3ByZWZsaWdodEhhc2hNYXAuYWRkKG1ha2Vf
cGFpcihvcmlnaW4sIHVybCksIHJlc3VsdFB0cik7CisgICAgaWYgKCFhZGRSZXN1bHQuc2Vjb25k
KSB7CisgICAgICAgIC8vIERlbGV0ZSB0aGUgb2xkIHZhbHVlIGJlZm9yZSByZXBsYWNpbmcgd2l0
aCB0aGUgbmV3IG9uZS4KKyAgICAgICAgZGVsZXRlIGFkZFJlc3VsdC5maXJzdC0+c2Vjb25kOwor
ICAgICAgICBhZGRSZXN1bHQuZmlyc3QtPnNlY29uZCA9IHJlc3VsdFB0cjsKKyAgICB9CiB9CiAK
IGJvb2wgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6Y2FuU2tpcFByZWZsaWdodChj
b25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgS1VSTCYgdXJsLCBib29sIGluY2x1ZGVDcmVkZW50
aWFscywgY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIHJlcXVlc3RI
ZWFkZXJzKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRD
YWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0
UmVzdWx0Q2FjaGUuaAkocmV2aXNpb24gNjIyMDApCisrKyBXZWJDb3JlL2xvYWRlci9Dcm9zc09y
aWdpblByZWZsaWdodFJlc3VsdENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjYsNyArNjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRD
YWNoZSYgc2hhcmVkKCk7CiAKLSAgICAgICAgdm9pZCBhcHBlbmRFbnRyeShjb25zdCBTdHJpbmcm
IG9yaWdpbiwgY29uc3QgS1VSTCYsIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVt
Kik7CisgICAgICAgIHZvaWQgYXBwZW5kRW50cnkoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0
IEtVUkwmLCBQYXNzT3duUHRyPENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtPik7
CiAgICAgICAgIGJvb2wgY2FuU2tpcFByZWZsaWdodChjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29u
c3QgS1VSTCYsIGJvb2wgaW5jbHVkZUNyZWRlbnRpYWxzLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
Y29uc3QgSFRUUEhlYWRlck1hcCYgcmVxdWVzdEhlYWRlcnMpOwogCiAgICAgICAgIHZvaWQgZW1w
dHkoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNw
cAkocmV2aXNpb24gNjIyMDApCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcjo6RG9jdW1lbnRUaHJlYWQKICAgICBpZiAoIW1fb3B0aW9ucy5mb3JjZVByZWZs
aWdodCAmJiBpc1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChjcm9zc09yaWdpblJlcXVl
c3QtPmh0dHBNZXRob2QoKSwgY3Jvc3NPcmlnaW5SZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCkp
KQogICAgICAgICBtYWtlU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KCpjcm9zc09yaWdp
blJlcXVlc3QpOwogICAgIGVsc2UgewotICAgICAgICBtX2FjdHVhbFJlcXVlc3Quc2V0KGNyb3Nz
T3JpZ2luUmVxdWVzdC5yZWxlYXNlKCkpOworICAgICAgICBtX2FjdHVhbFJlcXVlc3QgPSBjcm9z
c09yaWdpblJlcXVlc3QucmVsZWFzZSgpOwogCiAgICAgICAgIGlmIChDcm9zc09yaWdpblByZWZs
aWdodFJlc3VsdENhY2hlOjpzaGFyZWQoKS5jYW5Ta2lwUHJlZmxpZ2h0KGRvY3VtZW50LT5zZWN1
cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBtX2FjdHVhbFJlcXVlc3QtPnVybCgpLCBtX29wdGlv
bnMuYWxsb3dDcmVkZW50aWFscywgbV9hY3R1YWxSZXF1ZXN0LT5odHRwTWV0aG9kKCksIG1fYWN0
dWFsUmVxdWVzdC0+aHR0cEhlYWRlckZpZWxkcygpKSkKICAgICAgICAgICAgIHByZWZsaWdodFN1
Y2Nlc3MoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDYyMjAwKQorKysg
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDMsNyAr
ODAzLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3RhcnRJY29uTG9hZGVyKCkKIAogICAgIC8vIFRo
aXMgaXMgZWl0aGVyIGEgcmVsb2FkIG9yIHRoZSBpY29uIGRhdGFiYXNlIHNhaWQgInllcywgbG9h
ZCB0aGUgaWNvbiIsIHNvIGtpY2sgb2ZmIHRoZSBsb2FkIQogICAgIGlmICghbV9pY29uTG9hZGVy
KQotICAgICAgICBtX2ljb25Mb2FkZXIuc2V0KEljb25Mb2FkZXI6OmNyZWF0ZShtX2ZyYW1lKS5y
ZWxlYXNlKCkpOworICAgICAgICBtX2ljb25Mb2FkZXIgPSBJY29uTG9hZGVyOjpjcmVhdGUobV9m
cmFtZSk7CiAgICAgICAgIAogICAgIG1faWNvbkxvYWRlci0+c3RhcnRMb2FkaW5nKCk7CiB9Cklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNjIyMDAp
CisrKyBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODEyLDcgKzgxMiw3IEBAIFN0cmluZyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZWNvZGUo
Y29uc3QKICAgICBBU1NFUlQobV9lbmNvZGluZy5pc1ZhbGlkKCkpOwogCiAgICAgaWYgKCFtX2Nv
ZGVjKQotICAgICAgICBtX2NvZGVjLnNldChuZXdUZXh0Q29kZWMobV9lbmNvZGluZykucmVsZWFz
ZSgpKTsKKyAgICAgICAgbV9jb2RlYyA9IG5ld1RleHRDb2RlYyhtX2VuY29kaW5nKTsKIAogICAg
IGlmIChtX2J1ZmZlci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBtX2NvZGVjLT5kZWNvZGUo
ZGF0YSArIGxlbmd0aE9mQk9NLCBsZW4gLSBsZW5ndGhPZkJPTSwgZmFsc2UsIG1fY29udGVudFR5
cGUgPT0gWE1MLCBtX3Nhd0Vycm9yKTsKQEAgLTg0Miw3ICs4NDIsNyBAQCBTdHJpbmcgVGV4dFJl
c291cmNlRGVjb2Rlcjo6Zmx1c2goKQogICAgIH0KIAogICAgIGlmICghbV9jb2RlYykKLSAgICAg
ICAgbV9jb2RlYy5zZXQobmV3VGV4dENvZGVjKG1fZW5jb2RpbmcpLnJlbGVhc2UoKSk7CisgICAg
ICAgIG1fY29kZWMgPSBuZXdUZXh0Q29kZWMobV9lbmNvZGluZyk7CiAKICAgICBTdHJpbmcgcmVz
dWx0ID0gbV9jb2RlYy0+ZGVjb2RlKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpLCB0
cnVlLCBtX2NvbnRlbnRUeXBlID09IFhNTCAmJiAhbV91c2VMZW5pZW50WE1MRGVjb2RpbmcsIG1f
c2F3RXJyb3IpOwogICAgIG1fYnVmZmVyLmNsZWFyKCk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9N
VGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01UaW1lci5jcHAJKHJldmlz
aW9uIDYyMjAwKQorKysgV2ViQ29yZS9wYWdlL0RPTVRpbWVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM2LDE3ICsxMzYsMTggQEAgdm9pZCBET01UaW1lcjo6ZmlyZWQoKQogICAgIH0KIAogICAg
IC8vIERlbGV0ZSB0aW1lciBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3Rpb24gZm9yIG9uZS1zaG90
IHRpbWVycy4KLSAgICBTY2hlZHVsZWRBY3Rpb24qIGFjdGlvbiA9IG1fYWN0aW9uLnJlbGVhc2Uo
KTsKKyAgICBPd25QdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBtX2FjdGlvbi5yZWxlYXNl
KCk7CiAKICAgICAvLyBObyBhY2Nlc3MgdG8gbWVtYmVyIHZhcmlhYmxlcyBhZnRlciB0aGlzIHBv
aW50LgogICAgIGRlbGV0ZSB0aGlzOwogCiAgICAgYWN0aW9uLT5leGVjdXRlKGNvbnRleHQpOwor
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCog
dGltZWxpbmVBZ2VudCA9IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnJldHJpZXZlKGNvbnRleHQp
KQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRGaXJlVGltZXIoKTsKICNlbmRpZgotICAgIGRl
bGV0ZSBhY3Rpb247CisKICAgICB0aW1lck5lc3RpbmdMZXZlbCA9IDA7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgJKHJldmlzaW9uIDYyMjAwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw5ICs4
MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBQYXNzT3duUHRyPFQ+ID4g
ewogICAgICAgICB0eXBlZGVmIFBhc3NPd25QdHI8VD4gVHlwZTsKLSAgICAgICAgc3RhdGljIFR5
cGUgY29weShjb25zdCBQYXNzT3duUHRyPFQ+JiBvd25QdHIpCisgICAgICAgIHN0YXRpYyBUeXBl
IGNvcHkoVHlwZSBvd25QdHIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBQYXNzT3du
UHRyPFQ+KHN0YXRpY19jYXN0PFQqPihvd25QdHIucmVsZWFzZSgpKSk7CisgICAgICAgICAgICBy
ZXR1cm4gb3duUHRyOwogICAgICAgICB9CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmNwcAkocmV2aXNpb24gNjIyMDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKIAogI2luY2x1ZGUgIlB1cmdlYWJsZUJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTg2LDExICs4Nywx
MSBAQCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjphCiAgICAgcmV0dXJu
IGJ1ZmZlci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRC
dWZmZXI6OmFkb3B0UHVyZ2VhYmxlQnVmZmVyKFB1cmdlYWJsZUJ1ZmZlciogcHVyZ2VhYmxlQnVm
ZmVyKSAKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmFkb3B0UHVyZ2Vh
YmxlQnVmZmVyKFBhc3NPd25QdHI8UHVyZ2VhYmxlQnVmZmVyPiBwdXJnZWFibGVCdWZmZXIpIAog
eyAKICAgICBBU1NFUlQoIXB1cmdlYWJsZUJ1ZmZlci0+aXNQdXJnZWFibGUoKSk7CiAgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gY3JlYXRlKCk7Ci0gICAgYnVmZmVyLT5tX3B1cmdl
YWJsZUJ1ZmZlci5zZXQocHVyZ2VhYmxlQnVmZmVyKTsKKyAgICBidWZmZXItPm1fcHVyZ2VhYmxl
QnVmZmVyID0gcHVyZ2VhYmxlQnVmZmVyOwogICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOwog
fQogCkBAIC0xODQsNyArMTg1LDcgQEAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1
ZmZlcjo6YwogICAgIHJldHVybiBjbG9uZTsKIH0KIAotUHVyZ2VhYmxlQnVmZmVyKiBTaGFyZWRC
dWZmZXI6OnJlbGVhc2VQdXJnZWFibGVCdWZmZXIoKQorUGFzc093blB0cjxQdXJnZWFibGVCdWZm
ZXI+IFNoYXJlZEJ1ZmZlcjo6cmVsZWFzZVB1cmdlYWJsZUJ1ZmZlcigpCiB7IAogICAgIEFTU0VS
VChoYXNPbmVSZWYoKSk7IAogICAgIHJldHVybiBtX3B1cmdlYWJsZUJ1ZmZlci5yZWxlYXNlKCk7
IApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCShyZXZpc2lvbiA2MjIwMCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcg
QEAgcHVibGljOgogICAgIAogICAgIC8vIFRoZSBidWZmZXIgbXVzdCBiZSBpbiBub24tcHVyZ2Vh
YmxlIHN0YXRlIGJlZm9yZSBhZG9wdGVkIHRvIGEgU2hhcmVkQnVmZmVyLiAKICAgICAvLyBJdCB3
aWxsIHN0YXkgdGhhdCB3YXkgdW50aWwgcmVsZWFzZWQuCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBhZG9wdFB1cmdlYWJsZUJ1ZmZlcihQdXJnZWFibGVCdWZmZXIqIGJ1ZmZl
cik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBhZG9wdFB1cmdlYWJsZUJ1
ZmZlcihQYXNzT3duUHRyPFB1cmdlYWJsZUJ1ZmZlcj4pOwogICAgIAogICAgIH5TaGFyZWRCdWZm
ZXIoKTsKICAgICAKQEAgLTk4LDcgKzk4LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzUHVyZ2Vh
YmxlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9wdXJnZWFibGVCdWZmZXIuZ2V0KCk7IH0KIAog
ICAgIC8vIEVuc3VyZSB0aGlzIGJ1ZmZlciBoYXMgbm8gb3RoZXIgY2xpZW50cyBiZWZvcmUgY2Fs
bGluZyB0aGlzLgotICAgIFB1cmdlYWJsZUJ1ZmZlciogcmVsZWFzZVB1cmdlYWJsZUJ1ZmZlcigp
OworICAgIFBhc3NPd25QdHI8UHVyZ2VhYmxlQnVmZmVyPiByZWxlYXNlUHVyZ2VhYmxlQnVmZmVy
KCk7CiAKICAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBieXRlcyBhZnRl
ciAicG9zaXRpb24iLiAiZGF0YSIKICAgICAvLyBwb2ludHMgdG8gdGhlIGZpcnN0IGJ5dGUuCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCShy
ZXZpc2lvbiA2MjIwMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDExICsyMTksMTMgQEAgYm9vbCBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdQogICAgIHNvdXJjZUdyYXBoaWNDb250ZXh0LT50
cmFuc2xhdGUoLWNsaXBwZWRTb3VyY2VSZWN0LngoKSwgLWNsaXBwZWRTb3VyY2VSZWN0LnkoKSk7
CiAgICAgc291cmNlR3JhcGhpY0NvbnRleHQtPnNjYWxlKHNjYWxlKTsKICAgICBzb3VyY2VHcmFw
aGljQ29udGV4dC0+Y2xlYXJSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHBhaW50UmVjdC5z
aXplKCkpKTsKLSAgICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVyLnNldChzb3VyY2VH
cmFwaGljLnJlbGVhc2UoKSk7CisgICAgZmlsdGVyRGF0YS0+c291cmNlR3JhcGhpY0J1ZmZlciA9
IHNvdXJjZUdyYXBoaWMucmVsZWFzZSgpOwogICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9
IGNvbnRleHQ7CiAKICAgICBjb250ZXh0ID0gc291cmNlR3JhcGhpY0NvbnRleHQ7Ci0gICAgbV9m
aWx0ZXIuc2V0KG9iamVjdCwgZmlsdGVyRGF0YS5yZWxlYXNlKCkpOworCisgICAgQVNTRVJUKCFt
X2ZpbHRlci5jb250YWlucyhvYmplY3QpKTsKKyAgICBtX2ZpbHRlci5zZXQob2JqZWN0LCBmaWx0
ZXJEYXRhLmxlYWtQdHIoKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCShyZXZpc2lvbiA2
MjIwMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgc3RhdGljIGlubGluZSBib29sIGNy
ZWF0ZU1hc2tBbmRTd2FwQ29udAogICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgtbWFz
a0Fic29sdXRlQm91bmRpbmdCb3gueCgpLCAtbWFza0Fic29sdXRlQm91bmRpbmdCb3gueSgpKTsK
ICAgICBtYXNrSW1hZ2VDb250ZXh0LT5jb25jYXRDVE0odHJhbnNmb3JtKTsKIAotICAgIGltYWdl
QnVmZmVyLnNldChtYXNrSW1hZ2UucmVsZWFzZSgpKTsKKyAgICBpbWFnZUJ1ZmZlciA9IG1hc2tJ
bWFnZS5yZWxlYXNlKCk7CiAgICAgc2F2ZWRDb250ZXh0ID0gY29udGV4dDsKICAgICBjb250ZXh0
ID0gbWFza0ltYWdlQ29udGV4dDsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmNwcAkocmV2aXNpb24gNjIyMDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4OSw3ICs1ODksNyBAQCB2b2lkIFJl
bmRlclN0eWxlOjpzZXRDb250ZW50KFBhc3NSZWZQdHI8CiAgICAgQ29udGVudERhdGEqIG5ld0Nv
bnRlbnREYXRhOwogICAgIGlmIChyZXVzZUNvbnRlbnQgJiYgY29udGVudCkgewogICAgICAgICBj
b250ZW50LT5jbGVhcigpOwotICAgICAgICBuZXdDb250ZW50RGF0YSA9IGNvbnRlbnQucmVsZWFz
ZSgpOworICAgICAgICBuZXdDb250ZW50RGF0YSA9IGNvbnRlbnQubGVha1B0cigpOwogICAgIH0g
ZWxzZQogICAgICAgICBuZXdDb250ZW50RGF0YSA9IG5ldyBDb250ZW50RGF0YTsKIApAQCAtNjI1
LDcgKzYyNSw3IEBAIHZvaWQgUmVuZGVyU3R5bGU6OnNldENvbnRlbnQoUGFzc1JlZlB0cjwKICAg
ICBDb250ZW50RGF0YSogbmV3Q29udGVudERhdGEgPSAwOwogICAgIGlmIChyZXVzZUNvbnRlbnQg
JiYgY29udGVudCkgewogICAgICAgICBjb250ZW50LT5jbGVhcigpOwotICAgICAgICBuZXdDb250
ZW50RGF0YSA9IGNvbnRlbnQucmVsZWFzZSgpOworICAgICAgICBuZXdDb250ZW50RGF0YSA9IGNv
bnRlbnQubGVha1B0cigpOwogICAgIH0gZWxzZQogICAgICAgICBuZXdDb250ZW50RGF0YSA9IG5l
dyBDb250ZW50RGF0YTsKIApAQCAtNjUxLDcgKzY1MSw3IEBAIHZvaWQgUmVuZGVyU3R5bGU6OnNl
dENvbnRlbnQoQ291bnRlckNvbnQKICAgICBDb250ZW50RGF0YSogbmV3Q29udGVudERhdGEgPSAw
OwogICAgIGlmIChyZXVzZUNvbnRlbnQgJiYgY29udGVudCkgewogICAgICAgICBjb250ZW50LT5j
bGVhcigpOwotICAgICAgICBuZXdDb250ZW50RGF0YSA9IGNvbnRlbnQucmVsZWFzZSgpOworICAg
ICAgICBuZXdDb250ZW50RGF0YSA9IGNvbnRlbnQubGVha1B0cigpOwogICAgIH0gZWxzZQogICAg
ICAgICBuZXdDb250ZW50RGF0YSA9IG5ldyBDb250ZW50RGF0YTsKIApAQCAtNzM1LDcgKzczNSw3
IEBAIHZvaWQgUmVuZGVyU3R5bGU6OnNldEJveFNoYWRvdyhTaGFkb3dEYXQKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIHNoYWRvd0RhdGEtPnNldE5leHQocmFyZURhdGEtPm1fYm94U2hh
ZG93LnJlbGVhc2UoKSk7CisgICAgc2hhZG93RGF0YS0+c2V0TmV4dChyYXJlRGF0YS0+bV9ib3hT
aGFkb3cubGVha1B0cigpKTsKICAgICByYXJlRGF0YS0+bV9ib3hTaGFkb3cuc2V0KHNoYWRvd0Rh
dGEpOwogfQogCkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9z
aXRvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29y
a2VyUmVwb3NpdG9yeS5jcHAJKHJldmlzaW9uIDYyMjAwKQorKysgV2ViQ29yZS93b3JrZXJzL0Rl
ZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg3LDcg
KzM4Nyw3IEBAIHZvaWQgRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmNvbm4KICAgICBp
ZiAocHJveHktPnRocmVhZCgpKQogICAgICAgICBwcm94eS0+dGhyZWFkKCktPnJ1bkxvb3AoKS5w
b3N0VGFzayhTaGFyZWRXb3JrZXJDb25uZWN0VGFzazo6Y3JlYXRlKHBvcnQpKTsKICAgICBlbHNl
IHsKLSAgICAgICAgUmVmUHRyPFNoYXJlZFdvcmtlclNjcmlwdExvYWRlcj4gbG9hZGVyID0gYWRv
cHRSZWYobmV3IFNoYXJlZFdvcmtlclNjcmlwdExvYWRlcih3b3JrZXIsIHBvcnQucmVsZWFzZSgp
LCBwcm94eS5yZWxlYXNlKCkpKTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZFdvcmtlclNjcmlwdExv
YWRlcj4gbG9hZGVyID0gYWRvcHRSZWYobmV3IFNoYXJlZFdvcmtlclNjcmlwdExvYWRlcih3b3Jr
ZXIsIHBvcnQsIHByb3h5LnJlbGVhc2UoKSkpOwogICAgICAgICBsb2FkZXItPmxvYWQodXJsKTsK
ICAgICB9CiB9CkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCShyZXZpc2lvbiA2MjIw
MCkKKysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgV29ya2VyQ29udGV4dDo6cG9zdFRhc2soUGFzc093blB0
cjwKICAgICB0aHJlYWQoKS0+cnVuTG9vcCgpLnBvc3RUYXNrKHRhc2spOwogfQogCi1pbnQgV29y
a2VyQ29udGV4dDo6c2V0VGltZW91dChTY2hlZHVsZWRBY3Rpb24qIGFjdGlvbiwgaW50IHRpbWVv
dXQpCitpbnQgV29ya2VyQ29udGV4dDo6c2V0VGltZW91dChQYXNzT3duUHRyPFNjaGVkdWxlZEFj
dGlvbj4gYWN0aW9uLCBpbnQgdGltZW91dCkKIHsKICAgICByZXR1cm4gRE9NVGltZXI6Omluc3Rh
bGwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBhY3Rpb24sIHRpbWVvdXQsIHRydWUpOwogfQpA
QCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgV29ya2VyQ29udGV4dDo6Y2xlYXJUaW1lb3V0KGludCB0
aW0KICAgICBET01UaW1lcjo6cmVtb3ZlQnlJZChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRp
bWVvdXRJZCk7CiB9CiAKLWludCBXb3JrZXJDb250ZXh0OjpzZXRJbnRlcnZhbChTY2hlZHVsZWRB
Y3Rpb24qIGFjdGlvbiwgaW50IHRpbWVvdXQpCitpbnQgV29ya2VyQ29udGV4dDo6c2V0SW50ZXJ2
YWwoUGFzc093blB0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiwgaW50IHRpbWVvdXQpCiB7CiAg
ICAgcmV0dXJuIERPTVRpbWVyOjppbnN0YWxsKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYWN0
aW9uLCB0aW1lb3V0LCBmYWxzZSk7CiB9CkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29u
dGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgJKHJl
dmlzaW9uIDYyMjAwKQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODksOSArODksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFdv
cmtlck5hdmlnYXRvciogbmF2aWdhdG9yKCkgY29uc3Q7CiAKICAgICAgICAgLy8gVGltZXJzCi0g
ICAgICAgIGludCBzZXRUaW1lb3V0KFNjaGVkdWxlZEFjdGlvbiosIGludCB0aW1lb3V0KTsKKyAg
ICAgICAgaW50IHNldFRpbWVvdXQoUGFzc093blB0cjxTY2hlZHVsZWRBY3Rpb24+LCBpbnQgdGlt
ZW91dCk7CiAgICAgICAgIHZvaWQgY2xlYXJUaW1lb3V0KGludCB0aW1lb3V0SWQpOwotICAgICAg
ICBpbnQgc2V0SW50ZXJ2YWwoU2NoZWR1bGVkQWN0aW9uKiwgaW50IHRpbWVvdXQpOworICAgICAg
ICBpbnQgc2V0SW50ZXJ2YWwoUGFzc093blB0cjxTY2hlZHVsZWRBY3Rpb24+LCBpbnQgdGltZW91
dCk7CiAgICAgICAgIHZvaWQgY2xlYXJJbnRlcnZhbChpbnQgdGltZW91dElkKTsKIAogICAgICAg
ICAvLyBTY3JpcHRFeGVjdXRpb25Db250ZXh0CkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvV29ya2Vy
TWVzc2FnaW5nUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJN
ZXNzYWdpbmdQcm94eS5jcHAJKHJldmlzaW9uIDYyMjAwKQorKysgV2ViQ29yZS93b3JrZXJzL1dv
cmtlck1lc3NhZ2luZ1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQzLDcgKzI0Myw3IEBA
IHZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnN0YXJ0V29ya2VyQ28KIAogdm9pZCBXb3JrZXJN
ZXNzYWdpbmdQcm94eTo6cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxB
cnJheT4gY2hhbm5lbHMpCiB7Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFz
ayhNZXNzYWdlV29ya2VyVGFzazo6Y3JlYXRlKG1lc3NhZ2UsIGNoYW5uZWxzLnJlbGVhc2UoKSwg
dGhpcykpOworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soTWVzc2FnZVdv
cmtlclRhc2s6OmNyZWF0ZShtZXNzYWdlLCBjaGFubmVscywgdGhpcykpOwogfQogCiB2b2lkIFdv
cmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENo
YW5uZWxBcnJheT4gY2hhbm5lbHMpCkBAIC0yNTMsOSArMjUzLDkgQEAgdm9pZCBXb3JrZXJNZXNz
YWdpbmdQcm94eTo6cG9zdE1lc3NhZ2VUbwogCiAgICAgaWYgKG1fd29ya2VyVGhyZWFkKSB7CiAg
ICAgICAgICsrbV91bmNvbmZpcm1lZE1lc3NhZ2VDb3VudDsKLSAgICAgICAgbV93b3JrZXJUaHJl
YWQtPnJ1bkxvb3AoKS5wb3N0VGFzayhNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s6OmNyZWF0ZSht
ZXNzYWdlLCBjaGFubmVscy5yZWxlYXNlKCkpKTsKKyAgICAgICAgbV93b3JrZXJUaHJlYWQtPnJ1
bkxvb3AoKS5wb3N0VGFzayhNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s6OmNyZWF0ZShtZXNzYWdl
LCBjaGFubmVscykpOwogICAgIH0gZWxzZQotICAgICAgICBtX3F1ZXVlZEVhcmx5VGFza3MuYXBw
ZW5kKE1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzazo6Y3JlYXRlKG1lc3NhZ2UsIGNoYW5uZWxzLnJl
bGVhc2UoKSkpOworICAgICAgICBtX3F1ZXVlZEVhcmx5VGFza3MuYXBwZW5kKE1lc3NhZ2VXb3Jr
ZXJDb250ZXh0VGFzazo6Y3JlYXRlKG1lc3NhZ2UsIGNoYW5uZWxzKSk7CiB9CiAKIHZvaWQgV29y
a2VyTWVzc2FnaW5nUHJveHk6OnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChQYXNzT3du
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYgbW9k
ZSkK
</data>
<flag name="review"
          id="47477"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="47497"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>