<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def load(fp, no_bytes=False, object_hook=None, object_pairs_hook=None, intern_object_keys=False):
 """Decodes and returns UBJSON from the given file-like object Args: fp: read([size])-able object no_bytes (bool):
 If set, typed UBJSON arrays (uint8) will not be converted to a bytes instance and instead treated like any other array (i.e. result in a list). object_hook (callable):
 Called with the result of any object literal decoded (instead of dict). object_pairs_hook (callable):
 Called with the result of any object literal decoded with an ordered list of pairs (instead of dict). Takes precedence over object_hook. intern_object_keys (bool):
 If set, object keys are interned which can provide a memory saving when many repeated keys are used. NOTE: This is not supported in Python2 (since interning does not apply to unicode) and wil be ignored. Returns: Decoded object Raises: DecoderException: If an encoding failure occured. UBJSON types are mapped to Python types as follows. Numbers in brackets denote Python version. | UBJSON | Python | +==================================+===============+ | object | dict | | array | list | | string | (3) str | | | (2) unicode | | uint8, int8, int16, int32, int64 | (3) int | | | (2) int, long | | float32, float64 | float | | high_precision | Decimal | | array (typed, uint8) | (3) bytes | | | (2) str | | true | True | | false | False | | null | None | """

    if object_pairs_hook is None and object_hook is None:
        object_hook = __object_hook_noop

    if not callable(fp.read):
        raise TypeError('fp.read not callable')
    fp_read = fp.read

    marker = fp_read(1)
    try:
        try:
            return __METHOD_MAP[marker](fp_read, marker)
        except KeyError:
            pass
        if marker == ARRAY_START:
            return __decode_array(fp_read, bool(no_bytes), object_hook, object_pairs_hook, intern_object_keys)
        elif marker == OBJECT_START:
            return __decode_object(fp_read, bool(no_bytes), object_hook, object_pairs_hook, intern_object_keys)
        else:
            raise DecoderException('Invalid marker')
    except DecoderException as ex:
        raise_from(DecoderException(ex.args[0], fp), ex)