1. Список говнокодов пользователя jangolare

    Всего: 27

  2. C++ / Говнокод #28131

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    #ifndef EXCHANGECLIENTBINANCE_H
    #define EXCHANGECLIENTBINANCE_H
    
    #include "exchangeclient.h"
    
    #include <QScopedPointer>
    #include <QString>
    
    class ExchangeClientBinancePrivate;
    class ExchangeClientBinance : public ExchangeClient<ExchangeClientBinance>
    {
        QScopedPointer<ExchangeClientBinancePrivate> d_ptr;
    public:
        ExchangeClientBinance() noexcept;
        ~ExchangeClientBinance();
        void connect(const ConnectionCredentials& credentials) noexcept;
    };
    
    template<>
    struct ExchangeClient<ExchangeClientBinance>::ConnectionCredentials
    {
        QString apiKey;
        QString secretKey;
    };
    
    #endif // EXCHANGECLIENTBINANCE_H

    jangolare, 22 Апреля 2022

    Комментарии (3)
  3. C++ / Говнокод #27433

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    (((UU)M[(((UU)c&255)<<16)+(UU)((U)(a+2))])<<8)+\
    											((UU)M[(((UU)c&255)<<16)+(UU)((U)(a+3))])\
    											)
    #define write_byte(v,d)M[d]=v;
    #define write_2bytes(v,d)	M[d]=					(v)>>8;\
    							M[((d)+1)&0xFFffFF]=	(v)&255;
    #define write_4bytes(v,d)	M[((d))&0xFFffFF]=		(v)>>24;\
    							M[((d)+1)&0xFFffFF]=	(v)>>16;\
    							M[((d)+2)&0xFFffFF]=	(v)>>8;\
    							M[((d)+3)&0xFFffFF]=	(v)&255;
    #define D ;switch(CONSUME_BYTE){k 0:goto G_HALT;k 1:goto G_LDA;k 2:goto G_LA;k 3:goto G_LDB;k 4:goto G_LB;k 5:goto G_SC;k 6:goto G_STA;k 7:goto G_STB;\
    k 8:goto G_ADD;k 9:goto G_SUB;k 10:goto G_MUL;k 11:goto G_DIV;k 12:goto G_MOD;k 13:goto G_CMP;k 14:goto G_JMPIFEQ;k 15:goto G_JMPIFNEQ;\
    k 16:goto G_GETCHAR;k 17:goto G_PUTCHAR;k 18:goto G_AND;k 19:goto G_OR;k 20:goto G_XOR;k 21:goto G_LSHIFT;k 22:goto G_RSHIFT;k 23:goto G_ILDA;\
    k 24:goto G_ILDB;k 25:goto G_CAB;k 26:goto G_AB;k 27:goto G_BA;k 28:goto G_ALC;k 29:goto G_AHC;k 30:goto G_NOP;k 31:goto G_CBA;\
    k 32:goto G_LLA;k 33:goto G_ILLDA;k 34:goto G_LLB;k 35:goto G_ILLDB;k 36:goto G_ILLDAA;k 37:goto G_ILLDBB;k 38:goto G_ILLDAB;k 39:goto G_ILLDBA;\
    k 40:goto G_CA;k 41:goto G_CB;k 42:goto G_AC;k 43:goto G_BC;k 44:goto G_ISTA;k 45:goto G_ISTB;k 46:goto G_ISTLA;k 47:goto G_ISTLB;\
    k 48:goto G_JMP;k 49:goto G_STLA;k 50:goto G_STLB;k 51:goto G_STC;k 52:goto G_PUSH;k 53:goto G_POP;k 54:goto G_PUSHA;k 55:goto G_POPA;\
    k 56:goto G_ASTP;k 57:goto G_BSTP;k 58:goto G_COMPL;k 59:goto G_CPC;k 60:goto G_CALL;k 61:goto G_RET;k 62:goto G_FARILLDA;k 63:goto G_FARISTLA;\
    k 64:goto G_FARILLDB;k 65:goto G_FARISTLB;k 66:goto G_FARPAGEL;k 67:goto G_FARPAGEST;k 68:goto G_LFARPC;k 69:goto G_FARCALL;k 70:goto G_FARRET;k 71:goto G_FARILDA;\
    k 72:goto G_FARISTA;k 73:goto G_FARILDB;k 74:goto G_FARISTB;\
    k 75:goto TB;k 76:goto TC;k 77:goto TD;k 78:goto TE;k 79:goto TF;\
    k 80:goto U0;k 81:goto U1;k 82:goto U2;k 83:goto U3;k 84:goto U4;k 85:goto U5;k 86:goto U6;k 87:goto U7;\
    k 88:goto U8;k 89:goto U9;k 90:goto UA;k 91:\
    goto G_ALPUSH;k 92:goto G_BLPUSH;k 93:goto G_CPUSH;k 94:goto G_APUSH;k 95:goto G_BPUSH;\
    k 96:goto G_ALPOP;k 97:goto G_BLPOP;k 98:goto G_CPOP;k 99:goto G_APOP;k 100:goto G_BPOP;\
    k 101:goto G_INTERRUPT;k 102:goto G_CLOCK;\
    k 103:goto G_ARX0;\
    k 104:goto G_BRX0;k 105:goto V9;k 106:goto VA;k 107:goto VB;k 108:goto VC;k 109:goto VD;k 110:goto VE;k 111:goto VF;\
    k 112:goto W0;k 113:goto W1;k 114:goto W2;k 115:goto W3;k 116:goto W4;k 117:goto W5;k 118:goto W6;k 119:goto W7;\
    k 120:goto W8;k 121:goto W9;k 122:goto WA;k 123:goto WB;k 124:goto WC;k 125:goto WD;k 126:goto WE;\
    k 127:goto WF;\
    k 128:goto X0;k 129:goto X1;k 130:goto X2;k 131:goto X3;k 132:goto X4;\
    k 133:goto X5;k 134:goto X6;k 135:goto X7;k 136:goto X8;k 137:goto X9;\
    k 138:goto XA;k 139:goto XB;k 140:goto XC;k 141:goto XD;k 142:goto XE;k 143:goto XF;\
    k 144:goto Y0;k 145:goto Y1;k 146:goto Y2;k 147:goto Y3;\
    k 148:goto Y4;k 149:goto Y5;k 150:goto Y6;k 151:goto Y7;k 152:goto Y8;k 153:goto Y9;\
    k 154:goto YA;k 155:goto YB;k 156:goto YC;k 157:goto YD;\
    k 158:goto YE;k 159:goto YF;\
    k 160:goto Z0;k 161:goto Z1;k 162:goto Z2;k 163:goto Z3;\
    k 164:goto Z4;k 165:goto Z5;k 166:goto Z6;k 167:goto Z7;\
    k 168:goto Z8;k 169:goto Z9;k 170:goto ZA;\
    k 171:k 172:k 173:k 174:k 175:k 176:k 177:\
    k 178:k 179:k 180:k 181:k 182:k 183:k 184:k 185:k 186:k 187:\
    k 188:k 189:k 190:k 191:k 192:k 193:k 194:k 195:k 196:k 197:\
    k 198:k 199:k 200:k 201:k 202:k 203:k 204:k 205:k 206:k 207:\
    k 208:k 209:k 210:k 211:k 212:k 213:k 214:k 215:k 216:k 217:\
    k 218:k 219:k 220:k 221:k 222:k 223:k 224:k 225:k 226:k 227:\
    k 228:k 229:k 230:k 231:k 232:k 233:k 234:k 235:k 236:k 237:\
    k 238:k 239:k 240:k 241:k 242:k 243:k 244:k 245:k 246:k 247:\
    k 248:k 249:k 250:k 251:k 252:k 253:k 254:k 255:goto G_NOP;}
    int e(){
    register u program_counter_region=0;register U a=0,b=0,c=0,program_counter=0,stack_pointer=0; 
    register UU RX0=0,RX1=0,RX2=0,RX3=0;R=0;di();
    G_NOP:D
    G_HALT:dcl();return 0;
    G_AND:a&=b;D
    G_OR:a|=b;D
    G_XOR:a^=b;D
    G_GETCHAR:a=gch()D
    G_PUTCHAR:pch(a)D
    G_LSHIFT:a<<=b&15;D
    G_RSHIFT:a>>=b&15;D
    G_ILDA:a=r(c)D
    G_ILDB:b=r(c)D
    G_CAB:c=((a&255)<<8)+(b&255)D
    G_AB:a=b;D
    G_BA:b=a;D
    G_ALC:a=c&0xff;D
    G_AHC:a=(c>>8)&255;D
    G_CBA:c=((b&255)<<8)+(a&255)D
    G_LLA:a=CONSUME_TWO_BYTES;D
    G_ILLDA:a=Z_READ_TWO_BYTES_THROUGH_C;D

    I'm back with more ogvnokod!

    jangolare, 19 Мая 2021

    Комментарии (7)
  4. C++ / Говнокод #23189

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    void PPU::scanline() noexcept
    {
        if (control & CONTROL_MASK_BG_DISPLAY)
        {
            const int st = control & CONTROL_MASK_BG_WINDOW_TILE_DATA_SELECT ? 0x0000 : 0x0800;
            const int sm = control & CONTROL_MASK_BG_TILE_MAP_DISPLAY_SELECT ? 0x1C00 : 0x1800;
            for (int i = 0; i < 160; ++i)
            {
                const int im = sm + (scx + i) / 8 % 32 + (scy + ly) / 8 % 32 * 32;
                const int vm = st == 0x0000 ?               vram[im] :
                                              (signed char) vram[im] + 128;
                const unsigned px =
                    (vram[st + vm * 16 + (scy + ly) % 8 * 2    ] >> (7 - (scx + i) % 8) & 1) << 1 |
                    (vram[st + vm * 16 + (scy + ly) % 8 * 2 + 1] >> (7 - (scx + i) % 8) & 1);
    
                framebuffer[(i + ly * 160) / 8 * 2] &= ~((px << 6) >> i % 8 * 2);
                framebuffer[(i + ly * 160) / 8 * 2] |=   (px << 6) >> i % 8 * 2;
    
                framebuffer[(i + ly * 160) / 8 * 2 + 1] &= ~((px << 14) >> (i % 8 * 2));
                framebuffer[(i + ly * 160) / 8 * 2 + 1] |=   (px << 14) >> (i % 8 * 2);
            }
        }
    ...

    jangolare, 16 Июля 2017

    Комментарии (0)
  5. C++ / Говнокод #23162

    +2

    1. 001
    2. 002
    3. 003
    4. 004
    5. 005
    6. 006
    7. 007
    8. 008
    9. 009
    10. 010
    11. 011
    12. 012
    13. 013
    14. 014
    15. 015
    16. 016
    17. 017
    18. 018
    19. 019
    20. 020
    21. 021
    22. 022
    23. 023
    24. 024
    25. 025
    26. 026
    27. 027
    28. 028
    29. 029
    30. 030
    31. 031
    32. 032
    33. 033
    34. 034
    35. 035
    36. 036
    37. 037
    38. 038
    39. 039
    40. 040
    41. 041
    42. 042
    43. 043
    44. 044
    45. 045
    46. 046
    47. 047
    48. 048
    49. 049
    50. 050
    51. 051
    52. 052
    53. 053
    54. 054
    55. 055
    56. 056
    57. 057
    58. 058
    59. 059
    60. 060
    61. 061
    62. 062
    63. 063
    64. 064
    65. 065
    66. 066
    67. 067
    68. 068
    69. 069
    70. 070
    71. 071
    72. 072
    73. 073
    74. 074
    75. 075
    76. 076
    77. 077
    78. 078
    79. 079
    80. 080
    81. 081
    82. 082
    83. 083
    84. 084
    85. 085
    86. 086
    87. 087
    88. 088
    89. 089
    90. 090
    91. 091
    92. 092
    93. 093
    94. 094
    95. 095
    96. 096
    97. 097
    98. 098
    99. 099
    100. 100
    switch (address & 0xF000)
        {
            case 0x0000:
            case 0x1000:
            case 0x2000:
            case 0x3000:
                return rom[address];
            case 0x4000:
            case 0x5000:
            case 0x6000:
            case 0x7000:
                return rom[address + 0x4000 * (bank_index - 1)];
            case 0x8000:
            case 0x9000:
                return vram[address - 0x8000];
            case 0xA000:
            case 0xB000:
                return sram[address - 0xA000];
            case 0xC000:
            case 0xD000:
                return wram[address - 0xC000];
            case 0xE000:
            case 0xF000:
                switch (address & 0x0F00)
                {
                    case 0x0000:
                    case 0x0100:
                    case 0x0200:
                    case 0x0300:
                    case 0x0400:
                    case 0x0500:
                    case 0x0600:
                    case 0x0700:
                    case 0x0800:
                    case 0x0900:
                    case 0x0A00:
                    case 0x0B00:
                    case 0x0C00:
                    case 0x0D00:
                        return wram[address - 0xF000];
                    case 0x0E00:
                        switch (address & 0x00F0)
                        {
                            case 0x0000:
                            case 0x0010:
                            case 0x0020:
                            case 0x0030:
                            case 0x0040:
                            case 0x0050:
                            case 0x0060:
                            case 0x0070:
                            case 0x0080:
                            case 0x0090:
                                return oam[address - 0xFE00];
                            case 0x00A0:
                            case 0x00B0:
                            case 0x00C0:
                            case 0x00D0:
                            case 0x00E0:
                            case 0x00F0:
                                return 0b00;
                        }
                    case 0x0F00:
                        switch (address & 0x00F0)
                        {
                            case 0x0000:
                            case 0x0010:
                            case 0x0020:
                            case 0x0030:
                            case 0x0040:
                            case 0x0050:
                            case 0x0060:
                            case 0x0070:
                                return io_regs[address - 0xFF00];
                            case 0x0080:
                            case 0x0090:
                            case 0x00A0:
                            case 0x00B0:
                            case 0x00C0:
                            case 0x00D0:
                            case 0x00E0:
                            case 0x00F0:
                                switch (address & 0x000F)
                                {
                                    case 0x0000:
                                    case 0x0001:
                                    case 0x0002:
                                    case 0x0003:
                                    case 0x0004:
                                    case 0x0005:
                                    case 0x0007:
                                    case 0x0008:
                                    case 0x0009:
                                    case 0x000A:
                                    case 0x000B:
                                    case 0x000C:
                                    case 0x000D:
                                    case 0x000E:
                                        return hram[address - 0xFF80];
                                    case 0x000F:

    jangolare, 06 Июля 2017

    Комментарии (18)
  6. C++ / Говнокод #22713

    −21

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    namespace bullet_factory
        {
            template<int         weaponType,
                     typename    T,
                     typename... Args>
            std::unique_ptr<T> createBullet(Args... args);
    
            template<>
            std::unique_ptr<BulletBazooka> createBullet<WeaponList::BAZOOKA, BulletBazooka,
                const Texture*, float, float, float, float, int>(const Texture* texture,
                                                                 float          x,
                                                                 float          y,
                                                                 float          nx,
                                                                 float          ny,
                                                                 int            movementTime);

    jangolare, 30 Марта 2017

    Комментарии (1)
  7. C++ / Говнокод #22641

    −14

    1. 1
    2. 2
    3. 3
    4. 4
    void setPixel24(int row, int col, Uint32 pixel) noexcept
            {
                *reinterpret_cast<Uint32*>(static_cast<Uint8*>(handle->pixels) + row * handle->pitch + 3 * col * sizeof(Uint8)) = pixel;
            }

    jangolare, 20 Марта 2017

    Комментарии (22)
  8. C++ / Говнокод #21944

    −42

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    constexpr unsigned setColorComponent(unsigned color, unsigned componentIndex, unsigned value) noexcept
    {
        const auto offset = componentIndex << 2;
        return ((color | (15 << offset)) ^ (15 << offset)) | (value << offset);
    }

    jangolare, 05 Января 2017

    Комментарии (9)
  9. C++ / Говнокод #21942

    −16

    1. 1
    2. 2
    3. 3
    4. 4
    Chunk* Chunk::findChunk(int x, int y, int z, ptrdiff_t& index) noexcept
    {
        return const_cast<Chunk*>(const_cast<const Chunk*>(this)->findChunk(x, y, z, index));
    }

    8888

    jangolare, 05 Января 2017

    Комментарии (109)
  10. C++ / Говнокод #21857

    −17

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    void MeshChunkBuilder::processRemovingLights(unsigned colorIndex) noexcept
    {
        while (!lightRemoveNodes[colorIndex].empty())
        {
            // ...
            if (x)
            {
                const unsigned neightborLight = chunkModelNode->getLight(x - 1, y, z);
                const unsigned neightborLightBrightness = color::getColorComponent(neightborLight, colorIndex);
    
                if (neightborLightBrightness && neightborLightBrightness < lightBrightness)
                {
                    removeLight(*chunkModelNode, x - 1, y, z, neightborLight, colorIndex);
                }
                else if (neightborLightBrightness >= lightBrightness)
                {
                    lightPlaceNodes[colorIndex].push({chunkModelNode->getLightIndex(x - 1, y, z), chunkModelNode});
                }
            }
            else if (!x && neightbors.chunkLeft)
            {
                ChunkModel& chunkModel = neightbors.chunkLeft->getModel();
    
                const unsigned neightborLight = chunkModel.getLight(constants::CHUNK_SIZE - 1, y, z);
                const unsigned neightborLightBrightness = color::getColorComponent(neightborLight, colorIndex);
    
                if (neightborLightBrightness && neightborLightBrightness < lightBrightness)
                {
                    removeLight(chunkModel, constants::CHUNK_SIZE - 1, y, z, neightborLight, colorIndex);
                }
                else if (neightborLightBrightness >= lightBrightness)
                {
                    lightPlaceNodes[colorIndex].push({chunkModel.getLightIndex(constants::CHUNK_SIZE - 1, y, z), 
                            &chunkModel});
                }
            }
            if (x != constants::CHUNK_SIZE - 1)
            {
                const unsigned neightborLight = chunkModelNode->getLight(x + 1, y, z);
                const unsigned neightborLightBrightness = color::getColorComponent(neightborLight, colorIndex);
    
                if (neightborLightBrightness && neightborLightBrightness < lightBrightness)
                {
                    removeLight(*chunkModelNode, x + 1, y, z, neightborLight, colorIndex);
                }
                else if (neightborLightBrightness >= lightBrightness)
                {
                    lightPlaceNodes[colorIndex].push({chunkModelNode->getLightIndex(x + 1, y, z), chunkModelNode});
                }
            }
            else if (x == constants::CHUNK_SIZE - 1 && neightbors.chunkRight)
            {
                ChunkModel& chunkModel = neightbors.chunkRight->getModel();
    
                const unsigned neightborLight = chunkModel.getLight(0, y, z);
                const unsigned neightborLightBrightness = color::getColorComponent(neightborLight, colorIndex);
    
                if (neightborLightBrightness && neightborLightBrightness < lightBrightness)
                {
                    removeLight(chunkModel, 0, y, z, neightborLight, colorIndex);
                }
                else if (neightborLightBrightness >= lightBrightness)
                {
                    lightPlaceNodes[colorIndex].push({chunkModel.getLightIndex(0, y, z), &chunkModel});
                }
            }
            if (y)
            {
                const unsigned neightborLight = chunkModelNode->getLight(x, y - 1, z);
                const unsigned neightborLightBrightness = color::getColorComponent(neightborLight, colorIndex);
    
                if (neightborLightBrightness && neightborLightBrightness < lightBrightness)
                {
                    removeLight(*chunkModelNode, x, y - 1, z, neightborLight, colorIndex);
                }
                else if (neightborLightBrightness >= lightBrightness)
                {
                    lightPlaceNodes[colorIndex].push({chunkModelNode->getLightIndex(x, y - 1, z), chunkModelNode});
                }
            }
            if (y != constants::CHUNK_HEIGHT - 1)
            {
                const unsigned neightborLight = chunkModelNode->getLight(x, y + 1, z);
                const unsigned neightborLightBrightness = color::getColorComponent(neightborLight, colorIndex);
    
                if (neightborLightBrightness && neightborLightBrightness < lightBrightness)
                {
                    removeLight(*chunkModelNode, x, y + 1, z, neightborLight, colorIndex);
                }
                else if (neightborLightBrightness >= lightBrightness)
                {
                    lightPlaceNodes[colorIndex].push({chunkModelNode->getLightIndex(x, y + 1, z), chunkModelNode});
                }
            }
            // ...
        }
    }

    jangolare, 17 Декабря 2016

    Комментарии (25)
  11. C++ / Говнокод #21537

    −22

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    Graphics::Graphics(const Window& window, int virtualWidth, int virtualHeight) :
        sdlRenderer{[&window]{
            SDL_Renderer* const sdlRenderer = ::SDL_CreateRenderer(const_cast<SDL_Window*>(window.getSdlWindow()),
                        -1, SDL_RENDERER_ACCELERATED);
            if (!sdlRenderer)
                throw std::runtime_error{::SDL_GetError()};
    
            return sdlRenderer;
    
        }(), ::SDL_DestroyRenderer}
    {
        if (::SDL_RenderSetLogicalSize(sdlRenderer.get(), virtualWidth, virtualHeight) < 0)
            throw std::runtime_error{::SDL_GetError()};
    }

    jangolare, 22 Октября 2016

    Комментарии (1)