<?php
header ( "Content-Type: text/plain" ) ;
// Числа прописью
/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
function inclineWord( $number , $word1 , $word2 , $word5 ) {
$word = "" ; //правильная форма склонения
$lastNum = $number % 10 ; //последняя цифра числа
if ( 4 < $number % 100 && $number % 100 <= 19 ) {
$word = $word5 ;
} elseif ( $lastNum == 1 ) {
$word = $word1 ;
} elseif ( $lastNum >= 2 && $lastNum <= 4 ) {
$word = $word2 ;
} elseif ( $lastNum >= 5 || $lastNum == 0 ) {
$word = $word5 ;
}
return $word ;
}
/*
Преобразует числа от 0 до 999 в текст. Параметр $isFemale равен нулю,
если мы считаем число для мужского рода (один рубль),
и 1 — для женского (одна тысяча)
*/
function smallNumberToText( $number , $isFemale ) {
0 => 'ноль' , 10 => 'десять' , 100 => 'сто' ,
1 => 'один' , 11 => 'одиннадцать' , 20 => 'двадцать' , 200 => 'двести' ,
2 => 'два' , 12 => 'двенадцать' , 30 => 'тридцать' , 300 => 'триста' ,
3 => 'три' , 13 => 'тринадцать' , 40 => 'сорок' , 400 => 'четыреста' ,
4 => 'четыре' , 14 => 'четырнадцать' , 50 => 'пятьдесят' , 500 => 'пятьсот' ,
5 => 'пять' , 15 => 'пятнадцать' , 60 => 'шестьдесят' , 600 => 'шестьсот' ,
6 => 'шесть' , 16 => 'шестнадцать' , 70 => 'семьдесят' , 700 => 'семьсот' ,
7 => 'семь' , 17 => 'семнадцать' , 80 => 'восемьдесят' , 800 => 'восемьсот' ,
8 => 'восемь' , 18 => 'восемнадцать' , 90 => 'девяносто' , 900 => 'девятьсот' ,
9 => 'девять' , 19 => 'девятнадцать'
) ;
1 => 'одна' , 2 => 'две'
) ;
$numbers = array ( ) ; // числа прописью для каждого разряда $text = '' ; // числа прописью строкой
$lastNum = $number % 10 ; // последняя цифра числа
$lastTwoNum = $number % 100 ; // последние две цифры числа
// если в числе есть сотни, добавляем слово для сотен
if ( $number >= 100 ) {
$numbers [ ] = $spelling [ ( floor ( $number / 100 ) ) * 100 ] ; }
if ( 11 <= $lastTwoNum && $lastTwoNum <= 19 ) { //... слово для 11-19
$numbers [ ] = $spelling [ $lastTwoNum ] ;
/*
* если число между 11 и 19, то дальше переименовывать не нужно
* нижние две строчки копипастятся, это плохо? Второй вариант, это добавить
* else к условию, и вложить все нижеидущие условия.
*/
$text = implode ( " " , $numbers ) ; //склеиваем строку из массива return $text ;
}
if ( 10 <= $lastTwoNum && $lastTwoNum <= 99 ) { //... слово десятков
$numbers [ ] = $spelling [ floor ( ( $lastTwoNum ) / 10 ) * 10 ] ; }
if ( 1 <= $lastNum && $lastNum <= 9 ) { //... слово единиц
if ( ( $lastNum == 1 || $lastNum == 2 ) && $isFemale == 1 ) { //... женский род
$numbers [ ] = $femaleSpelling [ $lastNum ] ;
} else {
$numbers [ ] = $spelling [ $lastNum ] ;
}
}
if ( $number == 0 ) { //... слово для нуля
$numbers [ ] = $spelling [ $number ] ;
}
//склеиваем строку из слов
return $text ;
}
function numberToText( $number ) {
$i = 0 ; // счетчик, сумма переименованных частей числа
$result = "" ; // число прописью одной строкой
$strs = array ( ) ; // разряды числа прописью $bit = 0 ; // текущий разряд
array ( "рубль" , "рубля" , "рублей" ) , array ( "тысяча" , "тысячи" , "тысяч" ) , array ( "миллион" , "миллиона" , "миллионов" ) /* просто добавь разряд */
) ;
if ( $number == 0 ) { // если число 0, то возвращаем результат
return "ноль (0) рублей" ;
//return smallNumberToText($number, $bit) . " ($number) " . inclineWord($number, $words[$bit][0], $words[$bit][1], $words[$bit][2]);
}
// если число > 0
// продолжаем пока сумма всех переименованных частей числа < исходное число
while ( $i < $number ) {
// берем по очереди часть числа (3 разряда начиная справа)
// если в разряде единиц-десятков-сотен все нули
if ( $pieceNumber == 0 && $bit == 0 ) {
// склоняем слово "рубль"
$strs [ ] = "($number ) " . inclineWord( $number , $words [ $bit ] [ 0 ] , $words [ $bit ] [ 1 ] , $words [ $bit ] [ 2 ] ) ;
}
// если в разряде не только нули
if ( $pieceNumber > 0 ) {
// склоняем название разряда
$word = inclineWord( $pieceNumber , $words [ $bit ] [ 0 ] , $words [ $bit ] [ 1 ] , $words [ $bit ] [ 2 ] ) ;
// добавляем число цифрами перед "рублей"
if ( $bit == 0 ) {
$num = " ($number ) " ;
} else {
$num = " " ;
}
// отправляем число на переименование и добавляем название разряда
$strs [ ] = smallNumberToText( $pieceNumber , $bit ) . $num . $word ;
}
// суммируем переименованные части числа (счетчик)
$i += $pieceNumber * ( pow ( 1000 , $bit ) ) ;
// увеличиваем текущий разряд
$bit ++;
}
// склеиваем результат в одну строку
return $result ;
}
// Вызовем функцию несколько раз
$amount1 = 0 ;
$text1 = numberToText( $amount1 ) ;
echo "На вашем счету {$text1} \n " ;
$text2 = numberToText( $amount2 ) ;
echo "На вашем счету {$text2} \n " ;
$text3 = numberToText( $amount3 ) ;
echo "На вашем счету {$text3} \n " ;
$text4 = numberToText( $amount4 ) ;
echo "На вашем счету {$text4} \n " ;
?>
PD9waHAKaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW4iKTsKbWJfaW50ZXJuYWxfZW5jb2RpbmcoJ3V0Zi04Jyk7CgovLyDQp9C40YHQu9CwINC/0YDQvtC/0LjRgdGM0Y4KICAKLyog0JLQvtC30LLRgNCw0YnQsNC10YIg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnRg9GOINGH0LjRgdC70YMg0YTQvtGA0LzRgyDRgdC70L7QstCwOiAxINGA0YPQsdC70YwsIDIg0YDRg9Cx0LvRjywgNSDRgNGD0LHQu9C10LkgKi8KZnVuY3Rpb24gaW5jbGluZVdvcmQoJG51bWJlciwgJHdvcmQxLCAkd29yZDIsICR3b3JkNSkgewogICAgCiAgICAkd29yZCA9ICIiOyAgICAgICAgICAvL9C/0YDQsNCy0LjQu9GM0L3QsNGPINGE0L7RgNC80LAg0YHQutC70L7QvdC10L3QuNGPCiAgICAkbGFzdE51bSA9ICRudW1iZXIgJSAxMDsgLy/Qv9C+0YHQu9C10LTQvdGP0Y8g0YbQuNGE0YDQsCDRh9C40YHQu9CwCiAgICAKICAgIGlmICg0IDwgJG51bWJlciAlIDEwMCAmJiAkbnVtYmVyICUgMTAwIDw9IDE5KSB7CiAgICAgICAgJHdvcmQgPSAkd29yZDU7CiAgICB9IGVsc2VpZiAoJGxhc3ROdW0gPT0gMSkgewogICAgICAgICR3b3JkID0gJHdvcmQxOwogICAgfSBlbHNlaWYgKCRsYXN0TnVtID49IDIgJiYgJGxhc3ROdW0gPD0gNCkgewogICAgICAgICR3b3JkID0gJHdvcmQyOwogICAgfSBlbHNlaWYgKCRsYXN0TnVtID49IDUgfHwgJGxhc3ROdW0gPT0gMCkgewogICAgICAgICR3b3JkID0gJHdvcmQ1OwogICAgfQogICAgcmV0dXJuICR3b3JkOyAgICAKfQogCi8qIAogICAg0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDRh9C40YHQu9CwINC+0YIgMCDQtNC+IDk5OSDQsiDRgtC10LrRgdGCLiDQn9Cw0YDQsNC80LXRgtGAICRpc0ZlbWFsZSDRgNCw0LLQtdC9INC90YPQu9GOLCAKICAgINC10YHQu9C4INC80Ysg0YHRh9C40YLQsNC10Lwg0YfQuNGB0LvQviDQtNC70Y8g0LzRg9C20YHQutC+0LPQviDRgNC+0LTQsCAo0L7QtNC40L0g0YDRg9Cx0LvRjCksIAogICAg0LggMSDigJQg0LTQu9GPINC20LXQvdGB0LrQvtCz0L4gKNC+0LTQvdCwINGC0YvRgdGP0YfQsCkgCiovCmZ1bmN0aW9uIHNtYWxsTnVtYmVyVG9UZXh0KCRudW1iZXIsICRpc0ZlbWFsZSkgewogCiAgICAkc3BlbGxpbmcgPSBhcnJheSgKICAgICAgICAwICAgPT4gICfQvdC+0LvRjCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwICA9PiAgJ9C00LXRgdGP0YLRjCcsICAgICAgIDEwMCA9PiAgJ9GB0YLQvicsCiAgICAgICAgMSAgID0+ICAn0L7QtNC40L0nLCAgICAgICAgIDExICA9PiAgJ9C+0LTQuNC90L3QsNC00YbQsNGC0YwnLCAgICAgIDIwICA9PiAgJ9C00LLQsNC00YbQsNGC0YwnLCAgICAgMjAwID0+ICAn0LTQstC10YHRgtC4JywKICAgICAgICAyICAgPT4gICfQtNCy0LAnLCAgICAgICAgICAxMiAgPT4gICfQtNCy0LXQvdCw0LTRhtCw0YLRjCcsICAgICAgIDMwICA9PiAgJ9GC0YDQuNC00YbQsNGC0YwnLCAgICAgMzAwID0+ICAn0YLRgNC40YHRgtCwJywKICAgICAgICAzICAgPT4gICfRgtGA0LgnLCAgICAgICAgICAxMyAgPT4gICfRgtGA0LjQvdCw0LTRhtCw0YLRjCcsICAgICAgIDQwICA9PiAgJ9GB0L7RgNC+0LonLCAgICAgICAgNDAwID0+ICAn0YfQtdGC0YvRgNC10YHRgtCwJywKICAgICAgICA0ICAgPT4gICfRh9C10YLRi9GA0LUnLCAgICAgICAxNCAgPT4gICfRh9C10YLRi9GA0L3QsNC00YbQsNGC0YwnLCAgICAgNTAgID0+ICAn0L/Rj9GC0YzQtNC10YHRj9GCJywgICAgNTAwID0+ICAn0L/Rj9GC0YzRgdC+0YInLAogICAgICAgIDUgICA9PiAgJ9C/0Y/RgtGMJywgICAgICAgICAxNSAgPT4gICfQv9GP0YLQvdCw0LTRhtCw0YLRjCcsICAgICAgIDYwICA9PiAgJ9GI0LXRgdGC0YzQtNC10YHRj9GCJywgICA2MDAgPT4gICfRiNC10YHRgtGM0YHQvtGCJywKICAgICAgICA2ICAgPT4gICfRiNC10YHRgtGMJywgICAgICAgIDE2ICA9PiAgJ9GI0LXRgdGC0L3QsNC00YbQsNGC0YwnLCAgICAgIDcwICA9PiAgJ9GB0LXQvNGM0LTQtdGB0Y/RgicsICAgIDcwMCA9PiAgJ9GB0LXQvNGM0YHQvtGCJywgICAgCiAgICAgICAgNyAgID0+ICAn0YHQtdC80YwnLCAgICAgICAgIDE3ICA9PiAgJ9GB0LXQvNC90LDQtNGG0LDRgtGMJywgICAgICAgODAgID0+ICAn0LLQvtGB0LXQvNGM0LTQtdGB0Y/RgicsICAgODAwID0+ICAn0LLQvtGB0LXQvNGM0YHQvtGCJywKICAgICAgICA4ICAgPT4gICfQstC+0YHQtdC80YwnLCAgICAgICAxOCAgPT4gICfQstC+0YHQtdC80L3QsNC00YbQsNGC0YwnLCAgICAgOTAgID0+ICAn0LTQtdCy0Y/QvdC+0YHRgtC+JywgICAgIDkwMCA9PiAgJ9C00LXQstGP0YLRjNGB0L7RgicsCiAgICAgICAgOSAgID0+ICAn0LTQtdCy0Y/RgtGMJywgICAgICAgMTkgID0+ICAn0LTQtdCy0Y/RgtC90LDQtNGG0LDRgtGMJyAgICAKICAgICk7CiAKICAgICRmZW1hbGVTcGVsbGluZyA9IGFycmF5KAogICAgICAgIDEgICA9PiAgJ9C+0LTQvdCwJywgICAgICAgIDIgICA9PiAgJ9C00LLQtScKICAgICk7ICAgCiAgICAKICAgICRudW1iZXJzPWFycmF5KCk7ICAgICAgICAgICAgICAgLy8g0YfQuNGB0LvQsCDQv9GA0L7Qv9C40YHRjNGOINC00LvRjyDQutCw0LbQtNC+0LPQviDRgNCw0LfRgNGP0LTQsCAgICAKICAgICR0ZXh0ID0gJyc7ICAgICAgICAgICAgICAgICAgICAgLy8g0YfQuNGB0LvQsCDQv9GA0L7Qv9C40YHRjNGOINGB0YLRgNC+0LrQvtC5ICAgIAogICAgJGxhc3ROdW0gPSAkbnVtYmVyICUgMTA7ICAgICAgICAvLyDQv9C+0YHQu9C10LTQvdGP0Y8g0YbQuNGE0YDQsCDRh9C40YHQu9CwICAgIAogICAgJGxhc3RUd29OdW0gPSAkbnVtYmVyICUgMTAwOyAgICAvLyDQv9C+0YHQu9C10LTQvdC40LUg0LTQstC1INGG0LjRhNGA0Ysg0YfQuNGB0LvQsAogICAgCiAgICAgICAKICAgIC8vINC10YHQu9C4INCyINGH0LjRgdC70LUg0LXRgdGC0Ywg0YHQvtGC0L3QuCwg0LTQvtCx0LDQstC70Y/QtdC8INGB0LvQvtCy0L4g0LTQu9GPINGB0L7RgtC10L0KICAgIGlmICgkbnVtYmVyPj0xMDApIHsgICAgICAgIAogICAgICAgICRudW1iZXJzW10gPSAkc3BlbGxpbmdbKGZsb29yKCRudW1iZXIvMTAwKSkqMTAwXTsgICAgICAgIAogICAgfQogICAgaWYgKDExIDw9ICRsYXN0VHdvTnVtICYmICRsYXN0VHdvTnVtIDw9IDE5KSB7IC8vLi4uINGB0LvQvtCy0L4g0LTQu9GPIDExLTE5ICAgICAgICAKICAgICAgICAkbnVtYmVyc1tdID0gJHNwZWxsaW5nWyRsYXN0VHdvTnVtXTsKICAgICAgICAvKgogICAgICAgICAqICDQtdGB0LvQuCDRh9C40YHQu9C+INC80LXQttC00YMgMTEg0LggMTksINGC0L4g0LTQsNC70YzRiNC1INC/0LXRgNC10LjQvNC10L3QvtCy0YvQstCw0YLRjCDQvdC1INC90YPQttC90L4KICAgICAgICAgKiAg0L3QuNC20L3QuNC1INC00LLQtSDRgdGC0YDQvtGH0LrQuCDQutC+0L/QuNC/0LDRgdGC0Y/RgtGB0Y8sINGN0YLQviDQv9C70L7RhdC+PyDQktGC0L7RgNC+0Lkg0LLQsNGA0LjQsNC90YIsINGN0YLQviDQtNC+0LHQsNCy0LjRgtGMCiAgICAgICAgICogIGVsc2Ug0Log0YPRgdC70L7QstC40Y4sINC4INCy0LvQvtC20LjRgtGMINCy0YHQtSDQvdC40LbQtdC40LTRg9GJ0LjQtSDRg9GB0LvQvtCy0LjRjy4KICAgICAgICAgKi8gICAgCiAgICAgICAgJHRleHQgPSBpbXBsb2RlICgiICIsICRudW1iZXJzKTsgLy/RgdC60LvQtdC40LLQsNC10Lwg0YHRgtGA0L7QutGDINC40Lcg0LzQsNGB0YHQuNCy0LAKICAgICAgICByZXR1cm4gJHRleHQ7ICAKICAgIH0gICAgICAgICAKICAgIGlmICgxMCA8PSAkbGFzdFR3b051bSAmJiAkbGFzdFR3b051bSA8PSA5OSkgeyAvLy4uLiDRgdC70L7QstC+INC00LXRgdGP0YLQutC+0LIgICAgICAgIAogICAgICAgICRudW1iZXJzW10gPSAkc3BlbGxpbmdbZmxvb3IoKCRsYXN0VHdvTnVtKS8xMCkqMTBdOwogICAgfSAgICAKICAgIGlmICgxIDw9ICRsYXN0TnVtICYmICRsYXN0TnVtIDw9IDkpIHsgLy8uLi4g0YHQu9C+0LLQviDQtdC00LjQvdC40YYKICAgICAgICAKICAgICAgICBpZiAoKCRsYXN0TnVtID09IDEgfHwgJGxhc3ROdW0gPT0gMikgJiYgJGlzRmVtYWxlPT0xKSB7IC8vLi4uINC20LXQvdGB0LrQuNC5INGA0L7QtCAgICAgICAgIAogICAgICAgICAgICAkbnVtYmVyc1tdID0gJGZlbWFsZVNwZWxsaW5nWyRsYXN0TnVtXTsKICAgICAgICAgICAgCiAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAKICAgICAgICAgICAgICRudW1iZXJzW10gPSAkc3BlbGxpbmdbJGxhc3ROdW1dOyAgCiAgICAgICAgfSAgICAgCiAgICB9CiAgICBpZiAoJG51bWJlcj09MCkgeyAgIC8vLi4uINGB0LvQvtCy0L4g0LTQu9GPINC90YPQu9GPICAgICAKICAgICAgICAkbnVtYmVyc1tdID0gJHNwZWxsaW5nWyRudW1iZXJdOyAgICAgICAgCiAgICB9CiAgICAKICAgIC8v0YHQutC70LXQuNCy0LDQtdC8INGB0YLRgNC+0LrRgyDQuNC3INGB0LvQvtCyCiAgICAkdGV4dCA9IGltcGxvZGUgKCIgIiwgJG51bWJlcnMpOwogICAgcmV0dXJuICR0ZXh0Owp9CgoKZnVuY3Rpb24gbnVtYmVyVG9UZXh0KCRudW1iZXIpIHsKICAgIAogICAgJGkgPSAwOyAgICAgICAgICAgLy8g0YHRh9C10YLRh9C40LosINGB0YPQvNC80LAg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90L3Ri9GFINGH0LDRgdGC0LXQuSDRh9C40YHQu9CwICAgIAogICAgJHJlc3VsdCA9ICIiOyAgICAgLy8g0YfQuNGB0LvQviDQv9GA0L7Qv9C40YHRjNGOINC+0LTQvdC+0Lkg0YHRgtGA0L7QutC+0LkKICAgICRzdHJzID0gYXJyYXkoKTsgIC8vINGA0LDQt9GA0Y/QtNGLINGH0LjRgdC70LAg0L/RgNC+0L/QuNGB0YzRjgogICAgJGJpdCA9IDA7ICAgICAgIC8vINGC0LXQutGD0YnQuNC5INGA0LDQt9GA0Y/QtAogICAgJHdvcmRzID0gYXJyYXkoIAogICAgICAgICAgICAgICAgYXJyYXkoItGA0YPQsdC70YwiLCAi0YDRg9Cx0LvRjyIsICLRgNGD0LHQu9C10LkiKSwKICAgICAgICAgICAgICAgIGFycmF5KCLRgtGL0YHRj9GH0LAiLCAi0YLRi9GB0Y/Rh9C4IiwgItGC0YvRgdGP0YciKSwKICAgICAgICAgICAgICAgIGFycmF5KCLQvNC40LvQu9C40L7QvSIsICLQvNC40LvQu9C40L7QvdCwIiwgItC80LjQu9C70LjQvtC90L7QsiIpCiAgICAgICAgICAgICAgICAgICAgICAgIC8qINC/0YDQvtGB0YLQviDQtNC+0LHQsNCy0Ywg0YDQsNC30YDRj9C0ICovCiAgICAgICAgICAgICAgICApOwogICAgCiAgICBpZiAoJG51bWJlciA9PSAwKSB7IC8vINC10YHQu9C4INGH0LjRgdC70L4gMCwg0YLQviDQstC+0LfQstGA0LDRidCw0LXQvCDRgNC10LfRg9C70YzRgtCw0YIKICAgICAgICByZXR1cm4gItC90L7Qu9GMICgwKSDRgNGD0LHQu9C10LkiOwogICAgICAgIC8vcmV0dXJuIHNtYWxsTnVtYmVyVG9UZXh0KCRudW1iZXIsICRiaXQpIC4gIiAoJG51bWJlcikgIiAuIGluY2xpbmVXb3JkKCRudW1iZXIsICR3b3Jkc1skYml0XVswXSwgJHdvcmRzWyRiaXRdWzFdLCAkd29yZHNbJGJpdF1bMl0pOwogICAgfQogICAgCiAgICAvLyDQtdGB0LvQuCDRh9C40YHQu9C+ID4gMAogICAgLy8g0L/RgNC+0LTQvtC70LbQsNC10Lwg0L/QvtC60LAg0YHRg9C80LzQsCDQstGB0LXRhSDQv9C10YDQtdC40LzQtdC90L7QstCw0L3QvdGL0YUg0YfQsNGB0YLQtdC5INGH0LjRgdC70LAgPCDQuNGB0YXQvtC00L3QvtC1INGH0LjRgdC70L4gIAogICAgd2hpbGUgKCRpIDwgJG51bWJlcikgewogICAgICAgIAogICAgICAgIC8vINCx0LXRgNC10Lwg0L/QviDQvtGH0LXRgNC10LTQuCDRh9Cw0YHRgtGMINGH0LjRgdC70LAgKDMg0YDQsNC30YDRj9C00LAg0L3QsNGH0LjQvdCw0Y8g0YHQv9GA0LDQstCwKQogICAgICAgICRwaWVjZU51bWJlciA9IGZsb29yKGludHZhbCgkbnVtYmVyLyhwb3coMTAwMCwgJGJpdCkpKSkgJSAxMDAwOyAKICAgCiAgICAgICAgLy8g0LXRgdC70Lgg0LIg0YDQsNC30YDRj9C00LUg0LXQtNC40L3QuNGGLdC00LXRgdGP0YLQutC+0LIt0YHQvtGC0LXQvSDQstGB0LUg0L3Rg9C70LggCiAgICAgICAgaWYgKCRwaWVjZU51bWJlciA9PSAwICYmICRiaXQgPT0gMCkgewogICAgICAgICAgICAKICAgICAgICAgICAgLy8g0YHQutC70L7QvdGP0LXQvCDRgdC70L7QstC+ICLRgNGD0LHQu9GMIgogICAgICAgICAgICAkc3Ryc1tdID0gIigkbnVtYmVyKSAiIC4gaW5jbGluZVdvcmQoJG51bWJlciwgJHdvcmRzWyRiaXRdWzBdLCAkd29yZHNbJGJpdF1bMV0sICR3b3Jkc1skYml0XVsyXSk7CiAgICAgICAgfSAgICAgICAgIAogICAgICAgIAogICAgICAgIC8vINC10YHQu9C4INCyINGA0LDQt9GA0Y/QtNC1INC90LUg0YLQvtC70YzQutC+INC90YPQu9C4CiAgICAgICAgaWYgKCRwaWVjZU51bWJlciA+IDApIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vINGB0LrQu9C+0L3Rj9C10Lwg0L3QsNC30LLQsNC90LjQtSDRgNCw0LfRgNGP0LTQsAogICAgICAgICAgICAkd29yZCA9IGluY2xpbmVXb3JkKCRwaWVjZU51bWJlciwgJHdvcmRzWyRiaXRdWzBdLCAkd29yZHNbJGJpdF1bMV0sICR3b3Jkc1skYml0XVsyXSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyDQtNC+0LHQsNCy0LvRj9C10Lwg0YfQuNGB0LvQviDRhtC40YTRgNCw0LzQuCDQv9C10YDQtdC0ICLRgNGD0LHQu9C10LkiCiAgICAgICAgICAgIGlmICgkYml0ID09IDApIHsKICAgICAgICAgICAgICAgICRudW0gPSAiICgkbnVtYmVyKSAiOyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRudW0gPSAiICI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vINC+0YLQv9GA0LDQstC70Y/QtdC8INGH0LjRgdC70L4g0L3QsCDQv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNC1INC4INC00L7QsdCw0LLQu9GP0LXQvCDQvdCw0LfQstCw0L3QuNC1INGA0LDQt9GA0Y/QtNCwIAogICAgICAgICAgICAkc3Ryc1tdID0gc21hbGxOdW1iZXJUb1RleHQoJHBpZWNlTnVtYmVyLCAkYml0KSAuICRudW0gLiAkd29yZDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8g0YHRg9C80LzQuNGA0YPQtdC8INC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC90YvQtSDRh9Cw0YHRgtC4INGH0LjRgdC70LAgKNGB0YfQtdGC0YfQuNC6KQogICAgICAgICRpICs9ICRwaWVjZU51bWJlcioocG93KDEwMDAsICRiaXQpKTsKICAgICAgICAKICAgICAgICAvLyDRg9Cy0LXQu9C40YfQuNCy0LDQtdC8INGC0LXQutGD0YnQuNC5INGA0LDQt9GA0Y/QtCAgIAogICAgICAgICRiaXQrKzsgICAgICAgIAogICAgfQogICAgCiAgICAvLyDRgdC60LvQtdC40LLQsNC10Lwg0YDQtdC30YPQu9GM0YLQsNGCINCyINC+0LTQvdGDINGB0YLRgNC+0LrRgwogICAgJHJlc3VsdCA9IGltcGxvZGUgKCIgIiwgYXJyYXlfcmV2ZXJzZSgkc3RycykpOwogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCi8vINCS0YvQt9C+0LLQtdC8INGE0YPQvdC60YbQuNGOINC90LXRgdC60L7Qu9GM0LrQviDRgNCw0LcgCiRhbW91bnQxID0gMDsKJHRleHQxID0gbnVtYmVyVG9UZXh0KCRhbW91bnQxKTsKIAplY2hvICLQndCwINCy0LDRiNC10Lwg0YHRh9C10YLRgyB7JHRleHQxfVxuIjsKIAokYW1vdW50MiA9IG10X3JhbmQoMSw5OTk5OTk5OSk7CiR0ZXh0MiA9IG51bWJlclRvVGV4dCgkYW1vdW50Mik7CiAKZWNobyAi0J3QsCDQstCw0YjQtdC8INGB0YfQtdGC0YMgeyR0ZXh0Mn1cbiI7CiAKJGFtb3VudDMgPSBtdF9yYW5kKDEsOTk5OTk5OTkpOwokdGV4dDMgPSBudW1iZXJUb1RleHQoJGFtb3VudDMpOwogCmVjaG8gItCd0LAg0LLQsNGI0LXQvCDRgdGH0LXRgtGDIHskdGV4dDN9XG4iOwogCiRhbW91bnQ0ID0gbXRfcmFuZCgxLDk5OTk5OTk5KTsKJHRleHQ0ID0gbnVtYmVyVG9UZXh0KCRhbW91bnQ0KTsKIAplY2hvICLQndCwINCy0LDRiNC10Lwg0YHRh9C10YLRgyB7JHRleHQ0fVxuIjsKCj8+