@shipload/sdk 1.0.0-next.64 → 1.0.0-next.66

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 (79) hide show
  1. package/lib/shipload.d.ts +754 -316
  2. package/lib/shipload.js +2650 -1336
  3. package/lib/shipload.js.map +1 -1
  4. package/lib/shipload.m.js +2564 -1308
  5. package/lib/shipload.m.js.map +1 -1
  6. package/lib/testing.d.ts +219 -145
  7. package/lib/testing.js +910 -557
  8. package/lib/testing.js.map +1 -1
  9. package/lib/testing.m.js +910 -557
  10. package/lib/testing.m.js.map +1 -1
  11. package/package.json +1 -1
  12. package/src/capabilities/crafting.test.ts +51 -6
  13. package/src/capabilities/crafting.ts +19 -4
  14. package/src/capabilities/gathering.ts +2 -2
  15. package/src/capabilities/storage.test.ts +26 -0
  16. package/src/capabilities/storage.ts +6 -6
  17. package/src/contracts/fund.ts +110 -5
  18. package/src/contracts/platform.ts +10 -1
  19. package/src/contracts/server.ts +498 -331
  20. package/src/data/charters.json +325 -127
  21. package/src/data/entities.json +24 -24
  22. package/src/data/items.json +114 -114
  23. package/src/data/kind-registry.json +3 -3
  24. package/src/data/kind-registry.ts +5 -0
  25. package/src/data/recipes.json +56 -95
  26. package/src/derivation/build-methods.test.ts +59 -1
  27. package/src/derivation/build-methods.ts +2 -0
  28. package/src/derivation/capabilities.ts +7 -7
  29. package/src/derivation/strata.ts +5 -3
  30. package/src/derivation/tiers.ts +5 -5
  31. package/src/entity/hydrate.test.ts +156 -0
  32. package/src/entity/hydrate.ts +86 -0
  33. package/src/errors.ts +9 -0
  34. package/src/format.ts +15 -13
  35. package/src/index-module.ts +33 -5
  36. package/src/influence/ballot.test.ts +103 -0
  37. package/src/influence/ballot.ts +98 -0
  38. package/src/influence/charter-metadata.test.ts +136 -0
  39. package/src/influence/charter-metadata.ts +236 -0
  40. package/src/influence/charters.test.ts +51 -65
  41. package/src/influence/charters.ts +70 -40
  42. package/src/influence/civic.test.ts +278 -0
  43. package/src/influence/civic.ts +269 -0
  44. package/src/influence/constants.ts +30 -9
  45. package/src/influence/decomp.ts +15 -15
  46. package/src/influence/duration.ts +42 -6
  47. package/src/influence/index.ts +49 -6
  48. package/src/influence/influence.test.ts +76 -9
  49. package/src/influence/valuation.ts +17 -17
  50. package/src/managers/actions.ts +65 -37
  51. package/src/managers/base.ts +4 -0
  52. package/src/managers/context.ts +3 -1
  53. package/src/managers/index.ts +5 -2
  54. package/src/managers/influence.test.ts +18 -20
  55. package/src/managers/influence.ts +162 -84
  56. package/src/managers/jobs.test.ts +2 -2
  57. package/src/managers/jobs.ts +4 -4
  58. package/src/nft/description.ts +10 -11
  59. package/src/planner/index.ts +54 -0
  60. package/src/planner/planner.test.ts +127 -2
  61. package/src/resolution/display-name.ts +1 -1
  62. package/src/scheduling/availability.test.ts +113 -0
  63. package/src/scheduling/availability.ts +48 -8
  64. package/src/scheduling/jobs.ts +1 -1
  65. package/src/scheduling/projection.ts +2 -16
  66. package/src/scheduling/task-cargo.test.ts +62 -1
  67. package/src/scheduling/task-cargo.ts +25 -10
  68. package/src/scheduling/task-effects.test.ts +35 -0
  69. package/src/scheduling/task-effects.ts +34 -0
  70. package/src/scheduling/unwrap.test.ts +3 -3
  71. package/src/scheduling/unwrap.ts +3 -3
  72. package/src/shipload.ts +23 -4
  73. package/src/travel/reach.test.ts +86 -0
  74. package/src/travel/reach.ts +23 -10
  75. package/src/travel/route-build.test.ts +63 -0
  76. package/src/travel/route-build.ts +60 -0
  77. package/src/travel/travel.ts +2 -1
  78. package/src/types.ts +6 -2
  79. package/src/utils/hash.ts +18 -2
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@shipload/sdk",
3
3
  "description": "SDKs for Shipload",
4
- "version": "1.0.0-next.64",
4
+ "version": "1.0.0-next.66",
5
5
  "homepage": "https://github.com/shipload/toolkit/tree/master/packages/sdk",
