INPI-France/Brevets-Francais-2024-Chunked huggingface dataset:
L'invention va maintenant être décrite de façon plus détaillée en se référant aux dessins annexés, parmi lesquels - la figure 1A illustre schématiquement un exemple de réalisation d'une architecture permettant le chargement d'une "applet" dans une carte à puce selon l'art connu ; - figures 1 B et 1 C illustrent les architectures matérielle et logique, respectivement, d'un exemple de système d'application à base de à puce connecté à un réseau Internet selon l'art connu, ; - figure 2 illustre schématiquement un exemple de systeme d'application à base de carte à puce selon l'invention, cette dernière agissant en tant que client/serveur "WEB" ; - figure 3 est un diagramme d'états d'une session entre entités logicielles dites agents intelligents, selon un aspect l'invention ; - figure 4 illustre de façon simplifiée l'architecture logique système selon l'invention dans lequel la carte à puce comprend agents intelligents ; - figure 5 illustre de façon simplifiée l'architecture logique système selon l'invention dans lesquels la carte à puce comprend agents intelligents traducteurs de scripts ; - la figure 6 illustre schématiquement un exemple de réalisation d'une architecture permettant le chargement d'une "applet" dans carte à puce selon l'invention ; - la figure 7 illustre la structure d'un fichier de chargement d'une "applet" pouvant être en #uvre par le procédé selon l'invention ; - la figure 8 illustre schématiquement les phases principales procédé de chargement d'une "applet" dans une carte à puce selon premier exemple de réalisation pratique ; - la figure 9 illustre schématiquement les phases principales procédé de chargement d'une "applet" dans une carte à puce selon deuxième exemple de réalisation pratique; - les figures 9 et 10 illustrent deux exemples de formulaires en langage "HTML" utilisables par le procédé de chargement d'une "applet" dans une carte à puce selon l'invention, pour la mise en ceuvre des méthodes dites "GET" et "POST", respectivement; et - les figures 12A à 12G illustrent plusieurs variantes de réalisation de réalisation d'architectures de systèmes permettant le chargement d'une "applet" dans une carte à puce selon l'invention.
Dans ce qui suit, sans en limiter en quoi que ce soit la portée, on se placera ci-après dans le cadre de l'application préférée de l'invention, sauf mention contraire, c'est-à-dire dans le cas d'un terminal connecté à un ou plusieurs serveurs éloignés via le réseau Internet.
Avant de décrire le procédé d'activation d'applications localisées dans une carte à puce selon l'invention et de détailler une architecture pour sa mise en oeuvre, par référence à la figure 2, il apparaît tout d'abord utile de rappeler brièvement les caractéristiques principales des protocoles de communication sur les réseaux.
L'architecture des réseaux de communication est décrite par diverses couches. A titre d'exemple, le standard "0S1" ("Open System Interconnection"), défini par l' "1S0", comporte sept couches qui vont des couches dites basses (par exemple la couche dite "physique" qui concerne le support de transmission physique) aux couches dites hautes (par exemple la couche dite "d'application"), en passant par des couches intermédiaires, notamment la couche dite de "transport". Une couche donnée offre ses services à la couche qui lui est immédiatement supérieure et requiert de la couche qui lui immédiatement inferieure d'autres services, via des interfaces appropriées. Les couches communiquent à l'aide de primitives. Elles peuvent également communiquer avec des couches de même niveau. Dans certaines architectures, plusieurs couches peuvent être inexistantes.
Dans un environnement de type Internet, les couches sont au nombre de cinq, et de façon plus précise, en allant de la couche supérieure à couche inferieure : la couche dite d'application ("http", "ftp", "e-mail", etc.), couche dite de transport ("TCP"), la couche dite d'adressage de réseau ("1P"), couche dite de liens de données ("PPP", "Slip", etc.) et la couche dite physique.
Si on se reporte de nouveau à la figure 2, à l'exception couches logicielles de protocole de communication spécifiques, référencées et 23a, respectivement implantées dans le terminal 1 et la carte à puce 2a, les autres éléments, matériels ou logiciels, sont communs à l'art connu, et il n'y a pas lieu de re-décrire de façon détaillée.
Le terminal 1 comprend des circuits 11 d'accès au réseau RI, constitués exemple d'un modem. Ces circuits regroupent les couches logicielles inferieures, C1 et C2, qui correspondent aux couches "physique" et de "lien de données".
Dans le cas où les symboles sont des bits, les estimations r'sont des softbits , c'est-à-dire des valeurs numériques dont le signe caractérise le bit estimé et la valeur absolue représente la vraisemblance de cette estimation.
Les Y flux de données r'j sont fournis à un bloc de démultiplexage 8 qui effectue les opérations inverses du multiplexeur 2 de la station de base Ce bloc 8 délivre pour chaque canal de transport i (1 sis X) un flux a', d'estimations (softbits ou hardbits) des symboles du flux a1 Ces estimations a', sont fournies au circuit de traitement du TrCH i appartenant au bloc 9. Le séquencement et le paramétrage des blocs 7,8, 9 est assuré par une unité de contrôle 10 du terminal.
Ainsi qu'il est usuel dans le domaine des radiocommunications numériques, les blocs 1-3,5 de la station de base et 7-10 du terminal peuvent être réalisés en programmant un ou plusieurs processeurs de signal numérique, et/ou en utilisant des circuits logiques spécifiques.
Les figures 4 et 5 détaillent respectivement les différents modules fonctionnels des blocs de multiplexage 2 et de démultiplexage 8 (voir la spécification 3G TS 25 212 précitée). Sur ces figures, les références portant l'indice i (1 s i s X) désignent les éléments se rapportant au TrCH i (blocs 20i et 40j), les références portant l'indice j désignent les éléments se rapportant au PhCH j (1 <~ j < Y), et les références sans indice se rapportent aux opérations effectuées pour chaque trame au niveau CCTrCH.
Le flux ai à transmettre sur chaque TRCH i est composé de symboles binaires délivrés sous forme de blocs de transport successifs TrBk ( Transport Block ). Le module 21icomplète chaque TrBk en y ajoutant un code de
redondance cyclique CRC, servant à détecter d'éventuelles erreurs de transmission Les TrBk bi sont ensuite concaténés et/ou segmentés par le module 22j pour former des blocs oi de taille appropriée pour l'entrée du codeur de canal 23i.
Pour chaque TTI du canal de transport i, le codeur de canal 23, délivre une séquence ci de E, bits codés notés ci@m (1 s m K=9; - un turbocode de rendement 1/3 pour les applications requérant les taux d'erreurs les plus faibles. Dans ce cas, les bits Ci,3p+q de la séquence de sortie du codeur sont des bits systématiques (recopiés des blocs d'entrée oi) si q = 1, et des bits de parité si q = 2 ou 0.
Les modules 24i d'adaptation de débit ( rate matching ) suppriment (poinçonnent) ou répètent des bits des séquences ci afin d'adapter le débit binaire des TrCH au débit global admissible sur le ou les PhCH compte tenu de leurs facteurs d'étalement. Pour chaque TTI sur le TrCH i, il est défini, à partir des informations fournies par les couches supérieures de protocole, un paramètre #NiTTInégatif dans le cas du poinçonnage et positif dans le cas de la répétition. La séquence gi produite par le module 24j pour le TTI est composée de Gi = E; + tlN;n-1 bits notés g,n (1 s n s G). Dans le cas où le module 23, a utilisé un turbocode, le poinçonnage appliqué par le module 24, si tlN;n-1 < 0 est limité aux bits de parité compte tenu de l'importance plus grande des bits systématiques pour le décodeur.
Dans une trame donnée, les périodes consacrées aux différents TrCH de la communication peuvent avoir des positions fixes (avant l'entrelacement intra-trame évoqué ci-après) ou des positions variables. Dans le cas des positions fixes, il peut être nécessaire d'adjoindre à la séquence gi, au moyen du module 25i, un ou plusieurs symboles marqués qui ne seront pas transmis (la valeur du bit correspondant sera par exemple mise à zéro au lieu de 1 dans le flux de sortie rj comportant un tel symbole pour que la puissance
d'émission du symbole soit nulle). On note 8 les bits de DTX ( Discontinuous Transmission ) ainsi marqués. Dans l'exemple d'implémentation considéré ici de manière non limitative, chaque symbole hi,n de la séquence hi délivrée par le module 25, (0 ::; n - hi,n = (0, gi,n) si nu G ; - hj = (1, 0) si Gi < n < Fi.Hi (bits marqués 5 ).
Le module d'entrelacement 26i effectue une permutation de la séquence hi, en vue de distribuer les symboles relevant du TTI sur les F, trames qu'il couvre. Cet entrelacement consiste à écrire successivement les symboles de la séquence hi dans les lignes d'une matrice comportant Fi colonnes, à permuter les colonnes de la matrice, puis à lire les symboles de la matrice colonne après colonne pour former la séquence notée qi Le module 27i découpe ensuite la séquence hi en FI segments de symboles consécutifs correspondant aux Fi colonnes de la matrice d'entrelacement après permutation, et affecte respectivement ces segments aux F, trames du TTI pour former une séquence notée fi pour chaque trame et chaque TrCH i (1 colonnes effectuée par l'entrelaceur 261 est telle que le symbole hl,n se retrouve dans la trame de rang ni = BR(n-1, Fi) du TTI, les trames du TTI étant numérotées de ni = 0 à ni = Fi-1, et BR(x, 2y) étant défini comme l'entier dont la représentation en base 2 correspond à la lecture en sens inverse de la représentation en base 2 sur y chiffres du reste de la division euclidienne de x par 2Y (par exemple, BR(51, 8) = BR(3, 8) = BR([011 1]2, 23) = Il 10]2 = 6) Les séquences fi produites pour les différents TrCH de la communication (1 s i z X) sont multiplexées, c'est-à-dire placées les unes à la suite des autres, par un module 28 formant une séquence s de S symboles pour le CCTrCH. Dans le cas où les périodes consacrées aux différents TrCH de la communication ont des positions variables, il peut être nécessaire d'adjoindre à la séquence s, au moyen du module 29, un ou plusieurs symboles marqués # . Dans l'exemple d'implémentation considéré ici,
Y chaque symbole wk de la séquence w délivrée par le module 29 (1 s k Y avec S - wk = (0, Sk) si ka S ; Y - wk = (1,0) si S Le module 30 découpe ensuite la séquence w en Y segments de U1, U2, . , Uy symboles consécutifs, et affecte respectivement ces segments aux Y PhCH pour former une séquence notée Un pour chaque PhCH j (1 s j < Y) Le module d'entrelacement 31 j effectue une permutation de la séquence uj, en vue de distribuer les symboles, au sein de la trame courante, sur les Y PhCH employés par la communication. Cet entrelacement consiste à écrire successivement les symboles de la séquence uj dans les lignes d'une matrice comportant trente colonnes, à permuter les colonnes de la matrice, puis à lire les symboles de la matrice colonne après colonne pour former la séquence de Uj symboles notée vj.
Le module 32.de remplissage du canal physique ( physical channel mapping ) distribue finalement les symboles successifs de la séquence vj dans les champs DATA1 et DATA2 des tranches temporelles de la trame courante. Le module 32j peut traduire les bits d'information à valeurs 0 ou 1 en bits signés (1), et affecter la valeur 0 aux bits marqués # . Il complète en outre le flux rj adressé au bloc 3 en insérant les bits de signalisation adéquats dans les champs PL, TFCI et TPC du DPCCH.
Le bloc de démultiplexage 8 comporte des modules qui effectuent, dans le sens inverse, les opérations duales des modules 20-32j du bloc de multiplexage 2. Sur la figure 5, les références primées correspondent aux estimations des symboles portant les mêmes références non primées sur la figure 4. Pour les symboles composés de deux bits formatés comme indiqué ci-
dessus en raison du marquage des bits 8 , ces estimations (softbits) se rapportent au bit de poids le plus faible.
Pour chaque trame de 10 ms et chaque PhCH, le module 52j extrait des champs DATAI et DATA2 du signal démodulé la séquence v. de Uj softbits relevant du DPDCH. Le module de désentrelacement 51 applique à cette séquence v' la permutation inverse du module 31 pour restituer la séquence de softbits u'. Les Y séquences u'j sont mises bout à bout par le module de multiplexage 50 pour former la séquence de softbits w' relative au CCTrCH Dans le cas où les TrCH sont à positions variables, le module 49 Y supprime les Uj -S derniers softbits de la séquence w', qui correspondent j=1 à des bits 8 . La séquence de softbits s' produite par le module 49 est découpée par le module de segmentation 49 en X sous-séquences f, respectivement affectées aux TrCH Pour chaque TrCH i dont le TTI comporte plusieurs trames (F, > 1), le module 47i concatène les sous-séquences produites relativement aux différentes trames pour former la séquence q', soumise au module de désentrelacement inter-trame 46i. Celui-ci opère la permutation inverse du module 26j pour restituer la séquence de softbits h'i. Dans le cas où les TrCH sont à positions fixes, le module 45j supprime les Fi Hi - G, derniers softbits de la séquence h'i, qui correspondent à des bits 8 . La séquence de softbits s' produite par le module 49 est ensuite traitée par le module d'adaptation de débit 44i qui effectue les opérations suivantes : - insertion d'un softbit nul (vraisemblance minimale) à la place de chaque bit qui a été poinçonné à l'émission ; - réévaluation de chaque softbit correspondant à un bit qui a été répété à l'émission, afin d'en affiner la vraisemblance.
Le système utilisera alors le fait que l'état du lien Suggéré Dérivé est Consulté (le lien est stocké de manière permanente sur le serveur) pour ne pas suggérer à nouveau ce Contenu à la prochaine connexion de l'Utilisateur sur ce Profil. ii) Propagation d'un Profil Dérivé à son (ou ses) Profil(s) source (s) Les Références ajoutées dans un Profil Dérivé sont automatiquement suggérées au(x) propriétaire (s) du (des) Profil(s) d'origine. Bien entendu, ce (ou ces) derniers peu (ven)t les accepter ou les refuser.
Le résultat de la suggestion automatique du Profil B au Profil A se matérialise par un lien Suggéré, comme illustré sur la figure 96, qui n'est pas stocké de manière permanente : - Dans le cas où le possesseur du Profil A accepte la Référence R, il n'est plus besoin de la suggérer à nouveau à chaque connexion, car une autre Référence R' sur R est créée. Pour le permettre, le lien Suggéré est rendu permanent. Ceci est illustré sur la figure 97. iii) Référencement (Suggestion manuelle)
Note sur les types de liens Profil-Contenu Les Contenus (plus exactement des Références à des Contenus) situés dans un Profil Propre ou dans un Profil Dérivé ont des liens avec ces Profils qui peuvent être différents.
Note sur les Transitions des liens On va décrire ci-dessous les différentes transitions apparaissant pour des liens Créés, des liens Dérivés, des liens Suggérés et des liens Archive. a. Transitions des liens Créés (figure 101) 1. Création d'une Référence (nouveau Contenu, Contenu pris du Contenant associé ou d'un autre Contenant) 2. L'Utilisateur veut la supprimer, celle-ci est d'abord mise en Archive (effet : lien Archive transition 1 ) 3. Remettre dans le Profil une Référence Retirée ( restore ) (effet : lien Archive transition 2) 4. Au cas où le Compteur de Dérivation tombe à zéro, la Référence peut être Supprimée effectivement (Supprimée aussi dans l'Archive - Transition 2) ainsi que son lien. b. Transitions des liens Dérivés (figure 102)
Un exemple de ce procédé de préparation est décrit dans le document de brevet WO 99/47617, par exemple l'estérification d'une résine alkyde à fonctions hydroxy avec du malonate de diéthyle, suivie de la transamidation du groupe ester libre avec du diméthylacétal du 4-aminobutyraldéhyde dans un rapport approprié. La résine alkyde modifiée par des groupes acétal obtenue est appropriée comme constituant (al).
Pour l'incorporation de groupes alcoxysilane dans la résine alkyde, on utilise un siloxane ayant un ou plusieurs groupes réactifs que l'on fait ensuite réagir avec un ou plusieurs des constituants formant la résine alkyde. Ce sont, par exemple, des alcoxysilanes de formule: dans laquelle R, est un groupe alcoxy ou oxyalkylènealcoxy ou, lorsque X est un atome d'hydrogène, R, est un halogène, R2 est un groupe aliphatique, cycloaliphatique ou aromatique, et X est un atome d'hydrogène ou un groupe alkyle substitué par un groupe amino, isocyanate, mercapto ou époxy ; est un nombre de 1 à 3, b est un nombre de 1 à 3, c est un nombre de 0 à 2 et a + b + c = 4.
R, est de préférence un groupe alcoxy de 1 à 4 atomes de carbone, et R2 est de préférence un groupe ayant au maximum 18 atomes de carbone.
Des exemples de siloxanes appropriés sont le 3-aminopropyltriéthoxysilane, un aminosilane modifié avec un éther de polyglycol, le 3aminopropyl-triméthoxysilane, le 3-aminopropyltris-méthoxyéthoxyéthoxysilane, le 3-aminopropyl-méthyl-diéthoxysilane, le N-2-aminoéthyl-3-aminopropyl-triméthoxysilane, le N-2-aminoéthyl-3-aminopropyl-méthyldiméthoxy-silane, le N-méthyl-3aminopropyl-triméthoxysilane, le 3-uréidopropyl-triéthoxysilane, le 3,4,5-dihydro-
imidazol-1-yl-propyltriéthoxysilane, le 3-méthacryloxypropyl-triméthoxysilane, le 3glycidyloxypropyl-triméthoxysilane, le 3-mercaptopropyl-triméthoxysilane et le 3mercaptopropyl-méthyl-diméthoxysilane, le triéthoxysilane, le diéthoxyméthylsilane, le diméthoxyméthylsilane, le triméthoxysilane, le trichlorosilane, le triiodosilane, le tribromosilane, le dichlorométhylsilane et le dibromométhylsilane.
On peut modifier la résine alkyde par exemple en insérant un alcoxysilane modifié par des groupes amino dans une résine alkyde modifiée avec un polyisocyanate ou un polyester d'un alcool de bas point d'ébullition. On peut lier des alcoxysilanes à fonctions hydrure directement à la résine alkyde, c'est-à-dire sans la modifier avec une molécule de liaison comme un diisocyanate ou un diester, en ajoutant un composé contenant un groupe hydrure de silyle à un groupe à insaturation éthylénique de la résine alkyde. Cette addition est catalysée par un métal de transition. Dans ce procédé, on utilise de préférence un hydrure de silyle halogéné et, pour terminer la réaction d'addition, on le transforme en un alcoxysilane avec un alcool de bas point d'ébullition. La réaction d'addition s'effectue avantageusement en l'absence de groupes à encombrement stérique et évolue de manière optimale lorsque les groupes à insaturation éthylénique sont des groupes terminaux comme dans le cas, par exemple, d'esters de l'acide 10-undécènecarboxylique.
Des exemples de la préparation de résines alkydes modifiées par des alcoxysilanes sont décrits dans le document de brevet WO 99/47617. L'estérification d'une résine alkyde à fonctions hydroxy avec du malonate de diéthyle, suivie d'une transamidation du groupe ester libre avec du 3-aminopropyltriéthoxysilane dans un rapport approprié donne une résine alkyde modifiée par des groupes alcoxysilane. On peut aussi faire réagir une résine alkyde modifiée par des groupes hydroxy avec un excès de diisocyanate d'isophorone, puis faire réagir les groupes isocyanate libres avec du 3-aminopropyltriéthoxysilane. Les deux résines alkydes modifiées par des groupes alcoxysilane obtenues par les procédés décrits conviennent pour l'utilisation dans le constituant (al).
Lorsque des constituants polymérisables par voie radicalaire ont été ajoutés à la formulation selon l'invention, il peut être avantageux d'ajouter aussi un photoamorceur de radicaux libres approprié ou un mélange de tels photoamorceurs, par exemple la benzophénone et ses dérivés, l'acétophénone et ses dérivés, par exemple l'a-hydroxycyclohexylphénylcétone ou la 2-hydroxy-2-méthyl-l- phénylpropanone, la 2-hydroxy-1-[3-[4-(2-hydroxy-2-méthylpropionyl)phényl]- l,l,3-triméthylindan-5-yl]-2-méthylpropan-l-one, une a-hydroxy- ou a-aminoacétophénone, comme, par exemple, le (4-méthylthiobenzoyl)-l-méthyl-l-
morpholinoéthane, le (4-morpholinobenzoyl)-1-benzyl-1-diméthylaminopropane, un 4-aroyl-l,3-dioxolane, des éthers alkyliques de benzoïne et un cétal de benzile comme, par exemple, le diméthylcétal de benzile, le glyoxalate de phényle et ses dérivés, un oxyde de mono- ou bis-acylphosphine comme, par exemple, l'oxyde de (2,4,6-triméthylbenzoyl)phénylphosphine, l'oxyde de bis(2,6-diméthoxybenzoyl)- (2,4,4-triméthylpent-1-yl)phosphine, l'oxyde de bis(2,4,6-triméthylbenzoyl)phénylphosphine ou l'oxyde de bis(2,4,6-triméthylbenzoyl)(2,4-dipentyloxyphényl)phosphine.
D'autres constituants supplémentaires peuvent être, par exemple, des constituants à fonctions hydroxy, comme des alcools, des polyesterpolyols, des polyuréthanes contenant des groupes hydroxy, de l'huile de ricin, etc. Des exemples comprennent des polyols aliphatiques et cycloaliphatiques comme des alkylènediols ayant de préférence de 2 à 12 atomes de carbone, par exemple l'éthylèneglycol, le 1,2- ou 1,3-propanediol, le 1,2-, 1,3- ou 1,4-butanediol, le pentanediol, l'hexanediol, l'octanediol, le dodécanediol, le diéthylèneglycol, le triéthylèneglycol, des polyéthylèneglycols ayant des masses molaires comprises de préférence entre 200 et 1 500, le 1,3-cyclopentanediol, le 1,2-, 1,3- ou 1,4-cyclohexanediol, le 1,4dihydroxyméthylcyclohexane, le glycérol, la tris(ss-hydroxyéthyl)amine, le triméthyloléthane, le triméthylolpropane, le pentaérythritol, le dipentaérythritol et le sorbitol. Les polyols peuvent être partiellement ou totalement estérifiés par un acide carboxylique insaturé ou par différents acides carboxyliques insaturés, les groupes hydroxyle libres des esters partiels pouvant être modifiés, par exemple éthérifiés ou estérifiés par d'autres acides carboxyliques. Des exemples d'esters comprennent : triacrylate de triméthylolpropane, le triacrylate de triméthyoléthane, le triméthacrylate de triméthylolpropane, le triméthacrylate de triméthyloléthane, le diméthacrylate de tétraméthylèneglycol, le diméthacrylate de triéthylèneglycol, le diacrylate de tétraéthylèneglycol, le diacrylate de pentaérythritol, le triacrylate de pentaérythritol, le tétraacrylate de pentaérythritol, le diacrylate de dipentaérythritol, le triacrylate de dipentaérythritol, le tétraacrylate de dipentaérythritol, le pentaacrylate de dipentaérythritol, l'hexaacrylate de dipentaérythritol, l'octaacrylate de tripentaérythritol, le diméthacrylate de pentaérythritol, le triméthacrylate de pentaérythritol, le diméthacrylate de dipentaérythritol, le tétraméthacrylate de dipentaérythritol, l'octaméthacrylate de tripentaérythritol, le diitaconate de pentaérythritol, le trisitaconate de dipentaérythritol, le penta-itaconate de dipentaérythritol, l'hexa-itaconate de dipentaérythritol, le diacrylate d'éthylèneglycol, le diacrylate de 1,3-butanediol, le diméthacrylate de 1,3-butanediol, le diitaconate de
1,4-butanediol, le triacrylate de sorbitol, le tétraacrylate de sorbitol, un triacrylate modifié de pentaérythritol, le tétraméthacrylate de sorbitol, le pentaacrylate de sorbitol, l'hexaacrylate de sorbitol, des acrylates et méthacrylates oligoesters, le di- et triacrylate de glycérol, le diacrylate de 1,4-cyclohexane, des bisacrylates et bisméthacrylates de polyéthylèneglycol ayant une masse molaire de 200 à 1 500, ou leurs mélanges.
On peut aussi utiliser les sels d'iodonium de formule 1 par exemple comme durcisseurs pouvant être activés par la lumière pour des résines contenant des groupes siloxane. Ces résines peuvent par exemple subir une autocondensation par hydrolyse catalysée par un acide ou elles peuvent être réticulées avec un second constituant résinique comme, par exemple, un polyalcool, une résine acrylique ou polyester contenant des groupes hydroxy, un polyvinylacétal partiellement hydrolysé ou un poly(alcool vinylique). Ce type de polycondensation de polysiloxanes est décrit par exemple dans J.J. Lebrun, H. Pode, Comprehensive Polymer Science, vol.
5, page 593, Pergamon Press, Oxford, 1989.