Gestion des URL de IE (barre d'adresse)

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Gestion des URL de IE (barre d'adresse)

Message par Anonyme2 »

j'ai écrit ce petit utilitaire pour ma femme car elle me demandait régulièrement de supprimer des adresse présentes dans la liste défilante d'Internet Exploreur (elle ne connait rien au registre alors je ne la laissait pas faire)

Faut ouvrir regedit, aller dans l'emplacement correspondant, et supprimer les Urls désirées puis renommer le nom de chaque Url restante en commençant par Url1 sinon si il y a un trou dans la numérotation, les Urls après ce décalage seront effacées.

Ce code utilise ma librairie Morelisticongadget (la version qui va bientôt venir) mais je n'ai pas encore fait doc et de toute façon il faut que je peaufine plusieurs commandes ( :twisted: les thèmes XP :twisted: )

Comme j'utilise la modification de police des éléments des listicongadgets, il faut ma nouvelle lib

Elle est ici

Vous installez ce fichier dans le dossier
Purebasic\PureLibraries\UserLibraries
et vous relancez Purebasic soit en fermant soit dans le menu
compilateur\redémarrer le compilateur
Sinon voici l'exe tout prêtici

Cet utilitaire liste au démarrage les Urls du registre

A partir de là, on peut soit en effacer en sélectionnant les Urls voulues avec les boites à cocher soit importer des urls depuis un fichier (fichier construit avec cet utilitaire, mais tout n'est pas encore terminé) Si on supprime des Urls, un messagerequester demande si on veut sauvegarder les Urls du registre (ce sont toutes les Urls du registres, pas celles sélectionnées, si on clique sur oui, on a ensuite un fichier de sauvegarde, au cas ou...)

Si on importe des Urls, la listicon change de couleur de fond et n'a plus qu'un champ, mais l'import d'Urls ne modifie absolument pas le registre.
Pour modifier le registre à partir des Urls importées, on sélectionne celles voulues avec les boîtes à cocher et soit on remplace toutes celles du registres par celles sélectionnées (bouton remplacer) soit on les ajoute à la suite de celles du registre sachant que s'il y a une Url en double, elle ne sera pas ajoutée (bouton ajouter)

Si on remplace ou on ajoute, un message indique le nombre d'Urls ajouté/remplacé

En mode import Url, si on clique sur le bouton "Afficher registre", on repasse en mode d'affichage des Urls du registre.

Voici un fichier d'url importé, fichier uniquement construit avec des writestringN donc facilement modifiable. Il doit obligatoirement avoir l'extension .ieu sinon il ne sera pas chargé.

ici

Encore une chose, si internet exploreur est ouvert, le registre est bien modifié mais pas la liste de IE, lorsque vous quitterez IE, les Urls qu'il contient remplaceront celles du registre, donc si vous utilisez ce pztit utilitaire, fermez IE d'abord.

Il me rete à faire :

- fermeture auto de IE si on exécute ce utilitaire
- le déplacement des éléments dans les Listicon pour modifier l'ordre d'affichage
- l'amélioration des icones de la statusBar (pas au point encore la version 3.91
- L'ajout d'icônes dans l'entête des colonnes des listicon (ma lib le fait mais il y a un léger bug (n'affiche pas les icones lorsqu'il y a plus d'une listicon)
- Le tri des colonnes
et si vous en voyez d'autres ...

Voici le code (uniquement testé sur XP édition familliale avec ou sans les thèmes)

Code : Tout sélectionner

; Clée du registre : "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs\"
; compatibles : 95-98-ME-NT-2000-XP
; lieu ou est stocké l'historique de la navigation (Url dans la barre d'adresse de IE)


Enumeration
  #MainWindow
  #StatusBar
  #Listicon
  #Listicon_Import
  #HeaderFont
  #Font
  #Font2
  #Image_Internet
  #Image_Position
  #Image_Croix
  #TextGadget1
  #TextGadget2
  #TextGadget3
  #FontText3
  #TextGadgetFont
  #Cocher
  #Decocher
  #Inverse
  #AfficheQuadrillage
  #MasqueQuadrillage
  #Frame3DQuadrillage
  #Frame3DCocher
  #BoutonSupprimer_Url
  #BoutonImporter_Url
  #BoutonRemplacer_Url
  #BoutonAjouter_Url
  #BoutonAfficherUrl_Reg
  #FichierSauvegarde
EndEnumeration

; constantes
#brush = 0 ; $D6F7E4  ; couleur de fond de la statusbar
#LVN_FIRST = -100
#LVN_ITEMACTIVATE = (#LVN_FIRST - 14)

; variables globales
Global HeaderFont.l, Font.l, Font2, Font3 ; les polices
Global Internet.l, Position.l, Croix .l ; les images chargées depuis les datas
Global ListIconAfficher.l ; stocke quelle listicon est affichée
Global brush, WhiteBrush.l
Global LongueurMax_NomValeur.l ; stocke la valeur max du nom de la chaine "Value" du registre
; pour une clée donnée

Global LongueurMaxValeur.l ; stocke la valeur max de la chaine "Value" du registre
; pour une clée donnée
; liste chainée
NewList Url_Presentes.s() ; pour mémoriser les noms des valeurs du registres lors de la lecture
; sera utilisé pour effacer les valeurs

; déclaration
Declare MyWindowCallBack(Window.l, Message.l, wParam.l, lParam.l)
Declare SelectionneBouton(Index)
Declare AfficheListIcon(Gadget)
Declare UpdateMyStatusBar()

; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

Procedure Init()
  WhiteBrush = GetStockObject_(#WHITE_BRUSH)
  Brush = CreateSolidBrush_(#brush)
  HeaderFont = LoadFont(#HeaderFont, "ARIAL", 9, #PB_Font_Italic)
  Font = LoadFont(#TextGadgetFont, "ARIAL", 8, #PB_Font_Bold)
  Font2 = LoadFont(#Font2, "ARIAL", 8, #PB_Font_Italic | #PB_Font_Bold)
  Font3 = LoadFont(#FontText3, "ARIAL", 8, #PB_Font_Italic)
  Position = CatchImage(#Image_Position, ?Icone_Preference)
  Croix = CatchImage(#Image_Croix, ?Icon_Croix)
  LongueurMax_NomValeur = 255
  LongueurMaxValeur = 16300
EndProcedure

; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

Procedure BalloonTip(WindowID, Gadget, Text$, Title$, Icon)
  ToolTip = CreateWindowEx_(0, "ToolTips_Class32", "", #WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON, 0, 0, 0, 0, WindowID(WindowID), 0, GetModuleHandle_(0), 0)
  SendMessage_(ToolTip, #TTM_SETTIPTEXTCOLOR, GetSysColor_(#COLOR_INFOTEXT), 0)
  SendMessage_(ToolTip, #TTM_SETTIPBKCOLOR, GetSysColor_(#COLOR_INFOBK), 0)
  SendMessage_(ToolTip, #TTM_SETMAXTIPWIDTH, 0, 180)
  Balloon.TOOLINFO\cbSize = SizeOf(TOOLINFO)
  Balloon\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
  Balloon\hWnd = GadgetID(Gadget)
  Balloon\uId = GadgetID(Gadget)
  Balloon\lpszText = @Text$
  SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon)
  If Title$ > ""
    SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$)
  EndIf
EndProcedure

; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

Procedure Enumere_Valeur(type_cle, sous_cle$)
  AfficheListIcon(#Listicon)
  ClearGadgetItemList(#Listicon) ; supprime tous les éléments de la listicongadget
  If RegOpenKeyEx_(type_cle, sous_cle$, 0, #KEY_EXECUTE, @hKey) = #ERROR_SUCCESS ; ouvre la clée
    lpcchValue = LongueurMax_NomValeur ; variable indiquant la taille max de la chaine
    lpcbData = LongueurMaxValeur ; variable indiquant la taille max de la chaine données
    lpszValue$ = Space(lpcchValue) ; initialisation de la chaine qui récupère la valeur
    lpbData$ = Space(lpcbData)
    ; iValue = 0 ; compteur utilisé par RegEnumValue pour énumérer les valeurs
    ; incémenté de 1 à chaque tour de boucle
    Enum = RegEnumValue_(hKey, iValue, @lpszValue$, @lpcchValue, 0, 0, @lpbData$, @lpcbData)
    While Enum = #ERROR_SUCCESS Or Enum <> #ERROR_NO_MORE_ITEMS
      AddGadgetItem(#Listicon, -1, lpszValue$ + Chr(10) + lpbData$)
      iValue + 1 ; on incrémente le compteur d'énumération
      lpcchValue = LongueurMax_NomValeur ; variable indiquant la taille max de la chaine
      lpcbData = LongueurMaxValeur ; variable indiquant la taille max de la chaine données
      Enum = RegEnumValue_(hKey, iValue, @lpszValue$, @lpcchValue, 0, 0, @lpbData$, @lpcbData)
    Wend
    RegCloseKey_(hKey)
    UpdateMyStatusBar()
    SetGadgetState(#cocher, 0)
    SetGadgetState(#Inverse, 0)
    SetGadgetState(#Decocher, 1)
  EndIf
  SelectionneBouton(1)
EndProcedure

; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

Procedure MyWindowCallBack(Window.l, Message.l, wParam.l, lParam.l)
  ; gestion des couleurs des gadgets
  Result = #PB_ProcessPureBasicEvents
  Select Message
    Case #WM_CTLCOLORSTATIC
      If lParam = GadgetID(#AfficheQuadrillage) Or lParam = GadgetID(#MasqueQuadrillage)
        SetBkMode_(wParam, #TRANSPARENT)
        Result = WhiteBrush
      ElseIf lParam = GadgetID(#Decocher) Or lParam = GadgetID(#Cocher) Or lParam = GadgetID(#Inverse)
        SetBkMode_(wParam, #TRANSPARENT)
        Result = WhiteBrush
      ElseIf lParam = GadgetID(#Frame3DQuadrillage) Or lParam = GadgetID(#Frame3DCocher)
        SetBkMode_(wParam, #TRANSPARENT)
        SetTextColor_(wParam, #blue)
        Result = WhiteBrush
      EndIf
      
    Case #WM_NOTIFY ; pour intercepter les événements des ListiconGadget
      ; détecte le click simple sur la boite à cocher
      ; deux cas  la valeur retournée vaut :
      *lpnmia.NMLISTVIEW = lParam
      Select *lpnmia\hdr\code
        Case #LVN_ITEMCHANGED
          If * lpnmia\uNewState = 4096 ; l'élément vient d'être décoché
            If ListIconAfficher = #Listicon
              ; on affiche la ligne en noir, police systeme
              SetRowColor(#Listicon, *lpnmia\iItem, #black, RGB(255, 255, 223), 0)
            Else
              SetItemColor(#Listicon_import, *lpnmia\iItem, 0, #black, RGB($DB, $ED, $DC), 0)
            EndIf
            UpdateMyStatusBar()
          ElseIf * lpnmia\uNewState = 8192 ; l'élément vient d'être coché
            If ListIconAfficher = #Listicon
              ; on affiche la ligne correspondante en noir, police grasse, le fond des lignes plus foncé
              SetRowColor(#Listicon, *lpnmia\iItem, #black, RGB(208, 208, 176), font)
            Else
              SetItemColor(#Listicon_import, *lpnmia\iItem, 0, #black, RGB($DB - $2F, $ED - $2F, $DC - $2F), font)
            EndIf
            UpdateMyStatusBar()
          EndIf
      EndSelect
  EndSelect
  ProcedureReturn Result
EndProcedure

; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

Procedure UpdateMyStatusBar()
  z = CountGadgetItems(ListIconAfficher) - 1
  If z = -1 : z = 0 : EndIf
  For i = 0 To z
    If GetGadgetItemState(ListIconAfficher, i) & #PB_ListIcon_Checked
      Compteur + 1 ; compte le nombre d'éléments sélectionnés
    EndIf
  Next
  
  If ListIconAfficher = #ListIcon
    StatusBarText(#StatusBar, 0, "  Url présentes dans le registre : " + Str(CountGadgetItems(#Listicon)))
  Else
    StatusBarText(#StatusBar, 0, "  Url présentes pour l'import : " + Str(CountGadgetItems(#Listicon_import)))
  EndIf
  If compteur = 1
    StatusBarText(#StatusBar, 1, "  " + Str(compteur) + " élément sélectionné")
  ElseIf compteur <> 0
    StatusBarText(#StatusBar, 1, "  " + Str(compteur) + " éléments sélectionnés")
  Else
    StatusBarText(#StatusBar, 1, "  Aucun élément sélectionné")
  EndIf
  
EndProcedure

; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

Procedure EffaceUrl_Du_Registre(type_cle, sous_cle$)
  ; on lit toutes les valeurs de la clées des urls et on stcoke dans une liste chaînée
  ; car on ne peut pas énumérer les valeurs et les effacer en même temps
  ClearList(Url_Presentes()) ; efface tous les éléments de la liste chainée
  If RegOpenKeyEx_(type_cle, sous_cle$, 0, #KEY_EXECUTE, @hKey) = #ERROR_SUCCESS ; ouvre la clée
    lpcchValue = LongueurMax_NomValeur ; variable indiquant la taille max de la chaine
    lpcbData = LongueurMaxValeur ; variable indiquant la taille max de la chaine données
    lpszValue$ = Space(lpcchValue) ; initialisation de la chaine qui récupère la valeur
    lpbData$ = Space(lpcbData)
    ; iValue = 0 ; compteur utilisé par RegEnumValue pour énumérer les valeurs
    ; incémenté de 1 à chaque tour de boucle
    Enum = RegEnumValue_(hKey, iValue, @lpszValue$, @lpcchValue, 0, 0, @lpbData$, @lpcbData)
    While Enum = #ERROR_SUCCESS Or Enum <> #ERROR_NO_MORE_ITEMS
      AddElement(Url_Presentes()) ; mémorise le champ 'nom' des valeurs du registre
      Url_Presentes() = lpszValue$
      iValue + 1 ; on incrémente le compteur d'énumération
      lpcchValue = LongueurMax_NomValeur ; variable indiquant la taille max de la chaine
      lpcbData = LongueurMaxValeur ; variable indiquant la taille max de la chaine données
      Enum = RegEnumValue_(hKey, iValue, @lpszValue$, @lpcchValue, 0, 0, @lpbData$, @lpcbData)
    Wend
    RegCloseKey_(hKey)
  EndIf
  
  ; on supprime toutes les clées du registre pour les urls
  If RegOpenKeyEx_(type_cle, sous_cle$, 0, #KEY_SET_VALUE, @hKey) = #ERROR_SUCCESS ; ouvre la clée
    ForEach Url_Presentes()
      RegDeleteValue_(hKey, Url_Presentes()) ; efface la valeur
    Next
    RegCloseKey_(hKey)
  EndIf
EndProcedure

; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

Procedure SupprimeUrl(type_cle, sous_cle$)
  ; demande de sauvegardes de l'ensemble des Urls avant effacement du registre
  #Oui = 6
  #Non = 7
  If MessageRequester("Urls actuelles", "Sauvegarder l'ensemble des Urls du registre ?", #PB_MessageRequester_YesNo) = #oui
    ; c'est oui, on sauvegarde avant de supprimer les Urls
    Fichier.s = SaveFileRequester("Sauvegarder les Urls", "", "Fichiers Url | *.ieu", 0)
    If fichier
      Ext$ = LCase(GetExtensionPart(fichier))
      If Ext$ <> "ieu"
        If Ext$ = ""
          fichier = GetPathPart(fichier) + GetFilePart(fichier) + ".ieu"
        Else
          fichier = Mid(fichier, 1, Len(Fichier) - Len(GetExtensionPart(fichier))) + Ext$
        EndIf
      EndIf
      
      If OpenFile(#FichierSauvegarde, fichier)
        For i = 1 To CountGadgetItems(#Listicon)
          WriteStringN(GetGadgetItemText(#Listicon, i - 1, 1))
        Next i
        CloseFile(#FichierSauvegarde)
      EndIf
    EndIf
  EndIf
  
  ; on supprime les clées du registre
  EffaceUrl_Du_Registre(type_cle, sous_cle$)
  
  ; on écrit les valeurs dans le registre qui ne sont pas cochées dans la ListeIconGadget
  If RegOpenKeyEx_(type_cle, sous_cle$, 0, #KEY_SET_VALUE, @hKey) = #ERROR_SUCCESS ; ouvre la clée
    z = CountGadgetItems(#Listicon) - 1
    url = 1
    For i = 0 To z
      If GetGadgetItemState(#Listicon, i) & #PB_ListIcon_Checked = 0
        Datas$ = GetGadgetItemText(#Listicon, i, 1)
        RegSetValueEx_(hKey, "url" + Str(url), 0, #REG_SZ, Datas$, Len(Datas$) + 1) ; ajoute la valeur la valeur
        url + 1
      EndIf
    Next i
    RegCloseKey_(hKey)
  EndIf
  
  ; énumère toutes les Urls présentes dans le registre et affiche dans la listicon
  Enumere_Valeur(#HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\TypedURLs\")
  
EndProcedure

; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

Procedure Url_Selectionner(Gadget)
  ; retourne 0 si aucune boites n'est cochée
  ; sinon retourne  le nombre d'éléments cochés
  z = CountGadgetItems(Gadget) - 1
  For i = 0 To z
    If GetGadgetItemState(Gadget, i) & #PB_ListIcon_Checked
      Nb_Element + 1
    EndIf
  Next i
  ProcedureReturn Nb_Element
EndProcedure

; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

Procedure ImporterUrl()
  ; affiche dans la listicon les url sauvegardées dans un fichier
  ; mais ne modifie pas le registre
  Fichier.s = OpenFileRequester("Importer des Urls", "", "Fichiers Url | *.ieu", 0)
  If fichier
    Ext$ = LCase(GetExtensionPart(fichier))
    If Ext$ = "ieu"
      If OpenFile(#FichierSauvegarde, fichier)
        i + 1 ; initialise i à 1
        ; on masque la listicon en mode normal
        ; on affiche la listicon mode Import Url
        AfficheListIcon(#Listicon_Import)
        ClearGadgetItemList(#Listicon_Import) ; supprime tous les éléments
        SelectionneBouton(0)
        While Eof(#FichierSauvegarde) = 0
          AddGadgetItem(#Listicon_Import, -1, ReadString())
          i + 1
        Wend
        CloseFile(#FichierSauvegarde)
      EndIf
      UpdateMyStatusBar()
    Else
      MessageRequester(" Erreur", "Le fichier n'a pas la bonne extension   ", 16)
    EndIf
  EndIf
  
EndProcedure

; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

Procedure RemplacerUrl(type_cle, sous_cle$)
  z = CountGadgetItems(#Listicon_Import) - 1
  ; on supprime les clées du registre
  Debug CountList(Url_Presentes())
  EffaceUrl_Du_Registre(type_cle, sous_cle$)
  
  Url_Registre = CountList(Url_Presentes())
  Debug Url_Registre
  If RegOpenKeyEx_(type_cle, sous_cle$, 0, #KEY_SET_VALUE, @hKey) = #ERROR_SUCCESS ; ouvre la clée
    url = 1
    For i = 0 To z
      If GetGadgetItemState(#Listicon_Import, i) & #PB_ListIcon_Checked
        ; on écrit les clées du registre qui sont cochées dans la ListeIconGadget
        Nom$ = "url" + Str(url)
        Datas$ = GetGadgetItemText(#Listicon_Import, i, 0)
        RegSetValueEx_(hKey, Nom$, 0, #REG_SZ, Datas$, Len(Datas$) + 1) ; ajoute la valeur
        url + 1
      EndIf
    Next i
    RegCloseKey_(hKey)
    AfficheListIcon(#Listicon)
    
    ; énumère toutes les Urls présentes dans le registre et affiche dans la listicon
    Enumere_Valeur(#HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\TypedURLs\")
    url - 1 ;- - car à la sortie de boucle du for i, url a été incrémenté de 1
    Select Url_Registre
      Case 0
        Msg1.s = "Aucune Url n'a été effacée du registre    "
      Case 1
        Msg1.s = "1 Url a été effacée du registre    "
      Default
        Msg1.s = Str(Url_Registre) + " Url ont été effacées du registre    "
    EndSelect
    Select Url
      Case 0
        Msg2.s = "Aucune Url n' a été ajoutée au registre    "
      Case 1
        Msg2.s = "1 Url a été ajoutée au registre    "
      Default
        Msg2.s = Str(Url) + " Url ont été ajoutées au registre    "
    EndSelect
    MessageRequester("Modification du registre", Msg1 + Chr(10) + Chr(10) + Msg2, 16)
    
  EndIf
EndProcedure

; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

Procedure LectureUrlRegistre(type_cle, sous_cle$)
  ; on lit toutes les valeurs de la clée des urls et on stocke dans une liste chaînée
  ClearList(Url_Presentes()) ; efface tous les éléments de la liste chainée
  If RegOpenKeyEx_(type_cle, sous_cle$, 0, #KEY_EXECUTE, @hKey) = #ERROR_SUCCESS ; ouvre la clée
    lpcchValue = LongueurMax_NomValeur ; variable indiquant la taille max de la chaine
    lpcbData = LongueurMaxValeur ; variable indiquant la taille max de la chaine données
    lpszValue$ = Space(lpcchValue) ; initialisation de la chaine qui récupère la valeur
    lpbData$ = Space(lpcbData)
    ; iValue = 0 ; compteur utilisé par RegEnumValue pour énumérer les valeurs
    ; incémenté de 1 à chaque tour de boucle
    Enum = RegEnumValue_(hKey, iValue, @lpszValue$, @lpcchValue, 0, 0, @lpbData$, @lpcbData)
    While Enum = #ERROR_SUCCESS Or Enum <> #ERROR_NO_MORE_ITEMS
      AddElement(Url_Presentes()) ; mémorise le champ 'nom' des valeurs du registre
      Url_Presentes() = lpbData$ ; on stocke les Urls
      iValue + 1 ; on incrémente le compteur d'énumération
      lpcchValue = LongueurMax_NomValeur ; variable indiquant la taille max de la chaine
      lpcbData = LongueurMaxValeur ; variable indiquant la taille max de la chaine données
      Enum = RegEnumValue_(hKey, iValue, @lpszValue$, @lpcchValue, 0, 0, @lpbData$, @lpcbData)
    Wend
    RegCloseKey_(hKey)
  EndIf
EndProcedure

; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

Procedure AjouterUrl(type_cle, sous_cle$)
  ; on lit toutes les valeurs de la clée des urls et on stocke dans une liste chaînée
  ; on compare les Urls de la liste chaînée à celle cochées de la liste
  z = CountGadgetItems(#Listicon_Import) - 1
  For i = 0 To z
    LectureUrlRegistre(type_cle, sous_cle$) ; on relit à chaque tour pour éviter les doublons
    Urlexiste = #false
    If GetGadgetItemState(#Listicon_Import, i) & #PB_ListIcon_Checked
      ForEach Url_Presentes()
        If LCase(Url_Presentes()) = LCase(GetGadgetItemText(#Listicon_Import, i, 0))
          Urlexiste = #true
          Break ; on quitte et on passe à l'élément suivant
        EndIf
      Next
      If Urlexiste = #false And RegOpenKeyEx_(type_cle, sous_cle$, 0, #KEY_SET_VALUE, @hKey) = #ERROR_SUCCESS ; ouvre la clée
        ; on écrit la nouvelle Url valeur dans registre
        Url_Ajouter + 1
        Url = CountList(Url_Presentes()) + 1
        Datas$ = GetGadgetItemText(#Listicon_Import, i, 0)
        RegSetValueEx_(hKey, "url" + Str(url), 0, #REG_SZ, Datas$, Len(Datas$) + 1)
        RegCloseKey_(hKey)
      EndIf
    EndIf
  Next i
  
  ; énumère toutes les Urls présentes dans le registre et affiche dans la listicon
  Enumere_Valeur(#HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\TypedURLs\")
  Select Url_Ajouter
    Case 0
      Msg.s = "Aucune Url n' a été ajoutée au registre    "
    Case 1
      Msg.s = "1 Url a été ajoutée au registre    "
    Default
      Msg.s = Str(Url_Ajouter) + " Url ont été ajoutées au registre    "
  EndSelect
  MessageRequester("Modification du registre", Msg, 16)
EndProcedure

; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

Procedure AfficheListIcon(Gadget)
  ; Affiche la listicon passée en paramètre et cache la seconde
  ; Met la variable ListIconAfficher à jour
  Select Gadget
      
    Case #Listicon ; on affiche la listicon et on cache la listicon_Import
      HideGadget(#Listicon, 0)
      HideGadget(#Listicon_Import, 1)
      ListIconAfficher = #Listicon
      
    Case #Listicon_Import ; on affiche la listicon_Import et on cache la listicon
      HideGadget(#Listicon_Import, 0)
      HideGadget(#Listicon, 1)
      ListIconAfficher = #Listicon_Import
  EndSelect
EndProcedure

; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

Procedure SelectionneBouton(Index)
  ; active ou désactive les 3 boutons ; #BoutonRemplacer_Url
  ; #BoutonSupprimer_Url
  ; #BoutonAjouter_Url
  
  ; Index = 0 on active #BoutonAjouter_Url et #BoutonRemplacer_Url
  ; on désactive #BoutonSupprimer_Url
  
  ; Index = 1 on désactive #BoutonAjouter_Url et #BoutonRemplacer_Url
  ; on active #BoutonSupprimer_Url
  
  If Index = 0
    DisableGadget(#BoutonAjouter_Url, Index)
    DisableGadget(#BoutonRemplacer_Url, Index)
    DisableGadget(#BoutonSupprimer_Url, 1)
  Else
    DisableGadget(#BoutonAjouter_Url, Index)
    DisableGadget(#BoutonRemplacer_Url, Index)
    DisableGadget(#BoutonSupprimer_Url, 0)
  EndIf
EndProcedure

; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

Procedure StatusBarheight(StatusBarHandle)
  BordureHorizontale.l
  BordureVerticale.l
  BordureInterRectangle.l
  ; **********************************************************
  ; Récupération de la hauteur et de la largeur de la StatusBar
  ; Code de Chris
  SendMessage_(StatusBarHandle, #SB_GETRECT, 0, @Value.RECT)
  Hauteur = Value\bottom - Value\top
  ; **********************************************************
  ; dimensions de la bordure
  SendMessage_(StatusBarHandle, #SB_GETBORDERS, 0, @BordureHorizontale)
  ProcedureReturn Value\bottom - Value\top + BordureVerticale
EndProcedure
; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

;- Programme principal
If OpenWindow(#MainWindow, 100, 150, 700, 432, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered, "Gestion des adresses pour Internet Exploreur")
  Init()
  If CreateGadgetList(WindowID())
    SetClassLong_(WindowID(), #GCL_HBRBACKGROUND, WhiteBrush)
    ; statusBar
    StatusBar = CreateStatusBar(#StatusBar, WindowID())
    If StatusBar
      AddStatusBarField(WindowWidth() / 2)
      AddStatusBarField(WindowWidth() / 2)
      SetGadgetFont(#StatusBar, font)
      StatusBarIcon(#StatusBar, 0, Position)
      StatusBarIcon(#StatusBar, 1, Croix)
      Hauteur_StatusBar = StatusBarheight(StatusBar)
    EndIf
    
    ; création des boutons pour le quadrillage
    OptionGadget(#AfficheQuadrillage, 20, 138, 129, 15, "  Afficher")
    OptionGadget(#MasqueQuadrillage, 20, 156, 134, 15, "  Masquer")
    SetGadgetState(#MasqueQuadrillage, 1)
    SetGadgetFont(#AfficheQuadrillage, Font2)
    SetGadgetFont(#MasqueQuadrillage, Font2)
    Frame3DGadget(#Frame3DQuadrillage, 12, 118, 152, 62, " Quadrillage ")
    
    ; création de la listicongadget d'affichage, 2 colonnes
    ; utilise ma librairie Morelisticongadget
    ListIconGadget(#Listicon, 180, 0, 600, 432 - Hauteur_StatusBar + 1, "Position dans la liste", 180, #PB_ListIcon_CheckBoxes | #PB_ListIcon_MultiSelect)
    AddGadgetColumn(#Listicon, 1, "  Adresse", 390)
    SetListIconGadgetColor(#Listicon, RGB(255, 255, 223))
    SetColumnHeaderFont(#Listicon, HeaderFont)
    SetColumnColor(#Listicon, 0, #black, -1)
    SetColumnColor(#Listicon, 1, #black, -1)
    
    ; création de la listicongadget d'affichage, 1 colonne pour le mode importation URL
    ; utilise ma librairie Morelisticongadget
    ListIconGadget(#Listicon_Import, 180, 0, 600, 432 - Hauteur_StatusBar + 1, "  Adresse  (Urls importées)", 180 + 390, #PB_ListIcon_CheckBoxes | #PB_ListIcon_MultiSelect)
    ; couleur du fond de la listicongadget ainsi que du fond du texte en bleu clair
    SetListIconGadgetColor(#Listicon_Import, RGB($DB, $ED, $DC))
    SetColumnHeaderFont(#Listicon_Import, HeaderFont)
    SetColumnColor(#Listicon_Import, 0, #blue, -1)
    AfficheListIcon(#Listicon)
    
    ; création des boutons pour les cases à cocher
    OptionGadget(#Cocher, 20, 43, 105, 15, "  Tout cocher")
    OptionGadget(#Decocher, 20, 43 + 18, 125, 15, "  Tout décocher")
    OptionGadget(#Inverse, 20, 43 + 36, 130, 15, "  Inverser la sélection")
    SetGadgetState(#Decocher, 1)
    Frame3DGadget(#Frame3DCocher, 12, 23, 152, 77, " Sélection ")
    SetGadgetFont(#Cocher, Font2)
    SetGadgetFont(#Decocher, Font2)
    SetGadgetFont(#Inverse, Font2)
    
    ButtonGadget(#BoutonSupprimer_Url, 20, 220 - 18, 130, 28, "Supprimer les Urls")
    SetGadgetFont(#BoutonSupprimer_Url, Font)
    BalloonTip(#MainWindow, #BoutonSupprimer_Url, "Supprime du registre toutes les Urls cochées de la liste.", "Supprimer les Url :", #TOOLTIP_INFO_ICON)
    
    ButtonGadget(#BoutonImporter_Url, 20, 255 - 18, 130, 28, "Importer des Urls")
    SetGadgetFont(#BoutonImporter_Url, Font)
    BalloonTip(#MainWindow, #BoutonImporter_Url, "Affiche depuis un fichier une liste d'Urls." + Chr(10) + "le registre n'est pas modifié.", "Importer des Urls :", #TOOLTIP_INFO_ICON)
    
    ButtonGadget(#BoutonRemplacer_Url, 20, 290 - 18, 130, 28, "Remplacer les Urls")
    SetGadgetFont(#BoutonRemplacer_Url, Font)
    BalloonTip(#MainWindow, #BoutonRemplacer_Url, "Efface toutes les Urls du registre et les remplace par celles cochées de la liste.", "Remplacer les Url :", #TOOLTIP_INFO_ICON)
    
    ButtonGadget(#BoutonAjouter_Url, 20, 325 - 18, 130, 28, "Ajouter les Urls")
    SetGadgetFont(#BoutonAjouter_Url, Font)
    BalloonTip(#MainWindow, #BoutonAjouter_Url, "Ajoute les Urls cochées de la liste dans le registre après celles existantes.", "Ajouter les Url :", #TOOLTIP_INFO_ICON)
    
    ButtonGadget(#BoutonAfficherUrl_Reg, 20, 375 - 10, 130, 28, "Afficher registre")
    SetGadgetFont(#BoutonAfficherUrl_Reg, Font)
    BalloonTip(#MainWindow, #BoutonAfficherUrl_Reg, "Affiche les Urls du registre.", "Affchage :", #TOOLTIP_INFO_ICON)
    
    ; énumère toutes les Urls présentes
    Enumere_Valeur(#HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\TypedURLs\")
    
    SetWindowCallback(@MyWindowCallBack())
    
    ;- Boucle evenements
    Repeat
      Select WaitWindowEvent()
        Case #PB_EventGadget
          event = EventGadgetID()
          
          If event = #Cocher
            If ListIconAfficher = #Listicon
              SelectListiconCheckBox(#ListIcon, #PB_SelectAll)
            Else
              SelectListiconCheckBox(#ListIcon_Import, #PB_SelectAll)
            EndIf
            
          ElseIf event = #Decocher
            If ListIconAfficher = #Listicon
              SelectListiconCheckBox(#ListIcon, #PB_UnSelectAll)
            Else
              SelectListiconCheckBox(#ListIcon_Import, #PB_UnSelectAll)
            EndIf
            
          ElseIf event = #Inverse
            If ListIconAfficher = #Listicon
              SelectListiconCheckBox(#ListIcon, #PB_ListIcon_Toggle)
            Else
              SelectListiconCheckBox(#ListIcon_Import, #PB_ListIcon_Toggle)
            EndIf
            
          ElseIf event = #AfficheQuadrillage
            If ListIconAfficher = #Listicon
              ShowListiconGridLines(#ListIcon, #PB_ListIcon_Show)
            Else
              ShowListiconGridLines(#ListIcon_Import, #PB_ListIcon_Show)
            EndIf
            
          ElseIf event = #MasqueQuadrillage
            If ListIconAfficher = #Listicon
              ShowListiconGridLines(#ListIcon, #PB_ListIcon_Hide)
            Else
              ShowListiconGridLines(#ListIcon_Import, #PB_ListIcon_Hide)
            EndIf
            
          ElseIf event = #BoutonSupprimer_Url
            If Url_Selectionner(#Listicon)
              SupprimeUrl(#HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\TypedURLs\")
            EndIf
            
          ElseIf event = #BoutonImporter_Url
            ImporterUrl()
            
          ElseIf event = #BoutonRemplacer_Url
            If Url_Selectionner(#Listicon_Import)
              RemplacerUrl(#HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\TypedURLs\")
            EndIf
            
          ElseIf event = #BoutonAjouter_Url
            If Url_Selectionner(#Listicon_Import)
              AjouterUrl(#HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\TypedURLs\")
            EndIf
            
          ElseIf event = #BoutonAfficherUrl_Reg
            ; énumère toutes les Urls présentes
            Enumere_Valeur(#HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\TypedURLs\")
            
          EndIf
          
        Case #WM_CLOSE
          Quit + 1
      EndSelect
    Until Quit
    
  EndIf
EndIf
DeleteObject_(Brush)
End

DataSection
  Icone_Preference :
    Data.l $00010000, $20200002, $00000010, $02E80000, $00260000, $10100000
    Data.l $00000010, $01280000, $030E0000, $00280000, $00200000, $00400000
    Data.l $00010000, $00000004, $02800000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $80000080, $80000000, $00800080
    Data.l $00800000, $80800080, $80800000, $C0C00080, $000000C0, $FF0000FF
    Data.l $FF000000, $00FF00FF, $00FF0000, $FFFF00FF, $FFFF0000, $000000FF
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $FF080000, $000000F0, $00000000, $00000000, $FB8B0000, $0000F0FF
    Data.l $00000000, $00000000, $BFBF0800, $00B0FFFB, $00000000, $00000000
    Data.l $FBFB0B00, $F0FFFFFF, $00000000, $00000000, $BFBF8F00, $FFBFBFBF
    Data.l $000000B0, $00000000, $F3FBFB00, $FFFFFB8B, $0000B0FF, $00000000
    Data.l $B8BFBF08, $BFBF8888, $00B0FFBF, $00000000, $83FBFB0B, $FF8B8B87
    Data.l $B0FFFFFF, $00000000, $BFBFBF8F, $B83F3838, $FFFFFBBF, $000000B0
    Data.l $FB83FBFB, $83FB83FB, $BFFFFF8B, $080070FF, $3878BFBF, $7FB8BFBF
    Data.l $FFBFBF87, $0B0070FF, $878BFBFB, $8BFB8B8B, $FB8F838F, $8F0000F7
    Data.l $B8B8BFBF, $B8BF3878, $FF883F38, $FB000070, $F3FB8BFB, $FB888783
    Data.l $FB8BF3FB, $BF080070, $BFB878B8, $7838B8BF, $F7FFF8BF, $FB0B0000
    Data.l $8B878BF3, $77F3FBFB, $F7FBFB88, $BF8F0000, $38B8B8BF, $B8BFBF7F
    Data.l $70FFBF38, $FB8B0000, $83FBFBFB, $FBFB8B8B, $70FBFBF3, $BF770000
    Data.l $87B8BFBF, $BF3F38BF, $00B7BFBF, $77000000, $FBFBFBFB, $8B87FBF3
    Data.l $00F7FB8B, $00000000, $BFBFBF77, $78B738BF, $0070BFBF, $00000000
    Data.l $FBFB7700, $83FBFBFB, $0070FBFB, $00000000, $BF770000, $BFBFBFBF
    Data.l $0000B7BF, $00000000, $77000000, $FBFBFBFB, $0000F7FB, $00000000
    Data.l $00000000, $BFBFBF77, $000070BF, $00000000, $00000000, $FBFB7700
    Data.l $000070FB, $00000000, $00000000, $BF770000, $000000B7, $00000000
    Data.l $00000000, $77000000, $00000070, $00000000, $00000000, $00000000
    Data.l $00000000, $FFFF0000, $FFFFFFFF, $87FFFFFF, $01FFFFFF, $00FEFFFF
    Data.l $00FCFF7F, $00FCFF1F, $00F8FF07, $00F8FF01, $00F07F00, $00F01F00
    Data.l $00E00700, $00E00100, $00C00100, $00C00100, $00800300, $00800700
    Data.l $00000700, $00000F00, $00000F00, $00001F00, $00001F00, $00C03F00
    Data.l $00F03F00, $00FC7F00, $00FF7F00, $C0FFFF00, $F0FFFF00, $FCFFFF01
    Data.l $FFFFFF01, $FFFFFF03, $FFFFFFC7, $0028FFFF, $00100000, $00200000
    Data.l $00010000, $00000004, $00C00000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $80000080, $80000000, $00800080
    Data.l $00800000, $80800080, $C0C00000, $808000C0, $00000080, $FF0000FF
    Data.l $FF000000, $00FF00FF, $00FF0000, $FFFF00FF, $FFFF0000, $000000FF
    Data.l $00000000, $00000000, $00000000, $00000000, $0000B00F, $00000000
    Data.l $00F0FB0B, $00000000, $B0BFBFBF, $00000000, $FBFB88FB, $0F0000F0
    Data.l $BF88BFBF, $0B00B0BF, $88FB8BF8, $BF0080FB, $BF8FB8BF, $FB0000B8
    Data.l $8BF8FB88, $8F0800F8, $BFBF88BF, $08000080, $FB88FB8B, $00000080
    Data.l $B8BF8F08, $00000000, $F88B0800, $00000000, $80080000, $00000000
    Data.l $00000000, $FFFF0000, $FFF90000, $7FF00000, $1FF00000, $07E00000
    Data.l $01E00000, $00C00000, $01C00000, $03800000, $03800000, $07800000
    Data.b 0, 0, -32, 7, 0, 0, -8, 15, 0, 0, -2, 15, 0, 0, -1, -97, 0, 0, -1
    Data.b - 1, 0, 0
  
  Icon_Croix :
    Data.l $00010000, $30300006, $00010000, $0EA80008, $00660000, $20200000
    Data.l $00010000, $08A80008, $0F0E0000, $10100000, $00010000, $05680008
    Data.l $17B60000, $30300000, $00010000, $25A80020, $1D1E0000, $20200000
    Data.l $00010000, $10A80020, $42C60000, $10100000, $00010000, $04680020
    Data.l $536E0000, $00280000, $00300000, $00600000, $00010000, $00000008
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00290000
    Data.l $002700DF, $002300D1, $001F00C4, $001C00A7, $001A0099, $0014008B
    Data.l $00120070, $000F0062, $01280054, $012500D2, $022400C5, $011300B8
    Data.l $01100064, $03250055, $010B00B9, $04270039, $052400C8, $041600AC
    Data.l $08270066, $072000AF, $0C260092, $0D270097, $112B0099, $1228009C
    Data.l $1935008F, $142800B2, $060B0084, $1D330021, $1C30009A, $243E008C
    Data.l $233500AF, $30470085, $2D3F00AD, $2635008F, $2B3A0079, $3345007F
    Data.l $2F3E0095, $31400083, $26300085, $3B4A005E, $4B5D008F, $4C5E00AD
    Data.l $506200AE, $435000B2, $505D0089, $63720096, $6A7700B7, $626C00B0
    Data.l $6368009A, $0022007F, $012300B5, $082A00B6, $092B00BD, $030B00BE
    Data.l $0613002D, $050D004B, $3C51002F, $384800AC, $5961008C, $60680083
    Data.l $656D008A, $7179008F, $0B0E009B, $0E110018, $1013001C, $1A1D001E
    Data.l $00000028, $66660000, $5E5E0066, $5C5C005E, $5252005C, $50500052
    Data.l $48480050, $44440048, $3C3C0044, $3636003C, $34340036, $32320034
    Data.l $2E2E0032, $2828002E, $26260028, $22220026, $20200022, $1E1E0020
    Data.l $1A1A001E, $1818001A, $16160018, $00000016, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $58580000, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $524A5858
    Data.l $58455053, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $00000958
    Data.l $58420300, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $14315858, $58584D12, $58585858, $58585858, $00000029
    Data.l $44370000, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $00011A58, $58584A00, $58585858, $58585858, $00000039
    Data.l $50050000, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $3B585858, $0000000B, $58585801, $58585858, $58585858, $0000002B
    Data.l $1B000000, $58585846, $58585858, $58585858, $58585858, $58585858
    Data.l $001F5858, $13000000, $58585858, $58585858, $58585858, $00001958
    Data.l $03000000, $58585855, $58585858, $58585858, $58585858, $58585858
    Data.l $00001658, $58240000, $58585858, $58585858, $58585858, $00355858
    Data.l $00000000, $58584D0C, $58585858, $58585858, $58585858, $58585858
    Data.l $00000011, $58583001, $58585858, $58585858, $58585858, $35585858
    Data.l $00000000, $58483801, $58585858, $58585858, $58585858, $0E585858
    Data.l $0E000000, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $00000009, $58413200, $58585858, $58585858, $58585858, $000B5858
    Data.l $580E0000, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $00000958, $54050000, $58585858, $58585858, $58585858, $0000013E
    Data.l $58580E00, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $00095858, $07000000, $58585851, $58585858, $3E585858, $00000001
    Data.l $5858580E, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $09585858, $00000000, $58584C0D, $58585858, $013E5858, $0E000000
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $00000000, $584B3601, $58585858, $00013D58, $580E0000
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $00000058, $4B360100, $58585858, $0000012C, $58580E00
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $00095858, $36010000, $3A58584B, $00000000, $5858580E
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $09585858, $01000000, $00224E36, $0E000000, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $00000009, $00000601, $580E0000, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $00000958, $00000000, $58580E00, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $00345858, $00000000, $58584733, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $00215858, $00000000, $58475107, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $00003A58, $00000000, $47500800, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $00000028, $00000000, $53080000, $58585847
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $2D585858, $00000000, $002A3E01, $05000000, $58584457
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $013E5858, $01000000, $5858583E, $00000009, $58474004
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $00013E58, $3E010000, $58585858, $00003558, $4B1B3200
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $0000013E, $583D0100, $58585858, $001E5858, $0F010000
    Data.l $58585850, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $3E585858, $00000001, $58582C00, $58585858, $2B585858, $00000000
    Data.l $58455606, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $013E5858, $00000000, $58585826, $58585858, $58585858, $00000958
    Data.l $493F0300, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $00013E58, $1D000000, $58585858, $58585858, $58585858, $00355858
    Data.l $36020000, $5858584F, $58585858, $58585858, $58585858, $58585858
    Data.l $0000013E, $58150000, $58585858, $58585858, $58585858, $1E585858
    Data.l $00000000, $58585308, $58585858, $58585858, $58585858, $3C585858
    Data.l $00000001, $58580E00, $58585858, $58585858, $58585858, $58585858
    Data.l $0000092E, $58510500, $58585858, $58585858, $58585858, $01235858
    Data.l $00000000, $5858580A, $58585858, $58585858, $58585858, $58585858
    Data.l $00355858, $58270000, $58585858, $58585858, $58585858, $00001758
    Data.l $01000000, $5858583C, $58585858, $58585858, $58585858, $58585858
    Data.l $1E585858, $58580900, $58585858, $58585858, $58585858, $0000001C
    Data.l $25000000, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $2F585858, $00000000
    Data.l $58180000, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $09585858, $00000000
    Data.l $58581100, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $00585858, $00000000
    Data.l $5858580A, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $09585858, $01000000
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58001020
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $58585858, $58585858, $58585858
    Data.l $58585858, $58585858, $58585858, $FFFF5858, $FFFFFFFF, $FFFF0000
    Data.l $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FFFF0000, $FFFFFFFF, $07FF0000
    Data.l $FFFFFFFF, $07FE0000, $0FFFFFFF, $03FC0000, $0FFEFFFF, $03FC0000
    Data.l $1FF8FFFF, $01FC0000, $3FF0FFFF, $01FE0000, $7FE0FFFF, $00FF0000
    Data.l $FFC0FFFF, $80FF0000, $FF83FF7F, $C0FF0000, $FF07FF7F, $E0FF0000
    Data.l $FF0FFC3F, $F0FF0000, $FF1FF81F, $F8FF0000, $FF3FF00F, $FCFF0000
    Data.l $FF7FE007, $FEFF0000, $FFFFC003, $FFFF0000, $FFFF8101, $FFFF0000
    Data.l $FFFF0380, $FFFF0000, $FFFF07C0, $FFFF0000, $FFFF0FE0, $FFFF0000
    Data.l $FFFF0FF0, $FFFF0000, $FFFF07F0, $FFFF0000, $FFFF03E0, $FFFF0000
    Data.l $FFFF01C0, $FFFF0000, $FFFF0080, $FFFF0000, $FF7FC001, $FEFF0000
    Data.l $FF3FE003, $FCFF0000, $FF1FF007, $F8FF0000, $FF07F80F, $F0FF0000
    Data.l $FF03FE1F, $E0FF0000, $FF01FF3F, $C0FF0000, $FF80FF7F, $80FF0000
    Data.l $7FC0FFFF, $01FF0000, $7FF0FFFF, $01FE0000, $FFF8FFFF, $03FC0000
    Data.l $FFFFFFFF, $07F80000, $FFFFFFFF, $0FF80000, $FFFFFFFF, $1FF80000
    Data.l $FFFFFFFF, $3FF80000, $FFFFFFFF, $7FFC0000, $FFFFFFFF, $FFFF0000
    Data.l $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FFFF0000
    Data.l $FFFFFFFF, $FFFF0000, $FFFFFFFF, $00280000, $00200000, $00400000
    Data.l $00010000, $00000008, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $61630000, $0029006F, $042A00DF, $062C00D6, $072E00D7
    Data.l $082F00D8, $082C00D9, $0C3000CB, $0E3500CF, $0D3100DF, $0F3600D0
    Data.l $103600E0, $0F3000E1, $102F00C4, $113000B7, $153600B8, $163700CB
    Data.l $153300CC, $1D4100BC, $1B3C00E0, $1B3900D1, $1F3E00C2, $203F00C6
    Data.l $1C3300C7, $2A4B009A, $2B4C00DF, $2F5000E0, $253F00E4, $273E00B0
    Data.l $283F00A4, $304A00A6, $324C00BB, $405F00BD, $385200E7, $3C5500C3
    Data.l $3B5200C7, $283700B8, $2938007C, $303F007D, $607A0084, $384500EB
    Data.l $4655007E, $323C0099, $4348006A, $1739005F, $183A00CC, $213600CD
    Data.l $3A4F0091, $4A5F00AA, $556A00B9, $313C00C5, $373F0069, $43460061
    Data.l $4A4D0051, $00000058, $6B6B0000, $6464006B, $61610064, $5B5B0061
    Data.l $5959005B, $55550059, $53530055, $52520053, $50500052, $00000050
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $40400000
    Data.l $40404040, $40404040, $40404040, $40404040, $40404040, $40404040
    Data.l $40404040, $40404040, $40404040, $40404040, $40404040, $40404040
    Data.l $40404040, $40404040, $40404040, $40404040, $40404040, $40404040
    Data.l $40404040, $40404040, $40404040, $40404040, $40404040, $40404040
    Data.l $40404040, $40383B3F, $40404040, $40404040, $40404040, $40404040
    Data.l $40404040, $40404040, $08404040, $3F2E0101, $40404040, $40404040
    Data.l $40404040, $23404040, $4040112F, $40404040, $01404040, $3E060101
    Data.l $40404040, $40404040, $40404040, $07234040, $40400101, $40404040
    Data.l $1A404040, $25010101, $40404037, $40404040, $40404040, $01013040
    Data.l $40404013, $40404040, $40404040, $0201010A, $40404034, $40404040
    Data.l $40404040, $2201011E, $40404040, $40404040, $40404040, $01010A40
    Data.l $40403F0D, $40404040, $2D404040, $40310101, $40404040, $40404040
    Data.l $40404040, $01014040, $403B1701, $40404040, $012D4040, $40402301
    Data.l $40404040, $40404040, $40404040, $01404040, $39240101, $40404040
    Data.l $01012D40, $40404023, $40404040, $40404040, $40404040, $40404040
    Data.l $32010101, $40404037, $2301012D, $40404040, $40404040, $40404040
    Data.l $40404040, $40404040, $03010140, $2C403733, $40230101, $40404040
    Data.l $40404040, $40404040, $40404040, $40404040, $01014040, $010C2A04
    Data.l $40402301, $40404040, $40404040, $40404040, $40404040, $40404040
    Data.l $0A404040, $01010101, $40404029, $40404040, $40404040, $40404040
    Data.l $40404040, $40404040, $40404040, $0E010101, $4040403C, $40404040
    Data.l $40404040, $40404040, $40404040, $40404040, $05404040, $01010101
    Data.l $40403B26, $40404040, $40404040, $40404040, $40404040, $40404040
    Data.l $012D4040, $01182101, $403D1C01, $40404040, $40404040, $40404040
    Data.l $40404040, $40404040, $01012D40, $27404021, $351B0101, $40404040
    Data.l $40404040, $40404040, $40404040, $40404040, $1F01012D, $40404040
    Data.l $0F010140, $40403F2B, $40404040, $40404040, $40404040, $2D404040
    Data.l $40160101, $40404040, $010B4040, $403A2805, $40404040, $40404040
    Data.l $40404040, $012D4040, $40400F01, $40404040, $20404040, $3E1D0101
    Data.l $40404040, $40404040, $40404040, $01011040, $40402304, $40404040
    Data.l $40404040, $14010140, $40404000, $40404040, $40404040, $03010109
    Data.l $40404023, $40404040, $40404040, $010A4040, $40404023, $40404040
    Data.l $05404040, $23010101, $40404040, $40404040, $40404040, $40404040
    Data.l $40404040, $40404040, $01194040, $40230101, $40404040, $40404040
    Data.l $40404040, $40404040, $40404040, $40404040, $01014040, $40401501
    Data.l $40404040, $40404040, $40404040, $40404040, $40404040, $40404040
    Data.l $0A274040, $40404012, $40404040, $40404040, $40404040, $40404040
    Data.l $40404040, $40404040, $40404040, $40404040, $40404040, $40404040
    Data.l $40404040, $40404040, $40404040, $40404040, $40404040, $40404040
    Data.l $40404040, $40404040, $40404040, $40404040, $40404040, $40404040
    Data.l $40404040, $40404040, $40404040, $40404040, $40404040, $40404040
    Data.l $40404040, $40404040, $40404040, $40404040, $40404040, $40404040
    Data.l $40404040, $40404040, $40404040, $FFFF4040, $FFFFFFFF, $FFFFFFFF
    Data.l $7FFCFFFF, $3FF8FFFF, $3FF88FFF, $1FF80FFF, $1FFC1FFE, $0FFE3FFC
    Data.l $07FF7FF8, $83FFFFF0, $C1FFFFE1, $E0FFFFC3, $F0FFFF87, $F8FFFF0F
    Data.l $FCFFFF1F, $F8FFFF1F, $F0FFFF0F, $E1FFFF07, $C3FFFF83, $87FFFFE0
    Data.l $0FFF7FF0, $0FFE3FF8, $1FFC1FFE, $3FF81FFF, $7FF0FFFF, $FFF0FFFF
    Data.l $FFF1FFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $0028FFFF
    Data.l $00100000, $00200000, $00010000, $00000008, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00290000, $052B00DF, $062C00D6
    Data.l $072E00D7, $082F00D8, $0A3000D9, $0E3500DB, $0F3600DF, $103600E0
    Data.l $123300E1, $1D4100C7, $1C3D00E0, $1F4300D2, $2C4D00E2, $2B4700E1
    Data.l $283F00C4, $405F00A6, $3D5900E7, $375100D6, $385200C3, $465A00C3
    Data.l $5F7900B6, $607A00EA, $506200EB, $4E5300B2, $1739006A, $183A00CC
    Data.l $284A00CD, $294600DD, $626A00C3, $5053008C, $0000005E, $6E6E0000
    Data.l $6565006E, $64640065, $5F5F0064, $0000005F, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $24240000, $24242424, $24242424, $24242424, $24242424
    Data.l $24242020, $24242424, $24242424, $15242424, $24210F00, $24242424
    Data.l $03172424, $15242424, $21180500, $24242424, $14001C24, $24242424
    Data.l $230B0015, $24242424, $2414031A, $24242424, $13001624, $1A242422
    Data.l $24241403, $24242424, $00162424, $02091E12, $24242414, $24242424
    Data.l $15242424, $1D010200, $24242424, $24242424, $24242424, $1D0E0004
    Data.l $24242424, $24242424, $1A242424, $11071403, $2424241D, $24242424
    Data.l $001A2424, $0C242414, $24241D1B, $24242424, $14001924, $24242424
    Data.l $241D0610, $24242424, $24140019, $24242424, $24001024, $0A242424
    Data.l $24241C00, $24242424, $24242424, $08242424, $2424240D, $24242424
    Data.l $24242424, $24242424, $24242424, $24242424, $24242424, $FFFF2424
    Data.l $FFCF4040, $F3870A40, $E3833F0D, $C7C34040, $8FE14040, $1FF00101
    Data.l $3FF84040, $3FFC4040, $1FF84040, $8FF14040, $C7E31701, $E7C74040
    Data.l $FF8F4040, $FF9F2301, $FFFF4040, $00284040, $00300000, $00600000
    Data.l $00010000, $00000020, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000400, $00001E00, $00002000
    Data.l $00002000, $00002000, $00001800, $00000200, $00000000, $00000000
    Data.l $00000000, $00000000, $00000000, $00000000, $00000000,