<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>21511</bug_id>
          
          <creation_ts>2009-09-10 01:45:31 +0400</creation_ts>
          <short_desc>Firefox KDE4 integration</short_desc>
          <delta_ts>2009-09-22 13:42:43 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>xulrunner</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>usability</keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>19564</blocked>
    
    <blocked>21507</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zerg">anubix</reporter>
          <assigned_to name="Andrey Cherepanov">cas</assigned_to>
          <cc>aen</cc>
    
    <cc>gray_graff</cc>
    
    <cc>zerg</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>98726</commentid>
    <comment_count>0</comment_count>
    <who name="Zerg">anubix</who>
    <bug_when>2009-09-10 01:45:31 +0400</bug_when>
    <thetext>Все там же
http://download.opensuse.org/repositories/mozilla:/Factory/openSUSE_Factory/src/
лежит mozilla-xulrunner191-kde4, но я не понял, как его xulrunner цепляет.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98727</commentid>
    <comment_count>1</comment_count>
    <who name="Zerg">anubix</who>
    <bug_when>2009-09-10 01:48:24 +0400</bug_when>
    <thetext>Пакет соберу завтра(в смысле, сегодня), если надо.
Только, не совсем понятно, куда его класть.
SuSE кладет в /usr/lib/mozilla/kmozillahelper</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98775</commentid>
    <comment_count>2</comment_count>
    <who name="Sergey V Turchin">zerg</who>
    <bug_when>2009-09-10 14:55:07 +0400</bug_when>
    <thetext>Что скажешь?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98782</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-09-10 15:14:57 +0400</bug_when>
    <thetext>(В ответ на комментарий №2)
&gt; Что скажешь?

Я не нашёл, где вызывается kmozillahelper. О нём нигде нет упоминаний.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98784</commentid>
    <comment_count>4</comment_count>
    <who name="Sergey V Turchin">zerg</who>
    <bug_when>2009-09-10 15:21:19 +0400</bug_when>
    <thetext>Ты в их пакетах искал? Я, вот, тоже че-то не нашел :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98787</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-09-10 15:49:32 +0400</bug_when>
    <thetext>(В ответ на комментарий №4)
