@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,54 @@
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 { DUEL_PROGRAM_ADDRESS } from '../programs';
10
+ export declare const SETUP_TICKET_PERMISSION_DISCRIMINATOR: Uint8Array<ArrayBuffer>;
11
+ export declare function getSetupTicketPermissionDiscriminatorBytes(): ReadonlyUint8Array<ArrayBuffer>;
12
+ export type SetupTicketPermissionInstruction<TProgram extends string = typeof DUEL_PROGRAM_ADDRESS, TAccountTicket extends string | AccountMeta<string> = string, TAccountTenant extends string | AccountMeta<string> = string, TAccountPlayer extends string | AccountMeta<string> = string, TAccountPermission extends string | AccountMeta<string> = string, TAccountPermissionProgram extends string | AccountMeta<string> = string, TAccountSystemProgram extends string | AccountMeta<string> = "11111111111111111111111111111111", TRemainingAccounts extends readonly AccountMeta<string>[] = []> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<[TAccountTicket extends string ? ReadonlyAccount<TAccountTicket> : TAccountTicket, TAccountTenant extends string ? ReadonlyAccount<TAccountTenant> : TAccountTenant, TAccountPlayer extends string ? WritableSignerAccount<TAccountPlayer> & AccountSignerMeta<TAccountPlayer> : TAccountPlayer, TAccountPermission extends string ? WritableAccount<TAccountPermission> : TAccountPermission, TAccountPermissionProgram extends string ? ReadonlyAccount<TAccountPermissionProgram> : TAccountPermissionProgram, TAccountSystemProgram extends string ? ReadonlyAccount<TAccountSystemProgram> : TAccountSystemProgram, ...TRemainingAccounts]>;
13
+ export type SetupTicketPermissionInstructionData = {
14
+ discriminator: ReadonlyUint8Array;
15
+ };
16
+ export type SetupTicketPermissionInstructionDataArgs = {};
17
+ export declare function getSetupTicketPermissionInstructionDataEncoder(): FixedSizeEncoder<SetupTicketPermissionInstructionDataArgs>;
18
+ export declare function getSetupTicketPermissionInstructionDataDecoder(): FixedSizeDecoder<SetupTicketPermissionInstructionData>;
19
+ export declare function getSetupTicketPermissionInstructionDataCodec(): FixedSizeCodec<SetupTicketPermissionInstructionDataArgs, SetupTicketPermissionInstructionData>;
20
+ export type SetupTicketPermissionAsyncInput<TAccountTicket extends string = string, TAccountTenant extends string = string, TAccountPlayer extends string = string, TAccountPermission extends string = string, TAccountPermissionProgram extends string = string, TAccountSystemProgram extends string = string> = {
21
+ ticket?: Address<TAccountTicket>;
22
+ tenant: Address<TAccountTenant>;
23
+ player: TransactionSigner<TAccountPlayer>;
24
+ permission: Address<TAccountPermission>;
25
+ permissionProgram: Address<TAccountPermissionProgram>;
26
+ systemProgram?: Address<TAccountSystemProgram>;
27
+ };
28
+ export declare function getSetupTicketPermissionInstructionAsync<TAccountTicket extends string, TAccountTenant extends string, TAccountPlayer extends string, TAccountPermission extends string, TAccountPermissionProgram extends string, TAccountSystemProgram extends string, TProgramAddress extends Address = typeof DUEL_PROGRAM_ADDRESS>(input: SetupTicketPermissionAsyncInput<TAccountTicket, TAccountTenant, TAccountPlayer, TAccountPermission, TAccountPermissionProgram, TAccountSystemProgram>, config?: {
29
+ programAddress?: TProgramAddress;
30
+ }): Promise<SetupTicketPermissionInstruction<TProgramAddress, TAccountTicket, TAccountTenant, TAccountPlayer, TAccountPermission, TAccountPermissionProgram, TAccountSystemProgram>>;
31
+ export type SetupTicketPermissionInput<TAccountTicket extends string = string, TAccountTenant extends string = string, TAccountPlayer extends string = string, TAccountPermission extends string = string, TAccountPermissionProgram extends string = string, TAccountSystemProgram extends string = string> = {
32
+ ticket: Address<TAccountTicket>;
33
+ tenant: Address<TAccountTenant>;
34
+ player: TransactionSigner<TAccountPlayer>;
35
+ permission: Address<TAccountPermission>;
36
+ permissionProgram: Address<TAccountPermissionProgram>;
37
+ systemProgram?: Address<TAccountSystemProgram>;
38
+ };
39
+ export declare function getSetupTicketPermissionInstruction<TAccountTicket extends string, TAccountTenant extends string, TAccountPlayer extends string, TAccountPermission extends string, TAccountPermissionProgram extends string, TAccountSystemProgram extends string, TProgramAddress extends Address = typeof DUEL_PROGRAM_ADDRESS>(input: SetupTicketPermissionInput<TAccountTicket, TAccountTenant, TAccountPlayer, TAccountPermission, TAccountPermissionProgram, TAccountSystemProgram>, config?: {
40
+ programAddress?: TProgramAddress;
41
+ }): SetupTicketPermissionInstruction<TProgramAddress, TAccountTicket, TAccountTenant, TAccountPlayer, TAccountPermission, TAccountPermissionProgram, TAccountSystemProgram>;
42
+ export type ParsedSetupTicketPermissionInstruction<TProgram extends string = typeof DUEL_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[]> = {
43
+ programAddress: Address<TProgram>;
44
+ accounts: {
45
+ ticket: TAccountMetas[0];
46
+ tenant: TAccountMetas[1];
47
+ player: TAccountMetas[2];
48
+ permission: TAccountMetas[3];
49
+ permissionProgram: TAccountMetas[4];
50
+ systemProgram: TAccountMetas[5];
51
+ };
52
+ data: SetupTicketPermissionInstructionData;
53
+ };
54
+ export declare function parseSetupTicketPermissionInstruction<TProgram extends string, TAccountMetas extends readonly AccountMeta[]>(instruction: Instruction<TProgram> & InstructionWithAccounts<TAccountMetas> & InstructionWithData<ReadonlyUint8Array>): ParsedSetupTicketPermissionInstruction<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 { DUEL_PROGRAM_ADDRESS } from '../programs';
11
+ export const SETUP_TICKET_PERMISSION_DISCRIMINATOR = new Uint8Array([164, 29, 7, 235, 183, 223, 11, 85]);
12
+ export function getSetupTicketPermissionDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode(SETUP_TICKET_PERMISSION_DISCRIMINATOR); }
13
+ export function getSetupTicketPermissionInstructionDataEncoder() {
14
+ return transformEncoder(getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]), (value) => ({ ...value, discriminator: SETUP_TICKET_PERMISSION_DISCRIMINATOR }));
15
+ }
16
+ export function getSetupTicketPermissionInstructionDataDecoder() {
17
+ return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)]]);
18
+ }
19
+ export function getSetupTicketPermissionInstructionDataCodec() {
20
+ return combineCodec(getSetupTicketPermissionInstructionDataEncoder(), getSetupTicketPermissionInstructionDataDecoder());
21
+ }
22
+ export async function getSetupTicketPermissionInstructionAsync(input, config) {
23
+ // Program address.
24
+ const programAddress = config?.programAddress ?? DUEL_PROGRAM_ADDRESS;
25
+ // Original accounts.
26
+ const originalAccounts = { ticket: { value: input.ticket ?? null, isWritable: false }, tenant: { value: input.tenant ?? null, isWritable: false }, player: { value: input.player ?? null, isWritable: true }, permission: { value: input.permission ?? null, isWritable: true }, permissionProgram: { value: input.permissionProgram ?? null, isWritable: false }, systemProgram: { value: input.systemProgram ?? null, isWritable: false } };
27
+ const accounts = originalAccounts;
28
+ // Resolve default values.
29
+ if (!accounts.ticket.value) {
30
+ accounts.ticket.value = await getProgramDerivedAddress({ programAddress, seeds: [getBytesEncoder().encode(new Uint8Array([116, 105, 99, 107, 101, 116])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("player", accounts.player.value)), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("tenant", accounts.tenant.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("ticket", accounts.ticket), getAccountMeta("tenant", accounts.tenant), getAccountMeta("player", accounts.player), getAccountMeta("permission", accounts.permission), getAccountMeta("permissionProgram", accounts.permissionProgram), getAccountMeta("systemProgram", accounts.systemProgram)], data: getSetupTicketPermissionInstructionDataEncoder().encode({}), programAddress });
37
+ }
38
+ export function getSetupTicketPermissionInstruction(input, config) {
39
+ // Program address.
40
+ const programAddress = config?.programAddress ?? DUEL_PROGRAM_ADDRESS;
41
+ // Original accounts.
42
+ const originalAccounts = { ticket: { value: input.ticket ?? null, isWritable: false }, tenant: { value: input.tenant ?? null, isWritable: false }, player: { value: input.player ?? null, isWritable: true }, permission: { value: input.permission ?? null, isWritable: true }, permissionProgram: { value: input.permissionProgram ?? null, isWritable: false }, 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("ticket", accounts.ticket), getAccountMeta("tenant", accounts.tenant), getAccountMeta("player", accounts.player), getAccountMeta("permission", accounts.permission), getAccountMeta("permissionProgram", accounts.permissionProgram), getAccountMeta("systemProgram", accounts.systemProgram)], data: getSetupTicketPermissionInstructionDataEncoder().encode({}), programAddress });
50
+ }
51
+ export function parseSetupTicketPermissionInstruction(instruction) {
52
+ if (instruction.accounts.length < 6) {
53
+ throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { actualAccountMetas: instruction.accounts.length, expectedAccountMetas: 6 });
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: { ticket: getNextAccount(), tenant: getNextAccount(), player: getNextAccount(), permission: getNextAccount(), permissionProgram: getNextAccount(), systemProgram: getNextAccount() }, data: getSetupTicketPermissionInstructionDataDecoder().decode(instruction.data) };
62
+ }
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBUaWNrZXRQZXJtaXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dlbmVyYXRlZC9kdWVsL2luc3RydWN0aW9ucy9zZXR1cFRpY2tldFBlcm1pc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsd0JBQXdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUseURBQXlELEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFnVSxNQUFNLGFBQWEsQ0FBQztBQUN0bEIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHdDQUF3QyxFQUFtQyxNQUFNLDZCQUE2QixDQUFDO0FBQy9JLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRXpHLE1BQU0sVUFBVSwwQ0FBMEMsS0FBSyxPQUFPLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMscUNBQXFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFTM0osTUFBTSxVQUFVLDhDQUE4QztJQUMxRCxPQUFPLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsYUFBYSxFQUFFLHFDQUFx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UUFDM0UsWUFBWSxJQUFJLENBQUMsQ0FBQztRQUNsQixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDLENBQUE7SUFDQyxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsQ0FBQyxjQUFjLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSw4Q0FBOEMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN6VSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGNvZGUgd2FzIEFVVE9HRU5FUkFURUQgdXNpbmcgdGhlIENvZGFtYSBsaWJyYXJ5LlxuICogUGxlYXNlIERPIE5PVCBFRElUIFRISVMgRklMRSwgaW5zdGVhZCB1c2UgdmlzaXRvcnNcbiAqIHRvIGFkZCBmZWF0dXJlcywgdGhlbiByZXJ1biBDb2RhbWEgdG8gdXBkYXRlIGl0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NvZGFtYS1pZGwvY29kYW1hXG4gKi9cblxuaW1wb3J0IHsgY29tYmluZUNvZGVjLCBmaXhEZWNvZGVyU2l6ZSwgZml4RW5jb2RlclNpemUsIGdldEFkZHJlc3NFbmNvZGVyLCBnZXRCeXRlc0RlY29kZXIsIGdldEJ5dGVzRW5jb2RlciwgZ2V0UHJvZ3JhbURlcml2ZWRBZGRyZXNzLCBnZXRTdHJ1Y3REZWNvZGVyLCBnZXRTdHJ1Y3RFbmNvZGVyLCBTT0xBTkFfRVJST1JfX1BST0dSQU1fQ0xJRU5UU19fSU5TVUZGSUNJRU5UX0FDQ09VTlRfTUVUQVMsIFNvbGFuYUVycm9yLCB0cmFuc2Zvcm1FbmNvZGVyLCB0eXBlIEFjY291bnRNZXRhLCB0eXBlIEFjY291bnRTaWduZXJNZXRhLCB0eXBlIEFkZHJlc3MsIHR5cGUgRml4ZWRTaXplQ29kZWMsIHR5cGUgRml4ZWRTaXplRGVjb2RlciwgdHlwZSBGaXhlZFNpemVFbmNvZGVyLCB0eXBlIEluc3RydWN0aW9uLCB0eXBlIEluc3RydWN0aW9uV2l0aEFjY291bnRzLCB0eXBlIEluc3RydWN0aW9uV2l0aERhdGEsIHR5cGUgUmVhZG9ubHlBY2NvdW50LCB0eXBlIFJlYWRvbmx5VWludDhBcnJheSwgdHlwZSBUcmFuc2FjdGlvblNpZ25lciwgdHlwZSBXcml0YWJsZUFjY291bnQsIHR5cGUgV3JpdGFibGVTaWduZXJBY2NvdW50IH0gZnJvbSAnQHNvbGFuYS9raXQnO1xuaW1wb3J0IHsgZ2V0QWNjb3VudE1ldGFGYWN0b3J5LCBnZXRBZGRyZXNzRnJvbVJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50LCB0eXBlIFJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50IH0gZnJvbSAnQHNvbGFuYS9wcm9ncmFtLWNsaWVudC1jb3JlJztcbmltcG9ydCB7IERVRUxfUFJPR1JBTV9BRERSRVNTIH0gZnJvbSAnLi4vcHJvZ3JhbXMnO1xuXG5leHBvcnQgY29uc3QgU0VUVVBfVElDS0VUX1BFUk1JU1NJT05fRElTQ1JJTUlOQVRPUiA9IG5ldyBVaW50OEFycmF5KFsxNjQsIDI5LCA3LCAyMzUsIDE4MywgMjIzLCAxMSwgODVdKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNldHVwVGlja2V0UGVybWlzc2lvbkRpc2NyaW1pbmF0b3JCeXRlcygpIHsgcmV0dXJuIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUoU0VUVVBfVElDS0VUX1BFUk1JU1NJT05fRElTQ1JJTUlOQVRPUik7IH1cblxuZXhwb3J0IHR5cGUgU2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSB0eXBlb2YgRFVFTF9QUk9HUkFNX0FERFJFU1MsIFRBY2NvdW50VGlja2V0IGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnRUZW5hbnQgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudFBsYXllciBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50UGVybWlzc2lvbiBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50UGVybWlzc2lvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gXCIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMVwiLCBUUmVtYWluaW5nQWNjb3VudHMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YTxzdHJpbmc+W10gPSBbXT4gPVxuSW5zdHJ1Y3Rpb248VFByb2dyYW0+ICYgSW5zdHJ1Y3Rpb25XaXRoRGF0YTxSZWFkb25seVVpbnQ4QXJyYXk+ICYgSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHM8W1RBY2NvdW50VGlja2V0IGV4dGVuZHMgc3RyaW5nID8gUmVhZG9ubHlBY2NvdW50PFRBY2NvdW50VGlja2V0PiA6IFRBY2NvdW50VGlja2V0LCBUQWNjb3VudFRlbmFudCBleHRlbmRzIHN0cmluZyA/IFJlYWRvbmx5QWNjb3VudDxUQWNjb3VudFRlbmFudD4gOiBUQWNjb3VudFRlbmFudCwgVEFjY291bnRQbGF5ZXIgZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZVNpZ25lckFjY291bnQ8VEFjY291bnRQbGF5ZXI+ICYgQWNjb3VudFNpZ25lck1ldGE8VEFjY291bnRQbGF5ZXI+IDogVEFjY291bnRQbGF5ZXIsIFRBY2NvdW50UGVybWlzc2lvbiBleHRlbmRzIHN0cmluZyA/IFdyaXRhYmxlQWNjb3VudDxUQWNjb3VudFBlcm1pc3Npb24+IDogVEFjY291bnRQZXJtaXNzaW9uLCBUQWNjb3VudFBlcm1pc3Npb25Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nID8gUmVhZG9ubHlBY2NvdW50PFRBY2NvdW50UGVybWlzc2lvblByb2dyYW0+IDogVEFjY291bnRQZXJtaXNzaW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nID8gUmVhZG9ubHlBY2NvdW50PFRBY2NvdW50U3lzdGVtUHJvZ3JhbT4gOiBUQWNjb3VudFN5c3RlbVByb2dyYW0sIC4uLlRSZW1haW5pbmdBY2NvdW50c10+O1xuXG5leHBvcnQgdHlwZSBTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbkRhdGEgPSB7IGRpc2NyaW1pbmF0b3I6IFJlYWRvbmx5VWludDhBcnJheTsgIH07XG5cbmV4cG9ydCB0eXBlIFNldHVwVGlja2V0UGVybWlzc2lvbkluc3RydWN0aW9uRGF0YUFyZ3MgPSB7ICB9O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpOiBGaXhlZFNpemVFbmNvZGVyPFNldHVwVGlja2V0UGVybWlzc2lvbkluc3RydWN0aW9uRGF0YUFyZ3M+IHtcbiAgICByZXR1cm4gdHJhbnNmb3JtRW5jb2RlcihnZXRTdHJ1Y3RFbmNvZGVyKFtbJ2Rpc2NyaW1pbmF0b3InLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCldXSksICh2YWx1ZSkgPT4gKHsgLi4udmFsdWUsIGRpc2NyaW1pbmF0b3I6IFNFVFVQX1RJQ0tFVF9QRVJNSVNTSU9OX0RJU0NSSU1JTkFUT1IgfSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25EYXRhRGVjb2RlcigpOiBGaXhlZFNpemVEZWNvZGVyPFNldHVwVGlja2V0UGVybWlzc2lvbkluc3RydWN0aW9uRGF0YT4ge1xuICAgIHJldHVybiBnZXRTdHJ1Y3REZWNvZGVyKFtbJ2Rpc2NyaW1pbmF0b3InLCBmaXhEZWNvZGVyU2l6ZShnZXRCeXRlc0RlY29kZXIoKSwgOCldXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbkRhdGFDb2RlYygpOiBGaXhlZFNpemVDb2RlYzxTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbkRhdGFBcmdzLCBTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbkRhdGE+IHtcbiAgICByZXR1cm4gY29tYmluZUNvZGVjKGdldFNldHVwVGlja2V0UGVybWlzc2lvbkluc3RydWN0aW9uRGF0YUVuY29kZXIoKSwgZ2V0U2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25EYXRhRGVjb2RlcigpKTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0dXBUaWNrZXRQZXJtaXNzaW9uQXN5bmNJbnB1dDxUQWNjb3VudFRpY2tldCBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRUZW5hbnQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGxheWVyIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFBlcm1pc3Npb24gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGVybWlzc2lvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSAge1xuICB0aWNrZXQ/OiBBZGRyZXNzPFRBY2NvdW50VGlja2V0PjtcbnRlbmFudDogQWRkcmVzczxUQWNjb3VudFRlbmFudD47XG5wbGF5ZXI6IFRyYW5zYWN0aW9uU2lnbmVyPFRBY2NvdW50UGxheWVyPjtcbnBlcm1pc3Npb246IEFkZHJlc3M8VEFjY291bnRQZXJtaXNzaW9uPjtcbnBlcm1pc3Npb25Qcm9ncmFtOiBBZGRyZXNzPFRBY2NvdW50UGVybWlzc2lvblByb2dyYW0+O1xuc3lzdGVtUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRTeXN0ZW1Qcm9ncmFtPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFNldHVwVGlja2V0UGVybWlzc2lvbkluc3RydWN0aW9uQXN5bmM8VEFjY291bnRUaWNrZXQgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50VGVuYW50IGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBsYXllciBleHRlbmRzIHN0cmluZywgVEFjY291bnRQZXJtaXNzaW9uIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBlcm1pc3Npb25Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRQcm9ncmFtQWRkcmVzcyBleHRlbmRzIEFkZHJlc3MgPSB0eXBlb2YgRFVFTF9QUk9HUkFNX0FERFJFU1M+KGlucHV0OiBTZXR1cFRpY2tldFBlcm1pc3Npb25Bc3luY0lucHV0PFRBY2NvdW50VGlja2V0LCBUQWNjb3VudFRlbmFudCwgVEFjY291bnRQbGF5ZXIsIFRBY2NvdW50UGVybWlzc2lvbiwgVEFjY291bnRQZXJtaXNzaW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPiwgY29uZmlnPzogeyBwcm9ncmFtQWRkcmVzcz86IFRQcm9ncmFtQWRkcmVzcyB9ICk6IFByb21pc2U8U2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudFRpY2tldCwgVEFjY291bnRUZW5hbnQsIFRBY2NvdW50UGxheWVyLCBUQWNjb3VudFBlcm1pc3Npb24sIFRBY2NvdW50UGVybWlzc2lvblByb2dyYW0sIFRBY2NvdW50U3lzdGVtUHJvZ3JhbT4+IHtcbiAgLy8gUHJvZ3JhbSBhZGRyZXNzLlxuY29uc3QgcHJvZ3JhbUFkZHJlc3MgPSBjb25maWc/LnByb2dyYW1BZGRyZXNzID8/IERVRUxfUFJPR1JBTV9BRERSRVNTO1xuXG4gLy8gT3JpZ2luYWwgYWNjb3VudHMuXG5jb25zdCBvcmlnaW5hbEFjY291bnRzID0geyB0aWNrZXQ6IHsgdmFsdWU6IGlucHV0LnRpY2tldCA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCB0ZW5hbnQ6IHsgdmFsdWU6IGlucHV0LnRlbmFudCA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBwbGF5ZXI6IHsgdmFsdWU6IGlucHV0LnBsYXllciA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHBlcm1pc3Npb246IHsgdmFsdWU6IGlucHV0LnBlcm1pc3Npb24gPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBwZXJtaXNzaW9uUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQucGVybWlzc2lvblByb2dyYW0gPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSwgc3lzdGVtUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQuc3lzdGVtUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9IH1cbmNvbnN0IGFjY291bnRzID0gb3JpZ2luYWxBY2NvdW50cyBhcyBSZWNvcmQ8a2V5b2YgdHlwZW9mIG9yaWdpbmFsQWNjb3VudHMsIFJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50PjtcblxuXG4vLyBSZXNvbHZlIGRlZmF1bHQgdmFsdWVzLlxuaWYgKCFhY2NvdW50cy50aWNrZXQudmFsdWUpIHtcbmFjY291bnRzLnRpY2tldC52YWx1ZSA9IGF3YWl0IGdldFByb2dyYW1EZXJpdmVkQWRkcmVzcyh7IHByb2dyYW1BZGRyZXNzLCBzZWVkczogW2dldEJ5dGVzRW5jb2RlcigpLmVuY29kZShuZXcgVWludDhBcnJheShbMTE2LCAxMDUsIDk5LCAxMDcsIDEwMSwgMTE2XSkpLCBnZXRBZGRyZXNzRW5jb2RlcigpLmVuY29kZShnZXRBZGRyZXNzRnJvbVJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50KFwicGxheWVyXCIsIGFjY291bnRzLnBsYXllci52YWx1ZSkpLCBnZXRBZGRyZXNzRW5jb2RlcigpLmVuY29kZShnZXRBZGRyZXNzRnJvbVJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50KFwidGVuYW50XCIsIGFjY291bnRzLnRlbmFudC52YWx1ZSkpXSB9KTtcbn1cbmlmICghYWNjb3VudHMuc3lzdGVtUHJvZ3JhbS52YWx1ZSkge1xuYWNjb3VudHMuc3lzdGVtUHJvZ3JhbS52YWx1ZSA9ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMScgYXMgQWRkcmVzczwnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnPjtcbn1cblxuY29uc3QgZ2V0QWNjb3VudE1ldGEgPSBnZXRBY2NvdW50TWV0YUZhY3RvcnkocHJvZ3JhbUFkZHJlc3MsICdwcm9ncmFtSWQnKTtcbnJldHVybiBPYmplY3QuZnJlZXplKHsgYWNjb3VudHM6IFtnZXRBY2NvdW50TWV0YShcInRpY2tldFwiLCBhY2NvdW50cy50aWNrZXQpLCBnZXRBY2NvdW50TWV0YShcInRlbmFudFwiLCBhY2NvdW50cy50ZW5hbnQpLCBnZXRBY2NvdW50TWV0YShcInBsYXllclwiLCBhY2NvdW50cy5wbGF5ZXIpLCBnZXRBY2NvdW50TWV0YShcInBlcm1pc3Npb25cIiwgYWNjb3VudHMucGVybWlzc2lvbiksIGdldEFjY291bnRNZXRhKFwicGVybWlzc2lvblByb2dyYW1cIiwgYWNjb3VudHMucGVybWlzc2lvblByb2dyYW0pLCBnZXRBY2NvdW50TWV0YShcInN5c3RlbVByb2dyYW1cIiwgYWNjb3VudHMuc3lzdGVtUHJvZ3JhbSldLCBkYXRhOiBnZXRTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbkRhdGFFbmNvZGVyKCkuZW5jb2RlKHt9KSwgcHJvZ3JhbUFkZHJlc3MgfSBhcyBTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbjxUUHJvZ3JhbUFkZHJlc3MsIFRBY2NvdW50VGlja2V0LCBUQWNjb3VudFRlbmFudCwgVEFjY291bnRQbGF5ZXIsIFRBY2NvdW50UGVybWlzc2lvbiwgVEFjY291bnRQZXJtaXNzaW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPik7XG59XG5cbmV4cG9ydCB0eXBlIFNldHVwVGlja2V0UGVybWlzc2lvbklucHV0PFRBY2NvdW50VGlja2V0IGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFRlbmFudCBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRQbGF5ZXIgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGVybWlzc2lvbiBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRQZXJtaXNzaW9uUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRTeXN0ZW1Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9ICB7XG4gIHRpY2tldDogQWRkcmVzczxUQWNjb3VudFRpY2tldD47XG50ZW5hbnQ6IEFkZHJlc3M8VEFjY291bnRUZW5hbnQ+O1xucGxheWVyOiBUcmFuc2FjdGlvblNpZ25lcjxUQWNjb3VudFBsYXllcj47XG5wZXJtaXNzaW9uOiBBZGRyZXNzPFRBY2NvdW50UGVybWlzc2lvbj47XG5wZXJtaXNzaW9uUHJvZ3JhbTogQWRkcmVzczxUQWNjb3VudFBlcm1pc3Npb25Qcm9ncmFtPjtcbnN5c3RlbVByb2dyYW0/OiBBZGRyZXNzPFRBY2NvdW50U3lzdGVtUHJvZ3JhbT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbjxUQWNjb3VudFRpY2tldCBleHRlbmRzIHN0cmluZywgVEFjY291bnRUZW5hbnQgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50UGxheWVyIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBlcm1pc3Npb24gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50UGVybWlzc2lvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVFByb2dyYW1BZGRyZXNzIGV4dGVuZHMgQWRkcmVzcyA9IHR5cGVvZiBEVUVMX1BST0dSQU1fQUREUkVTUz4oaW5wdXQ6IFNldHVwVGlja2V0UGVybWlzc2lvbklucHV0PFRBY2NvdW50VGlja2V0LCBUQWNjb3VudFRlbmFudCwgVEFjY291bnRQbGF5ZXIsIFRBY2NvdW50UGVybWlzc2lvbiwgVEFjY291bnRQZXJtaXNzaW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPiwgY29uZmlnPzogeyBwcm9ncmFtQWRkcmVzcz86IFRQcm9ncmFtQWRkcmVzcyB9ICk6IFNldHVwVGlja2V0UGVybWlzc2lvbkluc3RydWN0aW9uPFRQcm9ncmFtQWRkcmVzcywgVEFjY291bnRUaWNrZXQsIFRBY2NvdW50VGVuYW50LCBUQWNjb3VudFBsYXllciwgVEFjY291bnRQZXJtaXNzaW9uLCBUQWNjb3VudFBlcm1pc3Npb25Qcm9ncmFtLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+IHtcbiAgLy8gUHJvZ3JhbSBhZGRyZXNzLlxuY29uc3QgcHJvZ3JhbUFkZHJlc3MgPSBjb25maWc/LnByb2dyYW1BZGRyZXNzID8/IERVRUxfUFJPR1JBTV9BRERSRVNTO1xuXG4gLy8gT3JpZ2luYWwgYWNjb3VudHMuXG5jb25zdCBvcmlnaW5hbEFjY291bnRzID0geyB0aWNrZXQ6IHsgdmFsdWU6IGlucHV0LnRpY2tldCA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCB0ZW5hbnQ6IHsgdmFsdWU6IGlucHV0LnRlbmFudCA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBwbGF5ZXI6IHsgdmFsdWU6IGlucHV0LnBsYXllciA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHBlcm1pc3Npb246IHsgdmFsdWU6IGlucHV0LnBlcm1pc3Npb24gPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBwZXJtaXNzaW9uUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQucGVybWlzc2lvblByb2dyYW0gPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSwgc3lzdGVtUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQuc3lzdGVtUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9IH1cbmNvbnN0IGFjY291bnRzID0gb3JpZ2luYWxBY2NvdW50cyBhcyBSZWNvcmQ8a2V5b2YgdHlwZW9mIG9yaWdpbmFsQWNjb3VudHMsIFJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50PjtcblxuXG4vLyBSZXNvbHZlIGRlZmF1bHQgdmFsdWVzLlxuaWYgKCFhY2NvdW50cy5zeXN0ZW1Qcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5zeXN0ZW1Qcm9ncmFtLnZhbHVlID0gJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyBhcyBBZGRyZXNzPCcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSc+O1xufVxuXG5jb25zdCBnZXRBY2NvdW50TWV0YSA9IGdldEFjY291bnRNZXRhRmFjdG9yeShwcm9ncmFtQWRkcmVzcywgJ3Byb2dyYW1JZCcpO1xucmV0dXJuIE9iamVjdC5mcmVlemUoeyBhY2NvdW50czogW2dldEFjY291bnRNZXRhKFwidGlja2V0XCIsIGFjY291bnRzLnRpY2tldCksIGdldEFjY291bnRNZXRhKFwidGVuYW50XCIsIGFjY291bnRzLnRlbmFudCksIGdldEFjY291bnRNZXRhKFwicGxheWVyXCIsIGFjY291bnRzLnBsYXllciksIGdldEFjY291bnRNZXRhKFwicGVybWlzc2lvblwiLCBhY2NvdW50cy5wZXJtaXNzaW9uKSwgZ2V0QWNjb3VudE1ldGEoXCJwZXJtaXNzaW9uUHJvZ3JhbVwiLCBhY2NvdW50cy5wZXJtaXNzaW9uUHJvZ3JhbSksIGdldEFjY291bnRNZXRhKFwic3lzdGVtUHJvZ3JhbVwiLCBhY2NvdW50cy5zeXN0ZW1Qcm9ncmFtKV0sIGRhdGE6IGdldFNldHVwVGlja2V0UGVybWlzc2lvbkluc3RydWN0aW9uRGF0YUVuY29kZXIoKS5lbmNvZGUoe30pLCBwcm9ncmFtQWRkcmVzcyB9IGFzIFNldHVwVGlja2V0UGVybWlzc2lvbkluc3RydWN0aW9uPFRQcm9ncmFtQWRkcmVzcywgVEFjY291bnRUaWNrZXQsIFRBY2NvdW50VGVuYW50LCBUQWNjb3VudFBsYXllciwgVEFjY291bnRQZXJtaXNzaW9uLCBUQWNjb3VudFBlcm1pc3Npb25Qcm9ncmFtLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+KTtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkU2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSB0eXBlb2YgRFVFTF9QUk9HUkFNX0FERFJFU1MsIFRBY2NvdW50TWV0YXMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YVtdID0gcmVhZG9ubHkgQWNjb3VudE1ldGFbXT4gPSB7IHByb2dyYW1BZGRyZXNzOiBBZGRyZXNzPFRQcm9ncmFtPjtcbmFjY291bnRzOiB7XG50aWNrZXQ6IFRBY2NvdW50TWV0YXNbMF07XG50ZW5hbnQ6IFRBY2NvdW50TWV0YXNbMV07XG5wbGF5ZXI6IFRBY2NvdW50TWV0YXNbMl07XG5wZXJtaXNzaW9uOiBUQWNjb3VudE1ldGFzWzNdO1xucGVybWlzc2lvblByb2dyYW06IFRBY2NvdW50TWV0YXNbNF07XG5zeXN0ZW1Qcm9ncmFtOiBUQWNjb3VudE1ldGFzWzVdO1xufTtcbmRhdGE6IFNldHVwVGlja2V0UGVybWlzc2lvbkluc3RydWN0aW9uRGF0YTsgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50TWV0YXMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YVtdPihpbnN0cnVjdGlvbjogSW5zdHJ1Y3Rpb248VFByb2dyYW0+ICYgSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHM8VEFjY291bnRNZXRhcz4gJiBJbnN0cnVjdGlvbldpdGhEYXRhPFJlYWRvbmx5VWludDhBcnJheT4pOiBQYXJzZWRTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbjxUUHJvZ3JhbSwgVEFjY291bnRNZXRhcz4ge1xuICBpZiAoaW5zdHJ1Y3Rpb24uYWNjb3VudHMubGVuZ3RoIDwgNikge1xuICB0aHJvdyBuZXcgU29sYW5hRXJyb3IoU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0lOU1VGRklDSUVOVF9BQ0NPVU5UX01FVEFTLCB7IGFjdHVhbEFjY291bnRNZXRhczogaW5zdHJ1Y3Rpb24uYWNjb3VudHMubGVuZ3RoLCBleHBlY3RlZEFjY291bnRNZXRhczogNiB9KTtcbn1cbmxldCBhY2NvdW50SW5kZXggPSAwO1xuY29uc3QgZ2V0TmV4dEFjY291bnQgPSAoKSA9PiB7XG4gIGNvbnN0IGFjY291bnRNZXRhID0gKGluc3RydWN0aW9uLmFjY291bnRzIGFzIFRBY2NvdW50TWV0YXMpW2FjY291bnRJbmRleF0hO1xuICBhY2NvdW50SW5kZXggKz0gMTtcbiAgcmV0dXJuIGFjY291bnRNZXRhO1xufVxuICByZXR1cm4geyBwcm9ncmFtQWRkcmVzczogaW5zdHJ1Y3Rpb24ucHJvZ3JhbUFkZHJlc3MsIGFjY291bnRzOiB7IHRpY2tldDogZ2V0TmV4dEFjY291bnQoKSwgdGVuYW50OiBnZXROZXh0QWNjb3VudCgpLCBwbGF5ZXI6IGdldE5leHRBY2NvdW50KCksIHBlcm1pc3Npb246IGdldE5leHRBY2NvdW50KCksIHBlcm1pc3Npb25Qcm9ncmFtOiBnZXROZXh0QWNjb3VudCgpLCBzeXN0ZW1Qcm9ncmFtOiBnZXROZXh0QWNjb3VudCgpIH0sIGRhdGE6IGdldFNldHVwVGlja2V0UGVybWlzc2lvbkluc3RydWN0aW9uRGF0YURlY29kZXIoKS5kZWNvZGUoaW5zdHJ1Y3Rpb24uZGF0YSkgfTtcbn0iXX0=
@@ -0,0 +1,92 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ import { type Address, type ClientWithPayer, type ClientWithRpc, type ClientWithTransactionPlanning, type ClientWithTransactionSending, type GetAccountInfoApi, type GetMultipleAccountsApi, type Instruction, type InstructionWithData, type ReadonlyUint8Array } from '@solana/kit';
9
+ import { type SelfFetchFunctions, type SelfPlanAndSendFunctions } from '@solana/program-client-core';
10
+ import { getMatchTicketCodec, getQueueCodec, getTenantCodec, type MatchTicket, type MatchTicketArgs, type Queue, type QueueArgs, type Tenant, type TenantArgs } from '../accounts';
11
+ import { getCancelTicketInstructionAsync, getCloseTicketInstructionAsync, getCommitTicketsInstruction, getCreateTicketInstructionAsync, getDelegateQueueInstructionAsync, getDelegateTicketInstructionAsync, getFlushMatchesInstruction, getInitializeQueueInstructionAsync, getInitializeTenantInstructionAsync, getJoinQueueInstructionAsync, getProcessUndelegationInstruction, getSetupTicketPermissionInstructionAsync, type CancelTicketAsyncInput, type CloseTicketAsyncInput, type CommitTicketsInput, type CreateTicketAsyncInput, type DelegateQueueAsyncInput, type DelegateTicketAsyncInput, type FlushMatchesInput, type InitializeQueueAsyncInput, type InitializeTenantAsyncInput, type JoinQueueAsyncInput, type ParsedCancelTicketInstruction, type ParsedCloseTicketInstruction, type ParsedCommitTicketsInstruction, type ParsedCreateTicketInstruction, type ParsedDelegateQueueInstruction, type ParsedDelegateTicketInstruction, type ParsedFlushMatchesInstruction, type ParsedInitializeQueueInstruction, type ParsedInitializeTenantInstruction, type ParsedJoinQueueInstruction, type ParsedProcessUndelegationInstruction, type ParsedSetupTicketPermissionInstruction, type ProcessUndelegationInput, type SetupTicketPermissionAsyncInput } from '../instructions';
12
+ export declare const DUEL_PROGRAM_ADDRESS: Address<"EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X">;
13
+ export declare enum DuelAccount {
14
+ MatchTicket = 0,
15
+ Queue = 1,
16
+ Tenant = 2
17
+ }
18
+ export declare function identifyDuelAccount(account: {
19
+ data: ReadonlyUint8Array;
20
+ } | ReadonlyUint8Array): DuelAccount;
21
+ export declare enum DuelInstruction {
22
+ CancelTicket = 0,
23
+ CloseTicket = 1,
24
+ CommitTickets = 2,
25
+ CreateTicket = 3,
26
+ DelegateQueue = 4,
27
+ DelegateTicket = 5,
28
+ FlushMatches = 6,
29
+ InitializeQueue = 7,
30
+ InitializeTenant = 8,
31
+ JoinQueue = 9,
32
+ ProcessUndelegation = 10,
33
+ SetupTicketPermission = 11
34
+ }
35
+ export declare function identifyDuelInstruction(instruction: {
36
+ data: ReadonlyUint8Array;
37
+ } | ReadonlyUint8Array): DuelInstruction;
38
+ export type ParsedDuelInstruction<TProgram extends string = 'EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X'> = {
39
+ instructionType: DuelInstruction.CancelTicket;
40
+ } & ParsedCancelTicketInstruction<TProgram> | {
41
+ instructionType: DuelInstruction.CloseTicket;
42
+ } & ParsedCloseTicketInstruction<TProgram> | {
43
+ instructionType: DuelInstruction.CommitTickets;
44
+ } & ParsedCommitTicketsInstruction<TProgram> | {
45
+ instructionType: DuelInstruction.CreateTicket;
46
+ } & ParsedCreateTicketInstruction<TProgram> | {
47
+ instructionType: DuelInstruction.DelegateQueue;
48
+ } & ParsedDelegateQueueInstruction<TProgram> | {
49
+ instructionType: DuelInstruction.DelegateTicket;
50
+ } & ParsedDelegateTicketInstruction<TProgram> | {
51
+ instructionType: DuelInstruction.FlushMatches;
52
+ } & ParsedFlushMatchesInstruction<TProgram> | {
53
+ instructionType: DuelInstruction.InitializeQueue;
54
+ } & ParsedInitializeQueueInstruction<TProgram> | {
55
+ instructionType: DuelInstruction.InitializeTenant;
56
+ } & ParsedInitializeTenantInstruction<TProgram> | {
57
+ instructionType: DuelInstruction.JoinQueue;
58
+ } & ParsedJoinQueueInstruction<TProgram> | {
59
+ instructionType: DuelInstruction.ProcessUndelegation;
60
+ } & ParsedProcessUndelegationInstruction<TProgram> | {
61
+ instructionType: DuelInstruction.SetupTicketPermission;
62
+ } & ParsedSetupTicketPermissionInstruction<TProgram>;
63
+ export declare function parseDuelInstruction<TProgram extends string>(instruction: Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array>): ParsedDuelInstruction<TProgram>;
64
+ export type DuelPlugin = {
65
+ accounts: DuelPluginAccounts;
66
+ instructions: DuelPluginInstructions;
67
+ };
68
+ export type DuelPluginAccounts = {
69
+ matchTicket: ReturnType<typeof getMatchTicketCodec> & SelfFetchFunctions<MatchTicketArgs, MatchTicket>;
70
+ queue: ReturnType<typeof getQueueCodec> & SelfFetchFunctions<QueueArgs, Queue>;
71
+ tenant: ReturnType<typeof getTenantCodec> & SelfFetchFunctions<TenantArgs, Tenant>;
72
+ };
73
+ export type DuelPluginInstructions = {
74
+ cancelTicket: (input: CancelTicketAsyncInput) => ReturnType<typeof getCancelTicketInstructionAsync> & SelfPlanAndSendFunctions;
75
+ closeTicket: (input: CloseTicketAsyncInput) => ReturnType<typeof getCloseTicketInstructionAsync> & SelfPlanAndSendFunctions;
76
+ commitTickets: (input: MakeOptional<CommitTicketsInput, "payer">) => ReturnType<typeof getCommitTicketsInstruction> & SelfPlanAndSendFunctions;
77
+ createTicket: (input: CreateTicketAsyncInput) => ReturnType<typeof getCreateTicketInstructionAsync> & SelfPlanAndSendFunctions;
78
+ delegateQueue: (input: MakeOptional<DelegateQueueAsyncInput, "payer">) => ReturnType<typeof getDelegateQueueInstructionAsync> & SelfPlanAndSendFunctions;
79
+ delegateTicket: (input: MakeOptional<DelegateTicketAsyncInput, "payer">) => ReturnType<typeof getDelegateTicketInstructionAsync> & SelfPlanAndSendFunctions;
80
+ flushMatches: (input: FlushMatchesInput) => ReturnType<typeof getFlushMatchesInstruction> & SelfPlanAndSendFunctions;
81
+ initializeQueue: (input: InitializeQueueAsyncInput) => ReturnType<typeof getInitializeQueueInstructionAsync> & SelfPlanAndSendFunctions;
82
+ initializeTenant: (input: InitializeTenantAsyncInput) => ReturnType<typeof getInitializeTenantInstructionAsync> & SelfPlanAndSendFunctions;
83
+ joinQueue: (input: JoinQueueAsyncInput) => ReturnType<typeof getJoinQueueInstructionAsync> & SelfPlanAndSendFunctions;
84
+ processUndelegation: (input: MakeOptional<ProcessUndelegationInput, "payer">) => ReturnType<typeof getProcessUndelegationInstruction> & SelfPlanAndSendFunctions;
85
+ setupTicketPermission: (input: SetupTicketPermissionAsyncInput) => ReturnType<typeof getSetupTicketPermissionInstructionAsync> & SelfPlanAndSendFunctions;
86
+ };
87
+ export type DuelPluginRequirements = ClientWithRpc<GetAccountInfoApi & GetMultipleAccountsApi> & ClientWithPayer & ClientWithTransactionPlanning & ClientWithTransactionSending;
88
+ export declare function duelProgram(): <T extends DuelPluginRequirements>(client: T) => T & {
89
+ duel: DuelPlugin;
90
+ };
91
+ type MakeOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
92
+ export {};
@@ -0,0 +1,146 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ import { assertIsInstructionWithAccounts, containsBytes, fixEncoderSize, getBytesEncoder, SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_ACCOUNT, SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION, SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE, SolanaError } from '@solana/kit';
9
+ import { addSelfFetchFunctions, addSelfPlanAndSendFunctions } from '@solana/program-client-core';
10
+ import { getMatchTicketCodec, getQueueCodec, getTenantCodec } from '../accounts';
11
+ import { getCancelTicketInstructionAsync, getCloseTicketInstructionAsync, getCommitTicketsInstruction, getCreateTicketInstructionAsync, getDelegateQueueInstructionAsync, getDelegateTicketInstructionAsync, getFlushMatchesInstruction, getInitializeQueueInstructionAsync, getInitializeTenantInstructionAsync, getJoinQueueInstructionAsync, getProcessUndelegationInstruction, getSetupTicketPermissionInstructionAsync, parseCancelTicketInstruction, parseCloseTicketInstruction, parseCommitTicketsInstruction, parseCreateTicketInstruction, parseDelegateQueueInstruction, parseDelegateTicketInstruction, parseFlushMatchesInstruction, parseInitializeQueueInstruction, parseInitializeTenantInstruction, parseJoinQueueInstruction, parseProcessUndelegationInstruction, parseSetupTicketPermissionInstruction } from '../instructions';
12
+ export const DUEL_PROGRAM_ADDRESS = 'EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X';
13
+ export var DuelAccount;
14
+ (function (DuelAccount) {
15
+ DuelAccount[DuelAccount["MatchTicket"] = 0] = "MatchTicket";
16
+ DuelAccount[DuelAccount["Queue"] = 1] = "Queue";
17
+ DuelAccount[DuelAccount["Tenant"] = 2] = "Tenant";
18
+ })(DuelAccount || (DuelAccount = {}));
19
+ export function identifyDuelAccount(account) {
20
+ const data = 'data' in account ? account.data : account;
21
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([11, 131, 4, 157, 207, 79, 126, 5])), 0)) {
22
+ return DuelAccount.MatchTicket;
23
+ }
24
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([204, 167, 6, 247, 20, 33, 2, 188])), 0)) {
25
+ return DuelAccount.Queue;
26
+ }
27
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([61, 43, 215, 51, 232, 242, 209, 170])), 0)) {
28
+ return DuelAccount.Tenant;
29
+ }
30
+ throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_ACCOUNT, { accountData: data, programName: "duel" });
31
+ }
32
+ export var DuelInstruction;
33
+ (function (DuelInstruction) {
34
+ DuelInstruction[DuelInstruction["CancelTicket"] = 0] = "CancelTicket";
35
+ DuelInstruction[DuelInstruction["CloseTicket"] = 1] = "CloseTicket";
36
+ DuelInstruction[DuelInstruction["CommitTickets"] = 2] = "CommitTickets";
37
+ DuelInstruction[DuelInstruction["CreateTicket"] = 3] = "CreateTicket";
38
+ DuelInstruction[DuelInstruction["DelegateQueue"] = 4] = "DelegateQueue";
39
+ DuelInstruction[DuelInstruction["DelegateTicket"] = 5] = "DelegateTicket";
40
+ DuelInstruction[DuelInstruction["FlushMatches"] = 6] = "FlushMatches";
41
+ DuelInstruction[DuelInstruction["InitializeQueue"] = 7] = "InitializeQueue";
42
+ DuelInstruction[DuelInstruction["InitializeTenant"] = 8] = "InitializeTenant";
43
+ DuelInstruction[DuelInstruction["JoinQueue"] = 9] = "JoinQueue";
44
+ DuelInstruction[DuelInstruction["ProcessUndelegation"] = 10] = "ProcessUndelegation";
45
+ DuelInstruction[DuelInstruction["SetupTicketPermission"] = 11] = "SetupTicketPermission";
46
+ })(DuelInstruction || (DuelInstruction = {}));
47
+ export function identifyDuelInstruction(instruction) {
48
+ const data = 'data' in instruction ? instruction.data : instruction;
49
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([216, 28, 247, 206, 195, 171, 100, 143])), 0)) {
50
+ return DuelInstruction.CancelTicket;
51
+ }
52
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([66, 209, 114, 197, 75, 27, 182, 117])), 0)) {
53
+ return DuelInstruction.CloseTicket;
54
+ }
55
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([245, 199, 81, 0, 62, 133, 18, 22])), 0)) {
56
+ return DuelInstruction.CommitTickets;
57
+ }
58
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([16, 178, 122, 25, 213, 85, 96, 129])), 0)) {
59
+ return DuelInstruction.CreateTicket;
60
+ }
61
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([31, 200, 139, 125, 93, 239, 83, 87])), 0)) {
62
+ return DuelInstruction.DelegateQueue;
63
+ }
64
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([195, 3, 78, 64, 128, 235, 209, 171])), 0)) {
65
+ return DuelInstruction.DelegateTicket;
66
+ }
67
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([49, 148, 163, 71, 77, 63, 197, 76])), 0)) {
68
+ return DuelInstruction.FlushMatches;
69
+ }
70
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([174, 102, 132, 232, 90, 202, 27, 20])), 0)) {
71
+ return DuelInstruction.InitializeQueue;
72
+ }
73
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([94, 120, 34, 186, 57, 167, 241, 206])), 0)) {
74
+ return DuelInstruction.InitializeTenant;
75
+ }
76
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([157, 115, 48, 109, 65, 86, 203, 238])), 0)) {
77
+ return DuelInstruction.JoinQueue;
78
+ }
79
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([196, 28, 41, 206, 48, 37, 51, 167])), 0)) {
80
+ return DuelInstruction.ProcessUndelegation;
81
+ }
82
+ if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([164, 29, 7, 235, 183, 223, 11, 85])), 0)) {
83
+ return DuelInstruction.SetupTicketPermission;
84
+ }
85
+ throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION, { instructionData: data, programName: "duel" });
86
+ }
87
+ export function parseDuelInstruction(instruction) {
88
+ const instructionType = identifyDuelInstruction(instruction);
89
+ switch (instructionType) {
90
+ case DuelInstruction.CancelTicket: {
91
+ assertIsInstructionWithAccounts(instruction);
92
+ return { instructionType: DuelInstruction.CancelTicket, ...parseCancelTicketInstruction(instruction) };
93
+ }
94
+ case DuelInstruction.CloseTicket: {
95
+ assertIsInstructionWithAccounts(instruction);
96
+ return { instructionType: DuelInstruction.CloseTicket, ...parseCloseTicketInstruction(instruction) };
97
+ }
98
+ case DuelInstruction.CommitTickets: {
99
+ assertIsInstructionWithAccounts(instruction);
100
+ return { instructionType: DuelInstruction.CommitTickets, ...parseCommitTicketsInstruction(instruction) };
101
+ }
102
+ case DuelInstruction.CreateTicket: {
103
+ assertIsInstructionWithAccounts(instruction);
104
+ return { instructionType: DuelInstruction.CreateTicket, ...parseCreateTicketInstruction(instruction) };
105
+ }
106
+ case DuelInstruction.DelegateQueue: {
107
+ assertIsInstructionWithAccounts(instruction);
108
+ return { instructionType: DuelInstruction.DelegateQueue, ...parseDelegateQueueInstruction(instruction) };
109
+ }
110
+ case DuelInstruction.DelegateTicket: {
111
+ assertIsInstructionWithAccounts(instruction);
112
+ return { instructionType: DuelInstruction.DelegateTicket, ...parseDelegateTicketInstruction(instruction) };
113
+ }
114
+ case DuelInstruction.FlushMatches: {
115
+ assertIsInstructionWithAccounts(instruction);
116
+ return { instructionType: DuelInstruction.FlushMatches, ...parseFlushMatchesInstruction(instruction) };
117
+ }
118
+ case DuelInstruction.InitializeQueue: {
119
+ assertIsInstructionWithAccounts(instruction);
120
+ return { instructionType: DuelInstruction.InitializeQueue, ...parseInitializeQueueInstruction(instruction) };
121
+ }
122
+ case DuelInstruction.InitializeTenant: {
123
+ assertIsInstructionWithAccounts(instruction);
124
+ return { instructionType: DuelInstruction.InitializeTenant, ...parseInitializeTenantInstruction(instruction) };
125
+ }
126
+ case DuelInstruction.JoinQueue: {
127
+ assertIsInstructionWithAccounts(instruction);
128
+ return { instructionType: DuelInstruction.JoinQueue, ...parseJoinQueueInstruction(instruction) };
129
+ }
130
+ case DuelInstruction.ProcessUndelegation: {
131
+ assertIsInstructionWithAccounts(instruction);
132
+ return { instructionType: DuelInstruction.ProcessUndelegation, ...parseProcessUndelegationInstruction(instruction) };
133
+ }
134
+ case DuelInstruction.SetupTicketPermission: {
135
+ assertIsInstructionWithAccounts(instruction);
136
+ return { instructionType: DuelInstruction.SetupTicketPermission, ...parseSetupTicketPermissionInstruction(instruction) };
137
+ }
138
+ default: throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE, { instructionType: instructionType, programName: "duel" });
139
+ }
140
+ }
141
+ export function duelProgram() {
142
+ return (client) => {
143
+ return { ...client, duel: { accounts: { matchTicket: addSelfFetchFunctions(client, getMatchTicketCodec()), queue: addSelfFetchFunctions(client, getQueueCodec()), tenant: addSelfFetchFunctions(client, getTenantCodec()) }, instructions: { cancelTicket: input => addSelfPlanAndSendFunctions(client, getCancelTicketInstructionAsync(input)), closeTicket: input => addSelfPlanAndSendFunctions(client, getCloseTicketInstructionAsync(input)), commitTickets: input => addSelfPlanAndSendFunctions(client, getCommitTicketsInstruction({ ...input, payer: input.payer ?? client.payer })), createTicket: input => addSelfPlanAndSendFunctions(client, getCreateTicketInstructionAsync(input)), delegateQueue: input => addSelfPlanAndSendFunctions(client, getDelegateQueueInstructionAsync({ ...input, payer: input.payer ?? client.payer })), delegateTicket: input => addSelfPlanAndSendFunctions(client, getDelegateTicketInstructionAsync({ ...input, payer: input.payer ?? client.payer })), flushMatches: input => addSelfPlanAndSendFunctions(client, getFlushMatchesInstruction(input)), initializeQueue: input => addSelfPlanAndSendFunctions(client, getInitializeQueueInstructionAsync(input)), initializeTenant: input => addSelfPlanAndSendFunctions(client, getInitializeTenantInstructionAsync(input)), joinQueue: input => addSelfPlanAndSendFunctions(client, getJoinQueueInstructionAsync(input)), processUndelegation: input => addSelfPlanAndSendFunctions(client, getProcessUndelegationInstruction({ ...input, payer: input.payer ?? client.payer.address })), setupTicketPermission: input => addSelfPlanAndSendFunctions(client, getSetupTicketPermissionInstructionAsync(input)) } } };
144
+ };
145
+ }
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvZHVlbC9wcm9ncmFtcy9kdWVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSx5REFBeUQsRUFBRSw2REFBNkQsRUFBRSw0REFBNEQsRUFBRSxXQUFXLEVBQTJQLE1BQU0sYUFBYSxDQUFDO0FBQzVpQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsMkJBQTJCLEVBQTBELE1BQU0sNkJBQTZCLENBQUM7QUFDekosT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQW9HLE1BQU0sYUFBYSxDQUFDO0FBQ25MLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSw4QkFBOEIsRUFBRSwyQkFBMkIsRUFBRSwrQkFBK0IsRUFBRSxnQ0FBZ0MsRUFBRSxpQ0FBaUMsRUFBRSwwQkFBMEIsRUFBRSxrQ0FBa0MsRUFBRSxtQ0FBbUMsRUFBRSw0QkFBNEIsRUFBRSxpQ0FBaUMsRUFBRSx3Q0FBd0MsRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSw2QkFBNkIsRUFBRSw0QkFBNEIsRUFBRSw2QkFBNkIsRUFBRSw4QkFBOEIsRUFBRSw0QkFBNEIsRUFBRSwrQkFBK0IsRUFBRSxnQ0FBZ0MsRUFBRSx5QkFBeUIsRUFBRSxtQ0FBbUMsRUFBRSxxQ0FBcUMsRUFBNnlCLE1BQU0saUJBQWlCLENBQUM7QUFFL2xELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLDhDQUF5RyxDQUFDO0FBRTlJLE1BQU0sQ0FBTixJQUFZLFdBQTBDO0FBQXRELFdBQVksV0FBVztJQUFHLDJEQUFXLENBQUE7SUFBRSwrQ0FBSyxDQUFBO0lBQUUsaURBQU0sQ0FBQTtBQUFDLENBQUMsRUFBMUMsV0FBVyxLQUFYLFdBQVcsUUFBK0I7QUFFdEQsTUFBTSxVQUFV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QyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLGVBQWUsQ0FBQyxjQUFjLENBQUM7SUFBQyxDQUFDO0lBQ3pLLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxlQUFlLENBQUMsWUFBWSxDQUFDO0lBQUMsQ0FBQztJQUN0SyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sZUFBZSxDQUFDLGVBQWUsQ0FBQztJQUFDLENBQUM7SUFDM0ssSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztJQUFDLENBQUM7SUFDNUssSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLGVBQWUsQ0FBQyxTQUFTLENBQUM7SUFBQyxDQUFDO0lBQ3JLLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxlQUFlLENBQUMsbUJBQW1CLENBQUM7SUFBQyxDQUFDO0lBQzdLLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxlQUFlLENBQUMscUJBQXFCLENBQUM7SUFBQyxDQUFDO0lBQzNLLE1BQU0sSUFBSSxXQUFXLENBQUMsNkRBQTZELEVBQUUsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3pJLENBQUM7QUFpQk8sTUFBTSxVQUFVLG9CQUFvQixDQUNoQyxXQUM2QztJQUU3QyxNQUFNLGVBQWUsR0FBRyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM3RCxRQUFRLGVBQWUsRUFBRSxDQUFDO1FBQ3RCLEtBQUssZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFBQywrQkFBK0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRyxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxZQUFZLEVBQUUsR0FBRyw0QkFBNEIsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQUMsQ0FBQztRQUN6RyxLQUFLLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQUMsK0JBQStCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsV0FBVyxFQUFFLEdBQUcsMkJBQTJCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUFDLENBQUM7UUFDdkcsS0FBSyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUFDLCtCQUErQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLGFBQWEsRUFBRSxHQUFHLDZCQUE2QixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFBQyxDQUFDO1FBQzNHLEtBQUssZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFBQywrQkFBK0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxZQUFZLEVBQUUsR0FBRyw0QkFBNEIsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQUMsQ0FBQztRQUN6RyxLQUFLLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQUMsK0JBQStCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsYUFBYSxFQUFFLEdBQUcsNkJBQTZCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUFDLENBQUM7UUFDM0csS0FBSyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUFDLCtCQUErQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLGNBQWMsRUFBRSxHQUFHLDhCQUE4QixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFBQyxDQUFDO1FBQzdHLEtBQUssZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFBQywrQkFBK0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxZQUFZLEVBQUUsR0FBRyw0QkFBNEIsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQUMsQ0FBQztRQUN6RyxLQUFLLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQUMsK0JBQStCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsZUFBZSxFQUFFLEdBQUcsK0JBQStCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUFDLENBQUM7UUFDL0csS0FBSyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQUMsK0JBQStCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxnQ0FBZ0MsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQUMsQ0FBQztRQUNqSCxLQUFLLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQUMsK0JBQStCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDL0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsU0FBUyxFQUFFLEdBQUcseUJBQXlCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUFDLENBQUM7UUFDbkcsS0FBSyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQUMsK0JBQStCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxtQ0FBbUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQUMsQ0FBQztRQUN2SCxLQUFLLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7WUFBQywrQkFBK0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMzRixPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLHFDQUFxQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFBQyxDQUFDO1FBQzNHLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxXQUFXLENBQUMsNERBQTRELEVBQUUsRUFBRSxlQUFlLEVBQUUsZUFBeUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN0SyxDQUFDO0FBQ0wsQ0FBQztBQVVULE1BQU0sVUFBVSxXQUFXO0lBQ3ZCLE9BQU8sQ0FBbUMsTUFBUyxFQUFFLEVBQUU7UUFDbkQsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBYyxFQUFFLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUscUJBQXFCLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsK0JBQStCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsOEJBQThCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsMkJBQTJCLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sRUFBRSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sRUFBRSxnQ0FBZ0MsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLGlDQUFpQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sRUFBRSxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sRUFBRSw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLGlDQUFpQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsd0NBQXdDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNyb0QsQ0FBQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBjb2RlIHdhcyBBVVRPR0VORVJBVEVEIHVzaW5nIHRoZSBDb2RhbWEgbGlicmFyeS5cbiAqIFBsZWFzZSBETyBOT1QgRURJVCBUSElTIEZJTEUsIGluc3RlYWQgdXNlIHZpc2l0b3JzXG4gKiB0byBhZGQgZmVhdHVyZXMsIHRoZW4gcmVydW4gQ29kYW1hIHRvIHVwZGF0ZSBpdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RhbWEtaWRsL2NvZGFtYVxuICovXG5cbmltcG9ydCB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMsIGNvbnRhaW5zQnl0ZXMsIGZpeEVuY29kZXJTaXplLCBnZXRCeXRlc0VuY29kZXIsIFNPTEFOQV9FUlJPUl9fUFJPR1JBTV9DTElFTlRTX19GQUlMRURfVE9fSURFTlRJRllfQUNDT1VOVCwgU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0ZBSUxFRF9UT19JREVOVElGWV9JTlNUUlVDVElPTiwgU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX1VOUkVDT0dOSVpFRF9JTlNUUlVDVElPTl9UWVBFLCBTb2xhbmFFcnJvciwgdHlwZSBBZGRyZXNzLCB0eXBlIENsaWVudFdpdGhQYXllciwgdHlwZSBDbGllbnRXaXRoUnBjLCB0eXBlIENsaWVudFdpdGhUcmFuc2FjdGlvblBsYW5uaW5nLCB0eXBlIENsaWVudFdpdGhUcmFuc2FjdGlvblNlbmRpbmcsIHR5cGUgR2V0QWNjb3VudEluZm9BcGksIHR5cGUgR2V0TXVsdGlwbGVBY2NvdW50c0FwaSwgdHlwZSBJbnN0cnVjdGlvbiwgdHlwZSBJbnN0cnVjdGlvbldpdGhEYXRhLCB0eXBlIFJlYWRvbmx5VWludDhBcnJheSB9IGZyb20gJ0Bzb2xhbmEva2l0JztcbmltcG9ydCB7IGFkZFNlbGZGZXRjaEZ1bmN0aW9ucywgYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zLCB0eXBlIFNlbGZGZXRjaEZ1bmN0aW9ucywgdHlwZSBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMgfSBmcm9tICdAc29sYW5hL3Byb2dyYW0tY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hUaWNrZXRDb2RlYywgZ2V0UXVldWVDb2RlYywgZ2V0VGVuYW50Q29kZWMsIHR5cGUgTWF0Y2hUaWNrZXQsIHR5cGUgTWF0Y2hUaWNrZXRBcmdzLCB0eXBlIFF1ZXVlLCB0eXBlIFF1ZXVlQXJncywgdHlwZSBUZW5hbnQsIHR5cGUgVGVuYW50QXJncyB9IGZyb20gJy4uL2FjY291bnRzJztcbmltcG9ydCB7IGdldENhbmNlbFRpY2tldEluc3RydWN0aW9uQXN5bmMsIGdldENsb3NlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYywgZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uLCBnZXRDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLCBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYywgZ2V0RGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLCBnZXRGbHVzaE1hdGNoZXNJbnN0cnVjdGlvbiwgZ2V0SW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYywgZ2V0SW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uQXN5bmMsIGdldEpvaW5RdWV1ZUluc3RydWN0aW9uQXN5bmMsIGdldFByb2Nlc3NVbmRlbGVnYXRpb25JbnN0cnVjdGlvbiwgZ2V0U2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25Bc3luYywgcGFyc2VDYW5jZWxUaWNrZXRJbnN0cnVjdGlvbiwgcGFyc2VDbG9zZVRpY2tldEluc3RydWN0aW9uLCBwYXJzZUNvbW1pdFRpY2tldHNJbnN0cnVjdGlvbiwgcGFyc2VDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbiwgcGFyc2VEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb24sIHBhcnNlRGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbiwgcGFyc2VGbHVzaE1hdGNoZXNJbnN0cnVjdGlvbiwgcGFyc2VJbml0aWFsaXplUXVldWVJbnN0cnVjdGlvbiwgcGFyc2VJbml0aWFsaXplVGVuYW50SW5zdHJ1Y3Rpb24sIHBhcnNlSm9pblF1ZXVlSW5zdHJ1Y3Rpb24sIHBhcnNlUHJvY2Vzc1VuZGVsZWdhdGlvbkluc3RydWN0aW9uLCBwYXJzZVNldHVwVGlja2V0UGVybWlzc2lvbkluc3RydWN0aW9uLCB0eXBlIENhbmNlbFRpY2tldEFzeW5jSW5wdXQsIHR5cGUgQ2xvc2VUaWNrZXRBc3luY0lucHV0LCB0eXBlIENvbW1pdFRpY2tldHNJbnB1dCwgdHlwZSBDcmVhdGVUaWNrZXRBc3luY0lucHV0LCB0eXBlIERlbGVnYXRlUXVldWVBc3luY0lucHV0LCB0eXBlIERlbGVnYXRlVGlja2V0QXN5bmNJbnB1dCwgdHlwZSBGbHVzaE1hdGNoZXNJbnB1dCwgdHlwZSBJbml0aWFsaXplUXVldWVBc3luY0lucHV0LCB0eXBlIEluaXRpYWxpemVUZW5hbnRBc3luY0lucHV0LCB0eXBlIEpvaW5RdWV1ZUFzeW5jSW5wdXQsIHR5cGUgUGFyc2VkQ2FuY2VsVGlja2V0SW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkQ2xvc2VUaWNrZXRJbnN0cnVjdGlvbiwgdHlwZSBQYXJzZWRDb21taXRUaWNrZXRzSW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkQ3JlYXRlVGlja2V0SW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uLCB0eXBlIFBhcnNlZERlbGVnYXRlVGlja2V0SW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkRmx1c2hNYXRjaGVzSW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkSW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkSW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uLCB0eXBlIFBhcnNlZEpvaW5RdWV1ZUluc3RydWN0aW9uLCB0eXBlIFBhcnNlZFByb2Nlc3NVbmRlbGVnYXRpb25JbnN0cnVjdGlvbiwgdHlwZSBQYXJzZWRTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbiwgdHlwZSBQcm9jZXNzVW5kZWxlZ2F0aW9uSW5wdXQsIHR5cGUgU2V0dXBUaWNrZXRQZXJtaXNzaW9uQXN5bmNJbnB1dCB9IGZyb20gJy4uL2luc3RydWN0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBEVUVMX1BST0dSQU1fQUREUkVTUyA9ICdFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WCcgYXMgQWRkcmVzczwnRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVgnPjtcblxuZXhwb3J0IGVudW0gRHVlbEFjY291bnQgeyBNYXRjaFRpY2tldCwgUXVldWUsIFRlbmFudCB9XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmeUR1ZWxBY2NvdW50KGFjY291bnQ6IHsgZGF0YTogUmVhZG9ubHlVaW50OEFycmF5IH0gfCBSZWFkb25seVVpbnQ4QXJyYXkpOiBEdWVsQWNjb3VudCB7XG4gICAgY29uc3QgZGF0YSA9ICdkYXRhJyBpbiBhY2NvdW50ID8gYWNjb3VudC5kYXRhIDogYWNjb3VudDtcbiAgICBpZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxMSwgMTMxLCA0LCAxNTcsIDIwNywgNzksIDEyNiwgNV0pKSwgMCkpIHsgcmV0dXJuIER1ZWxBY2NvdW50Lk1hdGNoVGlja2V0OyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsyMDQsIDE2NywgNiwgMjQ3LCAyMCwgMzMsIDIsIDE4OF0pKSwgMCkpIHsgcmV0dXJuIER1ZWxBY2NvdW50LlF1ZXVlOyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFs2MSwgNDMsIDIxNSwgNTEsIDIzMiwgMjQyLCAyMDksIDE3MF0pKSwgMCkpIHsgcmV0dXJuIER1ZWxBY2NvdW50LlRlbmFudDsgfVxuICAgIHRocm93IG5ldyBTb2xhbmFFcnJvcihTT0xBTkFfRVJST1JfX1BST0dSQU1fQ0xJRU5UU19fRkFJTEVEX1RPX0lERU5USUZZX0FDQ09VTlQsIHsgYWNjb3VudERhdGE6IGRhdGEsIHByb2dyYW1OYW1lOiBcImR1ZWxcIiB9KTtcbn1cblxuZXhwb3J0IGVudW0gRHVlbEluc3RydWN0aW9uIHsgQ2FuY2VsVGlja2V0LCBDbG9zZVRpY2tldCwgQ29tbWl0VGlja2V0cywgQ3JlYXRlVGlja2V0LCBEZWxlZ2F0ZVF1ZXVlLCBEZWxlZ2F0ZVRpY2tldCwgRmx1c2hNYXRjaGVzLCBJbml0aWFsaXplUXVldWUsIEluaXRpYWxpemVUZW5hbnQsIEpvaW5RdWV1ZSwgUHJvY2Vzc1VuZGVsZWdhdGlvbiwgU2V0dXBUaWNrZXRQZXJtaXNzaW9uIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZ5RHVlbEluc3RydWN0aW9uKGluc3RydWN0aW9uOiB7IGRhdGE6IFJlYWRvbmx5VWludDhBcnJheSB9IHwgUmVhZG9ubHlVaW50OEFycmF5KTogRHVlbEluc3RydWN0aW9uIHtcbiAgICBjb25zdCBkYXRhID0gJ2RhdGEnIGluIGluc3RydWN0aW9uID8gaW5zdHJ1Y3Rpb24uZGF0YSA6IGluc3RydWN0aW9uO1xuICAgIGlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzIxNiwgMjgsIDI0NywgMjA2LCAxOTUsIDE3MSwgMTAwLCAxNDNdKSksIDApKSB7IHJldHVybiBEdWVsSW5zdHJ1Y3Rpb24uQ2FuY2VsVGlja2V0OyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFs2NiwgMjA5LCAxMTQsIDE5NywgNzUsIDI3LCAxODIsIDExN10pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5DbG9zZVRpY2tldDsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMjQ1LCAxOTksIDgxLCAwLCA2MiwgMTMzLCAxOCwgMjJdKSksIDApKSB7IHJldHVybiBEdWVsSW5zdHJ1Y3Rpb24uQ29tbWl0VGlja2V0czsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMTYsIDE3OCwgMTIyLCAyNSwgMjEzLCA4NSwgOTYsIDEyOV0pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5DcmVhdGVUaWNrZXQ7IH1cbmlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzMxLCAyMDAsIDEzOSwgMTI1LCA5MywgMjM5LCA4MywgODddKSksIDApKSB7IHJldHVybiBEdWVsSW5zdHJ1Y3Rpb24uRGVsZWdhdGVRdWV1ZTsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMTk1LCAzLCA3OCwgNjQsIDEyOCwgMjM1LCAyMDksIDE3MV0pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5EZWxlZ2F0ZVRpY2tldDsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbNDksIDE0OCwgMTYzLCA3MSwgNzcsIDYzLCAxOTcsIDc2XSkpLCAwKSkgeyByZXR1cm4gRHVlbEluc3RydWN0aW9uLkZsdXNoTWF0Y2hlczsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMTc0LCAxMDIsIDEzMiwgMjMyLCA5MCwgMjAyLCAyNywgMjBdKSksIDApKSB7IHJldHVybiBEdWVsSW5zdHJ1Y3Rpb24uSW5pdGlhbGl6ZVF1ZXVlOyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFs5NCwgMTIwLCAzNCwgMTg2LCA1NywgMTY3LCAyNDEsIDIwNl0pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplVGVuYW50OyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxNTcsIDExNSwgNDgsIDEwOSwgNjUsIDg2LCAyMDMsIDIzOF0pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5Kb2luUXVldWU7IH1cbmlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzE5NiwgMjgsIDQxLCAyMDYsIDQ4LCAzNywgNTEsIDE2N10pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5Qcm9jZXNzVW5kZWxlZ2F0aW9uOyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxNjQsIDI5LCA3LCAyMzUsIDE4MywgMjIzLCAxMSwgODVdKSksIDApKSB7IHJldHVybiBEdWVsSW5zdHJ1Y3Rpb24uU2V0dXBUaWNrZXRQZXJtaXNzaW9uOyB9XG4gICAgdGhyb3cgbmV3IFNvbGFuYUVycm9yKFNPTEFOQV9FUlJPUl9fUFJPR1JBTV9DTElFTlRTX19GQUlMRURfVE9fSURFTlRJRllfSU5TVFJVQ1RJT04sIHsgaW5zdHJ1Y3Rpb25EYXRhOiBkYXRhLCBwcm9ncmFtTmFtZTogXCJkdWVsXCIgfSk7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZER1ZWxJbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9ICdFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WCc+ID1cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5DYW5jZWxUaWNrZXQgfSAmIFBhcnNlZENhbmNlbFRpY2tldEluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkNsb3NlVGlja2V0IH0gJiBQYXJzZWRDbG9zZVRpY2tldEluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkNvbW1pdFRpY2tldHMgfSAmIFBhcnNlZENvbW1pdFRpY2tldHNJbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5DcmVhdGVUaWNrZXQgfSAmIFBhcnNlZENyZWF0ZVRpY2tldEluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkRlbGVnYXRlUXVldWUgfSAmIFBhcnNlZERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5EZWxlZ2F0ZVRpY2tldCB9ICYgUGFyc2VkRGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5GbHVzaE1hdGNoZXMgfSAmIFBhcnNlZEZsdXNoTWF0Y2hlc0luc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkluaXRpYWxpemVRdWV1ZSB9ICYgUGFyc2VkSW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW0+XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uSW5pdGlhbGl6ZVRlbmFudCB9ICYgUGFyc2VkSW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkpvaW5RdWV1ZSB9ICYgUGFyc2VkSm9pblF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW0+XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uUHJvY2Vzc1VuZGVsZWdhdGlvbiB9ICYgUGFyc2VkUHJvY2Vzc1VuZGVsZWdhdGlvbkluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLlNldHVwVGlja2V0UGVybWlzc2lvbiB9ICYgUGFyc2VkU2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb248VFByb2dyYW0+XG5cblxuICAgICAgICBleHBvcnQgZnVuY3Rpb24gcGFyc2VEdWVsSW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmc+KFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb246IEluc3RydWN0aW9uPFRQcm9ncmFtPiBcbiAgICAgICAgICAgICAgICAmIEluc3RydWN0aW9uV2l0aERhdGE8UmVhZG9ubHlVaW50OEFycmF5PlxuICAgICAgICApOiBQYXJzZWREdWVsSW5zdHJ1Y3Rpb248VFByb2dyYW0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RydWN0aW9uVHlwZSA9IGlkZW50aWZ5RHVlbEluc3RydWN0aW9uKGluc3RydWN0aW9uKTtcbiAgICAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb25UeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uQ2FuY2VsVGlja2V0OiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uQ2FuY2VsVGlja2V0LCAuLi5wYXJzZUNhbmNlbFRpY2tldEluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5DbG9zZVRpY2tldDogeyBhc3NlcnRJc0luc3RydWN0aW9uV2l0aEFjY291bnRzKGluc3RydWN0aW9uKTtcbnJldHVybiB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkNsb3NlVGlja2V0LCAuLi5wYXJzZUNsb3NlVGlja2V0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLkNvbW1pdFRpY2tldHM6IHsgYXNzZXJ0SXNJbnN0cnVjdGlvbldpdGhBY2NvdW50cyhpbnN0cnVjdGlvbik7XG5yZXR1cm4geyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5Db21taXRUaWNrZXRzLCAuLi5wYXJzZUNvbW1pdFRpY2tldHNJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uQ3JlYXRlVGlja2V0OiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uQ3JlYXRlVGlja2V0LCAuLi5wYXJzZUNyZWF0ZVRpY2tldEluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5EZWxlZ2F0ZVF1ZXVlOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uRGVsZWdhdGVRdWV1ZSwgLi4ucGFyc2VEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLkRlbGVnYXRlVGlja2V0OiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uRGVsZWdhdGVUaWNrZXQsIC4uLnBhcnNlRGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uRmx1c2hNYXRjaGVzOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uRmx1c2hNYXRjaGVzLCAuLi5wYXJzZUZsdXNoTWF0Y2hlc0luc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplUXVldWU6IHsgYXNzZXJ0SXNJbnN0cnVjdGlvbldpdGhBY2NvdW50cyhpbnN0cnVjdGlvbik7XG5yZXR1cm4geyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplUXVldWUsIC4uLnBhcnNlSW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLkluaXRpYWxpemVUZW5hbnQ6IHsgYXNzZXJ0SXNJbnN0cnVjdGlvbldpdGhBY2NvdW50cyhpbnN0cnVjdGlvbik7XG5yZXR1cm4geyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplVGVuYW50LCAuLi5wYXJzZUluaXRpYWxpemVUZW5hbnRJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uSm9pblF1ZXVlOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uSm9pblF1ZXVlLCAuLi5wYXJzZUpvaW5RdWV1ZUluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5Qcm9jZXNzVW5kZWxlZ2F0aW9uOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uUHJvY2Vzc1VuZGVsZWdhdGlvbiwgLi4ucGFyc2VQcm9jZXNzVW5kZWxlZ2F0aW9uSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLlNldHVwVGlja2V0UGVybWlzc2lvbjogeyBhc3NlcnRJc0luc3RydWN0aW9uV2l0aEFjY291bnRzKGluc3RydWN0aW9uKTtcbnJldHVybiB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLlNldHVwVGlja2V0UGVybWlzc2lvbiwgLi4ucGFyc2VTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBTb2xhbmFFcnJvcihTT0xBTkFfRVJST1JfX1BST0dSQU1fQ0xJRU5UU19fVU5SRUNPR05JWkVEX0lOU1RSVUNUSU9OX1RZUEUsIHsgaW5zdHJ1Y3Rpb25UeXBlOiBpbnN0cnVjdGlvblR5cGUgYXMgc3RyaW5nLCBwcm9ncmFtTmFtZTogXCJkdWVsXCIgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuZXhwb3J0IHR5cGUgRHVlbFBsdWdpbiA9IHsgYWNjb3VudHM6IER1ZWxQbHVnaW5BY2NvdW50czsgaW5zdHJ1Y3Rpb25zOiBEdWVsUGx1Z2luSW5zdHJ1Y3Rpb25zOyB9XG5cbmV4cG9ydCB0eXBlIER1ZWxQbHVnaW5BY2NvdW50cyA9IHsgbWF0Y2hUaWNrZXQ6IFJldHVyblR5cGU8dHlwZW9mIGdldE1hdGNoVGlja2V0Q29kZWM+ICYgU2VsZkZldGNoRnVuY3Rpb25zPE1hdGNoVGlja2V0QXJncywgTWF0Y2hUaWNrZXQ+OyBxdWV1ZTogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0UXVldWVDb2RlYz4gJiBTZWxmRmV0Y2hGdW5jdGlvbnM8UXVldWVBcmdzLCBRdWV1ZT47IHRlbmFudDogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0VGVuYW50Q29kZWM+ICYgU2VsZkZldGNoRnVuY3Rpb25zPFRlbmFudEFyZ3MsIFRlbmFudD47IH1cblxuZXhwb3J0IHR5cGUgRHVlbFBsdWdpbkluc3RydWN0aW9ucyA9IHsgY2FuY2VsVGlja2V0OiAoaW5wdXQ6IENhbmNlbFRpY2tldEFzeW5jSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldENhbmNlbFRpY2tldEluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBjbG9zZVRpY2tldDogKGlucHV0OiBDbG9zZVRpY2tldEFzeW5jSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldENsb3NlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYz4gJiBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnM7IGNvbW1pdFRpY2tldHM6IChpbnB1dDogTWFrZU9wdGlvbmFsPENvbW1pdFRpY2tldHNJbnB1dCwgXCJwYXllclwiPikgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgY3JlYXRlVGlja2V0OiAoaW5wdXQ6IENyZWF0ZVRpY2tldEFzeW5jSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldENyZWF0ZVRpY2tldEluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBkZWxlZ2F0ZVF1ZXVlOiAoaW5wdXQ6IE1ha2VPcHRpb25hbDxEZWxlZ2F0ZVF1ZXVlQXN5bmNJbnB1dCwgXCJwYXllclwiPikgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBkZWxlZ2F0ZVRpY2tldDogKGlucHV0OiBNYWtlT3B0aW9uYWw8RGVsZWdhdGVUaWNrZXRBc3luY0lucHV0LCBcInBheWVyXCI+KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXREZWxlZ2F0ZVRpY2tldEluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBmbHVzaE1hdGNoZXM6IChpbnB1dDogRmx1c2hNYXRjaGVzSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldEZsdXNoTWF0Y2hlc0luc3RydWN0aW9uPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgaW5pdGlhbGl6ZVF1ZXVlOiAoaW5wdXQ6IEluaXRpYWxpemVRdWV1ZUFzeW5jSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldEluaXRpYWxpemVRdWV1ZUluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBpbml0aWFsaXplVGVuYW50OiAoaW5wdXQ6IEluaXRpYWxpemVUZW5hbnRBc3luY0lucHV0KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRJbml0aWFsaXplVGVuYW50SW5zdHJ1Y3Rpb25Bc3luYz4gJiBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnM7IGpvaW5RdWV1ZTogKGlucHV0OiBKb2luUXVldWVBc3luY0lucHV0KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkFzeW5jPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgcHJvY2Vzc1VuZGVsZWdhdGlvbjogKGlucHV0OiBNYWtlT3B0aW9uYWw8UHJvY2Vzc1VuZGVsZWdhdGlvbklucHV0LCBcInBheWVyXCI+KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRQcm9jZXNzVW5kZWxlZ2F0aW9uSW5zdHJ1Y3Rpb24+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBzZXR1cFRpY2tldFBlcm1pc3Npb246IChpbnB1dDogU2V0dXBUaWNrZXRQZXJtaXNzaW9uQXN5bmNJbnB1dCkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0U2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25Bc3luYz4gJiBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnM7IH1cblxuZXhwb3J0IHR5cGUgRHVlbFBsdWdpblJlcXVpcmVtZW50cyA9IENsaWVudFdpdGhScGM8R2V0QWNjb3VudEluZm9BcGkgJiBHZXRNdWx0aXBsZUFjY291bnRzQXBpPiAmIENsaWVudFdpdGhQYXllciAmIENsaWVudFdpdGhUcmFuc2FjdGlvblBsYW5uaW5nICYgQ2xpZW50V2l0aFRyYW5zYWN0aW9uU2VuZGluZ1xuXG5leHBvcnQgZnVuY3Rpb24gZHVlbFByb2dyYW0oKSB7XG4gICAgcmV0dXJuIDxUIGV4dGVuZHMgRHVlbFBsdWdpblJlcXVpcmVtZW50cz4oY2xpZW50OiBUKSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLmNsaWVudCwgZHVlbDogPER1ZWxQbHVnaW4+eyBhY2NvdW50czogeyBtYXRjaFRpY2tldDogYWRkU2VsZkZldGNoRnVuY3Rpb25zKGNsaWVudCwgZ2V0TWF0Y2hUaWNrZXRDb2RlYygpKSwgcXVldWU6IGFkZFNlbGZGZXRjaEZ1bmN0aW9ucyhjbGllbnQsIGdldFF1ZXVlQ29kZWMoKSksIHRlbmFudDogYWRkU2VsZkZldGNoRnVuY3Rpb25zKGNsaWVudCwgZ2V0VGVuYW50Q29kZWMoKSkgfSwgaW5zdHJ1Y3Rpb25zOiB7IGNhbmNlbFRpY2tldDogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0Q2FuY2VsVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYyhpbnB1dCkpLCBjbG9zZVRpY2tldDogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0Q2xvc2VUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKGlucHV0KSksIGNvbW1pdFRpY2tldHM6IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldENvbW1pdFRpY2tldHNJbnN0cnVjdGlvbih7IC4uLmlucHV0LCBwYXllcjogaW5wdXQucGF5ZXIgPz8gY2xpZW50LnBheWVyIH0pKSwgY3JlYXRlVGlja2V0OiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXRDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKGlucHV0KSksIGRlbGVnYXRlUXVldWU6IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkFzeW5jKHsgLi4uaW5wdXQsIHBheWVyOiBpbnB1dC5wYXllciA/PyBjbGllbnQucGF5ZXIgfSkpLCBkZWxlZ2F0ZVRpY2tldDogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0RGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKHsgLi4uaW5wdXQsIHBheWVyOiBpbnB1dC5wYXllciA/PyBjbGllbnQucGF5ZXIgfSkpLCBmbHVzaE1hdGNoZXM6IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldEZsdXNoTWF0Y2hlc0luc3RydWN0aW9uKGlucHV0KSksIGluaXRpYWxpemVRdWV1ZTogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0SW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYyhpbnB1dCkpLCBpbml0aWFsaXplVGVuYW50OiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXRJbml0aWFsaXplVGVuYW50SW5zdHJ1Y3Rpb25Bc3luYyhpbnB1dCkpLCBqb2luUXVldWU6IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldEpvaW5RdWV1ZUluc3RydWN0aW9uQXN5bmMoaW5wdXQpKSwgcHJvY2Vzc1VuZGVsZWdhdGlvbjogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0UHJvY2Vzc1VuZGVsZWdhdGlvbkluc3RydWN0aW9uKHsgLi4uaW5wdXQsIHBheWVyOiBpbnB1dC5wYXllciA/PyBjbGllbnQucGF5ZXIuYWRkcmVzcyB9KSksIHNldHVwVGlja2V0UGVybWlzc2lvbjogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0U2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25Bc3luYyhpbnB1dCkpIH0gfSB9O1xuICAgIH07XG59XG5cbnR5cGUgTWFrZU9wdGlvbmFsPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IE9taXQ8VCwgSz4gJiBQYXJ0aWFsPFBpY2s8VCwgSz4+OyJdfQ==
@@ -0,0 +1,8 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ export * from './duel';
@@ -0,0 +1,9 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ export * from './duel';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2VuZXJhdGVkL2R1ZWwvcHJvZ3JhbXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsY0FBYyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgY29kZSB3YXMgQVVUT0dFTkVSQVRFRCB1c2luZyB0aGUgQ29kYW1hIGxpYnJhcnkuXG4gKiBQbGVhc2UgRE8gTk9UIEVESVQgVEhJUyBGSUxFLCBpbnN0ZWFkIHVzZSB2aXNpdG9yc1xuICogdG8gYWRkIGZlYXR1cmVzLCB0aGVuIHJlcnVuIENvZGFtYSB0byB1cGRhdGUgaXQuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY29kYW1hLWlkbC9jb2RhbWFcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2R1ZWwnOyJdfQ==
@@ -0,0 +1,25 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ import { type Address, type Codec, type Decoder, type Encoder, type GetDiscriminatedUnionVariant, type GetDiscriminatedUnionVariantContent } from '@solana/kit';
9
+ export type AccountType = {
10
+ __kind: "Queue";
11
+ authority: Address;
12
+ } | {
13
+ __kind: "Ticket";
14
+ player: Address;
15
+ tenant: Address;
16
+ };
17
+ export type AccountTypeArgs = AccountType;
18
+ export declare function getAccountTypeEncoder(): Encoder<AccountTypeArgs>;
19
+ export declare function getAccountTypeDecoder(): Decoder<AccountType>;
20
+ export declare function getAccountTypeCodec(): Codec<AccountTypeArgs, AccountType>;
21
+ export declare function accountType(kind: 'Queue', data: GetDiscriminatedUnionVariantContent<AccountTypeArgs, '__kind', 'Queue'>): GetDiscriminatedUnionVariant<AccountTypeArgs, '__kind', 'Queue'>;
22
+ export declare function accountType(kind: 'Ticket', data: GetDiscriminatedUnionVariantContent<AccountTypeArgs, '__kind', 'Ticket'>): GetDiscriminatedUnionVariant<AccountTypeArgs, '__kind', 'Ticket'>;
23
+ export declare function isAccountType<K extends AccountType['__kind']>(kind: K, value: AccountType): value is AccountType & {
24
+ __kind: K;
25
+ };
@@ -0,0 +1,25 @@
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, getAddressDecoder, getAddressEncoder, getDiscriminatedUnionDecoder, getDiscriminatedUnionEncoder, getStructDecoder, getStructEncoder } from '@solana/kit';
9
+ export function getAccountTypeEncoder() {
10
+ return getDiscriminatedUnionEncoder([['Queue', getStructEncoder([['authority', getAddressEncoder()]])], ['Ticket', getStructEncoder([['player', getAddressEncoder()], ['tenant', getAddressEncoder()]])]]);
11
+ }
12
+ export function getAccountTypeDecoder() {
13
+ return getDiscriminatedUnionDecoder([['Queue', getStructDecoder([['authority', getAddressDecoder()]])], ['Ticket', getStructDecoder([['player', getAddressDecoder()], ['tenant', getAddressDecoder()]])]]);
14
+ }
15
+ export function getAccountTypeCodec() {
16
+ return combineCodec(getAccountTypeEncoder(), getAccountTypeDecoder());
17
+ }
18
+ export function accountType(kind, data) {
19
+ return Array.isArray(data) ? { __kind: kind, fields: data } : { __kind: kind, ...(data ?? {}) };
20
+ }
21
+ export function isAccountType(kind, value) {
22
+ return value.__kind === kind;
23
+ }
24
+ ;
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudFR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2VuZXJhdGVkL2R1ZWwvdHlwZXMvYWNjb3VudFR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBcUksTUFBTSxhQUFhLENBQUM7QUFNcFQsTUFBTSxVQUFVLHFCQUFxQjtJQUNqQyxPQUFPLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvTSxDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQjtJQUNqQyxPQUFPLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvTSxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQjtJQUMvQixPQUFPLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBS0QsTUFBTSxVQUFVLFdBQVcsQ0FBNEMsSUFBTyxFQUFFLElBQVc7SUFDekYsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2xHLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFrQyxJQUFPLEVBQUUsS0FBa0I7SUFDeEYsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQztBQUMvQixDQUFDO0FBQUEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBjb2RlIHdhcyBBVVRPR0VORVJBVEVEIHVzaW5nIHRoZSBDb2RhbWEgbGlicmFyeS5cbiAqIFBsZWFzZSBETyBOT1QgRURJVCBUSElTIEZJTEUsIGluc3RlYWQgdXNlIHZpc2l0b3JzXG4gKiB0byBhZGQgZmVhdHVyZXMsIHRoZW4gcmVydW4gQ29kYW1hIHRvIHVwZGF0ZSBpdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RhbWEtaWRsL2NvZGFtYVxuICovXG5cbmltcG9ydCB7IGNvbWJpbmVDb2RlYywgZ2V0QWRkcmVzc0RlY29kZXIsIGdldEFkZHJlc3NFbmNvZGVyLCBnZXREaXNjcmltaW5hdGVkVW5pb25EZWNvZGVyLCBnZXREaXNjcmltaW5hdGVkVW5pb25FbmNvZGVyLCBnZXRTdHJ1Y3REZWNvZGVyLCBnZXRTdHJ1Y3RFbmNvZGVyLCB0eXBlIEFkZHJlc3MsIHR5cGUgQ29kZWMsIHR5cGUgRGVjb2RlciwgdHlwZSBFbmNvZGVyLCB0eXBlIEdldERpc2NyaW1pbmF0ZWRVbmlvblZhcmlhbnQsIHR5cGUgR2V0RGlzY3JpbWluYXRlZFVuaW9uVmFyaWFudENvbnRlbnQgfSBmcm9tICdAc29sYW5hL2tpdCc7XG5cbmV4cG9ydCB0eXBlIEFjY291bnRUeXBlID0geyBfX2tpbmQ6IFwiUXVldWVcIiwgYXV0aG9yaXR5OiBBZGRyZXNzOyAgfSB8IHsgX19raW5kOiBcIlRpY2tldFwiLCBwbGF5ZXI6IEFkZHJlc3M7IHRlbmFudDogQWRkcmVzczsgIH07XG5cbmV4cG9ydCB0eXBlIEFjY291bnRUeXBlQXJncyA9IEFjY291bnRUeXBlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWNjb3VudFR5cGVFbmNvZGVyKCk6IEVuY29kZXI8QWNjb3VudFR5cGVBcmdzPiB7XG4gICAgcmV0dXJuIGdldERpc2NyaW1pbmF0ZWRVbmlvbkVuY29kZXIoW1snUXVldWUnLCBnZXRTdHJ1Y3RFbmNvZGVyKFtbJ2F1dGhvcml0eScsIGdldEFkZHJlc3NFbmNvZGVyKCldXSldLCBbJ1RpY2tldCcsIGdldFN0cnVjdEVuY29kZXIoW1sncGxheWVyJywgZ2V0QWRkcmVzc0VuY29kZXIoKV0sIFsndGVuYW50JywgZ2V0QWRkcmVzc0VuY29kZXIoKV1dKV1dKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFjY291bnRUeXBlRGVjb2RlcigpOiBEZWNvZGVyPEFjY291bnRUeXBlPiB7XG4gICAgcmV0dXJuIGdldERpc2NyaW1pbmF0ZWRVbmlvbkRlY29kZXIoW1snUXVldWUnLCBnZXRTdHJ1Y3REZWNvZGVyKFtbJ2F1dGhvcml0eScsIGdldEFkZHJlc3NEZWNvZGVyKCldXSldLCBbJ1RpY2tldCcsIGdldFN0cnVjdERlY29kZXIoW1sncGxheWVyJywgZ2V0QWRkcmVzc0RlY29kZXIoKV0sIFsndGVuYW50JywgZ2V0QWRkcmVzc0RlY29kZXIoKV1dKV1dKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFjY291bnRUeXBlQ29kZWMoKTogQ29kZWM8QWNjb3VudFR5cGVBcmdzLCBBY2NvdW50VHlwZT4ge1xuICAgIHJldHVybiBjb21iaW5lQ29kZWMoZ2V0QWNjb3VudFR5cGVFbmNvZGVyKCksIGdldEFjY291bnRUeXBlRGVjb2RlcigpKTtcbn1cblxuLy8gRGF0YSBFbnVtIEhlbHBlcnMuXG5leHBvcnQgZnVuY3Rpb24gYWNjb3VudFR5cGUoa2luZDogJ1F1ZXVlJywgZGF0YTogR2V0RGlzY3JpbWluYXRlZFVuaW9uVmFyaWFudENvbnRlbnQ8QWNjb3VudFR5cGVBcmdzLCAnX19raW5kJywgJ1F1ZXVlJz4pOiBHZXREaXNjcmltaW5hdGVkVW5pb25WYXJpYW50PEFjY291bnRUeXBlQXJncywgJ19fa2luZCcsICdRdWV1ZSc+O1xuZXhwb3J0IGZ1bmN0aW9uIGFjY291bnRUeXBlKGtpbmQ6ICdUaWNrZXQnLCBkYXRhOiBHZXREaXNjcmltaW5hdGVkVW5pb25WYXJpYW50Q29udGVudDxBY2NvdW50VHlwZUFyZ3MsICdfX2tpbmQnLCAnVGlja2V0Jz4pOiBHZXREaXNjcmltaW5hdGVkVW5pb25WYXJpYW50PEFjY291bnRUeXBlQXJncywgJ19fa2luZCcsICdUaWNrZXQnPjtcbmV4cG9ydCBmdW5jdGlvbiBhY2NvdW50VHlwZTxLIGV4dGVuZHMgQWNjb3VudFR5cGVBcmdzWydfX2tpbmQnXSwgRGF0YT4oa2luZDogSywgZGF0YT86IERhdGEpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGF0YSkgPyB7IF9fa2luZDoga2luZCwgZmllbGRzOiBkYXRhIH0gOiB7IF9fa2luZDoga2luZCwgLi4uKGRhdGEgPz8ge30pIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FjY291bnRUeXBlPEsgZXh0ZW5kcyBBY2NvdW50VHlwZVsnX19raW5kJ10+KGtpbmQ6IEssIHZhbHVlOiBBY2NvdW50VHlwZSk6IHZhbHVlIGlzIEFjY291bnRUeXBlICYgeyBfX2tpbmQ6IEsgfSB7XG4gIHJldHVybiB2YWx1ZS5fX2tpbmQgPT09IGtpbmQ7XG59O1xuIl19
@@ -0,0 +1,13 @@
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 './accountType';
9
+ export * from './matchEntry';
10
+ export * from './matchFound';
11
+ export * from './pendingMatch';
12
+ export * from './queueEntry';
13
+ export * from './ticketStatus';
@@ -0,0 +1,14 @@
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 './accountType';
9
+ export * from './matchEntry';
10
+ export * from './matchFound';
11
+ export * from './pendingMatch';
12
+ export * from './queueEntry';
13
+ export * from './ticketStatus';
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2VuZXJhdGVkL2R1ZWwvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGNvZGUgd2FzIEFVVE9HRU5FUkFURUQgdXNpbmcgdGhlIENvZGFtYSBsaWJyYXJ5LlxuICogUGxlYXNlIERPIE5PVCBFRElUIFRISVMgRklMRSwgaW5zdGVhZCB1c2UgdmlzaXRvcnNcbiAqIHRvIGFkZCBmZWF0dXJlcywgdGhlbiByZXJ1biBDb2RhbWEgdG8gdXBkYXRlIGl0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NvZGFtYS1pZGwvY29kYW1hXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9hY2NvdW50VHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL21hdGNoRW50cnknO1xuZXhwb3J0ICogZnJvbSAnLi9tYXRjaEZvdW5kJztcbmV4cG9ydCAqIGZyb20gJy4vcGVuZGluZ01hdGNoJztcbmV4cG9ydCAqIGZyb20gJy4vcXVldWVFbnRyeSc7XG5leHBvcnQgKiBmcm9tICcuL3RpY2tldFN0YXR1cyc7Il19