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

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

    <bug>
          <bug_id>21678</bug_id>
          
          <creation_ts>2009-09-23 12:30:23 +0400</creation_ts>
          <short_desc>xulrunner-kde4-version = 5</short_desc>
          <delta_ts>2009-11-24 03:34:06 +0300</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>http://widehat.opensuse.org/repositories/home:/llunak:/mozilla/openSUSE_Factory/src/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>21509</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zerg">anubix</reporter>
          <assigned_to name="Andrey Cherepanov">cas</assigned_to>
          <cc>zerg</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>99899</commentid>
    <comment_count>0</comment_count>
    <who name="Zerg">anubix</who>
    <bug_when>2009-09-23 12:30:23 +0400</bug_when>
    <thetext>Новая версия. Патч mozilla-kde.patch вместо kde-integration.patch

Так же нужен Provides: xulrunner-kde4-version = 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99900</commentid>
    <comment_count>1</comment_count>
      <attachid>3923</attachid>
    <who name="Zerg">anubix</who>
    <bug_when>2009-09-23 12:31:09 +0400</bug_when>
    <thetext>Created attachment 3923
mozilla-kde.patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99901</commentid>
    <comment_count>2</comment_count>
      <attachid>3924</attachid>
    <who name="Zerg">anubix</who>
    <bug_when>2009-09-23 12:32:00 +0400</bug_when>
    <thetext>Created attachment 3924
mozilla-helper-app.patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99902</commentid>
    <comment_count>3</comment_count>
      <attachid>3925</attachid>
    <who name="Zerg">anubix</who>
    <bug_when>2009-09-23 12:32:57 +0400</bug_when>
    <thetext>Created attachment 3925
xulrunner.spec.patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101562</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-10-15 02:31:54 +0400</bug_when>
    <thetext>(В ответ на комментарий №0)
&gt; Так же нужен Provides: xulrunner-kde4-version = 5

Зачем такой provide ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101589</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-10-15 13:45:46 +0400</bug_when>
    <thetext>Не проще ли в kmozillahelper поставить Requires: xulrunner &gt;= &lt;version&gt; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101593</commentid>
    <comment_count>6</comment_count>
    <who name="Sergey V Turchin">zerg</who>
    <bug_when>2009-10-15 14:21:28 +0400</bug_when>
    <thetext>(В ответ на комментарий №5)
&gt; xulrunner &gt;= &lt;version&gt; ?
это зависимость на версию mozilla-kde.patch, а не xulrunner</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101594</commentid>
    <comment_count>7</comment_count>
    <who name="Sergey V Turchin">zerg</who>
    <bug_when>2009-10-15 14:23:00 +0400</bug_when>
    <thetext>(В ответ на комментарий №4)
&gt; Зачем такой provide ?
В kmozillahelper указать на него зависимость. На данный момент в наших пакетах необходимости указывать не было, но у SuSE стоит, т.е. может возникнуть.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101596</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-10-15 14:57:09 +0400</bug_when>
    <thetext>(В ответ на комментарий №7)
&gt; (В ответ на комментарий №4)
&gt; &gt; Зачем такой provide ?
&gt; В kmozillahelper указать на него зависимость. На данный момент в наших пакетах
&gt; необходимости указывать не было, но у SuSE стоит, т.е. может возникнуть.

Ясно. Сделал. Патчи приложил, kmozillahelper перенёс в %_bindir.
Сейчас отправлю на сборку.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101612</commentid>
    <comment_count>9</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2009-10-15 21:01:34 +0400</bug_when>
    <thetext>xulrunner-1.9.1.4-alt0.20091010 -&gt; sisyphus:

* Sat Oct 10 2009 Alexey Gladkov &lt;legion@altlinux&gt; 1.9.1.4-alt0.20091010

- New development snapshot (20091010).
- KDE: Update patches (ALT#21678).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103430</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-11-22 22:11:52 +0300</bug_when>
    <thetext>mozilla-kde.patch совершенно не прикладывается на xulrunner-1.9.2, который я собираю.

http://download.opensuse.org/repositories/mozilla:/beta/SUSE_Factory/src/

тоже нерабочая версия.

Есть большая вероятность, что следующие сборки будут без поддержки KDE до тех пор, пока патч не обновят.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103432</commentid>
    <comment_count>11</comment_count>
    <who name="Zerg">anubix</who>
    <bug_when>2009-11-22 22:25:57 +0300</bug_when>
    <thetext>А есть ли необходимость класть бету xulrunner в сизиф сейчас?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103433</commentid>
    <comment_count>12</comment_count>
    <who name="Zerg">anubix</who>
    <bug_when>2009-11-22 22:35:51 +0300</bug_when>
    <thetext>Вот, здесь можно смотреть
http://gitorious.org/firefox-kde-opensuse</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103434</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-11-22 23:31:35 +0300</bug_when>
    <thetext>(В ответ на комментарий №11)
&gt; А есть ли необходимость класть бету xulrunner в сизиф сейчас?

Когда бы я его не положил всё равно не подойдёт, пока мы не будем согласовывать наши сборки с Suse. А именно, нам предётся выкладывать наши новые версии лишь только после того как новая версия появится в Suse.

Если патч не принят в апстрим, то его должны поддерживать авторы. Они это делают согласуясь только со своим графиком релизов. Если мы хотим этот же функционал у себя, нам нужен человек у нас.

Если никто не будет поддерживать этот патч у нас, то рано или поздно он сломается и мы ничего не сможем сделать. Не вижу смысла оттягивать момент, когда нужно будет сказать: Нам нужен человек, который поддерживает патч для интеграции с KDE.

(В ответ на комментарий №12)
&gt; http://gitorious.org/firefox-kde-opensuse

Последний коммит ещё позже чем 21-Nov-2009.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103489</commentid>
    <comment_count>14</comment_count>
    <who name="Zerg">anubix</who>
    <bug_when>2009-11-24 01:10:43 +0300</bug_when>
    <thetext>(В ответ на комментарий №13)
&gt; &gt; http://gitorious.org/firefox-kde-opensuse
&gt; Последний коммит ещё позже чем 21-Nov-2009.
Не понял, слишком свежий коммит?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103490</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-11-24 02:13:01 +0300</bug_when>
    <thetext>(В ответ на комментарий №14)
&gt; Не понял, слишком свежий коммит?

Наоборот, когда я писал сюда последний коммит был от 16 ноября, а сборка на ftp от 21.
Сейчас появился коммит от 23 числа, но сути он не изменил. С ним и новым xulrunner всё равно не собраться.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103493</commentid>
    <comment_count>16</comment_count>
    <who name="Zerg">anubix</who>
    <bug_when>2009-11-24 02:45:34 +0300</bug_when>
    <thetext>Короче, лично я kde-шную часть поддержать в состоянии, а mozilla-kde.patch нет.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103494</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-11-24 03:00:16 +0300</bug_when>
    <thetext>(В ответ на комментарий №16)
&gt; Короче, лично я kde-шную часть поддержать в состоянии, а mozilla-kde.patch нет.

Я его тоже поддерживать не буду. Слишком много гемороя.

Значит в сизифе этой поддержки не будет. Я оставлю старые патчи на месте. В ваших дистрибутивах сможете синхронизировать версии firefox с Suse и обновлять патчи.

Разумеется если не захотите собирать firefox в дистрибутивы сами.

P.S. Есть небольшой шанс, что товарищи из Suse обновят свой xulrunner, до более актуального.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103495</commentid>
    <comment_count>18</comment_count>
    <who name="Zerg">anubix</who>
    <bug_when>2009-11-24 03:28:12 +0300</bug_when>
    <thetext>(В ответ на комментарий №17)
&gt; Значит в сизифе этой поддержки не будет.
Ну, как бы, ты мантейнер, тебе решать.

&gt; Разумеется если не захотите собирать firefox в дистрибутивы сами.
А я что-то уже и не припомню, когда его ты в дистрибутивы собирал.

&gt; P.S. Есть небольшой шанс, что товарищи из Suse обновят свой xulrunner,
&gt; до более актуального.
Рано или поздно обновят. Шанс 100% ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103496</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-11-24 03:34:06 +0300</bug_when>
    <thetext>(В ответ на комментарий №18)
&gt; А я что-то уже и не припомню, когда его ты в дистрибутивы собирал.

Одно время сборки просто перекладывали. Собственно, вам даже на руку, что вы собираете сами.

&gt; Рано или поздно обновят. Шанс 100% ;-)

Вот только поздно мне не подходит.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3923</attachid>
            <date>2009-09-23 12:31:09 +0400</date>
            <delta_ts>2009-09-23 12:31:09 +0400</delta_ts>
            <desc>mozilla-kde.patch</desc>
            <filename>mozilla-kde.patch</filename>
            <type>text/plain</type>
            <size>68149</size>
            <attacher name="Zerg">anubix</attacher>
            
              <data encoding="base64">LS0tIG1vemlsbGEvY2hyb21lL3NyYy9NYWtlZmlsZS5pbi5zYXYJMjAwOS0wOS0xNCAxMDowMDoy
