@n1xyz/nord-ts 0.1.5 → 0.1.7

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 (47) hide show
  1. package/dist/actions.d.ts +57 -0
  2. package/dist/actions.js +229 -0
  3. package/dist/client/Nord.d.ts +379 -0
  4. package/dist/client/Nord.js +718 -0
  5. package/dist/client/NordAdmin.d.ts +225 -0
  6. package/dist/client/NordAdmin.js +394 -0
  7. package/dist/client/NordUser.d.ts +350 -0
  8. package/dist/client/NordUser.js +743 -0
  9. package/dist/error.d.ts +35 -0
  10. package/dist/error.js +49 -0
  11. package/dist/gen/nord_pb.d.ts +233 -7
  12. package/dist/gen/nord_pb.js +34 -8
  13. package/dist/gen/openapi.d.ts +40 -0
  14. package/dist/index.d.ts +6 -1
  15. package/dist/index.js +29 -1
  16. package/dist/nord/client/Nord.d.ts +1 -1
  17. package/dist/nord/client/Nord.js +2 -2
  18. package/dist/nord/client/NordAdmin.d.ts +24 -1
  19. package/dist/nord/client/NordAdmin.js +63 -5
  20. package/dist/nord/index.d.ts +1 -1
  21. package/dist/nord/index.js +2 -1
  22. package/dist/types.d.ts +6 -50
  23. package/dist/types.js +1 -24
  24. package/dist/utils.d.ts +8 -11
  25. package/dist/utils.js +54 -41
  26. package/dist/websocket/Subscriber.d.ts +37 -0
  27. package/dist/websocket/Subscriber.js +25 -0
  28. package/dist/websocket/index.d.ts +19 -2
  29. package/dist/websocket/index.js +82 -2
  30. package/package.json +1 -1
  31. package/src/actions.ts +333 -0
  32. package/src/{nord/client → client}/Nord.ts +209 -211
  33. package/src/{nord/client → client}/NordAdmin.ts +196 -153
  34. package/src/{nord/client → client}/NordUser.ts +216 -305
  35. package/src/gen/nord_pb.ts +271 -9
  36. package/src/gen/openapi.ts +40 -0
  37. package/src/index.ts +7 -1
  38. package/src/types.ts +7 -54
  39. package/src/utils.ts +44 -47
  40. package/src/{nord/models → websocket}/Subscriber.ts +2 -2
  41. package/src/websocket/index.ts +105 -2
  42. package/src/nord/api/actions.ts +0 -648
  43. package/src/nord/api/core.ts +0 -96
  44. package/src/nord/api/metrics.ts +0 -269
  45. package/src/nord/client/NordClient.ts +0 -79
  46. package/src/nord/index.ts +0 -25
  47. /package/src/{nord/utils/NordError.ts → error.ts} +0 -0
@@ -4,13 +4,13 @@
4
4
  // i.e. prefixed with a varint encoding the length of the protobuf message.
5
5
  // All other message types are encoded normally, i.e. with no prefix.
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.Receipt_WithdrawResultSchema = exports.Receipt_InsertMarketResultSchema = exports.Receipt_InsertTokenResultSchema = exports.Receipt_DepositResultSchema = exports.Receipt_CancelOrderResultSchema = exports.Receipt_PositionTakenOrTradedResultSchema = exports.Receipt_TakenResultSchema = exports.Receipt_PlaceOrderResultSchema = exports.Receipt_TriggeredSchema = exports.Receipt_CreateSessionResultSchema = exports.Receipt_TradeSchema = exports.Receipt_PostedSchema = exports.ReceiptSchema = exports.AtomicSchema = exports.AtomicSubactionKindSchema = exports.Action_TakePositionSchema = exports.Action_UnfreezeMarketSchema = exports.Action_FreezeMarketSchema = exports.Action_UpdateAccountsTierSchema = exports.Action_UpdateFeeTierSchema = exports.Action_AddFeeTierSchema = exports.Action_RemoveTriggerSchema = exports.Action_AddTriggerSchema = exports.Action_TriggerPricesSchema = exports.Action_TransferSchema = exports.Action_UnpauseSchema = exports.Action_PauseSchema = exports.Action_RevokeSessionSchema = exports.Action_LiquidateSchema = exports.Action_PythPriceFeedUpdateSchema = exports.Action_PythSetSymbolFeedSchema = exports.Action_PythSetWormholeGuardiansSchema = exports.Action_WithdrawSchema = exports.Action_DepositSchema = exports.Action_CancelOrderByIdSchema = exports.Action_PlaceOrderSchema = exports.Action_CreateMarketSchema = exports.Action_CreateTokenSchema = exports.Action_CreateSessionSchema = exports.ActionSchema = exports.TriggerKeySchema = exports.CancelOrderSchema = exports.TradeOrPlaceSchema = exports.OrderTypeSchema = exports.OrderLimitSchema = exports.QuoteSizeSchema = exports.TokenSchema = exports.MarketSchema = exports.FeeTierConfigSchema = exports.file_nord = void 0;
8
- exports.SpecialAccountSchema = exports.SpecialAccount = exports.ErrorSchema = exports.Error = exports.MarketTypeSchema = exports.MarketType = exports.FillModeSchema = exports.FillMode = exports.TriggerKindSchema = exports.TriggerKind = exports.SideSchema = exports.Side = exports.Receipt_AtomicResultSchema = exports.Receipt_AtomicSubactionResultKindSchema = exports.Receipt_AccountsTierUpdatedSchema = exports.Receipt_FeeTierUpdatedSchema = exports.Receipt_FeeTierAddedSchema = exports.Receipt_MarketFreezeUpdatedSchema = exports.Receipt_TriggerRemovedSchema = exports.Receipt_TriggerAddedSchema = exports.Receipt_TransferredSchema = exports.Receipt_UnpausedSchema = exports.Receipt_PausedSchema = exports.Receipt_SessionRevokedSchema = exports.Receipt_AccountLiquidatedSchema = exports.Receipt_PerpPositionSchema = exports.Receipt_UpdateGuardianSetResultSchema = exports.Receipt_OracleUpdateResultSchema = exports.Receipt_OracleSymbolFeedResultSchema = void 0;
7
+ exports.Receipt_InsertMarketResultSchema = exports.Receipt_InsertTokenResultSchema = exports.Receipt_DepositResultSchema = exports.Receipt_CancelOrderResultSchema = exports.Receipt_PositionTakenOrTradedResultSchema = exports.Receipt_TakenResultSchema = exports.Receipt_PlaceOrderResultSchema = exports.Receipt_TriggeredSchema = exports.Receipt_CreateSessionResultSchema = exports.Receipt_TradeSchema = exports.Receipt_PostedSchema = exports.ReceiptSchema = exports.AtomicSchema = exports.AtomicSubactionKindSchema = exports.Action_TakePositionSchema = exports.Action_UnfreezeMarketSchema = exports.Action_FreezeMarketSchema = exports.Action_UpdateAclSchema = exports.Action_UpdateAccountsTierSchema = exports.Action_UpdateFeeTierSchema = exports.Action_AddFeeTierSchema = exports.Action_RemoveTriggerSchema = exports.Action_AddTriggerSchema = exports.Action_TriggerPricesSchema = exports.Action_TransferSchema = exports.Action_UnpauseSchema = exports.Action_PauseSchema = exports.Action_RevokeSessionSchema = exports.Action_LiquidateSchema = exports.Action_PythPriceFeedUpdateSchema = exports.Action_PythSetSymbolFeedSchema = exports.Action_PythSetWormholeGuardiansSchema = exports.Action_WithdrawSchema = exports.Action_DepositSchema = exports.Action_CancelOrderByIdSchema = exports.Action_PlaceOrderSchema = exports.Action_CreateMarketSchema = exports.Action_CreateTokenSchema = exports.Action_CreateSessionSchema = exports.ActionSchema = exports.TriggerKeySchema = exports.CancelOrderSchema = exports.TradeOrPlaceSchema = exports.OrderTypeSchema = exports.OrderLimitSchema = exports.QuoteSizeSchema = exports.TokenSchema = exports.MarketSchema = exports.FeeTierConfigSchema = exports.file_nord = void 0;
8
+ exports.SpecialAccountSchema = exports.SpecialAccount = exports.ErrorSchema = exports.Error = exports.MarketTypeSchema = exports.MarketType = exports.FillModeSchema = exports.FillMode = exports.TriggerKindSchema = exports.TriggerKind = exports.SideSchema = exports.Side = exports.Receipt_AtomicResultSchema = exports.Receipt_AtomicSubactionResultKindSchema = exports.Receipt_AclUpdatedSchema = exports.Receipt_AccountsTierUpdatedSchema = exports.Receipt_FeeTierUpdatedSchema = exports.Receipt_FeeTierAddedSchema = exports.Receipt_MarketFreezeUpdatedSchema = exports.Receipt_TriggerRemovedSchema = exports.Receipt_TriggerAddedSchema = exports.Receipt_TransferredSchema = exports.Receipt_UnpausedSchema = exports.Receipt_PausedSchema = exports.Receipt_SessionRevokedSchema = exports.Receipt_AccountLiquidatedSchema = exports.Receipt_PerpPositionSchema = exports.Receipt_UpdateGuardianSetResultSchema = exports.Receipt_OracleUpdateResultSchema = exports.Receipt_OracleSymbolFeedResultSchema = exports.Receipt_WithdrawResultSchema = void 0;
9
9
  const codegenv2_1 = require("@bufbuild/protobuf/codegenv2");
10
10
  /**
11
11
  * Describes the file nord.proto.
12
12
  */
