@1upmonster/duel 0.1.8 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/README.md +110 -59
  2. package/dist/admin.d.ts +25 -40
  3. package/dist/admin.js +93 -114
  4. package/dist/encryption.js +1 -2
  5. package/dist/generated/duel/accounts/index.d.ts +10 -0
  6. package/dist/generated/duel/accounts/index.js +11 -0
  7. package/dist/generated/duel/accounts/matchTicket.d.ts +38 -0
  8. package/dist/generated/duel/accounts/matchTicket.js +45 -0
  9. package/dist/generated/duel/accounts/queue.d.ts +42 -0
  10. package/dist/generated/duel/accounts/queue.js +45 -0
  11. package/dist/generated/duel/accounts/tenant.d.ts +41 -0
  12. package/dist/generated/duel/accounts/tenant.js +44 -0
  13. package/dist/generated/duel/errors/duel.d.ts +31 -0
  14. package/dist/generated/duel/errors/duel.js +35 -0
  15. package/dist/generated/duel/errors/index.d.ts +8 -0
  16. package/dist/generated/duel/errors/index.js +9 -0
  17. package/dist/generated/duel/index.d.ts +12 -0
  18. package/dist/generated/duel/index.js +13 -0
  19. package/dist/generated/duel/instructions/cancelTicket.d.ts +45 -0
  20. package/dist/generated/duel/instructions/cancelTicket.js +56 -0
  21. package/dist/generated/duel/instructions/closeTicket.d.ts +45 -0
  22. package/dist/generated/duel/instructions/closeTicket.js +56 -0
  23. package/dist/generated/duel/instructions/commitTickets.d.ts +39 -0
  24. package/dist/generated/duel/instructions/commitTickets.js +50 -0
  25. package/dist/generated/duel/instructions/createTicket.d.ts +48 -0
  26. package/dist/generated/duel/instructions/createTicket.js +63 -0
  27. package/dist/generated/duel/instructions/delegateQueue.d.ts +69 -0
  28. package/dist/generated/duel/instructions/delegateQueue.js +90 -0
  29. package/dist/generated/duel/instructions/delegateTicket.d.ts +69 -0
  30. package/dist/generated/duel/instructions/delegateTicket.js +90 -0
  31. package/dist/generated/duel/instructions/flushMatches.d.ts +37 -0
  32. package/dist/generated/duel/instructions/flushMatches.js +43 -0
  33. package/dist/generated/duel/instructions/index.d.ts +19 -0
  34. package/dist/generated/duel/instructions/index.js +20 -0
  35. package/dist/generated/duel/instructions/initializeQueue.d.ts +48 -0
  36. package/dist/generated/duel/instructions/initializeQueue.js +63 -0
  37. package/dist/generated/duel/instructions/initializeTenant.d.ts +70 -0
  38. package/dist/generated/duel/instructions/initializeTenant.js +67 -0
  39. package/dist/generated/duel/instructions/joinQueue.d.ts +51 -0
  40. package/dist/generated/duel/instructions/joinQueue.js +56 -0
  41. package/dist/generated/duel/instructions/processUndelegation.d.ts +43 -0
  42. package/dist/generated/duel/instructions/processUndelegation.js +49 -0
  43. package/dist/generated/duel/instructions/setupTicketPermission.d.ts +54 -0
  44. package/dist/generated/duel/instructions/setupTicketPermission.js +63 -0
  45. package/dist/generated/duel/programs/duel.d.ts +92 -0
  46. package/dist/generated/duel/programs/duel.js +146 -0
  47. package/dist/generated/duel/programs/index.d.ts +8 -0
  48. package/dist/generated/duel/programs/index.js +9 -0
  49. package/dist/generated/duel/types/accountType.d.ts +25 -0
  50. package/dist/generated/duel/types/accountType.js +25 -0
  51. package/dist/generated/duel/types/index.d.ts +13 -0
  52. package/dist/generated/duel/types/index.js +14 -0
  53. package/dist/generated/duel/types/matchEntry.d.ts +23 -0
  54. package/dist/generated/duel/types/matchEntry.js +18 -0
  55. package/dist/generated/duel/types/matchFound.d.ts +23 -0
  56. package/dist/generated/duel/types/matchFound.js +18 -0
  57. package/dist/generated/duel/types/pendingMatch.d.ts +21 -0
  58. package/dist/generated/duel/types/pendingMatch.js +18 -0
  59. package/dist/generated/duel/types/queueEntry.d.ts +19 -0
  60. package/dist/generated/duel/types/queueEntry.js +18 -0
  61. package/dist/generated/duel/types/ticketStatus.d.ts +40 -0
  62. package/dist/generated/duel/types/ticketStatus.js +25 -0
  63. package/dist/generated/rps-game/accounts/gameSession.d.ts +40 -0
  64. package/dist/generated/rps-game/accounts/gameSession.js +45 -0
  65. package/dist/generated/rps-game/accounts/index.d.ts +9 -0
  66. package/dist/generated/rps-game/accounts/index.js +10 -0
  67. package/dist/generated/rps-game/accounts/playerProfile.d.ts +36 -0
  68. package/dist/generated/rps-game/accounts/playerProfile.js +47 -0
  69. package/dist/generated/rps-game/errors/index.d.ts +8 -0
  70. package/dist/generated/rps-game/errors/index.js +9 -0
  71. package/dist/generated/rps-game/errors/rpsGame.d.ts +25 -0
  72. package/dist/generated/rps-game/errors/rpsGame.js +29 -0
  73. package/dist/generated/rps-game/index.d.ts +12 -0
  74. package/dist/generated/rps-game/index.js +13 -0
  75. package/dist/generated/rps-game/instructions/closePlayer.d.ts +45 -0
  76. package/dist/generated/rps-game/instructions/closePlayer.js +56 -0
  77. package/dist/generated/rps-game/instructions/delegatePda.d.ts +69 -0
  78. package/dist/generated/rps-game/instructions/delegatePda.js +90 -0
  79. package/dist/generated/rps-game/instructions/index.d.ts +16 -0
  80. package/dist/generated/rps-game/instructions/index.js +17 -0
  81. package/dist/generated/rps-game/instructions/initializePlayer.d.ts +48 -0
  82. package/dist/generated/rps-game/instructions/initializePlayer.js +63 -0
  83. package/dist/generated/rps-game/instructions/makeChoice.d.ts +44 -0
  84. package/dist/generated/rps-game/instructions/makeChoice.js +46 -0
  85. package/dist/generated/rps-game/instructions/onMatchFound.d.ts +43 -0
  86. package/dist/generated/rps-game/instructions/onMatchFound.js +45 -0
  87. package/dist/generated/rps-game/instructions/persistResults.d.ts +43 -0
  88. package/dist/generated/rps-game/instructions/persistResults.js +50 -0
  89. package/dist/generated/rps-game/instructions/processUndelegation.d.ts +43 -0
  90. package/dist/generated/rps-game/instructions/processUndelegation.js +49 -0
  91. package/dist/generated/rps-game/instructions/startGame.d.ts +54 -0
  92. package/dist/generated/rps-game/instructions/startGame.js +67 -0
  93. package/dist/generated/rps-game/instructions/startGameWithTicket.d.ts +57 -0
  94. package/dist/generated/rps-game/instructions/startGameWithTicket.js +67 -0
  95. package/dist/generated/rps-game/programs/index.d.ts +8 -0
  96. package/dist/generated/rps-game/programs/index.js +9 -0
  97. package/dist/generated/rps-game/programs/rpsGame.d.ts +78 -0
  98. package/dist/generated/rps-game/programs/rpsGame.js +118 -0
  99. package/dist/generated/rps-game/types/accountType.d.ts +34 -0
  100. package/dist/generated/rps-game/types/accountType.js +25 -0
  101. package/dist/generated/rps-game/types/choice.d.ts +17 -0
  102. package/dist/generated/rps-game/types/choice.js +25 -0
  103. package/dist/generated/rps-game/types/gameResult.d.ts +26 -0
  104. package/dist/generated/rps-game/types/gameResult.js +25 -0
  105. package/dist/generated/rps-game/types/index.d.ts +10 -0
  106. package/dist/generated/rps-game/types/index.js +11 -0
  107. package/dist/index.d.ts +2 -1
  108. package/dist/index.js +3 -2
  109. package/dist/player.d.ts +25 -46
  110. package/dist/player.js +81 -140
  111. package/dist/tee.d.ts +14 -0
  112. package/dist/tee.js +62 -0
  113. package/dist/transaction.d.ts +11 -0
  114. package/dist/transaction.js +50 -0
  115. package/dist/utils.d.ts +4 -4
  116. package/dist/utils.js +23 -8
  117. package/package.json +3 -6
  118. package/src/admin.ts +151 -161
  119. package/src/duel.json +66 -7
  120. package/src/encryption.ts +0 -3
  121. package/src/generated/duel/accounts/index.ts +11 -0
  122. package/src/generated/duel/accounts/matchTicket.ts +77 -0
  123. package/src/generated/duel/accounts/queue.ts +77 -0
  124. package/src/generated/duel/accounts/tenant.ts +76 -0
  125. package/src/generated/duel/errors/duel.ts +46 -0
  126. package/src/generated/duel/errors/index.ts +9 -0
  127. package/src/generated/duel/index.ts +13 -0
  128. package/src/generated/duel/instructions/cancelTicket.ts +100 -0
  129. package/src/generated/duel/instructions/closeTicket.ts +100 -0
  130. package/src/generated/duel/instructions/commitTickets.ts +84 -0
  131. package/src/generated/duel/instructions/createTicket.ts +109 -0
  132. package/src/generated/duel/instructions/delegateQueue.ts +157 -0
  133. package/src/generated/duel/instructions/delegateTicket.ts +157 -0
  134. package/src/generated/duel/instructions/flushMatches.ts +76 -0
  135. package/src/generated/duel/instructions/index.ts +20 -0
  136. package/src/generated/duel/instructions/initializeQueue.ts +109 -0
  137. package/src/generated/duel/instructions/initializeTenant.ts +126 -0
  138. package/src/generated/duel/instructions/joinQueue.ts +106 -0
  139. package/src/generated/duel/instructions/processUndelegation.ts +86 -0
  140. package/src/generated/duel/instructions/setupTicketPermission.ts +115 -0
  141. package/src/generated/duel/programs/duel.ts +108 -0
  142. package/src/generated/duel/programs/index.ts +9 -0
  143. package/src/generated/duel/types/accountType.ts +36 -0
  144. package/src/generated/duel/types/index.ts +14 -0
  145. package/src/generated/duel/types/matchEntry.ts +25 -0
  146. package/src/generated/duel/types/matchFound.ts +25 -0
  147. package/src/generated/duel/types/pendingMatch.ts +25 -0
  148. package/src/generated/duel/types/queueEntry.ts +25 -0
  149. package/src/generated/duel/types/ticketStatus.ts +38 -0
  150. package/src/generated/rps-game/accounts/gameSession.ts +77 -0
  151. package/src/generated/rps-game/accounts/index.ts +10 -0
  152. package/src/generated/rps-game/accounts/playerProfile.ts +80 -0
  153. package/src/generated/rps-game/errors/index.ts +9 -0
  154. package/src/generated/rps-game/errors/rpsGame.ts +40 -0
  155. package/src/generated/rps-game/index.ts +13 -0
  156. package/src/generated/rps-game/instructions/closePlayer.ts +100 -0
  157. package/src/generated/rps-game/instructions/delegatePda.ts +157 -0
  158. package/src/generated/rps-game/instructions/index.ts +17 -0
  159. package/src/generated/rps-game/instructions/initializePlayer.ts +109 -0
  160. package/src/generated/rps-game/instructions/makeChoice.ts +84 -0
  161. package/src/generated/rps-game/instructions/onMatchFound.ts +79 -0
  162. package/src/generated/rps-game/instructions/persistResults.ts +88 -0
  163. package/src/generated/rps-game/instructions/processUndelegation.ts +86 -0
  164. package/src/generated/rps-game/instructions/startGame.ts +118 -0
  165. package/src/generated/rps-game/instructions/startGameWithTicket.ts +121 -0
  166. package/src/generated/rps-game/programs/index.ts +9 -0
  167. package/src/generated/rps-game/programs/rpsGame.ts +95 -0
  168. package/src/generated/rps-game/types/accountType.ts +36 -0
  169. package/src/generated/rps-game/types/choice.ts +25 -0
  170. package/src/generated/rps-game/types/gameResult.ts +37 -0
  171. package/src/generated/rps-game/types/index.ts +11 -0
  172. package/src/index.ts +2 -1
  173. package/src/player.ts +129 -192
  174. package/src/{idl/private_matchmaking.json → rps_game.json} +547 -583
  175. package/src/tee.ts +79 -0
  176. package/src/transaction.ts +90 -0
  177. package/src/utils.ts +35 -20
  178. package/tsconfig.json +2 -2
  179. package/dist/client.d.ts +0 -54
  180. package/dist/client.js +0 -265
  181. package/dist/duel.json +0 -1207
  182. package/dist/private_matchmaking.json +0 -534
  183. package/dist/types.d.ts +0 -635
  184. package/dist/types.js +0 -2
  185. package/src/idl/private_matchmaking.ts +0 -1033
  186. package/src/types.ts +0 -300
