@bitgo-beta/sdk-coin-sui 3.0.3-beta.99 → 3.0.3-beta.990
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.
- package/CHANGELOG.md +817 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -2
- package/dist/src/lib/compareTransactionBlocks.js +2 -3
- package/dist/src/lib/constants.d.ts +9 -2
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +18 -2
- package/dist/src/lib/customTransaction.d.ts +57 -0
- package/dist/src/lib/customTransaction.d.ts.map +1 -0
- package/dist/src/lib/customTransaction.js +159 -0
- package/dist/src/lib/customTransactionBuilder.d.ts +46 -0
- package/dist/src/lib/customTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/customTransactionBuilder.js +117 -0
- package/dist/src/lib/iface.d.ts +76 -10
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +40 -5
- package/dist/src/lib/index.d.ts +8 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +40 -10
- package/dist/src/lib/keyPair.js +24 -10
- package/dist/src/lib/mystenlab/builder/Inputs.d.ts +9 -9
- package/dist/src/lib/mystenlab/builder/Inputs.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/Inputs.js +18 -19
- package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts +40 -354
- package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/TransactionBlock.js +22 -25
- package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts +74 -74
- package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/TransactionDataBlock.js +41 -44
- package/dist/src/lib/mystenlab/builder/Transactions.d.ts +133 -188
- package/dist/src/lib/mystenlab/builder/Transactions.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/Transactions.js +52 -53
- package/dist/src/lib/mystenlab/builder/bcs.d.ts +1 -1
- package/dist/src/lib/mystenlab/builder/bcs.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/bcs.js +2 -2
- package/dist/src/lib/mystenlab/builder/index.js +6 -2
- package/dist/src/lib/mystenlab/builder/serializer.js +6 -8
- package/dist/src/lib/mystenlab/builder/utils.d.ts +1 -1
- package/dist/src/lib/mystenlab/builder/utils.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/utils.js +4 -4
- package/dist/src/lib/mystenlab/cryptography/hash.js +3 -4
- package/dist/src/lib/mystenlab/framework/framework.d.ts +6 -6
- package/dist/src/lib/mystenlab/framework/framework.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/framework/framework.js +22 -25
- package/dist/src/lib/mystenlab/framework/index.js +6 -2
- package/dist/src/lib/mystenlab/framework/sui-system-state.js +2 -2
- package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.js +2 -2
- package/dist/src/lib/mystenlab/types/coin.d.ts +10 -10
- package/dist/src/lib/mystenlab/types/coin.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/coin.js +19 -19
- package/dist/src/lib/mystenlab/types/common.d.ts +8 -8
- package/dist/src/lib/mystenlab/types/common.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/common.js +22 -22
- package/dist/src/lib/mystenlab/types/events.d.ts +14 -14
- package/dist/src/lib/mystenlab/types/events.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/events.js +17 -17
- package/dist/src/lib/mystenlab/types/index.js +6 -2
- package/dist/src/lib/mystenlab/types/normalized.d.ts +21 -21
- package/dist/src/lib/mystenlab/types/normalized.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/normalized.js +41 -41
- package/dist/src/lib/mystenlab/types/objects.d.ts +51 -51
- package/dist/src/lib/mystenlab/types/objects.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/objects.js +96 -106
- package/dist/src/lib/mystenlab/types/option.d.ts +1 -1
- package/dist/src/lib/mystenlab/types/option.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/option.js +2 -3
- package/dist/src/lib/mystenlab/types/sui-bcs.d.ts +8 -8
- package/dist/src/lib/mystenlab/types/sui-bcs.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/sui-bcs.js +5 -5
- package/dist/src/lib/mystenlab/types/transactions.d.ts +625 -625
- package/dist/src/lib/mystenlab/types/transactions.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/transactions.js +178 -194
- package/dist/src/lib/mystenlab/types/validator.d.ts +9 -9
- package/dist/src/lib/mystenlab/types/validator.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/validator.js +124 -124
- package/dist/src/lib/resources/walrusConfig.d.ts +22 -0
- package/dist/src/lib/resources/walrusConfig.d.ts.map +1 -0
- package/dist/src/lib/resources/walrusConfig.js +37 -0
- package/dist/src/lib/rpcClient.d.ts +5 -0
- package/dist/src/lib/rpcClient.d.ts.map +1 -0
- package/dist/src/lib/rpcClient.js +74 -0
- package/dist/src/lib/stakingBuilder.d.ts.map +1 -1
- package/dist/src/lib/stakingBuilder.js +23 -7
- package/dist/src/lib/stakingTransaction.d.ts +1 -1
- package/dist/src/lib/stakingTransaction.d.ts.map +1 -1
- package/dist/src/lib/stakingTransaction.js +26 -15
- package/dist/src/lib/tokenTransferBuilder.d.ts +38 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferBuilder.js +132 -0
- package/dist/src/lib/tokenTransferTransaction.d.ts +57 -0
- package/dist/src/lib/tokenTransferTransaction.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferTransaction.js +250 -0
- package/dist/src/lib/transaction.d.ts +12 -4
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +91 -18
- package/dist/src/lib/transactionBuilder.d.ts +2 -3
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +4 -4
- package/dist/src/lib/transactionBuilderFactory.d.ts +14 -2
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +42 -1
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +21 -5
- package/dist/src/lib/transferTransaction.d.ts +1 -1
- package/dist/src/lib/transferTransaction.d.ts.map +1 -1
- package/dist/src/lib/transferTransaction.js +31 -8
- package/dist/src/lib/unstakingBuilder.js +6 -6
- package/dist/src/lib/unstakingTransaction.d.ts +1 -1
- package/dist/src/lib/unstakingTransaction.d.ts.map +1 -1
- package/dist/src/lib/unstakingTransaction.js +31 -17
- package/dist/src/lib/utils.d.ts +16 -4
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +269 -29
- package/dist/src/lib/walrusStakingBuilder.d.ts +66 -0
- package/dist/src/lib/walrusStakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/walrusStakingBuilder.js +200 -0
- package/dist/src/lib/walrusStakingTransaction.d.ts +52 -0
- package/dist/src/lib/walrusStakingTransaction.d.ts.map +1 -0
- package/dist/src/lib/walrusStakingTransaction.js +269 -0
- package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts +36 -0
- package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts.map +1 -0
- package/dist/src/lib/walrusWithdrawStakeBuilder.js +173 -0
- package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts +21 -0
- package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts.map +1 -0
- package/dist/src/lib/walrusWithdrawStakeTransaction.js +190 -0
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/src/sui.d.ts +46 -8
- package/dist/src/sui.d.ts.map +1 -1
- package/dist/src/sui.js +479 -32
- package/dist/src/suiToken.d.ts +22 -0
- package/dist/src/suiToken.d.ts.map +1 -0
- package/dist/src/suiToken.js +61 -0
- package/dist/src/tsui.js +1 -1
- package/package.json +10 -8
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
-
};
|
|
7
2
|
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
8
3
|
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
9
4
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
10
5
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
11
6
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
12
7
|
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
13
|
var _TransactionBlock_blockData;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.TransactionBlock = void 0;
|
|
@@ -23,14 +23,11 @@ const utils_1 = require("./utils");
|
|
|
23
23
|
function createTransactionResult(index) {
|
|
24
24
|
const baseResult = { kind: 'Result', index };
|
|
25
25
|
const nestedResults = [];
|
|
26
|
-
const nestedResultFor = (resultIndex) => {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
resultIndex,
|
|
32
|
-
}));
|
|
33
|
-
};
|
|
26
|
+
const nestedResultFor = (resultIndex) => (nestedResults[resultIndex] ?? (nestedResults[resultIndex] = {
|
|
27
|
+
kind: 'NestedResult',
|
|
28
|
+
index,
|
|
29
|
+
resultIndex,
|
|
30
|
+
}));
|
|
34
31
|
return new Proxy(baseResult, {
|
|
35
32
|
set() {
|
|
36
33
|
throw new Error('The transaction result is a proxy, and does not support setting properties directly');
|
|
@@ -74,10 +71,6 @@ const GAS_OVERHEAD_PER_COIN = 10n;
|
|
|
74
71
|
* Transaction Builder
|
|
75
72
|
*/
|
|
76
73
|
class TransactionBlock {
|
|
77
|
-
constructor(transaction) {
|
|
78
|
-
_TransactionBlock_blockData.set(this, void 0);
|
|
79
|
-
__classPrivateFieldSet(this, _TransactionBlock_blockData, new TransactionDataBlock_1.TransactionBlockDataBuilder(transaction ? __classPrivateFieldGet(transaction, _TransactionBlock_blockData, "f") : undefined), "f");
|
|
80
|
-
}
|
|
81
74
|
/** Returns `true` if the object is an instance of the Transaction builder class. */
|
|
82
75
|
static is(obj) {
|
|
83
76
|
return !!obj && typeof obj === 'object' && obj[TRANSACTION_BRAND] === true;
|
|
@@ -88,7 +81,7 @@ class TransactionBlock {
|
|
|
88
81
|
*/
|
|
89
82
|
static fromKind(serialized) {
|
|
90
83
|
const tx = new TransactionBlock();
|
|
91
|
-
__classPrivateFieldSet(tx, _TransactionBlock_blockData, TransactionDataBlock_1.TransactionBlockDataBuilder.fromKindBytes(typeof serialized === 'string' ? bcs_1.fromB64(serialized) : serialized), "f");
|
|
84
|
+
__classPrivateFieldSet(tx, _TransactionBlock_blockData, TransactionDataBlock_1.TransactionBlockDataBuilder.fromKindBytes(typeof serialized === 'string' ? (0, bcs_1.fromB64)(serialized) : serialized), "f");
|
|
92
85
|
return tx;
|
|
93
86
|
}
|
|
94
87
|
/**
|
|
@@ -101,7 +94,7 @@ class TransactionBlock {
|
|
|
101
94
|
const tx = new TransactionBlock();
|
|
102
95
|
// Check for bytes:
|
|
103
96
|
if (typeof serialized !== 'string' || !serialized.startsWith('{')) {
|
|
104
|
-
__classPrivateFieldSet(tx, _TransactionBlock_blockData, TransactionDataBlock_1.TransactionBlockDataBuilder.fromBytes(typeof serialized === 'string' ? bcs_1.fromB64(serialized) : serialized), "f");
|
|
97
|
+
__classPrivateFieldSet(tx, _TransactionBlock_blockData, TransactionDataBlock_1.TransactionBlockDataBuilder.fromBytes(typeof serialized === 'string' ? (0, bcs_1.fromB64)(serialized) : serialized), "f");
|
|
105
98
|
}
|
|
106
99
|
else {
|
|
107
100
|
__classPrivateFieldSet(tx, _TransactionBlock_blockData, TransactionDataBlock_1.TransactionBlockDataBuilder.restore(JSON.parse(serialized)), "f");
|
|
@@ -144,7 +137,7 @@ class TransactionBlock {
|
|
|
144
137
|
if (payments.length >= MAX_GAS_OBJECTS) {
|
|
145
138
|
throw new Error(`Payment objects exceed maximum amount ${MAX_GAS_OBJECTS}`);
|
|
146
139
|
}
|
|
147
|
-
__classPrivateFieldGet(this, _TransactionBlock_blockData, "f").gasConfig.payment = payments.map((payment) => superstruct_1.mask(payment, types_1.SuiObjectRef));
|
|
140
|
+
__classPrivateFieldGet(this, _TransactionBlock_blockData, "f").gasConfig.payment = payments.map((payment) => (0, superstruct_1.mask)(payment, types_1.SuiObjectRef));
|
|
148
141
|
}
|
|
149
142
|
/** Get a snapshot of the transaction data, in JSON form: */
|
|
150
143
|
get blockData() {
|
|
@@ -155,6 +148,10 @@ class TransactionBlock {
|
|
|
155
148
|
get [(_TransactionBlock_blockData = new WeakMap(), TRANSACTION_BRAND)]() {
|
|
156
149
|
return true;
|
|
157
150
|
}
|
|
151
|
+
constructor(transaction) {
|
|
152
|
+
_TransactionBlock_blockData.set(this, void 0);
|
|
153
|
+
__classPrivateFieldSet(this, _TransactionBlock_blockData, new TransactionDataBlock_1.TransactionBlockDataBuilder(transaction ? __classPrivateFieldGet(transaction, _TransactionBlock_blockData, "f") : undefined), "f");
|
|
154
|
+
}
|
|
158
155
|
/** Returns an argument for the gas coin, to be used in a transaction. */
|
|
159
156
|
get gas() {
|
|
160
157
|
return { kind: 'GasCoin' };
|
|
@@ -170,7 +167,7 @@ class TransactionBlock {
|
|
|
170
167
|
*/
|
|
171
168
|
input(type, value) {
|
|
172
169
|
const index = __classPrivateFieldGet(this, _TransactionBlock_blockData, "f").inputs.length;
|
|
173
|
-
const input = utils_1.create({
|
|
170
|
+
const input = (0, utils_1.create)({
|
|
174
171
|
kind: 'Input',
|
|
175
172
|
// bigints can't be serialized to JSON, so just string-convert them here:
|
|
176
173
|
value: typeof value === 'bigint' ? String(value) : value,
|
|
@@ -184,10 +181,10 @@ class TransactionBlock {
|
|
|
184
181
|
* Add a new object input to the transaction.
|
|
185
182
|
*/
|
|
186
183
|
object(value) {
|
|
187
|
-
const id = Inputs_1.getIdFromCallArg(value);
|
|
184
|
+
const id = (0, Inputs_1.getIdFromCallArg)(value);
|
|
188
185
|
// deduplicate
|
|
189
|
-
const inserted = __classPrivateFieldGet(this, _TransactionBlock_blockData, "f").inputs.find((i) => i.type === 'object' && id === Inputs_1.getIdFromCallArg(i.value));
|
|
190
|
-
return inserted
|
|
186
|
+
const inserted = __classPrivateFieldGet(this, _TransactionBlock_blockData, "f").inputs.find((i) => i.type === 'object' && id === (0, Inputs_1.getIdFromCallArg)(i.value));
|
|
187
|
+
return inserted ?? this.input('object', value);
|
|
191
188
|
}
|
|
192
189
|
/**
|
|
193
190
|
* Add a new non-object input to the transaction.
|
|
@@ -255,4 +252,4 @@ class TransactionBlock {
|
|
|
255
252
|
}
|
|
256
253
|
}
|
|
257
254
|
exports.TransactionBlock = TransactionBlock;
|
|
258
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25CbG9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvbXlzdGVubGFiL2J1aWxkZXIvVHJhbnNhY3Rpb25CbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxQ0FBc0M7QUFDdEMsNkNBQXVDO0FBQ3ZDLG9DQUFrRDtBQUNsRCxpREFBMkc7QUFDM0cscUNBQW1GO0FBQ25GLGlFQUE0RjtBQUM1RixtQ0FBaUM7QUFJakMsU0FBUyx1QkFBdUIsQ0FBQyxLQUFhO0lBQzVDLE1BQU0sVUFBVSxHQUF3QixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFFbEUsTUFBTSxhQUFhLEdBQTBCLEVBQUUsQ0FBQztJQUNoRCxNQUFNLGVBQWUsR0FBRyxDQUFDLFdBQW1CLEVBQXVCLEVBQUU7O1FBQ25FLE9BQUEsT0FBQyxhQUFhLENBQUMsV0FBVyxxQ0FBekIsYUFBYSxDQUFDLFdBQVcsSUFBTTtZQUM5QixJQUFJLEVBQUUsY0FBYztZQUNwQixLQUFLO1lBQ0wsV0FBVztTQUNaLEVBQUMsQ0FBQTtLQUFBLENBQUM7SUFFTCxPQUFPLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtRQUMzQixHQUFHO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxRkFBcUYsQ0FBQyxDQUFDO1FBQ3pHLENBQUM7UUFDRCw2RUFBNkU7UUFDN0UsNEVBQTRFO1FBQzVFLG1DQUFtQztRQUNuQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVE7WUFDbEIseUVBQXlFO1lBQ3pFLElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRTtnQkFDdEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQzthQUN0QztZQUVELHlCQUF5QjtZQUN6QixJQUFJLFFBQVEsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUNoQyxPQUFPLFFBQVEsQ0FB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R0FBRyxDQUFDLDJCQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsZUFBZSxDQUFDLEdBQUcsSUFBMEQ7UUFDM0UsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLDJCQUFZLENBQUMsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsV0FBVyxDQUFDLEdBQUcsSUFBc0Q7UUFDbkUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLDJCQUFZLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUFBLElBQUksbUNBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLG1CQUFtQixLQUFtQixFQUFFO1FBQ3BELE9BQU8sdUJBQUEsSUFBSSxtQ0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsZ0NBQWdDO0lBQ2hDLEtBQUssQ0FBQyxTQUFTO1FBQ2IsT0FBTyx1QkFBQSxJQUFJLG1DQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDckMsQ0FBQztDQUNGO0FBcE5ELDRDQW9OQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZyb21CNjQgfSBmcm9tICdAbXlzdGVuL2Jjcyc7XG5pbXBvcnQgeyBpcywgbWFzayB9IGZyb20gJ3N1cGVyc3RydWN0JztcbmltcG9ydCB7IE9iamVjdElkLCBTdWlPYmplY3RSZWYgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbnMsIFRyYW5zYWN0aW9uQXJndW1lbnQsIFRyYW5zYWN0aW9uVHlwZSwgVHJhbnNhY3Rpb25CbG9ja0lucHV0IH0gZnJvbSAnLi9UcmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgQnVpbGRlckNhbGxBcmcsIGdldElkRnJvbUNhbGxBcmcsIElucHV0cywgT2JqZWN0Q2FsbEFyZyB9IGZyb20gJy4vSW5wdXRzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQmxvY2tEYXRhQnVpbGRlciwgVHJhbnNhY3Rpb25FeHBpcmF0aW9uIH0gZnJvbSAnLi9UcmFuc2FjdGlvbkRhdGFCbG9jayc7XG5pbXBvcnQgeyBjcmVhdGUgfSBmcm9tICcuL3V0aWxzJztcblxudHlwZSBUcmFuc2FjdGlvblJlc3VsdCA9IFRyYW5zYWN0aW9uQXJndW1lbnQgJiBUcmFuc2FjdGlvbkFyZ3VtZW50W107XG5cbmZ1bmN0aW9uIGNyZWF0ZVRyYW5zYWN0aW9uUmVzdWx0KGluZGV4OiBudW1iZXIpOiBUcmFuc2FjdGlvblJlc3VsdCB7XG4gIGNvbnN0IGJhc2VSZXN1bHQ6IFRyYW5zYWN0aW9uQXJndW1lbnQgPSB7IGtpbmQ6ICdSZXN1bHQnLCBpbmRleCB9O1xuXG4gIGNvbnN0IG5lc3RlZFJlc3VsdHM6IFRyYW5zYWN0aW9uQXJndW1lbnRbXSA9IFtdO1xuICBjb25zdCBuZXN0ZWRSZXN1bHRGb3IgPSAocmVzdWx0SW5kZXg6IG51bWJlcik6IFRyYW5zYWN0aW9uQXJndW1lbnQgPT5cbiAgICAobmVzdGVkUmVzdWx0c1tyZXN1bHRJbmRleF0gPz89IHtcbiAgICAgIGtpbmQ6ICdOZXN0ZWRSZXN1bHQnLFxuICAgICAgaW5kZXgsXG4gICAgICByZXN1bHRJbmRleCxcbiAgICB9KTtcblxuICByZXR1cm4gbmV3IFByb3h5KGJhc2VSZXN1bHQsIHtcbiAgICBzZXQoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0cmFuc2FjdGlvbiByZXN1bHQgaXMgYSBwcm94eSwgYW5kIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBwcm9wZXJ0aWVzIGRpcmVjdGx5Jyk7XG4gICAgfSxcbiAgICAvLyBUT0RPOiBJbnN0ZWFkIG9mIG1ha2luZyB0aGlzIHJldHVybiBhIGNvbmNyZXRlIGFyZ3VtZW50LCB3ZSBzaG91bGQgaWRlYWxseVxuICAgIC8vIG1ha2UgaXQgcmVmZXJlbmNlLWJhc2VkIChzbyB0aGF0IHRoaXMgZ2V0cyByZXNvbHZlZCBhdCBidWlsZC10aW1lKSwgd2hpY2hcbiAgICAvLyBhbGxvd3MgcmUtb3JkZXJpbmcgdHJhbnNhY3Rpb25zLlxuICAgIGdldCh0YXJnZXQsIHByb3BlcnR5KSB7XG4gICAgICAvLyBUaGlzIGFsbG93cyB0aGlzIHRyYW5zYWN0aW9uIGFyZ3VtZW50IHRvIGJlIHVzZWQgaW4gdGhlIHNpbmd1bGFyIGZvcm06XG4gICAgICBpZiAocHJvcGVydHkgaW4gdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgIH1cblxuICAgICAgLy8gU3VwcG9ydCBkZXN0cnVjdHVyaW5nOlxuICAgICAgaWYgKHByb3BlcnR5ID09PSBTeW1ib2wuaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICB5aWVsZCBuZXN0ZWRSZXN1bHRGb3IoaSk7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSAnc3ltYm9sJykgcmV0dXJuO1xuXG4gICAgICBjb25zdCByZXN1bHRJbmRleCA9IHBhcnNlSW50KHByb3BlcnR5LCAxMCk7XG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKHJlc3VsdEluZGV4KSB8fCByZXN1bHRJbmRleCA8IDApIHJldHVybjtcbiAgICAgIHJldHVybiBuZXN0ZWRSZXN1bHRGb3IocmVzdWx0SW5kZXgpO1xuICAgIH0sXG4gIH0pIGFzIFRyYW5zYWN0aW9uUmVzdWx0O1xufVxuXG5jb25zdCBUUkFOU0FDVElPTl9CUkFORCA9IFN5bWJvbC5mb3IoJ0BteXN0ZW4vdHJhbnNhY3Rpb24nKTtcblxuLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIGdhcyBvYmplY3RzIHRoYXQgY2FuIGJlIHNlbGVjdGVkIGZvciBvbmUgdHJhbnNhY3Rpb24uXG5jb25zdCBNQVhfR0FTX09CSkVDVFMgPSAyNTY7XG5cbi8vIFRoZSBtYXhpbXVtIGdhcyB0aGF0IGlzIGFsbG93ZWQuXG5jb25zdCBNQVhfR0FTID0gMTAwMDAwMDAwMDtcblxuLy8gQSBndWVzcyBhYm91dCBob3cgbXVjaCBvdmVyaGVhZCBlYWNoIGNvaW4gcHJvdmlkZXMgZm9yIGdhcyBjYWxjdWxhdGlvbnMuXG4vLyBAdHMtaWdub3JlXG5jb25zdCBHQVNfT1ZFUkhFQURfUEVSX0NPSU4gPSAxMG47XG5cbmludGVyZmFjZSBCdWlsZE9wdGlvbnMge1xuICBvbmx5VHJhbnNhY3Rpb25LaW5kPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUcmFuc2FjdGlvbiBCdWlsZGVyXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJsb2NrIHtcbiAgLyoqIFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIFRyYW5zYWN0aW9uIGJ1aWxkZXIgY2xhc3MuICovXG4gIHN0YXRpYyBpcyhvYmo6IHVua25vd24pOiBvYmogaXMgVHJhbnNhY3Rpb25CbG9jayB7XG4gICAgcmV0dXJuICEhb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIChvYmogYXMgYW55KVtUUkFOU0FDVElPTl9CUkFORF0gPT09IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgZnJvbSBhIHNlcmlhbGl6ZSB0cmFuc2FjdGlvbiBraW5kIChidWlsdCB3aXRoIGBidWlsZCh7IG9ubHlUcmFuc2FjdGlvbktpbmQ6IHRydWUgfSlgKSB0byBhIGBUcmFuc2FjdGlvbmAgY2xhc3MuXG4gICAqIFN1cHBvcnRzIGVpdGhlciBhIGJ5dGUgYXJyYXksIG9yIGJhc2U2NC1lbmNvZGVkIGJ5dGVzLlxuICAgKi9cbiAgc3RhdGljIGZyb21LaW5kKHNlcmlhbGl6ZWQ6IHN0cmluZyB8IFVpbnQ4QXJyYXkpIHtcbiAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbkJsb2NrKCk7XG5cbiAgICB0eC4jYmxvY2tEYXRhID0gVHJhbnNhY3Rpb25CbG9ja0RhdGFCdWlsZGVyLmZyb21LaW5kQnl0ZXMoXG4gICAgICB0eXBlb2Ygc2VyaWFsaXplZCA9PT0gJ3N0cmluZycgPyBmcm9tQjY0KHNlcmlhbGl6ZWQpIDogc2VyaWFsaXplZFxuICAgICk7XG5cbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgZnJvbSBhIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb24gZm9ybWF0IHRvIGEgYFRyYW5zYWN0aW9uYCBjbGFzcy5cbiAgICogVGhlcmUgYXJlIHR3byBzdXBwb3J0ZWQgc2VyaWFsaXplZCBmb3JtYXRzOlxuICAgKiAtIEEgc3RyaW5nIHJldHVybmVkIGZyb20gYFRyYW5zYWN0aW9uI3NlcmlhbGl6ZWAuIFRoZSBzZXJpYWxpemVkIGZvcm1hdCBtdXN0IGJlIGNvbXBhdGlibGUsIG9yIGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAqIC0gQSBieXRlIGFycmF5IChvciBiYXNlNjQtZW5jb2RlZCBieXRlcykgY29udGFpbmluZyBCQ1MgdHJhbnNhY3Rpb24gZGF0YS5cbiAgICovXG4gIHN0YXRpYyBmcm9tKHNlcmlhbGl6ZWQ6IHN0cmluZyB8IFVpbnQ4QXJyYXkpIHtcbiAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbkJsb2NrKCk7XG5cbiAgICAvLyBDaGVjayBmb3IgYnl0ZXM6XG4gICAgaWYgKHR5cGVvZiBzZXJpYWxpemVkICE9PSAnc3RyaW5nJyB8fCAhc2VyaWFsaXplZC5zdGFydHNXaXRoKCd7JykpIHtcbiAgICAgIHR4LiNibG9ja0RhdGEgPSBUcmFuc2FjdGlvbkJsb2NrRGF0YUJ1aWxkZXIuZnJvbUJ5dGVzKFxuICAgICAgICB0eXBlb2Ygc2VyaWFsaXplZCA9PT0gJ3N0cmluZycgPyBmcm9tQjY0KHNlcmlhbGl6ZWQpIDogc2VyaWFsaXplZFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHguI2Jsb2NrRGF0YSA9IFRyYW5zYWN0aW9uQmxvY2tEYXRhQnVpbGRlci5yZXN0b3JlKEpTT04ucGFyc2Uoc2VyaWFsaXplZCkpO1xuICAgIH1cblxuICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIC8qKiBBIGhlbHBlciB0byByZXRyaWV2ZSB0aGUgVHJhbnNhY3Rpb24gYnVpbGRlciBgVHJhbnNhY3Rpb25zYCAqL1xuICBzdGF0aWMgZ2V0IFRyYW5zYWN0aW9ucygpIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25zO1xuICB9XG5cbiAgLyoqIEEgaGVscGVyIHRvIHJldHJpZXZlIHRoZSBUcmFuc2FjdGlvbiBidWlsZGVyIGBJbnB1dHNgICovXG4gIHN0YXRpYyBnZXQgSW5wdXRzKCkge1xuICAgIHJldHVybiBJbnB1dHM7XG4gIH1cblxuICBzZXRTZW5kZXIoc2VuZGVyOiBzdHJpbmcpIHtcbiAgICB0aGlzLiNibG9ja0RhdGEuc2VuZGVyID0gc2VuZGVyO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZW5kZXIgb25seSBpZiBpdCBoYXMgbm90IGFscmVhZHkgYmVlbiBzZXQuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciBzcG9uc29yZWQgdHJhbnNhY3Rpb24gZmxvd3Mgd2hlcmUgdGhlIHNlbmRlciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBzaWduZXIgYWRkcmVzcy5cbiAgICovXG4gIHNldFNlbmRlcklmTm90U2V0KHNlbmRlcjogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLiNibG9ja0RhdGEuc2VuZGVyKSB7XG4gICAgICB0aGlzLiNibG9ja0RhdGEuc2VuZGVyID0gc2VuZGVyO1xuICAgIH1cbiAgfVxuICBzZXRFeHBpcmF0aW9uKGV4cGlyYXRpb24/OiBUcmFuc2FjdGlvbkV4cGlyYXRpb24pIHtcbiAgICB0aGlzLiNibG9ja0RhdGEuZXhwaXJhdGlvbiA9IGV4cGlyYXRpb247XG4gIH1cbiAgc2V0R2FzUHJpY2UocHJpY2U6IG51bWJlciB8IGJpZ2ludCkge1xuICAgIHRoaXMuI2Jsb2NrRGF0YS5nYXNDb25maWcucHJpY2UgPSBTdHJpbmcocHJpY2UpO1xuICB9XG4gIHNldEdhc0J1ZGdldChidWRnZXQ6IG51bWJlciB8IGJpZ2ludCkge1xuICAgIHRoaXMuI2Jsb2NrRGF0YS5nYXNDb25maWcuYnVkZ2V0ID0gU3RyaW5nKGJ1ZGdldCk7XG4gIH1cbiAgc2V0R2FzT3duZXIob3duZXI6IHN0cmluZykge1xuICAgIHRoaXMuI2Jsb2NrRGF0YS5nYXNDb25maWcub3duZXIgPSBvd25lcjtcbiAgfVxuICBzZXRHYXNQYXltZW50KHBheW1lbnRzOiBTdWlPYmplY3RSZWZbXSkge1xuICAgIGlmIChwYXltZW50cy5sZW5ndGggPj0gTUFYX0dBU19PQkpFQ1RTKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBheW1lbnQgb2JqZWN0cyBleGNlZWQgbWF4aW11bSBhbW91bnQgJHtNQVhfR0FTX09CSkVDVFN9YCk7XG4gICAgfVxuICAgIHRoaXMuI2Jsb2NrRGF0YS5nYXNDb25maWcucGF5bWVudCA9IHBheW1lbnRzLm1hcCgocGF5bWVudCkgPT4gbWFzayhwYXltZW50LCBTdWlPYmplY3RSZWYpKTtcbiAgfVxuXG4gICNibG9ja0RhdGE6IFRyYW5zYWN0aW9uQmxvY2tEYXRhQnVpbGRlcjtcbiAgLyoqIEdldCBhIHNuYXBzaG90IG9mIHRoZSB0cmFuc2FjdGlvbiBkYXRhLCBpbiBKU09OIGZvcm06ICovXG4gIGdldCBibG9ja0RhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2Jsb2NrRGF0YS5zbmFwc2hvdCgpO1xuICB9XG5cbiAgLy8gVXNlZCB0byBicmFuZCB0cmFuc2FjdGlvbiBjbGFzc2VzIHNvIHRoYXQgdGhleSBjYW4gYmUgaWRlbnRpZmllZCwgZXZlbiBiZXR3ZWVuIG11bHRpcGxlIGNvcGllc1xuICAvLyBvZiB0aGUgYnVpbGRlci5cbiAgZ2V0IFtUUkFOU0FDVElPTl9CUkFORF0oKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih0cmFuc2FjdGlvbj86IFRyYW5zYWN0aW9uQmxvY2spIHtcbiAgICB0aGlzLiNibG9ja0RhdGEgPSBuZXcgVHJhbnNhY3Rpb25CbG9ja0RhdGFCdWlsZGVyKHRyYW5zYWN0aW9uID8gdHJhbnNhY3Rpb24uI2Jsb2NrRGF0YSA6IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKiogUmV0dXJucyBhbiBhcmd1bWVudCBmb3IgdGhlIGdhcyBjb2luLCB0byBiZSB1c2VkIGluIGEgdHJhbnNhY3Rpb24uICovXG4gIGdldCBnYXMoKTogVHJhbnNhY3Rpb25Bcmd1bWVudCB7XG4gICAgcmV0dXJuIHsga2luZDogJ0dhc0NvaW4nIH07XG4gIH1cblxuICAvKipcbiAgICogRHluYW1pY2FsbHkgY3JlYXRlIGEgbmV3IGlucHV0LCB3aGljaCBpcyBzZXBhcmF0ZSBmcm9tIHRoZSBgaW5wdXRgLiBUaGlzIGlzIGltcG9ydGFudFxuICAgKiBmb3IgZ2VuZXJhdGVkIGNsaWVudHMgdG8gYmUgYWJsZSB0byBkZWZpbmUgdW5pcXVlIGlucHV0cyB0aGF0IGFyZSBub24tb3ZlcmxhcHBpbmcgd2l0aCB0aGVcbiAgICogZGVmaW5lZCBpbnB1dHMuXG4gICAqXG4gICAqIEZvciBgVWludDhBcnJheWAgdHlwZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgdGhlIGlucHV0IGludG8gYSBgUHVyZWAgQ2FsbEFyZywgc2luY2UgdGhpc1xuICAgKiBpcyB0aGUgZm9ybWF0IHJlcXVpcmVkIGZvciBjdXN0b20gc2VyaWFsaXphdGlvbi5cbiAgICpcbiAgICovXG4gIGlucHV0KHR5cGU6ICdvYmplY3QnIHwgJ3B1cmUnLCB2YWx1ZT86IHVua25vd24pIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuI2Jsb2NrRGF0YS5pbnB1dHMubGVuZ3RoO1xuICAgIGNvbnN0IGlucHV0ID0gY3JlYXRlKFxuICAgICAge1xuICAgICAgICBraW5kOiAnSW5wdXQnLFxuICAgICAgICAvLyBiaWdpbnRzIGNhbid0IGJlIHNlcmlhbGl6ZWQgdG8gSlNPTiwgc28ganVzdCBzdHJpbmctY29udmVydCB0aGVtIGhlcmU6XG4gICAgICAgIHZhbHVlOiB0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnID8gU3RyaW5nKHZhbHVlKSA6IHZhbHVlLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgdHlwZSxcbiAgICAgIH0sXG4gICAgICBUcmFuc2FjdGlvbkJsb2NrSW5wdXRcbiAgICApO1xuICAgIHRoaXMuI2Jsb2NrRGF0YS5pbnB1dHMucHVzaChpbnB1dCk7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBvYmplY3QgaW5wdXQgdG8gdGhlIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgb2JqZWN0KHZhbHVlOiBPYmplY3RJZCB8IE9iamVjdENhbGxBcmcpIHtcbiAgICBjb25zdCBpZCA9IGdldElkRnJvbUNhbGxBcmcodmFsdWUpO1xuICAgIC8vIGRlZHVwbGljYXRlXG4gICAgY29uc3QgaW5zZXJ0ZWQgPSB0aGlzLiNibG9ja0RhdGEuaW5wdXRzLmZpbmQoKGkpID0+IGkudHlwZSA9PT0gJ29iamVjdCcgJiYgaWQgPT09IGdldElkRnJvbUNhbGxBcmcoaS52YWx1ZSkpO1xuICAgIHJldHVybiBpbnNlcnRlZCA/PyB0aGlzLmlucHV0KCdvYmplY3QnLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IG5vbi1vYmplY3QgaW5wdXQgdG8gdGhlIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgcHVyZShcbiAgICAvKipcbiAgICAgKiBUaGUgcHVyZSB2YWx1ZSB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5wdXQgdmFsdWUuIElmIHRoaXMgaXMgYSBVaW50OEFycmF5LCB0aGVuIHRoZSB2YWx1ZVxuICAgICAqIGlzIGFzc3VtZWQgdG8gYmUgcmF3IGJ5dGVzLCBhbmQgd2lsbCBiZSB1c2VkIGRpcmVjdGx5LlxuICAgICAqL1xuICAgIHZhbHVlOiB1bmtub3duLFxuICAgIC8qKlxuICAgICAqIFRoZSBCQ1MgdHlwZSB0byBzZXJpYWxpemUgdGhlIHZhbHVlIGludG8uIElmIG5vdCBwcm92aWRlZCwgdGhlIHR5cGUgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGRldGVybWluZWRcbiAgICAgKiBiYXNlZCBvbiBob3cgdGhlIGlucHV0IGlzIHVzZWQuXG4gICAgICovXG4gICAgdHlwZT86IHN0cmluZ1xuICApIHtcbiAgICAvLyBUT0RPOiB3ZSBjYW4gYWxzbyBkbyBzb21lIGRlZHVwbGljYXRpb24gaGVyZVxuICAgIHJldHVybiB0aGlzLmlucHV0KFxuICAgICAgJ3B1cmUnLFxuICAgICAgdmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gSW5wdXRzLlB1cmUodmFsdWUpIDogdHlwZSA/IElucHV0cy5QdXJlKHZhbHVlLCB0eXBlKSA6IHZhbHVlXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBBZGQgYSB0cmFuc2FjdGlvbiB0byB0aGUgdHJhbnNhY3Rpb24gYmxvY2suICovXG4gIGFkZCh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb25UeXBlKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLiNibG9ja0RhdGEudHJhbnNhY3Rpb25zLnB1c2godHJhbnNhY3Rpb24pO1xuICAgIHJldHVybiBjcmVhdGVUcmFuc2FjdGlvblJlc3VsdChpbmRleCAtIDEpO1xuICB9XG5cbiAgLy8gTWV0aG9kIHNob3J0aGFuZHM6XG5cbiAgc3BsaXRDb2lucyguLi5hcmdzOiBQYXJhbWV0ZXJzPCh0eXBlb2YgVHJhbnNhY3Rpb25zKVsnU3BsaXRDb2lucyddPikge1xuICAgIHJldHVybiB0aGlzLmFkZChUcmFuc2FjdGlvbnMuU3BsaXRDb2lucyguLi5hcmdzKSk7XG4gIH1cbiAgbWVyZ2VDb2lucyguLi5hcmdzOiBQYXJhbWV0ZXJzPCh0eXBlb2YgVHJhbnNhY3Rpb25zKVsnTWVyZ2VDb2lucyddPikge1xuICAgIHJldHVybiB0aGlzLmFkZChUcmFuc2FjdGlvbnMuTWVyZ2VDb2lucyguLi5hcmdzKSk7XG4gIH1cbiAgcHVibGlzaCguLi5hcmdzOiBQYXJhbWV0ZXJzPCh0eXBlb2YgVHJhbnNhY3Rpb25zKVsnUHVibGlzaCddPikge1xuICAgIHJldHVybiB0aGlzLmFkZChUcmFuc2FjdGlvbnMuUHVibGlzaCguLi5hcmdzKSk7XG4gIH1cbiAgbW92ZUNhbGwoLi4uYXJnczogUGFyYW1ldGVyczwodHlwZW9mIFRyYW5zYWN0aW9ucylbJ01vdmVDYWxsJ10+KSB7XG4gICAgcmV0dXJuIHRoaXMuYWRkKFRyYW5zYWN0aW9ucy5Nb3ZlQ2FsbCguLi5hcmdzKSk7XG4gIH1cbiAgdHJhbnNmZXJPYmplY3RzKC4uLmFyZ3M6IFBhcmFtZXRlcnM8KHR5cGVvZiBUcmFuc2FjdGlvbnMpWydUcmFuc2Zlck9iamVjdHMnXT4pIHtcbiAgICByZXR1cm4gdGhpcy5hZGQoVHJhbnNhY3Rpb25zLlRyYW5zZmVyT2JqZWN0cyguLi5hcmdzKSk7XG4gIH1cbiAgbWFrZU1vdmVWZWMoLi4uYXJnczogUGFyYW1ldGVyczwodHlwZW9mIFRyYW5zYWN0aW9ucylbJ01ha2VNb3ZlVmVjJ10+KSB7XG4gICAgcmV0dXJuIHRoaXMuYWRkKFRyYW5zYWN0aW9ucy5NYWtlTW92ZVZlYyguLi5hcmdzKSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHRoZSB0cmFuc2FjdGlvbiB0byBhIHN0cmluZyBzbyB0aGF0IGl0IGNhbiBiZSBzZW50IHRvIGEgc2VwYXJhdGUgY29udGV4dC5cbiAgICogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBgYnVpbGRgIGluIHRoYXQgaXQgZG9lcyBub3Qgc2VyaWFsaXplIHRvIEJDUyBieXRlcywgYW5kIGluc3RlYWRcbiAgICogdXNlcyBhIHNlcGFyYXRlIGZvcm1hdCB0aGF0IGlzIHVuaXF1ZSB0byB0aGUgdHJhbnNhY3Rpb24gYnVpbGRlci4gVGhpcyBhbGxvd3NcbiAgICogdXMgdG8gc2VyaWFsaXplIHBhcnRpYWxseS1jb21wbGV0ZSB0cmFuc2FjdGlvbnMsIHRoYXQgY2FuIHRoZW4gYmUgY29tcGxldGVkIGFuZFxuICAgKiBidWlsdCBpbiBhIHNlcGFyYXRlIGNvbnRleHQuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCBhIGRhcHAgY2FuIGNvbnN0cnVjdCBhIHRyYW5zYWN0aW9uLCBidXQgbm90IHByb3ZpZGUgZ2FzIG9iamVjdHNcbiAgICogb3IgYSBnYXMgYnVkZ2V0LiBUaGUgdHJhbnNhY3Rpb24gdGhlbiBjYW4gYmUgc2VudCB0byB0aGUgd2FsbGV0LCB3aGVyZSB0aGlzXG4gICAqIGluZm9ybWF0aW9uIGlzIGF1dG9tYXRpY2FsbHkgZmlsbGVkIGluIChlLmcuIGJ5IHF1ZXJ5aW5nIGZvciBjb2luIG9iamVjdHNcbiAgICogYW5kIHBlcmZvcm1pbmcgYSBkcnkgcnVuKS5cbiAgICovXG4gIHNlcmlhbGl6ZSgpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy4jYmxvY2tEYXRhLnNuYXBzaG90KCkpO1xuICB9XG5cbiAgLyoqIEJ1aWxkIHRoZSB0cmFuc2FjdGlvbiB0byBCQ1MgYnl0ZXMuICovXG4gIGFzeW5jIGJ1aWxkKHsgb25seVRyYW5zYWN0aW9uS2luZCB9OiBCdWlsZE9wdGlvbnMgPSB7fSk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICAgIHJldHVybiB0aGlzLiNibG9ja0RhdGEuYnVpbGQoeyBvbmx5VHJhbnNhY3Rpb25LaW5kIH0pO1xuICB9XG5cbiAgLyoqIERlcml2ZSB0cmFuc2FjdGlvbiBkaWdlc3QgKi9cbiAgYXN5bmMgZ2V0RGlnZXN0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuI2Jsb2NrRGF0YS5nZXREaWdlc3QoKTtcbiAgfVxufVxuIl19
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25CbG9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvbXlzdGVubGFiL2J1aWxkZXIvVHJhbnNhY3Rpb25CbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxQ0FBc0M7QUFDdEMsNkNBQXVDO0FBQ3ZDLG9DQUFrRDtBQUNsRCxpREFBMkc7QUFDM0cscUNBQW1GO0FBQ25GLGlFQUE0RjtBQUM1RixtQ0FBaUM7QUFJakMsU0FBUyx1QkFBdUIsQ0FBQyxLQUFhO0lBQzVDLE1BQU0sVUFBVSxHQUF3QixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFFbEUsTUFBTSxhQUFhLEdBQTBCLEVBQUUsQ0FBQztJQUNoRCxNQUFNLGVBQWUsR0FBRyxDQUFDLFdBQW1CLEVBQXVCLEVBQUUsQ0FDbkUsQ0FBQyxhQUFhLENBQUMsV0FBVyxNQUF6QixhQUFhLENBQUMsV0FBVyxJQUFNO1FBQzlCLElBQUksRUFBRSxjQUFjO1FBQ3BCLEtBQUs7UUFDTCxXQUFXO0tBQ1osRUFBQyxDQUFDO0lBRUwsT0FBTyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7UUFDM0IsR0FBRztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMscUZBQXFGLENBQUMsQ0FBQztRQUN6RyxDQUFDO1FBQ0QsNkVBQTZFO1FBQzdFLDRFQUE0RTtRQUM1RSxtQ0FBbUM7UUFDbkMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRO1lBQ2xCLHlFQUF5RTtZQUN6RSxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN2QyxDQUFDO1lBRUQseUJBQXlCO1lBQ3pCLElBQUksUUFBUSxLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDakMsT0FBTyxRQUFRLENBQUM7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QUM7SUFDakQsQ0FBQztJQUNELFFBQVEsQ0FBQyxHQUFHLElBQW1EO1FBQzdELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQywyQkFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELGVBQWUsQ0FBQyxHQUFHLElBQTBEO1FBQzNFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQywyQkFBWSxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUNELFdBQVcsQ0FBQyxHQUFHLElBQXNEO1FBQ25FLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQywyQkFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBQSxJQUFJLG1DQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsMENBQTBDO0lBQzFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxtQkFBbUIsS0FBbUIsRUFBRTtRQUNwRCxPQUFPLHVCQUFBLElBQUksbUNBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxLQUFLLENBQUMsU0FBUztRQUNiLE9BQU8sdUJBQUEsSUFBSSxtQ0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JDLENBQUM7Q0FDRjtBQXBORCw0Q0FvTkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcm9tQjY0IH0gZnJvbSAnQG15c3Rlbi9iY3MnO1xuaW1wb3J0IHsgaXMsIG1hc2sgfSBmcm9tICdzdXBlcnN0cnVjdCc7XG5pbXBvcnQgeyBPYmplY3RJZCwgU3VpT2JqZWN0UmVmIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25zLCBUcmFuc2FjdGlvbkFyZ3VtZW50LCBUcmFuc2FjdGlvblR5cGUsIFRyYW5zYWN0aW9uQmxvY2tJbnB1dCB9IGZyb20gJy4vVHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IEJ1aWxkZXJDYWxsQXJnLCBnZXRJZEZyb21DYWxsQXJnLCBJbnB1dHMsIE9iamVjdENhbGxBcmcgfSBmcm9tICcuL0lucHV0cyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJsb2NrRGF0YUJ1aWxkZXIsIFRyYW5zYWN0aW9uRXhwaXJhdGlvbiB9IGZyb20gJy4vVHJhbnNhY3Rpb25EYXRhQmxvY2snO1xuaW1wb3J0IHsgY3JlYXRlIH0gZnJvbSAnLi91dGlscyc7XG5cbnR5cGUgVHJhbnNhY3Rpb25SZXN1bHQgPSBUcmFuc2FjdGlvbkFyZ3VtZW50ICYgVHJhbnNhY3Rpb25Bcmd1bWVudFtdO1xuXG5mdW5jdGlvbiBjcmVhdGVUcmFuc2FjdGlvblJlc3VsdChpbmRleDogbnVtYmVyKTogVHJhbnNhY3Rpb25SZXN1bHQge1xuICBjb25zdCBiYXNlUmVzdWx0OiBUcmFuc2FjdGlvbkFyZ3VtZW50ID0geyBraW5kOiAnUmVzdWx0JywgaW5kZXggfTtcblxuICBjb25zdCBuZXN0ZWRSZXN1bHRzOiBUcmFuc2FjdGlvbkFyZ3VtZW50W10gPSBbXTtcbiAgY29uc3QgbmVzdGVkUmVzdWx0Rm9yID0gKHJlc3VsdEluZGV4OiBudW1iZXIpOiBUcmFuc2FjdGlvbkFyZ3VtZW50ID0+XG4gICAgKG5lc3RlZFJlc3VsdHNbcmVzdWx0SW5kZXhdID8/PSB7XG4gICAgICBraW5kOiAnTmVzdGVkUmVzdWx0JyxcbiAgICAgIGluZGV4LFxuICAgICAgcmVzdWx0SW5kZXgsXG4gICAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm94eShiYXNlUmVzdWx0LCB7XG4gICAgc2V0KCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdHJhbnNhY3Rpb24gcmVzdWx0IGlzIGEgcHJveHksIGFuZCBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgcHJvcGVydGllcyBkaXJlY3RseScpO1xuICAgIH0sXG4gICAgLy8gVE9ETzogSW5zdGVhZCBvZiBtYWtpbmcgdGhpcyByZXR1cm4gYSBjb25jcmV0ZSBhcmd1bWVudCwgd2Ugc2hvdWxkIGlkZWFsbHlcbiAgICAvLyBtYWtlIGl0IHJlZmVyZW5jZS1iYXNlZCAoc28gdGhhdCB0aGlzIGdldHMgcmVzb2x2ZWQgYXQgYnVpbGQtdGltZSksIHdoaWNoXG4gICAgLy8gYWxsb3dzIHJlLW9yZGVyaW5nIHRyYW5zYWN0aW9ucy5cbiAgICBnZXQodGFyZ2V0LCBwcm9wZXJ0eSkge1xuICAgICAgLy8gVGhpcyBhbGxvd3MgdGhpcyB0cmFuc2FjdGlvbiBhcmd1bWVudCB0byBiZSB1c2VkIGluIHRoZSBzaW5ndWxhciBmb3JtOlxuICAgICAgaWYgKHByb3BlcnR5IGluIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN1cHBvcnQgZGVzdHJ1Y3R1cmluZzpcbiAgICAgIGlmIChwcm9wZXJ0eSA9PT0gU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiogKCkge1xuICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgeWllbGQgbmVzdGVkUmVzdWx0Rm9yKGkpO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ3N5bWJvbCcpIHJldHVybjtcblxuICAgICAgY29uc3QgcmVzdWx0SW5kZXggPSBwYXJzZUludChwcm9wZXJ0eSwgMTApO1xuICAgICAgaWYgKE51bWJlci5pc05hTihyZXN1bHRJbmRleCkgfHwgcmVzdWx0SW5kZXggPCAwKSByZXR1cm47XG4gICAgICByZXR1cm4gbmVzdGVkUmVzdWx0Rm9yKHJlc3VsdEluZGV4KTtcbiAgICB9LFxuICB9KSBhcyBUcmFuc2FjdGlvblJlc3VsdDtcbn1cblxuY29uc3QgVFJBTlNBQ1RJT05fQlJBTkQgPSBTeW1ib2wuZm9yKCdAbXlzdGVuL3RyYW5zYWN0aW9uJyk7XG5cbi8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBnYXMgb2JqZWN0cyB0aGF0IGNhbiBiZSBzZWxlY3RlZCBmb3Igb25lIHRyYW5zYWN0aW9uLlxuY29uc3QgTUFYX0dBU19PQkpFQ1RTID0gMjU2O1xuXG4vLyBUaGUgbWF4aW11bSBnYXMgdGhhdCBpcyBhbGxvd2VkLlxuY29uc3QgTUFYX0dBUyA9IDEwMDAwMDAwMDA7XG5cbi8vIEEgZ3Vlc3MgYWJvdXQgaG93IG11Y2ggb3ZlcmhlYWQgZWFjaCBjb2luIHByb3ZpZGVzIGZvciBnYXMgY2FsY3VsYXRpb25zLlxuLy8gQHRzLWlnbm9yZVxuY29uc3QgR0FTX09WRVJIRUFEX1BFUl9DT0lOID0gMTBuO1xuXG5pbnRlcmZhY2UgQnVpbGRPcHRpb25zIHtcbiAgb25seVRyYW5zYWN0aW9uS2luZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVHJhbnNhY3Rpb24gQnVpbGRlclxuICovXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CbG9jayB7XG4gIC8qKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIHRoZSBUcmFuc2FjdGlvbiBidWlsZGVyIGNsYXNzLiAqL1xuICBzdGF0aWMgaXMob2JqOiB1bmtub3duKTogb2JqIGlzIFRyYW5zYWN0aW9uQmxvY2sge1xuICAgIHJldHVybiAhIW9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiAob2JqIGFzIGFueSlbVFJBTlNBQ1RJT05fQlJBTkRdID09PSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGZyb20gYSBzZXJpYWxpemUgdHJhbnNhY3Rpb24ga2luZCAoYnVpbHQgd2l0aCBgYnVpbGQoeyBvbmx5VHJhbnNhY3Rpb25LaW5kOiB0cnVlIH0pYCkgdG8gYSBgVHJhbnNhY3Rpb25gIGNsYXNzLlxuICAgKiBTdXBwb3J0cyBlaXRoZXIgYSBieXRlIGFycmF5LCBvciBiYXNlNjQtZW5jb2RlZCBieXRlcy5cbiAgICovXG4gIHN0YXRpYyBmcm9tS2luZChzZXJpYWxpemVkOiBzdHJpbmcgfCBVaW50OEFycmF5KSB7XG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb25CbG9jaygpO1xuXG4gICAgdHguI2Jsb2NrRGF0YSA9IFRyYW5zYWN0aW9uQmxvY2tEYXRhQnVpbGRlci5mcm9tS2luZEJ5dGVzKFxuICAgICAgdHlwZW9mIHNlcmlhbGl6ZWQgPT09ICdzdHJpbmcnID8gZnJvbUI2NChzZXJpYWxpemVkKSA6IHNlcmlhbGl6ZWRcbiAgICApO1xuXG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGZyb20gYSBzZXJpYWxpemVkIHRyYW5zYWN0aW9uIGZvcm1hdCB0byBhIGBUcmFuc2FjdGlvbmAgY2xhc3MuXG4gICAqIFRoZXJlIGFyZSB0d28gc3VwcG9ydGVkIHNlcmlhbGl6ZWQgZm9ybWF0czpcbiAgICogLSBBIHN0cmluZyByZXR1cm5lZCBmcm9tIGBUcmFuc2FjdGlvbiNzZXJpYWxpemVgLiBUaGUgc2VyaWFsaXplZCBmb3JtYXQgbXVzdCBiZSBjb21wYXRpYmxlLCBvciBpdCB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgKiAtIEEgYnl0ZSBhcnJheSAob3IgYmFzZTY0LWVuY29kZWQgYnl0ZXMpIGNvbnRhaW5pbmcgQkNTIHRyYW5zYWN0aW9uIGRhdGEuXG4gICAqL1xuICBzdGF0aWMgZnJvbShzZXJpYWxpemVkOiBzdHJpbmcgfCBVaW50OEFycmF5KSB7XG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb25CbG9jaygpO1xuXG4gICAgLy8gQ2hlY2sgZm9yIGJ5dGVzOlxuICAgIGlmICh0eXBlb2Ygc2VyaWFsaXplZCAhPT0gJ3N0cmluZycgfHwgIXNlcmlhbGl6ZWQuc3RhcnRzV2l0aCgneycpKSB7XG4gICAgICB0eC4jYmxvY2tEYXRhID0gVHJhbnNhY3Rpb25CbG9ja0RhdGFCdWlsZGVyLmZyb21CeXRlcyhcbiAgICAgICAgdHlwZW9mIHNlcmlhbGl6ZWQgPT09ICdzdHJpbmcnID8gZnJvbUI2NChzZXJpYWxpemVkKSA6IHNlcmlhbGl6ZWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR4LiNibG9ja0RhdGEgPSBUcmFuc2FjdGlvbkJsb2NrRGF0YUJ1aWxkZXIucmVzdG9yZShKU09OLnBhcnNlKHNlcmlhbGl6ZWQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKiogQSBoZWxwZXIgdG8gcmV0cmlldmUgdGhlIFRyYW5zYWN0aW9uIGJ1aWxkZXIgYFRyYW5zYWN0aW9uc2AgKi9cbiAgc3RhdGljIGdldCBUcmFuc2FjdGlvbnMoKSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9ucztcbiAgfVxuXG4gIC8qKiBBIGhlbHBlciB0byByZXRyaWV2ZSB0aGUgVHJhbnNhY3Rpb24gYnVpbGRlciBgSW5wdXRzYCAqL1xuICBzdGF0aWMgZ2V0IElucHV0cygpIHtcbiAgICByZXR1cm4gSW5wdXRzO1xuICB9XG5cbiAgc2V0U2VuZGVyKHNlbmRlcjogc3RyaW5nKSB7XG4gICAgdGhpcy4jYmxvY2tEYXRhLnNlbmRlciA9IHNlbmRlcjtcbiAgfVxuICAvKipcbiAgICogU2V0cyB0aGUgc2VuZGVyIG9ubHkgaWYgaXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gc2V0LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3Igc3BvbnNvcmVkIHRyYW5zYWN0aW9uIGZsb3dzIHdoZXJlIHRoZSBzZW5kZXIgbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgc2lnbmVyIGFkZHJlc3MuXG4gICAqL1xuICBzZXRTZW5kZXJJZk5vdFNldChzZW5kZXI6IHN0cmluZykge1xuICAgIGlmICghdGhpcy4jYmxvY2tEYXRhLnNlbmRlcikge1xuICAgICAgdGhpcy4jYmxvY2tEYXRhLnNlbmRlciA9IHNlbmRlcjtcbiAgICB9XG4gIH1cbiAgc2V0RXhwaXJhdGlvbihleHBpcmF0aW9uPzogVHJhbnNhY3Rpb25FeHBpcmF0aW9uKSB7XG4gICAgdGhpcy4jYmxvY2tEYXRhLmV4cGlyYXRpb24gPSBleHBpcmF0aW9uO1xuICB9XG4gIHNldEdhc1ByaWNlKHByaWNlOiBudW1iZXIgfCBiaWdpbnQpIHtcbiAgICB0aGlzLiNibG9ja0RhdGEuZ2FzQ29uZmlnLnByaWNlID0gU3RyaW5nKHByaWNlKTtcbiAgfVxuICBzZXRHYXNCdWRnZXQoYnVkZ2V0OiBudW1iZXIgfCBiaWdpbnQpIHtcbiAgICB0aGlzLiNibG9ja0RhdGEuZ2FzQ29uZmlnLmJ1ZGdldCA9IFN0cmluZyhidWRnZXQpO1xuICB9XG4gIHNldEdhc093bmVyKG93bmVyOiBzdHJpbmcpIHtcbiAgICB0aGlzLiNibG9ja0RhdGEuZ2FzQ29uZmlnLm93bmVyID0gb3duZXI7XG4gIH1cbiAgc2V0R2FzUGF5bWVudChwYXltZW50czogU3VpT2JqZWN0UmVmW10pIHtcbiAgICBpZiAocGF5bWVudHMubGVuZ3RoID49IE1BWF9HQVNfT0JKRUNUUykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IG9iamVjdHMgZXhjZWVkIG1heGltdW0gYW1vdW50ICR7TUFYX0dBU19PQkpFQ1RTfWApO1xuICAgIH1cbiAgICB0aGlzLiNibG9ja0RhdGEuZ2FzQ29uZmlnLnBheW1lbnQgPSBwYXltZW50cy5tYXAoKHBheW1lbnQpID0+IG1hc2socGF5bWVudCwgU3VpT2JqZWN0UmVmKSk7XG4gIH1cblxuICAjYmxvY2tEYXRhOiBUcmFuc2FjdGlvbkJsb2NrRGF0YUJ1aWxkZXI7XG4gIC8qKiBHZXQgYSBzbmFwc2hvdCBvZiB0aGUgdHJhbnNhY3Rpb24gZGF0YSwgaW4gSlNPTiBmb3JtOiAqL1xuICBnZXQgYmxvY2tEYXRhKCkge1xuICAgIHJldHVybiB0aGlzLiNibG9ja0RhdGEuc25hcHNob3QoKTtcbiAgfVxuXG4gIC8vIFVzZWQgdG8gYnJhbmQgdHJhbnNhY3Rpb24gY2xhc3NlcyBzbyB0aGF0IHRoZXkgY2FuIGJlIGlkZW50aWZpZWQsIGV2ZW4gYmV0d2VlbiBtdWx0aXBsZSBjb3BpZXNcbiAgLy8gb2YgdGhlIGJ1aWxkZXIuXG4gIGdldCBbVFJBTlNBQ1RJT05fQlJBTkRdKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IodHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvbkJsb2NrKSB7XG4gICAgdGhpcy4jYmxvY2tEYXRhID0gbmV3IFRyYW5zYWN0aW9uQmxvY2tEYXRhQnVpbGRlcih0cmFuc2FjdGlvbiA/IHRyYW5zYWN0aW9uLiNibG9ja0RhdGEgOiB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgYW4gYXJndW1lbnQgZm9yIHRoZSBnYXMgY29pbiwgdG8gYmUgdXNlZCBpbiBhIHRyYW5zYWN0aW9uLiAqL1xuICBnZXQgZ2FzKCk6IFRyYW5zYWN0aW9uQXJndW1lbnQge1xuICAgIHJldHVybiB7IGtpbmQ6ICdHYXNDb2luJyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIER5bmFtaWNhbGx5IGNyZWF0ZSBhIG5ldyBpbnB1dCwgd2hpY2ggaXMgc2VwYXJhdGUgZnJvbSB0aGUgYGlucHV0YC4gVGhpcyBpcyBpbXBvcnRhbnRcbiAgICogZm9yIGdlbmVyYXRlZCBjbGllbnRzIHRvIGJlIGFibGUgdG8gZGVmaW5lIHVuaXF1ZSBpbnB1dHMgdGhhdCBhcmUgbm9uLW92ZXJsYXBwaW5nIHdpdGggdGhlXG4gICAqIGRlZmluZWQgaW5wdXRzLlxuICAgKlxuICAgKiBGb3IgYFVpbnQ4QXJyYXlgIHR5cGUgYXV0b21hdGljYWxseSBjb252ZXJ0IHRoZSBpbnB1dCBpbnRvIGEgYFB1cmVgIENhbGxBcmcsIHNpbmNlIHRoaXNcbiAgICogaXMgdGhlIGZvcm1hdCByZXF1aXJlZCBmb3IgY3VzdG9tIHNlcmlhbGl6YXRpb24uXG4gICAqXG4gICAqL1xuICBpbnB1dCh0eXBlOiAnb2JqZWN0JyB8ICdwdXJlJywgdmFsdWU/OiB1bmtub3duKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLiNibG9ja0RhdGEuaW5wdXRzLmxlbmd0aDtcbiAgICBjb25zdCBpbnB1dCA9IGNyZWF0ZShcbiAgICAgIHtcbiAgICAgICAga2luZDogJ0lucHV0JyxcbiAgICAgICAgLy8gYmlnaW50cyBjYW4ndCBiZSBzZXJpYWxpemVkIHRvIEpTT04sIHNvIGp1c3Qgc3RyaW5nLWNvbnZlcnQgdGhlbSBoZXJlOlxuICAgICAgICB2YWx1ZTogdHlwZW9mIHZhbHVlID09PSAnYmlnaW50JyA/IFN0cmluZyh2YWx1ZSkgOiB2YWx1ZSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIHR5cGUsXG4gICAgICB9LFxuICAgICAgVHJhbnNhY3Rpb25CbG9ja0lucHV0XG4gICAgKTtcbiAgICB0aGlzLiNibG9ja0RhdGEuaW5wdXRzLnB1c2goaW5wdXQpO1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgb2JqZWN0IGlucHV0IHRvIHRoZSB0cmFuc2FjdGlvbi5cbiAgICovXG4gIG9iamVjdCh2YWx1ZTogT2JqZWN0SWQgfCBPYmplY3RDYWxsQXJnKSB7XG4gICAgY29uc3QgaWQgPSBnZXRJZEZyb21DYWxsQXJnKHZhbHVlKTtcbiAgICAvLyBkZWR1cGxpY2F0ZVxuICAgIGNvbnN0IGluc2VydGVkID0gdGhpcy4jYmxvY2tEYXRhLmlucHV0cy5maW5kKChpKSA9PiBpLnR5cGUgPT09ICdvYmplY3QnICYmIGlkID09PSBnZXRJZEZyb21DYWxsQXJnKGkudmFsdWUpKTtcbiAgICByZXR1cm4gaW5zZXJ0ZWQgPz8gdGhpcy5pbnB1dCgnb2JqZWN0JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBub24tb2JqZWN0IGlucHV0IHRvIHRoZSB0cmFuc2FjdGlvbi5cbiAgICovXG4gIHB1cmUoXG4gICAgLyoqXG4gICAgICogVGhlIHB1cmUgdmFsdWUgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGlucHV0IHZhbHVlLiBJZiB0aGlzIGlzIGEgVWludDhBcnJheSwgdGhlbiB0aGUgdmFsdWVcbiAgICAgKiBpcyBhc3N1bWVkIHRvIGJlIHJhdyBieXRlcywgYW5kIHdpbGwgYmUgdXNlZCBkaXJlY3RseS5cbiAgICAgKi9cbiAgICB2YWx1ZTogdW5rbm93bixcbiAgICAvKipcbiAgICAgKiBUaGUgQkNTIHR5cGUgdG8gc2VyaWFsaXplIHRoZSB2YWx1ZSBpbnRvLiBJZiBub3QgcHJvdmlkZWQsIHRoZSB0eXBlIHdpbGwgYXV0b21hdGljYWxseSBiZSBkZXRlcm1pbmVkXG4gICAgICogYmFzZWQgb24gaG93IHRoZSBpbnB1dCBpcyB1c2VkLlxuICAgICAqL1xuICAgIHR5cGU/OiBzdHJpbmdcbiAgKSB7XG4gICAgLy8gVE9ETzogd2UgY2FuIGFsc28gZG8gc29tZSBkZWR1cGxpY2F0aW9uIGhlcmVcbiAgICByZXR1cm4gdGhpcy5pbnB1dChcbiAgICAgICdwdXJlJyxcbiAgICAgIHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSA/IElucHV0cy5QdXJlKHZhbHVlKSA6IHR5cGUgPyBJbnB1dHMuUHVyZSh2YWx1ZSwgdHlwZSkgOiB2YWx1ZVxuICAgICk7XG4gIH1cblxuICAvKiogQWRkIGEgdHJhbnNhY3Rpb24gdG8gdGhlIHRyYW5zYWN0aW9uIGJsb2NrLiAqL1xuICBhZGQodHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uVHlwZSkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy4jYmxvY2tEYXRhLnRyYW5zYWN0aW9ucy5wdXNoKHRyYW5zYWN0aW9uKTtcbiAgICByZXR1cm4gY3JlYXRlVHJhbnNhY3Rpb25SZXN1bHQoaW5kZXggLSAxKTtcbiAgfVxuXG4gIC8vIE1ldGhvZCBzaG9ydGhhbmRzOlxuXG4gIHNwbGl0Q29pbnMoLi4uYXJnczogUGFyYW1ldGVyczwodHlwZW9mIFRyYW5zYWN0aW9ucylbJ1NwbGl0Q29pbnMnXT4pIHtcbiAgICByZXR1cm4gdGhpcy5hZGQoVHJhbnNhY3Rpb25zLlNwbGl0Q29pbnMoLi4uYXJncykpO1xuICB9XG4gIG1lcmdlQ29pbnMoLi4uYXJnczogUGFyYW1ldGVyczwodHlwZW9mIFRyYW5zYWN0aW9ucylbJ01lcmdlQ29pbnMnXT4pIHtcbiAgICByZXR1cm4gdGhpcy5hZGQoVHJhbnNhY3Rpb25zLk1lcmdlQ29pbnMoLi4uYXJncykpO1xuICB9XG4gIHB1Ymxpc2goLi4uYXJnczogUGFyYW1ldGVyczwodHlwZW9mIFRyYW5zYWN0aW9ucylbJ1B1Ymxpc2gnXT4pIHtcbiAgICByZXR1cm4gdGhpcy5hZGQoVHJhbnNhY3Rpb25zLlB1Ymxpc2goLi4uYXJncykpO1xuICB9XG4gIG1vdmVDYWxsKC4uLmFyZ3M6IFBhcmFtZXRlcnM8KHR5cGVvZiBUcmFuc2FjdGlvbnMpWydNb3ZlQ2FsbCddPikge1xuICAgIHJldHVybiB0aGlzLmFkZChUcmFuc2FjdGlvbnMuTW92ZUNhbGwoLi4uYXJncykpO1xuICB9XG4gIHRyYW5zZmVyT2JqZWN0cyguLi5hcmdzOiBQYXJhbWV0ZXJzPCh0eXBlb2YgVHJhbnNhY3Rpb25zKVsnVHJhbnNmZXJPYmplY3RzJ10+KSB7XG4gICAgcmV0dXJuIHRoaXMuYWRkKFRyYW5zYWN0aW9ucy5UcmFuc2Zlck9iamVjdHMoLi4uYXJncykpO1xuICB9XG4gIG1ha2VNb3ZlVmVjKC4uLmFyZ3M6IFBhcmFtZXRlcnM8KHR5cGVvZiBUcmFuc2FjdGlvbnMpWydNYWtlTW92ZVZlYyddPikge1xuICAgIHJldHVybiB0aGlzLmFkZChUcmFuc2FjdGlvbnMuTWFrZU1vdmVWZWMoLi4uYXJncykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gdG8gYSBzdHJpbmcgc28gdGhhdCBpdCBjYW4gYmUgc2VudCB0byBhIHNlcGFyYXRlIGNvbnRleHQuXG4gICAqIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gYGJ1aWxkYCBpbiB0aGF0IGl0IGRvZXMgbm90IHNlcmlhbGl6ZSB0byBCQ1MgYnl0ZXMsIGFuZCBpbnN0ZWFkXG4gICAqIHVzZXMgYSBzZXBhcmF0ZSBmb3JtYXQgdGhhdCBpcyB1bmlxdWUgdG8gdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIuIFRoaXMgYWxsb3dzXG4gICAqIHVzIHRvIHNlcmlhbGl6ZSBwYXJ0aWFsbHktY29tcGxldGUgdHJhbnNhY3Rpb25zLCB0aGF0IGNhbiB0aGVuIGJlIGNvbXBsZXRlZCBhbmRcbiAgICogYnVpbHQgaW4gYSBzZXBhcmF0ZSBjb250ZXh0LlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgYSBkYXBwIGNhbiBjb25zdHJ1Y3QgYSB0cmFuc2FjdGlvbiwgYnV0IG5vdCBwcm92aWRlIGdhcyBvYmplY3RzXG4gICAqIG9yIGEgZ2FzIGJ1ZGdldC4gVGhlIHRyYW5zYWN0aW9uIHRoZW4gY2FuIGJlIHNlbnQgdG8gdGhlIHdhbGxldCwgd2hlcmUgdGhpc1xuICAgKiBpbmZvcm1hdGlvbiBpcyBhdXRvbWF0aWNhbGx5IGZpbGxlZCBpbiAoZS5nLiBieSBxdWVyeWluZyBmb3IgY29pbiBvYmplY3RzXG4gICAqIGFuZCBwZXJmb3JtaW5nIGEgZHJ5IHJ1bikuXG4gICAqL1xuICBzZXJpYWxpemUoKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuI2Jsb2NrRGF0YS5zbmFwc2hvdCgpKTtcbiAgfVxuXG4gIC8qKiBCdWlsZCB0aGUgdHJhbnNhY3Rpb24gdG8gQkNTIGJ5dGVzLiAqL1xuICBhc3luYyBidWlsZCh7IG9ubHlUcmFuc2FjdGlvbktpbmQgfTogQnVpbGRPcHRpb25zID0ge30pOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgICByZXR1cm4gdGhpcy4jYmxvY2tEYXRhLmJ1aWxkKHsgb25seVRyYW5zYWN0aW9uS2luZCB9KTtcbiAgfVxuXG4gIC8qKiBEZXJpdmUgdHJhbnNhY3Rpb24gZGlnZXN0ICovXG4gIGFzeW5jIGdldERpZ2VzdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLiNibG9ja0RhdGEuZ2V0RGlnZXN0KCk7XG4gIH1cbn1cbiJdfQ==
|