MS4wMDAwMDAwMDAgKzAyMDAKKysrIG1vemlsbGEvY2hyb21lL3NyYy9NYWtlZmlsZS5pbgkyMDA5
LTA5LTE0IDEwOjA0OjE0LjAwMDAwMDAwMCArMDIwMApAQCAtODYsNiArODYsNyBAQCBFWFRSQV9E
U09fTERPUFRTID0gXAogCiBpZm5lcSAoLCQoZmlsdGVyIGd0azIsJChNT1pfV0lER0VUX1RPT0xL
SVQpKSkKIEVYVFJBX0RTT19MRE9QVFMgKz0gJChNT1pfR1RLMl9MSUJTKQorTE9DQUxfSU5DTFVE
RVMgKz0gLUkkKHRvcHNyY2RpcikvdG9vbGtpdC94cmUKIGVuZGlmCiAKIGlmbmVxICgsJChmaWx0
ZXIgbWFjIGNvY29hLCQoTU9aX1dJREdFVF9UT09MS0lUKSkpCi0tLSBtb3ppbGxhL2Nocm9tZS9z
cmMvbnNDaHJvbWVSZWdpc3RyeS5jcHAuc2F2CTIwMDktMDktMTQgMTA6MDA6MjEuMDAwMDAwMDAw
ICswMjAwCisrKyBtb3ppbGxhL2Nocm9tZS9zcmMvbnNDaHJvbWVSZWdpc3RyeS5jcHAJMjAwOS0w
OS0xNCAxMDowNDoxNC4wMDAwMDAwMDAgKzAyMDAKQEAgLTExNCw2ICsxMTQsNyBAQAogI2luY2x1
ZGUgIm5zSVhVTEFwcEluZm8uaCIKICNpbmNsdWRlICJuc0lYVUxSdW50aW1lLmgiCiAjaW5jbHVk
ZSAibnNQcmVzU2hlbGxJdGVyYXRvci5oIgorI2luY2x1ZGUgIm5zS0RFVXRpbHMuaCIKIAogI2lm
ZGVmIE1PWl9YVUwKIC8vIGtlZXAgYWxsIHRoZSBSREYgc3R1ZmYgdG9nZXRoZXIsIGluIGNhc2Ug
d2UgY2FuIHJlbW92ZSBpdCBpbiB0aGUgZmFyIGZ1dHVyZQpAQCAtMjIwOCw2ICsyMjA5LDcgQEAg
bnNDaHJvbWVSZWdpc3RyeTo6UHJvY2Vzc01hbmlmZXN0QnVmZmVyKAogICBOU19OQU1FRF9MSVRF
UkFMX1NUUklORyhrQXBwVmVyc2lvbiwgImFwcHZlcnNpb24iKTsKICAgTlNfTkFNRURfTElURVJB
TF9TVFJJTkcoa09zLCAib3MiKTsKICAgTlNfTkFNRURfTElURVJBTF9TVFJJTkcoa09zVmVyc2lv
biwgIm9zdmVyc2lvbiIpOworICBOU19OQU1FRF9MSVRFUkFMX1NUUklORyhrRGVza3RvcCwgImRl
c2t0b3AiKTsKIAogICBuc0NPTVB0cjxuc0lJT1NlcnZpY2U+IGlvIChkb19HZXRJT1NlcnZpY2Uo
KSk7CiAgIGlmICghaW8pIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOwpAQCAtMjI1MSw2ICsyMjUz
LDcgQEAgbnNDaHJvbWVSZWdpc3RyeTo6UHJvY2Vzc01hbmlmZXN0QnVmZmVyKAogICB9CiAgIAog
ICBuc0F1dG9TdHJpbmcgb3NWZXJzaW9uOworICBuc0F1dG9TdHJpbmcgZGVza3RvcDsKICNpZiBk
ZWZpbmVkKFhQX1dJTikKICAgT1NWRVJTSU9OSU5GTyBpbmZvID0geyBzaXplb2YoT1NWRVJTSU9O
SU5GTykgfTsKICAgaWYgKEdldFZlcnNpb25FeCgmaW5mbykpIHsKQEAgLTIyNTgsNiArMjI2MSw3
IEBAIG5zQ2hyb21lUmVnaXN0cnk6OlByb2Nlc3NNYW5pZmVzdEJ1ZmZlcigKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5kd01ham9yVmVyc2lvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5kd01pbm9yVmVyc2lvbik7
CiAgIH0KKyAgZGVza3RvcCA9IE5TX0xJVEVSQUxfU1RSSU5HKCJ3aW4iKTsKICNlbGlmIGRlZmlu
ZWQoWFBfTUFDT1NYKQogICBsb25nIG1ham9yVmVyc2lvbiwgbWlub3JWZXJzaW9uOwogICBpZiAo
KEdlc3RhbHQoZ2VzdGFsdFN5c3RlbVZlcnNpb25NYWpvciwgJm1ham9yVmVyc2lvbikgPT0gbm9F
cnIpICYmCkBAIC0yMjY2LDEwICsyMjcwLDEyIEBAIG5zQ2hyb21lUmVnaXN0cnk6OlByb2Nlc3NN
YW5pZmVzdEJ1ZmZlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWFqb3JWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
aW5vclZlcnNpb24pOwogICB9CisgIGRlc2t0b3AgPSBOU19MSVRFUkFMX1NUUklORygibWFjb3N4
Iik7CiAjZWxpZiBkZWZpbmVkKE1PWl9XSURHRVRfR1RLMikKICAgbnNUZXh0Rm9ybWF0dGVyOjpz
c3ByaW50Zihvc1ZlcnNpb24sIE5TX0xJVEVSQUxfU1RSSU5HKCIlbGQuJWxkIikuZ2V0KCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGtfbWFqb3JfdmVyc2lvbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a19taW5vcl92ZXJzaW9u
KTsKKyAgZGVza3RvcCA9IG5zS0RFVXRpbHM6OmtkZVNlc3Npb24oKSA/IE5TX0xJVEVSQUxfU1RS
SU5HKCJrZGUiKSA6IE5TX0xJVEVSQUxfU1RSSU5HKCJnbm9tZSIpOyAvLyBUT0RPIG90aGVycz8K
ICNlbmRpZgogCiAgIGNoYXIgKnRva2VuOwpAQCAtMjMxMyw2ICsyMzE5LDcgQEAgbnNDaHJvbWVS
ZWdpc3RyeTo6UHJvY2Vzc01hbmlmZXN0QnVmZmVyKAogICAgICAgVHJpU3RhdGUgc3RBcHAgPSBl
VW5zcGVjaWZpZWQ7CiAgICAgICBUcmlTdGF0ZSBzdE9zVmVyc2lvbiA9IGVVbnNwZWNpZmllZDsK
ICAgICAgIFRyaVN0YXRlIHN0T3MgPSBlVW5zcGVjaWZpZWQ7CisgICAgICBUcmlTdGF0ZSBzdERl
c2t0b3AgPSBlVW5zcGVjaWZpZWQ7CiAKICAgICAgIFBSQm9vbCBiYWRGbGFnID0gUFJfRkFMU0U7
CiAKQEAgLTIzMjYsNiArMjMzMyw3IEBAIG5zQ2hyb21lUmVnaXN0cnk6OlByb2Nlc3NNYW5pZmVz
dEJ1ZmZlcigKICAgICAgICAgICAgIENoZWNrRmxhZyhrQ29udGVudEFjY2Vzc2libGUsIHd0b2tl
biwgY29udGVudEFjY2Vzc2libGUpIHx8CiAgICAgICAgICAgICBDaGVja1N0cmluZ0ZsYWcoa0Fw
cGxpY2F0aW9uLCB3dG9rZW4sIGFwcElELCBzdEFwcCkgfHwKICAgICAgICAgICAgIENoZWNrU3Ry
aW5nRmxhZyhrT3MsIHd0b2tlbiwgb3NUYXJnZXQsIHN0T3MpIHx8CisgICAgICAgICAgICBDaGVj
a1N0cmluZ0ZsYWcoa0Rlc2t0b3AsIHd0b2tlbiwgZGVza3RvcCwgc3REZXNrdG9wKSB8fAogICAg
ICAgICAgICAgQ2hlY2tWZXJzaW9uRmxhZyhrT3NWZXJzaW9uLCB3dG9rZW4sIG9zVmVyc2lvbiwg
dmMsIHN0T3NWZXJzaW9uKSB8fAogICAgICAgICAgICAgQ2hlY2tWZXJzaW9uRmxhZyhrQXBwVmVy
c2lvbiwgd3Rva2VuLCBhcHBWZXJzaW9uLCB2Yywgc3RBcHBWZXJzaW9uKSkKICAgICAgICAgICBj
b250aW51ZTsKQEAgLTIzMzcsNyArMjM0NSw3IEBAIG5zQ2hyb21lUmVnaXN0cnk6OlByb2Nlc3NN
YW5pZmVzdEJ1ZmZlcigKICAgICAgIH0KIAogICAgICAgaWYgKGJhZEZsYWcgfHwgc3RBcHAgPT0g
ZUJhZCB8fCBzdEFwcFZlcnNpb24gPT0gZUJhZCB8fCAKLSAgICAgICAgICBzdE9zID09IGVCYWQg
fHwgc3RPc1ZlcnNpb24gPT0gZUJhZCkKKyAgICAgICAgICBzdE9zID09IGVCYWQgfHwgc3RPc1Zl
cnNpb24gPT0gZUJhZCB8fCBzdERlc2t0b3AgPT0gZUJhZCkKICAgICAgICAgY29udGludWU7CiAK
ICAgICAgIG5zQ09NUHRyPG5zSVVSST4gcmVzb2x2ZWQ7CkBAIC0yMzk4LDYgKzI0MDYsNyBAQCBu
c0Nocm9tZVJlZ2lzdHJ5OjpQcm9jZXNzTWFuaWZlc3RCdWZmZXIoCiAgICAgICBUcmlTdGF0ZSBz
dEFwcCA9IGVVbnNwZWNpZmllZDsKICAgICAgIFRyaVN0YXRlIHN0T3MgPSBlVW5zcGVjaWZpZWQ7
CiAgICAgICBUcmlTdGF0ZSBzdE9zVmVyc2lvbiA9IGVVbnNwZWNpZmllZDsKKyAgICAgIFRyaVN0
YXRlIHN0RGVza3RvcCA9IGVVbnNwZWNpZmllZDsKIAogICAgICAgUFJCb29sIGJhZEZsYWcgPSBQ
Ul9GQUxTRTsKIApAQCAtMjQwOCw2ICsyNDE3LDcgQEAgbnNDaHJvbWVSZWdpc3RyeTo6UHJvY2Vz
c01hbmlmZXN0QnVmZmVyKAogCiAgICAgICAgIGlmIChDaGVja1N0cmluZ0ZsYWcoa0FwcGxpY2F0
aW9uLCB3dG9rZW4sIGFwcElELCBzdEFwcCkgfHwKICAgICAgICAgICAgIENoZWNrU3RyaW5nRmxh
ZyhrT3MsIHd0b2tlbiwgb3NUYXJnZXQsIHN0T3MpIHx8CisgICAgICAgICAgICBDaGVja1N0cmlu
Z0ZsYWcoa0Rlc2t0b3AsIHd0b2tlbiwgZGVza3RvcCwgc3REZXNrdG9wKSB8fAogICAgICAgICAg
ICAgQ2hlY2tWZXJzaW9uRmxhZyhrT3NWZXJzaW9uLCB3dG9rZW4sIG9zVmVyc2lvbiwgdmMsIHN0
T3NWZXJzaW9uKSB8fAogICAgICAgICAgICAgQ2hlY2tWZXJzaW9uRmxhZyhrQXBwVmVyc2lvbiwg
d3Rva2VuLCBhcHBWZXJzaW9uLCB2Yywgc3RBcHBWZXJzaW9uKSkKICAgICAgICAgICBjb250aW51
ZTsKQEAgLTI0MTksNyArMjQyOSw3IEBAIG5zQ2hyb21lUmVnaXN0cnk6OlByb2Nlc3NNYW5pZmVz
dEJ1ZmZlcigKICAgICAgIH0KIAogICAgICAgaWYgKGJhZEZsYWcgfHwgc3RBcHAgPT0gZUJhZCB8
fCBzdEFwcFZlcnNpb24gPT0gZUJhZCB8fAotICAgICAgICAgIHN0T3MgPT0gZUJhZCB8fCBzdE9z
VmVyc2lvbiA9PSBlQmFkKQorICAgICAgICAgIHN0T3MgPT0gZUJhZCB8fCBzdE9zVmVyc2lvbiA9
PSBlQmFkIHx8IHN0RGVza3RvcCA9PSBlQmFkKQogICAgICAgICBjb250aW51ZTsKIAogICAgICAg
bnNDT01QdHI8bnNJVVJJPiByZXNvbHZlZDsKQEAgLTI0NjAsNiArMjQ3MCw3IEBAIG5zQ2hyb21l
UmVnaXN0cnk6OlByb2Nlc3NNYW5pZmVzdEJ1ZmZlcigKICAgICAgIFRyaVN0YXRlIHN0QXBwID0g
ZVVuc3BlY2lmaWVkOwogICAgICAgVHJpU3RhdGUgc3RPcyA9IGVVbnNwZWNpZmllZDsKICAgICAg
IFRyaVN0YXRlIHN0T3NWZXJzaW9uID0gZVVuc3BlY2lmaWVkOworICAgICAgVHJpU3RhdGUgc3RE
ZXNrdG9wID0gZVVuc3BlY2lmaWVkOwogCiAgICAgICBQUkJvb2wgYmFkRmxhZyA9IFBSX0ZBTFNF
OwogCkBAIC0yNDcwLDYgKzI0ODEsNyBAQCBuc0Nocm9tZVJlZ2lzdHJ5OjpQcm9jZXNzTWFuaWZl
c3RCdWZmZXIoCiAKICAgICAgICAgaWYgKENoZWNrU3RyaW5nRmxhZyhrQXBwbGljYXRpb24sIHd0
b2tlbiwgYXBwSUQsIHN0QXBwKSB8fAogICAgICAgICAgICAgQ2hlY2tTdHJpbmdGbGFnKGtPcywg
d3Rva2VuLCBvc1RhcmdldCwgc3RPcykgfHwKKyAgICAgICAgICAgIENoZWNrU3RyaW5nRmxhZyhr
RGVza3RvcCwgd3Rva2VuLCBkZXNrdG9wLCBzdERlc2t0b3ApIHx8CiAgICAgICAgICAgICBDaGVj
a1ZlcnNpb25GbGFnKGtPc1ZlcnNpb24sIHd0b2tlbiwgb3NWZXJzaW9uLCB2Yywgc3RPc1ZlcnNp
b24pIHx8CiAgICAgICAgICAgICBDaGVja1ZlcnNpb25GbGFnKGtBcHBWZXJzaW9uLCB3dG9rZW4s
IGFwcFZlcnNpb24sIHZjLCBzdEFwcFZlcnNpb24pKQogICAgICAgICAgIGNvbnRpbnVlOwpAQCAt
MjQ4MSw3ICsyNDkzLDcgQEAgbnNDaHJvbWVSZWdpc3RyeTo6UHJvY2Vzc01hbmlmZXN0QnVmZmVy
KAogICAgICAgfQogCiAgICAgICBpZiAoYmFkRmxhZyB8fCBzdEFwcCA9PSBlQmFkIHx8IHN0QXBw
VmVyc2lvbiA9PSBlQmFkIHx8Ci0gICAgICAgICAgc3RPcyA9PSBlQmFkIHx8IHN0T3NWZXJzaW9u
ID09IGVCYWQpCisgICAgICAgICAgc3RPcyA9PSBlQmFkIHx8IHN0T3NWZXJzaW9uID09IGVCYWQg
fHwgc3REZXNrdG9wID09IGVCYWQpCiAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICBuc0NPTVB0
cjxuc0lVUkk+IHJlc29sdmVkOwpAQCAtMjUyNCw2ICsyNTM2LDcgQEAgbnNDaHJvbWVSZWdpc3Ry
eTo6UHJvY2Vzc01hbmlmZXN0QnVmZmVyKAogICAgICAgVHJpU3RhdGUgc3RBcHAgPSBlVW5zcGVj
aWZpZWQ7CiAgICAgICBUcmlTdGF0ZSBzdE9zID0gZVVuc3BlY2lmaWVkOwogICAgICAgVHJpU3Rh
dGUgc3RPc1ZlcnNpb24gPSBlVW5zcGVjaWZpZWQ7CisgICAgICBUcmlTdGF0ZSBzdERlc2t0b3Ag
PSBlVW5zcGVjaWZpZWQ7CiAKICAgICAgIFBSQm9vbCBiYWRGbGFnID0gUFJfRkFMU0U7CiAKQEAg
LTI1MzQsNiArMjU0Nyw3IEBAIG5zQ2hyb21lUmVnaXN0cnk6OlByb2Nlc3NNYW5pZmVzdEJ1ZmZl
cigKIAogICAgICAgICBpZiAoQ2hlY2tTdHJpbmdGbGFnKGtBcHBsaWNhdGlvbiwgd3Rva2VuLCBh
cHBJRCwgc3RBcHApIHx8CiAgICAgICAgICAgICBDaGVja1N0cmluZ0ZsYWcoa09zLCB3dG9rZW4s
IG9zVGFyZ2V0LCBzdE9zKSB8fAorICAgICAgICAgICAgQ2hlY2tTdHJpbmdGbGFnKGtEZXNrdG9w
LCB3dG9rZW4sIGRlc2t0b3AsIHN0RGVza3RvcCkgfHwKICAgICAgICAgICAgIENoZWNrVmVyc2lv
bkZsYWcoa09zVmVyc2lvbiwgd3Rva2VuLCBvc1ZlcnNpb24sIHZjLCBzdE9zVmVyc2lvbikgfHwK
ICAgICAgICAgICAgIENoZWNrVmVyc2lvbkZsYWcoa0FwcFZlcnNpb24sIHd0b2tlbiwgYXBwVmVy
c2lvbiwgdmMsIHN0QXBwVmVyc2lvbikpCiAgICAgICAgICAgY29udGludWU7CkBAIC0yNTQ1LDcg
KzI1NTksNyBAQCBuc0Nocm9tZVJlZ2lzdHJ5OjpQcm9jZXNzTWFuaWZlc3RCdWZmZXIoCiAgICAg
ICB9CiAKICAgICAgIGlmIChiYWRGbGFnIHx8IHN0QXBwID09IGVCYWQgfHwgc3RBcHBWZXJzaW9u
ID09IGVCYWQgfHwKLSAgICAgICAgICBzdE9zID09IGVCYWQgfHwgc3RPc1ZlcnNpb24gPT0gZUJh
ZCkKKyAgICAgICAgICBzdE9zID09IGVCYWQgfHwgc3RPc1ZlcnNpb24gPT0gZUJhZCB8fCBzdERl
c2t0b3AgPT0gZUJhZCkKICAgICAgICAgY29udGludWU7CiAKICAgICAgIG5zQ09NUHRyPG5zSVVS
ST4gYmFzZXVyaSwgb3ZlcmxheXVyaTsKQEAgLTI1ODAsNiArMjU5NCw3IEBAIG5zQ2hyb21lUmVn
aXN0cnk6OlByb2Nlc3NNYW5pZmVzdEJ1ZmZlcigKICAgICAgIFRyaVN0YXRlIHN0QXBwID0gZVVu
c3BlY2lmaWVkOwogICAgICAgVHJpU3RhdGUgc3RPcyA9IGVVbnNwZWNpZmllZDsKICAgICAgIFRy
aVN0YXRlIHN0T3NWZXJzaW9uID0gZVVuc3BlY2lmaWVkOworICAgICAgVHJpU3RhdGUgc3REZXNr
dG9wID0gZVVuc3BlY2lmaWVkOwogCiAgICAgICBQUkJvb2wgYmFkRmxhZyA9IFBSX0ZBTFNFOwog
CkBAIC0yNTkwLDYgKzI2MDUsNyBAQCBuc0Nocm9tZVJlZ2lzdHJ5OjpQcm9jZXNzTWFuaWZlc3RC
dWZmZXIoCiAKICAgICAgICAgaWYgKENoZWNrU3RyaW5nRmxhZyhrQXBwbGljYXRpb24sIHd0b2tl
biwgYXBwSUQsIHN0QXBwKSB8fAogICAgICAgICAgICAgQ2hlY2tTdHJpbmdGbGFnKGtPcywgd3Rv
a2VuLCBvc1RhcmdldCwgc3RPcykgfHwKKyAgICAgICAgICAgIENoZWNrU3RyaW5nRmxhZyhrRGVz
a3RvcCwgd3Rva2VuLCBkZXNrdG9wLCBzdERlc2t0b3ApIHx8CiAgICAgICAgICAgICBDaGVja1Zl
cnNpb25GbGFnKGtPc1ZlcnNpb24sIHd0b2tlbiwgb3NWZXJzaW9uLCB2Yywgc3RPc1ZlcnNpb24p
IHx8CiAgICAgICAgICAgICBDaGVja1ZlcnNpb25GbGFnKGtBcHBWZXJzaW9uLCB3dG9rZW4sIGFw
cFZlcnNpb24sIHZjLCBzdEFwcFZlcnNpb24pKQogICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjYw
MSw3ICsyNjE3LDcgQEAgbnNDaHJvbWVSZWdpc3RyeTo6UHJvY2Vzc01hbmlmZXN0QnVmZmVyKAog
ICAgICAgfQogCiAgICAgICBpZiAoYmFkRmxhZyB8fCBzdEFwcCA9PSBlQmFkIHx8IHN0QXBwVmVy
c2lvbiA9PSBlQmFkIHx8Ci0gICAgICAgICAgc3RPcyA9PSBlQmFkIHx8IHN0T3NWZXJzaW9uID09
IGVCYWQpCisgICAgICAgICAgc3RPcyA9PSBlQmFkIHx8IHN0T3NWZXJzaW9uID09IGVCYWQgfHwg
c3REZXNrdG9wID09IGVCYWQpCiAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICBuc0NPTVB0cjxu
c0lVUkk+IGJhc2V1cmksIG92ZXJsYXl1cmk7CkBAIC0yNjQwLDYgKzI2NTYsNyBAQCBuc0Nocm9t
ZVJlZ2lzdHJ5OjpQcm9jZXNzTWFuaWZlc3RCdWZmZXIoCiAgICAgICBUcmlTdGF0ZSBzdEFwcCA9
IGVVbnNwZWNpZmllZDsKICAgICAgIFRyaVN0YXRlIHN0T3MgPSBlVW5zcGVjaWZpZWQ7CiAgICAg
ICBUcmlTdGF0ZSBzdE9zVmVyc2lvbiA9IGVVbnNwZWNpZmllZDsKKyAgICAgIFRyaVN0YXRlIHN0
RGVza3RvcCA9IGVVbnNwZWNpZmllZDsKIAogICAgICAgUFJCb29sIGJhZEZsYWcgPSBQUl9GQUxT
RTsKIApAQCAtMjY1MCw2ICsyNjY3LDcgQEAgbnNDaHJvbWVSZWdpc3RyeTo6UHJvY2Vzc01hbmlm
ZXN0QnVmZmVyKAogCiAgICAgICAgIGlmIChDaGVja1N0cmluZ0ZsYWcoa0FwcGxpY2F0aW9uLCB3
dG9rZW4sIGFwcElELCBzdEFwcCkgfHwKICAgICAgICAgICAgIENoZWNrU3RyaW5nRmxhZyhrT3Ms
IHd0b2tlbiwgb3NUYXJnZXQsIHN0T3MpIHx8CisgICAgICAgICAgICBDaGVja1N0cmluZ0ZsYWco
a0Rlc2t0b3AsIHd0b2tlbiwgZGVza3RvcCwgc3REZXNrdG9wKSB8fAogICAgICAgICAgICAgQ2hl
Y2tWZXJzaW9uRmxhZyhrT3NWZXJzaW9uLCB3dG9rZW4sIG9zVmVyc2lvbiwgdmMsIHN0T3NWZXJz
aW9uKSB8fAogICAgICAgICAgICAgQ2hlY2tWZXJzaW9uRmxhZyhrQXBwVmVyc2lvbiwgd3Rva2Vu
LCBhcHBWZXJzaW9uLCB2Yywgc3RBcHBWZXJzaW9uKSkKICAgICAgICAgICBjb250aW51ZTsKQEAg
LTI2NjEsNyArMjY3OSw3IEBAIG5zQ2hyb21lUmVnaXN0cnk6OlByb2Nlc3NNYW5pZmVzdEJ1ZmZl
cigKICAgICAgIH0KIAogICAgICAgaWYgKGJhZEZsYWcgfHwgc3RBcHAgPT0gZUJhZCB8fCBzdEFw
cFZlcnNpb24gPT0gZUJhZCB8fAotICAgICAgICAgIHN0T3MgPT0gZUJhZCB8fCBzdE9zVmVyc2lv
biA9PSBlQmFkKQorICAgICAgICAgIHN0T3MgPT0gZUJhZCB8fCBzdE9zVmVyc2lvbiA9PSBlQmFk
IHx8IHN0RGVza3RvcCA9PSBlQmFkKQogICAgICAgICBjb250aW51ZTsKIAogICAgICAgbnNDT01Q
dHI8bnNJVVJJPiBjaHJvbWV1cmksIHJlc29sdmVkdXJpOwpAQCAtMjcwMiw2ICsyNzIwLDcgQEAg
bnNDaHJvbWVSZWdpc3RyeTo6UHJvY2Vzc01hbmlmZXN0QnVmZmVyKAogICAgICAgVHJpU3RhdGUg
c3RBcHAgPSBlVW5zcGVjaWZpZWQ7CiAgICAgICBUcmlTdGF0ZSBzdE9zVmVyc2lvbiA9IGVVbnNw
ZWNpZmllZDsKICAgICAgIFRyaVN0YXRlIHN0T3MgPSBlVW5zcGVjaWZpZWQ7CisgICAgICBUcmlT
dGF0ZSBzdERlc2t0b3AgPSBlVW5zcGVjaWZpZWQ7CiAKICAgICAgIFBSQm9vbCBiYWRGbGFnID0g
UFJfRkFMU0U7CiAKQEAgLTI3MTIsNiArMjczMSw3IEBAIG5zQ2hyb21lUmVnaXN0cnk6OlByb2Nl
c3NNYW5pZmVzdEJ1ZmZlcigKIAogICAgICAgICBpZiAoQ2hlY2tTdHJpbmdGbGFnKGtBcHBsaWNh
dGlvbiwgd3Rva2VuLCBhcHBJRCwgc3RBcHApIHx8CiAgICAgICAgICAgICBDaGVja1N0cmluZ0Zs
YWcoa09zLCB3dG9rZW4sIG9zVGFyZ2V0LCBzdE9zKSB8fAorICAgICAgICAgICAgQ2hlY2tTdHJp
bmdGbGFnKGtEZXNrdG9wLCB3dG9rZW4sIGRlc2t0b3AsIHN0RGVza3RvcCkgfHwKICAgICAgICAg
ICAgIENoZWNrVmVyc2lvbkZsYWcoa09zVmVyc2lvbiwgd3Rva2VuLCBvc1ZlcnNpb24sIHZjLCBz
dE9zVmVyc2lvbikgfHwKICAgICAgICAgICAgIENoZWNrVmVyc2lvbkZsYWcoa0FwcFZlcnNpb24s
IHd0b2tlbiwgYXBwVmVyc2lvbiwgdmMsIHN0QXBwVmVyc2lvbikpCiAgICAgICAgICAgY29udGlu
dWU7CkBAIC0yNzIzLDcgKzI3NDMsNyBAQCBuc0Nocm9tZVJlZ2lzdHJ5OjpQcm9jZXNzTWFuaWZl
c3RCdWZmZXIoCiAgICAgICB9CiAKICAgICAgIGlmIChiYWRGbGFnIHx8IHN0QXBwID09IGVCYWQg
fHwgc3RBcHBWZXJzaW9uID09IGVCYWQgfHwgCi0gICAgICAgICAgc3RPcyA9PSBlQmFkIHx8IHN0
T3NWZXJzaW9uID09IGVCYWQpCisgICAgICAgICAgc3RPcyA9PSBlQmFkIHx8IHN0T3NWZXJzaW9u
ID09IGVCYWQgfHwgc3REZXNrdG9wID09IGVCYWQpCiAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
CiAgICAgICBuc0RlcGVuZGVudENTdHJpbmcgaG9zdChwYWNrYWdlKTsKLS0tIG1vemlsbGEvbW9k
dWxlcy9saWJwcmVmL3NyYy9NYWtlZmlsZS5pbi5zYXYJMjAwOS0wOS0xNCAxMDowMDoyMS4wMDAw
MDAwMDAgKzAyMDAKKysrIG1vemlsbGEvbW9kdWxlcy9saWJwcmVmL3NyYy9NYWtlZmlsZS5pbgky
MDA5LTA5LTE0IDEwOjA0OjE0LjAwMDAwMDAwMCArMDIwMApAQCAtOTcsMyArOTcsNSBAQCBuc1By
ZWZTZXJ2aWNlLiQoT0JKX1NVRkZJWCk6IG5zUHJlZlNlcnZpCiAJQCQoTUFLRV9ERVBTX0FVVE9f
Q1hYKQogCSQoRUxPRykgJChDQ0MpICQoT1VUT1BUSU9OKSRAIC1jICQoQ09NUElMRV9DWFhGTEFH
UzotTzI9LU8xKSAkKF9WUEFUSF9TUkNTKQogZW5kaWYKKworTE9DQUxfSU5DTFVERVMgKz0gLUkk
KHRvcHNyY2RpcikvdG9vbGtpdC94cmUKLS0tIG1vemlsbGEvbW9kdWxlcy9saWJwcmVmL3NyYy9u
c1ByZWZTZXJ2aWNlLmNwcC5zYXYJMjAwOS0wOS0xNCAxMDowMDoyMS4wMDAwMDAwMDAgKzAyMDAK
KysrIG1vemlsbGEvbW9kdWxlcy9saWJwcmVmL3NyYy9uc1ByZWZTZXJ2aWNlLmNwcAkyMDA5LTA5
LTE0IDEwOjA0OjE0LjAwMDAwMDAwMCArMDIwMApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUg
Im5zQ09NQXJyYXkuaCIKICNpbmNsdWRlICJuc1hQQ09NQ0lELmgiCiAjaW5jbHVkZSAibnNBdXRv
UHRyLmgiCisjaW5jbHVkZSAibnNLREVVdGlscy5oIgogCiAjaW5jbHVkZSAibnNRdWlja1NvcnQu
aCIKICNpbmNsdWRlICJwcm1lbS5oIgpAQCAtNjA2LDcgKzYwNyw4IEBAIHByZWZfTG9hZFByZWZz
SW5EaXIobnNJRmlsZSogYURpciwgY2hhcgogICByZXR1cm4gcnY7CiB9CiAKLXN0YXRpYyBuc3Jl
c3VsdCBwcmVmX0xvYWRQcmVmc0luRGlyTGlzdChjb25zdCBjaGFyICpsaXN0SWQpCitzdGF0aWMg
bnNyZXN1bHQgcHJlZl9Mb2FkUHJlZnNJbkRpckxpc3QoY29uc3QgY2hhciAqbGlzdElkLAorICAg
IGNoYXIgY29uc3QgKmNvbnN0ICphU3BlY2lhbEZpbGVzID0gTlVMTCwgUFJVaW50MzIgYVNwZWNp
YWxGaWxlc0NvdW50ID0gMCkKIHsKICAgbnNyZXN1bHQgcnY7CiAgIG5zQ09NUHRyPG5zSVByb3Bl
cnRpZXM+IGRpclN2Yyhkb19HZXRTZXJ2aWNlKE5TX0RJUkVDVE9SWV9TRVJWSUNFX0NPTlRSQUNU
SUQsICZydikpOwpAQCAtNjI1LDcgKzYyNyw3IEBAIHN0YXRpYyBuc3Jlc3VsdCBwcmVmX0xvYWRQ
cmVmc0luRGlyTGlzdCgKICAgICAgICAgbnNDT01QdHI8bnNJRmlsZT4gZGlyID0gZG9fUXVlcnlJ
bnRlcmZhY2UoZWxlbSk7CiAgICAgICAgIGlmIChkaXIpIHsKICAgICAgICAgICAvLyBEbyB3ZSBj
YXJlIGlmIGEgZmlsZSBwcm92aWRlZCBieSB0aGlzIHByb2Nlc3MgZmFpbHMgdG8gbG9hZD8KLSAg
ICAgICAgICBwcmVmX0xvYWRQcmVmc0luRGlyKGRpciwgbnNudWxsLCAwKTsgCisgICAgICAgICAg
cHJlZl9Mb2FkUHJlZnNJbkRpcihkaXIsIGFTcGVjaWFsRmlsZXMsIGFTcGVjaWFsRmlsZXNDb3Vu
dCk7IAogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtNjc2LDYgKzY3OCw3IEBAIHN0YXRp
YyBuc3Jlc3VsdCBwcmVmX0luaXRJbml0aWFsT2JqZWN0cygKICNpZiBkZWZpbmVkKE1PWl9XSURH
RVRfUEhPVE9OKQogCSAgLCAicGhvdG9uLmpzIgogI2VuZGlmCQkgCisgICAgICAsICIiIC8vIHBs
YWNlaG9sZGVyIGZvciBLREUgIChlbXB0eSBpcyBvdGhlcndpc2UgaGFybWxlc3MpCiAjZWxpZiBk
ZWZpbmVkKFhQX09TMikKICAgICAgICJvczJwcmVmLmpzIgogI2VsaWYgZGVmaW5lZChYUF9CRU9T
KQpAQCAtNjgzLDEyICs2ODYsMjMgQEAgc3RhdGljIG5zcmVzdWx0IHByZWZfSW5pdEluaXRpYWxP
YmplY3RzKAogI2VuZGlmCiAgIH07CiAKKyAgaWYoIG5zS0RFVXRpbHM6OmtkZVNlc3Npb24oKSkg
eyAvLyBUT0RPIHdoYXQgaWYgc29tZSBzZXR1cCBhY3R1YWxseSByZXF1aXJlcyB0aGUgaGVscGVy
PworICAgICAgZm9yKCBpbnQgaSA9IDA7CisgICAgICAgICAgIGkgPCBOU19BUlJBWV9MRU5HVEgo
c3BlY2lhbEZpbGVzKTsKKyAgICAgICAgICAgKytpICkgeworICAgICAgICAgIGlmKCAqc3BlY2lh
bEZpbGVzWyBpIF0gPT0gJ1wwJyApIHsKKyAgICAgICAgICAgICAgc3BlY2lhbEZpbGVzWyBpIF0g
PSAia2RlLmpzIjsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgfQor
ICB9CisgICAgICAKICAgcnYgPSBwcmVmX0xvYWRQcmVmc0luRGlyKGRlZmF1bHRQcmVmRGlyLCBz
cGVjaWFsRmlsZXMsIE5TX0FSUkFZX0xFTkdUSChzcGVjaWFsRmlsZXMpKTsKICAgaWYgKE5TX0ZB
SUxFRChydikpIHsKICAgICBOU19XQVJOSU5HKCJFcnJvciBwYXJzaW5nIGFwcGxpY2F0aW9uIGRl
ZmF1bHQgcHJlZmVyZW5jZXMuIik7CiAgIH0KIAotICBydiA9IHByZWZfTG9hZFByZWZzSW5EaXJM
aXN0KE5TX0FQUF9QUkVGU19ERUZBVUxUU19ESVJfTElTVCk7CisgIHJ2ID0gcHJlZl9Mb2FkUHJl
ZnNJbkRpckxpc3QoTlNfQVBQX1BSRUZTX0RFRkFVTFRTX0RJUl9MSVNULCBzcGVjaWFsRmlsZXMs
IE5TX0FSUkFZX0xFTkdUSChzcGVjaWFsRmlsZXMpKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYs
IHJ2KTsKIAogICBOU19DcmVhdGVTZXJ2aWNlc0Zyb21DYXRlZ29yeShOU19QUkVGU0VSVklDRV9B
UFBERUZBVUxUU19UT1BJQ19JRCwKLS0tIG1vemlsbGEvdG9vbGtpdC9jb21wb25lbnRzL2Rvd25s
b2Fkcy9zcmMvTWFrZWZpbGUuaW4uc2F2CTIwMDktMDktMTQgMTA6MDA6MjEuMDAwMDAwMDAwICsw
MjAwCisrKyBtb3ppbGxhL3Rvb2xraXQvY29tcG9uZW50cy9kb3dubG9hZHMvc3JjL01ha2VmaWxl
LmluCTIwMDktMDktMTQgMTA6MDQ6MTQuMDAwMDAwMDAwICswMjAwCkBAIC0xMDAsMyArMTAwLDQg
QEAgaW5jbHVkZSAkKHRvcHNyY2RpcikvY29uZmlnL3J1bGVzLm1rCiAKIEVYVFJBX0RTT19MRE9Q
VFMgKz0gJChNT1pfQ09NUE9ORU5UX0xJQlMpCiAKK0xPQ0FMX0lOQ0xVREVTICs9IC1JJCh0b3Bz
cmNkaXIpL3Rvb2xraXQveHJlCi0tLSBtb3ppbGxhL3Rvb2xraXQvY29tcG9uZW50cy9kb3dubG9h
ZHMvc3JjL25zRG93bmxvYWRNYW5hZ2VyLmNwcC5zYXYJMjAwOS0wOS0xNCAxMDowMDoyMS4wMDAw
MDAwMDAgKzAyMDAKKysrIG1vemlsbGEvdG9vbGtpdC9jb21wb25lbnRzL2Rvd25sb2Fkcy9zcmMv
bnNEb3dubG9hZE1hbmFnZXIuY3BwCTIwMDktMDktMTQgMTA6MDQ6MTQuMDAwMDAwMDAwICswMjAw
CkBAIC04NSw2ICs4NSw3IEBACiAjaW5jbHVkZSAibnNEb2NTaGVsbENJRC5oIgogI2luY2x1ZGUg
Im5zSVByaXZhdGVCcm93c2luZ1NlcnZpY2UuaCIKICNpbmNsdWRlICJuc05ldENJRC5oIgorI2lu
Y2x1ZGUgIm5zS0RFVXRpbHMuaCIKIAogI2lmIGRlZmluZWQoWFBfV0lOKSAmJiAhZGVmaW5lZChX
SU5DRSkgCiAjaW5jbHVkZSA8c2hsb2JqLmg+CkBAIC0yMjk5LDYgKzIzMDAsMTUgQEAgbnNEb3du
bG9hZDo6U2V0U3RhdGUoRG93bmxvYWRTdGF0ZSBhU3RhdAogICAgICAgICBwcmVmLT5HZXRCb29s
UHJlZihQUkVGX0JETV9TSE9XQUxFUlRPTkNPTVBMRVRFLCAmc2hvd1Rhc2tiYXJBbGVydCk7CiAK
ICAgICAgIGlmIChzaG93VGFza2JhckFsZXJ0KSB7CisgICAgICAgIGlmKCBuc0tERVV0aWxzOjpr
ZGVTdXBwb3J0KCkpIHsKKyAgICAgICAgICAgIG5zQ1N0cmluZ0FycmF5IGNvbW1hbmQ7CisgICAg
ICAgICAgICBjb21tYW5kLkFwcGVuZENTdHJpbmcoIE5TX0xJVEVSQUxfQ1NUUklORyggIkRPV05M
T0FERklOSVNIRUQiICkpOworICAgICAgICAgICAgbnNBdXRvU3RyaW5nIGRpc3BsYXlOYW1lOwor
ICAgICAgICAgICAgR2V0RGlzcGxheU5hbWUoIGRpc3BsYXlOYW1lICk7CisgICAgICAgICAgICBj
b21tYW5kLkFwcGVuZENTdHJpbmcoIG5zQ0F1dG9TdHJpbmcoIFRvTmV3VVRGOFN0cmluZyggZGlz
cGxheU5hbWUgKSkpOworICAgICAgICAgICAgbnNLREVVdGlsczo6Y29tbWFuZCggY29tbWFuZCAp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAvLyBiZWdpbiBub24tS0RFIGJsb2NrCiAgICAg
ICAgIFBSSW50MzIgYWxlcnRJbnRlcnZhbCA9IDIwMDA7CiAgICAgICAgIGlmIChwcmVmKQogICAg
ICAgICAgIHByZWYtPkdldEludFByZWYoUFJFRl9CRE1fU0hPV0FMRVJUSU5URVJWQUwsICZhbGVy
dEludGVydmFsKTsKQEAgLTIzMzQsNiArMjM0NCw3IEBAIG5zRG93bmxvYWQ6OlNldFN0YXRlKERv
d25sb2FkU3RhdGUgYVN0YXQKICAgICAgICAgICAgICAgICAgIEVtcHR5U3RyaW5nKCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIH0gLy8gZW5kIG5vbi1LREUgYmxvY2sKICAg
ICAgIH0KICNpZiBkZWZpbmVkKFhQX1dJTikgJiYgIWRlZmluZWQoV0lOQ0UpCiAgICAgICBuc0NP
TVB0cjxuc0lGaWxlVVJMPiBmaWxlVVJMID0gZG9fUXVlcnlJbnRlcmZhY2UobVRhcmdldCk7Ci0t
LSBtb3ppbGxhL3Rvb2xraXQvY29udGVudC9qYXIubW4uc2F2CTIwMDktMDktMTQgMTA6MDA6MjEu
MDAwMDAwMDAwICswMjAwCisrKyBtb3ppbGxhL3Rvb2xraXQvY29udGVudC9qYXIubW4JMjAwOS0w
OS0xNCAxMDowNDoxNC4wMDAwMDAwMDAgKzAyMDAKQEAgLTQzLDYgKzQzLDggQEAgdG9vbGtpdC5q
YXI6CiAqKyBjb250ZW50L2dsb2JhbC9iaW5kaW5ncy9jb2xvcnBpY2tlci54bWwgICAgICh3aWRn
ZXRzL2NvbG9ycGlja2VyLnhtbCkKICorIGNvbnRlbnQvZ2xvYmFsL2JpbmRpbmdzL2RhdGV0aW1l
cGlja2VyLnhtbCAgKHdpZGdldHMvZGF0ZXRpbWVwaWNrZXIueG1sKQogKisgY29udGVudC9nbG9i
YWwvYmluZGluZ3MvZGlhbG9nLnhtbCAgICAgICAgICAod2lkZ2V0cy9kaWFsb2cueG1sKQorKisg
Y29udGVudC9nbG9iYWwvYmluZGluZ3MvZGlhbG9nLWtkZS54bWwgICAgICAod2lkZ2V0cy9kaWFs
b2cta2RlLnhtbCkKKyUgb3ZlcnJpZGUgY2hyb21lOi8vZ2xvYmFsL2NvbnRlbnQvYmluZGluZ3Mv
ZGlhbG9nLnhtbCBjaHJvbWU6Ly9nbG9iYWwvY29udGVudC9iaW5kaW5ncy9kaWFsb2cta2RlLnht
bCBkZXNrdG9wPWtkZQogKisgY29udGVudC9nbG9iYWwvYmluZGluZ3MvZWRpdG9yLnhtbCAgICAg
ICAgICAod2lkZ2V0cy9lZGl0b3IueG1sKQogKiAgY29udGVudC9nbG9iYWwvYmluZGluZ3MvZXhw
YW5kZXIueG1sICAgICAgICAod2lkZ2V0cy9leHBhbmRlci54bWwpCiAqICBjb250ZW50L2dsb2Jh
bC9iaW5kaW5ncy9maWxlZmllbGQueG1sICAgICAgICh3aWRnZXRzL2ZpbGVmaWVsZC54bWwpCkBA
IC01Niw2ICs1OCw4IEBAIHRvb2xraXQuamFyOgogKisgY29udGVudC9nbG9iYWwvYmluZGluZ3Mv
bnVtYmVyYm94LnhtbCAgICAgICAod2lkZ2V0cy9udW1iZXJib3gueG1sKQogKisgY29udGVudC9n
bG9iYWwvYmluZGluZ3MvcG9wdXAueG1sICAgICAgICAgICAod2lkZ2V0cy9wb3B1cC54bWwpCiAq
KyBjb250ZW50L2dsb2JhbC9iaW5kaW5ncy9wcmVmZXJlbmNlcy54bWwgICAgICh3aWRnZXRzL3By
ZWZlcmVuY2VzLnhtbCkKKyorIGNvbnRlbnQvZ2xvYmFsL2JpbmRpbmdzL3ByZWZlcmVuY2VzLWtk
ZS54bWwgKHdpZGdldHMvcHJlZmVyZW5jZXMta2RlLnhtbCkKKyUgb3ZlcnJpZGUgY2hyb21lOi8v
Z2xvYmFsL2NvbnRlbnQvYmluZGluZ3MvcHJlZmVyZW5jZXMueG1sIGNocm9tZTovL2dsb2JhbC9j
b250ZW50L2JpbmRpbmdzL3ByZWZlcmVuY2VzLWtkZS54bWwgZGVza3RvcD1rZGUKICorIGNvbnRl
bnQvZ2xvYmFsL2JpbmRpbmdzL3Byb2dyZXNzbWV0ZXIueG1sICAgKHdpZGdldHMvcHJvZ3Jlc3Nt
ZXRlci54bWwpCiAqKyBjb250ZW50L2dsb2JhbC9iaW5kaW5ncy9yYWRpby54bWwgICAgICAgICAg
ICh3aWRnZXRzL3JhZGlvLnhtbCkKICorIGNvbnRlbnQvZ2xvYmFsL2JpbmRpbmdzL3Jlc2l6ZXIu
eG1sICAgICAgICAgKHdpZGdldHMvcmVzaXplci54bWwpCi0tLSBtb3ppbGxhL3Rvb2xraXQvY29u
dGVudC93aWRnZXRzL2RpYWxvZy1rZGUueG1sLnNhdgkyMDA5LTA5LTE0IDEwOjAwOjIxLjAwMDAw
MDAwMCArMDIwMAorKysgbW96aWxsYS90b29sa2l0L2NvbnRlbnQvd2lkZ2V0cy9kaWFsb2cta2Rl
LnhtbAkyMDA5LTA5LTE0IDEwOjA0OjE0LjAwMDAwMDAwMCArMDIwMApAQCAtMTksNyArMTksNyBA
QAogICAgICAgICAgIAogICAgICAgPHh1bDpoYm94IGNsYXNzPSJkaWFsb2ctYnV0dG9uLWJveCIg
YW5vbmlkPSJidXR0b25zIgogICAgICAgICAgICAgICAgIHhibDppbmhlcml0cz0icGFjaz1idXR0
b25wYWNrLGFsaWduPWJ1dHRvbmFsaWduLGRpcj1idXR0b25kaXIsb3JpZW50PWJ1dHRvbm9yaWVu
dCIKLSNpZmRlZiBYUF9VTklYCisjaWZkZWYgWFBfVU5JWF9HTk9NRQogICAgICAgICAgICAgICAg
ID4KICAgICAgICAgPHh1bDpidXR0b24gZGxndHlwZT0iZGlzY2xvc3VyZSIgY2xhc3M9ImRpYWxv
Zy1idXR0b24iIGhpZGRlbj0idHJ1ZSIvPgogICAgICAgICA8eHVsOmJ1dHRvbiBkbGd0eXBlPSJo
ZWxwIiBjbGFzcz0iZGlhbG9nLWJ1dHRvbiIgaGlkZGVuPSJ0cnVlIi8+CkBAIC0yOCw2ICsyOCwx
NSBAQAogICAgICAgICA8eHVsOnNwYWNlciBhbm9uaWQ9InNwYWNlciIgZmxleD0iMSIvPgogICAg
ICAgICA8eHVsOmJ1dHRvbiBkbGd0eXBlPSJjYW5jZWwiIGNsYXNzPSJkaWFsb2ctYnV0dG9uIi8+
CiAgICAgICAgIDx4dWw6YnV0dG9uIGRsZ3R5cGU9ImFjY2VwdCIgY2xhc3M9ImRpYWxvZy1idXR0
b24iIHhibDppbmhlcml0cz0iZGlzYWJsZWQ9YnV0dG9uZGlzYWJsZWRhY2NlcHQiLz4KKyNlbGlm
IFhQX1VOSVgKKyAgICAgICAgICAgICAgICBwYWNrPSJlbmQiPgorICAgICAgICA8eHVsOmJ1dHRv
biBkbGd0eXBlPSJoZWxwIiBjbGFzcz0iZGlhbG9nLWJ1dHRvbiIgaGlkZGVuPSJ0cnVlIi8+Cisg
ICAgICAgIDx4dWw6YnV0dG9uIGRsZ3R5cGU9ImV4dHJhMiIgY2xhc3M9ImRpYWxvZy1idXR0b24i
IGhpZGRlbj0idHJ1ZSIvPgorICAgICAgICA8eHVsOnNwYWNlciBhbm9uaWQ9InNwYWNlciIgZmxl
eD0iMSIgaGlkZGVuPSJ0cnVlIi8+CisgICAgICAgIDx4dWw6YnV0dG9uIGRsZ3R5cGU9ImFjY2Vw
dCIgY2xhc3M9ImRpYWxvZy1idXR0b24iIHhibDppbmhlcml0cz0iZGlzYWJsZWQ9YnV0dG9uZGlz
YWJsZWRhY2NlcHQiLz4KKyAgICAgICAgPHh1bDpidXR0b24gZGxndHlwZT0iZXh0cmExIiBjbGFz
cz0iZGlhbG9nLWJ1dHRvbiIgaGlkZGVuPSJ0cnVlIi8+CisgICAgICAgIDx4dWw6YnV0dG9uIGRs
Z3R5cGU9ImNhbmNlbCIgY2xhc3M9ImRpYWxvZy1idXR0b24iLz4KKyAgICAgICAgPHh1bDpidXR0
b24gZGxndHlwZT0iZGlzY2xvc3VyZSIgY2xhc3M9ImRpYWxvZy1idXR0b24iIGhpZGRlbj0idHJ1
ZSIvPgogI2Vsc2UKICAgICAgICAgICAgICAgICBwYWNrPSJlbmQiPgogICAgICAgICA8eHVsOmJ1
dHRvbiBkbGd0eXBlPSJleHRyYTIiIGNsYXNzPSJkaWFsb2ctYnV0dG9uIiBoaWRkZW49InRydWUi
Lz4KLS0tIG1vemlsbGEvdG9vbGtpdC9jb250ZW50L3dpZGdldHMvcHJlZmVyZW5jZXMta2RlLnht
bC5zYXYJMjAwOS0wOS0xNCAxMDowMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrIG1vemlsbGEvdG9v
bGtpdC9jb250ZW50L3dpZGdldHMvcHJlZmVyZW5jZXMta2RlLnhtbAkyMDA5LTA5LTE0IDEwOjA0
OjE0LjAwMDAwMDAwMCArMDIwMApAQCAtNTczLDcgKzU3Myw3IEBACiAgICAgICAgIDwveHVsOmRl
Y2s+CiAgICAgICA8L3h1bDpoYm94PgogICAgICAgPHh1bDpoYm94IGFub25pZD0iZGxnLWJ1dHRv
bnMiIGNsYXNzPSJwcmVmV2luZG93LWRsZ2J1dHRvbnMiCi0jaWZkZWYgWFBfVU5JWAorI2lmZGVm
IFhQX1VOSVhfR05PTUUKICAgICAgICAgICAgICAgICA+CiAgICAgICAgIDx4dWw6YnV0dG9uIGRs
Z3R5cGU9ImRpc2Nsb3N1cmUiIGNsYXNzPSJkaWFsb2ctYnV0dG9uIiBoaWRkZW49InRydWUiLz4K
ICAgICAgICAgPHh1bDpidXR0b24gZGxndHlwZT0iaGVscCIgY2xhc3M9ImRpYWxvZy1idXR0b24i
IGhpZGRlbj0idHJ1ZSIgaWNvbj0iaGVscCIvPgpAQCAtNTgyLDYgKzU4MiwxNSBAQAogICAgICAg
ICA8eHVsOnNwYWNlciBhbm9uaWQ9InNwYWNlciIgZmxleD0iMSIvPgogICAgICAgICA8eHVsOmJ1
dHRvbiBkbGd0eXBlPSJjYW5jZWwiIGNsYXNzPSJkaWFsb2ctYnV0dG9uIiBpY29uPSJjYW5jZWwi
Lz4KICAgICAgICAgPHh1bDpidXR0b24gZGxndHlwZT0iYWNjZXB0IiBjbGFzcz0iZGlhbG9nLWJ1
dHRvbiIgaWNvbj0iYWNjZXB0Ii8+CisjZWxpZiBYUF9VTklYCisgICAgICAgICAgICAgICAgcGFj
az0iZW5kIj4KKyAgICAgICAgPHh1bDpidXR0b24gZGxndHlwZT0iaGVscCIgY2xhc3M9ImRpYWxv
Zy1idXR0b24iIGhpZGRlbj0idHJ1ZSIgaWNvbj0iaGVscCIvPgorICAgICAgICA8eHVsOmJ1dHRv
biBkbGd0eXBlPSJleHRyYTIiIGNsYXNzPSJkaWFsb2ctYnV0dG9uIiBoaWRkZW49InRydWUiLz4K
KyAgICAgICAgPHh1bDpzcGFjZXIgYW5vbmlkPSJzcGFjZXIiIGZsZXg9IjEiLz4KKyAgICAgICAg
PHh1bDpidXR0b24gZGxndHlwZT0iYWNjZXB0IiBjbGFzcz0iZGlhbG9nLWJ1dHRvbiIgaWNvbj0i
YWNjZXB0Ii8+CisgICAgICAgIDx4dWw6YnV0dG9uIGRsZ3R5cGU9ImV4dHJhMSIgY2xhc3M9ImRp
YWxvZy1idXR0b24iIGhpZGRlbj0idHJ1ZSIvPgorICAgICAgICA8eHVsOmJ1dHRvbiBkbGd0eXBl
PSJjYW5jZWwiIGNsYXNzPSJkaWFsb2ctYnV0dG9uIiBpY29uPSJjYW5jZWwiLz4KKyAgICAgICAg
PHh1bDpidXR0b24gZGxndHlwZT0iZGlzY2xvc3VyZSIgY2xhc3M9ImRpYWxvZy1idXR0b24iIGhp
ZGRlbj0idHJ1ZSIvPgogI2Vsc2UKICAgICAgICAgICAgICAgICBwYWNrPSJlbmQiPgogICAgICAg
ICA8eHVsOmJ1dHRvbiBkbGd0eXBlPSJleHRyYTIiIGNsYXNzPSJkaWFsb2ctYnV0dG9uIiBoaWRk
ZW49InRydWUiLz4KLS0tIG1vemlsbGEvdG9vbGtpdC9zeXN0ZW0vdW5peHByb3h5L01ha2VmaWxl
LmluLnNhdgkyMDA5LTA5LTE0IDEwOjAwOjIxLjAwMDAwMDAwMCArMDIwMAorKysgbW96aWxsYS90
b29sa2l0L3N5c3RlbS91bml4cHJveHkvTWFrZWZpbGUuaW4JMjAwOS0wOS0xNCAxMDowNDoxNC4w
MDAwMDAwMDAgKzAyMDAKQEAgLTY0LDQgKzY0LDYgQEAgQ1BQU1JDUyA9IFwKICAgICAgICAgbnNV
bml4U3lzdGVtUHJveHlTZXR0aW5ncy5jcHAgXAogICAgICAgICAkKE5VTEwpCiAKK0xPQ0FMX0lO
Q0xVREVTICs9IC1JJCh0b3BzcmNkaXIpL3Rvb2xraXQveHJlCisKIGluY2x1ZGUgJCh0b3BzcmNk
aXIpL2NvbmZpZy9ydWxlcy5tawotLS0gbW96aWxsYS90b29sa2l0L3N5c3RlbS91bml4cHJveHkv
bnNVbml4U3lzdGVtUHJveHlTZXR0aW5ncy5jcHAuc2F2CTIwMDktMDktMTQgMTA6MDA6MjEuMDAw
MDAwMDAwICswMjAwCisrKyBtb3ppbGxhL3Rvb2xraXQvc3lzdGVtL3VuaXhwcm94eS9uc1VuaXhT
eXN0ZW1Qcm94eVNldHRpbmdzLmNwcAkyMDA5LTA5LTE0IDEwOjA0OjE0LjAwMDAwMDAwMCArMDIw
MApAQCAtNDksNiArNDksOCBAQAogI2luY2x1ZGUgIm5zUHJpbnRmQ1N0cmluZy5oIgogI2luY2x1
ZGUgIm5zTmV0VXRpbC5oIgogI2luY2x1ZGUgIm5zSVN1cHBvcnRzUHJpbWl0aXZlcy5oIgorI2lu
Y2x1ZGUgIm5zVm9pZEFycmF5LmgiCisjaW5jbHVkZSAibnNLREVVdGlscy5oIgogCiBjbGFzcyBu
c1VuaXhTeXN0ZW1Qcm94eVNldHRpbmdzIDogcHVibGljIG5zSVN5c3RlbVByb3h5U2V0dGluZ3Mg
ewogcHVibGljOgpAQCAtNjUsNiArNjcsNyBAQCBwcml2YXRlOgogICBQUkJvb2wgSXNQcm94eU1v
ZGUoY29uc3QgY2hhciogYU1vZGUpOwogICBuc3Jlc3VsdCBTZXRQcm94eVJlc3VsdEZyb21HQ29u
Zihjb25zdCBjaGFyKiBhS2V5QmFzZSwgY29uc3QgY2hhciogYVR5cGUsIG5zQUNTdHJpbmcmIGFS
ZXN1bHQpOwogICBuc3Jlc3VsdCBHZXRQcm94eUZyb21HQ29uZihjb25zdCBuc0FDU3RyaW5nJiBh
U2NoZW1lLCBjb25zdCBuc0FDU3RyaW5nJiBhSG9zdCwgUFJJbnQzMiBhUG9ydCwgbnNBQ1N0cmlu
ZyYgYVJlc3VsdCk7CisgIG5zcmVzdWx0IEdldFByb3h5RnJvbUtERShjb25zdCBuc0FDU3RyaW5n
JiBhU2NoZW1lLCBjb25zdCBuc0FDU3RyaW5nJiBhSG9zdCwgUFJJbnQzMiBhUG9ydCwgbnNBQ1N0
cmluZyYgYVJlc3VsdCk7CiB9OwogCiBOU19JTVBMX0lTVVBQT1JUUzEobnNVbml4U3lzdGVtUHJv
eHlTZXR0aW5ncywgbnNJU3lzdGVtUHJveHlTZXR0aW5ncykKQEAgLTQxMiw2ICs0MTUsOSBAQCBu
c1VuaXhTeXN0ZW1Qcm94eVNldHRpbmdzOjpHZXRQcm94eUZvclVSCiAgIHJ2ID0gYVVSSS0+R2V0
UG9ydCgmcG9ydCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKKyAgaWYoIG5zS0RF
VXRpbHM6OmtkZVN1cHBvcnQoKSkKKyAgICByZXR1cm4gR2V0UHJveHlGcm9tS0RFKCBzY2hlbWUs
IGhvc3QsIHBvcnQsIGFSZXN1bHQgKTsKKwogICBpZiAoIW1HQ29uZikKICAgICByZXR1cm4gR2V0
UHJveHlGcm9tRW52aXJvbm1lbnQoc2NoZW1lLCBob3N0LCBwb3J0LCBhUmVzdWx0KTsKIApAQCAt
NDMyLDMgKzQzOCwyOCBAQCBzdGF0aWMgY29uc3QgbnNNb2R1bGVDb21wb25lbnRJbmZvIGNvbXBv
CiB9OwogCiBOU19JTVBMX05TR0VUTU9EVUxFKG5zVW5peFByb3h5TW9kdWxlLCBjb21wb25lbnRz
KQorCituc3Jlc3VsdAorbnNVbml4U3lzdGVtUHJveHlTZXR0aW5nczo6R2V0UHJveHlGcm9tS0RF
KGNvbnN0IG5zQUNTdHJpbmcmIGFTY2hlbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBuc0FDU3RyaW5nJiBhSG9zdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYVBvcnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0FDU3RyaW5nJiBhUmVzdWx0KQor
eworICBuc0NBdXRvU3RyaW5nIHVybDsKKyAgdXJsID0gYVNjaGVtZTsKKyAgdXJsICs9ICI6Ly8i
OworICB1cmwgKz0gYUhvc3Q7CisgIGlmKCBhUG9ydCA+PSAwICkKKyAgICAgIHsKKyAgICAgIHVy
bCArPSAiOiI7CisgICAgICB1cmwgKz0gbnNQcmludGZDU3RyaW5nKCIlZCIsIGFQb3J0KTsKKyAg
ICAgIH0KKyAgbnNDU3RyaW5nQXJyYXkgY29tbWFuZDsKKyAgY29tbWFuZC5BcHBlbmRDU3RyaW5n
KCBOU19MSVRFUkFMX0NTVFJJTkcoICJHRVRQUk9YWSIgKSk7CisgIGNvbW1hbmQuQXBwZW5kQ1N0
cmluZyggdXJsICk7CisgIG5zQ1N0cmluZ0FycmF5IHJlc3VsdDsKKyAgaWYoICFuc0tERVV0aWxz
Ojpjb21tYW5kKCBjb21tYW5kLCAmcmVzdWx0ICkgfHwgcmVzdWx0LkNvdW50KCkgIT0gMSApCisg
ICAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKKyAgYVJlc3VsdCA9ICpyZXN1bHRbIDAgXTsK
KyAgcmV0dXJuIE5TX09LOworfQotLS0gbW96aWxsYS90b29sa2l0L3hyZS9NYWtlZmlsZS5pbi5z
YXYJMjAwOS0wOS0xNCAxMDowMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrIG1vemlsbGEvdG9vbGtp
dC94cmUvTWFrZWZpbGUuaW4JMjAwOS0wOS0xNCAxMDowNDoxNC4wMDAwMDAwMDAgKzAyMDAKQEAg
LTk4LDYgKzk4LDcgQEAgZW5kaWYKIEVYUE9SVFMgPSBcCiAJeHJlY29yZS5oIFwKIAluc1hVTEFw
cEFQSS5oIFwKKwluc0tERVV0aWxzLmggXAogCSQoTlVMTCkKIAogQ1BQU1JDUyA9IFwKQEAgLTEz
Myw3ICsxMzQsNyBAQCBpZmVxICgkKE1PWl9XSURHRVRfVE9PTEtJVCksYmVvcykKIENQUFNSQ1Mg
Kz0gbnNOYXRpdmVBcHBTdXBwb3J0QmVPUy5jcHAKIGVsc2UKIGlmZXEgKCQoTU9aX1dJREdFVF9U
T09MS0lUKSxndGsyKQotQ1BQU1JDUyArPSBuc05hdGl2ZUFwcFN1cHBvcnRVbml4LmNwcAorQ1BQ
U1JDUyArPSBuc05hdGl2ZUFwcFN1cHBvcnRVbml4LmNwcCBuc0tERVV0aWxzLmNwcAogZWxzZQog
Q1BQU1JDUyArPSBuc05hdGl2ZUFwcFN1cHBvcnREZWZhdWx0LmNwcAogZW5kaWYKLS0tIG1vemls
bGEvdG9vbGtpdC94cmUvbnNLREVVdGlscy5jcHAuc2F2CTIwMDktMDktMTQgMTA6MDA6MjEuMDAw
MDAwMDAwICswMjAwCisrKyBtb3ppbGxhL3Rvb2xraXQveHJlL25zS0RFVXRpbHMuY3BwCTIwMDkt
MDktMTQgMTA6MDQ6MTQuMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsMzI5IEBACisvKiAtKi0g
TW9kZTogQysrOyB0YWItd2lkdGg6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1v
ZmZzZXQ6IDQgLSotICovCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBW
ZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2Yg
dGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNp
b24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhj
ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEg
Y29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisg
KgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0
aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgVW5peCBOYXRpdmUg
QXBwIFN1cHBvcnQuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5h
bCBDb2RlIGlzCisgKiBNb3ppbGxhIENvcnBvcmF0aW9uLgorICogUG9ydGlvbnMgY3JlYXRlZCBi
eSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwNworICogdGhlIElu
aXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9y
KHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5
IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRo
ZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9y
IHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5
b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5Cisg
KiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3Qg
dG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVs
ZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3Rp
Y2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExH
UEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNp
cGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVy
bXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoq
KioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKyNpbmNsdWRlICJuc0tERVV0aWxzLmgi
CisjaW5jbHVkZSAibnNJV2lkZ2V0LmgiCisKKyNpbmNsdWRlIDxndGsvZ3Rrd2luZG93Lmg+Cisj
aW5jbHVkZSA8Z3RrL2d0a21haW4uaD4KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUg
PHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNp
bmNsdWRlIDxYMTEvWGxpYi5oPgorCisvLyNkZWZpbmUgREVCVUdfS0RFCisjaWZkZWYgREVCVUdf
S0RFCisjZGVmaW5lIEtNT1pJTExBSEVMUEVSICJrbW96aWxsYWhlbHBlciIKKyNlbHNlCisvLyBu
b3QgbmVlZCBmb3IgbGliNjQsIGl0J3MgYSBiaW5hcnkKKyNkZWZpbmUgS01PWklMTEFIRUxQRVIg
Ii91c3IvbGliL21vemlsbGEva21vemlsbGFoZWxwZXIiCisjZW5kaWYKKworI2RlZmluZSBLTU9a
SUxMQUhFTFBFUl9WRVJTSU9OIDUKKyNkZWZpbmUgTUFLRV9TVFIyKCBuICkgI24KKyNkZWZpbmUg
TUFLRV9TVFIoIG4gKSBNQUtFX1NUUjIoIG4gKQorCitzdGF0aWMgYm9vbCBnZXRLZGVTZXNzaW9u
KCkKKyAgICB7CisgICAgRGlzcGxheSogZHB5ID0gWE9wZW5EaXNwbGF5KCBOVUxMICk7CisgICAg
aWYoIGRweSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEF0b20ga2RlX2Z1
bGxfc2Vzc2lvbiA9IFhJbnRlcm5BdG9tKCBkcHksICJLREVfRlVMTF9TRVNTSU9OIiwgVHJ1ZSAp
OworICAgIGJvb2wga2RlID0gZmFsc2U7CisgICAgaWYoIGtkZV9mdWxsX3Nlc3Npb24gIT0gTm9u
ZSApCisgICAgICAgIHsKKyAgICAgICAgaW50IGNudDsKKyAgICAgICAgaWYoIEF0b20qIHByb3Bz
ID0gWExpc3RQcm9wZXJ0aWVzKCBkcHksIERlZmF1bHRSb290V2luZG93KCBkcHkgKSwgJmNudCAp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgZm9yKCBpbnQgaSA9IDA7CisgICAgICAgICAg
ICAgICAgIGkgPCBjbnQ7CisgICAgICAgICAgICAgICAgICsraSApCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmKCBwcm9wc1sgaSBdID09IGtkZV9mdWxsX3Nlc3Npb24gKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGtkZSA9IHRydWU7Cisj
aWZkZWYgREVCVUdfS0RFCisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIktE
RSBTRVNTSU9OICVkXG4iLCBrZGUgKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IFhGcmVlKCBwcm9wcyApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgWENsb3NlRGlz
cGxheSggZHB5ICk7CisgICAgcmV0dXJuIGtkZTsKKyAgICB9CisKK3N0YXRpYyBib29sIGdldEtk
ZVN1cHBvcnQoKQorICAgIHsKKyAgICBuc0NTdHJpbmdBcnJheSBjb21tYW5kOworICAgIGNvbW1h
bmQuQXBwZW5kQ1N0cmluZyggTlNfTElURVJBTF9DU1RSSU5HKCAiQ0hFQ0siICkpOworICAgIGNv
bW1hbmQuQXBwZW5kQ1N0cmluZyggTlNfTElURVJBTF9DU1RSSU5HKCBNQUtFX1NUUiggS01PWklM
TEFIRUxQRVJfVkVSU0lPTiApKSk7CisgICAgYm9vbCBrZGUgPSBuc0tERVV0aWxzOjpjb21tYW5k
KCBjb21tYW5kICk7CisjaWZkZWYgREVCVUdfS0RFCisgICAgZnByaW50Ziggc3RkZXJyLCAiS0RF
IFJVTk5JTkcgJWRcbiIsIGtkZSApOworI2VuZGlmCisgICAgcmV0dXJuIGtkZTsKKyAgICB9CisK
K25zS0RFVXRpbHM6Om5zS0RFVXRpbHMoKQorICAgIDogY29tbWFuZEZpbGUoIE5VTEwgKQorICAg
ICwgcmVwbHlGaWxlKCBOVUxMICkKKyAgICB7CisgICAgfQorCituc0tERVV0aWxzOjp+bnNLREVV
dGlscygpCisgICAgeworLy8gICAgY2xvc2VIZWxwZXIoKTsgbm90IGFjdHVhbGx5IHVzZWZ1bCwg
ZXhpdGluZyB3aWxsIGNsb3NlIHRoZSBmZCB0b28KKyAgICB9CisKK25zS0RFVXRpbHMqIG5zS0RF
VXRpbHM6OnNlbGYoKQorICAgIHsKKyAgICBzdGF0aWMgbnNLREVVdGlscyBzOworICAgIHJldHVy
biAmczsKKyAgICB9CisKK3N0YXRpYyBib29sIGhlbHBlclJ1bm5pbmcgPSBmYWxzZTsKK3N0YXRp
YyBib29sIGhlbHBlckZhaWxlZCA9IGZhbHNlOworCitib29sIG5zS0RFVXRpbHM6OmtkZVNlc3Np
b24oKQorICAgIHsKKyAgICBzdGF0aWMgYm9vbCBzZXNzaW9uID0gZ2V0S2RlU2Vzc2lvbigpOwor
ICAgIHJldHVybiBzZXNzaW9uOworICAgIH0KKworYm9vbCBuc0tERVV0aWxzOjprZGVTdXBwb3J0
KCkKKyAgICB7CisgICAgc3RhdGljIGJvb2wgc3VwcG9ydCA9IGtkZVNlc3Npb24oKSAmJiBnZXRL
ZGVTdXBwb3J0KCk7CisgICAgcmV0dXJuIHN1cHBvcnQgJiYgaGVscGVyUnVubmluZzsKKyAgICB9
CisKK3N0cnVjdCBuc0tERUNvbW1hbmREYXRhCisgICAgeworICAgIEZJTEUqIGZpbGU7CisgICAg
bnNDU3RyaW5nQXJyYXkqIG91dHB1dDsKKyAgICBHTWFpbkxvb3AqIGxvb3A7CisgICAgYm9vbCBz
dWNjZXNzOworICAgIH07CisKK3N0YXRpYyBnYm9vbGVhbiBrZGVSZWFkRnVuYyggR0lPQ2hhbm5l
bCosIEdJT0NvbmRpdGlvbiwgZ3BvaW50ZXIgZGF0YSApCisgICAgeworICAgIG5zS0RFQ29tbWFu
ZERhdGEqIHAgPSBzdGF0aWNfY2FzdDwgbnNLREVDb21tYW5kRGF0YSogPiggZGF0YSApOworICAg
IGNoYXIgYnVmWyA4MTkyIF07IC8vIFRPRE8gYmlnIGVub3VnaAorICAgIGJvb2wgY29tbWFuZF9k
b25lID0gZmFsc2U7CisgICAgYm9vbCBjb21tYW5kX2ZhaWxlZCA9IGZhbHNlOworICAgIHdoaWxl
KCAhY29tbWFuZF9kb25lICYmICFjb21tYW5kX2ZhaWxlZCAmJiBmZ2V0cyggYnVmLCA4MTkyLCBw
LT5maWxlICkgIT0gTlVMTCApCisgICAgICAgIHsgLy8gVE9ETyB3aGF0IGlmIHRoZSBrZXJuZWwg
c3BsaXRzIGEgbGluZSBpbnRvIHR3byBjaHVua3M/CisvLyNpZmRlZiBERUJVR19LREUKKy8vICAg
ICAgICBmcHJpbnRmKCBzdGRlcnIsICJSRUFEOiAlcyAlZFxuIiwgYnVmLCBmZW9mKCBwLT5maWxl
ICkpOworLy8jZW5kaWYKKyAgICAgICAgaWYoIGNoYXIqIGVvbCA9IHN0cmNociggYnVmLCAnXG4n
ICkpCisgICAgICAgICAgICAqZW9sID0gJ1wwJzsKKyAgICAgICAgY29tbWFuZF9kb25lID0gKCBz
dHJjbXAoIGJ1ZiwgIlxcMSIgKSA9PSAwICk7CisgICAgICAgIGNvbW1hbmRfZmFpbGVkID0gKCBz
dHJjbXAoIGJ1ZiwgIlxcMCIgKSA9PSAwICk7CisgICAgICAgIG5zQ0F1dG9TdHJpbmcgbGluZSgg
YnVmICk7CisgICAgICAgIGxpbmUuUmVwbGFjZVN1YnN0cmluZyggIlxcbiIsICJcbiIgKTsKKyAg
ICAgICAgbGluZS5SZXBsYWNlU3Vic3RyaW5nKCAiXFwiICJcXCIsICJcXCIgKTsgLy8gIFxcIC0+
IFwgLCBpLmUuIHVuZXNjYXBlCisgICAgICAgIGlmKCBwLT5vdXRwdXQgJiYgISggY29tbWFuZF9k
b25lIHx8IGNvbW1hbmRfZmFpbGVkICkpCisgICAgICAgICAgICBwLT5vdXRwdXQtPkFwcGVuZENT
dHJpbmcoIG5zQ1N0cmluZyggYnVmICkpOyAvLyBUT0RPIHV0Zjg/CisgICAgICAgIH0KKyAgICBi
b29sIHF1aXQgPSBmYWxzZTsKKyAgICBpZiggZmVvZiggcC0+ZmlsZSApIHx8IGNvbW1hbmRfZmFp
bGVkICkKKyAgICAgICAgeworICAgICAgICBxdWl0ID0gdHJ1ZTsKKyAgICAgICAgcC0+c3VjY2Vz
cyA9IGZhbHNlOworICAgICAgICB9CisgICAgaWYoIGNvbW1hbmRfZG9uZSApCisgICAgICAgIHsg
Ly8gcmVhZGluZyBvbmUgcmVwbHkgZmluaXNoZWQKKyAgICAgICAgcXVpdCA9IHRydWU7CisgICAg
ICAgIHAtPnN1Y2Nlc3MgPSB0cnVlOworICAgICAgICB9CisgICAgaWYoIHF1aXQgKQorICAgICAg
ICB7CisgICAgICAgIGlmKCBwLT5sb29wICkKKyAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
IHAtPmxvb3AgKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgcmV0dXJu
IFRSVUU7CisgICAgfQorCitib29sIG5zS0RFVXRpbHM6OmNvbW1hbmQoIGNvbnN0IG5zQ1N0cmlu
Z0FycmF5JiBjb21tYW5kLCBuc0NTdHJpbmdBcnJheSogb3V0cHV0ICkKKyAgICB7CisgICAgcmV0
dXJuIHNlbGYoKS0+aW50ZXJuYWxDb21tYW5kKCBjb21tYW5kLCBOVUxMLCBmYWxzZSwgb3V0cHV0
ICk7CisgICAgfQorCitib29sIG5zS0RFVXRpbHM6OmNvbW1hbmRCbG9ja1VpKCBjb25zdCBuc0NT
dHJpbmdBcnJheSYgY29tbWFuZCwgY29uc3QgR3RrV2luZG93KiBwYXJlbnQsIG5zQ1N0cmluZ0Fy
cmF5KiBvdXRwdXQgKQorICAgIHsKKyAgICByZXR1cm4gc2VsZigpLT5pbnRlcm5hbENvbW1hbmQo
IGNvbW1hbmQsIHBhcmVudCwgdHJ1ZSwgb3V0cHV0ICk7CisgICAgfQorCitib29sIG5zS0RFVXRp
bHM6OmludGVybmFsQ29tbWFuZCggY29uc3QgbnNDU3RyaW5nQXJyYXkmIGNvbW1hbmQsIGNvbnN0
IEd0a1dpbmRvdyogcGFyZW50LCBib29sIGJsb2NrVWksCisgICAgbnNDU3RyaW5nQXJyYXkqIG91
dHB1dCApCisgICAgeworICAgIGlmKCAhc3RhcnRIZWxwZXIoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGZlZWRDb21tYW5kKCBjb21tYW5kICk7CisgICAgLy8gZG8gbm90IHN0b3JlIHRo
ZSBkYXRhIGluICd0aGlzJyBidXQgaW4gZXh0cmEgc3RydWN0dXJlLCBqdXN0IGluIGNhc2UgdGhl
cmUKKyAgICAvLyBpcyByZWVudHJhbmN5IChjYW4gdGhlcmUgYmU/IHRoZSBldmVudCBsb29wIGlz
IHJlLWVudGVyZWQpCisgICAgbnNLREVDb21tYW5kRGF0YSBkYXRhOworICAgIGRhdGEuZmlsZSA9
IHJlcGx5RmlsZTsKKyAgICBkYXRhLm91dHB1dCA9IG91dHB1dDsKKyAgICBkYXRhLnN1Y2Nlc3Mg
PSBmYWxzZTsKKyAgICBpZiggYmxvY2tVaSApCisgICAgICAgIHsKKyAgICAgICAgZGF0YS5sb29w
ID0gZ19tYWluX2xvb3BfbmV3KCBOVUxMLCBGQUxTRSApOworICAgICAgICBHdGtXaWRnZXQqIHdp
bmRvdyA9IGd0a193aW5kb3dfbmV3KCBHVEtfV0lORE9XX1RPUExFVkVMICk7CisgICAgICAgIGlm
KCBwYXJlbnQgJiYgcGFyZW50LT5ncm91cCApCisgICAgICAgICAgICBndGtfd2luZG93X2dyb3Vw
X2FkZF93aW5kb3coIHBhcmVudC0+Z3JvdXAsIEdUS19XSU5ET1coIHdpbmRvdyApKTsKKyAgICAg
ICAgZ3RrX3dpZGdldF9yZWFsaXplKCB3aW5kb3cgKTsKKyAgICAgICAgZ3RrX3dpZGdldF9zZXRf
c2Vuc2l0aXZlKCB3aW5kb3csIFRSVUUgKTsKKyAgICAgICAgZ3RrX2dyYWJfYWRkKCB3aW5kb3cg
KTsKKyAgICAgICAgR0lPQ2hhbm5lbCogY2hhbm5lbCA9IGdfaW9fY2hhbm5lbF91bml4X25ldygg
ZmlsZW5vKCBkYXRhLmZpbGUgKSk7CisgICAgICAgIGdfaW9fYWRkX3dhdGNoKCBjaGFubmVsLCBz
dGF0aWNfY2FzdDwgR0lPQ29uZGl0aW9uID4oIEdfSU9fSU4gfCBHX0lPX0VSUiB8IEdfSU9fSFVQ
ICksIGtkZVJlYWRGdW5jLCAmZGF0YSApOworICAgICAgICBnX2lvX2NoYW5uZWxfdW5yZWYoIGNo
YW5uZWwgKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKCBkYXRhLmxvb3AgKTsKKyAgICAgICAg
Z19tYWluX2xvb3BfdW5yZWYoIGRhdGEubG9vcCApOworICAgICAgICBndGtfZ3JhYl9yZW1vdmUo
IHdpbmRvdyApOworICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koIHdpbmRvdyApOworICAgICAg
ICB9CisgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIGRhdGEubG9vcCA9IE5VTEw7CisgICAg
ICAgIHdoaWxlKCBrZGVSZWFkRnVuYyggTlVMTCwgc3RhdGljX2Nhc3Q8IEdJT0NvbmRpdGlvbiA+
KCAwICksICZkYXRhICkpCisgICAgICAgICAgICA7CisgICAgICAgIH0KKyAgICByZXR1cm4gZGF0
YS5zdWNjZXNzOworICAgIH0KKworYm9vbCBuc0tERVV0aWxzOjpzdGFydEhlbHBlcigpCisgICAg
eworICAgIGlmKCBoZWxwZXJSdW5uaW5nICkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYo
IGhlbHBlckZhaWxlZCApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBoZWxwZXJGYWlsZWQg
PSB0cnVlOworICAgIGludCBmZGNvbW1hbmRbIDIgXTsKKyAgICBpbnQgZmRyZXBseVsgMiBdOwor
ICAgIGlmKCBwaXBlKCBmZGNvbW1hbmQgKSA8IDAgKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYoIHBpcGUoIGZkcmVwbHkgKSA8IDAgKQorICAgICAgICB7CisgICAgICAgIGNsb3NlKCBm
ZGNvbW1hbmRbIDAgXSApOworICAgICAgICBjbG9zZSggZmRjb21tYW5kWyAxIF0gKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgY2hhciogYXJnc1sgMiBdID0geyBjb25z
dF9jYXN0PCBjaGFyKiA+KCBLTU9aSUxMQUhFTFBFUiApLCBOVUxMIH07CisgICAgc3dpdGNoKCBm
b3JrKCkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAtMToKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgIGNsb3NlKCBmZGNvbW1hbmRbIDAgXSApOworICAgICAgICAgICAgY2xvc2UoIGZkY29t
bWFuZFsgMSBdICk7CisgICAgICAgICAgICBjbG9zZSggZmRyZXBseVsgMCBdICk7CisgICAgICAg
ICAgICBjbG9zZSggZmRyZXBseVsgMSBdICk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIGNhc2UgMDogLy8gY2hpbGQKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmKCBkdXAyKCBmZGNvbW1hbmRbIDAgXSwgU1RESU5fRklMRU5PICkgPCAwICkK
KyAgICAgICAgICAgICAgICBfZXhpdCggMSApOworICAgICAgICAgICAgaWYoIGR1cDIoIGZkcmVw
bHlbIDEgXSwgU1RET1VUX0ZJTEVOTyApIDwgMCApCisgICAgICAgICAgICAgICAgX2V4aXQoIDEg
KTsKKyAgICAgICAgICAgIGludCBtYXhmZCA9IDEwMjQ7IC8vIGNsb3NlIGFsbCBvdGhlciBmZHMK
KyAgICAgICAgICAgIHN0cnVjdCBybGltaXQgcmw7CisgICAgICAgICAgICBpZiggZ2V0cmxpbWl0
KCBSTElNSVRfTk9GSUxFLCAmcmwgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBtYXhmZCA9IHJs
LnJsaW1fbWF4OworICAgICAgICAgICAgZm9yKCBpbnQgaSA9IDM7CisgICAgICAgICAgICAgICAg
IGkgPCBtYXhmZDsKKyAgICAgICAgICAgICAgICAgKytpICkKKyAgICAgICAgICAgICAgICBjbG9z
ZSggaSApOworI2lmZGVmIERFQlVHX0tERQorICAgICAgICAgICAgZXhlY3ZwKCBLTU9aSUxMQUhF
TFBFUiwgYXJncyApOworI2Vsc2UKKyAgICAgICAgICAgIGV4ZWN2KCBLTU9aSUxMQUhFTFBFUiwg
YXJncyApOworI2VuZGlmCisgICAgICAgICAgICBfZXhpdCggMSApOyAvLyBmYWlsZWQKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDogLy8gcGFyZW50CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICBjb21tYW5kRmlsZSA9IGZkb3BlbiggZmRjb21tYW5kWyAxIF0sICJ3IiApOworICAg
ICAgICAgICAgcmVwbHlGaWxlID0gZmRvcGVuKCBmZHJlcGx5WyAwIF0sICJyIiApOworICAgICAg
ICAgICAgY2xvc2UoIGZkY29tbWFuZFsgMCBdICk7CisgICAgICAgICAgICBjbG9zZSggZmRyZXBs
eVsgMSBdICk7CisgICAgICAgICAgICBpZiggY29tbWFuZEZpbGUgPT0gTlVMTCB8fCByZXBseUZp
bGUgPT0gTlVMTCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNsb3NlSGVs
cGVyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIC8vIG9rLCBoZWxwZXIgcmVhZHksIGdldEtkZVJ1bm5pbmcoKSB3aWxsIGNo
ZWNrIGlmIGl0IHdvcmtzCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBoZWxwZXJGYWls
ZWQgPSBmYWxzZTsKKyAgICBoZWxwZXJSdW5uaW5nID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKK3ZvaWQgbnNLREVVdGlsczo6Y2xvc2VIZWxwZXIoKQorICAgIHsKKyAgICBpZigg
Y29tbWFuZEZpbGUgIT0gTlVMTCApCisgICAgICAgIGZjbG9zZSggY29tbWFuZEZpbGUgKTsgLy8g
dGhpcyB3aWxsIGFsc28gbWFrZSB0aGUgaGVscGVyIHF1aXQKKyAgICBpZiggcmVwbHlGaWxlICE9
IE5VTEwgKQorICAgICAgICBmY2xvc2UoIHJlcGx5RmlsZSApOworICAgIGhlbHBlclJ1bm5pbmcg
PSBmYWxzZTsKKyAgICB9CisKK3ZvaWQgbnNLREVVdGlsczo6ZmVlZENvbW1hbmQoIGNvbnN0IG5z
Q1N0cmluZ0FycmF5JiBjb21tYW5kICkKKyAgICB7CisgICAgZm9yKCBpbnQgaSA9IDA7CisgICAg
ICAgICBpIDwgY29tbWFuZC5Db3VudCgpOworICAgICAgICAgKytpICkKKyAgICAgICAgeworICAg
ICAgICBuc0NTdHJpbmcgbGluZSA9ICpjb21tYW5kWyBpIF07CisgICAgICAgIGxpbmUuUmVwbGFj
ZVN1YnN0cmluZyggIlxcIiwgIlxcIiAiXFwiICk7IC8vIFwgLT4gXFwgLCBpLmUuIGVzY2FwZQor
ICAgICAgICBsaW5lLlJlcGxhY2VTdWJzdHJpbmcoICJcbiIsICJcXG4iICk7CisjaWZkZWYgREVC
VUdfS0RFCisgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIkNPTU06ICVzXG4iLCBsaW5lLmdldCgp
KTsKKyNlbmRpZgorICAgICAgICBmcHV0cyggbGluZS5nZXQoKSwgY29tbWFuZEZpbGUgKTsKKyAg
ICAgICAgZnB1dHMoICJcbiIsIGNvbW1hbmRGaWxlICk7CisgICAgICAgIH0KKyAgICBmcHV0cygg
IlxcRVxuIiwgY29tbWFuZEZpbGUgKTsgLy8gZG9uZSBhcyBcRSwgc28gaXQgY2Fubm90IGhhcHBl
biBpbiBub3JtYWwgZGF0YQorICAgIGZmbHVzaCggY29tbWFuZEZpbGUgKTsKKyAgICB9Ci0tLSBt
b3ppbGxhL3Rvb2xraXQveHJlL25zS0RFVXRpbHMuaC5zYXYJMjAwOS0wOS0xNCAxMDowMDoyMS4w
MDAwMDAwMDAgKzAyMDAKKysrIG1vemlsbGEvdG9vbGtpdC94cmUvbnNLREVVdGlscy5oCTIwMDkt
MDktMTQgMTA6MDQ6MTUuMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsNzcgQEAKKy8qIC0qLSBN
b2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9m
ZnNldDogMiAtKi0KKyAqCisgKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBW
ZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2Yg
dGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNp
b24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhj
ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEg
Y29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisg
KgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0
aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgTW96aWxsYSBDb21t
dW5pY2F0b3IgY2xpZW50IGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRo
ZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlv
bi4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5
cmlnaHQgKEMpIDE5OTgKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUg
Y29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICog
ZWl0aGVyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0
ZXIgKHRoZSAiR1BMIiksCisgKiBvciB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2Ug
dGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0
ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIg
dmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0
aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlv
dXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGlj
YXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFu
ZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyBy
ZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICog
dGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhl
IEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAq
LworCisjaWZuZGVmIG5zS0RFVXRpbHNfaF9fCisjZGVmaW5lIG5zS0RFVXRpbHNfaF9fCisKKyNp
bmNsdWRlICJuc1N0cmluZ0dsdWUuaCIKKyNpbmNsdWRlICJuc1ZvaWRBcnJheS5oIgorI2luY2x1
ZGUgPHN0ZGlvLmg+CisKK3R5cGVkZWYgc3RydWN0IF9HdGtXaW5kb3cgR3RrV2luZG93OworCitj
bGFzcyBOU19FWFBPUlQgbnNLREVVdGlscworICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8q
IFJldHVybnMgdHJ1ZSBpZiBydW5uaW5nIGluc2lkZSBhIEtERSBzZXNzaW9uIChyZWdhcmRsZXNz
IG9mIHdoZXRoZXIgdGhlcmUgaXMgS0RFCisgICAgICAgICAgIHN1cHBvcnQgYXZhaWxhYmxlIGZv
ciBGaXJlZm94KS4gVGhpcyBzaG91bGQgYmUgdXNlZCBlLmcuIHdoZW4gZGV0ZXJtaW5pbmcKKyAg
ICAgICAgICAgZGlhbG9nIGJ1dHRvbiBvcmRlciBidXQgbm90IGZvciBjb2RlIHRoYXQgcmVxdWly
ZXMgdGhlIEtERSBzdXBwb3J0LiAqLworICAgICAgICBzdGF0aWMgYm9vbCBrZGVTZXNzaW9uKCk7
CisgICAgICAgIC8qIFJldHVybnMgdHJ1ZSBpZiBydW5uaW5nIGluc2lkZSBhIEtERSBzZXNzaW9u
IGFuZCBLREUgc3VwcG9ydCBpcyBhdmFpbGFibGUKKyAgICAgICAgICAgZm9yIEZpcmVmb3guIFRo
aXMgc2hvdWxkIGJlIHVzZWQgZXZlcnl3aGVyZSB3aGVyZSB0aGUgZXh0ZXJuYWwgaGVscGVyIGlz
IG5lZWRlZC4gKi8KKyAgICAgICAgc3RhdGljIGJvb2wga2RlU3VwcG9ydCgpOworICAgICAgICAv
KiBFeGVjdXRlcyB0aGUgZ2l2ZW4gaGVscGVyIGNvbW1hbmQsIHJldHVybnMgdHJ1ZSBpZiBoZWxw
ZXIgcmV0dXJuZWQgc3VjY2Vzcy4gKi8KKyAgICAgICAgc3RhdGljIGJvb2wgY29tbWFuZCggY29u
c3QgbnNDU3RyaW5nQXJyYXkmIGNvbW1hbmQsIG5zQ1N0cmluZ0FycmF5KiBvdXRwdXQgPSBOVUxM
ICk7CisgICAgICAgIC8qIExpa2UgY29tbWFuZCgpLCBidXQgYWRkaXRpb25hbGx5IGJsb2NrcyB0
aGUgcGFyZW50IHdpZGdldCBsaWtlIGlmIHRoZXJlIHdhcworICAgICAgICAgICBhIG1vZGFsIGRp
YWxvZyBzaG93biBhbmQgZW50ZXJzIHRoZSBldmVudCBsb29wIChpLmUuIHRoZXJlIGFyZSBzdGls
bCBwYWludCB1cGRhdGVzLAorICAgICAgICAgICB0aGlzIGlzIGZvciBjb21tYW5kcyB0aGF0IHRh
a2UgbG9uZykuICovCisgICAgICAgIHN0YXRpYyBib29sIGNvbW1hbmRCbG9ja1VpKCBjb25zdCBu
c0NTdHJpbmdBcnJheSYgY29tbWFuZCwgY29uc3QgR3RrV2luZG93KiBwYXJlbnQsIG5zQ1N0cmlu
Z0FycmF5KiBvdXRwdXQgPSBOVUxMICk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgbnNLREVVdGls
cygpOworICAgICAgICB+bnNLREVVdGlscygpOworICAgICAgICBzdGF0aWMgbnNLREVVdGlscyog
c2VsZigpOworICAgICAgICBib29sIHN0YXJ0SGVscGVyKCk7CisgICAgICAgIHZvaWQgY2xvc2VI
ZWxwZXIoKTsKKyAgICAgICAgdm9pZCBmZWVkQ29tbWFuZCggY29uc3QgbnNDU3RyaW5nQXJyYXkm
IGNvbW1hbmQgKTsKKyAgICAgICAgYm9vbCBpbnRlcm5hbENvbW1hbmQoIGNvbnN0IG5zQ1N0cmlu
Z0FycmF5JiBjb21tYW5kLCBjb25zdCBHdGtXaW5kb3cqIHBhcmVudCwgYm9vbCBpc1BhcmVudCwK
KyAgICAgICAgICAgIG5zQ1N0cmluZ0FycmF5KiBvdXRwdXQgKTsKKyAgICAgICAgRklMRSogY29t
bWFuZEZpbGU7CisgICAgICAgIEZJTEUqIHJlcGx5RmlsZTsKKyAgICB9OworCisjZW5kaWYgLy8g
bnNLREVVdGlscwotLS0gbW96aWxsYS91cmlsb2FkZXIvZXh0aGFuZGxlci9NYWtlZmlsZS5pbi5z
YXYJMjAwOS0wOS0xNCAxMDowMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrIG1vemlsbGEvdXJpbG9h
ZGVyL2V4dGhhbmRsZXIvTWFrZWZpbGUuaW4JMjAwOS0wOS0xNCAxMDowNDoxNS4wMDAwMDAwMDAg
KzAyMDAKQEAgLTEwOSw4ICsxMDksOSBAQCBlbmRpZgogTE9DQUxfSU5DTFVERVMgPSAtSSQoc3Jj
ZGlyKQogCiBpZmVxICgkKE1PWl9XSURHRVRfVE9PTEtJVCksZ3RrMikKLU9TSEVMUEVSCSs9IG5z
R05PTUVSZWdpc3RyeS5jcHAKK09TSEVMUEVSCSs9IG5zQ29tbW9uUmVnaXN0cnkuY3BwIG5zR05P
TUVSZWdpc3RyeS5jcHAgbnNLREVSZWdpc3RyeS5jcHAKIE9TSEVMUEVSICArPSBuc01JTUVJbmZv
VW5peC5jcHAKK0xPQ0FMX0lOQ0xVREVTICs9IC1JJCh0b3BzcmNkaXIpL3Rvb2xraXQveHJlCiBl
bmRpZgogCiBpZmVxICgkKE1PWl9XSURHRVRfVE9PTEtJVCkscXQpCi0tLSBtb3ppbGxhL3VyaWxv
YWRlci9leHRoYW5kbGVyL3VuaXgvbnNDb21tb25SZWdpc3RyeS5jcHAuc2F2CTIwMDktMDktMTQg
MTA6MDA6MjEuMDAwMDAwMDAwICswMjAwCisrKyBtb3ppbGxhL3VyaWxvYWRlci9leHRoYW5kbGVy
L3VuaXgvbnNDb21tb25SZWdpc3RyeS5jcHAJMjAwOS0wOS0xNCAxMDowNDoxNS4wMDAwMDAwMDAg
KzAyMDAKQEAgLTAsMCArMSw4NyBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBp
bmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAqLworLyogKioqKiog
QkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xH
UEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0
aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIp
OyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAq
IHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAq
IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisg
KiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRo
ZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBHTk9NRSBoZWxwZXIgYXBwIGltcGxlbWVudGF0aW9uLgor
ICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICog
SUJNIENvcnBvcmF0aW9uLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZl
bG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMworICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICogIEJyaWFuIFJ5
bmVyIDxicnluZXJAYnJpYW5yeW5lci5jb20+ICAoT3JpZ2luYWwgQXV0aG9yKQorICoKKyAqIEFs
dGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIg
dGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZl
cnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICog
aW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBh
cHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxv
dyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVy
bXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJz
IHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zp
c2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhl
ciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBu
b3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5
b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBv
ZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNF
IEJMT0NLICoqKioqICovCisKKyNpbmNsdWRlICJuc0NvbW1vblJlZ2lzdHJ5LmgiCisKKyNpbmNs
dWRlICJuc0dOT01FUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJuc0tERVJlZ2lzdHJ5LmgiCisjaW5j
bHVkZSAibnNTdHJpbmcuaCIKKyNpbmNsdWRlICJuc1ZvaWRBcnJheS5oIgorI2luY2x1ZGUgIm5z
S0RFVXRpbHMuaCIKKworLyogc3RhdGljICovIFBSQm9vbAorbnNDb21tb25SZWdpc3RyeTo6SGFu
ZGxlckV4aXN0cyhjb25zdCBjaGFyICphUHJvdG9jb2xTY2hlbWUpCit7CisgICAgaWYoIG5zS0RF
VXRpbHM6OmtkZVN1cHBvcnQoKSkKKyAgICAgICAgcmV0dXJuIG5zS0RFUmVnaXN0cnk6OkhhbmRs
ZXJFeGlzdHMoIGFQcm90b2NvbFNjaGVtZSApOworICAgIHJldHVybiBuc0dOT01FUmVnaXN0cnk6
OkhhbmRsZXJFeGlzdHMoIGFQcm90b2NvbFNjaGVtZSApOworfQorCisvKiBzdGF0aWMgKi8gbnNy
ZXN1bHQKK25zQ29tbW9uUmVnaXN0cnk6OkxvYWRVUkwobnNJVVJJICphVVJMKQoreworICAgIGlm
KCBuc0tERVV0aWxzOjprZGVTdXBwb3J0KCkpCisgICAgICAgIHJldHVybiBuc0tERVJlZ2lzdHJ5
OjpMb2FkVVJMKCBhVVJMICk7CisgICAgcmV0dXJuIG5zR05PTUVSZWdpc3RyeTo6TG9hZFVSTCgg
YVVSTCApOworfQorCisvKiBzdGF0aWMgKi8gdm9pZAorbnNDb21tb25SZWdpc3RyeTo6R2V0QXBw
RGVzY0ZvclNjaGVtZShjb25zdCBuc0FDU3RyaW5nJiBhU2NoZW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zQVN0cmluZyYgYURlc2MpCit7CisgICAgaWYoIG5zS0RF
VXRpbHM6OmtkZVN1cHBvcnQoKSkKKyAgICAgICAgcmV0dXJuIG5zS0RFUmVnaXN0cnk6OkdldEFw
cERlc2NGb3JTY2hlbWUoIGFTY2hlbWUsIGFEZXNjICk7CisgICAgcmV0dXJuIG5zR05PTUVSZWdp
c3RyeTo6R2V0QXBwRGVzY0ZvclNjaGVtZSggYVNjaGVtZSwgYURlc2MgKTsKK30KKworCisvKiBz
dGF0aWMgKi8gYWxyZWFkeV9BZGRSZWZlZDxuc01JTUVJbmZvQmFzZT4KK25zQ29tbW9uUmVnaXN0
cnk6OkdldEZyb21FeHRlbnNpb24oY29uc3QgbnNBQ1N0cmluZyYgYUZpbGVFeHQpCit7CisgICAg
aWYoIG5zS0RFVXRpbHM6OmtkZVN1cHBvcnQoKSkKKyAgICAgICAgcmV0dXJuIG5zS0RFUmVnaXN0
cnk6OkdldEZyb21FeHRlbnNpb24oIGFGaWxlRXh0ICk7CisgICAgcmV0dXJuIG5zR05PTUVSZWdp
c3RyeTo6R2V0RnJvbUV4dGVuc2lvbiggYUZpbGVFeHQgKTsKK30KKworLyogc3RhdGljICovIGFs
cmVhZHlfQWRkUmVmZWQ8bnNNSU1FSW5mb0Jhc2U+Cituc0NvbW1vblJlZ2lzdHJ5OjpHZXRGcm9t
VHlwZShjb25zdCBuc0FDU3RyaW5nJiBhTUlNRVR5cGUpCit7CisgICAgaWYoIG5zS0RFVXRpbHM6
OmtkZVN1cHBvcnQoKSkKKyAgICAgICAgcmV0dXJuIG5zS0RFUmVnaXN0cnk6OkdldEZyb21UeXBl
KCBhTUlNRVR5cGUgKTsKKyAgICByZXR1cm4gbnNHTk9NRVJlZ2lzdHJ5OjpHZXRGcm9tVHlwZSgg
YU1JTUVUeXBlICk7Cit9Ci0tLSBtb3ppbGxhL3VyaWxvYWRlci9leHRoYW5kbGVyL3VuaXgvbnND
b21tb25SZWdpc3RyeS5oLnNhdgkyMDA5LTA5LTE0IDEwOjAwOjIxLjAwMDAwMDAwMCArMDIwMAor
KysgbW96aWxsYS91cmlsb2FkZXIvZXh0aGFuZGxlci91bml4L25zQ29tbW9uUmVnaXN0cnkuaAky
MDA5LTA5LTE0IDEwOjA0OjE1LjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDU2IEBACisvKiAq
KioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAy
LjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0
IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNl
bnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0
aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh
dAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNp
cywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt
cGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
cm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgor
ICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIEdOT01FIGhlbHBlciBhcHAgaW1wbGVtZW50YXRp
b24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlz
CisgKiBJQk0gQ29ycG9yYXRpb24uCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFs
IERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAzCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9w
ZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKiAgQnJp
YW4gUnluZXIgPGJyeW5lckBicmlhbnJ5bmVyLmNvbT4gIChPcmlnaW5hbCBBdXRob3IpCisgKgor
ICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1
bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiks
CisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwg
YXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRv
IGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRo
ZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBv
dGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUg
cHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5k
IG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91
IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkg
dXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkg
b25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJ
Q0VOU0UgQkxPQ0sgKioqKiogKi8KKworI2luY2x1ZGUgIm5zSVVSSS5oIgorI2luY2x1ZGUgIm5z
Q09NUHRyLmgiCisKK2NsYXNzIG5zTUlNRUluZm9CYXNlOworCitjbGFzcyBuc0NvbW1vblJlZ2lz
dHJ5Cit7CisgcHVibGljOgorICBzdGF0aWMgUFJCb29sIEhhbmRsZXJFeGlzdHMoY29uc3QgY2hh
ciAqYVByb3RvY29sU2NoZW1lKTsKKworICBzdGF0aWMgbnNyZXN1bHQgTG9hZFVSTChuc0lVUkkg
KmFVUkwpOworCisgIHN0YXRpYyB2b2lkIEdldEFwcERlc2NGb3JTY2hlbWUoY29uc3QgbnNBQ1N0
cmluZyYgYVNjaGVtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJp
bmcmIGFEZXNjKTsKKworICBzdGF0aWMgYWxyZWFkeV9BZGRSZWZlZDxuc01JTUVJbmZvQmFzZT4g
R2V0RnJvbUV4dGVuc2lvbihjb25zdCBuc0FDU3RyaW5nJiBhRmlsZUV4dCk7CisKKyAgc3RhdGlj
IGFscmVhZHlfQWRkUmVmZWQ8bnNNSU1FSW5mb0Jhc2U+IEdldEZyb21UeXBlKGNvbnN0IG5zQUNT
dHJpbmcmIGFNSU1FVHlwZSk7Cit9OwotLS0gbW96aWxsYS91cmlsb2FkZXIvZXh0aGFuZGxlci91
bml4L25zS0RFUmVnaXN0cnkuY3BwLnNhdgkyMDA5LTA5LTE0IDEwOjAwOjIxLjAwMDAwMDAwMCAr
MDIwMAorKysgbW96aWxsYS91cmlsb2FkZXIvZXh0aGFuZGxlci91bml4L25zS0RFUmVnaXN0cnku
Y3BwCTIwMDktMDktMTQgMTA6MDQ6MTUuMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsMTE5IEBA
CisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsg
Yy1iYXNpYy1vZmZzZXQ6IDIgLSotICovCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoq
KioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29u
dGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlz
IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkg
b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9y
Zy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0Yg
QU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICog
Zm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9u
cyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhl
IEdOT01FIGhlbHBlciBhcHAgaW1wbGVtZW50YXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2
ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBJQk0gQ29ycG9yYXRpb24uCisgKiBQ
b3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChD
KSAyMDAzCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogQ29udHJpYnV0b3Iocyk6CisgKiAgQnJpYW4gUnluZXIgPGJyeW5lckBicmlhbnJ5bmVy
LmNvbT4gIChPcmlnaW5hbCBBdXRob3IpCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRl
bnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhl
ciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUg
IkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJz
aW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92
aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICog
b2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24g
b2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBv
ciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNp
b24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3Vy
CisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFj
ZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQg
YnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92
aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZp
bGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3Ig
dGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworI2lu
Y2x1ZGUgIm5zS0RFUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJwcmxpbmsuaCIKKyNpbmNsdWRlICJw
cm1lbS5oIgorI2luY2x1ZGUgIm5zU3RyaW5nLmgiCisjaW5jbHVkZSAibnNJTG9jYWxGaWxlLmgi
CisjaW5jbHVkZSAibnNNSU1FSW5mb1VuaXguaCIKKyNpbmNsdWRlICJuc0F1dG9QdHIuaCIKKyNp
bmNsdWRlICJuc0tERVV0aWxzLmgiCisKKy8qIHN0YXRpYyAqLyBQUkJvb2wKK25zS0RFUmVnaXN0
cnk6OkhhbmRsZXJFeGlzdHMoY29uc3QgY2hhciAqYVByb3RvY29sU2NoZW1lKQoreworICAgIG5z
Q1N0cmluZ0FycmF5IGNvbW1hbmQ7CisgICAgY29tbWFuZC5BcHBlbmRDU3RyaW5nKCBOU19MSVRF
UkFMX0NTVFJJTkcoICJIQU5ETEVSRVhJU1RTIiApKTsKKyAgICBjb21tYW5kLkFwcGVuZENTdHJp
bmcoIG5zQ0F1dG9TdHJpbmcoIGFQcm90b2NvbFNjaGVtZSApKTsKKyAgICByZXR1cm4gbnNLREVV
dGlsczo6Y29tbWFuZCggY29tbWFuZCApOworfQorCisvKiBzdGF0aWMgKi8gbnNyZXN1bHQKK25z
S0RFUmVnaXN0cnk6OkxvYWRVUkwobnNJVVJJICphVVJMKQoreworICAgIG5zQ1N0cmluZ0FycmF5
IGNvbW1hbmQ7CisgICAgY29tbWFuZC5BcHBlbmRDU3RyaW5nKCBOU19MSVRFUkFMX0NTVFJJTkco
ICJPUEVOIiApKTsKKyAgICBuc0NTdHJpbmcgdXJsOworICAgIGFVUkwtPkdldFNwZWMoIHVybCAp
OworICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmluZyggdXJsICk7CisgICAgcmV0dXJuIG5zS0RFVXRp
bHM6OmNvbW1hbmQoIGNvbW1hbmQgKTsKK30KKworLyogc3RhdGljICovIHZvaWQKK25zS0RFUmVn
aXN0cnk6OkdldEFwcERlc2NGb3JTY2hlbWUoY29uc3QgbnNBQ1N0cmluZyYgYVNjaGVtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFEZXNjKQorewor
ICAgIG5zQ1N0cmluZ0FycmF5IGNvbW1hbmQ7CisgICAgY29tbWFuZC5BcHBlbmRDU3RyaW5nKCBO
U19MSVRFUkFMX0NTVFJJTkcoICJHRVRBUFBERVNDRk9SU0NIRU1FIiApKTsKKyAgICBjb21tYW5k
LkFwcGVuZENTdHJpbmcoIGFTY2hlbWUgKTsKKyAgICBuc0NTdHJpbmdBcnJheSBvdXRwdXQ7Cisg
ICAgaWYoIG5zS0RFVXRpbHM6OmNvbW1hbmQoIGNvbW1hbmQsICZvdXRwdXQgKSAmJiBvdXRwdXQu
Q291bnQoKSA9PSAxICkKKyAgICAgICAgQ29weVVURjh0b1VURjE2KCAqb3V0cHV0WyAwIF0sIGFE
ZXNjICk7Cit9CisKKworLyogc3RhdGljICovIGFscmVhZHlfQWRkUmVmZWQ8bnNNSU1FSW5mb0Jh
c2U+Cituc0tERVJlZ2lzdHJ5OjpHZXRGcm9tRXh0ZW5zaW9uKGNvbnN0IG5zQUNTdHJpbmcmIGFG
aWxlRXh0KQoreworICAgIE5TX0FTU0VSVElPTihhRmlsZUV4dFswXSAhPSAnLicsICJhRmlsZUV4
dCBzaG91bGRuJ3Qgc3RhcnQgd2l0aCBhIGRvdCIpOworICAgIG5zQ1N0cmluZ0FycmF5IGNvbW1h
bmQ7CisgICAgY29tbWFuZC5BcHBlbmRDU3RyaW5nKCBOU19MSVRFUkFMX0NTVFJJTkcoICJHRVRG
Uk9NRVhURU5TSU9OIiApKTsKKyAgICBjb21tYW5kLkFwcGVuZENTdHJpbmcoIGFGaWxlRXh0ICk7
CisgICAgcmV0dXJuIEdldEZyb21IZWxwZXIoIGNvbW1hbmQgKTsKK30KKworLyogc3RhdGljICov
IGFscmVhZHlfQWRkUmVmZWQ8bnNNSU1FSW5mb0Jhc2U+Cituc0tERVJlZ2lzdHJ5OjpHZXRGcm9t
VHlwZShjb25zdCBuc0FDU3RyaW5nJiBhTUlNRVR5cGUpCit7CisgICAgbnNDU3RyaW5nQXJyYXkg
Y29tbWFuZDsKKyAgICBjb21tYW5kLkFwcGVuZENTdHJpbmcoIE5TX0xJVEVSQUxfQ1NUUklORygg
IkdFVEZST01UWVBFIiApKTsKKyAgICBjb21tYW5kLkFwcGVuZENTdHJpbmcoIGFNSU1FVHlwZSAp
OworICAgIHJldHVybiBHZXRGcm9tSGVscGVyKCBjb21tYW5kICk7Cit9CisKKy8qIHN0YXRpYyAq
LyBhbHJlYWR5X0FkZFJlZmVkPG5zTUlNRUluZm9CYXNlPgorbnNLREVSZWdpc3RyeTo6R2V0RnJv
bUhlbHBlcihjb25zdCBuc0NTdHJpbmdBcnJheSYgY29tbWFuZCkKK3sKKyAgICBuc0NTdHJpbmdB
cnJheSBvdXRwdXQ7CisgICAgaWYoIG5zS0RFVXRpbHM6OmNvbW1hbmQoIGNvbW1hbmQsICZvdXRw
dXQgKSAmJiBvdXRwdXQuQ291bnQoKSA9PSAzICkKKyAgICAgICAgeworICAgICAgICBuc0NTdHJp
bmcgbWltZXR5cGUgPSAqb3V0cHV0WyAwIF07CisgICAgICAgIG5zUmVmUHRyPG5zTUlNRUluZm9V
bml4PiBtaW1lSW5mbyA9IG5ldyBuc01JTUVJbmZvVW5peCggbWltZXR5cGUgKTsKKyAgICAgICAg
TlNfRU5TVVJFX1RSVUUobWltZUluZm8sIG5zbnVsbCk7CisgICAgICAgIG5zQ1N0cmluZyBkZXNj
cmlwdGlvbiA9ICpvdXRwdXRbIDEgXTsKKyAgICAgICAgbWltZUluZm8tPlNldERlc2NyaXB0aW9u
KE5TX0NvbnZlcnRVVEY4dG9VVEYxNihkZXNjcmlwdGlvbikpOworICAgICAgICBuc0NTdHJpbmcg
aGFuZGxlckFwcE5hbWUgPSAqb3V0cHV0WyAyIF07CisgICAgICAgIG1pbWVJbmZvLT5TZXREZWZh
dWx0RGVzY3JpcHRpb24oTlNfQ29udmVydFVURjh0b1VURjE2KGhhbmRsZXJBcHBOYW1lKSk7Cisg
ICAgICAgIG1pbWVJbmZvLT5TZXRQcmVmZXJyZWRBY3Rpb24obnNJTUlNRUluZm86OnVzZVN5c3Rl
bURlZmF1bHQpOworICAgICAgICBuc01JTUVJbmZvQmFzZSogcmV0dmFsOworICAgICAgICBOU19B
RERSRUYoKHJldHZhbCA9IG1pbWVJbmZvKSk7CisgICAgICAgIHJldHVybiByZXR2YWw7CisgICAg
ICAgIH0KKyAgICByZXR1cm4gbnNudWxsOworfQotLS0gbW96aWxsYS91cmlsb2FkZXIvZXh0aGFu
ZGxlci91bml4L25zS0RFUmVnaXN0cnkuaC5zYXYJMjAwOS0wOS0xNCAxMDowMDoyMS4wMDAwMDAw
MDAgKzAyMDAKKysrIG1vemlsbGEvdXJpbG9hZGVyL2V4dGhhbmRsZXIvdW5peC9uc0tERVJlZ2lz
dHJ5LmgJMjAwOS0wOS0xNCAxMDowNDoxNS4wMDAwMDAwMDAgKzAyMDAKQEAgLTAsMCArMSw2MSBA
QAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEu
MS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUg
c3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRo
ZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlh
bmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
Y2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJl
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJ
UyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz
cyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh
Z2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNl
LgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBHTk9NRSBoZWxwZXIgYXBwIGltcGxl
bWVudGF0aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwg
Q29kZSBpcworICogSUJNIENvcnBvcmF0aW9uLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUg
SW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMworICogdGhlIEluaXRpYWwg
RGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgor
ICogIEJyaWFuIFJ5bmVyIDxicnluZXJAYnJpYW5yeW5lci5jb20+ICAoT3JpZ2luYWwgQXV0aG9y
KQorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJl
IHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAi
TEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRo
ZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ug
d2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1
bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8g
YWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRp
bmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UK
KyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwu
IElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGll
bnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMg
b2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioq
IEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKyNpbmNsdWRlICJuc0lVUkkuaCIKKyNpbmNs
dWRlICJuc0NPTVB0ci5oIgorCitjbGFzcyBuc01JTUVJbmZvQmFzZTsKK2NsYXNzIG5zQ0F1dG9T
dHJpbmc7CitjbGFzcyBuc0NTdHJpbmdBcnJheTsKKworY2xhc3MgbnNLREVSZWdpc3RyeQorewor
IHB1YmxpYzoKKyAgc3RhdGljIFBSQm9vbCBIYW5kbGVyRXhpc3RzKGNvbnN0IGNoYXIgKmFQcm90
b2NvbFNjaGVtZSk7CisKKyAgc3RhdGljIG5zcmVzdWx0IExvYWRVUkwobnNJVVJJICphVVJMKTsK
KworICBzdGF0aWMgdm9pZCBHZXRBcHBEZXNjRm9yU2NoZW1lKGNvbnN0IG5zQUNTdHJpbmcmIGFT
Y2hlbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhRGVz
Yyk7CisKKyAgc3RhdGljIGFscmVhZHlfQWRkUmVmZWQ8bnNNSU1FSW5mb0Jhc2U+IEdldEZyb21F
eHRlbnNpb24oY29uc3QgbnNBQ1N0cmluZyYgYUZpbGVFeHQpOworCisgIHN0YXRpYyBhbHJlYWR5
X0FkZFJlZmVkPG5zTUlNRUluZm9CYXNlPiBHZXRGcm9tVHlwZShjb25zdCBuc0FDU3RyaW5nJiBh
TUlNRVR5cGUpOworIHByaXZhdGU6CisgIHN0YXRpYyBhbHJlYWR5X0FkZFJlZmVkPG5zTUlNRUlu
Zm9CYXNlPiBHZXRGcm9tSGVscGVyKGNvbnN0IG5zQ1N0cmluZ0FycmF5JiBjb21tYW5kKTsKKwor
fTsKLS0tIG1vemlsbGEvdXJpbG9hZGVyL2V4dGhhbmRsZXIvdW5peC9uc01JTUVJbmZvVW5peC5j
cHAuc2F2CTIwMDktMDktMTQgMTA6MDI6NDIuMDAwMDAwMDAwICswMjAwCisrKyBtb3ppbGxhL3Vy
aWxvYWRlci9leHRoYW5kbGVyL3VuaXgvbnNNSU1FSW5mb1VuaXguY3BwCTIwMDktMDktMTQgMTA6
MDc6MTAuMDAwMDAwMDAwICswMjAwCkBAIC00NCwxOCArNDQsMTkgQEAKIAogCiAjaW5jbHVkZSAi
bnNNSU1FSW5mb1VuaXguaCIKLSNpbmNsdWRlICJuc0dOT01FUmVnaXN0cnkuaCIKKyNpbmNsdWRl
ICJuc0NvbW1vblJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAibnNJR25vbWVWRlNTZXJ2aWNlLmgiCiAj
aW5jbHVkZSAibnNBdXRvUHRyLmgiCiAjaWZkZWYgTU9aX0VOQUJMRV9EQlVTCiAjaW5jbHVkZSAi
bnNEQnVzSGFuZGxlckFwcC5oIgogI2VuZGlmCisjaW5jbHVkZSAibnNLREVVdGlscy5oIgogCiAK
IG5zcmVzdWx0CiBuc01JTUVJbmZvVW5peDo6TG9hZFVyaUludGVybmFsKG5zSVVSSSAqIGFVUkkp
CiB7IAotICBuc3Jlc3VsdCBydiA9IG5zR05PTUVSZWdpc3RyeTo6TG9hZFVSTChhVVJJKTsKKyAg
bnNyZXN1bHQgcnYgPSBuc0NvbW1vblJlZ2lzdHJ5OjpMb2FkVVJMKGFVUkkpOwogI2lmZGVmIE1P
Wl9QTEFURk9STV9ISUxET04KICAgaWYgKE5TX0ZBSUxFRChydikpewogICAgIEhpbGRvblVSSUFj
dGlvbiAqYWN0aW9uID0gaGlsZG9uX3VyaV9nZXRfZGVmYXVsdF9hY3Rpb24obVR5cGUuZ2V0KCks
IG5zbnVsbCk7CkBAIC03NSwxMSArNzYsMTEgQEAgTlNfSU1FVEhPRElNUAogbnNNSU1FSW5mb1Vu
aXg6OkdldEhhc0RlZmF1bHRIYW5kbGVyKFBSQm9vbCAqX3JldHZhbCkKIHsKICAgKl9yZXR2YWwg
PSBQUl9GQUxTRTsKLSAgbnNSZWZQdHI8bnNNSU1FSW5mb0Jhc2U+IG1pbWVJbmZvID0gbnNHTk9N
RVJlZ2lzdHJ5OjpHZXRGcm9tVHlwZShtVHlwZSk7CisgIG5zUmVmUHRyPG5zTUlNRUluZm9CYXNl
PiBtaW1lSW5mbyA9IG5zQ29tbW9uUmVnaXN0cnk6OkdldEZyb21UeXBlKG1UeXBlKTsKICAgaWYg
KCFtaW1lSW5mbykgewogICAgIG5zQ0F1dG9TdHJpbmcgZXh0OwogICAgIEdldFByaW1hcnlFeHRl
bnNpb24oZXh0KTsKLSAgICBtaW1lSW5mbyA9IG5zR05PTUVSZWdpc3RyeTo6R2V0RnJvbUV4dGVu
c2lvbihleHQpOworICAgIG1pbWVJbmZvID0gbnNDb21tb25SZWdpc3RyeTo6R2V0RnJvbUV4dGVu
c2lvbihleHQpOwogICB9CiAKICAgaWYgKG1pbWVJbmZvKQpAQCAtMTA2LDYgKzEwNywxOSBAQCBu
c01JTUVJbmZvVW5peDo6TGF1bmNoRGVmYXVsdFdpdGhGaWxlKG5zCiB7CiAgIG5zQ0F1dG9TdHJp
bmcgbmF0aXZlUGF0aDsKICAgYUZpbGUtPkdldE5hdGl2ZVBhdGgobmF0aXZlUGF0aCk7CisgIAor
ICBpZiggbnNLREVVdGlsczo6a2RlU3VwcG9ydCgpKQorICAgICAgeworICAgICAgbnNDU3RyaW5n
QXJyYXkgY29tbWFuZDsKKyAgICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmluZyggTlNfTElURVJBTF9D
U1RSSU5HKCAiT1BFTiIgKSk7CisgICAgICBjb21tYW5kLkFwcGVuZENTdHJpbmcoIG5hdGl2ZVBh
dGggKTsKKyAgICAgIGlmKCBuc0tERVV0aWxzOjpjb21tYW5kKCBjb21tYW5kICkpCisgICAgICAg
ICAgcmV0dXJuIE5TX09LOworICAgICAgaWYgKCFtRGVmYXVsdEFwcGxpY2F0aW9uKQorICAgICAg
ICByZXR1cm4gTlNfRVJST1JfRklMRV9OT1RfRk9VTkQ7CisKKyAgICAgIHJldHVybiBMYXVuY2hX
aXRoSVByb2Nlc3MobURlZmF1bHRBcHBsaWNhdGlvbiwgbmF0aXZlUGF0aCk7CisgICAgICB9CiAK
ICAgbnNDT01QdHI8bnNJR25vbWVWRlNTZXJ2aWNlPiB2ZnMgPSBkb19HZXRTZXJ2aWNlKE5TX0dO
T01FVkZTU0VSVklDRV9DT05UUkFDVElEKTsKIApAQCAtMTE2LDcgKzEzMCw3IEBAIG5zTUlNRUlu
Zm9Vbml4OjpMYXVuY2hEZWZhdWx0V2l0aEZpbGUobnMKIAogICAgIC8vIElmIHdlIGhhdmVuJ3Qg
Z290IGFuIGFwcCB3ZSB0cnkgdG8gZ2V0IGEgdmFsaWQgb25lIGJ5IHNlYXJjaGluZyBmb3IgdGhl
CiAgICAgLy8gZXh0ZW5zaW9uIG1hcHBlZCB0eXBlCi0gICAgbnNSZWZQdHI8bnNNSU1FSW5mb0Jh
c2U+IG1pbWVJbmZvID0gbnNHTk9NRVJlZ2lzdHJ5OjpHZXRGcm9tRXh0ZW5zaW9uKG5hdGl2ZVBh
dGgpOworICAgIG5zUmVmUHRyPG5zTUlNRUluZm9CYXNlPiBtaW1lSW5mbyA9IG5zQ29tbW9uUmVn
aXN0cnk6OkdldEZyb21FeHRlbnNpb24obmF0aXZlUGF0aCk7CiAgICAgaWYgKG1pbWVJbmZvKSB7
CiAgICAgICBuc0NBdXRvU3RyaW5nIHR5cGU7CiAgICAgICBtaW1lSW5mby0+R2V0VHlwZSh0eXBl
KTsKLS0tIG1vemlsbGEvdXJpbG9hZGVyL2V4dGhhbmRsZXIvdW5peC9uc09TSGVscGVyQXBwU2Vy
dmljZS5jcHAuc2F2CTIwMDktMDktMTQgMTA6MDI6NDIuMDAwMDAwMDAwICswMjAwCisrKyBtb3pp
bGxhL3VyaWxvYWRlci9leHRoYW5kbGVyL3VuaXgvbnNPU0hlbHBlckFwcFNlcnZpY2UuY3BwCTIw
MDktMDktMTQgMTA6MDQ6MTUuMDAwMDAwMDAwICswMjAwCkBAIC00NCw3ICs0NCw3IEBACiAjaW5j
bHVkZSAibnNPU0hlbHBlckFwcFNlcnZpY2UuaCIKICNpbmNsdWRlICJuc01JTUVJbmZvVW5peC5o
IgogI2lmZGVmIE1PWl9XSURHRVRfR1RLMgotI2luY2x1ZGUgIm5zR05PTUVSZWdpc3RyeS5oIgor
I2luY2x1ZGUgIm5zQ29tbW9uUmVnaXN0cnkuaCIKICNlbmRpZgogI2luY2x1ZGUgIm5zSVN1cHBv
cnRzLmgiCiAjaW5jbHVkZSAibnNTdHJpbmcuaCIKQEAgLTEyMTAsNyArMTIxMCw3IEBAIG5zcmVz
dWx0IG5zT1NIZWxwZXJBcHBTZXJ2aWNlOjpPU1Byb3RvY28KIAogI2lmZGVmIE1PWl9XSURHRVRf
R1RLMgogICAvLyBDaGVjayB0aGUgR0NvbmYgcmVnaXN0cnkgZm9yIGEgcHJvdG9jb2wgaGFuZGxl
cgotICAqYUhhbmRsZXJFeGlzdHMgPSBuc0dOT01FUmVnaXN0cnk6OkhhbmRsZXJFeGlzdHMoYVBy
b3RvY29sU2NoZW1lKTsKKyAgKmFIYW5kbGVyRXhpc3RzID0gbnNDb21tb25SZWdpc3RyeTo6SGFu
ZGxlckV4aXN0cyhhUHJvdG9jb2xTY2hlbWUpOwogI2VuZGlmCiAKICAgcmV0dXJuIE5TX09LOwpA
QCAtMTIxOSw3ICsxMjE5LDcgQEAgbnNyZXN1bHQgbnNPU0hlbHBlckFwcFNlcnZpY2U6Ok9TUHJv
dG9jbwogTlNfSU1FVEhPRElNUCBuc09TSGVscGVyQXBwU2VydmljZTo6R2V0QXBwbGljYXRpb25E
ZXNjcmlwdGlvbihjb25zdCBuc0FDU3RyaW5nJiBhU2NoZW1lLCBuc0FTdHJpbmcmIF9yZXR2YWwp
CiB7CiAjaWZkZWYgTU9aX1dJREdFVF9HVEsyCi0gIG5zR05PTUVSZWdpc3RyeTo6R2V0QXBwRGVz
Y0ZvclNjaGVtZShhU2NoZW1lLCBfcmV0dmFsKTsKKyAgbnNDb21tb25SZWdpc3RyeTo6R2V0QXBw
RGVzY0ZvclNjaGVtZShhU2NoZW1lLCBfcmV0dmFsKTsKICAgcmV0dXJuIF9yZXR2YWwuSXNFbXB0
eSgpID8gTlNfRVJST1JfTk9UX0FWQUlMQUJMRSA6IE5TX09LOwogI2Vsc2UKICAgcmV0dXJuIE5T
X0VSUk9SX05PVF9BVkFJTEFCTEU7CkBAIC0xMzE1LDcgKzEzMTUsNyBAQCBuc09TSGVscGVyQXBw
U2VydmljZTo6R2V0RnJvbUV4dGVuc2lvbihjCiAgICAgCiAjaWZkZWYgTU9aX1dJREdFVF9HVEsy
CiAgICAgTE9HKCgiTG9va2luZyBpbiBHTk9NRSByZWdpc3RyeVxuIikpOwotICAgIG5zTUlNRUlu
Zm9CYXNlICpnbm9tZUluZm8gPSBuc0dOT01FUmVnaXN0cnk6OkdldEZyb21FeHRlbnNpb24oYUZp
bGVFeHQpLmdldCgpOworICAgIG5zTUlNRUluZm9CYXNlICpnbm9tZUluZm8gPSBuc0NvbW1vblJl
Z2lzdHJ5OjpHZXRGcm9tRXh0ZW5zaW9uKGFGaWxlRXh0KS5nZXQoKTsKICAgICBpZiAoZ25vbWVJ
bmZvKSB7CiAgICAgICBMT0coKCJHb3QgTUlNRUluZm8gZnJvbSBHTk9NRSByZWdpc3RyeVxuIikp
OwogICAgICAgcmV0dXJuIGdub21lSW5mbzsKQEAgLTE0NDEsNyArMTQ0MSw3IEBAIG5zT1NIZWxw
ZXJBcHBTZXJ2aWNlOjpHZXRGcm9tVHlwZShjb25zdAogICAgIC8vIGdldCBiYWNrIGEgTUlNRUlu
Zm8gd2l0aG91dCBhbnkgZXh0ZW5zaW9ucyBzZXQuICBJbiB0aGF0IGNhc2Ugd2UnbGwgaGF2ZQog
ICAgIC8vIHRvIGxvb2sgaW4gb3VyIG1pbWUudHlwZXMgZmlsZXMgZm9yIHRoZSBleHRlbnNpb25z
LiAgICAKICAgICBMT0coKCJMb29raW5nIGluIEdOT01FIHJlZ2lzdHJ5XG4iKSk7Ci0gICAgZ25v
bWVJbmZvID0gbnNHTk9NRVJlZ2lzdHJ5OjpHZXRGcm9tVHlwZShhTUlNRVR5cGUpLmdldCgpOwor
ICAgIGdub21lSW5mbyA9IG5zQ29tbW9uUmVnaXN0cnk6OkdldEZyb21UeXBlKGFNSU1FVHlwZSku
Z2V0KCk7CiAgICAgaWYgKGdub21lSW5mbyAmJiBnbm9tZUluZm8tPkhhc0V4dGVuc2lvbnMoKSkg
ewogICAgICAgTE9HKCgiR290IE1JTUVJbmZvIGZyb20gR05PTUUgcmVnaXN0cnksIGFuZCBpdCBo
YXMgZXh0ZW5zaW9ucyBzZXRcbiIpKTsKICAgICAgIHJldHVybiBnbm9tZUluZm87Ci0tLSBtb3pp
bGxhL3dpZGdldC9zcmMvZ3RrMi9NYWtlZmlsZS5pbi5zYXYJMjAwOS0wOS0xNCAxMDowMDoyMS4w
MDAwMDAwMDAgKzAyMDAKKysrIG1vemlsbGEvd2lkZ2V0L3NyYy9ndGsyL01ha2VmaWxlLmluCTIw
MDktMDktMTQgMTA6MDQ6MTUuMDAwMDAwMDAwICswMjAwCkBAIC0xODIsNiArMTgyLDggQEAgSU5D
TFVERVMJKz0gXAogCQktSSQodG9wc3JjZGlyKS9vdGhlci1saWNlbnNlcy9hdGstMS4wIFwKIAkJ
JChOVUxMKQogCitMT0NBTF9JTkNMVURFUyArPSAtSSQodG9wc3JjZGlyKS90b29sa2l0L3hyZQor
CiB0ZXN0X2NvbnRhaW5lcjogbW96ZHJhd2luZ2FyZWEubyBtb3pjb250YWluZXIubyB0ZXN0X2Nv
bnRhaW5lci5jCiAJJChDQykgJChNT1pfR1RLMl9DRkxBR1MpIC1vIHRlc3RfY29udGFpbmVyIHRl
c3RfY29udGFpbmVyLmMgXAogCQltb3pkcmF3aW5nYXJlYS5vIG1vemNvbnRhaW5lci5vIFwKLS0t
IG1vemlsbGEvd2lkZ2V0L3NyYy9ndGsyL25zRmlsZVBpY2tlci5jcHAuc2F2CTIwMDktMDktMTQg
MTA6MDA6MjEuMDAwMDAwMDAwICswMjAwCisrKyBtb3ppbGxhL3dpZGdldC9zcmMvZ3RrMi9uc0Zp
bGVQaWNrZXIuY3BwCTIwMDktMDktMTQgMTA6MDQ6MTUuMDAwMDAwMDAwICswMjAwCkBAIC00MCw2
ICs0MCw3IEBACiAjaW5jbHVkZSA8Z3RrL2d0a3N0b2NrLmg+CiAjaW5jbHVkZSA8Z3RrL2d0a21l
c3NhZ2VkaWFsb2cuaD4KICNpbmNsdWRlIDxndGsvZ3RraW1hZ2UuaD4KKyNpbmNsdWRlIDxnZGsv
Z2RreC5oPgogCiAjaW5jbHVkZSAibnNJRmlsZVVSTC5oIgogI2luY2x1ZGUgIm5zSVVSSS5oIgpA
QCAtNTksNiArNjAsNyBAQAogCiAjaW5jbHVkZSAibnNGaWxlUGlja2VyLmgiCiAjaW5jbHVkZSAi
bnNBY2Nlc3NpYmlsaXR5SGVscGVyLmgiCisjaW5jbHVkZSAibnNLREVVdGlscy5oIgogCiAjZGVm
aW5lIERFQ0xfRlVOQ19QVFIoZnVuYykgc3RhdGljIF8jI2Z1bmMjI19mbiBfIyNmdW5jCiAjZGVm
aW5lIEdUS19GSUxFX0NIT09TRVIod2lkZ2V0KSAoKEd0a0ZpbGVDaG9vc2VyKikgd2lkZ2V0KQpA
QCAtOTUsNiArOTcsNyBAQCB0eXBlZGVmIEd0a1dpZGdldCogKCpfZ3RrX2ZpbGVfY2hvb3Nlcl9k
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
dGtGaWxlQ2hvb3NlckFjdGlvbiBhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqZmlyc3RfYnV0dG9uX3RleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
Li4pOwordHlwZWRlZiB2b2lkICgqX2d0a19kaWFsb2dfc2V0X2FsdGVybmF0aXZlX2J1dHRvbl9v
cmRlcl9mbikoR3RrRGlhbG9nICpkaWFsb2csIGdpbnQgZmlyc3RfcmVzcG9uc2VfaWQsIC4uLik7
CiB0eXBlZGVmIHZvaWQgKCpfZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfc2VsZWN0X211bHRpcGxlX2Zu
KShHdGtGaWxlQ2hvb3NlciogY2hvb3NlciwgZ2Jvb2xlYW4gdHJ1dGgpOwogdHlwZWRlZiB2b2lk
ICgqX2d0a19maWxlX2Nob29zZXJfc2V0X2RvX292ZXJ3cml0ZV9jb25maXJtYXRpb25fZm4pKEd0
a0ZpbGVDaG9vc2VyKiBjaG9vc2VyLCBnYm9vbGVhbiBkb19jb25maXJtKTsKIHR5cGVkZWYgdm9p
ZCAoKl9ndGtfZmlsZV9jaG9vc2VyX3NldF9jdXJyZW50X25hbWVfZm4pKEd0a0ZpbGVDaG9vc2Vy
KiBjaG9vc2VyLCBjb25zdCBnY2hhciogbmFtZSk7CkBAIC0xMTksNiArMTIyLDcgQEAgREVDTF9G
VU5DX1BUUihndGtfZmlsZV9jaG9vc2VyX2dldF9maWxlbgogREVDTF9GVU5DX1BUUihndGtfZmls
ZV9jaG9vc2VyX2dldF91cmkpOwogREVDTF9GVU5DX1BUUihndGtfZmlsZV9jaG9vc2VyX2dldF91
cmlzKTsKIERFQ0xfRlVOQ19QVFIoZ3RrX2ZpbGVfY2hvb3Nlcl9kaWFsb2dfbmV3KTsKK0RFQ0xf
RlVOQ19QVFIoZ3RrX2RpYWxvZ19zZXRfYWx0ZXJuYXRpdmVfYnV0dG9uX29yZGVyKTsKIERFQ0xf
RlVOQ19QVFIoZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfc2VsZWN0X211bHRpcGxlKTsKIERFQ0xfRlVO
Q19QVFIoZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZG9fb3ZlcndyaXRlX2NvbmZpcm1hdGlvbik7CiBE
RUNMX0ZVTkNfUFRSKGd0a19maWxlX2Nob29zZXJfc2V0X2N1cnJlbnRfbmFtZSk7CkBAIC0yMTQs
NiArMjE4LDcgQEAgbnNGaWxlUGlja2VyOjpMb2FkU3ltYm9sc0dUSzI0KCkKICAgR0VUX0xJQkdU
S19GVU5DKGd0a19maWxlX2Nob29zZXJfZ2V0X3VyaSk7CiAgIEdFVF9MSUJHVEtfRlVOQyhndGtf
ZmlsZV9jaG9vc2VyX2dldF91cmlzKTsKICAgR0VUX0xJQkdUS19GVU5DKGd0a19maWxlX2Nob29z
ZXJfZGlhbG9nX25ldyk7CisgIEdFVF9MSUJHVEtfRlVOQyhndGtfZGlhbG9nX3NldF9hbHRlcm5h
dGl2ZV9idXR0b25fb3JkZXIpOwogICBHRVRfTElCR1RLX0ZVTkMoZ3RrX2ZpbGVfY2hvb3Nlcl9z
ZXRfc2VsZWN0X211bHRpcGxlKTsKICAgR0VUX0xJQkdUS19GVU5DX09QVChndGtfZmlsZV9jaG9v
c2VyX3NldF9kb19vdmVyd3JpdGVfY29uZmlybWF0aW9uKTsKICAgR0VUX0xJQkdUS19GVU5DKGd0
a19maWxlX2Nob29zZXJfc2V0X2N1cnJlbnRfbmFtZSk7CkBAIC00NDIsNyArNDQ3LDggQEAgbnNG
aWxlUGlja2VyOjpBcHBlbmRGaWx0ZXIoY29uc3QgbnNBU3RyaQogewogICBpZiAoYUZpbHRlci5F
cXVhbHNMaXRlcmFsKCIuLmFwcHMiKSkgewogICAgIC8vIE5vIHBsYXRmb3JtIHNwZWNpZmljIHRo
aW5nIHdlIGNhbiBkbyBoZXJlLCByZWFsbHkuLi4uCi0gICAgcmV0dXJuIE5TX09LOworICAgIGlm
KCBtTW9kZSAhPSBtb2RlT3BlbiB8fCAhbnNLREVVdGlsczo6a2RlU3VwcG9ydCgpKQorICAgICAg
ICByZXR1cm4gTlNfT0s7CiAgIH0KIAogICBuc0NBdXRvU3RyaW5nIGZpbHRlciwgbmFtZTsKQEAg
LTU5MCw2ICs1OTYsOSBAQCBjb25maXJtX292ZXJ3cml0ZV9maWxlIChHdGtXaWRnZXQgKnBhcmVu
CiBOU19JTUVUSE9ESU1QCiBuc0ZpbGVQaWNrZXI6OlNob3coUFJJbnQxNiAqYVJldHVybikKIHsK
KyAgaWYoIG5zS0RFVXRpbHM6OmtkZVN1cHBvcnQoKSkKKyAgICAgIHJldHVybiBrZGVGaWxlRGlh
bG9nKCBhUmV0dXJuICk7CisKICAgTlNfRU5TVVJFX0FSR19QT0lOVEVSKGFSZXR1cm4pOwogCiAg
IG5zWFBJRExDU3RyaW5nIHRpdGxlOwpAQCAtNjA1LDYgKzYxNCwxMiBAQCBuc0ZpbGVQaWNrZXI6
OlNob3coUFJJbnQxNiAqYVJldHVybikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR1RLX1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BPTlNFX0NBTkNFTCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWNjZXB0X2J1dHRvbiwgR1RLX1JFU1BPTlNFX0FDQ0VQVCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgX2d0a19kaWFs
b2dfc2V0X2FsdGVybmF0aXZlX2J1dHRvbl9vcmRlcihHVEtfRElBTE9HKGZpbGVfY2hvb3Nlciks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfUkVTUE9OU0Vf
QUNDRVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1JF
U1BPTlNFX0NBTkNFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC0xKTsKKwogICBpZiAobUFsbG93VVJMcykgewogICAgIF9ndGtfZmlsZV9jaG9vc2VyX3NldF9s
b2NhbF9vbmx5KEdUS19GSUxFX0NIT09TRVIoZmlsZV9jaG9vc2VyKSwgRkFMU0UpOwogICB9CkBA
IC03MjcsMyArNzQyLDIyMSBAQCBuc0ZpbGVQaWNrZXI6OlNob3coUFJJbnQxNiAqYVJldHVybikK
IAogICByZXR1cm4gTlNfT0s7CiB9CisKK25zQ1N0cmluZyBuc0ZpbGVQaWNrZXI6OmtkZU1ha2VG
aWx0ZXIoIGludCBpbmRleCApCisgICAgeworICAgIG5zQ1N0cmluZyBidWYgPSAqbUZpbHRlcnNb
IGluZGV4IF07CisgICAgZm9yKCBQUlVpbnQzMiBpID0gMDsKKyAgICAgICAgIGkgPCBidWYuTGVu
Z3RoKCk7CisgICAgICAgICArK2kgKQorICAgICAgICBpZiggYnVmWyBpIF0gPT0gJzsnICkgLy8g
S0RFIHNlcGFyYXRlcyBqdXN0IHVzaW5nIHNwYWNlcworICAgICAgICAgICAgYnVmLlNldENoYXJB
dCggJyAnLCBpICk7CisgICAgaWYgKCFtRmlsdGVyTmFtZXNbaW5kZXhdLT5Jc0VtcHR5KCkpCisg
ICAgICAgIHsKKyAgICAgICAgYnVmICs9ICJ8IjsKKyAgICAgICAgYnVmICs9IG1GaWx0ZXJOYW1l
c1tpbmRleF0tPmdldCgpOworICAgICAgICB9CisgICAgcmV0dXJuIGJ1ZjsKKyAgICB9CisKK3N0
YXRpYyBQUkludDMyIHdpbmRvd1RvWGlkKCBuc0lXaWRnZXQqIHdpZGdldCApCisgICAgeworICAg
IEd0a1dpbmRvdyAqcGFyZW50X3dpZGdldCA9IGdldF9ndGtfd2luZG93X2Zvcl9uc2l3aWRnZXQo
IHdpZGdldCApOworICAgIEdka1dpbmRvdyogZ2RrX3dpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dp
bmRvdyggZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoIEdUS19XSURHRVQoIHBhcmVudF93aWRnZXQg
KSkpOworICAgIHJldHVybiBHREtfV0lORE9XX1hJRCggZ2RrX3dpbmRvdyApOworICAgIH0KKwor
TlNfSU1FVEhPRElNUCBuc0ZpbGVQaWNrZXI6OmtkZUZpbGVEaWFsb2coUFJJbnQxNiAqYVJldHVy
bikKKyAgICB7CisgICAgTlNfRU5TVVJFX0FSR19QT0lOVEVSKGFSZXR1cm4pOworCisgICAgaWYo
IG1Nb2RlID09IG1vZGVPcGVuICYmIG1GaWx0ZXJzLkNvdW50KCkgPT0gMSAmJiBtRmlsdGVyc1sg
MCBdLT5FcXVhbHNMaXRlcmFsKCAiLi5hcHBzIiApKQorICAgICAgICByZXR1cm4ga2RlQXBwc0Rp
YWxvZyggYVJldHVybiApOworCisgICAgbnNYUElETENTdHJpbmcgdGl0bGU7CisgICAgdGl0bGUu
QWRvcHQoVG9OZXdVVEY4U3RyaW5nKG1UaXRsZSkpOworCisgICAgY29uc3QgY2hhciogYXJnID0g
TlVMTDsKKyAgICBpZiggbUFsbG93VVJMcyApCisgICAgICAgIHsKKyAgICAgICAgc3dpdGNoKCBt
TW9kZSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIG5zSUZpbGVQaWNrZXI6Om1v
ZGVPcGVuOgorICAgICAgICAgICAgY2FzZSBuc0lGaWxlUGlja2VyOjptb2RlT3Blbk11bHRpcGxl
OgorICAgICAgICAgICAgICAgIGFyZyA9ICJHRVRPUEVOVVJMIjsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgbnNJRmlsZVBpY2tlcjo6bW9kZVNhdmU6CisgICAgICAg
ICAgICAgICAgYXJnID0gIkdFVFNBVkVVUkwiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBuc0lGaWxlUGlja2VyOjptb2RlR2V0Rm9sZGVyOgorICAgICAgICAgICAg
ICAgIGFyZyA9ICJHRVRESVJFQ1RPUllVUkwiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIHN3aXRj
aCggbU1vZGUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBuc0lGaWxlUGlja2Vy
Ojptb2RlT3BlbjoKKyAgICAgICAgICAgIGNhc2UgbnNJRmlsZVBpY2tlcjo6bW9kZU9wZW5NdWx0
aXBsZToKKyAgICAgICAgICAgICAgICBhcmcgPSAiR0VUT1BFTkZJTEVOQU1FIjsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgbnNJRmlsZVBpY2tlcjo6bW9kZVNhdmU6
CisgICAgICAgICAgICAgICAgYXJnID0gIkdFVFNBVkVGSUxFTkFNRSI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIG5zSUZpbGVQaWNrZXI6Om1vZGVHZXRGb2xkZXI6
CisgICAgICAgICAgICAgICAgYXJnID0gIkdFVERJUkVDVE9SWUZJTEVOQU1FIjsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgIG5zQ0F1dG9TdHJp
bmcgZGlyZWN0b3J5OworICBpZiAobURpc3BsYXlEaXJlY3RvcnkpIHsKKyAgICBtRGlzcGxheURp
cmVjdG9yeS0+R2V0TmF0aXZlUGF0aChkaXJlY3RvcnkpOworICB9IGVsc2UgaWYgKG1QcmV2RGlz
cGxheURpcmVjdG9yeSkgeworICAgIG1QcmV2RGlzcGxheURpcmVjdG9yeS0+R2V0TmF0aXZlUGF0
aChkaXJlY3RvcnkpOworICB9CisKKyAgICBuc0NBdXRvU3RyaW5nIHN0YXJ0ZGlyOworICBpZiAo
IWRpcmVjdG9yeS5Jc0VtcHR5KCkpIHsKKyAgICBzdGFydGRpciA9IGRpcmVjdG9yeTsKKyAgfQor
ICBpZiAobU1vZGUgPT0gbnNJRmlsZVBpY2tlcjo6bW9kZVNhdmUpIHsKKyAgICBpZiggIXN0YXJ0
ZGlyLklzRW1wdHkoKSkKKyAgICAgIHsKKyAgICAgIHN0YXJ0ZGlyICs9ICIvIjsKKyAgICAgIHN0
YXJ0ZGlyICs9IFRvTmV3VVRGOFN0cmluZyhtRGVmYXVsdCk7CisgICAgICB9CisgICAgZWxzZQor
ICAgICAgc3RhcnRkaXIgPSBUb05ld1VURjhTdHJpbmcobURlZmF1bHQpOworICB9CisgIGlmKCBz
dGFydGRpci5Jc0VtcHR5KCkpCisgICAgICBzdGFydGRpciA9ICIuIjsKKworICAgIG5zQ0F1dG9T
dHJpbmcgZmlsdGVyczsKKyAgICBQUkludDMyIGNvdW50ID0gbUZpbHRlcnMuQ291bnQoKTsKKyAg
ICBpZiggY291bnQgPT0gMCApIC8vanVzdCBpbiBjYXNlCisgICAgICAgIGZpbHRlcnMgPSAiKiI7
CisgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIGZpbHRlcnMgPSBrZGVNYWtlRmlsdGVyKCAw
ICk7CisgICAgICAgIGZvciAoUFJJbnQzMiBpID0gMTsgaSA8IGNvdW50OyArK2kpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICBmaWx0ZXJzICs9ICJcbiI7CisgICAgICAgICAgICBmaWx0ZXJz
ICs9IGtkZU1ha2VGaWx0ZXIoIGkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
bnNDU3RyaW5nQXJyYXkgY29tbWFuZDsKKyAgICBjb21tYW5kLkFwcGVuZENTdHJpbmcoIG5zQ0F1
dG9TdHJpbmcoIGFyZyApKTsKKyAgICBjb21tYW5kLkFwcGVuZENTdHJpbmcoIHN0YXJ0ZGlyICk7
CisgICAgaWYoIG1Nb2RlICE9IG5zSUZpbGVQaWNrZXI6Om1vZGVHZXRGb2xkZXIgKQorICAgICAg
ICB7CisgICAgICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmluZyggZmlsdGVycyApOworICAgICAgICBu
c0NBdXRvU3RyaW5nIHNlbGVjdGVkOworICAgICAgICBzZWxlY3RlZC5BcHBlbmRJbnQoIG1TZWxl
Y3RlZFR5cGUgKTsKKyAgICAgICAgY29tbWFuZC5BcHBlbmRDU3RyaW5nKCBzZWxlY3RlZCApOwor
ICAgICAgICB9CisgICAgY29tbWFuZC5BcHBlbmRDU3RyaW5nKCB0aXRsZSApOworICAgIGlmKCBt
TW9kZSA9PSBuc0lGaWxlUGlja2VyOjptb2RlT3Blbk11bHRpcGxlICkKKyAgICAgICAgY29tbWFu
ZC5BcHBlbmRDU3RyaW5nKCBOU19MSVRFUkFMX0NTVFJJTkcoICJNVUxUSVBMRSIgKSk7CisgICAg
aWYoIFBSSW50MzIgeGlkID0gd2luZG93VG9YaWQoIG1QYXJlbnRXaWRnZXQgKSkKKyAgICAgICAg
eworICAgICAgICBjb21tYW5kLkFwcGVuZENTdHJpbmcoIE5TX0xJVEVSQUxfQ1NUUklORyggIlBB
UkVOVCIgKSk7CisgICAgICAgIG5zQ0F1dG9TdHJpbmcgcGFyZW50OworICAgICAgICBwYXJlbnQu
QXBwZW5kSW50KCB4aWQgKTsKKyAgICAgICAgY29tbWFuZC5BcHBlbmRDU3RyaW5nKCBwYXJlbnQg
KTsKKyAgICAgICAgfQorCisgICAgbnNDU3RyaW5nQXJyYXkgb3V0cHV0OworICAgIGlmKCBuc0tE
RVV0aWxzOjpjb21tYW5kQmxvY2tVaSggY29tbWFuZCwgZ2V0X2d0a193aW5kb3dfZm9yX25zaXdp
ZGdldCggbVBhcmVudFdpZGdldCApLCAmb3V0cHV0ICkpCisgICAgICAgIHsKKyAgICAgICAgKmFS
ZXR1cm4gPSBuc0lGaWxlUGlja2VyOjpyZXR1cm5PSzsKKyAgICAgICAgbUZpbGVzLkNsZWFyKCk7
CisgICAgICAgIGlmKCBtTW9kZSAhPSBuc0lGaWxlUGlja2VyOjptb2RlR2V0Rm9sZGVyICkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgIG1TZWxlY3RlZFR5cGUgPSBhdG9pKCBvdXRwdXRbIDAg
XS0+Z2V0KCkpOworICAgICAgICAgICAgb3V0cHV0LlJlbW92ZUNTdHJpbmdBdCggMCApOworICAg
ICAgICAgICAgfQorICAgICAgICBpZiAobU1vZGUgPT0gbnNJRmlsZVBpY2tlcjo6bW9kZU9wZW5N
dWx0aXBsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIG1GaWxlVVJMLlRydW5jYXRlKCk7
CisgICAgICAgICAgICBQUlVpbnQzMiBjb3VudCA9IG91dHB1dC5Db3VudCgpOworICAgICAgICAg
ICAgZm9yKCBQUlVpbnQzMiBpID0gMDsKKyAgICAgICAgICAgICAgICAgaSA8IGNvdW50OworICAg
ICAgICAgICAgICAgICArK2kgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBu
c0NPTVB0cjxuc0lMb2NhbEZpbGU+IGxvY2FsZmlsZTsKKyAgICAgICAgICAgICAgICBuc3Jlc3Vs
dCBydiA9IE5TX05ld05hdGl2ZUxvY2FsRmlsZSggKm91dHB1dFsgaSBdLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUl9GQUxTRSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMobG9jYWxmaWxlKSk7CisgICAgICAgICAg
ICAgICAgaWYgKE5TX1NVQ0NFRURFRChydikpCisgICAgICAgICAgICAgICAgICAgIG1GaWxlcy5B
cHBlbmRPYmplY3QobG9jYWxmaWxlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIG1GaWxlVVJMID0gb3V0
cHV0LkNvdW50KCkgPiAwID8gKm91dHB1dFsgMCBdIDogbnNDU3RyaW5nKCk7CisgICAgICAgICAg
ICB9CisgIC8vIFJlbWVtYmVyIGxhc3QgdXNlZCBkaXJlY3RvcnkuCisgIG5zQ09NUHRyPG5zSUxv
Y2FsRmlsZT4gZmlsZTsKKyAgR2V0RmlsZShnZXR0ZXJfQWRkUmVmcyhmaWxlKSk7CisgIGlmIChm
aWxlKSB7CisgICAgbnNDT01QdHI8bnNJRmlsZT4gZGlyOworICAgIGZpbGUtPkdldFBhcmVudChn
ZXR0ZXJfQWRkUmVmcyhkaXIpKTsKKyAgICBuc0NPTVB0cjxuc0lMb2NhbEZpbGU+IGxvY2FsRGly
KGRvX1F1ZXJ5SW50ZXJmYWNlKGRpcikpOworICAgIGlmIChsb2NhbERpcikgeworICAgICAgbG9j
YWxEaXIuc3dhcChtUHJldkRpc3BsYXlEaXJlY3RvcnkpOworICAgIH0KKyAgfQorICAgICAgICBp
ZiAobU1vZGUgPT0gbnNJRmlsZVBpY2tlcjo6bW9kZVNhdmUpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICBuc0NPTVB0cjxuc0lMb2NhbEZpbGU+IGZpbGU7CisgICAgICAgICAgICBHZXRGaWxl
KGdldHRlcl9BZGRSZWZzKGZpbGUpKTsKKyAgICAgICAgICAgIGlmIChmaWxlKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBQUkJvb2wgZXhpc3RzID0gUFJfRkFMU0U7CisgICAg
ICAgICAgICAgICAgZmlsZS0+RXhpc3RzKCZleGlzdHMpOworICAgICAgICAgICAgICAgIGlmIChl
eGlzdHMpIC8vIFRPRE8gZG8gb3ZlcndyaXRlIGNoZWNrIGluIHRoZSBoZWxwZXIgYXBwCisgICAg
ICAgICAgICAgICAgICAgICphUmV0dXJuID0gbnNJRmlsZVBpY2tlcjo6cmV0dXJuUmVwbGFjZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgKmFSZXR1cm4gPSBuc0lGaWxlUGlja2VyOjpyZXR1cm5DYW5jZWw7
CisgICAgICAgIH0KKyAgICByZXR1cm4gTlNfT0s7CisgICAgfQorCisKK05TX0lNRVRIT0RJTVAg
bnNGaWxlUGlja2VyOjprZGVBcHBzRGlhbG9nKFBSSW50MTYgKmFSZXR1cm4pCisgICAgeworICAg
IE5TX0VOU1VSRV9BUkdfUE9JTlRFUihhUmV0dXJuKTsKKworICAgIG5zWFBJRExDU3RyaW5nIHRp
dGxlOworICAgIHRpdGxlLkFkb3B0KFRvTmV3VVRGOFN0cmluZyhtVGl0bGUpKTsKKworICAgIG5z
Q1N0cmluZ0FycmF5IGNvbW1hbmQ7CisgICAgY29tbWFuZC5BcHBlbmRDU3RyaW5nKCBOU19MSVRF
UkFMX0NTVFJJTkcoICJBUFBTRElBTE9HIiApKTsKKyAgICBjb21tYW5kLkFwcGVuZENTdHJpbmco
IHRpdGxlICk7CisgICAgaWYoIFBSSW50MzIgeGlkID0gd2luZG93VG9YaWQoIG1QYXJlbnRXaWRn
ZXQgKSkKKyAgICAgICAgeworICAgICAgICBjb21tYW5kLkFwcGVuZENTdHJpbmcoIE5TX0xJVEVS
QUxfQ1NUUklORyggIlBBUkVOVCIgKSk7CisgICAgICAgIG5zQ0F1dG9TdHJpbmcgcGFyZW50Owor
ICAgICAgICBwYXJlbnQuQXBwZW5kSW50KCB4aWQgKTsKKyAgICAgICAgY29tbWFuZC5BcHBlbmRD
U3RyaW5nKCBwYXJlbnQgKTsKKyAgICAgICAgfQorCisgICAgbnNDU3RyaW5nQXJyYXkgb3V0cHV0
OworICAgIGlmKCBuc0tERVV0aWxzOjpjb21tYW5kQmxvY2tVaSggY29tbWFuZCwgZ2V0X2d0a193
aW5kb3dfZm9yX25zaXdpZGdldCggbVBhcmVudFdpZGdldCApLCAmb3V0cHV0ICkpCisgICAgICAg
IHsKKyAgICAgICAgKmFSZXR1cm4gPSBuc0lGaWxlUGlja2VyOjpyZXR1cm5PSzsKKyAgICAgICAg
bUZpbGVVUkwgPSBvdXRwdXQuQ291bnQoKSA+IDAgPyAqb3V0cHV0WyAwIF0gOiBuc0NTdHJpbmco
KTsKKyAgICAgICAgfQorICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAqYVJldHVybiA9IG5z
SUZpbGVQaWNrZXI6OnJldHVybkNhbmNlbDsKKyAgICAgICAgfQorICAgIHJldHVybiBOU19PSzsK
KyAgICB9Ci0tLSBtb3ppbGxhL3dpZGdldC9zcmMvZ3RrMi9uc0ZpbGVQaWNrZXIuaC5zYXYJMjAw
OS0wOS0xNCAxMDowMDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrIG1vemlsbGEvd2lkZ2V0L3NyYy9n
dGsyL25zRmlsZVBpY2tlci5oCTIwMDktMDktMTQgMTA6MDQ6MTUuMDAwMDAwMDAwICswMjAwCkBA
IC05OCw2ICs5OCwxMiBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICBzdGF0aWMgbnNJTG9jYWxG
aWxlICptUHJldkRpc3BsYXlEaXJlY3Rvcnk7CiAgIHN0YXRpYyBQUkxpYnJhcnkgKm1HVEsyNDsK
KyAgCisgIGJvb2wga2RlUnVubmluZygpOworICBib29sIGdldEtkZVJ1bm5pbmcoKTsKKyAgTlNf
SU1FVEhPRElNUCBrZGVGaWxlRGlhbG9nKFBSSW50MTYgKmFSZXR1cm4pOworICBOU19JTUVUSE9E
SU1QIGtkZUFwcHNEaWFsb2coUFJJbnQxNiAqYVJldHVybik7CisgIG5zQ1N0cmluZyBrZGVNYWtl
RmlsdGVyKCBpbnQgaW5kZXggKTsKIH07CiAKICNlbmRpZgotLS0gbW96aWxsYS93aWRnZXQvc3Jj
L2d0azIvbnNQcmludERpYWxvZ0dUSy5jcHAuc2F2CTIwMDktMDktMTQgMTA6MDA6MjEuMDAwMDAw
MDAwICswMjAwCisrKyBtb3ppbGxhL3dpZGdldC9zcmMvZ3RrMi9uc1ByaW50RGlhbG9nR1RLLmNw
cAkyMDA5LTA5LTE0IDEwOjA0OjE1LjAwMDAwMDAwMCArMDIwMApAQCAtMTQ1LDYgKzE0NSwxMCBA
QCBTaG93Q3VzdG9tRGlhbG9nKEd0a0NvbWJvQm94ICpjaGFuZ2VkX2JvCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfT0ss
IEdUS19SRVNQT05TRV9BQ0NFUFQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgZ3RrX2RpYWxvZ19zZXRfZGVmYXVsdF9y
ZXNwb25zZShHVEtfRElBTE9HKHByb21wdF9kaWFsb2cpLCBHVEtfUkVTUE9OU0VfQUNDRVBUKTsK
KyAgZ3RrX2RpYWxvZ19zZXRfYWx0ZXJuYXRpdmVfYnV0dG9uX29yZGVyKEdUS19ESUFMT0cocHJv
bXB0X2RpYWxvZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
VEtfUkVTUE9OU0VfQUNDRVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR1RLX1JFU1BPTlNFX1JFSkVDVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC0xKTsKIAogICBwcmludEJ1bmRsZS0+R2V0U3RyaW5nRnJvbU5hbWUoTlNf
TElURVJBTF9TVFJJTkcoImN1c3RvbUhlYWRlckZvb3RlclByb21wdCIpLmdldCgpLCBnZXR0ZXJf
Q29waWVzKGludGxTdHJpbmcpKTsKICAgR3RrV2lkZ2V0KiBjdXN0b21fbGFiZWwgPSBndGtfbGFi
ZWxfbmV3KE5TX0NvbnZlcnRVVEYxNnRvVVRGOChpbnRsU3RyaW5nKS5nZXQoKSk7Ci0tLSBtb3pp
bGxhL3hwY29tL2lvL01ha2VmaWxlLmluLnNhdgkyMDA5LTA5LTE0IDEwOjAwOjIxLjAwMDAwMDAw
MCArMDIwMAorKysgbW96aWxsYS94cGNvbS9pby9NYWtlZmlsZS5pbgkyMDA5LTA5LTE0IDEwOjA0
OjE1LjAwMDAwMDAwMCArMDIwMApAQCAtMTk5LDMgKzE5OSw0IEBAIGVuZGlmCiBlbmRpZgogCiBM
T0NBTF9JTkNMVURFUwk9IC1JLi4KK0xPQ0FMX0lOQ0xVREVTICs9IC1JJCh0b3BzcmNkaXIpL3Rv
b2xraXQveHJlCi0tLSBtb3ppbGxhL3hwY29tL2lvL25zTG9jYWxGaWxlVW5peC5jcHAuc2F2CTIw
MDktMDktMTQgMTA6MDA6MjEuMDAwMDAwMDAwICswMjAwCisrKyBtb3ppbGxhL3hwY29tL2lvL25z
TG9jYWxGaWxlVW5peC5jcHAJMjAwOS0wOS0xNCAxMDowNDoxNS4wMDAwMDAwMDAgKzAyMDAKQEAg
LTg0LDYgKzg0LDcgQEAKIAogI2lmZGVmIE1PWl9XSURHRVRfR1RLMgogI2luY2x1ZGUgIm5zSUdu
b21lVkZTU2VydmljZS5oIgorI2luY2x1ZGUgIm5zS0RFVXRpbHMuaCIKICNlbmRpZgogCiAjaW5j
bHVkZSAibnNOYXRpdmVDaGFyc2V0VXRpbHMuaCIKQEAgLTE2NjYsMTYgKzE2NjcsMTMgQEAgTlNf
SU1FVEhPRElNUAogbnNMb2NhbEZpbGU6OlJldmVhbCgpCiB7CiAjaWZkZWYgTU9aX1dJREdFVF9H
VEsyCi0gICAgbnNDT01QdHI8bnNJR25vbWVWRlNTZXJ2aWNlPiB2ZnMgPSBkb19HZXRTZXJ2aWNl
KE5TX0dOT01FVkZTU0VSVklDRV9DT05UUkFDVElEKTsKLSAgICBpZiAoIXZmcykKLSAgICAgICAg
cmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7Ci0KKyAgICBuc0NBdXRvU3RyaW5nIHVybDsKICAgICBQ
UkJvb2wgaXNEaXJlY3Rvcnk7CiAgICAgaWYgKE5TX0ZBSUxFRChJc0RpcmVjdG9yeSgmaXNEaXJl
Y3RvcnkpKSkKICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CiAKICAgICBpZiAoaXNE
aXJlY3RvcnkpIHsKLSAgICAgICAgcmV0dXJuIHZmcy0+U2hvd1VSSUZvcklucHV0KG1QYXRoKTsK
KyAgICAgICAgdXJsID0gbVBhdGg7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbnNDT01QdHI8bnNJ
RmlsZT4gcGFyZW50RGlyOwogICAgICAgICBuc0NBdXRvU3RyaW5nIGRpclBhdGg7CkBAIC0xNjg0
LDggKzE2ODIsMjEgQEAgbnNMb2NhbEZpbGU6OlJldmVhbCgpCiAgICAgICAgIGlmIChOU19GQUlM
RUQocGFyZW50RGlyLT5HZXROYXRpdmVQYXRoKGRpclBhdGgpKSkKICAgICAgICAgICAgIHJldHVy
biBOU19FUlJPUl9GQUlMVVJFOwogCi0gICAgICAgIHJldHVybiB2ZnMtPlNob3dVUklGb3JJbnB1
dChkaXJQYXRoKTsKKyAgICAgICAgdXJsID0gZGlyUGF0aDsKICAgICB9CisKKyAgICBpZiggbnNL
REVVdGlsczo6a2RlU3VwcG9ydCgpKSB7CisgICAgICAgIG5zQ1N0cmluZ0FycmF5IGNvbW1hbmQ7
CisgICAgICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmluZyggTlNfTElURVJBTF9DU1RSSU5HKCAiT1BF
TiIgKSk7CisgICAgICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmluZyggdXJsICk7CisgICAgICAgIHJl
dHVybiBuc0tERVV0aWxzOjpjb21tYW5kKCBjb21tYW5kICkgPyBOU19PSyA6IE5TX0VSUk9SX0ZB
SUxVUkU7CisgICAgfQorCisgICAgbnNDT01QdHI8bnNJR25vbWVWRlNTZXJ2aWNlPiB2ZnMgPSBk
b19HZXRTZXJ2aWNlKE5TX0dOT01FVkZTU0VSVklDRV9DT05UUkFDVElEKTsKKyAgICBpZiAoIXZm
cykKKyAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CisgICAgcmV0dXJuIHZmcy0+U2hv
d1VSSUZvcklucHV0KHVybCk7CisKICNlbHNlCiAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7
CiAjZW5kaWYKQEAgLTE2OTUsNiArMTcwNiwxMyBAQCBOU19JTUVUSE9ESU1QCiBuc0xvY2FsRmls
ZTo6TGF1bmNoKCkKIHsKICNpZmRlZiBNT1pfV0lER0VUX0dUSzIKKyAgICBpZiggbnNLREVVdGls
czo6a2RlU3VwcG9ydCgpKSB7CisgICAgICAgIG5zQ1N0cmluZ0FycmF5IGNvbW1hbmQ7CisgICAg
ICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmluZyggTlNfTElURVJBTF9DU1RSSU5HKCAiT1BFTiIgKSk7
CisgICAgICAgIGNvbW1hbmQuQXBwZW5kQ1N0cmluZyggbVBhdGggKTsKKyAgICAgICAgcmV0dXJu
IG5zS0RFVXRpbHM6OmNvbW1hbmQoIGNvbW1hbmQgKSA/IE5TX09LIDogTlNfRVJST1JfRkFJTFVS
RTsKKyAgICB9CisKICAgICBuc0NPTVB0cjxuc0lHbm9tZVZGU1NlcnZpY2U+IHZmcyA9IGRvX0dl
dFNlcnZpY2UoTlNfR05PTUVWRlNTRVJWSUNFX0NPTlRSQUNUSUQpOwogICAgIGlmICghdmZzKQog
ICAgICAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3924</attachid>
            <date>2009-09-23 12:32:00 +0400</date>
            <delta_ts>2009-09-23 12:32:00 +0400</delta_ts>
            <desc>mozilla-helper-app.patch</desc>
            <filename>mozilla-helper-app.patch</filename>
            <type>text/plain</type>
            <size>3725</size>
            <attacher name="Zerg">anubix</attacher>
            
              <data encoding="base64">RnJvbTogV29sZmdhbmcgUm9zZW5hdWVyIDx3ckByb3NlbmF1ZXIub3JnPgpTdWJqZWN0OiBubyBo
ZWxwZXIgYXBwIGZvciBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0gYnV0IHJlY29nbml6ZWQgZXh0
ZW5zaW9ucwpSZWZlcmVuY2VzOgpodHRwczovL2J1Z3ppbGxhLm5vdmVsbC5jb20vc2hvd19idWcu
Y2dpP2lkPTQwNjk3OQpodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zMjczMjMKCgpkaWZmIC0tZ2l0IGEvdXJpbG9hZGVyL2V4dGhhbmRsZXIvdW5peC9uc01JTUVJ
bmZvVW5peC5jcHAgYi91cmlsb2FkZXIvZXh0aGFuZGxlci91bml4L25zTUlNRUluZm9Vbml4LmNw
cAotLS0gYS91cmlsb2FkZXIvZXh0aGFuZGxlci91bml4L25zTUlNRUluZm9Vbml4LmNwcAorKysg
Yi91cmlsb2FkZXIvZXh0aGFuZGxlci91bml4L25zTUlNRUluZm9Vbml4LmNwcApAQCAtNDEsMTYg
KzQxLDE3IEBACiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1ZGUgPGhpbGRvbi11cmkuaD4KICNl
bmRpZgogCiAKICNpbmNsdWRlICJuc01JTUVJbmZvVW5peC5oIgogI2luY2x1ZGUgIm5zR05PTUVS
ZWdpc3RyeS5oIgogI2luY2x1ZGUgIm5zSUdub21lVkZTU2VydmljZS5oIgorI2luY2x1ZGUgIm5z
QXV0b1B0ci5oIgogI2lmZGVmIE1PWl9FTkFCTEVfREJVUwogI2luY2x1ZGUgIm5zREJ1c0hhbmRs
ZXJBcHAuaCIKICNlbmRpZgogCiAKIG5zcmVzdWx0CiBuc01JTUVJbmZvVW5peDo6TG9hZFVyaUlu
dGVybmFsKG5zSVVSSSAqIGFVUkkpCiB7IApAQCAtNjksMjMgKzcwLDI2IEBAIG5zTUlNRUluZm9V
bml4OjpMb2FkVXJpSW50ZXJuYWwobnNJVVJJICoKICNlbmRpZgogICByZXR1cm4gcnY7CiB9CiAK
IE5TX0lNRVRIT0RJTVAKIG5zTUlNRUluZm9Vbml4OjpHZXRIYXNEZWZhdWx0SGFuZGxlcihQUkJv
b2wgKl9yZXR2YWwpCiB7CiAgICpfcmV0dmFsID0gUFJfRkFMU0U7Ci0gIG5zQ09NUHRyPG5zSUdu
b21lVkZTU2VydmljZT4gdmZzID0gZG9fR2V0U2VydmljZShOU19HTk9NRVZGU1NFUlZJQ0VfQ09O
VFJBQ1RJRCk7Ci0gIGlmICh2ZnMpIHsKLSAgICBuc0NPTVB0cjxuc0lHbm9tZVZGU01pbWVBcHA+
IGFwcDsKLSAgICBpZiAoTlNfU1VDQ0VFREVEKHZmcy0+R2V0QXBwRm9yTWltZVR5cGUobVR5cGUs
IGdldHRlcl9BZGRSZWZzKGFwcCkpKSAmJiBhcHApCi0gICAgICAqX3JldHZhbCA9IFBSX1RSVUU7
CisgIG5zUmVmUHRyPG5zTUlNRUluZm9CYXNlPiBtaW1lSW5mbyA9IG5zR05PTUVSZWdpc3RyeTo6
R2V0RnJvbVR5cGUobVR5cGUpOworICBpZiAoIW1pbWVJbmZvKSB7CisgICAgbnNDQXV0b1N0cmlu
ZyBleHQ7CisgICAgR2V0UHJpbWFyeUV4dGVuc2lvbihleHQpOworICAgIG1pbWVJbmZvID0gbnNH
Tk9NRVJlZ2lzdHJ5OjpHZXRGcm9tRXh0ZW5zaW9uKGV4dCk7CiAgIH0KIAorICBpZiAobWltZUlu
Zm8pCisgICAgKl9yZXR2YWwgPSBQUl9UUlVFOworCiAgIGlmICgqX3JldHZhbCkKICAgICByZXR1
cm4gTlNfT0s7CiAKICNpZmRlZiBNT1pfUExBVEZPUk1fSElMRE9OCiAgIEhpbGRvblVSSUFjdGlv
biAqYWN0aW9uID0gaGlsZG9uX3VyaV9nZXRfZGVmYXVsdF9hY3Rpb24obVR5cGUuZ2V0KCksIG5z
bnVsbCk7CiAgIGlmIChhY3Rpb24pIHsKICAgICAqX3JldHZhbCA9IFBSX1RSVUU7CiAgICAgaGls
ZG9uX3VyaV9hY3Rpb25fdW5yZWYoYWN0aW9uKTsKQEAgLTEwNCwxNiArMTA4LDI2IEBAIG5zTUlN
RUluZm9Vbml4OjpMYXVuY2hEZWZhdWx0V2l0aEZpbGUobnMKICAgYUZpbGUtPkdldE5hdGl2ZVBh
dGgobmF0aXZlUGF0aCk7CiAKICAgbnNDT01QdHI8bnNJR25vbWVWRlNTZXJ2aWNlPiB2ZnMgPSBk
b19HZXRTZXJ2aWNlKE5TX0dOT01FVkZTU0VSVklDRV9DT05UUkFDVElEKTsKIAogICBpZiAodmZz
KSB7CiAgICAgbnNDT01QdHI8bnNJR25vbWVWRlNNaW1lQXBwPiBhcHA7CiAgICAgaWYgKE5TX1NV
Q0NFRURFRCh2ZnMtPkdldEFwcEZvck1pbWVUeXBlKG1UeXBlLCBnZXR0ZXJfQWRkUmVmcyhhcHAp
KSkgJiYgYXBwKQogICAgICAgcmV0dXJuIGFwcC0+TGF1bmNoKG5hdGl2ZVBhdGgpOworCisgICAg
Ly8gSWYgd2UgaGF2ZW4ndCBnb3QgYW4gYXBwIHdlIHRyeSB0byBnZXQgYSB2YWxpZCBvbmUgYnkg
c2VhcmNoaW5nIGZvciB0aGUKKyAgICAvLyBleHRlbnNpb24gbWFwcGVkIHR5cGUKKyAgICBuc1Jl
ZlB0cjxuc01JTUVJbmZvQmFzZT4gbWltZUluZm8gPSBuc0dOT01FUmVnaXN0cnk6OkdldEZyb21F
eHRlbnNpb24obmF0aXZlUGF0aCk7CisgICAgaWYgKG1pbWVJbmZvKSB7CisgICAgICBuc0NBdXRv
U3RyaW5nIHR5cGU7CisgICAgICBtaW1lSW5mby0+R2V0VHlwZSh0eXBlKTsKKyAgICAgIGlmIChO
U19TVUNDRUVERUQodmZzLT5HZXRBcHBGb3JNaW1lVHlwZSh0eXBlLCBnZXR0ZXJfQWRkUmVmcyhh
cHApKSkgJiYgYXBwKQorICAgICAgICByZXR1cm4gYXBwLT5MYXVuY2gobmF0aXZlUGF0aCk7Cisg
ICAgfQogICB9CiAKICAgaWYgKCFtRGVmYXVsdEFwcGxpY2F0aW9uKQogICAgIHJldHVybiBOU19F
UlJPUl9GSUxFX05PVF9GT1VORDsKIAogICByZXR1cm4gTGF1bmNoV2l0aElQcm9jZXNzKG1EZWZh
dWx0QXBwbGljYXRpb24sIG5hdGl2ZVBhdGgpOwogfQogCmRpZmYgLS1naXQgYS91cmlsb2FkZXIv
ZXh0aGFuZGxlci91bml4L25zT1NIZWxwZXJBcHBTZXJ2aWNlLmNwcCBiL3VyaWxvYWRlci9leHRo
YW5kbGVyL3VuaXgvbnNPU0hlbHBlckFwcFNlcnZpY2UuY3BwCi0tLSBhL3VyaWxvYWRlci9leHRo
YW5kbGVyL3VuaXgvbnNPU0hlbHBlckFwcFNlcnZpY2UuY3BwCisrKyBiL3VyaWxvYWRlci9leHRo
YW5kbGVyL3VuaXgvbnNPU0hlbHBlckFwcFNlcnZpY2UuY3BwCkBAIC0xNjQxLDE4ICsxNjQxLDI2
IEBAIG5zT1NIZWxwZXJBcHBTZXJ2aWNlOjpHZXRNSU1FSW5mb0Zyb21PUygKICAgICAgICAgTlNf
QUREUkVGKHJldHZhbCk7CiAgICAgICAgIGlmICghYUZpbGVFeHQuSXNFbXB0eSgpKQogICAgICAg
ICAgIHJldHZhbC0+QXBwZW5kRXh0ZW5zaW9uKGFGaWxlRXh0KTsKICAgICAgIH0KICAgICAgIAog
ICAgICAgcmV0dXJuIHJldHZhbDsKICAgICB9CiAKLSAgICAvLyBDb3B5IHRoZSBhdHRyaWJ1dGVz
IG9mIHJldHZhbCBvbnRvIG1pQnlFeHQsIHRvIHJldHVybiBpdAorICAgIC8vIENvcHkgdGhlIGF0
dHJpYnV0ZXMgb2YgcmV0dmFsIG9udG8gbWlCeUV4dCwgdG8gcmV0dXJuIGl0IGJ1dCBrZWVwCisg
ICAgLy8ganVzdCBjb2xsZWN0ZWQgbURlZmF1bHRBcHBEZXNjcmlwdGlvbgorICAgIG5zQXV0b1N0
cmluZyBieUV4dERlZmF1bHQ7CisgICAgbWlCeUV4dC0+R2V0RGVmYXVsdERlc2NyaXB0aW9uKGJ5
RXh0RGVmYXVsdCk7CisgICAgcmV0dmFsLT5TZXREZWZhdWx0RGVzY3JpcHRpb24oYnlFeHREZWZh
dWx0KTsKICAgICByZXR2YWwtPkNvcHlCYXNpY0RhdGFUbyhtaUJ5RXh0KTsKKyAgICAvLyBCdXQg
c2V0IHRoZSBleHRlbnNpb25zIHByaW1hcnkgc2luY2UgQ29weUJhc2ljRGF0YVRvIG92ZXJ3cml0
ZXMgdGhlCisgICAgLy8gbGlzdAorICAgIGlmICghYUZpbGVFeHQuSXNFbXB0eSgpKQorICAgICAg
bWlCeUV4dC0+U2V0UHJpbWFyeUV4dGVuc2lvbihhRmlsZUV4dCk7CiAKICAgICBtaUJ5RXh0LnN3
YXAocmV0dmFsKTsKICAgfQogICByZXR1cm4gcmV0dmFsOwogfQogCiBOU19JTUVUSE9ESU1QCiBu
c09TSGVscGVyQXBwU2VydmljZTo6R2V0UHJvdG9jb2xIYW5kbGVySW5mb0Zyb21PUyhjb25zdCBu
c0FDU3RyaW5nICZhU2NoZW1lLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3925</attachid>
            <date>2009-09-23 12:32:57 +0400</date>
            <delta_ts>2009-09-23 12:33:53 +0400</delta_ts>
            <desc>xulrunner.spec.patch</desc>
            <filename>xulrunner.spec.patch</filename>
            <type>text/plain</type>
            <size>812</size>
            <attacher name="Zerg">anubix</attacher>
            
              <data encoding="base64">LS0tIHh1bHJ1bm5lci5zcGVjfgkyMDA5LTA5LTIxIDE3OjI2OjA2ICswNDAwCisrKyB4dWxydW5u
