@win-trader/bindings 0.0.1

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.
@@ -0,0 +1,487 @@
1
+ import { Buffer } from "buffer";
2
+ import { AssembledTransaction, Client as ContractClient, ClientOptions as ContractClientOptions, MethodOptions } from "@stellar/stellar-sdk/contract";
3
+ import type { u32, u64, i128 } from "@stellar/stellar-sdk/contract";
4
+ export * from "@stellar/stellar-sdk";
5
+ export * as contract from "@stellar/stellar-sdk/contract";
6
+ export * as rpc from "@stellar/stellar-sdk/rpc";
7
+ export declare const OracleRouterError: {
8
+ 1: {
9
+ message: string;
10
+ };
11
+ 2: {
12
+ message: string;
13
+ };
14
+ 3: {
15
+ message: string;
16
+ };
17
+ /**
18
+ * Every oracle source returned data older than `staleness_threshold`,
19
+ * or returned invalid (zero/negative) prices, or a future timestamp.
20
+ */
21
+ 4: {
22
+ message: string;
23
+ };
24
+ /**
25
+ * Spread between source prices exceeds `max_deviation_bps`.
26
+ */
27
+ 5: {
28
+ message: string;
29
+ };
30
+ /**
31
+ * No SEP-40 oracle sources are configured for the requested symbol.
32
+ */
33
+ 6: {
34
+ message: string;
35
+ };
36
+ /**
37
+ * Cross-contract call to an oracle source failed.
38
+ */
39
+ 7: {
40
+ message: string;
41
+ };
42
+ /**
43
+ * Oracle configuration field is invalid (e.g., zero threshold, out-of-range bps).
44
+ */
45
+ 8: {
46
+ message: string;
47
+ };
48
+ /**
49
+ * Fewer than `min_required_sources` valid prices were returned.
50
+ */
51
+ 9: {
52
+ message: string;
53
+ };
54
+ /**
55
+ * `set_oracle_sources` called with more than `MAX_ORACLE_SOURCES` entries.
56
+ */
57
+ 10: {
58
+ message: string;
59
+ };
60
+ /**
61
+ * Deviation math would overflow on the supplied prices.
62
+ */
63
+ 11: {
64
+ message: string;
65
+ };
66
+ /**
67
+ * `upgrade` rejected — no `propose_upgrade` was made before commit.
68
+ */
69
+ 12: {
70
+ message: string;
71
+ };
72
+ /**
73
+ * `upgrade` rejected — timelock has not elapsed yet.
74
+ */
75
+ 13: {
76
+ message: string;
77
+ };
78
+ /**
79
+ * `upgrade` rejected — `new_wasm_hash` does not match the proposed
80
+ * `PendingUpgrade.wasm_hash`.
81
+ */
82
+ 14: {
83
+ message: string;
84
+ };
85
+ /**
86
+ * A source's `decimals()` differs from `shared::constants::PRICE_DECIMALS`,
87
+ * or the source could not be queried for its scale.
88
+ */
89
+ 15: {
90
+ message: string;
91
+ };
92
+ /**
93
+ * Even-count median averaging would overflow on the supplied prices.
94
+ */
95
+ 16: {
96
+ message: string;
97
+ };
98
+ };
99
+ export type StorageKey = {
100
+ tag: "Initialized";
101
+ values: void;
102
+ } | {
103
+ tag: "ConfigManager";
104
+ values: void;
105
+ } | {
106
+ tag: "OracleConfig";
107
+ values: void;
108
+ } | {
109
+ tag: "Sources";
110
+ values: readonly [string];
111
+ } | {
112
+ tag: "CachedPrice";
113
+ values: readonly [string];
114
+ } | {
115
+ tag: "Version";
116
+ values: void;
117
+ };
118
+ /**
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.
122
+ */
123
+ export interface CachedPrice {
124
+ last_update: u64;
125
+ price: i128;
126
+ }
127
+ /**
128
+ * Represents a single trader's open leveraged position.
129
+ */
130
+ export interface Position {
131
+ /**
132
+ * USDC collateral deposited by the trader.
133
+ */
134
+ collateral: i128;
135
+ /**
136
+ * Global borrow accumulator index at position open (for lazy fee calc).
137
+ */
138
+ entry_borrow_index: i128;
139
+ /**
140
+ * Global funding accumulator index at position open (for lazy fee calc).
141
+ */
142
+ entry_funding_index: i128;
143
+ /**
144
+ * Oracle price at the time the position was opened (scaled by 1e7).
145
+ */
146
+ entry_price: i128;
147
+ /**
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.
149
+ */
150
+ execution_fee_escrow: i128;
151
+ /**
152
+ * True for a long position, false for a short.
153
+ */
154
+ is_long: boolean;
155
+ /**
156
+ * Block timestamp when the position was last increased (anti-front-running lock).
157
+ */
158
+ last_increased_time: u64;
159
+ /**
160
+ * Notional size of the position in USDC.
161
+ */
162
+ size: i128;
163
+ /**
164
+ * Stop-loss price (scaled by 1e7). 0 = not set.
165
+ */
166
+ stop_loss: i128;
167
+ /**
168
+ * Take-profit price (scaled by 1e7). 0 = not set.
169
+ */
170
+ take_profit: i128;
171
+ }
172
+ /**
173
+ * Global market state for a single tradeable asset symbol.
174
+ */
175
+ export interface MarketInfo {
176
+ /**
177
+ * Cumulative borrow fee index (grows monotonically with time).
178
+ */
179
+ acc_borrow_index: i128;
180
+ /**
181
+ * Cumulative funding rate index (signed; positive = longs pay shorts).
182
+ */
183
+ acc_funding_index: i128;
184
+ /**
185
+ * Volume-weighted average entry price of all active long positions.
186
+ */
187
+ global_long_avg_price: i128;
188
+ /**
189
+ * Volume-weighted average entry price of all active short positions.
190
+ */
191
+ global_short_avg_price: i128;
192
+ /**
193
+ * Timestamp of the last keeper index update.
194
+ */
195
+ last_index_update: u64;
196
+ /**
197
+ * Total notional size of all open long positions.
198
+ */
199
+ long_open_interest: i128;
200
+ /**
201
+ * Total notional size of all open short positions.
202
+ */
203
+ short_open_interest: i128;
204
+ }
205
+ /**
206
+ * Global safety thresholds for price validation.
207
+ */
208
+ export interface OracleConfig {
209
+ /**
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).
215
+ */
216
+ cache_duration: u64;
217
+ /**
218
+ * Maximum allowed spread between oracle sources in basis points
219
+ * (e.g., 100 = 1%). Bounded at `shared::constants::MAX_DEVIATION_BPS_CEILING`.
220
+ */
221
+ max_deviation_bps: i128;
222
+ /**
223
+ * Minimum number of source responses that must agree within
224
+ * `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`.
227
+ */
228
+ min_required_sources: u32;
229
+ /**
230
+ * Maximum age of an external SEP-40 price feed before it is rejected
231
+ * as stale (in seconds).
232
+ */
233
+ staleness_threshold: u64;
234
+ }
235
+ /**
236
+ * Data required during a WASM migration. Single definition for all contracts.
237
+ */
238
+ export interface MigrationData {
239
+ version: u32;
240
+ }
241
+ /**
242
+ * Pending WASM upgrade — set by `propose_upgrade`, consumed by `upgrade`
243
+ * (cleared atomically on a successful install), or cleared by `cancel_upgrade`.
244
+ * Single shape across every protocol contract; all four contracts store it at
245
+ * the shared `pending_upgrade` Symbol key in their own instance storage (see
246
+ * `interfaces::upgrade::pending_upgrade_key`). `upgrade` refuses to install
247
+ * unless `pending.wasm_hash` matches the supplied hash and `now >= eta`.
248
+ */
249
+ export interface PendingUpgrade {
250
+ eta: u64;
251
+ wasm_hash: Buffer;
252
+ }
253
+ export declare const UpgradeableError: {
254
+ /**
255
+ * When migration is attempted but not allowed due to upgrade state.
256
+ */
257
+ 1100: {
258
+ message: string;
259
+ };
260
+ };
261
+ export declare const MerkleDistributorError: {
262
+ /**
263
+ * The merkle root is not set.
264
+ */
265
+ 1300: {
266
+ message: string;
267
+ };
268
+ /**
269
+ * The provided index was already claimed.
270
+ */
271
+ 1301: {
272
+ message: string;
273
+ };
274
+ /**
275
+ * The proof is invalid.
276
+ */
277
+ 1302: {
278
+ message: string;
279
+ };
280
+ };
281
+ /**
282
+ * Storage keys for the data associated with `MerkleDistributor`
283
+ */
284
+ export type MerkleDistributorStorageKey = {
285
+ tag: "Root";
286
+ values: void;
287
+ } | {
288
+ tag: "Claimed";
289
+ values: readonly [u32];
290
+ };
291
+ /**
292
+ * Rounding direction for division operations
293
+ */
294
+ export type Rounding = {
295
+ tag: "Floor";
296
+ values: void;
297
+ } | {
298
+ tag: "Ceil";
299
+ values: void;
300
+ } | {
301
+ tag: "Truncate";
302
+ values: void;
303
+ };
304
+ export declare const SorobanFixedPointError: {
305
+ /**
306
+ * Arithmetic overflow occurred
307
+ */
308
+ 1500: {
309
+ message: string;
310
+ };
311
+ /**
312
+ * Division by zero
313
+ */
314
+ 1501: {
315
+ message: string;
316
+ };
317
+ };
318
+ export declare const CryptoError: {
319
+ /**
320
+ * The merkle proof length is out of bounds.
321
+ */
322
+ 1400: {
323
+ message: string;
324
+ };
325
+ /**
326
+ * The index of the leaf is out of bounds.
327
+ */
328
+ 1401: {
329
+ message: string;
330
+ };
331
+ /**
332
+ * No data in hasher state.
333
+ */
334
+ 1402: {
335
+ message: string;
336
+ };
337
+ };
338
+ export declare const PausableError: {
339
+ /**
340
+ * The operation failed because the contract is paused.
341
+ */
342
+ 1000: {
343
+ message: string;
344
+ };
345
+ /**
346
+ * The operation failed because the contract is not paused.
347
+ */
348
+ 1001: {
349
+ message: string;
350
+ };
351
+ };
352
+ /**
353
+ * Storage key for the pausable state
354
+ */
355
+ export type PausableStorageKey = {
356
+ tag: "Paused";
357
+ values: void;
358
+ };
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
+ export interface Client {
402
+ /**
403
+ * 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.
404
+ */
405
+ migrate: ({ migration_data, operator }: {
406
+ migration_data: MigrationData;
407
+ operator: string;
408
+ }, options?: MethodOptions) => Promise<AssembledTransaction<null>>;
409
+ /**
410
+ * Construct and simulate a 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.
411
+ */
412
+ upgrade: ({ new_wasm_hash, operator }: {
413
+ new_wasm_hash: Buffer;
414
+ operator: string;
415
+ }, options?: MethodOptions) => Promise<AssembledTransaction<null>>;
416
+ /**
417
+ * Construct and simulate a get_price 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.
418
+ */
419
+ get_price: ({ symbol }: {
420
+ symbol: string;
421
+ }, options?: MethodOptions) => Promise<AssembledTransaction<i128>>;
422
+ /**
423
+ * 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
+ */
425
+ cancel_upgrade: ({ caller }: {
426
+ caller: string;
427
+ }, options?: MethodOptions) => Promise<AssembledTransaction<null>>;
428
+ /**
429
+ * 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
+ */
431
+ propose_upgrade: ({ caller, wasm_hash }: {
432
+ caller: string;
433
+ wasm_hash: Buffer;
434
+ }, options?: MethodOptions) => Promise<AssembledTransaction<null>>;
435
+ /**
436
+ * Construct and simulate a bump_oracle_state 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.
437
+ */
438
+ bump_oracle_state: (options?: MethodOptions) => Promise<AssembledTransaction<null>>;
439
+ /**
440
+ * Construct and simulate a get_oracle_config 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.
441
+ */
442
+ get_oracle_config: (options?: MethodOptions) => Promise<AssembledTransaction<OracleConfig>>;
443
+ /**
444
+ * Construct and simulate a set_oracle_config 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.
445
+ */
446
+ set_oracle_config: ({ caller, config }: {
447
+ caller: string;
448
+ config: OracleConfig;
449
+ }, options?: MethodOptions) => Promise<AssembledTransaction<null>>;
450
+ /**
451
+ * Construct and simulate a set_oracle_sources 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.
452
+ */
453
+ set_oracle_sources: ({ caller, symbol, sources }: {
454
+ caller: string;
455
+ symbol: string;
456
+ sources: Array<string>;
457
+ }, options?: MethodOptions) => Promise<AssembledTransaction<null>>;
458
+ }
459
+ export declare class Client extends ContractClient {
460
+ readonly options: ContractClientOptions;
461
+ static deploy<T = Client>(
462
+ /** Constructor/Initialization Args for the contract's `__constructor` method */
463
+ { config_manager_address }: {
464
+ config_manager_address: string;
465
+ },
466
+ /** Options for initializing a Client as well as for calling a method, with extras specific to deploying. */
467
+ options: MethodOptions & Omit<ContractClientOptions, "contractId"> & {
468
+ /** The hash of the Wasm blob, which must already be installed on-chain. */
469
+ wasmHash: Buffer | string;
470
+ /** Salt used to generate the contract's ID. Passed through to {@link Operation.createCustomContract}. Default: random. */
471
+ salt?: Buffer | Uint8Array;
472
+ /** The format used to decode `wasmHash`, if it's provided as a string. */
473
+ format?: "hex" | "base64";
474
+ }): Promise<AssembledTransaction<T>>;
475
+ constructor(options: ContractClientOptions);
476
+ readonly fromJSON: {
477
+ migrate: (json: string) => AssembledTransaction<null>;
478
+ upgrade: (json: string) => AssembledTransaction<null>;
479
+ get_price: (json: string) => AssembledTransaction<bigint>;
480
+ cancel_upgrade: (json: string) => AssembledTransaction<null>;
481
+ propose_upgrade: (json: string) => AssembledTransaction<null>;
482
+ bump_oracle_state: (json: string) => AssembledTransaction<null>;
483
+ get_oracle_config: (json: string) => AssembledTransaction<OracleConfig>;
484
+ set_oracle_config: (json: string) => AssembledTransaction<null>;
485
+ set_oracle_sources: (json: string) => AssembledTransaction<null>;
486
+ };
487
+ }
@@ -0,0 +1,186 @@
1
+ import { Buffer } from "buffer";
2
+ import { Client as ContractClient, Spec as ContractSpec, } from "@stellar/stellar-sdk/contract";
3
+ export * from "@stellar/stellar-sdk";
4
+ export * as contract from "@stellar/stellar-sdk/contract";
5
+ export * as rpc from "@stellar/stellar-sdk/rpc";
6
+ if (typeof window !== "undefined") {
7
+ //@ts-ignore Buffer exists
8
+ window.Buffer = window.Buffer || Buffer;
9
+ }
10
+ export const OracleRouterError = {
11
+ 1: { message: "AlreadyInitialized" },
12
+ 2: { message: "NotInitialized" },
13
+ 3: { message: "Unauthorized" },
14
+ /**
15
+ * Every oracle source returned data older than `staleness_threshold`,
16
+ * or returned invalid (zero/negative) prices, or a future timestamp.
17
+ */
18
+ 4: { message: "StalePrice" },
19
+ /**
20
+ * Spread between source prices exceeds `max_deviation_bps`.
21
+ */
22
+ 5: { message: "PriceDeviationTooHigh" },
23
+ /**
24
+ * No SEP-40 oracle sources are configured for the requested symbol.
25
+ */
26
+ 6: { message: "NoPriceSources" },
27
+ /**
28
+ * Cross-contract call to an oracle source failed.
29
+ */
30
+ 7: { message: "PriceFetchFailed" },
31
+ /**
32
+ * Oracle configuration field is invalid (e.g., zero threshold, out-of-range bps).
33
+ */
34
+ 8: { message: "InvalidConfig" },
35
+ /**
36
+ * Fewer than `min_required_sources` valid prices were returned.
37
+ */
38
+ 9: { message: "InsufficientSources" },
39
+ /**
40
+ * `set_oracle_sources` called with more than `MAX_ORACLE_SOURCES` entries.
41
+ */
42
+ 10: { message: "TooManySources" },
43
+ /**
44
+ * Deviation math would overflow on the supplied prices.
45
+ */
46
+ 11: { message: "DeviationOverflow" },
47
+ /**
48
+ * `upgrade` rejected — no `propose_upgrade` was made before commit.
49
+ */
50
+ 12: { message: "NoPendingUpgrade" },
51
+ /**
52
+ * `upgrade` rejected — timelock has not elapsed yet.
53
+ */
54
+ 13: { message: "UpgradeTimelockNotElapsed" },
55
+ /**
56
+ * `upgrade` rejected — `new_wasm_hash` does not match the proposed
57
+ * `PendingUpgrade.wasm_hash`.
58
+ */
59
+ 14: { message: "UpgradeHashMismatch" },
60
+ /**
61
+ * A source's `decimals()` differs from `shared::constants::PRICE_DECIMALS`,
62
+ * or the source could not be queried for its scale.
63
+ */
64
+ 15: { message: "InvalidSourceDecimals" },
65
+ /**
66
+ * Even-count median averaging would overflow on the supplied prices.
67
+ */
68
+ 16: { message: "MedianOverflow" }
69
+ };
70
+ export const UpgradeableError = {
71
+ /**
72
+ * When migration is attempted but not allowed due to upgrade state.
73
+ */
74
+ 1100: { message: "MigrationNotAllowed" }
75
+ };
76
+ export const MerkleDistributorError = {
77
+ /**
78
+ * The merkle root is not set.
79
+ */
80
+ 1300: { message: "RootNotSet" },
81
+ /**
82
+ * The provided index was already claimed.
83
+ */
84
+ 1301: { message: "IndexAlreadyClaimed" },
85
+ /**
86
+ * The proof is invalid.
87
+ */
88
+ 1302: { message: "InvalidProof" }
89
+ };
90
+ export const SorobanFixedPointError = {
91
+ /**
92
+ * Arithmetic overflow occurred
93
+ */
94
+ 1500: { message: "Overflow" },
95
+ /**
96
+ * Division by zero
97
+ */
98
+ 1501: { message: "DivisionByZero" }
99
+ };
100
+ export const CryptoError = {
101
+ /**
102
+ * The merkle proof length is out of bounds.
103
+ */
104
+ 1400: { message: "MerkleProofOutOfBounds" },
105
+ /**
106
+ * The index of the leaf is out of bounds.
107
+ */
108
+ 1401: { message: "MerkleIndexOutOfBounds" },
109
+ /**
110
+ * No data in hasher state.
111
+ */
112
+ 1402: { message: "HasherEmptyState" }
113
+ };
114
+ export const PausableError = {
115
+ /**
116
+ * The operation failed because the contract is paused.
117
+ */
118
+ 1000: { message: "EnforcedPause" },
119
+ /**
120
+ * The operation failed because the contract is not paused.
121
+ */
122
+ 1001: { message: "ExpectedPause" }
123
+ };
124
+ export class Client extends ContractClient {
125
+ options;
126
+ static async deploy(
127
+ /** Constructor/Initialization Args for the contract's `__constructor` method */
128
+ { config_manager_address },
129
+ /** Options for initializing a Client as well as for calling a method, with extras specific to deploying. */
130
+ options) {
131
+ return ContractClient.deploy({ config_manager_address }, options);
132
+ }
133
+ constructor(options) {
134
+ super(new ContractSpec(["AAAABAAAAAAAAAAAAAAAEU9yYWNsZVJvdXRlckVycm9yAAAAAAAAEAAAAAAAAAASQWxyZWFkeUluaXRpYWxpemVkAAAAAAABAAAAAAAAAA5Ob3RJbml0aWFsaXplZAAAAAAAAgAAAAAAAAAMVW5hdXRob3JpemVkAAAAAwAAAIZFdmVyeSBvcmFjbGUgc291cmNlIHJldHVybmVkIGRhdGEgb2xkZXIgdGhhbiBgc3RhbGVuZXNzX3RocmVzaG9sZGAsCm9yIHJldHVybmVkIGludmFsaWQgKHplcm8vbmVnYXRpdmUpIHByaWNlcywgb3IgYSBmdXR1cmUgdGltZXN0YW1wLgAAAAAAClN0YWxlUHJpY2UAAAAAAAQAAAA5U3ByZWFkIGJldHdlZW4gc291cmNlIHByaWNlcyBleGNlZWRzIGBtYXhfZGV2aWF0aW9uX2Jwc2AuAAAAAAAAFVByaWNlRGV2aWF0aW9uVG9vSGlnaAAAAAAAAAUAAABBTm8gU0VQLTQwIG9yYWNsZSBzb3VyY2VzIGFyZSBjb25maWd1cmVkIGZvciB0aGUgcmVxdWVzdGVkIHN5bWJvbC4AAAAAAAAOTm9QcmljZVNvdXJjZXMAAAAAAAYAAAAvQ3Jvc3MtY29udHJhY3QgY2FsbCB0byBhbiBvcmFjbGUgc291cmNlIGZhaWxlZC4AAAAAEFByaWNlRmV0Y2hGYWlsZWQAAAAHAAAAT09yYWNsZSBjb25maWd1cmF0aW9uIGZpZWxkIGlzIGludmFsaWQgKGUuZy4sIHplcm8gdGhyZXNob2xkLCBvdXQtb2YtcmFuZ2UgYnBzKS4AAAAADUludmFsaWRDb25maWcAAAAAAAAIAAAAPUZld2VyIHRoYW4gYG1pbl9yZXF1aXJlZF9zb3VyY2VzYCB2YWxpZCBwcmljZXMgd2VyZSByZXR1cm5lZC4AAAAAAAATSW5zdWZmaWNpZW50U291cmNlcwAAAAAJAAAASGBzZXRfb3JhY2xlX3NvdXJjZXNgIGNhbGxlZCB3aXRoIG1vcmUgdGhhbiBgTUFYX09SQUNMRV9TT1VSQ0VTYCBlbnRyaWVzLgAAAA5Ub29NYW55U291cmNlcwAAAAAACgAAADVEZXZpYXRpb24gbWF0aCB3b3VsZCBvdmVyZmxvdyBvbiB0aGUgc3VwcGxpZWQgcHJpY2VzLgAAAAAAABFEZXZpYXRpb25PdmVyZmxvdwAAAAAAAAsAAABDYHVwZ3JhZGVgIHJlamVjdGVkIOKAlCBubyBgcHJvcG9zZV91cGdyYWRlYCB3YXMgbWFkZSBiZWZvcmUgY29tbWl0LgAAAAAQTm9QZW5kaW5nVXBncmFkZQAAAAwAAAA0YHVwZ3JhZGVgIHJlamVjdGVkIOKAlCB0aW1lbG9jayBoYXMgbm90IGVsYXBzZWQgeWV0LgAAABlVcGdyYWRlVGltZWxvY2tOb3RFbGFwc2VkAAAAAAAADQAAAF5gdXBncmFkZWAgcmVqZWN0ZWQg4oCUIGBuZXdfd2FzbV9oYXNoYCBkb2VzIG5vdCBtYXRjaCB0aGUgcHJvcG9zZWQKYFBlbmRpbmdVcGdyYWRlLndhc21faGFzaGAuAAAAAAATVXBncmFkZUhhc2hNaXNtYXRjaAAAAAAOAAAAe0Egc291cmNlJ3MgYGRlY2ltYWxzKClgIGRpZmZlcnMgZnJvbSBgc2hhcmVkOjpjb25zdGFudHM6OlBSSUNFX0RFQ0lNQUxTYCwKb3IgdGhlIHNvdXJjZSBjb3VsZCBub3QgYmUgcXVlcmllZCBmb3IgaXRzIHNjYWxlLgAAAAAVSW52YWxpZFNvdXJjZURlY2ltYWxzAAAAAAAADwAAAEJFdmVuLWNvdW50IG1lZGlhbiBhdmVyYWdpbmcgd291bGQgb3ZlcmZsb3cgb24gdGhlIHN1cHBsaWVkIHByaWNlcy4AAAAAAA5NZWRpYW5PdmVyZmxvdwAAAAAAEA==",
135
+ "AAAABQAAAAAAAAAAAAAAClByaWNlRmV0Y2gAAAAAAAEAAAAFcHJpY2UAAAAAAAADAAAAAAAAAAZzeW1ib2wAAAAAABEAAAABAAAAAAAAAAVwcmljZQAAAAAAAAsAAAAAAAAAAAAAAAl0aW1lc3RhbXAAAAAAAAAGAAAAAAAAAAE=",
136
+ "AAAABQAAAIdFbWl0dGVkIGJ5IGBzZXRfb3JhY2xlX2NvbmZpZ2Agd2hlbmV2ZXIgdGhlIGdsb2JhbCBzYWZldHkgdGhyZXNob2xkcwpjaGFuZ2UuIE1pcnJvcnMgZXZlcnkgZmllbGQgb2YgdGhlIG9uLWNoYWluIGBPcmFjbGVDb25maWdgIHN0cnVjdC4AAAAAAAAAABJPcmFjbGVDb25maWdVcGRhdGUAAAAAAAEAAAAGb3JjY2ZnAAAAAAAEAAAAAAAAAAlzdGFsZW5lc3MAAAAAAAAGAAAAAAAAAAAAAAAJZGV2aWF0aW9uAAAAAAAACwAAAAAAAAAAAAAADmNhY2hlX2R1cmF0aW9uAAAAAAAGAAAAAAAAAAAAAAAUbWluX3JlcXVpcmVkX3NvdXJjZXMAAAAEAAAAAAAAAAE=",
137
+ "AAAABQAAAGRFbWl0dGVkIGJ5IGBzZXRfb3JhY2xlX3NvdXJjZXNgIHNvIG9mZi1jaGFpbiBtb25pdG9yaW5nIGNhbiBkZXRlY3QgZXZlcnkKcm90YXRpb24gb2YgdGhlIHNvdXJjZSBzZXQuAAAAAAAAABNPcmFjbGVTb3VyY2VzVXBkYXRlAAAAAAEAAAAGb3Jjc3JjAAAAAAACAAAAAAAAAAZzeW1ib2wAAAAAABEAAAABAAAAAAAAAAdzb3VyY2VzAAAAA+oAAAATAAAAAAAAAAE=",
138
+ "AAAAAgAAAAAAAAAAAAAAClN0b3JhZ2VLZXkAAAAAAAYAAAAAAAAAFEluaXRpYWxpemF0aW9uIGZsYWcuAAAAC0luaXRpYWxpemVkAAAAAAAAAAAdTGlua2VkIENvbmZpZ01hbmFnZXIgYWRkcmVzcy4AAAAAAAANQ29uZmlnTWFuYWdlcgAAAAAAAAAAAAAcR2xvYmFsIG9yYWNsZSBjb25maWd1cmF0aW9uLgAAAAxPcmFjbGVDb25maWcAAAABAAAAO1Blci1zeW1ib2wgZmxhdCBzb3VyY2UgbGlzdCAobm8gcHJpbWFyeS9zZWNvbmRhcnkgdGllcmluZykuAAAAAAdTb3VyY2VzAAAAAAEAAAARAAAAAQAAACNQZXItc3ltYm9sIGNhY2hlZCBhZ2dyZWdhdGVkIHByaWNlLgAAAAALQ2FjaGVkUHJpY2UAAAAAAQAAABEAAAAAAAAASEN1cnJlbnQgY29udHJhY3QgdmVyc2lvbiDigJQgd3JpdHRlbiBieSBgX21pZ3JhdGVgIGFmdGVyIGEgV0FTTSB1cGdyYWRlLgAAAAdWZXJzaW9uAA==",
139
+ "AAAAAQAAAL1DYWNoZWQgYWdncmVnYXRlZCBtZWRpYW4gcHJpY2UgZm9yIGEgc3ltYm9sIOKAlCBwcm9kdWNlZCBieQpgZmV0Y2hfYW5kX3ZhbGlkYXRlX3ByaWNlYCBvbiBhIGNhY2hlIG1pc3MsIGNvbnN1bWVkIGJ5IHRoZSBjYWNoZS1oaXQKYnJhbmNoIG9uIHN1YnNlcXVlbnQgY2FsbHMgd2l0aGluIGBjYWNoZV9kdXJhdGlvbmAgc2Vjb25kcy4AAAAAAAAAAAAAC0NhY2hlZFByaWNlAAAAAAIAAAAAAAAAC2xhc3RfdXBkYXRlAAAAAAYAAAAAAAAABXByaWNlAAAAAAAACw==",
140
+ "AAAAAAAAAAAAAAAHbWlncmF0ZQAAAAACAAAAAAAAAA5taWdyYXRpb25fZGF0YQAAAAAH0AAAAA1NaWdyYXRpb25EYXRhAAAAAAAAAAAAAAhvcGVyYXRvcgAAABMAAAAA",
141
+ "AAAAAAAAAAAAAAAHdXBncmFkZQAAAAACAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAAAAAAACG9wZXJhdG9yAAAAEwAAAAA=",
142
+ "AAAAAAAAAAAAAAAJZ2V0X3ByaWNlAAAAAAAAAQAAAAAAAAAGc3ltYm9sAAAAAAARAAAAAQAAAAs=",
143
+ "AAAAAAAAATZBdG9taWMtd2l0aC1kZXBsb3kgaW5pdGlhbGl6YXRpb24gKFNvcm9iYW4gY29uc3RydWN0b3IpLiBCaW5kcyB0aGUKbGlua2VkIENvbmZpZ01hbmFnZXIgb25jZSwgaW5zaWRlIHRoZSBkZXBsb3kgdHJhbnNhY3Rpb24sIHNvIG5vIHRoaXJkCnBhcnR5IGNhbiBmcm9udC1ydW4gaW5pdCBhbmQgcG9pbnQgdGhlIHJvdXRlciBhdCBhIG1hbGljaW91cyByb2xlCmF1dGhvcml0eS4gVGhlIHJvdXRlciBzdG9yZXMgbm8gYWRtaW4gb2YgaXRzIG93biDigJQgZXZlcnkgcm9sZSBjaGVjawpjcm9zcy1jYWxscyB0aGUgbGlua2VkIENvbmZpZ01hbmFnZXIuAAAAAAANX19jb25zdHJ1Y3RvcgAAAAAAAAEAAAAAAAAAFmNvbmZpZ19tYW5hZ2VyX2FkZHJlc3MAAAAAABMAAAAA",
144
+ "AAAAAAAAAAAAAAAOY2FuY2VsX3VwZ3JhZGUAAAAAAAEAAAAAAAAABmNhbGxlcgAAAAAAEwAAAAA=",
145
+ "AAAAAAAAAAAAAAAPcHJvcG9zZV91cGdyYWRlAAAAAAIAAAAAAAAABmNhbGxlcgAAAAAAEwAAAAAAAAAJd2FzbV9oYXNoAAAAAAAD7gAAACAAAAAA",
146
+ "AAAAAAAAAAAAAAARYnVtcF9vcmFjbGVfc3RhdGUAAAAAAAAAAAAAAA==",
147
+ "AAAAAAAAAAAAAAARZ2V0X29yYWNsZV9jb25maWcAAAAAAAAAAAAAAQAAB9AAAAAMT3JhY2xlQ29uZmln",
148
+ "AAAAAAAAAAAAAAARc2V0X29yYWNsZV9jb25maWcAAAAAAAACAAAAAAAAAAZjYWxsZXIAAAAAABMAAAAAAAAABmNvbmZpZwAAAAAH0AAAAAxPcmFjbGVDb25maWcAAAAA",
149
+ "AAAAAAAAAAAAAAASc2V0X29yYWNsZV9zb3VyY2VzAAAAAAADAAAAAAAAAAZjYWxsZXIAAAAAABMAAAAAAAAABnN5bWJvbAAAAAAAEQAAAAAAAAAHc291cmNlcwAAAAPqAAAAEwAAAAA=",
150
+ "AAAAAQAAADVSZXByZXNlbnRzIGEgc2luZ2xlIHRyYWRlcidzIG9wZW4gbGV2ZXJhZ2VkIHBvc2l0aW9uLgAAAAAAAAAAAAAIUG9zaXRpb24AAAAKAAAAKFVTREMgY29sbGF0ZXJhbCBkZXBvc2l0ZWQgYnkgdGhlIHRyYWRlci4AAAAKY29sbGF0ZXJhbAAAAAAACwAAAEVHbG9iYWwgYm9ycm93IGFjY3VtdWxhdG9yIGluZGV4IGF0IHBvc2l0aW9uIG9wZW4gKGZvciBsYXp5IGZlZSBjYWxjKS4AAAAAAAASZW50cnlfYm9ycm93X2luZGV4AAAAAAALAAAARkdsb2JhbCBmdW5kaW5nIGFjY3VtdWxhdG9yIGluZGV4IGF0IHBvc2l0aW9uIG9wZW4gKGZvciBsYXp5IGZlZSBjYWxjKS4AAAAAABNlbnRyeV9mdW5kaW5nX2luZGV4AAAAAAsAAABBT3JhY2xlIHByaWNlIGF0IHRoZSB0aW1lIHRoZSBwb3NpdGlvbiB3YXMgb3BlbmVkIChzY2FsZWQgYnkgMWU3KS4AAAAAAAALZW50cnlfcHJpY2UAAAAACwAAAIxGbGF0IFVTREMgZmVlIGVzY3Jvd2VkIHdoZW4gVFAgb3IgU0wgaXMgc2V0LiBQYWlkIHRvIGV4ZWN1dG9yIG9uIHRyaWdnZXIsIHJlZnVuZGVkIG9uIHVzZXIgY2xvc2UgLyBBREwsIGZvcmZlaXRlZCB0byByZXZlbnVlIG9uIGxpcXVpZGF0aW9uLgAAABRleGVjdXRpb25fZmVlX2VzY3JvdwAAAAsAAAAsVHJ1ZSBmb3IgYSBsb25nIHBvc2l0aW9uLCBmYWxzZSBmb3IgYSBzaG9ydC4AAAAHaXNfbG9uZwAAAAABAAAAT0Jsb2NrIHRpbWVzdGFtcCB3aGVuIHRoZSBwb3NpdGlvbiB3YXMgbGFzdCBpbmNyZWFzZWQgKGFudGktZnJvbnQtcnVubmluZyBsb2NrKS4AAAAAE2xhc3RfaW5jcmVhc2VkX3RpbWUAAAAABgAAACZOb3Rpb25hbCBzaXplIG9mIHRoZSBwb3NpdGlvbiBpbiBVU0RDLgAAAAAABHNpemUAAAALAAAALVN0b3AtbG9zcyBwcmljZSAoc2NhbGVkIGJ5IDFlNykuIDAgPSBub3Qgc2V0LgAAAAAAAAlzdG9wX2xvc3MAAAAAAAALAAAAL1Rha2UtcHJvZml0IHByaWNlIChzY2FsZWQgYnkgMWU3KS4gMCA9IG5vdCBzZXQuAAAAAAt0YWtlX3Byb2ZpdAAAAAAL",
151
+ "AAAAAQAAADhHbG9iYWwgbWFya2V0IHN0YXRlIGZvciBhIHNpbmdsZSB0cmFkZWFibGUgYXNzZXQgc3ltYm9sLgAAAAAAAAAKTWFya2V0SW5mbwAAAAAABwAAADxDdW11bGF0aXZlIGJvcnJvdyBmZWUgaW5kZXggKGdyb3dzIG1vbm90b25pY2FsbHkgd2l0aCB0aW1lKS4AAAAQYWNjX2JvcnJvd19pbmRleAAAAAsAAABEQ3VtdWxhdGl2ZSBmdW5kaW5nIHJhdGUgaW5kZXggKHNpZ25lZDsgcG9zaXRpdmUgPSBsb25ncyBwYXkgc2hvcnRzKS4AAAARYWNjX2Z1bmRpbmdfaW5kZXgAAAAAAAALAAAAQVZvbHVtZS13ZWlnaHRlZCBhdmVyYWdlIGVudHJ5IHByaWNlIG9mIGFsbCBhY3RpdmUgbG9uZyBwb3NpdGlvbnMuAAAAAAAAFWdsb2JhbF9sb25nX2F2Z19wcmljZQAAAAAAAAsAAABCVm9sdW1lLXdlaWdodGVkIGF2ZXJhZ2UgZW50cnkgcHJpY2Ugb2YgYWxsIGFjdGl2ZSBzaG9ydCBwb3NpdGlvbnMuAAAAAAAWZ2xvYmFsX3Nob3J0X2F2Z19wcmljZQAAAAAACwAAACpUaW1lc3RhbXAgb2YgdGhlIGxhc3Qga2VlcGVyIGluZGV4IHVwZGF0ZS4AAAAAABFsYXN0X2luZGV4X3VwZGF0ZQAAAAAAAAYAAAAvVG90YWwgbm90aW9uYWwgc2l6ZSBvZiBhbGwgb3BlbiBsb25nIHBvc2l0aW9ucy4AAAAAEmxvbmdfb3Blbl9pbnRlcmVzdAAAAAAACwAAADBUb3RhbCBub3Rpb25hbCBzaXplIG9mIGFsbCBvcGVuIHNob3J0IHBvc2l0aW9ucy4AAAATc2hvcnRfb3Blbl9pbnRlcmVzdAAAAAAL",
152
+ "AAAAAQAAAC5HbG9iYWwgc2FmZXR5IHRocmVzaG9sZHMgZm9yIHByaWNlIHZhbGlkYXRpb24uAAAAAAAAAAAADE9yYWNsZUNvbmZpZwAAAAQAAAEkSG93IGxvbmcgYSBjYWNoZWQgYWdncmVnYXRlZCBwcmljZSByZW1haW5zIHZhbGlkIChpbiBzZWNvbmRzKS4gQQpgZ2V0X3ByaWNlYCBjYWxsIHdpdGhpbiB0aGlzIHdpbmRvdyBvZiB0aGUgbGFzdCBmZXRjaCByZXR1cm5zIHRoZQpjYWNoZWQgdmFsdWUgd2l0aG91dCByZS1xdWVyeWluZyBzb3VyY2VzLiBNdXN0IGJlID4gMCBhbmQKPD0gYHN0YWxlbmVzc190aHJlc2hvbGRgIChvdGhlcndpc2UgdGhlIGNhY2hlIGNvdWxkIG91dGxpdmUgYSBmcmVzaApzb3VyY2UgcHJpY2UgYW5kIHNlcnZlIHN0YWxlIGRhdGEpLgAAAA5jYWNoZV9kdXJhdGlvbgAAAAAABgAAAIpNYXhpbXVtIGFsbG93ZWQgc3ByZWFkIGJldHdlZW4gb3JhY2xlIHNvdXJjZXMgaW4gYmFzaXMgcG9pbnRzCihlLmcuLCAxMDAgPSAxJSkuIEJvdW5kZWQgYXQgYHNoYXJlZDo6Y29uc3RhbnRzOjpNQVhfREVWSUFUSU9OX0JQU19DRUlMSU5HYC4AAAAAABFtYXhfZGV2aWF0aW9uX2JwcwAAAAAAAAsAAADjTWluaW11bSBudW1iZXIgb2Ygc291cmNlIHJlc3BvbnNlcyB0aGF0IG11c3QgYWdyZWUgd2l0aGluCmBtYXhfZGV2aWF0aW9uX2Jwc2AgZm9yIE9yYWNsZVJvdXRlciB0byByZXR1cm4gYSBwcmljZS4gRmxvb3JlZCBhdApgc2hhcmVkOjpjb25zdGFudHM6Ok1JTl9SRVFVSVJFRF9TT1VSQ0VTX0ZMT09SYCwgY2VpbGluZ2VkIGF0CmBzaGFyZWQ6OmNvbnN0YW50czo6TUFYX09SQUNMRV9TT1VSQ0VTYC4AAAAAFG1pbl9yZXF1aXJlZF9zb3VyY2VzAAAABAAAAFlNYXhpbXVtIGFnZSBvZiBhbiBleHRlcm5hbCBTRVAtNDAgcHJpY2UgZmVlZCBiZWZvcmUgaXQgaXMgcmVqZWN0ZWQKYXMgc3RhbGUgKGluIHNlY29uZHMpLgAAAAAAABNzdGFsZW5lc3NfdGhyZXNob2xkAAAAAAY=",
153
+ "AAAAAQAAAEtEYXRhIHJlcXVpcmVkIGR1cmluZyBhIFdBU00gbWlncmF0aW9uLiBTaW5nbGUgZGVmaW5pdGlvbiBmb3IgYWxsIGNvbnRyYWN0cy4AAAAAAAAAAA1NaWdyYXRpb25EYXRhAAAAAAAAAQAAAAAAAAAHdmVyc2lvbgAAAAAE",
154
+ "AAAAAQAAAb5QZW5kaW5nIFdBU00gdXBncmFkZSDigJQgc2V0IGJ5IGBwcm9wb3NlX3VwZ3JhZGVgLCBjb25zdW1lZCBieSBgdXBncmFkZWAKKGNsZWFyZWQgYXRvbWljYWxseSBvbiBhIHN1Y2Nlc3NmdWwgaW5zdGFsbCksIG9yIGNsZWFyZWQgYnkgYGNhbmNlbF91cGdyYWRlYC4KU2luZ2xlIHNoYXBlIGFjcm9zcyBldmVyeSBwcm90b2NvbCBjb250cmFjdDsgYWxsIGZvdXIgY29udHJhY3RzIHN0b3JlIGl0IGF0CnRoZSBzaGFyZWQgYHBlbmRpbmdfdXBncmFkZWAgU3ltYm9sIGtleSBpbiB0aGVpciBvd24gaW5zdGFuY2Ugc3RvcmFnZSAoc2VlCmBpbnRlcmZhY2VzOjp1cGdyYWRlOjpwZW5kaW5nX3VwZ3JhZGVfa2V5YCkuIGB1cGdyYWRlYCByZWZ1c2VzIHRvIGluc3RhbGwKdW5sZXNzIGBwZW5kaW5nLndhc21faGFzaGAgbWF0Y2hlcyB0aGUgc3VwcGxpZWQgaGFzaCBhbmQgYG5vdyA+PSBldGFgLgAAAAAAAAAAAA5QZW5kaW5nVXBncmFkZQAAAAAAAgAAAAAAAAADZXRhAAAAAAYAAAAAAAAACXdhc21faGFzaAAAAAAAA+4AAAAg",
155
+ "AAAABQAAALVFbWl0dGVkIGJ5IGBwcm9wb3NlX3VwZ3JhZGVgLiBPZmYtY2hhaW4gbW9uaXRvcmluZyByZWNvcmRzIHRoZSBwcm9wb3NlZApgd2FzbV9oYXNoYCArIGBldGFgIGFuZCBmbGFncyBhbnkgc3Vic2VxdWVudCBgdXBncmFkZSgpYCBjYWxsIHdob3NlIGhhc2gKZGl2ZXJnZXMgb3IgdGhhdCBmaXJlcyBiZWZvcmUgYGV0YWAuAAAAAAAAAAAAAA9VcGdyYWRlUHJvcG9zZWQAAAAAAQAAAAZ1cGdwcnAAAAAAAAIAAAAAAAAACXdhc21faGFzaAAAAAAAA+4AAAAgAAAAAAAAAAAAAAADZXRhAAAAAAYAAAAAAAAAAQ==",
156
+ "AAAABQAAAC9FbWl0dGVkIGJ5IGBjYW5jZWxfdXBncmFkZWAgKFBBVVNFUiB2ZXRvIHBhdGgpLgAAAAAAAAAAEFVwZ3JhZGVDYW5jZWxsZWQAAAABAAAABnVwZ2NhbgAAAAAAAQAAAAAAAAAGY2FsbGVyAAAAAAATAAAAAAAAAAE=",
157
+ "AAAABAAAAAAAAAAAAAAAEFVwZ3JhZGVhYmxlRXJyb3IAAAABAAAAQVdoZW4gbWlncmF0aW9uIGlzIGF0dGVtcHRlZCBidXQgbm90IGFsbG93ZWQgZHVlIHRvIHVwZ3JhZGUgc3RhdGUuAAAAAAAAE01pZ3JhdGlvbk5vdEFsbG93ZWQAAAAETA==",
158
+ "AAAABQAAACpFdmVudCBlbWl0dGVkIHdoZW4gdGhlIG1lcmtsZSByb290IGlzIHNldC4AAAAAAAAAAAAHU2V0Um9vdAAAAAABAAAACHNldF9yb290AAAAAQAAAAAAAAAEcm9vdAAAAA4AAAAAAAAAAg==",
159
+ "AAAABQAAACdFdmVudCBlbWl0dGVkIHdoZW4gYW4gaW5kZXggaXMgY2xhaW1lZC4AAAAAAAAAAApTZXRDbGFpbWVkAAAAAAABAAAAC3NldF9jbGFpbWVkAAAAAAEAAAAAAAAABWluZGV4AAAAAAAAAAAAAAAAAAAC",
160
+ "AAAABAAAAAAAAAAAAAAAFk1lcmtsZURpc3RyaWJ1dG9yRXJyb3IAAAAAAAMAAAAbVGhlIG1lcmtsZSByb290IGlzIG5vdCBzZXQuAAAAAApSb290Tm90U2V0AAAAAAUUAAAAJ1RoZSBwcm92aWRlZCBpbmRleCB3YXMgYWxyZWFkeSBjbGFpbWVkLgAAAAATSW5kZXhBbHJlYWR5Q2xhaW1lZAAAAAUVAAAAFVRoZSBwcm9vZiBpcyBpbnZhbGlkLgAAAAAAAAxJbnZhbGlkUHJvb2YAAAUW",
161
+ "AAAAAgAAAD1TdG9yYWdlIGtleXMgZm9yIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBgTWVya2xlRGlzdHJpYnV0b3JgAAAAAAAAAAAAABtNZXJrbGVEaXN0cmlidXRvclN0b3JhZ2VLZXkAAAAAAgAAAAAAAAAoVGhlIE1lcmtsZSByb290IG9mIHRoZSBkaXN0cmlidXRpb24gdHJlZQAAAARSb290AAAAAQAAACNNYXBzIGFuIGluZGV4IHRvIGl0cyBjbGFpbWVkIHN0YXR1cwAAAAAHQ2xhaW1lZAAAAAABAAAABA==",
162
+ "AAAAAgAAACpSb3VuZGluZyBkaXJlY3Rpb24gZm9yIGRpdmlzaW9uIG9wZXJhdGlvbnMAAAAAAAAAAAAIUm91bmRpbmcAAAADAAAAAAAAACVSb3VuZCB0b3dhcmQgbmVnYXRpdmUgaW5maW5pdHkgKGRvd24pAAAAAAAABUZsb29yAAAAAAAAAAAAACNSb3VuZCB0b3dhcmQgcG9zaXRpdmUgaW5maW5pdHkgKHVwKQAAAAAEQ2VpbAAAAAAAAAAeUm91bmQgdG93YXJkIHplcm8gKHRydW5jYXRpb24pAAAAAAAIVHJ1bmNhdGU=",
163
+ "AAAABAAAAAAAAAAAAAAAFlNvcm9iYW5GaXhlZFBvaW50RXJyb3IAAAAAAAIAAAAcQXJpdGhtZXRpYyBvdmVyZmxvdyBvY2N1cnJlZAAAAAhPdmVyZmxvdwAABdwAAAAQRGl2aXNpb24gYnkgemVybwAAAA5EaXZpc2lvbkJ5WmVybwAAAAAF3Q==",
164
+ "AAAABAAAAAAAAAAAAAAAC0NyeXB0b0Vycm9yAAAAAAMAAAApVGhlIG1lcmtsZSBwcm9vZiBsZW5ndGggaXMgb3V0IG9mIGJvdW5kcy4AAAAAAAAWTWVya2xlUHJvb2ZPdXRPZkJvdW5kcwAAAAAFeAAAACdUaGUgaW5kZXggb2YgdGhlIGxlYWYgaXMgb3V0IG9mIGJvdW5kcy4AAAAAFk1lcmtsZUluZGV4T3V0T2ZCb3VuZHMAAAAABXkAAAAYTm8gZGF0YSBpbiBoYXNoZXIgc3RhdGUuAAAAEEhhc2hlckVtcHR5U3RhdGUAAAV6",
165
+ "AAAABQAAACpFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGNvbnRyYWN0IGlzIHBhdXNlZC4AAAAAAAAAAAAGUGF1c2VkAAAAAAABAAAABnBhdXNlZAAAAAAAAAAAAAI=",
166
+ "AAAABQAAACxFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGNvbnRyYWN0IGlzIHVucGF1c2VkLgAAAAAAAAAIVW5wYXVzZWQAAAABAAAACHVucGF1c2VkAAAAAAAAAAI=",
167
+ "AAAABAAAAAAAAAAAAAAADVBhdXNhYmxlRXJyb3IAAAAAAAACAAAANFRoZSBvcGVyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIGNvbnRyYWN0IGlzIHBhdXNlZC4AAAANRW5mb3JjZWRQYXVzZQAAAAAAA+gAAAA4VGhlIG9wZXJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgY29udHJhY3QgaXMgbm90IHBhdXNlZC4AAAANRXhwZWN0ZWRQYXVzZQAAAAAAA+k=",
168
+ "AAAAAgAAACJTdG9yYWdlIGtleSBmb3IgdGhlIHBhdXNhYmxlIHN0YXRlAAAAAAAAAAAAElBhdXNhYmxlU3RvcmFnZUtleQAAAAAAAQAAAAAAAAAySW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbnRyYWN0IGlzIGluIHBhdXNlZCBzdGF0ZS4AAAAAAAZQYXVzZWQAAA==",
169
+ "AAAAAQAAAL1FeGVjdXRpb24tYm91bnR5IGFuZCBvcGVuLWZlZSBwYXJhbWV0ZXJzIGNoYXJnZWQgdG8gdHJhZGVycy4KYG9wZW5fZmVlX2Jwc2AgYW5kIGBsaXF1aWRhdGlvbl9ib3VudHlfYnBzYCBhcmUgaW4gYmFzaXMgcG9pbnRzOwpgdHBfc2xfZXhlY3V0aW9uX2ZlZWAgaXMgYSBmbGF0IFVTREMgYW1vdW50IGF0IFBSRUNJU0lPTiBzY2FsZS4AAAAAAAAAAAAACUZlZUNvbmZpZwAAAAAAAAMAAAAAAAAAFmxpcXVpZGF0aW9uX2JvdW50eV9icHMAAAAAAAQAAAAAAAAADG9wZW5fZmVlX2JwcwAAAAQAAAAAAAAAE3RwX3NsX2V4ZWN1dGlvbl9mZWUAAAAACw==",
170
+ "AAAAAQAAAHBEZWZpbmVzIGhvdyBwcm90b2NvbCByZXZlbnVlIGlzIHNwbGl0IGJldHdlZW4gcGFydGllcy4KQWxsIHZhbHVlcyBhcmUgaW4gYmFzaXMgcG9pbnRzIChicHMpLiBNdXN0IHN1bSB0byAxMF8wMDAuAAAAAAAAAAlGZWVTcGxpdHMAAAAAAAADAAAAAAAAAAdkZXZfYnBzAAAAAAQAAAAAAAAABmxwX2JwcwAAAAAABAAAAAAAAAAKc3Rha2VyX2JwcwAAAAAABA==",
171
+ "AAAAAQAAACtHbG9iYWwgcHJvdG9jb2wgcmlzayBhbmQgdGltaW5nIHBhcmFtZXRlcnMuAAAAAAAAAAAOUHJvdG9jb2xMaW1pdHMAAAAAAAgAAAAAAAAAC2FkbF9wbmxfYnBzAAAAAAQAAAAAAAAAE2FkbF91dGlsaXphdGlvbl9icHMAAAAABAAAAAAAAAARY29vbGRvd25fZHVyYXRpb24AAAAAAAAGAAAAAAAAAA9mdW5kaW5nX2N1dF9icHMAAAAABAAAAAAAAAAZbGlxdWlkYXRpb25fdGhyZXNob2xkX2JwcwAAAAAAAAQAAAAAAAAAFW1heF91dGlsaXphdGlvbl9yYXRpbwAAAAAAAAsAAAAAAAAADm1pbl9jb2xsYXRlcmFsAAAAAAALAAAAAAAAABVtaW5fcG9zaXRpb25fbGlmZXRpbWUAAAAAAAAG",
172
+ "AAAAAQAAAElCb3Jyb3cgcmF0ZSBraW5rIGN1cnZlIGFuZCBmdW5kaW5nIHJhdGUgcGFyYW1ldGVycyAoYWxsIGluIGJhc2lzIHBvaW50cykuAAAAAAAAAAAAABBCb3Jyb3dSYXRlQ29uZmlnAAAABQAAAAAAAAAUYmFzZV9ib3Jyb3dfcmF0ZV9icHMAAAALAAAAAAAAABViYXNlX2Z1bmRpbmdfcmF0ZV9icHMAAAAAAAALAAAAAAAAABdvcHRpbWFsX3V0aWxpemF0aW9uX2JwcwAAAAALAAAAAAAAAApzbG9wZTFfYnBzAAAAAAALAAAAAAAAAApzbG9wZTJfYnBzAAAAAAAL"]), options);
173
+ this.options = options;
174
+ }
175
+ fromJSON = {
176
+ migrate: (this.txFromJSON),
177
+ upgrade: (this.txFromJSON),
178
+ get_price: (this.txFromJSON),
179
+ cancel_upgrade: (this.txFromJSON),
180
+ propose_upgrade: (this.txFromJSON),
181
+ bump_oracle_state: (this.txFromJSON),
182
+ get_oracle_config: (this.txFromJSON),
183
+ set_oracle_config: (this.txFromJSON),
184
+ set_oracle_sources: (this.txFromJSON)
185
+ };
186
+ }