mirror of
https://github.com/pret/pokeheartgold.git
synced 2025-02-08 22:26:24 +00:00
Decompile unk_0202C9A0.s -> save_trainer_card.c
This commit is contained in:
parent
9e554c0350
commit
0b2879913f
@ -91,8 +91,8 @@ _021E80D6:
|
||||
bl sub_0200FA24
|
||||
add r0, r6, #0
|
||||
bl OverlayManager_GetField18
|
||||
bl sub_0202C9D8
|
||||
bl sub_0202C9E4
|
||||
bl Save_TranerCard_get
|
||||
bl TrainerCard_GetSignature
|
||||
ldr r1, _021E8238 ; =0x00005B98
|
||||
str r0, [r4, r1]
|
||||
add r0, r6, #0
|
||||
|
@ -1,101 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_0202C9A0
|
||||
sub_0202C9A0: ; 0x0202C9A0
|
||||
mov r0, #0x62
|
||||
lsl r0, r0, #4
|
||||
bx lr
|
||||
.balign 4, 0
|
||||
thumb_func_end sub_0202C9A0
|
||||
|
||||
thumb_func_start sub_0202C9A8
|
||||
sub_0202C9A8: ; 0x0202C9A8
|
||||
push {r4, r5, r6, lr}
|
||||
mov r2, #0x62
|
||||
add r4, r0, #0
|
||||
mov r1, #0
|
||||
lsl r2, r2, #4
|
||||
bl memset
|
||||
add r0, r4, #0
|
||||
bl sub_0202CA10
|
||||
add r5, r0, #0
|
||||
mov r4, #0
|
||||
mov r6, #0x8c
|
||||
_0202C9C2:
|
||||
lsl r0, r4, #0x18
|
||||
lsr r0, r0, #0x18
|
||||
add r1, r6, #0
|
||||
add r2, r5, #0
|
||||
bl sub_0202CA1C
|
||||
add r4, r4, #1
|
||||
cmp r4, #8
|
||||
blt _0202C9C2
|
||||
pop {r4, r5, r6, pc}
|
||||
.balign 4, 0
|
||||
thumb_func_end sub_0202C9A8
|
||||
|
||||
thumb_func_start sub_0202C9D8
|
||||
sub_0202C9D8: ; 0x0202C9D8
|
||||
ldr r3, _0202C9E0 ; =SavArray_get
|
||||
mov r1, #0xf
|
||||
bx r3
|
||||
nop
|
||||
_0202C9E0: .word SavArray_get
|
||||
thumb_func_end sub_0202C9D8
|
||||
|
||||
thumb_func_start sub_0202C9E4
|
||||
sub_0202C9E4: ; 0x0202C9E4
|
||||
add r0, #0x20
|
||||
bx lr
|
||||
thumb_func_end sub_0202C9E4
|
||||
|
||||
thumb_func_start sub_0202C9E8
|
||||
sub_0202C9E8: ; 0x0202C9E8
|
||||
push {r3, r4}
|
||||
mov r3, #0
|
||||
mov r1, #6
|
||||
add r4, r3, #0
|
||||
add r0, #0x20
|
||||
lsl r1, r1, #6
|
||||
_0202C9F4:
|
||||
ldr r2, [r0]
|
||||
add r4, r4, #1
|
||||
add r3, r3, r2
|
||||
add r0, r0, #4
|
||||
cmp r4, r1
|
||||
blt _0202C9F4
|
||||
cmp r3, #0
|
||||
beq _0202CA0A
|
||||
mov r0, #1
|
||||
pop {r3, r4}
|
||||
bx lr
|
||||
_0202CA0A:
|
||||
mov r0, #0
|
||||
pop {r3, r4}
|
||||
bx lr
|
||||
thumb_func_end sub_0202C9E8
|
||||
|
||||
thumb_func_start sub_0202CA10
|
||||
sub_0202CA10: ; 0x0202CA10
|
||||
bx lr
|
||||
.balign 4, 0
|
||||
thumb_func_end sub_0202CA10
|
||||
|
||||
thumb_func_start sub_0202CA14
|
||||
sub_0202CA14: ; 0x0202CA14
|
||||
lsl r0, r0, #2
|
||||
ldr r0, [r1, r0]
|
||||
bx lr
|
||||
.balign 4, 0
|
||||
thumb_func_end sub_0202CA14
|
||||
|
||||
thumb_func_start sub_0202CA1C
|
||||
sub_0202CA1C: ; 0x0202CA1C
|
||||
lsl r0, r0, #2
|
||||
str r1, [r2, r0]
|
||||
bx lr
|
||||
.balign 4, 0
|
||||
thumb_func_end sub_0202CA1C
|
@ -2845,7 +2845,7 @@ sub_0203F818: ; 0x0203F818
|
||||
sub sp, #0x10
|
||||
add r4, r0, #0
|
||||
ldr r0, [r4, #0xc]
|
||||
bl sub_0202C9D8
|
||||
bl Save_TranerCard_get
|
||||
ldr r5, _0203F840 ; =_020FA254
|
||||
add r3, sp, #0
|
||||
add r2, r3, #0
|
||||
|
@ -901,8 +901,8 @@ sub_0206759C: ; 0x0206759C
|
||||
str r1, [sp]
|
||||
cmp r1, #0
|
||||
ble _02067606
|
||||
bl sub_0202C9D8
|
||||
bl sub_0202CA10
|
||||
bl Save_TranerCard_get
|
||||
bl TrainerCard_GetBadgeShininessArr
|
||||
add r4, r0, #0
|
||||
add r0, r5, #0
|
||||
bl Sav2_PlayerData_GetProfileAddr
|
||||
@ -920,7 +920,7 @@ _020675C2:
|
||||
beq _020675FC
|
||||
add r0, r5, #0
|
||||
add r1, r4, #0
|
||||
bl sub_0202CA14
|
||||
bl GetShininessOfBadgeI
|
||||
add r1, r0, #0
|
||||
cmp r1, #0
|
||||
ble _020675E4
|
||||
@ -941,7 +941,7 @@ _020675EE:
|
||||
_020675F4:
|
||||
add r0, r5, #0
|
||||
add r2, r4, #0
|
||||
bl sub_0202CA1C
|
||||
bl SetShininessOfBadgeI
|
||||
_020675FC:
|
||||
add r0, r5, #1
|
||||
lsl r0, r0, #0x18
|
||||
|
@ -100,7 +100,7 @@ sub_02068FC8: ; 0x02068FC8
|
||||
add r3, sp, #0x84
|
||||
bl sub_02069308
|
||||
ldr r0, [r6, #0xc]
|
||||
bl sub_0202C9D8
|
||||
bl Save_TranerCard_get
|
||||
str r0, [sp, #0x44]
|
||||
add r0, r4, #0
|
||||
mov r1, #0x21
|
||||
@ -159,10 +159,10 @@ sub_02068FC8: ; 0x02068FC8
|
||||
bl GameStats_GetCapped
|
||||
add r4, r0, #0
|
||||
ldr r0, [sp, #0x44]
|
||||
bl sub_0202C9E8
|
||||
bl TrainerCard_SignatureExists
|
||||
str r0, [sp, #0x74]
|
||||
ldr r0, [sp, #0x44]
|
||||
bl sub_0202C9E4
|
||||
bl TrainerCard_GetSignature
|
||||
ldr r1, [sp, #0x74]
|
||||
ldr r2, [sp, #0x60]
|
||||
lsl r1, r1, #0x18
|
||||
@ -536,8 +536,8 @@ sub_0206940C: ; 0x0206940C
|
||||
add r7, r0, #0
|
||||
ldr r0, [r1, #0xc]
|
||||
add r6, r2, #0
|
||||
bl sub_0202C9D8
|
||||
bl sub_0202CA10
|
||||
bl Save_TranerCard_get
|
||||
bl TrainerCard_GetBadgeShininessArr
|
||||
add r1, r6, #0
|
||||
mov r2, #0
|
||||
add r1, #0x48
|
||||
|
16
global.inc
16
global.inc
@ -27389,14 +27389,14 @@
|
||||
.public sub_0202C88C
|
||||
.public sub_0202C8C4
|
||||
.public sub_0202C8E4
|
||||
.public sub_0202C9A0
|
||||
.public sub_0202C9A8
|
||||
.public sub_0202C9D8
|
||||
.public sub_0202C9E4
|
||||
.public sub_0202C9E8
|
||||
.public sub_0202CA10
|
||||
.public sub_0202CA14
|
||||
.public sub_0202CA1C
|
||||
.public Save_TrainerCard_sizeof
|
||||
.public Save_TrainerCard_init
|
||||
.public Save_TranerCard_get
|
||||
.public TrainerCard_GetSignature
|
||||
.public TrainerCard_SignatureExists
|
||||
.public TrainerCard_GetBadgeShininessArr
|
||||
.public GetShininessOfBadgeI
|
||||
.public SetShininessOfBadgeI
|
||||
.public sub_0202CA24
|
||||
.public sub_0202CA2C
|
||||
.public sub_0202CA44
|
||||
|
@ -18,7 +18,7 @@
|
||||
#define SAVE_DRESSUP_DATA 12
|
||||
#define SAVE_MAILBOX 13
|
||||
#define SAVE_FRIEND_GROUP 14
|
||||
#define SAVE_UNK_15 15
|
||||
#define SAVE_TRAINER_CARD 15
|
||||
#define SAVE_GAMESTATS 16
|
||||
#define SAVE_SEAL_CASE 17
|
||||
#define SAVE_CHATOT 18
|
||||
|
20
include/save_trainer_card.h
Normal file
20
include/save_trainer_card.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef POKEHEARTGOLD_SAVE_TRAINER_CARD_H
|
||||
#define POKEHEARTGOLD_SAVE_TRAINER_CARD_H
|
||||
|
||||
#include "save.h"
|
||||
|
||||
struct SaveTrainerCard {
|
||||
int badgeShininess[8];
|
||||
int signaturePointData[0x180];
|
||||
}; // size=0x620
|
||||
|
||||
u32 Save_TrainerCard_sizeof(void);
|
||||
void Save_TrainerCard_init(struct SaveTrainerCard *data);
|
||||
struct SaveTrainerCard *Save_TranerCard_get(SAVEDATA *saveData);
|
||||
int *TrainerCard_GetSignature(struct SaveTrainerCard *data);
|
||||
BOOL TrainerCard_SignatureExists(struct SaveTrainerCard *data);
|
||||
int *TrainerCard_GetBadgeShininessArr(struct SaveTrainerCard *data);
|
||||
int GetShininessOfBadgeI(u8 idx, int *arr);
|
||||
void SetShininessOfBadgeI(u8 idx, int val, int *arr);
|
||||
|
||||
#endif //POKEHEARTGOLD_SAVE_TRAINER_CARD_H
|
@ -1,8 +0,0 @@
|
||||
#ifndef POKEHEARTGOLD_UNK_0202C9A0_H
|
||||
#define POKEHEARTGOLD_UNK_0202C9A0_H
|
||||
|
||||
void *sub_0202C9D8(SAVEDATA *saveData);
|
||||
void *sub_0202C9E4(void *);
|
||||
BOOL sub_0202C9E8(void *);
|
||||
|
||||
#endif //POKEHEARTGOLD_UNK_0202C9A0_H
|
2
main.lsf
2
main.lsf
@ -104,7 +104,7 @@ Static main
|
||||
Object asm/unk_0202C034.o
|
||||
Object asm/unk_0202C730.o
|
||||
Object src/coins.o
|
||||
Object asm/unk_0202C9A0.o
|
||||
Object src/save_trainer_card.o
|
||||
Object asm/unk_0202CA24.o
|
||||
Object src/seal_case.o
|
||||
Object src/igt.o
|
||||
|
@ -3,7 +3,7 @@
|
||||
#include "overlay_trainer_card_main.h"
|
||||
#include "overlay_trainer_card_signature.h"
|
||||
#include "unk_02004A44.h"
|
||||
#include "unk_0202C9A0.h"
|
||||
#include "save_trainer_card.h"
|
||||
|
||||
FS_EXTERN_OVERLAY(OVY_51);
|
||||
FS_EXTERN_OVERLAY(OVY_52);
|
||||
@ -114,8 +114,8 @@ static int TCardAppRunStep_SignatureExec(TrainerCardAppState *a0) {
|
||||
return TRAINERCARD_RUN_SIGNATURE_EXEC;
|
||||
}
|
||||
|
||||
ptr = sub_0202C9D8(a0->unkC->saveData);
|
||||
a0->unkC->unk4b = sub_0202C9E8(ptr);
|
||||
MI_CpuCopy8(sub_0202C9E4(ptr), a0->unkC->unk68, sizeof(a0->unkC->unk68));
|
||||
ptr = Save_TranerCard_get(a0->unkC->saveData);
|
||||
a0->unkC->unk4b = TrainerCard_SignatureExists(ptr);
|
||||
MI_CpuCopy8(TrainerCard_GetSignature(ptr), a0->unkC->unk68, sizeof(a0->unkC->unk68));
|
||||
return TRAINERCARD_RUN_INIT;
|
||||
}
|
||||
|
@ -20,6 +20,8 @@
|
||||
#include "safari_zone.h"
|
||||
#include "pokewalker.h"
|
||||
#include "photo_album.h"
|
||||
#include "save_follow_poke.h"
|
||||
#include "save_trainer_card.h"
|
||||
|
||||
#define DECL_CHUNK(prefix) extern u32 prefix##_sizeof(void); extern void prefix##_init(void *);
|
||||
#define DECL_CHUNK_EX(sizefn, initfn) extern u32 sizefn(void); extern void initfn(void *);
|
||||
@ -28,7 +30,6 @@ DECL_CHUNK(Save_FlyPoints)
|
||||
DECL_CHUNK_EX(sub_0203B920, sub_0203B928)
|
||||
DECL_CHUNK_EX(sub_020290B8, sub_020290C8)
|
||||
DECL_CHUNK(Sav2_DressupData)
|
||||
DECL_CHUNK_EX(sub_0202C9A0, sub_0202C9A8)
|
||||
DECL_CHUNK(GameStats)
|
||||
DECL_CHUNK_EX(sub_02031000, sub_02031008)
|
||||
DECL_CHUNK_EX(sub_0202D938, sub_0202D93C)
|
||||
@ -41,7 +42,6 @@ DECL_CHUNK_EX(sub_0202EB30, sub_0202EB38)
|
||||
DECL_CHUNK_EX(sub_02031AF0, sub_02031AF4)
|
||||
DECL_CHUNK_EX(sub_0203170C, sub_02031710)
|
||||
DECL_CHUNK_EX(sub_020318C8, sub_020318CC)
|
||||
DECL_CHUNK(Sav2_FollowPoke)
|
||||
DECL_CHUNK(SaveData_GSPlayerMisc)
|
||||
DECL_CHUNK_EX(sub_02031904, sub_0203190C)
|
||||
DECL_CHUNK(Save_ApricornBox)
|
||||
@ -53,27 +53,27 @@ const struct SaveChunkHeader gSaveChunkHeaders[] = {
|
||||
{ SAVE_PARTY, 0, (SAVESIZEFN)SavArray_Party_sizeof, (SAVEINITFN)SavArray_Party_init },
|
||||
{ SAVE_BAG, 0, (SAVESIZEFN)Sav2_Bag_sizeof, (SAVEINITFN)Sav2_Bag_init },
|
||||
{ SAVE_FLAGS, 0, (SAVESIZEFN)SavArray_Flags_sizeof, (SAVEINITFN)SavArray_Flags_init },
|
||||
{ SAVE_FLYPOINTS, 0, (SAVESIZEFN)Save_FlyPoints_sizeof, (SAVEINITFN)Save_FlyPoints_init },
|
||||
{ SAVE_POKEDEX, 0, (SAVESIZEFN)Save_Pokedex_sizeof, (SAVEINITFN)Save_Pokedex_init },
|
||||
{ SAVE_DAYCARE, 0, (SAVESIZEFN)Sav2_Daycare_sizeof, (SAVEINITFN)Sav2_Daycare_init },
|
||||
{ SAVE_PALPAD, 0, (SAVESIZEFN)Save_PalPad_sizeof, (SAVEINITFN)Save_PalPad_init },
|
||||
{ SAVE_MISC, 0, (SAVESIZEFN)Sav2_Misc_sizeof, (SAVEINITFN)Sav2_Misc_init },
|
||||
{ SAVE_UNK_10, 0, (SAVESIZEFN)sub_0203B920, (SAVEINITFN)sub_0203B928 },
|
||||
{ SAVE_UNK_11, 0, (SAVESIZEFN)sub_020290B8, (SAVEINITFN)sub_020290C8 },
|
||||
{ SAVE_DRESSUP_DATA, 0, (SAVESIZEFN)Sav2_DressupData_sizeof, (SAVEINITFN)Sav2_DressupData_init },
|
||||
{ SAVE_MAILBOX, 0, (SAVESIZEFN)Sav2_Mailbox_sizeof, (SAVEINITFN)Sav2_Mailbox_init },
|
||||
{ SAVE_FRIEND_GROUP, 0, (SAVESIZEFN)Sav2_FriendGroup_sizeof, (SAVEINITFN)Sav2_FriendGroup_init },
|
||||
{ SAVE_UNK_15, 0, (SAVESIZEFN)sub_0202C9A0, (SAVEINITFN)sub_0202C9A8 },
|
||||
{ SAVE_GAMESTATS, 0, (SAVESIZEFN)GameStats_sizeof, (SAVEINITFN)GameStats_init },
|
||||
{ SAVE_SEAL_CASE, 0, (SAVESIZEFN)Sav2_SealCase_sizeof, (SAVEINITFN)Sav2_SealCase_init },
|
||||
{ SAVE_CHATOT, 0, (SAVESIZEFN)Sav2_Chatot_sizeof, (SAVEINITFN)Sav2_Chatot_init },
|
||||
{ SAVE_UNK_19, 0, (SAVESIZEFN)sub_02031000, (SAVEINITFN)sub_02031008 },
|
||||
{ SAVE_UNK_20, 0, (SAVESIZEFN)sub_0202D938, (SAVEINITFN)sub_0202D93C },
|
||||
{ SAVE_ROAMER, 0, (SAVESIZEFN)Save_Roamers_sizeof, (SAVEINITFN)Save_Roamers_init },
|
||||
{ SAVE_UNK_22, 0, (SAVESIZEFN)sub_0202DB40, (SAVEINITFN)sub_0202DB44 },
|
||||
{ SAVE_UNK_23, 0, (SAVESIZEFN)sub_0202E41C, (SAVEINITFN)sub_0202E424 },
|
||||
{ SAVE_UNK_24, 0, (SAVESIZEFN)sub_0202E4F4, (SAVEINITFN)sub_0202E4FC },
|
||||
{ SAVE_UNK_25, 0, (SAVESIZEFN)sub_0202C034, (SAVEINITFN)sub_0202C03C },
|
||||
{SAVE_FLYPOINTS, 0, (SAVESIZEFN)Save_FlyPoints_sizeof, (SAVEINITFN)Save_FlyPoints_init },
|
||||
{SAVE_POKEDEX, 0, (SAVESIZEFN)Save_Pokedex_sizeof, (SAVEINITFN)Save_Pokedex_init },
|
||||
{SAVE_DAYCARE, 0, (SAVESIZEFN)Sav2_Daycare_sizeof, (SAVEINITFN)Sav2_Daycare_init },
|
||||
{SAVE_PALPAD, 0, (SAVESIZEFN)Save_PalPad_sizeof, (SAVEINITFN)Save_PalPad_init },
|
||||
{SAVE_MISC, 0, (SAVESIZEFN)Sav2_Misc_sizeof, (SAVEINITFN)Sav2_Misc_init },
|
||||
{SAVE_UNK_10, 0, (SAVESIZEFN)sub_0203B920, (SAVEINITFN)sub_0203B928 },
|
||||
{SAVE_UNK_11, 0, (SAVESIZEFN)sub_020290B8, (SAVEINITFN)sub_020290C8 },
|
||||
{SAVE_DRESSUP_DATA, 0, (SAVESIZEFN)Sav2_DressupData_sizeof, (SAVEINITFN)Sav2_DressupData_init },
|
||||
{SAVE_MAILBOX, 0, (SAVESIZEFN)Sav2_Mailbox_sizeof, (SAVEINITFN)Sav2_Mailbox_init },
|
||||
{SAVE_FRIEND_GROUP, 0, (SAVESIZEFN)Sav2_FriendGroup_sizeof, (SAVEINITFN)Sav2_FriendGroup_init },
|
||||
{SAVE_TRAINER_CARD, 0, (SAVESIZEFN)Save_TrainerCard_sizeof, (SAVEINITFN)Save_TrainerCard_init },
|
||||
{SAVE_GAMESTATS, 0, (SAVESIZEFN)GameStats_sizeof, (SAVEINITFN)GameStats_init },
|
||||
{SAVE_SEAL_CASE, 0, (SAVESIZEFN)Sav2_SealCase_sizeof, (SAVEINITFN)Sav2_SealCase_init },
|
||||
{SAVE_CHATOT, 0, (SAVESIZEFN)Sav2_Chatot_sizeof, (SAVEINITFN)Sav2_Chatot_init },
|
||||
{SAVE_UNK_19, 0, (SAVESIZEFN)sub_02031000, (SAVEINITFN)sub_02031008 },
|
||||
{SAVE_UNK_20, 0, (SAVESIZEFN)sub_0202D938, (SAVEINITFN)sub_0202D93C },
|
||||
{SAVE_ROAMER, 0, (SAVESIZEFN)Save_Roamers_sizeof, (SAVEINITFN)Save_Roamers_init },
|
||||
{SAVE_UNK_22, 0, (SAVESIZEFN)sub_0202DB40, (SAVEINITFN)sub_0202DB44 },
|
||||
{SAVE_UNK_23, 0, (SAVESIZEFN)sub_0202E41C, (SAVEINITFN)sub_0202E424 },
|
||||
{SAVE_UNK_24, 0, (SAVESIZEFN)sub_0202E4F4, (SAVEINITFN)sub_0202E4FC },
|
||||
{SAVE_UNK_25, 0, (SAVESIZEFN)sub_0202C034, (SAVEINITFN)sub_0202C03C },
|
||||
{ SAVE_UNK_26, 0, (SAVESIZEFN)sub_0202CA24, (SAVEINITFN)sub_0202CA2C },
|
||||
{ SAVE_MYSTERY_GIFT, 0, (SAVESIZEFN)Save_MysteryGift_sizeof, (SAVEINITFN)Save_MysteryGift_init },
|
||||
{ SAVE_UNK_28, 0, (SAVESIZEFN)sub_0202EB30, (SAVEINITFN)sub_0202EB38 },
|
||||
|
48
src/save_trainer_card.c
Normal file
48
src/save_trainer_card.c
Normal file
@ -0,0 +1,48 @@
|
||||
#include "save_trainer_card.h"
|
||||
|
||||
u32 Save_TrainerCard_sizeof(void) {
|
||||
return sizeof(struct SaveTrainerCard);
|
||||
}
|
||||
|
||||
void Save_TrainerCard_init(struct SaveTrainerCard *data) {
|
||||
int i;
|
||||
int *badges;
|
||||
|
||||
memset(data, 0, sizeof(struct SaveTrainerCard));
|
||||
badges = TrainerCard_GetBadgeShininessArr(data);
|
||||
for (i = 0; i < 8; i++) {
|
||||
SetShininessOfBadgeI(i, 0x8C, badges);
|
||||
}
|
||||
}
|
||||
|
||||
struct SaveTrainerCard *Save_TranerCard_get(SAVEDATA *saveData) {
|
||||
return SavArray_get(saveData, SAVE_TRAINER_CARD);
|
||||
}
|
||||
|
||||
int *TrainerCard_GetSignature(struct SaveTrainerCard *data) {
|
||||
return data->signaturePointData;
|
||||
}
|
||||
|
||||
BOOL TrainerCard_SignatureExists(struct SaveTrainerCard *data) {
|
||||
u32 total = 0;
|
||||
int i;
|
||||
int *arr;
|
||||
|
||||
for (i = 0, arr = data->signaturePointData; i < 0x180; i++) {
|
||||
total += arr[i];
|
||||
}
|
||||
|
||||
return total != 0;
|
||||
}
|
||||
|
||||
int *TrainerCard_GetBadgeShininessArr(struct SaveTrainerCard *data) {
|
||||
return data->badgeShininess;
|
||||
}
|
||||
|
||||
int GetShininessOfBadgeI(u8 idx, int *arr) {
|
||||
return arr[idx];
|
||||
}
|
||||
|
||||
void SetShininessOfBadgeI(u8 idx, int val, int *arr) {
|
||||
arr[idx] = val;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user