@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,45 @@
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 ReadonlySignerAccount, type ReadonlyUint8Array, type TransactionSigner, type WritableAccount } from '@solana/kit';
9
+ import { RPS_GAME_PROGRAM_ADDRESS } from '../programs';
10
+ export declare const CLOSE_PLAYER_DISCRIMINATOR: Uint8Array<ArrayBuffer>;
11
+ export declare function getClosePlayerDiscriminatorBytes(): ReadonlyUint8Array<ArrayBuffer>;
12
+ export type ClosePlayerInstruction<TProgram extends string = typeof RPS_GAME_PROGRAM_ADDRESS, TAccountProfile extends string | AccountMeta<string> = string, TAccountPlayer extends string | AccountMeta<string> = string, TAccountPayer extends string | AccountMeta<string> = string, TRemainingAccounts extends readonly AccountMeta<string>[] = []> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<[TAccountProfile extends string ? WritableAccount<TAccountProfile> : TAccountProfile, TAccountPlayer extends string ? ReadonlySignerAccount<TAccountPlayer> & AccountSignerMeta<TAccountPlayer> : TAccountPlayer, TAccountPayer extends string ? WritableAccount<TAccountPayer> : TAccountPayer, ...TRemainingAccounts]>;
13
+ export type ClosePlayerInstructionData = {
14
+ discriminator: ReadonlyUint8Array;
15
+ };
16
+ export type ClosePlayerInstructionDataArgs = {};
17
+ export declare function getClosePlayerInstructionDataEncoder(): FixedSizeEncoder<ClosePlayerInstructionDataArgs>;
18
+ export declare function getClosePlayerInstructionDataDecoder(): FixedSizeDecoder<ClosePlayerInstructionData>;
19
+ export declare function getClosePlayerInstructionDataCodec(): FixedSizeCodec<ClosePlayerInstructionDataArgs, ClosePlayerInstructionData>;
20
+ export type ClosePlayerAsyncInput<TAccountProfile extends string = string, TAccountPlayer extends string = string, TAccountPayer extends string = string> = {
21
+ profile?: Address<TAccountProfile>;
22
+ player: TransactionSigner<TAccountPlayer>;
23
+ payer: Address<TAccountPayer>;
24
+ };
25
+ export declare function getClosePlayerInstructionAsync<TAccountProfile extends string, TAccountPlayer extends string, TAccountPayer extends string, TProgramAddress extends Address = typeof RPS_GAME_PROGRAM_ADDRESS>(input: ClosePlayerAsyncInput<TAccountProfile, TAccountPlayer, TAccountPayer>, config?: {
26
+ programAddress?: TProgramAddress;
27
+ }): Promise<ClosePlayerInstruction<TProgramAddress, TAccountProfile, TAccountPlayer, TAccountPayer>>;
28
+ export type ClosePlayerInput<TAccountProfile extends string = string, TAccountPlayer extends string = string, TAccountPayer extends string = string> = {
29
+ profile: Address<TAccountProfile>;
30
+ player: TransactionSigner<TAccountPlayer>;
31
+ payer: Address<TAccountPayer>;
32
+ };
33
+ export declare function getClosePlayerInstruction<TAccountProfile extends string, TAccountPlayer extends string, TAccountPayer extends string, TProgramAddress extends Address = typeof RPS_GAME_PROGRAM_ADDRESS>(input: ClosePlayerInput<TAccountProfile, TAccountPlayer, TAccountPayer>, config?: {
34
+ programAddress?: TProgramAddress;
35
+ }): ClosePlayerInstruction<TProgramAddress, TAccountProfile, TAccountPlayer, TAccountPayer>;
36
+ export type ParsedClosePlayerInstruction<TProgram extends string = typeof RPS_GAME_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[]> = {
37
+ programAddress: Address<TProgram>;
38
+ accounts: {
39
+ profile: TAccountMetas[0];
40
+ player: TAccountMetas[1];
41
+ payer: TAccountMetas[2];
42
+ };
43
+ data: ClosePlayerInstructionData;
44
+ };
45
+ export declare function parseClosePlayerInstruction<TProgram extends string, TAccountMetas extends readonly AccountMeta[]>(instruction: Instruction<TProgram> & InstructionWithAccounts<TAccountMetas> & InstructionWithData<ReadonlyUint8Array>): ParsedClosePlayerInstruction<TProgram, TAccountMetas>;
@@ -0,0 +1,56 @@
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, getAddressEncoder, getBytesDecoder, getBytesEncoder, getProgramDerivedAddress, getStructDecoder, getStructEncoder, SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, SolanaError, transformEncoder } from '@solana/kit';
9
+ import { getAccountMetaFactory, getAddressFromResolvedInstructionAccount } from '@solana/program-client-core';
10
+ import { RPS_GAME_PROGRAM_ADDRESS } from '../programs';
11
+ export const CLOSE_PLAYER_DISCRIMINATOR = new Uint8Array([225, 227, 204, 63, 32, 122, 58, 227]);
12
+ export function getClosePlayerDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode(CLOSE_PLAYER_DISCRIMINATOR); }
13
+ export function getClosePlayerInstructionDataEncoder() {
14
+ return transformEncoder(getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]), (value) => ({ ...value, discriminator: CLOSE_PLAYER_DISCRIMINATOR }));
15
+ }
16
+ export function getClosePlayerInstructionDataDecoder() {
17
+ return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)]]);
18
+ }
19
+ export function getClosePlayerInstructionDataCodec() {
20
+ return combineCodec(getClosePlayerInstructionDataEncoder(), getClosePlayerInstructionDataDecoder());
21
+ }
22
+ export async function getClosePlayerInstructionAsync(input, config) {
23
+ // Program address.
24
+ const programAddress = config?.programAddress ?? RPS_GAME_PROGRAM_ADDRESS;
25
+ // Original accounts.
26
+ const originalAccounts = { profile: { value: input.profile ?? null, isWritable: true }, player: { value: input.player ?? null, isWritable: false }, payer: { value: input.payer ?? null, isWritable: true } };
27
+ const accounts = originalAccounts;
28
+ // Resolve default values.
29
+ if (!accounts.profile.value) {
30
+ accounts.profile.value = await getProgramDerivedAddress({ programAddress, seeds: [getBytesEncoder().encode(new Uint8Array([112, 108, 97, 121, 101, 114, 95, 112, 114, 111, 102, 105, 108, 101, 95, 118, 51, 53])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("player", accounts.player.value))] });
31
+ }
32
+ const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
33
+ return Object.freeze({ accounts: [getAccountMeta("profile", accounts.profile), getAccountMeta("player", accounts.player), getAccountMeta("payer", accounts.payer)], data: getClosePlayerInstructionDataEncoder().encode({}), programAddress });
34
+ }
35
+ export function getClosePlayerInstruction(input, config) {
36
+ // Program address.
37
+ const programAddress = config?.programAddress ?? RPS_GAME_PROGRAM_ADDRESS;
38
+ // Original accounts.
39
+ const originalAccounts = { profile: { value: input.profile ?? null, isWritable: true }, player: { value: input.player ?? null, isWritable: false }, payer: { value: input.payer ?? null, isWritable: true } };
40
+ const accounts = originalAccounts;
41
+ const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
42
+ return Object.freeze({ accounts: [getAccountMeta("profile", accounts.profile), getAccountMeta("player", accounts.player), getAccountMeta("payer", accounts.payer)], data: getClosePlayerInstructionDataEncoder().encode({}), programAddress });
43
+ }
44
+ export function parseClosePlayerInstruction(instruction) {
45
+ if (instruction.accounts.length < 3) {
46
+ throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { actualAccountMetas: instruction.accounts.length, expectedAccountMetas: 3 });
47
+ }
48
+ let accountIndex = 0;
49
+ const getNextAccount = () => {
50
+ const accountMeta = instruction.accounts[accountIndex];
51
+ accountIndex += 1;
52
+ return accountMeta;
53
+ };
54
+ return { programAddress: instruction.programAddress, accounts: { profile: getNextAccount(), player: getNextAccount(), payer: getNextAccount() }, data: getClosePlayerInstructionDataDecoder().decode(instruction.data) };
55
+ }
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvc2VQbGF5ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2VuZXJhdGVkL3Jwcy1nYW1lL2luc3RydWN0aW9ucy9jbG9zZVBsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSx5REFBeUQsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQTBTLE1BQU0sYUFBYSxDQUFDO0FBQ2hrQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsd0NBQXdDLEVBQW1DLE1BQU0sNkJBQTZCLENBQUM7QUFDL0ksT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFaEcsTUFBTSxVQUFVLGdDQUFnQyxLQUFLLE9BQU8sY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQVN0SSxNQUFNLFVBQVUsb0NBQW9DO0lBQ2hELE9BQU8sZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxhQUFhLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQyxDQUFD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RSxXQUFXLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLG9DQUFvQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgY29kZSB3YXMgQVVUT0dFTkVSQVRFRCB1c2luZyB0aGUgQ29kYW1hIGxpYnJhcnkuXG4gKiBQbGVhc2UgRE8gTk9UIEVESVQgVEhJUyBGSUxFLCBpbnN0ZWFkIHVzZSB2aXNpdG9yc1xuICogdG8gYWRkIGZlYXR1cmVzLCB0aGVuIHJlcnVuIENvZGFtYSB0byB1cGRhdGUgaXQuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY29kYW1hLWlkbC9jb2RhbWFcbiAqL1xuXG5pbXBvcnQgeyBjb21iaW5lQ29kZWMsIGZpeERlY29kZXJTaXplLCBmaXhFbmNvZGVyU2l6ZSwgZ2V0QWRkcmVzc0VuY29kZXIsIGdldEJ5dGVzRGVjb2RlciwgZ2V0Qnl0ZXNFbmNvZGVyLCBnZXRQcm9ncmFtRGVyaXZlZEFkZHJlc3MsIGdldFN0cnVjdERlY29kZXIsIGdldFN0cnVjdEVuY29kZXIsIFNPTEFOQV9FUlJPUl9fUFJPR1JBTV9DTElFTlRTX19JTlNVRkZJQ0lFTlRfQUNDT1VOVF9NRVRBUywgU29sYW5hRXJyb3IsIHRyYW5zZm9ybUVuY29kZXIsIHR5cGUgQWNjb3VudE1ldGEsIHR5cGUgQWNjb3VudFNpZ25lck1ldGEsIHR5cGUgQWRkcmVzcywgdHlwZSBGaXhlZFNpemVDb2RlYywgdHlwZSBGaXhlZFNpemVEZWNvZGVyLCB0eXBlIEZpeGVkU2l6ZUVuY29kZXIsIHR5cGUgSW5zdHJ1Y3Rpb24sIHR5cGUgSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMsIHR5cGUgSW5zdHJ1Y3Rpb25XaXRoRGF0YSwgdHlwZSBSZWFkb25seVNpZ25lckFjY291bnQsIHR5cGUgUmVhZG9ubHlVaW50OEFycmF5LCB0eXBlIFRyYW5zYWN0aW9uU2lnbmVyLCB0eXBlIFdyaXRhYmxlQWNjb3VudCB9IGZyb20gJ0Bzb2xhbmEva2l0JztcbmltcG9ydCB7IGdldEFjY291bnRNZXRhRmFjdG9yeSwgZ2V0QWRkcmVzc0Zyb21SZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudCwgdHlwZSBSZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudCB9IGZyb20gJ0Bzb2xhbmEvcHJvZ3JhbS1jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBSUFNfR0FNRV9QUk9HUkFNX0FERFJFU1MgfSBmcm9tICcuLi9wcm9ncmFtcyc7XG5cbmV4cG9ydCBjb25zdCBDTE9TRV9QTEFZRVJfRElTQ1JJTUlOQVRPUiA9IG5ldyBVaW50OEFycmF5KFsyMjUsIDIyNywgMjA0LCA2MywgMzIsIDEyMiwgNTgsIDIyN10pO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xvc2VQbGF5ZXJEaXNjcmltaW5hdG9yQnl0ZXMoKSB7IHJldHVybiBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKENMT1NFX1BMQVlFUl9ESVNDUklNSU5BVE9SKTsgfVxuXG5leHBvcnQgdHlwZSBDbG9zZVBsYXllckluc3RydWN0aW9uPFRQcm9ncmFtIGV4dGVuZHMgc3RyaW5nID0gdHlwZW9mIFJQU19HQU1FX1BST0dSQU1fQUREUkVTUywgVEFjY291bnRQcm9maWxlIGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnRQbGF5ZXIgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVFJlbWFpbmluZ0FjY291bnRzIGV4dGVuZHMgcmVhZG9ubHkgQWNjb3VudE1ldGE8c3RyaW5nPltdID0gW10+ID1cbkluc3RydWN0aW9uPFRQcm9ncmFtPiAmIEluc3RydWN0aW9uV2l0aERhdGE8UmVhZG9ubHlVaW50OEFycmF5PiAmIEluc3RydWN0aW9uV2l0aEFjY291bnRzPFtUQWNjb3VudFByb2ZpbGUgZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZUFjY291bnQ8VEFjY291bnRQcm9maWxlPiA6IFRBY2NvdW50UHJvZmlsZSwgVEFjY291bnRQbGF5ZXIgZXh0ZW5kcyBzdHJpbmcgPyBSZWFkb25seVNpZ25lckFjY291bnQ8VEFjY291bnRQbGF5ZXI+ICYgQWNjb3VudFNpZ25lck1ldGE8VEFjY291bnRQbGF5ZXI+IDogVEFjY291bnRQbGF5ZXIsIFRBY2NvdW50UGF5ZXIgZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZUFjY291bnQ8VEFjY291bnRQYXllcj4gOiBUQWNjb3VudFBheWVyLCAuLi5UUmVtYWluaW5nQWNjb3VudHNdPjtcblxuZXhwb3J0IHR5cGUgQ2xvc2VQbGF5ZXJJbnN0cnVjdGlvbkRhdGEgPSB7IGRpc2NyaW1pbmF0b3I6IFJlYWRvbmx5VWludDhBcnJheTsgIH07XG5cbmV4cG9ydCB0eXBlIENsb3NlUGxheWVySW5zdHJ1Y3Rpb25EYXRhQXJncyA9IHsgIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbG9zZVBsYXllckluc3RydWN0aW9uRGF0YUVuY29kZXIoKTogRml4ZWRTaXplRW5jb2RlcjxDbG9zZVBsYXllckluc3RydWN0aW9uRGF0YUFyZ3M+IHtcbiAgICByZXR1cm4gdHJhbnNmb3JtRW5jb2RlcihnZXRTdHJ1Y3RFbmNvZGVyKFtbJ2Rpc2NyaW1pbmF0b3InLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCldXSksICh2YWx1ZSkgPT4gKHsgLi4udmFsdWUsIGRpc2NyaW1pbmF0b3I6IENMT1NFX1BMQVlFUl9ESVNDUklNSU5BVE9SIH0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsb3NlUGxheWVySW5zdHJ1Y3Rpb25EYXRhRGVjb2RlcigpOiBGaXhlZFNpemVEZWNvZGVyPENsb3NlUGxheWVySW5zdHJ1Y3Rpb25EYXRhPiB7XG4gICAgcmV0dXJuIGdldFN0cnVjdERlY29kZXIoW1snZGlzY3JpbWluYXRvcicsIGZpeERlY29kZXJTaXplKGdldEJ5dGVzRGVjb2RlcigpLCA4KV1dKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsb3NlUGxheWVySW5zdHJ1Y3Rpb25EYXRhQ29kZWMoKTogRml4ZWRTaXplQ29kZWM8Q2xvc2VQbGF5ZXJJbnN0cnVjdGlvbkRhdGFBcmdzLCBDbG9zZVBsYXllckluc3RydWN0aW9uRGF0YT4ge1xuICAgIHJldHVybiBjb21iaW5lQ29kZWMoZ2V0Q2xvc2VQbGF5ZXJJbnN0cnVjdGlvbkRhdGFFbmNvZGVyKCksIGdldENsb3NlUGxheWVySW5zdHJ1Y3Rpb25EYXRhRGVjb2RlcigpKTtcbn1cblxuZXhwb3J0IHR5cGUgQ2xvc2VQbGF5ZXJBc3luY0lucHV0PFRBY2NvdW50UHJvZmlsZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRQbGF5ZXIgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGF5ZXIgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID0gIHtcbiAgcHJvZmlsZT86IEFkZHJlc3M8VEFjY291bnRQcm9maWxlPjtcbnBsYXllcjogVHJhbnNhY3Rpb25TaWduZXI8VEFjY291bnRQbGF5ZXI+O1xucGF5ZXI6IEFkZHJlc3M8VEFjY291bnRQYXllcj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDbG9zZVBsYXllckluc3RydWN0aW9uQXN5bmM8VEFjY291bnRQcm9maWxlIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBsYXllciBleHRlbmRzIHN0cmluZywgVEFjY291bnRQYXllciBleHRlbmRzIHN0cmluZywgVFByb2dyYW1BZGRyZXNzIGV4dGVuZHMgQWRkcmVzcyA9IHR5cGVvZiBSUFNfR0FNRV9QUk9HUkFNX0FERFJFU1M+KGlucHV0OiBDbG9zZVBsYXllckFzeW5jSW5wdXQ8VEFjY291bnRQcm9maWxlLCBUQWNjb3VudFBsYXllciwgVEFjY291bnRQYXllcj4sIGNvbmZpZz86IHsgcHJvZ3JhbUFkZHJlc3M/OiBUUHJvZ3JhbUFkZHJlc3MgfSApOiBQcm9taXNlPENsb3NlUGxheWVySW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudFByb2ZpbGUsIFRBY2NvdW50UGxheWVyLCBUQWNjb3VudFBheWVyPj4ge1xuICAvLyBQcm9ncmFtIGFkZHJlc3MuXG5jb25zdCBwcm9ncmFtQWRkcmVzcyA9IGNvbmZpZz8ucHJvZ3JhbUFkZHJlc3MgPz8gUlBTX0dBTUVfUFJPR1JBTV9BRERSRVNTO1xuXG4gLy8gT3JpZ2luYWwgYWNjb3VudHMuXG5jb25zdCBvcmlnaW5hbEFjY291bnRzID0geyBwcm9maWxlOiB7IHZhbHVlOiBpbnB1dC5wcm9maWxlID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgcGxheWVyOiB7IHZhbHVlOiBpbnB1dC5wbGF5ZXIgPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSwgcGF5ZXI6IHsgdmFsdWU6IGlucHV0LnBheWVyID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSB9XG5jb25zdCBhY2NvdW50cyA9IG9yaWdpbmFsQWNjb3VudHMgYXMgUmVjb3JkPGtleW9mIHR5cGVvZiBvcmlnaW5hbEFjY291bnRzLCBSZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudD47XG5cblxuLy8gUmVzb2x2ZSBkZWZhdWx0IHZhbHVlcy5cbmlmICghYWNjb3VudHMucHJvZmlsZS52YWx1ZSkge1xuYWNjb3VudHMucHJvZmlsZS52YWx1ZSA9IGF3YWl0IGdldFByb2dyYW1EZXJpdmVkQWRkcmVzcyh7IHByb2dyYW1BZGRyZXNzLCBzZWVkczogW2dldEJ5dGVzRW5jb2RlcigpLmVuY29kZShuZXcgVWludDhBcnJheShbMTEyLCAxMDgsIDk3LCAxMjEsIDEwMSwgMTE0LCA5NSwgMTEyLCAxMTQsIDExMSwgMTAyLCAxMDUsIDEwOCwgMTAxLCA5NSwgMTE4LCA1MSwgNTNdKSksIGdldEFkZHJlc3NFbmNvZGVyKCkuZW5jb2RlKGdldEFkZHJlc3NGcm9tUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQoXCJwbGF5ZXJcIiwgYWNjb3VudHMucGxheWVyLnZhbHVlKSldIH0pO1xufVxuXG5jb25zdCBnZXRBY2NvdW50TWV0YSA9IGdldEFjY291bnRNZXRhRmFjdG9yeShwcm9ncmFtQWRkcmVzcywgJ3Byb2dyYW1JZCcpO1xucmV0dXJuIE9iamVjdC5mcmVlemUoeyBhY2NvdW50czogW2dldEFjY291bnRNZXRhKFwicHJvZmlsZVwiLCBhY2NvdW50cy5wcm9maWxlKSwgZ2V0QWNjb3VudE1ldGEoXCJwbGF5ZXJcIiwgYWNjb3VudHMucGxheWVyKSwgZ2V0QWNjb3VudE1ldGEoXCJwYXllclwiLCBhY2NvdW50cy5wYXllcildLCBkYXRhOiBnZXRDbG9zZVBsYXllckluc3RydWN0aW9uRGF0YUVuY29kZXIoKS5lbmNvZGUoe30pLCBwcm9ncmFtQWRkcmVzcyB9IGFzIENsb3NlUGxheWVySW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudFByb2ZpbGUsIFRBY2NvdW50UGxheWVyLCBUQWNjb3VudFBheWVyPik7XG59XG5cbmV4cG9ydCB0eXBlIENsb3NlUGxheWVySW5wdXQ8VEFjY291bnRQcm9maWxlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFBsYXllciBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRQYXllciBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSAge1xuICBwcm9maWxlOiBBZGRyZXNzPFRBY2NvdW50UHJvZmlsZT47XG5wbGF5ZXI6IFRyYW5zYWN0aW9uU2lnbmVyPFRBY2NvdW50UGxheWVyPjtcbnBheWVyOiBBZGRyZXNzPFRBY2NvdW50UGF5ZXI+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xvc2VQbGF5ZXJJbnN0cnVjdGlvbjxUQWNjb3VudFByb2ZpbGUgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50UGxheWVyIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nLCBUUHJvZ3JhbUFkZHJlc3MgZXh0ZW5kcyBBZGRyZXNzID0gdHlwZW9mIFJQU19HQU1FX1BST0dSQU1fQUREUkVTUz4oaW5wdXQ6IENsb3NlUGxheWVySW5wdXQ8VEFjY291bnRQcm9maWxlLCBUQWNjb3VudFBsYXllciwgVEFjY291bnRQYXllcj4sIGNvbmZpZz86IHsgcHJvZ3JhbUFkZHJlc3M/OiBUUHJvZ3JhbUFkZHJlc3MgfSApOiBDbG9zZVBsYXllckluc3RydWN0aW9uPFRQcm9ncmFtQWRkcmVzcywgVEFjY291bnRQcm9maWxlLCBUQWNjb3VudFBsYXllciwgVEFjY291bnRQYXllcj4ge1xuICAvLyBQcm9ncmFtIGFkZHJlc3MuXG5jb25zdCBwcm9ncmFtQWRkcmVzcyA9IGNvbmZpZz8ucHJvZ3JhbUFkZHJlc3MgPz8gUlBTX0dBTUVfUFJPR1JBTV9BRERSRVNTO1xuXG4gLy8gT3JpZ2luYWwgYWNjb3VudHMuXG5jb25zdCBvcmlnaW5hbEFjY291bnRzID0geyBwcm9maWxlOiB7IHZhbHVlOiBpbnB1dC5wcm9maWxlID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgcGxheWVyOiB7IHZhbHVlOiBpbnB1dC5wbGF5ZXIgPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSwgcGF5ZXI6IHsgdmFsdWU6IGlucHV0LnBheWVyID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSB9XG5jb25zdCBhY2NvdW50cyA9IG9yaWdpbmFsQWNjb3VudHMgYXMgUmVjb3JkPGtleW9mIHR5cGVvZiBvcmlnaW5hbEFjY291bnRzLCBSZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudD47XG5cblxuXG5cbmNvbnN0IGdldEFjY291bnRNZXRhID0gZ2V0QWNjb3VudE1ldGFGYWN0b3J5KHByb2dyYW1BZGRyZXNzLCAncHJvZ3JhbUlkJyk7XG5yZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IGFjY291bnRzOiBbZ2V0QWNjb3VudE1ldGEoXCJwcm9maWxlXCIsIGFjY291bnRzLnByb2ZpbGUpLCBnZXRBY2NvdW50TWV0YShcInBsYXllclwiLCBhY2NvdW50cy5wbGF5ZXIpLCBnZXRBY2NvdW50TWV0YShcInBheWVyXCIsIGFjY291bnRzLnBheWVyKV0sIGRhdGE6IGdldENsb3NlUGxheWVySW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpLmVuY29kZSh7fSksIHByb2dyYW1BZGRyZXNzIH0gYXMgQ2xvc2VQbGF5ZXJJbnN0cnVjdGlvbjxUUHJvZ3JhbUFkZHJlc3MsIFRBY2NvdW50UHJvZmlsZSwgVEFjY291bnRQbGF5ZXIsIFRBY2NvdW50UGF5ZXI+KTtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkQ2xvc2VQbGF5ZXJJbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHR5cGVvZiBSUFNfR0FNRV9QUk9HUkFNX0FERFJFU1MsIFRBY2NvdW50TWV0YXMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YVtdID0gcmVhZG9ubHkgQWNjb3VudE1ldGFbXT4gPSB7IHByb2dyYW1BZGRyZXNzOiBBZGRyZXNzPFRQcm9ncmFtPjtcbmFjY291bnRzOiB7XG5wcm9maWxlOiBUQWNjb3VudE1ldGFzWzBdO1xucGxheWVyOiBUQWNjb3VudE1ldGFzWzFdO1xucGF5ZXI6IFRBY2NvdW50TWV0YXNbMl07XG59O1xuZGF0YTogQ2xvc2VQbGF5ZXJJbnN0cnVjdGlvbkRhdGE7IH07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNsb3NlUGxheWVySW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50TWV0YXMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YVtdPihpbnN0cnVjdGlvbjogSW5zdHJ1Y3Rpb248VFByb2dyYW0+ICYgSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHM8VEFjY291bnRNZXRhcz4gJiBJbnN0cnVjdGlvbldpdGhEYXRhPFJlYWRvbmx5VWludDhBcnJheT4pOiBQYXJzZWRDbG9zZVBsYXllckluc3RydWN0aW9uPFRQcm9ncmFtLCBUQWNjb3VudE1ldGFzPiB7XG4gIGlmIChpbnN0cnVjdGlvbi5hY2NvdW50cy5sZW5ndGggPCAzKSB7XG4gIHRocm93IG5ldyBTb2xhbmFFcnJvcihTT0xBTkFfRVJST1JfX1BST0dSQU1fQ0xJRU5UU19fSU5TVUZGSUNJRU5UX0FDQ09VTlRfTUVUQVMsIHsgYWN0dWFsQWNjb3VudE1ldGFzOiBpbnN0cnVjdGlvbi5hY2NvdW50cy5sZW5ndGgsIGV4cGVjdGVkQWNjb3VudE1ldGFzOiAzIH0pO1xufVxubGV0IGFjY291bnRJbmRleCA9IDA7XG5jb25zdCBnZXROZXh0QWNjb3VudCA9ICgpID0+IHtcbiAgY29uc3QgYWNjb3VudE1ldGEgPSAoaW5zdHJ1Y3Rpb24uYWNjb3VudHMgYXMgVEFjY291bnRNZXRhcylbYWNjb3VudEluZGV4XSE7XG4gIGFjY291bnRJbmRleCArPSAxO1xuICByZXR1cm4gYWNjb3VudE1ldGE7XG59XG4gIHJldHVybiB7IHByb2dyYW1BZGRyZXNzOiBpbnN0cnVjdGlvbi5wcm9ncmFtQWRkcmVzcywgYWNjb3VudHM6IHsgcHJvZmlsZTogZ2V0TmV4dEFjY291bnQoKSwgcGxheWVyOiBnZXROZXh0QWNjb3VudCgpLCBwYXllcjogZ2V0TmV4dEFjY291bnQoKSB9LCBkYXRhOiBnZXRDbG9zZVBsYXllckluc3RydWN0aW9uRGF0YURlY29kZXIoKS5kZWNvZGUoaW5zdHJ1Y3Rpb24uZGF0YSkgfTtcbn0iXX0=
@@ -0,0 +1,69 @@
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 Codec, type Decoder, type Encoder, 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
+ import { type AccountType, type AccountTypeArgs } from '../types';
11
+ export declare const DELEGATE_PDA_DISCRIMINATOR: Uint8Array<ArrayBuffer>;
12
+ export declare function getDelegatePdaDiscriminatorBytes(): ReadonlyUint8Array<ArrayBuffer>;
13
+ export type DelegatePdaInstruction<TProgram extends string = typeof RPS_GAME_PROGRAM_ADDRESS, TAccountBufferPda extends string | AccountMeta<string> = string, TAccountDelegationRecordPda extends string | AccountMeta<string> = string, TAccountDelegationMetadataPda extends string | AccountMeta<string> = string, TAccountPda extends string | AccountMeta<string> = string, TAccountPayer extends string | AccountMeta<string> = string, TAccountValidator extends string | AccountMeta<string> = string, TAccountOwnerProgram extends string | AccountMeta<string> = "8ohu3RobXyZ2DebyJjbs2co9YCG275FUsVckEcmDbCos", TAccountDelegationProgram extends string | AccountMeta<string> = "DELeGGvXpWV2fqJUhqcF5ZSYMS4JTLjteaAMARRSaeSh", TAccountSystemProgram extends string | AccountMeta<string> = "11111111111111111111111111111111", TRemainingAccounts extends readonly AccountMeta<string>[] = []> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<[TAccountBufferPda extends string ? WritableAccount<TAccountBufferPda> : TAccountBufferPda, TAccountDelegationRecordPda extends string ? WritableAccount<TAccountDelegationRecordPda> : TAccountDelegationRecordPda, TAccountDelegationMetadataPda extends string ? WritableAccount<TAccountDelegationMetadataPda> : TAccountDelegationMetadataPda, TAccountPda extends string ? WritableAccount<TAccountPda> : TAccountPda, TAccountPayer extends string ? WritableSignerAccount<TAccountPayer> & AccountSignerMeta<TAccountPayer> : TAccountPayer, TAccountValidator extends string ? ReadonlyAccount<TAccountValidator> : TAccountValidator, TAccountOwnerProgram extends string ? ReadonlyAccount<TAccountOwnerProgram> : TAccountOwnerProgram, TAccountDelegationProgram extends string ? ReadonlyAccount<TAccountDelegationProgram> : TAccountDelegationProgram, TAccountSystemProgram extends string ? ReadonlyAccount<TAccountSystemProgram> : TAccountSystemProgram, ...TRemainingAccounts]>;
14
+ export type DelegatePdaInstructionData = {
15
+ discriminator: ReadonlyUint8Array;
16
+ accountType: AccountType;
17
+ };
18
+ export type DelegatePdaInstructionDataArgs = {
19
+ accountType: AccountTypeArgs;
20
+ };
21
+ export declare function getDelegatePdaInstructionDataEncoder(): Encoder<DelegatePdaInstructionDataArgs>;
22
+ export declare function getDelegatePdaInstructionDataDecoder(): Decoder<DelegatePdaInstructionData>;
23
+ export declare function getDelegatePdaInstructionDataCodec(): Codec<DelegatePdaInstructionDataArgs, DelegatePdaInstructionData>;
24
+ export type DelegatePdaAsyncInput<TAccountBufferPda extends string = string, TAccountDelegationRecordPda extends string = string, TAccountDelegationMetadataPda extends string = string, TAccountPda extends string = string, TAccountPayer extends string = string, TAccountValidator extends string = string, TAccountOwnerProgram extends string = string, TAccountDelegationProgram extends string = string, TAccountSystemProgram extends string = string> = {
25
+ bufferPda?: Address<TAccountBufferPda>;
26
+ delegationRecordPda?: Address<TAccountDelegationRecordPda>;
27
+ delegationMetadataPda?: Address<TAccountDelegationMetadataPda>;
28
+ pda: Address<TAccountPda>;
29
+ payer: TransactionSigner<TAccountPayer>;
30
+ validator?: Address<TAccountValidator>;
31
+ ownerProgram?: Address<TAccountOwnerProgram>;
32
+ delegationProgram?: Address<TAccountDelegationProgram>;
33
+ systemProgram?: Address<TAccountSystemProgram>;
34
+ accountType: DelegatePdaInstructionDataArgs["accountType"];
35
+ };
36
+ export declare function getDelegatePdaInstructionAsync<TAccountBufferPda extends string, TAccountDelegationRecordPda extends string, TAccountDelegationMetadataPda extends string, TAccountPda extends string, TAccountPayer extends string, TAccountValidator extends string, TAccountOwnerProgram extends string, TAccountDelegationProgram extends string, TAccountSystemProgram extends string, TProgramAddress extends Address = typeof RPS_GAME_PROGRAM_ADDRESS>(input: DelegatePdaAsyncInput<TAccountBufferPda, TAccountDelegationRecordPda, TAccountDelegationMetadataPda, TAccountPda, TAccountPayer, TAccountValidator, TAccountOwnerProgram, TAccountDelegationProgram, TAccountSystemProgram>, config?: {
37
+ programAddress?: TProgramAddress;
38
+ }): Promise<DelegatePdaInstruction<TProgramAddress, TAccountBufferPda, TAccountDelegationRecordPda, TAccountDelegationMetadataPda, TAccountPda, TAccountPayer, TAccountValidator, TAccountOwnerProgram, TAccountDelegationProgram, TAccountSystemProgram>>;
39
+ export type DelegatePdaInput<TAccountBufferPda extends string = string, TAccountDelegationRecordPda extends string = string, TAccountDelegationMetadataPda extends string = string, TAccountPda extends string = string, TAccountPayer extends string = string, TAccountValidator extends string = string, TAccountOwnerProgram extends string = string, TAccountDelegationProgram extends string = string, TAccountSystemProgram extends string = string> = {
40
+ bufferPda: Address<TAccountBufferPda>;
41
+ delegationRecordPda: Address<TAccountDelegationRecordPda>;
42
+ delegationMetadataPda: Address<TAccountDelegationMetadataPda>;
43
+ pda: Address<TAccountPda>;
44
+ payer: TransactionSigner<TAccountPayer>;
45
+ validator?: Address<TAccountValidator>;
46
+ ownerProgram?: Address<TAccountOwnerProgram>;
47
+ delegationProgram?: Address<TAccountDelegationProgram>;
48
+ systemProgram?: Address<TAccountSystemProgram>;
49
+ accountType: DelegatePdaInstructionDataArgs["accountType"];
50
+ };
51
+ export declare function getDelegatePdaInstruction<TAccountBufferPda extends string, TAccountDelegationRecordPda extends string, TAccountDelegationMetadataPda extends string, TAccountPda extends string, TAccountPayer extends string, TAccountValidator extends string, TAccountOwnerProgram extends string, TAccountDelegationProgram extends string, TAccountSystemProgram extends string, TProgramAddress extends Address = typeof RPS_GAME_PROGRAM_ADDRESS>(input: DelegatePdaInput<TAccountBufferPda, TAccountDelegationRecordPda, TAccountDelegationMetadataPda, TAccountPda, TAccountPayer, TAccountValidator, TAccountOwnerProgram, TAccountDelegationProgram, TAccountSystemProgram>, config?: {
52
+ programAddress?: TProgramAddress;
53
+ }): DelegatePdaInstruction<TProgramAddress, TAccountBufferPda, TAccountDelegationRecordPda, TAccountDelegationMetadataPda, TAccountPda, TAccountPayer, TAccountValidator, TAccountOwnerProgram, TAccountDelegationProgram, TAccountSystemProgram>;
54
+ export type ParsedDelegatePdaInstruction<TProgram extends string = typeof RPS_GAME_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[]> = {
55
+ programAddress: Address<TProgram>;
56
+ accounts: {
57
+ bufferPda: TAccountMetas[0];
58
+ delegationRecordPda: TAccountMetas[1];
59
+ delegationMetadataPda: TAccountMetas[2];
60
+ pda: TAccountMetas[3];
61
+ payer: TAccountMetas[4];
62
+ validator?: TAccountMetas[5] | undefined;
63
+ ownerProgram: TAccountMetas[6];
64
+ delegationProgram: TAccountMetas[7];
65
+ systemProgram: TAccountMetas[8];
66
+ };
67
+ data: DelegatePdaInstructionData;
68
+ };
69
+ export declare function parseDelegatePdaInstruction<TProgram extends string, TAccountMetas extends readonly AccountMeta[]>(instruction: Instruction<TProgram> & InstructionWithAccounts<TAccountMetas> & InstructionWithData<ReadonlyUint8Array>): ParsedDelegatePdaInstruction<TProgram, TAccountMetas>;
@@ -0,0 +1,90 @@
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, getAddressEncoder, getBytesDecoder, getBytesEncoder, getProgramDerivedAddress, getStructDecoder, getStructEncoder, SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, SolanaError, transformEncoder } from '@solana/kit';
9
+ import { getAccountMetaFactory, getAddressFromResolvedInstructionAccount } from '@solana/program-client-core';
10
+ import { RPS_GAME_PROGRAM_ADDRESS } from '../programs';
11
+ import { getAccountTypeDecoder, getAccountTypeEncoder } from '../types';
12
+ export const DELEGATE_PDA_DISCRIMINATOR = new Uint8Array([248, 217, 193, 46, 124, 191, 64, 135]);
13
+ export function getDelegatePdaDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode(DELEGATE_PDA_DISCRIMINATOR); }
14
+ export function getDelegatePdaInstructionDataEncoder() {
15
+ return transformEncoder(getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)], ['accountType', getAccountTypeEncoder()]]), (value) => ({ ...value, discriminator: DELEGATE_PDA_DISCRIMINATOR }));
16
+ }
17
+ export function getDelegatePdaInstructionDataDecoder() {
18
+ return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)], ['accountType', getAccountTypeDecoder()]]);
19
+ }
20
+ export function getDelegatePdaInstructionDataCodec() {
21
+ return combineCodec(getDelegatePdaInstructionDataEncoder(), getDelegatePdaInstructionDataDecoder());
22
+ }
23
+ export async function getDelegatePdaInstructionAsync(input, config) {
24
+ // Program address.
25
+ const programAddress = config?.programAddress ?? RPS_GAME_PROGRAM_ADDRESS;
26
+ // Original accounts.
27
+ const originalAccounts = { bufferPda: { value: input.bufferPda ?? null, isWritable: true }, delegationRecordPda: { value: input.delegationRecordPda ?? null, isWritable: true }, delegationMetadataPda: { value: input.delegationMetadataPda ?? null, isWritable: true }, pda: { value: input.pda ?? null, isWritable: true }, payer: { value: input.payer ?? null, isWritable: true }, validator: { value: input.validator ?? null, isWritable: false }, ownerProgram: { value: input.ownerProgram ?? null, isWritable: false }, delegationProgram: { value: input.delegationProgram ?? null, isWritable: false }, systemProgram: { value: input.systemProgram ?? null, isWritable: false } };
28
+ const accounts = originalAccounts;
29
+ // Original args.
30
+ const args = { ...input, };
31
+ // Resolve default values.
32
+ if (!accounts.bufferPda.value) {
33
+ accounts.bufferPda.value = await getProgramDerivedAddress({ programAddress: '8ohu3RobXyZ2DebyJjbs2co9YCG275FUsVckEcmDbCos', seeds: [getBytesEncoder().encode(new Uint8Array([98, 117, 102, 102, 101, 114])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("pda", accounts.pda.value))] });
34
+ }
35
+ if (!accounts.delegationRecordPda.value) {
36
+ accounts.delegationRecordPda.value = await getProgramDerivedAddress({ programAddress: 'DELeGGvXpWV2fqJUhqcF5ZSYMS4JTLjteaAMARRSaeSh', seeds: [getBytesEncoder().encode(new Uint8Array([100, 101, 108, 101, 103, 97, 116, 105, 111, 110])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("pda", accounts.pda.value))] });
37
+ }
38
+ if (!accounts.delegationMetadataPda.value) {
39
+ accounts.delegationMetadataPda.value = await getProgramDerivedAddress({ programAddress: 'DELeGGvXpWV2fqJUhqcF5ZSYMS4JTLjteaAMARRSaeSh', seeds: [getBytesEncoder().encode(new Uint8Array([100, 101, 108, 101, 103, 97, 116, 105, 111, 110, 45, 109, 101, 116, 97, 100, 97, 116, 97])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("pda", accounts.pda.value))] });
40
+ }
41
+ if (!accounts.ownerProgram.value) {
42
+ accounts.ownerProgram.value = '8ohu3RobXyZ2DebyJjbs2co9YCG275FUsVckEcmDbCos';
43
+ }
44
+ if (!accounts.delegationProgram.value) {
45
+ accounts.delegationProgram.value = 'DELeGGvXpWV2fqJUhqcF5ZSYMS4JTLjteaAMARRSaeSh';
46
+ }
47
+ if (!accounts.systemProgram.value) {
48
+ accounts.systemProgram.value = '11111111111111111111111111111111';
49
+ }
50
+ const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
51
+ return Object.freeze({ accounts: [getAccountMeta("bufferPda", accounts.bufferPda), getAccountMeta("delegationRecordPda", accounts.delegationRecordPda), getAccountMeta("delegationMetadataPda", accounts.delegationMetadataPda), getAccountMeta("pda", accounts.pda), getAccountMeta("payer", accounts.payer), getAccountMeta("validator", accounts.validator), getAccountMeta("ownerProgram", accounts.ownerProgram), getAccountMeta("delegationProgram", accounts.delegationProgram), getAccountMeta("systemProgram", accounts.systemProgram)], data: getDelegatePdaInstructionDataEncoder().encode(args), programAddress });
52
+ }
53
+ export function getDelegatePdaInstruction(input, config) {
54
+ // Program address.
55
+ const programAddress = config?.programAddress ?? RPS_GAME_PROGRAM_ADDRESS;
56
+ // Original accounts.
57
+ const originalAccounts = { bufferPda: { value: input.bufferPda ?? null, isWritable: true }, delegationRecordPda: { value: input.delegationRecordPda ?? null, isWritable: true }, delegationMetadataPda: { value: input.delegationMetadataPda ?? null, isWritable: true }, pda: { value: input.pda ?? null, isWritable: true }, payer: { value: input.payer ?? null, isWritable: true }, validator: { value: input.validator ?? null, isWritable: false }, ownerProgram: { value: input.ownerProgram ?? null, isWritable: false }, delegationProgram: { value: input.delegationProgram ?? null, isWritable: false }, systemProgram: { value: input.systemProgram ?? null, isWritable: false } };
58
+ const accounts = originalAccounts;
59
+ // Original args.
60
+ const args = { ...input, };
61
+ // Resolve default values.
62
+ if (!accounts.ownerProgram.value) {
63
+ accounts.ownerProgram.value = '8ohu3RobXyZ2DebyJjbs2co9YCG275FUsVckEcmDbCos';
64
+ }
65
+ if (!accounts.delegationProgram.value) {
66
+ accounts.delegationProgram.value = 'DELeGGvXpWV2fqJUhqcF5ZSYMS4JTLjteaAMARRSaeSh';
67
+ }
68
+ if (!accounts.systemProgram.value) {
69
+ accounts.systemProgram.value = '11111111111111111111111111111111';
70
+ }
71
+ const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
72
+ return Object.freeze({ accounts: [getAccountMeta("bufferPda", accounts.bufferPda), getAccountMeta("delegationRecordPda", accounts.delegationRecordPda), getAccountMeta("delegationMetadataPda", accounts.delegationMetadataPda), getAccountMeta("pda", accounts.pda), getAccountMeta("payer", accounts.payer), getAccountMeta("validator", accounts.validator), getAccountMeta("ownerProgram", accounts.ownerProgram), getAccountMeta("delegationProgram", accounts.delegationProgram), getAccountMeta("systemProgram", accounts.systemProgram)], data: getDelegatePdaInstructionDataEncoder().encode(args), programAddress });
73
+ }
74
+ export function parseDelegatePdaInstruction(instruction) {
75
+ if (instruction.accounts.length < 9) {
76
+ throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { actualAccountMetas: instruction.accounts.length, expectedAccountMetas: 9 });
77
+ }
78
+ let accountIndex = 0;
79
+ const getNextAccount = () => {
80
+ const accountMeta = instruction.accounts[accountIndex];
81
+ accountIndex += 1;
82
+ return accountMeta;
83
+ };
84
+ const getNextOptionalAccount = () => {
85
+ const accountMeta = getNextAccount();
86
+ return accountMeta.address === RPS_GAME_PROGRAM_ADDRESS ? undefined : accountMeta;
87
+ };
88
+ return { programAddress: instruction.programAddress, accounts: { bufferPda: getNextAccount(), delegationRecordPda: getNextAccount(), delegationMetadataPda: getNextAccount(), pda: getNextAccount(), payer: getNextAccount(), validator: getNextOptionalAccount(), ownerProgram: getNextAccount(), delegationProgram: getNextAccount(), systemProgram: getNextAccount() }, data: getDelegatePdaInstructionDataDecoder().decode(instruction.data) };
89
+ }
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZWdhdGVQZGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2VuZXJhdGVkL3Jwcy1nYW1lL2luc3RydWN0aW9ucy9kZWxlZ2F0ZVBkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSx5REFBeUQsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQXFTLE1BQU0sYUFBYSxDQUFDO0FBQzNqQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsd0NBQXdDLEVBQW1DLE1BQU0sNkJBQTZCLENBQUM7QUFDL0ksT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBMEMsTUFBTSxVQUFVLENBQUM7QUFFaEgsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUVqRyxNQUFNLFVBQVUsZ0NBQWdDLEtBQUssT0FBTyxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBU3RJLE1BQU0sVUFBVSxvQ0FBb0M7SUFDaEQsT0FBTyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FB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QUUsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0NBQW9DLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDcmIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBjb2RlIHdhcyBBVVRPR0VORVJBVEVEIHVzaW5nIHRoZSBDb2RhbWEgbGlicmFyeS5cbiAqIFBsZWFzZSBETyBOT1QgRURJVCBUSElTIEZJTEUsIGluc3RlYWQgdXNlIHZpc2l0b3JzXG4gKiB0byBhZGQgZmVhdHVyZXMsIHRoZW4gcmVydW4gQ29kYW1hIHRvIHVwZGF0ZSBpdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RhbWEtaWRsL2NvZGFtYVxuICovXG5cbmltcG9ydCB7IGNvbWJpbmVDb2RlYywgZml4RGVjb2RlclNpemUsIGZpeEVuY29kZXJTaXplLCBnZXRBZGRyZXNzRW5jb2RlciwgZ2V0Qnl0ZXNEZWNvZGVyLCBnZXRCeXRlc0VuY29kZXIsIGdldFByb2dyYW1EZXJpdmVkQWRkcmVzcywgZ2V0U3RydWN0RGVjb2RlciwgZ2V0U3RydWN0RW5jb2RlciwgU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0lOU1VGRklDSUVOVF9BQ0NPVU5UX01FVEFTLCBTb2xhbmFFcnJvciwgdHJhbnNmb3JtRW5jb2RlciwgdHlwZSBBY2NvdW50TWV0YSwgdHlwZSBBY2NvdW50U2lnbmVyTWV0YSwgdHlwZSBBZGRyZXNzLCB0eXBlIENvZGVjLCB0eXBlIERlY29kZXIsIHR5cGUgRW5jb2RlciwgdHlwZSBJbnN0cnVjdGlvbiwgdHlwZSBJbnN0cnVjdGlvbldpdGhBY2NvdW50cywgdHlwZSBJbnN0cnVjdGlvbldpdGhEYXRhLCB0eXBlIFJlYWRvbmx5QWNjb3VudCwgdHlwZSBSZWFkb25seVVpbnQ4QXJyYXksIHR5cGUgVHJhbnNhY3Rpb25TaWduZXIsIHR5cGUgV3JpdGFibGVBY2NvdW50LCB0eXBlIFdyaXRhYmxlU2lnbmVyQWNjb3VudCB9IGZyb20gJ0Bzb2xhbmEva2l0JztcbmltcG9ydCB7IGdldEFjY291bnRNZXRhRmFjdG9yeSwgZ2V0QWRkcmVzc0Zyb21SZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudCwgdHlwZSBSZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudCB9IGZyb20gJ0Bzb2xhbmEvcHJvZ3JhbS1jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBSUFNfR0FNRV9QUk9HUkFNX0FERFJFU1MgfSBmcm9tICcuLi9wcm9ncmFtcyc7XG5pbXBvcnQgeyBnZXRBY2NvdW50VHlwZURlY29kZXIsIGdldEFjY291bnRUeXBlRW5jb2RlciwgdHlwZSBBY2NvdW50VHlwZSwgdHlwZSBBY2NvdW50VHlwZUFyZ3MgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBERUxFR0FURV9QREFfRElTQ1JJTUlOQVRPUiA9IG5ldyBVaW50OEFycmF5KFsyNDgsIDIxNywgMTkzLCA0NiwgMTI0LCAxOTEsIDY0LCAxMzVdKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGVnYXRlUGRhRGlzY3JpbWluYXRvckJ5dGVzKCkgeyByZXR1cm4gZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShERUxFR0FURV9QREFfRElTQ1JJTUlOQVRPUik7IH1cblxuZXhwb3J0IHR5cGUgRGVsZWdhdGVQZGFJbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHR5cGVvZiBSUFNfR0FNRV9QUk9HUkFNX0FERFJFU1MsIFRBY2NvdW50QnVmZmVyUGRhIGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhIGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudFBkYSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50UGF5ZXIgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudFZhbGlkYXRvciBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50T3duZXJQcm9ncmFtIGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IFwiOG9odTNSb2JYeVoyRGVieUpqYnMyY285WUNHMjc1RlVzVmNrRWNtRGJDb3NcIiwgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBcIkRFTGVHR3ZYcFdWMmZxSlVocWNGNVpTWU1TNEpUTGp0ZWFBTUFSUlNhZVNoXCIsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBcIjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExXCIsIFRSZW1haW5pbmdBY2NvdW50cyBleHRlbmRzIHJlYWRvbmx5IEFjY291bnRNZXRhPHN0cmluZz5bXSA9IFtdPiA9XG5JbnN0cnVjdGlvbjxUUHJvZ3JhbT4gJiBJbnN0cnVjdGlvbldpdGhEYXRhPFJlYWRvbmx5VWludDhBcnJheT4gJiBJbnN0cnVjdGlvbldpdGhBY2NvdW50czxbVEFjY291bnRCdWZmZXJQZGEgZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZUFjY291bnQ8VEFjY291bnRCdWZmZXJQZGE+IDogVEFjY291bnRCdWZmZXJQZGEsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSBleHRlbmRzIHN0cmluZyA/IFdyaXRhYmxlQWNjb3VudDxUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGE+IDogVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSBleHRlbmRzIHN0cmluZyA/IFdyaXRhYmxlQWNjb3VudDxUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYT4gOiBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSwgVEFjY291bnRQZGEgZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZUFjY291bnQ8VEFjY291bnRQZGE+IDogVEFjY291bnRQZGEsIFRBY2NvdW50UGF5ZXIgZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZVNpZ25lckFjY291bnQ8VEFjY291bnRQYXllcj4gJiBBY2NvdW50U2lnbmVyTWV0YTxUQWNjb3VudFBheWVyPiA6IFRBY2NvdW50UGF5ZXIsIFRBY2NvdW50VmFsaWRhdG9yIGV4dGVuZHMgc3RyaW5nID8gUmVhZG9ubHlBY2NvdW50PFRBY2NvdW50VmFsaWRhdG9yPiA6IFRBY2NvdW50VmFsaWRhdG9yLCBUQWNjb3VudE93bmVyUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA/IFJlYWRvbmx5QWNjb3VudDxUQWNjb3VudE93bmVyUHJvZ3JhbT4gOiBUQWNjb3VudE93bmVyUHJvZ3JhbSwgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA/IFJlYWRvbmx5QWNjb3VudDxUQWNjb3VudERlbGVnYXRpb25Qcm9ncmFtPiA6IFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0sIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA/IFJlYWRvbmx5QWNjb3VudDxUQWNjb3VudFN5c3RlbVByb2dyYW0+IDogVEFjY291bnRTeXN0ZW1Qcm9ncmFtLCAuLi5UUmVtYWluaW5nQWNjb3VudHNdPjtcblxuZXhwb3J0IHR5cGUgRGVsZWdhdGVQZGFJbnN0cnVjdGlvbkRhdGEgPSB7IGRpc2NyaW1pbmF0b3I6IFJlYWRvbmx5VWludDhBcnJheTsgYWNjb3VudFR5cGU6IEFjY291bnRUeXBlOyAgfTtcblxuZXhwb3J0IHR5cGUgRGVsZWdhdGVQZGFJbnN0cnVjdGlvbkRhdGFBcmdzID0geyBhY2NvdW50VHlwZTogQWNjb3VudFR5cGVBcmdzOyAgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGVnYXRlUGRhSW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpOiBFbmNvZGVyPERlbGVnYXRlUGRhSW5zdHJ1Y3Rpb25EYXRhQXJncz4ge1xuICAgIHJldHVybiB0cmFuc2Zvcm1FbmNvZGVyKGdldFN0cnVjdEVuY29kZXIoW1snZGlzY3JpbWluYXRvcicsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KV0sIFsnYWNjb3VudFR5cGUnLCBnZXRBY2NvdW50VHlwZUVuY29kZXIoKV1dKSwgKHZhbHVlKSA9PiAoeyAuLi52YWx1ZSwgZGlzY3JpbWluYXRvcjogREVMRUdBVEVfUERBX0RJU0NSSU1JTkFUT1IgfSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZWdhdGVQZGFJbnN0cnVjdGlvbkRhdGFEZWNvZGVyKCk6IERlY29kZXI8RGVsZWdhdGVQZGFJbnN0cnVjdGlvbkRhdGE+IHtcbiAgICByZXR1cm4gZ2V0U3RydWN0RGVjb2RlcihbWydkaXNjcmltaW5hdG9yJywgZml4RGVjb2RlclNpemUoZ2V0Qnl0ZXNEZWNvZGVyKCksIDgpXSwgWydhY2NvdW50VHlwZScsIGdldEFjY291bnRUeXBlRGVjb2RlcigpXV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZWdhdGVQZGFJbnN0cnVjdGlvbkRhdGFDb2RlYygpOiBDb2RlYzxEZWxlZ2F0ZVBkYUluc3RydWN0aW9uRGF0YUFyZ3MsIERlbGVnYXRlUGRhSW5zdHJ1Y3Rpb25EYXRhPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVDb2RlYyhnZXREZWxlZ2F0ZVBkYUluc3RydWN0aW9uRGF0YUVuY29kZXIoKSwgZ2V0RGVsZWdhdGVQZGFJbnN0cnVjdGlvbkRhdGFEZWNvZGVyKCkpO1xufVxuXG5leHBvcnQgdHlwZSBEZWxlZ2F0ZVBkYUFzeW5jSW5wdXQ8VEFjY291bnRCdWZmZXJQZGEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGRhIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFZhbGlkYXRvciBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRPd25lclByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSAge1xuICBidWZmZXJQZGE/OiBBZGRyZXNzPFRBY2NvdW50QnVmZmVyUGRhPjtcbmRlbGVnYXRpb25SZWNvcmRQZGE/OiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYT47XG5kZWxlZ2F0aW9uTWV0YWRhdGFQZGE/OiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhPjtcbnBkYTogQWRkcmVzczxUQWNjb3VudFBkYT47XG5wYXllcjogVHJhbnNhY3Rpb25TaWduZXI8VEFjY291bnRQYXllcj47XG52YWxpZGF0b3I/OiBBZGRyZXNzPFRBY2NvdW50VmFsaWRhdG9yPjtcbm93bmVyUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRPd25lclByb2dyYW0+O1xuZGVsZWdhdGlvblByb2dyYW0/OiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0+O1xuc3lzdGVtUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRTeXN0ZW1Qcm9ncmFtPjtcbmFjY291bnRUeXBlOiBEZWxlZ2F0ZVBkYUluc3RydWN0aW9uRGF0YUFyZ3NbXCJhY2NvdW50VHlwZVwiXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldERlbGVnYXRlUGRhSW5zdHJ1Y3Rpb25Bc3luYzxUQWNjb3VudEJ1ZmZlclBkYSBleHRlbmRzIHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSBleHRlbmRzIHN0cmluZywgVEFjY291bnRQZGEgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50UGF5ZXIgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50VmFsaWRhdG9yIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudE93bmVyUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVEFjY291bnRTeXN0ZW1Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nLCBUUHJvZ3JhbUFkZHJlc3MgZXh0ZW5kcyBBZGRyZXNzID0gdHlwZW9mIFJQU19HQU1FX1BST0dSQU1fQUREUkVTUz4oaW5wdXQ6IERlbGVnYXRlUGRhQXN5bmNJbnB1dDxUQWNjb3VudEJ1ZmZlclBkYSwgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSwgVEFjY291bnRQZGEsIFRBY2NvdW50UGF5ZXIsIFRBY2NvdW50VmFsaWRhdG9yLCBUQWNjb3VudE93bmVyUHJvZ3JhbSwgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPiwgY29uZmlnPzogeyBwcm9ncmFtQWRkcmVzcz86IFRQcm9ncmFtQWRkcmVzcyB9ICk6IFByb21pc2U8RGVsZWdhdGVQZGFJbnN0cnVjdGlvbjxUUHJvZ3JhbUFkZHJlc3MsIFRBY2NvdW50QnVmZmVyUGRhLCBUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGEsIFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhLCBUQWNjb3VudFBkYSwgVEFjY291bnRQYXllciwgVEFjY291bnRWYWxpZGF0b3IsIFRBY2NvdW50T3duZXJQcm9ncmFtLCBUQWNjb3VudERlbGVnYXRpb25Qcm9ncmFtLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+PiB7XG4gIC8vIFByb2dyYW0gYWRkcmVzcy5cbmNvbnN0IHByb2dyYW1BZGRyZXNzID0gY29uZmlnPy5wcm9ncmFtQWRkcmVzcyA/PyBSUFNfR0FNRV9QUk9HUkFNX0FERFJFU1M7XG5cbiAvLyBPcmlnaW5hbCBhY2NvdW50cy5cbmNvbnN0IG9yaWdpbmFsQWNjb3VudHMgPSB7IGJ1ZmZlclBkYTogeyB2YWx1ZTogaW5wdXQuYnVmZmVyUGRhID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgZGVsZWdhdGlvblJlY29yZFBkYTogeyB2YWx1ZTogaW5wdXQuZGVsZWdhdGlvblJlY29yZFBkYSA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIGRlbGVnYXRpb25NZXRhZGF0YVBkYTogeyB2YWx1ZTogaW5wdXQuZGVsZWdhdGlvbk1ldGFkYXRhUGRhID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgcGRhOiB7IHZhbHVlOiBpbnB1dC5wZGEgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBwYXllcjogeyB2YWx1ZTogaW5wdXQucGF5ZXIgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCB2YWxpZGF0b3I6IHsgdmFsdWU6IGlucHV0LnZhbGlkYXRvciA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBvd25lclByb2dyYW06IHsgdmFsdWU6IGlucHV0Lm93bmVyUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBkZWxlZ2F0aW9uUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQuZGVsZWdhdGlvblByb2dyYW0gPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSwgc3lzdGVtUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQuc3lzdGVtUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9IH1cbmNvbnN0IGFjY291bnRzID0gb3JpZ2luYWxBY2NvdW50cyBhcyBSZWNvcmQ8a2V5b2YgdHlwZW9mIG9yaWdpbmFsQWNjb3VudHMsIFJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50PjtcblxuXG4vLyBPcmlnaW5hbCBhcmdzLlxuY29uc3QgYXJncyA9IHsgLi4uaW5wdXQsICB9O1xuXG5cbi8vIFJlc29sdmUgZGVmYXVsdCB2YWx1ZXMuXG5pZiAoIWFjY291bnRzLmJ1ZmZlclBkYS52YWx1ZSkge1xuYWNjb3VudHMuYnVmZmVyUGRhLnZhbHVlID0gYXdhaXQgZ2V0UHJvZ3JhbURlcml2ZWRBZGRyZXNzKHsgcHJvZ3JhbUFkZHJlc3M6ICc4b2h1M1JvYlh5WjJEZWJ5SmpiczJjbzlZQ0cyNzVGVXNWY2tFY21EYkNvcycgYXMgQWRkcmVzczwnOG9odTNSb2JYeVoyRGVieUpqYnMyY285WUNHMjc1RlVzVmNrRWNtRGJDb3MnPiwgc2VlZHM6IFtnZXRCeXRlc0VuY29kZXIoKS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzk4LCAxMTcsIDEwMiwgMTAyLCAxMDEsIDExNF0pKSwgZ2V0QWRkcmVzc0VuY29kZXIoKS5lbmNvZGUoZ2V0QWRkcmVzc0Zyb21SZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudChcInBkYVwiLCBhY2NvdW50cy5wZGEudmFsdWUpKV0gfSk7XG59XG5pZiAoIWFjY291bnRzLmRlbGVnYXRpb25SZWNvcmRQZGEudmFsdWUpIHtcbmFjY291bnRzLmRlbGVnYXRpb25SZWNvcmRQZGEudmFsdWUgPSBhd2FpdCBnZXRQcm9ncmFtRGVyaXZlZEFkZHJlc3MoeyBwcm9ncmFtQWRkcmVzczogJ0RFTGVHR3ZYcFdWMmZxSlVocWNGNVpTWU1TNEpUTGp0ZWFBTUFSUlNhZVNoJyBhcyBBZGRyZXNzPCdERUxlR0d2WHBXVjJmcUpVaHFjRjVaU1lNUzRKVExqdGVhQU1BUlJTYWVTaCc+LCBzZWVkczogW2dldEJ5dGVzRW5jb2RlcigpLmVuY29kZShuZXcgVWludDhBcnJheShbMTAwLCAxMDEsIDEwOCwgMTAxLCAxMDMsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTBdKSksIGdldEFkZHJlc3NFbmNvZGVyKCkuZW5jb2RlKGdldEFkZHJlc3NGcm9tUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQoXCJwZGFcIiwgYWNjb3VudHMucGRhLnZhbHVlKSldIH0pO1xufVxuaWYgKCFhY2NvdW50cy5kZWxlZ2F0aW9uTWV0YWRhdGFQZGEudmFsdWUpIHtcbmFjY291bnRzLmRlbGVnYXRpb25NZXRhZGF0YVBkYS52YWx1ZSA9IGF3YWl0IGdldFByb2dyYW1EZXJpdmVkQWRkcmVzcyh7IHByb2dyYW1BZGRyZXNzOiAnREVMZUdHdlhwV1YyZnFKVWhxY0Y1WlNZTVM0SlRManRlYUFNQVJSU2FlU2gnIGFzIEFkZHJlc3M8J0RFTGVHR3ZYcFdWMmZxSlVocWNGNVpTWU1TNEpUTGp0ZWFBTUFSUlNhZVNoJz4sIHNlZWRzOiBbZ2V0Qnl0ZXNFbmNvZGVyKCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxMDAsIDEwMSwgMTA4LCAxMDEsIDEwMywgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNDUsIDEwOSwgMTAxLCAxMTYsIDk3LCAxMDAsIDk3LCAxMTYsIDk3XSkpLCBnZXRBZGRyZXNzRW5jb2RlcigpLmVuY29kZShnZXRBZGRyZXNzRnJvbVJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50KFwicGRhXCIsIGFjY291bnRzLnBkYS52YWx1ZSkpXSB9KTtcbn1cbmlmICghYWNjb3VudHMub3duZXJQcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5vd25lclByb2dyYW0udmFsdWUgPSAnOG9odTNSb2JYeVoyRGVieUpqYnMyY285WUNHMjc1RlVzVmNrRWNtRGJDb3MnIGFzIEFkZHJlc3M8JzhvaHUzUm9iWHlaMkRlYnlKamJzMmNvOVlDRzI3NUZVc1Zja0VjbURiQ29zJz47XG59XG5pZiAoIWFjY291bnRzLmRlbGVnYXRpb25Qcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5kZWxlZ2F0aW9uUHJvZ3JhbS52YWx1ZSA9ICdERUxlR0d2WHBXVjJmcUpVaHFjRjVaU1lNUzRKVExqdGVhQU1BUlJTYWVTaCcgYXMgQWRkcmVzczwnREVMZUdHdlhwV1YyZnFKVWhxY0Y1WlNZTVM0SlRManRlYUFNQVJSU2FlU2gnPjtcbn1cbmlmICghYWNjb3VudHMuc3lzdGVtUHJvZ3JhbS52YWx1ZSkge1xuYWNjb3VudHMuc3lzdGVtUHJvZ3JhbS52YWx1ZSA9ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMScgYXMgQWRkcmVzczwnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnPjtcbn1cblxuY29uc3QgZ2V0QWNjb3VudE1ldGEgPSBnZXRBY2NvdW50TWV0YUZhY3RvcnkocHJvZ3JhbUFkZHJlc3MsICdwcm9ncmFtSWQnKTtcbnJldHVybiBPYmplY3QuZnJlZXplKHsgYWNjb3VudHM6IFtnZXRBY2NvdW50TWV0YShcImJ1ZmZlclBkYVwiLCBhY2NvdW50cy5idWZmZXJQZGEpLCBnZXRBY2NvdW50TWV0YShcImRlbGVnYXRpb25SZWNvcmRQZGFcIiwgYWNjb3VudHMuZGVsZWdhdGlvblJlY29yZFBkYSksIGdldEFjY291bnRNZXRhKFwiZGVsZWdhdGlvbk1ldGFkYXRhUGRhXCIsIGFjY291bnRzLmRlbGVnYXRpb25NZXRhZGF0YVBkYSksIGdldEFjY291bnRNZXRhKFwicGRhXCIsIGFjY291bnRzLnBkYSksIGdldEFjY291bnRNZXRhKFwicGF5ZXJcIiwgYWNjb3VudHMucGF5ZXIpLCBnZXRBY2NvdW50TWV0YShcInZhbGlkYXRvclwiLCBhY2NvdW50cy52YWxpZGF0b3IpLCBnZXRBY2NvdW50TWV0YShcIm93bmVyUHJvZ3JhbVwiLCBhY2NvdW50cy5vd25lclByb2dyYW0pLCBnZXRBY2NvdW50TWV0YShcImRlbGVnYXRpb25Qcm9ncmFtXCIsIGFjY291bnRzLmRlbGVnYXRpb25Qcm9ncmFtKSwgZ2V0QWNjb3VudE1ldGEoXCJzeXN0ZW1Qcm9ncmFtXCIsIGFjY291bnRzLnN5c3RlbVByb2dyYW0pXSwgZGF0YTogZ2V0RGVsZWdhdGVQZGFJbnN0cnVjdGlvbkRhdGFFbmNvZGVyKCkuZW5jb2RlKGFyZ3MgYXMgRGVsZWdhdGVQZGFJbnN0cnVjdGlvbkRhdGFBcmdzKSwgcHJvZ3JhbUFkZHJlc3MgfSBhcyBEZWxlZ2F0ZVBkYUluc3RydWN0aW9uPFRQcm9ncmFtQWRkcmVzcywgVEFjY291bnRCdWZmZXJQZGEsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSwgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEsIFRBY2NvdW50UGRhLCBUQWNjb3VudFBheWVyLCBUQWNjb3VudFZhbGlkYXRvciwgVEFjY291bnRPd25lclByb2dyYW0sIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0sIFRBY2NvdW50U3lzdGVtUHJvZ3JhbT4pO1xufVxuXG5leHBvcnQgdHlwZSBEZWxlZ2F0ZVBkYUlucHV0PFRBY2NvdW50QnVmZmVyUGRhIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFBkYSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRQYXllciBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRWYWxpZGF0b3IgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50T3duZXJQcm9ncmFtIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudERlbGVnYXRpb25Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID0gIHtcbiAgYnVmZmVyUGRhOiBBZGRyZXNzPFRBY2NvdW50QnVmZmVyUGRhPjtcbmRlbGVnYXRpb25SZWNvcmRQZGE6IEFkZHJlc3M8VEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhPjtcbmRlbGVnYXRpb25NZXRhZGF0YVBkYTogQWRkcmVzczxUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYT47XG5wZGE6IEFkZHJlc3M8VEFjY291bnRQZGE+O1xucGF5ZXI6IFRyYW5zYWN0aW9uU2lnbmVyPFRBY2NvdW50UGF5ZXI+O1xudmFsaWRhdG9yPzogQWRkcmVzczxUQWNjb3VudFZhbGlkYXRvcj47XG5vd25lclByb2dyYW0/OiBBZGRyZXNzPFRBY2NvdW50T3duZXJQcm9ncmFtPjtcbmRlbGVnYXRpb25Qcm9ncmFtPzogQWRkcmVzczxUQWNjb3VudERlbGVnYXRpb25Qcm9ncmFtPjtcbnN5c3RlbVByb2dyYW0/OiBBZGRyZXNzPFRBY2NvdW50U3lzdGVtUHJvZ3JhbT47XG5hY2NvdW50VHlwZTogRGVsZWdhdGVQZGFJbnN0cnVjdGlvbkRhdGFBcmdzW1wiYWNjb3VudFR5cGVcIl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxlZ2F0ZVBkYUluc3RydWN0aW9uPFRBY2NvdW50QnVmZmVyUGRhIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGEgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBkYSBleHRlbmRzIHN0cmluZywgVEFjY291bnRQYXllciBleHRlbmRzIHN0cmluZywgVEFjY291bnRWYWxpZGF0b3IgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50T3duZXJQcm9ncmFtIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudERlbGVnYXRpb25Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRQcm9ncmFtQWRkcmVzcyBleHRlbmRzIEFkZHJlc3MgPSB0eXBlb2YgUlBTX0dBTUVfUFJPR1JBTV9BRERSRVNTPihpbnB1dDogRGVsZWdhdGVQZGFJbnB1dDxUQWNjb3VudEJ1ZmZlclBkYSwgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSwgVEFjY291bnRQZGEsIFRBY2NvdW50UGF5ZXIsIFRBY2NvdW50VmFsaWRhdG9yLCBUQWNjb3VudE93bmVyUHJvZ3JhbSwgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPiwgY29uZmlnPzogeyBwcm9ncmFtQWRkcmVzcz86IFRQcm9ncmFtQWRkcmVzcyB9ICk6IERlbGVnYXRlUGRhSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudEJ1ZmZlclBkYSwgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSwgVEFjY291bnRQZGEsIFRBY2NvdW50UGF5ZXIsIFRBY2NvdW50VmFsaWRhdG9yLCBUQWNjb3VudE93bmVyUHJvZ3JhbSwgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPiB7XG4gIC8vIFByb2dyYW0gYWRkcmVzcy5cbmNvbnN0IHByb2dyYW1BZGRyZXNzID0gY29uZmlnPy5wcm9ncmFtQWRkcmVzcyA/PyBSUFNfR0FNRV9QUk9HUkFNX0FERFJFU1M7XG5cbiAvLyBPcmlnaW5hbCBhY2NvdW50cy5cbmNvbnN0IG9yaWdpbmFsQWNjb3VudHMgPSB7IGJ1ZmZlclBkYTogeyB2YWx1ZTogaW5wdXQuYnVmZmVyUGRhID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgZGVsZWdhdGlvblJlY29yZFBkYTogeyB2YWx1ZTogaW5wdXQuZGVsZWdhdGlvblJlY29yZFBkYSA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIGRlbGVnYXRpb25NZXRhZGF0YVBkYTogeyB2YWx1ZTogaW5wdXQuZGVsZWdhdGlvbk1ldGFkYXRhUGRhID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgcGRhOiB7IHZhbHVlOiBpbnB1dC5wZGEgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBwYXllcjogeyB2YWx1ZTogaW5wdXQucGF5ZXIgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCB2YWxpZGF0b3I6IHsgdmFsdWU6IGlucHV0LnZhbGlkYXRvciA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBvd25lclByb2dyYW06IHsgdmFsdWU6IGlucHV0Lm93bmVyUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBkZWxlZ2F0aW9uUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQuZGVsZWdhdGlvblByb2dyYW0gPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSwgc3lzdGVtUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQuc3lzdGVtUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9IH1cbmNvbnN0IGFjY291bnRzID0gb3JpZ2luYWxBY2NvdW50cyBhcyBSZWNvcmQ8a2V5b2YgdHlwZW9mIG9yaWdpbmFsQWNjb3VudHMsIFJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50PjtcblxuXG4vLyBPcmlnaW5hbCBhcmdzLlxuY29uc3QgYXJncyA9IHsgLi4uaW5wdXQsICB9O1xuXG5cbi8vIFJlc29sdmUgZGVmYXVsdCB2YWx1ZXMuXG5pZiAoIWFjY291bnRzLm93bmVyUHJvZ3JhbS52YWx1ZSkge1xuYWNjb3VudHMub3duZXJQcm9ncmFtLnZhbHVlID0gJzhvaHUzUm9iWHlaMkRlYnlKamJzMmNvOVlDRzI3NUZVc1Zja0VjbURiQ29zJyBhcyBBZGRyZXNzPCc4b2h1M1JvYlh5WjJEZWJ5SmpiczJjbzlZQ0cyNzVGVXNWY2tFY21EYkNvcyc+O1xufVxuaWYgKCFhY2NvdW50cy5kZWxlZ2F0aW9uUHJvZ3JhbS52YWx1ZSkge1xuYWNjb3VudHMuZGVsZWdhdGlvblByb2dyYW0udmFsdWUgPSAnREVMZUdHdlhwV1YyZnFKVWhxY0Y1WlNZTVM0SlRManRlYUFNQVJSU2FlU2gnIGFzIEFkZHJlc3M8J0RFTGVHR3ZYcFdWMmZxSlVocWNGNVpTWU1TNEpUTGp0ZWFBTUFSUlNhZVNoJz47XG59XG5pZiAoIWFjY291bnRzLnN5c3RlbVByb2dyYW0udmFsdWUpIHtcbmFjY291bnRzLnN5c3RlbVByb2dyYW0udmFsdWUgPSAnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnIGFzIEFkZHJlc3M8JzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJz47XG59XG5cbmNvbnN0IGdldEFjY291bnRNZXRhID0gZ2V0QWNjb3VudE1ldGFGYWN0b3J5KHByb2dyYW1BZGRyZXNzLCAncHJvZ3JhbUlkJyk7XG5yZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IGFjY291bnRzOiBbZ2V0QWNjb3VudE1ldGEoXCJidWZmZXJQZGFcIiwgYWNjb3VudHMuYnVmZmVyUGRhKSwgZ2V0QWNjb3VudE1ldGEoXCJkZWxlZ2F0aW9uUmVjb3JkUGRhXCIsIGFjY291bnRzLmRlbGVnYXRpb25SZWNvcmRQZGEpLCBnZXRBY2NvdW50TWV0YShcImRlbGVnYXRpb25NZXRhZGF0YVBkYVwiLCBhY2NvdW50cy5kZWxlZ2F0aW9uTWV0YWRhdGFQZGEpLCBnZXRBY2NvdW50TWV0YShcInBkYVwiLCBhY2NvdW50cy5wZGEpLCBnZXRBY2NvdW50TWV0YShcInBheWVyXCIsIGFjY291bnRzLnBheWVyKSwgZ2V0QWNjb3VudE1ldGEoXCJ2YWxpZGF0b3JcIiwgYWNjb3VudHMudmFsaWRhdG9yKSwgZ2V0QWNjb3VudE1ldGEoXCJvd25lclByb2dyYW1cIiwgYWNjb3VudHMub3duZXJQcm9ncmFtKSwgZ2V0QWNjb3VudE1ldGEoXCJkZWxlZ2F0aW9uUHJvZ3JhbVwiLCBhY2NvdW50cy5kZWxlZ2F0aW9uUHJvZ3JhbSksIGdldEFjY291bnRNZXRhKFwic3lzdGVtUHJvZ3JhbVwiLCBhY2NvdW50cy5zeXN0ZW1Qcm9ncmFtKV0sIGRhdGE6IGdldERlbGVnYXRlUGRhSW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpLmVuY29kZShhcmdzIGFzIERlbGVnYXRlUGRhSW5zdHJ1Y3Rpb25EYXRhQXJncyksIHByb2dyYW1BZGRyZXNzIH0gYXMgRGVsZWdhdGVQZGFJbnN0cnVjdGlvbjxUUHJvZ3JhbUFkZHJlc3MsIFRBY2NvdW50QnVmZmVyUGRhLCBUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGEsIFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhLCBUQWNjb3VudFBkYSwgVEFjY291bnRQYXllciwgVEFjY291bnRWYWxpZGF0b3IsIFRBY2NvdW50T3duZXJQcm9ncmFtLCBUQWNjb3VudERlbGVnYXRpb25Qcm9ncmFtLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+KTtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkRGVsZWdhdGVQZGFJbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHR5cGVvZiBSUFNfR0FNRV9QUk9HUkFNX0FERFJFU1MsIFRBY2NvdW50TWV0YXMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YVtdID0gcmVhZG9ubHkgQWNjb3VudE1ldGFbXT4gPSB7IHByb2dyYW1BZGRyZXNzOiBBZGRyZXNzPFRQcm9ncmFtPjtcbmFjY291bnRzOiB7XG5idWZmZXJQZGE6IFRBY2NvdW50TWV0YXNbMF07XG5kZWxlZ2F0aW9uUmVjb3JkUGRhOiBUQWNjb3VudE1ldGFzWzFdO1xuZGVsZWdhdGlvbk1ldGFkYXRhUGRhOiBUQWNjb3VudE1ldGFzWzJdO1xucGRhOiBUQWNjb3VudE1ldGFzWzNdO1xucGF5ZXI6IFRBY2NvdW50TWV0YXNbNF07XG52YWxpZGF0b3I/OiBUQWNjb3VudE1ldGFzWzVdIHwgdW5kZWZpbmVkO1xub3duZXJQcm9ncmFtOiBUQWNjb3VudE1ldGFzWzZdO1xuZGVsZWdhdGlvblByb2dyYW06IFRBY2NvdW50TWV0YXNbN107XG5zeXN0ZW1Qcm9ncmFtOiBUQWNjb3VudE1ldGFzWzhdO1xufTtcbmRhdGE6IERlbGVnYXRlUGRhSW5zdHJ1Y3Rpb25EYXRhOyB9O1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEZWxlZ2F0ZVBkYUluc3RydWN0aW9uPFRQcm9ncmFtIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudE1ldGFzIGV4dGVuZHMgcmVhZG9ubHkgQWNjb3VudE1ldGFbXT4oaW5zdHJ1Y3Rpb246IEluc3RydWN0aW9uPFRQcm9ncmFtPiAmIEluc3RydWN0aW9uV2l0aEFjY291bnRzPFRBY2NvdW50TWV0YXM+ICYgSW5zdHJ1Y3Rpb25XaXRoRGF0YTxSZWFkb25seVVpbnQ4QXJyYXk+KTogUGFyc2VkRGVsZWdhdGVQZGFJbnN0cnVjdGlvbjxUUHJvZ3JhbSwgVEFjY291bnRNZXRhcz4ge1xuICBpZiAoaW5zdHJ1Y3Rpb24uYWNjb3VudHMubGVuZ3RoIDwgOSkge1xuICB0aHJvdyBuZXcgU29sYW5hRXJyb3IoU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0lOU1VGRklDSUVOVF9BQ0NPVU5UX01FVEFTLCB7IGFjdHVhbEFjY291bnRNZXRhczogaW5zdHJ1Y3Rpb24uYWNjb3VudHMubGVuZ3RoLCBleHBlY3RlZEFjY291bnRNZXRhczogOSB9KTtcbn1cbmxldCBhY2NvdW50SW5kZXggPSAwO1xuY29uc3QgZ2V0TmV4dEFjY291bnQgPSAoKSA9PiB7XG4gIGNvbnN0IGFjY291bnRNZXRhID0gKGluc3RydWN0aW9uLmFjY291bnRzIGFzIFRBY2NvdW50TWV0YXMpW2FjY291bnRJbmRleF0hO1xuICBhY2NvdW50SW5kZXggKz0gMTtcbiAgcmV0dXJuIGFjY291bnRNZXRhO1xufVxuY29uc3QgZ2V0TmV4dE9wdGlvbmFsQWNjb3VudCA9ICgpID0+IHtcbiAgY29uc3QgYWNjb3VudE1ldGEgPSBnZXROZXh0QWNjb3VudCgpO1xuICByZXR1cm4gYWNjb3VudE1ldGEuYWRkcmVzcyA9PT0gUlBTX0dBTUVfUFJPR1JBTV9BRERSRVNTID8gdW5kZWZpbmVkIDogYWNjb3VudE1ldGE7XG59O1xuICByZXR1cm4geyBwcm9ncmFtQWRkcmVzczogaW5zdHJ1Y3Rpb24ucHJvZ3JhbUFkZHJlc3MsIGFjY291bnRzOiB7IGJ1ZmZlclBkYTogZ2V0TmV4dEFjY291bnQoKSwgZGVsZWdhdGlvblJlY29yZFBkYTogZ2V0TmV4dEFjY291bnQoKSwgZGVsZWdhdGlvbk1ldGFkYXRhUGRhOiBnZXROZXh0QWNjb3VudCgpLCBwZGE6IGdldE5leHRBY2NvdW50KCksIHBheWVyOiBnZXROZXh0QWNjb3VudCgpLCB2YWxpZGF0b3I6IGdldE5leHRPcHRpb25hbEFjY291bnQoKSwgb3duZXJQcm9ncmFtOiBnZXROZXh0QWNjb3VudCgpLCBkZWxlZ2F0aW9uUHJvZ3JhbTogZ2V0TmV4dEFjY291bnQoKSwgc3lzdGVtUHJvZ3JhbTogZ2V0TmV4dEFjY291bnQoKSB9LCBkYXRhOiBnZXREZWxlZ2F0ZVBkYUluc3RydWN0aW9uRGF0YURlY29kZXIoKS5kZWNvZGUoaW5zdHJ1Y3Rpb24uZGF0YSkgfTtcbn0iXX0=
@@ -0,0 +1,16 @@
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 './closePlayer';
9
+ export * from './delegatePda';
10
+ export * from './initializePlayer';
11
+ export * from './makeChoice';
12
+ export * from './onMatchFound';
13
+ export * from './persistResults';
14
+ export * from './processUndelegation';
15
+ export * from './startGame';
16
+ export * from './startGameWithTicket';
@@ -0,0 +1,17 @@
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 './closePlayer';
9
+ export * from './delegatePda';
10
+ export * from './initializePlayer';
11
+ export * from './makeChoice';
12
+ export * from './onMatchFound';
13
+ export * from './persistResults';
14
+ export * from './processUndelegation';
15
+ export * from './startGame';
16
+ export * from './startGameWithTicket';
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2VuZXJhdGVkL3Jwcy1nYW1lL2luc3RydWN0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgY29kZSB3YXMgQVVUT0dFTkVSQVRFRCB1c2luZyB0aGUgQ29kYW1hIGxpYnJhcnkuXG4gKiBQbGVhc2UgRE8gTk9UIEVESVQgVEhJUyBGSUxFLCBpbnN0ZWFkIHVzZSB2aXNpdG9yc1xuICogdG8gYWRkIGZlYXR1cmVzLCB0aGVuIHJlcnVuIENvZGFtYSB0byB1cGRhdGUgaXQuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY29kYW1hLWlkbC9jb2RhbWFcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2Nsb3NlUGxheWVyJztcbmV4cG9ydCAqIGZyb20gJy4vZGVsZWdhdGVQZGEnO1xuZXhwb3J0ICogZnJvbSAnLi9pbml0aWFsaXplUGxheWVyJztcbmV4cG9ydCAqIGZyb20gJy4vbWFrZUNob2ljZSc7XG5leHBvcnQgKiBmcm9tICcuL29uTWF0Y2hGb3VuZCc7XG5leHBvcnQgKiBmcm9tICcuL3BlcnNpc3RSZXN1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvY2Vzc1VuZGVsZWdhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3N0YXJ0R2FtZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXJ0R2FtZVdpdGhUaWNrZXQnOyJdfQ==
@@ -0,0 +1,48 @@
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 INITIALIZE_PLAYER_DISCRIMINATOR: Uint8Array<ArrayBuffer>;
11
+ export declare function getInitializePlayerDiscriminatorBytes(): ReadonlyUint8Array<ArrayBuffer>;
12
+ export type InitializePlayerInstruction<TProgram extends string = typeof RPS_GAME_PROGRAM_ADDRESS, TAccountProfile extends string | AccountMeta<string> = string, TAccountPlayer extends string | AccountMeta<string> = string, TAccountPayer extends string | AccountMeta<string> = string, TAccountSystemProgram extends string | AccountMeta<string> = "11111111111111111111111111111111", TRemainingAccounts extends readonly AccountMeta<string>[] = []> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<[TAccountProfile extends string ? WritableAccount<TAccountProfile> : TAccountProfile, TAccountPlayer extends string ? WritableSignerAccount<TAccountPlayer> & AccountSignerMeta<TAccountPlayer> : TAccountPlayer, TAccountPayer extends string ? WritableSignerAccount<TAccountPayer> & AccountSignerMeta<TAccountPayer> : TAccountPayer, TAccountSystemProgram extends string ? ReadonlyAccount<TAccountSystemProgram> : TAccountSystemProgram, ...TRemainingAccounts]>;
13
+ export type InitializePlayerInstructionData = {
14
+ discriminator: ReadonlyUint8Array;
15
+ };
16
+ export type InitializePlayerInstructionDataArgs = {};
17
+ export declare function getInitializePlayerInstructionDataEncoder(): FixedSizeEncoder<InitializePlayerInstructionDataArgs>;
18
+ export declare function getInitializePlayerInstructionDataDecoder(): FixedSizeDecoder<InitializePlayerInstructionData>;
19
+ export declare function getInitializePlayerInstructionDataCodec(): FixedSizeCodec<InitializePlayerInstructionDataArgs, InitializePlayerInstructionData>;
20
+ export type InitializePlayerAsyncInput<TAccountProfile extends string = string, TAccountPlayer extends string = string, TAccountPayer extends string = string, TAccountSystemProgram extends string = string> = {
21
+ profile?: Address<TAccountProfile>;
22
+ player: TransactionSigner<TAccountPlayer>;
23
+ payer: TransactionSigner<TAccountPayer>;
24
+ systemProgram?: Address<TAccountSystemProgram>;
25
+ };
26
+ export declare function getInitializePlayerInstructionAsync<TAccountProfile extends string, TAccountPlayer extends string, TAccountPayer extends string, TAccountSystemProgram extends string, TProgramAddress extends Address = typeof RPS_GAME_PROGRAM_ADDRESS>(input: InitializePlayerAsyncInput<TAccountProfile, TAccountPlayer, TAccountPayer, TAccountSystemProgram>, config?: {
27
+ programAddress?: TProgramAddress;
28
+ }): Promise<InitializePlayerInstruction<TProgramAddress, TAccountProfile, TAccountPlayer, TAccountPayer, TAccountSystemProgram>>;
29
+ export type InitializePlayerInput<TAccountProfile extends string = string, TAccountPlayer extends string = string, TAccountPayer extends string = string, TAccountSystemProgram extends string = string> = {
30
+ profile: Address<TAccountProfile>;
31
+ player: TransactionSigner<TAccountPlayer>;
32
+ payer: TransactionSigner<TAccountPayer>;
33
+ systemProgram?: Address<TAccountSystemProgram>;
34
+ };
35
+ export declare function getInitializePlayerInstruction<TAccountProfile extends string, TAccountPlayer extends string, TAccountPayer extends string, TAccountSystemProgram extends string, TProgramAddress extends Address = typeof RPS_GAME_PROGRAM_ADDRESS>(input: InitializePlayerInput<TAccountProfile, TAccountPlayer, TAccountPayer, TAccountSystemProgram>, config?: {
36
+ programAddress?: TProgramAddress;
37
+ }): InitializePlayerInstruction<TProgramAddress, TAccountProfile, TAccountPlayer, TAccountPayer, TAccountSystemProgram>;
38
+ export type ParsedInitializePlayerInstruction<TProgram extends string = typeof RPS_GAME_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[]> = {
39
+ programAddress: Address<TProgram>;
40
+ accounts: {
41
+ profile: TAccountMetas[0];
42
+ player: TAccountMetas[1];
43
+ payer: TAccountMetas[2];
44
+ systemProgram: TAccountMetas[3];
45
+ };
46
+ data: InitializePlayerInstructionData;
47
+ };
48
+ export declare function parseInitializePlayerInstruction<TProgram extends string, TAccountMetas extends readonly AccountMeta[]>(instruction: Instruction<TProgram> & InstructionWithAccounts<TAccountMetas> & InstructionWithData<ReadonlyUint8Array>): ParsedInitializePlayerInstruction<TProgram, TAccountMetas>;
@@ -0,0 +1,63 @@
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, getAddressEncoder, getBytesDecoder, getBytesEncoder, getProgramDerivedAddress, getStructDecoder, getStructEncoder, SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, SolanaError, transformEncoder } from '@solana/kit';
9
+ import { getAccountMetaFactory, getAddressFromResolvedInstructionAccount } from '@solana/program-client-core';
10
+ import { RPS_GAME_PROGRAM_ADDRESS } from '../programs';
11
+ export const INITIALIZE_PLAYER_DISCRIMINATOR = new Uint8Array([79, 249, 88, 177, 220, 62, 56, 128]);
12
+ export function getInitializePlayerDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode(INITIALIZE_PLAYER_DISCRIMINATOR); }
13
+ export function getInitializePlayerInstructionDataEncoder() {
14
+ return transformEncoder(getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]), (value) => ({ ...value, discriminator: INITIALIZE_PLAYER_DISCRIMINATOR }));
15
+ }
16
+ export function getInitializePlayerInstructionDataDecoder() {
17
+ return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)]]);
18
+ }
19
+ export function getInitializePlayerInstructionDataCodec() {
20
+ return combineCodec(getInitializePlayerInstructionDataEncoder(), getInitializePlayerInstructionDataDecoder());
21
+ }
22
+ export async function getInitializePlayerInstructionAsync(input, config) {
23
+ // Program address.
24
+ const programAddress = config?.programAddress ?? RPS_GAME_PROGRAM_ADDRESS;
25
+ // Original accounts.
26
+ const originalAccounts = { profile: { value: input.profile ?? null, isWritable: true }, player: { value: input.player ?? null, isWritable: true }, payer: { value: input.payer ?? null, isWritable: true }, systemProgram: { value: input.systemProgram ?? null, isWritable: false } };
27
+ const accounts = originalAccounts;
28
+ // Resolve default values.
29
+ if (!accounts.profile.value) {
30
+ accounts.profile.value = await getProgramDerivedAddress({ programAddress, seeds: [getBytesEncoder().encode(new Uint8Array([112, 108, 97, 121, 101, 114, 95, 112, 114, 111, 102, 105, 108, 101, 95, 118, 51, 53])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("player", accounts.player.value))] });
31
+ }
32
+ if (!accounts.systemProgram.value) {
33
+ accounts.systemProgram.value = '11111111111111111111111111111111';
34
+ }
35
+ const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
36
+ return Object.freeze({ accounts: [getAccountMeta("profile", accounts.profile), getAccountMeta("player", accounts.player), getAccountMeta("payer", accounts.payer), getAccountMeta("systemProgram", accounts.systemProgram)], data: getInitializePlayerInstructionDataEncoder().encode({}), programAddress });
37
+ }
38
+ export function getInitializePlayerInstruction(input, config) {
39
+ // Program address.
40
+ const programAddress = config?.programAddress ?? RPS_GAME_PROGRAM_ADDRESS;
41
+ // Original accounts.
42
+ const originalAccounts = { profile: { value: input.profile ?? null, isWritable: true }, player: { value: input.player ?? null, isWritable: true }, payer: { value: input.payer ?? null, isWritable: true }, systemProgram: { value: input.systemProgram ?? null, isWritable: false } };
43
+ const accounts = originalAccounts;
44
+ // Resolve default values.
45
+ if (!accounts.systemProgram.value) {
46
+ accounts.systemProgram.value = '11111111111111111111111111111111';
47
+ }
48
+ const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
49
+ return Object.freeze({ accounts: [getAccountMeta("profile", accounts.profile), getAccountMeta("player", accounts.player), getAccountMeta("payer", accounts.payer), getAccountMeta("systemProgram", accounts.systemProgram)], data: getInitializePlayerInstructionDataEncoder().encode({}), programAddress });
50
+ }
51
+ export function parseInitializePlayerInstruction(instruction) {
52
+ if (instruction.accounts.length < 4) {
53
+ throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { actualAccountMetas: instruction.accounts.length, expectedAccountMetas: 4 });
54
+ }
55
+ let accountIndex = 0;
56
+ const getNextAccount = () => {
57
+ const accountMeta = instruction.accounts[accountIndex];
58
+ accountIndex += 1;
59
+ return accountMeta;
60
+ };
61
+ return { programAddress: instruction.programAddress, accounts: { profile: getNextAccount(), player: getNextAccount(), payer: getNextAccount(), systemProgram: getNextAccount() }, data: getInitializePlayerInstructionDataDecoder().decode(instruction.data) };
62
+ }
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdGlhbGl6ZVBsYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvcnBzLWdhbWUvaW5zdHJ1Y3Rpb25zL2luaXRpYWxpemVQbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsd0JBQXdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUseURBQXlELEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFnVSxNQUFNLGFBQWEsQ0FBQztBQUN0bEIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHdDQUF3QyxFQUFtQyxNQUFNLDZCQUE2QixDQUFDO0FBQy9JLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRXBHLE1BQU0sVUFBVSxxQ0FBcUMsS0FBSyxPQUFPLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFTaEosTUFBTSxVQUFVLHlDQUF5QztJQUNyRCxPQUFPLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsYUFBYSxFQUFFLCtCQUErQixFQUFF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QyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBeUgsQ0FBQyxDQUFDO0FBQ3BhLENBQUM7QUFXRCxNQUFNLFVBQVUsZ0NBQWdDLENBQXdFLFdBQXFIO0lBQzNPLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEMsTUFBTSxJQUFJLFdBQVcsQ0FBQyx5REFBeUQsRUFBRSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLG9CQUFvQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakssQ0FBQztJQUNELElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNyQixNQUFNLGNBQWMsR0FBRyxHQUFHLEVBQUU7UUFDMUIsTUFBTSxXQUFXLEdBQUksV0FBVyxDQUFDLFFBQTBCLENBQUMsWUFBWSxDQUFFLENBQUM7UUFDM0UsWUFBWSxJQUFJLENBQUMsQ0FBQztRQUNsQixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDLENBQUE7SUFDQyxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsQ0FBQyxjQUFjLEVBQUUsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLHlDQUF5QyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2pRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgY29kZSB3YXMgQVVUT0dFTkVSQVRFRCB1c2luZyB0aGUgQ29kYW1hIGxpYnJhcnkuXG4gKiBQbGVhc2UgRE8gTk9UIEVESVQgVEhJUyBGSUxFLCBpbnN0ZWFkIHVzZSB2aXNpdG9yc1xuICogdG8gYWRkIGZlYXR1cmVzLCB0aGVuIHJlcnVuIENvZGFtYSB0byB1cGRhdGUgaXQuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY29kYW1hLWlkbC9jb2RhbWFcbiAqL1xuXG5pbXBvcnQgeyBjb21iaW5lQ29kZWMsIGZpeERlY29kZXJTaXplLCBmaXhFbmNvZGVyU2l6ZSwgZ2V0QWRkcmVzc0VuY29kZXIsIGdldEJ5dGVzRGVjb2RlciwgZ2V0Qnl0ZXNFbmNvZGVyLCBnZXRQcm9ncmFtRGVyaXZlZEFkZHJlc3MsIGdldFN0cnVjdERlY29kZXIsIGdldFN0cnVjdEVuY29kZXIsIFNPTEFOQV9FUlJPUl9fUFJPR1JBTV9DTElFTlRTX19JTlNVRkZJQ0lFTlRfQUNDT1VOVF9NRVRBUywgU29sYW5hRXJyb3IsIHRyYW5zZm9ybUVuY29kZXIsIHR5cGUgQWNjb3VudE1ldGEsIHR5cGUgQWNjb3VudFNpZ25lck1ldGEsIHR5cGUgQWRkcmVzcywgdHlwZSBGaXhlZFNpemVDb2RlYywgdHlwZSBGaXhlZFNpemVEZWNvZGVyLCB0eXBlIEZpeGVkU2l6ZUVuY29kZXIsIHR5cGUgSW5zdHJ1Y3Rpb24sIHR5cGUgSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMsIHR5cGUgSW5zdHJ1Y3Rpb25XaXRoRGF0YSwgdHlwZSBSZWFkb25seUFjY291bnQsIHR5cGUgUmVhZG9ubHlVaW50OEFycmF5LCB0eXBlIFRyYW5zYWN0aW9uU2lnbmVyLCB0eXBlIFdyaXRhYmxlQWNjb3VudCwgdHlwZSBXcml0YWJsZVNpZ25lckFjY291bnQgfSBmcm9tICdAc29sYW5hL2tpdCc7XG5pbXBvcnQgeyBnZXRBY2NvdW50TWV0YUZhY3RvcnksIGdldEFkZHJlc3NGcm9tUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQsIHR5cGUgUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQgfSBmcm9tICdAc29sYW5hL3Byb2dyYW0tY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgUlBTX0dBTUVfUFJPR1JBTV9BRERSRVNTIH0gZnJvbSAnLi4vcHJvZ3JhbXMnO1xuXG5leHBvcnQgY29uc3QgSU5JVElBTElaRV9QTEFZRVJfRElTQ1JJTUlOQVRPUiA9IG5ldyBVaW50OEFycmF5KFs3OSwgMjQ5LCA4OCwgMTc3LCAyMjAsIDYyLCA1NiwgMTI4XSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbml0aWFsaXplUGxheWVyRGlzY3JpbWluYXRvckJ5dGVzKCkgeyByZXR1cm4gZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShJTklUSUFMSVpFX1BMQVlFUl9ESVNDUklNSU5BVE9SKTsgfVxuXG5leHBvcnQgdHlwZSBJbml0aWFsaXplUGxheWVySW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSB0eXBlb2YgUlBTX0dBTUVfUFJPR1JBTV9BRERSRVNTLCBUQWNjb3VudFByb2ZpbGUgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudFBsYXllciBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50UGF5ZXIgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gXCIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMVwiLCBUUmVtYWluaW5nQWNjb3VudHMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YTxzdHJpbmc+W10gPSBbXT4gPVxuSW5zdHJ1Y3Rpb248VFByb2dyYW0+ICYgSW5zdHJ1Y3Rpb25XaXRoRGF0YTxSZWFkb25seVVpbnQ4QXJyYXk+ICYgSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHM8W1RBY2NvdW50UHJvZmlsZSBleHRlbmRzIHN0cmluZyA/IFdyaXRhYmxlQWNjb3VudDxUQWNjb3VudFByb2ZpbGU+IDogVEFjY291bnRQcm9maWxlLCBUQWNjb3VudFBsYXllciBleHRlbmRzIHN0cmluZyA/IFdyaXRhYmxlU2lnbmVyQWNjb3VudDxUQWNjb3VudFBsYXllcj4gJiBBY2NvdW50U2lnbmVyTWV0YTxUQWNjb3VudFBsYXllcj4gOiBUQWNjb3VudFBsYXllciwgVEFjY291bnRQYXllciBleHRlbmRzIHN0cmluZyA/IFdyaXRhYmxlU2lnbmVyQWNjb3VudDxUQWNjb3VudFBheWVyPiAmIEFjY291bnRTaWduZXJNZXRhPFRBY2NvdW50UGF5ZXI+IDogVEFjY291bnRQYXllciwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nID8gUmVhZG9ubHlBY2NvdW50PFRBY2NvdW50U3lzdGVtUHJvZ3JhbT4gOiBUQWNjb3VudFN5c3RlbVByb2dyYW0sIC4uLlRSZW1haW5pbmdBY2NvdW50c10+O1xuXG5leHBvcnQgdHlwZSBJbml0aWFsaXplUGxheWVySW5zdHJ1Y3Rpb25EYXRhID0geyBkaXNjcmltaW5hdG9yOiBSZWFkb25seVVpbnQ4QXJyYXk7ICB9O1xuXG5leHBvcnQgdHlwZSBJbml0aWFsaXplUGxheWVySW5zdHJ1Y3Rpb25EYXRhQXJncyA9IHsgIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbml0aWFsaXplUGxheWVySW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpOiBGaXhlZFNpemVFbmNvZGVyPEluaXRpYWxpemVQbGF5ZXJJbnN0cnVjdGlvbkRhdGFBcmdzPiB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybUVuY29kZXIoZ2V0U3RydWN0RW5jb2RlcihbWydkaXNjcmltaW5hdG9yJywgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpXV0pLCAodmFsdWUpID0+ICh7IC4uLnZhbHVlLCBkaXNjcmltaW5hdG9yOiBJTklUSUFMSVpFX1BMQVlFUl9ESVNDUklNSU5BVE9SIH0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxpemVQbGF5ZXJJbnN0cnVjdGlvbkRhdGFEZWNvZGVyKCk6IEZpeGVkU2l6ZURlY29kZXI8SW5pdGlhbGl6ZVBsYXllckluc3RydWN0aW9uRGF0YT4ge1xuICAgIHJldHVybiBnZXRTdHJ1Y3REZWNvZGVyKFtbJ2Rpc2NyaW1pbmF0b3InLCBmaXhEZWNvZGVyU2l6ZShnZXRCeXRlc0RlY29kZXIoKSwgOCldXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbml0aWFsaXplUGxheWVySW5zdHJ1Y3Rpb25EYXRhQ29kZWMoKTogRml4ZWRTaXplQ29kZWM8SW5pdGlhbGl6ZVBsYXllckluc3RydWN0aW9uRGF0YUFyZ3MsIEluaXRpYWxpemVQbGF5ZXJJbnN0cnVjdGlvbkRhdGE+IHtcbiAgICByZXR1cm4gY29tYmluZUNvZGVjKGdldEluaXRpYWxpemVQbGF5ZXJJbnN0cnVjdGlvbkRhdGFFbmNvZGVyKCksIGdldEluaXRpYWxpemVQbGF5ZXJJbnN0cnVjdGlvbkRhdGFEZWNvZGVyKCkpO1xufVxuXG5leHBvcnQgdHlwZSBJbml0aWFsaXplUGxheWVyQXN5bmNJbnB1dDxUQWNjb3VudFByb2ZpbGUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGxheWVyIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID0gIHtcbiAgcHJvZmlsZT86IEFkZHJlc3M8VEFjY291bnRQcm9maWxlPjtcbnBsYXllcjogVHJhbnNhY3Rpb25TaWduZXI8VEFjY291bnRQbGF5ZXI+O1xucGF5ZXI6IFRyYW5zYWN0aW9uU2lnbmVyPFRBY2NvdW50UGF5ZXI+O1xuc3lzdGVtUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRTeXN0ZW1Qcm9ncmFtPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEluaXRpYWxpemVQbGF5ZXJJbnN0cnVjdGlvbkFzeW5jPFRBY2NvdW50UHJvZmlsZSBleHRlbmRzIHN0cmluZywgVEFjY291bnRQbGF5ZXIgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50UGF5ZXIgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVFByb2dyYW1BZGRyZXNzIGV4dGVuZHMgQWRkcmVzcyA9IHR5cGVvZiBSUFNfR0FNRV9QUk9HUkFNX0FERFJFU1M+KGlucHV0OiBJbml0aWFsaXplUGxheWVyQXN5bmNJbnB1dDxUQWNjb3VudFByb2ZpbGUsIFRBY2NvdW50UGxheWVyLCBUQWNjb3VudFBheWVyLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+LCBjb25maWc/OiB7IHByb2dyYW1BZGRyZXNzPzogVFByb2dyYW1BZGRyZXNzIH0gKTogUHJvbWlzZTxJbml0aWFsaXplUGxheWVySW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudFByb2ZpbGUsIFRBY2NvdW50UGxheWVyLCBUQWNjb3VudFBheWVyLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+PiB7XG4gIC8vIFByb2dyYW0gYWRkcmVzcy5cbmNvbnN0IHByb2dyYW1BZGRyZXNzID0gY29uZmlnPy5wcm9ncmFtQWRkcmVzcyA/PyBSUFNfR0FNRV9QUk9HUkFNX0FERFJFU1M7XG5cbiAvLyBPcmlnaW5hbCBhY2NvdW50cy5cbmNvbnN0IG9yaWdpbmFsQWNjb3VudHMgPSB7IHByb2ZpbGU6IHsgdmFsdWU6IGlucHV0LnByb2ZpbGUgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBwbGF5ZXI6IHsgdmFsdWU6IGlucHV0LnBsYXllciA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHBheWVyOiB7IHZhbHVlOiBpbnB1dC5wYXllciA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHN5c3RlbVByb2dyYW06IHsgdmFsdWU6IGlucHV0LnN5c3RlbVByb2dyYW0gPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSB9XG5jb25zdCBhY2NvdW50cyA9IG9yaWdpbmFsQWNjb3VudHMgYXMgUmVjb3JkPGtleW9mIHR5cGVvZiBvcmlnaW5hbEFjY291bnRzLCBSZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudD47XG5cblxuLy8gUmVzb2x2ZSBkZWZhdWx0IHZhbHVlcy5cbmlmICghYWNjb3VudHMucHJvZmlsZS52YWx1ZSkge1xuYWNjb3VudHMucHJvZmlsZS52YWx1ZSA9IGF3YWl0IGdldFByb2dyYW1EZXJpdmVkQWRkcmVzcyh7IHByb2dyYW1BZGRyZXNzLCBzZWVkczogW2dldEJ5dGVzRW5jb2RlcigpLmVuY29kZShuZXcgVWludDhBcnJheShbMTEyLCAxMDgsIDk3LCAxMjEsIDEwMSwgMTE0LCA5NSwgMTEyLCAxMTQsIDExMSwgMTAyLCAxMDUsIDEwOCwgMTAxLCA5NSwgMTE4LCA1MSwgNTNdKSksIGdldEFkZHJlc3NFbmNvZGVyKCkuZW5jb2RlKGdldEFkZHJlc3NGcm9tUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQoXCJwbGF5ZXJcIiwgYWNjb3VudHMucGxheWVyLnZhbHVlKSldIH0pO1xufVxuaWYgKCFhY2NvdW50cy5zeXN0ZW1Qcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5zeXN0ZW1Qcm9ncmFtLnZhbHVlID0gJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyBhcyBBZGRyZXNzPCcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSc+O1xufVxuXG5jb25zdCBnZXRBY2NvdW50TWV0YSA9IGdldEFjY291bnRNZXRhRmFjdG9yeShwcm9ncmFtQWRkcmVzcywgJ3Byb2dyYW1JZCcpO1xucmV0dXJuIE9iamVjdC5mcmVlemUoeyBhY2NvdW50czogW2dldEFjY291bnRNZXRhKFwicHJvZmlsZVwiLCBhY2NvdW50cy5wcm9maWxlKSwgZ2V0QWNjb3VudE1ldGEoXCJwbGF5ZXJcIiwgYWNjb3VudHMucGxheWVyKSwgZ2V0QWNjb3VudE1ldGEoXCJwYXllclwiLCBhY2NvdW50cy5wYXllciksIGdldEFjY291bnRNZXRhKFwic3lzdGVtUHJvZ3JhbVwiLCBhY2NvdW50cy5zeXN0ZW1Qcm9ncmFtKV0sIGRhdGE6IGdldEluaXRpYWxpemVQbGF5ZXJJbnN0cnVjdGlvbkRhdGFFbmNvZGVyKCkuZW5jb2RlKHt9KSwgcHJvZ3JhbUFkZHJlc3MgfSBhcyBJbml0aWFsaXplUGxheWVySW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudFByb2ZpbGUsIFRBY2NvdW50UGxheWVyLCBUQWNjb3VudFBheWVyLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+KTtcbn1cblxuZXhwb3J0IHR5cGUgSW5pdGlhbGl6ZVBsYXllcklucHV0PFRBY2NvdW50UHJvZmlsZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRQbGF5ZXIgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGF5ZXIgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSAge1xuICBwcm9maWxlOiBBZGRyZXNzPFRBY2NvdW50UHJvZmlsZT47XG5wbGF5ZXI6IFRyYW5zYWN0aW9uU2lnbmVyPFRBY2NvdW50UGxheWVyPjtcbnBheWVyOiBUcmFuc2FjdGlvblNpZ25lcjxUQWNjb3VudFBheWVyPjtcbnN5c3RlbVByb2dyYW0/OiBBZGRyZXNzPFRBY2NvdW50U3lzdGVtUHJvZ3JhbT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbml0aWFsaXplUGxheWVySW5zdHJ1Y3Rpb248VEFjY291bnRQcm9maWxlIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBsYXllciBleHRlbmRzIHN0cmluZywgVEFjY291bnRQYXllciBleHRlbmRzIHN0cmluZywgVEFjY291bnRTeXN0ZW1Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nLCBUUHJvZ3JhbUFkZHJlc3MgZXh0ZW5kcyBBZGRyZXNzID0gdHlwZW9mIFJQU19HQU1FX1BST0dSQU1fQUREUkVTUz4oaW5wdXQ6IEluaXRpYWxpemVQbGF5ZXJJbnB1dDxUQWNjb3VudFByb2ZpbGUsIFRBY2NvdW50UGxheWVyLCBUQWNjb3VudFBheWVyLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+LCBjb25maWc/OiB7IHByb2dyYW1BZGRyZXNzPzogVFByb2dyYW1BZGRyZXNzIH0gKTogSW5pdGlhbGl6ZVBsYXllckluc3RydWN0aW9uPFRQcm9ncmFtQWRkcmVzcywgVEFjY291bnRQcm9maWxlLCBUQWNjb3VudFBsYXllciwgVEFjY291bnRQYXllciwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPiB7XG4gIC8vIFByb2dyYW0gYWRkcmVzcy5cbmNvbnN0IHByb2dyYW1BZGRyZXNzID0gY29uZmlnPy5wcm9ncmFtQWRkcmVzcyA/PyBSUFNfR0FNRV9QUk9HUkFNX0FERFJFU1M7XG5cbiAvLyBPcmlnaW5hbCBhY2NvdW50cy5cbmNvbnN0IG9yaWdpbmFsQWNjb3VudHMgPSB7IHByb2ZpbGU6IHsgdmFsdWU6IGlucHV0LnByb2ZpbGUgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBwbGF5ZXI6IHsgdmFsdWU6IGlucHV0LnBsYXllciA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHBheWVyOiB7IHZhbHVlOiBpbnB1dC5wYXllciA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHN5c3RlbVByb2dyYW06IHsgdmFsdWU6IGlucHV0LnN5c3RlbVByb2dyYW0gPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSB9XG5jb25zdCBhY2NvdW50cyA9IG9yaWdpbmFsQWNjb3VudHMgYXMgUmVjb3JkPGtleW9mIHR5cGVvZiBvcmlnaW5hbEFjY291bnRzLCBSZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudD47XG5cblxuLy8gUmVzb2x2ZSBkZWZhdWx0IHZhbHVlcy5cbmlmICghYWNjb3VudHMuc3lzdGVtUHJvZ3JhbS52YWx1ZSkge1xuYWNjb3VudHMuc3lzdGVtUHJvZ3JhbS52YWx1ZSA9ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMScgYXMgQWRkcmVzczwnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnPjtcbn1cblxuY29uc3QgZ2V0QWNjb3VudE1ldGEgPSBnZXRBY2NvdW50TWV0YUZhY3RvcnkocHJvZ3JhbUFkZHJlc3MsICdwcm9ncmFtSWQnKTtcbnJldHVybiBPYmplY3QuZnJlZXplKHsgYWNjb3VudHM6IFtnZXRBY2NvdW50TWV0YShcInByb2ZpbGVcIiwgYWNjb3VudHMucHJvZmlsZSksIGdldEFjY291bnRNZXRhKFwicGxheWVyXCIsIGFjY291bnRzLnBsYXllciksIGdldEFjY291bnRNZXRhKFwicGF5ZXJcIiwgYWNjb3VudHMucGF5ZXIpLCBnZXRBY2NvdW50TWV0YShcInN5c3RlbVByb2dyYW1cIiwgYWNjb3VudHMuc3lzdGVtUHJvZ3JhbSldLCBkYXRhOiBnZXRJbml0aWFsaXplUGxheWVySW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpLmVuY29kZSh7fSksIHByb2dyYW1BZGRyZXNzIH0gYXMgSW5pdGlhbGl6ZVBsYXllckluc3RydWN0aW9uPFRQcm9ncmFtQWRkcmVzcywgVEFjY291bnRQcm9maWxlLCBUQWNjb3VudFBsYXllciwgVEFjY291bnRQYXllciwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPik7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZEluaXRpYWxpemVQbGF5ZXJJbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHR5cGVvZiBSUFNfR0FNRV9QUk9HUkFNX0FERFJFU1MsIFRBY2NvdW50TWV0YXMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YVtdID0gcmVhZG9ubHkgQWNjb3VudE1ldGFbXT4gPSB7IHByb2dyYW1BZGRyZXNzOiBBZGRyZXNzPFRQcm9ncmFtPjtcbmFjY291bnRzOiB7XG5wcm9maWxlOiBUQWNjb3VudE1ldGFzWzBdO1xucGxheWVyOiBUQWNjb3VudE1ldGFzWzFdO1xucGF5ZXI6IFRBY2NvdW50TWV0YXNbMl07XG5zeXN0ZW1Qcm9ncmFtOiBUQWNjb3VudE1ldGFzWzNdO1xufTtcbmRhdGE6IEluaXRpYWxpemVQbGF5ZXJJbnN0cnVjdGlvbkRhdGE7IH07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUluaXRpYWxpemVQbGF5ZXJJbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVEFjY291bnRNZXRhcyBleHRlbmRzIHJlYWRvbmx5IEFjY291bnRNZXRhW10+KGluc3RydWN0aW9uOiBJbnN0cnVjdGlvbjxUUHJvZ3JhbT4gJiBJbnN0cnVjdGlvbldpdGhBY2NvdW50czxUQWNjb3VudE1ldGFzPiAmIEluc3RydWN0aW9uV2l0aERhdGE8UmVhZG9ubHlVaW50OEFycmF5Pik6IFBhcnNlZEluaXRpYWxpemVQbGF5ZXJJbnN0cnVjdGlvbjxUUHJvZ3JhbSwgVEFjY291bnRNZXRhcz4ge1xuICBpZiAoaW5zdHJ1Y3Rpb24uYWNjb3VudHMubGVuZ3RoIDwgNCkge1xuICB0aHJvdyBuZXcgU29sYW5hRXJyb3IoU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0lOU1VGRklDSUVOVF9BQ0NPVU5UX01FVEFTLCB7IGFjdHVhbEFjY291bnRNZXRhczogaW5zdHJ1Y3Rpb24uYWNjb3VudHMubGVuZ3RoLCBleHBlY3RlZEFjY291bnRNZXRhczogNCB9KTtcbn1cbmxldCBhY2NvdW50SW5kZXggPSAwO1xuY29uc3QgZ2V0TmV4dEFjY291bnQgPSAoKSA9PiB7XG4gIGNvbnN0IGFjY291bnRNZXRhID0gKGluc3RydWN0aW9uLmFjY291bnRzIGFzIFRBY2NvdW50TWV0YXMpW2FjY291bnRJbmRleF0hO1xuICBhY2NvdW50SW5kZXggKz0gMTtcbiAgcmV0dXJuIGFjY291bnRNZXRhO1xufVxuICByZXR1cm4geyBwcm9ncmFtQWRkcmVzczogaW5zdHJ1Y3Rpb24ucHJvZ3JhbUFkZHJlc3MsIGFjY291bnRzOiB7IHByb2ZpbGU6IGdldE5leHRBY2NvdW50KCksIHBsYXllcjogZ2V0TmV4dEFjY291bnQoKSwgcGF5ZXI6IGdldE5leHRBY2NvdW50KCksIHN5c3RlbVByb2dyYW06IGdldE5leHRBY2NvdW50KCkgfSwgZGF0YTogZ2V0SW5pdGlhbGl6ZVBsYXllckluc3RydWN0aW9uRGF0YURlY29kZXIoKS5kZWNvZGUoaW5zdHJ1Y3Rpb24uZGF0YSkgfTtcbn0iXX0=