<?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>63448</bug_id>
          
          <creation_ts>2011-06-27 06:26:43 -0700</creation_ts>
          <short_desc>[Qt] Remove Phonon MediaPlayer from the tree.</short_desc>
          <delta_ts>2011-06-27 11:15:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexis Menard (darktears)">menard</reporter>
          <assigned_to name="Alexis Menard (darktears)">menard</assigned_to>
          <cc>ademar</cc>
    
    <cc>benjamin</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>sam</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>427886</commentid>
    <comment_count>0</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-06-27 06:26:43 -0700</bug_when>
    <thetext>[Qt] Remove Phonon MediaPlayer from the tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427910</commentid>
    <comment_count>1</comment_count>
      <attachid>98718</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-06-27 07:01:41 -0700</bug_when>
    <thetext>Created attachment 98718
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428009</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-06-27 09:42:31 -0700</bug_when>
    <thetext>Not that object to removing things, but I am curious why? Is Phonon dead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428013</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-27 09:47:02 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Not that object to removing things, but I am curious why? Is Phonon dead?

Phonon is deprecated within Qt (but still lives a life on its own as part of the KDE project). It also never worked properly for QtWebKit and noone is maintaining the current code.

Our current path is using GStreamer directly on Linux, Quicktime on Mac (and Windows if available). For other cases we will be using QtMultimedia. This provides a better experience for our users and GStreamer is already the backend we are using on the Nokia N9.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428014</commentid>
    <comment_count>4</comment_count>
      <attachid>98718</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-27 09:48:22 -0700</bug_when>
    <thetext>Comment on attachment 98718
Patch

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

&gt; Source/WebKit/qt/docs/qtwebkit.qdocconf:167
&gt; +                          K_DECLARE_PRIVATE

K_? Sounds like some KDE thing, not related to Phonon?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428026</commentid>
    <comment_count>5</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-06-27 10:03:32 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 98718 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98718&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/qt/docs/qtwebkit.qdocconf:167
&gt; &gt; +                          K_DECLARE_PRIVATE
&gt; 
&gt; K_? Sounds like some KDE thing, not related to Phonon?

May be, I&apos;ll remove it then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428030</commentid>
    <comment_count>6</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-06-27 10:04:47 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 98718 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98718&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/qt/docs/qtwebkit.qdocconf:167
&gt; &gt; &gt; +                          K_DECLARE_PRIVATE
&gt; &gt; 
&gt; &gt; K_? Sounds like some KDE thing, not related to Phonon?
&gt; 
&gt; May be, I&apos;ll remove it then.

And will land it manually then, thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428032</commentid>
    <comment_count>7</comment_count>
      <attachid>98742</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-06-27 10:07:25 -0700</bug_when>
    <thetext>Created attachment 98742
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428061</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-27 10:24:47 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 98742:

