building RELs

This commit is contained in:
Julgodis
2021-04-06 18:00:35 +02:00
parent f6464a61ce
commit ed1ee30dd2
36358 changed files with 867422 additions and 1426658 deletions
+44 -195
View File
@@ -53,19 +53,19 @@ struct J2DTextBoxVBinding {};
struct J2DTextBoxHBinding {};
struct J2DAnmColor {};
struct J2DAnmBase {};
struct J2DAnmVisibilityFull {};
struct J2DAnmTexPattern {};
struct J2DAnmColor {};
struct J2DAnmTextureSRTKey {};
struct J2DAnmVtxColor {};
struct J2DAnmVisibilityFull {};
struct J2DAnmTransform {};
struct J2DAnmVtxColor {};
struct J2DAnmTexPattern {};
struct J2DAnmTevRegKey {};
@@ -178,17 +178,11 @@ extern "C" s32 getTypeID__10J2DTextBoxCFv();
extern "C" void isUsed__10J2DTextBoxFPC7ResTIMG();
extern "C" void rewriteAlpha__10J2DTextBoxFv();
extern "C" extern char const* const J2DTextBox__stringBase0;
extern "C" extern void* __vt__10J2DTextBox[47 + 1 /* padding */];
//
// External References:
//
void* operator new(u32);
void* operator new[](u32);
void operator delete(void*);
void operator delete[](void*);
extern "C" void setAlpha__7J2DPaneFUc();
extern "C" void calcMtx__7J2DPaneFv();
extern "C" void makeMatrix__7J2DPaneFff();
@@ -272,8 +266,8 @@ extern "C" void strlen();
//
/* ############################################################################################## */
/* 803CD328-803CD3E8 00BC+04 s=5 e=0 z=0 None .data __vt__10J2DTextBox */
SECTION_DATA void* __vt__10J2DTextBox[47 + 1 /* padding */] = {
/* 803CD328-803CD3E8 02A448 00BC+04 5/5 0/0 0/0 .data __vt__10J2DTextBox */
SECTION_DATA extern void* __vt__10J2DTextBox[47 + 1 /* padding */] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__10J2DTextBoxFv,
@@ -325,12 +319,7 @@ SECTION_DATA void* __vt__10J2DTextBox[47 + 1 /* padding */] = {
NULL,
};
/* 802FF660-802FF6D8 0078+00 s=0 e=1 z=0 None .text __ct__10J2DTextBoxFv */
// 802FF674: 802F5BF8 (__ct__7J2DPaneFv)
// 802FF678: 803CD328 (__vt__10J2DTextBox)
// 802FF67C: 803CD328 (__vt__10J2DTextBox)
// 802FF6BC: 802FFC58
//(initiate__10J2DTextBoxFPC7ResFONTPCcs18J2DTextBoxHBinding18J2DTextBoxVBinding)
/* 802FF660-802FF6D8 2F9FA0 0078+00 0/0 1/1 0/0 .text __ct__10J2DTextBoxFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -340,15 +329,8 @@ asm J2DTextBox::J2DTextBox() {
}
#pragma pop
/* 802FF6D8-802FF75C 0084+00 s=0 e=1 z=0 None .text
/* 802FF6D8-802FF75C 2FA018 0084+00 0/0 1/1 0/0 .text
* __ct__10J2DTextBoxFP7J2DPaneP20JSURandomInputStreamP10JKRArchive */
// 802FF6E8: 803621D8 (_savegpr_28)
// 802FF6FC: 802F5BF8 (__ct__7J2DPaneFv)
// 802FF700: 803CD328 (__vt__10J2DTextBox)
// 802FF704: 803CD328 (__vt__10J2DTextBox)
// 802FF73C: 802FFE88
//(private_readStream__10J2DTextBoxFP7J2DPaneP20JSURandomInputStreamP10JKRArchive) 802FF748:
// 80362224 (_restgpr_28)
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -359,37 +341,21 @@ asm J2DTextBox::J2DTextBox(J2DPane* param_0, JSURandomInputStream* param_1, JKRA
#pragma pop
/* ############################################################################################## */
/* 80456280-80456288 0004+04 s=6 e=0 z=0 None .sdata2 @1660 */
/* 80456280-80456288 004880 0004+04 6/6 0/0 0/0 .sdata2 @1660 */
SECTION_SDATA2 static f32 lit_1660[1 + 1 /* padding */] = {
0.0f,
/* padding */
0.0f,
};
/* 80456288-80456290 0008+00 s=3 e=0 z=0 None .sdata2 @1662 */
/* 80456288-80456290 004888 0008+00 3/3 0/0 0/0 .sdata2 @1662 */
SECTION_SDATA2 static f64 lit_1662 = 4503601774854144.0 /* cast s32 to float */;
/* 80456290-80456298 0008+00 s=2 e=0 z=0 None .sdata2 @1665 */
/* 80456290-80456298 004890 0008+00 2/2 0/0 0/0 .sdata2 @1665 */
SECTION_SDATA2 static f64 lit_1665 = 4503599627370496.0 /* cast u32 to float */;
/* 802FF75C-802FFBC4 0468+00 s=0 e=1 z=0 None .text
/* 802FF75C-802FFBC4 2FA09C 0468+00 0/0 1/1 0/0 .text
* __ct__10J2DTextBoxFP7J2DPaneP20JSURandomInputStreamUlP11J2DMaterial */
// 802FF76C: 803621CC (_savegpr_25)
// 802FF784: 802F5BF8 (__ct__7J2DPaneFv)
// 802FF788: 803CD328 (__vt__10J2DTextBox)
// 802FF78C: 803CD328 (__vt__10J2DTextBox)
// 802FF7D8: 802DC298 (read__14JSUInputStreamFPvl)
// 802FF80C: 802DC458 (peek__20JSURandomInputStreamFPvl)
// 802FF81C: 802F7B18 (makePaneExStream__7J2DPaneFP7J2DPaneP20JSURandomInputStream)
// 802FF830: 802DC4DC (seek__20JSURandomInputStreamFl17JSUStreamSeekFrom)
// 802FF840: 802DC298 (read__14JSUInputStreamFPvl)
// 802FF8A8: 80456288 (lit_1662)
// 802FF8E8: 80456290 (lit_1665)
// 802FF9E0: 802CECC4 (__nwa__FUl)
// 802FFA1C: 802DC458 (peek__20JSURandomInputStreamFPvl)
// 802FFA58: 802DC4DC (seek__20JSURandomInputStreamFl17JSUStreamSeekFrom)
// 802FFB94: 80456280 (lit_1660)
// 802FFBB0: 80362218 (_restgpr_25)
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -400,17 +366,9 @@ asm J2DTextBox::J2DTextBox(J2DPane* param_0, JSURandomInputStream* param_1, u32
}
#pragma pop
/* 802FFBC4-802FFC58 0094+00 s=0 e=1 z=0 None .text
/* 802FFBC4-802FFC58 2FA504 0094+00 0/0 1/1 0/0 .text
* __ct__10J2DTextBoxFUxRCQ29JGeometry8TBox2<f>PC7ResFONTPCcs18J2DTextBoxHBinding18J2DTextBoxVBinding
*/
// 802FFBD4: 803621D0 (_savegpr_26)
// 802FFBF0: 802F5E88 (func_802F5E88)
// 802FFBF4: 803CD328 (__vt__10J2DTextBox)
// 802FFBF8: 803CD328 (__vt__10J2DTextBox)
// 802FFC38: 802FFC58
//(initiate__10J2DTextBoxFPC7ResFONTPCcs18J2DTextBoxHBinding18J2DTextBoxVBinding) 802FFC44:
//8036221C
//(_restgpr_26)
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -422,19 +380,8 @@ asm J2DTextBox::J2DTextBox(u64 param_0, JGeometry::TBox2<f32> const& param_1,
}
#pragma pop
/* 802FFC58-802FFE88 0230+00 s=2 e=1 z=0 None .text
/* 802FFC58-802FFE88 2FA598 0230+00 2/2 1/0 0/0 .text
* initiate__10J2DTextBoxFPC7ResFONTPCcs18J2DTextBoxHBinding18J2DTextBoxVBinding */
// 802FFC68: 803621D0 (_savegpr_26)
// 802FFC8C: 802CEC4C (__nw__FUl)
// 802FFCA0: 802DEF94 (__ct__10JUTResFontFPC7ResFONTP7JKRHeap)
// 802FFD2C: 80368BE4 (strlen)
// 802FFD5C: 802CECC4 (__nwa__FUl)
// 802FFD80: 80368AE8 (strncpy)
// 802FFD98: 80456280 (lit_1660)
// 802FFDD4: 80456288 (lit_1662)
// 802FFE08: 80456288 (lit_1662)
// 802FFE3C: 80456288 (lit_1662)
// 802FFE74: 8036221C (_restgpr_26)
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -445,35 +392,8 @@ asm void J2DTextBox::initiate(ResFONT const* param_0, char const* param_1, s16 p
}
#pragma pop
/* 802FFE88-803001E0 0358+00 s=1 e=0 z=0 None .text
/* 802FFE88-803001E0 2FA7C8 0358+00 1/1 0/0 0/0 .text
* private_readStream__10J2DTextBoxFP7J2DPaneP20JSURandomInputStreamP10JKRArchive */
// 802FFE98: 803621D0 (_savegpr_26)
// 802FFED0: 802DC298 (read__14JSUInputStreamFPvl)
// 802FFEE8: 802F60C4 (makePaneStream__7J2DPaneFP7J2DPaneP20JSURandomInputStream)
// 802FFEF8: 802DC298 (read__14JSUInputStreamFPvl)
// 802FFF14: 802F7DB8 (getPointer__7J2DPaneFP20JSURandomInputStreamUlP10JKRArchive)
// 802FFF24: 802CEC4C (__nw__FUl)
// 802FFF38: 802DEF94 (__ct__10JUTResFontFPC7ResFONTP7JKRHeap)
// 802FFF50: 802DC298 (read__14JSUInputStreamFPvl)
// 802FFF68: 802DC298 (read__14JSUInputStreamFPvl)
// 802FFF80: 802DC298 (read__14JSUInputStreamFPvl)
// 802FFF98: 802DC298 (read__14JSUInputStreamFPvl)
// 802FFFA0: 80456288 (lit_1662)
// 802FFFCC: 802DC298 (read__14JSUInputStreamFPvl)
// 802FFFD4: 80456288 (lit_1662)
// 80300000: 802DC298 (read__14JSUInputStreamFPvl)
// 80300008: 80456290 (lit_1665)
// 80300030: 802DC298 (read__14JSUInputStreamFPvl)
// 80300038: 80456290 (lit_1665)
// 80300060: 802DC298 (read__14JSUInputStreamFPvl)
// 80300074: 802CECC4 (__nwa__FUl)
// 80300090: 802DC298 (read__14JSUInputStreamFPvl)
// 803000E0: 802DC298 (read__14JSUInputStreamFPvl)
// 80300170: 802DC298 (read__14JSUInputStreamFPvl)
// 80300194: 802DC298 (read__14JSUInputStreamFPvl)
// 803001A0: 80456280 (lit_1660)
// 803001BC: 802DC4DC (seek__20JSURandomInputStreamFl17JSUStreamSeekFrom)
// 803001CC: 8036221C (_restgpr_26)
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -484,12 +404,7 @@ asm void J2DTextBox::private_readStream(J2DPane* param_0, JSURandomInputStream*
}
#pragma pop
/* 803001E0-80300278 0098+00 s=1 e=2 z=0 None .text __dt__10J2DTextBoxFv */
// 80300200: 803CD328 (__vt__10J2DTextBox)
// 80300204: 803CD328 (__vt__10J2DTextBox)
// 8030023C: 802CED60 (__dla__FPv)
// 80300248: 802F658C (__dt__7J2DPaneFv)
// 80300258: 802CED3C (__dl__FPv)
/* 803001E0-80300278 2FAB20 0098+00 1/0 2/2 0/0 .text __dt__10J2DTextBoxFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -499,7 +414,7 @@ asm J2DTextBox::~J2DTextBox() {
}
#pragma pop
/* 80300278-803002E8 0070+00 s=1 e=0 z=0 None .text setFont__10J2DTextBoxFP7JUTFont */
/* 80300278-803002E8 2FABB8 0070+00 1/0 0/0 0/0 .text setFont__10J2DTextBoxFP7JUTFont */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -509,36 +424,7 @@ asm void J2DTextBox::setFont(JUTFont* param_0) {
}
#pragma pop
/* ############################################################################################## */
/* 803A1C58-803A1C60 0004+04 s=1 e=0 z=0 None .rodata @stringBase0 */
#pragma push
#pragma force_active on
#pragma section ".dead"
SECTION_DEAD char const* const stringBase_803A1C58 = "%s";
SECTION_DEAD char const* const stringBase_803A1C5B = "";
/* @stringBase0 padding */
SECTION_DEAD static char const* const pad_803A1C5C = "\0\0\0";
#pragma pop
/* 803002E8-80300490 01A8+00 s=1 e=0 z=0 None .text draw__10J2DTextBoxFff */
// 80300364: 802F4394
//(__ct__8J2DPrintFP7JUTFontffQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColor)
// 80300370: 80456280 (lit_1660)
// 80300388: 80456280 (lit_1660)
// 803003AC: 80456280 (lit_1660)
// 803003CC: 8036024C (GXLoadPosMtxImm)
// 803003D4: 803602EC (GXSetCurrentMtx)
// 803003DC: 8035F0D4 (GXSetNumIndStages)
// 803003E8: 8035F0F8 (GXSetTevDirect)
// 803003FC: 8035BDFC (GXSetNumTexGens)
// 80300418: 8035BB7C (GXSetTexCoordGen2)
// 8030042C: 80456280 (lit_1660)
// 80300438: 803A1C58 (J2DTextBox__stringBase0)
// 8030043C: 803A1C58 (J2DTextBox__stringBase0)
// 80300444: 802F4778 (print__8J2DPrintFffUcPCce)
// 8030044C: 80346484 (PSMTXIdentity)
// 80300458: 8036024C (GXLoadPosMtxImm)
// 80300464: 802F4420 (__dt__8J2DPrintFv)
/* 803002E8-80300490 2FAC28 01A8+00 1/0 0/0 0/0 .text draw__10J2DTextBoxFff */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -548,26 +434,8 @@ asm void J2DTextBox::draw(f32 param_0, f32 param_1) {
}
#pragma pop
/* 80300490-80300658 01C8+00 s=1 e=1 z=0 None .text draw__10J2DTextBoxFfff18J2DTextBoxHBinding
/* 80300490-80300658 2FADD0 01C8+00 1/0 1/1 0/0 .text draw__10J2DTextBoxFfff18J2DTextBoxHBinding
*/
// 803004B8: 803621DC (_savegpr_29)
// 8030051C: 802F4394
//(__ct__8J2DPrintFP7JUTFontffQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColor)
// 80300528: 80456280 (lit_1660)
// 80300540: 80456280 (lit_1660)
// 80300564: 80456280 (lit_1660)
// 80300584: 8036024C (GXLoadPosMtxImm)
// 8030058C: 803602EC (GXSetCurrentMtx)
// 80300594: 8035F0D4 (GXSetNumIndStages)
// 803005A0: 8035F0F8 (GXSetTevDirect)
// 803005B4: 8035BDFC (GXSetNumTexGens)
// 803005D0: 8035BB7C (GXSetTexCoordGen2)
// 803005E8: 80456280 (lit_1660)
// 80300604: 802F4828 (printReturn__8J2DPrintFPCcff18J2DTextBoxHBinding18J2DTextBoxVBindingffUc)
// 8030060C: 80346484 (PSMTXIdentity)
// 80300618: 8036024C (GXLoadPosMtxImm)
// 80300624: 802F4420 (__dt__8J2DPrintFv)
// 80300644: 80362228 (_restgpr_29)
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -577,7 +445,7 @@ asm void J2DTextBox::draw(f32 param_0, f32 param_1, f32 param_2, J2DTextBoxHBind
}
#pragma pop
/* 80300658-80300660 0008+00 s=0 e=62 z=2 None .text getStringPtr__10J2DTextBoxCFv */
/* 80300658-80300660 2FAF98 0008+00 0/0 62/62 2/2 .text getStringPtr__10J2DTextBoxCFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -587,13 +455,7 @@ asm void J2DTextBox::getStringPtr() const {
}
#pragma pop
/* 80300660-8030074C 00EC+00 s=0 e=6 z=0 None .text setString__10J2DTextBoxFPCce */
// 80300670: 803621DC (_savegpr_29)
// 803006DC: 802CED60 (__dla__FPv)
// 803006E4: 80368BE4 (strlen)
// 80300708: 802CECC4 (__nwa__FUl)
// 8030072C: 80368B2C (strcpy)
// 80300738: 80362228 (_restgpr_29)
/* 80300660-8030074C 2FAFA0 00EC+00 0/0 6/6 0/0 .text setString__10J2DTextBoxFPCce */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -603,13 +465,7 @@ asm void J2DTextBox::setString(char const* param_0, ...) {
}
#pragma pop
/* 8030074C-80300870 0124+00 s=0 e=41 z=2 None .text setString__10J2DTextBoxFsPCce */
// 8030075C: 803621D4 (_savegpr_27)
// 803007CC: 802CED60 (__dla__FPv)
// 803007DC: 80368BE4 (strlen)
// 8030081C: 802CECC4 (__nwa__FUl)
// 8030083C: 80368AE8 (strncpy)
// 8030085C: 80362220 (_restgpr_27)
/* 8030074C-80300870 2FB08C 0124+00 0/0 41/41 2/2 .text setString__10J2DTextBoxFsPCce */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -619,7 +475,7 @@ asm void J2DTextBox::setString(s16 param_0, char const* param_1, ...) {
}
#pragma pop
/* 80300870-803008E8 0078+00 s=1 e=1 z=0 None .text setConnectParent__10J2DTextBoxFb */
/* 80300870-803008E8 2FB1B0 0078+00 1/0 1/0 0/0 .text setConnectParent__10J2DTextBoxFb */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -629,8 +485,7 @@ asm void J2DTextBox::setConnectParent(bool param_0) {
}
#pragma pop
/* 803008E8-80300950 0068+00 s=1 e=1 z=0 None .text drawSelf__10J2DTextBoxFff */
// 80300910: 80346484 (PSMTXIdentity)
/* 803008E8-80300950 2FB228 0068+00 1/0 1/0 0/0 .text drawSelf__10J2DTextBoxFff */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -641,28 +496,15 @@ asm void J2DTextBox::drawSelf(f32 param_0, f32 param_1) {
#pragma pop
/* ############################################################################################## */
/* 80456298-804562A0 0004+04 s=1 e=0 z=0 None .sdata2 @2049 */
/* 80456298-804562A0 004898 0004+04 1/1 0/0 0/0 .sdata2 @2049 */
SECTION_SDATA2 static f32 lit_2049[1 + 1 /* padding */] = {
9.999999747378752e-05f,
/* padding */
0.0f,
};
/* 80300950-80300AF8 01A8+00 s=1 e=0 z=0 None .text drawSelf__10J2DTextBoxFffPA3_A4_f */
// 803009C4: 802F4394
//(__ct__8J2DPrintFP7JUTFontffQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColor)
// 803009D0: 80456280 (lit_1660)
// 803009E8: 80456280 (lit_1660)
// 80300A0C: 803464E4 (PSMTXConcat)
// 80300A18: 8036024C (GXLoadPosMtxImm)
// 80300A20: 8035F0D4 (GXSetNumIndStages)
// 80300A2C: 8035F0F8 (GXSetTevDirect)
// 80300A40: 8035BDFC (GXSetNumTexGens)
// 80300A5C: 8035BB7C (GXSetTexCoordGen2)
// 80300A74: 802F475C (locate__8J2DPrintFff)
// 80300A8C: 80456298 (lit_2049)
// 80300AC0: 802F4828 (printReturn__8J2DPrintFPCcff18J2DTextBoxHBinding18J2DTextBoxVBindingffUc)
// 80300ACC: 802F4420 (__dt__8J2DPrintFv)
/* 80300950-80300AF8 2FB290 01A8+00 1/0 0/0 0/0 .text drawSelf__10J2DTextBoxFffPA3_A4_f
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -672,8 +514,7 @@ asm void J2DTextBox::drawSelf(f32 param_0, f32 param_1, f32 (*param_2)[3][4]) {
}
#pragma pop
/* 80300AF8-80300BFC 0104+00 s=1 e=1 z=0 None .text resize__10J2DTextBoxFff */
// 80300BD0: 802F6FF8 (resize__7J2DPaneFff)
/* 80300AF8-80300BFC 2FB438 0104+00 1/0 1/0 0/0 .text resize__10J2DTextBoxFff */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -683,8 +524,7 @@ asm void J2DTextBox::resize(f32 param_0, f32 param_1) {
}
#pragma pop
/* 80300BFC-80300C68 006C+00 s=1 e=0 z=0 None .text isUsed__10J2DTextBoxFPC7ResFONT */
// 80300C4C: 802F74B8 (isUsed__7J2DPaneFPC7ResFONT)
/* 80300BFC-80300C68 2FB53C 006C+00 1/0 0/0 0/0 .text isUsed__10J2DTextBoxFPC7ResFONT */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -694,13 +534,12 @@ asm void J2DTextBox::isUsed(ResFONT const* param_0) {
}
#pragma pop
/* 80300C68-80300C70 0008+00 s=1 e=1 z=0 None .text getTypeID__10J2DTextBoxCFv */
/* 80300C68-80300C70 2FB5A8 0008+00 1/0 1/0 0/0 .text getTypeID__10J2DTextBoxCFv */
s32 J2DTextBox::getTypeID() const {
return 19;
}
/* 80300C70-80300C90 0020+00 s=1 e=0 z=0 None .text isUsed__10J2DTextBoxFPC7ResTIMG */
// 80300C7C: 802F7430 (isUsed__7J2DPaneFPC7ResTIMG)
/* 80300C70-80300C90 2FB5B0 0020+00 1/0 0/0 0/0 .text isUsed__10J2DTextBoxFPC7ResTIMG */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -710,7 +549,17 @@ asm void J2DTextBox::isUsed(ResTIMG const* param_0) {
}
#pragma pop
/* 80300C90-80300C94 0004+00 s=1 e=0 z=0 None .text rewriteAlpha__10J2DTextBoxFv */
/* 80300C90-80300C94 2FB5D0 0004+00 1/0 0/0 0/0 .text rewriteAlpha__10J2DTextBoxFv */
void J2DTextBox::rewriteAlpha() {
/* empty function */
}
/* 803A1C58-803A1C60 02E2B8 0004+04 1/1 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
#pragma section ".dead"
SECTION_DEAD static char const* const stringBase_803A1C58 = "%s";
SECTION_DEAD static char const* const stringBase_803A1C5B = "";
/* @stringBase0 padding */
SECTION_DEAD static char const* const pad_803A1C5C = "\0\0\0";
#pragma pop