<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def supply(self, issuer):
 """Supplies the `Json Web Key Set` for the given issuer. Args: issuer: the issuer. Returns: The successfully retrieved Json Web Key Set. None is returned if the issuer is unknown or the retrieval process fails. Raises: UnauthenticatedException: When this method cannot supply JWKS for the given issuer (e.g. unknown issuer, HTTP request error). """

        def _retrieve_jwks():
            """Retrieve the JWKS from the given jwks_uri when cache misses."""
            jwks_uri = self._key_uri_supplier.supply(issuer)

            if not jwks_uri:
                raise UnauthenticatedException(u"Cannot find the `jwks_uri` for issuer "
                                               u"%s: either the issuer is unknown or "
                                               u"the OpenID discovery failed" % issuer)

            try:
                response = requests.get(jwks_uri)
                json_response = response.json()
            except Exception as exception:
                message = u"Cannot retrieve valid verification keys from the `jwks_uri`"
                raise UnauthenticatedException(message, exception)

            if u"keys" in json_response:
                # De-serialize the JSON as a JWKS object.
                jwks_keys = jwk.KEYS()
                jwks_keys.load_jwks(response.text)
                return jwks_keys._keys
            else:
                # The JSON is a dictionary mapping from key id to X.509 certificates.
                # Thus we extract the public key from the X.509 certificates and
                # construct a JWKS object.
                return _extract_x509_certificates(json_response)

        return self._jwks_cache.get_or_create(issuer, _retrieve_jwks)