http/tests/local/fileapi/send-dragged-file.html bug 62791 (author: jianli@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428064</commentid>
    <comment_count>9</comment_count>
      <attachid>98742</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-27 10:26:45 -0700</bug_when>
    <thetext>Comment on attachment 98742
Patch for landing

Clearing flags on attachment: 98742

Committed r89832: &lt;http://trac.webkit.org/changeset/89832&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428066</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-27 10:26:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428109</commentid>
    <comment_count>11</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2011-06-27 11:15:27 -0700</bug_when>
    <thetext>Revision r89832 cherry-picked into qtwebkit-2.2 with commit 312ffd4 &lt;http://gitorious.org/webkit/qtwebkit/commit/312ffd4&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98718</attachid>
            <date>2011-06-27 07:01:41 -0700</date>
            <delta_ts>2011-06-27 10:07:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63448-20110627110143.patch</filename>
            <type>text/plain</type>
            <size>30754</size>
            <attacher name="Alexis Menard (darktears)">menard</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDg5ODE1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDYt
MjcgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBSZW1vdmUgUGhv
bm9uIE1lZGlhUGxheWVyIGZyb20gdGhlIHRyZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzQ0OAorCisgICAgICAgIFJlbXZvdmUgZnJvbSB0aGUg
YnVpbGQuCisKKyAgICAgICAgKiBTb3VyY2UvV2ViS2l0LnByaToKKwogMjAxMS0wNi0yNCAgRG9t
aW5pYyBDb29uZXkgIDxkb21pbmljY0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogU291cmNlL1dlYktpdC5wcmkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC5wcmkJKHJldmlzaW9uIDg5ODE1KQorKysgU291cmNlL1dlYktpdC5w
cmkJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwxMSArMTU0LDYgQEAgc3ltYmlhbnxtYWVtbzV8bWFl
bW82IHsKIAogZGlzYWJsZV91aXRvb2xzOiBERUZJTkVTICo9IFFUX05PX1VJVE9PTFMKIAotaXNF
bXB0eShRVC5waG9ub24uaW5jbHVkZXMpIHsKLSAgICBRVC5waG9ub24uaW5jbHVkZXMgPSAkJFFN
QUtFX0lOQ0RJUl9RVC9waG9ub24KLSAgICBRVC5waG9ub24ubGlicyA9ICQkUU1BS0VfTElCRElS
X1FUCi19Ci0KICMgRGlzYWJsZSBhIGZldyB3YXJuaW5ncyBvbiBXaW5kb3dzLiBUaGUgd2Fybmlu
Z3MgYXJlIGFsc28KICMgZGlzYWJsZWQgaW4gV2ViS2l0TGlicmFyaWVzL3dpbi90b29scy92c3By
b3BzL2NvbW1vbi52c3Byb3BzCiB3aW4zMi1tc3ZjKnx3aW5jZSo6IFFNQUtFX0NYWEZMQUdTICs9
IC13ZDQyOTEgLXdkNDM0NCAtd2Q0Mzk2IC13ZDQ1MDMgLXdkNDgwMCAtd2Q0ODE5IC13ZDQ5OTYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5ODE1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDYtMjcgIEFsZXhpcyBN
ZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBSZW1vdmUgUGhvbm9uIE1lZGlhUGxh
eWVyIGZyb20gdGhlIHRyZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MzQ0OAorCisgICAgICAgIFJlbW92ZSBQaG9ub24gbWVkaWFwbGF5ZXIgYXMg
aXQgaXMgdW51c2VkLCBub3QgZmluaXNoZWQgYW5kCisgICAgICAgIHVubWFpbnRhaW5lZC4KKwor
ICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnByaToKKyAgICAgICAg
KiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBmZWF0dXJlcy5wcmk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmg6IFJlbW92ZWQuCisK
IDIwMTEtMDYtMjcgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShy
ZXZpc2lvbiA4OTgxNSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBj
b3B5KQpAQCAtNDQyNyw4ICs0NDI3LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9JbnRQb2ludFF0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQv
SW50UmVjdFF0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW50U2l6
ZVF0LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQ
cml2YXRlUGhvbm9uLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVk
aWFQbGF5ZXJQcml2YXRlUGhvbm9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvcXQvUGF0aFF0LmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQkocmV2aXNpb24gODk4
MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQkod29ya2luZyBjb3B5KQpAQCAtMjcz
LDE3ICsyNzMsNiBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89MSkgewogICAgICAg
ICBDT05GSUcgICAqPSBtb2JpbGl0eQogICAgICAgICBNT0JJTElUWSAqPSBtdWx0aW1lZGlhCiAg
ICAgICAgIERFRklORVMgICs9IFdURl9VU0VfUVRfTVVMVElNRURJQT0xCi0gICAgfSBlbHNlOmNv
bnRhaW5zKFFUX0NPTkZJRywgcGhvbm9uKSB7Ci0gICAgICAgICMgQWRkIHBob25vbiBtYW51YWxs
eSB0byBwcmV2ZW50IGl0IGZyb20gY29taW5nIGZpcnN0IGluCi0gICAgICAgICMgdGhlIGluY2x1
ZGUgcGF0aHMsIGFzIFBob25vbidzIHBhdGguaCBjb25mbGljdHMgd2l0aAotICAgICAgICAjIFdl
YkNvcmUncyBQYXRoLmggb24gY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcy4KLSAgICAgICAg
cXRBZGRMaWJyYXJ5KHBob25vbikKLSAgICAgICAgSU5DTFVERVBBVEggLT0gJCRRVC5waG9ub24u
aW5jbHVkZXMKLSAgICAgICAgSU5DTFVERVBBVEggKz0gJCRRVC5waG9ub24uaW5jbHVkZXMKLSAg
ICAgICAgbWFjIHsKLSAgICAgICAgICAgIElOQ0xVREVQQVRIIC09ICQkUVQucGhvbm9uLmxpYnMv
cGhvbm9uLmZyYW1ld29yay9IZWFkZXJzCi0gICAgICAgICAgICBJTkNMVURFUEFUSCArPSAkJFFU
LnBob25vbi5saWJzL3Bob25vbi5mcmFtZXdvcmsvSGVhZGVycwotICAgICAgICB9CiAgICAgfQog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gODk4MTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMzA1OSwxMiArMzA1OSw2IEBAIGNvbnRh
aW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CiAKICAgICAgICAgU09VUkNFUyArPSBcCiAg
ICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAK
LSAgICB9IGVsc2U6Y29udGFpbnMoUVRfQ09ORklHLCBwaG9ub24pIHsKLSAgICAgICAgSEVBREVS
UyArPSBcCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZh
dGVQaG9ub24uaAotCi0gICAgICAgIFNPVVJDRVMgKz0gXAotICAgICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmNwcAogICAgIH0KIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZmVhdHVyZXMucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2ZlYXR1cmVzLnByaQkocmV2aXNpb24gODk4MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9mZWF0
dXJlcy5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw3ICsxNzksNyBAQCBzeW1iaWFufG1hZW1v
NXxtYWVtbzYgewogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9UT1VDSF9FVkVOVFM9Lik6IERF
RklORVMgKz0gRU5BQkxFX1RPVUNIX0VWRU5UUz0xCiAKICMgSFRNTDUgTWVkaWEgU3VwcG9ydAot
IyBXZSByZXF1aXJlIFF0TXVsdGltZWRpYSBvciBQaG9ub24KKyMgV2UgcmVxdWlyZSBRdE11bHRp
bWVkaWEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89LikgewogICAgIERFRklORVMg
LT0gRU5BQkxFX1ZJREVPPTEKICAgICBERUZJTkVTICs9IEVOQUJMRV9WSURFTz0wCkBAIC0xOTks
MTEgKzE5OSw2IEBAIHN5bWJpYW58bWFlbW81fG1hZW1vNiB7CiAgICAgICAgIERFRklORVMgKz0g
RU5BQkxFX1ZJREVPPTEKICAgICAgICAgREVGSU5FUyAtPSBXVEZfVVNFX1FUX01VTFRJTUVESUE9
MAogICAgICAgICBERUZJTkVTICs9IFdURl9VU0VfUVRfTVVMVElNRURJQT0xCi0gICAgfSBlbHNl
OmNvbnRhaW5zKFFUX0NPTkZJRywgcGhvbm9uKSB7Ci0gICAgICAgIERFRklORVMgLT0gRU5BQkxF
X1ZJREVPPTAKLSAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfVklERU89MQotICAgICAgICBERUZJ
TkVTIC09IFdURl9VU0VfUVRfTVVMVElNRURJQT0xCi0gICAgICAgIERFRklORVMgKz0gV1RGX1VT
RV9RVF9NVUxUSU1FRElBPTAKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAJKHJldmlzaW9uIDg5ODE1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw5ICs2Miw2IEBACiAjaWYgVVNFKFFUX01VTFRJTUVESUEpICYmICFVU0Uo
R1NUUkVBTUVSKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVF0LmgiCiAjZGVmaW5lIFBs
YXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWUgTWVkaWFQbGF5ZXJQcml2YXRlUXQKLSNlbGlmICFV
U0UoR1NUUkVBTUVSKSAmJiAhVVNFKFFUS0lUKQotI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0
ZVBob25vbi5oIgotI2RlZmluZSBQbGF0Zm9ybU1lZGlhRW5naW5lQ2xhc3NOYW1lIE1lZGlhUGxh
eWVyUHJpdmF0ZVBob25vbgogI2VuZGlmCiAjZWxpZiBQTEFURk9STShDSFJPTUlVTSkKICNpbmNs
dWRlICJNZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclBy
aXZhdGVQaG9ub24uY3BwCShyZXZpc2lvbiA4OTgxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNTU3ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICAgIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oIgotCi0jaW5jbHVkZSA8
bGltaXRzPgotCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIK
LSNpbmNsdWRlICJXaWRnZXQuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2luY2x1ZGUgPFFEZWJ1Zz4KLSNpbmNsdWRlIDxRRXZl
bnQ+Ci0jaW5jbHVkZSA8UU1ldGFFbnVtPgotI2luY2x1ZGUgPFFQYWludGVyPgotI2luY2x1ZGUg
PFFXaWRnZXQ+Ci0jaW5jbHVkZSA8UVVybD4KLQotI2luY2x1ZGUgPHBob25vbi9hdWRpb291dHB1
dC5oPgotI2luY2x1ZGUgPHBob25vbi9iYWNrZW5kY2FwYWJpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8
cGhvbm9uL3BhdGguaD4KLSNpbmNsdWRlIDxwaG9ub24vbWVkaWFvYmplY3QuaD4KLSNpbmNsdWRl
IDxwaG9ub24vdmlkZW93aWRnZXQuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFBob25vbjsKLQotI2Rl
ZmluZSBMT0dfTUVESUFPQkpFQ1QoKSAoTE9HKE1lZGlhLCAiJXMiLCBkZWJ1Z01lZGlhT2JqZWN0
KHRoaXMsICptX21lZGlhT2JqZWN0KS5jb25zdERhdGEoKSkpCi0KLSNpZiAhTE9HX0RJU0FCTEVE
Ci1zdGF0aWMgUUJ5dGVBcnJheSBkZWJ1Z01lZGlhT2JqZWN0KFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZVBob25vbiogbWVkaWFQbGF5ZXIsIGNvbnN0IE1lZGlhT2JqZWN0JiBtZWRpYU9iamVj
dCkKLXsKLSAgICBRQnl0ZUFycmF5IGJ5dGVBcnJheTsKLSAgICBRVGV4dFN0cmVhbSBzdHJlYW0o
JmJ5dGVBcnJheSk7Ci0KLSAgICBjb25zdCBRTWV0YU9iamVjdCogbWV0YU9iaiA9IG1lZGlhUGxh
eWVyLT5tZXRhT2JqZWN0KCk7Ci0gICAgUU1ldGFFbnVtIHBob25vblN0YXRlcyA9IG1ldGFPYmot
PmVudW1lcmF0b3IobWV0YU9iai0+aW5kZXhPZkVudW1lcmF0b3IoIlBob25vblN0YXRlIikpOwot
Ci0gICAgc3RyZWFtIDw8ICJkZWJ1Z01lZGlhT2JqZWN0IC0+IFBob25vbjo6TWVkaWFPYmplY3Qo
IjsKLSAgICBzdHJlYW0gPDwgIlN0YXRlOiAiIDw8IHBob25vblN0YXRlcy52YWx1ZVRvS2V5KG1l
ZGlhT2JqZWN0LnN0YXRlKCkpOwotICAgIHN0cmVhbSA8PCAiIHwgQ3VycmVudCB0aW1lOiAiIDw8
IG1lZGlhT2JqZWN0LmN1cnJlbnRUaW1lKCk7Ci0gICAgc3RyZWFtIDw8ICIgfCBSZW1haW5pbmcg
dGltZTogIiA8PCBtZWRpYU9iamVjdC5yZW1haW5pbmdUaW1lKCk7Ci0gICAgc3RyZWFtIDw8ICIg
fCBUb3RhbCB0aW1lOiAiIDw8IG1lZGlhT2JqZWN0LnRvdGFsVGltZSgpOwotICAgIHN0cmVhbSA8
PCAiIHwgTWV0YS1kYXRhOiAiOwotICAgIFFNdWx0aU1hcDxRU3RyaW5nLCBRU3RyaW5nPiBtYXAg
PSBtZWRpYU9iamVjdC5tZXRhRGF0YSgpOwotICAgIGZvciAoUU1hcDxRU3RyaW5nLCBRU3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuY29uc3RCZWdpbigpOwotICAgICAgICBpdCAhPSBt
YXAuY29uc3RFbmQoKTsgKytpdCkgewotICAgICAgICBzdHJlYW0gPDwgIigiIDw8IGl0LmtleSgp
IDw8ICIsICIgPDwgaXQudmFsdWUoKSA8PCAiKSI7Ci0gICAgfQotICAgIHN0cmVhbSA8PCAiIHwg
SGFzIHZpZGVvOiAiIDw8IG1lZGlhT2JqZWN0Lmhhc1ZpZGVvKCk7Ci0gICAgc3RyZWFtIDw8ICIg
fCBJcyBzZWVrYWJsZTogIiA8PCBtZWRpYU9iamVjdC5pc1NlZWthYmxlKCk7Ci0gICAgc3RyZWFt
IDw8ICIpIjsKLQotICAgIHN0cmVhbS5mbHVzaCgpOwotCi0gICAgcmV0dXJuIGJ5dGVBcnJheTsK
LX0KLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgV1RGOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLU1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uKE1l
ZGlhUGxheWVyKiBwbGF5ZXIpCi0gICAgOiBtX3BsYXllcihwbGF5ZXIpCi0gICAgLCBtX25ldHdv
cmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkpCi0gICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5
ZXI6OkhhdmVOb3RoaW5nKQotICAgICwgbV9tZWRpYU9iamVjdChuZXcgTWVkaWFPYmplY3QoKSkK
LSAgICAsIG1fdmlkZW9XaWRnZXQobmV3IFZpZGVvV2lkZ2V0KDApKQotICAgICwgbV9hdWRpb091
dHB1dChuZXcgQXVkaW9PdXRwdXQoKSkKLSAgICAsIG1faXNWaXNpYmxlKGZhbHNlKQotewotICAg
IC8vIEhpbnQgdG8gUGhvbm9uIHRvIGRpc2FibGUgb3ZlcmxheSBwYWludGluZwotICAgIG1fdmlk
ZW9XaWRnZXQtPnNldEF0dHJpYnV0ZShRdDo6V0FfRG9udFNob3dPblNjcmVlbik7Ci0gICAgbV92
aWRlb1dpZGdldC0+c2V0QXR0cmlidXRlKFF0OjpXQV9RdWl0T25DbG9zZSwgZmFsc2UpOwotCi0g
ICAgY3JlYXRlUGF0aChtX21lZGlhT2JqZWN0LCBtX3ZpZGVvV2lkZ2V0KTsKLSAgICBjcmVhdGVQ
YXRoKG1fbWVkaWFPYmplY3QsIG1fYXVkaW9PdXRwdXQpOwotCi0gICAgLy8gTWFrZSBzdXJlIHdl
IGdldCB1cGRhdGVzIGZvciBlYWNoIGZyYW1lCi0gICAgbV92aWRlb1dpZGdldC0+aW5zdGFsbEV2
ZW50RmlsdGVyKHRoaXMpOwotICAgIGZvcmVhY2ggKFFXaWRnZXQqIHdpZGdldCwgbV92aWRlb1dp
ZGdldC0+ZmluZENoaWxkcmVuPFFXaWRnZXQqPigpKQotICAgICAgICB3aWRnZXQtPmluc3RhbGxF
dmVudEZpbHRlcih0aGlzKTsKLQotICAgIGNvbm5lY3QobV9tZWRpYU9iamVjdCwgU0lHTkFMKHN0
YXRlQ2hhbmdlZChQaG9ub246OlN0YXRlLFBob25vbjo6U3RhdGUpKSwKLSAgICAgICAgICAgIHRo
aXMsIFNMT1Qoc3RhdGVDaGFuZ2VkKFBob25vbjo6U3RhdGUsUGhvbm9uOjpTdGF0ZSkpKTsKLSAg
ICBjb25uZWN0KG1fbWVkaWFPYmplY3QsIFNJR05BTChtZXRhRGF0YUNoYW5nZWQoKSksIHRoaXMs
IFNMT1QobWV0YURhdGFDaGFuZ2VkKCkpKTsKLSAgICBjb25uZWN0KG1fbWVkaWFPYmplY3QsIFNJ
R05BTChzZWVrYWJsZUNoYW5nZWQoYm9vbCkpLCB0aGlzLCBTTE9UKHNlZWthYmxlQ2hhbmdlZChi
b29sKSkpOwotICAgIGNvbm5lY3QobV9tZWRpYU9iamVjdCwgU0lHTkFMKGhhc1ZpZGVvQ2hhbmdl
ZChib29sKSksIHRoaXMsIFNMT1QoaGFzVmlkZW9DaGFuZ2VkKGJvb2wpKSk7Ci0gICAgY29ubmVj
dChtX21lZGlhT2JqZWN0LCBTSUdOQUwoYnVmZmVyU3RhdHVzKGludCkpLCB0aGlzLCBTTE9UKGJ1
ZmZlclN0YXR1cyhpbnQpKSk7Ci0gICAgY29ubmVjdChtX21lZGlhT2JqZWN0LCBTSUdOQUwoZmlu
aXNoZWQoKSksIHRoaXMsIFNMT1QoZmluaXNoZWQoKSkpOwotICAgIGNvbm5lY3QobV9tZWRpYU9i
amVjdCwgU0lHTkFMKGN1cnJlbnRTb3VyY2VDaGFuZ2VkKFBob25vbjo6TWVkaWFTb3VyY2UpKSwK
LSAgICAgICAgICAgIHRoaXMsIFNMT1QoY3VycmVudFNvdXJjZUNoYW5nZWQoUGhvbm9uOjpNZWRp
YVNvdXJjZSkpKTsKLSAgICBjb25uZWN0KG1fbWVkaWFPYmplY3QsIFNJR05BTChhYm91dFRvRmlu
aXNoKCkpLCB0aGlzLCBTTE9UKGFib3V0VG9GaW5pc2goKSkpOwotICAgIGNvbm5lY3QobV9tZWRp
YU9iamVjdCwgU0lHTkFMKHRvdGFsVGltZUNoYW5nZWQocWludDY0KSksIHRoaXMsIFNMT1QodG90
YWxUaW1lQ2hhbmdlZChxaW50NjQpKSk7Ci19Ci0KLVBhc3NPd25QdHI8TWVkaWFQbGF5ZXJQcml2
YXRlSW50ZXJmYWNlPiBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OmNyZWF0ZShNZWRpYVBsYXll
ciogcGxheWVyKQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWVkaWFQbGF5ZXJQcml2YXRl
UGhvbm9uKHBsYXllcikpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6cmVn
aXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCi17Ci0gICAg
aWYgKGlzQXZhaWxhYmxlKCkpCi0gICAgICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1cHBvcnRl
ZFR5cGVzLCBzdXBwb3J0c1R5cGUsIDAsIDAsIDApOwotfQotCi0KLU1lZGlhUGxheWVyUHJpdmF0
ZVBob25vbjo6fk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbigpCi17Ci0gICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpkdG9yIGRlbGV0aW5nIHZpZGVvd2lkZ2V0Iik7Ci0g
ICAgbV92aWRlb1dpZGdldC0+Y2xvc2UoKTsKLSAgICBkZWxldGUgbV92aWRlb1dpZGdldDsKLSAg
ICBtX3ZpZGVvV2lkZ2V0ID0gMDsKLQotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0
ZVBob25vbjo6ZHRvciBkZWxldGluZyBhdWRpb291dHB1dCIpOwotICAgIGRlbGV0ZSBtX2F1ZGlv
T3V0cHV0OwotICAgIG1fYXVkaW9PdXRwdXQgPSAwOwotCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQ
bGF5ZXJQcml2YXRlUGhvbm9uOjpkdG9yIGRlbGV0aW5nIG1lZGlhb2JqZWN0Iik7Ci0gICAgZGVs
ZXRlIG1fbWVkaWFPYmplY3Q7Ci0gICAgbV9tZWRpYU9iamVjdCA9IDA7Ci19Ci0KLUhhc2hTZXQ8
U3RyaW5nPiYgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpzdXBwb3J0ZWRUeXBlc0NhY2hlKCkK
LXsKLSAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+IHN1cHBvcnRlZFR5cGVzOwotICAgIGlmICgh
c3VwcG9ydGVkVHlwZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gc3VwcG9ydGVkVHlwZXM7
Ci0KLSAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHJlYnVpbGQgdGhlIE1JTUUgdHlwZSBjYWNoZSBl
dmVyeSB0aW1lIHRoZSBiYWNrZW5kIGlzIGNoYW5nZWQsCi0gICAgLy8gaG93ZXZlciwgdGhpcyB3
b3VsZCBoYXZlIG5vIGVmZmVjdCBvbiBNSU1FVHlwZVJlZ2lzdHJ5IGFueXdheSwgYmVjYXVzZSBp
dAotICAgIC8vIHB1bGxzIHRoaXMgZGF0YSBvbmx5IG9uY2UuCi0KLSAgICBRU3RyaW5nTGlzdCB0
eXBlcyA9IFBob25vbjo6QmFja2VuZENhcGFiaWxpdGllczo6YXZhaWxhYmxlTWltZVR5cGVzKCk7
Ci0gICAgZm9yZWFjaCAoY29uc3QgUVN0cmluZyYgdHlwZSwgdHlwZXMpIHsKLSAgICAgICAgUVN0
cmluZyBmaXJzdCA9IHR5cGUuc3BsaXQoUUxhdGluMUNoYXIoJy8nKSkuYXQoMCk7Ci0KLSAgICAg
ICAgLy8gV2UncmUgb25seSBpbnRlcmVzdGVkIGluIHR5cGVzIHdoaWNoIGFyZSBub3Qgc3VwcG9y
dGVkIGJ5IFdlYkNvcmUgaXRzZWxmLgotICAgICAgICBpZiAoZmlyc3QgIT0gUUxhdGluMVN0cmlu
ZygidmlkZW8iKQotICAgICAgICAgICAgJiYgZmlyc3QgIT0gUUxhdGluMVN0cmluZygiYXVkaW8i
KQotICAgICAgICAgICAgJiYgZmlyc3QgIT0gUUxhdGluMVN0cmluZygiYXBwbGljYXRpb24iKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNT
dXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKHR5cGUpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgc3VwcG9ydGVkVHlwZXMuYWRkKFN0cmluZyh0eXBlKSk7Ci0gICAgfQotCi0gICAg
Ly8gVGhlc2UgZm9ybWF0cyBhcmUgc3VwcG9ydGVkIGJ5IEdTdHJlYW1lciwgYnV0IG5vdCBjb3Jy
ZWN0bHkgYWR2ZXJ0aXNlZC4KLSAgICBpZiAoc3VwcG9ydGVkVHlwZXMuY29udGFpbnMoU3RyaW5n
KCJ2aWRlby94LWgyNjQiKSkKLSAgICAgICAgfHwgc3VwcG9ydGVkVHlwZXMuY29udGFpbnMoU3Ry
aW5nKCJhdWRpby94LW00YSIpKSkgewotICAgICAgICBzdXBwb3J0ZWRUeXBlcy5hZGQoU3RyaW5n
KCJ2aWRlby9tcDQiKSk7Ci0gICAgICAgIHN1cHBvcnRlZFR5cGVzLmFkZChTdHJpbmcoImF1ZGlv
L2FhYyIpKTsKLSAgICB9Ci0KLSAgICBpZiAoc3VwcG9ydGVkVHlwZXMuY29udGFpbnMoU3RyaW5n
KCJ2aWRlby94LXRoZW9yYSIpKSkKLSAgICAgICAgc3VwcG9ydGVkVHlwZXMuYWRkKFN0cmluZygi
dmlkZW8vb2dnIikpOwotCi0gICAgaWYgKHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKFN0cmluZygi
YXVkaW8veC12b3JiaXMiKSkpCi0gICAgICAgIHN1cHBvcnRlZFR5cGVzLmFkZChTdHJpbmcoImF1
ZGlvL29nZyIpKTsKLQotICAgIGlmIChzdXBwb3J0ZWRUeXBlcy5jb250YWlucyhTdHJpbmcoImF1
ZGlvL3gtd2F2IikpKQotICAgICAgICBzdXBwb3J0ZWRUeXBlcy5hZGQoU3RyaW5nKCJhdWRpby93
YXYiKSk7Ci0KLSAgICByZXR1cm4gc3VwcG9ydGVkVHlwZXM7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUGhvbm9uOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVz
KQotewotICAgIHR5cGVzID0gc3VwcG9ydGVkVHlwZXNDYWNoZSgpOwotfQotCi1NZWRpYVBsYXll
cjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6c3VwcG9ydHNUeXBlKGNv
bnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpCi17Ci0gICAgaWYgKHR5cGUu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwot
Ci0gICAgaWYgKHN1cHBvcnRlZFR5cGVzQ2FjaGUoKS5jb250YWlucyh0eXBlKSkKLSAgICAgICAg
cmV0dXJuIGNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQgOiBN
ZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7Ci0gICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1
cHBvcnRlZDsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246Omhhc1ZpZGVvKCkg
Y29uc3QKLXsKLSAgICBib29sIGhhc1ZpZGVvID0gbV9tZWRpYU9iamVjdC0+aGFzVmlkZW8oKTsK
LSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246Omhhc1ZpZGVvKCkgLT4g
JXMiLCBoYXNWaWRlbyA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotICAgIHJldHVybiBoYXNWaWRlbzsK
LX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246Omhhc0F1ZGlvKCkgY29uc3QKLXsK
LSAgICAvLyBGSVhNRTogUGhvbm9uOjpNZWRpYU9iamVjdCBkb2VzIG5vdCBoYXZlIHN1Y2ggYSBo
YXNBdWRpbygpIGZ1bmN0aW9uCi0gICAgYm9vbCBoYXNBdWRpbyA9IHRydWU7Ci0gICAgTE9HKE1l
ZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpoYXNBdWRpbygpIC0+ICVzIiwgaGFzQXVk
aW8gPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLSAgICByZXR1cm4gaGFzQXVkaW87Ci19Ci0KLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6bG9hZChcIiVzXCIpIiwgdXJs
LnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgLy8gV2UgYXJlIG5vdyBsb2FkaW5nCi0gICAgaWYgKG1f
bmV0d29ya1N0YXRlICE9IE1lZGlhUGxheWVyOjpMb2FkaW5nKSB7Ci0gICAgICAgIG1fbmV0d29y
a1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7Ci0gICAgICAgIG1fcGxheWVyLT5uZXR3b3Jr
U3RhdGVDaGFuZ2VkKCk7Ci0gICAgfQotCi0gICAgLy8gQW5kIHdlIGRvbid0IGhhdmUgYW55IGRh
dGEgeWV0Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcp
IHsKLSAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAg
ICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKLSAgICB9Ci0KLSAgICBtX21lZGlh
T2JqZWN0LT5zZXRDdXJyZW50U291cmNlKFFVcmwodXJsKSk7Ci0gICAgbV9hdWRpb091dHB1dC0+
c2V0Vm9sdW1lKG1fcGxheWVyLT52b2x1bWUoKSk7Ci0gICAgc2V0VmlzaWJsZShtX3BsYXllci0+
dmlzaWJsZSgpKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OmNhbmNlbExv
YWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLQotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVQaG9ub246OnBsYXkoKQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0
ZVBob25vbjo6cGxheSgpIik7Ci0gICAgbV9tZWRpYU9iamVjdC0+cGxheSgpOwotfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6cGF1c2UoKQotewotICAgIExPRyhNZWRpYSwgIk1l
ZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6cGF1c2UoKSIpOwotICAgIG1fbWVkaWFPYmplY3QtPnBh
dXNlKCk7Ci19Ci0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnBhdXNlZCgpIGNv
bnN0Ci17Ci0gICAgYm9vbCBwYXVzZWQgPSBtX21lZGlhT2JqZWN0LT5zdGF0ZSgpID09IFBob25v
bjo6UGF1c2VkU3RhdGU7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9u
OjpwYXVzZWQoKSAtLT4gJXMiLCBwYXVzZWQgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLSAgICByZXR1
cm4gcGF1c2VkOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6c2VlayhmbG9h
dCBwb3NpdGlvbikKLXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246
OnNlZWsoJWYpIiwgcG9zaXRpb24pOwotCi0gICAgaWYgKCFtX21lZGlhT2JqZWN0LT5pc1NlZWth
YmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwb3NpdGlvbiA+IGR1cmF0aW9uKCkp
Ci0gICAgICAgIHBvc2l0aW9uID0gZHVyYXRpb24oKTsKLQotICAgIG1fbWVkaWFPYmplY3QtPnNl
ZWsocG9zaXRpb24gKiAxMDAwLjBmKTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVQaG9u
b246OnNlZWtpbmcoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotZmxvYXQgTWVk
aWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpkdXJhdGlvbigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcmVh
ZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEpCi0gICAgICAgIHJldHVybiAwLjBm
OwotCi0gICAgZmxvYXQgZHVyYXRpb24gPSBtX21lZGlhT2JqZWN0LT50b3RhbFRpbWUoKSAvIDEw
MDAuMGY7Ci0KLSAgICBpZiAoZHVyYXRpb24gPT0gMC4wZikgLy8gV2UgYXJlIHN0cmVhbWluZwot
ICAgICAgICBkdXJhdGlvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgp
OwotCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpkdXJhdGlvbigp
IC0tPiAlZiIsIGR1cmF0aW9uKTsKLSAgICByZXR1cm4gZHVyYXRpb247Ci19Ci0KLWZsb2F0IE1l
ZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6Y3VycmVudFRpbWUoKSBjb25zdAotewotICAgIGZsb2F0
IGN1cnJlbnRUaW1lID0gbV9tZWRpYU9iamVjdC0+Y3VycmVudFRpbWUoKSAvIDEwMDAuMGY7Ci0K
LSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246OmN1cnJlbnRUaW1lKCkg
LS0+ICVmIiwgY3VycmVudFRpbWUpOwotICAgIHJldHVybiBjdXJyZW50VGltZTsKLX0KLQotUGFz
c1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OmJ1ZmZlcmVkKCkg
Y29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBUaW1lUmFuZ2VzOjpj
cmVhdGUoKTsKLX0KLQotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjptYXhUaW1lU2Vl
a2FibGUoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDAuMGY7
Ci19Ci0KLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6Ynl0ZXNMb2FkZWQoKSBj
b25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXVuc2ln
bmVkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6dG90YWxCeXRlcygpIGNvbnN0Ci17Ci0gICAg
Ly9ub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZVBob25vbjo6c2V0UmF0ZShmbG9hdCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVt
ZSkKLXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnNldFZvbHVt
ZSgpIik7Ci0gICAgbV9hdWRpb091dHB1dC0+c2V0Vm9sdW1lKHZvbHVtZSk7Ci19Ci0KLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpzZXRNdXRlZChib29sIG11dGVkKQotewotICAgIExP
RyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6c2V0TXV0ZWQoKSIpOwotICAgIG1f
YXVkaW9PdXRwdXQtPnNldE11dGVkKG11dGVkKTsKLX0KLQotTWVkaWFQbGF5ZXI6Ok5ldHdvcmtT
dGF0ZSBNZWRpYVBsYXllclByaXZhdGVQaG9ub246Om5ldHdvcmtTdGF0ZSgpIGNvbnN0Ci17Ci0j
aWYgIUxPR19ESVNBQkxFRAotICAgIGNvbnN0IFFNZXRhT2JqZWN0KiBtZXRhT2JqID0gdGhpcy0+
bWV0YU9iamVjdCgpOwotICAgIFFNZXRhRW51bSBuZXR3b3JrU3RhdGVzID0gbWV0YU9iai0+ZW51
bWVyYXRvcihtZXRhT2JqLT5pbmRleE9mRW51bWVyYXRvcigiTmV0d29ya1N0YXRlIikpOwotICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6bmV0d29ya1N0YXRlKCkgLS0+
ICVzIiwgbmV0d29ya1N0YXRlcy52YWx1ZVRvS2V5KG1fbmV0d29ya1N0YXRlKSk7Ci0jZW5kaWYK
LSAgICByZXR1cm4gbV9uZXR3b3JrU3RhdGU7Ci19Ci0KLU1lZGlhUGxheWVyOjpSZWFkeVN0YXRl
IE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6cmVhZHlTdGF0ZSgpIGNvbnN0Ci17Ci0jaWYgIUxP
R19ESVNBQkxFRAotICAgIGNvbnN0IFFNZXRhT2JqZWN0KiBtZXRhT2JqID0gdGhpcy0+bWV0YU9i
amVjdCgpOwotICAgIFFNZXRhRW51bSByZWFkeVN0YXRlcyA9IG1ldGFPYmotPmVudW1lcmF0b3Io
bWV0YU9iai0+aW5kZXhPZkVudW1lcmF0b3IoIlJlYWR5U3RhdGUiKSk7Ci0gICAgTE9HKE1lZGlh
LCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpyZWFkeVN0YXRlKCkgLS0+ICVzIiwgcmVhZHlT
dGF0ZXMudmFsdWVUb0tleShtX3JlYWR5U3RhdGUpKTsKLSNlbmRpZgotICAgIHJldHVybiBtX3Jl
YWR5U3RhdGU7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjp1cGRhdGVTdGF0
ZXMoKQotewotICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRlID0g
bV9uZXR3b3JrU3RhdGU7Ci0gICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVhZHlTdGF0
ZSA9IG1fcmVhZHlTdGF0ZTsKLQotICAgIFBob25vbjo6U3RhdGUgcGhvbm9uU3RhdGUgPSBtX21l
ZGlhT2JqZWN0LT5zdGF0ZSgpOwotCi0gICAgaWYgKHBob25vblN0YXRlID09IFBob25vbjo6U3Rv
cHBlZFN0YXRlKSB7Ci0gICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2
ZU1ldGFkYXRhKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpM
b2FkaW5nOyAvLyBGSVhNRTogc2hvdWxkIHRoaXMgYmUgTWVkaWFQbGF5ZXI6OklkbGU/Ci0gICAg
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOwotICAgICAg
ICAgICAgbV9tZWRpYU9iamVjdC0+cGF1c2UoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAo
cGhvbm9uU3RhdGUgPT0gUGhvbm9uOjpQYXVzZWRTdGF0ZSkgewotICAgICAgICBtX25ldHdvcmtT
dGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkZWQ7Ci0gICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlh
UGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKLSAgICB9IGVsc2UgaWYgKHBob25vblN0YXRlID09IFBo
b25vbjo6RXJyb3JTdGF0ZSkgewotICAgICAgICAgaWYgKCFtX21lZGlhT2JqZWN0IHx8IG1fbWVk
aWFPYmplY3QtPmVycm9yVHlwZSgpID09IFBob25vbjo6RmF0YWxFcnJvcikgewotICAgICAgICAg
ICAgIC8vIEZJWE1FOiBpcyBpdCBwb3NzaWxlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBkaWZm
ZXJlbnQgdHlwZXMgb2YgZXJyb3JzCi0gICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRp
YVBsYXllcjo6TmV0d29ya0Vycm9yOwotICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlh
UGxheWVyOjpIYXZlTm90aGluZzsKLSAgICAgICAgICAgICBjYW5jZWxMb2FkKCk7Ci0gICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICBtX21lZGlhT2JqZWN0LT5wYXVzZSgpOwotICAgIH0KLQot
ICAgIGlmIChzZWVraW5nKCkpCi0gICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpI
YXZlTm90aGluZzsKLQotICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBvbGROZXR3b3JrU3RhdGUp
IHsKLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgICAgIGNvbnN0IFFNZXRhT2JqZWN0KiBtZXRhT2Jq
ID0gdGhpcy0+bWV0YU9iamVjdCgpOwotICAgICAgICBRTWV0YUVudW0gbmV0d29ya1N0YXRlcyA9
IG1ldGFPYmotPmVudW1lcmF0b3IobWV0YU9iai0+aW5kZXhPZkVudW1lcmF0b3IoIk5ldHdvcmtT
dGF0ZSIpKTsKLSAgICAgICAgTE9HKE1lZGlhLCAiTmV0d29yayBzdGF0ZSBjaGFuZ2VkIGZyb20g
JyVzJyB0byAnJXMnIiwKLSAgICAgICAgICAgICAgICBuZXR3b3JrU3RhdGVzLnZhbHVlVG9LZXko
b2xkTmV0d29ya1N0YXRlKSwKLSAgICAgICAgICAgICAgICBuZXR3b3JrU3RhdGVzLnZhbHVlVG9L
ZXkobV9uZXR3b3JrU3RhdGUpKTsKLSNlbmRpZgotICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0
YXRlQ2hhbmdlZCgpOwotICAgIH0KLQotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlT
dGF0ZSkgewotI2lmICFMT0dfRElTQUJMRUQKLSAgICAgICAgY29uc3QgUU1ldGFPYmplY3QqIG1l
dGFPYmogPSB0aGlzLT5tZXRhT2JqZWN0KCk7Ci0gICAgICAgIFFNZXRhRW51bSByZWFkeVN0YXRl
cyA9IG1ldGFPYmotPmVudW1lcmF0b3IobWV0YU9iai0+aW5kZXhPZkVudW1lcmF0b3IoIlJlYWR5
U3RhdGUiKSk7Ci0gICAgICAgIExPRyhNZWRpYSwgIlJlYWR5IHN0YXRlIGNoYW5nZWQgZnJvbSAn
JXMnIHRvICclcyciLAotICAgICAgICAgICAgICAgIHJlYWR5U3RhdGVzLnZhbHVlVG9LZXkob2xk
UmVhZHlTdGF0ZSksCi0gICAgICAgICAgICAgICAgcmVhZHlTdGF0ZXMudmFsdWVUb0tleShtX3Jl
YWR5U3RhdGUpKTsKLSNlbmRpZgotICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQo
KTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpzZXRWaXNpYmxl
KGJvb2wgdmlzaWJsZSkKLXsKLSAgICBtX2lzVmlzaWJsZSA9IHZpc2libGU7Ci0gICAgTE9HKE1l
ZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpzZXRWaXNpYmxlKCVzKSIsIHZpc2libGUg
PyAidHJ1ZSIgOiAiZmFsc2UiKTsKLQotICAgIG1fdmlkZW9XaWRnZXQtPnNldFZpc2libGUobV9p
c1Zpc2libGUpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6c2V0U2l6ZShj
b25zdCBJbnRTaXplJiBuZXdTaXplKQotewotICAgIGlmICghbV92aWRlb1dpZGdldCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpz
ZXRTaXplKCVkLCVkKSIsCi0gICAgICAgICAgICAgICAgbmV3U2l6ZS53aWR0aCgpLCBuZXdTaXpl
LmhlaWdodCgpKTsKLQotICAgIFFSZWN0IGN1cnJlbnRSZWN0ID0gbV92aWRlb1dpZGdldC0+cmVj
dCgpOwotCi0gICAgaWYgKG5ld1NpemUud2lkdGgoKSAhPSBjdXJyZW50UmVjdC53aWR0aCgpIHx8
IG5ld1NpemUuaGVpZ2h0KCkgIT0gY3VycmVudFJlY3QuaGVpZ2h0KCkpCi0gICAgICAgIG1fdmlk
ZW9XaWRnZXQtPnJlc2l6ZShuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkpOwotfQot
Ci1JbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6bmF0dXJhbFNpemUoKSBjb25zdAot
ewotICAgIGlmICghaGFzVmlkZW8oKSkgewotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXll
clByaXZhdGVQaG9ub246Om5hdHVyYWxTaXplKCkgLT4gJWR4JWQiLAotICAgICAgICAgICAgICAg
ICAgICAwLCAwKTsKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLSAgICB9Ci0KLSAgICBpZiAo
bV9yZWFkeVN0YXRlIDwgTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSkgewotICAgICAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246Om5hdHVyYWxTaXplKCkgLT4gJWR4JWQi
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCk7Ci0gICAgICAgIHJldHVybiBJbnRT
aXplKCk7Ci0gICAgfQotCi0gICAgUVNpemUgdmlkZW9TaXplID0gbV92aWRlb1dpZGdldC0+c2l6
ZUhpbnQoKTsKLSAgICBJbnRTaXplIG5hdHVyYWxTaXplKHZpZGVvU2l6ZS53aWR0aCgpLCB2aWRl
b1NpemUuaGVpZ2h0KCkpOwotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25v
bjo6bmF0dXJhbFNpemUoKSAtPiAlZHglZCIsCi0gICAgICAgICAgICBuYXR1cmFsU2l6ZS53aWR0
aCgpLCBuYXR1cmFsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIG5hdHVyYWxTaXplOwotfQot
Ci1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6ZXZlbnRGaWx0ZXIoUU9iamVjdCogb2Jq
LCBRRXZlbnQqIGV2ZW50KQotewotICAgIGlmIChldmVudC0+dHlwZSgpID09IFFFdmVudDo6VXBk
YXRlUmVxdWVzdCkKLSAgICAgICAgbV9wbGF5ZXItPnJlcGFpbnQoKTsKLQotICAgIHJldHVybiBR
T2JqZWN0OjpldmVudEZpbHRlcihvYmosIGV2ZW50KTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVQaG9ub246OnBhaW50KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZWN0LCBjb25z
dCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChncmFwaGljc0NvbnRlY3QtPnBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2lzVmlzaWJsZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBncmFwaGljc0NvbnRlY3QtPnBs
YXRmb3JtQ29udGV4dCgpOwotCi0gICAgcGFpbnRlci0+ZmlsbFJlY3QocmVjdCwgUXQ6OmJsYWNr
KTsKLQotICAgIG1fdmlkZW9XaWRnZXQtPnJlbmRlcihwYWludGVyLCBRUG9pbnQocmVjdC54KCks
IHJlY3QueSgpKSwKLSAgICAgICAgICAgIFFSZWdpb24oMCwgMCwgcmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKSk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT0gUGhvbm9uOjpNZWRp
YU9iamVjdCBzaWduYWxzID09PT09PT09PT09PT09PT09PT09PT0KLQotdm9pZCBNZWRpYVBsYXll
clByaXZhdGVQaG9ub246OnN0YXRlQ2hhbmdlZChQaG9ub246OlN0YXRlIG5ld1N0YXRlLCBQaG9u
b246OlN0YXRlIG9sZFN0YXRlKQotewotI2lmICFMT0dfRElTQUJMRUQKLSAgICBjb25zdCBRTWV0
YU9iamVjdCogbWV0YU9iaiA9IHRoaXMtPm1ldGFPYmplY3QoKTsKLSAgICBRTWV0YUVudW0gcGhv
bm9uU3RhdGVzID0gbWV0YU9iai0+ZW51bWVyYXRvcihtZXRhT2JqLT5pbmRleE9mRW51bWVyYXRv
cigiUGhvbm9uU3RhdGUiKSk7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhv
bm9uOjpzdGF0ZUNoYW5nZWQobmV3U3RhdGU9JXMsIG9sZFN0YXRlPSVzKSIsCi0gICAgICAgICAg
ICBwaG9ub25TdGF0ZXMudmFsdWVUb0tleShuZXdTdGF0ZSksIHBob25vblN0YXRlcy52YWx1ZVRv
S2V5KG9sZFN0YXRlKSk7Ci0jZW5kaWYKLQotICAgIHVwZGF0ZVN0YXRlcygpOwotfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6bWV0YURhdGFDaGFuZ2VkKCkKLXsKLSAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246Om1ldGFEYXRhQ2hhbmdlZCgpIik7Ci0g
ICAgTE9HX01FRElBT0JKRUNUKCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9u
OjpzZWVrYWJsZUNoYW5nZWQoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIExP
R19NRURJQU9CSkVDVCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6aGFz
VmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCi17Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5
ZXJQcml2YXRlUGhvbm9uOjpoYXNWaWRlb0NoYW5nZWQoJXMpIiwgaGFzVmlkZW8gPyAidHJ1ZSIg
OiAiZmFsc2UiKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OmJ1ZmZlclN0
YXR1cyhpbnQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBMT0dfTUVESUFPQkpFQ1Qo
KTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OmZpbmlzaGVkKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIExPR19NRURJQU9CSkVDVCgpOwotfQotCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6Y3VycmVudFNvdXJjZUNoYW5nZWQoY29uc3QgUGhvbm9u
OjpNZWRpYVNvdXJjZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBMT0dfTUVESUFP
QkpFQ1QoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OmFib3V0VG9GaW5p
c2goKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgTE9HX01FRElBT0JKRUNUKCk7Ci19
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjp0b3RhbFRpbWVDaGFuZ2VkKHFpbnQ2
NCB0b3RhbFRpbWUpCi17Ci0jaWYgT1MoV0lORE9XUykKLSAgICBMT0coTWVkaWEsICJNZWRpYVBs
YXllclByaXZhdGVQaG9ub246OnRvdGFsVGltZUNoYW5nZWQoJUk2NGQpIiwgdG90YWxUaW1lKTsK
LSNlbHNlCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjp0b3RhbFRp
bWVDaGFuZ2VkKCVsbGQpIiwgdG90YWxUaW1lKTsKLSNlbmRpZgotICAgIExPR19NRURJQU9CSkVD
VCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNpbmNsdWRlICJtb2NfTWVkaWFQ
bGF5ZXJQcml2YXRlUGhvbm9uLmNwcCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5o
CShyZXZpc2lvbiA4OTgxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1MyArMCww
IEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9u
X2gKLSNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uX2gKLQotI2luY2x1ZGUgIk1lZGlh
UGxheWVyUHJpdmF0ZS5oIgotCi0jaW5jbHVkZSA8UU9iamVjdD4KLSNpbmNsdWRlIDxwaG9ub25u
YW1lc3BhY2UuaD4KLQotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRV2lkZ2V0OwotY2xhc3Mg
UVVybDsKLQotbmFtZXNwYWNlIFBob25vbiB7Ci0gICAgY2xhc3MgTWVkaWFPYmplY3Q7Ci0gICAg
Y2xhc3MgVmlkZW9XaWRnZXQ7Ci0gICAgY2xhc3MgQXVkaW9PdXRwdXQ7Ci0gICAgY2xhc3MgTWVk
aWFTb3VyY2U7Ci19Ci1RVF9FTkRfTkFNRVNQQUNFCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
ICAgIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbiA6IHB1YmxpYyBRT2JqZWN0LCBwdWJs
aWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKLQotICAgICAgICBRX09CSkVDVAotCi0g
ICAgcHVibGljOgotICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlh
RW5naW5lUmVnaXN0cmFyKTsKLSAgICAgICAgfk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbigpOwot
Ci0gICAgICAgIC8vIFRoZXNlIGVudW1zIGFyZSB1c2VkIGZvciBkZWJ1Z2dpbmcKLSAgICAgICAg
UV9FTlVNUyhSZWFkeVN0YXRlIE5ldHdvcmtTdGF0ZSBQaG9ub25TdGF0ZSkKLQotICAgICAgICBl
bnVtIFJlYWR5U3RhdGUgewotICAgICAgICAgICAgSGF2ZU5vdGhpbmcsIAotICAgICAgICAgICAg
SGF2ZU1ldGFkYXRhLCAKLSAgICAgICAgICAgIEhhdmVDdXJyZW50RGF0YSwgCi0gICAgICAgICAg
ICBIYXZlRnV0dXJlRGF0YSwgCi0gICAgICAgICAgICBIYXZlRW5vdWdoRGF0YQotICAgICAgICB9
OwotCi0gICAgICAgIGVudW0gTmV0d29ya1N0YXRlIHsKLSAgICAgICAgICAgIEVtcHR5LCAKLSAg
ICAgICAgICAgIElkbGUsIAotICAgICAgICAgICAgTG9hZGluZywgCi0gICAgICAgICAgICBMb2Fk
ZWQsIAotICAgICAgICAgICAgRm9ybWF0RXJyb3IsIAotICAgICAgICAgICAgTmV0d29ya0Vycm9y
LCAKLSAgICAgICAgICAgIERlY29kZUVycm9yCi0gICAgICAgIH07Ci0KLSAgICAgICAgZW51bSBQ
aG9ub25TdGF0ZSB7Ci0gICAgICAgICAgICBMb2FkaW5nU3RhdGUsCi0gICAgICAgICAgICBTdG9w
cGVkU3RhdGUsCi0gICAgICAgICAgICBQbGF5aW5nU3RhdGUsCi0gICAgICAgICAgICBCdWZmZXJp
bmdTdGF0ZSwKLSAgICAgICAgICAgIFBhdXNlZFN0YXRlLAotICAgICAgICAgICAgRXJyb3JTdGF0
ZQotICAgICAgICB9OwotCi0gICAgICAgIEludFNpemUgbmF0dXJhbFNpemUoKSBjb25zdDsKLSAg
ICAgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0OwotICAgICAgICBib29sIGhhc0F1ZGlvKCkgY29u
c3Q7Ci0KLSAgICAgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyAmdXJsKTsKLSAgICAgICAgdm9p
ZCBjYW5jZWxMb2FkKCk7Ci0KLSAgICAgICAgdm9pZCBwbGF5KCk7Ci0gICAgICAgIHZvaWQgcGF1
c2UoKTsKLQotICAgICAgICBib29sIHBhdXNlZCgpIGNvbnN0OwotICAgICAgICBib29sIHNlZWtp
bmcoKSBjb25zdDsKLQotICAgICAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0OwotICAgICAgICBm
bG9hdCBjdXJyZW50VGltZSgpIGNvbnN0OwotICAgICAgICB2b2lkIHNlZWsoZmxvYXQpOwotCi0g
ICAgICAgIHZvaWQgc2V0UmF0ZShmbG9hdCk7Ci0gICAgICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0
KTsKLSAgICAgICAgdm9pZCBzZXRNdXRlZChib29sKTsKLQotICAgICAgICBNZWRpYVBsYXllcjo6
TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0OwotICAgICAgICBNZWRpYVBsYXllcjo6
UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Q7Ci0KLSAgICAgICAgUGFzc1JlZlB0cjxUaW1l
UmFuZ2VzPiBidWZmZXJlZCgpIGNvbnN0OwotICAgICAgICBmbG9hdCBtYXhUaW1lU2Vla2FibGUo
KSBjb25zdDsKLSAgICAgICAgdW5zaWduZWQgYnl0ZXNMb2FkZWQoKSBjb25zdDsKLSAgICAgICAg
dW5zaWduZWQgdG90YWxCeXRlcygpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgc2V0VmlzaWJsZShi
b29sKTsKLSAgICAgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKTsKLQotICAgICAgICB2
b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgYm9vbCBldmVudEZpbHRlcihRT2JqZWN0KiwgUUV2ZW50Kik7Ci0KLSAg
ICBwcml2YXRlIHNsb3RzOgotICAgICAgICB2b2lkIHN0YXRlQ2hhbmdlZChQaG9ub246OlN0YXRl
LCBQaG9ub246OlN0YXRlKTsKLSAgICAgICAgdm9pZCBtZXRhRGF0YUNoYW5nZWQoKTsKLSAgICAg
ICAgdm9pZCBzZWVrYWJsZUNoYW5nZWQoYm9vbCk7Ci0gICAgICAgIHZvaWQgaGFzVmlkZW9DaGFu
Z2VkKGJvb2wpOwotICAgICAgICB2b2lkIGJ1ZmZlclN0YXR1cyhpbnQpOwotICAgICAgICB2b2lk
IGZpbmlzaGVkKCk7Ci0gICAgICAgIHZvaWQgY3VycmVudFNvdXJjZUNoYW5nZWQoY29uc3QgUGhv
bm9uOjpNZWRpYVNvdXJjZSYpOwotICAgICAgICB2b2lkIGFib3V0VG9GaW5pc2goKTsKLSAgICAg
ICAgdm9pZCB0b3RhbFRpbWVDaGFuZ2VkKHFpbnQ2NCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAg
ICBNZWRpYVBsYXllclByaXZhdGVQaG9ub24oTWVkaWFQbGF5ZXIqKTsKLSAgICAgICAgc3RhdGlj
IFBhc3NPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBjcmVhdGUoTWVkaWFQbGF5
ZXIqKTsKLQotICAgICAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0
cmluZz4mKTsKLSAgICAgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9y
dHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpOwotICAgICAg
ICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+JiBzdXBwb3J0ZWRUeXBlc0NhY2hlKCk7Ci0gICAgICAg
IHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgICAgIHZv
aWQgdXBkYXRlU3RhdGVzKCk7Ci0KLSAgICAgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOwotCi0g
ICAgICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7Ci0gICAgICAg
IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKLQotICAgICAgICBQaG9ub246
Ok1lZGlhT2JqZWN0KiBtX21lZGlhT2JqZWN0OwotICAgICAgICBQaG9ub246OlZpZGVvV2lkZ2V0
KiBtX3ZpZGVvV2lkZ2V0OwotICAgICAgICBQaG9ub246OkF1ZGlvT3V0cHV0KiBtX2F1ZGlvT3V0
cHV0OwotCi0gICAgICAgIGJvb2wgbV9pc1Zpc2libGU7Ci0gICAgfTsKLX0KLQotI2VuZGlmIC8v
IE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24g
ODk4MTUpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE1IEBACisyMDExLTA2LTI3ICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBv
cGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtRdF0gUmVtb3ZlIFBob25vbiBNZWRpYVBsYXllciBmcm9tIHRoZSB0cmVlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM0NDgKKworICAg
ICAgICBSZW1vdmUgUGhvbm9uIHJlbGF0ZWQgc3R1ZmYuCisKKyAgICAgICAgKiBkb2NzL3F0d2Vi
a2l0LnFkb2Njb25mOgorICAgICAgICAqIHF0X3dlYmtpdF92ZXJzaW9uLnByaToKKwogMjAxMS0w
Ni0yMCAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQW50b25pbyBHb21lcy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcXRfd2Via2l0X3Zl
cnNpb24ucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvcXRfd2Via2l0X3ZlcnNp
b24ucHJpCShyZXZpc2lvbiA4OTgxNSkKKysrIFNvdXJjZS9XZWJLaXQvcXQvcXRfd2Via2l0X3Zl
cnNpb24ucHJpCSh3b3JraW5nIGNvcHkpCkBAIC03LDcgKzcsNyBAQCBRVC53ZWJraXQubmFtZSA9
IFF0V2ViS2l0CiBRVC53ZWJraXQuaW5jbHVkZXMgPSAkJFFUX01PRFVMRV9JTkNMVURFX0JBU0Ug
JCRRVF9NT0RVTEVfSU5DTFVERV9CQVNFL1F0V2ViS2l0CiBRVC53ZWJraXQuc291cmNlcyA9ICQk
UVRfTU9EVUxFX0JBU0UKIFFULndlYmtpdC5saWJzID0gJCRRVF9NT0RVTEVfTElCX0JBU0UKLVFU
LndlYmtpdC5kZXBlbmRzID0gY29yZSBndWkgb3BlbmdsIG5ldHdvcmsgeG1scGF0dGVybnMgc2Ny
aXB0IHBob25vbgorUVQud2Via2l0LmRlcGVuZHMgPSBjb3JlIGd1aSBvcGVuZ2wgbmV0d29yayB4
bWxwYXR0ZXJucyBzY3JpcHQKIAogIWNvbnRhaW5zKFFUX0NPTkZJRywgbW9kdWxhcil8Y29udGFp
bnMoUVRfRUxJR0lCTEVfTU9EVUxFUywgd2Via2l0KSB7CiAgICAgUVRfQ09ORklHICs9IHdlYmtp
dApJbmRleDogU291cmNlL1dlYktpdC9xdC9kb2NzL3F0d2Via2l0LnFkb2Njb25mCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvZG9jcy9xdHdlYmtpdC5xZG9jY29uZgkocmV2aXNpb24g
ODk4MTUpCisrKyBTb3VyY2UvV2ViS2l0L3F0L2RvY3MvcXR3ZWJraXQucWRvY2NvbmYJKHdvcmtp
bmcgY29weSkKQEAgLTE0Niw3ICsxNDYsNiBAQCBDcHAuaWdub3JldG9rZW5zICAgICAgICA9IFFB
WEZBQ1RPUllfRVhQCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFFUX0JFR0lOX0lOQ0xVREVf
TkFNRVNQQUNFIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUVRfRU5EX05BTUVTUEFDRSBc
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFFUX0VORF9JTkNMVURFX05BTUVTUEFDRSBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIFBIT05PTl9FWFBPUlQgXAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBFWFRFTlNJT05TWVNURU1fRVhQT1JUIFwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUVdFQktJVF9FWFBPUlQKIENwcC5pZ25vcmVkaXJlY3RpdmVzICAgID0gUV9ERUNMQVJF
X0hBTkRMRSBcCkBAIC0xNjUsOSArMTY0LDcgQEAgQ3BwLmlnbm9yZWRpcmVjdGl2ZXMgICAgPSBR
X0RFQ0xBUkVfSEFORAogICAgICAgICAgICAgICAgICAgICAgICAgICBRX0ZMQUdTIFwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUV9JTlRFUkZBQ0VTIFwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19hdHRyaWJ1dGVfXyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEtfREVDTEFS
RV9QUklWQVRFIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUEhPTk9OX09CSkVDVCBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIFBIT05PTl9IRUlSCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIEtfREVDTEFSRV9QUklWQVRFCiAKIAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98742</attachid>
            <date>2011-06-27 10:07:25 -0700</date>
            <delta_ts>2011-06-27 10:26:45 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-63448-20110627140728.patch</filename>
            <type>text/plain</type>
            <size>30824</size>
            <attacher name="Alexis Menard (darktears)">menard</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDg5ODE1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDYt
MjcgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisKKyAgICAgICAgW1F0
XSBSZW1vdmUgUGhvbm9uIE1lZGlhUGxheWVyIGZyb20gdGhlIHRyZWUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzQ0OAorCisgICAgICAgIFJlbXZv
dmUgZnJvbSB0aGUgYnVpbGQuCisKKyAgICAgICAgKiBTb3VyY2UvV2ViS2l0LnByaToKKwogMjAx
MS0wNi0yNCAgRG9taW5pYyBDb29uZXkgIDxkb21pbmljY0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogU291cmNlL1dlYktpdC5wcmkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC5wcmkJKHJldmlzaW9uIDg5ODE1KQorKysgU291
cmNlL1dlYktpdC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwxMSArMTU0LDYgQEAgc3ltYmlh
bnxtYWVtbzV8bWFlbW82IHsKIAogZGlzYWJsZV91aXRvb2xzOiBERUZJTkVTICo9IFFUX05PX1VJ
VE9PTFMKIAotaXNFbXB0eShRVC5waG9ub24uaW5jbHVkZXMpIHsKLSAgICBRVC5waG9ub24uaW5j
bHVkZXMgPSAkJFFNQUtFX0lOQ0RJUl9RVC9waG9ub24KLSAgICBRVC5waG9ub24ubGlicyA9ICQk
UU1BS0VfTElCRElSX1FUCi19Ci0KICMgRGlzYWJsZSBhIGZldyB3YXJuaW5ncyBvbiBXaW5kb3dz
LiBUaGUgd2FybmluZ3MgYXJlIGFsc28KICMgZGlzYWJsZWQgaW4gV2ViS2l0TGlicmFyaWVzL3dp
bi90b29scy92c3Byb3BzL2NvbW1vbi52c3Byb3BzCiB3aW4zMi1tc3ZjKnx3aW5jZSo6IFFNQUtF
X0NYWEZMQUdTICs9IC13ZDQyOTEgLXdkNDM0NCAtd2Q0Mzk2IC13ZDQ1MDMgLXdkNDgwMCAtd2Q0
ODE5IC13ZDQ5OTYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5ODE1KQorKysgU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDYt
MjcgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisKKyAgICAgICAgW1F0
XSBSZW1vdmUgUGhvbm9uIE1lZGlhUGxheWVyIGZyb20gdGhlIHRyZWUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzQ0OAorCisgICAgICAgIFJlbW92
ZSBQaG9ub24gbWVkaWFwbGF5ZXIgYXMgaXQgaXMgdW51c2VkLCBub3QgZmluaXNoZWQgYW5kCisg
ICAgICAgIHVubWFpbnRhaW5lZC4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBXZWJDb3JlLnByaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBmZWF0dXJl
cy5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2
YXRlUGhvbm9uLmg6IFJlbW92ZWQuCisKIDIwMTEtMDYtMjcgIFBhdmVsIEZlbGRtYW4gIDxwZmVs
ZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3ku
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA4OTgxNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNDQyNyw4ICs0NDI3LDYgQEAKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbnRQb2ludFF0LmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW50UmVjdFF0LmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvcXQvSW50U2l6ZVF0LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmNwcCcsCi0gICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0aFF0LmNwcCcsCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnByaQkocmV2aXNpb24gODk4MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
aQkod29ya2luZyBjb3B5KQpAQCAtMjczLDE3ICsyNzMsNiBAQCBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfVklERU89MSkgewogICAgICAgICBDT05GSUcgICAqPSBtb2JpbGl0eQogICAgICAgICBN
T0JJTElUWSAqPSBtdWx0aW1lZGlhCiAgICAgICAgIERFRklORVMgICs9IFdURl9VU0VfUVRfTVVM
VElNRURJQT0xCi0gICAgfSBlbHNlOmNvbnRhaW5zKFFUX0NPTkZJRywgcGhvbm9uKSB7Ci0gICAg
ICAgICMgQWRkIHBob25vbiBtYW51YWxseSB0byBwcmV2ZW50IGl0IGZyb20gY29taW5nIGZpcnN0
IGluCi0gICAgICAgICMgdGhlIGluY2x1ZGUgcGF0aHMsIGFzIFBob25vbidzIHBhdGguaCBjb25m
bGljdHMgd2l0aAotICAgICAgICAjIFdlYkNvcmUncyBQYXRoLmggb24gY2FzZS1pbnNlbnNpdGl2
ZSBmaWxlc3lzdGVtcy4KLSAgICAgICAgcXRBZGRMaWJyYXJ5KHBob25vbikKLSAgICAgICAgSU5D
TFVERVBBVEggLT0gJCRRVC5waG9ub24uaW5jbHVkZXMKLSAgICAgICAgSU5DTFVERVBBVEggKz0g
JCRRVC5waG9ub24uaW5jbHVkZXMKLSAgICAgICAgbWFjIHsKLSAgICAgICAgICAgIElOQ0xVREVQ
QVRIIC09ICQkUVQucGhvbm9uLmxpYnMvcGhvbm9uLmZyYW1ld29yay9IZWFkZXJzCi0gICAgICAg
ICAgICBJTkNMVURFUEFUSCArPSAkJFFULnBob25vbi5saWJzL3Bob25vbi5mcmFtZXdvcmsvSGVh
ZGVycwotICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24g
ODk4MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAt
MzA1OSwxMiArMzA1OSw2IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CiAK
ICAgICAgICAgU09VUkNFUyArPSBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9N
ZWRpYVBsYXllclByaXZhdGVRdC5jcHAKLSAgICB9IGVsc2U6Y29udGFpbnMoUVRfQ09ORklHLCBw
aG9ub24pIHsKLSAgICAgICAgSEVBREVSUyArPSBcCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uaAotCi0gICAgICAgIFNPVVJDRVMgKz0g
XAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhv
bm9uLmNwcAogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZmVhdHVyZXMucHJpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZlYXR1cmVzLnByaQkocmV2aXNpb24gODk4MTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9mZWF0dXJlcy5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw3
ICsxNzksNyBAQCBzeW1iaWFufG1hZW1vNXxtYWVtbzYgewogIWNvbnRhaW5zKERFRklORVMsIEVO
QUJMRV9UT1VDSF9FVkVOVFM9Lik6IERFRklORVMgKz0gRU5BQkxFX1RPVUNIX0VWRU5UUz0xCiAK
ICMgSFRNTDUgTWVkaWEgU3VwcG9ydAotIyBXZSByZXF1aXJlIFF0TXVsdGltZWRpYSBvciBQaG9u
b24KKyMgV2UgcmVxdWlyZSBRdE11bHRpbWVkaWEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
VklERU89LikgewogICAgIERFRklORVMgLT0gRU5BQkxFX1ZJREVPPTEKICAgICBERUZJTkVTICs9
IEVOQUJMRV9WSURFTz0wCkBAIC0xOTksMTEgKzE5OSw2IEBAIHN5bWJpYW58bWFlbW81fG1hZW1v
NiB7CiAgICAgICAgIERFRklORVMgKz0gRU5BQkxFX1ZJREVPPTEKICAgICAgICAgREVGSU5FUyAt
PSBXVEZfVVNFX1FUX01VTFRJTUVESUE9MAogICAgICAgICBERUZJTkVTICs9IFdURl9VU0VfUVRf
TVVMVElNRURJQT0xCi0gICAgfSBlbHNlOmNvbnRhaW5zKFFUX0NPTkZJRywgcGhvbm9uKSB7Ci0g
ICAgICAgIERFRklORVMgLT0gRU5BQkxFX1ZJREVPPTAKLSAgICAgICAgREVGSU5FUyArPSBFTkFC
TEVfVklERU89MQotICAgICAgICBERUZJTkVTIC09IFdURl9VU0VfUVRfTVVMVElNRURJQT0xCi0g
ICAgICAgIERFRklORVMgKz0gV1RGX1VTRV9RVF9NVUxUSU1FRElBPTAKICAgICB9CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5j
cHAJKHJldmlzaW9uIDg5ODE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw5ICs2Miw2IEBACiAjaWYgVVNF
KFFUX01VTFRJTUVESUEpICYmICFVU0UoR1NUUkVBTUVSKQogI2luY2x1ZGUgIk1lZGlhUGxheWVy
UHJpdmF0ZVF0LmgiCiAjZGVmaW5lIFBsYXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWUgTWVkaWFQ
bGF5ZXJQcml2YXRlUXQKLSNlbGlmICFVU0UoR1NUUkVBTUVSKSAmJiAhVVNFKFFUS0lUKQotI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oIgotI2RlZmluZSBQbGF0Zm9ybU1lZGlh
RW5naW5lQ2xhc3NOYW1lIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbgogI2VuZGlmCiAjZWxpZiBQ
TEFURk9STShDSFJPTUlVTSkKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5o
IgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQ
cml2YXRlUGhvbm9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uY3BwCShyZXZpc2lvbiA4OTgxNSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0
ZVBob25vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTU3ICswLDAgQEAKLS8qCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQotICAgIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0
ZVBob25vbi5oIgotCi0jaW5jbHVkZSA8bGltaXRzPgotCi0jaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2lu
Y2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgot
I2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKLSNpbmNsdWRlICJXaWRnZXQuaCIKLSNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2luY2x1ZGUg
PFFEZWJ1Zz4KLSNpbmNsdWRlIDxRRXZlbnQ+Ci0jaW5jbHVkZSA8UU1ldGFFbnVtPgotI2luY2x1
ZGUgPFFQYWludGVyPgotI2luY2x1ZGUgPFFXaWRnZXQ+Ci0jaW5jbHVkZSA8UVVybD4KLQotI2lu
Y2x1ZGUgPHBob25vbi9hdWRpb291dHB1dC5oPgotI2luY2x1ZGUgPHBob25vbi9iYWNrZW5kY2Fw
YWJpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8cGhvbm9uL3BhdGguaD4KLSNpbmNsdWRlIDxwaG9ub24v
bWVkaWFvYmplY3QuaD4KLSNpbmNsdWRlIDxwaG9ub24vdmlkZW93aWRnZXQuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIFBob25vbjsKLQotI2RlZmluZSBMT0dfTUVESUFPQkpFQ1QoKSAoTE9HKE1lZGlh
LCAiJXMiLCBkZWJ1Z01lZGlhT2JqZWN0KHRoaXMsICptX21lZGlhT2JqZWN0KS5jb25zdERhdGEo
KSkpCi0KLSNpZiAhTE9HX0RJU0FCTEVECi1zdGF0aWMgUUJ5dGVBcnJheSBkZWJ1Z01lZGlhT2Jq
ZWN0KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVBob25vbiogbWVkaWFQbGF5ZXIsIGNvbnN0
IE1lZGlhT2JqZWN0JiBtZWRpYU9iamVjdCkKLXsKLSAgICBRQnl0ZUFycmF5IGJ5dGVBcnJheTsK
LSAgICBRVGV4dFN0cmVhbSBzdHJlYW0oJmJ5dGVBcnJheSk7Ci0KLSAgICBjb25zdCBRTWV0YU9i
amVjdCogbWV0YU9iaiA9IG1lZGlhUGxheWVyLT5tZXRhT2JqZWN0KCk7Ci0gICAgUU1ldGFFbnVt
IHBob25vblN0YXRlcyA9IG1ldGFPYmotPmVudW1lcmF0b3IobWV0YU9iai0+aW5kZXhPZkVudW1l
cmF0b3IoIlBob25vblN0YXRlIikpOwotCi0gICAgc3RyZWFtIDw8ICJkZWJ1Z01lZGlhT2JqZWN0
IC0+IFBob25vbjo6TWVkaWFPYmplY3QoIjsKLSAgICBzdHJlYW0gPDwgIlN0YXRlOiAiIDw8IHBo
b25vblN0YXRlcy52YWx1ZVRvS2V5KG1lZGlhT2JqZWN0LnN0YXRlKCkpOwotICAgIHN0cmVhbSA8
PCAiIHwgQ3VycmVudCB0aW1lOiAiIDw8IG1lZGlhT2JqZWN0LmN1cnJlbnRUaW1lKCk7Ci0gICAg
c3RyZWFtIDw8ICIgfCBSZW1haW5pbmcgdGltZTogIiA8PCBtZWRpYU9iamVjdC5yZW1haW5pbmdU
aW1lKCk7Ci0gICAgc3RyZWFtIDw8ICIgfCBUb3RhbCB0aW1lOiAiIDw8IG1lZGlhT2JqZWN0LnRv
dGFsVGltZSgpOwotICAgIHN0cmVhbSA8PCAiIHwgTWV0YS1kYXRhOiAiOwotICAgIFFNdWx0aU1h
cDxRU3RyaW5nLCBRU3RyaW5nPiBtYXAgPSBtZWRpYU9iamVjdC5tZXRhRGF0YSgpOwotICAgIGZv
ciAoUU1hcDxRU3RyaW5nLCBRU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuY29uc3RC
ZWdpbigpOwotICAgICAgICBpdCAhPSBtYXAuY29uc3RFbmQoKTsgKytpdCkgewotICAgICAgICBz
dHJlYW0gPDwgIigiIDw8IGl0LmtleSgpIDw8ICIsICIgPDwgaXQudmFsdWUoKSA8PCAiKSI7Ci0g
ICAgfQotICAgIHN0cmVhbSA8PCAiIHwgSGFzIHZpZGVvOiAiIDw8IG1lZGlhT2JqZWN0Lmhhc1Zp
ZGVvKCk7Ci0gICAgc3RyZWFtIDw8ICIgfCBJcyBzZWVrYWJsZTogIiA8PCBtZWRpYU9iamVjdC5p
c1NlZWthYmxlKCk7Ci0gICAgc3RyZWFtIDw8ICIpIjsKLQotICAgIHN0cmVhbS5mbHVzaCgpOwot
Ci0gICAgcmV0dXJuIGJ5dGVBcnJheTsKLX0KLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgV1RG
OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLU1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6TWVk
aWFQbGF5ZXJQcml2YXRlUGhvbm9uKE1lZGlhUGxheWVyKiBwbGF5ZXIpCi0gICAgOiBtX3BsYXll
cihwbGF5ZXIpCi0gICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkpCi0gICAg
LCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQotICAgICwgbV9tZWRpYU9i
amVjdChuZXcgTWVkaWFPYmplY3QoKSkKLSAgICAsIG1fdmlkZW9XaWRnZXQobmV3IFZpZGVvV2lk
Z2V0KDApKQotICAgICwgbV9hdWRpb091dHB1dChuZXcgQXVkaW9PdXRwdXQoKSkKLSAgICAsIG1f
aXNWaXNpYmxlKGZhbHNlKQotewotICAgIC8vIEhpbnQgdG8gUGhvbm9uIHRvIGRpc2FibGUgb3Zl
cmxheSBwYWludGluZwotICAgIG1fdmlkZW9XaWRnZXQtPnNldEF0dHJpYnV0ZShRdDo6V0FfRG9u
dFNob3dPblNjcmVlbik7Ci0gICAgbV92aWRlb1dpZGdldC0+c2V0QXR0cmlidXRlKFF0OjpXQV9R
dWl0T25DbG9zZSwgZmFsc2UpOwotCi0gICAgY3JlYXRlUGF0aChtX21lZGlhT2JqZWN0LCBtX3Zp
ZGVvV2lkZ2V0KTsKLSAgICBjcmVhdGVQYXRoKG1fbWVkaWFPYmplY3QsIG1fYXVkaW9PdXRwdXQp
OwotCi0gICAgLy8gTWFrZSBzdXJlIHdlIGdldCB1cGRhdGVzIGZvciBlYWNoIGZyYW1lCi0gICAg
bV92aWRlb1dpZGdldC0+aW5zdGFsbEV2ZW50RmlsdGVyKHRoaXMpOwotICAgIGZvcmVhY2ggKFFX
aWRnZXQqIHdpZGdldCwgbV92aWRlb1dpZGdldC0+ZmluZENoaWxkcmVuPFFXaWRnZXQqPigpKQot
ICAgICAgICB3aWRnZXQtPmluc3RhbGxFdmVudEZpbHRlcih0aGlzKTsKLQotICAgIGNvbm5lY3Qo
bV9tZWRpYU9iamVjdCwgU0lHTkFMKHN0YXRlQ2hhbmdlZChQaG9ub246OlN0YXRlLFBob25vbjo6
U3RhdGUpKSwKLSAgICAgICAgICAgIHRoaXMsIFNMT1Qoc3RhdGVDaGFuZ2VkKFBob25vbjo6U3Rh
dGUsUGhvbm9uOjpTdGF0ZSkpKTsKLSAgICBjb25uZWN0KG1fbWVkaWFPYmplY3QsIFNJR05BTCht
ZXRhRGF0YUNoYW5nZWQoKSksIHRoaXMsIFNMT1QobWV0YURhdGFDaGFuZ2VkKCkpKTsKLSAgICBj
b25uZWN0KG1fbWVkaWFPYmplY3QsIFNJR05BTChzZWVrYWJsZUNoYW5nZWQoYm9vbCkpLCB0aGlz
LCBTTE9UKHNlZWthYmxlQ2hhbmdlZChib29sKSkpOwotICAgIGNvbm5lY3QobV9tZWRpYU9iamVj
dCwgU0lHTkFMKGhhc1ZpZGVvQ2hhbmdlZChib29sKSksIHRoaXMsIFNMT1QoaGFzVmlkZW9DaGFu
Z2VkKGJvb2wpKSk7Ci0gICAgY29ubmVjdChtX21lZGlhT2JqZWN0LCBTSUdOQUwoYnVmZmVyU3Rh
dHVzKGludCkpLCB0aGlzLCBTTE9UKGJ1ZmZlclN0YXR1cyhpbnQpKSk7Ci0gICAgY29ubmVjdCht
X21lZGlhT2JqZWN0LCBTSUdOQUwoZmluaXNoZWQoKSksIHRoaXMsIFNMT1QoZmluaXNoZWQoKSkp
OwotICAgIGNvbm5lY3QobV9tZWRpYU9iamVjdCwgU0lHTkFMKGN1cnJlbnRTb3VyY2VDaGFuZ2Vk
KFBob25vbjo6TWVkaWFTb3VyY2UpKSwKLSAgICAgICAgICAgIHRoaXMsIFNMT1QoY3VycmVudFNv
dXJjZUNoYW5nZWQoUGhvbm9uOjpNZWRpYVNvdXJjZSkpKTsKLSAgICBjb25uZWN0KG1fbWVkaWFP
YmplY3QsIFNJR05BTChhYm91dFRvRmluaXNoKCkpLCB0aGlzLCBTTE9UKGFib3V0VG9GaW5pc2go
KSkpOwotICAgIGNvbm5lY3QobV9tZWRpYU9iamVjdCwgU0lHTkFMKHRvdGFsVGltZUNoYW5nZWQo
cWludDY0KSksIHRoaXMsIFNMT1QodG90YWxUaW1lQ2hhbmdlZChxaW50NjQpKSk7Ci19Ci0KLVBh
c3NPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBNZWRpYVBsYXllclByaXZhdGVQ
aG9ub246OmNyZWF0ZShNZWRpYVBsYXllciogcGxheWVyKQotewotICAgIHJldHVybiBhZG9wdFB0
cihuZXcgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uKHBsYXllcikpOwotfQotCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZVBob25vbjo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lz
dHJhciByZWdpc3RyYXIpCi17Ci0gICAgaWYgKGlzQXZhaWxhYmxlKCkpCi0gICAgICAgIHJlZ2lz
dHJhcihjcmVhdGUsIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5cGUsIDAsIDAsIDApOwot
fQotCi0KLU1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6fk1lZGlhUGxheWVyUHJpdmF0ZVBob25v
bigpCi17Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpkdG9yIGRl
bGV0aW5nIHZpZGVvd2lkZ2V0Iik7Ci0gICAgbV92aWRlb1dpZGdldC0+Y2xvc2UoKTsKLSAgICBk
ZWxldGUgbV92aWRlb1dpZGdldDsKLSAgICBtX3ZpZGVvV2lkZ2V0ID0gMDsKLQotICAgIExPRyhN
ZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6ZHRvciBkZWxldGluZyBhdWRpb291dHB1
dCIpOwotICAgIGRlbGV0ZSBtX2F1ZGlvT3V0cHV0OwotICAgIG1fYXVkaW9PdXRwdXQgPSAwOwot
Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpkdG9yIGRlbGV0aW5n
IG1lZGlhb2JqZWN0Iik7Ci0gICAgZGVsZXRlIG1fbWVkaWFPYmplY3Q7Ci0gICAgbV9tZWRpYU9i
amVjdCA9IDA7Ci19Ci0KLUhhc2hTZXQ8U3RyaW5nPiYgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9u
OjpzdXBwb3J0ZWRUeXBlc0NhY2hlKCkKLXsKLSAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+IHN1
cHBvcnRlZFR5cGVzOwotICAgIGlmICghc3VwcG9ydGVkVHlwZXMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gc3VwcG9ydGVkVHlwZXM7Ci0KLSAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHJlYnVp
bGQgdGhlIE1JTUUgdHlwZSBjYWNoZSBldmVyeSB0aW1lIHRoZSBiYWNrZW5kIGlzIGNoYW5nZWQs
Ci0gICAgLy8gaG93ZXZlciwgdGhpcyB3b3VsZCBoYXZlIG5vIGVmZmVjdCBvbiBNSU1FVHlwZVJl
Z2lzdHJ5IGFueXdheSwgYmVjYXVzZSBpdAotICAgIC8vIHB1bGxzIHRoaXMgZGF0YSBvbmx5IG9u
Y2UuCi0KLSAgICBRU3RyaW5nTGlzdCB0eXBlcyA9IFBob25vbjo6QmFja2VuZENhcGFiaWxpdGll
czo6YXZhaWxhYmxlTWltZVR5cGVzKCk7Ci0gICAgZm9yZWFjaCAoY29uc3QgUVN0cmluZyYgdHlw
ZSwgdHlwZXMpIHsKLSAgICAgICAgUVN0cmluZyBmaXJzdCA9IHR5cGUuc3BsaXQoUUxhdGluMUNo
YXIoJy8nKSkuYXQoMCk7Ci0KLSAgICAgICAgLy8gV2UncmUgb25seSBpbnRlcmVzdGVkIGluIHR5
cGVzIHdoaWNoIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IFdlYkNvcmUgaXRzZWxmLgotICAgICAgICBp
ZiAoZmlyc3QgIT0gUUxhdGluMVN0cmluZygidmlkZW8iKQotICAgICAgICAgICAgJiYgZmlyc3Qg
IT0gUUxhdGluMVN0cmluZygiYXVkaW8iKQotICAgICAgICAgICAgJiYgZmlyc3QgIT0gUUxhdGlu
MVN0cmluZygiYXBwbGljYXRpb24iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKHR5cGUpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgc3VwcG9ydGVkVHlwZXMuYWRkKFN0cmlu
Zyh0eXBlKSk7Ci0gICAgfQotCi0gICAgLy8gVGhlc2UgZm9ybWF0cyBhcmUgc3VwcG9ydGVkIGJ5
IEdTdHJlYW1lciwgYnV0IG5vdCBjb3JyZWN0bHkgYWR2ZXJ0aXNlZC4KLSAgICBpZiAoc3VwcG9y
dGVkVHlwZXMuY29udGFpbnMoU3RyaW5nKCJ2aWRlby94LWgyNjQiKSkKLSAgICAgICAgfHwgc3Vw
cG9ydGVkVHlwZXMuY29udGFpbnMoU3RyaW5nKCJhdWRpby94LW00YSIpKSkgewotICAgICAgICBz
dXBwb3J0ZWRUeXBlcy5hZGQoU3RyaW5nKCJ2aWRlby9tcDQiKSk7Ci0gICAgICAgIHN1cHBvcnRl
ZFR5cGVzLmFkZChTdHJpbmcoImF1ZGlvL2FhYyIpKTsKLSAgICB9Ci0KLSAgICBpZiAoc3VwcG9y
dGVkVHlwZXMuY29udGFpbnMoU3RyaW5nKCJ2aWRlby94LXRoZW9yYSIpKSkKLSAgICAgICAgc3Vw
cG9ydGVkVHlwZXMuYWRkKFN0cmluZygidmlkZW8vb2dnIikpOwotCi0gICAgaWYgKHN1cHBvcnRl
ZFR5cGVzLmNvbnRhaW5zKFN0cmluZygiYXVkaW8veC12b3JiaXMiKSkpCi0gICAgICAgIHN1cHBv
cnRlZFR5cGVzLmFkZChTdHJpbmcoImF1ZGlvL29nZyIpKTsKLQotICAgIGlmIChzdXBwb3J0ZWRU
eXBlcy5jb250YWlucyhTdHJpbmcoImF1ZGlvL3gtd2F2IikpKQotICAgICAgICBzdXBwb3J0ZWRU
eXBlcy5hZGQoU3RyaW5nKCJhdWRpby93YXYiKSk7Ci0KLSAgICByZXR1cm4gc3VwcG9ydGVkVHlw
ZXM7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpnZXRTdXBwb3J0ZWRUeXBl
cyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQotewotICAgIHR5cGVzID0gc3VwcG9ydGVkVHlwZXND
YWNoZSgpOwotfQotCi1NZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0
ZVBob25vbjo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBj
b2RlY3MpCi17Ci0gICAgaWYgKHR5cGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gTWVkaWFQ
bGF5ZXI6OklzTm90U3VwcG9ydGVkOwotCi0gICAgaWYgKHN1cHBvcnRlZFR5cGVzQ2FjaGUoKS5j
b250YWlucyh0eXBlKSkKLSAgICAgICAgcmV0dXJuIGNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBs
YXllcjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7Ci0gICAgcmV0
dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKLX0KLQotYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVQaG9ub246Omhhc1ZpZGVvKCkgY29uc3QKLXsKLSAgICBib29sIGhhc1ZpZGVvID0gbV9t
ZWRpYU9iamVjdC0+aGFzVmlkZW8oKTsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZh
dGVQaG9ub246Omhhc1ZpZGVvKCkgLT4gJXMiLCBoYXNWaWRlbyA/ICJ0cnVlIiA6ICJmYWxzZSIp
OwotICAgIHJldHVybiBoYXNWaWRlbzsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVQaG9u
b246Omhhc0F1ZGlvKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogUGhvbm9uOjpNZWRpYU9iamVj
dCBkb2VzIG5vdCBoYXZlIHN1Y2ggYSBoYXNBdWRpbygpIGZ1bmN0aW9uCi0gICAgYm9vbCBoYXNB
dWRpbyA9IHRydWU7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpo
YXNBdWRpbygpIC0+ICVzIiwgaGFzQXVkaW8gPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLSAgICByZXR1
cm4gaGFzQXVkaW87Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpsb2FkKGNv
bnN0IFN0cmluZyYgdXJsKQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBo
b25vbjo6bG9hZChcIiVzXCIpIiwgdXJsLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgLy8gV2UgYXJl
IG5vdyBsb2FkaW5nCi0gICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IE1lZGlhUGxheWVyOjpMb2Fk
aW5nKSB7Ci0gICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7Ci0g
ICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7Ci0gICAgfQotCi0gICAgLy8g
QW5kIHdlIGRvbid0IGhhdmUgYW55IGRhdGEgeWV0Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBN
ZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpIHsKLSAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQ
bGF5ZXI6OkhhdmVOb3RoaW5nOwotICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQo
KTsKLSAgICB9Ci0KLSAgICBtX21lZGlhT2JqZWN0LT5zZXRDdXJyZW50U291cmNlKFFVcmwodXJs
KSk7Ci0gICAgbV9hdWRpb091dHB1dC0+c2V0Vm9sdW1lKG1fcGxheWVyLT52b2x1bWUoKSk7Ci0g
ICAgc2V0VmlzaWJsZShtX3BsYXllci0+dmlzaWJsZSgpKTsKLX0KLQotdm9pZCBNZWRpYVBsYXll
clByaXZhdGVQaG9ub246OmNhbmNlbExvYWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnBsYXkoKQotewotICAgIExPRyhN
ZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6cGxheSgpIik7Ci0gICAgbV9tZWRpYU9i
amVjdC0+cGxheSgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6cGF1c2Uo
KQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6cGF1c2UoKSIp
OwotICAgIG1fbWVkaWFPYmplY3QtPnBhdXNlKCk7Ci19Ci0KLQotYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVQaG9ub246OnBhdXNlZCgpIGNvbnN0Ci17Ci0gICAgYm9vbCBwYXVzZWQgPSBtX21lZGlh
T2JqZWN0LT5zdGF0ZSgpID09IFBob25vbjo6UGF1c2VkU3RhdGU7Ci0gICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpwYXVzZWQoKSAtLT4gJXMiLCBwYXVzZWQgPyAidHJ1
ZSIgOiAiZmFsc2UiKTsKLSAgICByZXR1cm4gcGF1c2VkOwotfQotCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZVBob25vbjo6c2VlayhmbG9hdCBwb3NpdGlvbikKLXsKLSAgICBMT0coTWVkaWEsICJN
ZWRpYVBsYXllclByaXZhdGVQaG9ub246OnNlZWsoJWYpIiwgcG9zaXRpb24pOwotCi0gICAgaWYg
KCFtX21lZGlhT2JqZWN0LT5pc1NlZWthYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChwb3NpdGlvbiA+IGR1cmF0aW9uKCkpCi0gICAgICAgIHBvc2l0aW9uID0gZHVyYXRpb24oKTsK
LQotICAgIG1fbWVkaWFPYmplY3QtPnNlZWsocG9zaXRpb24gKiAxMDAwLjBmKTsKLX0KLQotYm9v
bCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnNlZWtpbmcoKSBjb25zdAotewotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpkdXJhdGlvbigp
IGNvbnN0Ci17Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRh
dGEpCi0gICAgICAgIHJldHVybiAwLjBmOwotCi0gICAgZmxvYXQgZHVyYXRpb24gPSBtX21lZGlh
T2JqZWN0LT50b3RhbFRpbWUoKSAvIDEwMDAuMGY7Ci0KLSAgICBpZiAoZHVyYXRpb24gPT0gMC4w
ZikgLy8gV2UgYXJlIHN0cmVhbWluZwotICAgICAgICBkdXJhdGlvbiA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpOwotCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQ
cml2YXRlUGhvbm9uOjpkdXJhdGlvbigpIC0tPiAlZiIsIGR1cmF0aW9uKTsKLSAgICByZXR1cm4g
ZHVyYXRpb247Ci19Ci0KLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6Y3VycmVudFRp
bWUoKSBjb25zdAotewotICAgIGZsb2F0IGN1cnJlbnRUaW1lID0gbV9tZWRpYU9iamVjdC0+Y3Vy
cmVudFRpbWUoKSAvIDEwMDAuMGY7Ci0KLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZh
dGVQaG9ub246OmN1cnJlbnRUaW1lKCkgLS0+ICVmIiwgY3VycmVudFRpbWUpOwotICAgIHJldHVy
biBjdXJyZW50VGltZTsKLX0KLQotUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclBy
aXZhdGVQaG9ub246OmJ1ZmZlcmVkKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKLX0KLQotZmxvYXQgTWVkaWFQbGF5ZXJQ
cml2YXRlUGhvbm9uOjptYXhUaW1lU2Vla2FibGUoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIDAuMGY7Ci19Ci0KLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0
ZVBob25vbjo6Ynl0ZXNMb2FkZWQoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6dG90
YWxCeXRlcygpIGNvbnN0Ci17Ci0gICAgLy9ub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAw
OwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6c2V0UmF0ZShmbG9hdCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25v
bjo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKLXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXll
clByaXZhdGVQaG9ub246OnNldFZvbHVtZSgpIik7Ci0gICAgbV9hdWRpb091dHB1dC0+c2V0Vm9s
dW1lKHZvbHVtZSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpzZXRNdXRl
ZChib29sIG11dGVkKQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25v
bjo6c2V0TXV0ZWQoKSIpOwotICAgIG1fYXVkaW9PdXRwdXQtPnNldE11dGVkKG11dGVkKTsKLX0K
LQotTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVQaG9ub246Om5l
dHdvcmtTdGF0ZSgpIGNvbnN0Ci17Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIGNvbnN0IFFNZXRh
T2JqZWN0KiBtZXRhT2JqID0gdGhpcy0+bWV0YU9iamVjdCgpOwotICAgIFFNZXRhRW51bSBuZXR3
b3JrU3RhdGVzID0gbWV0YU9iai0+ZW51bWVyYXRvcihtZXRhT2JqLT5pbmRleE9mRW51bWVyYXRv
cigiTmV0d29ya1N0YXRlIikpOwotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBo
b25vbjo6bmV0d29ya1N0YXRlKCkgLS0+ICVzIiwgbmV0d29ya1N0YXRlcy52YWx1ZVRvS2V5KG1f
bmV0d29ya1N0YXRlKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbV9uZXR3b3JrU3RhdGU7Ci19Ci0K
LU1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6cmVhZHlT
dGF0ZSgpIGNvbnN0Ci17Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIGNvbnN0IFFNZXRhT2JqZWN0
KiBtZXRhT2JqID0gdGhpcy0+bWV0YU9iamVjdCgpOwotICAgIFFNZXRhRW51bSByZWFkeVN0YXRl
cyA9IG1ldGFPYmotPmVudW1lcmF0b3IobWV0YU9iai0+aW5kZXhPZkVudW1lcmF0b3IoIlJlYWR5
U3RhdGUiKSk7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpyZWFk
eVN0YXRlKCkgLS0+ICVzIiwgcmVhZHlTdGF0ZXMudmFsdWVUb0tleShtX3JlYWR5U3RhdGUpKTsK
LSNlbmRpZgotICAgIHJldHVybiBtX3JlYWR5U3RhdGU7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUGhvbm9uOjp1cGRhdGVTdGF0ZXMoKQotewotICAgIE1lZGlhUGxheWVyOjpOZXR3b3Jr
U3RhdGUgb2xkTmV0d29ya1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7Ci0gICAgTWVkaWFQbGF5ZXI6
OlJlYWR5U3RhdGUgb2xkUmVhZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKLQotICAgIFBob25vbjo6
U3RhdGUgcGhvbm9uU3RhdGUgPSBtX21lZGlhT2JqZWN0LT5zdGF0ZSgpOwotCi0gICAgaWYgKHBo
b25vblN0YXRlID09IFBob25vbjo6U3RvcHBlZFN0YXRlKSB7Ci0gICAgICAgIGlmIChtX3JlYWR5
U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhKSB7Ci0gICAgICAgICAgICBtX25ldHdv
cmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOyAvLyBGSVhNRTogc2hvdWxkIHRoaXMgYmUg
TWVkaWFQbGF5ZXI6OklkbGU/Ci0gICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXll
cjo6SGF2ZU1ldGFkYXRhOwotICAgICAgICAgICAgbV9tZWRpYU9iamVjdC0+cGF1c2UoKTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAocGhvbm9uU3RhdGUgPT0gUGhvbm9uOjpQYXVzZWRTdGF0
ZSkgewotICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkZWQ7Ci0gICAg
ICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKLSAgICB9IGVs
c2UgaWYgKHBob25vblN0YXRlID09IFBob25vbjo6RXJyb3JTdGF0ZSkgewotICAgICAgICAgaWYg
KCFtX21lZGlhT2JqZWN0IHx8IG1fbWVkaWFPYmplY3QtPmVycm9yVHlwZSgpID09IFBob25vbjo6
RmF0YWxFcnJvcikgewotICAgICAgICAgICAgIC8vIEZJWE1FOiBpcyBpdCBwb3NzaWxlIHRvIGRp
ZmZlcmVudGlhdGUgYmV0d2VlbiBkaWZmZXJlbnQgdHlwZXMgb2YgZXJyb3JzCi0gICAgICAgICAg
ICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TmV0d29ya0Vycm9yOwotICAgICAgICAg
ICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKLSAgICAgICAgICAg
ICBjYW5jZWxMb2FkKCk7Ci0gICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICBtX21lZGlhT2Jq
ZWN0LT5wYXVzZSgpOwotICAgIH0KLQotICAgIGlmIChzZWVraW5nKCkpCi0gICAgICAgIG1fcmVh
ZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKLQotICAgIGlmIChtX25ldHdvcmtT
dGF0ZSAhPSBvbGROZXR3b3JrU3RhdGUpIHsKLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgICAgIGNv
bnN0IFFNZXRhT2JqZWN0KiBtZXRhT2JqID0gdGhpcy0+bWV0YU9iamVjdCgpOwotICAgICAgICBR
TWV0YUVudW0gbmV0d29ya1N0YXRlcyA9IG1ldGFPYmotPmVudW1lcmF0b3IobWV0YU9iai0+aW5k
ZXhPZkVudW1lcmF0b3IoIk5ldHdvcmtTdGF0ZSIpKTsKLSAgICAgICAgTE9HKE1lZGlhLCAiTmV0
d29yayBzdGF0ZSBjaGFuZ2VkIGZyb20gJyVzJyB0byAnJXMnIiwKLSAgICAgICAgICAgICAgICBu
ZXR3b3JrU3RhdGVzLnZhbHVlVG9LZXkob2xkTmV0d29ya1N0YXRlKSwKLSAgICAgICAgICAgICAg
ICBuZXR3b3JrU3RhdGVzLnZhbHVlVG9LZXkobV9uZXR3b3JrU3RhdGUpKTsKLSNlbmRpZgotICAg
ICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwotICAgIH0KLQotICAgIGlmICht
X3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkgewotI2lmICFMT0dfRElTQUJMRUQKLSAgICAg
ICAgY29uc3QgUU1ldGFPYmplY3QqIG1ldGFPYmogPSB0aGlzLT5tZXRhT2JqZWN0KCk7Ci0gICAg
ICAgIFFNZXRhRW51bSByZWFkeVN0YXRlcyA9IG1ldGFPYmotPmVudW1lcmF0b3IobWV0YU9iai0+
aW5kZXhPZkVudW1lcmF0b3IoIlJlYWR5U3RhdGUiKSk7Ci0gICAgICAgIExPRyhNZWRpYSwgIlJl
YWR5IHN0YXRlIGNoYW5nZWQgZnJvbSAnJXMnIHRvICclcyciLAotICAgICAgICAgICAgICAgIHJl
YWR5U3RhdGVzLnZhbHVlVG9LZXkob2xkUmVhZHlTdGF0ZSksCi0gICAgICAgICAgICAgICAgcmVh
ZHlTdGF0ZXMudmFsdWVUb0tleShtX3JlYWR5U3RhdGUpKTsKLSNlbmRpZgotICAgICAgICBtX3Bs
YXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUGhvbm9uOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKLXsKLSAgICBtX2lzVmlzaWJs
ZSA9IHZpc2libGU7Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpz
ZXRWaXNpYmxlKCVzKSIsIHZpc2libGUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLQotICAgIG1fdmlk
ZW9XaWRnZXQtPnNldFZpc2libGUobV9pc1Zpc2libGUpOwotfQotCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZVBob25vbjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQotewotICAgIGlm
ICghbV92aWRlb1dpZGdldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9HKE1lZGlhLCAiTWVk
aWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpzZXRTaXplKCVkLCVkKSIsCi0gICAgICAgICAgICAgICAg
bmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpKTsKLQotICAgIFFSZWN0IGN1cnJlbnRS
ZWN0ID0gbV92aWRlb1dpZGdldC0+cmVjdCgpOwotCi0gICAgaWYgKG5ld1NpemUud2lkdGgoKSAh
PSBjdXJyZW50UmVjdC53aWR0aCgpIHx8IG5ld1NpemUuaGVpZ2h0KCkgIT0gY3VycmVudFJlY3Qu
aGVpZ2h0KCkpCi0gICAgICAgIG1fdmlkZW9XaWRnZXQtPnJlc2l6ZShuZXdTaXplLndpZHRoKCks
IG5ld1NpemUuaGVpZ2h0KCkpOwotfQotCi1JbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZVBob25v
bjo6bmF0dXJhbFNpemUoKSBjb25zdAotewotICAgIGlmICghaGFzVmlkZW8oKSkgewotICAgICAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246Om5hdHVyYWxTaXplKCkgLT4g
JWR4JWQiLAotICAgICAgICAgICAgICAgICAgICAwLCAwKTsKLSAgICAgICAgcmV0dXJuIEludFNp
emUoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9yZWFkeVN0YXRlIDwgTWVkaWFQbGF5ZXI6OkhhdmVN
ZXRhZGF0YSkgewotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246
Om5hdHVyYWxTaXplKCkgLT4gJWR4JWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg
MCk7Ci0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0gICAgfQotCi0gICAgUVNpemUgdmlkZW9T
aXplID0gbV92aWRlb1dpZGdldC0+c2l6ZUhpbnQoKTsKLSAgICBJbnRTaXplIG5hdHVyYWxTaXpl
KHZpZGVvU2l6ZS53aWR0aCgpLCB2aWRlb1NpemUuaGVpZ2h0KCkpOwotICAgIExPRyhNZWRpYSwg
Ik1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6bmF0dXJhbFNpemUoKSAtPiAlZHglZCIsCi0gICAg
ICAgICAgICBuYXR1cmFsU2l6ZS53aWR0aCgpLCBuYXR1cmFsU2l6ZS5oZWlnaHQoKSk7Ci0gICAg
cmV0dXJuIG5hdHVyYWxTaXplOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6
ZXZlbnRGaWx0ZXIoUU9iamVjdCogb2JqLCBRRXZlbnQqIGV2ZW50KQotewotICAgIGlmIChldmVu
dC0+dHlwZSgpID09IFFFdmVudDo6VXBkYXRlUmVxdWVzdCkKLSAgICAgICAgbV9wbGF5ZXItPnJl
cGFpbnQoKTsKLQotICAgIHJldHVybiBRT2JqZWN0OjpldmVudEZpbHRlcihvYmosIGV2ZW50KTsK
LX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnBhaW50KEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZWN0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChncmFw
aGljc0NvbnRlY3QtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCFtX2lzVmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUVBhaW50ZXIqIHBhaW50
ZXIgPSBncmFwaGljc0NvbnRlY3QtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgcGFpbnRlci0+
ZmlsbFJlY3QocmVjdCwgUXQ6OmJsYWNrKTsKLQotICAgIG1fdmlkZW9XaWRnZXQtPnJlbmRlcihw
YWludGVyLCBRUG9pbnQocmVjdC54KCksIHJlY3QueSgpKSwKLSAgICAgICAgICAgIFFSZWdpb24o
MCwgMCwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7Ci19Ci0KLS8vID09PT09PT09PT09
PT09PT09PT09PT0gUGhvbm9uOjpNZWRpYU9iamVjdCBzaWduYWxzID09PT09PT09PT09PT09PT09
PT09PT0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnN0YXRlQ2hhbmdlZChQaG9u
b246OlN0YXRlIG5ld1N0YXRlLCBQaG9ub246OlN0YXRlIG9sZFN0YXRlKQotewotI2lmICFMT0df
RElTQUJMRUQKLSAgICBjb25zdCBRTWV0YU9iamVjdCogbWV0YU9iaiA9IHRoaXMtPm1ldGFPYmpl
Y3QoKTsKLSAgICBRTWV0YUVudW0gcGhvbm9uU3RhdGVzID0gbWV0YU9iai0+ZW51bWVyYXRvciht
ZXRhT2JqLT5pbmRleE9mRW51bWVyYXRvcigiUGhvbm9uU3RhdGUiKSk7Ci0gICAgTE9HKE1lZGlh
LCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpzdGF0ZUNoYW5nZWQobmV3U3RhdGU9JXMsIG9s
ZFN0YXRlPSVzKSIsCi0gICAgICAgICAgICBwaG9ub25TdGF0ZXMudmFsdWVUb0tleShuZXdTdGF0
ZSksIHBob25vblN0YXRlcy52YWx1ZVRvS2V5KG9sZFN0YXRlKSk7Ci0jZW5kaWYKLQotICAgIHVw
ZGF0ZVN0YXRlcygpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6bWV0YURh
dGFDaGFuZ2VkKCkKLXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246
Om1ldGFEYXRhQ2hhbmdlZCgpIik7Ci0gICAgTE9HX01FRElBT0JKRUNUKCk7Ci19Ci0KLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpzZWVrYWJsZUNoYW5nZWQoYm9vbCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIExPR19NRURJQU9CSkVDVCgpOwotfQotCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZVBob25vbjo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCi17Ci0g
ICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpoYXNWaWRlb0NoYW5nZWQo
JXMpIiwgaGFzVmlkZW8gPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLX0KLQotdm9pZCBNZWRpYVBsYXll
clByaXZhdGVQaG9ub246OmJ1ZmZlclN0YXR1cyhpbnQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICBMT0dfTUVESUFPQkpFQ1QoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVQ
aG9ub246OmZpbmlzaGVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIExPR19NRURJ
QU9CSkVDVCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6Y3VycmVudFNv
dXJjZUNoYW5nZWQoY29uc3QgUGhvbm9uOjpNZWRpYVNvdXJjZSYpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICBMT0dfTUVESUFPQkpFQ1QoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVQaG9ub246OmFib3V0VG9GaW5pc2goKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgTE9HX01FRElBT0JKRUNUKCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9u
Ojp0b3RhbFRpbWVDaGFuZ2VkKHFpbnQ2NCB0b3RhbFRpbWUpCi17Ci0jaWYgT1MoV0lORE9XUykK
LSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnRvdGFsVGltZUNoYW5n
ZWQoJUk2NGQpIiwgdG90YWxUaW1lKTsKLSNlbHNlCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5
ZXJQcml2YXRlUGhvbm9uOjp0b3RhbFRpbWVDaGFuZ2VkKCVsbGQpIiwgdG90YWxUaW1lKTsKLSNl
bmRpZgotICAgIExPR19NRURJQU9CSkVDVCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNpbmNsdWRlICJtb2NfTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmNwcCIKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25v
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01l
ZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oCShyZXZpc2lvbiA4OTgxNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDE1MyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwOCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAgICBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYg
TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uX2gKLSNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlUGhv
bm9uX2gKLQotI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgotCi0jaW5jbHVkZSA8UU9i
amVjdD4KLSNpbmNsdWRlIDxwaG9ub25uYW1lc3BhY2UuaD4KLQotUVRfQkVHSU5fTkFNRVNQQUNF
Ci1jbGFzcyBRV2lkZ2V0OwotY2xhc3MgUVVybDsKLQotbmFtZXNwYWNlIFBob25vbiB7Ci0gICAg
Y2xhc3MgTWVkaWFPYmplY3Q7Ci0gICAgY2xhc3MgVmlkZW9XaWRnZXQ7Ci0gICAgY2xhc3MgQXVk
aW9PdXRwdXQ7Ci0gICAgY2xhc3MgTWVkaWFTb3VyY2U7Ci19Ci1RVF9FTkRfTkFNRVNQQUNFCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZVBob25v
biA6IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsK
LQotICAgICAgICBRX09CSkVDVAotCi0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgdm9pZCBy
ZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKLSAgICAgICAgfk1lZGlh
UGxheWVyUHJpdmF0ZVBob25vbigpOwotCi0gICAgICAgIC8vIFRoZXNlIGVudW1zIGFyZSB1c2Vk
IGZvciBkZWJ1Z2dpbmcKLSAgICAgICAgUV9FTlVNUyhSZWFkeVN0YXRlIE5ldHdvcmtTdGF0ZSBQ
aG9ub25TdGF0ZSkKLQotICAgICAgICBlbnVtIFJlYWR5U3RhdGUgewotICAgICAgICAgICAgSGF2
ZU5vdGhpbmcsIAotICAgICAgICAgICAgSGF2ZU1ldGFkYXRhLCAKLSAgICAgICAgICAgIEhhdmVD
dXJyZW50RGF0YSwgCi0gICAgICAgICAgICBIYXZlRnV0dXJlRGF0YSwgCi0gICAgICAgICAgICBI
YXZlRW5vdWdoRGF0YQotICAgICAgICB9OwotCi0gICAgICAgIGVudW0gTmV0d29ya1N0YXRlIHsK
LSAgICAgICAgICAgIEVtcHR5LCAKLSAgICAgICAgICAgIElkbGUsIAotICAgICAgICAgICAgTG9h
ZGluZywgCi0gICAgICAgICAgICBMb2FkZWQsIAotICAgICAgICAgICAgRm9ybWF0RXJyb3IsIAot
ICAgICAgICAgICAgTmV0d29ya0Vycm9yLCAKLSAgICAgICAgICAgIERlY29kZUVycm9yCi0gICAg
ICAgIH07Ci0KLSAgICAgICAgZW51bSBQaG9ub25TdGF0ZSB7Ci0gICAgICAgICAgICBMb2FkaW5n
U3RhdGUsCi0gICAgICAgICAgICBTdG9wcGVkU3RhdGUsCi0gICAgICAgICAgICBQbGF5aW5nU3Rh
dGUsCi0gICAgICAgICAgICBCdWZmZXJpbmdTdGF0ZSwKLSAgICAgICAgICAgIFBhdXNlZFN0YXRl
LAotICAgICAgICAgICAgRXJyb3JTdGF0ZQotICAgICAgICB9OwotCi0gICAgICAgIEludFNpemUg
bmF0dXJhbFNpemUoKSBjb25zdDsKLSAgICAgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0OwotICAg
ICAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBsb2FkKGNvbnN0IFN0
cmluZyAmdXJsKTsKLSAgICAgICAgdm9pZCBjYW5jZWxMb2FkKCk7Ci0KLSAgICAgICAgdm9pZCBw
bGF5KCk7Ci0gICAgICAgIHZvaWQgcGF1c2UoKTsKLQotICAgICAgICBib29sIHBhdXNlZCgpIGNv
bnN0OwotICAgICAgICBib29sIHNlZWtpbmcoKSBjb25zdDsKLQotICAgICAgICBmbG9hdCBkdXJh
dGlvbigpIGNvbnN0OwotICAgICAgICBmbG9hdCBjdXJyZW50VGltZSgpIGNvbnN0OwotICAgICAg
ICB2b2lkIHNlZWsoZmxvYXQpOwotCi0gICAgICAgIHZvaWQgc2V0UmF0ZShmbG9hdCk7Ci0gICAg
ICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KTsKLSAgICAgICAgdm9pZCBzZXRNdXRlZChib29sKTsK
LQotICAgICAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0
OwotICAgICAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Q7Ci0K
LSAgICAgICAgUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBidWZmZXJlZCgpIGNvbnN0OwotICAgICAg
ICBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdDsKLSAgICAgICAgdW5zaWduZWQgYnl0ZXNM
b2FkZWQoKSBjb25zdDsKLSAgICAgICAgdW5zaWduZWQgdG90YWxCeXRlcygpIGNvbnN0OwotCi0g
ICAgICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKLSAgICAgICAgdm9pZCBzZXRTaXplKGNvbnN0
IEludFNpemUmKTsKLQotICAgICAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEludFJlY3QmKTsKLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgYm9vbCBldmVudEZpbHRlcihR
T2JqZWN0KiwgUUV2ZW50Kik7Ci0KLSAgICBwcml2YXRlIHNsb3RzOgotICAgICAgICB2b2lkIHN0
YXRlQ2hhbmdlZChQaG9ub246OlN0YXRlLCBQaG9ub246OlN0YXRlKTsKLSAgICAgICAgdm9pZCBt
ZXRhRGF0YUNoYW5nZWQoKTsKLSAgICAgICAgdm9pZCBzZWVrYWJsZUNoYW5nZWQoYm9vbCk7Ci0g
ICAgICAgIHZvaWQgaGFzVmlkZW9DaGFuZ2VkKGJvb2wpOwotICAgICAgICB2b2lkIGJ1ZmZlclN0
YXR1cyhpbnQpOwotICAgICAgICB2b2lkIGZpbmlzaGVkKCk7Ci0gICAgICAgIHZvaWQgY3VycmVu
dFNvdXJjZUNoYW5nZWQoY29uc3QgUGhvbm9uOjpNZWRpYVNvdXJjZSYpOwotICAgICAgICB2b2lk
IGFib3V0VG9GaW5pc2goKTsKLSAgICAgICAgdm9pZCB0b3RhbFRpbWVDaGFuZ2VkKHFpbnQ2NCk7
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBNZWRpYVBsYXllclByaXZhdGVQaG9ub24oTWVkaWFQ
bGF5ZXIqKTsKLSAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50
ZXJmYWNlPiBjcmVhdGUoTWVkaWFQbGF5ZXIqKTsKLQotICAgICAgICBzdGF0aWMgdm9pZCBnZXRT
dXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mKTsKLSAgICAgICAgc3RhdGljIE1lZGlhUGxh
eWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3Qg
U3RyaW5nJiBjb2RlY3MpOwotICAgICAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+JiBzdXBwb3J0
ZWRUeXBlc0NhY2hlKCk7Ci0gICAgICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCkgeyByZXR1
cm4gdHJ1ZTsgfQotCi0gICAgICAgIHZvaWQgdXBkYXRlU3RhdGVzKCk7Ci0KLSAgICAgICAgTWVk
aWFQbGF5ZXIqIG1fcGxheWVyOwotCi0gICAgICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUg
bV9uZXR3b3JrU3RhdGU7Ci0gICAgICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlT
dGF0ZTsKLQotICAgICAgICBQaG9ub246Ok1lZGlhT2JqZWN0KiBtX21lZGlhT2JqZWN0OwotICAg
ICAgICBQaG9ub246OlZpZGVvV2lkZ2V0KiBtX3ZpZGVvV2lkZ2V0OwotICAgICAgICBQaG9ub246
OkF1ZGlvT3V0cHV0KiBtX2F1ZGlvT3V0cHV0OwotCi0gICAgICAgIGJvb2wgbV9pc1Zpc2libGU7
Ci0gICAgfTsKLX0KLQotI2VuZGlmIC8vIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbl9oCkluZGV4
OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gODk4MTUpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDExLTA2LTI3ICBBbGV4aXMg
TWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgorCisgICAgICAgIFtRdF0gUmVtb3ZlIFBo
b25vbiBNZWRpYVBsYXllciBmcm9tIHRoZSB0cmVlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM0NDgKKworICAgICAgICBSZW1vdmUgUGhvbm9uIHJl
bGF0ZWQgc3R1ZmYuCisKKyAgICAgICAgKiBkb2NzL3F0d2Via2l0LnFkb2Njb25mOgorICAgICAg
ICAqIHF0X3dlYmtpdF92ZXJzaW9uLnByaToKKwogMjAxMS0wNi0yMCAgUm9iZXJ0IEhvZ2FuICA8
cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW50b25pbyBHb21lcy4K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvcXRfd2Via2l0X3ZlcnNpb24ucHJpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvcXQvcXRfd2Via2l0X3ZlcnNpb24ucHJpCShyZXZpc2lvbiA4OTgx
NSkKKysrIFNvdXJjZS9XZWJLaXQvcXQvcXRfd2Via2l0X3ZlcnNpb24ucHJpCSh3b3JraW5nIGNv
cHkpCkBAIC03LDcgKzcsNyBAQCBRVC53ZWJraXQubmFtZSA9IFF0V2ViS2l0CiBRVC53ZWJraXQu
aW5jbHVkZXMgPSAkJFFUX01PRFVMRV9JTkNMVURFX0JBU0UgJCRRVF9NT0RVTEVfSU5DTFVERV9C
QVNFL1F0V2ViS2l0CiBRVC53ZWJraXQuc291cmNlcyA9ICQkUVRfTU9EVUxFX0JBU0UKIFFULndl
YmtpdC5saWJzID0gJCRRVF9NT0RVTEVfTElCX0JBU0UKLVFULndlYmtpdC5kZXBlbmRzID0gY29y
ZSBndWkgb3BlbmdsIG5ldHdvcmsgeG1scGF0dGVybnMgc2NyaXB0IHBob25vbgorUVQud2Via2l0
LmRlcGVuZHMgPSBjb3JlIGd1aSBvcGVuZ2wgbmV0d29yayB4bWxwYXR0ZXJucyBzY3JpcHQKIAog
IWNvbnRhaW5zKFFUX0NPTkZJRywgbW9kdWxhcil8Y29udGFpbnMoUVRfRUxJR0lCTEVfTU9EVUxF
Uywgd2Via2l0KSB7CiAgICAgUVRfQ09ORklHICs9IHdlYmtpdApJbmRleDogU291cmNlL1dlYktp
dC9xdC9kb2NzL3F0d2Via2l0LnFkb2Njb25mCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
cXQvZG9jcy9xdHdlYmtpdC5xZG9jY29uZgkocmV2aXNpb24gODk4MTUpCisrKyBTb3VyY2UvV2Vi
S2l0L3F0L2RvY3MvcXR3ZWJraXQucWRvY2NvbmYJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw3ICsx
NDYsNiBAQCBDcHAuaWdub3JldG9rZW5zICAgICAgICA9IFFBWEZBQ1RPUllfRVhQCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFFUX0JFR0lOX0lOQ0xVREVfTkFNRVNQQUNFIFwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUVRfRU5EX05BTUVTUEFDRSBcCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFFUX0VORF9JTkNMVURFX05BTUVTUEFDRSBcCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIFBIT05PTl9FWFBPUlQgXAogICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRFTlNJT05T
WVNURU1fRVhQT1JUIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUVdFQktJVF9FWFBPUlQK
IENwcC5pZ25vcmVkaXJlY3RpdmVzICAgID0gUV9ERUNMQVJFX0hBTkRMRSBcCkBAIC0xNjQsMTAg
KzE2Myw3IEBAIENwcC5pZ25vcmVkaXJlY3RpdmVzICAgID0gUV9ERUNMQVJFX0hBTkQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUV9FTlVNUyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IFFfRkxBR1MgXAogICAgICAgICAgICAgICAgICAgICAgICAgICBRX0lOVEVSRkFDRVMgXAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fIFwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgS19ERUNMQVJFX1BSSVZBVEUgXAotICAgICAgICAgICAgICAgICAgICAgICAgICBQ
SE9OT05fT0JKRUNUIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUEhPTk9OX0hFSVIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXwogCiAKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>