13
- exports.file_nord = (0, codegenv2_1.fileDesc)("Cgpub3JkLnByb3RvEgRub3JkIj0KDUZlZVRpZXJDb25maWcSFQoNbWFrZXJfZmVlX2JwcxgBIAEoDRIVCg10YWtlcl9mZWVfYnBzGAIgASgNItABCgZNYXJrZXQSEQoJbWFya2V0X2lkGAEgASgNEhYKDnByaWNlX2RlY2ltYWxzGAIgASgNEhUKDXNpemVfZGVjaW1hbHMYAyABKA0SFQoNYmFzZV90b2tlbl9pZBgEIAEoDRIlCgttYXJrZXRfdHlwZRgFIAEoDjIQLm5vcmQuTWFya2V0VHlwZRIPCgdpbWZfYnBzGAYgASgNEg8KB2NtZl9icHMYByABKA0SDwoHbW1mX2JwcxgIIAEoDRITCgt2aWV3X3N5bWJvbBgKIAEoCSJaCgVUb2tlbhIQCgh0b2tlbl9pZBgBIAEoDRIWCg50b2tlbl9kZWNpbWFscxgCIAEoDRISCgp3ZWlnaHRfYnBzGAQgASgNEhMKC3ZpZXdfc3ltYm9sGAUgASgJIigKCVF1b3RlU2l6ZRIMCgRzaXplGAEgASgEEg0KBXByaWNlGAIgASgEIk4KCk9yZGVyTGltaXQSDQoFcHJpY2UYBiABKAQSDAoEc2l6ZRgHIAEoBBIjCgpxdW90ZV9zaXplGAggASgLMg8ubm9yZC5RdW90ZVNpemUiYAoJT3JkZXJUeXBlEhgKBHNpZGUYAyABKA4yCi5ub3JkLlNpZGUSIQoJZmlsbF9tb2RlGAQgASgOMg4ubm9yZC5GaWxsTW9kZRIWCg5pc19yZWR1Y2Vfb25seRgFIAEoCCKZAQoMVHJhZGVPclBsYWNlEhEKCW1hcmtldF9pZBgCIAEoDRIjCgpvcmRlcl90eXBlGAMgASgLMg8ubm9yZC5PcmRlclR5cGUSHwoFbGltaXQYBiABKAsyEC5ub3JkLk9yZGVyTGltaXQSHAoPY2xpZW50X29yZGVyX2lkGCEgASgESACIAQFCEgoQX2NsaWVudF9vcmRlcl9pZCIfCgtDYW5jZWxPcmRlchIQCghvcmRlcl9pZBgCIAEoBCJHCgpUcmlnZ2VyS2V5Eh8KBGtpbmQYAyABKA4yES5ub3JkLlRyaWdnZXJLaW5kEhgKBHNpZGUYBCABKA4yCi5ub3JkLlNpZGUipB4KBkFjdGlvbhIZChFjdXJyZW50X3RpbWVzdGFtcBgBIAEoAxINCgVub25jZRgCIAEoDRI0Cg5jcmVhdGVfc2Vzc2lvbhgEIAEoCzIaLm5vcmQuQWN0aW9uLkNyZWF0ZVNlc3Npb25IABIwCgxjcmVhdGVfdG9rZW4YBSABKAsyGC5ub3JkLkFjdGlvbi5DcmVhdGVUb2tlbkgAEjIKDWNyZWF0ZV9tYXJrZXQYBiABKAsyGS5ub3JkLkFjdGlvbi5DcmVhdGVNYXJrZXRIABIuCgtwbGFjZV9vcmRlchgHIAEoCzIXLm5vcmQuQWN0aW9uLlBsYWNlT3JkZXJIABI6ChJjYW5jZWxfb3JkZXJfYnlfaWQYCCABKAsyHC5ub3JkLkFjdGlvbi5DYW5jZWxPcmRlckJ5SWRIABInCgdkZXBvc2l0GAkgASgLMhQubm9yZC5BY3Rpb24uRGVwb3NpdEgAEikKCHdpdGhkcmF3GAogASgLMhUubm9yZC5BY3Rpb24uV2l0aGRyYXdIABJMChtweXRoX3NldF93b3JtaG9sZV9ndWFyZGlhbnMYCyABKAsyJS5ub3JkLkFjdGlvbi5QeXRoU2V0V29ybWhvbGVHdWFyZGlhbnNIABI+ChRweXRoX3NldF9zeW1ib2xfZmVlZBgMIAEoCzIeLm5vcmQuQWN0aW9uLlB5dGhTZXRTeW1ib2xGZWVkSAASQgoWcHl0aF9wcmljZV9mZWVkX3VwZGF0ZRgNIAEoCzIgLm5vcmQuQWN0aW9uLlB5dGhQcmljZUZlZWRVcGRhdGVIABIrCglsaXF1aWRhdGUYDiABKAsyFi5ub3JkLkFjdGlvbi5MaXF1aWRhdGVIABI0Cg5yZXZva2Vfc2Vzc2lvbhgPIAEoCzIaLm5vcmQuQWN0aW9uLlJldm9rZVNlc3Npb25IABIjCgVwYXVzZRgQIAEoCzISLm5vcmQuQWN0aW9uLlBhdXNlSAASJwoHdW5wYXVzZRgRIAEoCzIULm5vcmQuQWN0aW9uLlVucGF1c2VIABIpCgh0cmFuc2ZlchgSIAEoCzIVLm5vcmQuQWN0aW9uLlRyYW5zZmVySAASLgoLYWRkX3RyaWdnZXIYICABKAsyFy5ub3JkLkFjdGlvbi5BZGRUcmlnZ2VySAASNAoOcmVtb3ZlX3RyaWdnZXIYISABKAsyGi5ub3JkLkFjdGlvbi5SZW1vdmVUcmlnZ2VySAASMgoNdGFrZV9wb3NpdGlvbhgiIAEoCzIZLm5vcmQuQWN0aW9uLlRha2VQb3NpdGlvbkgAEh4KBmF0b21pYxgjIAEoCzIMLm5vcmQuQXRvbWljSAASMgoNZnJlZXplX21hcmtldBgkIAEoCzIZLm5vcmQuQWN0aW9uLkZyZWV6ZU1hcmtldEgAEjYKD3VuZnJlZXplX21hcmtldBglIAEoCzIbLm5vcmQuQWN0aW9uLlVuZnJlZXplTWFya2V0SAASLwoMYWRkX2ZlZV90aWVyGCYgASgLMhcubm9yZC5BY3Rpb24uQWRkRmVlVGllckgAEjUKD3VwZGF0ZV9mZWVfdGllchgnIAEoCzIaLm5vcmQuQWN0aW9uLlVwZGF0ZUZlZVRpZXJIABI/ChR1cGRhdGVfYWNjb3VudHNfdGllchgoIAEoCzIfLm5vcmQuQWN0aW9uLlVwZGF0ZUFjY291bnRzVGllckgAGlMKDUNyZWF0ZVNlc3Npb24SEwoLdXNlcl9wdWJrZXkYASABKAwSEwoLYmxzdF9wdWJrZXkYAiABKAwSGAoQZXhwaXJ5X3RpbWVzdGFtcBgDIAEoAxp3CgtDcmVhdGVUb2tlbhIWCg50b2tlbl9kZWNpbWFscxgBIAEoDRISCgp3ZWlnaHRfYnBzGAMgASgNEhMKC3ZpZXdfc3ltYm9sGAQgASgJEhUKDW9yYWNsZV9zeW1ib2wYBSABKAkSEAoIc29sX2FkZHIYBiABKAwa2gEKDENyZWF0ZU1hcmtldBIVCg1zaXplX2RlY2ltYWxzGAEgASgNEhYKDnByaWNlX2RlY2ltYWxzGAIgASgNEg8KB2ltZl9icHMYAyABKA0SDwoHY21mX2JwcxgEIAEoDRIPCgdtbWZfYnBzGAUgASgNEiUKC21hcmtldF90eXBlGAYgASgOMhAubm9yZC5NYXJrZXRUeXBlEhMKC3ZpZXdfc3ltYm9sGAcgASgJEhUKDW9yYWNsZV9zeW1ib2wYCCABKAkSFQoNYmFzZV90b2tlbl9pZBgJIAEoDRqmAwoKUGxhY2VPcmRlchISCgpzZXNzaW9uX2lkGAEgASgEEhEKCW1hcmtldF9pZBgCIAEoDRIYCgRzaWRlGAMgASgOMgoubm9yZC5TaWRlEiEKCWZpbGxfbW9kZRgEIAEoDjIOLm5vcmQuRmlsbE1vZGUSFgoOaXNfcmVkdWNlX29ubHkYBSABKAgSDQoFcHJpY2UYBiABKAQSDAoEc2l6ZRgHIAEoBBIjCgpxdW90ZV9zaXplGAggASgLMg8ubm9yZC5RdW90ZVNpemUSIQoUZGVsZWdhdG9yX2FjY291bnRfaWQYICABKA1IAIgBARIcCg9jbGllbnRfb3JkZXJfaWQYISABKARIAYgBARIeChFzZW5kZXJfYWNjb3VudF9pZBgiIAEoDUgCiAEBEh8KEnNlbmRlcl90cmFja2luZ19pZBgjIAEoBEgDiAEBQhcKFV9kZWxlZ2F0b3JfYWNjb3VudF9pZEISChBfY2xpZW50X29yZGVyX2lkQhQKEl9zZW5kZXJfYWNjb3VudF9pZEIVChNfc2VuZGVyX3RyYWNraW5nX2lkGqkBCg9DYW5jZWxPcmRlckJ5SWQSEgoKc2Vzc2lvbl9pZBgBIAEoBBIQCghvcmRlcl9pZBgCIAEoBBIhChRkZWxlZ2F0b3JfYWNjb3VudF9pZBggIAEoDUgAiAEBEh4KEXNlbmRlcl9hY2NvdW50X2lkGCEgASgNSAGIAQFCFwoVX2RlbGVnYXRvcl9hY2NvdW50X2lkQhQKEl9zZW5kZXJfYWNjb3VudF9pZBpvCgdEZXBvc2l0EhQKDGFjdGlvbl9ub25jZRgBIAEoBBISCgp0b2tlbl9hZGRyGAIgASgMEg4KBmFtb3VudBgDIAEoBBITCgt1c2VyX3B1YmtleRgEIAEoDBIVCg1zZW5kZXJfcHVia2V5GAUgASgMGkAKCFdpdGhkcmF3EhAKCHRva2VuX2lkGAEgASgNEhIKCnNlc3Npb25faWQYAiABKAQSDgoGYW1vdW50GAMgASgEGkkKGFB5dGhTZXRXb3JtaG9sZUd1YXJkaWFucxIaChJndWFyZGlhbl9zZXRfaW5kZXgYASABKA0SEQoJYWRkcmVzc2VzGAIgAygMGkEKEVB5dGhTZXRTeW1ib2xGZWVkEhUKDW9yYWNsZV9zeW1ib2wYASABKAkSFQoNcHJpY2VfZmVlZF9pZBgCIAEoDBovChNQeXRoUHJpY2VGZWVkVXBkYXRlEhgKEHJhd19weXRobmV0X2RhdGEYASABKAwahwEKCUxpcXVpZGF0ZRIdChVsaXF1aWRhdG9yX3Nlc3Npb25faWQYASABKAQSHQoVbGlxdWlkYXRlZV9hY2NvdW50X2lkGAIgASgNEiIKFWxpcXVpZGF0b3JfYWNjb3VudF9pZBgDIAEoDUgAiAEBQhgKFl9saXF1aWRhdG9yX2FjY291bnRfaWQaIwoNUmV2b2tlU2Vzc2lvbhISCgpzZXNzaW9uX2lkGAEgASgEGgcKBVBhdXNlGgkKB1VucGF1c2UazwEKCFRyYW5zZmVyEhIKCnNlc3Npb25faWQYASABKAQSFwoPZnJvbV9hY2NvdW50X2lkGAIgASgNEhAKCHRva2VuX2lkGAMgASgNEg4KBmFtb3VudBgEIAEoBBIaCg10b19hY2NvdW50X2lkGAggASgNSACIAQESMgoPc3BlY2lhbF9hY2NvdW50GAkgASgOMhQubm9yZC5TcGVjaWFsQWNjb3VudEgBiAEBQhAKDl90b19hY2NvdW50X2lkQhIKEF9zcGVjaWFsX2FjY291bnQaUAoNVHJpZ2dlclByaWNlcxIVCg10cmlnZ2VyX3ByaWNlGAUgASgEEhgKC2xpbWl0X3ByaWNlGAYgASgESACIAQFCDgoMX2xpbWl0X3ByaWNlGqYBCgpBZGRUcmlnZ2VyEhIKCnNlc3Npb25faWQYASABKAQSEQoJbWFya2V0X2lkGAIgASgNEh0KA2tleRgDIAEoCzIQLm5vcmQuVHJpZ2dlcktleRIqCgZwcmljZXMYBCABKAsyGi5ub3JkLkFjdGlvbi5UcmlnZ2VyUHJpY2VzEhcKCmFjY291bnRfaWQYCiABKA1IAIgBAUINCgtfYWNjb3VudF9pZBp9Cg1SZW1vdmVUcmlnZ2VyEhIKCnNlc3Npb25faWQYASABKAQSEQoJbWFya2V0X2lkGAIgASgNEh0KA2tleRgDIAEoCzIQLm5vcmQuVHJpZ2dlcktleRIXCgphY2NvdW50X2lkGAogASgNSACIAQFCDQoLX2FjY291bnRfaWQaMQoKQWRkRmVlVGllchIjCgZjb25maWcYASABKAsyEy5ub3JkLkZlZVRpZXJDb25maWcaQAoNVXBkYXRlRmVlVGllchIKCgJpZBgBIAEoDRIjCgZjb25maWcYAiABKAsyEy5ub3JkLkZlZVRpZXJDb25maWcaNwoSVXBkYXRlQWNjb3VudHNUaWVyEg8KB3RpZXJfaWQYASABKA0SEAoIYWNjb3VudHMYAiADKA0aIQoMRnJlZXplTWFya2V0EhEKCW1hcmtldF9pZBgCIAEoDRojCg5VbmZyZWV6ZU1hcmtldBIRCgltYXJrZXRfaWQYAiABKA0alwEKDFRha2VQb3NpdGlvbhISCgpzZXNzaW9uX2lkGAEgASgEEhEKCW1hcmtldF9pZBgCIAEoDRIMCgRzaXplGAMgASgDEh4KEXNlbmRlcl9hY2NvdW50X2lkGAQgASgNSACIAQESEgoFcHJpY2UYBSABKARIAYgBAUIUChJfc2VuZGVyX2FjY291bnRfaWRCCAoGX3ByaWNlQgYKBGtpbmQidwoTQXRvbWljU3ViYWN0aW9uS2luZBIsCg50cmFkZV9vcl9wbGFjZRgGIAEoCzISLm5vcmQuVHJhZGVPclBsYWNlSAASKQoMY2FuY2VsX29yZGVyGAcgASgLMhEubm9yZC5DYW5jZWxPcmRlckgAQgcKBWlubmVyInAKBkF0b21pYxISCgpzZXNzaW9uX2lkGAEgASgEEhcKCmFjY291bnRfaWQYAiABKA1IAIgBARIqCgdhY3Rpb25zGAYgAygLMhkubm9yZC5BdG9taWNTdWJhY3Rpb25LaW5kQg0KC19hY2NvdW50X2lkIqUeCgdSZWNlaXB0EhEKCWFjdGlvbl9pZBgBIAEoBBIaCgNlcnIYICABKA4yCy5ub3JkLkVycm9ySAASQgoVY3JlYXRlX3Nlc3Npb25fcmVzdWx0GCEgASgLMiEubm9yZC5SZWNlaXB0LkNyZWF0ZVNlc3Npb25SZXN1bHRIABI8ChJwbGFjZV9vcmRlcl9yZXN1bHQYIiABKAsyHi5ub3JkLlJlY2VpcHQuUGxhY2VPcmRlclJlc3VsdEgAEj4KE2NhbmNlbF9vcmRlcl9yZXN1bHQYIyABKAsyHy5ub3JkLlJlY2VpcHQuQ2FuY2VsT3JkZXJSZXN1bHRIABI1Cg5kZXBvc2l0X3Jlc3VsdBgkIAEoCzIbLm5vcmQuUmVjZWlwdC5EZXBvc2l0UmVzdWx0SAASPgoTaW5zZXJ0X3Rva2VuX3Jlc3VsdBglIAEoCzIfLm5vcmQuUmVjZWlwdC5JbnNlcnRUb2tlblJlc3VsdEgAEkAKFGluc2VydF9tYXJrZXRfcmVzdWx0GCYgASgLMiAubm9yZC5SZWNlaXB0Lkluc2VydE1hcmtldFJlc3VsdEgAEjcKD3dpdGhkcmF3X3Jlc3VsdBgnIAEoCzIcLm5vcmQuUmVjZWlwdC5XaXRoZHJhd1Jlc3VsdEgAEkkKGW9yYWNsZV9zeW1ib2xfZmVlZF9yZXN1bHQYKCABKAsyJC5ub3JkLlJlY2VpcHQuT3JhY2xlU3ltYm9sRmVlZFJlc3VsdEgAEkAKFG9yYWNsZV91cGRhdGVfcmVzdWx0GCkgASgLMiAubm9yZC5SZWNlaXB0Lk9yYWNsZVVwZGF0ZVJlc3VsdEgAEksKGnVwZGF0ZV9ndWFyZGlhbl9zZXRfcmVzdWx0GCogASgLMiUubm9yZC5SZWNlaXB0LlVwZGF0ZUd1YXJkaWFuU2V0UmVzdWx0SAASNQoKbGlxdWlkYXRlZBgrIAEoCzIfLm5vcmQuUmVjZWlwdC5BY2NvdW50TGlxdWlkYXRlZEgAEjcKD3Nlc3Npb25fcmV2b2tlZBgsIAEoCzIcLm5vcmQuUmVjZWlwdC5TZXNzaW9uUmV2b2tlZEgAEiYKBnBhdXNlZBgtIAEoCzIULm5vcmQuUmVjZWlwdC5QYXVzZWRIABIqCgh1bnBhdXNlZBguIAEoCzIWLm5vcmQuUmVjZWlwdC5VbnBhdXNlZEgAEjAKC3RyYW5zZmVycmVkGC8gASgLMhkubm9yZC5SZWNlaXB0LlRyYW5zZmVycmVkSAASMwoNdHJpZ2dlcl9hZGRlZBhAIAEoCzIaLm5vcmQuUmVjZWlwdC5UcmlnZ2VyQWRkZWRIABI3Cg90cmlnZ2VyX3JlbW92ZWQYQSABKAsyHC5ub3JkLlJlY2VpcHQuVHJpZ2dlclJlbW92ZWRIABJNChhwb3NpdGlvbl90YWtlbl9vcl90cmFkZWQYQiABKAsyKS5ub3JkLlJlY2VpcHQuUG9zaXRpb25UYWtlbk9yVHJhZGVkUmVzdWx0SAASLAoGYXRvbWljGEMgASgLMhoubm9yZC5SZWNlaXB0LkF0b21pY1Jlc3VsdEgAEkIKFW1hcmtldF9mcmVlemVfdXBkYXRlZBhEIAEoCzIhLm5vcmQuUmVjZWlwdC5NYXJrZXRGcmVlemVVcGRhdGVkSAASNAoOZmVlX3RpZXJfYWRkZWQYRSABKAsyGi5ub3JkLlJlY2VpcHQuRmVlVGllckFkZGVkSAASOAoQZmVlX3RpZXJfdXBkYXRlZBhGIAEoCzIcLm5vcmQuUmVjZWlwdC5GZWVUaWVyVXBkYXRlZEgAEkIKFWFjY291bnRzX3RpZXJfdXBkYXRlZBhHIAEoCzIhLm5vcmQuUmVjZWlwdC5BY2NvdW50c1RpZXJVcGRhdGVkSAAaeAoGUG9zdGVkEhgKBHNpZGUYASABKA4yCi5ub3JkLlNpZGUSEQoJbWFya2V0X2lkGAIgASgNEg0KBXByaWNlGAMgASgEEgwKBHNpemUYBCABKAQSEAoIb3JkZXJfaWQYBSABKAQSEgoKYWNjb3VudF9pZBgGIAEoDRpKCgVUcmFkZRIQCghvcmRlcl9pZBgCIAEoBBINCgVwcmljZRgEIAEoBBIMCgRzaXplGAUgASgEEhIKCmFjY291bnRfaWQYBiABKA0aKQoTQ3JlYXRlU2Vzc2lvblJlc3VsdBISCgpzZXNzaW9uX2lkGAEgASgEGkMKCVRyaWdnZXJlZBIfCgRraW5kGAMgASgOMhEubm9yZC5UcmlnZ2VyS2luZBIVCg10cmlnZ2VyX3ByaWNlGAQgASgEGpUCChBQbGFjZU9yZGVyUmVzdWx0EikKBnBvc3RlZBgBIAEoCzIULm5vcmQuUmVjZWlwdC5Qb3N0ZWRIAIgBARIiCgVmaWxscxgCIAMoCzITLm5vcmQuUmVjZWlwdC5UcmFkZRIcCg9jbGllbnRfb3JkZXJfaWQYAyABKARIAYgBARIfChJzZW5kZXJfdHJhY2tpbmdfaWQYBCABKARIAogBARIvCgl0cmlnZ2VyZWQYBSABKAsyFy5ub3JkLlJlY2VpcHQuVHJpZ2dlcmVkSAOIAQFCCQoHX3Bvc3RlZEISChBfY2xpZW50X29yZGVyX2lkQhUKE19zZW5kZXJfdHJhY2tpbmdfaWRCDAoKX3RyaWdnZXJlZBpCCgtUYWtlblJlc3VsdBILCgNwbmwYASABKAMSDAoEc2l6ZRgCIAEoAxIYChB0YWtlcl9hY2NvdW50X2lkGAMgASgNGqsBChtQb3NpdGlvblRha2VuT3JUcmFkZWRSZXN1bHQSEQoJbWFya2V0X2lkGAEgASgNEioKBXRha2VuGAIgASgLMhkubm9yZC5SZWNlaXB0LlRha2VuUmVzdWx0SAASMAoGdHJhZGVkGAMgASgLMh4ubm9yZC5SZWNlaXB0LlBsYWNlT3JkZXJSZXN1bHRIAEIbChlQb3NpdGlvblRha2VuT3JUcmFkZWRLaW5kGjkKEUNhbmNlbE9yZGVyUmVzdWx0EhAKCG9yZGVyX2lkGAEgASgEEhIKCmFjY291bnRfaWQYAiABKA0acAoNRGVwb3NpdFJlc3VsdBIQCgh0b2tlbl9pZBgBIAEoDRIOCgZhbW91bnQYAiABKAQSEgoKYWNjb3VudF9pZBgDIAEoDRIUCgx1c2VyX2NyZWF0ZWQYBCABKAgSEwoLdXNlcl9wdWJrZXkYBSABKAwaQwoRSW5zZXJ0VG9rZW5SZXN1bHQSEgoKY2hhaW5fYWRkchgBIAEoDBIaCgV0b2tlbhgCIAEoCzILLm5vcmQuVG9rZW4aMgoSSW5zZXJ0TWFya2V0UmVzdWx0EhwKBm1hcmtldBgBIAEoCzIMLm5vcmQuTWFya2V0GnkKDldpdGhkcmF3UmVzdWx0EhAKCHRva2VuX2lkGAEgASgNEg4KBmFtb3VudBgCIAEoBBIPCgdiYWxhbmNlGAMgASgEEhIKCmFjY291bnRfaWQYBCABKA0SCwoDZmVlGAUgASgEEhMKC3VzZXJfcHVia2V5GAYgASgMGkAKFk9yYWNsZVN5bWJvbEZlZWRSZXN1bHQSFQoNb3JhY2xlX3N5bWJvbBgBIAEoCRIPCgdmZWVkX2lkGAIgASgMGicKEk9yYWNsZVVwZGF0ZVJlc3VsdBIRCgl0aW1lc3RhbXAYASABKAMaSAoXVXBkYXRlR3VhcmRpYW5TZXRSZXN1bHQSGgoSZ3VhcmRpYW5fc2V0X2luZGV4GAEgASgNEhEKCWFkZHJlc3NlcxgCIAMoDBpDCgxQZXJwUG9zaXRpb24SEQoJbWFya2V0X2lkGAEgASgNEhEKCWJhc2Vfc2l6ZRgCIAEoAxINCgVwcmljZRgDIAEoBBqeAQoRQWNjb3VudExpcXVpZGF0ZWQSHQoVbGlxdWlkYXRvcl9hY2NvdW50X2lkGAEgASgNEh0KFWxpcXVpZGF0ZWVfYWNjb3VudF9pZBgCIAEoDRIYChBjYW5jZWxsZWRfb3JkZXJzGAMgAygEEjEKDXJlbW92ZWRfcGVycHMYBCADKAsyGi5ub3JkLlJlY2VpcHQuUGVycFBvc2l0aW9uGhAKDlNlc3Npb25SZXZva2VkGggKBlBhdXNlZBoKCghVbnBhdXNlZBrhAQoLVHJhbnNmZXJyZWQSFwoPZnJvbV9hY2NvdW50X2lkGAEgASgNEhwKD3RvX3VzZXJfYWNjb3VudBgCIAEoDUgAiAEBEhAKCHRva2VuX2lkGAMgASgNEg4KBmFtb3VudBgEIAEoBBIXCg9hY2NvdW50X2NyZWF0ZWQYBSABKAgSNQoSdG9fc3BlY2lhbF9hY2NvdW50GAYgASgOMhQubm9yZC5TcGVjaWFsQWNjb3VudEgBiAEBQhIKEF90b191c2VyX2FjY291bnRCFQoTX3RvX3NwZWNpYWxfYWNjb3VudBoOCgxUcmlnZ2VyQWRkZWQaEAoOVHJpZ2dlclJlbW92ZWQaOAoTTWFya2V0RnJlZXplVXBkYXRlZBIRCgltYXJrZXRfaWQYASABKA0SDgoGZnJvemVuGAIgASgIGjMKDEZlZVRpZXJBZGRlZBIjCgZjb25maWcYASABKAsyEy5ub3JkLkZlZVRpZXJDb25maWcaQQoORmVlVGllclVwZGF0ZWQSCgoCaWQYASABKA0SIwoGY29uZmlnGAIgASgLMhMubm9yZC5GZWVUaWVyQ29uZmlnGjgKE0FjY291bnRzVGllclVwZGF0ZWQSDwoHdGllcl9pZBgBIAEoDRIQCghhY2NvdW50cxgCIAMoDRqbAQoZQXRvbWljU3ViYWN0aW9uUmVzdWx0S2luZBI8ChJwbGFjZV9vcmRlcl9yZXN1bHQYASABKAsyHi5ub3JkLlJlY2VpcHQuUGxhY2VPcmRlclJlc3VsdEgAEjcKDGNhbmNlbF9vcmRlchgCIAEoCzIfLm5vcmQuUmVjZWlwdC5DYW5jZWxPcmRlclJlc3VsdEgAQgcKBWlubmVyGkgKDEF0b21pY1Jlc3VsdBI4CgdyZXN1bHRzGAEgAygLMicubm9yZC5SZWNlaXB0LkF0b21pY1N1YmFjdGlvblJlc3VsdEtpbmRCBgoEa2luZCoYCgRTaWRlEgcKA0FTSxAAEgcKA0JJRBABKi0KC1RyaWdnZXJLaW5kEg0KCVNUT1BfTE9TUxAAEg8KC1RBS0VfUFJPRklUEAEqTwoIRmlsbE1vZGUSCQoFTElNSVQQABINCglQT1NUX09OTFkQARIXChNJTU1FRElBVEVfT1JfQ0FOQ0VMEAISEAoMRklMTF9PUl9LSUxMEAMqJgoKTWFya2V0VHlwZRIICgRTUE9UEAASDgoKUEVSUEVUVUFMUxABKpIaCgVFcnJvchINCglEVVBMSUNBVEUQABISCg5ERUNPREVfRkFJTFVSRRACEhUKEUlOVkFMSURfU0lHTkFUVVJFEAMSFAoQTUFSS0VUX05PVF9GT1VORBAEEhMKD1RPS0VOX05PVF9GT1VORBAFEhIKDlVTRVJfTk9UX0ZPVU5EEAYSFQoRU0VTU0lPTl9OT1RfRk9VTkQQBxITCg9PUkRFUl9OT1RfRk9VTkQQCBITCg9PUkRFUl9TSVpFX1pFUk8QCRIOCgpBUklUSE1FVElDEAsSFwoTQVJJVEhNRVRJQ19PVkVSRkxPVxAMEhgKFEFSSVRITUVUSUNfVU5ERVJGTE9XEA0SHwobQVJJVEhNRVRJQ19ESVZJU0lPTl9CWV9aRVJPEA4SGgoWS0VZX0FMUkVBRFlfUkVHSVNURVJFRBAPEhwKGEVYUElSWV9USU1FU1RBTVBfSU5fUEFTVBAQEhwKGFVQREFURV9USU1FU1RBTVBfSU5fUEFTVBAREhgKFFRPT19NQU5ZX09QRU5fT1JERVJTEBISHQoZV0lUSERSQVdfQU1PVU5UX1RPT19TTUFMTBAVEhcKE0lOVkFMSURfT1JERVJfT1dORVIQFhIgChxERUNPREVfRkFJTFVSRV9MRU5HVEhfUFJFRklYECESFgoSREVDT0RFX0ZBSUxVUkVfUkFXECISGQoVREVDT0RFX0ZBSUxVUkVfRE9NQUlOECMSHwobVVBEQVRFX1BVQkxJU0hfVElNRV9JTl9QQVNUECQSFwoTUFlUSF9GRUVEX05PVF9BRERFRBBdEhUKEVBZVEhfRkVFRF9NSVNTSU5HEF4SGwoXUFlUSF9GRUVEX0FMUkVBRFlfQURERUQQXxIjCh9QWVRIX0dVQVJESUFOX1NFVF9VTklOSVRJQUxJWkVEEGASHQoZUFlUSF9HVUFSRElBTl9TRVRfSU5WQUxJRBBhEiMKH1BZVEhfRkVFRF9ERUNJTUFMU19PVVRfT0ZfUkFOR0UQYhIgChxQWVRIX0ZFRURfUFJJQ0VfT1VUX09GX1JBTkdFEGMSIwofUFlUSF9GRUVEX1ZBUklBTkNFX09VVF9PRl9SQU5HRRBkEjUKMVBZVEhfR1VBUkRJQU5fU0VUX0FORF9QWVRIX1NJR05BVFVSRV9ET19OT1RfTUFUQ0gQZRIcChhJTlZBTElEX1RPS0VOX1BBUkFNRVRFUlMQZhIcChhJTkRFWF9QUklDRV9PVVRfT0ZfUkFOR0UQZxIfChtJTkRFWF9ERUNJTUFMU19PVVRfT0ZfUkFOR0UQaBIZChVJTlZBTElEX1NUQVRFX1ZFUlNJT04QaRIZChVUSUVSX0ZFRV9PVVRfT0ZfUkFOR0UQahIYChRUSUVSX0lEX09VVF9PRl9SQU5HRRBrEhMKD0lOVkFMSURfTUFSR0lOUxBsEiEKHU1BUktFVF9ERUNJTUFMU19FWENFRURfTElNSVRTEG0SEwoPVE9PX01BTllfVE9LRU5TEG4SFAoQRlVORElOR19PVkVSRkxPVxB7EjcKM0NBTl9SRURVQ0VfUE9TSVRJT05fT05MWV9JRl9BTExfT1JERVJTX0FSRV9DQU5DRUxFRBB8EhcKE1VORVhQRUNURURfVE9LRU5fSUQQfxIUCg9UT0tFTl9OT1RfUkVBRFkQggESHAoYVE9LRU5fQUxSRUFEWV9SRUdJU1RFUkVEEHASIQocSU1NRURJQVRFX09SREVSX0dPVF9OT19GSUxMUxCFARIZChRGQUlMRURfVE9fRklMTF9MSU1JVBCGARIwCitQT1NUX09OTFlfTVVTVF9OT1RfRklMTF9BTllfT1BQT1NJVEVfT1JERVJTEIcBEgwKB0lOVkFMSUQQiAESEAoLTUFJTlRFTkFOQ0UQiQESGgoVTUlOSU1VTV9TSVpFX0RFQ0lNQUxTEIoBEjIKLVBBUkFNRVRFUlNfV0lMTF9DUkVBVEVfTk9OX09QRVJBVElPTkFMX01BUktFVBCLARIiCh1PTkxZX0lNTUVESUFURV9PUkRFUlNfQUxMT1dFRBCMARIbChZUT09fTUFOWV9VU0VSX0FDQ09VTlRTEI0BEhYKEUFDQ09VTlRfTk9UX0ZPVU5EEI4BEhoKFUFDQ09VTlRfSU5WQUxJRF9PV05FUhCPARIRCgxEVVNUX0FDQ09VTlQQkQESDAoHQkFMQU5DRRCgARIdChhCQUxBTkNFX0RFUE9TSVRfT1ZFUkZMT1cQoQESHAoXQkFMQU5DRV9DSEFOR0VfT1ZFUkZMT1cQogESIgodQkFMQU5DRV9DSEFOR0VfTElNSVRfRVhDRUVERUQQowESGQoUQkFMQU5DRV9JTlNVRkZJQ0lFTlQQpAESHgoZVU5BVVRIRU5USUNBVEVEX0wxX0FDVElPThClARIdChhFTkNPREVEX0FDVElPTl9UT09fTEFSR0UQpgESDAoHVFJJR0dFUhCoARIaChVUUklHR0VSX0lOVkFMSURfUFJJQ0UQqQESFgoRVFJJR0dFUl9OT1RfRk9VTkQQqgESDgoJVElNRVNUQU1QELABEh8KGlRJTUVTVEFNUF9PVVRfT0ZfVEhSRVNIT0xEELEBEhQKD1RJTUVTVEFNUF9TVEFMRRCyARIlCiBCQU5LUlVQVENZX0lOU1VGRklDSUVOVF9DT1ZFUkFHRRC5ARIZChRCQU5LUlVQVENZX05PVF9GT1VORBC6ARIbChZCQU5LUlVQVENZX05PVF9BTExPV0VEELsBEhUKEE1BUktFVF9OT1RfUkVBRFkQwAESEgoNTUFSS0VUX0ZST1pFThDBARIRCgxNQVJLRVRfRU1QVFkQwgESDQoIUE9TSVRJT04QyAESFwoSUE9TSVRJT05fTk9UX0ZPVU5EEMkBEhkKFFBPU0lUSU9OX1NUQVRFX09SREVSEMoBEh8KGlBPU0lUSU9OX1NUQVRFX09SREVSX1BSSUNFEMsBEh4KGVBPU0lUSU9OX1NUQVRFX09SREVSX1NJWkUQzAESHgoZUE9TSVRJT05fU1RBVEVfT1JERVJfU0lERRDNARIYChNQT1NJVElPTl9TSVpFX0xJTUlUEM4BEhgKE1BPU0lUSU9OX1NUQVRFX1BFUlAQzwESJAofUE9TSVRJT05fU1RBVEVfT1JERVJfREVMRUdBVElPThDQARIKCgVQUklDRRDRARIbChZTSUdOQVRVUkVfVkVSSUZJQ0FUSU9OENkBEjAKK1NJR05BVFVSRV9WRVJJRklDQVRJT05fTUFMRk9STUVEX1BVQkxJQ19LRVkQ2gESKgolU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9JTlZBTElEX0xFTkdUSBDbARIJCgRSSVNLEOABEjQKL1JJU0tfREVMRUdBVElPTl9NRl9UT19CRV9MRVNTX1RIQU5fT1JfRVFVQUxfTU1GEOEBEiQKH1JJU0tfT01GX0xFU1NfVEhBTl9PUl9FUVVBTF9JTUYQ4gESJAofUklTS19PTUZfTEVTU19USEFOX09SX0VRVUFMX0NNRhDjARIqCiVSSVNLX1RSQURFX09NRl9MRVNTX1RIQU5fT1JfRVFVQUxfQ01GEOUBEjUKMFJJU0tfVU5IRUFMVEhZX01GX0FORF9QT05fQUZURVJfQkVUVEVSX09GX0JFRk9SRRDkARIUCg9PUkRFUl9FWEVDVVRJT04Q8AESGgoVT1JERVJfRVhFQ1VUSU9OX0VNUFRZEPEBEiEKHE9SREVSX0VYRUNVVElPTl9GSUxMX09SX0tJTEwQ8gESIwoeT1JERVJfRVhFQ1VUSU9OX01JU1NJTkdfTElNSVRTEPMBEiIKHU9SREVSX0VYRUNVVElPTl9NSVNTSU5HX1BSSUNFEPQBEh8KGk9SREVSX0VYRUNVVElPTl9TSVpFX0xJTUlUEPUBEiAKG09SREVSX0VYRUNVVElPTl9MSU1JVF9QUklDRRD2ARIeChlPUkRFUl9SRURVQ0VfSVNfUE9TVF9PTkxZEPcBEh8KGk9SREVSX0VYRUNVVElPTl9TRUxMX1BSSUNFEPgBEiUKIE9SREVSX1NJWkVfRVhDRUVEU19QT1NJVElPTl9TSVpFEPkBEigKI0FUT01JQ1NfVFJBREVTX0NBTk5PVF9GT0xMT1dfUExBQ0VTEIACEjAKK0FUT01JQ1NfQ0FOQ0VMU19DQU5OT1RfRk9MTE9XX1RSQURFU19QTEFDRVMQgQISJgohQUNUSU9OX1BPU0lUSU9OX1NIT1VMRF9CRV9DT1ZFUkVEEJECEhkKFEFDVElPTl9JTlZBTElEX05PTkNFEJICEikKJEFDVElPTl9QUk9QT1NFRF9QUklDRV9NVVNUX0JFX0hJR0hFUhCTAhIUCg9OT1RfSU1QTEVNRU5URUQQ9AMSDAoHRHJvcHBlZBDnByoeCg5TcGVjaWFsQWNjb3VudBIMCghGZWVWYXVsdBAAYgZwcm90bzM");
13
+ exports.file_nord = (0, codegenv2_1.fileDesc)("Cgpub3JkLnByb3RvEgRub3JkIj0KDUZlZVRpZXJDb25maWcSFQoNbWFrZXJfZmVlX2JwcxgBIAEoDRIVCg10YWtlcl9mZWVfYnBzGAIgASgNItABCgZNYXJrZXQSEQoJbWFya2V0X2lkGAEgASgNEhYKDnByaWNlX2RlY2ltYWxzGAIgASgNEhUKDXNpemVfZGVjaW1hbHMYAyABKA0SFQoNYmFzZV90b2tlbl9pZBgEIAEoDRIlCgttYXJrZXRfdHlwZRgFIAEoDjIQLm5vcmQuTWFya2V0VHlwZRIPCgdpbWZfYnBzGAYgASgNEg8KB2NtZl9icHMYByABKA0SDwoHbW1mX2JwcxgIIAEoDRITCgt2aWV3X3N5bWJvbBgKIAEoCSJaCgVUb2tlbhIQCgh0b2tlbl9pZBgBIAEoDRIWCg50b2tlbl9kZWNpbWFscxgCIAEoDRISCgp3ZWlnaHRfYnBzGAQgASgNEhMKC3ZpZXdfc3ltYm9sGAUgASgJIigKCVF1b3RlU2l6ZRIMCgRzaXplGAEgASgEEg0KBXByaWNlGAIgASgEIk4KCk9yZGVyTGltaXQSDQoFcHJpY2UYBiABKAQSDAoEc2l6ZRgHIAEoBBIjCgpxdW90ZV9zaXplGAggASgLMg8ubm9yZC5RdW90ZVNpemUiYAoJT3JkZXJUeXBlEhgKBHNpZGUYAyABKA4yCi5ub3JkLlNpZGUSIQoJZmlsbF9tb2RlGAQgASgOMg4ubm9yZC5GaWxsTW9kZRIWCg5pc19yZWR1Y2Vfb25seRgFIAEoCCKZAQoMVHJhZGVPclBsYWNlEhEKCW1hcmtldF9pZBgCIAEoDRIjCgpvcmRlcl90eXBlGAMgASgLMg8ubm9yZC5PcmRlclR5cGUSHwoFbGltaXQYBiABKAsyEC5ub3JkLk9yZGVyTGltaXQSHAoPY2xpZW50X29yZGVyX2lkGCEgASgESACIAQFCEgoQX2NsaWVudF9vcmRlcl9pZCIfCgtDYW5jZWxPcmRlchIQCghvcmRlcl9pZBgCIAEoBCJHCgpUcmlnZ2VyS2V5Eh8KBGtpbmQYAyABKA4yES5ub3JkLlRyaWdnZXJLaW5kEhgKBHNpZGUYBCABKA4yCi5ub3JkLlNpZGUikCEKBkFjdGlvbhIZChFjdXJyZW50X3RpbWVzdGFtcBgBIAEoAxINCgVub25jZRgCIAEoDRI0Cg5jcmVhdGVfc2Vzc2lvbhgEIAEoCzIaLm5vcmQuQWN0aW9uLkNyZWF0ZVNlc3Npb25IABIwCgxjcmVhdGVfdG9rZW4YBSABKAsyGC5ub3JkLkFjdGlvbi5DcmVhdGVUb2tlbkgAEjIKDWNyZWF0ZV9tYXJrZXQYBiABKAsyGS5ub3JkLkFjdGlvbi5DcmVhdGVNYXJrZXRIABIuCgtwbGFjZV9vcmRlchgHIAEoCzIXLm5vcmQuQWN0aW9uLlBsYWNlT3JkZXJIABI6ChJjYW5jZWxfb3JkZXJfYnlfaWQYCCABKAsyHC5ub3JkLkFjdGlvbi5DYW5jZWxPcmRlckJ5SWRIABInCgdkZXBvc2l0GAkgASgLMhQubm9yZC5BY3Rpb24uRGVwb3NpdEgAEikKCHdpdGhkcmF3GAogASgLMhUubm9yZC5BY3Rpb24uV2l0aGRyYXdIABJMChtweXRoX3NldF93b3JtaG9sZV9ndWFyZGlhbnMYCyABKAsyJS5ub3JkLkFjdGlvbi5QeXRoU2V0V29ybWhvbGVHdWFyZGlhbnNIABI+ChRweXRoX3NldF9zeW1ib2xfZmVlZBgMIAEoCzIeLm5vcmQuQWN0aW9uLlB5dGhTZXRTeW1ib2xGZWVkSAASQgoWcHl0aF9wcmljZV9mZWVkX3VwZGF0ZRgNIAEoCzIgLm5vcmQuQWN0aW9uLlB5dGhQcmljZUZlZWRVcGRhdGVIABIrCglsaXF1aWRhdGUYDiABKAsyFi5ub3JkLkFjdGlvbi5MaXF1aWRhdGVIABI0Cg5yZXZva2Vfc2Vzc2lvbhgPIAEoCzIaLm5vcmQuQWN0aW9uLlJldm9rZVNlc3Npb25IABIjCgVwYXVzZRgQIAEoCzISLm5vcmQuQWN0aW9uLlBhdXNlSAASJwoHdW5wYXVzZRgRIAEoCzIULm5vcmQuQWN0aW9uLlVucGF1c2VIABIpCgh0cmFuc2ZlchgSIAEoCzIVLm5vcmQuQWN0aW9uLlRyYW5zZmVySAASLgoLYWRkX3RyaWdnZXIYICABKAsyFy5ub3JkLkFjdGlvbi5BZGRUcmlnZ2VySAASNAoOcmVtb3ZlX3RyaWdnZXIYISABKAsyGi5ub3JkLkFjdGlvbi5SZW1vdmVUcmlnZ2VySAASMgoNdGFrZV9wb3NpdGlvbhgiIAEoCzIZLm5vcmQuQWN0aW9uLlRha2VQb3NpdGlvbkgAEh4KBmF0b21pYxgjIAEoCzIMLm5vcmQuQXRvbWljSAASMgoNZnJlZXplX21hcmtldBgkIAEoCzIZLm5vcmQuQWN0aW9uLkZyZWV6ZU1hcmtldEgAEjYKD3VuZnJlZXplX21hcmtldBglIAEoCzIbLm5vcmQuQWN0aW9uLlVuZnJlZXplTWFya2V0SAASLwoMYWRkX2ZlZV90aWVyGCYgASgLMhcubm9yZC5BY3Rpb24uQWRkRmVlVGllckgAEjUKD3VwZGF0ZV9mZWVfdGllchgnIAEoCzIaLm5vcmQuQWN0aW9uLlVwZGF0ZUZlZVRpZXJIABI/ChR1cGRhdGVfYWNjb3VudHNfdGllchgoIAEoCzIfLm5vcmQuQWN0aW9uLlVwZGF0ZUFjY291bnRzVGllckgAEiwKCnVwZGF0ZV9hY2wYKSABKAsyFi5ub3JkLkFjdGlvbi5VcGRhdGVBY2xIABpTCg1DcmVhdGVTZXNzaW9uEhMKC3VzZXJfcHVia2V5GAEgASgMEhMKC2Jsc3RfcHVia2V5GAIgASgMEhgKEGV4cGlyeV90aW1lc3RhbXAYAyABKAMaiwEKC0NyZWF0ZVRva2VuEhYKDnRva2VuX2RlY2ltYWxzGAEgASgNEhIKCndlaWdodF9icHMYAyABKA0SEwoLdmlld19zeW1ib2wYBCABKAkSFQoNb3JhY2xlX3N5bWJvbBgFIAEoCRIQCghzb2xfYWRkchgGIAEoDBISCgphY2xfcHVia2V5GAcgASgMGu4BCgxDcmVhdGVNYXJrZXQSFQoNc2l6ZV9kZWNpbWFscxgBIAEoDRIWCg5wcmljZV9kZWNpbWFscxgCIAEoDRIPCgdpbWZfYnBzGAMgASgNEg8KB2NtZl9icHMYBCABKA0SDwoHbW1mX2JwcxgFIAEoDRIlCgttYXJrZXRfdHlwZRgGIAEoDjIQLm5vcmQuTWFya2V0VHlwZRITCgt2aWV3X3N5bWJvbBgHIAEoCRIVCg1vcmFjbGVfc3ltYm9sGAggASgJEhUKDWJhc2VfdG9rZW5faWQYCSABKA0SEgoKYWNsX3B1YmtleRgKIAEoDBqmAwoKUGxhY2VPcmRlchISCgpzZXNzaW9uX2lkGAEgASgEEhEKCW1hcmtldF9pZBgCIAEoDRIYCgRzaWRlGAMgASgOMgoubm9yZC5TaWRlEiEKCWZpbGxfbW9kZRgEIAEoDjIOLm5vcmQuRmlsbE1vZGUSFgoOaXNfcmVkdWNlX29ubHkYBSABKAgSDQoFcHJpY2UYBiABKAQSDAoEc2l6ZRgHIAEoBBIjCgpxdW90ZV9zaXplGAggASgLMg8ubm9yZC5RdW90ZVNpemUSIQoUZGVsZWdhdG9yX2FjY291bnRfaWQYICABKA1IAIgBARIcCg9jbGllbnRfb3JkZXJfaWQYISABKARIAYgBARIeChFzZW5kZXJfYWNjb3VudF9pZBgiIAEoDUgCiAEBEh8KEnNlbmRlcl90cmFja2luZ19pZBgjIAEoBEgDiAEBQhcKFV9kZWxlZ2F0b3JfYWNjb3VudF9pZEISChBfY2xpZW50X29yZGVyX2lkQhQKEl9zZW5kZXJfYWNjb3VudF9pZEIVChNfc2VuZGVyX3RyYWNraW5nX2lkGqkBCg9DYW5jZWxPcmRlckJ5SWQSEgoKc2Vzc2lvbl9pZBgBIAEoBBIQCghvcmRlcl9pZBgCIAEoBBIhChRkZWxlZ2F0b3JfYWNjb3VudF9pZBggIAEoDUgAiAEBEh4KEXNlbmRlcl9hY2NvdW50X2lkGCEgASgNSAGIAQFCFwoVX2RlbGVnYXRvcl9hY2NvdW50X2lkQhQKEl9zZW5kZXJfYWNjb3VudF9pZBpvCgdEZXBvc2l0EhQKDGFjdGlvbl9ub25jZRgBIAEoBBISCgp0b2tlbl9hZGRyGAIgASgMEg4KBmFtb3VudBgDIAEoBBITCgt1c2VyX3B1YmtleRgEIAEoDBIVCg1zZW5kZXJfcHVia2V5GAUgASgMGkAKCFdpdGhkcmF3EhAKCHRva2VuX2lkGAEgASgNEhIKCnNlc3Npb25faWQYAiABKAQSDgoGYW1vdW50GAMgASgEGl0KGFB5dGhTZXRXb3JtaG9sZUd1YXJkaWFucxIaChJndWFyZGlhbl9zZXRfaW5kZXgYASABKA0SEQoJYWRkcmVzc2VzGAIgAygMEhIKCmFjbF9wdWJrZXkYAyABKAwaVQoRUHl0aFNldFN5bWJvbEZlZWQSFQoNb3JhY2xlX3N5bWJvbBgBIAEoCRIVCg1wcmljZV9mZWVkX2lkGAIgASgMEhIKCmFjbF9wdWJrZXkYAyABKAwaLwoTUHl0aFByaWNlRmVlZFVwZGF0ZRIYChByYXdfcHl0aG5ldF9kYXRhGAEgASgMGocBCglMaXF1aWRhdGUSHQoVbGlxdWlkYXRvcl9zZXNzaW9uX2lkGAEgASgEEh0KFWxpcXVpZGF0ZWVfYWNjb3VudF9pZBgCIAEoDRIiChVsaXF1aWRhdG9yX2FjY291bnRfaWQYAyABKA1IAIgBAUIYChZfbGlxdWlkYXRvcl9hY2NvdW50X2lkGiMKDVJldm9rZVNlc3Npb24SEgoKc2Vzc2lvbl9pZBgBIAEoBBobCgVQYXVzZRISCgphY2xfcHVia2V5GAEgASgMGh0KB1VucGF1c2USEgoKYWNsX3B1YmtleRgBIAEoDBrPAQoIVHJhbnNmZXISEgoKc2Vzc2lvbl9pZBgBIAEoBBIXCg9mcm9tX2FjY291bnRfaWQYAiABKA0SEAoIdG9rZW5faWQYAyABKA0SDgoGYW1vdW50GAQgASgEEhoKDXRvX2FjY291bnRfaWQYCCABKA1IAIgBARIyCg9zcGVjaWFsX2FjY291bnQYCSABKA4yFC5ub3JkLlNwZWNpYWxBY2NvdW50SAGIAQFCEAoOX3RvX2FjY291bnRfaWRCEgoQX3NwZWNpYWxfYWNjb3VudBpQCg1UcmlnZ2VyUHJpY2VzEhUKDXRyaWdnZXJfcHJpY2UYBSABKAQSGAoLbGltaXRfcHJpY2UYBiABKARIAIgBAUIOCgxfbGltaXRfcHJpY2UapgEKCkFkZFRyaWdnZXISEgoKc2Vzc2lvbl9pZBgBIAEoBBIRCgltYXJrZXRfaWQYAiABKA0SHQoDa2V5GAMgASgLMhAubm9yZC5UcmlnZ2VyS2V5EioKBnByaWNlcxgEIAEoCzIaLm5vcmQuQWN0aW9uLlRyaWdnZXJQcmljZXMSFwoKYWNjb3VudF9pZBgKIAEoDUgAiAEBQg0KC19hY2NvdW50X2lkGn0KDVJlbW92ZVRyaWdnZXISEgoKc2Vzc2lvbl9pZBgBIAEoBBIRCgltYXJrZXRfaWQYAiABKA0SHQoDa2V5GAMgASgLMhAubm9yZC5UcmlnZ2VyS2V5EhcKCmFjY291bnRfaWQYCiABKA1IAIgBAUINCgtfYWNjb3VudF9pZBpFCgpBZGRGZWVUaWVyEhIKCmFjbF9wdWJrZXkYASABKAwSIwoGY29uZmlnGAIgASgLMhMubm9yZC5GZWVUaWVyQ29uZmlnGlQKDVVwZGF0ZUZlZVRpZXISCgoCaWQYASABKA0SIwoGY29uZmlnGAIgASgLMhMubm9yZC5GZWVUaWVyQ29uZmlnEhIKCmFjbF9wdWJrZXkYAyABKAwaSwoSVXBkYXRlQWNjb3VudHNUaWVyEg8KB3RpZXJfaWQYASABKA0SEAoIYWNjb3VudHMYAiADKA0SEgoKYWNsX3B1YmtleRgDIAEoDBpfCglVcGRhdGVBY2wSEgoKYWNsX3B1YmtleRgBIAEoDBIVCg10YXJnZXRfcHVia2V5GAIgASgMEhIKCnJvbGVzX21hc2sYAyABKA0SEwoLcm9sZXNfdmFsdWUYBCABKA0aNQoMRnJlZXplTWFya2V0EhIKCmFjbF9wdWJrZXkYASABKAwSEQoJbWFya2V0X2lkGAIgASgNGjcKDlVuZnJlZXplTWFya2V0EhIKCmFjbF9wdWJrZXkYASABKAwSEQoJbWFya2V0X2lkGAIgASgNGpcBCgxUYWtlUG9zaXRpb24SEgoKc2Vzc2lvbl9pZBgBIAEoBBIRCgltYXJrZXRfaWQYAiABKA0SDAoEc2l6ZRgDIAEoAxIeChFzZW5kZXJfYWNjb3VudF9pZBgEIAEoDUgAiAEBEhIKBXByaWNlGAUgASgESAGIAQFCFAoSX3NlbmRlcl9hY2NvdW50X2lkQggKBl9wcmljZUIGCgRraW5kIncKE0F0b21pY1N1YmFjdGlvbktpbmQSLAoOdHJhZGVfb3JfcGxhY2UYBiABKAsyEi5ub3JkLlRyYWRlT3JQbGFjZUgAEikKDGNhbmNlbF9vcmRlchgHIAEoCzIRLm5vcmQuQ2FuY2VsT3JkZXJIAEIHCgVpbm5lciJwCgZBdG9taWMSEgoKc2Vzc2lvbl9pZBgBIAEoBBIXCgphY2NvdW50X2lkGAIgASgNSACIAQESKgoHYWN0aW9ucxgGIAMoCzIZLm5vcmQuQXRvbWljU3ViYWN0aW9uS2luZEINCgtfYWNjb3VudF9pZCK4HwoHUmVjZWlwdBIRCglhY3Rpb25faWQYASABKAQSGgoDZXJyGCAgASgOMgsubm9yZC5FcnJvckgAEkIKFWNyZWF0ZV9zZXNzaW9uX3Jlc3VsdBghIAEoCzIhLm5vcmQuUmVjZWlwdC5DcmVhdGVTZXNzaW9uUmVzdWx0SAASPAoScGxhY2Vfb3JkZXJfcmVzdWx0GCIgASgLMh4ubm9yZC5SZWNlaXB0LlBsYWNlT3JkZXJSZXN1bHRIABI+ChNjYW5jZWxfb3JkZXJfcmVzdWx0GCMgASgLMh8ubm9yZC5SZWNlaXB0LkNhbmNlbE9yZGVyUmVzdWx0SAASNQoOZGVwb3NpdF9yZXN1bHQYJCABKAsyGy5ub3JkLlJlY2VpcHQuRGVwb3NpdFJlc3VsdEgAEj4KE2luc2VydF90b2tlbl9yZXN1bHQYJSABKAsyHy5ub3JkLlJlY2VpcHQuSW5zZXJ0VG9rZW5SZXN1bHRIABJAChRpbnNlcnRfbWFya2V0X3Jlc3VsdBgmIAEoCzIgLm5vcmQuUmVjZWlwdC5JbnNlcnRNYXJrZXRSZXN1bHRIABI3Cg93aXRoZHJhd19yZXN1bHQYJyABKAsyHC5ub3JkLlJlY2VpcHQuV2l0aGRyYXdSZXN1bHRIABJJChlvcmFjbGVfc3ltYm9sX2ZlZWRfcmVzdWx0GCggASgLMiQubm9yZC5SZWNlaXB0Lk9yYWNsZVN5bWJvbEZlZWRSZXN1bHRIABJAChRvcmFjbGVfdXBkYXRlX3Jlc3VsdBgpIAEoCzIgLm5vcmQuUmVjZWlwdC5PcmFjbGVVcGRhdGVSZXN1bHRIABJLChp1cGRhdGVfZ3VhcmRpYW5fc2V0X3Jlc3VsdBgqIAEoCzIlLm5vcmQuUmVjZWlwdC5VcGRhdGVHdWFyZGlhblNldFJlc3VsdEgAEjUKCmxpcXVpZGF0ZWQYKyABKAsyHy5ub3JkLlJlY2VpcHQuQWNjb3VudExpcXVpZGF0ZWRIABI3Cg9zZXNzaW9uX3Jldm9rZWQYLCABKAsyHC5ub3JkLlJlY2VpcHQuU2Vzc2lvblJldm9rZWRIABImCgZwYXVzZWQYLSABKAsyFC5ub3JkLlJlY2VpcHQuUGF1c2VkSAASKgoIdW5wYXVzZWQYLiABKAsyFi5ub3JkLlJlY2VpcHQuVW5wYXVzZWRIABIwCgt0cmFuc2ZlcnJlZBgvIAEoCzIZLm5vcmQuUmVjZWlwdC5UcmFuc2ZlcnJlZEgAEjMKDXRyaWdnZXJfYWRkZWQYQCABKAsyGi5ub3JkLlJlY2VpcHQuVHJpZ2dlckFkZGVkSAASNwoPdHJpZ2dlcl9yZW1vdmVkGEEgASgLMhwubm9yZC5SZWNlaXB0LlRyaWdnZXJSZW1vdmVkSAASTQoYcG9zaXRpb25fdGFrZW5fb3JfdHJhZGVkGEIgASgLMikubm9yZC5SZWNlaXB0LlBvc2l0aW9uVGFrZW5PclRyYWRlZFJlc3VsdEgAEiwKBmF0b21pYxhDIAEoCzIaLm5vcmQuUmVjZWlwdC5BdG9taWNSZXN1bHRIABJCChVtYXJrZXRfZnJlZXplX3VwZGF0ZWQYRCABKAsyIS5ub3JkLlJlY2VpcHQuTWFya2V0RnJlZXplVXBkYXRlZEgAEjQKDmZlZV90aWVyX2FkZGVkGEUgASgLMhoubm9yZC5SZWNlaXB0LkZlZVRpZXJBZGRlZEgAEjgKEGZlZV90aWVyX3VwZGF0ZWQYRiABKAsyHC5ub3JkLlJlY2VpcHQuRmVlVGllclVwZGF0ZWRIABJCChVhY2NvdW50c190aWVyX3VwZGF0ZWQYRyABKAsyIS5ub3JkLlJlY2VpcHQuQWNjb3VudHNUaWVyVXBkYXRlZEgAEi8KC2FjbF91cGRhdGVkGEggASgLMhgubm9yZC5SZWNlaXB0LkFjbFVwZGF0ZWRIABp4CgZQb3N0ZWQSGAoEc2lkZRgBIAEoDjIKLm5vcmQuU2lkZRIRCgltYXJrZXRfaWQYAiABKA0SDQoFcHJpY2UYAyABKAQSDAoEc2l6ZRgEIAEoBBIQCghvcmRlcl9pZBgFIAEoBBISCgphY2NvdW50X2lkGAYgASgNGkoKBVRyYWRlEhAKCG9yZGVyX2lkGAIgASgEEg0KBXByaWNlGAQgASgEEgwKBHNpemUYBSABKAQSEgoKYWNjb3VudF9pZBgGIAEoDRopChNDcmVhdGVTZXNzaW9uUmVzdWx0EhIKCnNlc3Npb25faWQYASABKAQaQwoJVHJpZ2dlcmVkEh8KBGtpbmQYAyABKA4yES5ub3JkLlRyaWdnZXJLaW5kEhUKDXRyaWdnZXJfcHJpY2UYBCABKAQalQIKEFBsYWNlT3JkZXJSZXN1bHQSKQoGcG9zdGVkGAEgASgLMhQubm9yZC5SZWNlaXB0LlBvc3RlZEgAiAEBEiIKBWZpbGxzGAIgAygLMhMubm9yZC5SZWNlaXB0LlRyYWRlEhwKD2NsaWVudF9vcmRlcl9pZBgDIAEoBEgBiAEBEh8KEnNlbmRlcl90cmFja2luZ19pZBgEIAEoBEgCiAEBEi8KCXRyaWdnZXJlZBgFIAEoCzIXLm5vcmQuUmVjZWlwdC5UcmlnZ2VyZWRIA4gBAUIJCgdfcG9zdGVkQhIKEF9jbGllbnRfb3JkZXJfaWRCFQoTX3NlbmRlcl90cmFja2luZ19pZEIMCgpfdHJpZ2dlcmVkGkIKC1Rha2VuUmVzdWx0EgsKA3BubBgBIAEoAxIMCgRzaXplGAIgASgDEhgKEHRha2VyX2FjY291bnRfaWQYAyABKA0aqwEKG1Bvc2l0aW9uVGFrZW5PclRyYWRlZFJlc3VsdBIRCgltYXJrZXRfaWQYASABKA0SKgoFdGFrZW4YAiABKAsyGS5ub3JkLlJlY2VpcHQuVGFrZW5SZXN1bHRIABIwCgZ0cmFkZWQYAyABKAsyHi5ub3JkLlJlY2VpcHQuUGxhY2VPcmRlclJlc3VsdEgAQhsKGVBvc2l0aW9uVGFrZW5PclRyYWRlZEtpbmQaOQoRQ2FuY2VsT3JkZXJSZXN1bHQSEAoIb3JkZXJfaWQYASABKAQSEgoKYWNjb3VudF9pZBgCIAEoDRpwCg1EZXBvc2l0UmVzdWx0EhAKCHRva2VuX2lkGAEgASgNEg4KBmFtb3VudBgCIAEoBBISCgphY2NvdW50X2lkGAMgASgNEhQKDHVzZXJfY3JlYXRlZBgEIAEoCBITCgt1c2VyX3B1YmtleRgFIAEoDBpDChFJbnNlcnRUb2tlblJlc3VsdBISCgpjaGFpbl9hZGRyGAEgASgMEhoKBXRva2VuGAIgASgLMgsubm9yZC5Ub2tlbhoyChJJbnNlcnRNYXJrZXRSZXN1bHQSHAoGbWFya2V0GAEgASgLMgwubm9yZC5NYXJrZXQaeQoOV2l0aGRyYXdSZXN1bHQSEAoIdG9rZW5faWQYASABKA0SDgoGYW1vdW50GAIgASgEEg8KB2JhbGFuY2UYAyABKAQSEgoKYWNjb3VudF9pZBgEIAEoDRILCgNmZWUYBSABKAQSEwoLdXNlcl9wdWJrZXkYBiABKAwaQAoWT3JhY2xlU3ltYm9sRmVlZFJlc3VsdBIVCg1vcmFjbGVfc3ltYm9sGAEgASgJEg8KB2ZlZWRfaWQYAiABKAwaJwoST3JhY2xlVXBkYXRlUmVzdWx0EhEKCXRpbWVzdGFtcBgBIAEoAxpIChdVcGRhdGVHdWFyZGlhblNldFJlc3VsdBIaChJndWFyZGlhbl9zZXRfaW5kZXgYASABKA0SEQoJYWRkcmVzc2VzGAIgAygMGkMKDFBlcnBQb3NpdGlvbhIRCgltYXJrZXRfaWQYASABKA0SEQoJYmFzZV9zaXplGAIgASgDEg0KBXByaWNlGAMgASgEGp4BChFBY2NvdW50TGlxdWlkYXRlZBIdChVsaXF1aWRhdG9yX2FjY291bnRfaWQYASABKA0SHQoVbGlxdWlkYXRlZV9hY2NvdW50X2lkGAIgASgNEhgKEGNhbmNlbGxlZF9vcmRlcnMYAyADKAQSMQoNcmVtb3ZlZF9wZXJwcxgEIAMoCzIaLm5vcmQuUmVjZWlwdC5QZXJwUG9zaXRpb24aEAoOU2Vzc2lvblJldm9rZWQaCAoGUGF1c2VkGgoKCFVucGF1c2VkGuEBCgtUcmFuc2ZlcnJlZBIXCg9mcm9tX2FjY291bnRfaWQYASABKA0SHAoPdG9fdXNlcl9hY2NvdW50GAIgASgNSACIAQESEAoIdG9rZW5faWQYAyABKA0SDgoGYW1vdW50GAQgASgEEhcKD2FjY291bnRfY3JlYXRlZBgFIAEoCBI1ChJ0b19zcGVjaWFsX2FjY291bnQYBiABKA4yFC5ub3JkLlNwZWNpYWxBY2NvdW50SAGIAQFCEgoQX3RvX3VzZXJfYWNjb3VudEIVChNfdG9fc3BlY2lhbF9hY2NvdW50Gg4KDFRyaWdnZXJBZGRlZBoQCg5UcmlnZ2VyUmVtb3ZlZBo4ChNNYXJrZXRGcmVlemVVcGRhdGVkEhEKCW1hcmtldF9pZBgBIAEoDRIOCgZmcm96ZW4YAiABKAgaMwoMRmVlVGllckFkZGVkEiMKBmNvbmZpZxgBIAEoCzITLm5vcmQuRmVlVGllckNvbmZpZxpBCg5GZWVUaWVyVXBkYXRlZBIKCgJpZBgBIAEoDRIjCgZjb25maWcYAiABKAsyEy5ub3JkLkZlZVRpZXJDb25maWcaOAoTQWNjb3VudHNUaWVyVXBkYXRlZBIPCgd0aWVyX2lkGAEgASgNEhAKCGFjY291bnRzGAIgAygNGmAKCkFjbFVwZGF0ZWQSEgoKYWNsX3B1YmtleRgBIAEoDBISCgpyb2xlc19tYXNrGAIgASgEEhUKDXRhcmdldF9wdWJrZXkYAyABKAwSEwoLcm9sZXNfdmFsdWUYBCABKAQamwEKGUF0b21pY1N1YmFjdGlvblJlc3VsdEtpbmQSPAoScGxhY2Vfb3JkZXJfcmVzdWx0GAEgASgLMh4ubm9yZC5SZWNlaXB0LlBsYWNlT3JkZXJSZXN1bHRIABI3CgxjYW5jZWxfb3JkZXIYAiABKAsyHy5ub3JkLlJlY2VpcHQuQ2FuY2VsT3JkZXJSZXN1bHRIAEIHCgVpbm5lchpICgxBdG9taWNSZXN1bHQSOAoHcmVzdWx0cxgBIAMoCzInLm5vcmQuUmVjZWlwdC5BdG9taWNTdWJhY3Rpb25SZXN1bHRLaW5kQgYKBGtpbmQqGAoEU2lkZRIHCgNBU0sQABIHCgNCSUQQASotCgtUcmlnZ2VyS2luZBINCglTVE9QX0xPU1MQABIPCgtUQUtFX1BST0ZJVBABKk8KCEZpbGxNb2RlEgkKBUxJTUlUEAASDQoJUE9TVF9PTkxZEAESFwoTSU1NRURJQVRFX09SX0NBTkNFTBACEhAKDEZJTExfT1JfS0lMTBADKiYKCk1hcmtldFR5cGUSCAoEU1BPVBAAEg4KClBFUlBFVFVBTFMQASqSGwoFRXJyb3ISDQoJRFVQTElDQVRFEAASEgoOREVDT0RFX0ZBSUxVUkUQAhIVChFJTlZBTElEX1NJR05BVFVSRRADEhQKEE1BUktFVF9OT1RfRk9VTkQQBBITCg9UT0tFTl9OT1RfRk9VTkQQBRISCg5VU0VSX05PVF9GT1VORBAGEhUKEVNFU1NJT05fTk9UX0ZPVU5EEAcSEwoPT1JERVJfTk9UX0ZPVU5EEAgSEwoPT1JERVJfU0laRV9aRVJPEAkSDgoKQVJJVEhNRVRJQxALEhcKE0FSSVRITUVUSUNfT1ZFUkZMT1cQDBIYChRBUklUSE1FVElDX1VOREVSRkxPVxANEh8KG0FSSVRITUVUSUNfRElWSVNJT05fQllfWkVSTxAOEhoKFktFWV9BTFJFQURZX1JFR0lTVEVSRUQQDxIcChhFWFBJUllfVElNRVNUQU1QX0lOX1BBU1QQEBIcChhVUERBVEVfVElNRVNUQU1QX0lOX1BBU1QQERIYChRUT09fTUFOWV9PUEVOX09SREVSUxASEh0KGVdJVEhEUkFXX0FNT1VOVF9UT09fU01BTEwQFRIXChNJTlZBTElEX09SREVSX09XTkVSEBYSIAocREVDT0RFX0ZBSUxVUkVfTEVOR1RIX1BSRUZJWBAhEhYKEkRFQ09ERV9GQUlMVVJFX1JBVxAiEhkKFURFQ09ERV9GQUlMVVJFX0RPTUFJThAjEh8KG1VQREFURV9QVUJMSVNIX1RJTUVfSU5fUEFTVBAkEhcKE1BZVEhfRkVFRF9OT1RfQURERUQQXRIVChFQWVRIX0ZFRURfTUlTU0lORxBeEhsKF1BZVEhfRkVFRF9BTFJFQURZX0FEREVEEF8SIwofUFlUSF9HVUFSRElBTl9TRVRfVU5JTklUSUFMSVpFRBBgEh0KGVBZVEhfR1VBUkRJQU5fU0VUX0lOVkFMSUQQYRIjCh9QWVRIX0ZFRURfREVDSU1BTFNfT1VUX09GX1JBTkdFEGISIAocUFlUSF9GRUVEX1BSSUNFX09VVF9PRl9SQU5HRRBjEiMKH1BZVEhfRkVFRF9WQVJJQU5DRV9PVVRfT0ZfUkFOR0UQZBI1CjFQWVRIX0dVQVJESUFOX1NFVF9BTkRfUFlUSF9TSUdOQVRVUkVfRE9fTk9UX01BVENIEGUSHAoYSU5WQUxJRF9UT0tFTl9QQVJBTUVURVJTEGYSHAoYSU5ERVhfUFJJQ0VfT1VUX09GX1JBTkdFEGcSHwobSU5ERVhfREVDSU1BTFNfT1VUX09GX1JBTkdFEGgSGQoVSU5WQUxJRF9TVEFURV9WRVJTSU9OEGkSGQoVVElFUl9GRUVfT1VUX09GX1JBTkdFEGoSGAoUVElFUl9JRF9PVVRfT0ZfUkFOR0UQaxITCg9JTlZBTElEX01BUkdJTlMQbBIhCh1NQVJLRVRfREVDSU1BTFNfRVhDRUVEX0xJTUlUUxBtEhMKD1RPT19NQU5ZX1RPS0VOUxBuEhQKEEZVTkRJTkdfT1ZFUkZMT1cQexI3CjNDQU5fUkVEVUNFX1BPU0lUSU9OX09OTFlfSUZfQUxMX09SREVSU19BUkVfQ0FOQ0VMRUQQfBIXChNVTkVYUEVDVEVEX1RPS0VOX0lEEH8SFAoPVE9LRU5fTk9UX1JFQURZEIIBEhwKGFRPS0VOX0FMUkVBRFlfUkVHSVNURVJFRBBwEiEKHElNTUVESUFURV9PUkRFUl9HT1RfTk9fRklMTFMQhQESGQoURkFJTEVEX1RPX0ZJTExfTElNSVQQhgESMAorUE9TVF9PTkxZX01VU1RfTk9UX0ZJTExfQU5ZX09QUE9TSVRFX09SREVSUxCHARIMCgdJTlZBTElEEIgBEhAKC01BSU5URU5BTkNFEIkBEhoKFU1JTklNVU1fU0laRV9ERUNJTUFMUxCKARIyCi1QQVJBTUVURVJTX1dJTExfQ1JFQVRFX05PTl9PUEVSQVRJT05BTF9NQVJLRVQQiwESIgodT05MWV9JTU1FRElBVEVfT1JERVJTX0FMTE9XRUQQjAESGwoWVE9PX01BTllfVVNFUl9BQ0NPVU5UUxCNARIWChFBQ0NPVU5UX05PVF9GT1VORBCOARIaChVBQ0NPVU5UX0lOVkFMSURfT1dORVIQjwESEQoMRFVTVF9BQ0NPVU5UEJEBEgwKB0JBTEFOQ0UQoAESHQoYQkFMQU5DRV9ERVBPU0lUX09WRVJGTE9XEKEBEhwKF0JBTEFOQ0VfQ0hBTkdFX09WRVJGTE9XEKIBEiIKHUJBTEFOQ0VfQ0hBTkdFX0xJTUlUX0VYQ0VFREVEEKMBEhkKFEJBTEFOQ0VfSU5TVUZGSUNJRU5UEKQBEh4KGVVOQVVUSEVOVElDQVRFRF9MMV9BQ1RJT04QpQESHQoYRU5DT0RFRF9BQ1RJT05fVE9PX0xBUkdFEKYBEgwKB1RSSUdHRVIQqAESGgoVVFJJR0dFUl9JTlZBTElEX1BSSUNFEKkBEhYKEVRSSUdHRVJfTk9UX0ZPVU5EEKoBEg4KCVRJTUVTVEFNUBCwARIfChpUSU1FU1RBTVBfT1VUX09GX1RIUkVTSE9MRBCxARIUCg9USU1FU1RBTVBfU1RBTEUQsgESJQogQkFOS1JVUFRDWV9JTlNVRkZJQ0lFTlRfQ09WRVJBR0UQuQESGQoUQkFOS1JVUFRDWV9OT1RfRk9VTkQQugESGwoWQkFOS1JVUFRDWV9OT1RfQUxMT1dFRBC7ARIVChBNQVJLRVRfTk9UX1JFQURZEMABEhIKDU1BUktFVF9GUk9aRU4QwQESEQoMTUFSS0VUX0VNUFRZEMIBEg0KCFBPU0lUSU9OEMgBEhcKElBPU0lUSU9OX05PVF9GT1VORBDJARIZChRQT1NJVElPTl9TVEFURV9PUkRFUhDKARIfChpQT1NJVElPTl9TVEFURV9PUkRFUl9QUklDRRDLARIeChlQT1NJVElPTl9TVEFURV9PUkRFUl9TSVpFEMwBEh4KGVBPU0lUSU9OX1NUQVRFX09SREVSX1NJREUQzQESGAoTUE9TSVRJT05fU0laRV9MSU1JVBDOARIYChNQT1NJVElPTl9TVEFURV9QRVJQEM8BEiQKH1BPU0lUSU9OX1NUQVRFX09SREVSX0RFTEVHQVRJT04Q0AESCgoFUFJJQ0UQ0QESGwoWU0lHTkFUVVJFX1ZFUklGSUNBVElPThDZARIwCitTSUdOQVRVUkVfVkVSSUZJQ0FUSU9OX01BTEZPUk1FRF9QVUJMSUNfS0VZENoBEioKJVNJR05BVFVSRV9WRVJJRklDQVRJT05fSU5WQUxJRF9MRU5HVEgQ2wESCQoEUklTSxDgARI0Ci9SSVNLX0RFTEVHQVRJT05fTUZfVE9fQkVfTEVTU19USEFOX09SX0VRVUFMX01NRhDhARIkCh9SSVNLX09NRl9MRVNTX1RIQU5fT1JfRVFVQUxfSU1GEOIBEiQKH1JJU0tfT01GX0xFU1NfVEhBTl9PUl9FUVVBTF9DTUYQ4wESKgolUklTS19UUkFERV9PTUZfTEVTU19USEFOX09SX0VRVUFMX0NNRhDlARI1CjBSSVNLX1VOSEVBTFRIWV9NRl9BTkRfUE9OX0FGVEVSX0JFVFRFUl9PRl9CRUZPUkUQ5AESFAoPT1JERVJfRVhFQ1VUSU9OEPABEhoKFU9SREVSX0VYRUNVVElPTl9FTVBUWRDxARIhChxPUkRFUl9FWEVDVVRJT05fRklMTF9PUl9LSUxMEPIBEiMKHk9SREVSX0VYRUNVVElPTl9NSVNTSU5HX0xJTUlUUxDzARIiCh1PUkRFUl9FWEVDVVRJT05fTUlTU0lOR19QUklDRRD0ARIfChpPUkRFUl9FWEVDVVRJT05fU0laRV9MSU1JVBD1ARIgChtPUkRFUl9FWEVDVVRJT05fTElNSVRfUFJJQ0UQ9gESHgoZT1JERVJfUkVEVUNFX0lTX1BPU1RfT05MWRD3ARIfChpPUkRFUl9FWEVDVVRJT05fU0VMTF9QUklDRRD4ARIlCiBPUkRFUl9TSVpFX0VYQ0VFRFNfUE9TSVRJT05fU0laRRD5ARIoCiNBVE9NSUNTX1RSQURFU19DQU5OT1RfRk9MTE9XX1BMQUNFUxCAAhIwCitBVE9NSUNTX0NBTkNFTFNfQ0FOTk9UX0ZPTExPV19UUkFERVNfUExBQ0VTEIECEiYKIUFDVElPTl9QT1NJVElPTl9TSE9VTERfQkVfQ09WRVJFRBCRAhIZChRBQ1RJT05fSU5WQUxJRF9OT05DRRCSAhIpCiRBQ1RJT05fUFJPUE9TRURfUFJJQ0VfTVVTVF9CRV9ISUdIRVIQkwISHAoXQURNSU5fUk9MRV9JTlNVRkZJQ0lFTlQQlAISFAoPQURNSU5fTk9UX0ZPVU5EEJUCEikKJFVOSVFVRV9TVVBFUl9BRE1JTl9DQU5OT1RfQkVfUkVNT1ZFRBCWAhIfChpTVVBFUl9BRE1JTl9BTFJFQURZX0VYSVNUUxCXAhIUCg9OT1RfSU1QTEVNRU5URUQQ9AMSDAoHRHJvcHBlZBDnByoeCg5TcGVjaWFsQWNjb3VudBIMCghGZWVWYXVsdBAAYgZwcm90bzM");
14
14
  /**
15
15
  * Describes the message nord.FeeTierConfig.
16
16
  * Use `create(FeeTierConfigSchema)` to create a new message.
@@ -166,21 +166,26 @@ exports.Action_UpdateFeeTierSchema = (0, codegenv2_1.messageDesc)(exports.file_n
166
166
  * Use `create(Action_UpdateAccountsTierSchema)` to create a new message.
167
167
  */
