@bitgo-beta/sdk-lib-mpc 8.2.0-beta.2093 → 8.2.0-beta.2095
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/dist/src/tss/redpallas-mps/dsg.d.ts +34 -12
- package/dist/src/tss/redpallas-mps/dsg.d.ts.map +1 -1
- package/dist/src/tss/redpallas-mps/dsg.js +35 -14
- package/dist/src/tss/redpallas-mps/index.d.ts +2 -1
- package/dist/src/tss/redpallas-mps/index.d.ts.map +1 -1
- package/dist/src/tss/redpallas-mps/index.js +3 -2
- package/dist/src/tss/redpallas-mps/rerand.d.ts +110 -0
- package/dist/src/tss/redpallas-mps/rerand.d.ts.map +1 -0
- package/dist/src/tss/redpallas-mps/rerand.js +330 -0
- package/dist/src/tss/redpallas-mps/types.d.ts +43 -8
- package/dist/src/tss/redpallas-mps/types.d.ts.map +1 -1
- package/dist/src/tss/redpallas-mps/types.js +25 -4
- package/dist/src/tss/redpallas-mps/util.d.ts +20 -7
- package/dist/src/tss/redpallas-mps/util.d.ts.map +1 -1
- package/dist/src/tss/redpallas-mps/util.js +34 -8
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -37,6 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.generateRedPallasDKGKeyShares = generateRedPallasDKGKeyShares;
|
|
40
|
+
exports.executeRerand = executeRerand;
|
|
40
41
|
exports.executeTillRound = executeTillRound;
|
|
41
42
|
exports.verifyRedPallasSignature = verifyRedPallasSignature;
|
|
42
43
|
const crypto_1 = __importDefault(require("crypto"));
|
|
@@ -85,14 +86,39 @@ async function generateRedPallasDKGKeyShares(seedUser, seedBackup, seedBitgo) {
|
|
|
85
86
|
bitgo.handleIncomingMessages(r2Messages);
|
|
86
87
|
return [user, backup, bitgo];
|
|
87
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Runs a full 2-party rerand session in-process: the key re-randomization that must
|
|
91
|
+
* precede every RedPallas DSG (same 2 parties that will then sign). See `RedPallasRerand`
|
|
92
|
+
* for the protocol. Asserts that both parties agree on the rerandomized public key `pk`
|
|
93
|
+
* and the tweak scalar `alpha`.
|
|
94
|
+
*/
|
|
95
|
+
async function executeRerand(party1, party2, keyShare1, keyShare2) {
|
|
96
|
+
await party1.initRerand(keyShare1, party2.getPartyIdx());
|
|
97
|
+
await party2.initRerand(keyShare2, party1.getPartyIdx());
|
|
98
|
+
const party1Round0Message = party1.getFirstMessage();
|
|
99
|
+
const party2Round0Message = party2.getFirstMessage();
|
|
100
|
+
const [party1Round1Message] = party1.handleIncomingMessages([party1Round0Message, party2Round0Message]);
|
|
101
|
+
const [party2Round1Message] = party2.handleIncomingMessages([party1Round0Message, party2Round0Message]);
|
|
102
|
+
party1.handleIncomingMessages([party1Round1Message, party2Round1Message]);
|
|
103
|
+
party2.handleIncomingMessages([party1Round1Message, party2Round1Message]);
|
|
104
|
+
const result1 = party1.getRerandomizedKeyShare();
|
|
105
|
+
const result2 = party2.getRerandomizedKeyShare();
|
|
106
|
+
(0, assert_1.default)(result1.pk.toString('hex') === result2.pk.toString('hex'));
|
|
107
|
+
(0, assert_1.default)(result1.alpha.toString('hex') === result2.alpha.toString('hex'));
|
|
108
|
+
return [result1, result2];
|
|
109
|
+
}
|
|
88
110
|
/**
|
|
89
111
|
* Initializes two RedPallas DSG parties and drives them through the protocol until the
|
|
90
112
|
* specified round. Mirrors `executeTillRound` in `../eddsa-mps/util.ts`, minus the
|
|
91
113
|
* derivation path (RedPallas DSG operates on an already-(root-or-derived) keyshare; there
|
|
92
114
|
* is no per-signing-session derivation path).
|
|
93
115
|
*
|
|
116
|
+
* The keyshares are used as given: for the supported flow they are rerand outputs from
|
|
117
|
+
* `executeRerand`, in which case both parties' signature `rk` equals the rerand `pk`
|
|
118
|
+
* and the signature verifies under it.
|
|
119
|
+
*
|
|
94
120
|
* @param round - Round to execute until (1–3). Returns intermediate message arrays for 1–2,
|
|
95
|
-
* or the final `RedPallasSignatureResult` (signature/rk
|
|
121
|
+
* or the final `RedPallasSignatureResult` (signature/rk) for 3.
|
|
96
122
|
* @param party1Dsg - First DSG party (`new RedPallasDSG(partyIdx)`), not yet initialized.
|
|
97
123
|
* @param party2Dsg - Second DSG party (`new RedPallasDSG(partyIdx)`), not yet initialized.
|
|
98
124
|
* @param keyShare1 - Key share for the first party.
|
|
@@ -121,18 +147,18 @@ async function executeTillRound(round, party1Dsg, party2Dsg, keyShare1, keyShare
|
|
|
121
147
|
const sig2 = party2Dsg.getSignature();
|
|
122
148
|
(0, assert_1.default)(sig1.signature.toString('hex') === sig2.signature.toString('hex'));
|
|
123
149
|
(0, assert_1.default)(sig1.rk.toString('hex') === sig2.rk.toString('hex'));
|
|
124
|
-
(0, assert_1.default)(sig1.alpha.toString('hex') === sig2.alpha.toString('hex'));
|
|
125
150
|
return sig1;
|
|
126
151
|
}
|
|
127
152
|
/**
|
|
128
153
|
* Verifies a `RedPallasSignatureResult` against the raw message.
|
|
129
154
|
*
|
|
130
155
|
* IMPORTANT: unlike EdDSA, RedPallas signatures must be verified against `rk` — the
|
|
131
|
-
*
|
|
132
|
-
* against the DKG (or derived) public key directly. `rk
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
156
|
+
* rerandomized verification key produced by the rerand session that preceded DSG — and
|
|
157
|
+
* NOT against the DKG (or derived) public key directly. `rk` equals the rerand result's
|
|
158
|
+
* `pk` (`pk = pk_dkg + [alpha]G`); the `alpha` randomizer is available from
|
|
159
|
+
* `RedPallasRerand.getRerandomizedKeyShare()` for callers that need to independently
|
|
160
|
+
* confirm the relationship between `rk` and a known `pk`, but is not required to verify
|
|
161
|
+
* the signature itself.
|
|
136
162
|
*/
|
|
137
163
|
async function verifyRedPallasSignature(signatureResult, message) {
|
|
138
164
|
const wasm = typeof window !== 'undefined' && !window.process && !window.process?.['type']
|
|
@@ -144,4 +170,4 @@ async function verifyRedPallasSignature(signatureResult, message) {
|
|
|
144
170
|
: await Promise.resolve().then(() => __importStar(require('@bitgo/wasm-mps')));
|
|
145
171
|
return wasm.redpallas_verify(signatureResult.rk, signatureResult.signature, message);
|
|
146
172
|
}
|
|
147
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvcmVkcGFsbGFzLW1wcy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0NBLHNFQXFDQztBQWdCRCw0Q0FpQ0M7QUFZRCw0REFhQztBQS9JRCxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLG1EQUErQztBQUMvQywrQkFBcUM7QUFJckMsU0FBUyxxQkFBcUIsQ0FBQyxJQUFhO0lBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDbkQsQ0FBQztBQVdELFNBQVMsWUFBWSxDQUFDLElBQTRCO0lBQ2hELElBQUEsZ0JBQU0sRUFBQyxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLGtDQUFrQyxDQUFDLENBQUM7SUFDdEYsSUFBQSxnQkFBTSxFQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztJQUN6RixPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7QUFDcEIsQ0FBQztBQUVEOzs7R0FHRztBQUNJLEtBQUssVUFBVSw2QkFBNkIsQ0FDakQsUUFB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bSAnY3J5cHRvJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IHgyNTUxOSB9IGZyb20gJ0Bub2JsZS9jdXJ2ZXMvZWQyNTUxOSc7XG5pbXBvcnQgeyBSZWRQYWxsYXNES0cgfSBmcm9tICcuL2RrZyc7XG5pbXBvcnQgeyBSZWRQYWxsYXNEU0cgfSBmcm9tICcuL2RzZyc7XG5pbXBvcnQgeyBEZXNlcmlhbGl6ZWRNZXNzYWdlcywgUmVkUGFsbGFzU2lnbmF0dXJlUmVzdWx0IH0gZnJvbSAnLi90eXBlcyc7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlWDI1NTE5S2V5cGFpcihzZWVkPzogQnVmZmVyKTogeyBwcml2S2V5OiBCdWZmZXI7IHB1YktleTogQnVmZmVyIH0ge1xuICBjb25zdCBwcml2S2V5ID0gc2VlZCA/IHNlZWQuc3ViYXJyYXkoMCwgMzIpIDogY3J5cHRvLnJhbmRvbUJ5dGVzKDMyKTtcbiAgY29uc3QgcHViS2V5ID0gQnVmZmVyLmZyb20oeDI1NTE5LmdldFB1YmxpY0tleShwcml2S2V5KSk7XG4gIHJldHVybiB7IHByaXZLZXk6IEJ1ZmZlci5mcm9tKHByaXZLZXkpLCBwdWJLZXkgfTtcbn1cblxuLyoqXG4gKiBQZXItcGFydHkgZGV0ZXJtaW5pc3RpYyBzZWVkIG1hdGVyaWFsLiBUbyB1c2UgdGhlIHNhbWUgc2VlZCBmb3IgYm90aCwgcGFzcyBpdCBhcyBib3RoIGZpZWxkcy5cbiAqIGBlbmNLZXlgIHNlZWRzIHRoZSBYMjU1MTkgZW5jcnlwdGlvbiBrZXk7IGBka2dTZWVkYCBzZWVkcyBES0cgcm91bmQgMC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWRQYWxsYXNES0dQYXJ0eVNlZWQge1xuICBlbmNLZXk/OiBCdWZmZXI7XG4gIGRrZ1NlZWQ/OiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2VlZChzZWVkPzogUmVkUGFsbGFzREtHUGFydHlTZWVkKTogUmVkUGFsbGFzREtHUGFydHlTZWVkIHtcbiAgYXNzZXJ0KCFzZWVkPy5lbmNLZXkgfHwgc2VlZC5lbmNLZXkubGVuZ3RoID49IDMyLCAnZW5jS2V5IG11c3QgYmUgYXQgbGVhc3QgMzIgYnl0ZXMnKTtcbiAgYXNzZXJ0KCFzZWVkPy5ka2dTZWVkIHx8IHNlZWQuZGtnU2VlZC5sZW5ndGggPj0gMzIsICdka2dTZWVkIG11c3QgYmUgYXQgbGVhc3QgMzIgYnl0ZXMnKTtcbiAgcmV0dXJuIHNlZWQgPz8ge307XG59XG5cbi8qKlxuICogUnVucyBhIGZ1bGwgMy1wYXJ0eSAoMi1vZi0zKSBSZWRQYWxsYXMgREtHIGluLXByb2Nlc3MuIFNlZSBgUmVkUGFsbGFzREtHUGFydHlTZWVkYC5cbiAqIE1pcnJvcnMgYGdlbmVyYXRlRWREc2FES0dLZXlTaGFyZXNgIGluIGAuLi9lZGRzYS1tcHMvdXRpbC50c2AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVJlZFBhbGxhc0RLR0tleVNoYXJlcyhcbiAgc2VlZFVzZXI/OiBSZWRQYWxsYXNES0dQYXJ0eVNlZWQsXG4gIHNlZWRCYWNrdXA/OiBSZWRQYWxsYXNES0dQYXJ0eVNlZWQsXG4gIHNlZWRCaXRnbz86IFJlZFBhbGxhc0RLR1BhcnR5U2VlZFxuKTogUHJvbWlzZTxbUmVkUGFsbGFzREtHLCBSZWRQYWxsYXNES0csIFJlZFBhbGxhc0RLR10+IHtcbiAgY29uc3QgeyBlbmNLZXk6IHVzZXJFbmNLZXksIGRrZ1NlZWQ6IHVzZXJEa2dTZWVkIH0gPSB2YWxpZGF0ZVNlZWQoc2VlZFVzZXIpO1xuICBjb25zdCB7IGVuY0tleTogYmFja3VwRW5jS2V5LCBka2dTZWVkOiBiYWNrdXBEa2dTZWVkIH0gPSB2YWxpZGF0ZVNlZWQoc2VlZEJhY2t1cCk7XG4gIGNvbnN0IHsgZW5jS2V5OiBiaXRnb0VuY0tleSwgZGtnU2VlZDogYml0Z29Ea2dTZWVkIH0gPSB2YWxpZGF0ZVNlZWQoc2VlZEJpdGdvKTtcblxuICBjb25zdCB1c2VyID0gbmV3IFJlZFBhbGxhc0RLRygzLCAyLCAwKTtcbiAgY29uc3QgYmFja3VwID0gbmV3IFJlZFBhbGxhc0RLRygzLCAyLCAxKTtcbiAgY29uc3QgYml0Z28gPSBuZXcgUmVkUGFsbGFzREtHKDMsIDIsIDIpO1xuXG4gIGNvbnN0IHVzZXJLUCA9IGdlbmVyYXRlWDI1NTE5S2V5cGFpcih1c2VyRW5jS2V5KTtcbiAgY29uc3QgYmFja3VwS1AgPSBnZW5lcmF0ZVgyNTUxOUtleXBhaXIoYmFja3VwRW5jS2V5KTtcbiAgY29uc3QgYml0Z29LUCA9IGdlbmVyYXRlWDI1NTE5S2V5cGFpcihiaXRnb0VuY0tleSk7XG5cbiAgYXdhaXQgdXNlci5pbml0RGtnKHVzZXJLUC5wcml2S2V5LCBbYmFja3VwS1AucHViS2V5LCBiaXRnb0tQLnB1YktleV0pO1xuICBhd2FpdCBiYWNrdXAuaW5pdERrZyhiYWNrdXBLUC5wcml2S2V5LCBbdXNlcktQLnB1YktleSwgYml0Z29LUC5wdWJLZXldKTtcbiAgYXdhaXQgYml0Z28uaW5pdERrZyhiaXRnb0tQLnByaXZLZXksIFt1c2VyS1AucHViS2V5LCBiYWNrdXBLUC5wdWJLZXldKTtcblxuICBjb25zdCByMU1lc3NhZ2VzID0gW1xuICAgIHVzZXIuZ2V0Rmlyc3RNZXNzYWdlKHVzZXJEa2dTZWVkKSxcbiAgICBiYWNrdXAuZ2V0Rmlyc3RNZXNzYWdlKGJhY2t1cERrZ1NlZWQpLFxuICAgIGJpdGdvLmdldEZpcnN0TWVzc2FnZShiaXRnb0RrZ1NlZWQpLFxuICBdO1xuXG4gIGNvbnN0IHIyTWVzc2FnZXMgPSBbXG4gICAgLi4udXNlci5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHIxTWVzc2FnZXMpLFxuICAgIC4uLmJhY2t1cC5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHIxTWVzc2FnZXMpLFxuICAgIC4uLmJpdGdvLmhhbmRsZUluY29taW5nTWVzc2FnZXMocjFNZXNzYWdlcyksXG4gIF07XG5cbiAgdXNlci5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHIyTWVzc2FnZXMpO1xuICBiYWNrdXAuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhyMk1lc3NhZ2VzKTtcbiAgYml0Z28uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhyMk1lc3NhZ2VzKTtcbiAgcmV0dXJuIFt1c2VyLCBiYWNrdXAsIGJpdGdvXTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyB0d28gUmVkUGFsbGFzIERTRyBwYXJ0aWVzIGFuZCBkcml2ZXMgdGhlbSB0aHJvdWdoIHRoZSBwcm90b2NvbCB1bnRpbCB0aGVcbiAqIHNwZWNpZmllZCByb3VuZC4gTWlycm9ycyBgZXhlY3V0ZVRpbGxSb3VuZGAgaW4gYC4uL2VkZHNhLW1wcy91dGlsLnRzYCwgbWludXMgdGhlXG4gKiBkZXJpdmF0aW9uIHBhdGggKFJlZFBhbGxhcyBEU0cgb3BlcmF0ZXMgb24gYW4gYWxyZWFkeS0ocm9vdC1vci1kZXJpdmVkKSBrZXlzaGFyZTsgdGhlcmVcbiAqIGlzIG5vIHBlci1zaWduaW5nLXNlc3Npb24gZGVyaXZhdGlvbiBwYXRoKS5cbiAqXG4gKiBAcGFyYW0gcm91bmQgLSBSb3VuZCB0byBleGVjdXRlIHVudGlsICgx4oCTMykuIFJldHVybnMgaW50ZXJtZWRpYXRlIG1lc3NhZ2UgYXJyYXlzIGZvciAx4oCTMixcbiAqICAgb3IgdGhlIGZpbmFsIGBSZWRQYWxsYXNTaWduYXR1cmVSZXN1bHRgIChzaWduYXR1cmUvcmsvYWxwaGEpIGZvciAzLlxuICogQHBhcmFtIHBhcnR5MURzZyAtIEZpcnN0IERTRyBwYXJ0eSAoYG5ldyBSZWRQYWxsYXNEU0cocGFydHlJZHgpYCksIG5vdCB5ZXQgaW5pdGlhbGl6ZWQuXG4gKiBAcGFyYW0gcGFydHkyRHNnIC0gU2Vjb25kIERTRyBwYXJ0eSAoYG5ldyBSZWRQYWxsYXNEU0cocGFydHlJZHgpYCksIG5vdCB5ZXQgaW5pdGlhbGl6ZWQuXG4gKiBAcGFyYW0ga2V5U2hhcmUxIC0gS2V5IHNoYXJlIGZvciB0aGUgZmlyc3QgcGFydHkuXG4gKiBAcGFyYW0ga2V5U2hhcmUyIC0gS2V5IHNoYXJlIGZvciB0aGUgc2Vjb25kIHBhcnR5LlxuICogQHBhcmFtIG1lc3NhZ2UgLSBSYXcgbWVzc2FnZSBieXRlcyB0byBzaWduLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZVRpbGxSb3VuZChcbiAgcm91bmQ6IG51bWJlcixcbiAgcGFydHkxRHNnOiBSZWRQYWxsYXNEU0csXG4gIHBhcnR5MkRzZzogUmVkUGFsbGFzRFNHLFxuICBrZXlTaGFyZTE6IEJ1ZmZlcixcbiAga2V5U2hhcmUyOiBCdWZmZXIsXG4gIG1lc3NhZ2U6IEJ1ZmZlclxuKTogUHJvbWlzZTxEZXNlcmlhbGl6ZWRNZXNzYWdlc1tdIHwgUmVkUGFsbGFzU2lnbmF0dXJlUmVzdWx0PiB7XG4gIGlmIChyb3VuZCA8IDEgfHwgcm91bmQgPiAzKSB7XG4gICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgcm91bmQgbnVtYmVyJyk7XG4gIH1cbiAgYXdhaXQgcGFydHkxRHNnLmluaXREc2coa2V5U2hhcmUxLCBtZXNzYWdlLCBwYXJ0eTJEc2cuZ2V0UGFydHlJZHgoKSk7XG4gIGF3YWl0IHBhcnR5MkRzZy5pbml0RHNnKGtleVNoYXJlMiwgbWVzc2FnZSwgcGFydHkxRHNnLmdldFBhcnR5SWR4KCkpO1xuICBjb25zdCBwYXJ0eTFSb3VuZDBNZXNzYWdlID0gcGFydHkxRHNnLmdldEZpcnN0TWVzc2FnZSgpO1xuICBjb25zdCBwYXJ0eTJSb3VuZDBNZXNzYWdlID0gcGFydHkyRHNnLmdldEZpcnN0TWVzc2FnZSgpO1xuXG4gIGNvbnN0IFtwYXJ0eTJSb3VuZDFNZXNzYWdlc10gPSBwYXJ0eTJEc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbcGFydHkxUm91bmQwTWVzc2FnZSwgcGFydHkyUm91bmQwTWVzc2FnZV0pO1xuICBjb25zdCBbcGFydHkxUm91bmQxTWVzc2FnZXNdID0gcGFydHkxRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW3BhcnR5MVJvdW5kME1lc3NhZ2UsIHBhcnR5MlJvdW5kME1lc3NhZ2VdKTtcbiAgaWYgKHJvdW5kID09PSAxKSByZXR1cm4gW1twYXJ0eTFSb3VuZDFNZXNzYWdlc10sIFtwYXJ0eTJSb3VuZDFNZXNzYWdlc11dO1xuXG4gIGNvbnN0IFtwYXJ0eTFSb3VuZDJNZXNzYWdlc10gPSBwYXJ0eTFEc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbcGFydHkxUm91bmQxTWVzc2FnZXMsIHBhcnR5MlJvdW5kMU1lc3NhZ2VzXSk7XG4gIGNvbnN0IFtwYXJ0eTJSb3VuZDJNZXNzYWdlc10gPSBwYXJ0eTJEc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbcGFydHkxUm91bmQxTWVzc2FnZXMsIHBhcnR5MlJvdW5kMU1lc3NhZ2VzXSk7XG4gIGlmIChyb3VuZCA9PT0gMikgcmV0dXJuIFtbcGFydHkxUm91bmQyTWVzc2FnZXNdLCBbcGFydHkyUm91bmQyTWVzc2FnZXNdXTtcblxuICBwYXJ0eTFEc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbcGFydHkxUm91bmQyTWVzc2FnZXMsIHBhcnR5MlJvdW5kMk1lc3NhZ2VzXSk7XG4gIHBhcnR5MkRzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDJNZXNzYWdlcywgcGFydHkyUm91bmQyTWVzc2FnZXNdKTtcblxuICBjb25zdCBzaWcxID0gcGFydHkxRHNnLmdldFNpZ25hdHVyZSgpO1xuICBjb25zdCBzaWcyID0gcGFydHkyRHNnLmdldFNpZ25hdHVyZSgpO1xuICBhc3NlcnQoc2lnMS5zaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpID09PSBzaWcyLnNpZ25hdHVyZS50b1N0cmluZygnaGV4JykpO1xuICBhc3NlcnQoc2lnMS5yay50b1N0cmluZygnaGV4JykgPT09IHNpZzIucmsudG9TdHJpbmcoJ2hleCcpKTtcbiAgYXNzZXJ0KHNpZzEuYWxwaGEudG9TdHJpbmcoJ2hleCcpID09PSBzaWcyLmFscGhhLnRvU3RyaW5nKCdoZXgnKSk7XG4gIHJldHVybiBzaWcxO1xufVxuXG4vKipcbiAqIFZlcmlmaWVzIGEgYFJlZFBhbGxhc1NpZ25hdHVyZVJlc3VsdGAgYWdhaW5zdCB0aGUgcmF3IG1lc3NhZ2UuXG4gKlxuICogSU1QT1JUQU5UOiB1bmxpa2UgRWREU0EsIFJlZFBhbGxhcyBzaWduYXR1cmVzIG11c3QgYmUgdmVyaWZpZWQgYWdhaW5zdCBgcmtgIOKAlCB0aGVcbiAqIHJhbmRvbWl6ZWQgdmVyaWZpY2F0aW9uIGtleSBwcm9kdWNlZCBhbG9uZ3NpZGUgdGhlIHNpZ25hdHVyZSBieSBEU0cgcm91bmQzIOKAlCBhbmQgTk9UXG4gKiBhZ2FpbnN0IHRoZSBES0cgKG9yIGRlcml2ZWQpIHB1YmxpYyBrZXkgZGlyZWN0bHkuIGByayA9IHBrICsgW2FscGhhXUdgOyBgYWxwaGFgIGlzXG4gKiBpbmNsdWRlZCBpbiBgUmVkUGFsbGFzU2lnbmF0dXJlUmVzdWx0YCBmb3IgY2FsbGVycyB0aGF0IG5lZWQgdG8gaW5kZXBlbmRlbnRseSBjb25maXJtXG4gKiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHJrYCBhbmQgYSBrbm93biBgcGtgLCBidXQgaXMgbm90IHJlcXVpcmVkIHRvIHZlcmlmeSB0aGVcbiAqIHNpZ25hdHVyZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlSZWRQYWxsYXNTaWduYXR1cmUoXG4gIHNpZ25hdHVyZVJlc3VsdDogUmVkUGFsbGFzU2lnbmF0dXJlUmVzdWx0LFxuICBtZXNzYWdlOiBCdWZmZXJcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB3YXNtID1cbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAhd2luZG93LnByb2Nlc3MgJiYgIXdpbmRvdy5wcm9jZXNzPy5bJ3R5cGUnXVxuICAgICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWludGVybmFsLW1vZHVsZXMgLS0gQGJpdGdvL3dhc20tbXBzIGV4cG9zZXMgZW52aXJvbm1lbnQtc3BlY2lmaWMgc3VicGF0aCBleHBvcnRzLlxuICAgICAgICBhd2FpdCBpbXBvcnQoJ0BiaXRnby93YXNtLW1wcy93ZWInKS50aGVuKGFzeW5jICh3ZWJXYXNtKSA9PiB7XG4gICAgICAgICAgYXdhaXQgd2ViV2FzbS5kZWZhdWx0KCk7XG4gICAgICAgICAgcmV0dXJuIHdlYldhc207XG4gICAgICAgIH0pXG4gICAgICA6IGF3YWl0IGltcG9ydCgnQGJpdGdvL3dhc20tbXBzJyk7XG4gIHJldHVybiB3YXNtLnJlZHBhbGxhc192ZXJpZnkoc2lnbmF0dXJlUmVzdWx0LnJrLCBzaWduYXR1cmVSZXN1bHQuc2lnbmF0dXJlLCBtZXNzYWdlKTtcbn1cbiJdfQ==
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvcmVkcGFsbGFzLW1wcy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUNBLHNFQXFDQztBQVFELHNDQXFCQztBQW9CRCw0Q0FnQ0M7QUFhRCw0REFhQztBQWpMRCxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLG1EQUErQztBQUMvQywrQkFBcUM7QUFLckMsU0FBUyxxQkFBcUIsQ0FBQyxJQUFhO0lBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDbkQsQ0FBQztBQVdELFNBQVMsWUFBWSxDQUFDLElBQTRCO0lBQ2hELElBQUEsZ0JBQU0sRUFBQyxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLGtDQUFrQyxDQUFDLENBQUM7SUFDdEYsSUFBQSxnQkFBTSxFQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztJQUN6RixPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7QUFDcEIsQ0FBQztBQUVEOzs7R0FHRztBQUNJLEtBQUssVUFBVSw2QkFB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dGVudCI6WyJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyB4MjU1MTkgfSBmcm9tICdAbm9ibGUvY3VydmVzL2VkMjU1MTknO1xuaW1wb3J0IHsgUmVkUGFsbGFzREtHIH0gZnJvbSAnLi9ka2cnO1xuaW1wb3J0IHsgUmVkUGFsbGFzRFNHIH0gZnJvbSAnLi9kc2cnO1xuaW1wb3J0IHsgUmVkUGFsbGFzUmVyYW5kIH0gZnJvbSAnLi9yZXJhbmQnO1xuaW1wb3J0IHsgRGVzZXJpYWxpemVkTWVzc2FnZXMsIFJlZFBhbGxhc1JlcmFuZFJlc3VsdCwgUmVkUGFsbGFzU2lnbmF0dXJlUmVzdWx0IH0gZnJvbSAnLi90eXBlcyc7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlWDI1NTE5S2V5cGFpcihzZWVkPzogQnVmZmVyKTogeyBwcml2S2V5OiBCdWZmZXI7IHB1YktleTogQnVmZmVyIH0ge1xuICBjb25zdCBwcml2S2V5ID0gc2VlZCA/IHNlZWQuc3ViYXJyYXkoMCwgMzIpIDogY3J5cHRvLnJhbmRvbUJ5dGVzKDMyKTtcbiAgY29uc3QgcHViS2V5ID0gQnVmZmVyLmZyb20oeDI1NTE5LmdldFB1YmxpY0tleShwcml2S2V5KSk7XG4gIHJldHVybiB7IHByaXZLZXk6IEJ1ZmZlci5mcm9tKHByaXZLZXkpLCBwdWJLZXkgfTtcbn1cblxuLyoqXG4gKiBQZXItcGFydHkgZGV0ZXJtaW5pc3RpYyBzZWVkIG1hdGVyaWFsLiBUbyB1c2UgdGhlIHNhbWUgc2VlZCBmb3IgYm90aCwgcGFzcyBpdCBhcyBib3RoIGZpZWxkcy5cbiAqIGBlbmNLZXlgIHNlZWRzIHRoZSBYMjU1MTkgZW5jcnlwdGlvbiBrZXk7IGBka2dTZWVkYCBzZWVkcyBES0cgcm91bmQgMC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWRQYWxsYXNES0dQYXJ0eVNlZWQge1xuICBlbmNLZXk/OiBCdWZmZXI7XG4gIGRrZ1NlZWQ/OiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2VlZChzZWVkPzogUmVkUGFsbGFzREtHUGFydHlTZWVkKTogUmVkUGFsbGFzREtHUGFydHlTZWVkIHtcbiAgYXNzZXJ0KCFzZWVkPy5lbmNLZXkgfHwgc2VlZC5lbmNLZXkubGVuZ3RoID49IDMyLCAnZW5jS2V5IG11c3QgYmUgYXQgbGVhc3QgMzIgYnl0ZXMnKTtcbiAgYXNzZXJ0KCFzZWVkPy5ka2dTZWVkIHx8IHNlZWQuZGtnU2VlZC5sZW5ndGggPj0gMzIsICdka2dTZWVkIG11c3QgYmUgYXQgbGVhc3QgMzIgYnl0ZXMnKTtcbiAgcmV0dXJuIHNlZWQgPz8ge307XG59XG5cbi8qKlxuICogUnVucyBhIGZ1bGwgMy1wYXJ0eSAoMi1vZi0zKSBSZWRQYWxsYXMgREtHIGluLXByb2Nlc3MuIFNlZSBgUmVkUGFsbGFzREtHUGFydHlTZWVkYC5cbiAqIE1pcnJvcnMgYGdlbmVyYXRlRWREc2FES0dLZXlTaGFyZXNgIGluIGAuLi9lZGRzYS1tcHMvdXRpbC50c2AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVJlZFBhbGxhc0RLR0tleVNoYXJlcyhcbiAgc2VlZFVzZXI/OiBSZWRQYWxsYXNES0dQYXJ0eVNlZWQsXG4gIHNlZWRCYWNrdXA/OiBSZWRQYWxsYXNES0dQYXJ0eVNlZWQsXG4gIHNlZWRCaXRnbz86IFJlZFBhbGxhc0RLR1BhcnR5U2VlZFxuKTogUHJvbWlzZTxbUmVkUGFsbGFzREtHLCBSZWRQYWxsYXNES0csIFJlZFBhbGxhc0RLR10+IHtcbiAgY29uc3QgeyBlbmNLZXk6IHVzZXJFbmNLZXksIGRrZ1NlZWQ6IHVzZXJEa2dTZWVkIH0gPSB2YWxpZGF0ZVNlZWQoc2VlZFVzZXIpO1xuICBjb25zdCB7IGVuY0tleTogYmFja3VwRW5jS2V5LCBka2dTZWVkOiBiYWNrdXBEa2dTZWVkIH0gPSB2YWxpZGF0ZVNlZWQoc2VlZEJhY2t1cCk7XG4gIGNvbnN0IHsgZW5jS2V5OiBiaXRnb0VuY0tleSwgZGtnU2VlZDogYml0Z29Ea2dTZWVkIH0gPSB2YWxpZGF0ZVNlZWQoc2VlZEJpdGdvKTtcblxuICBjb25zdCB1c2VyID0gbmV3IFJlZFBhbGxhc0RLRygzLCAyLCAwKTtcbiAgY29uc3QgYmFja3VwID0gbmV3IFJlZFBhbGxhc0RLRygzLCAyLCAxKTtcbiAgY29uc3QgYml0Z28gPSBuZXcgUmVkUGFsbGFzREtHKDMsIDIsIDIpO1xuXG4gIGNvbnN0IHVzZXJLUCA9IGdlbmVyYXRlWDI1NTE5S2V5cGFpcih1c2VyRW5jS2V5KTtcbiAgY29uc3QgYmFja3VwS1AgPSBnZW5lcmF0ZVgyNTUxOUtleXBhaXIoYmFja3VwRW5jS2V5KTtcbiAgY29uc3QgYml0Z29LUCA9IGdlbmVyYXRlWDI1NTE5S2V5cGFpcihiaXRnb0VuY0tleSk7XG5cbiAgYXdhaXQgdXNlci5pbml0RGtnKHVzZXJLUC5wcml2S2V5LCBbYmFja3VwS1AucHViS2V5LCBiaXRnb0tQLnB1YktleV0pO1xuICBhd2FpdCBiYWNrdXAuaW5pdERrZyhiYWNrdXBLUC5wcml2S2V5LCBbdXNlcktQLnB1YktleSwgYml0Z29LUC5wdWJLZXldKTtcbiAgYXdhaXQgYml0Z28uaW5pdERrZyhiaXRnb0tQLnByaXZLZXksIFt1c2VyS1AucHViS2V5LCBiYWNrdXBLUC5wdWJLZXldKTtcblxuICBjb25zdCByMU1lc3NhZ2VzID0gW1xuICAgIHVzZXIuZ2V0Rmlyc3RNZXNzYWdlKHVzZXJEa2dTZWVkKSxcbiAgICBiYWNrdXAuZ2V0Rmlyc3RNZXNzYWdlKGJhY2t1cERrZ1NlZWQpLFxuICAgIGJpdGdvLmdldEZpcnN0TWVzc2FnZShiaXRnb0RrZ1NlZWQpLFxuICBdO1xuXG4gIGNvbnN0IHIyTWVzc2FnZXMgPSBbXG4gICAgLi4udXNlci5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHIxTWVzc2FnZXMpLFxuICAgIC4uLmJhY2t1cC5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHIxTWVzc2FnZXMpLFxuICAgIC4uLmJpdGdvLmhhbmRsZUluY29taW5nTWVzc2FnZXMocjFNZXNzYWdlcyksXG4gIF07XG5cbiAgdXNlci5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHIyTWVzc2FnZXMpO1xuICBiYWNrdXAuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhyMk1lc3NhZ2VzKTtcbiAgYml0Z28uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhyMk1lc3NhZ2VzKTtcbiAgcmV0dXJuIFt1c2VyLCBiYWNrdXAsIGJpdGdvXTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgZnVsbCAyLXBhcnR5IHJlcmFuZCBzZXNzaW9uIGluLXByb2Nlc3M6IHRoZSBrZXkgcmUtcmFuZG9taXphdGlvbiB0aGF0IG11c3RcbiAqIHByZWNlZGUgZXZlcnkgUmVkUGFsbGFzIERTRyAoc2FtZSAyIHBhcnRpZXMgdGhhdCB3aWxsIHRoZW4gc2lnbikuIFNlZSBgUmVkUGFsbGFzUmVyYW5kYFxuICogZm9yIHRoZSBwcm90b2NvbC4gQXNzZXJ0cyB0aGF0IGJvdGggcGFydGllcyBhZ3JlZSBvbiB0aGUgcmVyYW5kb21pemVkIHB1YmxpYyBrZXkgYHBrYFxuICogYW5kIHRoZSB0d2VhayBzY2FsYXIgYGFscGhhYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVSZXJhbmQoXG4gIHBhcnR5MTogUmVkUGFsbGFzUmVyYW5kLFxuICBwYXJ0eTI6IFJlZFBhbGxhc1JlcmFuZCxcbiAga2V5U2hhcmUxOiBCdWZmZXIsXG4gIGtleVNoYXJlMjogQnVmZmVyXG4pOiBQcm9taXNlPFtSZWRQYWxsYXNSZXJhbmRSZXN1bHQsIFJlZFBhbGxhc1JlcmFuZFJlc3VsdF0+IHtcbiAgYXdhaXQgcGFydHkxLmluaXRSZXJhbmQoa2V5U2hhcmUxLCBwYXJ0eTIuZ2V0UGFydHlJZHgoKSk7XG4gIGF3YWl0IHBhcnR5Mi5pbml0UmVyYW5kKGtleVNoYXJlMiwgcGFydHkxLmdldFBhcnR5SWR4KCkpO1xuICBjb25zdCBwYXJ0eTFSb3VuZDBNZXNzYWdlID0gcGFydHkxLmdldEZpcnN0TWVzc2FnZSgpO1xuICBjb25zdCBwYXJ0eTJSb3VuZDBNZXNzYWdlID0gcGFydHkyLmdldEZpcnN0TWVzc2FnZSgpO1xuXG4gIGNvbnN0IFtwYXJ0eTFSb3VuZDFNZXNzYWdlXSA9IHBhcnR5MS5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDBNZXNzYWdlLCBwYXJ0eTJSb3VuZDBNZXNzYWdlXSk7XG4gIGNvbnN0IFtwYXJ0eTJSb3VuZDFNZXNzYWdlXSA9IHBhcnR5Mi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDBNZXNzYWdlLCBwYXJ0eTJSb3VuZDBNZXNzYWdlXSk7XG4gIHBhcnR5MS5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDFNZXNzYWdlLCBwYXJ0eTJSb3VuZDFNZXNzYWdlXSk7XG4gIHBhcnR5Mi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDFNZXNzYWdlLCBwYXJ0eTJSb3VuZDFNZXNzYWdlXSk7XG5cbiAgY29uc3QgcmVzdWx0MSA9IHBhcnR5MS5nZXRSZXJhbmRvbWl6ZWRLZXlTaGFyZSgpO1xuICBjb25zdCByZXN1bHQyID0gcGFydHkyLmdldFJlcmFuZG9taXplZEtleVNoYXJlKCk7XG4gIGFzc2VydChyZXN1bHQxLnBrLnRvU3RyaW5nKCdoZXgnKSA9PT0gcmVzdWx0Mi5way50b1N0cmluZygnaGV4JykpO1xuICBhc3NlcnQocmVzdWx0MS5hbHBoYS50b1N0cmluZygnaGV4JykgPT09IHJlc3VsdDIuYWxwaGEudG9TdHJpbmcoJ2hleCcpKTtcbiAgcmV0dXJuIFtyZXN1bHQxLCByZXN1bHQyXTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyB0d28gUmVkUGFsbGFzIERTRyBwYXJ0aWVzIGFuZCBkcml2ZXMgdGhlbSB0aHJvdWdoIHRoZSBwcm90b2NvbCB1bnRpbCB0aGVcbiAqIHNwZWNpZmllZCByb3VuZC4gTWlycm9ycyBgZXhlY3V0ZVRpbGxSb3VuZGAgaW4gYC4uL2VkZHNhLW1wcy91dGlsLnRzYCwgbWludXMgdGhlXG4gKiBkZXJpdmF0aW9uIHBhdGggKFJlZFBhbGxhcyBEU0cgb3BlcmF0ZXMgb24gYW4gYWxyZWFkeS0ocm9vdC1vci1kZXJpdmVkKSBrZXlzaGFyZTsgdGhlcmVcbiAqIGlzIG5vIHBlci1zaWduaW5nLXNlc3Npb24gZGVyaXZhdGlvbiBwYXRoKS5cbiAqXG4gKiBUaGUga2V5c2hhcmVzIGFyZSB1c2VkIGFzIGdpdmVuOiBmb3IgdGhlIHN1cHBvcnRlZCBmbG93IHRoZXkgYXJlIHJlcmFuZCBvdXRwdXRzIGZyb21cbiAqIGBleGVjdXRlUmVyYW5kYCwgaW4gd2hpY2ggY2FzZSBib3RoIHBhcnRpZXMnIHNpZ25hdHVyZSBgcmtgIGVxdWFscyB0aGUgcmVyYW5kIGBwa2BcbiAqIGFuZCB0aGUgc2lnbmF0dXJlIHZlcmlmaWVzIHVuZGVyIGl0LlxuICpcbiAqIEBwYXJhbSByb3VuZCAtIFJvdW5kIHRvIGV4ZWN1dGUgdW50aWwgKDHigJMzKS4gUmV0dXJucyBpbnRlcm1lZGlhdGUgbWVzc2FnZSBhcnJheXMgZm9yIDHigJMyLFxuICogICBvciB0aGUgZmluYWwgYFJlZFBhbGxhc1NpZ25hdHVyZVJlc3VsdGAgKHNpZ25hdHVyZS9yaykgZm9yIDMuXG4gKiBAcGFyYW0gcGFydHkxRHNnIC0gRmlyc3QgRFNHIHBhcnR5IChgbmV3IFJlZFBhbGxhc0RTRyhwYXJ0eUlkeClgKSwgbm90IHlldCBpbml0aWFsaXplZC5cbiAqIEBwYXJhbSBwYXJ0eTJEc2cgLSBTZWNvbmQgRFNHIHBhcnR5IChgbmV3IFJlZFBhbGxhc0RTRyhwYXJ0eUlkeClgKSwgbm90IHlldCBpbml0aWFsaXplZC5cbiAqIEBwYXJhbSBrZXlTaGFyZTEgLSBLZXkgc2hhcmUgZm9yIHRoZSBmaXJzdCBwYXJ0eS5cbiAqIEBwYXJhbSBrZXlTaGFyZTIgLSBLZXkgc2hhcmUgZm9yIHRoZSBzZWNvbmQgcGFydHkuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFJhdyBtZXNzYWdlIGJ5dGVzIHRvIHNpZ24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlVGlsbFJvdW5kKFxuICByb3VuZDogbnVtYmVyLFxuICBwYXJ0eTFEc2c6IFJlZFBhbGxhc0RTRyxcbiAgcGFydHkyRHNnOiBSZWRQYWxsYXNEU0csXG4gIGtleVNoYXJlMTogQnVmZmVyLFxuICBrZXlTaGFyZTI6IEJ1ZmZlcixcbiAgbWVzc2FnZTogQnVmZmVyXG4pOiBQcm9taXNlPERlc2VyaWFsaXplZE1lc3NhZ2VzW10gfCBSZWRQYWxsYXNTaWduYXR1cmVSZXN1bHQ+IHtcbiAgaWYgKHJvdW5kIDwgMSB8fCByb3VuZCA+IDMpIHtcbiAgICB0aHJvdyBFcnJvcignSW52YWxpZCByb3VuZCBudW1iZXInKTtcbiAgfVxuICBhd2FpdCBwYXJ0eTFEc2cuaW5pdERzZyhrZXlTaGFyZTEsIG1lc3NhZ2UsIHBhcnR5MkRzZy5nZXRQYXJ0eUlkeCgpKTtcbiAgYXdhaXQgcGFydHkyRHNnLmluaXREc2coa2V5U2hhcmUyLCBtZXNzYWdlLCBwYXJ0eTFEc2cuZ2V0UGFydHlJZHgoKSk7XG4gIGNvbnN0IHBhcnR5MVJvdW5kME1lc3NhZ2UgPSBwYXJ0eTFEc2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG4gIGNvbnN0IHBhcnR5MlJvdW5kME1lc3NhZ2UgPSBwYXJ0eTJEc2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG5cbiAgY29uc3QgW3BhcnR5MlJvdW5kMU1lc3NhZ2VzXSA9IHBhcnR5MkRzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDBNZXNzYWdlLCBwYXJ0eTJSb3VuZDBNZXNzYWdlXSk7XG4gIGNvbnN0IFtwYXJ0eTFSb3VuZDFNZXNzYWdlc10gPSBwYXJ0eTFEc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbcGFydHkxUm91bmQwTWVzc2FnZSwgcGFydHkyUm91bmQwTWVzc2FnZV0pO1xuICBpZiAocm91bmQgPT09IDEpIHJldHVybiBbW3BhcnR5MVJvdW5kMU1lc3NhZ2VzXSwgW3BhcnR5MlJvdW5kMU1lc3NhZ2VzXV07XG5cbiAgY29uc3QgW3BhcnR5MVJvdW5kMk1lc3NhZ2VzXSA9IHBhcnR5MURzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDFNZXNzYWdlcywgcGFydHkyUm91bmQxTWVzc2FnZXNdKTtcbiAgY29uc3QgW3BhcnR5MlJvdW5kMk1lc3NhZ2VzXSA9IHBhcnR5MkRzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDFNZXNzYWdlcywgcGFydHkyUm91bmQxTWVzc2FnZXNdKTtcbiAgaWYgKHJvdW5kID09PSAyKSByZXR1cm4gW1twYXJ0eTFSb3VuZDJNZXNzYWdlc10sIFtwYXJ0eTJSb3VuZDJNZXNzYWdlc11dO1xuXG4gIHBhcnR5MURzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDJNZXNzYWdlcywgcGFydHkyUm91bmQyTWVzc2FnZXNdKTtcbiAgcGFydHkyRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW3BhcnR5MVJvdW5kMk1lc3NhZ2VzLCBwYXJ0eTJSb3VuZDJNZXNzYWdlc10pO1xuXG4gIGNvbnN0IHNpZzEgPSBwYXJ0eTFEc2cuZ2V0U2lnbmF0dXJlKCk7XG4gIGNvbnN0IHNpZzIgPSBwYXJ0eTJEc2cuZ2V0U2lnbmF0dXJlKCk7XG4gIGFzc2VydChzaWcxLnNpZ25hdHVyZS50b1N0cmluZygnaGV4JykgPT09IHNpZzIuc2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKSk7XG4gIGFzc2VydChzaWcxLnJrLnRvU3RyaW5nKCdoZXgnKSA9PT0gc2lnMi5yay50b1N0cmluZygnaGV4JykpO1xuICByZXR1cm4gc2lnMTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyBhIGBSZWRQYWxsYXNTaWduYXR1cmVSZXN1bHRgIGFnYWluc3QgdGhlIHJhdyBtZXNzYWdlLlxuICpcbiAqIElNUE9SVEFOVDogdW5saWtlIEVkRFNBLCBSZWRQYWxsYXMgc2lnbmF0dXJlcyBtdXN0IGJlIHZlcmlmaWVkIGFnYWluc3QgYHJrYCDigJQgdGhlXG4gKiByZXJhbmRvbWl6ZWQgdmVyaWZpY2F0aW9uIGtleSBwcm9kdWNlZCBieSB0aGUgcmVyYW5kIHNlc3Npb24gdGhhdCBwcmVjZWRlZCBEU0cg4oCUIGFuZFxuICogTk9UIGFnYWluc3QgdGhlIERLRyAob3IgZGVyaXZlZCkgcHVibGljIGtleSBkaXJlY3RseS4gYHJrYCBlcXVhbHMgdGhlIHJlcmFuZCByZXN1bHQnc1xuICogYHBrYCAoYHBrID0gcGtfZGtnICsgW2FscGhhXUdgKTsgdGhlIGBhbHBoYWAgcmFuZG9taXplciBpcyBhdmFpbGFibGUgZnJvbVxuICogYFJlZFBhbGxhc1JlcmFuZC5nZXRSZXJhbmRvbWl6ZWRLZXlTaGFyZSgpYCBmb3IgY2FsbGVycyB0aGF0IG5lZWQgdG8gaW5kZXBlbmRlbnRseVxuICogY29uZmlybSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHJrYCBhbmQgYSBrbm93biBgcGtgLCBidXQgaXMgbm90IHJlcXVpcmVkIHRvIHZlcmlmeVxuICogdGhlIHNpZ25hdHVyZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlSZWRQYWxsYXNTaWduYXR1cmUoXG4gIHNpZ25hdHVyZVJlc3VsdDogUmVkUGFsbGFzU2lnbmF0dXJlUmVzdWx0LFxuICBtZXNzYWdlOiBCdWZmZXJcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB3YXNtID1cbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAhd2luZG93LnByb2Nlc3MgJiYgIXdpbmRvdy5wcm9jZXNzPy5bJ3R5cGUnXVxuICAgICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWludGVybmFsLW1vZHVsZXMgLS0gQGJpdGdvL3dhc20tbXBzIGV4cG9zZXMgZW52aXJvbm1lbnQtc3BlY2lmaWMgc3VicGF0aCBleHBvcnRzLlxuICAgICAgICBhd2FpdCBpbXBvcnQoJ0BiaXRnby93YXNtLW1wcy93ZWInKS50aGVuKGFzeW5jICh3ZWJXYXNtKSA9PiB7XG4gICAgICAgICAgYXdhaXQgd2ViV2FzbS5kZWZhdWx0KCk7XG4gICAgICAgICAgcmV0dXJuIHdlYldhc207XG4gICAgICAgIH0pXG4gICAgICA6IGF3YWl0IGltcG9ydCgnQGJpdGdvL3dhc20tbXBzJyk7XG4gIHJldHVybiB3YXNtLnJlZHBhbGxhc192ZXJpZnkoc2lnbmF0dXJlUmVzdWx0LnJrLCBzaWduYXR1cmVSZXN1bHQuc2lnbmF0dXJlLCBtZXNzYWdlKTtcbn1cbiJdfQ==
|