<?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>90248</bug_id>
          
          <creation_ts>2012-06-28 23:37:24 -0700</creation_ts>
          <short_desc>[Platform-ChromiumMac] Introduce LocaleMac class</short_desc>
          <delta_ts>2012-07-09 23:49:30 -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>Platform</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>
          <dependson>90752</dependson>
          <blocked>90237</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>yosin</reporter>
          <assigned_to>yosin</assigned_to>
          <cc>ap</cc>
    
    <cc>tkent</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>660176</commentid>
    <comment_count>0</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-06-28 23:37:24 -0700</bug_when>
    <thetext>For unit testing, we would like to have LocaleMac class as of LocaleICU and LocaleWin to use specific locale rather than system default locale.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664728</commentid>
    <comment_count>1</comment_count>
      <attachid>151212</attachid>
    <who name="">yosin</who>
    <bug_when>2012-07-09 01:30:09 -0700</bug_when>
    <thetext>Created attachment 151212
Patch 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664731</commentid>
    <comment_count>2</comment_count>
      <attachid>151214</attachid>
    <who name="">yosin</who>
    <bug_when>2012-07-09 01:33:21 -0700</bug_when>
    <thetext>Created attachment 151214
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664732</commentid>
    <comment_count>3</comment_count>
      <attachid>151214</attachid>
    <who name="">yosin</who>
    <bug_when>2012-07-09 01:34:12 -0700</bug_when>
    <thetext>Comment on attachment 151214
Patch 2

Could you review this patch?
Thanks in advance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664776</commentid>
    <comment_count>4</comment_count>
      <attachid>151214</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-07-09 03:45:35 -0700</bug_when>
    <thetext>Comment on attachment 151214
Patch 2

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

&gt; Source/WebCore/platform/text/mac/LocaleMac.mm:83
&gt; +        return numeric_limits&lt;double&gt;::quiet_NaN();

We should prepend std:: to numeric_limits&lt;&gt;.

&gt; Source/WebCore/platform/text/mac/LocaleMac.mm:181
&gt; -        // weekdayName starts with Monday.
&gt; -        labels.append(WTF::weekdayName[(i + 6) % 7]);
&gt; +        m_weekDayShortLabels.append(WTF::weekdayName[(i + 6) % 7]);

Do not remove the comment.

&gt; Source/WebKit/chromium/tests/LocaleMacTest.cpp:18
&gt; + *     * Redistributions of source code must retain the above copyright
&gt; + * notice, this list of conditions and the following disclaimer.
&gt; + *     * Redistributions in binary form must reproduce the above
&gt; + * copyright notice, this list of conditions and the following disclaimer
&gt; + * in the documentation and/or other materials provided with the
&gt; + * distribution.
&gt; + *     * Neither the name of Google Inc. nor the names of its
&gt; + * contributors may be used to endorse or promote products derived from
&gt; + * this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

Please use the correct license header.

&gt; Source/WebKit/chromium/tests/LocaleMacTest.cpp:147
&gt; +    UChar frDecember[] = { &apos;d&apos;, 0xE9, &apos;c&apos;, &apos;e&apos;, &apos;m&apos;, &apos;b&apos;, &apos;r&apos;, &apos;e&apos;, 0 };
&gt; +    EXPECT_STREQ(String(frDecember).utf8().data(), monthLabel(&quot;fr_FR&quot;, December).utf8().data());