168
168
  exports.Action_UpdateAccountsTierSchema = (0, codegenv2_1.messageDesc)(exports.file_nord, 9, 20);
169
+ /**
170
+ * Describes the message nord.Action.UpdateAcl.
171
+ * Use `create(Action_UpdateAclSchema)` to create a new message.
172
+ */
173
+ exports.Action_UpdateAclSchema = (0, codegenv2_1.messageDesc)(exports.file_nord, 9, 21);
169
174
  /**
170
175
  * Describes the message nord.Action.FreezeMarket.
171
176
  * Use `create(Action_FreezeMarketSchema)` to create a new message.
172
177
  */
173
- exports.Action_FreezeMarketSchema = (0, codegenv2_1.messageDesc)(exports.file_nord, 9, 21);
178
+ exports.Action_FreezeMarketSchema = (0, codegenv2_1.messageDesc)(exports.file_nord, 9, 22);
174
179
  /**
175
180
  * Describes the message nord.Action.UnfreezeMarket.
176
181
  * Use `create(Action_UnfreezeMarketSchema)` to create a new message.
177
182
  */
178
- exports.Action_UnfreezeMarketSchema = (0, codegenv2_1.messageDesc)(exports.file_nord, 9, 22);
183
+ exports.Action_UnfreezeMarketSchema = (0, codegenv2_1.messageDesc)(exports.file_nord, 9, 23);
179
184
  /**
180
185
  * Describes the message nord.Action.TakePosition.
181
186
  * Use `create(Action_TakePositionSchema)` to create a new message.
182
187
  */
