Могу ошибаться, но скорее влияет 4603: - размер потоков
» Far Manager
skipik001
Постепенное (скачкообразное) увеличение размера скачиваемого файла в панели Фара наблюдаю очень давно (ну не меньше последних 1-2 лет).
Постепенное (скачкообразное) увеличение размера скачиваемого файла в панели Фара наблюдаю очень давно (ну не меньше последних 1-2 лет).
skipik001
Да я это явление при работе по сети уже тридцать с гаком лет наблюдаю, и его причина проста - сетевая ОС накапливает данные в буферах приёма и записывает их по мере заполнения буферов иначе никакого объёма ОЗУ установленного на ЭВМ не хватит. Точно так же при получении данных из сети ведут себя IBM OS/360, Banyan Vines, Lantastic Lan Manager, ABM AIX, SCO Open Server, Nowell NetWare, DEC OSF/1, MS WfW v3.1.x, IBM OS/2, UNIX и любая другая сетевая ОС. Просто заметность этого явления сильно зависит от соотношения скоростей обработки данных конкретной ЭВМ и скорости их поступления из внешнего по отношению к ней источника. А в каком приложении это проявится не важно - зачастую наблюдатель просто не обращает на него внимание.
Добавлено:
Кстати, если соотношение максимальных размеров буферов ввода/вывода выделяемых ОС которые зависят от объёма установленного в ЭВМ ОЗУ и объёмов считываемых с внешних носителей данных сильно различаются, то при малой скорости обмена с внешним носителем такое же явление будет наблюдаться и без сети. Например если к машине с малым ОЗУ подключить внешний HDD, то можно заметить эффект блочной передачи данных.
Да я это явление при работе по сети уже тридцать с гаком лет наблюдаю, и его причина проста - сетевая ОС накапливает данные в буферах приёма и записывает их по мере заполнения буферов иначе никакого объёма ОЗУ установленного на ЭВМ не хватит. Точно так же при получении данных из сети ведут себя IBM OS/360, Banyan Vines, Lantastic Lan Manager, ABM AIX, SCO Open Server, Nowell NetWare, DEC OSF/1, MS WfW v3.1.x, IBM OS/2, UNIX и любая другая сетевая ОС. Просто заметность этого явления сильно зависит от соотношения скоростей обработки данных конкретной ЭВМ и скорости их поступления из внешнего по отношению к ней источника. А в каком приложении это проявится не важно - зачастую наблюдатель просто не обращает на него внимание.
Добавлено:
Кстати, если соотношение максимальных размеров буферов ввода/вывода выделяемых ОС которые зависят от объёма установленного в ЭВМ ОЗУ и объёмов считываемых с внешних носителей данных сильно различаются, то при малой скорости обмена с внешним носителем такое же явление будет наблюдаться и без сети. Например если к машине с малым ОЗУ подключить внешний HDD, то можно заметить эффект блочной передачи данных.
wseventeen
Цитата:
Вполне возможно.
shmuz2
VictorVG4
Я может не совсем удачный пример привёл. Есть у меня ещё один. В папке C:\Windows\Temp сидят tmp-файлы от KIS. Если зайти туда сборкой 4601, то размер каждого файла будет 0 байт. Он обновится только после Ctrl+R. Если же сделать это с помощью, например, 4619, то размер файлов сначала 0, потом проходит секунда времени и уже не ноль, а какие-то байты напротив каждого файла. Панели у меня в режиме "Ссылки файлов" и этот эффект сразу виден. А особенность самих файлов от KIS в том, что если запросить к ним доступ, то тогда и меняется размер. Такое ощущение, что обновление панелей теперь происходит в автоматическом режиме, а раньше оно не работало.
Цитата:
Могу ошибаться, но скорее влияет 4603: - размер потоков
Вполне возможно.
shmuz2
VictorVG4
Я может не совсем удачный пример привёл. Есть у меня ещё один. В папке C:\Windows\Temp сидят tmp-файлы от KIS. Если зайти туда сборкой 4601, то размер каждого файла будет 0 байт. Он обновится только после Ctrl+R. Если же сделать это с помощью, например, 4619, то размер файлов сначала 0, потом проходит секунда времени и уже не ноль, а какие-то байты напротив каждого файла. Панели у меня в режиме "Ссылки файлов" и этот эффект сразу виден. А особенность самих файлов от KIS в том, что если запросить к ним доступ, то тогда и меняется размер. Такое ощущение, что обновление панелей теперь происходит в автоматическом режиме, а раньше оно не работало.
skipik001
Ну, с мухобойкой понятно - файл есть, его не дёргают - 0 байт, CtrlR - перечитываем ФС - мухобойка пишет, а задержка - от того когда она проснётся. Вроде усё просто?
Ну, с мухобойкой понятно - файл есть, его не дёргают - 0 байт, CtrlR - перечитываем ФС - мухобойка пишет, а задержка - от того когда она проснётся. Вроде усё просто?
FarUE3 b4623 r14047 Mon Apr 18 05:48:30 +0300 2016
Цитата:
Все изменения в х64 сборке аналогичны изменениям в х86 за исключением отсутствия инсталлятора. Пока я его не написал, в более ранних выпусках ситуация аналогична.
Цитата:
1. Far b4623 r14047
2. LuaCheck 0.15
3. Рефакторинг. Обновление совместимо с SVN r14013 - SVN r14047
Все изменения в х64 сборке аналогичны изменениям в х86 за исключением отсутствия инсталлятора. Пока я его не написал, в более ранних выпусках ситуация аналогична.
VictorVG4
le.lua в дистрибе после тотальной замены msgbox на far.Message содержит ошибки - поправил. [more]
Код: MIME-Version: 1.0
Content-Description: "encoded by MxUUE v0.6.7 (c) 1999-2004 Maxxi"
Content-Type: unknown; charset=us-ascii; name="le.lua"
Content-Transfer-Encoding: Base64
Content-Disposition: attachment; filename="le.lua"
LS0gTHVhIEV4cGxvcmVyIOKAnkFkdmFuY2Vk4oCcLA0KLS0gYmFzZWQgb24g
THVhIEV4cGxvcmVyIGJ5IEVHZXoNCi0tIG1vZGRlZCBieSBKb2huIERvZTog
aHR0cDovL2ZvcnVtLmZhcm1hbmFnZXIuY29tL3ZpZXd0b3BpYy5waHA/Zj02
MCZ0PTc5ODgNCi0tIHJlbGVhc2UgMg0KDQotLVtbDQoJTHVhIEV4cGxvcmVy
DQoNCglFeHBsb3JlIEx1YSBlbnZpcm9ubWVudCBpbiB5b3VyIEZhciBtYW5h
Z2VyDQoNCglBdXRob3I6IEV1Z2VuIEdleiAoRUdlei9odHRwOi8vZm9ydW0u
ZmFybWFuYWdlci5jb20pDQoJdXBkYXRlcywgc3VnZ2VzdGlvbnMsIGV0Yy46
DQoJaHR0cDovL2ZvcnVtLmZhcm1hbmFnZXIuY29tL3ZpZXd0b3BpYy5waHA/
Zj0xNSZ0PTc1MjENCg0KDQoJQkUgQ0FSRUZVTDoNCgkJY2FsbGluZyBzb21l
IGZ1bmN0aW9ucyBjb3VsZCBjYXVzZSBkZWFkbG9ja3MhISENCgkJeW91IHdp
bGwgbmVlZCB0byBraWxsIGZhciBwcm9jZXNzIGluIHN1Y2ggY2FzZXMNCg0K
CWRvIG5vdCBjYWxsIGZ1bmN0aW9ucyBsaWtlIGRlYnVnLmRlYnVnKCkgb3Ig
aW8uKiBmdW5jdGlvbnMNCgl0aGF0IHJlYWQgZnJvbSBzdGRpbiB1bmxlc3Mg
eW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nDQoNCg0KCVRIRSBTT0ZUV0FS
RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO
WSBLSU5ELg0KCUFOWSBVU0UgSVMgQVQgWU9VUiBPV04gUklTSy4NCg0KCURv
IHdoYXQgeW91IHdhbnQgd2l0aCB0aGlzIGNvZGUsIGJ1dCBwbGVhc2UgZG8g
bm90IHJlbW92ZSB0aGlzIGNvbW1lbnQNCglhbmQgd3JpdGUgeW91ciBjaGFu
Z2VzIGRvd24uDQoNCgk8b2Jzb2xldGUgY2hhbmdlbG9nIHJlbW92ZWQ+IC0t
SkQNCg0KCVVQREFURUQ6DQoNCglDaGFuZ2UgIm1zZ2JveCIgdG8gImZhci5N
ZXNzYWdlIi4gQmlnIHRoYW5rcyBKb2huIERvZSBhbmQgQWNlcmJpYyBmb3Ig
aWRlYSEgLyogVmljdG9yVkcgKi8NCg0KXV0NCg0KLS0gYXNzZXJ0KEZhciwg
J1RoaXMgaXMgYSBMdWFNYWNybyBmb3IgRmFyIG1hbmFnZXInKQ0KDQpsb2Nh
bCB1dWlkCT0gd2luLlV1aWQoJzc2NDZmNzYxLTg5NTQtNDJjYS05Y2ZjLWUz
Zjk4YTFjNTRkMycpDQpsb2NhbCBoZWxwCT0gW1sNClRoZXJlIGFyZSBzb21l
IGtleXMgYXZhaWxhYmxlOg0KDQpGMSAgICAgICAgICAgICAgIFNob3cgdGhp
cyBoZWxwDQpGNCAgICAgICAgICAgICAgIEVkaXQgc2VsZWN0ZWQgb2JqZWN0
DQpEZWwgICAgICAgICAgICAgIERlbGV0ZSBzZWxlY3RlZCBvYmplY3QNCklu
cyAgICAgICAgICAgICAgQWRkIGFuIG9iamVjdCB0byBjdXJyZW50IHRhYmxl
DQpDdHJsK00gICAgICAgICAgIFNob3cgbWV0YXRhYmxlDQpDdHJsK0YgICAg
ICAgICAgIFNob3cvaGlkZSBmdW5jdGlvbnMNCkN0cmwrVCAgICAgICAgICAg
VG9nZ2xlIHNvcnQgYnkgdHlwZQ0KDQpmb3IgZnVuY3Rpb25zOg0KDQpFbnRl
ciAgICAgICAgICAgIENhbGwgZnVuY3Rpb24gKHBhcmFtcyBwcm9tcHRlZCkN
CkYzICAgICAgICAgICAgICAgU2hvdyBzb21lIGZ1bmN0aW9uIGluZm8NClNo
aWZ0K0YzICAgICAgICAgU2hvdyBzb21lIGZ1bmN0aW9uIGluZm8gKEx1YUpJ
VCByZXF1aXJlZCkNCkFsdCtGNCAgICAgICAgICAgT3BlbiBmdW5jdGlvbiBk
ZWZpbml0aW9uIChpZiBhdmFpbGFibGUpIGluIGVkaXRvcg0KQ3RybCtVcCAg
ICAgICAgICBTaG93IHVwdmFsdWVzIChlZGl0YWJsZSkNCkN0cmwrRG93biAg
ICAgICAgU2hvdyBlbnZpcm9ubWVudCAoZWRpdGFibGUpDQoNCg0KQ29weSB0
byBjbGlwYm9hcmQ6DQoNCkN0cmwrSW5zICAgICAgICAgdmFsdWUNCkN0cmwr
U2hpZnQrSW5zICAga2V5DQpdXQ0KDQpsb2NhbCBvbWl0ID0ge30NCmxvY2Fs
IGJya2V5cyA9IHt9DQpsb2NhbCB0YWJsZXNfZmlyc3QgPSB0cnVlDQoNCi0t
IGZvcm1hdCB2YWx1ZXMgZm9yIG1lbnUgaXRlbXMgYW5kIG1lc3NhZ2UgYm94
ZXMNCmxvY2FsIGZ1bmN0aW9uIHZhbGZtdCh2YWwsIG1vZGUpDQoJbG9jYWwg
dCA9IHR5cGUodmFsKQ0KCWlmIHQgPT0gJ3N0cmluZycgdGhlbg0KCQlpZiBu
b3QgcGNhbGwod2luLlV0ZjhUb1V0ZjE2LCB2YWwpIHRoZW4gdmFsID0gJzxp
bGxlZ2FsIHZhbHVlPicgZW5kDQoJCXJldHVybiAobW9kZT09J2VkaXQnIGFu
ZCAoJyVxJyk6Zm9ybWF0KHZhbCkgb3INCgkJICAgICAgIChtb2Rlfj0nbGlz
dCcgb3IgdmFsPT0nJyBvciB2YWw6bWF0Y2gnICQnKSBhbmQgJyInIC4uICB2
YWwgLi4gJyInIG9yDQoJCSAgICAgICAgdmFsKSwgdA0KCWVsc2VpZiB0ID09
ICdudW1iZXInIHRoZW4NCgkJcmV0dXJuIChtb2RlPT0iZWRpdCIgYW5kICcw
eCV4IC0tW1sgJXMgXV0nIG9yICcweCUwOHggKCVzKScpOmZvcm1hdCh2YWws
IHZhbCksIHQNCgllbmQNCglyZXR1cm4gdG9zdHJpbmcodmFsKSwgdA0KZW5k
DQoNCi0tIG1ha2UgbWVudSBpdGVtIGZvciBmYXIuTWVudSguLi4pDQpsb2Nh
bCBrZXlfdyA9IDMwDQpsb2NhbCBpdGVtX2ZtdCA9ICgnJSUtJXMuJXNzJyk6
Zm9ybWF0KGtleV93LGtleV93KS4uJyVzJS04cyDilIIlLTI1cycNCmxvY2Fs
IGZ1bmN0aW9uIG1ha2VJdGVtKGtleSwgc3ZhbCwgdnQpDQoJbG9jYWwgayA9
IHZhbGZtdChrZXksJ2xpc3QnKQ0KCWxvY2FsIGJvcmRlciA9IGs6bGVuKCk8
PWtleV93IGFuZCAn4pSCJyBvciAn4oCmJw0KCS0tbG9jYWwgYSxiPXBjYWxs
KGZvcm1hdCwgaywgYm9yZGVyLCB2dCwgc3ZhbCkNCg0KCWlmIHRydWUgdGhl
bg0KCQktLWVycm9yKDEpDQoJCS0tZmFyLlNob3codG9zdHJpbmcoayksIGJv
cmRlciwgdnQsIHN2YWwpDQoJZW5kDQoJcmV0dXJuIHsNCgkJdGV4dCAgICA9
IGl0ZW1fZm10OmZvcm1hdChrLCBib3JkZXIsIHZ0LCBzdmFsKSwNCgkJa2V5
ICAgICA9IGtleSwNCgkJdHlwZSAgICA9IHZ0LA0KCQljaGVja2VkID0gdnQ9
PSd0YWJsZScgYW5kICfiiaEnICAgICAgICAtLeKBnuKJoeKAosK3w7fCu+KA
uuKWug0KCQkgICAgICAgICAgb3IgdnQ9PSdmdW5jdGlvbicgYW5kICfLnCcg
IC0t4bagwqjLncucDQoJfQ0KZW5kDQoNCi0tIGNyZWF0ZSBzb3J0ZWQgbWVu
dSBpdGVtcyB3aXRoIGFzc29jaWF0ZWQga2V5cw0KbG9jYWwgZnVuY3Rpb24g
bWFrZU1lbnVJdGVtcyhvYmopDQoJbG9jYWwgaXRlbXMgPSB7fQ0KDQoJLS0g
Z3JhYiBhbGwgJ3JlYWwnIGtleXMNCglmb3Iga2V5IGluIHBhaXJzKG9iaikg
ZG8NCgkJbG9jYWwgc3ZhbCwgdnQgPSB2YWxmbXQob2JqW2tleV0sJ2xpc3Qn
KQ0KCQlpZiBub3Qgb21pdFt2dF0gdGhlbg0KCQkJdGFibGUuaW5zZXJ0KGl0
ZW1zLCBtYWtlSXRlbShrZXksIHN2YWwsIHZ0KSkNCgkJZW5kDQoJZW5kDQoN
CgktLSBGYXIgdXNlcyBzb21lIHByb3BlcnRpZXMgdGhhdCBpbiBmYWN0IGFy
ZSBmdW5jdGlvbnMgaW4gb2JqLnByb3BlcnRpZXMNCgktLSBidXQgdGhleSBs
b2dpY2FsbHkgYmVsb25nIHRvIHRoZSBvYmplY3QgaXRzZWxmLiBJdCdzIGFs
bCBMdWEgbWFnaWMgOykNCg0KCWxvY2FsIHN1Y2Nlc3MscHJvcHMgPSBwY2Fs
bChmdW5jdGlvbigpcmV0dXJuIG9iai5wcm9wZXJ0aWVzIGVuZCkNCgktLWlm
IG5vdCBzdWNjZXNzIHRoZW4gZmFyLk1lc3NhZ2UocHJvcHMsIkVycm9yIGlu
IF9faW5kZXggbWV0YW1ldGhvZCIsbmlsLCJ3bCIpIGVuZA0KCWlmIHR5cGUo
cHJvcHMpID09ICd0YWJsZScgYW5kIG5vdCByYXdnZXQob2JqLCAncHJvcGVy
dGllcycpIHRoZW4NCgktLWlmIHR5cGUob2JqLnByb3BlcnRpZXMpID09ICd0
YWJsZScgYW5kIG5vdCByYXdnZXQob2JqLCAncHJvcGVydGllcycpIHRoZW4N
CgkJZm9yIGtleSBpbiBwYWlycyhvYmoucHJvcGVydGllcykgZG8NCgkJCWxv
Y2FsIHN2YWwsIHZ0ID0gdmFsZm10KG9ialtrZXldLCdsaXN0JykNCgkJCWlm
IG5vdCBvbWl0W3Z0XSB0aGVuDQoJCQkJdGFibGUuaW5zZXJ0KGl0ZW1zLCBt
YWtlSXRlbShrZXksIHN2YWwsIHZ0KSkNCgkJCWVuZA0KCQllbmQNCgllbmQN
Cg0KLS0JdGFibGUuc29ydChpdGVtcywgZnVuY3Rpb24odjEsIHYyKQlyZXR1
cm4gdjEudGV4dCA8IHYyLnRleHQgZW5kKQ0KLS1bWw0KCXRhYmxlLnNvcnQo
aXRlbXMsIGZ1bmN0aW9uKHYxLCB2MikNCgkJaWYgdGFibGVzX2ZpcnN0IGFu
ZCAodjEudHlwZT09J3RhYmxlJykgfj0gKHYyLnR5cGU9PSd0YWJsZScpIHRo
ZW4NCgkJCXJldHVybiB2MS50eXBlPT0ndGFibGUnDQoJCWVsc2UNCgkJCXJl
dHVybiB2MS50ZXh0IDwgdjIudGV4dA0KCQllbmQNCgllbmQpDQotLV1dDQot
LS1bWw0KCXRhYmxlLnNvcnQoaXRlbXMsIGZ1bmN0aW9uKHYxLCB2MikNCgkJ
aWYgdGFibGVzX2ZpcnN0IGFuZCB2MS50eXBlfj12Mi50eXBlIHRoZW4NCgkJ
CXJldHVybiB2MS50eXBlPT0ndGFibGUnIG9yIHYyLnR5cGV+PSd0YWJsZScg
YW5kIHYxLnR5cGU8djIudHlwZQ0KCQllbHNlDQoJCQlyZXR1cm4gdjEudGV4
dCA8IHYyLnRleHQNCgkJZW5kDQoJZW5kKQ0KLS1dXQ0KCXJldHVybiBpdGVt
cw0KZW5kDQoNCmxvY2FsIGZ1bmN0aW9uIGx1YWV4cF9wcm9tcHQoVGl0bGUs
UHJvbXB0LFNyYykNCglyZXBlYXQNCgkJbG9jYWwgZXhwciA9IGZhci5JbnB1
dEJveCAobmlsLCBUaXRsZTpnc3ViKCcmJywnJiYnLDEpLCBQcm9tcHQsDQoJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlLCBTcmMsIG5pbCwg
bmlsLCBmYXIuRmxhZ3MuRklCX0VOQUJMRUVNUFRZKQ0KCQlpZiBub3QgZXhw
ciB0aGVuIHJldHVybiBlbmQNCgkJbG9jYWwgZixlcnIgPSBsb2Fkc3RyaW5n
KCdyZXR1cm4gJy4uZXhwcikNCgkJaWYgZiB0aGVuDQoJCQlsb2NhbCByZXMg
PSB7cGNhbGwoZil9DQoJCQlpZiByZXNbMV0gdGhlbgl0YWJsZS5yZW1vdmUo
cmVzLDEpOwlyZXR1cm4gcmVzLGV4cHINCgkJCWVsc2UJZmFyLk1lc3NhZ2Uo
cmVzWzJdLCdFcnJvcicsbmlsLCd3JykNCgkJCWVuZA0KCQllbHNlDQoJCQlm
YXIuTWVzc2FnZShlcnIsJ0Vycm9yIGluIGV4cHJlc3Npb24nLG5pbCwnd2wn
KQ0KCQllbmQNCgl1bnRpbCBmYWxzZQ0KZW5kDQoNCi0tIGVkaXQgb3IgcmVt
b3ZlIG9iamVjdCBhdCBvYmpba2V5XQ0KbG9jYWwgZnVuY3Rpb24gZWRpdFZh
bHVlKG9iaiwga2V5LCB0aXRsZSwgZGVsKQ0KCWlmIGRlbCB0aGVuDQoJCWlm
IDEgPT0gZmFyLk1lc3NhZ2UoKCclcyBpcyBhICVzLCBkbyB5b3Ugd2FudCB0
byByZW1vdmUgaXQ/Jyk6Zm9ybWF0KHZhbGZtdChrZXkpLA0KCQkJdHlwZShv
Ympba2V5XSk6dXBwZXIoKSksDQoJCQknUkVNT1ZFOiAnIC4uIHRpdGxlLA0K
CQkJJztZZXNObycsDQoJCQkndycpIHRoZW4NCgkJCW9ialtrZXldID0gbmls
DQoJCWVuZA0KCWVsc2UNCgkJbG9jYWwgdiwgdCA9IHZhbGZtdChvYmpba2V5
XSwgImVkaXQiKQ0KCQlpZiB0ID09ICd0YWJsZScgb3IgdCA9PSAnZnVuY3Rp
b24nIHRoZW4JdiA9ICcnCWVuZA0KCQlsb2NhbCBwcm9tcHQgPSAoJyVzIGlz
IGEgJXMsIHR5cGUgbmV3IHZhbHVlIGFzIEx1YSBjb2RlJyk6Zm9ybWF0KHZh
bGZtdChrZXkpLHQ6dXBwZXIoKSkNCgkJbG9jYWwgcmVzID0gbHVhZXhwX3By
b21wdCgnRURJVDogJyAuLiB0aXRsZSwgcHJvbXB0LCB2KQ0KCQlvYmpba2V5
XSA9IHJlcyBhbmQgcmVzWzFdIG9yIG9ialtrZXldDQoJZW5kDQplbmQNCg0K
LS0gYWRkIG5ldyBlbGVtZW50IHRvIG9iag0KbG9jYWwgZnVuY3Rpb24gaW5z
ZXJ0VmFsdWUob2JqLCB0aXRsZSkNCglsb2NhbCByZXMgPSBsdWFleHBfcHJv
bXB0KCdJTlNFUlQ6ICcgLi4gdGl0bGUsDQoJICAgICAgICAgICAgICAgICAg
ICAgICAgICAndHlwZSB0aGUga2V5IGFuZCB2YWx1ZSBjb21tYSBzZXBhcmF0
ZWQgYXMgTHVhIGNvZGUnKQ0KCWlmIHJlcyB0aGVuDQoJCWxvY2FsIGssIHYg
PSB1bnBhY2socmVzKQ0KCQlpZiBrfj1uaWwgdGhlbglvYmpba10gPSB2CWVu
ZA0KCWVuZA0KZW5kDQoNCmxvY2FsIGZ1bmN0aW9uIGNvbmNhdCh0LGRlbGlt
KQ0KCWxvY2FsIHMgPSB0b3N0cmluZyh0WzFdKQ0KCWZvciBpPTIsI3QgZG8g
cyA9IHMuLmRlbGltLi50b3N0cmluZyh0W2ldKSBlbmQNCglyZXR1cm4gcw0K
ZW5kDQoNCmxvY2FsIGZ1bmN0aW9uIGdldGZQYXJhbXNOYW1lcyhmKQ0KCWlm
IG5vdCBqaXQgdGhlbglyZXR1cm4gJy4uLicJZW5kDQoJbG9jYWwgaW5mbyA9
IGRlYnVnLmdldGluZm8oZikNCglsb2NhbCBwYXJhbXMgPSB7fQ0KCWZvciBp
PTEsaW5mby5ucGFyYW1zIG9yIDEwMDAgZG8NCgkJbG9jYWwgayA9IGRlYnVn
LmdldGxvY2FsIChmLCBpKQ0KCQlpZiBub3QgayB0aGVuCXJldHVybiBwYXJh
bXMsICNwYXJhbXMsIGVycm9yKCk7CWVuZCAtLWltcG9zc2libGUgaW4gbHVh
IDUuMiBvciBsdWFqaXQgMg0KCQlwYXJhbXNbaV0gPSBrDQoJZW5kDQoJaWYg
aW5mby5pc3ZhcmFyZyB0aGVuCXBhcmFtc1sjcGFyYW1zKzFdID0gJy4uLicJ
ZW5kDQoJbG9jYWwgcGFyYW1zdHIgPSAjcGFyYW1zPjAgYW5kIHRhYmxlLmNv
bmNhdChwYXJhbXMsJywgJykgb3IgJzxub25lPicNCglyZXR1cm4gcGFyYW1z
dHIsIHBhcmFtcw0KZW5kDQoNCi0tIHNob3cgYSBtZW51IHdob3NlIGl0ZW1z
IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1lbWJlcnMgb2YgZ2l2ZW4gb2Jq
ZWN0DQpsb2NhbCBmdW5jdGlvbiBwcm9jZXNzKG9iaiwgdGl0bGUsIGFjdGlv
bikNCgl0aXRsZSA9IHRpdGxlIG9yICcnDQoJaWYgYWN0aW9uIHRoZW4gYnJr
ZXlzW2FjdGlvbl0oe29ian0sIDEsIHRpdGxlKTsJcmV0dXJuCWVuZA0KDQoJ
bG9jYWwgaXRlbXMsIG1wcm9wcyA9IHt9LCB7SWQgPSB1dWlkLCBCb3R0b20g
PSAnRjEsIEYzLCBGNCwgRGVsLCBDdHJsK00nLA0KCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZsYWdzPXtGTUVOVV9TSE9XQU1QRVJTQU5EPTEsRk1F
TlVfV1JBUE1PREU9MX19LS0sRk1FTlVfQVVUT0hJR0hMSUdIVD0xfX0NCgls
b2NhbCBvdHlwZSA9IHR5cGUob2JqKQ0KCWxvY2FsIGl0ZW0sIGluZGV4DQoN
CgktLSBzb21lIG1lbWJlciB0eXBlcywgbmVlZCBzcGVjaWZpYyBiZWhhdmlv
cjoNCgktLSB0YWJsZXMgYXJlIHN1Ym1lbnVzDQoNCgktLSBmdW5jdGlvbnMg
Y2FuIGJlIGNhbGxlZA0KCWlmIG90eXBlID09ICdmdW5jdGlvbicgdGhlbg0K
LS1bWw0KCQlsb2NhbCBhcmdzLGFyZ3N0cg0KCQkgID0gbHVhZXhwX3Byb21w
dCgoJ0NBTEw6ICVzICglcyknKTpmb3JtYXQodGl0bGUsZ2V0ZlBhcmFtc05h
bWVzKG9iaikpLA0KCQkgICAgICAgICAgICAgICAgICAgJ1R5cGUgYXJndW1l
bnRzIGFzIEx1YSBjb2RlIG9yIGxlYXZlIGVtcHR5OicpDQotLV1dDQotLS1b
Ww0KCQlsb2NhbCBhcmdzLGFyZ3N0ciA9IGx1YWV4cF9wcm9tcHQoJ0NBTEw6
Jy4udGl0bGUsDQoJCSAgICAgICAgICAgICAgICAgICAgKCdhcmd1bWVudHM6
ICVzICh0eXBlIGFzIEx1YSBjb2RlIG9yIGxlYXZlIGVtcHR5KScpDQoJCSAg
ICAgICAgICAgICAgICAgICAgIDpmb3JtYXQoZ2V0ZlBhcmFtc05hbWVzKG9i
aikpKQ0KLS1dXQ0KCQlpZiBhcmdzIHRoZW4NCgkJCS0tIG92ZXJ3cml0ZSB0
aGUgZnVuY3Rpb24gb2JqZWN0IHdpdGggaXRzIHJldHVybiB2YWx1ZXMNCgkJ
CWxvY2FsIHJlcyA9IHtwY2FsbChvYmosIHVucGFjayhhcmdzKSl9DQoJCQlp
ZiByZXNbMV0gdGhlbg0KCQkJCXRhYmxlLnJlbW92ZShyZXMsMSkNCgkJCQlv
YmogPSByZXMNCgkJCQl0aXRsZSA9ICgnJXMoJXMpJyk6Zm9ybWF0KHRpdGxl
LGFyZ3N0cikNCgkJCWVsc2UNCgkJCQlmYXIuTWVzc2FnZSgoW1sNCmZ1bmN0
aW9uOiAgJXMNCmFyZ3VtZW50czogJXMNCnZhbHVlczogICAgJXMNCg0KJXNd
XSk6Zm9ybWF0KHRpdGxlLGFyZ3N0cixjb25jYXQoYXJncywnLCAnKSxyZXNb
Ml0pLCdFcnJvcicsbmlsLCd3bCcpDQoJCQkJcmV0dXJuDQoJCQllbmQNCgkJ
ZWxzZQ0KCQkJcmV0dXJuDQoJCWVuZA0KDQoJLS0gb3RoZXIgdmFsdWVzIGFy
ZSBzaW1wbHkgZGlzcGxheWVkIGluIGEgbWVzc2FnZSBib3gNCgllbHNlaWYg
b3R5cGUgfj0gJ3RhYmxlJyB0aGVuDQoJCWxvY2FsIHZhbHVlID0gdmFsZm10
KG9iaiwidmlldyIpDQoJCWZhci5NZXNzYWdlKHZhbHVlLCB0aXRsZTpnc3Vi
KCcmJywnJiYnLDEpLCBuaWwsIHZhbHVlOm1hdGNoJ1xuJyBhbmQgJ2wnIG9y
ICcnKQ0KCQlyZXR1cm4NCgllbmQNCg0KCS0tIHNob3cgdGhpcyBtZW51IGxl
dmVsIGFnYWluIGFmdGVyIGVhY2ggcmV0dXJuIGZyb20gYSBzdWJtZW51L2Z1
bmN0aW9uIGNhbGwgLi4uDQoJcmVwZWF0DQoJCWl0ZW1zID0gbWFrZU1lbnVJ
dGVtcyhvYmopDQoJCW1wcm9wcy5UaXRsZSA9IHRpdGxlIC4uICcgICgnIC4u
ICNpdGVtcyAuLiAnKScgLi4gKG9taXRbJ2Z1bmN0aW9uJ10gYW5kICcqJyBv
ciAnJykNCg0KCQlpdGVtLCBpbmRleCA9IGZhci5NZW51KG1wcm9wcywgaXRl
bXMsIGJya2V5cykNCgkJbXByb3BzLlNlbGVjdEluZGV4ID0gaW5kZXgNCg0K
CQktLSBzaG93IHN1Ym1lbnUvY2FsbCBmdW5jdGlvbiAuLi4NCgkJaWYgaXRl
bSB0aGVuDQoJCQlsb2NhbCBrZXkgPSBpdGVtLmtleSBvciAoaW5kZXggPiAw
IGFuZCBpdGVtc1tpbmRleF0ua2V5KQ0KCQkJaWYgaXRlbS5rZXkgfj0gbmls
IHRoZW4NCgkJCQlwcm9jZXNzKG9ialtrZXldLCB0aXRsZSAuLiAnLicgLi4g
dG9zdHJpbmcoa2V5KSkNCgkJCWVsc2VpZiBpdGVtLmFjdGlvbiB0aGVuDQoJ
CQkJaWYgImJyZWFrIj09aXRlbS5hY3Rpb24ob2JqLCBrZXksICh0aXRsZSAu
LiAnLicgLi4gdG9zdHJpbmcoa2V5KSkpIHRoZW4JcmV0dXJuCWVuZA0KCQkJ
ZW5kDQoJCWVuZA0KCQktLSB1bnRpbCB0aGUgdXNlciBpcyBib3JlZCBhbmQg
Z29lcyBiYWNrIDspDQoJdW50aWwgbm90IGl0ZW0NCmVuZA0KDQpsb2NhbCBm
dW5jdGlvbiBnZXRBbGxVcHZhbHVlcyhmKQ0KCWxvY2FsIHVwdmFsdWVzID0g
e30NCglmb3IgaT0xLDEwMDAgZG8NCgkJbG9jYWwgayx2ID0gZGVidWcuZ2V0
dXB2YWx1ZSAoZiwgaSkNCgkJaWYgbm90IGsgdGhlbglyZXR1cm4gdXB2YWx1
ZXMsIGktMQllbmQNCgkJdXB2YWx1ZXNba10gPSB2DQoJZW5kDQplbmQNCg0K
bG9jYWwgZnVuY3Rpb24gc3luY1VwdmFsdWVzKGYsdCxuKQ0KCWZvciBpPW4s
MSwtMSBkbw0KCQlsb2NhbCBrLHYgPSBkZWJ1Zy5nZXR1cHZhbHVlIChmLCBp
KQ0KCQlpZiB0W2tdfj12IHRoZW4NCgkJCWFzc2VydChrID09IGRlYnVnLnNl
dHVwdmFsdWUgKGYsIGksIHRba10pKQ0KCQllbmQNCgllbmQNCmVuZA0KDQps
b2NhbCBmdW5jdGlvbiBnZXRBbGxMb2NhbHMobGV2ZWwpDQoJbG9jYWwgbG9j
YWxzID0ge30NCglmb3IgaT0xLDEwMDAgZG8NCgkJbG9jYWwgayx2ID0gZGVi
dWcuZ2V0bG9jYWwgKGxldmVsKzEsIGkpDQoJCWlmIG5vdCBrIHRoZW4JcmV0
dXJuIGxvY2FscywgaS0xCWVuZA0KCQlsb2NhbHNba10gPSB2DQoJZW5kDQpl
bmQNCg0KbG9jYWwgZnVuY3Rpb24gc3luY0xvY2FscyhsZXZlbCx0LG4pDQoJ
bGV2ZWwgPSBsZXZlbCArIDENCglmb3IgaT1uLDEsLTEgZG8NCgkJbG9jYWwg
ayx2ID0gZGVidWcuZ2V0bG9jYWwgKGxldmVsLCBpKQ0KCQlpZiB0W2tdfj12
IHRoZW4NCgkJCWFzc2VydChrID09IGRlYnVnLnNldGxvY2FsIChsZXZlbCwg
aSwgdFtrXSkpDQoJCWVuZA0KCWVuZA0KZW5kDQoNCmxvY2FsIGZ1bmN0aW9u
IGdldFZhcmFyZyhsZXZlbCkNCglsb2NhbCB2YXJhcmcgPSB7fQ0KCWZvciBp
PTEsMTAwMCBkbw0KCQlsb2NhbCBrLHYgPSBkZWJ1Zy5nZXRsb2NhbCAobGV2
ZWwrMSwgLWkpDQoJCWlmIG5vdCBrIHRoZW4JcmV0dXJuIHZhcmFyZwllbmQt
LSgqdmFyYXJnKQ0KCQl2YXJhcmdbaV0gPSB2DQoJZW5kDQplbmQNCg0KbG9j
YWwgZnVuY3Rpb24gc3luY1ZhcmFyZyhsZXZlbCx0KQ0KCWZvciBpPTEsI3Qg
ZG8NCgkJbG9jYWwgayx2ID0gZGVidWcuZ2V0bG9jYWwgKGxldmVsKzEsIC1p
KQ0KCQlpZiB2fj10W2ldIHRoZW4JZGVidWcuc2V0bG9jYWwgKGxldmVsKzEs
IC1pLCB0W2ldKQllbmQNCgllbmQNCmVuZA0KDQpsb2NhbCBmdW5jdGlvbiBn
ZXRMb2NhbHNBbmRQYXJhbXMobGV2ZWwpDQoJbG9jYWwgbG9jYWxzLG4gPSBn
ZXRBbGxMb2NhbHMobGV2ZWwrMSkNCglsb2NhbCBpbmZvID0gZGVidWcuZ2V0
aW5mbyhsZXZlbCsxKQ0KCWxvY2FsIHZhcmFyZyA9IGdldFZhcmFyZyhsZXZl
bCsxKQ0KCXZhcmFyZyA9IHZhcmFyZ1sxXSBhbmQgdmFyYXJnDQoJbG9jYWxz
WycoKnZhcmFyZyknXSA9IGxvY2Fsc1snKCp2YXJhcmcpJ10gb3IgdmFyYXJn
IG9yIG5pbA0KCWxvY2FsIGluZm8gPSBkZWJ1Zy5nZXRpbmZvKGxldmVsKzEp
DQoJbG9jYWwgbmFtZSA9ICgnKCpmdW5jOiAlcyknKTpmb3JtYXQoaW5mby5u
YW1lIG9yICc8bm9uYW1lPicpDQoJbG9jYWxzW25hbWVdID0gbG9jYWxzW25h
bWVdIG9yIGluZm8uZnVuYw0KCXJldHVybiBsb2NhbHMsbix2YXJhcmcNCmVu
ZA0KDQpsb2NhbCBmdW5jdGlvbiBzaG93TG9jYWxzKGxldmVsLHNoaWZ0KQ0K
CS0tZmFyLlNob3cobGV2ZWwsc2hpZnQpDQoJaWYgbm90IHNoaWZ0IHRoZW4N
CgkJc2hpZnQgPSAwDQoJCWZvciBpID0gMSwxMDAwIGRvDQoJCQlsb2NhbCBp
bmZvID0gZGVidWcuZ2V0aW5mbyhpLCdmJykNCgkJCWlmIG5vdCBpbmZvIHRo
ZW4JYnJlYWsJZW5kDQoJCQlpZiBpbmZvLmZ1bmM9PXByb2Nlc3MgdGhlbglz
aGlmdCA9IGkJZW5kDQoJCWVuZA0KCQlpZiBzaGlmdD45MDAgdGhlbglyZXR1
cm4JZW5kDQoJZW5kDQoJbGV2ZWwgPSBsZXZlbCArIHNoaWZ0DQoJbG9jYWwg
aW5mbyA9IGRlYnVnLmdldGluZm8obGV2ZWwsJycpDQoJaWYgbm90IGluZm8g
dGhlbgltZi5iZWVwKCkgcmV0dXJuCWVuZA0KCWxvY2FsIGxvY2FscyxuLHZh
cmFyZyA9IGdldExvY2Fsc0FuZFBhcmFtcyhsZXZlbCkNCglpZiBuPjAgb3Ig
dmFyYXJnICB0aGVuDQoJCXByb2Nlc3MobG9jYWxzLCAoJ2xvY2FscyBbJWRd
OiAlcycpOmZvcm1hdChsZXZlbC1zaGlmdCxpbmZvLm5hbWUgb3IgJ21haW4g
Y2h1bmsnKSkNCgkJc3luY0xvY2FscyhsZXZlbCxsb2NhbHMsbikNCgkJaWYg
dmFyYXJnIHRoZW4gc3luY1ZhcmFyZyhsZXZlbCx2YXJhcmcpIGVuZA0KCQly
ZXR1cm4gJ2JyZWFrJw0KCWVuZA0KZW5kDQoNCmJya2V5cyA9IHsNCgl7QnJl
YWtLZXkgPSAnRjknLAlhY3Rpb24gPSBmdW5jdGlvbihpbmZvKQ0KCQlwcm9j
ZXNzKGRlYnVnLmdldHJlZ2lzdHJ5KCksICdkZWJ1Zy5nZXRyZWdpc3RyeTon
KQ0KCWVuZDsJbmFtZSA9ICdyZWdpc3RyeSd9LA0KDQoJe0JyZWFrS2V5ID0g
J0N0cmwrMScsCWFjdGlvbiA9IGZ1bmN0aW9uKCkJcmV0dXJuIHNob3dMb2Nh
bHMoMSkJZW5kOwluYW1lID0gJ2xvY2Fscyd9LA0KCXtCcmVha0tleSA9ICdD
dHJsKzInLAlhY3Rpb24gPSBmdW5jdGlvbigpCXJldHVybiBzaG93TG9jYWxz
KDIpCWVuZDsJbmFtZSA9ICdsb2NhbHMyJ30sDQoJe0JyZWFrS2V5ID0gJ0N0
cmwrMycsCWFjdGlvbiA9IGZ1bmN0aW9uKCkJcmV0dXJuIHNob3dMb2NhbHMo
MykJZW5kOwluYW1lID0gJ2xvY2FsczMnfSwNCgl7QnJlYWtLZXkgPSAnQ3Ry
bCs0JywJYWN0aW9uID0gZnVuY3Rpb24oKQlyZXR1cm4gc2hvd0xvY2Fscyg0
KQllbmQ7CW5hbWUgPSAnbG9jYWxzNCd9LA0KCXtCcmVha0tleSA9ICdDdHJs
KzUnLAlhY3Rpb24gPSBmdW5jdGlvbigpCXJldHVybiBzaG93TG9jYWxzKDUp
CWVuZDsJbmFtZSA9ICdsb2NhbHM1J30sDQoJe0JyZWFrS2V5ID0gJ0N0cmwr
NicsCWFjdGlvbiA9IGZ1bmN0aW9uKCkJcmV0dXJuIHNob3dMb2NhbHMoNikJ
ZW5kOwluYW1lID0gJ2xvY2FsczYnfSwNCgl7QnJlYWtLZXkgPSAnQ3RybCs3
JywJYWN0aW9uID0gZnVuY3Rpb24oKQlyZXR1cm4gc2hvd0xvY2Fscyg3KQll
bmQ7CW5hbWUgPSAnbG9jYWxzNyd9LA0KCXtCcmVha0tleSA9ICdDdHJsKzgn
LAlhY3Rpb24gPSBmdW5jdGlvbigpCXJldHVybiBzaG93TG9jYWxzKDgpCWVu
ZDsJbmFtZSA9ICdsb2NhbHM4J30sDQoJe0JyZWFrS2V5ID0gJ0N0cmwrOScs
CWFjdGlvbiA9IGZ1bmN0aW9uKCkJcmV0dXJuIHNob3dMb2NhbHMoOSkJZW5k
OwluYW1lID0gJ2xvY2FsczknfSwNCgl7QnJlYWtLZXkgPSAnQ3RybCswJywJ
YWN0aW9uID0gZnVuY3Rpb24oKQlyZXR1cm4gc2hvd0xvY2FscygwKQllbmQ7
fSwNCgl7QnJlYWtLZXkgPSAnQ3RybCtHJywJYWN0aW9uID0gZnVuY3Rpb24o
KQlwcm9jZXNzKF9HLCdfRycpOwlyZXR1cm4gImJyZWFrIgllbmR9LA0KDQoJ
e0JyZWFrS2V5ID0gJ0N0cmwrSW5zZXJ0JywJYWN0aW9uID0gZnVuY3Rpb24o
b2JqLCBrZXkpDQoJCWZhci5Db3B5VG9DbGlwYm9hcmQgKCh2YWxmbXQob2Jq
W2tleV0pKSkNCgllbmR9LA0KDQoJe0JyZWFrS2V5ID0gJ0N0cmxTaGlmdCtJ
bnNlcnQnLAlhY3Rpb24gPSBmdW5jdGlvbihvYmosIGtleSkNCgkJZmFyLkNv
cHlUb0NsaXBib2FyZCAoKHZhbGZtdChrZXkpKSkNCgllbmR9LA0KDQoJe0Jy
ZWFrS2V5ID0gJ0N0cmwrVXAnLAlhY3Rpb24gPSBmdW5jdGlvbihvYmosIGtl
eSwga3BhdGgpDQoJCWxvY2FsIGYgPSBvYmpba2V5XQ0KCQlpZiB0eXBlKGYp
ID09ICdmdW5jdGlvbicgdGhlbg0KCQkJbG9jYWwgdCxuID0gZ2V0QWxsVXB2
YWx1ZXMoZikNCgkJCWlmIG4+MCB0aGVuDQoJCQkJcHJvY2Vzcyh0LCAndXB2
YWx1ZXM6ICcgLi4ga3BhdGgpDQoJCQkJc3luY1VwdmFsdWVzKGYsdCxuKQ0K
CQkJZW5kDQoJCWVuZA0KCWVuZDsJbmFtZSA9ICd1cHZhbHVlcyd9LA0KDQoJ
e0JyZWFrS2V5ID0gJ0N0cmwrRG93bicsCWFjdGlvbiA9IGZ1bmN0aW9uKG9i
aiwga2V5LCBrcGF0aCkNCgkJbG9jYWwgZiA9IG9ialtrZXldOyBsb2NhbCB0
ID0gdHlwZShmKQ0KCQlpZiB0PT0nZnVuY3Rpb24nIG9yIHQ9PSd1c2VyZGF0
YScgb3IgdD09J3RocmVhZCcgdGhlbg0KCQkJbG9jYWwgZW52ID0gZGVidWcu
Z2V0ZmVudihmKQ0KCQkJaWYgKGVudn49X0cgb3IgMT09ZmFyLk1lc3NhZ2Uo
J19HJywnU2hvdyBnbG9iYWwgZW52aXJvbm1lbnQ/JywnO09rQ2FuY2VsJykp
DQoJCQkJICBhbmQgbmV4dChlbnYpIHRoZW4NCgkJCQlwcm9jZXNzKGVudiwg
J2dldGZlbnY6ICcgLi4ga3BhdGgpDQoJCQllbmQNCgkJZW5kDQoJZW5kOwlu
YW1lID0gJ2Vudid9LA0KDQoJe0JyZWFrS2V5ID0gJ0N0cmwrUmlnaHQnLAlh
Y3Rpb24gPSBmdW5jdGlvbihvYmosIGtleSwga3BhdGgpDQoJCWxvY2FsIGYg
PSBvYmpba2V5XQ0KCQlpZiB0eXBlKGYpID09ICdmdW5jdGlvbicgdGhlbg0K
CQkJbG9jYWwgYXJncyx0ID0gZ2V0ZlBhcmFtc05hbWVzKGYpDQoJCQlpZiBh
cmdzOmxlbigpPjAgdGhlbg0KCQkJCXByb2Nlc3ModCwgJ3BhcmFtcyAoZik6
ICcgLi4ga3BhdGgpDQoJCQkJbG9jYWwgbmFtZSA9IGRlYnVnLmdldGluZm8o
ZikubmFtZQ0KCQkJCS0tZmFyLk1lc3NhZ2UoKCclcyAoJXMpJyk6Zm9ybWF0
KG5hbWUgb3Iga3BhdGgsYXJncyksICdwYXJhbXMnKQ0KCQkJZW5kDQoJCWVu
ZA0KCWVuZDsJbmFtZSA9ICdwYXJhbXMnfSwNCg0KCXtCcmVha0tleSA9ICdB
bHQrRjQnLAlhY3Rpb24gPSBmdW5jdGlvbihvYmosIGtleSwga3BhdGgpDQoJ
CWxvY2FsIGYgPSBvYmpba2V5XQ0KCQlpZiB0eXBlKGYpID09ICdmdW5jdGlv
bicgdGhlbg0KCQkJbG9jYWwgaW5mbyA9IGRlYnVnLmdldGluZm8oZiwnUycp
DQoJCQlsb2NhbCBmaWxlbmFtZSA9IGluZm8uc291cmNlOm1hdGNoKCJeQCgu
KykkIikNCgkJCWlmIGZpbGVuYW1lIHRoZW4NCgkJCQllZGl0b3IuRWRpdG9y
KGZpbGVuYW1lLG5pbCxuaWwsbmlsLG5pbCxuaWwsbmlsLGluZm8ubGluZWRl
ZmluZWQpDQoJCQllbmQNCgkJZW5kDQoJZW5kOyBuYW1lID0gJ2VkaXQnfSwN
Cg0KCXtCcmVha0tleSA9ICdGMycsCWFjdGlvbiA9IGZ1bmN0aW9uKG9iaiwg
a2V5LCBrcGF0aCkNCgkJbG9jYWwgZiA9IG9ialtrZXldDQoJCWlmIHR5cGUo
ZikgPT0gJ2Z1bmN0aW9uJyB0aGVuDQoJCQlwcm9jZXNzKGRlYnVnLmdldGlu
Zm8oZiksICdkZWJ1Zy5nZXRpbmZvOiAnIC4uIGtwYXRoKQ0KCQllbHNlaWYg
dHlwZShmKSA9PSAndGhyZWFkJyB0aGVuDQoJCQlmYXIuTWVzc2FnZShkZWJ1
Zy50cmFjZWJhY2soZiwibGV2ZWwgMCIsMCksJ2RlYnVnLnRyYWNlYmFjazog
JyAuLiBrcGF0aCxuaWwsJ2wnKQ0KCQkJLS1mYXIuU2hvdygnZGVidWcudHJh
Y2ViYWNrOiAnIC4uIGtwYXRoIC4uIGRlYnVnLnRyYWNlYmFjayhmLCIsIGxl
dmVsIDAiLDApKQ0KCQllbmQNCgllbmQ7CW5hbWUgPSAnaW5mbyd9LA0KDQoJ
e0JyZWFrS2V5ID0gJ0Y0JywJYWN0aW9uID0gZnVuY3Rpb24ob2JqLCBrZXks
IGtwYXRoKQ0KCQlyZXR1cm4ga2V5IH49IG5pbCBhbmQgZWRpdFZhbHVlKG9i
aiwga2V5LCBrcGF0aCkNCgllbmR9LA0KDQoJe0JyZWFrS2V5ID0gJ0N0cmwr
RicsCWFjdGlvbiA9IGZ1bmN0aW9uKCkNCgkJb21pdFsnZnVuY3Rpb24nXSA9
IG5vdCBvbWl0WydmdW5jdGlvbiddDQoJZW5kfSwNCg0KCXtCcmVha0tleSA9
ICdDdHJsK1QnLAlhY3Rpb24gPSBmdW5jdGlvbigpDQoJCXRhYmxlc19maXJz
dCA9IG5vdCB0YWJsZXNfZmlyc3QNCgllbmR9LA0KDQoJe0JyZWFrS2V5ID0g
J0N0cmwrTScsCWFjdGlvbiA9IGZ1bmN0aW9uKG9iaiwga2V5LCBrcGF0aCkN
CgkJbG9jYWwgbXQgPSBrZXkgfj0gbmlsIGFuZCBkZWJ1Zy5nZXRtZXRhdGFi
bGUob2JqW2tleV0pDQoJCXJldHVybiBtdCBhbmQgcHJvY2VzcyhtdCwgJ01F
VEFUQUJMRTogJyAuLiBrcGF0aCkNCgllbmQ7CW5hbWUgPSAnbXQnfSwNCg0K
CXtCcmVha0tleSA9ICdERUxFVEUnLAlhY3Rpb24gPSBmdW5jdGlvbihvYmos
IGtleSwga3BhdGgpDQoJCXJldHVybiBrZXkgfj0gbmlsIGFuZCBlZGl0VmFs
dWUob2JqLCBrZXksIGtwYXRoLCB0cnVlKQ0KCWVuZH0sDQoNCgl7QnJlYWtL
ZXkgPSAnSU5TRVJUJywJYWN0aW9uID0gZnVuY3Rpb24ob2JqLCBrZXksIGtw
YXRoKQ0KCQlpbnNlcnRWYWx1ZShvYmosIGtwYXRoOnN1YigxLCAtKCN0b3N0
cmluZyhrZXkpICsgMikpKQ0KCWVuZH0sDQoNCgl7QnJlYWtLZXkgPSAnRjEn
LAlhY3Rpb24gPSBmdW5jdGlvbigpDQoJCWZhci5NZXNzYWdlKGhlbHAsJ0x1
YSBFeHBsb3JlciAtIEhlbHAnLG5pbCwnbCcpDQoJZW5kfSwNCn0NCg0KLS0g
aWYgTHVhSklUIGlzIHVzZWQsIG1heWJlIHdlIGNhbiBzaG93IHNvbWUgbW9y
ZSBmdW5jdGlvbiBpbmZvDQppZiBqaXQgdGhlbg0KCXRhYmxlLmluc2VydChi
cmtleXMsIAl7QnJlYWtLZXkgPSAnU2hpZnQrRjMnLAlhY3Rpb24gPSBmdW5j
dGlvbihvYmosIGtleSwga3BhdGgpDQoJCWlmIGtleSB+PSBuaWwgYW5kIHR5
cGUob2JqW2tleV0pID09ICdmdW5jdGlvbicgdGhlbg0KCQkJcHJvY2Vzcyhq
aXQudXRpbC5mdW5jaW5mbyhvYmpba2V5XSksICdqaXQudXRpbC5mdW5jaW5m
bzogJyAuLiBrcGF0aCkNCgkJZW5kDQoJZW5kOwluYW1lID0gJ2ppdGluZm8n
fSkNCmVuZA0KDQpmb3IgaT0xLCNicmtleXMgZG8NCglsb2NhbCBiayA9IGJy
a2V5c1tpXTsJaWYgYmsubmFtZSB0aGVuIGJya2V5c1tiay5uYW1lXSA9IGJr
LmFjdGlvbiBlbmQNCmVuZA0KDQppZiBub3QgTWFjcm8gdGhlbiByZXR1cm4g
cHJvY2VzcyBlbmQNCg0KTWFjcm8geyBkZXNjcmlwdGlvbiA9ICJMdWEgRXhw
bG9yZXIiOw0KCWFyZWE9IkNvbW1vbiI7IGtleT0iQ3RybFNoaWZ0RjEyIjsg
YWN0aW9uPWZ1bmN0aW9uKCkNCgkJcHJvY2VzcyhfRywnX0cnKQ0KCQktLXJl
cXVpcmUibGUiKF9HLCdfRycpDQoJZW5kDQp9DQoNCi0tIGl0J3MgcG9zc2li
bGUgdG8gY2FsbCB2aWEgbG06cG9zdCwgZS5nLiBmcm9tIHVzZXIgbWVudToN
Ci0tIGxtOnBvc3QgZG9maWxlKHdpbi5HZXRFbnYoIkZBUlBST0ZJTEUiKS4u
W1tcTWFjcm9zXHNjcmlwdHNcbGUubHVhXV0pKF9HLCdfRycpDQotLSBsbTpw
b3N0IHJlcXVpcmUibGUiKF9HLCdfRycpDQo=
le.lua в дистрибе после тотальной замены msgbox на far.Message содержит ошибки - поправил. [more]
Код: MIME-Version: 1.0
Content-Description: "encoded by MxUUE v0.6.7 (c) 1999-2004 Maxxi"
Content-Type: unknown; charset=us-ascii; name="le.lua"
Content-Transfer-Encoding: Base64
Content-Disposition: attachment; filename="le.lua"
LS0gTHVhIEV4cGxvcmVyIOKAnkFkdmFuY2Vk4oCcLA0KLS0gYmFzZWQgb24g
THVhIEV4cGxvcmVyIGJ5IEVHZXoNCi0tIG1vZGRlZCBieSBKb2huIERvZTog
aHR0cDovL2ZvcnVtLmZhcm1hbmFnZXIuY29tL3ZpZXd0b3BpYy5waHA/Zj02
MCZ0PTc5ODgNCi0tIHJlbGVhc2UgMg0KDQotLVtbDQoJTHVhIEV4cGxvcmVy
DQoNCglFeHBsb3JlIEx1YSBlbnZpcm9ubWVudCBpbiB5b3VyIEZhciBtYW5h
Z2VyDQoNCglBdXRob3I6IEV1Z2VuIEdleiAoRUdlei9odHRwOi8vZm9ydW0u
ZmFybWFuYWdlci5jb20pDQoJdXBkYXRlcywgc3VnZ2VzdGlvbnMsIGV0Yy46
DQoJaHR0cDovL2ZvcnVtLmZhcm1hbmFnZXIuY29tL3ZpZXd0b3BpYy5waHA/
Zj0xNSZ0PTc1MjENCg0KDQoJQkUgQ0FSRUZVTDoNCgkJY2FsbGluZyBzb21l
IGZ1bmN0aW9ucyBjb3VsZCBjYXVzZSBkZWFkbG9ja3MhISENCgkJeW91IHdp
bGwgbmVlZCB0byBraWxsIGZhciBwcm9jZXNzIGluIHN1Y2ggY2FzZXMNCg0K
CWRvIG5vdCBjYWxsIGZ1bmN0aW9ucyBsaWtlIGRlYnVnLmRlYnVnKCkgb3Ig
aW8uKiBmdW5jdGlvbnMNCgl0aGF0IHJlYWQgZnJvbSBzdGRpbiB1bmxlc3Mg
eW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nDQoNCg0KCVRIRSBTT0ZUV0FS
RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO
WSBLSU5ELg0KCUFOWSBVU0UgSVMgQVQgWU9VUiBPV04gUklTSy4NCg0KCURv
IHdoYXQgeW91IHdhbnQgd2l0aCB0aGlzIGNvZGUsIGJ1dCBwbGVhc2UgZG8g
bm90IHJlbW92ZSB0aGlzIGNvbW1lbnQNCglhbmQgd3JpdGUgeW91ciBjaGFu
Z2VzIGRvd24uDQoNCgk8b2Jzb2xldGUgY2hhbmdlbG9nIHJlbW92ZWQ+IC0t
SkQNCg0KCVVQREFURUQ6DQoNCglDaGFuZ2UgIm1zZ2JveCIgdG8gImZhci5N
ZXNzYWdlIi4gQmlnIHRoYW5rcyBKb2huIERvZSBhbmQgQWNlcmJpYyBmb3Ig
aWRlYSEgLyogVmljdG9yVkcgKi8NCg0KXV0NCg0KLS0gYXNzZXJ0KEZhciwg
J1RoaXMgaXMgYSBMdWFNYWNybyBmb3IgRmFyIG1hbmFnZXInKQ0KDQpsb2Nh
bCB1dWlkCT0gd2luLlV1aWQoJzc2NDZmNzYxLTg5NTQtNDJjYS05Y2ZjLWUz
Zjk4YTFjNTRkMycpDQpsb2NhbCBoZWxwCT0gW1sNClRoZXJlIGFyZSBzb21l
IGtleXMgYXZhaWxhYmxlOg0KDQpGMSAgICAgICAgICAgICAgIFNob3cgdGhp
cyBoZWxwDQpGNCAgICAgICAgICAgICAgIEVkaXQgc2VsZWN0ZWQgb2JqZWN0
DQpEZWwgICAgICAgICAgICAgIERlbGV0ZSBzZWxlY3RlZCBvYmplY3QNCklu
cyAgICAgICAgICAgICAgQWRkIGFuIG9iamVjdCB0byBjdXJyZW50IHRhYmxl
DQpDdHJsK00gICAgICAgICAgIFNob3cgbWV0YXRhYmxlDQpDdHJsK0YgICAg
ICAgICAgIFNob3cvaGlkZSBmdW5jdGlvbnMNCkN0cmwrVCAgICAgICAgICAg
VG9nZ2xlIHNvcnQgYnkgdHlwZQ0KDQpmb3IgZnVuY3Rpb25zOg0KDQpFbnRl
ciAgICAgICAgICAgIENhbGwgZnVuY3Rpb24gKHBhcmFtcyBwcm9tcHRlZCkN
CkYzICAgICAgICAgICAgICAgU2hvdyBzb21lIGZ1bmN0aW9uIGluZm8NClNo
aWZ0K0YzICAgICAgICAgU2hvdyBzb21lIGZ1bmN0aW9uIGluZm8gKEx1YUpJ
VCByZXF1aXJlZCkNCkFsdCtGNCAgICAgICAgICAgT3BlbiBmdW5jdGlvbiBk
ZWZpbml0aW9uIChpZiBhdmFpbGFibGUpIGluIGVkaXRvcg0KQ3RybCtVcCAg
ICAgICAgICBTaG93IHVwdmFsdWVzIChlZGl0YWJsZSkNCkN0cmwrRG93biAg
ICAgICAgU2hvdyBlbnZpcm9ubWVudCAoZWRpdGFibGUpDQoNCg0KQ29weSB0
byBjbGlwYm9hcmQ6DQoNCkN0cmwrSW5zICAgICAgICAgdmFsdWUNCkN0cmwr
U2hpZnQrSW5zICAga2V5DQpdXQ0KDQpsb2NhbCBvbWl0ID0ge30NCmxvY2Fs
IGJya2V5cyA9IHt9DQpsb2NhbCB0YWJsZXNfZmlyc3QgPSB0cnVlDQoNCi0t
IGZvcm1hdCB2YWx1ZXMgZm9yIG1lbnUgaXRlbXMgYW5kIG1lc3NhZ2UgYm94
ZXMNCmxvY2FsIGZ1bmN0aW9uIHZhbGZtdCh2YWwsIG1vZGUpDQoJbG9jYWwg
dCA9IHR5cGUodmFsKQ0KCWlmIHQgPT0gJ3N0cmluZycgdGhlbg0KCQlpZiBu
b3QgcGNhbGwod2luLlV0ZjhUb1V0ZjE2LCB2YWwpIHRoZW4gdmFsID0gJzxp
bGxlZ2FsIHZhbHVlPicgZW5kDQoJCXJldHVybiAobW9kZT09J2VkaXQnIGFu
ZCAoJyVxJyk6Zm9ybWF0KHZhbCkgb3INCgkJICAgICAgIChtb2Rlfj0nbGlz
dCcgb3IgdmFsPT0nJyBvciB2YWw6bWF0Y2gnICQnKSBhbmQgJyInIC4uICB2
YWwgLi4gJyInIG9yDQoJCSAgICAgICAgdmFsKSwgdA0KCWVsc2VpZiB0ID09
ICdudW1iZXInIHRoZW4NCgkJcmV0dXJuIChtb2RlPT0iZWRpdCIgYW5kICcw
eCV4IC0tW1sgJXMgXV0nIG9yICcweCUwOHggKCVzKScpOmZvcm1hdCh2YWws
IHZhbCksIHQNCgllbmQNCglyZXR1cm4gdG9zdHJpbmcodmFsKSwgdA0KZW5k
DQoNCi0tIG1ha2UgbWVudSBpdGVtIGZvciBmYXIuTWVudSguLi4pDQpsb2Nh
bCBrZXlfdyA9IDMwDQpsb2NhbCBpdGVtX2ZtdCA9ICgnJSUtJXMuJXNzJyk6
Zm9ybWF0KGtleV93LGtleV93KS4uJyVzJS04cyDilIIlLTI1cycNCmxvY2Fs
IGZ1bmN0aW9uIG1ha2VJdGVtKGtleSwgc3ZhbCwgdnQpDQoJbG9jYWwgayA9
IHZhbGZtdChrZXksJ2xpc3QnKQ0KCWxvY2FsIGJvcmRlciA9IGs6bGVuKCk8
PWtleV93IGFuZCAn4pSCJyBvciAn4oCmJw0KCS0tbG9jYWwgYSxiPXBjYWxs
KGZvcm1hdCwgaywgYm9yZGVyLCB2dCwgc3ZhbCkNCg0KCWlmIHRydWUgdGhl
bg0KCQktLWVycm9yKDEpDQoJCS0tZmFyLlNob3codG9zdHJpbmcoayksIGJv
cmRlciwgdnQsIHN2YWwpDQoJZW5kDQoJcmV0dXJuIHsNCgkJdGV4dCAgICA9
IGl0ZW1fZm10OmZvcm1hdChrLCBib3JkZXIsIHZ0LCBzdmFsKSwNCgkJa2V5
ICAgICA9IGtleSwNCgkJdHlwZSAgICA9IHZ0LA0KCQljaGVja2VkID0gdnQ9
PSd0YWJsZScgYW5kICfiiaEnICAgICAgICAtLeKBnuKJoeKAosK3w7fCu+KA
uuKWug0KCQkgICAgICAgICAgb3IgdnQ9PSdmdW5jdGlvbicgYW5kICfLnCcg
IC0t4bagwqjLncucDQoJfQ0KZW5kDQoNCi0tIGNyZWF0ZSBzb3J0ZWQgbWVu
dSBpdGVtcyB3aXRoIGFzc29jaWF0ZWQga2V5cw0KbG9jYWwgZnVuY3Rpb24g
bWFrZU1lbnVJdGVtcyhvYmopDQoJbG9jYWwgaXRlbXMgPSB7fQ0KDQoJLS0g
Z3JhYiBhbGwgJ3JlYWwnIGtleXMNCglmb3Iga2V5IGluIHBhaXJzKG9iaikg
ZG8NCgkJbG9jYWwgc3ZhbCwgdnQgPSB2YWxmbXQob2JqW2tleV0sJ2xpc3Qn
KQ0KCQlpZiBub3Qgb21pdFt2dF0gdGhlbg0KCQkJdGFibGUuaW5zZXJ0KGl0
ZW1zLCBtYWtlSXRlbShrZXksIHN2YWwsIHZ0KSkNCgkJZW5kDQoJZW5kDQoN
CgktLSBGYXIgdXNlcyBzb21lIHByb3BlcnRpZXMgdGhhdCBpbiBmYWN0IGFy
ZSBmdW5jdGlvbnMgaW4gb2JqLnByb3BlcnRpZXMNCgktLSBidXQgdGhleSBs
b2dpY2FsbHkgYmVsb25nIHRvIHRoZSBvYmplY3QgaXRzZWxmLiBJdCdzIGFs
bCBMdWEgbWFnaWMgOykNCg0KCWxvY2FsIHN1Y2Nlc3MscHJvcHMgPSBwY2Fs
bChmdW5jdGlvbigpcmV0dXJuIG9iai5wcm9wZXJ0aWVzIGVuZCkNCgktLWlm
IG5vdCBzdWNjZXNzIHRoZW4gZmFyLk1lc3NhZ2UocHJvcHMsIkVycm9yIGlu
IF9faW5kZXggbWV0YW1ldGhvZCIsbmlsLCJ3bCIpIGVuZA0KCWlmIHR5cGUo
cHJvcHMpID09ICd0YWJsZScgYW5kIG5vdCByYXdnZXQob2JqLCAncHJvcGVy
dGllcycpIHRoZW4NCgktLWlmIHR5cGUob2JqLnByb3BlcnRpZXMpID09ICd0
YWJsZScgYW5kIG5vdCByYXdnZXQob2JqLCAncHJvcGVydGllcycpIHRoZW4N
CgkJZm9yIGtleSBpbiBwYWlycyhvYmoucHJvcGVydGllcykgZG8NCgkJCWxv
Y2FsIHN2YWwsIHZ0ID0gdmFsZm10KG9ialtrZXldLCdsaXN0JykNCgkJCWlm
IG5vdCBvbWl0W3Z0XSB0aGVuDQoJCQkJdGFibGUuaW5zZXJ0KGl0ZW1zLCBt
YWtlSXRlbShrZXksIHN2YWwsIHZ0KSkNCgkJCWVuZA0KCQllbmQNCgllbmQN
Cg0KLS0JdGFibGUuc29ydChpdGVtcywgZnVuY3Rpb24odjEsIHYyKQlyZXR1
cm4gdjEudGV4dCA8IHYyLnRleHQgZW5kKQ0KLS1bWw0KCXRhYmxlLnNvcnQo
aXRlbXMsIGZ1bmN0aW9uKHYxLCB2MikNCgkJaWYgdGFibGVzX2ZpcnN0IGFu
ZCAodjEudHlwZT09J3RhYmxlJykgfj0gKHYyLnR5cGU9PSd0YWJsZScpIHRo
ZW4NCgkJCXJldHVybiB2MS50eXBlPT0ndGFibGUnDQoJCWVsc2UNCgkJCXJl
dHVybiB2MS50ZXh0IDwgdjIudGV4dA0KCQllbmQNCgllbmQpDQotLV1dDQot
LS1bWw0KCXRhYmxlLnNvcnQoaXRlbXMsIGZ1bmN0aW9uKHYxLCB2MikNCgkJ
aWYgdGFibGVzX2ZpcnN0IGFuZCB2MS50eXBlfj12Mi50eXBlIHRoZW4NCgkJ
CXJldHVybiB2MS50eXBlPT0ndGFibGUnIG9yIHYyLnR5cGV+PSd0YWJsZScg
YW5kIHYxLnR5cGU8djIudHlwZQ0KCQllbHNlDQoJCQlyZXR1cm4gdjEudGV4
dCA8IHYyLnRleHQNCgkJZW5kDQoJZW5kKQ0KLS1dXQ0KCXJldHVybiBpdGVt
cw0KZW5kDQoNCmxvY2FsIGZ1bmN0aW9uIGx1YWV4cF9wcm9tcHQoVGl0bGUs
UHJvbXB0LFNyYykNCglyZXBlYXQNCgkJbG9jYWwgZXhwciA9IGZhci5JbnB1
dEJveCAobmlsLCBUaXRsZTpnc3ViKCcmJywnJiYnLDEpLCBQcm9tcHQsDQoJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlLCBTcmMsIG5pbCwg
bmlsLCBmYXIuRmxhZ3MuRklCX0VOQUJMRUVNUFRZKQ0KCQlpZiBub3QgZXhw
ciB0aGVuIHJldHVybiBlbmQNCgkJbG9jYWwgZixlcnIgPSBsb2Fkc3RyaW5n
KCdyZXR1cm4gJy4uZXhwcikNCgkJaWYgZiB0aGVuDQoJCQlsb2NhbCByZXMg
PSB7cGNhbGwoZil9DQoJCQlpZiByZXNbMV0gdGhlbgl0YWJsZS5yZW1vdmUo
cmVzLDEpOwlyZXR1cm4gcmVzLGV4cHINCgkJCWVsc2UJZmFyLk1lc3NhZ2Uo
cmVzWzJdLCdFcnJvcicsbmlsLCd3JykNCgkJCWVuZA0KCQllbHNlDQoJCQlm
YXIuTWVzc2FnZShlcnIsJ0Vycm9yIGluIGV4cHJlc3Npb24nLG5pbCwnd2wn
KQ0KCQllbmQNCgl1bnRpbCBmYWxzZQ0KZW5kDQoNCi0tIGVkaXQgb3IgcmVt
b3ZlIG9iamVjdCBhdCBvYmpba2V5XQ0KbG9jYWwgZnVuY3Rpb24gZWRpdFZh
bHVlKG9iaiwga2V5LCB0aXRsZSwgZGVsKQ0KCWlmIGRlbCB0aGVuDQoJCWlm
IDEgPT0gZmFyLk1lc3NhZ2UoKCclcyBpcyBhICVzLCBkbyB5b3Ugd2FudCB0
byByZW1vdmUgaXQ/Jyk6Zm9ybWF0KHZhbGZtdChrZXkpLA0KCQkJdHlwZShv
Ympba2V5XSk6dXBwZXIoKSksDQoJCQknUkVNT1ZFOiAnIC4uIHRpdGxlLA0K
CQkJJztZZXNObycsDQoJCQkndycpIHRoZW4NCgkJCW9ialtrZXldID0gbmls
DQoJCWVuZA0KCWVsc2UNCgkJbG9jYWwgdiwgdCA9IHZhbGZtdChvYmpba2V5
XSwgImVkaXQiKQ0KCQlpZiB0ID09ICd0YWJsZScgb3IgdCA9PSAnZnVuY3Rp
b24nIHRoZW4JdiA9ICcnCWVuZA0KCQlsb2NhbCBwcm9tcHQgPSAoJyVzIGlz
IGEgJXMsIHR5cGUgbmV3IHZhbHVlIGFzIEx1YSBjb2RlJyk6Zm9ybWF0KHZh
bGZtdChrZXkpLHQ6dXBwZXIoKSkNCgkJbG9jYWwgcmVzID0gbHVhZXhwX3By
b21wdCgnRURJVDogJyAuLiB0aXRsZSwgcHJvbXB0LCB2KQ0KCQlvYmpba2V5
XSA9IHJlcyBhbmQgcmVzWzFdIG9yIG9ialtrZXldDQoJZW5kDQplbmQNCg0K
LS0gYWRkIG5ldyBlbGVtZW50IHRvIG9iag0KbG9jYWwgZnVuY3Rpb24gaW5z
ZXJ0VmFsdWUob2JqLCB0aXRsZSkNCglsb2NhbCByZXMgPSBsdWFleHBfcHJv
bXB0KCdJTlNFUlQ6ICcgLi4gdGl0bGUsDQoJICAgICAgICAgICAgICAgICAg
ICAgICAgICAndHlwZSB0aGUga2V5IGFuZCB2YWx1ZSBjb21tYSBzZXBhcmF0
ZWQgYXMgTHVhIGNvZGUnKQ0KCWlmIHJlcyB0aGVuDQoJCWxvY2FsIGssIHYg
PSB1bnBhY2socmVzKQ0KCQlpZiBrfj1uaWwgdGhlbglvYmpba10gPSB2CWVu
ZA0KCWVuZA0KZW5kDQoNCmxvY2FsIGZ1bmN0aW9uIGNvbmNhdCh0LGRlbGlt
KQ0KCWxvY2FsIHMgPSB0b3N0cmluZyh0WzFdKQ0KCWZvciBpPTIsI3QgZG8g
cyA9IHMuLmRlbGltLi50b3N0cmluZyh0W2ldKSBlbmQNCglyZXR1cm4gcw0K
ZW5kDQoNCmxvY2FsIGZ1bmN0aW9uIGdldGZQYXJhbXNOYW1lcyhmKQ0KCWlm
IG5vdCBqaXQgdGhlbglyZXR1cm4gJy4uLicJZW5kDQoJbG9jYWwgaW5mbyA9
IGRlYnVnLmdldGluZm8oZikNCglsb2NhbCBwYXJhbXMgPSB7fQ0KCWZvciBp
PTEsaW5mby5ucGFyYW1zIG9yIDEwMDAgZG8NCgkJbG9jYWwgayA9IGRlYnVn
LmdldGxvY2FsIChmLCBpKQ0KCQlpZiBub3QgayB0aGVuCXJldHVybiBwYXJh
bXMsICNwYXJhbXMsIGVycm9yKCk7CWVuZCAtLWltcG9zc2libGUgaW4gbHVh
IDUuMiBvciBsdWFqaXQgMg0KCQlwYXJhbXNbaV0gPSBrDQoJZW5kDQoJaWYg
aW5mby5pc3ZhcmFyZyB0aGVuCXBhcmFtc1sjcGFyYW1zKzFdID0gJy4uLicJ
ZW5kDQoJbG9jYWwgcGFyYW1zdHIgPSAjcGFyYW1zPjAgYW5kIHRhYmxlLmNv
bmNhdChwYXJhbXMsJywgJykgb3IgJzxub25lPicNCglyZXR1cm4gcGFyYW1z
dHIsIHBhcmFtcw0KZW5kDQoNCi0tIHNob3cgYSBtZW51IHdob3NlIGl0ZW1z
IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1lbWJlcnMgb2YgZ2l2ZW4gb2Jq
ZWN0DQpsb2NhbCBmdW5jdGlvbiBwcm9jZXNzKG9iaiwgdGl0bGUsIGFjdGlv
bikNCgl0aXRsZSA9IHRpdGxlIG9yICcnDQoJaWYgYWN0aW9uIHRoZW4gYnJr
ZXlzW2FjdGlvbl0oe29ian0sIDEsIHRpdGxlKTsJcmV0dXJuCWVuZA0KDQoJ
bG9jYWwgaXRlbXMsIG1wcm9wcyA9IHt9LCB7SWQgPSB1dWlkLCBCb3R0b20g
PSAnRjEsIEYzLCBGNCwgRGVsLCBDdHJsK00nLA0KCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZsYWdzPXtGTUVOVV9TSE9XQU1QRVJTQU5EPTEsRk1F
TlVfV1JBUE1PREU9MX19LS0sRk1FTlVfQVVUT0hJR0hMSUdIVD0xfX0NCgls
b2NhbCBvdHlwZSA9IHR5cGUob2JqKQ0KCWxvY2FsIGl0ZW0sIGluZGV4DQoN
CgktLSBzb21lIG1lbWJlciB0eXBlcywgbmVlZCBzcGVjaWZpYyBiZWhhdmlv
cjoNCgktLSB0YWJsZXMgYXJlIHN1Ym1lbnVzDQoNCgktLSBmdW5jdGlvbnMg
Y2FuIGJlIGNhbGxlZA0KCWlmIG90eXBlID09ICdmdW5jdGlvbicgdGhlbg0K
LS1bWw0KCQlsb2NhbCBhcmdzLGFyZ3N0cg0KCQkgID0gbHVhZXhwX3Byb21w
dCgoJ0NBTEw6ICVzICglcyknKTpmb3JtYXQodGl0bGUsZ2V0ZlBhcmFtc05h
bWVzKG9iaikpLA0KCQkgICAgICAgICAgICAgICAgICAgJ1R5cGUgYXJndW1l
bnRzIGFzIEx1YSBjb2RlIG9yIGxlYXZlIGVtcHR5OicpDQotLV1dDQotLS1b
Ww0KCQlsb2NhbCBhcmdzLGFyZ3N0ciA9IGx1YWV4cF9wcm9tcHQoJ0NBTEw6
Jy4udGl0bGUsDQoJCSAgICAgICAgICAgICAgICAgICAgKCdhcmd1bWVudHM6
ICVzICh0eXBlIGFzIEx1YSBjb2RlIG9yIGxlYXZlIGVtcHR5KScpDQoJCSAg
ICAgICAgICAgICAgICAgICAgIDpmb3JtYXQoZ2V0ZlBhcmFtc05hbWVzKG9i
aikpKQ0KLS1dXQ0KCQlpZiBhcmdzIHRoZW4NCgkJCS0tIG92ZXJ3cml0ZSB0
aGUgZnVuY3Rpb24gb2JqZWN0IHdpdGggaXRzIHJldHVybiB2YWx1ZXMNCgkJ
CWxvY2FsIHJlcyA9IHtwY2FsbChvYmosIHVucGFjayhhcmdzKSl9DQoJCQlp
ZiByZXNbMV0gdGhlbg0KCQkJCXRhYmxlLnJlbW92ZShyZXMsMSkNCgkJCQlv
YmogPSByZXMNCgkJCQl0aXRsZSA9ICgnJXMoJXMpJyk6Zm9ybWF0KHRpdGxl
LGFyZ3N0cikNCgkJCWVsc2UNCgkJCQlmYXIuTWVzc2FnZSgoW1sNCmZ1bmN0
aW9uOiAgJXMNCmFyZ3VtZW50czogJXMNCnZhbHVlczogICAgJXMNCg0KJXNd
XSk6Zm9ybWF0KHRpdGxlLGFyZ3N0cixjb25jYXQoYXJncywnLCAnKSxyZXNb
Ml0pLCdFcnJvcicsbmlsLCd3bCcpDQoJCQkJcmV0dXJuDQoJCQllbmQNCgkJ
ZWxzZQ0KCQkJcmV0dXJuDQoJCWVuZA0KDQoJLS0gb3RoZXIgdmFsdWVzIGFy
ZSBzaW1wbHkgZGlzcGxheWVkIGluIGEgbWVzc2FnZSBib3gNCgllbHNlaWYg
b3R5cGUgfj0gJ3RhYmxlJyB0aGVuDQoJCWxvY2FsIHZhbHVlID0gdmFsZm10
KG9iaiwidmlldyIpDQoJCWZhci5NZXNzYWdlKHZhbHVlLCB0aXRsZTpnc3Vi
KCcmJywnJiYnLDEpLCBuaWwsIHZhbHVlOm1hdGNoJ1xuJyBhbmQgJ2wnIG9y
ICcnKQ0KCQlyZXR1cm4NCgllbmQNCg0KCS0tIHNob3cgdGhpcyBtZW51IGxl
dmVsIGFnYWluIGFmdGVyIGVhY2ggcmV0dXJuIGZyb20gYSBzdWJtZW51L2Z1
bmN0aW9uIGNhbGwgLi4uDQoJcmVwZWF0DQoJCWl0ZW1zID0gbWFrZU1lbnVJ
dGVtcyhvYmopDQoJCW1wcm9wcy5UaXRsZSA9IHRpdGxlIC4uICcgICgnIC4u
ICNpdGVtcyAuLiAnKScgLi4gKG9taXRbJ2Z1bmN0aW9uJ10gYW5kICcqJyBv
ciAnJykNCg0KCQlpdGVtLCBpbmRleCA9IGZhci5NZW51KG1wcm9wcywgaXRl
bXMsIGJya2V5cykNCgkJbXByb3BzLlNlbGVjdEluZGV4ID0gaW5kZXgNCg0K
CQktLSBzaG93IHN1Ym1lbnUvY2FsbCBmdW5jdGlvbiAuLi4NCgkJaWYgaXRl
bSB0aGVuDQoJCQlsb2NhbCBrZXkgPSBpdGVtLmtleSBvciAoaW5kZXggPiAw
IGFuZCBpdGVtc1tpbmRleF0ua2V5KQ0KCQkJaWYgaXRlbS5rZXkgfj0gbmls
IHRoZW4NCgkJCQlwcm9jZXNzKG9ialtrZXldLCB0aXRsZSAuLiAnLicgLi4g
dG9zdHJpbmcoa2V5KSkNCgkJCWVsc2VpZiBpdGVtLmFjdGlvbiB0aGVuDQoJ
CQkJaWYgImJyZWFrIj09aXRlbS5hY3Rpb24ob2JqLCBrZXksICh0aXRsZSAu
LiAnLicgLi4gdG9zdHJpbmcoa2V5KSkpIHRoZW4JcmV0dXJuCWVuZA0KCQkJ
ZW5kDQoJCWVuZA0KCQktLSB1bnRpbCB0aGUgdXNlciBpcyBib3JlZCBhbmQg
Z29lcyBiYWNrIDspDQoJdW50aWwgbm90IGl0ZW0NCmVuZA0KDQpsb2NhbCBm
dW5jdGlvbiBnZXRBbGxVcHZhbHVlcyhmKQ0KCWxvY2FsIHVwdmFsdWVzID0g
e30NCglmb3IgaT0xLDEwMDAgZG8NCgkJbG9jYWwgayx2ID0gZGVidWcuZ2V0
dXB2YWx1ZSAoZiwgaSkNCgkJaWYgbm90IGsgdGhlbglyZXR1cm4gdXB2YWx1
ZXMsIGktMQllbmQNCgkJdXB2YWx1ZXNba10gPSB2DQoJZW5kDQplbmQNCg0K
bG9jYWwgZnVuY3Rpb24gc3luY1VwdmFsdWVzKGYsdCxuKQ0KCWZvciBpPW4s
MSwtMSBkbw0KCQlsb2NhbCBrLHYgPSBkZWJ1Zy5nZXR1cHZhbHVlIChmLCBp
KQ0KCQlpZiB0W2tdfj12IHRoZW4NCgkJCWFzc2VydChrID09IGRlYnVnLnNl
dHVwdmFsdWUgKGYsIGksIHRba10pKQ0KCQllbmQNCgllbmQNCmVuZA0KDQps
b2NhbCBmdW5jdGlvbiBnZXRBbGxMb2NhbHMobGV2ZWwpDQoJbG9jYWwgbG9j
YWxzID0ge30NCglmb3IgaT0xLDEwMDAgZG8NCgkJbG9jYWwgayx2ID0gZGVi
dWcuZ2V0bG9jYWwgKGxldmVsKzEsIGkpDQoJCWlmIG5vdCBrIHRoZW4JcmV0
dXJuIGxvY2FscywgaS0xCWVuZA0KCQlsb2NhbHNba10gPSB2DQoJZW5kDQpl
bmQNCg0KbG9jYWwgZnVuY3Rpb24gc3luY0xvY2FscyhsZXZlbCx0LG4pDQoJ
bGV2ZWwgPSBsZXZlbCArIDENCglmb3IgaT1uLDEsLTEgZG8NCgkJbG9jYWwg
ayx2ID0gZGVidWcuZ2V0bG9jYWwgKGxldmVsLCBpKQ0KCQlpZiB0W2tdfj12
IHRoZW4NCgkJCWFzc2VydChrID09IGRlYnVnLnNldGxvY2FsIChsZXZlbCwg
aSwgdFtrXSkpDQoJCWVuZA0KCWVuZA0KZW5kDQoNCmxvY2FsIGZ1bmN0aW9u
IGdldFZhcmFyZyhsZXZlbCkNCglsb2NhbCB2YXJhcmcgPSB7fQ0KCWZvciBp
PTEsMTAwMCBkbw0KCQlsb2NhbCBrLHYgPSBkZWJ1Zy5nZXRsb2NhbCAobGV2
ZWwrMSwgLWkpDQoJCWlmIG5vdCBrIHRoZW4JcmV0dXJuIHZhcmFyZwllbmQt
LSgqdmFyYXJnKQ0KCQl2YXJhcmdbaV0gPSB2DQoJZW5kDQplbmQNCg0KbG9j
YWwgZnVuY3Rpb24gc3luY1ZhcmFyZyhsZXZlbCx0KQ0KCWZvciBpPTEsI3Qg
ZG8NCgkJbG9jYWwgayx2ID0gZGVidWcuZ2V0bG9jYWwgKGxldmVsKzEsIC1p
KQ0KCQlpZiB2fj10W2ldIHRoZW4JZGVidWcuc2V0bG9jYWwgKGxldmVsKzEs
IC1pLCB0W2ldKQllbmQNCgllbmQNCmVuZA0KDQpsb2NhbCBmdW5jdGlvbiBn
ZXRMb2NhbHNBbmRQYXJhbXMobGV2ZWwpDQoJbG9jYWwgbG9jYWxzLG4gPSBn
ZXRBbGxMb2NhbHMobGV2ZWwrMSkNCglsb2NhbCBpbmZvID0gZGVidWcuZ2V0
aW5mbyhsZXZlbCsxKQ0KCWxvY2FsIHZhcmFyZyA9IGdldFZhcmFyZyhsZXZl
bCsxKQ0KCXZhcmFyZyA9IHZhcmFyZ1sxXSBhbmQgdmFyYXJnDQoJbG9jYWxz
WycoKnZhcmFyZyknXSA9IGxvY2Fsc1snKCp2YXJhcmcpJ10gb3IgdmFyYXJn
IG9yIG5pbA0KCWxvY2FsIGluZm8gPSBkZWJ1Zy5nZXRpbmZvKGxldmVsKzEp
DQoJbG9jYWwgbmFtZSA9ICgnKCpmdW5jOiAlcyknKTpmb3JtYXQoaW5mby5u
YW1lIG9yICc8bm9uYW1lPicpDQoJbG9jYWxzW25hbWVdID0gbG9jYWxzW25h
bWVdIG9yIGluZm8uZnVuYw0KCXJldHVybiBsb2NhbHMsbix2YXJhcmcNCmVu
ZA0KDQpsb2NhbCBmdW5jdGlvbiBzaG93TG9jYWxzKGxldmVsLHNoaWZ0KQ0K
CS0tZmFyLlNob3cobGV2ZWwsc2hpZnQpDQoJaWYgbm90IHNoaWZ0IHRoZW4N
CgkJc2hpZnQgPSAwDQoJCWZvciBpID0gMSwxMDAwIGRvDQoJCQlsb2NhbCBp
bmZvID0gZGVidWcuZ2V0aW5mbyhpLCdmJykNCgkJCWlmIG5vdCBpbmZvIHRo
ZW4JYnJlYWsJZW5kDQoJCQlpZiBpbmZvLmZ1bmM9PXByb2Nlc3MgdGhlbglz
aGlmdCA9IGkJZW5kDQoJCWVuZA0KCQlpZiBzaGlmdD45MDAgdGhlbglyZXR1
cm4JZW5kDQoJZW5kDQoJbGV2ZWwgPSBsZXZlbCArIHNoaWZ0DQoJbG9jYWwg
aW5mbyA9IGRlYnVnLmdldGluZm8obGV2ZWwsJycpDQoJaWYgbm90IGluZm8g
dGhlbgltZi5iZWVwKCkgcmV0dXJuCWVuZA0KCWxvY2FsIGxvY2FscyxuLHZh
cmFyZyA9IGdldExvY2Fsc0FuZFBhcmFtcyhsZXZlbCkNCglpZiBuPjAgb3Ig
dmFyYXJnICB0aGVuDQoJCXByb2Nlc3MobG9jYWxzLCAoJ2xvY2FscyBbJWRd
OiAlcycpOmZvcm1hdChsZXZlbC1zaGlmdCxpbmZvLm5hbWUgb3IgJ21haW4g
Y2h1bmsnKSkNCgkJc3luY0xvY2FscyhsZXZlbCxsb2NhbHMsbikNCgkJaWYg
dmFyYXJnIHRoZW4gc3luY1ZhcmFyZyhsZXZlbCx2YXJhcmcpIGVuZA0KCQly
ZXR1cm4gJ2JyZWFrJw0KCWVuZA0KZW5kDQoNCmJya2V5cyA9IHsNCgl7QnJl
YWtLZXkgPSAnRjknLAlhY3Rpb24gPSBmdW5jdGlvbihpbmZvKQ0KCQlwcm9j
ZXNzKGRlYnVnLmdldHJlZ2lzdHJ5KCksICdkZWJ1Zy5nZXRyZWdpc3RyeTon
KQ0KCWVuZDsJbmFtZSA9ICdyZWdpc3RyeSd9LA0KDQoJe0JyZWFrS2V5ID0g
J0N0cmwrMScsCWFjdGlvbiA9IGZ1bmN0aW9uKCkJcmV0dXJuIHNob3dMb2Nh
bHMoMSkJZW5kOwluYW1lID0gJ2xvY2Fscyd9LA0KCXtCcmVha0tleSA9ICdD
dHJsKzInLAlhY3Rpb24gPSBmdW5jdGlvbigpCXJldHVybiBzaG93TG9jYWxz
KDIpCWVuZDsJbmFtZSA9ICdsb2NhbHMyJ30sDQoJe0JyZWFrS2V5ID0gJ0N0
cmwrMycsCWFjdGlvbiA9IGZ1bmN0aW9uKCkJcmV0dXJuIHNob3dMb2NhbHMo
MykJZW5kOwluYW1lID0gJ2xvY2FsczMnfSwNCgl7QnJlYWtLZXkgPSAnQ3Ry
bCs0JywJYWN0aW9uID0gZnVuY3Rpb24oKQlyZXR1cm4gc2hvd0xvY2Fscyg0
KQllbmQ7CW5hbWUgPSAnbG9jYWxzNCd9LA0KCXtCcmVha0tleSA9ICdDdHJs
KzUnLAlhY3Rpb24gPSBmdW5jdGlvbigpCXJldHVybiBzaG93TG9jYWxzKDUp
CWVuZDsJbmFtZSA9ICdsb2NhbHM1J30sDQoJe0JyZWFrS2V5ID0gJ0N0cmwr
NicsCWFjdGlvbiA9IGZ1bmN0aW9uKCkJcmV0dXJuIHNob3dMb2NhbHMoNikJ
ZW5kOwluYW1lID0gJ2xvY2FsczYnfSwNCgl7QnJlYWtLZXkgPSAnQ3RybCs3
JywJYWN0aW9uID0gZnVuY3Rpb24oKQlyZXR1cm4gc2hvd0xvY2Fscyg3KQll
bmQ7CW5hbWUgPSAnbG9jYWxzNyd9LA0KCXtCcmVha0tleSA9ICdDdHJsKzgn
LAlhY3Rpb24gPSBmdW5jdGlvbigpCXJldHVybiBzaG93TG9jYWxzKDgpCWVu
ZDsJbmFtZSA9ICdsb2NhbHM4J30sDQoJe0JyZWFrS2V5ID0gJ0N0cmwrOScs
CWFjdGlvbiA9IGZ1bmN0aW9uKCkJcmV0dXJuIHNob3dMb2NhbHMoOSkJZW5k
OwluYW1lID0gJ2xvY2FsczknfSwNCgl7QnJlYWtLZXkgPSAnQ3RybCswJywJ
YWN0aW9uID0gZnVuY3Rpb24oKQlyZXR1cm4gc2hvd0xvY2FscygwKQllbmQ7
fSwNCgl7QnJlYWtLZXkgPSAnQ3RybCtHJywJYWN0aW9uID0gZnVuY3Rpb24o
KQlwcm9jZXNzKF9HLCdfRycpOwlyZXR1cm4gImJyZWFrIgllbmR9LA0KDQoJ
e0JyZWFrS2V5ID0gJ0N0cmwrSW5zZXJ0JywJYWN0aW9uID0gZnVuY3Rpb24o
b2JqLCBrZXkpDQoJCWZhci5Db3B5VG9DbGlwYm9hcmQgKCh2YWxmbXQob2Jq
W2tleV0pKSkNCgllbmR9LA0KDQoJe0JyZWFrS2V5ID0gJ0N0cmxTaGlmdCtJ
bnNlcnQnLAlhY3Rpb24gPSBmdW5jdGlvbihvYmosIGtleSkNCgkJZmFyLkNv
cHlUb0NsaXBib2FyZCAoKHZhbGZtdChrZXkpKSkNCgllbmR9LA0KDQoJe0Jy
ZWFrS2V5ID0gJ0N0cmwrVXAnLAlhY3Rpb24gPSBmdW5jdGlvbihvYmosIGtl
eSwga3BhdGgpDQoJCWxvY2FsIGYgPSBvYmpba2V5XQ0KCQlpZiB0eXBlKGYp
ID09ICdmdW5jdGlvbicgdGhlbg0KCQkJbG9jYWwgdCxuID0gZ2V0QWxsVXB2
YWx1ZXMoZikNCgkJCWlmIG4+MCB0aGVuDQoJCQkJcHJvY2Vzcyh0LCAndXB2
YWx1ZXM6ICcgLi4ga3BhdGgpDQoJCQkJc3luY1VwdmFsdWVzKGYsdCxuKQ0K
CQkJZW5kDQoJCWVuZA0KCWVuZDsJbmFtZSA9ICd1cHZhbHVlcyd9LA0KDQoJ
e0JyZWFrS2V5ID0gJ0N0cmwrRG93bicsCWFjdGlvbiA9IGZ1bmN0aW9uKG9i
aiwga2V5LCBrcGF0aCkNCgkJbG9jYWwgZiA9IG9ialtrZXldOyBsb2NhbCB0
ID0gdHlwZShmKQ0KCQlpZiB0PT0nZnVuY3Rpb24nIG9yIHQ9PSd1c2VyZGF0
YScgb3IgdD09J3RocmVhZCcgdGhlbg0KCQkJbG9jYWwgZW52ID0gZGVidWcu
Z2V0ZmVudihmKQ0KCQkJaWYgKGVudn49X0cgb3IgMT09ZmFyLk1lc3NhZ2Uo
J19HJywnU2hvdyBnbG9iYWwgZW52aXJvbm1lbnQ/JywnO09rQ2FuY2VsJykp
DQoJCQkJICBhbmQgbmV4dChlbnYpIHRoZW4NCgkJCQlwcm9jZXNzKGVudiwg
J2dldGZlbnY6ICcgLi4ga3BhdGgpDQoJCQllbmQNCgkJZW5kDQoJZW5kOwlu
YW1lID0gJ2Vudid9LA0KDQoJe0JyZWFrS2V5ID0gJ0N0cmwrUmlnaHQnLAlh
Y3Rpb24gPSBmdW5jdGlvbihvYmosIGtleSwga3BhdGgpDQoJCWxvY2FsIGYg
PSBvYmpba2V5XQ0KCQlpZiB0eXBlKGYpID09ICdmdW5jdGlvbicgdGhlbg0K
CQkJbG9jYWwgYXJncyx0ID0gZ2V0ZlBhcmFtc05hbWVzKGYpDQoJCQlpZiBh
cmdzOmxlbigpPjAgdGhlbg0KCQkJCXByb2Nlc3ModCwgJ3BhcmFtcyAoZik6
ICcgLi4ga3BhdGgpDQoJCQkJbG9jYWwgbmFtZSA9IGRlYnVnLmdldGluZm8o
ZikubmFtZQ0KCQkJCS0tZmFyLk1lc3NhZ2UoKCclcyAoJXMpJyk6Zm9ybWF0
KG5hbWUgb3Iga3BhdGgsYXJncyksICdwYXJhbXMnKQ0KCQkJZW5kDQoJCWVu
ZA0KCWVuZDsJbmFtZSA9ICdwYXJhbXMnfSwNCg0KCXtCcmVha0tleSA9ICdB
bHQrRjQnLAlhY3Rpb24gPSBmdW5jdGlvbihvYmosIGtleSwga3BhdGgpDQoJ
CWxvY2FsIGYgPSBvYmpba2V5XQ0KCQlpZiB0eXBlKGYpID09ICdmdW5jdGlv
bicgdGhlbg0KCQkJbG9jYWwgaW5mbyA9IGRlYnVnLmdldGluZm8oZiwnUycp
DQoJCQlsb2NhbCBmaWxlbmFtZSA9IGluZm8uc291cmNlOm1hdGNoKCJeQCgu
KykkIikNCgkJCWlmIGZpbGVuYW1lIHRoZW4NCgkJCQllZGl0b3IuRWRpdG9y
KGZpbGVuYW1lLG5pbCxuaWwsbmlsLG5pbCxuaWwsbmlsLGluZm8ubGluZWRl
ZmluZWQpDQoJCQllbmQNCgkJZW5kDQoJZW5kOyBuYW1lID0gJ2VkaXQnfSwN
Cg0KCXtCcmVha0tleSA9ICdGMycsCWFjdGlvbiA9IGZ1bmN0aW9uKG9iaiwg
a2V5LCBrcGF0aCkNCgkJbG9jYWwgZiA9IG9ialtrZXldDQoJCWlmIHR5cGUo
ZikgPT0gJ2Z1bmN0aW9uJyB0aGVuDQoJCQlwcm9jZXNzKGRlYnVnLmdldGlu
Zm8oZiksICdkZWJ1Zy5nZXRpbmZvOiAnIC4uIGtwYXRoKQ0KCQllbHNlaWYg
dHlwZShmKSA9PSAndGhyZWFkJyB0aGVuDQoJCQlmYXIuTWVzc2FnZShkZWJ1
Zy50cmFjZWJhY2soZiwibGV2ZWwgMCIsMCksJ2RlYnVnLnRyYWNlYmFjazog
JyAuLiBrcGF0aCxuaWwsJ2wnKQ0KCQkJLS1mYXIuU2hvdygnZGVidWcudHJh
Y2ViYWNrOiAnIC4uIGtwYXRoIC4uIGRlYnVnLnRyYWNlYmFjayhmLCIsIGxl
dmVsIDAiLDApKQ0KCQllbmQNCgllbmQ7CW5hbWUgPSAnaW5mbyd9LA0KDQoJ
e0JyZWFrS2V5ID0gJ0Y0JywJYWN0aW9uID0gZnVuY3Rpb24ob2JqLCBrZXks
IGtwYXRoKQ0KCQlyZXR1cm4ga2V5IH49IG5pbCBhbmQgZWRpdFZhbHVlKG9i
aiwga2V5LCBrcGF0aCkNCgllbmR9LA0KDQoJe0JyZWFrS2V5ID0gJ0N0cmwr
RicsCWFjdGlvbiA9IGZ1bmN0aW9uKCkNCgkJb21pdFsnZnVuY3Rpb24nXSA9
IG5vdCBvbWl0WydmdW5jdGlvbiddDQoJZW5kfSwNCg0KCXtCcmVha0tleSA9
ICdDdHJsK1QnLAlhY3Rpb24gPSBmdW5jdGlvbigpDQoJCXRhYmxlc19maXJz
dCA9IG5vdCB0YWJsZXNfZmlyc3QNCgllbmR9LA0KDQoJe0JyZWFrS2V5ID0g
J0N0cmwrTScsCWFjdGlvbiA9IGZ1bmN0aW9uKG9iaiwga2V5LCBrcGF0aCkN
CgkJbG9jYWwgbXQgPSBrZXkgfj0gbmlsIGFuZCBkZWJ1Zy5nZXRtZXRhdGFi
bGUob2JqW2tleV0pDQoJCXJldHVybiBtdCBhbmQgcHJvY2VzcyhtdCwgJ01F
VEFUQUJMRTogJyAuLiBrcGF0aCkNCgllbmQ7CW5hbWUgPSAnbXQnfSwNCg0K
CXtCcmVha0tleSA9ICdERUxFVEUnLAlhY3Rpb24gPSBmdW5jdGlvbihvYmos
IGtleSwga3BhdGgpDQoJCXJldHVybiBrZXkgfj0gbmlsIGFuZCBlZGl0VmFs
dWUob2JqLCBrZXksIGtwYXRoLCB0cnVlKQ0KCWVuZH0sDQoNCgl7QnJlYWtL
ZXkgPSAnSU5TRVJUJywJYWN0aW9uID0gZnVuY3Rpb24ob2JqLCBrZXksIGtw
YXRoKQ0KCQlpbnNlcnRWYWx1ZShvYmosIGtwYXRoOnN1YigxLCAtKCN0b3N0
cmluZyhrZXkpICsgMikpKQ0KCWVuZH0sDQoNCgl7QnJlYWtLZXkgPSAnRjEn
LAlhY3Rpb24gPSBmdW5jdGlvbigpDQoJCWZhci5NZXNzYWdlKGhlbHAsJ0x1
YSBFeHBsb3JlciAtIEhlbHAnLG5pbCwnbCcpDQoJZW5kfSwNCn0NCg0KLS0g
aWYgTHVhSklUIGlzIHVzZWQsIG1heWJlIHdlIGNhbiBzaG93IHNvbWUgbW9y
ZSBmdW5jdGlvbiBpbmZvDQppZiBqaXQgdGhlbg0KCXRhYmxlLmluc2VydChi
cmtleXMsIAl7QnJlYWtLZXkgPSAnU2hpZnQrRjMnLAlhY3Rpb24gPSBmdW5j
dGlvbihvYmosIGtleSwga3BhdGgpDQoJCWlmIGtleSB+PSBuaWwgYW5kIHR5
cGUob2JqW2tleV0pID09ICdmdW5jdGlvbicgdGhlbg0KCQkJcHJvY2Vzcyhq
aXQudXRpbC5mdW5jaW5mbyhvYmpba2V5XSksICdqaXQudXRpbC5mdW5jaW5m
bzogJyAuLiBrcGF0aCkNCgkJZW5kDQoJZW5kOwluYW1lID0gJ2ppdGluZm8n
fSkNCmVuZA0KDQpmb3IgaT0xLCNicmtleXMgZG8NCglsb2NhbCBiayA9IGJy
a2V5c1tpXTsJaWYgYmsubmFtZSB0aGVuIGJya2V5c1tiay5uYW1lXSA9IGJr
LmFjdGlvbiBlbmQNCmVuZA0KDQppZiBub3QgTWFjcm8gdGhlbiByZXR1cm4g
cHJvY2VzcyBlbmQNCg0KTWFjcm8geyBkZXNjcmlwdGlvbiA9ICJMdWEgRXhw
bG9yZXIiOw0KCWFyZWE9IkNvbW1vbiI7IGtleT0iQ3RybFNoaWZ0RjEyIjsg
YWN0aW9uPWZ1bmN0aW9uKCkNCgkJcHJvY2VzcyhfRywnX0cnKQ0KCQktLXJl
cXVpcmUibGUiKF9HLCdfRycpDQoJZW5kDQp9DQoNCi0tIGl0J3MgcG9zc2li
bGUgdG8gY2FsbCB2aWEgbG06cG9zdCwgZS5nLiBmcm9tIHVzZXIgbWVudToN
Ci0tIGxtOnBvc3QgZG9maWxlKHdpbi5HZXRFbnYoIkZBUlBST0ZJTEUiKS4u
W1tcTWFjcm9zXHNjcmlwdHNcbGUubHVhXV0pKF9HLCdfRycpDQotLSBsbTpw
b3N0IHJlcXVpcmUibGUiKF9HLCdfRycpDQo=
Alexyz21
Цитата:
Умеет.
Цитата:
Это две разные библиотеки, разрабатывавшиеся разными людьми независимо друг от друга. (Лично я никогда не пользуюсь функцией msgbox).
Цитата:
far.Message не умеет выравнивать влево
Умеет.
Цитата:
Разработчикам - зачем нужна чехарда параметров?
msgbox(title,msg,...)
far.Message(msg,title,...)
Это две разные библиотеки, разрабатывавшиеся разными людьми независимо друг от друга. (Лично я никогда не пользуюсь функцией msgbox).
Alexyz21
Погляжу. Я в этот скрипт давно не заглядывал и вероятно там нужны поправки...
Погляжу. Я в этот скрипт давно не заглядывал и вероятно там нужны поправки...
VictorVG4
приложил исправленный вариант в предыдущем сообщении
приложил исправленный вариант в предыдущем сообщении
Alexyz21
Только форум его по своему испохабил. Походу лучше его на http://pastebin.com/ положить - он хоть не перекодирует текст по своему усмотрению.
Только форум его по своему испохабил. Походу лучше его на http://pastebin.com/ положить - он хоть не перекодирует текст по своему усмотрению.
VictorVG4
Обновил - объехал кривизну доски.
Обновил - объехал кривизну доски.
Alexyz21
А толку коли MIME шапка штука лишняя. Декодировал демоном, но ругани с его стороны хватило на пять таких файлов.
Добавлено:
Подчистил повреждённые комментарии, залил на http://pastebin.com/5Z8Ye6kh . Оттуда можно скачать RAW в виде Lua-файла.
А толку коли MIME шапка штука лишняя. Декодировал демоном, но ругани с его стороны хватило на пять таких файлов.
Добавлено:
Подчистил повреждённые комментарии, залил на http://pastebin.com/5Z8Ye6kh . Оттуда можно скачать RAW в виде Lua-файла.
VictorVG4
Цитата:
Герои не ищут лёгких путей ))) По CtrlDown заходим в файл с этим текстом - открывается как архив и в нём le.lua.
Цитата:
Декодировал демоном, но ругани с его стороны хватило на пять таких файлов
Герои не ищут лёгких путей ))) По CtrlDown заходим в файл с этим текстом - открывается как архив и в нём le.lua.
Alexyz21
Цитата:
У меня не заходит. И вообще непонятно, зачем всё это лишнее. Раз форум не позволяет присоединить аттач, значит надо дать пользователю возможность с минимальным количеством телодвижений скачать файл с другого места (коих сейчас тысячи).
Цитата:
По CtrlDown заходим в файл с этим текстом - открывается как архив и в нём le.lua.
У меня не заходит. И вообще непонятно, зачем всё это лишнее. Раз форум не позволяет присоединить аттач, значит надо дать пользователю возможность с минимальным количеством телодвижений скачать файл с другого места (коих сейчас тысячи).
Я себе в панелях (кроме Ctrl[12]) весь стрейфинг по папкам/винтам сделал с помощью кнопок курсора - вход в папки/архивы - вправо, выход - влево, вверх/вниз по элементам, плюс сквозные лифты сквозь пустые подпапки - очень удобно. Реализовано скриптом LYNX-motion, я его как-то раньше публиковал.
Alexyz21
Файл откроется если установлен ANSI плагин MxUUE. А у меня его сто лет как нет, и? Что касается героев - два кошака перед высоким забором - "- А может под забором пролезем? - Герои не ищут лёгких путей!"
Файл откроется если установлен ANSI плагин MxUUE. А у меня его сто лет как нет, и? Что касается героев - два кошака перед высоким забором - "- А может под забором пролезем? - Герои не ищут лёгких путей!"
VictorVG4
Цитата:
Это не так, его открывает Observer. А в фаре без обсервера как без рук.
Скачал FarUE3 - в нём открывается )))
Цитата:
Файл откроется если установлен ANSI плагин MxUUE
Это не так, его открывает Observer. А в фаре без обсервера как без рук.
Скачал FarUE3 - в нём открывается )))
Цитата:
его открывает Observer
Если удалить пробелы в конце строк.
wseventeen
Любопытно, что мешают лишь пробелы в пустой строке, разделяющей шапку и блок данных.
Любопытно, что мешают лишь пробелы в пустой строке, разделяющей шапку и блок данных.
Alexyz21
О! А и забыл про него...
О! А и забыл про него...
Цитата:
Любопытно, что мешают лишь пробелы в пустой строке, разделяющей шапку и блок данных.Ну как бы, по стандарту, строка должна быть именно пустая. Пробелы уже делают её непустой.
Ariman_UA
Поскольку суть формата в преобразовании "недопустимых" символов в обычный видимый текст, то нужно учитывать, что к нему могут применяться копи-пэсты, могущие незаметно захватить пробельные символы.
Добавлено:
Редактор: поиск/замена целыми словами с регулярными выражениями
Имхо вместо sub лучше использовать gsub - ведь при установленной опции [x] Whole words может быть произведена перезагрузка luamacro и тогда sub'ом будут отрезаны "невинные" символы.
Поскольку суть формата в преобразовании "недопустимых" символов в обычный видимый текст, то нужно учитывать, что к нему могут применяться копи-пэсты, могущие незаметно захватить пробельные символы.
Добавлено:
Редактор: поиск/замена целыми словами с регулярными выражениями
Имхо вместо sub лучше использовать gsub - ведь при установленной опции [x] Whole words может быть произведена перезагрузка luamacro и тогда sub'ом будут отрезаны "невинные" символы.
Alexyz21
Цитата:
Данный макрос ничего не запоминает между запусками, поэтому ему пофиг на перезагрузку макросов.
Цитата:
ведь при установленной опции [x] Whole words может быть произведена перезагрузка luamacro и тогда sub'ом будут отрезаны "невинные" символы.
Данный макрос ничего не запоминает между запусками, поэтому ему пофиг на перезагрузку макросов.
Alexyz21
Суть формата в преобразовании в передаваемый по сети текст, а не в видимый. И проблемы копи-пейста мышью в формат не заложили.
Суть формата в преобразовании в передаваемый по сети текст, а не в видимый. И проблемы копи-пейста мышью в формат не заложили.
Alexyz21
Ariman_UA прав - форматы BASE64/UUE/XXE были созданы в середине 70-х для передачи по каналам связи текстовой информации в системах UNIX, а уже после люди их приспособили для других задач. И формально после заголовка должны идти одна или более строк с длинной 0 байт, а отсебятина редакторов при необходимости правится триммером в том же vi.
Ariman_UA прав - форматы BASE64/UUE/XXE были созданы в середине 70-х для передачи по каналам связи текстовой информации в системах UNIX, а уже после люди их приспособили для других задач. И формально после заголовка должны идти одна или более строк с длинной 0 байт, а отсебятина редакторов при необходимости правится триммером в том же vi.
Цитата:
Суть формата в преобразовании в передаваемый по сети текст, а не в видимый.
К формату претензий нет.
Суть плагина в извлечении, данных.
Данные могут быть ивлечены, но излишний пуризм плагина не позволяет их вытащить.
коллеги, подскажите где капнуть про очень медленное копирование файлов через sftp...
разница в скорости через winscp и far-netbox в порядок
разница в скорости через winscp и far-netbox в порядок
wseventeen
Цитата:
Цитата:
излишний пуризм плагина не позволяет их вытащить.Плагину чего парсер отдал, то он и показывает. Я стараюсь без необходимости поведение внешних либ не трогать, поддерживать замучаешься потом такие изменения.
Цитата:
подскажите где капнуть про очень медленное копирование файлов через sftp...
Все ссылки есть здесь: http://forum.farmanager.com/viewtopic.php?f=11&t=6316
Добавлено:
Ariman_UA
Если либа сторонняя, тогда конечно овчинка выделки не стоит.
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
Предыдущая тема: оффтоп
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.