&gt; Ты в их пакетах искал? Я, вот, тоже че-то не нашел :-(

Да, в пакетах.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98789</commentid>
    <comment_count>6</comment_count>
    <who name="Sergey V Turchin">zerg</who>
    <bug_when>2009-09-10 16:03:27 +0400</bug_when>
    <thetext>(В ответ на комментарий №5)
&gt; Да, в пакетах.
Я спрашивал &quot;Ты в их пакетах искал?&quot;, а не &quot;Ты их в пакетах искал?&quot; :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98822</commentid>
    <comment_count>7</comment_count>
      <attachid>3870</attachid>
    <who name="Zerg">anubix</who>
    <bug_when>2009-09-11 01:00:25 +0400</bug_when>
    <thetext>Created attachment 3870
kde-integration.patch

Нашел

Взят отсюда
http://widehat.opensuse.org/repositories/home:/llunak:/mozilla/openSUSE_Factory/src/

Источник патча
http://gitorious.org/firefox-kde-opensuse/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98823</commentid>
    <comment_count>8</comment_count>
    <who name="Zerg">anubix</who>
    <bug_when>2009-09-11 01:03:10 +0400</bug_when>
    <thetext>Ты приложи, а я все остальные нужные пакеты сам соберу тогда.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99160</commentid>
    <comment_count>9</comment_count>
      <attachid>3889</attachid>
    <who name="Zerg">anubix</who>
    <bug_when>2009-09-15 23:35:40 +0400</bug_when>
    <thetext>Created attachment 3889
mozilla-protocol_handler.patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99161</commentid>
    <comment_count>10</comment_count>
      <attachid>3890</attachid>
    <who name="Zerg">anubix</who>
    <bug_when>2009-09-15 23:38:05 +0400</bug_when>
    <thetext>Created attachment 3890
mozilla-helper-app.patch

Если не хочешь менять kde-integration.patch , то нужно сначала приложить
mozilla-protocol_handler.patch и mozilla-helper-app.patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99162</commentid>
    <comment_count>11</comment_count>
      <attachid>3891</attachid>
    <who name="Zerg">anubix</who>
    <bug_when>2009-09-15 23:38:52 +0400</bug_when>
    <thetext>Created attachment 3891
xulrunner.spec.patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99164</commentid>
    <comment_count>12</comment_count>
    <who name="Zerg">anubix</who>
    <bug_when>2009-09-16 01:05:22 +0400</bug_when>
    <thetext>Леш! Чего притих? Я проверил, работает.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99193</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-09-16 15:02:11 +0400</bug_when>
    <thetext>(В ответ на комментарий №12)
&gt; Леш! Чего притих? Я проверил, работает.

На работе нагрузили порядком. Спасибо за патчи. Это ускорит работу.
Я на этой неделе постараюсь добавить эти патчи.

Плюс я сейчас хочу обновить все mozilla &amp; co в связи с выходом новой беты thunderbird.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99195</commentid>
    <comment_count>14</comment_count>
    <who name="Sergey V Turchin">zerg</who>
    <bug_when>2009-09-16 15:10:32 +0400</bug_when>
    <thetext>Ок, я тем временем отправлю свои пакеты и когда в Сизиф все попадет, анонс напишу, чтоб заинтересованные погоняли перед включением в дистрибутивы.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99197</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-09-16 15:18:45 +0400</bug_when>
    <thetext>(В ответ на комментарий №14)
&gt; Ок, я тем временем отправлю свои пакеты и когда в Сизиф все попадет, анонс
&gt; напишу, чтоб заинтересованные погоняли перед включением в дистрибутивы.

Серёг, я бы не торопил события.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99198</commentid>
    <comment_count>16</comment_count>
    <who name="Sergey V Turchin">zerg</who>
    <bug_when>2009-09-16 15:24:40 +0400</bug_when>
    <thetext>Я и говою, сначала погонять. Без установки моих пакетов ничего не будет. Только бага 21507 для Firefox исправиться и то только если platform-picker true</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99327</commentid>
    <comment_count>17</comment_count>
    <who name="Zerg">anubix</who>
    <bug_when>2009-09-17 23:29:59 +0400</bug_when>
    <thetext>firefox-kde4 собрался, можешь попробовать</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99751</commentid>
    <comment_count>18</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2009-09-21 20:59:17 +0400</bug_when>
    <thetext>xulrunner-1.9.1.4-alt0.20090918 -&gt; sisyphus:

* Fri Sep 18 2009 Alexey Gladkov &lt;legion@altlinux&gt; 1.9.1.4-alt0.20090918

- New development snapshot (20090918).
- Add KDE integration from SUSE (ALT#21511).
- Add mimeinfo for xpi files (ALT#21510).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3870</attachid>
            <date>2009-09-11 01:00:25 +0400</date>
            <delta_ts>2009-09-11 01:00:25 +0400</delta_ts>
            <desc>kde-integration.patch</desc>
            <filename>kde-integration.patch</filename>
            <type>text/plain</type>
            <size>82701</size>
            <attacher name="Zerg">anubix</attacher>
            
              <data encoding="base64">LS0tIG1vemlsbGEvYnJvd3Nlci9hcHAvTWFrZWZpbGUuaW4uc2F2CTIwMDktMDktMDUgMDA6MTA6
MzYuMDAwMDAwMDAwICswMjAwCisrKyBtb3ppbGxhL2Jyb3dzZXIvYXBwL01ha2VmaWxlLmluCTIw
MDktMDktMDUgMDA6MTA6NDIuMDAwMDAwMDAwICswMjAwCkBAIC00OSw2ICs0OSw3IEBAIERJUlMJ
CT0gcHJvZmlsZS9leHRlbnNpb25zCiAKIFBSRUZfSlNfRVhQT1JUUyA9ICQoc3JjZGlyKS9wcm9m
aWxlL2ZpcmVmb3guanMgXAogCQkgICQoc3JjZGlyKS9wcm9maWxlL2NoYW5uZWwtcHJlZnMuanMg
XAorCQkgICQoc3JjZGlyKS9wcm9maWxlL2tkZS5qcyBcCiAJCSAgJChOVUxMKQogCiBpZm5kZWYg
TU9aX0JSQU5ESU5HX0RJUkVDVE9SWQotLS0gbW96aWxsYS9icm93c2VyL2FwcC9wcm9maWxlL2tk
ZS5qcy5zYXYJMjAwOS0wOS0wNSAwMDoxMDozNi4wMDAwMDAwMDAgKzAyMDAKKysrIG1vemlsbGEv
YnJvd3Nlci9hcHAvcHJvZmlsZS9rZGUuanMJMjAwOS0wOS0wNSAwMDoxMDo0Mi4wMDAwMDAwMDAg
KzAyMDAKQEAgLTAsMCArMSBAQAorcHJlZigiYnJvd3Nlci5wcmVmZXJlbmNlcy5pbnN0YW50QXBw
bHkiLCBmYWxzZSk7Ci0tLSBtb3ppbGxhL2Jyb3dzZXIvY29tcG9uZW50cy9idWlsZC9uc01vZHVs
ZS5jcHAuc2F2CTIwMDktMDktMDUgMDA6MTA6MzYuMDAwMDAwMDAwICswMjAwCisrKyBtb3ppbGxh
L2Jyb3dzZXIvY29tcG9uZW50cy9idWlsZC9uc01vZHVsZS5jcHAJMjAwOS0wOS0wNSAwMDoxMDo0
Mi4wMDAwMDAwMDAgKzAyMDAKQEAgLTQ2LDcgKzQ2LDcgQEAKICNlbGlmIGRlZmluZWQoWFBfTUFD
T1NYKQogI2luY2x1ZGUgIm5zTWFjU2hlbGxTZXJ2aWNlLmgiCiAjZWxpZiBkZWZpbmVkKE1PWl9X
SURHRVRfR1RLMikKLSNpbmNsdWRlICJuc0dOT01FU2hlbGxTZXJ2aWNlLmgiCisjaW5jbHVkZSAi
bnNVbml4U2hlbGxTZXJ2aWNlLmgiCiAjZW5kaWYKIAogI2lmbmRlZiBXSU5DRQpAQCAtODgsNyAr
ODgsOCBAQCBOU19HRU5FUklDX0ZBQ1RPUllfQ09OU1RSVUNUT1IobnNXaW5kb3dzCiAjZWxpZiBk
ZWZpbmVkKFhQX01BQ09TWCkKIE5TX0dFTkVSSUNfRkFDVE9SWV9DT05TVFJVQ1RPUihuc01hY1No
ZWxsU2VydmljZSkKICNlbGlmIGRlZmluZWQoTU9aX1dJREdFVF9HVEsyKQotTlNfR0VORVJJQ19G
QUNUT1JZX0NPTlNUUlVDVE9SX0lOSVQobnNHTk9NRVNoZWxsU2VydmljZSwgSW5pdCkKKy8vIGlu
IG5zVW5peFNoZWxsU2VydmljZQorLy9OU19HRU5FUklDX0ZBQ1RPUllfQ09OU1RSVUNUT1JfSU5J
VChuc1VuaXhTaGVsbFNlcnZpY2UsIEluaXQpCiAjZW5kaWYKIAogI2lmbmRlZiBXSU5DRQpAQCAt
MTMyLDcgKzEzMyw3IEBAIHN0YXRpYyBjb25zdCBuc01vZHVsZUNvbXBvbmVudEluZm8gY29tcG8K
ICAgeyAiQnJvd3NlciBTaGVsbCBTZXJ2aWNlIiwKICAgICBOU19TSEVMTFNFUlZJQ0VfQ0lELAog
ICAgIE5TX1NIRUxMU0VSVklDRV9DT05UUkFDVElELAotICAgIG5zR05PTUVTaGVsbFNlcnZpY2VD
b25zdHJ1Y3RvciB9LAorICAgIG5zVW5peFNoZWxsU2VydmljZUNvbnN0cnVjdG9yIH0sCiAKICNl
bmRpZgogCi0tLSBtb3ppbGxhL2Jyb3dzZXIvY29tcG9uZW50cy9zaGVsbC9zcmMvTWFrZWZpbGUu
aW4uc2F2CTIwMDktMDktMDUgMDA6MTA6MzYuMDAwMDAwMDAwICswMjAwCisrKyBtb3ppbGxhL2Jy
b3dzZXIvY29tcG9uZW50cy9zaGVsbC9zcmMvTWFrZWZpbGUuaW4JMjAwOS0wOS0wNSAwMDoxMDo0
Mi4wMDAwMDAwMDAgKzAyMDAKQEAgLTc1LDExICs3NSwxMiBAQCBpZm5lcSAoLCQoZmlsdGVyIG1h
YyBjb2NvYSwkKE1PWl9XSURHRVRfCiBDUFBTUkNTID0gbnNNYWNTaGVsbFNlcnZpY2UuY3BwCiBl
bHNlCiBpZmVxICgkKE1PWl9XSURHRVRfVE9PTEtJVCksIGd0azIpCi1DUFBTUkNTID0gbnNHTk9N
RVNoZWxsU2VydmljZS5jcHAKK0NQUFNSQ1MgPSBuc1VuaXhTaGVsbFNlcnZpY2UuY3BwIG5zR05P
TUVTaGVsbFNlcnZpY2UuY3BwIG5zS0RFU2hlbGxTZXJ2aWNlLmNwcAogUkVRVUlSRVMJKz0gXAog
CQltb3pnbm9tZSBcCiAJCXRoZWJlcyBcCiAJCSQoTlVMTCkKK0xPQ0FMX0lOQ0xVREVTICs9IC1J
JCh0b3BzcmNkaXIpL3Rvb2xraXQveHJlCiBlbmRpZgogZW5kaWYKIGVuZGlmCi0tLSBtb3ppbGxh
L2Jyb3dzZXIvY29tcG9uZW50cy9zaGVsbC9zcmMvbnNLREVTaGVsbFNlcnZpY2UuY3BwLnNhdgky
MDA5LTA5LTA1IDAwOjEwOjM2LjAwMDAwMDAwMCArMDIwMAorKysgbW96aWxsYS9icm93c2VyL2Nv
bXBvbmVudHMvc2hlbGwvc3JjL25zS0RFU2hlbGxTZXJ2aWNlLmNwcAkyMDA5LTA5LTA1IDAwOjEw
OjQyLjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDE5MyBAQAorLyogLSotIE1vZGU6IEMrKzsg
dGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0q
LSAqLworLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBM
IDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBh
cmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEg
KHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl
IExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3
YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw
cmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFu
Z3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNl
bnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIFNoZWxsIFNlcnZpY2UuCisgKgorICog
VGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3Jn
LgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHly
aWdodCAoQykgMjAwNAorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBj
b250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBl
aXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAo
dGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
VmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUg
cHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQK
KyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJz
aW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBH
UEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2
ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUg
eW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJl
cGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVp
cmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUg
cHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BM
IG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisK
KyNpbmNsdWRlICJuc0tERVNoZWxsU2VydmljZS5oIgorI2luY2x1ZGUgIm5zU2hlbGxTZXJ2aWNl
LmgiCisjaW5jbHVkZSAibnNLREVVdGlscy5oIgorI2luY2x1ZGUgIm5zQ09NUHRyLmgiCisjaW5j
bHVkZSAibnNJUHJlZlNlcnZpY2UuaCIKKyNpbmNsdWRlICJuc0lQcm9jZXNzLmgiCisjaW5jbHVk
ZSAibnNJTG9jYWxGaWxlLmgiCisjaW5jbHVkZSAibnNTZXJ2aWNlTWFuYWdlclV0aWxzLmgiCisj
aW5jbHVkZSAibnNDb21wb25lbnRNYW5hZ2VyVXRpbHMuaCIKKworbnNyZXN1bHQKK25zS0RFU2hl
bGxTZXJ2aWNlOjpJbml0KCkKKyAgICB7CisgICAgaWYoICFuc0tERVV0aWxzOjprZGVTdXBwb3J0
KCkpCisgICAgICAgIHJldHVybiBOU19FUlJPUl9OT1RfQVZBSUxBQkxFOworICAgIHJldHVybiBO
U19PSzsKKyAgICB9CisKK05TX0lNUExfSVNVUFBPUlRTMShuc0tERVNoZWxsU2VydmljZSwgbnNJ
U2hlbGxTZXJ2aWNlKQorCitOU19JTUVUSE9ESU1QCituc0tERVNoZWxsU2VydmljZTo6SXNEZWZh
dWx0QnJvd3NlcihQUkJvb2wgYVN0YXJ0dXBDaGVjaywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJCb29sKiBhSXNEZWZhdWx0QnJvd3NlcikKKyAgICB7CisgICAgKmFJ
c0RlZmF1bHRCcm93c2VyID0gUFJfRkFMU0U7CisgICAgaWYgKGFTdGFydHVwQ2hlY2spCisgICAg
ICAgIG1DaGVja2VkVGhpc1Nlc3Npb24gPSBQUl9UUlVFOworICAgIG5zQ1N0cmluZ0FycmF5IGNv
bW1hbmQ7CisgICAgY29tbWFuZC5BcHBlbmRDU3RyaW5nKCBOU19MSVRFUkFMX0NTVFJJTkcoICJJ
U0RFRkFVTFRCUk9XU0VSIiApKTsKKyAgICBpZiggbnNLREVVdGlsczo6Y29tbWFuZCggY29tbWFu
ZCApKQorICAgICAgICAqYUlzRGVmYXVsdEJyb3dzZXIgPSBQUl9UUlVFOworICAgIHJldHVybiBO
U19PSzsKKyAgICB9CisKK05TX0lNRVRIT0RJTVAKK25zS0RFU2hlbGxTZXJ2aWNlOjpTZXREZWZh
dWx0QnJvd3NlcihQUkJvb2wgYUNsYWltQWxsVHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUkJvb2wgYUZvckFsbFVzZXJzKQorICAgIHsKKyAgICBuc0NTdHJp
bmdBcnJheSBjb21tYW5kOworICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmluZyggTlNfTElURVJBTF9D
U1RSSU5HKCAiU0VUREVGQVVMVEJST1dTRVIiICkpOworICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmlu
ZyggYUNsYWltQWxsVHlwZXMgPyBOU19MSVRFUkFMX0NTVFJJTkcoICJBTExUWVBFUyIgKSA6IE5T
X0xJVEVSQUxfQ1NUUklORyggIk5PUk1BTCIgKSk7CisgICAgcmV0dXJuIG5zS0RFVXRpbHM6OmNv
bW1hbmQoIGNvbW1hbmQgKSA/IE5TX09LIDogTlNfRVJST1JfRkFJTFVSRTsKKyAgICB9CisKK05T
X0lNRVRIT0RJTVAKK25zS0RFU2hlbGxTZXJ2aWNlOjpHZXRTaG91bGRDaGVja0RlZmF1bHRCcm93
c2VyKFBSQm9vbCogYVJlc3VsdCkKK3sKKyAgLy8gSWYgd2UndmUgYWxyZWFkeSBjaGVja2VkLCB0
aGUgYnJvd3NlciBoYXMgYmVlbiBzdGFydGVkIGFuZCB0aGlzIGlzIGEgCisgIC8vIG5ldyB3aW5k
b3cgb3BlbiwgYW5kIHdlIGRvbid0IHdhbnQgdG8gY2hlY2sgYWdhaW4uCisgIGlmIChtQ2hlY2tl
ZFRoaXNTZXNzaW9uKSB7CisgICAgKmFSZXN1bHQgPSBQUl9GQUxTRTsKKyAgICByZXR1cm4gTlNf
T0s7CisgIH0KKworICBuc0NPTVB0cjxuc0lQcmVmQnJhbmNoPiBwcmVmczsKKyAgbnNDT01QdHI8
bnNJUHJlZlNlcnZpY2U+IHBzZXJ2ZShkb19HZXRTZXJ2aWNlKE5TX1BSRUZTRVJWSUNFX0NPTlRS
QUNUSUQpKTsKKyAgaWYgKHBzZXJ2ZSkKKyAgICBwc2VydmUtPkdldEJyYW5jaCgiIiwgZ2V0dGVy
X0FkZFJlZnMocHJlZnMpKTsKKworICBpZiAocHJlZnMpCisgICAgcHJlZnMtPkdldEJvb2xQcmVm
KFBSRUZfQ0hFQ0tERUZBVUxUQlJPV1NFUiwgYVJlc3VsdCk7CisKKyAgcmV0dXJuIE5TX09LOwor
fQorCitOU19JTUVUSE9ESU1QCituc0tERVNoZWxsU2VydmljZTo6U2V0U2hvdWxkQ2hlY2tEZWZh
dWx0QnJvd3NlcihQUkJvb2wgYVNob3VsZENoZWNrKQoreworICBuc0NPTVB0cjxuc0lQcmVmQnJh
bmNoPiBwcmVmczsKKyAgbnNDT01QdHI8bnNJUHJlZlNlcnZpY2U+IHBzZXJ2ZShkb19HZXRTZXJ2
aWNlKE5TX1BSRUZTRVJWSUNFX0NPTlRSQUNUSUQpKTsKKyAgaWYgKHBzZXJ2ZSkKKyAgICBwc2Vy
dmUtPkdldEJyYW5jaCgiIiwgZ2V0dGVyX0FkZFJlZnMocHJlZnMpKTsKKworICBpZiAocHJlZnMp
CisgICAgcHJlZnMtPlNldEJvb2xQcmVmKFBSRUZfQ0hFQ0tERUZBVUxUQlJPV1NFUiwgYVNob3Vs
ZENoZWNrKTsKKworICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAKK25zS0RFU2hl
bGxTZXJ2aWNlOjpTZXREZXNrdG9wQmFja2dyb3VuZChuc0lET01FbGVtZW50KiBhRWxlbWVudCwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFQb3Np
dGlvbikKKyAgICB7CisgICAgcmV0dXJuIE5TX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKKyAgICB9
CisKK05TX0lNRVRIT0RJTVAKK25zS0RFU2hlbGxTZXJ2aWNlOjpHZXREZXNrdG9wQmFja2dyb3Vu
ZENvbG9yKFBSVWludDMyICphQ29sb3IpCisgICAgeworICAgIHJldHVybiBOU19FUlJPUl9OT1Rf
SU1QTEVNRU5URUQ7CisgICAgfQorCitOU19JTUVUSE9ESU1QCituc0tERVNoZWxsU2VydmljZTo6
U2V0RGVza3RvcEJhY2tncm91bmRDb2xvcihQUlVpbnQzMiBhQ29sb3IpCisgICAgeworICAgIHJl
dHVybiBOU19FUlJPUl9OT1RfSU1QTEVNRU5URUQ7CisgICAgfQorCitOU19JTUVUSE9ESU1QCitu
c0tERVNoZWxsU2VydmljZTo6T3BlbkFwcGxpY2F0aW9uKFBSSW50MzIgYUFwcGxpY2F0aW9uKQor
ICAgIHsKKyAgICBuc0NTdHJpbmdBcnJheSBjb21tYW5kOworICAgIGlmKCBhQXBwbGljYXRpb24g
PT0gQVBQTElDQVRJT05fTUFJTCApCisgICAgICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmluZyggTlNf
TElURVJBTF9DU1RSSU5HKCAiT1BFTk1BSUwiICkpOworICAgIGVsc2UgaWYoIGFBcHBsaWNhdGlv
biA9PSBBUFBMSUNBVElPTl9ORVdTICkKKyAgICAgICAgY29tbWFuZC5BcHBlbmRDU3RyaW5nKCBO
U19MSVRFUkFMX0NTVFJJTkcoICJPUEVOTkVXUyIgKSk7CisgICAgZWxzZQorICAgICAgICByZXR1
cm4gTlNfRVJST1JfTk9UX0lNUExFTUVOVEVEOworICAgIHJldHVybiBuc0tERVV0aWxzOjpjb21t
YW5kKCBjb21tYW5kICkgPyBOU19PSyA6IE5TX0VSUk9SX0ZBSUxVUkU7CisgICAgfQorCitOU19J
TUVUSE9ESU1QCituc0tERVNoZWxsU2VydmljZTo6T3BlbkFwcGxpY2F0aW9uV2l0aFVSSShuc0lM
b2NhbEZpbGUqIGFBcHBsaWNhdGlvbiwgY29uc3QgbnNBQ1N0cmluZyYgYVVSSSkKKyAgICB7Cisg
ICAgbnNDU3RyaW5nQXJyYXkgY29tbWFuZDsKKyAgICBjb21tYW5kLkFwcGVuZENTdHJpbmcoIE5T
X0xJVEVSQUxfQ1NUUklORyggIlJVTiIgKSk7CisgICAgbnNDU3RyaW5nIGFwcDsKKyAgICBuc3Jl
c3VsdCBydiA9IGFBcHBsaWNhdGlvbi0+R2V0TmF0aXZlUGF0aCggYXBwICk7CisgICAgTlNfRU5T
VVJFX1NVQ0NFU1MoIHJ2LCBydiApOworICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmluZyggYXBwICk7
CisgICAgY29tbWFuZC5BcHBlbmRDU3RyaW5nKCBhVVJJICk7CisgICAgcmV0dXJuIG5zS0RFVXRp
bHM6OmNvbW1hbmQoIGNvbW1hbmQgKSA/IE5TX09LIDogTlNfRVJST1JfRkFJTFVSRTsKKyAgICB9
CisKK05TX0lNRVRIT0RJTVAKK25zS0RFU2hlbGxTZXJ2aWNlOjpHZXREZWZhdWx0RmVlZFJlYWRl
cihuc0lMb2NhbEZpbGUqKiBfcmV0dmFsKQorICAgIHsKKyAgICAqX3JldHZhbCA9IG5zbnVsbDsK
KworICAgIG5zQ1N0cmluZ0FycmF5IGNvbW1hbmQ7CisgICAgY29tbWFuZC5BcHBlbmRDU3RyaW5n
KCBOU19MSVRFUkFMX0NTVFJJTkcoICJHRVRERUZBVUxURkVFRFJFQURFUiIgKSk7CisgICAgbnND
U3RyaW5nQXJyYXkgb3V0cHV0OworICAgIGlmKCAhbnNLREVVdGlsczo6Y29tbWFuZCggY29tbWFu
ZCwgJm91dHB1dCApIHx8IG91dHB1dC5Db3VudCgpICE9IDEgKQorICAgICAgICByZXR1cm4gTlNf
RVJST1JfRkFJTFVSRTsKKworICAgIG5zQ1N0cmluZyBwYXRoOworICAgIHBhdGggPSAqb3V0cHV0
WyAwIF07CisgICAgaWYgKHBhdGguSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gTlNfRVJST1Jf
RkFJTFVSRTsKKworICAgIG5zcmVzdWx0IHJ2OworICAgIG5zQ09NUHRyPG5zSUxvY2FsRmlsZT4g
ZGVmYXVsdFJlYWRlciA9CisgICAgICAgIGRvX0NyZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcv
ZmlsZS9sb2NhbDsxIiwgJnJ2KTsKKyAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOworCisg
ICAgcnYgPSBkZWZhdWx0UmVhZGVyLT5Jbml0V2l0aE5hdGl2ZVBhdGgocGF0aCk7CisgICAgTlNf
RU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKKworICAgIFBSQm9vbCBleGlzdHM7CisgICAgcnYgPSBk
ZWZhdWx0UmVhZGVyLT5FeGlzdHMoJmV4aXN0cyk7CisgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYs
IHJ2KTsKKyAgICBpZiAoIWV4aXN0cykKKyAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7
CisKKyAgICBOU19BRERSRUYoKl9yZXR2YWwgPSBkZWZhdWx0UmVhZGVyKTsKKyAgICByZXR1cm4g
TlNfT0s7CisgICAgfQotLS0gbW96aWxsYS9icm93c2VyL2NvbXBvbmVudHMvc2hlbGwvc3JjL25z
S0RFU2hlbGxTZXJ2aWNlLmguc2F2CTIwMDktMDktMDUgMDA6MTA6MzYuMDAwMDAwMDAwICswMjAw
CisrKyBtb3ppbGxhL2Jyb3dzZXIvY29tcG9uZW50cy9zaGVsbC9zcmMvbnNLREVTaGVsbFNlcnZp
Y2UuaAkyMDA5LTA5LTA1IDAwOjEwOjQyLjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDU5IEBA
CisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsg
Yy1iYXNpYy1vZmZzZXQ6IDIgLSotICovCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoq
KioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29u
dGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlz
IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkg
b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9y
Zy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0Yg
QU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICog
Zm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9u
cyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgU2hl
bGwgU2VydmljZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFs
IENvZGUgaXMgbW96aWxsYS5vcmcuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFs
IERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDA0CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9w
ZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKgorICog
QWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRl
ciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
VmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisg
KiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJl
IGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFs
bG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0
ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhl
cnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJv
dmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90
aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRv
IG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNl
IHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25l
IG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VO
U0UgQkxPQ0sgKioqKiogKi8KKworI2lmbmRlZiBuc2tkZXNoZWxsc2VydmljZV9oX19fXworI2Rl
ZmluZSBuc2tkZXNoZWxsc2VydmljZV9oX19fXworCisjaW5jbHVkZSAibnNJU2hlbGxTZXJ2aWNl
LmgiCisjaW5jbHVkZSAibnNTdHJpbmdBUEkuaCIKKworY2xhc3MgbnNLREVTaGVsbFNlcnZpY2Ug
OiBwdWJsaWMgbnNJU2hlbGxTZXJ2aWNlCit7CitwdWJsaWM6CisgIG5zS0RFU2hlbGxTZXJ2aWNl
KCkgOiBtQ2hlY2tlZFRoaXNTZXNzaW9uKFBSX0ZBTFNFKSB7IH0KKworICBOU19ERUNMX0lTVVBQ
T1JUUworICBOU19ERUNMX05TSVNIRUxMU0VSVklDRQorCisgIG5zcmVzdWx0IEluaXQoKSBOU19I
SURERU47CisKK3ByaXZhdGU6CisgIH5uc0tERVNoZWxsU2VydmljZSgpIHt9CisKKyAgUFJQYWNr
ZWRCb29sIG1DaGVja2VkVGhpc1Nlc3Npb247Cit9OworCisjZW5kaWYgLy8gbnNrZGVzaGVsbHNl
cnZpY2VfaF9fX18KLS0tIG1vemlsbGEvYnJvd3Nlci9jb21wb25lbnRzL3NoZWxsL3NyYy9uc1Vu
aXhTaGVsbFNlcnZpY2UuY3BwLnNhdgkyMDA5LTA5LTA1IDAwOjEwOjM2LjAwMDAwMDAwMCArMDIw
MAorKysgbW96aWxsYS9icm93c2VyL2NvbXBvbmVudHMvc2hlbGwvc3JjL25zVW5peFNoZWxsU2Vy
dmljZS5jcHAJMjAwOS0wOS0wNSAwMDoxMDo0Mi4wMDAwMDAwMDAgKzAyMDAKQEAgLTAsMCArMSw1
MiBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBu
aWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAqLworLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9D
SyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhl
IGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMg
TGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxs
YS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl
IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZ
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UK
KyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRh
dGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlz
IFNoZWxsIFNlcnZpY2UuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmln
aW5hbCBDb2RlIGlzIG1vemlsbGEub3JnLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5p
dGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwNAorICogdGhlIEluaXRpYWwgRGV2
ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoK
KyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQg
dW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIp
LAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BM
IGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0
byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0
aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cg
b3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhl
IHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFu
ZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlv
dSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5
IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55
IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBM
SUNFTlNFIEJMT0NLICoqKioqICovCisKKyNpbmNsdWRlICJuc1VuaXhTaGVsbFNlcnZpY2UuaCIK
KyNpbmNsdWRlICJuc0dOT01FU2hlbGxTZXJ2aWNlLmgiCisjaW5jbHVkZSAibnNLREVTaGVsbFNl
cnZpY2UuaCIKKyNpbmNsdWRlICJuc0tERVV0aWxzLmgiCisjaW5jbHVkZSAibnNJR2VuZXJpY0Zh
Y3RvcnkuaCIKKworTlNfR0VORVJJQ19GQUNUT1JZX0NPTlNUUlVDVE9SX0lOSVQobnNHTk9NRVNo
ZWxsU2VydmljZSwgSW5pdCkKK05TX0dFTkVSSUNfRkFDVE9SWV9DT05TVFJVQ1RPUl9JTklUKG5z
S0RFU2hlbGxTZXJ2aWNlLCBJbml0KQorCitOU19NRVRIT0QKK25zVW5peFNoZWxsU2VydmljZUNv
bnN0cnVjdG9yKG5zSVN1cHBvcnRzICphT3V0ZXIsIFJFRk5TSUlEIGFJSUQsIHZvaWQgKiphUmVz
dWx0KQoreworICAgIGlmKCBuc0tERVV0aWxzOjprZGVTdXBwb3J0KCkpCisgICAgICAgIHJldHVy
biBuc0tERVNoZWxsU2VydmljZUNvbnN0cnVjdG9yKCBhT3V0ZXIsIGFJSUQsIGFSZXN1bHQgKTsK
KyAgICByZXR1cm4gbnNHTk9NRVNoZWxsU2VydmljZUNvbnN0cnVjdG9yKCBhT3V0ZXIsIGFJSUQs
IGFSZXN1bHQgKTsKK30KLS0tIG1vemlsbGEvYnJvd3Nlci9jb21wb25lbnRzL3NoZWxsL3NyYy9u
c1VuaXhTaGVsbFNlcnZpY2UuaC5zYXYJMjAwOS0wOS0wNSAwMDoxMDozNi4wMDAwMDAwMDAgKzAy
MDAKKysrIG1vemlsbGEvYnJvd3Nlci9jb21wb25lbnRzL3NoZWxsL3NyYy9uc1VuaXhTaGVsbFNl
cnZpY2UuaAkyMDA5LTA5LTA1IDAwOjEwOjQyLjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDQ1
IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5p
bDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotICovCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NL
ICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUg
Y29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBM
aWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBt
YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxh
Lm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug
aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkg
T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQor
ICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0
aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMg
U2hlbGwgU2VydmljZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdp
bmFsIENvZGUgaXMgbW96aWxsYS5vcmcuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0
aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDA0CisgKiB0aGUgSW5pdGlhbCBEZXZl
bG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKgor
ICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1
bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiks
CisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwg
YXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRv
IGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRo
ZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBv
dGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUg
cHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5k
IG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91
IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkg
dXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkg
b25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJ
Q0VOU0UgQkxPQ0sgKioqKiogKi8KKworI2lmbmRlZiBuc3VuaXhzaGVsbHNlcnZpY2VfaF9fX18K
KyNkZWZpbmUgbnN1bml4c2hlbGxzZXJ2aWNlX2hfX19fCisKKyNpbmNsdWRlICJuc0lTaGVsbFNl
cnZpY2UuaCIKKworTlNfTUVUSE9ECituc1VuaXhTaGVsbFNlcnZpY2VDb25zdHJ1Y3Rvcihuc0lT
dXBwb3J0cyAqYU91dGVyLCBSRUZOU0lJRCBhSUlELCB2b2lkICoqYVJlc3VsdCk7CisKKyNlbmRp
ZiAvLyBuc3VuaXhzaGVsbHNlcnZpY2VfaF9fX18KLS0tIG1vemlsbGEvYnJvd3Nlci9pbnN0YWxs
ZXIvdW5peC9wYWNrYWdlcy1zdGF0aWMuc2F2CTIwMDktMDgtMjUgMjE6MjM6NDUuMDAwMDAwMDAw
ICswMjAwCisrKyBtb3ppbGxhL2Jyb3dzZXIvaW5zdGFsbGVyL3VuaXgvcGFja2FnZXMtc3RhdGlj
CTIwMDktMDktMDUgMDA6MTA6NDIuMDAwMDAwMDAwICswMjAwCkBAIC0yOTEsNiArMjkxLDcgQEAg
YmluL2ljb25zLyoucG5nCiBiaW4vQFBSRUZfRElSQC9maXJlZm94LmpzCiBiaW4vQFBSRUZfRElS
QC9maXJlZm94LWJyYW5kaW5nLmpzCiBiaW4vQFBSRUZfRElSQC9jaGFubmVsLXByZWZzLmpzCiti
aW4vQFBSRUZfRElSQC9rZGUuanMKIGJpbi9ncmVwcmVmcy9hbGwuanMKIGJpbi9ncmVwcmVmcy9z
ZWN1cml0eS1wcmVmcy5qcwogYmluL2dyZXByZWZzL3hwaW5zdGFsbC5qcwoKLS0tIG1vemlsbGEv
Y2hyb21lL3NyYy9NYWtlZmlsZS5pbi5zYXYJMjAwOS0wOS0wNSAwMDoxMDozNi4wMDAwMDAwMDAg
KzAyMDAKKysrIG1vemlsbGEvY2hyb21lL3NyYy9NYWtlZmlsZS5pbgkyMDA5LTA5LTA1IDAwOjEw
OjQyLjAwMDAwMDAwMCArMDIwMApAQCAtODYsNiArODYsNyBAQCBFWFRSQV9EU09fTERPUFRTID0g
XAogCiBpZm5lcSAoLCQoZmlsdGVyIGd0azIsJChNT1pfV0lER0VUX1RPT0xLSVQpKSkKIEVYVFJB
X0RTT19MRE9QVFMgKz0gJChNT1pfR1RLMl9MSUJTKQorTE9DQUxfSU5DTFVERVMgKz0gLUkkKHRv
cHNyY2RpcikvdG9vbGtpdC94cmUKIGVuZGlmCiAKIGlmbmVxICgsJChmaWx0ZXIgbWFjIGNvY29h
LCQoTU9aX1dJREdFVF9UT09MS0lUKSkpCi0tLSBtb3ppbGxhL2Nocm9tZS9zcmMvbnNDaHJvbWVS
ZWdpc3RyeS5jcHAuc2F2CTIwMDktMDktMDUgMDA6MTA6MzYuMDAwMDAwMDAwICswMjAwCisrKyBt
b3ppbGxhL2Nocm9tZS9zcmMvbnNDaHJvbWVSZWdpc3RyeS5jcHAJMjAwOS0wOS0wNSAwMDoxMDo0
Mi4wMDAwMDAwMDAgKzAyMDAKQEAgLTExNCw2ICsxMTQsNyBAQAogI2luY2x1ZGUgIm5zSVhVTEFw
cEluZm8uaCIKICNpbmNsdWRlICJuc0lYVUxSdW50aW1lLmgiCiAjaW5jbHVkZSAibnNQcmVzU2hl
bGxJdGVyYXRvci5oIgorI2luY2x1ZGUgIm5zS0RFVXRpbHMuaCIKIAogI2lmZGVmIE1PWl9YVUwK
IC8vIGtlZXAgYWxsIHRoZSBSREYgc3R1ZmYgdG9nZXRoZXIsIGluIGNhc2Ugd2UgY2FuIHJlbW92
ZSBpdCBpbiB0aGUgZmFyIGZ1dHVyZQpAQCAtMjIwOCw2ICsyMjA5LDcgQEAgbnNDaHJvbWVSZWdp
c3RyeTo6UHJvY2Vzc01hbmlmZXN0QnVmZmVyKAogICBOU19OQU1FRF9MSVRFUkFMX1NUUklORyhr
QXBwVmVyc2lvbiwgImFwcHZlcnNpb24iKTsKICAgTlNfTkFNRURfTElURVJBTF9TVFJJTkcoa09z
LCAib3MiKTsKICAgTlNfTkFNRURfTElURVJBTF9TVFJJTkcoa09zVmVyc2lvbiwgIm9zdmVyc2lv
biIpOworICBOU19OQU1FRF9MSVRFUkFMX1NUUklORyhrRGVza3RvcCwgImRlc2t0b3AiKTsKIAog
ICBuc0NPTVB0cjxuc0lJT1NlcnZpY2U+IGlvIChkb19HZXRJT1NlcnZpY2UoKSk7CiAgIGlmICgh
aW8pIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOwpAQCAtMjI1MSw2ICsyMjUzLDcgQEAgbnNDaHJv
bWVSZWdpc3RyeTo6UHJvY2Vzc01hbmlmZXN0QnVmZmVyKAogICB9CiAgIAogICBuc0F1dG9TdHJp
bmcgb3NWZXJzaW9uOworICBuc0F1dG9TdHJpbmcgZGVza3RvcDsKICNpZiBkZWZpbmVkKFhQX1dJ
TikKICAgT1NWRVJTSU9OSU5GTyBpbmZvID0geyBzaXplb2YoT1NWRVJTSU9OSU5GTykgfTsKICAg
aWYgKEdldFZlcnNpb25FeCgmaW5mbykpIHsKQEAgLTIyNTgsNiArMjI2MSw3IEBAIG5zQ2hyb21l
UmVnaXN0cnk6OlByb2Nlc3NNYW5pZmVzdEJ1ZmZlcigKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5mby5kd01ham9yVmVyc2lvbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5kd01pbm9yVmVyc2lvbik7CiAgIH0KKyAgZGVz
a3RvcCA9IE5TX0xJVEVSQUxfU1RSSU5HKCJ3aW4iKTsKICNlbGlmIGRlZmluZWQoWFBfTUFDT1NY
KQogICBsb25nIG1ham9yVmVyc2lvbiwgbWlub3JWZXJzaW9uOwogICBpZiAoKEdlc3RhbHQoZ2Vz
dGFsdFN5c3RlbVZlcnNpb25NYWpvciwgJm1ham9yVmVyc2lvbikgPT0gbm9FcnIpICYmCkBAIC0y
MjY2LDEwICsyMjcwLDEyIEBAIG5zQ2hyb21lUmVnaXN0cnk6OlByb2Nlc3NNYW5pZmVzdEJ1ZmZl
cigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFqb3JWZXJzaW9u
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5vclZlcnNpb24p
OwogICB9CisgIGRlc2t0b3AgPSBOU19MSVRFUkFMX1NUUklORygibWFjb3N4Iik7CiAjZWxpZiBk
ZWZpbmVkKE1PWl9XSURHRVRfR1RLMikKICAgbnNUZXh0Rm9ybWF0dGVyOjpzc3ByaW50Zihvc1Zl
cnNpb24sIE5TX0xJVEVSQUxfU1RSSU5HKCIlbGQuJWxkIikuZ2V0KCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBndGtfbWFqb3JfdmVyc2lvbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a19taW5vcl92ZXJzaW9uKTsKKyAgZGVza3Rv
cCA9IG5zS0RFVXRpbHM6OmtkZVNlc3Npb24oKSA/IE5TX0xJVEVSQUxfU1RSSU5HKCJrZGUiKSA6
IE5TX0xJVEVSQUxfU1RSSU5HKCJnbm9tZSIpOyAvLyBUT0RPIG90aGVycz8KICNlbmRpZgogCiAg
IGNoYXIgKnRva2VuOwpAQCAtMjMxMyw2ICsyMzE5LDcgQEAgbnNDaHJvbWVSZWdpc3RyeTo6UHJv
Y2Vzc01hbmlmZXN0QnVmZmVyKAogICAgICAgVHJpU3RhdGUgc3RBcHAgPSBlVW5zcGVjaWZpZWQ7
CiAgICAgICBUcmlTdGF0ZSBzdE9zVmVyc2lvbiA9IGVVbnNwZWNpZmllZDsKICAgICAgIFRyaVN0
YXRlIHN0T3MgPSBlVW5zcGVjaWZpZWQ7CisgICAgICBUcmlTdGF0ZSBzdERlc2t0b3AgPSBlVW5z
cGVjaWZpZWQ7CiAKICAgICAgIFBSQm9vbCBiYWRGbGFnID0gUFJfRkFMU0U7CiAKQEAgLTIzMjYs
NiArMjMzMyw3IEBAIG5zQ2hyb21lUmVnaXN0cnk6OlByb2Nlc3NNYW5pZmVzdEJ1ZmZlcigKICAg
ICAgICAgICAgIENoZWNrRmxhZyhrQ29udGVudEFjY2Vzc2libGUsIHd0b2tlbiwgY29udGVudEFj
Y2Vzc2libGUpIHx8CiAgICAgICAgICAgICBDaGVja1N0cmluZ0ZsYWcoa0FwcGxpY2F0aW9uLCB3
dG9rZW4sIGFwcElELCBzdEFwcCkgfHwKICAgICAgICAgICAgIENoZWNrU3RyaW5nRmxhZyhrT3Ms
IHd0b2tlbiwgb3NUYXJnZXQsIHN0T3MpIHx8CisgICAgICAgICAgICBDaGVja1N0cmluZ0ZsYWco
a0Rlc2t0b3AsIHd0b2tlbiwgZGVza3RvcCwgc3REZXNrdG9wKSB8fAogICAgICAgICAgICAgQ2hl
Y2tWZXJzaW9uRmxhZyhrT3NWZXJzaW9uLCB3dG9rZW4sIG9zVmVyc2lvbiwgdmMsIHN0T3NWZXJz
aW9uKSB8fAogICAgICAgICAgICAgQ2hlY2tWZXJzaW9uRmxhZyhrQXBwVmVyc2lvbiwgd3Rva2Vu
LCBhcHBWZXJzaW9uLCB2Yywgc3RBcHBWZXJzaW9uKSkKICAgICAgICAgICBjb250aW51ZTsKQEAg
LTIzMzcsNyArMjM0NSw3IEBAIG5zQ2hyb21lUmVnaXN0cnk6OlByb2Nlc3NNYW5pZmVzdEJ1ZmZl
cigKICAgICAgIH0KIAogICAgICAgaWYgKGJhZEZsYWcgfHwgc3RBcHAgPT0gZUJhZCB8fCBzdEFw
cFZlcnNpb24gPT0gZUJhZCB8fCAKLSAgICAgICAgICBzdE9zID09IGVCYWQgfHwgc3RPc1ZlcnNp
b24gPT0gZUJhZCkKKyAgICAgICAgICBzdE9zID09IGVCYWQgfHwgc3RPc1ZlcnNpb24gPT0gZUJh
ZCB8fCBzdERlc2t0b3AgPT0gZUJhZCkKICAgICAgICAgY29udGludWU7CiAKICAgICAgIG5zQ09N
UHRyPG5zSVVSST4gcmVzb2x2ZWQ7CkBAIC0yMzk4LDYgKzI0MDYsNyBAQCBuc0Nocm9tZVJlZ2lz
dHJ5OjpQcm9jZXNzTWFuaWZlc3RCdWZmZXIoCiAgICAgICBUcmlTdGF0ZSBzdEFwcCA9IGVVbnNw
ZWNpZmllZDsKICAgICAgIFRyaVN0YXRlIHN0T3MgPSBlVW5zcGVjaWZpZWQ7CiAgICAgICBUcmlT
dGF0ZSBzdE9zVmVyc2lvbiA9IGVVbnNwZWNpZmllZDsKKyAgICAgIFRyaVN0YXRlIHN0RGVza3Rv
cCA9IGVVbnNwZWNpZmllZDsKIAogICAgICAgUFJCb29sIGJhZEZsYWcgPSBQUl9GQUxTRTsKIApA
QCAtMjQwOCw2ICsyNDE3LDcgQEAgbnNDaHJvbWVSZWdpc3RyeTo6UHJvY2Vzc01hbmlmZXN0QnVm
ZmVyKAogCiAgICAgICAgIGlmIChDaGVja1N0cmluZ0ZsYWcoa0FwcGxpY2F0aW9uLCB3dG9rZW4s
IGFwcElELCBzdEFwcCkgfHwKICAgICAgICAgICAgIENoZWNrU3RyaW5nRmxhZyhrT3MsIHd0b2tl
biwgb3NUYXJnZXQsIHN0T3MpIHx8CisgICAgICAgICAgICBDaGVja1N0cmluZ0ZsYWcoa0Rlc2t0
b3AsIHd0b2tlbiwgZGVza3RvcCwgc3REZXNrdG9wKSB8fAogICAgICAgICAgICAgQ2hlY2tWZXJz
aW9uRmxhZyhrT3NWZXJzaW9uLCB3dG9rZW4sIG9zVmVyc2lvbiwgdmMsIHN0T3NWZXJzaW9uKSB8
fAogICAgICAgICAgICAgQ2hlY2tWZXJzaW9uRmxhZyhrQXBwVmVyc2lvbiwgd3Rva2VuLCBhcHBW
ZXJzaW9uLCB2Yywgc3RBcHBWZXJzaW9uKSkKICAgICAgICAgICBjb250aW51ZTsKQEAgLTI0MTks
NyArMjQyOSw3IEBAIG5zQ2hyb21lUmVnaXN0cnk6OlByb2Nlc3NNYW5pZmVzdEJ1ZmZlcigKICAg
ICAgIH0KIAogICAgICAgaWYgKGJhZEZsYWcgfHwgc3RBcHAgPT0gZUJhZCB8fCBzdEFwcFZlcnNp
b24gPT0gZUJhZCB8fAotICAgICAgICAgIHN0T3MgPT0gZUJhZCB8fCBzdE9zVmVyc2lvbiA9PSBl
QmFkKQorICAgICAgICAgIHN0T3MgPT0gZUJhZCB8fCBzdE9zVmVyc2lvbiA9PSBlQmFkIHx8IHN0
RGVza3RvcCA9PSBlQmFkKQogICAgICAgICBjb250aW51ZTsKIAogICAgICAgbnNDT01QdHI8bnNJ
VVJJPiByZXNvbHZlZDsKQEAgLTI0NjAsNiArMjQ3MCw3IEBAIG5zQ2hyb21lUmVnaXN0cnk6OlBy
b2Nlc3NNYW5pZmVzdEJ1ZmZlcigKICAgICAgIFRyaVN0YXRlIHN0QXBwID0gZVVuc3BlY2lmaWVk
OwogICAgICAgVHJpU3RhdGUgc3RPcyA9IGVVbnNwZWNpZmllZDsKICAgICAgIFRyaVN0YXRlIHN0
T3NWZXJzaW9uID0gZVVuc3BlY2lmaWVkOworICAgICAgVHJpU3RhdGUgc3REZXNrdG9wID0gZVVu
c3BlY2lmaWVkOwogCiAgICAgICBQUkJvb2wgYmFkRmxhZyA9IFBSX0ZBTFNFOwogCkBAIC0yNDcw
LDYgKzI0ODEsNyBAQCBuc0Nocm9tZVJlZ2lzdHJ5OjpQcm9jZXNzTWFuaWZlc3RCdWZmZXIoCiAK
ICAgICAgICAgaWYgKENoZWNrU3RyaW5nRmxhZyhrQXBwbGljYXRpb24sIHd0b2tlbiwgYXBwSUQs
IHN0QXBwKSB8fAogICAgICAgICAgICAgQ2hlY2tTdHJpbmdGbGFnKGtPcywgd3Rva2VuLCBvc1Rh
cmdldCwgc3RPcykgfHwKKyAgICAgICAgICAgIENoZWNrU3RyaW5nRmxhZyhrRGVza3RvcCwgd3Rv
a2VuLCBkZXNrdG9wLCBzdERlc2t0b3ApIHx8CiAgICAgICAgICAgICBDaGVja1ZlcnNpb25GbGFn
KGtPc1ZlcnNpb24sIHd0b2tlbiwgb3NWZXJzaW9uLCB2Yywgc3RPc1ZlcnNpb24pIHx8CiAgICAg
ICAgICAgICBDaGVja1ZlcnNpb25GbGFnKGtBcHBWZXJzaW9uLCB3dG9rZW4sIGFwcFZlcnNpb24s
IHZjLCBzdEFwcFZlcnNpb24pKQogICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjQ4MSw3ICsyNDkz
LDcgQEAgbnNDaHJvbWVSZWdpc3RyeTo6UHJvY2Vzc01hbmlmZXN0QnVmZmVyKAogICAgICAgfQog
CiAgICAgICBpZiAoYmFkRmxhZyB8fCBzdEFwcCA9PSBlQmFkIHx8IHN0QXBwVmVyc2lvbiA9PSBl
QmFkIHx8Ci0gICAgICAgICAgc3RPcyA9PSBlQmFkIHx8IHN0T3NWZXJzaW9uID09IGVCYWQpCisg
ICAgICAgICAgc3RPcyA9PSBlQmFkIHx8IHN0T3NWZXJzaW9uID09IGVCYWQgfHwgc3REZXNrdG9w
ID09IGVCYWQpCiAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICBuc0NPTVB0cjxuc0lVUkk+IHJl
c29sdmVkOwpAQCAtMjUyNCw2ICsyNTM2LDcgQEAgbnNDaHJvbWVSZWdpc3RyeTo6UHJvY2Vzc01h
bmlmZXN0QnVmZmVyKAogICAgICAgVHJpU3RhdGUgc3RBcHAgPSBlVW5zcGVjaWZpZWQ7CiAgICAg
ICBUcmlTdGF0ZSBzdE9zID0gZVVuc3BlY2lmaWVkOwogICAgICAgVHJpU3RhdGUgc3RPc1ZlcnNp
b24gPSBlVW5zcGVjaWZpZWQ7CisgICAgICBUcmlTdGF0ZSBzdERlc2t0b3AgPSBlVW5zcGVjaWZp
ZWQ7CiAKICAgICAgIFBSQm9vbCBiYWRGbGFnID0gUFJfRkFMU0U7CiAKQEAgLTI1MzQsNiArMjU0
Nyw3IEBAIG5zQ2hyb21lUmVnaXN0cnk6OlByb2Nlc3NNYW5pZmVzdEJ1ZmZlcigKIAogICAgICAg
ICBpZiAoQ2hlY2tTdHJpbmdGbGFnKGtBcHBsaWNhdGlvbiwgd3Rva2VuLCBhcHBJRCwgc3RBcHAp
IHx8CiAgICAgICAgICAgICBDaGVja1N0cmluZ0ZsYWcoa09zLCB3dG9rZW4sIG9zVGFyZ2V0LCBz
dE9zKSB8fAorICAgICAgICAgICAgQ2hlY2tTdHJpbmdGbGFnKGtEZXNrdG9wLCB3dG9rZW4sIGRl
c2t0b3AsIHN0RGVza3RvcCkgfHwKICAgICAgICAgICAgIENoZWNrVmVyc2lvbkZsYWcoa09zVmVy
c2lvbiwgd3Rva2VuLCBvc1ZlcnNpb24sIHZjLCBzdE9zVmVyc2lvbikgfHwKICAgICAgICAgICAg
IENoZWNrVmVyc2lvbkZsYWcoa0FwcFZlcnNpb24sIHd0b2tlbiwgYXBwVmVyc2lvbiwgdmMsIHN0
QXBwVmVyc2lvbikpCiAgICAgICAgICAgY29udGludWU7CkBAIC0yNTQ1LDcgKzI1NTksNyBAQCBu
c0Nocm9tZVJlZ2lzdHJ5OjpQcm9jZXNzTWFuaWZlc3RCdWZmZXIoCiAgICAgICB9CiAKICAgICAg
IGlmIChiYWRGbGFnIHx8IHN0QXBwID09IGVCYWQgfHwgc3RBcHBWZXJzaW9uID09IGVCYWQgfHwK
LSAgICAgICAgICBzdE9zID09IGVCYWQgfHwgc3RPc1ZlcnNpb24gPT0gZUJhZCkKKyAgICAgICAg
ICBzdE9zID09IGVCYWQgfHwgc3RPc1ZlcnNpb24gPT0gZUJhZCB8fCBzdERlc2t0b3AgPT0gZUJh
ZCkKICAgICAgICAgY29udGludWU7CiAKICAgICAgIG5zQ09NUHRyPG5zSVVSST4gYmFzZXVyaSwg
b3ZlcmxheXVyaTsKQEAgLTI1ODAsNiArMjU5NCw3IEBAIG5zQ2hyb21lUmVnaXN0cnk6OlByb2Nl
c3NNYW5pZmVzdEJ1ZmZlcigKICAgICAgIFRyaVN0YXRlIHN0QXBwID0gZVVuc3BlY2lmaWVkOwog
ICAgICAgVHJpU3RhdGUgc3RPcyA9IGVVbnNwZWNpZmllZDsKICAgICAgIFRyaVN0YXRlIHN0T3NW
ZXJzaW9uID0gZVVuc3BlY2lmaWVkOworICAgICAgVHJpU3RhdGUgc3REZXNrdG9wID0gZVVuc3Bl
Y2lmaWVkOwogCiAgICAgICBQUkJvb2wgYmFkRmxhZyA9IFBSX0ZBTFNFOwogCkBAIC0yNTkwLDYg
KzI2MDUsNyBAQCBuc0Nocm9tZVJlZ2lzdHJ5OjpQcm9jZXNzTWFuaWZlc3RCdWZmZXIoCiAKICAg
ICAgICAgaWYgKENoZWNrU3RyaW5nRmxhZyhrQXBwbGljYXRpb24sIHd0b2tlbiwgYXBwSUQsIHN0
QXBwKSB8fAogICAgICAgICAgICAgQ2hlY2tTdHJpbmdGbGFnKGtPcywgd3Rva2VuLCBvc1Rhcmdl
dCwgc3RPcykgfHwKKyAgICAgICAgICAgIENoZWNrU3RyaW5nRmxhZyhrRGVza3RvcCwgd3Rva2Vu
LCBkZXNrdG9wLCBzdERlc2t0b3ApIHx8CiAgICAgICAgICAgICBDaGVja1ZlcnNpb25GbGFnKGtP
c1ZlcnNpb24sIHd0b2tlbiwgb3NWZXJzaW9uLCB2Yywgc3RPc1ZlcnNpb24pIHx8CiAgICAgICAg
ICAgICBDaGVja1ZlcnNpb25GbGFnKGtBcHBWZXJzaW9uLCB3dG9rZW4sIGFwcFZlcnNpb24sIHZj
LCBzdEFwcFZlcnNpb24pKQogICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjYwMSw3ICsyNjE3LDcg
QEAgbnNDaHJvbWVSZWdpc3RyeTo6UHJvY2Vzc01hbmlmZXN0QnVmZmVyKAogICAgICAgfQogCiAg
ICAgICBpZiAoYmFkRmxhZyB8fCBzdEFwcCA9PSBlQmFkIHx8IHN0QXBwVmVyc2lvbiA9PSBlQmFk
IHx8Ci0gICAgICAgICAgc3RPcyA9PSBlQmFkIHx8IHN0T3NWZXJzaW9uID09IGVCYWQpCisgICAg
ICAgICAgc3RPcyA9PSBlQmFkIHx8IHN0T3NWZXJzaW9uID09IGVCYWQgfHwgc3REZXNrdG9wID09
IGVCYWQpCiAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICBuc0NPTVB0cjxuc0lVUkk+IGJhc2V1
cmksIG92ZXJsYXl1cmk7CkBAIC0yNjQwLDYgKzI2NTYsNyBAQCBuc0Nocm9tZVJlZ2lzdHJ5OjpQ
cm9jZXNzTWFuaWZlc3RCdWZmZXIoCiAgICAgICBUcmlTdGF0ZSBzdEFwcCA9IGVVbnNwZWNpZmll
ZDsKICAgICAgIFRyaVN0YXRlIHN0T3MgPSBlVW5zcGVjaWZpZWQ7CiAgICAgICBUcmlTdGF0ZSBz
dE9zVmVyc2lvbiA9IGVVbnNwZWNpZmllZDsKKyAgICAgIFRyaVN0YXRlIHN0RGVza3RvcCA9IGVV
bnNwZWNpZmllZDsKIAogICAgICAgUFJCb29sIGJhZEZsYWcgPSBQUl9GQUxTRTsKIApAQCAtMjY1
MCw2ICsyNjY3LDcgQEAgbnNDaHJvbWVSZWdpc3RyeTo6UHJvY2Vzc01hbmlmZXN0QnVmZmVyKAog
CiAgICAgICAgIGlmIChDaGVja1N0cmluZ0ZsYWcoa0FwcGxpY2F0aW9uLCB3dG9rZW4sIGFwcElE
LCBzdEFwcCkgfHwKICAgICAgICAgICAgIENoZWNrU3RyaW5nRmxhZyhrT3MsIHd0b2tlbiwgb3NU
YXJnZXQsIHN0T3MpIHx8CisgICAgICAgICAgICBDaGVja1N0cmluZ0ZsYWcoa0Rlc2t0b3AsIHd0
b2tlbiwgZGVza3RvcCwgc3REZXNrdG9wKSB8fAogICAgICAgICAgICAgQ2hlY2tWZXJzaW9uRmxh
ZyhrT3NWZXJzaW9uLCB3dG9rZW4sIG9zVmVyc2lvbiwgdmMsIHN0T3NWZXJzaW9uKSB8fAogICAg
ICAgICAgICAgQ2hlY2tWZXJzaW9uRmxhZyhrQXBwVmVyc2lvbiwgd3Rva2VuLCBhcHBWZXJzaW9u
LCB2Yywgc3RBcHBWZXJzaW9uKSkKICAgICAgICAgICBjb250aW51ZTsKQEAgLTI2NjEsNyArMjY3
OSw3IEBAIG5zQ2hyb21lUmVnaXN0cnk6OlByb2Nlc3NNYW5pZmVzdEJ1ZmZlcigKICAgICAgIH0K
IAogICAgICAgaWYgKGJhZEZsYWcgfHwgc3RBcHAgPT0gZUJhZCB8fCBzdEFwcFZlcnNpb24gPT0g
ZUJhZCB8fAotICAgICAgICAgIHN0T3MgPT0gZUJhZCB8fCBzdE9zVmVyc2lvbiA9PSBlQmFkKQor
ICAgICAgICAgIHN0T3MgPT0gZUJhZCB8fCBzdE9zVmVyc2lvbiA9PSBlQmFkIHx8IHN0RGVza3Rv
cCA9PSBlQmFkKQogICAgICAgICBjb250aW51ZTsKIAogICAgICAgbnNDT01QdHI8bnNJVVJJPiBj
aHJvbWV1cmksIHJlc29sdmVkdXJpOwpAQCAtMjcwMiw2ICsyNzIwLDcgQEAgbnNDaHJvbWVSZWdp
c3RyeTo6UHJvY2Vzc01hbmlmZXN0QnVmZmVyKAogICAgICAgVHJpU3RhdGUgc3RBcHAgPSBlVW5z
cGVjaWZpZWQ7CiAgICAgICBUcmlTdGF0ZSBzdE9zVmVyc2lvbiA9IGVVbnNwZWNpZmllZDsKICAg
ICAgIFRyaVN0YXRlIHN0T3MgPSBlVW5zcGVjaWZpZWQ7CisgICAgICBUcmlTdGF0ZSBzdERlc2t0
b3AgPSBlVW5zcGVjaWZpZWQ7CiAKICAgICAgIFBSQm9vbCBiYWRGbGFnID0gUFJfRkFMU0U7CiAK
QEAgLTI3MTIsNiArMjczMSw3IEBAIG5zQ2hyb21lUmVnaXN0cnk6OlByb2Nlc3NNYW5pZmVzdEJ1
ZmZlcigKIAogICAgICAgICBpZiAoQ2hlY2tTdHJpbmdGbGFnKGtBcHBsaWNhdGlvbiwgd3Rva2Vu
LCBhcHBJRCwgc3RBcHApIHx8CiAgICAgICAgICAgICBDaGVja1N0cmluZ0ZsYWcoa09zLCB3dG9r
ZW4sIG9zVGFyZ2V0LCBzdE9zKSB8fAorICAgICAgICAgICAgQ2hlY2tTdHJpbmdGbGFnKGtEZXNr
dG9wLCB3dG9rZW4sIGRlc2t0b3AsIHN0RGVza3RvcCkgfHwKICAgICAgICAgICAgIENoZWNrVmVy
c2lvbkZsYWcoa09zVmVyc2lvbiwgd3Rva2VuLCBvc1ZlcnNpb24sIHZjLCBzdE9zVmVyc2lvbikg
fHwKICAgICAgICAgICAgIENoZWNrVmVyc2lvbkZsYWcoa0FwcFZlcnNpb24sIHd0b2tlbiwgYXBw
VmVyc2lvbiwgdmMsIHN0QXBwVmVyc2lvbikpCiAgICAgICAgICAgY29udGludWU7CkBAIC0yNzIz
LDcgKzI3NDMsNyBAQCBuc0Nocm9tZVJlZ2lzdHJ5OjpQcm9jZXNzTWFuaWZlc3RCdWZmZXIoCiAg
ICAgICB9CiAKICAgICAgIGlmIChiYWRGbGFnIHx8IHN0QXBwID09IGVCYWQgfHwgc3RBcHBWZXJz
aW9uID09IGVCYWQgfHwgCi0gICAgICAgICAgc3RPcyA9PSBlQmFkIHx8IHN0T3NWZXJzaW9uID09
IGVCYWQpCisgICAgICAgICAgc3RPcyA9PSBlQmFkIHx8IHN0T3NWZXJzaW9uID09IGVCYWQgfHwg
c3REZXNrdG9wID09IGVCYWQpCiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgCiAgICAgICBuc0Rl
cGVuZGVudENTdHJpbmcgaG9zdChwYWNrYWdlKTsKLS0tIG1vemlsbGEvbW9kdWxlcy9saWJwcmVm
L3NyYy9NYWtlZmlsZS5pbi5zYXYJMjAwOS0wOS0wNSAwMDoxMDozNi4wMDAwMDAwMDAgKzAyMDAK
KysrIG1vemlsbGEvbW9kdWxlcy9saWJwcmVmL3NyYy9NYWtlZmlsZS5pbgkyMDA5LTA5LTA1IDAw
OjEwOjQyLjAwMDAwMDAwMCArMDIwMApAQCAtOTcsMyArOTcsNSBAQCBuc1ByZWZTZXJ2aWNlLiQo
T0JKX1NVRkZJWCk6IG5zUHJlZlNlcnZpCiAJQCQoTUFLRV9ERVBTX0FVVE9fQ1hYKQogCSQoRUxP
RykgJChDQ0MpICQoT1VUT1BUSU9OKSRAIC1jICQoQ09NUElMRV9DWFhGTEFHUzotTzI9LU8xKSAk
KF9WUEFUSF9TUkNTKQogZW5kaWYKKworTE9DQUxfSU5DTFVERVMgKz0gLUkkKHRvcHNyY2Rpcikv
dG9vbGtpdC94cmUKLS0tIG1vemlsbGEvbW9kdWxlcy9saWJwcmVmL3NyYy9uc1ByZWZTZXJ2aWNl
LmNwcC5zYXYJMjAwOS0wOS0wNSAwMDoxMDozNi4wMDAwMDAwMDAgKzAyMDAKKysrIG1vemlsbGEv
bW9kdWxlcy9saWJwcmVmL3NyYy9uc1ByZWZTZXJ2aWNlLmNwcAkyMDA5LTA5LTA1IDAwOjEwOjQy
LjAwMDAwMDAwMCArMDIwMApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIm5zQ09NQXJyYXku
aCIKICNpbmNsdWRlICJuc1hQQ09NQ0lELmgiCiAjaW5jbHVkZSAibnNBdXRvUHRyLmgiCisjaW5j
bHVkZSAibnNLREVVdGlscy5oIgogCiAjaW5jbHVkZSAibnNRdWlja1NvcnQuaCIKICNpbmNsdWRl
ICJwcm1lbS5oIgpAQCAtNjA2LDcgKzYwNyw4IEBAIHByZWZfTG9hZFByZWZzSW5EaXIobnNJRmls
ZSogYURpciwgY2hhcgogICByZXR1cm4gcnY7CiB9CiAKLXN0YXRpYyBuc3Jlc3VsdCBwcmVmX0xv
YWRQcmVmc0luRGlyTGlzdChjb25zdCBjaGFyICpsaXN0SWQpCitzdGF0aWMgbnNyZXN1bHQgcHJl
Zl9Mb2FkUHJlZnNJbkRpckxpc3QoY29uc3QgY2hhciAqbGlzdElkLAorICAgIGNoYXIgY29uc3Qg
KmNvbnN0ICphU3BlY2lhbEZpbGVzID0gTlVMTCwgUFJVaW50MzIgYVNwZWNpYWxGaWxlc0NvdW50
ID0gMCkKIHsKICAgbnNyZXN1bHQgcnY7CiAgIG5zQ09NUHRyPG5zSVByb3BlcnRpZXM+IGRpclN2
Yyhkb19HZXRTZXJ2aWNlKE5TX0RJUkVDVE9SWV9TRVJWSUNFX0NPTlRSQUNUSUQsICZydikpOwpA
QCAtNjI1LDcgKzYyNyw3IEBAIHN0YXRpYyBuc3Jlc3VsdCBwcmVmX0xvYWRQcmVmc0luRGlyTGlz
dCgKICAgICAgICAgbnNDT01QdHI8bnNJRmlsZT4gZGlyID0gZG9fUXVlcnlJbnRlcmZhY2UoZWxl
bSk7CiAgICAgICAgIGlmIChkaXIpIHsKICAgICAgICAgICAvLyBEbyB3ZSBjYXJlIGlmIGEgZmls
ZSBwcm92aWRlZCBieSB0aGlzIHByb2Nlc3MgZmFpbHMgdG8gbG9hZD8KLSAgICAgICAgICBwcmVm
X0xvYWRQcmVmc0luRGlyKGRpciwgbnNudWxsLCAwKTsgCisgICAgICAgICAgcHJlZl9Mb2FkUHJl
ZnNJbkRpcihkaXIsIGFTcGVjaWFsRmlsZXMsIGFTcGVjaWFsRmlsZXNDb3VudCk7IAogICAgICAg
ICB9CiAgICAgICB9CiAgICAgfQpAQCAtNjc2LDYgKzY3OCw3IEBAIHN0YXRpYyBuc3Jlc3VsdCBw
cmVmX0luaXRJbml0aWFsT2JqZWN0cygKICNpZiBkZWZpbmVkKE1PWl9XSURHRVRfUEhPVE9OKQog
CSAgLCAicGhvdG9uLmpzIgogI2VuZGlmCQkgCisgICAgICAsICIiIC8vIHBsYWNlaG9sZGVyIGZv
ciBLREUgIChlbXB0eSBpcyBvdGhlcndpc2UgaGFybWxlc3MpCiAjZWxpZiBkZWZpbmVkKFhQX09T
MikKICAgICAgICJvczJwcmVmLmpzIgogI2VsaWYgZGVmaW5lZChYUF9CRU9TKQpAQCAtNjgzLDEy
ICs2ODYsMjMgQEAgc3RhdGljIG5zcmVzdWx0IHByZWZfSW5pdEluaXRpYWxPYmplY3RzKAogI2Vu
ZGlmCiAgIH07CiAKKyAgaWYoIG5zS0RFVXRpbHM6OmtkZVNlc3Npb24oKSkgeyAvLyBUT0RPIHdo
YXQgaWYgc29tZSBzZXR1cCBhY3R1YWxseSByZXF1aXJlcyB0aGUgaGVscGVyPworICAgICAgZm9y
KCBpbnQgaSA9IDA7CisgICAgICAgICAgIGkgPCBOU19BUlJBWV9MRU5HVEgoc3BlY2lhbEZpbGVz
KTsKKyAgICAgICAgICAgKytpICkgeworICAgICAgICAgIGlmKCAqc3BlY2lhbEZpbGVzWyBpIF0g
PT0gJ1wwJyApIHsKKyAgICAgICAgICAgICAgc3BlY2lhbEZpbGVzWyBpIF0gPSAia2RlLmpzIjsK
KyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgfQorICB9CisgICAgICAK
ICAgcnYgPSBwcmVmX0xvYWRQcmVmc0luRGlyKGRlZmF1bHRQcmVmRGlyLCBzcGVjaWFsRmlsZXMs
IE5TX0FSUkFZX0xFTkdUSChzcGVjaWFsRmlsZXMpKTsKICAgaWYgKE5TX0ZBSUxFRChydikpIHsK
ICAgICBOU19XQVJOSU5HKCJFcnJvciBwYXJzaW5nIGFwcGxpY2F0aW9uIGRlZmF1bHQgcHJlZmVy
ZW5jZXMuIik7CiAgIH0KIAotICBydiA9IHByZWZfTG9hZFByZWZzSW5EaXJMaXN0KE5TX0FQUF9Q
UkVGU19ERUZBVUxUU19ESVJfTElTVCk7CisgIHJ2ID0gcHJlZl9Mb2FkUHJlZnNJbkRpckxpc3Qo
TlNfQVBQX1BSRUZTX0RFRkFVTFRTX0RJUl9MSVNULCBzcGVjaWFsRmlsZXMsIE5TX0FSUkFZX0xF
TkdUSChzcGVjaWFsRmlsZXMpKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICBO
U19DcmVhdGVTZXJ2aWNlc0Zyb21DYXRlZ29yeShOU19QUkVGU0VSVklDRV9BUFBERUZBVUxUU19U
T1BJQ19JRCwKLS0tIG1vemlsbGEvdG9vbGtpdC9jb250ZW50L2phci5tbi5zYXYJMjAwOS0wOS0w
NSAwMDoxMDozNi4wMDAwMDAwMDAgKzAyMDAKKysrIG1vemlsbGEvdG9vbGtpdC9jb250ZW50L2ph
ci5tbgkyMDA5LTA5LTA1IDAwOjEwOjQyLjAwMDAwMDAwMCArMDIwMApAQCAtNDMsNiArNDMsOCBA
QCB0b29sa2l0LmphcjoKICorIGNvbnRlbnQvZ2xvYmFsL2JpbmRpbmdzL2NvbG9ycGlja2VyLnht
bCAgICAgKHdpZGdldHMvY29sb3JwaWNrZXIueG1sKQogKisgY29udGVudC9nbG9iYWwvYmluZGlu
Z3MvZGF0ZXRpbWVwaWNrZXIueG1sICAod2lkZ2V0cy9kYXRldGltZXBpY2tlci54bWwpCiAqKyBj
b250ZW50L2dsb2JhbC9iaW5kaW5ncy9kaWFsb2cueG1sICAgICAgICAgICh3aWRnZXRzL2RpYWxv
Zy54bWwpCisqKyBjb250ZW50L2dsb2JhbC9iaW5kaW5ncy9kaWFsb2cta2RlLnhtbCAgICAgICh3
aWRnZXRzL2RpYWxvZy1rZGUueG1sKQorJSBvdmVycmlkZSBjaHJvbWU6Ly9nbG9iYWwvY29udGVu
dC9iaW5kaW5ncy9kaWFsb2cueG1sIGNocm9tZTovL2dsb2JhbC9jb250ZW50L2JpbmRpbmdzL2Rp
YWxvZy1rZGUueG1sIGRlc2t0b3A9a2RlCiAqKyBjb250ZW50L2dsb2JhbC9iaW5kaW5ncy9lZGl0
b3IueG1sICAgICAgICAgICh3aWRnZXRzL2VkaXRvci54bWwpCiAqICBjb250ZW50L2dsb2JhbC9i
aW5kaW5ncy9leHBhbmRlci54bWwgICAgICAgICh3aWRnZXRzL2V4cGFuZGVyLnhtbCkKICogIGNv
bnRlbnQvZ2xvYmFsL2JpbmRpbmdzL2ZpbGVmaWVsZC54bWwgICAgICAgKHdpZGdldHMvZmlsZWZp
ZWxkLnhtbCkKQEAgLTU2LDYgKzU4LDggQEAgdG9vbGtpdC5qYXI6CiAqKyBjb250ZW50L2dsb2Jh
bC9iaW5kaW5ncy9udW1iZXJib3gueG1sICAgICAgICh3aWRnZXRzL251bWJlcmJveC54bWwpCiAq
KyBjb250ZW50L2dsb2JhbC9iaW5kaW5ncy9wb3B1cC54bWwgICAgICAgICAgICh3aWRnZXRzL3Bv
cHVwLnhtbCkKICorIGNvbnRlbnQvZ2xvYmFsL2JpbmRpbmdzL3ByZWZlcmVuY2VzLnhtbCAgICAg
KHdpZGdldHMvcHJlZmVyZW5jZXMueG1sKQorKisgY29udGVudC9nbG9iYWwvYmluZGluZ3MvcHJl
ZmVyZW5jZXMta2RlLnhtbCAod2lkZ2V0cy9wcmVmZXJlbmNlcy1rZGUueG1sKQorJSBvdmVycmlk
ZSBjaHJvbWU6Ly9nbG9iYWwvY29udGVudC9iaW5kaW5ncy9wcmVmZXJlbmNlcy54bWwgY2hyb21l
Oi8vZ2xvYmFsL2NvbnRlbnQvYmluZGluZ3MvcHJlZmVyZW5jZXMta2RlLnhtbCBkZXNrdG9wPWtk
ZQogKisgY29udGVudC9nbG9iYWwvYmluZGluZ3MvcHJvZ3Jlc3NtZXRlci54bWwgICAod2lkZ2V0
cy9wcm9ncmVzc21ldGVyLnhtbCkKICorIGNvbnRlbnQvZ2xvYmFsL2JpbmRpbmdzL3JhZGlvLnht
bCAgICAgICAgICAgKHdpZGdldHMvcmFkaW8ueG1sKQogKisgY29udGVudC9nbG9iYWwvYmluZGlu
Z3MvcmVzaXplci54bWwgICAgICAgICAod2lkZ2V0cy9yZXNpemVyLnhtbCkKLS0tIG1vemlsbGEv
dG9vbGtpdC9jb250ZW50L3dpZGdldHMvZGlhbG9nLWtkZS54bWwuc2F2CTIwMDktMDktMDUgMDA6
MTA6MzYuMDAwMDAwMDAwICswMjAwCisrKyBtb3ppbGxhL3Rvb2xraXQvY29udGVudC93aWRnZXRz
L2RpYWxvZy1rZGUueG1sCTIwMDktMDktMDUgMDA6MTA6NDIuMDAwMDAwMDAwICswMjAwCkBAIC0x
OSw3ICsxOSw3IEBACiAgICAgICAgICAgCiAgICAgICA8eHVsOmhib3ggY2xhc3M9ImRpYWxvZy1i
dXR0b24tYm94IiBhbm9uaWQ9ImJ1dHRvbnMiCiAgICAgICAgICAgICAgICAgeGJsOmluaGVyaXRz
PSJwYWNrPWJ1dHRvbnBhY2ssYWxpZ249YnV0dG9uYWxpZ24sZGlyPWJ1dHRvbmRpcixvcmllbnQ9
YnV0dG9ub3JpZW50IgotI2lmZGVmIFhQX1VOSVgKKyNpZmRlZiBYUF9VTklYX0dOT01FCiAgICAg
ICAgICAgICAgICAgPgogICAgICAgICA8eHVsOmJ1dHRvbiBkbGd0eXBlPSJkaXNjbG9zdXJlIiBj
bGFzcz0iZGlhbG9nLWJ1dHRvbiIgaGlkZGVuPSJ0cnVlIi8+CiAgICAgICAgIDx4dWw6YnV0dG9u
IGRsZ3R5cGU9ImhlbHAiIGNsYXNzPSJkaWFsb2ctYnV0dG9uIiBoaWRkZW49InRydWUiLz4KQEAg
LTI4LDYgKzI4LDE1IEBACiAgICAgICAgIDx4dWw6c3BhY2VyIGFub25pZD0ic3BhY2VyIiBmbGV4
PSIxIi8+CiAgICAgICAgIDx4dWw6YnV0dG9uIGRsZ3R5cGU9ImNhbmNlbCIgY2xhc3M9ImRpYWxv
Zy1idXR0b24iLz4KICAgICAgICAgPHh1bDpidXR0b24gZGxndHlwZT0iYWNjZXB0IiBjbGFzcz0i
ZGlhbG9nLWJ1dHRvbiIgeGJsOmluaGVyaXRzPSJkaXNhYmxlZD1idXR0b25kaXNhYmxlZGFjY2Vw
dCIvPgorI2VsaWYgWFBfVU5JWAorICAgICAgICAgICAgICAgIHBhY2s9ImVuZCI+CisgICAgICAg
IDx4dWw6YnV0dG9uIGRsZ3R5cGU9ImhlbHAiIGNsYXNzPSJkaWFsb2ctYnV0dG9uIiBoaWRkZW49
InRydWUiLz4KKyAgICAgICAgPHh1bDpidXR0b24gZGxndHlwZT0iZXh0cmEyIiBjbGFzcz0iZGlh
bG9nLWJ1dHRvbiIgaGlkZGVuPSJ0cnVlIi8+CisgICAgICAgIDx4dWw6c3BhY2VyIGFub25pZD0i
c3BhY2VyIiBmbGV4PSIxIiBoaWRkZW49InRydWUiLz4KKyAgICAgICAgPHh1bDpidXR0b24gZGxn
dHlwZT0iYWNjZXB0IiBjbGFzcz0iZGlhbG9nLWJ1dHRvbiIgeGJsOmluaGVyaXRzPSJkaXNhYmxl
ZD1idXR0b25kaXNhYmxlZGFjY2VwdCIvPgorICAgICAgICA8eHVsOmJ1dHRvbiBkbGd0eXBlPSJl
eHRyYTEiIGNsYXNzPSJkaWFsb2ctYnV0dG9uIiBoaWRkZW49InRydWUiLz4KKyAgICAgICAgPHh1
bDpidXR0b24gZGxndHlwZT0iY2FuY2VsIiBjbGFzcz0iZGlhbG9nLWJ1dHRvbiIvPgorICAgICAg
ICA8eHVsOmJ1dHRvbiBkbGd0eXBlPSJkaXNjbG9zdXJlIiBjbGFzcz0iZGlhbG9nLWJ1dHRvbiIg
aGlkZGVuPSJ0cnVlIi8+CiAjZWxzZQogICAgICAgICAgICAgICAgIHBhY2s9ImVuZCI+CiAgICAg
ICAgIDx4dWw6YnV0dG9uIGRsZ3R5cGU9ImV4dHJhMiIgY2xhc3M9ImRpYWxvZy1idXR0b24iIGhp
ZGRlbj0idHJ1ZSIvPgotLS0gbW96aWxsYS90b29sa2l0L2NvbnRlbnQvd2lkZ2V0cy9wcmVmZXJl
bmNlcy1rZGUueG1sLnNhdgkyMDA5LTA5LTA1IDAwOjEwOjM2LjAwMDAwMDAwMCArMDIwMAorKysg
bW96aWxsYS90b29sa2l0L2NvbnRlbnQvd2lkZ2V0cy9wcmVmZXJlbmNlcy1rZGUueG1sCTIwMDkt
MDktMDUgMDA6MTA6NDIuMDAwMDAwMDAwICswMjAwCkBAIC01NzMsNyArNTczLDcgQEAKICAgICAg
ICAgPC94dWw6ZGVjaz4KICAgICAgIDwveHVsOmhib3g+CiAgICAgICA8eHVsOmhib3ggYW5vbmlk
PSJkbGctYnV0dG9ucyIgY2xhc3M9InByZWZXaW5kb3ctZGxnYnV0dG9ucyIKLSNpZmRlZiBYUF9V
TklYCisjaWZkZWYgWFBfVU5JWF9HTk9NRQogICAgICAgICAgICAgICAgID4KICAgICAgICAgPHh1
bDpidXR0b24gZGxndHlwZT0iZGlzY2xvc3VyZSIgY2xhc3M9ImRpYWxvZy1idXR0b24iIGhpZGRl
bj0idHJ1ZSIvPgogICAgICAgICA8eHVsOmJ1dHRvbiBkbGd0eXBlPSJoZWxwIiBjbGFzcz0iZGlh
bG9nLWJ1dHRvbiIgaGlkZGVuPSJ0cnVlIiBpY29uPSJoZWxwIi8+CkBAIC01ODIsNiArNTgyLDE1
IEBACiAgICAgICAgIDx4dWw6c3BhY2VyIGFub25pZD0ic3BhY2VyIiBmbGV4PSIxIi8+CiAgICAg
ICAgIDx4dWw6YnV0dG9uIGRsZ3R5cGU9ImNhbmNlbCIgY2xhc3M9ImRpYWxvZy1idXR0b24iIGlj
b249ImNhbmNlbCIvPgogICAgICAgICA8eHVsOmJ1dHRvbiBkbGd0eXBlPSJhY2NlcHQiIGNsYXNz
PSJkaWFsb2ctYnV0dG9uIiBpY29uPSJhY2NlcHQiLz4KKyNlbGlmIFhQX1VOSVgKKyAgICAgICAg
ICAgICAgICBwYWNrPSJlbmQiPgorICAgICAgICA8eHVsOmJ1dHRvbiBkbGd0eXBlPSJoZWxwIiBj
bGFzcz0iZGlhbG9nLWJ1dHRvbiIgaGlkZGVuPSJ0cnVlIiBpY29uPSJoZWxwIi8+CisgICAgICAg
IDx4dWw6YnV0dG9uIGRsZ3R5cGU9ImV4dHJhMiIgY2xhc3M9ImRpYWxvZy1idXR0b24iIGhpZGRl
bj0idHJ1ZSIvPgorICAgICAgICA8eHVsOnNwYWNlciBhbm9uaWQ9InNwYWNlciIgZmxleD0iMSIv
PgorICAgICAgICA8eHVsOmJ1dHRvbiBkbGd0eXBlPSJhY2NlcHQiIGNsYXNzPSJkaWFsb2ctYnV0
dG9uIiBpY29uPSJhY2NlcHQiLz4KKyAgICAgICAgPHh1bDpidXR0b24gZGxndHlwZT0iZXh0cmEx
IiBjbGFzcz0iZGlhbG9nLWJ1dHRvbiIgaGlkZGVuPSJ0cnVlIi8+CisgICAgICAgIDx4dWw6YnV0
dG9uIGRsZ3R5cGU9ImNhbmNlbCIgY2xhc3M9ImRpYWxvZy1idXR0b24iIGljb249ImNhbmNlbCIv
PgorICAgICAgICA8eHVsOmJ1dHRvbiBkbGd0eXBlPSJkaXNjbG9zdXJlIiBjbGFzcz0iZGlhbG9n
LWJ1dHRvbiIgaGlkZGVuPSJ0cnVlIi8+CiAjZWxzZQogICAgICAgICAgICAgICAgIHBhY2s9ImVu
ZCI+CiAgICAgICAgIDx4dWw6YnV0dG9uIGRsZ3R5cGU9ImV4dHJhMiIgY2xhc3M9ImRpYWxvZy1i
dXR0b24iIGhpZGRlbj0idHJ1ZSIvPgotLS0gbW96aWxsYS90b29sa2l0L3N5c3RlbS91bml4cHJv
eHkvTWFrZWZpbGUuaW4uc2F2CTIwMDktMDktMDUgMDA6MTA6MzYuMDAwMDAwMDAwICswMjAwCisr
KyBtb3ppbGxhL3Rvb2xraXQvc3lzdGVtL3VuaXhwcm94eS9NYWtlZmlsZS5pbgkyMDA5LTA5LTA1
IDAwOjEwOjQyLjAwMDAwMDAwMCArMDIwMApAQCAtNjQsNCArNjQsNiBAQCBDUFBTUkNTID0gXAog
ICAgICAgICBuc1VuaXhTeXN0ZW1Qcm94eVNldHRpbmdzLmNwcCBcCiAgICAgICAgICQoTlVMTCkK
IAorTE9DQUxfSU5DTFVERVMgKz0gLUkkKHRvcHNyY2RpcikvdG9vbGtpdC94cmUKKwogaW5jbHVk
ZSAkKHRvcHNyY2RpcikvY29uZmlnL3J1bGVzLm1rCi0tLSBtb3ppbGxhL3Rvb2xraXQvc3lzdGVt
L3VuaXhwcm94eS9uc1VuaXhTeXN0ZW1Qcm94eVNldHRpbmdzLmNwcC5zYXYJMjAwOS0wOS0wNSAw
MDoxMDozNi4wMDAwMDAwMDAgKzAyMDAKKysrIG1vemlsbGEvdG9vbGtpdC9zeXN0ZW0vdW5peHBy
b3h5L25zVW5peFN5c3RlbVByb3h5U2V0dGluZ3MuY3BwCTIwMDktMDktMDUgMDA6MTA6NDIuMDAw
MDAwMDAwICswMjAwCkBAIC00OSw2ICs0OSw4IEBACiAjaW5jbHVkZSAibnNQcmludGZDU3RyaW5n
LmgiCiAjaW5jbHVkZSAibnNOZXRVdGlsLmgiCiAjaW5jbHVkZSAibnNJU3VwcG9ydHNQcmltaXRp
dmVzLmgiCisjaW5jbHVkZSAibnNWb2lkQXJyYXkuaCIKKyNpbmNsdWRlICJuc0tERVV0aWxzLmgi
CiAKIGNsYXNzIG5zVW5peFN5c3RlbVByb3h5U2V0dGluZ3MgOiBwdWJsaWMgbnNJU3lzdGVtUHJv
eHlTZXR0aW5ncyB7CiBwdWJsaWM6CkBAIC02NSw2ICs2Nyw3IEBAIHByaXZhdGU6CiAgIFBSQm9v
bCBJc1Byb3h5TW9kZShjb25zdCBjaGFyKiBhTW9kZSk7CiAgIG5zcmVzdWx0IFNldFByb3h5UmVz
dWx0RnJvbUdDb25mKGNvbnN0IGNoYXIqIGFLZXlCYXNlLCBjb25zdCBjaGFyKiBhVHlwZSwgbnNB
Q1N0cmluZyYgYVJlc3VsdCk7CiAgIG5zcmVzdWx0IEdldFByb3h5RnJvbUdDb25mKGNvbnN0IG5z
QUNTdHJpbmcmIGFTY2hlbWUsIGNvbnN0IG5zQUNTdHJpbmcmIGFIb3N0LCBQUkludDMyIGFQb3J0
LCBuc0FDU3RyaW5nJiBhUmVzdWx0KTsKKyAgbnNyZXN1bHQgR2V0UHJveHlGcm9tS0RFKGNvbnN0
IG5zQUNTdHJpbmcmIGFTY2hlbWUsIGNvbnN0IG5zQUNTdHJpbmcmIGFIb3N0LCBQUkludDMyIGFQ
b3J0LCBuc0FDU3RyaW5nJiBhUmVzdWx0KTsKIH07CiAKIE5TX0lNUExfSVNVUFBPUlRTMShuc1Vu
aXhTeXN0ZW1Qcm94eVNldHRpbmdzLCBuc0lTeXN0ZW1Qcm94eVNldHRpbmdzKQpAQCAtNDEyLDYg
KzQxNSw5IEBAIG5zVW5peFN5c3RlbVByb3h5U2V0dGluZ3M6OkdldFByb3h5Rm9yVVIKICAgcnYg
PSBhVVJJLT5HZXRQb3J0KCZwb3J0KTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAor
ICBpZiggbnNLREVVdGlsczo6a2RlU3VwcG9ydCgpKQorICAgIHJldHVybiBHZXRQcm94eUZyb21L
REUoIHNjaGVtZSwgaG9zdCwgcG9ydCwgYVJlc3VsdCApOworCiAgIGlmICghbUdDb25mKQogICAg
IHJldHVybiBHZXRQcm94eUZyb21FbnZpcm9ubWVudChzY2hlbWUsIGhvc3QsIHBvcnQsIGFSZXN1
bHQpOwogCkBAIC00MzIsMyArNDM4LDI4IEBAIHN0YXRpYyBjb25zdCBuc01vZHVsZUNvbXBvbmVu
dEluZm8gY29tcG8KIH07CiAKIE5TX0lNUExfTlNHRVRNT0RVTEUobnNVbml4UHJveHlNb2R1bGUs
IGNvbXBvbmVudHMpCisKK25zcmVzdWx0Cituc1VuaXhTeXN0ZW1Qcm94eVNldHRpbmdzOjpHZXRQ
cm94eUZyb21LREUoY29uc3QgbnNBQ1N0cmluZyYgYVNjaGVtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQUNTdHJpbmcmIGFIb3N0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhUG9ydCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQUNTdHJpbmcm
IGFSZXN1bHQpCit7CisgIG5zQ0F1dG9TdHJpbmcgdXJsOworICB1cmwgPSBhU2NoZW1lOworICB1
cmwgKz0gIjovLyI7CisgIHVybCArPSBhSG9zdDsKKyAgaWYoIGFQb3J0ID49IDAgKQorICAgICAg
eworICAgICAgdXJsICs9ICI6IjsKKyAgICAgIHVybCArPSBuc1ByaW50ZkNTdHJpbmcoIiVkIiwg
YVBvcnQpOworICAgICAgfQorICBuc0NTdHJpbmdBcnJheSBjb21tYW5kOworICBjb21tYW5kLkFw
cGVuZENTdHJpbmcoIE5TX0xJVEVSQUxfQ1NUUklORyggIkdFVFBST1hZIiApKTsKKyAgY29tbWFu
ZC5BcHBlbmRDU3RyaW5nKCB1cmwgKTsKKyAgbnNDU3RyaW5nQXJyYXkgcmVzdWx0OworICBpZigg
IW5zS0RFVXRpbHM6OmNvbW1hbmQoIGNvbW1hbmQsICZyZXN1bHQgKSB8fCByZXN1bHQuQ291bnQo
KSAhPSAxICkKKyAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOworICBhUmVzdWx0ID0gKnJl
c3VsdFsgMCBdOworICByZXR1cm4gTlNfT0s7Cit9Ci0tLSBtb3ppbGxhL3Rvb2xraXQveHJlL01h
a2VmaWxlLmluLnNhdgkyMDA5LTA5LTA1IDAwOjEwOjM2LjAwMDAwMDAwMCArMDIwMAorKysgbW96
aWxsYS90b29sa2l0L3hyZS9NYWtlZmlsZS5pbgkyMDA5LTA5LTA1IDAwOjEwOjQyLjAwMDAwMDAw
MCArMDIwMApAQCAtMTMzLDcgKzEzMyw3IEBAIGlmZXEgKCQoTU9aX1dJREdFVF9UT09MS0lUKSxi
ZW9zKQogQ1BQU1JDUyArPSBuc05hdGl2ZUFwcFN1cHBvcnRCZU9TLmNwcAogZWxzZQogaWZlcSAo
JChNT1pfV0lER0VUX1RPT0xLSVQpLGd0azIpCi1DUFBTUkNTICs9IG5zTmF0aXZlQXBwU3VwcG9y
dFVuaXguY3BwCitDUFBTUkNTICs9IG5zTmF0aXZlQXBwU3VwcG9ydFVuaXguY3BwIG5zS0RFVXRp
bHMuY3BwCiBlbHNlCiBDUFBTUkNTICs9IG5zTmF0aXZlQXBwU3VwcG9ydERlZmF1bHQuY3BwCiBl
bmRpZgotLS0gbW96aWxsYS90b29sa2l0L3hyZS9uc0tERVV0aWxzLmNwcC5zYXYJMjAwOS0wOS0w
NSAwMDoxMDozNi4wMDAwMDAwMDAgKzAyMDAKKysrIG1vemlsbGEvdG9vbGtpdC94cmUvbnNLREVV
dGlscy5jcHAJMjAwOS0wOS0wNSAxMDowNTowMC4wMDAwMDAwMDAgKzAyMDAKQEAgLTAsMCArMSwz
MjkgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogNDsgaW5kZW50LXRhYnMtbW9kZTog
bmlsOyBjLWJhc2ljLW9mZnNldDogNCAtKi0gKi8KKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxP
Q0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRo
ZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGlj
IExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNl
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91
IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemls
bGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5z
ZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5U
WSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNl
CisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0
YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBp
cyBVbml4IE5hdGl2ZSBBcHAgU3VwcG9ydC4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIg
b2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIE1vemlsbGEgQ29ycG9yYXRpb24uCisgKiBQb3J0
aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAy
MDA3CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgor
ICogQ29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9m
IHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIp
LCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIu
MSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25z
IG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhv
c2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUg
TEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2Yg
dGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBk
ZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVt
IHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhl
IEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25z
IGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5k
ZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExH
UEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworI2luY2x1ZGUg
Im5zS0RFVXRpbHMuaCIKKyNpbmNsdWRlICJuc0lXaWRnZXQuaCIKKworI2luY2x1ZGUgPGd0ay9n
dGt3aW5kb3cuaD4KKyNpbmNsdWRlIDxndGsvZ3RrbWFpbi5oPgorCisjaW5jbHVkZSA8bGltaXRz
Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUg
PHVuaXN0ZC5oPgorI2luY2x1ZGUgPFgxMS9YbGliLmg+CisKKy8vI2RlZmluZSBERUJVR19LREUK
KyNpZmRlZiBERUJVR19LREUKKyNkZWZpbmUgS01PWklMTEFIRUxQRVIgImttb3ppbGxhaGVscGVy
IgorI2Vsc2UKKy8vIG5vdCBuZWVkIGZvciBsaWI2NCwgaXQncyBhIGJpbmFyeQorI2RlZmluZSBL
TU9aSUxMQUhFTFBFUiAiL3Vzci9saWIvbW96aWxsYS9rbW96aWxsYWhlbHBlciIKKyNlbmRpZgor
CisjZGVmaW5lIEtNT1pJTExBSEVMUEVSX1ZFUlNJT04gNAorI2RlZmluZSBNQUtFX1NUUjIoIG4g
KSAjbgorI2RlZmluZSBNQUtFX1NUUiggbiApIE1BS0VfU1RSMiggbiApCisKK3N0YXRpYyBib29s
IGdldEtkZVNlc3Npb24oKQorICAgIHsKKyAgICBEaXNwbGF5KiBkcHkgPSBYT3BlbkRpc3BsYXko
IE5VTEwgKTsKKyAgICBpZiggZHB5ID09IE5VTEwgKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgQXRvbSBrZGVfZnVsbF9zZXNzaW9uID0gWEludGVybkF0b20oIGRweSwgIktERV9GVUxMX1NF
U1NJT04iLCBUcnVlICk7CisgICAgYm9vbCBrZGUgPSBmYWxzZTsKKyAgICBpZigga2RlX2Z1bGxf
c2Vzc2lvbiAhPSBOb25lICkKKyAgICAgICAgeworICAgICAgICBpbnQgY250OworICAgICAgICBp
ZiggQXRvbSogcHJvcHMgPSBYTGlzdFByb3BlcnRpZXMoIGRweSwgRGVmYXVsdFJvb3RXaW5kb3co
IGRweSApLCAmY250ICkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBmb3IoIGludCBpID0g
MDsKKyAgICAgICAgICAgICAgICAgaSA8IGNudDsKKyAgICAgICAgICAgICAgICAgKytpICkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHByb3BzWyBpIF0gPT0ga2RlX2Z1
bGxfc2Vzc2lvbiApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
a2RlID0gdHJ1ZTsKKyNpZmRlZiBERUJVR19LREUKKyAgICAgICAgICAgICAgICAgICAgZnByaW50
Ziggc3RkZXJyLCAiS0RFIFNFU1NJT04gJWRcbiIsIGtkZSApOworI2VuZGlmCisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgWEZyZWUoIHByb3BzICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICBYQ2xvc2VEaXNwbGF5KCBkcHkgKTsKKyAgICByZXR1cm4ga2RlOworICAgIH0KKworc3Rh
dGljIGJvb2wgZ2V0S2RlU3VwcG9ydCgpCisgICAgeworICAgIG5zQ1N0cmluZ0FycmF5IGNvbW1h
bmQ7CisgICAgY29tbWFuZC5BcHBlbmRDU3RyaW5nKCBOU19MSVRFUkFMX0NTVFJJTkcoICJDSEVD
SyIgKSk7CisgICAgY29tbWFuZC5BcHBlbmRDU3RyaW5nKCBOU19MSVRFUkFMX0NTVFJJTkcoIE1B
S0VfU1RSKCBLTU9aSUxMQUhFTFBFUl9WRVJTSU9OICkpKTsKKyAgICBib29sIGtkZSA9IG5zS0RF
VXRpbHM6OmNvbW1hbmQoIGNvbW1hbmQgKTsKKyNpZmRlZiBERUJVR19LREUKKyAgICBmcHJpbnRm
KCBzdGRlcnIsICJLREUgUlVOTklORyAlZFxuIiwga2RlICk7CisjZW5kaWYKKyAgICByZXR1cm4g
a2RlOworICAgIH0KKworbnNLREVVdGlsczo6bnNLREVVdGlscygpCisgICAgOiBjb21tYW5kRmls
ZSggTlVMTCApCisgICAgLCByZXBseUZpbGUoIE5VTEwgKQorICAgIHsKKyAgICB9CisKK25zS0RF
VXRpbHM6On5uc0tERVV0aWxzKCkKKyAgICB7CisvLyAgICBjbG9zZUhlbHBlcigpOyBub3QgYWN0
dWFsbHkgdXNlZnVsLCBleGl0aW5nIHdpbGwgY2xvc2UgdGhlIGZkIHRvbworICAgIH0KKworbnNL
REVVdGlscyogbnNLREVVdGlsczo6c2VsZigpCisgICAgeworICAgIHN0YXRpYyBuc0tERVV0aWxz
IHM7CisgICAgcmV0dXJuICZzOworICAgIH0KKworc3RhdGljIGJvb2wgaGVscGVyUnVubmluZyA9
IGZhbHNlOworc3RhdGljIGJvb2wgaGVscGVyRmFpbGVkID0gZmFsc2U7CisKK2Jvb2wgbnNLREVV
dGlsczo6a2RlU2Vzc2lvbigpCisgICAgeworICAgIHN0YXRpYyBib29sIHNlc3Npb24gPSBnZXRL
ZGVTZXNzaW9uKCk7CisgICAgcmV0dXJuIHNlc3Npb247CisgICAgfQorCitib29sIG5zS0RFVXRp
bHM6OmtkZVN1cHBvcnQoKQorICAgIHsKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ID0ga2RlU2Vz
c2lvbigpICYmIGdldEtkZVN1cHBvcnQoKTsKKyAgICByZXR1cm4gc3VwcG9ydCAmJiBoZWxwZXJS
dW5uaW5nOworICAgIH0KKworc3RydWN0IG5zS0RFQ29tbWFuZERhdGEKKyAgICB7CisgICAgRklM
RSogZmlsZTsKKyAgICBuc0NTdHJpbmdBcnJheSogb3V0cHV0OworICAgIEdNYWluTG9vcCogbG9v
cDsKKyAgICBib29sIHN1Y2Nlc3M7CisgICAgfTsKKworc3RhdGljIGdib29sZWFuIGtkZVJlYWRG
dW5jKCBHSU9DaGFubmVsKiwgR0lPQ29uZGl0aW9uLCBncG9pbnRlciBkYXRhICkKKyAgICB7Cisg
ICAgbnNLREVDb21tYW5kRGF0YSogcCA9IHN0YXRpY19jYXN0PCBuc0tERUNvbW1hbmREYXRhKiA+
KCBkYXRhICk7CisgICAgY2hhciBidWZbIDgxOTIgXTsgLy8gVE9ETyBiaWcgZW5vdWdoCisgICAg
Ym9vbCBjb21tYW5kX2RvbmUgPSBmYWxzZTsKKyAgICBib29sIGNvbW1hbmRfZmFpbGVkID0gZmFs
c2U7CisgICAgd2hpbGUoICFjb21tYW5kX2RvbmUgJiYgIWNvbW1hbmRfZmFpbGVkICYmIGZnZXRz
KCBidWYsIDgxOTIsIHAtPmZpbGUgKSAhPSBOVUxMICkKKyAgICAgICAgeyAvLyBUT0RPIHdoYXQg
aWYgdGhlIGtlcm5lbCBzcGxpdHMgYSBsaW5lIGludG8gdHdvIGNodW5rcz8KKy8vI2lmZGVmIERF
QlVHX0tERQorLy8gICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlJFQUQ6ICVzICVkXG4iLCBidWYs
IGZlb2YoIHAtPmZpbGUgKSk7CisvLyNlbmRpZgorICAgICAgICBpZiggY2hhciogZW9sID0gc3Ry
Y2hyKCBidWYsICdcbicgKSkKKyAgICAgICAgICAgICplb2wgPSAnXDAnOworICAgICAgICBjb21t
YW5kX2RvbmUgPSAoIHN0cmNtcCggYnVmLCAiXFwxIiApID09IDAgKTsKKyAgICAgICAgY29tbWFu
ZF9mYWlsZWQgPSAoIHN0cmNtcCggYnVmLCAiXFwwIiApID09IDAgKTsKKyAgICAgICAgbnNDQXV0
b1N0cmluZyBsaW5lKCBidWYgKTsKKyAgICAgICAgbGluZS5SZXBsYWNlU3Vic3RyaW5nKCAiXFxu
IiwgIlxuIiApOworICAgICAgICBsaW5lLlJlcGxhY2VTdWJzdHJpbmcoICJcXCIgIlxcIiwgIlxc
IiApOyAvLyAgXFwgLT4gXCAsIGkuZS4gdW5lc2NhcGUKKyAgICAgICAgaWYoIHAtPm91dHB1dCAm
JiAhKCBjb21tYW5kX2RvbmUgfHwgY29tbWFuZF9mYWlsZWQgKSkKKyAgICAgICAgICAgIHAtPm91
dHB1dC0+QXBwZW5kQ1N0cmluZyggbnNDU3RyaW5nKCBidWYgKSk7IC8vIFRPRE8gdXRmOD8KKyAg
ICAgICAgfQorICAgIGJvb2wgcXVpdCA9IGZhbHNlOworICAgIGlmKCBmZW9mKCBwLT5maWxlICkg
fHwgY29tbWFuZF9mYWlsZWQgKQorICAgICAgICB7CisgICAgICAgIHF1aXQgPSB0cnVlOworICAg
ICAgICBwLT5zdWNjZXNzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICBpZiggY29tbWFuZF9kb25l
ICkKKyAgICAgICAgeyAvLyByZWFkaW5nIG9uZSByZXBseSBmaW5pc2hlZAorICAgICAgICBxdWl0
ID0gdHJ1ZTsKKyAgICAgICAgcC0+c3VjY2VzcyA9IHRydWU7CisgICAgICAgIH0KKyAgICBpZigg
cXVpdCApCisgICAgICAgIHsKKyAgICAgICAgaWYoIHAtPmxvb3AgKQorICAgICAgICAgICAgZ19t
YWluX2xvb3BfcXVpdCggcC0+bG9vcCApOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAg
IH0KKyAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKK2Jvb2wgbnNLREVVdGlsczo6Y29tbWFuZCgg
Y29uc3QgbnNDU3RyaW5nQXJyYXkmIGNvbW1hbmQsIG5zQ1N0cmluZ0FycmF5KiBvdXRwdXQgKQor
ICAgIHsKKyAgICByZXR1cm4gc2VsZigpLT5pbnRlcm5hbENvbW1hbmQoIGNvbW1hbmQsIE5VTEws
IGZhbHNlLCBvdXRwdXQgKTsKKyAgICB9CisKK2Jvb2wgbnNLREVVdGlsczo6Y29tbWFuZEJsb2Nr
VWkoIGNvbnN0IG5zQ1N0cmluZ0FycmF5JiBjb21tYW5kLCBjb25zdCBHdGtXaW5kb3cqIHBhcmVu
dCwgbnNDU3RyaW5nQXJyYXkqIG91dHB1dCApCisgICAgeworICAgIHJldHVybiBzZWxmKCktPmlu
dGVybmFsQ29tbWFuZCggY29tbWFuZCwgcGFyZW50LCB0cnVlLCBvdXRwdXQgKTsKKyAgICB9CisK
K2Jvb2wgbnNLREVVdGlsczo6aW50ZXJuYWxDb21tYW5kKCBjb25zdCBuc0NTdHJpbmdBcnJheSYg
Y29tbWFuZCwgY29uc3QgR3RrV2luZG93KiBwYXJlbnQsIGJvb2wgYmxvY2tVaSwKKyAgICBuc0NT
dHJpbmdBcnJheSogb3V0cHV0ICkKKyAgICB7CisgICAgaWYoICFzdGFydEhlbHBlcigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgZmVlZENvbW1hbmQoIGNvbW1hbmQgKTsKKyAgICAvLyBk
byBub3Qgc3RvcmUgdGhlIGRhdGEgaW4gJ3RoaXMnIGJ1dCBpbiBleHRyYSBzdHJ1Y3R1cmUsIGp1
c3QgaW4gY2FzZSB0aGVyZQorICAgIC8vIGlzIHJlZW50cmFuY3kgKGNhbiB0aGVyZSBiZT8gdGhl
IGV2ZW50IGxvb3AgaXMgcmUtZW50ZXJlZCkKKyAgICBuc0tERUNvbW1hbmREYXRhIGRhdGE7Cisg
ICAgZGF0YS5maWxlID0gcmVwbHlGaWxlOworICAgIGRhdGEub3V0cHV0ID0gb3V0cHV0OworICAg
IGRhdGEuc3VjY2VzcyA9IGZhbHNlOworICAgIGlmKCBibG9ja1VpICkKKyAgICAgICAgeworICAg
ICAgICBkYXRhLmxvb3AgPSBnX21haW5fbG9vcF9uZXcoIE5VTEwsIEZBTFNFICk7CisgICAgICAg
IEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoIEdUS19XSU5ET1dfVE9QTEVWRUwg
KTsKKyAgICAgICAgaWYoIHBhcmVudCAmJiBwYXJlbnQtPmdyb3VwICkKKyAgICAgICAgICAgIGd0
a193aW5kb3dfZ3JvdXBfYWRkX3dpbmRvdyggcGFyZW50LT5ncm91cCwgR1RLX1dJTkRPVyggd2lu
ZG93ICkpOworICAgICAgICBndGtfd2lkZ2V0X3JlYWxpemUoIHdpbmRvdyApOworICAgICAgICBn
dGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUoIHdpbmRvdywgVFJVRSApOworICAgICAgICBndGtfZ3Jh
Yl9hZGQoIHdpbmRvdyApOworICAgICAgICBHSU9DaGFubmVsKiBjaGFubmVsID0gZ19pb19jaGFu
bmVsX3VuaXhfbmV3KCBmaWxlbm8oIGRhdGEuZmlsZSApKTsKKyAgICAgICAgZ19pb19hZGRfd2F0
Y2goIGNoYW5uZWwsIHN0YXRpY19jYXN0PCBHSU9Db25kaXRpb24gPiggR19JT19JTiB8IEdfSU9f
RVJSIHwgR19JT19IVVAgKSwga2RlUmVhZEZ1bmMsICZkYXRhICk7CisgICAgICAgIGdfaW9fY2hh
bm5lbF91bnJlZiggY2hhbm5lbCApOworICAgICAgICBnX21haW5fbG9vcF9ydW4oIGRhdGEubG9v
cCApOworICAgICAgICBnX21haW5fbG9vcF91bnJlZiggZGF0YS5sb29wICk7CisgICAgICAgIGd0
a19ncmFiX3JlbW92ZSggd2luZG93ICk7CisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveSggd2lu
ZG93ICk7CisgICAgICAgIH0KKyAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgZGF0YS5sb29w
ID0gTlVMTDsKKyAgICAgICAgd2hpbGUoIGtkZVJlYWRGdW5jKCBOVUxMLCBzdGF0aWNfY2FzdDwg
R0lPQ29uZGl0aW9uID4oIDAgKSwgJmRhdGEgKSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgfQor
ICAgIHJldHVybiBkYXRhLnN1Y2Nlc3M7CisgICAgfQorCitib29sIG5zS0RFVXRpbHM6OnN0YXJ0
SGVscGVyKCkKKyAgICB7CisgICAgaWYoIGhlbHBlclJ1bm5pbmcgKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiggaGVscGVyRmFpbGVkICkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGhlbHBlckZhaWxlZCA9IHRydWU7CisgICAgaW50IGZkY29tbWFuZFsgMiBdOworICAgIGludCBm
ZHJlcGx5WyAyIF07CisgICAgaWYoIHBpcGUoIGZkY29tbWFuZCApIDwgMCApCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiggcGlwZSggZmRyZXBseSApIDwgMCApCisgICAgICAgIHsKKyAg
ICAgICAgY2xvc2UoIGZkY29tbWFuZFsgMCBdICk7CisgICAgICAgIGNsb3NlKCBmZGNvbW1hbmRb
IDEgXSApOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICBjaGFyKiBhcmdz
WyAyIF0gPSB7IGNvbnN0X2Nhc3Q8IGNoYXIqID4oIEtNT1pJTExBSEVMUEVSICksIE5VTEwgfTsK
KyAgICBzd2l0Y2goIGZvcmsoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIC0xOgorICAgICAg
ICAgICAgeworICAgICAgICAgICAgY2xvc2UoIGZkY29tbWFuZFsgMCBdICk7CisgICAgICAgICAg
ICBjbG9zZSggZmRjb21tYW5kWyAxIF0gKTsKKyAgICAgICAgICAgIGNsb3NlKCBmZHJlcGx5WyAw
IF0gKTsKKyAgICAgICAgICAgIGNsb3NlKCBmZHJlcGx5WyAxIF0gKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAwOiAvLyBjaGlsZAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgaWYoIGR1cDIoIGZkY29tbWFuZFsgMCBdLCBTVERJTl9G
SUxFTk8gKSA8IDAgKQorICAgICAgICAgICAgICAgIF9leGl0KCAxICk7CisgICAgICAgICAgICBp
ZiggZHVwMiggZmRyZXBseVsgMSBdLCBTVERPVVRfRklMRU5PICkgPCAwICkKKyAgICAgICAgICAg
ICAgICBfZXhpdCggMSApOworICAgICAgICAgICAgaW50IG1heGZkID0gMTAyNDsgLy8gY2xvc2Ug
YWxsIG90aGVyIGZkcworICAgICAgICAgICAgc3RydWN0IHJsaW1pdCBybDsKKyAgICAgICAgICAg
IGlmKCBnZXRybGltaXQoIFJMSU1JVF9OT0ZJTEUsICZybCApID09IDAgKQorICAgICAgICAgICAg
ICAgIG1heGZkID0gcmwucmxpbV9tYXg7CisgICAgICAgICAgICBmb3IoIGludCBpID0gMzsKKyAg
ICAgICAgICAgICAgICAgaSA8IG1heGZkOworICAgICAgICAgICAgICAgICArK2kgKQorICAgICAg
ICAgICAgICAgIGNsb3NlKCBpICk7CisjaWZkZWYgREVCVUdfS0RFCisgICAgICAgICAgICBleGVj
dnAoIEtNT1pJTExBSEVMUEVSLCBhcmdzICk7CisjZWxzZQorICAgICAgICAgICAgZXhlY3YoIEtN
T1pJTExBSEVMUEVSLCBhcmdzICk7CisjZW5kaWYKKyAgICAgICAgICAgIF9leGl0KCAxICk7IC8v
IGZhaWxlZAorICAgICAgICAgICAgfQorICAgICAgICBkZWZhdWx0OiAvLyBwYXJlbnQKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbW1hbmRGaWxlID0gZmRvcGVuKCBmZGNvbW1hbmRbIDEg
XSwgInciICk7CisgICAgICAgICAgICByZXBseUZpbGUgPSBmZG9wZW4oIGZkcmVwbHlbIDAgXSwg
InIiICk7CisgICAgICAgICAgICBjbG9zZSggZmRjb21tYW5kWyAwIF0gKTsKKyAgICAgICAgICAg
IGNsb3NlKCBmZHJlcGx5WyAxIF0gKTsKKyAgICAgICAgICAgIGlmKCBjb21tYW5kRmlsZSA9PSBO
VUxMIHx8IHJlcGx5RmlsZSA9PSBOVUxMICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY2xvc2VIZWxwZXIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gb2ssIGhlbHBlciByZWFkeSwgZ2V0S2RlUnVu
bmluZygpIHdpbGwgY2hlY2sgaWYgaXQgd29ya3MKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIGhlbHBlckZhaWxlZCA9IGZhbHNlOworICAgIGhlbHBlclJ1bm5pbmcgPSB0cnVlOworICAg
IHJldHVybiB0cnVlOworICAgIH0KKwordm9pZCBuc0tERVV0aWxzOjpjbG9zZUhlbHBlcigpCisg
ICAgeworICAgIGlmKCBjb21tYW5kRmlsZSAhPSBOVUxMICkKKyAgICAgICAgZmNsb3NlKCBjb21t
YW5kRmlsZSApOyAvLyB0aGlzIHdpbGwgYWxzbyBtYWtlIHRoZSBoZWxwZXIgcXVpdAorICAgIGlm
KCByZXBseUZpbGUgIT0gTlVMTCApCisgICAgICAgIGZjbG9zZSggcmVwbHlGaWxlICk7CisgICAg
aGVscGVyUnVubmluZyA9IGZhbHNlOworICAgIH0KKwordm9pZCBuc0tERVV0aWxzOjpmZWVkQ29t
bWFuZCggY29uc3QgbnNDU3RyaW5nQXJyYXkmIGNvbW1hbmQgKQorICAgIHsKKyAgICBmb3IoIGlu
dCBpID0gMDsKKyAgICAgICAgIGkgPCBjb21tYW5kLkNvdW50KCk7CisgICAgICAgICArK2kgKQor
ICAgICAgICB7CisgICAgICAgIG5zQ1N0cmluZyBsaW5lID0gKmNvbW1hbmRbIGkgXTsKKyAgICAg
ICAgbGluZS5SZXBsYWNlU3Vic3RyaW5nKCAiXFwiLCAiXFwiICJcXCIgKTsgLy8gXCAtPiBcXCAs
IGkuZS4gZXNjYXBlCisgICAgICAgIGxpbmUuUmVwbGFjZVN1YnN0cmluZyggIlxuIiwgIlxcbiIg
KTsKKyNpZmRlZiBERUJVR19LREUKKyAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiQ09NTTogJXNc
biIsIGxpbmUuZ2V0KCkpOworI2VuZGlmCisgICAgICAgIGZwdXRzKCBsaW5lLmdldCgpLCBjb21t
YW5kRmlsZSApOworICAgICAgICBmcHV0cyggIlxuIiwgY29tbWFuZEZpbGUgKTsKKyAgICAgICAg
fQorICAgIGZwdXRzKCAiXFxFXG4iLCBjb21tYW5kRmlsZSApOyAvLyBkb25lIGFzIFxFLCBzbyBp
dCBjYW5ub3QgaGFwcGVuIGluIG5vcm1hbCBkYXRhCisgICAgZmZsdXNoKCBjb21tYW5kRmlsZSAp
OworICAgIH0KLS0tIG1vemlsbGEvdG9vbGtpdC94cmUvbnNLREVVdGlscy5oLnNhdgkyMDA5LTA5
LTA1IDAwOjEwOjM2LjAwMDAwMDAwMCArMDIwMAorKysgbW96aWxsYS90b29sa2l0L3hyZS9uc0tE
RVV0aWxzLmgJMjAwOS0wOS0wNSAwMDoxMDo0Mi4wMDAwMDAwMDAgKzAyMDAKQEAgLTAsMCArMSw3
NyBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBu
aWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICoKKyAqICoqKioqIEJFR0lOIExJQ0VOU0UgQkxP
Q0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRo
ZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGlj
IExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNl
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91
IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemls
bGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5z
ZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5U
WSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNl
CisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0
YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBp
cyBNb3ppbGxhIENvbW11bmljYXRvciBjbGllbnQgY29kZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBE
ZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIE5ldHNjYXBlIENvbW11bmljYXRp
b25zIENvcnBvcmF0aW9uLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZl
bG9wZXIgYXJlIENvcHlyaWdodCAoQykgMTk5OAorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVy
bmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhl
IHRlcm1zIG9mCisgKiBlaXRoZXIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZl
cnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwKKyAqIG9yIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICog
aW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBh
cHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxv
dyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVy
bXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJz
IHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zp
c2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhl
ciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBu
b3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5
b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBv
ZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNF
IEJMT0NLICoqKioqICovCisKKyNpZm5kZWYgbnNLREVVdGlsc19oX18KKyNkZWZpbmUgbnNLREVV
dGlsc19oX18KKworI2luY2x1ZGUgIm5zU3RyaW5nR2x1ZS5oIgorI2luY2x1ZGUgIm5zVm9pZEFy
cmF5LmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0d0a1dpbmRvdyBH
dGtXaW5kb3c7CisKK2NsYXNzIE5TX0VYUE9SVCBuc0tERVV0aWxzCisgICAgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgLyogUmV0dXJucyB0cnVlIGlmIHJ1bm5pbmcgaW5zaWRlIGEgS0RFIHNlc3Np
b24gKHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVyZSBpcyBLREUKKyAgICAgICAgICAgc3VwcG9y
dCBhdmFpbGFibGUgZm9yIEZpcmVmb3gpLiBUaGlzIHNob3VsZCBiZSB1c2VkIGUuZy4gd2hlbiBk
ZXRlcm1pbmluZworICAgICAgICAgICBkaWFsb2cgYnV0dG9uIG9yZGVyIGJ1dCBub3QgZm9yIGNv
ZGUgdGhhdCByZXF1aXJlcyB0aGUgS0RFIHN1cHBvcnQuICovCisgICAgICAgIHN0YXRpYyBib29s
IGtkZVNlc3Npb24oKTsKKyAgICAgICAgLyogUmV0dXJucyB0cnVlIGlmIHJ1bm5pbmcgaW5zaWRl
IGEgS0RFIHNlc3Npb24gYW5kIEtERSBzdXBwb3J0IGlzIGF2YWlsYWJsZQorICAgICAgICAgICBm
b3IgRmlyZWZveC4gVGhpcyBzaG91bGQgYmUgdXNlZCBldmVyeXdoZXJlIHdoZXJlIHRoZSBleHRl
cm5hbCBoZWxwZXIgaXMgbmVlZGVkLiAqLworICAgICAgICBzdGF0aWMgYm9vbCBrZGVTdXBwb3J0
KCk7CisgICAgICAgIC8qIEV4ZWN1dGVzIHRoZSBnaXZlbiBoZWxwZXIgY29tbWFuZCwgcmV0dXJu
cyB0cnVlIGlmIGhlbHBlciByZXR1cm5lZCBzdWNjZXNzLiAqLworICAgICAgICBzdGF0aWMgYm9v
bCBjb21tYW5kKCBjb25zdCBuc0NTdHJpbmdBcnJheSYgY29tbWFuZCwgbnNDU3RyaW5nQXJyYXkq
IG91dHB1dCA9IE5VTEwgKTsKKyAgICAgICAgLyogTGlrZSBjb21tYW5kKCksIGJ1dCBhZGRpdGlv
bmFsbHkgYmxvY2tzIHRoZSBwYXJlbnQgd2lkZ2V0IGxpa2UgaWYgdGhlcmUgd2FzCisgICAgICAg
ICAgIGEgbW9kYWwgZGlhbG9nIHNob3duIGFuZCBlbnRlcnMgdGhlIGV2ZW50IGxvb3AgKGkuZS4g
dGhlcmUgYXJlIHN0aWxsIHBhaW50IHVwZGF0ZXMsCisgICAgICAgICAgIHRoaXMgaXMgZm9yIGNv
bW1hbmRzIHRoYXQgdGFrZSBsb25nKS4gKi8KKyAgICAgICAgc3RhdGljIGJvb2wgY29tbWFuZEJs
b2NrVWkoIGNvbnN0IG5zQ1N0cmluZ0FycmF5JiBjb21tYW5kLCBjb25zdCBHdGtXaW5kb3cqIHBh
cmVudCwgbnNDU3RyaW5nQXJyYXkqIG91dHB1dCA9IE5VTEwgKTsKKyAgICBwcml2YXRlOgorICAg
ICAgICBuc0tERVV0aWxzKCk7CisgICAgICAgIH5uc0tERVV0aWxzKCk7CisgICAgICAgIHN0YXRp
YyBuc0tERVV0aWxzKiBzZWxmKCk7CisgICAgICAgIGJvb2wgc3RhcnRIZWxwZXIoKTsKKyAgICAg
ICAgdm9pZCBjbG9zZUhlbHBlcigpOworICAgICAgICB2b2lkIGZlZWRDb21tYW5kKCBjb25zdCBu
c0NTdHJpbmdBcnJheSYgY29tbWFuZCApOworICAgICAgICBib29sIGludGVybmFsQ29tbWFuZCgg
Y29uc3QgbnNDU3RyaW5nQXJyYXkmIGNvbW1hbmQsIGNvbnN0IEd0a1dpbmRvdyogcGFyZW50LCBi
b29sIGlzUGFyZW50LAorICAgICAgICAgICAgbnNDU3RyaW5nQXJyYXkqIG91dHB1dCApOworICAg
ICAgICBGSUxFKiBjb21tYW5kRmlsZTsKKyAgICAgICAgRklMRSogcmVwbHlGaWxlOworICAgIH07
CisKKyNlbmRpZiAvLyBuc0tERVV0aWxzCi0tLSBtb3ppbGxhL3VyaWxvYWRlci9leHRoYW5kbGVy
L01ha2VmaWxlLmluLnNhdgkyMDA5LTA5LTA1IDAwOjEwOjM2LjAwMDAwMDAwMCArMDIwMAorKysg
bW96aWxsYS91cmlsb2FkZXIvZXh0aGFuZGxlci9NYWtlZmlsZS5pbgkyMDA5LTA5LTA1IDAwOjEw
OjQyLjAwMDAwMDAwMCArMDIwMApAQCAtMTA5LDggKzEwOSw5IEBAIGVuZGlmCiBMT0NBTF9JTkNM
VURFUyA9IC1JJChzcmNkaXIpCiAKIGlmZXEgKCQoTU9aX1dJREdFVF9UT09MS0lUKSxndGsyKQot
T1NIRUxQRVIJKz0gbnNHTk9NRVJlZ2lzdHJ5LmNwcAorT1NIRUxQRVIJKz0gbnNDb21tb25SZWdp
c3RyeS5jcHAgbnNHTk9NRVJlZ2lzdHJ5LmNwcCBuc0tERVJlZ2lzdHJ5LmNwcAogT1NIRUxQRVIg
ICs9IG5zTUlNRUluZm9Vbml4LmNwcAorTE9DQUxfSU5DTFVERVMgKz0gLUkkKHRvcHNyY2Rpcikv
dG9vbGtpdC94cmUKIGVuZGlmCiAKIGlmZXEgKCQoTU9aX1dJREdFVF9UT09MS0lUKSxxdCkKLS0t
IG1vemlsbGEvdXJpbG9hZGVyL2V4dGhhbmRsZXIvdW5peC9uc0NvbW1vblJlZ2lzdHJ5LmNwcC5z
YXYJMjAwOS0wOS0wNSAwMDoxMDozNi4wMDAwMDAwMDAgKzAyMDAKKysrIG1vemlsbGEvdXJpbG9h
ZGVyL2V4dGhhbmRsZXIvdW5peC9uc0NvbW1vblJlZ2lzdHJ5LmNwcAkyMDA5LTA5LTA1IDAwOjEw
OjQyLjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDg3IEBACisvKiAtKi0gTW9kZTogQysrOyB0
YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSot
ICovCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwg
MS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFy
ZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAo
dGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
TGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdh
cmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFT
IElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHBy
ZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5n
dWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vu
c2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIEdOT01FIGhlbHBlciBhcHAgaW1w
bGVtZW50YXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5h
bCBDb2RlIGlzCisgKiBJQk0gQ29ycG9yYXRpb24uCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRo
ZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAzCisgKiB0aGUgSW5pdGlh
bCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6
CisgKiAgQnJpYW4gUnluZXIgPGJyeW5lckBicmlhbnJ5bmVyLmNvbT4gIChPcmlnaW5hbCBBdXRo
b3IpCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkg
YmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhl
ICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3Ig
dGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlv
dSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAq
IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0
byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxl
dGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGlj
ZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQ
TC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lw
aWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJt
cyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioq
KiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworI2luY2x1ZGUgIm5zQ29tbW9uUmVnaXN0
cnkuaCIKKworI2luY2x1ZGUgIm5zR05PTUVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIm5zS0RFUmVn
aXN0cnkuaCIKKyNpbmNsdWRlICJuc1N0cmluZy5oIgorI2luY2x1ZGUgIm5zVm9pZEFycmF5Lmgi
CisjaW5jbHVkZSAibnNLREVVdGlscy5oIgorCisvKiBzdGF0aWMgKi8gUFJCb29sCituc0NvbW1v
blJlZ2lzdHJ5OjpIYW5kbGVyRXhpc3RzKGNvbnN0IGNoYXIgKmFQcm90b2NvbFNjaGVtZSkKK3sK
KyAgICBpZiggbnNLREVVdGlsczo6a2RlU3VwcG9ydCgpKQorICAgICAgICByZXR1cm4gbnNLREVS
ZWdpc3RyeTo6SGFuZGxlckV4aXN0cyggYVByb3RvY29sU2NoZW1lICk7CisgICAgcmV0dXJuIG5z
R05PTUVSZWdpc3RyeTo6SGFuZGxlckV4aXN0cyggYVByb3RvY29sU2NoZW1lICk7Cit9CisKKy8q
IHN0YXRpYyAqLyBuc3Jlc3VsdAorbnNDb21tb25SZWdpc3RyeTo6TG9hZFVSTChuc0lVUkkgKmFV
UkwpCit7CisgICAgaWYoIG5zS0RFVXRpbHM6OmtkZVN1cHBvcnQoKSkKKyAgICAgICAgcmV0dXJu
IG5zS0RFUmVnaXN0cnk6OkxvYWRVUkwoIGFVUkwgKTsKKyAgICByZXR1cm4gbnNHTk9NRVJlZ2lz
dHJ5OjpMb2FkVVJMKCBhVVJMICk7Cit9CisKKy8qIHN0YXRpYyAqLyB2b2lkCituc0NvbW1vblJl
Z2lzdHJ5OjpHZXRBcHBEZXNjRm9yU2NoZW1lKGNvbnN0IG5zQUNTdHJpbmcmIGFTY2hlbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhRGVzYykKK3sK
KyAgICBpZiggbnNLREVVdGlsczo6a2RlU3VwcG9ydCgpKQorICAgICAgICByZXR1cm4gbnNLREVS
ZWdpc3RyeTo6R2V0QXBwRGVzY0ZvclNjaGVtZSggYVNjaGVtZSwgYURlc2MgKTsKKyAgICByZXR1
cm4gbnNHTk9NRVJlZ2lzdHJ5OjpHZXRBcHBEZXNjRm9yU2NoZW1lKCBhU2NoZW1lLCBhRGVzYyAp
OworfQorCisKKy8qIHN0YXRpYyAqLyBhbHJlYWR5X0FkZFJlZmVkPG5zTUlNRUluZm9CYXNlPgor
bnNDb21tb25SZWdpc3RyeTo6R2V0RnJvbUV4dGVuc2lvbihjb25zdCBuc0FDU3RyaW5nJiBhRmls
ZUV4dCkKK3sKKyAgICBpZiggbnNLREVVdGlsczo6a2RlU3VwcG9ydCgpKQorICAgICAgICByZXR1
cm4gbnNLREVSZWdpc3RyeTo6R2V0RnJvbUV4dGVuc2lvbiggYUZpbGVFeHQgKTsKKyAgICByZXR1
cm4gbnNHTk9NRVJlZ2lzdHJ5OjpHZXRGcm9tRXh0ZW5zaW9uKCBhRmlsZUV4dCApOworfQorCisv
KiBzdGF0aWMgKi8gYWxyZWFkeV9BZGRSZWZlZDxuc01JTUVJbmZvQmFzZT4KK25zQ29tbW9uUmVn
aXN0cnk6OkdldEZyb21UeXBlKGNvbnN0IG5zQUNTdHJpbmcmIGFNSU1FVHlwZSkKK3sKKyAgICBp
ZiggbnNLREVVdGlsczo6a2RlU3VwcG9ydCgpKQorICAgICAgICByZXR1cm4gbnNLREVSZWdpc3Ry
eTo6R2V0RnJvbVR5cGUoIGFNSU1FVHlwZSApOworICAgIHJldHVybiBuc0dOT01FUmVnaXN0cnk6
OkdldEZyb21UeXBlKCBhTUlNRVR5cGUgKTsKK30KLS0tIG1vemlsbGEvdXJpbG9hZGVyL2V4dGhh
bmRsZXIvdW5peC9uc0NvbW1vblJlZ2lzdHJ5Lmguc2F2CTIwMDktMDktMDUgMDA6MTA6MzYuMDAw
MDAwMDAwICswMjAwCisrKyBtb3ppbGxhL3VyaWxvYWRlci9leHRoYW5kbGVyL3VuaXgvbnNDb21t
b25SZWdpc3RyeS5oCTIwMDktMDktMDUgMDA6MTA6NDIuMDAwMDAwMDAwICswMjAwCkBAIC0wLDAg
KzEsNTYgQEAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246
IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZp
bGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICog
MS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4g
Y29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9m
IHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBT
b2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBh
biAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVy
IGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmlj
IGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICog
TGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgR05PTUUgaGVscGVyIGFw
cCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9y
aWdpbmFsIENvZGUgaXMKKyAqIElCTSBDb3Jwb3JhdGlvbi4KKyAqIFBvcnRpb25zIGNyZWF0ZWQg
YnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDMKKyAqIHRoZSBJ
bml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRv
cihzKToKKyAqICBCcmlhbiBSeW5lciA8YnJ5bmVyQGJyaWFucnluZXIuY29tPiAgKE9yaWdpbmFs
IEF1dGhvcikKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxl
IG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVy
ICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQ
TCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4g
SWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25s
eQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQg
bm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5
IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUg
bm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRo
ZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEg
cmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhl
IHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisg
KiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCisjaW5jbHVkZSAibnNJVVJJLmgi
CisjaW5jbHVkZSAibnNDT01QdHIuaCIKKworY2xhc3MgbnNNSU1FSW5mb0Jhc2U7CisKK2NsYXNz
IG5zQ29tbW9uUmVnaXN0cnkKK3sKKyBwdWJsaWM6CisgIHN0YXRpYyBQUkJvb2wgSGFuZGxlckV4
aXN0cyhjb25zdCBjaGFyICphUHJvdG9jb2xTY2hlbWUpOworCisgIHN0YXRpYyBuc3Jlc3VsdCBM
b2FkVVJMKG5zSVVSSSAqYVVSTCk7CisKKyAgc3RhdGljIHZvaWQgR2V0QXBwRGVzY0ZvclNjaGVt
ZShjb25zdCBuc0FDU3RyaW5nJiBhU2NoZW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zQVN0cmluZyYgYURlc2MpOworCisgIHN0YXRpYyBhbHJlYWR5X0FkZFJlZmVkPG5z
TUlNRUluZm9CYXNlPiBHZXRGcm9tRXh0ZW5zaW9uKGNvbnN0IG5zQUNTdHJpbmcmIGFGaWxlRXh0
KTsKKworICBzdGF0aWMgYWxyZWFkeV9BZGRSZWZlZDxuc01JTUVJbmZvQmFzZT4gR2V0RnJvbVR5
cGUoY29uc3QgbnNBQ1N0cmluZyYgYU1JTUVUeXBlKTsKK307Ci0tLSBtb3ppbGxhL3VyaWxvYWRl
ci9leHRoYW5kbGVyL3VuaXgvbnNLREVSZWdpc3RyeS5jcHAuc2F2CTIwMDktMDktMDUgMDA6MTA6
MzYuMDAwMDAwMDAwICswMjAwCisrKyBtb3ppbGxhL3VyaWxvYWRlci9leHRoYW5kbGVyL3VuaXgv
bnNLREVSZWdpc3RyeS5jcHAJMjAwOS0wOS0wNSAwMDoxMDo0Mi4wMDAwMDAwMDAgKzAyMDAKQEAg
LTAsMCArMSwxMTkgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRh
YnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KKy8qICoqKioqIEJFR0lOIExJ
Q0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQor
ICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemls
bGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1h
eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGlj
ZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8v
d3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0
aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9V
VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRo
ZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMg
YW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2lu
YWwgQ29kZSBpcyB0aGUgR05PTUUgaGVscGVyIGFwcCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBU
aGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIElCTSBDb3Jw
b3JhdGlvbi4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFy
ZSBDb3B5cmlnaHQgKEMpIDIwMDMKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqICBCcmlhbiBSeW5lciA8YnJ5
bmVyQGJyaWFucnluZXIuY29tPiAgKE9yaWdpbmFsIEF1dGhvcikKKyAqCisgKiBBbHRlcm5hdGl2
ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJt
cyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIg
b3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNo
IGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJs
ZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9m
IHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVp
dGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICog
dXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEws
IGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFi
b3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlz
aW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0
ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJz
aW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1Q
TCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAq
KioqKiAqLworCisjaW5jbHVkZSAibnNLREVSZWdpc3RyeS5oIgorI2luY2x1ZGUgInBybGluay5o
IgorI2luY2x1ZGUgInBybWVtLmgiCisjaW5jbHVkZSAibnNTdHJpbmcuaCIKKyNpbmNsdWRlICJu
c0lMb2NhbEZpbGUuaCIKKyNpbmNsdWRlICJuc01JTUVJbmZvVW5peC5oIgorI2luY2x1ZGUgIm5z
QXV0b1B0ci5oIgorI2luY2x1ZGUgIm5zS0RFVXRpbHMuaCIKKworLyogc3RhdGljICovIFBSQm9v
bAorbnNLREVSZWdpc3RyeTo6SGFuZGxlckV4aXN0cyhjb25zdCBjaGFyICphUHJvdG9jb2xTY2hl
bWUpCit7CisgICAgbnNDU3RyaW5nQXJyYXkgY29tbWFuZDsKKyAgICBjb21tYW5kLkFwcGVuZENT
dHJpbmcoIE5TX0xJVEVSQUxfQ1NUUklORyggIkhBTkRMRVJFWElTVFMiICkpOworICAgIGNvbW1h
bmQuQXBwZW5kQ1N0cmluZyggbnNDQXV0b1N0cmluZyggYVByb3RvY29sU2NoZW1lICkpOworICAg
IHJldHVybiBuc0tERVV0aWxzOjpjb21tYW5kKCBjb21tYW5kICk7Cit9CisKKy8qIHN0YXRpYyAq
LyBuc3Jlc3VsdAorbnNLREVSZWdpc3RyeTo6TG9hZFVSTChuc0lVUkkgKmFVUkwpCit7CisgICAg
bnNDU3RyaW5nQXJyYXkgY29tbWFuZDsKKyAgICBjb21tYW5kLkFwcGVuZENTdHJpbmcoIE5TX0xJ
VEVSQUxfQ1NUUklORyggIk9QRU4iICkpOworICAgIG5zQ1N0cmluZyB1cmw7CisgICAgYVVSTC0+
R2V0U3BlYyggdXJsICk7CisgICAgY29tbWFuZC5BcHBlbmRDU3RyaW5nKCB1cmwgKTsKKyAgICBy
ZXR1cm4gbnNLREVVdGlsczo6Y29tbWFuZCggY29tbWFuZCApOworfQorCisvKiBzdGF0aWMgKi8g
dm9pZAorbnNLREVSZWdpc3RyeTo6R2V0QXBwRGVzY0ZvclNjaGVtZShjb25zdCBuc0FDU3RyaW5n
JiBhU2NoZW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQVN0cmlu
ZyYgYURlc2MpCit7CisgICAgbnNDU3RyaW5nQXJyYXkgY29tbWFuZDsKKyAgICBjb21tYW5kLkFw
cGVuZENTdHJpbmcoIE5TX0xJVEVSQUxfQ1NUUklORyggIkdFVEFQUERFU0NGT1JTQ0hFTUUiICkp
OworICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmluZyggYVNjaGVtZSApOworICAgIG5zQ1N0cmluZ0Fy
cmF5IG91dHB1dDsKKyAgICBpZiggbnNLREVVdGlsczo6Y29tbWFuZCggY29tbWFuZCwgJm91dHB1
dCApICYmIG91dHB1dC5Db3VudCgpID09IDEgKQorICAgICAgICBDb3B5VVRGOHRvVVRGMTYoICpv
dXRwdXRbIDAgXSwgYURlc2MgKTsKK30KKworCisvKiBzdGF0aWMgKi8gYWxyZWFkeV9BZGRSZWZl
ZDxuc01JTUVJbmZvQmFzZT4KK25zS0RFUmVnaXN0cnk6OkdldEZyb21FeHRlbnNpb24oY29uc3Qg
bnNBQ1N0cmluZyYgYUZpbGVFeHQpCit7CisgICAgTlNfQVNTRVJUSU9OKGFGaWxlRXh0WzBdICE9
ICcuJywgImFGaWxlRXh0IHNob3VsZG4ndCBzdGFydCB3aXRoIGEgZG90Iik7CisgICAgbnNDU3Ry
aW5nQXJyYXkgY29tbWFuZDsKKyAgICBjb21tYW5kLkFwcGVuZENTdHJpbmcoIE5TX0xJVEVSQUxf
Q1NUUklORyggIkdFVEZST01FWFRFTlNJT04iICkpOworICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmlu
ZyggYUZpbGVFeHQgKTsKKyAgICByZXR1cm4gR2V0RnJvbUhlbHBlciggY29tbWFuZCApOworfQor
CisvKiBzdGF0aWMgKi8gYWxyZWFkeV9BZGRSZWZlZDxuc01JTUVJbmZvQmFzZT4KK25zS0RFUmVn
aXN0cnk6OkdldEZyb21UeXBlKGNvbnN0IG5zQUNTdHJpbmcmIGFNSU1FVHlwZSkKK3sKKyAgICBu
c0NTdHJpbmdBcnJheSBjb21tYW5kOworICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmluZyggTlNfTElU
RVJBTF9DU1RSSU5HKCAiR0VURlJPTVRZUEUiICkpOworICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmlu
ZyggYU1JTUVUeXBlICk7CisgICAgcmV0dXJuIEdldEZyb21IZWxwZXIoIGNvbW1hbmQgKTsKK30K
KworLyogc3RhdGljICovIGFscmVhZHlfQWRkUmVmZWQ8bnNNSU1FSW5mb0Jhc2U+Cituc0tERVJl
Z2lzdHJ5OjpHZXRGcm9tSGVscGVyKGNvbnN0IG5zQ1N0cmluZ0FycmF5JiBjb21tYW5kKQorewor
ICAgIG5zQ1N0cmluZ0FycmF5IG91dHB1dDsKKyAgICBpZiggbnNLREVVdGlsczo6Y29tbWFuZCgg
Y29tbWFuZCwgJm91dHB1dCApICYmIG91dHB1dC5Db3VudCgpID09IDMgKQorICAgICAgICB7Cisg
ICAgICAgIG5zQ1N0cmluZyBtaW1ldHlwZSA9ICpvdXRwdXRbIDAgXTsKKyAgICAgICAgbnNSZWZQ
dHI8bnNNSU1FSW5mb1VuaXg+IG1pbWVJbmZvID0gbmV3IG5zTUlNRUluZm9Vbml4KCBtaW1ldHlw
ZSApOworICAgICAgICBOU19FTlNVUkVfVFJVRShtaW1lSW5mbywgbnNudWxsKTsKKyAgICAgICAg
bnNDU3RyaW5nIGRlc2NyaXB0aW9uID0gKm91dHB1dFsgMSBdOworICAgICAgICBtaW1lSW5mby0+
U2V0RGVzY3JpcHRpb24oTlNfQ29udmVydFVURjh0b1VURjE2KGRlc2NyaXB0aW9uKSk7CisgICAg
ICAgIG5zQ1N0cmluZyBoYW5kbGVyQXBwTmFtZSA9ICpvdXRwdXRbIDIgXTsKKyAgICAgICAgbWlt
ZUluZm8tPlNldERlZmF1bHREZXNjcmlwdGlvbihOU19Db252ZXJ0VVRGOHRvVVRGMTYoaGFuZGxl
ckFwcE5hbWUpKTsKKyAgICAgICAgbWltZUluZm8tPlNldFByZWZlcnJlZEFjdGlvbihuc0lNSU1F
SW5mbzo6dXNlU3lzdGVtRGVmYXVsdCk7CisgICAgICAgIG5zTUlNRUluZm9CYXNlKiByZXR2YWw7
CisgICAgICAgIE5TX0FERFJFRigocmV0dmFsID0gbWltZUluZm8pKTsKKyAgICAgICAgcmV0dXJu
IHJldHZhbDsKKyAgICAgICAgfQorICAgIHJldHVybiBuc251bGw7Cit9Ci0tLSBtb3ppbGxhL3Vy
aWxvYWRlci9leHRoYW5kbGVyL3VuaXgvbnNLREVSZWdpc3RyeS5oLnNhdgkyMDA5LTA5LTA1IDAw
OjEwOjM2LjAwMDAwMDAwMCArMDIwMAorKysgbW96aWxsYS91cmlsb2FkZXIvZXh0aGFuZGxlci91
bml4L25zS0RFUmVnaXN0cnkuaAkyMDA5LTA5LTA1IDAwOjEwOjQyLjAwMDAwMDAwMCArMDIwMApA
QCAtMCwwICsxLDYxIEBACisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBW
ZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2Yg
dGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNp
b24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhj
ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEg
Y29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisg
KgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0
aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIEdOT01FIGhl
bHBlciBhcHAgaW1wbGVtZW50YXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9m
IHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBJQk0gQ29ycG9yYXRpb24uCisgKiBQb3J0aW9ucyBj
cmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAzCisg
KiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29u
dHJpYnV0b3Iocyk6CisgKiAgQnJpYW4gUnluZXIgPGJyeW5lckBicmlhbnJ5bmVyLmNvbT4gIChP
cmlnaW5hbCBBdXRob3IpCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRo
aXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBv
cgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBv
ciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9m
IHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2Ug
YWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBm
aWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQ
TCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNp
c2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdp
dGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQ
TCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFi
b3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIK
KyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwu
CisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworI2luY2x1ZGUgIm5z
SVVSSS5oIgorI2luY2x1ZGUgIm5zQ09NUHRyLmgiCisKK2NsYXNzIG5zTUlNRUluZm9CYXNlOwor
Y2xhc3MgbnNDQXV0b1N0cmluZzsKK2NsYXNzIG5zQ1N0cmluZ0FycmF5OworCitjbGFzcyBuc0tE
RVJlZ2lzdHJ5Cit7CisgcHVibGljOgorICBzdGF0aWMgUFJCb29sIEhhbmRsZXJFeGlzdHMoY29u
c3QgY2hhciAqYVByb3RvY29sU2NoZW1lKTsKKworICBzdGF0aWMgbnNyZXN1bHQgTG9hZFVSTChu
c0lVUkkgKmFVUkwpOworCisgIHN0YXRpYyB2b2lkIEdldEFwcERlc2NGb3JTY2hlbWUoY29uc3Qg
bnNBQ1N0cmluZyYgYVNjaGVtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0FTdHJpbmcmIGFEZXNjKTsKKworICBzdGF0aWMgYWxyZWFkeV9BZGRSZWZlZDxuc01JTUVJbmZv
QmFzZT4gR2V0RnJvbUV4dGVuc2lvbihjb25zdCBuc0FDU3RyaW5nJiBhRmlsZUV4dCk7CisKKyAg
c3RhdGljIGFscmVhZHlfQWRkUmVmZWQ8bnNNSU1FSW5mb0Jhc2U+IEdldEZyb21UeXBlKGNvbnN0
IG5zQUNTdHJpbmcmIGFNSU1FVHlwZSk7CisgcHJpdmF0ZToKKyAgc3RhdGljIGFscmVhZHlfQWRk
UmVmZWQ8bnNNSU1FSW5mb0Jhc2U+IEdldEZyb21IZWxwZXIoY29uc3QgbnNDU3RyaW5nQXJyYXkm
IGNvbW1hbmQpOworCit9OwotLS0gbW96aWxsYS91cmlsb2FkZXIvZXh0aGFuZGxlci91bml4L25z
TUlNRUluZm9Vbml4LmNwcC5zYXYJMjAwOS0wOS0wNSAwMDoxMDozNi4wMDAwMDAwMDAgKzAyMDAK
KysrIG1vemlsbGEvdXJpbG9hZGVyL2V4dGhhbmRsZXIvdW5peC9uc01JTUVJbmZvVW5peC5jcHAJ
MjAwOS0wOS0wNSAwMDoxMDo0Mi4wMDAwMDAwMDAgKzAyMDAKQEAgLTQ0LDE4ICs0NCwxOSBAQAog
CiAKICNpbmNsdWRlICJuc01JTUVJbmZvVW5peC5oIgotI2luY2x1ZGUgIm5zR05PTUVSZWdpc3Ry
eS5oIgorI2luY2x1ZGUgIm5zQ29tbW9uUmVnaXN0cnkuaCIKICNpbmNsdWRlICJuc0lHbm9tZVZG
U1NlcnZpY2UuaCIKICNpZmRlZiBNT1pfRU5BQkxFX0RCVVMKICNpbmNsdWRlICJuc0RCdXNIYW5k
bGVyQXBwLmgiCiAjZW5kaWYKICNpbmNsdWRlICJuc0F1dG9QdHIuaCIKKyNpbmNsdWRlICJuc0tE
RVV0aWxzLmgiCiAKIAogbnNyZXN1bHQKIG5zTUlNRUluZm9Vbml4OjpMb2FkVXJpSW50ZXJuYWwo
bnNJVVJJICogYVVSSSkKIHsgCi0gIG5zcmVzdWx0IHJ2ID0gbnNHTk9NRVJlZ2lzdHJ5OjpMb2Fk
VVJMKGFVUkkpOworICBuc3Jlc3VsdCBydiA9IG5zQ29tbW9uUmVnaXN0cnk6OkxvYWRVUkwoYVVS
SSk7CiAjaWZkZWYgTU9aX1BMQVRGT1JNX0hJTERPTgogICBpZiAoTlNfRkFJTEVEKHJ2KSl7CiAg
ICAgSGlsZG9uVVJJQWN0aW9uICphY3Rpb24gPSBoaWxkb25fdXJpX2dldF9kZWZhdWx0X2FjdGlv
bihtVHlwZS5nZXQoKSwgbnNudWxsKTsKQEAgLTc1LDExICs3NiwxMSBAQCBOU19JTUVUSE9ESU1Q
CiBuc01JTUVJbmZvVW5peDo6R2V0SGFzRGVmYXVsdEhhbmRsZXIoUFJCb29sICpfcmV0dmFsKQog
ewogICAqX3JldHZhbCA9IFBSX0ZBTFNFOwotICBuc1JlZlB0cjxuc01JTUVJbmZvQmFzZT4gbWlt
ZUluZm8gPSBuc0dOT01FUmVnaXN0cnk6OkdldEZyb21UeXBlKG1UeXBlKTsKKyAgbnNSZWZQdHI8
bnNNSU1FSW5mb0Jhc2U+IG1pbWVJbmZvID0gbnNDb21tb25SZWdpc3RyeTo6R2V0RnJvbVR5cGUo
bVR5cGUpOwogICBpZiAoIW1pbWVJbmZvKSB7CiAgICAgIG5zQ0F1dG9TdHJpbmcgZXh0OwogICAg
ICBHZXRQcmltYXJ5RXh0ZW5zaW9uKGV4dCk7Ci0gICAgIG1pbWVJbmZvID0gbnNHTk9NRVJlZ2lz
dHJ5OjpHZXRGcm9tRXh0ZW5zaW9uKGV4dCk7CisgICAgIG1pbWVJbmZvID0gbnNDb21tb25SZWdp
c3RyeTo6R2V0RnJvbUV4dGVuc2lvbihleHQpOwogICB9CiAKICAgaWYgKG1pbWVJbmZvKQpAQCAt
MTA2LDYgKzEwNywxOSBAQCBuc01JTUVJbmZvVW5peDo6TGF1bmNoRGVmYXVsdFdpdGhGaWxlKG5z
CiB7CiAgIG5zQ0F1dG9TdHJpbmcgbmF0aXZlUGF0aDsKICAgYUZpbGUtPkdldE5hdGl2ZVBhdGgo
bmF0aXZlUGF0aCk7CisgIAorICBpZiggbnNLREVVdGlsczo6a2RlU3VwcG9ydCgpKQorICAgICAg
eworICAgICAgbnNDU3RyaW5nQXJyYXkgY29tbWFuZDsKKyAgICAgIGNvbW1hbmQuQXBwZW5kQ1N0
cmluZyggTlNfTElURVJBTF9DU1RSSU5HKCAiT1BFTiIgKSk7CisgICAgICBjb21tYW5kLkFwcGVu
ZENTdHJpbmcoIG5hdGl2ZVBhdGggKTsKKyAgICAgIGlmKCBuc0tERVV0aWxzOjpjb21tYW5kKCBj
b21tYW5kICkpCisgICAgICAgICAgcmV0dXJuIE5TX09LOworICAgICAgaWYgKCFtRGVmYXVsdEFw
cGxpY2F0aW9uKQorICAgICAgICByZXR1cm4gTlNfRVJST1JfRklMRV9OT1RfRk9VTkQ7CisKKyAg
ICAgIHJldHVybiBMYXVuY2hXaXRoSVByb2Nlc3MobURlZmF1bHRBcHBsaWNhdGlvbiwgbmF0aXZl
UGF0aCk7CisgICAgICB9CiAKICAgbnNDT01QdHI8bnNJR25vbWVWRlNTZXJ2aWNlPiB2ZnMgPSBk
b19HZXRTZXJ2aWNlKE5TX0dOT01FVkZTU0VSVklDRV9DT05UUkFDVElEKTsKIApAQCAtMTE2LDcg
KzEzMCw3IEBAIG5zTUlNRUluZm9Vbml4OjpMYXVuY2hEZWZhdWx0V2l0aEZpbGUobnMKIAogICAg
IC8vIElmIHdlIGhhdmVuJ3QgZ290IGFuIGFwcCB3ZSB0cnkgdG8gZ2V0IGEgdmFsaWQgb25lIGJ5
IHNlYXJjaGluZyBmb3IgdGhlCiAgICAgLy8gZXh0ZW5zaW9uIG1hcHBlZCB0eXBlCi0gICAgbnNS
ZWZQdHI8bnNNSU1FSW5mb0Jhc2U+IG1pbWVJbmZvID0gbnNHTk9NRVJlZ2lzdHJ5OjpHZXRGcm9t
RXh0ZW5zaW9uKG5hdGl2ZVBhdGgpOworICAgIG5zUmVmUHRyPG5zTUlNRUluZm9CYXNlPiBtaW1l
SW5mbyA9IG5zQ29tbW9uUmVnaXN0cnk6OkdldEZyb21FeHRlbnNpb24obmF0aXZlUGF0aCk7CiAg
ICAgaWYgKG1pbWVJbmZvKSB7CiAgICAgICBuc0NBdXRvU3RyaW5nIHR5cGU7CiAgICAgICBtaW1l
SW5mby0+R2V0VHlwZSh0eXBlKTsKLS0tIG1vemlsbGEvdXJpbG9hZGVyL2V4dGhhbmRsZXIvdW5p
eC9uc09TSGVscGVyQXBwU2VydmljZS5jcHAuc2F2CTIwMDktMDktMDUgMDA6MTA6MzYuMDAwMDAw
MDAwICswMjAwCisrKyBtb3ppbGxhL3VyaWxvYWRlci9leHRoYW5kbGVyL3VuaXgvbnNPU0hlbHBl
ckFwcFNlcnZpY2UuY3BwCTIwMDktMDktMDUgMDA6MTA6NDIuMDAwMDAwMDAwICswMjAwCkBAIC00
NCw3ICs0NCw3IEBACiAjaW5jbHVkZSAibnNPU0hlbHBlckFwcFNlcnZpY2UuaCIKICNpbmNsdWRl
ICJuc01JTUVJbmZvVW5peC5oIgogI2lmZGVmIE1PWl9XSURHRVRfR1RLMgotI2luY2x1ZGUgIm5z
R05PTUVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIm5zQ29tbW9uUmVnaXN0cnkuaCIKICNlbmRpZgog
I2luY2x1ZGUgIm5zSVN1cHBvcnRzLmgiCiAjaW5jbHVkZSAibnNTdHJpbmcuaCIKQEAgLTEyMTAs
NyArMTIxMCw3IEBAIG5zcmVzdWx0IG5zT1NIZWxwZXJBcHBTZXJ2aWNlOjpPU1Byb3RvY28KIAog
I2lmZGVmIE1PWl9XSURHRVRfR1RLMgogICAvLyBDaGVjayB0aGUgR0NvbmYgcmVnaXN0cnkgZm9y
IGEgcHJvdG9jb2wgaGFuZGxlcgotICAqYUhhbmRsZXJFeGlzdHMgPSBuc0dOT01FUmVnaXN0cnk6
OkhhbmRsZXJFeGlzdHMoYVByb3RvY29sU2NoZW1lKTsKKyAgKmFIYW5kbGVyRXhpc3RzID0gbnND
b21tb25SZWdpc3RyeTo6SGFuZGxlckV4aXN0cyhhUHJvdG9jb2xTY2hlbWUpOwogI2VuZGlmCiAK
ICAgcmV0dXJuIE5TX09LOwpAQCAtMTIxOSw3ICsxMjE5LDcgQEAgbnNyZXN1bHQgbnNPU0hlbHBl
ckFwcFNlcnZpY2U6Ok9TUHJvdG9jbwogTlNfSU1FVEhPRElNUCBuc09TSGVscGVyQXBwU2Vydmlj
ZTo6R2V0QXBwbGljYXRpb25EZXNjcmlwdGlvbihjb25zdCBuc0FDU3RyaW5nJiBhU2NoZW1lLCBu
c0FTdHJpbmcmIF9yZXR2YWwpCiB7CiAjaWZkZWYgTU9aX1dJREdFVF9HVEsyCi0gIG5zR05PTUVS
ZWdpc3RyeTo6R2V0QXBwRGVzY0ZvclNjaGVtZShhU2NoZW1lLCBfcmV0dmFsKTsKKyAgbnNDb21t
b25SZWdpc3RyeTo6R2V0QXBwRGVzY0ZvclNjaGVtZShhU2NoZW1lLCBfcmV0dmFsKTsKICAgcmV0
dXJuIF9yZXR2YWwuSXNFbXB0eSgpID8gTlNfRVJST1JfTk9UX0FWQUlMQUJMRSA6IE5TX09LOwog
I2Vsc2UKICAgcmV0dXJuIE5TX0VSUk9SX05PVF9BVkFJTEFCTEU7CkBAIC0xMzE1LDcgKzEzMTUs
NyBAQCBuc09TSGVscGVyQXBwU2VydmljZTo6R2V0RnJvbUV4dGVuc2lvbihjCiAgICAgCiAjaWZk
ZWYgTU9aX1dJREdFVF9HVEsyCiAgICAgTE9HKCgiTG9va2luZyBpbiBHTk9NRSByZWdpc3RyeVxu
IikpOwotICAgIG5zTUlNRUluZm9CYXNlICpnbm9tZUluZm8gPSBuc0dOT01FUmVnaXN0cnk6Okdl
dEZyb21FeHRlbnNpb24oYUZpbGVFeHQpLmdldCgpOworICAgIG5zTUlNRUluZm9CYXNlICpnbm9t
ZUluZm8gPSBuc0NvbW1vblJlZ2lzdHJ5OjpHZXRGcm9tRXh0ZW5zaW9uKGFGaWxlRXh0KS5nZXQo
KTsKICAgICBpZiAoZ25vbWVJbmZvKSB7CiAgICAgICBMT0coKCJHb3QgTUlNRUluZm8gZnJvbSBH
Tk9NRSByZWdpc3RyeVxuIikpOwogICAgICAgcmV0dXJuIGdub21lSW5mbzsKQEAgLTE0NDEsNyAr
MTQ0MSw3IEBAIG5zT1NIZWxwZXJBcHBTZXJ2aWNlOjpHZXRGcm9tVHlwZShjb25zdAogICAgIC8v
IGdldCBiYWNrIGEgTUlNRUluZm8gd2l0aG91dCBhbnkgZXh0ZW5zaW9ucyBzZXQuICBJbiB0aGF0
IGNhc2Ugd2UnbGwgaGF2ZQogICAgIC8vIHRvIGxvb2sgaW4gb3VyIG1pbWUudHlwZXMgZmlsZXMg
Zm9yIHRoZSBleHRlbnNpb25zLiAgICAKICAgICBMT0coKCJMb29raW5nIGluIEdOT01FIHJlZ2lz
dHJ5XG4iKSk7Ci0gICAgZ25vbWVJbmZvID0gbnNHTk9NRVJlZ2lzdHJ5OjpHZXRGcm9tVHlwZShh
TUlNRVR5cGUpLmdldCgpOworICAgIGdub21lSW5mbyA9IG5zQ29tbW9uUmVnaXN0cnk6OkdldEZy
b21UeXBlKGFNSU1FVHlwZSkuZ2V0KCk7CiAgICAgaWYgKGdub21lSW5mbyAmJiBnbm9tZUluZm8t
Pkhhc0V4dGVuc2lvbnMoKSkgewogICAgICAgTE9HKCgiR290IE1JTUVJbmZvIGZyb20gR05PTUUg
cmVnaXN0cnksIGFuZCBpdCBoYXMgZXh0ZW5zaW9ucyBzZXRcbiIpKTsKICAgICAgIHJldHVybiBn
bm9tZUluZm87Ci0tLSBtb3ppbGxhL3dpZGdldC9zcmMvZ3RrMi9NYWtlZmlsZS5pbi5zYXYJMjAw
OS0wOS0wNSAwMDoxMDozNi4wMDAwMDAwMDAgKzAyMDAKKysrIG1vemlsbGEvd2lkZ2V0L3NyYy9n
dGsyL01ha2VmaWxlLmluCTIwMDktMDktMDUgMDA6MTA6NDIuMDAwMDAwMDAwICswMjAwCkBAIC0x
ODIsNiArMTgyLDggQEAgSU5DTFVERVMJKz0gXAogCQktSSQodG9wc3JjZGlyKS9vdGhlci1saWNl
bnNlcy9hdGstMS4wIFwKIAkJJChOVUxMKQogCitMT0NBTF9JTkNMVURFUyArPSAtSSQodG9wc3Jj
ZGlyKS90b29sa2l0L3hyZQorCiB0ZXN0X2NvbnRhaW5lcjogbW96ZHJhd2luZ2FyZWEubyBtb3pj
b250YWluZXIubyB0ZXN0X2NvbnRhaW5lci5jCiAJJChDQykgJChNT1pfR1RLMl9DRkxBR1MpIC1v
IHRlc3RfY29udGFpbmVyIHRlc3RfY29udGFpbmVyLmMgXAogCQltb3pkcmF3aW5nYXJlYS5vIG1v
emNvbnRhaW5lci5vIFwKLS0tIG1vemlsbGEvd2lkZ2V0L3NyYy9ndGsyL25zRmlsZVBpY2tlci5j
cHAuc2F2CTIwMDktMDktMDUgMDA6MTA6MzYuMDAwMDAwMDAwICswMjAwCisrKyBtb3ppbGxhL3dp
ZGdldC9zcmMvZ3RrMi9uc0ZpbGVQaWNrZXIuY3BwCTIwMDktMDktMDUgMTA6MDk6MjYuMDAwMDAw
MDAwICswMjAwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8Z3RrL2d0a3N0b2NrLmg+CiAj
aW5jbHVkZSA8Z3RrL2d0a21lc3NhZ2VkaWFsb2cuaD4KICNpbmNsdWRlIDxndGsvZ3RraW1hZ2Uu
aD4KKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgogCiAjaW5jbHVkZSAibnNJRmlsZVVSTC5oIgogI2lu
Y2x1ZGUgIm5zSVVSSS5oIgpAQCAtNTksNiArNjAsNyBAQAogCiAjaW5jbHVkZSAibnNGaWxlUGlj
a2VyLmgiCiAjaW5jbHVkZSAibnNBY2Nlc3NpYmlsaXR5SGVscGVyLmgiCisjaW5jbHVkZSAibnNL
REVVdGlscy5oIgogCiAjZGVmaW5lIERFQ0xfRlVOQ19QVFIoZnVuYykgc3RhdGljIF8jI2Z1bmMj
I19mbiBfIyNmdW5jCiAjZGVmaW5lIEdUS19GSUxFX0NIT09TRVIod2lkZ2V0KSAoKEd0a0ZpbGVD
aG9vc2VyKikgd2lkZ2V0KQpAQCAtOTUsNiArOTcsNyBAQCB0eXBlZGVmIEd0a1dpZGdldCogKCpf
Z3RrX2ZpbGVfY2hvb3Nlcl9kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHdGtGaWxlQ2hvb3NlckFjdGlvbiBhY3Rpb24sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAq
Zmlyc3RfYnV0dG9uX3RleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAuLi4pOwordHlwZWRlZiB2b2lkICgqX2d0a19kaWFsb2dfc2V0X2Fs
dGVybmF0aXZlX2J1dHRvbl9vcmRlcl9mbikoR3RrRGlhbG9nICpkaWFsb2csIGdpbnQgZmlyc3Rf
cmVzcG9uc2VfaWQsIC4uLik7CiB0eXBlZGVmIHZvaWQgKCpfZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRf
c2VsZWN0X211bHRpcGxlX2ZuKShHdGtGaWxlQ2hvb3NlciogY2hvb3NlciwgZ2Jvb2xlYW4gdHJ1
dGgpOwogdHlwZWRlZiB2b2lkICgqX2d0a19maWxlX2Nob29zZXJfc2V0X2RvX292ZXJ3cml0ZV9j
b25maXJtYXRpb25fZm4pKEd0a0ZpbGVDaG9vc2VyKiBjaG9vc2VyLCBnYm9vbGVhbiBkb19jb25m
aXJtKTsKIHR5cGVkZWYgdm9pZCAoKl9ndGtfZmlsZV9jaG9vc2VyX3NldF9jdXJyZW50X25hbWVf
Zm4pKEd0a0ZpbGVDaG9vc2VyKiBjaG9vc2VyLCBjb25zdCBnY2hhciogbmFtZSk7CkBAIC0xMTks
NiArMTIyLDcgQEAgREVDTF9GVU5DX1BUUihndGtfZmlsZV9jaG9vc2VyX2dldF9maWxlbgogREVD
TF9GVU5DX1BUUihndGtfZmlsZV9jaG9vc2VyX2dldF91cmkpOwogREVDTF9GVU5DX1BUUihndGtf
ZmlsZV9jaG9vc2VyX2dldF91cmlzKTsKIERFQ0xfRlVOQ19QVFIoZ3RrX2ZpbGVfY2hvb3Nlcl9k
aWFsb2dfbmV3KTsKK0RFQ0xfRlVOQ19QVFIoZ3RrX2RpYWxvZ19zZXRfYWx0ZXJuYXRpdmVfYnV0
dG9uX29yZGVyKTsKIERFQ0xfRlVOQ19QVFIoZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfc2VsZWN0X211
bHRpcGxlKTsKIERFQ0xfRlVOQ19QVFIoZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZG9fb3ZlcndyaXRl
X2NvbmZpcm1hdGlvbik7CiBERUNMX0ZVTkNfUFRSKGd0a19maWxlX2Nob29zZXJfc2V0X2N1cnJl
bnRfbmFtZSk7CkBAIC0yMTQsNiArMjE4LDcgQEAgbnNGaWxlUGlja2VyOjpMb2FkU3ltYm9sc0dU
SzI0KCkKICAgR0VUX0xJQkdUS19GVU5DKGd0a19maWxlX2Nob29zZXJfZ2V0X3VyaSk7CiAgIEdF
VF9MSUJHVEtfRlVOQyhndGtfZmlsZV9jaG9vc2VyX2dldF91cmlzKTsKICAgR0VUX0xJQkdUS19G
VU5DKGd0a19maWxlX2Nob29zZXJfZGlhbG9nX25ldyk7CisgIEdFVF9MSUJHVEtfRlVOQyhndGtf
ZGlhbG9nX3NldF9hbHRlcm5hdGl2ZV9idXR0b25fb3JkZXIpOwogICBHRVRfTElCR1RLX0ZVTkMo
Z3RrX2ZpbGVfY2hvb3Nlcl9zZXRfc2VsZWN0X211bHRpcGxlKTsKICAgR0VUX0xJQkdUS19GVU5D
X09QVChndGtfZmlsZV9jaG9vc2VyX3NldF9kb19vdmVyd3JpdGVfY29uZmlybWF0aW9uKTsKICAg
R0VUX0xJQkdUS19GVU5DKGd0a19maWxlX2Nob29zZXJfc2V0X2N1cnJlbnRfbmFtZSk7CkBAIC00
NDIsNyArNDQ3LDggQEAgbnNGaWxlUGlja2VyOjpBcHBlbmRGaWx0ZXIoY29uc3QgbnNBU3RyaQog
ewogICBpZiAoYUZpbHRlci5FcXVhbHNMaXRlcmFsKCIuLmFwcHMiKSkgewogICAgIC8vIE5vIHBs
YXRmb3JtIHNwZWNpZmljIHRoaW5nIHdlIGNhbiBkbyBoZXJlLCByZWFsbHkuLi4uCi0gICAgcmV0
dXJuIE5TX09LOworICAgIGlmKCBtTW9kZSAhPSBtb2RlT3BlbiB8fCAhbnNLREVVdGlsczo6a2Rl
U3VwcG9ydCgpKQorICAgICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAogICBuc0NBdXRvU3RyaW5n
IGZpbHRlciwgbmFtZTsKQEAgLTU5MCw2ICs1OTYsOSBAQCBjb25maXJtX292ZXJ3cml0ZV9maWxl
IChHdGtXaWRnZXQgKnBhcmVuCiBOU19JTUVUSE9ESU1QCiBuc0ZpbGVQaWNrZXI6OlNob3coUFJJ
bnQxNiAqYVJldHVybikKIHsKKyAgaWYoIG5zS0RFVXRpbHM6OmtkZVN1cHBvcnQoKSkKKyAgICAg
IHJldHVybiBrZGVGaWxlRGlhbG9nKCBhUmV0dXJuICk7CisKICAgTlNfRU5TVVJFX0FSR19QT0lO
VEVSKGFSZXR1cm4pOwogCiAgIG5zWFBJRExDU3RyaW5nIHRpdGxlOwpAQCAtNjA1LDYgKzYxNCwx
MiBAQCBuc0ZpbGVQaWNrZXI6OlNob3coUFJJbnQxNiAqYVJldHVybikKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BPTlNFX0NBTkNF
TCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0X2J1dHRvbiwgR1RL
X1JFU1BPTlNFX0FDQ0VQVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM
TCk7CisKKyAgX2d0a19kaWFsb2dfc2V0X2FsdGVybmF0aXZlX2J1dHRvbl9vcmRlcihHVEtfRElB
TE9HKGZpbGVfY2hvb3NlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHVEtfUkVTUE9OU0VfQUNDRVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR1RLX1JFU1BPTlNFX0NBTkNFTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC0xKTsKKwogICBpZiAobUFsbG93VVJMcykgewogICAgIF9ndGtf
ZmlsZV9jaG9vc2VyX3NldF9sb2NhbF9vbmx5KEdUS19GSUxFX0NIT09TRVIoZmlsZV9jaG9vc2Vy
KSwgRkFMU0UpOwogICB9CkBAIC03MjcsMyArNzQyLDIyMSBAQCBuc0ZpbGVQaWNrZXI6OlNob3co
UFJJbnQxNiAqYVJldHVybikKIAogICByZXR1cm4gTlNfT0s7CiB9CisKK25zQ1N0cmluZyBuc0Zp
bGVQaWNrZXI6OmtkZU1ha2VGaWx0ZXIoIGludCBpbmRleCApCisgICAgeworICAgIG5zQ1N0cmlu
ZyBidWYgPSAqbUZpbHRlcnNbIGluZGV4IF07CisgICAgZm9yKCBQUlVpbnQzMiBpID0gMDsKKyAg
ICAgICAgIGkgPCBidWYuTGVuZ3RoKCk7CisgICAgICAgICArK2kgKQorICAgICAgICBpZiggYnVm
WyBpIF0gPT0gJzsnICkgLy8gS0RFIHNlcGFyYXRlcyBqdXN0IHVzaW5nIHNwYWNlcworICAgICAg
ICAgICAgYnVmLlNldENoYXJBdCggJyAnLCBpICk7CisgICAgaWYgKCFtRmlsdGVyTmFtZXNbaW5k
ZXhdLT5Jc0VtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgYnVmICs9ICJ8IjsKKyAgICAgICAg
YnVmICs9IG1GaWx0ZXJOYW1lc1tpbmRleF0tPmdldCgpOworICAgICAgICB9CisgICAgcmV0dXJu
IGJ1ZjsKKyAgICB9CisKK3N0YXRpYyBQUkludDMyIHdpbmRvd1RvWGlkKCBuc0lXaWRnZXQqIHdp
ZGdldCApCisgICAgeworICAgIEd0a1dpbmRvdyAqcGFyZW50X3dpZGdldCA9IGdldF9ndGtfd2lu
ZG93X2Zvcl9uc2l3aWRnZXQoIHdpZGdldCApOworICAgIEdka1dpbmRvdyogZ2RrX3dpbmRvdyA9
IGd0a193aWRnZXRfZ2V0X3dpbmRvdyggZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoIEdUS19XSURH
RVQoIHBhcmVudF93aWRnZXQgKSkpOworICAgIHJldHVybiBHREtfV0lORE9XX1hJRCggZ2RrX3dp
bmRvdyApOworICAgIH0KKworTlNfSU1FVEhPRElNUCBuc0ZpbGVQaWNrZXI6OmtkZUZpbGVEaWFs
b2coUFJJbnQxNiAqYVJldHVybikKKyAgICB7CisgICAgTlNfRU5TVVJFX0FSR19QT0lOVEVSKGFS
ZXR1cm4pOworCisgICAgaWYoIG1Nb2RlID09IG1vZGVPcGVuICYmIG1GaWx0ZXJzLkNvdW50KCkg
PT0gMSAmJiBtRmlsdGVyc1sgMCBdLT5FcXVhbHNMaXRlcmFsKCAiLi5hcHBzIiApKQorICAgICAg
ICByZXR1cm4ga2RlQXBwc0RpYWxvZyggYVJldHVybiApOworCisgICAgbnNYUElETENTdHJpbmcg
dGl0bGU7CisgICAgdGl0bGUuQWRvcHQoVG9OZXdVVEY4U3RyaW5nKG1UaXRsZSkpOworCisgICAg
Y29uc3QgY2hhciogYXJnID0gTlVMTDsKKyAgICBpZiggbUFsbG93VVJMcyApCisgICAgICAgIHsK
KyAgICAgICAgc3dpdGNoKCBtTW9kZSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNl
IG5zSUZpbGVQaWNrZXI6Om1vZGVPcGVuOgorICAgICAgICAgICAgY2FzZSBuc0lGaWxlUGlja2Vy
Ojptb2RlT3Blbk11bHRpcGxlOgorICAgICAgICAgICAgICAgIGFyZyA9ICJHRVRPUEVOVVJMIjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgbnNJRmlsZVBpY2tlcjo6
bW9kZVNhdmU6CisgICAgICAgICAgICAgICAgYXJnID0gIkdFVFNBVkVVUkwiOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBuc0lGaWxlUGlja2VyOjptb2RlR2V0Rm9s
ZGVyOgorICAgICAgICAgICAgICAgIGFyZyA9ICJHRVRESVJFQ1RPUllVUkwiOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgIHN3aXRjaCggbU1vZGUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
Y2FzZSBuc0lGaWxlUGlja2VyOjptb2RlT3BlbjoKKyAgICAgICAgICAgIGNhc2UgbnNJRmlsZVBp
Y2tlcjo6bW9kZU9wZW5NdWx0aXBsZToKKyAgICAgICAgICAgICAgICBhcmcgPSAiR0VUT1BFTkZJ
TEVOQU1FIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgbnNJRmls
ZVBpY2tlcjo6bW9kZVNhdmU6CisgICAgICAgICAgICAgICAgYXJnID0gIkdFVFNBVkVGSUxFTkFN
RSI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIG5zSUZpbGVQaWNr
ZXI6Om1vZGVHZXRGb2xkZXI6CisgICAgICAgICAgICAgICAgYXJnID0gIkdFVERJUkVDVE9SWUZJ
TEVOQU1FIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgIG5zQ0F1dG9TdHJpbmcgZGlyZWN0b3J5OworICBpZiAobURpc3BsYXlEaXJlY3Rvcnkp
IHsKKyAgICBtRGlzcGxheURpcmVjdG9yeS0+R2V0TmF0aXZlUGF0aChkaXJlY3RvcnkpOworICB9
IGVsc2UgaWYgKG1QcmV2RGlzcGxheURpcmVjdG9yeSkgeworICAgIG1QcmV2RGlzcGxheURpcmVj
dG9yeS0+R2V0TmF0aXZlUGF0aChkaXJlY3RvcnkpOworICB9CisKKyAgICBuc0NBdXRvU3RyaW5n
IHN0YXJ0ZGlyOworICBpZiAoIWRpcmVjdG9yeS5Jc0VtcHR5KCkpIHsKKyAgICBzdGFydGRpciA9
IGRpcmVjdG9yeTsKKyAgfQorICBpZiAobU1vZGUgPT0gbnNJRmlsZVBpY2tlcjo6bW9kZVNhdmUp
IHsKKyAgICBpZiggIXN0YXJ0ZGlyLklzRW1wdHkoKSkKKyAgICAgIHsKKyAgICAgIHN0YXJ0ZGly
ICs9ICIvIjsKKyAgICAgIHN0YXJ0ZGlyICs9IFRvTmV3VVRGOFN0cmluZyhtRGVmYXVsdCk7Cisg
ICAgICB9CisgICAgZWxzZQorICAgICAgc3RhcnRkaXIgPSBUb05ld1VURjhTdHJpbmcobURlZmF1
bHQpOworICB9CisgIGlmKCBzdGFydGRpci5Jc0VtcHR5KCkpCisgICAgICBzdGFydGRpciA9ICIu
IjsKKworICAgIG5zQ0F1dG9TdHJpbmcgZmlsdGVyczsKKyAgICBQUkludDMyIGNvdW50ID0gbUZp
bHRlcnMuQ291bnQoKTsKKyAgICBpZiggY291bnQgPT0gMCApIC8vanVzdCBpbiBjYXNlCisgICAg
ICAgIGZpbHRlcnMgPSAiKiI7CisgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIGZpbHRlcnMg
PSBrZGVNYWtlRmlsdGVyKCAwICk7CisgICAgICAgIGZvciAoUFJJbnQzMiBpID0gMTsgaSA8IGNv
dW50OyArK2kpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBmaWx0ZXJzICs9ICJcbiI7Cisg
ICAgICAgICAgICBmaWx0ZXJzICs9IGtkZU1ha2VGaWx0ZXIoIGkgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgbnNDU3RyaW5nQXJyYXkgY29tbWFuZDsKKyAgICBjb21tYW5kLkFw
cGVuZENTdHJpbmcoIG5zQ0F1dG9TdHJpbmcoIGFyZyApKTsKKyAgICBjb21tYW5kLkFwcGVuZENT
dHJpbmcoIHN0YXJ0ZGlyICk7CisgICAgaWYoIG1Nb2RlICE9IG5zSUZpbGVQaWNrZXI6Om1vZGVH
ZXRGb2xkZXIgKQorICAgICAgICB7CisgICAgICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmluZyggZmls
dGVycyApOworICAgICAgICBuc0NBdXRvU3RyaW5nIHNlbGVjdGVkOworICAgICAgICBzZWxlY3Rl
ZC5BcHBlbmRJbnQoIG1TZWxlY3RlZFR5cGUgKTsKKyAgICAgICAgY29tbWFuZC5BcHBlbmRDU3Ry
aW5nKCBzZWxlY3RlZCApOworICAgICAgICB9CisgICAgY29tbWFuZC5BcHBlbmRDU3RyaW5nKCB0
aXRsZSApOworICAgIGlmKCBtTW9kZSA9PSBuc0lGaWxlUGlja2VyOjptb2RlT3Blbk11bHRpcGxl
ICkKKyAgICAgICAgY29tbWFuZC5BcHBlbmRDU3RyaW5nKCBOU19MSVRFUkFMX0NTVFJJTkcoICJN
VUxUSVBMRSIgKSk7CisgICAgaWYoIFBSSW50MzIgeGlkID0gd2luZG93VG9YaWQoIG1QYXJlbnRX
aWRnZXQgKSkKKyAgICAgICAgeworICAgICAgICBjb21tYW5kLkFwcGVuZENTdHJpbmcoIE5TX0xJ
VEVSQUxfQ1NUUklORyggIlBBUkVOVCIgKSk7CisgICAgICAgIG5zQ0F1dG9TdHJpbmcgcGFyZW50
OworICAgICAgICBwYXJlbnQuQXBwZW5kSW50KCB4aWQgKTsKKyAgICAgICAgY29tbWFuZC5BcHBl
bmRDU3RyaW5nKCBwYXJlbnQgKTsKKyAgICAgICAgfQorCisgICAgbnNDU3RyaW5nQXJyYXkgb3V0
cHV0OworICAgIGlmKCBuc0tERVV0aWxzOjpjb21tYW5kQmxvY2tVaSggY29tbWFuZCwgZ2V0X2d0
a193aW5kb3dfZm9yX25zaXdpZGdldCggbVBhcmVudFdpZGdldCApLCAmb3V0cHV0ICkpCisgICAg
ICAgIHsKKyAgICAgICAgKmFSZXR1cm4gPSBuc0lGaWxlUGlja2VyOjpyZXR1cm5PSzsKKyAgICAg
ICAgbUZpbGVzLkNsZWFyKCk7CisgICAgICAgIGlmKCBtTW9kZSAhPSBuc0lGaWxlUGlja2VyOjpt
b2RlR2V0Rm9sZGVyICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIG1TZWxlY3RlZFR5cGUg
PSBhdG9pKCBvdXRwdXRbIDAgXS0+Z2V0KCkpOworICAgICAgICAgICAgb3V0cHV0LlJlbW92ZUNT
dHJpbmdBdCggMCApOworICAgICAgICAgICAgfQorICAgICAgICBpZiAobU1vZGUgPT0gbnNJRmls
ZVBpY2tlcjo6bW9kZU9wZW5NdWx0aXBsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIG1G
aWxlVVJMLlRydW5jYXRlKCk7CisgICAgICAgICAgICBQUlVpbnQzMiBjb3VudCA9IG91dHB1dC5D
b3VudCgpOworICAgICAgICAgICAgZm9yKCBQUlVpbnQzMiBpID0gMDsKKyAgICAgICAgICAgICAg
ICAgaSA8IGNvdW50OworICAgICAgICAgICAgICAgICArK2kgKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lMb2NhbEZpbGU+IGxvY2FsZmlsZTsKKyAgICAg
ICAgICAgICAgICBuc3Jlc3VsdCBydiA9IE5TX05ld05hdGl2ZUxvY2FsRmlsZSggKm91dHB1dFsg
aSBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUl9GQUxTRSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMobG9jYWxm
aWxlKSk7CisgICAgICAgICAgICAgICAgaWYgKE5TX1NVQ0NFRURFRChydikpCisgICAgICAgICAg
ICAgICAgICAgIG1GaWxlcy5BcHBlbmRPYmplY3QobG9jYWxmaWxlKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgIG1GaWxlVVJMID0gb3V0cHV0LkNvdW50KCkgPiAwID8gKm91dHB1dFsgMCBdIDogbnNDU3Ry
aW5nKCk7CisgICAgICAgICAgICB9CisgIC8vIFJlbWVtYmVyIGxhc3QgdXNlZCBkaXJlY3Rvcnku
CisgIG5zQ09NUHRyPG5zSUxvY2FsRmlsZT4gZmlsZTsKKyAgR2V0RmlsZShnZXR0ZXJfQWRkUmVm
cyhmaWxlKSk7CisgIGlmIChmaWxlKSB7CisgICAgbnNDT01QdHI8bnNJRmlsZT4gZGlyOworICAg
IGZpbGUtPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyhkaXIpKTsKKyAgICBuc0NPTVB0cjxuc0lM
b2NhbEZpbGU+IGxvY2FsRGlyKGRvX1F1ZXJ5SW50ZXJmYWNlKGRpcikpOworICAgIGlmIChsb2Nh
bERpcikgeworICAgICAgbG9jYWxEaXIuc3dhcChtUHJldkRpc3BsYXlEaXJlY3RvcnkpOworICAg
IH0KKyAgfQorICAgICAgICBpZiAobU1vZGUgPT0gbnNJRmlsZVBpY2tlcjo6bW9kZVNhdmUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICBuc0NPTVB0cjxuc0lMb2NhbEZpbGU+IGZpbGU7Cisg
ICAgICAgICAgICBHZXRGaWxlKGdldHRlcl9BZGRSZWZzKGZpbGUpKTsKKyAgICAgICAgICAgIGlm
IChmaWxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQUkJvb2wgZXhpc3Rz
ID0gUFJfRkFMU0U7CisgICAgICAgICAgICAgICAgZmlsZS0+RXhpc3RzKCZleGlzdHMpOworICAg
ICAgICAgICAgICAgIGlmIChleGlzdHMpIC8vIFRPRE8gZG8gb3ZlcndyaXRlIGNoZWNrIGluIHRo
ZSBoZWxwZXIgYXBwCisgICAgICAgICAgICAgICAgICAgICphUmV0dXJuID0gbnNJRmlsZVBpY2tl
cjo6cmV0dXJuUmVwbGFjZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgKmFSZXR1cm4gPSBuc0lGaWxlUGlj
a2VyOjpyZXR1cm5DYW5jZWw7CisgICAgICAgIH0KKyAgICByZXR1cm4gTlNfT0s7CisgICAgfQor
CisKK05TX0lNRVRIT0RJTVAgbnNGaWxlUGlja2VyOjprZGVBcHBzRGlhbG9nKFBSSW50MTYgKmFS
ZXR1cm4pCisgICAgeworICAgIE5TX0VOU1VSRV9BUkdfUE9JTlRFUihhUmV0dXJuKTsKKworICAg
IG5zWFBJRExDU3RyaW5nIHRpdGxlOworICAgIHRpdGxlLkFkb3B0KFRvTmV3VVRGOFN0cmluZyht
VGl0bGUpKTsKKworICAgIG5zQ1N0cmluZ0FycmF5IGNvbW1hbmQ7CisgICAgY29tbWFuZC5BcHBl
bmRDU3RyaW5nKCBOU19MSVRFUkFMX0NTVFJJTkcoICJBUFBTRElBTE9HIiApKTsKKyAgICBjb21t
YW5kLkFwcGVuZENTdHJpbmcoIHRpdGxlICk7CisgICAgaWYoIFBSSW50MzIgeGlkID0gd2luZG93
VG9YaWQoIG1QYXJlbnRXaWRnZXQgKSkKKyAgICAgICAgeworICAgICAgICBjb21tYW5kLkFwcGVu
ZENTdHJpbmcoIE5TX0xJVEVSQUxfQ1NUUklORyggIlBBUkVOVCIgKSk7CisgICAgICAgIG5zQ0F1
dG9TdHJpbmcgcGFyZW50OworICAgICAgICBwYXJlbnQuQXBwZW5kSW50KCB4aWQgKTsKKyAgICAg
ICAgY29tbWFuZC5BcHBlbmRDU3RyaW5nKCBwYXJlbnQgKTsKKyAgICAgICAgfQorCisgICAgbnND
U3RyaW5nQXJyYXkgb3V0cHV0OworICAgIGlmKCBuc0tERVV0aWxzOjpjb21tYW5kQmxvY2tVaSgg
Y29tbWFuZCwgZ2V0X2d0a193aW5kb3dfZm9yX25zaXdpZGdldCggbVBhcmVudFdpZGdldCApLCAm
b3V0cHV0ICkpCisgICAgICAgIHsKKyAgICAgICAgKmFSZXR1cm4gPSBuc0lGaWxlUGlja2VyOjpy
ZXR1cm5PSzsKKyAgICAgICAgbUZpbGVVUkwgPSBvdXRwdXQuQ291bnQoKSA+IDAgPyAqb3V0cHV0
WyAwIF0gOiBuc0NTdHJpbmcoKTsKKyAgICAgICAgfQorICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAqYVJldHVybiA9IG5zSUZpbGVQaWNrZXI6OnJldHVybkNhbmNlbDsKKyAgICAgICAgfQor
ICAgIHJldHVybiBOU19PSzsKKyAgICB9Ci0tLSBtb3ppbGxhL3dpZGdldC9zcmMvZ3RrMi9uc0Zp
bGVQaWNrZXIuaC5zYXYJMjAwOS0wOS0wNSAwMDoxMDozNi4wMDAwMDAwMDAgKzAyMDAKKysrIG1v
emlsbGEvd2lkZ2V0L3NyYy9ndGsyL25zRmlsZVBpY2tlci5oCTIwMDktMDktMDUgMDA6MTA6NDIu
MDAwMDAwMDAwICswMjAwCkBAIC05OCw2ICs5OCwxMiBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgog
ICBzdGF0aWMgbnNJTG9jYWxGaWxlICptUHJldkRpc3BsYXlEaXJlY3Rvcnk7CiAgIHN0YXRpYyBQ
UkxpYnJhcnkgKm1HVEsyNDsKKyAgCisgIGJvb2wga2RlUnVubmluZygpOworICBib29sIGdldEtk
ZVJ1bm5pbmcoKTsKKyAgTlNfSU1FVEhPRElNUCBrZGVGaWxlRGlhbG9nKFBSSW50MTYgKmFSZXR1
cm4pOworICBOU19JTUVUSE9ESU1QIGtkZUFwcHNEaWFsb2coUFJJbnQxNiAqYVJldHVybik7Cisg
IG5zQ1N0cmluZyBrZGVNYWtlRmlsdGVyKCBpbnQgaW5kZXggKTsKIH07CiAKICNlbmRpZgotLS0g
bW96aWxsYS93aWRnZXQvc3JjL2d0azIvbnNQcmludERpYWxvZ0dUSy5jcHAuc2F2CTIwMDktMDkt
MDUgMDA6MTA6MzYuMDAwMDAwMDAwICswMjAwCisrKyBtb3ppbGxhL3dpZGdldC9zcmMvZ3RrMi9u
c1ByaW50RGlhbG9nR1RLLmNwcAkyMDA5LTA5LTA1IDAwOjEwOjQyLjAwMDAwMDAwMCArMDIwMApA
QCAtMTQ1LDYgKzE0NSwxMCBAQCBTaG93Q3VzdG9tRGlhbG9nKEd0a0NvbWJvQm94ICpjaGFuZ2Vk
X2JvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHVEtfU1RPQ0tfT0ssIEdUS19SRVNQT05TRV9BQ0NFUFQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgZ3RrX2Rp
YWxvZ19zZXRfZGVmYXVsdF9yZXNwb25zZShHVEtfRElBTE9HKHByb21wdF9kaWFsb2cpLCBHVEtf
UkVTUE9OU0VfQUNDRVBUKTsKKyAgZ3RrX2RpYWxvZ19zZXRfYWx0ZXJuYXRpdmVfYnV0dG9uX29y
ZGVyKEdUS19ESUFMT0cocHJvbXB0X2RpYWxvZyksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHVEtfUkVTUE9OU0VfQUNDRVBULAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1JFU1BPTlNFX1JFSkVDVCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKIAogICBwcmludEJ1bmRsZS0+R2V0
U3RyaW5nRnJvbU5hbWUoTlNfTElURVJBTF9TVFJJTkcoImN1c3RvbUhlYWRlckZvb3RlclByb21w
dCIpLmdldCgpLCBnZXR0ZXJfQ29waWVzKGludGxTdHJpbmcpKTsKICAgR3RrV2lkZ2V0KiBjdXN0
b21fbGFiZWwgPSBndGtfbGFiZWxfbmV3KE5TX0NvbnZlcnRVVEYxNnRvVVRGOChpbnRsU3RyaW5n
KS5nZXQoKSk7Ci0tLSBtb3ppbGxhL3hwY29tL2lvL01ha2VmaWxlLmluLnNhdgkyMDA5LTA4LTI1
IDIxOjI1OjIwLjAwMDAwMDAwMCArMDIwMAorKysgbW96aWxsYS94cGNvbS9pby9NYWtlZmlsZS5p
bgkyMDA5LTA5LTA1IDAwOjQ2OjIwLjAwMDAwMDAwMCArMDIwMApAQCAtMTk5LDMgKzE5OSw0IEBA
IGVuZGlmCiBlbmRpZgogCiBMT0NBTF9JTkNMVURFUwk9IC1JLi4KK0xPQ0FMX0lOQ0xVREVTICs9
IC1JJCh0b3BzcmNkaXIpL3Rvb2xraXQveHJlCi0tLSBtb3ppbGxhL3hwY29tL2lvL25zTG9jYWxG
aWxlVW5peC5jcHAuc2F2CTIwMDktMDctMzEgMDg6MzA6MzcuMDAwMDAwMDAwICswMjAwCisrKyBt
b3ppbGxhL3hwY29tL2lvL25zTG9jYWxGaWxlVW5peC5jcHAJMjAwOS0wOS0wNSAwMDo1MTo0NS4w
MDAwMDAwMDAgKzAyMDAKQEAgLTg0LDYgKzg0LDcgQEAKIAogI2lmZGVmIE1PWl9XSURHRVRfR1RL
MgogI2luY2x1ZGUgIm5zSUdub21lVkZTU2VydmljZS5oIgorI2luY2x1ZGUgIm5zS0RFVXRpbHMu
aCIKICNlbmRpZgogCiAjaW5jbHVkZSAibnNOYXRpdmVDaGFyc2V0VXRpbHMuaCIKQEAgLTE2NjYs
MTYgKzE2NjcsMTMgQEAgTlNfSU1FVEhPRElNUAogbnNMb2NhbEZpbGU6OlJldmVhbCgpCiB7CiAj
aWZkZWYgTU9aX1dJREdFVF9HVEsyCi0gICAgbnNDT01QdHI8bnNJR25vbWVWRlNTZXJ2aWNlPiB2
ZnMgPSBkb19HZXRTZXJ2aWNlKE5TX0dOT01FVkZTU0VSVklDRV9DT05UUkFDVElEKTsKLSAgICBp
ZiAoIXZmcykKLSAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7Ci0KKyAgICBuc0NBdXRv
U3RyaW5nIHVybDsKICAgICBQUkJvb2wgaXNEaXJlY3Rvcnk7CiAgICAgaWYgKE5TX0ZBSUxFRChJ
c0RpcmVjdG9yeSgmaXNEaXJlY3RvcnkpKSkKICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxV
UkU7CiAKICAgICBpZiAoaXNEaXJlY3RvcnkpIHsKLSAgICAgICAgcmV0dXJuIHZmcy0+U2hvd1VS
SUZvcklucHV0KG1QYXRoKTsKKyAgICAgICAgdXJsID0gbVBhdGg7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgbnNDT01QdHI8bnNJRmlsZT4gcGFyZW50RGlyOwogICAgICAgICBuc0NBdXRvU3RyaW5n
IGRpclBhdGg7CkBAIC0xNjg0LDggKzE2ODIsMjEgQEAgbnNMb2NhbEZpbGU6OlJldmVhbCgpCiAg
ICAgICAgIGlmIChOU19GQUlMRUQocGFyZW50RGlyLT5HZXROYXRpdmVQYXRoKGRpclBhdGgpKSkK
ICAgICAgICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOwogCi0gICAgICAgIHJldHVybiB2
ZnMtPlNob3dVUklGb3JJbnB1dChkaXJQYXRoKTsKKyAgICAgICAgdXJsID0gZGlyUGF0aDsKICAg
ICB9CisKKyAgICBpZiggbnNLREVVdGlsczo6a2RlU3VwcG9ydCgpKSB7CisgICAgICAgIG5zQ1N0
cmluZ0FycmF5IGNvbW1hbmQ7CisgICAgICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmluZyggTlNfTElU
RVJBTF9DU1RSSU5HKCAiT1BFTiIgKSk7CisgICAgICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmluZygg
dXJsICk7CisgICAgICAgIHJldHVybiBuc0tERVV0aWxzOjpjb21tYW5kKCBjb21tYW5kICkgPyBO
U19PSyA6IE5TX0VSUk9SX0ZBSUxVUkU7CisgICAgfQorCisgICAgbnNDT01QdHI8bnNJR25vbWVW
RlNTZXJ2aWNlPiB2ZnMgPSBkb19HZXRTZXJ2aWNlKE5TX0dOT01FVkZTU0VSVklDRV9DT05UUkFD
VElEKTsKKyAgICBpZiAoIXZmcykKKyAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7Cisg
ICAgcmV0dXJuIHZmcy0+U2hvd1VSSUZvcklucHV0KHVybCk7CisKICNlbHNlCiAgICAgcmV0dXJu
IE5TX0VSUk9SX0ZBSUxVUkU7CiAjZW5kaWYKQEAgLTE2OTUsNiArMTcwNiwxMyBAQCBOU19JTUVU
SE9ESU1QCiBuc0xvY2FsRmlsZTo6TGF1bmNoKCkKIHsKICNpZmRlZiBNT1pfV0lER0VUX0dUSzIK
KyAgICBpZiggbnNLREVVdGlsczo6a2RlU3VwcG9ydCgpKSB7CisgICAgICAgIG5zQ1N0cmluZ0Fy
cmF5IGNvbW1hbmQ7CisgICAgICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmluZyggTlNfTElURVJBTF9D
U1RSSU5HKCAiT1BFTiIgKSk7CisgICAgICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmluZyggbVBhdGgg
KTsKKyAgICAgICAgcmV0dXJuIG5zS0RFVXRpbHM6OmNvbW1hbmQoIGNvbW1hbmQgKSA/IE5TX09L
IDogTlNfRVJST1JfRkFJTFVSRTsKKyAgICB9CisKICAgICBuc0NPTVB0cjxuc0lHbm9tZVZGU1Nl
cnZpY2U+IHZmcyA9IGRvX0dldFNlcnZpY2UoTlNfR05PTUVWRlNTRVJWSUNFX0NPTlRSQUNUSUQp
OwogICAgIGlmICghdmZzKQogICAgICAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3889</attachid>
            <date>2009-09-15 23:35:40 +0400</date>
            <delta_ts>2009-09-15 23:35:40 +0400</delta_ts>
            <desc>mozilla-protocol_handler.patch</desc>
            <filename>mozilla-protocol_handler.patch</filename>
            <type>text/plain</type>
            <size>4736</size>
            <attacher name="Zerg">anubix</attacher>
            
              <data encoding="base64">RnJvbTogV29sZmdhbmcgUm9zZW5hdWVyIDx3ckByb3NlbmF1ZXIub3JnPgpTdWJqZWN0OiBSZW1v
dmUgb2Jzb2xldGUgY29kZSB3aGljaCBvbmx5IGNvbmZ1c2VzIFVJIGJlaGF2aW91cgpSZWZlcmVu
Y2VzOgpodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0zODk3MzIK
aHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgwNzA5CgoKZGlm
ZiAtLWdpdCBhL3VyaWxvYWRlci9leHRoYW5kbGVyL3VuaXgvbnNPU0hlbHBlckFwcFNlcnZpY2Uu
Y3BwIGIvdXJpbG9hZGVyL2V4dGhhbmRsZXIvdW5peC9uc09TSGVscGVyQXBwU2VydmljZS5jcHAK
LS0tIGEvdXJpbG9hZGVyL2V4dGhhbmRsZXIvdW5peC9uc09TSGVscGVyQXBwU2VydmljZS5jcHAK
KysrIGIvdXJpbG9hZGVyL2V4dGhhbmRsZXIvdW5peC9uc09TSGVscGVyQXBwU2VydmljZS5jcHAK
QEAgLTExOTksOTcgKzExOTksMjggQEAgbnNPU0hlbHBlckFwcFNlcnZpY2U6OkdldEhhbmRsZXJB
bmREZXNjcgogICAgIHJ2ID0gbWFpbGNhcC0+UmVhZExpbmUoY0J1ZmZlciwgJm1vcmUpOwogICB9
IHdoaWxlIChOU19TVUNDRUVERUQocnYpKTsKICAgbWFpbGNhcEZpbGUtPkNsb3NlKCk7CiAgIHJl
dHVybiBydjsKIH0KIAotLyogTG9va3MgdXAgdGhlIGhhbmRsZXIgZm9yIGEgc3BlY2lmaWMgc2No
ZW1lIGZyb20gcHJlZnMgYW5kIHJldHVybnMgdGhlCi0gKiBmaWxlIHJlcHJlc2VudGluZyBpdCBp
biBhQXBwLiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZ3VhcmFudGVlIHRoZQotICogZXhp
c3RhbmNlIG9mICphQXBwLgotICovCi1uc3Jlc3VsdAotbnNPU0hlbHBlckFwcFNlcnZpY2U6Okdl
dEhhbmRsZXJBcHBGcm9tUHJlZnMoY29uc3QgY2hhciogYVNjaGVtZSwgLypvdXQqLyBuc0lGaWxl
KiogYUFwcCkKLXsKLSAgbnNyZXN1bHQgcnY7Ci0gIG5zQ09NUHRyPG5zSVByZWZTZXJ2aWNlPiBz
cnYoZG9fR2V0U2VydmljZShOU19QUkVGU0VSVklDRV9DT05UUkFDVElELCAmcnYpKTsKLSAgaWYg
KE5TX0ZBSUxFRChydikpIC8vIHdlIGhhdmUgbm8gcHJlZiBzZXJ2aWNlLi4uIHRoYXQncyBiYWQK
LSAgICByZXR1cm4gcnY7Ci0KLSAgbnNDT01QdHI8bnNJUHJlZkJyYW5jaD4gYnJhbmNoOwotICBz
cnYtPkdldEJyYW5jaCgibmV0d29yay5wcm90b2NvbC1oYW5kbGVyLmFwcC4iLCBnZXR0ZXJfQWRk
UmVmcyhicmFuY2gpKTsKLSAgaWYgKCFicmFuY2gpIC8vIE5vIHByb3RvY29sIGhhbmRsZXJzIHNl
dCB1cCAtPiBjYW4ndCBsb2FkIHVybAotICAgIHJldHVybiBOU19FUlJPUl9OT1RfQVZBSUxBQkxF
OwotCi0gIG5zWFBJRExDU3RyaW5nIGFwcFBhdGg7Ci0gIHJ2ID0gYnJhbmNoLT5HZXRDaGFyUHJl
ZihhU2NoZW1lLCBnZXR0ZXJfQ29waWVzKGFwcFBhdGgpKTsKLSAgaWYgKE5TX0ZBSUxFRChydikp
Ci0gICAgcmV0dXJuIHJ2OwotCi0gIExPRygoIiAgIGZvdW5kIGFwcCAlc1xuIiwgYXBwUGF0aC5n
ZXQoKSkpOwotCi0gIC8vIEZpcnN0LCB0cnkgdG8gdHJlYXQgfGFwcFBhdGh8IGFzIGFic29sdXRl
IHBhdGgsIGlmIGl0IHN0YXJ0cyB3aXRoICcvJwotICBOU19Db252ZXJ0VVRGOHRvVVRGMTYgdXRm
MTZBcHBQYXRoKGFwcFBhdGgpOwotICBpZiAoYXBwUGF0aC5GaXJzdCgpID09ICcvJykgewotICAg
IG5zSUxvY2FsRmlsZSogZmlsZTsKLSAgICBydiA9IE5TX05ld0xvY2FsRmlsZSh1dGYxNkFwcFBh
dGgsIFBSX1RSVUUsICZmaWxlKTsKLSAgICAqYUFwcCA9IGZpbGU7Ci0gICAgLy8gSWYgdGhpcyB3
b3JrZWQsIHdlIGFyZSBmaW5pc2hlZAotICAgIGlmIChOU19TVUNDRUVERUQocnYpKQotICAgICAg
cmV0dXJuIE5TX09LOwotICB9Ci0KLSAgLy8gU2Vjb25kLCBjaGVjayBmb3IgYSBmaWxlIGluIHRo
ZSBtb3ppbGxhIGFwcCBkaXJlY3RvcnkKLSAgcnYgPSBOU19HZXRTcGVjaWFsRGlyZWN0b3J5KE5T
X09TX0NVUlJFTlRfUFJPQ0VTU19ESVIsIGFBcHApOwotICBpZiAoTlNfU1VDQ0VFREVEKHJ2KSkg
ewotICAgIHJ2ID0gKCphQXBwKS0+QXBwZW5kKHV0ZjE2QXBwUGF0aCk7Ci0gICAgaWYgKE5TX1NV
Q0NFRURFRChydikpIHsKLSAgICAgIFBSQm9vbCBleGlzdHMgPSBQUl9GQUxTRTsKLSAgICAgIHJ2
ID0gKCphQXBwKS0+RXhpc3RzKCZleGlzdHMpOwotICAgICAgaWYgKE5TX1NVQ0NFRURFRChydikg
JiYgZXhpc3RzKQotICAgICAgICByZXR1cm4gTlNfT0s7Ci0gICAgfQotICAgIE5TX1JFTEVBU0Uo
KmFBcHApOwotICB9Ci0KLSAgLy8gVGhpcmRseSwgc2VhcmNoIHRoZSBwYXRoCi0gIHJldHVybiBH
ZXRGaWxlVG9rZW5Gb3JQYXRoKHV0ZjE2QXBwUGF0aC5nZXQoKSwgYUFwcCk7Ci19Ci0KIG5zcmVz
dWx0IG5zT1NIZWxwZXJBcHBTZXJ2aWNlOjpPU1Byb3RvY29sSGFuZGxlckV4aXN0cyhjb25zdCBj
aGFyICogYVByb3RvY29sU2NoZW1lLCBQUkJvb2wgKiBhSGFuZGxlckV4aXN0cykKIHsKICAgTE9H
KCgiLS0gbnNPU0hlbHBlckFwcFNlcnZpY2U6Ok9TUHJvdG9jb2xIYW5kbGVyRXhpc3RzIGZvciAn
JXMnXG4iLAogICAgICAgIGFQcm90b2NvbFNjaGVtZSkpOwogICAqYUhhbmRsZXJFeGlzdHMgPSBQ
Ul9GQUxTRTsKIAotICBuc0NPTVB0cjxuc0lGaWxlPiBhcHA7Ci0gIG5zcmVzdWx0IHJ2ID0gR2V0
SGFuZGxlckFwcEZyb21QcmVmcyhhUHJvdG9jb2xTY2hlbWUsIGdldHRlcl9BZGRSZWZzKGFwcCkp
OwotICBpZiAoTlNfU1VDQ0VFREVEKHJ2KSkgewotICAgIFBSQm9vbCBpc0V4ZWN1dGFibGUgPSBQ
Ul9GQUxTRSwgZXhpc3RzID0gUFJfRkFMU0U7Ci0gICAgbnNyZXN1bHQgcnYxID0gYXBwLT5FeGlz
dHMoJmV4aXN0cyk7Ci0gICAgbnNyZXN1bHQgcnYyID0gYXBwLT5Jc0V4ZWN1dGFibGUoJmlzRXhl
Y3V0YWJsZSk7Ci0gICAgKmFIYW5kbGVyRXhpc3RzID0gKE5TX1NVQ0NFRURFRChydjEpICYmIGV4
aXN0cyAmJiBOU19TVUNDRUVERUQocnYyKSAmJiBpc0V4ZWN1dGFibGUpOwotICAgIExPRygoIiAg
IGhhbmRsZXIgZXhpc3RzOiAlc1xuIiwgKmFIYW5kbGVyRXhpc3RzID8gInllcyIgOiAibm8iKSk7
Ci0gIH0KLQogI2lmZGVmIE1PWl9XSURHRVRfR1RLMgogICAvLyBDaGVjayB0aGUgR0NvbmYgcmVn
aXN0cnkgZm9yIGEgcHJvdG9jb2wgaGFuZGxlcgotICBpZiAoISphSGFuZGxlckV4aXN0cykKLSAg
ICAqYUhhbmRsZXJFeGlzdHMgPSBuc0dOT01FUmVnaXN0cnk6OkhhbmRsZXJFeGlzdHMoYVByb3Rv
Y29sU2NoZW1lKTsKKyAgKmFIYW5kbGVyRXhpc3RzID0gbnNHTk9NRVJlZ2lzdHJ5OjpIYW5kbGVy
RXhpc3RzKGFQcm90b2NvbFNjaGVtZSk7CiAjZW5kaWYKIAogICByZXR1cm4gTlNfT0s7CiB9CiAK
IE5TX0lNRVRIT0RJTVAgbnNPU0hlbHBlckFwcFNlcnZpY2U6OkdldEFwcGxpY2F0aW9uRGVzY3Jp
cHRpb24oY29uc3QgbnNBQ1N0cmluZyYgYVNjaGVtZSwgbnNBU3RyaW5nJiBfcmV0dmFsKQogewot
ICBuc0NPTVB0cjxuc0lGaWxlPiBhcHBGaWxlOwotICBuc3Jlc3VsdCBydiA9IEdldEhhbmRsZXJB
cHBGcm9tUHJlZnMoUHJvbWlzZUZsYXRDU3RyaW5nKGFTY2hlbWUpLmdldCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMoYXBwRmlsZSkpOwot
ICBpZiAoTlNfU1VDQ0VFREVEKHJ2KSkKLSAgICByZXR1cm4gYXBwRmlsZS0+R2V0TGVhZk5hbWUo
X3JldHZhbCk7Ci0KICNpZmRlZiBNT1pfV0lER0VUX0dUSzIKICAgbnNHTk9NRVJlZ2lzdHJ5OjpH
ZXRBcHBEZXNjRm9yU2NoZW1lKGFTY2hlbWUsIF9yZXR2YWwpOwogICByZXR1cm4gX3JldHZhbC5J
c0VtcHR5KCkgPyBOU19FUlJPUl9OT1RfQVZBSUxBQkxFIDogTlNfT0s7CiAjZWxzZQogICByZXR1
cm4gTlNfRVJST1JfTk9UX0FWQUlMQUJMRTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdXJpbG9hZGVy
L2V4dGhhbmRsZXIvdW5peC9uc09TSGVscGVyQXBwU2VydmljZS5oIGIvdXJpbG9hZGVyL2V4dGhh
bmRsZXIvdW5peC9uc09TSGVscGVyQXBwU2VydmljZS5oCi0tLSBhL3VyaWxvYWRlci9leHRoYW5k
bGVyL3VuaXgvbnNPU0hlbHBlckFwcFNlcnZpY2UuaAorKysgYi91cmlsb2FkZXIvZXh0aGFuZGxl
ci91bml4L25zT1NIZWxwZXJBcHBTZXJ2aWNlLmgKQEAgLTE1OSwxMSArMTU5LDkgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBuc0FTdHJpbmcmIGFNYWpvclR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nJiBhTWlu
b3JUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zSGFzaHRhYmxlJiBhVHlwZU9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhSGFuZGxl
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0FTdHJpbmcmIGFEZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFNb3ppbGxhRmxhZ3Mp
OwotCi0gIG5zcmVzdWx0IEdldEhhbmRsZXJBcHBGcm9tUHJlZnMoY29uc3QgY2hhciogYVNjaGVt
ZSwgbnNJRmlsZSoqIGFBcHApOwogfTsKIAogI2VuZGlmIC8vIG5zT1NIZWxwZXJBcHBTZXJ2aWNl
X2hfXwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3890</attachid>
            <date>2009-09-15 23:38:05 +0400</date>
            <delta_ts>2009-09-15 23:38:05 +0400</delta_ts>
            <desc>mozilla-helper-app.patch</desc>
            <filename>mozilla-helper-app.patch</filename>
            <type>text/plain</type>
            <size>4102</size>
            <attacher name="Zerg">anubix</attacher>
            
              <data encoding="base64">RnJvbTogV29sZmdhbmcgUm9zZW5hdWVyIDx3ckByb3NlbmF1ZXIub3JnPgpTdWJqZWN0OiBubyBo
ZWxwZXIgYXBwIGZvciBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0gYnV0IHJlY29nbml6ZWQgZXh0
ZW5zaW9ucwpSZWZlcmVuY2VzOgpodHRwczovL2J1Z3ppbGxhLm5vdmVsbC5jb20vc2hvd19idWcu
Y2dpP2lkPTQwNjk3OQpodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zMjczMjMKCkluZGV4OiB1cmlsb2FkZXIvZXh0aGFuZGxlci9uc01JTUVJbmZvSW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvbW96aWxsYS91cmlsb2FkZXIvZXh0aGFuZGxl
ci9uc01JTUVJbmZvSW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjkKZGlmZiAtdSAt
cCAtNiAtcjEuNjkgbnNNSU1FSW5mb0ltcGwuY3BwCi0tLSB1cmlsb2FkZXIvZXh0aGFuZGxlci9u
c01JTUVJbmZvSW1wbC5jcHAJMTkgT2N0IDIwMDcgMDQ6MTU6NDMgLTAwMDAJMS42OQorKysgdXJp
bG9hZGVyL2V4dGhhbmRsZXIvbnNNSU1FSW5mb0ltcGwuY3BwCTIwIEF1ZyAyMDA4IDE1OjQ1OjMy
IC0wMDAwCkBAIC00MDgsMTMgKzQwOCwxMyBAQCBuc01JTUVJbmZvQmFzZTo6TGF1bmNoV2l0aFVS
SShuc0lVUkkqIGFVCiB9CiAKIHZvaWQKIG5zTUlNRUluZm9CYXNlOjpDb3B5QmFzaWNEYXRhVG8o
bnNNSU1FSW5mb0Jhc2UqIGFPdGhlcikKIHsKICAgYU90aGVyLT5tVHlwZSA9IG1UeXBlOwotICBh
T3RoZXItPm1EZWZhdWx0QXBwRGVzY3JpcHRpb24gPSBtRGVmYXVsdEFwcERlc2NyaXB0aW9uOwor
ICAvL2FPdGhlci0+bURlZmF1bHRBcHBEZXNjcmlwdGlvbiA9IG1EZWZhdWx0QXBwRGVzY3JpcHRp
b247CiAgIGFPdGhlci0+bUV4dGVuc2lvbnMgPSBtRXh0ZW5zaW9uczsKIAogICBhT3RoZXItPm1N
YWNUeXBlID0gbU1hY1R5cGU7CiAgIGFPdGhlci0+bU1hY0NyZWF0b3IgPSBtTWFjQ3JlYXRvcjsK
IH0KIApJbmRleDogdXJpbG9hZGVyL2V4dGhhbmRsZXIvdW5peC9uc09TSGVscGVyQXBwU2Vydmlj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvbW96aWxsYS91cmlsb2FkZXIvZXh0
aGFuZGxlci91bml4L25zT1NIZWxwZXJBcHBTZXJ2aWNlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS43NApkaWZmIC11IC1wIC02IC1yMS43NCBuc09TSGVscGVyQXBwU2VydmljZS5jcHAKLS0t
IHVyaWxvYWRlci9leHRoYW5kbGVyL3VuaXgvbnNPU0hlbHBlckFwcFNlcnZpY2UuY3BwCTIwIEZl
YiAyMDA4IDA2OjEwOjMzIC0wMDAwCTEuNzQKKysrIHVyaWxvYWRlci9leHRoYW5kbGVyL3VuaXgv
bnNPU0hlbHBlckFwcFNlcnZpY2UuY3BwCTIwIEF1ZyAyMDA4IDE1OjQ1OjMzIC0wMDAwCkBAIC0x
NjIxLDEyICsxNjIxLDE2IEBAIG5zT1NIZWxwZXJBcHBTZXJ2aWNlOjpHZXRNSU1FSW5mb0Zyb21P
UygKICAgICAgIAogICAgICAgcmV0dXJuIHJldHZhbDsKICAgICB9CiAKICAgICAvLyBDb3B5IHRo
ZSBhdHRyaWJ1dGVzIG9mIHJldHZhbCBvbnRvIG1pQnlFeHQsIHRvIHJldHVybiBpdAogICAgIHJl
dHZhbC0+Q29weUJhc2ljRGF0YVRvKG1pQnlFeHQpOworICAgIC8vIEJ1dCBzZXQgdGhlIGV4dGVu
c2lvbnMgcHJpbWFyeSBzaW5jZSBDb3B5QmFzaWNEYXRhVG8gb3ZlcndyaXRlcyB0aGUKKyAgICAv
LyBsaXN0CisgICAgaWYgKCFhRmlsZUV4dC5Jc0VtcHR5KCkpCisgICAgICByZXR2YWwtPlNldFBy
aW1hcnlFeHRlbnNpb24oYUZpbGVFeHQpOwogCiAgICAgbWlCeUV4dC5zd2FwKHJldHZhbCk7CiAg
IH0KICAgcmV0dXJuIHJldHZhbDsKIH0KIAotLS0gdXJpbG9hZGVyL2V4dGhhbmRsZXIvdW5peC9u
c01JTUVJbmZvVW5peC5jcHAub3JpZwkyMDA4LTEwLTAxIDAwOjE5OjM1LjAwMDAwMDAwMCArMDIw
MAorKysgdXJpbG9hZGVyL2V4dGhhbmRsZXIvdW5peC9uc01JTUVJbmZvVW5peC5jcHAJMjAwOC0x
MC0wMSAwMDoyMjoxNi4wMDAwMDAwMDAgKzAyMDAKQEAgLTQ2LDEyICs0NiwxMyBAQAogI2luY2x1
ZGUgIm5zTUlNRUluZm9Vbml4LmgiCiAjaW5jbHVkZSAibnNHTk9NRVJlZ2lzdHJ5LmgiCiAjaW5j
bHVkZSAibnNJR25vbWVWRlNTZXJ2aWNlLmgiCiAjaWZkZWYgTU9aX0VOQUJMRV9EQlVTCiAjaW5j
bHVkZSAibnNEQnVzSGFuZGxlckFwcC5oIgogI2VuZGlmCisjaW5jbHVkZSAibnNBdXRvUHRyLmgi
CiAKIAogbnNyZXN1bHQKIG5zTUlNRUluZm9Vbml4OjpMb2FkVXJpSW50ZXJuYWwobnNJVVJJICog
YVVSSSkKIHsgCiAgIG5zcmVzdWx0IHJ2ID0gbnNHTk9NRVJlZ2lzdHJ5OjpMb2FkVVJMKGFVUkkp
OwpAQCAtNzEsMTkgKzcyLDIyIEBAIG5zTUlNRUluZm9Vbml4OjpMb2FkVXJpSW50ZXJuYWwobnNJ
VVJJICoKIH0KIAogTlNfSU1FVEhPRElNUAogbnNNSU1FSW5mb1VuaXg6OkdldEhhc0RlZmF1bHRI
YW5kbGVyKFBSQm9vbCAqX3JldHZhbCkKIHsKICAgKl9yZXR2YWwgPSBQUl9GQUxTRTsKLSAgbnND
T01QdHI8bnNJR25vbWVWRlNTZXJ2aWNlPiB2ZnMgPSBkb19HZXRTZXJ2aWNlKE5TX0dOT01FVkZT
U0VSVklDRV9DT05UUkFDVElEKTsKLSAgaWYgKHZmcykgewotICAgIG5zQ09NUHRyPG5zSUdub21l
VkZTTWltZUFwcD4gYXBwOwotICAgIGlmIChOU19TVUNDRUVERUQodmZzLT5HZXRBcHBGb3JNaW1l
VHlwZShtVHlwZSwgZ2V0dGVyX0FkZFJlZnMoYXBwKSkpICYmIGFwcCkKLSAgICAgICpfcmV0dmFs
ID0gUFJfVFJVRTsKKyAgbnNSZWZQdHI8bnNNSU1FSW5mb0Jhc2U+IG1pbWVJbmZvID0gbnNHTk9N
RVJlZ2lzdHJ5OjpHZXRGcm9tVHlwZShtVHlwZSk7CisgIGlmICghbWltZUluZm8pIHsKKyAgICAg
bnNDQXV0b1N0cmluZyBleHQ7CisgICAgIEdldFByaW1hcnlFeHRlbnNpb24oZXh0KTsKKyAgICAg
bWltZUluZm8gPSBuc0dOT01FUmVnaXN0cnk6OkdldEZyb21FeHRlbnNpb24oZXh0KTsKICAgfQog
CisgIGlmIChtaW1lSW5mbykKKyAgICAqX3JldHZhbCA9IFBSX1RSVUU7CisKICAgaWYgKCpfcmV0
dmFsKQogICAgIHJldHVybiBOU19PSzsKIAogI2lmZGVmIE1PWl9QTEFURk9STV9ISUxET04KICAg
SGlsZG9uVVJJQWN0aW9uICphY3Rpb24gPSBoaWxkb25fdXJpX2dldF9kZWZhdWx0X2FjdGlvbiht
VHlwZS5nZXQoKSwgbnNudWxsKTsKICAgaWYgKGFjdGlvbikgewpAQCAtMTA2LDEyICsxMTAsMjIg
QEAgbnNNSU1FSW5mb1VuaXg6OkxhdW5jaERlZmF1bHRXaXRoRmlsZShucwogICBuc0NPTVB0cjxu
c0lHbm9tZVZGU1NlcnZpY2U+IHZmcyA9IGRvX0dldFNlcnZpY2UoTlNfR05PTUVWRlNTRVJWSUNF
X0NPTlRSQUNUSUQpOwogCiAgIGlmICh2ZnMpIHsKICAgICBuc0NPTVB0cjxuc0lHbm9tZVZGU01p
bWVBcHA+IGFwcDsKICAgICBpZiAoTlNfU1VDQ0VFREVEKHZmcy0+R2V0QXBwRm9yTWltZVR5cGUo
bVR5cGUsIGdldHRlcl9BZGRSZWZzKGFwcCkpKSAmJiBhcHApCiAgICAgICByZXR1cm4gYXBwLT5M
YXVuY2gobmF0aXZlUGF0aCk7CisKKyAgICAvLyBJZiB3ZSBoYXZlbid0IGdvdCBhbiBhcHAgd2Ug
dHJ5IHRvIGdldCBhIHZhbGlkIG9uZSBieSBzZWFyY2hpbmcgZm9yIHRoZQorICAgIC8vIGV4dGVu
c2lvbiBtYXBwZWQgdHlwZQorICAgIG5zUmVmUHRyPG5zTUlNRUluZm9CYXNlPiBtaW1lSW5mbyA9
IG5zR05PTUVSZWdpc3RyeTo6R2V0RnJvbUV4dGVuc2lvbihuYXRpdmVQYXRoKTsKKyAgICBpZiAo
bWltZUluZm8pIHsKKyAgICAgIG5zQ0F1dG9TdHJpbmcgdHlwZTsKKyAgICAgIG1pbWVJbmZvLT5H
ZXRUeXBlKHR5cGUpOworICAgICAgaWYgKE5TX1NVQ0NFRURFRCh2ZnMtPkdldEFwcEZvck1pbWVU
eXBlKHR5cGUsIGdldHRlcl9BZGRSZWZzKGFwcCkpKSAmJiBhcHApCisgICAgICAgIHJldHVybiBh
cHAtPkxhdW5jaChuYXRpdmVQYXRoKTsKKyAgICB9CiAgIH0KIAogICBpZiAoIW1EZWZhdWx0QXBw
bGljYXRpb24pCiAgICAgcmV0dXJuIE5TX0VSUk9SX0ZJTEVfTk9UX0ZPVU5EOwogCiAgIHJldHVy
biBMYXVuY2hXaXRoSVByb2Nlc3MobURlZmF1bHRBcHBsaWNhdGlvbiwgbmF0aXZlUGF0aCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3891</attachid>
            <date>2009-09-15 23:38:52 +0400</date>
            <delta_ts>2009-09-15 23:38:52 +0400</delta_ts>
            <desc>xulrunner.spec.patch</desc>
            <filename>xulrunner.spec.patch</filename>
            <type>text/plain</type>
            <size>993</size>
            <attacher name="Zerg">anubix</attacher>
            
              <data encoding="base64">LS0tIHh1bHJ1bm5lci5zcGVjfgkyMDA5LTA5LTAxIDExOjM1OjA2ICswNDAwCisrKyB4dWxydW5u
ZXIuc3BlYwkyMDA5LTA5LTE1IDIyOjQ1OjE3ICswNDAwCkBAIC0yMCw3ICsyMCw3IEBACiBTdW1t
YXJ5OglYVUwgUnVubmVyCiBOYW1lOgkJeHVscnVubmVyCiBWZXJzaW9uOgkxLjkuMS4xCi1SZWxl
YXNlOglhbHQxLjIwMDkwODMxCitSZWxlYXNlOglhbHQxLjIwMDkwODMxLjEKIExpY2Vuc2U6CU1Q
TC9HUEwvTEdQTAogR3JvdXA6CQlOZXR3b3JraW5nL090aGVyCiBVcmw6CQlodHRwOi8vd2lraS5t
b3ppbGxhLm9yZy9YVUw6WHVsX1J1bm5lcgpAQCAtNDYsNiArNDYsMTEgQEAgUGF0Y2gxMDM6CW1v
emlsbGEtc3FsaXRlLnBhdGNoCiAKIFBhdGNoMjAwOgl4dWxydW5uZXItdXNlLW1venNxbGl0ZS5w
YXRjaAogCisjIFN1U0UgcGF0Y2hlcworUGF0Y2gzMDA6IG1vemlsbGEtcHJvdG9jb2xfaGFuZGxl
ci5wYXRjaAorUGF0Y2gzMDE6IG1vemlsbGEtaGVscGVyLWFwcC5wYXRjaAorUGF0Y2gzMDI6IGtk
ZS1pbnRlZ3JhdGlvbi5wYXRjaAorCiBSZXF1aXJlczoJaHVuc3BlbGwtZW4KIFJlcXVpcmVzOgl4
dWxydW5uZXItbGlicyA9ICV2ZXJzaW9uLSVyZWxlYXNlCiAKQEAgLTE0MSw2ICsxNDYsMTIgQEAg
Y2QgJV9idWlsZGRpci8lbmFtZS0ldmVyc2lvbi9tb3ppbGxhCiAKICVwYXRjaDIwMCAtcDEgLWIg
LmZpeDIwMAogCitjcCB0b29sa2l0L2NvbnRlbnQvd2lkZ2V0cy9kaWFsb2cueG1sIHRvb2xraXQv
Y29udGVudC93aWRnZXRzL2RpYWxvZy1rZGUueG1sCitjcCB0b29sa2l0L2NvbnRlbnQvd2lkZ2V0
cy9wcmVmZXJlbmNlcy54bWwgdG9vbGtpdC9jb250ZW50L3dpZGdldHMvcHJlZmVyZW5jZXMta2Rl
LnhtbAorJXBhdGNoMzAwIC1wMSAtYiAucHJvdG9oYW5kbAorJXBhdGNoMzAxIC1wMCAtYiAuaGVs
cGVyYXBwCislcGF0Y2gzMDIgLXAxIC1iIC5rZGU0CisKICVidWlsZAogY2QgJV9idWlsZGRpci8l
bmFtZS0ldmVyc2lvbi9tb3ppbGxhCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>