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

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

    <bug>
          <bug_id>33191</bug_id>
          
          <creation_ts>2017-03-02 10:09:30 +0300</creation_ts>
          <short_desc>Правильно добавить версию в пути поиска /usr/lib/ruby/site_ruby/2.3.0/x86_64-linux</short_desc>
          <delta_ts>2017-03-14 15:58:18 +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>ruby</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>blocker</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gleb Kulikov">glebus</reporter>
          <assigned_to name="majioa@altlinux.org">majioa</assigned_to>
          <cc>admsasha</cc>
    
    <cc>boyarsh</cc>
    
    <cc>cas</cc>
    
    <cc>ldv</cc>
    
    <cc>majioa</cc>
    
    <cc>mike</cc>
    
    <cc>nbr</cc>
    
    <cc>pav</cc>
    
    <cc>rider</cc>
    
    <cc>thatman</cc>
    
    <cc>vitty</cc>
    
    <cc>viy</cc>
    
    <cc>vseleznv</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>162216</commentid>
    <comment_count>0</comment_count>
    <who name="Gleb Kulikov">glebus</who>
    <bug_when>2017-03-02 10:09:30 +0300</bug_when>
    <thetext>при попытке добавить пользователя через ldap-useradd, получаем ошибку
ldap_add: Invalid syntax (21)
        additional info: gidNumber: value #0 invalid per syntax

при просмотре генерируемого ldif оказывается, что поле gidNumber: 
пустое.

дальнейшее разбирательство приводит к скрипту ldap-getent group, не возвращающему список групп.

строка 51 в функции ldap_serach_groups()

ldap_parse_reply group &quot;$@&quot;

выдаёт ошибку 