@@ -0,0 +1,67 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ import { combineCodec, fixDecoderSize, fixEncoderSize, getAddressDecoder, getAddressEncoder, getBytesDecoder, getBytesEncoder, getProgramDerivedAddress, getStructDecoder, getStructEncoder, getU64Decoder, getU64Encoder, SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, SolanaError, transformEncoder } from '@solana/kit';
9
+ import { getAccountMetaFactory, getAddressFromResolvedInstructionAccount, getNonNullResolvedInstructionInput } from '@solana/program-client-core';
10
+ import { RPS_GAME_PROGRAM_ADDRESS } from '../programs';
11
+ export const START_GAME_DISCRIMINATOR = new Uint8Array([249, 47, 252, 172, 184, 162, 245, 14]);
12
+ export function getStartGameDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode(START_GAME_DISCRIMINATOR); }
13
+ export function getStartGameInstructionDataEncoder() {
14
+ return transformEncoder(getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)], ['gameId', getU64Encoder()], ['opponent', getAddressEncoder()]]), (value) => ({ ...value, discriminator: START_GAME_DISCRIMINATOR }));
15
+ }
16
+ export function getStartGameInstructionDataDecoder() {
17
+ return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)], ['gameId', getU64Decoder()], ['opponent', getAddressDecoder()]]);
18
+ }
19
+ export function getStartGameInstructionDataCodec() {
20
+ return combineCodec(getStartGameInstructionDataEncoder(), getStartGameInstructionDataDecoder());
21
+ }
22
+ export async function getStartGameInstructionAsync(input, config) {
23
+ // Program address.
24
+ const programAddress = config?.programAddress ?? RPS_GAME_PROGRAM_ADDRESS;
25
+ // Original accounts.
26
+ const originalAccounts = { gameSession: { value: input.gameSession ?? null, isWritable: true }, player: { value: input.player ?? null, isWritable: true }, systemProgram: { value: input.systemProgram ?? null, isWritable: false } };
27
+ const accounts = originalAccounts;
28
+ // Original args.
29
+ const args = { ...input, };
30
+ // Resolve default values.
31
+ if (!accounts.gameSession.value) {
32
+ accounts.gameSession.value = await getProgramDerivedAddress({ programAddress, seeds: [getBytesEncoder().encode(new Uint8Array([103, 97, 109, 101, 95, 115, 101, 115, 115, 105, 111, 110, 95, 118, 49])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("player", accounts.player.value)), getAddressEncoder().encode(getNonNullResolvedInstructionInput("opponent", args.opponent)), getU64Encoder().encode(getNonNullResolvedInstructionInput("gameId", args.gameId))] });
33
+ }
34
+ if (!accounts.systemProgram.value) {
35
+ accounts.systemProgram.value = '11111111111111111111111111111111';
36
+ }
37
+ const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
38
+ return Object.freeze({ accounts: [getAccountMeta("gameSession", accounts.gameSession), getAccountMeta("player", accounts.player), getAccountMeta("systemProgram", accounts.systemProgram)], data: getStartGameInstructionDataEncoder().encode(args), programAddress });
39
+ }
40
+ export function getStartGameInstruction(input, config) {
41
+ // Program address.
42
+ const programAddress = config?.programAddress ?? RPS_GAME_PROGRAM_ADDRESS;
43
+ // Original accounts.
44
+ const originalAccounts = { gameSession: { value: input.gameSession ?? null, isWritable: true }, player: { value: input.player ?? null, isWritable: true }, systemProgram: { value: input.systemProgram ?? null, isWritable: false } };
45
+ const accounts = originalAccounts;
46
+ // Original args.
47
+ const args = { ...input, };
48
+ // Resolve default values.
49
+ if (!accounts.systemProgram.value) {
50
+ accounts.systemProgram.value = '11111111111111111111111111111111';
51
+ }
52
+ const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
53
+ return Object.freeze({ accounts: [getAccountMeta("gameSession", accounts.gameSession), getAccountMeta("player", accounts.player), getAccountMeta("systemProgram", accounts.systemProgram)], data: getStartGameInstructionDataEncoder().encode(args), programAddress });
54
+ }
55
+ export function parseStartGameInstruction(instruction) {
56
+ if (instruction.accounts.length < 3) {
57
+ throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { actualAccountMetas: instruction.accounts.length, expectedAccountMetas: 3 });
58
+ }
59
+ let accountIndex = 0;
60
+ const getNextAccount = () => {
61
+ const accountMeta = instruction.accounts[accountIndex];
62
+ accountIndex += 1;
63
+ return accountMeta;
64
+ };
65
+ return { programAddress: instruction.programAddress, accounts: { gameSession: getNextAccount(), player: getNextAccount(), systemProgram: getNextAccount() }, data: getStartGameInstructionDataDecoder().decode(instruction.data) };
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRHYW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dlbmVyYXRlZC9ycHMtZ2FtZS9pbnN0cnVjdGlvbnMvc3RhcnRHYW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUseURBQXlELEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFnVSxNQUFNLGFBQWEsQ0FBQztBQUN2b0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHdDQUF3QyxFQUFFLGtDQUFrQyxFQUFtQyxNQUFNLDZCQUE2QixDQUFDO0FBQ25MLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRS9GLE1BQU0sVUFBVSw4QkFBOEIsS0FBSyxPQUFPLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFTbEksTUFBTSxVQUFVLGtDQUFrQztJQUM5QyxPQUFPLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxp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VE9HRU5FUkFURUQgdXNpbmcgdGhlIENvZGFtYSBsaWJyYXJ5LlxuICogUGxlYXNlIERPIE5PVCBFRElUIFRISVMgRklMRSwgaW5zdGVhZCB1c2UgdmlzaXRvcnNcbiAqIHRvIGFkZCBmZWF0dXJlcywgdGhlbiByZXJ1biBDb2RhbWEgdG8gdXBkYXRlIGl0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NvZGFtYS1pZGwvY29kYW1hXG4gKi9cblxuaW1wb3J0IHsgY29tYmluZUNvZGVjLCBmaXhEZWNvZGVyU2l6ZSwgZml4RW5jb2RlclNpemUsIGdldEFkZHJlc3NEZWNvZGVyLCBnZXRBZGRyZXNzRW5jb2RlciwgZ2V0Qnl0ZXNEZWNvZGVyLCBnZXRCeXRlc0VuY29kZXIsIGdldFByb2dyYW1EZXJpdmVkQWRkcmVzcywgZ2V0U3RydWN0RGVjb2RlciwgZ2V0U3RydWN0RW5jb2RlciwgZ2V0VTY0RGVjb2RlciwgZ2V0VTY0RW5jb2RlciwgU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0lOU1VGRklDSUVOVF9BQ0NPVU5UX01FVEFTLCBTb2xhbmFFcnJvciwgdHJhbnNmb3JtRW5jb2RlciwgdHlwZSBBY2NvdW50TWV0YSwgdHlwZSBBY2NvdW50U2lnbmVyTWV0YSwgdHlwZSBBZGRyZXNzLCB0eXBlIEZpeGVkU2l6ZUNvZGVjLCB0eXBlIEZpeGVkU2l6ZURlY29kZXIsIHR5cGUgRml4ZWRTaXplRW5jb2RlciwgdHlwZSBJbnN0cnVjdGlvbiwgdHlwZSBJbnN0cnVjdGlvbldpdGhBY2NvdW50cywgdHlwZSBJbnN0cnVjdGlvbldpdGhEYXRhLCB0eXBlIFJlYWRvbmx5QWNjb3VudCwgdHlwZSBSZWFkb25seVVpbnQ4QXJyYXksIHR5cGUgVHJhbnNhY3Rpb25TaWduZXIsIHR5cGUgV3JpdGFibGVBY2NvdW50LCB0eXBlIFdyaXRhYmxlU2lnbmVyQWNjb3VudCB9IGZyb20gJ0Bzb2xhbmEva2l0JztcbmltcG9ydCB7IGdldEFjY291bnRNZXRhRmFjdG9yeSwgZ2V0QWRkcmVzc0Zyb21SZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudCwgZ2V0Tm9uTnVsbFJlc29sdmVkSW5zdHJ1Y3Rpb25JbnB1dCwgdHlwZSBSZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudCB9IGZyb20gJ0Bzb2xhbmEvcHJvZ3JhbS1jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBSUFNfR0FNRV9QUk9HUkFNX0FERFJFU1MgfSBmcm9tICcuLi9wcm9ncmFtcyc7XG5cbmV4cG9ydCBjb25zdCBTVEFSVF9HQU1FX0RJU0NSSU1JTkFUT1IgPSBuZXcgVWludDhBcnJheShbMjQ5LCA0NywgMjUyLCAxNzIsIDE4NCwgMTYyLCAyNDUsIDE0XSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFydEdhbWVEaXNjcmltaW5hdG9yQnl0ZXMoKSB7IHJldHVybiBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKFNUQVJUX0dBTUVfRElTQ1JJTUlOQVRPUik7IH1cblxuZXhwb3J0IHR5cGUgU3RhcnRHYW1lSW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSB0eXBlb2YgUlBTX0dBTUVfUFJPR1JBTV9BRERSRVNTLCBUQWNjb3VudEdhbWVTZXNzaW9uIGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnRQbGF5ZXIgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gXCIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMVwiLCBUUmVtYWluaW5nQWNjb3VudHMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YTxzdHJpbmc+W10gPSBbXT4gPVxuSW5zdHJ1Y3Rpb248VFByb2dyYW0+ICYgSW5zdHJ1Y3Rpb25XaXRoRGF0YTxSZWFkb25seVVpbnQ4QXJyYXk+ICYgSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHM8W1RBY2NvdW50R2FtZVNlc3Npb24gZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZUFjY291bnQ8VEFjY291bnRHYW1lU2Vzc2lvbj4gOiBUQWNjb3VudEdhbWVTZXNzaW9uLCBUQWNjb3VudFBsYXllciBleHRlbmRzIHN0cmluZyA/IFdyaXRhYmxlU2lnbmVyQWNjb3VudDxUQWNjb3VudFBsYXllcj4gJiBBY2NvdW50U2lnbmVyTWV0YTxUQWNjb3VudFBsYXllcj4gOiBUQWNjb3VudFBsYXllciwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nID8gUmVhZG9ubHlBY2NvdW50PFRBY2NvdW50U3lzdGVtUHJvZ3JhbT4gOiBUQWNjb3VudFN5c3RlbVByb2dyYW0sIC4uLlRSZW1haW5pbmdBY2NvdW50c10+O1xuXG5leHBvcnQgdHlwZSBTdGFydEdhbWVJbnN0cnVjdGlvbkRhdGEgPSB7IGRpc2NyaW1pbmF0b3I6IFJlYWRvbmx5VWludDhBcnJheTsgZ2FtZUlkOiBiaWdpbnQ7IG9wcG9uZW50OiBBZGRyZXNzOyAgfTtcblxuZXhwb3J0IHR5cGUgU3RhcnRHYW1lSW5zdHJ1Y3Rpb25EYXRhQXJncyA9IHsgZ2FtZUlkOiBudW1iZXIgfCBiaWdpbnQ7IG9wcG9uZW50OiBBZGRyZXNzOyAgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXJ0R2FtZUluc3RydWN0aW9uRGF0YUVuY29kZXIoKTogRml4ZWRTaXplRW5jb2RlcjxTdGFydEdhbWVJbnN0cnVjdGlvbkRhdGFBcmdzPiB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybUVuY29kZXIoZ2V0U3RydWN0RW5jb2RlcihbWydkaXNjcmltaW5hdG9yJywgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpXSwgWydnYW1lSWQnLCBnZXRVNjRFbmNvZGVyKCldLCBbJ29wcG9uZW50JywgZ2V0QWRkcmVzc0VuY29kZXIoKV1dKSwgKHZhbHVlKSA9PiAoeyAuLi52YWx1ZSwgZGlzY3JpbWluYXRvcjogU1RBUlRfR0FNRV9ESVNDUklNSU5BVE9SIH0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXJ0R2FtZUluc3RydWN0aW9uRGF0YURlY29kZXIoKTogRml4ZWRTaXplRGVjb2RlcjxTdGFydEdhbWVJbnN0cnVjdGlvbkRhdGE+IHtcbiAgICByZXR1cm4gZ2V0U3RydWN0RGVjb2RlcihbWydkaXNjcmltaW5hdG9yJywgZml4RGVjb2RlclNpemUoZ2V0Qnl0ZXNEZWNvZGVyKCksIDgpXSwgWydnYW1lSWQnLCBnZXRVNjREZWNvZGVyKCldLCBbJ29wcG9uZW50JywgZ2V0QWRkcmVzc0RlY29kZXIoKV1dKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXJ0R2FtZUluc3RydWN0aW9uRGF0YUNvZGVjKCk6IEZpeGVkU2l6ZUNvZGVjPFN0YXJ0R2FtZUluc3RydWN0aW9uRGF0YUFyZ3MsIFN0YXJ0R2FtZUluc3RydWN0aW9uRGF0YT4ge1xuICAgIHJldHVybiBjb21iaW5lQ29kZWMoZ2V0U3RhcnRHYW1lSW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpLCBnZXRTdGFydEdhbWVJbnN0cnVjdGlvbkRhdGFEZWNvZGVyKCkpO1xufVxuXG5leHBvcnQgdHlwZSBTdGFydEdhbWVBc3luY0lucHV0PFRBY2NvdW50R2FtZVNlc3Npb24gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGxheWVyIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID0gIHtcbiAgZ2FtZVNlc3Npb24/OiBBZGRyZXNzPFRBY2NvdW50R2FtZVNlc3Npb24+O1xucGxheWVyOiBUcmFuc2FjdGlvblNpZ25lcjxUQWNjb3VudFBsYXllcj47XG5zeXN0ZW1Qcm9ncmFtPzogQWRkcmVzczxUQWNjb3VudFN5c3RlbVByb2dyYW0+O1xuZ2FtZUlkOiBTdGFydEdhbWVJbnN0cnVjdGlvbkRhdGFBcmdzW1wiZ2FtZUlkXCJdO1xub3Bwb25lbnQ6IFN0YXJ0R2FtZUluc3RydWN0aW9uRGF0YUFyZ3NbXCJvcHBvbmVudFwiXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFN0YXJ0R2FtZUluc3RydWN0aW9uQXN5bmM8VEFjY291bnRHYW1lU2Vzc2lvbiBleHRlbmRzIHN0cmluZywgVEFjY291bnRQbGF5ZXIgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVFByb2dyYW1BZGRyZXNzIGV4dGVuZHMgQWRkcmVzcyA9IHR5cGVvZiBSUFNfR0FNRV9QUk9HUkFNX0FERFJFU1M+KGlucHV0OiBTdGFydEdhbWVBc3luY0lucHV0PFRBY2NvdW50R2FtZVNlc3Npb24sIFRBY2NvdW50UGxheWVyLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+LCBjb25maWc/OiB7IHByb2dyYW1BZGRyZXNzPzogVFByb2dyYW1BZGRyZXNzIH0gKTogUHJvbWlzZTxTdGFydEdhbWVJbnN0cnVjdGlvbjxUUHJvZ3JhbUFkZHJlc3MsIFRBY2NvdW50R2FtZVNlc3Npb24sIFRBY2NvdW50UGxheWVyLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+PiB7XG4gIC8vIFByb2dyYW0gYWRkcmVzcy5cbmNvbnN0IHByb2dyYW1BZGRyZXNzID0gY29uZmlnPy5wcm9ncmFtQWRkcmVzcyA/PyBSUFNfR0FNRV9QUk9HUkFNX0FERFJFU1M7XG5cbiAvLyBPcmlnaW5hbCBhY2NvdW50cy5cbmNvbnN0IG9yaWdpbmFsQWNjb3VudHMgPSB7IGdhbWVTZXNzaW9uOiB7IHZhbHVlOiBpbnB1dC5nYW1lU2Vzc2lvbiA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHBsYXllcjogeyB2YWx1ZTogaW5wdXQucGxheWVyID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgc3lzdGVtUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQuc3lzdGVtUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9IH1cbmNvbnN0IGFjY291bnRzID0gb3JpZ2luYWxBY2NvdW50cyBhcyBSZWNvcmQ8a2V5b2YgdHlwZW9mIG9yaWdpbmFsQWNjb3VudHMsIFJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50PjtcblxuXG4vLyBPcmlnaW5hbCBhcmdzLlxuY29uc3QgYXJncyA9IHsgLi4uaW5wdXQsICB9O1xuXG5cbi8vIFJlc29sdmUgZGVmYXVsdCB2YWx1ZXMuXG5pZiAoIWFjY291bnRzLmdhbWVTZXNzaW9uLnZhbHVlKSB7XG5hY2NvdW50cy5nYW1lU2Vzc2lvbi52YWx1ZSA9IGF3YWl0IGdldFByb2dyYW1EZXJpdmVkQWRkcmVzcyh7IHByb2dyYW1BZGRyZXNzLCBzZWVkczogW2dldEJ5dGVzRW5jb2RlcigpLmVuY29kZShuZXcgVWludDhBcnJheShbMTAzLCA5NywgMTA5LCAxMDEsIDk1LCAxMTUsIDEwMSwgMTE1LCAxMTUsIDEwNSwgMTExLCAxMTAsIDk1LCAxMTgsIDQ5XSkpLCBnZXRBZGRyZXNzRW5jb2RlcigpLmVuY29kZShnZXRBZGRyZXNzRnJvbVJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50KFwicGxheWVyXCIsIGFjY291bnRzLnBsYXllci52YWx1ZSkpLCBnZXRBZGRyZXNzRW5jb2RlcigpLmVuY29kZShnZXROb25OdWxsUmVzb2x2ZWRJbnN0cnVjdGlvbklucHV0KFwib3Bwb25lbnRcIiwgYXJncy5vcHBvbmVudCkpLCBnZXRVNjRFbmNvZGVyKCkuZW5jb2RlKGdldE5vbk51bGxSZXNvbHZlZEluc3RydWN0aW9uSW5wdXQoXCJnYW1lSWRcIiwgYXJncy5nYW1lSWQpKV0gfSk7XG59XG5pZiAoIWFjY291bnRzLnN5c3RlbVByb2dyYW0udmFsdWUpIHtcbmFjY291bnRzLnN5c3RlbVByb2dyYW0udmFsdWUgPSAnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnIGFzIEFkZHJlc3M8JzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJz47XG59XG5cbmNvbnN0IGdldEFjY291bnRNZXRhID0gZ2V0QWNjb3VudE1ldGFGYWN0b3J5KHByb2dyYW1BZGRyZXNzLCAncHJvZ3JhbUlkJyk7XG5yZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IGFjY291bnRzOiBbZ2V0QWNjb3VudE1ldGEoXCJnYW1lU2Vzc2lvblwiLCBhY2NvdW50cy5nYW1lU2Vzc2lvbiksIGdldEFjY291bnRNZXRhKFwicGxheWVyXCIsIGFjY291bnRzLnBsYXllciksIGdldEFjY291bnRNZXRhKFwic3lzdGVtUHJvZ3JhbVwiLCBhY2NvdW50cy5zeXN0ZW1Qcm9ncmFtKV0sIGRhdGE6IGdldFN0YXJ0R2FtZUluc3RydWN0aW9uRGF0YUVuY29kZXIoKS5lbmNvZGUoYXJncyBhcyBTdGFydEdhbWVJbnN0cnVjdGlvbkRhdGFBcmdzKSwgcHJvZ3JhbUFkZHJlc3MgfSBhcyBTdGFydEdhbWVJbnN0cnVjdGlvbjxUUHJvZ3JhbUFkZHJlc3MsIFRBY2NvdW50R2FtZVNlc3Npb24sIFRBY2NvdW50UGxheWVyLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+KTtcbn1cblxuZXhwb3J0IHR5cGUgU3RhcnRHYW1lSW5wdXQ8VEFjY291bnRHYW1lU2Vzc2lvbiBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRQbGF5ZXIgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSAge1xuICBnYW1lU2Vzc2lvbjogQWRkcmVzczxUQWNjb3VudEdhbWVTZXNzaW9uPjtcbnBsYXllcjogVHJhbnNhY3Rpb25TaWduZXI8VEFjY291bnRQbGF5ZXI+O1xuc3lzdGVtUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRTeXN0ZW1Qcm9ncmFtPjtcbmdhbWVJZDogU3RhcnRHYW1lSW5zdHJ1Y3Rpb25EYXRhQXJnc1tcImdhbWVJZFwiXTtcbm9wcG9uZW50OiBTdGFydEdhbWVJbnN0cnVjdGlvbkRhdGFBcmdzW1wib3Bwb25lbnRcIl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFydEdhbWVJbnN0cnVjdGlvbjxUQWNjb3VudEdhbWVTZXNzaW9uIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBsYXllciBleHRlbmRzIHN0cmluZywgVEFjY291bnRTeXN0ZW1Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nLCBUUHJvZ3JhbUFkZHJlc3MgZXh0ZW5kcyBBZGRyZXNzID0gdHlwZW9mIFJQU19HQU1FX1BST0dSQU1fQUREUkVTUz4oaW5wdXQ6IFN0YXJ0R2FtZUlucHV0PFRBY2NvdW50R2FtZVNlc3Npb24sIFRBY2NvdW50UGxheWVyLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+LCBjb25maWc/OiB7IHByb2dyYW1BZGRyZXNzPzogVFByb2dyYW1BZGRyZXNzIH0gKTogU3RhcnRHYW1lSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudEdhbWVTZXNzaW9uLCBUQWNjb3VudFBsYXllciwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPiB7XG4gIC8vIFByb2dyYW0gYWRkcmVzcy5cbmNvbnN0IHByb2dyYW1BZGRyZXNzID0gY29uZmlnPy5wcm9ncmFtQWRkcmVzcyA/PyBSUFNfR0FNRV9QUk9HUkFNX0FERFJFU1M7XG5cbiAvLyBPcmlnaW5hbCBhY2NvdW50cy5cbmNvbnN0IG9yaWdpbmFsQWNjb3VudHMgPSB7IGdhbWVTZXNzaW9uOiB7IHZhbHVlOiBpbnB1dC5nYW1lU2Vzc2lvbiA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHBsYXllcjogeyB2YWx1ZTogaW5wdXQucGxheWVyID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgc3lzdGVtUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQuc3lzdGVtUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9IH1cbmNvbnN0IGFjY291bnRzID0gb3JpZ2luYWxBY2NvdW50cyBhcyBSZWNvcmQ8a2V5b2YgdHlwZW9mIG9yaWdpbmFsQWNjb3VudHMsIFJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50PjtcblxuXG4vLyBPcmlnaW5hbCBhcmdzLlxuY29uc3QgYXJncyA9IHsgLi4uaW5wdXQsICB9O1xuXG5cbi8vIFJlc29sdmUgZGVmYXVsdCB2YWx1ZXMuXG5pZiAoIWFjY291bnRzLnN5c3RlbVByb2dyYW0udmFsdWUpIHtcbmFjY291bnRzLnN5c3RlbVByb2dyYW0udmFsdWUgPSAnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnIGFzIEFkZHJlc3M8JzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJz47XG59XG5cbmNvbnN0IGdldEFjY291bnRNZXRhID0gZ2V0QWNjb3VudE1ldGFGYWN0b3J5KHByb2dyYW1BZGRyZXNzLCAncHJvZ3JhbUlkJyk7XG5yZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IGFjY291bnRzOiBbZ2V0QWNjb3VudE1ldGEoXCJnYW1lU2Vzc2lvblwiLCBhY2NvdW50cy5nYW1lU2Vzc2lvbiksIGdldEFjY291bnRNZXRhKFwicGxheWVyXCIsIGFjY291bnRzLnBsYXllciksIGdldEFjY291bnRNZXRhKFwic3lzdGVtUHJvZ3JhbVwiLCBhY2NvdW50cy5zeXN0ZW1Qcm9ncmFtKV0sIGRhdGE6IGdldFN0YXJ0R2FtZUluc3RydWN0aW9uRGF0YUVuY29kZXIoKS5lbmNvZGUoYXJncyBhcyBTdGFydEdhbWVJbnN0cnVjdGlvbkRhdGFBcmdzKSwgcHJvZ3JhbUFkZHJlc3MgfSBhcyBTdGFydEdhbWVJbnN0cnVjdGlvbjxUUHJvZ3JhbUFkZHJlc3MsIFRBY2NvdW50R2FtZVNlc3Npb24sIFRBY2NvdW50UGxheWVyLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+KTtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkU3RhcnRHYW1lSW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSB0eXBlb2YgUlBTX0dBTUVfUFJPR1JBTV9BRERSRVNTLCBUQWNjb3VudE1ldGFzIGV4dGVuZHMgcmVhZG9ubHkgQWNjb3VudE1ldGFbXSA9IHJlYWRvbmx5IEFjY291bnRNZXRhW10+ID0geyBwcm9ncmFtQWRkcmVzczogQWRkcmVzczxUUHJvZ3JhbT47XG5hY2NvdW50czoge1xuZ2FtZVNlc3Npb246IFRBY2NvdW50TWV0YXNbMF07XG5wbGF5ZXI6IFRBY2NvdW50TWV0YXNbMV07XG5zeXN0ZW1Qcm9ncmFtOiBUQWNjb3VudE1ldGFzWzJdO1xufTtcbmRhdGE6IFN0YXJ0R2FtZUluc3RydWN0aW9uRGF0YTsgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RhcnRHYW1lSW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50TWV0YXMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YVtdPihpbnN0cnVjdGlvbjogSW5zdHJ1Y3Rpb248VFByb2dyYW0+ICYgSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHM8VEFjY291bnRNZXRhcz4gJiBJbnN0cnVjdGlvbldpdGhEYXRhPFJlYWRvbmx5VWludDhBcnJheT4pOiBQYXJzZWRTdGFydEdhbWVJbnN0cnVjdGlvbjxUUHJvZ3JhbSwgVEFjY291bnRNZXRhcz4ge1xuICBpZiAoaW5zdHJ1Y3Rpb24uYWNjb3VudHMubGVuZ3RoIDwgMykge1xuICB0aHJvdyBuZXcgU29sYW5hRXJyb3IoU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0lOU1VGRklDSUVOVF9BQ0NPVU5UX01FVEFTLCB7IGFjdHVhbEFjY291bnRNZXRhczogaW5zdHJ1Y3Rpb24uYWNjb3VudHMubGVuZ3RoLCBleHBlY3RlZEFjY291bnRNZXRhczogMyB9KTtcbn1cbmxldCBhY2NvdW50SW5kZXggPSAwO1xuY29uc3QgZ2V0TmV4dEFjY291bnQgPSAoKSA9PiB7XG4gIGNvbnN0IGFjY291bnRNZXRhID0gKGluc3RydWN0aW9uLmFjY291bnRzIGFzIFRBY2NvdW50TWV0YXMpW2FjY291bnRJbmRleF0hO1xuICBhY2NvdW50SW5kZXggKz0gMTtcbiAgcmV0dXJuIGFjY291bnRNZXRhO1xufVxuICByZXR1cm4geyBwcm9ncmFtQWRkcmVzczogaW5zdHJ1Y3Rpb24ucHJvZ3JhbUFkZHJlc3MsIGFjY291bnRzOiB7IGdhbWVTZXNzaW9uOiBnZXROZXh0QWNjb3VudCgpLCBwbGF5ZXI6IGdldE5leHRBY2NvdW50KCksIHN5c3RlbVByb2dyYW06IGdldE5leHRBY2NvdW50KCkgfSwgZGF0YTogZ2V0U3RhcnRHYW1lSW5zdHJ1Y3Rpb25EYXRhRGVjb2RlcigpLmRlY29kZShpbnN0cnVjdGlvbi5kYXRhKSB9O1xufSJdfQ==
@@ -0,0 +1,57 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ import { type AccountMeta, type AccountSignerMeta, type Address, type FixedSizeCodec, type FixedSizeDecoder, type FixedSizeEncoder, type Instruction, type InstructionWithAccounts, type InstructionWithData, type ReadonlyAccount, type ReadonlyUint8Array, type TransactionSigner, type WritableAccount, type WritableSignerAccount } from '@solana/kit';
9
+ import { RPS_GAME_PROGRAM_ADDRESS } from '../programs';
10
+ export declare const START_GAME_WITH_TICKET_DISCRIMINATOR: Uint8Array<ArrayBuffer>;
11
+ export declare function getStartGameWithTicketDiscriminatorBytes(): ReadonlyUint8Array<ArrayBuffer>;
12
+ export type StartGameWithTicketInstruction<TProgram extends string = typeof RPS_GAME_PROGRAM_ADDRESS, TAccountGameSession extends string | AccountMeta<string> = string, TAccountPlayer extends string | AccountMeta<string> = string, TAccountMatchTicket extends string | AccountMeta<string> = string, TAccountSystemProgram extends string | AccountMeta<string> = "11111111111111111111111111111111", TRemainingAccounts extends readonly AccountMeta<string>[] = []> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<[TAccountGameSession extends string ? WritableAccount<TAccountGameSession> : TAccountGameSession, TAccountPlayer extends string ? WritableSignerAccount<TAccountPlayer> & AccountSignerMeta<TAccountPlayer> : TAccountPlayer, TAccountMatchTicket extends string ? ReadonlyAccount<TAccountMatchTicket> : TAccountMatchTicket, TAccountSystemProgram extends string ? ReadonlyAccount<TAccountSystemProgram> : TAccountSystemProgram, ...TRemainingAccounts]>;
13
+ export type StartGameWithTicketInstructionData = {
14
+ discriminator: ReadonlyUint8Array;
15
+ gameId: bigint;
16
+ opponent: Address;
17
+ };
18
+ export type StartGameWithTicketInstructionDataArgs = {
19
+ gameId: number | bigint;
20
+ opponent: Address;
21
+ };
22
+ export declare function getStartGameWithTicketInstructionDataEncoder(): FixedSizeEncoder<StartGameWithTicketInstructionDataArgs>;
23
+ export declare function getStartGameWithTicketInstructionDataDecoder(): FixedSizeDecoder<StartGameWithTicketInstructionData>;
24
+ export declare function getStartGameWithTicketInstructionDataCodec(): FixedSizeCodec<StartGameWithTicketInstructionDataArgs, StartGameWithTicketInstructionData>;
25
+ export type StartGameWithTicketAsyncInput<TAccountGameSession extends string = string, TAccountPlayer extends string = string, TAccountMatchTicket extends string = string, TAccountSystemProgram extends string = string> = {
26
+ gameSession?: Address<TAccountGameSession>;
27
+ player: TransactionSigner<TAccountPlayer>;
28
+ matchTicket: Address<TAccountMatchTicket>;
29
+ systemProgram?: Address<TAccountSystemProgram>;
30
+ gameId: StartGameWithTicketInstructionDataArgs["gameId"];
31
+ opponent: StartGameWithTicketInstructionDataArgs["opponent"];
32
+ };
33
+ export declare function getStartGameWithTicketInstructionAsync<TAccountGameSession extends string, TAccountPlayer extends string, TAccountMatchTicket extends string, TAccountSystemProgram extends string, TProgramAddress extends Address = typeof RPS_GAME_PROGRAM_ADDRESS>(input: StartGameWithTicketAsyncInput<TAccountGameSession, TAccountPlayer, TAccountMatchTicket, TAccountSystemProgram>, config?: {
34
+ programAddress?: TProgramAddress;
35
+ }): Promise<StartGameWithTicketInstruction<TProgramAddress, TAccountGameSession, TAccountPlayer, TAccountMatchTicket, TAccountSystemProgram>>;
36
+ export type StartGameWithTicketInput<TAccountGameSession extends string = string, TAccountPlayer extends string = string, TAccountMatchTicket extends string = string, TAccountSystemProgram extends string = string> = {
37
+ gameSession: Address<TAccountGameSession>;
38
+ player: TransactionSigner<TAccountPlayer>;
39
+ matchTicket: Address<TAccountMatchTicket>;
40
+ systemProgram?: Address<TAccountSystemProgram>;
41
+ gameId: StartGameWithTicketInstructionDataArgs["gameId"];
42
+ opponent: StartGameWithTicketInstructionDataArgs["opponent"];
43
+ };
44
+ export declare function getStartGameWithTicketInstruction<TAccountGameSession extends string, TAccountPlayer extends string, TAccountMatchTicket extends string, TAccountSystemProgram extends string, TProgramAddress extends Address = typeof RPS_GAME_PROGRAM_ADDRESS>(input: StartGameWithTicketInput<TAccountGameSession, TAccountPlayer, TAccountMatchTicket, TAccountSystemProgram>, config?: {
45
+ programAddress?: TProgramAddress;
46
+ }): StartGameWithTicketInstruction<TProgramAddress, TAccountGameSession, TAccountPlayer, TAccountMatchTicket, TAccountSystemProgram>;
47
+ export type ParsedStartGameWithTicketInstruction<TProgram extends string = typeof RPS_GAME_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[]> = {
48
+ programAddress: Address<TProgram>;
49
+ accounts: {
50
+ gameSession: TAccountMetas[0];
51
+ player: TAccountMetas[1];
52
+ matchTicket: TAccountMetas[2];
53
+ systemProgram: TAccountMetas[3];
54
+ };
55
+ data: StartGameWithTicketInstructionData;
56
+ };
57
+ export declare function parseStartGameWithTicketInstruction<TProgram extends string, TAccountMetas extends readonly AccountMeta[]>(instruction: Instruction<TProgram> & InstructionWithAccounts<TAccountMetas> & InstructionWithData<ReadonlyUint8Array>): ParsedStartGameWithTicketInstruction<TProgram, TAccountMetas>;
@@ -0,0 +1,67 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ import { combineCodec, fixDecoderSize, fixEncoderSize, getAddressDecoder, getAddressEncoder, getBytesDecoder, getBytesEncoder, getProgramDerivedAddress, getStructDecoder, getStructEncoder, getU64Decoder, getU64Encoder, SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, SolanaError, transformEncoder } from '@solana/kit';
9
+ import { getAccountMetaFactory, getAddressFromResolvedInstructionAccount, getNonNullResolvedInstructionInput } from '@solana/program-client-core';
10
+ import { RPS_GAME_PROGRAM_ADDRESS } from '../programs';
11
+ export const START_GAME_WITH_TICKET_DISCRIMINATOR = new Uint8Array([2, 250, 253, 202, 51, 138, 80, 20]);
12
+ export function getStartGameWithTicketDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode(START_GAME_WITH_TICKET_DISCRIMINATOR); }
13
+ export function getStartGameWithTicketInstructionDataEncoder() {
14
+ return transformEncoder(getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)], ['gameId', getU64Encoder()], ['opponent', getAddressEncoder()]]), (value) => ({ ...value, discriminator: START_GAME_WITH_TICKET_DISCRIMINATOR }));
15
+ }
16
+ export function getStartGameWithTicketInstructionDataDecoder() {
17
+ return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)], ['gameId', getU64Decoder()], ['opponent', getAddressDecoder()]]);
18
+ }
19
+ export function getStartGameWithTicketInstructionDataCodec() {
20
+ return combineCodec(getStartGameWithTicketInstructionDataEncoder(), getStartGameWithTicketInstructionDataDecoder());
21
+ }
22
+ export async function getStartGameWithTicketInstructionAsync(input, config) {
23
+ // Program address.
24
+ const programAddress = config?.programAddress ?? RPS_GAME_PROGRAM_ADDRESS;
25
+ // Original accounts.
26
+ const originalAccounts = { gameSession: { value: input.gameSession ?? null, isWritable: true }, player: { value: input.player ?? null, isWritable: true }, matchTicket: { value: input.matchTicket ?? null, isWritable: false }, systemProgram: { value: input.systemProgram ?? null, isWritable: false } };
27
+ const accounts = originalAccounts;
28
+ // Original args.
29
+ const args = { ...input, };
30
+ // Resolve default values.
31
+ if (!accounts.gameSession.value) {
32
+ accounts.gameSession.value = await getProgramDerivedAddress({ programAddress, seeds: [getBytesEncoder().encode(new Uint8Array([103, 97, 109, 101, 95, 115, 101, 115, 115, 105, 111, 110, 95, 118, 49])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("player", accounts.player.value)), getAddressEncoder().encode(getNonNullResolvedInstructionInput("opponent", args.opponent)), getU64Encoder().encode(getNonNullResolvedInstructionInput("gameId", args.gameId))] });
33
+ }
34
+ if (!accounts.systemProgram.value) {
35
+ accounts.systemProgram.value = '11111111111111111111111111111111';
36
+ }
37
+ const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
38
+ return Object.freeze({ accounts: [getAccountMeta("gameSession", accounts.gameSession), getAccountMeta("player", accounts.player), getAccountMeta("matchTicket", accounts.matchTicket), getAccountMeta("systemProgram", accounts.systemProgram)], data: getStartGameWithTicketInstructionDataEncoder().encode(args), programAddress });
39
+ }
40
+ export function getStartGameWithTicketInstruction(input, config) {
41
+ // Program address.
42
+ const programAddress = config?.programAddress ?? RPS_GAME_PROGRAM_ADDRESS;
43
+ // Original accounts.
44
+ const originalAccounts = { gameSession: { value: input.gameSession ?? null, isWritable: true }, player: { value: input.player ?? null, isWritable: true }, matchTicket: { value: input.matchTicket ?? null, isWritable: false }, systemProgram: { value: input.systemProgram ?? null, isWritable: false } };
45
+ const accounts = originalAccounts;
46
+ // Original args.
47
+ const args = { ...input, };
48
+ // Resolve default values.
49
+ if (!accounts.systemProgram.value) {
50
+ accounts.systemProgram.value = '11111111111111111111111111111111';
51
+ }
52
+ const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
53
+ return Object.freeze({ accounts: [getAccountMeta("gameSession", accounts.gameSession), getAccountMeta("player", accounts.player), getAccountMeta("matchTicket", accounts.matchTicket), getAccountMeta("systemProgram", accounts.systemProgram)], data: getStartGameWithTicketInstructionDataEncoder().encode(args), programAddress });
54
+ }
55
+ export function parseStartGameWithTicketInstruction(instruction) {
56
+ if (instruction.accounts.length < 4) {
57
+ throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { actualAccountMetas: instruction.accounts.length, expectedAccountMetas: 4 });
58
+ }
59
+ let accountIndex = 0;
60
+ const getNextAccount = () => {
61
+ const accountMeta = instruction.accounts[accountIndex];
62
+ accountIndex += 1;
63
+ return accountMeta;
64
+ };
65
+ return { programAddress: instruction.programAddress, accounts: { gameSession: getNextAccount(), player: getNextAccount(), matchTicket: getNextAccount(), systemProgram: getNextAccount() }, data: getStartGameWithTicketInstructionDataDecoder().decode(instruction.data) };
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRHYW1lV2l0aFRpY2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvcnBzLWdhbWUvaW5zdHJ1Y3Rpb25zL3N0YXJ0R2FtZVdpdGhUaWNrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsd0JBQXdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSx5REFBeUQsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQWdVLE1BQU0sYUFBYSxDQUFDO0FBQ3ZvQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsd0NBQXdDLEVBQUUsa0NBQWtDLEVBQW1DLE1BQU0sNkJBQTZCLENBQUM7QUFDbkwsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLG9DQUFvQyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFeEcsTUFBTSxVQUFVLHdDQUF3QyxLQUFLLE9BQU8sY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQVN4SixNQUFNLFVBQVUsNENBQTRDO0lBQ3hELE9BQU8sZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsQ0FBQyxF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QUMsQ0FBQTtJQUNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsNENBQTRDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDOVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBjb2RlIHdhcyBBVVRPR0VORVJBVEVEIHVzaW5nIHRoZSBDb2RhbWEgbGlicmFyeS5cbiAqIFBsZWFzZSBETyBOT1QgRURJVCBUSElTIEZJTEUsIGluc3RlYWQgdXNlIHZpc2l0b3JzXG4gKiB0byBhZGQgZmVhdHVyZXMsIHRoZW4gcmVydW4gQ29kYW1hIHRvIHVwZGF0ZSBpdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RhbWEtaWRsL2NvZGFtYVxuICovXG5cbmltcG9ydCB7IGNvbWJpbmVDb2RlYywgZml4RGVjb2RlclNpemUsIGZpeEVuY29kZXJTaXplLCBnZXRBZGRyZXNzRGVjb2RlciwgZ2V0QWRkcmVzc0VuY29kZXIsIGdldEJ5dGVzRGVjb2RlciwgZ2V0Qnl0ZXNFbmNvZGVyLCBnZXRQcm9ncmFtRGVyaXZlZEFkZHJlc3MsIGdldFN0cnVjdERlY29kZXIsIGdldFN0cnVjdEVuY29kZXIsIGdldFU2NERlY29kZXIsIGdldFU2NEVuY29kZXIsIFNPTEFOQV9FUlJPUl9fUFJPR1JBTV9DTElFTlRTX19JTlNVRkZJQ0lFTlRfQUNDT1VOVF9NRVRBUywgU29sYW5hRXJyb3IsIHRyYW5zZm9ybUVuY29kZXIsIHR5cGUgQWNjb3VudE1ldGEsIHR5cGUgQWNjb3VudFNpZ25lck1ldGEsIHR5cGUgQWRkcmVzcywgdHlwZSBGaXhlZFNpemVDb2RlYywgdHlwZSBGaXhlZFNpemVEZWNvZGVyLCB0eXBlIEZpeGVkU2l6ZUVuY29kZXIsIHR5cGUgSW5zdHJ1Y3Rpb24sIHR5cGUgSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMsIHR5cGUgSW5zdHJ1Y3Rpb25XaXRoRGF0YSwgdHlwZSBSZWFkb25seUFjY291bnQsIHR5cGUgUmVhZG9ubHlVaW50OEFycmF5LCB0eXBlIFRyYW5zYWN0aW9uU2lnbmVyLCB0eXBlIFdyaXRhYmxlQWNjb3VudCwgdHlwZSBXcml0YWJsZVNpZ25lckFjY291bnQgfSBmcm9tICdAc29sYW5hL2tpdCc7XG5pbXBvcnQgeyBnZXRBY2NvdW50TWV0YUZhY3RvcnksIGdldEFkZHJlc3NGcm9tUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQsIGdldE5vbk51bGxSZXNvbHZlZEluc3RydWN0aW9uSW5wdXQsIHR5cGUgUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQgfSBmcm9tICdAc29sYW5hL3Byb2dyYW0tY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgUlBTX0dBTUVfUFJPR1JBTV9BRERSRVNTIH0gZnJvbSAnLi4vcHJvZ3JhbXMnO1xuXG5leHBvcnQgY29uc3QgU1RBUlRfR0FNRV9XSVRIX1RJQ0tFVF9ESVNDUklNSU5BVE9SID0gbmV3IFVpbnQ4QXJyYXkoWzIsIDI1MCwgMjUzLCAyMDIsIDUxLCAxMzgsIDgwLCAyMF0pO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhcnRHYW1lV2l0aFRpY2tldERpc2NyaW1pbmF0b3JCeXRlcygpIHsgcmV0dXJuIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUoU1RBUlRfR0FNRV9XSVRIX1RJQ0tFVF9ESVNDUklNSU5BVE9SKTsgfVxuXG5leHBvcnQgdHlwZSBTdGFydEdhbWVXaXRoVGlja2V0SW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSB0eXBlb2YgUlBTX0dBTUVfUFJPR1JBTV9BRERSRVNTLCBUQWNjb3VudEdhbWVTZXNzaW9uIGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnRQbGF5ZXIgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudE1hdGNoVGlja2V0IGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnRTeXN0ZW1Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IFwiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFcIiwgVFJlbWFpbmluZ0FjY291bnRzIGV4dGVuZHMgcmVhZG9ubHkgQWNjb3VudE1ldGE8c3RyaW5nPltdID0gW10+ID1cbkluc3RydWN0aW9uPFRQcm9ncmFtPiAmIEluc3RydWN0aW9uV2l0aERhdGE8UmVhZG9ubHlVaW50OEFycmF5PiAmIEluc3RydWN0aW9uV2l0aEFjY291bnRzPFtUQWNjb3VudEdhbWVTZXNzaW9uIGV4dGVuZHMgc3RyaW5nID8gV3JpdGFibGVBY2NvdW50PFRBY2NvdW50R2FtZVNlc3Npb24+IDogVEFjY291bnRHYW1lU2Vzc2lvbiwgVEFjY291bnRQbGF5ZXIgZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZVNpZ25lckFjY291bnQ8VEFjY291bnRQbGF5ZXI+ICYgQWNjb3VudFNpZ25lck1ldGE8VEFjY291bnRQbGF5ZXI+IDogVEFjY291bnRQbGF5ZXIsIFRBY2NvdW50TWF0Y2hUaWNrZXQgZXh0ZW5kcyBzdHJpbmcgPyBSZWFkb25seUFjY291bnQ8VEFjY291bnRNYXRjaFRpY2tldD4gOiBUQWNjb3VudE1hdGNoVGlja2V0LCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPyBSZWFkb25seUFjY291bnQ8VEFjY291bnRTeXN0ZW1Qcm9ncmFtPiA6IFRBY2NvdW50U3lzdGVtUHJvZ3JhbSwgLi4uVFJlbWFpbmluZ0FjY291bnRzXT47XG5cbmV4cG9ydCB0eXBlIFN0YXJ0R2FtZVdpdGhUaWNrZXRJbnN0cnVjdGlvbkRhdGEgPSB7IGRpc2NyaW1pbmF0b3I6IFJlYWRvbmx5VWludDhBcnJheTsgZ2FtZUlkOiBiaWdpbnQ7IG9wcG9uZW50OiBBZGRyZXNzOyAgfTtcblxuZXhwb3J0IHR5cGUgU3RhcnRHYW1lV2l0aFRpY2tldEluc3RydWN0aW9uRGF0YUFyZ3MgPSB7IGdhbWVJZDogbnVtYmVyIHwgYmlnaW50OyBvcHBvbmVudDogQWRkcmVzczsgIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFydEdhbWVXaXRoVGlja2V0SW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpOiBGaXhlZFNpemVFbmNvZGVyPFN0YXJ0R2FtZVdpdGhUaWNrZXRJbnN0cnVjdGlvbkRhdGFBcmdzPiB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybUVuY29kZXIoZ2V0U3RydWN0RW5jb2RlcihbWydkaXNjcmltaW5hdG9yJywgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpXSwgWydnYW1lSWQnLCBnZXRVNjRFbmNvZGVyKCldLCBbJ29wcG9uZW50JywgZ2V0QWRkcmVzc0VuY29kZXIoKV1dKSwgKHZhbHVlKSA9PiAoeyAuLi52YWx1ZSwgZGlzY3JpbWluYXRvcjogU1RBUlRfR0FNRV9XSVRIX1RJQ0tFVF9ESVNDUklNSU5BVE9SIH0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXJ0R2FtZVdpdGhUaWNrZXRJbnN0cnVjdGlvbkRhdGFEZWNvZGVyKCk6IEZpeGVkU2l6ZURlY29kZXI8U3RhcnRHYW1lV2l0aFRpY2tldEluc3RydWN0aW9uRGF0YT4ge1xuICAgIHJldHVybiBnZXRTdHJ1Y3REZWNvZGVyKFtbJ2Rpc2NyaW1pbmF0b3InLCBmaXhEZWNvZGVyU2l6ZShnZXRCeXRlc0RlY29kZXIoKSwgOCldLCBbJ2dhbWVJZCcsIGdldFU2NERlY29kZXIoKV0sIFsnb3Bwb25lbnQnLCBnZXRBZGRyZXNzRGVjb2RlcigpXV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhcnRHYW1lV2l0aFRpY2tldEluc3RydWN0aW9uRGF0YUNvZGVjKCk6IEZpeGVkU2l6ZUNvZGVjPFN0YXJ0R2FtZVdpdGhUaWNrZXRJbnN0cnVjdGlvbkRhdGFBcmdzLCBTdGFydEdhbWVXaXRoVGlja2V0SW5zdHJ1Y3Rpb25EYXRhPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVDb2RlYyhnZXRTdGFydEdhbWVXaXRoVGlja2V0SW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpLCBnZXRTdGFydEdhbWVXaXRoVGlja2V0SW5zdHJ1Y3Rpb25EYXRhRGVjb2RlcigpKTtcbn1cblxuZXhwb3J0IHR5cGUgU3RhcnRHYW1lV2l0aFRpY2tldEFzeW5jSW5wdXQ8VEFjY291bnRHYW1lU2Vzc2lvbiBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRQbGF5ZXIgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50TWF0Y2hUaWNrZXQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSAge1xuICBnYW1lU2Vzc2lvbj86IEFkZHJlc3M8VEFjY291bnRHYW1lU2Vzc2lvbj47XG5wbGF5ZXI6IFRyYW5zYWN0aW9uU2lnbmVyPFRBY2NvdW50UGxheWVyPjtcbm1hdGNoVGlja2V0OiBBZGRyZXNzPFRBY2NvdW50TWF0Y2hUaWNrZXQ+O1xuc3lzdGVtUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRTeXN0ZW1Qcm9ncmFtPjtcbmdhbWVJZDogU3RhcnRHYW1lV2l0aFRpY2tldEluc3RydWN0aW9uRGF0YUFyZ3NbXCJnYW1lSWRcIl07XG5vcHBvbmVudDogU3RhcnRHYW1lV2l0aFRpY2tldEluc3RydWN0aW9uRGF0YUFyZ3NbXCJvcHBvbmVudFwiXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFN0YXJ0R2FtZVdpdGhUaWNrZXRJbnN0cnVjdGlvbkFzeW5jPFRBY2NvdW50R2FtZVNlc3Npb24gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50UGxheWVyIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudE1hdGNoVGlja2V0IGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRQcm9ncmFtQWRkcmVzcyBleHRlbmRzIEFkZHJlc3MgPSB0eXBlb2YgUlBTX0dBTUVfUFJPR1JBTV9BRERSRVNTPihpbnB1dDogU3RhcnRHYW1lV2l0aFRpY2tldEFzeW5jSW5wdXQ8VEFjY291bnRHYW1lU2Vzc2lvbiwgVEFjY291bnRQbGF5ZXIsIFRBY2NvdW50TWF0Y2hUaWNrZXQsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbT4sIGNvbmZpZz86IHsgcHJvZ3JhbUFkZHJlc3M/OiBUUHJvZ3JhbUFkZHJlc3MgfSApOiBQcm9taXNlPFN0YXJ0R2FtZVdpdGhUaWNrZXRJbnN0cnVjdGlvbjxUUHJvZ3JhbUFkZHJlc3MsIFRBY2NvdW50R2FtZVNlc3Npb24sIFRBY2NvdW50UGxheWVyLCBUQWNjb3VudE1hdGNoVGlja2V0LCBUQWNjb3VudFN5c3RlbVByb2dyYW0+PiB7XG4gIC8vIFByb2dyYW0gYWRkcmVzcy5cbmNvbnN0IHByb2dyYW1BZGRyZXNzID0gY29uZmlnPy5wcm9ncmFtQWRkcmVzcyA/PyBSUFNfR0FNRV9QUk9HUkFNX0FERFJFU1M7XG5cbiAvLyBPcmlnaW5hbCBhY2NvdW50cy5cbmNvbnN0IG9yaWdpbmFsQWNjb3VudHMgPSB7IGdhbWVTZXNzaW9uOiB7IHZhbHVlOiBpbnB1dC5nYW1lU2Vzc2lvbiA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHBsYXllcjogeyB2YWx1ZTogaW5wdXQucGxheWVyID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgbWF0Y2hUaWNrZXQ6IHsgdmFsdWU6IGlucHV0Lm1hdGNoVGlja2V0ID8/IG51bGwsIGlzV3JpdGFibGU6IGZhbHNlIH0sIHN5c3RlbVByb2dyYW06IHsgdmFsdWU6IGlucHV0LnN5c3RlbVByb2dyYW0gPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSB9XG5jb25zdCBhY2NvdW50cyA9IG9yaWdpbmFsQWNjb3VudHMgYXMgUmVjb3JkPGtleW9mIHR5cGVvZiBvcmlnaW5hbEFjY291bnRzLCBSZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudD47XG5cblxuLy8gT3JpZ2luYWwgYXJncy5cbmNvbnN0IGFyZ3MgPSB7IC4uLmlucHV0LCAgfTtcblxuXG4vLyBSZXNvbHZlIGRlZmF1bHQgdmFsdWVzLlxuaWYgKCFhY2NvdW50cy5nYW1lU2Vzc2lvbi52YWx1ZSkge1xuYWNjb3VudHMuZ2FtZVNlc3Npb24udmFsdWUgPSBhd2FpdCBnZXRQcm9ncmFtRGVyaXZlZEFkZHJlc3MoeyBwcm9ncmFtQWRkcmVzcywgc2VlZHM6IFtnZXRCeXRlc0VuY29kZXIoKS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzEwMywgOTcsIDEwOSwgMTAxLCA5NSwgMTE1LCAxMDEsIDExNSwgMTE1LCAxMDUsIDExMSwgMTEwLCA5NSwgMTE4LCA0OV0pKSwgZ2V0QWRkcmVzc0VuY29kZXIoKS5lbmNvZGUoZ2V0QWRkcmVzc0Zyb21SZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudChcInBsYXllclwiLCBhY2NvdW50cy5wbGF5ZXIudmFsdWUpKSwgZ2V0QWRkcmVzc0VuY29kZXIoKS5lbmNvZGUoZ2V0Tm9uTnVsbFJlc29sdmVkSW5zdHJ1Y3Rpb25JbnB1dChcIm9wcG9uZW50XCIsIGFyZ3Mub3Bwb25lbnQpKSwgZ2V0VTY0RW5jb2RlcigpLmVuY29kZShnZXROb25OdWxsUmVzb2x2ZWRJbnN0cnVjdGlvbklucHV0KFwiZ2FtZUlkXCIsIGFyZ3MuZ2FtZUlkKSldIH0pO1xufVxuaWYgKCFhY2NvdW50cy5zeXN0ZW1Qcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5zeXN0ZW1Qcm9ncmFtLnZhbHVlID0gJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyBhcyBBZGRyZXNzPCcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSc+O1xufVxuXG5jb25zdCBnZXRBY2NvdW50TWV0YSA9IGdldEFjY291bnRNZXRhRmFjdG9yeShwcm9ncmFtQWRkcmVzcywgJ3Byb2dyYW1JZCcpO1xucmV0dXJuIE9iamVjdC5mcmVlemUoeyBhY2NvdW50czogW2dldEFjY291bnRNZXRhKFwiZ2FtZVNlc3Npb25cIiwgYWNjb3VudHMuZ2FtZVNlc3Npb24pLCBnZXRBY2NvdW50TWV0YShcInBsYXllclwiLCBhY2NvdW50cy5wbGF5ZXIpLCBnZXRBY2NvdW50TWV0YShcIm1hdGNoVGlja2V0XCIsIGFjY291bnRzLm1hdGNoVGlja2V0KSwgZ2V0QWNjb3VudE1ldGEoXCJzeXN0ZW1Qcm9ncmFtXCIsIGFjY291bnRzLnN5c3RlbVByb2dyYW0pXSwgZGF0YTogZ2V0U3RhcnRHYW1lV2l0aFRpY2tldEluc3RydWN0aW9uRGF0YUVuY29kZXIoKS5lbmNvZGUoYXJncyBhcyBTdGFydEdhbWVXaXRoVGlja2V0SW5zdHJ1Y3Rpb25EYXRhQXJncyksIHByb2dyYW1BZGRyZXNzIH0gYXMgU3RhcnRHYW1lV2l0aFRpY2tldEluc3RydWN0aW9uPFRQcm9ncmFtQWRkcmVzcywgVEFjY291bnRHYW1lU2Vzc2lvbiwgVEFjY291bnRQbGF5ZXIsIFRBY2NvdW50TWF0Y2hUaWNrZXQsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbT4pO1xufVxuXG5leHBvcnQgdHlwZSBTdGFydEdhbWVXaXRoVGlja2V0SW5wdXQ8VEFjY291bnRHYW1lU2Vzc2lvbiBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRQbGF5ZXIgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50TWF0Y2hUaWNrZXQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSAge1xuICBnYW1lU2Vzc2lvbjogQWRkcmVzczxUQWNjb3VudEdhbWVTZXNzaW9uPjtcbnBsYXllcjogVHJhbnNhY3Rpb25TaWduZXI8VEFjY291bnRQbGF5ZXI+O1xubWF0Y2hUaWNrZXQ6IEFkZHJlc3M8VEFjY291bnRNYXRjaFRpY2tldD47XG5zeXN0ZW1Qcm9ncmFtPzogQWRkcmVzczxUQWNjb3VudFN5c3RlbVByb2dyYW0+O1xuZ2FtZUlkOiBTdGFydEdhbWVXaXRoVGlja2V0SW5zdHJ1Y3Rpb25EYXRhQXJnc1tcImdhbWVJZFwiXTtcbm9wcG9uZW50OiBTdGFydEdhbWVXaXRoVGlja2V0SW5zdHJ1Y3Rpb25EYXRhQXJnc1tcIm9wcG9uZW50XCJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhcnRHYW1lV2l0aFRpY2tldEluc3RydWN0aW9uPFRBY2NvdW50R2FtZVNlc3Npb24gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50UGxheWVyIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudE1hdGNoVGlja2V0IGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRQcm9ncmFtQWRkcmVzcyBleHRlbmRzIEFkZHJlc3MgPSB0eXBlb2YgUlBTX0dBTUVfUFJPR1JBTV9BRERSRVNTPihpbnB1dDogU3RhcnRHYW1lV2l0aFRpY2tldElucHV0PFRBY2NvdW50R2FtZVNlc3Npb24sIFRBY2NvdW50UGxheWVyLCBUQWNjb3VudE1hdGNoVGlja2V0LCBUQWNjb3VudFN5c3RlbVByb2dyYW0+LCBjb25maWc/OiB7IHByb2dyYW1BZGRyZXNzPzogVFByb2dyYW1BZGRyZXNzIH0gKTogU3RhcnRHYW1lV2l0aFRpY2tldEluc3RydWN0aW9uPFRQcm9ncmFtQWRkcmVzcywgVEFjY291bnRHYW1lU2Vzc2lvbiwgVEFjY291bnRQbGF5ZXIsIFRBY2NvdW50TWF0Y2hUaWNrZXQsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbT4ge1xuICAvLyBQcm9ncmFtIGFkZHJlc3MuXG5jb25zdCBwcm9ncmFtQWRkcmVzcyA9IGNvbmZpZz8ucHJvZ3JhbUFkZHJlc3MgPz8gUlBTX0dBTUVfUFJPR1JBTV9BRERSRVNTO1xuXG4gLy8gT3JpZ2luYWwgYWNjb3VudHMuXG5jb25zdCBvcmlnaW5hbEFjY291bnRzID0geyBnYW1lU2Vzc2lvbjogeyB2YWx1ZTogaW5wdXQuZ2FtZVNlc3Npb24gPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBwbGF5ZXI6IHsgdmFsdWU6IGlucHV0LnBsYXllciA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIG1hdGNoVGlja2V0OiB7IHZhbHVlOiBpbnB1dC5tYXRjaFRpY2tldCA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBzeXN0ZW1Qcm9ncmFtOiB7IHZhbHVlOiBpbnB1dC5zeXN0ZW1Qcm9ncmFtID8/IG51bGwsIGlzV3JpdGFibGU6IGZhbHNlIH0gfVxuY29uc3QgYWNjb3VudHMgPSBvcmlnaW5hbEFjY291bnRzIGFzIFJlY29yZDxrZXlvZiB0eXBlb2Ygb3JpZ2luYWxBY2NvdW50cywgUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQ+O1xuXG5cbi8vIE9yaWdpbmFsIGFyZ3MuXG5jb25zdCBhcmdzID0geyAuLi5pbnB1dCwgIH07XG5cblxuLy8gUmVzb2x2ZSBkZWZhdWx0IHZhbHVlcy5cbmlmICghYWNjb3VudHMuc3lzdGVtUHJvZ3JhbS52YWx1ZSkge1xuYWNjb3VudHMuc3lzdGVtUHJvZ3JhbS52YWx1ZSA9ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMScgYXMgQWRkcmVzczwnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnPjtcbn1cblxuY29uc3QgZ2V0QWNjb3VudE1ldGEgPSBnZXRBY2NvdW50TWV0YUZhY3RvcnkocHJvZ3JhbUFkZHJlc3MsICdwcm9ncmFtSWQnKTtcbnJldHVybiBPYmplY3QuZnJlZXplKHsgYWNjb3VudHM6IFtnZXRBY2NvdW50TWV0YShcImdhbWVTZXNzaW9uXCIsIGFjY291bnRzLmdhbWVTZXNzaW9uKSwgZ2V0QWNjb3VudE1ldGEoXCJwbGF5ZXJcIiwgYWNjb3VudHMucGxheWVyKSwgZ2V0QWNjb3VudE1ldGEoXCJtYXRjaFRpY2tldFwiLCBhY2NvdW50cy5tYXRjaFRpY2tldCksIGdldEFjY291bnRNZXRhKFwic3lzdGVtUHJvZ3JhbVwiLCBhY2NvdW50cy5zeXN0ZW1Qcm9ncmFtKV0sIGRhdGE6IGdldFN0YXJ0R2FtZVdpdGhUaWNrZXRJbnN0cnVjdGlvbkRhdGFFbmNvZGVyKCkuZW5jb2RlKGFyZ3MgYXMgU3RhcnRHYW1lV2l0aFRpY2tldEluc3RydWN0aW9uRGF0YUFyZ3MpLCBwcm9ncmFtQWRkcmVzcyB9IGFzIFN0YXJ0R2FtZVdpdGhUaWNrZXRJbnN0cnVjdGlvbjxUUHJvZ3JhbUFkZHJlc3MsIFRBY2NvdW50R2FtZVNlc3Npb24sIFRBY2NvdW50UGxheWVyLCBUQWNjb3VudE1hdGNoVGlja2V0LCBUQWNjb3VudFN5c3RlbVByb2dyYW0+KTtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkU3RhcnRHYW1lV2l0aFRpY2tldEluc3RydWN0aW9uPFRQcm9ncmFtIGV4dGVuZHMgc3RyaW5nID0gdHlwZW9mIFJQU19HQU1FX1BST0dSQU1fQUREUkVTUywgVEFjY291bnRNZXRhcyBleHRlbmRzIHJlYWRvbmx5IEFjY291bnRNZXRhW10gPSByZWFkb25seSBBY2NvdW50TWV0YVtdPiA9IHsgcHJvZ3JhbUFkZHJlc3M6IEFkZHJlc3M8VFByb2dyYW0+O1xuYWNjb3VudHM6IHtcbmdhbWVTZXNzaW9uOiBUQWNjb3VudE1ldGFzWzBdO1xucGxheWVyOiBUQWNjb3VudE1ldGFzWzFdO1xubWF0Y2hUaWNrZXQ6IFRBY2NvdW50TWV0YXNbMl07XG5zeXN0ZW1Qcm9ncmFtOiBUQWNjb3VudE1ldGFzWzNdO1xufTtcbmRhdGE6IFN0YXJ0R2FtZVdpdGhUaWNrZXRJbnN0cnVjdGlvbkRhdGE7IH07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0YXJ0R2FtZVdpdGhUaWNrZXRJbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVEFjY291bnRNZXRhcyBleHRlbmRzIHJlYWRvbmx5IEFjY291bnRNZXRhW10+KGluc3RydWN0aW9uOiBJbnN0cnVjdGlvbjxUUHJvZ3JhbT4gJiBJbnN0cnVjdGlvbldpdGhBY2NvdW50czxUQWNjb3VudE1ldGFzPiAmIEluc3RydWN0aW9uV2l0aERhdGE8UmVhZG9ubHlVaW50OEFycmF5Pik6IFBhcnNlZFN0YXJ0R2FtZVdpdGhUaWNrZXRJbnN0cnVjdGlvbjxUUHJvZ3JhbSwgVEFjY291bnRNZXRhcz4ge1xuICBpZiAoaW5zdHJ1Y3Rpb24uYWNjb3VudHMubGVuZ3RoIDwgNCkge1xuICB0aHJvdyBuZXcgU29sYW5hRXJyb3IoU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0lOU1VGRklDSUVOVF9BQ0NPVU5UX01FVEFTLCB7IGFjdHVhbEFjY291bnRNZXRhczogaW5zdHJ1Y3Rpb24uYWNjb3VudHMubGVuZ3RoLCBleHBlY3RlZEFjY291bnRNZXRhczogNCB9KTtcbn1cbmxldCBhY2NvdW50SW5kZXggPSAwO1xuY29uc3QgZ2V0TmV4dEFjY291bnQgPSAoKSA9PiB7XG4gIGNvbnN0IGFjY291bnRNZXRhID0gKGluc3RydWN0aW9uLmFjY291bnRzIGFzIFRBY2NvdW50TWV0YXMpW2FjY291bnRJbmRleF0hO1xuICBhY2NvdW50SW5kZXggKz0gMTtcbiAgcmV0dXJuIGFjY291bnRNZXRhO1xufVxuICByZXR1cm4geyBwcm9ncmFtQWRkcmVzczogaW5zdHJ1Y3Rpb24ucHJvZ3JhbUFkZHJlc3MsIGFjY291bnRzOiB7IGdhbWVTZXNzaW9uOiBnZXROZXh0QWNjb3VudCgpLCBwbGF5ZXI6IGdldE5leHRBY2NvdW50KCksIG1hdGNoVGlja2V0OiBnZXROZXh0QWNjb3VudCgpLCBzeXN0ZW1Qcm9ncmFtOiBnZXROZXh0QWNjb3VudCgpIH0sIGRhdGE6IGdldFN0YXJ0R2FtZVdpdGhUaWNrZXRJbnN0cnVjdGlvbkRhdGFEZWNvZGVyKCkuZGVjb2RlKGluc3RydWN0aW9uLmRhdGEpIH07XG59Il19
@@ -0,0 +1,8 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ export * from './rpsGame';
@@ -0,0 +1,9 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ export * from './rpsGame';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2VuZXJhdGVkL3Jwcy1nYW1lL3Byb2dyYW1zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILGNBQWMsV0FBVyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGNvZGUgd2FzIEFVVE9HRU5FUkFURUQgdXNpbmcgdGhlIENvZGFtYSBsaWJyYXJ5LlxuICogUGxlYXNlIERPIE5PVCBFRElUIFRISVMgRklMRSwgaW5zdGVhZCB1c2UgdmlzaXRvcnNcbiAqIHRvIGFkZCBmZWF0dXJlcywgdGhlbiByZXJ1biBDb2RhbWEgdG8gdXBkYXRlIGl0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NvZGFtYS1pZGwvY29kYW1hXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9ycHNHYW1lJzsiXX0=
@@ -0,0 +1,78 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ import { type Address, type ClientWithPayer, type ClientWithRpc, type ClientWithTransactionPlanning, type ClientWithTransactionSending, type GetAccountInfoApi, type GetMultipleAccountsApi, type Instruction, type InstructionWithData, type ReadonlyUint8Array } from '@solana/kit';
9
+ import { type SelfFetchFunctions, type SelfPlanAndSendFunctions } from '@solana/program-client-core';
10
+ import { getGameSessionCodec, getPlayerProfileCodec, type GameSession, type GameSessionArgs, type PlayerProfile, type PlayerProfileArgs } from '../accounts';
11
+ import { getClosePlayerInstructionAsync, getDelegatePdaInstructionAsync, getInitializePlayerInstructionAsync, getMakeChoiceInstruction, getOnMatchFoundInstruction, getPersistResultsInstruction, getProcessUndelegationInstruction, getStartGameInstructionAsync, getStartGameWithTicketInstructionAsync, type ClosePlayerAsyncInput, type DelegatePdaAsyncInput, type InitializePlayerAsyncInput, type MakeChoiceInput, type OnMatchFoundInput, type ParsedClosePlayerInstruction, type ParsedDelegatePdaInstruction, type ParsedInitializePlayerInstruction, type ParsedMakeChoiceInstruction, type ParsedOnMatchFoundInstruction, type ParsedPersistResultsInstruction, type ParsedProcessUndelegationInstruction, type ParsedStartGameInstruction, type ParsedStartGameWithTicketInstruction, type PersistResultsInput, type ProcessUndelegationInput, type StartGameAsyncInput, type StartGameWithTicketAsyncInput } from '../instructions';
12
+ export declare const RPS_GAME_PROGRAM_ADDRESS: Address<"8ohu3RobXyZ2DebyJjbs2co9YCG275FUsVckEcmDbCos">;
13
+ export declare enum RpsGameAccount {
14
+ GameSession = 0,
15
+ PlayerProfile = 1
16
+ }
17
+ export declare function identifyRpsGameAccount(account: {
18
+ data: ReadonlyUint8Array;
19
+ } | ReadonlyUint8Array): RpsGameAccount;
20
+ export declare enum RpsGameInstruction {
21
+ ClosePlayer = 0,
22
+ DelegatePda = 1,
23
+ InitializePlayer = 2,
24
+ MakeChoice = 3,
25
+ OnMatchFound = 4,
26
+ PersistResults = 5,
27
+ ProcessUndelegation = 6,
28
+ StartGame = 7,
29
+ StartGameWithTicket = 8
30
+ }
31
+ export declare function identifyRpsGameInstruction(instruction: {
32
+ data: ReadonlyUint8Array;
33
+ } | ReadonlyUint8Array): RpsGameInstruction;
34
+ export type ParsedRpsGameInstruction<TProgram extends string = '8ohu3RobXyZ2DebyJjbs2co9YCG275FUsVckEcmDbCos'> = {
35
+ instructionType: RpsGameInstruction.ClosePlayer;
36
+ } & ParsedClosePlayerInstruction<TProgram> | {
37
+ instructionType: RpsGameInstruction.DelegatePda;
38
+ } & ParsedDelegatePdaInstruction<TProgram> | {
39
+ instructionType: RpsGameInstruction.InitializePlayer;
40
+ } & ParsedInitializePlayerInstruction<TProgram> | {
41
+ instructionType: RpsGameInstruction.MakeChoice;
42
+ } & ParsedMakeChoiceInstruction<TProgram> | {
43
+ instructionType: RpsGameInstruction.OnMatchFound;
44
+ } & ParsedOnMatchFoundInstruction<TProgram> | {
45
+ instructionType: RpsGameInstruction.PersistResults;
46
+ } & ParsedPersistResultsInstruction<TProgram> | {
47
+ instructionType: RpsGameInstruction.ProcessUndelegation;
48
+ } & ParsedProcessUndelegationInstruction<TProgram> | {
49
+ instructionType: RpsGameInstruction.StartGame;
50
+ } & ParsedStartGameInstruction<TProgram> | {
51
+ instructionType: RpsGameInstruction.StartGameWithTicket;
52
+ } & ParsedStartGameWithTicketInstruction<TProgram>;
53
+ export declare function parseRpsGameInstruction<TProgram extends string>(instruction: Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array>): ParsedRpsGameInstruction<TProgram>;
54
+ export type RpsGamePlugin = {
55
+ accounts: RpsGamePluginAccounts;
56
+ instructions: RpsGamePluginInstructions;
57
+ };
58
+ export type RpsGamePluginAccounts = {
59
+ gameSession: ReturnType<typeof getGameSessionCodec> & SelfFetchFunctions<GameSessionArgs, GameSession>;
60
+ playerProfile: ReturnType<typeof getPlayerProfileCodec> & SelfFetchFunctions<PlayerProfileArgs, PlayerProfile>;
61
+ };
62
+ export type RpsGamePluginInstructions = {
63
+ closePlayer: (input: MakeOptional<ClosePlayerAsyncInput, "payer">) => ReturnType<typeof getClosePlayerInstructionAsync> & SelfPlanAndSendFunctions;
64
+ delegatePda: (input: MakeOptional<DelegatePdaAsyncInput, "payer">) => ReturnType<typeof getDelegatePdaInstructionAsync> & SelfPlanAndSendFunctions;
65
+ initializePlayer: (input: MakeOptional<InitializePlayerAsyncInput, "payer">) => ReturnType<typeof getInitializePlayerInstructionAsync> & SelfPlanAndSendFunctions;
66
+ makeChoice: (input: MakeChoiceInput) => ReturnType<typeof getMakeChoiceInstruction> & SelfPlanAndSendFunctions;
67
+ onMatchFound: (input: OnMatchFoundInput) => ReturnType<typeof getOnMatchFoundInstruction> & SelfPlanAndSendFunctions;
68
+ persistResults: (input: MakeOptional<PersistResultsInput, "payer">) => ReturnType<typeof getPersistResultsInstruction> & SelfPlanAndSendFunctions;
69
+ processUndelegation: (input: MakeOptional<ProcessUndelegationInput, "payer">) => ReturnType<typeof getProcessUndelegationInstruction> & SelfPlanAndSendFunctions;
70
+ startGame: (input: StartGameAsyncInput) => ReturnType<typeof getStartGameInstructionAsync> & SelfPlanAndSendFunctions;
71
+ startGameWithTicket: (input: StartGameWithTicketAsyncInput) => ReturnType<typeof getStartGameWithTicketInstructionAsync> & SelfPlanAndSendFunctions;
72
+ };
73
+ export type RpsGamePluginRequirements = ClientWithRpc<GetAccountInfoApi & GetMultipleAccountsApi> & ClientWithPayer & ClientWithTransactionPlanning & ClientWithTransactionSending;
74
+ export declare function rpsGameProgram(): <T extends RpsGamePluginRequirements>(client: T) => T & {
75
+ rpsGame: RpsGamePlugin;
76
+ };
77
+ type MakeOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
78
+ export {};
@@ -0,0 +1,118 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ import { assertIsInstructionWithAccounts, containsBytes, fixEncoderSize, getBytesEncoder, SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_ACCOUNT, SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION, SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE, SolanaError } from '@solana/kit';
9
+ import { addSelfFetchFunctions, addSelfPlanAndSendFunctions } from '@solana/program-client-core';
10
+ import { getGameSessionCodec, getPlayerProfileCodec } from '../accounts';
11
+ import { getClosePlayerInstructionAsync, getDelegatePdaInstructionAsync, getInitializePlayerInstructionAsync, getMakeChoiceInstruction, getOnMatchFoundInstruction, getPersistResultsInstruction, getProcessUndelegationInstruction, getStartGameInstructionAsync, getStartGameWithTicketInstructionAsync, parseClosePlayerInstruction, parseDelegatePdaInstruction, parseInitializePlayerInstruction, parseMakeChoiceInstruction, parseOnMatchFoundInstruction, parsePersistResultsInstruction, parseProcessUndelegationInstruction, parseStartGameInstruction, parseStartGameWithTicketInstruction } from '../instructions';
12
+ export const RPS_GAME_PROGRAM_ADDRESS = '8ohu3RobXyZ2DebyJjbs2co9YCG275FUsVckEcmDbCos';
13
+ export var RpsGameAccount;
14
+ (function (RpsGameAccount) {
15
+ RpsGameAccount[RpsGameAccount["GameSession"] = 0] = "GameSession";
16
+ RpsGameAccount[RpsGameAccount["PlayerProfile"] = 1] = "PlayerProfile";
17
+ })(RpsGameAccount || (RpsGameAccount = {}));
18
+ export function identifyRpsGameAccount(account) {
19
+ const data = 'data' in account ? account.data : account;
20
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([150, 116, 20, 197, 205, 121, 220, 240])), 0)) {
21
+ return RpsGameAccount.GameSession;
22
+ }
23
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([82, 226, 99, 87, 164, 130, 181, 80])), 0)) {
24
+ return RpsGameAccount.PlayerProfile;
25
+ }
26
+ throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_ACCOUNT, { accountData: data, programName: "rpsGame" });
27
+ }
28
+ export var RpsGameInstruction;
29
+ (function (RpsGameInstruction) {
30
+ RpsGameInstruction[RpsGameInstruction["ClosePlayer"] = 0] = "ClosePlayer";
31
+ RpsGameInstruction[RpsGameInstruction["DelegatePda"] = 1] = "DelegatePda";
32
+ RpsGameInstruction[RpsGameInstruction["InitializePlayer"] = 2] = "InitializePlayer";
33
+ RpsGameInstruction[RpsGameInstruction["MakeChoice"] = 3] = "MakeChoice";
34
+ RpsGameInstruction[RpsGameInstruction["OnMatchFound"] = 4] = "OnMatchFound";
35
+ RpsGameInstruction[RpsGameInstruction["PersistResults"] = 5] = "PersistResults";
36
+ RpsGameInstruction[RpsGameInstruction["ProcessUndelegation"] = 6] = "ProcessUndelegation";
37
+ RpsGameInstruction[RpsGameInstruction["StartGame"] = 7] = "StartGame";
38
+ RpsGameInstruction[RpsGameInstruction["StartGameWithTicket"] = 8] = "StartGameWithTicket";
39
+ })(RpsGameInstruction || (RpsGameInstruction = {}));
40
+ export function identifyRpsGameInstruction(instruction) {
41
+ const data = 'data' in instruction ? instruction.data : instruction;
42
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([225, 227, 204, 63, 32, 122, 58, 227])), 0)) {
43
+ return RpsGameInstruction.ClosePlayer;
44
+ }
45
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([248, 217, 193, 46, 124, 191, 64, 135])), 0)) {
46
+ return RpsGameInstruction.DelegatePda;
47
+ }
48
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([79, 249, 88, 177, 220, 62, 56, 128])), 0)) {
49
+ return RpsGameInstruction.InitializePlayer;
50
+ }
51
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([207, 18, 251, 32, 135, 122, 160, 77])), 0)) {
52
+ return RpsGameInstruction.MakeChoice;
53
+ }
54
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([66, 209, 170, 159, 10, 195, 34, 214])), 0)) {
55
+ return RpsGameInstruction.OnMatchFound;
56
+ }
57
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([9, 175, 42, 217, 2, 48, 80, 81])), 0)) {
58
+ return RpsGameInstruction.PersistResults;
59
+ }
60
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([196, 28, 41, 206, 48, 37, 51, 167])), 0)) {
61
+ return RpsGameInstruction.ProcessUndelegation;
62
+ }
63
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([249, 47, 252, 172, 184, 162, 245, 14])), 0)) {
64
+ return RpsGameInstruction.StartGame;
65
+ }
66
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([2, 250, 253, 202, 51, 138, 80, 20])), 0)) {
67
+ return RpsGameInstruction.StartGameWithTicket;
68
+ }
69
+ throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION, { instructionData: data, programName: "rpsGame" });
70
+ }
71
+ export function parseRpsGameInstruction(instruction) {
72
+ const instructionType = identifyRpsGameInstruction(instruction);
73
+ switch (instructionType) {
74
+ case RpsGameInstruction.ClosePlayer: {
75
+ assertIsInstructionWithAccounts(instruction);
76
+ return { instructionType: RpsGameInstruction.ClosePlayer, ...parseClosePlayerInstruction(instruction) };
77
+ }
78
+ case RpsGameInstruction.DelegatePda: {
79
+ assertIsInstructionWithAccounts(instruction);
80
+ return { instructionType: RpsGameInstruction.DelegatePda, ...parseDelegatePdaInstruction(instruction) };
81
+ }
82
+ case RpsGameInstruction.InitializePlayer: {
83
+ assertIsInstructionWithAccounts(instruction);
84
+ return { instructionType: RpsGameInstruction.InitializePlayer, ...parseInitializePlayerInstruction(instruction) };
85
+ }
86
+ case RpsGameInstruction.MakeChoice: {
87
+ assertIsInstructionWithAccounts(instruction);
88
+ return { instructionType: RpsGameInstruction.MakeChoice, ...parseMakeChoiceInstruction(instruction) };
89
+ }
90
+ case RpsGameInstruction.OnMatchFound: {
91
+ assertIsInstructionWithAccounts(instruction);
92
+ return { instructionType: RpsGameInstruction.OnMatchFound, ...parseOnMatchFoundInstruction(instruction) };
93
+ }
94
+ case RpsGameInstruction.PersistResults: {
95
+ assertIsInstructionWithAccounts(instruction);
96
+ return { instructionType: RpsGameInstruction.PersistResults, ...parsePersistResultsInstruction(instruction) };
97
+ }
98
+ case RpsGameInstruction.ProcessUndelegation: {
99
+ assertIsInstructionWithAccounts(instruction);
100
+ return { instructionType: RpsGameInstruction.ProcessUndelegation, ...parseProcessUndelegationInstruction(instruction) };
101
+ }
102
+ case RpsGameInstruction.StartGame: {
103
+ assertIsInstructionWithAccounts(instruction);
104
+ return { instructionType: RpsGameInstruction.StartGame, ...parseStartGameInstruction(instruction) };
105
+ }
106
+ case RpsGameInstruction.StartGameWithTicket: {
107
+ assertIsInstructionWithAccounts(instruction);
108
+ return { instructionType: RpsGameInstruction.StartGameWithTicket, ...parseStartGameWithTicketInstruction(instruction) };
109
+ }
110
+ default: throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE, { instructionType: instructionType, programName: "rpsGame" });
111
+ }
112
+ }
113
+ export function rpsGameProgram() {
114
+ return (client) => {
115
+ return { ...client, rpsGame: { accounts: { gameSession: addSelfFetchFunctions(client, getGameSessionCodec()), playerProfile: addSelfFetchFunctions(client, getPlayerProfileCodec()) }, instructions: { closePlayer: input => addSelfPlanAndSendFunctions(client, getClosePlayerInstructionAsync({ ...input, payer: input.payer ?? client.payer.address })), delegatePda: input => addSelfPlanAndSendFunctions(client, getDelegatePdaInstructionAsync({ ...input, payer: input.payer ?? client.payer })), initializePlayer: input => addSelfPlanAndSendFunctions(client, getInitializePlayerInstructionAsync({ ...input, payer: input.payer ?? client.payer })), makeChoice: input => addSelfPlanAndSendFunctions(client, getMakeChoiceInstruction(input)), onMatchFound: input => addSelfPlanAndSendFunctions(client, getOnMatchFoundInstruction(input)), persistResults: input => addSelfPlanAndSendFunctions(client, getPersistResultsInstruction({ ...input, payer: input.payer ?? client.payer })), processUndelegation: input => addSelfPlanAndSendFunctions(client, getProcessUndelegationInstruction({ ...input, payer: input.payer ?? client.payer.address })), startGame: input => addSelfPlanAndSendFunctions(client, getStartGameInstructionAsync(input)), startGameWithTicket: input => addSelfPlanAndSendFunctions(client, getStartGameWithTicketInstructionAsync(input)) } } };
116
+ };
117
+ }
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnBzR2FtZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvcnBzLWdhbWUvcHJvZ3JhbXMvcnBzR2FtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUseURBQXlELEVBQUUsNkRBQTZELEVBQUUsNERBQTRELEVBQUUsV0FBVyxFQUEyUCxNQUFNLGFBQWEsQ0FBQztBQUM1aUIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLDJCQUEyQixFQUEwRCxNQUFNLDZCQUE2QixDQUFDO0FBQ3pKLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBc0YsTUFBTSxhQUFhLENBQUM7QUFDN0osT0FBTyxFQUFFLDhCQUE4QixFQUFFLDhCQUE4QixFQUFFLG1DQUFtQyxFQUFFLHdCQUF3QixFQUFFLDBCQUEwQixFQUFFLDRCQUE0QixFQUFFLGlDQUFpQyxFQUFFLDRCQUE0QixFQUFFLHNDQUFzQyxFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLGdDQUFnQyxFQUFFLDBCQUEwQixFQUFFLDRCQUE0QixFQUFFLDhCQUE4QixFQUFFLG1DQUFtQyxFQUFFLHlCQUF5QixFQUFFLG1DQUFtQyxFQUFpbEIsTUFBTSxpQkFBaUIsQ0FBQztBQUU3cUMsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsOENBQXlHLENBQUM7QUFFbEosTUFBTSxDQUFOLElBQVksY0FBNkM7QUFBekQsV0FBWSxjQUFjO0lBQUcsaUVBQVcsQ0FBQTtJQUFFLHFFQUFhLENBQUE7QUFBQyxDQUFDLEVBQTdDLGNBQWMsS0FBZCxjQUFjLFFBQStCO0FBRXpELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxPQUEwRDtJQUM3RixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDeEQsSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLGNBQWMsQ0FBQyxXQUFXLENBQUM7SUFBQyxDQUFDO0lBQzVLLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxjQUFjLENBQUMsYUFBYSxDQUFDO0lBQUMsQ0FBQztJQUNuSyxNQUFNLElBQUksV0FBVyxDQUFDLHlEQUF5RCxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUNwSSxDQUFDO0FBRUQsTUFBTSxDQUFOLElBQVksa0JBQWdLO0FBQTVLLFdBQVksa0JBQWtCO0lBQUcseUVBQVcsQ0FBQTtJQUFFLHlFQUFXLENBQUE7SUFBRSxtRkFBZ0IsQ0FBQTtJQUFFLHVFQUFVLENBQUE7SUFBRSwyRUFBWSxDQUFBO0lBQUUsK0VBQWMsQ0FBQTtJQUFFLHlGQUFtQixDQUFBO0lBQUUscUVBQVMsQ0FBQTtJQUFFLHlGQUFtQixDQUFBO0FBQUMsQ0FBQyxFQUFoSyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBQThJO0FBRTVLLE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxXQUE4RDtJQUNyRyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDcEUsSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLGtCQUFrQixDQUFDLFdBQVcsQ0FBQztJQUFDLENBQUM7SUFDOUssSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLGtCQUFrQixDQUFDLFdBQVcsQ0FBQztJQUFDLENBQUM7SUFDM0ssSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDO0lBQUMsQ0FBQztJQUM5SyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sa0JBQWtCLENBQUMsVUFBVSxDQUFDO0lBQUMsQ0FBQztJQUN6SyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sa0JBQWtCLENBQUMsWUFBWSxDQUFDO0lBQUMsQ0FBQztJQUMzSyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sa0JBQWtCLENBQUMsY0FBYyxDQUFDO0lBQUMsQ0FBQztJQUN4SyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUs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LE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsOEJBQThCLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsOEJBQThCLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLG1DQUFtQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsNEJBQTRCLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLGlDQUFpQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsc0NBQXNDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNoMUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBjb2RlIHdhcyBBVVRPR0VORVJBVEVEIHVzaW5nIHRoZSBDb2RhbWEgbGlicmFyeS5cbiAqIFBsZWFzZSBETyBOT1QgRURJVCBUSElTIEZJTEUsIGluc3RlYWQgdXNlIHZpc2l0b3JzXG4gKiB0byBhZGQgZmVhdHVyZXMsIHRoZW4gcmVydW4gQ29kYW1hIHRvIHVwZGF0ZSBpdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RhbWEtaWRsL2NvZGFtYVxuICovXG5cbmltcG9ydCB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMsIGNvbnRhaW5zQnl0ZXMsIGZpeEVuY29kZXJTaXplLCBnZXRCeXRlc0VuY29kZXIsIFNPTEFOQV9FUlJPUl9fUFJPR1JBTV9DTElFTlRTX19GQUlMRURfVE9fSURFTlRJRllfQUNDT1VOVCwgU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0ZBSUxFRF9UT19JREVOVElGWV9JTlNUUlVDVElPTiwgU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX1VOUkVDT0dOSVpFRF9JTlNUUlVDVElPTl9UWVBFLCBTb2xhbmFFcnJvciwgdHlwZSBBZGRyZXNzLCB0eXBlIENsaWVudFdpdGhQYXllciwgdHlwZSBDbGllbnRXaXRoUnBjLCB0eXBlIENsaWVudFdpdGhUcmFuc2FjdGlvblBsYW5uaW5nLCB0eXBlIENsaWVudFdpdGhUcmFuc2FjdGlvblNlbmRpbmcsIHR5cGUgR2V0QWNjb3VudEluZm9BcGksIHR5cGUgR2V0TXVsdGlwbGVBY2NvdW50c0FwaSwgdHlwZSBJbnN0cnVjdGlvbiwgdHlwZSBJbnN0cnVjdGlvbldpdGhEYXRhLCB0eXBlIFJlYWRvbmx5VWludDhBcnJheSB9IGZyb20gJ0Bzb2xhbmEva2l0JztcbmltcG9ydCB7IGFkZFNlbGZGZXRjaEZ1bmN0aW9ucywgYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zLCB0eXBlIFNlbGZGZXRjaEZ1bmN0aW9ucywgdHlwZSBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMgfSBmcm9tICdAc29sYW5hL3Byb2dyYW0tY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgZ2V0R2FtZVNlc3Npb25Db2RlYywgZ2V0UGxheWVyUHJvZmlsZUNvZGVjLCB0eXBlIEdhbWVTZXNzaW9uLCB0eXBlIEdhbWVTZXNzaW9uQXJncywgdHlwZSBQbGF5ZXJQcm9maWxlLCB0eXBlIFBsYXllclByb2ZpbGVBcmdzIH0gZnJvbSAnLi4vYWNjb3VudHMnO1xuaW1wb3J0IHsgZ2V0Q2xvc2VQbGF5ZXJJbnN0cnVjdGlvbkFzeW5jLCBnZXREZWxlZ2F0ZVBkYUluc3RydWN0aW9uQXN5bmMsIGdldEluaXRpYWxpemVQbGF5ZXJJbnN0cnVjdGlvbkFzeW5jLCBnZXRNYWtlQ2hvaWNlSW5zdHJ1Y3Rpb24sIGdldE9uTWF0Y2hGb3VuZEluc3RydWN0aW9uLCBnZXRQZXJzaXN0UmVzdWx0c0luc3RydWN0aW9uLCBnZXRQcm9jZXNzVW5kZWxlZ2F0aW9uSW5zdHJ1Y3Rpb24sIGdldFN0YXJ0R2FtZUluc3RydWN0aW9uQXN5bmMsIGdldFN0YXJ0R2FtZVdpdGhUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLCBwYXJzZUNsb3NlUGxheWVySW5zdHJ1Y3Rpb24sIHBhcnNlRGVsZWdhdGVQZGFJbnN0cnVjdGlvbiwgcGFyc2VJbml0aWFsaXplUGxheWVySW5zdHJ1Y3Rpb24sIHBhcnNlTWFrZUNob2ljZUluc3RydWN0aW9uLCBwYXJzZU9uTWF0Y2hGb3VuZEluc3RydWN0aW9uLCBwYXJzZVBlcnNpc3RSZXN1bHRzSW5zdHJ1Y3Rpb24sIHBhcnNlUHJvY2Vzc1VuZGVsZWdhdGlvbkluc3RydWN0aW9uLCBwYXJzZVN0YXJ0R2FtZUluc3RydWN0aW9uLCBwYXJzZVN0YXJ0R2FtZVdpdGhUaWNrZXRJbnN0cnVjdGlvbiwgdHlwZSBDbG9zZVBsYXllckFzeW5jSW5wdXQsIHR5cGUgRGVsZWdhdGVQZGFBc3luY0lucHV0LCB0eXBlIEluaXRpYWxpemVQbGF5ZXJBc3luY0lucHV0LCB0eXBlIE1ha2VDaG9pY2VJbnB1dCwgdHlwZSBPbk1hdGNoRm91bmRJbnB1dCwgdHlwZSBQYXJzZWRDbG9zZVBsYXllckluc3RydWN0aW9uLCB0eXBlIFBhcnNlZERlbGVnYXRlUGRhSW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkSW5pdGlhbGl6ZVBsYXllckluc3RydWN0aW9uLCB0eXBlIFBhcnNlZE1ha2VDaG9pY2VJbnN0cnVjdGlvbiwgdHlwZSBQYXJzZWRPbk1hdGNoRm91bmRJbnN0cnVjdGlvbiwgdHlwZSBQYXJzZWRQZXJzaXN0UmVzdWx0c0luc3RydWN0aW9uLCB0eXBlIFBhcnNlZFByb2Nlc3NVbmRlbGVnYXRpb25JbnN0cnVjdGlvbiwgdHlwZSBQYXJzZWRTdGFydEdhbWVJbnN0cnVjdGlvbiwgdHlwZSBQYXJzZWRTdGFydEdhbWVXaXRoVGlja2V0SW5zdHJ1Y3Rpb24sIHR5cGUgUGVyc2lzdFJlc3VsdHNJbnB1dCwgdHlwZSBQcm9jZXNzVW5kZWxlZ2F0aW9uSW5wdXQsIHR5cGUgU3RhcnRHYW1lQXN5bmNJbnB1dCwgdHlwZSBTdGFydEdhbWVXaXRoVGlja2V0QXN5bmNJbnB1dCB9IGZyb20gJy4uL2luc3RydWN0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBSUFNfR0FNRV9QUk9HUkFNX0FERFJFU1MgPSAnOG9odTNSb2JYeVoyRGVieUpqYnMyY285WUNHMjc1RlVzVmNrRWNtRGJDb3MnIGFzIEFkZHJlc3M8JzhvaHUzUm9iWHlaMkRlYnlKamJzMmNvOVlDRzI3NUZVc1Zja0VjbURiQ29zJz47XG5cbmV4cG9ydCBlbnVtIFJwc0dhbWVBY2NvdW50IHsgR2FtZVNlc3Npb24sIFBsYXllclByb2ZpbGUgfVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZnlScHNHYW1lQWNjb3VudChhY2NvdW50OiB7IGRhdGE6IFJlYWRvbmx5VWludDhBcnJheSB9IHwgUmVhZG9ubHlVaW50OEFycmF5KTogUnBzR2FtZUFjY291bnQge1xuICAgIGNvbnN0IGRhdGEgPSAnZGF0YScgaW4gYWNjb3VudCA/IGFjY291bnQuZGF0YSA6IGFjY291bnQ7XG4gICAgaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMTUwLCAxMTYsIDIwLCAxOTcsIDIwNSwgMTIxLCAyMjAsIDI0MF0pKSwgMCkpIHsgcmV0dXJuIFJwc0dhbWVBY2NvdW50LkdhbWVTZXNzaW9uOyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFs4MiwgMjI2LCA5OSwgODcsIDE2NCwgMTMwLCAxODEsIDgwXSkpLCAwKSkgeyByZXR1cm4gUnBzR2FtZUFjY291bnQuUGxheWVyUHJvZmlsZTsgfVxuICAgIHRocm93IG5ldyBTb2xhbmFFcnJvcihTT0xBTkFfRVJST1JfX1BST0dSQU1fQ0xJRU5UU19fRkFJTEVEX1RPX0lERU5USUZZX0FDQ09VTlQsIHsgYWNjb3VudERhdGE6IGRhdGEsIHByb2dyYW1OYW1lOiBcInJwc0dhbWVcIiB9KTtcbn1cblxuZXhwb3J0IGVudW0gUnBzR2FtZUluc3RydWN0aW9uIHsgQ2xvc2VQbGF5ZXIsIERlbGVnYXRlUGRhLCBJbml0aWFsaXplUGxheWVyLCBNYWtlQ2hvaWNlLCBPbk1hdGNoRm91bmQsIFBlcnNpc3RSZXN1bHRzLCBQcm9jZXNzVW5kZWxlZ2F0aW9uLCBTdGFydEdhbWUsIFN0YXJ0R2FtZVdpdGhUaWNrZXQgfVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZnlScHNHYW1lSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb246IHsgZGF0YTogUmVhZG9ubHlVaW50OEFycmF5IH0gfCBSZWFkb25seVVpbnQ4QXJyYXkpOiBScHNHYW1lSW5zdHJ1Y3Rpb24ge1xuICAgIGNvbnN0IGRhdGEgPSAnZGF0YScgaW4gaW5zdHJ1Y3Rpb24gPyBpbnN0cnVjdGlvbi5kYXRhIDogaW5zdHJ1Y3Rpb247XG4gICAgaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMjI1LCAyMjcsIDIwNCwgNjMsIDMyLCAxMjIsIDU4LCAyMjddKSksIDApKSB7IHJldHVybiBScHNHYW1lSW5zdHJ1Y3Rpb24uQ2xvc2VQbGF5ZXI7IH1cbmlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzI0OCwgMjE3LCAxOTMsIDQ2LCAxMjQsIDE5MSwgNjQsIDEzNV0pKSwgMCkpIHsgcmV0dXJuIFJwc0dhbWVJbnN0cnVjdGlvbi5EZWxlZ2F0ZVBkYTsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbNzksIDI0OSwgODgsIDE3NywgMjIwLCA2MiwgNTYsIDEyOF0pKSwgMCkpIHsgcmV0dXJuIFJwc0dhbWVJbnN0cnVjdGlvbi5Jbml0aWFsaXplUGxheWVyOyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsyMDcsIDE4LCAyNTEsIDMyLCAxMzUsIDEyMiwgMTYwLCA3N10pKSwgMCkpIHsgcmV0dXJuIFJwc0dhbWVJbnN0cnVjdGlvbi5NYWtlQ2hvaWNlOyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFs2NiwgMjA5LCAxNzAsIDE1OSwgMTAsIDE5NSwgMzQsIDIxNF0pKSwgMCkpIHsgcmV0dXJuIFJwc0dhbWVJbnN0cnVjdGlvbi5Pbk1hdGNoRm91bmQ7IH1cbmlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzksIDE3NSwgNDIsIDIxNywgMiwgNDgsIDgwLCA4MV0pKSwgMCkpIHsgcmV0dXJuIFJwc0dhbWVJbnN0cnVjdGlvbi5QZXJzaXN0UmVzdWx0czsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMTk2LCAyOCwgNDEsIDIwNiwgNDgsIDM3LCA1MSwgMTY3XSkpLCAwKSkgeyByZXR1cm4gUnBzR2FtZUluc3RydWN0aW9uLlByb2Nlc3NVbmRlbGVnYXRpb247IH1cbmlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzI0OSwgNDcsIDI1MiwgMTcyLCAxODQsIDE2MiwgMjQ1LCAxNF0pKSwgMCkpIHsgcmV0dXJuIFJwc0dhbWVJbnN0cnVjdGlvbi5TdGFydEdhbWU7IH1cbmlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzIsIDI1MCwgMjUzLCAyMDIsIDUxLCAxMzgsIDgwLCAyMF0pKSwgMCkpIHsgcmV0dXJuIFJwc0dhbWVJbnN0cnVjdGlvbi5TdGFydEdhbWVXaXRoVGlja2V0OyB9XG4gICAgdGhyb3cgbmV3IFNvbGFuYUVycm9yKFNPTEFOQV9FUlJPUl9fUFJPR1JBTV9DTElFTlRTX19GQUlMRURfVE9fSURFTlRJRllfSU5TVFJVQ1RJT04sIHsgaW5zdHJ1Y3Rpb25EYXRhOiBkYXRhLCBwcm9ncmFtTmFtZTogXCJycHNHYW1lXCIgfSk7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFJwc0dhbWVJbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9ICc4b2h1M1JvYlh5WjJEZWJ5SmpiczJjbzlZQ0cyNzVGVXNWY2tFY21EYkNvcyc+ID1cbnwgeyBpbnN0cnVjdGlvblR5cGU6IFJwc0dhbWVJbnN0cnVjdGlvbi5DbG9zZVBsYXllciB9ICYgUGFyc2VkQ2xvc2VQbGF5ZXJJbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IFJwc0dhbWVJbnN0cnVjdGlvbi5EZWxlZ2F0ZVBkYSB9ICYgUGFyc2VkRGVsZWdhdGVQZGFJbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IFJwc0dhbWVJbnN0cnVjdGlvbi5Jbml0aWFsaXplUGxheWVyIH0gJiBQYXJzZWRJbml0aWFsaXplUGxheWVySW5zdHJ1Y3Rpb248VFByb2dyYW0+XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBScHNHYW1lSW5zdHJ1Y3Rpb24uTWFrZUNob2ljZSB9ICYgUGFyc2VkTWFrZUNob2ljZUluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogUnBzR2FtZUluc3RydWN0aW9uLk9uTWF0Y2hGb3VuZCB9ICYgUGFyc2VkT25NYXRjaEZvdW5kSW5zdHJ1Y3Rpb248VFByb2dyYW0+XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBScHNHYW1lSW5zdHJ1Y3Rpb24uUGVyc2lzdFJlc3VsdHMgfSAmIFBhcnNlZFBlcnNpc3RSZXN1bHRzSW5zdHJ1Y3Rpb248VFByb2dyYW0+XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBScHNHYW1lSW5zdHJ1Y3Rpb24uUHJvY2Vzc1VuZGVsZWdhdGlvbiB9ICYgUGFyc2VkUHJvY2Vzc1VuZGVsZWdhdGlvbkluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogUnBzR2FtZUluc3RydWN0aW9uLlN0YXJ0R2FtZSB9ICYgUGFyc2VkU3RhcnRHYW1lSW5zdHJ1Y3Rpb248VFByb2dyYW0+XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBScHNHYW1lSW5zdHJ1Y3Rpb24uU3RhcnRHYW1lV2l0aFRpY2tldCB9ICYgUGFyc2VkU3RhcnRHYW1lV2l0aFRpY2tldEluc3RydWN0aW9uPFRQcm9ncmFtPlxuXG5cbiAgICAgICAgZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUnBzR2FtZUluc3RydWN0aW9uPFRQcm9ncmFtIGV4dGVuZHMgc3RyaW5nPihcbiAgICAgICAgICAgIGluc3RydWN0aW9uOiBJbnN0cnVjdGlvbjxUUHJvZ3JhbT4gXG4gICAgICAgICAgICAgICAgJiBJbnN0cnVjdGlvbldpdGhEYXRhPFJlYWRvbmx5VWludDhBcnJheT5cbiAgICAgICAgKTogUGFyc2VkUnBzR2FtZUluc3RydWN0aW9uPFRQcm9ncmFtPiB7XG4gICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvblR5cGUgPSBpZGVudGlmeVJwc0dhbWVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbik7XG4gICAgICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgUnBzR2FtZUluc3RydWN0aW9uLkNsb3NlUGxheWVyOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBScHNHYW1lSW5zdHJ1Y3Rpb24uQ2xvc2VQbGF5ZXIsIC4uLnBhcnNlQ2xvc2VQbGF5ZXJJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBScHNHYW1lSW5zdHJ1Y3Rpb24uRGVsZWdhdGVQZGE6IHsgYXNzZXJ0SXNJbnN0cnVjdGlvbldpdGhBY2NvdW50cyhpbnN0cnVjdGlvbik7XG5yZXR1cm4geyBpbnN0cnVjdGlvblR5cGU6IFJwc0dhbWVJbnN0cnVjdGlvbi5EZWxlZ2F0ZVBkYSwgLi4ucGFyc2VEZWxlZ2F0ZVBkYUluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIFJwc0dhbWVJbnN0cnVjdGlvbi5Jbml0aWFsaXplUGxheWVyOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBScHNHYW1lSW5zdHJ1Y3Rpb24uSW5pdGlhbGl6ZVBsYXllciwgLi4ucGFyc2VJbml0aWFsaXplUGxheWVySW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgUnBzR2FtZUluc3RydWN0aW9uLk1ha2VDaG9pY2U6IHsgYXNzZXJ0SXNJbnN0cnVjdGlvbldpdGhBY2NvdW50cyhpbnN0cnVjdGlvbik7XG5yZXR1cm4geyBpbnN0cnVjdGlvblR5cGU6IFJwc0dhbWVJbnN0cnVjdGlvbi5NYWtlQ2hvaWNlLCAuLi5wYXJzZU1ha2VDaG9pY2VJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBScHNHYW1lSW5zdHJ1Y3Rpb24uT25NYXRjaEZvdW5kOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBScHNHYW1lSW5zdHJ1Y3Rpb24uT25NYXRjaEZvdW5kLCAuLi5wYXJzZU9uTWF0Y2hGb3VuZEluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIFJwc0dhbWVJbnN0cnVjdGlvbi5QZXJzaXN0UmVzdWx0czogeyBhc3NlcnRJc0luc3RydWN0aW9uV2l0aEFjY291bnRzKGluc3RydWN0aW9uKTtcbnJldHVybiB7IGluc3RydWN0aW9uVHlwZTogUnBzR2FtZUluc3RydWN0aW9uLlBlcnNpc3RSZXN1bHRzLCAuLi5wYXJzZVBlcnNpc3RSZXN1bHRzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgUnBzR2FtZUluc3RydWN0aW9uLlByb2Nlc3NVbmRlbGVnYXRpb246IHsgYXNzZXJ0SXNJbnN0cnVjdGlvbldpdGhBY2NvdW50cyhpbnN0cnVjdGlvbik7XG5yZXR1cm4geyBpbnN0cnVjdGlvblR5cGU6IFJwc0dhbWVJbnN0cnVjdGlvbi5Qcm9jZXNzVW5kZWxlZ2F0aW9uLCAuLi5wYXJzZVByb2Nlc3NVbmRlbGVnYXRpb25JbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBScHNHYW1lSW5zdHJ1Y3Rpb24uU3RhcnRHYW1lOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBScHNHYW1lSW5zdHJ1Y3Rpb24uU3RhcnRHYW1lLCAuLi5wYXJzZVN0YXJ0R2FtZUluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIFJwc0dhbWVJbnN0cnVjdGlvbi5TdGFydEdhbWVXaXRoVGlja2V0OiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBScHNHYW1lSW5zdHJ1Y3Rpb24uU3RhcnRHYW1lV2l0aFRpY2tldCwgLi4ucGFyc2VTdGFydEdhbWVXaXRoVGlja2V0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgU29sYW5hRXJyb3IoU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX1VOUkVDT0dOSVpFRF9JTlNUUlVDVElPTl9UWVBFLCB7IGluc3RydWN0aW9uVHlwZTogaW5zdHJ1Y3Rpb25UeXBlIGFzIHN0cmluZywgcHJvZ3JhbU5hbWU6IFwicnBzR2FtZVwiIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbmV4cG9ydCB0eXBlIFJwc0dhbWVQbHVnaW4gPSB7IGFjY291bnRzOiBScHNHYW1lUGx1Z2luQWNjb3VudHM7IGluc3RydWN0aW9uczogUnBzR2FtZVBsdWdpbkluc3RydWN0aW9uczsgfVxuXG5leHBvcnQgdHlwZSBScHNHYW1lUGx1Z2luQWNjb3VudHMgPSB7IGdhbWVTZXNzaW9uOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRHYW1lU2Vzc2lvbkNvZGVjPiAmIFNlbGZGZXRjaEZ1bmN0aW9uczxHYW1lU2Vzc2lvbkFyZ3MsIEdhbWVTZXNzaW9uPjsgcGxheWVyUHJvZmlsZTogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0UGxheWVyUHJvZmlsZUNvZGVjPiAmIFNlbGZGZXRjaEZ1bmN0aW9uczxQbGF5ZXJQcm9maWxlQXJncywgUGxheWVyUHJvZmlsZT47IH1cblxuZXhwb3J0IHR5cGUgUnBzR2FtZVBsdWdpbkluc3RydWN0aW9ucyA9IHsgY2xvc2VQbGF5ZXI6IChpbnB1dDogTWFrZU9wdGlvbmFsPENsb3NlUGxheWVyQXN5bmNJbnB1dCwgXCJwYXllclwiPikgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0Q2xvc2VQbGF5ZXJJbnN0cnVjdGlvbkFzeW5jPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgZGVsZWdhdGVQZGE6IChpbnB1dDogTWFrZU9wdGlvbmFsPERlbGVnYXRlUGRhQXN5bmNJbnB1dCwgXCJwYXllclwiPikgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RGVsZWdhdGVQZGFJbnN0cnVjdGlvbkFzeW5jPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgaW5pdGlhbGl6ZVBsYXllcjogKGlucHV0OiBNYWtlT3B0aW9uYWw8SW5pdGlhbGl6ZVBsYXllckFzeW5jSW5wdXQsIFwicGF5ZXJcIj4pID0+IFJldHVyblR5cGU8dHlwZW9mIGdldEluaXRpYWxpemVQbGF5ZXJJbnN0cnVjdGlvbkFzeW5jPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgbWFrZUNob2ljZTogKGlucHV0OiBNYWtlQ2hvaWNlSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldE1ha2VDaG9pY2VJbnN0cnVjdGlvbj4gJiBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnM7IG9uTWF0Y2hGb3VuZDogKGlucHV0OiBPbk1hdGNoRm91bmRJbnB1dCkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0T25NYXRjaEZvdW5kSW5zdHJ1Y3Rpb24+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBwZXJzaXN0UmVzdWx0czogKGlucHV0OiBNYWtlT3B0aW9uYWw8UGVyc2lzdFJlc3VsdHNJbnB1dCwgXCJwYXllclwiPikgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0UGVyc2lzdFJlc3VsdHNJbnN0cnVjdGlvbj4gJiBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnM7IHByb2Nlc3NVbmRlbGVnYXRpb246IChpbnB1dDogTWFrZU9wdGlvbmFsPFByb2Nlc3NVbmRlbGVnYXRpb25JbnB1dCwgXCJwYXllclwiPikgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0UHJvY2Vzc1VuZGVsZWdhdGlvbkluc3RydWN0aW9uPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgc3RhcnRHYW1lOiAoaW5wdXQ6IFN0YXJ0R2FtZUFzeW5jSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldFN0YXJ0R2FtZUluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBzdGFydEdhbWVXaXRoVGlja2V0OiAoaW5wdXQ6IFN0YXJ0R2FtZVdpdGhUaWNrZXRBc3luY0lucHV0KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRTdGFydEdhbWVXaXRoVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYz4gJiBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnM7IH1cblxuZXhwb3J0IHR5cGUgUnBzR2FtZVBsdWdpblJlcXVpcmVtZW50cyA9IENsaWVudFdpdGhScGM8R2V0QWNjb3VudEluZm9BcGkgJiBHZXRNdWx0aXBsZUFjY291bnRzQXBpPiAmIENsaWVudFdpdGhQYXllciAmIENsaWVudFdpdGhUcmFuc2FjdGlvblBsYW5uaW5nICYgQ2xpZW50V2l0aFRyYW5zYWN0aW9uU2VuZGluZ1xuXG5leHBvcnQgZnVuY3Rpb24gcnBzR2FtZVByb2dyYW0oKSB7XG4gICAgcmV0dXJuIDxUIGV4dGVuZHMgUnBzR2FtZVBsdWdpblJlcXVpcmVtZW50cz4oY2xpZW50OiBUKSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLmNsaWVudCwgcnBzR2FtZTogPFJwc0dhbWVQbHVnaW4+eyBhY2NvdW50czogeyBnYW1lU2Vzc2lvbjogYWRkU2VsZkZldGNoRnVuY3Rpb25zKGNsaWVudCwgZ2V0R2FtZVNlc3Npb25Db2RlYygpKSwgcGxheWVyUHJvZmlsZTogYWRkU2VsZkZldGNoRnVuY3Rpb25zKGNsaWVudCwgZ2V0UGxheWVyUHJvZmlsZUNvZGVjKCkpIH0sIGluc3RydWN0aW9uczogeyBjbG9zZVBsYXllcjogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0Q2xvc2VQbGF5ZXJJbnN0cnVjdGlvbkFzeW5jKHsgLi4uaW5wdXQsIHBheWVyOiBpbnB1dC5wYXllciA/PyBjbGllbnQucGF5ZXIuYWRkcmVzcyB9KSksIGRlbGVnYXRlUGRhOiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXREZWxlZ2F0ZVBkYUluc3RydWN0aW9uQXN5bmMoeyAuLi5pbnB1dCwgcGF5ZXI6IGlucHV0LnBheWVyID8/IGNsaWVudC5wYXllciB9KSksIGluaXRpYWxpemVQbGF5ZXI6IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldEluaXRpYWxpemVQbGF5ZXJJbnN0cnVjdGlvbkFzeW5jKHsgLi4uaW5wdXQsIHBheWVyOiBpbnB1dC5wYXllciA/PyBjbGllbnQucGF5ZXIgfSkpLCBtYWtlQ2hvaWNlOiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXRNYWtlQ2hvaWNlSW5zdHJ1Y3Rpb24oaW5wdXQpKSwgb25NYXRjaEZvdW5kOiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXRPbk1hdGNoRm91bmRJbnN0cnVjdGlvbihpbnB1dCkpLCBwZXJzaXN0UmVzdWx0czogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0UGVyc2lzdFJlc3VsdHNJbnN0cnVjdGlvbih7IC4uLmlucHV0LCBwYXllcjogaW5wdXQucGF5ZXIgPz8gY2xpZW50LnBheWVyIH0pKSwgcHJvY2Vzc1VuZGVsZWdhdGlvbjogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0UHJvY2Vzc1VuZGVsZWdhdGlvbkluc3RydWN0aW9uKHsgLi4uaW5wdXQsIHBheWVyOiBpbnB1dC5wYXllciA/PyBjbGllbnQucGF5ZXIuYWRkcmVzcyB9KSksIHN0YXJ0R2FtZTogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0U3RhcnRHYW1lSW5zdHJ1Y3Rpb25Bc3luYyhpbnB1dCkpLCBzdGFydEdhbWVXaXRoVGlja2V0OiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXRTdGFydEdhbWVXaXRoVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYyhpbnB1dCkpIH0gfSB9O1xuICAgIH07XG59XG5cbnR5cGUgTWFrZU9wdGlvbmFsPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IE9taXQ8VCwgSz4gJiBQYXJ0aWFsPFBpY2s8VCwgSz4+OyJdfQ==
@@ -0,0 +1,34 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ import { type Address, type Codec, type Decoder, type Encoder, type GetDiscriminatedUnionVariant, type GetDiscriminatedUnionVariantContent } from '@solana/kit';
9
+ export type AccountType = {
10
+ __kind: "PlayerProfile";
11
+ player: Address;
12
+ } | {
13
+ __kind: "GameSession";
14
+ p1: Address;
15
+ p2: Address;
16
+ id: bigint;
17
+ };
18
+ export type AccountTypeArgs = {
19
+ __kind: "PlayerProfile";
20
+ player: Address;
21
+ } | {
22
+ __kind: "GameSession";
23
+ p1: Address;
24
+ p2: Address;
25
+ id: number | bigint;
26
+ };
27
+ export declare function getAccountTypeEncoder(): Encoder<AccountTypeArgs>;
28
+ export declare function getAccountTypeDecoder(): Decoder<AccountType>;
29
+ export declare function getAccountTypeCodec(): Codec<AccountTypeArgs, AccountType>;
30
+ export declare function accountType(kind: 'PlayerProfile', data: GetDiscriminatedUnionVariantContent<AccountTypeArgs, '__kind', 'PlayerProfile'>): GetDiscriminatedUnionVariant<AccountTypeArgs, '__kind', 'PlayerProfile'>;
31
+ export declare function accountType(kind: 'GameSession', data: GetDiscriminatedUnionVariantContent<AccountTypeArgs, '__kind', 'GameSession'>): GetDiscriminatedUnionVariant<AccountTypeArgs, '__kind', 'GameSession'>;
32
+ export declare function isAccountType<K extends AccountType['__kind']>(kind: K, value: AccountType): value is AccountType & {
33
+ __kind: K;
34
+ };