<?php
/* http://d...content-available-to-author-only...2.net/ */
SUBWAY => 'едешь на метро' ,
FOOT => 'идешь пешком' ,
BUS => 'едешь на автобусе'
) ;
$startPoint = 'pet' ; // Петроградская
$endPoint = 'nov' ; // Новая Голландия
'pet' => 'ст. м. Петроградская' ,
'chk' => 'ст. м. Чкаловская' ,
'gor' => 'ст. м. Горьковская' ,
'spo' => 'ст. м. Спортивная' ,
'vas' => 'ст. м. Василеостровская' ,
'kre' => 'Петропавловская крепость' ,
'let' => 'Летний сад' ,
'dvo' => 'Дворцовая площадь' ,
'isa' => 'Исакиевский собор' ,
'nov' => 'Новая Голландия' ,
'ras' => 'Дом Раскольникова' ,
'gos' => 'Гостиный Двор' ,
'sen' => 'Сенная Площадь' ,
'vla' => 'ст. м. Владимирская' ,
'vit' => 'Витебский вокзал' ,
'teh' => 'Технологический Институт'
) ;
'chk' => canGet( 10 , BUS) ,
'gor' => canGet( 3 , SUBWAY)
) ,
'pet' => canGet( 10 , BUS) ,
'spo' => canGet( 3 , SUBWAY)
) ,
'pet' => canGet( 3 , BUS) ,
'kre' => canGet( 5 , FOOT) ,
'gos' => canGet( 6 , SUBWAY)
) ,
'chk' => canGet( 3 , SUBWAY) ,
'vas' => canGet( 10 , BUS) ,
'sen' => canGet( 7 , SUBWAY)
) ,
'spo' => canGet( 10 , BUS) ,
'gos' => canGet( 7 , SUBWAY) ,
'nov' => canGet( 11 , FOOT)
) ,
'gor' => canGet( 5 , FOOT)
) ,
'dvo' => canGet( 6 , FOOT) ,
'gos' => canGet( 7 , FOOT)
) ,
'isa' => canGet( 6 , FOOT) ,
'gos' => canGet( 6 , FOOT) ,
'let' => canGet( 6 , FOOT)
) ,
'dvo' => canGet( 6 , FOOT) ,
'nov' => canGet( 5 , FOOT)
) ,
'vas' => canGet( 11 , FOOT) ,
'isa' => canGet( 5 , FOOT) ,
'ras' => canGet( 7 , BUS)
) ,
'nov' => canGet( 7 , BUS) ,
'sen' => canGet( 3 , FOOT)
) ,
'vas' => canGet( 7 , SUBWAY) ,
'sen' => canGet( 3 , SUBWAY) ,
'dvo' => canGet( 6 , FOOT) ,
'gor' => canGet( 6 , SUBWAY) ,
'let' => canGet( 7 , FOOT) ,
'vla' => canGet( 7 , FOOT)
) ,
'ras' => canGet( 3 , FOOT) ,
'spo' => canGet( 7 , SUBWAY) ,
'gos' => canGet( 3 , SUBWAY) ,
'vla' => canGet( 4 , SUBWAY) ,
'vit' => canGet( 2 , SUBWAY) ,
'teh' => canGet( 3 , SUBWAY)
) ,
'sen' => canGet( 4 , SUBWAY) ,
'gos' => canGet( 7 , FOOT) ,
'vit' => canGet( 3 , SUBWAY)
) ,
'sen' => canGet( 2 , SUBWAY) ,
'teh' => canGet( 2 , SUBWAY) ,
'vla' => canGet( 3 , SUBWAY)
) ,
'sen' => canGet( 3 , SUBWAY) ,
'vit' => canGet( 2 , SUBWAY)
)
) ;
/* Чтобы не писать много раз array('time' => ..., 'by' => ...), используем функцию.
«canGet» переводится как «можно попасть» */
function canGet( $time , $byWhat ) {
return array ( 'time' => $time , 'by' => $byWhat ) ; }
function makeOneStep( $paths , $pathDone , $time , $point , $target ) {
$pathDone [ ] = $point ; // Заносим в пройденный путь точку в которой находимся
if ( $point == $target ) { // Если находимся в точке назначения
$result [ "path" ] = $pathDone ; // Записываем пройденный путь в массив
$result [ "time" ] = $time ; // Записываем время в массив
return $result ; // Возврщаем массив с пройденныи путем и временем
}
$result = array ( ) ; // Массив в которой заносим маршрут и время foreach ( $paths [ $point ] as $node => $pathTimeBy ) { // Цикл для перебора всех возможных маршрутов
if ( ! in_array ( $node , $pathDone ) ) { // Если точка не находится в пройденном пути $time = $time + $pathTimeBy [ "time" ] ; // Обновляем время. Идем вперед плюсуем время
$newPath = makeOneStep( $paths , $pathDone , $time , $node , $target ) ; // Вызываем функцию с обновленными параметрами точки прибывания и времени.
if ( $newPath ) { // Если в $newPath есть маршрут
if ( ! $result || ( $newPath [ "time" ] < $result [ "time" ] ) ) { // Если массив $result пуст или если новый маршрут меньше предыдущего
$result [ "path" ] = $newPath [ "path" ] ; // Записываем новый маршрут
$result [ "time" ] = $newPath [ "time" ] ; // Записываем новое время
}
}
$time = $time - $pathTimeBy [ "time" ] ; // Обновляем время. Идем обратно минусуем время
}
}
return $result ; // Возвращаем маршрут
}
$pathDone = array ( ) ; // Пройденый путь $time = 0 ; // Затраченное время
$path = makeOneStep( $paths , $pathDone , $time , $startPoint , $endPoint ) ; // Вызываем функцию
$nodes = $path [ "path" ] ; // Массив с маршрутом
echo "Начальная точка: \" $pointNames [$startPoint ]\" \n " ; // Выводим начальную точку
for ( $i = 0 ; $i < count ( $nodes ) - 1 ; $i ++ ) { // Цикл для маршрута $from = $nodes [ $i ] ; // Откуда
$to = $nodes [ $i + 1 ] ; // Куда
$howMuch = $paths [ $from ] [ $to ] [ "time" ] ; // Сколько займет времени
$how = $paths [ $from ] [ $to ] [ "by" ] ; // Как будем добиратся
echo "Из неё $transportName [$how ] до точки \" $pointNames [$to ]\" $howMuch мин.\n " ; // Выводим поэтапно маршрут
}
echo "В итоге ты попадаешь в точку \" $pointNames [$endPoint ]\" за " . $path [ "time" ] . " мин. Приятной поездки!" ; // Выводим конечную точку назанчения и общее время затраченное в пути
PD9waHAKCmVycm9yX3JlcG9ydGluZygtMSk7Ci8qIGh0dHA6Ly9kLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi4yLm5ldC8gKi8KCmRlZmluZSgnU1VCV0FZJywgJ3N1YicpOwpkZWZpbmUoJ0ZPT1QnLCAnZm9vdCcpOwpkZWZpbmUoJ0JVUycsICdidXMnKTsKCiR0cmFuc3BvcnROYW1lID0gYXJyYXkoCiAgICBTVUJXQVkgPT4gJ9C10LTQtdGI0Ywg0L3QsCDQvNC10YLRgNC+JywKICAgIEZPT1QgPT4gJ9C40LTQtdGI0Ywg0L/QtdGI0LrQvtC8JywKICAgIEJVUyA9PiAn0LXQtNC10YjRjCDQvdCwINCw0LLRgtC+0LHRg9GB0LUnCik7Cgokc3RhcnRQb2ludCA9ICdwZXQnOyAvLyDQn9C10YLRgNC+0LPRgNCw0LTRgdC60LDRjwokZW5kUG9pbnQgPSAnbm92JzsgLy8g0J3QvtCy0LDRjyDQk9C+0LvQu9Cw0L3QtNC40Y8KCiRwb2ludE5hbWVzID0gYXJyYXkoCiAgICAncGV0JyA9PiAn0YHRgi4g0LwuINCf0LXRgtGA0L7Qs9GA0LDQtNGB0LrQsNGPJywKICAgICdjaGsnID0+ICfRgdGCLiDQvC4g0KfQutCw0LvQvtCy0YHQutCw0Y8nLAogICAgJ2dvcicgPT4gJ9GB0YIuINC8LiDQk9C+0YDRjNC60L7QstGB0LrQsNGPJywKICAgICdzcG8nID0+ICfRgdGCLiDQvC4g0KHQv9C+0YDRgtC40LLQvdCw0Y8nLAogICAgJ3ZhcycgPT4gJ9GB0YIuINC8LiDQktCw0YHQuNC70LXQvtGB0YLRgNC+0LLRgdC60LDRjycsCiAgICAna3JlJyA9PiAn0J/QtdGC0YDQvtC/0LDQstC70L7QstGB0LrQsNGPINC60YDQtdC/0L7RgdGC0YwnLAogICAgJ2xldCcgPT4gJ9Cb0LXRgtC90LjQuSDRgdCw0LQnLAogICAgJ2R2bycgPT4gJ9CU0LLQvtGA0YbQvtCy0LDRjyDQv9C70L7RidCw0LTRjCcsCiAgICAnaXNhJyA9PiAn0JjRgdCw0LrQuNC10LLRgdC60LjQuSDRgdC+0LHQvtGAJywKICAgICdub3YnID0+ICfQndC+0LLQsNGPINCT0L7Qu9C70LDQvdC00LjRjycsCiAgICAncmFzJyA9PiAn0JTQvtC8INCg0LDRgdC60L7Qu9GM0L3QuNC60L7QstCwJywKICAgICdnb3MnID0+ICfQk9C+0YHRgtC40L3Ri9C5INCU0LLQvtGAJywKICAgICdzZW4nID0+ICfQodC10L3QvdCw0Y8g0J/Qu9C+0YnQsNC00YwnLAogICAgJ3ZsYScgPT4gJ9GB0YIuINC8LiDQktC70LDQtNC40LzQuNGA0YHQutCw0Y8nLAogICAgJ3ZpdCcgPT4gJ9CS0LjRgtC10LHRgdC60LjQuSDQstC+0LrQt9Cw0LsnLAogICAgJ3RlaCcgPT4gJ9Ci0LXRhdC90L7Qu9C+0LPQuNGH0LXRgdC60LjQuSDQmNC90YHRgtC40YLRg9GCJwopOwoKJHBhdGhzID0gYXJyYXkoCiAgICAncGV0JyA9PiBhcnJheSgKICAgICAgICAnY2hrJyA9PiBjYW5HZXQoMTAsIEJVUyksCiAgICAgICAgJ2dvcicgPT4gY2FuR2V0KDMsIFNVQldBWSkKICAgICksCgogICAgJ2NoaycgPT4gYXJyYXkoCiAgICAgICAgJ3BldCcgPT4gY2FuR2V0KDEwLCBCVVMpLAogICAgICAgICdzcG8nID0+IGNhbkdldCgzLCBTVUJXQVkpCiAgICApLAoKICAgICdnb3InID0+IGFycmF5KAogICAgICAgICdwZXQnID0+IGNhbkdldCgzLCBCVVMpLAogICAgICAgICdrcmUnID0+IGNhbkdldCg1LCBGT09UKSwKICAgICAgICAnZ29zJyA9PiBjYW5HZXQoNiwgU1VCV0FZKQogICAgKSwKCiAgICAnc3BvJyA9PiBhcnJheSgKICAgICAgICAnY2hrJyA9PiBjYW5HZXQoMywgU1VCV0FZKSwKICAgICAgICAndmFzJyA9PiBjYW5HZXQoMTAsIEJVUyksCiAgICAgICAgJ3NlbicgPT4gY2FuR2V0KDcsIFNVQldBWSkKICAgICksCgogICAgJ3ZhcycgPT4gYXJyYXkoCiAgICAgICAgJ3NwbycgPT4gY2FuR2V0KDEwLCBCVVMpLAogICAgICAgICdnb3MnID0+IGNhbkdldCg3LCBTVUJXQVkpLAogICAgICAgICdub3YnID0+IGNhbkdldCgxMSwgRk9PVCkKICAgICksCgogICAgJ2tyZScgPT4gYXJyYXkoCiAgICAgICAgJ2dvcicgPT4gY2FuR2V0KDUsIEZPT1QpCiAgICApLAoKICAgICdsZXQnID0+IGFycmF5KAogICAgICAgICdkdm8nID0+IGNhbkdldCg2LCBGT09UKSwKICAgICAgICAnZ29zJyA9PiBjYW5HZXQoNywgRk9PVCkKICAgICksCgogICAgJ2R2bycgPT4gYXJyYXkoCiAgICAgICAgJ2lzYScgPT4gY2FuR2V0KDYsIEZPT1QpLAogICAgICAgICdnb3MnID0+IGNhbkdldCg2LCBGT09UKSwKICAgICAgICAnbGV0JyA9PiBjYW5HZXQoNiwgRk9PVCkKICAgICksCgogICAgJ2lzYScgPT4gYXJyYXkoCiAgICAgICAgJ2R2bycgPT4gY2FuR2V0KDYsIEZPT1QpLAogICAgICAgICdub3YnID0+IGNhbkdldCg1LCBGT09UKQogICAgKSwKCiAgICAnbm92JyA9PiBhcnJheSgKICAgICAgICAndmFzJyA9PiBjYW5HZXQoMTEsIEZPT1QpLAogICAgICAgICdpc2EnID0+IGNhbkdldCg1LCBGT09UKSwKICAgICAgICAncmFzJyA9PiBjYW5HZXQoNywgQlVTKQogICAgKSwKCiAgICAncmFzJyA9PiBhcnJheSgKICAgICAgICAnbm92JyA9PiBjYW5HZXQoNywgQlVTKSwKICAgICAgICAnc2VuJyA9PiBjYW5HZXQoMywgRk9PVCkKICAgICksCgogICAgJ2dvcycgPT4gYXJyYXkoCiAgICAgICAgJ3ZhcycgPT4gY2FuR2V0KDcsIFNVQldBWSksCiAgICAgICAgJ3NlbicgPT4gY2FuR2V0KDMsIFNVQldBWSksCiAgICAgICAgJ2R2bycgPT4gY2FuR2V0KDYsIEZPT1QpLAogICAgICAgICdnb3InID0+IGNhbkdldCg2LCBTVUJXQVkpLAogICAgICAgICdsZXQnID0+IGNhbkdldCg3LCBGT09UKSwKICAgICAgICAndmxhJyA9PiBjYW5HZXQoNywgRk9PVCkKICAgICksCgogICAgJ3NlbicgPT4gYXJyYXkoCiAgICAgICAgJ3JhcycgPT4gY2FuR2V0KDMsIEZPT1QpLAogICAgICAgICdzcG8nID0+IGNhbkdldCg3LCBTVUJXQVkpLAogICAgICAgICdnb3MnID0+IGNhbkdldCgzLCBTVUJXQVkpLAogICAgICAgICd2bGEnID0+IGNhbkdldCg0LCBTVUJXQVkpLAogICAgICAgICd2aXQnID0+IGNhbkdldCgyLCBTVUJXQVkpLAogICAgICAgICd0ZWgnID0+IGNhbkdldCgzLCBTVUJXQVkpCiAgICApLAoKICAgICd2bGEnID0+IGFycmF5KAogICAgICAgICdzZW4nID0+IGNhbkdldCg0LCBTVUJXQVkpLAogICAgICAgICdnb3MnID0+IGNhbkdldCg3LCBGT09UKSwKICAgICAgICAndml0JyA9PiBjYW5HZXQoMywgU1VCV0FZKQogICAgKSwKCiAgICAndml0JyA9PiBhcnJheSgKICAgICAgICAnc2VuJyA9PiBjYW5HZXQoMiwgU1VCV0FZKSwKICAgICAgICAndGVoJyA9PiBjYW5HZXQoMiwgU1VCV0FZKSwKICAgICAgICAndmxhJyA9PiBjYW5HZXQoMywgU1VCV0FZKQogICAgKSwKCiAgICAndGVoJyA9PiBhcnJheSgKICAgICAgICAnc2VuJyA9PiBjYW5HZXQoMywgU1VCV0FZKSwKICAgICAgICAndml0JyA9PiBjYW5HZXQoMiwgU1VCV0FZKQogICAgKQopOwoKLyog0KfRgtC+0LHRiyDQvdC1INC/0LjRgdCw0YLRjCDQvNC90L7Qs9C+INGA0LDQtyBhcnJheSgndGltZScgPT4gLi4uLCAnYnknID0+IC4uLiksINC40YHQv9C+0LvRjNC30YPQtdC8INGE0YPQvdC60YbQuNGOLgogIMKrY2FuR2V0wrsg0L/QtdGA0LXQstC+0LTQuNGC0YHRjyDQutCw0LogwqvQvNC+0LbQvdC+INC/0L7Qv9Cw0YHRgtGMwrsgKi8KZnVuY3Rpb24gY2FuR2V0KCR0aW1lLCAkYnlXaGF0KSB7CiAgICByZXR1cm4gYXJyYXkoJ3RpbWUnID0+ICR0aW1lLCAnYnknID0+ICRieVdoYXQpOwp9CgpmdW5jdGlvbiBtYWtlT25lU3RlcCgkcGF0aHMsICRwYXRoRG9uZSwgJHRpbWUsICRwb2ludCwgJHRhcmdldCl7CiAgICAkcGF0aERvbmVbXSA9ICRwb2ludDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0JfQsNC90L7RgdC40Lwg0LIg0L/RgNC+0LnQtNC10L3QvdGL0Lkg0L/Rg9GC0Ywg0YLQvtGH0LrRgyDQsiDQutC+0YLQvtGA0L7QuSDQvdCw0YXQvtC00LjQvNGB0Y8KICAgIGlmKCRwb2ludCA9PSAkdGFyZ2V0KXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDQldGB0LvQuCDQvdCw0YXQvtC00LjQvNGB0Y8g0LIg0YLQvtGH0LrQtSDQvdCw0LfQvdCw0YfQtdC90LjRjwogICAgICAgICRyZXN1bHRbInBhdGgiXSA9ICRwYXRoRG9uZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vINCX0LDQv9C40YHRi9Cy0LDQtdC8INC/0YDQvtC50LTQtdC90L3Ri9C5INC/0YPRgtGMINCyINC80LDRgdGB0LjQsgogICAgICAgICRyZXN1bHRbInRpbWUiXSA9ICR0aW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vINCX0LDQv9C40YHRi9Cy0LDQtdC8INCy0YDQtdC80Y8g0LIg0LzQsNGB0YHQuNCyCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0JLQvtC30LLRgNGJ0LDQtdC8INC80LDRgdGB0LjQsiDRgSDQv9GA0L7QudC00LXQvdC90YvQuCDQv9GD0YLQtdC8INC4INCy0YDQtdC80LXQvdC10LwKICAgIH0KCiAgICAkcmVzdWx0ID0gYXJyYXkoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0JzQsNGB0YHQuNCyINCyINC60L7RgtC+0YDQvtC5INC30LDQvdC+0YHQuNC8INC80LDRgNGI0YDRg9GCINC4INCy0YDQtdC80Y8KICAgIGZvcmVhY2ggKCRwYXRoc1skcG9pbnRdIGFzICRub2RlID0+ICRwYXRoVGltZUJ5KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDQptC40LrQuyDQtNC70Y8g0L/QtdGA0LXQsdC+0YDQsCDQstGB0LXRhSDQstC+0LfQvNC+0LbQvdGL0YUg0LzQsNGA0YjRgNGD0YLQvtCyCiAgICAgICAgaWYoIWluX2FycmF5KCRub2RlLCRwYXRoRG9uZSkpeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0JXRgdC70Lgg0YLQvtGH0LrQsCDQvdC1INC90LDRhdC+0LTQuNGC0YHRjyDQsiDQv9GA0L7QudC00LXQvdC90L7QvCDQv9GD0YLQuAogICAgICAgICAgICAkdGltZSA9ICR0aW1lICsgJHBhdGhUaW1lQnlbInRpbWUiXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vINCe0LHQvdC+0LLQu9GP0LXQvCDQstGA0LXQvNGPLiDQmNC00LXQvCDQstC/0LXRgNC10LQg0L/Qu9GO0YHRg9C10Lwg0LLRgNC10LzRjwogICAgICAgICAgICAkbmV3UGF0aCA9IG1ha2VPbmVTdGVwKCRwYXRocywkcGF0aERvbmUsJHRpbWUsJG5vZGUsJHRhcmdldCk7ICAgICAgIC8vINCS0YvQt9GL0LLQsNC10Lwg0YTRg9C90LrRhtC40Y4g0YEg0L7QsdC90L7QstC70LXQvdC90YvQvNC4INC/0LDRgNCw0LzQtdGC0YDQsNC80Lgg0YLQvtGH0LrQuCDQv9GA0LjQsdGL0LLQsNC90LjRjyDQuCDQstGA0LXQvNC10L3QuC4KICAgICAgICAgICAgaWYoJG5ld1BhdGgpeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDQldGB0LvQuCDQsiAkbmV3UGF0aCDQtdGB0YLRjCDQvNCw0YDRiNGA0YPRggogICAgICAgICAgICAgICAgaWYoISRyZXN1bHQgfHwgKCRuZXdQYXRoWyJ0aW1lIl0gPCAkcmVzdWx0WyJ0aW1lIl0pKXsgICAgICAgICAgIC8vINCV0YHQu9C4INC80LDRgdGB0LjQsiAkcmVzdWx0INC/0YPRgdGCINC40LvQuCDQtdGB0LvQuCDQvdC+0LLRi9C5INC80LDRgNGI0YDRg9GCINC80LXQvdGM0YjQtSDQv9GA0LXQtNGL0LTRg9GJ0LXQs9C+CiAgICAgICAgICAgICAgICAgICAgJHJlc3VsdFsicGF0aCJdID0gJG5ld1BhdGhbInBhdGgiXTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0JfQsNC/0LjRgdGL0LLQsNC10Lwg0L3QvtCy0YvQuSDQvNCw0YDRiNGA0YPRggogICAgICAgICAgICAgICAgICAgICRyZXN1bHRbInRpbWUiXSA9ICRuZXdQYXRoWyJ0aW1lIl07ICAgICAgICAgICAgICAgICAgICAgICAgIC8vINCX0LDQv9C40YHRi9Cy0LDQtdC8INC90L7QstC+0LUg0LLRgNC10LzRjwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aW1lID0gJHRpbWUgLSAkcGF0aFRpbWVCeVsidGltZSJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0J7QsdC90L7QstC70Y/QtdC8INCy0YDQtdC80Y8uINCY0LTQtdC8INC+0LHRgNCw0YLQvdC+INC80LjQvdGD0YHRg9C10Lwg0LLRgNC10LzRjwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0JLQvtC30LLRgNCw0YnQsNC10Lwg0LzQsNGA0YjRgNGD0YIKfQoKCiRwYXRoRG9uZSA9IGFycmF5KCk7IC8vINCf0YDQvtC50LTQtdC90YvQuSDQv9GD0YLRjAokdGltZSA9IDA7ICAgICAgICAgICAvLyDQl9Cw0YLRgNCw0YfQtdC90L3QvtC1INCy0YDQtdC80Y8KCiRwYXRoID0gbWFrZU9uZVN0ZXAoJHBhdGhzLCAkcGF0aERvbmUsICR0aW1lLCAkc3RhcnRQb2ludCwgJGVuZFBvaW50KTsgICAgICAgICAgICAgICAgICAgLy8g0JLRi9C30YvQstCw0LXQvCDRhNGD0L3QutGG0LjRjgokbm9kZXMgPSRwYXRoWyJwYXRoIl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vINCc0LDRgdGB0LjQsiDRgSDQvNCw0YDRiNGA0YPRgtC+0LwKCmVjaG8gItCd0LDRh9Cw0LvRjNC90LDRjyDRgtC+0YfQutCwOiBcIiRwb2ludE5hbWVzWyRzdGFydFBvaW50XVwiXG4iOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDQktGL0LLQvtC00LjQvCDQvdCw0YfQsNC70YzQvdGD0Y4g0YLQvtGH0LrRgwpmb3IoJGkgPSAwOyAkaSA8IGNvdW50KCRub2RlcyktMTsgJGkrKyl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vINCm0LjQutC7INC00LvRjyDQvNCw0YDRiNGA0YPRgtCwCiAgICAkZnJvbSA9ICRub2Rlc1skaV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0J7RgtC60YPQtNCwCiAgICAkdG8gPSAkbm9kZXNbJGkrMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0JrRg9C00LAKICAgICRob3dNdWNoID0kcGF0aHNbJGZyb21dWyR0b11bInRpbWUiXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDQodC60L7Qu9GM0LrQviDQt9Cw0LnQvNC10YIg0LLRgNC10LzQtdC90LgKICAgICRob3cgPSAkcGF0aHNbJGZyb21dWyR0b11bImJ5Il07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDQmtCw0Log0LHRg9C00LXQvCDQtNC+0LHQuNGA0LDRgtGB0Y8KICAgIGVjaG8gItCY0Lcg0L3QtdGRICR0cmFuc3BvcnROYW1lWyRob3ddINC00L4g0YLQvtGH0LrQuCBcIiRwb2ludE5hbWVzWyR0b11cIiAkaG93TXVjaCDQvNC40L0uXG4iOyAgICAvLyDQktGL0LLQvtC00LjQvCDQv9C+0Y3RgtCw0L/QvdC+INC80LDRgNGI0YDRg9GCCn0KZWNobyAi0JIg0LjRgtC+0LPQtSDRgtGLINC/0L7Qv9Cw0LTQsNC10YjRjCDQsiDRgtC+0YfQutGDIFwiJHBvaW50TmFtZXNbJGVuZFBvaW50XVwiINC30LAgIi4kcGF0aFsidGltZSJdLiIg0LzQuNC9LiDQn9GA0LjRj9GC0L3QvtC5INC/0L7QtdC30LTQutC4ISI7IC8vINCS0YvQstC+0LTQuNC8INC60L7QvdC10YfQvdGD0Y4g0YLQvtGH0LrRgyDQvdCw0LfQsNC90YfQtdC90LjRjyDQuCDQvtCx0YnQtdC1INCy0YDQtdC80Y8g0LfQsNGC0YDQsNGH0LXQvdC90L7QtSDQsiDQv9GD0YLQuA==