instance.token = slot->nssToken;
instance.token = PK11Slot_GetNSSToken(slot);
PRBool CRLStillExists(CERTSignedCrl* crl){    NSSItem newsubject;    SECItem subject;    CK_ULONG crl_class;    PRStatus status;    PK11SlotInfo* slot = NULL;    nssCryptokiObject instance;    NSSArena* arena;    PRBool xstatus = PR_TRUE;    SECItem* oldSubject = NULL;    PORT_Assert(crl);    if (!crl) {        return PR_FALSE;    }    slot = crl->slot;    PORT_Assert(slot);    if (!slot) {        return PR_FALSE;    }    oldSubject = &crl->crl.derName;    PR_ASSERT(oldSubject);    if (!oldSubject) {        return PR_FALSE;    }    /* query subject and type attributes in order to determine if the       object has been deleted */    /* first, make an nssCryptokiObject */    instance.handle = crl->pkcs11ID;    PORT_Assert(instance.handle);    if (!instance.handle) {        return PR_FALSE;    }    instance.token = slot->nssToken;    PORT_Assert(instance.token);    if (!instance.token) {        return PR_FALSE;    }    instance.isTokenObject = PR_TRUE;    instance.label = NULL;    arena = NSSArena_Create();    PORT_Assert(arena);    if (!arena) {        return PR_FALSE;    }    status = nssCryptokiCRL_GetAttributes(&instance,                                          NULL,  /* XXX sessionOpt */                                          arena,                                          NULL,                                          &newsubject,  /* subject */                                          &crl_class,   /* class */                                          NULL,                                          NULL);    if (PR_SUCCESS == status) {        subject.data = newsubject.data;        subject.len = newsubject.size;        if (SECITEM_CompareItem(oldSubject, &subject) != SECEqual) {            xstatus = PR_FALSE;        }        if (CKO_NETSCAPE_CRL != crl_class) {            xstatus = PR_FALSE;        }    } else {        xstatus = PR_FALSE;    }    NSSArena_Destroy(arena);    return xstatus;}