.include "macros.inc" .section .text, "ax" # 0x80006980 - 0x803E1E60 .global DWC_Base64Encode DWC_Base64Encode: /* 8031C124 00317D84 94 21 FF D0 */ stwu r1, -0x30(r1) /* 8031C128 00317D88 7C 08 02 A6 */ mflr r0 /* 8031C12C 00317D8C 90 01 00 34 */ stw r0, 0x34(r1) /* 8031C130 00317D90 39 61 00 30 */ addi r11, r1, 0x30 /* 8031C134 00317D94 4B EA AF E9 */ bl _savegpr_24 /* 8031C138 00317D98 3C E0 AA AB */ lis r7, 0xAAAAAAAB@ha /* 8031C13C 00317D9C 2C 05 00 00 */ cmpwi r5, 0 /* 8031C140 00317DA0 3B C7 AA AB */ addi r30, r7, 0xAAAAAAAB@l /* 8031C144 00317DA4 7C B9 2B 78 */ mr r25, r5 /* 8031C148 00317DA8 7C FE 20 16 */ mulhwu r7, r30, r4 /* 8031C14C 00317DAC 54 E0 F8 7E */ srwi r0, r7, 1 /* 8031C150 00317DB0 54 E7 08 3A */ rlwinm r7, r7, 1, 0, 0x1d /* 8031C154 00317DB4 1C 00 00 03 */ mulli r0, r0, 3 /* 8031C158 00317DB8 7C A0 20 50 */ subf r5, r0, r4 /* 8031C15C 00317DBC 7C 05 00 D0 */ neg r0, r5 /* 8031C160 00317DC0 7C 00 2B 78 */ or r0, r0, r5 /* 8031C164 00317DC4 7C 00 FE 70 */ srawi r0, r0, 0x1f /* 8031C168 00317DC8 54 00 07 7A */ rlwinm r0, r0, 0, 0x1d, 0x1d /* 8031C16C 00317DCC 7C 07 02 14 */ add r0, r7, r0 /* 8031C170 00317DD0 40 82 00 0C */ bne lbl_8031C17C /* 8031C174 00317DD4 7C 03 03 78 */ mr r3, r0 /* 8031C178 00317DD8 48 00 01 24 */ b lbl_8031C29C lbl_8031C17C: /* 8031C17C 00317DDC 7C 06 00 40 */ cmplw r6, r0 /* 8031C180 00317DE0 40 80 00 0C */ bge lbl_8031C18C /* 8031C184 00317DE4 38 60 FF FF */ li r3, -1 /* 8031C188 00317DE8 48 00 01 14 */ b lbl_8031C29C lbl_8031C18C: /* 8031C18C 00317DEC 7C 7C 1B 78 */ mr r28, r3 /* 8031C190 00317DF0 7F 3A CB 78 */ mr r26, r25 /* 8031C194 00317DF4 7F 63 22 14 */ add r27, r3, r4 /* 8031C198 00317DF8 3B 00 00 2A */ li r24, 0x2a /* 8031C19C 00317DFC 48 00 00 F4 */ b lbl_8031C290 lbl_8031C1A0: /* 8031C1A0 00317E00 7C BC D8 50 */ subf r5, r28, r27 /* 8031C1A4 00317E04 3B E0 00 03 */ li r31, 3 /* 8031C1A8 00317E08 54 A3 18 38 */ slwi r3, r5, 3 /* 8031C1AC 00317E0C 7C 1E 18 16 */ mulhwu r0, r30, r3 /* 8031C1B0 00317E10 2C 05 00 03 */ cmpwi r5, 3 /* 8031C1B4 00317E14 54 04 F0 BE */ srwi r4, r0, 2 /* 8031C1B8 00317E18 1C 04 00 06 */ mulli r0, r4, 6 /* 8031C1BC 00317E1C 7C 60 18 50 */ subf r3, r0, r3 /* 8031C1C0 00317E20 7C 03 00 D0 */ neg r0, r3 /* 8031C1C4 00317E24 7C 00 1B 78 */ or r0, r0, r3 /* 8031C1C8 00317E28 54 00 0F FE */ srwi r0, r0, 0x1f /* 8031C1CC 00317E2C 7F A4 02 14 */ add r29, r4, r0 /* 8031C1D0 00317E30 40 80 00 08 */ bge lbl_8031C1D8 /* 8031C1D4 00317E34 7C BF 2B 78 */ mr r31, r5 lbl_8031C1D8: /* 8031C1D8 00317E38 38 61 00 08 */ addi r3, r1, 8 /* 8031C1DC 00317E3C 38 80 00 00 */ li r4, 0 /* 8031C1E0 00317E40 38 A0 00 03 */ li r5, 3 /* 8031C1E4 00317E44 4B CE 7F 21 */ bl memset /* 8031C1E8 00317E48 7F 84 E3 78 */ mr r4, r28 /* 8031C1EC 00317E4C 7F E5 FB 78 */ mr r5, r31 /* 8031C1F0 00317E50 38 61 00 08 */ addi r3, r1, 8 /* 8031C1F4 00317E54 4B CE 7E 0D */ bl memcpy /* 8031C1F8 00317E58 88 01 00 08 */ lbz r0, 8(r1) /* 8031C1FC 00317E5C 28 1D 00 02 */ cmplwi r29, 2 /* 8031C200 00317E60 80 6D 8D 28 */ lwz r3, lbl_8063DFE8-_SDA_BASE_(r13) /* 8031C204 00317E64 7C 00 16 70 */ srawi r0, r0, 2 /* 8031C208 00317E68 7C 03 00 AE */ lbzx r0, r3, r0 /* 8031C20C 00317E6C 98 1A 00 00 */ stb r0, 0(r26) /* 8031C210 00317E70 41 80 00 24 */ blt lbl_8031C234 /* 8031C214 00317E74 88 01 00 09 */ lbz r0, 9(r1) /* 8031C218 00317E78 88 61 00 08 */ lbz r3, 8(r1) /* 8031C21C 00317E7C 7C 00 26 70 */ srawi r0, r0, 4 /* 8031C220 00317E80 80 8D 8D 28 */ lwz r4, lbl_8063DFE8-_SDA_BASE_(r13) /* 8031C224 00317E84 50 60 26 B6 */ rlwimi r0, r3, 4, 0x1a, 0x1b /* 8031C228 00317E88 7C 04 00 AE */ lbzx r0, r4, r0 /* 8031C22C 00317E8C 98 1A 00 01 */ stb r0, 1(r26) /* 8031C230 00317E90 48 00 00 08 */ b lbl_8031C238 lbl_8031C234: /* 8031C234 00317E94 9B 1A 00 01 */ stb r24, 1(r26) lbl_8031C238: /* 8031C238 00317E98 28 1D 00 03 */ cmplwi r29, 3 /* 8031C23C 00317E9C 41 80 00 24 */ blt lbl_8031C260 /* 8031C240 00317EA0 88 01 00 0A */ lbz r0, 0xa(r1) /* 8031C244 00317EA4 88 61 00 09 */ lbz r3, 9(r1) /* 8031C248 00317EA8 7C 00 36 70 */ srawi r0, r0, 6 /* 8031C24C 00317EAC 80 8D 8D 28 */ lwz r4, lbl_8063DFE8-_SDA_BASE_(r13) /* 8031C250 00317EB0 50 60 16 BA */ rlwimi r0, r3, 2, 0x1a, 0x1d /* 8031C254 00317EB4 7C 04 00 AE */ lbzx r0, r4, r0 /* 8031C258 00317EB8 98 1A 00 02 */ stb r0, 2(r26) /* 8031C25C 00317EBC 48 00 00 08 */ b lbl_8031C264 lbl_8031C260: /* 8031C260 00317EC0 9B 1A 00 02 */ stb r24, 2(r26) lbl_8031C264: /* 8031C264 00317EC4 28 1D 00 04 */ cmplwi r29, 4 /* 8031C268 00317EC8 41 80 00 1C */ blt lbl_8031C284 /* 8031C26C 00317ECC 88 01 00 0A */ lbz r0, 0xa(r1) /* 8031C270 00317ED0 80 6D 8D 28 */ lwz r3, lbl_8063DFE8-_SDA_BASE_(r13) /* 8031C274 00317ED4 54 00 06 BE */ clrlwi r0, r0, 0x1a /* 8031C278 00317ED8 7C 03 00 AE */ lbzx r0, r3, r0 /* 8031C27C 00317EDC 98 1A 00 03 */ stb r0, 3(r26) /* 8031C280 00317EE0 48 00 00 08 */ b lbl_8031C288 lbl_8031C284: /* 8031C284 00317EE4 9B 1A 00 03 */ stb r24, 3(r26) lbl_8031C288: /* 8031C288 00317EE8 7F 9C FA 14 */ add r28, r28, r31 /* 8031C28C 00317EEC 3B 5A 00 04 */ addi r26, r26, 4 lbl_8031C290: /* 8031C290 00317EF0 7C 1C D8 40 */ cmplw r28, r27 /* 8031C294 00317EF4 40 82 FF 0C */ bne lbl_8031C1A0 /* 8031C298 00317EF8 7C 79 D0 50 */ subf r3, r25, r26 lbl_8031C29C: /* 8031C29C 00317EFC 39 61 00 30 */ addi r11, r1, 0x30 /* 8031C2A0 00317F00 4B EA AE C9 */ bl _restgpr_24 /* 8031C2A4 00317F04 80 01 00 34 */ lwz r0, 0x34(r1) /* 8031C2A8 00317F08 7C 08 03 A6 */ mtlr r0 /* 8031C2AC 00317F0C 38 21 00 30 */ addi r1, r1, 0x30 /* 8031C2B0 00317F10 4E 80 00 20 */ blr .global DWC_Base64Decode DWC_Base64Decode: /* 8031C2B4 00317F14 94 21 FF E0 */ stwu r1, -0x20(r1) /* 8031C2B8 00317F18 54 80 07 BF */ clrlwi. r0, r4, 0x1e /* 8031C2BC 00317F1C 93 E1 00 1C */ stw r31, 0x1c(r1) /* 8031C2C0 00317F20 93 C1 00 18 */ stw r30, 0x18(r1) /* 8031C2C4 00317F24 41 82 00 0C */ beq lbl_8031C2D0 /* 8031C2C8 00317F28 38 60 FF FF */ li r3, -1 /* 8031C2CC 00317F2C 48 00 01 B0 */ b lbl_8031C47C lbl_8031C2D0: /* 8031C2D0 00317F30 7C 68 1B 78 */ mr r8, r3 /* 8031C2D4 00317F34 38 E0 00 00 */ li r7, 0 /* 8031C2D8 00317F38 7C 89 03 A6 */ mtctr r4 /* 8031C2DC 00317F3C 2C 04 00 00 */ cmpwi r4, 0 /* 8031C2E0 00317F40 40 81 00 1C */ ble lbl_8031C2FC lbl_8031C2E4: /* 8031C2E4 00317F44 88 08 00 00 */ lbz r0, 0(r8) /* 8031C2E8 00317F48 2C 00 00 2A */ cmpwi r0, 0x2a /* 8031C2EC 00317F4C 41 82 00 08 */ beq lbl_8031C2F4 /* 8031C2F0 00317F50 38 E7 00 06 */ addi r7, r7, 6 lbl_8031C2F4: /* 8031C2F4 00317F54 39 08 00 01 */ addi r8, r8, 1 /* 8031C2F8 00317F58 42 00 FF EC */ bdnz lbl_8031C2E4 lbl_8031C2FC: /* 8031C2FC 00317F5C 2C 05 00 00 */ cmpwi r5, 0 /* 8031C300 00317F60 7C E0 1E 70 */ srawi r0, r7, 3 /* 8031C304 00317F64 7C E0 01 94 */ addze r7, r0 /* 8031C308 00317F68 40 82 00 0C */ bne lbl_8031C314 /* 8031C30C 00317F6C 7C E3 3B 78 */ mr r3, r7 /* 8031C310 00317F70 48 00 01 6C */ b lbl_8031C47C lbl_8031C314: /* 8031C314 00317F74 7C 06 38 40 */ cmplw r6, r7 /* 8031C318 00317F78 40 80 00 0C */ bge lbl_8031C324 /* 8031C31C 00317F7C 38 60 FF FF */ li r3, -1 /* 8031C320 00317F80 48 00 01 5C */ b lbl_8031C47C lbl_8031C324: /* 8031C324 00317F84 2C 04 00 00 */ cmpwi r4, 0 /* 8031C328 00317F88 40 82 00 14 */ bne lbl_8031C33C /* 8031C32C 00317F8C 38 00 00 00 */ li r0, 0 /* 8031C330 00317F90 38 60 00 00 */ li r3, 0 /* 8031C334 00317F94 98 05 00 00 */ stb r0, 0(r5) /* 8031C338 00317F98 48 00 01 44 */ b lbl_8031C47C lbl_8031C33C: /* 8031C33C 00317F9C 7C A4 2B 78 */ mr r4, r5 /* 8031C340 00317FA0 39 40 00 00 */ li r10, 0 /* 8031C344 00317FA4 39 60 00 3F */ li r11, 0x3f /* 8031C348 00317FA8 39 80 00 3E */ li r12, 0x3e /* 8031C34C 00317FAC 38 00 00 04 */ li r0, 4 lbl_8031C350: /* 8031C350 00317FB0 7C 66 1B 78 */ mr r6, r3 /* 8031C354 00317FB4 39 21 00 08 */ addi r9, r1, 8 /* 8031C358 00317FB8 3B C0 00 00 */ li r30, 0 /* 8031C35C 00317FBC 7C 09 03 A6 */ mtctr r0 lbl_8031C360: /* 8031C360 00317FC0 8B E6 00 00 */ lbz r31, 0(r6) /* 8031C364 00317FC4 7F E8 07 74 */ extsb r8, r31 /* 8031C368 00317FC8 2C 08 00 41 */ cmpwi r8, 0x41 /* 8031C36C 00317FCC 41 80 00 18 */ blt lbl_8031C384 /* 8031C370 00317FD0 2C 08 00 5A */ cmpwi r8, 0x5a /* 8031C374 00317FD4 41 81 00 10 */ bgt lbl_8031C384 /* 8031C378 00317FD8 39 1F FF BF */ addi r8, r31, -65 /* 8031C37C 00317FDC 99 09 00 00 */ stb r8, 0(r9) /* 8031C380 00317FE0 48 00 00 6C */ b lbl_8031C3EC lbl_8031C384: /* 8031C384 00317FE4 7F E8 07 74 */ extsb r8, r31 /* 8031C388 00317FE8 2C 08 00 61 */ cmpwi r8, 0x61 /* 8031C38C 00317FEC 41 80 00 18 */ blt lbl_8031C3A4 /* 8031C390 00317FF0 2C 08 00 7A */ cmpwi r8, 0x7a /* 8031C394 00317FF4 41 81 00 10 */ bgt lbl_8031C3A4 /* 8031C398 00317FF8 39 1F FF B9 */ addi r8, r31, -71 /* 8031C39C 00317FFC 99 09 00 00 */ stb r8, 0(r9) /* 8031C3A0 00318000 48 00 00 4C */ b lbl_8031C3EC lbl_8031C3A4: /* 8031C3A4 00318004 7F E8 07 74 */ extsb r8, r31 /* 8031C3A8 00318008 2C 08 00 30 */ cmpwi r8, 0x30 /* 8031C3AC 0031800C 41 80 00 18 */ blt lbl_8031C3C4 /* 8031C3B0 00318010 2C 08 00 39 */ cmpwi r8, 0x39 /* 8031C3B4 00318014 41 81 00 10 */ bgt lbl_8031C3C4 /* 8031C3B8 00318018 39 1F 00 04 */ addi r8, r31, 4 /* 8031C3BC 0031801C 99 09 00 00 */ stb r8, 0(r9) /* 8031C3C0 00318020 48 00 00 2C */ b lbl_8031C3EC lbl_8031C3C4: /* 8031C3C4 00318024 7F E8 07 74 */ extsb r8, r31 /* 8031C3C8 00318028 2C 08 00 2E */ cmpwi r8, 0x2e /* 8031C3CC 0031802C 40 82 00 0C */ bne lbl_8031C3D8 /* 8031C3D0 00318030 99 89 00 00 */ stb r12, 0(r9) /* 8031C3D4 00318034 48 00 00 18 */ b lbl_8031C3EC lbl_8031C3D8: /* 8031C3D8 00318038 2C 08 00 2D */ cmpwi r8, 0x2d /* 8031C3DC 0031803C 40 82 00 0C */ bne lbl_8031C3E8 /* 8031C3E0 00318040 99 69 00 00 */ stb r11, 0(r9) /* 8031C3E4 00318044 48 00 00 08 */ b lbl_8031C3EC lbl_8031C3E8: /* 8031C3E8 00318048 99 49 00 00 */ stb r10, 0(r9) lbl_8031C3EC: /* 8031C3EC 0031804C 39 29 00 01 */ addi r9, r9, 1 /* 8031C3F0 00318050 3B DE 00 01 */ addi r30, r30, 1 /* 8031C3F4 00318054 38 C6 00 01 */ addi r6, r6, 1 /* 8031C3F8 00318058 42 00 FF 68 */ bdnz lbl_8031C360 /* 8031C3FC 0031805C 89 21 00 08 */ lbz r9, 8(r1) /* 8031C400 00318060 38 C4 00 01 */ addi r6, r4, 1 /* 8031C404 00318064 89 01 00 09 */ lbz r8, 9(r1) /* 8031C408 00318068 7F E5 30 50 */ subf r31, r5, r6 /* 8031C40C 0031806C 7D 26 07 74 */ extsb r6, r9 /* 8031C410 00318070 38 63 00 04 */ addi r3, r3, 4 /* 8031C414 00318074 7D 09 07 74 */ extsb r9, r8 /* 8031C418 00318078 7C 1F 38 00 */ cmpw r31, r7 /* 8031C41C 0031807C 54 C8 10 3A */ slwi r8, r6, 2 /* 8031C420 00318080 7D 26 26 70 */ srawi r6, r9, 4 /* 8031C424 00318084 7D 06 33 78 */ or r6, r8, r6 /* 8031C428 00318088 98 C4 00 00 */ stb r6, 0(r4) /* 8031C42C 0031808C 40 80 00 4C */ bge lbl_8031C478 /* 8031C430 00318090 89 01 00 0A */ lbz r8, 0xa(r1) /* 8031C434 00318094 38 C4 00 02 */ addi r6, r4, 2 /* 8031C438 00318098 7F E5 30 50 */ subf r31, r5, r6 /* 8031C43C 0031809C 55 29 20 36 */ slwi r9, r9, 4 /* 8031C440 003180A0 7D 08 07 74 */ extsb r8, r8 /* 8031C444 003180A4 7D 06 16 70 */ srawi r6, r8, 2 /* 8031C448 003180A8 7C 1F 38 00 */ cmpw r31, r7 /* 8031C44C 003180AC 7D 26 33 78 */ or r6, r9, r6 /* 8031C450 003180B0 98 C4 00 01 */ stb r6, 1(r4) /* 8031C454 003180B4 40 80 00 24 */ bge lbl_8031C478 /* 8031C458 003180B8 88 C1 00 0B */ lbz r6, 0xb(r1) /* 8031C45C 003180BC 55 08 30 32 */ slwi r8, r8, 6 /* 8031C460 003180C0 7D 06 33 78 */ or r6, r8, r6 /* 8031C464 003180C4 98 C4 00 02 */ stb r6, 2(r4) /* 8031C468 003180C8 38 84 00 03 */ addi r4, r4, 3 /* 8031C46C 003180CC 7F E5 20 50 */ subf r31, r5, r4 /* 8031C470 003180D0 7C 1F 38 00 */ cmpw r31, r7 /* 8031C474 003180D4 41 80 FE DC */ blt lbl_8031C350 lbl_8031C478: /* 8031C478 003180D8 7F E3 FB 78 */ mr r3, r31 lbl_8031C47C: /* 8031C47C 003180DC 83 E1 00 1C */ lwz r31, 0x1c(r1) /* 8031C480 003180E0 83 C1 00 18 */ lwz r30, 0x18(r1) /* 8031C484 003180E4 38 21 00 20 */ addi r1, r1, 0x20 /* 8031C488 003180E8 4E 80 00 20 */ blr