183
- exports.Action_TakePositionSchema = (0, codegenv2_1.messageDesc)(exports.file_nord, 9, 23);
188
+ exports.Action_TakePositionSchema = (0, codegenv2_1.messageDesc)(exports.file_nord, 9, 24);
184
189
  /**
185
190
  * Describes the message nord.AtomicSubactionKind.
186
191
  * Use `create(AtomicSubactionKindSchema)` to create a new message.
@@ -331,16 +336,21 @@ exports.Receipt_FeeTierUpdatedSchema = (0, codegenv2_1.messageDesc)(exports.file
331
336
  * Use `create(Receipt_AccountsTierUpdatedSchema)` to create a new message.
332
337
  */
333
338
  exports.Receipt_AccountsTierUpdatedSchema = (0, codegenv2_1.messageDesc)(exports.file_nord, 12, 26);
339
+ /**
340
+ * Describes the message nord.Receipt.AclUpdated.
341
+ * Use `create(Receipt_AclUpdatedSchema)` to create a new message.
342
+ */
343
+ exports.Receipt_AclUpdatedSchema = (0, codegenv2_1.messageDesc)(exports.file_nord, 12, 27);
334
344
  /**
335
345
  * Describes the message nord.Receipt.AtomicSubactionResultKind.
336
346
  * Use `create(Receipt_AtomicSubactionResultKindSchema)` to create a new message.
337
347
  */