The conversions for UChar -&gt; String- &gt; UTF8 CString is redundant.  Why don&apos;t you specify EXPECT_STREQ(&quot;d\xC3\xA9cembre&quot;, ...?

&gt; Source/WebKit/chromium/tests/LocaleMacTest.cpp:154
&gt; +    UChar jaJanuary[] = { &apos;1&apos;, 0x6708, 0 };
&gt; +    EXPECT_STREQ(String(jaJanuary).utf8().data(), monthLabel(&quot;ja_JP&quot;, January).utf8().data());
&gt; +    UChar jaJune[] = { &apos;6&apos;, 0x6708, 0 };
&gt; +    EXPECT_STREQ(String(jaJune).utf8().data(), monthLabel(&quot;ja_JP&quot;, June).utf8().data());
&gt; +    UChar jaDecember[] = { &apos;1&apos;, &apos;2&apos;, 0x6708, 0 };
&gt; +    EXPECT_STREQ(String(jaDecember).utf8().data(), monthLabel(&quot;ja_JP&quot;, December).utf8().data());

ditto.

&gt; Source/WebKit/chromium/tests/LocaleMacTest.cpp:172
&gt; +    UChar jaSunday[] = { 0x65E5, 0 };
&gt; +    EXPECT_STREQ(String(jaSunday).utf8().data(), weekDayShortLabel(&quot;ja_JP&quot;, Sunday).utf8().data());
&gt; +    UChar jaWednesday[] = { 0x6C34, 0 };
&gt; +    EXPECT_STREQ(String(jaWednesday).utf8().data(), weekDayShortLabel(&quot;ja_JP&quot;, Wednesday).utf8().data());
&gt; +    UChar jaSaturday[] = { 0x571F, 0 };
&gt; +    EXPECT_STREQ(String(jaSaturday).utf8().data(), weekDayShortLabel(&quot;ja_JP&quot;, Saturday).utf8().data());

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665407</commentid>
    <comment_count>5</comment_count>
      <attachid>151384</attachid>
    <who name="">yosin</who>
    <bug_when>2012-07-09 18:59:59 -0700</bug_when>
    <thetext>Created attachment 151384
Patch 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665408</commentid>
    <comment_count>6</comment_count>
      <attachid>151384</attachid>
    <who name="">yosin</who>
    <bug_when>2012-07-09 19:02:49 -0700</bug_when>
    <thetext>Comment on attachment 151384
Patch 3

Could you review this patch?
Thanks in advance.

== Changes since the last review ==
* Add &quot;std::&quot; to numeric_limits
* Restore a removed comment in weekDayShortLabels()
* Update copyright text in LocaleMacTest.cpp
* Use UTF-8 string literal in LocaleMacTest.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665415</commentid>
    <comment_count>7</comment_count>
      <attachid>151384</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-07-09 19:14:07 -0700</bug_when>
    <thetext>Comment on attachment 151384
Patch 3

Looks ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665417</commentid>
    <comment_count>8</comment_count>
      <attachid>151384</attachid>
    <who name="">yosin</who>
    <bug_when>2012-07-09 19:16:35 -0700</bug_when>
    <thetext>Comment on attachment 151384
Patch 3

Clearing flags on attachment: 151384

Committed r122184: &lt;http://trac.webkit.org/changeset/122184&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665418</commentid>
    <comment_count>9</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-07-09 19:16:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665513</commentid>
    <comment_count>10</comment_count>
      <attachid>151384</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-07-09 23:49:30 -0700</bug_when>
    <thetext>Comment on attachment 151384
Patch 3

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

&gt; Source/WebCore/platform/text/mac/LocaleMac.mm:63
&gt; +    static LocaleMac* currentLocale = LocaleMac::create([NSLocale currentLocale]).leakPtr();

The return value of [NSLocale currentLocale] is id, not a string.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151212</attachid>
            <date>2012-07-09 01:30:09 -0700</date>
            <delta_ts>2012-07-09 01:33:16 -0700</delta_ts>
            <desc>Patch 1</desc>
            <filename>bug-90248-20120709173007.patch</filename>
            <type>text/plain</type>
            <size>32051</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMDkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQyYTk0YmNiNmJmNjI0
YTM4NDM0MTQ3ZWNlODIxNTFjZTk0Y2EyYy4uY2ViY2MxYmZlOTgwYTJhMjVmOTEwNTY0ZDhiNmQz
NjhjNTRiMTFiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTA3LTA5ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1BsYXRmb3JtXSBJ
bnRyb2R1Y2UgTG9jYWxlTWFjIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MDI0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgaW1wbGVtZW50YXRpb24gb2YgbG9jYWxp
emVkIGRhdGUgZm9ybWF0IHJlbGF0ZWQKKyAgICAgICAgZnVuY3Rpb25zIGludG8gTG9jYWxlTWFj
IGNsYXNzIGFzIG9mIExvY2FsZVdpbiBjbGFzcyBmb3IgZWFzZSBvZgorICAgICAgICBtYWludGFp
bi4KKworICAgICAgICBUZXN0czogV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xvY2FsZU1hY1Rlc3Qu
Y3BwCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDogSW5jbHVkZSBMb2NhbGVN
YWMubW0KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9t
YWMvTG9jYWxlTWFjLmg6IFJlcGxhY2UgTG9jYWxlV2luIHRvIExvY2FsZU1hYy4KKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpMb2Nh
bGVNYWM6OkxvY2FsZU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVNYWM6On5Mb2NhbGVN
YWMpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxlTWFjOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TG9jYWxlTWFjOjpjdXJyZW50TG9jYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2Fs
ZU1hYzo6Y3JlYXRlU2hvcnREYXRlRm9ybWF0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2Fs
ZU1hYzo6cGFyc2VEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZU1hYzo6Zm9ybWF0RGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVNYWM6OmRhdGVGb3JtYXRUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxvY2FsZU1hYzo6bW9udGhMYWJlbHMpOgorICAgICAgICAoV2ViQ29yZTo6
TG9jYWxlTWFjOjp3ZWVrRGF5U2hvcnRMYWJlbHMpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxl
TWFjOjpmaXJzdERheU9mV2Vlayk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxp
emVkRGF0ZU1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUxvY2FsaXplZERhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Zm9ybWF0TG9jYWxpemVkRGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpsb2NhbGl6ZWREYXRlRm9ybWF0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjptb250aExhYmVs
cyk6CisgICAgICAgIChXZWJDb3JlOjp3ZWVrRGF5U2hvcnRMYWJlbHMpOgorICAgICAgICAoV2Vi
Q29yZTo6Zmlyc3REYXlPZldlZWspOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvbWFjL0xvY2Fs
aXplZERhdGVNYWMubW06IFJlbW92ZWQuCisKIDIwMTItMDctMDggIFlvc2hpZnVtaSBJbm91ZSAg
PHlvc2luQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbUGxhdGZvcm0tTWFjXSBEZXJpdmUgTG9j
YWxlTWFjLntjcHAsaH0gYW5kIExvY2FsaXplZERhdGVNYWMuY3BwIGZyb20gTG9jYWxlV2luCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDczODQ5NDA0NzBiZmQzMjkzNGE3YzQ5N2RhNTll
ZDUzYzVkNGU0YjIuLmM1ZmI1YWNlZjgxN2ExMzBmZjU1MzZlYWZjZDU0ODdjNTExYTIwNDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTItMDctMDkgIFlv
c2hpZnVtaSBJbm91ZSAgPHlvc2luQGNocm9taXVtLm9yZz4KKworICAgICAgICBbUGxhdGZvcm1d
IEludHJvZHVjZSBMb2NhbGVNYWMgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTkwMjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRlZCB0ZXN0cyBmb3IgTG9jYWxlTWFjIGNs
YXNzLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvTG9jYWxlTWFj
VGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoTG9jYWxlTWFjVGVzdCk6CisgICAgICAgIChMb2Nh
bGVNYWNUZXN0OjpkYXRlQ29tcG9uZW50cyk6CisgICAgICAgIChMb2NhbGVNYWNUZXN0Ojptc0Zv
ckRhdGUpOgorICAgICAgICAoTG9jYWxlTWFjVGVzdDo6Zm9ybWF0RGF0ZSk6CisgICAgICAgIChM
b2NhbGVNYWNUZXN0OjpwYXJzZURhdGUpOgorICAgICAgICAoTG9jYWxlTWFjVGVzdDo6ZGF0ZUZv
cm1hdFRleHQpOgorICAgICAgICAoTG9jYWxlTWFjVGVzdDo6Zmlyc3REYXlPZldlZWspOgorICAg
ICAgICAoTG9jYWxlTWFjVGVzdDo6bW9udGhMYWJlbCk6CisgICAgICAgIChMb2NhbGVNYWNUZXN0
Ojp3ZWVrRGF5U2hvcnRMYWJlbCk6CisgICAgICAgIChURVNUX0YpOgorCiAyMDEyLTA3LTA1ICBZ
b3NoaWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCBDaHJvbWl1bSBnYXJkZW5pbmcuIFJvbGwgQ2hyb21pdW0gREVQUwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCBjYjBlNzZhMDUwYTA1NzBmNmViZGZkMmUzNzhjZDc3
MTNjN2FlNzk5Li5lYmU1MzlkOTUyMWI5YmMxYjU4NTJmYTM3MjlkNjM0OTU3NThjNWRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtMTY0OCw5ICsxNjQ4LDEwIEBA
CiAKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YlN5c3RlbUludGVyZmFjZVxcLm1tJCddLAogCi0gICAgICAgICAgICAjIFdlIHVzZSBMb2NhbGl6
ZWREYXRlTWFjLm1tIGluc3RlYWQgb2YgTG9jYWxpemVkRGF0ZUlDVS5jcHAuCisgICAgICAgICAg
ICAjIFdlIHVzZSBMb2NhbGl6ZWREYXRlTWFjLmNwcCB3aXRoIExvY2FsZU1hYy5tbSBpbnN0ZWFk
IG9mIExvY2FsaXplZERhdGVJQ1UuY3BwLgogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRm
b3JtL3RleHQvTG9jYWxpemVkRGF0ZUlDVVxcLmNwcCQnXSwKLSAgICAgICAgICAgIFsnaW5jbHVk
ZScsICdwbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGl6ZWREYXRlTWFjXFwubW0kJ10sCisgICAgICAg
ICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjXFwubW0kJ10sCisg
ICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxpemVkRGF0ZU1h
Y1xcLmNwcCQnXSwKIAogICAgICAgICAgICAgIyBUaGUgTWFjIHVzZXMgcGxhdGZvcm0vbWFjL0tp
bGxSaW5nTWFjLm1tIGluc3RlYWQgb2YgdGhlIGR1bW15CiAgICAgICAgICAgICAjIGltcGxlbWVu
dGF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGVmYTQzYzc4NTgxMmI0MTFjZGRlMDlmOTBkZTlm
OWRjNjNlZTdlNDkuLmEzYzJlOTNmNjM2YmUyYjIxY2MxMmU3N2ZmZmI0MTI5M2VlNTI1MjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKQEAgLTQ0MzYsNyArNDQzNiw5IEBACiAgICAgICAgICAgICAncGxhdGZv
cm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4
dC9ndGsvVGV4dENvZGVjR3RrLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvbWFjL0h5
cGhlbmF0aW9uTWFjLm1tJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGl6
ZWREYXRlTWFjLm1tJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLm1tJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGl6ZWREYXRlTWFjLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxpemVkTnVtYmVyTWFjLm1tJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS90ZXh0L21hYy9TaGFwZUFyYWJpYy5jJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS90ZXh0L21hYy9TaGFwZUFyYWJpYy5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9tYWMvTG9jYWxlTWFjLmgKaW5kZXggNmE3NWM5OTQ1NTdmNTcwYTk4Y2JmN2Y2MDliNDU2
ZjNkY2UyM2M0NC4uNGMzNzFlZDdhODFkZjM5Y2MyYTM3NWNhODIwOTUxMWM4NzczNGE0MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLmgKQEAgLTI4LDYw
ICsyOCw0NiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIExvY2FsZVdpbl9oCi0j
ZGVmaW5lIExvY2FsZVdpbl9oCisjaWZuZGVmIExvY2FsZU1hY19oCisjZGVmaW5lIExvY2FsZU1h
Y19oCiAKLSNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitPQkpDX0NMQVNTIE5TRGF0ZUZvcm1hdHRlcjsK
K09CSkNfQ0xBU1MgTlNMb2NhbGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRGF0
ZUNvbXBvbmVudHM7Ci1zdHJ1Y3QgRGF0ZUZvcm1hdFRva2VuOwogCi1jbGFzcyBMb2NhbGVXaW4g
eworY2xhc3MgTG9jYWxlTWFjIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxMb2Nh
bGVXaW4+IGNyZWF0ZShMQ0lEKTsKLSAgICBzdGF0aWMgTG9jYWxlV2luKiBjdXJyZW50TG9jYWxl
KCk7Ci0gICAgfkxvY2FsZVdpbigpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2FsZU1hYz4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBMb2NhbGVNYWMqIGN1cnJlbnRMb2Nh
bGUoKTsKKyAgICB+TG9jYWxlTWFjKCk7CiAgICAgZG91YmxlIHBhcnNlRGF0ZShjb25zdCBTdHJp
bmcmKTsKICAgICBTdHJpbmcgZm9ybWF0RGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYpOworCiAj
aWYgRU5BQkxFKENBTEVOREFSX1BJQ0tFUikKICAgICBTdHJpbmcgZGF0ZUZvcm1hdFRleHQoKTsK
ICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgbW9udGhMYWJlbHMoKTsKICAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgd2Vla0RheVNob3J0TGFiZWxzKCk7Ci0gICAgdW5zaWduZWQgZmlyc3REYXlP
ZldlZWsoKSB7IHJldHVybiBtX2ZpcnN0RGF5T2ZXZWVrOyB9CisgICAgdW5zaWduZWQgZmlyc3RE
YXlPZldlZWsoKTsKICNlbmRpZgogCi0gICAgLy8gRm9yIHRlc3RpbmcuCi0gICAgZG91YmxlIHBh
cnNlRGF0ZShjb25zdCBTdHJpbmcmIGZvcm1hdCwgaW50IGJhc2VZZWFyLCBjb25zdCBTdHJpbmcm
IGlucHV0KTsKLSAgICBTdHJpbmcgZm9ybWF0RGF0ZShjb25zdCBTdHJpbmcmIGZvcm1hdCwgaW50
IGJhc2VZZWFyLCBpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5KTsKLSAgICBzdGF0aWMgU3Ry
aW5nIGRhdGVGb3JtYXRUZXh0KGNvbnN0IFN0cmluZyYgZm9ybWF0LCBjb25zdCBTdHJpbmcmIHll
YXJUZXh0LCBjb25zdCBTdHJpbmcmIG1vbnRoVGV4dCwgY29uc3QgU3RyaW5nJiBkYXlUZXh0KTsK
LQogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBMb2NhbGVXaW4oTENJRCk7Ci0gICAgU3RyaW5nIGdl
dExvY2FsZUluZm9TdHJpbmcoTENUWVBFKTsKLSAgICB2b2lkIGVuc3VyZVNob3J0TW9udGhMYWJl
bHMoKTsKLSAgICB2b2lkIGVuc3VyZU1vbnRoTGFiZWxzKCk7Ci0gICAgdm9pZCBlbnN1cmVTaG9y
dERhdGVUb2tlbnMoKTsKLSAgICBpbnQgcGFyc2VOdW1iZXJPck1vbnRoKGNvbnN0IFN0cmluZyYs
IHVuc2lnbmVkJiBpbmRleCk7Ci0gICAgZG91YmxlIHBhcnNlRGF0ZShjb25zdCBWZWN0b3I8RGF0
ZUZvcm1hdFRva2VuPiYsIGludCBiYXNlWWVhciwgY29uc3QgU3RyaW5nJik7Ci0gICAgU3RyaW5n
IGZvcm1hdERhdGUoY29uc3QgVmVjdG9yPERhdGVGb3JtYXRUb2tlbj4mLCBpbnQgYmFzZVllYXIs
IGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXkpOwotI2lmIEVOQUJMRShDQUxFTkRBUl9QSUNL
RVIpCi0gICAgdm9pZCBlbnN1cmVXZWVrRGF5U2hvcnRMYWJlbHMoKTsKLSNlbmRpZgorICAgIGV4
cGxpY2l0IExvY2FsZU1hYyhjb25zdCBTdHJpbmcmKTsKKyAgICBOU0RhdGVGb3JtYXR0ZXIgKmNy
ZWF0ZVNob3J0RGF0ZUZvcm1hdHRlcigpOwogCi0gICAgTENJRCBtX2xjaWQ7Ci0gICAgaW50IG1f
YmFzZVllYXI7Ci0gICAgVmVjdG9yPERhdGVGb3JtYXRUb2tlbj4gbV9zaG9ydERhdGVUb2tlbnM7
Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9zaG9ydE1vbnRoTGFiZWxzOwotICAgIFZlY3RvcjxTdHJp
bmc+IG1fbW9udGhMYWJlbHM7CisgICAgUmV0YWluUHRyPE5TTG9jYWxlPiBtX2xvY2FsZTsKICNp
ZiBFTkFCTEUoQ0FMRU5EQVJfUElDS0VSKQorICAgIFN0cmluZyBtX2xvY2FsaXplZERhdGVGb3Jt
YXRUZXh0OworICAgIFZlY3RvcjxTdHJpbmc+IG1fbW9udGhMYWJlbHM7CiAgICAgVmVjdG9yPFN0
cmluZz4gbV93ZWVrRGF5U2hvcnRMYWJlbHM7Ci0gICAgdW5zaWduZWQgbV9maXJzdERheU9mV2Vl
azsKICNlbmRpZgotCiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L21hYy9Mb2NhbGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21h
Yy9Mb2NhbGVNYWMubW0KaW5kZXggMDg4NzZmOWQzODEzNTBiOGNjZmQ5NTMyZmMyMmJiOWY2YmE0
YmIyMS4uNWMyY2EyMmQ1NjcyZGI2NDJhNWQzMGY2YjVmMjJjNWY3NTJhZTZmNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbQpAQCAtMjksMTIgKzI5
LDE0IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxvY2FsaXplZERh
dGUuaCIKKyNpbmNsdWRlICJMb2NhbGVNYWMuaCIKIAogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0Rh
dGVGb3JtYXR0ZXIuaD4KKyNpbXBvcnQgPEZvdW5kYXRpb24vTlNMb2NhbGUuaD4KKyNpbmNsdWRl
ICJMb2NhbGl6ZWREYXRlLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1
ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTQyLDkgKzQ0LDMwIEBAIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIE5TRGF0ZUZvcm1hdHRlciAqY3Jl
YXRlU2hvcnREYXRlRm9ybWF0dGVyKCkKK0xvY2FsZU1hYzo6TG9jYWxlTWFjKGNvbnN0IFN0cmlu
ZyYgbG9jYWxlSWRlbnRpZmllcikKKyAgICA6IG1fbG9jYWxlKFtbTlNMb2NhbGUgYWxsb2NdIGlu
aXRXaXRoTG9jYWxlSWRlbnRpZmllcjpsb2NhbGVJZGVudGlmaWVyXSkKK3sKK30KKworTG9jYWxl
TWFjOjp+TG9jYWxlTWFjKCkKK3sKK30KKworUGFzc093blB0cjxMb2NhbGVNYWM+IExvY2FsZU1h
Yzo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgbG9jYWxlSWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IExvY2FsZU1hYyhsb2NhbGVJZGVudGlmaWVyKSk7Cit9CisKK0xvY2FsZU1h
YyogTG9jYWxlTWFjOjpjdXJyZW50TG9jYWxlKCkKK3sKKyAgICBzdGF0aWMgTG9jYWxlTWFjKiBj
dXJyZW50TG9jYWxlID0gTG9jYWxlTWFjOjpjcmVhdGUoW05TTG9jYWxlIGN1cnJlbnRMb2NhbGVd
KS5sZWFrUHRyKCk7CisgICAgcmV0dXJuIGN1cnJlbnRMb2NhbGU7Cit9CisKK05TRGF0ZUZvcm1h
dHRlciogTG9jYWxlTWFjOjpjcmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIoKQogewogICAgIE5TRGF0
ZUZvcm1hdHRlciAqZm9ybWF0dGVyID0gW1tOU0RhdGVGb3JtYXR0ZXIgYWxsb2NdIGluaXRdOwor
ICAgIFtmb3JtYXR0ZXIgc2V0TG9jYWxlOm1fbG9jYWxlLmdldCgpXTsKICAgICBbZm9ybWF0dGVy
IHNldERhdGVTdHlsZTpOU0RhdGVGb3JtYXR0ZXJTaG9ydFN0eWxlXTsKICAgICBbZm9ybWF0dGVy
IHNldFRpbWVTdHlsZTpOU0RhdGVGb3JtYXR0ZXJOb1N0eWxlXTsKICAgICBbZm9ybWF0dGVyIHNl
dFRpbWVab25lOltOU1RpbWVab25lIHRpbWVab25lV2l0aEFiYnJldmlhdGlvbjpAIlVUQyJdXTsK
QEAgLTUyLDQ0ICs3NSwyMCBAQCBzdGF0aWMgTlNEYXRlRm9ybWF0dGVyICpjcmVhdGVTaG9ydERh
dGVGb3JtYXR0ZXIoKQogICAgIHJldHVybiBmb3JtYXR0ZXI7CiB9CiAKLWRvdWJsZSBwYXJzZUxv
Y2FsaXplZERhdGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgRGF0ZUNvbXBvbmVudHM6OlR5cGUgdHlw
ZSkKK2RvdWJsZSBMb2NhbGVNYWM6OnBhcnNlRGF0ZShjb25zdCBTdHJpbmcmIGlucHV0KQogewot
ICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6OkRhdGU6IHsKLSAg
ICAgICAgUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gZm9ybWF0dGVyKEFkb3B0TlMsIGNyZWF0
ZVNob3J0RGF0ZUZvcm1hdHRlcigpKTsKLSAgICAgICAgTlNEYXRlICpkYXRlID0gW2Zvcm1hdHRl
ci5nZXQoKSBkYXRlRnJvbVN0cmluZzppbnB1dF07Ci0gICAgICAgIGlmICghZGF0ZSkKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICByZXR1cm4gW2RhdGUgdGltZUludGVydmFsU2luY2UxOTcw
XSAqIG1zUGVyU2Vjb25kOwotICAgIH0KLSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlVGlt
ZToKLSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlVGltZUxvY2FsOgotICAgIGNhc2UgRGF0
ZUNvbXBvbmVudHM6Ok1vbnRoOgotICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6OlRpbWU6Ci0gICAg
Y2FzZSBEYXRlQ29tcG9uZW50czo6V2VlazoKLSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpJbnZh
bGlkOgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIG51bWVyaWNfbGltaXRzPGRv
dWJsZT46OnF1aWV0X05hTigpOworICAgIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IGZvcm1h
dHRlcihBZG9wdE5TLCBjcmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIoKSk7CisgICAgTlNEYXRlICpk
YXRlID0gW2Zvcm1hdHRlci5nZXQoKSBkYXRlRnJvbVN0cmluZzppbnB1dF07CisgICAgaWYgKCFk
YXRlKQorICAgICAgICByZXR1cm4gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7
CisgICAgcmV0dXJuIFtkYXRlIHRpbWVJbnRlcnZhbFNpbmNlMTk3MF0gKiBtc1BlclNlY29uZDsK
IH0KIAotU3RyaW5nIGZvcm1hdExvY2FsaXplZERhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRh
dGVDb21wb25lbnRzKQorU3RyaW5nIExvY2FsZU1hYzo6Zm9ybWF0RGF0ZShjb25zdCBEYXRlQ29t
cG9uZW50cyYgZGF0ZUNvbXBvbmVudHMpCiB7Ci0gICAgc3dpdGNoIChkYXRlQ29tcG9uZW50cy50
eXBlKCkpIHsKLSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlOiB7Ci0gICAgICAgIFJldGFp
blB0cjxOU0RhdGVGb3JtYXR0ZXI+IGZvcm1hdHRlcihBZG9wdE5TLCBjcmVhdGVTaG9ydERhdGVG
b3JtYXR0ZXIoKSk7Ci0gICAgICAgIE5TVGltZUludGVydmFsIGludGVydmFsID0gZGF0ZUNvbXBv
bmVudHMubWlsbGlzZWNvbmRzU2luY2VFcG9jaCgpIC8gbXNQZXJTZWNvbmQ7Ci0gICAgICAgIHJl
dHVybiBTdHJpbmcoW2Zvcm1hdHRlci5nZXQoKSBzdHJpbmdGcm9tRGF0ZTpbTlNEYXRlIGRhdGVX
aXRoVGltZUludGVydmFsU2luY2UxOTcwOmludGVydmFsXV0pOwotICAgIH0KLSAgICBjYXNlIERh
dGVDb21wb25lbnRzOjpEYXRlVGltZToKLSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlVGlt
ZUxvY2FsOgotICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6Ok1vbnRoOgotICAgIGNhc2UgRGF0ZUNv
bXBvbmVudHM6OlRpbWU6Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50czo6V2VlazoKLSAgICBjYXNl
IERhdGVDb21wb25lbnRzOjpJbnZhbGlkOgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0
dXJuIFN0cmluZygpOworICAgIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IGZvcm1hdHRlcihB
ZG9wdE5TLCBjcmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIoKSk7CisgICAgTlNUaW1lSW50ZXJ2YWwg
aW50ZXJ2YWwgPSBkYXRlQ29tcG9uZW50cy5taWxsaXNlY29uZHNTaW5jZUVwb2NoKCkgLyBtc1Bl
clNlY29uZDsKKyAgICByZXR1cm4gU3RyaW5nKFtmb3JtYXR0ZXIuZ2V0KCkgc3RyaW5nRnJvbURh
dGU6W05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDppbnRlcnZhbF1dKTsKIH0K
IAogI2lmIEVOQUJMRShDQUxFTkRBUl9QSUNLRVIpCkBAIC0xNDAsNjIgKzEzOSw1OCBAQCBzdGF0
aWMgU3RyaW5nIGxvY2FsaXplRGF0ZUZvcm1hdChjb25zdCBTdHJpbmcmIGZvcm1hdCkKICAgICBy
ZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBsb2NhbGl6ZWREYXRlRm9ybWF0
VGV4dCgpCitTdHJpbmcgTG9jYWxlTWFjOjpkYXRlRm9ybWF0VGV4dCgpCiB7Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIHRleHQsICgpKTsKLSAgICBpZiAoIXRleHQuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gdGV4dDsKKyAgICBpZiAoIW1fbG9jYWxpemVkRGF0ZUZvcm1hdFRl
eHQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9sb2NhbGl6ZWREYXRlRm9ybWF0VGV4dDsK
ICAgICBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBmb3JtYXR0ZXIoQWRvcHROUywgY3JlYXRl
U2hvcnREYXRlRm9ybWF0dGVyKCkpOwotICAgIHRleHQgPSBsb2NhbGl6ZURhdGVGb3JtYXQoU3Ry
aW5nKFtmb3JtYXR0ZXIuZ2V0KCkgZGF0ZUZvcm1hdF0pKTsKLSAgICByZXR1cm4gdGV4dDsKKyAg
ICBtX2xvY2FsaXplZERhdGVGb3JtYXRUZXh0ID0gbG9jYWxpemVEYXRlRm9ybWF0KFN0cmluZyhb
Zm9ybWF0dGVyLmdldCgpIGRhdGVGb3JtYXRdKSk7CisgICAgcmV0dXJuICBtX2xvY2FsaXplZERh
dGVGb3JtYXRUZXh0OwogfQogCi1jb25zdCBWZWN0b3I8U3RyaW5nPiYgbW9udGhMYWJlbHMoKQor
Y29uc3QgVmVjdG9yPFN0cmluZz4mIExvY2FsZU1hYzo6bW9udGhMYWJlbHMoKQogewotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPFN0cmluZz4sIGxhYmVscywgKCkpOwotICAgIGlmICgh
bGFiZWxzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGxhYmVsczsKLSAgICBsYWJlbHMucmVz
ZXJ2ZUNhcGFjaXR5KDEyKTsKKyAgICBpZiAoIW1fbW9udGhMYWJlbHMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gbV9tb250aExhYmVsczsKKyAgICBtX21vbnRoTGFiZWxzLnJlc2VydmVDYXBh
Y2l0eSgxMik7CiAgICAgUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gZm9ybWF0dGVyKEFkb3B0
TlMsIGNyZWF0ZVNob3J0RGF0ZUZvcm1hdHRlcigpKTsKICAgICBOU0FycmF5ICphcnJheSA9IFtm
b3JtYXR0ZXIuZ2V0KCkgbW9udGhTeW1ib2xzXTsKICAgICBpZiAoW2FycmF5IGNvdW50XSA9PSAx
MikgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTI7ICsraSkKLSAgICAgICAg
ICAgIGxhYmVscy5hcHBlbmQoU3RyaW5nKFthcnJheSBvYmplY3RBdEluZGV4OmldKSk7Ci0gICAg
ICAgIHJldHVybiBsYWJlbHM7CisgICAgICAgICAgICBtX21vbnRoTGFiZWxzLmFwcGVuZChTdHJp
bmcoW2FycmF5IG9iamVjdEF0SW5kZXg6aV0pKTsKKyAgICAgICAgcmV0dXJuIG1fbW9udGhMYWJl
bHM7CiAgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RI
KFdURjo6bW9udGhGdWxsTmFtZSk7ICsraSkKLSAgICAgICAgbGFiZWxzLmFwcGVuZChXVEY6Om1v
bnRoRnVsbE5hbWVbaV0pOwotICAgIHJldHVybiBsYWJlbHM7CisgICAgICAgIG1fbW9udGhMYWJl
bHMuYXBwZW5kKFdURjo6bW9udGhGdWxsTmFtZVtpXSk7CisgICAgcmV0dXJuIG1fbW9udGhMYWJl
bHM7CiB9CiAKLWNvbnN0IFZlY3RvcjxTdHJpbmc+JiB3ZWVrRGF5U2hvcnRMYWJlbHMoKQorY29u
c3QgVmVjdG9yPFN0cmluZz4mIExvY2FsZU1hYzo6d2Vla0RheVNob3J0TGFiZWxzKCkKIHsKLSAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxTdHJpbmc+LCBsYWJlbHMsICgpKTsKLSAgICBp
ZiAoIWxhYmVscy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBsYWJlbHM7Ci0gICAgbGFiZWxz
LnJlc2VydmVDYXBhY2l0eSg3KTsKKyAgICBpZiAoIW1fd2Vla0RheVNob3J0TGFiZWxzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIG1fd2Vla0RheVNob3J0TGFiZWxzOworICAgIG1fd2Vla0Rh
eVNob3J0TGFiZWxzLnJlc2VydmVDYXBhY2l0eSg3KTsKICAgICBSZXRhaW5QdHI8TlNEYXRlRm9y
bWF0dGVyPiBmb3JtYXR0ZXIoQWRvcHROUywgY3JlYXRlU2hvcnREYXRlRm9ybWF0dGVyKCkpOwog
ICAgIE5TQXJyYXkgKmFycmF5ID0gW2Zvcm1hdHRlci5nZXQoKSBzaG9ydFdlZWtkYXlTeW1ib2xz
XTsKICAgICBpZiAoW2FycmF5IGNvdW50XSA9PSA3KSB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCA3OyArK2kpCi0gICAgICAgICAgICBsYWJlbHMuYXBwZW5kKFN0cmluZyhbYXJy
YXkgb2JqZWN0QXRJbmRleDppXSkpOwotICAgICAgICByZXR1cm4gbGFiZWxzOworICAgICAgICAg
ICAgbV93ZWVrRGF5U2hvcnRMYWJlbHMuYXBwZW5kKFN0cmluZyhbYXJyYXkgb2JqZWN0QXRJbmRl
eDppXSkpOworICAgICAgICByZXR1cm4gbV93ZWVrRGF5U2hvcnRMYWJlbHM7CiAgICAgfQogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKFdURjo6d2Vla2RheU5h
bWUpOyArK2kpIHsKLSAgICAgICAgLy8gd2Vla2RheU5hbWUgc3RhcnRzIHdpdGggTW9uZGF5Lgot
ICAgICAgICBsYWJlbHMuYXBwZW5kKFdURjo6d2Vla2RheU5hbWVbKGkgKyA2KSAlIDddKTsKKyAg
ICAgICAgbV93ZWVrRGF5U2hvcnRMYWJlbHMuYXBwZW5kKFdURjo6d2Vla2RheU5hbWVbKGkgKyA2
KSAlIDddKTsKICAgICB9Ci0gICAgcmV0dXJuIGxhYmVsczsKKyAgICByZXR1cm4gbV93ZWVrRGF5
U2hvcnRMYWJlbHM7CiB9CiAKLXVuc2lnbmVkIGZpcnN0RGF5T2ZXZWVrKCkKK3Vuc2lnbmVkIExv
Y2FsZU1hYzo6Zmlyc3REYXlPZldlZWsoKQogewogICAgIFJldGFpblB0cjxOU0NhbGVuZGFyPiBj
YWxlbmRhcihBZG9wdE5TLCBbW05TQ2FsZW5kYXIgYWxsb2NdIGluaXRXaXRoQ2FsZW5kYXJJZGVu
dGlmaWVyOk5TR3JlZ29yaWFuQ2FsZW5kYXJdKTsKKyAgICBbY2FsZW5kYXIuZ2V0KCkgc2V0TG9j
YWxlOm1fbG9jYWxlLmdldCgpXTsKICAgICAvLyBUaGUgZG9jdW1lbnQgZm9yIE5TQ2FsZW5kYXIg
LSBmaXJzdFdlZWtkYXkgZG9lc24ndCBoYXZlIGFuIGV4cGxhbmF0aW9uIG9mCiAgICAgLy8gZmly
c3RXZWVrZGF5IHZhbHVlLiBXZSBjYW4gZ3Vlc3MgaXQgYnkgdGhlIGRvY3VtZW50IG9mIE5TRGF0
ZUNvbXBvbmVudHMgLQogICAgIC8vIHdlZWtEYXksIHNvIGl0IGNhbiBiZSAxIHRocm91Z2ggNyBh
bmQgMSBpcyBTdW5kYXkuCiAgICAgcmV0dXJuIFtjYWxlbmRhci5nZXQoKSBmaXJzdFdlZWtkYXld
IC0gMTsKIH0KICNlbmRpZgotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L21hYy9Mb2NhbGl6ZWREYXRlTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvbWFjL0xvY2FsaXplZERhdGVNYWMuY3BwCmluZGV4IGJkOGYzNjdmM2E1ZGMxYjg5YzVk
NzhlMDJlNWUzNDdhZmM4NDdhYjUuLmU2N2M5MzgxN2EwMTc1Njc3MGZlMGU4M2M3ZmZlZTQ5YzZl
MjZhY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2Fs
aXplZERhdGVNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xv
Y2FsaXplZERhdGVNYWMuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiTG9jYWxpemVkRGF0ZS5oIgogCi0jaW5jbHVkZSAiTG9jYWxlV2luLmgiCisj
aW5jbHVkZSAiTG9jYWxlTWFjLmgiCiAjaW5jbHVkZSA8bGltaXRzPgogCiB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwpAQCAtNDIsNyArNDIsNyBAQCBkb3VibGUgcGFyc2VMb2NhbGl6ZWREYXRlKGNvbnN0
IFN0cmluZyYgaW5wdXQsIERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNo
ICh0eXBlKSB7CiAgICAgY2FzZSBEYXRlQ29tcG9uZW50czo6RGF0ZToKLSAgICAgICAgcmV0dXJu
IExvY2FsZVdpbjo6Y3VycmVudExvY2FsZSgpLT5wYXJzZURhdGUoaW5wdXQpOworICAgICAgICBy
ZXR1cm4gTG9jYWxlTWFjOjpjdXJyZW50TG9jYWxlKCktPnBhcnNlRGF0ZShpbnB1dCk7CiAgICAg
Y2FzZSBEYXRlQ29tcG9uZW50czo6RGF0ZVRpbWU6CiAgICAgY2FzZSBEYXRlQ29tcG9uZW50czo6
RGF0ZVRpbWVMb2NhbDoKICAgICBjYXNlIERhdGVDb21wb25lbnRzOjpNb250aDoKQEAgLTU4LDcg
KzU4LDcgQEAgU3RyaW5nIGZvcm1hdExvY2FsaXplZERhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMm
IGRhdGVDb21wb25lbnRzKQogewogICAgIHN3aXRjaCAoZGF0ZUNvbXBvbmVudHMudHlwZSgpKSB7
CiAgICAgY2FzZSBEYXRlQ29tcG9uZW50czo6RGF0ZToKLSAgICAgICAgcmV0dXJuIExvY2FsZVdp
bjo6Y3VycmVudExvY2FsZSgpLT5mb3JtYXREYXRlKGRhdGVDb21wb25lbnRzKTsKKyAgICAgICAg
cmV0dXJuIExvY2FsZU1hYzo6Y3VycmVudExvY2FsZSgpLT5mb3JtYXREYXRlKGRhdGVDb21wb25l
bnRzKTsKICAgICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlVGltZToKICAgICBjYXNlIERhdGVD
b21wb25lbnRzOjpEYXRlVGltZUxvY2FsOgogICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6Ok1vbnRo
OgpAQCAtNzMsMjIgKzczLDIyIEBAIFN0cmluZyBmb3JtYXRMb2NhbGl6ZWREYXRlKGNvbnN0IERh
dGVDb21wb25lbnRzJiBkYXRlQ29tcG9uZW50cykKICNpZiBFTkFCTEUoQ0FMRU5EQVJfUElDS0VS
KQogU3RyaW5nIGxvY2FsaXplZERhdGVGb3JtYXRUZXh0KCkKIHsKLSAgICByZXR1cm4gTG9jYWxl
V2luOjpjdXJyZW50TG9jYWxlKCktPmRhdGVGb3JtYXRUZXh0KCk7CisgICAgcmV0dXJuIExvY2Fs
ZU1hYzo6Y3VycmVudExvY2FsZSgpLT5kYXRlRm9ybWF0VGV4dCgpOwogfQogCiBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgbW9udGhMYWJlbHMoKQogewotICAgIHJldHVybiBMb2NhbGVXaW46OmN1cnJl
bnRMb2NhbGUoKS0+bW9udGhMYWJlbHMoKTsKKyAgICByZXR1cm4gTG9jYWxlTWFjOjpjdXJyZW50
TG9jYWxlKCktPm1vbnRoTGFiZWxzKCk7CiB9CiAKIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB3ZWVr
RGF5U2hvcnRMYWJlbHMoKQogewotICAgIHJldHVybiBMb2NhbGVXaW46OmN1cnJlbnRMb2NhbGUo
KS0+d2Vla0RheVNob3J0TGFiZWxzKCk7CisgICAgcmV0dXJuIExvY2FsZU1hYzo6Y3VycmVudExv
Y2FsZSgpLT53ZWVrRGF5U2hvcnRMYWJlbHMoKTsKIH0KIAogdW5zaWduZWQgZmlyc3REYXlPZldl
ZWsoKQogewotICAgIHJldHVybiBMb2NhbGVXaW46OmN1cnJlbnRMb2NhbGUoKS0+Zmlyc3REYXlP
ZldlZWsoKTsKKyAgICByZXR1cm4gTG9jYWxlTWFjOjpjdXJyZW50TG9jYWxlKCktPmZpcnN0RGF5
T2ZXZWVrKCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9tYWMvTG9jYWxpemVkRGF0ZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvbWFjL0xvY2FsaXplZERhdGVNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDA4ODc2ZjlkMzgxMzUwYjhjY2ZkOTUzMmZjMjJiYjlmNmJhNGJiMjEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9tYWMvTG9jYWxpemVkRGF0ZU1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDIwMSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxvY2FsaXplZERhdGUuaCIKLQot
I2ltcG9ydCA8Rm91bmRhdGlvbi9OU0RhdGVGb3JtYXR0ZXIuaD4KLSNpbmNsdWRlICJMb2NhbGl6
ZWRTdHJpbmdzLmgiCi0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5o
PgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotc3RhdGljIE5TRGF0ZUZvcm1hdHRlciAqY3JlYXRlU2hvcnREYXRlRm9ybWF0dGVyKCkKLXsK
LSAgICBOU0RhdGVGb3JtYXR0ZXIgKmZvcm1hdHRlciA9IFtbTlNEYXRlRm9ybWF0dGVyIGFsbG9j
XSBpbml0XTsKLSAgICBbZm9ybWF0dGVyIHNldERhdGVTdHlsZTpOU0RhdGVGb3JtYXR0ZXJTaG9y
dFN0eWxlXTsKLSAgICBbZm9ybWF0dGVyIHNldFRpbWVTdHlsZTpOU0RhdGVGb3JtYXR0ZXJOb1N0
eWxlXTsKLSAgICBbZm9ybWF0dGVyIHNldFRpbWVab25lOltOU1RpbWVab25lIHRpbWVab25lV2l0
aEFiYnJldmlhdGlvbjpAIlVUQyJdXTsKLSAgICBbZm9ybWF0dGVyIHNldENhbGVuZGFyOltbTlND
YWxlbmRhciBhbGxvY10gaW5pdFdpdGhDYWxlbmRhcklkZW50aWZpZXI6TlNHcmVnb3JpYW5DYWxl
bmRhcl1dOwotICAgIHJldHVybiBmb3JtYXR0ZXI7Ci19Ci0KLWRvdWJsZSBwYXJzZUxvY2FsaXpl
ZERhdGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgRGF0ZUNvbXBvbmVudHM6OlR5cGUgdHlwZSkKLXsK
LSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlOiB7Ci0g
ICAgICAgIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IGZvcm1hdHRlcihBZG9wdE5TLCBjcmVh
dGVTaG9ydERhdGVGb3JtYXR0ZXIoKSk7Ci0gICAgICAgIE5TRGF0ZSAqZGF0ZSA9IFtmb3JtYXR0
ZXIuZ2V0KCkgZGF0ZUZyb21TdHJpbmc6aW5wdXRdOwotICAgICAgICBpZiAoIWRhdGUpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgcmV0dXJuIFtkYXRlIHRpbWVJbnRlcnZhbFNpbmNlMTk3
MF0gKiBtc1BlclNlY29uZDsKLSAgICB9Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50czo6RGF0ZVRp
bWU6Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50czo6RGF0ZVRpbWVMb2NhbDoKLSAgICBjYXNlIERh
dGVDb21wb25lbnRzOjpNb250aDoKLSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpUaW1lOgotICAg
IGNhc2UgRGF0ZUNvbXBvbmVudHM6OldlZWs6Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50czo6SW52
YWxpZDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBudW1lcmljX2xpbWl0czxk
b3VibGU+OjpxdWlldF9OYU4oKTsKLX0KLQotU3RyaW5nIGZvcm1hdExvY2FsaXplZERhdGUoY29u
c3QgRGF0ZUNvbXBvbmVudHMmIGRhdGVDb21wb25lbnRzKQotewotICAgIHN3aXRjaCAoZGF0ZUNv
bXBvbmVudHMudHlwZSgpKSB7Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50czo6RGF0ZTogewotICAg
ICAgICBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBmb3JtYXR0ZXIoQWRvcHROUywgY3JlYXRl
U2hvcnREYXRlRm9ybWF0dGVyKCkpOwotICAgICAgICBOU1RpbWVJbnRlcnZhbCBpbnRlcnZhbCA9
IGRhdGVDb21wb25lbnRzLm1pbGxpc2Vjb25kc1NpbmNlRXBvY2goKSAvIG1zUGVyU2Vjb25kOwot
ICAgICAgICByZXR1cm4gU3RyaW5nKFtmb3JtYXR0ZXIuZ2V0KCkgc3RyaW5nRnJvbURhdGU6W05T
RGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDppbnRlcnZhbF1dKTsKLSAgICB9Ci0g
ICAgY2FzZSBEYXRlQ29tcG9uZW50czo6RGF0ZVRpbWU6Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50
czo6RGF0ZVRpbWVMb2NhbDoKLSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpNb250aDoKLSAgICBj
YXNlIERhdGVDb21wb25lbnRzOjpUaW1lOgotICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6OldlZWs6
Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50czo6SW52YWxpZDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotI2lmIEVOQUJMRShDQUxFTkRBUl9QSUNLRVIp
Ci1zdGF0aWMgYm9vbCBpc1llYXJTeW1ib2woVUNoYXIgbGV0dGVyKSB7IHJldHVybiBsZXR0ZXIg
PT0gJ3knIHx8IGxldHRlciA9PSAnWScgfHwgbGV0dGVyID09ICd1JzsgfQotc3RhdGljIGJvb2wg
aXNNb250aFN5bWJvbChVQ2hhciBsZXR0ZXIpIHsgcmV0dXJuIGxldHRlciA9PSAnTScgfHwgbGV0
dGVyID09ICdMJzsgfQotc3RhdGljIGJvb2wgaXNEYXlTeW1ib2woVUNoYXIgbGV0dGVyKSB7IHJl
dHVybiBsZXR0ZXIgPT0gJ2QnOyB9Ci0KLS8vIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3Ry
MzUvdHIzNS02Lmh0bWwjRGF0ZV9Gb3JtYXRfUGF0dGVybnMKLXN0YXRpYyBTdHJpbmcgbG9jYWxp
emVEYXRlRm9ybWF0KGNvbnN0IFN0cmluZyYgZm9ybWF0KQotewotICAgIFN0cmluZyB5ZWFyVGV4
dCA9IGRhdGVGb3JtYXRZZWFyVGV4dCgpLmlzRW1wdHkoKSA/ICJZZWFyIiA6IGRhdGVGb3JtYXRZ
ZWFyVGV4dCgpOwotICAgIFN0cmluZyBtb250aFRleHQgPSBkYXRlRm9ybWF0TW9udGhUZXh0KCku
aXNFbXB0eSgpID8gIk1vbnRoIiA6IGRhdGVGb3JtYXRNb250aFRleHQoKTsKLSAgICBTdHJpbmcg
ZGF5VGV4dCA9IGRhdGVGb3JtYXREYXlJbk1vbnRoVGV4dCgpLmlzRW1wdHkoKSA/ICJEYXkiIDog
ZGF0ZUZvcm1hdERheUluTW9udGhUZXh0KCk7Ci0gICAgU3RyaW5nQnVpbGRlciBidWZmZXI7Ci0g
ICAgYm9vbCBpblF1b3RlID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZv
cm1hdC5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFVDaGFyIGNoID0gZm9ybWF0W2ldOwotICAg
ICAgICBpZiAoaW5RdW90ZSkgewotICAgICAgICAgICAgaWYgKGNoID09ICdcJycpIHsKLSAgICAg
ICAgICAgICAgICBpblF1b3RlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGkpOwot
ICAgICAgICAgICAgICAgIGlmIChmb3JtYXRbaSAtIDFdID09ICdcJycpCi0gICAgICAgICAgICAg
ICAgICAgIGJ1ZmZlci5hcHBlbmQoJ1wnJyk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBidWZmZXIuYXBwZW5kKGNoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGNoID09ICdcJycpIHsKLSAgICAgICAgICAgIGluUXVvdGUgPSB0
cnVlOwotICAgICAgICAgICAgaWYgKGkgPiAwICYmIGZvcm1hdFtpIC0gMV0gPT0gJ1wnJykKLSAg
ICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGNoKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc1ll
YXJTeW1ib2woY2gpKSB7Ci0gICAgICAgICAgICBpZiAoaSA+IDAgJiYgZm9ybWF0W2kgLSAxXSA9
PSBjaCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBl
bmQoeWVhclRleHQpOwotICAgICAgICB9IGVsc2UgaWYgKGlzTW9udGhTeW1ib2woY2gpKSB7Ci0g
ICAgICAgICAgICBpZiAoaSA+IDAgJiYgZm9ybWF0W2kgLSAxXSA9PSBjaCkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQobW9udGhUZXh0KTsKLSAg
ICAgICAgfSBlbHNlIGlmIChpc0RheVN5bWJvbChjaCkpIHsKLSAgICAgICAgICAgIGlmIChpID4g
MCAmJiBmb3JtYXRbaSAtIDFdID09IGNoKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgYnVmZmVyLmFwcGVuZChkYXlUZXh0KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBidWZmZXIuYXBwZW5kKGNoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1ZmZlci50b1N0cmlu
ZygpOwotfQotCi1TdHJpbmcgbG9jYWxpemVkRGF0ZUZvcm1hdFRleHQoKQotewotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0ZXh0LCAoKSk7Ci0gICAgaWYgKCF0ZXh0LmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIHRleHQ7Ci0gICAgUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4g
Zm9ybWF0dGVyKEFkb3B0TlMsIGNyZWF0ZVNob3J0RGF0ZUZvcm1hdHRlcigpKTsKLSAgICB0ZXh0
ID0gbG9jYWxpemVEYXRlRm9ybWF0KFN0cmluZyhbZm9ybWF0dGVyLmdldCgpIGRhdGVGb3JtYXRd
KSk7Ci0gICAgcmV0dXJuIHRleHQ7Ci19Ci0KLWNvbnN0IFZlY3RvcjxTdHJpbmc+JiBtb250aExh
YmVscygpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8U3RyaW5nPiwgbGFiZWxz
LCAoKSk7Ci0gICAgaWYgKCFsYWJlbHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbGFiZWxz
OwotICAgIGxhYmVscy5yZXNlcnZlQ2FwYWNpdHkoMTIpOwotICAgIFJldGFpblB0cjxOU0RhdGVG
b3JtYXR0ZXI+IGZvcm1hdHRlcihBZG9wdE5TLCBjcmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIoKSk7
Ci0gICAgTlNBcnJheSAqYXJyYXkgPSBbZm9ybWF0dGVyLmdldCgpIG1vbnRoU3ltYm9sc107Ci0g
ICAgaWYgKFthcnJheSBjb3VudF0gPT0gMTIpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IDEyOyArK2kpCi0gICAgICAgICAgICBsYWJlbHMuYXBwZW5kKFN0cmluZyhbYXJyYXkg
b2JqZWN0QXRJbmRleDppXSkpOwotICAgICAgICByZXR1cm4gbGFiZWxzOwotICAgIH0KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChXVEY6Om1vbnRoRnVsbE5h
bWUpOyArK2kpCi0gICAgICAgIGxhYmVscy5hcHBlbmQoV1RGOjptb250aEZ1bGxOYW1lW2ldKTsK
LSAgICByZXR1cm4gbGFiZWxzOwotfQotCi1jb25zdCBWZWN0b3I8U3RyaW5nPiYgd2Vla0RheVNo
b3J0TGFiZWxzKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxTdHJpbmc+LCBs
YWJlbHMsICgpKTsKLSAgICBpZiAoIWxhYmVscy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBs
YWJlbHM7Ci0gICAgbGFiZWxzLnJlc2VydmVDYXBhY2l0eSg3KTsKLSAgICBSZXRhaW5QdHI8TlNE
YXRlRm9ybWF0dGVyPiBmb3JtYXR0ZXIoQWRvcHROUywgY3JlYXRlU2hvcnREYXRlRm9ybWF0dGVy
KCkpOwotICAgIE5TQXJyYXkgKmFycmF5ID0gW2Zvcm1hdHRlci5nZXQoKSBzaG9ydFdlZWtkYXlT
eW1ib2xzXTsKLSAgICBpZiAoW2FycmF5IGNvdW50XSA9PSA3KSB7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCA3OyArK2kpCi0gICAgICAgICAgICBsYWJlbHMuYXBwZW5kKFN0cmlu
ZyhbYXJyYXkgb2JqZWN0QXRJbmRleDppXSkpOwotICAgICAgICByZXR1cm4gbGFiZWxzOwotICAg
IH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChXVEY6Ondl
ZWtkYXlOYW1lKTsgKytpKSB7Ci0gICAgICAgIC8vIHdlZWtkYXlOYW1lIHN0YXJ0cyB3aXRoIE1v
bmRheS4KLSAgICAgICAgbGFiZWxzLmFwcGVuZChXVEY6OndlZWtkYXlOYW1lWyhpICsgNikgJSA3
XSk7Ci0gICAgfQotICAgIHJldHVybiBsYWJlbHM7Ci19Ci0KLXVuc2lnbmVkIGZpcnN0RGF5T2ZX
ZWVrKCkKLXsKLSAgICBSZXRhaW5QdHI8TlNDYWxlbmRhcj4gY2FsZW5kYXIoQWRvcHROUywgW1tO
U0NhbGVuZGFyIGFsbG9jXSBpbml0V2l0aENhbGVuZGFySWRlbnRpZmllcjpOU0dyZWdvcmlhbkNh
bGVuZGFyXSk7Ci0gICAgLy8gVGhlIGRvY3VtZW50IGZvciBOU0NhbGVuZGFyIC0gZmlyc3RXZWVr
ZGF5IGRvZXNuJ3QgaGF2ZSBhbiBleHBsYW5hdGlvbiBvZgotICAgIC8vIGZpcnN0V2Vla2RheSB2
YWx1ZS4gV2UgY2FuIGd1ZXNzIGl0IGJ5IHRoZSBkb2N1bWVudCBvZiBOU0RhdGVDb21wb25lbnRz
IC0KLSAgICAvLyB3ZWVrRGF5LCBzbyBpdCBjYW4gYmUgMSB0aHJvdWdoIDcgYW5kIDEgaXMgU3Vu
ZGF5LgotICAgIHJldHVybiBbY2FsZW5kYXIuZ2V0KCkgZmlyc3RXZWVrZGF5XSAtIDE7Ci19Ci0j
ZW5kaWYKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
aSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggN2IzZTY4YzhiODJh
ZmVlMTFkMThhYTcyMGY2ODllNGYyZTY1MTU0YS4uNDRiOTgzYzc2ZTgzZGRjMWQ1M2UwOTk3NWNj
Njc5ZmE2NmQ3YzQ3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC0xODAsNiAr
MTgwLDExIEBACiAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRl
c3QuY3BwJywKICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgfV0sCisgICAgICAgICAg
ICBbJ09TPT0ibWFjIicsIHsKKyAgICAgICAgICAgICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVz
JzogWworICAgICAgICAgICAgICAgICAgICAndGVzdHMvTG9jYWxlTWFjVGVzdC5jcHAnLAorICAg
ICAgICAgICAgICAgIF0sCisgICAgICAgICAgICB9XSwKICAgICAgICAgICAgIFsnT1MhPSJtYWMi
JywgewogICAgICAgICAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBbCiAgICAgICAg
ICAgICAgICAgICAgICMgTWFjIHVzZXMgU2Nyb2xsQW5pbWF0b3JNYWMgaW5zdGVhZCBvZiBTY3Jv
bGxBbmltYXRvck5vbmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0xvY2FsZU1hY1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Mb2NhbGVN
YWNUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzAxMDI5YjBiMjk4NDVhMWZjNTc1NDg2NjJiZjBjMDQ3
YzVlMWYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9M
b2NhbGVNYWNUZXN0LmNwcApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJMb2NhbGVNYWMuaCIKKworI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5j
bHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY2xh
c3MgTG9jYWxlTWFjVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworcHJvdGVjdGVkOgor
ICAgIGVudW0geworICAgICAgICBKYW51YXJ5ID0gMCwgRmVicnVhcnksIE1hcmNoLAorICAgICAg
ICBBcHJpbCwgTWF5LCBKdW5lLAorICAgICAgICBKdWx5LCBBdWd1c3QsIFNlcHRlbWJlciwKKyAg
ICAgICAgT2N0b2JlciwgTm92ZW1iZXIsIERlY2VtYmVyLAorICAgIH07CisKKyAgICBlbnVtIHsK
KyAgICAgICAgU3VuZGF5ID0gMCwgTW9uZGF5LCBUdWVzZGF5LAorICAgICAgICBXZWRuZXNkYXks
IFRodXJzZGF5LCBGcmlkYXksCisgICAgICAgIFNhdHVyZGF5LAorICAgIH07CisKKyAgICBEYXRl
Q29tcG9uZW50cyBkYXRlQ29tcG9uZW50cyhpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5KQor
ICAgIHsKKyAgICAgICAgRGF0ZUNvbXBvbmVudHMgZGF0ZTsKKyAgICAgICAgZGF0ZS5zZXRNaWxs
aXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZShtc0ZvckRhdGUoeWVhciwgbW9udGgsIGRheSkpOwor
ICAgICAgICByZXR1cm4gZGF0ZTsKKyAgICB9CisKKyAgICBkb3VibGUgbXNGb3JEYXRlKGludCB5
ZWFyLCBpbnQgbW9udGgsIGludCBkYXkpCisgICAgeworICAgICAgICByZXR1cm4gZGF0ZVRvRGF5
c0Zyb20xOTcwKHllYXIsIG1vbnRoLCBkYXkpICogbXNQZXJEYXk7CisgICAgfQorCisgICAgU3Ry
aW5nIGZvcm1hdERhdGUoY29uc3QgU3RyaW5nJiBsb2NhbGVTdHJpbmcsIGludCB5ZWFyLCBpbnQg
bW9udGgsIGludCBkYXkpCisgICAgeworICAgICAgICBPd25QdHI8TG9jYWxlTWFjPiBsb2NhbGUg
PSBMb2NhbGVNYWM6OmNyZWF0ZShsb2NhbGVTdHJpbmcpOworICAgICAgICByZXR1cm4gbG9jYWxl
LT5mb3JtYXREYXRlKGRhdGVDb21wb25lbnRzKHllYXIsIG1vbnRoLCBkYXkpKTsKKyAgICB9CisK
KyAgICBkb3VibGUgcGFyc2VEYXRlKGNvbnN0IFN0cmluZyYgbG9jYWxlU3RyaW5nLCBjb25zdCBT
dHJpbmcmIGRhdGVTdHJpbmcpCisgICAgeworICAgICAgICBPd25QdHI8TG9jYWxlTWFjPiBsb2Nh
bGUgPSBMb2NhbGVNYWM6OmNyZWF0ZShsb2NhbGVTdHJpbmcpOworICAgICAgICByZXR1cm4gbG9j
YWxlLT5wYXJzZURhdGUoZGF0ZVN0cmluZyk7CisgICAgfQorCisjaWYgRU5BQkxFKENBTEVOREFS
X1BJQ0tFUikKKyAgICBTdHJpbmcgZGF0ZUZvcm1hdFRleHQoY29uc3QgU3RyaW5nJiBsb2NhbGVT
dHJpbmcpCisgICAgeworICAgICAgICBPd25QdHI8TG9jYWxlTWFjPiBsb2NhbGUgPSBMb2NhbGVN
YWM6OmNyZWF0ZShsb2NhbGVTdHJpbmcpOworICAgICAgICByZXR1cm4gbG9jYWxlLT5kYXRlRm9y
bWF0VGV4dCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZpcnN0RGF5T2ZXZWVrKGNvbnN0IFN0
cmluZyYgbG9jYWxlU3RyaW5nKQorICAgIHsKKyAgICAgICAgT3duUHRyPExvY2FsZU1hYz4gbG9j
YWxlID0gTG9jYWxlTWFjOjpjcmVhdGUobG9jYWxlU3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIGxv
Y2FsZS0+Zmlyc3REYXlPZldlZWsoKTsKKyAgICB9CisKKyAgICBTdHJpbmcgbW9udGhMYWJlbChj
b25zdCBTdHJpbmcmIGxvY2FsZVN0cmluZywgdW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAg
ICBPd25QdHI8TG9jYWxlTWFjPiBsb2NhbGUgPSBMb2NhbGVNYWM6OmNyZWF0ZShsb2NhbGVTdHJp
bmcpOworICAgICAgICByZXR1cm4gbG9jYWxlLT5tb250aExhYmVscygpW2luZGV4XTsKKyAgICB9
CisKKyAgICBTdHJpbmcgd2Vla0RheVNob3J0TGFiZWwoY29uc3QgU3RyaW5nJiBsb2NhbGVTdHJp
bmcsIHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgT3duUHRyPExvY2FsZU1hYz4gbG9j
YWxlID0gTG9jYWxlTWFjOjpjcmVhdGUobG9jYWxlU3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIGxv
Y2FsZS0+d2Vla0RheVNob3J0TGFiZWxzKClbaW5kZXhdOworICAgIH0KKyNlbmRpZgorfTsKKwor
VEVTVF9GKExvY2FsZU1hY1Rlc3QsIGZvcm1hdERhdGUpCit7CisgICAgRVhQRUNUX1NUUkVRKCI0
LzI3LzA1IiwgZm9ybWF0RGF0ZSgiZW5fVVMiLCAyMDA1LCBBcHJpbCwgMjcpLnV0ZjgoKS5kYXRh
KCkpOworICAgIEVYUEVDVF9TVFJFUSgiMjcvMDQvMDUiLCBmb3JtYXREYXRlKCJmcl9GUiIsIDIw
MDUsIEFwcmlsLCAyNykudXRmOCgpLmRhdGEoKSk7CisgICAgRVhQRUNUX1NUUkVRKCIwNS8wNC8y
NyIsIGZvcm1hdERhdGUoImphX0pQIiwgMjAwNSwgQXByaWwsIDI3KS51dGY4KCkuZGF0YSgpKTsK
K30KKworVEVTVF9GKExvY2FsZU1hY1Rlc3QsIHBhcnNlRGF0ZSkKK3sKKyAgICBFWFBFQ1RfRVEo
bXNGb3JEYXRlKDIwMDUsIEFwcmlsLCAyNyksIHBhcnNlRGF0ZSgiZW5fVVMiLCAiQXByaWwgMjcs
IDIwMDUiKSk7CisgICAgRVhQRUNUX0VRKG1zRm9yRGF0ZSgyMDA1LCBBcHJpbCwgMjcpLCBwYXJz
ZURhdGUoImZyX0ZSIiwgIjI3IGF2cmlsIDIwMDUiKSk7CisgICAgRVhQRUNUX0VRKG1zRm9yRGF0
ZSgyMDA1LCBBcHJpbCwgMjcpLCBwYXJzZURhdGUoImphX0pQIiwgIjIwMDUvMDQvMjciKSk7Cit9
CisKKyNpZiBFTkFCTEUoQ0FMRU5EQVJfUElDS0VSKQorVEVTVF9GKExvY2FsZU1hY1Rlc3QsIGRh
dGVGb3JtYXRUZXh0KQoreworICAgIEVYUEVDVF9TVFJFUSgiTW9udGgvRGF5L1llYXIiLCBkYXRl
Rm9ybWF0VGV4dCgiZW5fVVMiKS51dGY4KCkuZGF0YSgpKTsKKyAgICBFWFBFQ1RfU1RSRVEoIkRh
eS9Nb250aC9ZZWFyIiwgZGF0ZUZvcm1hdFRleHQoImZyX0ZSIikudXRmOCgpLmRhdGEoKSk7Cisg
ICAgRVhQRUNUX1NUUkVRKCJZZWFyL01vbnRoL0RheSIsIGRhdGVGb3JtYXRUZXh0KCJqYV9KUCIp
LnV0ZjgoKS5kYXRhKCkpOworfQorCitURVNUX0YoTG9jYWxlTWFjVGVzdCwgZmlyc3REYXlPZldl
ZWspCit7CisgICAgRVhQRUNUX0VRKFN1bmRheSwgZmlyc3REYXlPZldlZWsoImVuX1VTIikpOwor
ICAgIEVYUEVDVF9FUShNb25kYXksIGZpcnN0RGF5T2ZXZWVrKCJmcl9GUiIpKTsKKyAgICBFWFBF
Q1RfRVEoU3VuZGF5LCBmaXJzdERheU9mV2VlaygiamFfSlAiKSk7Cit9CisKK1RFU1RfRihMb2Nh
bGVNYWNUZXN0LCBtb250aExhYmVscykKK3sKKyAgICBFWFBFQ1RfU1RSRVEoIkphbnVhcnkiLCBt
b250aExhYmVsKCJlbl9VUyIsIEphbnVhcnkpLnV0ZjgoKS5kYXRhKCkpOworICAgIEVYUEVDVF9T
VFJFUSgiSnVuZSIsIG1vbnRoTGFiZWwoImVuX1VTIiwgSnVuZSkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgRVhQRUNUX1NUUkVRKCJEZWNlbWJlciIsIG1vbnRoTGFiZWwoImVuX1VTIiwgRGVjZW1iZXIp
LnV0ZjgoKS5kYXRhKCkpOworCisgICAgRVhQRUNUX1NUUkVRKCJqYW52aWVyIiwgbW9udGhMYWJl
bCgiZnJfRlIiLCBKYW51YXJ5KS51dGY4KCkuZGF0YSgpKTsKKyAgICBFWFBFQ1RfU1RSRVEoImp1
aW4iLCBtb250aExhYmVsKCJmcl9GUiIsIEp1bmUpLnV0ZjgoKS5kYXRhKCkpOworICAgIFVDaGFy
IGZyRGVjZW1iZXJbXSA9IHsgJ2QnLCAweEU5LCAnYycsICdlJywgJ20nLCAnYicsICdyJywgJ2Un
LCAwIH07CisgICAgRVhQRUNUX1NUUkVRKFN0cmluZyhmckRlY2VtYmVyKS51dGY4KCkuZGF0YSgp
LCBtb250aExhYmVsKCJmcl9GUiIsIERlY2VtYmVyKS51dGY4KCkuZGF0YSgpKTsKKworICAgIFVD
aGFyIGphSmFudWFyeVtdID0geyAnMScsIDB4NjcwOCwgMCB9OworICAgIEVYUEVDVF9TVFJFUShT
dHJpbmcoamFKYW51YXJ5KS51dGY4KCkuZGF0YSgpLCBtb250aExhYmVsKCJqYV9KUCIsIEphbnVh
cnkpLnV0ZjgoKS5kYXRhKCkpOworICAgIFVDaGFyIGphSnVuZVtdID0geyAnNicsIDB4NjcwOCwg
MCB9OworICAgIEVYUEVDVF9TVFJFUShTdHJpbmcoamFKdW5lKS51dGY4KCkuZGF0YSgpLCBtb250
aExhYmVsKCJqYV9KUCIsIEp1bmUpLnV0ZjgoKS5kYXRhKCkpOworICAgIFVDaGFyIGphRGVjZW1i
ZXJbXSA9IHsgJzEnLCAnMicsIDB4NjcwOCwgMCB9OworICAgIEVYUEVDVF9TVFJFUShTdHJpbmco
amFEZWNlbWJlcikudXRmOCgpLmRhdGEoKSwgbW9udGhMYWJlbCgiamFfSlAiLCBEZWNlbWJlciku
dXRmOCgpLmRhdGEoKSk7Cit9CisKK1RFU1RfRihMb2NhbGVNYWNUZXN0LCB3ZWVrRGF5U2hvcnRM
YWJlbHMpCit7CisgICAgRVhQRUNUX1NUUkVRKCJTdW4iLCB3ZWVrRGF5U2hvcnRMYWJlbCgiZW5f
VVMiLCBTdW5kYXkpLnV0ZjgoKS5kYXRhKCkpOworICAgIEVYUEVDVF9TVFJFUSgiV2VkIiwgd2Vl
a0RheVNob3J0TGFiZWwoImVuX1VTIiwgV2VkbmVzZGF5KS51dGY4KCkuZGF0YSgpKTsKKyAgICBF
WFBFQ1RfU1RSRVEoIlNhdCIsIHdlZWtEYXlTaG9ydExhYmVsKCJlbl9VUyIsIFNhdHVyZGF5KS51
dGY4KCkuZGF0YSgpKTsKKworICAgIEVYUEVDVF9TVFJFUSgiZGltLiIsIHdlZWtEYXlTaG9ydExh
YmVsKCJmcl9GUiIsIFN1bmRheSkudXRmOCgpLmRhdGEoKSk7CisgICAgRVhQRUNUX1NUUkVRKCJt
ZXIuIiwgd2Vla0RheVNob3J0TGFiZWwoImZyX0ZSIiwgV2VkbmVzZGF5KS51dGY4KCkuZGF0YSgp
KTsKKyAgICBFWFBFQ1RfU1RSRVEoInNhbS4iLCB3ZWVrRGF5U2hvcnRMYWJlbCgiZnJfRlIiLCBT
YXR1cmRheSkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBVQ2hhciBqYVN1bmRheVtdID0geyAweDY1
RTUsIDAgfTsKKyAgICBFWFBFQ1RfU1RSRVEoU3RyaW5nKGphU3VuZGF5KS51dGY4KCkuZGF0YSgp
LCB3ZWVrRGF5U2hvcnRMYWJlbCgiamFfSlAiLCBTdW5kYXkpLnV0ZjgoKS5kYXRhKCkpOworICAg
IFVDaGFyIGphV2VkbmVzZGF5W10gPSB7IDB4NkMzNCwgMCB9OworICAgIEVYUEVDVF9TVFJFUShT
dHJpbmcoamFXZWRuZXNkYXkpLnV0ZjgoKS5kYXRhKCksIHdlZWtEYXlTaG9ydExhYmVsKCJqYV9K
UCIsIFdlZG5lc2RheSkudXRmOCgpLmRhdGEoKSk7CisgICAgVUNoYXIgamFTYXR1cmRheVtdID0g
eyAweDU3MUYsIDAgfTsKKyAgICBFWFBFQ1RfU1RSRVEoU3RyaW5nKGphU2F0dXJkYXkpLnV0Zjgo
KS5kYXRhKCksIHdlZWtEYXlTaG9ydExhYmVsKCJqYV9KUCIsIFNhdHVyZGF5KS51dGY4KCkuZGF0
YSgpKTsKK30KKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151214</attachid>
            <date>2012-07-09 01:33:21 -0700</date>
            <delta_ts>2012-07-09 18:59:53 -0700</delta_ts>
            <desc>Patch 2</desc>
            <filename>bug-90248-20120709173319.patch</filename>
            <type>text/plain</type>
            <size>32131</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMDkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQyYTk0YmNiNmJmNjI0
YTM4NDM0MTQ3ZWNlODIxNTFjZTk0Y2EyYy4uNmM4MzUzMDQ0MmE4MjNlODQxNTRiMmM0NGFiOTdj
YjIyMjQ5MzlmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEyLTA3LTA5ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1BsYXRmb3JtXSBJ
bnRyb2R1Y2UgTG9jYWxlTWFjIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MDI0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgaW1wbGVtZW50YXRpb24gb2YgbG9jYWxp
emVkIGRhdGUgZm9ybWF0IHJlbGF0ZWQKKyAgICAgICAgZnVuY3Rpb25zIGludG8gTG9jYWxlTWFj
IGNsYXNzIGFzIG9mIExvY2FsZVdpbiBjbGFzcyBmb3IgZWFzZSBvZgorICAgICAgICBtYWludGFp
biBhbmQgdXNpbmcgc3BlY2lmaWMgbG9jYWxlIGluIHRlc3RpbmcgcmF0aGVyIHRoYW4gc3lzdGVt
CisgICAgICAgIGRlZmF1bHQgbG9jYWxlLgorCisgICAgICAgIFRlc3RzOiBXZWJLaXQvY2hyb21p
dW0vdGVzdHMvTG9jYWxlTWFjVGVzdC5jcHAKKworICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNv
cmUuZ3lwOiBJbmNsdWRlIExvY2FsZU1hYy5tbQorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMuaDogUmVwbGFjZSBMb2NhbGVXaW4g
dG8gTG9jYWxlTWFjLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZU1hYzo6TG9jYWxlTWFjKToKKyAgICAgICAgKFdlYkNv
cmU6OkxvY2FsZU1hYzo6fkxvY2FsZU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVNYWM6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVNYWM6OmN1cnJlbnRMb2NhbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6TG9jYWxlTWFjOjpjcmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6TG9jYWxlTWFjOjpwYXJzZURhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TG9jYWxlTWFjOjpmb3JtYXREYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZU1hYzo6
ZGF0ZUZvcm1hdFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxlTWFjOjptb250aExhYmVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVNYWM6OndlZWtEYXlTaG9ydExhYmVscyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMb2NhbGVNYWM6OmZpcnN0RGF5T2ZXZWVrKToKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGl6ZWREYXRlTWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlTG9jYWxpemVkRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpmb3JtYXRMb2NhbGl6ZWRE
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmxvY2FsaXplZERhdGVGb3JtYXRUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6Om1vbnRoTGFiZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OndlZWtEYXlTaG9y
dExhYmVscyk6CisgICAgICAgIChXZWJDb3JlOjpmaXJzdERheU9mV2Vlayk6CisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxpemVkRGF0ZU1hYy5tbTogUmVtb3ZlZC4KKwogMjAxMi0w
Ny0wOCAgWW9zaGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtQ
bGF0Zm9ybS1NYWNdIERlcml2ZSBMb2NhbGVNYWMue2NwcCxofSBhbmQgTG9jYWxpemVkRGF0ZU1h
Yy5jcHAgZnJvbSBMb2NhbGVXaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNzM4NDk0
MDQ3MGJmZDMyOTM0YTdjNDk3ZGE1OWVkNTNjNWQ0ZTRiMi4uYzVmYjVhY2VmODE3YTEzMGZmNTUz
NmVhZmNkNTQ4N2M1MTFhMjA0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNSBAQAorMjAxMi0wNy0wOSAgWW9zaGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFtQbGF0Zm9ybV0gSW50cm9kdWNlIExvY2FsZU1hYyBjbGFzcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAyNDgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZGVk
IHRlc3RzIGZvciBMb2NhbGVNYWMgY2xhc3MuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAg
ICAgICAgKiB0ZXN0cy9Mb2NhbGVNYWNUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChMb2NhbGVN
YWNUZXN0KToKKyAgICAgICAgKExvY2FsZU1hY1Rlc3Q6OmRhdGVDb21wb25lbnRzKToKKyAgICAg
ICAgKExvY2FsZU1hY1Rlc3Q6Om1zRm9yRGF0ZSk6CisgICAgICAgIChMb2NhbGVNYWNUZXN0Ojpm
b3JtYXREYXRlKToKKyAgICAgICAgKExvY2FsZU1hY1Rlc3Q6OnBhcnNlRGF0ZSk6CisgICAgICAg
IChMb2NhbGVNYWNUZXN0OjpkYXRlRm9ybWF0VGV4dCk6CisgICAgICAgIChMb2NhbGVNYWNUZXN0
OjpmaXJzdERheU9mV2Vlayk6CisgICAgICAgIChMb2NhbGVNYWNUZXN0Ojptb250aExhYmVsKToK
KyAgICAgICAgKExvY2FsZU1hY1Rlc3Q6OndlZWtEYXlTaG9ydExhYmVsKToKKyAgICAgICAgKFRF
U1RfRik6CisKIDIwMTItMDctMDUgIFlvc2hpZnVtaSBJbm91ZSAgPHlvc2luQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkIENocm9taXVtIGdhcmRlbmluZy4gUm9sbCBDaHJvbWl1
bSBERVBTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5
cCBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IGNiMGU3NmEw
NTBhMDU3MGY2ZWJkZmQyZTM3OGNkNzcxM2M3YWU3OTkuLmViZTUzOWQ5NTIxYjliYzFiNTg1MmZh
MzcyOWQ2MzQ5NTc1OGM1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lw
CkBAIC0xNjQ4LDkgKzE2NDgsMTAgQEAKIAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ1dlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU3lzdGVtSW50ZXJmYWNlXFwubW0kJ10sCiAKLSAgICAg
ICAgICAgICMgV2UgdXNlIExvY2FsaXplZERhdGVNYWMubW0gaW5zdGVhZCBvZiBMb2NhbGl6ZWRE
YXRlSUNVLmNwcC4KKyAgICAgICAgICAgICMgV2UgdXNlIExvY2FsaXplZERhdGVNYWMuY3BwIHdp
dGggTG9jYWxlTWFjLm1tIGluc3RlYWQgb2YgTG9jYWxpemVkRGF0ZUlDVS5jcHAuCiAgICAgICAg
ICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWREYXRlSUNVXFwuY3BwJCdd
LAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsaXplZERh
dGVNYWNcXC5tbSQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS90ZXh0L21h
Yy9Mb2NhbGVNYWNcXC5tbSQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS90
ZXh0L21hYy9Mb2NhbGl6ZWREYXRlTWFjXFwuY3BwJCddLAogCiAgICAgICAgICAgICAjIFRoZSBN
YWMgdXNlcyBwbGF0Zm9ybS9tYWMvS2lsbFJpbmdNYWMubW0gaW5zdGVhZCBvZiB0aGUgZHVtbXkK
ICAgICAgICAgICAgICMgaW1wbGVtZW50YXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZWZhNDNj
Nzg1ODEyYjQxMWNkZGUwOWY5MGRlOWY5ZGM2M2VlN2U0OS4uYTNjMmU5M2Y2MzZiZTJiMjFjYzEy
ZTc3ZmZmYjQxMjkzZWU1MjUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDQzNiw3ICs0NDM2LDkg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vdGV4dC9tYWMvSHlwaGVuYXRpb25NYWMubW0nLAotICAgICAgICAgICAgJ3Bs
YXRmb3JtL3RleHQvbWFjL0xvY2FsaXplZERhdGVNYWMubW0nLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL3RleHQvbWFjL0xvY2FsZU1hYy5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L21h
Yy9Mb2NhbGVNYWMubW0nLAorICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsaXpl
ZERhdGVNYWMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGl6ZWRO
dW1iZXJNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvbWFjL1NoYXBlQXJhYmlj
LmMnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvbWFjL1NoYXBlQXJhYmljLmgnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMuaAppbmRleCA2YTc1Yzk5
NDU1N2Y1NzBhOThjYmY3ZjYwOWI0NTZmM2RjZTIzYzQ0Li40YzM3MWVkN2E4MWRmMzljYzJhMzc1
Y2E4MjA5NTExYzg3NzM0YTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L21hYy9Mb2NhbGVNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21h
Yy9Mb2NhbGVNYWMuaApAQCAtMjgsNjAgKzI4LDQ2IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
LSNpZm5kZWYgTG9jYWxlV2luX2gKLSNkZWZpbmUgTG9jYWxlV2luX2gKKyNpZm5kZWYgTG9jYWxl
TWFjX2gKKyNkZWZpbmUgTG9jYWxlTWFjX2gKIAotI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK09CSkNf
Q0xBU1MgTlNEYXRlRm9ybWF0dGVyOworT0JKQ19DTEFTUyBOU0xvY2FsZTsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBEYXRlQ29tcG9uZW50czsKLXN0cnVjdCBEYXRlRm9ybWF0VG9r
ZW47CiAKLWNsYXNzIExvY2FsZVdpbiB7CitjbGFzcyBMb2NhbGVNYWMgewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPExvY2FsZVdpbj4gY3JlYXRlKExDSUQpOwotICAgIHN0YXRpYyBM
b2NhbGVXaW4qIGN1cnJlbnRMb2NhbGUoKTsKLSAgICB+TG9jYWxlV2luKCk7CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8TG9jYWxlTWFjPiBjcmVhdGUoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGlj
IExvY2FsZU1hYyogY3VycmVudExvY2FsZSgpOworICAgIH5Mb2NhbGVNYWMoKTsKICAgICBkb3Vi
bGUgcGFyc2VEYXRlKGNvbnN0IFN0cmluZyYpOwogICAgIFN0cmluZyBmb3JtYXREYXRlKGNvbnN0
IERhdGVDb21wb25lbnRzJik7CisKICNpZiBFTkFCTEUoQ0FMRU5EQVJfUElDS0VSKQogICAgIFN0
cmluZyBkYXRlRm9ybWF0VGV4dCgpOwogICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBtb250aExh
YmVscygpOwogICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB3ZWVrRGF5U2hvcnRMYWJlbHMoKTsK
LSAgICB1bnNpZ25lZCBmaXJzdERheU9mV2VlaygpIHsgcmV0dXJuIG1fZmlyc3REYXlPZldlZWs7
IH0KKyAgICB1bnNpZ25lZCBmaXJzdERheU9mV2VlaygpOwogI2VuZGlmCiAKLSAgICAvLyBGb3Ig
dGVzdGluZy4KLSAgICBkb3VibGUgcGFyc2VEYXRlKGNvbnN0IFN0cmluZyYgZm9ybWF0LCBpbnQg
YmFzZVllYXIsIGNvbnN0IFN0cmluZyYgaW5wdXQpOwotICAgIFN0cmluZyBmb3JtYXREYXRlKGNv
bnN0IFN0cmluZyYgZm9ybWF0LCBpbnQgYmFzZVllYXIsIGludCB5ZWFyLCBpbnQgbW9udGgsIGlu
dCBkYXkpOwotICAgIHN0YXRpYyBTdHJpbmcgZGF0ZUZvcm1hdFRleHQoY29uc3QgU3RyaW5nJiBm
b3JtYXQsIGNvbnN0IFN0cmluZyYgeWVhclRleHQsIGNvbnN0IFN0cmluZyYgbW9udGhUZXh0LCBj
b25zdCBTdHJpbmcmIGRheVRleHQpOwotCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IExvY2FsZVdp
bihMQ0lEKTsKLSAgICBTdHJpbmcgZ2V0TG9jYWxlSW5mb1N0cmluZyhMQ1RZUEUpOwotICAgIHZv
aWQgZW5zdXJlU2hvcnRNb250aExhYmVscygpOwotICAgIHZvaWQgZW5zdXJlTW9udGhMYWJlbHMo
KTsKLSAgICB2b2lkIGVuc3VyZVNob3J0RGF0ZVRva2VucygpOwotICAgIGludCBwYXJzZU51bWJl
ck9yTW9udGgoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQmIGluZGV4KTsKLSAgICBkb3VibGUgcGFy
c2VEYXRlKGNvbnN0IFZlY3RvcjxEYXRlRm9ybWF0VG9rZW4+JiwgaW50IGJhc2VZZWFyLCBjb25z
dCBTdHJpbmcmKTsKLSAgICBTdHJpbmcgZm9ybWF0RGF0ZShjb25zdCBWZWN0b3I8RGF0ZUZvcm1h
dFRva2VuPiYsIGludCBiYXNlWWVhciwgaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSk7Ci0j
aWYgRU5BQkxFKENBTEVOREFSX1BJQ0tFUikKLSAgICB2b2lkIGVuc3VyZVdlZWtEYXlTaG9ydExh
YmVscygpOwotI2VuZGlmCisgICAgZXhwbGljaXQgTG9jYWxlTWFjKGNvbnN0IFN0cmluZyYpOwor
ICAgIE5TRGF0ZUZvcm1hdHRlciAqY3JlYXRlU2hvcnREYXRlRm9ybWF0dGVyKCk7CiAKLSAgICBM
Q0lEIG1fbGNpZDsKLSAgICBpbnQgbV9iYXNlWWVhcjsKLSAgICBWZWN0b3I8RGF0ZUZvcm1hdFRv
a2VuPiBtX3Nob3J0RGF0ZVRva2VuczsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX3Nob3J0TW9udGhM
YWJlbHM7Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9tb250aExhYmVsczsKKyAgICBSZXRhaW5QdHI8
TlNMb2NhbGU+IG1fbG9jYWxlOwogI2lmIEVOQUJMRShDQUxFTkRBUl9QSUNLRVIpCisgICAgU3Ry
aW5nIG1fbG9jYWxpemVkRGF0ZUZvcm1hdFRleHQ7CisgICAgVmVjdG9yPFN0cmluZz4gbV9tb250
aExhYmVsczsKICAgICBWZWN0b3I8U3RyaW5nPiBtX3dlZWtEYXlTaG9ydExhYmVsczsKLSAgICB1
bnNpZ25lZCBtX2ZpcnN0RGF5T2ZXZWVrOwogI2VuZGlmCi0KIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbQppbmRleCAwODg3NmY5ZDM4MTM1
MGI4Y2NmZDk1MzJmYzIyYmI5ZjZiYTRiYjIxLi41YzJjYTIyZDU2NzJkYjY0MmE1ZDMwZjZiNWYy
MmM1Zjc1MmFlNmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21h
Yy9Mb2NhbGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9j
YWxlTWFjLm1tCkBAIC0yOSwxMiArMjksMTQgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiTG9jYWxpemVkRGF0ZS5oIgorI2luY2x1ZGUgIkxvY2FsZU1hYy5oIgogCiAj
aW1wb3J0IDxGb3VuZGF0aW9uL05TRGF0ZUZvcm1hdHRlci5oPgorI2ltcG9ydCA8Rm91bmRhdGlv
bi9OU0xvY2FsZS5oPgorI2luY2x1ZGUgIkxvY2FsaXplZERhdGUuaCIKICNpbmNsdWRlICJMb2Nh
bGl6ZWRTdHJpbmdzLmgiCi0jaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHd0Zi9EYXRlTWF0
aC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIApAQCAtNDIsOSArNDQs
MzAgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgTlNEYXRlRm9ybWF0dGVyICpjcmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIoKQorTG9jYWxlTWFj
OjpMb2NhbGVNYWMoY29uc3QgU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKQorICAgIDogbV9sb2Nh
bGUoW1tOU0xvY2FsZSBhbGxvY10gaW5pdFdpdGhMb2NhbGVJZGVudGlmaWVyOmxvY2FsZUlkZW50
aWZpZXJdKQoreworfQorCitMb2NhbGVNYWM6On5Mb2NhbGVNYWMoKQoreworfQorCitQYXNzT3du
UHRyPExvY2FsZU1hYz4gTG9jYWxlTWFjOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBsb2NhbGVJZGVu
dGlmaWVyKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxlTWFjKGxvY2FsZUlkZW50
aWZpZXIpKTsKK30KKworTG9jYWxlTWFjKiBMb2NhbGVNYWM6OmN1cnJlbnRMb2NhbGUoKQorewor
ICAgIHN0YXRpYyBMb2NhbGVNYWMqIGN1cnJlbnRMb2NhbGUgPSBMb2NhbGVNYWM6OmNyZWF0ZShb
TlNMb2NhbGUgY3VycmVudExvY2FsZV0pLmxlYWtQdHIoKTsKKyAgICByZXR1cm4gY3VycmVudExv
Y2FsZTsKK30KKworTlNEYXRlRm9ybWF0dGVyKiBMb2NhbGVNYWM6OmNyZWF0ZVNob3J0RGF0ZUZv
cm1hdHRlcigpCiB7CiAgICAgTlNEYXRlRm9ybWF0dGVyICpmb3JtYXR0ZXIgPSBbW05TRGF0ZUZv
cm1hdHRlciBhbGxvY10gaW5pdF07CisgICAgW2Zvcm1hdHRlciBzZXRMb2NhbGU6bV9sb2NhbGUu
Z2V0KCldOwogICAgIFtmb3JtYXR0ZXIgc2V0RGF0ZVN0eWxlOk5TRGF0ZUZvcm1hdHRlclNob3J0
U3R5bGVdOwogICAgIFtmb3JtYXR0ZXIgc2V0VGltZVN0eWxlOk5TRGF0ZUZvcm1hdHRlck5vU3R5
bGVdOwogICAgIFtmb3JtYXR0ZXIgc2V0VGltZVpvbmU6W05TVGltZVpvbmUgdGltZVpvbmVXaXRo
QWJicmV2aWF0aW9uOkAiVVRDIl1dOwpAQCAtNTIsNDQgKzc1LDIwIEBAIHN0YXRpYyBOU0RhdGVG
b3JtYXR0ZXIgKmNyZWF0ZVNob3J0RGF0ZUZvcm1hdHRlcigpCiAgICAgcmV0dXJuIGZvcm1hdHRl
cjsKIH0KIAotZG91YmxlIHBhcnNlTG9jYWxpemVkRGF0ZShjb25zdCBTdHJpbmcmIGlucHV0LCBE
YXRlQ29tcG9uZW50czo6VHlwZSB0eXBlKQorZG91YmxlIExvY2FsZU1hYzo6cGFyc2VEYXRlKGNv
bnN0IFN0cmluZyYgaW5wdXQpCiB7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBEYXRl
Q29tcG9uZW50czo6RGF0ZTogewotICAgICAgICBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBm
b3JtYXR0ZXIoQWRvcHROUywgY3JlYXRlU2hvcnREYXRlRm9ybWF0dGVyKCkpOwotICAgICAgICBO
U0RhdGUgKmRhdGUgPSBbZm9ybWF0dGVyLmdldCgpIGRhdGVGcm9tU3RyaW5nOmlucHV0XTsKLSAg
ICAgICAgaWYgKCFkYXRlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHJldHVybiBbZGF0
ZSB0aW1lSW50ZXJ2YWxTaW5jZTE5NzBdICogbXNQZXJTZWNvbmQ7Ci0gICAgfQotICAgIGNhc2Ug
RGF0ZUNvbXBvbmVudHM6OkRhdGVUaW1lOgotICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6OkRhdGVU
aW1lTG9jYWw6Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50czo6TW9udGg6Ci0gICAgY2FzZSBEYXRl
Q29tcG9uZW50czo6VGltZToKLSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpXZWVrOgotICAgIGNh
c2UgRGF0ZUNvbXBvbmVudHM6OkludmFsaWQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBy
ZXR1cm4gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgUmV0YWluUHRy
PE5TRGF0ZUZvcm1hdHRlcj4gZm9ybWF0dGVyKEFkb3B0TlMsIGNyZWF0ZVNob3J0RGF0ZUZvcm1h
dHRlcigpKTsKKyAgICBOU0RhdGUgKmRhdGUgPSBbZm9ybWF0dGVyLmdldCgpIGRhdGVGcm9tU3Ry
aW5nOmlucHV0XTsKKyAgICBpZiAoIWRhdGUpCisgICAgICAgIHJldHVybiBudW1lcmljX2xpbWl0
czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICByZXR1cm4gW2RhdGUgdGltZUludGVydmFsU2lu
Y2UxOTcwXSAqIG1zUGVyU2Vjb25kOwogfQogCi1TdHJpbmcgZm9ybWF0TG9jYWxpemVkRGF0ZShj
b25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZUNvbXBvbmVudHMpCitTdHJpbmcgTG9jYWxlTWFjOjpm
b3JtYXREYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlQ29tcG9uZW50cykKIHsKLSAgICBz
d2l0Y2ggKGRhdGVDb21wb25lbnRzLnR5cGUoKSkgewotICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6
OkRhdGU6IHsKLSAgICAgICAgUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gZm9ybWF0dGVyKEFk
b3B0TlMsIGNyZWF0ZVNob3J0RGF0ZUZvcm1hdHRlcigpKTsKLSAgICAgICAgTlNUaW1lSW50ZXJ2
YWwgaW50ZXJ2YWwgPSBkYXRlQ29tcG9uZW50cy5taWxsaXNlY29uZHNTaW5jZUVwb2NoKCkgLyBt
c1BlclNlY29uZDsKLSAgICAgICAgcmV0dXJuIFN0cmluZyhbZm9ybWF0dGVyLmdldCgpIHN0cmlu
Z0Zyb21EYXRlOltOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZTE5NzA6aW50ZXJ2YWxd
XSk7Ci0gICAgfQotICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6OkRhdGVUaW1lOgotICAgIGNhc2Ug
RGF0ZUNvbXBvbmVudHM6OkRhdGVUaW1lTG9jYWw6Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50czo6
TW9udGg6Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50czo6VGltZToKLSAgICBjYXNlIERhdGVDb21w
b25lbnRzOjpXZWVrOgotICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6OkludmFsaWQ6Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgUmV0YWluUHRyPE5TRGF0
ZUZvcm1hdHRlcj4gZm9ybWF0dGVyKEFkb3B0TlMsIGNyZWF0ZVNob3J0RGF0ZUZvcm1hdHRlcigp
KTsKKyAgICBOU1RpbWVJbnRlcnZhbCBpbnRlcnZhbCA9IGRhdGVDb21wb25lbnRzLm1pbGxpc2Vj
b25kc1NpbmNlRXBvY2goKSAvIG1zUGVyU2Vjb25kOworICAgIHJldHVybiBTdHJpbmcoW2Zvcm1h
dHRlci5nZXQoKSBzdHJpbmdGcm9tRGF0ZTpbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFsU2lu
Y2UxOTcwOmludGVydmFsXV0pOwogfQogCiAjaWYgRU5BQkxFKENBTEVOREFSX1BJQ0tFUikKQEAg
LTE0MCw2MiArMTM5LDU4IEBAIHN0YXRpYyBTdHJpbmcgbG9jYWxpemVEYXRlRm9ybWF0KGNvbnN0
IFN0cmluZyYgZm9ybWF0KQogICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKIH0KIAotU3Ry
aW5nIGxvY2FsaXplZERhdGVGb3JtYXRUZXh0KCkKK1N0cmluZyBMb2NhbGVNYWM6OmRhdGVGb3Jt
YXRUZXh0KCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdGV4dCwgKCkpOwot
ICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0ZXh0OworICAgIGlmICgh
bV9sb2NhbGl6ZWREYXRlRm9ybWF0VGV4dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX2xv
Y2FsaXplZERhdGVGb3JtYXRUZXh0OwogICAgIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IGZv
cm1hdHRlcihBZG9wdE5TLCBjcmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIoKSk7Ci0gICAgdGV4dCA9
IGxvY2FsaXplRGF0ZUZvcm1hdChTdHJpbmcoW2Zvcm1hdHRlci5nZXQoKSBkYXRlRm9ybWF0XSkp
OwotICAgIHJldHVybiB0ZXh0OworICAgIG1fbG9jYWxpemVkRGF0ZUZvcm1hdFRleHQgPSBsb2Nh
bGl6ZURhdGVGb3JtYXQoU3RyaW5nKFtmb3JtYXR0ZXIuZ2V0KCkgZGF0ZUZvcm1hdF0pKTsKKyAg
ICByZXR1cm4gIG1fbG9jYWxpemVkRGF0ZUZvcm1hdFRleHQ7CiB9CiAKLWNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBtb250aExhYmVscygpCitjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlTWFjOjpt
b250aExhYmVscygpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8U3RyaW5nPiwg
bGFiZWxzLCAoKSk7Ci0gICAgaWYgKCFsYWJlbHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
bGFiZWxzOwotICAgIGxhYmVscy5yZXNlcnZlQ2FwYWNpdHkoMTIpOworICAgIGlmICghbV9tb250
aExhYmVscy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX21vbnRoTGFiZWxzOworICAgIG1f
bW9udGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDEyKTsKICAgICBSZXRhaW5QdHI8TlNEYXRlRm9y
bWF0dGVyPiBmb3JtYXR0ZXIoQWRvcHROUywgY3JlYXRlU2hvcnREYXRlRm9ybWF0dGVyKCkpOwog
ICAgIE5TQXJyYXkgKmFycmF5ID0gW2Zvcm1hdHRlci5nZXQoKSBtb250aFN5bWJvbHNdOwogICAg
IGlmIChbYXJyYXkgY291bnRdID09IDEyKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCAxMjsgKytpKQotICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChTdHJpbmcoW2FycmF5IG9i
amVjdEF0SW5kZXg6aV0pKTsKLSAgICAgICAgcmV0dXJuIGxhYmVsczsKKyAgICAgICAgICAgIG1f
bW9udGhMYWJlbHMuYXBwZW5kKFN0cmluZyhbYXJyYXkgb2JqZWN0QXRJbmRleDppXSkpOworICAg
ICAgICByZXR1cm4gbV9tb250aExhYmVsczsKICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoV1RGOjptb250aEZ1bGxOYW1lKTsgKytpKQotICAgICAg
ICBsYWJlbHMuYXBwZW5kKFdURjo6bW9udGhGdWxsTmFtZVtpXSk7Ci0gICAgcmV0dXJuIGxhYmVs
czsKKyAgICAgICAgbV9tb250aExhYmVscy5hcHBlbmQoV1RGOjptb250aEZ1bGxOYW1lW2ldKTsK
KyAgICByZXR1cm4gbV9tb250aExhYmVsczsKIH0KIAotY29uc3QgVmVjdG9yPFN0cmluZz4mIHdl
ZWtEYXlTaG9ydExhYmVscygpCitjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlTWFjOjp3ZWVr
RGF5U2hvcnRMYWJlbHMoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPFN0cmlu
Zz4sIGxhYmVscywgKCkpOwotICAgIGlmICghbGFiZWxzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIGxhYmVsczsKLSAgICBsYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDcpOworICAgIGlmICghbV93
ZWVrRGF5U2hvcnRMYWJlbHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV93ZWVrRGF5U2hv
cnRMYWJlbHM7CisgICAgbV93ZWVrRGF5U2hvcnRMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDcpOwog
ICAgIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IGZvcm1hdHRlcihBZG9wdE5TLCBjcmVhdGVT
aG9ydERhdGVGb3JtYXR0ZXIoKSk7CiAgICAgTlNBcnJheSAqYXJyYXkgPSBbZm9ybWF0dGVyLmdl
dCgpIHNob3J0V2Vla2RheVN5bWJvbHNdOwogICAgIGlmIChbYXJyYXkgY291bnRdID09IDcpIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDc7ICsraSkKLSAgICAgICAgICAgIGxh
YmVscy5hcHBlbmQoU3RyaW5nKFthcnJheSBvYmplY3RBdEluZGV4OmldKSk7Ci0gICAgICAgIHJl
dHVybiBsYWJlbHM7CisgICAgICAgICAgICBtX3dlZWtEYXlTaG9ydExhYmVscy5hcHBlbmQoU3Ry
aW5nKFthcnJheSBvYmplY3RBdEluZGV4OmldKSk7CisgICAgICAgIHJldHVybiBtX3dlZWtEYXlT
aG9ydExhYmVsczsKICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdURl9BUlJB
WV9MRU5HVEgoV1RGOjp3ZWVrZGF5TmFtZSk7ICsraSkgewotICAgICAgICAvLyB3ZWVrZGF5TmFt
ZSBzdGFydHMgd2l0aCBNb25kYXkuCi0gICAgICAgIGxhYmVscy5hcHBlbmQoV1RGOjp3ZWVrZGF5
TmFtZVsoaSArIDYpICUgN10pOworICAgICAgICBtX3dlZWtEYXlTaG9ydExhYmVscy5hcHBlbmQo
V1RGOjp3ZWVrZGF5TmFtZVsoaSArIDYpICUgN10pOwogICAgIH0KLSAgICByZXR1cm4gbGFiZWxz
OworICAgIHJldHVybiBtX3dlZWtEYXlTaG9ydExhYmVsczsKIH0KIAotdW5zaWduZWQgZmlyc3RE
YXlPZldlZWsoKQordW5zaWduZWQgTG9jYWxlTWFjOjpmaXJzdERheU9mV2VlaygpCiB7CiAgICAg
UmV0YWluUHRyPE5TQ2FsZW5kYXI+IGNhbGVuZGFyKEFkb3B0TlMsIFtbTlNDYWxlbmRhciBhbGxv
Y10gaW5pdFdpdGhDYWxlbmRhcklkZW50aWZpZXI6TlNHcmVnb3JpYW5DYWxlbmRhcl0pOworICAg
IFtjYWxlbmRhci5nZXQoKSBzZXRMb2NhbGU6bV9sb2NhbGUuZ2V0KCldOwogICAgIC8vIFRoZSBk
b2N1bWVudCBmb3IgTlNDYWxlbmRhciAtIGZpcnN0V2Vla2RheSBkb2Vzbid0IGhhdmUgYW4gZXhw
bGFuYXRpb24gb2YKICAgICAvLyBmaXJzdFdlZWtkYXkgdmFsdWUuIFdlIGNhbiBndWVzcyBpdCBi
eSB0aGUgZG9jdW1lbnQgb2YgTlNEYXRlQ29tcG9uZW50cyAtCiAgICAgLy8gd2Vla0RheSwgc28g
aXQgY2FuIGJlIDEgdGhyb3VnaCA3IGFuZCAxIGlzIFN1bmRheS4KICAgICByZXR1cm4gW2NhbGVu
ZGFyLmdldCgpIGZpcnN0V2Vla2RheV0gLSAxOwogfQogI2VuZGlmCi0KIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsaXplZERhdGVNYWMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxpemVkRGF0ZU1hYy5jcHAKaW5k
ZXggYmQ4ZjM2N2YzYTVkYzFiODljNWQ3OGUwMmU1ZTM0N2FmYzg0N2FiNS4uZTY3YzkzODE3YTAx
NzU2NzcwZmUwZTgzYzdmZmVlNDljNmUyNmFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxpemVkRGF0ZU1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxpemVkRGF0ZU1hYy5jcHAKQEAgLTMxLDcgKzMxLDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWREYXRlLmgiCiAKLSNp
bmNsdWRlICJMb2NhbGVXaW4uaCIKKyNpbmNsdWRlICJMb2NhbGVNYWMuaCIKICNpbmNsdWRlIDxs
aW1pdHM+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC00Miw3ICs0Miw3IEBAIGRvdWJsZSBw
YXJzZUxvY2FsaXplZERhdGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgRGF0ZUNvbXBvbmVudHM6OlR5
cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIERhdGVDb21wb25lbnRz
OjpEYXRlOgotICAgICAgICByZXR1cm4gTG9jYWxlV2luOjpjdXJyZW50TG9jYWxlKCktPnBhcnNl
RGF0ZShpbnB1dCk7CisgICAgICAgIHJldHVybiBMb2NhbGVNYWM6OmN1cnJlbnRMb2NhbGUoKS0+
cGFyc2VEYXRlKGlucHV0KTsKICAgICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlVGltZToKICAg
ICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlVGltZUxvY2FsOgogICAgIGNhc2UgRGF0ZUNvbXBv
bmVudHM6Ok1vbnRoOgpAQCAtNTgsNyArNTgsNyBAQCBTdHJpbmcgZm9ybWF0TG9jYWxpemVkRGF0
ZShjb25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZUNvbXBvbmVudHMpCiB7CiAgICAgc3dpdGNoIChk
YXRlQ29tcG9uZW50cy50eXBlKCkpIHsKICAgICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlOgot
ICAgICAgICByZXR1cm4gTG9jYWxlV2luOjpjdXJyZW50TG9jYWxlKCktPmZvcm1hdERhdGUoZGF0
ZUNvbXBvbmVudHMpOworICAgICAgICByZXR1cm4gTG9jYWxlTWFjOjpjdXJyZW50TG9jYWxlKCkt
PmZvcm1hdERhdGUoZGF0ZUNvbXBvbmVudHMpOwogICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6OkRh
dGVUaW1lOgogICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6OkRhdGVUaW1lTG9jYWw6CiAgICAgY2Fz
ZSBEYXRlQ29tcG9uZW50czo6TW9udGg6CkBAIC03MywyMiArNzMsMjIgQEAgU3RyaW5nIGZvcm1h
dExvY2FsaXplZERhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGVDb21wb25lbnRzKQogI2lm
IEVOQUJMRShDQUxFTkRBUl9QSUNLRVIpCiBTdHJpbmcgbG9jYWxpemVkRGF0ZUZvcm1hdFRleHQo
KQogewotICAgIHJldHVybiBMb2NhbGVXaW46OmN1cnJlbnRMb2NhbGUoKS0+ZGF0ZUZvcm1hdFRl
eHQoKTsKKyAgICByZXR1cm4gTG9jYWxlTWFjOjpjdXJyZW50TG9jYWxlKCktPmRhdGVGb3JtYXRU
ZXh0KCk7CiB9CiAKIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBtb250aExhYmVscygpCiB7Ci0gICAg
cmV0dXJuIExvY2FsZVdpbjo6Y3VycmVudExvY2FsZSgpLT5tb250aExhYmVscygpOworICAgIHJl
dHVybiBMb2NhbGVNYWM6OmN1cnJlbnRMb2NhbGUoKS0+bW9udGhMYWJlbHMoKTsKIH0KIAogY29u
c3QgVmVjdG9yPFN0cmluZz4mIHdlZWtEYXlTaG9ydExhYmVscygpCiB7Ci0gICAgcmV0dXJuIExv
Y2FsZVdpbjo6Y3VycmVudExvY2FsZSgpLT53ZWVrRGF5U2hvcnRMYWJlbHMoKTsKKyAgICByZXR1
cm4gTG9jYWxlTWFjOjpjdXJyZW50TG9jYWxlKCktPndlZWtEYXlTaG9ydExhYmVscygpOwogfQog
CiB1bnNpZ25lZCBmaXJzdERheU9mV2VlaygpCiB7Ci0gICAgcmV0dXJuIExvY2FsZVdpbjo6Y3Vy
cmVudExvY2FsZSgpLT5maXJzdERheU9mV2VlaygpOworICAgIHJldHVybiBMb2NhbGVNYWM6OmN1
cnJlbnRMb2NhbGUoKS0+Zmlyc3REYXlPZldlZWsoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGl6ZWREYXRlTWFjLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxpemVkRGF0ZU1hYy5tbQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg4NzZmOWQzODEzNTBiOGNjZmQ5NTMyZmMyMmJi
OWY2YmE0YmIyMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGl6ZWREYXRlTWFjLm1tCisr
KyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiTG9jYWxpemVkRGF0ZS5oIgotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL05TRGF0ZUZvcm1hdHRl
ci5oPgotI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKLSNpbmNsdWRlIDxsaW1pdHM+Ci0j
aW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgTlNEYXRlRm9ybWF0dGVyICpjcmVhdGVT
aG9ydERhdGVGb3JtYXR0ZXIoKQotewotICAgIE5TRGF0ZUZvcm1hdHRlciAqZm9ybWF0dGVyID0g
W1tOU0RhdGVGb3JtYXR0ZXIgYWxsb2NdIGluaXRdOwotICAgIFtmb3JtYXR0ZXIgc2V0RGF0ZVN0
eWxlOk5TRGF0ZUZvcm1hdHRlclNob3J0U3R5bGVdOwotICAgIFtmb3JtYXR0ZXIgc2V0VGltZVN0
eWxlOk5TRGF0ZUZvcm1hdHRlck5vU3R5bGVdOwotICAgIFtmb3JtYXR0ZXIgc2V0VGltZVpvbmU6
W05TVGltZVpvbmUgdGltZVpvbmVXaXRoQWJicmV2aWF0aW9uOkAiVVRDIl1dOwotICAgIFtmb3Jt
YXR0ZXIgc2V0Q2FsZW5kYXI6W1tOU0NhbGVuZGFyIGFsbG9jXSBpbml0V2l0aENhbGVuZGFySWRl
bnRpZmllcjpOU0dyZWdvcmlhbkNhbGVuZGFyXV07Ci0gICAgcmV0dXJuIGZvcm1hdHRlcjsKLX0K
LQotZG91YmxlIHBhcnNlTG9jYWxpemVkRGF0ZShjb25zdCBTdHJpbmcmIGlucHV0LCBEYXRlQ29t
cG9uZW50czo6VHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRGF0
ZUNvbXBvbmVudHM6OkRhdGU6IHsKLSAgICAgICAgUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4g
Zm9ybWF0dGVyKEFkb3B0TlMsIGNyZWF0ZVNob3J0RGF0ZUZvcm1hdHRlcigpKTsKLSAgICAgICAg
TlNEYXRlICpkYXRlID0gW2Zvcm1hdHRlci5nZXQoKSBkYXRlRnJvbVN0cmluZzppbnB1dF07Ci0g
ICAgICAgIGlmICghZGF0ZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICByZXR1cm4gW2Rh
dGUgdGltZUludGVydmFsU2luY2UxOTcwXSAqIG1zUGVyU2Vjb25kOwotICAgIH0KLSAgICBjYXNl
IERhdGVDb21wb25lbnRzOjpEYXRlVGltZToKLSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRl
VGltZUxvY2FsOgotICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6Ok1vbnRoOgotICAgIGNhc2UgRGF0
ZUNvbXBvbmVudHM6OlRpbWU6Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50czo6V2VlazoKLSAgICBj
YXNlIERhdGVDb21wb25lbnRzOjpJbnZhbGlkOgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
cmV0dXJuIG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotfQotCi1TdHJpbmcg
Zm9ybWF0TG9jYWxpemVkRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZUNvbXBvbmVudHMp
Ci17Ci0gICAgc3dpdGNoIChkYXRlQ29tcG9uZW50cy50eXBlKCkpIHsKLSAgICBjYXNlIERhdGVD
b21wb25lbnRzOjpEYXRlOiB7Ci0gICAgICAgIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IGZv
cm1hdHRlcihBZG9wdE5TLCBjcmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIoKSk7Ci0gICAgICAgIE5T
VGltZUludGVydmFsIGludGVydmFsID0gZGF0ZUNvbXBvbmVudHMubWlsbGlzZWNvbmRzU2luY2VF
cG9jaCgpIC8gbXNQZXJTZWNvbmQ7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoW2Zvcm1hdHRlci5n
ZXQoKSBzdHJpbmdGcm9tRGF0ZTpbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFsU2luY2UxOTcw
OmludGVydmFsXV0pOwotICAgIH0KLSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlVGltZToK
LSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlVGltZUxvY2FsOgotICAgIGNhc2UgRGF0ZUNv
bXBvbmVudHM6Ok1vbnRoOgotICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6OlRpbWU6Ci0gICAgY2Fz
ZSBEYXRlQ29tcG9uZW50czo6V2VlazoKLSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpJbnZhbGlk
OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi0jaWYg
RU5BQkxFKENBTEVOREFSX1BJQ0tFUikKLXN0YXRpYyBib29sIGlzWWVhclN5bWJvbChVQ2hhciBs
ZXR0ZXIpIHsgcmV0dXJuIGxldHRlciA9PSAneScgfHwgbGV0dGVyID09ICdZJyB8fCBsZXR0ZXIg
PT0gJ3UnOyB9Ci1zdGF0aWMgYm9vbCBpc01vbnRoU3ltYm9sKFVDaGFyIGxldHRlcikgeyByZXR1
cm4gbGV0dGVyID09ICdNJyB8fCBsZXR0ZXIgPT0gJ0wnOyB9Ci1zdGF0aWMgYm9vbCBpc0RheVN5
bWJvbChVQ2hhciBsZXR0ZXIpIHsgcmV0dXJuIGxldHRlciA9PSAnZCc7IH0KLQotLy8gaHR0cDov
L3VuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTYuaHRtbCNEYXRlX0Zvcm1hdF9QYXR0ZXJu
cwotc3RhdGljIFN0cmluZyBsb2NhbGl6ZURhdGVGb3JtYXQoY29uc3QgU3RyaW5nJiBmb3JtYXQp
Ci17Ci0gICAgU3RyaW5nIHllYXJUZXh0ID0gZGF0ZUZvcm1hdFllYXJUZXh0KCkuaXNFbXB0eSgp
ID8gIlllYXIiIDogZGF0ZUZvcm1hdFllYXJUZXh0KCk7Ci0gICAgU3RyaW5nIG1vbnRoVGV4dCA9
IGRhdGVGb3JtYXRNb250aFRleHQoKS5pc0VtcHR5KCkgPyAiTW9udGgiIDogZGF0ZUZvcm1hdE1v
bnRoVGV4dCgpOwotICAgIFN0cmluZyBkYXlUZXh0ID0gZGF0ZUZvcm1hdERheUluTW9udGhUZXh0
KCkuaXNFbXB0eSgpID8gIkRheSIgOiBkYXRlRm9ybWF0RGF5SW5Nb250aFRleHQoKTsKLSAgICBT
dHJpbmdCdWlsZGVyIGJ1ZmZlcjsKLSAgICBib29sIGluUXVvdGUgPSBmYWxzZTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybWF0Lmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgVUNo
YXIgY2ggPSBmb3JtYXRbaV07Ci0gICAgICAgIGlmIChpblF1b3RlKSB7Ci0gICAgICAgICAgICBp
ZiAoY2ggPT0gJ1wnJykgewotICAgICAgICAgICAgICAgIGluUXVvdGUgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGZvcm1hdFtpIC0gMV0g
PT0gJ1wnJykKLSAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgnXCcnKTsKLSAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoY2gpOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY2ggPT0gJ1wnJykgewot
ICAgICAgICAgICAgaW5RdW90ZSA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoaSA+IDAgJiYgZm9y
bWF0W2kgLSAxXSA9PSAnXCcnKQotICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoY2gpOwot
ICAgICAgICB9IGVsc2UgaWYgKGlzWWVhclN5bWJvbChjaCkpIHsKLSAgICAgICAgICAgIGlmIChp
ID4gMCAmJiBmb3JtYXRbaSAtIDFdID09IGNoKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCh5ZWFyVGV4dCk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
aXNNb250aFN5bWJvbChjaCkpIHsKLSAgICAgICAgICAgIGlmIChpID4gMCAmJiBmb3JtYXRbaSAt
IDFdID09IGNoKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYnVmZmVy
LmFwcGVuZChtb250aFRleHQpOwotICAgICAgICB9IGVsc2UgaWYgKGlzRGF5U3ltYm9sKGNoKSkg
ewotICAgICAgICAgICAgaWYgKGkgPiAwICYmIGZvcm1hdFtpIC0gMV0gPT0gY2gpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBidWZmZXIuYXBwZW5kKGRheVRleHQpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoY2gpOwotICAgIH0KLSAg
ICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBsb2NhbGl6ZWREYXRlRm9y
bWF0VGV4dCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHRleHQsICgpKTsK
LSAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdGV4dDsKLSAgICBSZXRh
aW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBmb3JtYXR0ZXIoQWRvcHROUywgY3JlYXRlU2hvcnREYXRl
Rm9ybWF0dGVyKCkpOwotICAgIHRleHQgPSBsb2NhbGl6ZURhdGVGb3JtYXQoU3RyaW5nKFtmb3Jt
YXR0ZXIuZ2V0KCkgZGF0ZUZvcm1hdF0pKTsKLSAgICByZXR1cm4gdGV4dDsKLX0KLQotY29uc3Qg
VmVjdG9yPFN0cmluZz4mIG1vbnRoTGFiZWxzKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFZlY3RvcjxTdHJpbmc+LCBsYWJlbHMsICgpKTsKLSAgICBpZiAoIWxhYmVscy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBsYWJlbHM7Ci0gICAgbGFiZWxzLnJlc2VydmVDYXBhY2l0eSgxMik7
Ci0gICAgUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gZm9ybWF0dGVyKEFkb3B0TlMsIGNyZWF0
ZVNob3J0RGF0ZUZvcm1hdHRlcigpKTsKLSAgICBOU0FycmF5ICphcnJheSA9IFtmb3JtYXR0ZXIu
Z2V0KCkgbW9udGhTeW1ib2xzXTsKLSAgICBpZiAoW2FycmF5IGNvdW50XSA9PSAxMikgewotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTI7ICsraSkKLSAgICAgICAgICAgIGxhYmVs
cy5hcHBlbmQoU3RyaW5nKFthcnJheSBvYmplY3RBdEluZGV4OmldKSk7Ci0gICAgICAgIHJldHVy
biBsYWJlbHM7Ci0gICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlf
TEVOR1RIKFdURjo6bW9udGhGdWxsTmFtZSk7ICsraSkKLSAgICAgICAgbGFiZWxzLmFwcGVuZChX
VEY6Om1vbnRoRnVsbE5hbWVbaV0pOwotICAgIHJldHVybiBsYWJlbHM7Ci19Ci0KLWNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiB3ZWVrRGF5U2hvcnRMYWJlbHMoKQotewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoVmVjdG9yPFN0cmluZz4sIGxhYmVscywgKCkpOwotICAgIGlmICghbGFiZWxzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIGxhYmVsczsKLSAgICBsYWJlbHMucmVzZXJ2ZUNhcGFjaXR5
KDcpOwotICAgIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IGZvcm1hdHRlcihBZG9wdE5TLCBj
cmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIoKSk7Ci0gICAgTlNBcnJheSAqYXJyYXkgPSBbZm9ybWF0
dGVyLmdldCgpIHNob3J0V2Vla2RheVN5bWJvbHNdOwotICAgIGlmIChbYXJyYXkgY291bnRdID09
IDcpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDc7ICsraSkKLSAgICAgICAg
ICAgIGxhYmVscy5hcHBlbmQoU3RyaW5nKFthcnJheSBvYmplY3RBdEluZGV4OmldKSk7Ci0gICAg
ICAgIHJldHVybiBsYWJlbHM7Ci0gICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBX
VEZfQVJSQVlfTEVOR1RIKFdURjo6d2Vla2RheU5hbWUpOyArK2kpIHsKLSAgICAgICAgLy8gd2Vl
a2RheU5hbWUgc3RhcnRzIHdpdGggTW9uZGF5LgotICAgICAgICBsYWJlbHMuYXBwZW5kKFdURjo6
d2Vla2RheU5hbWVbKGkgKyA2KSAlIDddKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxhYmVsczsKLX0K
LQotdW5zaWduZWQgZmlyc3REYXlPZldlZWsoKQotewotICAgIFJldGFpblB0cjxOU0NhbGVuZGFy
PiBjYWxlbmRhcihBZG9wdE5TLCBbW05TQ2FsZW5kYXIgYWxsb2NdIGluaXRXaXRoQ2FsZW5kYXJJ
ZGVudGlmaWVyOk5TR3JlZ29yaWFuQ2FsZW5kYXJdKTsKLSAgICAvLyBUaGUgZG9jdW1lbnQgZm9y
IE5TQ2FsZW5kYXIgLSBmaXJzdFdlZWtkYXkgZG9lc24ndCBoYXZlIGFuIGV4cGxhbmF0aW9uIG9m
Ci0gICAgLy8gZmlyc3RXZWVrZGF5IHZhbHVlLiBXZSBjYW4gZ3Vlc3MgaXQgYnkgdGhlIGRvY3Vt
ZW50IG9mIE5TRGF0ZUNvbXBvbmVudHMgLQotICAgIC8vIHdlZWtEYXksIHNvIGl0IGNhbiBiZSAx
IHRocm91Z2ggNyBhbmQgMSBpcyBTdW5kYXkuCi0gICAgcmV0dXJuIFtjYWxlbmRhci5nZXQoKSBm
aXJzdFdlZWtkYXldIC0gMTsKLX0KLSNlbmRpZgotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaQppbmRleCA3YjNlNjhjOGI4MmFmZWUxMWQxOGFhNzIwZjY4OWU0ZjJlNjUxNTRhLi40NGI5
ODNjNzZlODNkZGMxZDUzZTA5OTc1Y2M2NzlmYTY2ZDdjNDc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKQEAgLTE4MCw2ICsxODAsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgJ3Rl
c3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgIF0sCiAgICAg
ICAgICAgICB9XSwKKyAgICAgICAgICAgIFsnT1M9PSJtYWMiJywgeworICAgICAgICAgICAgICAg
ICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBbCisgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9M
b2NhbGVNYWNUZXN0LmNwcCcsCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIH1dLAog
ICAgICAgICAgICAgWydPUyE9Im1hYyInLCB7CiAgICAgICAgICAgICAgICAgJ3dlYmtpdF91bml0
dGVzdF9maWxlcyc6IFsKICAgICAgICAgICAgICAgICAgICAgIyBNYWMgdXNlcyBTY3JvbGxBbmlt
YXRvck1hYyBpbnN0ZWFkIG9mIFNjcm9sbEFuaW1hdG9yTm9uZS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTG9jYWxlTWFjVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0xvY2FsZU1hY1Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3MDEwMjliMGIy
OTg0NWExZmM1NzU0ODY2MmJmMGMwNDdjNWUxZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xvY2FsZU1hY1Rlc3QuY3BwCkBAIC0wLDAgKzEsMTc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvY2FsZU1hYy5oIgorCisjaW5jbHVkZSAi
RGF0ZUNvbXBvbmVudHMuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0
Zi9EYXRlTWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCitjbGFzcyBMb2NhbGVNYWNUZXN0IDogcHVibGljIDo6dGVzdGlu
Zzo6VGVzdCB7Citwcm90ZWN0ZWQ6CisgICAgZW51bSB7CisgICAgICAgIEphbnVhcnkgPSAwLCBG
ZWJydWFyeSwgTWFyY2gsCisgICAgICAgIEFwcmlsLCBNYXksIEp1bmUsCisgICAgICAgIEp1bHks
IEF1Z3VzdCwgU2VwdGVtYmVyLAorICAgICAgICBPY3RvYmVyLCBOb3ZlbWJlciwgRGVjZW1iZXIs
CisgICAgfTsKKworICAgIGVudW0geworICAgICAgICBTdW5kYXkgPSAwLCBNb25kYXksIFR1ZXNk
YXksCisgICAgICAgIFdlZG5lc2RheSwgVGh1cnNkYXksIEZyaWRheSwKKyAgICAgICAgU2F0dXJk
YXksCisgICAgfTsKKworICAgIERhdGVDb21wb25lbnRzIGRhdGVDb21wb25lbnRzKGludCB5ZWFy
LCBpbnQgbW9udGgsIGludCBkYXkpCisgICAgeworICAgICAgICBEYXRlQ29tcG9uZW50cyBkYXRl
OworICAgICAgICBkYXRlLnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRlKG1zRm9yRGF0
ZSh5ZWFyLCBtb250aCwgZGF5KSk7CisgICAgICAgIHJldHVybiBkYXRlOworICAgIH0KKworICAg
IGRvdWJsZSBtc0ZvckRhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBkYXRlVG9EYXlzRnJvbTE5NzAoeWVhciwgbW9udGgsIGRheSkgKiBtc1Bl
ckRheTsKKyAgICB9CisKKyAgICBTdHJpbmcgZm9ybWF0RGF0ZShjb25zdCBTdHJpbmcmIGxvY2Fs
ZVN0cmluZywgaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSkKKyAgICB7CisgICAgICAgIE93
blB0cjxMb2NhbGVNYWM+IGxvY2FsZSA9IExvY2FsZU1hYzo6Y3JlYXRlKGxvY2FsZVN0cmluZyk7
CisgICAgICAgIHJldHVybiBsb2NhbGUtPmZvcm1hdERhdGUoZGF0ZUNvbXBvbmVudHMoeWVhciwg
bW9udGgsIGRheSkpOworICAgIH0KKworICAgIGRvdWJsZSBwYXJzZURhdGUoY29uc3QgU3RyaW5n
JiBsb2NhbGVTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGF0ZVN0cmluZykKKyAgICB7CisgICAgICAg
IE93blB0cjxMb2NhbGVNYWM+IGxvY2FsZSA9IExvY2FsZU1hYzo6Y3JlYXRlKGxvY2FsZVN0cmlu
Zyk7CisgICAgICAgIHJldHVybiBsb2NhbGUtPnBhcnNlRGF0ZShkYXRlU3RyaW5nKTsKKyAgICB9
CisKKyNpZiBFTkFCTEUoQ0FMRU5EQVJfUElDS0VSKQorICAgIFN0cmluZyBkYXRlRm9ybWF0VGV4
dChjb25zdCBTdHJpbmcmIGxvY2FsZVN0cmluZykKKyAgICB7CisgICAgICAgIE93blB0cjxMb2Nh
bGVNYWM+IGxvY2FsZSA9IExvY2FsZU1hYzo6Y3JlYXRlKGxvY2FsZVN0cmluZyk7CisgICAgICAg
IHJldHVybiBsb2NhbGUtPmRhdGVGb3JtYXRUZXh0KCk7CisgICAgfQorCisgICAgdW5zaWduZWQg
Zmlyc3REYXlPZldlZWsoY29uc3QgU3RyaW5nJiBsb2NhbGVTdHJpbmcpCisgICAgeworICAgICAg
ICBPd25QdHI8TG9jYWxlTWFjPiBsb2NhbGUgPSBMb2NhbGVNYWM6OmNyZWF0ZShsb2NhbGVTdHJp
bmcpOworICAgICAgICByZXR1cm4gbG9jYWxlLT5maXJzdERheU9mV2VlaygpOworICAgIH0KKwor
ICAgIFN0cmluZyBtb250aExhYmVsKGNvbnN0IFN0cmluZyYgbG9jYWxlU3RyaW5nLCB1bnNpZ25l
ZCBpbmRleCkKKyAgICB7CisgICAgICAgIE93blB0cjxMb2NhbGVNYWM+IGxvY2FsZSA9IExvY2Fs
ZU1hYzo6Y3JlYXRlKGxvY2FsZVN0cmluZyk7CisgICAgICAgIHJldHVybiBsb2NhbGUtPm1vbnRo
TGFiZWxzKClbaW5kZXhdOworICAgIH0KKworICAgIFN0cmluZyB3ZWVrRGF5U2hvcnRMYWJlbChj
b25zdCBTdHJpbmcmIGxvY2FsZVN0cmluZywgdW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAg
ICBPd25QdHI8TG9jYWxlTWFjPiBsb2NhbGUgPSBMb2NhbGVNYWM6OmNyZWF0ZShsb2NhbGVTdHJp
bmcpOworICAgICAgICByZXR1cm4gbG9jYWxlLT53ZWVrRGF5U2hvcnRMYWJlbHMoKVtpbmRleF07
CisgICAgfQorI2VuZGlmCit9OworCitURVNUX0YoTG9jYWxlTWFjVGVzdCwgZm9ybWF0RGF0ZSkK
K3sKKyAgICBFWFBFQ1RfU1RSRVEoIjQvMjcvMDUiLCBmb3JtYXREYXRlKCJlbl9VUyIsIDIwMDUs
IEFwcmlsLCAyNykudXRmOCgpLmRhdGEoKSk7CisgICAgRVhQRUNUX1NUUkVRKCIyNy8wNC8wNSIs
IGZvcm1hdERhdGUoImZyX0ZSIiwgMjAwNSwgQXByaWwsIDI3KS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBFWFBFQ1RfU1RSRVEoIjA1LzA0LzI3IiwgZm9ybWF0RGF0ZSgiamFfSlAiLCAyMDA1LCBBcHJp
bCwgMjcpLnV0ZjgoKS5kYXRhKCkpOworfQorCitURVNUX0YoTG9jYWxlTWFjVGVzdCwgcGFyc2VE
YXRlKQoreworICAgIEVYUEVDVF9FUShtc0ZvckRhdGUoMjAwNSwgQXByaWwsIDI3KSwgcGFyc2VE
YXRlKCJlbl9VUyIsICJBcHJpbCAyNywgMjAwNSIpKTsKKyAgICBFWFBFQ1RfRVEobXNGb3JEYXRl
KDIwMDUsIEFwcmlsLCAyNyksIHBhcnNlRGF0ZSgiZnJfRlIiLCAiMjcgYXZyaWwgMjAwNSIpKTsK
KyAgICBFWFBFQ1RfRVEobXNGb3JEYXRlKDIwMDUsIEFwcmlsLCAyNyksIHBhcnNlRGF0ZSgiamFf
SlAiLCAiMjAwNS8wNC8yNyIpKTsKK30KKworI2lmIEVOQUJMRShDQUxFTkRBUl9QSUNLRVIpCitU
RVNUX0YoTG9jYWxlTWFjVGVzdCwgZGF0ZUZvcm1hdFRleHQpCit7CisgICAgRVhQRUNUX1NUUkVR
KCJNb250aC9EYXkvWWVhciIsIGRhdGVGb3JtYXRUZXh0KCJlbl9VUyIpLnV0ZjgoKS5kYXRhKCkp
OworICAgIEVYUEVDVF9TVFJFUSgiRGF5L01vbnRoL1llYXIiLCBkYXRlRm9ybWF0VGV4dCgiZnJf
RlIiKS51dGY4KCkuZGF0YSgpKTsKKyAgICBFWFBFQ1RfU1RSRVEoIlllYXIvTW9udGgvRGF5Iiwg
ZGF0ZUZvcm1hdFRleHQoImphX0pQIikudXRmOCgpLmRhdGEoKSk7Cit9CisKK1RFU1RfRihMb2Nh
bGVNYWNUZXN0LCBmaXJzdERheU9mV2VlaykKK3sKKyAgICBFWFBFQ1RfRVEoU3VuZGF5LCBmaXJz
dERheU9mV2VlaygiZW5fVVMiKSk7CisgICAgRVhQRUNUX0VRKE1vbmRheSwgZmlyc3REYXlPZldl
ZWsoImZyX0ZSIikpOworICAgIEVYUEVDVF9FUShTdW5kYXksIGZpcnN0RGF5T2ZXZWVrKCJqYV9K
UCIpKTsKK30KKworVEVTVF9GKExvY2FsZU1hY1Rlc3QsIG1vbnRoTGFiZWxzKQoreworICAgIEVY
UEVDVF9TVFJFUSgiSmFudWFyeSIsIG1vbnRoTGFiZWwoImVuX1VTIiwgSmFudWFyeSkudXRmOCgp
LmRhdGEoKSk7CisgICAgRVhQRUNUX1NUUkVRKCJKdW5lIiwgbW9udGhMYWJlbCgiZW5fVVMiLCBK
dW5lKS51dGY4KCkuZGF0YSgpKTsKKyAgICBFWFBFQ1RfU1RSRVEoIkRlY2VtYmVyIiwgbW9udGhM
YWJlbCgiZW5fVVMiLCBEZWNlbWJlcikudXRmOCgpLmRhdGEoKSk7CisKKyAgICBFWFBFQ1RfU1RS
RVEoImphbnZpZXIiLCBtb250aExhYmVsKCJmcl9GUiIsIEphbnVhcnkpLnV0ZjgoKS5kYXRhKCkp
OworICAgIEVYUEVDVF9TVFJFUSgianVpbiIsIG1vbnRoTGFiZWwoImZyX0ZSIiwgSnVuZSkudXRm
OCgpLmRhdGEoKSk7CisgICAgVUNoYXIgZnJEZWNlbWJlcltdID0geyAnZCcsIDB4RTksICdjJywg
J2UnLCAnbScsICdiJywgJ3InLCAnZScsIDAgfTsKKyAgICBFWFBFQ1RfU1RSRVEoU3RyaW5nKGZy
RGVjZW1iZXIpLnV0ZjgoKS5kYXRhKCksIG1vbnRoTGFiZWwoImZyX0ZSIiwgRGVjZW1iZXIpLnV0
ZjgoKS5kYXRhKCkpOworCisgICAgVUNoYXIgamFKYW51YXJ5W10gPSB7ICcxJywgMHg2NzA4LCAw
IH07CisgICAgRVhQRUNUX1NUUkVRKFN0cmluZyhqYUphbnVhcnkpLnV0ZjgoKS5kYXRhKCksIG1v
bnRoTGFiZWwoImphX0pQIiwgSmFudWFyeSkudXRmOCgpLmRhdGEoKSk7CisgICAgVUNoYXIgamFK
dW5lW10gPSB7ICc2JywgMHg2NzA4LCAwIH07CisgICAgRVhQRUNUX1NUUkVRKFN0cmluZyhqYUp1
bmUpLnV0ZjgoKS5kYXRhKCksIG1vbnRoTGFiZWwoImphX0pQIiwgSnVuZSkudXRmOCgpLmRhdGEo
KSk7CisgICAgVUNoYXIgamFEZWNlbWJlcltdID0geyAnMScsICcyJywgMHg2NzA4LCAwIH07Cisg
ICAgRVhQRUNUX1NUUkVRKFN0cmluZyhqYURlY2VtYmVyKS51dGY4KCkuZGF0YSgpLCBtb250aExh
YmVsKCJqYV9KUCIsIERlY2VtYmVyKS51dGY4KCkuZGF0YSgpKTsKK30KKworVEVTVF9GKExvY2Fs
ZU1hY1Rlc3QsIHdlZWtEYXlTaG9ydExhYmVscykKK3sKKyAgICBFWFBFQ1RfU1RSRVEoIlN1biIs
IHdlZWtEYXlTaG9ydExhYmVsKCJlbl9VUyIsIFN1bmRheSkudXRmOCgpLmRhdGEoKSk7CisgICAg
RVhQRUNUX1NUUkVRKCJXZWQiLCB3ZWVrRGF5U2hvcnRMYWJlbCgiZW5fVVMiLCBXZWRuZXNkYXkp
LnV0ZjgoKS5kYXRhKCkpOworICAgIEVYUEVDVF9TVFJFUSgiU2F0Iiwgd2Vla0RheVNob3J0TGFi
ZWwoImVuX1VTIiwgU2F0dXJkYXkpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgRVhQRUNUX1NUUkVR
KCJkaW0uIiwgd2Vla0RheVNob3J0TGFiZWwoImZyX0ZSIiwgU3VuZGF5KS51dGY4KCkuZGF0YSgp
KTsKKyAgICBFWFBFQ1RfU1RSRVEoIm1lci4iLCB3ZWVrRGF5U2hvcnRMYWJlbCgiZnJfRlIiLCBX
ZWRuZXNkYXkpLnV0ZjgoKS5kYXRhKCkpOworICAgIEVYUEVDVF9TVFJFUSgic2FtLiIsIHdlZWtE
YXlTaG9ydExhYmVsKCJmcl9GUiIsIFNhdHVyZGF5KS51dGY4KCkuZGF0YSgpKTsKKworICAgIFVD
aGFyIGphU3VuZGF5W10gPSB7IDB4NjVFNSwgMCB9OworICAgIEVYUEVDVF9TVFJFUShTdHJpbmco
amFTdW5kYXkpLnV0ZjgoKS5kYXRhKCksIHdlZWtEYXlTaG9ydExhYmVsKCJqYV9KUCIsIFN1bmRh
eSkudXRmOCgpLmRhdGEoKSk7CisgICAgVUNoYXIgamFXZWRuZXNkYXlbXSA9IHsgMHg2QzM0LCAw
IH07CisgICAgRVhQRUNUX1NUUkVRKFN0cmluZyhqYVdlZG5lc2RheSkudXRmOCgpLmRhdGEoKSwg
d2Vla0RheVNob3J0TGFiZWwoImphX0pQIiwgV2VkbmVzZGF5KS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBVQ2hhciBqYVNhdHVyZGF5W10gPSB7IDB4NTcxRiwgMCB9OworICAgIEVYUEVDVF9TVFJFUShT
dHJpbmcoamFTYXR1cmRheSkudXRmOCgpLmRhdGEoKSwgd2Vla0RheVNob3J0TGFiZWwoImphX0pQ
IiwgU2F0dXJkYXkpLnV0ZjgoKS5kYXRhKCkpOworfQorI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151384</attachid>
            <date>2012-07-09 18:59:59 -0700</date>
            <delta_ts>2012-07-09 23:49:30 -0700</delta_ts>
            <desc>Patch 3</desc>
            <filename>bug-90248-20120710105957.patch</filename>
            <type>text/plain</type>
            <size>31469</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmRlNTljNmQ3ZWRlYjc3
NTYxNWE1NTE0MDcyNDA1N2Q2MTg5ZGNlMS4uMDcwOWU1MTFjNjhjYTY4NjYyMTFlMTdjZTE5YmZl
YjA0MzdmYzQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEyLTA3LTA5ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1BsYXRmb3JtXSBJ
bnRyb2R1Y2UgTG9jYWxlTWFjIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MDI0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgaW1wbGVtZW50YXRpb24gb2YgbG9jYWxp
emVkIGRhdGUgZm9ybWF0IHJlbGF0ZWQKKyAgICAgICAgZnVuY3Rpb25zIGludG8gTG9jYWxlTWFj
IGNsYXNzIGFzIG9mIExvY2FsZVdpbiBjbGFzcyBmb3IgZWFzZSBvZgorICAgICAgICBtYWludGFp
biBhbmQgdXNpbmcgc3BlY2lmaWMgbG9jYWxlIGluIHRlc3RpbmcgcmF0aGVyIHRoYW4gc3lzdGVt
CisgICAgICAgIGRlZmF1bHQgbG9jYWxlLgorCisgICAgICAgIFRlc3RzOiBXZWJLaXQvY2hyb21p
dW0vdGVzdHMvTG9jYWxlTWFjVGVzdC5jcHAKKworICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNv
cmUuZ3lwOiBJbmNsdWRlIExvY2FsZU1hYy5tbQorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMuaDogUmVwbGFjZSBMb2NhbGVXaW4g
dG8gTG9jYWxlTWFjLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZU1hYzo6TG9jYWxlTWFjKToKKyAgICAgICAgKFdlYkNv
cmU6OkxvY2FsZU1hYzo6fkxvY2FsZU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVNYWM6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVNYWM6OmN1cnJlbnRMb2NhbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6TG9jYWxlTWFjOjpjcmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6TG9jYWxlTWFjOjpwYXJzZURhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TG9jYWxlTWFjOjpmb3JtYXREYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZU1hYzo6
ZGF0ZUZvcm1hdFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxlTWFjOjptb250aExhYmVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVNYWM6OndlZWtEYXlTaG9ydExhYmVscyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMb2NhbGVNYWM6OmZpcnN0RGF5T2ZXZWVrKToKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGl6ZWREYXRlTWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlTG9jYWxpemVkRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpmb3JtYXRMb2NhbGl6ZWRE
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmxvY2FsaXplZERhdGVGb3JtYXRUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6Om1vbnRoTGFiZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OndlZWtEYXlTaG9y
dExhYmVscyk6CisgICAgICAgIChXZWJDb3JlOjpmaXJzdERheU9mV2Vlayk6CisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxpemVkRGF0ZU1hYy5tbTogUmVtb3ZlZC4KKwogMjAxMi0w
Ny0wOSAgQWxpY2UgQ2hlbmcgIDxhbGljZV9jaGVuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgRWRp
dGluZzogQXV0b2NvcnJlY3Rpb24gaW4gYmxvY2txdW90ZXMgY2F1c2VzIHRleHQgdG8gYnJlYWsg
b3V0IG9mIHF1b3RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDE1NTJlMDMyZjY2ZDc3
MzQ0OWNlY2E5ODc1ODBkYzE0NWE4YmViYzMuLjk2YTYxYzUxNTgyMTYzYjZhMzZlZjNjZWUwMTRi
NmIxZDk5OGFlMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAK
KzIwMTItMDctMDkgIFlvc2hpZnVtaSBJbm91ZSAgPHlvc2luQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbUGxhdGZvcm1dIEludHJvZHVjZSBMb2NhbGVNYWMgY2xhc3MKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMjQ4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRlZCB0ZXN0cyBm
b3IgTG9jYWxlTWFjIGNsYXNzLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICog
dGVzdHMvTG9jYWxlTWFjVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoTG9jYWxlTWFjVGVzdCk6
CisgICAgICAgIChMb2NhbGVNYWNUZXN0OjpkYXRlQ29tcG9uZW50cyk6CisgICAgICAgIChMb2Nh
bGVNYWNUZXN0Ojptc0ZvckRhdGUpOgorICAgICAgICAoTG9jYWxlTWFjVGVzdDo6Zm9ybWF0RGF0
ZSk6CisgICAgICAgIChMb2NhbGVNYWNUZXN0OjpwYXJzZURhdGUpOgorICAgICAgICAoTG9jYWxl
TWFjVGVzdDo6ZGF0ZUZvcm1hdFRleHQpOgorICAgICAgICAoTG9jYWxlTWFjVGVzdDo6Zmlyc3RE
YXlPZldlZWspOgorICAgICAgICAoTG9jYWxlTWFjVGVzdDo6bW9udGhMYWJlbCk6CisgICAgICAg
IChMb2NhbGVNYWNUZXN0Ojp3ZWVrRGF5U2hvcnRMYWJlbCk6CisgICAgICAgIChURVNUX0YpOgor
CiAyMDEyLTA3LTA5ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgSW5kZXhlZERCOiBSZW1vdmUgb2Jzb2xldGUgYWNjZXNzb3IgcGx1bWJpbmcKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggY2IwZTc2YTA1MGEwNTcwZjZlYmRmZDJl
Mzc4Y2Q3NzEzYzdhZTc5OS4uZWJlNTM5ZDk1MjFiOWJjMWI1ODUyZmEzNzI5ZDYzNDk1NzU4YzVk
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTE2NDgsOSArMTY0
OCwxMCBAQAogCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2VcXC5tbSQnXSwKIAotICAgICAgICAgICAgIyBXZSB1c2Ug
TG9jYWxpemVkRGF0ZU1hYy5tbSBpbnN0ZWFkIG9mIExvY2FsaXplZERhdGVJQ1UuY3BwLgorICAg
ICAgICAgICAgIyBXZSB1c2UgTG9jYWxpemVkRGF0ZU1hYy5jcHAgd2l0aCBMb2NhbGVNYWMubW0g
aW5zdGVhZCBvZiBMb2NhbGl6ZWREYXRlSUNVLmNwcC4KICAgICAgICAgICAgIFsnZXhjbHVkZScs
ICdwbGF0Zm9ybS90ZXh0L0xvY2FsaXplZERhdGVJQ1VcXC5jcHAkJ10sCi0gICAgICAgICAgICBb
J2luY2x1ZGUnLCAncGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxpemVkRGF0ZU1hY1xcLm1tJCddLAor
ICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hY1xcLm1t
JCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsaXpl
ZERhdGVNYWNcXC5jcHAkJ10sCiAKICAgICAgICAgICAgICMgVGhlIE1hYyB1c2VzIHBsYXRmb3Jt
L21hYy9LaWxsUmluZ01hYy5tbSBpbnN0ZWFkIG9mIHRoZSBkdW1teQogICAgICAgICAgICAgIyBp
bXBsZW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA3OWVjMTY1MzJiNWZhNDYwOWY3OWU5
ZWQ3ZTQ4MDNmZjlmMTZlYjliLi5lYWFmZGYzZmQ1NmFjODlmMzM2NTY4MjI0MmI5MWVlNmQzYjU2
NjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00NDM2LDcgKzQ0MzYsOSBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0
L21hYy9IeXBoZW5hdGlvbk1hYy5tbScsCi0gICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9tYWMv
TG9jYWxpemVkRGF0ZU1hYy5tbScsCisgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9tYWMvTG9j
YWxlTWFjLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbScs
CisgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxpemVkRGF0ZU1hYy5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsaXplZE51bWJlck1hYy5tbScsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9tYWMvU2hhcGVBcmFiaWMuYycsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vdGV4dC9tYWMvU2hhcGVBcmFiaWMuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5oCmluZGV4IDZhNzVjOTk0NTU3ZjU3MGE5OGNiZjdm
NjA5YjQ1NmYzZGNlMjNjNDQuLjRjMzcxZWQ3YTgxZGYzOWNjMmEzNzVjYTgyMDk1MTFjODc3MzRh
NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1h
Yy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5oCkBA
IC0yOCw2MCArMjgsNDYgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBMb2NhbGVX
aW5faAotI2RlZmluZSBMb2NhbGVXaW5faAorI2lmbmRlZiBMb2NhbGVNYWNfaAorI2RlZmluZSBM
b2NhbGVNYWNfaAogCi0jaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworT0JKQ19DTEFTUyBOU0RhdGVGb3Jt
YXR0ZXI7CitPQkpDX0NMQVNTIE5TTG9jYWxlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIERhdGVDb21wb25lbnRzOwotc3RydWN0IERhdGVGb3JtYXRUb2tlbjsKIAotY2xhc3MgTG9j
YWxlV2luIHsKK2NsYXNzIExvY2FsZU1hYyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25Q
dHI8TG9jYWxlV2luPiBjcmVhdGUoTENJRCk7Ci0gICAgc3RhdGljIExvY2FsZVdpbiogY3VycmVu
dExvY2FsZSgpOwotICAgIH5Mb2NhbGVXaW4oKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxMb2Nh
bGVNYWM+IGNyZWF0ZShjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgTG9jYWxlTWFjKiBjdXJy
ZW50TG9jYWxlKCk7CisgICAgfkxvY2FsZU1hYygpOwogICAgIGRvdWJsZSBwYXJzZURhdGUoY29u
c3QgU3RyaW5nJik7CiAgICAgU3RyaW5nIGZvcm1hdERhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMm
KTsKKwogI2lmIEVOQUJMRShDQUxFTkRBUl9QSUNLRVIpCiAgICAgU3RyaW5nIGRhdGVGb3JtYXRU
ZXh0KCk7CiAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIG1vbnRoTGFiZWxzKCk7CiAgICAgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHdlZWtEYXlTaG9ydExhYmVscygpOwotICAgIHVuc2lnbmVkIGZp
cnN0RGF5T2ZXZWVrKCkgeyByZXR1cm4gbV9maXJzdERheU9mV2VlazsgfQorICAgIHVuc2lnbmVk
IGZpcnN0RGF5T2ZXZWVrKCk7CiAjZW5kaWYKIAotICAgIC8vIEZvciB0ZXN0aW5nLgotICAgIGRv
dWJsZSBwYXJzZURhdGUoY29uc3QgU3RyaW5nJiBmb3JtYXQsIGludCBiYXNlWWVhciwgY29uc3Qg
U3RyaW5nJiBpbnB1dCk7Ci0gICAgU3RyaW5nIGZvcm1hdERhdGUoY29uc3QgU3RyaW5nJiBmb3Jt
YXQsIGludCBiYXNlWWVhciwgaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSk7Ci0gICAgc3Rh
dGljIFN0cmluZyBkYXRlRm9ybWF0VGV4dChjb25zdCBTdHJpbmcmIGZvcm1hdCwgY29uc3QgU3Ry
aW5nJiB5ZWFyVGV4dCwgY29uc3QgU3RyaW5nJiBtb250aFRleHQsIGNvbnN0IFN0cmluZyYgZGF5
VGV4dCk7Ci0KIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgTG9jYWxlV2luKExDSUQpOwotICAgIFN0
cmluZyBnZXRMb2NhbGVJbmZvU3RyaW5nKExDVFlQRSk7Ci0gICAgdm9pZCBlbnN1cmVTaG9ydE1v
bnRoTGFiZWxzKCk7Ci0gICAgdm9pZCBlbnN1cmVNb250aExhYmVscygpOwotICAgIHZvaWQgZW5z
dXJlU2hvcnREYXRlVG9rZW5zKCk7Ci0gICAgaW50IHBhcnNlTnVtYmVyT3JNb250aChjb25zdCBT
dHJpbmcmLCB1bnNpZ25lZCYgaW5kZXgpOwotICAgIGRvdWJsZSBwYXJzZURhdGUoY29uc3QgVmVj
dG9yPERhdGVGb3JtYXRUb2tlbj4mLCBpbnQgYmFzZVllYXIsIGNvbnN0IFN0cmluZyYpOwotICAg
IFN0cmluZyBmb3JtYXREYXRlKGNvbnN0IFZlY3RvcjxEYXRlRm9ybWF0VG9rZW4+JiwgaW50IGJh
c2VZZWFyLCBpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5KTsKLSNpZiBFTkFCTEUoQ0FMRU5E
QVJfUElDS0VSKQotICAgIHZvaWQgZW5zdXJlV2Vla0RheVNob3J0TGFiZWxzKCk7Ci0jZW5kaWYK
KyAgICBleHBsaWNpdCBMb2NhbGVNYWMoY29uc3QgU3RyaW5nJik7CisgICAgTlNEYXRlRm9ybWF0
dGVyICpjcmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIoKTsKIAotICAgIExDSUQgbV9sY2lkOwotICAg
IGludCBtX2Jhc2VZZWFyOwotICAgIFZlY3RvcjxEYXRlRm9ybWF0VG9rZW4+IG1fc2hvcnREYXRl
VG9rZW5zOwotICAgIFZlY3RvcjxTdHJpbmc+IG1fc2hvcnRNb250aExhYmVsczsKLSAgICBWZWN0
b3I8U3RyaW5nPiBtX21vbnRoTGFiZWxzOworICAgIFJldGFpblB0cjxOU0xvY2FsZT4gbV9sb2Nh
bGU7CiAjaWYgRU5BQkxFKENBTEVOREFSX1BJQ0tFUikKKyAgICBTdHJpbmcgbV9sb2NhbGl6ZWRE
YXRlRm9ybWF0VGV4dDsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX21vbnRoTGFiZWxzOwogICAgIFZl
Y3RvcjxTdHJpbmc+IG1fd2Vla0RheVNob3J0TGFiZWxzOwotICAgIHVuc2lnbmVkIG1fZmlyc3RE
YXlPZldlZWs7CiAjZW5kaWYKLQogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9tYWMvTG9jYWxlTWFjLm1tCmluZGV4IDA4ODc2ZjlkMzgxMzUwYjhjY2ZkOTUzMmZjMjJi
YjlmNmJhNGJiMjEuLmM3MDk3Y2VjZWZlY2ZjNWNlZjU1NDQyNTM1MDYwNmUyYmJiODZjZmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMubW0KQEAgLTI5
LDEyICsyOSwxNCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMb2Nh
bGl6ZWREYXRlLmgiCisjaW5jbHVkZSAiTG9jYWxlTWFjLmgiCiAKICNpbXBvcnQgPEZvdW5kYXRp
b24vTlNEYXRlRm9ybWF0dGVyLmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL05TTG9jYWxlLmg+Cisj
aW5jbHVkZSAiTG9jYWxpemVkRGF0ZS5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIK
LSNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC00Miw5ICs0NCwzMCBAQCB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBOU0RhdGVGb3JtYXR0
ZXIgKmNyZWF0ZVNob3J0RGF0ZUZvcm1hdHRlcigpCitMb2NhbGVNYWM6OkxvY2FsZU1hYyhjb25z
dCBTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCisgICAgOiBtX2xvY2FsZShbW05TTG9jYWxlIGFs
bG9jXSBpbml0V2l0aExvY2FsZUlkZW50aWZpZXI6bG9jYWxlSWRlbnRpZmllcl0pCit7Cit9CisK
K0xvY2FsZU1hYzo6fkxvY2FsZU1hYygpCit7Cit9CisKK1Bhc3NPd25QdHI8TG9jYWxlTWFjPiBM
b2NhbGVNYWM6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCit7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbGVNYWMobG9jYWxlSWRlbnRpZmllcikpOworfQorCitM
b2NhbGVNYWMqIExvY2FsZU1hYzo6Y3VycmVudExvY2FsZSgpCit7CisgICAgc3RhdGljIExvY2Fs
ZU1hYyogY3VycmVudExvY2FsZSA9IExvY2FsZU1hYzo6Y3JlYXRlKFtOU0xvY2FsZSBjdXJyZW50
TG9jYWxlXSkubGVha1B0cigpOworICAgIHJldHVybiBjdXJyZW50TG9jYWxlOworfQorCitOU0Rh
dGVGb3JtYXR0ZXIqIExvY2FsZU1hYzo6Y3JlYXRlU2hvcnREYXRlRm9ybWF0dGVyKCkKIHsKICAg
ICBOU0RhdGVGb3JtYXR0ZXIgKmZvcm1hdHRlciA9IFtbTlNEYXRlRm9ybWF0dGVyIGFsbG9jXSBp
bml0XTsKKyAgICBbZm9ybWF0dGVyIHNldExvY2FsZTptX2xvY2FsZS5nZXQoKV07CiAgICAgW2Zv
cm1hdHRlciBzZXREYXRlU3R5bGU6TlNEYXRlRm9ybWF0dGVyU2hvcnRTdHlsZV07CiAgICAgW2Zv
cm1hdHRlciBzZXRUaW1lU3R5bGU6TlNEYXRlRm9ybWF0dGVyTm9TdHlsZV07CiAgICAgW2Zvcm1h
dHRlciBzZXRUaW1lWm9uZTpbTlNUaW1lWm9uZSB0aW1lWm9uZVdpdGhBYmJyZXZpYXRpb246QCJV
VEMiXV07CkBAIC01Miw0NCArNzUsMjAgQEAgc3RhdGljIE5TRGF0ZUZvcm1hdHRlciAqY3JlYXRl
U2hvcnREYXRlRm9ybWF0dGVyKCkKICAgICByZXR1cm4gZm9ybWF0dGVyOwogfQogCi1kb3VibGUg
cGFyc2VMb2NhbGl6ZWREYXRlKGNvbnN0IFN0cmluZyYgaW5wdXQsIERhdGVDb21wb25lbnRzOjpU
eXBlIHR5cGUpCitkb3VibGUgTG9jYWxlTWFjOjpwYXJzZURhdGUoY29uc3QgU3RyaW5nJiBpbnB1
dCkKIHsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRl
OiB7Ci0gICAgICAgIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IGZvcm1hdHRlcihBZG9wdE5T
LCBjcmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIoKSk7Ci0gICAgICAgIE5TRGF0ZSAqZGF0ZSA9IFtm
b3JtYXR0ZXIuZ2V0KCkgZGF0ZUZyb21TdHJpbmc6aW5wdXRdOwotICAgICAgICBpZiAoIWRhdGUp
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgcmV0dXJuIFtkYXRlIHRpbWVJbnRlcnZhbFNp
bmNlMTk3MF0gKiBtc1BlclNlY29uZDsKLSAgICB9Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50czo6
RGF0ZVRpbWU6Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50czo6RGF0ZVRpbWVMb2NhbDoKLSAgICBj
YXNlIERhdGVDb21wb25lbnRzOjpNb250aDoKLSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpUaW1l
OgotICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6OldlZWs6Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50
czo6SW52YWxpZDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBudW1lcmljX2xp
bWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVy
PiBmb3JtYXR0ZXIoQWRvcHROUywgY3JlYXRlU2hvcnREYXRlRm9ybWF0dGVyKCkpOworICAgIE5T
RGF0ZSAqZGF0ZSA9IFtmb3JtYXR0ZXIuZ2V0KCkgZGF0ZUZyb21TdHJpbmc6aW5wdXRdOworICAg
IGlmICghZGF0ZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
cXVpZXRfTmFOKCk7CisgICAgcmV0dXJuIFtkYXRlIHRpbWVJbnRlcnZhbFNpbmNlMTk3MF0gKiBt
c1BlclNlY29uZDsKIH0KIAotU3RyaW5nIGZvcm1hdExvY2FsaXplZERhdGUoY29uc3QgRGF0ZUNv
bXBvbmVudHMmIGRhdGVDb21wb25lbnRzKQorU3RyaW5nIExvY2FsZU1hYzo6Zm9ybWF0RGF0ZShj
b25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZUNvbXBvbmVudHMpCiB7Ci0gICAgc3dpdGNoIChkYXRl
Q29tcG9uZW50cy50eXBlKCkpIHsKLSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlOiB7Ci0g
ICAgICAgIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IGZvcm1hdHRlcihBZG9wdE5TLCBjcmVh
dGVTaG9ydERhdGVGb3JtYXR0ZXIoKSk7Ci0gICAgICAgIE5TVGltZUludGVydmFsIGludGVydmFs
ID0gZGF0ZUNvbXBvbmVudHMubWlsbGlzZWNvbmRzU2luY2VFcG9jaCgpIC8gbXNQZXJTZWNvbmQ7
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoW2Zvcm1hdHRlci5nZXQoKSBzdHJpbmdGcm9tRGF0ZTpb
TlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFsU2luY2UxOTcwOmludGVydmFsXV0pOwotICAgIH0K
LSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlVGltZToKLSAgICBjYXNlIERhdGVDb21wb25l
bnRzOjpEYXRlVGltZUxvY2FsOgotICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6Ok1vbnRoOgotICAg
IGNhc2UgRGF0ZUNvbXBvbmVudHM6OlRpbWU6Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50czo6V2Vl
azoKLSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpJbnZhbGlkOgotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgcmV0dXJuIFN0cmluZygpOworICAgIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+
IGZvcm1hdHRlcihBZG9wdE5TLCBjcmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIoKSk7CisgICAgTlNU
aW1lSW50ZXJ2YWwgaW50ZXJ2YWwgPSBkYXRlQ29tcG9uZW50cy5taWxsaXNlY29uZHNTaW5jZUVw
b2NoKCkgLyBtc1BlclNlY29uZDsKKyAgICByZXR1cm4gU3RyaW5nKFtmb3JtYXR0ZXIuZ2V0KCkg
c3RyaW5nRnJvbURhdGU6W05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDppbnRl
cnZhbF1dKTsKIH0KIAogI2lmIEVOQUJMRShDQUxFTkRBUl9QSUNLRVIpCkBAIC0xNDAsNjIgKzEz
OSw1OSBAQCBzdGF0aWMgU3RyaW5nIGxvY2FsaXplRGF0ZUZvcm1hdChjb25zdCBTdHJpbmcmIGZv
cm1hdCkKICAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBsb2NhbGl6
ZWREYXRlRm9ybWF0VGV4dCgpCitTdHJpbmcgTG9jYWxlTWFjOjpkYXRlRm9ybWF0VGV4dCgpCiB7
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHRleHQsICgpKTsKLSAgICBpZiAoIXRl
eHQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdGV4dDsKKyAgICBpZiAoIW1fbG9jYWxpemVk
RGF0ZUZvcm1hdFRleHQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9sb2NhbGl6ZWREYXRl
Rm9ybWF0VGV4dDsKICAgICBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBmb3JtYXR0ZXIoQWRv
cHROUywgY3JlYXRlU2hvcnREYXRlRm9ybWF0dGVyKCkpOwotICAgIHRleHQgPSBsb2NhbGl6ZURh
dGVGb3JtYXQoU3RyaW5nKFtmb3JtYXR0ZXIuZ2V0KCkgZGF0ZUZvcm1hdF0pKTsKLSAgICByZXR1
cm4gdGV4dDsKKyAgICBtX2xvY2FsaXplZERhdGVGb3JtYXRUZXh0ID0gbG9jYWxpemVEYXRlRm9y
bWF0KFN0cmluZyhbZm9ybWF0dGVyLmdldCgpIGRhdGVGb3JtYXRdKSk7CisgICAgcmV0dXJuICBt
X2xvY2FsaXplZERhdGVGb3JtYXRUZXh0OwogfQogCi1jb25zdCBWZWN0b3I8U3RyaW5nPiYgbW9u
dGhMYWJlbHMoKQorY29uc3QgVmVjdG9yPFN0cmluZz4mIExvY2FsZU1hYzo6bW9udGhMYWJlbHMo
KQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPFN0cmluZz4sIGxhYmVscywgKCkp
OwotICAgIGlmICghbGFiZWxzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGxhYmVsczsKLSAg
ICBsYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDEyKTsKKyAgICBpZiAoIW1fbW9udGhMYWJlbHMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gbV9tb250aExhYmVsczsKKyAgICBtX21vbnRoTGFiZWxz
LnJlc2VydmVDYXBhY2l0eSgxMik7CiAgICAgUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gZm9y
bWF0dGVyKEFkb3B0TlMsIGNyZWF0ZVNob3J0RGF0ZUZvcm1hdHRlcigpKTsKICAgICBOU0FycmF5
ICphcnJheSA9IFtmb3JtYXR0ZXIuZ2V0KCkgbW9udGhTeW1ib2xzXTsKICAgICBpZiAoW2FycmF5
IGNvdW50XSA9PSAxMikgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTI7ICsr
aSkKLSAgICAgICAgICAgIGxhYmVscy5hcHBlbmQoU3RyaW5nKFthcnJheSBvYmplY3RBdEluZGV4
OmldKSk7Ci0gICAgICAgIHJldHVybiBsYWJlbHM7CisgICAgICAgICAgICBtX21vbnRoTGFiZWxz
LmFwcGVuZChTdHJpbmcoW2FycmF5IG9iamVjdEF0SW5kZXg6aV0pKTsKKyAgICAgICAgcmV0dXJu
IG1fbW9udGhMYWJlbHM7CiAgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZf
QVJSQVlfTEVOR1RIKFdURjo6bW9udGhGdWxsTmFtZSk7ICsraSkKLSAgICAgICAgbGFiZWxzLmFw
cGVuZChXVEY6Om1vbnRoRnVsbE5hbWVbaV0pOwotICAgIHJldHVybiBsYWJlbHM7CisgICAgICAg
IG1fbW9udGhMYWJlbHMuYXBwZW5kKFdURjo6bW9udGhGdWxsTmFtZVtpXSk7CisgICAgcmV0dXJu
IG1fbW9udGhMYWJlbHM7CiB9CiAKLWNvbnN0IFZlY3RvcjxTdHJpbmc+JiB3ZWVrRGF5U2hvcnRM
YWJlbHMoKQorY29uc3QgVmVjdG9yPFN0cmluZz4mIExvY2FsZU1hYzo6d2Vla0RheVNob3J0TGFi
ZWxzKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxTdHJpbmc+LCBsYWJlbHMs
ICgpKTsKLSAgICBpZiAoIWxhYmVscy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBsYWJlbHM7
Ci0gICAgbGFiZWxzLnJlc2VydmVDYXBhY2l0eSg3KTsKKyAgICBpZiAoIW1fd2Vla0RheVNob3J0
TGFiZWxzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG1fd2Vla0RheVNob3J0TGFiZWxzOwor
ICAgIG1fd2Vla0RheVNob3J0TGFiZWxzLnJlc2VydmVDYXBhY2l0eSg3KTsKICAgICBSZXRhaW5Q
dHI8TlNEYXRlRm9ybWF0dGVyPiBmb3JtYXR0ZXIoQWRvcHROUywgY3JlYXRlU2hvcnREYXRlRm9y
bWF0dGVyKCkpOwogICAgIE5TQXJyYXkgKmFycmF5ID0gW2Zvcm1hdHRlci5nZXQoKSBzaG9ydFdl
ZWtkYXlTeW1ib2xzXTsKICAgICBpZiAoW2FycmF5IGNvdW50XSA9PSA3KSB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCA3OyArK2kpCi0gICAgICAgICAgICBsYWJlbHMuYXBwZW5k
KFN0cmluZyhbYXJyYXkgb2JqZWN0QXRJbmRleDppXSkpOwotICAgICAgICByZXR1cm4gbGFiZWxz
OworICAgICAgICAgICAgbV93ZWVrRGF5U2hvcnRMYWJlbHMuYXBwZW5kKFN0cmluZyhbYXJyYXkg
b2JqZWN0QXRJbmRleDppXSkpOworICAgICAgICByZXR1cm4gbV93ZWVrRGF5U2hvcnRMYWJlbHM7
CiAgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKFdU
Rjo6d2Vla2RheU5hbWUpOyArK2kpIHsKICAgICAgICAgLy8gd2Vla2RheU5hbWUgc3RhcnRzIHdp
dGggTW9uZGF5LgotICAgICAgICBsYWJlbHMuYXBwZW5kKFdURjo6d2Vla2RheU5hbWVbKGkgKyA2
KSAlIDddKTsKKyAgICAgICAgbV93ZWVrRGF5U2hvcnRMYWJlbHMuYXBwZW5kKFdURjo6d2Vla2Rh
eU5hbWVbKGkgKyA2KSAlIDddKTsKICAgICB9Ci0gICAgcmV0dXJuIGxhYmVsczsKKyAgICByZXR1
cm4gbV93ZWVrRGF5U2hvcnRMYWJlbHM7CiB9CiAKLXVuc2lnbmVkIGZpcnN0RGF5T2ZXZWVrKCkK
K3Vuc2lnbmVkIExvY2FsZU1hYzo6Zmlyc3REYXlPZldlZWsoKQogewogICAgIFJldGFpblB0cjxO
U0NhbGVuZGFyPiBjYWxlbmRhcihBZG9wdE5TLCBbW05TQ2FsZW5kYXIgYWxsb2NdIGluaXRXaXRo
Q2FsZW5kYXJJZGVudGlmaWVyOk5TR3JlZ29yaWFuQ2FsZW5kYXJdKTsKKyAgICBbY2FsZW5kYXIu
Z2V0KCkgc2V0TG9jYWxlOm1fbG9jYWxlLmdldCgpXTsKICAgICAvLyBUaGUgZG9jdW1lbnQgZm9y
IE5TQ2FsZW5kYXIgLSBmaXJzdFdlZWtkYXkgZG9lc24ndCBoYXZlIGFuIGV4cGxhbmF0aW9uIG9m
CiAgICAgLy8gZmlyc3RXZWVrZGF5IHZhbHVlLiBXZSBjYW4gZ3Vlc3MgaXQgYnkgdGhlIGRvY3Vt
ZW50IG9mIE5TRGF0ZUNvbXBvbmVudHMgLQogICAgIC8vIHdlZWtEYXksIHNvIGl0IGNhbiBiZSAx
IHRocm91Z2ggNyBhbmQgMSBpcyBTdW5kYXkuCiAgICAgcmV0dXJuIFtjYWxlbmRhci5nZXQoKSBm
aXJzdFdlZWtkYXldIC0gMTsKIH0KICNlbmRpZgotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGl6ZWREYXRlTWFjLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsaXplZERhdGVNYWMuY3BwCmluZGV4IGJkOGYzNjdm
M2E1ZGMxYjg5YzVkNzhlMDJlNWUzNDdhZmM4NDdhYjUuLmU2N2M5MzgxN2EwMTc1Njc3MGZlMGU4
M2M3ZmZlZTQ5YzZlMjZhY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvbWFjL0xvY2FsaXplZERhdGVNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvbWFjL0xvY2FsaXplZERhdGVNYWMuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkRGF0ZS5oIgogCi0jaW5jbHVkZSAiTG9j
YWxlV2luLmgiCisjaW5jbHVkZSAiTG9jYWxlTWFjLmgiCiAjaW5jbHVkZSA8bGltaXRzPgogCiB1
c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtNDIsNyArNDIsNyBAQCBkb3VibGUgcGFyc2VMb2NhbGl6
ZWREYXRlKGNvbnN0IFN0cmluZyYgaW5wdXQsIERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUpCiB7
CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBEYXRlQ29tcG9uZW50czo6RGF0ZToKLSAg
ICAgICAgcmV0dXJuIExvY2FsZVdpbjo6Y3VycmVudExvY2FsZSgpLT5wYXJzZURhdGUoaW5wdXQp
OworICAgICAgICByZXR1cm4gTG9jYWxlTWFjOjpjdXJyZW50TG9jYWxlKCktPnBhcnNlRGF0ZShp
bnB1dCk7CiAgICAgY2FzZSBEYXRlQ29tcG9uZW50czo6RGF0ZVRpbWU6CiAgICAgY2FzZSBEYXRl
Q29tcG9uZW50czo6RGF0ZVRpbWVMb2NhbDoKICAgICBjYXNlIERhdGVDb21wb25lbnRzOjpNb250
aDoKQEAgLTU4LDcgKzU4LDcgQEAgU3RyaW5nIGZvcm1hdExvY2FsaXplZERhdGUoY29uc3QgRGF0
ZUNvbXBvbmVudHMmIGRhdGVDb21wb25lbnRzKQogewogICAgIHN3aXRjaCAoZGF0ZUNvbXBvbmVu
dHMudHlwZSgpKSB7CiAgICAgY2FzZSBEYXRlQ29tcG9uZW50czo6RGF0ZToKLSAgICAgICAgcmV0
dXJuIExvY2FsZVdpbjo6Y3VycmVudExvY2FsZSgpLT5mb3JtYXREYXRlKGRhdGVDb21wb25lbnRz
KTsKKyAgICAgICAgcmV0dXJuIExvY2FsZU1hYzo6Y3VycmVudExvY2FsZSgpLT5mb3JtYXREYXRl
KGRhdGVDb21wb25lbnRzKTsKICAgICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlVGltZToKICAg
ICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlVGltZUxvY2FsOgogICAgIGNhc2UgRGF0ZUNvbXBv
bmVudHM6Ok1vbnRoOgpAQCAtNzMsMjIgKzczLDIyIEBAIFN0cmluZyBmb3JtYXRMb2NhbGl6ZWRE
YXRlKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlQ29tcG9uZW50cykKICNpZiBFTkFCTEUoQ0FM
RU5EQVJfUElDS0VSKQogU3RyaW5nIGxvY2FsaXplZERhdGVGb3JtYXRUZXh0KCkKIHsKLSAgICBy
ZXR1cm4gTG9jYWxlV2luOjpjdXJyZW50TG9jYWxlKCktPmRhdGVGb3JtYXRUZXh0KCk7CisgICAg
cmV0dXJuIExvY2FsZU1hYzo6Y3VycmVudExvY2FsZSgpLT5kYXRlRm9ybWF0VGV4dCgpOwogfQog
CiBjb25zdCBWZWN0b3I8U3RyaW5nPiYgbW9udGhMYWJlbHMoKQogewotICAgIHJldHVybiBMb2Nh
bGVXaW46OmN1cnJlbnRMb2NhbGUoKS0+bW9udGhMYWJlbHMoKTsKKyAgICByZXR1cm4gTG9jYWxl
TWFjOjpjdXJyZW50TG9jYWxlKCktPm1vbnRoTGFiZWxzKCk7CiB9CiAKIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiB3ZWVrRGF5U2hvcnRMYWJlbHMoKQogewotICAgIHJldHVybiBMb2NhbGVXaW46OmN1
cnJlbnRMb2NhbGUoKS0+d2Vla0RheVNob3J0TGFiZWxzKCk7CisgICAgcmV0dXJuIExvY2FsZU1h
Yzo6Y3VycmVudExvY2FsZSgpLT53ZWVrRGF5U2hvcnRMYWJlbHMoKTsKIH0KIAogdW5zaWduZWQg
Zmlyc3REYXlPZldlZWsoKQogewotICAgIHJldHVybiBMb2NhbGVXaW46OmN1cnJlbnRMb2NhbGUo
KS0+Zmlyc3REYXlPZldlZWsoKTsKKyAgICByZXR1cm4gTG9jYWxlTWFjOjpjdXJyZW50TG9jYWxl
KCktPmZpcnN0RGF5T2ZXZWVrKCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxpemVkRGF0ZU1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsaXplZERhdGVNYWMubW0KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDA4ODc2ZjlkMzgxMzUwYjhjY2ZkOTUzMmZjMjJiYjlmNmJhNGJiMjEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxpemVkRGF0ZU1hYy5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDIwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxvY2FsaXpl
ZERhdGUuaCIKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0RhdGVGb3JtYXR0ZXIuaD4KLSNpbmNs
dWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHd0
Zi9EYXRlTWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotc3RhdGljIE5TRGF0ZUZvcm1hdHRlciAqY3JlYXRlU2hvcnREYXRlRm9y
bWF0dGVyKCkKLXsKLSAgICBOU0RhdGVGb3JtYXR0ZXIgKmZvcm1hdHRlciA9IFtbTlNEYXRlRm9y
bWF0dGVyIGFsbG9jXSBpbml0XTsKLSAgICBbZm9ybWF0dGVyIHNldERhdGVTdHlsZTpOU0RhdGVG
b3JtYXR0ZXJTaG9ydFN0eWxlXTsKLSAgICBbZm9ybWF0dGVyIHNldFRpbWVTdHlsZTpOU0RhdGVG
b3JtYXR0ZXJOb1N0eWxlXTsKLSAgICBbZm9ybWF0dGVyIHNldFRpbWVab25lOltOU1RpbWVab25l
IHRpbWVab25lV2l0aEFiYnJldmlhdGlvbjpAIlVUQyJdXTsKLSAgICBbZm9ybWF0dGVyIHNldENh
bGVuZGFyOltbTlNDYWxlbmRhciBhbGxvY10gaW5pdFdpdGhDYWxlbmRhcklkZW50aWZpZXI6TlNH
cmVnb3JpYW5DYWxlbmRhcl1dOwotICAgIHJldHVybiBmb3JtYXR0ZXI7Ci19Ci0KLWRvdWJsZSBw
YXJzZUxvY2FsaXplZERhdGUoY29uc3QgU3RyaW5nJiBpbnB1dCwgRGF0ZUNvbXBvbmVudHM6OlR5
cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIERhdGVDb21wb25lbnRz
OjpEYXRlOiB7Ci0gICAgICAgIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IGZvcm1hdHRlcihB
ZG9wdE5TLCBjcmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIoKSk7Ci0gICAgICAgIE5TRGF0ZSAqZGF0
ZSA9IFtmb3JtYXR0ZXIuZ2V0KCkgZGF0ZUZyb21TdHJpbmc6aW5wdXRdOwotICAgICAgICBpZiAo
IWRhdGUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgcmV0dXJuIFtkYXRlIHRpbWVJbnRl
cnZhbFNpbmNlMTk3MF0gKiBtc1BlclNlY29uZDsKLSAgICB9Ci0gICAgY2FzZSBEYXRlQ29tcG9u
ZW50czo6RGF0ZVRpbWU6Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50czo6RGF0ZVRpbWVMb2NhbDoK
LSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpNb250aDoKLSAgICBjYXNlIERhdGVDb21wb25lbnRz
OjpUaW1lOgotICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6OldlZWs6Ci0gICAgY2FzZSBEYXRlQ29t
cG9uZW50czo6SW52YWxpZDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBudW1l
cmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLX0KLQotU3RyaW5nIGZvcm1hdExvY2Fs
aXplZERhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGVDb21wb25lbnRzKQotewotICAgIHN3
aXRjaCAoZGF0ZUNvbXBvbmVudHMudHlwZSgpKSB7Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50czo6
RGF0ZTogewotICAgICAgICBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBmb3JtYXR0ZXIoQWRv
cHROUywgY3JlYXRlU2hvcnREYXRlRm9ybWF0dGVyKCkpOwotICAgICAgICBOU1RpbWVJbnRlcnZh
bCBpbnRlcnZhbCA9IGRhdGVDb21wb25lbnRzLm1pbGxpc2Vjb25kc1NpbmNlRXBvY2goKSAvIG1z
UGVyU2Vjb25kOwotICAgICAgICByZXR1cm4gU3RyaW5nKFtmb3JtYXR0ZXIuZ2V0KCkgc3RyaW5n
RnJvbURhdGU6W05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDppbnRlcnZhbF1d
KTsKLSAgICB9Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50czo6RGF0ZVRpbWU6Ci0gICAgY2FzZSBE
YXRlQ29tcG9uZW50czo6RGF0ZVRpbWVMb2NhbDoKLSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpN
b250aDoKLSAgICBjYXNlIERhdGVDb21wb25lbnRzOjpUaW1lOgotICAgIGNhc2UgRGF0ZUNvbXBv
bmVudHM6OldlZWs6Ci0gICAgY2FzZSBEYXRlQ29tcG9uZW50czo6SW52YWxpZDoKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotI2lmIEVOQUJMRShDQUxF
TkRBUl9QSUNLRVIpCi1zdGF0aWMgYm9vbCBpc1llYXJTeW1ib2woVUNoYXIgbGV0dGVyKSB7IHJl
dHVybiBsZXR0ZXIgPT0gJ3knIHx8IGxldHRlciA9PSAnWScgfHwgbGV0dGVyID09ICd1JzsgfQot
c3RhdGljIGJvb2wgaXNNb250aFN5bWJvbChVQ2hhciBsZXR0ZXIpIHsgcmV0dXJuIGxldHRlciA9
PSAnTScgfHwgbGV0dGVyID09ICdMJzsgfQotc3RhdGljIGJvb2wgaXNEYXlTeW1ib2woVUNoYXIg
bGV0dGVyKSB7IHJldHVybiBsZXR0ZXIgPT0gJ2QnOyB9Ci0KLS8vIGh0dHA6Ly91bmljb2RlLm9y
Zy9yZXBvcnRzL3RyMzUvdHIzNS02Lmh0bWwjRGF0ZV9Gb3JtYXRfUGF0dGVybnMKLXN0YXRpYyBT
dHJpbmcgbG9jYWxpemVEYXRlRm9ybWF0KGNvbnN0IFN0cmluZyYgZm9ybWF0KQotewotICAgIFN0
cmluZyB5ZWFyVGV4dCA9IGRhdGVGb3JtYXRZZWFyVGV4dCgpLmlzRW1wdHkoKSA/ICJZZWFyIiA6
IGRhdGVGb3JtYXRZZWFyVGV4dCgpOwotICAgIFN0cmluZyBtb250aFRleHQgPSBkYXRlRm9ybWF0
TW9udGhUZXh0KCkuaXNFbXB0eSgpID8gIk1vbnRoIiA6IGRhdGVGb3JtYXRNb250aFRleHQoKTsK
LSAgICBTdHJpbmcgZGF5VGV4dCA9IGRhdGVGb3JtYXREYXlJbk1vbnRoVGV4dCgpLmlzRW1wdHko
KSA/ICJEYXkiIDogZGF0ZUZvcm1hdERheUluTW9udGhUZXh0KCk7Ci0gICAgU3RyaW5nQnVpbGRl
ciBidWZmZXI7Ci0gICAgYm9vbCBpblF1b3RlID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGZvcm1hdC5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFVDaGFyIGNoID0gZm9y
bWF0W2ldOwotICAgICAgICBpZiAoaW5RdW90ZSkgewotICAgICAgICAgICAgaWYgKGNoID09ICdc
JycpIHsKLSAgICAgICAgICAgICAgICBpblF1b3RlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKGkpOwotICAgICAgICAgICAgICAgIGlmIChmb3JtYXRbaSAtIDFdID09ICdcJycpCi0g
ICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoJ1wnJyk7Ci0gICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGNoKTsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNoID09ICdcJycpIHsKLSAgICAgICAgICAg
IGluUXVvdGUgPSB0cnVlOwotICAgICAgICAgICAgaWYgKGkgPiAwICYmIGZvcm1hdFtpIC0gMV0g
PT0gJ1wnJykKLSAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGNoKTsKLSAgICAgICAgfSBl
bHNlIGlmIChpc1llYXJTeW1ib2woY2gpKSB7Ci0gICAgICAgICAgICBpZiAoaSA+IDAgJiYgZm9y
bWF0W2kgLSAxXSA9PSBjaCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGJ1ZmZlci5hcHBlbmQoeWVhclRleHQpOwotICAgICAgICB9IGVsc2UgaWYgKGlzTW9udGhTeW1i
b2woY2gpKSB7Ci0gICAgICAgICAgICBpZiAoaSA+IDAgJiYgZm9ybWF0W2kgLSAxXSA9PSBjaCkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQobW9u
dGhUZXh0KTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0RheVN5bWJvbChjaCkpIHsKLSAgICAgICAg
ICAgIGlmIChpID4gMCAmJiBmb3JtYXRbaSAtIDFdID09IGNoKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChkYXlUZXh0KTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBidWZmZXIuYXBwZW5kKGNoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1
ZmZlci50b1N0cmluZygpOwotfQotCi1TdHJpbmcgbG9jYWxpemVkRGF0ZUZvcm1hdFRleHQoKQot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0ZXh0LCAoKSk7Ci0gICAgaWYgKCF0
ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRleHQ7Ci0gICAgUmV0YWluUHRyPE5TRGF0
ZUZvcm1hdHRlcj4gZm9ybWF0dGVyKEFkb3B0TlMsIGNyZWF0ZVNob3J0RGF0ZUZvcm1hdHRlcigp
KTsKLSAgICB0ZXh0ID0gbG9jYWxpemVEYXRlRm9ybWF0KFN0cmluZyhbZm9ybWF0dGVyLmdldCgp
IGRhdGVGb3JtYXRdKSk7Ci0gICAgcmV0dXJuIHRleHQ7Ci19Ci0KLWNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBtb250aExhYmVscygpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8U3Ry
aW5nPiwgbGFiZWxzLCAoKSk7Ci0gICAgaWYgKCFsYWJlbHMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gbGFiZWxzOwotICAgIGxhYmVscy5yZXNlcnZlQ2FwYWNpdHkoMTIpOwotICAgIFJldGFp
blB0cjxOU0RhdGVGb3JtYXR0ZXI+IGZvcm1hdHRlcihBZG9wdE5TLCBjcmVhdGVTaG9ydERhdGVG
b3JtYXR0ZXIoKSk7Ci0gICAgTlNBcnJheSAqYXJyYXkgPSBbZm9ybWF0dGVyLmdldCgpIG1vbnRo
U3ltYm9sc107Ci0gICAgaWYgKFthcnJheSBjb3VudF0gPT0gMTIpIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDEyOyArK2kpCi0gICAgICAgICAgICBsYWJlbHMuYXBwZW5kKFN0
cmluZyhbYXJyYXkgb2JqZWN0QXRJbmRleDppXSkpOwotICAgICAgICByZXR1cm4gbGFiZWxzOwot
ICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChXVEY6
Om1vbnRoRnVsbE5hbWUpOyArK2kpCi0gICAgICAgIGxhYmVscy5hcHBlbmQoV1RGOjptb250aEZ1
bGxOYW1lW2ldKTsKLSAgICByZXR1cm4gbGFiZWxzOwotfQotCi1jb25zdCBWZWN0b3I8U3RyaW5n
PiYgd2Vla0RheVNob3J0TGFiZWxzKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3Rv
cjxTdHJpbmc+LCBsYWJlbHMsICgpKTsKLSAgICBpZiAoIWxhYmVscy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBsYWJlbHM7Ci0gICAgbGFiZWxzLnJlc2VydmVDYXBhY2l0eSg3KTsKLSAgICBS
ZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBmb3JtYXR0ZXIoQWRvcHROUywgY3JlYXRlU2hvcnRE
YXRlRm9ybWF0dGVyKCkpOwotICAgIE5TQXJyYXkgKmFycmF5ID0gW2Zvcm1hdHRlci5nZXQoKSBz
aG9ydFdlZWtkYXlTeW1ib2xzXTsKLSAgICBpZiAoW2FycmF5IGNvdW50XSA9PSA3KSB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA3OyArK2kpCi0gICAgICAgICAgICBsYWJlbHMu
YXBwZW5kKFN0cmluZyhbYXJyYXkgb2JqZWN0QXRJbmRleDppXSkpOwotICAgICAgICByZXR1cm4g
bGFiZWxzOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xF
TkdUSChXVEY6OndlZWtkYXlOYW1lKTsgKytpKSB7Ci0gICAgICAgIC8vIHdlZWtkYXlOYW1lIHN0
YXJ0cyB3aXRoIE1vbmRheS4KLSAgICAgICAgbGFiZWxzLmFwcGVuZChXVEY6OndlZWtkYXlOYW1l
WyhpICsgNikgJSA3XSk7Ci0gICAgfQotICAgIHJldHVybiBsYWJlbHM7Ci19Ci0KLXVuc2lnbmVk
IGZpcnN0RGF5T2ZXZWVrKCkKLXsKLSAgICBSZXRhaW5QdHI8TlNDYWxlbmRhcj4gY2FsZW5kYXIo
QWRvcHROUywgW1tOU0NhbGVuZGFyIGFsbG9jXSBpbml0V2l0aENhbGVuZGFySWRlbnRpZmllcjpO
U0dyZWdvcmlhbkNhbGVuZGFyXSk7Ci0gICAgLy8gVGhlIGRvY3VtZW50IGZvciBOU0NhbGVuZGFy
IC0gZmlyc3RXZWVrZGF5IGRvZXNuJ3QgaGF2ZSBhbiBleHBsYW5hdGlvbiBvZgotICAgIC8vIGZp
cnN0V2Vla2RheSB2YWx1ZS4gV2UgY2FuIGd1ZXNzIGl0IGJ5IHRoZSBkb2N1bWVudCBvZiBOU0Rh
dGVDb21wb25lbnRzIC0KLSAgICAvLyB3ZWVrRGF5LCBzbyBpdCBjYW4gYmUgMSB0aHJvdWdoIDcg
YW5kIDEgaXMgU3VuZGF5LgotICAgIHJldHVybiBbY2FsZW5kYXIuZ2V0KCkgZmlyc3RXZWVrZGF5
XSAtIDE7Ci19Ci0jZW5kaWYKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXgg
N2IzZTY4YzhiODJhZmVlMTFkMThhYTcyMGY2ODllNGYyZTY1MTU0YS4uNDRiOTgzYzc2ZTgzZGRj
MWQ1M2UwOTk3NWNjNjc5ZmE2NmQ3YzQ3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CkBAIC0xODAsNiArMTgwLDExIEBACiAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdl
U2VyaWFsaXplclRlc3QuY3BwJywKICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgfV0s
CisgICAgICAgICAgICBbJ09TPT0ibWFjIicsIHsKKyAgICAgICAgICAgICAgICAnd2Via2l0X3Vu
aXR0ZXN0X2ZpbGVzJzogWworICAgICAgICAgICAgICAgICAgICAndGVzdHMvTG9jYWxlTWFjVGVz
dC5jcHAnLAorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICB9XSwKICAgICAgICAgICAg
IFsnT1MhPSJtYWMiJywgewogICAgICAgICAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMn
OiBbCiAgICAgICAgICAgICAgICAgICAgICMgTWFjIHVzZXMgU2Nyb2xsQW5pbWF0b3JNYWMgaW5z
dGVhZCBvZiBTY3JvbGxBbmltYXRvck5vbmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0xvY2FsZU1hY1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9Mb2NhbGVNYWNUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNTNiODNjN2E5MTlhNTdjNTQ4NmNj
MmQ0MDZkMTViOWY4OTk3MDU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9Mb2NhbGVNYWNUZXN0LmNwcApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMb2NhbGVNYWMuaCIKKwor
I2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNp
bmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY2xhc3MgTG9jYWxlTWFjVGVzdCA6IHB1Ymxp
YyA6OnRlc3Rpbmc6OlRlc3QgeworcHJvdGVjdGVkOgorICAgIGVudW0geworICAgICAgICBKYW51
YXJ5ID0gMCwgRmVicnVhcnksIE1hcmNoLAorICAgICAgICBBcHJpbCwgTWF5LCBKdW5lLAorICAg
ICAgICBKdWx5LCBBdWd1c3QsIFNlcHRlbWJlciwKKyAgICAgICAgT2N0b2JlciwgTm92ZW1iZXIs
IERlY2VtYmVyLAorICAgIH07CisKKyAgICBlbnVtIHsKKyAgICAgICAgU3VuZGF5ID0gMCwgTW9u
ZGF5LCBUdWVzZGF5LAorICAgICAgICBXZWRuZXNkYXksIFRodXJzZGF5LCBGcmlkYXksCisgICAg
ICAgIFNhdHVyZGF5LAorICAgIH07CisKKyAgICBEYXRlQ29tcG9uZW50cyBkYXRlQ29tcG9uZW50
cyhpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5KQorICAgIHsKKyAgICAgICAgRGF0ZUNvbXBv
bmVudHMgZGF0ZTsKKyAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0
ZShtc0ZvckRhdGUoeWVhciwgbW9udGgsIGRheSkpOworICAgICAgICByZXR1cm4gZGF0ZTsKKyAg
ICB9CisKKyAgICBkb3VibGUgbXNGb3JEYXRlKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXkp
CisgICAgeworICAgICAgICByZXR1cm4gZGF0ZVRvRGF5c0Zyb20xOTcwKHllYXIsIG1vbnRoLCBk
YXkpICogbXNQZXJEYXk7CisgICAgfQorCisgICAgU3RyaW5nIGZvcm1hdERhdGUoY29uc3QgU3Ry
aW5nJiBsb2NhbGVTdHJpbmcsIGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXkpCisgICAgewor
ICAgICAgICBPd25QdHI8TG9jYWxlTWFjPiBsb2NhbGUgPSBMb2NhbGVNYWM6OmNyZWF0ZShsb2Nh
bGVTdHJpbmcpOworICAgICAgICByZXR1cm4gbG9jYWxlLT5mb3JtYXREYXRlKGRhdGVDb21wb25l
bnRzKHllYXIsIG1vbnRoLCBkYXkpKTsKKyAgICB9CisKKyAgICBkb3VibGUgcGFyc2VEYXRlKGNv
bnN0IFN0cmluZyYgbG9jYWxlU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRhdGVTdHJpbmcpCisgICAg
eworICAgICAgICBPd25QdHI8TG9jYWxlTWFjPiBsb2NhbGUgPSBMb2NhbGVNYWM6OmNyZWF0ZShs
b2NhbGVTdHJpbmcpOworICAgICAgICByZXR1cm4gbG9jYWxlLT5wYXJzZURhdGUoZGF0ZVN0cmlu
Zyk7CisgICAgfQorCisjaWYgRU5BQkxFKENBTEVOREFSX1BJQ0tFUikKKyAgICBTdHJpbmcgZGF0
ZUZvcm1hdFRleHQoY29uc3QgU3RyaW5nJiBsb2NhbGVTdHJpbmcpCisgICAgeworICAgICAgICBP
d25QdHI8TG9jYWxlTWFjPiBsb2NhbGUgPSBMb2NhbGVNYWM6OmNyZWF0ZShsb2NhbGVTdHJpbmcp
OworICAgICAgICByZXR1cm4gbG9jYWxlLT5kYXRlRm9ybWF0VGV4dCgpOworICAgIH0KKworICAg
IHVuc2lnbmVkIGZpcnN0RGF5T2ZXZWVrKGNvbnN0IFN0cmluZyYgbG9jYWxlU3RyaW5nKQorICAg
IHsKKyAgICAgICAgT3duUHRyPExvY2FsZU1hYz4gbG9jYWxlID0gTG9jYWxlTWFjOjpjcmVhdGUo
bG9jYWxlU3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsZS0+Zmlyc3REYXlPZldlZWsoKTsK
KyAgICB9CisKKyAgICBTdHJpbmcgbW9udGhMYWJlbChjb25zdCBTdHJpbmcmIGxvY2FsZVN0cmlu
ZywgdW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBPd25QdHI8TG9jYWxlTWFjPiBsb2Nh
bGUgPSBMb2NhbGVNYWM6OmNyZWF0ZShsb2NhbGVTdHJpbmcpOworICAgICAgICByZXR1cm4gbG9j
YWxlLT5tb250aExhYmVscygpW2luZGV4XTsKKyAgICB9CisKKyAgICBTdHJpbmcgd2Vla0RheVNo
b3J0TGFiZWwoY29uc3QgU3RyaW5nJiBsb2NhbGVTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQorICAg
IHsKKyAgICAgICAgT3duUHRyPExvY2FsZU1hYz4gbG9jYWxlID0gTG9jYWxlTWFjOjpjcmVhdGUo
bG9jYWxlU3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsZS0+d2Vla0RheVNob3J0TGFiZWxz
KClbaW5kZXhdOworICAgIH0KKyNlbmRpZgorfTsKKworVEVTVF9GKExvY2FsZU1hY1Rlc3QsIGZv
cm1hdERhdGUpCit7CisgICAgRVhQRUNUX1NUUkVRKCI0LzI3LzA1IiwgZm9ybWF0RGF0ZSgiZW5f
VVMiLCAyMDA1LCBBcHJpbCwgMjcpLnV0ZjgoKS5kYXRhKCkpOworICAgIEVYUEVDVF9TVFJFUSgi
MjcvMDQvMDUiLCBmb3JtYXREYXRlKCJmcl9GUiIsIDIwMDUsIEFwcmlsLCAyNykudXRmOCgpLmRh
dGEoKSk7CisgICAgRVhQRUNUX1NUUkVRKCIwNS8wNC8yNyIsIGZvcm1hdERhdGUoImphX0pQIiwg
MjAwNSwgQXByaWwsIDI3KS51dGY4KCkuZGF0YSgpKTsKK30KKworVEVTVF9GKExvY2FsZU1hY1Rl
c3QsIHBhcnNlRGF0ZSkKK3sKKyAgICBFWFBFQ1RfRVEobXNGb3JEYXRlKDIwMDUsIEFwcmlsLCAy
NyksIHBhcnNlRGF0ZSgiZW5fVVMiLCAiQXByaWwgMjcsIDIwMDUiKSk7CisgICAgRVhQRUNUX0VR
KG1zRm9yRGF0ZSgyMDA1LCBBcHJpbCwgMjcpLCBwYXJzZURhdGUoImZyX0ZSIiwgIjI3IGF2cmls
IDIwMDUiKSk7CisgICAgRVhQRUNUX0VRKG1zRm9yRGF0ZSgyMDA1LCBBcHJpbCwgMjcpLCBwYXJz
ZURhdGUoImphX0pQIiwgIjIwMDUvMDQvMjciKSk7Cit9CisKKyNpZiBFTkFCTEUoQ0FMRU5EQVJf
UElDS0VSKQorVEVTVF9GKExvY2FsZU1hY1Rlc3QsIGRhdGVGb3JtYXRUZXh0KQoreworICAgIEVY
UEVDVF9TVFJFUSgiTW9udGgvRGF5L1llYXIiLCBkYXRlRm9ybWF0VGV4dCgiZW5fVVMiKS51dGY4
KCkuZGF0YSgpKTsKKyAgICBFWFBFQ1RfU1RSRVEoIkRheS9Nb250aC9ZZWFyIiwgZGF0ZUZvcm1h
dFRleHQoImZyX0ZSIikudXRmOCgpLmRhdGEoKSk7CisgICAgRVhQRUNUX1NUUkVRKCJZZWFyL01v
bnRoL0RheSIsIGRhdGVGb3JtYXRUZXh0KCJqYV9KUCIpLnV0ZjgoKS5kYXRhKCkpOworfQorCitU
RVNUX0YoTG9jYWxlTWFjVGVzdCwgZmlyc3REYXlPZldlZWspCit7CisgICAgRVhQRUNUX0VRKFN1
bmRheSwgZmlyc3REYXlPZldlZWsoImVuX1VTIikpOworICAgIEVYUEVDVF9FUShNb25kYXksIGZp
cnN0RGF5T2ZXZWVrKCJmcl9GUiIpKTsKKyAgICBFWFBFQ1RfRVEoU3VuZGF5LCBmaXJzdERheU9m
V2VlaygiamFfSlAiKSk7Cit9CisKK1RFU1RfRihMb2NhbGVNYWNUZXN0LCBtb250aExhYmVscykK
K3sKKyAgICBFWFBFQ1RfU1RSRVEoIkphbnVhcnkiLCBtb250aExhYmVsKCJlbl9VUyIsIEphbnVh
cnkpLnV0ZjgoKS5kYXRhKCkpOworICAgIEVYUEVDVF9TVFJFUSgiSnVuZSIsIG1vbnRoTGFiZWwo
ImVuX1VTIiwgSnVuZSkudXRmOCgpLmRhdGEoKSk7CisgICAgRVhQRUNUX1NUUkVRKCJEZWNlbWJl
ciIsIG1vbnRoTGFiZWwoImVuX1VTIiwgRGVjZW1iZXIpLnV0ZjgoKS5kYXRhKCkpOworCisgICAg
RVhQRUNUX1NUUkVRKCJqYW52aWVyIiwgbW9udGhMYWJlbCgiZnJfRlIiLCBKYW51YXJ5KS51dGY4
KCkuZGF0YSgpKTsKKyAgICBFWFBFQ1RfU1RSRVEoImp1aW4iLCBtb250aExhYmVsKCJmcl9GUiIs
IEp1bmUpLnV0ZjgoKS5kYXRhKCkpOworICAgIEVYUEVDVF9TVFJFUSgiZFx4QzNceEE5IiAiY2Vt
YnJlIiwgbW9udGhMYWJlbCgiZnJfRlIiLCBEZWNlbWJlcikudXRmOCgpLmRhdGEoKSk7CisKKyAg
ICBFWFBFQ1RfU1RSRVEoIjFceEU2XHg5Q1x4ODgiLCBtb250aExhYmVsKCJqYV9KUCIsIEphbnVh
cnkpLnV0ZjgoKS5kYXRhKCkpOworICAgIEVYUEVDVF9TVFJFUSgiNlx4RTZceDlDXHg4OCIsIG1v
bnRoTGFiZWwoImphX0pQIiwgSnVuZSkudXRmOCgpLmRhdGEoKSk7CisgICAgRVhQRUNUX1NUUkVR
KCIxMlx4RTZceDlDXHg4OCIsIG1vbnRoTGFiZWwoImphX0pQIiwgRGVjZW1iZXIpLnV0ZjgoKS5k
YXRhKCkpOworfQorCitURVNUX0YoTG9jYWxlTWFjVGVzdCwgd2Vla0RheVNob3J0TGFiZWxzKQor
eworICAgIEVYUEVDVF9TVFJFUSgiU3VuIiwgd2Vla0RheVNob3J0TGFiZWwoImVuX1VTIiwgU3Vu
ZGF5KS51dGY4KCkuZGF0YSgpKTsKKyAgICBFWFBFQ1RfU1RSRVEoIldlZCIsIHdlZWtEYXlTaG9y
dExhYmVsKCJlbl9VUyIsIFdlZG5lc2RheSkudXRmOCgpLmRhdGEoKSk7CisgICAgRVhQRUNUX1NU
UkVRKCJTYXQiLCB3ZWVrRGF5U2hvcnRMYWJlbCgiZW5fVVMiLCBTYXR1cmRheSkudXRmOCgpLmRh
dGEoKSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoImRpbS4iLCB3ZWVrRGF5U2hvcnRMYWJlbCgiZnJf
RlIiLCBTdW5kYXkpLnV0ZjgoKS5kYXRhKCkpOworICAgIEVYUEVDVF9TVFJFUSgibWVyLiIsIHdl
ZWtEYXlTaG9ydExhYmVsKCJmcl9GUiIsIFdlZG5lc2RheSkudXRmOCgpLmRhdGEoKSk7CisgICAg
RVhQRUNUX1NUUkVRKCJzYW0uIiwgd2Vla0RheVNob3J0TGFiZWwoImZyX0ZSIiwgU2F0dXJkYXkp
LnV0ZjgoKS5kYXRhKCkpOworCisgICAgRVhQRUNUX1NUUkVRKCJceEU2XHg5N1x4QTUiLCB3ZWVr
RGF5U2hvcnRMYWJlbCgiamFfSlAiLCBTdW5kYXkpLnV0ZjgoKS5kYXRhKCkpOworICAgIEVYUEVD
VF9TVFJFUSgiXHhFNlx4QjBceEI0Iiwgd2Vla0RheVNob3J0TGFiZWwoImphX0pQIiwgV2VkbmVz
ZGF5KS51dGY4KCkuZGF0YSgpKTsKKyAgICBFWFBFQ1RfU1RSRVEoIlx4RTVceDlDXHg5RiIsIHdl
ZWtEYXlTaG9ydExhYmVsKCJqYV9KUCIsIFNhdHVyZGF5KS51dGY4KCkuZGF0YSgpKTsKK30KKyNl
bmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>