ZXIuc3BlYwkyMDA5LTA5LTIzIDAxOjM2OjQ4ICswNDAwCkBAIC0yMCw3ICsyMCw3IEBACiBTdW1t
YXJ5OglYVUwgUnVubmVyCiBOYW1lOgkJeHVscnVubmVyCiBWZXJzaW9uOgkxLjkuMS40Ci1SZWxl
YXNlOglhbHQwLjIwMDkwOTE4CitSZWxlYXNlOglhbHQwLjIwMDkwOTE4LjEKIExpY2Vuc2U6CU1Q
TC9HUEwvTEdQTAogR3JvdXA6CQlOZXR3b3JraW5nL090aGVyCiBVcmw6CQlodHRwOi8vd2lraS5t
b3ppbGxhLm9yZy9YVUw6WHVsX1J1bm5lcgpAQCAtNDgsNyArNDgsOSBAQCBQYXRjaDIwMDoJeHVs
cnVubmVyLXVzZS1tb3pzcWxpdGUucGF0Y2gKIAogIyBTdVNFIHBhdGNoZXMKIFBhdGNoMzAxOiBt
b3ppbGxhLWhlbHBlci1hcHAucGF0Y2gKLVBhdGNoMzAyOiBrZGUtaW50ZWdyYXRpb24ucGF0Y2gK
K1BhdGNoMzAyOiBtb3ppbGxhLWtkZS5wYXRjaAorCitQcm92aWRlczogeHVscnVubmVyLWtkZTQt
dmVyc2lvbiA9IDUKIAogUmVxdWlyZXM6CWh1bnNwZWxsLWVuCiBSZXF1aXJlczoJeHVscnVubmVy
LWxpYnMgPSAldmVyc2lvbi0lcmVsZWFzZQpAQCAtMTUyLDcgKzE1NCw3IEBAIGNwIC1hZiAtLSBc
CiAJdG9vbGtpdC9jb250ZW50L3dpZGdldHMvcHJlZmVyZW5jZXMueG1sIFwKIAl0b29sa2l0L2Nv
bnRlbnQvd2lkZ2V0cy9wcmVmZXJlbmNlcy1rZGUueG1sCiAKLSVwYXRjaDMwMSAtcDAgLWIgLmhl
bHBlcmFwcAorJXBhdGNoMzAxIC1wMSAtYiAuaGVscGVyYXBwCiAlcGF0Y2gzMDIgLXAxIC1iIC5r
ZGU0CiAKICVidWlsZAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>