338
- exports.Receipt_AtomicSubactionResultKindSchema = (0, codegenv2_1.messageDesc)(exports.file_nord, 12, 27);
348
+ exports.Receipt_AtomicSubactionResultKindSchema = (0, codegenv2_1.messageDesc)(exports.file_nord, 12, 28);
339
349
  /**
340
350
  * Describes the message nord.Receipt.AtomicResult.
341
351
  * Use `create(Receipt_AtomicResultSchema)` to create a new message.
342
352
  */
343
- exports.Receipt_AtomicResultSchema = (0, codegenv2_1.messageDesc)(exports.file_nord, 12, 28);
353
+ exports.Receipt_AtomicResultSchema = (0, codegenv2_1.messageDesc)(exports.file_nord, 12, 29);
344
354
  /**
345
355
  * @generated from enum nord.Side
346
356
  */
@@ -1002,6 +1012,22 @@ var Error;
1002
1012
  * @generated from enum value: ACTION_PROPOSED_PRICE_MUST_BE_HIGHER = 275;
1003
1013
  */
1004
1014
  Error[Error["ACTION_PROPOSED_PRICE_MUST_BE_HIGHER"] = 275] = "ACTION_PROPOSED_PRICE_MUST_BE_HIGHER";
1015
+ /**
1016
+ * @generated from enum value: ADMIN_ROLE_INSUFFICIENT = 276;
1017
+ */
1018
+ Error[Error["ADMIN_ROLE_INSUFFICIENT"] = 276] = "ADMIN_ROLE_INSUFFICIENT";
1019
+ /**
1020
+ * @generated from enum value: ADMIN_NOT_FOUND = 277;
1021
+ */
1022
+ Error[Error["ADMIN_NOT_FOUND"] = 277] = "ADMIN_NOT_FOUND";
1023
+ /**
1024
+ * @generated from enum value: UNIQUE_SUPER_ADMIN_CANNOT_BE_REMOVED = 278;
1025
+ */
1026
+ Error[Error["UNIQUE_SUPER_ADMIN_CANNOT_BE_REMOVED"] = 278] = "UNIQUE_SUPER_ADMIN_CANNOT_BE_REMOVED";
1027
+ /**
1028
+ * @generated from enum value: SUPER_ADMIN_ALREADY_EXISTS = 279;
1029
+ */
1030
+ Error[Error["SUPER_ADMIN_ALREADY_EXISTS"] = 279] = "SUPER_ADMIN_ALREADY_EXISTS";
1005
1031
  /**
1006
1032
  * @generated from enum value: NOT_IMPLEMENTED = 500;
1007
1033
  */
