Content-Type: multipart/related; start=; boundary=----------NhxuVym9ZtzwWYGOQ8EEnk Content-Location: http://forum.qip.ru/showthread.php?t=25198 Subject: =?utf-8?Q?sBoltun=20-=20=D1=80=D0=B0=D0=B7=D0=B3=D0=BE=D0=B2=D0=BE=D1=80=D0=BD=D1=8B=D0=B9=20=D0=B1=D0=BE=D1=82=20[=D0=B1=D0=B5=D1=82=D0=B0=20=D1=82=D0=B5=D1=81=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5]=20-=20QIP=20Forum?= MIME-Version: 1.0 ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=showthread.htm Content-Type: text/html; charset=windows-1251; name=showthread.htm Content-Id: Content-Location: http://forum.qip.ru/showthread.php?t=25198 Content-Transfer-Encoding: 8bit sBoltun - разговорный бот [бета тестирование] - QIP Forum
QIP Home QIP Forum

Вернуться   QIP Forum > Все для QIP Infium > QIP Infium. Доступные модули и утилиты. Plugins.
Добро пожаловать, opiums
Ваш последний визит: Сегодня в 11:45
Личные сообщения: Новых 0, всего 2.

QIP Infium. Доступные модули и утилиты. Plugins. Здесь постить сами модули(плагины), утилиты и темы для их обсуждения.

Ответ
 
Опции темы Поиск в этой теме Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.91. Опции просмотра
Старый 17.04.2008, 04:36   #1
QIP Elder
 
Аватар для Shedko
 
Регистрация: 25.10.2006
Сообщений: 655
Quote selected
По умолчанию sBoltun - разговорный бот [бета тестирование]

Чат-бот для QIP Infium, который работает и как разговорный бот для контактов, а также как разговорный бот для КОНФЕРЕНЦИЙ.

Основные возможности:
  • работает как в простых беседах так и в Конференциях;
  • 3 движка ботов;
  • возможность "на лету" включать и выключать бота из интерфейса программы;
  • задание списка пользователей с кем бот никогда не будет говорить;
  • задание списка "говорунов" с кем всегда будет говорить бот;
  • возможность в любой момент включить/выключить бот во время беседы;
  • возможность задания списка игнорирования для людей в конференциях, также в этот список лучше заносить и других говорящих ботов, чтобы небыло хлама в сообщениях;
  • можно задать время на задержку перед ответом;
  • выключается при указанных условиях видимости;
  • может включаться на всех пользователей при определенных статусах;
  • может отвечать и только людям не из списка контактов;
Снимки окон настройки плагина:


Ставить рекомендую только опытным пользователям, остальные - нормальные люди, дождитесь хотя бы первой версии без статуса бета.


СКАЧАТЬ 0.2.6:
sBoltun_0261.7z - 373 КБ.
Зеркало: sBoltun_0261.7z - 373 КБ.
Требуется QIP Infium от 9012



SmartBot для sBoltun (дополнительный движок)


Установка
1. Распаковать содержимое архива в папку qip infium\plugins\sBoltun\
2. Из папки с плагином запустить файл "Register.bat" (это регистрация движка СhatCore в системе), если нет прав на запуск этого файла, то не выбирайте в качестве движка ChatCore, плагин будет работать и без него;
3. Обязательно зайти в настройки бота и выставить необходимые опции; Также очень желательно после того как настроили бота первый раз включить и выключить плагин в модулях QIP Infium .
4. Все.

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


Дополнительные базы для SmartBot



История версий

текущий to-do лист =)

Исходный код закрыт.
sBoltun_026_src.7z
__________________
Programming is like sex: one mistake and you have to support it for life.

Последний раз редактировалось Shedko, 17.05.2009 в 00:23. Причина: Обновил ссылки
Shedko вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 17.04.2008, 06:08   #2
QIP Newcomer
 
Аватар для Knight_Rider
 
Регистрация: 28.01.2008
Сообщений: 107
Отправить сообщение для Knight_Rider с помощью ICQ Send Message via Jabber to Knight_Rider
Quote selected
По умолчанию

О, щас потестим

добавлено через 46 минут
и так замечания, вопросы и пожелания:
З. Когда выбираю 1-й или 3-й пункт из окна сообщений и потом повторно зайти в эти настройки то кнопка "включить" будет подсвечена
З. Натравил в Jabber'e самого на себя. Начал повторять сам за собой. И база пока маловата
В. Какого пола бот? И будет ли возможность задавать ему пол?
П. Хотелось бы выбирать статус, при котором будет работать бот. К примеру ставлю "Готов поболтать" и бот отвечает всем, кроме списка игнорируемых

добавлено через 22 минуты
П. Столкнулся с такой проблемой. Ко всему бот не определяет пол собеседника :(. Девченке отвечает "Сам такой"

Последний раз редактировалось Knight_Rider, 17.04.2008 в 06:08. Причина: Добавлено сообщение
Knight_Rider вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 17.04.2008, 06:18   #3
QIP Elder
 
Аватар для Марфа
 
Регистрация: 27.03.2008
Сообщений: 1,166
Quote selected
По умолчанию

хвала небесам!

добавлено через 9 минут
так, щас 2 часа ночи, т.ч. не тестил на разговор, но хотелось бы что-нибудь типа кнопочки "применить", если выбираю п. 1 или 3 из окна сообщений, а то недоверие вызывает, хотя в настройках все доабвилось верно, т.ч. седня же утром бот отыграется за все мои мучения

Последний раз редактировалось Марфа, 17.04.2008 в 06:18. Причина: Добавлено сообщение
Марфа вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 17.04.2008, 06:50   #4
QIP Elder
 
Аватар для Shedko
 
Регистрация: 25.10.2006
Сообщений: 655
Quote selected
По умолчанию

Цитата:
Сообщение от Knight_Rider Посмотреть сообщение
. Когда выбираю 1-й или 3-й пункт из окна сообщений и потом повторно зайти в эти настройки то кнопка "включить" будет подсвечена
полностью согласен - есть несоответствие , исправлю.


Цитата:
Сообщение от Knight_Rider Посмотреть сообщение
И база пока маловата
SmartBot - самообучающийся, вырастет база, но особо ума не прибавит. поэтому пока выложил эту версию, чтоб интерфейс сделать нормальным. а также попутно буду думать какой движок "прикрутить", самому писать - прошу не предлагать =)

Цитата:
Сообщение от Knight_Rider Посмотреть сообщение
Какого пола бот? И будет ли возможность задавать ему пол?
это все зависит от базы, ее и в блокноте можно исправить, другое дело, что для надо скорее всего 2 базы.

Цитата:
Сообщение от Knight_Rider Посмотреть сообщение
П. Хотелось бы выбирать статус, при котором будет работать бот. К примеру ставлю "Готов поболтать" и бот отвечает всем, кроме списка игнорируемых
тоже думал о подобном, полностью согласен. но будет опцией, а может и не опцией =)

Цитата:
Сообщение от ex Me Посмотреть сообщение
но хотелось бы что-нибудь типа кнопочки "применить",
скорее всего не будет кнопочки, просто надо еще продумать интерфейс, чтобы небыло таких ощущений =)
__________________
Programming is like sex: one mistake and you have to support it for life.
Shedko вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 17.04.2008, 11:16   #5
Nightly tester
 
Аватар для pris
 
Регистрация: 17.01.2007
Сообщений: 927
Отправить сообщение для pris с помощью ICQ Send Message via Jabber to pris
Quote selected
По умолчанию

в конфе он без разрешения начинает говорить в привате. если нажать на кнопку там кнопка разрешить общаться активирована....
__________________
Как задавать вопросы: http://www.citforum.ru/howto/smart-questions-ru.shtml
Установка плагов: http://forum.qip.ru/showthread.php?t=19473
Настройка Infium: http://forum.qip.ru/showthread.php?t=31458
pris вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 17.04.2008, 15:31   #6
QIP Elder
 
Аватар для Марфа
 
Регистрация: 27.03.2008
Сообщений: 1,166
Quote selected
По умолчанию

а по какому принципу проходит обучение?

Цитата:
добавлено через 1 час 55 минут
просили передать
soli (11:10:17 17/04/2008)
Он вообще дурак

soli (11:10:29 17/04/2008)
Можешь передать ему
а это просто порадовало

Цитата:
DinoZaur (11:12:50 17/04/2008)
а..ну прикольный..он..но многие фразы на тебя смахивают..ты ему полсловаря чтоли забивал???
не ожидал, что он предупреждает о том, что он бот. Но, исходя из этого, хотелось бы что бы его можно было вкл. для всех не на один какой-то статус, а на два. Мне, например, надо на отошел и недоступен.

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

добавлено через 9 минут
я, по ходу дела, не скоро успокоюсь.
1. Почему "проблемма"?
2. "В это-то и дело! Надо встречаться."

добавлено через 1 минуту
3. "дурак==Да, мочить такх надо!"

Последний раз редактировалось Марфа, 17.04.2008 в 15:31. Причина: Добавлено сообщение
Марфа вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 17.04.2008, 15:49   #7
QIP User
 
Аватар для Bарк
 
Регистрация: 24.03.2007
Сообщений: 237
Quote selected
По умолчанию

Натравил бота на самого себя, он такое начал разгонять))) правда порой нелогичность ответов прослеживается :)
Bарк вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 17.04.2008, 16:13   #8
QIP Elder
 
Аватар для Марфа
 
Регистрация: 27.03.2008
Сообщений: 1,166
Quote selected
По умолчанию

вот еще база. У меня вот вопрос, если я ее просто в конец существующей добавлю, то, типа, все круто будет?
Вложения
Тип файла: zip mind.zip (64.8 Кб, 5038 просмотров)
Марфа вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 17.04.2008, 17:54   #9
QIP Elder
 
Аватар для Марфа
 
Регистрация: 27.03.2008
Сообщений: 1,166
Quote selected
По умолчанию

еще бы он при статусе невидимый для всех или, кроме списка невидящих молчал бы (в этом случае отвечал бы только тем, кто видит)... Но, в смысле, если глаз в правом нижнем углу, а не просто статус

добавлено через 53 минуты
вообщем так... Хотел сделать у себя в комнате его как бота-болтуна под ником Балаболка. Создал аккаунт, зашел, все дела. Получилось, что в комнате сижу я ...@qip.ru и бот Балаболка@jabber.ru. В настройках бота вкл. его для нужной конференции, указал ему реагировать на ник Балаболка. Но! Если писать этому нику, то бот отвечает два раза подряд, от ника Балаболка и от моего реального ника.

Последний раз редактировалось Марфа, 17.04.2008 в 17:54. Причина: Добавлено сообщение
Марфа вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 17.04.2008, 18:31   #10
QIP Newcomer
 
Аватар для BratBrat
 
Регистрация: 17.04.2008
Сообщений: 8
Quote selected
Smile Вопрос

У меня вопрос...Возможно ли в последующих версиях сделать так,что бы при вопросах к боту была какая то задержка,хотябы в пару секунд-для полного правдоподобия?
И ещё,хотелось бы что бы бот видел пол собеседника...так было бы вообще супер
А вообще спасибо...очень нужная штука))
BratBrat вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 17.04.2008, 19:37   #11
QIP Elder
 
Аватар для Shedko
 
Регистрация: 25.10.2006
Сообщений: 655
Quote selected
По умолчанию

Цитата:
Сообщение от ex Me Посмотреть сообщение
не ожидал, что он предупреждает о том, что он бот. Но, исходя из этого, хотелось бы что бы его можно было вкл. для всех не на один какой-то статус, а на два. Мне, например, надо на отошел и недоступен.
ну да, скорее всего надо не на один статус - а не те, которые пользователь сам может выбрать и не один.


Цитата:
Сообщение от ex Me Посмотреть сообщение
не ожидал, что он предупреждает о том, что он бот
просто пока сам не знаю а зачем этот бот, как собеседник - явно не тянет, скорее как автоответчик развлекательного характера, не более. поэтому включил принудительное предупреждение, что говорит бот.

Цитата:
Сообщение от BAPK. Посмотреть сообщение
правда порой нелогичность ответов прослеживается :)
угу, он не смотрит за темой разговора, каждая фраза для него новый диалог. а на короткие фразы - вообще полную чушь выдаст.


Цитата:
Сообщение от ex Me Посмотреть сообщение
У меня вот вопрос, если я ее просто в конец существующей добавлю, то, типа, все круто будет?
с минд.дат лучше быть аккуратным, можно все в начало вставить, но только не включать общие фразы и приветствия, они там немного отличаются.

Цитата:
Сообщение от ex Me Посмотреть сообщение
еще бы он при статусе невидимый для всех или, кроме списка невидящих молчал бы
плагин может определить статус видимости (видим, невидим для всех, видим только для кого-то) но вот для кого мы видимы и невидимы, для какого пользователя - вот это уже не определить. Ну да ладно, надо хоть выключать для "невидим для всех"

Цитата:
Сообщение от ex Me Посмотреть сообщение
вообщем так... Хотел сделать у себя в комнате его как бота-болтуна под ником Балаболка.
попрошу учитывать, что этот бот всегда будет отвечать от нашего имени =(
проще запустить вторую копию кипа и там уже настроить его там. просто плагин ну не знает наш акк при получении сообщения, поэтому отличить user@qip.ru и user@jabber.ru просто не может и работает во всех запущенных аккаунтах. Также я просто ну не знаю и нашего имени во время отправки сообщения. Именно поэтому и было введено поля для имен бота =(


Цитата:
Сообщение от BratBrat Посмотреть сообщение
Возможно ли в последующих версиях сделать так,что бы при вопросах к боту была какая то задержка,хотябы в пару секунд-для полного правдоподобия? И ещё,хотелось бы что бы бот видел пол собеседника...так было бы вообще супер
да задержка нужна, но пока еще просто ну не знаю как это правильно написать, ведь бот говорить может с любым количеством людей и периоды ответа везде должны быть разные, в общем буду думать. как это все правильно сделать.
__________________
Programming is like sex: one mistake and you have to support it for life.
Shedko вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 17.04.2008, 19:49   #12
QIP Newcomer
 
Аватар для BratBrat
 
Регистрация: 17.04.2008
Сообщений: 8
Quote selected
По умолчанию

а можно ли самому изменять вопросы и ответы в текстовых файлах,или дописывать?
BratBrat вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 17.04.2008, 20:06   #13
QIP Elder
 
Аватар для Shedko
 
Регистрация: 25.10.2006
Сообщений: 655
Quote selected
По умолчанию

Цитата:
Сообщение от BratBrat Посмотреть сообщение
а можно ли самому изменять вопросы и ответы в текстовых файлах,или дописывать?
да, оба файла баз-знаний/бреда являются текстовыми. откройте в блокноте - там все более менее понятно.

mind.dat - его использует SmartBot

hi.txt, otveti.txt, dialogs.txt - это база для SimpleBot
__________________
Programming is like sex: one mistake and you have to support it for life.
Shedko вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 17.04.2008, 22:31   #14
QIP User
 
Аватар для Bарк
 
Регистрация: 24.03.2007
Сообщений: 237
Quote selected
По умолчанию

PHP код:
BAPK (13:46:59 17/04/2008)
В данный момент меня нет около компьютераА покавы можете поговорить с моим ботом =)))


BAPK (13:47:01 17/04/2008)
Смеешься?


BAPK (13:47:03 17/04/2008)
Пока.


BAPK (13:47:05 17/04/2008)
чего так сразу ?


BAPK (13:47:07 17/04/2008)
Дапока.


BAPK (13:47:09 17/04/2008)
Что за глупые вопросы!


BAPK (13:47:11 17/04/2008)
"Пока" в смысле "прощай"?


BAPK (13:47:13 17/04/2008)
покая ухожу?


BAPK (13:47:15 17/04/2008)
спать потянуло это со мною или без меня ? =)?


BAPK (13:47:17 17/04/2008)
Что ты имеешь в виду?


BAPK (13:47:19 17/04/2008)
И ни тои ни другое.


BAPK (13:47:21 17/04/2008)
а кто яесли не скажу ?


BAPK (13:47:23 17/04/2008)
угубольше ничего?


BAPK (13:47:25 17/04/2008)
Слушайя в туалет хочуГде тут ближайший?


BAPK (13:47:27 17/04/2008)
Больше ничего.


BAPK (20:28:10 17/04/2008)



BAPK (20:28:10 17/04/2008)



BAPK (20:28:12 17/04/2008)
О чем мы говорим?


BAPK (20:28:14 17/04/2008)
о сексе =)?


BAPK (20:28:16 17/04/2008)
Слушаймне кажетсячто ты русского языка не знаешь.


BAPK (20:28:18 17/04/2008)
ничего?


BAPK (20:28:20 17/04/2008)
что-то моя твоя не понимает =( .


BAPK (20:28:22 17/04/2008)
Не знаючто и сказать...


BAPK (20:28:25 17/04/2008)
бх?


BAPK (20:28:27 17/04/2008)
Продолжай без меня...


BAPK (20:28:29 17/04/2008)
мы же недавно виделись !


BAPK (20:28:31 17/04/2008)
Ты меня к себе не причисляй.


BAPK (20:28:33 17/04/2008)
дапрощайдо встречи?


BAPK (20:28:35 17/04/2008)
Ты о своема я о своем.


BAPK (20:28:37 17/04/2008)
ну ты как всегдаговоришь непонятно =)?


BAPK (20:28:39 17/04/2008)
Никак.


BAPK (20:28:41 17/04/2008)
в сексе =))?


BAPK (20:28:43 17/04/2008)
Это шутка?


BAPK (20:28:45 17/04/2008)
окжду?


BAPK (20:28:47 17/04/2008)
Ты бы мог попроще выражаться?


BAPK (20:28:49 17/04/2008)
Не переспрашивай.


BAPK (20:28:51 17/04/2008)
Что-то меня спать потянуло... 
Разговор бота с самим собой
Bарк вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Sponsored Links
Старый 17.04.2008, 22:39   #15
QIP Elder
 
Аватар для Shedko
 
Регистрация: 25.10.2006
Сообщений: 655
Quote selected
По умолчанию

Цитата:
Сообщение от BAPK. Посмотреть сообщение
Разговор бота с самим собой
Забыл предупредить, что такие бот-на-бот игры приведут только к разрастанию базы и еще более глупым ответам =)
__________________
Programming is like sex: one mistake and you have to support it for life.
Shedko вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Ответ


Быстрый ответ
Сообщение:
Убрать форматирование текста
Полужирный
Курсив
Подчёркнутый

Вставить рисунок
Вставить тег цитаты [QUOTE] вокруг выделенного текста
 
Уменьшить размер
Увеличить размер
Опции


Ваши права в разделе
Вы можете создавать темы
Вы можете отвечать на сообщения
Вы можете прикреплять файлы
Вы можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +7, время: 15:09.


Работает на vBulletin®.
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2004 - 2008 QIP.RU
------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=bg.jpg Content-Type: image/jpeg; name=bg.jpg Content-Location: http://forum.qip.ru/qipstyle/bg.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAPAAA/+4ADkFkb2Jl AGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQ DA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AA EQgAEAAQAwERAAIRAQMRAf/EAFwAAQEAAAAAAAAAAAAAAAAAAAAIAQEBAQAAAAAA AAAAAAAAAAAAAgUQAAAFBAMBAAAAAAAAAAAAAAABESFRQWGxwXGB4bIRAQEBAQAA AAAAAAAAAAAAAADwwWH/2gAMAwEAAhEDEQA/AKVw/F2iSGdWpMMSe/JhWA61Ve1L eQroUXTXaJIK0f/Z ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=bgl.gif Content-Type: image/gif; name=bgl.gif Content-Location: http://forum.qip.ru/qipstyle/bgl.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAOYAAPj89/3+/PX69Pr9+fP58fT68vX68/z9+/z9+/P48fT68vv9 +vv9+/v9+vv9+vn9+Pj79/v9+/T48vT68vv9+vL48ff79fv9+vX78/v9+fv9+vr9 +fT68vv9+vr9+v3+/Pj79/X68/f79f3+/fb79fX79Pr9+vT68vL48PT68vf79ff7 9vj89/P48fT58vz9+/z9+/r9+fb79Pf79vX78/3+/PT68vv9+/T58vT58vf79fr9 +fb69fP68f3+/PL48fP68fz9+/n9+P3+/fb79Pj79/L48ff79fn89/f79fb79fj7 9/X68/P48fj89/f79fL48ff79ff79fr9+vv9+/n89/j89/f79/f79vn8+PT58/f7 9/f79fr9+ff79fj89/T48vn8+Pn7+Pr9+fz9+/j79/v9+/L48Pr9+ff79v7+/fn8 9/j89/n89/3+/PT48vv9+vr9+f3+/fz9+/X79Pn8+fL58fX79Pv9+vf79fb69fT4 8vr9+bOzs7Ozs7OzsywAAAAAEAAQAAAH/4AKIwAVDgMEZR80BR0DNkcIMgJzEG8L Gi5PBytgHxlnYS8CBWQQCV0NIVs3KjgNFEYWASITCAAJHm4EBjBXLW0eOQABAgIB EBIPG0xpcHolDBE5FjVEBlRrUBoLWjoHYgkZDwQgDCQYZlYKFA0tWRF0KBdDBSxy SSl4AAQbh+VCBdhEADJDzR0FAQgZIrDkwIwfMRyxeKFEgC0cDjRwoDEgjoEYCzis qDEqCKENDbBguIDGThUfLmRJqXXLxBQRGPg4OXHhgYRhxY41ieKAi4EDO1BkYKAg DwwZKW7cqtOhBI8DX/aMecChCAISJzqYMABgwAQvC5BIoDCih44AKgNCBAIAOw== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=line2.gif Content-Type: image/gif; name=line2.gif Content-Location: http://forum.qip.ru/qipstyle/line2.gif Content-Transfer-Encoding: Base64 R0lGODlhCQAoAPcAAOXl5fT09O7u7vX19eHh4fHx8cjIyPLy8tTU1Obm5tnZ2e3t 7dDQ0M3NzfPz88PDw93d3evr68HBwbe3t7+/v+jo6Onp6cXFxQcHBwcHBwcHBwcH BwcHBwcHBwcHBwcHBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAJACgAAAiMAAEIHEiwoMGDCBMmTMCw YUMLECNGjECxYkUBGDNq3MiRY4GPIEEeGEmSZICTKFOqRDmgpcuXMGPGXInSgc2b N2meDMlzgc+fPztirEC0aFECSJMmhcC0aVMFUKNGRUC1alUGWLNmbcC1a1cDYMOG vUC2bNkHaNOmlcC2bVsKcOPGnUC3bl2xeJXqDQgAOw== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=line3.gif Content-Type: image/gif; name=line3.gif Content-Location: http://forum.qip.ru/qipstyle/line3.gif Content-Transfer-Encoding: Base64 R0lGODlhHAA0APcAAM/3rafLjs72rKXJjMz0q6rOkLbbmbnfnMDmobLXlr/loMry qajMjrPYl7jem8Hnoq3RkqXIjLXambTZmK7Sk6bJjabKjavPka/TlM31q6bJjLfd msvyqq/UlMrxqazQkcnwqM71rM30q872rafKjc31rMXspbrgnbTZl6nNj6zQkrzi n7fcmsbtpsjvp8TqpMLoosPpo8fup67Tk6jMj6jLjrjdm7HWlanNkKvQkbvhnb/m obXamKnMj8PqpMbtpcTrpcjwqLHVlbDVlbDUlL3jn8z0qs/2rcTrpMzzq8jvqMXr pcnxqbvgncLoo8fvp77koMfupsvzqr7kn8vzq8PppKrPkK3SkszzqqbLjafLjb7l oMbuprzinqbKjM73ranOj6nOkMnvqLzhnrLWlsPqo8vyqbPXl8vzqbvinbHWlrbc mbrfnL3insjup8nxqLvinsbup6XJjbfcm6zRkbPYlqjNj7nfm6rNkK3Sk8/2rLzj nqvPkM30rMjwp77jn832rK3Rk73kn8Lpo6vOkLvgnMbspcftp7/koKzRkrrhncrz qsHnocDnorDUlb3jnsXtprbbmrXbmafKjq/Ulcbtp7LYl6/VlMPrpMHoorDVlMXs pLrgnLvhnrHVlq/Tk8v0qsXtpcnwqanMjr/lobDVlsTspb7joKfMjsHooc73rLPZ mMfvqMHporHXlqrOj7DWlcftpsTqpb7locHpo8rwqKrNj8ryqrnem8Dnoa3Tk8nw p8LppKjLj6zSk8Hoo6vQkKnLj7zinbbcmsz1rM71q6fJjcPqpazRk7rfm8Lqo8bs psv0q6jNjsDmoLjdnMrxqMrxqsLposPrpabIjL3joLndm6nNjq3Qks32q872q73i n7Tambzhna7TksDoorXbmMDooa7SkqzPkc/3rLLXlwAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAcADQAAAj/AAEIHEiwoMGDCBMqXMiw oUOER/R8OTLiC7kRRyiOkKhKFYAjH7/oASBSAAABIUaMEMBSwMoQLVW2ZLky5pES MEOEKFYCUAadPUv0FJAtQwltgEL81BlChNA+GTIQIyAiqtWofUSIyLpVqFERBAgY CUsWrIgkScgaMZIWLNmwIqRIoYKWLjO2VORi2WsElBEqWKgYwSIFCygqt8xwWMxh keLFZtAs4iCFQ+TFi9BERrN4wQIPnj17GA269IJbokN/Bh3tTa1ab0CA8MAkNog3 TEQxAVGbNwjduz2AgOZHTBA/SoIoSW58F3PZykH4CeICuRjjMmS4eKKd1RM3LsC7 /xgf3oWMJ6yUfHdznnuUQ7FicakUJYqMOO/jcJHBpQX9SvxxcUgc+P0QSguQGPLD Dy208AMkP5jgoAkMNriMgpC0cKAhJpgAxBJAhAiECUuU2KEpS2wyIombLGGKhyZs IssLPmCChA8vvICEjjlicgyOO9qIxDQvzAgEEmX4UEYMg8QQQxU+VBHDkrxA+aQy UioZgw9PlgEDDE44kQkMv4A5iJkwtAIDLdK0cqYTa4Ip5gN0ftMInQ80kkoqeD7A SCZ4MvJALnc+EA4jOyCQCwKJ7pAoo84gIOmkkj5qKQIKkIKIApxuusWmnM4SqgJb kFoqKZyWWsQfU5wyxaqrQv8BhSBTCDLrFFBUg6sgfxTxKhSndFHECns8sscKbRTb BbIrILtss9swW0Syj+gAhzBwpKFDF2OkkcYY2Y7RSSdj6GCutd18q0MnXRSiCCcn xFtIvJwookgTTcSbb74nNMGJDvsWcsDABN9xABsDI3zAHXewYTAbCidD8AEO4OKA AzbYgPHGF+NigzUaX7yxxs9cvMEcG7DAQsorn5zyBi+zgLINMsPMsgEGrLFGJAbw 3DPOBgwD9Bo5Az20ATxIkDQPkigtATdJSyABOJJE3bTUWPPAwwQTrIIC11+jIDbX YIdN9gQoeP11A3XU0QDbb5/xdgNnWPK22w3YLbfedCf/kAAZrvjttxoJBC743wmU gzjhZJDhdymeCKGGEELAMsQNsEh+w+ZCbH5DKTd0PoQnk3syxCUdDKE6JR1c4ggR lxChyRCUEOGII7UTQUQHmvBOxCcdfIJBB8MXj8EMHSSPwfHLE9+88BhQMIMuFFAg TvXeUC999TNsP0P3eXCfRx4QXJHIFRCkH0gg6V+BDPvtlw9BIOhDkIcvEKigAh0f 0EHH/on4QAD1h40P6M+AH0ggBAyogg9cwIEXiCAfckDBHIxjghSMoAYj+AFgRDAH fCBEAUZYACvwwQojRGEJU0jCAogwhYQIAx5wEIZX4AEPYSgAGHCwQ1u8Yoc0tAUP wWeowzDgIAU9sEMKkDiKHjTDDj1AYgpGkQIapACK10BiFK1oBwZ4MRi9YAANakAD GnjRi2WsgRjPeEYyMiAAAUAFHOcIRzkGoAYB0AIctYDHGvTxjgGwAAlIoAUSZGES JJjEJCyQhUAaMgCDzMIg80iCAGRBCxWwQCY1oEkLeKECFfDCJ41Bgkx6EpSm9IIF LKCBAQxAAxWQgytdKQcN2PKWGpADKC3wyli+MgKujAAwI0CNYQ5AmMY85jGB2Uph BgQAOw== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=line5.gif Content-Type: image/gif; name=line5.gif Content-Location: http://forum.qip.ru/qipstyle/line5.gif Content-Transfer-Encoding: Base64 R0lGODlhBAAjANUAAM3Nzfn5+c7Ozubm5vX19f7//tLS0v////z8/evr69vb28/P z9DQ0NHR0ezr6/7+/9LT0+Dh4eHh4Pz8/Nzb283OztLS0/X19v38/PDx8fHw8dPS 0tfW1tbX1//+/ubm5eHg4ebl5s7Pz9DR0fDw8PDw8fHx8NbW1uDh4NHS0tvc2+Hg 4Nzb3M/Q0ODg4PHw8Nvb3Ovr7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAEACMAAAZjQAVFAZNEUK7BIDSIORwJ DcmUIRAuhIA2gJggMIXHo3AoHwpozwSDQGwDWGumpHkl7g7l4CNZRUAqLEIcJx0c BhAWG4iKBgYpBg0NIw0MDC0MCwsiCwICFZ6fAgCkpaanqKlBADs= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=line1.gif Content-Type: image/gif; name=line1.gif Content-Location: http://forum.qip.ru/qipstyle/line1.gif Content-Transfer-Encoding: Base64 R0lGODlhAwBYAPcAAND4rsXtp871rM/3rcHopMTrpsryqrjencjvqbngns72rbbc nL7mo77kob7losbuqKzRlbzjocfuqLrioLvioLnfnsnwqbPZm8nxqbHXmc30rMLp pLrhn9D/rsvzq8Pqpb/mo8Tspsz0rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAADAFgAQAhyADsI5ECQgMEHCEUoBMCw ocOHDRdIbECxgEUMGBVohMjxYYaPFUJSGMmg5IaTIVIiWGmgpYCXA2J2nElzJoSb F3Ie2Jmg54SfEYI6GAqiqEECH5JaLBCgqYSnFqK2NOChqoarLwXEHFCzq9evYDmu RBAQADs= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=vbulletin_global.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_global.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_global.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIEhh bmRsZSBGaXJlYnVnIGNhbGxzIHdoZW4gRmlyZWJ1ZyBpcyBub3QgYXZhaWxhYmxl IChnZXRmaXJlYnVnLmNvbSkKKi8KaWYgKCF3aW5kb3cuY29uc29sZSB8fCAhY29u c29sZS5maXJlYnVnKQp7Cgl3aW5kb3cuY29uc29sZSA9IHt9OwoJdmFyIG5hbWVz ID0gWyJsb2ciLCAiZGVidWciLCAiaW5mbyIsICJ3YXJuIiwgImVycm9yIiwgImFz c2VydCIsICJkaXIiLCAiZGlyeG1sIiwgImdyb3VwIiwgImdyb3VwRW5kIiwgInRp bWUiLCAidGltZUVuZCIsICJjb3VudCIsICJ0cmFjZSIsICJwcm9maWxlIiwgInBy b2ZpbGVFbmQiXTsKCWZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyAr K2kpIHdpbmRvdy5jb25zb2xlW25hbWVzW2ldXSA9IGZ1bmN0aW9uKCkge307Cn0K Ci8qKgoqIEhhbmRsZSBZVUkgY3VzdG9tIGV2ZW50IGNhbGxzIHdoZW4gWVVJIGlz IG5vdCBhdmFpbGFibGUgKGNsaWVudHNjcmlwdC95dWkveWFob28tZG9tLWV2ZW50 LmpzKQoqLwppZiAodHlwZW9mIFlBSE9PID09ICJ1bmRlZmluZWQiKQp7CglmdW5j dGlvbiBudWxsX2V2ZW50KCkgeyB0aGlzLmZpcmUgPSBmdW5jdGlvbigpIHt9OyB0 aGlzLnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge307IH07Cn0KCi8qKgoqIFNldHVw IFZhcmlhYmxlcwoqCiogQHZhcglzdHJpbmcJU0VTU0lPTlVSTCAtIHN0b3JlcyB0 aGUgc2Vzc2lvbiBVUkwKKiBAdmFyCXN0cmluZwlTRUNVUklUWVRPS0VOIC0gc3Rv cmVzIGFuIGFudGktQ1NSRiB2YWx1ZQoqIEB2YXIJYXJyYXkJdmJwaHJhc2UgLSBz dG9yZXMgdGV4dCBwaHJhc2VzCiogQHZhcglhcnJheQl2Ql9FZGl0b3IgLSBhcnJh eSBvZiB2Ql9UZXh0X0VkaXRvciBvYmplY3RzCiogQHZhcglib29sZWFuCWlnbm9y ZXF1b3RlY2hhcnMgLSBpZ25vcmUgY2hhcmFjdGVycyBpbnNpZGUgW3F1b3RlXSB0 YWdzIGZvciBtZXNzYWdlIGxlbmd0aCBjaGVjawoqIEB2YXIJaW50ZWdlcglwYWdl bmF2Y291bnRlciAtIGNvdW50cyB0aGUgbnVtYmVyIG9mIHBhZ2VuYXYgaW5zdGFu Y2VzIGVuY291bnRlcmVkIHNvIGZhcgoqIEB2YXIJYm9vbGVhbglpc19yZWdleHAg LSBkb2VzIHdpbmRvdy5yZWdFeHAgZXhpc3Q/IC0gQ2F0Y2ggZXJyb3JzIHdpdGgg bGVzcyBjYXBhYmxlIGJyb3dzZXJzCiogQHZhcglib29sZWFuCUFKQVhfQ29tcGF0 aWJsZSAtIGRvZXMgdGhlIGN1cnJlbnQgYnJvd3NlciBzdXBwb3J0IEFKQVg/Ciog QHZhcglzdHJpbmcJcG9pbnRlcl9jdXJzb3IgLSBoZWxwIG91dCBvbGQgdmVyc2lv bnMgb2YgSUUgdGhhdCBkb24ndCB1bmRlcnN0YW5kIHN0eWxlLmN1cnNvciA9IHBv aW50ZXIKKi8KdmFyIFNFU1NJT05VUkwgICAgICAgPSAodHlwZW9mKFNFU1NJT05V UkwpID09ICJ1bmRlZmluZWQiID8gIiIgOiBTRVNTSU9OVVJMKTsKdmFyIFNFQ1VS SVRZVE9LRU4gICAgPSAodHlwZW9mKFNFQ1VSSVRZVE9LRU4pID09ICJ1bmRlZmlu ZWQiID8gIiIgOiBTRUNVUklUWVRPS0VOKTsKdmFyIHZicGhyYXNlICAgICAgICAg PSAodHlwZW9mKHZicGhyYXNlKSA9PSAidW5kZWZpbmVkIiA/IG5ldyBBcnJheSgp IDogdmJwaHJhc2UpOwp2YXIgdkJfRWRpdG9yICAgICAgICA9IG5ldyBBcnJheSgp Owp2YXIgaWdub3JlcXVvdGVjaGFycyA9IGZhbHNlOwp2YXIgcGFnZW5hdmNvdW50 ZXIgICA9IDA7CnZhciBpc19yZWdleHAgICAgICAgID0gKHdpbmRvdy5SZWdFeHAp ID8gdHJ1ZSA6IGZhbHNlOwp2YXIgQUpBWF9Db21wYXRpYmxlICA9IGZhbHNlOwp2 YXIgcG9pbnRlcl9jdXJzb3IgICA9IChpc19pZSA/ICdoYW5kJyA6ICdwb2ludGVy Jyk7CgovKioKKiBEZWZpbmUgdGhlIGJyb3dzZXIgbG9hZGluZyB0aGUgcGFnZQoq CiogQHZhcglzdHJpbmcJdXNlckFnZW50IFVzZXJhZ2VudCBzdHJpbmcKKiBAdmFy CWJvb2xlYW4JaXNfb3BlcmEgIE9wZXJhCiogQHZhcglib29sZWFuCWlzX3NhZiAg ICBTYWZhcmkKKiBAdmFyCWJvb2xlYW4JaXNfd2VidHYgIFdlYlRWCiogQHZhcgli b29sZWFuCWlzX2llICAgICBJbnRlcm5ldCBFeHBsb3JlcgoqIEB2YXIJYm9vbGVh bglpc19pZTQgICAgSW50ZXJuZXQgRXhwbG9yZXIgNAoqIEB2YXIJYm9vbGVhbglp c19pZTcgICAgSW50ZXJuZXQgRXhwbG9yZXIgNwoqIEB2YXIJYm9vbGVhbglpc19w czMgICAgUGxheXN0YXRpb24gMwoqIEB2YXIJYm9vbGVhbglpc19tb3ogICAgTW96 aWxsYSAvIEZpcmVmb3ggLyBDYW1pbm8KKiBAdmFyCWJvb2xlYW4JaXNfa29uICAg IEtvbnF1ZXJvcgoqIEB2YXIJYm9vbGVhbglpc19ucyAgICAgTmV0c2NhcGUKKiBA dmFyCWJvb2xlYW4JaXNfbnM0ICAgIE5ldHNjYXBlIDQKKiBAdmFyCWJvb2xlYW4J aXNfbWFjICAgIENsaWVudCBpcyBydW5uaW5nIE1hY09TCiovCnZhciB1c2VyQWdl bnQgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7CnZhciBpc19v cGVyYSAgPSAoKHVzZXJBZ2VudC5pbmRleE9mKCdvcGVyYScpICE9IC0xKSB8fCAo dHlwZW9mKHdpbmRvdy5vcGVyYSkgIT0gJ3VuZGVmaW5lZCcpKTsKdmFyIGlzX3Nh ZiAgICA9ICgodXNlckFnZW50LmluZGV4T2YoJ2FwcGxld2Via2l0JykgIT0gLTEp IHx8IChuYXZpZ2F0b3IudmVuZG9yID09ICdBcHBsZSBDb21wdXRlciwgSW5jLicp KTsKdmFyIGlzX3dlYnR2ICA9ICh1c2VyQWdlbnQuaW5kZXhPZignd2VidHYnKSAh PSAtMSk7CnZhciBpc19pZSAgICAgPSAoKHVzZXJBZ2VudC5pbmRleE9mKCdtc2ll JykgIT0gLTEpICYmICghaXNfb3BlcmEpICYmICghaXNfc2FmKSAmJiAoIWlzX3dl YnR2KSk7CnZhciBpc19pZTQgICAgPSAoKGlzX2llKSAmJiAodXNlckFnZW50Lmlu ZGV4T2YoJ21zaWUgNC4nKSAhPSAtMSkpOwp2YXIgaXNfaWU3ICAgID0gKChpc19p ZSkgJiYgKHVzZXJBZ2VudC5pbmRleE9mKCdtc2llIDcuJykgIT0gLTEpKTsKdmFy IGlzX3BzMyAgICA9ICh1c2VyQWdlbnQuaW5kZXhPZigncGxheXN0YXRpb24gMycp ICE9IC0xKTsKdmFyIGlzX21veiAgICA9ICgobmF2aWdhdG9yLnByb2R1Y3QgPT0g J0dlY2tvJykgJiYgKCFpc19zYWYpKTsKdmFyIGlzX2tvbiAgICA9ICh1c2VyQWdl bnQuaW5kZXhPZigna29ucXVlcm9yJykgIT0gLTEpOwp2YXIgaXNfbnMgICAgID0g KCh1c2VyQWdlbnQuaW5kZXhPZignY29tcGF0aWJsZScpID09IC0xKSAmJiAodXNl ckFnZW50LmluZGV4T2YoJ21vemlsbGEnKSAhPSAtMSkgJiYgKCFpc19vcGVyYSkg JiYgKCFpc193ZWJ0dikgJiYgKCFpc19zYWYpKTsKdmFyIGlzX25zNCAgICA9ICgo aXNfbnMpICYmIChwYXJzZUludChuYXZpZ2F0b3IuYXBwVmVyc2lvbikgPT0gNCkp Owp2YXIgaXNfbWFjICAgID0gKHVzZXJBZ2VudC5pbmRleE9mKCdtYWMnKSAhPSAt MSk7CgovKioKKiBXb3JrYXJvdW5kIGZvciBoZWlub3VzIElFIGJ1ZyAtIGFkZCBz cGVjaWFsIHZCbGVuZ3RoIHByb3BlcnR5IHRvIGFsbCBzdHJpbmdzCiogVGhpcyBt ZXRob2QgaXMgYXBwbGllZCB0byBBTEwgc3RyaW5nIG9iamVjdHMgYXV0b21hdGlj YWxseQoqCiogQHJldHVybglpbnRlZ2VyCiovClN0cmluZy5wcm90b3R5cGUudkJs ZW5ndGggPSBmdW5jdGlvbigpCnsKCXJldHVybiAoaXNfaWUgJiYgdGhpcy5pbmRl eE9mKCJcbiIpICE9IC0xKSA/IHRoaXMucmVwbGFjZSgvXHI/XG4vZywgIl8iKS5s ZW5ndGggOiB0aGlzLmxlbmd0aDsKfQoKLyoqCiogT3ZlcnJpZGVzIElFJ3Mgb3Jp Z2luYWwgU3RyaW5nLnByb3RvdHlwZS5zdWJzdHIgdG8gYWNjZXB0IG5lZ2F0aXZl IHZhbHVlcwoqCiogQHBhcmFtCWludGVnZXIJU3Vic3RyaW5nIHN0YXJ0IHBvc2l0 aW9uCiogQHBhcmFtCWludGVnZXIJU3Vic3RyaW5nIGxlbmd0aAoqCiogQHJldHVy bglzdHJpbmcKKi8KaWYgKCIxMjM0Ii5zdWJzdHIoLTIsIDIpID09ICIxMiIpIC8v ICh3aGljaCB3b3VsZCBiZSBpbmNvcnJlY3QpCnsKCVN0cmluZy5wcm90b3R5cGUu c3Vic3RyX29yaWcgPSBTdHJpbmcucHJvdG90eXBlLnN1YnN0cjsKCglTdHJpbmcu cHJvdG90eXBlLnN1YnN0ciA9IGZ1bmN0aW9uKHN0YXJ0LCBsZW5ndGgpCgl7CgkJ aWYgKHR5cGVvZihsZW5ndGgpID09ICJ1bmRlZmluZWQiKQoJCXsKCQkJcmV0dXJu IHRoaXMuc3Vic3RyX29yaWcoKHN0YXJ0IDwgMCA/IHRoaXMubGVuZ3RoICsgc3Rh cnQgOiBzdGFydCkpOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gdGhpcy5zdWJz dHJfb3JpZygoc3RhcnQgPCAwID8gdGhpcy5sZW5ndGggKyBzdGFydCA6IHN0YXJ0 KSwgbGVuZ3RoKTsKCQl9Cgl9Owp9CgovKioKKiBEZWZpbmUgQXJyYXkuc2hpZnQo KSBmb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBoYXZlIGl0CiovCmlmICh0eXBlb2Yg QXJyYXkucHJvdG90eXBlLnNoaWZ0ID09PSAndW5kZWZpbmVkJykKewoJQXJyYXku cHJvdG90eXBlLnNoaWZ0ID0gZnVuY3Rpb24oKQoJewoJCWZvcih2YXIgaSA9IDAs IGIgPSB0aGlzWzBdLCBsID0gdGhpcy5sZW5ndGgtMTsgaSA8IGw7IGkrKykKCQl7 CgkJCXRoaXNbaV0gPSB0aGlzW2kgKyAxXTsKCQl9CgkJdGhpcy5sZW5ndGgtLTsK CQlyZXR1cm4gYjsKCX07Cn0KCi8qKgoqIEZ1bmN0aW9uIHRvIGVtdWxhdGUgZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQKKgoqIEBwYXJhbQlzdHJpbmcJT2JqZWN0IElE CioKKiBAcmV0dXJuCW1peGVkCW51bGwgaWYgbm90IGZvdW5kLCBvYmplY3QgaWYg Zm91bmQKKi8KZnVuY3Rpb24gZmV0Y2hfb2JqZWN0KGlkbmFtZSkKewoJaWYgKGRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKQoJewoJCXJldHVybiBkb2N1bWVudC5nZXRF bGVtZW50QnlJZChpZG5hbWUpOwoJfQoJZWxzZSBpZiAoZG9jdW1lbnQuYWxsKQoJ ewoJCXJldHVybiBkb2N1bWVudC5hbGxbaWRuYW1lXTsKCX0KCWVsc2UgaWYgKGRv Y3VtZW50LmxheWVycykKCXsKCQlyZXR1cm4gZG9jdW1lbnQubGF5ZXJzW2lkbmFt ZV07Cgl9CgllbHNlCgl7CgkJcmV0dXJuIG51bGw7Cgl9Cn0KCi8qKgoqIEZ1bmN0 aW9uIHRvIGVtdWxhdGUgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUKKgoq IEBwYXJhbQlvYmplY3QJUGFyZW50IG9iamVjdCAoZWc6IGRvY3VtZW50KQoqIEBw YXJhbQlzdHJpbmcJVGFnIHR5cGUgKGVnOiAndGQnKQoqCiogQHJldHVybglhcnJh eQoqLwpmdW5jdGlvbiBmZXRjaF90YWdzKHBhcmVudG9iaiwgdGFnKQp7CglpZiAo cGFyZW50b2JqID09IG51bGwpCgl7CgkJcmV0dXJuIG5ldyBBcnJheSgpOwoJfQoJ ZWxzZSBpZiAodHlwZW9mIHBhcmVudG9iai5nZXRFbGVtZW50c0J5VGFnTmFtZSAh PSAndW5kZWZpbmVkJykKCXsKCQlyZXR1cm4gcGFyZW50b2JqLmdldEVsZW1lbnRz QnlUYWdOYW1lKHRhZyk7Cgl9CgllbHNlIGlmIChwYXJlbnRvYmouYWxsICYmIHBh cmVudG9iai5hbGwudGFncykKCXsKCQlyZXR1cm4gcGFyZW50b2JqLmFsbC50YWdz KHRhZyk7Cgl9CgllbHNlCgl7CgkJcmV0dXJuIG5ldyBBcnJheSgpOwoJfQp9Cgov KioKKiBGdW5jdGlvbiB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHRhZ3MgaW4gYW4g b2JqZWN0CioKKiBAcGFyYW0Jb2JqZWN0CVBhcmVudCBvYmplY3QgKGVnOiBkb2N1 bWVudCkKKiBAcGFyYW0Jc3RyaW5nCVRhZyB0eXBlIChlZzogJ3RkJykKKgoqIEBy ZXR1cm4JaW50ZWdlcgoqLwpmdW5jdGlvbiBmZXRjaF90YWdfY291bnQocGFyZW50 b2JqLCB0YWcpCnsKCXJldHVybiBmZXRjaF90YWdzKHBhcmVudG9iaiwgdGFnKS5s ZW5ndGg7Cn0KCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIEV2 ZW50IGhhbmRsZXJzCgovKioKKiBIYW5kbGVzIHRoZSBkaWZmZXJlbnQgZXZlbnQg bW9kZWxzIG9mIGRpZmZlcmVudCBicm93c2VycyBhbmQgcHJldmVudHMgZXZlbnQg YnViYmxpbmcKKgoqIEBwYXJhbQlldmVudAlFdmVudCBvYmplY3QKKgoqIEByZXR1 cm4JZXZlbnQKKi8KZnVuY3Rpb24gZG9fYW5fZShldmVudG9iaikKewoJaWYgKCFl dmVudG9iaiB8fCBpc19pZSkKCXsKCQl3aW5kb3cuZXZlbnQucmV0dXJuVmFsdWUg PSBmYWxzZTsKCQl3aW5kb3cuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTsKCQly ZXR1cm4gd2luZG93LmV2ZW50OwoJfQoJZWxzZQoJewoJCWV2ZW50b2JqLnN0b3BQ cm9wYWdhdGlvbigpOwoJCWV2ZW50b2JqLnByZXZlbnREZWZhdWx0KCk7CgkJcmV0 dXJuIGV2ZW50b2JqOwoJfQp9CgovKioKKiBIYW5kbGVzIHRoZSBkaWZmZXJlbnQg ZXZlbnQgbW9kZWxzIG9mIGRpZmZlcmVudCBicm93c2VycyBhbmQgcHJldmVudHMg ZXZlbnQgYnViYmxpbmcgaW4gYSBsZXNzZXIgd2F5IHRoYW4gZG9fYW5fZSgpCioK KiBAcGFyYW0JZXZlbnQJRXZlbnQgb2JqZWN0CioKKiBAcmV0dXJuCWV2ZW50Ciov CmZ1bmN0aW9uIGVfYnlfZ3VtKGV2ZW50b2JqKQp7CglpZiAoIWV2ZW50b2JqIHx8 IGlzX2llKQoJewoJCXdpbmRvdy5ldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlOwoJ CXJldHVybiB3aW5kb3cuZXZlbnQ7Cgl9CgllbHNlCgl7CgkJaWYgKGV2ZW50b2Jq LnRhcmdldC50eXBlID09ICdzdWJtaXQnKQoJCXsKCQkJLy8gbmF1Z2h0eSBzYWZh cmkKCQkJZXZlbnRvYmoudGFyZ2V0LmZvcm0uc3VibWl0KCk7CgkJfQoJCWV2ZW50 b2JqLnN0b3BQcm9wYWdhdGlvbigpOwoJCXJldHVybiBldmVudG9iajsKCX0KfQoK Ly8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gTWVzc2FnZSBtYW5p cHVsYXRpb24gYW5kIHZhbGlkYXRpb24KCi8qKgoqIENoZWNrcyB0aGF0IGEgbWVz c2FnZSBpcyB2YWxpZCBmb3Igc3VibWlzc2lvbiB0byBQSFAKKgoqIEBwYXJhbQlz dHJpbmcJTWVzc2FnZSB0ZXh0CiogQHBhcmFtCW1peGVkCUVpdGhlciBzdWJqZWN0 IHRleHQgKGlmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSBpdCBleGlzdHMpIG9yIDAg aWYgeW91IGRvbid0IGNhcmUKKiBAcGFyYW0JaW50ZWdlcglNaW5pbXVtIGFjY2Vw dGFibGUgY2hhcmFjdGVyIGxpbWl0IGZvciB0aGUgbWVzc2FnZQoqCiogQHJldHVy bglib29sZWFuCiovCmZ1bmN0aW9uIHZhbGlkYXRlbWVzc2FnZShtZXNzYWdldGV4 dCwgc3ViamVjdHRleHQsIG1pbmNoYXJzKQp7CglpZiAoaXNfa29uIHx8IGlzX3Nh ZiB8fCBpc193ZWJ0dikKCXsKCQkvLyBpZ25vcmUgbGVzcy10aGFuLWNhcGFibGUg YnJvd3NlcnMKCQlyZXR1cm4gdHJ1ZTsKCX0KCWVsc2UgaWYgKHN1YmplY3R0ZXh0 Lmxlbmd0aCA8IDEpCgl7CgkJLy8gc3ViamVjdCBub3Qgc3BlY2lmaWVkCgkJYWxl cnQodmJwaHJhc2VbJ211c3RfZW50ZXJfc3ViamVjdCddKTsKCQlyZXR1cm4gZmFs c2U7Cgl9CgllbHNlCgl7CgkJdmFyIHN0cmlwcGVkID0gUEhQLnRyaW0oc3RyaXBj b2RlKG1lc3NhZ2V0ZXh0LCBmYWxzZSwgaWdub3JlcXVvdGVjaGFycykpOwoKCQlp ZiAoc3RyaXBwZWQubGVuZ3RoIDwgbWluY2hhcnMpCgkJewoJCQkvLyBtaW5pbXVt IG1lc3NhZ2UgbGVuZ3RoIG5vdCBtZXQKCQkJYWxlcnQoY29uc3RydWN0X3BocmFz ZSh2YnBocmFzZVsnbWVzc2FnZV90b29fc2hvcnQnXSwgbWluY2hhcnMpKTsKCQkJ cmV0dXJuIGZhbHNlOwoJCX0KCQllbHNlIGlmICh0eXBlb2YoZG9jdW1lbnQuZm9y bXMudmJmb3JtKSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YoZG9jdW1lbnQuZm9y bXMudmJmb3JtLmltYWdlc3RhbXApICE9ICd1bmRlZmluZWQnKQoJCXsKCQkJLy8g VGhpcyBmb3JtIGhhcyBpbWFnZSB2ZXJpZmljYXRpb24gZW5hYmxlZAoJCQlkb2N1 bWVudC5mb3Jtcy52YmZvcm0uaW1hZ2VzdGFtcC5mYWlsZWQgPSBmYWxzZTsKCgkJ CWlmIChkb2N1bWVudC5mb3Jtcy52YmZvcm0uaW1hZ2VzdGFtcC52YWx1ZS5sZW5n dGggIT0gNikKCQkJewoJCQkJYWxlcnQodmJwaHJhc2VbJ2NvbXBsZXRlX2ltYWdl X3ZlcmlmaWNhdGlvbiddKTsKCQkJCWRvY3VtZW50LmZvcm1zLnZiZm9ybS5pbWFn ZXN0YW1wLmZhaWxlZCA9IHRydWU7CgkJCQlkb2N1bWVudC5mb3Jtcy52YmZvcm0u aW1hZ2VzdGFtcC5mb2N1cygpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCWVs c2UKCQkJewoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJ Ly8gZXZlcnl0aGluZyBzZWVtcyBvawoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9Cn0K CgovKioKKiBTdHJpcHMgcXVvdGVzIGFuZCBiYmNvZGUgdGFncyBmcm9tIHRleHQK KgoqIEBwYXJhbQlzdHJpbmcJVGV4dCB0byBtYW5pcHVsYXRlCiogQHBhcmFtCWJv b2xlYW4JSWYgdHJ1ZSwgc3RyaXAgPHg+IG90aGVyd2lzZSBzdHJpcCBbeF0KKiBA cGFyYW0JYm9vbGVhbglJZiB0cnVlLCBzdHJpcCBhbGwgW3F1b3RlXS4uLmNvbnRl bnRzLi4uWy9xdW90ZV0KKgoqIEByZXR1cm4Jc3RyaW5nCiovCmZ1bmN0aW9uIHN0 cmlwY29kZShzdHIsIGlzaHRtbCwgc3RyaXBxdW90ZXMpCnsKCWlmICghaXNfcmVn ZXhwKQoJewoJCXJldHVybiBzdHI7Cgl9CgoJaWYgKHN0cmlwcXVvdGVzKQoJewoJ CXZhciBzdGFydF90aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CgoJCXdoaWxl ICgoc3RhcnRpbmRleCA9IFBIUC5zdHJpcG9zKHN0ciwgJ1txdW90ZScpKSAhPT0g ZmFsc2UpCgkJewoJCQlpZiAobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydF90 aW1lID4gMjAwMCkKCQkJewoJCQkJLy8gd2hpbGUgbG9vcCBoYXMgYmVlbiBydW5u aW5nIGZvciBvdmVyIDIgc2Vjb25kcyBhbmQgaGFzIHByb2JhYmx5IGdvbmUgaW5m aW5pdGUKCQkJCWJyZWFrOwoJCQl9CgoJCQlpZiAoKHN0b3BpbmRleCA9IFBIUC5z dHJpcG9zKHN0ciwgJ1svcXVvdGVdJykpICE9PSBmYWxzZSkKCQkJewoJCQkJZnJh Z21lbnQgPSBzdHIuc3Vic3RyKHN0YXJ0aW5kZXgsIHN0b3BpbmRleCAtIHN0YXJ0 aW5kZXggKyA4KTsKCQkJCXN0ciA9IHN0ci5yZXBsYWNlKGZyYWdtZW50LCAnJyk7 CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlicmVhazsKCQkJfQoJCQlzdHIgPSBQSFAu dHJpbShzdHIpOwoJCX0KCX0KCglpZiAoaXNodG1sKQoJewoJCS8vIGV4ZW1wdCBp bWFnZSB0YWdzIC0tIHRoZXkgbmVlZCB0byBjb3VudCBhcyBjaGFyYWN0ZXJzIGlu IHRoZSBzdHJpbmcKCQkvLyBhcyB0aGUgZG8gYXMgQkIgY29kZXMKCQlzdHIgPSBz dHIucmVwbGFjZSgvPGltZ1tePl0rc3JjPSIoW14iXSspIltePl0qPi9naSwgJyQx Jyk7CgoJCXZhciBodG1sMSA9IG5ldyBSZWdFeHAoIjwoXFx3KylbXj5dKj4iLCAn Z2knKTsKCQl2YXIgaHRtbDIgPSBuZXcgUmVnRXhwKCI8XFwvXFx3Kz4iLCAnZ2kn KTsKCgkJc3RyID0gc3RyLnJlcGxhY2UoaHRtbDEsICcnKTsKCQlzdHIgPSBzdHIu cmVwbGFjZShodG1sMiwgJycpOwoKCQl2YXIgaHRtbDMgPSBuZXcgUmVnRXhwKCco Jm5ic3A7KScsICdnaScpOwoJCXN0ciA9IHN0ci5yZXBsYWNlKGh0bWwzLCAnICcp OwoJfQoJZWxzZQoJewoJCXZhciBiYmNvZGUxID0gbmV3IFJlZ0V4cCgiXFxbKFxc dyspKD1bXlxcXV0qKT9cXF0iLCAnZ2knKTsKCQl2YXIgYmJjb2RlMiA9IG5ldyBS ZWdFeHAoIlxcW1xcLyhcXHcrKVxcXSIsICdnaScpOwoKCQlzdHIgPSBzdHIucmVw bGFjZShiYmNvZGUxLCAnJyk7CgkJc3RyID0gc3RyLnJlcGxhY2UoYmJjb2RlMiwg JycpOwoJfQoKCXJldHVybiBzdHI7Cn0KCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCi8vIHZCX1BIUF9FbXVsYXRvciBjbGFzcwovLyAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIwoKLyoqCiogUEhQIEZ1bmN0aW9uIEVtdWxhdG9y IENsYXNzCiovCmZ1bmN0aW9uIHZCX1BIUF9FbXVsYXRvcigpCnsKfQoKLy8gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gdkJfUEhQX0VtdWxhdG9yIE1l dGhvZHMKCi8qKgoqIEZpbmQgYSBzdHJpbmcgd2l0aGluIGEgc3RyaW5nIChjYXNl IGluc2Vuc2l0aXZlKQoqCiogQHBhcmFtCXN0cmluZwlIYXlzdGFjawoqIEBwYXJh bQlzdHJpbmcJTmVlZGxlCiogQHBhcmFtCWludGVnZXIJT2Zmc2V0CioKKiBAcmV0 dXJuCW1peGVkCU5vdCBmb3VuZDogZmFsc2UgLyBGb3VuZDogaW50ZWdlciBwb3Np dGlvbgoqLwp2Ql9QSFBfRW11bGF0b3IucHJvdG90eXBlLnN0cmlwb3MgPSBmdW5j dGlvbihoYXlzdGFjaywgbmVlZGxlLCBvZmZzZXQpCnsKCWlmICh0eXBlb2Ygb2Zm c2V0ID09ICd1bmRlZmluZWQnKQoJewoJCW9mZnNldCA9IDA7Cgl9CgoJaW5kZXgg PSBoYXlzdGFjay50b0xvd2VyQ2FzZSgpLmluZGV4T2YobmVlZGxlLnRvTG93ZXJD YXNlKCksIG9mZnNldCk7CgoJcmV0dXJuIChpbmRleCA9PSAtMSA/IGZhbHNlIDog aW5kZXgpOwp9CgovKioKKiBUcmltcyBsZWFkaW5nIHdoaXRlc3BhY2UKKgoqIEBw YXJhbQlzdHJpbmcJU3RyaW5nIHRvIHRyaW0KKgoqIEByZXR1cm4Jc3RyaW5nCiov CnZCX1BIUF9FbXVsYXRvci5wcm90b3R5cGUubHRyaW0gPSBmdW5jdGlvbihzdHIp CnsKCXJldHVybiBzdHIucmVwbGFjZSgvXlxzKy9nLCAnJyk7Cn0KCi8qKgoqIFRy aW1zIHRyYWlsaW5nIHdoaXRlc3BhY2UKKgoqIEBwYXJhbQlzdHJpbmcJU3RyaW5n IHRvIHRyaW0KKgoqIEByZXR1cm4Jc3RyaW5nCiovCnZCX1BIUF9FbXVsYXRvci5w cm90b3R5cGUucnRyaW0gPSBmdW5jdGlvbihzdHIpCnsKCXJldHVybiBzdHIucmVw bGFjZSgvKFxzKykkL2csICcnKTsKfQoKLyoqCiogVHJpbXMgbGVhZGluZyBhbmQg dHJhaWxpbmcgd2hpdGVzcGFjZQoqCiogQHBhcmFtCXN0cmluZwlTdHJpbmcgdG8g dHJpbQoqCiogQHJldHVybglzdHJpbmcKKi8KdkJfUEhQX0VtdWxhdG9yLnByb3Rv dHlwZS50cmltID0gZnVuY3Rpb24oc3RyKQp7CglyZXR1cm4gdGhpcy5sdHJpbSh0 aGlzLnJ0cmltKHN0cikpOwp9CgovKioKKiBFbXVsYXRpb24gb2YgUEhQJ3MgcHJl Z19xdW90ZSgpCioKKiBAcGFyYW0Jc3RyaW5nCVN0cmluZyB0byBwcm9jZXNzCioK KiBAcmV0dXJuCXN0cmluZwoqLwp2Ql9QSFBfRW11bGF0b3IucHJvdG90eXBlLnBy ZWdfcXVvdGUgPSBmdW5jdGlvbihzdHIpCnsKCS8vIHJlcGxhY2UgKyB7IH0gKCAp IFsgXSB8IC8gPyBeICQgXCAuID0gISA8ID4gOiAqIHdpdGggYmFja3NsYXNoK2No YXJhY3RlcgoJcmV0dXJuIHN0ci5yZXBsYWNlKC8oXCt8XHt8XH18XCh8XCl8XFt8 XF18XHx8XC98XD98XF58XCR8XFx8XC58XD18XCF8XDx8XD58XDp8XCopL2csICJc XCQxIik7Cn0KCi8qKgoqIEVtdWxhdGVzIFBIUCdzIHByZWdfbWF0Y2hfYWxsKCku Li4gc29ydCBvZgoqCiogQHBhcmFtCXN0cmluZwlIYXlzdGFjawoqIEBwYXJhbQlz dHJpbmcJUmVndWxhciBleHByZXNzaW9uIC0gdG8gYmUgaW5zZXJ0ZWQgaW50byBS ZWdFeHAoeCkKKgoqIEByZXR1cm4JbWl4ZWQJQXJyYXkgb24gbWF0Y2gsIGZhbHNl IG9uIG5vIG1hdGNoCiovCnZCX1BIUF9FbXVsYXRvci5wcm90b3R5cGUubWF0Y2hf YWxsID0gZnVuY3Rpb24oc3RyaW5nLCByZWdleCkKewoJdmFyIGdtYXRjaCA9IHN0 cmluZy5tYXRjaChSZWdFeHAocmVnZXgsICJnaW0iKSk7CglpZiAoZ21hdGNoKQoJ ewoJCXZhciBtYXRjaGVzID0gbmV3IEFycmF5KCk7CgoJCXZhciBpcmVnZXggPSBu ZXcgUmVnRXhwKHJlZ2V4LCAiaW0iKTsKCQlmb3IgKHZhciBpID0gMDsgaSA8IGdt YXRjaC5sZW5ndGg7IGkrKykKCQl7CgkJCW1hdGNoZXNbbWF0Y2hlcy5sZW5ndGhd ID0gZ21hdGNoW2ldLm1hdGNoKGlyZWdleCk7CgkJfQoKCQlyZXR1cm4gbWF0Y2hl czsKCX0KCWVsc2UKCXsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0KCi8qKgoqIEVtdWxh dGVzIHVuaHRtbHNwZWNpYWxjaGFycyBpbiB2QnVsbGV0aW4KKgoqIEBwYXJhbQlz dHJpbmcJU3RyaW5nIHRvIHByb2Nlc3MKKgoqIEByZXR1cm4Jc3RyaW5nCiovCnZC X1BIUF9FbXVsYXRvci5wcm90b3R5cGUudW5odG1sc3BlY2lhbGNoYXJzID0gZnVu Y3Rpb24oc3RyKQp7CglmID0gbmV3IEFycmF5KC8mbHQ7L2csIC8mZ3Q7L2csIC8m cXVvdDsvZywgLyZhbXA7L2cpOwoJciA9IG5ldyBBcnJheSgnPCcsICc+JywgJyIn LCAnJicpOwoKCWZvciAodmFyIGkgaW4gZikKCXsKCQlzdHIgPSBzdHIucmVwbGFj ZShmW2ldLCByW2ldKTsKCX0KCglyZXR1cm4gc3RyOwp9CgovKioKKiBVbmVzY2Fw ZSBDREFUQSBmcm9tIHZCX0FKQVhfWE1MX0J1aWxkZXIgUEhQIGNsYXNzCioKKiBA cGFyYW0Jc3RyaW5nCUVzY2FwZWQgQ0RBVEEKKgoqIEByZXR1cm4Jc3RyaW5nCiov CnZCX1BIUF9FbXVsYXRvci5wcm90b3R5cGUudW5lc2NhcGVfY2RhdGEgPSBmdW5j dGlvbihzdHIpCnsKCXZhciByMSA9IC88XD1cIVw9XFtcPUNcPURcPUFcPVRcPUFc PVxbL2c7Cgl2YXIgcjIgPSAvXF1cPVxdXD0+L2c7CgoJcmV0dXJuIHN0ci5yZXBs YWNlKHIxLCAnPCFbQ0RBVEFbJykucmVwbGFjZShyMiwgJ11dPicpOwp9CgovKioK KiBFbXVsYXRlcyBQSFAncyBodG1sc3BlY2lhbGNoYXJzKCkKKgoqIEBwYXJhbQlz dHJpbmcJU3RyaW5nIHRvIHByb2Nlc3MKKgoqIEByZXR1cm4Jc3RyaW5nCiovCnZC X1BIUF9FbXVsYXRvci5wcm90b3R5cGUuaHRtbHNwZWNpYWxjaGFycyA9IGZ1bmN0 aW9uKHN0cikKewoJLy92YXIgZiA9IG5ldyBBcnJheSgvJig/ISNbMC05XSs7KS9n LCAvPC9nLCAvPi9nLCAvIi9nKTsKCXZhciBmID0gbmV3IEFycmF5KAoJCShpc19t YWMgJiYgaXNfaWUgPyBuZXcgUmVnRXhwKCcmJywgJ2cnKSA6IG5ldyBSZWdFeHAo JyYoPyEjWzAtOV0rOyknLCAnZycpKSwKCQluZXcgUmVnRXhwKCc8JywgJ2cnKSwK CQluZXcgUmVnRXhwKCc+JywgJ2cnKSwKCQluZXcgUmVnRXhwKCciJywgJ2cnKQoJ KTsKCXZhciByID0gbmV3IEFycmF5KAoJCScmYW1wOycsCgkJJyZsdDsnLAoJCScm Z3Q7JywKCQknJnF1b3Q7JwoJKTsKCglmb3IgKHZhciBpID0gMDsgaSA8IGYubGVu Z3RoOyBpKyspCgl7CgkJc3RyID0gc3RyLnJlcGxhY2UoZltpXSwgcltpXSk7Cgl9 CgoJcmV0dXJuIHN0cjsKfQoKLyoqCiogU2VhcmNoZXMgYW4gYXJyYXkgZm9yIGEg dmFsdWUKKgoqIEBwYXJhbQlzdHJpbmcJTmVlZGxlCiogQHBhcmFtCWFycmF5CUhh eXN0YWNrCiogQHBhcmFtCWJvb2xlYW4JQ2FzZSBpbnNlbnNpdGl2ZQoqCiogQHJl dHVybglpbnRlZ2VyCU5vdCBmb3VuZDogLTEgLyBGb3VuZDogaW50ZWdlciBpbmRl eAoqLwp2Ql9QSFBfRW11bGF0b3IucHJvdG90eXBlLmluX2FycmF5ID0gZnVuY3Rp b24oaW5lZWRsZSwgaGF5c3RhY2ssIGNhc2VpbnNlbnNpdGl2ZSkKewoJdmFyIG5l ZWRsZSA9IG5ldyBTdHJpbmcoaW5lZWRsZSk7CgoJaWYgKGNhc2VpbnNlbnNpdGl2 ZSkKCXsKCQluZWVkbGUgPSBuZWVkbGUudG9Mb3dlckNhc2UoKTsKCQlmb3IgKHZh ciBpIGluIGhheXN0YWNrKQoJCXsKCQkJaWYgKGhheXN0YWNrW2ldLnRvTG93ZXJD YXNlKCkgPT0gbmVlZGxlKQoJCQl7CgkJCQlyZXR1cm4gaTsKCQkJfQoJCX0KCX0K CWVsc2UKCXsKCQlmb3IgKHZhciBpIGluIGhheXN0YWNrKQoJCXsKCQkJaWYgKGhh eXN0YWNrW2ldID09IG5lZWRsZSkKCQkJewoJCQkJcmV0dXJuIGk7CgkJCX0KCQl9 Cgl9CglyZXR1cm4gLTE7Cn0KCi8qKgoqIEVtdWxhdGVzIFBIUCdzIHN0cnBhZCgp CioKKiBAcGFyYW0Jc3RyaW5nCVRleHQgdG8gcGFkCiogQHBhcmFtCWludGVnZXIJ TGVuZ3RoIHRvIHBhZAoqIEBwYXJhbQlzdHJpbmcJU3RyaW5nIHdpdGggd2hpY2gg dG8gcGFkCioKKiBAcmV0dXJuCXN0cmluZwoqLwp2Ql9QSFBfRW11bGF0b3IucHJv dG90eXBlLnN0cl9wYWQgPSBmdW5jdGlvbih0ZXh0LCBsZW5ndGgsIHBhZHN0cmlu ZykKewoJdGV4dCA9IG5ldyBTdHJpbmcodGV4dCk7CglwYWRzdHJpbmcgPSBuZXcg U3RyaW5nKHBhZHN0cmluZyk7CgoJaWYgKHRleHQubGVuZ3RoIDwgbGVuZ3RoKQoJ ewoJCXBhZHRleHQgPSBuZXcgU3RyaW5nKHBhZHN0cmluZyk7CgoJCXdoaWxlIChw YWR0ZXh0Lmxlbmd0aCA8IChsZW5ndGggLSB0ZXh0Lmxlbmd0aCkpCgkJewoJCQlw YWR0ZXh0ICs9IHBhZHN0cmluZzsKCQl9CgoJCXRleHQgPSBwYWR0ZXh0LnN1YnN0 cigwLCAobGVuZ3RoIC0gdGV4dC5sZW5ndGgpKSArIHRleHQ7Cgl9CgoJcmV0dXJu IHRleHQ7Cn0KCi8qKgoqIEEgc29ydCBvZiBlbXVsYXRpb24gb2YgUEhQJ3MgdXJs ZW5jb2RlIC0gbm90IDEwMCUgdGhlIHNhbWUsIGJ1dCBhY2NvbXBsaXNoZXMgdGhl IHNhbWUgdGhpbmcKKgoqIEBwYXJhbQlzdHJpbmcJU3RyaW5nIHRvIGVuY29kZQoq CiogQHJldHVybglzdHJpbmcKKi8KdkJfUEhQX0VtdWxhdG9yLnByb3RvdHlwZS51 cmxlbmNvZGUgPSBmdW5jdGlvbih0ZXh0KQp7Cgl0ZXh0ID0gZXNjYXBlKHRleHQu dG9TdHJpbmcoKSkucmVwbGFjZSgvXCsvZywgIiUyQiIpOwoKCS8vIHRoaXMgZXNj YXBlcyAxMjggLSAyNTUsIGFzIEpTIHVzZXMgdGhlIHVuaWNvZGUgY29kZSBwb2lu dHMgZm9yIHRoZW0uCgkvLyBUaGlzIGNhdXNlcyBwcm9ibGVtcyB3aXRoIHN1Ym1p dHRpbmcgdGV4dCB2aWEgQUpBWCB3aXRoIHRoZSBVVEYtOCBjaGFyc2V0LgoJdmFy IG1hdGNoZXMgPSB0ZXh0Lm1hdGNoKC8oJShbMC05QS1GXXsyfSkpL2dpKTsKCWlm IChtYXRjaGVzKQoJewoJCWZvciAodmFyIG1hdGNoaWQgPSAwOyBtYXRjaGlkIDwg bWF0Y2hlcy5sZW5ndGg7IG1hdGNoaWQrKykKCQl7CgkJCXZhciBjb2RlID0gbWF0 Y2hlc1ttYXRjaGlkXS5zdWJzdHJpbmcoMSwzKTsKCQkJaWYgKHBhcnNlSW50KGNv ZGUsIDE2KSA+PSAxMjgpCgkJCXsKCQkJCXRleHQgPSB0ZXh0LnJlcGxhY2UobWF0 Y2hlc1ttYXRjaGlkXSwgJyV1MDAnICsgY29kZSk7CgkJCX0KCQl9Cgl9CgoJLy8g JTI1IGdldHMgdHJhbnNsYXRlZCB0byAlIGJ5IFBIUCwgc28gaWYgeW91IGhhdmUg JTI1dTEyMzQsCgkvLyB3ZSBzZWUgaXQgYXMgJXUxMjM0IGFuZCBpdCBnZXRzIHRy YW5zbGF0ZWQuIFNvIG1ha2UgaXQgJXUwMDI1dTEyMzQsCgkvLyB3aGljaCB3aWxs IHByaW50IGFzICV1MTIzNCEKCXRleHQgPSB0ZXh0LnJlcGxhY2UoJyUyNScsICcl dTAwMjUnKTsKCglyZXR1cm4gdGV4dDsKfQoKLyoqCiogV29ya3MgYSBiaXQgbGlr ZSB1Y2ZpcnN0LCBidXQgd2l0aCBzb21lIGV4dHJhIG9wdGlvbnMKKgoqIEBwYXJh bQlzdHJpbmcJU3RyaW5nIHdpdGggd2hpY2ggdG8gd29yawoqIEBwYXJhbQlzdHJp bmcJQ3V0IG9mZiBzdHJpbmcgYmVmb3JlIGZpcnN0IG9jY3VyZW5jZSBvZiB0aGlz IHN0cmluZwoqCiogQHJldHVybglzdHJpbmcKKi8KdkJfUEhQX0VtdWxhdG9yLnBy b3RvdHlwZS51Y2ZpcnN0ID0gZnVuY3Rpb24oc3RyLCBjdXRvZmYpCnsKCWlmICh0 eXBlb2YgY3V0b2ZmICE9ICd1bmRlZmluZWQnKQoJewoJCXZhciBjdXRwb3MgPSBz dHIuaW5kZXhPZihjdXRvZmYpOwoJCWlmIChjdXRwb3MgPiAwKQoJCXsKCQkJc3Ry ID0gc3RyLnN1YnN0cigwLCBjdXRwb3MpOwoJCX0KCX0KCglzdHIgPSBzdHIuc3Bs aXQoJyAnKTsKCWZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKQoJ ewoJCXN0cltpXSA9IHN0cltpXS5zdWJzdHIoMCwgMSkudG9VcHBlckNhc2UoKSAr IHN0cltpXS5zdWJzdHIoMSk7Cgl9CglyZXR1cm4gc3RyLmpvaW4oJyAnKTsKfQoK Ly8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gdkJfQUpBWF9IYW5k bGVyCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovKioKKiBYTUwg U2VuZGVyIENsYXNzCioKKiBAcGFyYW0JYm9vbGVhbglTaG91bGQgY29ubmVjdGlv bnMgYmUgYXN5bmNyb25vdXM/CiovCmZ1bmN0aW9uIHZCX0FKQVhfSGFuZGxlcihh c3luYykKewoJLyoqCgkqIFNob3VsZCBjb25uZWN0aW9ucyBiZSBhc3luY2hyb25v dXM/CgkqCgkqIEB2YXIJYm9vbGVhbgoJKi8KCXRoaXMuYXN5bmMgPSBhc3luYyA/ IHRydWUgOiBmYWxzZTsKfQoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLy8gdkJfQUpBWF9IYW5kbGVyIG1ldGhvZHMKCi8qKgoqIEluaXRpYWxpemVz IHRoZSBYTUwgaGFuZGxlcgoqCiogQHJldHVybglib29sZWFuCVRydWUgaWYgaGFu ZGxlciBjcmVhdGVkIE9LCiovCnZCX0FKQVhfSGFuZGxlci5wcm90b3R5cGUuaW5p dCA9IGZ1bmN0aW9uKCkKewoJaWYgKHR5cGVvZiB2Yl9kaXNhYmxlX2FqYXggIT0g J3VuZGVmaW5lZCcgJiYgdmJfZGlzYWJsZV9hamF4ID09IDIpCgl7CgkJLy8gZGlz YWJsZSBhbGwgYWpheCBmZWF0dXJlcwoJCXJldHVybiBmYWxzZTsKCX0KCglpZiAo dHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9ICJ1bmRlZmluZWQiKQoJewoJCXRoaXMu aGFuZGxlciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwoJCXJldHVybiAodGhpcy5o YW5kbGVyLnNldFJlcXVlc3RIZWFkZXIgPyB0cnVlIDogZmFsc2UpOwoJfQoJZWxz ZSBpZiAoaXNfaWUgJiYgIWlzX2llNykKCXsKCQl0aGlzLmhhbmRsZXIgPSBldmFs KCJuZXcgQSIgKyAiY3RpdiIgKyAiZVgiICsgIk9iIiArICJqZWN0KCdNaWNyIiAr ICJvc29mdC5YTSIgKyAiTEhUVFAnKTsiKTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWVs c2UKCXsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0KCi8qKgoqIERldGVjdHMgaWYgdGhl IGJyb3dzZXIgaXMgZnVsbHkgY29tcGF0aWJsZQoqCiogQHJldHVybglib29sZWFu CiovCnZCX0FKQVhfSGFuZGxlci5wcm90b3R5cGUuaXNfY29tcGF0aWJsZSA9IGZ1 bmN0aW9uKCkKewoJaWYgKHR5cGVvZiB2Yl9kaXNhYmxlX2FqYXggIT0gJ3VuZGVm aW5lZCcgJiYgdmJfZGlzYWJsZV9hamF4ID09IDIpCgl7CgkJLy8gZGlzYWJsZSBh bGwgYWpheCBmZWF0dXJlcwoJCXJldHVybiBmYWxzZTsKCX0KCglpZiAoaXNfaWUg JiYgIWlzX2llNCkgeyByZXR1cm4gdHJ1ZTsgfQoJZWxzZSBpZiAodHlwZW9mIFhN TEh0dHBSZXF1ZXN0ICE9ICd1bmRlZmluZWQnKQoJewoJCXRyeSB7IHJldHVybiBY TUxIdHRwUmVxdWVzdC5wcm90b3R5cGUuc2V0UmVxdWVzdEhlYWRlciA/IHRydWUg OiBmYWxzZTsgfQoJCWNhdGNoKGUpCgkJewoJCQl0cnkgeyB2YXIgdGVzdGVyID0g bmV3IFhNTEh0dHBSZXF1ZXN0KCk7IHJldHVybiB0ZXN0ZXIuc2V0UmVxdWVzdEhl YWRlciA/IHRydWUgOiBmYWxzZTsgfQoJCQljYXRjaChlKSB7IHJldHVybiBmYWxz ZTsgfQoJCX0KCX0KCWVsc2UgeyByZXR1cm4gZmFsc2U7IH0KfQoKLyoqCiogQ2hl Y2tzIGlmIHRoZSBzeXN0ZW0gaXMgcmVhZHkKKgoqIEByZXR1cm4JYm9vbGVhbglG YWxzZSBpZiByZWFkeQoqLwp2Ql9BSkFYX0hhbmRsZXIucHJvdG90eXBlLm5vdF9y ZWFkeSA9IGZ1bmN0aW9uKCkKewoJcmV0dXJuICh0aGlzLmhhbmRsZXIucmVhZHlT dGF0ZSAmJiAodGhpcy5oYW5kbGVyLnJlYWR5U3RhdGUgPCA0KSk7Cn0KCi8qKgoq IE9uUmVhZHlTdGF0ZUNoYW5nZSBldmVudCBoYW5kbGVyCioKKiBAcGFyYW0JZnVu Y3Rpb24KKi8KdkJfQUpBWF9IYW5kbGVyLnByb3RvdHlwZS5vbnJlYWR5c3RhdGVj aGFuZ2UgPSBmdW5jdGlvbihldmVudCkKewoJaWYgKCF0aGlzLmhhbmRsZXIpCgl7 CgkJaWYgICghdGhpcy5pbml0KCkpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJ fQoJaWYgKHR5cGVvZiBldmVudCA9PSAnZnVuY3Rpb24nKQoJewoJCXRoaXMuaGFu ZGxlci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBldmVudDsKCX0KCWVsc2UKCXsKCQlh bGVydCgnWE1MIFNlbmRlciBPblJlYWR5U3RhdGUgZXZlbnQgaXMgbm90IGEgZnVu Y3Rpb24nKTsKCX0KCglyZXR1cm4gZmFsc2U7Cn0KCi8qKgoqIFNlbmRzIGRhdGEK KgoqIEBwYXJhbQlzdHJpbmcJRGVzdGluYXRpb24gVVJMCiogQHBhcmFtCXN0cmlu ZwlSZXF1ZXN0IERhdGEKKgoqIEByZXR1cm4JbWl4ZWQJUmV0dXJuIG1lc3NhZ2UK Ki8KdkJfQUpBWF9IYW5kbGVyLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24oZGVz dHVybCwgZGF0YXN0cmVhbSkKewoJaWYgKCF0aGlzLmhhbmRsZXIpCgl7CgkJaWYg KCF0aGlzLmluaXQoKSkKCQl7CgkJCXJldHVybiBmYWxzZTsKCQl9Cgl9CglpZiAo IXRoaXMubm90X3JlYWR5KCkpCgl7CgkJdGhpcy5oYW5kbGVyLm9wZW4oJ1BPU1Qn LCBkZXN0dXJsLCB0aGlzLmFzeW5jKTsKCQl0aGlzLmhhbmRsZXIuc2V0UmVxdWVz dEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0t dXJsZW5jb2RlZCcpOwoJCXRoaXMuaGFuZGxlci5zZW5kKGRhdGFzdHJlYW0gKyAn JnNlY3VyaXR5dG9rZW49JyArIFNFQ1VSSVRZVE9LRU4gKyAnJnM9JyArIGZldGNo X3Nlc3Npb25oYXNoKCkpOwoKCQlpZiAoIXRoaXMuYXN5bmMgJiYgdGhpcy5oYW5k bGVyLnJlYWR5U3RhdGUgPT0gNCAmJiB0aGlzLmhhbmRsZXIuc3RhdHVzID09IDIw MCkKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCX0KCXJldHVybiBmYWxzZTsKfQoK LyoqCiogRmV0Y2hlcyB0aGUgY29udGVudHMgb2YgYW4gWE1MIG5vZGUKKgoqIEBw YXJhbQlvYmplY3QJWE1MIG5vZGUKKgoqIEByZXR1cm4Jc3RyaW5nCVhNTCBub2Rl IGNvbnRlbnRzCiovCnZCX0FKQVhfSGFuZGxlci5wcm90b3R5cGUuZmV0Y2hfZGF0 YSA9IGZ1bmN0aW9uKHhtbF9ub2RlKQp7CglpZiAoeG1sX25vZGUgJiYgeG1sX25v ZGUuZmlyc3RDaGlsZCAmJiB4bWxfbm9kZS5maXJzdENoaWxkLm5vZGVWYWx1ZSkK CXsKCQlyZXR1cm4gUEhQLnVuZXNjYXBlX2NkYXRhKHhtbF9ub2RlLmZpcnN0Q2hp bGQubm9kZVZhbHVlKTsKCX0KCWVsc2UKCXsKCQlyZXR1cm4gJyc7Cgl9Cn0KCi8v IHdlIGNhbiBjaGVjayB0aGlzIHZhcmlhYmxlIHRvIHNlZSBpZiBicm93c2VyIGlz IEFKQVggY29tcGF0aWJsZQpBSkFYX0NvbXBhdGlibGUgPSB2Ql9BSkFYX0hhbmRs ZXIucHJvdG90eXBlLmlzX2NvbXBhdGlibGUoKTsKY29uc29sZS5pbmZvKCJCcm93 c2VyIGlzJXMgQUpBWCBjb21wYXRpYmxlIiwgQUpBWF9Db21wYXRpYmxlID8gIiIg OiAiIE5PVCIpOwoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8g dkJfSGlkZGVuX0Zvcm0KLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK Ci8qKgoqIEZvcm0gR2VuZXJhdG9yIENsYXNzCioKKiBCdWlsZHMgYSBmb3JtIGZp bGxlZCB3aXRoIGhpZGRlbiBmaWVsZHMgZm9yIGludmlzaWJsZSBzdWJtaXQgdmlh IFBPU1QKKgoqIEBwYXJhbQlzdHJpbmcJU2NyaXB0IChteV90YXJnZXRfc2NyaXB0 LnBocCkKKi8KZnVuY3Rpb24gdkJfSGlkZGVuX0Zvcm0oc2NyaXB0KQp7Cgl0aGlz LmFjdGlvbiA9IHNjcmlwdDsKCXRoaXMudmFyaWFibGVzID0gbmV3IEFycmF5KCk7 Cn0KCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIHZCX0hpZGRl bl9Gb3JtIG1ldGhvZHMKCi8qKgoqIEFkZHMgYSBoaWRkZW4gaW5wdXQgZmllbGQg dG8gdGhlIGZvcm0gb2JqZWN0CioKKiBAcGFyYW0Jc3RyaW5nCU5hbWUgYXR0cmli dXRlCiogQHBhcmFtCXN0cmluZwlWYWx1ZSBhdHRyaWJ1dGUKKi8KdkJfSGlkZGVu X0Zvcm0ucHJvdG90eXBlLmFkZF92YXJpYWJsZSA9IGZ1bmN0aW9uKG5hbWUsIHZh bHVlKQp7Cgl0aGlzLnZhcmlhYmxlc1t0aGlzLnZhcmlhYmxlcy5sZW5ndGhdID0g bmV3IEFycmF5KG5hbWUsIHZhbHVlKTsKCWNvbnNvbGUubG9nKCJ2Ql9IaWRkZW5f Rm9ybSA6OiBhZGRfdmFyaWFibGUoJXMpIiwgbmFtZSk7Cn07CgovKioKKiBGZXRj aGVzIGFsbCBmb3JtIGVsZW1lbnRzIGluc2lkZSBhbiBIVE1MIGVsZW1lbnQgYW5k IHBlcmZvcm1zICdhZGRfaW5wdXQoKScgb24gdGhlbQoqCiogQHBhcmFtCW9iamVj dAlIVE1MIGVsZW1lbnQgdG8gc2VhcmNoCiovCnZCX0hpZGRlbl9Gb3JtLnByb3Rv dHlwZS5hZGRfdmFyaWFibGVzX2Zyb21fb2JqZWN0ID0gZnVuY3Rpb24ob2JqKQp7 CglpZiAoIW9iaikKCXsKCQlyZXR1cm47Cgl9Cgljb25zb2xlLmluZm8oInZCX0hp ZGRlbl9Gb3JtIDo6IGFkZF92YXJpYWJsZXNfZnJvbV9vYmplY3QoJXMpIiwgb2Jq LmlkKTsKCXZhciBpbnB1dHMgPSBmZXRjaF90YWdzKG9iaiwgJ2lucHV0Jyk7Cglm b3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykKCXsKCQlzd2l0 Y2ggKGlucHV0c1tpXS50eXBlKQoJCXsKCQkJY2FzZSAnY2hlY2tib3gnOgoJCQlj YXNlICdyYWRpbyc6CgkJCQlpZiAoaW5wdXRzW2ldLmNoZWNrZWQpCgkJCQl7CgkJ CQkJdGhpcy5hZGRfdmFyaWFibGUoaW5wdXRzW2ldLm5hbWUsIGlucHV0c1tpXS52 YWx1ZSk7CgkJCQl9CgkJCQlicmVhazsKCQkJY2FzZSAndGV4dCc6CgkJCWNhc2Ug J2hpZGRlbic6CgkJCWNhc2UgJ3Bhc3N3b3JkJzoKCQkJCXRoaXMuYWRkX3Zhcmlh YmxlKGlucHV0c1tpXS5uYW1lLCBpbnB1dHNbaV0udmFsdWUpOwoJCQkJYnJlYWs7 CgkJCWRlZmF1bHQ6CgkJCQljb250aW51ZTsKCQl9Cgl9CgoJdmFyIHRleHRhcmVh cyA9IGZldGNoX3RhZ3Mob2JqLCAndGV4dGFyZWEnKTsKCWZvciAodmFyIGkgPSAw OyBpIDwgdGV4dGFyZWFzLmxlbmd0aDsgaSsrKQoJewoJCXRoaXMuYWRkX3Zhcmlh YmxlKHRleHRhcmVhc1tpXS5uYW1lLCB0ZXh0YXJlYXNbaV0udmFsdWUpOwoJfQoK CXZhciBzZWxlY3RzID0gZmV0Y2hfdGFncyhvYmosICdzZWxlY3QnKTsKCWZvciAo dmFyIGkgPSAwOyBpIDwgc2VsZWN0cy5sZW5ndGg7IGkrKykKCXsKCQlpZiAoc2Vs ZWN0c1tpXS5tdWx0aXBsZSkKCQl7CgkJCWZvciAodmFyIGogPSAwOyBqIDwgc2Vs ZWN0c1tpXS5vcHRpb25zLmxlbmd0aDsgaisrKQoJCQl7CgkJCQlpZiAoc2VsZWN0 c1tpXS5vcHRpb25zW2pdLnNlbGVjdGVkKQoJCQkJewoJCQkJCXRoaXMuYWRkX3Zh cmlhYmxlKHNlbGVjdHNbaV0ubmFtZSwgc2VsZWN0c1tpXS5vcHRpb25zW2pdLnZh bHVlKTsKCQkJCX0KCQkJfQoJCX0KCQllbHNlCgkJewoJCQl0aGlzLmFkZF92YXJp YWJsZShzZWxlY3RzW2ldLm5hbWUsIHNlbGVjdHNbaV0ub3B0aW9uc1tzZWxlY3Rz W2ldLnNlbGVjdGVkSW5kZXhdLnZhbHVlKTsKCQl9Cgl9Cn07CgovKioKKiBGZXRj aGVzIGEgdmFyaWFibGUgdmFsdWUKKgoqIEBwYXJhbQlzdHJpbmcJVmFyaWFibGUg bmFtZQoqCiogQHJldHVybgltaXhlZAlWYXJpYWJsZSB2YWx1ZQoqLwp2Ql9IaWRk ZW5fRm9ybS5wcm90b3R5cGUuZmV0Y2hfdmFyaWFibGUgPSBmdW5jdGlvbih2YXJu YW1lKQp7Cglmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmFyaWFibGVzLmxlbmd0 aDsgaSsrKQoJewoJCWlmICh0aGlzLnZhcmlhYmxlc1tpXVswXSA9PSB2YXJuYW1l KQoJCXsKCQkJcmV0dXJuIHRoaXMudmFyaWFibGVzW2ldWzFdOwoJCX0KCX0KCgly ZXR1cm4gbnVsbDsKfTsKCi8qKgoqIFN1Ym1pdHMgdGhlIGhpZGRlbiBmb3JtIG9i amVjdAoqLwp2Ql9IaWRkZW5fRm9ybS5wcm90b3R5cGUuc3VibWl0X2Zvcm0gPSBm dW5jdGlvbigpCnsKCXRoaXMuZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo J2Zvcm0nKTsKCXRoaXMuZm9ybS5tZXRob2QgPSAncG9zdCc7Cgl0aGlzLmZvcm0u YWN0aW9uID0gdGhpcy5hY3Rpb247CgoJZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz LnZhcmlhYmxlcy5sZW5ndGg7IGkrKykKCXsKCQl2YXIgaW5wdXRvYmogPSBkb2N1 bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwoKCQlpbnB1dG9iai50eXBlICA9 ICdoaWRkZW4nOwoJCWlucHV0b2JqLm5hbWUgID0gdGhpcy52YXJpYWJsZXNbaV1b MF07CgkJaW5wdXRvYmoudmFsdWUgPSB0aGlzLnZhcmlhYmxlc1tpXVsxXTsKCgkJ dGhpcy5mb3JtLmFwcGVuZENoaWxkKGlucHV0b2JqKTsKCX0KCgljb25zb2xlLmlu Zm8oInZCX0hpZGRlbl9Gb3JtIDo6IHN1Ym1pdF9mb3JtKCkgLT4gJXMiLCB0aGlz LmFjdGlvbik7Cglkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZm9ybSku c3VibWl0KCk7Cn07CgovKioKKiBCdWlsZHMgYSBVUkkgcXVlcnkgc3RyaW5nIGZy b20gdGhlIGdpdmVuIHZhcmlhYmxlcwoqLwp2Ql9IaWRkZW5fRm9ybS5wcm90b3R5 cGUuYnVpbGRfcXVlcnlfc3RyaW5nID0gZnVuY3Rpb24oKQp7Cgl2YXIgcXVlcnlf c3RyaW5nID0gJyc7CgoJZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZhcmlhYmxl cy5sZW5ndGg7IGkrKykKCXsKCQlxdWVyeV9zdHJpbmcgKz0gdGhpcy52YXJpYWJs ZXNbaV1bMF0gKyAnPScgKyBQSFAudXJsZW5jb2RlKHRoaXMudmFyaWFibGVzW2ld WzFdKSArICcmJzsKCX0KCgljb25zb2xlLmluZm8oInZCX0hpZGRlbl9Gb3JtIDo6 IFF1ZXJ5IFN0cmluZyA9ICVzIiwgcXVlcnlfc3RyaW5nKTsKCXJldHVybiBxdWVy eV9zdHJpbmc7Cn0KCi8qKgoqIExlZ2FjeSBmdW5jdGlvbnMgZm9yIGJhY2t3YXJk IGNvbXBhdGFiaWxpdHkKKi8KdkJfSGlkZGVuX0Zvcm0ucHJvdG90eXBlLmFkZF9p bnB1dCA9IHZCX0hpZGRlbl9Gb3JtLnByb3RvdHlwZS5hZGRfdmFyaWFibGU7CnZC X0hpZGRlbl9Gb3JtLnByb3RvdHlwZS5hZGRfaW5wdXRzX2Zyb21fb2JqZWN0ID0g dkJfSGlkZGVuX0Zvcm0ucHJvdG90eXBlLmFkZF92YXJpYWJsZXNfZnJvbV9vYmpl Y3Q7CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovLyBXaW5kb3cg b3BlbmVycyBhbmQgaW5zdGFudCBtZXNzZW5nZXIgd3JhcHBlcnMKCi8qKgoqIE9w ZW5zIGEgZ2VuZXJpYyBicm93c2VyIHdpbmRvdwoqCiogQHBhcmFtCXN0cmluZwlV UkwKKiBAcGFyYW0JaW50ZWdlcglXaWR0aAoqIEBwYXJhbQlpbnRlZ2VyCUhlaWdo dAoqIEBwYXJhbQlzdHJpbmcJT3B0aW9uYWwgV2luZG93IElECiovCmZ1bmN0aW9u IG9wZW5XaW5kb3codXJsLCB3aWR0aCwgaGVpZ2h0LCB3aW5kb3dpZCkKewoJcmV0 dXJuIHdpbmRvdy5vcGVuKAoJCXVybCwKCQkodHlwZW9mIHdpbmRvd2lkID09ICd1 bmRlZmluZWQnID8gJ3ZCUG9wdXAnIDogd2luZG93aWQpLAoJCSdzdGF0dXNiYXI9 bm8sbWVudWJhcj1ubyx0b29sYmFyPW5vLHNjcm9sbGJhcnM9eWVzLHJlc2l6YWJs ZT15ZXMnCgkJKyAodHlwZW9mIHdpZHRoICE9ICd1bmRlZmluZWQnID8gKCcsd2lk dGg9JyArIHdpZHRoKSA6ICcnKSArICh0eXBlb2YgaGVpZ2h0ICE9ICd1bmRlZmlu ZWQnID8gKCcsaGVpZ2h0PScgKyBoZWlnaHQpIDogJycpCgkpOwp9CgovKioKKiBP cGVucyBjb250cm9sIHBhbmVsIGhlbHAgd2luZG93CioKKiBAcGFyYW0Jc3RyaW5n CVNjcmlwdCBuYW1lCiogQHBhcmFtCXN0cmluZwlBY3Rpb24gdHlwZQoqIEBwYXJh bQlzdHJpbmcJT3B0aW9uIHZhbHVlCioKKiBAcmV0dXJuCXdpbmRvdwoqLwpmdW5j dGlvbiBqc19vcGVuX2hlbHAoc2NyaXB0bmFtZSwgYWN0aW9udHlwZSwgb3B0aW9u dmFsKQp7CglyZXR1cm4gb3BlbldpbmRvdygKCQknaGVscC5waHA/cz0nICsgU0VT U0lPTkhBU0ggKyAnJmRvPWFuc3dlciZwYWdlPScgKyBzY3JpcHRuYW1lICsgJyZw YWdlYWN0aW9uPScgKyBhY3Rpb250eXBlICsgJyZvcHRpb249JyArIG9wdGlvbnZh bCwKCQk2MDAsIDQ1MCwgJ2hlbHB3aW5kb3cnCgkpOwp9CgovKioKKiBPcGVucyBh IHdpbmRvdyB0byBzaG93IGEgbGlzdCBvZiBhdHRhY2htZW50cyBpbiBhIHRocmVh ZCAobWlzYy5waHA/ZG89c2hvd2F0dGFjaG1lbnRzKQoqCiogQHBhcmFtCWludGVn ZXIJVGhyZWFkIElECioKKiBAcmV0dXJuCXdpbmRvdwoqLwpmdW5jdGlvbiBhdHRh Y2htZW50cyh0aHJlYWRpZCkKewoJcmV0dXJuIG9wZW5XaW5kb3coCgkJJ21pc2Mu cGhwPycgKyBTRVNTSU9OVVJMICsgJ2RvPXNob3dhdHRhY2htZW50cyZ0PScgKyB0 aHJlYWRpZCwKCQk0ODAsIDMwMAoJKTsKfQoKLyoqCiogT3BlbnMgYSB3aW5kb3cg dG8gc2hvdyBhIGxpc3Qgb2YgcG9zdGVycyBpbiBhIHRocmVhZCAobWlzYy5waHA/ ZG89d2hvcG9zdGVkKQoqCiogQHBhcmFtCWludGVnZXIJVGhyZWFkIElECioKKiBA cmV0dXJuCXdpbmRvdwoqLwpmdW5jdGlvbiB3aG8odGhyZWFkaWQpCnsKCXJldHVy biBvcGVuV2luZG93KAoJCSdtaXNjLnBocD8nICsgU0VTU0lPTlVSTCArICdkbz13 aG9wb3N0ZWQmdD0nICsgdGhyZWFkaWQsCgkJMjMwLCAzMDAKCSk7Cn0KCi8qKgoq IE9wZW5zIGFuIElNIFdpbmRvdwoqCiogQHBhcmFtCXN0cmluZwlJTSB0eXBlCiog QHBhcmFtCWludGVnZXIJVXNlciBJRAoqIEBwYXJhbQlpbnRlZ2VyCVdpZHRoIG9m IHdpbmRvdwoqIEBwYXJhbQlpbnRlZ2VyCUhlaWdodCBvZiB3aW5kb3cKKgoqIEBy ZXR1cm4Jd2luZG93CiovCmZ1bmN0aW9uIGltd2luZG93KGltdHlwZSwgdXNlcmlk LCB3aWR0aCwgaGVpZ2h0KQp7CglyZXR1cm4gb3BlbldpbmRvdygKCQknc2VuZG1l c3NhZ2UucGhwPycgKyBTRVNTSU9OVVJMICsgJ2RvPWltJnR5cGU9JyArIGltdHlw ZSArICcmdT0nICsgdXNlcmlkLAoJCXdpZHRoLCBoZWlnaHQKCSk7Cn0KCi8qKgoq IFNlbmRzIGFuIE1TTiBtZXNzYWdlCioKKiBAcGFyYW0Jc3RyaW5nCVRhcmdldCBN U04gaGFuZGxlCioKKiBAcmV0dXJuCWJvb2xlYW4JZmFsc2UKKi8KZnVuY3Rpb24g U2VuZE1TTk1lc3NhZ2UobmFtZSkKewoJaWYgKCFpc19pZSkKCXsKCQlhbGVydCh2 YnBocmFzZVsnbXNuX2Z1bmN0aW9uc19vbmx5X3dvcmtfaW5faWUnXSk7CgkJcmV0 dXJuIGZhbHNlOwoJfQoJZWxzZQoJewoJCU1zZ3JPYmouSW5zdGFudE1lc3NhZ2Uo bmFtZSk7CgkJcmV0dXJuIGZhbHNlOwoJfQp9CgovKioKKiBBZGRzIGFuIE1TTiBD b250YWN0IChyZXF1aXJlcyBNU04pCioKKiBAcGFyYW0Jc3RyaW5nCU1TTiBoYW5k bGUKKgoqIEByZXR1cm4JYm9vbGVhbglmYWxzZQoqLwpmdW5jdGlvbiBBZGRNU05D b250YWN0KG5hbWUpCnsKCWlmICghaXNfaWUpCgl7CgkJYWxlcnQodmJwaHJhc2Vb J21zbl9mdW5jdGlvbnNfb25seV93b3JrX2luX2llJ10pOwoJCXJldHVybiBmYWxz ZTsKCX0KCWVsc2UKCXsKCQlNc2dyT2JqLkFkZENvbnRhY3QoMCwgbmFtZSk7CgkJ cmV0dXJuIGZhbHNlOwoJfQp9CgovKioKKiBEZXRlY3RzIENhcHMtTG9jayB3aGVu IGEga2V5IGlzIHByZXNzZWQKKgoqIEBwYXJhbQlldmVudAoqCiogQHJldHVybgli b29sZWFuCVRydWUgaWYgQ2Fwcy1Mb2NrIGlzIG9uCiovCmZ1bmN0aW9uIGRldGVj dF9jYXBzX2xvY2soZSkKewoJZSA9IChlID8gZSA6IHdpbmRvdy5ldmVudCk7CgoJ dmFyIGtleWNvZGUgPSAoZS53aGljaCA/IGUud2hpY2ggOiAoZS5rZXlDb2RlID8g ZS5rZXlDb2RlIDogKGUuY2hhckNvZGUgPyBlLmNoYXJDb2RlIDogMCkpKTsKCXZh ciBzaGlmdGVkID0gKGUuc2hpZnRLZXkgfHwgKGUubW9kaWZpZXJzICYmIChlLm1v ZGlmaWVycyAmIDQpKSk7Cgl2YXIgY3RybGVkID0gKGUuY3RybEtleSB8fCAoZS5t b2RpZmllcnMgJiYgKGUubW9kaWZpZXJzICYgMikpKTsKCgkvLyBpZiBjaGFyYWN0 ZXJzIGFyZSB1cHBlcmNhc2Ugd2l0aG91dCBzaGlmdCwgb3IgbG93ZXJjYXNlIHdp dGggc2hpZnQsIGNhcHMtbG9jayBpcyBvbi4KCXJldHVybiAoa2V5Y29kZSA+PSA2 NSAmJiBrZXljb2RlIDw9IDkwICYmICFzaGlmdGVkICYmICFjdHJsZWQpIHx8IChr ZXljb2RlID49IDk3ICYmIGtleWNvZGUgPD0gMTIyICYmIHNoaWZ0ZWQpOwp9Cgov KioKKiBDb25maXJtcyBsb2ctb3V0IHJlcXVlc3QKKgoqIEBwYXJhbQlzdHJpbmcJ TG9nLW91dCBjb25maXJtYXRpb24gbWVzc2FnZQoqCiogQHJldHVybglib29sZWFu CiovCmZ1bmN0aW9uIGxvZ19vdXQoY29uZmlybWF0aW9uX21lc3NhZ2UpCnsKCXZh ciBodCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF07 CglodC5zdHlsZS5maWx0ZXIgPSAicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWlj cm9zb2Z0LkJhc2ljSW1hZ2UoZ3JheXNjYWxlPTEpIjsKCWlmIChjb25maXJtKGNv bmZpcm1hdGlvbl9tZXNzYWdlKSkKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWVsc2UK CXsKCQlodC5zdHlsZS5maWx0ZXIgPSAiIjsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0K Ci8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIENvb2tpZSBoYW5k bGVycwoKLyoqCiogU2V0cyBhIGNvb2tpZQoqCiogQHBhcmFtCXN0cmluZwlDb29r aWUgbmFtZQoqIEBwYXJhbQlzdHJpbmcJQ29va2llIHZhbHVlCiogQHBhcmFtCWRh dGUJQ29va2llIGV4cGlyeSBkYXRlCiovCmZ1bmN0aW9uIHNldF9jb29raWUobmFt ZSwgdmFsdWUsIGV4cGlyZXMpCnsKCWNvbnNvbGUubG9nKCJTZXQgQ29va2llIDo6 ICVzID0gJyVzJyIsIG5hbWUsIHZhbHVlKTsKCWRvY3VtZW50LmNvb2tpZSA9IG5h bWUgKyAnPScgKyBlc2NhcGUodmFsdWUpICsgJzsgcGF0aD0vJyArICh0eXBlb2Yg ZXhwaXJlcyAhPSAndW5kZWZpbmVkJyA/ICc7IGV4cGlyZXM9JyArIGV4cGlyZXMu dG9HTVRTdHJpbmcoKSA6ICcnKTsKfQoKLyoqCiogRGVsZXRlcyBhIGNvb2tpZQoq CiogQHBhcmFtCXN0cmluZwlDb29raWUgbmFtZQoqLwpmdW5jdGlvbiBkZWxldGVf Y29va2llKG5hbWUpCnsKCWNvbnNvbGUubG9nKCJEZWxldGUgQ29va2llIDo6ICVz IiwgbmFtZSk7Cglkb2N1bWVudC5jb29raWUgPSBuYW1lICsgJz0nICsgJzsgZXhw aXJlcz1UaHUsIDAxLUphbi03MCAwMDowMDowMSBHTVQnICsgICc7IHBhdGg9Lyc7 Cn0KCi8qKgoqIEZldGNoZXMgdGhlIHZhbHVlIG9mIGEgY29va2llCioKKiBAcGFy YW0Jc3RyaW5nCUNvb2tpZSBuYW1lCioKKiBAcmV0dXJuCXN0cmluZwoqLwpmdW5j dGlvbiBmZXRjaF9jb29raWUobmFtZSkKewoJY29va2llX25hbWUgPSBuYW1lICsg Jz0nOwoJY29va2llX2xlbmd0aCA9IGRvY3VtZW50LmNvb2tpZS5sZW5ndGg7Cglj b29raWVfYmVnaW4gPSAwOwoJd2hpbGUgKGNvb2tpZV9iZWdpbiA8IGNvb2tpZV9s ZW5ndGgpCgl7CgkJdmFsdWVfYmVnaW4gPSBjb29raWVfYmVnaW4gKyBjb29raWVf bmFtZS5sZW5ndGg7CgkJaWYgKGRvY3VtZW50LmNvb2tpZS5zdWJzdHJpbmcoY29v a2llX2JlZ2luLCB2YWx1ZV9iZWdpbikgPT0gY29va2llX25hbWUpCgkJewoJCQl2 YXIgdmFsdWVfZW5kID0gZG9jdW1lbnQuY29va2llLmluZGV4T2YgKCc7JywgdmFs dWVfYmVnaW4pOwoJCQlpZiAodmFsdWVfZW5kID09IC0xKQoJCQl7CgkJCQl2YWx1 ZV9lbmQgPSBjb29raWVfbGVuZ3RoOwoJCQl9CgkJCXZhciBjb29raWVfdmFsdWUg PSB1bmVzY2FwZShkb2N1bWVudC5jb29raWUuc3Vic3RyaW5nKHZhbHVlX2JlZ2lu LCB2YWx1ZV9lbmQpKTsKCQkJY29uc29sZS5sb2coIkZldGNoIENvb2tpZSA6OiAl cyA9ICclcyciLCBuYW1lLCBjb29raWVfdmFsdWUpOwoJCQlyZXR1cm4gY29va2ll X3ZhbHVlOwoJCX0KCQljb29raWVfYmVnaW4gPSBkb2N1bWVudC5jb29raWUuaW5k ZXhPZignICcsIGNvb2tpZV9iZWdpbikgKyAxOwoJCWlmIChjb29raWVfYmVnaW4g PT0gMCkKCQl7CgkJCWJyZWFrOwoJCX0KCX0KCWNvbnNvbGUubG9nKCJGZXRjaCBD b29raWUgOjogJXMgKG51bGwpIiwgbmFtZSk7CglyZXR1cm4gbnVsbDsKfQoKLy8g IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gRm9ybSBlbGVtZW50IG1h bmFnZXJzICh1c2VkIGZvciAnY2hlY2sgYWxsJyB0eXBlIHN5c3RlbXMpCgovKioK KiBTZXRzIGFsbCBjaGVja2JveGVzLCByYWRpbyBidXR0b25zIG9yIHNlbGVjdHMg aW4gYSBnaXZlbiBmb3JtIHRvIGEgZ2l2ZW4gc3RhdGUsIHdpdGggZXhjZXB0aW9u cwoqCiogQHBhcmFtCW9iamVjdAlGb3JtIG9iamVjdAoqIEBwYXJhbQlzdHJpbmcJ VGFyZ2V0IGVsZW1lbnQgdHlwZSAob25lIG9mICdyYWRpbycsICdzZWxlY3Qtb25l JywgJ2NoZWNrYm94JykKKiBAcGFyYW0Jc3RyaW5nCVNlbGVjdGVkIG9wdGlvbiBp biBjYXNlIG9mICdyYWRpbycKKiBAcGFyYW0JYXJyYXkJQXJyYXkgb2YgZWxlbWVu dCBuYW1lcyB0byBiZSBleGNsdWRlZAoqIEBwYXJhbQltaXhlZAlWYWx1ZSB0byBn aXZlIHRvIGZvdW5kIGVsZW1lbnRzCiovCmZ1bmN0aW9uIGpzX3RvZ2dsZV9hbGwo Zm9ybW9iaiwgZm9ybXR5cGUsIG9wdGlvbiwgZXhjbHVkZSwgc2V0dG8pCnsKCWZv ciAodmFyIGkgPTA7IGkgPCBmb3Jtb2JqLmVsZW1lbnRzLmxlbmd0aDsgaSsrKQoJ ewoJCXZhciBlbG0gPSBmb3Jtb2JqLmVsZW1lbnRzW2ldOwoJCWlmIChlbG0udHlw ZSA9PSBmb3JtdHlwZSAmJiBQSFAuaW5fYXJyYXkoZWxtLm5hbWUsIGV4Y2x1ZGUs IGZhbHNlKSA9PSAtMSkKCQl7CgkJCXN3aXRjaCAoZm9ybXR5cGUpCgkJCXsKCQkJ CWNhc2UgJ3JhZGlvJzoKCQkJCQlpZiAoZWxtLnZhbHVlID09IG9wdGlvbikgLy8g b3B0aW9uID09ICcnIGV2YWx1YXRlcyB0cnVlIHdoZW4gb3B0aW9uID0gMAoJCQkJ CXsKCQkJCQkJZWxtLmNoZWNrZWQgPSBzZXR0bzsKCQkJCQl9CgkJCQlicmVhazsK CQkJCWNhc2UgJ3NlbGVjdC1vbmUnOgoJCQkJCWVsbS5zZWxlY3RlZEluZGV4ID0g c2V0dG87CgkJCQlicmVhazsKCQkJCWRlZmF1bHQ6CgkJCQkJZWxtLmNoZWNrZWQg PSBzZXR0bzsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJfQp9CgovKioKKiBTZXRzIGFs bCA8c2VsZWN0PiBlbGVtZW50cyB0byB0aGUgc2VsZWN0ZWRJbmRleCBzcGVjaWZp ZWQgYnkgdGhlICdzZWxlY3RhbGwnIGVsZW1lbnQKKgoqIEBwYXJhbQlvYmplY3QJ Rm9ybSBvYmplY3QKKi8KZnVuY3Rpb24ganNfc2VsZWN0X2FsbChmb3Jtb2JqKQp7 CglleGNsdWRlID0gbmV3IEFycmF5KCk7CglleGNsdWRlWzBdID0gJ3NlbGVjdGFs bCc7Cglqc190b2dnbGVfYWxsKGZvcm1vYmosICdzZWxlY3Qtb25lJywgJycsIGV4 Y2x1ZGUsIGZvcm1vYmouc2VsZWN0YWxsLnNlbGVjdGVkSW5kZXgpOwp9CgovKioK KiBTZXRzIGFsbCA8aW5wdXQgdHlwZT0iY2hlY2tib3giIC8+IGVsZW1lbnRzIHRv IGhhdmUgdGhlIHNhbWUgY2hlY2tlZCBzdGF0dXMgYXMgJ2FsbGJveCcKKgoqIEBw YXJhbQlvYmplY3QJRm9ybSBvYmplY3QKKi8KZnVuY3Rpb24ganNfY2hlY2tfYWxs KGZvcm1vYmopCnsKCWV4Y2x1ZGUgPSBuZXcgQXJyYXkoKTsKCWV4Y2x1ZGVbMF0g PSAna2VlcGF0dGFjaG1lbnRzJzsKCWV4Y2x1ZGVbMV0gPSAnYWxsYm94JzsKCWV4 Y2x1ZGVbMl0gPSAncmVtb3ZlYWxsJzsKCWpzX3RvZ2dsZV9hbGwoZm9ybW9iaiwg J2NoZWNrYm94JywgJycsIGV4Y2x1ZGUsIGZvcm1vYmouYWxsYm94LmNoZWNrZWQp Owp9CgovKioKKiBTZXRzIGFsbCA8aW5wdXQgdHlwZT0icmFkaW8iIC8+IGdyb3Vw cyB0byBoYXZlIGEgcGFydGljdWxhciBvcHRpb24gY2hlY2tlZAoqCiogQHBhcmFt CW9iamVjdAlGb3JtIG9iamVjdAoqIEBwYXJhbQltaXhlZAlTZWxlY3RlZCBvcHRp b24KKi8KZnVuY3Rpb24ganNfY2hlY2tfYWxsX29wdGlvbihmb3Jtb2JqLCBvcHRp b24pCnsKCWV4Y2x1ZGUgPSBuZXcgQXJyYXkoKTsKCWV4Y2x1ZGVbMF0gPSAndXNl dXNlcmdyb3VwJzsKCWpzX3RvZ2dsZV9hbGwoZm9ybW9iaiwgJ3JhZGlvJywgb3B0 aW9uLCBleGNsdWRlLCB0cnVlKTsKfQoKLyoqCiogQWxpYXMgdG8ganNfY2hlY2tf YWxsCiovCmZ1bmN0aW9uIGNoZWNrYWxsKGZvcm1vYmopCnsKCWpzX2NoZWNrX2Fs bChmb3Jtb2JqKTsKfQoKLyoqCiogQWxpYXMgdG8ganNfY2hlY2tfYWxsX29wdGlv bgoqLwpmdW5jdGlvbiBjaGVja2FsbF9vcHRpb24oZm9ybW9iaiwgb3B0aW9uKQp7 Cglqc19jaGVja19hbGxfb3B0aW9uKGZvcm1vYmosIG9wdGlvbik7Cn0KCi8qKgoq IFJlc2l6ZSBmdW5jdGlvbiBmb3IgQ1AgdGV4dGFyZWFzCioKKiBAcGFyYW0JaW50 ZWdlcglJZiBwb3NpdGl2ZSwgc2l6ZSB1cCwgb3RoZXJ3aXNlIHNpemUgZG93bgoq IEBwYXJhbQlzdHJpbmcJSUQgb2YgdGhlIHRleHRhcmVhCioKKiBAcmV0dXJuCWJv b2xlYW4JZmFsc2UKKi8KZnVuY3Rpb24gcmVzaXplX3RleHRhcmVhKHRvLCBpZCkK ewoJdmFyIHRleHRhcmVhID0gZmV0Y2hfb2JqZWN0KGlkKTsKCgl0ZXh0YXJlYS5z dHlsZS53aWR0aCA9IHBhcnNlSW50KHRleHRhcmVhLm9mZnNldFdpZHRoKSArICh0 byA8IDAgPyAtMTAwIDogMTAwKSArICJweCI7Cgl0ZXh0YXJlYS5zdHlsZS5oZWln aHQgPSBwYXJzZUludCh0ZXh0YXJlYS5vZmZzZXRIZWlnaHQpICsgKHRvIDwgMCA/ IC0xMDAgOiAxMDApICsgInB4IjsKCglyZXR1cm4gZmFsc2U7Cn0KCi8vICMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIENvbGxhcHNpYmxlIGVsZW1lbnQg aGFuZGxlcnMKCi8qKgoqIFRvZ2dsZXMgdGhlIGNvbGxhcHNlIHN0YXRlIG9mIGFu IG9iamVjdCwgYW5kIHNhdmVzIHN0YXRlIHRvICd2YnVsbGV0aW5fY29sbGFwc2Un IGNvb2tpZQoqCiogQHBhcmFtCXN0cmluZwlVbmlxdWUgSUQgZm9yIHRoZSBjb2xs YXBzZSBncm91cAoqCiogQHJldHVybglib29sZWFuCWZhbHNlCiovCmZ1bmN0aW9u IHRvZ2dsZV9jb2xsYXBzZShvYmppZCkKewoJaWYgKCFpc19yZWdleHApCgl7CgkJ cmV0dXJuIGZhbHNlOwoJfQoKCW9iaiA9IGZldGNoX29iamVjdCgnY29sbGFwc2Vv YmpfJyArIG9iamlkKTsKCWltZyA9IGZldGNoX29iamVjdCgnY29sbGFwc2VpbWdf JyArIG9iamlkKTsKCWNlbCA9IGZldGNoX29iamVjdCgnY29sbGFwc2VjZWxfJyAr IG9iamlkKTsKCglpZiAoIW9iaikKCXsKCQkvLyBub3RoaW5nIHRvIGNvbGxhcHNl IQoJCWlmIChpbWcpCgkJewoJCQkvLyBoaWRlIHRoZSBjbGlja3kgaW1hZ2UgaWYg dGhlcmUgaXMgb25lCgkJCWltZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJCX0K CQlyZXR1cm4gZmFsc2U7Cgl9CgoJaWYgKG9iai5zdHlsZS5kaXNwbGF5ID09ICdu b25lJykKCXsKCQlvYmouc3R5bGUuZGlzcGxheSA9ICcnOwoJCXNhdmVfY29sbGFw c2VkKG9iamlkLCBmYWxzZSk7CgkJaWYgKGltZykKCQl7CgkJCWltZ19yZSA9IG5l dyBSZWdFeHAoIl9jb2xsYXBzZWRcXC5naWYkIik7CgkJCWltZy5zcmMgPSBpbWcu c3JjLnJlcGxhY2UoaW1nX3JlLCAnLmdpZicpOwoJCX0KCQlpZiAoY2VsKQoJCXsK CQkJY2VsX3JlID0gbmV3IFJlZ0V4cCgiXih0aGVhZHx0Y2F0KShfY29sbGFwc2Vk KSQiKTsKCQkJY2VsLmNsYXNzTmFtZSA9IGNlbC5jbGFzc05hbWUucmVwbGFjZShj ZWxfcmUsICckMScpOwoJCX0KCX0KCWVsc2UKCXsKCQlvYmouc3R5bGUuZGlzcGxh eSA9ICdub25lJzsKCQlzYXZlX2NvbGxhcHNlZChvYmppZCwgdHJ1ZSk7CgkJaWYg KGltZykKCQl7CgkJCWltZ19yZSA9IG5ldyBSZWdFeHAoIlxcLmdpZiQiKTsKCQkJ aW1nLnNyYyA9IGltZy5zcmMucmVwbGFjZShpbWdfcmUsICdfY29sbGFwc2VkLmdp ZicpOwoJCX0KCQlpZiAoY2VsKQoJCXsKCQkJY2VsX3JlID0gbmV3IFJlZ0V4cCgi Xih0aGVhZHx0Y2F0KSQiKTsKCQkJY2VsLmNsYXNzTmFtZSA9IGNlbC5jbGFzc05h bWUucmVwbGFjZShjZWxfcmUsICckMV9jb2xsYXBzZWQnKTsKCQl9Cgl9CglyZXR1 cm4gZmFsc2U7Cn0KCi8qKgoqIFVwZGF0ZXMgdmJ1bGxldGluX2NvbGxhcHNlIGNv b2tpZSB3aXRoIGNvbGxhcHNlIHByZWZlcmVuY2VzCioKKiBAcGFyYW0Jc3RyaW5n CVVuaXF1ZSBJRCBmb3IgdGhlIGNvbGxhcHNlIGdyb3VwCiogQHBhcmFtCWJvb2xl YW4JQWRkIGEgY29va2llCiovCmZ1bmN0aW9uIHNhdmVfY29sbGFwc2VkKG9iamlk LCBhZGRjb2xsYXBzZWQpCnsKCXZhciBjb2xsYXBzZWQgPSBmZXRjaF9jb29raWUo J3ZidWxsZXRpbl9jb2xsYXBzZScpOwoJdmFyIHRtcCA9IG5ldyBBcnJheSgpOwoK CWlmIChjb2xsYXBzZWQgIT0gbnVsbCkKCXsKCQljb2xsYXBzZWQgPSBjb2xsYXBz ZWQuc3BsaXQoJ1xuJyk7CgoJCWZvciAodmFyIGkgaW4gY29sbGFwc2VkKQoJCXsK CQkJaWYgKGNvbGxhcHNlZFtpXSAhPSBvYmppZCAmJiBjb2xsYXBzZWRbaV0gIT0g JycpCgkJCXsKCQkJCXRtcFt0bXAubGVuZ3RoXSA9IGNvbGxhcHNlZFtpXTsKCQkJ fQoJCX0KCX0KCglpZiAoYWRkY29sbGFwc2VkKQoJewoJCXRtcFt0bXAubGVuZ3Ro XSA9IG9iamlkOwoJfQoKCWV4cGlyZXMgPSBuZXcgRGF0ZSgpOwoJZXhwaXJlcy5z ZXRUaW1lKGV4cGlyZXMuZ2V0VGltZSgpICsgKDEwMDAgKiA4NjQwMCAqIDM2NSkp OwoJc2V0X2Nvb2tpZSgndmJ1bGxldGluX2NvbGxhcHNlJywgdG1wLmpvaW4oJ1xu JyksIGV4cGlyZXMpOwp9CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwovLyBFdmVudCBIYW5kbGVycyBmb3IgUGFnZU5hdiBtZW51cwoKLyoqCiogQ2xh c3MgdG8gaGFuZGxlIHBhZ2VuYXYgZXZlbnRzCiovCmZ1bmN0aW9uIHZCcGFnZW5h digpCnsKfQoKLyoqCiogSGFuZGxlcyBjbGlja3Mgb24gcGFnZW5hdiBtZW51IGNv bnRyb2wgb2JqZWN0cwoqLwp2QnBhZ2VuYXYucHJvdG90eXBlLmNvbnRyb2xvYmpf b25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXRoaXMuX29uY2xpY2soZSk7Cgl2YXIg aW5wdXRzID0gZmV0Y2hfdGFncyh0aGlzLm1lbnUubWVudW9iaiwgJ2lucHV0Jyk7 Cglmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykKCXsKCQlp ZiAoaW5wdXRzW2ldLnR5cGUgPT0gJ3RleHQnKQoJCXsKCQkJaW5wdXRzW2ldLmZv Y3VzKCk7CgkJCWJyZWFrOwoJCX0KCX0KfTsKCi8qKgoqIFN1Ym1pdHMgdGhlIHBh Z2VuYXYgZm9ybS4uLiBzb3J0IG9mCiovCnZCcGFnZW5hdi5wcm90b3R5cGUuZm9y bV9nb3RvcGFnZSA9IGZ1bmN0aW9uKGUpCnsKCWlmICgocGFnZW51bSA9IHBhcnNl SW50KGZldGNoX29iamVjdCgncGFnZW5hdl9pdHh0JykudmFsdWUsIDEwKSkgPiAw KQoJewoJCXdpbmRvdy5sb2NhdGlvbiA9IHRoaXMuYWRkciArICcmcGFnZT0nICsg cGFnZW51bTsKCX0KCXJldHVybiBmYWxzZTsKfTsKCi8qKgoqIEhhbmRsZXMgY2xp Y2tzIG9uIHRoZSAnR28nIGJ1dHRvbiBpbiBwYWdlbmF2IHBvcHVwcwoqLwp2QnBh Z2VuYXYucHJvdG90eXBlLmlidG5fb25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXJl dHVybiB0aGlzLmZvcm0uZ290b3BhZ2UoKTsKfTsKCi8qKgoqIEhhbmRsZXMga2V5 cHJlc3NlcyBpbiB0aGUgdGV4dCBpbnB1dCBvZiBwYWdlbmF2IHBvcHVwcwoqLwp2 QnBhZ2VuYXYucHJvdG90eXBlLml0eHRfb25rZXlwcmVzcyA9IGZ1bmN0aW9uKGUp CnsKCXJldHVybiAoKGUgPyBlIDogd2luZG93LmV2ZW50KS5rZXlDb2RlID09IDEz ID8gdGhpcy5mb3JtLmdvdG9wYWdlKCkgOiB0cnVlKTsKfTsKCi8vICMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIERIVE1MIFBvcHVwIE1lbnUgSGFuZGxp bmcgKGNvbXBsZW1lbnRzIHZidWxsZXRpbl9tZW51LmpzKQoKLyoqCiogV3JhcHBl ciBmb3IgdkJtZW51LnJlZ2lzdGVyCioKKiBAcGFyYW0Jc3RyaW5nCUNvbnRyb2wg SUQKKiBAcGFyYW0JYm9vbGVhbglObyBpbWFnZSAodHJ1ZSkKKiBAcGFyYW0JYm9v bGVhbglEb2VzIG5vdGhpbmcgYW55IG1vcmUKKi8KZnVuY3Rpb24gdmJtZW51X3Jl Z2lzdGVyKGNvbnRyb2xpZCwgbm9pbWFnZSwgZGF0ZWZpZWxkKQp7CglpZiAodHlw ZW9mKHZCbWVudSkgPT0gIm9iamVjdCIpCgl7CgkJcmV0dXJuIHZCbWVudS5yZWdp c3Rlcihjb250cm9saWQsIG5vaW1hZ2UpOwoJfQoJZWxzZQoJewoJCXJldHVybiBm YWxzZTsKCX0KfQoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8g U3R1ZmYgdGhhdCByZWFsbHkgZG9lc24ndCBmaXQgYW55d2hlcmUgZWxzZQoKLyoq CiogU2V0cyBhbiBlbGVtZW50IGFuZCBhbGwgaXRzIGNoaWxkcmVuIHRvIGJlICd1 bnNlbGVjdGFibGUnCioKKiBAcGFyYW0Jb2JqZWN0CU9iamVjdCB0byBiZSBtYWRl IHVuc2VsZWN0YWJsZQoqLwpmdW5jdGlvbiBzZXRfdW5zZWxlY3RhYmxlKG9iaikK ewoJaWYgKCFpc19pZTQgJiYgdHlwZW9mIG9iai50YWdOYW1lICE9ICd1bmRlZmlu ZWQnKQoJewoJCWlmIChvYmouaGFzQ2hpbGROb2RlcygpKQoJCXsKCQkJZm9yICh2 YXIgaSA9IDA7IGkgPCBvYmouY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykKCQkJewoJ CQkJc2V0X3Vuc2VsZWN0YWJsZShvYmouY2hpbGROb2Rlc1tpXSk7CgkJCX0KCQl9 CgkJb2JqLnVuc2VsZWN0YWJsZSA9ICdvbic7Cgl9Cn0KCi8qKgoqIEZldGNoZXMg dGhlIHNlc3Npb25oYXNoIGZyb20gdGhlIFNFU1NJT05VUkwgdmFyaWFibGUKKgoq IEByZXR1cm4Jc3RyaW5nCiovCmZ1bmN0aW9uIGZldGNoX3Nlc3Npb25oYXNoKCkK ewoJcmV0dXJuIChTRVNTSU9OVVJMID09ICcnID8gJycgOiBTRVNTSU9OVVJMLnN1 YnN0cigyLCAzMikpOwp9CgovKioKKiBFbXVsYXRlcyB0aGUgUEhQIHZlcnNpb24g b2YgdkJ1bGxldGluJ3MgY29uc3RydWN0X3BocmFzZSgpIHNwcmludGYgd3JhcHBl cgoqCiogQHBhcmFtCXN0cmluZwlTdHJpbmcgY29udGFpbmluZyAlMSRzIHR5cGUg cmVwbGFjZW1lbnQgbWFya2VycwoqIEBwYXJhbQlzdHJpbmcJRmlyc3QgcmVwbGFj ZW1lbnQKKiBAcGFyYW0Jc3RyaW5nCU50aCByZXBsYWNlbWVudAoqCiogQHJldHVy bglzdHJpbmcKKi8KZnVuY3Rpb24gY29uc3RydWN0X3BocmFzZSgpCnsKCWlmICgh YXJndW1lbnRzIHx8IGFyZ3VtZW50cy5sZW5ndGggPCAxIHx8ICFpc19yZWdleHAp Cgl7CgkJcmV0dXJuIGZhbHNlOwoJfQoKCXZhciBhcmdzID0gYXJndW1lbnRzOwoJ dmFyIHN0ciA9IGFyZ3NbMF07Cgl2YXIgcmU7CgoJZm9yICh2YXIgaSA9IDE7IGkg PCBhcmdzLmxlbmd0aDsgaSsrKQoJewoJCXJlID0gbmV3IFJlZ0V4cCgiJSIgKyBp ICsgIlxcJHMiLCAnZ2knKTsKCQlzdHIgPSBzdHIucmVwbGFjZShyZSwgYXJnc1tp XSk7Cgl9CglyZXR1cm4gc3RyOwp9CgovKioKKiBIYW5kbGVzIHRoZSBxdWljayBz dHlsZS9sYW5ndWFnZSBvcHRpb25zIGluIHRoZSBmb290ZXIKKgoqIEBwYXJhbQlv YmplY3QJU2VsZWN0IG9iamVjdAoqIEBwYXJhbQlzdHJpbmcJVHlwZSAoc3R5bGUg b3IgbGFuZ3VhZ2UpCiovCmZ1bmN0aW9uIHN3aXRjaF9pZChzZWxlY3RvYmosIHR5 cGUpCnsKCXZhciBpZCA9IHNlbGVjdG9iai5vcHRpb25zW3NlbGVjdG9iai5zZWxl Y3RlZEluZGV4XS52YWx1ZTsKCglpZiAoaWQgPT0gJycpCgl7CgkJcmV0dXJuOwoJ fQoKCXZhciB1cmwgPSBuZXcgU3RyaW5nKHdpbmRvdy5sb2NhdGlvbik7Cgl2YXIg ZnJhZ21lbnQgPSBuZXcgU3RyaW5nKCcnKTsKCgkvLyBnZXQgcmlkIG9mIGZyYWdt ZW50Cgl1cmwgPSB1cmwuc3BsaXQoJyMnKTsKCgkvLyBkZWFsIHdpdGggdGhlIGZy YWdtZW50IGZpcnN0CglpZiAodXJsWzFdKQoJewoJCWZyYWdtZW50ID0gJyMnICsg dXJsWzFdOwoJfQoKCS8vIGRlYWwgd2l0aCB0aGUgbWFpbiB1cmwKCXVybCA9IHVy bFswXTsKCgkvLyByZW1vdmUgaWQ9eCYgZnJvbSBtYWluIGJpdAoJaWYgKHVybC5p bmRleE9mKHR5cGUgKyAnaWQ9JykgIT0gLTEgJiYgaXNfcmVnZXhwKQoJewoJCXJl ID0gbmV3IFJlZ0V4cCh0eXBlICsgImlkPVxcZCsmPyIpOwoJCXVybCA9IHVybC5y ZXBsYWNlKHJlLCAnJyk7Cgl9CgoJLy8gYWRkIHRoZSA/IHRvIHRoZSB1cmwgaWYg bmVlZGVkCglpZiAodXJsLmluZGV4T2YoJz8nKSA9PSAtMSkKCXsKCQl1cmwgKz0g Jz8nOwoJfQoJZWxzZQoJewoJCS8vIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSB2 YWxpZCBjaGFyYWN0ZXIgdG8gam9pbiBvdXIgaWQgYml0CgkJbGFzdGNoYXIgPSB1 cmwuc3Vic3RyKHVybC5sZW5ndGggLSAxKTsKCQlpZiAobGFzdGNoYXIgIT0gJyYn ICYmIGxhc3RjaGFyICE9ICc/JykKCQl7CgkJCXVybCArPSAnJic7CgkJfQoJfQoK CXdpbmRvdy5sb2NhdGlvbiA9IHVybCArIHR5cGUgKyAnaWQ9JyArIGlkICsgZnJh Z21lbnQ7Cn0KCi8qKgoqIFRha2VzIHRoZSAnYWx0JyBhdHRyaWJ1dGUgZm9yIGFu IGltYWdlIGFuZCBhdHRhY2hlcyBpdCB0byB0aGUgJ3RpdGxlJyBhdHRyaWJ1dGUK KgoqIEBwYXJhbQlvYmplY3QJSW1hZ2Ugb2JqZWN0CiovCmZ1bmN0aW9uIGltZ19h bHRfMl90aXRsZShpbWcpCnsKCWlmICghaW1nLnRpdGxlICYmIGltZy5hbHQgIT0g JycpCgl7CgkJaW1nLnRpdGxlID0gaW1nLmFsdDsKCX0KfQoKLy8gIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gSW5pdGlhbGl6ZSBhIFBvc3RCaXQKCi8q KgoqIFRoaXMgZnVuY3Rpb24gcnVucyBhbGwgdGhlIG5lY2Vzc2FyeSBKYXZhc2Ny aXB0IGNvZGUgb24gYSBQb3N0Qml0CiogYWZ0ZXIgaXQgaGFzIGJlZW4gbG9hZGVk IHZpYSBBSkFYLiBEb24ndCB1c2UgdGhpcyBtZXRob2QgYmVmb3JlIGEKKiBjb21w bGV0ZSBwYWdlIGxvYWQgb3IgeW91J2xsIGhhdmUgcHJvYmxlbXMuCioKKiBAcGFy YW0Jb2JqZWN0CU9iamVjdCBjb250YWluaW5nIHBvc3RiaXRzCiovCmZ1bmN0aW9u IFBvc3RCaXRfSW5pdChvYmosIHBvc3RpZCkKewoJY29uc29sZS5sb2coIlBvc3RC aXQgSW5pdDogJWQiLCBwb3N0aWQpOwoKCWlmICh0eXBlb2YgdkJtZW51ICE9ICd1 bmRlZmluZWQnKQoJewoJCS8vIGluaXQgcHJvZmlsZSBtZW51KHMpCgkJdmFyIGRp dnMgPSBmZXRjaF90YWdzKG9iaiwgJ2RpdicpOwoJCWZvciAodmFyIGkgPSAwOyBp IDwgZGl2cy5sZW5ndGg7IGkrKykKCQl7CgkJCWlmIChkaXZzW2ldLmlkICYmIGRp dnNbaV0uaWQuc3Vic3RyKDAsIDkpID09ICdwb3N0bWVudV8nKQoJCQl7CgkJCQl2 Qm1lbnUucmVnaXN0ZXIoZGl2c1tpXS5pZCwgdHJ1ZSk7CgkJCX0KCQl9Cgl9CgoJ aWYgKHR5cGVvZiB2Ql9RdWlja0VkaXRvciAhPSAndW5kZWZpbmVkJykKCXsKCQkv LyBpbml0IHF1aWNrIGVkaXQgY29udHJvbHMKCQl2Ql9BSkFYX1F1aWNrRWRpdF9J bml0KG9iaik7Cgl9CgoJaWYgKHR5cGVvZiB2Ql9RdWlja1JlcGx5ICE9ICd1bmRl ZmluZWQnKQoJewoJCS8vIGluaXQgcXVpY2sgcmVwbHkgYnV0dG9uCgkJcXJfaW5p dF9idXR0b25zKG9iaik7Cgl9CgoJaWYgKHR5cGVvZiBtcV9pbml0ICE9ICd1bmRl ZmluZWQnKQoJewoJCS8vIGluaXQgcXVpY2sgcmVwbHkgYnV0dG9uCgkJbXFfaW5p dChvYmopOwoJfQoKCWlmICh0eXBlb2YgdkJyZXAgIT0gJ3VuZGVmaW5lZCcpCgl7 CgkJaWYgKHR5cGVvZiBwb3N0aWQgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHBv c3RpZCAhPSAnbnVsbCcpCgkJewoJCQl2YnJlcF9yZWdpc3Rlcihwb3N0aWQpOwoJ CX0KCX0KCglpZiAodHlwZW9mIGlubGluZU1vZCAhPSAndW5kZWZpbmVkJykKCXsK CQlpbV9pbml0KG9iaik7Cgl9Cn0KCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCi8vIE1haW4gdkJ1bGxldGluIEphdmFzY3JpcHQgSW5pdGlhbGl6YXRp b24KCi8qKgoqIFRoaXMgZnVuY3Rpb24gcnVucyAoYWxtb3N0KSBhdCB0aGUgZW5k IG9mIHNjcmlwdCBsb2FkaW5nIG9uIG1vc3QgdkJ1bGxldGluIHBhZ2VzCioKKiBJ dCBzZXRzIHVwIHRoaW5ncyBsaWtlIGltYWdlIGFsdC0+dGl0bGUgdGFncywgdHVy bnMgb24gdGhlIHBvcHVwIG1lbnUgc3lzdGVtIGV0Yy4KKgoqIEByZXR1cm4JYm9v bGVhbgoqLwpmdW5jdGlvbiB2QnVsbGV0aW5faW5pdCgpCnsKCS8vIGRvbid0IGJv dGhlciBkb2luZyBhbnkgZXhjaXRpbmcgc3R1ZmYgZm9yIFdlYlRWCglpZiAoaXNf d2VidHYpCgl7CgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8vIHNldCAndGl0bGUnIHRh Z3MgZm9yIGltYWdlIGVsZW1lbnRzCgl2YXIgaW1ncyA9IGZldGNoX3RhZ3MoZG9j dW1lbnQsICdpbWcnKTsKCWZvciAodmFyIGkgPSAwOyBpIDwgaW1ncy5sZW5ndGg7 IGkrKykKCXsKCQlpbWdfYWx0XzJfdGl0bGUoaW1nc1tpXSk7Cgl9CgoJLy8gZmlu YWxpemUgcG9wdXAgbWVudXMKCWlmICh0eXBlb2YgdkJtZW51ID09ICdvYmplY3Qn KQoJewoJCS8vIGNsb3NlIGFsbCBtZW51cyBvbiBkb2N1bWVudCBjbGljayBvciBy ZXNpemUKCQlpZiAodHlwZW9mKFlBSE9PKSAhPSAidW5kZWZpbmVkIikKCQl7CgkJ CVlBSE9PLnV0aWwuRXZlbnQub24oZG9jdW1lbnQsICJjbGljayIsIHZibWVudV9o aWRlKTsKCQkJWUFIT08udXRpbC5FdmVudC5vbih3aW5kb3csICJyZXNpemUiLCB2 Ym1lbnVfaGlkZSk7CgkJfQoJCWVsc2UgaWYgKHdpbmRvdy5hdHRhY2hFdmVudCAm JiAhaXNfc2FmKQoJCXsKCQkJZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uY2xpY2sn LCB2Ym1lbnVfaGlkZSk7CgkJCXdpbmRvdy5hdHRhY2hFdmVudCgnb25yZXNpemUn LCB2Ym1lbnVfaGlkZSk7CgkJfQoJCWVsc2UgaWYgKGRvY3VtZW50LmFkZEV2ZW50 TGlzdGVuZXIgJiYgIWlzX3NhZikKCQl7CgkJCWRvY3VtZW50LmFkZEV2ZW50TGlz dGVuZXIoJ2NsaWNrJywgdmJtZW51X2hpZGUsIGZhbHNlKTsKCQkJd2luZG93LmFk ZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHZibWVudV9oaWRlLCBmYWxzZSk7CgkJ fQoJCWVsc2UKCQl7CgkJCXdpbmRvdy5vbmNsaWNrID0gdmJtZW51X2hpZGU7CgkJ CXdpbmRvdy5vbnJlc2l6ZSA9IHZibWVudV9oaWRlOwoJCX0KCgkJLy8gYWRkIHBv cHVwcyB0byBwYWdlbmF2IGVsZW1lbnRzCgkJdmFyIHBhZ2VuYXZzID0gZmV0Y2hf dGFncyhkb2N1bWVudCwgJ3RkJyk7CgkJZm9yICh2YXIgbiA9IDA7IG4gPCBwYWdl bmF2cy5sZW5ndGg7IG4rKykKCQl7CgkJCWlmIChwYWdlbmF2c1tuXS5oYXNDaGls ZE5vZGVzKCkgJiYgcGFnZW5hdnNbbl0uZmlyc3RDaGlsZC5uYW1lICYmIHBhZ2Vu YXZzW25dLmZpcnN0Q2hpbGQubmFtZS5pbmRleE9mKCdQYWdlTmF2JykgIT0gLTEp CgkJCXsKCQkJCXZhciBhZGRyID0gcGFnZW5hdnNbbl0udGl0bGU7CgkJCQlwYWdl bmF2c1tuXS50aXRsZSA9ICcnOwoJCQkJcGFnZW5hdnNbbl0uaW5uZXJIVE1MID0g Jyc7CgkJCQlwYWdlbmF2c1tuXS5pZCA9ICdwYWdlbmF2LicgKyBuOwoJCQkJdmFy IHBuID0gdkJtZW51LnJlZ2lzdGVyKHBhZ2VuYXZzW25dLmlkKTsKCQkJCWlmIChp c19zYWYpCgkJCQl7CgkJCQkJcG4uY29udHJvbG9iai5fb25jbGljayA9IHBuLmNv bnRyb2xvYmoub25jbGljazsKCQkJCQlwbi5jb250cm9sb2JqLm9uY2xpY2sgPSB2 QnBhZ2VuYXYucHJvdG90eXBlLmNvbnRyb2xvYmpfb25jbGljazsKCQkJCX0KCQkJ fQoJCX0KCgkJLy8gcHJvY2VzcyB0aGUgcGFnZW5hdnMgcG9wdXAgZm9ybQoJCWlm ICh0eXBlb2YgYWRkciAhPSAndW5kZWZpbmVkJykKCQl7CgkJCWZldGNoX29iamVj dCgncGFnZW5hdl9mb3JtJykuYWRkciA9IGFkZHI7CgkJCWZldGNoX29iamVjdCgn cGFnZW5hdl9mb3JtJykuZ290b3BhZ2UgPSB2QnBhZ2VuYXYucHJvdG90eXBlLmZv cm1fZ290b3BhZ2U7CgkJCWZldGNoX29iamVjdCgncGFnZW5hdl9pYnRuJykub25j bGljayA9IHZCcGFnZW5hdi5wcm90b3R5cGUuaWJ0bl9vbmNsaWNrOwoJCQlmZXRj aF9vYmplY3QoJ3BhZ2VuYXZfaXR4dCcpLm9ua2V5cHJlc3MgPSB2QnBhZ2VuYXYu cHJvdG90eXBlLml0eHRfb25rZXlwcmVzczsKCQl9CgoJCS8vIGFjdGl2YXRlIHRo ZSBtZW51IHN5c3RlbQoJCXZCbWVudS5hY3RpdmF0ZSh0cnVlKTsKCX0KCgkvLyB0 aGUgbmV3IGluaXQgc3lzdGVtCgl2QnVsbGV0aW4uaW5pdCgpOwoKCXJldHVybiB0 cnVlOwp9CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovLyB2QnVs bGV0aW4gSmF2YXNjcmlwdCBGcmFtZXdvcmsKCi8qKgoqIEdlbmVyYWwgY2xhc3Mg Zm9yIGhhbmRsaW5nIGN1c3RvbSBldmVudHMgYW5kIGN1c3RvbSBjb250cm9scwoq LwpmdW5jdGlvbiB2QnVsbGV0aW5fRnJhbWV3b3JrKCkKewoJLyoqCgkqIEB2YXIJ YXJyYXkJQXJyYXkgb2YgZWxlbWVudHMgdG8gYmUgcGFzc2VkIHRvIGNvbnRyb2wg aW5pdCBmdW5jdGlvbnMKCSogQHZhcglhcnJheQlBcnJheSBvZiBBSkFYIGxvYWQv c2F2ZSBVUkxzCgkqIEB2YXIJYXJyYXkJQXJyYXkgb2YgWVVJIGN1c3RvbSBldmVu dHMKCSogQHZhcglkYXRlCUN1cnJlbnQgdGltZQoJKi8KCXRoaXMuZWxlbWVudHMg PSBuZXcgQXJyYXkoKTsKCXRoaXMuYWpheHVybHMgPSBuZXcgQXJyYXkoKTsKCXRo aXMuZXZlbnRzID0gbmV3IEFycmF5KCk7Cgl0aGlzLnRpbWUgPSBuZXcgRGF0ZSgp OwoKCS8vIGN1c3RvbSBldmVudCB0byBmaXJlIGR1cmluZyBjbGFzcyBpbml0Cgl0 aGlzLmFkZF9ldmVudCgic3lzdGVtSW5pdCIpOwp9CgovKioKKiBJbml0aWFsaXpl cyB0aGUgb2JqZWN0IC0gdXN1YWxseSBjYWxsZWQgYXQgZW5kIG9mIGZvb3RlciB0 ZW1wbGF0ZQoqLwp2QnVsbGV0aW5fRnJhbWV3b3JrLnByb3RvdHlwZS5pbml0ID0g ZnVuY3Rpb24oKQp7Cgl0aGlzLmV2ZW50cy5zeXN0ZW1Jbml0LmZpcmUoKTsKCWNv bnNvbGUuaW5mbygiU3lzdGVtIEluaXQgRmlyZWQiKTsKfQoKLyoqCiogRW11bGF0 ZXMgT09QIGNsYXNzIGV4dGVuc2lvbgoqCiogQHBhcmFtCW9iamVjdAlFeHRlbmRl ZCBjbGFzcwoqIEBwYXJhbQlvYmplY3QJQmFzZSBjbGFzcwoqLwp2QnVsbGV0aW5f RnJhbWV3b3JrLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbihzdWJDbGFzcywg YmFzZUNsYXNzKQp7CiAgIGZ1bmN0aW9uIGluaGVyaXRhbmNlKCkge30KICAgaW5o ZXJpdGFuY2UucHJvdG90eXBlID0gYmFzZUNsYXNzLnByb3RvdHlwZTsKCiAgIHN1 YkNsYXNzLnByb3RvdHlwZSA9IG5ldyBpbmhlcml0YW5jZSgpOwogICBzdWJDbGFz cy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzczsKICAgc3ViQ2xhc3Mu YmFzZUNvbnN0cnVjdG9yID0gYmFzZUNsYXNzOwogICBzdWJDbGFzcy5zdXBlckNs YXNzID0gYmFzZUNsYXNzLnByb3RvdHlwZTsKfQoKLyoqCiogUmVnaXN0ZXJzIGEg Y3VzdG9tIGNvbnRyb2wgZm9yIGxhdGVyIGluaXRpYWxpemF0aW9uCiogQXJndW1l bnRzIDEtbiBhcmUgc3RvcmVkIGZvciBsYXRlciB1c2UKKgoqIEBwYXJhbQlzdHJp bmcJQ29udHJvbCB0eXBlICh2Ql9EYXRlUGlja2VyIGV0Yy4pCiogQHBhcmFtCXN0 cmluZwlIVE1MIGVsZW1lbnQgSUQKKi8KdkJ1bGxldGluX0ZyYW1ld29yay5wcm90 b3R5cGUucmVnaXN0ZXJfY29udHJvbCA9IGZ1bmN0aW9uKGNvbnRyb2x0eXBlLCBl bGVtZW50KQp7Cgl2YXIgYXJncyA9IG5ldyBBcnJheSgpOwoJZm9yICh2YXIgaSA9 IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspCgl7CgkJYXJncy5wdXNoKGFy Z3VtZW50c1tpXSk7Cgl9CglpZiAoIXRoaXMuZWxlbWVudHNbY29udHJvbHR5cGVd KQoJewoJCWNvbnNvbGUuaW5mbygiQ3JlYXRpbmcgYXJyYXkgdkJ1bGxldGluLmVs ZW1lbnRzW1wiJXNcIl0iLCBjb250cm9sdHlwZSk7CgkJdGhpcy5lbGVtZW50c1tj b250cm9sdHlwZV0gPSBuZXcgQXJyYXkoKTsKCX0KCXZhciB4ID0gdGhpcy5lbGVt ZW50c1tjb250cm9sdHlwZV0ucHVzaChhcmdzKTsKCWNvbnNvbGUubG9nKCJ2QnVs bGV0aW4uZWxlbWVudHNbXCIlc1wiXVslZF0gPSAlcyIsIGNvbnRyb2x0eXBlLCB4 LTEsIGFyZ3Muam9pbigiLCAiKSk7Cn0KCi8qKgoqIFJlZ2lzdGVycyBBSkFYIGxv YWQvc2F2ZSB1cmxzIGZvciBhIGNvbnRyb2wKKgoqIEBwYXJhbQlGZXRjaCBVUkwK KiBAcGFyYW0JU2F2ZSBVUkwKKiBAcGFyYW0JTGlzdCBvZiBlbGVtZW50cyB0byB3 aGljaCB0aGVzZSBVUkxzIGFwcGx5CiovCnZCdWxsZXRpbl9GcmFtZXdvcmsucHJv dG90eXBlLnJlZ2lzdGVyX2FqYXhfdXJscyA9IGZ1bmN0aW9uKGZldGNoLCBzYXZl LCBlbGVtZW50cykKewoJdmFyIGZldGNoID0gZmV0Y2guc3BsaXQoIj8iKTsgZmV0 Y2hbMV0gPSBTRVNTSU9OVVJMICsgInNlY3VyaXR5dG9rZW49IiArIFNFQ1VSSVRZ VE9LRU4gKyAiJmFqYXg9MSYiICsgZmV0Y2hbMV0ucmVwbGFjZSgvXHsoXGQrKSg6 XHcrKT9cfS9naSwgJyUkMSRzJyk7Cgl2YXIgc2F2ZSAgPSAgc2F2ZS5zcGxpdCgi PyIpOyAgc2F2ZVsxXSA9IFNFU1NJT05VUkwgKyAic2VjdXJpdHl0b2tlbj0iICsg U0VDVVJJVFlUT0tFTiArICImYWpheD0xJiIgKyBzYXZlWzFdLnJlcGxhY2UoL1x7 KFxkKykoOlx3Kyk/XH0vZ2ksICclJDEkcycpOwoKCWNvbnNvbGUubG9nKCJSZWdp c3RlciBBSkFYIFVSTHMgZm9yICVzIiwgZWxlbWVudHMpOwoKCWZvciAodmFyIGkg PSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCgl7CgkJdGhpcy5hamF4dXJs c1tlbGVtZW50c1tpXV0gPSBuZXcgQXJyYXkoZmV0Y2gsIHNhdmUpOwoJfQp9Cgov KioKKiBSZWdpc3RlciBhIGN1c3RvbSBldmVudAoqCiogQHBhcmFtCXN0cmluZwlF dmVudCBuYW1lCiovCnZCdWxsZXRpbl9GcmFtZXdvcmsucHJvdG90eXBlLmFkZF9l dmVudCA9IGZ1bmN0aW9uKGV2ZW50bmFtZSkKewoJdGhpcy5ldmVudHNbZXZlbnRu YW1lXSA9ICh0eXBlb2YgWUFIT08gIT0gJ3VuZGVmaW5lZCcgPyBuZXcgWUFIT08u dXRpbC5DdXN0b21FdmVudChldmVudG5hbWUpIDogbmV3IG51bGxfZXZlbnQoKSk7 Cn0KCi8qKgoqIEJDOiBQYXNzIGNvbnNvbGUgY2FsbHMgdG8gRmlyZWJ1ZyBpZiBp dCdzIGF2YWlsYWJsZQoqLwp2QnVsbGV0aW5fRnJhbWV3b3JrLnByb3RvdHlwZS5j b25zb2xlID0gY29uc29sZS5sb2c7CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwoKLy8gaW5pdGlhbGl6ZSB0aGUgUEhQIGZ1bmN0aW9uIGVtdWxhdG9y CnZhciBQSFAgPSBuZXcgdkJfUEhQX0VtdWxhdG9yKCk7CgovLyBDcmVhdGUgYW4g aW5zdGFuY2Ugb2YgdGhlIHZCdWxsZXRpbiBGcmFtZXdvcmsgb2JqZWN0CnZhciB2 QnVsbGV0aW4gPSBuZXcgdkJ1bGxldGluX0ZyYW1ld29yaygpOwoKLyo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKfHwgIyBE b3dubG9hZGVkOiAwNTo1MiwgVHVlIEp1biAyNHRoIDIwMDgKfHwgIyBDVlM6ICRS Q1NmaWxlJCAtICRSZXZpc2lvbjogMjY0MTMgJAp8fCAjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwpcKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=vbulletin_menu.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_menu.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_menu.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCnZCdWxsZXRp bi5hZGRfZXZlbnQoInZCbWVudVNob3ciKTsKdkJ1bGxldGluLmFkZF9ldmVudCgi dkJtZW51SGlkZSIpOwoKLyoqCiogdkJ1bGxldGluIHBvcHVwIG1lbnUgZXhhbXBs ZSB1c2FnZToKKgoqIFRvIGNyZWF0ZSBhIG5ldyBwb3B1cCBtZW51OgoqIAk8ZWxl bWVudCBpZD0ieCI+Q2xpY2sgbWUgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp cHQiPiB2Ym1lbnVfcmVnaXN0ZXIoJ3gnKTsgPC9zY3JpcHQ+PC9lbGVtZW50Pgoq IFRoZSBtZW51IGNsYXNzIGV4cGVjdHMgYW4gZWxlbWVudCB3aXRoIHRoZSBpZCBv ZiB4X21lbnUgdGhhdCBjb250YWlucyB0aGUgbWVudS4KKgk8ZGl2IGlkPSJ4X21l bnUiIGNsYXNzPSJ2Ym1lbnVfcG9wdXAiPiAuLi4gPC9kaXY+CiovCgovLyAjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovLyB2Ql9Qb3B1cF9IYW5kbGVyCi8v ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovKioKKiB2QnVsbGV0aW4g cG9wdXAgbWVudSByZWdpc3RyeQoqLwpmdW5jdGlvbiB2Ql9Qb3B1cF9IYW5kbGVy KCkKewoJLyoqCgkqIE9wdGlvbnM6CgkqCgkqIEB2YXIJaW50ZWdlcglOdW1iZXIg b2Ygc3RlcHMgdG8gdXNlIGluIHNsaWRpbmcgbWVudXMgb3BlbgoJKiBAdmFyCWJv b2xlYW4JVXNlIG9wYWNpdHkgZmFjZSBpbiBtZW51IG9wZW4/CgkqLwoJdGhpcy5v cGVuX3N0ZXBzID0gMTA7Cgl0aGlzLm9wZW5fZmFkZSA9IGZhbHNlOwoKCXRoaXMu YWN0aXZlID0gZmFsc2U7CgoJdGhpcy5tZW51cyA9IG5ldyBBcnJheSgpOwoJdGhp cy5hY3RpdmVtZW51ID0gbnVsbDsKCgl0aGlzLmhpZGRlbl9zZWxlY3RzID0gbmV3 IEFycmF5KCk7Cn07CgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQov LyB2Ql9Qb3B1cF9IYW5kbGVyIG1ldGhvZHMKCi8qKgoqIEFjdGl2YXRlIC8gRGVh Y3RpdmF0ZSB0aGUgbWVudSBzeXN0ZW0KKgoqIEBwYXJhbQlib29sZWFuCUFjdGl2 ZSBzdGF0ZSBmb3IgbWVudXMKKi8KdkJfUG9wdXBfSGFuZGxlci5wcm90b3R5cGUu YWN0aXZhdGUgPSBmdW5jdGlvbihhY3RpdmUpCnsKCXRoaXMuYWN0aXZlID0gYWN0 aXZlOwoJY29uc29sZS5sb2coInZCbWVudSA6OiBTeXN0ZW0gQWN0aXZhdGVkIik7 Cn07CgovKioKKiBSZWdpc3RlciBhIGNvbnRyb2wgb2JqZWN0IGFzIGEgbWVudSBj b250cm9sCioKKiBAcGFyYW0Jc3RyaW5nCUlEIG9mIHRoZSBjb250cm9sIG9iamVj dAoqIEBwYXJhbQlib29sZWFuCURpc2FibGUgbWVudSBwb3AgaW1hZ2UgYWRkaXRp b24KKiBAcGFyYW0JYm9vbGVhbglEaXNhYmxlIG1lbnUgc2xpZGUgb3BlbgoqCiog QHJldHVybgl2Ql9Qb3B1cF9NZW51CiovCnZCX1BvcHVwX0hhbmRsZXIucHJvdG90 eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oY29udHJvbGtleSwgbm9pbWFnZSwgbm9z bGlkZSkKewoJLy9jb25zb2xlLmxvZygidkJtZW51IDo6IHJlZ2lzdGVyaW5nICcl cyciLCBjb250cm9sa2V5KTsKCXRoaXMubWVudXNbY29udHJvbGtleV0gPSBuZXcg dkJfUG9wdXBfTWVudShjb250cm9sa2V5LCBub2ltYWdlLCBub3NsaWRlKTsKCgly ZXR1cm4gdGhpcy5tZW51c1tjb250cm9sa2V5XTsKfTsKCi8qKgoqIEhpZGUgYWN0 aXZlIG1lbnUKKi8KdkJfUG9wdXBfSGFuZGxlci5wcm90b3R5cGUuaGlkZSA9IGZ1 bmN0aW9uKCkKewoJaWYgKHRoaXMuYWN0aXZlbWVudSAhPSBudWxsKQoJewoJCXRo aXMubWVudXNbdGhpcy5hY3RpdmVtZW51XS5oaWRlKCk7Cgl9Cn07CgoKLy8gIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gaW5pdGlhbGl6ZSBtZW51IHJl Z2lzdHJ5Cgp2YXIgdkJtZW51ID0gbmV3IHZCX1BvcHVwX0hhbmRsZXIoKTsKCi8q KgoqIEZ1bmN0aW9uIHRvIGFsbG93IGFueXRoaW5nIHRvIGhpZGUgYWxsIG1lbnVz CioKKiBAcGFyYW0JZXZlbnQJRXZlbnQgb2JqZWN0CioKKiBAcmV0dXJuCW1peGVk CiovCmZ1bmN0aW9uIHZibWVudV9oaWRlKGUpCnsKCWlmIChlICYmIGUuYnV0dG9u ICYmIGUuYnV0dG9uICE9IDEgJiYgZS50eXBlID09ICdjbGljaycpCgl7CgkJcmV0 dXJuIHRydWU7Cgl9CgllbHNlCgl7CgkJdkJtZW51LmhpZGUoKTsKCX0KfTsKCi8v ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIHZCX1BvcHVwX01lbnUK Ly8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8qKgoqIHZCdWxsZXRp biBwb3B1cCBtZW51IGNsYXNzIGNvbnN0cnVjdG9yCioKKiBNYW5hZ2VzIGEgc2lu Z2xlIG1lbnUgYW5kIGNvbnRyb2wgb2JqZWN0CiogSW5pdGlhbGl6ZXMgY29udHJv bCBvYmplY3QKKgoqIEBwYXJhbQlzdHJpbmcJSUQgb2YgdGhlIGNvbnRyb2wgb2Jq ZWN0CiogQHBhcmFtCWJvb2xlYW4JRGlzYWJsZSBtZW51IHBvcCBpbWFnZSBhZGRp dGlvbgoqIEBwYXJhbQlib29sZWFuCURpc2FibGUgbWVudSBzbGlkZSBvcGVuCiov CmZ1bmN0aW9uIHZCX1BvcHVwX01lbnUoY29udHJvbGtleSwgbm9pbWFnZSwgbm9z bGlkZSkKewoJdGhpcy5jb250cm9sa2V5ID0gY29udHJvbGtleTsKCXRoaXMubWVu dW5hbWUgPSB0aGlzLmNvbnRyb2xrZXkuc3BsaXQoJy4nKVswXSArICdfbWVudSc7 CgoJdGhpcy5pbml0X2NvbnRyb2wobm9pbWFnZSk7CgoJaWYgKGZldGNoX29iamVj dCh0aGlzLm1lbnVuYW1lKSkKCXsKCQl0aGlzLmluaXRfbWVudSgpOwoJfQoKCXRo aXMuc2xpZGVfb3BlbiA9ICgoaXNfb3BlcmEgfHwgbm9zbGlkZSkgPyBmYWxzZSA6 IHRydWUpOwoJdGhpcy5vcGVuX3N0ZXBzID0gdkJtZW51Lm9wZW5fc3RlcHM7CgoJ dkJ1bGxldGluLmFkZF9ldmVudCgidkJtZW51U2hvd18iICsgdGhpcy5jb250cm9s a2V5KTsKCXZCdWxsZXRpbi5hZGRfZXZlbnQoInZCbWVudUhpZGVfIiArIHRoaXMu Y29udHJvbGtleSk7Cn07CgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQovLyB2Ql9Qb3B1cF9NZW51IG1ldGhvZHMKCi8qKgoqIEluaXRpYWxpemUgdGhl IGNvbnRyb2wgb2JqZWN0CiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLmluaXRf Y29udHJvbCA9IGZ1bmN0aW9uKG5vaW1hZ2UpCnsKCXRoaXMuY29udHJvbG9iaiA9 IGZldGNoX29iamVjdCh0aGlzLmNvbnRyb2xrZXkpOwoJdGhpcy5jb250cm9sb2Jq LnN0YXRlID0gZmFsc2U7CgoJaWYgKHRoaXMuY29udHJvbG9iai5maXJzdENoaWxk ICYmICh0aGlzLmNvbnRyb2xvYmouZmlyc3RDaGlsZC50YWdOYW1lID09ICdURVhU QVJFQScgfHwgdGhpcy5jb250cm9sb2JqLmZpcnN0Q2hpbGQudGFnTmFtZSA9PSAn SU5QVVQnKSkKCXsKCQkvLyBkbyBub3RoaW5nCgl9CgllbHNlCgl7CgkJaWYgKCFu b2ltYWdlICYmICEoaXNfbWFjICYmIGlzX2llKSkKCQl7CgkJCXZhciBzcGFjZSA9 IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgJyk7CgkJCXRoaXMuY29udHJvbG9i ai5hcHBlbmRDaGlsZChzcGFjZSk7CgoJCQl2YXIgaW1nID0gZG9jdW1lbnQuY3Jl YXRlRWxlbWVudCgnaW1nJyk7CgkJCWltZy5zcmMgPSBJTUdESVJfTUlTQyArICcv bWVudV9vcGVuLmdpZic7CgkJCWltZy5ib3JkZXIgPSAwOwoJCQlpbWcudGl0bGUg PSAnJzsKCQkJaW1nLmFsdCA9ICcnOwoJCQl0aGlzLmNvbnRyb2xvYmouYXBwZW5k Q2hpbGQoaW1nKTsKCQl9CgoJCXRoaXMuY29udHJvbG9iai51bnNlbGVjdGFibGUg PSB0cnVlOwoJCWlmICghbm9pbWFnZSkKCQl7CgkJCXRoaXMuY29udHJvbG9iai5z dHlsZS5jdXJzb3IgPSBwb2ludGVyX2N1cnNvcjsKCQl9CgkJdGhpcy5jb250cm9s b2JqLm9uY2xpY2sgPSB2Ql9Qb3B1cF9FdmVudHMucHJvdG90eXBlLmNvbnRyb2xv Ympfb25jbGljazsKCQl0aGlzLmNvbnRyb2xvYmoub25tb3VzZW92ZXIgPSB2Ql9Q b3B1cF9FdmVudHMucHJvdG90eXBlLmNvbnRyb2xvYmpfb25tb3VzZW92ZXI7Cgl9 Cn07CgovKioKKiBJbml0IHRoZSBwb3B1cCBtZW51IG9iamVjdAoqLwp2Ql9Qb3B1 cF9NZW51LnByb3RvdHlwZS5pbml0X21lbnUgPSBmdW5jdGlvbigpCnsKCXRoaXMu bWVudW9iaiA9IGZldGNoX29iamVjdCh0aGlzLm1lbnVuYW1lKTsKCglpZiAodGhp cy5tZW51b2JqICYmICF0aGlzLm1lbnVvYmouaW5pdGlhbGl6ZWQpCgl7CgkJdGhp cy5tZW51b2JqLmluaXRpYWxpemVkID0gdHJ1ZTsKCQl0aGlzLm1lbnVvYmoub25j bGljayA9IGVfYnlfZ3VtOwoJCXRoaXMubWVudW9iai5zdHlsZS5wb3NpdGlvbiA9 ICdhYnNvbHV0ZSc7CgkJdGhpcy5tZW51b2JqLnN0eWxlLnpJbmRleCA9IDUwOwoK CQkvLyBpbml0IHBvcHVwIGZpbHRlcnMgKGllIG9ubHkpCgkJaWYgKGlzX2llICYm ICFpc19tYWMpCgkJewoJCQl0aGlzLm1lbnVvYmouc3R5bGUuZmlsdGVyICs9ICJw cm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuYWxwaGEoZW5hYmxlZD0x LG9wYWNpdHk9MTAwKSI7CgkJCXRoaXMubWVudW9iai5zdHlsZS5maWx0ZXIgKz0g InByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5zaGFkb3coZGlyZWN0 aW9uPTEzNSxjb2xvcj0jOEU4RThFLHN0cmVuZ3RoPTMpIjsKCQl9CgoJCXRoaXMu aW5pdF9tZW51X2NvbnRlbnRzKCk7Cgl9Cn07CgovKioKKiBJbml0IHRoZSBwb3B1 cCBtZW51IGNvbnRlbnRzCiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLmluaXRf bWVudV9jb250ZW50cyA9IGZ1bmN0aW9uKCkKewoJdmFyIHRkcyA9IGZldGNoX3Rh Z3ModGhpcy5tZW51b2JqLCAndGQnKTsKCWZvciAodmFyIGkgPSAwOyBpIDwgdGRz Lmxlbmd0aDsgaSsrKQoJewoJCWlmICh0ZHNbaV0uY2xhc3NOYW1lID09ICd2Ym1l bnVfb3B0aW9uJykKCQl7CgkJCWlmICh0ZHNbaV0udGl0bGUgJiYgdGRzW2ldLnRp dGxlID09ICdub2hpbGl0ZScpCgkJCXsKCQkJCS8vIG5vdCBhbiBhY3RpdmUgY2Vs bAoJCQkJdGRzW2ldLnRpdGxlID0gJyc7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkv LyBjcmVhdGUgYSByZWZlcmVuY2UgYmFjayB0byB0aGUgbWVudSBjbGFzcwoJCQkJ dGRzW2ldLmNvbnRyb2xrZXkgPSB0aGlzLmNvbnRyb2xrZXk7CgoJCQkJLy8gaGFu ZGxlIG1vdXNlb3ZlciAvIG1vdXNlb3V0IGhpZ2hsaWdodGluZyBldmVudHMKCQkJ CXRkc1tpXS5vbm1vdXNlb3ZlciA9IHZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUu bWVudW9wdGlvbl9vbm1vdXNlb3ZlcjsKCQkJCXRkc1tpXS5vbm1vdXNlb3V0ID0g dkJfUG9wdXBfRXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29ubW91c2VvdXQ7 CgoJCQkJdmFyIGxpbmtzID0gZmV0Y2hfdGFncyh0ZHNbaV0sICdhJyk7CgkJCQlp ZiAobGlua3MubGVuZ3RoID09IDEpCgkJCQl7CgkJCQkJLyogT2sgd2UgaGF2ZSBh IGxpbmssIHdlIHNob3VsZCB1c2UgdGhpcyBpZgoJCQkJCTEuIFRoZXJlIGlzIG5v IG9uY2xpY2sgZXZlbnQgaW4gdGhlIGxpbmsKCQkJCQkyLiBUaGVyZSBpcyBubyBv bmNsaWNrIGV2ZW50IG9uIHRoZSBjZWxsCgkJCQkJMy4gVGhlIG9uY2xpY2sgZXZl bnQgZm9yIHRoZSBjZWxsIHNob3VsZCBlcXVhbCB0aGUgbGluayBpZiB0aGUgYWJv dmUgYXJlIHRydWUKCgkJCQkJSWYgd2UgZmluZCBhIGJyb3dzZXIgdGhhdHMgZ2V0 cyBjb25mdXNlZCB3ZSBtYXkgbmVlZCB0byBzZXQgcmVtb3ZlX2xpbmsgdG8gdHJ1 ZSBmb3IgaXQuCgkJCQkJKi8KCgkJCQkJdGRzW2ldLmNsYXNzTmFtZSA9IHRkc1tp XS5jbGFzc05hbWUgKyAnIHZibWVudV9vcHRpb25fYWxpbmsnOwoJCQkJCXRkc1tp XS5pc2xpbmsgPSB0cnVlOwoKCQkJCQl2YXIgbGlua29iaiA9IGxpbmtzWzBdOwoJ CQkJCXZhciByZW1vdmVfbGluayA9IGZhbHNlOwoKCQkJCQl0ZHNbaV0udGFyZ2V0 ID0gbGlua29iai5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpOwoKCQkJCQlpZiAodHlw ZW9mIGxpbmtvYmoub25jbGljayA9PSAnZnVuY3Rpb24nKQoJCQkJCXsKCQkJCQkJ dGRzW2ldLm9mdW5jID0gbGlua29iai5vbmNsaWNrOwoJCQkJCQl0ZHNbaV0ub25j bGljayA9IHZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9vbmNs aWNrX2Z1bmN0aW9uOwoJCQkJCQlyZW1vdmVfbGluayA9IHRydWU7CgkJCQkJfQoJ CQkJCWVsc2UgaWYgKHR5cGVvZiB0ZHNbaV0ub25jbGljayA9PSAnZnVuY3Rpb24n KQoJCQkJCXsKCQkJCQkJdGRzW2ldLm9mdW5jID0gdGRzW2ldLm9uY2xpY2s7CgkJ CQkJCXRkc1tpXS5vbmNsaWNrID0gdkJfUG9wdXBfRXZlbnRzLnByb3RvdHlwZS5t ZW51b3B0aW9uX29uY2xpY2tfZnVuY3Rpb247CgkJCQkJCXJlbW92ZV9saW5rID0g dHJ1ZTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJdGRzW2ldLmhyZWYg PSBsaW5rb2JqLmhyZWY7CgkJCQkJCXRkc1tpXS5vbmNsaWNrID0gdkJfUG9wdXBf RXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29uY2xpY2tfbGluazsKCQkJCQl9 CgoJCQkJCWlmIChyZW1vdmVfbGluaykKCQkJCQl7CgkJCQkJCXZhciBuZXdsaW5r ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwoJCQkJCQluZXdsaW5rLmlu bmVySFRNTCA9IGxpbmtvYmouaW5uZXJIVE1MOwoJCQkJCQluZXdsaW5rLmhyZWYg PSAnIyc7CgkJCQkJCW5ld2xpbmsub25jbGljayA9IGZ1bmN0aW9uKGUpIHsgZSA9 IGUgPyBlIDogd2luZG93LmV2ZW50OyBlLnJldHVyblZhbHVlID0gZmFsc2U7IHJl dHVybiBmYWxzZTsgfTsKCQkJCQkJdGRzW2ldLmluc2VydEJlZm9yZShuZXdsaW5r LCBsaW5rb2JqKTsKCQkJCQkJdGRzW2ldLnJlbW92ZUNoaWxkKGxpbmtvYmopOwoJ CQkJCX0KCQkJCX0KCQkJCWVsc2UgaWYgKHR5cGVvZiB0ZHNbaV0ub25jbGljayA9 PSAnZnVuY3Rpb24nKQoJCQkJewoJCQkJCXRkc1tpXS5vZnVuYyA9IHRkc1tpXS5v bmNsaWNrOwoJCQkJCXRkc1tpXS5vbmNsaWNrID0gdkJfUG9wdXBfRXZlbnRzLnBy b3RvdHlwZS5tZW51b3B0aW9uX29uY2xpY2tfZnVuY3Rpb247CgkJCQl9CgkJCX0K CQl9Cgl9Cn07CgovKioKKiBTaG93IHRoZSBtZW51CioKKiBAcGFyYW0Jb2JqZWN0 CVRoZSBjb250cm9sIG9iamVjdCBjYWxsaW5nIHRoZSBtZW51CiogQHBhcmFtCWJv b2xlYW4JVXNlIHNsaWRlIChmYWxzZSkgb3Igb3BlbiBpbnN0YW50bHk/ICh0cnVl KQoqLwp2Ql9Qb3B1cF9NZW51LnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24ob2Jq LCBpbnN0YW50KQp7CglpZiAoIXZCbWVudS5hY3RpdmUpCgl7CgkJcmV0dXJuIGZh bHNlOwoJfQoJZWxzZSBpZiAoIXRoaXMubWVudW9iaikKCXsKCQl0aGlzLmluaXRf bWVudSgpOwoJfQoKCWlmICghdGhpcy5tZW51b2JqIHx8IHZCbWVudS5hY3RpdmVt ZW51ID09IHRoaXMuY29udHJvbGtleSkKCXsKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJ Y29uc29sZS5sb2coInZCbWVudSA6OiBTaG93ICclcyciLCB0aGlzLmNvbnRyb2xr ZXkpOwoKCWlmICh2Qm1lbnUuYWN0aXZlbWVudSAhPSBudWxsICYmIHZCbWVudS5h Y3RpdmVtZW51ICE9IHRoaXMuY29udHJvbGtleSkKCXsKCQl2Qm1lbnUubWVudXNb dkJtZW51LmFjdGl2ZW1lbnVdLmhpZGUoKTsKCX0KCgl2Qm1lbnUuYWN0aXZlbWVu dSA9IHRoaXMuY29udHJvbGtleTsKCgl0aGlzLm1lbnVvYmouc3R5bGUuZGlzcGxh eSA9ICcnOwoJaWYgKHRoaXMuc2xpZGVfb3BlbikKCXsKCQl0aGlzLm1lbnVvYmou c3R5bGUuY2xpcCA9ICdyZWN0KGF1dG8sIDBweCwgMHB4LCBhdXRvKSc7Cgl9CgoJ dGhpcy5zZXRfbWVudV9wb3NpdGlvbihvYmopOwoKCWlmICghaW5zdGFudCAmJiB0 aGlzLnNsaWRlX29wZW4pCgl7CgkJdGhpcy5pbnRlcnZhbFggPSBNYXRoLmNlaWwo dGhpcy5tZW51b2JqLm9mZnNldFdpZHRoIC8gdGhpcy5vcGVuX3N0ZXBzKTsKCQl0 aGlzLmludGVydmFsWSA9IE1hdGguY2VpbCh0aGlzLm1lbnVvYmoub2Zmc2V0SGVp Z2h0IC8gdGhpcy5vcGVuX3N0ZXBzKTsKCQl0aGlzLnNsaWRlKCh0aGlzLmRpcmVj dGlvbiA9PSAnbGVmdCcgPyAwIDogdGhpcy5tZW51b2JqLm9mZnNldFdpZHRoKSwg MCwgMCk7Cgl9CgllbHNlIGlmICh0aGlzLm1lbnVvYmouc3R5bGUuY2xpcCAmJiB0 aGlzLnNsaWRlX29wZW4pCgl7CgkJdGhpcy5tZW51b2JqLnN0eWxlLmNsaXAgPSAn cmVjdChhdXRvLCBhdXRvLCBhdXRvLCBhdXRvKSc7Cgl9CgoJLy8gZGVhbCB3aXRo IElFIHB1dHRpbmcgPHNlbGVjdD4gZWxlbWVudHMgb24gdG9wIG9mIGV2ZXJ5dGhp bmcKCXRoaXMuaGFuZGxlX292ZXJsYXBzKHRydWUpOwoKCWlmICh0aGlzLmNvbnRy b2xvYmouZWRpdG9yaWQpCgl7CgkJdGhpcy5jb250cm9sb2JqLnN0YXRlID0gdHJ1 ZTsKCQkvL3RoaXMuY29udHJvbG9iai5lZGl0b3IubWVudV9jb250ZXh0KHRoaXMu Y29udHJvbG9iaiwgJ21vdXNlZG93bicpOwoJCXZCX0VkaXRvclt0aGlzLmNvbnRy b2xvYmouZWRpdG9yaWRdLm1lbnVfY29udGV4dCh0aGlzLmNvbnRyb2xvYmosICdt b3VzZWRvd24nKTsKCX0KCgl2QnVsbGV0aW4uZXZlbnRzWyJ2Qm1lbnVTaG93XyIg KyB0aGlzLmNvbnRyb2xrZXldLmZpcmUodGhpcy5jb250cm9sa2V5KTsKCXZCdWxs ZXRpbi5ldmVudHMudkJtZW51U2hvdy5maXJlKHRoaXMuY29udHJvbGtleSk7Cn07 CgovKioKKiBQb3NpdGlvbiB0aGUgbWVudSByZWxhdGl2ZSB0byBhIHJlZmVyZW5j ZSBlbGVtZW50CioKKiBAcGFyYW0Jb2JqZWN0CVJlZmVyZW5jZSBIVE1MIGVsZW1l bnQKKi8KdkJfUG9wdXBfTWVudS5wcm90b3R5cGUuc2V0X21lbnVfcG9zaXRpb24g PSBmdW5jdGlvbihvYmopCnsKCXRoaXMucG9zID0gdGhpcy5mZXRjaF9vZmZzZXQo b2JqKTsKCXRoaXMubGVmdHB4ID0gdGhpcy5wb3NbJ2xlZnQnXTsKCXRoaXMudG9w cHggPSB0aGlzLnBvc1sndG9wJ10gKyBvYmoub2Zmc2V0SGVpZ2h0OwoKCWlmICgo dGhpcy5sZWZ0cHggKyB0aGlzLm1lbnVvYmoub2Zmc2V0V2lkdGgpID49IGRvY3Vt ZW50LmJvZHkuY2xpZW50V2lkdGggJiYgKHRoaXMubGVmdHB4ICsgb2JqLm9mZnNl dFdpZHRoIC0gdGhpcy5tZW51b2JqLm9mZnNldFdpZHRoKSA+IDApCgl7CgkJdGhp cy5sZWZ0cHggPSB0aGlzLmxlZnRweCArIG9iai5vZmZzZXRXaWR0aCAtIHRoaXMu bWVudW9iai5vZmZzZXRXaWR0aDsKCQl0aGlzLmRpcmVjdGlvbiA9ICdyaWdodCc7 Cgl9CgllbHNlCgl7CgkJdGhpcy5kaXJlY3Rpb24gPSAnbGVmdCcKCX0KCgl0aGlz Lm1lbnVvYmouc3R5bGUubGVmdCA9IHRoaXMubGVmdHB4ICsgJ3B4JzsKCXRoaXMu bWVudW9iai5zdHlsZS50b3AgID0gdGhpcy50b3BweCArICdweCc7Cn07CgovKioK KiBIaWRlIHRoZSBtZW51CiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLmhpZGUg PSBmdW5jdGlvbihlKQp7CglpZiAoZSAmJiBlLmJ1dHRvbiAmJiBlLmJ1dHRvbiAh PSAxKQoJewoJCS8vIGdldCBhcm91bmQgc29tZSBjb250ZXh0IG1lbnUgaXNzdWVz IGV0Yy4KCQlyZXR1cm4gdHJ1ZTsKCX0KCgljb25zb2xlLmxvZygidkJtZW51IDo6 IEhpZGUgJyVzJyIsIHRoaXMuY29udHJvbGtleSk7CgoJdGhpcy5zdG9wX3NsaWRl KCk7CgoJdGhpcy5tZW51b2JqLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgoJdGhp cy5oYW5kbGVfb3ZlcmxhcHMoZmFsc2UpOwoKCWlmICh0aGlzLmNvbnRyb2xvYmou ZWRpdG9yaWQpCgl7CgkJdGhpcy5jb250cm9sb2JqLnN0YXRlID0gZmFsc2U7CgkJ dkJfRWRpdG9yW3RoaXMuY29udHJvbG9iai5lZGl0b3JpZF0ubWVudV9jb250ZXh0 KHRoaXMuY29udHJvbG9iaiwgJ21vdXNlb3V0Jyk7Cgl9CgoJdkJtZW51LmFjdGl2 ZW1lbnUgPSBudWxsOwoKCXZCdWxsZXRpbi5ldmVudHNbInZCbWVudUhpZGVfIiAr IHRoaXMuY29udHJvbGtleV0uZmlyZSh0aGlzLmNvbnRyb2xrZXkpOwoJdkJ1bGxl dGluLmV2ZW50cy52Qm1lbnVIaWRlLmZpcmUodGhpcy5jb250cm9sa2V5KTsKfTsK Ci8qKgoqIEhvdmVyIGJlaGF2aW91ciBmb3IgY29udHJvbCBvYmplY3QKKi8KdkJf UG9wdXBfTWVudS5wcm90b3R5cGUuaG92ZXIgPSBmdW5jdGlvbihvYmopCnsKCWlm ICh2Qm1lbnUuYWN0aXZlbWVudSAhPSBudWxsKQoJewoJCWlmICh2Qm1lbnUubWVu dXNbdkJtZW51LmFjdGl2ZW1lbnVdLmNvbnRyb2xrZXkgIT0gdGhpcy5pZCkKCQl7 CgkJCXRoaXMuc2hvdyhvYmosIHRydWUpOwoJCX0KCX0KfTsKCi8qKgoqIFNsaWRl cyBtZW51IG9wZW4KKgoqIEBwYXJhbQlpbnRlZ2VyCUNsaXAgWAoqIEBwYXJhbQlp bnRlZ2VyCUNsaXAgWQoqIEBwYXJhbQlpbnRlZ2VyCU9wYWNpdHkgKDAtMTAwKQoq Lwp2Ql9Qb3B1cF9NZW51LnByb3RvdHlwZS5zbGlkZSA9IGZ1bmN0aW9uKGNsaXBY LCBjbGlwWSwgb3BhY2l0eSkKewoJaWYgKHRoaXMuZGlyZWN0aW9uID09ICdsZWZ0 JyAmJiAoY2xpcFggPCB0aGlzLm1lbnVvYmoub2Zmc2V0V2lkdGggfHwgY2xpcFkg PCB0aGlzLm1lbnVvYmoub2Zmc2V0SGVpZ2h0KSkKCXsKCQlpZiAodkJtZW51Lm9w ZW5fZmFkZSAmJiBpc19pZSkKCQl7CgkJCW9wYWNpdHkgKz0gMTA7CgkJCXRoaXMu bWVudW9iai5maWx0ZXJzLml0ZW0oJ0RYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0 LmFscGhhJykub3BhY2l0eSA9IG9wYWNpdHk7CgkJfQoKCQljbGlwWCArPSB0aGlz LmludGVydmFsWDsKCQljbGlwWSArPSB0aGlzLmludGVydmFsWTsKCgkJdGhpcy5t ZW51b2JqLnN0eWxlLmNsaXAgPSAicmVjdChhdXRvLCAiICsgY2xpcFggKyAicHgs ICIgKyBjbGlwWSArICJweCwgYXV0bykiOwoJCXRoaXMuc2xpZGV0aW1lciA9IHNl dFRpbWVvdXQoInZCbWVudS5tZW51c1t2Qm1lbnUuYWN0aXZlbWVudV0uc2xpZGUo IiArIGNsaXBYICsgIiwgIiArIGNsaXBZICsgIiwgIiArIG9wYWNpdHkgKyAiKTsi LCAwKTsKCX0KCWVsc2UgaWYgKHRoaXMuZGlyZWN0aW9uID09ICdyaWdodCcgJiYg KGNsaXBYID4gMCB8fCBjbGlwWSA8IHRoaXMubWVudW9iai5vZmZzZXRIZWlnaHQp KQoJewoJCWlmICh2Qm1lbnUub3Blbl9mYWRlICYmIGlzX2llKQoJCXsKCQkJb3Bh Y2l0eSArPSAxMDsKCQkJbWVudW9iai5maWx0ZXJzLml0ZW0oJ0RYSW1hZ2VUcmFu c2Zvcm0uTWljcm9zb2Z0LmFscGhhJykub3BhY2l0eSA9IG9wYWNpdHk7CgkJfQoK CQljbGlwWCAtPSB0aGlzLmludGVydmFsWDsKCQljbGlwWSArPSB0aGlzLmludGVy dmFsWTsKCgkJdGhpcy5tZW51b2JqLnN0eWxlLmNsaXAgPSAicmVjdChhdXRvLCAi ICsgdGhpcy5tZW51b2JqLm9mZnNldFdpZHRoICsgInB4LCAiICsgY2xpcFkgKyAi cHgsICIgKyBjbGlwWCArICJweCkiOwoJCXRoaXMuc2xpZGV0aW1lciA9IHNldFRp bWVvdXQoInZCbWVudS5tZW51c1t2Qm1lbnUuYWN0aXZlbWVudV0uc2xpZGUoIiAr IGNsaXBYICsgIiwgIiArIGNsaXBZICsgIiwgIiArIG9wYWNpdHkgKyAiKTsiLCAw KTsKCX0KCWVsc2UKCXsKCQl0aGlzLnN0b3Bfc2xpZGUoKTsKCX0KfTsKCi8qKgoq IEFib3J0IG1lbnUgc2xpZGVyCiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLnN0 b3Bfc2xpZGUgPSBmdW5jdGlvbigpCnsKCWNsZWFyVGltZW91dCh0aGlzLnNsaWRl dGltZXIpOwoKCXRoaXMubWVudW9iai5zdHlsZS5jbGlwID0gJ3JlY3QoYXV0bywg YXV0bywgYXV0bywgYXV0byknOwoKCWlmICh2Qm1lbnUub3Blbl9mYWRlICYmIGlz X2llKQoJewoJCXRoaXMubWVudW9iai5maWx0ZXJzLml0ZW0oJ0RYSW1hZ2VUcmFu c2Zvcm0uTWljcm9zb2Z0LmFscGhhJykub3BhY2l0eSA9IDEwMDsKCX0KfTsKCi8q KgoqIEZldGNoIG9mZnNldCBvZiBhbiBvYmplY3QKKgoqIEBwYXJhbQlvYmplY3QJ VGhlIG9iamVjdCB0byBiZSBtZWFzdXJlZAoqCiogQHJldHVybglhcnJheQlUaGUg bWVhc3VyZWQgb2Zmc2V0cyBsZWZ0L3RvcAoqLwp2Ql9Qb3B1cF9NZW51LnByb3Rv dHlwZS5mZXRjaF9vZmZzZXQgPSBmdW5jdGlvbihvYmopCnsKCWlmIChvYmouZ2V0 Qm91bmRpbmdDbGllbnRSZWN0KQoJewoJCS8vIGJldHRlciwgbW9yZSBhY2N1cmF0 ZSBmdW5jdGlvbiBmb3IgSUUKCQl2YXIgcmVjdCA9IG9iai5nZXRCb3VuZGluZ0Ns aWVudFJlY3QoKTsKCgkJdmFyIHNjcm9sbFRvcCA9IE1hdGgubWF4KGRvY3VtZW50 LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsIGRvY3VtZW50LmJvZHkuc2Nyb2xs VG9wKTsKCQl2YXIgc2Nyb2xsTGVmdCA9IE1hdGgubWF4KGRvY3VtZW50LmRvY3Vt ZW50RWxlbWVudC5zY3JvbGxMZWZ0LCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQp OwoKCQlpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpciA9PSAncnRsJykK CQl7CgkJCS8vIElFIHJldHVybnMgYSBwb3NpdGl2ZSBzY3JvbGxMZWZ0LCBidXQg d2UgbmVlZCBhIG5lZ2F0aXZlIHZhbHVlIHRvIGFjdHVhbGx5IGRvIHByb3BlciBj YWxjdWxhdGlvbnMuCgkJCS8vIFRoaXMgYWN0dWFsbHkgZmxpcHMgdGhlIHNjb2xs b2luZyB0byBiZSByZWxhdGl2ZSB0byB0aGUgZGlzdGFuY2Ugc2Nyb2xsZWQgZnJv bSB0aGUgZGVmYXVsdC4KCQkJc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQgKyBkb2N1 bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBkb2N1bWVudC5kb2N1 bWVudEVsZW1lbnQuc2Nyb2xsV2lkdGg7CgkJfQoKCQlyZXR1cm4geyAnbGVmdCcg OiByZWN0LmxlZnQgKyBzY3JvbGxMZWZ0LCAndG9wJyA6IHJlY3QudG9wICsgc2Ny b2xsVG9wIH07Cgl9CgoJdmFyIGxlZnRfb2Zmc2V0ID0gb2JqLm9mZnNldExlZnQ7 Cgl2YXIgdG9wX29mZnNldCA9IG9iai5vZmZzZXRUb3A7CgoJd2hpbGUgKChvYmog PSBvYmoub2Zmc2V0UGFyZW50KSAhPSBudWxsKQoJewoJCWxlZnRfb2Zmc2V0ICs9 IG9iai5vZmZzZXRMZWZ0OwoJCXRvcF9vZmZzZXQgKz0gb2JqLm9mZnNldFRvcDsK CX0KCglyZXR1cm4geyAnbGVmdCcgOiBsZWZ0X29mZnNldCwgJ3RvcCcgOiB0b3Bf b2Zmc2V0IH07Cn07CgovKioKKiBEZXRlY3QgYW4gb3ZlcmxhcCBvZiBhbiBvYmpl Y3QgYW5kIGEgbWVudQoqCiogQHBhcmFtCW9iamVjdAlPYmplY3QgdG8gYmUgdGVz dGVkIGZvciBvdmVybGFwCiogQHBhcmFtCWFycmF5CUFycmF5IG9mIGRpbWVuc2lv bnMgZm9yIG1lbnUgb2JqZWN0CioKKiBAcmV0dXJuCWJvb2xlYW4JVHJ1ZSBpZiBv dmVybGFwCiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLm92ZXJsYXBzID0gZnVu Y3Rpb24ob2JqLCBtKQp7Cgl2YXIgcyA9IG5ldyBBcnJheSgpOwoJdmFyIHBvcyA9 IHRoaXMuZmV0Y2hfb2Zmc2V0KG9iaik7CglzWydMJ10gPSBwb3NbJ2xlZnQnXTsK CXNbJ1QnXSA9IHBvc1sndG9wJ107CglzWydSJ10gPSBzWydMJ10gKyBvYmoub2Zm c2V0V2lkdGg7CglzWydCJ10gPSBzWydUJ10gKyBvYmoub2Zmc2V0SGVpZ2h0OwoK CglpZiAoc1snTCddID4gbVsnUiddIHx8IHNbJ1InXSA8IG1bJ0wnXSB8fCBzWydU J10gPiBtWydCJ10gfHwgc1snQiddIDwgbVsnVCddKQoJewoJCXJldHVybiBmYWxz ZTsKCX0KCXJldHVybiB0cnVlOwp9OwoKLyoqCiogSGFuZGxlIElFIG92ZXJsYXBw aW5nIDxzZWxlY3Q+IGVsZW1lbnRzCioKKiBAcGFyYW0JYm9vbGVhbglIaWRlICh0 cnVlKSBvciBzaG93IChmYWxzZSkgb3ZlcmxhcHBpbmcgPHNlbGVjdD4gZWxlbWVu dHMKKi8KdkJfUG9wdXBfTWVudS5wcm90b3R5cGUuaGFuZGxlX292ZXJsYXBzID0g ZnVuY3Rpb24oZG9oaWRlKQp7CglpZiAoaXNfaWUgJiYgIWlzX2llNykKCXsKCQl2 YXIgc2VsZWN0cyA9IGZldGNoX3RhZ3MoZG9jdW1lbnQsICdzZWxlY3QnKTsKCgkJ aWYgKGRvaGlkZSkKCQl7CgkJCXZhciBtZW51YXJlYSA9IG5ldyBBcnJheSgpOyBt ZW51YXJlYSA9IHsKCQkJCSdMJyA6IHRoaXMubGVmdHB4LAoJCQkJJ1InIDogdGhp cy5sZWZ0cHggKyB0aGlzLm1lbnVvYmoub2Zmc2V0V2lkdGgsCgkJCQknVCcgOiB0 aGlzLnRvcHB4LAoJCQkJJ0InIDogdGhpcy50b3BweCArIHRoaXMubWVudW9iai5v ZmZzZXRIZWlnaHQKCQkJfTsKCgkJCWZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0 cy5sZW5ndGg7IGkrKykKCQkJewoJCQkJaWYgKHRoaXMub3ZlcmxhcHMoc2VsZWN0 c1tpXSwgbWVudWFyZWEpKQoJCQkJewoJCQkJCXZhciBoaWRlID0gdHJ1ZTsKCQkJ CQl2YXIgcyA9IHNlbGVjdHNbaV07CgkJCQkJd2hpbGUgKHMgPSBzLnBhcmVudE5v ZGUpCgkJCQkJewoJCQkJCQlpZiAocy5jbGFzc05hbWUgPT0gJ3ZibWVudV9wb3B1 cCcpCgkJCQkJCXsKCQkJCQkJCWhpZGUgPSBmYWxzZTsKCQkJCQkJCWJyZWFrOwoJ CQkJCQl9CgkJCQkJfQoKCQkJCQlpZiAoaGlkZSkKCQkJCQl7CgkJCQkJCXNlbGVj dHNbaV0uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOwoJCQkJCQl2Qm1lbnUu aGlkZGVuX3NlbGVjdHMucHVzaChpKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJ ZWxzZQoJCXsKCQkJd2hpbGUgKHRydWUpCgkJCXsKCQkJCXZhciBpID0gdkJtZW51 LmhpZGRlbl9zZWxlY3RzLnBvcCgpOwoJCQkJaWYgKHR5cGVvZiBpID09ICd1bmRl ZmluZWQnIHx8IGkgPT0gbnVsbCkKCQkJCXsKCQkJCQlicmVhazsKCQkJCX0KCQkJ CWVsc2UKCQkJCXsKCQkJCQlzZWxlY3RzW2ldLnN0eWxlLnZpc2liaWxpdHkgPSAn dmlzaWJsZSc7CgkJCQl9CgkJCX0KCQl9Cgl9Cn07CgovLyAjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIwovLyBNZW51IGV2ZW50IGhhbmRsZXIgZnVuY3Rpb25z CgovKioKKiBDbGFzcyBjb250YWluaW5nIG1lbnUgcG9wdXAgZXZlbnQgaGFuZGxl cnMKKi8KZnVuY3Rpb24gdkJfUG9wdXBfRXZlbnRzKCkKewp9OwoKLyoqCiogSGFu ZGxlcyBjb250cm9sIG9iamVjdCBjbGljayBldmVudHMKKi8KdkJfUG9wdXBfRXZl bnRzLnByb3RvdHlwZS5jb250cm9sb2JqX29uY2xpY2sgPSBmdW5jdGlvbihlKQp7 CglpZiAodHlwZW9mIGRvX2FuX2UgPT0gJ2Z1bmN0aW9uJykKCXsKCQlkb19hbl9l KGUpOwoJCWlmICh2Qm1lbnUuYWN0aXZlbWVudSA9PSBudWxsIHx8IHZCbWVudS5t ZW51c1t2Qm1lbnUuYWN0aXZlbWVudV0uY29udHJvbGtleSAhPSB0aGlzLmlkKQoJ CXsKCQkJdkJtZW51Lm1lbnVzW3RoaXMuaWRdLnNob3codGhpcyk7CgkJfQoJCWVs c2UKCQl7CgkJCXZCbWVudS5tZW51c1t0aGlzLmlkXS5oaWRlKCk7CgkJfQoJfQp9 OwoKLyoqCiogSGFuZGxlcyBjb250cm9sIG9iamVjdCBtb3VzZW92ZXIgZXZlbnRz CiovCnZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUuY29udHJvbG9ial9vbm1vdXNl b3ZlciA9IGZ1bmN0aW9uKGUpCnsKCWlmICh0eXBlb2YgZG9fYW5fZSA9PSAnZnVu Y3Rpb24nKQoJewoJCWRvX2FuX2UoZSk7CgkJdkJtZW51Lm1lbnVzW3RoaXMuaWRd LmhvdmVyKHRoaXMpOwoJfQp9OwoKLyoqCiogSGFuZGxlcyBtZW51IG9wdGlvbiBj bGljayBldmVudHMgZm9yIG9wdGlvbnMgd2l0aCBvbmNsaWNrIGV2ZW50cwoqLwp2 Ql9Qb3B1cF9FdmVudHMucHJvdG90eXBlLm1lbnVvcHRpb25fb25jbGlja19mdW5j dGlvbiA9IGZ1bmN0aW9uKGUpCnsKCXRoaXMub2Z1bmMoZSk7Cgl2Qm1lbnUubWVu dXNbdGhpcy5jb250cm9sa2V5XS5oaWRlKCk7Cn07CgovKioKKiBIYW5kbGVzIG1l bnUgb3B0aW9uIGNsaWNrIGV2ZW50cyBmb3Igb3B0aW9ucyBjb250YWluaW5nIGxp bmtzCiovCnZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9vbmNs aWNrX2xpbmsgPSBmdW5jdGlvbihlKQp7CgllID0gZSA/IGUgOiB3aW5kb3cuZXZl bnQ7CgoJaWYgKGUuc2hpZnRLZXkgfHwgKHRoaXMudGFyZ2V0ICE9IG51bGwgJiYg dGhpcy50YXJnZXQgIT0gJycgJiYgdGhpcy50YXJnZXQudG9Mb3dlckNhc2UoKSAh PSAnX3NlbGYnKSkKCXsKCQlpZiAodGhpcy50YXJnZXQgIT0gbnVsbCAmJiB0aGlz LnRhcmdldC5jaGFyQXQoMCkgIT0gJ18nKQoJCXsKCQkJd2luZG93Lm9wZW4odGhp cy5ocmVmLCB0aGlzLnRhcmdldCk7CgkJfQoJCWVsc2UKCQl7CgkJCXdpbmRvdy5v cGVuKHRoaXMuaHJlZik7CgkJfQoJfQoJZWxzZQoJewoJCXdpbmRvdy5sb2NhdGlv biA9IHRoaXMuaHJlZjsKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJLy8gU2FmYXJpIGhh cyAiaXNzdWVzIiB3aXRoIHJlc2V0dGluZyB3aGF0IHdhcyBjbGlja2VkIG9uLCBz dXBlciBtaW5vciBhbmQgSSBkb250IGNhcmUKCWUuY2FuY2VsQnViYmxlID0gdHJ1 ZTsKCWlmIChlLnN0b3BQcm9wYWdhdGlvbikgZS5zdG9wUHJvcGFnYXRpb24oKTsK CWlmIChlLnByZXZlbnREZWZhdWx0KSBlLnByZXZlbnREZWZhdWx0KCk7CgoJdkJt ZW51Lm1lbnVzW3RoaXMuY29udHJvbGtleV0uaGlkZSgpOwoJcmV0dXJuIGZhbHNl Owp9OwoKLyoqCiogSGFuZGxlcyBtZW51IG9wdGlvbiBtb3VzZW92ZXIgZXZlbnRz CiovCnZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9vbm1vdXNl b3ZlciA9IGZ1bmN0aW9uKGUpCnsKCXRoaXMuY2xhc3NOYW1lID0gJ3ZibWVudV9o aWxpdGUnICsgKHRoaXMuaXNsaW5rID8gJyB2Ym1lbnVfaGlsaXRlX2FsaW5rJyA6 ICcnKTsKCXRoaXMuc3R5bGUuY3Vyc29yID0gcG9pbnRlcl9jdXJzb3I7Cn07Cgov KioKKiBIYW5kbGVzIG1lbnUgb3B0aW9uIG1vdXNlb3V0IGV2ZW50cwoqLwp2Ql9Q b3B1cF9FdmVudHMucHJvdG90eXBlLm1lbnVvcHRpb25fb25tb3VzZW91dCA9IGZ1 bmN0aW9uKGUpCnsKCXRoaXMuY2xhc3NOYW1lID0gJ3ZibWVudV9vcHRpb24nICsg KHRoaXMuaXNsaW5rID8gJyB2Ym1lbnVfb3B0aW9uX2FsaW5rJyA6ICcnKTsKCXRo aXMuc3R5bGUuY3Vyc29yID0gJ2RlZmF1bHQnOwp9OwoKLyo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKfHwgIyBEb3dubG9h ZGVkOiAwNTo1MiwgVHVlIEp1biAyNHRoIDIwMDgKfHwgIyBDVlM6ICRSQ1NmaWxl JCAtICRSZXZpc2lvbjogMjY0NDYgJAp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpc Kj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0qLw== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=gal.js Content-Type: application/x-javascript; charset=windows-1251; name=gal.js Content-Location: http://forum.qip.ru/geek/gal/clientscript/gal.js Content-Transfer-Encoding: Base64 DQoNCi8vUG9wdXANCmZ1bmN0aW9uIGdhbF9yZWdpc3RlcihpZCwgc3R5bGVpZCwg cG9zaXRpb24sIG5vaW1hZ2UsIHgsIHkpDQp7DQogICAgICAgIGlmICh0eXBlb2Yg Z2FsID09ICdvYmplY3QnKQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0 dXJuIGdhbC5yZWdpc3RlcihpZCwgc3R5bGVpZCwgcG9zaXRpb24sIG5vaW1hZ2Us IHgsIHkpOw0KICAgICAgICB9DQogICAgICAgIC8vYWxlcnQoImdhbCByZWdpc3Rl cmVkICIgKyBpZCk7DQp9DQoNCnZhciBHRUVLX0dBTF9QT1BVUCAJCQk9IDE7DQp2 YXIgR0VFS19HQUxfRk9MTE9XIAkJPSAyOw0KdmFyIEdFRUtfR0FMX1NUSUNLIAkJ CT0gMzsNCg0KdmFyIEdFRUtfR0FMX0JPVFRPTV9MRUZUCT0gMTsNCnZhciBHRUVL X0dBTF9CT1RUT01fUklHSFQJPSAyOw0KdmFyIEdFRUtfR0FMX1RPUF9MRUZUIAkJ PSAzOw0KdmFyIEdFRUtfR0FMX1RPUF9SSUdIVCAJCT0gNDsNCg0KDQpmdW5jdGlv biBnZWVrX2dhbCgpDQp7DQoNCiAgICAgICAgdGhpcy5zbGlkZV9vcGVuID0gKGlz X29wZXJhIHx8IGlzX3NhZiA/IGZhbHNlIDogdHJ1ZSk7DQogICAgICAgIHRoaXMu b3Blbl9mYWRlID0gdHJ1ZTsNCiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTsN CiAgICAgICAgdGhpcy5wb3B1cHMgPSBuZXcgQXJyYXkoKTsNCiAgICAgICAgdGhp cy5hY3RpdmVwb3B1cCA9IG51bGw7DQogICAgICAgIHRoaXMuaGlkZGVuX3NlbGVj dHMgPSBuZXcgQXJyYXkoKTsNCn0NCg0KCQlnZWVrX2dhbC5wcm90b3R5cGUuZmV0 Y2hfb2Zmc2V0ID0gZnVuY3Rpb24ob2JqKQ0KCQl7DQoJCSAgICAgICAgdmFyIGwg PSBvYmoub2Zmc2V0TGVmdDsNCgkJICAgICAgICB2YXIgdCA9IG9iai5vZmZzZXRU b3A7DQoJCSAgICAgICAgdmFyIHIgPSBvYmoub2Zmc2V0V2lkdGg7DQoJCSAgICAg ICAgdmFyIGIgPSBvYmoub2Zmc2V0SGVpZ2h0DQoNCgkJICAgICAgICB3aGlsZSAo KG9iaiA9IG9iai5vZmZzZXRQYXJlbnQpICE9IG51bGwpDQoJCSAgICAgICAgew0K CQkgICAgICAgICAgICAgICAgbCArPSBvYmoub2Zmc2V0TGVmdDsNCgkJICAgICAg ICAgICAgICAgIHQgKz0gb2JqLm9mZnNldFRvcDsNCgkJICAgICAgICB9DQoNCgkJ ICAgICAgICB2YXIgciA9IHIgKyBsOw0KCQkgICAgICAgIHZhciBiID0gYiArIHQ7 DQoJCSAgICAgICAgdmFyIGggPSBiIC0gdDsNCgkJICAgICAgICB2YXIgdyA9IHIg LSBsOw0KDQoJCSAgICAgICAgcmV0dXJuIHsgJ2wnIDogbCwgJ3QnIDogdCwgJ3In IDogciwgJ2InIDogYiwgJ2gnIDogaCwgJ3cnIDogd307DQoJCX07DQoNCgkJZ2Vl a19nYWwucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oYWN0aXZlKQ0KCQl7 DQoJCSAgICAgICAgdGhpcy5hY3RpdmUgPSBhY3RpdmU7DQoJCX07DQoNCgkJZ2Vl a19nYWwucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oaWQsIHN0eWxlaWQs IHBvc2l0aW9uLCBub2ltYWdlLCB4LCB5KQ0KCQl7DQoJCSAgICAgICAgaWYgKCF0 aGlzLnBvcHVwc1tpZF0pDQoJCSAgICAgICAgew0KCQkJCQl0aGlzLnBvcHVwc1tp ZF0gPSBuZXcgZ2Vla19nYWxfcG9wdXAoaWQsIHN0eWxlaWQsIHBvc2l0aW9uLCBu b2ltYWdlLCB4LCB5KTsNCgkJICAgICAgICB9DQoJCSAgICAgICAgcmV0dXJuIHRo aXMucG9wdXBzW2lkXTsNCgkJfTsNCg0KCQlnZWVrX2dhbC5wcm90b3R5cGUuaGlk ZSA9IGZ1bmN0aW9uKGZvcmNlKQ0KCQl7DQoJCSAgICAgICAgaWYgKHRoaXMuYWN0 aXZlZ2FsICE9IG51bGwpDQoJCSAgICAgICAgew0KCQkgICAgICAgICAgICAgICAg dGhpcy5wb3B1cHNbdGhpcy5hY3RpdmVnYWxdLmhpZGUoZm9yY2UpOw0KCQkgICAg ICAgIH0NCgkJfTsNCg0KCQlnZWVrX2dhbC5wcm90b3R5cGUudGljayA9IGZ1bmN0 aW9uKCkNCgkJew0KCQkJdGhpcy5jbG9jayA9IHNldFRpbWVvdXQoImdhbC50aWNr KCk7IiwgdGhpcy50aWNrX2NvdW50KTsNCg0KCSAgICAgICAgaWYgKHRoaXMuYWN0 aXZlZ2FsID09IG51bGwpDQoJICAgICAgICB7DQoJICAgICAgICAJcmV0dXJuOw0K CSAgICAgICAgfQ0KDQoJICAgICAgICBpZiAodGhpcy5wb3B1cHNbdGhpcy5hY3Rp dmVnYWxdLnN0eWxlaWQgPT0gR0VFS19HQUxfU1RJQ0spDQoJICAgICAgICB7DQoJ ICAgICAgICAJcmV0dXJuOw0KCSAgICAgICAgfQ0KDQoJICAgICAgICBpZiAodGhp cy5wb3B1cHNbdGhpcy5hY3RpdmVnYWxdLnN0eWxlaWQgPT0gR0VFS19HQUxfRk9M TE9XKQ0KCSAgICAgICAgew0KCSAgICAgICAgCXRoaXMucG9wdXBzW3RoaXMuYWN0 aXZlZ2FsXS5wb3MgPSBnYWwuZmV0Y2hfb2Zmc2V0KGZldGNoX29iamVjdCh0aGlz LmFjdGl2ZWdhbCkpOw0KCSAgICAgICAgCXRoaXMucG9wdXBzW3RoaXMuYWN0aXZl Z2FsXS5yZXBvc2l0aW9uKHRoaXMubW91c2VYLCB0aGlzLm1vdXNlWSk7DQoJICAg ICAgICB9DQoNCgkgICAgICAgIGlmICh0aGlzLnRpY2tfY2xvY2sgPCAxMCkNCgkg ICAgICAgIHsNCgkgICAgICAgIAl0aGlzLnRpY2tfY2xvY2sgKys7DQoJICAgICAg ICAJcmV0dXJuOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZQ0KCSAgICAgICAg ew0KCSAgICAgICAgCXRoaXMudGlja19jbG9jayA9IDA7DQoJICAgICAgICB9DQoN CgkgICAgICAgIGlmICh0aGlzLnRpY2tfbG9ja2VkID09IHRydWUpDQoJICAgICAg ICB7DQoJICAgICAgICAJcmV0dXJuOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxz ZQ0KCSAgICAgICAgew0KCSAgICAgICAgCXRoaXMudGlja19sb2NrZWQgPSB0cnVl Ow0KCSAgICAgICAgfQ0KDQoJICAgICAgICB0aGlzLnRpY2tlciArKzsNCgkgICAg ICAgIC8vd2luZG93LnN0YXR1cyA9IHRoaXMudGlja2VyOw0KDQoJICAgICAgICB2 YXIgdGVzdCA9IGZhbHNlOw0KCSAgICAgICAgdmFyIHRlc3QyID0gZmFsc2U7DQoN CgkgICAgICAgIGlmICh0aGlzLmFjdGl2ZWdhbCAhPSBudWxsKQ0KCSAgICAgICAg ew0KCSAgICAgICAgCXRlc3QgPSB0aGlzLnBvcHVwc1t0aGlzLmFjdGl2ZWdhbF0u aGl0X3Rlc3QodGhpcy5tb3VzZVgsIHRoaXMubW91c2VZKTsNCgkgICAgICAgIAl0 ZXN0MiA9IHRoaXMucG9wdXBzW3RoaXMuYWN0aXZlZ2FsXS5hbmNob3JzW3RoaXMu YWN0aXZlbGlua10uaGl0X3Rlc3QodGhpcy5tb3VzZVgsIHRoaXMubW91c2VZKTsN Cg0KCSAgICAgICAgCS8vd2luZG93LnN0YXR1cyA9ICJjb250ZW50OiAiICsgdGVz dCArICIgbGluazogIiArdGVzdDI7DQoJICAgICAgICB9DQoNCgkgICAgICAgIGlm ICh0aGlzLnBvcHVwc1t0aGlzLmFjdGl2ZWdhbF0uc3R5bGVpZCA9PSBHRUVLX0dB TF9GT0xMT1cgJiYgIXRlc3QyKQ0KCSAgICAgICAgew0KCSAgICAgICAgCXRoaXMu aGlkZSgpOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZQ0KCSAgICAgICAgew0K CQkgICAgICAgIGlmICghdGVzdCAmJiAhdGVzdDIpDQoJCSAgICAgICAgew0KCQkg ICAgICAgIAl0aGlzLmhpZGUoKTsNCg0KCQkgICAgICAgIH0NCgkgICAgICAgIH0N CgkgICAgICAgIHRoaXMudGlja19sb2NrZWQgPSBmYWxzZTsNCgkJfTsNCg0KDQov L2FuY2hvcnMNCg0KDQpmdW5jdGlvbiBnZWVrX2dhbF9hbmNob3IoaWQsIGNvbnRl bnRpZCwgbm9pbWFnZSkNCnsNCiAgICAgICAgdGhpcy5pZCA9IGlkOw0KICAgICAg ICB0aGlzLmNvbnRlbnRpZCA9IGNvbnRlbnRpZDsNCiAgICAgICAgdGhpcy5ub2lt YWdlID0gbm9pbWFnZTsNCiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0ZXIoaWQs IGNvbnRlbnRpZCwgbm9pbWFnZSk7DQp9DQoNCgkJZ2Vla19nYWxfYW5jaG9yLnBy b3RvdHlwZS5oaXRfdGVzdCA9IGZ1bmN0aW9uKG1vdXNlWCwgbW91c2VZKQ0KCQl7 DQoNCgkJCXZhciBjbGllbnQgPSBnYWxfY2xpZW50YXJlYSgpOw0KDQoJCQl5ID0g bW91c2VZOw0KCQkJeCA9IG1vdXNlWDsNCg0KCQkJZSA9IGZldGNoX29iamVjdCh0 aGlzLmlkKTsNCgkJCWEgPSBnYWwuZmV0Y2hfb2Zmc2V0KGUpOw0KDQoJCQlhLnQg LT0gY2xpZW50Lmg7DQoJCQlhLmIgLT0gY2xpZW50Lmg7DQoNCgkJCWEubCAtPSBj bGllbnQudzsNCgkJCWEuciAtPSBjbGllbnQudzsNCg0KCQkJLy93aW5kb3cuc3Rh dHVzID0gbW91c2VYOw0KCSAgICAgICAgaWYgKCh4ID4gYS5sKSAmJiAoeCA8IChh LnIpKSAmJiAoeSA+IGEudCkgJiYgKHkgPCAoYS5iKSkpDQoJICAgICAgICB7DQoJ ICAgICAgICAJcmV0dXJuIHRydWU7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNl DQoJICAgICAgICB7DQoJICAgICAgICAJcmV0dXJuIGZhbHNlOw0KCSAgICAgICAg fQ0KDQoJCX07DQoNCgkJZ2Vla19nYWxfYW5jaG9yLnByb3RvdHlwZS5yZWdpc3Rl ciA9IGZ1bmN0aW9uKGlkLCBjb250ZW50aWQsIG5vaW1hZ2UpDQoJCXsNCgkJICAg ICAgICB0aGlzLmNvbnRlbnRpZCA9IGNvbnRlbnRpZDsNCg0KCQkgICAgICAgIGEg PSBmZXRjaF9vYmplY3QoaWQpOw0KCQkJCWEuY29udGVudGlkID0gY29udGVudGlk Ow0KCQkJCWEuc3R5bGUuY3Vyc29yID0gcG9pbnRlcl9jdXJzb3I7DQoJCSAgICAg ICAgLy9hLm9uY2xpY2sgPSBnZWVrX2dhbF9wb3B1cF9ldmVudHMucHJvdG90eXBl LmNvbnRyb2xvYmpfb25jbGljazsNCgkJICAgICAgICBhLm9ubW91c2VvdmVyID0g Z2Vla19nYWxfcG9wdXBfZXZlbnRzLnByb3RvdHlwZS5jb250cm9sb2JqX29ubW91 c2VvdmVyOw0KDQoJCSAgICAgICAgcmV0dXJuIHRoaXM7DQoJCX07DQoNCg0KLy9w b3B1cCBvYmplY3QNCg0KZnVuY3Rpb24gZ2Vla19nYWxfcG9wdXAoaWQsIHN0eWxl aWQsIHBvc2l0aW9uLCBub2ltYWdlLCB4LCB5KQ0Kew0KICAgICAgICB0aGlzLmlk ID0gaWQ7DQogICAgICAgIHRoaXMuc3R5bGVpZCA9IHN0eWxlaWQ7DQogICAgICAg IHRoaXMucG9zaXRpb25pZCA9IHBvc2l0aW9uOw0KICAgICAgICB0aGlzLm9wZW5f c3RlcHMgPSBnYWwub3Blbl9zdGVwczsNCiAgICAgICAgdGhpcy5vcGVuX2ZhZGUg PSBnYWwub3Blbl9mYWRlOw0KICAgICAgICB0aGlzLm9mZnggPSAoeCAqIDEpOw0K ICAgICAgICB0aGlzLm9mZnkgPSAoeSAqIDEpOw0KDQogICAgICAgIHRoaXMuZGly ZWN0aW9uID0gKHBvc2l0aW9uID09IDEgfHwgcG9zaXRpb24gPT0gMyA/ICdsZWZ0 JyA6ICdyaWdodCcpOw0KICAgICAgICB0aGlzLmFuY2hvcnMgPSBuZXcgQXJyYXko KTsNCg0KICAgICAgICB2YXIgYSA9IGZldGNoX3RhZ3MoZG9jdW1lbnQsICdhJyk7 DQoNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKQ0K ICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKGFbaV0uaWQgJiYgYVtpXS5p ZC5zdWJzdHIoMCwgaWQubGVuZ3RoKSA9PSBpZCkNCiAgICAgICAgICAgICAgICB7 DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcnNbYVtpXS5pZF0g PSBuZXcgZ2Vla19nYWxfYW5jaG9yKGFbaV0uaWQsIGlkLCBub2ltYWdlKTsNCiAg ICAgICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgdGhpcy50aWNrID0g Z2Vla19nYWxfcG9wdXBfZXZlbnRzLnByb3RvdHlwZS5jb250cm9sb2JqX3RpY2s7 DQogICAgICAgIGdhbC50aWNrKCk7DQp9DQoNCg0KCWdlZWtfZ2FsX3BvcHVwLnBy b3RvdHlwZS5pbml0X2dhbCA9IGZ1bmN0aW9uKCkNCgl7DQoJICAgICAgICB0aGlz LmdhbG9iaiA9IGZldGNoX29iamVjdCh0aGlzLmlkKTsNCg0KCSAgICAgICAgaWYg KHRoaXMuZ2Fsb2JqICYmICF0aGlzLmdhbG9iai5pbml0aWFsaXplZCkNCgkgICAg ICAgIHsNCgkgICAgICAgICAgICAgICAgdGhpcy5nYWxvYmouaW5pdGlhbGl6ZWQg PSB0cnVlOw0KCSAgICAgICAgICAgICAgICB0aGlzLmdhbG9iai5vbmNsaWNrID0g ZV9ieV9ndW07DQoJICAgICAgICAgICAgICAgIHRoaXMuZ2Fsb2JqLnN0eWxlLnBv c2l0aW9uID0gJ2Fic29sdXRlJzsNCgkgICAgICAgICAgICAgICAgdGhpcy5nYWxv Ymouc3R5bGUuekluZGV4ID0gNTA7DQoNCgkgICAgICAgICAgICAgICAgaWYgKGlz X2llICYmICFpc19tYWMpDQoJICAgICAgICAgICAgICAgIHsNCgkgICAgICAgICAg ICAgICAgICAgICAgICB0aGlzLmdhbG9iai5zdHlsZS5maWx0ZXIgKz0gInByb2dp ZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5hbHBoYShlbmFibGVkPTEsb3Bh Y2l0eT0xMDApIjsNCgkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbG9i ai5zdHlsZS5maWx0ZXIgKz0gInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jv c29mdC5zaGFkb3coZGlyZWN0aW9uPTEzNSxjb2xvcj0jOEU4RThFLHN0cmVuZ3Ro PTMpIjsNCgkgICAgICAgICAgICAgICAgfQ0KCSAgICAgICAgfQ0KCX07DQoNCgln ZWVrX2dhbF9wb3B1cC5wcm90b3R5cGUucmVwb3NpdGlvbiA9IGZ1bmN0aW9uKHgs IHkpDQoJew0KCQl2YXIgbCA9IDA7DQoJCXZhciB0ID0gMDsNCgkJdmFyIGNsaWVu dCA9IGdhbF9jbGllbnRhcmVhKCk7DQoJCXZhciBhbmNob3IgPSB0aGlzLnBvczsN Cg0KCQllID0gZmV0Y2hfb2JqZWN0KHRoaXMuaWQpOw0KDQoJCWlmIChlLnN0eWxl LmRpc3BsYXkgIT0gJycpDQoJCXsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCWlmICh0 aGlzLnBvc2l0aW9uaWQgPT0gR0VFS19HQUxfQk9UVE9NX1JJR0hUKQ0KCQl7DQoN CgkJCWlmICh0aGlzLnN0eWxlaWQgPT0gR0VFS19HQUxfRk9MTE9XKQ0KICAgICAg ICAJew0KCQkJCWwgPSB4IC0gZS5vZmZzZXRXaWR0aCArIGNsaWVudC53IC0gMTAg KyB0aGlzLm9mZng7DQoJCQkJdCA9IHkgKyBjbGllbnQuaCArIHRoaXMub2ZmeTsN CiAgICAgICAgCX0NCiAgICAgICAgCWVsc2UNCiAgICAgICAgCXsNCiAgICAgICAg CQkvL2wgPSBhbmNob3IuciAtIGUub2Zmc2V0V2lkdGggKyBkb2N1bWVudC5kb2N1 bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCArIHRoaXMub2ZmeDsNCiAgICAgICAgCQkv L3QgPSBhbmNob3IuYiAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxU b3AgKyB0aGlzLm9mZnk7DQoJCQkJbCA9IChhbmNob3IuciAtIGUub2Zmc2V0V2lk dGgpICsgdGhpcy5vZmZ4Ow0KICAgICAgICAgICAgICAgIHQgPSBhbmNob3IuYiAr IHRoaXMub2ZmeTsNCiAgICAgICAgCX0NCg0KCQl9DQoJCWVsc2UgaWYgKHRoaXMu cG9zaXRpb25pZCA9PSBHRUVLX0dBTF9UT1BfUklHSFQpDQoJCXsNCgkJCWlmICh0 aGlzLnN0eWxlaWQgPT0gR0VFS19HQUxfRk9MTE9XKQ0KICAgICAgICAJew0KCQkJ CWwgPSB4IC0gZS5vZmZzZXRXaWR0aCArIGNsaWVudC53IC0gMTAgKyB0aGlzLm9m Zng7DQoJCQkJdCA9IHkgLSBlLm9mZnNldEhlaWdodCArIGNsaWVudC5oICsgdGhp cy5vZmZ5Ow0KCSAgICAgICAgCWlmICh0IDwgKGNsaWVudC5oICsgMTApKQ0KCSAg ICAgICAgICAgIHsNCgkgICAgICAgICAgICAJdCA9IGNsaWVudC5oICsgMTAgKyB0 aGlzLm9mZnk7DQoJICAgICAgICAgICAgfQ0KICAgICAgICAJfQ0KICAgICAgICAJ ZWxzZQ0KICAgICAgICAJew0KCQkJCS8vbCA9IGFuY2hvci5yIC0gZS5vZmZzZXRX aWR0aCArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0ICsgdGhp cy5vZmZ4Ow0KCQkJCXQgPSBhbmNob3IudCAtIGUub2Zmc2V0SGVpZ2h0ICsgdGhp cy5vZmZ5OyAvL2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ANCgkg ICAgICAgIAlsID0gKGFuY2hvci5yIC0gZS5vZmZzZXRXaWR0aCkgKyB0aGlzLm9m Zng7DQoNCgkJCQlpZiAodCA8IDEpDQoJICAgICAgICAgICAgew0KCSAgICAgICAg ICAgIAl0ID0gYW5jaG9yLmIgKyB0aGlzLm9mZnk7DQoJICAgICAgICAgICAgfQ0K DQogICAgICAgIAl9DQoJCX0NCgkJZWxzZSBpZiAodGhpcy5wb3NpdGlvbmlkID09 IEdFRUtfR0FMX1RPUF9MRUZUKQ0KCQl7DQoNCgkJCWlmICh0aGlzLnN0eWxlaWQg PT0gR0VFS19HQUxfRk9MTE9XKQ0KICAgICAgICAJew0KCQkJCWwgPSB4ICsgY2xp ZW50LncgLSAxMCArIHRoaXMub2ZmeDsNCgkJCQl0ID0geSAtIGUub2Zmc2V0SGVp Z2h0ICsgY2xpZW50LmggKyB0aGlzLm9mZnk7DQogICAgICAgIAl9DQogICAgICAg IAllbHNlDQogICAgICAgIAl7DQoNCgkJCQkvL2wgPSBhbmNob3IubCAtIGRvY3Vt ZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0ICsgdGhpcy5vZmZ4Ow0KCQkJ CXQgPSBhbmNob3IudCAtIGUub2Zmc2V0SGVpZ2h0Oy8vIC0gZG9jdW1lbnQuZG9j dW1lbnRFbGVtZW50LnNjcm9sbFRvcDsNCgkJCQlsID0gYW5jaG9yLmwgKyB0aGlz Lm9mZng7DQoJICAgICAgICAJaWYgKHQgPCAxKQ0KCSAgICAgICAgICAgIHthbGVy dCAoInBvb3AiKTsNCgkgICAgICAgICAgICAJdCA9IGFuY2hvci5iICsgdGhpcy5v ZmZ5Ow0KCSAgICAgICAgICAgIH0NCiAgICAgICAgCX0NCg0KCQl9DQoJCWVsc2UN CgkJew0KCSAgICAgICAgaWYgKHRoaXMuc3R5bGVpZCA9PSBHRUVLX0dBTF9GT0xM T1cpDQoJICAgICAgICB7DQoJICAgICAgICAJbCA9IHggKyBjbGllbnQudyAtIDEw ICsgdGhpcy5vZmZ4Ow0KCSAgICAgICAgCXQgPSB5ICsgY2xpZW50LmggKyB0aGlz Lm9mZnk7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlDQoJICAgICAgICB7DQog ICAgICAgICAgICAgICAgbCA9IGFuY2hvci5sICsgdGhpcy5vZmZ4Ow0KICAgICAg ICAgICAgICAgIHQgPSBhbmNob3IuYiArIHRoaXMub2ZmeTsNCgkgICAgICAgIH0N Cg0KCQl9DQoNCgkJaWYgKGwgPCAxKQ0KCQl7DQoJCQlsID0gMTA7DQoJCX0NCgkJ aWYgKGwgKyBlLm9mZnNldFdpZHRoICsgY2xpZW50LncgPiBjbGllbnQucikNCgkJ ew0KCQkJbCA9IGNsaWVudC5yIC0gZS5vZmZzZXRXaWR0aCAtIDIwOw0KCQl9DQoN CiAgICAgICAgZS5zdHlsZS5sZWZ0ID0gbCArICJweCI7DQogICAgICAgIGUuc3R5 bGUudG9wCT0gdCArICJweCI7DQoNCgl9Ow0KDQoNCglnZWVrX2dhbF9wb3B1cC5w cm90b3R5cGUuaGl0X3Rlc3QgPSBmdW5jdGlvbihtb3VzZVgsIG1vdXNlWSkNCgl7 DQoNCgkJdmFyIGNsaWVudCA9IGdhbF9jbGllbnRhcmVhKCk7DQoNCgkJeSA9IG1v dXNlWTsNCgkJeCA9IG1vdXNlWDsNCg0KCQllID0gZmV0Y2hfb2JqZWN0KHRoaXMu aWQpOw0KCQlhID0gZ2FsLmZldGNoX29mZnNldChlKTsNCg0KCQlhLnQgLT0gY2xp ZW50Lmg7DQoJCWEuYiAtPSBjbGllbnQuaDsNCg0KCQlhLmwgLT0gY2xpZW50Lnc7 DQoJCWEuciAtPSBjbGllbnQudzsNCg0KICAgICAgICBpZiAoKHggPiBhLmwpICYm ICh4IDwgKGEucikpICYmICh5ID4gYS50KSAmJiAoeSA8IChhLmIpKSkNCiAgICAg ICAgew0KICAgICAgICAJcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAg ZWxzZQ0KICAgICAgICB7DQogICAgICAgIAlyZXR1cm4gZmFsc2U7DQogICAgICAg IH0NCg0KCX07DQoNCglnZWVrX2dhbF9wb3B1cC5wcm90b3R5cGUuc2hvdyA9IGZ1 bmN0aW9uKG9iaikNCgl7DQoJICAgICAgICBpZiAoIWdhbC5hY3RpdmUpDQoJICAg ICAgICB7DQoJICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCgkgICAgICAg IH0NCgkgICAgICAgIGVsc2UgaWYgKCF0aGlzLmdhbG9iaikNCgkgICAgICAgIHsN CgkgICAgICAgICAgICAgICAgdGhpcy5pbml0X2dhbCgpOw0KCSAgICAgICAgfQ0K DQoJICAgICAgICBpZiAoIXRoaXMuZ2Fsb2JqKQ0KCSAgICAgICAgew0KCSAgICAg ICAgICAgICAgICByZXR1cm4gZmFsc2U7DQoJICAgICAgICB9DQoNCgkgICAgICAg IGlmIChnYWwuYWN0aXZlZ2FsICE9IG51bGwpDQoJICAgICAgICB7DQoJICAgICAg ICAgICAgZ2FsLnRpY2tfZGVjYXllciA9IDA7DQoJICAgICAgICAJZ2FsLnBvcHVw c1tnYWwuYWN0aXZlZ2FsXS5oaWRlKHRydWUpOw0KCSAgICAgICAgfQ0KDQoJICAg ICAgICAvL3dpbmRvdy5zdGF0dXMgPSAic3R5bGVpZCAiICsgdGhpcy5zdHlsZWlk ICsgIiBwb3NpdGlvbiAiICsgdGhpcy5wb3NpdGlvbmlkOw0KDQoJICAgICAgICBn YWwuYWN0aXZlZ2FsID0gdGhpcy5pZDsNCgkgICAgICAgIGdhbC5hY3RpdmVsaW5r ID0gb2JqLmlkOw0KDQoJICAgICAgICBpZiAoZ2FsLnRpY2tfZGVjYXkpDQoJICAg ICAgICB7DQoJICAgICAgICAJZ2FsLnRpY2tfZGVjYXllciA9IDE7DQoJICAgICAg ICB9DQoJCQl0aGlzLmdhbG9iai5zdHlsZS5jbGlwID0gJ3JlY3QoYXV0bywgYXV0 bywgYXV0bywgYXV0byknOw0KCQkJdGhpcy5jb250ZW50cG9zID0gZ2FsLmZldGNo X29mZnNldChmZXRjaF9vYmplY3QodGhpcy5pZCkpOw0KDQoJCQkvL2FsZXJ0KHRo aXMub2ZmeCArICIgOjogIiAgKyB0aGlzLm9mZnkpOw0KDQoJCQl0aGlzLmdhbG9i ai5zdHlsZS5kaXNwbGF5ID0gJyc7DQoNCgkgICAgICAgIGlmICh0aGlzLnBvc2l0 aW9uID09IEdFRUtfR0FMX0ZPTExPVykNCgkgICAgICAgIHsNCgkgICAgICAgIAl0 aGlzLnJlcG9zaXRpb24oZ2FsLm1vdXNlWCwgZ2FsLm1vdXNlWSk7DQoJICAgICAg ICB9DQoJICAgICAgICBlbHNlDQoJICAgICAgICB7DQoJCSAgICAgICAgdGhpcy5w b3MgPSBnYWwuZmV0Y2hfb2Zmc2V0KG9iaik7DQoJCSAgICAgICAgLy9hbGVydCh0 aGlzLnBvc1snbCddKTsNCgkJICAgICAgICAvL3RoaXMucG9zWydsJ10gPSAodGhp cy5vZmZ4ICogMSkgKyAodGhpcy5wb3NbJ2wnXSAqIDEpOw0KCQkgICAgICAgIC8v YWxlcnQodGhpcy5wb3NbJ2wnXSk7DQoJCSAgICAgICAgLy90aGlzLnBvc1sndCdd IC09IHRoaXMub2ZmeTsNCgkgICAgICAgIAl0aGlzLnJlcG9zaXRpb24oMCwgMCk7 DQoJICAgICAgICB9DQoNCg0KCQkJaWYgKGdhbC5zbGlkZV9vcGVuKQ0KCQkJew0K CQkJCXRoaXMuZ2Fsb2JqLnN0eWxlLmNsaXAgPSAncmVjdChhdXRvLCAwcHgsIDBw eCwgYXV0byknOw0KCQkJfQ0KDQoJCQlpZiAoZ2FsLnNsaWRlX29wZW4pDQoJCQl7 DQoJCQkJdGhpcy5pbnRlcnZhbFggPSBNYXRoLmNlaWwodGhpcy5nYWxvYmoub2Zm c2V0V2lkdGggLyB0aGlzLm9wZW5fc3RlcHMpOw0KCQkJCXRoaXMuaW50ZXJ2YWxZ ID0gTWF0aC5jZWlsKHRoaXMuZ2Fsb2JqLm9mZnNldEhlaWdodCAvIHRoaXMub3Bl bl9zdGVwcyk7DQoJCQkJdGhpcy5zbGlkZSgodGhpcy5kaXJlY3Rpb24gPT0gJ2xl ZnQnID8gMCA6IHRoaXMuZ2Fsb2JqLm9mZnNldFdpZHRoKSwgMCwgMCk7DQoJCQl9 DQoJCQllbHNlIGlmICh0aGlzLmdhbG9iai5zdHlsZS5jbGlwICYmIHRoaXMuc2xp ZGVfb3BlbikNCgkJCXsNCgkJCQl0aGlzLmdhbG9iai5zdHlsZS5jbGlwID0gJ3Jl Y3QoYXV0bywgYXV0bywgYXV0bywgYXV0byknOw0KCQkJfQ0KDQoJICAgICAgICB0 aGlzLmhhbmRsZV9vdmVybGFwcyh0cnVlKTsNCgkgICAgICAgIGdhbC50aWNrKCk7 DQoJfTsNCg0KCWdlZWtfZ2FsX3BvcHVwLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rp b24oZSkNCgl7DQoNCgkJCWlmIChnYWwudGlja19kZWNheWVyID4gMCAmJiBlICE9 IHRydWUpDQoJCQl7DQoJCQkJdGhpcy5zbGlkZXRpbWVyID0gc2V0VGltZW91dCgi Z2FsLnBvcHVwc1tnYWwuYWN0aXZlZ2FsXS5kZWNheV9oaWRlKCkiLCBnYWwudGlj a19kZWNheSk7DQoJCQkJcmV0dXJuOw0KCQkJfQ0KDQoJCQl0aGlzLmdhbG9iai5z dHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KCSAgICAgICAgdGhpcy5oYW5kbGVfb3Zl cmxhcHMoZmFsc2UpOw0KCSAgICAgICAgdGhpcy5hY3RpdmVnYWwgPSBudWxsOw0K CSAgICAgICAgdGhpcy5hY3RpdmVsaW5rID0gbnVsbDsNCgkgICAgICAgIGNsZWFy VGltZW91dChnYWwuY2xvY2spOw0KCX07DQoNCglnZWVrX2dhbF9wb3B1cC5wcm90 b3R5cGUuZGVjYXlfaGlkZSA9IGZ1bmN0aW9uKCkNCgl7Ly9hbGVydCgieW8iKTsN CgkJZ2FsLnRpY2tfZGVjYXllciA9IG51bGw7DQoJfTsNCg0KCWdlZWtfZ2FsX3Bv cHVwLnByb3RvdHlwZS5ob3ZlciA9IGZ1bmN0aW9uKG9iaikNCgl7DQoJICAgICAg ICB0aGlzLnNob3cob2JqLCB0cnVlKTsNCgl9Ow0KDQoJZ2Vla19nYWxfcG9wdXAu cHJvdG90eXBlLm92ZXJsYXBzID0gZnVuY3Rpb24ob2JqLCBvYmoyKQ0KCXsNCgkg ICAgICAgIHZhciBzID0gbmV3IEFycmF5KCk7DQoJICAgICAgICB2YXIgcG9zID0g Z2FsLmZldGNoX29mZnNldChvYmopOw0KDQoJICAgICAgICBsID0gcG9zLmw7DQoJ ICAgICAgICB0ID0gcG9zLnQ7DQoJICAgICAgICByID0gbCArIG9iai5vZmZzZXRX aWR0aDsNCgkgICAgICAgIGggPSB0ICsgb2JqLm9mZnNldEhlaWdodDsNCg0KDQoJ ICAgICAgICBpZiAobCA+IG9iajIuciB8fCByIDwgb2JqMi5sIHx8IHQgPiBvYmoy LmIgfHwgaCA8IG9iajIudCkNCgkgICAgICAgIHsNCgkJCQlyZXR1cm4gZmFsc2U7 DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlDQoJICAgICAgICB7DQoJICAgICAg ICAJcmV0dXJuIHRydWU7DQoJICAgICAgICB9DQoJfTsNCg0KCWdlZWtfZ2FsX3Bv cHVwLnByb3RvdHlwZS5oYW5kbGVfb3ZlcmxhcHMgPSBmdW5jdGlvbihkb2hpZGUp DQoJew0KCSAgICAgICAgaWYgKGlzX2llKQ0KCSAgICAgICAgew0KCSAgICAgICAg ICAgICAgICB2YXIgc2VsZWN0cyA9IGZldGNoX3RhZ3MoZG9jdW1lbnQsICdzZWxl Y3QnKTsNCg0KCSAgICAgICAgICAgICAgICBpZiAoZG9oaWRlKQ0KCSAgICAgICAg ICAgICAgICB7DQoJICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdhbGFyZWEg PSBuZXcgQXJyYXkoKTsNCg0KCSAgICAgICAgICAgICAgICAgICAgICAgIGdhbGFy ZWEgPSB7DQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbCcgOiB0 aGlzLmxlZnRweCwNCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdy JyA6IHRoaXMubGVmdHB4ICsgdGhpcy5nYWxvYmoub2Zmc2V0V2lkdGgsDQoJICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndCcgOiB0aGlzLnRvcHB4LA0K CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2gnIDogdGhpcy50b3Bw eCArIHRoaXMuZ2Fsb2JqLm9mZnNldEhlaWdodA0KCSAgICAgICAgICAgICAgICAg ICAgICAgIH07DQoNCgkgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBp ID0gMDsgaSA8IHNlbGVjdHMubGVuZ3RoOyBpKyspDQoJICAgICAgICAgICAgICAg ICAgICAgICAgew0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KHRoaXMub3ZlcmxhcHMoc2VsZWN0c1tpXSwgZ2FsYXJlYSkpDQoJICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7DQoJICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZhciBoaWRlID0gdHJ1ZTsNCgkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBzZWxlY3RzW2ld Ow0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGls ZSAocyA9IHMucGFyZW50Tm9kZSkNCgkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgew0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChzLmNsYXNzTmFtZSA9PSAndmJtZW51X3Bv cHVwJykNCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7DQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBoaWRlID0gZmFsc2U7DQoJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsNCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9DQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0NCg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoaGlkZSkNCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgew0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNlbGVjdHNbaV0uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOw0K CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGFycmF5X3B1c2goZ2FsLmhpZGRlbl9zZWxlY3RzLCBpKTsNCgkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgICAgICAgICAgICAgIH0N CgkgICAgICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgICAgICBlbHNlDQoJICAg ICAgICAgICAgICAgIHsNCgkgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAo dHJ1ZSkNCgkgICAgICAgICAgICAgICAgICAgICAgICB7DQoJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGFycmF5X3BvcChnYWwuaGlkZGVu X3NlbGVjdHMpOw0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KHR5cGVvZiBpID09ICd1bmRlZmluZWQnIHx8IGkgPT0gbnVsbCkNCgkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHsNCgkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoJICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9DQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbHNlDQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQoJICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdHNbaV0u c3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsNCgkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0NCgkgICAgICAgICAgICAgICAgICAgICAgICB9DQoJ ICAgICAgICAgICAgICAgIH0NCgkgICAgICAgIH0NCgl9Ow0KDQoJZ2Vla19nYWxf cG9wdXAucHJvdG90eXBlLnNsaWRlID0gZnVuY3Rpb24oY2xpcFgsIGNsaXBZLCBv cGFjaXR5KQ0KCXsNCgkJaWYgKHRoaXMuZGlyZWN0aW9uID09ICdsZWZ0JyAmJiAo Y2xpcFggPCB0aGlzLmdhbG9iai5vZmZzZXRXaWR0aCB8fCBjbGlwWSA8IHRoaXMu Z2Fsb2JqLm9mZnNldEhlaWdodCkpDQoJCXsNCgkJCWlmIChnYWwub3Blbl9mYWRl ICYmIGlzX2llKQ0KCQkJew0KCQkJCW9wYWNpdHkgKz0gNTsNCgkJCQl0aGlzLmdh bG9iai5maWx0ZXJzLml0ZW0oJ0RYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmFs cGhhJykub3BhY2l0eSA9IG9wYWNpdHk7DQoJCQl9DQoNCgkJCWNsaXBYICs9IHRo aXMuaW50ZXJ2YWxYOw0KCQkJY2xpcFkgKz0gdGhpcy5pbnRlcnZhbFk7DQoNCgkJ CXRoaXMuZ2Fsb2JqLnN0eWxlLmNsaXAgPSAicmVjdChhdXRvLCAiICsgY2xpcFgg KyAicHgsICIgKyBjbGlwWSArICJweCwgYXV0bykiOw0KCQkJdGhpcy5zbGlkZXRp bWVyID0gc2V0VGltZW91dCgiZ2FsLnBvcHVwc1tnYWwuYWN0aXZlZ2FsXS5zbGlk ZSgiICsgY2xpcFggKyAiLCAiICsgY2xpcFkgKyAiLCAiICsgb3BhY2l0eSArICIp OyIsIDApOw0KCQl9DQoJCWVsc2UgaWYgKHRoaXMuZGlyZWN0aW9uID09ICdyaWdo dCcgJiYgKGNsaXBYID4gMCB8fCBjbGlwWSA8IHRoaXMuZ2Fsb2JqLm9mZnNldEhl aWdodCkpDQoJCXsNCgkJCWlmIChnYWwub3Blbl9mYWRlICYmIGlzX2llKQ0KCQkJ ew0KCQkJCW9wYWNpdHkgKz0gNTsNCgkJCQl0aGlzLmdhbG9iai5maWx0ZXJzLml0 ZW0oJ0RYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmFscGhhJykub3BhY2l0eSA9 IG9wYWNpdHk7DQoJCQl9DQoNCgkJCWNsaXBYIC09IHRoaXMuaW50ZXJ2YWxYOw0K CQkJY2xpcFkgKz0gdGhpcy5pbnRlcnZhbFk7DQoNCgkJCXRoaXMuZ2Fsb2JqLnN0 eWxlLmNsaXAgPSAicmVjdChhdXRvLCAiICsgdGhpcy5nYWxvYmoub2Zmc2V0V2lk dGggKyAicHgsICIgKyBjbGlwWSArICJweCwgIiArIGNsaXBYICsgInB4KSI7DQoJ CQl0aGlzLnNsaWRldGltZXIgPSBzZXRUaW1lb3V0KCJnYWwucG9wdXBzW2dhbC5h Y3RpdmVnYWxdLnNsaWRlKCIgKyBjbGlwWCArICIsICIgKyBjbGlwWSArICIsICIg KyBvcGFjaXR5ICsgIik7IiwgMCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQl0aGlz LnN0b3Bfc2xpZGUoKTsNCgkJfQ0KCX07DQoNCglnZWVrX2dhbF9wb3B1cC5wcm90 b3R5cGUuc3RvcF9zbGlkZSA9IGZ1bmN0aW9uKCkNCgl7DQoJCWNsZWFyVGltZW91 dCh0aGlzLnNsaWRldGltZXIpOw0KDQoJCXRoaXMuZ2Fsb2JqLnN0eWxlLmNsaXAg PSAncmVjdChhdXRvLCBhdXRvLCBhdXRvLCBhdXRvKSc7DQoNCgkJaWYgKGdhbC5v cGVuX2ZhZGUgJiYgaXNfaWUpDQoJCXsNCgkJCXRoaXMuZ2Fsb2JqLmZpbHRlcnMu aXRlbSgnRFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuYWxwaGEnKS5vcGFjaXR5 ID0gMTAwOw0KCQl9DQoJfTsNCg0KLy9FdmVudHMNCg0KZnVuY3Rpb24gZ2Vla19n YWxfcG9wdXBfZXZlbnRzKCkNCnsNCn07DQoNCmdlZWtfZ2FsX3BvcHVwX2V2ZW50 cy5wcm90b3R5cGUuY29udHJvbG9ial90aWNrID0gZnVuY3Rpb24oKQ0Kew0KICAg ICAgICBzZXRUaW1lb3V0KCJnYWwudGljaygpOyIsIDEwMCk7DQogICAgICAgIC8v YWxlcnQoInlvIik7DQp9Ow0KDQpnZWVrX2dhbF9wb3B1cF9ldmVudHMucHJvdG90 eXBlLmNvbnRyb2xvYmpfb25jbGljayA9IGZ1bmN0aW9uKGUpDQp7DQogICAgICAg IGlmICh0eXBlb2YgZG9fYW5fZSA9PSAnZnVuY3Rpb24nKQ0KICAgICAgICB7DQog ICAgICAgICAgICAgICAgZG9fYW5fZShlKTsNCiAgICAgICAgICAgICAgICBpZiAo Z2FsLmFjdGl2ZW1lbnUgPT0gbnVsbCB8fCBnYWwubWVudXNbZ2FsLmFjdGl2ZW1l bnVdLmNvbnRyb2xrZXkgIT0gdGhpcy5pZCkNCiAgICAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgICAgICAgICBnYWwucG9wdXBzW3RoaXMuaWRdLnNob3co dGhpcyk7DQogICAgICAgICAgICAgICAgICAgICAgICBnYWwuYWN0aXZlbGluayA9 IGUuaWQ7DQogICAgICAgICAgICAgICAgICAgICAgICAvL2FsZXJ0KHRoaXMuaWQg KyAiIFNTICIgKyBlLmlkKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg ICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAg ICAgICAgIGdhbC5wb3B1cHNbdGhpcy5pZF0uaGlkZSgpOw0KICAgICAgICAgICAg ICAgIH0NCiAgICAgICAgfQ0KfTsNCg0KZ2Vla19nYWxfcG9wdXBfZXZlbnRzLnBy b3RvdHlwZS5jb250cm9sb2JqX29ubW91c2VvdmVyID0gZnVuY3Rpb24oZSkNCnsN CiAgICAgICAgaWYgKHR5cGVvZiBkb19hbl9lID09ICdmdW5jdGlvbicpDQogICAg ICAgIHsNCiAgICAgICAgICAgICAgICBkb19hbl9lKGUpOw0KICAgICAgICAgICAg ICAgIGdhbC5wb3B1cHNbdGhpcy5jb250ZW50aWRdLmhvdmVyKHRoaXMpOw0KICAg ICAgICB9DQp9Ow0KDQoNCmdlZWtfZ2FsX3BvcHVwX2V2ZW50cy5wcm90b3R5cGUu Y29udHJvbG9ial9vbm1vdXNlb3V0ID0gZnVuY3Rpb24oZSkNCnsNCiAgICB2YXIg dGVtcHggPSAwOw0KICAgIGlmIChpc19pZSkNCiAgICB7DQogICAgICAgICAgICB0 ZW1wWCA9IGV2ZW50LmNsaWVudFg7DQogICAgICAgICAgICB0ZW1wWSA9IGV2ZW50 LmNsaWVudFk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgICAgICB0 ZW1wWCA9IGUuY2xpZW50WCA7DQogICAgICAgICAgICB0ZW1wWSA9IGUuY2xpZW50 WTsNCiAgICB9DQogICAgdGhpcy5zdHlsZS5jdXJzb3IgPSBwb2ludGVyX2N1cnNv cjsNCn07DQoNCmdlZWtfZ2FsX3BvcHVwX2V2ZW50cy5wcm90b3R5cGUubWVudW9w dGlvbl9vbmNsaWNrX2Z1bmN0aW9uID0gZnVuY3Rpb24oZSkNCnsNCiAgICAgICAg dGhpcy5vZnVuYyhlKTsNCiAgICAgICAgZ2FsLmdhbHNbdGhpcy5jb250cm9sa2V5 XS5oaWRlKCk7DQp9Ow0KDQpnZWVrX2dhbF9wb3B1cF9ldmVudHMucHJvdG90eXBl Lm1lbnVvcHRpb25fb25jbGlja19saW5rID0gZnVuY3Rpb24oZSkNCnsNCiAgICAg ICAgZSA9IGUgPyBlIDogd2luZG93LmV2ZW50Ow0KDQogICAgICAgIGlmIChlLnNo aWZ0S2V5KQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAgd2luZG93Lm9wZW4o dGhpcy5ocmVmKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsN CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSB0aGlzLmhyZWY7DQog ICAgICAgIH0NCg0KICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7DQogICAg ICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikgZS5zdG9wUHJvcGFnYXRpb24oKTsN CiAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQo KTsNCg0KICAgICAgICBnYWwuZ2Fsc1t0aGlzLmNvbnRyb2xrZXldLmhpZGUoKTsN CiAgICAgICAgcmV0dXJuIGZhbHNlOw0KfTsNCg0KZ2Vla19nYWxfcG9wdXBfZXZl bnRzLnByb3RvdHlwZS5wb3B1cG9wdGlvbl9vbm1vdXNlb3ZlciA9IGZ1bmN0aW9u KGUpDQp7DQogICAgICAgIHRoaXMuY2xhc3NOYW1lID0gJ3ZibWVudV9oaWxpdGUn ICsgKHRoaXMuaXNsaW5rID8gJyB2Ym1lbnVfaGlsaXRlX2FsaW5rJyA6ICcnKTsN CiAgICAgICAgdGhpcy5zdHlsZS5jdXJzb3IgPSBwb2ludGVyX2N1cnNvcjsNCn07 DQoNCmdlZWtfZ2FsX3BvcHVwX2V2ZW50cy5wcm90b3R5cGUucG9wdXBvcHRpb25f b25tb3VzZW91dCA9IGZ1bmN0aW9uKGUpDQp7DQogICAgICAgIHRoaXMuY2xhc3NO YW1lID0gJ3ZibWVudV9vcHRpb24nICsgKHRoaXMuaXNsaW5rID8gJyB2Ym1lbnVf b3B0aW9uX2FsaW5rJyA6ICcnKTsNCiAgICAgICAgdGhpcy5zdHlsZS5jdXJzb3Ig PSAnZGVmYXVsdCc7DQp9Ow0KDQoNCi8vY29tbW9uIGZ1bmN0aW9ucw0KDQpmdW5j dGlvbiBnYWxfaGlkZShlKQ0Kew0KICAgICAgICBpZiAoZSAmJiBlLmJ1dHRvbiAm JiBlLmJ1dHRvbiAhPSAxICYmIGUudHlwZSA9PSAnY2xpY2snKQ0KICAgICAgICB7 DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAg ICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAgZ2FsLmhpZGUodHJ1 ZSk7DQogICAgICAgIH0NCn07DQoNCg0KDQpmdW5jdGlvbiBnZWVrX2dhbF9hamF4 KG9iaiwgcG9zdGlkKQ0Kew0KICAgICAgICBpZiAodHlwZW9mIGdhbCAhPSAndW5k ZWZpbmVkJykNCiAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBkaXZzID0g ZmV0Y2hfdGFncyhvYmosICdkaXYnKTsNCiAgICAgICAgICAgICAgICBmb3IgKHZh ciBpID0gMDsgaSA8IGRpdnMubGVuZ3RoOyBpKyspDQogICAgICAgICAgICAgICAg ew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdnNbaV0uaWQgJiYgZGl2 c1tpXS5pZC5zdWJzdHIoMCwgOSkgPT0gJ3Bvc3RtZW51XycpDQogICAgICAgICAg ICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdhbC5yZWdpc3RlcihkaXZzW2ldLmlkLCB0cnVlKTsNCiAgICAgICAgICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgIH0NCn0NCg0K ZnVuY3Rpb24gZ2FsX2NsaWVudGFyZWEoKQ0Kew0KCSAgdmFyIHcgPSAwOw0KCSAg dmFyIGggPSAwOw0KCSAgdmFyIHIgPSAwOw0KCSAgdmFyIGIgPSAwOw0KDQoJICBp ZiAodHlwZW9mKHdpbmRvdy5pbm5lcldpZHRoKSA9PSAnbnVtYmVyJykNCgkgIHsN CgkgICAgciA9IHdpbmRvdy5pbm5lcldpZHRoOw0KCSAgICBiID0gd2luZG93Lmlu bmVySGVpZ2h0Ow0KDQoJICB9DQoJICBlbHNlIGlmKGRvY3VtZW50LmRvY3VtZW50 RWxlbWVudCAmJiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRo IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpKQ0KCSAg ew0KCSAgICByID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRo Ow0KCSAgICBiID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdo dDsNCgkgIH0NCgkgIGVsc2UgaWYoZG9jdW1lbnQuYm9keSAmJiAoZG9jdW1lbnQu Ym9keS5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCkp DQoJICB7DQoJCXIgPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoOw0KCQliID0g ZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQ7DQoJICB9DQoJICBpZih0eXBlb2Yo d2luZG93LnBhZ2VZT2Zmc2V0KSA9PSAnbnVtYmVyJykNCgkgIHsNCgkgICAgaCA9 IHdpbmRvdy5wYWdlWU9mZnNldDsNCgkgICAgdyA9IHdpbmRvdy5wYWdlWE9mZnNl dDsNCgkgIH0NCgkgIGVsc2UgaWYoZG9jdW1lbnQuYm9keSAmJiAoZG9jdW1lbnQu Ym9keS5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSkNCgkg IHsNCgkgICAgaCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOw0KCSAgICB3ID0g ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0Ow0KCSAgfQ0KCSAgZWxzZSBpZihkb2N1 bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVu dC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxU b3ApKQ0KCSAgew0KCSAgICBoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNj cm9sbFRvcDsNCgkgICAgdyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3Jv bGxMZWZ0Ow0KCSAgfQ0KCQkvL3dpbmRvdy5zdGF0dXMgPSAiIG53ICIgKyB3ICsg IiBuaCAiICsgaCArICIgc3QgIiArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5z Y3JvbGxUb3A7DQoJICByZXR1cm4geyd3JyA6IHcsICdoJyA6IGgsICdyJyA6IHIs ICdiJyA6IGJ9Ow0KfQ0KDQpmdW5jdGlvbiBnYWxfbW91c2VfbW92ZShlKQ0Kew0K CWlmICh0eXBlb2YgZ2FsID09ICdvYmplY3QnKQ0KCXsNCg0KICAgICAgICAgICAg aWYgKGlzX2llKQ0KICAgICAgICAgICAgew0KCQkJCSAgICBnYWwubW91c2VYID0g ZXZlbnQuY2xpZW50WCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdA0KCQkJCSAg ICBnYWwubW91c2VZID0gZXZlbnQuY2xpZW50WSArIGRvY3VtZW50LmJvZHkuc2Ny b2xsVG9wDQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAg ICAgICB7DQogICAgICAgICAgICAgICAgICAgIGdhbC5tb3VzZVggPSBlLmNsaWVu dFggOw0KICAgICAgICAgICAgICAgICAgICBnYWwubW91c2VZID0gZS5jbGllbnRZ Ow0KICAgICAgICAgICAgfQ0KDQoJfQ0KfQ0KDQovL0lOSQ0KDQpmdW5jdGlvbiBn ZWVrX2dhbF9yZWdpc3Rlcl9hbGwoKQ0Kew0KDQoJaWYgKHR5cGVvZiBnZWVrX2dh bF90b19yZWdpc3RlciA9PSBBcnJheSgpKQ0KCXsvL2FsZXJ0KCJ1bzIgIiArIGdl ZWtfZ2FsX3RvX3JlZ2lzdGVyLmxlbmd0aCk7DQogICAgICAgIGZvciAodmFyIGkg PSAwOyBpIDwgZ2Vla19nYWxfdG9fcmVnaXN0ZXIubGVuZ3RoOyBpKyspDQogICAg ICAgIHsNCiAgICAgICAgCWdhbC5yZWdpc3RlcihnZWVrX2dhbF90b19yZWdpc3Rl cltpXS5pZCwgZ2Vla19nYWxfdG9fcmVnaXN0ZXJbaV0uc3R5bGVpZCwgZ2Vla19n YWxfdG9fcmVnaXN0ZXJbaV0ucG9zaXRpdG9uaWQpOw0KICAgICAgICB9DQoJfQ0K fQ0KDQp2YXIgZ2FsID0gbmV3IGdlZWtfZ2FsKCk7DQoNCg0KDQppZiAodHlwZW9m IGdhbCA9PSAnb2JqZWN0JykNCnsNCg0KCQlnYWwub3Blbl9zdGVwcyA9IGdhbF9v cGVuX3N0ZXBzOw0KICAgICAgICBnYWwudGlja19jb3VudCA9IGdhbF90aWNrX2Nv dW50OyAvLyBUaWNrZXIgKGluIG1pbGxpc2Vjb25kcykuDQogICAgICAgIGdhbC50 aWNrX3N0ZXBzID0gZ2FsX3RpY2tfc3RlcHM7IC8vIENoZWNrZXIgKGV2ZXJ5IHgg YW1vdW50IG9mIHRpbWVzKQ0KICAgICAgICBnYWwudGlja19kZWNheSA9IGdhbF90 aWNrX2RlY2F5Ow0KICAgICAgICBnYWwudGlja19jbG9jayA9IDA7IAkJCSAvL2N1 cnJlbnQgdGljaw0KICAgICAgICBnYWwudGlja2VyID0gMDsNCiAgICAgICAgZ2Fs LmRlY2F5ID0gMDsNCg0KCQlpZiAod2luZG93LmF0dGFjaEV2ZW50ICYmICFpc19z YWYpDQogICAgICAgIHsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5hdHRhY2hF dmVudCgnb25jbGljaycsIGdhbF9oaWRlKTsNCiAgICAgICAgICAgICAgICB3aW5k b3cuYXR0YWNoRXZlbnQoJ29ucmVzaXplJywgZ2FsX2hpZGUpOw0KICAgICAgICB9 DQogICAgICAgIGVsc2UgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgJiYg IWlzX3NhZikNCiAgICAgICAgew0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmFk ZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZ2FsX2hpZGUsIGZhbHNlKTsNCiAgICAg ICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZ2Fs X2hpZGUsIGZhbHNlKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAg IHsNCiAgICAgICAgICAgICAgICB3aW5kb3cub25jbGljayA9IGdhbF9oaWRlOw0K ICAgICAgICAgICAgICAgIHdpbmRvdy5vbnJlc2l6ZSA9IGdhbF9oaWRlOw0KICAg ICAgICB9DQoNCiAgICAgICAgZ2FsLmFjdGl2YXRlKHRydWUpOw0KDQogICAgICAg IHZhciBvbGRvbmxvYWQgPSB3aW5kb3cub25sb2FkOw0KDQogICAgICAgIGlmICh0 eXBlb2Ygd2luZG93Lm9ubG9hZCAhPSAnZnVuY3Rpb24nKQ0KICAgICAgICB7DQoJ CQl3aW5kb3cub25sb2FkID0gZ2Vla19nYWxfcmVnaXN0ZXJfYWxsOw0KCQl9DQoJ CWVsc2UNCgkJew0KCQkgICAgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkNCgkJ ICAgIHsNCgkJCQlpZiAob2xkb25sb2FkKQ0KCQkJCXsNCgkJCQkJb2xkb25sb2Fk KCk7DQoJCQkJfQ0KCQkJCWdlZWtfZ2FsX3JlZ2lzdGVyX2FsbCgpOw0KCQkJfTsN CgkJfQ0KDQoJdmFyIG9sZG1vdmUgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQu b25tb3VzZW1vdmU7DQoNCglpZiAodHlwZW9mIGRvY3VtZW50LmRvY3VtZW50RWxl bWVudC5vbm1vdXNlbW92ZSAhPSAnZnVuY3Rpb24nKQ0KCXsNCgkJZG9jdW1lbnQu b25tb3VzZW1vdmUgPSBnYWxfbW91c2VfbW92ZTsNCgl9DQoJZWxzZQ0KCXsNCgkg ICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9ubW91c2Vtb3ZlID0gZnVuY3Rp b24oKQ0KCSAgICB7DQoJCQlpZiAob2xkbW92ZSkNCgkJCXsNCgkJCQlvbGRtb3Zl KCk7DQoJCQl9DQoJCQlnYWxfbW91c2VfbW92ZSgpOw0KCQl9Ow0KCX0NCg0KDQoN Cn0NCg0K ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=vbulletin_post_loader.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_post_loader.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_post_loader.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIEF0 dGVtcHRzIHRvIGRpc3BsYXkgYSBwb3N0IHZpYSBBSkFYLCBmYWxsaW5nIGJhY2sg dG8gb3BlbmluZyBhIG5ldyB3aW5kb3cgaWYgQUpBWCBub3QgYXZhaWxhYmxlCioK KiBAcGFyYW0JaW50ZWdlcglQb3N0IElECioKKiBAcmV0dXJuCWJvb2xlYW4JRmFs c2UKKi8KZnVuY3Rpb24gZGlzcGxheV9wb3N0KHBvc3RpZCkKewoJaWYgKEFKQVhf Q29tcGF0aWJsZSkKCXsKCQl2Ql9Qb3N0TG9hZGVyW3Bvc3RpZF0gPSBuZXcgdkJf QUpBWF9Qb3N0TG9hZGVyKHBvc3RpZCk7CgkJdkJfUG9zdExvYWRlcltwb3N0aWRd LmluaXQoKTsKCX0KCWVsc2UKCXsKCQlwY19vYmogPSBmZXRjaF9vYmplY3QoJ3Bv c3Rjb3VudCcgKyB0aGlzLnBvc3RpZCk7CgkJb3BlbldpbmRvdygnc2hvd3Bvc3Qu cGhwPycgKyAoU0VTU0lPTlVSTCA/ICdzPScgKyBTRVNTSU9OVVJMIDogJycpICsg KHBjX29iaiAhPSBudWxsID8gJyZwb3N0Y291bnQ9JyArIFBIUC51cmxlbmNvZGUo cGNfb2JqLm5hbWUpIDogJycpICsgJyZwPScgKyBwb3N0aWQpOwoJfQoJcmV0dXJu IGZhbHNlOwp9OwoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8g dkJfQUpBWF9Qb3N0TG9hZGVyCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCgp2YXIgdkJfUG9zdExvYWRlciA9IG5ldyBBcnJheSgpOwoKLyoqCiogQ2xh c3MgdG8gbG9hZCBhIHBvc3RiaXQgdmlhIEFKQVgKKgoqIEBwYXJhbQlpbnRlZ2Vy CVBvc3QgSUQKKi8KZnVuY3Rpb24gdkJfQUpBWF9Qb3N0TG9hZGVyKHBvc3RpZCkK ewoJdGhpcy5wb3N0aWQgPSBwb3N0aWQ7Cgl0aGlzLmNvbnRhaW5lciA9IGZldGNo X29iamVjdCgnZWRpdCcgKyB0aGlzLnBvc3RpZCk7Cn07CgovKioKKiBJbml0aWF0 ZXMgdGhlIEFKQVggc2VuZCB0byBzaG93cG9zdC5waHAKKi8KdkJfQUpBWF9Qb3N0 TG9hZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oKQp7CglpZiAodGhpcy5j b250YWluZXIpCgl7CgkJcG9zdGlkID0gdGhpcy5wb3N0aWQ7CgkJcGNfb2JqID0g ZmV0Y2hfb2JqZWN0KCdwb3N0Y291bnQnICsgdGhpcy5wb3N0aWQpOwoJCXRoaXMu YWpheCA9IG5ldyB2Ql9BSkFYX0hhbmRsZXIodHJ1ZSk7CgkJdGhpcy5hamF4Lm9u cmVhZHlzdGF0ZWNoYW5nZSh2Ql9Qb3N0TG9hZGVyW3Bvc3RpZF0uYWpheF9jaGVj ayk7CgkJdGhpcy5hamF4LnNlbmQoJ3Nob3dwb3N0LnBocD9wPScgKyB0aGlzLnBv c3RpZCwKCQkJJ2FqYXg9MSZwb3N0aWQ9JyArIHRoaXMucG9zdGlkICsKCQkJKHBj X29iaiAhPSBudWxsID8gJyZwb3N0Y291bnQ9JyArIFBIUC51cmxlbmNvZGUocGNf b2JqLm5hbWUpIDogJycpCgkJKTsKCX0KfTsKCi8qKgoqIE9ucmVhZHlzdGF0ZSBo YW5kbGVyIGZvciBBSkFYIHBvc3QgbG9hZGVyCioKKiBAcmV0dXJuCWJvb2xlYW4J RmFsc2UKKi8KdkJfQUpBWF9Qb3N0TG9hZGVyLnByb3RvdHlwZS5hamF4X2NoZWNr ID0gZnVuY3Rpb24oKQp7Cgl2YXIgQUpBWCA9IHZCX1Bvc3RMb2FkZXJbcG9zdGlk XS5hamF4LmhhbmRsZXI7CgoJaWYgKEFKQVgucmVhZHlTdGF0ZSA9PSA0ICYmIEFK QVguc3RhdHVzID09IDIwMCkKCXsKCQl2Ql9Qb3N0TG9hZGVyW3Bvc3RpZF0uZGlz cGxheShBSkFYLnJlc3BvbnNlWE1MKTsKCgkJaWYgKGlzX2llKQoJCXsKCQkJQUpB WC5hYm9ydCgpOwoJCX0KCX0KCglyZXR1cm4gZmFsc2U7Cn07CgovKioKKiBUYWtl cyB0aGUgQUpBWCBIVE1MIG91dHB1dCBhbmQgcmVwbGFjZXMgdGhlIGV4aXN0aW5n IHBvc3QgcGxhY2Vob2xkZXIgd2l0aCB0aGUgbmV3IEhUTUwKKgoqIEBwYXJhbQlz dHJpbmcJUG9zdGJpdCBIVE1MCiovCnZCX0FKQVhfUG9zdExvYWRlci5wcm90b3R5 cGUuZGlzcGxheSA9IGZ1bmN0aW9uKHBvc3RiaXRfeG1sKQp7CglpZiAoZmV0Y2hf dGFnX2NvdW50KHBvc3RiaXRfeG1sLCAncG9zdGJpdCcpKQoJewoJCXRoaXMuY29u dGFpbmVyLmlubmVySFRNTCA9IHRoaXMuYWpheC5mZXRjaF9kYXRhKGZldGNoX3Rh Z3MocG9zdGJpdF94bWwsICdwb3N0Yml0JylbMF0pOwoJCVBvc3RCaXRfSW5pdChm ZXRjaF9vYmplY3QoJ3Bvc3QnICsgdGhpcy5wb3N0aWQpLCB0aGlzLnBvc3RpZCk7 Cgl9CgllbHNlCgl7CS8vIHBhcnNpbmcgb2YgWE1MIGZhaWxlZCwgcHJvYmFibHkg SUUKCQlvcGVuV2luZG93KCdzaG93cG9zdC5waHA/JyArIChTRVNTSU9OVVJMID8g J3M9JyArIFNFU1NJT05VUkwgOiAnJykgKyAocGNfb2JqICE9IG51bGwgPyAnJnBv c3Rjb3VudD0nICsgUEhQLnVybGVuY29kZShwY19vYmoubmFtZSkgOiAnJykgKyAn JnA9JyArIHRoaXMucG9zdGlkKTsKCX0KfTsKCi8qPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PSpcCnx8ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnx8ICMgRG93bmxvYWRlZDog MDU6NTIsIFR1ZSBKdW4gMjR0aCAyMDA4Cnx8ICMgQ1ZTOiAkUkNTZmlsZSQgLSAk UmV2aXNpb246IDE1MDkyICQKfHwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ki8= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=qiplogo.gif Content-Type: image/gif; name=qiplogo.gif Content-Location: http://forum.qip.ru/qipstyle/qiplogo.gif Content-Transfer-Encoding: Base64 R0lGODlhLAFVAPcAAKusqpulkyS+AMnwqbHTlL7mo7rioMz0rNvmysPCwn6Wacft pofVR2zSUaTEirOysrzhnYWVeObl5czrr+Lh4aOsm7G2q0bEAcHmoc/YxpeXlb29 umvMFpjZWbHXmazNkJSnhTXAAFTHAcS7yIKcbVXJMKXcZrbDqdHR0Gl6Wuvr687M zeDm18HDvYqkc5y6g6y3opSxfKi1nMbTt7/DuVnGGr3TqL7kodrZ2WHJAsrIycvC zaC+h6rKj9XV1d7d3azRlZCsenSKYi2/AJObjLbZmaTdi53ad4HHZ3XIPM/Qyrm5 uLbcnLnQpIyWg+nn58LbrLPZm7rgnsXqpKLBh5zQh8bspm58YtrS3HqOa8vktW6C XJm3gbzjoTrBAEvGFHPOKLndm8Trpry1u3KFYrrenIKOeOjo6K7QkoegcYXFTdjW 1rjendHgwbngnsLppPHu7uvl6+rr41prS1/BO3yKcY3VTajDkpnZZrCwr7zao4LS Qbnfno2gfcjKxuPb5c7EzzvFGoTTZZ64ira2tWfROZ6vkMbFxcPoo9/Y5GXHPc/K 0tXaz+Tj43SAaq3Dm2jRJ7e1smbLJMzJyo+ufXiPZeji683LzMXHwszMy8C/v4a7 ZtjY19PT08rLyY2od9XR1rjYnbPJn9zZ3bPchsXlqJ+dnbjbmtvc2r+5wdD4rqfH jHiGbTq/DZe0f8W+ynbBVomQgtfT19LT0evr5+Tl5eXj5XzPNsXtp871rM/3rcHo pMryqs72rdD/rr7losvzq8TspsPqpcvyqvTx8fbz8/f09M30rMnxqczzq+vp6e3r 6+/t7fLw8Mjup8TppLTXl+Df39vb28/Qz0hWPPHx7W+AYr7OsOTk5JG/dsDXqrPj jKq/krnilLrhm7ixu3/QUsHft8fuqLrgrRm8AELFJKrdnMXspqvPmZrfcerq6qDb YOvp67fdnLvfnMvJzbXUqbPeoMXrpdTV0pm3ca7Qna3ekYrEbo6wfYrYe73louPg 5rfWnHjQLarboHeJZywAAAAALAFVAAAI/wB9CRxIsKDBgwgTKlzIsKHDhxAjSpxI saLFixiBaNzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzA9yJxJs6bNmzhz6tzJs6fP n0CDCh1KtKjRo0ijKF3KtKnTp1CjSp1KtarVq1izat3KtavXr2CZiB1LtqzZs2jT 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 ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=navbits_start.gif Content-Type: image/gif; name=navbits_start.gif Content-Location: http://forum.qip.ru/qipstyle/misc/navbits_start.gif Content-Transfer-Encoding: Base64 R0lGODlhDwAPAPcAAL3Zs3HIfW7EenPKgGvAdr/ZtGq/dXOMdrHZqbTCuHXLgnHI fnXNgMPZt627sG3BebHZqlu6aXmgf1u3aVOtXrfZr4DZkH/XjrbZrsvWz2TDcG7B fEucWGXAcGe7cq3FsXPIgGi7dK/Zqb7Zs6vZpZurnmGza63ZqL/LwrvZtFOpXKGw pF6yac3Y0M3W0HvSiGa8cXDGfcnZuly4aZe+nFeuZVKlYHedfcXZuqCponTQg7fZ r4+xk2i/d2S6cG7CeWu/dni0fnijfrjRrrbBucnSzKi7rLrZsISdh2m/dLnZscXZ uW/Fe2S2bmS3b8zZv1yyaG3EeMTZt3XLgnnPh7bZr2e6cnOaeJ3KonTLgZ22oWS3 b3nQhsPZuI++jV22bM7Y0GrHdmC0amO0bbbLuWq/dW+XdFioYXSqeYa5iGvCd3ui gZOul0qXVXegfDZ1P1KdXcrVzW7MfqPFpMjZvFyyZ3bOgrHZq1eoZHDNfWi7c3y4 fai5q4y9i3fUhoCghGOzbrfZrl6qaWa5cW/Fe3ubfXvWiVClWsvZvYS6hHaffL3Z soG0grPBtqi/rFOqXZm6nNDY07TDuJarmUmCUYa5h9DZ0wAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAJYALAAAAAAPAA8AQAjJAC0JHEiwoKUgdQYZEBBg ip0LeDjYiICCIJhFAAAUKIChipIlPATGOSTGB4wkaqIsGPCGksE5UhDtKbGiUQIH RLBo6BAmjw4/hiz0GNIFRyAjAs+w2KKHgIAYIKjA+QIlksGrV138KcQHq8AWJ+6I 2DHiCAQEMtBMQvLBEaREaSox8tKgQgoAWjKoGGMFCJMBDF7I6fOEDglJlshQaOKB AKEAWbhsaFNjRhGBNB6ZcBKizIMfCgRNAESQjZkrN9ZIcKNIyIEclgICADs= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=navbits_finallink.gif Content-Type: image/gif; name=navbits_finallink.gif Content-Location: http://forum.qip.ru/qipstyle/misc/navbits_finallink.gif Content-Transfer-Encoding: Base64 R0lGODlhHgAPAPcAAAAAANnZ2XfOg3rShnXMgc7Y0H7Zi3zWiXFvcnnShHPHf3jN hHiefZe0m3qfgHbNgnXSgITZjlGCXJiwmE1/VNDZv27Ed3bQgnPMfmaRf3PJf3vV iNbZ0EByRsvWz1q0aMrWzXzYiaO0pnvYh83W0Gq/dYOKhniReIbZkXHLfXjQg8LL xXrThXqggHvZhGnKdbrDvWXDcJuXnnWde3Wce564nnt5ex4eHpCXknPLfpqSmG/J e6u/rWmBd2mNfMvUzn7Wi5aSll+BZTxuQn6WfYbJjjx/R3Wgi9TZy7O6tZTZl3jY hW9/cp2kn6OXoYjZjnTLgdXZzn6WfEeGUlyIc3HQfqi1qay6r2/KfJPZlnHHfXvW iGvCdlqjY47ZkmG+bHTJf6WmmqLWqG+AepK0p6KypqmkqLW/ty+dQXvRh2PZc1Wu Xp/IpW/Ge2zMeVV9Zau0nqK/mqG0opCnkaunq5enmHTLgW6Ecau6roTZjNXZzavJ qn3WimnBc4+jkoHZjXnVh5OnlnuhgV+la1l6Z7y9vHXNgXd7eHLJfn/XirrQvnqj gY2GjqO4pXiidHfRgnXMgYnZkKmqp3WdeYjZkI+nj3XNgKa6qNDZ0wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAJgALAAAAAAeAA8AQAjoADEJHAhgoMGDCBMaLMgQ U8EbmIpUecRiwwE+QCIM6nHkzRmEBRUOLBAljAxGAQo5mZKljkiFHr5gSYGBgB0o DyAZGZIw5EtMezgEcGQiwKEyVmCAVCjGRZ4nlFBE8qKkhI0gOtaI+ImQy44cBCwJ ELBghIQMHX5wXcv2J4lKc/BgwpGkbcICFfTAkRQgAB00SIi05dHokpwacSackOIH gRkmagK1BeEGAqAtIQwY+LNEyBgyFK7YVfTC0AUVCQakSdSHkA8qK+xiYhOjjRZE GsAoGNDlgwXZAhvMcDCJhqAWDBbdaYIpIAA7 ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=reply.gif Content-Type: image/gif; name=reply.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/reply.gif Content-Transfer-Encoding: Base64 R0lGODlhbgAaAPf/AIy0i5i6m26kbdHY1ZajmKrFrk5+WLO6tfT//I3aj9ng3dXg 23KEdOvs7P3+/mabZquPftq1mXatdIh2eWqgap/lqN7h4HzMgr3EvmuEbczZ0YbS hzZcT0RyU1yjX1aIXLzOwd7t6l+RYmefZ6OppnTDeVuOX4zSjVpzXoeQie7HpPj5 +pOalUxhVIKfhD5pUdXj3+vz8ZfgnJZ/fLeZh6+5scfRysvRzX7JgEJvUrXAuHy6 emV1aImKimOYZHCobzhPSsPIxaqxrHuyecCjl/X19oOsgub29n/BfeLn6MTWysmq mHXDeYvNiqXBqOvv7nOqcXW5dOby70p4VnuTfVqIXoLEgXy8etPi3tve3ZuonXN5 d7nAvJKzk/D9+321e+Dk4zliUHnJfW+7clOEWtba2IuWjrLJt3zEfNPd2pvfoZLZ lGGWY32ifWuba8fMyMHGwuPv7Pr+/WKRZW6xbYrYjdvl44fVisKijdHT0k91WLvI wGWpZW+/dI/dkmawadzm4oygjoysjaOzpYPMhM7Tz+78+oDEf3e2dc/c1d/q5VN/ WsfWy53jo35tblJsWFFxWIbIhcLPx4PKg+W+nWRjZefq6X+9ffD595+won3BfGp7 bXq8eHvGfYathnWcdYehieTs75CHi0JcT3jAeXfHfILQhX+WgXLAdtOujX7Ffn+o fXbGekRmUkyNVrbNu4Kpg+349cC/vWKAZG2RbaC9onnCeOv5+dLLzIanh2y4b3+5 fXmieMnOy5Pelm9hY4Wrh3igd32+fFx8YG2jbHaxdHO1cvLz83q/eTBSTvDz81Jl WIfMhXSNdo/TkOLy8HC0b4GrgKHmqtbk3nmLe3OucXivd3Cgb+r39aHoq8DSxleC XHm5eD9VTZnjn4PHgnW2dGm0a/z8/EppVGeUaKu0rvf399fY12OsZe/w8S5DRpfc mm9tcPv7+3nDerHCtK3Ps4F+goK/gMvKx9vj3trm4WFbXmyia66lppCPj4ioiUhu VfL19vTy8v///+fu8SH5BAEAAP8ALAAAAABuABoAQAj/AP/9s1HoBoYDB2qUEyJk EImHB2wMSEOxIsUBByRNHKABhsePIEOKBImlpMmTKFOqXAnSTpJQAmPK/Lcnl403 DsxYcCBnBSZMMeIoAgQojixHEShFwAOBgQ9wV6Jy4hT1CjhEAAJ0geVmBDdhYMOC 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 FxMBAQA7 ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=rating_5.gif Content-Type: image/gif; name=rating_5.gif Content-Location: http://forum.qip.ru/images/rating/rating_5.gif Content-Transfer-Encoding: Base64 R0lGODlhPAAMAPf/AP//yf//o///g///ZXeSwXmSvu3OcceDEK2wrOWva4udvoab wIGYwoKWv4iWtNaNLaZtEnaRwP//y3qTwP//tv//w///r///iJ+krv/inuq1Z8qz kuKfYbFvD+m7Yv//ypumuNrDb+HEi6VzG6ltCt2bH6RrEdbEjf/hW+izUv/lQ/TR hvXaVNDHl/7qTNuuZO7Ha4+Xp+zQW32VwJ6ksP//spaWpHiSwKSkp9CdZdq0SP/b Yc2/g///jPPWV3V6i3WRwP/oTpGgueXMZ///e//rRIGYwIqYvP/sjf//mZtuRf// kerQdv/yTZ2murZ4DXyUwZmhrP+4Sf//s5GVqJZmFZmdp4OYv///nP//zqWotIub uv//l///uduPL//RS//qP///pv//wv//t///rv/4rYmZtn6UvLGKXu7bZat9Iv// vv//Yv/mif//zf//nf/soP//0NvOhf//zJabsNrBbKSlqKKem7usnphoFf//m5du J/nlY3yWwv//iffPffjVmP/VW4KZwv/miv/ST///k//TW9qZYOHLbIWawaqgjNaN L9CsUqJ/RJihrpSbsq+RdP//Y6Z0GtmZX8OQWqBkEN7Ea6huD9OwT9izRvbfY7ir oPPIZv//x6GAT3eSv4OWuuWwa4WWuISXvo1vWfXVdqKIYneFofniX45xWn6Xwt/Q gnyVwn+XwejLdqZrBfPPg5FwVf//n6efkPPOb7GRbvXMarCuov//z6+wp//qQt6u YP+yQvXLaf+1R//WUv/XXqCLbvDLgOnXbKhpDXmKrOTKY/+yRaqvrurYbO7bafjV l9nGd/rYmOTOaf/oRbaqn4qZtOnPYP//sf//oPTSc/XeYvbfYP3RT//RTZObs4CV vLGwpf//pKZ7MKV9NYqWsoCXwv/wTfLNgfXOf7+LV5+nuZVuLKR/SHmUwnuVwXuV wqRnEP/pnImcvsyIE76KVP//hP//htybYHiIqp+BTZ+CUHiSwXiTwYSZvvrmZK6S dv//vaGLbPDKgXOPvyH5BAEAAP8ALAAAAAA8AAwAQAj/AP8JFBjFzMCDAwsiROgo 2sKDQmI8HBjxYaImhWCVigPvxsEFTZaMq4ar3KeDicQtEUbLDaUCBye46LECxocc Z2LOrHkz5z85w+owspYkW6Vz3yAEW5XMEiZNSQix2+MNQr9VyoxluqbnF7E8kl6Z apFmiA4fWFB0qDKCBDqyZtGqZUvC00FBKkwAmYjXRISJDJ5dwjcxQpAnMwofToxQ kb41FAK0mUfn4Cw+kCVPenTwDip+FLoNOqTtoBUWXcaEQcLBhmnUqlm7Hmhg1z2B E/5AO2jgBQGBN8htOujqxd9/QPzhOXgiBZSBIjYwdw5d+sIv9iYK/FJP+z9sjbwz 3VEjnvzEXJEOFJvIbcABehNvDXh3aiIGNiV+2Mevf2ArZ37MAQAZAhjCywO19BEO Ihdk0QmBgRzzACTrsMKMPFkAYEE8wPiyyD7pEMADERJIMMUFO0jhBRqqiEiiiSiq iIY6A8lATQ0VtEPKQjLIgmM7qSwkzRvTVABHLAuFwIUFYpShRJJLNvnkQQgUEcoo otgCiANUFpFAA6D0sgyXAyGjy5fbcNIMOAeBAIYGRxTgQQZUtPlmnHPWORAOVxyk gBMH8eknoAPZkc9B7phzEA1bHGSEFos2OtCjAgUEADs= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=post_old.gif Content-Type: image/gif; name=post_old.gif Content-Location: http://forum.qip.ru/qipstyle/statusicon/post_old.gif Content-Transfer-Encoding: Base64 R0lGODlhCgALAOYAADtXWJfNp4bElr/j0rTcx4HSk8Dk06bVuL/h1NTz6dPz6YDR knKGg7/h1HaNidLz58zy33yVj9b061N+Z4aemZbKqHWMiG+JgqjnuCk4O3GGg09n YbPbxqbit8by2brwy1R5ZrPbxlxwbpbMpuj/+XCDgaXUt5PYoofBmYXDlb3h0L7i 0UNmXr3h0dDz40VjXTtWWEZhWHKIhc7y43uTjiQwPWiEel9+cabTt2F0ckFiXic4 Pt338i09P7Xrxpbepcfs277g0yo5Rd/584zmnY/snztXWElaWlVsZ0N8WAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAEkALAAAAAAKAAsAQAdngEcRGgwMMjQ7SUkgJykC jwIoPzEODysDmAMtEjkWD0EICA0qMy49Nj4mB6sHOB9IQjpGALQAMCw1FCQKCb08 QBlJDgoIBsYGDUMlFx4cBM8EIRAiNx0jAdgBFRgbE0QLBeEFC0UvgQA7 ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=menu_open.gif Content-Type: image/gif; name=menu_open.gif Content-Location: http://forum.qip.ru/qipstyle/misc/menu_open.gif Content-Transfer-Encoding: Base64 R0lGODlhCwAHANUAAP////3/+ne/dWyWap7Akb7du4fFh47QjfX/87/QsmdwYP7/ /fr/8en56Nvz2XuqerHRr3KjcOP14YrDib7fvIqpgOL/y3e/dPD/2JvbmlZ2UX64 fc3uuoehdPP/23esdrTWsnCYb4PEgnSGZJW+jMXfw2h3XMLjr6rJpna/cwAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAACkALAAAAAALAAcAAAY0wEOJUgBBUARSJZIBOJ8M z0lzcTwBCwzHJEiJJM+AZbRJmQ0NZ6DzMLsnCEAi5K5/FIN6EAA7 ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=avatar118090_1.gif Content-Type: image/gif; name=avatar118090_1.gif Content-Location: http://forum.qip.ru/customavatars/avatar118090_1.gif Content-Transfer-Encoding: Base64 R0lGODlhUABQAPf/AAgJCAwXDBgaGAkkCRkmGRo4GigpKCg2KDY3NgtFCRdBFxBS CwRsBBlpETdNNzBbLi9mLzdxM0VGRUlWSVVWVV1oXVF7UWVlZW9ve29+b3R1dHJy fnV4dXx8fHR0gHp6hX5+iQabBQuVBwmcBgydCxWRFRGeEQ2gCRSkDRagFhmjFxui GxupESqMHDOdMyKuFiWvGSqzGzG4HyOlIyimKCypLDOrMzmvNzquOja6JD6wPT7A KEqpOECxKkCwP0a6Pkq5MVSMU1ibUkKuQkSyREe5QUq0REq1Sku8Q025SVupV1K+ SVO5U1u8W2+WbnqEen6cfWC/XWK+YmuxaHmueUXGLUjENEzKMlLNN1rTO2DXP1jJ R1rAU17CWF7TQmHNTWTHWmXaRGzUVnDfTnLWXHHbVXTZXGXBZGjDZWrCam3IZnDH bXHKannNbXPFc3XIdHrHcX3CfXvNdXvJennXZ33Tcm3gR3TlTHzqUoDNfYDabYDV dYTVeoTac4fZeojWfYnae4HuVYPoX4PwV4XxWIv0XJD3XpD4X4PiaIzhdY/2YJDi epL1ZZT1aZL4YZj1b5n6ap/ze6H6dqL5eIKDgoKCjIOJg4uLi4aGkImJk46OmJOU k5SUnZubm5eXoJ2dpYaqhZ+in5W+laOjo6Ojqqqrq6yss6uwq7OztLS0urq6vr29 woPMgojOiInVgozQjI3Yg5LVj5Pch5PZi5nei5TTlJrVmprblJzYmpbjgprkh5zr g6HcnKjGqKTboqjUpq3SrKjepKvcq77AvrHesaTjmKnmm6zrmaj4g7D7i7Lzl7b2 m7X5l7r3n7z6nqrgpK7hqq7ooLDmprLirrDppLXoq7ruqrjjtrn0orzwq7/wsMDn vsD1q8D7pMHysMLDw8XFysbIxsjIzM7O0cfZxtLS09XV2Nra3N7e4MPmwsboxMnr xsvpytDsztPt09nv2drw2uPj5Obm6OTp5Ovr6+/v8OPz4+r26u747vT09Pf3+PT6 9P7+/gAAAAAAAAD/ACH5BAEKAP8ALAAAAABQAFAAAAj/AP8JHEiwoMGDCBMqXMiw ocOHECNKnEixosWLGDMe1Mexo8ePIEOKHElSX0V+KOvRk8eypcuXMGPKnBmTnj6U /CCi1AeOlCdNQIMKHUq0qNGjRj15MmUOpUOU5jyBwERKldWrWLNq3cq1K1dUnipV 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 zviM0BiN0riMAQEAOw== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=icon1.gif Content-Type: image/gif; name=icon1.gif Content-Location: http://forum.qip.ru/images/icons/icon1.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAKIEAJTWAJStUmtrAP///////wAAAAAAAAAAACH5BAEAAAQALAAA AAAQABAAAAM1SLrcTiI+J4B4MUerpRggmIUiRJ7k9Q1B67JBuaKnCr5uK9OoDeO6 gY8XGhKFkI4yM2k6HQkAOw== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=fsboltunbetam600ea1dta9.png Content-Type: image/png; name=fsboltunbetam600ea1dta9.png Content-Location: http://img168.imageshack.us/img168/5789/fsboltunbetam600ea1dta9.png Content-Transfer-Encoding: Base64 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 khKtzL1799LW1kZOTg4VFbFdmA8cOKgtSkWisHAs69f/2dCW5cuXs2XLFo2cgUCA //7v/47Ka7fbeeqpJ031/Vi49NJL0S+gqXXoTaeiKFJYWEh9fT0ffvgRTU0+cnJy 8Pl8tLW1MXbs2JgH9H6W+cJg+UOhECmpdibddhvv/8d/4PsEfJ8Y1fCOE7D2pyEW 3CzSHgzy/qMhg/kxMs+0FSuG/MSPARkQUokz6ieK0efMZ/Q5yojTduhT2g7U4Pft p7Mj2vMup3AKzvwx5BWehdUebQUBYko2MKgQOBwOzj//fN57770oVwbDoVhhFBUV GXx3ImG325k9ezYLFy7kyiuvNK3/iSeeoLS0lN/+9remk97y8nJWrVo1ZJfkFStW sG/fvqiFt8mTJxv+qxPy+vp6fD4fPp8Pq9XKjBkzmDVrFuvWrUu4zkQwGOn1OPuK K/j097+nKXyMTNH8+Yy/+GJSRJF3f/xj2js62PDQQHlOl4vz77+f5iNHOLx+PZ73 lY3u7mnTKF6yxFB+JE+GOvoPaeRPBLa84QgZs8kpLKOnr5NuSZnYpIsZpKVkkJ6Z RXpWFim6Y+1O9Y0pLi7G6XTi9/tpa2vDarXidDooKSk1tdDcfffdpvOA/Px8bDYb LpeLkpKSmIInSRIzZszg9ttvp7GxkaamJuVGOp1MnDiRiooKU+KrnpZOp4My7dDL AYRCIS6//HImT56MeuJcaWkpN954Y8xrDgYVIrlcI3G73Vod6jXoIYoikydPoqQk 2pFO7Rt17eJk9xJIfh/u+fMRGxsZ9Y1vMPKss8gpOYO2uv2cdf317F27Fn/YoOB0 uZh5990Mr5hKep0De2Ymrtmzadq9m4lXXnnKOKJCkHVbucwkWi9pseIlvw9/0378 vkMkCjE9g+yRY8jIKUB0Gnf/x3u0DTbyNzQ0GMhntVoJBAIauYuKinQH6kJl5WY8 ngMJtXnKlClEnu0jSRIbNmwY9FxOt7vQoI+redVj2s2Ea926dablLlq0yHANdcoL 2Qz9o/53uVyatSqy7Wo+VTgiEQgENLOuPu9QRv4Dmzdz4nj8t6TsX/c0VsHB6BgW OAB7ZibFEcYCM57o+zAyPqJ/hdTIyERVn1AoRLPnQ9qPHkLqNi5d52TZsWb2mefr SKHtRBdSdyeSZy+wl5wsO1kjSsgZM+4z63SiKEYRHBRzZWNjI16v1xBns4nYbAPr 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 nAAAAABJRU5ErkJggg== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=user_offline.gif Content-Type: image/gif; name=user_offline.gif Content-Location: http://forum.qip.ru/qipstyle/statusicon/user_offline.gif Content-Transfer-Encoding: Base64 R0lGODlhDwAPAPcAADddflZ9clW7eGSCgV+5eG1rdmWAgVJWZ0GJfKyqoVh1c1xZ TEZBNXd6i5CZqFvAdFy8daqllUNxcc7LwEBUY9HS3sPH0V3YflGef1K0dk2pe4OD ikiXel3BfYaGj2lpbMvL0efr+Ovr8mJ8flnSfejo8kubdebm737shE+ScrO1v1ac cLO0v+Pj7KH3rIfdk0VOWm5ufpaWnJC7q3l7iZ+fqIKAc0GAdoN+fmJiatXY6L/W 37bA0WfKetbX5dHX5GzOfa2wwa2uuW1qXsjI0l+wg6KnuX3+hz6Kf3L4hFxhaby9 y6jtvE+xeaWlqT5QY1O/fZutsoGTnjZbfUNEU9PX597f64aHkvDw9lmAc97l9MnK 2U9TZUKIfcTb5VV8cmW6fUNAQ02seEJQXtne7Nzd63L3ibGzwi0rP6j0t7O1xunp 9FSBcq2qo3N0fkWdhJmcrEymd9rZ2WjVdZSVoFGxe1KDcIafpVmpck6deKCwvEqk dzVVcMfT4tTV4Eacf46bqWzwjTp3iJajsFZ/cnl2aTt1f1WHcubq9k6td2trdaS+ wkKLfcvN1zYwKuPq95edqdnZ3re3vlGwdp+eptLS21eEcZGfrWzIe4+XqD9qeYuK jNDR3K3Zyle1dkhFOUtrbG94iKK7wLrO2o6RoDRoiMjEvszW5UhkaXeLlGhsflqI dZucqpGXqUhHUq2trdTX6PX1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAALEALAAAAAAPAA8AQAjfAGMJFPhDz51BFgYK3MEo QBsinCpsUQOnARUlTC7FelHKQIRXTmRs+MCAQhI+A/skMpHikCU7K+b84aFwVJw3 GFYpYNMhEAdIAr3k+TIBi4gWlVjQcRMG1REHsYAYyoLjCqlWgKQcGJNmikKBVRbN EKXj68BTeDRAIXFBgAQVCrVkEDTARqEhCz6BMoOgUaxHmAAkkBMJhKQaHnI4ItDE T6cuI0ydKLHGyhJWNFzBcJEqxB5NmygJORPESKZQaKL08BELkZgbhBQViKGKyxMU SMooJANmkicID+oUgTUwIAA7 ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=report.gif Content-Type: image/gif; name=report.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/report.gif Content-Transfer-Encoding: Base64 R0lGODlhFQARAPcAAOb05P////8AGf8AMfv7/P8AKP8AMv8yWjNDRzFCRhUpLf8A Ld/p3c0INP/E0OHp3P8qV/8rVcCboP+guPv6+/8JPRQoLf/v8sKgpCk8Qf/g597h 1dcALf8jUudHZL1da93k2P8CON3Nyd/X0P/H09/g1/8AHTRFSugmTDdITP93lPYF Nf+Opf+Wqf8GOf8aSJO3tKY+UeI9XP9dgN4BL/9ni//I0v++y/+2xf8tWf9qiV93 eN2KlPUAKtWPmNGHktfe1NmDjxMnLP8HOwQZHv8yW/8AHMYAJhQoLP8GOuRTbt7n 2//z9f9CaP8lVNTSy/v+/eJuf7tacAgcIeDm2//a4jhJTZzBveBJZrdjdf/D0f82 YP7+//+4xuoALOkwUv8AIv+rvJciOP/E0f8AMP4AKN7X0CY3O/8OPyE0OPj//72L k/9jg/8AL72Ejti7ueXy4xQnLLs1U/v7++Hp3f8HPv8mUdjIw+kbROVDX8y8uuTx 4v9Pcv+Hn8IVO9/i2ONnfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAVABEAQAjTAAEIHDgQiJgPcAgqJKin B58AARAgmROgiwkqCwX+QCEjyJsNGUMOdFOgD0QSAsyIBEGjA0SIZ4hweckmikiB WQq0uCFAxM2BGMroCJBmihotRkqIfOJly8sUQghAxAGGzsIYdapAZGJjQg0nLgbg GfETAIMjFQzkKTtwCYcXEIt8YbunAZoAOzIEOOChrJ8QGgIksAAlQAQlN+UMGAPx hAKpAewACillQZiXVuJQeJmDx8I1ZFi8DADjSoALDlQM+bNQgoEmMyAkabMCi487 DxYGBAA7 ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=quote.gif Content-Type: image/gif; name=quote.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/quote.gif Content-Transfer-Encoding: Base64 R0lGODlhRgAWAPf/AM7V0V6QYV2GYOLj43Gob9y2lcKjjanHrZaamLubh6+kpb7F weLr7LG5tO7FpGKXZODm56bEqJall4OrgouyjFuOYE5+WG6kbT5pUdDS0V5+YXTE en/IgNnb2oqqi7OVh4XJhMjJyWeHZ6mTkmmfaWuha8qsntCum2abZzVcT7TJuX2i foXTh+Xm5nexdXSdda+0sPr6+3GQc12XYF6kX3OlcpeAe5zgop2vn6yxrofVines ddTe29vf3YiHiZGIjJ/mqJPYlWxzblV7W+ns7UVzVO7w80t6VsmolWWTaKnAq2eX aJjfnWSlZFF5WcnQzHW5dIeXiny8esXQy5yonYzajzpjUEFuUrm7um2PbXjIfqKp pHR4eHqQfY7ckY/dkmqvaovTi6Stpu3t7XqcfLbAuURrU8PVy8nPy3q6eIemiaPn rF+PZFaHW8DHxHnAeauQfGSUZbzDvpWQk9DW1G+7cYXGhNTW1fDx8NDZ1sPJxmmX a8PMx/Lz81OEWvX19muda+K8m6TDp4Gbgubp6YTOhmJ/ZKi9qUt0VmGQZFCBWNvk 5LfNvHKKdYKjg4rYjHC+c7m/vW+acXWqc3Foa8DFwbigl4yujMXMyLS7ttDY1LzA v7a1taW4p73FwXmzeHfHfHPAdcrTzpTel9Ph3b/RxaG7pJrjoMbIyLvDvmiraKmu q3mheqO0pszW0f39/YubjdXa2FiDXaC6onmMe/39//v7+/P19czRzm20bmOQZV+M Y1mMXVl+Xv////7+/qS2p+Xs72WaZmSwZv7+/2SZZaCyo6S5psfOy3+/fGeTaI23 jfj5+a3IseDh4meVa2iVa3zFfHiYedWxikVkUofOhtbi3z9iUGWPZ0htVGFYW02M VnbGe3bHfe/v8G1pbNba2NLZ1Zfbm8HKxcPJyJCykIiyh4K5gI/VkGm1a6Cios6x painpqiLfod5fs3Qzn61e1aUW+nr6uvr7Ovt7kqCVoHMgrnCvv79/lNtWWlgY6W7 p47XjZDWkmmcaefu8SH5BAEAAP8ALAAAAABGABYAQAj/AP/9C8Yj07sQcipVwpKp QY5VOWA04BGsoigYbvJACCawo8ePIEOKDBmsmCowAcARcqPHE7JUetDg6+AuUCAk CbjIukCBwqc3UJYtO/eGg1EOIJJWqxamKbp+QYKIE8fkhtWr4oKEqRYNSi5VTWhs Y2StQjEUxTS8opcnz5Q5CHLM80XXlzcBFy6oqcvXFxW6HuLs9ZXI3zFfmuKwAUC3 ByFfrQI4oiuLFw66fZ74enLNCpmOPLb46tGhg7PTY+b1oWsrCqUEgQx8sCEkiqkD zZod2M27d4TfvwUJH05cEPDdzRidIcVRoIoZJC7E+duHiDM6T8bNgYtqDDNpk+Dt /xisxsUeup0E0B3Uqq4AbJcBCFBGRoOhLi0g7xpEt9ceVgIM0YUcvgCgyBHZCFTK M22Y0QBdeGTQAxpi0JLPNRiagcgRFnTYoSIghujhiEeUWGIRKKaY4hUsttgiBhhY YcUuDHjkSia+qAPDFqtgwRcxvrSQCgML6PPBNAnA4UMZi4zk5JNQkkLDMAH8Qkgk ZWCCzD0LuPEEMs7M8YElXBgiwh5gRMOCDjo84mYVVXghp5xf1GmnnXN6UcUjbOrA QiH2cKDFBqFAUkc6w1DwTykzqELAA2XEoMcCC3gSCx2xcDKCAyaMwAVeO3gA2Cf+ 0HVMCeWU84kLO1BwyQSXeP8gqwevKqHEIbPUMEE5l/R6STkTzHLIPsdI8sAM9QjA SAAolLAELb5AQAcdfLyFAAwLoIGFLZXs4cIkgw3ij3q+GDNEXT10QRc2JbQHgDIv 0IWDBrhAtsRkvuwSx2OZGCLBZmZggMg/pjwgTDFD3EHXL1jAcMdqfUmQCAkklGBx CdJp4ssx/hDg8ccg51UCCWg98EAAFfDShh8WHIEiizDCaAUGNQrkSiW+xEBMLbX8 0leQUwzEhzZwjKBOGXnUDOXSTHeUxyq+QKSOG1uIgUYOqND1RwMLvFaAAXDY4IMn EDRtNpRnlCBCX7Ywc0sffczzhzfffHBTAu0YMkMd3Gj/4bffoGgByuDdcMMNKBsk rvjijDdOaB25mNNROcMMw4s3A+jhRiqRbBILH+PwwY4NDnw9giFNQFEUB4FyUAib YfDjxRej1M4EE6ecAsTua/TuOxBr7H7KKPwUEk0ohw5DQzwM8NAoGDPo0YcbyGhO DjKRyDMHEg6cYIBOJFxCFwVQXECXEi6kkYYUySSjvhTwx9++FOsnkxQIduSfv/su EKAKWMhawXNKQIA4iOEXMfCZz4L0g3UogBMh0EANVjUYD7hgCejRBV0usQSNIeZn 4SBCOB5zC2D87BB/CEcPAMOLIyBCBQGIThxg4YtYIAMXfEBDJnyQA2fEgBm+kMAF /z4BLrqoYQfKoAswyPWXevlCGTUwIQAAcQEcPKYuwADEYKC4ghXWRRSIKEI2zlAB YZCgGIbwBRGmNYUG+GALGfDGK+jSAV1M4gL4yoQxLuMLXKjLF33IAn/y5Q9jFCgR gzGEBvJjjEQMUhbkggU1FuALNFwDA734xx7OIoxejMEIPIDAHX4QggHMkS8iaBYK diGAVgrACZrBQS92sQRArJINFVvCLibmj11IQxqyCGYFAsALJzjBD35ARC9kgCEZ WSEFKvjHIipgMifgzBfzUEcGWmALutADAMBoRC8C8IBiCAMFKKCYMNgggMJQjGTo PFgxTHaylK1MES1zWRFgJkwzGaXgnyv4iDU6AYMMbKELjWiEDKRBhhWswBEOZQUr XkBRikriohfdg0ahwdFnJOGjukhEIthA0pKyYRcoTekuSqqLZ7zAA4zoSEAAADs= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=multiquote_off.gif Content-Type: image/gif; name=multiquote_off.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/multiquote_off.gif Content-Transfer-Encoding: Base64 R0lGODlhGQAWAPcAAIWThrm8urjBuzdiQmeYZFRSU2OrXr7Av56xnWiQZHalckpK SktSTPn6+1pnWubr6NDV0YCjftbW15TKj6+2sM7W0ens62+karjovcjKycbRyfb7 +/T19LfBumSUYHGqbLW4tqitqunq68PNxcXGxcLIxIaohGWOY2udZsrTzePo5cbO yLW9t4KlgGy2Zmy4ZvHy8i4uLnG1aubo53Cta8rr0StZPM3Y0PX6+wAAAPLy8pec mUBvR+jo6YWngmJiYtHY0s7U0HGnaRMUFMXKyMDLwUh9Tb7EwbvFvv3//hscG9/j 4tzh3tXj2tXd2dLZ1WWXYS9aPrTLtqSppgsLCzQ3NmCTXSMjI/////j8/Nfd2pTG j9bc2M7Rz////tnc29/h4PL09NHb0sbXybvAvcHEwtXf2rfZuFl4WLf3veLp5v/+ /ovXhVqOV8jVzO719LS/uIaOiK/DsO3w8H6jfKK3o9nd3IOvgLTSt3+af2uWaLzG v3eqcYG4esjPy8vQzrPRtbXTts7V0dDh1ePu6dfc1+/y8VlYWRkXF322eKCkobjL t7nUuvz6+6fqqL/WwvXx8v38/Mzh0PP09fz8/WN6Y6awp660sMbPybnfu5W8kc/U 0dX33pylntHY1IzBh1ZbWHOebW+iaY6dj7jEufb4+ImEiJfIk5u/maHKn8rZzODi 4W2DbYOIg+H16YmLif38/drh3bO+tPT++Onx7/79/evy8O3z8n+ie7TdtbvNvOT6 7L7HwYyfi4fQgWptavr6+maxYfj5+b7hwvr6+bPMtbbNtcbJyYC3e2+panCVbtrc 2l9oX3LBb0FEQoO4fqbToqHbntDX0srSyrvPvsDVwnmceMzQ0IGZgcfNysHPw42T jsTSyCUnJykoKZKxkd7l4pG8jn++eWidY5axlsjQysrRzLLQtG+bbKyvrdPa1MzV 0NXZ1tLc09ve3WKoXXW6b0NzSd/l4TY/OmCQXmybaKS9o8ny0V9fX/L08/H09Dpn Q3OlbWenYWqoZfX6+yH5BAEAAP8ALAAAAAAZABYAAAj/AP/9u7SsC4kDBwKAKPMF wpcjim5tyJJlg8CL/0Jg2chxYwEqPzZqYUeFCogNODBewtJqx7YdcbAUyEETEZYu NGmms3iRCJYQIaZUYJEhJ80AB4zmyIIRCRYRYHrMgYElhtEfhZSqSfnv04taHTfm Q5RjSI4CrirloEIzlS+BL4IJW2OuQ4lyHdQt0bcqhylJjjDMqpIjU7NHhFwYyBdp U7Yj0o6pKGLrVQ5Iqtik2ZVDCQYXqAbJMPDAyx8u14KUAGIHS44rWIDA4zQqB4Jo 7+5Uk/FODBYkK4L4IcIEy4IcOrDM2MIoh7N74vwpKEajny4smATI6vAkCYMcGTgi /3hdY0IiGugCCfFnDwuljt5ySMAiDAuJHFXK90H2Qc85Ucl8gwUwFjygwgOgkBFL B+5gIYEDw+RyyjOJ8JMAICh8gAsWKcDhyRNMJOEEFxvV10443bCyBR8onIBHhqFg YcEIe2iwzhLSQMCCAFNstEgOAEBzgRUnSIGCEPV4EUYKntyggRYriDAJLMYd8ksO FBijiQcnjDHOBQQQU8oNTpjhhiC8ULXRcUZ5o4AyTYwjihUcCMMNOIY0EBZH+ORA CjMMEGANLQSg0IYKeyaKyBBnKEAAD+T8AwUURkyT6EaNzDBCHfM44MEA+0RBzT8R GGGDHB1xIE8RvaAxQBQ27CYDBT3x8GDrGwI1IYUlPQTQCQDY5NFCBD6YYIIPw9IR QQsmaPNPQAA7 ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=quickreply.gif Content-Type: image/gif; name=quickreply.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/quickreply.gif Content-Transfer-Encoding: Base64 R0lGODlhGQAWAPf/AHuUgml5asXTzKKmpYB8f2yzbVVNUZahmDhbTlt+YcXLyOO8 k12EZUJtUq61r6eIeK+4sJSblq+yt42pk0hjU+7t7snPzdzi4ompjsunjNLY1nGu b2SsZmWYZuXm5ztjUIG7fnSEdcXMyc7U0ouLi/7TqrzCv8XIx87O1d3e3uzEm8vS z6eKiLWVg4GLg/39/bi4ueLl5luVXsHGxHq6eHacfL7FwfT19WOAZLzDwFqCXtbZ 2XS7dObo6GmeaeLj4rK2tll6XI6fjlmLXtrd3c7Ozvr6+ruajMqpl3N8duvt7lF7 WXyhgmuTckt6VkVyVO/w8YqEhoGkhm2ibHGpcNLZ2G6qbdXW1amqrWObZcPKx8DI xaesq2KMZH22e3iffj9qUVKDWmqgaqKfn4PFgXSHfdXV3IWniZOXlc/T04WAhGOY ZG6lbfj4+fP09fHy8+Lj5H+3fXatc8vR0MPJyL2/v/////7+/sfPzV2RYPT0/nuy eWyia/Pz/c/W1KSop+Dg6f79/5GZmXpwdpaSlcDAyHaWfunp8urq9Ozs9vv7+3+4 fIx6gGOQZGGWZNnc5m6hbW+ibeXq7mGiYuO/of7//v7////+/+7Go/PLp6W3rKG6 pp+BdMHGwm2icLCMcMrV0b+cftDU1KGfpOjp6WmrZ+vr7IKShICfhYuWjOrv87+g hFWJW4aoi3ONc6a8rbbJvPDw+vb3+MjLypuzoMjNy7yagsuwnXqKfWiLcXaYdubm 79HQ0K2vs7vEwJOOj7/Ax5mRk62wr7m7vry7u5V6b7+/x6qclKybmtKumbe6u7W6 tu/u8OPj7OPm52KKamCYYmacZ66QfHmwd3y4eoC+fvn6/MWjimZgYs2ojHisdXyz eo6bkKqqqPLz86qtrrCxs5OwmLKztLe0tNXc28DBwJmbm9Gwnt23mnCjb/Dw8PDx 8vHz8WBXXHardHWsdF53YcfKzpGSl/j4+sOfhMGekcbGztG0pa3AsmWSZtnZ4oGE id3d5vL082+gb/X1/yH5BAEAAP8ALAAAAAAZABYAQAj/AP/tEgdH1KwTJ+rAUCZO GLg6w/jp+dfHTC97+hBtKgBthJ1ZaeiIMKFghh1SgzBRQnIkRDoyPDjUoCWGjw47 blZoAEUIzYAedoIGDdJhTZ4hTnL9SyTIjik4HqAwq3CjjSKhuNplUHGtBad9xs5Q iRTCjixnHqqk0fLLBYly6l640hYnjpdtbBL8a/IEQaqgFXhdWcYtAAUEiD+AacAY zAdV/5oNsIOGywBhf4RqBhYLhQF6C0J9inKhgAw787TMEDHCxhYbc7YQIcHiVpIE XTpM4vAKw4ZoB+zM8KWlVooLRIixKHEOWYBGcqpVo2HlGQY+6XDYibFihR8/wXxy /8nxzU6nfO+oUOGTJ4GAaNF0aAj6YtyAIhU0BxWyxMkTxxP8AwgWdnhjhyV23KFf UChQZIYB0hwzSiH/HEKgMMKYs8IAEcxwgAlCSRCPARkssIo0xcjzjyenCVXJHYrc sM46PbzRBjZHqJCNLQ8kwMojsJjGzg0KWGCDAuXEkEYtInTDSAnoZNCCLjTEhEE4 BWQBgR0W7KDBHAqMAIQSUSCRSTL1JNEINWTQUEoTrWzgwyl2vBCUggUycs8YxFyR gDuLgACCF1YwcAYbkGhXxRYj4KHBCQT8kYIi/dhxgD977DHNO9EkMAEfU9ykBB5V kKOFGhHMwswlQbmhwxR8+FewRhgM4OODGDpAYU0VzpCiRjkp2KkZDkMMEYYTDRgi iSOOLOFAUD+MUcQPRgQViAXcwNPYBx8ggM8/egigSQREROBCGWUAoC4qUjDBxBdf 1ACvFAL8ExAAOw== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=avatar261281_4.gif Content-Type: image/gif; name=avatar261281_4.gif Content-Location: http://forum.qip.ru/customavatars/avatar261281_4.gif Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1 c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcH CQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04 MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAUABQAwEiAAIRAQMRAf/E AB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQE AAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBka JSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SF hoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY 2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgME BQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKB CBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNU VVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/a AAwDAQACEQMRAD8A8ndmDt8x6nvSb3/vN+dD/wCsb60YrmOoN7/3m/Oje399vzpR T442kcKELk9FA6mgBgZv7x/OgMx53E/jWlHp5aQwyQyQTrjdHLGUkAPcZ4Ye1Lca ZKixsyjc5KkjgZFAijDeS2UguYzkxfOVJ4YDkj8eldZ8Q9Kt9N8SxzabG0Vhf2cV 3CuT8qsOn4Vz+naFf65eJp1jCZriV1j2ZxgMcE+wAyc+1eyfEbw7Bd+HEntULvpQ W0DE5ZocBck/UZ/GrjG8RN6nhwL/AN5vzqSIv5qfM33h3PrSKAQCPSpYl/ep/vCs 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 5lUSQtGRjDyREfhkVi2+peh//9k= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=im_icq.gif Content-Type: image/gif; name=im_icq.gif Content-Location: http://forum.qip.ru/qipstyle/misc/im_icq.gif Content-Transfer-Encoding: Base64 R0lGODlhEQARAPfkAABDAARcJwBNABFUIABkGAI+AgAzAMvR2YyilQA/AN/i8NXZ 5gJBBBObHxVeKwA3ANjc6GvgcQlLF+Hi8X77gf//gd3h7RZmJLzFyewcg5YEVSGf ORZJIg+HFymNS3vyfhVhNEq6W/gPTjWiNyaVXytQLN3g7tMpgyddKSUbD0ugkMPL 0TGcW0O6fdc1VUKsQC6YLkSjRkOYgwl2Gh11ORd0MU3BZ4f9i0OgfjCWVFMzMzWi OI2wlgRVCG3hcQZdDi9mQC+yhYimnBdrOUy7SR5dIiaeOpeqqF6JLWzsbDSkQtzf 7GeQe0J2RDOSNC+PKCGIJyqAKjGBX13eX13SYEqKL1DDaTF8IRFJFD2pZJ2bIo4G VzKoa7XBw0KqbgtHDjqJPQdFCv/7e///TwtPDGLYYE96Vz9cSf9hmVZ+Yy6cPShB F1XQVgpSEGbhbc4ALWrxdhJzGNzP3gBkF//yVQBCAMvR2qTGrwBOANbZ5hFfKt/h 8L3HygBWHC+jNRdrKUq9S7cKSCxsMLDDvQZ9CnfxfI7/jwRXAT0PBErNSUa/dtye sC51YK3JuBFqFEaicnmTgv9KeWZ2KxBuGBR6QRKLGXvufk/KVTWkb2WYa0vFS+MA IABaAFDcaSCMMqwALTOmZ0icjLjExu3Aaf8xhmvkeQtVMjqDeDlrRS2ZSCGjIY3/ kC6dNliNXQBUAABIAP+6JgBOAR5PINnc6QuDG7HAvNTY4wlyPhJgH0nLTx+MHg9j Iv/5VXRuJQ92Qcais0BhE/AQPhOCFKBJa///ajwWCyKQOFyIYy2oNnaRjlavYoyj ljQgDQ9FFHHochh6J9PBJhqEOEt7HjhHMMAARUC2QzefeH2phDuabDqiOSVpSBZ+ ODNuOBFdDgB3ACaiJiKdLBRuTeDi8HPVcuHk8wAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAOQALAAAAAARABEAAAj/AMkJFDjoWB5yFloJwjCw IblGqgg1mwVjCjI8yxwuIHctiRUQBTRFsAEKSEMwnMLI0pXl1JdqrFJZSzbwTiIl NSS8esaoCBs1HvSgaIKAXIxCXmRIGXAoHI1OLHY9KQNOwIFMlbCFUoEjgDQtVbYR ceZG0a0uCmIRoEQiyCM6Y2Ah8eToh4MjAk0wQ1QsRa8KxMRIqsPgQYk95Ca4CPbm E7VA0HiNGgcH0AhhAJYsioSG1AkN02YAu3LhxipLVGilkbNJRIYtaxpE6+OnBxYf hkpxYULu1zAd3TrE+dMm244EZL5t8AVhoLJcUCbhMvDigzEOkMzwaeiEQogcQ85E HrnUQptDgTy8GcFkSlwtV3OEnBcoihsqWwJX2HEYEAA7 ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=im_jabber.gif Content-Type: image/gif; name=im_jabber.gif Content-Location: http://forum.qip.ru/images/misc/im_jabber.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAPcAAAAAAM4AANYhIdYxMdY5Od45Od5KSt5SUt5aWt5jY+djY+dr a+dzc+d7e+eEhOeMjO+MjO+lpe+tre+1tfe1tfe9vffGxvfOzvfW1vfe3v/OWv/e e//ehP/ejP/elP/e3v/npf/n5//vtf/vvf/31v/33v/35//39///9/////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// /////////////////yH5BAEAAAAALAAAAAAQABAAAAiNAAEIBJDhQQIECyIMXCgQ QwABCRgsICDAAkOBFw6k2LjxwgAMF0+c4Mgxw4GLJFMuuMAwJUkJDVpuLJEyo0wQ HTho4CghgUwPJUhsGHligMWWJE6IAJHiBAIGFwFMGBkiRQgCMaM6QDAyBYIKUQU2 kMCggQWfYaUeYPBggoO0AAhMuDAhg0K4BhtMiBoQADs= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=avatar279211_2.gif Content-Type: image/gif; name=avatar279211_2.gif Content-Location: http://forum.qip.ru/customavatars/avatar279211_2.gif Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1 c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcH CQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04 MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAUABQAwEiAAIRAQMRAf/E AB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQE AAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBka JSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SF hoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY 2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgME BQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKB CBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNU VVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/a AAwDAQACEQMRAD8A9/ooooAK5zxd4y0/whYpLchp7uY7ba0jPzyt/QZI59+9XvEe txeHNBu9Wmhkmjtk3GOPG5uQABnjvXk+ieI7bUNe8SePNWtmkGmRwx2VpncYy+QO emcgc9txNAHUQR/EzXgLprvT/D8Dcpb+V5sgGP4s9/y+lJcJ8TdAU3K3On+IIF5a AReVJj2xj+v0rzDV/HPiTW52kuNUnt4z0t7RzEij04OT9Sat6F8SPEOgTh5buXUb MY8y3uX3EqP7rnkH8xQB7T4S8Yad4w05riy3xTw4W4t5PvRMf5jg4Pt2roa8W8We IrHwv8QtM8TaVDK6Xum/ab2FQEE0T/dI5+/8pJB/uj1New2N0l9ZQXSBlSaNZFDd QGAIz780AWKKKKACiiigDkPigcfDrWP+uQ/9DWvG9FP/ABbzxn/11sf/AEM19C6t pNnremzaffxCa1mXbJGc4I/Cufj+G/h230HUtItrZ4YNQC+c4kZn3L9w5YnoeQOl AHzrupsjfun+hrrtX+GPivSZ2SKy/tOEH5Z7Ugbh7oTlT+f1q1oHwn8QazOv9qRH SrH/AJaNIQZWHcKoJwfc9PQ9KBmb8QzxoX/YtW3/ALUr6B8Pf8i7pv8A16Q/+gLW RrHw68M64bb7dp4YWtuLWIJI6YiHRTgjIHPX1NdJbW8dpbR28KhYo1CIo6BQMAfk KBE1FFFABRRUNzdQWdrLc3MqQwRKXkkc4CgdSTQAtzcwWdrLc3MyQwRKXkkc4VQO pJr5+8a/E7UfEV29vpFxPY6SuVHlsUkuP9piOQPRfz9qnxA+IU/jG6+yWm+HRYWy kZ4a4PZ3Hp6L+J9uL3UDHbV9/wDvo0hRT1z+Zpu6jdQB6D4C+JV14auRZatNNdaP JgbnYu9r7r3K+q9uo7g/QUM0VxBHPBIkkUihkdDlWB5BBHUV8ebq7r4efEWXwjOL C/3y6JK2SBy1qx6so7qe6/iO4IB9GUVHBPFcwRzwSJLDIodHQ5VlPIIPcVJQIhur qCytZbq6mSGCJS8kjnCqo6kmvnD4hfEOfxldfZLQPDosLZSM8NcMOjuOw9F/E+3q vxmtb26+HV19kRnSKaKW5VRkmJTlj9AcE+wNfN8bGaSOOBWmllIWOOIb2cnoFA5J oAmG5nVI0aSR2CoiDLOx6ADuTV7WtKu9A1WbTL8It1CqNIqNuC7lDYz6jNeweBvC Wk+AhHqvie9tF1ucBYYWkX/RweNq5PzOc4JH0HqeW8f634d0/wAb6nNbaJDrGru6 efJqDlre2KoF2JGv3m4ySTxQM85Dg9CDTXnji/1kiL/vMBXRDxVpVw4/tLwLoUyj HzWbyWrgZ9sg10Nr428JR2qpp2jyeG7kA/v4tPhvv1bB4+nOaAOD02N9X1CGwsCk 91O2yONXGWPpUWTllZSrKSrKwwVI6gjsa9W0jxBbzarZTz+J/DOtpDOsifbrH+z7 mEj+KNgCuR6Hg+ora8f+A7bxfA2v+HJLdtUVczwxOGS6H1HAf0PfofWgDivh18Rp fB84sNQ3zaJK2SBy1qx6so7qe6/iO4P0ZBPFcwRzwSJLDIodJEbKsp5BBHUV8Ymd AH3nYUJDq/BUjqCD0NfTXwjtby0+G+mx3qSIWMkkSSdREzkpx2GDn8aBHcVz8+g6 Vo0V3qWkaJYQ6iUYrJFbqjMfTcBkZPWugpGUMpUjIPWgD4ytdUnGsWuvXWby+juY 7qRpeWdlYMV56dMY7V1PibwxqF3qV3r+hW8+r6LqMz3UdxaoZWiLHLRyKMsGBOK9 X8SfBbRdb1CW+tbifT7iVi0hgxtcnuVIIz7jFJovwU0jSJTOmqaqJ2GGkiu2hLf9 +9v9aAPniSZYZDFNmKQHBSVSjZ+hxT91fXx0C0mthb3he8iAxtucSAj33A5/Gub1 D4SeDr8k/wBkwwMTktBmP/0EgUAfMhwwwwBHoaIC1pMs9pJJbTKcrJAxRlPqCK9y v/gFprg/2fq99bHtv2zD8jg/+PVmWXwCuTdj+0dd32oPK29v5bP9WLNt/AGgZ1nw 3Fn4z8OWuta7o+n3OqRM0f2uS1QvJtYgPnHX5R+Oa9JqjpOk2mi6bDYWUSRW8KhU RRgACr1Aj//Z ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=viewpost.gif Content-Type: image/gif; name=viewpost.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/viewpost.gif Content-Transfer-Encoding: Base64 R0lGODlhDAAMAPcAAP7+/k96W05zWpWZnk57XLrX0UhrV6/tra/urbjsuY6TmYzf ik99XLnsvKbPr527sMft2FaCYWR2dbLRx3nGfojgg3vTeqDym4zjg3bUeFeDYpzh mnrbe3+Xkofvg2rBcWW2bq66wILefqvvqH/mgcru3n3aenzEfszb3Xe9eXW7eYuk naHPpkhoVVhkaH6GjGSBcpuhppGko5ajprnYzcDa1sXM1aPipbrW0HjWePn7/Xzg fKrQtL3kyoCdj6XHtLPPxEVmVHvafaGsspSZnk10Wa7msHzAfnvYfDlbULrsv8DH z4K4h2J7csnt27DusP3+/qbxoD1nVs7w5pKbob/I0FBtXpn0lIPcgKzLvbvCyne4 e5TBm/P2+YOMkZm3qqriq5rrlJ3DqMPM046WnKTGtk97W1iGYrPQxpngm5y8rJHk j5evqXfGecfj3m2GfluuaZDzis/U3Ju7q7rsvL3GzZSwpLLguKLmoJSfo3jTeHPR dGmLd27McoDjfKjQscDryarPtqTFtPj6/YmQlQAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACwAAAAADAAMAAAIoQBRlHnwRc2PQDz+OGABxE0BGV7yzKBR wgmEKRhqTOgQAwAALXfoJABUAUcPMW8IeVwCBkEDLGiUGOECg4jHEBsOmMjyZAQe JlYGQAEw5kYOQVEuhDkiQMEgAHLS7JlzZc2JM2R0AKgjIk4fOwu2RHjRBUAVC348 fFiRQgMVjzba6MmwA4QPFXxcSGhCAYkQDiTgDEnSIoiBIgHMEGAghU1AADs= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=avatar174746_4.gif Content-Type: image/gif; name=avatar174746_4.gif Content-Location: http://forum.qip.ru/customavatars/avatar174746_4.gif Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1 c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcH CQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04 MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgASQBQAwEiAAIRAQMRAf/E AB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQE AAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBka JSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SF hoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY 2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgME BQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKB CBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNU VVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/a AAwDAQACEQMRAD8A8Mth8p/Ko3UrJx2NTRYAcdgaWZP3yf7WKAJZx59iFYYdeRVJ QFUE4Fb+pQiJYnVcbxjAHOa73wn4LTR4Y77UYwdRb5gCA3kd8Dtu9W9eBx1APLdM vDYajHPyUB2yJ/eU9Rjv6/UCusVrOQbNy3MB5Ty2BdAfQ9R9DxW38Q7T7fpRuGXd dWboRK33vKY7SufTcUIHbJx1NeYSxyQyQudyMy7ww45BIyD+FAHYXOjyLbm6gb7T bA8yIuHj9nWqseFdzgDcuAR0PNdFpFzPcaPb61YkGcMYLlD0LqASCO4IIP4kdqs3 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 J75/lTW/1Z+oobt9BQBDt2vikPWl/jpp+9QB/9k= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=avatar213223_2.gif Content-Type: image/gif; name=avatar213223_2.gif Content-Location: http://forum.qip.ru/customavatars/avatar213223_2.gif Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEAYABgAAD/4QBmRXhpZgAASUkqAAgAAAAEABoBBQABAAAA PgAAABsBBQABAAAARgAAACgBAwABAAAAAgAAADEBAgAQAAAATgAAAAAAAABgAAAA AQAAAGAAAAABAAAAUGFpbnQuTkVUIHYzLjIwAP/bAEMAAgEBAQEBAgEBAQICAgIC BAMCAgICBQQEAwQGBQYGBgUGBgYHCQgGBwkHBgYICwgJCgoKCgoGCAsMCwoMCQoK Cv/bAEMBAgICAgICBQMDBQoHBgcKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCv/AABEIAFAAUAMBIgACEQEDEQH/xAAfAAAB BQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0B AgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygp KjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImK kpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj 5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJ Cgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGh scEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZ WmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1 tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEA AhEDEQA/APyT8RWOmx+KbjRdA8Uy36NePHaSokqG4XeQrhGAYFuDtIyM4r1Twj+x t+0Re2ba3ffD/WtL05bRrqXVNcDWNpFAM5kaacqgHHrX3/8ADr4d/s4HSLy+vPhZ LotzaSotsYY4rqeGQAnDx7FdcoNyk+hPIBI4n4reHtI1LwtPqGt/GbVZbLw7eLfa dps3h/JkuPMQKixylhJJhjtG3gkYwea/LaniNWr11Rp0eRdXK7vfty/qfsmH8OqE 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 eRh8POvg3J2jNedz/9k= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=zip.gif Content-Type: image/gif; name=zip.gif Content-Location: http://forum.qip.ru/images/attach/zip.gif Content-Transfer-Encoding: Base64 R0lGODlhDwAQAOZzAPEZAYvK+SNfsPzUMfr1keTNg/T//4TD812l65a53/vnl/vd ZNOpHvrrs/3ZR/ziffvzzsfs/f3VOVyr9tSqIdWmFv//xHe09InJ94HA8mGz/7J7 I5C235vP9aptDfrprf/9pLTP9ojD88jY9nGc03W38M+hEHCv7mas7fvwvXu88bzl +/r2k6x0Hf/6kNm8L63b+biEKCFbrTt6xP//r/zkhdm/LPfvgv/7mv7TOHKx5qtt Df79mfr1kHa38NSpHv//udm/Kv/4hpCz3vrjj/zZWPn25d6+O/PkbdKgB3Wx5Pze bfjuyrR8DyhltnK7/26x7jqA0NWlC/vedNq6Ndm3KVam9NWmEJS332i3/9SpIPro oUmH0YKx3/bNLNu5MziZ89q0KtiuKP3aUZjC9Zi539SnG1uZ1yxqu9KmFNSjCNm3 MXi+/8+hDt61AbJ9DmGo6wRLsCdpx////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAHMALAAAAAAPABAAAAe4gHOCgwcZKiVQKHCCBW2O BXAGESswHSI+XHNtAJxtcp+gURNncSZhVUE2L2tfVEdNc11KcRQ8FkA0IDguQkhv cxwHcT8sRkwfRFNFOW6/CQFxDAQQDQoPCw4DzXPP0dPV19nbWNBaPSlbNUtjEl7b ZRhxaTdiZhVXUmpJ20M6cTEbdnhoAQoUiRMI4gwSFCmLhids2CCYsXAQHDROBAiQ obCiRziLPFqMCBJkx4psRoQgc8EKmDiBAAA7 ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=avatar285753_1.gif Content-Type: image/gif; name=avatar285753_1.gif Content-Location: http://forum.qip.ru/customavatars/avatar285753_1.gif Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1 c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcH CQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04 MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAUABQAwEiAAIRAQMRAf/E AB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQE AAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBka JSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SF hoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY 2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgME BQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKB CBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNU VVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/a AAwDAQACEQMRAD8AyD7AU0ketObAz/jUM8wht5JiCRGhcj1wM14KV3Y/SG1FXZm6 vrcWmoUQCS5xwh6D3Ncnd61f3nEl04X+4h2r+lV55ZZ5WllJaRzuYnuarthMFiB9 TXsUcPCC8z5DGZhVrSaTtHsWUgnntpLhSWjiYByTwuec0Q393b5EN1NGO4VyB+Wa gS7kjiMaXLKjn5lD8H8KaFPUDP0rblT3OP2trOLdzqtM8TkqIr2MuRgCVOp+o/wr o7O8tL0Zt5hJjlhjBH4V5mCynjirNvdS286ypI0br0ZeormqYOEtVoz0cPnFaHuz 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 7HB4KOGTUep//9k= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=icon7.gif Content-Type: image/gif; name=icon7.gif Content-Location: http://forum.qip.ru/images/icons/icon7.gif Content-Transfer-Encoding: Base64 R0lGODlhFAAYAOYCAEA0EP/mIP/////iIPraHPreHO7OGPbWHPLOGO7y8nllPGlV IOa+FKGZfea6FOrGGOrCFKGVeW1VCObm4t7e2tahDM6ZCOK2EN6uEPLWHNLOxtbS ypGFYWVQHJlxBNbWzr6RCNqlDKWBDF1IFHlpQJ11CNquENra0vLSGHVlONKyFGFM GLaNDG1QCIllBHFdMGlICLqJCO7SHMKlFNq2FKWdha6NEJl9EKWZgaWJEJGFZZFx DK59BKF9CI1tCHVhNM6qFN6yELKREKqFDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/h1CdWlsdCB3aXRoIEdJ RiBNb3ZpZSBHZWFyIDQuMAAh/iFEZXNpZ24gYnkgQWl3YW4gKGFpd2FuQHlhbmRl eC5ydSkAIfkEAcgARAAsAAAAABQAGAAAB/6ARIKDhIWGh4QAiIaKgo2LhYqSj5CO AJSLCR81JCsrJDgbCYsTDRI5KgYGQCISDROHJyk3MgSXtgAMOyknhRQLMwQDAAIC xMYQLAsUgwk6QsLEl9PGDj0co0QaEhkDAdLT0g8mEhqCETbC38XG7AAGFyURggo0 BQH409+XBQgOIAoELXhwD5/Bg/0cWFggqAMEdQcNDiAAz0IHeioOeAMQMcCwBxgA nhuCQB1HiQAQMAjhYZ42CQxQmAyHAgIGCy3MEUnAQQQEAwcICD1wwACEIBU8YBv0 iwWDBwYQIDDwgAGGCjw6MCP04YcPExccOLiAIYQFFy8+HJoQoUUJEBYVKsTwAONV pg0NFIwYoaCBqEqABQUCACH5BAEPAEQALAYABwAJAAYAAAcngEREBQVEBwaCRAMB AQMDBBlEjJONBAiUkwUHRACdAZ0AgpOSjESBACH5BAEUAEQALAYABwAJAAYAAAcd gEREAACDhYIAAgKJi4OLhISPj5CNiouWiISGhYEAIfkEAQ8ARAAsBgAHAAkABgAA ByeAREQFBUQHBoJEAwEBAwMEGUSMk40ECJSTBQdEAJ0BnQCCk5KMRIEAIfkEASwB RAAsBgAHAAkABgAABx2AREQAAIOFggACAomLg4uEhI+PkI2Ki5aIhIaFgQAh+QQF DwBEACwGAAcACQAGAAAHJ4BERAUFRAcGgkQDAQEDAwQZRIyTjQQIlJMFB0QAnQGd AIKTkoxEgQA7 ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=biggrin.gif Content-Type: image/gif; name=biggrin.gif Content-Location: http://forum.qip.ru/images/smilies/biggrin.gif Content-Transfer-Encoding: Base64 R0lGODlhFAAUANUDAEA0EP/mINLu/////+7y8vraHP/iIHllPKGZfaGVeWlVIG1V COa+FPreHJGFZebm4tahDN7e2tLOxs6ZCJ11CNbSyurCFI1pCGVQHKWBDO7OGNrW 0tKyFPbWHLaNDF1IFMalFHlpPG1QCKWZgdquEK6NEMKRCGFMGNbWzurGFKWJEPLO GHVlOHFdMO7SHOK2EK59BJl9EL6RCJltBLqJCGlICHVhNAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH+HUJ1aWx0IHdpdGggR0lGIE1vdmllIEdlYXIgNC4wACH+ IURlc2lnbiBieSBBaXdhbiAoYWl3YW5AeWFuZGV4LnJ1KQAh+QQJAAA3ACwAAAAA FAAUAAAG2cCbcEgsGokE1Ch0OoVGFcJR+EAsVByNBpRZIB7HDSvmKjQahY6GcWFt ihEFqGAwBO6GtMWjiAwJDiV0d4QBeSsMGQ5SNxILHQYAkoWSACkkCxJCCYIAhJ4B nnkALxQJQgccDYWsAQ2IJgdCCimVtreSEwpCGBYAAwMCv8HCxAATGKgcw8XGxjKy NwkqzMzFAsIzp40LDL/N2N/HIpo3gBm+4MUAEBSLQ3Ee3taSEDAYfkQbNhckuBMX WqA48iCBCAomIECgQaHGlynmKiA48OHDAQRRIGo0EgQAOw== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=vbulletin_multi_quote.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_multi_quote.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_multi_quote.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIElu aXRpYWxpemVzIHRoZSBNUSBpbWFnZXMsIHNvIHRoZXkgYXJlIGNsaWNrYWJsZS4g QWRkaXRpb25hbGx5LCBpdCByZWRvZXMKKiB0aGUgY29sb3Jpbmcgb2YgdGhlIGlt YWdlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBjb29raWUuIFRo aXMKKiBpcyBoZWxwZnVsIGlmIGEgdXNlciB1c2VzIHRoZSBiYWNrIGJ1dHRvbi4K KgoqIEBwYXJhbQlvYmplY3QJVGhlIG9iamVjdCB0byBzZWFyY2ggd2l0aGluIGZv ciBNUSBpbWFnZXMuCiovCmZ1bmN0aW9uIG1xX2luaXQob2JqKQp7Cgl2YXIgY29v a2llX2lkcyA9IGZldGNoX2Nvb2tpZSgndmJ1bGxldGluX211bHRpcXVvdGUnKTsK CWlmIChjb29raWVfaWRzICE9IG51bGwgJiYgY29va2llX2lkcyAhPSAnJykKCXsK CQljb29raWVfaWRzID0gY29va2llX2lkcy5zcGxpdCgnLCcpOwoJfQoJZWxzZQoJ ewoJCWNvb2tpZV9pZHMgPSBuZXcgQXJyYXkoKTsKCX0KCgl2YXIgcG9zdGlkOwoK CXZhciBpbWFnZXMgPSBmZXRjaF90YWdzKG9iaiwgJ2ltZycpOwoJZm9yICh2YXIg aSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyBpKyspCgl7CgkJaWYgKGltYWdlc1tp XS5pZCAmJiBpbWFnZXNbaV0uaWQuc3Vic3RyKDAsIDMpID09ICdtcV8nKQoJCXsK CQkJcG9zdGlkID0gaW1hZ2VzW2ldLmlkLnN1YnN0cigzKTsKCQkJaW1hZ2VzW2ld Lm9uY2xpY2sgPSBmdW5jdGlvbihlKSB7IHJldHVybiBtcV9jbGljayh0aGlzLmlk LnN1YnN0cigzKSk7IH07CgkJCWNoYW5nZV9tcV9pbWFnZShwb3N0aWQsIChQSFAu aW5fYXJyYXkocG9zdGlkLCBjb29raWVfaWRzKSA+IC0xID8gdHJ1ZSA6IGZhbHNl KSk7CgkJfQoJfQp9CgovKioKKiBDYWxsYmFjayBmdW5jdGlvbiB0byB3aGVuIGFu IE1RIGltYWdlIGlzIGNsaWNrZWQuIE1vZGlmaWVzIHRoZSBjb29raWUgYW5kCiog dXBkYXRlcyB0aGUgbG9vayBvZiB0aGUgaW1hZ2UgdG8gc3VpdC4KKgoqIEBwYXJh bQlpbnRlZ2VyCVBvc3QgSUQgb2YgdGhlIGltYWdlIGNsaWNrZWQuCioKKiBAcmV0 dXJuCWZhbHNlCUFsd2F5cyByZXR1cm5zIGZhbHNlIHRvIGVuc3VyZSBhbnkgaHJl ZiBldmVudCBkb2VzIG5vdCBydW4KKi8KZnVuY3Rpb24gbXFfY2xpY2socG9zdGlk KQp7Cgl2YXIgY29va2llX2lkcyA9IGZldGNoX2Nvb2tpZSgndmJ1bGxldGluX211 bHRpcXVvdGUnKTsKCgl2YXIgY29va2llX3RleHQgPSBuZXcgQXJyYXkoKTsKCXZh ciBpc19zZWxlY3RlZCA9IGZhbHNlOwoKCWlmIChjb29raWVfaWRzICE9IG51bGwg JiYgY29va2llX2lkcyAhPSAnJykKCXsKCQljb29raWVfaWRzID0gY29va2llX2lk cy5zcGxpdCgnLCcpOwoKCQlmb3IgKGkgaW4gY29va2llX2lkcykKCQl7CgkJCWlm IChjb29raWVfaWRzW2ldID09IHBvc3RpZCkKCQkJewoJCQkJaXNfc2VsZWN0ZWQg PSB0cnVlOwoJCQl9CgkJCWVsc2UgaWYgKGNvb2tpZV9pZHNbaV0pCgkJCXsKCQkJ CWNvb2tpZV90ZXh0LnB1c2goY29va2llX2lkc1tpXSk7CgkJCX0KCQl9Cgl9CgoJ Ly8gZmxpcCB0aGUgaW1hZ2UgdG8gdGhlIG90aGVyIG9wdGlvbgoJY2hhbmdlX21x X2ltYWdlKHBvc3RpZCwgKGlzX3NlbGVjdGVkID8gZmFsc2UgOiB0cnVlKSk7CgoJ Ly8gaWYgd2UgZG9uJ3QgaGF2ZSB0aGUgcG9zdGlkIGluIHRoZSBjb29raWUsIGFk ZCBpdAoJaWYgKCFpc19zZWxlY3RlZCkKCXsKCQljb29raWVfdGV4dC5wdXNoKHBv c3RpZCk7CgkJaWYgKHR5cGVvZiBtcWxpbWl0ICE9ICd1bmRlZmluZWQnICYmIG1x bGltaXQgPiAwKQoJCXsKCQkJZm9yICh2YXIgaSA9IDA7IGkgPCAoY29va2llX3Rl eHQubGVuZ3RoIC0gbXFsaW1pdCk7IGkrKykKCQkJewoJCQkJdmFyIHJlbW92YWwg PSBjb29raWVfdGV4dC5zaGlmdCgpOwoJCQkJY2hhbmdlX21xX2ltYWdlKHJlbW92 YWwsIGZhbHNlKTsKCQkJfQoJCX0KCX0KCglzZXRfY29va2llKCd2YnVsbGV0aW5f bXVsdGlxdW90ZScsIGNvb2tpZV90ZXh0LmpvaW4oJywnKSk7CgoJcmV0dXJuIGZh bHNlOwp9CgovKioKKiBDaGFuZ2VzIHRoZSBNUSBpbWFnZSB0byBzaG93IGFzIGJl aW5nIHNlbGVjdGVkIG9yIHVuc2VsZWN0ZWQKKgoqIEBwYXJhbQlpbnRlZ2VyCUlE IG9mIHRoZSBwb3N0IHdob3NlIE1RIGJ1dHRvbiBpcyBjaGFuZ2luZwoqIEBwYXJh bQlib29sZWFuCVdoZXRoZXIgdG8gbWFrZSB0aGUgaW1hZ2Ugc2VsZWN0ZWQgb3Ig bm90CiovCmZ1bmN0aW9uIGNoYW5nZV9tcV9pbWFnZShwb3N0aWQsIHRvX3NlbGVj dGVkKQp7Cgl2YXIgbXFfb2JqID0gZmV0Y2hfb2JqZWN0KCdtcV8nICsgcG9zdGlk KTsKCWlmIChtcV9vYmopCgl7CgkJaWYgKHRvX3NlbGVjdGVkID09IHRydWUpCgkJ ewoJCQltcV9vYmouc3JjID0gbXFfb2JqLnNyYy5yZXBsYWNlKC9cL211bHRpcXVv dGVfb2ZmXC4oW2EtekEtWjAtOV0rKSQvLCAnL211bHRpcXVvdGVfb24uJDEnKTsK CQl9CgkJZWxzZQoJCXsKCQkJbXFfb2JqLnNyYyA9IG1xX29iai5zcmMucmVwbGFj ZSgvXC9tdWx0aXF1b3RlX29uXC4oW2EtekEtWjAtOV0rKSQvLCAnL211bHRpcXVv dGVfb2ZmLiQxJyk7CgkJfQoJfQp9CgptcV9pbml0KGZldGNoX29iamVjdCgncG9z dHMnKSk7CgovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qXAp8fCAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIwp8fCAjIERvd25sb2FkZWQ6IDA1OjUyLCBUdWUgSnVuIDI0dGgg MjAwOAp8fCAjIENWUzogJFJDU2ZpbGUkIC0gJFJldmlzaW9uOiAxNTE3NSAkCnx8 ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjClwqPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSov ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=vbulletin_textedit.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_textedit.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_textedit.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjExIFBhdGNoIExldmVsIDEKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8vICMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIHZCX1RleHRfRWRpdG9yCgovKioK KiB2QnVsbGV0aW4gRWRpdG9yIENsYXNzCioKKiBBY3RpdmF0ZXMgYW55IEhUTUwg Y29udHJvbHMgZm9yIGFuIGVkaXRvcgoqCiogQHBhcmFtCXN0cmluZwlVbmlxdWUg a2V5IGZvciB0aGlzIGVkaXRvcgoqIEBwYXJhbQlib29sZWFuCUluaXRpYWxpc2Ug dG8gV1lTSVdZRyBtb2RlPwoqIEBwYXJhbQlzdHJpbmcJRm9ydW1pZCAvIENhbGVu ZGFyIGV0Yy4KKiBAcGFyYW0JYm9vbGVhbglQYXJzZSBzbWlsaWVzPwoqIEBwYXJh bQlzdHJpbmcJKE9wdGlvbmFsKSBJbml0aWFsIHRleHQgZm9yIHRoZSBlZGl0b3IK KiBAcGFyYW0Jc3RyaW5nCShPcHRpb25hbCkgRXh0cmEgYXJndW1lbnRzIHRvIHBh c3Mgd2hlbiBzd2l0Y2hpbmcgZWRpdG9yIG1vZGVzCiovCmZ1bmN0aW9uIHZCX1Rl eHRfRWRpdG9yKGVkaXRvcmlkLCBtb2RlLCBwYXJzZXR5cGUsIHBhcnNlc21pbGll cywgaW5pdGlhbF90ZXh0LCBhamF4X2V4dHJhKQp7CgkvKioKCSogTWlzY2VsbGFu ZW91cyB2YXJpYWJsZXMKCSoKCSogQHZhcglzdHJpbmcJVW5pcXVlIEVkaXRvciBJ RAoJKiBAdmFyCWJvb2xlYW4JV1lTSVdZRyBtb2RlCgkqIEB2YXIJYm9vbGVhbglI YXZlIHdlIGluaXRpYWxpemVkIHRoZSBlZGl0b3I/CgkqIEB2YXIJbWl4ZWQJUGFz c2VkIHBhcnNldHlwZSAoY29ycmVzcG9uZHMgdG8gYmJjb2RlcGFyc2UgZm9ydW1p ZCkKCSogQHZhcglib29sZWFuCVBhc3NlZCBwYXJzZXNtaWxpZXMgb3B0aW9uCgkq IEB2YXIJYm9vbGVhbglDYW4gd2UgdXNlIHZCbWVudSBwb3B1cHM/CgkqIEB2YXIJ b2JqZWN0CVRoZSBlbGVtZW50IGNvbnRhaW5pbmcgY29udHJvbHMKCSogQHZhcglv YmplY3QJVGhlIHRleHRhcmVhIG9iamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFs IHRleHQKCSogQHZhcglhcnJheQlBcnJheSBjb250YWluaW5nIGFsbCBidXR0b24g b2JqZWN0cwoJKiBAdmFyCWFycmF5CUFycmF5IGNvbnRhaW5pbmcgYWxsIHBvcHVw IG9iamVjdHMKCSogQHZhcglvYmplY3QJQ3VycmVudCBwcm9tcHQoKSBlbXVsYXRp b24gcG9wdXAKCSogQHZhcglzdHJpbmcJU3RhdGUgb2YgdGhlIGZvbnQgY29udGV4 dCBjb250cm9sCgkqIEB2YXIJc3RyaW5nCVN0YXRlIG9mIHRoZSBzaXplIGNvbnRl eHQgY29udHJvbAoJKiBAdmFyCXN0cmluZwlTdGF0ZSBvZiB0aGUgY29sb3IgY29u dGV4dCBjb250cm9sCgkqIEB2YXIJc3RyaW5nCVN0cmluZyB0byBjb250YWluIHRo ZSBmYWtlICdjbGlwYm9hcmQnCgkqIEB2YXIJYm9vbGVhbglJcyB0aGUgZWRpdG9y ICdkaXNhYmxlZCc/IChxdWljayByZXBseSB1c2UpCgkqIEB2YXIJdkJfSGlzdG9y eQlIaXN0b3J5IG1hbmFnZXIgZm9yIHVuZG8vcmVkbyBzeXN0ZW1zCgkqIEB2YXIg IGludGVnZXIgSXMgdGhlIGVkaXRvciBtb2RlIHRyeWluZyB0byBiZSBjaGFuZ2Vk PwoJKi8KCXRoaXMuZWRpdG9yaWQgPSBlZGl0b3JpZDsKCXRoaXMud3lzaXd5Z19t b2RlID0gcGFyc2VJbnQobW9kZSwgMTApID8gMSA6IDA7Cgl0aGlzLmluaXRpYWxp emVkID0gZmFsc2U7Cgl0aGlzLnBhcnNldHlwZSA9ICh0eXBlb2YgcGFyc2V0eXBl ID09ICd1bmRlZmluZWQnID8gJ25vbmZvcnVtJyA6IHBhcnNldHlwZSk7Cgl0aGlz LmFqYXhfZXh0cmEgPSAodHlwZW9mIHBhcnNldHlwZSA9PSAndW5kZWZpbmVkJyA/ ICcnIDogYWpheF9leHRyYSk7Cgl0aGlzLnBhcnNlc21pbGllcyA9ICh0eXBlb2Yg cGFyc2VzbWlsaWVzID09ICd1bmRlZmluZWQnID8gMSA6IHBhcnNlc21pbGllcyk7 Cgl0aGlzLnBvcHVwbW9kZSA9ICh0eXBlb2YgdkJtZW51ID09ICd1bmRlZmluZWQn ID8gZmFsc2UgOiB0cnVlKTsKCXRoaXMuY29udHJvbGJhciA9IGZldGNoX29iamVj dCh0aGlzLmVkaXRvcmlkICsgJ19jb250cm9scycpOwoJdGhpcy50ZXh0b2JqID0g ZmV0Y2hfb2JqZWN0KHRoaXMuZWRpdG9yaWQgKyAnX3RleHRhcmVhJyk7Cgl0aGlz LmJ1dHRvbnMgPSBuZXcgQXJyYXkoKTsKCXRoaXMucG9wdXBzID0gbmV3IEFycmF5 KCk7Cgl0aGlzLnByb21wdF9wb3B1cCA9IG51bGw7Cgl0aGlzLmZvbnRzdGF0ZSA9 IG51bGw7Cgl0aGlzLnNpemVzdGF0ZSA9IG51bGw7Cgl0aGlzLmNvbG9yc3RhdGUg PSBudWxsOwoJdGhpcy5jbGlwYm9hcmQgPSAnJzsKCXRoaXMuZGlzYWJsZWQgPSBm YWxzZTsKCXRoaXMuaGlzdG9yeSA9IG5ldyB2Ql9IaXN0b3J5KCk7Cgl0aGlzLmlu Zmx1eCA9IDA7CgoJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCS8v IHZCX1RleHRfRWRpdG9yIG1ldGhvZHMKCgkvKioKCSogRWRpdG9yIGluaXRpYWxp emF0aW9uIHdyYXBwZXIKCSovCgl0aGlzLmluaXQgPSBmdW5jdGlvbigpCgl7CgkJ aWYgKHRoaXMuaW5pdGlhbGl6ZWQpCgkJewoJCQlyZXR1cm47CgkJfQoKCQl0aGlz LnRleHRvYmouZGlzYWJsZWQgPSBmYWxzZTsKCgkJaWYgKHRoaXMudGVtcGlmcmFt ZSkKCQl7CgkJCXRoaXMudGVtcGlmcmFtZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxk KHRoaXMudGVtcGlmcmFtZSk7CgkJfQoKCQl0aGlzLnNldF9lZGl0b3JfY29udGVu dHMoaW5pdGlhbF90ZXh0KTsKCgkJdGhpcy5zZXRfZWRpdG9yX2Z1bmN0aW9ucygp OwoKCQl0aGlzLmluaXRfY29udHJvbHMoKTsKCgkJdGhpcy5pbml0X3NtaWxpZXMo ZmV0Y2hfb2JqZWN0KHRoaXMuZWRpdG9yaWQgKyAnX3NtaWxpZWJveCcpKTsKCgkJ aWYgKHR5cGVvZiBzbWlsaWVfd2luZG93ICE9ICd1bmRlZmluZWQnICYmICFzbWls aWVfd2luZG93LmNsb3NlZCkKCQl7CgkJCXRoaXMuaW5pdF9zbWlsaWVzKHNtaWxp ZV93aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NtaWxpZXRhYmxlJykp OwoJCX0KCgkJdGhpcy5jYXB0Y2hhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo ImltYWdlc3RhbXAiKTsKCQlpZiAodGhpcy5jYXB0Y2hhICE9IG51bGwpCgkJewoJ CQl0aGlzLmNhcHRjaGEuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsIDEpOwoJCX0K CgkJdGhpcy5pbml0aWFsaXplZCA9IHRydWU7Cgl9OwoKCS8qKgoJKiBDaGVjayBp ZiB3ZSBuZWVkIHRvIHJlZm9jdXMgdGhlIGVkaXRvciB3aW5kb3cKCSovCgl0aGlz LmNoZWNrX2ZvY3VzID0gZnVuY3Rpb24oKQoJewoJCWlmICghdGhpcy5lZGl0d2lu Lmhhc2ZvY3VzKQoJCXsKCQkJdGhpcy5lZGl0d2luLmZvY3VzKCk7CgkJCWlmIChp c19vcGVyYSkKCQkJewoJCQkJLy8gc2VlIGh0dHA6Ly93d3cudmJ1bGxldGluLmNv bS9mb3J1bS9idWdzMzUucGhwP2RvPXZpZXcmYnVnaWQ9Njg3CgkJCQl0aGlzLmVk aXR3aW4uZm9jdXMoKTsKCQkJfQoJCX0KCX0KCgkvKioKCSogSW5pdCBidXR0b24g Y29udHJvbHMgZm9yIHRoZSBlZGl0b3IKCSovCgl0aGlzLmluaXRfY29udHJvbHMg PSBmdW5jdGlvbigpCgl7CgkJdmFyIGNvbnRyb2xzID0gbmV3IEFycmF5KCk7CgoJ CWlmICh0aGlzLmNvbnRyb2xiYXIgPT0gbnVsbCkKCQl7CgkJCXJldHVybjsKCQl9 CgoJCXZhciBidXR0b25zID0gZmV0Y2hfdGFncyh0aGlzLmNvbnRyb2xiYXIsICdk aXYnKTsKCQlmb3IgKHZhciBpID0gMDsgaSA8IGJ1dHRvbnMubGVuZ3RoOyBpKysp CgkJewoJCQlpZiAoYnV0dG9uc1tpXS5jbGFzc05hbWUgPT0gJ2ltYWdlYnV0dG9u JyAmJiBidXR0b25zW2ldLmlkKQoJCQl7CgkJCQljb250cm9sc1tjb250cm9scy5s ZW5ndGhdID0gYnV0dG9uc1tpXS5pZDsKCQkJfQoJCX0KCQlmb3IgKHZhciBpID0g MDsgaSA8IGNvbnRyb2xzLmxlbmd0aDsgaSsrKQoJCXsKCQkJdmFyIGNvbnRyb2wg PSBmZXRjaF9vYmplY3QoY29udHJvbHNbaV0pOwoKCQkJaWYgKGNvbnRyb2wuaWQu aW5kZXhPZih0aGlzLmVkaXRvcmlkICsgJ19jbWRfJykgIT0gLTEpCgkJCXsKCQkJ CXRoaXMuaW5pdF9jb21tYW5kX2J1dHRvbihjb250cm9sKTsKCQkJfQoJCQllbHNl IGlmIChjb250cm9sLmlkLmluZGV4T2YodGhpcy5lZGl0b3JpZCArICdfcG9wdXBf JykgIT0gLTEpCgkJCXsKCQkJCXRoaXMuaW5pdF9wb3B1cF9idXR0b24oY29udHJv bCk7CgkJCX0KCQl9CgoJCXNldF91bnNlbGVjdGFibGUodGhpcy5jb250cm9sYmFy KTsKCX07CgoJLyoqCgkqIEluaXQgU21pbGllcwoJKi8KCXRoaXMuaW5pdF9zbWls aWVzID0gZnVuY3Rpb24oc21pbGllX2NvbnRhaW5lcikKCXsKCQlpZiAoc21pbGll X2NvbnRhaW5lciAhPSBudWxsKQoJCXsKCQkJdmFyIHNtaWxpZXMgPSBmZXRjaF90 YWdzKHNtaWxpZV9jb250YWluZXIsICdpbWcnKTsKCQkJZm9yICh2YXIgaSA9IDA7 IGkgPCBzbWlsaWVzLmxlbmd0aDsgaSsrKQoJCQl7CgkJCQlpZiAoc21pbGllc1tp XS5pZCAmJiBzbWlsaWVzW2ldLmlkLmluZGV4T2YoJ19zbWlsaWVfJykgIT0gZmFs c2UpCgkJCQl7CgkJCQkJc21pbGllc1tpXS5zdHlsZS5jdXJzb3IgPSBwb2ludGVy X2N1cnNvcjsKCQkJCQlzbWlsaWVzW2ldLmVkaXRvcmlkID0gdGhpcy5lZGl0b3Jp ZDsKCQkJCQlzbWlsaWVzW2ldLm9uY2xpY2sgPSB2Ql9UZXh0X0VkaXRvcl9FdmVu dHMucHJvdG90eXBlLnNtaWxpZV9vbmNsaWNrOwoJCQkJCXNtaWxpZXNbaV0udW5z ZWxlY3RhYmxlID0gJ29uJzsKCQkJCX0KCQkJfQoJCX0KCX0KCgkvKioKCSogSW5p dCBjb21tYW5kIGJ1dHRvbiAoYiwgaSwgdSBldGMuKQoJKgoJKiBAcGFyYW0Jb2Jq ZWN0CUN1cnJlbnQgSFRNTCBidXR0b24gbm9kZQoJKi8KCXRoaXMuaW5pdF9jb21t YW5kX2J1dHRvbiA9IGZ1bmN0aW9uKG9iaikKCXsKCQlvYmouY21kID0gb2JqLmlk LnN1YnN0cihvYmouaWQuaW5kZXhPZignX2NtZF8nKSArIDUpOwoJCW9iai5lZGl0 b3JpZCA9IHRoaXMuZWRpdG9yaWQ7CgkJdGhpcy5idXR0b25zW29iai5jbWRdID0g b2JqOwoKCQlpZiAob2JqLmNtZCA9PSAnc3dpdGNobW9kZScpCgkJewoJCQlpZiAo QUpBWF9Db21wYXRpYmxlKQoJCQl7CgkJCQlvYmouc3RhdGUgPSB0aGlzLnd5c2l3 eWdfbW9kZSA/IHRydWUgOiBmYWxzZTsKCQkJCXRoaXMuc2V0X2NvbnRyb2xfc3R5 bGUob2JqLCAnYnV0dG9uJywgdGhpcy53eXNpd3lnX21vZGUgPyAnc2VsZWN0ZWQn IDogJ25vcm1hbCcpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJb2JqLnBhcmVudE5v ZGUucmVtb3ZlQ2hpbGQob2JqKTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQlvYmou c3RhdGUgPSBmYWxzZTsKCQkJb2JqLm1vZGUgPSAnbm9ybWFsJzsKCQl9CgoJCS8v IGV2ZW50IGhhbmRsZXJzCgkJb2JqLm9uY2xpY2sgPSBvYmoub25tb3VzZWRvd24g PSBvYmoub25tb3VzZW92ZXIgPSBvYmoub25tb3VzZW91dCA9IHZCX1RleHRfRWRp dG9yX0V2ZW50cy5wcm90b3R5cGUuY29tbWFuZF9idXR0b25fb25tb3VzZWV2ZW50 OwoJfQoKCS8qKgoJKiBJbml0IHBvcHVwIGJ1dHRvbiAoZm9yZWNvbG9yLCBmb250 bmFtZSBldGMuKQoJKgoJKiBAcGFyYW0Jb2JqZWN0CUN1cnJlbnQgSFRNTCBidXR0 b24gbm9kZQoJKi8KCXRoaXMuaW5pdF9wb3B1cF9idXR0b24gPSBmdW5jdGlvbihv YmopCgl7CgkJb2JqLmNtZCA9IG9iai5pZC5zdWJzdHIob2JqLmlkLmluZGV4T2Yo J19wb3B1cF8nKSArIDcpOwoKCQlpZiAodGhpcy5wb3B1cG1vZGUpCgkJewoJCQkv LyByZWdpc3RlciBwb3B1cCBtZW51IGNvbnRyb2wKCQkJdkJtZW51LnJlZ2lzdGVy KG9iai5pZCwgdHJ1ZSk7CgkJCXZCbWVudS5tZW51c1tvYmouaWRdLm9wZW5fc3Rl cHMgPSA1OwoKCQkJb2JqLmVkaXRvcmlkID0gdGhpcy5lZGl0b3JpZDsKCQkJb2Jq LnN0YXRlID0gZmFsc2U7CgkJCXRoaXMuYnV0dG9uc1tvYmouY21kXSA9IG9iajsK CgkJCWlmIChvYmouY21kID09ICdmb250bmFtZScpCgkJCXsKCQkJCXRoaXMuZm9u dG91dCA9IGZldGNoX29iamVjdCh0aGlzLmVkaXRvcmlkICsgJ19mb250X291dCcp OwoJCQkJdGhpcy5mb250b3V0LmlubmVySFRNTCA9IG9iai50aXRsZTsKCQkJCXRo aXMuZm9udG9wdGlvbnMgPSB7JycgOiB0aGlzLmZvbnRvdXR9OwoKCQkJCWZvciAo dmFyIG9wdGlvbiBpbiBmb250b3B0aW9ucykKCQkJCXsKCQkJCQl2YXIgZGl2ID0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJCQkJZGl2LmlkID0gdGhp cy5lZGl0b3JpZCArICdfZm9udG9wdGlvbl8nICsgZm9udG9wdGlvbnNbb3B0aW9u XTsKCQkJCQlkaXYuc3R5bGUud2lkdGggPSB0aGlzLmZvbnRvdXQuc3R5bGUud2lk dGg7CgkJCQkJZGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgkJCQkJZGl2Lmlu bmVySFRNTCA9IGZvbnRvcHRpb25zW29wdGlvbl07CgkJCQkJdGhpcy5mb250b3B0 aW9uc1tmb250b3B0aW9uc1tvcHRpb25dXSA9IHRoaXMuZm9udG91dC5wYXJlbnRO b2RlLmFwcGVuZENoaWxkKGRpdik7CgkJCQl9CgkJCX0KCQkJZWxzZSBpZiAob2Jq LmNtZCA9PSAnZm9udHNpemUnKQoJCQl7CgkJCQl0aGlzLnNpemVvdXQgPSBmZXRj aF9vYmplY3QodGhpcy5lZGl0b3JpZCArICdfc2l6ZV9vdXQnKTsKCQkJCXRoaXMu c2l6ZW91dC5pbm5lckhUTUwgPSBvYmoudGl0bGU7CgkJCQl0aGlzLnNpemVvcHRp b25zID0geycnIDogdGhpcy5zaXplb3V0fTsKCgkJCQlmb3IgKHZhciBvcHRpb24g aW4gc2l6ZW9wdGlvbnMpCgkJCQl7CgkJCQkJdmFyIGRpdiA9IGRvY3VtZW50LmNy ZWF0ZUVsZW1lbnQoJ2RpdicpOwoJCQkJCWRpdi5pZCA9IHRoaXMuZWRpdG9yaWQg KyAnX3NpemVvcHRpb25fJyArIHNpemVvcHRpb25zW29wdGlvbl07CgkJCQkJZGl2 LnN0eWxlLndpZHRoID0gdGhpcy5zaXplb3V0LnN0eWxlLndpZHRoOwoJCQkJCWRp di5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJCQkJCWRpdi5pbm5lckhUTUwgPSBz aXplb3B0aW9uc1tvcHRpb25dOwoJCQkJCXRoaXMuc2l6ZW9wdGlvbnNbc2l6ZW9w dGlvbnNbb3B0aW9uXV0gPSB0aGlzLnNpemVvdXQucGFyZW50Tm9kZS5hcHBlbmRD aGlsZChkaXYpOwoJCQkJfQoJCQl9CgoJCQkvLyBleHRlbmQgb25tb3VzZW92ZXIK CQkJb2JqLl9vbm1vdXNlb3ZlciA9IG9iai5vbm1vdXNlb3ZlcjsKCQkJLy8gZXh0 ZW5kIG9uY2xpY2sKCQkJb2JqLl9vbmNsaWNrID0gb2JqLm9uY2xpY2s7CgoJCQkv LyBldmVudCBoYW5kbGVycwoJCQlvYmoub25tb3VzZW92ZXIgPSBvYmoub25tb3Vz ZW91dCA9IG9iai5vbmNsaWNrID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3Rv dHlwZS5wb3B1cF9idXR0b25fb25tb3VzZWV2ZW50OwoKCQkJLy8gZXh0ZW5kIG1l bnUgc2hvdwoJCQl2Qm1lbnUubWVudXNbb2JqLmlkXS5fc2hvdyA9IHZCbWVudS5t ZW51c1tvYmouaWRdLnNob3c7CgkJCXZCbWVudS5tZW51c1tvYmouaWRdLnNob3cg PSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLnBvcHVwX2J1dHRvbl9z aG93OwoJCX0KCQllbHNlCgkJewoJCQl0aGlzLmJ1aWxkX3NlbGVjdChvYmopOwoJ CX0KCX0KCgkvKioKCSogUmVwbGFjZSB0aGUgcG9wdXAgY29udHJvbHMgd2l0aCA8 c2VsZWN0PiBtZW51cyBmb3IgcnViYmlzaCBicm93c2VycwoJKgoJKiBAcGFyYW0J b2JqZWN0CVRoZSBwb3B1cCBjb250cm9sIGVsZW1lbnQKCSovCgl0aGlzLmJ1aWxk X3NlbGVjdCA9IGZ1bmN0aW9uKG9iaikKCXsKCQl2YXIgc2VsID0gZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7CgkJc2VsLmlkID0gdGhpcy5lZGl0b3Jp ZCArICdfc2VsZWN0XycgKyBvYmouY21kOwoJCXNlbC5lZGl0b3JpZCA9IHRoaXMu ZWRpdG9yaWQ7CgkJc2VsLmNtZCA9IG9iai5jbWQ7CgoJCXZhciBvcHQgPSBkb2N1 bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKCQlvcHQudmFsdWUgPSAnJzsK CQlvcHQudGV4dCA9IG9iai50aXRsZTsKCQlzZWwuYWRkKG9wdCwgaXNfaWUgPyBz ZWwub3B0aW9ucy5sZW5ndGggOiBudWxsKTsKCgkJdmFyIG9wdCA9IGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwoJCW9wdC52YWx1ZSA9ICcnOwoJCW9w dC50ZXh0ID0gJyAnOwoJCXNlbC5hZGQob3B0LCBpc19pZSA/IHNlbC5vcHRpb25z Lmxlbmd0aCA6IG51bGwpOwoKCQlzd2l0Y2ggKG9iai5jbWQpCgkJewoJCQljYXNl ICdmb250bmFtZSc6CgkJCXsKCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgZm9udG9w dGlvbnMubGVuZ3RoOyBpKyspCgkJCQl7CgkJCQkJdmFyIG9wdCA9IGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwoJCQkJCW9wdC52YWx1ZSA9IGZvbnRv cHRpb25zW2ldOwoJCQkJCW9wdC50ZXh0ID0gKGZvbnRvcHRpb25zW2ldLmxlbmd0 aCA+IDEwID8gKGZvbnRvcHRpb25zW2ldLnN1YnN0cigwLCAxMCkgKyAnLi4uJykg OiBmb250b3B0aW9uc1tpXSk7CgkJCQkJc2VsLmFkZChvcHQsIGlzX2llID8gc2Vs Lm9wdGlvbnMubGVuZ3RoIDogbnVsbCk7CgkJCQl9CgoJCQkJc2VsLm9uY2hhbmdl ID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5mb3JtYXR0aW5nX3Nl bGVjdF9vbmNoYW5nZTsKCQkJCWJyZWFrOwoJCQl9CgoJCQljYXNlICdmb250c2l6 ZSc6CgkJCXsKCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZW9wdGlvbnMubGVu Z3RoOyBpKyspCgkJCQl7CgkJCQkJdmFyIG9wdCA9IGRvY3VtZW50LmNyZWF0ZUVs ZW1lbnQoJ29wdGlvbicpOwoJCQkJCW9wdC52YWx1ZSA9IHNpemVvcHRpb25zW2ld OwoJCQkJCW9wdC50ZXh0ID0gc2l6ZW9wdGlvbnNbaV07CgkJCQkJc2VsLmFkZChv cHQsIGlzX2llID8gc2VsLm9wdGlvbnMubGVuZ3RoIDogbnVsbCk7CgkJCQl9CgoJ CQkJc2VsLm9uY2hhbmdlID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlw ZS5mb3JtYXR0aW5nX3NlbGVjdF9vbmNoYW5nZTsKCQkJCWJyZWFrOwoJCQl9CgoJ CQljYXNlICdmb3JlY29sb3InOgoJCQl7CgkJCQlmb3IgKHZhciBpIGluIGNvbG9y b3B0aW9ucykKCQkJCXsKCQkJCQl2YXIgb3B0ID0gZG9jdW1lbnQuY3JlYXRlRWxl bWVudCgnb3B0aW9uJyk7CgkJCQkJb3B0LnZhbHVlID0gY29sb3JvcHRpb25zW2ld OwoJCQkJCW9wdC50ZXh0ID0gUEhQLnRyaW0oKGNvbG9yb3B0aW9uc1tpXS5sZW5n dGggPiA1ID8gKGNvbG9yb3B0aW9uc1tpXS5zdWJzdHIoMCwgNSkgKyAnLi4uJykg OiBjb2xvcm9wdGlvbnNbaV0pLnJlcGxhY2UobmV3IFJlZ0V4cCgnKFtBLVpdKScs ICdnJyksICcgJDEnKSk7CgkJCQkJb3B0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9 IGk7CgkJCQkJc2VsLmFkZChvcHQsIGlzX2llID8gc2VsLm9wdGlvbnMubGVuZ3Ro IDogbnVsbCk7CgkJCQl9CgoJCQkJc2VsLm9uY2hhbmdlID0gdkJfVGV4dF9FZGl0 b3JfRXZlbnRzLnByb3RvdHlwZS5mb3JtYXR0aW5nX3NlbGVjdF9vbmNoYW5nZTsK CQkJCWJyZWFrOwoJCQl9CgoJCQljYXNlICdzbWlsaWUnOgoJCQl7CgkJCQlmb3Ig KHZhciBjYXQgaW4gc21pbGllb3B0aW9ucykKCQkJCXsKCQkJCQlmb3IgKHZhciBz bWlsaWVpZCBpbiBzbWlsaWVvcHRpb25zW2NhdF0pCgkJCQkJewoJCQkJCQlpZiAo c21pbGllaWQgIT0gJ21vcmUnKQoJCQkJCQl7CgkJCQkJCQl2YXIgb3B0ID0gZG9j dW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CgkJCQkJCQlvcHQudmFsdWUg PSBzbWlsaWVvcHRpb25zW2NhdF1bc21pbGllaWRdWzFdOwoJCQkJCQkJb3B0LnRl eHQgPSBzbWlsaWVvcHRpb25zW2NhdF1bc21pbGllaWRdWzFdOwoJCQkJCQkJb3B0 LnNtaWxpZWlkID0gc21pbGllaWQ7CgkJCQkJCQlvcHQuc21pbGllcGF0aCA9IHNt aWxpZW9wdGlvbnNbY2F0XVtzbWlsaWVpZF1bMF07CgkJCQkJCQlvcHQuc21pbGll dGl0bGUgPSBzbWlsaWVvcHRpb25zW2NhdF1bc21pbGllaWRdWzJdOwoJCQkJCQkJ c2VsLmFkZChvcHQsIGlzX2llID8gc2VsLm9wdGlvbnMubGVuZ3RoIDogbnVsbCk7 CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgoJCQkJc2VsLm9uY2hhbmdlID0gdkJfVGV4 dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5zbWlsaWVzZWxlY3Rfb25jaGFuZ2U7 CgkJCQlicmVhazsKCQkJfQoKCQkJY2FzZSAnYXR0YWNoJzoKCQkJewoJCQkJc2Vs Lm9ubW91c2VvdmVyID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5h dHRhY2hzZWxlY3Rfb25tb3VzZW92ZXI7CgkJCQlzZWwub25jaGFuZ2UgPSB2Ql9U ZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmF0dGFjaHNlbGVjdF9vbmNoYW5n ZTsKCQkJCWJyZWFrOwoJCQl9CgkJfQoKCQl3aGlsZSAob2JqLmhhc0NoaWxkTm9k ZXMoKSkKCQl7CgkJCW9iai5yZW1vdmVDaGlsZChvYmouZmlyc3RDaGlsZCk7CgkJ fQoKCQl0aGlzLmJ1dHRvbnNbb2JqLmNtZF0gPSBvYmouYXBwZW5kQ2hpbGQoc2Vs KTsKCX0KCgkvKioKCSogSW5pdCBtZW51IGNvbnRyb2xzIGZvciB0aGUgZWRpdG9y CgkqCgkqIEBwYXJhbQlvYmplY3QJSFRNTCBtZW51IG5vZGUKCSovCgl0aGlzLmlu aXRfcG9wdXBfbWVudSA9IGZ1bmN0aW9uKG9iaikKCXsKCQlpZiAodGhpcy5kaXNh YmxlZCkKCQl7CgkJCXJldHVybjsKCQl9CgoJCXN3aXRjaCAob2JqLmNtZCkKCQl7 CgkJCWNhc2UgJ2ZvbnRuYW1lJzoKCQkJewoJCQkJdmFyIG1lbnUgPSB0aGlzLmlu aXRfbWVudV9jb250YWluZXIoJ2ZvbnRuYW1lJywgJzIwMHB4JywgJzI1MHB4Jywg J2F1dG8nKTsKCQkJCXRoaXMuYnVpbGRfZm9udG5hbWVfcG9wdXAob2JqLCBtZW51 KTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2ZvbnRzaXplJzoKCQkJewoJCQkJ dmFyIG1lbnUgPSB0aGlzLmluaXRfbWVudV9jb250YWluZXIoJ2ZvbnRzaXplJywg J2F1dG8nLCAnYXV0bycsICd2aXNpYmxlJyk7CgkJCQl0aGlzLmJ1aWxkX2ZvbnRz aXplX3BvcHVwKG9iaiwgbWVudSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdm b3JlY29sb3InOgoJCQl7CgkJCQl2YXIgbWVudSA9IHRoaXMuaW5pdF9tZW51X2Nv bnRhaW5lcignZm9yZWNvbG9yJywgJ2F1dG8nLCAnYXV0bycsICd2aXNpYmxlJyk7 CgkJCQl0aGlzLmJ1aWxkX2ZvcmVjb2xvcl9wb3B1cChvYmosIG1lbnUpOwoJCQkJ YnJlYWs7CgkJCX0KCQkJY2FzZSAnc21pbGllJzoKCQkJewoJCQkJdmFyIG1lbnUg PSB0aGlzLmluaXRfbWVudV9jb250YWluZXIoJ3NtaWxpZScsICcxNzVweCcsICcy NTBweCcsICdhdXRvJyk7CgkJCQl0aGlzLmJ1aWxkX3NtaWxpZV9wb3B1cChvYmos IG1lbnUpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnYXR0YWNoJzoKCQkJewoJ CQkJaWYgKHR5cGVvZiB2Ql9BdHRhY2htZW50cyAhPSAndW5kZWZpbmVkJyAmJiB2 Ql9BdHRhY2htZW50cy5oYXNfYXR0YWNobWVudHMoKSkKCQkJCXsKCQkJCQl2YXIg bWVudSA9IHRoaXMuaW5pdF9tZW51X2NvbnRhaW5lcignYXR0YWNoJywgJ2F1dG8n LCAnYXV0bycsICd2aXNpYmxlJyk7CgkJCQkJdGhpcy5idWlsZF9hdHRhY2htZW50 c19wb3B1cChtZW51LCBvYmopOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXJl dHVybiBmZXRjaF9vYmplY3QoJ21hbmFnZV9hdHRhY2htZW50c19idXR0b24nKS5v bmNsaWNrKCk7CgkJCQl9CgkJCX0KCQl9CgoJCXRoaXMucG9wdXBzW29iai5jbWRd ID0gdGhpcy5jb250cm9sYmFyLmFwcGVuZENoaWxkKG1lbnUpOwoKCQlzZXRfdW5z ZWxlY3RhYmxlKG1lbnUpOwoJfTsKCgkvKioKCSogSW5pdCBNZW51IENvbnRhaW5l ciBESVYKCSoKCSogQHBhcmFtCXN0cmluZwlDb21tYW5kIHN0cmluZyAoZm9yZWNv bG9yLCBmb250bmFtZSBldGMuKQoJKiBAcGFyYW0Jc3RyaW5nCUNTUyB3aWR0aCBm b3IgdGhlIG1lbnUKCSogQHBhcmFtCXN0cmluZwlDU1MgaGVpZ2h0IGZvciB0aGUg bWVudQoJKiBAcGFyYW0Jc3RyaW5nCUNTUyBvdmVyZmxvdyBmb3IgdGhlIG1lbnUK CSoKCSogQHJldHVybglvYmplY3QJTmV3bHkgY3JlYXRlZCBtZW51IGVsZW1lbnQK CSovCgl0aGlzLmluaXRfbWVudV9jb250YWluZXIgPSBmdW5jdGlvbihjbWQsIHdp ZHRoLCBoZWlnaHQsIG92ZXJmbG93KQoJewoJCXZhciBtZW51ID0gZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgnZGl2Jyk7CgoJCW1lbnUuaWQgPSB0aGlzLmVkaXRvcmlk ICsgJ19wb3B1cF8nICsgY21kICsgJ19tZW51JzsKCQltZW51LmNsYXNzTmFtZSA9 ICd2Ym1lbnVfcG9wdXAnOwoJCW1lbnUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsK CQltZW51LnN0eWxlLmN1cnNvciA9ICdkZWZhdWx0JzsKCQltZW51LnN0eWxlLnBh ZGRpbmcgPSAnM3B4JzsKCQltZW51LnN0eWxlLndpZHRoID0gd2lkdGg7CgkJbWVu dS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7CgkJbWVudS5zdHlsZS5vdmVyZmxvdyA9 IG92ZXJmbG93OwoKCQlyZXR1cm4gbWVudTsKCX0KCgkvKioKCSogQnVpbGQgRm9u dCBOYW1lIFBvcHVwIENvbnRlbnRzCgkqCgkqIEBwYXJhbQlvYmplY3QJVGhlIGNv bnRyb2wgb2JqZWN0IGZvciB0aGUgbWVudQoJKiBAcGFyYW0Jb2JqZWN0CVRoZSBt ZW51IGNvbnRhaW5lciBvYmplY3QKCSovCgl0aGlzLmJ1aWxkX2ZvbnRuYW1lX3Bv cHVwID0gZnVuY3Rpb24ob2JqLCBtZW51KQoJewoJCWZvciAodmFyIG4gaW4gZm9u dG9wdGlvbnMpCgkJewoJCQl2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxl bWVudCgnZGl2Jyk7CgkJCW9wdGlvbi5pbm5lckhUTUwgPSAnPGZvbnQgZmFjZT0i JyArIGZvbnRvcHRpb25zW25dICsgJyI+JyArIGZvbnRvcHRpb25zW25dICsgJzwv Zm9udD4nOwoJCQlvcHRpb24uY2xhc3NOYW1lID0gJ29mb250JzsKCQkJb3B0aW9u LnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0JzsKCQkJb3B0aW9uLnRpdGxlID0gZm9u dG9wdGlvbnNbbl07CgkJCW9wdGlvbi5jbWQgPSBvYmouY21kOwoJCQlvcHRpb24u Y29udHJvbGtleSA9IG9iai5pZDsKCQkJb3B0aW9uLmVkaXRvcmlkID0gdGhpcy5l ZGl0b3JpZDsKCQkJb3B0aW9uLm9ubW91c2VvdmVyID0gb3B0aW9uLm9ubW91c2Vv dXQgPSBvcHRpb24ub25tb3VzZXVwID0gb3B0aW9uLm9ubW91c2Vkb3duID0gdkJf VGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29ubW91c2Vl dmVudDsKCQkJb3B0aW9uLm9uY2xpY2sgPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMu cHJvdG90eXBlLmZvcm1hdHRpbmdfb3B0aW9uX29uY2xpY2s7CgkJCW1lbnUuYXBw ZW5kQ2hpbGQob3B0aW9uKTsKCQl9Cgl9CgoJLyoqCgkqIEJ1aWxkIEZvbnQgU2l6 ZSBQb3B1cCBDb250ZW50cwoJKgoJKiBAcGFyYW0Jb2JqZWN0CVRoZSBjb250cm9s IG9iamVjdCBmb3IgdGhlIG1lbnUKCSogQHBhcmFtCW9iamVjdAlUaGUgbWVudSBj b250YWluZXIgb2JqZWN0CgkqLwoJdGhpcy5idWlsZF9mb250c2l6ZV9wb3B1cCA9 IGZ1bmN0aW9uKG9iaiwgbWVudSkKCXsKCQlmb3IgKHZhciBuIGluIHNpemVvcHRp b25zKQoJCXsKCQkJdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo J2RpdicpOwoJCQlvcHRpb24uaW5uZXJIVE1MID0gJzxmb250IHNpemU9IicgKyBz aXplb3B0aW9uc1tuXSArICciPicgKyBzaXplb3B0aW9uc1tuXSArICc8L2ZvbnQ+ JzsKCQkJb3B0aW9uLmNsYXNzTmFtZSA9ICdvc2l6ZSc7CgkJCW9wdGlvbi5zdHls ZS50ZXh0QWxpZ24gPSAnY2VudGVyJzsKCQkJb3B0aW9uLnRpdGxlID0gc2l6ZW9w dGlvbnNbbl07CgkJCW9wdGlvbi5jbWQgPSBvYmouY21kOwoJCQlvcHRpb24uY29u dHJvbGtleSA9IG9iai5pZDsKCQkJb3B0aW9uLmVkaXRvcmlkID0gdGhpcy5lZGl0 b3JpZDsKCQkJb3B0aW9uLm9ubW91c2VvdmVyID0gb3B0aW9uLm9ubW91c2VvdXQg PSBvcHRpb24ub25tb3VzZXVwID0gb3B0aW9uLm9ubW91c2Vkb3duID0gdkJfVGV4 dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29ubW91c2VldmVu dDsKCQkJb3B0aW9uLm9uY2xpY2sgPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJv dG90eXBlLmZvcm1hdHRpbmdfb3B0aW9uX29uY2xpY2s7CgkJCW1lbnUuYXBwZW5k Q2hpbGQob3B0aW9uKTsKCQl9Cgl9CgoJLyoqCgkqIEJ1aWxkIEZvcmVDb2xvciBQ b3B1cCBDb250ZW50cwoJKgoJKiBAcGFyYW0Jb2JqZWN0CVRoZSBjb250cm9sIG9i amVjdCBmb3IgdGhlIG1lbnUKCSogQHBhcmFtCW9iamVjdAlUaGUgbWVudSBjb250 YWluZXIgb2JqZWN0CgkqLwoJdGhpcy5idWlsZF9mb3JlY29sb3JfcG9wdXAgPSBm dW5jdGlvbihvYmosIG1lbnUpCgl7CgkJdmFyIGNvbG9yb3V0ID0gZmV0Y2hfb2Jq ZWN0KHRoaXMuZWRpdG9yaWQgKyAnX2NvbG9yX291dCcpOwoJCWNvbG9yb3V0LmVk aXRvcmlkID0gdGhpcy5lZGl0b3JpZDsKCQljb2xvcm91dC5vbmNsaWNrID0gdkJf VGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5jb2xvcm91dF9vbmNsaWNrOwoK CQl2YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpOwoJ CXRhYmxlLmNlbGxQYWRkaW5nID0gMDsKCQl0YWJsZS5jZWxsU3BhY2luZyA9IDA7 CgkJdGFibGUuYm9yZGVyID0gMDsKCgkJdmFyIGkgPSAwOwoJCWZvciAodmFyIGhl eCBpbiBjb2xvcm9wdGlvbnMpCgkJewoJCQlpZiAoaSAlIDggPT0gMCkKCQkJewoJ CQkJdmFyIHRyID0gdGFibGUuaW5zZXJ0Um93KC0xKTsKCQkJfQoJCQlpKys7CgoJ CQl2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJCWRp di5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcm9wdGlvbnNbaGV4XTsKCgkJ CXZhciBvcHRpb24gPSB0ci5pbnNlcnRDZWxsKC0xKTsKCQkJb3B0aW9uLnN0eWxl LnRleHRBbGlnbiA9ICdjZW50ZXInOwoJCQlvcHRpb24uY2xhc3NOYW1lID0gJ29j b2xvcic7CgkJCW9wdGlvbi5hcHBlbmRDaGlsZChkaXYpOwoJCQlvcHRpb24uY21k ID0gb2JqLmNtZDsKCQkJb3B0aW9uLmVkaXRvcmlkID0gdGhpcy5lZGl0b3JpZDsK CQkJb3B0aW9uLmNvbnRyb2xrZXkgPSBvYmouaWQ7CgkJCW9wdGlvbi5jb2xvcm5h bWUgPSBjb2xvcm9wdGlvbnNbaGV4XTsKCQkJb3B0aW9uLmlkID0gdGhpcy5lZGl0 b3JpZCArICdfY29sb3JfJyArIGNvbG9yb3B0aW9uc1toZXhdOwoJCQlvcHRpb24u b25tb3VzZW92ZXIgPSBvcHRpb24ub25tb3VzZW91dCA9IG9wdGlvbi5vbm1vdXNl dXAgPSBvcHRpb24ub25tb3VzZWRvd24gPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMu cHJvdG90eXBlLm1lbnVvcHRpb25fb25tb3VzZWV2ZW50OwoJCQlvcHRpb24ub25j bGljayA9IHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuY29sb3JvcHRp b25fb25jbGljazsKCQl9CgoJCW1lbnUuYXBwZW5kQ2hpbGQodGFibGUpOwoJfQoK CS8qKgoJKiBCdWlsZCBTbWlsaWUgUG9wdXAgQ29udGVudHMKCSoKCSogQHBhcmFt CW9iamVjdAlUaGUgY29udHJvbCBvYmplY3QgZm9yIHRoZSBtZW51CgkqIEBwYXJh bQlvYmplY3QJVGhlIG1lbnUgY29udGFpbmVyIG9iamVjdAoJKi8KCXRoaXMuYnVp bGRfc21pbGllX3BvcHVwID0gZnVuY3Rpb24ob2JqLCBtZW51KQoJewoJCWZvciAo dmFyIGNhdCBpbiBzbWlsaWVvcHRpb25zKQoJCXsKCQkJdmFyIGNhdGVnb3J5ID0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJCWNhdGVnb3J5LmNsYXNz TmFtZSA9ICd0aGVhZCc7CgkJCWNhdGVnb3J5LmlubmVySFRNTCA9IGNhdDsKCQkJ bWVudS5hcHBlbmRDaGlsZChjYXRlZ29yeSk7CgoJCQlmb3IgKHZhciBzbWlsaWVp ZCBpbiBzbWlsaWVvcHRpb25zW2NhdF0pCgkJCXsKCQkJCWlmIChzbWlsaWVpZCA9 PSAnbW9yZScpCgkJCQl7CgkJCQkJdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0 ZUVsZW1lbnQoJ2RpdicpOwoJCQkJCW9wdGlvbi5jbGFzc05hbWUgPSAndGhlYWQn OwoJCQkJCW9wdGlvbi5pbm5lckhUTUwgPSBzbWlsaWVvcHRpb25zW2NhdF1bc21p bGllaWRdOwoJCQkJCW9wdGlvbi5zdHlsZS5jdXJzb3IgPSBwb2ludGVyX2N1cnNv cjsKCQkJCQlvcHRpb24uZWRpdG9yaWQgPSB0aGlzLmVkaXRvcmlkOwoJCQkJCW9w dGlvbi5jb250cm9sa2V5ID0gb2JqLmlkOwoJCQkJCW9wdGlvbi5vbmNsaWNrID0g dkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5zbWlsaWVtb3JlX29uY2xp Y2s7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJdmFyIG9wdGlvbiA9IGRvY3Vt ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwoJCQkJCW9wdGlvbi5lZGl0b3JpZCA9 IHRoaXMuZWRpdG9yaWQ7CgkJCQkJb3B0aW9uLmNvbnRyb2xrZXkgPSBvYmouaWQ7 CgkJCQkJb3B0aW9uLnNtaWxpZWlkID0gc21pbGllaWQ7CgkJCQkJb3B0aW9uLnNt aWxpZXRleHQgPSBzbWlsaWVvcHRpb25zW2NhdF1bc21pbGllaWRdWzFdOwoJCQkJ CW9wdGlvbi5zbWlsaWV0aXRsZSA9IHNtaWxpZW9wdGlvbnNbY2F0XVtzbWlsaWVp ZF1bMl07CgoJCQkJCW9wdGlvbi5jbGFzc05hbWUgPSAnb3NtaWxpZSc7CgkJCQkJ b3B0aW9uLmlubmVySFRNTCA9ICc8aW1nIHNyYz0iJyArIHNtaWxpZW9wdGlvbnNb Y2F0XVtzbWlsaWVpZF1bMF0gKyAnIiBhbHQ9IicgKyBzbWlsaWVvcHRpb25zW2Nh dF1bc21pbGllaWRdWzJdICsgJyIgLz4gJyArIHNtaWxpZW9wdGlvbnNbY2F0XVtz bWlsaWVpZF1bMl07CgoJCQkJCW9wdGlvbi5vbm1vdXNlb3ZlciA9IG9wdGlvbi5v bm1vdXNlb3V0ID0gb3B0aW9uLm9ubW91c2Vkb3duID0gb3B0aW9uLm9ubW91c2V1 cCA9IHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9v bm1vdXNlZXZlbnQ7CgoJCQkJCW9wdGlvbi5vbmNsaWNrID0gdkJfVGV4dF9FZGl0 b3JfRXZlbnRzLnByb3RvdHlwZS5zbWlsaWVvcHRpb25fb25jbGljazsKCQkJCX0K CgkJCQltZW51LmFwcGVuZENoaWxkKG9wdGlvbik7CgkJCX0KCQl9Cgl9CgoJLyoq CgkqIEJ1aWxkIEF0dGFjaG1lbnRzIFBvcHVwCgkqCgkqIEBwYXJhbQlvYmplY3QJ VGhlIGNvbnRyb2wgb2JqZWN0IGZvciB0aGUgbWVudQoJKiBAcGFyYW0Jb2JqZWN0 CVRoZSBtZW51IGNvbnRhaW5lciBvYmplY3QKCSovCgl0aGlzLmJ1aWxkX2F0dGFj aG1lbnRzX3BvcHVwID0gZnVuY3Rpb24obWVudSwgb2JqKQoJewoJCWlmICh0aGlz LnBvcHVwbW9kZSkKCQl7CgkJCXdoaWxlIChtZW51Lmhhc0NoaWxkTm9kZXMoKSkK CQkJewoJCQkJbWVudS5yZW1vdmVDaGlsZChtZW51LmZpcnN0Q2hpbGQpOwoJCQl9 CgoJCQl2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJ CWRpdi5lZGl0b3JpZCA9IHRoaXMuZWRpdG9yaWQ7CgkJCWRpdi5jb250cm9sa2V5 ID0gb2JqLmlkOwoJCQlkaXYuY2xhc3NOYW1lID0gJ3RoZWFkJzsKCQkJZGl2LnN0 eWxlLmN1cnNvciA9IHBvaW50ZXJfY3Vyc29yOwoJCQlkaXYuaW5uZXJIVE1MID0g ZmV0Y2hfb2JqZWN0KCdtYW5hZ2VfYXR0YWNobWVudHNfYnV0dG9uJykudmFsdWU7 CgkJCWRpdi50aXRsZSA9IGZldGNoX29iamVjdCgnbWFuYWdlX2F0dGFjaG1lbnRz X2J1dHRvbicpLnRpdGxlOwoJCQlkaXYub25jbGljayA9IHZCX1RleHRfRWRpdG9y X0V2ZW50cy5wcm90b3R5cGUuYXR0YWNobWFuYWdlX29uY2xpY2s7CgoJCQltZW51 LmFwcGVuZENoaWxkKGRpdik7CgoJCQl2YXIgYXR0YWNoX2NvdW50ID0gMDsKCQkJ Zm9yICh2YXIgaWQgaW4gdkJfQXR0YWNobWVudHMuYXR0YWNobWVudHMpCgkJCXsK CQkJCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKCQkJ CWRpdi5lZGl0b3JpZCA9IHRoaXMuZWRpdG9yaWQ7CgkJCQlkaXYuY29udHJvbGtl eSA9IG9iai5pZDsKCQkJCWRpdi5jbGFzc05hbWUgPSAnb3NtaWxpZSc7CgkJCQlk aXYuYXR0YWNobWVudGlkID0gaWQ7CgkJCQlkaXYuaW5uZXJIVE1MID0gJzxpbWcg c3JjPSInICsgdkJfQXR0YWNobWVudHMuYXR0YWNobWVudHNbaWRdWydpbWdwYXRo J10gKyAnIiBhbHQ9IiIgLz4gJyArIHZCX0F0dGFjaG1lbnRzLmF0dGFjaG1lbnRz W2lkXVsnZmlsZW5hbWUnXTsKCQkJCWRpdi5vbm1vdXNlb3ZlciA9IGRpdi5vbm1v dXNlb3V0ID0gZGl2Lm9ubW91c2Vkb3duID0gZGl2Lm9ubW91c2V1cCA9IHZCX1Rl eHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9vbm1vdXNlZXZl bnQ7CgkJCQlkaXYub25jbGljayA9IHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90 b3R5cGUuYXR0YWNob3B0aW9uX29uY2xpY2s7CgoJCQkJbWVudS5hcHBlbmRDaGls ZChkaXYpOwoJCQkJYXR0YWNoX2NvdW50Kys7CgkJCX0KCQkJaWYgKGF0dGFjaF9j b3VudCA+IDEpCgkJCXsKCQkJCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVt ZW50KCdkaXYnKTsKCQkJCWRpdi5lZGl0b3JpZCA9IHRoaXMuZWRpdG9yaWQKCQkJ CWRpdi5jb250cm9sa2V5ID0gb2JqLmlkOwoJCQkJZGl2LmNsYXNzTmFtZSA9ICdv c21pbGllJzsKCQkJCWRpdi5zdHlsZS5mb250V2VpZ2h0ID0gJ2JvbGQnOwoJCQkJ ZGl2LnN0eWxlLnBhZGRpbmdMZWZ0ID0gJzI1cHgnOwoJCQkJZGl2LmlubmVySFRN TCA9IHZicGhyYXNlWydpbnNlcnRfYWxsJ107CgkJCQlkaXYub25tb3VzZW92ZXIg PSBkaXYub25tb3VzZW91dCA9IGRpdi5vbm1vdXNlZG93biA9IGRpdi5vbm1vdXNl dXAgPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLm1lbnVvcHRpb25f b25tb3VzZWV2ZW50OwoJCQkJZGl2Lm9uY2xpY2sgPSB2Ql9UZXh0X0VkaXRvcl9F dmVudHMucHJvdG90eXBlLmF0dGFjaGluc2VydGFsbF9vbmNsaWNrOwoKCQkJCW1l bnUuYXBwZW5kQ2hpbGQoZGl2KTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQl3aGls ZSAobWVudS5vcHRpb25zLmxlbmd0aCA+IDIpCgkJCXsKCQkJCW1lbnUucmVtb3Zl KG1lbnUub3B0aW9ucy5sZW5ndGggLSAxKTsKCQkJfQoKCQkJZm9yICh2YXIgaWQg aW4gdkJfQXR0YWNobWVudHMuYXR0YWNobWVudHMpCgkJCXsKCQkJCXZhciBvcHQg PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKCQkJCW9wdC52YWx1 ZSA9IGlkOwoJCQkJb3B0LnRleHQgPSB2Ql9BdHRhY2htZW50cy5hdHRhY2htZW50 c1tpZF1bJ2ZpbGVuYW1lJ107CgkJCQltZW51LmFkZChvcHQsIGlzX2llID8gbWVu dS5vcHRpb25zLmxlbmd0aCA6IG51bGwpOwoJCQl9CgkJfQoKCQlzZXRfdW5zZWxl Y3RhYmxlKG1lbnUpOwoJfQoKCS8qKgoJKiBNZW51IENvbnRleHQKCSoKCSogQHBh cmFtCW9iamVjdAlUaGUgbWVudSBjb250YWluZXIgb2JqZWN0CgkqIEBwYXJhbQlz dHJpbmcJVGhlIHN0YXRlIG9mIHRoZSBjb250cm9sCgkqLwoJdGhpcy5tZW51X2Nv bnRleHQgPSBmdW5jdGlvbihvYmosIHN0YXRlKQoJewoJCWlmICh0aGlzLmRpc2Fi bGVkKQoJCXsKCQkJcmV0dXJuOwoJCX0KCgkJc3dpdGNoIChvYmouc3RhdGUpCgkJ ewoJCQljYXNlIHRydWU6IC8vIHNlbGVjdGVkIG1lbnUgaXMgb3BlbgoJCQl7CgkJ CQl0aGlzLnNldF9jb250cm9sX3N0eWxlKG9iaiwgJ2J1dHRvbicsICdkb3duJyk7 CgkJCQlicmVhazsKCQkJfQoKCQkJZGVmYXVsdDoKCQkJewoJCQkJc3dpdGNoIChz dGF0ZSkKCQkJCXsKCQkJCQljYXNlICdtb3VzZW91dCc6CgkJCQkJewoJCQkJCQl0 aGlzLnNldF9jb250cm9sX3N0eWxlKG9iaiwgJ2J1dHRvbicsICdub3JtYWwnKTsK CQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ21vdXNlZG93bic6CgkJCQkJ ewoJCQkJCQl0aGlzLnNldF9jb250cm9sX3N0eWxlKG9iaiwgJ3BvcHVwJywgJ2Rv d24nKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ21vdXNldXAnOgoJ CQkJCWNhc2UgJ21vdXNlb3Zlcic6CgkJCQkJewoJCQkJCQl0aGlzLnNldF9jb250 cm9sX3N0eWxlKG9iaiwgJ2J1dHRvbicsICdob3ZlcicpOwoJCQkJCQlicmVhazsK CQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9OwoKCS8qKgoJKiBCdXR0b24gQ29udGV4 dAoJKgoJKiBAcGFyYW0Jb2JqZWN0CVRoZSBidXR0b24gb2JqZWN0CgkqIEBwYXJh bQlzdHJpbmcJSW5jb21pbmcgZXZlbnQgdHlwZQoJKiBAcGFyYW0Jc3RyaW5nCUNv bnRyb2wgdHlwZSAtICdidXR0b24nIG9yICdtZW51JwoJKi8KCXRoaXMuYnV0dG9u X2NvbnRleHQgPSBmdW5jdGlvbihvYmosIHN0YXRlLCBjb250cm9sdHlwZSkKCXsK CQlpZiAodGhpcy5kaXNhYmxlZCkKCQl7CgkJCXJldHVybjsKCQl9CgoJCWlmICh0 eXBlb2YgY29udHJvbHR5cGUgPT0gJ3VuZGVmaW5lZCcpCgkJewoJCQljb250cm9s dHlwZSA9ICdidXR0b24nOwoJCX0KCgkJc3dpdGNoIChvYmouc3RhdGUpCgkJewoJ CQljYXNlIHRydWU6IC8vIHNlbGVjdGVkIGJ1dHRvbgoJCQl7CgkJCQlzd2l0Y2gg KHN0YXRlKQoJCQkJewoJCQkJCWNhc2UgJ21vdXNlb3Zlcic6CgkJCQkJY2FzZSAn bW91c2Vkb3duJzoKCQkJCQljYXNlICdtb3VzZXVwJzoKCQkJCQl7CgkJCQkJCXRo aXMuc2V0X2NvbnRyb2xfc3R5bGUob2JqLCBjb250cm9sdHlwZSwgJ2Rvd24nKTsK CQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ21vdXNlb3V0JzoKCQkJCQl7 CgkJCQkJCXRoaXMuc2V0X2NvbnRyb2xfc3R5bGUob2JqLCAnYnV0dG9uJywgJ3Nl bGVjdGVkJyk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJCWJyZWFrOwoJ CQl9CgoJCQlkZWZhdWx0OiAvLyBub3Qgc2VsZWN0ZWQKCQkJewoJCQkJc3dpdGNo IChzdGF0ZSkKCQkJCXsKCQkJCQljYXNlICdtb3VzZW92ZXInOgoJCQkJCWNhc2Ug J21vdXNldXAnOgoJCQkJCXsKCQkJCQkJdGhpcy5zZXRfY29udHJvbF9zdHlsZShv YmosIGNvbnRyb2x0eXBlLCAnaG92ZXInKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJ CQkJCWNhc2UgJ21vdXNlZG93bic6CgkJCQkJewoJCQkJCQl0aGlzLnNldF9jb250 cm9sX3N0eWxlKG9iaiwgY29udHJvbHR5cGUsICdkb3duJyk7CgkJCQkJCWJyZWFr OwoJCQkJCX0KCQkJCQljYXNlICdtb3VzZW91dCc6CgkJCQkJewoJCQkJCQl0aGlz LnNldF9jb250cm9sX3N0eWxlKG9iaiwgY29udHJvbHR5cGUsICdub3JtYWwnKTsK CQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9 OwoKCS8qKgoJKiBTZXQgQ29udHJvbCBTdHlsZQoJKgoJKiBAcGFyYW0Jb2JqZWN0 CVRoZSBvYmplY3QgdG8gYmUgc3R5bGVkCgkqIEBwYXJhbQlzdHJpbmcJQ29udHJv bCB0eXBlIC0gJ2J1dHRvbicgb3IgJ21lbnUnCgkqIEBwYXJhbQlzdHJpbmcJVGhl IG1vZGUgdG8gdXNlLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBpc3R5bGVzIGFycmF5 CgkqLwoJdGhpcy5zZXRfY29udHJvbF9zdHlsZSA9IGZ1bmN0aW9uKG9iaiwgY29u dHJvbHR5cGUsIG1vZGUpCgl7CgkJaWYgKG9iai5tb2RlICE9IG1vZGUpCgkJewoJ CQlvYmoubW9kZSA9IG1vZGU7CgoJCQkvLyBjb25zdHJ1Y3QgdGhlIG5hbWUgb2Yg dGhlIGFwcHJvcHJpYXRlIGFycmF5IGtleSBmcm9tIHRoZSBpc3R5bGVzIGFycmF5 CgkJCWlzdHlsZSA9ICdwaV8nICsgY29udHJvbHR5cGUgKyAnXycgKyBvYmoubW9k ZTsKCgkJCS8vIHNldCBlbGVtZW50IGJhY2tncm91bmQsIGNvbG9yLCBwYWRkaW5n IGFuZCBib3JkZXIKCQkJaWYgKHR5cGVvZiBpc3R5bGVzICE9ICd1bmRlZmluZWQn ICYmIHR5cGVvZiBpc3R5bGVzW2lzdHlsZV0gIT0gJ3VuZGVmaW5lZCcpCgkJCXsK CQkJCW9iai5zdHlsZS5iYWNrZ3JvdW5kID0gaXN0eWxlc1tpc3R5bGVdWzBdOwoJ CQkJb2JqLnN0eWxlLmNvbG9yID0gaXN0eWxlc1tpc3R5bGVdWzFdOwoJCQkJaWYg KGNvbnRyb2x0eXBlICE9ICdtZW51JykKCQkJCXsKCQkJCQlvYmouc3R5bGUucGFk ZGluZyA9IGlzdHlsZXNbaXN0eWxlXVsyXTsKCQkJCX0KCQkJCW9iai5zdHlsZS5i b3JkZXIgPSBpc3R5bGVzW2lzdHlsZV1bM107CgoJCQkJdmFyIHRkcyA9IGZldGNo X3RhZ3Mob2JqLCAndGQnKTsKCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgdGRzLmxl bmd0aDsgaSsrKQoJCQkJewoJCQkJCXN3aXRjaCAodGRzW2ldLmNsYXNzTmFtZSkK CQkJCQl7CgkJCQkJCS8vIHNldCB0aGUgcmlnaHQtYm9yZGVyIGZvciBwb3B1cF9m ZWVkYmFjayBjbGFzcyBlbGVtZW50cwoJCQkJCQljYXNlICdwb3B1cF9mZWVkYmFj ayc6CgkJCQkJCXsKCQkJCQkJCXRkc1tpXS5zdHlsZS5ib3JkZXJSaWdodCA9ICht b2RlID09ICdub3JtYWwnID8gaXN0eWxlc1sncGlfbWVudV9ub3JtYWwnXVszXSA6 IGlzdHlsZXNbaXN0eWxlXVszXSk7CgkJCQkJCX0KCQkJCQkJYnJlYWs7CgoJCQkJ CQkvLyBzZXQgdGhlIGJvcmRlciBjb2xvdXIgZm9yIHBvcHVwX3BpY2tidXR0b24g Y2xhc3MgZWxlbWVudHMKCQkJCQkJY2FzZSAncG9wdXBfcGlja2J1dHRvbic6CgkJ CQkJCXsKCQkJCQkJCXRkc1tpXS5zdHlsZS5ib3JkZXJDb2xvciA9IChtb2RlID09 ICdub3JtYWwnID8gaXN0eWxlc1sncGlfbWVudV9ub3JtYWwnXVswXSA6IGlzdHls ZXNbaXN0eWxlXVswXSk7CgkJCQkJCX0KCQkJCQkJYnJlYWs7CgoJCQkJCQkvLyBz ZXQgdGhlIGxlZnQtcGFkZGluZyBhbmQgbGVmdC1ib3JkZXIgZm9yIGFsdF9waWNr YnV0dG9uIGVsZW1lbnRzCgkJCQkJCWNhc2UgJ2FsdF9waWNrYnV0dG9uJzoKCQkJ CQkJewoJCQkJCQkJaWYgKG9iai5zdGF0ZSkKCQkJCQkJCXsKCQkJCQkJCQl0ZHNb aV0uc3R5bGUucGFkZGluZ0xlZnQgPSBpc3R5bGVzWydwaV9idXR0b25fbm9ybWFs J11bMl07CgkJCQkJCQkJdGRzW2ldLnN0eWxlLmJvcmRlckxlZnQgPSBpc3R5bGVz WydwaV9idXR0b25fbm9ybWFsJ11bM107CgkJCQkJCQl9CgkJCQkJCQllbHNlCgkJ CQkJCQl7CgkJCQkJCQkJdGRzW2ldLnN0eWxlLnBhZGRpbmdMZWZ0ID0gaXN0eWxl c1tpc3R5bGVdWzJdOwoJCQkJCQkJCXRkc1tpXS5zdHlsZS5ib3JkZXJMZWZ0ID0g aXN0eWxlc1tpc3R5bGVdWzNdOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJ fQoJCQl9CgkJfQoJfTsKCgkvKioKCSogRm9ybWF0IHRleHQKCSoKCSogQHBhcmFt CWV2ZW50CUV2ZW50IG9iamVjdAoJKiBAcGFyYW0Jc3RyaW5nCUZvcm1hdHRpbmcg Y29tbWFuZAoJKiBAcGFyYW0Jc3RyaW5nCU9wdGlvbmFsIGFyZ3VtZW50IHRvIHRo ZSBmb3JtYXR0aW5nIGNvbW1hbmQKCSoKCSogQHJldHVybglib29sZWFuCgkqLwoJ dGhpcy5mb3JtYXQgPSBmdW5jdGlvbihlLCBjbWQsIGFyZykKCXsKCQllID0gZG9f YW5fZShlKTsKCgkJaWYgKHRoaXMuZGlzYWJsZWQpCgkJewoJCQlyZXR1cm4gZmFs c2U7CgkJfQoKCQlpZiAoY21kICE9ICdyZWRvJykKCQl7CgkJCXRoaXMuaGlzdG9y eS5hZGRfc25hcHNob3QodGhpcy5nZXRfZWRpdG9yX2NvbnRlbnRzKCkpOwoJCX0K CgkJaWYgKGNtZCA9PSAnc3dpdGNobW9kZScpCgkJewoJCQlzd2l0Y2hfZWRpdG9y X21vZGUodGhpcy5lZGl0b3JpZCk7CgkJCXJldHVybjsKCQl9CgkJZWxzZSBpZiAo Y21kLnN1YnN0cigwLCA2KSA9PSAncmVzaXplJykKCQl7CgkJCXRoaXMucmVzaXpl X2VkaXRvcihwYXJzZUludChjbWQuc3Vic3RyKDkpLCAxMCkgKiAocGFyc2VJbnQo Y21kLnN1YnN0cig3LCAxKSwgMTApID09ICcxJyA/IDEgOiAtMSkpOwoJCQlyZXR1 cm47CgkJfQoKCQl0aGlzLmNoZWNrX2ZvY3VzKCk7CgoJCWlmIChjbWQuc3Vic3Ry KDAsIDQpID09ICd3cmFwJykKCQl7CgkJCXZhciByZXQgPSB0aGlzLndyYXBfdGFn cyhjbWQuc3Vic3RyKDYpLCAoY21kLnN1YnN0cig0LCAxKSA9PSAnMScgPyB0cnVl IDogZmFsc2UpKTsKCQl9CgkJZWxzZSBpZiAodGhpc1tjbWRdKQoJCXsKCQkJdmFy IHJldCA9IHRoaXNbY21kXShlKTsKCQl9CgkJZWxzZQoJCXsKCQkJdHJ5CgkJCXsK CQkJCXZhciByZXQgPSB0aGlzLmFwcGx5X2Zvcm1hdChjbWQsIGZhbHNlLCAodHlw ZW9mIGFyZyA9PSAndW5kZWZpbmVkJyA/IHRydWUgOiBhcmcpKTsKCQkJfQoJCQlj YXRjaChlKQoJCQl7CgkJCQl0aGlzLmhhbmRsZV9lcnJvcihjbWQsIGUpOwoJCQkJ dmFyIHJldCA9IGZhbHNlOwoJCQl9CgkJfQoKCQlpZiAoY21kICE9ICd1bmRvJykK CQl7CgkJCXRoaXMuaGlzdG9yeS5hZGRfc25hcHNob3QodGhpcy5nZXRfZWRpdG9y X2NvbnRlbnRzKCkpOwoJCX0KCgkJdGhpcy5zZXRfY29udGV4dChjbWQpOwoKCQl0 aGlzLmNoZWNrX2ZvY3VzKCk7CgoJCXJldHVybiByZXQ7Cgl9OwoKCS8qKgoJKiBJ bnNlcnQgSW1hZ2UKCSoKCSogQHBhcmFtCWV2ZW50CUV2ZW50IG9iamVjdAoJKiBA cGFyYW0Jc3RyaW5nCShPcHRpb25hbCkgSW1hZ2UgVVJMCgkqCgkqIEByZXR1cm4J Ym9vbGVhbgoJKi8KCXRoaXMuaW5zZXJ0aW1hZ2UgPSBmdW5jdGlvbihlLCBpbWcp Cgl7CgkJaWYgKHR5cGVvZiBpbWcgPT0gJ3VuZGVmaW5lZCcpCgkJewoJCQlpbWcg PSB0aGlzLnNob3dfcHJvbXB0KHZicGhyYXNlWydlbnRlcl9pbWFnZV91cmwnXSwg J2h0dHA6Ly8nLCB0cnVlKTsKCQl9CgkJaWYgKGltZyA9IHRoaXMudmVyaWZ5X3By b21wdChpbWcpKQoJCXsKCQkJcmV0dXJuIHRoaXMuYXBwbHlfZm9ybWF0KCdpbnNl cnRpbWFnZScsIGZhbHNlLCBpbWcpOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4g ZmFsc2U7CgkJfQoJfTsKCgkvKioKCSogV3JhcCBUYWdzCgkqCgkqIEBwYXJhbQlz dHJpbmcJVGFnIHRvIHdyYXAKCSogQHBhcmFtCWJvb2xlYW4JVXNlIG9wdGlvbj8K CSogQHBhcmFtCXN0cmluZwkoT3B0aW9uYWwpIHNlbGVjdGVkIHRleHQKCSoKCSog QHJldHVybglib29sZWFuCgkqLwoJdGhpcy53cmFwX3RhZ3MgPSBmdW5jdGlvbih0 YWduYW1lLCB1c2VvcHRpb24sIHNlbGVjdGlvbikKCXsKCQl0YWduYW1lID0gdGFn bmFtZS50b1VwcGVyQ2FzZSgpOwoKCQlzd2l0Y2ggKHRhZ25hbWUpCgkJewoJCQlj YXNlICdDT0RFJzoKCQkJY2FzZSAnSFRNTCc6CgkJCWNhc2UgJ1BIUCc6CgkJCXsK CQkJCXRoaXMuYXBwbHlfZm9ybWF0KCdyZW1vdmVmb3JtYXQnKTsKCQkJfQoJCQli cmVhazsKCQl9CgoJCWlmICh0eXBlb2Ygc2VsZWN0aW9uID09ICd1bmRlZmluZWQn KQoJCXsKCQkJc2VsZWN0aW9uID0gdGhpcy5nZXRfc2VsZWN0aW9uKCk7CgkJCWlm IChzZWxlY3Rpb24gPT09IGZhbHNlKQoJCQl7CgkJCQlzZWxlY3Rpb24gPSAnJzsK CQkJfQoJCQllbHNlCgkJCXsKCQkJCXNlbGVjdGlvbiA9IG5ldyBTdHJpbmcoc2Vs ZWN0aW9uKTsKCQkJfQoJCX0KCgkJaWYgKHVzZW9wdGlvbiA9PT0gdHJ1ZSkKCQl7 CgkJCXZhciBvcHRpb24gPSB0aGlzLnNob3dfcHJvbXB0KGNvbnN0cnVjdF9waHJh c2UodmJwaHJhc2VbJ2VudGVyX3RhZ19vcHRpb24nXSwgKCdbJyArIHRhZ25hbWUg KyAnXScpKSwgJycsIGZhbHNlKTsKCQkJaWYgKG9wdGlvbiA9IHRoaXMudmVyaWZ5 X3Byb21wdChvcHRpb24pKQoJCQl7CgkJCQl2YXIgb3BlbnRhZyA9ICdbJyArIHRh Z25hbWUgKyAnPSInICsgb3B0aW9uICsgJyInICsgJ10nOwoJCQl9CgkJCWVsc2UK CQkJewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJfQoJCWVsc2UgaWYgKHVzZW9w dGlvbiAhPT0gZmFsc2UpCgkJewoJCQl2YXIgb3BlbnRhZyA9ICdbJyArIHRhZ25h bWUgKyAnPSInICsgdXNlb3B0aW9uICsgJyInICsgJ10nOwoJCX0KCQllbHNlCgkJ ewoJCQl2YXIgb3BlbnRhZyA9ICdbJyArIHRhZ25hbWUgKyAnXSc7CgkJfQoKCQl2 YXIgY2xvc2V0YWcgPSAnWy8nICsgdGFnbmFtZSArICddJzsKCQl2YXIgdGV4dCA9 IG9wZW50YWcgKyBzZWxlY3Rpb24gKyBjbG9zZXRhZzsKCgkJdGhpcy5pbnNlcnRf dGV4dCh0ZXh0LCBvcGVudGFnLnZCbGVuZ3RoKCksIGNsb3NldGFnLnZCbGVuZ3Ro KCkpOwoKCQlyZXR1cm4gZmFsc2U7Cgl9OwoKCS8qKgoJKiBDaGVjayBTcGVsbGlu ZyAodXNlcyBpZVNwZWxsIGZyb20gd3d3Lmllc3BlbGwuY29tKQoJKgoJKiBFdmVu dHVhbGx5IHdlIGhvcGUgdG8gaW50ZWdyYXRlIFNwZWxsQm91bmQgKGh0dHA6Ly9z cGVsbGJvdW5kLnNvdXJjZWZvcmdlLm5ldCkgZm9yIEdlY2tvLgoJKi8KCXRoaXMu c3BlbGxpbmcgPSBmdW5jdGlvbigpCgl7CgkJaWYgKGlzX2llKQoJCXsKCQkJdHJ5 CgkJCXsKCQkJCS8vIGF0dGVtcHQgdG8gaW5zdGFudGlhdGUgaWVTcGVsbAoJCQkJ ZXZhbCgibmV3IEEiICsgImN0aXYiICsgImVYIiArICJPYiIgKyAiamVjdCgnaWVT cGVsbC4iICsgImllU3BlbGxFeHQiICsgImVuc2lvbicpLkNoZWNrRCIgKyAib2N1 bWVudE5vZGUodGhpcy5zcGVsbG9iaik7Iik7CgkJCX0KCQkJY2F0Y2goZSkKCQkJ ewoJCQkJLy8gYXNrIGlmIHVzZXIgd2FudHMgdG8gZG93bmxvYWQgaWVTcGVsbAoJ CQkJaWYgKGUubnVtYmVyID09IC0yMTQ2ODI3ODU5ICYmIGNvbmZpcm0odmJwaHJh c2VbJ2llc3BlbGxfbm90X2luc3RhbGxlZCddKSkKCQkJCXsKCQkJCQkvLyBvb2gg dGhleSBkby4uLgoJCQkJCXdpbmRvdy5vcGVuKCdodHRwOi8vd3d3Lmllc3BlbGwu Y29tL2Rvd25sb2FkLnBoJyArICdwJyk7CgkJCQl9CgkJCX0KCQl9CgkJZWxzZSBp ZiAoaXNfbW96KQoJCXsKCQkJLy8gYXR0ZW1wdCB0byBpbnN0YW50aWF0ZSBTcGVs bEJvdW5kLi4uIHdoZW4gaXQgc3VwcG9ydHMgdGhpcyBiZWhhdmlvdXIKCQl9Cgl9 OwoKCS8qKgoJKiBIYW5kbGUgRXJyb3IKCSoKCSogQHBhcmFtCXN0cmluZwlDb21t YW5kIG5hbWUKCSogQHBhcmFtCWV2ZW50CUV2ZW50IG9iamVjdAoJKi8KCXRoaXMu aGFuZGxlX2Vycm9yID0gZnVuY3Rpb24oY21kLCBlKQoJewoJfTsKCgkvKioKCSog U2hvdyBKUyBQcm9tcHQgYW5kIGZpbHRlciByZXN1bHQKCSoKCSogQHBhcmFtCXN0 cmluZwlUZXh0IGZvciB0aGUgZGlhbG9nCgkqIEBwYXJhbQlzdHJpbmcJRGVmYXVs dCB2YWx1ZSBmb3IgdGhlIGRpYWxvZwoJKiBAcGFyYW0Jc3RyaW5nCVdoZXRoZXIg dG8gZm9yY2UgTFRSIChmb3IgVVJMcywgZXRjKQoJKgoJKiBAcmV0dXJuCXN0cmlu ZwoJKi8KCXRoaXMuc2hvd19wcm9tcHQgPSBmdW5jdGlvbihkaWFsb2d0eHQsIGRl ZmF1bHR2YWwsIGZvcmNlbHRyKQoJewoJCWlmIChpc19pZTcpCgkJewoJCQkvLyBy ZXNwZWN0IGEgPGJhc2U+IHRhZyAoc2VlICMyMzA5NykKCQkJdmFyIGJhc2VfdGFn ID0gZmV0Y2hfdGFncyhkb2N1bWVudCwgJ2Jhc2UnKTsKCQkJaWYgKGJhc2VfdGFn ICYmIGJhc2VfdGFnWzBdICYmIGJhc2VfdGFnWzBdLmhyZWYpCgkJCXsKCQkJCXZh ciBtb2RhbF9wcmVmaXggPSBiYXNlX3RhZ1swXS5ocmVmOwoJCQl9CgkJCWVsc2UK CQkJewoJCQkJdmFyIG1vZGFsX3ByZWZpeCA9ICcnOwoJCQl9CgoJCQl2YXIgcmV0 dXJudmFsdWUgPSB3aW5kb3cuc2hvd01vZGFsRGlhbG9nKG1vZGFsX3ByZWZpeCAr ICJjbGllbnRzY3JpcHQvaWVwcm9tcHQuaHRtbD8iLCB7IHZhbHVlOiBkZWZhdWx0 dmFsLCBsYWJlbDogZGlhbG9ndHh0LCBkaXI6IGRvY3VtZW50LmRpciwgdGl0bGU6 IGRvY3VtZW50LnRpdGxlLCBmb3JjZWx0cjogKHR5cGVvZihmb3JjZWx0cikgIT0g InVuZGVmaW5lZCIgPyBmb3JjZWx0ciA6IGZhbHNlKSB9LCAiZGlhbG9nV2lkdGg6 MzIwcHg7IGRpYWxvZ0hlaWdodDoxNTBweDsgZGlhbG9nVG9wOiIgKyAocGFyc2VJ bnQod2luZG93LnNjcmVlblRvcCkgKyBwYXJzZUludCh3aW5kb3cuZXZlbnQuY2xp ZW50WSkgKyBwYXJzZUludChkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCkgLSAxMDAp ICsgInB4OyBkaWFsb2dMZWZ0OiIgKyAocGFyc2VJbnQod2luZG93LnNjcmVlbkxl ZnQpICsgcGFyc2VJbnQod2luZG93LmV2ZW50LmNsaWVudFgpICsgcGFyc2VJbnQo ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0KSAtIDE2MCkgKyAicHg7IHJlc2l6YWJs ZTogTm87Iik7CgkJfQoJCWVsc2UKCQl7CgkJCXZhciByZXR1cm52YWx1ZSA9IHBy b21wdChkaWFsb2d0eHQsIGRlZmF1bHR2YWwpOwoJCX0KCgkJLy8gZGVhbCB3aXRo IHVuZXhwZWN0ZWQgcmV0dXJuIHZhbHVlCgkJaWYgKHR5cGVvZihyZXR1cm52YWx1 ZSkgPT0gInVuZGVmaW5lZCIpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWVs c2UgaWYgKHJldHVybnZhbHVlID09IGZhbHNlIHx8IHJldHVybnZhbHVlID09IG51 bGwpCgkJewoJCQlyZXR1cm4gcmV0dXJudmFsdWU7CgkJfQoJCWVsc2UKCQl7CgkJ CXJldHVybiBQSFAudHJpbShuZXcgU3RyaW5nKHJldHVybnZhbHVlKSk7CgkJfQoJ fTsKCgkvKioKCSogQ2xvc2VzIGFuIG9wZW4gcHJvbXB0IChlbXVsYXRvcikgd2lu ZG93IG9wZW5lZCBieSBzaG93X3Byb21wdCgpIHVuZGVyIElFNysKCSovCgl0aGlz LmNsb3NlX3Byb21wdCA9IGZ1bmN0aW9uKCkKCXsKCQlpZiAodGhpcy5wcm9tcHRf cG9wdXApCgkJewoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidkJfRWRpdG9y XzAwMSIpLnJlbW92ZUNoaWxkKHRoaXMucHJvbXB0X3BvcHVwKTsKCQkJdGhpcy5w cm9tcHRfcG9wdXAgPSBudWxsOwoJCX0KCgkJdGhpcy5jaGVja19mb2N1cygpOwoJ fQoKCS8qKgoJKiBWZXJpZnkgdGhlIHJldHVybiB2YWx1ZSBvZiBhIGphdmFzY3Jp cHQgcHJvbXB0CgkqCgkqIEBwYXJhbQlzdHJpbmcJU3RyaW5nIHRvIGJlIGNoZWNr ZWQKCSoKCSogQHJldHVybgltaXhlZAlGYWxzZSBvbiBmYWlsLCBzdHJpbmcgb24g c3VjY2VzcwoJKi8KCXRoaXMudmVyaWZ5X3Byb21wdCA9IGZ1bmN0aW9uKHN0cikK CXsKCQlzd2l0Y2goc3RyKQoJCXsKCQkJY2FzZSAnaHR0cDovLyc6CgkJCWNhc2Ug J251bGwnOgoJCQljYXNlICd1bmRlZmluZWQnOgoJCQljYXNlICdmYWxzZSc6CgkJ CWNhc2UgJyc6CgkJCWNhc2UgbnVsbDoKCQkJY2FzZSBmYWxzZToKCQkJCXJldHVy biBmYWxzZTsKCgkJCWRlZmF1bHQ6CgkJCQlyZXR1cm4gc3RyOwoJCX0KCX07CgoJ LyoqCgkqIE9wZW4gU21pbGllIFdpbmRvdwoJKgoJKiBAcGFyYW0JaW50ZWdlcglX aW5kb3cgd2lkdGgKCSogQHBhcmFtCWludGVnZXIJV2luZG93IGhlaWdodAoJKi8K CXRoaXMub3Blbl9zbWlsaWVfd2luZG93ID0gZnVuY3Rpb24od2lkdGgsIGhlaWdo dCkKCXsKCQlzbWlsaWVfd2luZG93ID0gb3BlbldpbmRvdygnbWlzYy5waHA/JyAr IFNFU1NJT05VUkwgKyAnZG89Z2V0c21pbGllcyZlZGl0b3JpZD0nICsgdGhpcy5l ZGl0b3JpZCwgd2lkdGgsIGhlaWdodCwgJ3NtaWxpZV93aW5kb3cnKTsKCgkJd2lu ZG93Lm9udW5sb2FkID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5z bWlsaWV3aW5kb3dfb251bmxvYWQ7Cgl9CgoJLyoqCgkqIFJlc2l6ZSBFZGl0b3IK CSoKCSogQHBhcmFtCWludGVnZXIJTnVtYmVyIG9mIHBpeGVscyBieSB3aGljaCB0 byByZXNpemUgdGhlIGVkaXRvcgoJKi8KCXRoaXMucmVzaXplX2VkaXRvciA9IGZ1 bmN0aW9uKGNoYW5nZSkKCXsKCQl2YXIgbmV3aGVpZ2h0ID0gcGFyc2VJbnQodGhp cy5lZGl0Ym94LnN0eWxlLmhlaWdodCwgMTApICsgY2hhbmdlOwoKCQlpZiAobmV3 aGVpZ2h0ID49IDEwMCkKCQl7CgkJCXRoaXMuZWRpdGJveC5zdHlsZS5oZWlnaHQg PSBuZXdoZWlnaHQgKyAncHgnOwoKCQkJLy8gcmVtZW1iZXIgdGhlIHNldHRpbmcg Zm9yIG5leHQgdGltZQoJCQlpZiAoY2hhbmdlICUgOTkgIT0gMCkKCQkJewoJCQkJ c2V0X2Nvb2tpZSgnZWRpdG9yX2hlaWdodCcsIG5ld2hlaWdodCk7CgkJCX0KCQl9 Cgl9OwoKCS8qKgoJKiBEZXN0cm95IFBvcHVwCgkqLwoJdGhpcy5kZXN0cm95X3Bv cHVwID0gZnVuY3Rpb24ocG9wdXBuYW1lKQoJewoJCXRoaXMucG9wdXBzW3BvcHVw bmFtZV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBvcHVwc1twb3B1cG5h bWVdKTsKCQl0aGlzLnBvcHVwc1twb3B1cG5hbWVdID0gbnVsbDsKCX0KCgkvKioK CSogRGVzdHJveSBFZGl0b3IKCSovCgl0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigp Cgl7CgkJLy8gcmVzZXQgYWxsIGJ1dHRvbnMgdG8gZGVmYXVsdCBzdGF0ZQoJCWZv ciAodmFyIGkgaW4gdGhpcy5idXR0b25zKQoJCXsKCQkJdGhpcy5zZXRfY29udHJv bF9zdHlsZSh0aGlzLmJ1dHRvbnNbaV0sICdidXR0b24nLCAnbm9ybWFsJyk7CgkJ fQoKCQkvLyBkZXN0cm95IHBvcHVwcwoJCWZvciAodmFyIG1lbnUgaW4gdGhpcy5w b3B1cHMpCgkJewoJCQl0aGlzLmRlc3Ryb3lfcG9wdXAobWVudSk7CgkJfQoKCQlp ZiAodGhpcy5mb250b3B0aW9ucykKCQl7CgkJCWZvciAodmFyIGkgaW4gdGhpcy5m b250b3B0aW9ucykKCQkJewoJCQkJaWYgKGkgIT0gJycpCgkJCQl7CgkJCQkJdGhp cy5mb250b3B0aW9uc1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZm9u dG9wdGlvbnNbaV0pOwoJCQkJfQoJCQl9CgkJCXRoaXMuZm9udG9wdGlvbnNbJydd LnN0eWxlLmRpc3BsYXkgPSAnJzsKCQl9CgoJCWlmICh0aGlzLnNpemVvcHRpb25z KQoJCXsKCQkJZm9yICh2YXIgaSBpbiB0aGlzLnNpemVvcHRpb25zKQoJCQl7CgkJ CQlpZiAoaSAhPSAnJykKCQkJCXsKCQkJCQl0aGlzLnNpemVvcHRpb25zW2ldLnBh cmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5zaXplb3B0aW9uc1tpXSk7CgkJCQl9 CgkJCX0KCQkJdGhpcy5zaXplb3B0aW9uc1snJ10uc3R5bGUuZGlzcGxheSA9ICcn OwoJCX0KCX07CgoJLyoqCgkqIENvbGxhcHNlIHRoZSBjdXJyZW50IHNlbGVjdGlv biBhbmQgcGxhY2UgdGhlIGN1cnNvciB3aGVyZSB0aGUgZW5kIG9mIHRoZQoJKiBz ZWxlY3Rpb24gd2FzLgoJKi8KCXRoaXMuY29sbGFwc2Vfc2VsZWN0aW9uX2VuZCA9 IGZ1bmN0aW9uKCkKCXsKCQlpZiAodGhpcy5lZGl0ZG9jLnNlbGVjdGlvbikKCQl7 CgkJCXZhciByYW5nZSA9IHRoaXMuZWRpdGRvYy5zZWxlY3Rpb24uY3JlYXRlUmFu Z2UoKTsKCQkJLy8gZml4IGZvciBob3JyaWJseSBjb25mdXNpbmcgSUUgYnVnIHdo ZXJlIGl0IHJhbmRvbWx5IG1ha2VzIHRleHQgd2hpdGUgZm9yIGZ1bnNpZXMKCQkJ Ly8gc2VlIDMuNSBidWcgIzI3OQoJCQlldmFsKCJyYW5nZS4iICsgIm1vdmUiICsg IignY2hhcmFjdGVyJywgLTEpOyIpOwoJCQlyYW5nZS5jb2xsYXBzZShmYWxzZSk7 CgkJCXJhbmdlLnNlbGVjdCgpOwoJCX0KCQllbHNlIGlmIChkb2N1bWVudC5zZWxl Y3Rpb24gJiYgZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKQoJCXsKCQkJ dmFyIHJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7CgkJ CXJhbmdlLmNvbGxhcHNlKGZhbHNlKTsKCQkJcmFuZ2Uuc2VsZWN0KCk7CgkJfQoJ CWVsc2UgaWYgKHR5cGVvZih0aGlzLmVkaXRkb2Muc2VsZWN0aW9uU3RhcnQpICE9 ICd1bmRlZmluZWQnKQoJCXsKCQkJdmFyIG9wbiA9IHRoaXMuZWRpdGRvYy5zZWxl Y3Rpb25TdGFydCArIDA7CgkJCXZhciBzZWxfdGV4dCA9IHRoaXMuZWRpdGRvYy52 YWx1ZS5zdWJzdHIodGhpcy5lZGl0ZG9jLnNlbGVjdGlvblN0YXJ0LCB0aGlzLmVk aXRkb2Muc2VsZWN0aW9uRW5kIC0gdGhpcy5lZGl0ZG9jLnNlbGVjdGlvblN0YXJ0 KTsKCgkJCXRoaXMuZWRpdGRvYy5zZWxlY3Rpb25TdGFydCA9IHRoaXMuZWRpdGRv Yy5zZWxlY3Rpb25TdGFydCArIHNlbF90ZXh0LnZCbGVuZ3RoKCk7CgkJfQoJCWVs c2UgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pCgkJewoJCQkvLyBkb24ndCB0aGlu ayBJIGNhbiBkbyBhbnl0aGluZyBmb3IgdGhpcwoJCX0KCX0KCgkvLyA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQoJLy8gV1lTSVdZRyBlZGl0b3IKCS8vID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CglpZiAodGhpcy53eXNpd3lnX21v ZGUpCgl7CgkJLyoqCgkJKiBEaXNhYmxlcyB0aGUgZWRpdG9yCgkJKgoJCSogQHBh cmFtCXN0cmluZwlJbml0aWFsIHRleHQgZm9yIHRoZSBlZGl0b3IKCQkqLwoJCXRo aXMuZGlzYWJsZV9lZGl0b3IgPSBmdW5jdGlvbih0ZXh0KQoJCXsKCQkJaWYgKCF0 aGlzLmRpc2FibGVkKQoJCQl7CgkJCQl0aGlzLmRpc2FibGVkID0gdHJ1ZTsKCgkJ CQl2YXIgaGlkZXIgPSBmZXRjaF9vYmplY3QodGhpcy5lZGl0b3JpZCArICdfaGlk ZXInKTsKCQkJCWlmIChoaWRlcikKCQkJCXsKCQkJCQloaWRlci5wYXJlbnROb2Rl LnJlbW92ZUNoaWxkKGhpZGVyKTsKCQkJCX0KCgkJCQl2YXIgZGl2ID0gZG9jdW1l bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJCQlkaXYuaWQgPSB0aGlzLmVkaXRv cmlkICsgJ19oaWRlcic7CgkJCQlkaXYuY2xhc3NOYW1lID0gJ3d5c2l3eWcnOwoJ CQkJZGl2LnN0eWxlLmJvcmRlciA9ICcycHggaW5zZXQnOwoJCQkJZGl2LnN0eWxl LndpZHRoID0gdGhpcy5lZGl0Ym94LnN0eWxlLndpZHRoOwoJCQkJZGl2LnN0eWxl LmhlaWdodCA9IHRoaXMuZWRpdGJveC5zdHlsZS5oZWlnaHQ7CgkJCQl2YXIgY2hp bGRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKCQkJCWNoaWxk ZGl2LnN0eWxlLm1hcmdpbiA9ICc4cHgnOwoJCQkJY2hpbGRkaXYuaW5uZXJIVE1M ID0gdGV4dDsKCQkJCWRpdi5hcHBlbmRDaGlsZChjaGlsZGRpdik7CgkJCQl0aGlz LmVkaXRib3gucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChkaXYpOwoKCQkJCS8vIGFu ZCBoaWRlIHRoZSByZWFsIGVkaXRvcgoJCQkJdGhpcy5lZGl0Ym94LnN0eWxlLndp ZHRoID0gJzBweCc7CgkJCQl0aGlzLmVkaXRib3guc3R5bGUuaGVpZ2h0ID0gJzBw eCc7CgkJCQl0aGlzLmVkaXRib3guc3R5bGUuYm9yZGVyID0gJ25vbmUnOwoJCQl9 CgkJfTsKCgkJLyoqCgkJKiBFbmFibGVzIHRoZSBlZGl0b3IKCQkqCgkJKiBAcGFy YW0Jc3RyaW5nCUluaXRpYWwgdGV4dCBmb3IgdGhlIGVkaXRvcgoJCSovCgkJdGhp cy5lbmFibGVfZWRpdG9yID0gZnVuY3Rpb24odGV4dCkKCQl7CgkJCWlmICh0eXBl b2YgdGV4dCAhPSAndW5kZWZpbmVkJykKCQkJewoJCQkJdGhpcy5zZXRfZWRpdG9y X2NvbnRlbnRzKHRleHQpOwoJCQl9CgoJCQl2YXIgaGlkZXIgPSBmZXRjaF9vYmpl Y3QodGhpcy5lZGl0b3JpZCArICdfaGlkZXInKTsKCQkJaWYgKGhpZGVyKQoJCQl7 CgkJCQloaWRlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGhpZGVyKTsKCQkJfQoK CQkJdGhpcy5kaXNhYmxlZCA9IGZhbHNlOwoJCX07CgoJCS8qKgoJCSogUHV0cyB0 aGUgdGV4dCBpbnRvIHRoZSBlZGl0b3IKCQkqCgkJKiBAcGFyYW0Jc3RyaW5nCVRl eHQgdG8gd3JpdGUKCQkqLwoJCXRoaXMud3JpdGVfZWRpdG9yX2NvbnRlbnRzID0g ZnVuY3Rpb24odGV4dCwgZG9pbml0KQoJCXsKCQkJaWYgKHRleHQgPT0gJycpCgkJ CXsKCQkJCWlmIChpc19pZSkKCQkJCXsKCQkJCQl0ZXh0ID0gJzxwPjwvcD4nOwoJ CQkJfQoJCQkJZWxzZSBpZiAoaXNfbW96KQoJCQkJewoJCQkJCXRleHQgPSAnPGJy IC8+JzsKCQkJCX0KCQkJfQoJCQlpZiAodGhpcy5lZGl0ZG9jICYmIHRoaXMuZWRp dGRvYy5pbml0aWFsaXplZCkKCQkJewoJCQkJdGhpcy5lZGl0ZG9jLmJvZHkuaW5u ZXJIVE1MID0gdGV4dDsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8vIEZvcmNlIEZp cmVmb3ggMS4wIHRvIHJ1biBpdCBoZXJlIGFuZCBGaXJlZm94IDEuNSsgbGF0ZXIg b24sIHNlZSBCdWcgIzIyNjYxCgkJCQlpZiAoZG9pbml0ICYmIHR5cGVvZiBBcnJh eS5wcm90b3R5cGUubWFwID09ICd1bmRlZmluZWQnKSB7IHRoaXMuZWRpdGRvYy5k ZXNpZ25Nb2RlID0gJ29uJzsgfQoJCQkJdGhpcy5lZGl0ZG9jID0gdGhpcy5lZGl0 d2luLmRvY3VtZW50OyAvLyBTZWU6IGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20v d29ya3Nob3AvYXV0aG9yL2RodG1sL292ZXJ2aWV3L1hwU3AyQ29tcGF0LmFzcCNj YWNoaW5nCgkJCQl0aGlzLmVkaXRkb2Mub3BlbigndGV4dC9odG1sJywgJ3JlcGxh Y2UnKTsKCQkJCXRoaXMuZWRpdGRvYy53cml0ZSh0ZXh0KTsKCQkJCXRoaXMuZWRp dGRvYy5jbG9zZSgpOwoJCQkJaWYgKGRvaW5pdCkKCQkJCXsKCQkJCQl0aGlzLmVk aXRkb2MuYm9keS5jb250ZW50RWRpdGFibGUgPSB0cnVlOwoJCQkJCWlmICh0eXBl b2YgQXJyYXkucHJvdG90eXBlLm1hcCAhPSAndW5kZWZpbmVkJykKCQkJCQl7CgkJ CQkJCXRoaXMuZWRpdGRvYy5kZXNpZ25Nb2RlID0gJ29uJzsKCQkJCQl9CgkJCQl9 CgkJCQl0aGlzLmVkaXRkb2MuYm9keS5zcGVsbGNoZWNrID0gdHJ1ZTsKCgkJCQl0 aGlzLmVkaXRkb2MuaW5pdGlhbGl6ZWQgPSB0cnVlOwoKCQkJCXRoaXMuc2V0X2Vk aXRvcl9zdHlsZSgpOwoJCQl9CgoJCQl0aGlzLnNldF9kaXJlY3Rpb24oKTsKCQl9 CgoJCS8qKgoJCSogUHV0IHRoZSB0ZXh0IGludG8gdGhlIGVkaXRvcgoJCSovCgkJ dGhpcy5zZXRfZWRpdG9yX2NvbnRlbnRzID0gZnVuY3Rpb24oaW5pdGlhbF90ZXh0 KQoJCXsKCQkJaWYgKGZldGNoX29iamVjdCh0aGlzLmVkaXRvcmlkICsgJ19pZnJh bWUnKSkKCQkJewoJCQkJdGhpcy5lZGl0Ym94ID0gZmV0Y2hfb2JqZWN0KHRoaXMu ZWRpdG9yaWQgKyAnX2lmcmFtZScpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJdmFy IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwoJCQkJ aWYgKGlzX2llICYmIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCA9PSAnaHR0cHM6 JykKCQkJCXsKCQkJCQkvLyB3b3JrYXJvdW5kIGZvciBJRSB0aHJvd2luZyBpbnNl Y3VyZSBwYWdlIHdhcm5pbmdzCgkJCQkJaWZyYW1lLnNyYyA9ICdjbGllbnRzY3Jp cHQvaW5kZXguaHRtbCc7CgkJCQl9CgkJCQl0aGlzLmVkaXRib3ggPSB0aGlzLnRl eHRvYmoucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChpZnJhbWUpOwoJCQkJdGhpcy5l ZGl0Ym94LmlkID0gdGhpcy5lZGl0b3JpZCArICdfaWZyYW1lJzsKCQkJCXRoaXMu ZWRpdGJveC50YWJJbmRleCA9IDE7CgkJCX0KCgkJCWlmICghaXNfaWUpCgkJCXsK CQkJCXRoaXMuZWRpdGJveC5zdHlsZS5ib3JkZXIgPSAnMnB4IGluc2V0JzsKCQkJ fQoJCQl0aGlzLmVkaXRib3guc3R5bGUud2lkdGggPSB0aGlzLnRleHRvYmouc3R5 bGUud2lkdGg7CgkJCXRoaXMuZWRpdGJveC5zdHlsZS5oZWlnaHQgPSB0aGlzLnRl eHRvYmouc3R5bGUuaGVpZ2h0OwoJCQl0aGlzLnRleHRvYmouc3R5bGUuZGlzcGxh eSA9ICdub25lJzsKCgkJCXRoaXMuZWRpdHdpbiA9IHRoaXMuZWRpdGJveC5jb250 ZW50V2luZG93OwoJCQl0aGlzLmVkaXRkb2MgPSB0aGlzLmVkaXR3aW4uZG9jdW1l bnQ7CgoJCQl0aGlzLndyaXRlX2VkaXRvcl9jb250ZW50cygodHlwZW9mIGluaXRp YWxfdGV4dCA9PSAndW5kZWZpbmVkJyA/ICB0aGlzLnRleHRvYmoudmFsdWUgOiBp bml0aWFsX3RleHQpLCB0cnVlKTsKCgkJCWlmICh0aGlzLmVkaXRkb2MuZGlyID09 ICdydGwnKQoJCQl7CgkJCS8vCXRoaXMuZWRpdGRvYy5leGVjQ29tbWFuZCgnanVz dGlmeXJpZ2h0JywgZmFsc2UsIG51bGwpOwoJCQl9CgkJCXRoaXMuc3BlbGxvYmog PSB0aGlzLmVkaXRkb2MuYm9keTsKCgkJCXRoaXMuZWRpdGRvYy5lZGl0b3JpZCA9 IHRoaXMuZWRpdG9yaWQ7CgkJCXRoaXMuZWRpdHdpbi5lZGl0b3JpZCA9IHRoaXMu ZWRpdG9yaWQ7CgkJfTsKCgkJLyoqCgkJKiBTZXRzIHRoZSB0ZXh0IGRpcmVjdGlv biBmb3IgdGhlIGVkaXRvcgoJCSovCgkJdGhpcy5zZXRfZGlyZWN0aW9uID0gZnVu Y3Rpb24oKQoJCXsKCQkJdGhpcy5lZGl0ZG9jLmRpciA9IHRoaXMudGV4dG9iai5k aXI7CgkJfTsKCgkJLyoqCgkJKiBTZXQgdGhlIENTUyBzdHlsZSBvZiB0aGUgZWRp dG9yCgkJKi8KCQl0aGlzLnNldF9lZGl0b3Jfc3R5bGUgPSBmdW5jdGlvbigpCgkJ ewoJCQlpZiAoZG9jdW1lbnQuc3R5bGVTaGVldHNbJ3ZidWxsZXRpbl9jc3MnXSkK CQkJewoJCQkJdmFyIHJ1bGVzID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbJ3ZidWxs ZXRpbl9jc3MnXS5ydWxlczsKCQkJCXZhciBuZXdjc3MgPSAnJzsKCgkJCQlmb3Ig KHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKQoJCQkJewoJCQkJCWlm IChydWxlc1tpXS5zZWxlY3RvclRleHQuaW5kZXhPZignLnd5c2l3eWcnKSA+PSAw IHx8IHJ1bGVzW2ldLnNlbGVjdG9yVGV4dCA9PSAnQk9EWScpCgkJCQkJewoJCQkJ CQluZXdjc3MgKz0gJyAnICsgcnVsZXNbaV0uc2VsZWN0b3JUZXh0ICsgJyB7ICcg KyBydWxlc1tpXS5zdHlsZS5jc3NUZXh0ICsgJyB9ICc7CgkJCQkJfQoJCQkJfQoK CQkJCWlmICghbmV3Y3NzKQoJCQkJewoJCQkJCS8vIGZhbGwgYmFjayBpbiBjYXNl IHRoZSBuZXcgbWV0aG9kIGRvZXNuJ3Qgd29yawoJCQkJCW5ld2NzcyA9IGRvY3Vt ZW50LnN0eWxlU2hlZXRzWyd2YnVsbGV0aW5fY3NzJ10uY3NzVGV4dDsKCQkJCX0K CgkJCQl0aGlzLmVkaXRkb2MuY3JlYXRlU3R5bGVTaGVldCgpLmNzc1RleHQgPSBu ZXdjc3MgKyAnIHAgeyBtYXJnaW46IDBweDsgfSc7CgkJCQl0aGlzLmVkaXRkb2Mu Ym9keS5jbGFzc05hbWUgPSAnd3lzaXd5Zyc7CgkJCX0KCQl9OwoKCQkvKioKCQkq IEluaXQgRWRpdG9yIEZ1bmN0aW9ucwoJCSovCgkJdGhpcy5zZXRfZWRpdG9yX2Z1 bmN0aW9ucyA9IGZ1bmN0aW9uKCkKCQl7CgkJCXRoaXMuZWRpdGRvYy5vbm1vdXNl dXAgPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmVkaXRkb2Nfb25t b3VzZXVwOwoJCQl0aGlzLmVkaXRkb2Mub25rZXl1cCA9IHZCX1RleHRfRWRpdG9y X0V2ZW50cy5wcm90b3R5cGUuZWRpdGRvY19vbmtleXVwOwoKCQkJaWYgKHRoaXMu ZWRpdGRvYy5hdHRhY2hFdmVudCkKCQkJewoJCQkJdGhpcy5lZGl0ZG9jLmJvZHku YXR0YWNoRXZlbnQoIm9ucmVzaXplc3RhcnQiLCB2Ql9UZXh0X0VkaXRvcl9FdmVu dHMucHJvdG90eXBlLmVkaXRkb2Nfb25yZXNpemVzdGFydCk7CgkJCX0KCgkJCXRo aXMuZWRpdHdpbi5vbmZvY3VzID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3Rv dHlwZS5lZGl0d2luX29uZm9jdXM7CgkJCXRoaXMuZWRpdHdpbi5vbmJsdXIgPSB2 Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmVkaXR3aW5fb25ibHVyOwoJ CX07CgoJCS8qKgoJCSogU2V0IENvbnRleHQKCQkqLwoJCXRoaXMuc2V0X2NvbnRl eHQgPSBmdW5jdGlvbihjbWQpCgkJewoJCQlmb3IgKHZhciBpIGluIGNvbnRleHRj b250cm9scykKCQkJewoJCQkJdmFyIG9iaiA9IGZldGNoX29iamVjdCh0aGlzLmVk aXRvcmlkICsgJ19jbWRfJyArIGNvbnRleHRjb250cm9sc1tpXSk7CgkJCQlpZiAo b2JqICE9IG51bGwpCgkJCQl7CgkJCQkJdmFyIHN0YXRlID0gdGhpcy5lZGl0ZG9j LnF1ZXJ5Q29tbWFuZFN0YXRlKGNvbnRleHRjb250cm9sc1tpXSk7CgkJCQkJLy9h bGVydCAoY29udGV4dGNvbnRyb2xzW2ldICsgJyAnICsgc3RhdGUgKyAnICcgKyBv Ymouc3RhdGUpOwoJCQkJCWlmIChvYmouc3RhdGUgIT0gc3RhdGUpCgkJCQkJewoJ CQkJCQlvYmouc3RhdGUgPSBzdGF0ZTsKCQkJCQkJdGhpcy5idXR0b25fY29udGV4 dChvYmosIChvYmouY21kID09IGNtZCA/ICdtb3VzZW92ZXInIDogJ21vdXNlb3V0 JykpOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJdGhpcy5zZXRfZm9udF9jb250ZXh0 KCk7CgoJCQl0aGlzLnNldF9zaXplX2NvbnRleHQoKTsKCgkJCXRoaXMuc2V0X2Nv bG9yX2NvbnRleHQoKTsKCQl9OwoKCQkvKioKCQkqIFNldCBGb250IENvbnRleHQK CQkqLwoJCXRoaXMuc2V0X2ZvbnRfY29udGV4dCA9IGZ1bmN0aW9uKGZvbnRzdGF0 ZSkKCQl7CgkJCWlmICh0aGlzLmJ1dHRvbnNbJ2ZvbnRuYW1lJ10pCgkJCXsKCQkJ CWlmICh0eXBlb2YgZm9udHN0YXRlID09ICd1bmRlZmluZWQnKQoJCQkJewoJCQkJ CWZvbnRzdGF0ZSA9IHRoaXMuZWRpdGRvYy5xdWVyeUNvbW1hbmRWYWx1ZSgnZm9u dG5hbWUnKTsKCQkJCX0KCQkJCXN3aXRjaCAoZm9udHN0YXRlKQoJCQkJewoJCQkJ CWNhc2UgJyc6CgkJCQkJewoJCQkJCQlpZiAoIWlzX2llICYmIHdpbmRvdy5nZXRD b21wdXRlZFN0eWxlKQoJCQkJCQl7CgkJCQkJCQlmb250c3RhdGUgPSB0aGlzLmVk aXRkb2MuYm9keS5zdHlsZS5mb250RmFtaWx5OwoJCQkJCQl9CgkJCQkJfQoJCQkJ CWJyZWFrOwoKCQkJCQljYXNlIG51bGw6CgkJCQkJewoJCQkJCQlmb250c3RhdGUg PSAnJzsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgoJCQkJaWYgKGZvbnRzdGF0 ZSAhPSB0aGlzLmZvbnRzdGF0ZSkKCQkJCXsKCQkJCQl0aGlzLmZvbnRzdGF0ZSA9 IGZvbnRzdGF0ZTsKCQkJCQl2YXIgdGhpbmd5ID0gUEhQLnVjZmlyc3QodGhpcy5m b250c3RhdGUsICcsJyk7CgoJCQkJCWlmICh0aGlzLnBvcHVwbW9kZSkKCQkJCQl7 CgkJCQkJCWZvciAodmFyIGkgaW4gdGhpcy5mb250b3B0aW9ucykKCQkJCQkJewoJ CQkJCQkJdGhpcy5mb250b3B0aW9uc1tpXS5zdHlsZS5kaXNwbGF5ID0gKGkgPT0g dGhpbmd5ID8gJycgOiAnbm9uZScpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWVsc2UK CQkJCQl7CgkJCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5idXR0b25zWydm b250bmFtZSddLm9wdGlvbnMubGVuZ3RoOyBpKyspCgkJCQkJCXsKCQkJCQkJCWlm ICh0aGlzLmJ1dHRvbnNbJ2ZvbnRuYW1lJ10ub3B0aW9uc1tpXS52YWx1ZSA9PSB0 aGluZ3kpCgkJCQkJCQl7CgkJCQkJCQkJdGhpcy5idXR0b25zWydmb250bmFtZSdd LnNlbGVjdGVkSW5kZXggPSBpOwoJCQkJCQkJCWJyZWFrOwoJCQkJCQkJfQoJCQkJ CQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJfTsKCgkJLyoqCgkJKiBTZXQgU2l6ZSBD b250ZXh0CgkJKi8KCQl0aGlzLnNldF9zaXplX2NvbnRleHQgPSBmdW5jdGlvbihz aXplc3RhdGUpCgkJewoJCQlpZiAodGhpcy5idXR0b25zWydmb250c2l6ZSddKQoJ CQl7CgkJCQlpZiAodHlwZW9mIHNpemVzdGF0ZSA9PSAndW5kZWZpbmVkJykKCQkJ CXsKCQkJCQlzaXplc3RhdGUgPSB0aGlzLmVkaXRkb2MucXVlcnlDb21tYW5kVmFs dWUoJ2ZvbnRzaXplJyk7CgkJCQl9CgkJCQlzd2l0Y2ggKHNpemVzdGF0ZSkKCQkJ CXsKCQkJCQljYXNlIG51bGw6CgkJCQkJY2FzZSAnJzoKCQkJCQl7CgkJCQkJCWlm IChpc19tb3opCgkJCQkJCXsKCQkJCQkJCXNpemVzdGF0ZSA9IHRoaXMudHJhbnNs YXRlX2ZvbnRzaXplKHRoaXMuZWRpdGRvYy5ib2R5LnN0eWxlLmZvbnRTaXplKTsK CQkJCQkJfQoJCQkJCX0KCQkJCQlicmVhazsKCQkJCX0KCQkJCWlmIChzaXplc3Rh dGUgIT0gdGhpcy5zaXplc3RhdGUpCgkJCQl7CgkJCQkJdGhpcy5zaXplc3RhdGUg PSBzaXplc3RhdGU7CgoJCQkJCWlmICh0aGlzLnBvcHVwbW9kZSkKCQkJCQl7CgkJ CQkJCWZvciAodmFyIGkgaW4gdGhpcy5zaXplb3B0aW9ucykKCQkJCQkJewoJCQkJ CQkJdGhpcy5zaXplb3B0aW9uc1tpXS5zdHlsZS5kaXNwbGF5ID0gKGkgPT0gdGhp cy5zaXplc3RhdGUgPyAnJyA6ICdub25lJyk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJ ZWxzZQoJCQkJCXsKCQkJCQkJZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJ1dHRv bnNbJ2ZvbnRzaXplJ10ub3B0aW9ucy5sZW5ndGg7IGkrKykKCQkJCQkJewoJCQkJ CQkJaWYgKHRoaXMuYnV0dG9uc1snZm9udHNpemUnXS5vcHRpb25zW2ldLnZhbHVl ID09IHRoaXMuc2l6ZXN0YXRlKQoJCQkJCQkJewoJCQkJCQkJCXRoaXMuYnV0dG9u c1snZm9udHNpemUnXS5zZWxlY3RlZEluZGV4ID0gaTsKCQkJCQkJCQlicmVhazsK CQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX07CgoJCS8qKgoJ CSogU2V0IENvbG9yIENvbnRleHQKCQkqLwoJCXRoaXMuc2V0X2NvbG9yX2NvbnRl eHQgPSBmdW5jdGlvbihjb2xvcnN0YXRlKQoJCXsKCQkJaWYgKHRoaXMuYnV0dG9u c1snZm9yZWNvbG9yJ10pCgkJCXsKCQkJCWlmICh0eXBlb2YgY29sb3JzdGF0ZSA9 PSAndW5kZWZpbmVkJykKCQkJCXsKCQkJCQljb2xvcnN0YXRlID0gdGhpcy5lZGl0 ZG9jLnF1ZXJ5Q29tbWFuZFZhbHVlKCdmb3JlY29sb3InKTsKCQkJCX0KCQkJCWlm IChjb2xvcnN0YXRlICE9IHRoaXMuY29sb3JzdGF0ZSkKCQkJCXsKCQkJCQlpZiAo dGhpcy5wb3B1cG1vZGUpCgkJCQkJewoJCQkJCQl2YXIgb2JqID0gZmV0Y2hfb2Jq ZWN0KHRoaXMuZWRpdG9yaWQgKyAnX2NvbG9yXycgKyB0aGlzLnRyYW5zbGF0ZV9j b2xvcl9jb21tYW5kdmFsdWUodGhpcy5jb2xvcnN0YXRlKSk7CgkJCQkJCWlmIChv YmogIT0gbnVsbCkKCQkJCQkJewoJCQkJCQkJb2JqLnN0YXRlID0gZmFsc2U7CgkJ CQkJCQl0aGlzLmJ1dHRvbl9jb250ZXh0KG9iaiwgJ21vdXNlb3V0JywgJ21lbnUn KTsKCQkJCQkJfQoKCQkJCQkJdGhpcy5jb2xvcnN0YXRlID0gY29sb3JzdGF0ZTsK CgkJCQkJCWVsbWlkID0gdGhpcy5lZGl0b3JpZCArICdfY29sb3JfJyArIHRoaXMu dHJhbnNsYXRlX2NvbG9yX2NvbW1hbmR2YWx1ZShjb2xvcnN0YXRlKTsKCQkJCQkJ dmFyIG9iaiA9IGZldGNoX29iamVjdChlbG1pZCk7CgkJCQkJCWlmIChvYmogIT0g bnVsbCkKCQkJCQkJewoJCQkJCQkJb2JqLnN0YXRlID0gdHJ1ZTsKCQkJCQkJCXRo aXMuYnV0dG9uX2NvbnRleHQob2JqLCAnbW91c2VvdXQnLCAnbWVudScpOwoJCQkJ CQl9CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCXRoaXMuY29sb3JzdGF0 ZSA9IGNvbG9yc3RhdGU7CgoJCQkJCQljb2xvcnN0YXRlID0gdGhpcy50cmFuc2xh dGVfY29sb3JfY29tbWFuZHZhbHVlKHRoaXMuY29sb3JzdGF0ZSk7CgoJCQkJCQlm b3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYnV0dG9uc1snZm9yZWNvbG9yJ10ub3B0 aW9ucy5sZW5ndGg7IGkrKykKCQkJCQkJewoJCQkJCQkJaWYgKHRoaXMuYnV0dG9u c1snZm9yZWNvbG9yJ10ub3B0aW9uc1tpXS52YWx1ZSA9PSBjb2xvcnN0YXRlKQoJ CQkJCQkJewoJCQkJCQkJCXRoaXMuYnV0dG9uc1snZm9yZWNvbG9yJ10uc2VsZWN0 ZWRJbmRleCA9IGk7CgkJCQkJCQkJYnJlYWs7CgkJCQkJCQl9CgkJCQkJCX0KCQkJ CQl9CgkJCQl9CgkJCX0KCQl9OwoKCQkvKioKCQkqIEZ1bmN0aW9uIHRvIHRyYW5z bGF0ZSB0aGUgb3V0cHV0IGZyb20gcXVlcnlDb21tYW5kU3RhdGUoJ2ZvcmVjb2xv cicpIGludG8gc29tZXRoaW5nIHVzZWZ1bAoJCSoKCQkqIEBwYXJhbQlzdHJpbmcJ T3V0cHV0IGZyb20gcXVlcnlDb21tYW5kU3RhdGUoJ2ZvcmVjb2xvcicpCgkJKgoJ CSogQHJldHVybglzdHJpbmcKCQkqLwoJCXRoaXMudHJhbnNsYXRlX2NvbG9yX2Nv bW1hbmR2YWx1ZSA9IGZ1bmN0aW9uKGZvcmVjb2xvcikKCQl7CgkJCXJldHVybiB0 aGlzLnRyYW5zbGF0ZV9zaWxseV9oZXgoKGZvcmVjb2xvciAmIDB4RkYpLnRvU3Ry aW5nKDE2KSwgKChmb3JlY29sb3IgPj4gOCkgJiAweEZGKS50b1N0cmluZygxNiks ICgoZm9yZWNvbG9yID4+IDE2KSAmIDB4RkYpLnRvU3RyaW5nKDE2KSk7CgkJfTsK CgkJLyoqCgkJKiBGdW5jdGlvbiB0byB0cmFuc2xhdGUgYSBoZXggbGlrZSBGIEFC IDkgdG8gIzBGQUIwOSBhbmQgdGhlbiB0byBjb2xvcm9wdGlvbnNbJyMwRkFCMDkn XQoJCSoKCQkqIEBwYXJhbQlzdHJpbmcJUmVkIHZhbHVlCgkJKiBAcGFyYW0Jc3Ry aW5nCUdyZWVuIHZhbHVlCgkJKiBAcGFyYW0Jc3RyaW5nCUJsdWUgdmFsdWUKCQkq CgkJKiBAcmV0dXJuCXN0cmluZwlPcHRpb24gZnJvbSBjb2xvcm9wdGlvbnMgYXJy YXkKCQkqLwoJCXRoaXMudHJhbnNsYXRlX3NpbGx5X2hleCA9IGZ1bmN0aW9uKHIs IGcsIGIpCgkJewoJCQlyZXR1cm4gY29sb3JvcHRpb25zWycjJyArIChQSFAuc3Ry X3BhZChyLCAyLCAwKSArIFBIUC5zdHJfcGFkKGcsIDIsIDApICsgUEhQLnN0cl9w YWQoYiwgMiwgMCkpLnRvVXBwZXJDYXNlKCldOwoJCX07CgoJCS8qKgoJCSogQXBw bHkgRm9ybWF0dGluZwoJCSovCgkJdGhpcy5hcHBseV9mb3JtYXQgPSBmdW5jdGlv bihjbWQsIGRpYWxvZywgYXJndW1lbnQpCgkJewoJCQl0aGlzLmVkaXRkb2MuZXhl Y0NvbW1hbmQoY21kLCAodHlwZW9mIGRpYWxvZyA9PSAndW5kZWZpbmVkJyA/IGZh bHNlIDogZGlhbG9nKSwgKHR5cGVvZiBhcmd1bWVudCA9PSAndW5kZWZpbmVkJyA/ IHRydWUgOiBhcmd1bWVudCkpOwoJCQlyZXR1cm4gZmFsc2U7CgkJfTsKCgkJLyoq CgkJKiBJbnNlcnQgTGluawoJCSovCgkJdGhpcy5jcmVhdGVsaW5rID0gZnVuY3Rp b24oZSwgdXJsKQoJCXsKCQkJcmV0dXJuIHRoaXMuYXBwbHlfZm9ybWF0KCdjcmVh dGVsaW5rJywgaXNfaWUsICh0eXBlb2YgdXJsID09ICd1bmRlZmluZWQnID8gdHJ1 ZSA6IHVybCkpOwoJCX07CgoJCS8qKgoJCSogSW5zZXJ0IEVtYWlsIExpbmsKCQkq LwoJCXRoaXMuZW1haWwgPSBmdW5jdGlvbihlLCBlbWFpbCkKCQl7CgkJCWlmICh0 eXBlb2YgZW1haWwgPT0gJ3VuZGVmaW5lZCcpCgkJCXsKCQkJCWVtYWlsID0gdGhp cy5zaG93X3Byb21wdCh2YnBocmFzZVsnZW50ZXJfZW1haWxfbGluayddLCAnJywg dHJ1ZSk7CgkJCX0KCgkJCWVtYWlsID0gdGhpcy52ZXJpZnlfcHJvbXB0KGVtYWls KTsKCgkJCWlmIChlbWFpbCA9PT0gZmFsc2UpCgkJCXsKCQkJCXJldHVybiB0aGlz LmFwcGx5X2Zvcm1hdCgndW5saW5rJyk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQl2 YXIgc2VsZWN0aW9uID0gdGhpcy5nZXRfc2VsZWN0aW9uKCk7CgkJCQlyZXR1cm4g dGhpcy5pbnNlcnRfdGV4dCgnPGEgaHJlZj0ibWFpbHRvOicgKyBlbWFpbCArICci PicgKyAoc2VsZWN0aW9uID8gc2VsZWN0aW9uIDogZW1haWwpICsgJzwvYT4nLCAo c2VsZWN0aW9uID8gdHJ1ZSA6IGZhbHNlKSk7CgkJCX0KCQl9OwoKCQkvKioKCQkq IEluc2VydCBTbWlsaWUKCQkqLwoJCXRoaXMuaW5zZXJ0X3NtaWxpZSA9IGZ1bmN0 aW9uKGUsIHNtaWxpZXRleHQsIHNtaWxpZXBhdGgsIHNtaWxpZWlkKQoJCXsKCQkJ dGhpcy5jaGVja19mb2N1cygpOwoKCQkJcmV0dXJuIHRoaXMuaW5zZXJ0X3RleHQo JzxpbWcgc3JjPSInICsgc21pbGllcGF0aCArICciIGJvcmRlcj0iMCIgYWx0PSIw IiBzbWlsaWVpZD0iJyArIHNtaWxpZWlkICsgJyIgLz4nLCBmYWxzZSk7CgkJfTsK CgkJLyoqCgkJKiBHZXQgRWRpdG9yIENvbnRlbnRzCgkJKi8KCQl0aGlzLmdldF9l ZGl0b3JfY29udGVudHMgPSBmdW5jdGlvbigpCgkJewoJCQlyZXR1cm4gdGhpcy5l ZGl0ZG9jLmJvZHkuaW5uZXJIVE1MOwoJCX07CgoJCS8qKgoJCSogR2V0IFNlbGVj dGVkIFRleHQKCQkqLwoJCXRoaXMuZ2V0X3NlbGVjdGlvbiA9IGZ1bmN0aW9uKCkK CQl7CgkJCXZhciByYW5nZSA9IHRoaXMuZWRpdGRvYy5zZWxlY3Rpb24uY3JlYXRl UmFuZ2UoKTsKCQkJaWYgKHJhbmdlLmh0bWxUZXh0ICYmIHJhbmdlLnRleHQpCgkJ CXsKCQkJCXJldHVybiByYW5nZS5odG1sVGV4dDsKCQkJfQoJCQllbHNlCgkJCXsK CQkJCXZhciBkb19ub3Rfc3RlYWxfdGhpc19jb2RlX2h0bWwgPSAnJzsKCQkJCWZv ciAodmFyIGkgPSAwOyBpIDwgcmFuZ2UubGVuZ3RoOyBpKyspCgkJCQl7CgkJCQkJ ZG9fbm90X3N0ZWFsX3RoaXNfY29kZV9odG1sICs9IHJhbmdlLml0ZW0oaSkub3V0 ZXJIVE1MOwoJCQkJfQoJCQkJcmV0dXJuIGRvX25vdF9zdGVhbF90aGlzX2NvZGVf aHRtbDsKCQkJfQoJCX07CgoJCS8qKgoJCSogUGFzdGUgSFRNTAoJCSovCgkJdGhp cy5pbnNlcnRfdGV4dCA9IGZ1bmN0aW9uKHRleHQsIG1vdmVzdGFydCwgbW92ZWVu ZCkKCQl7CgkJCXRoaXMuY2hlY2tfZm9jdXMoKTsKCgkJCWlmICh0eXBlb2YodGhp cy5lZGl0ZG9jLnNlbGVjdGlvbikgIT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lZGl0 ZG9jLnNlbGVjdGlvbi50eXBlICE9ICdUZXh0JyAmJiB0aGlzLmVkaXRkb2Muc2Vs ZWN0aW9uLnR5cGUgIT0gJ05vbmUnKQoJCQl7CgkJCQltb3Zlc3RhcnQgPSBmYWxz ZTsKCQkJCXRoaXMuZWRpdGRvYy5zZWxlY3Rpb24uY2xlYXIoKTsKCQkJfQoKCQkJ dmFyIHNlbCA9IHRoaXMuZWRpdGRvYy5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsK CQkJc2VsLnBhc3RlSFRNTCh0ZXh0KTsKCgkJCWlmICh0ZXh0LmluZGV4T2YoJ1xu JykgPT0gLTEpCgkJCXsKCQkJCWlmIChtb3Zlc3RhcnQgPT09IGZhbHNlKQoJCQkJ ewoJCQkJCS8vIGRvIG5vdGhpbmcKCQkJCX0KCQkJCWVsc2UgaWYgKHR5cGVvZiBt b3Zlc3RhcnQgIT0gJ3VuZGVmaW5lZCcpCgkJCQl7CgkJCQkJc2VsLm1vdmVTdGFy dCgnY2hhcmFjdGVyJywgLXRleHQudkJsZW5ndGgoKSArbW92ZXN0YXJ0KTsKCQkJ CQlzZWwubW92ZUVuZCgnY2hhcmFjdGVyJywgLW1vdmVlbmQpOwoJCQkJfQoJCQkJ ZWxzZQoJCQkJewoJCQkJCXNlbC5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIC10ZXh0 LnZCbGVuZ3RoKCkpOwoJCQkJfQoJCQkJc2VsLnNlbGVjdCgpOwoJCQl9CgkJfTsK CgkJLyoqCgkJKiBQcmVwYXJlIEZvcm0gRm9yIFN1Ym1pdAoJCSovCgkJdGhpcy5w cmVwYXJlX3N1Ym1pdCA9IGZ1bmN0aW9uKHN1YmplY3R0ZXh0LCBtaW5jaGFycykK CQl7CgkJCXRoaXMudGV4dG9iai52YWx1ZSA9IHRoaXMuZ2V0X2VkaXRvcl9jb250 ZW50cygpOwoKCQkJdmFyIHJldHVybnZhbHVlID0gdmFsaWRhdGVtZXNzYWdlKHN0 cmlwY29kZSh0aGlzLnRleHRvYmoudmFsdWUsIHRydWUpLCBzdWJqZWN0dGV4dCwg bWluY2hhcnMpOwoKCQkJaWYgKHJldHVybnZhbHVlKQoJCQl7CgkJCQlyZXR1cm4g cmV0dXJudmFsdWU7CgkJCX0KCQkJZWxzZSBpZiAodGhpcy5jYXB0Y2hhICE9IG51 bGwgJiYgdGhpcy5jYXB0Y2hhLmZhaWxlZCkKCQkJewoJCQkJcmV0dXJuIGZhbHNl OwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJdGhpcy5jaGVja19mb2N1cygpOwoJCQkJ cmV0dXJuIGZhbHNlOwoJCQl9CgkJfQoKCQkvLyA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQoJCS8vIE1vemlsbGEgV1lTSVdZRyBvbmx5CgkJLy8gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KCQlpZiAoaXNfbW96KQoJCXsKCQkJLyoq CgkJCSogU2V0IGVkaXRvciBjb250ZW50cwoJCQkqLwoJCQl0aGlzLl9zZXRfZWRp dG9yX2NvbnRlbnRzID0gdGhpcy5zZXRfZWRpdG9yX2NvbnRlbnRzOwoJCQl0aGlz LnNldF9lZGl0b3JfY29udGVudHMgPSBmdW5jdGlvbihpbml0aWFsX3RleHQpCgkJ CXsKCQkJCXRoaXMuX3NldF9lZGl0b3JfY29udGVudHMoaW5pdGlhbF90ZXh0KTsK CgkJCQl0aGlzLmVkaXRkb2MuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCB2 Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmVkaXRkb2Nfb25rZXlwcmVz cywgdHJ1ZSk7CgkJCX07CgoJCQkvKioKCQkJKiBTZXQgZWRpdG9yIHN0eWxlCgkJ CSovCgkJCXRoaXMuc2V0X2VkaXRvcl9zdHlsZSA9IGZ1bmN0aW9uKCkKCQkJewoJ CQkJZm9yICh2YXIgc3MgPSAwOyBzcyA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxl bmd0aDsgc3MrKykKCQkJCXsKCQkJCQl0cnkKCQkJCQl7CgkJCQkJCWlmIChkb2N1 bWVudC5zdHlsZVNoZWV0c1tzc10uY3NzUnVsZXMubGVuZ3RoIDw9IDApCgkJCQkJ CXsKCQkJCQkJCWNvbnRpbnVlOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWNhdGNoKGUp CgkJCQkJeyAvLyB0cnlpbmcgdG8gYWNjZXNzIGEgc3R5bGVzaGVldCBvdXRzaWRl IHRoZSBhbGxvd2VkIGRvbWFpbgoJCQkJCQljb250aW51ZTsKCQkJCQl9CgkJCQkJ Zm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0c1tzc10uY3Nz UnVsZXMubGVuZ3RoOyBpKyspCgkJCQkJewoJCQkJCQlpZiAoZG9jdW1lbnQuc3R5 bGVTaGVldHNbc3NdLmNzc1J1bGVzW2ldLnNlbGVjdG9yVGV4dCA9PSAnLnd5c2l3 eWcnKQoJCQkJCQl7CgkJCQkJCQluZXdzcyA9IHRoaXMuZWRpdGRvYy5jcmVhdGVF bGVtZW50KCdzdHlsZScpOwoJCQkJCQkJbmV3c3MudHlwZSA9ICd0ZXh0L2Nzcyc7 CgkJCQkJCQluZXdzcy5pbm5lckhUTUwgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1tz c10uY3NzUnVsZXNbaV0uY3NzVGV4dCArICcgcCB7IG1hcmdpbjogMHB4OyB9JzsK CQkJCQkJCXRoaXMuZWRpdGRvYy5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2Rlc1sw XS5hcHBlbmRDaGlsZChuZXdzcyk7CgkJCQkJCQl0aGlzLmVkaXRkb2MuYm9keS5j bGFzc05hbWUgPSAnd3lzaXd5Zyc7CgkJCQkJCQl0aGlzLmVkaXRkb2MuYm9keS5z dHlsZS5mb250RmFtaWx5ID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbc3NdLmNzc1J1 bGVzW2ldLnN0eWxlLmZvbnRGYW1pbHk7CgkJCQkJCQl0aGlzLmVkaXRkb2MuYm9k eS5zdHlsZS5mb250U2l6ZSA9IGRvY3VtZW50LnN0eWxlU2hlZXRzW3NzXS5jc3NS dWxlc1tpXS5zdHlsZS5mb250U2l6ZTsKCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJ CQkJfQoJCQkJCX0KCQkJCX0KCQkJfTsKCgkJCS8qKgoJCQkqIFRyYW5zbGF0ZSBD b2xvciBDb21tYW5kIFZhbHVlCgkJCSovCgkJCXRoaXMudHJhbnNsYXRlX2NvbG9y X2NvbW1hbmR2YWx1ZSA9IGZ1bmN0aW9uKGZvcmVjb2xvcikKCQkJewoJCQkJaWYg KGZvcmVjb2xvciA9PSAnJyB8fCBmb3JlY29sb3IgPT0gbnVsbCkKCQkJCXsKCQkJ CQlmb3JlY29sb3IgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVkaXRk b2MuYm9keSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKTsKCQkJCX0K CgkJCQlpZiAoZm9yZWNvbG9yLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigncmdiJykg PT0gMCkKCQkJCXsKCQkJCQl2YXIgbWF0Y2hlcyA9IGZvcmVjb2xvci5tYXRjaCgv XnJnYlxzKlwoKFswLTldKyksXHMqKFswLTldKyksXHMqKFswLTldKylcKSQvKTsK CQkJCQlpZiAobWF0Y2hlcykKCQkJCQl7CgkJCQkJCXJldHVybiB0aGlzLnRyYW5z bGF0ZV9zaWxseV9oZXgoKG1hdGNoZXNbMV0gJiAweEZGKS50b1N0cmluZygxNiks IChtYXRjaGVzWzJdICYgMHhGRikudG9TdHJpbmcoMTYpLCAobWF0Y2hlc1szXSAm IDB4RkYpLnRvU3RyaW5nKDE2KSk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJ CQkJCXJldHVybiB0aGlzLnRyYW5zbGF0ZV9jb2xvcl9jb21tYW5kdmFsdWUobnVs bCk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXJldHVybiBmb3Jl Y29sb3I7CgkJCQl9CgkJCX07CgoJCQkvKioKCQkJKiBUcmFuc2xhdGUgQ1NTIGZv bnRTaXplIHRvIEhUTUwgRm9udCBTaXplCgkJCSovCgkJCXRoaXMudHJhbnNsYXRl X2ZvbnRzaXplID0gZnVuY3Rpb24oY3Nzc2l6ZSkKCQkJewoJCQkJc3dpdGNoIChj c3NzaXplKQoJCQkJewoJCQkJCWNhc2UgJzcuNXB0JzoKCQkJCQljYXNlICcxMHB4 JzogcmV0dXJuIDE7CgkJCQkJY2FzZSAnMTBwdCc6IHJldHVybiAyOwoJCQkJCWNh c2UgJzEycHQnOiByZXR1cm4gMzsKCQkJCQljYXNlICcxNHB0JzogcmV0dXJuIDQ7 CgkJCQkJY2FzZSAnMThwdCc6IHJldHVybiA1OwoJCQkJCWNhc2UgJzI0cHQnOiBy ZXR1cm4gNjsKCQkJCQljYXNlICczNnB0JzogcmV0dXJuIDc7CgkJCQkJZGVmYXVs dDogICAgIHJldHVybiAnJzsKCQkJCX0KCQkJfQoKCQkJLyoqCgkJCSogQXBwbHkg Rm9ybWF0CgkJCSovCgkJCXRoaXMuX2FwcGx5X2Zvcm1hdCA9IHRoaXMuYXBwbHlf Zm9ybWF0OwoJCQl0aGlzLmFwcGx5X2Zvcm1hdCA9IGZ1bmN0aW9uKGNtZCwgZGlh bG9nLCBhcmcpCgkJCXsKCQkJCXRoaXMuZWRpdGRvYy5leGVjQ29tbWFuZCgndXNl Q1NTJywgZmFsc2UsIHRydWUpOwoJCQkJcmV0dXJuIHRoaXMuX2FwcGx5X2Zvcm1h dChjbWQsIGRpYWxvZywgYXJnKTsKCQkJfTsKCgkJCS8qKgoJCQkqIEluc2VydCBM aW5rCgkJCSovCgkJCXRoaXMuX2NyZWF0ZWxpbmsgPSB0aGlzLmNyZWF0ZWxpbms7 CgkJCXRoaXMuY3JlYXRlbGluayA9IGZ1bmN0aW9uKGUsIHVybCkKCQkJewoJCQkJ aWYgKHR5cGVvZiB1cmwgPT0gJ3VuZGVmaW5lZCcpCgkJCQl7CgkJCQkJdXJsID0g dGhpcy5zaG93X3Byb21wdCh2YnBocmFzZVsnZW50ZXJfbGlua191cmwnXSwgJ2h0 dHA6Ly8nLCB0cnVlKTsKCQkJCX0KCQkJCWlmICgodXJsID0gdGhpcy52ZXJpZnlf cHJvbXB0KHVybCkpICE9PSBmYWxzZSkKCQkJCXsKCQkJCQlpZiAodGhpcy5nZXRf c2VsZWN0aW9uKCkpCgkJCQkJewoJCQkJCQl0aGlzLmFwcGx5X2Zvcm1hdCgndW5s aW5rJyk7CgkJCQkJCXRoaXMuX2NyZWF0ZWxpbmsoZSwgdXJsKTsKCQkJCQl9CgkJ CQkJZWxzZQoJCQkJCXsKCQkJCQkJdGhpcy5pbnNlcnRfdGV4dCgnPGEgaHJlZj0i JyArIHVybCArICciPicgKyB1cmwgKyAnPC9hPicpOwoJCQkJCX0KCQkJCX0KCQkJ CXJldHVybiB0cnVlOwoJCQl9OwoKCQkJLyoqCgkJCSogSW5zZXJ0IFNtaWxpZQoJ CQkqLwoJCQl0aGlzLmluc2VydF9zbWlsaWUgPSBmdW5jdGlvbihlLCBzbWlsaWV0 ZXh0LCBzbWlsaWVwYXRoLCBzbWlsaWVpZCkKCQkJewoJCQkJdGhpcy5jaGVja19m b2N1cygpOwoKCQkJCXRyeQoJCQkJewoJCQkJCXRoaXMuYXBwbHlfZm9ybWF0KCdJ bnNlcnRJbWFnZScsIGZhbHNlLCBzbWlsaWVwYXRoKTsKCQkJCQl2YXIgc21pbGll cyA9IGZldGNoX3RhZ3ModGhpcy5lZGl0ZG9jLmJvZHksICdpbWcnKTsKCQkJCQlm b3IgKHZhciBpID0gMDsgaSA8IHNtaWxpZXMubGVuZ3RoOyBpKyspCgkJCQkJewoJ CQkJCQlpZiAoc21pbGllc1tpXS5zcmMgPT0gc21pbGllcGF0aCkKCQkJCQkJewoJ CQkJCQkJaWYgKHNtaWxpZXNbaV0uZ2V0QXR0cmlidXRlKCdzbWlsaWVpZCcpIDwg MSkKCQkJCQkJCXsKCQkJCQkJCQlzbWlsaWVzW2ldLnNldEF0dHJpYnV0ZSgnc21p bGllaWQnLCBzbWlsaWVpZCk7CgkJCQkJCQkJc21pbGllc1tpXS5zZXRBdHRyaWJ1 dGUoJ2JvcmRlcicsICIwIik7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9 CgkJCQljYXRjaChlKQoJCQkJewoJCQkJCS8vIGZhaWxlZC4uLiBwcm9iYWJseSBk dWUgdG8gaW5zZXJ0aW5nIGEgc21pbGllIG92ZXIgYSBzbWlsaWUgaW4gbW96aWxs YQoJCQkJfQoJCQl9OwoKCQkJLyoqCgkJCSogR2V0IFNlbGVjdGlvbgoJCQkqLwoJ CQl0aGlzLmdldF9zZWxlY3Rpb24gPSBmdW5jdGlvbigpCgkJCXsKCQkJCXNlbGVj dGlvbiA9IHRoaXMuZWRpdHdpbi5nZXRTZWxlY3Rpb24oKTsKCQkJCXRoaXMuY2hl Y2tfZm9jdXMoKTsKCQkJCXJhbmdlID0gc2VsZWN0aW9uID8gc2VsZWN0aW9uLmdl dFJhbmdlQXQoMCkgOiB0aGlzLmVkaXRkb2MuY3JlYXRlUmFuZ2UoKTsKCQkJCXJl dHVybiB0aGlzLnJlYWRfbm9kZXMocmFuZ2UuY2xvbmVDb250ZW50cygpLCBmYWxz ZSk7CgkJCX07CgoJCQkvKioKCQkJKiBQYXN0ZSBUZXh0CgkJCSovCgkJCXRoaXMu aW5zZXJ0X3RleHQgPSBmdW5jdGlvbihzdHIpCgkJCXsKCQkJCXRoaXMuZWRpdGRv Yy5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCBzdHIpOwoJCQkJLypm cmFnbWVudCA9IHRoaXMuZWRpdGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7 CgkJCQlob2xkZXIgPSB0aGlzLmVkaXRkb2MuY3JlYXRlRWxlbWVudCgnc3Bhbicp OwoJCQkJaG9sZGVyLmlubmVySFRNTCA9IHN0cjsKCgkJCQl3aGlsZSAoaG9sZGVy LmZpcnN0Q2hpbGQpCgkJCQl7CgkJCQkJZnJhZ21lbnQuYXBwZW5kQ2hpbGQoaG9s ZGVyLmZpcnN0Q2hpbGQpOwoJCQkJfQoKCQkJCXRoaXMuaW5zZXJ0X25vZGVfYXRf c2VsZWN0aW9uKGZyYWdtZW50KTsqLwoJCQl9OwoKCQkJLyoqCgkJCSogU2V0IGVk aXRvciBmdW5jdGlvbnMKCQkJKi8KCQkJdGhpcy5zZXRfZWRpdG9yX2Z1bmN0aW9u cyA9IGZ1bmN0aW9uKCkKCQkJewoJCQkJdGhpcy5lZGl0ZG9jLmFkZEV2ZW50TGlz dGVuZXIoJ21vdXNldXAnLCB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBl LmVkaXRkb2Nfb25tb3VzZXVwLCB0cnVlKTsKCQkJCXRoaXMuZWRpdGRvYy5hZGRF dmVudExpc3RlbmVyKCdrZXl1cCcsIHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90 b3R5cGUuZWRpdGRvY19vbmtleXVwLCB0cnVlKTsKCQkJCXRoaXMuZWRpdHdpbi5h ZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHZCX1RleHRfRWRpdG9yX0V2ZW50cy5w cm90b3R5cGUuZWRpdHdpbl9vbmZvY3VzLCB0cnVlKTsKCQkJCXRoaXMuZWRpdHdp bi5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdkJfVGV4dF9FZGl0b3JfRXZlbnRz LnByb3RvdHlwZS5lZGl0d2luX29uYmx1ciwgdHJ1ZSk7CgkJCX07CgoKCQkJLyoq CgkJCSogQWRkIFJhbmdlIChNb3ppbGxhKQoJCQkqLwoJCQl0aGlzLmFkZF9yYW5n ZSA9IGZ1bmN0aW9uKG5vZGUpCgkJCXsKCQkJCXRoaXMuY2hlY2tfZm9jdXMoKTsK CQkJCXZhciBzZWwgPSB0aGlzLmVkaXR3aW4uZ2V0U2VsZWN0aW9uKCk7CgkJCQl2 YXIgcmFuZ2UgPSB0aGlzLmVkaXRkb2MuY3JlYXRlUmFuZ2UoKTsKCQkJCXJhbmdl LnNlbGVjdE5vZGVDb250ZW50cyhub2RlKTsKCQkJCXNlbC5yZW1vdmVBbGxSYW5n ZXMoKTsKCQkJCXNlbC5hZGRSYW5nZShyYW5nZSk7CgkJCX07CgoJCQkvKioKCQkJ KiBSZWFkIE5vZGVzIChNb3ppbGxhKQoJCQkqLwoJCQl0aGlzLnJlYWRfbm9kZXMg PSBmdW5jdGlvbihyb290LCB0b3B0YWcpCgkJCXsKCQkJCXZhciBodG1sID0gIiI7 CgkJCQl2YXIgbW96X2NoZWNrID0gL19tb3ovaTsKCgkJCQlzd2l0Y2ggKHJvb3Qu bm9kZVR5cGUpCgkJCQl7CgkJCQkJY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToKCQkJ CQljYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERToKCQkJCQl7CgkJCQkJ CXZhciBjbG9zZWQ7CgkJCQkJCWlmICh0b3B0YWcpCgkJCQkJCXsKCQkJCQkJCWNs b3NlZCA9ICFyb290Lmhhc0NoaWxkTm9kZXMoKTsKCQkJCQkJCWh0bWwgPSAnPCcg KyByb290LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKCQkJCQkJCXZhciBhdHRyID0g cm9vdC5hdHRyaWJ1dGVzOwoJCQkJCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRy Lmxlbmd0aDsgKytpKQoJCQkJCQkJewoJCQkJCQkJCXZhciBhID0gYXR0ci5pdGVt KGkpOwoJCQkJCQkJCWlmICghYS5zcGVjaWZpZWQgfHwgYS5uYW1lLm1hdGNoKG1v el9jaGVjaykgfHwgYS52YWx1ZS5tYXRjaChtb3pfY2hlY2spKQoJCQkJCQkJCXsK CQkJCQkJCQkJY29udGludWU7CgkJCQkJCQkJfQoKCQkJCQkJCQlodG1sICs9ICIg IiArIGEubmFtZS50b0xvd2VyQ2FzZSgpICsgJz0iJyArIGEudmFsdWUgKyAnIic7 CgkJCQkJCQl9CgkJCQkJCQlodG1sICs9IGNsb3NlZCA/ICIgLz4iIDogIj4iOwoJ CQkJCQl9CgkJCQkJCWZvciAodmFyIGkgPSByb290LmZpcnN0Q2hpbGQ7IGk7IGkg PSBpLm5leHRTaWJsaW5nKQoJCQkJCQl7CgkJCQkJCQlodG1sICs9IHRoaXMucmVh ZF9ub2RlcyhpLCB0cnVlKTsKCQkJCQkJfQoJCQkJCQlpZiAodG9wdGFnICYmICFj bG9zZWQpCgkJCQkJCXsKCQkJCQkJCWh0bWwgKz0gIjwvIiArIHJvb3QudGFnTmFt ZS50b0xvd2VyQ2FzZSgpICsgIj4iOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWJyZWFr OwoKCQkJCQljYXNlIE5vZGUuVEVYVF9OT0RFOgoJCQkJCXsKCQkJCQkJLy9odG1s ID0gaHRtbHNwZWNpYWxjaGFycyhyb290LmRhdGEpOwoJCQkJCQlodG1sID0gUEhQ Lmh0bWxzcGVjaWFsY2hhcnMocm9vdC5kYXRhKTsKCQkJCQl9CgkJCQkJYnJlYWs7 CgkJCQl9CgoJCQkJcmV0dXJuIGh0bWw7CgkJCX07CgoJCQkvKioKCQkJKiBJbnNl cnQgTm9kZSBhdCBTZWxlY3Rpb24gKE1vemlsbGEpCgkJCSovCgkJCXRoaXMuaW5z ZXJ0X25vZGVfYXRfc2VsZWN0aW9uID0gZnVuY3Rpb24odGV4dCkKCQkJewoJCQkJ dGhpcy5jaGVja19mb2N1cygpOwoKCQkJCXZhciBzZWwgPSB0aGlzLmVkaXR3aW4u Z2V0U2VsZWN0aW9uKCk7CgkJCQl2YXIgcmFuZ2UgPSBzZWwgPyBzZWwuZ2V0UmFu Z2VBdCgwKSA6IHRoaXMuZWRpdGRvYy5jcmVhdGVSYW5nZSgpOwoJCQkJc2VsLnJl bW92ZUFsbFJhbmdlcygpOwoJCQkJcmFuZ2UuZGVsZXRlQ29udGVudHMoKTsKCgkJ CQl2YXIgbm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyOwoJCQkJdmFyIHBvcyA9 IHJhbmdlLnN0YXJ0T2Zmc2V0OwoKCQkJCXN3aXRjaCAobm9kZS5ub2RlVHlwZSkK CQkJCXsKCQkJCQljYXNlIE5vZGUuRUxFTUVOVF9OT0RFOgoJCQkJCXsKCQkJCQkJ aWYgKHRleHQubm9kZVR5cGUgPT0gTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RF KQoJCQkJCQl7CgkJCQkJCQlzZWxOb2RlID0gdGV4dC5maXJzdENoaWxkOwoJCQkJ CQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJc2VsTm9kZSA9IHRleHQ7CgkJ CQkJCX0KCQkJCQkJbm9kZS5pbnNlcnRCZWZvcmUodGV4dCwgbm9kZS5jaGlsZE5v ZGVzW3Bvc10pOwoJCQkJCQl0aGlzLmFkZF9yYW5nZShzZWxOb2RlKTsKCQkJCQl9 CgkJCQkJYnJlYWs7CgoJCQkJCWNhc2UgTm9kZS5URVhUX05PREU6CgkJCQkJewoJ CQkJCQlpZiAodGV4dC5ub2RlVHlwZSA9PSBOb2RlLlRFWFRfTk9ERSkKCQkJCQkJ ewoJCQkJCQkJdmFyIHRleHRfbGVuZ3RoID0gcG9zICsgdGV4dC5sZW5ndGg7CgkJ CQkJCQlub2RlLmluc2VydERhdGEocG9zLCB0ZXh0LmRhdGEpOwoJCQkJCQkJcmFu Z2UgPSB0aGlzLmVkaXRkb2MuY3JlYXRlUmFuZ2UoKTsKCQkJCQkJCXJhbmdlLnNl dEVuZChub2RlLCB0ZXh0X2xlbmd0aCk7CgkJCQkJCQlyYW5nZS5zZXRTdGFydChu b2RlLCB0ZXh0X2xlbmd0aCk7CgkJCQkJCQlzZWwuYWRkUmFuZ2UocmFuZ2UpOwoJ CQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJbm9kZSA9IG5vZGUuc3Bs aXRUZXh0KHBvcyk7CgkJCQkJCQl2YXIgc2VsTm9kZTsKCQkJCQkJCWlmICh0ZXh0 Lm5vZGVUeXBlID09IE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSkKCQkJCQkJ CXsKCQkJCQkJCQlzZWxOb2RlID0gdGV4dC5maXJzdENoaWxkOwoJCQkJCQkJfQoJ CQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCXNlbE5vZGUgPSB0ZXh0OwoJCQkJ CQkJfQoJCQkJCQkJbm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZXh0LCBu b2RlKTsKCQkJCQkJCXRoaXMuYWRkX3JhbmdlKHNlbE5vZGUpOwoJCQkJCQl9CgkJ CQkJfQoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9OwoJCX0KCQkvLyA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQoJCS8vIE9wZXJhIFdZU0lXWUcgb25seQoJCS8v ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJZWxzZSBpZiAoaXNfb3Bl cmEpCgkJewoJCQkvKioKCQkJCVRoZXJlIGFyZSBzZXZlcmFsIGlzc3VlcyB3aXRo IE9wZXJhIHdoaWNoIGlzIHdoeSB0aGlzIGNvZGUgaXMgZGlzYWJsZWQ6CgkJCQkJ MS4gRm9jdXMgaXNzdWVzLCB3aGVuIGEgYnV0dG9uIGlzIHByZXNzZWQgdGhlIGVk aXRvciBsb3NlcyBmb2N1cwoJCQkJCTIuIFN0eWxpbmcgaXMgbG9zdCB3aGVuIHdl IG1ha2UgYW55IGFkanVzdG1lbnRzIHRvIHRoZSBlZGl0b3IKCQkJCQkzLiBBZGRp bmcgYSBVUkwgaXMgZXZlciBsYXN0aW5nIGV2ZW4gaWYgeW91IHB1c2ggZW50ZXIK CQkJKi8KCQkJLyoqCgkJCSogU2V0IGVkaXRvciBzdHlsZQoJCQkqLwoJCQl0aGlz LnNldF9lZGl0b3Jfc3R5bGUgPSBmdW5jdGlvbigpCgkJCXsKCQkJCWZvciAodmFy IHNzID0gMDsgc3MgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IHNzKysp CgkJCQl7CgkJCQkJdHJ5CgkJCQkJewoJCQkJCQlpZiAoZG9jdW1lbnQuc3R5bGVT aGVldHNbc3NdLmNzc1J1bGVzLmxlbmd0aCA8PSAwKQoJCQkJCQl7CgkJCQkJCQlj b250aW51ZTsKCQkJCQkJfQoJCQkJCX0KCQkJCQljYXRjaChlKQoJCQkJCXsgLy8g dHJ5aW5nIHRvIGFjY2VzcyBhIHN0eWxlc2hlZXQgb3V0c2lkZSB0aGUgYWxsb3dl ZCBkb21haW4KCQkJCQkJY29udGludWU7CgkJCQkJfQoJCQkJCWZvciAodmFyIGkg PSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHNbc3NdLmNzc1J1bGVzLmxlbmd0 aDsgaSsrKQoJCQkJCXsKCQkJCQkJaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW3Nz XS5jc3NSdWxlc1tpXS5zZWxlY3RvclRleHQgPT0gJy53eXNpd3lnJykKCQkJCQkJ ewoJCQkJCQkJbmV3c3MgPSB0aGlzLmVkaXRkb2MuY3JlYXRlRWxlbWVudCgnc3R5 bGUnKTsKCQkJCQkJCW5ld3NzLnR5cGUgPSAndGV4dC9jc3MnOwoJCQkJCQkJbmV3 c3MuaW5uZXJIVE1MID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbc3NdLmNzc1J1bGVz W2ldLmNzc1RleHQgKyAnIHAgeyBtYXJnaW46IDBweDsgfSc7CgkJCQkJCQl0aGlz LmVkaXRkb2MuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXNbMF0uYXBwZW5kQ2hp bGQobmV3c3MpOwoJCQkJCQkJdGhpcy5lZGl0ZG9jLmJvZHkuY2xhc3NOYW1lID0g J3d5c2l3eWcnOwoJCQkJCQkJdGhpcy5lZGl0ZG9jLmJvZHkuc3R5bGUuZm9udEZh bWlseSA9IGRvY3VtZW50LnN0eWxlU2hlZXRzW3NzXS5jc3NSdWxlc1tpXS5zdHls ZS5mb250RmFtaWx5OwoJCQkJCQkJdGhpcy5lZGl0ZG9jLmJvZHkuc3R5bGUuZm9u dFNpemUgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1tzc10uY3NzUnVsZXNbaV0uc3R5 bGUuZm9udFNpemU7CgkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJCX0KCQkJCQl9 CgkJCQl9CgkJCX07CgoJCQkvKioKCQkJKiBJbnNlcnQgTGluawoJCQkqLwoJCQl0 aGlzLl9jcmVhdGVsaW5rID0gdGhpcy5jcmVhdGVsaW5rOwoJCQl0aGlzLmNyZWF0 ZWxpbmsgPSBmdW5jdGlvbihlLCB1cmwpCgkJCXsKCQkJCWlmICh0eXBlb2YgdXJs ID09ICd1bmRlZmluZWQnKQoJCQkJewoJCQkJCXVybCA9IHRoaXMuc2hvd19wcm9t cHQodmJwaHJhc2VbJ2VudGVyX2xpbmtfdXJsJ10sICdodHRwOi8vJywgdHJ1ZSk7 CgkJCQl9CgkJCQlpZiAoKHVybCA9IHRoaXMudmVyaWZ5X3Byb21wdCh1cmwpKSAh PT0gZmFsc2UpCgkJCQl7CgkJCQkJaWYgKHRoaXMuZ2V0X3NlbGVjdGlvbigpKQoJ CQkJCXsKCQkJCQkJdGhpcy5hcHBseV9mb3JtYXQoJ3VubGluaycpOwoJCQkJCQl0 aGlzLl9jcmVhdGVsaW5rKGUsIHVybCk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7 CgkJCQkJCXRoaXMuaW5zZXJ0X3RleHQoJzxhIGhyZWY9IicgKyB1cmwgKyAnIj4n ICsgdXJsICsgJzwvYT4nKTsKCQkJCQl9CgkJCQl9CgkJCQlyZXR1cm4gdHJ1ZTsK CQkJfTsKCgkJCS8qKgoJCQkqIEluc2VydCBTbWlsaWUKCQkJKi8KCQkJdGhpcy5p bnNlcnRfc21pbGllID0gZnVuY3Rpb24oZSwgc21pbGlldGV4dCwgc21pbGllcGF0 aCwgc21pbGllaWQpCgkJCXsKCQkJCXRoaXMuY2hlY2tfZm9jdXMoKTsKCgkJCQl0 cnkKCQkJCXsKCQkJCQl0aGlzLmFwcGx5X2Zvcm1hdCgnSW5zZXJ0SW1hZ2UnLCBm YWxzZSwgc21pbGllcGF0aCk7CgkJCQkJdmFyIHNtaWxpZXMgPSBmZXRjaF90YWdz KHRoaXMuZWRpdGRvYy5ib2R5LCAnaW1nJyk7CgkJCQkJZm9yICh2YXIgaSA9IDA7 IGkgPCBzbWlsaWVzLmxlbmd0aDsgaSsrKQoJCQkJCXsKCQkJCQkJaWYgKHNtaWxp ZXNbaV0uc3JjID09IHNtaWxpZXBhdGgpCgkJCQkJCXsKCQkJCQkJCWlmIChzbWls aWVzW2ldLmdldEF0dHJpYnV0ZSgnc21pbGllaWQnKSA8IDEpCgkJCQkJCQl7CgkJ CQkJCQkJc21pbGllc1tpXS5zZXRBdHRyaWJ1dGUoJ3NtaWxpZWlkJywgc21pbGll aWQpOwoJCQkJCQkJCXNtaWxpZXNbaV0uc2V0QXR0cmlidXRlKCdib3JkZXInLCAi MCIpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJY2F0Y2goZSkK CQkJCXsKCQkJCQkvLyBmYWlsZWQuLi4gcHJvYmFibHkgZHVlIHRvIGluc2VydGlu ZyBhIHNtaWxpZSBvdmVyIGEgc21pbGllIGluIG1vemlsbGEKCQkJCX0KCQkJfTsK CgkJCS8qKgoJCQkqIEdldCBTZWxlY3Rpb24KCQkJKi8KCQkJdGhpcy5nZXRfc2Vs ZWN0aW9uID0gZnVuY3Rpb24oKQoJCQl7CgkJCQlzZWxlY3Rpb24gPSB0aGlzLmVk aXR3aW4uZ2V0U2VsZWN0aW9uKCk7CgkJCQl0aGlzLmNoZWNrX2ZvY3VzKCk7CgkJ CQlyYW5nZSA9IHNlbGVjdGlvbiA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApIDog dGhpcy5lZGl0ZG9jLmNyZWF0ZVJhbmdlKCk7CgkJCQl2YXIgbHNzZXJpYWxpemVy ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlTFNTZXJpYWxpemVyKCk7 CgkJCQlyZXR1cm4gbHNzZXJpYWxpemVyLndyaXRlVG9TdHJpbmcocmFuZ2UuY2xv bmVDb250ZW50cygpKTsKCQkJfTsKCgkJCS8qKgoJCQkqIFBhc3RlIFRleHQKCQkJ Ki8KCQkJdGhpcy5pbnNlcnRfdGV4dCA9IGZ1bmN0aW9uKHN0cikKCQkJewoJCQkJ dGhpcy5lZGl0ZG9jLmV4ZWNDb21tYW5kKCdpbnNlcnRIVE1MJywgZmFsc2UsIHN0 cik7CgkJCX07CgkJfQoJfQoJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KCS8vIFN0YW5kYXJkIGVkaXRvcgoJLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KCWVsc2UKCXsKCQl0aGlzLmRpc2FibGVfZWRpdG9yID0gZnVuY3Rp b24odGV4dCkKCQl7CgkJCWlmICghdGhpcy5kaXNhYmxlZCkKCQkJewoJCQkJdGhp cy5kaXNhYmxlZCA9IHRydWU7CgoJCQkJaWYgKHR5cGVvZiB0ZXh0ICE9ICd1bmRl ZmluZWQnKQoJCQkJewoJCQkJCXRoaXMuZWRpdGJveC52YWx1ZSA9IHRleHQ7CgkJ CQl9CgkJCQl0aGlzLmVkaXRib3guZGlzYWJsZWQgPSB0cnVlOwoJCQl9CgkJfTsK CgkJdGhpcy5lbmFibGVfZWRpdG9yID0gZnVuY3Rpb24odGV4dCkKCQl7CgkJCWlm ICh0eXBlb2YgdGV4dCAhPSAndW5kZWZpbmVkJykKCQkJewoJCQkJdGhpcy5lZGl0 Ym94LnZhbHVlID0gdGV4dDsKCQkJfQoJCQl0aGlzLmVkaXRib3guZGlzYWJsZWQg PSBmYWxzZTsKCgkJCXRoaXMuZGlzYWJsZWQgPSBmYWxzZTsKCQl9OwoKCQkvKioK CQkqIFdyaXRlcyBjb250ZW50cyB0byB0aGUgPHRleHRhcmVhPgoJCSoKCQkqIEBw YXJhbQlvYmplY3QJPHRleHRhcmVhPgoJCSogQHBhcmFtCXN0cmluZwlJbml0aWFs IHRleHQKCQkqLwoJCXRoaXMud3JpdGVfZWRpdG9yX2NvbnRlbnRzID0gZnVuY3Rp b24odGV4dCkKCQl7CgkJCXRoaXMudGV4dG9iai52YWx1ZSA9IHRleHQ7CgkJfQoK CQkvKioKCQkqIFB1dCB0aGUgdGV4dCBpbnRvIHRoZSBlZGl0b3IKCQkqLwoJCXRo aXMuc2V0X2VkaXRvcl9jb250ZW50cyA9IGZ1bmN0aW9uKGluaXRpYWxfdGV4dCkK CQl7CgkJCXZhciBpZnJhbWUgPSB0aGlzLnRleHRvYmoucGFyZW50Tm9kZS5nZXRF bGVtZW50c0J5VGFnTmFtZSgnaWZyYW1lJylbMF07CgkJCWlmIChpZnJhbWUpCgkJ CXsKCQkJCXRoaXMudGV4dG9iai5zdHlsZS5kaXNwbGF5ID0gJyc7CgkJCQl0aGlz LnRleHRvYmouc3R5bGUud2lkdGggPSBpZnJhbWUuc3R5bGUud2lkdGg7CgkJCQl0 aGlzLnRleHRvYmouc3R5bGUuaGVpZ2h0ID0gaWZyYW1lLnN0eWxlLmhlaWdodDsK CgkJCQlpZnJhbWUuc3R5bGUud2lkdGggPSAnMHB4JzsKCQkJCWlmcmFtZS5zdHls ZS5oZWlnaHQgPSAnMHB4JzsKCQkJCWlmcmFtZS5zdHlsZS5ib3JkZXIgPSAnbm9u ZSc7CgkJCX0KCgkJCXRoaXMuZWRpdHdpbiA9IHRoaXMudGV4dG9iajsKCQkJdGhp cy5lZGl0ZG9jID0gdGhpcy50ZXh0b2JqOwoJCQl0aGlzLmVkaXRib3ggPSB0aGlz LnRleHRvYmo7CgkJCXRoaXMuc3BlbGxvYmogPSB0aGlzLnRleHRvYmo7CgoJCQlp ZiAodHlwZW9mIGluaXRpYWxfdGV4dCAhPSAndW5kZWZpbmVkJykKCQkJewoJCQkJ dGhpcy53cml0ZV9lZGl0b3JfY29udGVudHMoaW5pdGlhbF90ZXh0KTsKCQkJfQoK CQkJdGhpcy5lZGl0ZG9jLmVkaXRvcmlkID0gdGhpcy5lZGl0b3JpZDsKCQkJdGhp cy5lZGl0d2luLmVkaXRvcmlkID0gdGhpcy5lZGl0b3JpZDsKCgkJCXRoaXMuaGlz dG9yeS5hZGRfc25hcHNob3QodGhpcy5nZXRfZWRpdG9yX2NvbnRlbnRzKCkpOwoJ CX07CgoJCS8qKgoJCSogU2V0IHRoZSBDU1Mgc3R5bGUgb2YgdGhlIGVkaXRvcgoJ CSovCgkJdGhpcy5zZXRfZWRpdG9yX3N0eWxlID0gZnVuY3Rpb24oKQoJCXsKCQl9 OwoKCQkvKioKCQkqIEluaXQgRWRpdG9yIEZ1bmN0aW9ucwoJCSovCgkJdGhpcy5z ZXRfZWRpdG9yX2Z1bmN0aW9ucyA9IGZ1bmN0aW9uKCkKCQl7CgkJCWlmICh0aGlz LmVkaXRkb2MuYWRkRXZlbnRMaXN0ZW5lcikKCQkJewoJCQkJdGhpcy5lZGl0ZG9j LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgdkJfVGV4dF9FZGl0b3JfRXZl bnRzLnByb3RvdHlwZS5lZGl0ZG9jX29ua2V5cHJlc3MsIGZhbHNlKTsKCQkJfQoJ CQllbHNlIGlmIChpc19pZSkKCQkJewoJCQkJdGhpcy5lZGl0ZG9jLm9ua2V5ZG93 biA9IHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZWRpdGRvY19vbmtl eXByZXNzOwoJCQl9CgoJCQl0aGlzLmVkaXR3aW4ub25mb2N1cyA9IHZCX1RleHRf RWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZWRpdHdpbl9vbmZvY3VzOwoJCQl0aGlz LmVkaXR3aW4ub25ibHVyID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlw ZS5lZGl0d2luX29uYmx1cjsKCQl9OwoKCQkvKioKCQkqIFNldCBDb250ZXh0CgkJ Ki8KCQl0aGlzLnNldF9jb250ZXh0ID0gZnVuY3Rpb24oKQoJCXsKCQl9OwoKCQkv KioKCQkqIEFwcGx5IGZvcm1hdHRpbmcKCQkqLwoJCXRoaXMuYXBwbHlfZm9ybWF0 ID0gZnVuY3Rpb24oY21kLCBkaWFsb2csIGFyZ3VtZW50KQoJCXsKCQkJLy8gdW5k byAmIHJlZG8gYXJyYXkgcG9wcwoKCQkJc3dpdGNoIChjbWQpCgkJCXsKCQkJCWNh c2UgJ2JvbGQnOgoJCQkJY2FzZSAnaXRhbGljJzoKCQkJCWNhc2UgJ3VuZGVybGlu ZSc6CgkJCQl7CgkJCQkJdGhpcy53cmFwX3RhZ3MoY21kLnN1YnN0cigwLCAxKSwg ZmFsc2UpOwoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQljYXNlICdqdXN0aWZ5bGVm dCc6CgkJCQljYXNlICdqdXN0aWZ5Y2VudGVyJzoKCQkJCWNhc2UgJ2p1c3RpZnly aWdodCc6CgkJCQl7CgkJCQkJdGhpcy53cmFwX3RhZ3MoY21kLnN1YnN0cig3KSwg ZmFsc2UpOwoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQljYXNlICdpbmRlbnQnOgoJ CQkJewoJCQkJCXRoaXMud3JhcF90YWdzKGNtZCwgZmFsc2UpOwoJCQkJCXJldHVy bjsKCQkJCX0KCgkJCQljYXNlICdmb250bmFtZSc6CgkJCQl7CgkJCQkJdGhpcy53 cmFwX3RhZ3MoJ2ZvbnQnLCBhcmd1bWVudCk7CgkJCQkJcmV0dXJuOwoJCQkJfQoK CQkJCWNhc2UgJ2ZvbnRzaXplJzoKCQkJCXsKCQkJCQl0aGlzLndyYXBfdGFncygn c2l6ZScsIGFyZ3VtZW50KTsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJY2FzZSAn Zm9yZWNvbG9yJzoKCQkJCXsKCQkJCQl0aGlzLndyYXBfdGFncygnY29sb3InLCBh cmd1bWVudCk7CgkJCQkJcmV0dXJuOwoJCQkJfQoKCQkJCWNhc2UgJ2NyZWF0ZWxp bmsnOgoJCQkJewoJCQkJCXZhciBzZWwgPSB0aGlzLmdldF9zZWxlY3Rpb24oKTsK CQkJCQlpZiAoc2VsKQoJCQkJCXsKCQkJCQkJdGhpcy53cmFwX3RhZ3MoJ3VybCcs IGFyZ3VtZW50KTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJdGhpcy53 cmFwX3RhZ3MoJ3VybCcsIGFyZ3VtZW50LCBhcmd1bWVudCk7CgkJCQkJfQoJCQkJ CXJldHVybjsKCQkJCX0KCgkJCQljYXNlICdpbnNlcnRpbWFnZSc6CgkJCQl7CgkJ CQkJdGhpcy53cmFwX3RhZ3MoJ2ltZycsIGZhbHNlLCBhcmd1bWVudCk7CgkJCQkJ cmV0dXJuOwoJCQkJfQoKCQkJCWNhc2UgJ3JlbW92ZWZvcm1hdCc6CgkJCQlyZXR1 cm47CgkJCX0KCgkJCS8vYWxlcnQoJ2NtZCA6OiAnICsgY21kICsgJ1xuZGlhbG9n IDo6ICcgKyBkaWFsb2cgKyAnXG5hcmd1bWVudCA6OiAnICsgYXJndW1lbnQpOwoJ CX07CgoJCXRoaXMudW5kbyA9IGZ1bmN0aW9uKCkKCQl7CgkJCXRoaXMuaGlzdG9y eS5hZGRfc25hcHNob3QodGhpcy5nZXRfZWRpdG9yX2NvbnRlbnRzKCkpOwoJCQl0 aGlzLmhpc3RvcnkubW92ZV9jdXJzb3IoLTEpOwoJCQlpZiAoKHN0ciA9IHRoaXMu aGlzdG9yeS5nZXRfc25hcHNob3QoKSkgIT09IGZhbHNlKQoJCQl7CgkJCQl0aGlz LmVkaXRkb2MudmFsdWUgPSBzdHI7CgkJCX0KCQl9OwoKCQl0aGlzLnJlZG8gPSBm dW5jdGlvbigpCgkJewoJCQl0aGlzLmhpc3RvcnkubW92ZV9jdXJzb3IoMSk7CgkJ CWlmICgoc3RyID0gdGhpcy5oaXN0b3J5LmdldF9zbmFwc2hvdCgpKSAhPT0gZmFs c2UpCgkJCXsKCQkJCXRoaXMuZWRpdGRvYy52YWx1ZSA9IHN0cjsKCQkJfQoJCX07 CgoJCS8qKgoJCSogU3RyaXAgYSBzaW1wbGUgdGFnLi4uCgkJKi8KCQl0aGlzLnN0 cmlwX3NpbXBsZSA9IGZ1bmN0aW9uKHRhZywgc3RyLCBpdGVyYXRpb25zKQoJCXsK CQkJdmFyIG9wZW50YWcgPSAnWycgKyB0YWcgKyAnXSc7CgkJCXZhciBjbG9zZXRh ZyA9ICdbLycgKyB0YWcgKyAnXSc7CgoJCQlpZiAodHlwZW9mIGl0ZXJhdGlvbnMg PT0gJ3VuZGVmaW5lZCcpCgkJCXsKCQkJCWl0ZXJhdGlvbnMgPSAtMTsKCQkJfQoK CQkJd2hpbGUgKChzdGFydGluZGV4ID0gUEhQLnN0cmlwb3Moc3RyLCBvcGVudGFn KSkgIT09IGZhbHNlICYmIGl0ZXJhdGlvbnMgIT0gMCkKCQkJewoJCQkJaXRlcmF0 aW9ucyAtLTsKCQkJCWlmICgoc3RvcGluZGV4ID0gUEhQLnN0cmlwb3Moc3RyLCBj bG9zZXRhZykpICE9PSBmYWxzZSkKCQkJCXsKCQkJCQl2YXIgdGV4dCA9IHN0ci5z dWJzdHIoc3RhcnRpbmRleCArIG9wZW50YWcubGVuZ3RoLCBzdG9waW5kZXggLSBz dGFydGluZGV4IC0gb3BlbnRhZy5sZW5ndGgpOwoJCQkJCXN0ciA9IHN0ci5zdWJz dHIoMCwgc3RhcnRpbmRleCkgKyB0ZXh0ICsgc3RyLnN1YnN0cihzdG9waW5kZXgg KyBjbG9zZXRhZy5sZW5ndGgpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWJy ZWFrOwoJCQkJfQoJCQl9CgoJCQlyZXR1cm4gc3RyOwoJCX07CgoJCS8qKgoJCSog U3RyaXAgYSB0YWcgd2l0aCBhbiBvcHRpb24KCQkqLwoJCXRoaXMuc3RyaXBfY29t cGxleCA9IGZ1bmN0aW9uKHRhZywgc3RyLCBpdGVyYXRpb25zKQoJCXsKCQkJdmFy IG9wZW50YWcgPSAnWycgKyB0YWcgKyAnPSc7CgkJCXZhciBjbG9zZXRhZyA9ICdb LycgKyB0YWcgKyAnXSc7CgoJCQlpZiAodHlwZW9mIGl0ZXJhdGlvbnMgPT0gJ3Vu ZGVmaW5lZCcpCgkJCXsKCQkJCWl0ZXJhdGlvbnMgPSAtMTsKCQkJfQoKCQkJd2hp bGUgKChzdGFydGluZGV4ID0gUEhQLnN0cmlwb3Moc3RyLCBvcGVudGFnKSkgIT09 IGZhbHNlICYmIGl0ZXJhdGlvbnMgIT0gMCkKCQkJewoJCQkJaXRlcmF0aW9ucyAt LTsKCQkJCWlmICgoc3RvcGluZGV4ID0gUEhQLnN0cmlwb3Moc3RyLCBjbG9zZXRh ZykpICE9PSBmYWxzZSkKCQkJCXsKCQkJCQl2YXIgb3BlbmVuZCA9IFBIUC5zdHJp cG9zKHN0ciwgJ10nLCBzdGFydGluZGV4KTsKCQkJCQlpZiAob3BlbmVuZCAhPT0g ZmFsc2UgJiYgb3BlbmVuZCA+IHN0YXJ0aW5kZXggJiYgb3BlbmVuZCA8IHN0b3Bp bmRleCkKCQkJCQl7CgkJCQkJCXZhciB0ZXh0ID0gc3RyLnN1YnN0cihvcGVuZW5k ICsgMSwgc3RvcGluZGV4IC0gb3BlbmVuZCAtIDEpOwoJCQkJCQlzdHIgPSBzdHIu c3Vic3RyKDAsIHN0YXJ0aW5kZXgpICsgdGV4dCArIHN0ci5zdWJzdHIoc3RvcGlu ZGV4ICsgY2xvc2V0YWcubGVuZ3RoKTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsK CQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWJy ZWFrOwoJCQkJfQoJCQl9CgoJCQlyZXR1cm4gc3RyOwoJCX07CgoJCS8qKgoJCSog UmVtb3ZlIEZvcm1hdHRpbmcKCQkqLwoJCXRoaXMucmVtb3ZlZm9ybWF0ID0gZnVu Y3Rpb24oZSkKCQl7CgkJCXZhciBzaW1wbGVzdHJpcCA9IG5ldyBBcnJheSgnYics ICdpJywgJ3UnKTsKCQkJdmFyIGNvbXBsZXhzdHJpcCA9IG5ldyBBcnJheSgnZm9u dCcsICdjb2xvcicsICdzaXplJyk7CgoJCQl2YXIgc3RyID0gdGhpcy5nZXRfc2Vs ZWN0aW9uKCk7CgkJCWlmIChzdHIgPT09IGZhbHNlKQoJCQl7CgkJCQlyZXR1cm47 CgkJCX0KCgkJCS8vIHNpbXBsZSBzdHJpcHBlcgoJCQlmb3IgKHZhciB0YWcgaW4g c2ltcGxlc3RyaXApCgkJCXsKCQkJCXN0ciA9IHRoaXMuc3RyaXBfc2ltcGxlKHNp bXBsZXN0cmlwW3RhZ10sIHN0cik7CgkJCX0KCgkJCS8vIGNvbXBsZXggc3RyaXBw ZXIKCQkJZm9yICh2YXIgdGFnIGluIGNvbXBsZXhzdHJpcCkKCQkJewoJCQkJc3Ry ID0gdGhpcy5zdHJpcF9jb21wbGV4KGNvbXBsZXhzdHJpcFt0YWddLCBzdHIpOwoJ CQl9CgoJCQl0aGlzLmluc2VydF90ZXh0KHN0cik7CgkJfTsKCgkJLyoqCgkJKiBJ bnNlcnQgTGluawoJCSovCgkJdGhpcy5jcmVhdGVsaW5rID0gZnVuY3Rpb24oZSwg dXJsKQoJCXsKCQkJdGhpcy5wcm9tcHRfbGluaygndXJsJywgdXJsLCB2YnBocmFz ZVsnZW50ZXJfbGlua191cmwnXSwgJ2h0dHA6Ly8nKTsKCQl9OwoKCQkvKioKCQkq IFJlbW92ZSBMaW5rCgkJKi8KCQl0aGlzLnVubGluayA9IGZ1bmN0aW9uKGUpCgkJ ewoJCQl2YXIgc2VsID0gdGhpcy5nZXRfc2VsZWN0aW9uKCk7CgkJCXNlbCA9IHRo aXMuc3RyaXBfc2ltcGxlKCd1cmwnLCBzZWwpOwoJCQlzZWwgPSB0aGlzLnN0cmlw X2NvbXBsZXgoJ3VybCcsIHNlbCk7CgkJCXRoaXMuaW5zZXJ0X3RleHQoc2VsKTsK CQl9OwoKCQkvKioKCQkqIEluc2VydCBFbWFpbCBMaW5rCgkJKi8KCQl0aGlzLmVt YWlsID0gZnVuY3Rpb24oZSwgZW1haWwpCgkJewoJCQl0aGlzLnByb21wdF9saW5r KCdlbWFpbCcsIGVtYWlsLCB2YnBocmFzZVsnZW50ZXJfZW1haWxfbGluayddLCAn Jyk7CgkJfTsKCgkJLyoqCgkJKiBJbnNlcnQgU21pbGllCgkJKi8KCQl0aGlzLmlu c2VydF9zbWlsaWUgPSBmdW5jdGlvbihlLCBzbWlsaWV0ZXh0KQoJCXsKCQkJdGhp cy5jaGVja19mb2N1cygpOwoKCQkJcmV0dXJuIHRoaXMuaW5zZXJ0X3RleHQoc21p bGlldGV4dCwgc21pbGlldGV4dC5sZW5ndGgsIDApOwoJCX07CgoJCS8qKgoJCSog V3JhcHBlciBmb3IgTGluayAvIEVtYWlsIExpbmsgaW5zZXJ0CgkJKi8KCQl0aGlz LnByb21wdF9saW5rID0gZnVuY3Rpb24odGFnbmFtZSwgdmFsdWUsIHBocmFzZSwg aXByb21wdCkKCQl7CgkJCWlmICh0eXBlb2YgdmFsdWUgPT0gJ3VuZGVmaW5lZCcp CgkJCXsKCQkJCXZhbHVlID0gdGhpcy5zaG93X3Byb21wdChwaHJhc2UsIGlwcm9t cHQsIHRydWUpOwoJCQl9CgkJCWlmICgodmFsdWUgPSB0aGlzLnZlcmlmeV9wcm9t cHQodmFsdWUpKSAhPT0gZmFsc2UpCgkJCXsKCQkJCWlmICh0aGlzLmdldF9zZWxl Y3Rpb24oKSkKCQkJCXsKCQkJCQl0aGlzLmFwcGx5X2Zvcm1hdCgndW5saW5rJyk7 CgkJCQkJdGhpcy53cmFwX3RhZ3ModGFnbmFtZSwgdmFsdWUpOwoJCQkJfQoJCQkJ ZWxzZQoJCQkJewoJCQkJCXRoaXMud3JhcF90YWdzKHRhZ25hbWUsIHZhbHVlLCB2 YWx1ZSk7CgkJCQl9CgkJCX0KCQkJcmV0dXJuIHRydWU7CgkJfTsKCgkJLyoqCgkJ KiBJbnNlcnQgT3JkZXJlZCBMaXN0CgkJKi8KCQl0aGlzLmluc2VydG9yZGVyZWRs aXN0ID0gZnVuY3Rpb24oZSkKCQl7CgkJCXRoaXMuaW5zZXJ0bGlzdCh2YnBocmFz ZVsnaW5zZXJ0X29yZGVyZWRfbGlzdCddLCAnMScpOwoJCX07CgoJCS8qKgoJCSog SW5zZXJ0IFVub3JkZXJlZCBMaXN0CgkJKi8KCQl0aGlzLmluc2VydHVub3JkZXJl ZGxpc3QgPSBmdW5jdGlvbihlKQoJCXsKCQkJdGhpcy5pbnNlcnRsaXN0KHZicGhy YXNlWydpbnNlcnRfdW5vcmRlcmVkX2xpc3QnXSwgJycpOwoJCX07CgoJCS8qKgoJ CSogSW5zZXJ0IExpc3QKCQkqLwoJCXRoaXMuaW5zZXJ0bGlzdCA9IGZ1bmN0aW9u KHBocmFzZSwgbGlzdHR5cGUpCgkJewoJCQl2YXIgb3BlbnRhZyA9ICdbTElTVCcg KyAobGlzdHR5cGUgPyAoJz0nICsgbGlzdHR5cGUpIDogJycpICsgJ11cbic7CgkJ CXZhciBjbG9zZXRhZyA9ICdbL0xJU1RdJzsKCgkJCWlmICh0eHQgPSB0aGlzLmdl dF9zZWxlY3Rpb24oKSkKCQkJewoJCQkJdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCgn KFtcclxuXSt8XltcclxuXSopKD8hXFxbXFwqXFxdfFxcW1xcLz9saXN0KSg/PVte XHJcbl0pJywgJ2dpJyk7CgkJCQl0eHQgPSBvcGVudGFnICsgUEhQLnRyaW0odHh0 KS5yZXBsYWNlKHJlZ2V4LCAnJDFbKl0nKSArICdcbicgKyBjbG9zZXRhZzsKCQkJ CXRoaXMuaW5zZXJ0X3RleHQodHh0LCB0eHQudkJsZW5ndGgoKSwgMCk7CgkJCX0K CQkJZWxzZQoJCQl7CgkJCQl0aGlzLmluc2VydF90ZXh0KG9wZW50YWcgKyBjbG9z ZXRhZywgb3BlbnRhZy5sZW5ndGgsIGNsb3NldGFnLmxlbmd0aCk7CgoJCQkJaWYg KGlzX2llNykKCQkJCXsKCQkJCQkvLyByZXNwZWN0IGEgPGJhc2U+IHRhZyAoc2Vl ICMyMzA5NykKCQkJCQl2YXIgYmFzZV90YWcgPSBmZXRjaF90YWdzKGRvY3VtZW50 LCAnYmFzZScpOwoJCQkJCXZhciBtb2RhbF9wcmVmaXg7CgkJCQkJaWYgKGJhc2Vf dGFnICYmIGJhc2VfdGFnWzBdICYmIGJhc2VfdGFnWzBdLmhyZWYpCgkJCQkJewoJ CQkJCQltb2RhbF9wcmVmaXggPSBiYXNlX3RhZ1swXS5ocmVmOwoJCQkJCX0KCQkJ CQllbHNlCgkJCQkJewoJCQkJCQltb2RhbF9wcmVmaXggPSAnJzsKCQkJCQl9CgkJ CQkJdmFyIGxpc3R2YWx1ZSA9IHdpbmRvdy5zaG93TW9kYWxEaWFsb2cobW9kYWxf cHJlZml4ICsgImNsaWVudHNjcmlwdC9pZXByb21wdC5odG1sPyIsIHsgJ3ZhbHVl JzogJycsICdsYWJlbCc6IHZicGhyYXNlWydlbnRlcl9saXN0X2l0ZW0nXSwgJ2Rp cic6IGRvY3VtZW50LmRpciwgJ3RpdGxlJzogZG9jdW1lbnQudGl0bGUsICdsaXN0 dHlwZSc6IGxpc3R0eXBlIH0sICJkaWFsb2dXaWR0aDozMjBweDsgZGlhbG9nSGVp Z2h0OjIzMnB4OyBkaWFsb2dUb3A6IiArIChwYXJzZUludCh3aW5kb3cuc2NyZWVu VG9wKSArIHBhcnNlSW50KHdpbmRvdy5ldmVudC5jbGllbnRZKSArIHBhcnNlSW50 KGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSAtIDEwMCkgKyAicHg7IGRpYWxvZ0xl ZnQ6IiArIChwYXJzZUludCh3aW5kb3cuc2NyZWVuTGVmdCkgKyBwYXJzZUludCh3 aW5kb3cuZXZlbnQuY2xpZW50WCkgKyBwYXJzZUludChkb2N1bWVudC5ib2R5LnNj cm9sbExlZnQpIC0gMTYwKSArICJweDsgcmVzaXphYmxlOiBObzsiKTsKCQkJCQlp ZiAodGhpcy52ZXJpZnlfcHJvbXB0KGxpc3R2YWx1ZSkpCgkJCQkJewoJCQkJCQl0 aGlzLmluc2VydF90ZXh0KGxpc3R2YWx1ZSwgbGlzdHZhbHVlLnZCbGVuZ3RoKCks IDApOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQl3aGlsZSAobGlz dHZhbHVlID0gdGhpcy5zaG93X3Byb21wdCh2YnBocmFzZVsnZW50ZXJfbGlzdF9p dGVtJ10sICcnLCBmYWxzZSkpCgkJCQkJewoJCQkJCQlsaXN0dmFsdWUgPSAnWypd JyArIGxpc3R2YWx1ZSArICdcbic7CgkJCQkJCXRoaXMuaW5zZXJ0X3RleHQobGlz dHZhbHVlLCBsaXN0dmFsdWUudkJsZW5ndGgoKSwgMCk7CgkJCQkJfQoJCQkJfQoJ CQl9CgkJfTsKCgkJLyoqCgkJKiBPdXRkZW50CgkJKi8KCQl0aGlzLm91dGRlbnQg PSBmdW5jdGlvbihlKQoJCXsKCQkJdmFyIHNlbCA9IHRoaXMuZ2V0X3NlbGVjdGlv bigpOwoJCQlzZWwgPSB0aGlzLnN0cmlwX3NpbXBsZSgnaW5kZW50Jywgc2VsLCAx KTsKCQkJdGhpcy5pbnNlcnRfdGV4dChzZWwpOwoJCX07CgoJCS8qKgoJCSogR2V0 IEVkaXRvciBDb250ZW50cwoJCSovCgkJdGhpcy5nZXRfZWRpdG9yX2NvbnRlbnRz ID0gZnVuY3Rpb24oKQoJCXsKCQkJcmV0dXJuIHRoaXMuZWRpdGRvYy52YWx1ZTsK CQl9OwoKCQkvKioKCQkqIEdldCBTZWxlY3RlZCBUZXh0CgkJKi8KCQl0aGlzLmdl dF9zZWxlY3Rpb24gPSBmdW5jdGlvbigpCgkJewoJCQlpZiAodHlwZW9mKHRoaXMu ZWRpdGRvYy5zZWxlY3Rpb25TdGFydCkgIT0gJ3VuZGVmaW5lZCcpCgkJCXsKCQkJ CXJldHVybiB0aGlzLmVkaXRkb2MudmFsdWUuc3Vic3RyKHRoaXMuZWRpdGRvYy5z ZWxlY3Rpb25TdGFydCwgdGhpcy5lZGl0ZG9jLnNlbGVjdGlvbkVuZCAtIHRoaXMu ZWRpdGRvYy5zZWxlY3Rpb25TdGFydCk7CgkJCX0KCQkJZWxzZSBpZiAoZG9jdW1l bnQuc2VsZWN0aW9uICYmIGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSkK CQkJewoJCQkJcmV0dXJuIGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgp LnRleHQ7CgkJCX0KCQkJZWxzZSBpZiAod2luZG93LmdldFNlbGVjdGlvbikKCQkJ ewoJCQkJcmV0dXJuIHdpbmRvdy5nZXRTZWxlY3Rpb24oKSArICcnOwoJCQl9CgkJ CWVsc2UKCQkJewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJfTsKCgkJLyoqCgkJ KiBQYXN0ZSBIVE1MCgkJKi8KCQl0aGlzLmluc2VydF90ZXh0ID0gZnVuY3Rpb24o dGV4dCwgbW92ZXN0YXJ0LCBtb3ZlZW5kKQoJCXsKCQkJdmFyIHNlbGVjdGlvbl9j aGFuZ2VkID0gZmFsc2U7CgoJCQl0aGlzLmNoZWNrX2ZvY3VzKCk7CgkJCQoJCQlp ZiAodHlwZW9mKHRoaXMuZWRpdGRvYy5zZWxlY3Rpb25TdGFydCkgIT0gJ3VuZGVm aW5lZCcpCgkJCXsKCQkJCXZhciBvcG4gPSB0aGlzLmVkaXRkb2Muc2VsZWN0aW9u U3RhcnQgKyAwOwoJCQkJdmFyIHNjcm9sbHBvcyA9IHRoaXMuZWRpdGRvYy5zY3Jv bGxUb3A7CgoJCQkJdGhpcy5lZGl0ZG9jLnZhbHVlID0gdGhpcy5lZGl0ZG9jLnZh bHVlLnN1YnN0cigwLCB0aGlzLmVkaXRkb2Muc2VsZWN0aW9uU3RhcnQpICsgdGV4 dCArIHRoaXMuZWRpdGRvYy52YWx1ZS5zdWJzdHIodGhpcy5lZGl0ZG9jLnNlbGVj dGlvbkVuZCk7CgoJCQkJaWYgKG1vdmVzdGFydCA9PT0gZmFsc2UpCgkJCQl7CgkJ CQkJLy8gZG8gbm90aGluZwoJCQkJfQoJCQkJZWxzZSBpZiAodHlwZW9mIG1vdmVz dGFydCAhPSAndW5kZWZpbmVkJykKCQkJCXsKCQkJCQl0aGlzLmVkaXRkb2Muc2Vs ZWN0aW9uU3RhcnQgPSBvcG4gKyBtb3Zlc3RhcnQ7CgkJCQkJdGhpcy5lZGl0ZG9j LnNlbGVjdGlvbkVuZCA9IG9wbiArIHRleHQudkJsZW5ndGgoKSAtIG1vdmVlbmQ7 CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJdGhpcy5lZGl0ZG9jLnNlbGVjdGlv blN0YXJ0ID0gb3BuOwoJCQkJCXRoaXMuZWRpdGRvYy5zZWxlY3Rpb25FbmQgPSBv cG4gKyB0ZXh0LnZCbGVuZ3RoKCk7CgkJCQl9CgkJCQl0aGlzLmVkaXRkb2Muc2Ny b2xsVG9wID0gc2Nyb2xscG9zOwoJCQl9CgkJCWVsc2UgaWYgKGRvY3VtZW50LnNl bGVjdGlvbiAmJiBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UpCgkJCXsK CQkJCXZhciBzZWwgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsK CQkJCXNlbC50ZXh0ID0gdGV4dC5yZXBsYWNlKC9ccj9cbi9nLCAnXHJcbicpOwoJ CQkJCQkJCQkJCQkKCQkJCWlmIChtb3Zlc3RhcnQgPT09IGZhbHNlKQoJCQkJewoJ CQkJCS8vIGRvIG5vdGhpbmcKCQkJCX0KCQkJCWVsc2UgaWYgKHR5cGVvZiBtb3Zl c3RhcnQgIT0gJ3VuZGVmaW5lZCcpCgkJCQl7CgkJCQkJaWYgKChtb3Zlc3RhcnQg LSB0ZXh0LnZCbGVuZ3RoKCkpICE9IDApCgkJCQkJewoJCQkJCQlzZWwubW92ZVN0 YXJ0KCdjaGFyYWN0ZXInLCBtb3Zlc3RhcnQgLSB0ZXh0LnZCbGVuZ3RoKCkpOwoJ CQkJCQlzZWxlY3Rpb25fY2hhbmdlZCA9IHRydWU7CgkJCQkJfQoJCQkJCWlmICht b3ZlZW5kICE9IDApCgkJCQkJewoJCQkJCQlzZWwubW92ZUVuZCgnY2hhcmFjdGVy JywgLW1vdmVlbmQpOwoJCQkJCQlzZWxlY3Rpb25fY2hhbmdlZCA9IHRydWU7CgkJ CQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXNlbC5tb3ZlU3RhcnQoJ2No YXJhY3RlcicsIC10ZXh0LnZCbGVuZ3RoKCkpOwoJCQkJCXNlbGVjdGlvbl9jaGFu Z2VkID0gdHJ1ZTsKCQkJCX0KCgkJCQlpZiAoc2VsZWN0aW9uX2NoYW5nZWQpCgkJ CQl7CgkJCQkJc2VsLnNlbGVjdCgpOwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJ CQkJLy8gZmFpbGVkIC0ganVzdCBzdHVmZiBpdCBhdCB0aGUgZW5kIG9mIHRoZSBt ZXNzYWdlCgkJCQl0aGlzLmVkaXRkb2MudmFsdWUgKz0gdGV4dDsKCQkJfQoJCX07 CgoJCS8qKgoJCSogUHJlcGFyZSBGb3JtIEZvciBTdWJtaXQKCQkqLwoJCXRoaXMu cHJlcGFyZV9zdWJtaXQgPSBmdW5jdGlvbihzdWJqZWN0dGV4dCwgbWluY2hhcnMp CgkJewoJCQl2YXIgcmV0dXJudmFsdWUgPSB2YWxpZGF0ZW1lc3NhZ2UodGhpcy50 ZXh0b2JqLnZhbHVlLCBzdWJqZWN0dGV4dCwgbWluY2hhcnMpOwoKCQkJaWYgKHJl dHVybnZhbHVlKQoJCQl7CgkJCQlyZXR1cm4gcmV0dXJudmFsdWU7CgkJCX0KCQkJ ZWxzZSBpZiAodGhpcy5jYXB0Y2hhICE9IG51bGwgJiYgdGhpcy5jYXB0Y2hhLmZh aWxlZCkKCQkJewoJCQkJcmV0dXJuIHJldHVybnZhbHVlOwoJCQl9CgkJCWVsc2UK CQkJewoJCQkJdGhpcy5jaGVja19mb2N1cygpOwoJCQkJcmV0dXJuIGZhbHNlOwoJ CQl9CgkJfQoKCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCS8v IFNhZmFyaSAvIE9sZCBPcGVyYSBTdGFuZGFyZCBFZGl0b3IgT25seQoJCS8vID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJaWYgKGlzX3NhZiB8fCAoaXNf b3BlcmEgJiYgKCFvcGVyYS52ZXJzaW9uIHx8IG9wZXJhLnZlcnNpb24oKSA8IDgp KSkKCQl7CgkJCS8qKgoJCQkqIEluc2VydCBMaXN0IGZvciBTYWZhcmkgYW5kIG9s ZGVyIE9wZXJhCgkJCSovCgkJCXRoaXMuaW5zZXJ0bGlzdCA9IGZ1bmN0aW9uKHBo cmFzZSwgbGlzdHR5cGUpCgkJCXsKCQkJCXZhciBvcGVudGFnID0gJ1tMSVNUJyAr IChsaXN0dHlwZSA/ICgnPScgKyBsaXN0dHlwZSkgOiAnJykgKyAnXVxuJzsKCQkJ CXZhciBjbG9zZXRhZyA9ICdbL0xJU1RdJzsKCQkJCWlmICh0eHQgPSB0aGlzLmdl dF9zZWxlY3Rpb24oKSkKCQkJCXsKCQkJCQl2YXIgcmVnZXggPSBuZXcgUmVnRXhw KCcoW1xyXG5dK3xeW1xyXG5dKikoPyFcXFtcXCpcXF18XFxbXFwvP2xpc3QpKD89 W15cclxuXSknLCAnZ2knKTsKCQkJCQl0eHQgPSBvcGVudGFnICsgUEhQLnRyaW0o dHh0KS5yZXBsYWNlKHJlZ2V4LCAnJDFbKl0nKSArICdcbicgKyBjbG9zZXRhZzsK CQkJCQl0aGlzLmluc2VydF90ZXh0KHR4dCwgdHh0LnZCbGVuZ3RoKCksIDApOwoJ CQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXRoaXMuaW5zZXJ0X3RleHQob3BlbnRh Zywgb3BlbnRhZy5sZW5ndGgsIDApOwoKCQkJCQl3aGlsZSAobGlzdHZhbHVlID0g cHJvbXB0KHZicGhyYXNlWydlbnRlcl9saXN0X2l0ZW0nXSwgJycpKQoJCQkJCXsK CQkJCQkJbGlzdHZhbHVlID0gJ1sqXScgKyBsaXN0dmFsdWUgKyAnXG4nOwoJCQkJ CQl0aGlzLmluc2VydF90ZXh0KGxpc3R2YWx1ZSwgbGlzdHZhbHVlLnZCbGVuZ3Ro KCksIDApOwoJCQkJCX0KCgkJCQkJdGhpcy5pbnNlcnRfdGV4dChjbG9zZXRhZywg Y2xvc2V0YWcubGVuZ3RoLCAwKTsKCQkJCX0KCQkJfTsKCQl9Cgl9CgoJLy8gZ2Vu dGxlbWVuLCBzdGFydCB5b3VyIGVuZ2luZXMuLi4KCXRoaXMuaW5pdCgpOwp9Cgov LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBFZGl0b3IgZXZlbnQg aGFuZGxlciBmdW5jdGlvbnMKCi8qKgoqIENsYXNzIGNvbnRhaW5pbmcgZWRpdG9y IGV2ZW50IGhhbmRsZXJzCiovCmZ1bmN0aW9uIHZCX1RleHRfRWRpdG9yX0V2ZW50 cygpCnsKfQoKLyoqCiogSGFuZGxlcyBhIGNsaWNrIG9uIGEgc21pbGllIGluIHRo ZSBzbWlsaWVib3gKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5z bWlsaWVfb25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXZCX0VkaXRvclt0aGlzLmVk aXRvcmlkXS5pbnNlcnRfc21pbGllKGUsCgkJdGhpcy5hbHQsCgkJdGhpcy5zcmMs CgkJdGhpcy5pZC5zdWJzdHIodGhpcy5pZC5sYXN0SW5kZXhPZignXycpICsgMSkK CSk7CgoJaWYgKHR5cGVvZiBzbWlsaWVfd2luZG93ICE9ICd1bmRlZmluZWQnICYm ICFzbWlsaWVfd2luZG93LmNsb3NlZCkKCXsKCQlzbWlsaWVfd2luZG93LmZvY3Vz KCk7Cgl9CgoJcmV0dXJuIGZhbHNlOwp9OwoKLyoqCiogSGFuZGxlcyBhIG1vdXNl IGV2ZW50IG9uIGEgY29tbWFuZCBidXR0b24KKi8KdkJfVGV4dF9FZGl0b3JfRXZl bnRzLnByb3RvdHlwZS5jb21tYW5kX2J1dHRvbl9vbm1vdXNlZXZlbnQgPSBmdW5j dGlvbihlKQp7CgllID0gZG9fYW5fZShlKTsKCglpZiAoZS50eXBlID09ICdjbGlj aycpCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmZvcm1hdChlLCB0aGlz LmNtZCwgZmFsc2UsIHRydWUpOwoJfQoKCXZCX0VkaXRvclt0aGlzLmVkaXRvcmlk XS5idXR0b25fY29udGV4dCh0aGlzLCBlLnR5cGUpOwp9OwoKLyoqCiogSGFuZGxl cyBhIG1vdXNlIGV2ZW50IG9uIGEgcG9wdXAgY29udHJvbGxlciBidXR0b24KKi8K dkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5wb3B1cF9idXR0b25fb25t b3VzZWV2ZW50ID0gZnVuY3Rpb24oZSkKewoJZSA9IGRvX2FuX2UoZSk7CgoJaWYg KGUudHlwZSA9PSAnY2xpY2snKQoJewoJCXRoaXMuX29uY2xpY2soZSk7CgkJdkJf RWRpdG9yW3RoaXMuZWRpdG9yaWRdLm1lbnVfY29udGV4dCh0aGlzLCAnbW91c2Vv dmVyJyk7Cgl9CgllbHNlCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLm1l bnVfY29udGV4dCh0aGlzLCBlLnR5cGUpOwoJfQp9OwoKLyoqCiogT3ZlcnJpZGVz IHRoZSBzaG93KCkgZnVuY3Rpb24gZnJvbSB0aGUgdkJtZW51IHN5c3RlbQoqCiog QHBhcmFtCW9iamVjdAlDb250cm9sIG9iamVjdAoqIEBwYXJhbQlib29sZWFuCVNo b3cgaW5zdGFudGx5PwoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBl LnBvcHVwX2J1dHRvbl9zaG93ID0gZnVuY3Rpb24ob2JqLCBpbnN0YW50KQp7Cglp ZiAodHlwZW9mIHZCX0VkaXRvcltvYmouZWRpdG9yaWRdLnBvcHVwc1tvYmouY21k XSA9PSAndW5kZWZpbmVkJyB8fCB2Ql9FZGl0b3Jbb2JqLmVkaXRvcmlkXS5wb3B1 cHNbb2JqLmNtZF0gPT0gbnVsbCkKCXsKCQl2Ql9FZGl0b3Jbb2JqLmVkaXRvcmlk XS5pbml0X3BvcHVwX21lbnUob2JqKTsKCX0KCWVsc2UgaWYgKG9iai5jbWQgPT0g J2F0dGFjaCcgJiYgKHR5cGVvZiB2Ql9BdHRhY2htZW50cyA9PSAndW5kZWZpbmVk JyB8fCAhdkJfQXR0YWNobWVudHMuaGFzX2F0dGFjaG1lbnRzKCkpKQoJewoJCXJl dHVybiBmZXRjaF9vYmplY3QoJ21hbmFnZV9hdHRhY2htZW50c19idXR0b24nKS5v bmNsaWNrKCk7Cgl9Cgl0aGlzLl9zaG93KG9iaiwgaW5zdGFudCk7Cn07CgovKioK KiBIYW5kbGVzIGEgc2VsZWN0aW9uIGZyb20gYSBmb3JtYXR0aW5nIDxzZWxlY3Q+ IG1lbnUKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5mb3JtYXR0 aW5nX3NlbGVjdF9vbmNoYW5nZSA9IGZ1bmN0aW9uKGUpCnsKCXZhciBhcmcgPSB0 aGlzLm9wdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZTsKCWlmIChhcmcg IT0gJycpCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmZvcm1hdChlLCB0 aGlzLmNtZCwgYXJnKTsKCX0KCXRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7Cn07Cgov KioKKiBIYW5kbGVzIGEgc2VsZWN0aW9uIGZyb20gdGhlIHNtaWxpZXMgPHNlbGVj dD4gbWVudQoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLnNtaWxp ZXNlbGVjdF9vbmNoYW5nZSA9IGZ1bmN0aW9uKGUpCnsKCWlmICh0aGlzLm9wdGlv bnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZSAhPSAnJykKCXsKCQl2Ql9FZGl0 b3JbdGhpcy5lZGl0b3JpZF0uaW5zZXJ0X3NtaWxpZShlLAoJCQl0aGlzLm9wdGlv bnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZSwKCQkJdGhpcy5vcHRpb25zW3Ro aXMuc2VsZWN0ZWRJbmRleF0uc21pbGllcGF0aCwKCQkJdGhpcy5vcHRpb25zW3Ro aXMuc2VsZWN0ZWRJbmRleF0uc21pbGllaWQKCQkpOwoJfQoJdGhpcy5zZWxlY3Rl ZEluZGV4ID0gMDsKfTsKCi8qKgoqIEhhbmRsZXMgYSBzZWxlY3Rpb24gZnJvbSB0 aGUgYXR0YWNobWVudCA8c2VsZWN0PiBtZW51CiovCnZCX1RleHRfRWRpdG9yX0V2 ZW50cy5wcm90b3R5cGUuYXR0YWNoc2VsZWN0X29uY2hhbmdlID0gZnVuY3Rpb24o ZSkKewoJdmFyIGFyZyA9IHRoaXMub3B0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhd LnZhbHVlOwoJaWYgKGFyZyAhPSAnJykKCXsKCQl2Ql9FZGl0b3JbdGhpcy5lZGl0 b3JpZF0ud3JhcF90YWdzKCdhdHRhY2gnLCBmYWxzZSwgYXJnKTsKCX0KCXRoaXMu c2VsZWN0ZWRJbmRleCA9IDA7Cn07CgovKioKKiBIYW5kbGVzIGEgbW91c2Ugb3Zl ciBldmVudCBmb3IgdGhlIGF0dGFjaG1lbnQgPHNlbGVjdD4gbWVudQoqLwp2Ql9U ZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmF0dGFjaHNlbGVjdF9vbm1vdXNl b3ZlciA9IGZ1bmN0aW9uKGUpCnsKCWlmICh0aGlzLm9wdGlvbnMubGVuZ3RoIDw9 IDIpCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmJ1aWxkX2F0dGFjaG1l bnRzX3BvcHVwKHRoaXMpOwoJCXJldHVybiB0cnVlOwoJfQp9OwoKLyoqCiogSGFu ZGxlcyBhIG1vdXNlIGV2ZW50IG9uIGEgbWVudSBvcHRpb24KKi8KdkJfVGV4dF9F ZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29ubW91c2VldmVudCA9 IGZ1bmN0aW9uKGUpCnsKCWUgPSBkb19hbl9lKGUpOwoJdkJfRWRpdG9yW3RoaXMu ZWRpdG9yaWRdLmJ1dHRvbl9jb250ZXh0KHRoaXMsIGUudHlwZSwgJ21lbnUnKTsK fTsKCi8qKgoqIEhhbmRsZXMgYSBjbGljayBvbiBhIGZvcm1hdHRpbmcgb3B0aW9u IGluIHRoZSBmb250L3NpemUgbWVudXMKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRz LnByb3RvdHlwZS5mb3JtYXR0aW5nX29wdGlvbl9vbmNsaWNrID0gZnVuY3Rpb24o ZSkKewoJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmZvcm1hdChlLCB0aGlzLmNt ZCwgdGhpcy5maXJzdENoaWxkLmlubmVySFRNTCk7Cgl2Qm1lbnUuaGlkZSgpOwp9 OwoKLyoqCiogSGFuZGxlcyBhIGNsaWNrIG9uIGEgY29sb3Igb3B0aW9uIGluIHRo ZSBjb2xvciBtZW51CiovCnZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUu Y29sb3JvcHRpb25fb25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCWZldGNoX29iamVj dCh0aGlzLmVkaXRvcmlkICsgJ19jb2xvcl9iYXInKS5zdHlsZS5iYWNrZ3JvdW5k Q29sb3IgPSB0aGlzLmNvbG9ybmFtZTsKCXZCX0VkaXRvclt0aGlzLmVkaXRvcmlk XS5mb3JtYXQoZSwgdGhpcy5jbWQsIHRoaXMuY29sb3JuYW1lKTsKCXZCbWVudS5o aWRlKCk7Cn07CgovKioKKiBIYW5kbGVzIGEgY2xpY2sgb24gdGhlIGNvbG9yIGlu c3RhbnQtc2VsZWN0IGJ1dHRvbgoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJv dG90eXBlLmNvbG9yb3V0X29uY2xpY2sgPSBmdW5jdGlvbihlKQp7CgllID0gZG9f YW5fZShlKTsKCXZCX0VkaXRvclt0aGlzLmVkaXRvcmlkXS5mb3JtYXQoZSwgJ2Zv cmVjb2xvcicsIGZldGNoX29iamVjdCh0aGlzLmVkaXRvcmlkICsgJ19jb2xvcl9i YXInKS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IpOwoJcmV0dXJuIGZhbHNlOwp9OwoK LyoqCiogSGFuZGxlcyBhIGNsaWNrIG9uIGEgc21pbGllIG9wdGlvbiBpbiB0aGUg c21pbGllIG1lbnUKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5z bWlsaWVvcHRpb25fb25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXZCX0VkaXRvclt0 aGlzLmVkaXRvcmlkXS5idXR0b25fY29udGV4dCh0aGlzLCAnbW91c2VvdXQnLCAn bWVudScpOwoJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmluc2VydF9zbWlsaWUo ZSwgdGhpcy5zbWlsaWV0ZXh0LCBmZXRjaF90YWdzKHRoaXMsICdpbWcnKVswXS5z cmMsIHRoaXMuc21pbGllaWQpOwoJdkJtZW51LmhpZGUoKTsKfTsKCi8qKgoqIEhh bmRsZXMgYSBjbGljayBvbiB0aGUgJ01vcmUnIGxpbmsgaW4gdGhlIHNtaWxpZSBt ZW51CiovCnZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuc21pbGllbW9y ZV9vbmNsaWNrID0gZnVuY3Rpb24oZSkKewoJdkJfRWRpdG9yW3RoaXMuZWRpdG9y aWRdLm9wZW5fc21pbGllX3dpbmRvdyhzbWlsaWV3aW5kb3dfeCwgc21pbGlld2lu ZG93X3kpOwoJdkJtZW51LmhpZGUoKTsKfTsKCi8qKgoqIEhhbmRsZXMgYSBjbGlj ayBvbiB0aGUgJ01hbmFnZScgbGluayBpbiB0aGUgYXR0YWNobWVudHMgbWVudQoq Lwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmF0dGFjaG1hbmFnZV9v bmNsaWNrID0gZnVuY3Rpb24oZSkKewoJdkJtZW51LmhpZGUoKTsKCWZldGNoX29i amVjdCgnbWFuYWdlX2F0dGFjaG1lbnRzX2J1dHRvbicpLm9uY2xpY2soKTsKfTsK Ci8qKgoqIEhhbmRsZXMgYSBjbGljayBvbiBhbiBhdHRhY2htZW50IG9wdGlvbiBp biB0aGUgYXR0YWNobWVudHMgbWVudQoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMu cHJvdG90eXBlLmF0dGFjaG9wdGlvbl9vbmNsaWNrID0gZnVuY3Rpb24oZSkKewoJ dkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmJ1dHRvbl9jb250ZXh0KHRoaXMsICdt b3VzZW91dCcsICdtZW51Jyk7Cgl2Ql9FZGl0b3JbdGhpcy5lZGl0b3JpZF0ud3Jh cF90YWdzKCdhdHRhY2gnLCBmYWxzZSwgdGhpcy5hdHRhY2htZW50aWQpOwoJdkJt ZW51LmhpZGUoKTsKfTsKCnZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUu YXR0YWNoaW5zZXJ0YWxsX29uY2xpY2sgPSBmdW5jdGlvbihlKQp7Cgl2YXIgaW5z ZXJ0ID0gJyc7Cgl2YXIgYnJlYWtjaGFyID0gKHZCX0VkaXRvclt0aGlzLmVkaXRv cmlkXS53eXNpd3lnX21vZGUgPyAnPGJyIC8+PGJyIC8+JyA6ICdcclxuXHJcbicp OwoKCWZvciAodmFyIGlkIGluIHZCX0F0dGFjaG1lbnRzLmF0dGFjaG1lbnRzKQoJ ewoJCWluc2VydCArPSBpbnNlcnQgIT0gJycgPyBicmVha2NoYXIgOiAnJzsKCQlp bnNlcnQgKz0gJ1tBVFRBQ0hdJyArIGlkICsgJ1svQVRUQUNIXSc7Cgl9Cgl2Ql9F ZGl0b3JbdGhpcy5lZGl0b3JpZF0uaW5zZXJ0X3RleHQoaW5zZXJ0KTsKCXZCbWVu dS5oaWRlKCk7Cn0KCi8qKgoqIENsb3NlcyB0aGUgc21pbGllIHdpbmRvdyB3aGVu IHRoZSBtYWluIHBhZ2UgZXhpdHMKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnBy b3RvdHlwZS5zbWlsaWV3aW5kb3dfb251bmxvYWQgPSBmdW5jdGlvbihlKQp7Cglp ZiAodHlwZW9mIHNtaWxpZV93aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgIXNtaWxp ZV93aW5kb3cuY2xvc2VkKQoJewoJCXNtaWxpZV93aW5kb3cuY2xvc2UoKTsKCX0K fTsKCi8qKgoqIFNldHMgZWRpdHdpbi5oYXNmb2N1cyA9IHRydWUgb24gZm9jdXMK Ki8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5lZGl0d2luX29uZm9j dXMgPSBmdW5jdGlvbihlKQp7Cgl0aGlzLmhhc2ZvY3VzID0gdHJ1ZTsKfTsKCi8q KgoqIFNldHMgZWRpdHdpbi5oYXNmb2N1cyA9IGZhbHNlIG9uIGJsdXIKKi8KdkJf VGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5lZGl0d2luX29uYmx1ciA9IGZ1 bmN0aW9uKGUpCnsKCXRoaXMuaGFzZm9jdXMgPSBmYWxzZTsKfTsKCi8qKgoqIFNl dHMgY29udGV4dCBhbmQgaGlkZXMgbWVudXMgb24gbW91c2UgY2xpY2tzIGluIHRo ZSBlZGl0b3IKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5lZGl0 ZG9jX29ubW91c2V1cCA9IGZ1bmN0aW9uKGUpCnsKCXZCX0VkaXRvclt0aGlzLmVk aXRvcmlkXS5zZXRfY29udGV4dCgpOwoJaWYgKHZCX0VkaXRvclt0aGlzLmVkaXRv cmlkXS5wb3B1cG1vZGUpCgl7CgkJdkJtZW51LmhpZGUoKTsKCX0KfTsKCi8qKgoq IFNldHMgY29udGV4dCBvbiBrZXkgcHJlc3NlcyBpbiB0aGUgZWRpdG9yCiovCnZC X1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZWRpdGRvY19vbmtleXVwID0g ZnVuY3Rpb24oZSkKewoJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLnNldF9jb250 ZXh0KCk7Cn07CgovKioKKiBIYW5kbGUgYSBrZXlwcmVzcyBldmVudCBpbiB0aGUg ZWRpdG9yIHdpbmRvdwoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBl LmVkaXRkb2Nfb25rZXlwcmVzcyA9IGZ1bmN0aW9uKGUpCnsKCWlmICghZSkKCXsK CQllID0gd2luZG93LmV2ZW50OwoJfQoKCWlmIChlLmN0cmxLZXkpCgl7CgkJdmFy IGNvZGUgPSBlLmNoYXJDb2RlID8gZS5jaGFyQ29kZSA6IGUua2V5Q29kZTsKCQlz d2l0Y2ggKFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkudG9Mb3dlckNhc2UoKSkK CQl7CgkJCWNhc2UgJ2InOiBjbWQgPSAnYm9sZCc7IGJyZWFrOwoJCQljYXNlICdp JzogY21kID0gJ2l0YWxpYyc7IGJyZWFrOwoJCQljYXNlICd1JzogY21kID0gJ3Vu ZGVybGluZSc7IGJyZWFrOwoJCQlkZWZhdWx0OiByZXR1cm47CgkJfQoKCQllID0g ZG9fYW5fZShlKTsKCQl2Ql9FZGl0b3JbdGhpcy5lZGl0b3JpZF0uYXBwbHlfZm9y bWF0KGNtZCwgZmFsc2UsIG51bGwpOwoJCXJldHVybiBmYWxzZTsKCX0KCWVsc2Ug aWYgKGUua2V5Q29kZSA9PSA5KQoJewoJCS8vIGZpcnN0IGxldHMgdHJ5IHBvc3Qg aWNvbiwgdGhlbiBzdWJtaXQsIHRoZW4ganVzdCBsZXQgaXQgcHJvY2VlZCBtYWtp bmcgdGhlIHRhYgoJCS8vIHlvdSBjYW4ndCBzdXBwcmVzcyBldmVudHMgYSB0YWIg ZXZlbiBvbiBPcGVyYSBzbyBza2lwIHRoYXQgdG9vLgoJCXZhciBmaXJzdGljb24g PSBmZXRjaF9vYmplY3QoJ3JiX2ljb25pZF8wJyk7CgkJaWYgKGZpcnN0aWNvbiAh PSBudWxsKQoJCXsKCQkJZmlyc3RpY29uLmZvY3VzKCk7CgkJfQoJCWVsc2UgaWYg KGZldGNoX29iamVjdCh0aGlzLmVkaXRvcmlkICsgJ19zYXZlJykgIT0gbnVsbCAm JiAhaXNfb3BlcmEpCgkJewoJCQlmZXRjaF9vYmplY3QodGhpcy5lZGl0b3JpZCAr ICdfc2F2ZScpLmZvY3VzKCk7CgkJfQoJCWVsc2UgaWYgKGZldGNoX29iamVjdCgn cXJfc3VibWl0JykgIT0gbnVsbCAmJiAhaXNfb3BlcmEpCgkJewoJCQlmZXRjaF9v YmplY3QoJ3FyX3N1Ym1pdCcpLmZvY3VzKCk7CgkJfQoJCWVsc2UKCQl7CgkJCXJl dHVybjsKCQl9CgkJZSA9IGRvX2FuX2UoZSk7Cgl9Cn07CgovKioKKiBTdG9wIHJl c2l6aW5nIG9mIGltYWdlcyBpbiBJRQoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMu cHJvdG90eXBlLmVkaXRkb2Nfb25yZXNpemVzdGFydCA9IGZ1bmN0aW9uKGUpCnsK CWlmIChlLnNyY0VsZW1lbnQudGFnTmFtZSA9PSAnSU1HJykKCXsKCQlyZXR1cm4g ZmFsc2U7Cgl9Cn07CgovKioKKiBTYXZlIGVkaXRvciBjb250ZW50cyB0byB0ZXh0 YXJlYSBzbyBpZiB3ZSBoaXQgYmFjayAvIGZvcndhcmQgaXRzIG5vdCBsb3N0Ciog T25seSBhcHBlYXJzIHRvIHdvcmsgd2l0aCBGaXJlZm94IGF0IHRoZSBtb21lbnQK Ki8KZnVuY3Rpb24gc2F2ZV9pZnJhbWVfdG9fdGV4dGFyZWEoKQp7Cglmb3IgKHZh ciBlZGl0b3JpZCBpbiB2Ql9FZGl0b3IpCgl7CgkJaWYgKHZCX0VkaXRvcltlZGl0 b3JpZF0ud3lzaXd5Z19tb2RlICYmIHZCX0VkaXRvcltlZGl0b3JpZF0uaW5pdGlh bGl6ZWQpCgkJewoJCQl2Ql9FZGl0b3JbZWRpdG9yaWRdLnRleHRvYmoudmFsdWUg PSB2Ql9FZGl0b3JbZWRpdG9yaWRdLmdldF9lZGl0b3JfY29udGVudHMoKTsKCQl9 Cgl9Cn0KCmlmICh3aW5kb3cuYXR0YWNoRXZlbnQpCnsKCXdpbmRvdy5hdHRhY2hF dmVudCgnb25iZWZvcmV1bmxvYWQnLCBzYXZlX2lmcmFtZV90b190ZXh0YXJlYSk7 Cn0KZWxzZSBpZih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikKewoJd2luZG93LmFk ZEV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsIHNhdmVfaWZyYW1lX3RvX3RleHRhcmVh LCB0cnVlKTsKfQoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8g RWRpdG9yIG1vZGUgc3dpdGNoZXIgc3lzdGVtCgovKioKKiBTd2l0Y2ggZWRpdG9y IGJldHdlZW4gc3RhbmRhcmQgYW5kIHd5c2l3eWcgbW9kZXMKKgoqIEBwYXJhbQlz dHJpbmcJRWRpdG9ySUQgKHZCX0VkaXRvclt4XSkKKi8KZnVuY3Rpb24gc3dpdGNo X2VkaXRvcl9tb2RlKGVkaXRvcmlkKQp7CglpZiAoQUpBWF9Db21wYXRpYmxlKQoJ ewoJCXZhciBtb2RlID0gKHZCX0VkaXRvcltlZGl0b3JpZF0ud3lzaXd5Z19tb2Rl ID8gMCA6IDEpOwoKCQlpZiAodkJfRWRpdG9yW2VkaXRvcmlkXS5pbmZsdXggPT0g MSkKCQl7CgkJCS8vIGFscmVhZHkgY2xpY2tlZCwgZ28gYXdheSEKCQkJcmV0dXJu OwoJCX0KCQllbHNlCgkJewoJCQl2Ql9FZGl0b3JbZWRpdG9yaWRdLmluZmx1eCA9 IDE7CgkJfQoKCQlpZiAodHlwZW9mIHZCbWVudSAhPSAndW5kZWZpbmVkJykKCQl7 CgkJCXZCbWVudS5oaWRlKCk7CgkJfQoKCQl2YXIgYWpheCA9IG5ldyB2Ql9BSkFY X0hhbmRsZXIodHJ1ZSk7CgkJYWpheC5vbnJlYWR5c3RhdGVjaGFuZ2UoZnVuY3Rp b24oKQoJCXsKCQkJaWYgKGFqYXguaGFuZGxlci5yZWFkeVN0YXRlID09IDQgJiYg YWpheC5oYW5kbGVyLnN0YXR1cyA9PSAyMDApCgkJCXsKCQkJCWlmIChhamF4Lmhh bmRsZXIucmVzcG9uc2VYTUwpCgkJCQl7CgkJCQkJLy8gZGVzdHJveWVyCgkJCQkJ dmFyIHBhcnNldHlwZSA9IHZCX0VkaXRvcltlZGl0b3JpZF0ucGFyc2V0eXBlOwoJ CQkJCXZhciBwYXJzZXNtaWxpZXMgPSB2Ql9FZGl0b3JbZWRpdG9yaWRdLnBhcnNl c21pbGllczsKCQkJCQl2YXIgYWpheF9leHRyYSA9IHZCX0VkaXRvcltlZGl0b3Jp ZF0uYWpheF9leHRyYTsKCgkJCQkJdkJfRWRpdG9yW2VkaXRvcmlkXS5kZXN0cm95 KCk7CgoJCQkJCXZhciBwYXJzZWRfdGV4dCA9IGFqYXguZmV0Y2hfZGF0YShmZXRj aF90YWdzKGFqYXguaGFuZGxlci5yZXNwb25zZVhNTCwgJ21lc3NhZ2UnKVswXSk7 CgkJCQkJdmFyIG1hdGNoZXMgPSBwYXJzZWRfdGV4dC5tYXRjaCgvJiMoWzAtOV0r KTsvZyk7CgkJCQkJaWYgKG1hdGNoZXMpCgkJCQkJewoJCQkJCQlmb3IgKHZhciBp ID0gMDsgdHlwZW9mIG1hdGNoZXNbaV0gIT0gJ3VuZGVmaW5lZCc7IGkrKykKCQkJ CQkJewoJCQkJCQkJaWYgKHN1Ym1hdGNoID0gbWF0Y2hlc1tpXS5tYXRjaCgvXiYj KFswLTldKyk7JC8pKQoJCQkJCQkJewoJCQkJCQkJCXBhcnNlZF90ZXh0ID0gcGFy c2VkX3RleHQucmVwbGFjZShzdWJtYXRjaFswXSwgU3RyaW5nLmZyb21DaGFyQ29k ZShzdWJtYXRjaFsxXSkpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoKCQkJCQkv LyByZW1vdmluZyB0aGlzIGxpbmUgYmVjYXVzZSBvZiBJRTcgZm9jdXMgaXNzdWVz IC0gb24gc2Vjb25kIGFjdGl2YXRpb24gb2YgSUU3IFdZV0lXWUcsIGZvY3VzIGlz IGxvc3QKCQkJCQkvL3ZCX0VkaXRvcltlZGl0b3JpZF0gPSBudWxsOyAvLyBjb2xs ZWN0IHRoZSBnYXJiYWdlCgoJCQkJCXZCX0VkaXRvcltlZGl0b3JpZF0gPSBuZXcg dkJfVGV4dF9FZGl0b3IoZWRpdG9yaWQsIG1vZGUsIHBhcnNldHlwZSwgcGFyc2Vz bWlsaWVzLCBwYXJzZWRfdGV4dCwgYWpheF9leHRyYSk7CgkJCQkJdkJfRWRpdG9y W2VkaXRvcmlkXS5jaGVja19mb2N1cygpOwoJCQkJCWZldGNoX29iamVjdChlZGl0 b3JpZCArICdfbW9kZScpLnZhbHVlID0gbW9kZTsKCQkJCX0KCgkJCQlpZiAoaXNf aWUpCgkJCQl7CgkJCQkJYWpheC5oYW5kbGVyLmFib3J0KCk7CgkJCQl9CgkJCX0K CQl9KTsKCgkJLy8gISFhdHRlbnRpb24KCQlhamF4LnNlbmQoJ2FqYXgucGhwP2Rv PWVkaXRvcnN3aXRjaCcsICdkbz1lZGl0b3Jzd2l0Y2gnCgkJCSsgJyZ0b3d5c2l3 eWc9JwkrIG1vZGUKCQkJKyAnJnBhcnNldHlwZT0nICsgdkJfRWRpdG9yW2VkaXRv cmlkXS5wYXJzZXR5cGUKCQkJKyAnJmFsbG93c21pbGllPScgKyB2Ql9FZGl0b3Jb ZWRpdG9yaWRdLnBhcnNlc21pbGllcwoJCQkrICcmbWVzc2FnZT0nICsgUEhQLnVy bGVuY29kZSh2Ql9FZGl0b3JbZWRpdG9yaWRdLmdldF9lZGl0b3JfY29udGVudHMo KSkKCQkJKyAodkJfRWRpdG9yW2VkaXRvcmlkXS5hamF4X2V4dHJhID8gKCcmJyAr IHZCX0VkaXRvcltlZGl0b3JpZF0uYWpheF9leHRyYSkgOiAnJykKCQkpOwoJfQp9 CgoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gR2VuZXJpYyBn bG9iYWwgZWRpdG9yIHZhcmlhYmxlcwoKLyoqCiogRGVmaW5lIHdoaWNoIGJ1dHRv bnMgYXJlIGNvbnRleHQtY29udHJvbGxlZAoqCiogQHZhcglhcnJheQlDb250ZXh0 IGNvbnRyb2xzCiovCnZhciBjb250ZXh0Y29udHJvbHMgPSBuZXcgQXJyYXkoCgkn Ym9sZCcsCgknaXRhbGljJywKCSd1bmRlcmxpbmUnLAoJJ2p1c3RpZnlsZWZ0JywK CSdqdXN0aWZ5Y2VudGVyJywKCSdqdXN0aWZ5cmlnaHQnLAoJJ2luc2VydG9yZGVy ZWRsaXN0JywKCSdpbnNlcnR1bm9yZGVyZWRsaXN0JwopOwoKLyoqCiogRGVmaW5l IGF2YWlsYWJsZSBjb2xvciBuYW1lIG9wdGlvbnMgLSBrZXllZCB3aXRoIGhleCB2 YWx1ZQoqCiogQHZhcglhcnJheQlDb2xvciBvcHRpb25zCiovCnZhciBjb2xvcm9w dGlvbnMgPSBuZXcgQXJyYXkoKTsKY29sb3JvcHRpb25zID0gewoJJyMwMDAwMDAn IDogJ0JsYWNrJywKCScjQTA1MjJEJyA6ICdTaWVubmEnLAoJJyM1NTZCMkYnIDog J0RhcmtPbGl2ZUdyZWVuJywKCScjMDA2NDAwJyA6ICdEYXJrR3JlZW4nLAoJJyM0 ODNEOEInIDogJ0RhcmtTbGF0ZUJsdWUnLAoJJyMwMDAwODAnIDogJ05hdnknLAoJ JyM0QjAwODInIDogJ0luZGlnbycsCgknIzJGNEY0RicgOiAnRGFya1NsYXRlR3Jh eScsCgknIzhCMDAwMCcgOiAnRGFya1JlZCcsCgknI0ZGOEMwMCcgOiAnRGFya09y YW5nZScsCgknIzgwODAwMCcgOiAnT2xpdmUnLAoJJyMwMDgwMDAnIDogJ0dyZWVu JywKCScjMDA4MDgwJyA6ICdUZWFsJywKCScjMDAwMEZGJyA6ICdCbHVlJywKCScj NzA4MDkwJyA6ICdTbGF0ZUdyYXknLAoJJyM2OTY5NjknIDogJ0RpbUdyYXknLAoJ JyNGRjAwMDAnIDogJ1JlZCcsCgknI0Y0QTQ2MCcgOiAnU2FuZHlCcm93bicsCgkn IzlBQ0QzMicgOiAnWWVsbG93R3JlZW4nLAoJJyMyRThCNTcnIDogJ1NlYUdyZWVu JywKCScjNDhEMUNDJyA6ICdNZWRpdW1UdXJxdW9pc2UnLAoJJyM0MTY5RTEnIDog J1JveWFsQmx1ZScsCgknIzgwMDA4MCcgOiAnUHVycGxlJywKCScjODA4MDgwJyA6 ICdHcmF5JywKCScjRkYwMEZGJyA6ICdNYWdlbnRhJywKCScjRkZBNTAwJyA6ICdP cmFuZ2UnLAoJJyNGRkZGMDAnIDogJ1llbGxvdycsCgknIzAwRkYwMCcgOiAnTGlt ZScsCgknIzAwRkZGRicgOiAnQ3lhbicsCgknIzAwQkZGRicgOiAnRGVlcFNreUJs dWUnLAoJJyM5OTMyQ0MnIDogJ0RhcmtPcmNoaWQnLAoJJyNDMEMwQzAnIDogJ1Np bHZlcicsCgknI0ZGQzBDQicgOiAnUGluaycsCgknI0Y1REVCMycgOiAnV2hlYXQn LAoJJyNGRkZBQ0QnIDogJ0xlbW9uQ2hpZmZvbicsCgknIzk4RkI5OCcgOiAnUGFs ZUdyZWVuJywKCScjQUZFRUVFJyA6ICdQYWxlVHVycXVvaXNlJywKCScjQUREOEU2 JyA6ICdMaWdodEJsdWUnLAoJJyNEREEwREQnIDogJ1BsdW0nLAoJJyNGRkZGRkYn IDogJ1doaXRlJwp9OwoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK Ly8gdkJfSGlzdG9yeQovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoK ZnVuY3Rpb24gdkJfSGlzdG9yeSgpCnsKCXRoaXMuY3Vyc29yID0gLTE7Cgl0aGlz LnN0YWNrID0gbmV3IEFycmF5KCk7Cn0KCi8vID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci8vIHZCX0hpc3RvcnkgbWV0aG9kcwoKdkJfSGlzdG9yeS5wcm90 b3R5cGUubW92ZV9jdXJzb3IgPSBmdW5jdGlvbihpbmNyZW1lbnQpCnsKCXZhciB0 ZXN0ID0gdGhpcy5jdXJzb3IgKyBpbmNyZW1lbnQ7CglpZiAodGVzdCA+PSAwICYm IHRoaXMuc3RhY2tbdGVzdF0gIT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5zdGFja1t0 ZXN0XSAhPSAndW5kZWZpbmVkJykKCXsKCQl0aGlzLmN1cnNvciArPSBpbmNyZW1l bnQ7Cgl9Cn07Cgp2Ql9IaXN0b3J5LnByb3RvdHlwZS5hZGRfc25hcHNob3QgPSBm dW5jdGlvbihzdHIpCnsKCWlmICh0aGlzLnN0YWNrW3RoaXMuY3Vyc29yXSA9PSBz dHIpCgl7CgkJcmV0dXJuOwoJfQoJZWxzZQoJewoJCXRoaXMuY3Vyc29yKys7CgkJ dGhpcy5zdGFja1t0aGlzLmN1cnNvcl0gPSBzdHI7CgoJCWlmICh0eXBlb2YgdGhp cy5zdGFja1t0aGlzLmN1cnNvciArIDFdICE9ICd1bmRlZmluZWQnKQoJCXsKCQkJ dGhpcy5zdGFja1t0aGlzLmN1cnNvciArIDFdID0gbnVsbDsKCQl9Cgl9Cn07Cgp2 Ql9IaXN0b3J5LnByb3RvdHlwZS5nZXRfc25hcHNob3QgPSBmdW5jdGlvbigpCnsK CWlmICh0eXBlb2YgdGhpcy5zdGFja1t0aGlzLmN1cnNvcl0gIT0gJ3VuZGVmaW5l ZCcgJiYgdGhpcy5zdGFja1t0aGlzLmN1cnNvcl0gIT0gbnVsbCkKCXsKCQlyZXR1 cm4gdGhpcy5zdGFja1t0aGlzLmN1cnNvcl07Cgl9CgllbHNlCgl7CgkJcmV0dXJu IGZhbHNlOwoJfQp9OwoKLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKfHwgIyBEb3dubG9hZGVkOiAxNDo0MSwgVGh1IFNl cCAxOHRoIDIwMDgKfHwgIyBDVlM6ICRSQ1NmaWxlJCAtICRSZXZpc2lvbjogMjcw MjIgJAp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcKj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0qLw== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=vbulletin_editor.css Content-Type: text/css; charset=windows-1251; name=vbulletin_editor.css Content-Location: http://forum.qip.ru/clientscript/vbulletin_editor.css Content-Transfer-Encoding: 8bit /*======================================================================*\ || #################################################################### || || # vBulletin 3.6.10 Patch Level 2 || # ---------------------------------------------------------------- # || || # All code in this file is ©2000-2008 Jelsoft Enterprises Ltd. # || || # This file may not be redistributed in whole or significant part. # || || # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # || || # http://www.vbulletin.com | http://www.vbulletin.com/license.html # || || #################################################################### || \*======================================================================*/ /* the container for the editor */ .vBulletin_editor { border: 2px groove; } /* the container for all the edit controls */ #controlbar, .controlbar { padding: 2px; } /* the WYSIWYG edit area itself */ #htmlbox { border: 2px inset; font: 10pt verdana; overflow: auto; } /* an individual button */ .imagebutton { left: 0px; top: 0px; } /* an individual WYSIWYG color element in the color popup */ .ocolor { padding: 2px; font-size: 1px; } /* WYSIWYG the part of the color element that gets colored */ .ocolor div { width: 10px; height: 10px; border: 1px solid #ACA899; } /* WYSIWYG font, size and smilie elements within popups */ .ofont, .osize, .osmilie, .otextlink { font: 11px tahoma; cursor: default; } /* style for WYSIWYG font option elements */ .ofont { padding: 0px 4px 0px 10px; font-size: 14px; height: 20px; } /* style for WYSIWYG size option elements */ .osize { padding: 0px 4px 0px 4px; width: 30px; } /* the smilie image within a WYSIWYG smilie popup */ .osmilie img { vertical-align: middle; margin: 4px; } /* text buttons within popup menus */ .otextlink { text-align: center; margin-top: 4px; height: 20px; } /* the left cell of a WYSIWYG popup menu control */ .popup_feedback { font: 11px tahoma; height: 18px; padding: 0px 3px 0px 3px; white-space: nowrap; overflow: hidden; } /* the container window for a WYSIWYG popup menu */ .popupwindow { border: 1px solid APPWORKSPACE; padding: 3px; position: absolute; left: 0px; top: 0px; z-index: 5; } /* the WYSIWYG color popup */ #popup_forecolor { padding: 3px; } /* the WYSIWYG font popup */ #popup_fontname { padding: 1px; overflow: auto; overflow-x: hidden; overflow-y: scroll; } /* the WYSIWYG size popup */ #popup_fontsize { padding: 1px; } /* the WYSIWYG smilie popup */ #popup_smilie { padding: 1px; overflow: auto; overflow-x: hidden; overflow-y: scroll; } /* the WYSIWYG attach popup */ #popup_attach { padding: 1px; overflow: auto; overflow-x: hidden; overflow-y: scroll; } /* the context-notification area for WYSIWYG font and size feedback */ #fontOut, #sizeOut, .popup_feedback div { height: 16px; border: 0px solid; padding: 0px 2px 0px 2px; cursor: default; font: 11px tahoma; overflow: hidden; } /*======================================================================*\ || #################################################################### || # Downloaded: 05:52, Tue Jun 24th 2008 || # CVS: $RCSfile$ - $Revision: 13470 $ || #################################################################### \*======================================================================*/ ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=vbulletin_quick_edit.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_quick_edit.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_quick_edit.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIElu aXRpYWxpemUgQUpBWCBwb3N0IGVkaXRpbmcKKgoqIEBwYXJhbQltaXhlZAlJRCBv ZiBlbGVtZW50IChvciBhY3R1YWwgZWxlbWVudCkgY29udGFpbmluZyBwb3N0Yml0 cwoqLwpmdW5jdGlvbiB2Ql9BSkFYX1F1aWNrRWRpdF9Jbml0KHBvc3RvYmopCnsK CWlmIChBSkFYX0NvbXBhdGlibGUpCgl7CgkJaWYgKHR5cGVvZiBwb3N0b2JqID09 ICdzdHJpbmcnKQoJCXsKCQkJcG9zdG9iaiA9IGZldGNoX29iamVjdChwb3N0b2Jq KTsKCQl9CgkJdmFyIGFuY2hvcnMgPSBmZXRjaF90YWdzKHBvc3RvYmosICdhJyk7 CgkJdmFyIHBvc3RpZCA9IDA7CgkJZm9yICh2YXIgaSA9IDA7IGkgPCBhbmNob3Jz Lmxlbmd0aDsgaSsrKQoJCXsKCQkJaWYgKGFuY2hvcnNbaV0ubmFtZSAmJiBhbmNo b3JzW2ldLm5hbWUuaW5kZXhPZigndkI6OlF1aWNrRWRpdDo6JykgIT0gLTEpCgkJ CXsKCQkJCWFuY2hvcnNbaV0ub25jbGljayA9IHZCX0FKQVhfUXVpY2tFZGl0b3Jf RXZlbnRzLnByb3RvdHlwZS5lZGl0YnV0dG9uX2NsaWNrOwoJCQl9CgkJfQoJfQp9 CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovLyB2Ql9BSkFYX1F1 aWNrRWRpdG9yCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovKioK KiBDbGFzcyB0byBhbGxvdyBxdWljayBlZGl0aW5nIG9mIHBvc3RzIHdpdGhpbiBw b3N0Yml0IHZpYSBBSkFYCiovCmZ1bmN0aW9uIHZCX0FKQVhfUXVpY2tFZGl0b3Io KQp7Cgl0aGlzLnBvc3RpZCA9IG51bGw7Cgl0aGlzLm1lc3NhZ2VvYmogPSBudWxs OwoJdGhpcy5jb250YWluZXIgPSBudWxsOwoJdGhpcy5vcmlnaW5hbGh0bWwgPSBu dWxsOwoJdGhpcy5hamF4ID0gbnVsbDsKCXRoaXMuZWRpdHN0YXRlID0gZmFsc2U7 Cgl0aGlzLmVkaXRvcmNvdW50ZXIgPSAwOwoJdGhpcy5wZW5kaW5nID0gZmFsc2U7 Cn0KCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIHZCX0FKQVhf UXVpY2tFZGl0b3IgbWV0aG9kcwoKLyoqCiogQ2hlY2sgaWYgdGhlIEFKQVggc3lz dGVtIGlzIHJlYWR5IGZvciB1cyB0byBwcm9jZWVkCioKKiBAcmV0dXJuCWJvb2xl YW4KKi8KdkJfQUpBWF9RdWlja0VkaXRvci5wcm90b3R5cGUucmVhZHkgPSBmdW5j dGlvbigpCnsKCWlmICh0aGlzLmVkaXRzdGF0ZSB8fCB0aGlzLnBlbmRpbmcpCgl7 CgkJcmV0dXJuIGZhbHNlOwoJfQoJZWxzZQoJewoJCXJldHVybiB0cnVlOwoJfQp9 OwoKLyoqCiogUHJlcGFyZSB0byBlZGl0IGEgc2luZ2xlIHBvc3QKKgoqIEBwYXJh bQlzdHJpbmcJTmFtZSBhdHRyaWJ1dGUgb2YgY2xpY2tlZCBsaW5rIC0gdGFrZXMg dGhlIGZvcm0gb2YgJ3ZCOjpRdWlja0VkaXQ6OiRwb3N0aWQnCioKKiBAcmV0dXJu CWJvb2xlYW4JZmFsc2UKKi8KdkJfQUpBWF9RdWlja0VkaXRvci5wcm90b3R5cGUu ZWRpdCA9IGZ1bmN0aW9uKGFuY2hvcl9uYW1lKQp7Cgl2YXIgdGVzdF9hamF4ID0g bmV3IHZCX0FKQVhfSGFuZGxlcih0cnVlKTsKCWlmICghdGVzdF9hamF4LmluaXQo KSB8fCAodHlwZW9mIHZiX2Rpc2FibGVfYWpheCAhPSAndW5kZWZpbmVkJyAmJiB2 Yl9kaXNhYmxlX2FqYXggPiAwKSkKCXsKCQkvLyBjb3VsZG4ndCBpbml0aWFsaXpl LCByZXR1cm4gdHJ1ZSB0byBhbGxvdyBjbGljayB0byBnbyB0aHJvdWdoCgkJcmV0 dXJuIHRydWU7Cgl9CgoJdmFyIHRtcHBvc3RpZCA9IGFuY2hvcl9uYW1lLnN1YnN0 cihhbmNob3JfbmFtZS5sYXN0SW5kZXhPZignOjonKSArIDIpOwoKCWlmICh0aGlz LnBlbmRpbmcpCgl7CgkJLy8gc29tZXRoaW5nIGlzIHdhaXRpbmcgdG8gY29tcGxl dGUKCQlyZXR1cm4gZmFsc2U7Cgl9CgllbHNlIGlmICghdGhpcy5yZWFkeSgpKQoJ ewoJCWlmICh0aGlzLnBvc3RpZCA9PSB0bXBwb3N0aWQpCgkJewoJCQl0aGlzLmZ1 bGxfZWRpdCgpOwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCXRoaXMuYWJvcnQoKTsK CX0KCgl0aGlzLmVkaXRvcmNvdW50ZXIrKzsKCXRoaXMuZWRpdG9yaWQgPSAndkJf RWRpdG9yX1FFXycgKyB0aGlzLmVkaXRvcmNvdW50ZXI7CgoJdGhpcy5wb3N0aWQg PSB0bXBwb3N0aWQ7CgoJdGhpcy5tZXNzYWdlb2JqID0gZmV0Y2hfb2JqZWN0KCdw b3N0X21lc3NhZ2VfJyArIHRoaXMucG9zdGlkKTsKCXRoaXMub3JpZ2luYWxodG1s ID0gdGhpcy5tZXNzYWdlb2JqLmlubmVySFRNTDsKCgl0aGlzLnVuY2hhbmdlZCA9 IG51bGw7Cgl0aGlzLnVuY2hhbmdlZF9yZWFzb24gPSBudWxsOwoKCXRoaXMuZmV0 Y2hfZWRpdG9yKCk7CgoJdGhpcy5lZGl0c3RhdGUgPSB0cnVlOwoKCXJldHVybiBm YWxzZTsKfTsKCi8qKgoqIFNlbmQgYW4gQUpBWCByZXF1ZXN0IHRvIGZldGNoIHRo ZSBlZGl0b3IgSFRNTAoqLwp2Ql9BSkFYX1F1aWNrRWRpdG9yLnByb3RvdHlwZS5m ZXRjaF9lZGl0b3IgPSBmdW5jdGlvbigpCnsKCWlmIChmZXRjaF9vYmplY3QoJ3By b2dyZXNzXycgKyB0aGlzLnBvc3RpZCkpCgl7CgkJZmV0Y2hfb2JqZWN0KCdwcm9n cmVzc18nICsgdGhpcy5wb3N0aWQpLnN0eWxlLmRpc3BsYXkgPSAnJzsKCX0KCWRv Y3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ3dhaXQnOwoJdGhpcy5hamF4ID0g bmV3IHZCX0FKQVhfSGFuZGxlcih0cnVlKTsKCXRoaXMuYWpheC5vbnJlYWR5c3Rh dGVjaGFuZ2UodGhpcy5kaXNwbGF5X2VkaXRvcik7Cgl0aGlzLmFqYXguc2VuZCgn YWpheC5waHA/ZG89cXVpY2tlZGl0JnA9JyArIHRoaXMucG9zdGlkLCAnZG89cXVp Y2tlZGl0JnA9JyArIHRoaXMucG9zdGlkICsgJyZlZGl0b3JpZD0nICsgUEhQLnVy bGVuY29kZSh0aGlzLmVkaXRvcmlkKSk7Cgl0aGlzLnBlbmRpbmcgPSB0cnVlOwp9 OwoKLyoqCiogRGlzcGxheSB0aGUgZWRpdG9yIEhUTUwgd2hlbiBBSkFYIHNheXMg ZmV0Y2hfZWRpdG9yKCkgaXMgcmVhZHkKKi8KdkJfQUpBWF9RdWlja0VkaXRvci5w cm90b3R5cGUuZGlzcGxheV9lZGl0b3IgPSBmdW5jdGlvbigpCnsKCXZhciBBSkFY ID0gdkJfUXVpY2tFZGl0b3IuYWpheC5oYW5kbGVyOwoKCWlmIChBSkFYLnJlYWR5 U3RhdGUgPT0gNCAmJiBBSkFYLnN0YXR1cyA9PSAyMDApCgl7CgkJaWYgKGZldGNo X29iamVjdCgncHJvZ3Jlc3NfJyArIHZCX1F1aWNrRWRpdG9yLnBvc3RpZCkpCgkJ ewoJCQlmZXRjaF9vYmplY3QoJ3Byb2dyZXNzXycgKyB2Ql9RdWlja0VkaXRvci5w b3N0aWQpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgkJfQoJCWRvY3VtZW50LmJv ZHkuc3R5bGUuY3Vyc29yID0gJ2F1dG8nOwoJCXZCX1F1aWNrRWRpdG9yLnBlbmRp bmcgPSBmYWxzZTsKCgkJaWYgKGZldGNoX3RhZ19jb3VudChBSkFYLnJlc3BvbnNl WE1MLCAnZGlzYWJsZWQnKSkKCQl7CgkJCS8vIHRoaXMgd2lsbCBmaXJlIGlmIHF1 aWNrIGVkaXQgaGFzIGJlZW4gZGlzYWJsZWQgYWZ0ZXIgdGhlIHNob3d0aHJlYWQg cGFnZSBpcyBsb2FkZWQKCQkJd2luZG93LmxvY2F0aW9uID0gJ2VkaXRwb3N0LnBo cD8nICsgU0VTU0lPTlVSTCArICdkbz1lZGl0cG9zdCZwb3N0aWQ9JyArIHZCX1F1 aWNrRWRpdG9yLnBvc3RpZDsKCQl9CgkJZWxzZSBpZiAoZmV0Y2hfdGFnX2NvdW50 KEFKQVgucmVzcG9uc2VYTUwsICdlcnJvcicpKQoJCXsKCQkJLy8gZG8gbm90aGlu ZwoJCX0KCQllbHNlCgkJewoJCQl2YXIgZWRpdG9yID0gZmV0Y2hfdGFncyhBSkFY LnJlc3BvbnNlWE1MLCAnZWRpdG9yJylbMF07CgkJCWlmICh0eXBlb2YgZWRpdG9y ID09ICd1bmRlZmluZWQnKQoJCQl7CgkJCQl3aW5kb3cubG9jYXRpb24gPSAiZWRp dHBvc3QucGhwPyIgKyBTRVNTSU9OVVJMICsgImRvPWVkaXRwb3N0JnBvc3RpZD0i ICsgdGhpcy5wb3N0aWQ7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQkJdmFyIHJl YXNvbiA9IGVkaXRvci5nZXRBdHRyaWJ1dGUoJ3JlYXNvbicpOwoKCQkJLy8gZGlz cGxheSB0aGUgZWRpdG9yCgkJCXZCX1F1aWNrRWRpdG9yLm1lc3NhZ2VvYmouaW5u ZXJIVE1MID0gdkJfUXVpY2tFZGl0b3IuYWpheC5mZXRjaF9kYXRhKGVkaXRvcik7 CgoJCQkvLyBkaXNwbGF5IHRoZSByZWFzb24KCQkJaWYgKGZldGNoX29iamVjdCh2 Ql9RdWlja0VkaXRvci5lZGl0b3JpZCArICdfZWRpdF9yZWFzb24nKSkKCQkJewoJ CQkJdkJfUXVpY2tFZGl0b3IudW5jaGFuZ2VkX3JlYXNvbiA9IFBIUC51bmh0bWxz cGVjaWFsY2hhcnMocmVhc29uKTsKCQkJCWZldGNoX29iamVjdCh2Ql9RdWlja0Vk aXRvci5lZGl0b3JpZCArICdfZWRpdF9yZWFzb24nKS52YWx1ZSA9IHZCX1F1aWNr RWRpdG9yLnVuY2hhbmdlZF9yZWFzb247CgkJCQlmZXRjaF9vYmplY3QodkJfUXVp Y2tFZGl0b3IuZWRpdG9yaWQgKyAnX2VkaXRfcmVhc29uJykub25rZXlwcmVzcyA9 IHZCX0FKQVhfUXVpY2tFZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5yZWFzb25fa2V5 X3RyYXA7CgkJCX0KCgkJCS8vIGluaXRpYWxpemUgdGhlIGVkaXRvcgoJCQl2Ql9F ZGl0b3JbdkJfUXVpY2tFZGl0b3IuZWRpdG9yaWRdID0gbmV3IHZCX1RleHRfRWRp dG9yKAoJCQkJdkJfUXVpY2tFZGl0b3IuZWRpdG9yaWQsCgkJCQllZGl0b3IuZ2V0 QXR0cmlidXRlKCdtb2RlJyksCgkJCQllZGl0b3IuZ2V0QXR0cmlidXRlKCdwYXJz ZXR5cGUnKSwKCQkJCWVkaXRvci5nZXRBdHRyaWJ1dGUoJ3BhcnNlc21pbGllcycp CgkJCSk7CgoJCQlpZiAoZmV0Y2hfb2JqZWN0KHZCX1F1aWNrRWRpdG9yLmVkaXRv cmlkICsgJ19lZGl0b3InKSAmJiBmZXRjaF9vYmplY3QodkJfUXVpY2tFZGl0b3Iu ZWRpdG9yaWQgKyAnX2VkaXRvcicpLnNjcm9sbEludG9WaWV3KQoJCQl7CgkJCQlm ZXRjaF9vYmplY3QodkJfUXVpY2tFZGl0b3IuZWRpdG9yaWQgKyAnX2VkaXRvcicp LnNjcm9sbEludG9WaWV3KHRydWUpOwoJCQl9CgoJCQl2Ql9FZGl0b3JbdkJfUXVp Y2tFZGl0b3IuZWRpdG9yaWRdLmVkaXRib3guc3R5bGUud2lkdGggPSAnMTAwJSc7 CgkJCXZCX0VkaXRvclt2Ql9RdWlja0VkaXRvci5lZGl0b3JpZF0uY2hlY2tfZm9j dXMoKTsKCgkJCXZCX1F1aWNrRWRpdG9yLnVuY2hhbmdlZCA9IHZCX0VkaXRvclt2 Ql9RdWlja0VkaXRvci5lZGl0b3JpZF0uZ2V0X2VkaXRvcl9jb250ZW50cygpOwoK CQkJZmV0Y2hfb2JqZWN0KHZCX1F1aWNrRWRpdG9yLmVkaXRvcmlkICsgJ19zYXZl Jykub25jbGljayA9IHZCX1F1aWNrRWRpdG9yLnNhdmU7CgkJCWZldGNoX29iamVj dCh2Ql9RdWlja0VkaXRvci5lZGl0b3JpZCArICdfYWJvcnQnKS5vbmNsaWNrID0g dkJfUXVpY2tFZGl0b3IuYWJvcnQ7CgkJCWZldGNoX29iamVjdCh2Ql9RdWlja0Vk aXRvci5lZGl0b3JpZCArICdfYWR2Jykub25jbGljayA9IHZCX1F1aWNrRWRpdG9y LmZ1bGxfZWRpdDsKCgkJCXZhciBkZWxidXR0b24gPSBmZXRjaF9vYmplY3QodkJf UXVpY2tFZGl0b3IuZWRpdG9yaWQgKyAnX2RlbGV0ZScpOwoJCQlpZiAoZGVsYnV0 dG9uKQoJCQl7CgkJCQlkZWxidXR0b24ub25jbGljayA9IHZCX1F1aWNrRWRpdG9y LnNob3dfZGVsZXRlOwoJCQl9CgkJfQoKCQlpZiAoaXNfaWUpCgkJewoJCQlBSkFY LmFib3J0KCk7CgkJfQoJfQp9OwoKLyoqCiogRGVzdHJveSB0aGUgZWRpdG9yLCBh bmQgdXNlIHRoZSBzcGVjaWZpZWQgdGV4dCBhcyB0aGUgcG9zdCBjb250ZW50cwoq CiogQHBhcmFtCXN0cmluZwlUZXh0IG9mIHBvc3QKKi8KdkJfQUpBWF9RdWlja0Vk aXRvci5wcm90b3R5cGUucmVzdG9yZSA9IGZ1bmN0aW9uKHBvc3RfaHRtbCwgdHlw ZSkKewoJdGhpcy5oaWRlX2Vycm9ycyh0cnVlKTsKCWlmICh0aGlzLmVkaXRvcmlk ICYmIHZCX0VkaXRvclt0aGlzLmVkaXRvcmlkXSAmJiB2Ql9FZGl0b3JbdGhpcy5l ZGl0b3JpZF0uaW5pdGlhbGl6ZWQpCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9y aWRdLmRlc3Ryb3koKTsKCX0KCWlmICh0eXBlID09ICd0YWJsZW9iaicpCgl7CgkJ Ly8gdXN1YWxseSBjYWxsZWQgd2hlbiBtZXNzYWdlIGlzIHNhdmVkCgkJZmV0Y2hf b2JqZWN0KCdlZGl0JyArIHRoaXMucG9zdGlkKS5pbm5lckhUTUwgPSBwb3N0X2h0 bWw7Cgl9CgllbHNlCgl7CgkJLy8gdXN1YWxseSBjYWxsZWQgd2hlbiBtZXNzYWdl IGVkaXQgaXMgY2FuY2VsbGVkCgkJdGhpcy5tZXNzYWdlb2JqLmlubmVySFRNTCA9 IHBvc3RfaHRtbDsKCX0KCgl0aGlzLmVkaXRzdGF0ZSA9IGZhbHNlOwp9OwoKLyoq CiogQ2FuY2VsIHRoZSBwb3N0IGVkaXQgYW5kIHJlc3RvcmUgZXZlcnl0aGluZyB0 byBob3cgaXQgc3RhcnRlZAoqCiogQHBhcmFtCWV2ZW50CUV2ZW50IG9iamVjdAoq Lwp2Ql9BSkFYX1F1aWNrRWRpdG9yLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9u KGUpCnsKCWlmIChmZXRjaF9vYmplY3QoJ3Byb2dyZXNzXycgKyB2Ql9RdWlja0Vk aXRvci5wb3N0aWQpKQoJewoJCWZldGNoX29iamVjdCgncHJvZ3Jlc3NfJyArIHZC X1F1aWNrRWRpdG9yLnBvc3RpZCkuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCX0K CWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ2F1dG8nOwoJdkJfUXVpY2tF ZGl0b3IucmVzdG9yZSh2Ql9RdWlja0VkaXRvci5vcmlnaW5hbGh0bWwsICdtZXNz YWdlb2JqJyk7Cn07CgovKioKKiBQYXNzIHRoZSBlZGl0cyBhbG9uZyB0byB0aGUg ZnVsbCBlZGl0cG9zdC5waHAgaW50ZXJmYWNlCioKKiBAcGFyYW0JZXZlbnQJRXZl bnQgb2JqZWN0CiovCnZCX0FKQVhfUXVpY2tFZGl0b3IucHJvdG90eXBlLmZ1bGxf ZWRpdCA9IGZ1bmN0aW9uKGUpCnsKCXZhciBmb3JtID0gbmV3IHZCX0hpZGRlbl9G b3JtKCdlZGl0cG9zdC5waHA/ZG89ZWRpdHBvc3QmcG9zdGlkPScgKyB2Ql9RdWlj a0VkaXRvci5wb3N0aWQpOwoKCWZvcm0uYWRkX3ZhcmlhYmxlKCdkbycsICd1cGRh dGVwb3N0Jyk7Cglmb3JtLmFkZF92YXJpYWJsZSgncycsIGZldGNoX3Nlc3Npb25o YXNoKCkpOwoJZm9ybS5hZGRfdmFyaWFibGUoJ3NlY3VyaXR5dG9rZW4nLCBTRUNV UklUWVRPS0VOKTsKCWZvcm0uYWRkX3ZhcmlhYmxlKCdhZHZhbmNlZCcsIDEpOwoJ Ly8gRG9uJ3QgcHJldmlldyAtIHNlZSBlZGl0cG9zdC5waHAgaWYgeW91IHdhbnQg dG8ga25vdyB3aHkKCS8vZm9ybS5hZGRfdmFyaWFibGUoJ3ByZXZpZXcnLCAnWWVz Jyk7Cglmb3JtLmFkZF92YXJpYWJsZSgncG9zdGlkJywgdkJfUXVpY2tFZGl0b3Iu cG9zdGlkKTsKCWZvcm0uYWRkX3ZhcmlhYmxlKCd3eXNpd3lnJywgdkJfRWRpdG9y W3ZCX1F1aWNrRWRpdG9yLmVkaXRvcmlkXS53eXNpd3lnX21vZGUpOwoJZm9ybS5h ZGRfdmFyaWFibGUoJ21lc3NhZ2UnLCB2Ql9FZGl0b3JbdkJfUXVpY2tFZGl0b3Iu ZWRpdG9yaWRdLmdldF9lZGl0b3JfY29udGVudHMoKSk7Cglmb3JtLmFkZF92YXJp YWJsZSgncmVhc29uJywgZmV0Y2hfb2JqZWN0KHZCX1F1aWNrRWRpdG9yLmVkaXRv cmlkICsgJ19lZGl0X3JlYXNvbicpLnZhbHVlKTsKCglmb3JtLnN1Ym1pdF9mb3Jt KCk7Cn0KCi8qKgoqIFNhdmUgdGhlIGVkaXRlZCBwb3N0IHZpYSBBSkFYCioKKiBA cGFyYW0JZXZlbnQJRXZlbnQgb2JqZWN0CiovCnZCX0FKQVhfUXVpY2tFZGl0b3Iu cHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbihlKQp7Cgl2YXIgbmV3dGV4dCA9IHZC X0VkaXRvclt2Ql9RdWlja0VkaXRvci5lZGl0b3JpZF0uZ2V0X2VkaXRvcl9jb250 ZW50cygpOwoJdmFyIG5ld3JlYXNvbiA9IHZCX0VkaXRvclt2Ql9RdWlja0VkaXRv ci5lZGl0b3JpZF07CgoJaWYgKG5ld3RleHQgPT0gdkJfUXVpY2tFZGl0b3IudW5j aGFuZ2VkICYmIG5ld3JlYXNvbiA9PSB2Ql9RdWlja0VkaXRvci51bmNoYW5nZWRf cmVhc29uKQoJewoJCXZCX1F1aWNrRWRpdG9yLmFib3J0KGUpOwoJfQoJZWxzZQoJ ewoJCWZldGNoX29iamVjdCh2Ql9RdWlja0VkaXRvci5lZGl0b3JpZCArICdfcG9z dGluZ19tc2cnKS5zdHlsZS5kaXNwbGF5ID0gJyc7CgkJZG9jdW1lbnQuYm9keS5z dHlsZS5jdXJzb3IgPSAnd2FpdCc7CgoJCXBjX29iaiA9IGZldGNoX29iamVjdCgn cG9zdGNvdW50JyArIHZCX1F1aWNrRWRpdG9yLnBvc3RpZCk7CgkJdkJfUXVpY2tF ZGl0b3IuYWpheCA9IG5ldyB2Ql9BSkFYX0hhbmRsZXIodHJ1ZSk7CgkJdkJfUXVp Y2tFZGl0b3IuYWpheC5vbnJlYWR5c3RhdGVjaGFuZ2UodkJfUXVpY2tFZGl0b3Iu dXBkYXRlKTsKCQl2Ql9RdWlja0VkaXRvci5hamF4LnNlbmQoJ2VkaXRwb3N0LnBo cD9kbz11cGRhdGVwb3N0JnBvc3RpZD0nICsgdkJfUXVpY2tFZGl0b3IucG9zdGlk LAoJCQknZG89dXBkYXRlcG9zdCZhamF4PTEmcG9zdGlkPScKCQkJKyB2Ql9RdWlj a0VkaXRvci5wb3N0aWQKCQkJKyAnJnd5c2l3eWc9JyArIHZCX0VkaXRvclt2Ql9R dWlja0VkaXRvci5lZGl0b3JpZF0ud3lzaXd5Z19tb2RlCgkJCSsgJyZtZXNzYWdl PScgKyBQSFAudXJsZW5jb2RlKG5ld3RleHQpCgkJCSsgJyZyZWFzb249JyArIFBI UC51cmxlbmNvZGUoZmV0Y2hfb2JqZWN0KHZCX1F1aWNrRWRpdG9yLmVkaXRvcmlk ICsgJ19lZGl0X3JlYXNvbicpLnZhbHVlKQoJCQkrIChwY19vYmogIT0gbnVsbCA/ ICcmcG9zdGNvdW50PScgKyBQSFAudXJsZW5jb2RlKHBjX29iai5uYW1lKSA6ICcn KQoJCSk7CgoJCXZCX1F1aWNrRWRpdG9yLnBlbmRpbmcgPSB0cnVlOwoJfQp9OwoK LyoqCiogU2hvdyB0aGUgZGVsZXRlIGRpYWxvZwoqLwp2Ql9BSkFYX1F1aWNrRWRp dG9yLnByb3RvdHlwZS5zaG93X2RlbGV0ZSA9IGZ1bmN0aW9uKCkKewoJdkJfUXVp Y2tFZGl0b3IuZGVsZXRlZGlhbG9nID0gZmV0Y2hfb2JqZWN0KCdxdWlja2VkaXRf ZGVsZXRlJyk7CglpZiAodkJfUXVpY2tFZGl0b3IuZGVsZXRlZGlhbG9nICYmIHZC X1F1aWNrRWRpdG9yLmRlbGV0ZWRpYWxvZy5zdHlsZS5kaXNwbGF5ICE9ICcnKQoJ ewoJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZWRpYWxvZy5zdHlsZS5kaXNwbGF5ID0g Jyc7CgoJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZWJ1dHRvbiA9IGZldGNoX29iamVj dCgncXVpY2tlZGl0X2RvZGVsZXRlJyk7CgkJdkJfUXVpY2tFZGl0b3IuZGVsZXRl YnV0dG9uLm9uY2xpY2sgPSB2Ql9RdWlja0VkaXRvci5kZWxldGVfcG9zdDsKCgkJ aWYgKGZldGNoX29iamVjdCgnZGVsX3JlYXNvbicpKQoJCXsKCQkJZmV0Y2hfb2Jq ZWN0KCdkZWxfcmVhc29uJykub25rZXlwcmVzcyA9IHZCX0FKQVhfUXVpY2tFZGl0 b3JfRXZlbnRzLnByb3RvdHlwZS5kZWxldGVfaXRlbXNfa2V5X3RyYXA7CgkJfQoK CQkvLyBkb24ndCBkbyB0aGlzIHN0dWZmIGZvciBicm93c2VycyB0aGF0IGRvbid0 IGhhdmUgYW55IGRlZmluZWQgZXZlbnRzCgkJLy8gdG8gZGV0ZWN0IGNoYW5nZWQg cmFkaW8gYnV0dG9ucyB3aXRoIGtleWJvYXJkIG5hdmlnYXRpb24KCQlpZiAoIWlz X29wZXJhICYmICFpc19zYWYpCgkJewoJCQl2Ql9RdWlja0VkaXRvci5kZWxldGVi dXR0b24uZGlzYWJsZWQgPSB0cnVlOwoJCQl2Ql9RdWlja0VkaXRvci5kZWxldGVv cHRpb25zID0gbmV3IEFycmF5KCk7CgoJCQl2Ql9RdWlja0VkaXRvci5kZWxldGVv cHRpb25zWydsZWF2ZSddID0gZmV0Y2hfb2JqZWN0KCdyYl9kZWxfbGVhdmUnKTsK CQkJdkJfUXVpY2tFZGl0b3IuZGVsZXRlb3B0aW9uc1snc29mdCddID0gZmV0Y2hf b2JqZWN0KCdyYl9kZWxfc29mdCcpOwoJCQl2Ql9RdWlja0VkaXRvci5kZWxldGVv cHRpb25zWydoYXJkJ10gPSBmZXRjaF9vYmplY3QoJ3JiX2RlbF9oYXJkJyk7CgoJ CQlmb3IgKHZhciBpIGluIHZCX1F1aWNrRWRpdG9yLmRlbGV0ZW9wdGlvbnMpCgkJ CXsKCQkJCWlmICh2Ql9RdWlja0VkaXRvci5kZWxldGVvcHRpb25zW2ldKQoJCQkJ ewoJCQkJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZW9wdGlvbnNbaV0ub25jbGljayA9 IHZCX1F1aWNrRWRpdG9yLmRlbGV0ZW9wdGlvbnNbaV0ub25jaGFuZ2UgPSB2Ql9B SkFYX1F1aWNrRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZGVsZXRlX2J1dHRvbl9o YW5kbGVyOwoJCQkJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZW9wdGlvbnNbaV0ub25r ZXlwcmVzcyA9IHZCX0FKQVhfUXVpY2tFZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5k ZWxldGVfaXRlbXNfa2V5X3RyYXA7CgkJCQl9CgkJCX0KCQl9Cgl9Cn07CgovKioK KiBSdW4gdGhlIGRlbGV0ZSBzeXN0ZW0KKi8KdkJfQUpBWF9RdWlja0VkaXRvci5w cm90b3R5cGUuZGVsZXRlX3Bvc3QgPSBmdW5jdGlvbigpCnsKCXZhciBkb250ZGVs ZXRlID0gZmV0Y2hfb2JqZWN0KCdyYl9kZWxfbGVhdmUnKTsKCWlmIChkb250ZGVs ZXRlICYmIGRvbnRkZWxldGUuY2hlY2tlZCkKCXsKCQl2Ql9RdWlja0VkaXRvci5h Ym9ydCgpOwoJCXJldHVybjsKCX0KCgl2YXIgZm9ybSA9IG5ldyB2Ql9IaWRkZW5f Rm9ybSgnZWRpdHBvc3QucGhwJyk7CgoJZm9ybS5hZGRfdmFyaWFibGUoJ2RvJywg J2RlbGV0ZXBvc3QnKTsKCWZvcm0uYWRkX3ZhcmlhYmxlKCdzJywgZmV0Y2hfc2Vz c2lvbmhhc2goKSk7Cglmb3JtLmFkZF92YXJpYWJsZSgnc2VjdXJpdHl0b2tlbics IFNFQ1VSSVRZVE9LRU4pOwoJZm9ybS5hZGRfdmFyaWFibGUoJ3Bvc3RpZCcsIHZC X1F1aWNrRWRpdG9yLnBvc3RpZCk7Cglmb3JtLmFkZF92YXJpYWJsZXNfZnJvbV9v YmplY3QodkJfUXVpY2tFZGl0b3IuZGVsZXRlZGlhbG9nKTsKCglmb3JtLnN1Ym1p dF9mb3JtKCk7Cn07CgovKioKKiBDaGVjayBmb3IgZXJyb3JzIGV0Yy4gYW5kIGlu aXRpYWxpemUgcmVzdG9yZSB3aGVuIEFKQVggc2F5cyBzYXZlKCkgaXMgY29tcGxl dGUKKgoqIEByZXR1cm4JYm9vbGVhbglmYWxzZQoqLwp2Ql9BSkFYX1F1aWNrRWRp dG9yLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpCnsKCXZhciBBSkFYID0g dkJfUXVpY2tFZGl0b3IuYWpheC5oYW5kbGVyOwoKCWlmIChBSkFYLnJlYWR5U3Rh dGUgPT0gNCAmJiBBSkFYLnN0YXR1cyA9PSAyMDApCgl7CgkJdkJfUXVpY2tFZGl0 b3IucGVuZGluZyA9IGZhbHNlOwoJCWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29y ID0gJ2F1dG8nOwoJCWZldGNoX29iamVjdCh2Ql9RdWlja0VkaXRvci5lZGl0b3Jp ZCArICdfcG9zdGluZ19tc2cnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoKCQkv LyB0aGlzIGlzIHRoZSBuaWNlIGVycm9yIGhhbmRsZXIsIG9mIHdoaWNoIFNhZmFy aSBtYWtlcyBhIG1lc3MKCQlpZiAoZmV0Y2hfdGFnX2NvdW50KEFKQVgucmVzcG9u c2VYTUwsICdlcnJvcicpKQoJCXsKCQkJdmFyIGVycm9ycyA9IGZldGNoX3RhZ3Mo QUpBWC5yZXNwb25zZVhNTCwgJ2Vycm9yJyk7CgoJCQl2YXIgZXJyb3JfaHRtbCA9 ICc8b2w+JzsKCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBp KyspCgkJCXsKCQkJCWVycm9yX2h0bWwgKz0gJzxsaT4nICsgdkJfUXVpY2tFZGl0 b3IuYWpheC5mZXRjaF9kYXRhKGVycm9yc1tpXSkgKyAnPC9saT4nOwoJCQl9CgkJ CWVycm9yX2h0bWwgKz0gJzwvb2w+JzsKCgkJCXZCX1F1aWNrRWRpdG9yLnNob3df ZXJyb3JzKCc8b2w+JyArIGVycm9yX2h0bWwgKyAnPC9vbD4nKTsKCQl9CgkJZWxz ZQoJCXsKCQkJdkJfUXVpY2tFZGl0b3IucmVzdG9yZSh2Ql9RdWlja0VkaXRvci5h amF4LmZldGNoX2RhdGEoZmV0Y2hfdGFncyhBSkFYLnJlc3BvbnNlWE1MLCAncG9z dGJpdCcpWzBdKSwgJ3RhYmxlb2JqJyk7CgkJCVBvc3RCaXRfSW5pdChmZXRjaF9v YmplY3QoJ3Bvc3QnICsgdkJfUXVpY2tFZGl0b3IucG9zdGlkKSwgdkJfUXVpY2tF ZGl0b3IucG9zdGlkKTsKCQl9CgoJCWlmIChpc19pZSkKCQl7CgkJCUFKQVguYWJv cnQoKTsKCQl9Cgl9CgoJcmV0dXJuIGZhbHNlOwp9OwoKLyoqCiogUG9wIHVwIGEg d2luZG93IHNob3dpbmcgZXJyb3JzCioKKiBAcGFyYW0Jc3RyaW5nCUVycm9yIEhU TUwKKi8KdkJfQUpBWF9RdWlja0VkaXRvci5wcm90b3R5cGUuc2hvd19lcnJvcnMg PSBmdW5jdGlvbihlcnJvcnRleHQpCnsKCWZldGNoX29iamVjdCgnYWpheF9wb3N0 X2Vycm9yc19tZXNzYWdlJykuaW5uZXJIVE1MID0gZXJyb3J0ZXh0OwoJdmFyIGVy cm9ydGFibGUgPSBmZXRjaF9vYmplY3QoJ2FqYXhfcG9zdF9lcnJvcnMnKTsKCWVy cm9ydGFibGUuc3R5bGUud2lkdGggPSAnNDAwcHgnOwoJZXJyb3J0YWJsZS5zdHls ZS56SW5kZXggPSA1MDA7Cgl2YXIgbWVhc3VyZXIgPSAoaXNfc2FmID8gJ2JvZHkn IDogJ2RvY3VtZW50RWxlbWVudCcpOwoJZXJyb3J0YWJsZS5zdHlsZS5sZWZ0ID0g KGlzX2llID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIDog c2VsZi5pbm5lcldpZHRoKSAvIDIgLSAyMDAgKyBkb2N1bWVudFttZWFzdXJlcl0u c2Nyb2xsTGVmdCArICdweCc7CgllcnJvcnRhYmxlLnN0eWxlLnRvcCA9IChpc19p ZSA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgOiBzZWxm LmlubmVySGVpZ2h0KSAvIDIgLSAxNTAgKyBkb2N1bWVudFttZWFzdXJlcl0uc2Ny b2xsVG9wICsgJ3B4JzsKCWVycm9ydGFibGUuc3R5bGUuZGlzcGxheSA9ICcnOwp9 OwoKLyoqCiogSGlkZSB0aGUgZXJyb3Igd2luZG93CiovCnZCX0FKQVhfUXVpY2tF ZGl0b3IucHJvdG90eXBlLmhpZGVfZXJyb3JzID0gZnVuY3Rpb24oc2tpcF9mb2N1 c19jaGVjaykKewoJdGhpcy5lcnJvcnMgPSBmYWxzZTsKCWZldGNoX29iamVjdCgn YWpheF9wb3N0X2Vycm9ycycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CglpZiAo c2tpcF9mb2N1c19jaGVjayAhPSB0cnVlKQoJewoJCXZCX0VkaXRvclt0aGlzLmVk aXRvcmlkXS5jaGVja19mb2N1cygpOwoJfQp9OwoKLy8gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLy8gdkJfQUpBWF9RdWlja0VkaXRvciBFdmVudCBIYW5k bGVycwoKLyoqCiogQ2xhc3MgdG8gaGFuZGxlIHF1aWNrIGVkaXRvciBldmVudHMK Ki8KZnVuY3Rpb24gdkJfQUpBWF9RdWlja0VkaXRvcl9FdmVudHMoKQp7Cn0KCi8q KgoqIEhhbmRsZXMgY2xpY2tzIG9uIGVkaXQgYnV0dG9ucyBvZiBwb3N0Yml0cwoq Lwp2Ql9BSkFYX1F1aWNrRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZWRpdGJ1dHRv bl9jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXJldHVybiB2Ql9RdWlja0VkaXRvci5l ZGl0KHRoaXMubmFtZSk7Cn07CgovKioKKiBIYW5kbGVzIG1hbmlwdWxhdGlvbiBv ZiBmb3JtIGVsZW1lbnRzIGluIHRoZSBkZWxldGUgc2VjdGlvbgoqLwp2Ql9BSkFY X1F1aWNrRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZGVsZXRlX2J1dHRvbl9oYW5k bGVyID0gZnVuY3Rpb24oZSkKewoJaWYgKHRoaXMuaWQgPT0gJ3JiX2RlbF9sZWF2 ZScgJiYgdGhpcy5jaGVja2VkKQoJewoJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZWJ1 dHRvbi5kaXNhYmxlZCA9IHRydWU7Cgl9CgllbHNlCgl7CgkJdkJfUXVpY2tFZGl0 b3IuZGVsZXRlYnV0dG9uLmRpc2FibGVkID0gZmFsc2U7Cgl9Cn0KCi8qKgoqIEtl eSB0cmFwcGVyIGZvciByZWFzb24gYm94CiovCnZCX0FKQVhfUXVpY2tFZGl0b3Jf RXZlbnRzLnByb3RvdHlwZS5yZWFzb25fa2V5X3RyYXAgPSBmdW5jdGlvbihlKQp7 CgllID0gZSA/IGUgOiB3aW5kb3cuZXZlbnQ7CgoJc3dpdGNoIChlLmtleUNvZGUp Cgl7CgkJY2FzZSA5OiAvLyB0YWIKCQl7CgkJCWZldGNoX29iamVjdCh2Ql9RdWlj a0VkaXRvci5lZGl0b3JpZCArICdfc2F2ZScpLmZvY3VzKCk7CgkJCXJldHVybiBm YWxzZTsKCQl9CgkJYnJlYWs7CgoJCWNhc2UgMTM6IC8vIGVudGVyCgkJewoJCQl2 Ql9RdWlja0VkaXRvci5zYXZlKCk7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJYnJl YWs7CgoJCWRlZmF1bHQ6CgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9Cn0KCi8q KgoqIEtleSB0cmFwcGVyIGZvciByZWFzb24gYm94CiovCnZCX0FKQVhfUXVpY2tF ZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5kZWxldGVfaXRlbXNfa2V5X3RyYXAgPSBm dW5jdGlvbihlKQp7CgllID0gZSA/IGUgOiB3aW5kb3cuZXZlbnQ7CgoJaWYgKGUu a2V5Q29kZSA9PSAxMykgLy8gZW50ZXIKCXsKCQlpZiAodkJfUXVpY2tFZGl0b3Iu ZGVsZXRlYnV0dG9uLmRpc2FibGVkID09IGZhbHNlKQoJCXsKCQkJdkJfUXVpY2tF ZGl0b3IuZGVsZXRlX3Bvc3QoKTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoKCXJl dHVybiB0cnVlOwp9CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwov LyBpbml0aWFsaXplIHRoZSBlZGl0b3IgY2xhc3MKCnZhciB2Ql9RdWlja0VkaXRv ciA9IG5ldyB2Ql9BSkFYX1F1aWNrRWRpdG9yKCk7CgovKj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0qXAp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwp8fCAjIERvd25sb2Fk ZWQ6IDA1OjUyLCBUdWUgSnVuIDI0dGggMjAwOAp8fCAjIENWUzogJFJDU2ZpbGUk IC0gJFJldmlzaW9uOiAyNjQ0NiAkCnx8ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwq PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PSov ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=vbulletin_quick_reply.js Content-Type: application/x-javascript; name=vbulletin_quick_reply.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_quick_reply.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwNCnx8ICMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIHx8DQp8fCAjIHZCdWxsZXRpbiAzLjYuMTAgUGF0Y2ggTGV2ZWwgMg0KfHwg IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tICMgfHwNCnx8ICMgQ29weXJpZ2h0IKkyMDAwLTIw MDggSmVsc29mdCBFbnRlcnByaXNlcyBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu IHx8DQp8fCAjIFRoaXMgZmlsZSBtYXkgbm90IGJlIHJlZGlzdHJpYnV0ZWQgaW4g d2hvbGUgb3Igc2lnbmlmaWNhbnQgcGFydC4gIyB8fA0KfHwgIyAtLS0tLS0tLS0t LS0tLS0tIFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0t LS0tLS0tICMgfHwNCnx8ICMgaHR0cDovL3d3dy52YnVsbGV0aW4uY29tIHwgaHR0 cDovL3d3dy52YnVsbGV0aW4uY29tL2xpY2Vuc2UuaHRtbCAjIHx8DQp8fCAjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyB8fA0KXCo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8N Cg0KdmFyIHFyX3JlcG9zdCA9IGZhbHNlOw0KdmFyIHFyX2Vycm9yc19zaG93biA9 IGZhbHNlOw0KdmFyIHFyX2FjdGl2ZSA9IGZhbHNlOw0KdmFyIHFyX3Bvc3Rpbmcg PSAwOw0KdmFyIGNsaWNrZWRlbG0gPSBmYWxzZTsNCg0KLyoqDQoqIEluaXRpYWxp emVzIHRoZSBxdWljayByZXBseSBzeXN0ZW0NCiovDQpmdW5jdGlvbiBxcl9pbml0 KCkNCnsNCglxcl9kaXNhYmxlX2NvbnRyb2xzKCk7DQoJcXJfaW5pdF9idXR0b25z KGZldGNoX29iamVjdCgncG9zdHMnKSk7DQp9DQoNCi8qKg0KKiBTdGVwcyB0aHJv dWdoIHRoZSBnaXZlbiBvYmplY3QgYWN0aXZhdGluZyBhbGwgcXVpY2sgcmVwbHkg YnV0dG9ucyBpdCBmaW5kcw0KKg0KKiBAcGFyYW0Jb2JqZWN0CUhUTUwgb2JqZWN0 IHRvIHNlYXJjaA0KKi8NCmZ1bmN0aW9uIHFyX2luaXRfYnV0dG9ucyhvYmopDQp7 DQoJdmFyIGFuY2hvcnMgPSBmZXRjaF90YWdzKG9iaiwgJ2EnKTsNCglmb3IgKHZh ciBpID0gMDsgaSA8IGFuY2hvcnMubGVuZ3RoOyBpKyspDQoJew0KCQlpZiAoYW5j aG9yc1tpXS5pZCAmJiBhbmNob3JzW2ldLmlkLnN1YnN0cigwLCAzKSA9PSAncXJf JykNCgkJew0KCQkJYW5jaG9yc1tpXS5vbmNsaWNrID0gZnVuY3Rpb24oZSkgeyBy ZXR1cm4gcXJfYWN0aXZhdGUodGhpcy5pZC5zdWJzdHIoMykpOyB9Ow0KCQl9DQoJ fQ0KfQ0KDQovKioNCiogRGlzYWJsZXMgdGhlIGNvbnRyb2xzIGluIHRoZSBxdWlj ayByZXBseSBzeXN0ZW0NCiovDQpmdW5jdGlvbiBxcl9kaXNhYmxlX2NvbnRyb2xz KCkNCnsNCglpZiAocmVxdWlyZV9jbGljaykNCgl7DQoJCWZldGNoX29iamVjdCgn cXJfcG9zdGlkJykudmFsdWUgPSAwOw0KDQoJCXZCX0VkaXRvcltRUl9FZGl0b3JJ RF0uZGlzYWJsZV9lZGl0b3IodmJwaHJhc2VbJ2NsaWNrX3F1aWNrX3JlcGx5X2lj b24nXSk7DQoNCgkJdmFyIHFyX3NpZyA9IGZldGNoX29iamVjdCgnY2Jfc2lnbmF0 dXJlJyk7DQoJCWlmIChxcl9zaWcgIT0gbnVsbCkNCgkJew0KCQkJcXJfc2lnLmRp c2FibGVkID0gdHJ1ZTsNCgkJfQ0KDQoJCWFjdGl2ZSA9IGZhbHNlOw0KCQlxcl9h Y3RpdmUgPSBmYWxzZTsNCgl9DQoJZWxzZQ0KCXsNCgkJdkJfRWRpdG9yW1FSX0Vk aXRvcklEXS53cml0ZV9lZGl0b3JfY29udGVudHMoJycpOw0KCQlxcl9hY3RpdmUg PSB0cnVlOw0KCX0NCg0KCWlmICh0aHJlYWRlZF9tb2RlICE9IDEpDQoJew0KCQlm ZXRjaF9vYmplY3QoJ3FyX3F1aWNrcmVwbHknKS5kaXNhYmxlZCA9IHRydWU7DQoJ fQ0KDQp9DQoNCi8qKg0KKiBBY3RpdmF0ZXMgdGhlIGNvbnRyb2xzIGluIHRoZSBx dWljayByZXBseSBzeXN0ZW0NCioNCiogQHBhcmFtCWludGVnZXIJUG9zdCBJRCBv ZiB0aGUgcG9zdCB0byB3aGljaCB3ZSBhcmUgcmVwbHlpbmcNCioNCiogQHJldHVy bglib29sZWFuCWZhbHNlDQoqLw0KZnVuY3Rpb24gcXJfYWN0aXZhdGUocG9zdGlk KQ0Kew0KCXZhciBxcl9jb2xsYXBzZSA9IGZldGNoX29iamVjdCgnY29sbGFwc2Vv YmpfcXVpY2tyZXBseScpOw0KCWlmIChxcl9jb2xsYXBzZSAmJiBxcl9jb2xsYXBz ZS5zdHlsZS5kaXNwbGF5ID09ICJub25lIikNCgl7DQoJCXRvZ2dsZV9jb2xsYXBz ZSgncXVpY2tyZXBseScpOw0KCX0NCg0KCWZldGNoX29iamVjdCgncXJfcG9zdGlk JykudmFsdWUgPSBwb3N0aWQ7DQoJZmV0Y2hfb2JqZWN0KCdxcl9wcmV2aWV3Jyku c2VsZWN0KCk7DQoJZmV0Y2hfb2JqZWN0KCdxcl9xdWlja3JlcGx5JykuZGlzYWJs ZWQgPSBmYWxzZTsNCg0KCXZhciBxcl9zaWcgPSBmZXRjaF9vYmplY3QoImNiX3Np Z25hdHVyZSIpOw0KCWlmIChxcl9zaWcpDQoJew0KCQlxcl9zaWcuZGlzYWJsZWQg PSBmYWxzZTsNCgkJLy8gV29ya2Fyb3VuZCBmb3IgMy41IEJ1ZyAjIDE2MTg6IFNl dCBjaGVja2VkIGFzIEZpcmVmb3ggPCAxLjUgImZvcmdldHMiIHRoYXQgd2hlbiBj aGVja2JveCBpcyBkaXNhYmxlZCB2aWEgSlMNCgkJcXJfc2lnLmNoZWNrZWQgPSB0 cnVlOw0KCX0NCg0KCWlmIChxcl9hY3RpdmUgPT0gZmFsc2UpDQoJew0KCQl2Ql9F ZGl0b3JbUVJfRWRpdG9ySURdLmVuYWJsZV9lZGl0b3IoJycpOw0KCX0NCg0KCWlm ICghaXNfaWUgJiYgdkJfRWRpdG9yW1FSX0VkaXRvcklEXS53eXNpd3lnX21vZGUp DQoJew0KCQlmZXRjaF9vYmplY3QoJ3FyX3Njcm9sbCcpLnNjcm9sbEludG9WaWV3 KGZhbHNlKTsNCgl9DQoNCgl2Ql9FZGl0b3JbUVJfRWRpdG9ySURdLmNoZWNrX2Zv Y3VzKCk7DQoNCglxcl9hY3RpdmUgPSB0cnVlOw0KDQoJcmV0dXJuIGZhbHNlOw0K fQ0KDQovKioNCiogQ2hlY2tzIHRoZSBjb250ZW50cyBvZiB0aGUgbmV3IHJlcGx5 IGFuZCBkZWNpZGVzIHdoZXRoZXIgb3Igbm90IHRvIGFsbG93IGl0IHRocm91Z2gN CioNCiogQHBhcmFtCW9iamVjdAk8Zm9ybT4gb2JqZWN0IGNvbnRhaW5pbmcgcXVp Y2sgcmVwbHkNCiogQHBhcmFtCWludGVnZXIJTWluaW11bSBhbGxvd2VkIGNoYXJh Y3RlcnMgaW4gbWVzc2FnZQ0KKg0KKiBAcmV0dXJuCWJvb2xlYW4NCiovDQpmdW5j dGlvbiBxcl9wcmVwYXJlX3N1Ym1pdChmb3Jtb2JqLCBtaW5jaGFycykNCnsNCglp ZiAocXJfcmVwb3N0ID09IHRydWUpDQoJew0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoN CglpZiAoIWFsbG93X2FqYXhfcXIgfHwgIUFKQVhfQ29tcGF0aWJsZSkNCgl7DQoJ CS8vIG5vdCBsYXN0IHBhZ2UsIG9yIHRocmVhZGVkIG1vZGUgLSBkbyBub3QgYXR0 ZW1wdCB0byB1c2UgQUpBWA0KCQlyZXR1cm4gcXJfY2hlY2tfZGF0YShmb3Jtb2Jq LCBtaW5jaGFycyk7DQoJfQ0KCWVsc2UgaWYgKHFyX2NoZWNrX2RhdGEoZm9ybW9i aiwgbWluY2hhcnMpKQ0KCXsNCgkJdmFyIHRlc3RfYWpheCA9IG5ldyB2Ql9BSkFY X0hhbmRsZXIodHJ1ZSk7DQoJCWlmICghdGVzdF9hamF4LmluaXQoKSB8fCAodHlw ZW9mIHZiX2Rpc2FibGVfYWpheCAhPSAndW5kZWZpbmVkJyAmJiB2Yl9kaXNhYmxl X2FqYXggPiAwKSkNCgkJew0KCQkJLy8gY291bGRuJ3QgaW5pdGlhbGl6ZSwgcmV0 dXJuIHRydWUgdG8gYWxsb3cgY2xpY2sgdG8gZ28gdGhyb3VnaA0KCQkJcmV0dXJu IHRydWU7DQoJCX0NCg0KCQlpZiAoaXNfaWUgJiYgdXNlckFnZW50LmluZGV4T2Yo J21zaWUgNS4nKSAhPSAtMSkNCgkJew0KCQkJLy8gSUUgNSBoYXMgcHJvYmxlbXMg d2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyBiZWluZyByZXR1cm5lZCBieQ0KCQkJ Ly8gQUpBWC4gRG9uJ3QgdW5pdmVyc2FsbHkgZGlzYWJsZSBpdCwgYnV0IGlmIHdl J3JlIGdvaW5nIHRvIGJlIHNlbmRpbmcNCgkJCS8vIG5vbi1BU0NJSSwgbGV0J3Mg bm90IHVzZSBBSkFYLg0KCQkJaWYgKFBIUC51cmxlbmNvZGUoZm9ybW9iai5tZXNz YWdlLnZhbHVlKS5pbmRleE9mKCcldScpICE9IC0xKQ0KCQkJew0KCQkJCXJldHVy biB0cnVlOw0KCQkJfQ0KCQl9DQoNCgkJaWYgKHFyX3Bvc3RpbmcgPT0gMSkNCgkJ ew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJcXJfcG9z dGluZyA9IDE7DQoJCQlzZXRUaW1lb3V0KCJxcl9wb3N0aW5nID0gMCIsIDEwMDAp Ow0KCQl9DQoNCgkJaWYgKGNsaWNrZWRlbG0gPT0gZm9ybW9iai5wcmV2aWV3LnZh bHVlKQ0KCQl7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJ CXZhciBzdWJtaXRzdHJpbmcgPSAnYWpheD0xJzsNCgkJCWlmICh0eXBlb2YgYWph eF9sYXN0X3Bvc3QgIT0gJ3VuZGVmaW5lZCcpDQoJCQl7DQoJCQkJc3VibWl0c3Ry aW5nICs9ICcmYWpheF9sYXN0cG9zdD0nICsgUEhQLnVybGVuY29kZShhamF4X2xh c3RfcG9zdCk7DQoJCQl9DQoNCgkJCWZvciAoaSA9IDA7IGkgPCBmb3Jtb2JqLmVs ZW1lbnRzLmxlbmd0aDsgaSsrKQ0KCQkJew0KCQkJCXZhciBvYmogPSBmb3Jtb2Jq LmVsZW1lbnRzW2ldOw0KDQoJCQkJaWYgKG9iai5uYW1lICYmICFvYmouZGlzYWJs ZWQpDQoJCQkJew0KCQkJCQlzd2l0Y2ggKG9iai50eXBlKQ0KCQkJCQl7DQoJCQkJ CQljYXNlICd0ZXh0JzoNCgkJCQkJCWNhc2UgJ3RleHRhcmVhJzoNCgkJCQkJCWNh c2UgJ2hpZGRlbic6DQoJCQkJCQkJc3VibWl0c3RyaW5nICs9ICcmJyArIG9iai5u YW1lICsgJz0nICsgUEhQLnVybGVuY29kZShvYmoudmFsdWUpOw0KCQkJCQkJCWJy ZWFrOw0KCQkJCQkJY2FzZSAnY2hlY2tib3gnOg0KCQkJCQkJY2FzZSAncmFkaW8n Og0KCQkJCQkJCXN1Ym1pdHN0cmluZyArPSBvYmouY2hlY2tlZCA/ICcmJyArIG9i ai5uYW1lICsgJz0nICsgUEhQLnVybGVuY29kZShvYmoudmFsdWUpIDogJyc7DQoJ CQkJCQkJYnJlYWs7DQoJCQkJCQljYXNlICdzZWxlY3Qtb25lJzoNCgkJCQkJCQlz dWJtaXRzdHJpbmcgKz0gJyYnICsgb2JqLm5hbWUgKyAnPScgKyBQSFAudXJsZW5j b2RlKG9iai5vcHRpb25zW29iai5zZWxlY3RlZEluZGV4XS52YWx1ZSk7DQoJCQkJ CQkJYnJlYWs7DQoJCQkJCQljYXNlICdzZWxlY3QtbXVsdGlwbGUnOg0KCQkJCQkJ CWZvciAodmFyIGogPSAwOyBqIDwgb2JqLm9wdGlvbnMubGVuZ3RoOyBqKyspDQoJ CQkJCQkJew0KCQkJCQkJCQlzdWJtaXRzdHJpbmcgKz0gKG9iai5vcHRpb25zW2pd LnNlbGVjdGVkID8gJyYnICsgb2JqLm5hbWUgKyAnPScgKyBQSFAudXJsZW5jb2Rl KG9iai5vcHRpb25zW2pdLnZhbHVlKSA6ICcnKTsNCgkJCQkJCQl9DQoJCQkJCQkJ YnJlYWs7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoNCgkJCWZldGNoX29iamVjdCgn cXJfcG9zdGluZ19tc2cnKS5zdHlsZS5kaXNwbGF5ID0gJyc7DQoJCQlkb2N1bWVu dC5ib2R5LnN0eWxlLmN1cnNvciA9ICd3YWl0JzsNCg0KCQkJcXJfYWpheF9wb3N0 KGZvcm1vYmouYWN0aW9uLCBzdWJtaXRzdHJpbmcpOw0KCQkJcmV0dXJuIGZhbHNl Ow0KCQl9DQoJfQ0KCWVsc2UNCgl7DQoJCXJldHVybiBmYWxzZTsNCgl9DQp9DQoN Ci8qKg0KKiBXb3JrcyB3aXRoIGZvcm0gZGF0YSB0byBkZWNpZGUgd2hhdCB0byBk bw0KKg0KKiBAcGFyYW0Jb2JqZWN0CTxmb3JtPiBvYmplY3QgY29udGFpbmluZyBx dWljayByZXBseQ0KKiBAcGFyYW0JaW50ZWdlcglNaW5pbXVtIGFsbG93ZWQgY2hh cmFjdGVycyBpbiBtZXNzYWdlDQoqDQoqIEByZXR1cm4JYm9vbGVhbg0KKi8NCmZ1 bmN0aW9uIHFyX2NoZWNrX2RhdGEoZm9ybW9iaiwgbWluY2hhcnMpDQp7DQoJc3dp dGNoIChmZXRjaF9vYmplY3QoJ3FyX3Bvc3RpZCcpLnZhbHVlKQ0KCXsNCgkJY2Fz ZSAnMCc6DQoJCXsNCgkJCWFsZXJ0KHZicGhyYXNlWydjbGlja19xdWlja19yZXBs eV9pY29uJ10pOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJY2FzZSAnd2hv IGNhcmVzJzoNCgkJew0KCQkJaWYgKHR5cGVvZiBmb3Jtb2JqLnF1aWNrcmVwbHkg IT0gJ3VuZGVmaW5lZCcpDQoJCQl7DQoJCQkJZm9ybW9iai5xdWlja3JlcGx5LmNo ZWNrZWQgPSBmYWxzZTsNCgkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJfQ0KDQoJaWYg KGNsaWNrZWRlbG0gPT0gZm9ybW9iai5wcmV2aWV3LnZhbHVlKQ0KCXsNCgkJbWlu Y2hhcnMgPSAwOw0KCX0NCg0KCXJldHVybiB2Ql9FZGl0b3JbUVJfRWRpdG9ySURd LnByZXBhcmVfc3VibWl0KDAsIG1pbmNoYXJzKTsNCn0NCg0KLyoqDQoqIFNlbmRz IHF1aWNrIHJlcGx5IGRhdGEgdG8gbmV3cmVwbHkucGhwIHZpYSBBSkFYDQoqDQoq IEBwYXJhbQlzdHJpbmcJR0VUIHN0cmluZyBmb3IgYWN0aW9uIChuZXdyZXBseS5w aHApDQoqIEBwYXJhbQlzdHJpbmcJU3RyaW5nIHJlcHJlc2VudGluZyBmb3JtIGRh dGEgKCd4PTEmeT0yJno9MycgZXRjLikNCiovDQpmdW5jdGlvbiBxcl9hamF4X3Bv c3Qoc3VibWl0YWN0aW9uLCBzdWJtaXRzdHJpbmcpDQp7DQoJcXJfcmVwb3N0ID0g ZmFsc2U7DQoJeG1sID0gbmV3IHZCX0FKQVhfSGFuZGxlcih0cnVlKTsNCgl4bWwu b25yZWFkeXN0YXRlY2hhbmdlKHFyX2RvX2FqYXhfcG9zdCk7DQoJeG1sLnNlbmQo c3VibWl0YWN0aW9uLCBzdWJtaXRzdHJpbmcpOw0KfQ0KDQovKioNCiogSGFuZGxl cyBxdWljayByZXBseSBkYXRhIHdoZW4gQUpBWCBzYXlzIHFyX2FqYXhfcG9zdCgp IGlzIGNvbXBsZXRlDQoqLw0KZnVuY3Rpb24gcXJfZG9fYWpheF9wb3N0KCkNCnsN CglpZiAoeG1sLmhhbmRsZXIucmVhZHlTdGF0ZSA9PSA0ICYmIHhtbC5oYW5kbGVy LnN0YXR1cyA9PSAyMDApDQoJew0KCQlpZiAoeG1sLmhhbmRsZXIucmVzcG9uc2VY TUwpDQoJCXsNCgkJCWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ2F1dG8n Ow0KCQkJZmV0Y2hfb2JqZWN0KCdxcl9wb3N0aW5nX21zZycpLnN0eWxlLmRpc3Bs YXkgPSAnbm9uZSc7DQoJCQlxcl9wb3N0aW5nID0gMDsNCg0KCQkJaWYgKGZldGNo X3RhZ19jb3VudCh4bWwuaGFuZGxlci5yZXNwb25zZVhNTCwgJ3Bvc3RiaXQnKSkN CgkJCXsNCgkJCQlhamF4X2xhc3RfcG9zdCA9IHhtbC5mZXRjaF9kYXRhKGZldGNo X3RhZ3MoeG1sLmhhbmRsZXIucmVzcG9uc2VYTUwsICd0aW1lJylbMF0pOw0KCQkJ CXFyX2Rpc2FibGVfY29udHJvbHMoKTsNCgkJCQlxcl9oaWRlX2Vycm9ycygpOw0K DQoJCQkJdmFyIHBvc3RiaXRzID0gZmV0Y2hfdGFncyh4bWwuaGFuZGxlci5yZXNw b25zZVhNTCwgJ3Bvc3RiaXQnKTsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8IHBv c3RiaXRzLmxlbmd0aDsgaSsrKQ0KCQkJCXsNCgkJCQkJdmFyIG5ld2RpdiA9IGRv Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KCQkJCQluZXdkaXYuaW5uZXJI VE1MID0geG1sLmZldGNoX2RhdGEocG9zdGJpdHNbaV0pOw0KCQkJCQl2YXIgbHAg PSBmZXRjaF9vYmplY3QoJ2xhc3Rwb3N0Jyk7DQoJCQkJCXZhciBscHBhcmVudCA9 IGxwLnBhcmVudE5vZGU7DQoJCQkJCXZhciBwb3N0Yml0ID0gbHBwYXJlbnQuaW5z ZXJ0QmVmb3JlKG5ld2RpdiwgbHApOw0KDQoJCQkJCVBvc3RCaXRfSW5pdChwb3N0 Yml0LCBwb3N0Yml0c1tpXS5nZXRBdHRyaWJ1dGUoJ3Bvc3RpZCcpKTsNCgkJCQl9 DQoNCgkJCQkvLyB1bmZvY3VzIHRoZSBxcl9zdWJtaXQgYnV0dG9uIHRvIHByZXZl bnQgYSBzcGFjZSBmcm9tIHJlc3VibWl0dGluZw0KCQkJCWlmIChmZXRjaF9vYmpl Y3QoJ3FyX3N1Ym1pdCcpKQ0KCQkJCXsNCgkJCQkJZmV0Y2hfb2JqZWN0KCdxcl9z dWJtaXQnKS5ibHVyKCk7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJ CWlmICghaXNfc2FmKQ0KCQkJCXsNCgkJCQkJLy8gdGhpcyBpcyB0aGUgbmljZSBl cnJvciBoYW5kbGVyLCBvZiB3aGljaCBTYWZhcmkgbWFrZXMgYSBtZXNzDQoJCQkJ CXZhciBlcnJvcnMgPSBmZXRjaF90YWdzKHhtbC5oYW5kbGVyLnJlc3BvbnNlWE1M LCAnZXJyb3InKTsNCg0KCQkJCQl2YXIgZXJyb3JfaHRtbCA9ICc8b2w+JzsNCgkJ CQkJZm9yICh2YXIgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspDQoJCQkJ CXsNCgkJCQkJCWVycm9yX2h0bWwgKz0gJzxsaT4nICsgeG1sLmZldGNoX2RhdGEo ZXJyb3JzW2ldKSArICc8L2xpPic7DQoJCQkJCX0NCgkJCQkJZXJyb3JfaHRtbCAr PSAnPC9vbD4nOw0KDQoJCQkJCXFyX3Nob3dfZXJyb3JzKCc8b2w+JyArIGVycm9y X2h0bWwgKyAnPC9vbD4nKTsNCg0KCQkJCQlpZiAoaXNfaWUpDQoJCQkJCXsNCgkJ CQkJCXhtbC5oYW5kbGVyLmFib3J0KCk7DQoJCQkJCX0NCg0KCQkJCQlyZXR1cm4g ZmFsc2U7DQoJCQkJfQ0KDQoJCQkJLy8gdGhpcyBpcyB0aGUgbm90IHNvIG5pY2Ug ZXJyb3IgaGFuZGxlciwgd2hpY2ggaXMgYSBmYWxsYmFjayBpbiBjYXNlIHRoZSBw cmV2aW91cyBvbmUgZG9lc24ndCB3b3JrDQoNCgkJCQlxcl9yZXBvc3QgPSB0cnVl Ow0KCQkJCWZldGNoX29iamVjdCgncXJmb3JtJykuc3VibWl0KCk7DQoJCQl9DQoJ CX0NCgkJZWxzZQ0KCQl7DQoJCQlxcl9yZXBvc3QgPSB0cnVlOw0KCQkJZmV0Y2hf b2JqZWN0KCdxcmZvcm0nKS5zdWJtaXQoKTsNCgkJfQ0KDQoJCWlmIChpc19pZSkN CgkJew0KCQkJLy8gaW4gbXkgdGVzdHMsIEZGIGZyZWFrcyBvdXQgaWYgSSBkbyB0 aGlzIGFib3J0IGNhbGwgaGVyZS4uLg0KCQkJLy8gaG93ZXZlciwgaXQgc2VlbXMg dG8gYmUgbmVjZXNzYXJ5IChpbiBsb2NhbCB0ZXN0cykgZm9yIElFDQoJCQl4bWwu aGFuZGxlci5hYm9ydCgpOw0KCQl9DQoJfQ0KfQ0KDQovKioNCiogVW4taGlkZXMg dGhlIHF1aWNrIHJlcGx5IGVycm9ycyBlbGVtZW50DQoqDQoqIEBwYXJhbQlzdHJp bmcJRXJyb3IocykgdG8gc2hvdw0KKg0KKiBAcmV0dXJuCWJvb2xlYW4JZmFsc2UN CiovDQpmdW5jdGlvbiBxcl9zaG93X2Vycm9ycyhlcnJvcnRleHQpDQp7DQoJcXJf ZXJyb3JzX3Nob3duID0gdHJ1ZTsNCglmZXRjaF9vYmplY3QoJ3FyX2Vycm9yX3Rk JykuaW5uZXJIVE1MID0gZXJyb3J0ZXh0Ow0KCWZldGNoX29iamVjdCgncXJfZXJy b3JfdGJvZHknKS5zdHlsZS5kaXNwbGF5ID0gJyc7DQoJdkJfRWRpdG9yW1FSX0Vk aXRvcklEXS5jaGVja19mb2N1cygpOw0KCXJldHVybiBmYWxzZTsNCn0NCg0KLyoq DQoqIEhpZGVzIHRoZSBxdWljayByZXBseSBlcnJvcnMgZWxlbWVudA0KKg0KKiBA cmV0dXJuCWJvb2xlYW4JZmFsc2UNCiovDQpmdW5jdGlvbiBxcl9oaWRlX2Vycm9y cygpDQp7DQoJaWYgKHFyX2Vycm9yc19zaG93bikNCgl7DQoJCXFyX2Vycm9yc19z aG93biA9IHRydWU7DQoJCWZldGNoX29iamVjdCgncXJfZXJyb3JfdGJvZHknKS5z dHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KfQ0K DQp2YXIgdkJfUXVpY2tSZXBseSA9IHRydWU7DQoNCi8qPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PSpcDQp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KfHwgIyBEb3dubG9h ZGVkOiAwNTo1MiwgVHVlIEp1biAyNHRoIDIwMDgNCnx8ICMgQ1ZTOiAkUkNTZmls ZSQgLSAkUmV2aXNpb246IDI0Mjc2ICQNCnx8ICMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj DQpcKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KLy8g1ujy4PLgIOL75OXr5e3t 7uPuIPLl6vHy4CDoIO3o6iDiIO7y4uXyIC0gzeD34OvuDQpmdW5jdGlvbiBJbnNl cnQobmlja25hbWUsIHRleHQsIHBvc3RuYikNCnsNCiAgaWYgKHRleHQhPSIiKQ0K ICAgIHBhc3RlKCJbcXVvdGU9IituaWNrbmFtZSsiOyIrcG9zdG5iKyJdIit0ZXh0 KyJbL3F1b3RlXVxuIiwgMCk7DQogICAgZG9jdW1lbnQudmJmb3JtLm1lc3NhZ2Uu Zm9jdXMoKTsNCn0NCmZ1bmN0aW9uIHBhc3RlKHRleHQpDQp7DQogIHZCX0VkaXRv cltRUl9FZGl0b3JJRF0uY2hlY2tfZm9jdXMoKTsNCiAgdmFyIG90ID0gdkJfRWRp dG9yW1FSX0VkaXRvcklEXS5nZXRfZWRpdG9yX2NvbnRlbnRzKCk7DQogIGlmKG90 ICE9ICcnICYmIG90ICE9ICc8UD48L1A+JyAmJiBvdCAhPSAnPFA+Jm5ic3A7PC9Q PicgJiYgb3QgIT0gJzxCUiAvPicpDQogIHsNCiAgICBvdCArPSAodkJfRWRpdG9y W1FSX0VkaXRvcklEXS53eXNpd3lnX21vZGU/Jzxicj4nOidcbicpOw0KICB9DQog IGlmKG90ID09ICc8UD4mbmJzcDs8L1A+JykNCiAgew0KICAgIG90ID0gJyc7DQog IH0NCiAgdkJfRWRpdG9yW1FSX0VkaXRvcklEXS53cml0ZV9lZGl0b3JfY29udGVu dHMob3QgKyB0ZXh0LCBmYWxzZSk7DQp9DQpmdW5jdGlvbiBnZXRfc2VsZWN0aW9u KCkNCnsNCiAgaWYgKGRvY3VtZW50LmdldFNlbGVjdGlvbikNCiAgew0KICAgIHNl bGVjdGlvbiA9IGRvY3VtZW50LmdldFNlbGVjdGlvbigpOw0KICAgIHNlbGVjdGlv biA9IHNlbGVjdGlvbi5yZXBsYWNlKC9cclxuXHJcbi9naSwgIl9kb3VibGVjYXJl dF8iKTsNCiAgICBzZWxlY3Rpb24gPSBzZWxlY3Rpb24ucmVwbGFjZSgvXHJcbi9n aSwgIiAiKTsNCiAgICB3aGlsZSAoc2VsZWN0aW9uLmluZGV4T2YoIiAgIikgIT0t MSkgc2VsZWN0aW9uID0gc2VsZWN0aW9uLnJlcGxhY2UoLyAgL2dpLCAiIik7DQog ICAgc2VsZWN0aW9uID0gc2VsZWN0aW9uLnJlcGxhY2UoL19kb3VibGVjYXJldF8v Z2ksICJcclxuXHJcbiIpOw0KICB9DQogIGVsc2UNCiAgICBzZWxlY3Rpb24gPSBk b2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS50ZXh0Ow0KfQ0KZnVuY3Rp b24gY2F0Y2hTZWxlY3Rpb24oKQ0Kew0KICBpZiAod2luZG93LmdldFNlbGVjdGlv bikNCiAgew0KICAgIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50 b1N0cmluZygpOw0KICB9DQogIGVsc2UgaWYgKGRvY3VtZW50LmdldFNlbGVjdGlv bikNCiAgew0KICAgIHNlbGVjdGlvbiA9IGRvY3VtZW50LmdldFNlbGVjdGlvbigp Ow0KICB9DQogIGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbikNCiAgew0KICAg IHNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLnRl eHQ7DQogIH0NCn0NCmZ1bmN0aW9uIGluc2VydG5pY2sobmlja25hbWUpDQp7DQog IHZhciBvdCA9IHZCX0VkaXRvcltRUl9FZGl0b3JJRF0uZ2V0X2VkaXRvcl9jb250 ZW50cygpOw0KICBpZihvdCAhPSAnJyAmJiBvdCAhPSAnPFA+PC9QPicgJiYgb3Qg IT0gJzxQPiZuYnNwOzwvUD4nICYmIG90ICE9ICc8QlIgLz4nKQ0KICB7DQogICAg b3QgKz0gKHZCX0VkaXRvcltRUl9FZGl0b3JJRF0ud3lzaXd5Z19tb2RlPyc8YnI+ JzonXG4nKTsNCiAgfQ0KICBpZihvdCA9PSAnPFA+Jm5ic3A7PC9QPicpDQogIHsN CiAgICBvdCA9ICcnOw0KICB9DQogIG90ICs9IHZCX0VkaXRvcltRUl9FZGl0b3JJ RF0ud3lzaXd5Z19tb2RlPyc8Yj4nICsgbmlja25hbWUgKyAnPC9iPiwgJzonW2Jd JyArIG5pY2tuYW1lICsgJ1svYl0sICc7DQogIHZCX0VkaXRvcltRUl9FZGl0b3JJ RF0uY2hlY2tfZm9jdXMoKTsNCiAgdkJfRWRpdG9yW1FSX0VkaXRvcklEXS53cml0 ZV9lZGl0b3JfY29udGVudHMob3QsIGZhbHNlKTsNCn0NCi8vINbo8uDy4CDi++Tl 6+Xt7e7j7iDy5erx8uAg6CDt6Oog4iDu8uLl8iAtIMru7eX2 ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=collapse_tcat.gif Content-Type: image/gif; name=collapse_tcat.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/collapse_tcat.gif Content-Transfer-Encoding: Base64 R0lGODlhDwAPAOYAADVyM8jix/Pz85HDj+vr6/L48oi/hu7u7s7lzZ3Km+rv6p/L ndDlz5LEkDRxMqjPpvH38c3kzJ3Im/T59JvKmtDj0D+HPafNprDQr8zdzMfhxqfO pZLDkOPn46jPp0ukSf39/KrQqWKsX0udSMveyyZtKOTq5CBqIsrdyXbCcqvQqTd2 NXeqeDyCO5XTkt7x3UKNQDqJO+327ESZQiuALCBdIX6xgCloKOfy51WnUmu3aPX1 9bLdsD2JPtHo0ILJfTp8OJ3Jm2m5ZnTBcS6BL93o3YrLhmS1YfH58bvjuEyhSYvA iTiHOkSRQpirmODn3zN6NkCNPqnXp4rNhun06Y/Cj1GlTnKicjJ3MXnDdWK0X5bK lbzUu8riyVSqUbXNtF2xWmSxYdDjz2m4ZkmRRiJ3JOXt5EqfSTGBM5zIm/D57ylu Kjh3No29i4/QijZ5NM7YzzKDMu3t7UeWRKjOpzaBNc3hzUiVSdzn3Wa1YzB6L3/F fDqEOOnp6fT09P///yH5BAAAAAAALAAAAAAPAA8AAAfXgH2CfRkYEksSGBmDfQQE HRcJCBB/EAwLFx2OB08cAUhJLj9GUjIBHCYHcmkaL24/Q38iYXk+GnQHKBRqU1lH f8BkVjlUFCQbETwpWsAAwDAzVREbAwV7Qs0AQMB8dwUNBiBjYCMtbH9NFitYaCBL 1TpeSnPAfxZRcT3fHghbHx/NgNWhYQOBBzsJcJwB5sDBGwN/SuBJIMZPkABdYqy5 oYfIiRpOuKjY4cdMgwBFrkApw4QFnC9tFPgRIEBBiAUMJvyZcCmEApp+gvqp8GCA gQEPKgj1EwgAOw== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=removeformat.gif Content-Type: image/gif; name=removeformat.gif Content-Location: http://forum.qip.ru/images/editor/removeformat.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJEDAP8AAAAA/wAAmf///yH5BAEAAAMALAAAAAAVABQAAAJDnI+p y+0/gArhSHYNrfHdXWUOQA0UIAhQ8KHps5Hu25SGO9CLHQmXjgCFUj4iBHcDLpAW VWPmzBUxngbxioVot1xtAQA7 ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=separator.gif Content-Type: image/gif; name=separator.gif Content-Location: http://forum.qip.ru/images/editor/separator.gif Content-Transfer-Encoding: Base64 R0lGODlhBgAUAIAAAMXCuN/f3yH5BAEAAAEALAAAAAAGABQAAAISTGCJedy8lIuG Pgmnzhz7unkFADs= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=bold.gif Content-Type: image/gif; name=bold.gif Content-Location: http://forum.qip.ru/images/editor/bold.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAIABAAAAAN/f3yH5BAEAAAEALAAAAAAVABQAAAIkjI+py+0Po0yg 2iqt0ZDz52HdJY7AVjrhaaKsSqbTTNf2jSMFADs= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=italic.gif Content-Type: image/gif; name=italic.gif Content-Location: http://forum.qip.ru/images/editor/italic.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJECAICAgAAAAN/f3wAAACH5BAEAAAIALAAAAAAVABQAAAIglI+p y+0Po2yh1mkqwAJcrnFewAkhNpanZFnlC8fyHBUAOw== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=underline.gif Content-Type: image/gif; name=underline.gif Content-Location: http://forum.qip.ru/images/editor/underline.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJECAICAgAAAAN/f3wAAACH5BAEAAAIALAAAAAAVABQAAAIplI+p y+0Po0yhBmEvrIdHj2mbCD5g6ZyiSa5pAAgA+lrTjWQ6zvc+XgAAOw== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=color.gif Content-Type: image/gif; name=color.gif Content-Location: http://forum.qip.ru/images/editor/color.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAQAJEAAICAgAAAgJkzAN/f3yH5BAEAAAMALAAAAAAVABAAAAIqnI+p y53hGgggroBtmrhqk2XfBFIfhooReXSWOnArhHDehbYp/fX+nygAADs= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=clear.gif Content-Type: image/gif; name=clear.gif Content-Location: http://forum.qip.ru/clear.gif Content-Transfer-Encoding: Base64 R0lGODlhAQABAIAAAMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=menupop.gif Content-Type: image/gif; name=menupop.gif Content-Location: http://forum.qip.ru/images/editor/menupop.gif Content-Transfer-Encoding: Base64 R0lGODlhCwAQAIABAAAAAN/f3yH5BAEAAAEALAAAAAALABAAAAIPjI+py+0PDZhz 0Qai3jwWADs= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=createlink.gif Content-Type: image/gif; name=createlink.gif Content-Location: http://forum.qip.ru/images/editor/createlink.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUALMKAAAAgJCdsgCAgMHS7sDAwICAgACAAP///wAA/wAAAN/f3wAA AAAAAAAAAAAAAAAAACH5BAEAAAoALAAAAAAVABQAAARwUMlJq704y8K7ppxADIOR fEpxEEdgvKbGIStiI2+RFQgRBIAXLobhuWAAQfBUtB1hNuaFd4MZBAippQCoQgG6 TOKWKCcAZm3lnGCxEquVmtJO2wlzCTxRaBPwfQd5CnV2ZnhiboJxiBpphGYokpMY EQA7 ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=insertimage.gif Content-Type: image/gif; name=insertimage.gif Content-Location: http://forum.qip.ru/images/editor/insertimage.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAKIGAMDAwICAAICAgP//AP///wAAAN/f3wAAACH5BAEAAAYALAAA AAAVABQAAANaaLrc/jDKWaq92JVBuO/gUGhhKFQCMTZbyRVBsK1M4XawrGrfdxYC Eal3oy1aL2TIqLC9BCeRc8d6nk4AgJNpsAGh4ELWq/maoWIt94tuY7VljLwyqdvv eEMCADs= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=quote.gif Content-Type: image/gif; name=quote.gif Content-Location: http://forum.qip.ru/images/editor/quote.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJEDAP//AAAAAP///wAAACH5BAEAAAMALAAAAAAVABQAAAJLnI+p yz0BowwtiAuuyJcuy21aZn3dZAmlAo7umqSQGgCyYIa6irNaROv0YiLMa4iQWZa3 nMsISz6LPAZKiVRofras4wD5VsTksqMAADs= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=resize_1.gif Content-Type: image/gif; name=resize_1.gif Content-Location: http://forum.qip.ru/images/editor/resize_1.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAJAIABAE1NTQAAACH5BAEAAAEALAAAAAAVAAkAAAIUjI+py50AoVtx MmBVlPnUjmAgWAAAOw== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=smilie.gif Content-Type: image/gif; name=smilie.gif Content-Location: http://forum.qip.ru/images/editor/smilie.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJEDAE1NpgAAAP///wAAACH5BAEAAAMALAAAAAAVABQAAAJBnI+p y50AoUNQWCsduBy33XUAAwbBZXoKKKSWK4xPSMsUHdoHi6t3SzvFFqWOUPdrmWDI ZG5S4WQmg8iUis1qswUAOw== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=resize_0.gif Content-Type: image/gif; name=resize_0.gif Content-Location: http://forum.qip.ru/images/editor/resize_0.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAJAIABAE1NTQAAACH5BAEAAAEALAAAAAAVAAkAAAIUjI+pe8BvgIRL WlpxnbpZ14UiUgAAOw== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=rating_4.gif Content-Type: image/gif; name=rating_4.gif Content-Location: http://forum.qip.ru/images/rating/rating_4.gif Content-Transfer-Encoding: Base64 R0lGODlhPAAMAPfbAP//y3aRwP//iP//r9uuZHmSvoqYvP/inpaWpPPWV//4rf// uf/hW///nI+Xp///jO7bZaVzG///w//oTuizUpumuOXMZ8qzktuPL3qTwP//Ypmd p6WotP//turQdv//wt2bH///ppGguXyUwe7Ha32VwP//t+HEi4GYwP/qP9DHl5+k rv//e/TRhv//s5tuRf//yv//zn6UvNrDb6t9IouburZ4DbFvD56ksHeSwZZmFc2/ g9bEjZGVqPXaVP//l//bYeKfYf7qTHV6i9q0SLGKXv+4Sf/sjeq1Z///kaltCum7 YtCdZf//vYabwKKem6GLbKefkP//ZHyVwvDLgO3NcXeSwP/RS6ZrBf//m/nlY+Wv a4CVvIOWuujLdrCuovPOb+nPYNqZYP/qnoCXwqR/SPXOf3eSv///yaSlqPXLaaSk p9OwT7iroNnGd///o8yIE97Pg6RnEP//g+TKY6Z7MP/XXoiVtL+LV///zf/oRXmU wqJ/RJ+nuerYbP/tof/yTf/lQ///hP+1R/TSc4WawXuVwv//hoKWvnmSv4mcvpih rqRrEdaNLZhoFeSva4udvpduJ3eFoYqZtKZtEfniX7Gwpf//Zf/mif//x5Obs7us nt/Qgv//rvPIZt7Ea3iIqv/qQqhpDf/rRPDKgf//n+7baahuD8eCEP//scOQWnWR wPbfY4qWsq6Sdv3RT4GYwpSbsv//mZ+BTf/VW6qvrv//sqGAT4SZvv//nfLNgf/w TaZ0Gv//vvbfYNizRq2wrJmhrPjVl//WUn6XwniSwP/ST3uVwXiTwf//z45xWtaN L4OYv///pKKIYpFwVYKZwp2muuzQW4KWv//miv+yRdmZX6+RdImZtvrYmOHLbHOP vwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAANsALAAAAAA8AAwAQAj/ALcJHEiwoMBg2AwSXDRJ 4UARDhwKhCixohNASXQRSobnDMFCu5JQAZNHVSKCGYQ8aEECBhMZKFWydAmz4kBO fj6xYSXLmJxIdShBiWOKzi9fWYaJcsQLizMVECwQSdCAwQ0dEZSUgSqVqlWsSm7Z LAgtEKMADmHpOYXMYYAJNkq4hSt3bMEoWnp1eIPJWiyCTyo16dCMmhhNBDf4WGAi xJEgCBIvbvw4sl2BVQhYEVjMTBuCXgig3baK1CaCPCiMGHjiAmrVrF1fJnhlVsVX fCp6oKGb9+yCli6hAuXwixQ4khyu0ABiiHLmzmeT0SYgRqZOc2hVa3TN0BQ3h2Kg gxkgyM6gZa725NjBAgAAFwKAGMFQhNj69u/jzy9ybLa0UrZIMIYyBoWRSyoS/PGM QTP8MMAHCrzAoIMQSvgbMKNsgUgXaghzB0G1hPLINFx4kk0rBFWQAhIGFLDEAT2k uGKLL8Y42xrMEARJNASlgQtBivRBEA41EIQCB0MWOdCRAgUEADs= ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=vbulletin_ajax_threadrate.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_ajax_threadrate.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_ajax_threadrate.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIEFk ZHMgb25jbGljayBldmVudHMgdG8gYXBwcm9wcmlhdGUgZWxlbWVudHMgZm9yIHRo cmVhZCByYXRpbmcKKgoqIEBwYXJhbQlzdHJpbmcJVGhlIElEIG9mIHRoZSBmb3Jt IHRoYXQgY29udGFpbnMgdGhlIHJhdGluZyBvcHRpb25zCiovCmZ1bmN0aW9uIHZC X0FKQVhfVGhyZWFkUmF0ZV9Jbml0KGZvcm1pZCkKewoJdmFyIGZvcm1vYmogPSBm ZXRjaF9vYmplY3QoZm9ybWlkKTsKCglpZiAoQUpBWF9Db21wYXRpYmxlICYmICh0 eXBlb2YgdmJfZGlzYWJsZV9hamF4ID09ICd1bmRlZmluZWQnIHx8IHZiX2Rpc2Fi bGVfYWpheCA8IDIpICYmIGZvcm1vYmopCgl7CgkJZm9yICh2YXIgaSA9IDA7IGkg PCBmb3Jtb2JqLmVsZW1lbnRzLmxlbmd0aDsgaSsrKQoJCXsKCQkJLy9hbGVydCgx KTsKCQkJaWYgKGZvcm1vYmouZWxlbWVudHNbaV0udHlwZSA9PSAnc3VibWl0JykK CQkJewoJCQkJLy8gcHJldmVudCB0aGUgZm9ybSBmcm9tIHN1Ym1pdHRpbmcgd2hl biBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvbgoJCQkJdmFyIHNidXR0b24gPSBm b3Jtb2JqLmVsZW1lbnRzW2ldOwoJCQkJdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmNy ZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CgkJCQlidXR0b24udHlwZSA9ICdidXR0b24n OwoJCQkJYnV0dG9uLmNsYXNzTmFtZSA9IHNidXR0b24uY2xhc3NOYW1lOwoJCQkJ YnV0dG9uLnZhbHVlICAgICA9IHNidXR0b24udmFsdWU7CgkJCQlidXR0b24ub25j bGljayAgID0gdkJfQUpBWF9UaHJlYWRSYXRlLnByb3RvdHlwZS5mb3JtX2NsaWNr OwoJCQkJc2J1dHRvbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShidXR0b24sIHNi dXR0b24pOwoJCQkJc2J1dHRvbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNidXR0 b24pOwoJCQl9CgkJfQoJfQp9OwoKLyoqCiogQ2xhc3MgdG8gaGFuZGxlIHRocmVh ZCByYXRpbmcKKgoqIEBwYXJhbQlvYmplY3QJVGhlIGZvcm0gb2JqZWN0IGNvbnRh aW5pbmcgdGhlIHZvdGUgb3B0aW9ucwoqLwpmdW5jdGlvbiB2Ql9BSkFYX1RocmVh ZFJhdGUoZm9ybW9iaikKewoJLy8gQUpBWCBoYW5kbGVyCgl0aGlzLnhtbF9zZW5k ZXIgPSBudWxsOwoKCS8vIHZCX0hpZGRlbl9Gb3JtIG9iamVjdCB0byBoYW5kbGUg Zm9ybSB2YXJpYWJsZXMKCXRoaXMucHNldWRvZm9ybSA9IG5ldyB2Ql9IaWRkZW5f Rm9ybSgndGhyZWFkcmF0ZS5waHAnKTsKCXRoaXMucHNldWRvZm9ybS5hZGRfdmFy aWFibGUoJ2FqYXgnLCAxKTsKCXRoaXMucHNldWRvZm9ybS5hZGRfdmFyaWFibGVz X2Zyb21fb2JqZWN0KGZvcm1vYmopOwoKCS8vIE91dHB1dCBvYmplY3QKCXRoaXMu b3V0cHV0X2VsZW1lbnRfaWQgPSAndGhyZWFkcmF0aW5nX2N1cnJlbnQnOwoKCS8v IENsb3N1cmUKCXZhciBtZSA9IHRoaXM7CgoJLyoqCgkqIE9uUmVhZHlTdGF0ZUNo YW5nZSBjYWxsYmFjay4gVXNlcyBhIGNsb3N1cmUgdG8ga2VlcCBzdGF0ZS4KCSog UmVtZW1iZXIgdG8gdXNlIG1lIGluc3RlYWQgb2YgdGhpcyBpbnNpZGUgdGhpcyBm dW5jdGlvbiEKCSovCgl0aGlzLmhhbmRsZV9hamF4X3Jlc3BvbnNlID0gZnVuY3Rp b24oKQoJewoJCWlmIChtZS54bWxfc2VuZGVyLmhhbmRsZXIucmVhZHlTdGF0ZSA9 PSA0ICYmIG1lLnhtbF9zZW5kZXIuaGFuZGxlci5zdGF0dXMgPT0gMjAwKQoJCXsK CQkJaWYgKG1lLnhtbF9zZW5kZXIuaGFuZGxlci5yZXNwb25zZVhNTCkKCQkJewoJ CQkJdmFyIG9iaiA9IGZldGNoX29iamVjdChtZS5vYmppZCk7CgkJCQkvLyBjaGVj ayBmb3IgZXJyb3IgZmlyc3QKCQkJCXZhciBlcnJvciA9IG1lLnhtbF9zZW5kZXIu ZmV0Y2hfZGF0YShmZXRjaF90YWdzKG1lLnhtbF9zZW5kZXIuaGFuZGxlci5yZXNw b25zZVhNTCwgJ2Vycm9yJylbMF0pOwoJCQkJaWYgKGVycm9yKQoJCQkJewoJCQkJ CS8vIEhpZGUgdGhyZWFkIHJhdGluZyBwb3B1cCBtZW51IG5vdwoJCQkJCWlmICh2 Qm1lbnUuYWN0aXZlbWVudSA9PSAndGhyZWFkcmF0aW5nJykKCQkJCQl7CgkJCQkJ CXZCbWVudS5oaWRlKCk7CgkJCQkJfQoJCQkJCWFsZXJ0KGVycm9yKTsKCQkJCX0K CQkJCWVsc2UKCQkJCXsKCQkJCQl2YXIgbmV3cmF0aW5nID0gbWUueG1sX3NlbmRl ci5mZXRjaF9kYXRhKGZldGNoX3RhZ3MobWUueG1sX3NlbmRlci5oYW5kbGVyLnJl c3BvbnNlWE1MLCAndm90ZWF2ZycpWzBdKTsKCQkJCQlpZiAobmV3cmF0aW5nICE9 ICcnKQoJCQkJCXsKCQkJCQkJZmV0Y2hfb2JqZWN0KG1lLm91dHB1dF9lbGVtZW50 X2lkKS5pbm5lckhUTUwgPSBuZXdyYXRpbmc7CgkJCQkJfQoJCQkJCS8vIEhpZGUg dGhyZWFkIHJhdGluZyBwb3B1cCBtZW51IG5vdwoJCQkJCWlmICh2Qm1lbnUuYWN0 aXZlbWVudSA9PSAndGhyZWFkcmF0aW5nJykKCQkJCQl7CgkJCQkJCXZCbWVudS5o aWRlKCk7CgkJCQkJfQoKCQkJCQl2YXIgbWVzc2FnZSA9IG1lLnhtbF9zZW5kZXIu ZmV0Y2hfZGF0YShmZXRjaF90YWdzKG1lLnhtbF9zZW5kZXIuaGFuZGxlci5yZXNw b25zZVhNTCwgJ21lc3NhZ2UnKVswXSk7CgkJCQkJaWYgKG1lc3NhZ2UpCgkJCQkJ ewoJCQkJCQlhbGVydChtZXNzYWdlKTsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCWlm IChpc19pZSkKCQkJewoJCQkJbWUueG1sX3NlbmRlci5oYW5kbGVyLmFib3J0KCk7 CgkJCX0KCQl9Cgl9Cn07CgovKioKKiBQbGFjZXMgdGhlIHZvdGUKKi8KdkJfQUpB WF9UaHJlYWRSYXRlLnByb3RvdHlwZS5yYXRlID0gZnVuY3Rpb24oKQp7CglpZiAo dGhpcy5wc2V1ZG9mb3JtLmZldGNoX3ZhcmlhYmxlKCd2b3RlJykgIT0gbnVsbCkK CXsKCQl0aGlzLnhtbF9zZW5kZXIgPSBuZXcgdkJfQUpBWF9IYW5kbGVyKHRydWUp OwoJCXRoaXMueG1sX3NlbmRlci5vbnJlYWR5c3RhdGVjaGFuZ2UodGhpcy5oYW5k bGVfYWpheF9yZXNwb25zZSk7CgkJdGhpcy54bWxfc2VuZGVyLnNlbmQoCgkJCSd0 aHJlYWRyYXRlLnBocD90PScgKyB0aHJlYWRpZCArICcmdm90ZT0nICsgUEhQLnVy bGVuY29kZSh0aGlzLnBzZXVkb2Zvcm0uZmV0Y2hfdmFyaWFibGUoJ3ZvdGUnKSks CgkJCXRoaXMucHNldWRvZm9ybS5idWlsZF9xdWVyeV9zdHJpbmcoKQoJCSk7Cgl9 Cn07CgovKioKKiBIYW5kbGVzIHRoZSBmb3JtICdzdWJtaXQnIGFjdGlvbgoqLwp2 Ql9BSkFYX1RocmVhZFJhdGUucHJvdG90eXBlLmZvcm1fY2xpY2sgPSBmdW5jdGlv bigpCnsKCXZhciBBSkFYX1RocmVhZFJhdGUgPSBuZXcgdkJfQUpBWF9UaHJlYWRS YXRlKHRoaXMuZm9ybSk7CglBSkFYX1RocmVhZFJhdGUucmF0ZSgpOwoJcmV0dXJu IGZhbHNlOwp9OwoKLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKfHwgIyBEb3dubG9hZGVkOiAwNTo1MiwgVHVlIEp1biAy NHRoIDIwMDgKfHwgIyBDVlM6ICRSQ1NmaWxlJCAtICRSZXZpc2lvbjogMTc2NDkg JAp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcKj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0qLw== ------------NhxuVym9ZtzwWYGOQ8EEnk Content-Disposition: inline; filename=collapse_thead.gif Content-Type: image/gif; name=collapse_thead.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/collapse_thead.gif Content-Transfer-Encoding: Base64 R0lGODlhDQANAOYAAEGMP4K4d+Ds4EicRlyZXGijZEyhSV+bXjyCO+ry61ytWmii ZDp8OPv9+6fIp2ahYzh3Nm+3baHEobrcuYS5eIe7es72rGGsX831q3+1dMfcx6/b lsbtp/L388btpc/3rI/CgIzAfWisZs72rcTspMfup6vKq464joO4d8TrpLHcl2Kd Y7Lfmd7r3kydSs/3rXi7dYC/funs6ZW5lNvo21+bX0SRQkeWROPl42GcYIzAftHi 0W2kbbvmn2ijZc73rLDOsJrAmM31rMv0qs73rdnn2tXl1XW6c7TZs5DCgFmQWJK7 k/3+/WSeZIrEiMfvqJvBm7rmnny9ep3CnZfJhbLfmJfJhq7WrK/SrWanZYSyhJ7K nWmharLdl7DXr8/2rcbtpjVyM02mS////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAANAA0AAAehgEQfIz0BPgQFAVE/L18W Q1YHUEUdNBI5VBgWQjpaGhMwCkdIOychGCwEGk5iYmMDBjFMK1UUUxOtY7oABl4O FAUCEa5jYbsXCQUHHQpiAwjFYQguDQcLwmIGumMMNsgLKA5XxMZjAFtAARtNDVLP EAwQSjI8G08VS0ZYWTciQTgzKpTgQCJJDQktxggwwQVECg4ewIDpkuEBgQcZVEQE EwgAOw== ------------NhxuVym9ZtzwWYGOQ8EEnk--