<?php
/*Глобальная функция, которая получает число $n и возвращает текстовую форму написания суммы*/
function summ_to_text ( $n ) {
/*Эта функция разбивает число на группы трехзначных чисел*/
function splittingIntoGroups ( $n ) {
$splitArray = [ ] ;
for ( $i = $n ; $i >= 1 ; $i = $i + 0 ) {
$i = $i / 1000 ;
$splitArray [ ] = $t ;
}
return $splitArray ;
}
/*Эта функция определяет правильную форму имени разряда суммы для числа $dischargeValue из ячейки $x массива $dischargeArray*/
function discharge_sum ( $dischargeValue , $x ) {
$dischargeArray = [ 'roubles' => [ 'рубль' , 'рубля' , 'рублей' ] ,
'thousand' => [ 'тысяча' , 'тысячи' , 'тысяч' ] ,
'million' => [ 'миллион' , 'миллиона' , 'миллионов' ]
] ;
$regexpLastNumber1 = '/^[1]$/' ;
$regexpLastNumber2to4 = '/^[0]?[0]?[2-4]$/' ;
$regexpLastNumber10to19 = '/[0-9]?[1][0-9]$/' ;
$regexpLastNumberX1 = '/[0-9]?[0,2-9][1]$/' ;
$regexpLastNumberX2toX4 = '/[0-9]?[0,2-9][2-4]$/' ;
if ( preg_match ( $regexpLastNumber1 , $dischargeValue ) ) { $wordAfterN = $dischargeArray [ $x ] [ 0 ] ;
}
elseif ( preg_match ( $regexpLastNumber2to4 , $dischargeValue ) ) { $wordAfterN = $dischargeArray [ $x ] [ 1 ] ;
}
elseif ( preg_match ( $regexpLastNumber10to19 , $dischargeValue ) ) { $wordAfterN = $dischargeArray [ $x ] [ 2 ] ;
}
elseif ( preg_match ( $regexpLastNumberX1 , $dischargeValue ) ) { $wordAfterN = $dischargeArray [ $x ] [ 0 ] ;
}
elseif ( preg_match ( $regexpLastNumberX2toX4 , $dischargeValue ) ) { $wordAfterN = $dischargeArray [ $x ] [ 1 ] ;
}
elseif ( $dischargeValue == null ) {
$wordAfterN = '' ;
}
else {
$wordAfterN = $dischargeArray [ $x ] [ 2 ] ;
}
return $wordAfterN ;
}
/*Эта функция возвращает написание трехзначных чисел из массива прописью*/
function smallNumberToText ( $spelN ) {
$spelling = [ 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 => 'девятнадцать' ] ;
$regexp1to9 = '/[0-9]?[0-9]?[1-9]$/' ;
$regexp10to19 = '/[0-9]?[1][0-9]$/' ;
$regexp20to90 = '/[0-9]?[2-9][0-9]$/' ;
$regexp100to900 = '/[1-9][0-9][0-9]$/' ;
$text = null ;
foreach ( $spelN as $n ) {
$numberInWords = '' ;
$x = ( $n % 100 ) % 10 ;
$numberInWords = $spelling [ $x ] . ' ' ;
}
$numberInWords = $spelling [ $y ] . ' ' ;
}
$z = ( floor ( $n % 100 / 10 ) ) * 10 ; $numberInWords = $spelling [ $z ] . ' ' . $numberInWords . ' ' ;
}
$numberInWords = $spelling [ $w ] . ' ' . $numberInWords . '' ;
}
$textArray [ ] = $numberInWords ;
}
return $textArray ;
}
/*Эта функция меняет фразы "один тысяча" и "две тысяча" на "одна тысяча" и "две тысячи" соответственно*/
function correct_thousand ( $arrayN ) {
$regexp1thousand = '/один\\s/ui' ;
$regexp2thousand = '/два\\s/ui' ;
$arrayN [ 1 ] = preg_replace ( $regexp1thousand , 'одна ' , $arrayN [ 1 ] ) ; $arrayN [ 1 ] = preg_replace ( $regexp2thousand , 'две ' , $arrayN [ 1 ] ) ; return ( $arrayN ) ;
}
/*Эта функция удаляет лишние пробелы, которые появляются в случае отсутствия разрядов миллионов и тысяч*/
function delete_double_space ( $textForDeleteSpace ) {
$regexpDoubleSpace = '/(\\s){2,}/ui' ;
$textAfterDeleteDoubleSpace = preg_replace ( $regexpDoubleSpace , ' ' , $textForDeleteSpace ) ; return $textAfterDeleteDoubleSpace ;
}
/*Получаем массив трехзначных чисел*/
$splitArray = splittingIntoGroups ( $n ) ;
/*Создаем массив для записи имен разрядов*/
$dischargeArraySpelN = [ 'roubles' => null , 'thousand' => null , 'million' => null ] ;
/*Определяем правильные имена разрядов и поочередно записываем их в массив*/
$wordAfterRoubles = discharge_sum( $splitArray [ 0 ] , 'roubles' ) ;
if ( $splitArray [ 0 ] == 0 ) {
$wordAfterRoubles = 'рублей' ;
}
$dischargeArraySpelN [ roubles] = $wordAfterRoubles ;
$wordAfterThousand = discharge_sum( $splitArray [ 1 ] , 'thousand' ) ;
$dischargeArraySpelN [ thousand] = $wordAfterThousand ;
$wordAfterMillion = discharge_sum( $splitArray [ 2 ] , 'million' ) ;
$dischargeArraySpelN [ million] = $wordAfterMillion ;
/*Переводим массив трехзначных чисел в текстовую форму и одновременно его переворачиваем, т.к. foreach записало массив в обратном порядке*/
$numberInTextArray = array_reverse ( smallNumberToText
( $splitArray ) ) ; /*Проверяем, нужно ли исправить окончание разряда тысяч*/
$numberInTextArray = correct_thousand ( $numberInTextArray ) ;
if ( $n == 0 ) {
$numberInTextArray [ 0 ] = '0 ' ;
}
/*Собираем текст*/
$text = $numberInTextArray [ 2 ] . $wordAfterMillion . ' ' . $numberInTextArray [ 1 ] . $wordAfterThousand . ' ' . $numberInTextArray [ 0 ] . $wordAfterRoubles ;
/*Удаляем лишние пробелы*/
$text = delete_double_space ( $text ) ;
return ( $text ) ;
}
$text = summ_to_text( 11012013 ) ;
echo ( $text ) ;
PD9waHAKIAplcnJvcl9yZXBvcnRpbmcoLTEpOwptYl9pbnRlcm5hbF9lbmNvZGluZygndXRmLTgnKTsKCi8q0JPQu9C+0LHQsNC70YzQvdCw0Y8g0YTRg9C90LrRhtC40Y8sINC60L7RgtC+0YDQsNGPINC/0L7Qu9GD0YfQsNC10YIg0YfQuNGB0LvQviAkbiDQuCDQstC+0LfQstGA0LDRidCw0LXRgiDRgtC10LrRgdGC0L7QstGD0Y4g0YTQvtGA0LzRgyDQvdCw0L/QuNGB0LDQvdC40Y8g0YHRg9C80LzRiyovCmZ1bmN0aW9uIHN1bW1fdG9fdGV4dCAoJG4pIHsKCi8q0K3RgtCwINGE0YPQvdC60YbQuNGPINGA0LDQt9Cx0LjQstCw0LXRgiDRh9C40YHQu9C+INC90LAg0LPRgNGD0L/Qv9GLINGC0YDQtdGF0LfQvdCw0YfQvdGL0YUg0YfQuNGB0LXQuyovCmZ1bmN0aW9uIHNwbGl0dGluZ0ludG9Hcm91cHMgKCRuKSB7Cgokc3BsaXRBcnJheT1bXTsKZm9yICgkaT0kbjsgJGk+PTE7ICRpPSRpKzApIHsKCSRpPSRpLzEwMDA7CgkkdD1yb3VuZCgxMDAwKmZtb2QoJGksMSkpOwoJJGk9Zmxvb3IoJGkpOwoJJHNwbGl0QXJyYXlbXT0kdDsKCX0KCXJldHVybiAkc3BsaXRBcnJheTsKfQoKLyrQrdGC0LAg0YTRg9C90LrRhtC40Y8g0L7Qv9GA0LXQtNC10LvRj9C10YIg0L/RgNCw0LLQuNC70YzQvdGD0Y4g0YTQvtGA0LzRgyDQuNC80LXQvdC4INGA0LDQt9GA0Y/QtNCwINGB0YPQvNC80Ysg0LTQu9GPINGH0LjRgdC70LAgJGRpc2NoYXJnZVZhbHVlINC40Lcg0Y/Rh9C10LnQutC4ICR4INC80LDRgdGB0LjQstCwICRkaXNjaGFyZ2VBcnJheSovCmZ1bmN0aW9uIGRpc2NoYXJnZV9zdW0gKCRkaXNjaGFyZ2VWYWx1ZSwkeCkgewokZGlzY2hhcmdlQXJyYXk9IFsgICdyb3VibGVzJz0+IFsn0YDRg9Cx0LvRjCcsICfRgNGD0LHQu9GPJywgJ9GA0YPQsdC70LXQuSddLAoJCQkJCSd0aG91c2FuZCc9PiBbJ9GC0YvRgdGP0YfQsCcsJ9GC0YvRgdGP0YfQuCcsJ9GC0YvRgdGP0YcnXSwKCQkJCQknbWlsbGlvbic9PiBbJ9C80LjQu9C70LjQvtC9Jywn0LzQuNC70LvQuNC+0L3QsCcsJ9C80LjQu9C70LjQvtC90L7QsiddCgldOwokcmVnZXhwTGFzdE51bWJlcjE9Jy9eWzFdJC8nOwokcmVnZXhwTGFzdE51bWJlcjJ0bzQ9Jy9eWzBdP1swXT9bMi00XSQvJzsKJHJlZ2V4cExhc3ROdW1iZXIxMHRvMTk9Jy9bMC05XT9bMV1bMC05XSQvJzsKJHJlZ2V4cExhc3ROdW1iZXJYMT0nL1swLTldP1swLDItOV1bMV0kLyc7CiRyZWdleHBMYXN0TnVtYmVyWDJ0b1g0PScvWzAtOV0/WzAsMi05XVsyLTRdJC8nOwppZiAocHJlZ19tYXRjaCgkcmVnZXhwTGFzdE51bWJlcjEsJGRpc2NoYXJnZVZhbHVlKSl7Cgkkd29yZEFmdGVyTj0kZGlzY2hhcmdlQXJyYXlbJHhdWzBdOwp9CmVsc2VpZiAocHJlZ19tYXRjaCgkcmVnZXhwTGFzdE51bWJlcjJ0bzQsJGRpc2NoYXJnZVZhbHVlKSl7Cgkkd29yZEFmdGVyTj0kZGlzY2hhcmdlQXJyYXlbJHhdWzFdOwp9CmVsc2VpZiAocHJlZ19tYXRjaCgkcmVnZXhwTGFzdE51bWJlcjEwdG8xOSwkZGlzY2hhcmdlVmFsdWUpKXsKCSR3b3JkQWZ0ZXJOPSRkaXNjaGFyZ2VBcnJheVskeF1bMl07Cn0KZWxzZWlmIChwcmVnX21hdGNoKCRyZWdleHBMYXN0TnVtYmVyWDEsJGRpc2NoYXJnZVZhbHVlKSl7Cgkkd29yZEFmdGVyTj0kZGlzY2hhcmdlQXJyYXlbJHhdWzBdOwp9CmVsc2VpZiAocHJlZ19tYXRjaCgkcmVnZXhwTGFzdE51bWJlclgydG9YNCwkZGlzY2hhcmdlVmFsdWUpKXsKCSR3b3JkQWZ0ZXJOPSRkaXNjaGFyZ2VBcnJheVskeF1bMV07Cn0KZWxzZWlmICgkZGlzY2hhcmdlVmFsdWU9PW51bGwpewoJJHdvcmRBZnRlck49Jyc7Cn0KZWxzZXsKCSR3b3JkQWZ0ZXJOPSRkaXNjaGFyZ2VBcnJheVskeF1bMl07Cn0KcmV0dXJuICR3b3JkQWZ0ZXJOOwp9CgovKtCt0YLQsCDRhNGD0L3QutGG0LjRjyDQstC+0LfQstGA0LDRidCw0LXRgiDQvdCw0L/QuNGB0LDQvdC40LUg0YLRgNC10YXQt9C90LDRh9C90YvRhSDRh9C40YHQtdC7INC40Lcg0LzQsNGB0YHQuNCy0LAg0L/RgNC+0L/QuNGB0YzRjiovCmZ1bmN0aW9uIHNtYWxsTnVtYmVyVG9UZXh0ICgkc3BlbE4pIHsKCSRzcGVsbGluZz0gWzAgICA9PiAgJ9C90L7Qu9GMJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgID0+ICAn0LTQtdGB0Y/RgtGMJywgICAgICAgMTAwID0+ICAn0YHRgtC+JywKICAgICAgICAxICAgPT4gICfQvtC00LjQvScsICAgICAgICAgMTEgID0+ICAn0L7QtNC40L3QvdCw0LTRhtCw0YLRjCcsICAgICAgMjAgID0+ICAn0LTQstCw0LTRhtCw0YLRjCcsICAgICAyMDAgPT4gICfQtNCy0LXRgdGC0LgnLAogICAgICAgIDIgICA9PiAgJ9C00LLQsCcsICAgICAgICAgIDEyICA9PiAgJ9C00LLQtdC90LDQtNGG0LDRgtGMJywgICAgICAgMzAgID0+ICAn0YLRgNC40LTRhtCw0YLRjCcsICAgICAzMDAgPT4gICfRgtGA0LjRgdGC0LAnLAogICAgICAgIDMgICA9PiAgJ9GC0YDQuCcsICAgICAgICAgIDEzICA9PiAgJ9GC0YDQuNC90LDQtNGG0LDRgtGMJywgICAgICAgNDAgID0+ICAn0YHQvtGA0L7QuicsICAgICAgICA0MDAgPT4gICfRh9C10YLRi9GA0LXRgdGC0LAnLAogICAgICAgIDQgICA9PiAgJ9GH0LXRgtGL0YDQtScsICAgICAgIDE0ICA9PiAgJ9GH0LXRgtGL0YDQvdCw0LTRhtCw0YLRjCcsICAgICA1MCAgPT4gICfQv9GP0YLRjNC00LXRgdGP0YInLCAgICA1MDAgPT4gICfQv9GP0YLRjNGB0L7RgicsCiAgICAgICAgNSAgID0+ICAn0L/Rj9GC0YwnLCAgICAgICAgIDE1ICA9PiAgJ9C/0Y/RgtC90LDQtNGG0LDRgtGMJywgICAgICAgNjAgID0+ICAn0YjQtdGB0YLRjNC00LXRgdGP0YInLCAgIDYwMCA9PiAgJ9GI0LXRgdGC0YzRgdC+0YInLAogICAgICAgIDYgICA9PiAgJ9GI0LXRgdGC0YwnLCAgICAgICAgMTYgID0+ICAn0YjQtdGB0YLQvdCw0LTRhtCw0YLRjCcsICAgICAgNzAgID0+ICAn0YHQtdC80YzQtNC10YHRj9GCJywgICAgNzAwID0+ICAn0YHQtdC80YzRgdC+0YInLCAgICAKICAgICAgICA3ICAgPT4gICfRgdC10LzRjCcsICAgICAgICAgMTcgID0+ICAn0YHQtdC80L3QsNC00YbQsNGC0YwnLCAgICAgICA4MCAgPT4gICfQstC+0YHQtdC80YzQtNC10YHRj9GCJywgICA4MDAgPT4gICfQstC+0YHQtdC80YzRgdC+0YInLAogICAgICAgIDggICA9PiAgJ9Cy0L7RgdC10LzRjCcsICAgICAgIDE4ICA9PiAgJ9Cy0L7RgdC10LzQvdCw0LTRhtCw0YLRjCcsICAgICA5MCAgPT4gICfQtNC10LLRj9C90L7RgdGC0L4nLCAgICAgOTAwID0+ICAn0LTQtdCy0Y/RgtGM0YHQvtGCJywKICAgICAgICA5ICAgPT4gICfQtNC10LLRj9GC0YwnLCAgICAgICAxOSAgPT4gICfQtNC10LLRj9GC0L3QsNC00YbQsNGC0YwnICAgIF07CgkkcmVnZXhwMXRvOT0nL1swLTldP1swLTldP1sxLTldJC8nOwoJJHJlZ2V4cDEwdG8xOT0gJy9bMC05XT9bMV1bMC05XSQvJzsKCSRyZWdleHAyMHRvOTA9ICcvWzAtOV0/WzItOV1bMC05XSQvJzsKCSRyZWdleHAxMDB0bzkwMD0gJy9bMS05XVswLTldWzAtOV0kLyc7CgkKCSRzcGVsTj1hcnJheV9yZXZlcnNlKCRzcGVsTik7CgkkdGV4dD1udWxsOwoJCWZvcmVhY2ggKCRzcGVsTiBhcyAkbikgewoJCQkkbnVtYmVySW5Xb3Jkcz0nJzsKCQlpZiAocHJlZ19tYXRjaCgkcmVnZXhwMXRvOSwkbikpIHsKCQkkeD0oJG4lMTAwKSUxMDsKCQkkbnVtYmVySW5Xb3Jkcz0kc3BlbGxpbmdbJHhdIC4gJyAnOwoJfQoJCWlmIChwcmVnX21hdGNoKCRyZWdleHAxMHRvMTksJG4pKSB7CgkJCSR5PWZsb29yKCRuJTEwMCk7CgkJCSRudW1iZXJJbldvcmRzPSRzcGVsbGluZ1skeV0gLiAnICc7CgkJfQoJCQlpZiAocHJlZ19tYXRjaCAoJHJlZ2V4cDIwdG85MCwkbikpIHsKCQkJJHo9KGZsb29yKCRuJTEwMC8xMCkpKjEwOwoJCSRudW1iZXJJbldvcmRzPSRzcGVsbGluZ1skel0gLiAnICcgLiAkbnVtYmVySW5Xb3JkcyAuICcgJzsKCQl9CgkJaWYgKHByZWdfbWF0Y2ggKCRyZWdleHAxMDB0bzkwMCwkbikpIHsKCQkJJHc9KGZsb29yKCRuLzEwMCkpKjEwMDsKCQkJJG51bWJlckluV29yZHM9JHNwZWxsaW5nWyR3XSAuICcgJyAuICRudW1iZXJJbldvcmRzIC4gJyc7CgkJfQoJCSR0ZXh0QXJyYXlbXT0kbnVtYmVySW5Xb3JkczsKCQl9CgkJcmV0dXJuICR0ZXh0QXJyYXk7Cn0KCi8q0K3RgtCwINGE0YPQvdC60YbQuNGPINC80LXQvdGP0LXRgiDRhNGA0LDQt9GLICLQvtC00LjQvSDRgtGL0YHRj9GH0LAiINC4ICLQtNCy0LUg0YLRi9GB0Y/Rh9CwIiDQvdCwICLQvtC00L3QsCDRgtGL0YHRj9GH0LAiINC4ICLQtNCy0LUg0YLRi9GB0Y/Rh9C4IiDRgdC+0L7RgtCy0LXRgtGB0YLQstC10L3QvdC+Ki8KZnVuY3Rpb24gY29ycmVjdF90aG91c2FuZCAoJGFycmF5TikgewoJJHJlZ2V4cDF0aG91c2FuZD0nL9C+0LTQuNC9XFxzL3VpJzsKCSRyZWdleHAydGhvdXNhbmQ9Jy/QtNCy0LBcXHMvdWknOwokYXJyYXlOWzFdPXByZWdfcmVwbGFjZSgkcmVnZXhwMXRob3VzYW5kLCfQvtC00L3QsCAnLCRhcnJheU5bMV0pOwokYXJyYXlOWzFdPXByZWdfcmVwbGFjZSgkcmVnZXhwMnRob3VzYW5kLCfQtNCy0LUgJywkYXJyYXlOWzFdKTsKcmV0dXJuKCRhcnJheU4pOwp9CgovKtCt0YLQsCDRhNGD0L3QutGG0LjRjyDRg9C00LDQu9GP0LXRgiDQu9C40YjQvdC40LUg0L/RgNC+0LHQtdC70YssINC60L7RgtC+0YDRi9C1INC/0L7Rj9Cy0LvRj9GO0YLRgdGPINCyINGB0LvRg9GH0LDQtSDQvtGC0YHRg9GC0YHRgtCy0LjRjyDRgNCw0LfRgNGP0LTQvtCyINC80LjQu9C70LjQvtC90L7QsiDQuCDRgtGL0YHRj9GHKi8KZnVuY3Rpb24gZGVsZXRlX2RvdWJsZV9zcGFjZSAoJHRleHRGb3JEZWxldGVTcGFjZSkgewoJJHJlZ2V4cERvdWJsZVNwYWNlPScvKFxccyl7Mix9L3VpJzsKCSR0ZXh0QWZ0ZXJEZWxldGVEb3VibGVTcGFjZT1wcmVnX3JlcGxhY2UoJHJlZ2V4cERvdWJsZVNwYWNlLCcgJywkdGV4dEZvckRlbGV0ZVNwYWNlKTsKCXJldHVybiAkdGV4dEFmdGVyRGVsZXRlRG91YmxlU3BhY2U7Cn0KCi8q0J/QvtC70YPRh9Cw0LXQvCDQvNCw0YHRgdC40LIg0YLRgNC10YXQt9C90LDRh9C90YvRhSDRh9C40YHQtdC7Ki8KJHNwbGl0QXJyYXk9IHNwbGl0dGluZ0ludG9Hcm91cHMgKCRuKTsKCi8q0KHQvtC30LTQsNC10Lwg0LzQsNGB0YHQuNCyINC00LvRjyDQt9Cw0L/QuNGB0Lgg0LjQvNC10L0g0YDQsNC30YDRj9C00L7QsiovCiRkaXNjaGFyZ2VBcnJheVNwZWxOPSBbJ3JvdWJsZXMnPT5udWxsLCAndGhvdXNhbmQnPT5udWxsLCAnbWlsbGlvbic9Pm51bGxdOwoKLyrQntC/0YDQtdC00LXQu9GP0LXQvCDQv9GA0LDQstC40LvRjNC90YvQtSDQuNC80LXQvdCwINGA0LDQt9GA0Y/QtNC+0LIg0Lgg0L/QvtC+0YfQtdGA0LXQtNC90L4g0LfQsNC/0LjRgdGL0LLQsNC10Lwg0LjRhSDQsiDQvNCw0YHRgdC40LIqLwokd29yZEFmdGVyUm91Ymxlcz0gZGlzY2hhcmdlX3N1bSgkc3BsaXRBcnJheVswXSwncm91YmxlcycpOwppZiAoJHNwbGl0QXJyYXlbMF09PTApewoJCSR3b3JkQWZ0ZXJSb3VibGVzPSfRgNGD0LHQu9C10LknOwoJfQokZGlzY2hhcmdlQXJyYXlTcGVsTltyb3VibGVzXT0kd29yZEFmdGVyUm91YmxlczsKJHdvcmRBZnRlclRob3VzYW5kPSBkaXNjaGFyZ2Vfc3VtKCRzcGxpdEFycmF5WzFdLCd0aG91c2FuZCcpOwokZGlzY2hhcmdlQXJyYXlTcGVsTlt0aG91c2FuZF09JHdvcmRBZnRlclRob3VzYW5kOwokd29yZEFmdGVyTWlsbGlvbj0gZGlzY2hhcmdlX3N1bSgkc3BsaXRBcnJheVsyXSwnbWlsbGlvbicpOwokZGlzY2hhcmdlQXJyYXlTcGVsTlttaWxsaW9uXT0kd29yZEFmdGVyTWlsbGlvbjsKLyrQn9C10YDQtdCy0L7QtNC40Lwg0LzQsNGB0YHQuNCyINGC0YDQtdGF0LfQvdCw0YfQvdGL0YUg0YfQuNGB0LXQuyDQsiDRgtC10LrRgdGC0L7QstGD0Y4g0YTQvtGA0LzRgyDQuCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4g0LXQs9C+INC/0LXRgNC10LLQvtGA0LDRh9C40LLQsNC10LwsINGCLtC6LiBmb3JlYWNoINC30LDQv9C40YHQsNC70L4g0LzQsNGB0YHQuNCyINCyINC+0LHRgNCw0YLQvdC+0Lwg0L/QvtGA0Y/QtNC60LUqLwokbnVtYmVySW5UZXh0QXJyYXk9IGFycmF5X3JldmVyc2UgKHNtYWxsTnVtYmVyVG9UZXh0ICgkc3BsaXRBcnJheSkpOwovKtCf0YDQvtCy0LXRgNGP0LXQvCwg0L3Rg9C20L3QviDQu9C4INC40YHQv9GA0LDQstC40YLRjCDQvtC60L7QvdGH0LDQvdC40LUg0YDQsNC30YDRj9C00LAg0YLRi9GB0Y/RhyovCiRudW1iZXJJblRleHRBcnJheT0gY29ycmVjdF90aG91c2FuZCAoJG51bWJlckluVGV4dEFycmF5KTsKaWYgKCRuPT0wKXsKCSRudW1iZXJJblRleHRBcnJheVswXT0nMCAnOwp9Ci8q0KHQvtCx0LjRgNCw0LXQvCDRgtC10LrRgdGCKi8KJHRleHQ9ICRudW1iZXJJblRleHRBcnJheVsyXS4kd29yZEFmdGVyTWlsbGlvbi4nICcuJG51bWJlckluVGV4dEFycmF5WzFdLiR3b3JkQWZ0ZXJUaG91c2FuZC4nICcuJG51bWJlckluVGV4dEFycmF5WzBdLiR3b3JkQWZ0ZXJSb3VibGVzOwovKtCj0LTQsNC70Y/QtdC8INC70LjRiNC90LjQtSDQv9GA0L7QsdC10LvRiyovCiR0ZXh0PSBkZWxldGVfZG91YmxlX3NwYWNlICgkdGV4dCk7CgoJcmV0dXJuICgkdGV4dCk7Cn0KJHRleHQ9IHN1bW1fdG9fdGV4dCgxMTAxMjAxMyk7CmVjaG8gKCR0ZXh0KTs=