6
6
  "repository": {
7
7
  "type": "git",
@@ -1,11 +1,25 @@
1
+ import {UInt16, UInt32} from '@wharfkit/antelope'
1
2
  import {describe, expect, test} from 'bun:test'
3
+ import type {ServerContract} from '../contracts'
4
+ import {computeInputMass} from '../derivation/crafting'
5
+ import {getRecipe} from '../data/recipes-runtime'
2
6
  import {
3
7
  calc_craft_energy,
4
8
  calcClusterIntake,
5
9
  calcClustercraftDuration,
10
+ craftEnergyCost,
6
11
  INTAKE_RATE,
7
12
  } from './crafting'
8
13
 
14
+ function crafterLane(drain: number): ServerContract.Types.crafter_lane {
15
+ return {
16
+ slot_index: UInt16.from(0),
17
+ speed: UInt16.from(1000),
18
+ drain: UInt32.from(drain),
19
+ output_pct: UInt16.from(100),
20
+ } as unknown as ServerContract.Types.crafter_lane
21
+ }
22
+
9
23
  test('calc_craft_energy does not clamp above the old uint16 ceiling', () => {
10
24
  const energy = calc_craft_energy(30, 400_000_000)
11
25
  expect(Number(energy)).toBeGreaterThan(65535)
@@ -13,10 +27,10 @@ test('calc_craft_energy does not clamp above the old uint16 ceiling', () => {
13
27
 
14
28
  describe('calcClusterIntake', () => {
15
29
  test('is floor(sourcedMass / INTAKE_RATE)', () => {
16
- expect(INTAKE_RATE).toBe(36000)
17
- expect(calcClusterIntake(36000)).toBe(1)
18
- expect(calcClusterIntake(35999)).toBe(0)
19
- expect(calcClusterIntake(19_680_000)).toBe(546)
30
+ expect(INTAKE_RATE).toBe(360)
31
+ expect(calcClusterIntake(360)).toBe(1)
32
+ expect(calcClusterIntake(359)).toBe(0)
33
+ expect(calcClusterIntake(196_800)).toBe(546)
20
34
  })
21
35
 
22
36
  test('zero sourced mass (all own-hold) charges no intake', () => {
@@ -28,8 +42,39 @@ describe('calcClustercraftDuration', () => {
28
42
  test('adds intake to the base craft duration', () => {
29
43
  // calc_craft_duration = floor(inputMass/speed) + 1
30
44
  const speed = 1000
31
- const inputMass = 100_000 // base craft = 100 + 1 = 101s
32
- const sourcedMass = 72_000 // intake = 2s
45
+ const inputMass = 1000 // base craft = 100 + 1 = 101s
46
+ const sourcedMass = 720 // intake = 2s
33
47
  expect(calcClustercraftDuration(speed, inputMass, sourcedMass).toNumber()).toBe(103)
34
48
  })
35
49
  })
50
+
51
+ describe('craftEnergyCost', () => {
52
+ const OUTPUT_ITEM_ID = 10001
53
+ const DRAIN = 100_000
54
+
55
+ test('matches calc_craft_energy against the recipe input mass times units', () => {
56
+ const recipe = getRecipe(OUTPUT_ITEM_ID)!
57
+ const lane = crafterLane(DRAIN)
58
+ const units = 5
59
+
60
+ const cost = craftEnergyCost(lane, recipe, units)
61
+
62
+ const expected = Number(calc_craft_energy(DRAIN, computeInputMass(OUTPUT_ITEM_ID) * units))
63
+ expect(cost).toBe(expected)
64
+ })
65
+
66
+ test('is 0 for non-positive units', () => {
67
+ const recipe = getRecipe(OUTPUT_ITEM_ID)!
68
+ const lane = crafterLane(DRAIN)
69
+ expect(craftEnergyCost(lane, recipe, 0)).toBe(0)
70
+ expect(craftEnergyCost(lane, recipe, -1)).toBe(0)
71
+ })
72
+
73
+ test('scales with unit count', () => {
74
+ const recipe = getRecipe(OUTPUT_ITEM_ID)!
75
+ const lane = crafterLane(DRAIN)
76
+ const one = craftEnergyCost(lane, recipe, 1)
77
+ const ten = craftEnergyCost(lane, recipe, 10)
78
+ expect(ten).toBeGreaterThan(one)
79
+ })
80
+ })
@@ -1,6 +1,9 @@
1
1
  import {UInt32} from '@wharfkit/antelope'
2
- import {CRAFT_ENERGY_DIVISOR} from '../types'
2
+ import {CRAFT_ENERGY_DIVISOR, MASS_STAT_SCALE} from '../types'
3
3
  import type {CrafterStats, EntityCapabilities} from '../types/capabilities'
4
+ import type {ServerContract} from '../contracts'
5
+ import {getItem} from '../data/catalog'
6
+ import type {Recipe} from '../data/recipes-runtime'
4
7
 
5
8
  export interface CrafterCapability {
6
9
  crafter: CrafterStats
@@ -11,12 +14,11 @@ export function capsHasCrafter(caps: EntityCapabilities): boolean {
11
14
  }
12
15
 
13
16
  export function calc_craft_duration(speed: number, totalInputMass: number): UInt32 {
14
- const duration = Math.floor(totalInputMass / speed)
17
+ const duration = Math.floor((totalInputMass * MASS_STAT_SCALE) / speed)
15
18
  return UInt32.from(duration + 1)
16
19
  }
17
20
 
18
- // Mirrors contract config.hpp INTAKE_RATE (provisional; a numbers pass will retune it).
19
- export const INTAKE_RATE = 36000
21
+ export const INTAKE_RATE = 360
20
22
 
21
23
  // Mirrors calc_cluster_intake: whole seconds of intake for cargo sourced off other cluster members.
22
24
  export function calcClusterIntake(sourcedMass: number): number {
@@ -39,6 +41,19 @@ export function calc_craft_energy(drain: number, totalInputMass: number): UInt32
39
41
  return UInt32.from(Math.min(Math.max(raw + 1, 1000), 4294967295))
40
42
  }
41
43
 
44
+ export function craftEnergyCost(
45
+ lane: ServerContract.Types.crafter_lane,
46
+ recipe: Recipe,
47
+ units: number
48
+ ): number {
49
+ if (units <= 0) return 0
50
+ const inputMassPerUnit = recipe.inputs.reduce(
51
+ (sum, input) => sum + getItem(input.itemId).mass * input.quantity,
52
+ 0
53
+ )
54
+ return Number(calc_craft_energy(lane.drain.toNumber(), inputMassPerUnit * units))
55
+ }
56
+
42
57
  // Craft-identical today; forked so build balance can diverge from craft without touching it.
43
58
  export function calc_build_duration(speed: number, totalInputMass: number): UInt32 {
44
59
  return calc_craft_duration(speed, totalInputMass)
@@ -1,6 +1,6 @@
1
1
  import {UInt32} from '@wharfkit/antelope'
2
2
  import type {GathererStats} from '../types/capabilities'
3
- import {PRECISION} from '../types'
3
+ import {MASS_STAT_SCALE, PRECISION} from '../types'
4
4
 
5
5
  const GATHER_TIME_SCALE = 100
6
6
  export const GATHER_MASS_DIVISOR = 228
@@ -17,7 +17,7 @@ function gather_duration_raw(
17
17
 
18
18
  if (yieldValue === 0 || richness === 0) return 0
19
19
 
20
- const massFactor = itemMass / GATHER_MASS_DIVISOR
20
+ const massFactor = (itemMass * MASS_STAT_SCALE) / GATHER_MASS_DIVISOR
21
21
  const depthPenalty = 1 + stratum / DEPTH_PENALTY_DIVISOR
22
22
  const richnessMul = richness / 1000
23
23
  return (quantity * massFactor * GATHER_TIME_SCALE * depthPenalty) / (yieldValue * richnessMul)
@@ -0,0 +1,26 @@
1
+ import {expect, test} from 'bun:test'
2
+ import {UInt32, UInt64} from '@wharfkit/antelope'
3
+ import {hasSpaceForMass, isFull, isFullFromMass} from './storage'
4
+
5
+ test('hasSpaceForMass accepts raw numbers', () => {
6
+ expect(hasSpaceForMass(100, 40, 50)).toBe(true)
7
+ expect(hasSpaceForMass(100, 60, 50)).toBe(false)
8
+ expect(hasSpaceForMass(100, 50, 50)).toBe(true)
9
+ })
10
+
11
+ test('hasSpaceForMass accepts wrapped values', () => {
12
+ expect(hasSpaceForMass(UInt64.from(100), UInt64.from(40), UInt64.from(50))).toBe(true)
13
+ expect(hasSpaceForMass(UInt64.from(100), UInt32.from(60), UInt32.from(50))).toBe(false)
14
+ })
15
+
16
+ test('isFullFromMass accepts raw numbers', () => {
17
+ expect(isFullFromMass(100, 100)).toBe(true)
18
+ expect(isFullFromMass(100, 101)).toBe(true)
19
+ expect(isFullFromMass(100, 99)).toBe(false)
20
+ })
21
+
22
+ test('isFull accepts raw numbers on the entity', () => {
23
+ expect(isFull({capacity: 100, cargomass: 100})).toBe(true)
24
+ expect(isFull({capacity: 100, cargomass: 99})).toBe(false)
25
+ expect(isFull({capacity: UInt32.from(100), cargomass: UInt32.from(120)})).toBe(true)
26
+ })
@@ -1,4 +1,4 @@
1
- import {UInt16, UInt32, UInt64, type UInt64Type} from '@wharfkit/antelope'
1
+ import {UInt16, UInt32, UInt64, type UInt32Type, type UInt64Type} from '@wharfkit/antelope'
2
2
  import {ServerContract} from '../contracts'
3
3
  import type {StorageCapability} from '../types/capabilities'
4
4
  import {getItem} from '../data/catalog'
@@ -9,11 +9,11 @@ export interface HasCargo {
9
9
  }
10
10
 
11
11
  export interface HasCapacity {
12
- capacity: UInt32
12
+ capacity: UInt32Type
13
13
  }
14
14
 
15
15
  export interface HasCargomass {
16
- cargomass: UInt32
16
+ cargomass: UInt32Type
17
17
  }
18
18
 
19
19
  interface MassInput {
@@ -75,15 +75,15 @@ export function hasSpaceForMass(
75
75
  currentMass: UInt64Type,
76
76
  additionalMass: UInt64Type
77
77
  ): boolean {
78
- return UInt64.from(currentMass).adding(additionalMass).lte(capacity)
78
+ return UInt64.from(currentMass).adding(additionalMass).lte(UInt64.from(capacity))
79
79
  }
80
80
 
81
81
  export function isFull(entity: HasCapacity & HasCargomass): boolean {
82
- return UInt64.from(entity.cargomass).gte(entity.capacity)
82
+ return UInt64.from(entity.cargomass).gte(UInt64.from(entity.capacity))
83
83
  }
84
84
 
85
85
  export function isFullFromMass(capacity: UInt64Type, cargoMass: UInt64Type): boolean {
86
- return UInt64.from(cargoMass).gte(capacity)
86
+ return UInt64.from(cargoMass).gte(UInt64.from(capacity))
87
87
  }
88
88
 
89
89
  export interface CargoStack {
@@ -10,17 +10,24 @@ import {ABI, Asset, Blob, Name, Struct, UInt16, UInt32, UInt64} from '@wharfkit/
10
10
  import type {ActionOptions, ContractArgs, PartialBy, Table} from '@wharfkit/contract'
11
11
  import {Contract as BaseContract} from '@wharfkit/contract'
12
12
  export const abiBlob = Blob.from(
13
- 'DmVvc2lvOjphYmkvMS4yAA4LYWNjcnVlZF9yb3cAAgdhY2NvdW50BG5hbWUHYmFsYW5jZQVhc3NldAliZW5lZl9yb3cAAgdhY2NvdW50BG5hbWUDYnBzBnVpbnQxNgtiZW5lZmljaWFyeQACB2FjY291bnQEbmFtZQNicHMGdWludDE2BWNsYWltAAETYmVuZWZpY2lhcnlfYWNjb3VudARuYW1lCmN1cnNvcl9yb3cAAQ1uZXh0X2Fzc2V0X2lkBnVpbnQ2NAhsb3RzX3JvdwADCGFzc2V0X2lkBnVpbnQ2NAVncmFkZQRuYW1lCmF1Y3Rpb25faWQGdWludDY0CXJlc2N1ZW5mdAADCWFzc2V0X2lkcwh1aW50NjRbXQJ0bwRuYW1lBG1lbW8Gc3RyaW5nCHNldGJlbmVmAAEIcmVnaXN0cnkNYmVuZWZpY2lhcnlbXQlzZXRtYXJrZXQAAgZtYXJrZXQEbmFtZRFtYWtlcl9tYXJrZXRwbGFjZQRuYW1lCHNldHRlcm1zAAMFZ3JhZGUEbmFtZQxzdGFydGluZ19iaWQFYXNzZXQIZHVyYXRpb24GdWludDMyDHNldHRpbmdzX3JvdwAEBm1hcmtldARuYW1lDnRva2VuX2NvbnRyYWN0BG5hbWUMdG9rZW5fc3ltYm9sBnN5bWJvbBFtYWtlcl9tYXJrZXRwbGFjZQRuYW1lCHNldHRva2VuAAIOdG9rZW5fY29udHJhY3QEbmFtZQx0b2tlbl9zeW1ib2wGc3ltYm9sBHRlbmQAAQhtYXhfbG90cwZ1aW50MzIJdGVybXNfcm93AAMFZ3JhZGUEbmFtZQxzdGFydGluZ19iaWQFYXNzZXQIZHVyYXRpb24GdWludDMyBwAAAAAA6UxEBWNsYWltAAAAyGsqjbC6CXJlc2N1ZW5mdAAAAABLTXWywghzZXRiZW5lZgAAAMgKXiOzwglzZXRtYXJrZXQAAAAAWF6Vs8IIc2V0dGVybXMAAAAAU0Gas8IIc2V0dG9rZW4AAAAAAACQpsoEdGVuZAAGAAAAICl9ETIDaTY0AAALYWNjcnVlZF9yb3cAAAAA4KWmOgNpNjQAAAliZW5lZl9yb3cAAAAAXIqvRgNpNjQAAApjdXJzb3Jfcm93AAAAAACAM40DaTY0AAAIbG90c19yb3cAAACYTZezwgNpNjQAAAxzZXR0aW5nc19yb3cAAAAAACyvygNpNjQAAAl0ZXJtc19yb3cAAAAAAA=='
13
+ 'DmVvc2lvOjphYmkvMS4yABkLYWNjcnVlZF9yb3cAAg50b2tlbl9jb250cmFjdARuYW1lB2JhbGFuY2UFYXNzZXQIYWRkdG9rZW4AAg50b2tlbl9jb250cmFjdARuYW1lDHRva2VuX3N5bWJvbAZzeW1ib2wJYmVuZWZfcm93AAIHYWNjb3VudARuYW1lA2JwcwZ1aW50MTYLYmVuZWZpY2lhcnkAAgdhY2NvdW50BG5hbWUDYnBzBnVpbnQxNgVjbGFpbQABE2JlbmVmaWNpYXJ5X2FjY291bnQEbmFtZQdjb2xsZWN0AAALY29sbGVjdGZlZXMAAApjdXJzb3Jfcm93AAENbmV4dF9hc3NldF9pZAZ1aW50NjQIZGVsdG9rZW4AAQ50b2tlbl9jb250cmFjdARuYW1lB2dldGxvdHMAAgtsb3dlcl9ib3VuZAZ1aW50NjQIbWF4X2xvdHMGdWludDMyC2dldHRlbmRhYmxlAAEIbWF4X2xvdHMGdWludDMyCGxvdF9pbmZvAAYIYXNzZXRfaWQGdWludDY0BWdyYWRlBG5hbWUKYXVjdGlvbl9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyBXN0YXRzBnVpbnQ2NAtsb3RzX3Jlc3VsdAACBGxvdHMKbG90X2luZm9bXQRuZXh0BnVpbnQ2NAhsb3RzX3JvdwADCGFzc2V0X2lkBnVpbnQ2NAVncmFkZQRuYW1lCmF1Y3Rpb25faWQGdWludDY0CXJlc2N1ZW5mdAADCWFzc2V0X2lkcwh1aW50NjRbXQJ0bwRuYW1lBG1lbW8Gc3RyaW5nCHNldGJlbmVmAAEIcmVnaXN0cnkNYmVuZWZpY2lhcnlbXQlzZXRtYXJrZXQAAgZtYXJrZXQEbmFtZRFtYWtlcl9tYXJrZXRwbGFjZQRuYW1lCHNldHRlcm1zAAMFZ3JhZGUEbmFtZQxzdGFydGluZ19iaWQFYXNzZXQIZHVyYXRpb24GdWludDMyDHNldHRpbmdzX3JvdwAEBm1hcmtldARuYW1lDnRva2VuX2NvbnRyYWN0BG5hbWUMdG9rZW5fc3ltYm9sBnN5bWJvbBFtYWtlcl9tYXJrZXRwbGFjZQRuYW1lCHNldHRva2VuAAIOdG9rZW5fY29udHJhY3QEbmFtZQx0b2tlbl9zeW1ib2wGc3ltYm9sBXN3ZWVwAAEIbWF4X2xvdHMGdWludDMyBHRlbmQAAQlhc3NldF9pZHMIdWludDY0W10JdGVybXNfcm93AAMFZ3JhZGUEbmFtZQxzdGFydGluZ19iaWQFYXNzZXQIZHVyYXRpb24GdWludDMyCXRva2VuX3JvdwACDnRva2VuX2NvbnRyYWN0BG5hbWUMdG9rZW5fc3ltYm9sBnN5bWJvbAR3aXBlAAAPAAAAU0GaUzIIYWRkdG9rZW4AAAAAAADpTEQFY2xhaW0AAAAAICMVI0UHY29sbGVjdAAAsFIrIxUjRQtjb2xsZWN0ZmVlcwAAAABTQZqjSghkZWx0b2tlbgAAAAAAZxqzYgdnZXRsb3RzAABUPCZNlbNiC2dldHRlbmRhYmxlAAAAyGsqjbC6CXJlc2N1ZW5mdAAAAABLTXWywghzZXRiZW5lZgAAAMgKXiOzwglzZXRtYXJrZXQAAAAAWF6Vs8IIc2V0dGVybXMAAAAAU0Gas8IIc2V0dG9rZW4AAAAAAICqFMcFc3dlZXAAAAAAAACQpsoEdGVuZAAAAAAAAKCq4wR3aXBlAAcAAAAgKX0RMgNpNjQAAAthY2NydWVkX3JvdwAAAADgpaY6A2k2NAAACWJlbmVmX3JvdwAAAABciq9GA2k2NAAACmN1cnNvcl9yb3cAAAAAAIAzjQNpNjQAAAhsb3RzX3JvdwAAAJhNl7PCA2k2NAAADHNldHRpbmdzX3JvdwAAAAAALK/KA2k2NAAACXRlcm1zX3JvdwAAAADgqSDNA2k2NAAACXRva2VuX3JvdwAAAAACAAAAAGcas2ILbG90c19yZXN1bHQAVDwmTZWzYgh1aW50NjRbXQ=='
14
14
  )
15
15
  export const abi = ABI.from(abiBlob)
16
16
  export namespace Types {
17
17
  @Struct.type('accrued_row')
18
18
  export class accrued_row extends Struct {
19
19
  @Struct.field(Name)
20
- declare account: Name
20
+ declare token_contract: Name
21
21
  @Struct.field(Asset)
22
22
  declare balance: Asset
23
23
  }
24
+ @Struct.type('addtoken')
25
+ export class addtoken extends Struct {
26
+ @Struct.field(Name)
27
+ declare token_contract: Name
28
+ @Struct.field(Asset.Symbol)
29
+ declare token_symbol: Asset.Symbol
30
+ }
24
31
  @Struct.type('benef_row')
25
32
  export class benef_row extends Struct {
26
33
  @Struct.field(Name)
@@ -40,11 +47,54 @@ export namespace Types {
40
47
  @Struct.field(Name)
41
48
  declare beneficiary_account: Name
42
49
  }
50
+ @Struct.type('collect')
51
+ export class collect extends Struct {}
52
+ @Struct.type('collectfees')
53
+ export class collectfees extends Struct {}
43
54
  @Struct.type('cursor_row')
44
55
  export class cursor_row extends Struct {
45
56
  @Struct.field(UInt64)
46
57
  declare next_asset_id: UInt64
47
58
  }
59
+ @Struct.type('deltoken')
60
+ export class deltoken extends Struct {
61
+ @Struct.field(Name)
62
+ declare token_contract: Name
63
+ }
64
+ @Struct.type('getlots')
65
+ export class getlots extends Struct {
66
+ @Struct.field(UInt64)
67
+ declare lower_bound: UInt64
68
+ @Struct.field(UInt32)
69
+ declare max_lots: UInt32
70
+ }
71
+ @Struct.type('gettendable')
72
+ export class gettendable extends Struct {
73
+ @Struct.field(UInt32)
74
+ declare max_lots: UInt32
75
+ }
76
+ @Struct.type('lot_info')
77
+ export class lot_info extends Struct {
78
+ @Struct.field(UInt64)
79
+ declare asset_id: UInt64
80
+ @Struct.field(Name)
81
+ declare grade: Name
82
+ @Struct.field(UInt64)
83
+ declare auction_id: UInt64
84
+ @Struct.field(UInt16)
85
+ declare item_id: UInt16
86
+ @Struct.field(UInt32)
87
+ declare quantity: UInt32
88
+ @Struct.field(UInt64)
89
+ declare stats: UInt64
90
+ }
91
+ @Struct.type('lots_result')
92
+ export class lots_result extends Struct {
93
+ @Struct.field(lot_info, {array: true})
94
+ declare lots: lot_info[]
95
+ @Struct.field(UInt64)
96
+ declare next: UInt64
97
+ }
48
98
  @Struct.type('lots_row')
49
99
  export class lots_row extends Struct {
50
100
  @Struct.field(UInt64)
@@ -102,11 +152,16 @@ export namespace Types {
102
152
  @Struct.field(Asset.Symbol)
103
153
  declare token_symbol: Asset.Symbol
104
154
  }
105
- @Struct.type('tend')
106
- export class tend extends Struct {
155
+ @Struct.type('sweep')
156
+ export class sweep extends Struct {
107
157
  @Struct.field(UInt32)
108
158
  declare max_lots: UInt32
109
159
  }
160
+ @Struct.type('tend')
161
+ export class tend extends Struct {
162
+ @Struct.field(UInt64, {array: true})
163
+ declare asset_ids: UInt64[]
164
+ }
110
165
  @Struct.type('terms_row')
111
166
  export class terms_row extends Struct {
112
167
  @Struct.field(Name)
@@ -116,6 +171,15 @@ export namespace Types {
116
171
  @Struct.field(UInt32)
117
172
  declare duration: UInt32
118
173
  }
174
+ @Struct.type('token_row')
175
+ export class token_row extends Struct {
176
+ @Struct.field(Name)
177
+ declare token_contract: Name
178
+ @Struct.field(Asset.Symbol)
179
+ declare token_symbol: Asset.Symbol
180
+ }
181
+ @Struct.type('wipe')
182
+ export class wipe extends Struct {}
119
183
  }
120
184
  export const TableMap = {
121
185
  accrued: Types.accrued_row,
@@ -124,6 +188,7 @@ export const TableMap = {
124
188
  lots: Types.lots_row,
125
189
  settings: Types.settings_row,
126
190
  terms: Types.terms_row,
191
+ tokens: Types.token_row,
127
192
  }
128
193
  export interface TableTypes {
129
194
  accrued: Types.accrued_row
@@ -132,6 +197,7 @@ export interface TableTypes {
132
197
  lots: Types.lots_row
133
198
  settings: Types.settings_row
134
199
  terms: Types.terms_row
200
+ tokens: Types.token_row
135
201
  }
136
202
  export type RowType<T> = T extends keyof TableTypes ? TableTypes[T] : any
137
203
  export type TableNames = keyof TableTypes
@@ -142,9 +208,25 @@ export namespace ActionParams {
142
208
  bps: UInt16Type
143
209
  }
144
210
  }
211
+ export interface addtoken {
212
+ token_contract: NameType
213
+ token_symbol: Asset.SymbolType
214
+ }
145
215
  export interface claim {
146
216
  beneficiary_account: NameType
147
217
  }
218
+ export interface collect {}
219
+ export interface collectfees {}
220
+ export interface deltoken {
221
+ token_contract: NameType
222
+ }
223
+ export interface getlots {
224
+ lower_bound: UInt64Type
225
+ max_lots: UInt32Type
226
+ }
227
+ export interface gettendable {
228
+ max_lots: UInt32Type
229
+ }
148
230
  export interface rescuenft {
149
231
  asset_ids: UInt64Type[]
150
232
  to: NameType
@@ -166,20 +248,37 @@ export namespace ActionParams {
166
248
  token_contract: NameType
167
249
  token_symbol: Asset.SymbolType
168
250
  }
169
- export interface tend {
251
+ export interface sweep {
170
252
  max_lots: UInt32Type
171
253
  }
254
+ export interface tend {
255
+ asset_ids: UInt64Type[]
256
+ }
257
+ export interface wipe {}
172
258
  }
173
259
  export interface ActionNameParams {
260
+ addtoken: ActionParams.addtoken
174
261
  claim: ActionParams.claim
262
+ collect: ActionParams.collect
263
+ collectfees: ActionParams.collectfees
264
+ deltoken: ActionParams.deltoken
265
+ getlots: ActionParams.getlots
266
+ gettendable: ActionParams.gettendable
175
267
  rescuenft: ActionParams.rescuenft
176
268
  setbenef: ActionParams.setbenef
177
269
  setmarket: ActionParams.setmarket
178
270
  setterms: ActionParams.setterms
179
271
  settoken: ActionParams.settoken
272
+ sweep: ActionParams.sweep
180
273
  tend: ActionParams.tend
274
+ wipe: ActionParams.wipe
181
275
  }
182
276
  export type ActionNames = keyof ActionNameParams
277
+ export interface ActionReturnValues {
278
+ getlots: Types.lots_result
279
+ gettendable: UInt64[]
280
+ }
281
+ export type ActionReturnNames = keyof ActionReturnValues
183
282
  export class Contract extends BaseContract {
184
283
  constructor(args: PartialBy<ContractArgs, 'abi' | 'account'>) {
185
284
  super({
@@ -195,6 +294,12 @@ export class Contract extends BaseContract {
195
294
  ): Action {
196
295
  return super.action(name, data, options)
197
296
  }
297
+ readonly<T extends ActionReturnNames>(
298
+ name: T,
299
+ data?: ActionNameParams[T]
300
+ ): ActionReturnValues[T] {
301
+ return super.readonly(name, data) as unknown as ActionReturnValues[T]
302
+ }
198
303
  table<T extends TableNames>(name: T, scope?: NameType): Table<RowType<T>> {
199
304
  return super.table(name, scope, TableMap[name])
200
305
  }
@@ -28,7 +28,7 @@ import {
28
28
  import type {ActionOptions, ContractArgs, PartialBy, Table} from '@wharfkit/contract'
29
29
  import {Contract as BaseContract} from '@wharfkit/contract'
30
30
  export const abiBlob = Blob.from(
31
- 'DmVvc2lvOjphYmkvMS4yACELYmFsYW5jZV9yb3cAAg50b2tlbl9jb250cmFjdARuYW1lB2JhbGFuY2UFYXNzZXQKY2FyZ29faXRlbQAFB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHF1YW50aXR5BnVpbnQzMgllbnRpdHlfaWQHdWludDY0PwpjbGVhcnRhYmxlAAMKdGFibGVfbmFtZQRuYW1lBXNjb3BlBW5hbWU/CG1heF9yb3dzB3VpbnQ2ND8FY2xvc2UAAwVvd25lcgRuYW1lDnRva2VuX2NvbnRyYWN0BG5hbWUMdG9rZW5fc3ltYm9sBnN5bWJvbAtjb21wYW55X3JvdwACB2FjY291bnQEbmFtZQRuYW1lBnN0cmluZwpjb250cmlidXRlAAYEZ2FtZQRuYW1lBnBsYXllcgRuYW1lCWVudGl0eV9pZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0BmJ1bmRsZQxjYXJnb19pdGVtW10MZGViaXRkZXBvc2l0AAUFb3duZXIEbmFtZQV0b2tlbgRuYW1lBmxvY2tlZAVhc3NldAtmZWVfYWNjb3VudARuYW1lA2ZlZQVhc3NldA5kZXBvc2l0Y2ZnX3JvdwACDnRva2VuX2NvbnRyYWN0BG5hbWUMdG9rZW5fc3ltYm9sBnN5bWJvbAZlbmFibGUAAQdlbmFibGVkBGJvb2wKZW5hYmxlZ2FtZQACCGNvbnRyYWN0BG5hbWUHZW5hYmxlZARib29sDGZvdW5kY29tcGFueQACB2FjY291bnQEbmFtZQRuYW1lBnN0cmluZwtnYW1lX2NvbmZpZwAEBHNlZWQLY2hlY2tzdW0yNTYJZXBvY2h0aW1lBnVpbnQzMgVzdGFydA50aW1lX3BvaW50X3NlYwNlbmQOdGltZV9wb2ludF9zZWMJZ2FtZV9tZXRhAAQEbmFtZQZzdHJpbmcLZGVzY3JpcHRpb24Gc3RyaW5nA3VybAZzdHJpbmcHdmVyc2lvbgZzdHJpbmcIZ2FtZV9yb3cABAhjb250cmFjdARuYW1lBmNvbmZpZwtnYW1lX2NvbmZpZwRtZXRhCWdhbWVfbWV0YQVzdGF0ZQpnYW1lX3N0YXRlCmdhbWVfc3RhdGUAAQdlbmFibGVkBGJvb2wMbW9kdWxlX2VudHJ5AAIEdHlwZQV1aW50OAlpbnN0YWxsZWQOcGFja2VkX21vZHVsZT8Eb3BlbgADBW93bmVyBG5hbWUOdG9rZW5fY29udHJhY3QEbmFtZQx0b2tlbl9zeW1ib2wGc3ltYm9sDXBhY2tlZF9tb2R1bGUAAgdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQMcmVsZ2F0ZWFzc2V0AAEIYXNzZXRfaWQGdWludDY0DHJlbGdhdGVvd25lcgABBW93bmVyBG5hbWUMc2V0ZXBvY2h0aW1lAAIIY29udHJhY3QEbmFtZQllcG9jaHRpbWUGdWludDMyCHNldHRva2VuAAIOdG9rZW5fY29udHJhY3QEbmFtZQx0b2tlbl9zeW1ib2wGc3ltYm9sCXN0YXJ0Z2FtZQAECGNvbnRyYWN0BG5hbWUGY29uZmlnC2dhbWVfY29uZmlnBG1ldGEJZ2FtZV9tZXRhBXN0YXRlCmdhbWVfc3RhdGUJc3RhdGVfcm93AAEHZW5hYmxlZARib29sC3Vud3JhcGNhcmdvAAMEZ2FtZQRuYW1lBW93bmVyBG5hbWUIYXNzZXRfaWQGdWludDY0DnVud3JhcGN1c3Rfcm93AAIIYXNzZXRfaWQGdWludDY0BW93bmVyBG5hbWUMdW53cmFwZW50aXR5AAMEZ2FtZQRuYW1lBW93bmVyBG5hbWUIYXNzZXRfaWQGdWludDY0CnVwZGF0ZWdhbWUAAghjb250cmFjdARuYW1lBG1ldGEJZ2FtZV9tZXRhBHdpcGUAAAh3aXRoZHJhdwADBW93bmVyBG5hbWUIcXVhbnRpdHkOZXh0ZW5kZWRfYXNzZXQEbWVtbwZzdHJpbmcJd3JhcGNhcmdvAAYEZ2FtZQRuYW1lBW93bmVyBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhuZXh1c19pZAZ1aW50NjQIY2FyZ29faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NAp3cmFwZW50aXR5AAQEZ2FtZQRuYW1lBW93bmVyBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhuZXh1c19pZAZ1aW50NjQMd3JhcGdhdGVfcm93AAMFb3duZXIEbmFtZQRnYW1lBG5hbWUNbGFzdF9hc3NldF9pZAZ1aW50NjQUAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAAAAhWlEBWNsb3Nl4gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xvc2UKc3VtbWFyeTogJ0Nsb3NlIGEgZGVwb3NpdCBiYWxhbmNlIHJvdycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KCkNsb3NlIHRoZSBvd25lcidzIGRlcG9zaXQgYmFsYW5jZSByb3cgZm9yIHRoZSBnaXZlbiB0b2tlbiBhbmQgZnJlZSBpdHMgUkFNLiBUaGUgYmFsYW5jZSBtdXN0IGJlIHplcm8gYmVmb3JlIGNsb3NpbmcuIFJlcXVpcmVzIHRoZSBvd25lcidzIGF1dGhvcml0eS4AgMr6uJsnRQpjb250cmlidXRlAJAdplWl7I5KDGRlYml0ZGVwb3NpdJ0ELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlYml0ZGVwb3NpdApzdW1tYXJ5OiAnRGViaXQgYSBkZXBvc2l0IGJhbGFuY2UgZm9yIGEgd3JhcCBvcGVyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gY2FsbGVkIGlubGluZSBieSBhIHJlZ2lzdGVyZWQsIGVuYWJsZWQgZ2FtZSBjb250cmFjdCBvbmx5LiBEZWJpdHMgdGhlIG93bmVyJ3MgZGVwb3NpdCBiYWxhbmNlIGJ5IHRoZSBsb2NrZWQgYW1vdW50IHBsdXMgdGhlIGZlZSwgYW5kIGNyZWRpdHMgdGhlIGZlZSB0byB0aGUgY29uZmlndXJlZCBmZWUgYWNjb3VudC4gVXNlZCBieSBhIGdhbWUncyB3cmFwIGZsb3cgdG8gY29sbGVjdCB0aGUgd3JhcCBjb3N0LiBDYW5ub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IHBsYXllcnMgb3IgdW5yZWdpc3RlcmVkIGFjY291bnRzLgAAAACoeMxUBmVuYWJsZfMBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGVuYWJsZQpzdW1tYXJ5OiAnRW5hYmxlL2Rpc2FibGUgcGxhdGZvcm0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGUgcGxhdGZvcm0gY29udHJhY3QuAICShql4zFQKZW5hYmxlZ2FtZfwBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGVuYWJsZWdhbWUKc3VtbWFyeTogJ0VuYWJsZS9kaXNiYWJsZSBhIGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGUgc3BlY2lmaWVkIGdhbWUgY29udHJhY3Qu4KepkqI0NV0MZm91bmRjb21wYW55gwItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZm91bmRjb21wYW55CnN1bW1hcnk6ICdGb3VuZCBhIG5ldyBjb21wYW55JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKRm91bmQgYSBuZXcgY29tcGFueSBpbiB0aGUgU2hpcGxvYWQgcGxhdGZvcm0gY29udHJhY3QuAAAAAAAwVaUEb3BlbpsDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG9wZW4Kc3VtbWFyeTogJ09wZW4gYSBkZXBvc2l0IGJhbGFuY2Ugcm93JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKT3BlbiBhIHplcm8tYmFsYW5jZSBkZXBvc2l0IHJvdyBmb3IgdGhlIGdpdmVuIG93bmVyIGFuZCB0b2tlbiwgd2l0aCBSQU0gcGFpZCBieSB0aGUgb3duZXIuIEhhcyBubyBlZmZlY3QgaWYgdGhlIHJvdyBhbHJlYWR5IGV4aXN0cy4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBvd25lciBjYW4gcmVjZWl2ZSB0b2tlbiBkZXBvc2l0cyBvciB3cmFwIHJlZnVuZHMukBXGRmXDoroMcmVsZ2F0ZWFzc2V0AHDV5FRlw6K6DHJlbGdhdGVvd25lcgCgpMsN0aqywgxzZXRlcG9jaHRpbWXEAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzZXRlcG9jaHRpbWUKc3VtbWFyeTogJ0RFQlVHOiBvdmVycmlkZSBhIGdhbWUnJ3MgZXBvY2ggdGltZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKT3ZlcnJpZGUgdGhlIGVwb2NoIGR1cmF0aW9uIGluIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgZ2FtZSBjb250cmFjdC4gUmVxdWlyZXMgcGxhdGZvcm0gY29udHJhY3QgYXV0aG9yaXR5LgAAAFNBmrPCCHNldHRva2VunQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2V0dG9rZW4Kc3VtbWFyeTogJ1NldCB0aGUgYWNjZXB0ZWQgZGVwb3NpdCB0b2tlbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KCkFkbWluIGFjdGlvbiB0aGF0IHNldHMgdGhlIGFjY2VwdGVkIGRlcG9zaXQgdG9rZW4gKGNvbnRyYWN0IGFjY291bnQgYW5kIHN5bWJvbCkgZm9yIHRoZSBwbGF0Zm9ybS4gQWxsIHBsYXllciBkZXBvc2l0cyBhbmQgd3JhcCBjb3N0cyBhcmUgZGVub21pbmF0ZWQgaW4gdGhpcyB0b2tlbi4gUmVxdWlyZXMgcGxhdGZvcm0gY29udHJhY3QgYXV0aG9yaXR5LgAAUNKwfE3GCXN0YXJ0Z2FtZf8BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHN0YXJ0Z2FtZQpzdW1tYXJ5OiAnU3RhcnQgYSBuZXcgZ2FtZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KClN0YXJ0IGEgbmV3IGdhbWUgb2YgU2hpcGxvYWQgZGVwbG95ZWQgdG8gYSBuZXcgY29udHJhY3QuACi7BlVz+dQLdW53cmFwY2FyZ2/PBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB1bndyYXBjYXJnbwpzdW1tYXJ5OiAnRGVwb3NpdCBhbiBORlQgaW50byBhIGhvc3QgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpEZXBvc2l0IGFuIEF0b21pY0Fzc2V0cyBORlQgaW50byBhIGhvc3QgZW50aXR5J3MgY2FyZ28uIFBhaXJzIHdpdGggYW4gYXRvbWljYXNzZXRzOjp0cmFuc2ZlciBjYXJyeWluZyB0aGUgJ3Vud3JhcCcgbWVtbyBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbi4gVGhlIGNhbGxlciBtdXN0IG93biB0aGUgaG9zdCwgdGhlIGhvc3QgbXVzdCBoYXZlIGxvYWRlcnMsIGFuZCB0aGUgaG9zdCBtdXN0IGhhdmUgY2FwYWNpdHkgaGVhZHJvb20gZm9yIHRoZSB1bndyYXBwZWQgbWFzcy4gU2NoZWR1bGVzIGEgVEFTS19VTldSQVAgb24gdGhlIGhvc3QgdGhhdCwgb24gcmVzb2x1dGlvbiwgcGxhY2VzIHRoZSBkZWNvZGVkIGl0ZW0gaW50byB0aGUgaG9zdCdzIGNhcmdvIGFuZCBidXJucyB0aGUgTkZULuCzy1NVc/nUDHVud3JhcGVudGl0eeIELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHVud3JhcGVudGl0eQpzdW1tYXJ5OiAnRGVwbG95IGFuIGVudGl0eSBORlQgZGlyZWN0bHkgdG8gYSBuZXh1cycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRGVwbG95IGEgcGFja2VkLWVudGl0eSBBdG9taWNBc3NldHMgTkZUIChvcmJpdGFsIHZlc3NlbDogc2hpcCBvciBjb250YWluZXIpIGRpcmVjdGx5IGFzIGEgbGl2ZSBlbnRpdHkuIFBhaXJzIHdpdGggYW4gYXRvbWljYXNzZXRzOjp0cmFuc2ZlciBjYXJyeWluZyB0aGUgJ2RlcGxveScgbWVtbyBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbi4gVGhlIE5GVCBpcyBidXJuZWQsIGEgbmV3IGVudGl0eSByb3cgaXMgZW1wbGFjZWQgYXQgdGhlIE5GVCdzIHdyYXAgb3JpZ2luIHBhaWQgYnkgdGhlIG93bmVyLCBhbmQgVEFTS19UUkFWRUwgcGx1cyBUQVNLX1JFQ0hBUkdFIGFyZSBxdWV1ZWQgdG8gZGVsaXZlciB0aGUgZW50aXR5IHRvIHRoZSB0YXJnZXQgbmV4dXMgYW5kIGJyaW5nIGl0IHRvIGZ1bGwgZW5lcmd5LgCAkoapbFLVCnVwZGF0ZWdhbWWNAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB1cGRhdGVnYW1lCnN1bW1hcnk6ICdVcGRhdGUgZ2FtZSBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KClVwZGF0ZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwZWNpZmllZCBnYW1lIGNvbnRyYWN0LgoKLS0tAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAANzc1LLjCHdpdGhkcmF3lwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2l0aGRyYXcKc3VtbWFyeTogJ1dpdGhkcmF3IHRva2VucyBmcm9tIGEgZGVwb3NpdCBiYWxhbmNlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKV2l0aGRyYXcgdG9rZW5zIGZyb20gdGhlIG93bmVyJ3MgZGVwb3NpdCBiYWxhbmNlLiBEZWJpdHMgdGhlIGxlZGdlciBieSB0aGUgcmVxdWVzdGVkIGFtb3VudCBhbmQgdHJhbnNmZXJzIHRoZSB0b2tlbnMgdG8gdGhlIG93bmVyLiBSZXF1aXJlcyBhIHN1ZmZpY2llbnQgYmFsYW5jZSBhbmQgdGhlIG93bmVyJ3MgYXV0aG9yaXR5LgAAoOwaVM3lCXdyYXBjYXJnbwAAgM8uT1XN5Qp3cmFwZW50aXR5tQQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd3JhcGVudGl0eQpzdW1tYXJ5OiAnV3JhcCBhIGRlcGxveWVkIGVudGl0eSBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKV3JhcCBhbiBlbnRpdHkgaW50byBhbiBBdG9taWNBc3NldHMgTkZUIG1pbnRlZCB0byBpdHMgb3duZXIuIFRoZSBlbnRpdHkgbXVzdCBiZSBhdCBhIG5leHVzLCBpZGxlIHdpdGggZW1wdHkgY2FyZ28sIGFuZCBoYXZlIGFuIG5mdGNvbmZpZyBtYXBwaW5nIGZvciBpdHMgaXRlbSBpZC4gRXJhc2VzIHRoZSBlbnRpdHkgYW5kIG1pbnRzIHRoZSBORlQgaW5saW5lLCBwcmVzZXJ2aW5nIGl0cyBzdGF0cyBhbmQgaW5zdGFsbGVkIG1vZHVsZXM7IHRoZSBwbGF5ZXIgcGF5cyBSQU0gZm9yIHRoZSBuZXcgYXNzZXQgcm93LiBSZXF1aXJlcyB0aGUgb3duZXIncyBhY3RpdmUgcGVybWlzc2lvbiAobm8gc2Vzc2lvbi1rZXkgY29tcGF0aWJpbGl0eSkuBwAAAEChaaI5A2k2NAAAC2JhbGFuY2Vfcm93AAAAwE9TJUUDaTY0AAALY29tcGFueV9yb3cAAFsoO0yrSgNpNjQAAA5kZXBvc2l0Y2ZnX3JvdwAAAAAArKRhA2k2NAAACGdhbWVfcm93AAAAAACVTcYDaTY0AAAJc3RhdGVfcm93AEDGGlVz+dQDaTY0AAAOdW53cmFwY3VzdF9yb3cAAAAqG1bN5QNpNjQAAAx3cmFwZ2F0ZV9yb3cBE1NoaXBsb2FkIChQbGF0Zm9ybSkTU2hpcGxvYWQgKFBsYXRmb3JtKQAAAAA='
31
+ 'DmVvc2lvOjphYmkvMS4yACILYmFsYW5jZV9yb3cAAg50b2tlbl9jb250cmFjdARuYW1lB2JhbGFuY2UFYXNzZXQKY2FyZ29faXRlbQAFB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHF1YW50aXR5BnVpbnQzMgllbnRpdHlfaWQHdWludDY0PwpjbGVhcnRhYmxlAAMKdGFibGVfbmFtZQRuYW1lBXNjb3BlBW5hbWU/CG1heF9yb3dzB3VpbnQ2ND8FY2xvc2UAAwVvd25lcgRuYW1lDnRva2VuX2NvbnRyYWN0BG5hbWUMdG9rZW5fc3ltYm9sBnN5bWJvbAtjb21wYW55X3JvdwACB2FjY291bnQEbmFtZQRuYW1lBnN0cmluZwpjb250cmlidXRlAAYEZ2FtZQRuYW1lBnBsYXllcgRuYW1lCWVudGl0eV9pZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0BmJ1bmRsZQxjYXJnb19pdGVtW10JZGJncmVmdW5kAAEGb3duZXJzBm5hbWVbXQxkZWJpdGRlcG9zaXQABQVvd25lcgRuYW1lBXRva2VuBG5hbWUGbG9ja2VkBWFzc2V0C2ZlZV9hY2NvdW50BG5hbWUDZmVlBWFzc2V0DmRlcG9zaXRjZmdfcm93AAIOdG9rZW5fY29udHJhY3QEbmFtZQx0b2tlbl9zeW1ib2wGc3ltYm9sBmVuYWJsZQABB2VuYWJsZWQEYm9vbAplbmFibGVnYW1lAAIIY29udHJhY3QEbmFtZQdlbmFibGVkBGJvb2wMZm91bmRjb21wYW55AAIHYWNjb3VudARuYW1lBG5hbWUGc3RyaW5nC2dhbWVfY29uZmlnAAQEc2VlZAtjaGVja3N1bTI1NgllcG9jaHRpbWUGdWludDMyBXN0YXJ0DnRpbWVfcG9pbnRfc2VjA2VuZA50aW1lX3BvaW50X3NlYwlnYW1lX21ldGEABARuYW1lBnN0cmluZwtkZXNjcmlwdGlvbgZzdHJpbmcDdXJsBnN0cmluZwd2ZXJzaW9uBnN0cmluZwhnYW1lX3JvdwAECGNvbnRyYWN0BG5hbWUGY29uZmlnC2dhbWVfY29uZmlnBG1ldGEJZ2FtZV9tZXRhBXN0YXRlCmdhbWVfc3RhdGUKZ2FtZV9zdGF0ZQABB2VuYWJsZWQEYm9vbAxtb2R1bGVfZW50cnkAAgR0eXBlBXVpbnQ4CWluc3RhbGxlZA5wYWNrZWRfbW9kdWxlPwRvcGVuAAMFb3duZXIEbmFtZQ50b2tlbl9jb250cmFjdARuYW1lDHRva2VuX3N5bWJvbAZzeW1ib2wNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAxyZWxnYXRlYXNzZXQAAQhhc3NldF9pZAZ1aW50NjQMcmVsZ2F0ZW93bmVyAAEFb3duZXIEbmFtZQxzZXRlcG9jaHRpbWUAAghjb250cmFjdARuYW1lCWVwb2NodGltZQZ1aW50MzIIc2V0dG9rZW4AAg50b2tlbl9jb250cmFjdARuYW1lDHRva2VuX3N5bWJvbAZzeW1ib2wJc3RhcnRnYW1lAAQIY29udHJhY3QEbmFtZQZjb25maWcLZ2FtZV9jb25maWcEbWV0YQlnYW1lX21ldGEFc3RhdGUKZ2FtZV9zdGF0ZQlzdGF0ZV9yb3cAAQdlbmFibGVkBGJvb2wLdW53cmFwY2FyZ28AAwRnYW1lBG5hbWUFb3duZXIEbmFtZQhhc3NldF9pZAZ1aW50NjQOdW53cmFwY3VzdF9yb3cAAghhc3NldF9pZAZ1aW50NjQFb3duZXIEbmFtZQx1bndyYXBlbnRpdHkAAwRnYW1lBG5hbWUFb3duZXIEbmFtZQhhc3NldF9pZAZ1aW50NjQKdXBkYXRlZ2FtZQACCGNvbnRyYWN0BG5hbWUEbWV0YQlnYW1lX21ldGEEd2lwZQAACHdpdGhkcmF3AAMFb3duZXIEbmFtZQhxdWFudGl0eQ5leHRlbmRlZF9hc3NldARtZW1vBnN0cmluZwl3cmFwY2FyZ28ABgRnYW1lBG5hbWUFb3duZXIEbmFtZQllbnRpdHlfaWQGdWludDY0CG5leHVzX2lkBnVpbnQ2NAhjYXJnb19pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0CndyYXBlbnRpdHkABARnYW1lBG5hbWUFb3duZXIEbmFtZQllbnRpdHlfaWQGdWludDY0CG5leHVzX2lkBnVpbnQ2NAx3cmFwZ2F0ZV9yb3cAAwVvd25lcgRuYW1lBGdhbWUEbmFtZQ1sYXN0X2Fzc2V0X2lkBnVpbnQ2NBUAgIrH5GtURApjbGVhcnRhYmxlvgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYXJ0YWJsZQpzdW1tYXJ5OiAnREVCVUc6IGNsZWFydGFibGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAACFaUQFY2xvc2XiAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbG9zZQpzdW1tYXJ5OiAnQ2xvc2UgYSBkZXBvc2l0IGJhbGFuY2Ugcm93JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKQ2xvc2UgdGhlIG93bmVyJ3MgZGVwb3NpdCBiYWxhbmNlIHJvdyBmb3IgdGhlIGdpdmVuIHRva2VuIGFuZCBmcmVlIGl0cyBSQU0uIFRoZSBiYWxhbmNlIG11c3QgYmUgemVybyBiZWZvcmUgY2xvc2luZy4gUmVxdWlyZXMgdGhlIG93bmVyJ3MgYXV0aG9yaXR5LgCAyvq4mydFCmNvbnRyaWJ1dGUAAABIUy912UkJZGJncmVmdW5kAJAdplWl7I5KDGRlYml0ZGVwb3NpdJ0ELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlYml0ZGVwb3NpdApzdW1tYXJ5OiAnRGViaXQgYSBkZXBvc2l0IGJhbGFuY2UgZm9yIGEgd3JhcCBvcGVyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gY2FsbGVkIGlubGluZSBieSBhIHJlZ2lzdGVyZWQsIGVuYWJsZWQgZ2FtZSBjb250cmFjdCBvbmx5LiBEZWJpdHMgdGhlIG93bmVyJ3MgZGVwb3NpdCBiYWxhbmNlIGJ5IHRoZSBsb2NrZWQgYW1vdW50IHBsdXMgdGhlIGZlZSwgYW5kIGNyZWRpdHMgdGhlIGZlZSB0byB0aGUgY29uZmlndXJlZCBmZWUgYWNjb3VudC4gVXNlZCBieSBhIGdhbWUncyB3cmFwIGZsb3cgdG8gY29sbGVjdCB0aGUgd3JhcCBjb3N0LiBDYW5ub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IHBsYXllcnMgb3IgdW5yZWdpc3RlcmVkIGFjY291bnRzLgAAAACoeMxUBmVuYWJsZfMBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGVuYWJsZQpzdW1tYXJ5OiAnRW5hYmxlL2Rpc2FibGUgcGxhdGZvcm0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGUgcGxhdGZvcm0gY29udHJhY3QuAICShql4zFQKZW5hYmxlZ2FtZfwBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGVuYWJsZWdhbWUKc3VtbWFyeTogJ0VuYWJsZS9kaXNiYWJsZSBhIGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGUgc3BlY2lmaWVkIGdhbWUgY29udHJhY3Qu4KepkqI0NV0MZm91bmRjb21wYW55gwItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZm91bmRjb21wYW55CnN1bW1hcnk6ICdGb3VuZCBhIG5ldyBjb21wYW55JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKRm91bmQgYSBuZXcgY29tcGFueSBpbiB0aGUgU2hpcGxvYWQgcGxhdGZvcm0gY29udHJhY3QuAAAAAAAwVaUEb3BlbpsDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG9wZW4Kc3VtbWFyeTogJ09wZW4gYSBkZXBvc2l0IGJhbGFuY2Ugcm93JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKT3BlbiBhIHplcm8tYmFsYW5jZSBkZXBvc2l0IHJvdyBmb3IgdGhlIGdpdmVuIG93bmVyIGFuZCB0b2tlbiwgd2l0aCBSQU0gcGFpZCBieSB0aGUgb3duZXIuIEhhcyBubyBlZmZlY3QgaWYgdGhlIHJvdyBhbHJlYWR5IGV4aXN0cy4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBvd25lciBjYW4gcmVjZWl2ZSB0b2tlbiBkZXBvc2l0cyBvciB3cmFwIHJlZnVuZHMukBXGRmXDoroMcmVsZ2F0ZWFzc2V0AHDV5FRlw6K6DHJlbGdhdGVvd25lcgCgpMsN0aqywgxzZXRlcG9jaHRpbWXEAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzZXRlcG9jaHRpbWUKc3VtbWFyeTogJ0RFQlVHOiBvdmVycmlkZSBhIGdhbWUnJ3MgZXBvY2ggdGltZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKT3ZlcnJpZGUgdGhlIGVwb2NoIGR1cmF0aW9uIGluIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgZ2FtZSBjb250cmFjdC4gUmVxdWlyZXMgcGxhdGZvcm0gY29udHJhY3QgYXV0aG9yaXR5LgAAAFNBmrPCCHNldHRva2VunQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2V0dG9rZW4Kc3VtbWFyeTogJ1NldCB0aGUgYWNjZXB0ZWQgZGVwb3NpdCB0b2tlbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KCkFkbWluIGFjdGlvbiB0aGF0IHNldHMgdGhlIGFjY2VwdGVkIGRlcG9zaXQgdG9rZW4gKGNvbnRyYWN0IGFjY291bnQgYW5kIHN5bWJvbCkgZm9yIHRoZSBwbGF0Zm9ybS4gQWxsIHBsYXllciBkZXBvc2l0cyBhbmQgd3JhcCBjb3N0cyBhcmUgZGVub21pbmF0ZWQgaW4gdGhpcyB0b2tlbi4gUmVxdWlyZXMgcGxhdGZvcm0gY29udHJhY3QgYXV0aG9yaXR5LgAAUNKwfE3GCXN0YXJ0Z2FtZf8BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHN0YXJ0Z2FtZQpzdW1tYXJ5OiAnU3RhcnQgYSBuZXcgZ2FtZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KClN0YXJ0IGEgbmV3IGdhbWUgb2YgU2hpcGxvYWQgZGVwbG95ZWQgdG8gYSBuZXcgY29udHJhY3QuACi7BlVz+dQLdW53cmFwY2FyZ2/PBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB1bndyYXBjYXJnbwpzdW1tYXJ5OiAnRGVwb3NpdCBhbiBORlQgaW50byBhIGhvc3QgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpEZXBvc2l0IGFuIEF0b21pY0Fzc2V0cyBORlQgaW50byBhIGhvc3QgZW50aXR5J3MgY2FyZ28uIFBhaXJzIHdpdGggYW4gYXRvbWljYXNzZXRzOjp0cmFuc2ZlciBjYXJyeWluZyB0aGUgJ3Vud3JhcCcgbWVtbyBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbi4gVGhlIGNhbGxlciBtdXN0IG93biB0aGUgaG9zdCwgdGhlIGhvc3QgbXVzdCBoYXZlIGxvYWRlcnMsIGFuZCB0aGUgaG9zdCBtdXN0IGhhdmUgY2FwYWNpdHkgaGVhZHJvb20gZm9yIHRoZSB1bndyYXBwZWQgbWFzcy4gU2NoZWR1bGVzIGEgVEFTS19VTldSQVAgb24gdGhlIGhvc3QgdGhhdCwgb24gcmVzb2x1dGlvbiwgcGxhY2VzIHRoZSBkZWNvZGVkIGl0ZW0gaW50byB0aGUgaG9zdCdzIGNhcmdvIGFuZCBidXJucyB0aGUgTkZULuCzy1NVc/nUDHVud3JhcGVudGl0eeIELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHVud3JhcGVudGl0eQpzdW1tYXJ5OiAnRGVwbG95IGFuIGVudGl0eSBORlQgZGlyZWN0bHkgdG8gYSBuZXh1cycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRGVwbG95IGEgcGFja2VkLWVudGl0eSBBdG9taWNBc3NldHMgTkZUIChvcmJpdGFsIHZlc3NlbDogc2hpcCBvciBjb250YWluZXIpIGRpcmVjdGx5IGFzIGEgbGl2ZSBlbnRpdHkuIFBhaXJzIHdpdGggYW4gYXRvbWljYXNzZXRzOjp0cmFuc2ZlciBjYXJyeWluZyB0aGUgJ2RlcGxveScgbWVtbyBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbi4gVGhlIE5GVCBpcyBidXJuZWQsIGEgbmV3IGVudGl0eSByb3cgaXMgZW1wbGFjZWQgYXQgdGhlIE5GVCdzIHdyYXAgb3JpZ2luIHBhaWQgYnkgdGhlIG93bmVyLCBhbmQgVEFTS19UUkFWRUwgcGx1cyBUQVNLX1JFQ0hBUkdFIGFyZSBxdWV1ZWQgdG8gZGVsaXZlciB0aGUgZW50aXR5IHRvIHRoZSB0YXJnZXQgbmV4dXMgYW5kIGJyaW5nIGl0IHRvIGZ1bGwgZW5lcmd5LgCAkoapbFLVCnVwZGF0ZWdhbWWNAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB1cGRhdGVnYW1lCnN1bW1hcnk6ICdVcGRhdGUgZ2FtZSBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KClVwZGF0ZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwZWNpZmllZCBnYW1lIGNvbnRyYWN0LgoKLS0tAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAANzc1LLjCHdpdGhkcmF3lwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2l0aGRyYXcKc3VtbWFyeTogJ1dpdGhkcmF3IHRva2VucyBmcm9tIGEgZGVwb3NpdCBiYWxhbmNlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKV2l0aGRyYXcgdG9rZW5zIGZyb20gdGhlIG93bmVyJ3MgZGVwb3NpdCBiYWxhbmNlLiBEZWJpdHMgdGhlIGxlZGdlciBieSB0aGUgcmVxdWVzdGVkIGFtb3VudCBhbmQgdHJhbnNmZXJzIHRoZSB0b2tlbnMgdG8gdGhlIG93bmVyLiBSZXF1aXJlcyBhIHN1ZmZpY2llbnQgYmFsYW5jZSBhbmQgdGhlIG93bmVyJ3MgYXV0aG9yaXR5LgAAoOwaVM3lCXdyYXBjYXJnbwAAgM8uT1XN5Qp3cmFwZW50aXR5tQQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd3JhcGVudGl0eQpzdW1tYXJ5OiAnV3JhcCBhIGRlcGxveWVkIGVudGl0eSBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKV3JhcCBhbiBlbnRpdHkgaW50byBhbiBBdG9taWNBc3NldHMgTkZUIG1pbnRlZCB0byBpdHMgb3duZXIuIFRoZSBlbnRpdHkgbXVzdCBiZSBhdCBhIG5leHVzLCBpZGxlIHdpdGggZW1wdHkgY2FyZ28sIGFuZCBoYXZlIGFuIG5mdGNvbmZpZyBtYXBwaW5nIGZvciBpdHMgaXRlbSBpZC4gRXJhc2VzIHRoZSBlbnRpdHkgYW5kIG1pbnRzIHRoZSBORlQgaW5saW5lLCBwcmVzZXJ2aW5nIGl0cyBzdGF0cyBhbmQgaW5zdGFsbGVkIG1vZHVsZXM7IHRoZSBwbGF5ZXIgcGF5cyBSQU0gZm9yIHRoZSBuZXcgYXNzZXQgcm93LiBSZXF1aXJlcyB0aGUgb3duZXIncyBhY3RpdmUgcGVybWlzc2lvbiAobm8gc2Vzc2lvbi1rZXkgY29tcGF0aWJpbGl0eSkuBwAAAEChaaI5A2k2NAAAC2JhbGFuY2Vfcm93AAAAwE9TJUUDaTY0AAALY29tcGFueV9yb3cAAFsoO0yrSgNpNjQAAA5kZXBvc2l0Y2ZnX3JvdwAAAAAArKRhA2k2NAAACGdhbWVfcm93AAAAAACVTcYDaTY0AAAJc3RhdGVfcm93AEDGGlVz+dQDaTY0AAAOdW53cmFwY3VzdF9yb3cAAAAqG1bN5QNpNjQAAAx3cmFwZ2F0ZV9yb3cBE1NoaXBsb2FkIChQbGF0Zm9ybSkTU2hpcGxvYWQgKFBsYXRmb3JtKQAAAAA='
32
32
  )
33
33
  export const abi = ABI.from(abiBlob)
34
34
  export namespace Types {
@@ -106,6 +106,11 @@ export namespace Types {
106
106
  @Struct.field(cargo_item, {array: true})
107
107
  declare bundle: cargo_item[]
108
108
  }
109
+ @Struct.type('dbgrefund')
110
+ export class dbgrefund extends Struct {
111
+ @Struct.field(Name, {array: true})
112
+ declare owners: Name[]
113
+ }
109
114
  @Struct.type('debitdeposit')
110
115
  export class debitdeposit extends Struct {
111
116
  @Struct.field(Name)
@@ -382,6 +387,9 @@ export namespace ActionParams {
382
387
  y: Int64Type
383
388
  bundle: Type.cargo_item[]
384
389
  }
390
+ export interface dbgrefund {
391
+ owners: NameType[]
392
+ }
385
393
  export interface debitdeposit {
386
394
  owner: NameType
387
395
  token: NameType
@@ -464,6 +472,7 @@ export interface ActionNameParams {
464
472
  cleartable: ActionParams.cleartable
465
473
  close: ActionParams.close
466
474
  contribute: ActionParams.contribute
475
+ dbgrefund: ActionParams.dbgrefund
467
476
  debitdeposit: ActionParams.debitdeposit
468
477
  enable: ActionParams.enable
469
478
  enablegame: ActionParams.enablegame