@win-trader/bindings 0.0.2 → 0.0.4

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.
@@ -95,6 +95,15 @@ export declare const OracleRouterError: {
95
95
  16: {
96
96
  message: string;
97
97
  };
98
+ 17: {
99
+ message: string;
100
+ };
101
+ 18: {
102
+ message: string;
103
+ };
104
+ 19: {
105
+ message: string;
106
+ };
98
107
  };
99
108
  export type StorageKey = {
100
109
  tag: "Initialized";
@@ -105,125 +114,271 @@ export type StorageKey = {
105
114
  } | {
106
115
  tag: "OracleConfig";
107
116
  values: void;
117
+ } | {
118
+ tag: "ConfigVersion";
119
+ values: void;
108
120
  } | {
109
121
  tag: "Sources";
110
122
  values: readonly [string];
111
123
  } | {
112
124
  tag: "CachedPrice";
113
125
  values: readonly [string];
126
+ } | {
127
+ tag: "CachedPriceV2";
128
+ values: readonly [string, u64];
114
129
  } | {
115
130
  tag: "Version";
116
131
  values: void;
132
+ } | {
133
+ tag: "PositionManager";
134
+ values: void;
135
+ } | {
136
+ tag: "LatestRoundId";
137
+ values: void;
138
+ } | {
139
+ tag: "Round";
140
+ values: readonly [u64];
117
141
  };
118
142
  /**
119
- * Cached aggregated median price for a symbol — produced by
120
- * `fetch_and_validate_price` on a cache miss, consumed by the cache-hit
121
- * branch on subsequent calls within `cache_duration` seconds.
143
+ * Cached aggregated median price for a symbol. `fetched_at` bounds router
144
+ * cache duration; `oldest_source_update` ensures the cached median is not
145
+ * served after any source response used to compute it has gone stale.
122
146
  */
123
147
  export interface CachedPrice {
124
- last_update: u64;
148
+ fetched_at: u64;
149
+ oldest_source_update: u64;
125
150
  price: i128;
126
151
  }
127
152
  /**
128
- * Represents a single trader's open leveraged position.
153
+ * Authoritative per-market state: the side aggregates, the funding indices,
154
+ * the funding EMA, and the market configuration.
155
+ *
156
+ * Soroban limits UDT field names to 30 characters, so where a doc glossary
157
+ * term is longer the field drops the redundant qualifier and its doc
158
+ * comment carries the full term (e.g. `receiver_backed_index_long` is the
159
+ * doc's `receiver_backed_payer_index` for the long side).
129
160
  */
130
- export interface Position {
161
+ export interface Market {
162
+ config: MarketConfig;
131
163
  /**
132
- * USDC collateral deposited by the trader.
164
+ * `INDEX_PRECISION`-scaled bps/day payer rate as of the last refresh.
133
165
  */
134
- collateral: i128;
166
+ current_payer_rate: i128;
167
+ current_payer_side: PayerSide;
168
+ last_funding_checkpoint: u64;
169
+ long: MarketSide;
135
170
  /**
136
- * Global borrow accumulator index at position open (for lazy fee calc).
171
+ * Cumulative payer fee per unit of dominant-side size that is LP
172
+ * revenue on collection (§8.2).
137
173
  */
138
- entry_borrow_index: i128;
174
+ lp_backed_index_long: i128;
175
+ lp_backed_index_short: i128;
176
+ lp_payer_remainder: i128;
139
177
  /**
140
- * Global funding accumulator index at position open (for lazy fee calc).
178
+ * Sub-stroop carry of the receiver-liability accrual (§8.3).
141
179
  */
142
- entry_funding_index: i128;
180
+ pending_remainder: i128;
143
181
  /**
144
- * Oracle price at the time the position was opened (scaled by 1e7).
182
+ * Cumulative payer fee per unit of dominant-side size whose collection
183
+ * restores cash backing an already-accrued receiver claim (§8.2).
145
184
  */
146
- entry_price: i128;
185
+ receiver_backed_index_long: i128;
186
+ receiver_backed_index_short: i128;
147
187
  /**
148
- * Flat USDC fee escrowed when TP or SL is set. Paid to executor on trigger, refunded on user close / ADL, forfeited to revenue on liquidation.
188
+ * Cumulative funding credit per unit of light-side size (§8.2).
149
189
  */
150
- execution_fee_escrow: i128;
190
+ receiver_index_long: i128;
191
+ receiver_index_remainder: i128;
192
+ receiver_index_short: i128;
193
+ receiver_payer_remainder: i128;
194
+ short: MarketSide;
195
+ /**
196
+ * §8.1 signed EMA of the instantaneous skew: a fraction of one at
197
+ * `INDEX_PRECISION` scale, positive when history says longs dominate.
198
+ * Decays toward the current skew with the global half-life.
199
+ */
200
+ skew_ema: i128;
201
+ }
202
+ export interface LpConfig {
203
+ lp_request_delay: u64;
204
+ max_withdraw_utilization_bps: u32;
205
+ min_deposit_nav_factor_bps: u32;
206
+ }
207
+ /**
208
+ * Represents a single trader's open leveraged position.
209
+ */
210
+ export interface Position {
151
211
  /**
152
- * True for a long position, false for a short.
212
+ * Asset units at `PRICE_PRECISION`.
153
213
  */
154
- is_long: boolean;
214
+ base_exposure: i128;
215
+ borrow_debt: i128;
155
216
  /**
156
- * Block timestamp when the position was last increased (anti-front-running lock).
217
+ * Cash owned by an optional-order executor.
157
218
  */
219
+ execution_budget: i128;
220
+ funding_paid_to_lps_debt: i128;
221
+ funding_paid_to_receivers_debt: i128;
222
+ funding_received_debt: i128;
223
+ id: u64;
224
+ is_long: boolean;
158
225
  last_increased_time: u64;
226
+ market: string;
227
+ owner: string;
159
228
  /**
160
- * Notional size of the position in USDC.
229
+ * Fixed gross capacity assigned when risk opens.
230
+ */
231
+ risk_units: i128;
232
+ /**
233
+ * USD notional at `PRICE_PRECISION`.
161
234
  */
162
235
  size: i128;
163
236
  /**
164
- * Stop-loss price (scaled by 1e7). 0 = not set.
237
+ * Trigger price for the optional stop-loss order; `0` = none.
165
238
  */
166
239
  stop_loss: i128;
167
240
  /**
168
- * Take-profit price (scaled by 1e7). 0 = not set.
241
+ * Trader-owned collateral recorded in contract state (the doc's
242
+ * "stored collateral"). Effective collateral — stored collateral after
243
+ * pending fees and funding credits — is always derived, never stored.
244
+ */
245
+ stored_collateral: i128;
246
+ /**
247
+ * Trigger price for the optional take-profit order; `0` = none.
169
248
  */
170
249
  take_profit: i128;
171
250
  }
251
+ export interface LpRequest {
252
+ amount: i128;
253
+ execute_after: u64;
254
+ id: u64;
255
+ kind: LpRequestKind;
256
+ owner: string;
257
+ request_time: u64;
258
+ status: LpRequestStatus;
259
+ }
172
260
  /**
173
- * Global market state for a single tradeable asset symbol.
261
+ * Which side currently pays funding (§8.1: the side the blended integral
262
+ * skew points at — under the EMA this can be the *lighter* side for a
263
+ * while after the book flips). `None` when the blend is exactly zero.
174
264
  */
175
- export interface MarketInfo {
176
- /**
177
- * Cumulative borrow fee index (grows monotonically with time).
178
- */
179
- acc_borrow_index: i128;
265
+ export type PayerSide = {
266
+ tag: "None";
267
+ values: void;
268
+ } | {
269
+ tag: "Long";
270
+ values: void;
271
+ } | {
272
+ tag: "Short";
273
+ values: void;
274
+ };
275
+ export type RiskState = {
276
+ tag: "Normal";
277
+ values: void;
278
+ } | {
279
+ tag: "Warning";
280
+ values: void;
281
+ } | {
282
+ tag: "Adl";
283
+ values: void;
284
+ } | {
285
+ tag: "HardCap";
286
+ values: void;
287
+ };
288
+ export interface MarketSide {
289
+ base_exposure: i128;
290
+ risk_state: RiskState;
291
+ risk_units: i128;
292
+ size_open_interest: i128;
293
+ stored_collateral_total: i128;
294
+ }
295
+ export interface RoundPrice {
296
+ price: i128;
297
+ symbol: string;
298
+ }
299
+ export interface OracleRound {
300
+ id: u64;
301
+ previous_id: u64;
302
+ previous_timestamp: u64;
303
+ prices: Array<RoundPrice>;
304
+ timestamp: u64;
305
+ }
306
+ export interface GlobalConfig {
307
+ base_borrow_rate_bps_day: i128;
180
308
  /**
181
- * Cumulative funding rate index (signed; positive = longs pay shorts).
309
+ * §8.1 half-life of the funding skew EMA, seconds (global: one memory
310
+ * horizon for every market).
182
311
  */
183
- acc_funding_index: i128;
312
+ funding_half_life_seconds: u64;
313
+ hard_cap_factor_limit_bps: u32;
314
+ lp_revenue_share_bps: u32;
315
+ max_active_markets: u32;
316
+ max_adl_reward: i128;
317
+ max_insolvent_touch_reward: i128;
318
+ max_variable_borrow_bps_day: i128;
319
+ min_collateral: i128;
320
+ min_position_lifetime: u64;
321
+ risk_capacity_limit_bps: u32;
322
+ risk_keeper_revenue_share_bps: u32;
323
+ }
324
+ export interface MarketConfig {
325
+ adl_pnl_factor_bps: u32;
326
+ adl_reward_bps: u32;
184
327
  /**
185
- * Volume-weighted average entry price of all active long positions.
328
+ * §11.1 closing-fee tier when the close worsens skew.
186
329
  */
187
- global_long_avg_price: i128;
330
+ close_fee_high_bps: u32;
188
331
  /**
189
- * Volume-weighted average entry price of all active short positions.
332
+ * §11.1 closing-fee tier when the close improves or preserves skew.
190
333
  */
191
- global_short_avg_price: i128;
334
+ close_fee_low_bps: u32;
335
+ hard_cap_pnl_factor_bps: u32;
192
336
  /**
193
- * Timestamp of the last keeper index update.
337
+ * Margin required to open or add risk (§12.3). Divides max leverage:
338
+ * a position may not be created closer to liquidation than this.
194
339
  */
195
- last_index_update: u64;
340
+ initial_margin_bps: u32;
196
341
  /**
197
- * Total notional size of all open long positions.
342
+ * §8.1 weight of the instantaneous skew in the funding blend, in bps;
343
+ * the rest is the half-life EMA. `BPS` reproduces pure instant skew.
198
344
  */
199
- long_open_interest: i128;
345
+ instant_weight_bps: u32;
346
+ liquidation_reward_bps: u32;
200
347
  /**
201
- * Total notional size of all open short positions.
348
+ * Margin below which the position is liquidatable (§12.3). Must not
349
+ * exceed `initial_margin_bps`; the gap is the entry buffer.
202
350
  */
203
- short_open_interest: i128;
351
+ maintenance_margin_bps: u32;
352
+ market_risk_factor_bps: u32;
353
+ max_funding_rate_bps_day: i128;
354
+ max_long_base_exposure: i128;
355
+ max_long_size_open_interest: i128;
356
+ max_short_base_exposure: i128;
357
+ max_short_size_open_interest: i128;
358
+ recovery_pnl_factor_bps: u32;
359
+ warning_pnl_factor_bps: u32;
204
360
  }
205
361
  /**
206
362
  * Global safety thresholds for price validation.
207
363
  */
208
364
  export interface OracleConfig {
209
365
  /**
210
- * How long a cached aggregated price remains valid (in seconds). A
211
- * `get_price` call within this window of the last fetch returns the
212
- * cached value without re-querying sources. Must be > 0 and
213
- * <= `staleness_threshold` (otherwise the cache could outlive a fresh
214
- * source price and serve stale data).
366
+ * How long a cached aggregated price remains valid after the router
367
+ * fetch (in seconds). A cache hit also requires every source timestamp
368
+ * used for the cached median to remain within `staleness_threshold`.
369
+ * Must be > 0 and <= `staleness_threshold`.
215
370
  */
216
371
  cache_duration: u64;
217
372
  /**
218
373
  * Maximum allowed spread between oracle sources in basis points
219
- * (e.g., 100 = 1%). Bounded at `shared::constants::MAX_DEVIATION_BPS_CEILING`.
374
+ * (e.g., 100 = 1%). Bounded at `crate::constants::MAX_DEVIATION_BPS_CEILING`.
220
375
  */
221
376
  max_deviation_bps: i128;
222
377
  /**
223
378
  * Minimum number of source responses that must agree within
224
379
  * `max_deviation_bps` for OracleRouter to return a price. Floored at
225
- * `shared::constants::MIN_REQUIRED_SOURCES_FLOOR`, ceilinged at
226
- * `shared::constants::MAX_ORACLE_SOURCES`.
380
+ * `crate::constants::MIN_REQUIRED_SOURCES_FLOOR`, ceilinged at
381
+ * `crate::constants::MAX_ORACLE_SOURCES`.
227
382
  */
228
383
  min_required_sources: u32;
229
384
  /**
@@ -232,6 +387,13 @@ export interface OracleConfig {
232
387
  */
233
388
  staleness_threshold: u64;
234
389
  }
390
+ export type LpRequestKind = {
391
+ tag: "Deposit";
392
+ values: void;
393
+ } | {
394
+ tag: "Withdrawal";
395
+ values: void;
396
+ };
235
397
  /**
236
398
  * Data required during a WASM migration. Single definition for all contracts.
237
399
  */
@@ -241,15 +403,54 @@ export interface MigrationData {
241
403
  /**
242
404
  * Pending WASM upgrade — set by `propose_upgrade`, consumed by `upgrade`
243
405
  * (cleared atomically on a successful install), or cleared by `cancel_upgrade`.
244
- * Single shape across every protocol contract; all four contracts store it at
406
+ * Single shape across every protocol contract. Contracts store it at
245
407
  * the shared `pending_upgrade` Symbol key in their own instance storage (see
246
- * `interfaces::upgrade::pending_upgrade_key`). `upgrade` refuses to install
408
+ * `crate::upgrade::pending_upgrade_key`). `upgrade` refuses to install
247
409
  * unless `pending.wasm_hash` matches the supplied hash and `now >= eta`.
248
410
  */
249
411
  export interface PendingUpgrade {
250
412
  eta: u64;
251
413
  wasm_hash: Buffer;
252
414
  }
415
+ export type LpRequestStatus = {
416
+ tag: "Pending";
417
+ values: void;
418
+ } | {
419
+ tag: "Settled";
420
+ values: void;
421
+ } | {
422
+ tag: "Failed";
423
+ values: void;
424
+ } | {
425
+ tag: "Expired";
426
+ values: void;
427
+ };
428
+ export interface SettlementResult {
429
+ /**
430
+ * Shares minted for a deposit or assets paid for a withdrawal.
431
+ */
432
+ amount: i128;
433
+ status: SettlementStatus;
434
+ }
435
+ export type SettlementStatus = {
436
+ tag: "Settled";
437
+ values: void;
438
+ } | {
439
+ tag: "Failed";
440
+ values: void;
441
+ };
442
+ export interface AccountingSnapshot {
443
+ cash_lp_equity: i128;
444
+ cash_shortfall: i128;
445
+ free_lp_capital: i128;
446
+ lp_blocked_side_count: u32;
447
+ non_lp_claims: i128;
448
+ open_position_count: u64;
449
+ physical_cash: i128;
450
+ required_risk_backing: i128;
451
+ total_risk_units: i128;
452
+ vault_nav: i128;
453
+ }
253
454
  export declare const UpgradeableError: {
254
455
  /**
255
456
  * When migration is attempted but not allowed due to upgrade state.
@@ -356,48 +557,6 @@ export type PausableStorageKey = {
356
557
  tag: "Paused";
357
558
  values: void;
358
559
  };
359
- /**
360
- * Execution-bounty and open-fee parameters charged to traders.
361
- * `open_fee_bps` and `liquidation_bounty_bps` are in basis points;
362
- * `tp_sl_execution_fee` is a flat USDC amount at PRECISION scale.
363
- */
364
- export interface FeeConfig {
365
- liquidation_bounty_bps: u32;
366
- open_fee_bps: u32;
367
- tp_sl_execution_fee: i128;
368
- }
369
- /**
370
- * Defines how protocol revenue is split between parties.
371
- * All values are in basis points (bps). Must sum to 10_000.
372
- */
373
- export interface FeeSplits {
374
- dev_bps: u32;
375
- lp_bps: u32;
376
- staker_bps: u32;
377
- }
378
- /**
379
- * Global protocol risk and timing parameters.
380
- */
381
- export interface ProtocolLimits {
382
- adl_pnl_bps: u32;
383
- adl_utilization_bps: u32;
384
- cooldown_duration: u64;
385
- funding_cut_bps: u32;
386
- liquidation_threshold_bps: u32;
387
- max_utilization_ratio: i128;
388
- min_collateral: i128;
389
- min_position_lifetime: u64;
390
- }
391
- /**
392
- * Borrow rate kink curve and funding rate parameters (all in basis points).
393
- */
394
- export interface BorrowRateConfig {
395
- base_borrow_rate_bps: i128;
396
- base_funding_rate_bps: i128;
397
- optimal_utilization_bps: i128;
398
- slope1_bps: i128;
399
- slope2_bps: i128;
400
- }
401
560
  export interface Client {
402
561
  /**
403
562
  * Construct and simulate a migrate transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
@@ -419,12 +578,28 @@ export interface Client {
419
578
  get_price: ({ symbol }: {
420
579
  symbol: string;
421
580
  }, options?: MethodOptions) => Promise<AssembledTransaction<i128>>;
581
+ /**
582
+ * Construct and simulate a get_round transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
583
+ */
584
+ get_round: ({ round_id }: {
585
+ round_id: u64;
586
+ }, options?: MethodOptions) => Promise<AssembledTransaction<OracleRound>>;
587
+ /**
588
+ * Construct and simulate a publish_round transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
589
+ */
590
+ publish_round: ({ caller }: {
591
+ caller: string;
592
+ }, options?: MethodOptions) => Promise<AssembledTransaction<u64>>;
422
593
  /**
423
594
  * Construct and simulate a cancel_upgrade transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
424
595
  */
425
596
  cancel_upgrade: ({ caller }: {
426
597
  caller: string;
427
598
  }, options?: MethodOptions) => Promise<AssembledTransaction<null>>;
599
+ /**
600
+ * Construct and simulate a latest_round_id transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
601
+ */
602
+ latest_round_id: (options?: MethodOptions) => Promise<AssembledTransaction<u64>>;
428
603
  /**
429
604
  * Construct and simulate a propose_upgrade transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
430
605
  */
@@ -455,6 +630,13 @@ export interface Client {
455
630
  symbol: string;
456
631
  sources: Array<string>;
457
632
  }, options?: MethodOptions) => Promise<AssembledTransaction<null>>;
633
+ /**
634
+ * Construct and simulate a set_position_manager transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
635
+ */
636
+ set_position_manager: ({ caller, position_manager }: {
637
+ caller: string;
638
+ position_manager: string;
639
+ }, options?: MethodOptions) => Promise<AssembledTransaction<null>>;
458
640
  }
459
641
  export declare class Client extends ContractClient {
460
642
  readonly options: ContractClientOptions;
@@ -477,11 +659,15 @@ export declare class Client extends ContractClient {
477
659
  migrate: (json: string) => AssembledTransaction<null>;
478
660
  upgrade: (json: string) => AssembledTransaction<null>;
479
661
  get_price: (json: string) => AssembledTransaction<bigint>;
662
+ get_round: (json: string) => AssembledTransaction<OracleRound>;
663
+ publish_round: (json: string) => AssembledTransaction<bigint>;
480
664
  cancel_upgrade: (json: string) => AssembledTransaction<null>;
665
+ latest_round_id: (json: string) => AssembledTransaction<bigint>;
481
666
  propose_upgrade: (json: string) => AssembledTransaction<null>;
482
667
  bump_oracle_state: (json: string) => AssembledTransaction<null>;
483
668
  get_oracle_config: (json: string) => AssembledTransaction<OracleConfig>;
484
669
  set_oracle_config: (json: string) => AssembledTransaction<null>;
485
670
  set_oracle_sources: (json: string) => AssembledTransaction<null>;
671
+ set_position_manager: (json: string) => AssembledTransaction<null>;
486
672
  };
487
673
  }
@@ -65,7 +65,10 @@ export const OracleRouterError = {
65
65
  /**
66
66
  * Even-count median averaging would overflow on the supplied prices.
67
67
  */
68
- 16: { message: "MedianOverflow" }
68
+ 16: { message: "MedianOverflow" },
69
+ 17: { message: "PositionManagerAlreadySet" },
70
+ 18: { message: "PositionManagerNotSet" },
71
+ 19: { message: "RoundNotFound" }
69
72
  };
70
73
  export const UpgradeableError = {
71
74
  /**
@@ -131,27 +134,46 @@ export class Client extends ContractClient {
131
134
  return ContractClient.deploy({ config_manager_address }, options);
132
135
  }
133
136
  constructor(options) {
134
- super(new ContractSpec(["AAAABAAAAAAAAAAAAAAAEU9yYWNsZVJvdXRlckVycm9yAAAAAAAAEAAAAAAAAAASQWxyZWFkeUluaXRpYWxpemVkAAAAAAABAAAAAAAAAA5Ob3RJbml0aWFsaXplZAAAAAAAAgAAAAAAAAAMVW5hdXRob3JpemVkAAAAAwAAAIZFdmVyeSBvcmFjbGUgc291cmNlIHJldHVybmVkIGRhdGEgb2xkZXIgdGhhbiBgc3RhbGVuZXNzX3RocmVzaG9sZGAsCm9yIHJldHVybmVkIGludmFsaWQgKHplcm8vbmVnYXRpdmUpIHByaWNlcywgb3IgYSBmdXR1cmUgdGltZXN0YW1wLgAAAAAAClN0YWxlUHJpY2UAAAAAAAQAAAA5U3ByZWFkIGJldHdlZW4gc291cmNlIHByaWNlcyBleGNlZWRzIGBtYXhfZGV2aWF0aW9uX2Jwc2AuAAAAAAAAFVByaWNlRGV2aWF0aW9uVG9vSGlnaAAAAAAAAAUAAABBTm8gU0VQLTQwIG9yYWNsZSBzb3VyY2VzIGFyZSBjb25maWd1cmVkIGZvciB0aGUgcmVxdWVzdGVkIHN5bWJvbC4AAAAAAAAOTm9QcmljZVNvdXJjZXMAAAAAAAYAAAAvQ3Jvc3MtY29udHJhY3QgY2FsbCB0byBhbiBvcmFjbGUgc291cmNlIGZhaWxlZC4AAAAAEFByaWNlRmV0Y2hGYWlsZWQAAAAHAAAAT09yYWNsZSBjb25maWd1cmF0aW9uIGZpZWxkIGlzIGludmFsaWQgKGUuZy4sIHplcm8gdGhyZXNob2xkLCBvdXQtb2YtcmFuZ2UgYnBzKS4AAAAADUludmFsaWRDb25maWcAAAAAAAAIAAAAPUZld2VyIHRoYW4gYG1pbl9yZXF1aXJlZF9zb3VyY2VzYCB2YWxpZCBwcmljZXMgd2VyZSByZXR1cm5lZC4AAAAAAAATSW5zdWZmaWNpZW50U291cmNlcwAAAAAJAAAASGBzZXRfb3JhY2xlX3NvdXJjZXNgIGNhbGxlZCB3aXRoIG1vcmUgdGhhbiBgTUFYX09SQUNMRV9TT1VSQ0VTYCBlbnRyaWVzLgAAAA5Ub29NYW55U291cmNlcwAAAAAACgAAADVEZXZpYXRpb24gbWF0aCB3b3VsZCBvdmVyZmxvdyBvbiB0aGUgc3VwcGxpZWQgcHJpY2VzLgAAAAAAABFEZXZpYXRpb25PdmVyZmxvdwAAAAAAAAsAAABDYHVwZ3JhZGVgIHJlamVjdGVkIOKAlCBubyBgcHJvcG9zZV91cGdyYWRlYCB3YXMgbWFkZSBiZWZvcmUgY29tbWl0LgAAAAAQTm9QZW5kaW5nVXBncmFkZQAAAAwAAAA0YHVwZ3JhZGVgIHJlamVjdGVkIOKAlCB0aW1lbG9jayBoYXMgbm90IGVsYXBzZWQgeWV0LgAAABlVcGdyYWRlVGltZWxvY2tOb3RFbGFwc2VkAAAAAAAADQAAAF5gdXBncmFkZWAgcmVqZWN0ZWQg4oCUIGBuZXdfd2FzbV9oYXNoYCBkb2VzIG5vdCBtYXRjaCB0aGUgcHJvcG9zZWQKYFBlbmRpbmdVcGdyYWRlLndhc21faGFzaGAuAAAAAAATVXBncmFkZUhhc2hNaXNtYXRjaAAAAAAOAAAAe0Egc291cmNlJ3MgYGRlY2ltYWxzKClgIGRpZmZlcnMgZnJvbSBgc2hhcmVkOjpjb25zdGFudHM6OlBSSUNFX0RFQ0lNQUxTYCwKb3IgdGhlIHNvdXJjZSBjb3VsZCBub3QgYmUgcXVlcmllZCBmb3IgaXRzIHNjYWxlLgAAAAAVSW52YWxpZFNvdXJjZURlY2ltYWxzAAAAAAAADwAAAEJFdmVuLWNvdW50IG1lZGlhbiBhdmVyYWdpbmcgd291bGQgb3ZlcmZsb3cgb24gdGhlIHN1cHBsaWVkIHByaWNlcy4AAAAAAA5NZWRpYW5PdmVyZmxvdwAAAAAAEA==",
137
+ super(new ContractSpec(["AAAABAAAAAAAAAAAAAAAEU9yYWNsZVJvdXRlckVycm9yAAAAAAAAEwAAAAAAAAASQWxyZWFkeUluaXRpYWxpemVkAAAAAAABAAAAAAAAAA5Ob3RJbml0aWFsaXplZAAAAAAAAgAAAAAAAAAMVW5hdXRob3JpemVkAAAAAwAAAIZFdmVyeSBvcmFjbGUgc291cmNlIHJldHVybmVkIGRhdGEgb2xkZXIgdGhhbiBgc3RhbGVuZXNzX3RocmVzaG9sZGAsCm9yIHJldHVybmVkIGludmFsaWQgKHplcm8vbmVnYXRpdmUpIHByaWNlcywgb3IgYSBmdXR1cmUgdGltZXN0YW1wLgAAAAAAClN0YWxlUHJpY2UAAAAAAAQAAAA5U3ByZWFkIGJldHdlZW4gc291cmNlIHByaWNlcyBleGNlZWRzIGBtYXhfZGV2aWF0aW9uX2Jwc2AuAAAAAAAAFVByaWNlRGV2aWF0aW9uVG9vSGlnaAAAAAAAAAUAAABBTm8gU0VQLTQwIG9yYWNsZSBzb3VyY2VzIGFyZSBjb25maWd1cmVkIGZvciB0aGUgcmVxdWVzdGVkIHN5bWJvbC4AAAAAAAAOTm9QcmljZVNvdXJjZXMAAAAAAAYAAAAvQ3Jvc3MtY29udHJhY3QgY2FsbCB0byBhbiBvcmFjbGUgc291cmNlIGZhaWxlZC4AAAAAEFByaWNlRmV0Y2hGYWlsZWQAAAAHAAAAT09yYWNsZSBjb25maWd1cmF0aW9uIGZpZWxkIGlzIGludmFsaWQgKGUuZy4sIHplcm8gdGhyZXNob2xkLCBvdXQtb2YtcmFuZ2UgYnBzKS4AAAAADUludmFsaWRDb25maWcAAAAAAAAIAAAAPUZld2VyIHRoYW4gYG1pbl9yZXF1aXJlZF9zb3VyY2VzYCB2YWxpZCBwcmljZXMgd2VyZSByZXR1cm5lZC4AAAAAAAATSW5zdWZmaWNpZW50U291cmNlcwAAAAAJAAAASGBzZXRfb3JhY2xlX3NvdXJjZXNgIGNhbGxlZCB3aXRoIG1vcmUgdGhhbiBgTUFYX09SQUNMRV9TT1VSQ0VTYCBlbnRyaWVzLgAAAA5Ub29NYW55U291cmNlcwAAAAAACgAAADVEZXZpYXRpb24gbWF0aCB3b3VsZCBvdmVyZmxvdyBvbiB0aGUgc3VwcGxpZWQgcHJpY2VzLgAAAAAAABFEZXZpYXRpb25PdmVyZmxvdwAAAAAAAAsAAABDYHVwZ3JhZGVgIHJlamVjdGVkIOKAlCBubyBgcHJvcG9zZV91cGdyYWRlYCB3YXMgbWFkZSBiZWZvcmUgY29tbWl0LgAAAAAQTm9QZW5kaW5nVXBncmFkZQAAAAwAAAA0YHVwZ3JhZGVgIHJlamVjdGVkIOKAlCB0aW1lbG9jayBoYXMgbm90IGVsYXBzZWQgeWV0LgAAABlVcGdyYWRlVGltZWxvY2tOb3RFbGFwc2VkAAAAAAAADQAAAF5gdXBncmFkZWAgcmVqZWN0ZWQg4oCUIGBuZXdfd2FzbV9oYXNoYCBkb2VzIG5vdCBtYXRjaCB0aGUgcHJvcG9zZWQKYFBlbmRpbmdVcGdyYWRlLndhc21faGFzaGAuAAAAAAATVXBncmFkZUhhc2hNaXNtYXRjaAAAAAAOAAAAe0Egc291cmNlJ3MgYGRlY2ltYWxzKClgIGRpZmZlcnMgZnJvbSBgc2hhcmVkOjpjb25zdGFudHM6OlBSSUNFX0RFQ0lNQUxTYCwKb3IgdGhlIHNvdXJjZSBjb3VsZCBub3QgYmUgcXVlcmllZCBmb3IgaXRzIHNjYWxlLgAAAAAVSW52YWxpZFNvdXJjZURlY2ltYWxzAAAAAAAADwAAAEJFdmVuLWNvdW50IG1lZGlhbiBhdmVyYWdpbmcgd291bGQgb3ZlcmZsb3cgb24gdGhlIHN1cHBsaWVkIHByaWNlcy4AAAAAAA5NZWRpYW5PdmVyZmxvdwAAAAAAEAAAAAAAAAAZUG9zaXRpb25NYW5hZ2VyQWxyZWFkeVNldAAAAAAAABEAAAAAAAAAFVBvc2l0aW9uTWFuYWdlck5vdFNldAAAAAAAABIAAAAAAAAADVJvdW5kTm90Rm91bmQAAAAAAAAT",
135
138
  "AAAABQAAAAAAAAAAAAAAClByaWNlRmV0Y2gAAAAAAAEAAAAFcHJpY2UAAAAAAAADAAAAAAAAAAZzeW1ib2wAAAAAABEAAAABAAAAAAAAAAVwcmljZQAAAAAAAAsAAAAAAAAAAAAAAAl0aW1lc3RhbXAAAAAAAAAGAAAAAAAAAAE=",
139
+ "AAAABQAAAINFbWl0dGVkIGJ5IGBwdWJsaXNoX3JvdW5kYCDigJQgdGhlIHB1c2ggc2lnbmFsIGZvciBhbnl0aGluZyB3YWl0aW5nIG9uIGEKY2Fub25pY2FsIHJvdW5kICh0aGUgRklGTyBMUCByZXF1ZXN0IHF1ZXVlIGluIHBhcnRpY3VsYXIpLgAAAAAAAAAADlJvdW5kUHVibGlzaGVkAAAAAAABAAAACHJvdW5kcHViAAAAAwAAAAAAAAACaWQAAAAAAAYAAAAAAAAAAAAAAAl0aW1lc3RhbXAAAAAAAAAGAAAAAAAAAAAAAAALcHJldmlvdXNfaWQAAAAABgAAAAAAAAAB",
136
140
  "AAAABQAAAIdFbWl0dGVkIGJ5IGBzZXRfb3JhY2xlX2NvbmZpZ2Agd2hlbmV2ZXIgdGhlIGdsb2JhbCBzYWZldHkgdGhyZXNob2xkcwpjaGFuZ2UuIE1pcnJvcnMgZXZlcnkgZmllbGQgb2YgdGhlIG9uLWNoYWluIGBPcmFjbGVDb25maWdgIHN0cnVjdC4AAAAAAAAAABJPcmFjbGVDb25maWdVcGRhdGUAAAAAAAEAAAAGb3JjY2ZnAAAAAAAEAAAAAAAAAAlzdGFsZW5lc3MAAAAAAAAGAAAAAAAAAAAAAAAJZGV2aWF0aW9uAAAAAAAACwAAAAAAAAAAAAAADmNhY2hlX2R1cmF0aW9uAAAAAAAGAAAAAAAAAAAAAAAUbWluX3JlcXVpcmVkX3NvdXJjZXMAAAAEAAAAAAAAAAE=",
137
141
  "AAAABQAAAGRFbWl0dGVkIGJ5IGBzZXRfb3JhY2xlX3NvdXJjZXNgIHNvIG9mZi1jaGFpbiBtb25pdG9yaW5nIGNhbiBkZXRlY3QgZXZlcnkKcm90YXRpb24gb2YgdGhlIHNvdXJjZSBzZXQuAAAAAAAAABNPcmFjbGVTb3VyY2VzVXBkYXRlAAAAAAEAAAAGb3Jjc3JjAAAAAAACAAAAAAAAAAZzeW1ib2wAAAAAABEAAAABAAAAAAAAAAdzb3VyY2VzAAAAA+oAAAATAAAAAAAAAAE=",
138
- "AAAAAgAAAAAAAAAAAAAAClN0b3JhZ2VLZXkAAAAAAAYAAAAAAAAAFEluaXRpYWxpemF0aW9uIGZsYWcuAAAAC0luaXRpYWxpemVkAAAAAAAAAAAdTGlua2VkIENvbmZpZ01hbmFnZXIgYWRkcmVzcy4AAAAAAAANQ29uZmlnTWFuYWdlcgAAAAAAAAAAAAAcR2xvYmFsIG9yYWNsZSBjb25maWd1cmF0aW9uLgAAAAxPcmFjbGVDb25maWcAAAABAAAAO1Blci1zeW1ib2wgZmxhdCBzb3VyY2UgbGlzdCAobm8gcHJpbWFyeS9zZWNvbmRhcnkgdGllcmluZykuAAAAAAdTb3VyY2VzAAAAAAEAAAARAAAAAQAAACNQZXItc3ltYm9sIGNhY2hlZCBhZ2dyZWdhdGVkIHByaWNlLgAAAAALQ2FjaGVkUHJpY2UAAAAAAQAAABEAAAAAAAAASEN1cnJlbnQgY29udHJhY3QgdmVyc2lvbiDigJQgd3JpdHRlbiBieSBgX21pZ3JhdGVgIGFmdGVyIGEgV0FTTSB1cGdyYWRlLgAAAAdWZXJzaW9uAA==",
139
- "AAAAAQAAAL1DYWNoZWQgYWdncmVnYXRlZCBtZWRpYW4gcHJpY2UgZm9yIGEgc3ltYm9sIOKAlCBwcm9kdWNlZCBieQpgZmV0Y2hfYW5kX3ZhbGlkYXRlX3ByaWNlYCBvbiBhIGNhY2hlIG1pc3MsIGNvbnN1bWVkIGJ5IHRoZSBjYWNoZS1oaXQKYnJhbmNoIG9uIHN1YnNlcXVlbnQgY2FsbHMgd2l0aGluIGBjYWNoZV9kdXJhdGlvbmAgc2Vjb25kcy4AAAAAAAAAAAAAC0NhY2hlZFByaWNlAAAAAAIAAAAAAAAAC2xhc3RfdXBkYXRlAAAAAAYAAAAAAAAABXByaWNlAAAAAAAACw==",
142
+ "AAAAAgAAAAAAAAAAAAAAClN0b3JhZ2VLZXkAAAAAAAsAAAAAAAAAFEluaXRpYWxpemF0aW9uIGZsYWcuAAAAC0luaXRpYWxpemVkAAAAAAAAAAAdTGlua2VkIENvbmZpZ01hbmFnZXIgYWRkcmVzcy4AAAAAAAANQ29uZmlnTWFuYWdlcgAAAAAAAAAAAAAcR2xvYmFsIG9yYWNsZSBjb25maWd1cmF0aW9uLgAAAAxPcmFjbGVDb25maWcAAAAAAAAAlk1vbm90b25pYyB2ZXJzaW9uIGJ1bXBlZCBvbiBldmVyeSBjb25maWcgdXBkYXRlLiBDYWNoZSBrZXlzIGluY2x1ZGUKdGhpcyB2YWx1ZSBzbyBjb25maWcgY2hhbmdlcyBpbnZhbGlkYXRlIG9sZCBtZWRpYW5zIHdpdGhvdXQgc2Nhbm5pbmcKZXZlcnkgc3ltYm9sLgAAAAAADUNvbmZpZ1ZlcnNpb24AAAAAAAABAAAAO1Blci1zeW1ib2wgZmxhdCBzb3VyY2UgbGlzdCAobm8gcHJpbWFyeS9zZWNvbmRhcnkgdGllcmluZykuAAAAAAdTb3VyY2VzAAAAAAEAAAARAAAAAQAAAIBMZWdhY3kgcGVyLXN5bWJvbCBjYWNoZWQgYWdncmVnYXRlZCBwcmljZSBrZXkuIEtlcHQgc28gdXBncmFkZWQKZGVwbG95bWVudHMgZG8gbm90IHRyeSB0byBkZWNvZGUgb2xkIGNhY2hlIGVudHJpZXMgYXMgVjIgdmFsdWVzLgAAAAtDYWNoZWRQcmljZQAAAAABAAAAEQAAAAEAAABBUGVyLXN5bWJvbCBjYWNoZWQgYWdncmVnYXRlZCBwcmljZSBmb3IgdGhlIGFjdGl2ZSBjb25maWcgdmVyc2lvbi4AAAAAAAANQ2FjaGVkUHJpY2VWMgAAAAAAAAIAAAARAAAABgAAAAAAAABIQ3VycmVudCBjb250cmFjdCB2ZXJzaW9uIOKAlCB3cml0dGVuIGJ5IGBfbWlncmF0ZWAgYWZ0ZXIgYSBXQVNNIHVwZ3JhZGUuAAAAB1ZlcnNpb24AAAAAAAAAAAAAAAAPUG9zaXRpb25NYW5hZ2VyAAAAAAAAAAAAAAAADUxhdGVzdFJvdW5kSWQAAAAAAAABAAAAAAAAAAVSb3VuZAAAAAAAAAEAAAAG",
143
+ "AAAAAQAAANNDYWNoZWQgYWdncmVnYXRlZCBtZWRpYW4gcHJpY2UgZm9yIGEgc3ltYm9sLiBgZmV0Y2hlZF9hdGAgYm91bmRzIHJvdXRlcgpjYWNoZSBkdXJhdGlvbjsgYG9sZGVzdF9zb3VyY2VfdXBkYXRlYCBlbnN1cmVzIHRoZSBjYWNoZWQgbWVkaWFuIGlzIG5vdApzZXJ2ZWQgYWZ0ZXIgYW55IHNvdXJjZSByZXNwb25zZSB1c2VkIHRvIGNvbXB1dGUgaXQgaGFzIGdvbmUgc3RhbGUuAAAAAAAAAAALQ2FjaGVkUHJpY2UAAAAAAwAAAAAAAAAKZmV0Y2hlZF9hdAAAAAAABgAAAAAAAAAUb2xkZXN0X3NvdXJjZV91cGRhdGUAAAAGAAAAAAAAAAVwcmljZQAAAAAAAAs=",
140
144
  "AAAAAAAAAAAAAAAHbWlncmF0ZQAAAAACAAAAAAAAAA5taWdyYXRpb25fZGF0YQAAAAAH0AAAAA1NaWdyYXRpb25EYXRhAAAAAAAAAAAAAAhvcGVyYXRvcgAAABMAAAAA",
141
145
  "AAAAAAAAAAAAAAAHdXBncmFkZQAAAAACAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAAAAAAACG9wZXJhdG9yAAAAEwAAAAA=",
142
146
  "AAAAAAAAAAAAAAAJZ2V0X3ByaWNlAAAAAAAAAQAAAAAAAAAGc3ltYm9sAAAAAAARAAAAAQAAAAs=",
147
+ "AAAAAAAAAAAAAAAJZ2V0X3JvdW5kAAAAAAAAAQAAAAAAAAAIcm91bmRfaWQAAAAGAAAAAQAAB9AAAAALT3JhY2xlUm91bmQA",
143
148
  "AAAAAAAAATZBdG9taWMtd2l0aC1kZXBsb3kgaW5pdGlhbGl6YXRpb24gKFNvcm9iYW4gY29uc3RydWN0b3IpLiBCaW5kcyB0aGUKbGlua2VkIENvbmZpZ01hbmFnZXIgb25jZSwgaW5zaWRlIHRoZSBkZXBsb3kgdHJhbnNhY3Rpb24sIHNvIG5vIHRoaXJkCnBhcnR5IGNhbiBmcm9udC1ydW4gaW5pdCBhbmQgcG9pbnQgdGhlIHJvdXRlciBhdCBhIG1hbGljaW91cyByb2xlCmF1dGhvcml0eS4gVGhlIHJvdXRlciBzdG9yZXMgbm8gYWRtaW4gb2YgaXRzIG93biDigJQgZXZlcnkgcm9sZSBjaGVjawpjcm9zcy1jYWxscyB0aGUgbGlua2VkIENvbmZpZ01hbmFnZXIuAAAAAAANX19jb25zdHJ1Y3RvcgAAAAAAAAEAAAAAAAAAFmNvbmZpZ19tYW5hZ2VyX2FkZHJlc3MAAAAAABMAAAAA",
149
+ "AAAAAAAAAAAAAAANcHVibGlzaF9yb3VuZAAAAAAAAAEAAAAAAAAABmNhbGxlcgAAAAAAEwAAAAEAAAAG",
144
150
  "AAAAAAAAAAAAAAAOY2FuY2VsX3VwZ3JhZGUAAAAAAAEAAAAAAAAABmNhbGxlcgAAAAAAEwAAAAA=",
151
+ "AAAAAAAAAAAAAAAPbGF0ZXN0X3JvdW5kX2lkAAAAAAAAAAABAAAABg==",
145
152
  "AAAAAAAAAAAAAAAPcHJvcG9zZV91cGdyYWRlAAAAAAIAAAAAAAAABmNhbGxlcgAAAAAAEwAAAAAAAAAJd2FzbV9oYXNoAAAAAAAD7gAAACAAAAAA",
146
153
  "AAAAAAAAAAAAAAARYnVtcF9vcmFjbGVfc3RhdGUAAAAAAAAAAAAAAA==",
147
154
  "AAAAAAAAAAAAAAARZ2V0X29yYWNsZV9jb25maWcAAAAAAAAAAAAAAQAAB9AAAAAMT3JhY2xlQ29uZmln",
148
155
  "AAAAAAAAAAAAAAARc2V0X29yYWNsZV9jb25maWcAAAAAAAACAAAAAAAAAAZjYWxsZXIAAAAAABMAAAAAAAAABmNvbmZpZwAAAAAH0AAAAAxPcmFjbGVDb25maWcAAAAA",
149
156
  "AAAAAAAAAAAAAAASc2V0X29yYWNsZV9zb3VyY2VzAAAAAAADAAAAAAAAAAZjYWxsZXIAAAAAABMAAAAAAAAABnN5bWJvbAAAAAAAEQAAAAAAAAAHc291cmNlcwAAAAPqAAAAEwAAAAA=",
150
- "AAAAAQAAADVSZXByZXNlbnRzIGEgc2luZ2xlIHRyYWRlcidzIG9wZW4gbGV2ZXJhZ2VkIHBvc2l0aW9uLgAAAAAAAAAAAAAIUG9zaXRpb24AAAAKAAAAKFVTREMgY29sbGF0ZXJhbCBkZXBvc2l0ZWQgYnkgdGhlIHRyYWRlci4AAAAKY29sbGF0ZXJhbAAAAAAACwAAAEVHbG9iYWwgYm9ycm93IGFjY3VtdWxhdG9yIGluZGV4IGF0IHBvc2l0aW9uIG9wZW4gKGZvciBsYXp5IGZlZSBjYWxjKS4AAAAAAAASZW50cnlfYm9ycm93X2luZGV4AAAAAAALAAAARkdsb2JhbCBmdW5kaW5nIGFjY3VtdWxhdG9yIGluZGV4IGF0IHBvc2l0aW9uIG9wZW4gKGZvciBsYXp5IGZlZSBjYWxjKS4AAAAAABNlbnRyeV9mdW5kaW5nX2luZGV4AAAAAAsAAABBT3JhY2xlIHByaWNlIGF0IHRoZSB0aW1lIHRoZSBwb3NpdGlvbiB3YXMgb3BlbmVkIChzY2FsZWQgYnkgMWU3KS4AAAAAAAALZW50cnlfcHJpY2UAAAAACwAAAIxGbGF0IFVTREMgZmVlIGVzY3Jvd2VkIHdoZW4gVFAgb3IgU0wgaXMgc2V0LiBQYWlkIHRvIGV4ZWN1dG9yIG9uIHRyaWdnZXIsIHJlZnVuZGVkIG9uIHVzZXIgY2xvc2UgLyBBREwsIGZvcmZlaXRlZCB0byByZXZlbnVlIG9uIGxpcXVpZGF0aW9uLgAAABRleGVjdXRpb25fZmVlX2VzY3JvdwAAAAsAAAAsVHJ1ZSBmb3IgYSBsb25nIHBvc2l0aW9uLCBmYWxzZSBmb3IgYSBzaG9ydC4AAAAHaXNfbG9uZwAAAAABAAAAT0Jsb2NrIHRpbWVzdGFtcCB3aGVuIHRoZSBwb3NpdGlvbiB3YXMgbGFzdCBpbmNyZWFzZWQgKGFudGktZnJvbnQtcnVubmluZyBsb2NrKS4AAAAAE2xhc3RfaW5jcmVhc2VkX3RpbWUAAAAABgAAACZOb3Rpb25hbCBzaXplIG9mIHRoZSBwb3NpdGlvbiBpbiBVU0RDLgAAAAAABHNpemUAAAALAAAALVN0b3AtbG9zcyBwcmljZSAoc2NhbGVkIGJ5IDFlNykuIDAgPSBub3Qgc2V0LgAAAAAAAAlzdG9wX2xvc3MAAAAAAAALAAAAL1Rha2UtcHJvZml0IHByaWNlIChzY2FsZWQgYnkgMWU3KS4gMCA9IG5vdCBzZXQuAAAAAAt0YWtlX3Byb2ZpdAAAAAAL",
151
- "AAAAAQAAADhHbG9iYWwgbWFya2V0IHN0YXRlIGZvciBhIHNpbmdsZSB0cmFkZWFibGUgYXNzZXQgc3ltYm9sLgAAAAAAAAAKTWFya2V0SW5mbwAAAAAABwAAADxDdW11bGF0aXZlIGJvcnJvdyBmZWUgaW5kZXggKGdyb3dzIG1vbm90b25pY2FsbHkgd2l0aCB0aW1lKS4AAAAQYWNjX2JvcnJvd19pbmRleAAAAAsAAABEQ3VtdWxhdGl2ZSBmdW5kaW5nIHJhdGUgaW5kZXggKHNpZ25lZDsgcG9zaXRpdmUgPSBsb25ncyBwYXkgc2hvcnRzKS4AAAARYWNjX2Z1bmRpbmdfaW5kZXgAAAAAAAALAAAAQVZvbHVtZS13ZWlnaHRlZCBhdmVyYWdlIGVudHJ5IHByaWNlIG9mIGFsbCBhY3RpdmUgbG9uZyBwb3NpdGlvbnMuAAAAAAAAFWdsb2JhbF9sb25nX2F2Z19wcmljZQAAAAAAAAsAAABCVm9sdW1lLXdlaWdodGVkIGF2ZXJhZ2UgZW50cnkgcHJpY2Ugb2YgYWxsIGFjdGl2ZSBzaG9ydCBwb3NpdGlvbnMuAAAAAAAWZ2xvYmFsX3Nob3J0X2F2Z19wcmljZQAAAAAACwAAACpUaW1lc3RhbXAgb2YgdGhlIGxhc3Qga2VlcGVyIGluZGV4IHVwZGF0ZS4AAAAAABFsYXN0X2luZGV4X3VwZGF0ZQAAAAAAAAYAAAAvVG90YWwgbm90aW9uYWwgc2l6ZSBvZiBhbGwgb3BlbiBsb25nIHBvc2l0aW9ucy4AAAAAEmxvbmdfb3Blbl9pbnRlcmVzdAAAAAAACwAAADBUb3RhbCBub3Rpb25hbCBzaXplIG9mIGFsbCBvcGVuIHNob3J0IHBvc2l0aW9ucy4AAAATc2hvcnRfb3Blbl9pbnRlcmVzdAAAAAAL",
152
- "AAAAAQAAAC5HbG9iYWwgc2FmZXR5IHRocmVzaG9sZHMgZm9yIHByaWNlIHZhbGlkYXRpb24uAAAAAAAAAAAADE9yYWNsZUNvbmZpZwAAAAQAAAEkSG93IGxvbmcgYSBjYWNoZWQgYWdncmVnYXRlZCBwcmljZSByZW1haW5zIHZhbGlkIChpbiBzZWNvbmRzKS4gQQpgZ2V0X3ByaWNlYCBjYWxsIHdpdGhpbiB0aGlzIHdpbmRvdyBvZiB0aGUgbGFzdCBmZXRjaCByZXR1cm5zIHRoZQpjYWNoZWQgdmFsdWUgd2l0aG91dCByZS1xdWVyeWluZyBzb3VyY2VzLiBNdXN0IGJlID4gMCBhbmQKPD0gYHN0YWxlbmVzc190aHJlc2hvbGRgIChvdGhlcndpc2UgdGhlIGNhY2hlIGNvdWxkIG91dGxpdmUgYSBmcmVzaApzb3VyY2UgcHJpY2UgYW5kIHNlcnZlIHN0YWxlIGRhdGEpLgAAAA5jYWNoZV9kdXJhdGlvbgAAAAAABgAAAIpNYXhpbXVtIGFsbG93ZWQgc3ByZWFkIGJldHdlZW4gb3JhY2xlIHNvdXJjZXMgaW4gYmFzaXMgcG9pbnRzCihlLmcuLCAxMDAgPSAxJSkuIEJvdW5kZWQgYXQgYHNoYXJlZDo6Y29uc3RhbnRzOjpNQVhfREVWSUFUSU9OX0JQU19DRUlMSU5HYC4AAAAAABFtYXhfZGV2aWF0aW9uX2JwcwAAAAAAAAsAAADjTWluaW11bSBudW1iZXIgb2Ygc291cmNlIHJlc3BvbnNlcyB0aGF0IG11c3QgYWdyZWUgd2l0aGluCmBtYXhfZGV2aWF0aW9uX2Jwc2AgZm9yIE9yYWNsZVJvdXRlciB0byByZXR1cm4gYSBwcmljZS4gRmxvb3JlZCBhdApgc2hhcmVkOjpjb25zdGFudHM6Ok1JTl9SRVFVSVJFRF9TT1VSQ0VTX0ZMT09SYCwgY2VpbGluZ2VkIGF0CmBzaGFyZWQ6OmNvbnN0YW50czo6TUFYX09SQUNMRV9TT1VSQ0VTYC4AAAAAFG1pbl9yZXF1aXJlZF9zb3VyY2VzAAAABAAAAFlNYXhpbXVtIGFnZSBvZiBhbiBleHRlcm5hbCBTRVAtNDAgcHJpY2UgZmVlZCBiZWZvcmUgaXQgaXMgcmVqZWN0ZWQKYXMgc3RhbGUgKGluIHNlY29uZHMpLgAAAAAAABNzdGFsZW5lc3NfdGhyZXNob2xkAAAAAAY=",
157
+ "AAAAAAAAAAAAAAAUc2V0X3Bvc2l0aW9uX21hbmFnZXIAAAACAAAAAAAAAAZjYWxsZXIAAAAAABMAAAAAAAAAEHBvc2l0aW9uX21hbmFnZXIAAAATAAAAAA==",
158
+ "AAAAAQAAAYVBdXRob3JpdGF0aXZlIHBlci1tYXJrZXQgc3RhdGU6IHRoZSBzaWRlIGFnZ3JlZ2F0ZXMsIHRoZSBmdW5kaW5nIGluZGljZXMsCnRoZSBmdW5kaW5nIEVNQSwgYW5kIHRoZSBtYXJrZXQgY29uZmlndXJhdGlvbi4KClNvcm9iYW4gbGltaXRzIFVEVCBmaWVsZCBuYW1lcyB0byAzMCBjaGFyYWN0ZXJzLCBzbyB3aGVyZSBhIGRvYyBnbG9zc2FyeQp0ZXJtIGlzIGxvbmdlciB0aGUgZmllbGQgZHJvcHMgdGhlIHJlZHVuZGFudCBxdWFsaWZpZXIgYW5kIGl0cyBkb2MKY29tbWVudCBjYXJyaWVzIHRoZSBmdWxsIHRlcm0gKGUuZy4gYHJlY2VpdmVyX2JhY2tlZF9pbmRleF9sb25nYCBpcyB0aGUKZG9jJ3MgYHJlY2VpdmVyX2JhY2tlZF9wYXllcl9pbmRleGAgZm9yIHRoZSBsb25nIHNpZGUpLgAAAAAAAAAAAAAGTWFya2V0AAAAAAARAAAAAAAAAAZjb25maWcAAAAAB9AAAAAMTWFya2V0Q29uZmlnAAAAQ2BJTkRFWF9QUkVDSVNJT05gLXNjYWxlZCBicHMvZGF5IHBheWVyIHJhdGUgYXMgb2YgdGhlIGxhc3QgcmVmcmVzaC4AAAAAEmN1cnJlbnRfcGF5ZXJfcmF0ZQAAAAAACwAAAAAAAAASY3VycmVudF9wYXllcl9zaWRlAAAAAAfQAAAACVBheWVyU2lkZQAAAAAAAAAAAAAXbGFzdF9mdW5kaW5nX2NoZWNrcG9pbnQAAAAABgAAAAAAAAAEbG9uZwAAB9AAAAAKTWFya2V0U2lkZQAAAAAAXUN1bXVsYXRpdmUgcGF5ZXIgZmVlIHBlciB1bml0IG9mIGRvbWluYW50LXNpZGUgc2l6ZSB0aGF0IGlzIExQCnJldmVudWUgb24gY29sbGVjdGlvbiAowqc4LjIpLgAAAAAAABRscF9iYWNrZWRfaW5kZXhfbG9uZwAAAAsAAAAAAAAAFWxwX2JhY2tlZF9pbmRleF9zaG9ydAAAAAAAAAsAAAAAAAAAEmxwX3BheWVyX3JlbWFpbmRlcgAAAAAACwAAADtTdWItc3Ryb29wIGNhcnJ5IG9mIHRoZSByZWNlaXZlci1saWFiaWxpdHkgYWNjcnVhbCAowqc4LjMpLgAAAAARcGVuZGluZ19yZW1haW5kZXIAAAAAAAALAAAAhUN1bXVsYXRpdmUgcGF5ZXIgZmVlIHBlciB1bml0IG9mIGRvbWluYW50LXNpZGUgc2l6ZSB3aG9zZSBjb2xsZWN0aW9uCnJlc3RvcmVzIGNhc2ggYmFja2luZyBhbiBhbHJlYWR5LWFjY3J1ZWQgcmVjZWl2ZXIgY2xhaW0gKMKnOC4yKS4AAAAAAAAacmVjZWl2ZXJfYmFja2VkX2luZGV4X2xvbmcAAAAAAAsAAAAAAAAAG3JlY2VpdmVyX2JhY2tlZF9pbmRleF9zaG9ydAAAAAALAAAAPkN1bXVsYXRpdmUgZnVuZGluZyBjcmVkaXQgcGVyIHVuaXQgb2YgbGlnaHQtc2lkZSBzaXplICjCpzguMikuAAAAAAATcmVjZWl2ZXJfaW5kZXhfbG9uZwAAAAALAAAAAAAAABhyZWNlaXZlcl9pbmRleF9yZW1haW5kZXIAAAALAAAAAAAAABRyZWNlaXZlcl9pbmRleF9zaG9ydAAAAAsAAAAAAAAAGHJlY2VpdmVyX3BheWVyX3JlbWFpbmRlcgAAAAsAAAAAAAAABXNob3J0AAAAAAAH0AAAAApNYXJrZXRTaWRlAAAAAAC+wqc4LjEgc2lnbmVkIEVNQSBvZiB0aGUgaW5zdGFudGFuZW91cyBza2V3OiBhIGZyYWN0aW9uIG9mIG9uZSBhdApgSU5ERVhfUFJFQ0lTSU9OYCBzY2FsZSwgcG9zaXRpdmUgd2hlbiBoaXN0b3J5IHNheXMgbG9uZ3MgZG9taW5hdGUuCkRlY2F5cyB0b3dhcmQgdGhlIGN1cnJlbnQgc2tldyB3aXRoIHRoZSBnbG9iYWwgaGFsZi1saWZlLgAAAAAACHNrZXdfZW1hAAAACw==",
159
+ "AAAAAQAAAAAAAAAAAAAACExwQ29uZmlnAAAAAwAAAAAAAAAQbHBfcmVxdWVzdF9kZWxheQAAAAYAAAAAAAAAHG1heF93aXRoZHJhd191dGlsaXphdGlvbl9icHMAAAAEAAAAAAAAABptaW5fZGVwb3NpdF9uYXZfZmFjdG9yX2JwcwAAAAAABA==",
160
+ "AAAAAQAAADVSZXByZXNlbnRzIGEgc2luZ2xlIHRyYWRlcidzIG9wZW4gbGV2ZXJhZ2VkIHBvc2l0aW9uLgAAAAAAAAAAAAAIUG9zaXRpb24AAAAQAAAAIUFzc2V0IHVuaXRzIGF0IGBQUklDRV9QUkVDSVNJT05gLgAAAAAAAA1iYXNlX2V4cG9zdXJlAAAAAAAACwAAAAAAAAALYm9ycm93X2RlYnQAAAAACwAAAClDYXNoIG93bmVkIGJ5IGFuIG9wdGlvbmFsLW9yZGVyIGV4ZWN1dG9yLgAAAAAAABBleGVjdXRpb25fYnVkZ2V0AAAACwAAAAAAAAAYZnVuZGluZ19wYWlkX3RvX2xwc19kZWJ0AAAACwAAAAAAAAAeZnVuZGluZ19wYWlkX3RvX3JlY2VpdmVyc19kZWJ0AAAAAAALAAAAAAAAABVmdW5kaW5nX3JlY2VpdmVkX2RlYnQAAAAAAAALAAAAAAAAAAJpZAAAAAAABgAAAAAAAAAHaXNfbG9uZwAAAAABAAAAAAAAABNsYXN0X2luY3JlYXNlZF90aW1lAAAAAAYAAAAAAAAABm1hcmtldAAAAAAAEQAAAAAAAAAFb3duZXIAAAAAAAATAAAALkZpeGVkIGdyb3NzIGNhcGFjaXR5IGFzc2lnbmVkIHdoZW4gcmlzayBvcGVucy4AAAAAAApyaXNrX3VuaXRzAAAAAAALAAAAIlVTRCBub3Rpb25hbCBhdCBgUFJJQ0VfUFJFQ0lTSU9OYC4AAAAAAARzaXplAAAACwAAADtUcmlnZ2VyIHByaWNlIGZvciB0aGUgb3B0aW9uYWwgc3RvcC1sb3NzIG9yZGVyOyBgMGAgPSBub25lLgAAAAAJc3RvcF9sb3NzAAAAAAAACwAAAMpUcmFkZXItb3duZWQgY29sbGF0ZXJhbCByZWNvcmRlZCBpbiBjb250cmFjdCBzdGF0ZSAodGhlIGRvYydzCiJzdG9yZWQgY29sbGF0ZXJhbCIpLiBFZmZlY3RpdmUgY29sbGF0ZXJhbCDigJQgc3RvcmVkIGNvbGxhdGVyYWwgYWZ0ZXIKcGVuZGluZyBmZWVzIGFuZCBmdW5kaW5nIGNyZWRpdHMg4oCUIGlzIGFsd2F5cyBkZXJpdmVkLCBuZXZlciBzdG9yZWQuAAAAAAARc3RvcmVkX2NvbGxhdGVyYWwAAAAAAAALAAAAPVRyaWdnZXIgcHJpY2UgZm9yIHRoZSBvcHRpb25hbCB0YWtlLXByb2ZpdCBvcmRlcjsgYDBgID0gbm9uZS4AAAAAAAALdGFrZV9wcm9maXQAAAAACw==",
161
+ "AAAAAQAAAAAAAAAAAAAACUxwUmVxdWVzdAAAAAAAAAcAAAAAAAAABmFtb3VudAAAAAAACwAAAAAAAAANZXhlY3V0ZV9hZnRlcgAAAAAAAAYAAAAAAAAAAmlkAAAAAAAGAAAAAAAAAARraW5kAAAH0AAAAA1McFJlcXVlc3RLaW5kAAAAAAAAAAAAAAVvd25lcgAAAAAAABMAAAAAAAAADHJlcXVlc3RfdGltZQAAAAYAAAAAAAAABnN0YXR1cwAAAAAH0AAAAA9McFJlcXVlc3RTdGF0dXMA",
162
+ "AAAAAgAAANFXaGljaCBzaWRlIGN1cnJlbnRseSBwYXlzIGZ1bmRpbmcgKMKnOC4xOiB0aGUgc2lkZSB0aGUgYmxlbmRlZCBpbnRlZ3JhbApza2V3IHBvaW50cyBhdCDigJQgdW5kZXIgdGhlIEVNQSB0aGlzIGNhbiBiZSB0aGUgKmxpZ2h0ZXIqIHNpZGUgZm9yIGEKd2hpbGUgYWZ0ZXIgdGhlIGJvb2sgZmxpcHMpLiBgTm9uZWAgd2hlbiB0aGUgYmxlbmQgaXMgZXhhY3RseSB6ZXJvLgAAAAAAAAAAAAAJUGF5ZXJTaWRlAAAAAAAAAwAAAAAAAAAAAAAABE5vbmUAAAAAAAAAAAAAAARMb25nAAAAAAAAAAAAAAAFU2hvcnQAAAA=",
163
+ "AAAAAgAAAAAAAAAAAAAACVJpc2tTdGF0ZQAAAAAAAAQAAAAAAAAAAAAAAAZOb3JtYWwAAAAAAAAAAAAAAAAAB1dhcm5pbmcAAAAAAAAAAAAAAAADQWRsAAAAAAAAAAAAAAAAB0hhcmRDYXAA",
164
+ "AAAAAQAAAAAAAAAAAAAACk1hcmtldFNpZGUAAAAAAAUAAAAAAAAADWJhc2VfZXhwb3N1cmUAAAAAAAALAAAAAAAAAApyaXNrX3N0YXRlAAAAAAfQAAAACVJpc2tTdGF0ZQAAAAAAAAAAAAAKcmlza191bml0cwAAAAAACwAAAAAAAAASc2l6ZV9vcGVuX2ludGVyZXN0AAAAAAALAAAAAAAAABdzdG9yZWRfY29sbGF0ZXJhbF90b3RhbAAAAAAL",
165
+ "AAAAAQAAAAAAAAAAAAAAClJvdW5kUHJpY2UAAAAAAAIAAAAAAAAABXByaWNlAAAAAAAACwAAAAAAAAAGc3ltYm9sAAAAAAAR",
166
+ "AAAAAQAAAAAAAAAAAAAAC09yYWNsZVJvdW5kAAAAAAUAAAAAAAAAAmlkAAAAAAAGAAAAAAAAAAtwcmV2aW91c19pZAAAAAAGAAAAAAAAABJwcmV2aW91c190aW1lc3RhbXAAAAAAAAYAAAAAAAAABnByaWNlcwAAAAAD6gAAB9AAAAAKUm91bmRQcmljZQAAAAAAAAAAAAl0aW1lc3RhbXAAAAAAAAAG",
167
+ "AAAAAQAAAAAAAAAAAAAADEdsb2JhbENvbmZpZwAAAAwAAAAAAAAAGGJhc2VfYm9ycm93X3JhdGVfYnBzX2RheQAAAAsAAABfwqc4LjEgaGFsZi1saWZlIG9mIHRoZSBmdW5kaW5nIHNrZXcgRU1BLCBzZWNvbmRzIChnbG9iYWw6IG9uZSBtZW1vcnkKaG9yaXpvbiBmb3IgZXZlcnkgbWFya2V0KS4AAAAAGWZ1bmRpbmdfaGFsZl9saWZlX3NlY29uZHMAAAAAAAAGAAAAAAAAABloYXJkX2NhcF9mYWN0b3JfbGltaXRfYnBzAAAAAAAABAAAAAAAAAAUbHBfcmV2ZW51ZV9zaGFyZV9icHMAAAAEAAAAAAAAABJtYXhfYWN0aXZlX21hcmtldHMAAAAAAAQAAAAAAAAADm1heF9hZGxfcmV3YXJkAAAAAAALAAAAAAAAABptYXhfaW5zb2x2ZW50X3RvdWNoX3Jld2FyZAAAAAAACwAAAAAAAAAbbWF4X3ZhcmlhYmxlX2JvcnJvd19icHNfZGF5AAAAAAsAAAAAAAAADm1pbl9jb2xsYXRlcmFsAAAAAAALAAAAAAAAABVtaW5fcG9zaXRpb25fbGlmZXRpbWUAAAAAAAAGAAAAAAAAABdyaXNrX2NhcGFjaXR5X2xpbWl0X2JwcwAAAAAEAAAAAAAAAB1yaXNrX2tlZXBlcl9yZXZlbnVlX3NoYXJlX2JwcwAAAAAAAAQ=",
168
+ "AAAAAQAAAAAAAAAAAAAADE1hcmtldENvbmZpZwAAABEAAAAAAAAAEmFkbF9wbmxfZmFjdG9yX2JwcwAAAAAABAAAAAAAAAAOYWRsX3Jld2FyZF9icHMAAAAAAAQAAAA0wqcxMS4xIGNsb3NpbmctZmVlIHRpZXIgd2hlbiB0aGUgY2xvc2Ugd29yc2VucyBza2V3LgAAABJjbG9zZV9mZWVfaGlnaF9icHMAAAAAAAQAAABCwqcxMS4xIGNsb3NpbmctZmVlIHRpZXIgd2hlbiB0aGUgY2xvc2UgaW1wcm92ZXMgb3IgcHJlc2VydmVzIHNrZXcuAAAAAAARY2xvc2VfZmVlX2xvd19icHMAAAAAAAAEAAAAAAAAABdoYXJkX2NhcF9wbmxfZmFjdG9yX2JwcwAAAAAEAAAAgk1hcmdpbiByZXF1aXJlZCB0byBvcGVuIG9yIGFkZCByaXNrICjCpzEyLjMpLiBEaXZpZGVzIG1heCBsZXZlcmFnZToKYSBwb3NpdGlvbiBtYXkgbm90IGJlIGNyZWF0ZWQgY2xvc2VyIHRvIGxpcXVpZGF0aW9uIHRoYW4gdGhpcy4AAAAAABJpbml0aWFsX21hcmdpbl9icHMAAAAAAAQAAACHwqc4LjEgd2VpZ2h0IG9mIHRoZSBpbnN0YW50YW5lb3VzIHNrZXcgaW4gdGhlIGZ1bmRpbmcgYmxlbmQsIGluIGJwczsKdGhlIHJlc3QgaXMgdGhlIGhhbGYtbGlmZSBFTUEuIGBCUFNgIHJlcHJvZHVjZXMgcHVyZSBpbnN0YW50IHNrZXcuAAAAABJpbnN0YW50X3dlaWdodF9icHMAAAAAAAQAAAAAAAAAFmxpcXVpZGF0aW9uX3Jld2FyZF9icHMAAAAAAAQAAAB8TWFyZ2luIGJlbG93IHdoaWNoIHRoZSBwb3NpdGlvbiBpcyBsaXF1aWRhdGFibGUgKMKnMTIuMykuIE11c3Qgbm90CmV4Y2VlZCBgaW5pdGlhbF9tYXJnaW5fYnBzYDsgdGhlIGdhcCBpcyB0aGUgZW50cnkgYnVmZmVyLgAAABZtYWludGVuYW5jZV9tYXJnaW5fYnBzAAAAAAAEAAAAAAAAABZtYXJrZXRfcmlza19mYWN0b3JfYnBzAAAAAAAEAAAAAAAAABhtYXhfZnVuZGluZ19yYXRlX2Jwc19kYXkAAAALAAAAAAAAABZtYXhfbG9uZ19iYXNlX2V4cG9zdXJlAAAAAAALAAAAAAAAABttYXhfbG9uZ19zaXplX29wZW5faW50ZXJlc3QAAAAACwAAAAAAAAAXbWF4X3Nob3J0X2Jhc2VfZXhwb3N1cmUAAAAACwAAAAAAAAAcbWF4X3Nob3J0X3NpemVfb3Blbl9pbnRlcmVzdAAAAAsAAAAAAAAAF3JlY292ZXJ5X3BubF9mYWN0b3JfYnBzAAAAAAQAAAAAAAAAFndhcm5pbmdfcG5sX2ZhY3Rvcl9icHMAAAAAAAQ=",
169
+ "AAAAAQAAAC5HbG9iYWwgc2FmZXR5IHRocmVzaG9sZHMgZm9yIHByaWNlIHZhbGlkYXRpb24uAAAAAAAAAAAADE9yYWNsZUNvbmZpZwAAAAQAAADzSG93IGxvbmcgYSBjYWNoZWQgYWdncmVnYXRlZCBwcmljZSByZW1haW5zIHZhbGlkIGFmdGVyIHRoZSByb3V0ZXIKZmV0Y2ggKGluIHNlY29uZHMpLiBBIGNhY2hlIGhpdCBhbHNvIHJlcXVpcmVzIGV2ZXJ5IHNvdXJjZSB0aW1lc3RhbXAKdXNlZCBmb3IgdGhlIGNhY2hlZCBtZWRpYW4gdG8gcmVtYWluIHdpdGhpbiBgc3RhbGVuZXNzX3RocmVzaG9sZGAuCk11c3QgYmUgPiAwIGFuZCA8PSBgc3RhbGVuZXNzX3RocmVzaG9sZGAuAAAAAA5jYWNoZV9kdXJhdGlvbgAAAAAABgAAAIlNYXhpbXVtIGFsbG93ZWQgc3ByZWFkIGJldHdlZW4gb3JhY2xlIHNvdXJjZXMgaW4gYmFzaXMgcG9pbnRzCihlLmcuLCAxMDAgPSAxJSkuIEJvdW5kZWQgYXQgYGNyYXRlOjpjb25zdGFudHM6Ok1BWF9ERVZJQVRJT05fQlBTX0NFSUxJTkdgLgAAAAAAABFtYXhfZGV2aWF0aW9uX2JwcwAAAAAAAAsAAADhTWluaW11bSBudW1iZXIgb2Ygc291cmNlIHJlc3BvbnNlcyB0aGF0IG11c3QgYWdyZWUgd2l0aGluCmBtYXhfZGV2aWF0aW9uX2Jwc2AgZm9yIE9yYWNsZVJvdXRlciB0byByZXR1cm4gYSBwcmljZS4gRmxvb3JlZCBhdApgY3JhdGU6OmNvbnN0YW50czo6TUlOX1JFUVVJUkVEX1NPVVJDRVNfRkxPT1JgLCBjZWlsaW5nZWQgYXQKYGNyYXRlOjpjb25zdGFudHM6Ok1BWF9PUkFDTEVfU09VUkNFU2AuAAAAAAAAFG1pbl9yZXF1aXJlZF9zb3VyY2VzAAAABAAAAFlNYXhpbXVtIGFnZSBvZiBhbiBleHRlcm5hbCBTRVAtNDAgcHJpY2UgZmVlZCBiZWZvcmUgaXQgaXMgcmVqZWN0ZWQKYXMgc3RhbGUgKGluIHNlY29uZHMpLgAAAAAAABNzdGFsZW5lc3NfdGhyZXNob2xkAAAAAAY=",
170
+ "AAAAAgAAAAAAAAAAAAAADUxwUmVxdWVzdEtpbmQAAAAAAAACAAAAAAAAAAAAAAAHRGVwb3NpdAAAAAAAAAAAAAAAAApXaXRoZHJhd2FsAAA=",
153
171
  "AAAAAQAAAEtEYXRhIHJlcXVpcmVkIGR1cmluZyBhIFdBU00gbWlncmF0aW9uLiBTaW5nbGUgZGVmaW5pdGlvbiBmb3IgYWxsIGNvbnRyYWN0cy4AAAAAAAAAAA1NaWdyYXRpb25EYXRhAAAAAAAAAQAAAAAAAAAHdmVyc2lvbgAAAAAE",
154
- "AAAAAQAAAb5QZW5kaW5nIFdBU00gdXBncmFkZSDigJQgc2V0IGJ5IGBwcm9wb3NlX3VwZ3JhZGVgLCBjb25zdW1lZCBieSBgdXBncmFkZWAKKGNsZWFyZWQgYXRvbWljYWxseSBvbiBhIHN1Y2Nlc3NmdWwgaW5zdGFsbCksIG9yIGNsZWFyZWQgYnkgYGNhbmNlbF91cGdyYWRlYC4KU2luZ2xlIHNoYXBlIGFjcm9zcyBldmVyeSBwcm90b2NvbCBjb250cmFjdDsgYWxsIGZvdXIgY29udHJhY3RzIHN0b3JlIGl0IGF0CnRoZSBzaGFyZWQgYHBlbmRpbmdfdXBncmFkZWAgU3ltYm9sIGtleSBpbiB0aGVpciBvd24gaW5zdGFuY2Ugc3RvcmFnZSAoc2VlCmBpbnRlcmZhY2VzOjp1cGdyYWRlOjpwZW5kaW5nX3VwZ3JhZGVfa2V5YCkuIGB1cGdyYWRlYCByZWZ1c2VzIHRvIGluc3RhbGwKdW5sZXNzIGBwZW5kaW5nLndhc21faGFzaGAgbWF0Y2hlcyB0aGUgc3VwcGxpZWQgaGFzaCBhbmQgYG5vdyA+PSBldGFgLgAAAAAAAAAAAA5QZW5kaW5nVXBncmFkZQAAAAAAAgAAAAAAAAADZXRhAAAAAAYAAAAAAAAACXdhc21faGFzaAAAAAAAA+4AAAAg",
172
+ "AAAAAQAAAbBQZW5kaW5nIFdBU00gdXBncmFkZSDigJQgc2V0IGJ5IGBwcm9wb3NlX3VwZ3JhZGVgLCBjb25zdW1lZCBieSBgdXBncmFkZWAKKGNsZWFyZWQgYXRvbWljYWxseSBvbiBhIHN1Y2Nlc3NmdWwgaW5zdGFsbCksIG9yIGNsZWFyZWQgYnkgYGNhbmNlbF91cGdyYWRlYC4KU2luZ2xlIHNoYXBlIGFjcm9zcyBldmVyeSBwcm90b2NvbCBjb250cmFjdC4gQ29udHJhY3RzIHN0b3JlIGl0IGF0CnRoZSBzaGFyZWQgYHBlbmRpbmdfdXBncmFkZWAgU3ltYm9sIGtleSBpbiB0aGVpciBvd24gaW5zdGFuY2Ugc3RvcmFnZSAoc2VlCmBjcmF0ZTo6dXBncmFkZTo6cGVuZGluZ191cGdyYWRlX2tleWApLiBgdXBncmFkZWAgcmVmdXNlcyB0byBpbnN0YWxsCnVubGVzcyBgcGVuZGluZy53YXNtX2hhc2hgIG1hdGNoZXMgdGhlIHN1cHBsaWVkIGhhc2ggYW5kIGBub3cgPj0gZXRhYC4AAAAAAAAADlBlbmRpbmdVcGdyYWRlAAAAAAACAAAAAAAAAANldGEAAAAABgAAAAAAAAAJd2FzbV9oYXNoAAAAAAAD7gAAACA=",
173
+ "AAAAAgAAAAAAAAAAAAAAD0xwUmVxdWVzdFN0YXR1cwAAAAAEAAAAAAAAAAAAAAAHUGVuZGluZwAAAAAAAAAAAAAAAAdTZXR0bGVkAAAAAAAAAAAAAAAABkZhaWxlZAAAAAAAAAAAAAAAAAAHRXhwaXJlZAA=",
174
+ "AAAAAQAAAAAAAAAAAAAAEFNldHRsZW1lbnRSZXN1bHQAAAACAAAAPFNoYXJlcyBtaW50ZWQgZm9yIGEgZGVwb3NpdCBvciBhc3NldHMgcGFpZCBmb3IgYSB3aXRoZHJhd2FsLgAAAAZhbW91bnQAAAAAAAsAAAAAAAAABnN0YXR1cwAAAAAH0AAAABBTZXR0bGVtZW50U3RhdHVz",
175
+ "AAAAAgAAAAAAAAAAAAAAEFNldHRsZW1lbnRTdGF0dXMAAAACAAAAAAAAAAAAAAAHU2V0dGxlZAAAAAAAAAAAAAAAAAZGYWlsZWQAAA==",
176
+ "AAAAAQAAAAAAAAAAAAAAEkFjY291bnRpbmdTbmFwc2hvdAAAAAAACgAAAAAAAAAOY2FzaF9scF9lcXVpdHkAAAAAAAsAAAAAAAAADmNhc2hfc2hvcnRmYWxsAAAAAAALAAAAAAAAAA9mcmVlX2xwX2NhcGl0YWwAAAAACwAAAAAAAAAVbHBfYmxvY2tlZF9zaWRlX2NvdW50AAAAAAAABAAAAAAAAAANbm9uX2xwX2NsYWltcwAAAAAAAAsAAAAAAAAAE29wZW5fcG9zaXRpb25fY291bnQAAAAABgAAAAAAAAANcGh5c2ljYWxfY2FzaAAAAAAAAAsAAAAAAAAAFXJlcXVpcmVkX3Jpc2tfYmFja2luZwAAAAAAAAsAAAAAAAAAEHRvdGFsX3Jpc2tfdW5pdHMAAAALAAAAAAAAAAl2YXVsdF9uYXYAAAAAAAAL",
155
177
  "AAAABQAAALVFbWl0dGVkIGJ5IGBwcm9wb3NlX3VwZ3JhZGVgLiBPZmYtY2hhaW4gbW9uaXRvcmluZyByZWNvcmRzIHRoZSBwcm9wb3NlZApgd2FzbV9oYXNoYCArIGBldGFgIGFuZCBmbGFncyBhbnkgc3Vic2VxdWVudCBgdXBncmFkZSgpYCBjYWxsIHdob3NlIGhhc2gKZGl2ZXJnZXMgb3IgdGhhdCBmaXJlcyBiZWZvcmUgYGV0YWAuAAAAAAAAAAAAAA9VcGdyYWRlUHJvcG9zZWQAAAAAAQAAAAZ1cGdwcnAAAAAAAAIAAAAAAAAACXdhc21faGFzaAAAAAAAA+4AAAAgAAAAAAAAAAAAAAADZXRhAAAAAAYAAAAAAAAAAQ==",
156
178
  "AAAABQAAAC9FbWl0dGVkIGJ5IGBjYW5jZWxfdXBncmFkZWAgKFBBVVNFUiB2ZXRvIHBhdGgpLgAAAAAAAAAAEFVwZ3JhZGVDYW5jZWxsZWQAAAABAAAABnVwZ2NhbgAAAAAAAQAAAAAAAAAGY2FsbGVyAAAAAAATAAAAAAAAAAE=",
157
179
  "AAAABAAAAAAAAAAAAAAAEFVwZ3JhZGVhYmxlRXJyb3IAAAABAAAAQVdoZW4gbWlncmF0aW9uIGlzIGF0dGVtcHRlZCBidXQgbm90IGFsbG93ZWQgZHVlIHRvIHVwZ3JhZGUgc3RhdGUuAAAAAAAAE01pZ3JhdGlvbk5vdEFsbG93ZWQAAAAETA==",
@@ -165,22 +187,22 @@ export class Client extends ContractClient {
165
187
  "AAAABQAAACpFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGNvbnRyYWN0IGlzIHBhdXNlZC4AAAAAAAAAAAAGUGF1c2VkAAAAAAABAAAABnBhdXNlZAAAAAAAAAAAAAI=",
166
188
  "AAAABQAAACxFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGNvbnRyYWN0IGlzIHVucGF1c2VkLgAAAAAAAAAIVW5wYXVzZWQAAAABAAAACHVucGF1c2VkAAAAAAAAAAI=",
167
189
  "AAAABAAAAAAAAAAAAAAADVBhdXNhYmxlRXJyb3IAAAAAAAACAAAANFRoZSBvcGVyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIGNvbnRyYWN0IGlzIHBhdXNlZC4AAAANRW5mb3JjZWRQYXVzZQAAAAAAA+gAAAA4VGhlIG9wZXJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgY29udHJhY3QgaXMgbm90IHBhdXNlZC4AAAANRXhwZWN0ZWRQYXVzZQAAAAAAA+k=",
168
- "AAAAAgAAACJTdG9yYWdlIGtleSBmb3IgdGhlIHBhdXNhYmxlIHN0YXRlAAAAAAAAAAAAElBhdXNhYmxlU3RvcmFnZUtleQAAAAAAAQAAAAAAAAAySW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbnRyYWN0IGlzIGluIHBhdXNlZCBzdGF0ZS4AAAAAAAZQYXVzZWQAAA==",
169
- "AAAAAQAAAL1FeGVjdXRpb24tYm91bnR5IGFuZCBvcGVuLWZlZSBwYXJhbWV0ZXJzIGNoYXJnZWQgdG8gdHJhZGVycy4KYG9wZW5fZmVlX2Jwc2AgYW5kIGBsaXF1aWRhdGlvbl9ib3VudHlfYnBzYCBhcmUgaW4gYmFzaXMgcG9pbnRzOwpgdHBfc2xfZXhlY3V0aW9uX2ZlZWAgaXMgYSBmbGF0IFVTREMgYW1vdW50IGF0IFBSRUNJU0lPTiBzY2FsZS4AAAAAAAAAAAAACUZlZUNvbmZpZwAAAAAAAAMAAAAAAAAAFmxpcXVpZGF0aW9uX2JvdW50eV9icHMAAAAAAAQAAAAAAAAADG9wZW5fZmVlX2JwcwAAAAQAAAAAAAAAE3RwX3NsX2V4ZWN1dGlvbl9mZWUAAAAACw==",
170
- "AAAAAQAAAHBEZWZpbmVzIGhvdyBwcm90b2NvbCByZXZlbnVlIGlzIHNwbGl0IGJldHdlZW4gcGFydGllcy4KQWxsIHZhbHVlcyBhcmUgaW4gYmFzaXMgcG9pbnRzIChicHMpLiBNdXN0IHN1bSB0byAxMF8wMDAuAAAAAAAAAAlGZWVTcGxpdHMAAAAAAAADAAAAAAAAAAdkZXZfYnBzAAAAAAQAAAAAAAAABmxwX2JwcwAAAAAABAAAAAAAAAAKc3Rha2VyX2JwcwAAAAAABA==",
171
- "AAAAAQAAACtHbG9iYWwgcHJvdG9jb2wgcmlzayBhbmQgdGltaW5nIHBhcmFtZXRlcnMuAAAAAAAAAAAOUHJvdG9jb2xMaW1pdHMAAAAAAAgAAAAAAAAAC2FkbF9wbmxfYnBzAAAAAAQAAAAAAAAAE2FkbF91dGlsaXphdGlvbl9icHMAAAAABAAAAAAAAAARY29vbGRvd25fZHVyYXRpb24AAAAAAAAGAAAAAAAAAA9mdW5kaW5nX2N1dF9icHMAAAAABAAAAAAAAAAZbGlxdWlkYXRpb25fdGhyZXNob2xkX2JwcwAAAAAAAAQAAAAAAAAAFW1heF91dGlsaXphdGlvbl9yYXRpbwAAAAAAAAsAAAAAAAAADm1pbl9jb2xsYXRlcmFsAAAAAAALAAAAAAAAABVtaW5fcG9zaXRpb25fbGlmZXRpbWUAAAAAAAAG",
172
- "AAAAAQAAAElCb3Jyb3cgcmF0ZSBraW5rIGN1cnZlIGFuZCBmdW5kaW5nIHJhdGUgcGFyYW1ldGVycyAoYWxsIGluIGJhc2lzIHBvaW50cykuAAAAAAAAAAAAABBCb3Jyb3dSYXRlQ29uZmlnAAAABQAAAAAAAAAUYmFzZV9ib3Jyb3dfcmF0ZV9icHMAAAALAAAAAAAAABViYXNlX2Z1bmRpbmdfcmF0ZV9icHMAAAAAAAALAAAAAAAAABdvcHRpbWFsX3V0aWxpemF0aW9uX2JwcwAAAAALAAAAAAAAAApzbG9wZTFfYnBzAAAAAAALAAAAAAAAAApzbG9wZTJfYnBzAAAAAAAL"]), options);
190
+ "AAAAAgAAACJTdG9yYWdlIGtleSBmb3IgdGhlIHBhdXNhYmxlIHN0YXRlAAAAAAAAAAAAElBhdXNhYmxlU3RvcmFnZUtleQAAAAAAAQAAAAAAAAAySW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbnRyYWN0IGlzIGluIHBhdXNlZCBzdGF0ZS4AAAAAAAZQYXVzZWQAAA=="]), options);
173
191
  this.options = options;
174
192
  }
175
193
  fromJSON = {
176
194
  migrate: (this.txFromJSON),
177
195
  upgrade: (this.txFromJSON),
178
196
  get_price: (this.txFromJSON),
197
+ get_round: (this.txFromJSON),
198
+ publish_round: (this.txFromJSON),
179
199
  cancel_upgrade: (this.txFromJSON),
200
+ latest_round_id: (this.txFromJSON),
180
201
  propose_upgrade: (this.txFromJSON),
181
202
  bump_oracle_state: (this.txFromJSON),
182
203
  get_oracle_config: (this.txFromJSON),
183
204
  set_oracle_config: (this.txFromJSON),
184
- set_oracle_sources: (this.txFromJSON)
205
+ set_oracle_sources: (this.txFromJSON),
206
+ set_position_manager: (this.txFromJSON)
185
207
  };
186
208
  }