/usr/lib/ruby/rubygems/core_ext/kernel_require.rb:55:in `require&apos;: cannot load such file -- ldap (LoadError)
        from /usr/lib/ruby/rubygems/core_ext/kernel_require.rb:55:in `require&apos;
        from -e:2:in `&lt;main&gt;&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162219</commentid>
    <comment_count>1</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2017-03-02 12:04:10 +0300</bug_when>
    <thetext>Эти скрипты работают только с настроенным ALT-доменом (http://altlinux.org/Домен). Неясно, какой LDAP-сервер вы используете.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162222</commentid>
    <comment_count>2</comment_count>
    <who name="Gleb Kulikov">glebus</who>
    <bug_when>2017-03-02 13:27:47 +0300</bug_when>
    <thetext>(В ответ на комментарий №1)
&gt; Эти скрипты работают только с настроенным ALT-доменом

да, конечно, домен давно настроен. С авторизацией и проч., проблем НЕТ.

В любом случае, см. относительно ldap-getent

&gt; (http://altlinux.org/Домен). Неясно, какой LDAP-сервер вы используете.

openLDAP.

Работает: 
      ldap-user-tools-0.9.2-alt1
      ruby-ldap-0.9.11-alt2.3

НЕ РАБОТАЕТ:
      ldap-user-tools-0.9.3-alt1.noarch
      ruby-ldap-0.9.17-alt1.x86_64
      
alterator-cmdline /net-domain action read

domain:xxxx.tsu.ru
domain_type:altdomain
resolver:OK
access:OK
ldap:OK
kdc:OK
smb:OK (XXXX)

dhcpd:Error: domain name xxxx.tsu.ru is not provided to clients
[нормально, работает dnsmasq и через него-же отдаются srv-host=_ldap._tcp... kerberos и т.д.
]
master:#t
ad_dns:127.0.0.1
ad_service:НЕ ГОТОВА (служба остановлена)
ad_domain:--
ad_realm:--
ad_dc_name:--
ad_ldap_server:--
ad_kdc_server:--
altdomain_is_available:#t
ad_is_available:#f</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162223</commentid>
    <comment_count>3</comment_count>
    <who name="Gleb Kulikov">glebus</who>
    <bug_when>2017-03-02 13:29:54 +0300</bug_when>
    <thetext>(В ответ на комментарий №1)

&gt; (http://altlinux.org/Домен). Неясно, какой LDAP-сервер вы используете.

openldap-servers-2.4.42-alt4.x86_64</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162225</commentid>
    <comment_count>4</comment_count>
    <who name="Anton V. Boyarshinov">boyarsh</who>
    <bug_when>2017-03-02 13:44:09 +0300</bug_when>
    <thetext>
&gt; Работает: 
&gt;       ldap-user-tools-0.9.2-alt1
&gt; 
&gt; НЕ РАБОТАЕТ:
&gt;       ldap-user-tools-0.9.3-alt1.noarch
Изменения в ldap-user-tools определённо не могут привести к такому эффекту.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162227</commentid>
    <comment_count>5</comment_count>
    <who name="Gleb Kulikov">glebus</who>
    <bug_when>2017-03-02 14:27:34 +0300</bug_when>
    <thetext>(В ответ на комментарий №4)
&gt; &gt; Работает: 
&gt; &gt;       ldap-user-tools-0.9.2-alt1
&gt; &gt; 
&gt; &gt; НЕ РАБОТАЕТ:
&gt; &gt;       ldap-user-tools-0.9.3-alt1.noarch

&gt; Изменения в ldap-user-tools определённо не могут привести к такому эффекту.

воспроизводится на двух системах.
корень зла --- в ldap_parse_reply group &quot;$@&quot;

я в руби ни бум бум, далее проследить не получается</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162228</commentid>
    <comment_count>6</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2017-03-02 14:36:50 +0300</bug_when>
    <thetext>На ruby-ldap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162229</commentid>
    <comment_count>7</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2017-03-02 14:39:43 +0300</bug_when>
    <thetext># ll /usr/lib/ruby/site_ruby/x86_64-linux/curses.so 
-rw-r--r-- 1 root root 47904 окт 25 14:44 /usr/lib/ruby/site_ruby/x86_64-linux/curses.so
# ruby
require &quot;curses&quot;
/usr/lib/ruby/rubygems/core_ext/kernel_require.rb:55:in `require&apos;: cannot load such file -- curses.so (LoadError)
        from /usr/lib/ruby/rubygems/core_ext/kernel_require.rb:55:in `require&apos;
        from /usr/lib/ruby/site_ruby/curses.rb:1:in `&lt;top (required)&gt;&apos;
        from /usr/lib/ruby/rubygems/core_ext/kernel_require.rb:55:in `require&apos;
        from /usr/lib/ruby/rubygems/core_ext/kernel_require.rb:55:in `require&apos;
        from -:1:in `&lt;main&gt;&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162231</commentid>
    <comment_count>8</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2017-03-02 15:30:42 +0300</bug_when>
    <thetext>Тест: ruby -e &apos;puts $:&apos; | xargs ls &gt;/dev/null
Не должно возвращать ничего.

На p8:
# ruby -e &apos;puts $:&apos; | xargs ls &gt;/dev/null
#

На Sisyphus
#  ruby -e &apos;puts $:&apos; | xargs ls &gt;/dev/null
ls: невозможно получить доступ к /usr/lib/ruby/site_ruby/2.3.0: Нет такого файла или каталога
ls: невозможно получить доступ к /usr/lib/ruby/site_ruby/2.3.0/x86_64-linux: Нет такого файла или каталога
ls: невозможно получить доступ к /usr/lib/ruby/vendor_ruby/2.3.0: Нет такого файла или каталога
ls: невозможно получить доступ к /usr/lib/ruby/vendor_ruby/2.3.0/x86_64-linux: Нет такого файла или каталога
#</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162345</commentid>
    <comment_count>9</comment_count>
      <attachid>6996</attachid>
    <who name="Gleb Kulikov">glebus</who>
    <bug_when>2017-03-09 09:35:46 +0300</bug_when>
    <thetext>Created attachment 6996
отдельный бинарник, заменяющий ldap-parse_reply для проверки повторяемости &quot;зависаний&quot; скриптов ldap-...

&gt; ls: невозможно получить доступ к /usr/lib/ruby/vendor_ruby/2.3.0: Нет такого

Действительно, после создания /usr/lib/ruby/site_ruby/2.3.0 и размещении в нём симлинков на * ruby&apos;ивские *.so из /usr/lib/ruby/site_ruby/, работа восстанавливается. Но вот что странно, при массовых операциях (манипуляции пользователями из отдельного скрипта), замечены &quot;зависания&quot; на ruby . Понять
причину подвисаний не получается. Для проверки, сделал простую программу на замену ruby-скрипта &quot;ldap_parse_reply&quot;. Для чистоты эксперимента, &quot;голый&quot; бинарник, без питона и прочих излишеств. Действительно, &quot;зависания&quot; при вызове ldap-getent прекратились, но понятно, что проблему это не решает.

PS: есть надежда на решение неприятностей с руби?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162356</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2017-03-09 11:46:57 +0300</bug_when>
    <thetext>...ну и разумеется, в копию не попал собственно nbr@ -- надо ACL поправить.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162364</commentid>
    <comment_count>11</comment_count>
    <who name="nbr">nbr</who>
    <bug_when>2017-03-09 15:19:52 +0300</bug_when>
    <thetext>Забираю. Делаю правильный ruby.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162429</commentid>
    <comment_count>12</comment_count>
    <who name="nbr">nbr</who>
    <bug_when>2017-03-10 08:09:30 +0300</bug_when>
    <thetext>Прошу тестировать задание #179259.
Возможно с ним надо будет перекомпилировать некоторые ruby модули, имеющие .so части, так что их можно добавлять в это задание - оно расшарено.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162456</commentid>
    <comment_count>13</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2017-03-11 16:19:24 +0300</bug_when>
    <thetext>(В ответ на комментарий №12)
&gt; Прошу тестировать задание #179259.
&gt; Возможно с ним надо будет перекомпилировать некоторые ruby модули, имеющие .so
&gt; части, так что их можно добавлять в это задание - оно расшарено.
Не некоторые, а все компилируемые. Сделал таск #179408 и добавил туда все нужные модули. Возникла проблема с ruby-ffi-yajl, но это решим.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162458</commentid>
    <comment_count>14</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2017-03-11 19:45:34 +0300</bug_when>
    <thetext>(В ответ на комментарий №13)
&gt; Не некоторые, а все компилируемые. Сделал таск #179408 и добавил туда все
&gt; нужные модули. Возникла проблема с ruby-ffi-yajl, но это решим.
rpm-build-ruby тоже надо поправить. Модули ищут ruby(ffi_c), а собранный пакет провайдит ruby(2.3.1/x86_64-linux/ffi_c), ruby(2.3.1/x86_64-linux/ffi_c.so)
Если второй к месту, то первый содержит избыточные пути.

Иван, что скажешь?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162459</commentid>
    <comment_count>15</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2017-03-11 19:55:19 +0300</bug_when>
    <thetext>(В ответ на комментарий №14)
&gt; (В ответ на комментарий №13)
&gt; &gt; Не некоторые, а все компилируемые. Сделал таск #179408 и добавил туда все
&gt; &gt; нужные модули. Возникла проблема с ruby-ffi-yajl, но это решим.
&gt; rpm-build-ruby тоже надо поправить. Модули ищут ruby(ffi_c), а собранный пакет
&gt; провайдит ruby(2.3.1/x86_64-linux/ffi_c), ruby(2.3.1/x86_64-linux/ffi_c.so)
&gt; Если второй к месту, то первый содержит избыточные пути.
&gt; 
&gt; Иван, что скажешь?
Я подозреваю, что в ruby.prov вставить

           s,^(site|vendor)_ruby/,,
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;s,^2\.3\.1/,,
           s,^$RPM_RUBY_ARCH/,,

То всё сработает. Но некрасиво версию вставлять явно. Попробую через [0-9.]\+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162460</commentid>
    <comment_count>16</comment_count>
    <who name="stalker">stalker</who>
    <bug_when>2017-03-11 20:07:25 +0300</bug_when>
    <thetext>А нужно ли отрывать версию abi из путей устанвоки модулей?

Они же ставятся в директорию ==  версии ABI.

Вот например путь в debian

/usr/lib/x86_64-linux-gnu/ruby/vendor_ruby/2.1.0/mysql/mysql_api.so

Или  мы опять делаем свой велосипед ни с кем не совместимый для любителей в случае чего ломать голову?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162461</commentid>
    <comment_count>17</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2017-03-11 20:28:46 +0300</bug_when>
    <thetext>(В ответ на комментарий №16)
&gt; А нужно ли отрывать версию abi из путей устанвоки модулей?
&gt; 
&gt; Они же ставятся в директорию ==  версии ABI.
&gt; 
&gt; Вот например путь в debian
&gt; 
&gt; /usr/lib/x86_64-linux-gnu/ruby/vendor_ruby/2.1.0/mysql/mysql_api.so
&gt; 
&gt; Или  мы опять делаем свой велосипед ни с кем не совместимый для любителей в
&gt; случае чего ломать голову?
Как раз в новой сборке Ruby .so-шки ставятся не в site_ruby/x86_64-linux/, а в 
site_ruby/2.3.1/x86_64-linux/ Сами архитектурно-независимые .rb - в site-ruby без версии.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162462</commentid>
    <comment_count>18</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2017-03-11 20:30:48 +0300</bug_when>
    <thetext>(В ответ на комментарий №16)
&gt; Вот например путь в debian
&gt; Или  мы опять делаем свой велосипед
Как раз Debian и есть самый большой велосипед из костылей и подпорок, раз существует в единственном экземпляре. Один приведённый путь чего стоит!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162466</commentid>
    <comment_count>19</comment_count>
    <who name="stalker">stalker</who>
    <bug_when>2017-03-11 21:55:04 +0300</bug_when>
    <thetext>А.. rvm на девел хосте в юзерской установке

./rubies/ruby-2.2.2/lib/ruby/2.2.0/x86_64-linux/socket.so
./rubies/ruby-2.2.2/lib/ruby/2.2.0/x86_64-linux/openssl.so
./rubies/ruby-2.2.2/lib/ruby/2.2.0/x86_64-linux/stringio.so

Я видимо не правильно понял описание бага.Исходя из темы складывается ощущение что отрывается вовсе версия..то есть вместо 

-/usr/lib/ruby/site_ruby/2.3.0/x86_64-linux
+/usr/lib/ruby/site_ruby/x86_64-linux</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162470</commentid>
    <comment_count>20</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2017-03-12 08:18:00 +0300</bug_when>
    <thetext>(В ответ на комментарий №19)
&gt; Я видимо не правильно понял описание бага.Исходя из темы складывается ощущение
&gt; что отрывается вовсе версия..то есть вместо 
Как раз раньше было без версии. Сейчас она появилась.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162471</commentid>
    <comment_count>21</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2017-03-12 08:20:32 +0300</bug_when>
    <thetext>Денис, последняя проблема, оставшаяся в Ruby:

старый вариант:
$ ruby -e &apos;print RbConfig::CONFIG[&quot;sitearchdir&quot;]&apos;
/usr/lib/ruby/site_ruby/x86_64-linux

новый вариант:
$ ruby -e &apos;print RbConfig::CONFIG[&quot;sitearchdir&quot;]&apos;  
/usr/lib/ruby/2.3.1/x86_64-linux

должно быть: /usr/lib/ruby/site_ruby/2.3.1/x86_64-linux

Из-за этого 7 пакетов не собираются.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162472</commentid>
    <comment_count>22</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2017-03-12 08:24:15 +0300</bug_when>
    <thetext>В спеке Ruby:
+       --with-sitearchdir=%libdir/%version/%ruby_arch \

Но пакеты туда не ставят.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162473</commentid>
    <comment_count>23</comment_count>
    <who name="nbr">nbr</who>
    <bug_when>2017-03-12 10:30:27 +0300</bug_when>
    <thetext>(In reply to comment #22)
&gt; В спеке Ruby:
&gt; +       --with-sitearchdir=%libdir/%version/%ruby_arch \
&gt; 
&gt; Но пакеты туда не ставят.
Да. Сейчас пересоберу с 
--with-sitearchdir=%libdir/site_ruby/%version/%ruby_arch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162474</commentid>
    <comment_count>24</comment_count>
    <who name="nbr">nbr</who>
    <bug_when>2017-03-12 10:32:31 +0300</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; В спеке Ruby:
&gt; &gt; +       --with-sitearchdir=%libdir/%version/%ruby_arch \
&gt; &gt; 
&gt; &gt; Но пакеты туда не ставят.
&gt; Да. Сейчас пересоберу с 
&gt; --with-sitearchdir=%libdir/site_ruby/%version/%ruby_arch
прошу обновить из задания
сейчас
--with-sitearchdir=%libdir/site_ruby/%version/%ruby_arch \
--with-vendorarchdir=%libdir/vendor_ruby/%version/%ruby_arch \</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162479</commentid>
    <comment_count>25</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2017-03-12 15:43:08 +0300</bug_when>
    <thetext>(В ответ на комментарий №24)
&gt; (In reply to comment #23)
&gt; &gt; (In reply to comment #22)
&gt; &gt; &gt; В спеке Ruby:
&gt; &gt; &gt; +       --with-sitearchdir=%libdir/%version/%ruby_arch \
&gt; &gt; &gt; 
&gt; &gt; &gt; Но пакеты туда не ставят.
&gt; &gt; Да. Сейчас пересоберу с 
&gt; &gt; --with-sitearchdir=%libdir/site_ruby/%version/%ruby_arch
&gt; прошу обновить из задания
&gt; сейчас
&gt; --with-sitearchdir=%libdir/site_ruby/%version/%ruby_arch \
&gt; --with-vendorarchdir=%libdir/vendor_ruby/%version/%ruby_arch \
Пересобираю. Всё равно пофиксил штук 6 пакетов, которые не учитывали ruby_sitearchdir. Сейчас остаются 7 пакетов с анметами по зависимостям. После их починки задание может собраться.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162508</commentid>
    <comment_count>26</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2017-03-14 15:58:18 +0300</bug_when>
    <thetext>Исправлено в ruby-2.3.1-alt2</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>6996</attachid>
            <date>2017-03-09 09:35:46 +0300</date>
            <delta_ts>2017-03-09 09:35:46 +0300</delta_ts>
            <desc>отдельный бинарник, заменяющий ldap-parse_reply для проверки повторяемости &quot;зависаний&quot; скриптов ldap-...</desc>
            <filename>ldap_parse_reply.d</filename>
            <type>application/octet-stream</type>
            <size>23252</size>
            <attacher name="Gleb Kulikov">glebus</attacher>
            
              <data encoding="base64">IAogLyoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiA6U3VtbWFyeToKICog
0J/RgNC+0YHRgtCw0Y8g0Lgg0LPRgNGP0LfQvdCw0Y8g0LfQsNC80LXQvdCwIHJ1Ynkt0YHQutGA
0LjQv9GC0LAgImxkYXBfcGFyc2VfcmVwbHkiINC00LvRjyDQv9GA0Y/QvNC+0Lkg0L/QvtC00YHR
gtCw0L3QvtCy0LrQuCDQsiDRgdC60YDQuNC/0YIgCiAqIGxkYXAtZ2V0ZW50INCy0LzQtdGB0YLQ
viDRgNC+0LTQvdC+0LPQviAibGRhcF9wYXJzZV9yZXBseSIsCiAqIDw9PSDRgi7Qui4g0LIgQUxU
IFNpc3lwaHVzQDIwMTcwMyBydWJ5INCy0L3QtdC30LDQv9C90L4gItGB0LvQvtC80LDQu9GB0Y8i
IAogKiArKyAo0L/RgNC4INGB0L7Qt9C00LDQvdC40LggL3Vzci9saWIvcnVieS9zaXRlX3J1Ynkv
Mi4zLjAg0Lgg0YDQsNC30LzQtdGJ0LXQvdC40Lgg0LIg0L3RkdC8INGB0LjQvNC70LjQvdC60L7Q
siDQvdCwIAogKiBydWJ5J9C40LLRgdC60LjQtSAqLnNvLCDRgNCw0LHQvtGC0LAg0LLQvtGB0YHR
gtCw0L3QsNCy0LvQuNCy0LDQtdGC0YHRjywg0L3QviDQt9Cw0LzQtdGH0LXQvdGLICLQt9Cw0LLQ
uNGB0LDQvdC40Y8iINC90LAgcnVieSDQv9GA0LggCiAqINC80LDRgdGB0L7QstGL0YUg0L7Qv9C1
0YDQsNGG0LjRj9GFICjQvNCw0L3QuNC/0YPQu9GP0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC1
0LvRj9C80Lgg0LjQtyDQvtGC0LTQtdC70YzQvdC+0LPQviDRgdC60YDQuNC/0YLQsCkuINCf0L7Q
vdGP0YLRjAogKiDQv9GA0LjRh9C40L3RgyDQv9C+0LTQstC40YHQsNC90LjQuSDQvdC1INC/0L7Q
u9GD0YfQsNC10YLRgdGPLiDQlNC70Y8g0L/RgNC+0LLQtdGA0LrQuCwg0YHQtNC10LvQsNC90LAg
0Y3RgtCwINC/0YDQvtGB0YLQsNGPINC/0YDQvtCz0YDQsNC80LzQsCwKICoKICog0JTQu9GPINGH
0LjRgdGC0L7RgtGLINGN0LrRgdC/0LXRgNC40LzQtdC90YLQsCwg0LLQviDQuNC30LHQtdC20LDQ
vdC40LUg0L7Rh9C10YDQtdC00L3Ri9GFINGB0Y7RgNC/0YDQuNC30L7Qsiwg0LjRgdC/0L7Qu9GM
0LfRg9C10YIg0YLQvtC70YzQutC+IAogKiDQvNC40L3QuNC80LDQu9GM0L3Ri9C1INCy0L7Qt9C8
0L7QttC90L7RgdGC0Lgg0Y/Qt9GL0LrQsCDQuCDQndCVINC40YHQv9C+0LvRjNC30YPQtdGCINCy
0L3QtdGI0L3QuNGFINCx0LjQsdC70LjQvtGC0LXQuiwg0LIg0YIu0YcuINC00LvRjyAKICog0YDQ
sNC30LHQvtGA0LAgbGRhcCDQuNC70Lgg0LjQvNC40YLQsNGG0LjQuCAi0L/QuNGC0L7QvdC40YfQ
tdGB0LrQuNGFIiDQv9GA0LjRkdC80L7Qsi4KICoKICog0JTQtdC50YHRgtCy0LjRgtC10LvRjNC9
0L4sINC90LAgKtGN0YLQvtC5KiDRh9Cw0YHRgtC4LCDQt9Cw0LLQuNGB0LDQvdC40Y8g0LHQvtC7
0LXQtSDQvdC1INC90LDQsdC70Y7QtNCw0LvQuNGB0YwsINC90L4g0YHQutGA0LjQv9GC0YsgbGRh
cC0uLi4KICog0LTRkdGA0LPQsNGO0YIgcnVieSDQuCDQuNC3INC00YDRg9Cz0LjRhSDQvNC10YHR
giDQuCDQv9C+0LvQvdC+0YHRgtGM0Y4g0LjQt9Cx0LDQstC40YLRjNGB0Y8g0L7RgiDQt9Cw0LLQ
uNGB0LDQvdC40Lkg0YLQsNC6INC90LUgCiAqINCy0YvQudC00LXRgi4KICoKICog0J/RgNC+0LPR
gNCw0LzQvNCwINGH0LjRgtCw0LXRgiDQuNC3IHN0ZGluLCBsZGlmIC0g0YHRgtGA0L7QutC4LCDQ
v9C+0LvRg9GH0LXQvdC90YvQtSDRh9C10YDQtdC3IGxkYXBzZWFyY2ggLUxMTCAtYiAib3U9Li4u
IgogKiDQuCDRhNC+0YDQvNC40YDRg9C10YIg0L3QsCBzdGRvdXQg0YHRgtGA0L7QutC4INGB0YLQ
sNC90LTQsNGA0YLQvdC+0LPQviDQstC40LTQsCDQtNC70Y8g0YHQv9C40YHQutC+0LIg0LPRgNGD
0L/Qvywg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10Lkg0LjQu9C4INC80LDRiNC40L0uCiAqCiAq
INC/0YDQuNC90LjQvNCw0LXRgiDQsNGA0LPRg9C80LXQvdGC0Ys6IGdyb3VwIHwgcGFzc3dkIHwg
d3Mg0LTQu9GPINCy0YvQtNC10LvQtdC90LjRjyDQs9GA0YPQv9C/LCDRjtC30LXRgNC+0LIg0LjQ
u9C4INC80LDRiNC40L0sINGB0L7QvtGC0LIuCiAqCiAqINGE0L7RgNC80LDRgiDQsNGA0LPRg9C8
0LXQvdGC0L7QsiDQuCDQstGF0L7QtNC90L7Qs9C+INC/0L7RgtC+0LrQsCDQv9C+0LvQvdC+0YHR
jNGOINGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCICLRgNC+0LTQvdC+0LkiIGxkYXBfcGFyc2Vf
cmVwbHkKICoKICog0J/RgNC4INGD0YHQv9C10YjQvdC+0Lwg0LfQsNCy0LXRgNGI0LXQvdC40Lgs
INCy0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0YLQsNGC0YPRgSAoMCksINC/0YDQuCDQvdC10YHRg9C/
0LXRhdC1IC0tICgzKSAKICog0JXRgdC70Lgg0LrQu9GO0Ycg0LrQvtC80LDQvdC00L3QvtC5INGB
0YLRgNC+0LrQuCDQvdC1INGA0LDRgdC/0L7Qt9C90LDQvSwg0LLQvtC30LLRgNCw0YnQsNC10YIg
0YHRgtCw0YLRg9GBICgxKQogKgogKiDQktCd0JjQnNCQ0J3QmNCVISDRgtGD0L/QvtC5INC4ICLR
gdC/0YDQvtGB0L7QvdGM0Y8iIEDQntCS0J3QntCa0J7QlCEKICoKICog0LLRgNC10LzRjyDRgNCw
0LHQvtGC0Ysg0LTQu9GPINC90LDQsdC+0YDQsCDQuNC3IDEwMzMg0LPRgNGD0L/QvyDQuCAyMDkw
INGO0LfQtdGA0L7QsiDQvdCwINC80LDRiNC40L3QtSDRgSDQv9GA0L7RhtC10YHRgdC+0YDQvtC8
IENvcmUgMkR1bwogKiBUNTc1MCAgQCAyLjAwR0h6INGB0L7RgdGC0LDQstC40LvQviAo0LrQvtC8
0L/QuNC70Y/RhtC40Y8gbGRjMiDQstC10YDRgdC40LggMS4xLjEgYmFzZWQgb24gRE1EIHYyLjA3
MS4yIGFuZCBMTFZNIDMuOS4xIHg4Nl82NCk6CiAqIDAuMDV1c2VyIDAuMDBzeXN0ZW0gMDowMC4w
NWVsYXBzZWQgOTglQ1BVICgwYXZndGV4dCswYXZnZGF0YSAyODMybWF4cmVzaWRlbnQpCiAqLwoK
IC8qKgogKiBBdXRob3JzOiBHbGViIEt1bGlrb3YsIGdsZWJ1c0Bhc2QuaWFvLnJ1CiAqLwogCiAv
KioKICogRGF0ZTogTWFyY2ggMDcsIDIwMTcKICovCiAKIC8qKgogKiBMaWNlbnNlOiB1c2UgZnJl
ZWx5IGZvciBhbnkgcHVycG9zZQogKi8KCgppbXBvcnQgc3RkLnJlZ2V4LCBzdGQuYWxnb3JpdGht
LCBzdGQuZnVuY3Rpb25hbCwgc3RkLnN0ZGlvOwppbXBvcnQgc3RkLmNvbnRhaW5lciA6IERMaXN0
OwppbXBvcnQgY29yZS5zdGRjLnN0ZGxpYiA6IGV4aXQ7CgppbXBvcnQgc3RkLnR5cGVjb25zOyAv
LyBUdXBsZQppbXBvcnQgc3RkLmNvbnY7CgppbXBvcnQgc3RkLmFycmF5OwppbXBvcnQgc3RkLnN0
cmluZzsKCgovLy8g0L3QtdGB0ZHRgiDQt9Cw0L/QuNGB0Ywg0LTQu9GPINCz0YDRg9C/0L/Riwpj
bGFzcyDQk9Cg0KPQn9Cf0JAgewogIHN0cmluZyAgICAgICAg0LjQvNGPOwogIGludCAgICAgICAg
ICAgZ2lkOwogIERMaXN0IXN0cmluZyDRh9C70LXQvdGLOwogIAogIHRoaXMoY2hhcltdIG5hbWUp
IHsKICAgIHRoaXMu0LjQvNGPID0gbmFtZS5pZHVwOwogICAgdGhpcy5naWQgPSAwOwogICAgdGhp
cy7Rh9C70LXQvdGLLmNsZWFyKCk7CiAgfQogIAogIC8vLyDQt9Cw0LTQsNGR0YIg0YHQv9C+0YHQ
vtCxINC/0LXRh9Cw0YLQuCDQk9Cg0KPQn9Cf0KssINCwINC40LzQtdC90L3Qvjog0LIg0LjRgdC6
0L7QvNC+0Lwg0LLQuNC00LUg0YHRgtCw0L3QtNCw0YDRgtC90L7QuSDRgdGC0YDQvtC60LgKICBv
dmVycmlkZSBzdHJpbmcgdG9TdHJpbmcoKSBwdXJlIEBzYWZlIHsKICAgIGF1dG8g0LDQutC60YPQ
vCA9IGFwcGVuZGVyIXN0cmluZygpOwogICAgCiAgICDQsNC60LrRg9C8LnB1dCh0aGlzLtC40LzR
jyk7CiAgICDQsNC60LrRg9C8LnB1dCgiOjoiKTsKICAgINCw0LrQutGD0LwucHV0KHRvIXN0cmlu
Zyh0aGlzLmdpZCkpOwogICAg0LDQutC60YPQvC5wdXQoIjoiKTsKICAgIAogICAgCiAgICBpZiAo
ISB0aGlzLtGH0LvQtdC90YsuZW1wdHkpIHsKCiAgICAgIGZvcmVhY2ggKHN0cmluZyBpOyB0aGlz
LtGH0LvQtdC90YspIHsKCdCw0LrQutGD0LwucHV0KGkpOwoJ0LDQutC60YPQvC5wdXQoIiwiKTsK
ICAgICAgfQogICAgfQogICAgCiAgICByZXR1cm4gIGNob21wKNCw0LrQutGD0LwuZGF0YSwgIiwi
KTsKICAgIAogIH0KfTsKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpjbGFzcyDQnNCQ0KjQmNCd0JAg
ewogIHN0cmluZyDQuNC80Y87CiAgaW50ICAgIHVpZDsKICAKICBvdmVycmlkZSBzdHJpbmcgdG9T
dHJpbmcoKSBwdXJlIEBzYWZlIHsKICAgIGF1dG8g0LDQutC60YPQvCA9IGFwcGVuZGVyIXN0cmlu
ZygpOwogICAgCiAgICDQsNC60LrRg9C8LnB1dCh0aGlzLtC40LzRjyk7CiAgICDQsNC60LrRg9C8
LnB1dCgiOjoiKTsKICAgINCw0LrQutGD0LwucHV0KHRvIXN0cmluZyh0aGlzLnVpZCkpOwogICAg
CiAgICByZXR1cm4g0LDQutC60YPQvC5kYXRhOwogIH0KfTsKLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQovLy8g0L3QtdGB0ZHRgiDQt9Cw0L/QuNGB0Ywg0LTQu9GPINGO0LfQtdGA0LAKY2xhc3Mg0K7Q
l9CV0KAgewogIHN0cmluZyDQuNC80Y87CiAgaW50IHVpZCA9IC0xLCBnaWQgPSAtMTsKICBzdHJp
bmcgaG9tZTsKICBzdHJpbmcgc2hlbGw7CiAgCiAgb3ZlcnJpZGUgc3RyaW5nIHRvU3RyaW5nKCkg
cHVyZSBAc2FmZSB7CiAgICBhdXRvINCw0LrQutGD0LwgPSBhcHBlbmRlciFzdHJpbmcoKTsKICAg
IAogICAg0LDQutC60YPQvC5wdXQodGhpcy7QuNC80Y8pOwogICAg0LDQutC60YPQvC5wdXQoIjo6
Iik7CiAgICDQsNC60LrRg9C8LnB1dCh0byFzdHJpbmcodGhpcy51aWQpKTsKICAgINCw0LrQutGD
0LwucHV0KCI6Iik7CiAgICDQsNC60LrRg9C8LnB1dCh0byFzdHJpbmcodGhpcy5naWQpKTsKICAg
INCw0LrQutGD0LwucHV0KCI6OiIpOwogICAgCiAgICBzdHJpbmcgaG9tZSA9IHJlcGxhY2UodGhp
cy5ob21lLCIvLyIsIi8iKTsKICAgINCw0LrQutGD0LwucHV0KGhvbWUpOwogICAg0LDQutC60YPQ
vC5wdXQoIjoiKTsKICAgINCw0LrQutGD0LwucHV0KHRoaXMuc2hlbGwpOwogICAgCiAgICByZXR1
cm4g0LDQutC60YPQvC5kYXRhOwogIH0KfTsKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vLyDQ
t9Cw0LTQsNGR0YIg0LrQvtC00Ysg0YHQvtCx0YvRgtC40LksINC40YHQv9C+0LvRjNC30L7QstCw
0L3QvdGL0LUg0LIg0LDQstGC0L7QvNCw0YLQtQpjbGFzcyDQodC+0LHRi9GC0LjRj9Ch0LrQsNC9
0LXRgNCwCnsKCiAgcHJvdGVjdGVkOgogIAogICAgICAvLy8g0YHQvtGB0YLQvtGP0L3QuNGPINCw
0LLRgtC+0LzQsNGC0LAsINC+0L3QuCDQttC1INC00LXQudGB0YLQstC40Y8KICAgICAgZW51bSDQ
odCe0KHQotCe0K/QndCY0K8gCgl7IEZBTFNFCgksINCd0JDQp9CQ0JvQrNCd0J7QlSwg0J/Qo9Ch
0KLQntCVCgksINCd0JDQp9CQ0JvQnl/Qk9Cg0KPQn9Cf0KsKCSwg0JrQm9CQ0KHQoV9PVQoJLCDQ
ktCl0J7QlF/Qkl/Qk9Cg0KPQn9Cf0KsKCSwg0JPQoNCj0J/Qn9CQCgksIF/Qk9Cg0KPQn9Cf0JBf
CgksINCT0KDQmNCUCgksINCn0JvQldCdCgksINCS0KXQntCUX9CSX9CQ0JrQmtCQ0KPQndCiCgks
IFNIRUxMCgksIFVJRAoJLCBHSUQKCSwgSE9NRQoJLCBQRVJTT05BCgksIE9SR0FDQwoJLCBQT1NJ
WEFDQwoJfTsKICAKICAgICAgLy8vINGB0L7QsdGL0YLQuNGPINC/0LXRgNC10LTQsNGO0YLRgdGP
INCyINCw0LLRgtC+0LzQsNGCINCyINC60L7RgNGC0LXQttC1CiAgICAgIGFsaWFzINCh0J7QkdCr
0KLQmNCVID0gVHVwbGUhKNCh0J7QodCi0J7Qr9Cd0JjQrywi0LrQvtC0X9GB0L7RgdGC0L7Rj9C9
0LjRjyIsICBzdHJpbmcsItC40LzRjyIpOwoKICAgICAgLy8vINC/0YDQvtCy0LXRgNC40YLRjCwg
0YfRgtC+INC60L7QtCDRgdC+0LHRi9GC0LjRjyDQsiDQutC+0YDRgtC10LbQtSDRgdC+0LLQv9Cw
0LTQsNC10YIg0YEg0YPQutCw0LfQsNC90L3Ri9C8LiBAcmV0dXJuINC00LB80L3QtdGCCiAgICAg
IGJvb2wg0YHQvtCx0YvRgtC40LXQodC+0LLQv9Cw0LTQsNC10YIo0KHQntCh0KLQntCv0J3QmNCv
INGB0L7RgdGC0L7Rj9C90LjQtSwg0KHQntCR0KvQotCY0JUg0LrQvtC0KSB7CgkgIGlmICjQutC+
0LQu0LrQvtC0X9GB0L7RgdGC0L7Rj9C90LjRjyA9PSDRgdC+0YHRgtC+0Y/QvdC40LUpCgkgICAg
ICByZXR1cm4gdHJ1ZTsKCSAgZWxzZQoJICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAK
ICAgIHByb3RlY3RlZDoKCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgINCh0J7QkdCr0KLQ
mNCVIG1hdGNoQShUKShUINGI0LDQsdC70L7QvSwg0KHQntCh0KLQntCv0J3QmNCvINC60L7QtCwg
Y2hhcltdINCy0YXQvtC0KSB7CiAgICAgICAgYXV0byBydiA9IG1hdGNoQWxsKNCy0YXQvtC0LCDR
iNCw0LHQu9C+0L0pOwogICAgICAgIGlmICghIHJ2LmVtcHR5KSB7CiAgICAgICAgICBpZiAocnYu
ZnJvbnQuY291bnQgPiAxKQogICAgICAgICAgewogICAgICAgICAgICAgIHN0cmluZyBzID0gcnYu
ZnJvbnRbMV0uaWR1cDsKICAgICAgICAgICAgICByZXR1cm4g0KHQntCR0KvQotCY0JUo0LrQvtC0
LCBzKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4g0KHQ
ntCR0KvQotCY0JUo0LrQvtC0LCIiKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgcmV0dXJuINCh0J7QkdCr0KLQmNCVKNCh0J7QodCi0J7Qr9Cd0JjQry5GQUxTRSwgIiIp
OwogICAgICAgIH0KICAgICAgfQogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp9OwovLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCmNsYXNzINCh0LrQsNC90LXRgNCc0LDRiNC40L0gOiDQodC+0LHRi9GC0LjR
j9Ch0LrQsNC90LXRgNCwCnsKcHJvdGVjdGVkOgogIGF1dG8g0YjQsNCx0LvQvtC9X9Cd0LDRh9Cw
0LvQvtCX0LDQv9C40YHQuCAgID0gcmVnZXgoYGRuOiB1aWQ9KFthQS16WiwwLTksXC0sXyxcJF0r
KSxvdT1Db21wdXRlcnMsZGM9KmApOwogIGF1dG8g0YjQsNCx0LvQvtC9X3VpZCAgICAgICAgICAg
ID0gcmVnZXgoYHVpZE51bWJlcjogKFxkKylgKTsKICAKICDQodCe0KHQotCe0K/QndCY0K8g0LJf
0L/QvtC30LjRhtC40LggPSDQodCe0KHQotCe0K/QndCY0K8u0J3QkNCn0JDQm9Cs0J3QntCVOwog
INCh0J7QkdCr0KLQmNCVINGB0L7QsdGL0YLQuNC1XzsKICAKICDQnNCQ0KjQmNCd0JAgICAgICAg
INC80LDRiNC40L3QsDsgLy8v0YLQtdC60YPRidC40Lkg0LrQsNC90LTQuNC00LDRggogIERMaXN0
IdCc0JDQqNCY0J3QkCAg0LzQsNGI0LjQvdGLOyAvLy8g0LLRgdC1INC90LDQudC00LXQvdC90YvQ
tQogIApwdWJsaWM6IAogICAgCiAgLy8vINC+0YfQuNGB0YLQuNGC0Ywg0YHQvtGB0YLQvtGP0L3Q
uNC1INGH0LjRgtCw0YLQtdC70Y8sINC00LvRjyDRgtC+0LPQviwg0YfRgtC+0LHRiyDQvNC+0LbQ
vdC+INCx0YvQu9C+INCx0Ysg0L3QsNGH0LDRgtGMINGH0YLQtdC90LjQtSDQtNGA0YPQs9C40YUg
0LPRgNGD0L/Qvy4KICB2b2lkIGNsZWFyKCkgewogICAg0YHQvtCx0YvRgtC40LVfID0g0KHQntCR
0KvQotCY0JUo0KHQntCh0KLQntCv0J3QmNCvLtCf0KPQodCi0J7QlSwgIiIpOwogICAgCiAgICDQ
vNCw0YjQuNC90YsuY2xlYXIoKTsKICAgINCyX9C/0L7Qt9C40YbQuNC4ID0g0KHQntCh0KLQntCv
0J3QmNCvLtCd0JDQp9CQ0JvQrNCd0J7QlTsKICB9CiAgCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
IC8vLyDQv9C+0LvRg9GH0LjRgtGMINGB0L/QuNGB0L7QuiDQvdCw0LnQtNC10L3QvdGL0YUg0LzQ
sNGI0LjQvS4gQHJldHVybiBETGlzdCHQnNCQ0KjQmNCd0JAKICBETGlzdCHQnNCQ0KjQmNCd0JAg
Z2V0KCkKICB7CiAgICByZXR1cm4g0LzQsNGI0LjQvdGLOwogIH0KICAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB2b2lk
IHBhcnNlIChjaGFyW10gcykgewogICAgCiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tXQogICAgICBib29sIGNoZWNrKFQpKFQgZSkgewogICAgICAgIGlm
IChlLtC60L7QtF/RgdC+0YHRgtC+0Y/QvdC40Y8gIT0g0KHQntCh0KLQntCv0J3QmNCvLkZBTFNF
KSB7CiAgICAgICAgICDRgdC+0LHRi9GC0LjQtV8gPSBlOwogICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgfSBlbHNlCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgCiAg
ICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXQogICAgICAK
ICAgIGlmICghIGNoZWNrKG1hdGNoQSjRiNCw0LHQu9C+0L1f0J3QsNGH0LDQu9C+0JfQsNC/0LjR
gdC4LCDQodCe0KHQotCe0K/QndCY0K8u0JLQpdCe0JRf0JJf0JDQmtCa0JDQo9Cd0KIsIHMpKSAp
CiAgICAgIGlmICghIGNoZWNrIChtYXRjaEEo0YjQsNCx0LvQvtC9X3VpZCwg0KHQntCh0KLQntCv
0J3QmNCvLlVJRCwgcykpKQogICAgICAgIHt9OwogICAgCiAgICBzd2l0Y2go0LJf0L/QvtC30LjR
htC40LgpIHsKICAgICAgCiAgICAgICAgY2FzZSDQodCe0KHQotCe0K/QndCY0K8u0J3QkNCn0JDQ
m9Cs0J3QntCVOgogICAgICAgICAgaWYgKNGB0L7QsdGL0YLQuNC1Xy7QutC+0LRf0YHQvtGB0YLQ
vtGP0L3QuNGPID09INCh0J7QodCi0J7Qr9Cd0JjQry7QktCl0J7QlF/Qkl/QkNCa0JrQkNCj0J3Q
oikgewogICAgICAgICAgICDQvNCw0YjQuNC90LAgPSBuZXcg0JzQkNCo0JjQndCQOwogICAgICAg
ICAgICDQvNCw0YjQuNC90LAu0LjQvNGPID0g0YHQvtCx0YvRgtC40LVfLtC40LzRjy5pZHVwOwog
ICAgICAgICAgICDQsl/Qv9C+0LfQuNGG0LjQuCA9INCh0J7QodCi0J7Qr9Cd0JjQry7QktCl0J7Q
lF/Qkl/QkNCa0JrQkNCj0J3QojsKICAgICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAg
IAogICAgICAgIGNhc2Ug0KHQntCh0KLQntCv0J3QmNCvLtCS0KXQntCUX9CSX9CQ0JrQmtCQ0KPQ
ndCiOgogICAgICAgICAgaWYgKNGB0L7QsdGL0YLQuNC1Xy7QutC+0LRf0YHQvtGB0YLQvtGP0L3Q
uNGPID09INCh0J7QodCi0J7Qr9Cd0JjQry5VSUQpIHsKICAgICAgICAgICAg0LzQsNGI0LjQvdCw
LnVpZCA9INGB0L7QsdGL0YLQuNC1Xy7QuNC80Y8udG8haW50OwogICAgICAgICAgICDQvNCw0YjQ
uNC90YsuaW5zZXJ0KNC80LDRiNC40L3QsCk7CiAgICAgICAgICAgINCyX9C/0L7Qt9C40YbQuNC4
ID0g0KHQntCh0KLQntCv0J3QmNCvLtCd0JDQp9CQ0JvQrNCd0J7QlTsKICAgICAgICAgIH0KICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGJyZWFr
OwogICAgfSAKICB9Cn07Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KY2xhc3Mg0KHQutCw0L3QtdGA
0K7Qt9C10YDQvtCyIDog0KHQvtCx0YvRgtC40Y/QodC60LDQvdC10YDQsAp7Cgpwcm90ZWN0ZWQ6
CgogIGF1dG8g0YjQsNCx0LvQvtC9X9Cd0LDRh9Cw0LvQvtCX0LDQv9C40YHQuCAgID0gcmVnZXgo
YGRuOiB1aWQ9KFthQS16WiwwLTksXC0sX10rKSxvdT1QZW9wbGUsZGM9KmApOwogIGF1dG8g0YjQ
sNCx0LvQvtC9X3NoZWxsICAgICAgICAgID0gcmVnZXgoYGxvZ2luU2hlbGw6ICgvW2FBLXpaLDAt
OSxcLSwvX10rKWApOwogIGF1dG8g0YjQsNCx0LvQvtC9X3VpZCAgICAgICAgICAgID0gcmVnZXgo
YHVpZE51bWJlcjogKFxkKylgKTsKICBhdXRvINGI0LDQsdC70L7QvV9naWQgICAgICAgICAgICA9
IHJlZ2V4KGBnaWROdW1iZXI6IChcZCspYCk7CiAgYXV0byDRiNCw0LHQu9C+0L1faG9tZSAgICAg
ICAgICAgPSByZWdleChgaG9tZURpcmVjdG9yeTogKC9bYUEtelosMC05LFwtLC9fLNCw0JAt0Y/Q
r10rKWApOwogICAgCiAgc3RhdGljINGI0LDQsdC70L7QvV9wb3NpeEFjY291bnQgPSBjdFJlZ2V4
IWBvYmplY3RDbGFzczogcG9zaXhBY2NvdW50YDsKICBzdGF0aWMg0YjQsNCx0LvQvtC9X29yZ2Fu
aXpQZXJzb249IGN0UmVnZXghYG9iamVjdENsYXNzOiBvcmdhbml6YXRpb25hbFBlcnNvbmA7CiAg
CiAgYm9vbCBmbGFnX3Bvc2l4X2FjY291bnQgPSBmYWxzZTsKICAKICDQodCe0KHQotCe0K/QndCY
0K8g0LJf0L/QvtC30LjRhtC40LggPSDQodCe0KHQotCe0K/QndCY0K8u0J3QkNCn0JDQm9Cs0J3Q
ntCVOwogIAogINCh0J7QkdCr0KLQmNCVINGB0L7QsdGL0YLQuNC1XzsKICAKICBETGlzdCHQrtCX
0JXQoCDRjtC30LXRgNGLOwkvLy8g0YHQv9C40YHQvtC6INC90LDQudC00LXQvdC90YvRhSDRjtC3
0LXRgNC+0LIKICDQrtCX0JXQoCAg0Y7Qt9C10YA7ICAgICAgICAgICAvLy8g0LTQu9GPINGC0LXQ
utGD0YnQtdCz0L4g0LrQsNC90LTQuNC00LDRgtCwCiAgCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIAogIHB1YmxpYzogCiAg
CiAgICB2b2lkIHBhcnNlIChjaGFyW10gcykgewogICAgCiAgICAgIGJvb2wgY2hlY2soVCkoVCBl
KSB7CglpZiAoZS7QutC+0LRf0YHQvtGB0YLQvtGP0L3QuNGPICE9INCh0J7QodCi0J7Qr9Cd0JjQ
ry5GQUxTRSkgewoJ0YHQvtCx0YvRgtC40LVfID0gZTsKCXJldHVybiB0cnVlOwogICAgICAgfSBl
bHNlCglyZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgCiAgICAgICAKICAgICAgIGlmICghIGNo
ZWNrKAoJCSAgICBtYXRjaEEo0YjQsNCx0LvQvtC9X9Cd0LDRh9Cw0LvQvtCX0LDQv9C40YHQuCwg
0KHQntCh0KLQntCv0J3QmNCvLtCS0KXQntCUX9CSX9CQ0JrQmtCQ0KPQndCiLCBzKQoJICAgICAg
ICAgICkKCSAgKQoJaWYgKCEgY2hlY2sgKG1hdGNoQSjRiNCw0LHQu9C+0L1faG9tZSwg0KHQntCh
0KLQntCv0J3QmNCvLkhPTUUsIHMpKSkKCSAgaWYgKCEgY2hlY2sgKG1hdGNoQSjRiNCw0LHQu9C+
0L1fc2hlbGwsINCh0J7QodCi0J7Qr9Cd0JjQry5TSEVMTCwgcykpKQoJICAgIGlmICghIGNoZWNr
IChtYXRjaEEo0YjQsNCx0LvQvtC9X3Bvc2l4QWNjb3VudCwg0KHQntCh0KLQntCv0J3QmNCvLlBP
U0lYQUNDLCBzKSkpCgkgICAgICBpZiAoISBjaGVjayAobWF0Y2hBKNGI0LDQsdC70L7QvV91aWQs
INCh0J7QodCi0J7Qr9Cd0JjQry5VSUQsIHMpKSkKCQlpZiAoISBjaGVjayAobWF0Y2hBKNGI0LDQ
sdC70L7QvV9naWQsINCh0J7QodCi0J7Qr9Cd0JjQry5HSUQsIHMpKSkKCQkgIHt9IDsKICAgIAog
ICAgICAvLyDRgdC+0LHRgdGC0LLQtdC90L3QviDRgNCw0LfQsdC+0YAgCiAgICAKLy8gd3JpdGVs
bigi0L/QvtC3ID0gIiwg0LJf0L/QvtC30LjRhtC40LgpOwoKICAgICAgc3dpdGNoKNCyX9C/0L7Q
t9C40YbQuNC4KSB7CiAgICAgIAoJY2FzZSDQodCe0KHQotCe0K/QndCY0K8u0J3QkNCn0JDQm9Cs
0J3QntCVOgoJCgkgINGO0LfQtdGAID0gbmV3INCu0JfQldCgOwoJCgkgIGlmICjRgdC+0LHRi9GC
0LjQtV8u0LrQvtC0X9GB0L7RgdGC0L7Rj9C90LjRjyA9PSDQodCe0KHQotCe0K/QndCY0K8u0JLQ
pdCe0JRf0JJf0JDQmtCa0JDQo9Cd0KIpIHsKCSAgICDRjtC30LXRgC7QuNC80Y8gPSDRgdC+0LHR
i9GC0LjQtV8u0LjQvNGPLmlkdXA7CgkgICAg0LJf0L/QvtC30LjRhtC40LggPSDQodCe0KHQotCe
0K/QndCY0K8u0JLQpdCe0JRf0JJf0JDQmtCa0JDQo9Cd0KI7CgkgICAgfQoJICBicmVhazsKICAg
ICAgCgljYXNlINCh0J7QodCi0J7Qr9Cd0JjQry7QktCl0J7QlF/Qkl/QkNCa0JrQkNCj0J3QojoK
CSAgCgkgIHN3aXRjaCjRgdC+0LHRi9GC0LjQtV8u0LrQvtC0X9GB0L7RgdGC0L7Rj9C90LjRjyl7
CgkgIAoJICAgIGNhc2Ug0KHQntCh0KLQntCv0J3QmNCvLtCS0KXQntCUX9CSX9CQ0JrQmtCQ0KPQ
ndCiOgoJICAgICAgaWYgKGZsYWdfcG9zaXhfYWNjb3VudCkgewoJICAgICAg0Y7Qt9C10YDRiy5p
bnNlcnQo0Y7Qt9C10YApOwoJICAgICAg0Y7Qt9C10YAgPSBuZXcg0K7Ql9CV0KA7CgoJICAgICAg
ZmxhZ19wb3NpeF9hY2NvdW50ID0gZmFsc2U7CgkgICAgICDRjtC30LXRgC7QuNC80Y8gPSDRgdC+
0LHRi9GC0LjQtV8u0LjQvNGPLmlkdXA7CgkgICAgICAKCSAgICAgINCyX9C/0L7Qt9C40YbQuNC4
ID0g0KHQntCh0KLQntCv0J3QmNCvLtCS0KXQntCUX9CSX9CQ0JrQmtCQ0KPQndCiOwoJICAgIH0K
CSAgICBicmVhazsKCSAgICAKCSAgICBjYXNlINCh0J7QodCi0J7Qr9Cd0JjQry5IT01FOgoJICAg
ICAg0Y7Qt9C10YAuaG9tZSA9INGB0L7QsdGL0YLQuNC1Xy7QuNC80Y8uaWR1cDsKCSAgICAgIGJy
ZWFrOwoJICAgICAgCgkgICAgY2FzZSDQodCe0KHQotCe0K/QndCY0K8uU0hFTEw6CgkgICAgICDR
jtC30LXRgC5zaGVsbCA9INGB0L7QsdGL0YLQuNC1Xy7QuNC80Y8uaWR1cDsKCSAgICAgIGJyZWFr
OwoJICAgICAgCgkgICAgY2FzZSDQodCe0KHQotCe0K/QndCY0K8uUE9TSVhBQ0M6CgkgICAgICBm
bGFnX3Bvc2l4X2FjY291bnQgPSB0cnVlOwoJICAgICAgYnJlYWs7CgkgICAgICAKCSAgICBjYXNl
INCh0J7QodCi0J7Qr9Cd0JjQry5VSUQ6CgkgICAgICDRjtC30LXRgC51aWQgPSDRgdC+0LHRi9GC
0LjQtV8u0LjQvNGPLnRvIWludDsKCSAgICAgIGJyZWFrOwoJICAgICAgCgkgICAgY2FzZSDQodCe
0KHQotCe0K/QndCY0K8uR0lEOgoJICAgICAg0Y7Qt9C10YAuZ2lkID0g0YHQvtCx0YvRgtC40LVf
LtC40LzRjy50byFpbnQ7CgkgICAgICBicmVhazsKCSAgICAgIAoJICAgIGRlZmF1bHQ6CgkgICAg
ICBicmVhazsKCSAgfQoJICAKCWRlZmF1bHQ6CgkgIGJyZWFrOwogICAgICB9CiAgICAKICAgIAog
ICAgfSAvL3BhcnNlIF0KICAgIAogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvKiog0L/QvtGB
0LvQtdC00L3Rj9GPINC30LDQv9C40YHRjCDQvNC+0LbQtdGCINCx0YvRgtGMINC90LUg0L/QvtC8
0LXRidC10L3QsCDQsiDRgdC/0LjRgdC+0LosINGCLtC6LiDQv9GA0L7QstC10YDQutCwINC90LAg
cG9zaXhBY2NvdW50INC80L7QttC10YIg0LHRi9GC0Ywg0LIg0LvRjtCx0L7QvCDQvNC10YHRgtC1
CgnRhNGD0L3QutGG0LjRjyBmbHVzaCgpINC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+INC/0L7Q
vNC10YnQsNC10YIg0L/QvtGB0LvQtdC00L3RjtGOINC30LDQv9C40YHRjCDQsiDRgdC/0LjRgdC+
0LouINCU0L7Qu9C20L3QsCDQsdGL0YLRjCDQstGL0LfQstCw0L3QsCDQv9C+0YHQu9C1INGA0LDQ
t9Cx0L7RgNCwINCy0YHQtdGFCgnQstGF0L7QtNC90YvRhSDRgdGC0YDQvtC6CiAgICAqLwogICAg
dm9pZCBmbHVzaCgpIHsKICAgICAgaWYgKGZsYWdfcG9zaXhfYWNjb3VudCkgewoJ0Y7Qt9C10YDR
iy5pbnNlcnQo0Y7Qt9C10YApOwoJZmxhZ19wb3NpeF9hY2NvdW50ID0gZmFsc2U7CiAgICAgIH0K
ICAgIH0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIAogIC8vLyDQvtGH0LjRgdGC0LjRgtGMINGB
0L7RgdGC0L7Rj9C90LjQtSDRh9C40YLQsNGC0LXQu9GPLCDQtNC70Y8g0YLQvtCz0L4sINGH0YLQ
vtCx0Ysg0LzQvtC20L3QviDQsdGL0LvQviDQsdGLINC90LDRh9Cw0YLRjCDRh9GC0LXQvdC40LUg
0LTRgNGD0LPQuNGFINCz0YDRg9C/0L8uCiAgdm9pZCBjbGVhcigpIHsKICAgINGB0L7QsdGL0YLQ
uNC1XyA9INCh0J7QkdCr0KLQmNCVKNCh0J7QodCi0J7Qr9Cd0JjQry7Qn9Cj0KHQotCe0JUsICIi
KTsKICAgIAogICAg0Y7Qt9C10YDRiy5jbGVhcigpOwogICAg0LJf0L/QvtC30LjRhtC40LggPSDQ
odCe0KHQotCe0K/QndCY0K8u0J3QkNCn0JDQm9Cs0J3QntCVOwogIH0KICAKICAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAgLy8vINC/0L7Qu9GD0YfQuNGC0Ywg0YHQv9C40YHQvtC6INC90LDQudC00LXQ
vdC90YvRhSDQs9GA0YPQv9C/LiBAcmV0dXJuIERMaXN0IdCT0KDQo9Cf0J/QkAogIERMaXN0IdCu
0JfQldCgIGdldCgpCiAgewogICAgcmV0dXJuINGO0LfQtdGA0Ys7CiAgfQoKfTsKCi8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLy8vINC60LvQsNGB0YEg0YfQuNGC0LDRgtC10LvRjyBsZGFwINC+0YLQ
stC10YLQsCDQvdCwINC/0YDQtdC00LzQtdGCIHBvc2l4R3JvdXAg0Lgg0LjRhSDRh9C70LXQvdC+
0LIuIGxkaWYg0YHRgtGA0L7QutC4INGB0LvQtdC00YPQtdGCINC/0LXRgNC10LTQsNCy0LDRgtGM
INCyIHBhcnNlOyDQutC+0LPQtNCwINGB0YLRgNC+0LrQuCDQt9Cw0LrQvtC90YfQsNGC0YHRjywg
0YHQv9C40YHQvtC6INCz0YDRg9C/0L8g0LzQvtC20L3QviDQv9C+0LvRg9GH0LjRgtGMINC80LXR
gtC+0LTQvtC8IGdldC4KY2xhc3Mg0KHQutCw0L3QtdGA0JPRgNGD0L/QvyA6INCh0L7QsdGL0YLQ
uNGP0KHQutCw0L3QtdGA0LAKewoKcHJvdGVjdGVkOgogIAogIHN0YXRpYyDRiNCw0LHQu9C+0L1f
0LPRgNGD0L/QvyA9IGN0UmVnZXghYGRuOiBvdT1Hcm91cCxkYz0qYDsKICBzdGF0aWMg0YjQsNCx
0LvQvtC9X9C60LvQsNGB0YHQsCA9IGN0UmVnZXghYG9iamVjdENsYXNzOiBvcmdhbml6YXRpb25h
bFVuaXRgOwogIHN0YXRpYyDRiNCw0LHQu9C+0L1f0K3RgtC+0JPRgNGD0L/Qv9CwID0gY3RSZWdl
eCFgb3U6IEdyb3VwYDsKCiAgYXV0byDRiNCw0LHQu9C+0L1f0J7Qv9C40YHQsNC90LjQtdCT0YDR
g9C/0L/RiyA9IHJlZ2V4KGBkbjogY249KFthQS16WiwwLTksXC0sX10rKSxvdT1Hcm91cCxkYz0q
YCk7CiAgCiAgYXV0byDRiNCw0LHQu9C+0L1f0KfQu9C10L3QsD0gcmVnZXgoYG1lbWJlclVpZDog
KFthQS16WiwwLTksXC0sX10rKWApOwogIGF1dG8g0YjQsNCx0LvQvtC9X9CT0KDQmNCUID0gcmVn
ZXgoYGdpZE51bWJlcjogKFswLTldKylgKTsKICAKICAKICAKICDQodCe0KHQotCe0K/QndCY0K8g
0LJf0L/QvtC30LjRhtC40LggPSDQodCe0KHQotCe0K/QndCY0K8u0J3QkNCn0JDQm9Cs0J3QntCV
OwogIAogIERMaXN0IdCT0KDQo9Cf0J/QkCDQs9GA0YPQv9C/0Ys7CiAg0JPQoNCj0J/Qn9CQINGC
0LXQul/Qs9GA0YPQv9C/0LA7CiAgCiAgLy8g0YfQuNGC0LDRjiDQuNC3IHN0ZGluLCDQstGL0YXQ
vtC20YMsINC60LDQuiDRgtC+0LvRjNC60L4g0Y3RgtC+INCx0YPQtNC10YIg0L/QvtGF0L7QttC1
INC90LAg0L7Qv9GA0LXQtNC10LvQtdC90LjQtSDQs9GA0YPQv9C/CiAgCiAgc3RyaW5nINC40LzR
j1/Qs9GA0YPQv9C/0Ys7CiAgc3RyaW5nINC40LzRj1/Rh9C70LXQvdCwOwogIGludCAgICBnaWQ7
CiAgCiAg0KHQntCR0KvQotCY0JUg0YHQvtCx0YvRgtC40LVfOwoKcHVibGljOgoKICAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAgdGhpcygpIHsKICAgINCz0YDRg9C/0L/Riy5jbGVhcigpOwogIH0KICAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAgCiAgLy8vINC+0YfQuNGB0YLQuNGC0Ywg0YHQvtGB0YLQvtGP
0L3QuNC1INGH0LjRgtCw0YLQtdC70Y8sINC00LvRjyDRgtC+0LPQviwg0YfRgtC+0LHRiyDQvNC+
0LbQvdC+INCx0YvQu9C+INCx0Ysg0L3QsNGH0LDRgtGMINGH0YLQtdC90LjQtSDQtNGA0YPQs9C4
0YUg0LPRgNGD0L/Qvy4KICB2b2lkIGNsZWFyKCkgewogICAg0YHQvtCx0YvRgtC40LVfID0g0KHQ
ntCR0KvQotCY0JUo0KHQntCh0KLQntCv0J3QmNCvLtCf0KPQodCi0J7QlSwgIiIpOwogICAgCiAg
ICDQs9GA0YPQv9C/0YsuY2xlYXIoKTsKICAgINCyX9C/0L7Qt9C40YbQuNC4ID0g0KHQntCh0KLQ
ntCv0J3QmNCvLtCd0JDQp9CQ0JvQrNCd0J7QlTsKICB9CiAgCiAgLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogIC8vLyDQv9C+0LvRg9GH0LjRgtGMINGB0L/QuNGB0L7QuiDQvdCw0LnQtNC10L3QvdGL0YUg
0LPRgNGD0L/Qvy4gQHJldHVybiBETGlzdCHQk9Cg0KPQn9Cf0JAKICBETGlzdCHQk9Cg0KPQn9Cf
0JAgZ2V0KCkKICB7CiAgICByZXR1cm4g0LPRgNGD0L/Qv9GLOwogIH0KICAKICAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogIAogIC8vLyDQv9GA0LjQvdC40LzQsNC10YIgbGRpZiAtLSDRgdGC0YDQvtC6
0LggKNGB0YLRgNC+0LrQsCDQt9CwINGB0YLRgNC+0LrQvtC5KS4g0JXRgdC70Lgg0YHRgtGA0L7Q
utGDINC90LUg0L/QvtC70YPRh9C40LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINC60LDQuiDQ
utC+0YDRgNC10LrRgtC90YPRjiwg0L3QuNGH0LXQs9C+INC90LUg0LTQtdC70LDRgtGMLgogIHZv
aWQgcGFyc2UoY2hhcltdIHMpCiAgewoKICBhdXRvIHJ2ID0gbWF0Y2hGaXJzdChzLCDRiNCw0LHQ
u9C+0L1f0LPRgNGD0L/Qvyk7CiAgCiAgICBpZiAoISBydi5lbXB0eSkgewogICAgICDRgdC+0LHR
i9GC0LjQtV8gPSDQodCe0JHQq9Ci0JjQlSjQodCe0KHQotCe0K/QndCY0K8u0J3QkNCn0JDQm9Ce
X9CT0KDQo9Cf0J/QqywgIiIpOwogICAgfSBlbHNlIHsKICAgICAgcnYgPSBtYXRjaEZpcnN0KHMs
INGI0LDQsdC70L7QvV/QutC70LDRgdGB0LApOwogICAgICBpZiAoISBydi5lbXB0eSkgewogICAg
ICAgINGB0L7QsdGL0YLQuNC1XyA9INCh0J7QkdCr0KLQmNCVKNCh0J7QodCi0J7Qr9Cd0JjQry7Q
mtCb0JDQodChX09VLCAiIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcnYgPSBtYXRjaEZpcnN0
KHMsINGI0LDQsdC70L7QvV/QrdGC0L7Qk9GA0YPQv9C/0LApOwogICAgICAgIGlmICghIHJ2LmVt
cHR5KSB7CiAgICAgICAgICDRgdC+0LHRi9GC0LjQtV8gPSDQodCe0JHQq9Ci0JjQlSjQodCe0KHQ
otCe0K/QndCY0K8u0JLQpdCe0JRf0JJf0JPQoNCj0J/Qn9CrLCAiIik7CiAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgIGF1dG8gcnMgPSBtYXRjaEFsbChzLCDRiNCw0LHQu9C+0L1f0J7Qv9C40YHQ
sNC90LjQtdCT0YDRg9C/0L/Riyk7CiAgICAgICAgICBpZiAoISBycy5lbXB0eSkgewogICAgICAg
ICAgICDRgdC+0LHRi9GC0LjQtV8gPSDQodCe0JHQq9Ci0JjQlSjQodCe0KHQotCe0K/QndCY0K8u
0JPQoNCj0J/Qn9CQLCBycy5mcm9udFsxXS5pZHVwKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgIHJzID0gbWF0Y2hBbGwocywg0YjQsNCx0LvQvtC9X9Cn0LvQtdC90LApOwogICAgICAg
ICAgICBpZiAoISBycy5lbXB0eSkgewogICAgICAgICAgICAgINGB0L7QsdGL0YLQuNC1XyA9INCh
0J7QkdCr0KLQmNCVKNCh0J7QodCi0J7Qr9Cd0JjQry7Qp9Cb0JXQnSwgcnMuZnJvbnRbMV0uaWR1
cCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBycyA9IG1hdGNoQWxsKHMsINGI0LDQ
sdC70L7QvV/Qk9Cg0JjQlCk7CiAgICAgICAgICAgIGlmICghIHJzLmVtcHR5KXsKICAgICAgICAg
ICAgICDRgdC+0LHRi9GC0LjQtV8gPSDQodCe0JHQq9Ci0JjQlSjQodCe0KHQotCe0K/QndCY0K8u
0JPQoNCY0JQsIHJzLmZyb250WzFdLmlkdXApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICDRgdC+0LHRi9GC0LjQtV8gPSDQodCe0JHQq9Ci0JjQlSjQodCe0KHQotCe0K/QndCY0K8u
0J/Qo9Ch0KLQntCVLCAiIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIH0KICAgIH0KICB9CgogICAgICBzd2l0Y2ggKNCyX9C/0L7Qt9C40YbQuNC4KSB7CiAgICAg
IAogICAgICAgIGNhc2Ug0KHQntCh0KLQntCv0J3QmNCvLtCd0JDQp9CQ0JvQrNCd0J7QlToKLy8g
0L3QtSDQvdCw0LTQviEg0Y3RgtC4INGB0L7RgdGC0L7Rj9C90LjRjyDQsNCy0YLQvtC80LDRgtCw
INC/0L7Qv9Cw0LvQuCDRgdGO0LTQsCDQv9C+INC+0YjQuNCx0LrQtSwg0L3QtSDRgtGD0LTQsCDQ
v9C+0YHQvNC+0YLRgNC10LssINC60LDQutC+0Lkg0L7RgtCy0LXRgiDQstC+0LfQstGA0LDRidCw
0LXRgiBsZGFwc2VhcmNoICIoJihvYmplY3RDbGFzcz1wb3NpeEdyb3VwKSgKLy8gICAgICAgICAg
IGlmICjRgdC+0LHRi9GC0LjQtdCh0L7QstC/0LDQtNCw0LXRgijQodCe0KHQotCe0K/QndCY0K8u
0J3QkNCn0JDQm9CeX9CT0KDQo9Cf0J/Qqywg0YHQvtCx0YvRgtC40LVfKSkgewovLyAgICAgICAg
ICAgICDQsl/Qv9C+0LfQuNGG0LjQuCA9INCh0J7QodCi0J7Qr9Cd0JjQry7QndCQ0KfQkNCb0J5f
0JPQoNCj0J/Qn9CrOwovLyAgICAgICAgICAgfQovLyDQv9C10YDQtdC/0LjRgdGL0LLQsNGOINGB
0YDQsNC30YMg0L3QsCDRgdC+0YHRgtC+0Y/QvdC40LUg0JPQoNCj0J/Qn9CQOgoJICBpZiAo0YHQ
vtCx0YvRgtC40LXQodC+0LLQv9Cw0LTQsNC10YIo0KHQntCh0KLQntCv0J3QmNCvLtCT0KDQo9Cf
0J/QkCwg0YHQvtCx0YvRgtC40LVfKSkgewogICAgICAgICAgICDQsl/Qv9C+0LfQuNGG0LjQuCA9
INCh0J7QodCi0J7Qr9Cd0JjQry7Qk9Cg0KPQn9Cf0JA7CiAgICAgICAgICAgINC40LzRj1/Qs9GA
0YPQv9C/0YsgPSDRgdC+0LHRi9GC0LjQtV8u0LjQvNGPOwogICAgICAgICAgfQogICAgICAgIGJy
ZWFrOwogICAgICAgIAogICAgICAgIGNhc2Ug0KHQntCh0KLQntCv0J3QmNCvLtCf0KPQodCi0J7Q
lToKICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAKICAgICAgICBjYXNlINCh0J7QodCi0J7Q
r9Cd0JjQry7QndCQ0KfQkNCb0J5f0JPQoNCj0J/Qn9CrOgogICAgICAgICAgaWYgKNGB0L7QsdGL
0YLQuNC10KHQvtCy0L/QsNC00LDQtdGCKNCh0J7QodCi0J7Qr9Cd0JjQry7QmtCb0JDQodChX09V
LCDRgdC+0LHRi9GC0LjQtV8pKSB7CiAgICAgICAgICAgINCyX9C/0L7Qt9C40YbQuNC4ID0g0KHQ
ntCh0KLQntCv0J3QmNCvLtCa0JvQkNCh0KFfT1U7CiAgICAgICAgICB9CiAgICAgICAgYnJlYWs7
CiAgICAgICAgICAKICAgICAgICBjYXNlINCh0J7QodCi0J7Qr9Cd0JjQry7QmtCb0JDQodChX09V
OgogICAgICAgICAgaWYgKNGB0L7QsdGL0YLQuNC10KHQvtCy0L/QsNC00LDQtdGCKNCh0J7QodCi
0J7Qr9Cd0JjQry7QktCl0J7QlF/Qkl/Qk9Cg0KPQn9Cf0KssINGB0L7QsdGL0YLQuNC1XykpIHsK
ICAgICAgICAgICAg0LJf0L/QvtC30LjRhtC40LggPSDQodCe0KHQotCe0K/QndCY0K8u0JLQpdCe
0JRf0JJf0JPQoNCj0J/Qn9CrOwogICAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICAgICAg
CiAgICAgICAgY2FzZSDQodCe0KHQotCe0K/QndCY0K8u0JLQpdCe0JRf0JJf0JPQoNCj0J/Qn9Cr
OgogICAgICAgICAgaWYgKNGB0L7QsdGL0YLQuNC10KHQvtCy0L/QsNC00LDQtdGCKNCh0J7QodCi
0J7Qr9Cd0JjQry7Qk9Cg0KPQn9Cf0JAsINGB0L7QsdGL0YLQuNC1XykpIHsKICAgICAgICAgICAg
0LJf0L/QvtC30LjRhtC40LggPSDQodCe0KHQotCe0K/QndCY0K8u0JPQoNCj0J/Qn9CQOwoKICAg
ICAgICAgICAg0LjQvNGPX9Cz0YDRg9C/0L/RiyA9INGB0L7QsdGL0YLQuNC1Xy7QuNC80Y87Cgog
ICAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICAgICAgCiAgICAgICAgY2FzZSDQodCe0KHQ
otCe0K/QndCY0K8u0JPQoNCj0J/Qn9CQOgoKICAgICAgICAgINGC0LXQul/Qs9GA0YPQv9C/0LAg
PSBuZXcg0JPQoNCj0J/Qn9CQKNC40LzRj1/Qs9GA0YPQv9C/0YsuZHVwKTsKCiAgICAgICAgICDQ
s9GA0YPQv9C/0YsuaW5zZXJ0KNGC0LXQul/Qs9GA0YPQv9C/0LApOwogICAgICAgICAgCiAgICAg
ICAgICDQsl/Qv9C+0LfQuNGG0LjQuCA9INCh0J7QodCi0J7Qr9Cd0JjQry5f0JPQoNCj0J/Qn9CQ
XzsKICAgICAgICBicmVhazsKICAgICAgICAKICAgICAgICBjYXNlINCh0J7QodCi0J7Qr9Cd0JjQ
ry5f0JPQoNCj0J/Qn9CQXzoKICAgICAgICAgIHsKICAgICAgICAgICAgc3dpdGNoKNGB0L7QsdGL
0YLQuNC1Xy7QutC+0LRf0YHQvtGB0YLQvtGP0L3QuNGPKSB7CiAgICAgICAgICAgICAgY2FzZSDQ
odCe0KHQotCe0K/QndCY0K8u0KfQm9CV0J06CiAgICAgICAgICAgICAgICDQuNC80Y9f0YfQu9C1
0L3QsCA9INGB0L7QsdGL0YLQuNC1Xy7QuNC80Y8uZHVwOwoKICAgICAgICAgICAgICAgINCyX9C/
0L7Qt9C40YbQuNC4ID0g0KHQntCh0KLQntCv0J3QmNCvLtCn0JvQldCdOwogICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgIAogICAgICAgICAgICAgIGNhc2Ug0KHQntCh0KLQntCv0J3Q
mNCvLtCf0KPQodCi0J7QlToKICAgICAgICAgICAgICAgINCyX9C/0L7Qt9C40YbQuNC4ID0g0KHQ
ntCh0KLQntCv0J3QmNCvLl/Qk9Cg0KPQn9Cf0JBfOwogICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgIAogICAgICAgICAgICAgIGNhc2Ug0KHQntCh0KLQntCv0J3QmNCvLtCT0KDQo9Cf
0J/QkDoKICAgICAgICAgICAgICAgINCyX9C/0L7Qt9C40YbQuNC4ID0g0KHQntCh0KLQntCv0J3Q
mNCvLtCT0KDQo9Cf0J/QkDsKICAgICAgICAgICAgICAgINC40LzRj1/Qs9GA0YPQv9C/0YsgPSDR
gdC+0LHRi9GC0LjQtV8u0LjQvNGPOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
IAogICAgICAgICAgICAgIGNhc2Ug0KHQntCh0KLQntCv0J3QmNCvLtCT0KDQmNCUOgogICAgICAg
ICAgICAgICAgZ2lkID0g0YHQvtCx0YvRgtC40LVfLtC40LzRjy50byFpbnQ7CiAgICAgICAgICAg
ICAgICDQsl/Qv9C+0LfQuNGG0LjQuCA9INCh0J7QodCi0J7Qr9Cd0JjQry7Qk9Cg0JjQlDsKICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAKICAgICAgICAgICAgICBkZWZhdWx0IDog
YnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgICAK
ICAgICAgICBjYXNlINCh0J7QodCi0J7Qr9Cd0JjQry7Qk9Cg0JjQlDoKICAgICAgICAgINGC0LXQ
ul/Qs9GA0YPQv9C/0LAuZ2lkID0gZ2lkOwoKICAgICAgICAgIHN3aXRjaCAo0YHQvtCx0YvRgtC4
0LVfLtC60L7QtF/RgdC+0YHRgtC+0Y/QvdC40Y8pIHsKICAgICAgICAgICAgY2FzZSDQodCe0KHQ
otCe0K/QndCY0K8u0KfQm9CV0J06CiAgICAgICAgICAgICAg0LjQvNGPX9GH0LvQtdC90LAgPSDR
gdC+0LHRi9GC0LjQtV8u0LjQvNGPLmR1cDsKICAgICAgICAgICAgICDQsl/Qv9C+0LfQuNGG0LjQ
uCA9INCh0J7QodCi0J7Qr9Cd0JjQry7Qp9Cb0JXQnTsKICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICBkZWZhdWx0IDoKICAgICAgICAgICAg0LJf0L/QvtC30LjRhtC40LggPSDQodCe0KHQotCe
0K/QndCY0K8uX9CT0KDQo9Cf0J/QkF87CiAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAg
ICAgICBicmVhazsKICAgICAgICAKICAgICAgICBjYXNlINCh0J7QodCi0J7Qr9Cd0JjQry7Qp9Cb
0JXQnToKICAgICAgICAgINGC0LXQul/Qs9GA0YPQv9C/0LAu0YfQu9C10L3Riy5pbnNlcnQo0LjQ
vNGPX9GH0LvQtdC90LAuaWR1cCk7CgogICAgICAgICAg0LJf0L/QvtC30LjRhtC40LggPSDQodCe
0KHQotCe0K/QndCY0K8uX9CT0KDQo9Cf0J/QkF87CiAgICAgICAgICBicmVhazsKICAgICAgICAK
ICAgICAgICBkZWZhdWx0OiBicmVhazsKCiAgICB9CiAgCiAgfSAvLyBdIC0tLSBwYXJzZQogIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KICAKfTsgLy8gXSBjbGFzcyDQodC60LDQvdC10YDQk9GA0YPQv9C/
Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgCnZvaWQgbWFpbihzdHJpbmdbXSBhcmdzKSB7
CgogIAogIGlmIChhcmdzLmNvdW50ID4gMSkgewogIAogICAgc3dpdGNoKGFyZ3NbMV0pIHsKICAg
ICAgY2FzZSAiZ3JvdXAiOgoJYXV0byDRgdC60LDQvdC10YAgPSBuZXcg0KHQutCw0L3QtdGA0JPR
gNGD0L/QvygpOwoJCglmb3JlYWNoIChjaGFyW10gcyA7IHN0ZGluLmJ5TGluZSgpKSB7CgkgINGB
0LrQsNC90LXRgC5wYXJzZShzKTsKCX0gCgkKCWlmICjRgdC60LDQvdC10YAuZ2V0KCkuZW1wdHkp
CgkgIGV4aXQoMyk7CgkKCWZvcmVhY2go0JPQoNCj0J/Qn9CQIGk7INGB0LrQsNC90LXRgC5nZXQo
KSkgewoJICB3cml0ZWxuKGkpOwoJfQoJCglleGl0KDApOwoJCglicmVhazsKCQoJCiAgICAgIGNh
c2UgInBhc3N3ZCI6CglhdXRvINGB0LrQsNC90LXRgCA9IG5ldyDQodC60LDQvdC10YDQrtC30LXR
gNC+0LIoKTsKCQoJZm9yZWFjaCAoY2hhcltdIHMgOyBzdGRpbi5ieUxpbmUoKSkgewoJICDRgdC6
0LDQvdC10YAucGFyc2Uocyk7Cgl9CgnRgdC60LDQvdC10YAuZmx1c2goKTsKCQoJaWYgKNGB0LrQ
sNC90LXRgC5nZXQoKS5lbXB0eSkKCSAgZXhpdCgzKTsKCQoJZm9yZWFjaCAo0K7Ql9CV0KAgaTsg
0YHQutCw0L3QtdGALmdldCgpKSB7CgkgIHdyaXRlbG4oaSk7Cgl9CgkKCWV4aXQoMCk7CgkKCWJy
ZWFrOwoJCiAgICAgIGNhc2UgIndzIjoKICAgICAgICBhdXRvINGB0LrQsNC90LXRgCA9IG5ldyDQ
odC60LDQvdC10YDQnNCw0YjQuNC9KCk7CiAgICAgICAgZm9yZWFjaCAoY2hhcltdIHMgOyBzdGRp
bi5ieUxpbmUoKSkgewogICAgICAgICAg0YHQutCw0L3QtdGALnBhcnNlKHMpOwogICAgICAgIH0K
ICAgICAgICAKICAgICAgICBpZiAo0YHQutCw0L3QtdGALmdldCgpLmVtcHR5KXsKICAgICAgICAg
IGV4aXQoMyk7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKNCc0JDQqNCY0J3QkCBpOyDRgdC6
0LDQvdC10YAuZ2V0KCkpIHsKICAgICAgICAgIHdyaXRlbG4oaSk7CiAgICAgICAgfQogICAgICAg
IAogICAgICAgIGV4aXQoMCk7CiAgICAgICAgYnJlYWs7CiAgICAgIAogICAgICAKICAgICAgZGVm
YXVsdDoKCWV4aXQoMSk7CglicmVhazsKICAgIH0KICAKICAgIAogIAogIH0KICAKICAvLyBhdXRv
INGB0LrQsNC90LXRgCA9IG5ldyDQodC60LDQvdC10YDQk9GA0YPQv9C/KCk7CiAgCiAgCn0=
</data>

          </attachment>
      

    </bug>

</bugzilla>