<?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>96016</bug_id>
          
          <creation_ts>2012-09-06 13:22:18 -0700</creation_ts>
          <short_desc>[EFL] Clean up the RenderTheme Edje caching</short_desc>
          <delta_ts>2012-09-12 00:55:29 -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 EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Rohde Christiansen">kenneth</reporter>
          <assigned_to name="Kenneth Rohde Christiansen">kenneth</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>tmpsantos</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>713621</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-06 13:22:18 -0700</bug_when>
    <thetext>SSIA</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713623</commentid>
    <comment_count>1</comment_count>
      <attachid>162566</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-06 13:23:40 -0700</bug_when>
    <thetext>Created attachment 162566
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713627</commentid>
    <comment_count>2</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-06 13:27:50 -0700</bug_when>
    <thetext>This patch unfortunately got mixed with my former one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713641</commentid>
    <comment_count>3</comment_count>
      <attachid>162572</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-06 13:39:30 -0700</bug_when>
    <thetext>Created attachment 162572
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713642</commentid>
    <comment_count>4</comment_count>
      <attachid>162572</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-06 13:42:09 -0700</bug_when>
    <thetext>Comment on attachment 162572
Patch

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

&gt; Source/WebCore/platform/efl/RenderThemeEfl.cpp:604
&gt; +    const char* path;
&gt; +    edje_object_file_get(o, &amp;path, 0);
&gt; +    _ASSERT_ON_RELEASE_RETURN(path, &quot;Could not load Edje theme file.&quot;);

use themePath()

&gt; Source/WebCore/platform/efl/RenderThemeEfl.h:256
&gt; +        static ThemePartCacheEntry* create(const IntSize&amp;, FormType, const String&amp; themePath);
&gt; +        void reuse(const String&amp; themePath, FormType, const IntSize&amp; size = IntSize());

Reorder arguments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715905</commentid>
    <comment_count>5</comment_count>
      <attachid>163084</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-10 04:03:08 -0700</bug_when>
    <thetext>Created attachment 163084
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715911</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-10 04:08:04 -0700</bug_when>
    <thetext>Attachment 163084 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/efl/RenderThemeEfl.h:257:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/efl/RenderThemeEfl.cpp:281:  Declaration has space between type name and * in ThemePartCacheEntry *entry  [whitespace/declaration] [3]
Total errors found: 2 in 3 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>715914</commentid>
    <comment_count>7</comment_count>
      <attachid>163084</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-10 04:09:33 -0700</bug_when>
    <thetext>Comment on attachment 163084
Patch

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

&gt; Source/WebCore/ChangeLog:58
&gt; +        [EFL] Fuzzy load the Edje theme for HTML forms

Can we add multiple changelog ?

&gt; Source/WebCore/platform/efl/RenderThemeEfl.cpp:121
&gt; +    ASSERT((size_t)type &lt; sizeof(groups) / sizeof(groups[0])); // out of sync?

our -&gt; Out ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715915</commentid>
    <comment_count>8</comment_count>
      <attachid>163085</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-10 04:10:33 -0700</bug_when>
    <thetext>Created attachment 163085
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715917</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-10 04:11:58 -0700</bug_when>
    <thetext>
&gt; Can we add multiple changelog ?

I don&apos;t know what when wrong... My git shows me that I am removing a change log entry now.

&gt; &gt; Source/WebCore/platform/efl/RenderThemeEfl.cpp:121
&gt; &gt; +    ASSERT((size_t)type &lt; sizeof(groups) / sizeof(groups[0])); // out of sync?
&gt; 
&gt; our -&gt; Out ?

It says &quot;out&quot; not &quot;our&quot;. I didn&apos;t add this comment btw</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715919</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-10 04:15:37 -0700</bug_when>
    <thetext>Attachment 163085 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/efl/RenderThemeEfl.h:257:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 3 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>715947</commentid>
    <comment_count>11</comment_count>
      <attachid>163085</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2012-09-10 05:12:48 -0700</bug_when>
    <thetext>Comment on attachment 163085
Patch

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

Logical side, looks good to me.
This is really good.

&gt; Source/WebCore/platform/efl/RenderThemeEfl.cpp:280
&gt; +    for (unsigned i = 0; it != end; i++, it++) {

As a nit, size_t looks better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715958</commentid>
    <comment_count>12</comment_count>
      <attachid>163085</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-10 05:20:56 -0700</bug_when>
    <thetext>Comment on attachment 163085
Patch

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

Looks fine as well except for my question.

&gt; Source/WebCore/platform/efl/RenderThemeEfl.cpp:185
&gt; +    unsigned char* buffer = (unsigned char*)(ecore_evas_buffer_pixels_get(ee));

Is static_cast&lt;&gt; better in .cpp file ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717249</commentid>
    <comment_count>13</comment_count>
      <attachid>163381</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-11 09:16:19 -0700</bug_when>
    <thetext>Created attachment 163381
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717256</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-11 09:20:40 -0700</bug_when>
    <thetext>Attachment 163381 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/efl/RenderThemeEfl.h:264:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 3 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>717275</commentid>
    <comment_count>15</comment_count>
      <attachid>163386</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-11 09:37:08 -0700</bug_when>
    <thetext>Created attachment 163386
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717347</commentid>
    <comment_count>16</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-11 10:34:48 -0700</bug_when>
    <thetext>Additional patch idea (avoid manual memory handling):

https://gist.github.com/4db97bc0568dfd4f5c2f</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717646</commentid>
    <comment_count>17</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2012-09-11 15:49:04 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Additional patch idea (avoid manual memory handling):
&gt; 
&gt; https://gist.github.com/4db97bc0568dfd4f5c2f

Yes!
I had a plan to use OwnPtr after this bug lands.
But, your changes are quite better than mine.

I like it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718014</commentid>
    <comment_count>18</comment_count>
      <attachid>163386</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-12 00:50:55 -0700</bug_when>
    <thetext>Comment on attachment 163386
Patch

Now we cross our fingers that this doesn&apos;t break anything :-) Otherwise we can roll out.

Ryuan has also tried the patch locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718018</commentid>
    <comment_count>19</comment_count>
      <attachid>163386</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-12 00:55:25 -0700</bug_when>
    <thetext>Comment on attachment 163386
Patch

Clearing flags on attachment: 163386

Committed r128274: &lt;http://trac.webkit.org/changeset/128274&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718019</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-12 00:55:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162566</attachid>
            <date>2012-09-06 13:23:40 -0700</date>
            <delta_ts>2012-09-06 13:39:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96016-20120906222319.patch</filename>
            <type>text/plain</type>
            <size>37154</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NTcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYxYjU2ZGVjY2E3ZTlm
MmQxNjIxMmFhYzI0MWNhZjNlZjA1ODE5NC4uOGY1MDM3Njg4ZGExN2M1ZDI3NTVkMGE1MGMzYmEz
ODlkZjI1ZjNmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNCBAQAorMjAxMi0wOS0wNiAgS2Vu
bmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
W0VGTF0gQ2xlYW4gdXAgdGhlIFJlbmRlclRoZW1lIEVkamUgY2FjaGluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTYwMTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9u
IG9mIHRoZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBl
ci1mdW5jdGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcg
dGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvRWRqZUdyb3VwKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldFNvdXJjZUdyb3VwRm9yRWRqZU9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeTo6VGhlbWVQYXJ0
Q2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0
Q2FjaGVFbnRyeTo6flRoZW1lUGFydENhY2hlRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQ2Fpcm9TdXJmYWNlRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OmlzRm9ybUVsZW1lbnRUb29M
YXJnZVRvRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6VGhlbWVQ
YXJ0Q2FjaGVFbnRyeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZs
OjpUaGVtZVBhcnRDYWNoZUVudHJ5OjpyZXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUVmbDo6Z2V0VGhlbWVQYXJ0RnJvbUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lRWZsOjpmbHVzaFRoZW1lUGFydENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lRWZsOjpwYWludFRoZW1lUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUVmbDo6dGhlbWVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjpsb2Fk
VGhlbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFwcGx5UGFydERlc2Ny
aXB0aW9uc0Zyb20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6On5SZW5kZXJU
aGVtZUVmbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6ZW1pdE1lZGlhQnV0
dG9uU2lnbmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuaDoKKyAg
ICAgICAgKFJlbmRlclRoZW1lRWZsKToKKyAgICAgICAgKFRoZW1lUGFydENhY2hlRW50cnkpOgor
CisyMDEyLTA5LTA1ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0
Lm9yZz4KKworICAgICAgICBbRUZMXSBGdXp6eSBsb2FkIHRoZSBFZGplIHRoZW1lIGZvciBIVE1M
IGZvcm1zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
NTgzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENo
YW5nZSB0aGUgdGhlbWUgc28gdGhhdCBpdCBpcyBmaXJzdCBsb2FkZWQgd2hlbiBhY3R1YWxseSB1
c2VkLgorICAgICAgICBUaGlzIGFsc28gZml4ZWQgdGhlIGNhc2UgdGhhdCBpdCB3YXMgaW1wb3Nz
aWJsZSB0byBjaGFuZ2UgdGhlbWUKKyAgICAgICAgYSBzZWNvbmQgdGltZS4KKworICAgICAgICBU
ZXN0ZWQgYnkgY3VycmVudCB0ZXN0cy4gQVBJIHVuaXQgdGVzdCBjb21pbmcgaW4gc2VwYXJhdGUg
cGF0Y2guCisKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwOgorICAg
ICAgICAoV2ViQ29yZSk6CisKKyAgICAgICAgICAgIEFkZCBzb21lIGNvbnZlbmllbmNlIG1hY3Jv
cy4KKworICAgICAgIChXZWJDb3JlOjphcHBseUNvbG9yQ2FsbGJhY2spOgorCisgICAgICAgICAg
ICBVc2UganVzdCBvbmUgY2FsbGJhY2sgZnJvbSB0aGUgZWRqZSB0aGVtZSwgd2hpY2gganVzdCBj
YWxscworICAgICAgICAgICAgc2V0Q29sb3JGcm9tVGhlbWVDbGFzcy4KKworICAgICAgICAoV2Vi
Q29yZTo6ZmlsbENvbG9yc0Zyb21FZGplQ2xhc3MpOgorCisgICAgICAgICAgICBBZGQgY29udmVu
aWVuY2UgbWV0aG9kIGZvciByZWNlaXZpbmcgY29sb3JzIGZyb20gRWRqZSBhbmQKKyAgICAgICAg
ICAgIHN0b3JpbmcgdGhlbSBpbiBDb2xvcidzLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUVmbDo6c2V0Q29sb3JGcm9tVGhlbWVDbGFzcyk6CisKKyAgICAgICAgICAgIFNldCB0aGUg
Y2xhc3MgQ29sb3IgdmFyaWFibGVkIHdpdGggdGhlIHZhbHVlcyBmcm9tIHRoZSB0aGVtZQorICAg
ICAgICAgICAgY29sb3IgY2xhc3MuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZs
OjpzZXRUaGVtZVBhdGgpOgorCisgICAgICAgICAgICBEb24ndCBhcHBseSB0aGUgdGhlbWUgaW1t
ZWRpYXRlbHkuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjpsb2FkVGhlbWUp
OgorCisgICAgICAgICAgICBMb2FkIHRoZSBuZXcgdGhlbWUgYW5kIGZyZWUgdGhlIGN1cnJlbnQg
b25lLiBJZiBpdCBmYWlscywKKyAgICAgICAgICAgIGl0IHdpbGwgY29udGludWUgdXNpbmcgdGhl
IG9sZCBvbmUsIGlmIGV4aXN0cy4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6
OmFkanVzdFNpemVDb25zdHJhaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVm
bDo6dGhlbWVQYXJ0Q2FjaGVFbnRyeVJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lRWZsOjpjYWNoZVRoZW1lUGFydE5ldyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUVmbDo6cGFpbnRUaGVtZVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6
OmFwcGx5UGFydERlc2NyaXB0aW9uc0Zyb20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVFZmw6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjpwbGF0Zm9ybUFj
dGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUVmbDo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6cGxhdGZvcm1Gb2N1c1JpbmdDb2xvcik6CisK
KyAgICAgICAgICAgIEVuc3VyZSB0aGUgdGhlbWUgaXMgbG9hZGVkLgorCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0Q2hlY2tib3hTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0UmFkaW9TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUVmbDo6ZW1pdE1lZGlhQnV0dG9uU2lnbmFsKToKKworICAgICAgICAgICAg
RW5zdXJlIHRoZSB0aGVtZSBpcyBsb2FkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvUmVu
ZGVyVGhlbWVFZmwuaDoKKyAgICAgICAgKFJlbmRlclRoZW1lRWZsKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lRWZsOjpsb2FkVGhlbWVJZk5lZWRlZCk6CisKKyAgICAgICAgICAgIFJl
bW92ZSB1bm5lZWRlZCBtZXRob2RzIGFuZCBhZGQgYSBtZXRob2QgZm9yIGxvYWRpbmcgYSB0aGVt
ZQorICAgICAgICAgICAgaW4gdGhlIGNhc2UgaXQgaXMgbm90IGxvYWRlZCB5ZXQuCisKIDIwMTIt
MDktMDUgIENocmlzIEd1YW4gIDxjaHJpcy5ndWFuQHRvcmNobW9iaWxlLmNvbS5jbj4KIAogICAg
ICAgICBbQmxhY2tiZXJyeV0gQWRkIGRvY3VtZW50IHVybCBhbmQgc2VjdXJpdHlPcmlnaW4gdG8g
cGxhdGZvcm0gcmVxdWVzdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vm
bC9SZW5kZXJUaGVtZUVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVy
VGhlbWVFZmwuY3BwCmluZGV4IDk4YzgxYzI5YTM5N2M0MDk5MjQ5YzZiYjU1MTQ3MTI4ZTBhYTNk
ZTEuLmI5MmE1OGFkZjBiYWNkZjhmZTIxMzZkMTdjNTZhODFkNDlmNzcwYTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcApAQCAtNzksOCArNzks
NjUgQEAgc3RhdGljIGNvbnN0IGludCBtZWRpYVNsaWRlclRodW1iV2lkdGggPSAxMjsKIHN0YXRp
YyBjb25zdCBpbnQgbWVkaWFTbGlkZXJUaHVtYkhlaWdodCA9IDEyOwogI2VuZGlmCiAKKyNkZWZp
bmUgX0FTU0VSVF9PTl9SRUxFQVNFX1JFVFVSTihvLCBmbXQsIC4uLikgXAorICAgIGRvIHsgaWYg
KCFvKSB7IEVJTkFfTE9HX0NSSVQoZm10LCAjIyBfX1ZBX0FSR1NfXyk7IEFTU0VSVChvKTsgcmV0
dXJuOyB9IH0gd2hpbGUgKDApCisjZGVmaW5lIF9BU1NFUlRfT05fUkVMRUFTRV9SRVRVUk5fVkFM
KG8sIHZhbCwgZm10LCAuLi4pIFwKKyAgICBkbyB7IGlmICghbykgeyBFSU5BX0xPR19DUklUKGZt
dCwgIyMgX19WQV9BUkdTX18pOyBBU1NFUlQobyk7IHJldHVybiB2YWw7IH0gfSB3aGlsZSAoMCkK
KworCitzdGF0aWMgY29uc3QgY2hhciogdG9FZGplR3JvdXAoRm9ybVR5cGUgdHlwZSkKK3sKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogZ3JvdXBzW10gPSB7CisjZGVmaW5lIFcobikgIndlYmtpdC93
aWRnZXQvIm4KKyAgICAgICAgVygiYnV0dG9uIiksCisgICAgICAgIFcoInJhZGlvIiksCisgICAg
ICAgIFcoImVudHJ5IiksCisgICAgICAgIFcoImNoZWNrYm94IiksCisgICAgICAgIFcoImNvbWJv
IiksCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisgICAgICAgIFcoInByb2dyZXNzYmFy
IiksCisjZW5kaWYKKyAgICAgICAgVygic2VhcmNoL2ZpZWxkIiksCisgICAgICAgIFcoInNlYXJj
aC9kZWNvcmF0aW9uIiksCisgICAgICAgIFcoInNlYXJjaC9yZXN1bHRzX2J1dHRvbiIpLAorICAg
ICAgICBXKCJzZWFyY2gvcmVzdWx0c19kZWNvcmF0aW9uIiksCisgICAgICAgIFcoInNlYXJjaC9j
YW5jZWxfYnV0dG9uIiksCisgICAgICAgIFcoInNsaWRlci92ZXJ0aWNhbCIpLAorICAgICAgICBX
KCJzbGlkZXIvaG9yaXpvbnRhbCIpLAorICAgICAgICBXKCJzbGlkZXIvdGh1bWJfdmVydGljYWwi
KSwKKyAgICAgICAgVygic2xpZGVyL3RodW1iX2hvcml6b250YWwiKSwKKyNpZiBFTkFCTEUoVklE
RU8pCisgICAgICAgIFcoIm1lZGlhY29udHJvbC9wbGF5cGF1c2VfYnV0dG9uIiksCisgICAgICAg
IFcoIm1lZGlhY29udHJvbC9tdXRlX2J1dHRvbiIpLAorICAgICAgICBXKCJtZWRpYWNvbnRyb2wv
c2Vla2ZvcndhcmRfYnV0dG9uIiksCisgICAgICAgIFcoIm1lZGlhY29udHJvbC9zZWVrYmFja3dh
cmRfYnV0dG9uIiksCisgICAgICAgIFcoIm1lZGlhY29udHJvbC9mdWxsc2NyZWVuX2J1dHRvbiIp
LAorI2VuZGlmCisgICAgICAgIFcoInNwaW5uZXIiKSwKKyN1bmRlZiBXCisgICAgICAgIDAKKyAg
ICB9OworICAgIEFTU0VSVCh0eXBlID49IDApOworICAgIEFTU0VSVCgoc2l6ZV90KXR5cGUgPCBz
aXplb2YoZ3JvdXBzKSAvIHNpemVvZihncm91cHNbMF0pKTsgLy8gb3V0IG9mIHN5bmM/CisgICAg
cmV0dXJuIGdyb3Vwc1t0eXBlXTsKK30KKworc3RhdGljIGJvb2wgc2V0U291cmNlR3JvdXBGb3JF
ZGplT2JqZWN0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBwYXRoLCBjb25zdCBjaGFyKiBn
cm91cCkKK3sKKyAgICBpZiAoIWVkamVfb2JqZWN0X2ZpbGVfc2V0KG8sIHBhdGgsIGdyb3VwKSkg
eworICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gZWRqZV9sb2FkX2Vycm9yX3N0cihlZGpl
X29iamVjdF9sb2FkX2Vycm9yX2dldChvKSk7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQg
bm90IHNldCB0aGVtZSBncm91cCAnJXMnIG9mIGZpbGUgJyVzJzogJXMiLCBncm91cCwgcGF0aCwg
bWVzc2FnZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwogdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2l6ZUNvbnN0cmFpbnRzKFJlbmRl
clN0eWxlKiBzdHlsZSwgRm9ybVR5cGUgdHlwZSkgY29uc3QKIHsKKyAgICBsb2FkVGhlbWVJZk5l
ZWRlZCgpOworICAgIF9BU1NFUlRfT05fUkVMRUFTRV9SRVRVUk4obV9lZGplLCAiQ291bGQgbm90
IHBhaW50IG5hdGl2ZSBIVE1MIHBhcnQgZHVlIHRvIG1pc3NpbmcgdGhlbWUuIik7CisKICAgICBj
b25zdCBzdHJ1Y3QgVGhlbWVQYXJ0RGVzYyogZGVzYyA9IG1fcGFydERlc2NzICsgKHNpemVfdCl0
eXBlOwogCiAgICAgaWYgKHN0eWxlLT5taW5XaWR0aCgpLmlzSW50cmluc2ljKCkpCkBAIC05OSw1
MyArMTU2LDQyIEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNpemVDb25zdHJhaW50cyhS
ZW5kZXJTdHlsZSogc3R5bGUsIEZvcm1UeXBlIHR5cGUpIGNvCiAgICAgc3R5bGUtPnNldFBhZGRp
bmdSaWdodChkZXNjLT5wYWRkaW5nLnJpZ2h0KCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lRWZs
Ojp0aGVtZVBhcnRDYWNoZUVudHJ5UmVzZXQoc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqIGVu
dHJ5LCBGb3JtVHlwZSB0eXBlKQorUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnk6
OlRoZW1lUGFydENhY2hlRW50cnkoKQorICAgIDogZWUoMCksIG8oMCksIHN1cmZhY2UoMCkKIHsK
LSAgICBjb25zdCBjaGFyICpmaWxlLCAqZ3JvdXA7Ci0KLSAgICBBU1NFUlQoZW50cnkpOwotICAg
IEFTU0VSVChtX2VkamUpOwotCi0gICAgZWRqZV9vYmplY3RfZmlsZV9nZXQobV9lZGplLCAmZmls
ZSwgMCk7Ci0gICAgZ3JvdXAgPSBlZGplR3JvdXBGcm9tRm9ybVR5cGUodHlwZSk7Ci0gICAgQVNT
RVJUKGZpbGUpOwotICAgIEFTU0VSVChncm91cCk7Cit9CiAKLSAgICBpZiAoIWVkamVfb2JqZWN0
X2ZpbGVfc2V0KGVudHJ5LT5vLCBmaWxlLCBncm91cCkpIHsKLSAgICAgICAgRWRqZV9Mb2FkX0Vy
cm9yIGVyciA9IGVkamVfb2JqZWN0X2xvYWRfZXJyb3JfZ2V0KGVudHJ5LT5vKTsKLSAgICAgICAg
Y29uc3QgY2hhciAqZXJybXNnID0gZWRqZV9sb2FkX2Vycm9yX3N0cihlcnIpOwotICAgICAgICBF
SU5BX0xPR19FUlIoIkNvdWxkIG5vdCBsb2FkICclcycgZnJvbSB0aGVtZSAlczogJXMiLAotICAg
ICAgICAgICAgICAgICAgICAgZ3JvdXAsIGZpbGUsIGVycm1zZyk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7CitSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0
Q2FjaGVFbnRyeTo6flRoZW1lUGFydENhY2hlRW50cnkoKQoreworICAgIGlmIChzdXJmYWNlKQor
ICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7CisgICAgaWYgKG8pCisgICAg
ICAgIGV2YXNfb2JqZWN0X2RlbChvKTsKKyAgICBpZiAoZWUpCisgICAgICAgIGVjb3JlX2V2YXNf
ZnJlZShlZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnRoZW1lUGFydENhY2hlRW50cnlT
dXJmYWNlQ3JlYXRlKHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRyeSkKK3N0YXRpYyBj
YWlyb19zdXJmYWNlX3QqIGNyZWF0ZUNhaXJvU3VyZmFjZUZvcihFY29yZV9FdmFzKiBlZSkKIHsK
LSAgICBpbnQgdywgaDsKLSAgICBjYWlyb19zdGF0dXNfdCBzdGF0dXM7CisgICAgQVNTRVJUKGVl
KTsKIAotICAgIEFTU0VSVChlbnRyeSk7Ci0gICAgQVNTRVJUKGVudHJ5LT5lZSk7CisgICAgaW50
IHdpZHRoLCBoZWlnaHQ7CisgICAgZWNvcmVfZXZhc19nZW9tZXRyeV9nZXQoZWUsIDAsIDAsICZ3
aWR0aCwgJmhlaWdodCk7CisgICAgQVNTRVJUKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTsKIAot
ICAgIGVjb3JlX2V2YXNfZ2VvbWV0cnlfZ2V0KGVudHJ5LT5lZSwgMCwgMCwgJncsICZoKTsKLSAg
ICBBU1NFUlQodyA+IDApOwotICAgIEFTU0VSVChoID4gMCk7CisgICAgdW5zaWduZWQgY2hhciog
YnVmZmVyID0gKHVuc2lnbmVkIGNoYXIqKShlY29yZV9ldmFzX2J1ZmZlcl9waXhlbHNfZ2V0KGVl
KSk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9j
cmVhdGVfZm9yX2RhdGEoYnVmZmVyLCBDQUlST19GT1JNQVRfQVJHQjMyLCB3aWR0aCwgaGVpZ2h0
LCB3aWR0aCAqIDQpOwogCi0gICAgZW50cnktPnN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNl
X2NyZWF0ZV9mb3JfZGF0YSgodW5zaWduZWQgY2hhciAqKWVjb3JlX2V2YXNfYnVmZmVyX3BpeGVs
c19nZXQoZW50cnktPmVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHcsIGgsIHcgKiA0KTsKLSAgICBz
dGF0dXMgPSBjYWlyb19zdXJmYWNlX3N0YXR1cyhlbnRyeS0+c3VyZmFjZSk7CisgICAgY2Fpcm9f
c3RhdHVzX3Qgc3RhdHVzID0gY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSk7CiAgICAgaWYg
KHN0YXR1cyAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykgewotICAgICAgICBFSU5BX0xPR19FUlIo
IkNvdWxkIG5vdCBjcmVhdGUgY2Fpcm8gc3VyZmFjZTogJXMiLAotICAgICAgICAgICAgICAgICAg
ICAgY2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0dXMpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBjcmVhdGUgY2Fpcm8gc3VyZmFjZTog
JXMiLCBjYWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOworICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3VyZmFjZTsKIH0KIAotYm9v
bCBSZW5kZXJUaGVtZUVmbDo6aXNGb3JtRWxlbWVudFRvb0xhcmdlVG9EaXNwbGF5KGNvbnN0IElu
dFNpemUmIGVsZW1lbnRTaXplKQorc3RhdGljIGJvb2wgaXNGb3JtRWxlbWVudFRvb0xhcmdlVG9E
aXNwbGF5KGNvbnN0IEludFNpemUmIGVsZW1lbnRTaXplKQogewogICAgIC8vIFRoaXMgbGltaXQg
b2YgMjAwMDAgcGl4ZWxzIGlzIGhhcmRjb2RlZCBpbnNpZGUgZWRqZSAtLSBhbnl0aGluZyBhYm92
ZSB0aGlzIHNpemUKICAgICAvLyB3aWxsIGJlIGNsaXBwZWQuIFRoaXMgdmFsdWUgc2VlbXMgdG8g
YmUgcmVhc29uYWJsZSBlbm91Z2ggc28gdGhhdCBoYXJkY29kaW5nIGl0CkBAIC0xNTUsMjUgKzIw
MSwxOCBAQCBib29sIFJlbmRlclRoZW1lRWZsOjppc0Zvcm1FbGVtZW50VG9vTGFyZ2VUb0Rpc3Bs
YXkoY29uc3QgSW50U2l6ZSYgZWxlbWVudFNpemUpCiAgICAgcmV0dXJuIGVsZW1lbnRTaXplLndp
ZHRoKCkgPiBtYXhFZGplRGltZW5zaW9uIHx8IGVsZW1lbnRTaXplLmhlaWdodCgpID4gbWF4RWRq
ZURpbWVuc2lvbjsKIH0KIAotLy8gYWxsb2NhdGUgYSBuZXcgZW50cnkgYW5kIGZpbGwgaXQgd2l0
aCBlZGplIGdyb3VwCi1zdHJ1Y3QgUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkq
IFJlbmRlclRoZW1lRWZsOjpjYWNoZVRoZW1lUGFydE5ldyhGb3JtVHlwZSB0eXBlLCBjb25zdCBJ
bnRTaXplJiBzaXplKQorUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIFJlbmRl
clRoZW1lRWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgRm9ybVR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB0aGVtZVBhdGgpCiB7CiAgICAgaWYgKGlz
Rm9ybUVsZW1lbnRUb29MYXJnZVRvRGlzcGxheShzaXplKSkgewotICAgICAgICBFSU5BX0xPR19F
UlIoImNhbm5vdCByZW5kZXIgYW4gZWxlbWVudCBvZiBzaXplICVkeCVkIiwgc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDYW5ub3QgcmVuZGVyIGFu
IGVsZW1lbnQgb2Ygc2l6ZSAlZHglZC4iLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBUaGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRy
eSA9IG5ldyBUaGVtZVBhcnRDYWNoZUVudHJ5OwotICAgIGlmICghZW50cnkpIHsKLSAgICAgICAg
RUlOQV9MT0dfRVJSKCJjb3VsZCBub3QgYWxsb2NhdGUgVGhlbWVQYXJ0Q2FjaGVFbnRyeS4iKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIE93blB0cjxUaGVtZVBhcnRDYWNoZUVudHJ5
Kj4gZW50cnkgPSBhZG9wdFB0cihuZXcgVGhlbWVQYXJ0Q2FjaGVFbnRyeSk7CiAKICAgICBlbnRy
eS0+ZWUgPSBlY29yZV9ldmFzX2J1ZmZlcl9uZXcoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsKICAgICBpZiAoIWVudHJ5LT5lZSkgewotICAgICAgICBFSU5BX0xPR19FUlIoImVjb3JlX2V2
YXNfYnVmZmVyX25ldyglZCwgJWQpIGZhaWxlZC4iLAotICAgICAgICAgICAgICAgICAgICAgc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLSAgICAgICAgZGVsZXRlIGVudHJ5OworICAgICAg
ICBFSU5BX0xPR19FUlIoImVjb3JlX2V2YXNfYnVmZmVyX25ldyglZCwgJWQpIGZhaWxlZC4iLCBz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
QEAgLTE4MiwxOSArMjIxLDEzIEBAIHN0cnVjdCBSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2Fj
aGVFbnRyeSogUmVuZGVyVGhlbWVFZmw6OmNhY2hlVGhlbWVQYXJ0TmV3KEZvCiAKICAgICBlbnRy
eS0+byA9IGVkamVfb2JqZWN0X2FkZChlY29yZV9ldmFzX2dldChlbnRyeS0+ZWUpKTsKICAgICBB
U1NFUlQoZW50cnktPm8pOwotICAgIGlmICghdGhlbWVQYXJ0Q2FjaGVFbnRyeVJlc2V0KGVudHJ5
LCB0eXBlKSkgewotICAgICAgICBldmFzX29iamVjdF9kZWwoZW50cnktPm8pOwotICAgICAgICBl
Y29yZV9ldmFzX2ZyZWUoZW50cnktPmVlKTsKLSAgICAgICAgZGVsZXRlIGVudHJ5OworCisgICAg
aWYgKCFzZXRTb3VyY2VHcm91cEZvckVkamVPYmplY3QoZW50cnktPm8sIHRoZW1lUGF0aC51dGY4
KCkuZGF0YSgpLCB0b0VkamVHcm91cCh0eXBlKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0K
IAotICAgIGlmICghdGhlbWVQYXJ0Q2FjaGVFbnRyeVN1cmZhY2VDcmVhdGUoZW50cnkpKSB7Ci0g
ICAgICAgIGV2YXNfb2JqZWN0X2RlbChlbnRyeS0+byk7Ci0gICAgICAgIGVjb3JlX2V2YXNfZnJl
ZShlbnRyeS0+ZWUpOwotICAgICAgICBkZWxldGUgZW50cnk7CisgICAgZW50cnktPnN1cmZhY2Ug
PSBjcmVhdGVDYWlyb1N1cmZhY2VGb3IoZW50cnktPmVlKTsKKyAgICBpZiAoIWVudHJ5LT5zdXJm
YWNlKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAKICAgICBldmFzX29iamVjdF9yZXNpemUo
ZW50cnktPm8sIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgZXZhc19vYmplY3Rf
c2hvdyhlbnRyeS0+byk7CkBAIC0yMDIsODcgKzIzNSw4MSBAQCBzdHJ1Y3QgUmVuZGVyVGhlbWVF
Zmw6OlRoZW1lUGFydENhY2hlRW50cnkqIFJlbmRlclRoZW1lRWZsOjpjYWNoZVRoZW1lUGFydE5l
dyhGbwogICAgIGVudHJ5LT50eXBlID0gdHlwZTsKICAgICBlbnRyeS0+c2l6ZSA9IHNpemU7CiAK
LSAgICBtX3BhcnRDYWNoZS5wcmVwZW5kKGVudHJ5KTsKLSAgICByZXR1cm4gZW50cnk7CisgICAg
cmV0dXJuIGVudHJ5LmxlYWtQdHIoKTsKIH0KIAotLy8ganVzdCBjaGFuZ2UgdGhlIGVkamUgZ3Jv
dXAgYW5kIHJldHVybiB0aGUgc2FtZSBlbnRyeQotc3RydWN0IFJlbmRlclRoZW1lRWZsOjpUaGVt
ZVBhcnRDYWNoZUVudHJ5KiBSZW5kZXJUaGVtZUVmbDo6Y2FjaGVUaGVtZVBhcnRSZXNldChGb3Jt
VHlwZSB0eXBlLCBzdHJ1Y3QgUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIGVu
dHJ5KQordm9pZCBSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeTo6cmV1c2UoY29u
c3QgU3RyaW5nJiB0aGVtZVBhdGgsIEZvcm1UeXBlIG5ld1R5cGUsIGNvbnN0IEludFNpemUmIG5l
d1NpemUpCiB7Ci0gICAgaWYgKCF0aGVtZVBhcnRDYWNoZUVudHJ5UmVzZXQoZW50cnksIHR5cGUp
KSB7Ci0gICAgICAgIGVudHJ5LT50eXBlID0gRm9ybVR5cGVMYXN0OyAvLyBpbnZhbGlkYXRlCi0g
ICAgICAgIG1fcGFydENhY2hlLmFwcGVuZChlbnRyeSk7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICBlbnRyeS0+dHlwZSA9IHR5cGU7Ci0gICAgbV9wYXJ0Q2FjaGUucHJlcGVuZChlbnRy
eSk7Ci0gICAgcmV0dXJuIGVudHJ5OwotfQorICAgIGlmICghbmV3U2l6ZS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgY2Fpcm9fc3VyZmFjZV9maW5pc2goc3VyZmFjZSk7CiAKLS8vIHJlc2l6ZSBlbnRy
eSBhbmQgcmVzZXQgaXQKLXN0cnVjdCBSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRy
eSogUmVuZGVyVGhlbWVFZmw6OmNhY2hlVGhlbWVQYXJ0UmVzaXplQW5kUmVzZXQoRm9ybVR5cGUg
dHlwZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgc3RydWN0IFJlbmRlclRoZW1lRWZsOjpUaGVtZVBh
cnRDYWNoZUVudHJ5KiBlbnRyeSkKLXsKLSAgICBjYWlyb19zdXJmYWNlX2ZpbmlzaChlbnRyeS0+
c3VyZmFjZSk7CisgICAgICAgIHNpemUgPSBuZXdTaXplOworICAgICAgICBlY29yZV9ldmFzX3Jl
c2l6ZShlZSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpKTsKKyAgICAgICAgZXZh
c19vYmplY3RfcmVzaXplKG8sIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSk7CiAK
LSAgICBlbnRyeS0+c2l6ZSA9IHNpemU7Ci0gICAgZWNvcmVfZXZhc19yZXNpemUoZW50cnktPmVl
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShl
bnRyeS0+bywgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgc3VyZmFjZSA9
IGNyZWF0ZUNhaXJvU3VyZmFjZUZvcihlZSk7CisgICAgICAgIGlmICghc3VyZmFjZSkgeworICAg
ICAgICAgICAgdHlwZSA9IEZvcm1UeXBlTGFzdDsgLy8gSW52YWxpZGF0ZTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KIAotICAgIGlmICghdGhlbWVQYXJ0Q2FjaGVFbnRy
eVN1cmZhY2VDcmVhdGUoZW50cnkpKSB7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2RlbChlbnRyeS0+
byk7Ci0gICAgICAgIGVjb3JlX2V2YXNfZnJlZShlbnRyeS0+ZWUpOwotICAgICAgICBkZWxldGUg
ZW50cnk7Ci0gICAgICAgIHJldHVybiAwOworICAgIGlmICghc2V0U291cmNlR3JvdXBGb3JFZGpl
T2JqZWN0KG8sIHRoZW1lUGF0aC51dGY4KCkuZGF0YSgpLCB0b0VkamVHcm91cChuZXdUeXBlKSkp
IHsKKyAgICAgICAgdHlwZSA9IEZvcm1UeXBlTGFzdDsgLy8gSW52YWxpZGF0ZS4KKyAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIHJldHVybiBjYWNoZVRoZW1lUGFydFJlc2V0KHR5cGUsIGVu
dHJ5KTsKKyAgICB0eXBlID0gbmV3VHlwZTsKIH0KIAotLy8gZ2VuZXJhbCBwdXJwb3NlIGdldCAo
d2lsbCBjcmVhdGUsIHJldXNlIGFuZCBhbGwpCi1zdHJ1Y3QgUmVuZGVyVGhlbWVFZmw6OlRoZW1l
UGFydENhY2hlRW50cnkqIFJlbmRlclRoZW1lRWZsOjpjYWNoZVRoZW1lUGFydEdldChGb3JtVHlw
ZSB0eXBlLCBjb25zdCBJbnRTaXplJiBzaXplKQorUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENh
Y2hlRW50cnkqIFJlbmRlclRoZW1lRWZsOjpnZXRUaGVtZVBhcnRGcm9tQ2FjaGUoRm9ybVR5cGUg
dHlwZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBWZWN0b3I8c3RydWN0IFRoZW1lUGFy
dENhY2hlRW50cnkgKj46Oml0ZXJhdG9yIGl0ciwgZW5kOwotICAgIHN0cnVjdCBUaGVtZVBhcnRD
YWNoZUVudHJ5ICpjZV9sYXN0X3NpemUgPSAwOwotICAgIGludCBpLCBpZHhMYXN0U2l6ZSA9IC0x
OworICAgIFZlY3RvcjxUaGVtZVBhcnRDYWNoZUVudHJ5Kj46Oml0ZXJhdG9yIGl0LCBlbmQ7Cisg
ICAgc2l6ZV90IGxhc3RXaXRoUmVxdWVzdGVkU2l6ZSA9IG5vdEZvdW5kOwogCi0gICAgaXRyID0g
bV9wYXJ0Q2FjaGUuYmVnaW4oKTsKKyAgICBpdCA9IG1fcGFydENhY2hlLmJlZ2luKCk7CiAgICAg
ZW5kID0gbV9wYXJ0Q2FjaGUuZW5kKCk7Ci0gICAgZm9yIChpID0gMDsgaXRyICE9IGVuZDsgaSsr
LCBpdHIrKykgewotICAgICAgICBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSAqZW50cnkgPSAq
aXRyOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGl0ICE9IGVuZDsgaSsrLCBpdCsrKSB7Cisg
ICAgICAgIFRoZW1lUGFydENhY2hlRW50cnkgKmVudHJ5ID0gKml0OwogICAgICAgICBpZiAoZW50
cnktPnNpemUgPT0gc2l6ZSkgewogICAgICAgICAgICAgaWYgKGVudHJ5LT50eXBlID09IHR5cGUp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OwotICAgICAgICAgICAgY2VfbGFzdF9zaXpl
ID0gZW50cnk7Ci0gICAgICAgICAgICBpZHhMYXN0U2l6ZSA9IGk7CisgICAgICAgICAgICBsYXN0
V2l0aFJlcXVlc3RlZFNpemUgPSBpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fcGFy
dENhY2hlLnNpemUoKSA8IFJFTkRFUl9USEVNRV9FRkxfUEFSVF9DQUNIRV9NQVgpCi0gICAgICAg
IHJldHVybiBjYWNoZVRoZW1lUGFydE5ldyh0eXBlLCBzaXplKTsKKyAgICBpZiAobV9wYXJ0Q2Fj
aGUuc2l6ZSgpIDwgUkVOREVSX1RIRU1FX0VGTF9QQVJUX0NBQ0hFX01BWCkgeworICAgICAgICBU
aGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRyeSA9IFRoZW1lUGFydENhY2hlRW50cnk6OmNyZWF0ZShz
aXplLCB0eXBlLCB0aGVtZVBhdGgoKSk7CisgICAgICAgIG1fcGFydENhY2hlLnByZXBlbmQoZW50
cnkpOworICAgICAgICByZXR1cm4gZW50cnk7CisgICAgfQorCisgICAgLy8gV2UgaGF2ZSBhIGZ1
bGwgY2FjaGUgbm93IQogCi0gICAgaWYgKGNlX2xhc3Rfc2l6ZSAmJiBjZV9sYXN0X3NpemUgIT0g
bV9wYXJ0Q2FjaGUuZmlyc3QoKSkgewotICAgICAgICBtX3BhcnRDYWNoZS5yZW1vdmUoaWR4TGFz
dFNpemUpOwotICAgICAgICByZXR1cm4gY2FjaGVUaGVtZVBhcnRSZXNldCh0eXBlLCBjZV9sYXN0
X3NpemUpOworICAgIGlmIChsYXN0V2l0aFJlcXVlc3RlZFNpemUgIT0gbm90Rm91bmQgJiYgbGFz
dFdpdGhSZXF1ZXN0ZWRTaXplICE9IDEpIHsKKyAgICAgICAgVGhlbWVQYXJ0Q2FjaGVFbnRyeSog
ZW50cnkgPSBtX3BhcnRDYWNoZS5hdChsYXN0V2l0aFJlcXVlc3RlZFNpemUpOworICAgICAgICBl
bnRyeS0+cmV1c2UodGhlbWVQYXRoKCksIHR5cGUpOworICAgICAgICBtX3BhcnRDYWNoZS5yZW1v
dmUobGFzdFdpdGhSZXF1ZXN0ZWRTaXplKTsKKyAgICAgICAgbV9wYXJ0Q2FjaGUucHJlcGVuZChl
bnRyeSk7CisgICAgICAgIHJldHVybiBlbnRyeTsKICAgICB9CiAKICAgICBUaGVtZVBhcnRDYWNo
ZUVudHJ5KiBlbnRyeSA9IG1fcGFydENhY2hlLmxhc3QoKTsKKyAgICBlbnRyeS0+cmV1c2UodGhl
bWVQYXRoKCksIHR5cGUsIHNpemUpOwogICAgIG1fcGFydENhY2hlLnJlbW92ZUxhc3QoKTsKLSAg
ICByZXR1cm4gY2FjaGVUaGVtZVBhcnRSZXNpemVBbmRSZXNldCh0eXBlLCBzaXplLCBlbnRyeSk7
CisgICAgbV9wYXJ0Q2FjaGUucHJlcGVuZChlbnRyeSk7CisgICAgcmV0dXJuIGVudHJ5OwogfQog
Ci12b2lkIFJlbmRlclRoZW1lRWZsOjpjYWNoZVRoZW1lUGFydEZsdXNoKCkKK3ZvaWQgUmVuZGVy
VGhlbWVFZmw6OmZsdXNoVGhlbWVQYXJ0Q2FjaGUoKQogewotICAgIFZlY3RvcjxzdHJ1Y3QgVGhl
bWVQYXJ0Q2FjaGVFbnRyeSAqPjo6aXRlcmF0b3IgaXRyLCBlbmQ7CisgICAgVmVjdG9yPFRoZW1l
UGFydENhY2hlRW50cnkqPjo6aXRlcmF0b3IgaXQsIGVuZDsKIAotICAgIGl0ciA9IG1fcGFydENh
Y2hlLmJlZ2luKCk7CisgICAgaXQgPSBtX3BhcnRDYWNoZS5iZWdpbigpOwogICAgIGVuZCA9IG1f
cGFydENhY2hlLmVuZCgpOwotICAgIGZvciAoOyBpdHIgIT0gZW5kOyBpdHIrKykgewotICAgICAg
ICBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSAqZW50cnkgPSAqaXRyOwotICAgICAgICBjYWly
b19zdXJmYWNlX2Rlc3Ryb3koZW50cnktPnN1cmZhY2UpOwotICAgICAgICBldmFzX29iamVjdF9k
ZWwoZW50cnktPm8pOwotICAgICAgICBlY29yZV9ldmFzX2ZyZWUoZW50cnktPmVlKTsKLSAgICAg
ICAgZGVsZXRlIGVudHJ5OwotICAgIH0KKyAgICBmb3IgKDsgaXQgIT0gZW5kOyBpdCsrKQorICAg
ICAgICBkZWxldGUgKCppdCk7CisKICAgICBtX3BhcnRDYWNoZS5jbGVhcigpOwogfQogCkBAIC0z
MTEsMTQgKzMzOCwxNCBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseUVkamVTdGF0ZUZyb21G
b3JtKEV2YXNfT2JqZWN0KiBvYmplY3QsIENvbnRyb2xTdGF0ZXMgcwogCiBib29sIFJlbmRlclRo
ZW1lRWZsOjpwYWludFRoZW1lUGFydChSZW5kZXJPYmplY3QqIG9iamVjdCwgRm9ybVR5cGUgdHlw
ZSwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogeworICAgIGxv
YWRUaGVtZUlmTmVlZGVkKCk7CisgICAgX0FTU0VSVF9PTl9SRUxFQVNFX1JFVFVSTl9WQUwobV9l
ZGplLCBmYWxzZSwgIkNvdWxkIG5vdCBwYWludCBuYXRpdmUgSFRNTCBwYXJ0IGR1ZSB0byBtaXNz
aW5nIHRoZW1lLiIpOworCiAgICAgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogZW50cnk7CiAgICAgRWlu
YV9MaXN0KiB1cGRhdGVzOwogICAgIGNhaXJvX3QqIGNhaXJvOwogCi0gICAgQVNTRVJUKG1fY2Fu
dmFzKTsKLSAgICBBU1NFUlQobV9lZGplKTsKLQotICAgIGVudHJ5ID0gY2FjaGVUaGVtZVBhcnRH
ZXQodHlwZSwgcmVjdC5zaXplKCkpOworICAgIGVudHJ5ID0gZ2V0VGhlbWVQYXJ0RnJvbUNhY2hl
KHR5cGUsIHJlY3Quc2l6ZSgpKTsKICAgICBpZiAoIWVudHJ5KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTM5OSwzNyArNDI2LDQ0IEBAIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRl
clRoZW1lOjp0aGVtZUZvclBhZ2UoUGFnZSogcGFnZSkKICAgICByZXR1cm4gZmFsbGJhY2s7CiB9
CiAKLXN0YXRpYyB2b2lkIHJlbmRlclRoZW1lRWZsQ29sb3JDbGFzc1NlbGVjdGlvbkFjdGl2ZSh2
b2lkKiBkYXRhLCBFdmFzX09iamVjdCogb2JqZWN0LCBjb25zdCBjaGFyKiBzaWduYWwsIGNvbnN0
IGNoYXIqIHNvdXJjZSkKK3N0YXRpYyB2b2lkIGFwcGx5Q29sb3JDYWxsYmFjayh2b2lkKiBkYXRh
LCBFdmFzX09iamVjdCosIGNvbnN0IGNoYXIqIC8qIHNpZ25hbCAqLywgY29uc3QgY2hhciogY29s
b3JDbGFzcykKIHsKLSAgICBSZW5kZXJUaGVtZUVmbCogdGhhdCA9IHN0YXRpY19jYXN0PFJlbmRl
clRoZW1lRWZsICo+KGRhdGEpOwotICAgIGludCBmciwgZmcsIGZiLCBmYSwgYnIsIGJnLCBiYiwg
YmE7Ci0KLSAgICBpZiAoIWVkamVfb2JqZWN0X2NvbG9yX2NsYXNzX2dldChvYmplY3QsIHNvdXJj
ZSwgJmZyLCAmZmcsICZmYiwgJmZhLCAmYnIsICZiZywgJmJiLCAmYmEsIDAsIDAsIDAsIDApKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICB0aGF0LT5zZXRBY3RpdmVTZWxlY3Rpb25Db2xvcihmciwg
ZmcsIGZiLCBmYSwgYnIsIGJnLCBiYiwgYmEpOworICAgIFJlbmRlclRoZW1lRWZsKiB0aGF0ID0g
c3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwqPihkYXRhKTsKKyAgICB0aGF0LT5zZXRDb2xvckZy
b21UaGVtZUNsYXNzKGNvbG9yQ2xhc3MpOworICAgIHRoYXQtPnBsYXRmb3JtQ29sb3JzRGlkQ2hh
bmdlKCk7IC8vIFRyaWdnZXJzIHJlbGF5b3V0LgogfQogCi1zdGF0aWMgdm9pZCByZW5kZXJUaGVt
ZUVmbENvbG9yQ2xhc3NTZWxlY3Rpb25JbmFjdGl2ZSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCog
b2JqZWN0LCBjb25zdCBjaGFyKiBzaWduYWwsIGNvbnN0IGNoYXIqIHNvdXJjZSkKK3N0YXRpYyB2
b2lkIGZpbGxDb2xvcnNGcm9tRWRqZUNsYXNzKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBj
b2xvckNsYXNzLCBDb2xvciogY29sb3IxLCBDb2xvciogY29sb3IyID0gMCwgQ29sb3IqIGNvbG9y
MyA9IDApCiB7Ci0gICAgUmVuZGVyVGhlbWVFZmwqIHRoYXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJU
aGVtZUVmbCAqPihkYXRhKTsKLSAgICBpbnQgZnIsIGZnLCBmYiwgZmEsIGJyLCBiZywgYmIsIGJh
OworICAgIGludCByMSwgZzEsIGIxLCBhMTsKKyAgICBpbnQgcjIsIGcyLCBiMiwgYTI7CisgICAg
aW50IHIzLCBnMywgYjMsIGEzOwogCi0gICAgaWYgKCFlZGplX29iamVjdF9jb2xvcl9jbGFzc19n
ZXQob2JqZWN0LCBzb3VyY2UsICZmciwgJmZnLCAmZmIsICZmYSwgJmJyLCAmYmcsICZiYiwgJmJh
LCAwLCAwLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOworICAgIGJvb2wgb2sgPSBlZGplX29iamVj
dF9jb2xvcl9jbGFzc19nZXQobywgY29sb3JDbGFzcywgJnIxLCAmZzEsICZiMSwgJmExLCAmcjIs
ICZnMiwgJmIyLCAmYTIsICZyMywgJmczLCAmYjMsICZhMyk7CisgICAgX0FTU0VSVF9PTl9SRUxF
QVNFX1JFVFVSTihvaywgIkNvdWxkIG5vdCBnZXQgY29sb3IgY2xhc3MgJyVzJ1xuIiwgY29sb3JD
bGFzcyk7CiAKLSAgICB0aGF0LT5zZXRJbmFjdGl2ZVNlbGVjdGlvbkNvbG9yKGZyLCBmZywgZmIs
IGZhLCBiciwgYmcsIGJiLCBiYSk7CisgICAgaWYgKGNvbG9yMSkKKyAgICAgICAgY29sb3IxLT5z
ZXRSR0IobWFrZVJHQkEocjEsIGcxLCBiMSwgYTEpKTsKKyAgICBpZiAoY29sb3IyKQorICAgICAg
ICBjb2xvcjItPnNldFJHQihtYWtlUkdCQShyMiwgZzIsIGIyLCBhMikpOworICAgIGlmIChjb2xv
cjMpCisgICAgICAgIGNvbG9yMy0+c2V0UkdCKG1ha2VSR0JBKHIzLCBnMywgYjMsIGEzKSk7CiB9
CiAKLXN0YXRpYyB2b2lkIHJlbmRlclRoZW1lRWZsQ29sb3JDbGFzc0ZvY3VzUmluZyh2b2lkKiBk
YXRhLCBFdmFzX09iamVjdCogb2JqZWN0LCBjb25zdCBjaGFyKiBzaWduYWwsIGNvbnN0IGNoYXIq
IHNvdXJjZSkKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OnNldENvbG9yRnJvbVRoZW1lQ2xhc3MoY29u
c3QgY2hhciogY29sb3JDbGFzcykKIHsKLSAgICBSZW5kZXJUaGVtZUVmbCogdGhhdCA9IHN0YXRp
Y19jYXN0PFJlbmRlclRoZW1lRWZsICo+KGRhdGEpOwotICAgIGludCBmciwgZmcsIGZiLCBmYTsK
LQotICAgIGlmICghZWRqZV9vYmplY3RfY29sb3JfY2xhc3NfZ2V0KG9iamVjdCwgc291cmNlLCAm
ZnIsICZmZywgJmZiLCAmZmEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApKQotICAgICAgICByZXR1
cm47CisgICAgQVNTRVJUKG1fZWRqZSk7CiAKLSAgICB0aGF0LT5zZXRGb2N1c1JpbmdDb2xvcihm
ciwgZmcsIGZiLCBmYSk7CisgICAgaWYgKCFzdHJjbXAoIndlYmtpdC9zZWxlY3Rpb24vYWN0aXZl
IiwgY29sb3JDbGFzcykpCisgICAgICAgIGZpbGxDb2xvcnNGcm9tRWRqZUNsYXNzKG1fZWRqZSwg
Y29sb3JDbGFzcywgJm1fYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yLCAmbV9hY3RpdmVT
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpOworICAgIGVsc2UgaWYgKCFzdHJjbXAoIndlYmtpdC9z
ZWxlY3Rpb24vaW5hY3RpdmUiLCBjb2xvckNsYXNzKSkKKyAgICAgICAgZmlsbENvbG9yc0Zyb21F
ZGplQ2xhc3MobV9lZGplLCBjb2xvckNsYXNzLCAmbV9pbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91
bmRDb2xvciwgJm1faW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpOworICAgIGVsc2Ug
aWYgKCFzdHJjbXAoIndlYmtpdC9mb2N1c19yaW5nIiwgY29sb3JDbGFzcykpIHsKKyAgICAgICAg
ZmlsbENvbG9yc0Zyb21FZGplQ2xhc3MobV9lZGplLCBjb2xvckNsYXNzLCAmbV9mb2N1c1JpbmdD
b2xvcik7CisgICAgICAgIC8vIHBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKSBpcyBvbmx5IHVzZWQg
Zm9yIHRoZSBkZWZhdWx0IHRoZW1lICh3aXRob3V0IHBhZ2UpCisgICAgICAgIC8vIFRoZSBmb2xs
b3dpbmcgaXMgdWdseSwgYnV0IG5vIG90aGVyIHdheSB0byBkbyBpdCB1bmxlc3Mgd2UgY2hhbmdl
IGl0IHRvIHVzZSBwYWdlIHRoZW1lcyBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICAgICAgICBSZW5k
ZXJUaGVtZTo6c2V0Q3VzdG9tRm9jdXNSaW5nQ29sb3IobV9mb2N1c1JpbmdDb2xvcik7CisgICAg
fQogfQogCiB2b2lkIFJlbmRlclRoZW1lRWZsOjpzZXRUaGVtZVBhdGgoY29uc3QgU3RyaW5nJiBw
YXRoKQpAQCAtNDM4LDcyICs0NzIsNjUgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6c2V0VGhlbWVQ
YXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV90aGVtZVBh
dGggPSBwYXRoOwotICAgIHRoZW1lQ2hhbmdlZCgpOwotfQogCi12b2lkIFJlbmRlclRoZW1lRWZs
OjpjcmVhdGVDYW52YXMoKQotewotICAgIEFTU0VSVCghbV9jYW52YXMpOwotICAgIG1fY2FudmFz
ID0gZWNvcmVfZXZhc19idWZmZXJfbmV3KDEsIDEpOwotICAgIEFTU0VSVChtX2NhbnZhcyk7Cisg
ICAgaWYgKG1fdGhlbWVQYXRoLmlzRW1wdHkoKSkgeworICAgICAgICBFSU5BX0xPR19FUlIoIk5v
IHRoZW1lIGRlZmluZWQsIHVuYWJsZSB0byBzZXQgdGhlbWUgZm9yIEhUTUwgRm9ybXMuIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fY2FudmFzKSB7CisgICAgICAgIG1f
Y2FudmFzID0gZWNvcmVfZXZhc19idWZmZXJfbmV3KDEsIDEpOworICAgICAgICBpZiAoIW1fY2Fu
dmFzKQorICAgICAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgY3JlYXRlIGNhbnZhcy4i
KTsKKyAgICB9CisKKyAgICBsb2FkVGhlbWUoKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6
Y3JlYXRlRWRqZSgpCitTdHJpbmcgUmVuZGVyVGhlbWVFZmw6OnRoZW1lUGF0aCgpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKCFtX2VkamUpOwotICAgIGlmIChtX3RoZW1lUGF0aC5pc0VtcHR5KCkpCi0g
ICAgICAgIEVJTkFfTE9HX0VSUigiTm8gdGhlbWUgZGVmaW5lZCwgdW5hYmxlIHRvIHNldCBSZW5k
ZXJUaGVtZUVmbC4iKTsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9lZGplID0gZWRqZV9vYmplY3Rf
YWRkKGVjb3JlX2V2YXNfZ2V0KG1fY2FudmFzKSk7Ci0gICAgICAgIGlmICghbV9lZGplKQotICAg
ICAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgY3JlYXRlIGJhc2UgZWRqZSBvYmplY3Qu
Iik7Ci0gICAgICAgIGVsc2UgaWYgKCFlZGplX29iamVjdF9maWxlX3NldChtX2VkamUsIG1fdGhl
bWVQYXRoLnV0ZjgoKS5kYXRhKCksICJ3ZWJraXQvYmFzZSIpKSB7Ci0gICAgICAgICAgICBFZGpl
X0xvYWRfRXJyb3IgZXJyID0gZWRqZV9vYmplY3RfbG9hZF9lcnJvcl9nZXQobV9lZGplKTsKLSAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm1zZyA9IGVkamVfbG9hZF9lcnJvcl9zdHIoZXJyKTsK
LSAgICAgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IHNldCBmaWxlOiAlcyIsIGVycm1z
Zyk7Ci0gICAgICAgICAgICBldmFzX29iamVjdF9kZWwobV9lZGplKTsKLSAgICAgICAgICAgIG1f
ZWRqZSA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0jZGVmaW5lIENPTk5FQ1QoY2MsIGZ1bmMpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICBlZGplX29iamVjdF9zaWduYWxfY2FsbGJhY2tfYWRkKG1fZWRqZSwgImNvbG9yX2NsYXNzLHNl
dCIsICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJr
aXQvImNjLCBmdW5jLCB0aGlzKQotCi0gICAgICAgICAgICBDT05ORUNUKCJzZWxlY3Rpb24vYWN0
aXZlIiwKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGhlbWVFZmxDb2xvckNsYXNzU2VsZWN0
aW9uQWN0aXZlKTsKLSAgICAgICAgICAgIENPTk5FQ1QoInNlbGVjdGlvbi9pbmFjdGl2ZSIsCi0g
ICAgICAgICAgICAgICAgICAgIHJlbmRlclRoZW1lRWZsQ29sb3JDbGFzc1NlbGVjdGlvbkluYWN0
aXZlKTsKLSAgICAgICAgICAgIENPTk5FQ1QoImZvY3VzX3JpbmciLCByZW5kZXJUaGVtZUVmbENv
bG9yQ2xhc3NGb2N1c1JpbmcpOwotI3VuZGVmIENPTk5FQ1QKLSAgICAgICAgfQorI2lmICFOREVC
VUcKKyAgICBpZiAobV9lZGplKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIHBhdGg7CisgICAgICAg
IGVkamVfb2JqZWN0X2ZpbGVfZ2V0KG8sICZwYXRoLCAwKTsKKyAgICAgICAgQVNTRVJUKG1fdGhl
bWVQYXRoID09IHBhdGgpOwogICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBtX3RoZW1lUGF0aDsK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlFZGplQ29sb3JzKCkKK2Jvb2wgUmVuZGVy
VGhlbWVFZmw6OmxvYWRUaGVtZSgpCiB7Ci0gICAgaW50IGZyLCBmZywgZmIsIGZhLCBiciwgYmcs
IGJiLCBiYTsKLSAgICBBU1NFUlQobV9lZGplKTsKLSNkZWZpbmUgQ09MT1JfR0VUKGNscykgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlZGpl
X29iamVjdF9jb2xvcl9jbGFzc19nZXQobV9lZGplLCAid2Via2l0LyJjbHMsICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZyLCAmZmcsICZmYiwg
JmZhLCAmYnIsICZiZywgJmJiLCAmYmEsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCwgMCwgMCwgMCkKLQotICAgIGlmIChDT0xPUl9HRVQoInNlbGVjdGlvbi9hY3RpdmUiKSkg
ewotICAgICAgICBtX2FjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvciA9IENvbG9yKGZyLCBm
ZywgZmIsIGZhKTsKLSAgICAgICAgbV9hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IgPSBD
b2xvcihiciwgYmcsIGJiLCBiYSk7Ci0gICAgfQotICAgIGlmIChDT0xPUl9HRVQoInNlbGVjdGlv
bi9pbmFjdGl2ZSIpKSB7Ci0gICAgICAgIG1faW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IgPSBDb2xvcihmciwgZmcsIGZiLCBmYSk7Ci0gICAgICAgIG1faW5hY3RpdmVTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IgPSBDb2xvcihiciwgYmcsIGJiLCBiYSk7CisgICAgRXZhc19PYmplY3Qq
IG8gPSBlZGplX29iamVjdF9hZGQoZWNvcmVfZXZhc19nZXQobV9jYW52YXMpKTsKKyAgICBfQVNT
RVJUX09OX1JFTEVBU0VfUkVUVVJOX1ZBTChvLCBmYWxzZSwgIkNvdWxkIG5vdCBjcmVhdGUgbmV3
IGJhc2UgRWRqZSBvYmplY3QuIik7CisKKyAgICBpZiAoIXNldFNvdXJjZUdyb3VwRm9yRWRqZU9i
amVjdChvLCBtX3RoZW1lUGF0aC51dGY4KCkuZGF0YSgpLCAid2Via2l0L2Jhc2UiKSkgeworICAg
ICAgICBldmFzX29iamVjdF9kZWwobyk7CisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gS2VlcCBj
dXJyZW50IHRoZW1lLgogICAgIH0KLSAgICBpZiAoQ09MT1JfR0VUKCJmb2N1c19yaW5nIikpIHsK
LSAgICAgICAgbV9mb2N1c1JpbmdDb2xvciA9IENvbG9yKGZyLCBmZywgZmIsIGZhKTsKLSAgICAg
ICAgLy8gd2Via2l0IGp1c3QgdXNlIHBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKSBmb3IgZGVmYXVs
dCB0aGVtZSAod2l0aG91dCBwYWdlKQotICAgICAgICAvLyB0aGlzIGlzIHVnbHksIGJ1dCBubyBv
dGhlciB3YXkgdG8gZG8gaXQgdW5sZXNzIHdlIGNoYW5nZQotICAgICAgICAvLyBpdCB0byB1c2Ug
cGFnZSB0aGVtZXMgYXMgbXVjaCBhcyBwb3NzaWJsZS4KLSAgICAgICAgUmVuZGVyVGhlbWU6OnNl
dEN1c3RvbUZvY3VzUmluZ0NvbG9yKG1fZm9jdXNSaW5nQ29sb3IpOworCisgICAgLy8gR2V0IHJp
ZCBvZiBleGlzdGluZyB0aGVtZS4KKyAgICBpZiAobV9lZGplKSB7CisgICAgICAgIGZsdXNoVGhl
bWVQYXJ0Q2FjaGUoKTsKKyAgICAgICAgZXZhc19vYmplY3RfZGVsKG1fZWRqZSk7CiAgICAgfQot
I3VuZGVmIENPTE9SX0dFVAotICAgIHBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCk7CisKKyAgICAv
LyBTZXQgbmV3IGxvYWRlZCB0aGVtZSwgYW5kIGFwcGx5IGl0LgorICAgIG1fZWRqZSA9IG87CisK
KyAgICBlZGplX29iamVjdF9zaWduYWxfY2FsbGJhY2tfYWRkKG1fZWRqZSwgImNvbG9yX2NsYXNz
LHNldCIsICJ3ZWJraXQvc2VsZWN0aW9uL2FjdGl2ZSIsIGFwcGx5Q29sb3JDYWxsYmFjaywgdGhp
cyk7CisgICAgZWRqZV9vYmplY3Rfc2lnbmFsX2NhbGxiYWNrX2FkZChtX2VkamUsICJjb2xvcl9j
bGFzcyxzZXQiLCAid2Via2l0L3NlbGVjdGlvbi9pbmFjdGl2ZSIsIGFwcGx5Q29sb3JDYWxsYmFj
aywgdGhpcyk7CisgICAgZWRqZV9vYmplY3Rfc2lnbmFsX2NhbGxiYWNrX2FkZChtX2VkamUsICJj
b2xvcl9jbGFzcyxzZXQiLCAid2Via2l0L2ZvY3VzX3JpbmciLCBhcHBseUNvbG9yQ2FsbGJhY2ss
IHRoaXMpOworCisgICAgYXBwbHlQYXJ0RGVzY3JpcHRpb25zRnJvbShtX2VkamUpOworCisgICAg
c2V0Q29sb3JGcm9tVGhlbWVDbGFzcygid2Via2l0L3NlbGVjdGlvbi9hY3RpdmUiKTsKKyAgICBz
ZXRDb2xvckZyb21UaGVtZUNsYXNzKCJ3ZWJraXQvc2VsZWN0aW9uL2luYWN0aXZlIik7CisgICAg
c2V0Q29sb3JGcm9tVGhlbWVDbGFzcygid2Via2l0L2ZvY3VzX3JpbmciKTsKKworICAgIHBsYXRm
b3JtQ29sb3JzRGlkQ2hhbmdlKCk7IC8vIFNjaGVkdWxlcyBhIHJlbGF5b3V0LCBkbyBsYXN0Lgor
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFwcGx5UGFydERl
c2NyaXB0aW9uRmFsbGJhY2soc3RydWN0IFRoZW1lUGFydERlc2MqIGRlc2MpCkBAIC01NjgsOTYg
KzU5NSwyNyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseVBhcnREZXNjcmlwdGlvbihFdmFz
X09iamVjdCogb2JqZWN0LCBzdHJ1Y3QgVGhlbWVQYXJ0RAogICAgIH0KIH0KIAotY29uc3QgY2hh
ciogUmVuZGVyVGhlbWVFZmw6OmVkamVHcm91cEZyb21Gb3JtVHlwZShGb3JtVHlwZSB0eXBlKSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlQYXJ0RGVzY3JpcHRpb25zRnJvbShFdmFz
X09iamVjdCogbykKIHsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZ3JvdXBzW10gPSB7Ci0jZGVm
aW5lIFcobikgIndlYmtpdC93aWRnZXQvIm4KLSAgICAgICAgVygiYnV0dG9uIiksCi0gICAgICAg
IFcoInJhZGlvIiksCi0gICAgICAgIFcoImVudHJ5IiksCi0gICAgICAgIFcoImNoZWNrYm94Iiks
Ci0gICAgICAgIFcoImNvbWJvIiksCi0jaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAg
ICAgIFcoInByb2dyZXNzYmFyIiksCi0jZW5kaWYKLSAgICAgICAgVygic2VhcmNoL2ZpZWxkIiks
Ci0gICAgICAgIFcoInNlYXJjaC9kZWNvcmF0aW9uIiksCi0gICAgICAgIFcoInNlYXJjaC9yZXN1
bHRzX2J1dHRvbiIpLAotICAgICAgICBXKCJzZWFyY2gvcmVzdWx0c19kZWNvcmF0aW9uIiksCi0g
ICAgICAgIFcoInNlYXJjaC9jYW5jZWxfYnV0dG9uIiksCi0gICAgICAgIFcoInNsaWRlci92ZXJ0
aWNhbCIpLAotICAgICAgICBXKCJzbGlkZXIvaG9yaXpvbnRhbCIpLAotICAgICAgICBXKCJzbGlk
ZXIvdGh1bWJfdmVydGljYWwiKSwKLSAgICAgICAgVygic2xpZGVyL3RodW1iX2hvcml6b250YWwi
KSwKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgICAgIFcoIm1lZGlhY29udHJvbC9wbGF5cGF1c2Vf
YnV0dG9uIiksCi0gICAgICAgIFcoIm1lZGlhY29udHJvbC9tdXRlX2J1dHRvbiIpLAotICAgICAg
ICBXKCJtZWRpYWNvbnRyb2wvc2Vla2ZvcndhcmRfYnV0dG9uIiksCi0gICAgICAgIFcoIm1lZGlh
Y29udHJvbC9zZWVrYmFja3dhcmRfYnV0dG9uIiksCi0gICAgICAgIFcoIm1lZGlhY29udHJvbC9m
dWxsc2NyZWVuX2J1dHRvbiIpLAotI2VuZGlmCi0gICAgICAgIFcoInNwaW5uZXIiKSwKLSN1bmRl
ZiBXCi0gICAgICAgIDAKLSAgICB9OwotICAgIEFTU0VSVCh0eXBlID49IDApOwotICAgIEFTU0VS
VCgoc2l6ZV90KXR5cGUgPCBzaXplb2YoZ3JvdXBzKSAvIHNpemVvZihncm91cHNbMF0pKTsgLy8g
b3V0IG9mIHN5bmM/Ci0gICAgcmV0dXJuIGdyb3Vwc1t0eXBlXTsKLX0KKyAgICBBU1NFUlQobyk7
CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFwcGx5UGFydERlc2NyaXB0aW9ucygpCi17Ci0gICAg
RXZhc19PYmplY3QqIG9iamVjdDsKLSAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICBjb25zdCBjaGFy
KiBmaWxlOworICAgIGNvbnN0IGNoYXIqIHBhdGg7CisgICAgZWRqZV9vYmplY3RfZmlsZV9nZXQo
bywgJnBhdGgsIDApOworICAgIF9BU1NFUlRfT05fUkVMRUFTRV9SRVRVUk4ocGF0aCwgIkNvdWxk
IG5vdCBsb2FkIEVkamUgdGhlbWUgZmlsZS4iKTsKIAotICAgIEFTU0VSVChtX2NhbnZhcyk7Ci0g
ICAgQVNTRVJUKG1fZWRqZSk7CisgICAgRXZhc19PYmplY3QqIHRlbXAgPSBlZGplX29iamVjdF9h
ZGQoZWNvcmVfZXZhc19nZXQobV9jYW52YXMpKTsKKyAgICBfQVNTRVJUX09OX1JFTEVBU0VfUkVU
VVJOKHRlbXAsICJDb3VsZCBub3QgY3JlYXRlIEVkamUgb2JqZWN0LiIpOwogCi0gICAgZWRqZV9v
YmplY3RfZmlsZV9nZXQobV9lZGplLCAmZmlsZSwgMCk7Ci0gICAgQVNTRVJUKGZpbGUpOwotCi0g
ICAgb2JqZWN0ID0gZWRqZV9vYmplY3RfYWRkKGVjb3JlX2V2YXNfZ2V0KG1fY2FudmFzKSk7Ci0g
ICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgY3JlYXRl
IEVkamUgb2JqZWN0LiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZm9yIChpID0g
MDsgaSA8IEZvcm1UeXBlTGFzdDsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEZvcm1UeXBlTGFzdDsgaSsrKSB7CiAgICAgICAgIEZvcm1UeXBlIHR5cGUgPSBzdGF0aWNfY2Fz
dDxGb3JtVHlwZT4oaSk7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGdyb3VwID0gZWRqZUdyb3VwRnJv
bUZvcm1UeXBlKHR5cGUpOwogICAgICAgICBtX3BhcnREZXNjc1tpXS50eXBlID0gdHlwZTsKLSAg
ICAgICAgaWYgKCFlZGplX29iamVjdF9maWxlX3NldChvYmplY3QsIGZpbGUsIGdyb3VwKSkgewot
ICAgICAgICAgICAgRWRqZV9Mb2FkX0Vycm9yIGVyciA9IGVkamVfb2JqZWN0X2xvYWRfZXJyb3Jf
Z2V0KG9iamVjdCk7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJtc2cgPSBlZGplX2xvYWRf
ZXJyb3Jfc3RyKGVycik7Ci0gICAgICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBzZXQg
dGhlbWUgZ3JvdXAgJyVzJyBvZiBmaWxlICclcyc6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBncm91cCwgZmlsZSwgZXJybXNnKTsKLQorICAgICAgICBpZiAoIXNldFNvdXJjZUdyb3Vw
Rm9yRWRqZU9iamVjdCh0ZW1wLCBwYXRoLCB0b0VkamVHcm91cCh0eXBlKSkpCiAgICAgICAgICAg
ICBhcHBseVBhcnREZXNjcmlwdGlvbkZhbGxiYWNrKG1fcGFydERlc2NzICsgaSk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgYXBwbHlQYXJ0RGVzY3JpcHRpb24ob2JqZWN0LCBtX3BhcnRE
ZXNjcyArIGkpOwotICAgIH0KLSAgICBldmFzX29iamVjdF9kZWwob2JqZWN0KTsKLX0KLQotdm9p
ZCBSZW5kZXJUaGVtZUVmbDo6dGhlbWVDaGFuZ2VkKCkKLXsKLSAgICBjYWNoZVRoZW1lUGFydEZs
dXNoKCk7Ci0KLSAgICBpZiAoIW1fY2FudmFzKSB7Ci0gICAgICAgIGNyZWF0ZUNhbnZhcygpOwot
ICAgICAgICBpZiAoIW1fY2FudmFzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICghbV9lZGplKSB7Ci0gICAgICAgIGNyZWF0ZUVkamUoKTsKLSAgICAgICAgaWYgKCFtX2Vk
amUpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFwcGx5
UGFydERlc2NyaXB0aW9uKHRlbXAsIG1fcGFydERlc2NzICsgaSk7CiAgICAgfQogCi0gICAgYXBw
bHlFZGplQ29sb3JzKCk7Ci0gICAgYXBwbHlQYXJ0RGVzY3JpcHRpb25zKCk7CisgICAgZXZhc19v
YmplY3RfZGVsKHRlbXApOwogfQogCiBSZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhlbWVFZmwoUGFn
ZSogcGFnZSkKQEAgLTY4MCw3ICs2MzgsNyBAQCBSZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhlbWVF
ZmwoUGFnZSogcGFnZSkKIAogUmVuZGVyVGhlbWVFZmw6On5SZW5kZXJUaGVtZUVmbCgpCiB7Ci0g
ICAgY2FjaGVUaGVtZVBhcnRGbHVzaCgpOworICAgIGZsdXNoVGhlbWVQYXJ0Q2FjaGUoKTsKIAog
ICAgIGlmIChtX2NhbnZhcykgewogICAgICAgICBpZiAobV9lZGplKQpAQCAtNjg5LDMwICs2NDcs
NiBAQCBSZW5kZXJUaGVtZUVmbDo6flJlbmRlclRoZW1lRWZsKCkKICAgICB9CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVFZmw6OnNldEFjdGl2ZVNlbGVjdGlvbkNvbG9yKGludCBmb3JlUiwgaW50IGZv
cmVHLCBpbnQgZm9yZUIsIGludCBmb3JlQSwgaW50IGJhY2tSLCBpbnQgYmFja0csIGludCBiYWNr
QiwgaW50IGJhY2tBKQotewotICAgIG1fYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yID0g
Q29sb3IoZm9yZVIsIGZvcmVHLCBmb3JlQiwgZm9yZUEpOwotICAgIG1fYWN0aXZlU2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yID0gQ29sb3IoYmFja1IsIGJhY2tHLCBiYWNrQiwgYmFja0EpOwotICAg
IHBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVFZmw6OnNl
dEluYWN0aXZlU2VsZWN0aW9uQ29sb3IoaW50IGZvcmVSLCBpbnQgZm9yZUcsIGludCBmb3JlQiwg
aW50IGZvcmVBLCBpbnQgYmFja1IsIGludCBiYWNrRywgaW50IGJhY2tCLCBpbnQgYmFja0EpCi17
Ci0gICAgbV9pbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvciA9IENvbG9yKGZvcmVSLCBm
b3JlRywgZm9yZUIsIGZvcmVBKTsKLSAgICBtX2luYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yID0gQ29sb3IoYmFja1IsIGJhY2tHLCBiYWNrQiwgYmFja0EpOwotICAgIHBsYXRmb3JtQ29s
b3JzRGlkQ2hhbmdlKCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVFZmw6OnNldEZvY3VzUmluZ0Nv
bG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQotewotICAgIG1fZm9jdXNSaW5nQ29sb3Ig
PSBDb2xvcihyLCBnLCBiLCBhKTsKLSAgICAvLyB3ZWJraXQganVzdCB1c2UgcGxhdGZvcm1Gb2N1
c1JpbmdDb2xvcigpIGZvciBkZWZhdWx0IHRoZW1lICh3aXRob3V0IHBhZ2UpCi0gICAgLy8gdGhp
cyBpcyB1Z2x5LCBidXQgbm8gb3RoZXIgd2F5IHRvIGRvIGl0IHVubGVzcyB3ZSBjaGFuZ2UKLSAg
ICAvLyBpdCB0byB1c2UgcGFnZSB0aGVtZXMgYXMgbXVjaCBhcyBwb3NzaWJsZS4KLSAgICBSZW5k
ZXJUaGVtZTo6c2V0Q3VzdG9tRm9jdXNSaW5nQ29sb3IobV9mb2N1c1JpbmdDb2xvcik7Ci0gICAg
cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKLX0KLQogc3RhdGljIGJvb2wgc3VwcG9ydHNGb2N1
cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKQogewogICAgIHN3aXRjaCAoYXBwZWFyYW5jZSkgewpA
QCAtNzU0LDYgKzY4OCwzNiBAQCBMYXlvdXRVbml0IFJlbmRlclRoZW1lRWZsOjpiYXNlbGluZVBv
c2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KSBjb25zdAogICAgIHJldHVybiBSZW5k
ZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihvYmplY3QpOwogfQogCitDb2xvciBSZW5kZXJUaGVt
ZUVmbDo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAorewor
ICAgIGxvYWRUaGVtZUlmTmVlZGVkKCk7CisgICAgcmV0dXJuIG1fYWN0aXZlU2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yOworfQorCitDb2xvciBSZW5kZXJUaGVtZUVmbDo6cGxhdGZvcm1JbmFjdGl2
ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgbG9hZFRoZW1lSWZOZWVk
ZWQoKTsKKyAgICByZXR1cm4gbV9pbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsKK30K
KworQ29sb3IgUmVuZGVyVGhlbWVFZmw6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3Vu
ZENvbG9yKCkgY29uc3QKK3sKKyAgICBsb2FkVGhlbWVJZk5lZWRlZCgpOworICAgIHJldHVybiBt
X2FjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcjsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVF
Zmw6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAorewor
ICAgIGxvYWRUaGVtZUlmTmVlZGVkKCk7CisgICAgcmV0dXJuIG1faW5hY3RpdmVTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3I7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lRWZsOjpwbGF0Zm9ybUZvY3Vz
UmluZ0NvbG9yKCkgY29uc3QKK3sKKyAgICBsb2FkVGhlbWVJZk5lZWRlZCgpOworICAgIHJldHVy
biBtX2ZvY3VzUmluZ0NvbG9yOworfQorCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNsaWRl
clRyYWNrKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKG9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgp
ID09IFNsaWRlckhvcml6b250YWxQYXJ0KQpAQCAtODQyLDcgKzgwNiwxMCBAQCB2b2lkIFJlbmRl
clRoZW1lRWZsOjphZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIFJlbmRlclN0eQogICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCo+KGVsZW1l
bnQtPmRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKSktPmFkanVzdENoZWNrYm94U3R5bGUoc3R5
bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCiAg
ICAgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBDaGVja0JveCk7CisgICAgQVNTRVJUKG1f
ZWRqZSk7CisKICAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKIAogICAgIGNvbnN0IHN0cnVjdCBU
aGVtZVBhcnREZXNjICpkZXNjID0gbV9wYXJ0RGVzY3MgKyAoc2l6ZV90KUNoZWNrQm94OwpAQCAt
ODYzLDcgKzgzMCwxMCBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RSYWRpb1N0eWxlKFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKgogICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJUaGVtZUVmbCo+KGVsZW1lbnQtPmRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUo
KSktPmFkanVzdFJhZGlvU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQorCiAgICAgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBS
YWRpb0J1dHRvbik7CisgICAgQVNTRVJUKG1fZWRqZSk7CisKICAgICBzdHlsZS0+cmVzZXRCb3Jk
ZXIoKTsKIAogICAgIGNvbnN0IHN0cnVjdCBUaGVtZVBhcnREZXNjICpkZXNjID0gbV9wYXJ0RGVz
Y3MgKyAoc2l6ZV90KVJhZGlvQnV0dG9uOwpAQCAtMTA4NiwxMiArMTA1NiwxMSBAQCBib29sIFJl
bmRlclRoZW1lRWZsOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25z
dCBQYWludEluZm8mIGluZgogI2lmIEVOQUJMRShWSURFTykKIGJvb2wgUmVuZGVyVGhlbWVFZmw6
OmVtaXRNZWRpYUJ1dHRvblNpZ25hbChGb3JtVHlwZSBmb3JtVHlwZSwgTWVkaWFDb250cm9sRWxl
bWVudFR5cGUgbWVkaWFFbGVtZW50VHlwZSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBU
aGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRyeTsKKyAgICBsb2FkVGhlbWVJZk5lZWRlZCgpOworICAg
IF9BU1NFUlRfT05fUkVMRUFTRV9SRVRVUk5fVkFMKG1fZWRqZSwgZmFsc2UsICJDb3VsZCBub3Qg
cGFpbnQgbmF0aXZlIEhUTUwgcGFydCBkdWUgdG8gbWlzc2luZyB0aGVtZS4iKTsKIAotICAgIGVu
dHJ5ID0gY2FjaGVUaGVtZVBhcnRHZXQoZm9ybVR5cGUsIHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NF
UlQoZW50cnkpOwotICAgIGlmICghZW50cnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBU
aGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRyeSA9IGdldFRoZW1lUGFydEZyb21DYWNoZShmb3JtVHlw
ZSwgcmVjdC5zaXplKCkpOworICAgIF9BU1NFUlRfT05fUkVMRUFTRV9SRVRVUk5fVkFMKGVudHJ5
LCBmYWxzZSwgIkNvdWxkIG5vdCBwYWludCBuYXRpdmUgSFRNTCBwYXJ0IGR1ZSB0byBtaXNzaW5n
IHRoZW1lIHBhcnQuIik7CiAKICAgICBpZiAobWVkaWFFbGVtZW50VHlwZSA9PSBNZWRpYVBsYXlC
dXR0b24pCiAgICAgICAgIGVkamVfb2JqZWN0X3NpZ25hbF9lbWl0KGVudHJ5LT5vLCAicGxheSIs
ICIiKTsKQEAgLTEyODAsNCArMTI0OSw4IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50TWVk
aWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKKworI3VuZGVmIF9BU1NFUlRfT05fUkVMRUFTRV9SRVRV
Uk4KKyN1bmRlZiBfQVNTRVJUX09OX1JFTEVBU0VfUkVUVVJOX1ZBTAorCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oCmluZGV4IGVkNDJmMzdkMGNmOWI1
MDE2Y2MzNzJkYjk3OGZmMzM5ZWYzZmMwZDQuLjQxOTk2MGJjYzNiZTQ0MWQ5MjZiYTA2NDNmYWFh
Zjg2M2ViNWVjMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5k
ZXJUaGVtZUVmbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVt
ZUVmbC5oCkBAIC05NiwxOCArOTYsMTQgQEAgcHVibGljOgogICAgIC8vIGNvbnRyb2xzIHRoYXQg
bmVlZCB0byBkbyB0aGlzLgogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9u
KGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwogCi0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9y
bUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZl
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yOyB9Ci0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUlu
YWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9pbmFjdGl2
ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsgfQotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1B
Y3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZVNl
bGVjdGlvbkZvcmVncm91bmRDb2xvcjsgfQotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFj
dGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1faW5hY3RpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3I7IH0KLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtRm9j
dXNSaW5nQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2ZvY3VzUmluZ0NvbG9yOyB9CisgICAgdmly
dHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0
OworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRD
b2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3Rp
dmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBs
YXRmb3JtRm9jdXNSaW5nQ29sb3IoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNo
YW5nZWQoKTsKLQotICAgIC8vIFNldCBwbGF0Zm9ybSBjb2xvcnMgYW5kIG5vdGlmeSB0aGV5IGNo
YW5nZWQKLSAgICB2b2lkIHNldEFjdGl2ZVNlbGVjdGlvbkNvbG9yKGludCBmb3JlUiwgaW50IGZv
cmVHLCBpbnQgZm9yZUIsIGludCBmb3JlQSwgaW50IGJhY2tSLCBpbnQgYmFja0csIGludCBiYWNr
QiwgaW50IGJhY2tBKTsKLSAgICB2b2lkIHNldEluYWN0aXZlU2VsZWN0aW9uQ29sb3IoaW50IGZv
cmVSLCBpbnQgZm9yZUcsIGludCBmb3JlQiwgaW50IGZvcmVBLCBpbnQgYmFja1IsIGludCBiYWNr
RywgaW50IGJhY2tCLCBpbnQgYmFja0EpOwotICAgIHZvaWQgc2V0Rm9jdXNSaW5nQ29sb3IoaW50
IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOworICAgIC8vIFNldCBwbGF0Zm9ybSBjb2xvcnM7IHJl
bWVtYmVyIHRvIGNhbGwgcGxhdGZvcm1Db2xvckRpZENoYW5nZSBhZnRlci4KKyAgICB2b2lkIHNl
dENvbG9yRnJvbVRoZW1lQ2xhc3MoY29uc3QgY2hhciogY29sb3JDbGFzcyk7CiAKICAgICB2b2lk
IHNldEJ1dHRvblRleHRDb2xvcihpbnQgZm9yZVIsIGludCBmb3JlRywgaW50IGZvcmVCLCBpbnQg
Zm9yZUEsIGludCBiYWNrUiwgaW50IGJhY2tHLCBpbnQgYmFja0IsIGludCBiYWNrQSk7CiAgICAg
dm9pZCBzZXRDb21ib1RleHRDb2xvcihpbnQgZm9yZVIsIGludCBmb3JlRywgaW50IGZvcmVCLCBp
bnQgZm9yZUEsIGludCBiYWNrUiwgaW50IGJhY2tHLCBpbnQgYmFja0IsIGludCBiYWNrQSk7CkBA
IC0xMTYsNyArMTEyLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGp1c3RTaXplQ29uc3RyYWlu
dHMoUmVuZGVyU3R5bGUqLCBGb3JtVHlwZSkgY29uc3Q7CiAKLQogICAgIC8vIFN5c3RlbSBmb250
cy4KICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRp
b24mKSBjb25zdDsKIApAQCAtMjA3LDE5ICsyMDIsMjIgQEAgcHVibGljOgogI2VuZGlmCiAKICAg
ICB2b2lkIHNldFRoZW1lUGF0aChjb25zdCBTdHJpbmcmKTsKLSAgICBTdHJpbmcgdGhlbWVQYXRo
KCkgeyByZXR1cm4gbV90aGVtZVBhdGg7IH0KKyAgICBTdHJpbmcgdGhlbWVQYXRoKCkgY29uc3Q7
CisKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgZmxvYXQgZGVmYXVsdEZvbnRTaXplOwogCiBwcml2
YXRlOgotICAgIHZvaWQgY3JlYXRlQ2FudmFzKCk7Ci0gICAgdm9pZCBjcmVhdGVFZGplKCk7Ci0g
ICAgdm9pZCBhcHBseUVkamVDb2xvcnMoKTsKLSAgICB2b2lkIGFwcGx5UGFydERlc2NyaXB0aW9u
cygpOwotICAgIGNvbnN0IGNoYXIqIGVkamVHcm91cEZyb21Gb3JtVHlwZShGb3JtVHlwZSkgY29u
c3Q7CisgICAgYm9vbCBsb2FkVGhlbWUoKTsKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgbG9hZFRo
ZW1lSWZOZWVkZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWRqZSB8fCBjb25z
dF9jYXN0PFJlbmRlclRoZW1lRWZsKj4odGhpcyktPmxvYWRUaGVtZSgpOworICAgIH0KKworICAg
IHZvaWQgYXBwbHlQYXJ0RGVzY3JpcHRpb25zRnJvbShFdmFzX09iamVjdCopOworCiAgICAgdm9p
ZCBhcHBseUVkamVTdGF0ZUZyb21Gb3JtKEV2YXNfT2JqZWN0KiwgQ29udHJvbFN0YXRlcyk7CiAg
ICAgYm9vbCBwYWludFRoZW1lUGFydChSZW5kZXJPYmplY3QqLCBGb3JtVHlwZSwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIGJvb2wgaXNGb3JtRWxlbWVudFRvb0xhcmdl
VG9EaXNwbGF5KGNvbnN0IEludFNpemUmKTsKIAogI2lmIEVOQUJMRShWSURFTykKICAgICBib29s
IGVtaXRNZWRpYUJ1dHRvblNpZ25hbChGb3JtVHlwZSwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUs
IGNvbnN0IEludFJlY3QmKTsKQEAgLTI1Miw2ICsyNTAsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGFwcGx5UGFydERlc2NyaXB0aW9uKEV2YXNfT2JqZWN0Kiwgc3RydWN0IFRoZW1lUGFydERlc2Mq
KTsKIAogICAgIHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5IHsKKyAgICAgICAgVGhlbWVQYXJ0
Q2FjaGVFbnRyeSgpOworICAgICAgICB+VGhlbWVQYXJ0Q2FjaGVFbnRyeSgpOworICAgICAgICBz
dGF0aWMgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY3JlYXRlKGNvbnN0IEludFNpemUmLCBGb3JtVHlw
ZSwgY29uc3QgU3RyaW5nJiB0aGVtZVBhdGgpOworICAgICAgICB2b2lkIHJldXNlKGNvbnN0IFN0
cmluZyYgdGhlbWVQYXRoLCBGb3JtVHlwZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSA9IEludFNpemUo
KSk7CisKICAgICAgICAgRm9ybVR5cGUgdHlwZTsKICAgICAgICAgSW50U2l6ZSBzaXplOwogICAg
ICAgICBFY29yZV9FdmFzKiBlZTsKQEAgLTI2MywyMCArMjY2LDEwIEBAIHByaXZhdGU6CiAKICAg
ICAvLyB0aGlzIHNob3VsZCBiZSBzbWFsbCBhbmQgbm90IHNvIGZyZXF1ZW50bHkgdXNlZCwKICAg
ICAvLyBzbyB1c2UgYSB2ZWN0b3IgYW5kIGRvIGxpbmVhciBzZWFyY2hlcwotICAgIFZlY3Rvcjxz
dHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSAqPiBtX3BhcnRDYWNoZTsKLQotICAgIC8vIGdldCAo
dXNlLCBjcmVhdGUgb3IgcmVwbGFjZSkgZW50cnkgZnJvbSBjYWNoZQotICAgIHN0cnVjdCBUaGVt
ZVBhcnRDYWNoZUVudHJ5KiBjYWNoZVRoZW1lUGFydEdldChGb3JtVHlwZSwgY29uc3QgSW50U2l6
ZSYpOwotICAgIC8vIGZsdXNoIGNhY2hlLCBkZWxldGluZyBhbGwgZW50cmllcwotICAgIHZvaWQg
Y2FjaGVUaGVtZVBhcnRGbHVzaCgpOwotCi0gICAgLy8gaW50ZXJuYWwsIHVzZWQgYnkgY2FjaGVU
aGVtZVBhcnRHZXQoKQotICAgIGJvb2wgdGhlbWVQYXJ0Q2FjaGVFbnRyeVJlc2V0KHN0cnVjdCBU
aGVtZVBhcnRDYWNoZUVudHJ5KiwgRm9ybVR5cGUpOwotICAgIGJvb2wgdGhlbWVQYXJ0Q2FjaGVF
bnRyeVN1cmZhY2VDcmVhdGUoc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqKTsKLSAgICBzdHJ1
Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY2FjaGVUaGVtZVBhcnROZXcoRm9ybVR5cGUsIGNvbnN0
IEludFNpemUmKTsKLSAgICBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY2FjaGVUaGVtZVBh
cnRSZXNldChGb3JtVHlwZSwgc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqKTsKLSAgICBzdHJ1
Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY2FjaGVUaGVtZVBhcnRSZXNpemVBbmRSZXNldChGb3Jt
VHlwZSwgY29uc3QgSW50U2l6ZSYsIHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5Kik7CisgICAg
VmVjdG9yPFRoZW1lUGFydENhY2hlRW50cnkqPiBtX3BhcnRDYWNoZTsKIAorICAgIFRoZW1lUGFy
dENhY2hlRW50cnkqIGdldFRoZW1lUGFydEZyb21DYWNoZShGb3JtVHlwZSwgY29uc3QgSW50U2l6
ZSYpOworICAgIHZvaWQgZmx1c2hUaGVtZVBhcnRDYWNoZSgpOwogfTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162572</attachid>
            <date>2012-09-06 13:39:30 -0700</date>
            <delta_ts>2012-09-10 04:03:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96016-20120906223909.patch</filename>
            <type>text/plain</type>
            <size>21120</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NTcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWZiNmFiYWQ0OWJmMzcz
NmJhN2MzNDVjZTQ3MTQ5NzI1MWU3OTExMC4uOGY1MDM3Njg4ZGExN2M1ZDI3NTVkMGE1MGMzYmEz
ODlkZjI1ZjNmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTA5LTA2ICBLZW5u
ZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KKworICAgICAgICBb
RUZMXSBDbGVhbiB1cCB0aGUgUmVuZGVyVGhlbWUgRWRqZSBjYWNoaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjAxNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24g
b2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQgcGVy
LWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6dG9FZGplR3JvdXApOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0U291cmNlR3JvdXBGb3JFZGplT2JqZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5OjpUaGVtZVBhcnRD
YWNoZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjpUaGVtZVBhcnRD
YWNoZUVudHJ5Ojp+VGhlbWVQYXJ0Q2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVDYWlyb1N1cmZhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6aXNGb3JtRWxlbWVudFRvb0xh
cmdlVG9EaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjpUaGVtZVBh
cnRDYWNoZUVudHJ5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6
OlRoZW1lUGFydENhY2hlRW50cnk6OnJldXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lRWZsOjpnZXRUaGVtZVBhcnRGcm9tQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVFZmw6OmZsdXNoVGhlbWVQYXJ0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVFZmw6OnBhaW50VGhlbWVQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
RWZsOjp0aGVtZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmxvYWRU
aGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YXBwbHlQYXJ0RGVzY3Jp
cHRpb25zRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6flJlbmRlclRo
ZW1lRWZsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjplbWl0TWVkaWFCdXR0
b25TaWduYWwpOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oOgorICAg
ICAgICAoUmVuZGVyVGhlbWVFZmwpOgorICAgICAgICAoVGhlbWVQYXJ0Q2FjaGVFbnRyeSk6CisK
IDIwMTItMDktMDUgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFtFRkxdIEZ1enp5IGxvYWQgdGhlIEVkamUgdGhlbWUgZm9yIEhUTUwg
Zm9ybXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVt
ZUVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3Bw
CmluZGV4IGMxYzYwMjE4NTE1YzNhNGU1NDg3ZjM0MjQwMTE5MWNlOTA1NTIyZmEuLmI5MmE1OGFk
ZjBiYWNkZjhmZTIxMzZkMTdjNTZhODFkNDlmNzcwYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcApAQCAtODQsNiArODQsNTUgQEAgc3RhdGlj
IGNvbnN0IGludCBtZWRpYVNsaWRlclRodW1iSGVpZ2h0ID0gMTI7CiAjZGVmaW5lIF9BU1NFUlRf
T05fUkVMRUFTRV9SRVRVUk5fVkFMKG8sIHZhbCwgZm10LCAuLi4pIFwKICAgICBkbyB7IGlmICgh
bykgeyBFSU5BX0xPR19DUklUKGZtdCwgIyMgX19WQV9BUkdTX18pOyBBU1NFUlQobyk7IHJldHVy
biB2YWw7IH0gfSB3aGlsZSAoMCkKIAorCitzdGF0aWMgY29uc3QgY2hhciogdG9FZGplR3JvdXAo
Rm9ybVR5cGUgdHlwZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZ3JvdXBzW10gPSB7Cisj
ZGVmaW5lIFcobikgIndlYmtpdC93aWRnZXQvIm4KKyAgICAgICAgVygiYnV0dG9uIiksCisgICAg
ICAgIFcoInJhZGlvIiksCisgICAgICAgIFcoImVudHJ5IiksCisgICAgICAgIFcoImNoZWNrYm94
IiksCisgICAgICAgIFcoImNvbWJvIiksCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisg
ICAgICAgIFcoInByb2dyZXNzYmFyIiksCisjZW5kaWYKKyAgICAgICAgVygic2VhcmNoL2ZpZWxk
IiksCisgICAgICAgIFcoInNlYXJjaC9kZWNvcmF0aW9uIiksCisgICAgICAgIFcoInNlYXJjaC9y
ZXN1bHRzX2J1dHRvbiIpLAorICAgICAgICBXKCJzZWFyY2gvcmVzdWx0c19kZWNvcmF0aW9uIiks
CisgICAgICAgIFcoInNlYXJjaC9jYW5jZWxfYnV0dG9uIiksCisgICAgICAgIFcoInNsaWRlci92
ZXJ0aWNhbCIpLAorICAgICAgICBXKCJzbGlkZXIvaG9yaXpvbnRhbCIpLAorICAgICAgICBXKCJz
bGlkZXIvdGh1bWJfdmVydGljYWwiKSwKKyAgICAgICAgVygic2xpZGVyL3RodW1iX2hvcml6b250
YWwiKSwKKyNpZiBFTkFCTEUoVklERU8pCisgICAgICAgIFcoIm1lZGlhY29udHJvbC9wbGF5cGF1
c2VfYnV0dG9uIiksCisgICAgICAgIFcoIm1lZGlhY29udHJvbC9tdXRlX2J1dHRvbiIpLAorICAg
ICAgICBXKCJtZWRpYWNvbnRyb2wvc2Vla2ZvcndhcmRfYnV0dG9uIiksCisgICAgICAgIFcoIm1l
ZGlhY29udHJvbC9zZWVrYmFja3dhcmRfYnV0dG9uIiksCisgICAgICAgIFcoIm1lZGlhY29udHJv
bC9mdWxsc2NyZWVuX2J1dHRvbiIpLAorI2VuZGlmCisgICAgICAgIFcoInNwaW5uZXIiKSwKKyN1
bmRlZiBXCisgICAgICAgIDAKKyAgICB9OworICAgIEFTU0VSVCh0eXBlID49IDApOworICAgIEFT
U0VSVCgoc2l6ZV90KXR5cGUgPCBzaXplb2YoZ3JvdXBzKSAvIHNpemVvZihncm91cHNbMF0pKTsg
Ly8gb3V0IG9mIHN5bmM/CisgICAgcmV0dXJuIGdyb3Vwc1t0eXBlXTsKK30KKworc3RhdGljIGJv
b2wgc2V0U291cmNlR3JvdXBGb3JFZGplT2JqZWN0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFy
KiBwYXRoLCBjb25zdCBjaGFyKiBncm91cCkKK3sKKyAgICBpZiAoIWVkamVfb2JqZWN0X2ZpbGVf
c2V0KG8sIHBhdGgsIGdyb3VwKSkgeworICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gZWRq
ZV9sb2FkX2Vycm9yX3N0cihlZGplX29iamVjdF9sb2FkX2Vycm9yX2dldChvKSk7CisgICAgICAg
IEVJTkFfTE9HX0VSUigiQ291bGQgbm90IHNldCB0aGVtZSBncm91cCAnJXMnIG9mIGZpbGUgJyVz
JzogJXMiLCBncm91cCwgcGF0aCwgbWVzc2FnZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0
U2l6ZUNvbnN0cmFpbnRzKFJlbmRlclN0eWxlKiBzdHlsZSwgRm9ybVR5cGUgdHlwZSkgY29uc3QK
IHsKICAgICBsb2FkVGhlbWVJZk5lZWRlZCgpOwpAQCAtMTA3LDUyICsxNTYsNDIgQEAgdm9pZCBS
ZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2l6ZUNvbnN0cmFpbnRzKFJlbmRlclN0eWxlKiBzdHlsZSwg
Rm9ybVR5cGUgdHlwZSkgY28KICAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KGRlc2MtPnBhZGRp
bmcucmlnaHQoKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnRoZW1lUGFydENhY2hlRW50
cnlSZXNldChzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogZW50cnksIEZvcm1UeXBlIHR5cGUp
CitSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeTo6VGhlbWVQYXJ0Q2FjaGVFbnRy
eSgpCisgICAgOiBlZSgwKSwgbygwKSwgc3VyZmFjZSgwKQogewotICAgIGNvbnN0IGNoYXIgKmZp
bGUsICpncm91cDsKLQotICAgIEFTU0VSVChlbnRyeSk7Ci0gICAgQVNTRVJUKG1fZWRqZSk7Ci0K
LSAgICBlZGplX29iamVjdF9maWxlX2dldChtX2VkamUsICZmaWxlLCAwKTsKLSAgICBncm91cCA9
IGVkamVHcm91cEZyb21Gb3JtVHlwZSh0eXBlKTsKLSAgICBBU1NFUlQoZmlsZSk7Ci0gICAgQVNT
RVJUKGdyb3VwKTsKK30KIAotICAgIGlmICghZWRqZV9vYmplY3RfZmlsZV9zZXQoZW50cnktPm8s
IGZpbGUsIGdyb3VwKSkgewotICAgICAgICBFZGplX0xvYWRfRXJyb3IgZXJyID0gZWRqZV9vYmpl
Y3RfbG9hZF9lcnJvcl9nZXQoZW50cnktPm8pOwotICAgICAgICBjb25zdCBjaGFyICplcnJtc2cg
PSBlZGplX2xvYWRfZXJyb3Jfc3RyKGVycik7Ci0gICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQg
bm90IGxvYWQgJyVzJyBmcm9tIHRoZW1lICVzOiAlcyIsIGdyb3VwLCBmaWxlLCBlcnJtc2cpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworUmVuZGVyVGhl
bWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnk6On5UaGVtZVBhcnRDYWNoZUVudHJ5KCkKK3sKKyAg
ICBpZiAoc3VyZmFjZSkKKyAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOwor
ICAgIGlmIChvKQorICAgICAgICBldmFzX29iamVjdF9kZWwobyk7CisgICAgaWYgKGVlKQorICAg
ICAgICBlY29yZV9ldmFzX2ZyZWUoZWUpOwogfQogCi1ib29sIFJlbmRlclRoZW1lRWZsOjp0aGVt
ZVBhcnRDYWNoZUVudHJ5U3VyZmFjZUNyZWF0ZShzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSog
ZW50cnkpCitzdGF0aWMgY2Fpcm9fc3VyZmFjZV90KiBjcmVhdGVDYWlyb1N1cmZhY2VGb3IoRWNv
cmVfRXZhcyogZWUpCiB7Ci0gICAgaW50IHcsIGg7Ci0gICAgY2Fpcm9fc3RhdHVzX3Qgc3RhdHVz
OworICAgIEFTU0VSVChlZSk7CiAKLSAgICBBU1NFUlQoZW50cnkpOwotICAgIEFTU0VSVChlbnRy
eS0+ZWUpOworICAgIGludCB3aWR0aCwgaGVpZ2h0OworICAgIGVjb3JlX2V2YXNfZ2VvbWV0cnlf
Z2V0KGVlLCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOworICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYg
aGVpZ2h0ID4gMCk7CiAKLSAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChlbnRyeS0+ZWUsIDAs
IDAsICZ3LCAmaCk7Ci0gICAgQVNTRVJUKHcgPiAwKTsKLSAgICBBU1NFUlQoaCA+IDApOworICAg
IHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyKikoZWNvcmVfZXZhc19idWZm
ZXJfcGl4ZWxzX2dldChlZSkpOworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJv
X2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGJ1ZmZlciwgQ0FJUk9fRk9STUFUX0FSR0Iz
Miwgd2lkdGgsIGhlaWdodCwgd2lkdGggKiA0KTsKIAotICAgIGVudHJ5LT5zdXJmYWNlID0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoKHVuc2lnbmVkIGNoYXIgKillY29yZV9l
dmFzX2J1ZmZlcl9waXhlbHNfZ2V0KGVudHJ5LT5lZSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLCB3LCBo
LCB3ICogNCk7Ci0gICAgc3RhdHVzID0gY2Fpcm9fc3VyZmFjZV9zdGF0dXMoZW50cnktPnN1cmZh
Y2UpOworICAgIGNhaXJvX3N0YXR1c190IHN0YXR1cyA9IGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1
cmZhY2UpOwogICAgIGlmIChzdGF0dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKLSAgICAg
ICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgY3JlYXRlIGNhaXJvIHN1cmZhY2U6ICVzIiwKLSAg
ICAgICAgICAgICAgICAgICAgIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgY3JlYXRl
IGNhaXJvIHN1cmZhY2U6ICVzIiwgY2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0dXMpKTsKKyAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN1
cmZhY2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OmlzRm9ybUVsZW1lbnRUb29MYXJnZVRv
RGlzcGxheShjb25zdCBJbnRTaXplJiBlbGVtZW50U2l6ZSkKK3N0YXRpYyBib29sIGlzRm9ybUVs
ZW1lbnRUb29MYXJnZVRvRGlzcGxheShjb25zdCBJbnRTaXplJiBlbGVtZW50U2l6ZSkKIHsKICAg
ICAvLyBUaGlzIGxpbWl0IG9mIDIwMDAwIHBpeGVscyBpcyBoYXJkY29kZWQgaW5zaWRlIGVkamUg
LS0gYW55dGhpbmcgYWJvdmUgdGhpcyBzaXplCiAgICAgLy8gd2lsbCBiZSBjbGlwcGVkLiBUaGlz
IHZhbHVlIHNlZW1zIHRvIGJlIHJlYXNvbmFibGUgZW5vdWdoIHNvIHRoYXQgaGFyZGNvZGluZyBp
dApAQCAtMTYyLDI1ICsyMDEsMTggQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6aXNGb3JtRWxlbWVu
dFRvb0xhcmdlVG9EaXNwbGF5KGNvbnN0IEludFNpemUmIGVsZW1lbnRTaXplKQogICAgIHJldHVy
biBlbGVtZW50U2l6ZS53aWR0aCgpID4gbWF4RWRqZURpbWVuc2lvbiB8fCBlbGVtZW50U2l6ZS5o
ZWlnaHQoKSA+IG1heEVkamVEaW1lbnNpb247CiB9CiAKLS8vIGFsbG9jYXRlIGEgbmV3IGVudHJ5
IGFuZCBmaWxsIGl0IHdpdGggZWRqZSBncm91cAotc3RydWN0IFJlbmRlclRoZW1lRWZsOjpUaGVt
ZVBhcnRDYWNoZUVudHJ5KiBSZW5kZXJUaGVtZUVmbDo6Y2FjaGVUaGVtZVBhcnROZXcoRm9ybVR5
cGUgdHlwZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK1JlbmRlclRoZW1lRWZsOjpUaGVtZVBhcnRD
YWNoZUVudHJ5KiBSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeTo6Y3JlYXRlKGNv
bnN0IEludFNpemUmIHNpemUsIEZvcm1UeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdGhlbWVQYXRo
KQogewogICAgIGlmIChpc0Zvcm1FbGVtZW50VG9vTGFyZ2VUb0Rpc3BsYXkoc2l6ZSkpIHsKICAg
ICAgICAgRUlOQV9MT0dfRVJSKCJDYW5ub3QgcmVuZGVyIGFuIGVsZW1lbnQgb2Ygc2l6ZSAlZHgl
ZC4iLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAKLSAgICBUaGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRyeSA9IG5ldyBUaGVtZVBhcnRDYWNo
ZUVudHJ5OwotICAgIGlmICghZW50cnkpIHsKLSAgICAgICAgRUlOQV9MT0dfRVJSKCJjb3VsZCBu
b3QgYWxsb2NhdGUgVGhlbWVQYXJ0Q2FjaGVFbnRyeS4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQorICAgIE93blB0cjxUaGVtZVBhcnRDYWNoZUVudHJ5Kj4gZW50cnkgPSBhZG9wdFB0cihu
ZXcgVGhlbWVQYXJ0Q2FjaGVFbnRyeSk7CiAKICAgICBlbnRyeS0+ZWUgPSBlY29yZV9ldmFzX2J1
ZmZlcl9uZXcoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICBpZiAoIWVudHJ5LT5l
ZSkgewotICAgICAgICBFSU5BX0xPR19FUlIoImVjb3JlX2V2YXNfYnVmZmVyX25ldyglZCwgJWQp
IGZhaWxlZC4iLAotICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpKTsKLSAgICAgICAgZGVsZXRlIGVudHJ5OworICAgICAgICBFSU5BX0xPR19FUlIoImVjb3Jl
X2V2YXNfYnVmZmVyX25ldyglZCwgJWQpIGZhaWxlZC4iLCBzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTE4OSwxOSArMjIxLDEzIEBA
IHN0cnVjdCBSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeSogUmVuZGVyVGhlbWVF
Zmw6OmNhY2hlVGhlbWVQYXJ0TmV3KEZvCiAKICAgICBlbnRyeS0+byA9IGVkamVfb2JqZWN0X2Fk
ZChlY29yZV9ldmFzX2dldChlbnRyeS0+ZWUpKTsKICAgICBBU1NFUlQoZW50cnktPm8pOwotICAg
IGlmICghdGhlbWVQYXJ0Q2FjaGVFbnRyeVJlc2V0KGVudHJ5LCB0eXBlKSkgewotICAgICAgICBl
dmFzX29iamVjdF9kZWwoZW50cnktPm8pOwotICAgICAgICBlY29yZV9ldmFzX2ZyZWUoZW50cnkt
PmVlKTsKLSAgICAgICAgZGVsZXRlIGVudHJ5OworCisgICAgaWYgKCFzZXRTb3VyY2VHcm91cEZv
ckVkamVPYmplY3QoZW50cnktPm8sIHRoZW1lUGF0aC51dGY4KCkuZGF0YSgpLCB0b0VkamVHcm91
cCh0eXBlKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KIAotICAgIGlmICghdGhlbWVQYXJ0
Q2FjaGVFbnRyeVN1cmZhY2VDcmVhdGUoZW50cnkpKSB7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2Rl
bChlbnRyeS0+byk7Ci0gICAgICAgIGVjb3JlX2V2YXNfZnJlZShlbnRyeS0+ZWUpOwotICAgICAg
ICBkZWxldGUgZW50cnk7CisgICAgZW50cnktPnN1cmZhY2UgPSBjcmVhdGVDYWlyb1N1cmZhY2VG
b3IoZW50cnktPmVlKTsKKyAgICBpZiAoIWVudHJ5LT5zdXJmYWNlKQogICAgICAgICByZXR1cm4g
MDsKLSAgICB9CiAKICAgICBldmFzX29iamVjdF9yZXNpemUoZW50cnktPm8sIHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgZXZhc19vYmplY3Rfc2hvdyhlbnRyeS0+byk7CkBAIC0y
MDksODcgKzIzNSw4MSBAQCBzdHJ1Y3QgUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50
cnkqIFJlbmRlclRoZW1lRWZsOjpjYWNoZVRoZW1lUGFydE5ldyhGbwogICAgIGVudHJ5LT50eXBl
ID0gdHlwZTsKICAgICBlbnRyeS0+c2l6ZSA9IHNpemU7CiAKLSAgICBtX3BhcnRDYWNoZS5wcmVw
ZW5kKGVudHJ5KTsKLSAgICByZXR1cm4gZW50cnk7CisgICAgcmV0dXJuIGVudHJ5LmxlYWtQdHIo
KTsKIH0KIAotLy8ganVzdCBjaGFuZ2UgdGhlIGVkamUgZ3JvdXAgYW5kIHJldHVybiB0aGUgc2Ft
ZSBlbnRyeQotc3RydWN0IFJlbmRlclRoZW1lRWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5KiBSZW5k
ZXJUaGVtZUVmbDo6Y2FjaGVUaGVtZVBhcnRSZXNldChGb3JtVHlwZSB0eXBlLCBzdHJ1Y3QgUmVu
ZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIGVudHJ5KQordm9pZCBSZW5kZXJUaGVt
ZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeTo6cmV1c2UoY29uc3QgU3RyaW5nJiB0aGVtZVBhdGgs
IEZvcm1UeXBlIG5ld1R5cGUsIGNvbnN0IEludFNpemUmIG5ld1NpemUpCiB7Ci0gICAgaWYgKCF0
aGVtZVBhcnRDYWNoZUVudHJ5UmVzZXQoZW50cnksIHR5cGUpKSB7Ci0gICAgICAgIGVudHJ5LT50
eXBlID0gRm9ybVR5cGVMYXN0OyAvLyBpbnZhbGlkYXRlCi0gICAgICAgIG1fcGFydENhY2hlLmFw
cGVuZChlbnRyeSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBlbnRyeS0+dHlwZSA9
IHR5cGU7Ci0gICAgbV9wYXJ0Q2FjaGUucHJlcGVuZChlbnRyeSk7Ci0gICAgcmV0dXJuIGVudHJ5
OwotfQorICAgIGlmICghbmV3U2l6ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgY2Fpcm9fc3VyZmFj
ZV9maW5pc2goc3VyZmFjZSk7CiAKLS8vIHJlc2l6ZSBlbnRyeSBhbmQgcmVzZXQgaXQKLXN0cnVj
dCBSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeSogUmVuZGVyVGhlbWVFZmw6OmNh
Y2hlVGhlbWVQYXJ0UmVzaXplQW5kUmVzZXQoRm9ybVR5cGUgdHlwZSwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgc3RydWN0IFJlbmRlclRoZW1lRWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRyeSkK
LXsKLSAgICBjYWlyb19zdXJmYWNlX2ZpbmlzaChlbnRyeS0+c3VyZmFjZSk7CisgICAgICAgIHNp
emUgPSBuZXdTaXplOworICAgICAgICBlY29yZV9ldmFzX3Jlc2l6ZShlZSwgbmV3U2l6ZS53aWR0
aCgpLCBuZXdTaXplLmhlaWdodCgpKTsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKG8sIG5l
d1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSk7CiAKLSAgICBlbnRyeS0+c2l6ZSA9IHNp
emU7Ci0gICAgZWNvcmVfZXZhc19yZXNpemUoZW50cnktPmVlLCBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpOwotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShlbnRyeS0+bywgc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgc3VyZmFjZSA9IGNyZWF0ZUNhaXJvU3VyZmFjZUZv
cihlZSk7CisgICAgICAgIGlmICghc3VyZmFjZSkgeworICAgICAgICAgICAgdHlwZSA9IEZvcm1U
eXBlTGFzdDsgLy8gSW52YWxpZGF0ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KIAotICAgIGlmICghdGhlbWVQYXJ0Q2FjaGVFbnRyeVN1cmZhY2VDcmVhdGUoZW50cnkp
KSB7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2RlbChlbnRyeS0+byk7Ci0gICAgICAgIGVjb3JlX2V2
YXNfZnJlZShlbnRyeS0+ZWUpOwotICAgICAgICBkZWxldGUgZW50cnk7Ci0gICAgICAgIHJldHVy
biAwOworICAgIGlmICghc2V0U291cmNlR3JvdXBGb3JFZGplT2JqZWN0KG8sIHRoZW1lUGF0aC51
dGY4KCkuZGF0YSgpLCB0b0VkamVHcm91cChuZXdUeXBlKSkpIHsKKyAgICAgICAgdHlwZSA9IEZv
cm1UeXBlTGFzdDsgLy8gSW52YWxpZGF0ZS4KKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IHJldHVybiBjYWNoZVRoZW1lUGFydFJlc2V0KHR5cGUsIGVudHJ5KTsKKyAgICB0eXBlID0gbmV3
VHlwZTsKIH0KIAotLy8gZ2VuZXJhbCBwdXJwb3NlIGdldCAod2lsbCBjcmVhdGUsIHJldXNlIGFu
ZCBhbGwpCi1zdHJ1Y3QgUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIFJlbmRl
clRoZW1lRWZsOjpjYWNoZVRoZW1lUGFydEdldChGb3JtVHlwZSB0eXBlLCBjb25zdCBJbnRTaXpl
JiBzaXplKQorUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIFJlbmRlclRoZW1l
RWZsOjpnZXRUaGVtZVBhcnRGcm9tQ2FjaGUoRm9ybVR5cGUgdHlwZSwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKIHsKLSAgICBWZWN0b3I8c3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkgKj46Oml0ZXJh
dG9yIGl0ciwgZW5kOwotICAgIHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5ICpjZV9sYXN0X3Np
emUgPSAwOwotICAgIGludCBpLCBpZHhMYXN0U2l6ZSA9IC0xOworICAgIFZlY3RvcjxUaGVtZVBh
cnRDYWNoZUVudHJ5Kj46Oml0ZXJhdG9yIGl0LCBlbmQ7CisgICAgc2l6ZV90IGxhc3RXaXRoUmVx
dWVzdGVkU2l6ZSA9IG5vdEZvdW5kOwogCi0gICAgaXRyID0gbV9wYXJ0Q2FjaGUuYmVnaW4oKTsK
KyAgICBpdCA9IG1fcGFydENhY2hlLmJlZ2luKCk7CiAgICAgZW5kID0gbV9wYXJ0Q2FjaGUuZW5k
KCk7Ci0gICAgZm9yIChpID0gMDsgaXRyICE9IGVuZDsgaSsrLCBpdHIrKykgewotICAgICAgICBz
dHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSAqZW50cnkgPSAqaXRyOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGl0ICE9IGVuZDsgaSsrLCBpdCsrKSB7CisgICAgICAgIFRoZW1lUGFydENhY2hl
RW50cnkgKmVudHJ5ID0gKml0OwogICAgICAgICBpZiAoZW50cnktPnNpemUgPT0gc2l6ZSkgewog
ICAgICAgICAgICAgaWYgKGVudHJ5LT50eXBlID09IHR5cGUpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVudHJ5OwotICAgICAgICAgICAgY2VfbGFzdF9zaXplID0gZW50cnk7Ci0gICAgICAgICAg
ICBpZHhMYXN0U2l6ZSA9IGk7CisgICAgICAgICAgICBsYXN0V2l0aFJlcXVlc3RlZFNpemUgPSBp
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fcGFydENhY2hlLnNpemUoKSA8IFJFTkRF
Ul9USEVNRV9FRkxfUEFSVF9DQUNIRV9NQVgpCi0gICAgICAgIHJldHVybiBjYWNoZVRoZW1lUGFy
dE5ldyh0eXBlLCBzaXplKTsKKyAgICBpZiAobV9wYXJ0Q2FjaGUuc2l6ZSgpIDwgUkVOREVSX1RI
RU1FX0VGTF9QQVJUX0NBQ0hFX01BWCkgeworICAgICAgICBUaGVtZVBhcnRDYWNoZUVudHJ5KiBl
bnRyeSA9IFRoZW1lUGFydENhY2hlRW50cnk6OmNyZWF0ZShzaXplLCB0eXBlLCB0aGVtZVBhdGgo
KSk7CisgICAgICAgIG1fcGFydENhY2hlLnByZXBlbmQoZW50cnkpOworICAgICAgICByZXR1cm4g
ZW50cnk7CisgICAgfQorCisgICAgLy8gV2UgaGF2ZSBhIGZ1bGwgY2FjaGUgbm93IQogCi0gICAg
aWYgKGNlX2xhc3Rfc2l6ZSAmJiBjZV9sYXN0X3NpemUgIT0gbV9wYXJ0Q2FjaGUuZmlyc3QoKSkg
ewotICAgICAgICBtX3BhcnRDYWNoZS5yZW1vdmUoaWR4TGFzdFNpemUpOwotICAgICAgICByZXR1
cm4gY2FjaGVUaGVtZVBhcnRSZXNldCh0eXBlLCBjZV9sYXN0X3NpemUpOworICAgIGlmIChsYXN0
V2l0aFJlcXVlc3RlZFNpemUgIT0gbm90Rm91bmQgJiYgbGFzdFdpdGhSZXF1ZXN0ZWRTaXplICE9
IDEpIHsKKyAgICAgICAgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogZW50cnkgPSBtX3BhcnRDYWNoZS5h
dChsYXN0V2l0aFJlcXVlc3RlZFNpemUpOworICAgICAgICBlbnRyeS0+cmV1c2UodGhlbWVQYXRo
KCksIHR5cGUpOworICAgICAgICBtX3BhcnRDYWNoZS5yZW1vdmUobGFzdFdpdGhSZXF1ZXN0ZWRT
aXplKTsKKyAgICAgICAgbV9wYXJ0Q2FjaGUucHJlcGVuZChlbnRyeSk7CisgICAgICAgIHJldHVy
biBlbnRyeTsKICAgICB9CiAKICAgICBUaGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRyeSA9IG1fcGFy
dENhY2hlLmxhc3QoKTsKKyAgICBlbnRyeS0+cmV1c2UodGhlbWVQYXRoKCksIHR5cGUsIHNpemUp
OwogICAgIG1fcGFydENhY2hlLnJlbW92ZUxhc3QoKTsKLSAgICByZXR1cm4gY2FjaGVUaGVtZVBh
cnRSZXNpemVBbmRSZXNldCh0eXBlLCBzaXplLCBlbnRyeSk7CisgICAgbV9wYXJ0Q2FjaGUucHJl
cGVuZChlbnRyeSk7CisgICAgcmV0dXJuIGVudHJ5OwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZs
OjpjYWNoZVRoZW1lUGFydEZsdXNoKCkKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmZsdXNoVGhlbWVQ
YXJ0Q2FjaGUoKQogewotICAgIFZlY3RvcjxzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSAqPjo6
aXRlcmF0b3IgaXRyLCBlbmQ7CisgICAgVmVjdG9yPFRoZW1lUGFydENhY2hlRW50cnkqPjo6aXRl
cmF0b3IgaXQsIGVuZDsKIAotICAgIGl0ciA9IG1fcGFydENhY2hlLmJlZ2luKCk7CisgICAgaXQg
PSBtX3BhcnRDYWNoZS5iZWdpbigpOwogICAgIGVuZCA9IG1fcGFydENhY2hlLmVuZCgpOwotICAg
IGZvciAoOyBpdHIgIT0gZW5kOyBpdHIrKykgewotICAgICAgICBzdHJ1Y3QgVGhlbWVQYXJ0Q2Fj
aGVFbnRyeSAqZW50cnkgPSAqaXRyOwotICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koZW50
cnktPnN1cmZhY2UpOwotICAgICAgICBldmFzX29iamVjdF9kZWwoZW50cnktPm8pOwotICAgICAg
ICBlY29yZV9ldmFzX2ZyZWUoZW50cnktPmVlKTsKLSAgICAgICAgZGVsZXRlIGVudHJ5OwotICAg
IH0KKyAgICBmb3IgKDsgaXQgIT0gZW5kOyBpdCsrKQorICAgICAgICBkZWxldGUgKCppdCk7CisK
ICAgICBtX3BhcnRDYWNoZS5jbGVhcigpOwogfQogCkBAIC0zMjUsNyArMzQ1LDcgQEAgYm9vbCBS
ZW5kZXJUaGVtZUVmbDo6cGFpbnRUaGVtZVBhcnQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEZvcm1U
eXBlIHR5cGUsIGNvbnN0IFAKICAgICBFaW5hX0xpc3QqIHVwZGF0ZXM7CiAgICAgY2Fpcm9fdCog
Y2Fpcm87CiAKLSAgICBlbnRyeSA9IGNhY2hlVGhlbWVQYXJ0R2V0KHR5cGUsIHJlY3Quc2l6ZSgp
KTsKKyAgICBlbnRyeSA9IGdldFRoZW1lUGFydEZyb21DYWNoZSh0eXBlLCByZWN0LnNpemUoKSk7
CiAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00NjcsMjIgKzQ4
NywzMSBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjpzZXRUaGVtZVBhdGgoY29uc3QgU3RyaW5nJiBw
YXRoKQogICAgIGxvYWRUaGVtZSgpOwogfQogCitTdHJpbmcgUmVuZGVyVGhlbWVFZmw6OnRoZW1l
UGF0aCgpIGNvbnN0Cit7CisjaWYgIU5ERUJVRworICAgIGlmIChtX2VkamUpIHsKKyAgICAgICAg
Y29uc3QgY2hhciogcGF0aDsKKyAgICAgICAgZWRqZV9vYmplY3RfZmlsZV9nZXQobywgJnBhdGgs
IDApOworICAgICAgICBBU1NFUlQobV90aGVtZVBhdGggPT0gcGF0aCk7CisgICAgfQorI2VuZGlm
CisgICAgcmV0dXJuIG1fdGhlbWVQYXRoOworfQorCiBib29sIFJlbmRlclRoZW1lRWZsOjpsb2Fk
VGhlbWUoKQogewogICAgIEV2YXNfT2JqZWN0KiBvID0gZWRqZV9vYmplY3RfYWRkKGVjb3JlX2V2
YXNfZ2V0KG1fY2FudmFzKSk7CiAgICAgX0FTU0VSVF9PTl9SRUxFQVNFX1JFVFVSTl9WQUwobywg
ZmFsc2UsICJDb3VsZCBub3QgY3JlYXRlIG5ldyBiYXNlIEVkamUgb2JqZWN0LiIpOwogCi0gICAg
aWYgKCFlZGplX29iamVjdF9maWxlX3NldChvLCBtX3RoZW1lUGF0aC51dGY4KCkuZGF0YSgpLCAi
d2Via2l0L2Jhc2UiKSkgewotICAgICAgICBFZGplX0xvYWRfRXJyb3IgZXJyID0gZWRqZV9vYmpl
Y3RfbG9hZF9lcnJvcl9nZXQobyk7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGVycm1zZyA9IGVkamVf
bG9hZF9lcnJvcl9zdHIoZXJyKTsKLSAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3Qgc2V0
IGZpbGUgJyVzJzogJXMiLCBtX3RoZW1lUGF0aC51dGY4KCkuZGF0YSgpLCAgZXJybXNnKTsKKyAg
ICBpZiAoIXNldFNvdXJjZUdyb3VwRm9yRWRqZU9iamVjdChvLCBtX3RoZW1lUGF0aC51dGY4KCku
ZGF0YSgpLCAid2Via2l0L2Jhc2UiKSkgewogICAgICAgICBldmFzX29iamVjdF9kZWwobyk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gS2VlcCBjdXJyZW50IHRoZW1lLgogICAgIH0KIAogICAg
IC8vIEdldCByaWQgb2YgZXhpc3RpbmcgdGhlbWUuCiAgICAgaWYgKG1fZWRqZSkgewotICAgICAg
ICBjYWNoZVRoZW1lUGFydEZsdXNoKCk7CisgICAgICAgIGZsdXNoVGhlbWVQYXJ0Q2FjaGUoKTsK
ICAgICAgICAgZXZhc19vYmplY3RfZGVsKG1fZWRqZSk7CiAgICAgfQogCkBAIC01NjYsNzkgKzU5
NSwyNyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseVBhcnREZXNjcmlwdGlvbihFdmFzX09i
amVjdCogb2JqZWN0LCBzdHJ1Y3QgVGhlbWVQYXJ0RAogICAgIH0KIH0KIAotY29uc3QgY2hhciog
UmVuZGVyVGhlbWVFZmw6OmVkamVHcm91cEZyb21Gb3JtVHlwZShGb3JtVHlwZSB0eXBlKSBjb25z
dAotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBncm91cHNbXSA9IHsKLSNkZWZpbmUgVyhuKSAi
d2Via2l0L3dpZGdldC8ibgotICAgICAgICBXKCJidXR0b24iKSwKLSAgICAgICAgVygicmFkaW8i
KSwKLSAgICAgICAgVygiZW50cnkiKSwKLSAgICAgICAgVygiY2hlY2tib3giKSwKLSAgICAgICAg
VygiY29tYm8iKSwKLSNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSAgICAgICAgVygicHJv
Z3Jlc3NiYXIiKSwKLSNlbmRpZgotICAgICAgICBXKCJzZWFyY2gvZmllbGQiKSwKLSAgICAgICAg
Vygic2VhcmNoL2RlY29yYXRpb24iKSwKLSAgICAgICAgVygic2VhcmNoL3Jlc3VsdHNfYnV0dG9u
IiksCi0gICAgICAgIFcoInNlYXJjaC9yZXN1bHRzX2RlY29yYXRpb24iKSwKLSAgICAgICAgVygi
c2VhcmNoL2NhbmNlbF9idXR0b24iKSwKLSAgICAgICAgVygic2xpZGVyL3ZlcnRpY2FsIiksCi0g
ICAgICAgIFcoInNsaWRlci9ob3Jpem9udGFsIiksCi0gICAgICAgIFcoInNsaWRlci90aHVtYl92
ZXJ0aWNhbCIpLAotICAgICAgICBXKCJzbGlkZXIvdGh1bWJfaG9yaXpvbnRhbCIpLAotI2lmIEVO
QUJMRShWSURFTykKLSAgICAgICAgVygibWVkaWFjb250cm9sL3BsYXlwYXVzZV9idXR0b24iKSwK
LSAgICAgICAgVygibWVkaWFjb250cm9sL211dGVfYnV0dG9uIiksCi0gICAgICAgIFcoIm1lZGlh
Y29udHJvbC9zZWVrZm9yd2FyZF9idXR0b24iKSwKLSAgICAgICAgVygibWVkaWFjb250cm9sL3Nl
ZWtiYWNrd2FyZF9idXR0b24iKSwKLSAgICAgICAgVygibWVkaWFjb250cm9sL2Z1bGxzY3JlZW5f
YnV0dG9uIiksCi0jZW5kaWYKLSAgICAgICAgVygic3Bpbm5lciIpLAotI3VuZGVmIFcKLSAgICAg
ICAgMAotICAgIH07Ci0gICAgQVNTRVJUKHR5cGUgPj0gMCk7Ci0gICAgQVNTRVJUKChzaXplX3Qp
dHlwZSA8IHNpemVvZihncm91cHMpIC8gc2l6ZW9mKGdyb3Vwc1swXSkpOyAvLyBvdXQgb2Ygc3lu
Yz8KLSAgICByZXR1cm4gZ3JvdXBzW3R5cGVdOwotfQotCiB2b2lkIFJlbmRlclRoZW1lRWZsOjph
cHBseVBhcnREZXNjcmlwdGlvbnNGcm9tKEV2YXNfT2JqZWN0KiBvKQogewotICAgIEV2YXNfT2Jq
ZWN0KiBvYmplY3Q7Ci0gICAgdW5zaWduZWQgaW50IGk7Ci0gICAgY29uc3QgY2hhciogZmlsZTsK
LQogICAgIEFTU0VSVChvKTsKIAotICAgIGVkamVfb2JqZWN0X2ZpbGVfZ2V0KG8sICZmaWxlLCAw
KTsKLSAgICBBU1NFUlQoZmlsZSk7Ci0gICAgaWYgKCFmaWxlKSB7Ci0gICAgICAgIEVJTkFfTE9H
X0VSUigiQ291bGQgbm90IHJldHJpZXZlIEVkamUgdGhlbWUgZmlsZS4iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBjb25zdCBjaGFyKiBwYXRoOworICAgIGVkamVfb2JqZWN0X2ZpbGVf
Z2V0KG8sICZwYXRoLCAwKTsKKyAgICBfQVNTRVJUX09OX1JFTEVBU0VfUkVUVVJOKHBhdGgsICJD
b3VsZCBub3QgbG9hZCBFZGplIHRoZW1lIGZpbGUuIik7CiAKLSAgICBvYmplY3QgPSBlZGplX29i
amVjdF9hZGQoZWNvcmVfZXZhc19nZXQobV9jYW52YXMpKTsKLSAgICBpZiAoIW9iamVjdCkgewot
ICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBjcmVhdGUgRWRqZSBvYmplY3QuIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgRXZhc19PYmplY3QqIHRlbXAgPSBlZGplX29iamVj
dF9hZGQoZWNvcmVfZXZhc19nZXQobV9jYW52YXMpKTsKKyAgICBfQVNTRVJUX09OX1JFTEVBU0Vf
UkVUVVJOKHRlbXAsICJDb3VsZCBub3QgY3JlYXRlIEVkamUgb2JqZWN0LiIpOwogCi0gICAgZm9y
IChpID0gMDsgaSA8IEZvcm1UeXBlTGFzdDsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEZvcm1UeXBlTGFzdDsgaSsrKSB7CiAgICAgICAgIEZvcm1UeXBlIHR5cGUgPSBzdGF0
aWNfY2FzdDxGb3JtVHlwZT4oaSk7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGdyb3VwID0gZWRqZUdy
b3VwRnJvbUZvcm1UeXBlKHR5cGUpOwogICAgICAgICBtX3BhcnREZXNjc1tpXS50eXBlID0gdHlw
ZTsKLSAgICAgICAgaWYgKCFlZGplX29iamVjdF9maWxlX3NldChvYmplY3QsIGZpbGUsIGdyb3Vw
KSkgewotICAgICAgICAgICAgRWRqZV9Mb2FkX0Vycm9yIGVyciA9IGVkamVfb2JqZWN0X2xvYWRf
ZXJyb3JfZ2V0KG9iamVjdCk7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJtc2cgPSBlZGpl
X2xvYWRfZXJyb3Jfc3RyKGVycik7Ci0gICAgICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5v
dCBzZXQgdGhlbWUgZ3JvdXAgJyVzJyBvZiBmaWxlICclcyc6ICVzIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBncm91cCwgZmlsZSwgZXJybXNnKTsKLQorICAgICAgICBpZiAoIXNldFNvdXJj
ZUdyb3VwRm9yRWRqZU9iamVjdCh0ZW1wLCBwYXRoLCB0b0VkamVHcm91cCh0eXBlKSkpCiAgICAg
ICAgICAgICBhcHBseVBhcnREZXNjcmlwdGlvbkZhbGxiYWNrKG1fcGFydERlc2NzICsgaSk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYXBwbHlQYXJ0RGVzY3JpcHRpb24ob2JqZWN0LCBt
X3BhcnREZXNjcyArIGkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhcHBseVBhcnREZXNj
cmlwdGlvbih0ZW1wLCBtX3BhcnREZXNjcyArIGkpOwogICAgIH0KLSAgICBldmFzX29iamVjdF9k
ZWwob2JqZWN0KTsKKworICAgIGV2YXNfb2JqZWN0X2RlbCh0ZW1wKTsKIH0KIAogUmVuZGVyVGhl
bWVFZmw6OlJlbmRlclRoZW1lRWZsKFBhZ2UqIHBhZ2UpCkBAIC02NjEsNyArNjM4LDcgQEAgUmVu
ZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsKFBhZ2UqIHBhZ2UpCiAKIFJlbmRlclRoZW1lRWZs
Ojp+UmVuZGVyVGhlbWVFZmwoKQogewotICAgIGNhY2hlVGhlbWVQYXJ0Rmx1c2goKTsKKyAgICBm
bHVzaFRoZW1lUGFydENhY2hlKCk7CiAKICAgICBpZiAobV9jYW52YXMpIHsKICAgICAgICAgaWYg
KG1fZWRqZSkKQEAgLTEwODIsOSArMTA1OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OmVtaXRN
ZWRpYUJ1dHRvblNpZ25hbChGb3JtVHlwZSBmb3JtVHlwZSwgTWVkaWFDb250cm9sRWxlbWVuCiAg
ICAgbG9hZFRoZW1lSWZOZWVkZWQoKTsKICAgICBfQVNTRVJUX09OX1JFTEVBU0VfUkVUVVJOX1ZB
TChtX2VkamUsIGZhbHNlLCAiQ291bGQgbm90IHBhaW50IG5hdGl2ZSBIVE1MIHBhcnQgZHVlIHRv
IG1pc3NpbmcgdGhlbWUuIik7CiAKLSAgICBUaGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRyeTsKLQot
ICAgIGVudHJ5ID0gY2FjaGVUaGVtZVBhcnRHZXQoZm9ybVR5cGUsIHJlY3Quc2l6ZSgpKTsKKyAg
ICBUaGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRyeSA9IGdldFRoZW1lUGFydEZyb21DYWNoZShmb3Jt
VHlwZSwgcmVjdC5zaXplKCkpOwogICAgIF9BU1NFUlRfT05fUkVMRUFTRV9SRVRVUk5fVkFMKGVu
dHJ5LCBmYWxzZSwgIkNvdWxkIG5vdCBwYWludCBuYXRpdmUgSFRNTCBwYXJ0IGR1ZSB0byBtaXNz
aW5nIHRoZW1lIHBhcnQuIik7CiAKICAgICBpZiAobWVkaWFFbGVtZW50VHlwZSA9PSBNZWRpYVBs
YXlCdXR0b24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVy
VGhlbWVFZmwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5o
CmluZGV4IDJmNWM3YjgwMjI5YjljNDkyZjk5Zjc4ZTI2MWJmOWVlMDIzZjgyNWEuLjQxOTk2MGJj
YzNiZTQ0MWQ5MjZiYTA2NDNmYWFhZjg2M2ViNWVjMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oCkBAIC0yMDIsNyArMjAyLDcgQEAgcHVibGljOgog
I2VuZGlmCiAKICAgICB2b2lkIHNldFRoZW1lUGF0aChjb25zdCBTdHJpbmcmKTsKLSAgICBTdHJp
bmcgdGhlbWVQYXRoKCkgeyByZXR1cm4gbV90aGVtZVBhdGg7IH0KKyAgICBTdHJpbmcgdGhlbWVQ
YXRoKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgZmxvYXQgZGVmYXVsdEZvbnRT
aXplOwpAQCAtMjE2LDEwICsyMTYsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhcHBseVBhcnRE
ZXNjcmlwdGlvbnNGcm9tKEV2YXNfT2JqZWN0Kik7CiAKLSAgICBjb25zdCBjaGFyKiBlZGplR3Jv
dXBGcm9tRm9ybVR5cGUoRm9ybVR5cGUpIGNvbnN0OwogICAgIHZvaWQgYXBwbHlFZGplU3RhdGVG
cm9tRm9ybShFdmFzX09iamVjdCosIENvbnRyb2xTdGF0ZXMpOwogICAgIGJvb2wgcGFpbnRUaGVt
ZVBhcnQoUmVuZGVyT2JqZWN0KiwgRm9ybVR5cGUsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKLSAgICBib29sIGlzRm9ybUVsZW1lbnRUb29MYXJnZVRvRGlzcGxheShjb25zdCBJ
bnRTaXplJik7CiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAgYm9vbCBlbWl0TWVkaWFCdXR0b25T
aWduYWwoRm9ybVR5cGUsIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlLCBjb25zdCBJbnRSZWN0Jik7
CkBAIC0yNTIsNiArMjUwLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBseVBhcnREZXNjcmlw
dGlvbihFdmFzX09iamVjdCosIHN0cnVjdCBUaGVtZVBhcnREZXNjKik7CiAKICAgICBzdHJ1Y3Qg
VGhlbWVQYXJ0Q2FjaGVFbnRyeSB7CisgICAgICAgIFRoZW1lUGFydENhY2hlRW50cnkoKTsKKyAg
ICAgICAgflRoZW1lUGFydENhY2hlRW50cnkoKTsKKyAgICAgICAgc3RhdGljIFRoZW1lUGFydENh
Y2hlRW50cnkqIGNyZWF0ZShjb25zdCBJbnRTaXplJiwgRm9ybVR5cGUsIGNvbnN0IFN0cmluZyYg
dGhlbWVQYXRoKTsKKyAgICAgICAgdm9pZCByZXVzZShjb25zdCBTdHJpbmcmIHRoZW1lUGF0aCwg
Rm9ybVR5cGUsIGNvbnN0IEludFNpemUmIHNpemUgPSBJbnRTaXplKCkpOworCiAgICAgICAgIEZv
cm1UeXBlIHR5cGU7CiAgICAgICAgIEludFNpemUgc2l6ZTsKICAgICAgICAgRWNvcmVfRXZhcyog
ZWU7CkBAIC0yNjMsMjAgKzI2NiwxMCBAQCBwcml2YXRlOgogCiAgICAgLy8gdGhpcyBzaG91bGQg
YmUgc21hbGwgYW5kIG5vdCBzbyBmcmVxdWVudGx5IHVzZWQsCiAgICAgLy8gc28gdXNlIGEgdmVj
dG9yIGFuZCBkbyBsaW5lYXIgc2VhcmNoZXMKLSAgICBWZWN0b3I8c3RydWN0IFRoZW1lUGFydENh
Y2hlRW50cnkgKj4gbV9wYXJ0Q2FjaGU7Ci0KLSAgICAvLyBnZXQgKHVzZSwgY3JlYXRlIG9yIHJl
cGxhY2UpIGVudHJ5IGZyb20gY2FjaGUKLSAgICBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSog
Y2FjaGVUaGVtZVBhcnRHZXQoRm9ybVR5cGUsIGNvbnN0IEludFNpemUmKTsKLSAgICAvLyBmbHVz
aCBjYWNoZSwgZGVsZXRpbmcgYWxsIGVudHJpZXMKLSAgICB2b2lkIGNhY2hlVGhlbWVQYXJ0Rmx1
c2goKTsKLQotICAgIC8vIGludGVybmFsLCB1c2VkIGJ5IGNhY2hlVGhlbWVQYXJ0R2V0KCkKLSAg
ICBib29sIHRoZW1lUGFydENhY2hlRW50cnlSZXNldChzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRy
eSosIEZvcm1UeXBlKTsKLSAgICBib29sIHRoZW1lUGFydENhY2hlRW50cnlTdXJmYWNlQ3JlYXRl
KHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5Kik7Ci0gICAgc3RydWN0IFRoZW1lUGFydENhY2hl
RW50cnkqIGNhY2hlVGhlbWVQYXJ0TmV3KEZvcm1UeXBlLCBjb25zdCBJbnRTaXplJik7Ci0gICAg
c3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqIGNhY2hlVGhlbWVQYXJ0UmVzZXQoRm9ybVR5cGUs
IHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5Kik7Ci0gICAgc3RydWN0IFRoZW1lUGFydENhY2hl
RW50cnkqIGNhY2hlVGhlbWVQYXJ0UmVzaXplQW5kUmVzZXQoRm9ybVR5cGUsIGNvbnN0IEludFNp
emUmLCBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSopOworICAgIFZlY3RvcjxUaGVtZVBhcnRD
YWNoZUVudHJ5Kj4gbV9wYXJ0Q2FjaGU7CiAKKyAgICBUaGVtZVBhcnRDYWNoZUVudHJ5KiBnZXRU
aGVtZVBhcnRGcm9tQ2FjaGUoRm9ybVR5cGUsIGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIGZs
dXNoVGhlbWVQYXJ0Q2FjaGUoKTsKIH07CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163084</attachid>
            <date>2012-09-10 04:03:08 -0700</date>
            <delta_ts>2012-09-10 04:10:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96016-20120910130244.patch</filename>
            <type>text/plain</type>
            <size>27359</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MDIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTRmMjZjNGY2ZjVhYzE5
NTIxYTcyNTUzMzgzN2YyZmZhMDRiN2I1My4uZDIyMDMzODM5NGI4OWMwOWFhMTVmOWIzMGYzODYz
YjRhNzg1MmI1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNiBAQAorMjAxMi0wOS0wNiAgS2Vu
bmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
W0VGTF0gQ2xlYW4gdXAgdGhlIFJlbmRlclRoZW1lIEVkamUgY2FjaGluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTYwMTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciB0aGUgRWRqZSBwYXJ0
cyBjYWNoaW5nIHRvIGJlIGVhc2llciB0byB1bmRlcnN0YW5kIGFuZCB1c2UKKyAgICAgICAgcHJv
cGVyIEMrKyBjb25zdHJ1Y3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1l
RWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6dG9FZGplR3Jv
dXApOgorCisgICAgICAgICAgICBDb252ZXJ0cyB0aGUgZW51bSB0byB0aGUgZ2l2ZW4gZWRqZSBn
cm91cCBuYW1lLgorCisgICAgICAgIChXZWJDb3JlOjpzZXRTb3VyY2VHcm91cEZvckVkamVPYmpl
Y3QpOgorCisgICAgICAgICAgICBCYXNpY2FsbHkgYSB3cmFwcGVyIGFyb3VuZCBldmFzX29iamVj
dF9maWxlX3NldCwgYnV0IGhhbmRsZXMKKyAgICAgICAgICAgIGVycm9ycywgd2hpY2ggd2FzIGRv
bmUgc2xpZ2h0bHkgZGlmZmVyZW50bHkgYWxsIG92ZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lRWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5OjpUaGVtZVBhcnRDYWNoZUVudHJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5Ojp+
VGhlbWVQYXJ0Q2FjaGVFbnRyeSk6CisKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNhaXJvU3Vy
ZmFjZUZvcik6CisgICAgICAgIChXZWJDb3JlOjppc0Zvcm1FbGVtZW50VG9vTGFyZ2VUb0Rpc3Bs
YXkpOgorCisgICAgICAgICAgICBNZXRob2RzIHVzZWQgd2hlbiBjcmVhdGluZyBUaGVtZVBhcnRD
YWNoZUVudHJ5J2VzLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6VGhlbWVQ
YXJ0Q2FjaGVFbnRyeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZs
OjpUaGVtZVBhcnRDYWNoZUVudHJ5OjpyZXVzZSk6CisKKyAgICAgICAgICAgIE5ldyBtZXRob2Rz
IGZvciBjcmVhdGluZyBhbmQgcmV1c2luZyBhbiBjYWNoZSBlbnRyeS4gSWYgeW91IGRvCisgICAg
ICAgICAgICBub3Qgc3VwcGx5IGEgbmV3IHNpemUsIHRoZSBvcmlnaW5hbCBzaXplIHdpbGwgYmUg
dXNlZCwgYW5kIGl0IGlzCisgICAgICAgICAgICB0aHVzIG1vcmUgZWZmZWN0aXZlLgorCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6Z2V0VGhlbWVQYXJ0RnJvbUNhY2hlKToKKwor
ICAgICAgICAgICAgTmV3IG1ldGhvZCBmb3IgcmVxdWVzdGluZyBhIHRoZW1lIHBhcnQuIElmIGl0
IGRvZXNuJ3QgZXhpc3QKKyAgICAgICAgICAgIGl0IHdpbGwgYWRkaXRpbmFsbHkgYmUgbG9hZGVk
IGFuZCBhZGRlZCB0byB0aGUgY2FjaGUuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
RWZsOjpmbHVzaFRoZW1lUGFydENhY2hlKToKKworICAgICAgICAgICAgUmVtb3ZlIHRoZSBlbnRp
cmUgY2FjaGUgYW5kIGZyZWUgdGhlIGFzc2V0cy4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVFZmw6OnBhaW50VGhlbWVQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
RWZsOjp0aGVtZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmxvYWRU
aGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YXBwbHlQYXJ0RGVzY3Jp
cHRpb25zRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6flJlbmRlclRo
ZW1lRWZsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjplbWl0TWVkaWFCdXR0
b25TaWduYWwpOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oOgorICAg
ICAgICAoUmVuZGVyVGhlbWVFZmwpOgorICAgICAgICAoVGhlbWVQYXJ0Q2FjaGVFbnRyeSk6CisK
KzIwMTItMDktMDUgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQu
b3JnPgorCisgICAgICAgIFtFRkxdIEZ1enp5IGxvYWQgdGhlIEVkamUgdGhlbWUgZm9yIEhUTUwg
Zm9ybXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1
ODMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hh
bmdlIHRoZSB0aGVtZSBzbyB0aGF0IGl0IGlzIGZpcnN0IGxvYWRlZCB3aGVuIGFjdHVhbGx5IHVz
ZWQuCisgICAgICAgIFRoaXMgYWxzbyBmaXhlZCB0aGUgY2FzZSB0aGF0IGl0IHdhcyBpbXBvc3Np
YmxlIHRvIGNoYW5nZSB0aGVtZQorICAgICAgICBhIHNlY29uZCB0aW1lLgorCisgICAgICAgIFRl
c3RlZCBieSBjdXJyZW50IHRlc3RzLiBBUEkgdW5pdCB0ZXN0IGNvbWluZyBpbiBzZXBhcmF0ZSBw
YXRjaC4KKworICAgICAgICAqIHBsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKworICAgICAgICAgICAgQWRkIHNvbWUgY29udmVuaWVuY2UgbWFjcm9z
LgorCisgICAgICAgKFdlYkNvcmU6OmFwcGx5Q29sb3JDYWxsYmFjayk6CisKKyAgICAgICAgICAg
IFVzZSBqdXN0IG9uZSBjYWxsYmFjayBmcm9tIHRoZSBlZGplIHRoZW1lLCB3aGljaCBqdXN0IGNh
bGxzCisgICAgICAgICAgICBzZXRDb2xvckZyb21UaGVtZUNsYXNzLgorCisgICAgICAgIChXZWJD
b3JlOjpmaWxsQ29sb3JzRnJvbUVkamVDbGFzcyk6CisKKyAgICAgICAgICAgIEFkZCBjb252ZW5p
ZW5jZSBtZXRob2QgZm9yIHJlY2VpdmluZyBjb2xvcnMgZnJvbSBFZGplIGFuZAorICAgICAgICAg
ICAgc3RvcmluZyB0aGVtIGluIENvbG9yJ3MuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lRWZsOjpzZXRDb2xvckZyb21UaGVtZUNsYXNzKToKKworICAgICAgICAgICAgU2V0IHRoZSBj
bGFzcyBDb2xvciB2YXJpYWJsZWQgd2l0aCB0aGUgdmFsdWVzIGZyb20gdGhlIHRoZW1lCisgICAg
ICAgICAgICBjb2xvciBjbGFzcy4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6
OnNldFRoZW1lUGF0aCk6CisKKyAgICAgICAgICAgIERvbid0IGFwcGx5IHRoZSB0aGVtZSBpbW1l
ZGlhdGVseS4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmxvYWRUaGVtZSk6
CisKKyAgICAgICAgICAgIExvYWQgdGhlIG5ldyB0aGVtZSBhbmQgZnJlZSB0aGUgY3VycmVudCBv
bmUuIElmIGl0IGZhaWxzLAorICAgICAgICAgICAgaXQgd2lsbCBjb250aW51ZSB1c2luZyB0aGUg
b2xkIG9uZSwgaWYgZXhpc3RzLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0U2l6ZUNvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZs
Ojp0aGVtZVBhcnRDYWNoZUVudHJ5UmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVFZmw6OmNhY2hlVGhlbWVQYXJ0TmV3KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
RWZsOjpwYWludFRoZW1lUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6
YXBwbHlQYXJ0RGVzY3JpcHRpb25zRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUVmbDo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OnBsYXRmb3JtQWN0
aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lRWZsOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjpwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKToKKwor
ICAgICAgICAgICAgRW5zdXJlIHRoZSB0aGVtZSBpcyBsb2FkZWQuCisKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lRWZsOjphZGp1c3RDaGVja2JveFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lRWZsOjphZGp1c3RSYWRpb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lRWZsOjplbWl0TWVkaWFCdXR0b25TaWduYWwpOgorCisgICAgICAgICAgICBF
bnN1cmUgdGhlIHRoZW1lIGlzIGxvYWRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2VmbC9SZW5k
ZXJUaGVtZUVmbC5oOgorICAgICAgICAoUmVuZGVyVGhlbWVFZmwpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVFZmw6OmxvYWRUaGVtZUlmTmVlZGVkKToKKworICAgICAgICAgICAgUmVt
b3ZlIHVubmVlZGVkIG1ldGhvZHMgYW5kIGFkZCBhIG1ldGhvZCBmb3IgbG9hZGluZyBhIHRoZW1l
CisgICAgICAgICAgICBpbiB0aGUgY2FzZSBpdCBpcyBub3QgbG9hZGVkIHlldC4KKwogMjAxMi0w
OS0wOSAgVGFpanUgVHN1aWtpICA8dHppa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgc3VjY2Vz
c0NhbGxiYWNrIG9mIFJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwgc2hvdWxkIG5vdCBiZSBvcHRp
b25hbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVt
ZUVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3Bw
CmluZGV4IDQ4N2Y0MTA1ZDVhN2VkMzVmMDc3ODQyOGE4MzQ2MGM4YTdmYWNkZDQuLmEzNTIxYjZm
ZmRlMWRhZTg4YTNjMGExZTk5NDE2OGQ0MGZmOTQ5MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcApAQCAtODQsMTEgKzg0LDYzIEBAIHN0YXRp
YyBjb25zdCBpbnQgbWVkaWFTbGlkZXJUaHVtYkhlaWdodCA9IDEyOwogI2RlZmluZSBfQVNTRVJU
X09OX1JFTEVBU0VfUkVUVVJOX1ZBTChvLCB2YWwsIGZtdCwgLi4uKSBcCiAgICAgZG8geyBpZiAo
IW8pIHsgRUlOQV9MT0dfQ1JJVChmbXQsICMjIF9fVkFfQVJHU19fKTsgQVNTRVJUKG8pOyByZXR1
cm4gdmFsOyB9IH0gd2hpbGUgKDApCiAKKworc3RhdGljIGNvbnN0IGNoYXIqIHRvRWRqZUdyb3Vw
KEZvcm1UeXBlIHR5cGUpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGdyb3Vwc1tdID0gewor
I2RlZmluZSBXKG4pICJ3ZWJraXQvd2lkZ2V0LyJuCisgICAgICAgIFcoImJ1dHRvbiIpLAorICAg
ICAgICBXKCJyYWRpbyIpLAorICAgICAgICBXKCJlbnRyeSIpLAorICAgICAgICBXKCJjaGVja2Jv
eCIpLAorICAgICAgICBXKCJjb21ibyIpLAorI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQor
ICAgICAgICBXKCJwcm9ncmVzc2JhciIpLAorI2VuZGlmCisgICAgICAgIFcoInNlYXJjaC9maWVs
ZCIpLAorICAgICAgICBXKCJzZWFyY2gvZGVjb3JhdGlvbiIpLAorICAgICAgICBXKCJzZWFyY2gv
cmVzdWx0c19idXR0b24iKSwKKyAgICAgICAgVygic2VhcmNoL3Jlc3VsdHNfZGVjb3JhdGlvbiIp
LAorICAgICAgICBXKCJzZWFyY2gvY2FuY2VsX2J1dHRvbiIpLAorICAgICAgICBXKCJzbGlkZXIv
dmVydGljYWwiKSwKKyAgICAgICAgVygic2xpZGVyL2hvcml6b250YWwiKSwKKyAgICAgICAgVygi
c2xpZGVyL3RodW1iX3ZlcnRpY2FsIiksCisgICAgICAgIFcoInNsaWRlci90aHVtYl9ob3Jpem9u
dGFsIiksCisjaWYgRU5BQkxFKFZJREVPKQorICAgICAgICBXKCJtZWRpYWNvbnRyb2wvcGxheXBh
dXNlX2J1dHRvbiIpLAorICAgICAgICBXKCJtZWRpYWNvbnRyb2wvbXV0ZV9idXR0b24iKSwKKyAg
ICAgICAgVygibWVkaWFjb250cm9sL3NlZWtmb3J3YXJkX2J1dHRvbiIpLAorICAgICAgICBXKCJt
ZWRpYWNvbnRyb2wvc2Vla2JhY2t3YXJkX2J1dHRvbiIpLAorICAgICAgICBXKCJtZWRpYWNvbnRy
b2wvZnVsbHNjcmVlbl9idXR0b24iKSwKKyNlbmRpZgorICAgICAgICBXKCJzcGlubmVyIiksCisj
dW5kZWYgVworICAgICAgICAwCisgICAgfTsKKyAgICBBU1NFUlQodHlwZSA+PSAwKTsKKyAgICBB
U1NFUlQoKHNpemVfdCl0eXBlIDwgc2l6ZW9mKGdyb3VwcykgLyBzaXplb2YoZ3JvdXBzWzBdKSk7
IC8vIG91dCBvZiBzeW5jPworICAgIHJldHVybiBncm91cHNbdHlwZV07Cit9CisKK3N0YXRpYyBi
b29sIHNldFNvdXJjZUdyb3VwRm9yRWRqZU9iamVjdChFdmFzX09iamVjdCogbywgY29uc3QgU3Ry
aW5nJiB0aGVtZVBhdGgsIGNvbnN0IGNoYXIqIGdyb3VwKQoreworICAgIEFTU0VSVChvKTsKKyAg
ICBBU1NFUlQoIXRoZW1lUGF0aC5pc0VtcHR5KCkpOworCisgICAgaWYgKCFlZGplX29iamVjdF9m
aWxlX3NldChvLCB0aGVtZVBhdGgudXRmOCgpLmRhdGEoKSwgZ3JvdXApKSB7CisgICAgICAgIGNv
bnN0IGNoYXIqIG1lc3NhZ2UgPSBlZGplX2xvYWRfZXJyb3Jfc3RyKGVkamVfb2JqZWN0X2xvYWRf
ZXJyb3JfZ2V0KG8pKTsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3Qgc2V0IHRoZW1l
IGdyb3VwICclcycgb2YgZmlsZSAnJXMnOiAlcyIsIGdyb3VwLCB0aGVtZVBhdGgudXRmOCgpLmRh
dGEoKSwgbWVzc2FnZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwogdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2l6ZUNvbnN0cmFpbnRz
KFJlbmRlclN0eWxlKiBzdHlsZSwgRm9ybVR5cGUgdHlwZSkgY29uc3QKIHsKICAgICBsb2FkVGhl
bWVJZk5lZWRlZCgpOwotICAgIF9BU1NFUlRfT05fUkVMRUFTRV9SRVRVUk4obV9lZGplLCAiQ291
bGQgbm90IHBhaW50IG5hdGl2ZSBIVE1MIHBhcnQgZHVlIHRvIG1pc3NpbmcgdGhlbWUuIik7CiAK
KyAgICAvLyBUaGVzZSBhcmUgYWx3YXlzIHZhbGlkLCBldmVuIGlmIG5vIHRoZW1lIGNvdWxkIGJl
IGxvYWRlZC4KICAgICBjb25zdCBzdHJ1Y3QgVGhlbWVQYXJ0RGVzYyogZGVzYyA9IG1fcGFydERl
c2NzICsgKHNpemVfdCl0eXBlOwogCiAgICAgaWYgKHN0eWxlLT5taW5XaWR0aCgpLmlzSW50cmlu
c2ljKCkpCkBAIC0xMDcsNTIgKzE1OSw0MiBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RT
aXplQ29uc3RyYWludHMoUmVuZGVyU3R5bGUqIHN0eWxlLCBGb3JtVHlwZSB0eXBlKSBjbwogICAg
IHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoZGVzYy0+cGFkZGluZy5yaWdodCgpKTsKIH0KIAotYm9v
bCBSZW5kZXJUaGVtZUVmbDo6dGhlbWVQYXJ0Q2FjaGVFbnRyeVJlc2V0KHN0cnVjdCBUaGVtZVBh
cnRDYWNoZUVudHJ5KiBlbnRyeSwgRm9ybVR5cGUgdHlwZSkKK1JlbmRlclRoZW1lRWZsOjpUaGVt
ZVBhcnRDYWNoZUVudHJ5OjpUaGVtZVBhcnRDYWNoZUVudHJ5KCkKKyAgICA6IGVlKDApLCBvKDAp
LCBzdXJmYWNlKDApCiB7Ci0gICAgY29uc3QgY2hhciAqZmlsZSwgKmdyb3VwOwotCi0gICAgQVNT
RVJUKGVudHJ5KTsKLSAgICBBU1NFUlQobV9lZGplKTsKLQotICAgIGVkamVfb2JqZWN0X2ZpbGVf
Z2V0KG1fZWRqZSwgJmZpbGUsIDApOwotICAgIGdyb3VwID0gZWRqZUdyb3VwRnJvbUZvcm1UeXBl
KHR5cGUpOwotICAgIEFTU0VSVChmaWxlKTsKLSAgICBBU1NFUlQoZ3JvdXApOworfQogCi0gICAg
aWYgKCFlZGplX29iamVjdF9maWxlX3NldChlbnRyeS0+bywgZmlsZSwgZ3JvdXApKSB7Ci0gICAg
ICAgIEVkamVfTG9hZF9FcnJvciBlcnIgPSBlZGplX29iamVjdF9sb2FkX2Vycm9yX2dldChlbnRy
eS0+byk7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmVycm1zZyA9IGVkamVfbG9hZF9lcnJvcl9zdHIo
ZXJyKTsKLSAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgbG9hZCAnJXMnIGZyb20gdGhl
bWUgJXM6ICVzIiwgZ3JvdXAsIGZpbGUsIGVycm1zZyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7CitSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVF
bnRyeTo6flRoZW1lUGFydENhY2hlRW50cnkoKQoreworICAgIGlmIChzdXJmYWNlKQorICAgICAg
ICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7CisgICAgaWYgKG8pCisgICAgICAgIGV2
YXNfb2JqZWN0X2RlbChvKTsKKyAgICBpZiAoZWUpCisgICAgICAgIGVjb3JlX2V2YXNfZnJlZShl
ZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnRoZW1lUGFydENhY2hlRW50cnlTdXJmYWNl
Q3JlYXRlKHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRyeSkKK3N0YXRpYyBjYWlyb19z
dXJmYWNlX3QqIGNyZWF0ZUNhaXJvU3VyZmFjZUZvcihFY29yZV9FdmFzKiBlZSkKIHsKLSAgICBp
bnQgdywgaDsKLSAgICBjYWlyb19zdGF0dXNfdCBzdGF0dXM7CisgICAgQVNTRVJUKGVlKTsKIAot
ICAgIEFTU0VSVChlbnRyeSk7Ci0gICAgQVNTRVJUKGVudHJ5LT5lZSk7CisgICAgaW50IHdpZHRo
LCBoZWlnaHQ7CisgICAgZWNvcmVfZXZhc19nZW9tZXRyeV9nZXQoZWUsIDAsIDAsICZ3aWR0aCwg
JmhlaWdodCk7CisgICAgQVNTRVJUKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTsKIAotICAgIGVj
b3JlX2V2YXNfZ2VvbWV0cnlfZ2V0KGVudHJ5LT5lZSwgMCwgMCwgJncsICZoKTsKLSAgICBBU1NF
UlQodyA+IDApOwotICAgIEFTU0VSVChoID4gMCk7CisgICAgdW5zaWduZWQgY2hhciogYnVmZmVy
ID0gKHVuc2lnbmVkIGNoYXIqKShlY29yZV9ldmFzX2J1ZmZlcl9waXhlbHNfZ2V0KGVlKSk7Cisg
ICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVf
Zm9yX2RhdGEoYnVmZmVyLCBDQUlST19GT1JNQVRfQVJHQjMyLCB3aWR0aCwgaGVpZ2h0LCB3aWR0
aCAqIDQpOwogCi0gICAgZW50cnktPnN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0
ZV9mb3JfZGF0YSgodW5zaWduZWQgY2hhciAqKWVjb3JlX2V2YXNfYnVmZmVyX3BpeGVsc19nZXQo
ZW50cnktPmVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHcsIGgsIHcgKiA0KTsKLSAgICBzdGF0dXMg
PSBjYWlyb19zdXJmYWNlX3N0YXR1cyhlbnRyeS0+c3VyZmFjZSk7CisgICAgY2Fpcm9fc3RhdHVz
X3Qgc3RhdHVzID0gY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSk7CiAgICAgaWYgKHN0YXR1
cyAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykgewotICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxk
IG5vdCBjcmVhdGUgY2Fpcm8gc3VyZmFjZTogJXMiLAotICAgICAgICAgICAgICAgICAgICAgY2Fp
cm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0dXMpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBjcmVhdGUgY2Fpcm8gc3VyZmFjZTogJXMiLCBj
YWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOworICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3VyZmFjZTsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZUVmbDo6aXNGb3JtRWxlbWVudFRvb0xhcmdlVG9EaXNwbGF5KGNvbnN0IEludFNpemUm
IGVsZW1lbnRTaXplKQorc3RhdGljIGJvb2wgaXNGb3JtRWxlbWVudFRvb0xhcmdlVG9EaXNwbGF5
KGNvbnN0IEludFNpemUmIGVsZW1lbnRTaXplKQogewogICAgIC8vIFRoaXMgbGltaXQgb2YgMjAw
MDAgcGl4ZWxzIGlzIGhhcmRjb2RlZCBpbnNpZGUgZWRqZSAtLSBhbnl0aGluZyBhYm92ZSB0aGlz
IHNpemUKICAgICAvLyB3aWxsIGJlIGNsaXBwZWQuIFRoaXMgdmFsdWUgc2VlbXMgdG8gYmUgcmVh
c29uYWJsZSBlbm91Z2ggc28gdGhhdCBoYXJkY29kaW5nIGl0CkBAIC0xNjIsMjUgKzIwNCwyMSBA
QCBib29sIFJlbmRlclRoZW1lRWZsOjppc0Zvcm1FbGVtZW50VG9vTGFyZ2VUb0Rpc3BsYXkoY29u
c3QgSW50U2l6ZSYgZWxlbWVudFNpemUpCiAgICAgcmV0dXJuIGVsZW1lbnRTaXplLndpZHRoKCkg
PiBtYXhFZGplRGltZW5zaW9uIHx8IGVsZW1lbnRTaXplLmhlaWdodCgpID4gbWF4RWRqZURpbWVu
c2lvbjsKIH0KIAotLy8gYWxsb2NhdGUgYSBuZXcgZW50cnkgYW5kIGZpbGwgaXQgd2l0aCBlZGpl
IGdyb3VwCi1zdHJ1Y3QgUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIFJlbmRl
clRoZW1lRWZsOjpjYWNoZVRoZW1lUGFydE5ldyhGb3JtVHlwZSB0eXBlLCBjb25zdCBJbnRTaXpl
JiBzaXplKQorUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIFJlbmRlclRoZW1l
RWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5OjpjcmVhdGUoY29uc3QgU3RyaW5nJiB0aGVtZVBhdGgs
IEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFNpemUmIHNpemUpCiB7CisgICAgQVNTRVJUKCF0aGVt
ZVBhdGguaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIXNpemUuaXNFbXB0eSgpKTsKKwogICAgIGlm
IChpc0Zvcm1FbGVtZW50VG9vTGFyZ2VUb0Rpc3BsYXkoc2l6ZSkpIHsKICAgICAgICAgRUlOQV9M
T0dfRVJSKCJDYW5ub3QgcmVuZGVyIGFuIGVsZW1lbnQgb2Ygc2l6ZSAlZHglZC4iLCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBU
aGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRyeSA9IG5ldyBUaGVtZVBhcnRDYWNoZUVudHJ5OwotICAg
IGlmICghZW50cnkpIHsKLSAgICAgICAgRUlOQV9MT0dfRVJSKCJjb3VsZCBub3QgYWxsb2NhdGUg
VGhlbWVQYXJ0Q2FjaGVFbnRyeS4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIE93
blB0cjxUaGVtZVBhcnRDYWNoZUVudHJ5Kj4gZW50cnkgPSBhZG9wdFB0cihuZXcgVGhlbWVQYXJ0
Q2FjaGVFbnRyeSk7CiAKICAgICBlbnRyeS0+ZWUgPSBlY29yZV9ldmFzX2J1ZmZlcl9uZXcoc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICBpZiAoIWVudHJ5LT5lZSkgewotICAgICAg
ICBFSU5BX0xPR19FUlIoImVjb3JlX2V2YXNfYnVmZmVyX25ldyglZCwgJWQpIGZhaWxlZC4iLAot
ICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLSAgICAg
ICAgZGVsZXRlIGVudHJ5OworICAgICAgICBFSU5BX0xPR19FUlIoImVjb3JlX2V2YXNfYnVmZmVy
X25ldyglZCwgJWQpIGZhaWxlZC4iLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTE4OSwxOSArMjI3LDEzIEBAIHN0cnVjdCBSZW5k
ZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeSogUmVuZGVyVGhlbWVFZmw6OmNhY2hlVGhl
bWVQYXJ0TmV3KEZvCiAKICAgICBlbnRyeS0+byA9IGVkamVfb2JqZWN0X2FkZChlY29yZV9ldmFz
X2dldChlbnRyeS0+ZWUpKTsKICAgICBBU1NFUlQoZW50cnktPm8pOwotICAgIGlmICghdGhlbWVQ
YXJ0Q2FjaGVFbnRyeVJlc2V0KGVudHJ5LCB0eXBlKSkgewotICAgICAgICBldmFzX29iamVjdF9k
ZWwoZW50cnktPm8pOwotICAgICAgICBlY29yZV9ldmFzX2ZyZWUoZW50cnktPmVlKTsKLSAgICAg
ICAgZGVsZXRlIGVudHJ5OworCisgICAgaWYgKCFzZXRTb3VyY2VHcm91cEZvckVkamVPYmplY3Qo
ZW50cnktPm8sIHRoZW1lUGF0aCwgdG9FZGplR3JvdXAodHlwZSkpKQogICAgICAgICByZXR1cm4g
MDsKLSAgICB9CiAKLSAgICBpZiAoIXRoZW1lUGFydENhY2hlRW50cnlTdXJmYWNlQ3JlYXRlKGVu
dHJ5KSkgewotICAgICAgICBldmFzX29iamVjdF9kZWwoZW50cnktPm8pOwotICAgICAgICBlY29y
ZV9ldmFzX2ZyZWUoZW50cnktPmVlKTsKLSAgICAgICAgZGVsZXRlIGVudHJ5OworICAgIGVudHJ5
LT5zdXJmYWNlID0gY3JlYXRlQ2Fpcm9TdXJmYWNlRm9yKGVudHJ5LT5lZSk7CisgICAgaWYgKCFl
bnRyeS0+c3VyZmFjZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogCiAgICAgZXZhc19vYmpl
Y3RfcmVzaXplKGVudHJ5LT5vLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogICAgIGV2
YXNfb2JqZWN0X3Nob3coZW50cnktPm8pOwpAQCAtMjA5LDg3ICsyNDEsODMgQEAgc3RydWN0IFJl
bmRlclRoZW1lRWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5KiBSZW5kZXJUaGVtZUVmbDo6Y2FjaGVU
aGVtZVBhcnROZXcoRm8KICAgICBlbnRyeS0+dHlwZSA9IHR5cGU7CiAgICAgZW50cnktPnNpemUg
PSBzaXplOwogCi0gICAgbV9wYXJ0Q2FjaGUucHJlcGVuZChlbnRyeSk7Ci0gICAgcmV0dXJuIGVu
dHJ5OworICAgIHJldHVybiBlbnRyeS5sZWFrUHRyKCk7CiB9CiAKLS8vIGp1c3QgY2hhbmdlIHRo
ZSBlZGplIGdyb3VwIGFuZCByZXR1cm4gdGhlIHNhbWUgZW50cnkKLXN0cnVjdCBSZW5kZXJUaGVt
ZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeSogUmVuZGVyVGhlbWVFZmw6OmNhY2hlVGhlbWVQYXJ0
UmVzZXQoRm9ybVR5cGUgdHlwZSwgc3RydWN0IFJlbmRlclRoZW1lRWZsOjpUaGVtZVBhcnRDYWNo
ZUVudHJ5KiBlbnRyeSkKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnk6
OnJldXNlKGNvbnN0IFN0cmluZyYgdGhlbWVQYXRoLCBGb3JtVHlwZSBuZXdUeXBlLCBjb25zdCBJ
bnRTaXplJiBuZXdTaXplKQogewotICAgIGlmICghdGhlbWVQYXJ0Q2FjaGVFbnRyeVJlc2V0KGVu
dHJ5LCB0eXBlKSkgewotICAgICAgICBlbnRyeS0+dHlwZSA9IEZvcm1UeXBlTGFzdDsgLy8gaW52
YWxpZGF0ZQotICAgICAgICBtX3BhcnRDYWNoZS5hcHBlbmQoZW50cnkpOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgZW50cnktPnR5cGUgPSB0eXBlOwotICAgIG1fcGFydENhY2hlLnBy
ZXBlbmQoZW50cnkpOwotICAgIHJldHVybiBlbnRyeTsKLX0KKyAgICBBU1NFUlQoIXRoZW1lUGF0
aC5pc0VtcHR5KCkpOwogCi0vLyByZXNpemUgZW50cnkgYW5kIHJlc2V0IGl0Ci1zdHJ1Y3QgUmVu
ZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIFJlbmRlclRoZW1lRWZsOjpjYWNoZVRo
ZW1lUGFydFJlc2l6ZUFuZFJlc2V0KEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFNpemUmIHNpemUs
IHN0cnVjdCBSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeSogZW50cnkpCi17Ci0g
ICAgY2Fpcm9fc3VyZmFjZV9maW5pc2goZW50cnktPnN1cmZhY2UpOworICAgIGlmICghbmV3U2l6
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgY2Fpcm9fc3VyZmFjZV9maW5pc2goc3VyZmFjZSk7CiAK
LSAgICBlbnRyeS0+c2l6ZSA9IHNpemU7Ci0gICAgZWNvcmVfZXZhc19yZXNpemUoZW50cnktPmVl
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShl
bnRyeS0+bywgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgc2l6ZSA9IG5l
d1NpemU7CisgICAgICAgIGVjb3JlX2V2YXNfcmVzaXplKGVlLCBuZXdTaXplLndpZHRoKCksIG5l
d1NpemUuaGVpZ2h0KCkpOworICAgICAgICBldmFzX29iamVjdF9yZXNpemUobywgbmV3U2l6ZS53
aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpKTsKIAotICAgIGlmICghdGhlbWVQYXJ0Q2FjaGVFbnRy
eVN1cmZhY2VDcmVhdGUoZW50cnkpKSB7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2RlbChlbnRyeS0+
byk7Ci0gICAgICAgIGVjb3JlX2V2YXNfZnJlZShlbnRyeS0+ZWUpOwotICAgICAgICBkZWxldGUg
ZW50cnk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBzdXJmYWNlID0gY3JlYXRlQ2Fpcm9T
dXJmYWNlRm9yKGVlKTsKKyAgICAgICAgaWYgKCFzdXJmYWNlKSB7CisgICAgICAgICAgICB0eXBl
ID0gRm9ybVR5cGVMYXN0OyAvLyBJbnZhbGlkYXRlOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIGNhY2hlVGhlbWVQYXJ0UmVzZXQodHlwZSwgZW50
cnkpOworICAgIGlmICghc2V0U291cmNlR3JvdXBGb3JFZGplT2JqZWN0KG8sIHRoZW1lUGF0aCwg
dG9FZGplR3JvdXAobmV3VHlwZSkpKSB7CisgICAgICAgIHR5cGUgPSBGb3JtVHlwZUxhc3Q7IC8v
IEludmFsaWRhdGUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0eXBlID0gbmV3VHlw
ZTsKIH0KIAotLy8gZ2VuZXJhbCBwdXJwb3NlIGdldCAod2lsbCBjcmVhdGUsIHJldXNlIGFuZCBh
bGwpCi1zdHJ1Y3QgUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIFJlbmRlclRo
ZW1lRWZsOjpjYWNoZVRoZW1lUGFydEdldChGb3JtVHlwZSB0eXBlLCBjb25zdCBJbnRTaXplJiBz
aXplKQorUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIFJlbmRlclRoZW1lRWZs
OjpnZXRUaGVtZVBhcnRGcm9tQ2FjaGUoRm9ybVR5cGUgdHlwZSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKIHsKLSAgICBWZWN0b3I8c3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkgKj46Oml0ZXJhdG9y
IGl0ciwgZW5kOwotICAgIHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5ICpjZV9sYXN0X3NpemUg
PSAwOwotICAgIGludCBpLCBpZHhMYXN0U2l6ZSA9IC0xOworICAgIFZlY3RvcjxUaGVtZVBhcnRD
YWNoZUVudHJ5Kj46Oml0ZXJhdG9yIGl0LCBlbmQ7CisgICAgc2l6ZV90IGxhc3RXaXRoUmVxdWVz
dGVkU2l6ZSA9IG5vdEZvdW5kOwogCi0gICAgaXRyID0gbV9wYXJ0Q2FjaGUuYmVnaW4oKTsKKyAg
ICBpdCA9IG1fcGFydENhY2hlLmJlZ2luKCk7CiAgICAgZW5kID0gbV9wYXJ0Q2FjaGUuZW5kKCk7
Ci0gICAgZm9yIChpID0gMDsgaXRyICE9IGVuZDsgaSsrLCBpdHIrKykgewotICAgICAgICBzdHJ1
Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSAqZW50cnkgPSAqaXRyOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGl0ICE9IGVuZDsgaSsrLCBpdCsrKSB7CisgICAgICAgIFRoZW1lUGFydENhY2hlRW50
cnkgKmVudHJ5ID0gKml0OwogICAgICAgICBpZiAoZW50cnktPnNpemUgPT0gc2l6ZSkgewogICAg
ICAgICAgICAgaWYgKGVudHJ5LT50eXBlID09IHR5cGUpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVudHJ5OwotICAgICAgICAgICAgY2VfbGFzdF9zaXplID0gZW50cnk7Ci0gICAgICAgICAgICBp
ZHhMYXN0U2l6ZSA9IGk7CisgICAgICAgICAgICBsYXN0V2l0aFJlcXVlc3RlZFNpemUgPSBpOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fcGFydENhY2hlLnNpemUoKSA8IFJFTkRFUl9U
SEVNRV9FRkxfUEFSVF9DQUNIRV9NQVgpCi0gICAgICAgIHJldHVybiBjYWNoZVRoZW1lUGFydE5l
dyh0eXBlLCBzaXplKTsKKyAgICBpZiAobV9wYXJ0Q2FjaGUuc2l6ZSgpIDwgUkVOREVSX1RIRU1F
X0VGTF9QQVJUX0NBQ0hFX01BWCkgeworICAgICAgICBUaGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRy
eSA9IFRoZW1lUGFydENhY2hlRW50cnk6OmNyZWF0ZSh0aGVtZVBhdGgoKSwgdHlwZSwgc2l6ZSk7
CisgICAgICAgIG1fcGFydENhY2hlLnByZXBlbmQoZW50cnkpOworICAgICAgICByZXR1cm4gZW50
cnk7CisgICAgfQorCisgICAgLy8gV2UgaGF2ZSBhIGZ1bGwgY2FjaGUgbm93IQogCi0gICAgaWYg
KGNlX2xhc3Rfc2l6ZSAmJiBjZV9sYXN0X3NpemUgIT0gbV9wYXJ0Q2FjaGUuZmlyc3QoKSkgewot
ICAgICAgICBtX3BhcnRDYWNoZS5yZW1vdmUoaWR4TGFzdFNpemUpOwotICAgICAgICByZXR1cm4g
Y2FjaGVUaGVtZVBhcnRSZXNldCh0eXBlLCBjZV9sYXN0X3NpemUpOworICAgIGlmIChsYXN0V2l0
aFJlcXVlc3RlZFNpemUgIT0gbm90Rm91bmQgJiYgbGFzdFdpdGhSZXF1ZXN0ZWRTaXplICE9IDEp
IHsKKyAgICAgICAgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogZW50cnkgPSBtX3BhcnRDYWNoZS5hdChs
YXN0V2l0aFJlcXVlc3RlZFNpemUpOworICAgICAgICBlbnRyeS0+cmV1c2UodGhlbWVQYXRoKCks
IHR5cGUpOworICAgICAgICBtX3BhcnRDYWNoZS5yZW1vdmUobGFzdFdpdGhSZXF1ZXN0ZWRTaXpl
KTsKKyAgICAgICAgbV9wYXJ0Q2FjaGUucHJlcGVuZChlbnRyeSk7CisgICAgICAgIHJldHVybiBl
bnRyeTsKICAgICB9CiAKICAgICBUaGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRyeSA9IG1fcGFydENh
Y2hlLmxhc3QoKTsKKyAgICBlbnRyeS0+cmV1c2UodGhlbWVQYXRoKCksIHR5cGUsIHNpemUpOwog
ICAgIG1fcGFydENhY2hlLnJlbW92ZUxhc3QoKTsKLSAgICByZXR1cm4gY2FjaGVUaGVtZVBhcnRS
ZXNpemVBbmRSZXNldCh0eXBlLCBzaXplLCBlbnRyeSk7CisgICAgbV9wYXJ0Q2FjaGUucHJlcGVu
ZChlbnRyeSk7CisgICAgcmV0dXJuIGVudHJ5OwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjpj
YWNoZVRoZW1lUGFydEZsdXNoKCkKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmZsdXNoVGhlbWVQYXJ0
Q2FjaGUoKQogewotICAgIFZlY3RvcjxzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSAqPjo6aXRl
cmF0b3IgaXRyLCBlbmQ7CisgICAgVmVjdG9yPFRoZW1lUGFydENhY2hlRW50cnkqPjo6aXRlcmF0
b3IgaXQsIGVuZDsKIAotICAgIGl0ciA9IG1fcGFydENhY2hlLmJlZ2luKCk7CisgICAgaXQgPSBt
X3BhcnRDYWNoZS5iZWdpbigpOwogICAgIGVuZCA9IG1fcGFydENhY2hlLmVuZCgpOwotICAgIGZv
ciAoOyBpdHIgIT0gZW5kOyBpdHIrKykgewotICAgICAgICBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVF
bnRyeSAqZW50cnkgPSAqaXRyOwotICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koZW50cnkt
PnN1cmZhY2UpOwotICAgICAgICBldmFzX29iamVjdF9kZWwoZW50cnktPm8pOwotICAgICAgICBl
Y29yZV9ldmFzX2ZyZWUoZW50cnktPmVlKTsKLSAgICAgICAgZGVsZXRlIGVudHJ5OwotICAgIH0K
KyAgICBmb3IgKDsgaXQgIT0gZW5kOyBpdCsrKQorICAgICAgICBkZWxldGUgKCppdCk7CisKICAg
ICBtX3BhcnRDYWNoZS5jbGVhcigpOwogfQogCkBAIC0zMjUsNyArMzUzLDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZUVmbDo6cGFpbnRUaGVtZVBhcnQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEZvcm1UeXBl
IHR5cGUsIGNvbnN0IFAKICAgICBFaW5hX0xpc3QqIHVwZGF0ZXM7CiAgICAgY2Fpcm9fdCogY2Fp
cm87CiAKLSAgICBlbnRyeSA9IGNhY2hlVGhlbWVQYXJ0R2V0KHR5cGUsIHJlY3Quc2l6ZSgpKTsK
KyAgICBlbnRyeSA9IGdldFRoZW1lUGFydEZyb21DYWNoZSh0eXBlLCByZWN0LnNpemUoKSk7CiAg
ICAgaWYgKCFlbnRyeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00NTEsMzggKzQ3OSw0
OSBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjpzZXRUaGVtZVBhdGgoY29uc3QgU3RyaW5nJiBwYXRo
KQogICAgIGlmIChwYXRoID09IG1fdGhlbWVQYXRoKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X3RoZW1lUGF0aCA9IHBhdGg7Ci0KLSAgICBpZiAobV90aGVtZVBhdGguaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIEVJTkFfTE9HX0VSUigiTm8gdGhlbWUgZGVmaW5lZCwgdW5hYmxlIHRvIHNldCB0aGVt
ZSBmb3IgSFRNTCBGb3Jtcy4iKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
RUlOQV9MT0dfQ1JJVCgiTm8gdmFsaWQgdGhlbWUgZGVmaW5lZCwgdGhpbmdzIHdpbGwgbm90IHdv
cmsgcHJvcGVybHkuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIW1fY2Fu
dmFzKSB7Ci0gICAgICAgIG1fY2FudmFzID0gZWNvcmVfZXZhc19idWZmZXJfbmV3KDEsIDEpOwot
ICAgICAgICBpZiAoIW1fY2FudmFzKQotICAgICAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBu
b3QgY3JlYXRlIGNhbnZhcy4iKTsKLSAgICB9CisgICAgbV90aGVtZVBhdGggPSBwYXRoOwogCiAg
ICAgbG9hZFRoZW1lKCk7CiB9CiAKK1N0cmluZyBSZW5kZXJUaGVtZUVmbDo6dGhlbWVQYXRoKCkg
Y29uc3QKK3sKKyNpZiAhTkRFQlVHCisgICAgaWYgKG1fZWRqZSkgeworICAgICAgICBjb25zdCBj
aGFyKiBwYXRoOworICAgICAgICBlZGplX29iamVjdF9maWxlX2dldChvLCAmcGF0aCwgMCk7Cisg
ICAgICAgIEFTU0VSVChtX3RoZW1lUGF0aCA9PSBwYXRoKTsKKyAgICB9CisjZW5kaWYKKyAgICBy
ZXR1cm4gbV90aGVtZVBhdGg7Cit9CisKIGJvb2wgUmVuZGVyVGhlbWVFZmw6OmxvYWRUaGVtZSgp
CiB7CisgICAgQVNTRVJUKCFtX3RoZW1lUGF0aC5pc0VtcHR5KCkpOworCisgICAgaWYgKCFtX2Nh
bnZhcykgeworICAgICAgICBtX2NhbnZhcyA9IGVjb3JlX2V2YXNfYnVmZmVyX25ldygxLCAxKTsK
KyAgICAgICAgX0FTU0VSVF9PTl9SRUxFQVNFX1JFVFVSTl9WQUwobV9jYW52YXMsIGZhbHNlLAor
ICAgICAgICAgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIGNhbnZhcyByZXF1aXJlZCBieSB0aGVt
ZSwgdGhpbmdzIHdpbGwgbm90IHdvcmsgcHJvcGVybHkuIik7CisgICAgfQorCiAgICAgRXZhc19P
YmplY3QqIG8gPSBlZGplX29iamVjdF9hZGQoZWNvcmVfZXZhc19nZXQobV9jYW52YXMpKTsKICAg
ICBfQVNTRVJUX09OX1JFTEVBU0VfUkVUVVJOX1ZBTChvLCBmYWxzZSwgIkNvdWxkIG5vdCBjcmVh
dGUgbmV3IGJhc2UgRWRqZSBvYmplY3QuIik7CiAKLSAgICBpZiAoIWVkamVfb2JqZWN0X2ZpbGVf
c2V0KG8sIG1fdGhlbWVQYXRoLnV0ZjgoKS5kYXRhKCksICJ3ZWJraXQvYmFzZSIpKSB7Ci0gICAg
ICAgIEVkamVfTG9hZF9FcnJvciBlcnIgPSBlZGplX29iamVjdF9sb2FkX2Vycm9yX2dldChvKTsK
LSAgICAgICAgY29uc3QgY2hhciogZXJybXNnID0gZWRqZV9sb2FkX2Vycm9yX3N0cihlcnIpOwot
ICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBzZXQgZmlsZSAnJXMnOiAlcyIsIG1fdGhl
bWVQYXRoLnV0ZjgoKS5kYXRhKCksICBlcnJtc2cpOworICAgIGlmICghc2V0U291cmNlR3JvdXBG
b3JFZGplT2JqZWN0KG8sIG1fdGhlbWVQYXRoLCAid2Via2l0L2Jhc2UiKSkgewogICAgICAgICBl
dmFzX29iamVjdF9kZWwobyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gS2VlcCBjdXJyZW50
IHRoZW1lLgogICAgIH0KIAogICAgIC8vIEdldCByaWQgb2YgZXhpc3RpbmcgdGhlbWUuCiAgICAg
aWYgKG1fZWRqZSkgewotICAgICAgICBjYWNoZVRoZW1lUGFydEZsdXNoKCk7CisgICAgICAgIGZs
dXNoVGhlbWVQYXJ0Q2FjaGUoKTsKICAgICAgICAgZXZhc19vYmplY3RfZGVsKG1fZWRqZSk7CiAg
ICAgfQogCkBAIC00OTMsNyArNTMyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6bG9hZFRoZW1l
KCkKICAgICBlZGplX29iamVjdF9zaWduYWxfY2FsbGJhY2tfYWRkKG1fZWRqZSwgImNvbG9yX2Ns
YXNzLHNldCIsICJ3ZWJraXQvc2VsZWN0aW9uL2luYWN0aXZlIiwgYXBwbHlDb2xvckNhbGxiYWNr
LCB0aGlzKTsKICAgICBlZGplX29iamVjdF9zaWduYWxfY2FsbGJhY2tfYWRkKG1fZWRqZSwgImNv
bG9yX2NsYXNzLHNldCIsICJ3ZWJraXQvZm9jdXNfcmluZyIsIGFwcGx5Q29sb3JDYWxsYmFjaywg
dGhpcyk7CiAKLSAgICBhcHBseVBhcnREZXNjcmlwdGlvbnNGcm9tKG1fZWRqZSk7CisgICAgYXBw
bHlQYXJ0RGVzY3JpcHRpb25zRnJvbShtX3RoZW1lUGF0aCk7CiAKICAgICBzZXRDb2xvckZyb21U
aGVtZUNsYXNzKCJ3ZWJraXQvc2VsZWN0aW9uL2FjdGl2ZSIpOwogICAgIHNldENvbG9yRnJvbVRo
ZW1lQ2xhc3MoIndlYmtpdC9zZWxlY3Rpb24vaW5hY3RpdmUiKTsKQEAgLTU2Niw3OSArNjA1LDIx
IEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFwcGx5UGFydERlc2NyaXB0aW9uKEV2YXNfT2JqZWN0
KiBvYmplY3QsIHN0cnVjdCBUaGVtZVBhcnRECiAgICAgfQogfQogCi1jb25zdCBjaGFyKiBSZW5k
ZXJUaGVtZUVmbDo6ZWRqZUdyb3VwRnJvbUZvcm1UeXBlKEZvcm1UeXBlIHR5cGUpIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseVBhcnREZXNjcmlwdGlvbnNGcm9tKGNvbnN0IFN0cmlu
ZyYgdGhlbWVQYXRoKQogewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBncm91cHNbXSA9IHsKLSNk
ZWZpbmUgVyhuKSAid2Via2l0L3dpZGdldC8ibgotICAgICAgICBXKCJidXR0b24iKSwKLSAgICAg
ICAgVygicmFkaW8iKSwKLSAgICAgICAgVygiZW50cnkiKSwKLSAgICAgICAgVygiY2hlY2tib3gi
KSwKLSAgICAgICAgVygiY29tYm8iKSwKLSNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSAg
ICAgICAgVygicHJvZ3Jlc3NiYXIiKSwKLSNlbmRpZgotICAgICAgICBXKCJzZWFyY2gvZmllbGQi
KSwKLSAgICAgICAgVygic2VhcmNoL2RlY29yYXRpb24iKSwKLSAgICAgICAgVygic2VhcmNoL3Jl
c3VsdHNfYnV0dG9uIiksCi0gICAgICAgIFcoInNlYXJjaC9yZXN1bHRzX2RlY29yYXRpb24iKSwK
LSAgICAgICAgVygic2VhcmNoL2NhbmNlbF9idXR0b24iKSwKLSAgICAgICAgVygic2xpZGVyL3Zl
cnRpY2FsIiksCi0gICAgICAgIFcoInNsaWRlci9ob3Jpem9udGFsIiksCi0gICAgICAgIFcoInNs
aWRlci90aHVtYl92ZXJ0aWNhbCIpLAotICAgICAgICBXKCJzbGlkZXIvdGh1bWJfaG9yaXpvbnRh
bCIpLAotI2lmIEVOQUJMRShWSURFTykKLSAgICAgICAgVygibWVkaWFjb250cm9sL3BsYXlwYXVz
ZV9idXR0b24iKSwKLSAgICAgICAgVygibWVkaWFjb250cm9sL211dGVfYnV0dG9uIiksCi0gICAg
ICAgIFcoIm1lZGlhY29udHJvbC9zZWVrZm9yd2FyZF9idXR0b24iKSwKLSAgICAgICAgVygibWVk
aWFjb250cm9sL3NlZWtiYWNrd2FyZF9idXR0b24iKSwKLSAgICAgICAgVygibWVkaWFjb250cm9s
L2Z1bGxzY3JlZW5fYnV0dG9uIiksCi0jZW5kaWYKLSAgICAgICAgVygic3Bpbm5lciIpLAotI3Vu
ZGVmIFcKLSAgICAgICAgMAotICAgIH07Ci0gICAgQVNTRVJUKHR5cGUgPj0gMCk7Ci0gICAgQVNT
RVJUKChzaXplX3QpdHlwZSA8IHNpemVvZihncm91cHMpIC8gc2l6ZW9mKGdyb3Vwc1swXSkpOyAv
LyBvdXQgb2Ygc3luYz8KLSAgICByZXR1cm4gZ3JvdXBzW3R5cGVdOwotfQotCi12b2lkIFJlbmRl
clRoZW1lRWZsOjphcHBseVBhcnREZXNjcmlwdGlvbnNGcm9tKEV2YXNfT2JqZWN0KiBvKQotewot
ICAgIEV2YXNfT2JqZWN0KiBvYmplY3Q7Ci0gICAgdW5zaWduZWQgaW50IGk7Ci0gICAgY29uc3Qg
Y2hhciogZmlsZTsKLQotICAgIEFTU0VSVChvKTsKKyAgICBFdmFzX09iamVjdCogdGVtcCA9IGVk
amVfb2JqZWN0X2FkZChlY29yZV9ldmFzX2dldChtX2NhbnZhcykpOworICAgIF9BU1NFUlRfT05f
UkVMRUFTRV9SRVRVUk4odGVtcCwgIkNvdWxkIG5vdCBjcmVhdGUgRWRqZSBvYmplY3QuIik7CiAK
LSAgICBlZGplX29iamVjdF9maWxlX2dldChvLCAmZmlsZSwgMCk7Ci0gICAgQVNTRVJUKGZpbGUp
OwotICAgIGlmICghZmlsZSkgewotICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCByZXRy
aWV2ZSBFZGplIHRoZW1lIGZpbGUuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBv
YmplY3QgPSBlZGplX29iamVjdF9hZGQoZWNvcmVfZXZhc19nZXQobV9jYW52YXMpKTsKLSAgICBp
ZiAoIW9iamVjdCkgewotICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBjcmVhdGUgRWRq
ZSBvYmplY3QuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKGkgPSAwOyBp
IDwgRm9ybVR5cGVMYXN0OyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRm9y
bVR5cGVMYXN0OyBpKyspIHsKICAgICAgICAgRm9ybVR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEZv
cm1UeXBlPihpKTsKLSAgICAgICAgY29uc3QgY2hhciogZ3JvdXAgPSBlZGplR3JvdXBGcm9tRm9y
bVR5cGUodHlwZSk7CiAgICAgICAgIG1fcGFydERlc2NzW2ldLnR5cGUgPSB0eXBlOwotICAgICAg
ICBpZiAoIWVkamVfb2JqZWN0X2ZpbGVfc2V0KG9iamVjdCwgZmlsZSwgZ3JvdXApKSB7Ci0gICAg
ICAgICAgICBFZGplX0xvYWRfRXJyb3IgZXJyID0gZWRqZV9vYmplY3RfbG9hZF9lcnJvcl9nZXQo
b2JqZWN0KTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm1zZyA9IGVkamVfbG9hZF9lcnJv
cl9zdHIoZXJyKTsKLSAgICAgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IHNldCB0aGVt
ZSBncm91cCAnJXMnIG9mIGZpbGUgJyVzJzogJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAg
IGdyb3VwLCBmaWxlLCBlcnJtc2cpOwotCisgICAgICAgIGlmICghc2V0U291cmNlR3JvdXBGb3JF
ZGplT2JqZWN0KHRlbXAsIHRoZW1lUGF0aCwgdG9FZGplR3JvdXAodHlwZSkpKQogICAgICAgICAg
ICAgYXBwbHlQYXJ0RGVzY3JpcHRpb25GYWxsYmFjayhtX3BhcnREZXNjcyArIGkpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGFwcGx5UGFydERlc2NyaXB0aW9uKG9iamVjdCwgbV9wYXJ0
RGVzY3MgKyBpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXBwbHlQYXJ0RGVzY3JpcHRp
b24odGVtcCwgbV9wYXJ0RGVzY3MgKyBpKTsKICAgICB9Ci0gICAgZXZhc19vYmplY3RfZGVsKG9i
amVjdCk7CisKKyAgICBldmFzX29iamVjdF9kZWwodGVtcCk7CiB9CiAKIFJlbmRlclRoZW1lRWZs
OjpSZW5kZXJUaGVtZUVmbChQYWdlKiBwYWdlKQpAQCAtNjYxLDcgKzY0Miw3IEBAIFJlbmRlclRo
ZW1lRWZsOjpSZW5kZXJUaGVtZUVmbChQYWdlKiBwYWdlKQogCiBSZW5kZXJUaGVtZUVmbDo6flJl
bmRlclRoZW1lRWZsKCkKIHsKLSAgICBjYWNoZVRoZW1lUGFydEZsdXNoKCk7CisgICAgZmx1c2hU
aGVtZVBhcnRDYWNoZSgpOwogCiAgICAgaWYgKG1fY2FudmFzKSB7CiAgICAgICAgIGlmIChtX2Vk
amUpCkBAIC04MzEsMTEgKzgxMiwxMCBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RDaGVj
a2JveFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eQogICAgIH0K
IAogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgQ2hlY2tCb3gpOwotICAgIEFTU0VS
VChtX2VkamUpOwogCiAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CiAKLSAgICBjb25zdCBzdHJ1
Y3QgVGhlbWVQYXJ0RGVzYyAqZGVzYyA9IG1fcGFydERlc2NzICsgKHNpemVfdClDaGVja0JveDsK
KyAgICBjb25zdCBzdHJ1Y3QgVGhlbWVQYXJ0RGVzYyogZGVzYyA9IG1fcGFydERlc2NzICsgKHNp
emVfdClDaGVja0JveDsKICAgICBpZiAoc3R5bGUtPndpZHRoKCkudmFsdWUoKSA8IGRlc2MtPm1p
bi53aWR0aCgpLnZhbHVlKCkpCiAgICAgICAgIHN0eWxlLT5zZXRXaWR0aChkZXNjLT5taW4ud2lk
dGgoKSk7CiAgICAgaWYgKHN0eWxlLT5oZWlnaHQoKS52YWx1ZSgpIDwgZGVzYy0+bWluLmhlaWdo
dCgpLnZhbHVlKCkpCkBAIC04NTUsMTEgKzgzNSwxMCBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjph
ZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxl
KgogICAgIH0KIAogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgUmFkaW9CdXR0b24p
OwotICAgIEFTU0VSVChtX2VkamUpOwogCiAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CiAKLSAg
ICBjb25zdCBzdHJ1Y3QgVGhlbWVQYXJ0RGVzYyAqZGVzYyA9IG1fcGFydERlc2NzICsgKHNpemVf
dClSYWRpb0J1dHRvbjsKKyAgICBjb25zdCBzdHJ1Y3QgVGhlbWVQYXJ0RGVzYyogZGVzYyA9IG1f
cGFydERlc2NzICsgKHNpemVfdClSYWRpb0J1dHRvbjsKICAgICBpZiAoc3R5bGUtPndpZHRoKCku
dmFsdWUoKSA8IGRlc2MtPm1pbi53aWR0aCgpLnZhbHVlKCkpCiAgICAgICAgIHN0eWxlLT5zZXRX
aWR0aChkZXNjLT5taW4ud2lkdGgoKSk7CiAgICAgaWYgKHN0eWxlLT5oZWlnaHQoKS52YWx1ZSgp
IDwgZGVzYy0+bWluLmhlaWdodCgpLnZhbHVlKCkpCkBAIC0xMDg0LDkgKzEwNjMsNyBAQCBib29s
IFJlbmRlclRoZW1lRWZsOjplbWl0TWVkaWFCdXR0b25TaWduYWwoRm9ybVR5cGUgZm9ybVR5cGUs
IE1lZGlhQ29udHJvbEVsZW1lbgogICAgIGxvYWRUaGVtZUlmTmVlZGVkKCk7CiAgICAgX0FTU0VS
VF9PTl9SRUxFQVNFX1JFVFVSTl9WQUwobV9lZGplLCBmYWxzZSwgIkNvdWxkIG5vdCBwYWludCBu
YXRpdmUgSFRNTCBwYXJ0IGR1ZSB0byBtaXNzaW5nIHRoZW1lLiIpOwogCi0gICAgVGhlbWVQYXJ0
Q2FjaGVFbnRyeSogZW50cnk7Ci0KLSAgICBlbnRyeSA9IGNhY2hlVGhlbWVQYXJ0R2V0KGZvcm1U
eXBlLCByZWN0LnNpemUoKSk7CisgICAgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogZW50cnkgPSBnZXRU
aGVtZVBhcnRGcm9tQ2FjaGUoZm9ybVR5cGUsIHJlY3Quc2l6ZSgpKTsKICAgICBfQVNTRVJUX09O
X1JFTEVBU0VfUkVUVVJOX1ZBTChlbnRyeSwgZmFsc2UsICJDb3VsZCBub3QgcGFpbnQgbmF0aXZl
IEhUTUwgcGFydCBkdWUgdG8gbWlzc2luZyB0aGVtZSBwYXJ0LiIpOwogCiAgICAgaWYgKG1lZGlh
RWxlbWVudFR5cGUgPT0gTWVkaWFQbGF5QnV0dG9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lZmwvUmVuZGVyVGhlbWVFZmwuaAppbmRleCAwMDczNzY2NjI1ODVhYWIwZjkzN2U2NDVkZjgz
Mjc3MzA2ODc2YjIwLi5hOTBiNGI2NTNjZjk4MWYxODhhZmQ0OWVjZjFiYTIwNmQ1OTYwNjYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuaApAQCAtMjAz
LDcgKzIwMyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9s
ZGVyV2hlbkZvY3VzZWQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2
b2lkIHNldFRoZW1lUGF0aChjb25zdCBTdHJpbmcmKTsKLSAgICBTdHJpbmcgdGhlbWVQYXRoKCkg
eyByZXR1cm4gbV90aGVtZVBhdGg7IH0KKyAgICBTdHJpbmcgdGhlbWVQYXRoKCkgY29uc3Q7CiAK
IHByb3RlY3RlZDoKICAgICBzdGF0aWMgZmxvYXQgZGVmYXVsdEZvbnRTaXplOwpAQCAtMjEyLDE1
ICsyMTIsMTMgQEAgcHJpdmF0ZToKICAgICBib29sIGxvYWRUaGVtZSgpOwogICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBsb2FkVGhlbWVJZk5lZWRlZCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gbV9lZGplIHx8IGNvbnN0X2Nhc3Q8UmVuZGVyVGhlbWVFZmwqPih0aGlzKS0+bG9hZFRoZW1l
KCk7CisgICAgICAgIHJldHVybiBtX2VkamUgfHwgKCFtX3RoZW1lUGF0aC5pc0VtcHR5KCkgJiYg
Y29uc3RfY2FzdDxSZW5kZXJUaGVtZUVmbCo+KHRoaXMpLT5sb2FkVGhlbWUoKSk7CiAgICAgfQog
Ci0gICAgdm9pZCBhcHBseVBhcnREZXNjcmlwdGlvbnNGcm9tKEV2YXNfT2JqZWN0Kik7CisgICAg
dm9pZCBhcHBseVBhcnREZXNjcmlwdGlvbnNGcm9tKGNvbnN0IFN0cmluZyYgdGhlbWVQYXRoKTsK
IAotICAgIGNvbnN0IGNoYXIqIGVkamVHcm91cEZyb21Gb3JtVHlwZShGb3JtVHlwZSkgY29uc3Q7
CiAgICAgdm9pZCBhcHBseUVkamVTdGF0ZUZyb21Gb3JtKEV2YXNfT2JqZWN0KiwgQ29udHJvbFN0
YXRlcyk7CiAgICAgYm9vbCBwYWludFRoZW1lUGFydChSZW5kZXJPYmplY3QqLCBGb3JtVHlwZSwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIGJvb2wgaXNGb3JtRWxlbWVu
dFRvb0xhcmdlVG9EaXNwbGF5KGNvbnN0IEludFNpemUmKTsKIAogI2lmIEVOQUJMRShWSURFTykK
ICAgICBib29sIGVtaXRNZWRpYUJ1dHRvblNpZ25hbChGb3JtVHlwZSwgTWVkaWFDb250cm9sRWxl
bWVudFR5cGUsIGNvbnN0IEludFJlY3QmKTsKQEAgLTI1Myw2ICsyNTEsMTEgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGFwcGx5UGFydERlc2NyaXB0aW9uKEV2YXNfT2JqZWN0Kiwgc3RydWN0IFRoZW1l
UGFydERlc2MqKTsKIAogICAgIHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5IHsKKyAgICAgICAg
VGhlbWVQYXJ0Q2FjaGVFbnRyeSgpOworICAgICAgICB+VGhlbWVQYXJ0Q2FjaGVFbnRyeSgpOwor
ICAgICAgICBzdGF0aWMgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY3JlYXRlKGNvbnN0IFN0cmluZyYg
dGhlbWVQYXRoLCBGb3JtVHlwZSwgY29uc3QgSW50U2l6ZSYpOworICAgICAgICB2b2lkIHJldXNl
KGNvbnN0IFN0cmluZyYgdGhlbWVQYXRoLCBGb3JtVHlwZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSA9
IEludFNpemUoKSk7CisKICAgICAgICAgRm9ybVR5cGUgdHlwZTsKICAgICAgICAgSW50U2l6ZSBz
aXplOwogICAgICAgICBFY29yZV9FdmFzKiBlZTsKQEAgLTI2NCwyMCArMjY3LDEwIEBAIHByaXZh
dGU6CiAKICAgICAvLyB0aGlzIHNob3VsZCBiZSBzbWFsbCBhbmQgbm90IHNvIGZyZXF1ZW50bHkg
dXNlZCwKICAgICAvLyBzbyB1c2UgYSB2ZWN0b3IgYW5kIGRvIGxpbmVhciBzZWFyY2hlcwotICAg
IFZlY3RvcjxzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSAqPiBtX3BhcnRDYWNoZTsKLQotICAg
IC8vIGdldCAodXNlLCBjcmVhdGUgb3IgcmVwbGFjZSkgZW50cnkgZnJvbSBjYWNoZQotICAgIHN0
cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5KiBjYWNoZVRoZW1lUGFydEdldChGb3JtVHlwZSwgY29u
c3QgSW50U2l6ZSYpOwotICAgIC8vIGZsdXNoIGNhY2hlLCBkZWxldGluZyBhbGwgZW50cmllcwot
ICAgIHZvaWQgY2FjaGVUaGVtZVBhcnRGbHVzaCgpOwotCi0gICAgLy8gaW50ZXJuYWwsIHVzZWQg
YnkgY2FjaGVUaGVtZVBhcnRHZXQoKQotICAgIGJvb2wgdGhlbWVQYXJ0Q2FjaGVFbnRyeVJlc2V0
KHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5KiwgRm9ybVR5cGUpOwotICAgIGJvb2wgdGhlbWVQ
YXJ0Q2FjaGVFbnRyeVN1cmZhY2VDcmVhdGUoc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqKTsK
LSAgICBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY2FjaGVUaGVtZVBhcnROZXcoRm9ybVR5
cGUsIGNvbnN0IEludFNpemUmKTsKLSAgICBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY2Fj
aGVUaGVtZVBhcnRSZXNldChGb3JtVHlwZSwgc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqKTsK
LSAgICBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY2FjaGVUaGVtZVBhcnRSZXNpemVBbmRS
ZXNldChGb3JtVHlwZSwgY29uc3QgSW50U2l6ZSYsIHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5
Kik7CisgICAgVmVjdG9yPFRoZW1lUGFydENhY2hlRW50cnkqPiBtX3BhcnRDYWNoZTsKIAorICAg
IFRoZW1lUGFydENhY2hlRW50cnkqIGdldFRoZW1lUGFydEZyb21DYWNoZShGb3JtVHlwZSwgY29u
c3QgSW50U2l6ZSYpOworICAgIHZvaWQgZmx1c2hUaGVtZVBhcnRDYWNoZSgpOwogfTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163085</attachid>
            <date>2012-09-10 04:10:33 -0700</date>
            <delta_ts>2012-09-11 09:16:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96016-20120910131009.patch</filename>
            <type>text/plain</type>
            <size>24829</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmRhZTI0MzRkMmM4MjRh
ZjUwN2ZkYjcwOTI2M2M2ZWQwYzc3NWYxMS4uYmE4MzJlNjY0NzQxOGNiZmJlYThmNmUzNzRmMWIw
MDM2ODk5ZjQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTA5LTEwICBLZW5u
ZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KKworICAgICAgICBb
RUZMXSBDbGVhbiB1cCB0aGUgUmVuZGVyVGhlbWUgRWRqZSBjYWNoaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjAxNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBFZGplIHBhcnRz
IGNhY2hpbmcgdG8gYmUgZWFzaWVyIHRvIHVuZGVyc3RhbmQgYW5kIHVzZQorICAgICAgICBwcm9w
ZXIgQysrIGNvbnN0cnVjdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVF
ZmwuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0VkamVHcm91
cCk6CisKKyAgICAgICAgICAgIENvbnZlcnRzIHRoZSBlbnVtIHRvIHRoZSBnaXZlbiBlZGplIGdy
b3VwIG5hbWUuCisKKyAgICAgICAgKFdlYkNvcmU6OnNldFNvdXJjZUdyb3VwRm9yRWRqZU9iamVj
dCk6CisKKyAgICAgICAgICAgIEJhc2ljYWxseSBhIHdyYXBwZXIgYXJvdW5kIGV2YXNfb2JqZWN0
X2ZpbGVfc2V0LCBidXQgaGFuZGxlcworICAgICAgICAgICAgZXJyb3JzLCB3aGljaCB3YXMgZG9u
ZSBzbGlnaHRseSBkaWZmZXJlbnRseSBhbGwgb3Zlci4KKworICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnk6OlRoZW1lUGFydENhY2hlRW50cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnk6On5U
aGVtZVBhcnRDYWNoZUVudHJ5KToKKworICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ2Fpcm9TdXJm
YWNlRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OmlzRm9ybUVsZW1lbnRUb29MYXJnZVRvRGlzcGxh
eSk6CisKKyAgICAgICAgICAgIE1ldGhvZHMgdXNlZCB3aGVuIGNyZWF0aW5nIFRoZW1lUGFydENh
Y2hlRW50cnknZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjpUaGVtZVBh
cnRDYWNoZUVudHJ5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6
OlRoZW1lUGFydENhY2hlRW50cnk6OnJldXNlKToKKworICAgICAgICAgICAgTmV3IG1ldGhvZHMg
Zm9yIGNyZWF0aW5nIGFuZCByZXVzaW5nIGFuIGNhY2hlIGVudHJ5LiBJZiB5b3UgZG8KKyAgICAg
ICAgICAgIG5vdCBzdXBwbHkgYSBuZXcgc2l6ZSwgdGhlIG9yaWdpbmFsIHNpemUgd2lsbCBiZSB1
c2VkLCBhbmQgaXQgaXMKKyAgICAgICAgICAgIHRodXMgbW9yZSBlZmZlY3RpdmUuCisKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjpnZXRUaGVtZVBhcnRGcm9tQ2FjaGUpOgorCisg
ICAgICAgICAgICBOZXcgbWV0aG9kIGZvciByZXF1ZXN0aW5nIGEgdGhlbWUgcGFydC4gSWYgaXQg
ZG9lc24ndCBleGlzdAorICAgICAgICAgICAgaXQgd2lsbCBhZGRpdGluYWxseSBiZSBsb2FkZWQg
YW5kIGFkZGVkIHRvIHRoZSBjYWNoZS4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVF
Zmw6OmZsdXNoVGhlbWVQYXJ0Q2FjaGUpOgorCisgICAgICAgICAgICBSZW1vdmUgdGhlIGVudGly
ZSBjYWNoZSBhbmQgZnJlZSB0aGUgYXNzZXRzLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUVmbDo6cGFpbnRUaGVtZVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVF
Zmw6OnRoZW1lUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6bG9hZFRo
ZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjphcHBseVBhcnREZXNjcmlw
dGlvbnNGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjp+UmVuZGVyVGhl
bWVFZmwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmVtaXRNZWRpYUJ1dHRv
blNpZ25hbCk6CisgICAgICAgICogcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmg6CisgICAg
ICAgIChSZW5kZXJUaGVtZUVmbCk6CisgICAgICAgIChUaGVtZVBhcnRDYWNoZUVudHJ5KToKKwog
MjAxMi0wOS0xMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZC4gRml4IG1ha2UgZGlzdGNoZWNrLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAKaW5kZXggODFlMzJhMjE1MTkyODcy
ZTRlZGJlNjczZGY5NDE5ODRlYjlmMWNjNy4uNzcwOTM2ODNhZDdlM2FjMWZlNTEyYzQzZjZiZDE4
NzRlMDYwMTJlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRl
clRoZW1lRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhl
bWVFZmwuY3BwCkBAIC04NCwxMSArODQsNjMgQEAgc3RhdGljIGNvbnN0IGludCBtZWRpYVNsaWRl
clRodW1iSGVpZ2h0ID0gMTI7CiAjZGVmaW5lIF9BU1NFUlRfT05fUkVMRUFTRV9SRVRVUk5fVkFM
KG8sIHZhbCwgZm10LCAuLi4pIFwKICAgICBkbyB7IGlmICghbykgeyBFSU5BX0xPR19DUklUKGZt
dCwgIyMgX19WQV9BUkdTX18pOyBBU1NFUlQobyk7IHJldHVybiB2YWw7IH0gfSB3aGlsZSAoMCkK
IAorCitzdGF0aWMgY29uc3QgY2hhciogdG9FZGplR3JvdXAoRm9ybVR5cGUgdHlwZSkKK3sKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogZ3JvdXBzW10gPSB7CisjZGVmaW5lIFcobikgIndlYmtpdC93
aWRnZXQvIm4KKyAgICAgICAgVygiYnV0dG9uIiksCisgICAgICAgIFcoInJhZGlvIiksCisgICAg
ICAgIFcoImVudHJ5IiksCisgICAgICAgIFcoImNoZWNrYm94IiksCisgICAgICAgIFcoImNvbWJv
IiksCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisgICAgICAgIFcoInByb2dyZXNzYmFy
IiksCisjZW5kaWYKKyAgICAgICAgVygic2VhcmNoL2ZpZWxkIiksCisgICAgICAgIFcoInNlYXJj
aC9kZWNvcmF0aW9uIiksCisgICAgICAgIFcoInNlYXJjaC9yZXN1bHRzX2J1dHRvbiIpLAorICAg
ICAgICBXKCJzZWFyY2gvcmVzdWx0c19kZWNvcmF0aW9uIiksCisgICAgICAgIFcoInNlYXJjaC9j
YW5jZWxfYnV0dG9uIiksCisgICAgICAgIFcoInNsaWRlci92ZXJ0aWNhbCIpLAorICAgICAgICBX
KCJzbGlkZXIvaG9yaXpvbnRhbCIpLAorICAgICAgICBXKCJzbGlkZXIvdGh1bWJfdmVydGljYWwi
KSwKKyAgICAgICAgVygic2xpZGVyL3RodW1iX2hvcml6b250YWwiKSwKKyNpZiBFTkFCTEUoVklE
RU8pCisgICAgICAgIFcoIm1lZGlhY29udHJvbC9wbGF5cGF1c2VfYnV0dG9uIiksCisgICAgICAg
IFcoIm1lZGlhY29udHJvbC9tdXRlX2J1dHRvbiIpLAorICAgICAgICBXKCJtZWRpYWNvbnRyb2wv
c2Vla2ZvcndhcmRfYnV0dG9uIiksCisgICAgICAgIFcoIm1lZGlhY29udHJvbC9zZWVrYmFja3dh
cmRfYnV0dG9uIiksCisgICAgICAgIFcoIm1lZGlhY29udHJvbC9mdWxsc2NyZWVuX2J1dHRvbiIp
LAorI2VuZGlmCisgICAgICAgIFcoInNwaW5uZXIiKSwKKyN1bmRlZiBXCisgICAgICAgIDAKKyAg
ICB9OworICAgIEFTU0VSVCh0eXBlID49IDApOworICAgIEFTU0VSVCgoc2l6ZV90KXR5cGUgPCBz
aXplb2YoZ3JvdXBzKSAvIHNpemVvZihncm91cHNbMF0pKTsgLy8gb3V0IG9mIHN5bmM/CisgICAg
cmV0dXJuIGdyb3Vwc1t0eXBlXTsKK30KKworc3RhdGljIGJvb2wgc2V0U291cmNlR3JvdXBGb3JF
ZGplT2JqZWN0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBTdHJpbmcmIHRoZW1lUGF0aCwgY29uc3Qg
Y2hhciogZ3JvdXApCit7CisgICAgQVNTRVJUKG8pOworICAgIEFTU0VSVCghdGhlbWVQYXRoLmlz
RW1wdHkoKSk7CisKKyAgICBpZiAoIWVkamVfb2JqZWN0X2ZpbGVfc2V0KG8sIHRoZW1lUGF0aC51
dGY4KCkuZGF0YSgpLCBncm91cCkpIHsKKyAgICAgICAgY29uc3QgY2hhciogbWVzc2FnZSA9IGVk
amVfbG9hZF9lcnJvcl9zdHIoZWRqZV9vYmplY3RfbG9hZF9lcnJvcl9nZXQobykpOworICAgICAg
ICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBzZXQgdGhlbWUgZ3JvdXAgJyVzJyBvZiBmaWxlICcl
cyc6ICVzIiwgZ3JvdXAsIHRoZW1lUGF0aC51dGY4KCkuZGF0YSgpLCBtZXNzYWdlKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIFJl
bmRlclRoZW1lRWZsOjphZGp1c3RTaXplQ29uc3RyYWludHMoUmVuZGVyU3R5bGUqIHN0eWxlLCBG
b3JtVHlwZSB0eXBlKSBjb25zdAogewogICAgIGxvYWRUaGVtZUlmTmVlZGVkKCk7Ci0gICAgX0FT
U0VSVF9PTl9SRUxFQVNFX1JFVFVSTihtX2VkamUsICJDb3VsZCBub3QgcGFpbnQgbmF0aXZlIEhU
TUwgcGFydCBkdWUgdG8gbWlzc2luZyB0aGVtZS4iKTsKIAorICAgIC8vIFRoZXNlIGFyZSBhbHdh
eXMgdmFsaWQsIGV2ZW4gaWYgbm8gdGhlbWUgY291bGQgYmUgbG9hZGVkLgogICAgIGNvbnN0IHN0
cnVjdCBUaGVtZVBhcnREZXNjKiBkZXNjID0gbV9wYXJ0RGVzY3MgKyAoc2l6ZV90KXR5cGU7CiAK
ICAgICBpZiAoc3R5bGUtPm1pbldpZHRoKCkuaXNJbnRyaW5zaWMoKSkKQEAgLTEwNyw1MiArMTU5
LDQyIEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNpemVDb25zdHJhaW50cyhSZW5kZXJT
dHlsZSogc3R5bGUsIEZvcm1UeXBlIHR5cGUpIGNvCiAgICAgc3R5bGUtPnNldFBhZGRpbmdSaWdo
dChkZXNjLT5wYWRkaW5nLnJpZ2h0KCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lRWZsOjp0aGVt
ZVBhcnRDYWNoZUVudHJ5UmVzZXQoc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqIGVudHJ5LCBG
b3JtVHlwZSB0eXBlKQorUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnk6OlRoZW1l
UGFydENhY2hlRW50cnkoKQorICAgIDogZWUoMCksIG8oMCksIHN1cmZhY2UoMCkKIHsKLSAgICBj
b25zdCBjaGFyICpmaWxlLCAqZ3JvdXA7Ci0KLSAgICBBU1NFUlQoZW50cnkpOwotICAgIEFTU0VS
VChtX2VkamUpOwotCi0gICAgZWRqZV9vYmplY3RfZmlsZV9nZXQobV9lZGplLCAmZmlsZSwgMCk7
Ci0gICAgZ3JvdXAgPSBlZGplR3JvdXBGcm9tRm9ybVR5cGUodHlwZSk7Ci0gICAgQVNTRVJUKGZp
bGUpOwotICAgIEFTU0VSVChncm91cCk7Cit9CiAKLSAgICBpZiAoIWVkamVfb2JqZWN0X2ZpbGVf
c2V0KGVudHJ5LT5vLCBmaWxlLCBncm91cCkpIHsKLSAgICAgICAgRWRqZV9Mb2FkX0Vycm9yIGVy
ciA9IGVkamVfb2JqZWN0X2xvYWRfZXJyb3JfZ2V0KGVudHJ5LT5vKTsKLSAgICAgICAgY29uc3Qg
Y2hhciAqZXJybXNnID0gZWRqZV9sb2FkX2Vycm9yX3N0cihlcnIpOwotICAgICAgICBFSU5BX0xP
R19FUlIoIkNvdWxkIG5vdCBsb2FkICclcycgZnJvbSB0aGVtZSAlczogJXMiLCBncm91cCwgZmls
ZSwgZXJybXNnKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKK1JlbmRlclRoZW1lRWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5Ojp+VGhlbWVQYXJ0Q2FjaGVF
bnRyeSgpCit7CisgICAgaWYgKHN1cmZhY2UpCisgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJv
eShzdXJmYWNlKTsKKyAgICBpZiAobykKKyAgICAgICAgZXZhc19vYmplY3RfZGVsKG8pOworICAg
IGlmIChlZSkKKyAgICAgICAgZWNvcmVfZXZhc19mcmVlKGVlKTsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZUVmbDo6dGhlbWVQYXJ0Q2FjaGVFbnRyeVN1cmZhY2VDcmVhdGUoc3RydWN0IFRoZW1lUGFy
dENhY2hlRW50cnkqIGVudHJ5KQorc3RhdGljIGNhaXJvX3N1cmZhY2VfdCogY3JlYXRlQ2Fpcm9T
dXJmYWNlRm9yKEVjb3JlX0V2YXMqIGVlKQogewotICAgIGludCB3LCBoOwotICAgIGNhaXJvX3N0
YXR1c190IHN0YXR1czsKKyAgICBBU1NFUlQoZWUpOwogCi0gICAgQVNTRVJUKGVudHJ5KTsKLSAg
ICBBU1NFUlQoZW50cnktPmVlKTsKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKKyAgICBlY29yZV9l
dmFzX2dlb21ldHJ5X2dldChlZSwgMCwgMCwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBBU1NFUlQo
d2lkdGggPiAwICYmIGhlaWdodCA+IDApOwogCi0gICAgZWNvcmVfZXZhc19nZW9tZXRyeV9nZXQo
ZW50cnktPmVlLCAwLCAwLCAmdywgJmgpOwotICAgIEFTU0VSVCh3ID4gMCk7Ci0gICAgQVNTRVJU
KGggPiAwKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXIgPSAodW5zaWduZWQgY2hhciopKGVj
b3JlX2V2YXNfYnVmZmVyX3BpeGVsc19nZXQoZWUpKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1
cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShidWZmZXIsIENBSVJP
X0ZPUk1BVF9BUkdCMzIsIHdpZHRoLCBoZWlnaHQsIHdpZHRoICogNCk7CiAKLSAgICBlbnRyeS0+
c3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKCh1bnNpZ25lZCBj
aGFyICopZWNvcmVfZXZhc19idWZmZXJfcGl4ZWxzX2dldChlbnRyeS0+ZWUpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFU
X0FSR0IzMiwgdywgaCwgdyAqIDQpOwotICAgIHN0YXR1cyA9IGNhaXJvX3N1cmZhY2Vfc3RhdHVz
KGVudHJ5LT5zdXJmYWNlKTsKKyAgICBjYWlyb19zdGF0dXNfdCBzdGF0dXMgPSBjYWlyb19zdXJm
YWNlX3N0YXR1cyhzdXJmYWNlKTsKICAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUND
RVNTKSB7Ci0gICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGNyZWF0ZSBjYWlybyBzdXJm
YWNlOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICBjYWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0
YXR1cykpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291
bGQgbm90IGNyZWF0ZSBjYWlybyBzdXJmYWNlOiAlcyIsIGNhaXJvX3N0YXR1c190b19zdHJpbmco
c3RhdHVzKSk7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBzdXJmYWNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lRWZsOjppc0Zvcm1FbGVt
ZW50VG9vTGFyZ2VUb0Rpc3BsYXkoY29uc3QgSW50U2l6ZSYgZWxlbWVudFNpemUpCitzdGF0aWMg
Ym9vbCBpc0Zvcm1FbGVtZW50VG9vTGFyZ2VUb0Rpc3BsYXkoY29uc3QgSW50U2l6ZSYgZWxlbWVu
dFNpemUpCiB7CiAgICAgLy8gVGhpcyBsaW1pdCBvZiAyMDAwMCBwaXhlbHMgaXMgaGFyZGNvZGVk
IGluc2lkZSBlZGplIC0tIGFueXRoaW5nIGFib3ZlIHRoaXMgc2l6ZQogICAgIC8vIHdpbGwgYmUg
Y2xpcHBlZC4gVGhpcyB2YWx1ZSBzZWVtcyB0byBiZSByZWFzb25hYmxlIGVub3VnaCBzbyB0aGF0
IGhhcmRjb2RpbmcgaXQKQEAgLTE2MiwyNSArMjA0LDIxIEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6
OmlzRm9ybUVsZW1lbnRUb29MYXJnZVRvRGlzcGxheShjb25zdCBJbnRTaXplJiBlbGVtZW50U2l6
ZSkKICAgICByZXR1cm4gZWxlbWVudFNpemUud2lkdGgoKSA+IG1heEVkamVEaW1lbnNpb24gfHwg
ZWxlbWVudFNpemUuaGVpZ2h0KCkgPiBtYXhFZGplRGltZW5zaW9uOwogfQogCi0vLyBhbGxvY2F0
ZSBhIG5ldyBlbnRyeSBhbmQgZmlsbCBpdCB3aXRoIGVkamUgZ3JvdXAKLXN0cnVjdCBSZW5kZXJU
aGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeSogUmVuZGVyVGhlbWVFZmw6OmNhY2hlVGhlbWVQ
YXJ0TmV3KEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFNpemUmIHNpemUpCitSZW5kZXJUaGVtZUVm
bDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeSogUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50
cnk6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHRoZW1lUGF0aCwgRm9ybVR5cGUgdHlwZSwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKIHsKKyAgICBBU1NFUlQoIXRoZW1lUGF0aC5pc0VtcHR5KCkpOworICAg
IEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkpOworCiAgICAgaWYgKGlzRm9ybUVsZW1lbnRUb29MYXJn
ZVRvRGlzcGxheShzaXplKSkgewogICAgICAgICBFSU5BX0xPR19FUlIoIkNhbm5vdCByZW5kZXIg
YW4gZWxlbWVudCBvZiBzaXplICVkeCVkLiIsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFRoZW1lUGFydENhY2hlRW50cnkqIGVu
dHJ5ID0gbmV3IFRoZW1lUGFydENhY2hlRW50cnk7Ci0gICAgaWYgKCFlbnRyeSkgewotICAgICAg
ICBFSU5BX0xPR19FUlIoImNvdWxkIG5vdCBhbGxvY2F0ZSBUaGVtZVBhcnRDYWNoZUVudHJ5LiIp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgT3duUHRyPFRoZW1lUGFydENhY2hlRW50
cnkqPiBlbnRyeSA9IGFkb3B0UHRyKG5ldyBUaGVtZVBhcnRDYWNoZUVudHJ5KTsKIAogICAgIGVu
dHJ5LT5lZSA9IGVjb3JlX2V2YXNfYnVmZmVyX25ldyhzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOwogICAgIGlmICghZW50cnktPmVlKSB7Ci0gICAgICAgIEVJTkFfTE9HX0VSUigiZWNvcmVf
ZXZhc19idWZmZXJfbmV3KCVkLCAlZCkgZmFpbGVkLiIsCi0gICAgICAgICAgICAgICAgICAgICBz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgICAgICBkZWxldGUgZW50cnk7CisgICAg
ICAgIEVJTkFfTE9HX0VSUigiZWNvcmVfZXZhc19idWZmZXJfbmV3KCVkLCAlZCkgZmFpbGVkLiIs
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IApAQCAtMTg5LDE5ICsyMjcsMTMgQEAgc3RydWN0IFJlbmRlclRoZW1lRWZsOjpUaGVtZVBhcnRD
YWNoZUVudHJ5KiBSZW5kZXJUaGVtZUVmbDo6Y2FjaGVUaGVtZVBhcnROZXcoRm8KIAogICAgIGVu
dHJ5LT5vID0gZWRqZV9vYmplY3RfYWRkKGVjb3JlX2V2YXNfZ2V0KGVudHJ5LT5lZSkpOwogICAg
IEFTU0VSVChlbnRyeS0+byk7Ci0gICAgaWYgKCF0aGVtZVBhcnRDYWNoZUVudHJ5UmVzZXQoZW50
cnksIHR5cGUpKSB7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2RlbChlbnRyeS0+byk7Ci0gICAgICAg
IGVjb3JlX2V2YXNfZnJlZShlbnRyeS0+ZWUpOwotICAgICAgICBkZWxldGUgZW50cnk7CisKKyAg
ICBpZiAoIXNldFNvdXJjZUdyb3VwRm9yRWRqZU9iamVjdChlbnRyeS0+bywgdGhlbWVQYXRoLCB0
b0VkamVHcm91cCh0eXBlKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KIAotICAgIGlmICgh
dGhlbWVQYXJ0Q2FjaGVFbnRyeVN1cmZhY2VDcmVhdGUoZW50cnkpKSB7Ci0gICAgICAgIGV2YXNf
b2JqZWN0X2RlbChlbnRyeS0+byk7Ci0gICAgICAgIGVjb3JlX2V2YXNfZnJlZShlbnRyeS0+ZWUp
OwotICAgICAgICBkZWxldGUgZW50cnk7CisgICAgZW50cnktPnN1cmZhY2UgPSBjcmVhdGVDYWly
b1N1cmZhY2VGb3IoZW50cnktPmVlKTsKKyAgICBpZiAoIWVudHJ5LT5zdXJmYWNlKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICB9CiAKICAgICBldmFzX29iamVjdF9yZXNpemUoZW50cnktPm8sIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgZXZhc19vYmplY3Rfc2hvdyhlbnRyeS0+
byk7CkBAIC0yMDksODcgKzI0MSw4MyBAQCBzdHJ1Y3QgUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFy
dENhY2hlRW50cnkqIFJlbmRlclRoZW1lRWZsOjpjYWNoZVRoZW1lUGFydE5ldyhGbwogICAgIGVu
dHJ5LT50eXBlID0gdHlwZTsKICAgICBlbnRyeS0+c2l6ZSA9IHNpemU7CiAKLSAgICBtX3BhcnRD
YWNoZS5wcmVwZW5kKGVudHJ5KTsKLSAgICByZXR1cm4gZW50cnk7CisgICAgcmV0dXJuIGVudHJ5
LmxlYWtQdHIoKTsKIH0KIAotLy8ganVzdCBjaGFuZ2UgdGhlIGVkamUgZ3JvdXAgYW5kIHJldHVy
biB0aGUgc2FtZSBlbnRyeQotc3RydWN0IFJlbmRlclRoZW1lRWZsOjpUaGVtZVBhcnRDYWNoZUVu
dHJ5KiBSZW5kZXJUaGVtZUVmbDo6Y2FjaGVUaGVtZVBhcnRSZXNldChGb3JtVHlwZSB0eXBlLCBz
dHJ1Y3QgUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIGVudHJ5KQordm9pZCBS
ZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeTo6cmV1c2UoY29uc3QgU3RyaW5nJiB0
aGVtZVBhdGgsIEZvcm1UeXBlIG5ld1R5cGUsIGNvbnN0IEludFNpemUmIG5ld1NpemUpCiB7Ci0g
ICAgaWYgKCF0aGVtZVBhcnRDYWNoZUVudHJ5UmVzZXQoZW50cnksIHR5cGUpKSB7Ci0gICAgICAg
IGVudHJ5LT50eXBlID0gRm9ybVR5cGVMYXN0OyAvLyBpbnZhbGlkYXRlCi0gICAgICAgIG1fcGFy
dENhY2hlLmFwcGVuZChlbnRyeSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBlbnRy
eS0+dHlwZSA9IHR5cGU7Ci0gICAgbV9wYXJ0Q2FjaGUucHJlcGVuZChlbnRyeSk7Ci0gICAgcmV0
dXJuIGVudHJ5OwotfQorICAgIEFTU0VSVCghdGhlbWVQYXRoLmlzRW1wdHkoKSk7CiAKLS8vIHJl
c2l6ZSBlbnRyeSBhbmQgcmVzZXQgaXQKLXN0cnVjdCBSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0
Q2FjaGVFbnRyeSogUmVuZGVyVGhlbWVFZmw6OmNhY2hlVGhlbWVQYXJ0UmVzaXplQW5kUmVzZXQo
Rm9ybVR5cGUgdHlwZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgc3RydWN0IFJlbmRlclRoZW1lRWZs
OjpUaGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRyeSkKLXsKLSAgICBjYWlyb19zdXJmYWNlX2Zpbmlz
aChlbnRyeS0+c3VyZmFjZSk7CisgICAgaWYgKCFuZXdTaXplLmlzRW1wdHkoKSkgeworICAgICAg
ICBjYWlyb19zdXJmYWNlX2ZpbmlzaChzdXJmYWNlKTsKIAotICAgIGVudHJ5LT5zaXplID0gc2l6
ZTsKLSAgICBlY29yZV9ldmFzX3Jlc2l6ZShlbnRyeS0+ZWUsIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSk7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKGVudHJ5LT5vLCBzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpOworICAgICAgICBzaXplID0gbmV3U2l6ZTsKKyAgICAgICAgZWNvcmVf
ZXZhc19yZXNpemUoZWUsIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSk7CisgICAg
ICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShvLCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0
KCkpOwogCi0gICAgaWYgKCF0aGVtZVBhcnRDYWNoZUVudHJ5U3VyZmFjZUNyZWF0ZShlbnRyeSkp
IHsKLSAgICAgICAgZXZhc19vYmplY3RfZGVsKGVudHJ5LT5vKTsKLSAgICAgICAgZWNvcmVfZXZh
c19mcmVlKGVudHJ5LT5lZSk7Ci0gICAgICAgIGRlbGV0ZSBlbnRyeTsKLSAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHN1cmZhY2UgPSBjcmVhdGVDYWlyb1N1cmZhY2VGb3IoZWUpOworICAgICAg
ICBpZiAoIXN1cmZhY2UpIHsKKyAgICAgICAgICAgIHR5cGUgPSBGb3JtVHlwZUxhc3Q7IC8vIElu
dmFsaWRhdGU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAKLSAgICBy
ZXR1cm4gY2FjaGVUaGVtZVBhcnRSZXNldCh0eXBlLCBlbnRyeSk7CisgICAgaWYgKCFzZXRTb3Vy
Y2VHcm91cEZvckVkamVPYmplY3QobywgdGhlbWVQYXRoLCB0b0VkamVHcm91cChuZXdUeXBlKSkp
IHsKKyAgICAgICAgdHlwZSA9IEZvcm1UeXBlTGFzdDsgLy8gSW52YWxpZGF0ZS4KKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHR5cGUgPSBuZXdUeXBlOwogfQogCi0vLyBnZW5lcmFsIHB1
cnBvc2UgZ2V0ICh3aWxsIGNyZWF0ZSwgcmV1c2UgYW5kIGFsbCkKLXN0cnVjdCBSZW5kZXJUaGVt
ZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeSogUmVuZGVyVGhlbWVFZmw6OmNhY2hlVGhlbWVQYXJ0
R2V0KEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFNpemUmIHNpemUpCitSZW5kZXJUaGVtZUVmbDo6
VGhlbWVQYXJ0Q2FjaGVFbnRyeSogUmVuZGVyVGhlbWVFZmw6OmdldFRoZW1lUGFydEZyb21DYWNo
ZShGb3JtVHlwZSB0eXBlLCBjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIFZlY3RvcjxzdHJ1
Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSAqPjo6aXRlcmF0b3IgaXRyLCBlbmQ7Ci0gICAgc3RydWN0
IFRoZW1lUGFydENhY2hlRW50cnkgKmNlX2xhc3Rfc2l6ZSA9IDA7Ci0gICAgaW50IGksIGlkeExh
c3RTaXplID0gLTE7CisgICAgVmVjdG9yPFRoZW1lUGFydENhY2hlRW50cnkqPjo6aXRlcmF0b3Ig
aXQsIGVuZDsKKyAgICBzaXplX3QgbGFzdFdpdGhSZXF1ZXN0ZWRTaXplID0gbm90Rm91bmQ7CiAK
LSAgICBpdHIgPSBtX3BhcnRDYWNoZS5iZWdpbigpOworICAgIGl0ID0gbV9wYXJ0Q2FjaGUuYmVn
aW4oKTsKICAgICBlbmQgPSBtX3BhcnRDYWNoZS5lbmQoKTsKLSAgICBmb3IgKGkgPSAwOyBpdHIg
IT0gZW5kOyBpKyssIGl0cisrKSB7Ci0gICAgICAgIHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5
ICplbnRyeSA9ICppdHI7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaXQgIT0gZW5kOyBpKyss
IGl0KyspIHsKKyAgICAgICAgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogZW50cnkgPSAqaXQ7CiAgICAg
ICAgIGlmIChlbnRyeS0+c2l6ZSA9PSBzaXplKSB7CiAgICAgICAgICAgICBpZiAoZW50cnktPnR5
cGUgPT0gdHlwZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgICAgICAgICBj
ZV9sYXN0X3NpemUgPSBlbnRyeTsKLSAgICAgICAgICAgIGlkeExhc3RTaXplID0gaTsKKyAgICAg
ICAgICAgIGxhc3RXaXRoUmVxdWVzdGVkU2l6ZSA9IGk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAobV9wYXJ0Q2FjaGUuc2l6ZSgpIDwgUkVOREVSX1RIRU1FX0VGTF9QQVJUX0NBQ0hFX01B
WCkKLSAgICAgICAgcmV0dXJuIGNhY2hlVGhlbWVQYXJ0TmV3KHR5cGUsIHNpemUpOworICAgIGlm
IChtX3BhcnRDYWNoZS5zaXplKCkgPCBSRU5ERVJfVEhFTUVfRUZMX1BBUlRfQ0FDSEVfTUFYKSB7
CisgICAgICAgIFRoZW1lUGFydENhY2hlRW50cnkqIGVudHJ5ID0gVGhlbWVQYXJ0Q2FjaGVFbnRy
eTo6Y3JlYXRlKHRoZW1lUGF0aCgpLCB0eXBlLCBzaXplKTsKKyAgICAgICAgbV9wYXJ0Q2FjaGUu
cHJlcGVuZChlbnRyeSk7CisgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICB9CisKKyAgICAvLyBX
ZSBoYXZlIGEgZnVsbCBjYWNoZSBub3chCiAKLSAgICBpZiAoY2VfbGFzdF9zaXplICYmIGNlX2xh
c3Rfc2l6ZSAhPSBtX3BhcnRDYWNoZS5maXJzdCgpKSB7Ci0gICAgICAgIG1fcGFydENhY2hlLnJl
bW92ZShpZHhMYXN0U2l6ZSk7Ci0gICAgICAgIHJldHVybiBjYWNoZVRoZW1lUGFydFJlc2V0KHR5
cGUsIGNlX2xhc3Rfc2l6ZSk7CisgICAgaWYgKGxhc3RXaXRoUmVxdWVzdGVkU2l6ZSAhPSBub3RG
b3VuZCAmJiBsYXN0V2l0aFJlcXVlc3RlZFNpemUgIT0gMSkgeworICAgICAgICBUaGVtZVBhcnRD
YWNoZUVudHJ5KiBlbnRyeSA9IG1fcGFydENhY2hlLmF0KGxhc3RXaXRoUmVxdWVzdGVkU2l6ZSk7
CisgICAgICAgIGVudHJ5LT5yZXVzZSh0aGVtZVBhdGgoKSwgdHlwZSk7CisgICAgICAgIG1fcGFy
dENhY2hlLnJlbW92ZShsYXN0V2l0aFJlcXVlc3RlZFNpemUpOworICAgICAgICBtX3BhcnRDYWNo
ZS5wcmVwZW5kKGVudHJ5KTsKKyAgICAgICAgcmV0dXJuIGVudHJ5OwogICAgIH0KIAogICAgIFRo
ZW1lUGFydENhY2hlRW50cnkqIGVudHJ5ID0gbV9wYXJ0Q2FjaGUubGFzdCgpOworICAgIGVudHJ5
LT5yZXVzZSh0aGVtZVBhdGgoKSwgdHlwZSwgc2l6ZSk7CiAgICAgbV9wYXJ0Q2FjaGUucmVtb3Zl
TGFzdCgpOwotICAgIHJldHVybiBjYWNoZVRoZW1lUGFydFJlc2l6ZUFuZFJlc2V0KHR5cGUsIHNp
emUsIGVudHJ5KTsKKyAgICBtX3BhcnRDYWNoZS5wcmVwZW5kKGVudHJ5KTsKKyAgICByZXR1cm4g
ZW50cnk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmNhY2hlVGhlbWVQYXJ0Rmx1c2goKQor
dm9pZCBSZW5kZXJUaGVtZUVmbDo6Zmx1c2hUaGVtZVBhcnRDYWNoZSgpCiB7Ci0gICAgVmVjdG9y
PHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5ICo+OjppdGVyYXRvciBpdHIsIGVuZDsKKyAgICBW
ZWN0b3I8VGhlbWVQYXJ0Q2FjaGVFbnRyeSo+OjppdGVyYXRvciBpdCwgZW5kOwogCi0gICAgaXRy
ID0gbV9wYXJ0Q2FjaGUuYmVnaW4oKTsKKyAgICBpdCA9IG1fcGFydENhY2hlLmJlZ2luKCk7CiAg
ICAgZW5kID0gbV9wYXJ0Q2FjaGUuZW5kKCk7Ci0gICAgZm9yICg7IGl0ciAhPSBlbmQ7IGl0cisr
KSB7Ci0gICAgICAgIHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5ICplbnRyeSA9ICppdHI7Ci0g
ICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShlbnRyeS0+c3VyZmFjZSk7Ci0gICAgICAgIGV2
YXNfb2JqZWN0X2RlbChlbnRyeS0+byk7Ci0gICAgICAgIGVjb3JlX2V2YXNfZnJlZShlbnRyeS0+
ZWUpOwotICAgICAgICBkZWxldGUgZW50cnk7Ci0gICAgfQorICAgIGZvciAoOyBpdCAhPSBlbmQ7
IGl0KyspCisgICAgICAgIGRlbGV0ZSAoKml0KTsKKwogICAgIG1fcGFydENhY2hlLmNsZWFyKCk7
CiB9CiAKQEAgLTMyNSw3ICszNTMsNyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFRoZW1l
UGFydChSZW5kZXJPYmplY3QqIG9iamVjdCwgRm9ybVR5cGUgdHlwZSwgY29uc3QgUAogICAgIEVp
bmFfTGlzdCogdXBkYXRlczsKICAgICBjYWlyb190KiBjYWlybzsKIAotICAgIGVudHJ5ID0gY2Fj
aGVUaGVtZVBhcnRHZXQodHlwZSwgcmVjdC5zaXplKCkpOworICAgIGVudHJ5ID0gZ2V0VGhlbWVQ
YXJ0RnJvbUNhY2hlKHR5cGUsIHJlY3Quc2l6ZSgpKTsKICAgICBpZiAoIWVudHJ5KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTQ1MSwzOCArNDc5LDQ5IEBAIHZvaWQgUmVuZGVyVGhlbWVF
Zmw6OnNldFRoZW1lUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgaWYgKHBhdGggPT0gbV90
aGVtZVBhdGgpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fdGhlbWVQYXRoID0gcGF0aDsKLQot
ICAgIGlmIChtX3RoZW1lUGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgRUlOQV9MT0dfRVJSKCJO
byB0aGVtZSBkZWZpbmVkLCB1bmFibGUgdG8gc2V0IHRoZW1lIGZvciBIVE1MIEZvcm1zLiIpOwor
ICAgIGlmIChwYXRoLmlzRW1wdHkoKSkgeworICAgICAgICBFSU5BX0xPR19DUklUKCJObyB2YWxp
ZCB0aGVtZSBkZWZpbmVkLCB0aGluZ3Mgd2lsbCBub3Qgd29yayBwcm9wZXJseS4iKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghbV9jYW52YXMpIHsKLSAgICAgICAgbV9jYW52
YXMgPSBlY29yZV9ldmFzX2J1ZmZlcl9uZXcoMSwgMSk7Ci0gICAgICAgIGlmICghbV9jYW52YXMp
Ci0gICAgICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBjcmVhdGUgY2FudmFzLiIpOwot
ICAgIH0KKyAgICBtX3RoZW1lUGF0aCA9IHBhdGg7CiAKICAgICBsb2FkVGhlbWUoKTsKIH0KIAor
U3RyaW5nIFJlbmRlclRoZW1lRWZsOjp0aGVtZVBhdGgoKSBjb25zdAoreworI2lmICFOREVCVUcK
KyAgICBpZiAobV9lZGplKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIHBhdGg7CisgICAgICAgIGVk
amVfb2JqZWN0X2ZpbGVfZ2V0KG8sICZwYXRoLCAwKTsKKyAgICAgICAgQVNTRVJUKG1fdGhlbWVQ
YXRoID09IHBhdGgpOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBtX3RoZW1lUGF0aDsKK30K
KwogYm9vbCBSZW5kZXJUaGVtZUVmbDo6bG9hZFRoZW1lKCkKIHsKKyAgICBBU1NFUlQoIW1fdGhl
bWVQYXRoLmlzRW1wdHkoKSk7CisKKyAgICBpZiAoIW1fY2FudmFzKSB7CisgICAgICAgIG1fY2Fu
dmFzID0gZWNvcmVfZXZhc19idWZmZXJfbmV3KDEsIDEpOworICAgICAgICBfQVNTRVJUX09OX1JF
TEVBU0VfUkVUVVJOX1ZBTChtX2NhbnZhcywgZmFsc2UsCisgICAgICAgICAgICAgICAgIkNvdWxk
IG5vdCBjcmVhdGUgY2FudmFzIHJlcXVpcmVkIGJ5IHRoZW1lLCB0aGluZ3Mgd2lsbCBub3Qgd29y
ayBwcm9wZXJseS4iKTsKKyAgICB9CisKICAgICBFdmFzX09iamVjdCogbyA9IGVkamVfb2JqZWN0
X2FkZChlY29yZV9ldmFzX2dldChtX2NhbnZhcykpOwogICAgIF9BU1NFUlRfT05fUkVMRUFTRV9S
RVRVUk5fVkFMKG8sIGZhbHNlLCAiQ291bGQgbm90IGNyZWF0ZSBuZXcgYmFzZSBFZGplIG9iamVj
dC4iKTsKIAotICAgIGlmICghZWRqZV9vYmplY3RfZmlsZV9zZXQobywgbV90aGVtZVBhdGgudXRm
OCgpLmRhdGEoKSwgIndlYmtpdC9iYXNlIikpIHsKLSAgICAgICAgRWRqZV9Mb2FkX0Vycm9yIGVy
ciA9IGVkamVfb2JqZWN0X2xvYWRfZXJyb3JfZ2V0KG8pOwotICAgICAgICBjb25zdCBjaGFyKiBl
cnJtc2cgPSBlZGplX2xvYWRfZXJyb3Jfc3RyKGVycik7Ci0gICAgICAgIEVJTkFfTE9HX0VSUigi
Q291bGQgbm90IHNldCBmaWxlICclcyc6ICVzIiwgbV90aGVtZVBhdGgudXRmOCgpLmRhdGEoKSwg
IGVycm1zZyk7CisgICAgaWYgKCFzZXRTb3VyY2VHcm91cEZvckVkamVPYmplY3QobywgbV90aGVt
ZVBhdGgsICJ3ZWJraXQvYmFzZSIpKSB7CiAgICAgICAgIGV2YXNfb2JqZWN0X2RlbChvKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBLZWVwIGN1cnJlbnQgdGhlbWUuCiAgICAgfQogCiAgICAg
Ly8gR2V0IHJpZCBvZiBleGlzdGluZyB0aGVtZS4KICAgICBpZiAobV9lZGplKSB7Ci0gICAgICAg
IGNhY2hlVGhlbWVQYXJ0Rmx1c2goKTsKKyAgICAgICAgZmx1c2hUaGVtZVBhcnRDYWNoZSgpOwog
ICAgICAgICBldmFzX29iamVjdF9kZWwobV9lZGplKTsKICAgICB9CiAKQEAgLTQ5Myw3ICs1MzIs
NyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpsb2FkVGhlbWUoKQogICAgIGVkamVfb2JqZWN0X3Np
Z25hbF9jYWxsYmFja19hZGQobV9lZGplLCAiY29sb3JfY2xhc3Msc2V0IiwgIndlYmtpdC9zZWxl
Y3Rpb24vaW5hY3RpdmUiLCBhcHBseUNvbG9yQ2FsbGJhY2ssIHRoaXMpOwogICAgIGVkamVfb2Jq
ZWN0X3NpZ25hbF9jYWxsYmFja19hZGQobV9lZGplLCAiY29sb3JfY2xhc3Msc2V0IiwgIndlYmtp
dC9mb2N1c19yaW5nIiwgYXBwbHlDb2xvckNhbGxiYWNrLCB0aGlzKTsKIAotICAgIGFwcGx5UGFy
dERlc2NyaXB0aW9uc0Zyb20obV9lZGplKTsKKyAgICBhcHBseVBhcnREZXNjcmlwdGlvbnNGcm9t
KG1fdGhlbWVQYXRoKTsKIAogICAgIHNldENvbG9yRnJvbVRoZW1lQ2xhc3MoIndlYmtpdC9zZWxl
Y3Rpb24vYWN0aXZlIik7CiAgICAgc2V0Q29sb3JGcm9tVGhlbWVDbGFzcygid2Via2l0L3NlbGVj
dGlvbi9pbmFjdGl2ZSIpOwpAQCAtNTY2LDc5ICs2MDUsMjEgQEAgdm9pZCBSZW5kZXJUaGVtZUVm
bDo6YXBwbHlQYXJ0RGVzY3JpcHRpb24oRXZhc19PYmplY3QqIG9iamVjdCwgc3RydWN0IFRoZW1l
UGFydEQKICAgICB9CiB9CiAKLWNvbnN0IGNoYXIqIFJlbmRlclRoZW1lRWZsOjplZGplR3JvdXBG
cm9tRm9ybVR5cGUoRm9ybVR5cGUgdHlwZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFw
cGx5UGFydERlc2NyaXB0aW9uc0Zyb20oY29uc3QgU3RyaW5nJiB0aGVtZVBhdGgpCiB7Ci0gICAg
c3RhdGljIGNvbnN0IGNoYXIqIGdyb3Vwc1tdID0gewotI2RlZmluZSBXKG4pICJ3ZWJraXQvd2lk
Z2V0LyJuCi0gICAgICAgIFcoImJ1dHRvbiIpLAotICAgICAgICBXKCJyYWRpbyIpLAotICAgICAg
ICBXKCJlbnRyeSIpLAotICAgICAgICBXKCJjaGVja2JveCIpLAotICAgICAgICBXKCJjb21ibyIp
LAotI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotICAgICAgICBXKCJwcm9ncmVzc2JhciIp
LAotI2VuZGlmCi0gICAgICAgIFcoInNlYXJjaC9maWVsZCIpLAotICAgICAgICBXKCJzZWFyY2gv
ZGVjb3JhdGlvbiIpLAotICAgICAgICBXKCJzZWFyY2gvcmVzdWx0c19idXR0b24iKSwKLSAgICAg
ICAgVygic2VhcmNoL3Jlc3VsdHNfZGVjb3JhdGlvbiIpLAotICAgICAgICBXKCJzZWFyY2gvY2Fu
Y2VsX2J1dHRvbiIpLAotICAgICAgICBXKCJzbGlkZXIvdmVydGljYWwiKSwKLSAgICAgICAgVygi
c2xpZGVyL2hvcml6b250YWwiKSwKLSAgICAgICAgVygic2xpZGVyL3RodW1iX3ZlcnRpY2FsIiks
Ci0gICAgICAgIFcoInNsaWRlci90aHVtYl9ob3Jpem9udGFsIiksCi0jaWYgRU5BQkxFKFZJREVP
KQotICAgICAgICBXKCJtZWRpYWNvbnRyb2wvcGxheXBhdXNlX2J1dHRvbiIpLAotICAgICAgICBX
KCJtZWRpYWNvbnRyb2wvbXV0ZV9idXR0b24iKSwKLSAgICAgICAgVygibWVkaWFjb250cm9sL3Nl
ZWtmb3J3YXJkX2J1dHRvbiIpLAotICAgICAgICBXKCJtZWRpYWNvbnRyb2wvc2Vla2JhY2t3YXJk
X2J1dHRvbiIpLAotICAgICAgICBXKCJtZWRpYWNvbnRyb2wvZnVsbHNjcmVlbl9idXR0b24iKSwK
LSNlbmRpZgotICAgICAgICBXKCJzcGlubmVyIiksCi0jdW5kZWYgVwotICAgICAgICAwCi0gICAg
fTsKLSAgICBBU1NFUlQodHlwZSA+PSAwKTsKLSAgICBBU1NFUlQoKHNpemVfdCl0eXBlIDwgc2l6
ZW9mKGdyb3VwcykgLyBzaXplb2YoZ3JvdXBzWzBdKSk7IC8vIG91dCBvZiBzeW5jPwotICAgIHJl
dHVybiBncm91cHNbdHlwZV07Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFwcGx5UGFydERl
c2NyaXB0aW9uc0Zyb20oRXZhc19PYmplY3QqIG8pCi17Ci0gICAgRXZhc19PYmplY3QqIG9iamVj
dDsKLSAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICBjb25zdCBjaGFyKiBmaWxlOwotCi0gICAgQVNT
RVJUKG8pOworICAgIEV2YXNfT2JqZWN0KiB0ZW1wID0gZWRqZV9vYmplY3RfYWRkKGVjb3JlX2V2
YXNfZ2V0KG1fY2FudmFzKSk7CisgICAgX0FTU0VSVF9PTl9SRUxFQVNFX1JFVFVSTih0ZW1wLCAi
Q291bGQgbm90IGNyZWF0ZSBFZGplIG9iamVjdC4iKTsKIAotICAgIGVkamVfb2JqZWN0X2ZpbGVf
Z2V0KG8sICZmaWxlLCAwKTsKLSAgICBBU1NFUlQoZmlsZSk7Ci0gICAgaWYgKCFmaWxlKSB7Ci0g
ICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IHJldHJpZXZlIEVkamUgdGhlbWUgZmlsZS4i
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG9iamVjdCA9IGVkamVfb2JqZWN0X2Fk
ZChlY29yZV9ldmFzX2dldChtX2NhbnZhcykpOwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAg
IEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGNyZWF0ZSBFZGplIG9iamVjdC4iKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGZvciAoaSA9IDA7IGkgPCBGb3JtVHlwZUxhc3Q7IGkrKykg
eworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGb3JtVHlwZUxhc3Q7IGkrKykgewogICAg
ICAgICBGb3JtVHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8Rm9ybVR5cGU+KGkpOwotICAgICAgICBj
b25zdCBjaGFyKiBncm91cCA9IGVkamVHcm91cEZyb21Gb3JtVHlwZSh0eXBlKTsKICAgICAgICAg
bV9wYXJ0RGVzY3NbaV0udHlwZSA9IHR5cGU7Ci0gICAgICAgIGlmICghZWRqZV9vYmplY3RfZmls
ZV9zZXQob2JqZWN0LCBmaWxlLCBncm91cCkpIHsKLSAgICAgICAgICAgIEVkamVfTG9hZF9FcnJv
ciBlcnIgPSBlZGplX29iamVjdF9sb2FkX2Vycm9yX2dldChvYmplY3QpOwotICAgICAgICAgICAg
Y29uc3QgY2hhciogZXJybXNnID0gZWRqZV9sb2FkX2Vycm9yX3N0cihlcnIpOwotICAgICAgICAg
ICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3Qgc2V0IHRoZW1lIGdyb3VwICclcycgb2YgZmlsZSAn
JXMnOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAsIGZpbGUsIGVycm1zZyk7
Ci0KKyAgICAgICAgaWYgKCFzZXRTb3VyY2VHcm91cEZvckVkamVPYmplY3QodGVtcCwgdGhlbWVQ
YXRoLCB0b0VkamVHcm91cCh0eXBlKSkpCiAgICAgICAgICAgICBhcHBseVBhcnREZXNjcmlwdGlv
bkZhbGxiYWNrKG1fcGFydERlc2NzICsgaSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
YXBwbHlQYXJ0RGVzY3JpcHRpb24ob2JqZWN0LCBtX3BhcnREZXNjcyArIGkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBhcHBseVBhcnREZXNjcmlwdGlvbih0ZW1wLCBtX3BhcnREZXNjcyAr
IGkpOwogICAgIH0KLSAgICBldmFzX29iamVjdF9kZWwob2JqZWN0KTsKKworICAgIGV2YXNfb2Jq
ZWN0X2RlbCh0ZW1wKTsKIH0KIAogUmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsKFBhZ2Uq
IHBhZ2UpCkBAIC02NjEsNyArNjQyLDcgQEAgUmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZs
KFBhZ2UqIHBhZ2UpCiAKIFJlbmRlclRoZW1lRWZsOjp+UmVuZGVyVGhlbWVFZmwoKQogewotICAg
IGNhY2hlVGhlbWVQYXJ0Rmx1c2goKTsKKyAgICBmbHVzaFRoZW1lUGFydENhY2hlKCk7CiAKICAg
ICBpZiAobV9jYW52YXMpIHsKICAgICAgICAgaWYgKG1fZWRqZSkKQEAgLTgzMSwxMSArODEyLDEw
IEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5CiAgICAgfQogCiAgICAgYWRqdXN0U2l6ZUNvbnN0
cmFpbnRzKHN0eWxlLCBDaGVja0JveCk7Ci0gICAgQVNTRVJUKG1fZWRqZSk7CiAKICAgICBzdHls
ZS0+cmVzZXRCb3JkZXIoKTsKIAotICAgIGNvbnN0IHN0cnVjdCBUaGVtZVBhcnREZXNjICpkZXNj
ID0gbV9wYXJ0RGVzY3MgKyAoc2l6ZV90KUNoZWNrQm94OworICAgIGNvbnN0IHN0cnVjdCBUaGVt
ZVBhcnREZXNjKiBkZXNjID0gbV9wYXJ0RGVzY3MgKyAoc2l6ZV90KUNoZWNrQm94OwogICAgIGlm
IChzdHlsZS0+d2lkdGgoKS52YWx1ZSgpIDwgZGVzYy0+bWluLndpZHRoKCkudmFsdWUoKSkKICAg
ICAgICAgc3R5bGUtPnNldFdpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKICAgICBpZiAoc3R5bGUt
PmhlaWdodCgpLnZhbHVlKCkgPCBkZXNjLT5taW4uaGVpZ2h0KCkudmFsdWUoKSkKQEAgLTg1NSwx
MSArODM1LDEwIEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFJhZGlvU3R5bGUoU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqCiAgICAgfQogCiAgICAgYWRqdXN0
U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBSYWRpb0J1dHRvbik7Ci0gICAgQVNTRVJUKG1fZWRqZSk7
CiAKICAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKIAotICAgIGNvbnN0IHN0cnVjdCBUaGVtZVBh
cnREZXNjICpkZXNjID0gbV9wYXJ0RGVzY3MgKyAoc2l6ZV90KVJhZGlvQnV0dG9uOworICAgIGNv
bnN0IHN0cnVjdCBUaGVtZVBhcnREZXNjKiBkZXNjID0gbV9wYXJ0RGVzY3MgKyAoc2l6ZV90KVJh
ZGlvQnV0dG9uOwogICAgIGlmIChzdHlsZS0+d2lkdGgoKS52YWx1ZSgpIDwgZGVzYy0+bWluLndp
ZHRoKCkudmFsdWUoKSkKICAgICAgICAgc3R5bGUtPnNldFdpZHRoKGRlc2MtPm1pbi53aWR0aCgp
KTsKICAgICBpZiAoc3R5bGUtPmhlaWdodCgpLnZhbHVlKCkgPCBkZXNjLT5taW4uaGVpZ2h0KCku
dmFsdWUoKSkKQEAgLTEwODYsOSArMTA2NSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OmVtaXRN
ZWRpYUJ1dHRvblNpZ25hbChGb3JtVHlwZSBmb3JtVHlwZSwgTWVkaWFDb250cm9sRWxlbWVuCiAg
ICAgbG9hZFRoZW1lSWZOZWVkZWQoKTsKICAgICBfQVNTRVJUX09OX1JFTEVBU0VfUkVUVVJOX1ZB
TChtX2VkamUsIGZhbHNlLCAiQ291bGQgbm90IHBhaW50IG5hdGl2ZSBIVE1MIHBhcnQgZHVlIHRv
IG1pc3NpbmcgdGhlbWUuIik7CiAKLSAgICBUaGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRyeTsKLQot
ICAgIGVudHJ5ID0gY2FjaGVUaGVtZVBhcnRHZXQoZm9ybVR5cGUsIHJlY3Quc2l6ZSgpKTsKKyAg
ICBUaGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRyeSA9IGdldFRoZW1lUGFydEZyb21DYWNoZShmb3Jt
VHlwZSwgcmVjdC5zaXplKCkpOwogICAgIF9BU1NFUlRfT05fUkVMRUFTRV9SRVRVUk5fVkFMKGVu
dHJ5LCBmYWxzZSwgIkNvdWxkIG5vdCBwYWludCBuYXRpdmUgSFRNTCBwYXJ0IGR1ZSB0byBtaXNz
aW5nIHRoZW1lIHBhcnQuIik7CiAKICAgICBpZiAobWVkaWFFbGVtZW50VHlwZSA9PSBNZWRpYVBs
YXlCdXR0b24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVy
VGhlbWVFZmwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5o
CmluZGV4IDAwNzM3NjY2MjU4NWFhYjBmOTM3ZTY0NWRmODMyNzczMDY4NzZiMjAuLmE5MGI0YjY1
M2NmOTgxZjE4OGFmZDQ5ZWNmMWJhMjA2ZDU5NjA2NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oCkBAIC0yMDMsNyArMjAzLDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZvaWQgc2V0VGhlbWVQYXRoKGNvbnN0
IFN0cmluZyYpOwotICAgIFN0cmluZyB0aGVtZVBhdGgoKSB7IHJldHVybiBtX3RoZW1lUGF0aDsg
fQorICAgIFN0cmluZyB0aGVtZVBhdGgoKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIHN0YXRp
YyBmbG9hdCBkZWZhdWx0Rm9udFNpemU7CkBAIC0yMTIsMTUgKzIxMiwxMyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbG9hZFRoZW1lKCk7CiAgICAgQUxXQVlTX0lOTElORSBib29sIGxvYWRUaGVtZUlm
TmVlZGVkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2VkamUgfHwgY29uc3RfY2Fz
dDxSZW5kZXJUaGVtZUVmbCo+KHRoaXMpLT5sb2FkVGhlbWUoKTsKKyAgICAgICAgcmV0dXJuIG1f
ZWRqZSB8fCAoIW1fdGhlbWVQYXRoLmlzRW1wdHkoKSAmJiBjb25zdF9jYXN0PFJlbmRlclRoZW1l
RWZsKj4odGhpcyktPmxvYWRUaGVtZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5UGFydERl
c2NyaXB0aW9uc0Zyb20oRXZhc19PYmplY3QqKTsKKyAgICB2b2lkIGFwcGx5UGFydERlc2NyaXB0
aW9uc0Zyb20oY29uc3QgU3RyaW5nJiB0aGVtZVBhdGgpOwogCi0gICAgY29uc3QgY2hhciogZWRq
ZUdyb3VwRnJvbUZvcm1UeXBlKEZvcm1UeXBlKSBjb25zdDsKICAgICB2b2lkIGFwcGx5RWRqZVN0
YXRlRnJvbUZvcm0oRXZhc19PYmplY3QqLCBDb250cm9sU3RhdGVzKTsKICAgICBib29sIHBhaW50
VGhlbWVQYXJ0KFJlbmRlck9iamVjdCosIEZvcm1UeXBlLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0gICAgYm9vbCBpc0Zvcm1FbGVtZW50VG9vTGFyZ2VUb0Rpc3BsYXkoY29u
c3QgSW50U2l6ZSYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGJvb2wgZW1pdE1lZGlhQnV0
dG9uU2lnbmFsKEZvcm1UeXBlLCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSwgY29uc3QgSW50UmVj
dCYpOwpAQCAtMjUzLDYgKzI1MSwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgYXBwbHlQYXJ0RGVz
Y3JpcHRpb24oRXZhc19PYmplY3QqLCBzdHJ1Y3QgVGhlbWVQYXJ0RGVzYyopOwogCiAgICAgc3Ry
dWN0IFRoZW1lUGFydENhY2hlRW50cnkgeworICAgICAgICBUaGVtZVBhcnRDYWNoZUVudHJ5KCk7
CisgICAgICAgIH5UaGVtZVBhcnRDYWNoZUVudHJ5KCk7CisgICAgICAgIHN0YXRpYyBUaGVtZVBh
cnRDYWNoZUVudHJ5KiBjcmVhdGUoY29uc3QgU3RyaW5nJiB0aGVtZVBhdGgsIEZvcm1UeXBlLCBj
b25zdCBJbnRTaXplJik7CisgICAgICAgIHZvaWQgcmV1c2UoY29uc3QgU3RyaW5nJiB0aGVtZVBh
dGgsIEZvcm1UeXBlLCBjb25zdCBJbnRTaXplJiBzaXplID0gSW50U2l6ZSgpKTsKKwogICAgICAg
ICBGb3JtVHlwZSB0eXBlOwogICAgICAgICBJbnRTaXplIHNpemU7CiAgICAgICAgIEVjb3JlX0V2
YXMqIGVlOwpAQCAtMjY0LDIwICsyNjcsMTAgQEAgcHJpdmF0ZToKIAogICAgIC8vIHRoaXMgc2hv
dWxkIGJlIHNtYWxsIGFuZCBub3Qgc28gZnJlcXVlbnRseSB1c2VkLAogICAgIC8vIHNvIHVzZSBh
IHZlY3RvciBhbmQgZG8gbGluZWFyIHNlYXJjaGVzCi0gICAgVmVjdG9yPHN0cnVjdCBUaGVtZVBh
cnRDYWNoZUVudHJ5ICo+IG1fcGFydENhY2hlOwotCi0gICAgLy8gZ2V0ICh1c2UsIGNyZWF0ZSBv
ciByZXBsYWNlKSBlbnRyeSBmcm9tIGNhY2hlCi0gICAgc3RydWN0IFRoZW1lUGFydENhY2hlRW50
cnkqIGNhY2hlVGhlbWVQYXJ0R2V0KEZvcm1UeXBlLCBjb25zdCBJbnRTaXplJik7Ci0gICAgLy8g
Zmx1c2ggY2FjaGUsIGRlbGV0aW5nIGFsbCBlbnRyaWVzCi0gICAgdm9pZCBjYWNoZVRoZW1lUGFy
dEZsdXNoKCk7Ci0KLSAgICAvLyBpbnRlcm5hbCwgdXNlZCBieSBjYWNoZVRoZW1lUGFydEdldCgp
Ci0gICAgYm9vbCB0aGVtZVBhcnRDYWNoZUVudHJ5UmVzZXQoc3RydWN0IFRoZW1lUGFydENhY2hl
RW50cnkqLCBGb3JtVHlwZSk7Ci0gICAgYm9vbCB0aGVtZVBhcnRDYWNoZUVudHJ5U3VyZmFjZUNy
ZWF0ZShzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSopOwotICAgIHN0cnVjdCBUaGVtZVBhcnRD
YWNoZUVudHJ5KiBjYWNoZVRoZW1lUGFydE5ldyhGb3JtVHlwZSwgY29uc3QgSW50U2l6ZSYpOwot
ICAgIHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5KiBjYWNoZVRoZW1lUGFydFJlc2V0KEZvcm1U
eXBlLCBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSopOwotICAgIHN0cnVjdCBUaGVtZVBhcnRD
YWNoZUVudHJ5KiBjYWNoZVRoZW1lUGFydFJlc2l6ZUFuZFJlc2V0KEZvcm1UeXBlLCBjb25zdCBJ
bnRTaXplJiwgc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqKTsKKyAgICBWZWN0b3I8VGhlbWVQ
YXJ0Q2FjaGVFbnRyeSo+IG1fcGFydENhY2hlOwogCisgICAgVGhlbWVQYXJ0Q2FjaGVFbnRyeSog
Z2V0VGhlbWVQYXJ0RnJvbUNhY2hlKEZvcm1UeXBlLCBjb25zdCBJbnRTaXplJik7CisgICAgdm9p
ZCBmbHVzaFRoZW1lUGFydENhY2hlKCk7CiB9OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163381</attachid>
            <date>2012-09-11 09:16:19 -0700</date>
            <delta_ts>2012-09-11 09:37:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96016-20120911181552.patch</filename>
            <type>text/plain</type>
            <size>25838</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGE4MDM1ZmVmZDk2MWVi
NzRmOWE5ZDVlZjVlYTFlM2E3YzJkYzcyNy4uZDRjMjVhMTg2MzYzNmMxYjk3NDExMjc2YzI4YmY1
M2E0ODJlNTEwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTA5LTEwICBLZW5u
ZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KKworICAgICAgICBb
RUZMXSBDbGVhbiB1cCB0aGUgUmVuZGVyVGhlbWUgRWRqZSBjYWNoaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjAxNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBFZGplIHBhcnRz
IGNhY2hpbmcgdG8gYmUgZWFzaWVyIHRvIHVuZGVyc3RhbmQgYW5kIHVzZQorICAgICAgICBwcm9w
ZXIgQysrIGNvbnN0cnVjdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVF
ZmwuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0VkamVHcm91
cCk6CisKKyAgICAgICAgICAgIENvbnZlcnRzIHRoZSBlbnVtIHRvIHRoZSBnaXZlbiBlZGplIGdy
b3VwIG5hbWUuCisKKyAgICAgICAgKFdlYkNvcmU6OnNldFNvdXJjZUdyb3VwRm9yRWRqZU9iamVj
dCk6CisKKyAgICAgICAgICAgIEJhc2ljYWxseSBhIHdyYXBwZXIgYXJvdW5kIGV2YXNfb2JqZWN0
X2ZpbGVfc2V0LCBidXQgaGFuZGxlcworICAgICAgICAgICAgZXJyb3JzLCB3aGljaCB3YXMgZG9u
ZSBzbGlnaHRseSBkaWZmZXJlbnRseSBhbGwgb3Zlci4KKworICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnk6OlRoZW1lUGFydENhY2hlRW50cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnk6On5U
aGVtZVBhcnRDYWNoZUVudHJ5KToKKworICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ2Fpcm9TdXJm
YWNlRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OmlzRm9ybUVsZW1lbnRUb29MYXJnZVRvRGlzcGxh
eSk6CisKKyAgICAgICAgICAgIE1ldGhvZHMgdXNlZCB3aGVuIGNyZWF0aW5nIFRoZW1lUGFydENh
Y2hlRW50cnknZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjpUaGVtZVBh
cnRDYWNoZUVudHJ5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6
OlRoZW1lUGFydENhY2hlRW50cnk6OnJldXNlKToKKworICAgICAgICAgICAgTmV3IG1ldGhvZHMg
Zm9yIGNyZWF0aW5nIGFuZCByZXVzaW5nIGFuIGNhY2hlIGVudHJ5LiBJZiB5b3UgZG8KKyAgICAg
ICAgICAgIG5vdCBzdXBwbHkgYSBuZXcgc2l6ZSwgdGhlIG9yaWdpbmFsIHNpemUgd2lsbCBiZSB1
c2VkLCBhbmQgaXQgaXMKKyAgICAgICAgICAgIHRodXMgbW9yZSBlZmZlY3RpdmUuCisKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjpnZXRUaGVtZVBhcnRGcm9tQ2FjaGUpOgorCisg
ICAgICAgICAgICBOZXcgbWV0aG9kIGZvciByZXF1ZXN0aW5nIGEgdGhlbWUgcGFydC4gSWYgaXQg
ZG9lc24ndCBleGlzdAorICAgICAgICAgICAgaXQgd2lsbCBhZGRpdGluYWxseSBiZSBsb2FkZWQg
YW5kIGFkZGVkIHRvIHRoZSBjYWNoZS4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVF
Zmw6OmZsdXNoVGhlbWVQYXJ0Q2FjaGUpOgorCisgICAgICAgICAgICBSZW1vdmUgdGhlIGVudGly
ZSBjYWNoZSBhbmQgZnJlZSB0aGUgYXNzZXRzLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUVmbDo6cGFpbnRUaGVtZVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVF
Zmw6OnRoZW1lUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6bG9hZFRo
ZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjphcHBseVBhcnREZXNjcmlw
dGlvbnNGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjp+UmVuZGVyVGhl
bWVFZmwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmVtaXRNZWRpYUJ1dHRv
blNpZ25hbCk6CisgICAgICAgICogcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmg6CisgICAg
ICAgIChSZW5kZXJUaGVtZUVmbCk6CisgICAgICAgIChUaGVtZVBhcnRDYWNoZUVudHJ5KToKKwog
MjAxMi0wOS0xMSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyODE3NS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwCmluZGV4IDRmYTEyNzRkYTI4YjQ5
ZWFiZWQwZTkxNmU4MDA4ZDkxNTM0ZDUxM2YuLjMwNjhkZDljMDUwYWFlMDFjMTkxNjJkYzcwMDhm
N2IwYzIwODEwZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5k
ZXJUaGVtZUVmbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRo
ZW1lRWZsLmNwcApAQCAtODQsMTIgKzg0LDY3IEBAIHN0YXRpYyBjb25zdCBpbnQgbWVkaWFTbGlk
ZXJUaHVtYkhlaWdodCA9IDEyOwogI2RlZmluZSBfQVNTRVJUX09OX1JFTEVBU0VfUkVUVVJOX1ZB
TChvLCB2YWwsIGZtdCwgLi4uKSBcCiAgICAgZG8geyBpZiAoIW8pIHsgRUlOQV9MT0dfQ1JJVChm
bXQsICMjIF9fVkFfQVJHU19fKTsgQVNTRVJUKG8pOyByZXR1cm4gdmFsOyB9IH0gd2hpbGUgKDAp
CiAKKworc3RhdGljIGNvbnN0IGNoYXIqIHRvRWRqZUdyb3VwKEZvcm1UeXBlIHR5cGUpCit7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGdyb3Vwc1tdID0geworI2RlZmluZSBXKG4pICJ3ZWJraXQv
d2lkZ2V0LyJuCisgICAgICAgIFcoImJ1dHRvbiIpLAorICAgICAgICBXKCJyYWRpbyIpLAorICAg
ICAgICBXKCJlbnRyeSIpLAorICAgICAgICBXKCJjaGVja2JveCIpLAorICAgICAgICBXKCJjb21i
byIpLAorI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQorICAgICAgICBXKCJwcm9ncmVzc2Jh
ciIpLAorI2VuZGlmCisgICAgICAgIFcoInNlYXJjaC9maWVsZCIpLAorICAgICAgICBXKCJzZWFy
Y2gvZGVjb3JhdGlvbiIpLAorICAgICAgICBXKCJzZWFyY2gvcmVzdWx0c19idXR0b24iKSwKKyAg
ICAgICAgVygic2VhcmNoL3Jlc3VsdHNfZGVjb3JhdGlvbiIpLAorICAgICAgICBXKCJzZWFyY2gv
Y2FuY2VsX2J1dHRvbiIpLAorICAgICAgICBXKCJzbGlkZXIvdmVydGljYWwiKSwKKyAgICAgICAg
Vygic2xpZGVyL2hvcml6b250YWwiKSwKKyAgICAgICAgVygic2xpZGVyL3RodW1iX3ZlcnRpY2Fs
IiksCisgICAgICAgIFcoInNsaWRlci90aHVtYl9ob3Jpem9udGFsIiksCisjaWYgRU5BQkxFKFZJ
REVPKQorICAgICAgICBXKCJtZWRpYWNvbnRyb2wvcGxheXBhdXNlX2J1dHRvbiIpLAorICAgICAg
ICBXKCJtZWRpYWNvbnRyb2wvbXV0ZV9idXR0b24iKSwKKyAgICAgICAgVygibWVkaWFjb250cm9s
L3NlZWtmb3J3YXJkX2J1dHRvbiIpLAorICAgICAgICBXKCJtZWRpYWNvbnRyb2wvc2Vla2JhY2t3
YXJkX2J1dHRvbiIpLAorICAgICAgICBXKCJtZWRpYWNvbnRyb2wvZnVsbHNjcmVlbl9idXR0b24i
KSwKKyNlbmRpZgorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICAgICAgVygibWVkaWFjb250
cm9sL3RvZ2dsZV9jYXB0aW9uc19idXR0b24iKSwKKyNlbmRpZgorICAgICAgICBXKCJzcGlubmVy
IiksCisjdW5kZWYgVworICAgICAgICAwCisgICAgfTsKKyAgICBBU1NFUlQodHlwZSA+PSAwKTsK
KyAgICBBU1NFUlQoKHNpemVfdCl0eXBlIDwgc2l6ZW9mKGdyb3VwcykgLyBzaXplb2YoZ3JvdXBz
WzBdKSk7IC8vIE91dCBvZiBzeW5jPworICAgIHJldHVybiBncm91cHNbdHlwZV07Cit9CisKK3N0
YXRpYyBib29sIHNldFNvdXJjZUdyb3VwRm9yRWRqZU9iamVjdChFdmFzX09iamVjdCogbywgY29u
c3QgU3RyaW5nJiB0aGVtZVBhdGgsIGNvbnN0IGNoYXIqIGdyb3VwKQoreworICAgIEFTU0VSVChv
KTsKKyAgICBBU1NFUlQoIXRoZW1lUGF0aC5pc0VtcHR5KCkpOworCisgICAgaWYgKCFlZGplX29i
amVjdF9maWxlX3NldChvLCB0aGVtZVBhdGgudXRmOCgpLmRhdGEoKSwgZ3JvdXApKSB7CisgICAg
ICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSBlZGplX2xvYWRfZXJyb3Jfc3RyKGVkamVfb2JqZWN0
X2xvYWRfZXJyb3JfZ2V0KG8pKTsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3Qgc2V0
IHRoZW1lIGdyb3VwICclcycgb2YgZmlsZSAnJXMnOiAlcyIsIGdyb3VwLCB0aGVtZVBhdGgudXRm
OCgpLmRhdGEoKSwgbWVzc2FnZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2l6ZUNvbnN0
cmFpbnRzKFJlbmRlclN0eWxlKiBzdHlsZSwgRm9ybVR5cGUgdHlwZSkgY29uc3QKIHsKICAgICBs
b2FkVGhlbWVJZk5lZWRlZCgpOwotICAgIF9BU1NFUlRfT05fUkVMRUFTRV9SRVRVUk4obV9lZGpl
LCAiQ291bGQgbm90IHBhaW50IG5hdGl2ZSBIVE1MIHBhcnQgZHVlIHRvIG1pc3NpbmcgdGhlbWUu
Iik7CiAKLSAgICBjb25zdCBzdHJ1Y3QgVGhlbWVQYXJ0RGVzYyogZGVzYyA9IG1fcGFydERlc2Nz
ICsgKHNpemVfdCl0eXBlOworICAgIC8vIFRoZXNlIGFyZSBhbHdheXMgdmFsaWQsIGV2ZW4gaWYg
bm8gdGhlbWUgY291bGQgYmUgbG9hZGVkLgorICAgIGNvbnN0IFRoZW1lUGFydERlc2MqIGRlc2Mg
PSBtX3BhcnREZXNjcyArIChzaXplX3QpdHlwZTsKIAogICAgIGlmIChzdHlsZS0+bWluV2lkdGgo
KS5pc0ludHJpbnNpYygpKQogICAgICAgICBzdHlsZS0+c2V0TWluV2lkdGgoZGVzYy0+bWluLndp
ZHRoKCkpOwpAQCAtMTA3LDUyICsxNjIsNDIgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0
U2l6ZUNvbnN0cmFpbnRzKFJlbmRlclN0eWxlKiBzdHlsZSwgRm9ybVR5cGUgdHlwZSkgY28KICAg
ICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KGRlc2MtPnBhZGRpbmcucmlnaHQoKSk7CiB9CiAKLWJv
b2wgUmVuZGVyVGhlbWVFZmw6OnRoZW1lUGFydENhY2hlRW50cnlSZXNldChzdHJ1Y3QgVGhlbWVQ
YXJ0Q2FjaGVFbnRyeSogZW50cnksIEZvcm1UeXBlIHR5cGUpCitSZW5kZXJUaGVtZUVmbDo6VGhl
bWVQYXJ0Q2FjaGVFbnRyeTo6VGhlbWVQYXJ0Q2FjaGVFbnRyeSgpCisgICAgOiBlZSgwKSwgbygw
KSwgc3VyZmFjZSgwKQogewotICAgIGNvbnN0IGNoYXIgKmZpbGUsICpncm91cDsKLQotICAgIEFT
U0VSVChlbnRyeSk7Ci0gICAgQVNTRVJUKG1fZWRqZSk7Ci0KLSAgICBlZGplX29iamVjdF9maWxl
X2dldChtX2VkamUsICZmaWxlLCAwKTsKLSAgICBncm91cCA9IGVkamVHcm91cEZyb21Gb3JtVHlw
ZSh0eXBlKTsKLSAgICBBU1NFUlQoZmlsZSk7Ci0gICAgQVNTRVJUKGdyb3VwKTsKK30KIAotICAg
IGlmICghZWRqZV9vYmplY3RfZmlsZV9zZXQoZW50cnktPm8sIGZpbGUsIGdyb3VwKSkgewotICAg
ICAgICBFZGplX0xvYWRfRXJyb3IgZXJyID0gZWRqZV9vYmplY3RfbG9hZF9lcnJvcl9nZXQoZW50
cnktPm8pOwotICAgICAgICBjb25zdCBjaGFyICplcnJtc2cgPSBlZGplX2xvYWRfZXJyb3Jfc3Ry
KGVycik7Ci0gICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGxvYWQgJyVzJyBmcm9tIHRo
ZW1lICVzOiAlcyIsIGdyb3VwLCBmaWxlLCBlcnJtc2cpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hl
RW50cnk6On5UaGVtZVBhcnRDYWNoZUVudHJ5KCkKK3sKKyAgICBpZiAoc3VyZmFjZSkKKyAgICAg
ICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOworICAgIGlmIChvKQorICAgICAgICBl
dmFzX29iamVjdF9kZWwobyk7CisgICAgaWYgKGVlKQorICAgICAgICBlY29yZV9ldmFzX2ZyZWUo
ZWUpOwogfQogCi1ib29sIFJlbmRlclRoZW1lRWZsOjp0aGVtZVBhcnRDYWNoZUVudHJ5U3VyZmFj
ZUNyZWF0ZShzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogZW50cnkpCitzdGF0aWMgY2Fpcm9f
c3VyZmFjZV90KiBjcmVhdGVDYWlyb1N1cmZhY2VGb3IoRWNvcmVfRXZhcyogZWUpCiB7Ci0gICAg
aW50IHcsIGg7Ci0gICAgY2Fpcm9fc3RhdHVzX3Qgc3RhdHVzOworICAgIEFTU0VSVChlZSk7CiAK
LSAgICBBU1NFUlQoZW50cnkpOwotICAgIEFTU0VSVChlbnRyeS0+ZWUpOworICAgIGludCB3aWR0
aCwgaGVpZ2h0OworICAgIGVjb3JlX2V2YXNfZ2VvbWV0cnlfZ2V0KGVlLCAwLCAwLCAmd2lkdGgs
ICZoZWlnaHQpOworICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7CiAKLSAgICBl
Y29yZV9ldmFzX2dlb21ldHJ5X2dldChlbnRyeS0+ZWUsIDAsIDAsICZ3LCAmaCk7Ci0gICAgQVNT
RVJUKHcgPiAwKTsKLSAgICBBU1NFUlQoaCA+IDApOworICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZl
ciA9ICh1bnNpZ25lZCBjaGFyKikoZWNvcmVfZXZhc19idWZmZXJfcGl4ZWxzX2dldChlZSkpOwor
ICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRl
X2Zvcl9kYXRhKGJ1ZmZlciwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgd2lkdGgsIGhlaWdodCwgd2lk
dGggKiA0KTsKIAotICAgIGVudHJ5LT5zdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVh
dGVfZm9yX2RhdGEoKHVuc2lnbmVkIGNoYXIgKillY29yZV9ldmFzX2J1ZmZlcl9waXhlbHNfZ2V0
KGVudHJ5LT5lZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLCB3LCBoLCB3ICogNCk7Ci0gICAgc3RhdHVz
ID0gY2Fpcm9fc3VyZmFjZV9zdGF0dXMoZW50cnktPnN1cmZhY2UpOworICAgIGNhaXJvX3N0YXR1
c190IHN0YXR1cyA9IGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpOwogICAgIGlmIChzdGF0
dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKLSAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3Vs
ZCBub3QgY3JlYXRlIGNhaXJvIHN1cmZhY2U6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgIGNh
aXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgY3JlYXRlIGNhaXJvIHN1cmZhY2U6ICVzIiwg
Y2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN1cmZhY2U7CiB9CiAKLWJvb2wgUmVu
ZGVyVGhlbWVFZmw6OmlzRm9ybUVsZW1lbnRUb29MYXJnZVRvRGlzcGxheShjb25zdCBJbnRTaXpl
JiBlbGVtZW50U2l6ZSkKK3N0YXRpYyBib29sIGlzRm9ybUVsZW1lbnRUb29MYXJnZVRvRGlzcGxh
eShjb25zdCBJbnRTaXplJiBlbGVtZW50U2l6ZSkKIHsKICAgICAvLyBUaGlzIGxpbWl0IG9mIDIw
MDAwIHBpeGVscyBpcyBoYXJkY29kZWQgaW5zaWRlIGVkamUgLS0gYW55dGhpbmcgYWJvdmUgdGhp
cyBzaXplCiAgICAgLy8gd2lsbCBiZSBjbGlwcGVkLiBUaGlzIHZhbHVlIHNlZW1zIHRvIGJlIHJl
YXNvbmFibGUgZW5vdWdoIHNvIHRoYXQgaGFyZGNvZGluZyBpdApAQCAtMTYyLDI1ICsyMDcsMjEg
QEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6aXNGb3JtRWxlbWVudFRvb0xhcmdlVG9EaXNwbGF5KGNv
bnN0IEludFNpemUmIGVsZW1lbnRTaXplKQogICAgIHJldHVybiBlbGVtZW50U2l6ZS53aWR0aCgp
ID4gbWF4RWRqZURpbWVuc2lvbiB8fCBlbGVtZW50U2l6ZS5oZWlnaHQoKSA+IG1heEVkamVEaW1l
bnNpb247CiB9CiAKLS8vIGFsbG9jYXRlIGEgbmV3IGVudHJ5IGFuZCBmaWxsIGl0IHdpdGggZWRq
ZSBncm91cAotc3RydWN0IFJlbmRlclRoZW1lRWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5KiBSZW5k
ZXJUaGVtZUVmbDo6Y2FjaGVUaGVtZVBhcnROZXcoRm9ybVR5cGUgdHlwZSwgY29uc3QgSW50U2l6
ZSYgc2l6ZSkKK1JlbmRlclRoZW1lRWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5KiBSZW5kZXJUaGVt
ZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdGhlbWVQYXRo
LCBGb3JtVHlwZSB0eXBlLCBjb25zdCBJbnRTaXplJiBzaXplKQogeworICAgIEFTU0VSVCghdGhl
bWVQYXRoLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKCFzaXplLmlzRW1wdHkoKSk7CisKICAgICBp
ZiAoaXNGb3JtRWxlbWVudFRvb0xhcmdlVG9EaXNwbGF5KHNpemUpKSB7CiAgICAgICAgIEVJTkFf
TE9HX0VSUigiQ2Fubm90IHJlbmRlciBhbiBlbGVtZW50IG9mIHNpemUgJWR4JWQuIiwgc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAg
VGhlbWVQYXJ0Q2FjaGVFbnRyeSogZW50cnkgPSBuZXcgVGhlbWVQYXJ0Q2FjaGVFbnRyeTsKLSAg
ICBpZiAoIWVudHJ5KSB7Ci0gICAgICAgIEVJTkFfTE9HX0VSUigiY291bGQgbm90IGFsbG9jYXRl
IFRoZW1lUGFydENhY2hlRW50cnkuIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBP
d25QdHI8VGhlbWVQYXJ0Q2FjaGVFbnRyeSo+IGVudHJ5ID0gYWRvcHRQdHIobmV3IFRoZW1lUGFy
dENhY2hlRW50cnkpOwogCiAgICAgZW50cnktPmVlID0gZWNvcmVfZXZhc19idWZmZXJfbmV3KHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgaWYgKCFlbnRyeS0+ZWUpIHsKLSAgICAg
ICAgRUlOQV9MT0dfRVJSKCJlY29yZV9ldmFzX2J1ZmZlcl9uZXcoJWQsICVkKSBmYWlsZWQuIiwK
LSAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAg
ICAgIGRlbGV0ZSBlbnRyeTsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJlY29yZV9ldmFzX2J1ZmZl
cl9uZXcoJWQsICVkKSBmYWlsZWQuIiwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xODksMTkgKzIzMCwxMyBAQCBzdHJ1Y3QgUmVu
ZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIFJlbmRlclRoZW1lRWZsOjpjYWNoZVRo
ZW1lUGFydE5ldyhGbwogCiAgICAgZW50cnktPm8gPSBlZGplX29iamVjdF9hZGQoZWNvcmVfZXZh
c19nZXQoZW50cnktPmVlKSk7CiAgICAgQVNTRVJUKGVudHJ5LT5vKTsKLSAgICBpZiAoIXRoZW1l
UGFydENhY2hlRW50cnlSZXNldChlbnRyeSwgdHlwZSkpIHsKLSAgICAgICAgZXZhc19vYmplY3Rf
ZGVsKGVudHJ5LT5vKTsKLSAgICAgICAgZWNvcmVfZXZhc19mcmVlKGVudHJ5LT5lZSk7Ci0gICAg
ICAgIGRlbGV0ZSBlbnRyeTsKKworICAgIGlmICghc2V0U291cmNlR3JvdXBGb3JFZGplT2JqZWN0
KGVudHJ5LT5vLCB0aGVtZVBhdGgsIHRvRWRqZUdyb3VwKHR5cGUpKSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQogCi0gICAgaWYgKCF0aGVtZVBhcnRDYWNoZUVudHJ5U3VyZmFjZUNyZWF0ZShl
bnRyeSkpIHsKLSAgICAgICAgZXZhc19vYmplY3RfZGVsKGVudHJ5LT5vKTsKLSAgICAgICAgZWNv
cmVfZXZhc19mcmVlKGVudHJ5LT5lZSk7Ci0gICAgICAgIGRlbGV0ZSBlbnRyeTsKKyAgICBlbnRy
eS0+c3VyZmFjZSA9IGNyZWF0ZUNhaXJvU3VyZmFjZUZvcihlbnRyeS0+ZWUpOworICAgIGlmICgh
ZW50cnktPnN1cmZhY2UpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KIAogICAgIGV2YXNfb2Jq
ZWN0X3Jlc2l6ZShlbnRyeS0+bywgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICBl
dmFzX29iamVjdF9zaG93KGVudHJ5LT5vKTsKQEAgLTIwOSw4NyArMjQ0LDg0IEBAIHN0cnVjdCBS
ZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeSogUmVuZGVyVGhlbWVFZmw6OmNhY2hl
VGhlbWVQYXJ0TmV3KEZvCiAgICAgZW50cnktPnR5cGUgPSB0eXBlOwogICAgIGVudHJ5LT5zaXpl
ID0gc2l6ZTsKIAotICAgIG1fcGFydENhY2hlLnByZXBlbmQoZW50cnkpOwotICAgIHJldHVybiBl
bnRyeTsKKyAgICByZXR1cm4gZW50cnkubGVha1B0cigpOwogfQogCi0vLyBqdXN0IGNoYW5nZSB0
aGUgZWRqZSBncm91cCBhbmQgcmV0dXJuIHRoZSBzYW1lIGVudHJ5Ci1zdHJ1Y3QgUmVuZGVyVGhl
bWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIFJlbmRlclRoZW1lRWZsOjpjYWNoZVRoZW1lUGFy
dFJlc2V0KEZvcm1UeXBlIHR5cGUsIHN0cnVjdCBSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2Fj
aGVFbnRyeSogZW50cnkpCit2b2lkIFJlbmRlclRoZW1lRWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5
OjpyZXVzZShjb25zdCBTdHJpbmcmIHRoZW1lUGF0aCwgRm9ybVR5cGUgbmV3VHlwZSwgY29uc3Qg
SW50U2l6ZSYgbmV3U2l6ZSkKIHsKLSAgICBpZiAoIXRoZW1lUGFydENhY2hlRW50cnlSZXNldChl
bnRyeSwgdHlwZSkpIHsKLSAgICAgICAgZW50cnktPnR5cGUgPSBGb3JtVHlwZUxhc3Q7IC8vIGlu
dmFsaWRhdGUKLSAgICAgICAgbV9wYXJ0Q2FjaGUuYXBwZW5kKGVudHJ5KTsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotICAgIGVudHJ5LT50eXBlID0gdHlwZTsKLSAgICBtX3BhcnRDYWNoZS5w
cmVwZW5kKGVudHJ5KTsKLSAgICByZXR1cm4gZW50cnk7Ci19CisgICAgQVNTRVJUKCF0aGVtZVBh
dGguaXNFbXB0eSgpKTsKIAotLy8gcmVzaXplIGVudHJ5IGFuZCByZXNldCBpdAotc3RydWN0IFJl
bmRlclRoZW1lRWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5KiBSZW5kZXJUaGVtZUVmbDo6Y2FjaGVU
aGVtZVBhcnRSZXNpemVBbmRSZXNldChGb3JtVHlwZSB0eXBlLCBjb25zdCBJbnRTaXplJiBzaXpl
LCBzdHJ1Y3QgUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIGVudHJ5KQotewot
ICAgIGNhaXJvX3N1cmZhY2VfZmluaXNoKGVudHJ5LT5zdXJmYWNlKTsKKyAgICBpZiAoIW5ld1Np
emUuaXNFbXB0eSgpKSB7CisgICAgICAgIGNhaXJvX3N1cmZhY2VfZmluaXNoKHN1cmZhY2UpOwog
Ci0gICAgZW50cnktPnNpemUgPSBzaXplOwotICAgIGVjb3JlX2V2YXNfcmVzaXplKGVudHJ5LT5l
ZSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLSAgICBldmFzX29iamVjdF9yZXNpemUo
ZW50cnktPm8sIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIHNpemUgPSBu
ZXdTaXplOworICAgICAgICBlY29yZV9ldmFzX3Jlc2l6ZShlZSwgbmV3U2l6ZS53aWR0aCgpLCBu
ZXdTaXplLmhlaWdodCgpKTsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKG8sIG5ld1NpemUu
d2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSk7CiAKLSAgICBpZiAoIXRoZW1lUGFydENhY2hlRW50
cnlTdXJmYWNlQ3JlYXRlKGVudHJ5KSkgewotICAgICAgICBldmFzX29iamVjdF9kZWwoZW50cnkt
Pm8pOwotICAgICAgICBlY29yZV9ldmFzX2ZyZWUoZW50cnktPmVlKTsKLSAgICAgICAgZGVsZXRl
IGVudHJ5OwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgc3VyZmFjZSA9IGNyZWF0ZUNhaXJv
U3VyZmFjZUZvcihlZSk7CisgICAgICAgIGlmICghc3VyZmFjZSkgeworICAgICAgICAgICAgdHlw
ZSA9IEZvcm1UeXBlTGFzdDsgLy8gSW52YWxpZGF0ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBjYWNoZVRoZW1lUGFydFJlc2V0KHR5cGUsIGVu
dHJ5KTsKKyAgICBpZiAoIXNldFNvdXJjZUdyb3VwRm9yRWRqZU9iamVjdChvLCB0aGVtZVBhdGgs
IHRvRWRqZUdyb3VwKG5ld1R5cGUpKSkgeworICAgICAgICB0eXBlID0gRm9ybVR5cGVMYXN0OyAv
LyBJbnZhbGlkYXRlLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdHlwZSA9IG5ld1R5
cGU7CiB9CiAKLS8vIGdlbmVyYWwgcHVycG9zZSBnZXQgKHdpbGwgY3JlYXRlLCByZXVzZSBhbmQg
YWxsKQotc3RydWN0IFJlbmRlclRoZW1lRWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5KiBSZW5kZXJU
aGVtZUVmbDo6Y2FjaGVUaGVtZVBhcnRHZXQoRm9ybVR5cGUgdHlwZSwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK1JlbmRlclRoZW1lRWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5KiBSZW5kZXJUaGVtZUVm
bDo6Z2V0VGhlbWVQYXJ0RnJvbUNhY2hlKEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFNpemUmIHNp
emUpCiB7Ci0gICAgVmVjdG9yPHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5ICo+OjppdGVyYXRv
ciBpdHIsIGVuZDsKLSAgICBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSAqY2VfbGFzdF9zaXpl
ID0gMDsKLSAgICBpbnQgaSwgaWR4TGFzdFNpemUgPSAtMTsKKyAgICBWZWN0b3I8VGhlbWVQYXJ0
Q2FjaGVFbnRyeSo+OjppdGVyYXRvciBpdCwgZW5kOworICAgIHNpemVfdCBsYXN0V2l0aFJlcXVl
c3RlZFNpemUgPSBub3RGb3VuZDsKIAotICAgIGl0ciA9IG1fcGFydENhY2hlLmJlZ2luKCk7Cisg
ICAgaXQgPSBtX3BhcnRDYWNoZS5iZWdpbigpOwogICAgIGVuZCA9IG1fcGFydENhY2hlLmVuZCgp
OwotICAgIGZvciAoaSA9IDA7IGl0ciAhPSBlbmQ7IGkrKywgaXRyKyspIHsKLSAgICAgICAgc3Ry
dWN0IFRoZW1lUGFydENhY2hlRW50cnkgKmVudHJ5ID0gKml0cjsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpdCAhPSBlbmQ7IGkrKywgaXQrKykgeworICAgICAgICBUaGVtZVBhcnRDYWNoZUVu
dHJ5KiBlbnRyeSA9ICppdDsKICAgICAgICAgaWYgKGVudHJ5LT5zaXplID09IHNpemUpIHsKICAg
ICAgICAgICAgIGlmIChlbnRyeS0+dHlwZSA9PSB0eXBlKQogICAgICAgICAgICAgICAgIHJldHVy
biBlbnRyeTsKLSAgICAgICAgICAgIGNlX2xhc3Rfc2l6ZSA9IGVudHJ5OwotICAgICAgICAgICAg
aWR4TGFzdFNpemUgPSBpOworICAgICAgICAgICAgbGFzdFdpdGhSZXF1ZXN0ZWRTaXplID0gaTsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX3BhcnRDYWNoZS5zaXplKCkgPCBSRU5ERVJf
VEhFTUVfRUZMX1BBUlRfQ0FDSEVfTUFYKQotICAgICAgICByZXR1cm4gY2FjaGVUaGVtZVBhcnRO
ZXcodHlwZSwgc2l6ZSk7CisgICAgaWYgKG1fcGFydENhY2hlLnNpemUoKSA8IFJFTkRFUl9USEVN
RV9FRkxfUEFSVF9DQUNIRV9NQVgpIHsKKyAgICAgICAgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogZW50
cnkgPSBUaGVtZVBhcnRDYWNoZUVudHJ5OjpjcmVhdGUodGhlbWVQYXRoKCksIHR5cGUsIHNpemUp
OworICAgICAgICBtX3BhcnRDYWNoZS5wcmVwZW5kKGVudHJ5KTsKKyAgICAgICAgcmV0dXJuIGVu
dHJ5OworICAgIH0KKworICAgIC8vIFdlIGhhdmUgYSBmdWxsIGNhY2hlIG5vdyEKKyAgICBFSU5B
X0xPR19JTkZPKCJSZW5kZXJUaGVtZSBjYWNoZSBpcyBmdWxsLCByZXVzaW5nLiIpOwogCi0gICAg
aWYgKGNlX2xhc3Rfc2l6ZSAmJiBjZV9sYXN0X3NpemUgIT0gbV9wYXJ0Q2FjaGUuZmlyc3QoKSkg
ewotICAgICAgICBtX3BhcnRDYWNoZS5yZW1vdmUoaWR4TGFzdFNpemUpOwotICAgICAgICByZXR1
cm4gY2FjaGVUaGVtZVBhcnRSZXNldCh0eXBlLCBjZV9sYXN0X3NpemUpOworICAgIGlmIChsYXN0
V2l0aFJlcXVlc3RlZFNpemUgIT0gbm90Rm91bmQgJiYgbGFzdFdpdGhSZXF1ZXN0ZWRTaXplICE9
IDEpIHsKKyAgICAgICAgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogZW50cnkgPSBtX3BhcnRDYWNoZS5h
dChsYXN0V2l0aFJlcXVlc3RlZFNpemUpOworICAgICAgICBlbnRyeS0+cmV1c2UodGhlbWVQYXRo
KCksIHR5cGUpOworICAgICAgICBtX3BhcnRDYWNoZS5yZW1vdmUobGFzdFdpdGhSZXF1ZXN0ZWRT
aXplKTsKKyAgICAgICAgbV9wYXJ0Q2FjaGUucHJlcGVuZChlbnRyeSk7CisgICAgICAgIHJldHVy
biBlbnRyeTsKICAgICB9CiAKICAgICBUaGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRyeSA9IG1fcGFy
dENhY2hlLmxhc3QoKTsKKyAgICBlbnRyeS0+cmV1c2UodGhlbWVQYXRoKCksIHR5cGUsIHNpemUp
OwogICAgIG1fcGFydENhY2hlLnJlbW92ZUxhc3QoKTsKLSAgICByZXR1cm4gY2FjaGVUaGVtZVBh
cnRSZXNpemVBbmRSZXNldCh0eXBlLCBzaXplLCBlbnRyeSk7CisgICAgbV9wYXJ0Q2FjaGUucHJl
cGVuZChlbnRyeSk7CisgICAgcmV0dXJuIGVudHJ5OwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZs
OjpjYWNoZVRoZW1lUGFydEZsdXNoKCkKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmZsdXNoVGhlbWVQ
YXJ0Q2FjaGUoKQogewotICAgIFZlY3RvcjxzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSAqPjo6
aXRlcmF0b3IgaXRyLCBlbmQ7CisgICAgVmVjdG9yPFRoZW1lUGFydENhY2hlRW50cnkqPjo6aXRl
cmF0b3IgaXQsIGVuZDsKIAotICAgIGl0ciA9IG1fcGFydENhY2hlLmJlZ2luKCk7CisgICAgaXQg
PSBtX3BhcnRDYWNoZS5iZWdpbigpOwogICAgIGVuZCA9IG1fcGFydENhY2hlLmVuZCgpOwotICAg
IGZvciAoOyBpdHIgIT0gZW5kOyBpdHIrKykgewotICAgICAgICBzdHJ1Y3QgVGhlbWVQYXJ0Q2Fj
aGVFbnRyeSAqZW50cnkgPSAqaXRyOwotICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koZW50
cnktPnN1cmZhY2UpOwotICAgICAgICBldmFzX29iamVjdF9kZWwoZW50cnktPm8pOwotICAgICAg
ICBlY29yZV9ldmFzX2ZyZWUoZW50cnktPmVlKTsKLSAgICAgICAgZGVsZXRlIGVudHJ5OwotICAg
IH0KKyAgICBmb3IgKDsgaXQgIT0gZW5kOyBpdCsrKQorICAgICAgICBkZWxldGUgKCppdCk7CisK
ICAgICBtX3BhcnRDYWNoZS5jbGVhcigpOwogfQogCkBAIC0zMjUsNyArMzU3LDcgQEAgYm9vbCBS
ZW5kZXJUaGVtZUVmbDo6cGFpbnRUaGVtZVBhcnQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEZvcm1U
eXBlIHR5cGUsIGNvbnN0IFAKICAgICBFaW5hX0xpc3QqIHVwZGF0ZXM7CiAgICAgY2Fpcm9fdCog
Y2Fpcm87CiAKLSAgICBlbnRyeSA9IGNhY2hlVGhlbWVQYXJ0R2V0KHR5cGUsIHJlY3Quc2l6ZSgp
KTsKKyAgICBlbnRyeSA9IGdldFRoZW1lUGFydEZyb21DYWNoZSh0eXBlLCByZWN0LnNpemUoKSk7
CiAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00NTEsMzggKzQ4
Myw0OSBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjpzZXRUaGVtZVBhdGgoY29uc3QgU3RyaW5nJiBw
YXRoKQogICAgIGlmIChwYXRoID09IG1fdGhlbWVQYXRoKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3RoZW1lUGF0aCA9IHBhdGg7Ci0KLSAgICBpZiAobV90aGVtZVBhdGguaXNFbXB0eSgpKSB7
Ci0gICAgICAgIEVJTkFfTE9HX0VSUigiTm8gdGhlbWUgZGVmaW5lZCwgdW5hYmxlIHRvIHNldCB0
aGVtZSBmb3IgSFRNTCBGb3Jtcy4iKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgRUlOQV9MT0dfQ1JJVCgiTm8gdmFsaWQgdGhlbWUgZGVmaW5lZCwgdGhpbmdzIHdpbGwgbm90
IHdvcmsgcHJvcGVybHkuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIW1f
Y2FudmFzKSB7Ci0gICAgICAgIG1fY2FudmFzID0gZWNvcmVfZXZhc19idWZmZXJfbmV3KDEsIDEp
OwotICAgICAgICBpZiAoIW1fY2FudmFzKQotICAgICAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3Vs
ZCBub3QgY3JlYXRlIGNhbnZhcy4iKTsKLSAgICB9CisgICAgbV90aGVtZVBhdGggPSBwYXRoOwog
CiAgICAgbG9hZFRoZW1lKCk7CiB9CiAKK1N0cmluZyBSZW5kZXJUaGVtZUVmbDo6dGhlbWVQYXRo
KCkgY29uc3QKK3sKKyNpZiAhTkRFQlVHCisgICAgaWYgKG1fZWRqZSkgeworICAgICAgICBjb25z
dCBjaGFyKiBwYXRoOworICAgICAgICBlZGplX29iamVjdF9maWxlX2dldChvLCAmcGF0aCwgMCk7
CisgICAgICAgIEFTU0VSVChtX3RoZW1lUGF0aCA9PSBwYXRoKTsKKyAgICB9CisjZW5kaWYKKyAg
ICByZXR1cm4gbV90aGVtZVBhdGg7Cit9CisKIGJvb2wgUmVuZGVyVGhlbWVFZmw6OmxvYWRUaGVt
ZSgpCiB7CisgICAgQVNTRVJUKCFtX3RoZW1lUGF0aC5pc0VtcHR5KCkpOworCisgICAgaWYgKCFt
X2NhbnZhcykgeworICAgICAgICBtX2NhbnZhcyA9IGVjb3JlX2V2YXNfYnVmZmVyX25ldygxLCAx
KTsKKyAgICAgICAgX0FTU0VSVF9PTl9SRUxFQVNFX1JFVFVSTl9WQUwobV9jYW52YXMsIGZhbHNl
LAorICAgICAgICAgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIGNhbnZhcyByZXF1aXJlZCBieSB0
aGVtZSwgdGhpbmdzIHdpbGwgbm90IHdvcmsgcHJvcGVybHkuIik7CisgICAgfQorCiAgICAgRXZh
c19PYmplY3QqIG8gPSBlZGplX29iamVjdF9hZGQoZWNvcmVfZXZhc19nZXQobV9jYW52YXMpKTsK
ICAgICBfQVNTRVJUX09OX1JFTEVBU0VfUkVUVVJOX1ZBTChvLCBmYWxzZSwgIkNvdWxkIG5vdCBj
cmVhdGUgbmV3IGJhc2UgRWRqZSBvYmplY3QuIik7CiAKLSAgICBpZiAoIWVkamVfb2JqZWN0X2Zp
bGVfc2V0KG8sIG1fdGhlbWVQYXRoLnV0ZjgoKS5kYXRhKCksICJ3ZWJraXQvYmFzZSIpKSB7Ci0g
ICAgICAgIEVkamVfTG9hZF9FcnJvciBlcnIgPSBlZGplX29iamVjdF9sb2FkX2Vycm9yX2dldChv
KTsKLSAgICAgICAgY29uc3QgY2hhciogZXJybXNnID0gZWRqZV9sb2FkX2Vycm9yX3N0cihlcnIp
OwotICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBzZXQgZmlsZSAnJXMnOiAlcyIsIG1f
dGhlbWVQYXRoLnV0ZjgoKS5kYXRhKCksICBlcnJtc2cpOworICAgIGlmICghc2V0U291cmNlR3Jv
dXBGb3JFZGplT2JqZWN0KG8sIG1fdGhlbWVQYXRoLCAid2Via2l0L2Jhc2UiKSkgewogICAgICAg
ICBldmFzX29iamVjdF9kZWwobyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gS2VlcCBjdXJy
ZW50IHRoZW1lLgogICAgIH0KIAogICAgIC8vIEdldCByaWQgb2YgZXhpc3RpbmcgdGhlbWUuCiAg
ICAgaWYgKG1fZWRqZSkgewotICAgICAgICBjYWNoZVRoZW1lUGFydEZsdXNoKCk7CisgICAgICAg
IGZsdXNoVGhlbWVQYXJ0Q2FjaGUoKTsKICAgICAgICAgZXZhc19vYmplY3RfZGVsKG1fZWRqZSk7
CiAgICAgfQogCkBAIC00OTMsNyArNTM2LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6bG9hZFRo
ZW1lKCkKICAgICBlZGplX29iamVjdF9zaWduYWxfY2FsbGJhY2tfYWRkKG1fZWRqZSwgImNvbG9y
X2NsYXNzLHNldCIsICJ3ZWJraXQvc2VsZWN0aW9uL2luYWN0aXZlIiwgYXBwbHlDb2xvckNhbGxi
YWNrLCB0aGlzKTsKICAgICBlZGplX29iamVjdF9zaWduYWxfY2FsbGJhY2tfYWRkKG1fZWRqZSwg
ImNvbG9yX2NsYXNzLHNldCIsICJ3ZWJraXQvZm9jdXNfcmluZyIsIGFwcGx5Q29sb3JDYWxsYmFj
aywgdGhpcyk7CiAKLSAgICBhcHBseVBhcnREZXNjcmlwdGlvbnNGcm9tKG1fZWRqZSk7CisgICAg
YXBwbHlQYXJ0RGVzY3JpcHRpb25zRnJvbShtX3RoZW1lUGF0aCk7CiAKICAgICBzZXRDb2xvckZy
b21UaGVtZUNsYXNzKCJ3ZWJraXQvc2VsZWN0aW9uL2FjdGl2ZSIpOwogICAgIHNldENvbG9yRnJv
bVRoZW1lQ2xhc3MoIndlYmtpdC9zZWxlY3Rpb24vaW5hY3RpdmUiKTsKQEAgLTUwNCw3ICs1NDcs
NyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpsb2FkVGhlbWUoKQogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseVBhcnREZXNjcmlwdGlvbkZhbGxiYWNrKHN0
cnVjdCBUaGVtZVBhcnREZXNjKiBkZXNjKQordm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlQYXJ0
RGVzY3JpcHRpb25GYWxsYmFjayhUaGVtZVBhcnREZXNjKiBkZXNjKQogewogICAgIGRlc2MtPm1p
bi5zZXRXaWR0aChMZW5ndGgoMCwgRml4ZWQpKTsKICAgICBkZXNjLT5taW4uc2V0SGVpZ2h0KExl
bmd0aCgwLCBGaXhlZCkpOwpAQCAtNTE1LDcgKzU1OCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6
OmFwcGx5UGFydERlc2NyaXB0aW9uRmFsbGJhY2soc3RydWN0IFRoZW1lUGFydERlc2MqIGRlc2Mp
CiAgICAgZGVzYy0+cGFkZGluZyA9IExlbmd0aEJveCgwLCAwLCAwLCAwKTsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZUVmbDo6YXBwbHlQYXJ0RGVzY3JpcHRpb24oRXZhc19PYmplY3QqIG9iamVjdCwg
c3RydWN0IFRoZW1lUGFydERlc2MqIGRlc2MpCit2b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseVBh
cnREZXNjcmlwdGlvbihFdmFzX09iamVjdCogb2JqZWN0LCBUaGVtZVBhcnREZXNjKiBkZXNjKQog
ewogICAgIEV2YXNfQ29vcmQgbWludywgbWluaCwgbWF4dywgbWF4aDsKIApAQCAtNTY2LDgyICs2
MDksMjEgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlQYXJ0RGVzY3JpcHRpb24oRXZhc19P
YmplY3QqIG9iamVjdCwgc3RydWN0IFRoZW1lUGFydEQKICAgICB9CiB9CiAKLWNvbnN0IGNoYXIq
IFJlbmRlclRoZW1lRWZsOjplZGplR3JvdXBGcm9tRm9ybVR5cGUoRm9ybVR5cGUgdHlwZSkgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFwcGx5UGFydERlc2NyaXB0aW9uc0Zyb20oY29uc3Qg
U3RyaW5nJiB0aGVtZVBhdGgpCiB7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGdyb3Vwc1tdID0g
ewotI2RlZmluZSBXKG4pICJ3ZWJraXQvd2lkZ2V0LyJuCi0gICAgICAgIFcoImJ1dHRvbiIpLAot
ICAgICAgICBXKCJyYWRpbyIpLAotICAgICAgICBXKCJlbnRyeSIpLAotICAgICAgICBXKCJjaGVj
a2JveCIpLAotICAgICAgICBXKCJjb21ibyIpLAotI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5U
KQotICAgICAgICBXKCJwcm9ncmVzc2JhciIpLAotI2VuZGlmCi0gICAgICAgIFcoInNlYXJjaC9m
aWVsZCIpLAotICAgICAgICBXKCJzZWFyY2gvZGVjb3JhdGlvbiIpLAotICAgICAgICBXKCJzZWFy
Y2gvcmVzdWx0c19idXR0b24iKSwKLSAgICAgICAgVygic2VhcmNoL3Jlc3VsdHNfZGVjb3JhdGlv
biIpLAotICAgICAgICBXKCJzZWFyY2gvY2FuY2VsX2J1dHRvbiIpLAotICAgICAgICBXKCJzbGlk
ZXIvdmVydGljYWwiKSwKLSAgICAgICAgVygic2xpZGVyL2hvcml6b250YWwiKSwKLSAgICAgICAg
Vygic2xpZGVyL3RodW1iX3ZlcnRpY2FsIiksCi0gICAgICAgIFcoInNsaWRlci90aHVtYl9ob3Jp
em9udGFsIiksCi0jaWYgRU5BQkxFKFZJREVPKQotICAgICAgICBXKCJtZWRpYWNvbnRyb2wvcGxh
eXBhdXNlX2J1dHRvbiIpLAotICAgICAgICBXKCJtZWRpYWNvbnRyb2wvbXV0ZV9idXR0b24iKSwK
LSAgICAgICAgVygibWVkaWFjb250cm9sL3NlZWtmb3J3YXJkX2J1dHRvbiIpLAotICAgICAgICBX
KCJtZWRpYWNvbnRyb2wvc2Vla2JhY2t3YXJkX2J1dHRvbiIpLAotICAgICAgICBXKCJtZWRpYWNv
bnRyb2wvZnVsbHNjcmVlbl9idXR0b24iKSwKLSNlbmRpZgotI2lmIEVOQUJMRShWSURFT19UUkFD
SykKLSAgICAgICAgVygibWVkaWFjb250cm9sL3RvZ2dsZV9jYXB0aW9uc19idXR0b24iKSwKLSNl
bmRpZgotICAgICAgICBXKCJzcGlubmVyIiksCi0jdW5kZWYgVwotICAgICAgICAwCi0gICAgfTsK
LSAgICBBU1NFUlQodHlwZSA+PSAwKTsKLSAgICBBU1NFUlQoKHNpemVfdCl0eXBlIDwgc2l6ZW9m
KGdyb3VwcykgLyBzaXplb2YoZ3JvdXBzWzBdKSk7IC8vIG91dCBvZiBzeW5jPwotICAgIHJldHVy
biBncm91cHNbdHlwZV07Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFwcGx5UGFydERlc2Ny
aXB0aW9uc0Zyb20oRXZhc19PYmplY3QqIG8pCi17Ci0gICAgRXZhc19PYmplY3QqIG9iamVjdDsK
LSAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICBjb25zdCBjaGFyKiBmaWxlOwotCi0gICAgQVNTRVJU
KG8pOworICAgIEV2YXNfT2JqZWN0KiB0ZW1wID0gZWRqZV9vYmplY3RfYWRkKGVjb3JlX2V2YXNf
Z2V0KG1fY2FudmFzKSk7CisgICAgX0FTU0VSVF9PTl9SRUxFQVNFX1JFVFVSTih0ZW1wLCAiQ291
bGQgbm90IGNyZWF0ZSBFZGplIG9iamVjdC4iKTsKIAotICAgIGVkamVfb2JqZWN0X2ZpbGVfZ2V0
KG8sICZmaWxlLCAwKTsKLSAgICBBU1NFUlQoZmlsZSk7Ci0gICAgaWYgKCFmaWxlKSB7Ci0gICAg
ICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IHJldHJpZXZlIEVkamUgdGhlbWUgZmlsZS4iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG9iamVjdCA9IGVkamVfb2JqZWN0X2FkZChl
Y29yZV9ldmFzX2dldChtX2NhbnZhcykpOwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIEVJ
TkFfTE9HX0VSUigiQ291bGQgbm90IGNyZWF0ZSBFZGplIG9iamVjdC4iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGZvciAoaSA9IDA7IGkgPCBGb3JtVHlwZUxhc3Q7IGkrKykgewor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGb3JtVHlwZUxhc3Q7IGkrKykgewogICAgICAg
ICBGb3JtVHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8Rm9ybVR5cGU+KGkpOwotICAgICAgICBjb25z
dCBjaGFyKiBncm91cCA9IGVkamVHcm91cEZyb21Gb3JtVHlwZSh0eXBlKTsKICAgICAgICAgbV9w
YXJ0RGVzY3NbaV0udHlwZSA9IHR5cGU7Ci0gICAgICAgIGlmICghZWRqZV9vYmplY3RfZmlsZV9z
ZXQob2JqZWN0LCBmaWxlLCBncm91cCkpIHsKLSAgICAgICAgICAgIEVkamVfTG9hZF9FcnJvciBl
cnIgPSBlZGplX29iamVjdF9sb2FkX2Vycm9yX2dldChvYmplY3QpOwotICAgICAgICAgICAgY29u
c3QgY2hhciogZXJybXNnID0gZWRqZV9sb2FkX2Vycm9yX3N0cihlcnIpOwotICAgICAgICAgICAg
RUlOQV9MT0dfRVJSKCJDb3VsZCBub3Qgc2V0IHRoZW1lIGdyb3VwICclcycgb2YgZmlsZSAnJXMn
OiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAsIGZpbGUsIGVycm1zZyk7Ci0K
KyAgICAgICAgaWYgKCFzZXRTb3VyY2VHcm91cEZvckVkamVPYmplY3QodGVtcCwgdGhlbWVQYXRo
LCB0b0VkamVHcm91cCh0eXBlKSkpCiAgICAgICAgICAgICBhcHBseVBhcnREZXNjcmlwdGlvbkZh
bGxiYWNrKG1fcGFydERlc2NzICsgaSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYXBw
bHlQYXJ0RGVzY3JpcHRpb24ob2JqZWN0LCBtX3BhcnREZXNjcyArIGkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBhcHBseVBhcnREZXNjcmlwdGlvbih0ZW1wLCBtX3BhcnREZXNjcyArIGkp
OwogICAgIH0KLSAgICBldmFzX29iamVjdF9kZWwob2JqZWN0KTsKKworICAgIGV2YXNfb2JqZWN0
X2RlbCh0ZW1wKTsKIH0KIAogUmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsKFBhZ2UqIHBh
Z2UpCkBAIC02NjQsNyArNjQ2LDcgQEAgUmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsKFBh
Z2UqIHBhZ2UpCiAKIFJlbmRlclRoZW1lRWZsOjp+UmVuZGVyVGhlbWVFZmwoKQogewotICAgIGNh
Y2hlVGhlbWVQYXJ0Rmx1c2goKTsKKyAgICBmbHVzaFRoZW1lUGFydENhY2hlKCk7CiAKICAgICBp
ZiAobV9jYW52YXMpIHsKICAgICAgICAgaWYgKG1fZWRqZSkKQEAgLTgzNCwxMSArODE2LDEwIEBA
IHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5CiAgICAgfQogCiAgICAgYWRqdXN0U2l6ZUNvbnN0cmFp
bnRzKHN0eWxlLCBDaGVja0JveCk7Ci0gICAgQVNTRVJUKG1fZWRqZSk7CiAKICAgICBzdHlsZS0+
cmVzZXRCb3JkZXIoKTsKIAotICAgIGNvbnN0IHN0cnVjdCBUaGVtZVBhcnREZXNjICpkZXNjID0g
bV9wYXJ0RGVzY3MgKyAoc2l6ZV90KUNoZWNrQm94OworICAgIGNvbnN0IFRoZW1lUGFydERlc2Mq
IGRlc2MgPSBtX3BhcnREZXNjcyArIChzaXplX3QpQ2hlY2tCb3g7CiAgICAgaWYgKHN0eWxlLT53
aWR0aCgpLnZhbHVlKCkgPCBkZXNjLT5taW4ud2lkdGgoKS52YWx1ZSgpKQogICAgICAgICBzdHls
ZS0+c2V0V2lkdGgoZGVzYy0+bWluLndpZHRoKCkpOwogICAgIGlmIChzdHlsZS0+aGVpZ2h0KCku
dmFsdWUoKSA8IGRlc2MtPm1pbi5oZWlnaHQoKS52YWx1ZSgpKQpAQCAtODU4LDExICs4MzksMTAg
QEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSoKICAgICB9CiAKICAgICBhZGp1c3RTaXplQ29uc3Ry
YWludHMoc3R5bGUsIFJhZGlvQnV0dG9uKTsKLSAgICBBU1NFUlQobV9lZGplKTsKIAogICAgIHN0
eWxlLT5yZXNldEJvcmRlcigpOwogCi0gICAgY29uc3Qgc3RydWN0IFRoZW1lUGFydERlc2MgKmRl
c2MgPSBtX3BhcnREZXNjcyArIChzaXplX3QpUmFkaW9CdXR0b247CisgICAgY29uc3QgVGhlbWVQ
YXJ0RGVzYyogZGVzYyA9IG1fcGFydERlc2NzICsgKHNpemVfdClSYWRpb0J1dHRvbjsKICAgICBp
ZiAoc3R5bGUtPndpZHRoKCkudmFsdWUoKSA8IGRlc2MtPm1pbi53aWR0aCgpLnZhbHVlKCkpCiAg
ICAgICAgIHN0eWxlLT5zZXRXaWR0aChkZXNjLT5taW4ud2lkdGgoKSk7CiAgICAgaWYgKHN0eWxl
LT5oZWlnaHQoKS52YWx1ZSgpIDwgZGVzYy0+bWluLmhlaWdodCgpLnZhbHVlKCkpCkBAIC0xMDg5
LDkgKzEwNjksNyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjplbWl0TWVkaWFCdXR0b25TaWduYWwo
Rm9ybVR5cGUgZm9ybVR5cGUsIE1lZGlhQ29udHJvbEVsZW1lbgogICAgIGxvYWRUaGVtZUlmTmVl
ZGVkKCk7CiAgICAgX0FTU0VSVF9PTl9SRUxFQVNFX1JFVFVSTl9WQUwobV9lZGplLCBmYWxzZSwg
IkNvdWxkIG5vdCBwYWludCBuYXRpdmUgSFRNTCBwYXJ0IGR1ZSB0byBtaXNzaW5nIHRoZW1lLiIp
OwogCi0gICAgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogZW50cnk7Ci0KLSAgICBlbnRyeSA9IGNhY2hl
VGhlbWVQYXJ0R2V0KGZvcm1UeXBlLCByZWN0LnNpemUoKSk7CisgICAgVGhlbWVQYXJ0Q2FjaGVF
bnRyeSogZW50cnkgPSBnZXRUaGVtZVBhcnRGcm9tQ2FjaGUoZm9ybVR5cGUsIHJlY3Quc2l6ZSgp
KTsKICAgICBfQVNTRVJUX09OX1JFTEVBU0VfUkVUVVJOX1ZBTChlbnRyeSwgZmFsc2UsICJDb3Vs
ZCBub3QgcGFpbnQgbmF0aXZlIEhUTUwgcGFydCBkdWUgdG8gbWlzc2luZyB0aGVtZSBwYXJ0LiIp
OwogCiAgICAgaWYgKG1lZGlhRWxlbWVudFR5cGUgPT0gTWVkaWFQbGF5QnV0dG9uKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuaAppbmRleCBjMTI2ZjBhOTQ3
MGJmZDMxOThmNmE2ZDFiZGVkMzcwMGUxMTkzOGRiLi5mMjE1OWVkMjQzNDY1N2ZjMTkyZTdhMGVl
YTM1YjcwMzhiNWE4MzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwv
UmVuZGVyVGhlbWVFZmwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVy
VGhlbWVFZmwuaApAQCAtMjEwLDcgKzIxMCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biB0cnVlOyB9CiAKICAgICB2b2lkIHNldFRoZW1lUGF0aChjb25zdCBTdHJpbmcmKTsKLSAgICBT
dHJpbmcgdGhlbWVQYXRoKCkgeyByZXR1cm4gbV90aGVtZVBhdGg7IH0KKyAgICBTdHJpbmcgdGhl
bWVQYXRoKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgZmxvYXQgZGVmYXVsdEZv
bnRTaXplOwpAQCAtMjE5LDE1ICsyMTksMTMgQEAgcHJpdmF0ZToKICAgICBib29sIGxvYWRUaGVt
ZSgpOwogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBsb2FkVGhlbWVJZk5lZWRlZCgpIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gbV9lZGplIHx8IGNvbnN0X2Nhc3Q8UmVuZGVyVGhlbWVFZmwq
Pih0aGlzKS0+bG9hZFRoZW1lKCk7CisgICAgICAgIHJldHVybiBtX2VkamUgfHwgKCFtX3RoZW1l
UGF0aC5pc0VtcHR5KCkgJiYgY29uc3RfY2FzdDxSZW5kZXJUaGVtZUVmbCo+KHRoaXMpLT5sb2Fk
VGhlbWUoKSk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBseVBhcnREZXNjcmlwdGlvbnNGcm9tKEV2
YXNfT2JqZWN0Kik7CisgICAgdm9pZCBhcHBseVBhcnREZXNjcmlwdGlvbnNGcm9tKGNvbnN0IFN0
cmluZyYgdGhlbWVQYXRoKTsKIAotICAgIGNvbnN0IGNoYXIqIGVkamVHcm91cEZyb21Gb3JtVHlw
ZShGb3JtVHlwZSkgY29uc3Q7CiAgICAgdm9pZCBhcHBseUVkamVTdGF0ZUZyb21Gb3JtKEV2YXNf
T2JqZWN0KiwgQ29udHJvbFN0YXRlcyk7CiAgICAgYm9vbCBwYWludFRoZW1lUGFydChSZW5kZXJP
YmplY3QqLCBGb3JtVHlwZSwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAg
IGJvb2wgaXNGb3JtRWxlbWVudFRvb0xhcmdlVG9EaXNwbGF5KGNvbnN0IEludFNpemUmKTsKIAog
I2lmIEVOQUJMRShWSURFTykKICAgICBib29sIGVtaXRNZWRpYUJ1dHRvblNpZ25hbChGb3JtVHlw
ZSwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUsIGNvbnN0IEludFJlY3QmKTsKQEAgLTI2MCw2ICsy
NTgsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGx5UGFydERlc2NyaXB0aW9uKEV2YXNfT2Jq
ZWN0Kiwgc3RydWN0IFRoZW1lUGFydERlc2MqKTsKIAogICAgIHN0cnVjdCBUaGVtZVBhcnRDYWNo
ZUVudHJ5IHsKKyAgICAgICAgVGhlbWVQYXJ0Q2FjaGVFbnRyeSgpOworICAgICAgICB+VGhlbWVQ
YXJ0Q2FjaGVFbnRyeSgpOworICAgICAgICBzdGF0aWMgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY3Jl
YXRlKGNvbnN0IFN0cmluZyYgdGhlbWVQYXRoLCBGb3JtVHlwZSwgY29uc3QgSW50U2l6ZSYpOwor
ICAgICAgICB2b2lkIHJldXNlKGNvbnN0IFN0cmluZyYgdGhlbWVQYXRoLCBGb3JtVHlwZSwgY29u
c3QgSW50U2l6ZSYgc2l6ZSA9IEludFNpemUoKSk7CisKICAgICAgICAgRm9ybVR5cGUgdHlwZTsK
ICAgICAgICAgSW50U2l6ZSBzaXplOwogICAgICAgICBFY29yZV9FdmFzKiBlZTsKQEAgLTI3MSwy
MCArMjc0LDEwIEBAIHByaXZhdGU6CiAKICAgICAvLyB0aGlzIHNob3VsZCBiZSBzbWFsbCBhbmQg
bm90IHNvIGZyZXF1ZW50bHkgdXNlZCwKICAgICAvLyBzbyB1c2UgYSB2ZWN0b3IgYW5kIGRvIGxp
bmVhciBzZWFyY2hlcwotICAgIFZlY3RvcjxzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSAqPiBt
X3BhcnRDYWNoZTsKLQotICAgIC8vIGdldCAodXNlLCBjcmVhdGUgb3IgcmVwbGFjZSkgZW50cnkg
ZnJvbSBjYWNoZQotICAgIHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5KiBjYWNoZVRoZW1lUGFy
dEdldChGb3JtVHlwZSwgY29uc3QgSW50U2l6ZSYpOwotICAgIC8vIGZsdXNoIGNhY2hlLCBkZWxl
dGluZyBhbGwgZW50cmllcwotICAgIHZvaWQgY2FjaGVUaGVtZVBhcnRGbHVzaCgpOwotCi0gICAg
Ly8gaW50ZXJuYWwsIHVzZWQgYnkgY2FjaGVUaGVtZVBhcnRHZXQoKQotICAgIGJvb2wgdGhlbWVQ
YXJ0Q2FjaGVFbnRyeVJlc2V0KHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5KiwgRm9ybVR5cGUp
OwotICAgIGJvb2wgdGhlbWVQYXJ0Q2FjaGVFbnRyeVN1cmZhY2VDcmVhdGUoc3RydWN0IFRoZW1l
UGFydENhY2hlRW50cnkqKTsKLSAgICBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY2FjaGVU
aGVtZVBhcnROZXcoRm9ybVR5cGUsIGNvbnN0IEludFNpemUmKTsKLSAgICBzdHJ1Y3QgVGhlbWVQ
YXJ0Q2FjaGVFbnRyeSogY2FjaGVUaGVtZVBhcnRSZXNldChGb3JtVHlwZSwgc3RydWN0IFRoZW1l
UGFydENhY2hlRW50cnkqKTsKLSAgICBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY2FjaGVU
aGVtZVBhcnRSZXNpemVBbmRSZXNldChGb3JtVHlwZSwgY29uc3QgSW50U2l6ZSYsIHN0cnVjdCBU
aGVtZVBhcnRDYWNoZUVudHJ5Kik7CisgICAgVmVjdG9yPFRoZW1lUGFydENhY2hlRW50cnkqPiBt
X3BhcnRDYWNoZTsKIAorICAgIFRoZW1lUGFydENhY2hlRW50cnkqIGdldFRoZW1lUGFydEZyb21D
YWNoZShGb3JtVHlwZSwgY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgZmx1c2hUaGVtZVBhcnRD
YWNoZSgpOwogfTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163386</attachid>
            <date>2012-09-11 09:37:08 -0700</date>
            <delta_ts>2012-09-12 00:55:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96016-20120911183641.patch</filename>
            <type>text/plain</type>
            <size>25859</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGE4MDM1ZmVmZDk2MWVi
NzRmOWE5ZDVlZjVlYTFlM2E3YzJkYzcyNy4uZDRjMjVhMTg2MzYzNmMxYjk3NDExMjc2YzI4YmY1
M2E0ODJlNTEwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTA5LTEwICBLZW5u
ZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KKworICAgICAgICBb
RUZMXSBDbGVhbiB1cCB0aGUgUmVuZGVyVGhlbWUgRWRqZSBjYWNoaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjAxNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBFZGplIHBhcnRz
IGNhY2hpbmcgdG8gYmUgZWFzaWVyIHRvIHVuZGVyc3RhbmQgYW5kIHVzZQorICAgICAgICBwcm9w
ZXIgQysrIGNvbnN0cnVjdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVF
ZmwuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0VkamVHcm91
cCk6CisKKyAgICAgICAgICAgIENvbnZlcnRzIHRoZSBlbnVtIHRvIHRoZSBnaXZlbiBlZGplIGdy
b3VwIG5hbWUuCisKKyAgICAgICAgKFdlYkNvcmU6OnNldFNvdXJjZUdyb3VwRm9yRWRqZU9iamVj
dCk6CisKKyAgICAgICAgICAgIEJhc2ljYWxseSBhIHdyYXBwZXIgYXJvdW5kIGV2YXNfb2JqZWN0
X2ZpbGVfc2V0LCBidXQgaGFuZGxlcworICAgICAgICAgICAgZXJyb3JzLCB3aGljaCB3YXMgZG9u
ZSBzbGlnaHRseSBkaWZmZXJlbnRseSBhbGwgb3Zlci4KKworICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnk6OlRoZW1lUGFydENhY2hlRW50cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnk6On5U
aGVtZVBhcnRDYWNoZUVudHJ5KToKKworICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ2Fpcm9TdXJm
YWNlRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OmlzRm9ybUVsZW1lbnRUb29MYXJnZVRvRGlzcGxh
eSk6CisKKyAgICAgICAgICAgIE1ldGhvZHMgdXNlZCB3aGVuIGNyZWF0aW5nIFRoZW1lUGFydENh
Y2hlRW50cnknZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjpUaGVtZVBh
cnRDYWNoZUVudHJ5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6
OlRoZW1lUGFydENhY2hlRW50cnk6OnJldXNlKToKKworICAgICAgICAgICAgTmV3IG1ldGhvZHMg
Zm9yIGNyZWF0aW5nIGFuZCByZXVzaW5nIGFuIGNhY2hlIGVudHJ5LiBJZiB5b3UgZG8KKyAgICAg
ICAgICAgIG5vdCBzdXBwbHkgYSBuZXcgc2l6ZSwgdGhlIG9yaWdpbmFsIHNpemUgd2lsbCBiZSB1
c2VkLCBhbmQgaXQgaXMKKyAgICAgICAgICAgIHRodXMgbW9yZSBlZmZlY3RpdmUuCisKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjpnZXRUaGVtZVBhcnRGcm9tQ2FjaGUpOgorCisg
ICAgICAgICAgICBOZXcgbWV0aG9kIGZvciByZXF1ZXN0aW5nIGEgdGhlbWUgcGFydC4gSWYgaXQg
ZG9lc24ndCBleGlzdAorICAgICAgICAgICAgaXQgd2lsbCBhZGRpdGluYWxseSBiZSBsb2FkZWQg
YW5kIGFkZGVkIHRvIHRoZSBjYWNoZS4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVF
Zmw6OmZsdXNoVGhlbWVQYXJ0Q2FjaGUpOgorCisgICAgICAgICAgICBSZW1vdmUgdGhlIGVudGly
ZSBjYWNoZSBhbmQgZnJlZSB0aGUgYXNzZXRzLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUVmbDo6cGFpbnRUaGVtZVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVF
Zmw6OnRoZW1lUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6bG9hZFRo
ZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjphcHBseVBhcnREZXNjcmlw
dGlvbnNGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjp+UmVuZGVyVGhl
bWVFZmwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmVtaXRNZWRpYUJ1dHRv
blNpZ25hbCk6CisgICAgICAgICogcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmg6CisgICAg
ICAgIChSZW5kZXJUaGVtZUVmbCk6CisgICAgICAgIChUaGVtZVBhcnRDYWNoZUVudHJ5KToKKwog
MjAxMi0wOS0xMSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyODE3NS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwCmluZGV4IDRmYTEyNzRkYTI4YjQ5
ZWFiZWQwZTkxNmU4MDA4ZDkxNTM0ZDUxM2YuLjRjYjFhYjZkN2E3ZjUyN2Y5OGY3YTQ5MTFjOWY2
NTQyYmYzZmVjMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5k
ZXJUaGVtZUVmbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRo
ZW1lRWZsLmNwcApAQCAtODQsMTIgKzg0LDY3IEBAIHN0YXRpYyBjb25zdCBpbnQgbWVkaWFTbGlk
ZXJUaHVtYkhlaWdodCA9IDEyOwogI2RlZmluZSBfQVNTRVJUX09OX1JFTEVBU0VfUkVUVVJOX1ZB
TChvLCB2YWwsIGZtdCwgLi4uKSBcCiAgICAgZG8geyBpZiAoIW8pIHsgRUlOQV9MT0dfQ1JJVChm
bXQsICMjIF9fVkFfQVJHU19fKTsgQVNTRVJUKG8pOyByZXR1cm4gdmFsOyB9IH0gd2hpbGUgKDAp
CiAKKworc3RhdGljIGNvbnN0IGNoYXIqIHRvRWRqZUdyb3VwKEZvcm1UeXBlIHR5cGUpCit7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGdyb3Vwc1tdID0geworI2RlZmluZSBXKG4pICJ3ZWJraXQv
d2lkZ2V0LyJuCisgICAgICAgIFcoImJ1dHRvbiIpLAorICAgICAgICBXKCJyYWRpbyIpLAorICAg
ICAgICBXKCJlbnRyeSIpLAorICAgICAgICBXKCJjaGVja2JveCIpLAorICAgICAgICBXKCJjb21i
byIpLAorI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQorICAgICAgICBXKCJwcm9ncmVzc2Jh
ciIpLAorI2VuZGlmCisgICAgICAgIFcoInNlYXJjaC9maWVsZCIpLAorICAgICAgICBXKCJzZWFy
Y2gvZGVjb3JhdGlvbiIpLAorICAgICAgICBXKCJzZWFyY2gvcmVzdWx0c19idXR0b24iKSwKKyAg
ICAgICAgVygic2VhcmNoL3Jlc3VsdHNfZGVjb3JhdGlvbiIpLAorICAgICAgICBXKCJzZWFyY2gv
Y2FuY2VsX2J1dHRvbiIpLAorICAgICAgICBXKCJzbGlkZXIvdmVydGljYWwiKSwKKyAgICAgICAg
Vygic2xpZGVyL2hvcml6b250YWwiKSwKKyAgICAgICAgVygic2xpZGVyL3RodW1iX3ZlcnRpY2Fs
IiksCisgICAgICAgIFcoInNsaWRlci90aHVtYl9ob3Jpem9udGFsIiksCisjaWYgRU5BQkxFKFZJ
REVPKQorICAgICAgICBXKCJtZWRpYWNvbnRyb2wvcGxheXBhdXNlX2J1dHRvbiIpLAorICAgICAg
ICBXKCJtZWRpYWNvbnRyb2wvbXV0ZV9idXR0b24iKSwKKyAgICAgICAgVygibWVkaWFjb250cm9s
L3NlZWtmb3J3YXJkX2J1dHRvbiIpLAorICAgICAgICBXKCJtZWRpYWNvbnRyb2wvc2Vla2JhY2t3
YXJkX2J1dHRvbiIpLAorICAgICAgICBXKCJtZWRpYWNvbnRyb2wvZnVsbHNjcmVlbl9idXR0b24i
KSwKKyNlbmRpZgorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICAgICAgVygibWVkaWFjb250
cm9sL3RvZ2dsZV9jYXB0aW9uc19idXR0b24iKSwKKyNlbmRpZgorICAgICAgICBXKCJzcGlubmVy
IiksCisjdW5kZWYgVworICAgICAgICAwCisgICAgfTsKKyAgICBBU1NFUlQodHlwZSA+PSAwKTsK
KyAgICBBU1NFUlQoKHNpemVfdCl0eXBlIDwgc2l6ZW9mKGdyb3VwcykgLyBzaXplb2YoZ3JvdXBz
WzBdKSk7IC8vIE91dCBvZiBzeW5jPworICAgIHJldHVybiBncm91cHNbdHlwZV07Cit9CisKK3N0
YXRpYyBib29sIHNldFNvdXJjZUdyb3VwRm9yRWRqZU9iamVjdChFdmFzX09iamVjdCogbywgY29u
c3QgU3RyaW5nJiB0aGVtZVBhdGgsIGNvbnN0IGNoYXIqIGdyb3VwKQoreworICAgIEFTU0VSVChv
KTsKKyAgICBBU1NFUlQoIXRoZW1lUGF0aC5pc0VtcHR5KCkpOworCisgICAgaWYgKCFlZGplX29i
amVjdF9maWxlX3NldChvLCB0aGVtZVBhdGgudXRmOCgpLmRhdGEoKSwgZ3JvdXApKSB7CisgICAg
ICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSBlZGplX2xvYWRfZXJyb3Jfc3RyKGVkamVfb2JqZWN0
X2xvYWRfZXJyb3JfZ2V0KG8pKTsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3Qgc2V0
IHRoZW1lIGdyb3VwICclcycgb2YgZmlsZSAnJXMnOiAlcyIsIGdyb3VwLCB0aGVtZVBhdGgudXRm
OCgpLmRhdGEoKSwgbWVzc2FnZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2l6ZUNvbnN0
cmFpbnRzKFJlbmRlclN0eWxlKiBzdHlsZSwgRm9ybVR5cGUgdHlwZSkgY29uc3QKIHsKICAgICBs
b2FkVGhlbWVJZk5lZWRlZCgpOwotICAgIF9BU1NFUlRfT05fUkVMRUFTRV9SRVRVUk4obV9lZGpl
LCAiQ291bGQgbm90IHBhaW50IG5hdGl2ZSBIVE1MIHBhcnQgZHVlIHRvIG1pc3NpbmcgdGhlbWUu
Iik7CiAKLSAgICBjb25zdCBzdHJ1Y3QgVGhlbWVQYXJ0RGVzYyogZGVzYyA9IG1fcGFydERlc2Nz
ICsgKHNpemVfdCl0eXBlOworICAgIC8vIFRoZXNlIGFyZSBhbHdheXMgdmFsaWQsIGV2ZW4gaWYg
bm8gdGhlbWUgY291bGQgYmUgbG9hZGVkLgorICAgIGNvbnN0IFRoZW1lUGFydERlc2MqIGRlc2Mg
PSBtX3BhcnREZXNjcyArIChzaXplX3QpdHlwZTsKIAogICAgIGlmIChzdHlsZS0+bWluV2lkdGgo
KS5pc0ludHJpbnNpYygpKQogICAgICAgICBzdHlsZS0+c2V0TWluV2lkdGgoZGVzYy0+bWluLndp
ZHRoKCkpOwpAQCAtMTA3LDUyICsxNjIsNDIgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0
U2l6ZUNvbnN0cmFpbnRzKFJlbmRlclN0eWxlKiBzdHlsZSwgRm9ybVR5cGUgdHlwZSkgY28KICAg
ICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KGRlc2MtPnBhZGRpbmcucmlnaHQoKSk7CiB9CiAKLWJv
b2wgUmVuZGVyVGhlbWVFZmw6OnRoZW1lUGFydENhY2hlRW50cnlSZXNldChzdHJ1Y3QgVGhlbWVQ
YXJ0Q2FjaGVFbnRyeSogZW50cnksIEZvcm1UeXBlIHR5cGUpCitSZW5kZXJUaGVtZUVmbDo6VGhl
bWVQYXJ0Q2FjaGVFbnRyeTo6VGhlbWVQYXJ0Q2FjaGVFbnRyeSgpCisgICAgOiBlZSgwKSwgbygw
KSwgc3VyZmFjZSgwKQogewotICAgIGNvbnN0IGNoYXIgKmZpbGUsICpncm91cDsKLQotICAgIEFT
U0VSVChlbnRyeSk7Ci0gICAgQVNTRVJUKG1fZWRqZSk7Ci0KLSAgICBlZGplX29iamVjdF9maWxl
X2dldChtX2VkamUsICZmaWxlLCAwKTsKLSAgICBncm91cCA9IGVkamVHcm91cEZyb21Gb3JtVHlw
ZSh0eXBlKTsKLSAgICBBU1NFUlQoZmlsZSk7Ci0gICAgQVNTRVJUKGdyb3VwKTsKK30KIAotICAg
IGlmICghZWRqZV9vYmplY3RfZmlsZV9zZXQoZW50cnktPm8sIGZpbGUsIGdyb3VwKSkgewotICAg
ICAgICBFZGplX0xvYWRfRXJyb3IgZXJyID0gZWRqZV9vYmplY3RfbG9hZF9lcnJvcl9nZXQoZW50
cnktPm8pOwotICAgICAgICBjb25zdCBjaGFyICplcnJtc2cgPSBlZGplX2xvYWRfZXJyb3Jfc3Ry
KGVycik7Ci0gICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGxvYWQgJyVzJyBmcm9tIHRo
ZW1lICVzOiAlcyIsIGdyb3VwLCBmaWxlLCBlcnJtc2cpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hl
RW50cnk6On5UaGVtZVBhcnRDYWNoZUVudHJ5KCkKK3sKKyAgICBpZiAoc3VyZmFjZSkKKyAgICAg
ICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOworICAgIGlmIChvKQorICAgICAgICBl
dmFzX29iamVjdF9kZWwobyk7CisgICAgaWYgKGVlKQorICAgICAgICBlY29yZV9ldmFzX2ZyZWUo
ZWUpOwogfQogCi1ib29sIFJlbmRlclRoZW1lRWZsOjp0aGVtZVBhcnRDYWNoZUVudHJ5U3VyZmFj
ZUNyZWF0ZShzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogZW50cnkpCitzdGF0aWMgY2Fpcm9f
c3VyZmFjZV90KiBjcmVhdGVDYWlyb1N1cmZhY2VGb3IoRWNvcmVfRXZhcyogZWUpCiB7Ci0gICAg
aW50IHcsIGg7Ci0gICAgY2Fpcm9fc3RhdHVzX3Qgc3RhdHVzOworICAgIEFTU0VSVChlZSk7CiAK
LSAgICBBU1NFUlQoZW50cnkpOwotICAgIEFTU0VSVChlbnRyeS0+ZWUpOworICAgIGludCB3aWR0
aCwgaGVpZ2h0OworICAgIGVjb3JlX2V2YXNfZ2VvbWV0cnlfZ2V0KGVlLCAwLCAwLCAmd2lkdGgs
ICZoZWlnaHQpOworICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7CiAKLSAgICBl
Y29yZV9ldmFzX2dlb21ldHJ5X2dldChlbnRyeS0+ZWUsIDAsIDAsICZ3LCAmaCk7Ci0gICAgQVNT
RVJUKHcgPiAwKTsKLSAgICBBU1NFUlQoaCA+IDApOworICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZl
ciA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihjb25zdF9jYXN0PHZvaWQqPihlY29yZV9l
dmFzX2J1ZmZlcl9waXhlbHNfZ2V0KGVlKSkpOworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFj
ZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGJ1ZmZlciwgQ0FJUk9fRk9S
TUFUX0FSR0IzMiwgd2lkdGgsIGhlaWdodCwgd2lkdGggKiA0KTsKIAotICAgIGVudHJ5LT5zdXJm
YWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoKHVuc2lnbmVkIGNoYXIg
KillY29yZV9ldmFzX2J1ZmZlcl9waXhlbHNfZ2V0KGVudHJ5LT5lZSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfQVJH
QjMyLCB3LCBoLCB3ICogNCk7Ci0gICAgc3RhdHVzID0gY2Fpcm9fc3VyZmFjZV9zdGF0dXMoZW50
cnktPnN1cmZhY2UpOworICAgIGNhaXJvX3N0YXR1c190IHN0YXR1cyA9IGNhaXJvX3N1cmZhY2Vf
c3RhdHVzKHN1cmZhY2UpOwogICAgIGlmIChzdGF0dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1Mp
IHsKLSAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgY3JlYXRlIGNhaXJvIHN1cmZhY2U6
ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVz
KSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBu
b3QgY3JlYXRlIGNhaXJvIHN1cmZhY2U6ICVzIiwgY2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0
dXMpKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIHN1cmZhY2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OmlzRm9ybUVsZW1lbnRU
b29MYXJnZVRvRGlzcGxheShjb25zdCBJbnRTaXplJiBlbGVtZW50U2l6ZSkKK3N0YXRpYyBib29s
IGlzRm9ybUVsZW1lbnRUb29MYXJnZVRvRGlzcGxheShjb25zdCBJbnRTaXplJiBlbGVtZW50U2l6
ZSkKIHsKICAgICAvLyBUaGlzIGxpbWl0IG9mIDIwMDAwIHBpeGVscyBpcyBoYXJkY29kZWQgaW5z
aWRlIGVkamUgLS0gYW55dGhpbmcgYWJvdmUgdGhpcyBzaXplCiAgICAgLy8gd2lsbCBiZSBjbGlw
cGVkLiBUaGlzIHZhbHVlIHNlZW1zIHRvIGJlIHJlYXNvbmFibGUgZW5vdWdoIHNvIHRoYXQgaGFy
ZGNvZGluZyBpdApAQCAtMTYyLDI1ICsyMDcsMjEgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6aXNG
b3JtRWxlbWVudFRvb0xhcmdlVG9EaXNwbGF5KGNvbnN0IEludFNpemUmIGVsZW1lbnRTaXplKQog
ICAgIHJldHVybiBlbGVtZW50U2l6ZS53aWR0aCgpID4gbWF4RWRqZURpbWVuc2lvbiB8fCBlbGVt
ZW50U2l6ZS5oZWlnaHQoKSA+IG1heEVkamVEaW1lbnNpb247CiB9CiAKLS8vIGFsbG9jYXRlIGEg
bmV3IGVudHJ5IGFuZCBmaWxsIGl0IHdpdGggZWRqZSBncm91cAotc3RydWN0IFJlbmRlclRoZW1l
RWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5KiBSZW5kZXJUaGVtZUVmbDo6Y2FjaGVUaGVtZVBhcnRO
ZXcoRm9ybVR5cGUgdHlwZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK1JlbmRlclRoZW1lRWZsOjpU
aGVtZVBhcnRDYWNoZUVudHJ5KiBSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeTo6
Y3JlYXRlKGNvbnN0IFN0cmluZyYgdGhlbWVQYXRoLCBGb3JtVHlwZSB0eXBlLCBjb25zdCBJbnRT
aXplJiBzaXplKQogeworICAgIEFTU0VSVCghdGhlbWVQYXRoLmlzRW1wdHkoKSk7CisgICAgQVNT
RVJUKCFzaXplLmlzRW1wdHkoKSk7CisKICAgICBpZiAoaXNGb3JtRWxlbWVudFRvb0xhcmdlVG9E
aXNwbGF5KHNpemUpKSB7CiAgICAgICAgIEVJTkFfTE9HX0VSUigiQ2Fubm90IHJlbmRlciBhbiBl
bGVtZW50IG9mIHNpemUgJWR4JWQuIiwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogZW50cnkg
PSBuZXcgVGhlbWVQYXJ0Q2FjaGVFbnRyeTsKLSAgICBpZiAoIWVudHJ5KSB7Ci0gICAgICAgIEVJ
TkFfTE9HX0VSUigiY291bGQgbm90IGFsbG9jYXRlIFRoZW1lUGFydENhY2hlRW50cnkuIik7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBPd25QdHI8VGhlbWVQYXJ0Q2FjaGVFbnRyeSo+
IGVudHJ5ID0gYWRvcHRQdHIobmV3IFRoZW1lUGFydENhY2hlRW50cnkpOwogCiAgICAgZW50cnkt
PmVlID0gZWNvcmVfZXZhc19idWZmZXJfbmV3KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7
CiAgICAgaWYgKCFlbnRyeS0+ZWUpIHsKLSAgICAgICAgRUlOQV9MT0dfRVJSKCJlY29yZV9ldmFz
X2J1ZmZlcl9uZXcoJWQsICVkKSBmYWlsZWQuIiwKLSAgICAgICAgICAgICAgICAgICAgIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIGRlbGV0ZSBlbnRyeTsKKyAgICAgICAg
RUlOQV9MT0dfRVJSKCJlY29yZV9ldmFzX2J1ZmZlcl9uZXcoJWQsICVkKSBmYWlsZWQuIiwgc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBA
IC0xODksMTkgKzIzMCwxMyBAQCBzdHJ1Y3QgUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hl
RW50cnkqIFJlbmRlclRoZW1lRWZsOjpjYWNoZVRoZW1lUGFydE5ldyhGbwogCiAgICAgZW50cnkt
Pm8gPSBlZGplX29iamVjdF9hZGQoZWNvcmVfZXZhc19nZXQoZW50cnktPmVlKSk7CiAgICAgQVNT
RVJUKGVudHJ5LT5vKTsKLSAgICBpZiAoIXRoZW1lUGFydENhY2hlRW50cnlSZXNldChlbnRyeSwg
dHlwZSkpIHsKLSAgICAgICAgZXZhc19vYmplY3RfZGVsKGVudHJ5LT5vKTsKLSAgICAgICAgZWNv
cmVfZXZhc19mcmVlKGVudHJ5LT5lZSk7Ci0gICAgICAgIGRlbGV0ZSBlbnRyeTsKKworICAgIGlm
ICghc2V0U291cmNlR3JvdXBGb3JFZGplT2JqZWN0KGVudHJ5LT5vLCB0aGVtZVBhdGgsIHRvRWRq
ZUdyb3VwKHR5cGUpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogCi0gICAgaWYgKCF0aGVt
ZVBhcnRDYWNoZUVudHJ5U3VyZmFjZUNyZWF0ZShlbnRyeSkpIHsKLSAgICAgICAgZXZhc19vYmpl
Y3RfZGVsKGVudHJ5LT5vKTsKLSAgICAgICAgZWNvcmVfZXZhc19mcmVlKGVudHJ5LT5lZSk7Ci0g
ICAgICAgIGRlbGV0ZSBlbnRyeTsKKyAgICBlbnRyeS0+c3VyZmFjZSA9IGNyZWF0ZUNhaXJvU3Vy
ZmFjZUZvcihlbnRyeS0+ZWUpOworICAgIGlmICghZW50cnktPnN1cmZhY2UpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIH0KIAogICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShlbnRyeS0+bywgc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICBldmFzX29iamVjdF9zaG93KGVudHJ5LT5vKTsK
QEAgLTIwOSw4NyArMjQ0LDg0IEBAIHN0cnVjdCBSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2Fj
aGVFbnRyeSogUmVuZGVyVGhlbWVFZmw6OmNhY2hlVGhlbWVQYXJ0TmV3KEZvCiAgICAgZW50cnkt
PnR5cGUgPSB0eXBlOwogICAgIGVudHJ5LT5zaXplID0gc2l6ZTsKIAotICAgIG1fcGFydENhY2hl
LnByZXBlbmQoZW50cnkpOwotICAgIHJldHVybiBlbnRyeTsKKyAgICByZXR1cm4gZW50cnkubGVh
a1B0cigpOwogfQogCi0vLyBqdXN0IGNoYW5nZSB0aGUgZWRqZSBncm91cCBhbmQgcmV0dXJuIHRo
ZSBzYW1lIGVudHJ5Ci1zdHJ1Y3QgUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkq
IFJlbmRlclRoZW1lRWZsOjpjYWNoZVRoZW1lUGFydFJlc2V0KEZvcm1UeXBlIHR5cGUsIHN0cnVj
dCBSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeSogZW50cnkpCit2b2lkIFJlbmRl
clRoZW1lRWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5OjpyZXVzZShjb25zdCBTdHJpbmcmIHRoZW1l
UGF0aCwgRm9ybVR5cGUgbmV3VHlwZSwgY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKIHsKLSAgICBp
ZiAoIXRoZW1lUGFydENhY2hlRW50cnlSZXNldChlbnRyeSwgdHlwZSkpIHsKLSAgICAgICAgZW50
cnktPnR5cGUgPSBGb3JtVHlwZUxhc3Q7IC8vIGludmFsaWRhdGUKLSAgICAgICAgbV9wYXJ0Q2Fj
aGUuYXBwZW5kKGVudHJ5KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVudHJ5LT50
eXBlID0gdHlwZTsKLSAgICBtX3BhcnRDYWNoZS5wcmVwZW5kKGVudHJ5KTsKLSAgICByZXR1cm4g
ZW50cnk7Ci19CisgICAgQVNTRVJUKCF0aGVtZVBhdGguaXNFbXB0eSgpKTsKIAotLy8gcmVzaXpl
IGVudHJ5IGFuZCByZXNldCBpdAotc3RydWN0IFJlbmRlclRoZW1lRWZsOjpUaGVtZVBhcnRDYWNo
ZUVudHJ5KiBSZW5kZXJUaGVtZUVmbDo6Y2FjaGVUaGVtZVBhcnRSZXNpemVBbmRSZXNldChGb3Jt
VHlwZSB0eXBlLCBjb25zdCBJbnRTaXplJiBzaXplLCBzdHJ1Y3QgUmVuZGVyVGhlbWVFZmw6OlRo
ZW1lUGFydENhY2hlRW50cnkqIGVudHJ5KQotewotICAgIGNhaXJvX3N1cmZhY2VfZmluaXNoKGVu
dHJ5LT5zdXJmYWNlKTsKKyAgICBpZiAoIW5ld1NpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIGNh
aXJvX3N1cmZhY2VfZmluaXNoKHN1cmZhY2UpOwogCi0gICAgZW50cnktPnNpemUgPSBzaXplOwot
ICAgIGVjb3JlX2V2YXNfcmVzaXplKGVudHJ5LT5lZSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpKTsKLSAgICBldmFzX29iamVjdF9yZXNpemUoZW50cnktPm8sIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSk7CisgICAgICAgIHNpemUgPSBuZXdTaXplOworICAgICAgICBlY29yZV9ldmFz
X3Jlc2l6ZShlZSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpKTsKKyAgICAgICAg
ZXZhc19vYmplY3RfcmVzaXplKG8sIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSk7
CiAKLSAgICBpZiAoIXRoZW1lUGFydENhY2hlRW50cnlTdXJmYWNlQ3JlYXRlKGVudHJ5KSkgewot
ICAgICAgICBldmFzX29iamVjdF9kZWwoZW50cnktPm8pOwotICAgICAgICBlY29yZV9ldmFzX2Zy
ZWUoZW50cnktPmVlKTsKLSAgICAgICAgZGVsZXRlIGVudHJ5OwotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgc3VyZmFjZSA9IGNyZWF0ZUNhaXJvU3VyZmFjZUZvcihlZSk7CisgICAgICAgIGlm
ICghc3VyZmFjZSkgeworICAgICAgICAgICAgdHlwZSA9IEZvcm1UeXBlTGFzdDsgLy8gSW52YWxp
ZGF0ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVy
biBjYWNoZVRoZW1lUGFydFJlc2V0KHR5cGUsIGVudHJ5KTsKKyAgICBpZiAoIXNldFNvdXJjZUdy
b3VwRm9yRWRqZU9iamVjdChvLCB0aGVtZVBhdGgsIHRvRWRqZUdyb3VwKG5ld1R5cGUpKSkgewor
ICAgICAgICB0eXBlID0gRm9ybVR5cGVMYXN0OyAvLyBJbnZhbGlkYXRlLgorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgdHlwZSA9IG5ld1R5cGU7CiB9CiAKLS8vIGdlbmVyYWwgcHVycG9z
ZSBnZXQgKHdpbGwgY3JlYXRlLCByZXVzZSBhbmQgYWxsKQotc3RydWN0IFJlbmRlclRoZW1lRWZs
OjpUaGVtZVBhcnRDYWNoZUVudHJ5KiBSZW5kZXJUaGVtZUVmbDo6Y2FjaGVUaGVtZVBhcnRHZXQo
Rm9ybVR5cGUgdHlwZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK1JlbmRlclRoZW1lRWZsOjpUaGVt
ZVBhcnRDYWNoZUVudHJ5KiBSZW5kZXJUaGVtZUVmbDo6Z2V0VGhlbWVQYXJ0RnJvbUNhY2hlKEZv
cm1UeXBlIHR5cGUsIGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgVmVjdG9yPHN0cnVjdCBU
aGVtZVBhcnRDYWNoZUVudHJ5ICo+OjppdGVyYXRvciBpdHIsIGVuZDsKLSAgICBzdHJ1Y3QgVGhl
bWVQYXJ0Q2FjaGVFbnRyeSAqY2VfbGFzdF9zaXplID0gMDsKLSAgICBpbnQgaSwgaWR4TGFzdFNp
emUgPSAtMTsKKyAgICBWZWN0b3I8VGhlbWVQYXJ0Q2FjaGVFbnRyeSo+OjppdGVyYXRvciBpdCwg
ZW5kOworICAgIHNpemVfdCBsYXN0V2l0aFJlcXVlc3RlZFNpemUgPSBub3RGb3VuZDsKIAotICAg
IGl0ciA9IG1fcGFydENhY2hlLmJlZ2luKCk7CisgICAgaXQgPSBtX3BhcnRDYWNoZS5iZWdpbigp
OwogICAgIGVuZCA9IG1fcGFydENhY2hlLmVuZCgpOwotICAgIGZvciAoaSA9IDA7IGl0ciAhPSBl
bmQ7IGkrKywgaXRyKyspIHsKLSAgICAgICAgc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkgKmVu
dHJ5ID0gKml0cjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaXQgIT0gZW5kOyBpKyssIGl0Kysp
IHsKKyAgICAgICAgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogZW50cnkgPSAqaXQ7CiAgICAgICAgIGlm
IChlbnRyeS0+c2l6ZSA9PSBzaXplKSB7CiAgICAgICAgICAgICBpZiAoZW50cnktPnR5cGUgPT0g
dHlwZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgICAgICAgICBjZV9sYXN0
X3NpemUgPSBlbnRyeTsKLSAgICAgICAgICAgIGlkeExhc3RTaXplID0gaTsKKyAgICAgICAgICAg
IGxhc3RXaXRoUmVxdWVzdGVkU2l6ZSA9IGk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
bV9wYXJ0Q2FjaGUuc2l6ZSgpIDwgUkVOREVSX1RIRU1FX0VGTF9QQVJUX0NBQ0hFX01BWCkKLSAg
ICAgICAgcmV0dXJuIGNhY2hlVGhlbWVQYXJ0TmV3KHR5cGUsIHNpemUpOworICAgIGlmIChtX3Bh
cnRDYWNoZS5zaXplKCkgPCBSRU5ERVJfVEhFTUVfRUZMX1BBUlRfQ0FDSEVfTUFYKSB7CisgICAg
ICAgIFRoZW1lUGFydENhY2hlRW50cnkqIGVudHJ5ID0gVGhlbWVQYXJ0Q2FjaGVFbnRyeTo6Y3Jl
YXRlKHRoZW1lUGF0aCgpLCB0eXBlLCBzaXplKTsKKyAgICAgICAgbV9wYXJ0Q2FjaGUucHJlcGVu
ZChlbnRyeSk7CisgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICB9CisKKyAgICAvLyBXZSBoYXZl
IGEgZnVsbCBjYWNoZSBub3chCisgICAgRUlOQV9MT0dfSU5GTygiUmVuZGVyVGhlbWUgY2FjaGUg
aXMgZnVsbCwgcmV1c2luZy4iKTsKIAotICAgIGlmIChjZV9sYXN0X3NpemUgJiYgY2VfbGFzdF9z
aXplICE9IG1fcGFydENhY2hlLmZpcnN0KCkpIHsKLSAgICAgICAgbV9wYXJ0Q2FjaGUucmVtb3Zl
KGlkeExhc3RTaXplKTsKLSAgICAgICAgcmV0dXJuIGNhY2hlVGhlbWVQYXJ0UmVzZXQodHlwZSwg
Y2VfbGFzdF9zaXplKTsKKyAgICBpZiAobGFzdFdpdGhSZXF1ZXN0ZWRTaXplICE9IG5vdEZvdW5k
ICYmIGxhc3RXaXRoUmVxdWVzdGVkU2l6ZSAhPSAxKSB7CisgICAgICAgIFRoZW1lUGFydENhY2hl
RW50cnkqIGVudHJ5ID0gbV9wYXJ0Q2FjaGUuYXQobGFzdFdpdGhSZXF1ZXN0ZWRTaXplKTsKKyAg
ICAgICAgZW50cnktPnJldXNlKHRoZW1lUGF0aCgpLCB0eXBlKTsKKyAgICAgICAgbV9wYXJ0Q2Fj
aGUucmVtb3ZlKGxhc3RXaXRoUmVxdWVzdGVkU2l6ZSk7CisgICAgICAgIG1fcGFydENhY2hlLnBy
ZXBlbmQoZW50cnkpOworICAgICAgICByZXR1cm4gZW50cnk7CiAgICAgfQogCiAgICAgVGhlbWVQ
YXJ0Q2FjaGVFbnRyeSogZW50cnkgPSBtX3BhcnRDYWNoZS5sYXN0KCk7CisgICAgZW50cnktPnJl
dXNlKHRoZW1lUGF0aCgpLCB0eXBlLCBzaXplKTsKICAgICBtX3BhcnRDYWNoZS5yZW1vdmVMYXN0
KCk7Ci0gICAgcmV0dXJuIGNhY2hlVGhlbWVQYXJ0UmVzaXplQW5kUmVzZXQodHlwZSwgc2l6ZSwg
ZW50cnkpOworICAgIG1fcGFydENhY2hlLnByZXBlbmQoZW50cnkpOworICAgIHJldHVybiBlbnRy
eTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6Y2FjaGVUaGVtZVBhcnRGbHVzaCgpCit2b2lk
IFJlbmRlclRoZW1lRWZsOjpmbHVzaFRoZW1lUGFydENhY2hlKCkKIHsKLSAgICBWZWN0b3I8c3Ry
dWN0IFRoZW1lUGFydENhY2hlRW50cnkgKj46Oml0ZXJhdG9yIGl0ciwgZW5kOworICAgIFZlY3Rv
cjxUaGVtZVBhcnRDYWNoZUVudHJ5Kj46Oml0ZXJhdG9yIGl0LCBlbmQ7CiAKLSAgICBpdHIgPSBt
X3BhcnRDYWNoZS5iZWdpbigpOworICAgIGl0ID0gbV9wYXJ0Q2FjaGUuYmVnaW4oKTsKICAgICBl
bmQgPSBtX3BhcnRDYWNoZS5lbmQoKTsKLSAgICBmb3IgKDsgaXRyICE9IGVuZDsgaXRyKyspIHsK
LSAgICAgICAgc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkgKmVudHJ5ID0gKml0cjsKLSAgICAg
ICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGVudHJ5LT5zdXJmYWNlKTsKLSAgICAgICAgZXZhc19v
YmplY3RfZGVsKGVudHJ5LT5vKTsKLSAgICAgICAgZWNvcmVfZXZhc19mcmVlKGVudHJ5LT5lZSk7
Ci0gICAgICAgIGRlbGV0ZSBlbnRyeTsKLSAgICB9CisgICAgZm9yICg7IGl0ICE9IGVuZDsgaXQr
KykKKyAgICAgICAgZGVsZXRlICgqaXQpOworCiAgICAgbV9wYXJ0Q2FjaGUuY2xlYXIoKTsKIH0K
IApAQCAtMzI1LDcgKzM1Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGhlbWVQYXJ0
KFJlbmRlck9iamVjdCogb2JqZWN0LCBGb3JtVHlwZSB0eXBlLCBjb25zdCBQCiAgICAgRWluYV9M
aXN0KiB1cGRhdGVzOwogICAgIGNhaXJvX3QqIGNhaXJvOwogCi0gICAgZW50cnkgPSBjYWNoZVRo
ZW1lUGFydEdldCh0eXBlLCByZWN0LnNpemUoKSk7CisgICAgZW50cnkgPSBnZXRUaGVtZVBhcnRG
cm9tQ2FjaGUodHlwZSwgcmVjdC5zaXplKCkpOwogICAgIGlmICghZW50cnkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtNDUxLDM4ICs0ODMsNDkgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6
c2V0VGhlbWVQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICBpZiAocGF0aCA9PSBtX3RoZW1l
UGF0aCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV90aGVtZVBhdGggPSBwYXRoOwotCi0gICAg
aWYgKG1fdGhlbWVQYXRoLmlzRW1wdHkoKSkgewotICAgICAgICBFSU5BX0xPR19FUlIoIk5vIHRo
ZW1lIGRlZmluZWQsIHVuYWJsZSB0byBzZXQgdGhlbWUgZm9yIEhUTUwgRm9ybXMuIik7CisgICAg
aWYgKHBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgIEVJTkFfTE9HX0NSSVQoIk5vIHZhbGlkIHRo
ZW1lIGRlZmluZWQsIHRoaW5ncyB3aWxsIG5vdCB3b3JrIHByb3Blcmx5LiIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFtX2NhbnZhcykgewotICAgICAgICBtX2NhbnZhcyA9
IGVjb3JlX2V2YXNfYnVmZmVyX25ldygxLCAxKTsKLSAgICAgICAgaWYgKCFtX2NhbnZhcykKLSAg
ICAgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGNyZWF0ZSBjYW52YXMuIik7Ci0gICAg
fQorICAgIG1fdGhlbWVQYXRoID0gcGF0aDsKIAogICAgIGxvYWRUaGVtZSgpOwogfQogCitTdHJp
bmcgUmVuZGVyVGhlbWVFZmw6OnRoZW1lUGF0aCgpIGNvbnN0Cit7CisjaWYgIU5ERUJVRworICAg
IGlmIChtX2VkamUpIHsKKyAgICAgICAgY29uc3QgY2hhciogcGF0aDsKKyAgICAgICAgZWRqZV9v
YmplY3RfZmlsZV9nZXQobywgJnBhdGgsIDApOworICAgICAgICBBU1NFUlQobV90aGVtZVBhdGgg
PT0gcGF0aCk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIG1fdGhlbWVQYXRoOworfQorCiBi
b29sIFJlbmRlclRoZW1lRWZsOjpsb2FkVGhlbWUoKQogeworICAgIEFTU0VSVCghbV90aGVtZVBh
dGguaXNFbXB0eSgpKTsKKworICAgIGlmICghbV9jYW52YXMpIHsKKyAgICAgICAgbV9jYW52YXMg
PSBlY29yZV9ldmFzX2J1ZmZlcl9uZXcoMSwgMSk7CisgICAgICAgIF9BU1NFUlRfT05fUkVMRUFT
RV9SRVRVUk5fVkFMKG1fY2FudmFzLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAiQ291bGQgbm90
IGNyZWF0ZSBjYW52YXMgcmVxdWlyZWQgYnkgdGhlbWUsIHRoaW5ncyB3aWxsIG5vdCB3b3JrIHBy
b3Blcmx5LiIpOworICAgIH0KKwogICAgIEV2YXNfT2JqZWN0KiBvID0gZWRqZV9vYmplY3RfYWRk
KGVjb3JlX2V2YXNfZ2V0KG1fY2FudmFzKSk7CiAgICAgX0FTU0VSVF9PTl9SRUxFQVNFX1JFVFVS
Tl9WQUwobywgZmFsc2UsICJDb3VsZCBub3QgY3JlYXRlIG5ldyBiYXNlIEVkamUgb2JqZWN0LiIp
OwogCi0gICAgaWYgKCFlZGplX29iamVjdF9maWxlX3NldChvLCBtX3RoZW1lUGF0aC51dGY4KCku
ZGF0YSgpLCAid2Via2l0L2Jhc2UiKSkgewotICAgICAgICBFZGplX0xvYWRfRXJyb3IgZXJyID0g
ZWRqZV9vYmplY3RfbG9hZF9lcnJvcl9nZXQobyk7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGVycm1z
ZyA9IGVkamVfbG9hZF9lcnJvcl9zdHIoZXJyKTsKLSAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3Vs
ZCBub3Qgc2V0IGZpbGUgJyVzJzogJXMiLCBtX3RoZW1lUGF0aC51dGY4KCkuZGF0YSgpLCAgZXJy
bXNnKTsKKyAgICBpZiAoIXNldFNvdXJjZUdyb3VwRm9yRWRqZU9iamVjdChvLCBtX3RoZW1lUGF0
aCwgIndlYmtpdC9iYXNlIikpIHsKICAgICAgICAgZXZhc19vYmplY3RfZGVsKG8pOwogICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIEtlZXAgY3VycmVudCB0aGVtZS4KICAgICB9CiAKICAgICAvLyBH
ZXQgcmlkIG9mIGV4aXN0aW5nIHRoZW1lLgogICAgIGlmIChtX2VkamUpIHsKLSAgICAgICAgY2Fj
aGVUaGVtZVBhcnRGbHVzaCgpOworICAgICAgICBmbHVzaFRoZW1lUGFydENhY2hlKCk7CiAgICAg
ICAgIGV2YXNfb2JqZWN0X2RlbChtX2VkamUpOwogICAgIH0KIApAQCAtNDkzLDcgKzUzNiw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVFZmw6OmxvYWRUaGVtZSgpCiAgICAgZWRqZV9vYmplY3Rfc2lnbmFs
X2NhbGxiYWNrX2FkZChtX2VkamUsICJjb2xvcl9jbGFzcyxzZXQiLCAid2Via2l0L3NlbGVjdGlv
bi9pbmFjdGl2ZSIsIGFwcGx5Q29sb3JDYWxsYmFjaywgdGhpcyk7CiAgICAgZWRqZV9vYmplY3Rf
c2lnbmFsX2NhbGxiYWNrX2FkZChtX2VkamUsICJjb2xvcl9jbGFzcyxzZXQiLCAid2Via2l0L2Zv
Y3VzX3JpbmciLCBhcHBseUNvbG9yQ2FsbGJhY2ssIHRoaXMpOwogCi0gICAgYXBwbHlQYXJ0RGVz
Y3JpcHRpb25zRnJvbShtX2VkamUpOworICAgIGFwcGx5UGFydERlc2NyaXB0aW9uc0Zyb20obV90
aGVtZVBhdGgpOwogCiAgICAgc2V0Q29sb3JGcm9tVGhlbWVDbGFzcygid2Via2l0L3NlbGVjdGlv
bi9hY3RpdmUiKTsKICAgICBzZXRDb2xvckZyb21UaGVtZUNsYXNzKCJ3ZWJraXQvc2VsZWN0aW9u
L2luYWN0aXZlIik7CkBAIC01MDQsNyArNTQ3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6bG9h
ZFRoZW1lKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBw
bHlQYXJ0RGVzY3JpcHRpb25GYWxsYmFjayhzdHJ1Y3QgVGhlbWVQYXJ0RGVzYyogZGVzYykKK3Zv
aWQgUmVuZGVyVGhlbWVFZmw6OmFwcGx5UGFydERlc2NyaXB0aW9uRmFsbGJhY2soVGhlbWVQYXJ0
RGVzYyogZGVzYykKIHsKICAgICBkZXNjLT5taW4uc2V0V2lkdGgoTGVuZ3RoKDAsIEZpeGVkKSk7
CiAgICAgZGVzYy0+bWluLnNldEhlaWdodChMZW5ndGgoMCwgRml4ZWQpKTsKQEAgLTUxNSw3ICs1
NTgsNyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseVBhcnREZXNjcmlwdGlvbkZhbGxiYWNr
KHN0cnVjdCBUaGVtZVBhcnREZXNjKiBkZXNjKQogICAgIGRlc2MtPnBhZGRpbmcgPSBMZW5ndGhC
b3goMCwgMCwgMCwgMCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFwcGx5UGFydERlc2Ny
aXB0aW9uKEV2YXNfT2JqZWN0KiBvYmplY3QsIHN0cnVjdCBUaGVtZVBhcnREZXNjKiBkZXNjKQor
dm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlQYXJ0RGVzY3JpcHRpb24oRXZhc19PYmplY3QqIG9i
amVjdCwgVGhlbWVQYXJ0RGVzYyogZGVzYykKIHsKICAgICBFdmFzX0Nvb3JkIG1pbncsIG1pbmgs
IG1heHcsIG1heGg7CiAKQEAgLTU2Niw4MiArNjA5LDIxIEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6
OmFwcGx5UGFydERlc2NyaXB0aW9uKEV2YXNfT2JqZWN0KiBvYmplY3QsIHN0cnVjdCBUaGVtZVBh
cnRECiAgICAgfQogfQogCi1jb25zdCBjaGFyKiBSZW5kZXJUaGVtZUVmbDo6ZWRqZUdyb3VwRnJv
bUZvcm1UeXBlKEZvcm1UeXBlIHR5cGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphcHBs
eVBhcnREZXNjcmlwdGlvbnNGcm9tKGNvbnN0IFN0cmluZyYgdGhlbWVQYXRoKQogewotICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBncm91cHNbXSA9IHsKLSNkZWZpbmUgVyhuKSAid2Via2l0L3dpZGdl
dC8ibgotICAgICAgICBXKCJidXR0b24iKSwKLSAgICAgICAgVygicmFkaW8iKSwKLSAgICAgICAg
VygiZW50cnkiKSwKLSAgICAgICAgVygiY2hlY2tib3giKSwKLSAgICAgICAgVygiY29tYm8iKSwK
LSNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSAgICAgICAgVygicHJvZ3Jlc3NiYXIiKSwK
LSNlbmRpZgotICAgICAgICBXKCJzZWFyY2gvZmllbGQiKSwKLSAgICAgICAgVygic2VhcmNoL2Rl
Y29yYXRpb24iKSwKLSAgICAgICAgVygic2VhcmNoL3Jlc3VsdHNfYnV0dG9uIiksCi0gICAgICAg
IFcoInNlYXJjaC9yZXN1bHRzX2RlY29yYXRpb24iKSwKLSAgICAgICAgVygic2VhcmNoL2NhbmNl
bF9idXR0b24iKSwKLSAgICAgICAgVygic2xpZGVyL3ZlcnRpY2FsIiksCi0gICAgICAgIFcoInNs
aWRlci9ob3Jpem9udGFsIiksCi0gICAgICAgIFcoInNsaWRlci90aHVtYl92ZXJ0aWNhbCIpLAot
ICAgICAgICBXKCJzbGlkZXIvdGh1bWJfaG9yaXpvbnRhbCIpLAotI2lmIEVOQUJMRShWSURFTykK
LSAgICAgICAgVygibWVkaWFjb250cm9sL3BsYXlwYXVzZV9idXR0b24iKSwKLSAgICAgICAgVygi
bWVkaWFjb250cm9sL211dGVfYnV0dG9uIiksCi0gICAgICAgIFcoIm1lZGlhY29udHJvbC9zZWVr
Zm9yd2FyZF9idXR0b24iKSwKLSAgICAgICAgVygibWVkaWFjb250cm9sL3NlZWtiYWNrd2FyZF9i
dXR0b24iKSwKLSAgICAgICAgVygibWVkaWFjb250cm9sL2Z1bGxzY3JlZW5fYnV0dG9uIiksCi0j
ZW5kaWYKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgICAgIFcoIm1lZGlhY29udHJvbC90
b2dnbGVfY2FwdGlvbnNfYnV0dG9uIiksCi0jZW5kaWYKLSAgICAgICAgVygic3Bpbm5lciIpLAot
I3VuZGVmIFcKLSAgICAgICAgMAotICAgIH07Ci0gICAgQVNTRVJUKHR5cGUgPj0gMCk7Ci0gICAg
QVNTRVJUKChzaXplX3QpdHlwZSA8IHNpemVvZihncm91cHMpIC8gc2l6ZW9mKGdyb3Vwc1swXSkp
OyAvLyBvdXQgb2Ygc3luYz8KLSAgICByZXR1cm4gZ3JvdXBzW3R5cGVdOwotfQotCi12b2lkIFJl
bmRlclRoZW1lRWZsOjphcHBseVBhcnREZXNjcmlwdGlvbnNGcm9tKEV2YXNfT2JqZWN0KiBvKQot
ewotICAgIEV2YXNfT2JqZWN0KiBvYmplY3Q7Ci0gICAgdW5zaWduZWQgaW50IGk7Ci0gICAgY29u
c3QgY2hhciogZmlsZTsKLQotICAgIEFTU0VSVChvKTsKKyAgICBFdmFzX09iamVjdCogdGVtcCA9
IGVkamVfb2JqZWN0X2FkZChlY29yZV9ldmFzX2dldChtX2NhbnZhcykpOworICAgIF9BU1NFUlRf
T05fUkVMRUFTRV9SRVRVUk4odGVtcCwgIkNvdWxkIG5vdCBjcmVhdGUgRWRqZSBvYmplY3QuIik7
CiAKLSAgICBlZGplX29iamVjdF9maWxlX2dldChvLCAmZmlsZSwgMCk7Ci0gICAgQVNTRVJUKGZp
bGUpOwotICAgIGlmICghZmlsZSkgewotICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBy
ZXRyaWV2ZSBFZGplIHRoZW1lIGZpbGUuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBvYmplY3QgPSBlZGplX29iamVjdF9hZGQoZWNvcmVfZXZhc19nZXQobV9jYW52YXMpKTsKLSAg
ICBpZiAoIW9iamVjdCkgewotICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBjcmVhdGUg
RWRqZSBvYmplY3QuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKGkgPSAw
OyBpIDwgRm9ybVR5cGVMYXN0OyBpKyspIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEZv
cm1UeXBlTGFzdDsgaSsrKSB7CiAgICAgICAgIEZvcm1UeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxG
b3JtVHlwZT4oaSk7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGdyb3VwID0gZWRqZUdyb3VwRnJvbUZv
cm1UeXBlKHR5cGUpOwogICAgICAgICBtX3BhcnREZXNjc1tpXS50eXBlID0gdHlwZTsKLSAgICAg
ICAgaWYgKCFlZGplX29iamVjdF9maWxlX3NldChvYmplY3QsIGZpbGUsIGdyb3VwKSkgewotICAg
ICAgICAgICAgRWRqZV9Mb2FkX0Vycm9yIGVyciA9IGVkamVfb2JqZWN0X2xvYWRfZXJyb3JfZ2V0
KG9iamVjdCk7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJtc2cgPSBlZGplX2xvYWRfZXJy
b3Jfc3RyKGVycik7Ci0gICAgICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBzZXQgdGhl
bWUgZ3JvdXAgJyVzJyBvZiBmaWxlICclcyc6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBncm91cCwgZmlsZSwgZXJybXNnKTsKLQorICAgICAgICBpZiAoIXNldFNvdXJjZUdyb3VwRm9y
RWRqZU9iamVjdCh0ZW1wLCB0aGVtZVBhdGgsIHRvRWRqZUdyb3VwKHR5cGUpKSkKICAgICAgICAg
ICAgIGFwcGx5UGFydERlc2NyaXB0aW9uRmFsbGJhY2sobV9wYXJ0RGVzY3MgKyBpKTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBhcHBseVBhcnREZXNjcmlwdGlvbihvYmplY3QsIG1fcGFy
dERlc2NzICsgaSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFwcGx5UGFydERlc2NyaXB0
aW9uKHRlbXAsIG1fcGFydERlc2NzICsgaSk7CiAgICAgfQotICAgIGV2YXNfb2JqZWN0X2RlbChv
YmplY3QpOworCisgICAgZXZhc19vYmplY3RfZGVsKHRlbXApOwogfQogCiBSZW5kZXJUaGVtZUVm
bDo6UmVuZGVyVGhlbWVFZmwoUGFnZSogcGFnZSkKQEAgLTY2NCw3ICs2NDYsNyBAQCBSZW5kZXJU
aGVtZUVmbDo6UmVuZGVyVGhlbWVFZmwoUGFnZSogcGFnZSkKIAogUmVuZGVyVGhlbWVFZmw6On5S
ZW5kZXJUaGVtZUVmbCgpCiB7Ci0gICAgY2FjaGVUaGVtZVBhcnRGbHVzaCgpOworICAgIGZsdXNo
VGhlbWVQYXJ0Q2FjaGUoKTsKIAogICAgIGlmIChtX2NhbnZhcykgewogICAgICAgICBpZiAobV9l
ZGplKQpAQCAtODM0LDExICs4MTYsMTAgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0Q2hl
Y2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHkKICAgICB9
CiAKICAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUsIENoZWNrQm94KTsKLSAgICBBU1NF
UlQobV9lZGplKTsKIAogICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwogCi0gICAgY29uc3Qgc3Ry
dWN0IFRoZW1lUGFydERlc2MgKmRlc2MgPSBtX3BhcnREZXNjcyArIChzaXplX3QpQ2hlY2tCb3g7
CisgICAgY29uc3QgVGhlbWVQYXJ0RGVzYyogZGVzYyA9IG1fcGFydERlc2NzICsgKHNpemVfdClD
aGVja0JveDsKICAgICBpZiAoc3R5bGUtPndpZHRoKCkudmFsdWUoKSA8IGRlc2MtPm1pbi53aWR0
aCgpLnZhbHVlKCkpCiAgICAgICAgIHN0eWxlLT5zZXRXaWR0aChkZXNjLT5taW4ud2lkdGgoKSk7
CiAgICAgaWYgKHN0eWxlLT5oZWlnaHQoKS52YWx1ZSgpIDwgZGVzYy0+bWluLmhlaWdodCgpLnZh
bHVlKCkpCkBAIC04NTgsMTEgKzgzOSwxMCBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RS
YWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKgogICAg
IH0KIAogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgUmFkaW9CdXR0b24pOwotICAg
IEFTU0VSVChtX2VkamUpOwogCiAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CiAKLSAgICBjb25z
dCBzdHJ1Y3QgVGhlbWVQYXJ0RGVzYyAqZGVzYyA9IG1fcGFydERlc2NzICsgKHNpemVfdClSYWRp
b0J1dHRvbjsKKyAgICBjb25zdCBUaGVtZVBhcnREZXNjKiBkZXNjID0gbV9wYXJ0RGVzY3MgKyAo
c2l6ZV90KVJhZGlvQnV0dG9uOwogICAgIGlmIChzdHlsZS0+d2lkdGgoKS52YWx1ZSgpIDwgZGVz
Yy0+bWluLndpZHRoKCkudmFsdWUoKSkKICAgICAgICAgc3R5bGUtPnNldFdpZHRoKGRlc2MtPm1p
bi53aWR0aCgpKTsKICAgICBpZiAoc3R5bGUtPmhlaWdodCgpLnZhbHVlKCkgPCBkZXNjLT5taW4u
aGVpZ2h0KCkudmFsdWUoKSkKQEAgLTEwODksOSArMTA2OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVF
Zmw6OmVtaXRNZWRpYUJ1dHRvblNpZ25hbChGb3JtVHlwZSBmb3JtVHlwZSwgTWVkaWFDb250cm9s
RWxlbWVuCiAgICAgbG9hZFRoZW1lSWZOZWVkZWQoKTsKICAgICBfQVNTRVJUX09OX1JFTEVBU0Vf
UkVUVVJOX1ZBTChtX2VkamUsIGZhbHNlLCAiQ291bGQgbm90IHBhaW50IG5hdGl2ZSBIVE1MIHBh
cnQgZHVlIHRvIG1pc3NpbmcgdGhlbWUuIik7CiAKLSAgICBUaGVtZVBhcnRDYWNoZUVudHJ5KiBl
bnRyeTsKLQotICAgIGVudHJ5ID0gY2FjaGVUaGVtZVBhcnRHZXQoZm9ybVR5cGUsIHJlY3Quc2l6
ZSgpKTsKKyAgICBUaGVtZVBhcnRDYWNoZUVudHJ5KiBlbnRyeSA9IGdldFRoZW1lUGFydEZyb21D
YWNoZShmb3JtVHlwZSwgcmVjdC5zaXplKCkpOwogICAgIF9BU1NFUlRfT05fUkVMRUFTRV9SRVRV
Uk5fVkFMKGVudHJ5LCBmYWxzZSwgIkNvdWxkIG5vdCBwYWludCBuYXRpdmUgSFRNTCBwYXJ0IGR1
ZSB0byBtaXNzaW5nIHRoZW1lIHBhcnQuIik7CiAKICAgICBpZiAobWVkaWFFbGVtZW50VHlwZSA9
PSBNZWRpYVBsYXlCdXR0b24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
ZmwvUmVuZGVyVGhlbWVFZmwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJU
aGVtZUVmbC5oCmluZGV4IGMxMjZmMGE5NDcwYmZkMzE5OGY2YTZkMWJkZWQzNzAwZTExOTM4ZGIu
LjcwZDQ2MzQ3OTU4ZTg4NGI1MGUyNmIzNWVmY2NmZWJmNTBmZmMwZjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oCkBAIC0yMTAsNyArMjEwLDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVuRm9jdXNl
ZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZvaWQgc2V0VGhlbWVQ
YXRoKGNvbnN0IFN0cmluZyYpOwotICAgIFN0cmluZyB0aGVtZVBhdGgoKSB7IHJldHVybiBtX3Ro
ZW1lUGF0aDsgfQorICAgIFN0cmluZyB0aGVtZVBhdGgoKSBjb25zdDsKIAogcHJvdGVjdGVkOgog
ICAgIHN0YXRpYyBmbG9hdCBkZWZhdWx0Rm9udFNpemU7CkBAIC0yMTksMTUgKzIxOSwxMyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbG9hZFRoZW1lKCk7CiAgICAgQUxXQVlTX0lOTElORSBib29sIGxv
YWRUaGVtZUlmTmVlZGVkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2VkamUgfHwg
Y29uc3RfY2FzdDxSZW5kZXJUaGVtZUVmbCo+KHRoaXMpLT5sb2FkVGhlbWUoKTsKKyAgICAgICAg
cmV0dXJuIG1fZWRqZSB8fCAoIW1fdGhlbWVQYXRoLmlzRW1wdHkoKSAmJiBjb25zdF9jYXN0PFJl
bmRlclRoZW1lRWZsKj4odGhpcyktPmxvYWRUaGVtZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIGFw
cGx5UGFydERlc2NyaXB0aW9uc0Zyb20oRXZhc19PYmplY3QqKTsKKyAgICB2b2lkIGFwcGx5UGFy
dERlc2NyaXB0aW9uc0Zyb20oY29uc3QgU3RyaW5nJiB0aGVtZVBhdGgpOwogCi0gICAgY29uc3Qg
Y2hhciogZWRqZUdyb3VwRnJvbUZvcm1UeXBlKEZvcm1UeXBlKSBjb25zdDsKICAgICB2b2lkIGFw
cGx5RWRqZVN0YXRlRnJvbUZvcm0oRXZhc19PYmplY3QqLCBDb250cm9sU3RhdGVzKTsKICAgICBi
b29sIHBhaW50VGhlbWVQYXJ0KFJlbmRlck9iamVjdCosIEZvcm1UeXBlLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgYm9vbCBpc0Zvcm1FbGVtZW50VG9vTGFyZ2VUb0Rp
c3BsYXkoY29uc3QgSW50U2l6ZSYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGJvb2wgZW1p
dE1lZGlhQnV0dG9uU2lnbmFsKEZvcm1UeXBlLCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSwgY29u
c3QgSW50UmVjdCYpOwpAQCAtMjYwLDYgKzI1OCwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgYXBw
bHlQYXJ0RGVzY3JpcHRpb24oRXZhc19PYmplY3QqLCBzdHJ1Y3QgVGhlbWVQYXJ0RGVzYyopOwog
CiAgICAgc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkgeworICAgICAgICBUaGVtZVBhcnRDYWNo
ZUVudHJ5KCk7CisgICAgICAgIH5UaGVtZVBhcnRDYWNoZUVudHJ5KCk7CisgICAgICAgIHN0YXRp
YyBUaGVtZVBhcnRDYWNoZUVudHJ5KiBjcmVhdGUoY29uc3QgU3RyaW5nJiB0aGVtZVBhdGgsIEZv
cm1UeXBlLCBjb25zdCBJbnRTaXplJik7CisgICAgICAgIHZvaWQgcmV1c2UoY29uc3QgU3RyaW5n
JiB0aGVtZVBhdGgsIEZvcm1UeXBlLCBjb25zdCBJbnRTaXplJiA9IEludFNpemUoKSk7CisKICAg
ICAgICAgRm9ybVR5cGUgdHlwZTsKICAgICAgICAgSW50U2l6ZSBzaXplOwogICAgICAgICBFY29y
ZV9FdmFzKiBlZTsKQEAgLTI3MSwyMCArMjc0LDEwIEBAIHByaXZhdGU6CiAKICAgICAvLyB0aGlz
IHNob3VsZCBiZSBzbWFsbCBhbmQgbm90IHNvIGZyZXF1ZW50bHkgdXNlZCwKICAgICAvLyBzbyB1
c2UgYSB2ZWN0b3IgYW5kIGRvIGxpbmVhciBzZWFyY2hlcwotICAgIFZlY3RvcjxzdHJ1Y3QgVGhl
bWVQYXJ0Q2FjaGVFbnRyeSAqPiBtX3BhcnRDYWNoZTsKLQotICAgIC8vIGdldCAodXNlLCBjcmVh
dGUgb3IgcmVwbGFjZSkgZW50cnkgZnJvbSBjYWNoZQotICAgIHN0cnVjdCBUaGVtZVBhcnRDYWNo
ZUVudHJ5KiBjYWNoZVRoZW1lUGFydEdldChGb3JtVHlwZSwgY29uc3QgSW50U2l6ZSYpOwotICAg
IC8vIGZsdXNoIGNhY2hlLCBkZWxldGluZyBhbGwgZW50cmllcwotICAgIHZvaWQgY2FjaGVUaGVt
ZVBhcnRGbHVzaCgpOwotCi0gICAgLy8gaW50ZXJuYWwsIHVzZWQgYnkgY2FjaGVUaGVtZVBhcnRH
ZXQoKQotICAgIGJvb2wgdGhlbWVQYXJ0Q2FjaGVFbnRyeVJlc2V0KHN0cnVjdCBUaGVtZVBhcnRD
YWNoZUVudHJ5KiwgRm9ybVR5cGUpOwotICAgIGJvb2wgdGhlbWVQYXJ0Q2FjaGVFbnRyeVN1cmZh
Y2VDcmVhdGUoc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqKTsKLSAgICBzdHJ1Y3QgVGhlbWVQ
YXJ0Q2FjaGVFbnRyeSogY2FjaGVUaGVtZVBhcnROZXcoRm9ybVR5cGUsIGNvbnN0IEludFNpemUm
KTsKLSAgICBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY2FjaGVUaGVtZVBhcnRSZXNldChG
b3JtVHlwZSwgc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqKTsKLSAgICBzdHJ1Y3QgVGhlbWVQ
YXJ0Q2FjaGVFbnRyeSogY2FjaGVUaGVtZVBhcnRSZXNpemVBbmRSZXNldChGb3JtVHlwZSwgY29u
c3QgSW50U2l6ZSYsIHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5Kik7CisgICAgVmVjdG9yPFRo
ZW1lUGFydENhY2hlRW50cnkqPiBtX3BhcnRDYWNoZTsKIAorICAgIFRoZW1lUGFydENhY2hlRW50
cnkqIGdldFRoZW1lUGFydEZyb21DYWNoZShGb3JtVHlwZSwgY29uc3QgSW50U2l6ZSYpOworICAg
IHZvaWQgZmx1c2hUaGVtZVBhcnRDYWNoZSgpOwogfTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>