/**
  * @access private
  * @static
  */
 private static function _bdecodeRecursive($encodedStr, &$pos)
 {
     $encodedStrlen = strlen($encodedStr);
     if ($pos < 0 || $pos >= $encodedStrlen) {
         return NULL;
     } else {
         if ($encodedStr[$pos] == 'i') {
             $pos++;
             $numlen = strspn($encodedStr, '-0123456789', $pos);
             $spos = $pos;
             $pos += $numlen;
             if ($pos >= $encodedStrlen || $encodedStr[$pos] != 'e') {
                 return NULL;
             } else {
                 $pos++;
                 return floatval(substr($encodedStr, $spos, $numlen));
             }
         } elseif ($encodedStr[$pos] == 'd') {
             $pos++;
             $ret = array();
             while ($pos < $encodedStrlen) {
                 if ($encodedStr[$pos] == 'e') {
                     $pos++;
                     return $ret;
                 } else {
                     $key = Lms_BTransform::_bdecodeRecursive($encodedStr, $pos);
                     if ($key === NULL) {
                         return NULL;
                     } else {
                         $val = Lms_BTransform::_bdecodeRecursive($encodedStr, $pos);
                         if ($val === NULL) {
                             return NULL;
                         } elseif (!is_array($key)) {
                             $ret[$key] = $val;
                         }
                     }
                 }
             }
             return NULL;
         } elseif ($encodedStr[$pos] == 'l') {
             $pos++;
             $ret = array();
             while ($pos < $encodedStrlen) {
                 if ($encodedStr[$pos] == 'e') {
                     $pos++;
                     return $ret;
                 } else {
                     $val = Lms_BTransform::_bdecodeRecursive($encodedStr, $pos);
                     if ($val === NULL) {
                         return NULL;
                     } else {
                         $ret[] = $val;
                     }
                 }
             }
             return NULL;
         } else {
             $numlen = strspn($encodedStr, '0123456789', $pos);
             $spos = $pos;
             $pos += $numlen;
             if ($pos >= $encodedStrlen || $encodedStr[$pos] != ':') {
                 return NULL;
             } else {
                 $vallen = intval(substr($encodedStr, $spos, $numlen));
                 $pos++;
                 $val = substr($encodedStr, $pos, $vallen);
                 if (strlen($val) != $vallen) {
                     return NULL;
                 } else {
                     $pos += $vallen;
                     return $val;
                 }
             }
         }
     }
 }