<?php
/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
function inclineWord( $number , $word1 , $word2 , $word5 ) {
return $word1 ;
elseif ( preg_match ( '/([^1][2-4]|^[2-4])$/' , $number ) == TRUE ) //в зависимости от последних знаков, подбирается подходящее слово return $word2 ;
elseif ( preg_match ( '/(.?[05-9]|1\d)$/' , $number ) == TRUE ) return $word5 ;
}
/*
Преобразует числа от 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 => 'девятнадцать' , 'null' => '' /* null - специальный ключ на случай если нет необходимости писать прописью, к примеру, ноль тысяч */
) ;
1 => 'одна' , 2 => 'две'
) ;
if ( $isFemale == 1 ) //на случай, если речь зайдет о тысячах и нужно будет употребить 'одна', а не 'один'
$spelling = array_replace( $spelling , $femaleSpelling ) ;
if ( preg_match ( '/^(000)$/' , $number ) == TRUE ) //если где-то в середине затерялось 3 нолика и их не нужно озвучивать $result = $spelling [ 'null' ] ;
elseif ( preg_match ( '/^(000)$/' , $number ) == FALSE ) { //тут уже раскладываем число по словам settype ( $number , "integer" ) ; //ибо для удобства числа в функцию залетают в виде строк, исправляем это $preparationArray = array ( ) ; //то, куда будем все складывать
if ( array_key_exists ( $number , $spelling ) == TRUE ) { //в случае обнаружения входного числа в массиве $preparationArray [ ] = $spelling [ $number ] ;
} elseif ( array_key_exists ( $number , $spelling ) == FALSE ) { //тут сами раскладываем число
if ( $number > 99 ) {
$hundreds = floor ( $number / 100 ) * 100 ; $decades = $number % 100 ;
$numbers = $decades % 10 ;
if ( array_key_exists ( $decades , $spelling ) == TRUE && $decades > 9 ) //не будем дописывать единицы в этом случае $numbers = 'null' ;
elseif ( $decades >= 0 ) { //расписываем десятки и числа сами
$decades -= $numbers ;
elseif ( $decades < 10 )
$decades = 'null' ;
}
} elseif ( $number <= 99 ) {
$nundreds = 'null' ;
$decades = floor ( $number / 10 ) * 10 ; $numbers = $number - $decades ;
if ( $number < 10 ) //в случае если второй знак в номере будет меньше 1, десятки не прописываются
$decades = 'null' ;
}
array_push ( $preparationArray , $spelling [ $hundreds ] , $spelling [ $decades ] , $spelling [ $numbers ] ) ; $preparationArray = array_diff ( $preparationArray , array ( '' ) ) ; //очищаем массив от пустых элементов, избегая лишних пробелов }
$result = implode ( ' ' , $preparationArray ) ; //склеиваем элементы конечного массива слов пробелами }
return $result ;
}
function numberToText( $number ) {
$preparationArray = array ( ) ;
if ( $number > 999999 ) {
$millions = smallNumberToText( $millionsPrep , 0 ) . ' ' . inclineWord( $millionsPrep , 'миллион' , 'миллиона' , 'миллионов' ) ;
$preparationArray [ ] = $millions ;
}
if ( $number > 999 ) {
if ( intval ( $thousandsPrep ) > 0 ) { //если тысяч будет больше, чем 0, то мы выведем слова, а иначе зачем это делать? $thousands = smallNumberToText( $thousandsPrep , 1 ) . ' ' . inclineWord( $thousandsPrep , 'тысяча' , 'тысячи' , 'тысяч' ) ;
$preparationArray [ ] = $thousands ;
}
}
if ( $number >= 0 ) {
if ( $number > 999 ) {
} elseif ( $number <= 999 ) {
$numbersPrep = $number ;
}
$numbers = smallNumberToText( $numbersPrep , 0 ) . ' ' . inclineWord( $numbersPrep , 'рубль' , 'рубля' , 'рублей' ) . ' ' . "({$number} )" ;
$preparationArray [ ] = $numbers ;
}
$result = implode ( ' ' , $preparationArray ) ; return $result ;
}
/* Вызовем функцию несколько раз */
$amount1 = 999999999 ;
$text1 = numberToText( $amount1 ) ;
echo "На вашем счету {$text1} \n " ;
$amount2 = 0 ;
$text2 = numberToText( $amount2 ) ;
echo "На вашем счету {$text2} \n " ;
$amount3 = 1 ;
$text3 = numberToText( $amount3 ) ;
echo "На вашем счету {$text3} \n " ;
$amount4 = 11012013 ;
$text4 = numberToText( $amount4 ) ;
echo "На вашем счету {$text4} \n " ;
$amount5 = 7000008 ;
$text5 = numberToText( $amount5 ) ;
echo "На вашем счету {$text5} \n " ;
$amount6 = 1002 ;
$text6 = numberToText( $amount6 ) ;
echo "На вашем счету {$text6} \n " ;
$amount7 = 1000 ;
$text7 = numberToText( $amount7 ) ;
echo "На вашем счету {$text7} \n " ;
$amount8 = 7000000 ;
$text8 = numberToText( $amount8 ) ;
echo "На вашем счету {$text8} \n " ;
$amount9 = 4160 ;
$text9 = numberToText( $amount9 ) ;
echo "На вашем счету {$text9} \n " ;
PD9waHAKCi8qINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGJ0YPRjiDRh9C40YHQu9GDINGE0L7RgNC80YMg0YHQu9C+0LLQsDogMSDRgNGD0LHQu9GMLCAyINGA0YPQsdC70Y8sIDUg0YDRg9Cx0LvQtdC5ICovCmZ1bmN0aW9uIGluY2xpbmVXb3JkKCRudW1iZXIsICR3b3JkMSwgJHdvcmQyLCAkd29yZDUpIHsKCiAgICBpZiAocHJlZ19tYXRjaCgnLyheMXxbXjFdMSkkLycsICRudW1iZXIpID09IFRSVUUpCiAgICAgICAgcmV0dXJuICR3b3JkMTsKICAgIGVsc2VpZiAocHJlZ19tYXRjaCgnLyhbXjFdWzItNF18XlsyLTRdKSQvJywgJG51bWJlcikgPT0gVFJVRSkgLy/QsiDQt9Cw0LLQuNGB0LjQvNC+0YHRgtC4INC+0YIg0L/QvtGB0LvQtdC00L3QuNGFINC30L3QsNC60L7Qsiwg0L/QvtC00LHQuNGA0LDQtdGC0YHRjyDQv9C+0LTRhdC+0LTRj9GJ0LXQtSDRgdC70L7QstC+CiAgICAgICAgcmV0dXJuICR3b3JkMjsKICAgIGVsc2VpZiAocHJlZ19tYXRjaCgnLyguP1swNS05XXwxXGQpJC8nLCAkbnVtYmVyKSA9PSBUUlVFKQogICAgICAgIHJldHVybiAkd29yZDU7Cn0KCi8qIAogICAg0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDRh9C40YHQu9CwINC+0YIgMCDQtNC+IDk5OSDQsiDRgtC10LrRgdGCLiDQn9Cw0YDQsNC80LXRgtGAICRpc0ZlbWFsZSDRgNCw0LLQtdC9INC90YPQu9GOLCAKICAgINC10YHQu9C4INC80Ysg0YHRh9C40YLQsNC10Lwg0YfQuNGB0LvQviDQtNC70Y8g0LzRg9C20YHQutC+0LPQviDRgNC+0LTQsCAo0L7QtNC40L0g0YDRg9Cx0LvRjCksIAogICAg0LggMSDigJQg0LTQu9GPINC20LXQvdGB0LrQvtCz0L4gKNC+0LTQvdCwINGC0YvRgdGP0YfQsCkgCiovCmZ1bmN0aW9uIHNtYWxsTnVtYmVyVG9UZXh0KCRudW1iZXIsICRpc0ZlbWFsZSkgewoKICAgICRzcGVsbGluZyA9IGFycmF5KAogICAgICAgIDAgICA9PiAgJ9C90L7Qu9GMJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgID0+ICAn0LTQtdGB0Y/RgtGMJywgICAgICAgMTAwID0+ICAn0YHRgtC+JywKICAgICAgICAxICAgPT4gICfQvtC00LjQvScsICAgICAgICAgMTEgID0+ICAn0L7QtNC40L3QvdCw0LTRhtCw0YLRjCcsICAgICAgMjAgID0+ICAn0LTQstCw0LTRhtCw0YLRjCcsICAgICAyMDAgPT4gICfQtNCy0LXRgdGC0LgnLAogICAgICAgIDIgICA9PiAgJ9C00LLQsCcsICAgICAgICAgIDEyICA9PiAgJ9C00LLQtdC90LDQtNGG0LDRgtGMJywgICAgICAgMzAgID0+ICAn0YLRgNC40LTRhtCw0YLRjCcsICAgICAzMDAgPT4gICfRgtGA0LjRgdGC0LAnLAogICAgICAgIDMgICA9PiAgJ9GC0YDQuCcsICAgICAgICAgIDEzICA9PiAgJ9GC0YDQuNC90LDQtNGG0LDRgtGMJywgICAgICAgNDAgID0+ICAn0YHQvtGA0L7QuicsICAgICAgICA0MDAgPT4gICfRh9C10YLRi9GA0LXRgdGC0LAnLAogICAgICAgIDQgICA9PiAgJ9GH0LXRgtGL0YDQtScsICAgICAgIDE0ICA9PiAgJ9GH0LXRgtGL0YDQvdCw0LTRhtCw0YLRjCcsICAgICA1MCAgPT4gICfQv9GP0YLRjNC00LXRgdGP0YInLCAgICA1MDAgPT4gICfQv9GP0YLRjNGB0L7RgicsCiAgICAgICAgNSAgID0+ICAn0L/Rj9GC0YwnLCAgICAgICAgIDE1ICA9PiAgJ9C/0Y/RgtC90LDQtNGG0LDRgtGMJywgICAgICAgNjAgID0+ICAn0YjQtdGB0YLRjNC00LXRgdGP0YInLCAgIDYwMCA9PiAgJ9GI0LXRgdGC0YzRgdC+0YInLAogICAgICAgIDYgICA9PiAgJ9GI0LXRgdGC0YwnLCAgICAgICAgMTYgID0+ICAn0YjQtdGB0YLQvdCw0LTRhtCw0YLRjCcsICAgICAgNzAgID0+ICAn0YHQtdC80YzQtNC10YHRj9GCJywgICAgNzAwID0+ICAn0YHQtdC80YzRgdC+0YInLCAgICAKICAgICAgICA3ICAgPT4gICfRgdC10LzRjCcsICAgICAgICAgMTcgID0+ICAn0YHQtdC80L3QsNC00YbQsNGC0YwnLCAgICAgICA4MCAgPT4gICfQstC+0YHQtdC80YzQtNC10YHRj9GCJywgICA4MDAgPT4gICfQstC+0YHQtdC80YzRgdC+0YInLAogICAgICAgIDggICA9PiAgJ9Cy0L7RgdC10LzRjCcsICAgICAgIDE4ICA9PiAgJ9Cy0L7RgdC10LzQvdCw0LTRhtCw0YLRjCcsICAgICA5MCAgPT4gICfQtNC10LLRj9C90L7RgdGC0L4nLCAgICAgOTAwID0+ICAn0LTQtdCy0Y/RgtGM0YHQvtGCJywKICAgICAgICA5ICAgPT4gICfQtNC10LLRj9GC0YwnLCAgICAgICAxOSAgPT4gICfQtNC10LLRj9GC0L3QsNC00YbQsNGC0YwnLCAgICAgICdudWxsJyA9PiAnJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBudWxsIC0g0YHQv9C10YbQuNCw0LvRjNC90YvQuSDQutC70Y7RhyDQvdCwINGB0LvRg9GH0LDQuSDQtdGB0LvQuCDQvdC10YIg0L3QtdC+0LHRhdC+0LTQuNC80L7RgdGC0Lgg0L/QuNGB0LDRgtGMINC/0YDQvtC/0LjRgdGM0Y4sINC6INC/0YDQuNC80LXRgNGDLCDQvdC+0LvRjCDRgtGL0YHRj9GHICAqLwogICAgKTsKICAgIAogICAgJGZlbWFsZVNwZWxsaW5nID0gYXJyYXkoCiAgICAgICAgMSAgID0+ICAn0L7QtNC90LAnLCAgICAgICAgMiAgID0+ICAn0LTQstC1JwogICAgKTsKICAgIAogICAgaWYgKCRpc0ZlbWFsZSA9PSAxKSAvL9C90LAg0YHQu9GD0YfQsNC5LCDQtdGB0LvQuCDRgNC10YfRjCDQt9Cw0LnQtNC10YIg0L4g0YLRi9GB0Y/Rh9Cw0YUg0Lgg0L3Rg9C20L3QviDQsdGD0LTQtdGCINGD0L/QvtGC0YDQtdCx0LjRgtGMICfQvtC00L3QsCcsINCwINC90LUgJ9C+0LTQuNC9JwogICAgICAgICRzcGVsbGluZyA9IGFycmF5X3JlcGxhY2UoJHNwZWxsaW5nLCAkZmVtYWxlU3BlbGxpbmcpOwoKICAgIGlmIChwcmVnX21hdGNoKCcvXigwMDApJC8nLCAkbnVtYmVyKSA9PSBUUlVFKSAvL9C10YHQu9C4INCz0LTQtS3RgtC+INCyINGB0LXRgNC10LTQuNC90LUg0LfQsNGC0LXRgNGP0LvQvtGB0YwgMyDQvdC+0LvQuNC60LAg0Lgg0LjRhSDQvdC1INC90YPQttC90L4g0L7Qt9Cy0YPRh9C40LLQsNGC0YwKICAgICAgICAkcmVzdWx0ID0gJHNwZWxsaW5nWydudWxsJ107CiAgICBlbHNlaWYgKHByZWdfbWF0Y2goJy9eKDAwMCkkLycsICRudW1iZXIpID09IEZBTFNFKSB7IC8v0YLRg9GCINGD0LbQtSDRgNCw0YHQutC70LDQtNGL0LLQsNC10Lwg0YfQuNGB0LvQviDQv9C+INGB0LvQvtCy0LDQvAogICAgICAgIHNldHR5cGUoJG51bWJlciwgImludGVnZXIiKTsgLy/QuNCx0L4g0LTQu9GPINGD0LTQvtCx0YHRgtCy0LAg0YfQuNGB0LvQsCDQsiDRhNGD0L3QutGG0LjRjiDQt9Cw0LvQtdGC0LDRjtGCINCyINCy0LjQtNC1INGB0YLRgNC+0LosINC40YHQv9GA0LDQstC70Y/QtdC8INGN0YLQvgogICAgICAgICRwcmVwYXJhdGlvbkFycmF5ID0gYXJyYXkoKTsgLy/RgtC+LCDQutGD0LTQsCDQsdGD0LTQtdC8INCy0YHQtSDRgdC60LvQsNC00YvQstCw0YLRjAoKICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygkbnVtYmVyLCAkc3BlbGxpbmcpID09IFRSVUUpIHsgLy/QsiDRgdC70YPRh9Cw0LUg0L7QsdC90LDRgNGD0LbQtdC90LjRjyDQstGF0L7QtNC90L7Qs9C+INGH0LjRgdC70LAg0LIg0LzQsNGB0YHQuNCy0LUKICAgICAgICAgICAgJHByZXBhcmF0aW9uQXJyYXlbXSA9ICRzcGVsbGluZ1skbnVtYmVyXTsKICAgICAgICB9IGVsc2VpZiAoYXJyYXlfa2V5X2V4aXN0cygkbnVtYmVyLCAkc3BlbGxpbmcpID09IEZBTFNFKSB7IC8v0YLRg9GCINGB0LDQvNC4INGA0LDRgdC60LvQsNC00YvQstCw0LXQvCDRh9C40YHQu9C+CgogICAgICAgICAgICBpZiAoJG51bWJlciA+IDk5KSB7CiAgICAgICAgICAgICAgICAkaHVuZHJlZHMgPSBmbG9vcigkbnVtYmVyIC8gMTAwKSAqIDEwMDsKICAgICAgICAgICAgICAgICRkZWNhZGVzID0gJG51bWJlciAlIDEwMDsKICAgICAgICAgICAgICAgICRudW1iZXJzID0gJGRlY2FkZXMgJSAxMDsKCiAgICAgICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygkZGVjYWRlcywgJHNwZWxsaW5nKSA9PSBUUlVFICYmICRkZWNhZGVzID4gOSkgLy/QvdC1INCx0YPQtNC10Lwg0LTQvtC/0LjRgdGL0LLQsNGC0Ywg0LXQtNC40L3QuNGG0Ysg0LIg0Y3RgtC+0Lwg0YHQu9GD0YfQsNC1CiAgICAgICAgICAgICAgICAgICAgJG51bWJlcnMgPSAnbnVsbCc7CiAgICAgICAgICAgICAgICBlbHNlaWYgKCRkZWNhZGVzID49IDApIHsgLy/RgNCw0YHQv9C40YHRi9Cy0LDQtdC8INC00LXRgdGP0YLQutC4INC4INGH0LjRgdC70LAg0YHQsNC80LgKCiAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJGRlY2FkZXMsICRzcGVsbGluZykgPT0gRkFMU0UpCiAgICAgICAgICAgICAgICAgICAgICAgICRkZWNhZGVzIC09ICRudW1iZXJzOwogICAgICAgICAgICAgICAgICAgIGVsc2VpZiAoJGRlY2FkZXMgPCAxMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRlY2FkZXMgPSAnbnVsbCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZWlmICgkbnVtYmVyIDw9IDk5KSB7CiAgICAgICAgICAgICAgICAkbnVuZHJlZHMgPSAnbnVsbCc7ICAgICAKICAgICAgICAgICAgICAgICRkZWNhZGVzID0gZmxvb3IoJG51bWJlciAvIDEwKSAqIDEwOwogICAgICAgICAgICAgICAgJG51bWJlcnMgPSAkbnVtYmVyIC0gJGRlY2FkZXM7CgogICAgICAgICAgICAgICAgaWYgKCRudW1iZXIgPCAxMCkgLy/QsiDRgdC70YPRh9Cw0LUg0LXRgdC70Lgg0LLRgtC+0YDQvtC5INC30L3QsNC6INCyINC90L7QvNC10YDQtSDQsdGD0LTQtdGCINC80LXQvdGM0YjQtSAxLCDQtNC10YHRj9GC0LrQuCDQvdC1INC/0YDQvtC/0LjRgdGL0LLQsNGO0YLRgdGPCiAgICAgICAgICAgICAgICAgICAgJGRlY2FkZXMgPSAnbnVsbCc7CiAgICAgICAgICAgIH0gCiAgICAgICAgICAgIGFycmF5X3B1c2goJHByZXBhcmF0aW9uQXJyYXksICRzcGVsbGluZ1skaHVuZHJlZHNdLCAkc3BlbGxpbmdbJGRlY2FkZXNdLCAkc3BlbGxpbmdbJG51bWJlcnNdKTsKICAgICAgICAgICAgJHByZXBhcmF0aW9uQXJyYXkgPSBhcnJheV9kaWZmKCRwcmVwYXJhdGlvbkFycmF5LCBhcnJheSgnJykpOyAvL9C+0YfQuNGJ0LDQtdC8INC80LDRgdGB0LjQsiDQvtGCINC/0YPRgdGC0YvRhSDRjdC70LXQvNC10L3RgtC+0LIsINC40LfQsdC10LPQsNGPINC70LjRiNC90LjRhSDQv9GA0L7QsdC10LvQvtCyCiAgICAgICAgfQogICAgICAgICRyZXN1bHQgPSBpbXBsb2RlKCcgJywgJHByZXBhcmF0aW9uQXJyYXkpOyAvL9GB0LrQu9C10LjQstCw0LXQvCDRjdC70LXQvNC10L3RgtGLINC60L7QvdC10YfQvdC+0LPQviDQvNCw0YHRgdC40LLQsCDRgdC70L7QsiDQv9GA0L7QsdC10LvQsNC80LgKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgpmdW5jdGlvbiBudW1iZXJUb1RleHQoJG51bWJlcikgewogICAgCiAgICAkcHJlcGFyYXRpb25BcnJheSA9IGFycmF5KCk7CiAgICAkbnVtYmVyID0gc3RydmFsKCRudW1iZXIpOwoKICAgIGlmICgkbnVtYmVyID4gOTk5OTk5KSB7CiAgICAgICAgJG1pbGxpb25zUHJlcCA9IG1iX3N1YnN0cigkbnVtYmVyLCAwLCAtNik7CiAgICAgICAgJG1pbGxpb25zID0gc21hbGxOdW1iZXJUb1RleHQoJG1pbGxpb25zUHJlcCwgMCkgLiAnICcgLiBpbmNsaW5lV29yZCgkbWlsbGlvbnNQcmVwLCAn0LzQuNC70LvQuNC+0L0nLCAn0LzQuNC70LvQuNC+0L3QsCcsICfQvNC40LvQu9C40L7QvdC+0LInKTsKICAgICAgICAkcHJlcGFyYXRpb25BcnJheVtdID0gJG1pbGxpb25zOwogICAgfQoKICAgIGlmICgkbnVtYmVyID4gOTk5KSB7CiAgICAgICAgJHRob3VzYW5kc1ByZXAgPSBtYl9zdWJzdHIoJG51bWJlciwgLTYsIC0zKTsgCiAgICAgICAgaWYgKGludHZhbCgkdGhvdXNhbmRzUHJlcCkgPiAwKSB7IC8v0LXRgdC70Lgg0YLRi9GB0Y/RhyDQsdGD0LTQtdGCINCx0L7Qu9GM0YjQtSwg0YfQtdC8IDAsINGC0L4g0LzRiyDQstGL0LLQtdC00LXQvCDRgdC70L7QstCwLCDQsCDQuNC90LDRh9C1INC30LDRh9C10Lwg0Y3RgtC+INC00LXQu9Cw0YLRjD8KICAgICAgICAgICAgJHRob3VzYW5kcyA9IHNtYWxsTnVtYmVyVG9UZXh0KCR0aG91c2FuZHNQcmVwLCAxKSAuICcgJyAuIGluY2xpbmVXb3JkKCR0aG91c2FuZHNQcmVwLCAn0YLRi9GB0Y/Rh9CwJywgJ9GC0YvRgdGP0YfQuCcsICfRgtGL0YHRj9GHJyk7CiAgICAgICAgICAgICRwcmVwYXJhdGlvbkFycmF5W10gPSAkdGhvdXNhbmRzOwogICAgICAgIH0gICAgICAgCiAgICB9CgogICAgaWYgKCRudW1iZXIgPj0gMCkgewogICAgICAgIGlmICgkbnVtYmVyID4gOTk5KSB7CiAgICAgICAgICAgICRudW1iZXJzUHJlcCA9IG1iX3N1YnN0cigkbnVtYmVyLCAtMyk7CiAgICAgICAgfSBlbHNlaWYgKCRudW1iZXIgPD0gOTk5KSB7CiAgICAgICAgICAgICRudW1iZXJzUHJlcCA9ICRudW1iZXI7CiAgICAgICAgfQogICAgICAgICRudW1iZXJzID0gc21hbGxOdW1iZXJUb1RleHQoJG51bWJlcnNQcmVwLCAwKSAuICcgJyAuIGluY2xpbmVXb3JkKCRudW1iZXJzUHJlcCwgJ9GA0YPQsdC70YwnLCAn0YDRg9Cx0LvRjycsICfRgNGD0LHQu9C10LknKSAuICcgJyAuICAiKHskbnVtYmVyfSkiOwogICAgICAgICRwcmVwYXJhdGlvbkFycmF5W10gPSAkbnVtYmVyczsKICAgIH0KICAgICRyZXN1bHQgPSBpbXBsb2RlKCcgJywgJHByZXBhcmF0aW9uQXJyYXkpOwogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKiDQktGL0LfQvtCy0LXQvCDRhNGD0L3QutGG0LjRjiDQvdC10YHQutC+0LvRjNC60L4g0YDQsNC3ICovCiRhbW91bnQxID0gOTk5OTk5OTk5OwokdGV4dDEgPSBudW1iZXJUb1RleHQoJGFtb3VudDEpOwogCmVjaG8gItCd0LAg0LLQsNGI0LXQvCDRgdGH0LXRgtGDIHskdGV4dDF9XG4iOwogCiRhbW91bnQyID0gMDsKJHRleHQyID0gbnVtYmVyVG9UZXh0KCRhbW91bnQyKTsKIAplY2hvICLQndCwINCy0LDRiNC10Lwg0YHRh9C10YLRgyB7JHRleHQyfVxuIjsKIAokYW1vdW50MyA9IDE7CiR0ZXh0MyA9IG51bWJlclRvVGV4dCgkYW1vdW50Myk7CiAKZWNobyAi0J3QsCDQstCw0YjQtdC8INGB0YfQtdGC0YMgeyR0ZXh0M31cbiI7CiAKJGFtb3VudDQgPSAxMTAxMjAxMzsKJHRleHQ0ID0gbnVtYmVyVG9UZXh0KCRhbW91bnQ0KTsKIAplY2hvICLQndCwINCy0LDRiNC10Lwg0YHRh9C10YLRgyB7JHRleHQ0fVxuIjsKCiRhbW91bnQ1ID0gNzAwMDAwODsKJHRleHQ1ID0gbnVtYmVyVG9UZXh0KCRhbW91bnQ1KTsKIAplY2hvICLQndCwINCy0LDRiNC10Lwg0YHRh9C10YLRgyB7JHRleHQ1fVxuIjsKCiRhbW91bnQ2ID0gMTAwMjsKJHRleHQ2ID0gbnVtYmVyVG9UZXh0KCRhbW91bnQ2KTsKIAplY2hvICLQndCwINCy0LDRiNC10Lwg0YHRh9C10YLRgyB7JHRleHQ2fVxuIjsKCiRhbW91bnQ3ID0gMTAwMDsKJHRleHQ3ID0gbnVtYmVyVG9UZXh0KCRhbW91bnQ3KTsKIAplY2hvICLQndCwINCy0LDRiNC10Lwg0YHRh9C10YLRgyB7JHRleHQ3fVxuIjsKCiRhbW91bnQ4ID0gNzAwMDAwMDsKJHRleHQ4ID0gbnVtYmVyVG9UZXh0KCRhbW91bnQ4KTsKIAplY2hvICLQndCwINCy0LDRiNC10Lwg0YHRh9C10YLRgyB7JHRleHQ4fVxuIjsKCiRhbW91bnQ5ID0gNDE2MDsKJHRleHQ5ID0gbnVtYmVyVG9UZXh0KCRhbW91bnQ5KTsKIAplY2hvICLQndCwINCy0LDRiNC10Lwg0YHRh9C10YLRgyB7JHRleHQ5fVxuIjs=