@@ -1231,6 +1231,44 @@ export interface paths {
1231
1231
  patch?: never;
1232
1232
  trace?: never;
1233
1233
  };
1234
+ "/admin": {
1235
+ parameters: {
1236
+ query?: never;
1237
+ header?: never;
1238
+ path?: never;
1239
+ cookie?: never;
1240
+ };
1241
+ /** @description List of assigned admins. */
1242
+ get: {
1243
+ parameters: {
1244
+ query?: never;
1245
+ header?: never;
1246
+ path?: never;
1247
+ cookie?: never;
1248
+ };
1249
+ requestBody?: never;
1250
+ responses: {
1251
+ 200: {
1252
+ headers: {
1253
+ [name: string]: unknown;
1254
+ };
1255
+ content: {
1256
+ "application/json": [
1257
+ string,
1258
+ components["schemas"]["AclRole"]
1259
+ ][];
1260
+ };
1261
+ };
1262
+ };
1263
+ };
1264
+ put?: never;
1265
+ post?: never;
1266
+ delete?: never;
1267
+ options?: never;
1268
+ head?: never;
1269
+ patch?: never;
1270
+ trace?: never;
1271
+ };
1234
1272
  "/tv": {
1235
1273
  parameters: {
1236
1274
  query?: never;
@@ -2688,6 +2726,8 @@ export interface components {
2688
2726
  accountId: number;
2689
2727
  feeTier: components["schemas"]["FeeTierId"];
2690
2728
  };
2729
+ /** Format: uint32 */
2730
+ AclRole: number;
2691
2731
  /** @description TV config query response https://www.tradingview.com/charting-library-docs/latest/connecting_data/UDF/#data-feed-configuration-data */
2692
2732
  TvConfigResponse: {
2693
2733
  supported_resolutions: components["schemas"]["Resolution"][];
package/dist/index.d.ts CHANGED
@@ -1,5 +1,10 @@
1
1
  export * from "./types";
2
2
  export * from "./utils";
3
3
  export * from "./const";
4
- export * from "./nord";
4
+ export * from "./error";
5
5
  export * from "./websocket/index";
6
+ export * from "./client/Nord";
7
+ export * from "./client/NordUser";
8
+ export * from "./client/NordAdmin";
9
+ export * as proto from "./gen/nord_pb";
10
+ export * as openapi from "./gen/openapi";
package/dist/index.js CHANGED
@@ -10,12 +10,40 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
10
10
  if (k2 === undefined) k2 = k;
11
11
  o[k2] = m[k];
12
12
  }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
13
18
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
19
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
20
  };
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
16
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.openapi = exports.proto = void 0;
17
40
  __exportStar(require("./types"), exports);
18
41
  __exportStar(require("./utils"), exports);
19
42
  __exportStar(require("./const"), exports);
20
- __exportStar(require("./nord"), exports);
43
+ __exportStar(require("./error"), exports);
21
44
  __exportStar(require("./websocket/index"), exports);
45
+ __exportStar(require("./client/Nord"), exports);
46
+ __exportStar(require("./client/NordUser"), exports);
47
+ __exportStar(require("./client/NordAdmin"), exports);
48
+ exports.proto = __importStar(require("./gen/nord_pb"));
49
+ exports.openapi = __importStar(require("./gen/openapi"));
@@ -101,7 +101,7 @@ export declare class Nord {
101
101
  * @returns Initialized Nord client
102
102
  * @throws {NordError} If initialization fails
103
103
  */
104
- static initNord({ app, solanaUrl, webServerUrl, }: Readonly<NordConfig>): Promise<Nord>;
104
+ static initNord({ app, solanaUrl, webServerUrl, protonUrl, }: Readonly<NordConfig>): Promise<Nord>;
105
105
  /**
106
106
  * Initialize the Nord client
107
107
  * @private
@@ -182,13 +182,13 @@ class Nord {
182
182
  * @returns Initialized Nord client
183
183
  * @throws {NordError} If initialization fails
184
184
  */
185
- static async initNord({ app, solanaUrl, webServerUrl, }) {
185
+ static async initNord({ app, solanaUrl, webServerUrl, protonUrl, }) {
186
186
  // TODO: we should parametrize the connectionn not have it done here.
187
187
  // this is a dogshit api, only here to be compatible with the shitty
188
188
  // vibecoded code and not break zero one team's workflow.
189
189
  const connection = new web3_js_1.Connection(solanaUrl, { commitment: "confirmed" });
190
190
  const protonClient = await proton_1.ProtonClient.init({
191
- protonUrl: webServerUrl,
191
+ protonUrl: protonUrl ?? webServerUrl,
192
192
  app: new web3_js_1.PublicKey(app),
193
193
  solConn: connection,
194
194
  });
@@ -2,6 +2,11 @@ import { PublicKey } from "@solana/web3.js";
2
2
  import * as proto from "../../gen/nord_pb";
3
3
  import { Nord } from "./Nord";
4
4
  import { FeeTierConfig } from "../../gen/nord_pb";
5
+ export declare enum AclRole {
6
+ FEE_MANAGER = 1,
7
+ MARKET_MANAGER = 2,
8
+ ADMIN = -2147483648
9
+ }
5
10
  /**
6
11
  * Parameters required to register a new token via the admin API.
7
12
  */
@@ -70,11 +75,13 @@ export interface UpdateFeeTierParams {
70
75
  */
71
76
  export declare class NordAdmin {
72
77
  private readonly nord;
78
+ private readonly admin;
73
79
  private readonly signFn;
74
80
  private constructor();
75
81
  /** Create a new admin client.
76
82
  *
77
83
  * @param nord - Nord instance
84
+ * @param admin - The user that will be signing actions.
78
85
  * @param signFn - Function to sign messages with the admin's wallet.
79
86
  *
80
87
  * `signFn` must sign the _hex-encoded_ message, not the raw message itself, for
@@ -94,8 +101,9 @@ export declare class NordAdmin {
94
101
  *
95
102
  * where `nacl` is the tweetnacl library.
96
103
  */
97
- static new({ nord, signFn, }: Readonly<{
104
+ static new({ nord, admin, signFn, }: Readonly<{
98
105
  nord: Nord;
106
+ admin: PublicKey;
99
107
  signFn: (m: Uint8Array) => Promise<Uint8Array>;
100
108
  }>): NordAdmin;
101
109
  /**
@@ -105,6 +113,21 @@ export declare class NordAdmin {
105
113
  * @throws {NordError} If signing or submission fails
106
114
  */
107
115
  private submitAction;
116
+ /** Set acl permissions for a given user.
117
+ *
118
+ * If all roles are removed, the user is removed from the acl.
119
+ *
120
+ * @param target - User to update.
121
+ * @param addRoles - Roles to add to the user.
122
+ * @param removeRoles - Reles to remove from the user.
123
+ */
124
+ updateAcl({ target, addRoles, removeRoles, }: Readonly<{
125
+ target: PublicKey;
126
+ addRoles: AclRole[];
127
+ removeRoles: AclRole[];
128
+ }>): Promise<{
129
+ actionId: bigint;
130
+ } & proto.Receipt_AclUpdated>;
108
131
  /**
109
132
  * Register a new token that can be listed on Nord.
110
133
  *
@@ -33,23 +33,34 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.NordAdmin = void 0;
36
+ exports.NordAdmin = exports.AclRole = void 0;
37
37
  const protobuf_1 = require("@bufbuild/protobuf");
38
38
  const proto = __importStar(require("../../gen/nord_pb"));
39
39
  const utils_1 = require("../../utils");
40
40
  const actions_1 = require("../api/actions");
41
41
  const NordError_1 = require("../utils/NordError");
42
+ // NOTE: keep in sync with `acl.rs`.
43
+ // NOTE: don't forget `number` as int is internally a u32.
44
+ var AclRole;
45
+ (function (AclRole) {
46
+ AclRole[AclRole["FEE_MANAGER"] = 1] = "FEE_MANAGER";
47
+ AclRole[AclRole["MARKET_MANAGER"] = 2] = "MARKET_MANAGER";
48
+ // TODO: unsure about this?
49
+ AclRole[AclRole["ADMIN"] = -2147483648] = "ADMIN";
50
+ })(AclRole || (exports.AclRole = AclRole = {}));
42
51
  /**
43
52
  * Administrative client capable of submitting privileged configuration actions.
44
53
  */
45
54
  class NordAdmin {
46
- constructor({ nord, signFn, }) {
55
+ constructor({ nord, admin, signFn, }) {
47
56
  this.nord = nord;
57
+ this.admin = admin;
48
58
  this.signFn = signFn;
49
59
  }
50
60
  /** Create a new admin client.
51
61
  *
52
62
  * @param nord - Nord instance
63
+ * @param admin - The user that will be signing actions.
53
64
  * @param signFn - Function to sign messages with the admin's wallet.
54
65
  *
55
66
  * `signFn` must sign the _hex-encoded_ message, not the raw message itself, for
@@ -69,9 +80,10 @@ class NordAdmin {
69
80
  *
70
81
  * where `nacl` is the tweetnacl library.
71
82
  */
72
- static new({ nord, signFn, }) {
83
+ static new({ nord, admin, signFn, }) {
73
84
  return new NordAdmin({
74
85
  nord,
86
+ admin,
75
87
  signFn,
76
88
  });
77
89
  }
@@ -92,6 +104,39 @@ class NordAdmin {
92
104
  return Uint8Array.from([...xs, ...signature]);
93
105
  }, action);
94
106
  }
107
+ /** Set acl permissions for a given user.
108
+ *
109
+ * If all roles are removed, the user is removed from the acl.
110
+ *
111
+ * @param target - User to update.
112
+ * @param addRoles - Roles to add to the user.
113
+ * @param removeRoles - Reles to remove from the user.
114
+ */
115
+ async updateAcl({ target, addRoles, removeRoles, }) {
116
+ const allRoles = addRoles.concat(removeRoles);
117
+ if (allRoles.length !== new Set(allRoles).size) {
118
+ throw new NordError_1.NordError("duplicate roles in acl update; must be unique");
119
+ }
120
+ let mask = 0;
121
+ let values = 0;
122
+ for (const role of allRoles) {
123
+ mask |= role;
124
+ }
125
+ for (const role of addRoles) {
126
+ values |= role;
127
+ }
128
+ const receipt = await this.submitAction({
129
+ case: "updateAcl",
130
+ value: (0, protobuf_1.create)(proto.Action_UpdateAclSchema, {
131
+ aclPubkey: this.admin.toBytes(),
132
+ targetPubkey: target.toBytes(),
133
+ rolesValue: values,
134
+ rolesMask: mask,
135
+ }),
136
+ });
137
+ (0, actions_1.expectReceiptKind)(receipt, "aclUpdated", "update acl");
138
+ return { ...receipt.kind.value, actionId: receipt.actionId };
139
+ }
95
140
  /**
96
141
  * Register a new token that can be listed on Nord.
97
142
  *
@@ -103,6 +148,7 @@ class NordAdmin {
103
148
  const receipt = await this.submitAction({
104
149
  case: "createToken",
105
150
  value: (0, protobuf_1.create)(proto.Action_CreateTokenSchema, {
151
+ aclPubkey: this.admin.toBytes(),
106
152
  tokenDecimals,
107
153
  weightBps,
108
154
  viewSymbol,
@@ -124,6 +170,7 @@ class NordAdmin {
124
170
  const receipt = await this.submitAction({
125
171
  case: "createMarket",
126
172
  value: (0, protobuf_1.create)(proto.Action_CreateMarketSchema, {
173
+ aclPubkey: this.admin.toBytes(),
127
174
  sizeDecimals: params.sizeDecimals,
128
175
  priceDecimals: params.priceDecimals,
129
176
  imfBps: params.imfBps,
@@ -165,6 +212,7 @@ class NordAdmin {
165
212
  const receipt = await this.submitAction({
166
213
  case: "pythSetWormholeGuardians",
167
214
  value: (0, protobuf_1.create)(proto.Action_PythSetWormholeGuardiansSchema, {
215
+ aclPubkey: this.admin.toBytes(),
168
216
  guardianSetIndex: params.guardianSetIndex,
169
217
  addresses,
170
218
  }),
@@ -199,6 +247,7 @@ class NordAdmin {
199
247
  const receipt = await this.submitAction({
200
248
  case: "pythSetSymbolFeed",
201
249
  value: (0, protobuf_1.create)(proto.Action_PythSetSymbolFeedSchema, {
250
+ aclPubkey: this.admin.toBytes(),
202
251
  oracleSymbol: params.oracleSymbol,
203
252
  priceFeedId,
204
253
  }),
@@ -215,7 +264,9 @@ class NordAdmin {
215
264
  async pause() {
216
265
  const receipt = await this.submitAction({
217
266
  case: "pause",
218
- value: (0, protobuf_1.create)(proto.Action_PauseSchema, {}),
267
+ value: (0, protobuf_1.create)(proto.Action_PauseSchema, {
268
+ aclPubkey: this.admin.toBytes(),
269
+ }),
219
270
  });
220
271
  (0, actions_1.expectReceiptKind)(receipt, "paused", "pause");
221
272
  return { actionId: receipt.actionId };
@@ -229,7 +280,9 @@ class NordAdmin {
229
280
  async unpause() {
230
281
  const receipt = await this.submitAction({
231
282
  case: "unpause",
232
- value: (0, protobuf_1.create)(proto.Action_UnpauseSchema, {}),
283
+ value: (0, protobuf_1.create)(proto.Action_UnpauseSchema, {
284
+ aclPubkey: this.admin.toBytes(),
285
+ }),
233
286
  });
234
287
  (0, actions_1.expectReceiptKind)(receipt, "unpaused", "unpause");
235
288
  return { actionId: receipt.actionId };
@@ -246,6 +299,7 @@ class NordAdmin {
246
299
  case: "freezeMarket",
247
300
  value: (0, protobuf_1.create)(proto.Action_FreezeMarketSchema, {
248
301
  marketId: params.marketId,
302
+ aclPubkey: this.admin.toBytes(),
249
303
  }),
250
304
  });
251
305
  (0, actions_1.expectReceiptKind)(receipt, "marketFreezeUpdated", "freeze market");
@@ -263,6 +317,7 @@ class NordAdmin {
263
317
  case: "unfreezeMarket",
264
318
  value: (0, protobuf_1.create)(proto.Action_UnfreezeMarketSchema, {
265
319
  marketId: params.marketId,
320
+ aclPubkey: this.admin.toBytes(),
266
321
  }),
267
322
  });
268
323
  (0, actions_1.expectReceiptKind)(receipt, "marketFreezeUpdated", "unfreeze market");
@@ -283,6 +338,7 @@ class NordAdmin {
283
338
  const receipt = await this.submitAction({
284
339
  case: "addFeeTier",
285
340
  value: (0, protobuf_1.create)(proto.Action_AddFeeTierSchema, {
341
+ aclPubkey: this.admin.toBytes(),
286
342
  config: (0, protobuf_1.create)(proto.FeeTierConfigSchema, params.config),
287
343
  }),
288
344
  });
@@ -303,6 +359,7 @@ class NordAdmin {
303
359
  const receipt = await this.submitAction({
304
360
  case: "updateFeeTier",
305
361
  value: (0, protobuf_1.create)(proto.Action_UpdateFeeTierSchema, {
362
+ aclPubkey: this.admin.toBytes(),
306
363
  id: params.tierId,
307
364
  config: (0, protobuf_1.create)(proto.FeeTierConfigSchema, params.config),
308
365
  }),
@@ -326,6 +383,7 @@ class NordAdmin {
326
383
  const receipt = await this.submitAction({
327
384
  case: "updateAccountsTier",
328
385
  value: (0, protobuf_1.create)(proto.Action_UpdateAccountsTierSchema, {
386
+ aclPubkey: this.admin.toBytes(),
329
387
  accounts,
330
388
  tierId,
331
389
  }),
@@ -1,6 +1,6 @@
1
1
  export { Nord } from "./client/Nord";
2
2
  export { NordUser } from "./client/NordUser";
3
- export { NordAdmin } from "./client/NordAdmin";
3
+ export { NordAdmin, AclRole } from "./client/NordAdmin";
4
4
  export { NordClient } from "./client/NordClient";
5
5
  export type { NordClientParams } from "./client/NordClient";
6
6
  export type { CreateTokenParams, CreateMarketParams, PythSetWormholeGuardiansParams, PythSetSymbolFeedParams, FreezeMarketParams, UnfreezeMarketParams, } from "./client/NordAdmin";
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.NordError = exports.NordClient = exports.NordAdmin = exports.NordUser = exports.Nord = void 0;
17
+ exports.NordError = exports.NordClient = exports.AclRole = exports.NordAdmin = exports.NordUser = exports.Nord = void 0;
18
18
  // Export main client classes
19
19
  var Nord_1 = require("./client/Nord");
20
20
  Object.defineProperty(exports, "Nord", { enumerable: true, get: function () { return Nord_1.Nord; } });
@@ -22,6 +22,7 @@ var NordUser_1 = require("./client/NordUser");
22
22
  Object.defineProperty(exports, "NordUser", { enumerable: true, get: function () { return NordUser_1.NordUser; } });
23
23
  var NordAdmin_1 = require("./client/NordAdmin");
24
24
  Object.defineProperty(exports, "NordAdmin", { enumerable: true, get: function () { return NordAdmin_1.NordAdmin; } });
25
+ Object.defineProperty(exports, "AclRole", { enumerable: true, get: function () { return NordAdmin_1.AclRole; } });
25
26
  var NordClient_1 = require("./client/NordClient");
26
27
  Object.defineProperty(exports, "NordClient", { enumerable: true, get: function () { return NordClient_1.NordClient; } });
27
28
  // Export utility classes