@deso-core/identity
Advanced tools
Comparing version 0.0.14 to 0.0.15
{ | ||
"name": "@deso-core/identity", | ||
"version": "0.0.14", | ||
"version": "0.0.15", | ||
"type": "commonjs", | ||
@@ -13,3 +13,3 @@ "repository": { | ||
"bs58": "^5.0.0", | ||
"deso-protocol-types": "0.5.0" | ||
"deso-protocol-types": "0.5.7" | ||
}, | ||
@@ -16,0 +16,0 @@ "main": "./src/index.js", |
@@ -71,3 +71,3 @@ # @deso-core/identity | ||
const event = state.event; | ||
// The current user object contains the user's current permissions | ||
@@ -137,7 +137,5 @@ // (TransactionCountLimitMap). This value will be updated when the logged in | ||
// Encrypt plain text. Likely you would be using the messagingPrivateKey found on the | ||
// identity user's derived key to be used for encrypted chat or messaging applications. | ||
// Returns a promise that resolves to a hex encoded encrypted string. | ||
const encryptedMessageHex = await encrypt( | ||
senderMessagingPrivateSeedHex, | ||
// Encrypt plain text with the recipients public key. This can be subsequently | ||
// decrypted using the recipient's private key. | ||
const encryptedMessageHex = await identity.encryptMessage( | ||
recipientPublicKeyBase58Check, | ||
@@ -147,7 +145,16 @@ plaintextMsg | ||
// Decrypt cipher text. Returns a promise that resolves to a decrypted, plaintext string. | ||
const decryptedMessagePlaintext = await decrypt( | ||
recipientMessagingPrivateSeedHex, | ||
senderPublicKeyBase58Check, | ||
hexEncodedCipherText | ||
// Decrypt a message returned from any of the message endpoints of the deso | ||
// backend messages api. If it is a group message you will need to fetch the | ||
// groups the user is a member of and provide them. If it's known that the | ||
// message is not a a group message you can pass an empty array for the groups | ||
// parameter. | ||
// | ||
// See the api docs for sending and receiving messages here: | ||
// https://docs.deso.org/deso-backend/api/messages-endpoints | ||
// | ||
// See the api docs for access groups here: | ||
// https://docs.deso.org/deso-backend/api/access-group-endpoints | ||
const decryptedMessagePlaintext = await identity.decryptMessage( | ||
message, | ||
accessGroups | ||
); | ||
@@ -154,0 +161,0 @@ ``` |
import { Identity } from './lib/identity'; | ||
export declare const identity: Identity; | ||
export * from './lib/crypto-utils'; | ||
export * from './lib/error-types'; | ||
export * from './lib/types'; |
@@ -8,4 +8,5 @@ "use strict"; | ||
exports.identity = new identity_1.Identity(window, api_1.api); | ||
(0, tslib_1.__exportStar)(require("./lib/crypto-utils"), exports); | ||
(0, tslib_1.__exportStar)(require("./lib/error-types"), exports); | ||
(0, tslib_1.__exportStar)(require("./lib/types"), exports); | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2lkZW50aXR5L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsbUNBQWdDO0FBQ2hDLDZDQUEwQztBQUU3QixRQUFBLFFBQVEsR0FBRyxJQUFJLG1CQUFRLENBQUMsTUFBTSxFQUFFLFNBQUcsQ0FBQyxDQUFDO0FBQ2xELGlFQUFrQztBQUNsQywyREFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhcGkgfSBmcm9tICcuL2xpYi9hcGknO1xuaW1wb3J0IHsgSWRlbnRpdHkgfSBmcm9tICcuL2xpYi9pZGVudGl0eSc7XG5cbmV4cG9ydCBjb25zdCBpZGVudGl0eSA9IG5ldyBJZGVudGl0eSh3aW5kb3csIGFwaSk7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9lcnJvci10eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90eXBlcyc7XG4iXX0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2lkZW50aXR5L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsbUNBQWdDO0FBQ2hDLDZDQUEwQztBQUU3QixRQUFBLFFBQVEsR0FBRyxJQUFJLG1CQUFRLENBQUMsTUFBTSxFQUFFLFNBQUcsQ0FBQyxDQUFDO0FBQ2xELGtFQUFtQztBQUNuQyxpRUFBa0M7QUFDbEMsMkRBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXBpIH0gZnJvbSAnLi9saWIvYXBpJztcbmltcG9ydCB7IElkZW50aXR5IH0gZnJvbSAnLi9saWIvaWRlbnRpdHknO1xuXG5leHBvcnQgY29uc3QgaWRlbnRpdHkgPSBuZXcgSWRlbnRpdHkod2luZG93LCBhcGkpO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY3J5cHRvLXV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Vycm9yLXR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R5cGVzJztcbiJdfQ== |
@@ -5,3 +5,9 @@ import { jwtAlgorithm, KeyPair, Network } from './types'; | ||
} | ||
export declare const keygen: () => KeyPair; | ||
export declare const keygen: (seed?: string | Uint8Array | undefined) => KeyPair; | ||
/** | ||
* | ||
* @param data could be a hex string or a byte array (Uint8Array) | ||
* @returns | ||
*/ | ||
export declare const sha256X2: (data: Uint8Array | string) => Promise<Uint8Array>; | ||
export declare const publicKeyToBase58Check: (publicKeyBytes: Uint8Array, options?: Base58CheckOptions | undefined) => Promise<string>; | ||
@@ -16,5 +22,12 @@ export interface SignOptions { | ||
}) => Promise<string>; | ||
export declare const encrypt: (senderSeedHex: string, recipientPublicKeyBase58Check: string, plaintext: string) => Promise<string>; | ||
export declare const encryptChatMessage: (senderSeedHex: string, recipientPublicKeyBase58Check: string, message: string) => Promise<string>; | ||
/** | ||
* @param publicEncryptionKey could be in raw bytes or base58check format | ||
* @param plaintext | ||
* @returns cipher text as a hex string | ||
*/ | ||
export declare const encrypt: (publicKey: Uint8Array | string, plaintext: string) => Promise<string>; | ||
export declare const bs58PublicKeyToBytes: (str: string) => Promise<Uint8Array>; | ||
export declare const decrypt: (recipientSeedHex: string, senderPublicKeyBase58Check: string, cipherTextHex: string) => Promise<string>; | ||
export declare const decryptChatMessage: (recipientSeedHex: string, publicDecryptionKey: string, cipherTextHex: string) => Promise<string>; | ||
export declare const decrypt: (privateDecryptionKey: Uint8Array | string, cipherTextHex: string) => Promise<string>; | ||
export declare const getSharedPrivateKey: (privKey: Uint8Array, pubKey: Uint8Array) => Promise<Uint8Array>; | ||
@@ -24,2 +37,3 @@ export declare const decodePublicKey: (publicKeyBase58Check: string) => Promise<Uint8Array>; | ||
export declare const kdf: (secret: Uint8Array, outputLength: number) => Promise<Uint8Array>; | ||
export declare function deriveAccessGroupKeyPair(privateKeyHex: string, groupKeyName: string): Promise<KeyPair>; | ||
export {}; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.kdf = exports.getSharedSecret = exports.decodePublicKey = exports.getSharedPrivateKey = exports.decrypt = exports.bs58PublicKeyToBytes = exports.encrypt = exports.getSignedJWT = exports.signTx = exports.publicKeyToBase58Check = exports.keygen = void 0; | ||
exports.deriveAccessGroupKeyPair = exports.kdf = exports.getSharedSecret = exports.decodePublicKey = exports.getSharedPrivateKey = exports.decrypt = exports.decryptChatMessage = exports.bs58PublicKeyToBytes = exports.encrypt = exports.encryptChatMessage = exports.getSignedJWT = exports.signTx = exports.publicKeyToBase58Check = exports.sha256X2 = exports.keygen = void 0; | ||
const secp256k1_1 = require("@noble/secp256k1"); | ||
@@ -43,6 +43,9 @@ const bs58 = require("bs58"); | ||
// https://github.com/w3c/webcrypto/issues/82 | ||
const keygen = () => { | ||
// ecUtils.randomBytes uses window.crypto.getRandomValues in the browser or | ||
// crypto.randomBytes in node. | ||
const privateKey = secp256k1_1.utils.randomBytes(32); | ||
// | ||
// If you don't provide a seed, a random one will be generated for you and a | ||
// random key pair will be returned. If you do provide a seed, it should be a | ||
// randomly generated 32 byte value (Uint8Array of length 32 or hex string of | ||
// length 64) | ||
const keygen = (seed) => { | ||
const privateKey = seed ? normalizeSeed(seed) : secp256k1_1.utils.randomBytes(32); | ||
const seedHex = secp256k1_1.utils.bytesToHex(privateKey); | ||
@@ -56,3 +59,20 @@ return { | ||
exports.keygen = keygen; | ||
const sha256X2 = async (data) => secp256k1_1.utils.sha256(await secp256k1_1.utils.sha256(data)); | ||
const normalizeSeed = (seed) => { | ||
if (typeof seed === 'string') { | ||
return secp256k1_1.utils.hexToBytes(seed); | ||
} | ||
else { | ||
return seed; | ||
} | ||
}; | ||
/** | ||
* | ||
* @param data could be a hex string or a byte array (Uint8Array) | ||
* @returns | ||
*/ | ||
const sha256X2 = async (data) => { | ||
const d = typeof data === 'string' ? secp256k1_1.utils.hexToBytes(data) : data; | ||
return secp256k1_1.utils.sha256(await secp256k1_1.utils.sha256(d)); | ||
}; | ||
exports.sha256X2 = sha256X2; | ||
const publicKeyToBase58Check = async (publicKeyBytes, options) => { | ||
@@ -65,3 +85,3 @@ var _a; | ||
const bytes = new Uint8Array([...prefix, ...publicKeyBytes]); | ||
const checksum = await sha256X2(bytes); | ||
const checksum = await (0, exports.sha256X2)(bytes); | ||
return bs58.encode(concatUint8Arrays([bytes, checksum], bytes.length + 4)); | ||
@@ -81,3 +101,3 @@ }; | ||
const transactionBytes = secp256k1_1.utils.hexToBytes(txHex); | ||
const hashedTxBytes = await sha256X2(transactionBytes); | ||
const hashedTxBytes = await (0, exports.sha256X2)(transactionBytes); | ||
const transactionHashHex = secp256k1_1.utils.bytesToHex(hashedTxBytes); | ||
@@ -116,3 +136,3 @@ const privateKey = secp256k1_1.utils.hexToBytes(seedHex); | ||
} | ||
const encrypt = async (senderSeedHex, recipientPublicKeyBase58Check, plaintext) => { | ||
const encryptChatMessage = async (senderSeedHex, recipientPublicKeyBase58Check, message) => { | ||
const privateKey = secp256k1_1.utils.hexToBytes(senderSeedHex); | ||
@@ -122,5 +142,17 @@ const recipientPublicKey = await (0, exports.bs58PublicKeyToBytes)(recipientPublicKeyBase58Check); | ||
const sharedPublicKey = (0, secp256k1_1.getPublicKey)(sharedPrivateKey); | ||
return (0, exports.encrypt)(sharedPublicKey, message); | ||
}; | ||
exports.encryptChatMessage = encryptChatMessage; | ||
/** | ||
* @param publicEncryptionKey could be in raw bytes or base58check format | ||
* @param plaintext | ||
* @returns cipher text as a hex string | ||
*/ | ||
const encrypt = async (publicKey, plaintext) => { | ||
const ephemPrivateKey = secp256k1_1.utils.randomBytes(32); | ||
const ephemPublicKey = (0, secp256k1_1.getPublicKey)(ephemPrivateKey); | ||
const privKey = await (0, exports.getSharedPrivateKey)(ephemPrivateKey, sharedPublicKey); | ||
const publicKeyBytes = typeof publicKey === 'string' | ||
? await (0, exports.bs58PublicKeyToBytes)(publicKey) | ||
: publicKey; | ||
const privKey = await (0, exports.getSharedPrivateKey)(ephemPrivateKey, publicKeyBytes); | ||
const encryptionKey = privKey.slice(0, 16); | ||
@@ -149,3 +181,3 @@ const iv = secp256k1_1.utils.randomBytes(16); | ||
const checksumA = bytes.slice(-4); | ||
const checksumB = await sha256X2(payload); | ||
const checksumB = await (0, exports.sha256X2)(payload); | ||
if ((checksumA[0] ^ checksumB[0]) | | ||
@@ -171,3 +203,10 @@ (checksumA[1] ^ checksumB[1]) | | ||
}; | ||
const decrypt = async (recipientSeedHex, senderPublicKeyBase58Check, cipherTextHex) => { | ||
const decryptChatMessage = async (recipientSeedHex, publicDecryptionKey, cipherTextHex) => { | ||
const privateKey = secp256k1_1.utils.hexToBytes(recipientSeedHex); | ||
const publicKey = await (0, exports.bs58PublicKeyToBytes)(publicDecryptionKey); | ||
const sharedPrivateKey = await (0, exports.getSharedPrivateKey)(privateKey, publicKey); | ||
return (0, exports.decrypt)(sharedPrivateKey, cipherTextHex); | ||
}; | ||
exports.decryptChatMessage = decryptChatMessage; | ||
const decrypt = async (privateDecryptionKey, cipherTextHex) => { | ||
const cipherBytes = secp256k1_1.utils.hexToBytes(cipherTextHex); | ||
@@ -181,5 +220,3 @@ const metaLength = 113; | ||
} | ||
const privateKey = secp256k1_1.utils.hexToBytes(recipientSeedHex); | ||
const publicKey = await (0, exports.bs58PublicKeyToBytes)(senderPublicKeyBase58Check); | ||
const sharedPrivateKey = await (0, exports.getSharedPrivateKey)(privateKey, publicKey); | ||
const privateKey = normalizeSeed(privateDecryptionKey); | ||
const ephemPublicKey = cipherBytes.slice(0, 65); | ||
@@ -189,12 +226,13 @@ const cipherTextLength = cipherBytes.length - metaLength; | ||
const cipherAndIv = cipherBytes.slice(65, 65 + 16 + cipherTextLength); | ||
const ciphertext = cipherAndIv.slice(16); | ||
const cipherText = cipherAndIv.slice(16); | ||
const msgMac = cipherBytes.slice(65 + 16 + cipherTextLength); | ||
const privKey = await (0, exports.getSharedPrivateKey)(sharedPrivateKey, ephemPublicKey); | ||
const encryptionKey = privKey.slice(0, 16); | ||
const macKey = await secp256k1_1.utils.sha256(privKey.slice(16)); | ||
const sharedSecretKey = await (0, exports.getSharedPrivateKey)(privateKey, ephemPublicKey); | ||
const encryptionKey = sharedSecretKey.slice(0, 16); | ||
const macKey = await secp256k1_1.utils.sha256(sharedSecretKey.slice(16)); | ||
const hmacKnownGood = await secp256k1_1.utils.hmacSha256(macKey, cipherAndIv); | ||
if (!isValidHmac(msgMac, hmacKnownGood)) | ||
if (!isValidHmac(msgMac, hmacKnownGood)) { | ||
throw new Error('incorrect MAC'); | ||
} | ||
const cryptoKey = await globalThis.crypto.subtle.importKey('raw', encryptionKey, 'AES-CTR', true, ['decrypt']); | ||
const decryptedBuffer = await globalThis.crypto.subtle.decrypt({ name: 'AES-CTR', counter: iv, length: 128 }, cryptoKey, ciphertext); | ||
const decryptedBuffer = await globalThis.crypto.subtle.decrypt({ name: 'AES-CTR', counter: iv, length: 128 }, cryptoKey, cipherText); | ||
return new TextDecoder().decode(decryptedBuffer); | ||
@@ -271,2 +309,9 @@ }; | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9pZGVudGl0eS9zcmMvbGliL2NyeXB0by11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnREFNMEI7QUFDMUIsNkJBQTZCO0FBQzdCLDJDQUFrRDtBQUdsRCxvREFBb0Q7QUFDcEQsU0FBUyxpQkFBaUIsQ0FBQyxNQUFvQixFQUFFLE1BQWU7SUFDOUQsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ3hCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDL0Q7SUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sRUFBRTtZQUN0QyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN4RCxNQUFNO1NBQ1A7UUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5QixNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztLQUM1QjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFF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QUcsQ0FDUixTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsRUFDcEUsTUFBTSxDQUNQLENBQUM7SUFFRixNQUFNLEdBQUcsVUFBVSxDQUFDO0lBRXBCLEtBQUssTUFBTSxDQUFDLEdBQUcsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFO1FBQ3RELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDcEI7SUFFRCxNQUFNLENBQUMsR0FBRyxDQUNSLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxFQUNwRSxNQUFNLENBQ1AsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQy9CLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQ2hELEVBQUUsQ0FDSCxDQUFDO0lBRUYsT0FBTyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGdldFB1YmxpY0tleSxcbiAgZ2V0U2hhcmVkU2VjcmV0IGFzIG5vYmxlR2V0U2hhcmVkU2VjcmV0LFxuICBQb2ludCxcbiAgc2lnbiBhcyBlY1NpZ24sXG4gIHV0aWxzIGFzIGVjVXRpbHMsXG59IGZyb20gJ0Bub2JsZS9zZWNwMjU2azEnO1xuaW1wb3J0ICogYXMgYnM1OCBmcm9tICdiczU4JztcbmltcG9ydCB7IFBVQkxJQ19LRVlfUFJFRklYRVMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBqd3RBbGdvcml0aG0sIEtleVBhaXIsIE5ldHdvcmsgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gQnJvd3NlciBmcmllbmRseSB2ZXJzaW9uIG9mIG5vZGUncyBCdWZmZXIuY29uY2F0LlxuZnVuY3Rpb24gY29uY2F0VWludDhBcnJheXMoYXJyYXlzOiBVaW50OEFycmF5W10sIGxlbmd0aD86IG51bWJlcikge1xuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSBhcnJheXMucmVkdWNlKChhY2MsIGFycmF5KSA9PiBhY2MgKyBhcnJheS5sZW5ndGgsIDApO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChvZmZzZXQgKyBhcnJheXNbaV0ubGVuZ3RoID4gbGVuZ3RoKSB7XG4gICAgICByZXN1bHQuc2V0KGFycmF5c1tpXS5zbGljZSgwLCBsZW5ndGggLSBvZmZzZXQpLCBvZmZzZXQpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdC5zZXQoYXJyYXlzW2ldLCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSBhcnJheXNbaV0ubGVuZ3RoO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmNvbnN0IHV2YXJpbnQ2NFRvQnVmID0gKHVpbnQ6IG51bWJlcik6IFVpbnQ4QXJyYXkgPT4ge1xuICBjb25zdCByZXN1bHQ6IG51bWJlcltdID0gW107XG4gIHdoaWxlICh1aW50ID49IDB4ODApIHtcbiAgICByZXN1bHQucHVzaChOdW1iZXIoKEJpZ0ludCh1aW50KSAmIEJpZ0ludCgweGZmKSkgfCBCaWdJbnQoMHg4MCkpKTtcbiAgICB1aW50ID0gTnVtYmVyKEJpZ0ludCh1aW50KSA+PiBCaWdJbnQoNykpO1xuICB9XG4gIHJlc3VsdC5wdXNoKHVpbnQgfCAwKTtcblxuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocmVzdWx0KTtcbn07XG5cbmludGVyZmFjZSBCYXNlNThDaGVja09wdGlvbnMge1xuICBuZXR3b3JrOiBOZXR3b3JrO1xufVxuXG4vLyBXZSBhcmUgbm90IHVzaW5nIHRoZSBuYXRpdmUgd2ViIGNyeXB0byBBUEkgdG8gYWN0dWFsbHkgZ2VuZXJhdGUga2V5c1xuLy8gYmVjYXVzZSBpdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZWNwMjU2azEgY3VydmUuIEluc3RlYWQsIHdlIGFyZSB1c2luZ1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3BhdWxtaWxsci9ub2JsZS1zZWNwMjU2azEgd2hpY2ggaXMgYSBicm93c2VyIGZyaWVuZGx5XG4vLyBhbHRlcm5hdGl2ZSB0byB0aGUgbm9kZSBlbGxpcHRpYyBwYWNrYWdlIHdoaWNoIGlzIGZhciBzbWFsbGVyIGFuZCBvbmx5XG4vLyBmb2N1c2VzIG9uIHN1cHBvcnRpbmcgdGhlIGVjIGFsZ29yaXRobSB3ZSBhcmUgYWN0dWFsbHkgaW50ZXJlc3RlZCBpbiBoZXJlLlxuLy8gSWYgdGhlIHdlYiBjcnlwdG8gQVBJIGV2ZXIgYWRkcyBzdXBwb3J0IGZvciBzZWNwMjU2azEsIHdlIHNob3VsZCBjaGFuZ2Vcbi8vIHRoaXMgdG8gdXNlIGl0LlxuLy9cbi8vIFNlZSB0aGUgZm9sbG93aW5nIGZvciBtb3JlIGluZm86XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdzNjL3dlYmNyeXB0by9pc3N1ZXMvODJcbmV4cG9ydCBjb25zdCBrZXlnZW4gPSAoKTogS2V5UGFpciA9PiB7XG4gIC8vIGVjVXRpbHMucmFuZG9tQnl0ZXMgdXNlcyB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyBpbiB0aGUgYnJvd3NlciBvclxuICAvLyBjcnlwdG8ucmFuZG9tQnl0ZXMgaW4gbm9kZS5cbiAgY29uc3QgcHJpdmF0ZUtleSA9IGVjVXRpbHMucmFuZG9tQnl0ZXMoMzIpO1xuICBjb25zdCBzZWVkSGV4ID0gZWNVdGlscy5ieXRlc1RvSGV4KHByaXZhdGVLZXkpO1xuXG4gIHJldHVybiB7XG4gICAgc2VlZEhleCxcbiAgICBwcml2YXRlOiBwcml2YXRlS2V5LFxuICAgIHB1YmxpYzogZ2V0UHVibGljS2V5KHByaXZhdGVLZXksIHRydWUgLyogaXNDb21wcmVzc2VkICovKSxcbiAgfTtcbn07XG5cbmNvbnN0IHNoYTI1NlgyID0gYXN5bmMgKGRhdGE6IFVpbnQ4QXJyYXkpOiBQcm9taXNlPFVpbnQ4QXJyYXk+ID0+XG4gIGVjVXRpbHMuc2hhMjU2KGF3YWl0IGVjVXRpbHMuc2hhMjU2KGRhdGEpKTtcblxuZXhwb3J0IGNvbnN0IHB1YmxpY0tleVRvQmFzZTU4Q2hlY2sgPSBhc3luYyAoXG4gIHB1YmxpY0tleUJ5dGVzOiBVaW50OEFycmF5LFxuICBvcHRpb25zPzogQmFzZTU4Q2hlY2tPcHRpb25zXG4pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBwcmVmaXggPSBQVUJMSUNfS0VZX1BSRUZJWEVTW29wdGlvbnM/Lm5ldHdvcmsgPz8gJ21haW5uZXQnXS5kZXNvO1xuICAvLyBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgYnM1OGNoZWNrIHBhY2thZ2UsIGJ1dCB3ZVxuICAvLyBzbGlnaHRseSBtb2RpZnkgaXQgdG8gdXNlIHRoZSBicm93c2VyIGZyaWVuZGx5IHZlcnNpb24gb2YgQnVmZmVyLmNvbmNhdC5cbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbmpzL2JzNThjaGVjay9ibG9iLzEyYjNlNzAwZjM1NWM1YzQ5ZDBiZTNmOGZjMjliZTZjNjZlNzUzZTkvYmFzZS5qcyNMMVxuICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KFsuLi5wcmVmaXgsIC4uLnB1YmxpY0tleUJ5dGVzXSk7XG4gIGNvbnN0IGNoZWNrc3VtID0gYXdhaXQgc2hhMjU2WDIoYnl0ZXMpO1xuICByZXR1cm4gYnM1OC5lbmNvZGUoY29uY2F0VWludDhBcnJheXMoW2J5dGVzLCBjaGVja3N1bV0sIGJ5dGVzLmxlbmd0aCArIDQpKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbk9wdGlvbnMge1xuICBpc0Rlcml2ZWRLZXk6IGJvb2xlYW47XG59XG5cbmNvbnN0IHNpZ24gPSAobXNnSGFzaEhleDogc3RyaW5nLCBwcml2YXRlS2V5OiBVaW50OEFycmF5KSA9PiB7XG4gIHJldHVybiBlY1NpZ24obXNnSGFzaEhleCwgcHJpdmF0ZUtleSwge1xuICAgIC8vIEZvciBkZXRhaWxzIGFib3V0IHRoZSBzaWduaW5nIG9wdGlvbnMgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGF1bG1pbGxyL25vYmxlLXNlY3AyNTZrMSNzaWdubXNnaGFzaC1wcml2YXRla2V5XG4gICAgY2Fub25pY2FsOiB0cnVlLFxuICAgIGRlcjogdHJ1ZSxcbiAgICBleHRyYUVudHJvcHk6IHRydWUsXG4gICAgcmVjb3ZlcmVkOiB0cnVlLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduVHggPSBhc3luYyAoXG4gIHR4SGV4OiBzdHJpbmcsXG4gIHNlZWRIZXg6IHN0cmluZyxcbiAgb3B0aW9ucz86IFNpZ25PcHRpb25zXG4pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCB0cmFuc2FjdGlvbkJ5dGVzID0gZWNVdGlscy5oZXhUb0J5dGVzKHR4SGV4KTtcbiAgY29uc3QgaGFzaGVkVHhCeXRlcyA9IGF3YWl0IHNoYTI1NlgyKHRyYW5zYWN0aW9uQnl0ZXMpO1xuICBjb25zdCB0cmFuc2FjdGlvbkhhc2hIZXggPSBlY1V0aWxzLmJ5dGVzVG9IZXgoaGFzaGVkVHhCeXRlcyk7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBlY1V0aWxzLmhleFRvQnl0ZXMoc2VlZEhleCk7XG4gIGNvbnN0IFtzaWduYXR1cmVCeXRlcywgcmVjb3ZlcnlQYXJhbV0gPSBhd2FpdCBzaWduKFxuICAgIHRyYW5zYWN0aW9uSGFzaEhleCxcbiAgICBwcml2YXRlS2V5XG4gICk7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTGVuZ3RoID0gdXZhcmludDY0VG9CdWYoc2lnbmF0dXJlQnl0ZXMubGVuZ3RoKTtcblxuICBpZiAob3B0aW9ucz8uaXNEZXJpdmVkS2V5KSB7XG4gICAgc2lnbmF0dXJlQnl0ZXNbMF0gKz0gMSArIHJlY292ZXJ5UGFyYW07XG4gIH1cblxuICBjb25zdCBzaWduZWRUcmFuc2FjdGlvbkJ5dGVzID0gZWNVdGlscy5jb25jYXRCeXRlcyhcbiAgICB0cmFuc2FjdGlvbkJ5dGVzLnNsaWNlKDAsIC0xKSxcbiAgICBzaWduYXR1cmVMZW5ndGgsXG4gICAgc2lnbmF0dXJlQnl0ZXNcbiAgKTtcblxuICByZXR1cm4gZWNVdGlscy5ieXRlc1RvSGV4KHNpZ25lZFRyYW5zYWN0aW9uQnl0ZXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNpZ25lZEpXVCA9IGFzeW5jIChcbiAgc2VlZEhleDogc3RyaW5nLFxuICBhbGc6IGp3dEFsZ29yaXRobSxcbiAge1xuICAgIGRlcml2ZWRQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBleHBpcmF0aW9uLFxuICB9OiB7XG4gICAgZGVyaXZlZFB1YmxpY0tleUJhc2U1OENoZWNrPzogc3RyaW5nO1xuICAgIGV4cGlyYXRpb24/OiBudW1iZXI7XG4gIH1cbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGhlYWRlciA9IEpTT04uc3RyaW5naWZ5KHsgYWxnLCB0eXA6ICdKV1QnIH0pO1xuICBjb25zdCBpc3N1ZWRBdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICBjb25zdCB0aGlydHlNaW5Gcm9tTm93ID0gaXNzdWVkQXQgKyAzMCAqIDYwO1xuICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgIC4uLihkZXJpdmVkUHVibGljS2V5QmFzZTU4Q2hlY2sgPyB7IGRlcml2ZWRQdWJsaWNLZXlCYXNlNThDaGVjayB9IDoge30pLFxuICAgIGlhdDogaXNzdWVkQXQsXG4gICAgZXhwOiB0aGlydHlNaW5Gcm9tTm93LFxuICB9KTtcblxuICBjb25zdCBqd3QgPSBgJHt1cmxTYWZlQmFzZTY0KGhlYWRlcil9LiR7dXJsU2FmZUJhc2U2NChwYXlsb2FkKX1gO1xuXG4gIGNvbnN0IFtzaWduYXR1cmVdID0gYXdhaXQgc2lnbihcbiAgICBlY1V0aWxzLmJ5dGVzVG9IZXgoYXdhaXQgZWNVdGlscy5zaGEyNTYobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGp3dCkpKSxcbiAgICBlY1V0aWxzLmhleFRvQnl0ZXMoc2VlZEhleClcbiAgKTtcbiAgY29uc3QgZW5jb2RlZFNpZ25hdHVyZSA9IGRlclRvSm9zZUVuY29kaW5nKHNpZ25hdHVyZSk7XG5cbiAgcmV0dXJuIGAke2p3dH0uJHtlbmNvZGVkU2lnbmF0dXJlfWA7XG59O1xuXG5mdW5jdGlvbiB1cmxTYWZlQmFzZTY0KHN0cjogc3RyaW5nKSB7XG4gIHJldHVybiB3aW5kb3dcbiAgICAuYnRvYShzdHIpXG4gICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgLnJlcGxhY2UoLz0vZywgJycpO1xufVxuXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IGFzeW5jIChcbiAgc2VuZGVyU2VlZEhleDogc3RyaW5nLFxuICByZWNpcGllbnRQdWJsaWNLZXlCYXNlNThDaGVjazogc3RyaW5nLFxuICBwbGFpbnRleHQ6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgcHJpdmF0ZUtleSA9IGVjVXRpbHMuaGV4VG9CeXRlcyhzZW5kZXJTZWVkSGV4KTtcbiAgY29uc3QgcmVjaXBpZW50UHVibGljS2V5ID0gYXdhaXQgYnM1OFB1YmxpY0tleVRvQnl0ZXMoXG4gICAgcmVjaXBpZW50UHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgKTtcbiAgY29uc3Qgc2hhcmVkUHJpdmF0ZUtleSA9IGF3YWl0IGdldFNoYXJlZFByaXZhdGVLZXkoXG4gICAgcHJpdmF0ZUtleSxcbiAgICByZWNpcGllbnRQdWJsaWNLZXlcbiAgKTtcbiAgY29uc3Qgc2hhcmVkUHVibGljS2V5ID0gZ2V0UHVibGljS2V5KHNoYXJlZFByaXZhdGVLZXkpO1xuICBjb25zdCBlcGhlbVByaXZhdGVLZXkgPSBlY1V0aWxzLnJhbmRvbUJ5dGVzKDMyKTtcbiAgY29uc3QgZXBoZW1QdWJsaWNLZXkgPSBnZXRQdWJsaWNLZXkoZXBoZW1Qcml2YXRlS2V5KTtcbiAgY29uc3QgcHJpdktleSA9IGF3YWl0IGdldFNoYXJlZFByaXZhdGVLZXkoZXBoZW1Qcml2YXRlS2V5LCBzaGFyZWRQdWJsaWNLZXkpO1xuICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gcHJpdktleS5zbGljZSgwLCAxNik7XG4gIGNvbnN0IGl2ID0gZWNVdGlscy5yYW5kb21CeXRlcygxNik7XG4gIGNvbnN0IG1hY0tleSA9IGF3YWl0IGVjVXRpbHMuc2hhMjU2KHByaXZLZXkuc2xpY2UoMTYpKTtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUocGxhaW50ZXh0KTtcbiAgY29uc3QgY3J5cHRvS2V5ID0gYXdhaXQgd2luZG93LmNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICdyYXcnLFxuICAgIGVuY3J5cHRpb25LZXksXG4gICAgJ0FFUy1DVFInLFxuICAgIHRydWUsXG4gICAgWydlbmNyeXB0J11cbiAgKTtcbiAgY29uc3QgY2lwaGVyQnl0ZXMgPSBhd2FpdCB3aW5kb3cuY3J5cHRvLnN1YnRsZS5lbmNyeXB0KFxuICAgIHtcbiAgICAgIG5hbWU6ICdBRVMtQ1RSJyxcbiAgICAgIGNvdW50ZXI6IGl2LFxuICAgICAgbGVuZ3RoOiAxMjgsXG4gICAgfSxcbiAgICBjcnlwdG9LZXksXG4gICAgYnl0ZXNcbiAgKTtcbiAgY29uc3QgaG1hYyA9IGF3YWl0IGVjVXRpbHMuaG1hY1NoYTI1NihcbiAgICBtYWNLZXksXG4gICAgbmV3IFVpbnQ4QXJyYXkoWy4uLml2LCAuLi5uZXcgVWludDhBcnJheShjaXBoZXJCeXRlcyldKVxuICApO1xuXG4gIHJldHVybiBlY1V0aWxzLmJ5dGVzVG9IZXgoXG4gICAgbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgLi4uZXBoZW1QdWJsaWNLZXksXG4gICAgICAuLi5pdixcbiAgICAgIC4uLm5ldyBVaW50OEFycmF5KGNpcGhlckJ5dGVzKSxcbiAgICAgIC4uLmhtYWMsXG4gICAgXSlcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBiczU4UHVibGljS2V5VG9CeXRlcyA9IGFzeW5jIChzdHI6IHN0cmluZykgPT4ge1xuICBjb25zdCBieXRlcyA9IGJzNTguZGVjb2RlKHN0cik7XG4gIGNvbnN0IHBheWxvYWQgPSBieXRlcy5zbGljZSgwLCAtNCk7XG4gIGNvbnN0IGNoZWNrc3VtQSA9IGJ5dGVzLnNsaWNlKC00KTtcbiAgY29uc3QgY2hlY2tzdW1CID0gYXdhaXQgc2hhMjU2WDIocGF5bG9hZCk7XG5cbiAgaWYgKFxuICAgIChjaGVja3N1bUFbMF0gXiBjaGVja3N1bUJbMF0pIHxcbiAgICAoY2hlY2tzdW1BWzFdIF4gY2hlY2tzdW1CWzFdKSB8XG4gICAgKGNoZWNrc3VtQVsyXSBeIGNoZWNrc3VtQlsyXSkgfFxuICAgIChjaGVja3N1bUFbM10gXiBjaGVja3N1bUJbM10pXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaGVja3N1bScpO1xuICB9XG5cbiAgcmV0dXJuIFBvaW50LmZyb21IZXgoZWNVdGlscy5ieXRlc1RvSGV4KHBheWxvYWQuc2xpY2UoMykpKS50b1Jhd0J5dGVzKGZhbHNlKTtcbn07XG5cbmNvbnN0IGlzVmFsaWRIbWFjID0gKGNhbmRpZGF0ZTogVWludDhBcnJheSwga25vd25Hb29kOiBVaW50OEFycmF5KSA9PiB7XG4gIGlmIChjYW5kaWRhdGUubGVuZ3RoICE9PSBrbm93bkdvb2QubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrbm93bkdvb2QubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoY2FuZGlkYXRlW2ldICE9PSBrbm93bkdvb2RbaV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWNyeXB0ID0gYXN5bmMgKFxuICByZWNpcGllbnRTZWVkSGV4OiBzdHJpbmcsXG4gIHNlbmRlclB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmcsXG4gIGNpcGhlclRleHRIZXg6IHN0cmluZ1xuKSA9PiB7XG4gIGNvbnN0IGNpcGhlckJ5dGVzID0gZWNVdGlscy5oZXhUb0J5dGVzKGNpcGhlclRleHRIZXgpO1xuICBjb25zdCBtZXRhTGVuZ3RoID0gMTEzO1xuXG4gIGlmIChjaXBoZXJCeXRlcy5sZW5ndGggPCBtZXRhTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNpcGhlciB0ZXh0LiBkYXRhIHRvbyBzbWFsbC4nKTtcbiAgfVxuXG4gIGlmICghKGNpcGhlckJ5dGVzWzBdID49IDIgJiYgY2lwaGVyQnl0ZXNbMF0gPD0gNCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY2lwaGVyIHRleHQuJyk7XG4gIH1cblxuICBjb25zdCBwcml2YXRlS2V5ID0gZWNVdGlscy5oZXhUb0J5dGVzKHJlY2lwaWVudFNlZWRIZXgpO1xuICBjb25zdCBwdWJsaWNLZXkgPSBhd2FpdCBiczU4UHVibGljS2V5VG9CeXRlcyhzZW5kZXJQdWJsaWNLZXlCYXNlNThDaGVjayk7XG4gIGNvbnN0IHNoYXJlZFByaXZhdGVLZXkgPSBhd2FpdCBnZXRTaGFyZWRQcml2YXRlS2V5KHByaXZhdGVLZXksIHB1YmxpY0tleSk7XG4gIGNvbnN0IGVwaGVtUHVibGljS2V5ID0gY2lwaGVyQnl0ZXMuc2xpY2UoMCwgNjUpO1xuICBjb25zdCBjaXBoZXJUZXh0TGVuZ3RoID0gY2lwaGVyQnl0ZXMubGVuZ3RoIC0gbWV0YUxlbmd0aDtcbiAgY29uc3QgaXYgPSBjaXBoZXJCeXRlcy5zbGljZSg2NSwgNjUgKyAxNik7XG4gIGNvbnN0IGNpcGhlckFuZEl2ID0gY2lwaGVyQnl0ZXMuc2xpY2UoNjUsIDY1ICsgMTYgKyBjaXBoZXJUZXh0TGVuZ3RoKTtcbiAgY29uc3QgY2lwaGVydGV4dCA9IGNpcGhlckFuZEl2LnNsaWNlKDE2KTtcbiAgY29uc3QgbXNnTWFjID0gY2lwaGVyQnl0ZXMuc2xpY2UoNjUgKyAxNiArIGNpcGhlclRleHRMZW5ndGgpO1xuICBjb25zdCBwcml2S2V5ID0gYXdhaXQgZ2V0U2hhcmVkUHJpdmF0ZUtleShzaGFyZWRQcml2YXRlS2V5LCBlcGhlbVB1YmxpY0tleSk7XG4gIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBwcml2S2V5LnNsaWNlKDAsIDE2KTtcbiAgY29uc3QgbWFjS2V5ID0gYXdhaXQgZWNVdGlscy5zaGEyNTYocHJpdktleS5zbGljZSgxNikpO1xuICBjb25zdCBobWFjS25vd25Hb29kID0gYXdhaXQgZWNVdGlscy5obWFjU2hhMjU2KG1hY0tleSwgY2lwaGVyQW5kSXYpO1xuXG4gIGlmICghaXNWYWxpZEhtYWMobXNnTWFjLCBobWFjS25vd25Hb29kKSkgdGhyb3cgbmV3IEVycm9yKCdpbmNvcnJlY3QgTUFDJyk7XG5cbiAgY29uc3QgY3J5cHRvS2V5ID0gYXdhaXQgZ2xvYmFsVGhpcy5jcnlwdG8uc3VidGxlLmltcG9ydEtleShcbiAgICAncmF3JyxcbiAgICBlbmNyeXB0aW9uS2V5LFxuICAgICdBRVMtQ1RSJyxcbiAgICB0cnVlLFxuICAgIFsnZGVjcnlwdCddXG4gICk7XG5cbiAgY29uc3QgZGVjcnlwdGVkQnVmZmVyID0gYXdhaXQgZ2xvYmFsVGhpcy5jcnlwdG8uc3VidGxlLmRlY3J5cHQoXG4gICAgeyBuYW1lOiAnQUVTLUNUUicsIGNvdW50ZXI6IGl2LCBsZW5ndGg6IDEyOCB9LFxuICAgIGNyeXB0b0tleSxcbiAgICBjaXBoZXJ0ZXh0XG4gICk7XG5cbiAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShkZWNyeXB0ZWRCdWZmZXIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNoYXJlZFByaXZhdGVLZXkgPSBhc3luYyAoXG4gIHByaXZLZXk6IFVpbnQ4QXJyYXksXG4gIHB1YktleTogVWludDhBcnJheVxuKSA9PiB7XG4gIGNvbnN0IHNoYXJlZFNlY3JldCA9IGF3YWl0IGdldFNoYXJlZFNlY3JldChwcml2S2V5LCBwdWJLZXkpO1xuXG4gIHJldHVybiBrZGYoc2hhcmVkU2VjcmV0LCAzMik7XG59O1xuXG5leHBvcnQgY29uc3QgZGVjb2RlUHVibGljS2V5ID0gYXN5bmMgKHB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgZGVjb2RlZCA9IGF3YWl0IGJzNThQdWJsaWNLZXlUb0J5dGVzKHB1YmxpY0tleUJhc2U1OENoZWNrKTtcbiAgY29uc3Qgd2l0aFByZWZpeFJlbW92ZWQgPSBkZWNvZGVkLnNsaWNlKDMpO1xuICBjb25zdCBzZW5kZXJQdWJLZXlIZXggPSBlY1V0aWxzLmJ5dGVzVG9IZXgod2l0aFByZWZpeFJlbW92ZWQpO1xuXG4gIHJldHVybiBQb2ludC5mcm9tSGV4KHNlbmRlclB1YktleUhleCkudG9SYXdCeXRlcyhmYWxzZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2hhcmVkU2VjcmV0ID0gYXN5bmMgKFxuICBwcml2S2V5OiBVaW50OEFycmF5LFxuICBwdWJLZXk6IFVpbnQ4QXJyYXlcbikgPT4ge1xuICAvLyBwYXNzaW5nIHRydWUgdG8gY29tcHJlc3MgdGhlIHB1YmxpYyBrZXksIGFuZCB0aGVuIHNsaWNpbmcgb2ZmIHRoZSBmaXJzdCBieXRlXG4gIC8vIG1hdGNoZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGRlcml2ZSBpbiB0aGUgZWxsaXB0aWMgcGFja2FnZS5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BhdWxtaWxsci9ub2JsZS1zZWNwMjU2azEvaXNzdWVzLzI4I2lzc3VlY29tbWVudC05NDY1MzgwMzdcbiAgcmV0dXJuIG5vYmxlR2V0U2hhcmVkU2VjcmV0KHByaXZLZXksIHB1YktleSwgdHJ1ZSkuc2xpY2UoMSk7XG59O1xuXG4vLyB0YWtlbiBmcm9tIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgZGVzbyBjaGF0IGFwcDpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZXNvLXByb3RvY29sL2FjY2Vzcy1ncm91cC1tZXNzYWdpbmctYXBwL2Jsb2IvY2Q1YzIzN2Y1ZTU3MjkxOTZhYWMwZGExNjFkMDg1MWJkZTc4MDkyYy9zcmMvc2VydmljZXMvY3J5cHRvLXV0aWxzLnNlcnZpY2UudHN4I0w5MVxuZXhwb3J0IGNvbnN0IGtkZiA9IGFzeW5jIChzZWNyZXQ6IFVpbnQ4QXJyYXksIG91dHB1dExlbmd0aDogbnVtYmVyKSA9PiB7XG4gIGxldCBjdHIgPSAxO1xuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCByZXN1bHQgPSBuZXcgVWludDhBcnJheSgpO1xuXG4gIHdoaWxlICh3cml0dGVuIDwgb3V0cHV0TGVuZ3RoKSB7XG4gICAgY29uc3QgaGFzaCA9IGF3YWl0IGVjVXRpbHMuc2hhMjU2KFxuICAgICAgbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgICAuLi5uZXcgVWludDhBcnJheShbY3RyID4+IDI0LCBjdHIgPj4gMTYsIGN0ciA+PiA4LCBjdHJdKSxcbiAgICAgICAgLi4uc2VjcmV0LFxuICAgICAgXSlcbiAgICApO1xuICAgIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KFsuLi5yZXN1bHQsIC4uLmhhc2hdKTtcbiAgICB3cml0dGVuICs9IDMyO1xuICAgIGN0ciArPSAxO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIFRoaXMgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBkZXJUb0pvc2UgZnVuY3Rpb24gZnJvbVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0JyaWdodHNwYWNlL25vZGUtZWNkc2Etc2lnLWZvcm1hdHRlci9ibG9iL2NhMjVhMmZkNWFlOWRkODUwMzYwODE2MzI5MzZlODAyYTQ3YTEyODkvc3JjL2VjZHNhLXNpZy1mb3JtYXR0ZXIuanMjTDMyXG4vLyBUaGUgb3JpZ2luYWwgcGFja2FnZSBpcyBub3QgYnJvd3NlciBmcmllbmRseSBhbmQgcmVxdWlyZXMgbm9kZSBwb2x5ZmlsbHMuIFdlXG4vLyBhbHNvIGRvbid0IG5lZWQgdG8gYmUgcXVpdGUgYXMgZGVmZW5zaXZlIGFzIHRoZSBvcmlnaW5hbCBwYWNrYWdlIHNpbmNlIHdlXG4vLyBoYXZlIGZ1bGwgY29udHJvbCBvZiB0aGUgaW5wdXQuXG5mdW5jdGlvbiBkZXJUb0pvc2VFbmNvZGluZyhzaWduYXR1cmU6IFVpbnQ4QXJyYXkpIHtcbiAgY29uc3QgcGFyYW1CeXRlcyA9IDMyO1xuXG4gIGxldCBvZmZzZXQgPSAzO1xuICBjb25zdCByTGVuZ3RoID0gc2lnbmF0dXJlW29mZnNldF07XG4gIG9mZnNldCArPSAxO1xuICBjb25zdCByT2Zmc2V0ID0gb2Zmc2V0O1xuICBvZmZzZXQgKz0gckxlbmd0aCArIDE7XG4gIGNvbnN0IHNMZW5ndGggPSBzaWduYXR1cmVbb2Zmc2V0XTtcbiAgb2Zmc2V0ICs9IDE7XG4gIGNvbnN0IHNPZmZzZXQgPSBvZmZzZXQ7XG4gIG9mZnNldCArPSBzTGVuZ3RoO1xuXG4gIGNvbnN0IHJQYWRkaW5nID0gcGFyYW1CeXRlcyAtIHJMZW5ndGg7XG4gIGNvbnN0IHNQYWRkaW5nID0gcGFyYW1CeXRlcyAtIHNMZW5ndGg7XG5cbiAgY29uc3Qgb3V0UHV0ID0gbmV3IFVpbnQ4QXJyYXkoclBhZGRpbmcgKyByTGVuZ3RoICsgc1BhZGRpbmcgKyBzTGVuZ3RoKTtcblxuICBmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IHJQYWRkaW5nOyArK29mZnNldCkge1xuICAgIG91dFB1dFtvZmZzZXRdID0gMDtcbiAgfVxuXG4gIG91dFB1dC5zZXQoXG4gICAgc2lnbmF0dXJlLnNsaWNlKHJPZmZzZXQgKyBNYXRoLm1heCgtclBhZGRpbmcsIDApLCByT2Zmc2V0ICsgckxlbmd0aCksXG4gICAgb2Zmc2V0XG4gICk7XG5cbiAgb2Zmc2V0ID0gcGFyYW1CeXRlcztcblxuICBmb3IgKGNvbnN0IG8gPSBvZmZzZXQ7IG9mZnNldCA8IG8gKyBzUGFkZGluZzsgKytvZmZzZXQpIHtcbiAgICBvdXRQdXRbb2Zmc2V0XSA9IDA7XG4gIH1cblxuICBvdXRQdXQuc2V0KFxuICAgIHNpZ25hdHVyZS5zbGljZShzT2Zmc2V0ICsgTWF0aC5tYXgoLXNQYWRkaW5nLCAwKSwgc09mZnNldCArIHNMZW5ndGgpLFxuICAgIG9mZnNldFxuICApO1xuXG4gIGNvbnN0IG91dHB1dENoYXJzID0gb3V0UHV0LnJlZHVjZShcbiAgICAoZGF0YSwgYnl0ZSkgPT4gZGF0YSArIFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZSksXG4gICAgJydcbiAgKTtcblxuICByZXR1cm4gdXJsU2FmZUJhc2U2NChvdXRwdXRDaGFycyk7XG59XG4iXX0= | ||
async function deriveAccessGroupKeyPair(privateKeyHex, groupKeyName) { | ||
const secretHash = await (0, exports.sha256X2)(privateKeyHex); | ||
const keyNameHash = await (0, exports.sha256X2)(new TextEncoder().encode(groupKeyName)); | ||
const privateKey = await (0, exports.sha256X2)(new Uint8Array([...secretHash, ...keyNameHash])); | ||
return (0, exports.keygen)(privateKey); | ||
} | ||
exports.deriveAccessGroupKeyPair = deriveAccessGroupKeyPair; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9pZGVudGl0eS9zcmMvbGliL2NyeXB0by11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnREFNMEI7QUFDMUIsNkJBQTZCO0FBQzdCLDJDQUFrRDtBQUdsRCxvREFBb0Q7QUFDcEQsU0FBUyxpQkFBaUIsQ0FBQyxNQUFvQixFQUFFLE1BQWU7SUFDOUQsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ3hCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDL0Q7SUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sRUFBRTtZQUN0QyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN4RCxNQUFNO1NBQ1A7UUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5QixNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztLQUM1QjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLGNBQWMsR0FBRyxDQUFDLElBQVksRUFBYyxFQUFFO0lBQ2xELE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUM1QixPQUFPLElBQUksSUFBSSxJQUFJLEVBQUU7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMxQztJQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXRCLE9BQU8sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEMsQ0FBQyxDQUFDO0FBTUYsdUVBQXVFO0FBQ3ZFLHlFQUF5RTtBQUN6RSwyRUFBMkU7QUFDM0UseUVBQXlFO0FBQ3pFLDZFQUE2RTtBQUM3RSwwRUFBMEU7QUFDMUUsa0JBQWtCO0FBQ2xCLEVBQUU7QUFDRixtQ0FBbUM7QUFDbkMsNkNBQTZDO0FBQzdDLEVBQUU7QUFDRiw0RUFBNEU7QUFDNUUsNkVBQTZFO0FBQzdFLDZFQUE2RTtBQUM3RSxhQUFhO0FBQ04sTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUEwQixFQUFXLEVBQUU7SUFDNUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sT0FBTyxHQUFHLGlCQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRS9DLE9BQU87UUFDTCxPQUFPO1FBQ1AsT0FBTyxFQUFFLFVBQVU7UUFDbkIsTUFBTSxFQUFFLElBQUEsd0JBQVksRUFBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0tBQzFELENBQUM7QUFDSixDQUFDLENBQUM7QUFUVyxRQUFBLE1BQU0sVUFTakI7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLElBQXlCLEVBQWMsRUFBRTtJQUM5RCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUM1QixPQUFPLGlCQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2pDO1NBQU07UUFDTCxPQUFPLElBQUksQ0FBQztLQUNiO0FBQ0gsQ0FBQyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNJLE1BQU0sUUFBUSxHQUFHLEtBQUssRUFDM0IsSUFBeUIsRUFDSixFQUFFO0lBQ3ZCLE1BQU0sQ0FBQyxHQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsaUJBQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNyRSxPQUFPLGlCQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0saUJBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDLENBQUM7QUFMVyxRQUFBLFFBQVEsWUFLbkI7QUFFSyxNQUFNLHNCQUFzQixHQUFHLEtBQUssRUFDekMsY0FBMEIsRUFDMUIsT0FBNEIsRUFDWCxFQUFFOztJQUNuQixNQUFNLE1BQU0sR0FBRywrQkFBbUIsQ0FBQyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxPQUFPLG1DQUFJLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN2RSwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHVHQUF1RztJQUN2RyxNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUM3RCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsZ0JBQVEsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLENBQUMsQ0FBQztBQVhXLFFBQUEsc0JBQXNCLDBCQVdqQztBQU1GLE1BQU0sSUFBSSxHQUFHLENBQUMsVUFBa0IsRUFBRSxVQUFzQixFQUFFLEVBQUU7SUFDMUQsT0FBTyxJQUFBLGdCQUFNLEVBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRTtRQUNwQyxpSEFBaUg7UUFDakgsU0FBUyxFQUFFLElBQUk7UUFDZixHQUFHLEVBQUUsSUFBSTtRQUNULFlBQVksRUFBRSxJQUFJO1FBQ2xCLFNBQVMsRUFBRSxJQUFJO0tBQ2hCLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVLLE1BQU0sTUFBTSxHQUFHLEtBQUssRUFDekIsS0FBYSxFQUNiLE9BQWUsRUFDZixPQUFxQixFQUNKLEVBQUU7SUFDbkIsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRCxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUEsZ0JBQVEsRUFBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sa0JBQWtCLEdBQUcsaUJBQU8sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDN0QsTUFBTSxVQUFVLEdBQUcsaUJBQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0MsTUFBTSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsR0FBRyxNQUFNLElBQUksQ0FDaEQsa0JBQWtCLEVBQ2xCLFVBQVUsQ0FDWCxDQUFDO0lBRUYsTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU5RCxJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxZQUFZLEVBQUU7UUFDekIsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUM7S0FDeEM7SUFFRCxNQUFNLHNCQUFzQixHQUFHLGlCQUFPLENBQUMsV0FBVyxDQUNoRCxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQzdCLGVBQWUsRUFDZixjQUFjLENBQ2YsQ0FBQztJQUVGLE9BQU8saUJBQU8sQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUM7QUEzQlcsUUFBQSxNQUFNLFVBMkJqQjtBQUVLLE1BQU0sWUFBWSxHQUFHLEtBQUssRUFDL0IsT0FBZSxFQUNmLEdBQWlCLEVBQ2pCLEVBQ0UsMkJBQTJCLEVBQzNCLFVBQVUsR0FJWCxFQUNnQixFQUFFO0lBQ25CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDbkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDL0MsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUM1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzdCLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsRUFBRSwyQkFBMkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdkUsR0FBRyxFQUFFLFFBQVE7UUFDYixHQUFHLEVBQUUsZ0JBQWdCO0tBQ3RCLENBQUMsQ0FBQztJQUVILE1BQU0sR0FBRyxHQUFHLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBRWpFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLElBQUksQ0FDNUIsaUJBQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxpQkFBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ3ZFLGlCQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUM1QixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV0RCxPQUFPLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7QUFDdEMsQ0FBQyxDQUFDO0FBN0JXLFFBQUEsWUFBWSxnQkE2QnZCO0FBRUYsU0FBUyxhQUFhLENBQUMsR0FBVztJQUNoQyxPQUFPLE1BQU07U0FDVixJQUFJLENBQUMsR0FBRyxDQUFDO1NBQ1QsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7U0FDbkIsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7U0FDbkIsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN2QixDQUFDO0FBRU0sTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEVBQ3JDLGFBQXFCLEVBQ3JCLDZCQUFxQyxFQUNyQyxPQUFlLEVBQ2YsRUFBRTtJQUNGLE1BQU0sVUFBVSxHQUFHLGlCQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFBLDRCQUFvQixFQUNuRCw2QkFBNkIsQ0FDOUIsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxJQUFBLDJCQUFtQixFQUNoRCxVQUFVLEVBQ1Ysa0JBQWtCLENBQ25CLENBQUM7SUFDRixNQUFNLGVBQWUsR0FBRyxJQUFBLHdCQUFZLEVBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUV2RCxPQUFPLElBQUEsZUFBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMzQyxDQUFDLENBQUM7QUFoQlcsUUFBQSxrQkFBa0Isc0JBZ0I3QjtBQUVGOzs7O0dBSUc7QUFDSSxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQzFCLFNBQThCLEVBQzlCLFNBQWlCLEVBQ0EsRUFBRTtJQUNuQixNQUFNLGVBQWUsR0FBRyxpQkFBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRCxNQUFNLGNBQWMsR0FBRyxJQUFBLHdCQUFZLEVBQUMsZUFBZSxDQUFDLENBQUM7SUFDckQsTUFBTSxjQUFjLEdBQ2xCLE9BQU8sU0FBUyxLQUFLLFFBQVE7UUFDM0IsQ0FBQyxDQUFDLE1BQU0sSUFBQSw0QkFBb0IsRUFBQyxTQUFTLENBQUM7UUFDdkMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoQixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEsMkJBQW1CLEVBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sRUFBRSxHQUFHLGlCQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLE1BQU0sTUFBTSxHQUFHLE1BQU0saUJBQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sS0FBSyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sU0FBUyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUNwRCxLQUFLLEVBQ0wsYUFBYSxFQUNiLFNBQVMsRUFDVCxJQUFJLEVBQ0osQ0FBQyxTQUFTLENBQUMsQ0FDWixDQUFDO0lBQ0YsTUFBTSxXQUFXLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ3BEO1FBQ0UsSUFBSSxFQUFFLFNBQVM7UUFDZixPQUFPLEVBQUUsRUFBRTtRQUNYLE1BQU0sRUFBRSxHQUFHO0tBQ1osRUFDRCxTQUFTLEVBQ1QsS0FBSyxDQUNOLENBQUM7SUFDRixNQUFNLElBQUksR0FBRyxNQUFNLGlCQUFPLENBQUMsVUFBVSxDQUNuQyxNQUFNLEVBQ04sSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDeEQsQ0FBQztJQUVGLE9BQU8saUJBQU8sQ0FBQyxVQUFVLENBQ3ZCLElBQUksVUFBVSxDQUFDO1FBQ2IsR0FBRyxjQUFjO1FBQ2pCLEdBQUcsRUFBRTtRQUNMLEdBQUcsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDO1FBQzlCLEdBQUcsSUFBSTtLQUNSLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBNUNXLFFBQUEsT0FBTyxXQTRDbEI7QUFFSyxNQUFNLG9CQUFvQixHQUFHLEtBQUssRUFBRSxHQUFXLEVBQUUsRUFBRTtJQUN4RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBQSxnQkFBUSxFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTFDLElBQ0UsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzdCO1FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0tBQ3JDO0lBRUQsT0FBTyxpQkFBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0UsQ0FBQyxDQUFDO0FBaEJXLFFBQUEsb0JBQW9CLHdCQWdCL0I7QUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLFNBQXFCLEVBQUUsU0FBcUIsRUFBRSxFQUFFO0lBQ25FLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFFO1FBQ3pDLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN6QyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDakMsT0FBTyxLQUFLLENBQUM7U0FDZDtLQUNGO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFSyxNQUFNLGtCQUFrQixHQUFHLEtBQUssRUFDckMsZ0JBQXdCLEVBQ3hCLG1CQUEyQixFQUMzQixhQUFxQixFQUNyQixFQUFFO0lBQ0YsTUFBTSxVQUFVLEdBQUcsaUJBQU8sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN4RCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUEsNEJBQW9CLEVBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNsRSxNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBQSwyQkFBbUIsRUFBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDMUUsT0FBTyxJQUFBLGVBQU8sRUFBQyxnQkFBZ0IsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUNsRCxDQUFDLENBQUM7QUFUVyxRQUFBLGtCQUFrQixzQkFTN0I7QUFFSyxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQzFCLG9CQUF5QyxFQUN6QyxhQUFxQixFQUNyQixFQUFFO0lBQ0YsTUFBTSxXQUFXLEdBQUcsaUJBQU8sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdEQsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO0lBRXZCLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxVQUFVLEVBQUU7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0tBQ3pEO0lBRUQsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7UUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0tBQ3pDO0lBRUQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDdkQsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDaEQsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztJQUN6RCxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDMUMsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLGdCQUFnQixDQUFDLENBQUM7SUFDN0QsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFBLDJCQUFtQixFQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM5RSxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuRCxNQUFNLE1BQU0sR0FBRyxNQUFNLGlCQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRCxNQUFNLGFBQWEsR0FBRyxNQUFNLGlCQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUVwRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsRUFBRTtRQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ2xDO0lBRUQsTUFBTSxTQUFTLEdBQUcsTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQ3hELEtBQUssRUFDTCxhQUFhLEVBQ2IsU0FBUyxFQUNULElBQUksRUFDSixDQUFDLFNBQVMsQ0FBQyxDQUNaLENBQUM7SUFFRixNQUFNLGVBQWUsR0FBRyxNQUFNLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDNUQsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUM3QyxTQUFTLEVBQ1QsVUFBVSxDQUNYLENBQUM7SUFFRixPQUFPLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ25ELENBQUMsQ0FBQztBQTlDVyxRQUFBLE9BQU8sV0E4Q2xCO0FBRUssTUFBTSxtQkFBbUIsR0FBRyxLQUFLLEVBQ3RDLE9BQW1CLEVBQ25CLE1BQWtCLEVBQ2xCLEVBQUU7SUFDRixNQUFNLFlBQVksR0FBRyxNQUFNLElBQUEsdUJBQWUsRUFBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFNUQsT0FBTyxJQUFBLFdBQUcsRUFBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDO0FBUFcsUUFBQSxtQkFBbUIsdUJBTzlCO0FBRUssTUFBTSxlQUFlLEdBQUcsS0FBSyxFQUFFLG9CQUE0QixFQUFFLEVBQUU7SUFDcEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLDRCQUFvQixFQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDakUsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sZUFBZSxHQUFHLGlCQUFPLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFOUQsT0FBTyxpQkFBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDO0FBTlcsUUFBQSxlQUFlLG1CQU0xQjtBQUVLLE1BQU0sZUFBZSxHQUFHLEtBQUssRUFDbEMsT0FBbUIsRUFDbkIsTUFBa0IsRUFDbEIsRUFBRTtJQUNGLCtFQUErRTtJQUMvRSxnRUFBZ0U7SUFDaEUsZ0ZBQWdGO0lBQ2hGLE9BQU8sSUFBQSwyQkFBb0IsRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RCxDQUFDLENBQUM7QUFSVyxRQUFBLGVBQWUsbUJBUTFCO0FBRUYsNERBQTREO0FBQzVELHNKQUFzSjtBQUMvSSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsTUFBa0IsRUFBRSxZQUFvQixFQUFFLEVBQUU7SUFDcEUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1osSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7SUFFOUIsT0FBTyxPQUFPLEdBQUcsWUFBWSxFQUFFO1FBQzdCLE1BQU0sSUFBSSxHQUFHLE1BQU0saUJBQU8sQ0FBQyxNQUFNLENBQy9CLElBQUksVUFBVSxDQUFDO1lBQ2IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3hELEdBQUcsTUFBTTtTQUNWLENBQUMsQ0FDSCxDQUFDO1FBQ0YsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzlDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDZCxHQUFHLElBQUksQ0FBQyxDQUFDO0tBQ1Y7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFsQlcsUUFBQSxHQUFHLE9Ba0JkO0FBRUYsNERBQTREO0FBQzVELHVJQUF1STtBQUN2SSwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLGtDQUFrQztBQUNsQyxTQUFTLGlCQUFpQixDQUFDLFNBQXFCO0lBQzlDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUV0QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUNaLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUN2QixNQUFNLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztJQUN0QixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUNaLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUN2QixNQUFNLElBQUksT0FBTyxDQUFDO0lBRWxCLE1BQU0sUUFBUSxHQUFHLFVBQVUsR0FBRyxPQUFPLENBQUM7SUFDdEMsTUFBTSxRQUFRLEdBQUcsVUFBVSxHQUFHLE9BQU8sQ0FBQztJQUV0QyxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEdBQUcsT0FBTyxHQUFHLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQztJQUV2RSxLQUFLLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRTtRQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3BCO0lBRUQsTUFBTSxDQUFDLEdBQUcsQ0FDUixTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsRUFDcEUsTUFBTSxDQUNQLENBQUM7SUFFRixNQUFNLEdBQUcsVUFBVSxDQUFDO0lBRXBCLEtBQUssTUFBTSxDQUFDLEdBQUcsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFO1FBQ3RELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDcEI7SUFFRCxNQUFNLENBQUMsR0FBRyxDQUNSLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxFQUNwRSxNQUFNLENBQ1AsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQy9CLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQ2hELEVBQUUsQ0FDSCxDQUFDO0lBRUYsT0FBTyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVNLEtBQUssVUFBVSx3QkFBd0IsQ0FDNUMsYUFBcUIsRUFDckIsWUFBb0I7SUFFcEIsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFBLGdCQUFRLEVBQUMsYUFBYSxDQUFDLENBQUM7SUFDakQsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFBLGdCQUFRLEVBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUMzRSxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUEsZ0JBQVEsRUFDL0IsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQ2hELENBQUM7SUFFRixPQUFPLElBQUEsY0FBTSxFQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFYRCw0REFXQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGdldFB1YmxpY0tleSxcbiAgZ2V0U2hhcmVkU2VjcmV0IGFzIG5vYmxlR2V0U2hhcmVkU2VjcmV0LFxuICBQb2ludCxcbiAgc2lnbiBhcyBlY1NpZ24sXG4gIHV0aWxzIGFzIGVjVXRpbHMsXG59IGZyb20gJ0Bub2JsZS9zZWNwMjU2azEnO1xuaW1wb3J0ICogYXMgYnM1OCBmcm9tICdiczU4JztcbmltcG9ydCB7IFBVQkxJQ19LRVlfUFJFRklYRVMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBqd3RBbGdvcml0aG0sIEtleVBhaXIsIE5ldHdvcmsgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gQnJvd3NlciBmcmllbmRseSB2ZXJzaW9uIG9mIG5vZGUncyBCdWZmZXIuY29uY2F0LlxuZnVuY3Rpb24gY29uY2F0VWludDhBcnJheXMoYXJyYXlzOiBVaW50OEFycmF5W10sIGxlbmd0aD86IG51bWJlcikge1xuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSBhcnJheXMucmVkdWNlKChhY2MsIGFycmF5KSA9PiBhY2MgKyBhcnJheS5sZW5ndGgsIDApO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChvZmZzZXQgKyBhcnJheXNbaV0ubGVuZ3RoID4gbGVuZ3RoKSB7XG4gICAgICByZXN1bHQuc2V0KGFycmF5c1tpXS5zbGljZSgwLCBsZW5ndGggLSBvZmZzZXQpLCBvZmZzZXQpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdC5zZXQoYXJyYXlzW2ldLCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSBhcnJheXNbaV0ubGVuZ3RoO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmNvbnN0IHV2YXJpbnQ2NFRvQnVmID0gKHVpbnQ6IG51bWJlcik6IFVpbnQ4QXJyYXkgPT4ge1xuICBjb25zdCByZXN1bHQ6IG51bWJlcltdID0gW107XG4gIHdoaWxlICh1aW50ID49IDB4ODApIHtcbiAgICByZXN1bHQucHVzaChOdW1iZXIoKEJpZ0ludCh1aW50KSAmIEJpZ0ludCgweGZmKSkgfCBCaWdJbnQoMHg4MCkpKTtcbiAgICB1aW50ID0gTnVtYmVyKEJpZ0ludCh1aW50KSA+PiBCaWdJbnQoNykpO1xuICB9XG4gIHJlc3VsdC5wdXNoKHVpbnQgfCAwKTtcblxuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocmVzdWx0KTtcbn07XG5cbmludGVyZmFjZSBCYXNlNThDaGVja09wdGlvbnMge1xuICBuZXR3b3JrOiBOZXR3b3JrO1xufVxuXG4vLyBXZSBhcmUgbm90IHVzaW5nIHRoZSBuYXRpdmUgd2ViIGNyeXB0byBBUEkgdG8gYWN0dWFsbHkgZ2VuZXJhdGUga2V5c1xuLy8gYmVjYXVzZSBpdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZWNwMjU2azEgY3VydmUuIEluc3RlYWQsIHdlIGFyZSB1c2luZ1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3BhdWxtaWxsci9ub2JsZS1zZWNwMjU2azEgd2hpY2ggaXMgYSBicm93c2VyIGZyaWVuZGx5XG4vLyBhbHRlcm5hdGl2ZSB0byB0aGUgbm9kZSBlbGxpcHRpYyBwYWNrYWdlIHdoaWNoIGlzIGZhciBzbWFsbGVyIGFuZCBvbmx5XG4vLyBmb2N1c2VzIG9uIHN1cHBvcnRpbmcgdGhlIGVjIGFsZ29yaXRobSB3ZSBhcmUgYWN0dWFsbHkgaW50ZXJlc3RlZCBpbiBoZXJlLlxuLy8gSWYgdGhlIHdlYiBjcnlwdG8gQVBJIGV2ZXIgYWRkcyBzdXBwb3J0IGZvciBzZWNwMjU2azEsIHdlIHNob3VsZCBjaGFuZ2Vcbi8vIHRoaXMgdG8gdXNlIGl0LlxuLy9cbi8vIFNlZSB0aGUgZm9sbG93aW5nIGZvciBtb3JlIGluZm86XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdzNjL3dlYmNyeXB0by9pc3N1ZXMvODJcbi8vXG4vLyBJZiB5b3UgZG9uJ3QgcHJvdmlkZSBhIHNlZWQsIGEgcmFuZG9tIG9uZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgeW91IGFuZCBhXG4vLyByYW5kb20ga2V5IHBhaXIgd2lsbCBiZSByZXR1cm5lZC4gSWYgeW91IGRvIHByb3ZpZGUgYSBzZWVkLCBpdCBzaG91bGQgYmUgYVxuLy8gcmFuZG9tbHkgZ2VuZXJhdGVkIDMyIGJ5dGUgdmFsdWUgKFVpbnQ4QXJyYXkgb2YgbGVuZ3RoIDMyIG9yIGhleCBzdHJpbmcgb2Zcbi8vIGxlbmd0aCA2NClcbmV4cG9ydCBjb25zdCBrZXlnZW4gPSAoc2VlZD86IHN0cmluZyB8IFVpbnQ4QXJyYXkpOiBLZXlQYWlyID0+IHtcbiAgY29uc3QgcHJpdmF0ZUtleSA9IHNlZWQgPyBub3JtYWxpemVTZWVkKHNlZWQpIDogZWNVdGlscy5yYW5kb21CeXRlcygzMik7XG4gIGNvbnN0IHNlZWRIZXggPSBlY1V0aWxzLmJ5dGVzVG9IZXgocHJpdmF0ZUtleSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzZWVkSGV4LFxuICAgIHByaXZhdGU6IHByaXZhdGVLZXksXG4gICAgcHVibGljOiBnZXRQdWJsaWNLZXkocHJpdmF0ZUtleSwgdHJ1ZSAvKiBpc0NvbXByZXNzZWQgKi8pLFxuICB9O1xufTtcblxuY29uc3Qgbm9ybWFsaXplU2VlZCA9IChzZWVkOiBzdHJpbmcgfCBVaW50OEFycmF5KTogVWludDhBcnJheSA9PiB7XG4gIGlmICh0eXBlb2Ygc2VlZCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZWNVdGlscy5oZXhUb0J5dGVzKHNlZWQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzZWVkO1xuICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gZGF0YSBjb3VsZCBiZSBhIGhleCBzdHJpbmcgb3IgYSBieXRlIGFycmF5IChVaW50OEFycmF5KVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNoYTI1NlgyID0gYXN5bmMgKFxuICBkYXRhOiBVaW50OEFycmF5IHwgc3RyaW5nXG4pOiBQcm9taXNlPFVpbnQ4QXJyYXk+ID0+IHtcbiAgY29uc3QgZCA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IGVjVXRpbHMuaGV4VG9CeXRlcyhkYXRhKSA6IGRhdGE7XG4gIHJldHVybiBlY1V0aWxzLnNoYTI1Nihhd2FpdCBlY1V0aWxzLnNoYTI1NihkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgcHVibGljS2V5VG9CYXNlNThDaGVjayA9IGFzeW5jIChcbiAgcHVibGljS2V5Qnl0ZXM6IFVpbnQ4QXJyYXksXG4gIG9wdGlvbnM/OiBCYXNlNThDaGVja09wdGlvbnNcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHByZWZpeCA9IFBVQkxJQ19LRVlfUFJFRklYRVNbb3B0aW9ucz8ubmV0d29yayA/PyAnbWFpbm5ldCddLmRlc287XG4gIC8vIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIGltcGxlbWVudGF0aW9uIGluIHRoZSBiczU4Y2hlY2sgcGFja2FnZSwgYnV0IHdlXG4gIC8vIHNsaWdodGx5IG1vZGlmeSBpdCB0byB1c2UgdGhlIGJyb3dzZXIgZnJpZW5kbHkgdmVyc2lvbiBvZiBCdWZmZXIuY29uY2F0LlxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luanMvYnM1OGNoZWNrL2Jsb2IvMTJiM2U3MDBmMzU1YzVjNDlkMGJlM2Y4ZmMyOWJlNmM2NmU3NTNlOS9iYXNlLmpzI0wxXG4gIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWy4uLnByZWZpeCwgLi4ucHVibGljS2V5Qnl0ZXNdKTtcbiAgY29uc3QgY2hlY2tzdW0gPSBhd2FpdCBzaGEyNTZYMihieXRlcyk7XG4gIHJldHVybiBiczU4LmVuY29kZShjb25jYXRVaW50OEFycmF5cyhbYnl0ZXMsIGNoZWNrc3VtXSwgYnl0ZXMubGVuZ3RoICsgNCkpO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBTaWduT3B0aW9ucyB7XG4gIGlzRGVyaXZlZEtleTogYm9vbGVhbjtcbn1cblxuY29uc3Qgc2lnbiA9IChtc2dIYXNoSGV4OiBzdHJpbmcsIHByaXZhdGVLZXk6IFVpbnQ4QXJyYXkpID0+IHtcbiAgcmV0dXJuIGVjU2lnbihtc2dIYXNoSGV4LCBwcml2YXRlS2V5LCB7XG4gICAgLy8gRm9yIGRldGFpbHMgYWJvdXQgdGhlIHNpZ25pbmcgb3B0aW9ucyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9wYXVsbWlsbHIvbm9ibGUtc2VjcDI1NmsxI3NpZ25tc2doYXNoLXByaXZhdGVrZXlcbiAgICBjYW5vbmljYWw6IHRydWUsXG4gICAgZGVyOiB0cnVlLFxuICAgIGV4dHJhRW50cm9weTogdHJ1ZSxcbiAgICByZWNvdmVyZWQ6IHRydWUsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25UeCA9IGFzeW5jIChcbiAgdHhIZXg6IHN0cmluZyxcbiAgc2VlZEhleDogc3RyaW5nLFxuICBvcHRpb25zPzogU2lnbk9wdGlvbnNcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHRyYW5zYWN0aW9uQnl0ZXMgPSBlY1V0aWxzLmhleFRvQnl0ZXModHhIZXgpO1xuICBjb25zdCBoYXNoZWRUeEJ5dGVzID0gYXdhaXQgc2hhMjU2WDIodHJhbnNhY3Rpb25CeXRlcyk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uSGFzaEhleCA9IGVjVXRpbHMuYnl0ZXNUb0hleChoYXNoZWRUeEJ5dGVzKTtcbiAgY29uc3QgcHJpdmF0ZUtleSA9IGVjVXRpbHMuaGV4VG9CeXRlcyhzZWVkSGV4KTtcbiAgY29uc3QgW3NpZ25hdHVyZUJ5dGVzLCByZWNvdmVyeVBhcmFtXSA9IGF3YWl0IHNpZ24oXG4gICAgdHJhbnNhY3Rpb25IYXNoSGV4LFxuICAgIHByaXZhdGVLZXlcbiAgKTtcblxuICBjb25zdCBzaWduYXR1cmVMZW5ndGggPSB1dmFyaW50NjRUb0J1ZihzaWduYXR1cmVCeXRlcy5sZW5ndGgpO1xuXG4gIGlmIChvcHRpb25zPy5pc0Rlcml2ZWRLZXkpIHtcbiAgICBzaWduYXR1cmVCeXRlc1swXSArPSAxICsgcmVjb3ZlcnlQYXJhbTtcbiAgfVxuXG4gIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uQnl0ZXMgPSBlY1V0aWxzLmNvbmNhdEJ5dGVzKFxuICAgIHRyYW5zYWN0aW9uQnl0ZXMuc2xpY2UoMCwgLTEpLFxuICAgIHNpZ25hdHVyZUxlbmd0aCxcbiAgICBzaWduYXR1cmVCeXRlc1xuICApO1xuXG4gIHJldHVybiBlY1V0aWxzLmJ5dGVzVG9IZXgoc2lnbmVkVHJhbnNhY3Rpb25CeXRlcyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2lnbmVkSldUID0gYXN5bmMgKFxuICBzZWVkSGV4OiBzdHJpbmcsXG4gIGFsZzogand0QWxnb3JpdGhtLFxuICB7XG4gICAgZGVyaXZlZFB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIGV4cGlyYXRpb24sXG4gIH06IHtcbiAgICBkZXJpdmVkUHVibGljS2V5QmFzZTU4Q2hlY2s/OiBzdHJpbmc7XG4gICAgZXhwaXJhdGlvbj86IG51bWJlcjtcbiAgfVxuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgaGVhZGVyID0gSlNPTi5zdHJpbmdpZnkoeyBhbGcsIHR5cDogJ0pXVCcgfSk7XG4gIGNvbnN0IGlzc3VlZEF0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gIGNvbnN0IHRoaXJ0eU1pbkZyb21Ob3cgPSBpc3N1ZWRBdCArIDMwICogNjA7XG4gIGNvbnN0IHBheWxvYWQgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgLi4uKGRlcml2ZWRQdWJsaWNLZXlCYXNlNThDaGVjayA/IHsgZGVyaXZlZFB1YmxpY0tleUJhc2U1OENoZWNrIH0gOiB7fSksXG4gICAgaWF0OiBpc3N1ZWRBdCxcbiAgICBleHA6IHRoaXJ0eU1pbkZyb21Ob3csXG4gIH0pO1xuXG4gIGNvbnN0IGp3dCA9IGAke3VybFNhZmVCYXNlNjQoaGVhZGVyKX0uJHt1cmxTYWZlQmFzZTY0KHBheWxvYWQpfWA7XG5cbiAgY29uc3QgW3NpZ25hdHVyZV0gPSBhd2FpdCBzaWduKFxuICAgIGVjVXRpbHMuYnl0ZXNUb0hleChhd2FpdCBlY1V0aWxzLnNoYTI1NihuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoand0KSkpLFxuICAgIGVjVXRpbHMuaGV4VG9CeXRlcyhzZWVkSGV4KVxuICApO1xuICBjb25zdCBlbmNvZGVkU2lnbmF0dXJlID0gZGVyVG9Kb3NlRW5jb2Rpbmcoc2lnbmF0dXJlKTtcblxuICByZXR1cm4gYCR7and0fS4ke2VuY29kZWRTaWduYXR1cmV9YDtcbn07XG5cbmZ1bmN0aW9uIHVybFNhZmVCYXNlNjQoc3RyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHdpbmRvd1xuICAgIC5idG9hKHN0cilcbiAgICAucmVwbGFjZSgvXFwrL2csICctJylcbiAgICAucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAucmVwbGFjZSgvPS9nLCAnJyk7XG59XG5cbmV4cG9ydCBjb25zdCBlbmNyeXB0Q2hhdE1lc3NhZ2UgPSBhc3luYyAoXG4gIHNlbmRlclNlZWRIZXg6IHN0cmluZyxcbiAgcmVjaXBpZW50UHVibGljS2V5QmFzZTU4Q2hlY2s6IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nXG4pID0+IHtcbiAgY29uc3QgcHJpdmF0ZUtleSA9IGVjVXRpbHMuaGV4VG9CeXRlcyhzZW5kZXJTZWVkSGV4KTtcbiAgY29uc3QgcmVjaXBpZW50UHVibGljS2V5ID0gYXdhaXQgYnM1OFB1YmxpY0tleVRvQnl0ZXMoXG4gICAgcmVjaXBpZW50UHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgKTtcbiAgY29uc3Qgc2hhcmVkUHJpdmF0ZUtleSA9IGF3YWl0IGdldFNoYXJlZFByaXZhdGVLZXkoXG4gICAgcHJpdmF0ZUtleSxcbiAgICByZWNpcGllbnRQdWJsaWNLZXlcbiAgKTtcbiAgY29uc3Qgc2hhcmVkUHVibGljS2V5ID0gZ2V0UHVibGljS2V5KHNoYXJlZFByaXZhdGVLZXkpO1xuXG4gIHJldHVybiBlbmNyeXB0KHNoYXJlZFB1YmxpY0tleSwgbWVzc2FnZSk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSBwdWJsaWNFbmNyeXB0aW9uS2V5IGNvdWxkIGJlIGluIHJhdyBieXRlcyBvciBiYXNlNThjaGVjayBmb3JtYXRcbiAqIEBwYXJhbSBwbGFpbnRleHRcbiAqIEByZXR1cm5zIGNpcGhlciB0ZXh0IGFzIGEgaGV4IHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IGFzeW5jIChcbiAgcHVibGljS2V5OiBVaW50OEFycmF5IHwgc3RyaW5nLFxuICBwbGFpbnRleHQ6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgZXBoZW1Qcml2YXRlS2V5ID0gZWNVdGlscy5yYW5kb21CeXRlcygzMik7XG4gIGNvbnN0IGVwaGVtUHVibGljS2V5ID0gZ2V0UHVibGljS2V5KGVwaGVtUHJpdmF0ZUtleSk7XG4gIGNvbnN0IHB1YmxpY0tleUJ5dGVzID1cbiAgICB0eXBlb2YgcHVibGljS2V5ID09PSAnc3RyaW5nJ1xuICAgICAgPyBhd2FpdCBiczU4UHVibGljS2V5VG9CeXRlcyhwdWJsaWNLZXkpXG4gICAgICA6IHB1YmxpY0tleTtcbiAgY29uc3QgcHJpdktleSA9IGF3YWl0IGdldFNoYXJlZFByaXZhdGVLZXkoZXBoZW1Qcml2YXRlS2V5LCBwdWJsaWNLZXlCeXRlcyk7XG4gIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBwcml2S2V5LnNsaWNlKDAsIDE2KTtcbiAgY29uc3QgaXYgPSBlY1V0aWxzLnJhbmRvbUJ5dGVzKDE2KTtcbiAgY29uc3QgbWFjS2V5ID0gYXdhaXQgZWNVdGlscy5zaGEyNTYocHJpdktleS5zbGljZSgxNikpO1xuICBjb25zdCBieXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShwbGFpbnRleHQpO1xuICBjb25zdCBjcnlwdG9LZXkgPSBhd2FpdCB3aW5kb3cuY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoXG4gICAgJ3JhdycsXG4gICAgZW5jcnlwdGlvbktleSxcbiAgICAnQUVTLUNUUicsXG4gICAgdHJ1ZSxcbiAgICBbJ2VuY3J5cHQnXVxuICApO1xuICBjb25zdCBjaXBoZXJCeXRlcyA9IGF3YWl0IHdpbmRvdy5jcnlwdG8uc3VidGxlLmVuY3J5cHQoXG4gICAge1xuICAgICAgbmFtZTogJ0FFUy1DVFInLFxuICAgICAgY291bnRlcjogaXYsXG4gICAgICBsZW5ndGg6IDEyOCxcbiAgICB9LFxuICAgIGNyeXB0b0tleSxcbiAgICBieXRlc1xuICApO1xuICBjb25zdCBobWFjID0gYXdhaXQgZWNVdGlscy5obWFjU2hhMjU2KFxuICAgIG1hY0tleSxcbiAgICBuZXcgVWludDhBcnJheShbLi4uaXYsIC4uLm5ldyBVaW50OEFycmF5KGNpcGhlckJ5dGVzKV0pXG4gICk7XG5cbiAgcmV0dXJuIGVjVXRpbHMuYnl0ZXNUb0hleChcbiAgICBuZXcgVWludDhBcnJheShbXG4gICAgICAuLi5lcGhlbVB1YmxpY0tleSxcbiAgICAgIC4uLml2LFxuICAgICAgLi4ubmV3IFVpbnQ4QXJyYXkoY2lwaGVyQnl0ZXMpLFxuICAgICAgLi4uaG1hYyxcbiAgICBdKVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGJzNThQdWJsaWNLZXlUb0J5dGVzID0gYXN5bmMgKHN0cjogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGJ5dGVzID0gYnM1OC5kZWNvZGUoc3RyKTtcbiAgY29uc3QgcGF5bG9hZCA9IGJ5dGVzLnNsaWNlKDAsIC00KTtcbiAgY29uc3QgY2hlY2tzdW1BID0gYnl0ZXMuc2xpY2UoLTQpO1xuICBjb25zdCBjaGVja3N1bUIgPSBhd2FpdCBzaGEyNTZYMihwYXlsb2FkKTtcblxuICBpZiAoXG4gICAgKGNoZWNrc3VtQVswXSBeIGNoZWNrc3VtQlswXSkgfFxuICAgIChjaGVja3N1bUFbMV0gXiBjaGVja3N1bUJbMV0pIHxcbiAgICAoY2hlY2tzdW1BWzJdIF4gY2hlY2tzdW1CWzJdKSB8XG4gICAgKGNoZWNrc3VtQVszXSBeIGNoZWNrc3VtQlszXSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNoZWNrc3VtJyk7XG4gIH1cblxuICByZXR1cm4gUG9pbnQuZnJvbUhleChlY1V0aWxzLmJ5dGVzVG9IZXgocGF5bG9hZC5zbGljZSgzKSkpLnRvUmF3Qnl0ZXMoZmFsc2UpO1xufTtcblxuY29uc3QgaXNWYWxpZEhtYWMgPSAoY2FuZGlkYXRlOiBVaW50OEFycmF5LCBrbm93bkdvb2Q6IFVpbnQ4QXJyYXkpID0+IHtcbiAgaWYgKGNhbmRpZGF0ZS5sZW5ndGggIT09IGtub3duR29vZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGtub3duR29vZC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChjYW5kaWRhdGVbaV0gIT09IGtub3duR29vZFtpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlY3J5cHRDaGF0TWVzc2FnZSA9IGFzeW5jIChcbiAgcmVjaXBpZW50U2VlZEhleDogc3RyaW5nLFxuICBwdWJsaWNEZWNyeXB0aW9uS2V5OiBzdHJpbmcsXG4gIGNpcGhlclRleHRIZXg6IHN0cmluZ1xuKSA9PiB7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBlY1V0aWxzLmhleFRvQnl0ZXMocmVjaXBpZW50U2VlZEhleCk7XG4gIGNvbnN0IHB1YmxpY0tleSA9IGF3YWl0IGJzNThQdWJsaWNLZXlUb0J5dGVzKHB1YmxpY0RlY3J5cHRpb25LZXkpO1xuICBjb25zdCBzaGFyZWRQcml2YXRlS2V5ID0gYXdhaXQgZ2V0U2hhcmVkUHJpdmF0ZUtleShwcml2YXRlS2V5LCBwdWJsaWNLZXkpO1xuICByZXR1cm4gZGVjcnlwdChzaGFyZWRQcml2YXRlS2V5LCBjaXBoZXJUZXh0SGV4KTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWNyeXB0ID0gYXN5bmMgKFxuICBwcml2YXRlRGVjcnlwdGlvbktleTogVWludDhBcnJheSB8IHN0cmluZyxcbiAgY2lwaGVyVGV4dEhleDogc3RyaW5nXG4pID0+IHtcbiAgY29uc3QgY2lwaGVyQnl0ZXMgPSBlY1V0aWxzLmhleFRvQnl0ZXMoY2lwaGVyVGV4dEhleCk7XG4gIGNvbnN0IG1ldGFMZW5ndGggPSAxMTM7XG5cbiAgaWYgKGNpcGhlckJ5dGVzLmxlbmd0aCA8IG1ldGFMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY2lwaGVyIHRleHQuIGRhdGEgdG9vIHNtYWxsLicpO1xuICB9XG5cbiAgaWYgKCEoY2lwaGVyQnl0ZXNbMF0gPj0gMiAmJiBjaXBoZXJCeXRlc1swXSA8PSA0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjaXBoZXIgdGV4dC4nKTtcbiAgfVxuXG4gIGNvbnN0IHByaXZhdGVLZXkgPSBub3JtYWxpemVTZWVkKHByaXZhdGVEZWNyeXB0aW9uS2V5KTtcbiAgY29uc3QgZXBoZW1QdWJsaWNLZXkgPSBjaXBoZXJCeXRlcy5zbGljZSgwLCA2NSk7XG4gIGNvbnN0IGNpcGhlclRleHRMZW5ndGggPSBjaXBoZXJCeXRlcy5sZW5ndGggLSBtZXRhTGVuZ3RoO1xuICBjb25zdCBpdiA9IGNpcGhlckJ5dGVzLnNsaWNlKDY1LCA2NSArIDE2KTtcbiAgY29uc3QgY2lwaGVyQW5kSXYgPSBjaXBoZXJCeXRlcy5zbGljZSg2NSwgNjUgKyAxNiArIGNpcGhlclRleHRMZW5ndGgpO1xuICBjb25zdCBjaXBoZXJUZXh0ID0gY2lwaGVyQW5kSXYuc2xpY2UoMTYpO1xuICBjb25zdCBtc2dNYWMgPSBjaXBoZXJCeXRlcy5zbGljZSg2NSArIDE2ICsgY2lwaGVyVGV4dExlbmd0aCk7XG4gIGNvbnN0IHNoYXJlZFNlY3JldEtleSA9IGF3YWl0IGdldFNoYXJlZFByaXZhdGVLZXkocHJpdmF0ZUtleSwgZXBoZW1QdWJsaWNLZXkpO1xuICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gc2hhcmVkU2VjcmV0S2V5LnNsaWNlKDAsIDE2KTtcbiAgY29uc3QgbWFjS2V5ID0gYXdhaXQgZWNVdGlscy5zaGEyNTYoc2hhcmVkU2VjcmV0S2V5LnNsaWNlKDE2KSk7XG4gIGNvbnN0IGhtYWNLbm93bkdvb2QgPSBhd2FpdCBlY1V0aWxzLmhtYWNTaGEyNTYobWFjS2V5LCBjaXBoZXJBbmRJdik7XG5cbiAgaWYgKCFpc1ZhbGlkSG1hYyhtc2dNYWMsIGhtYWNLbm93bkdvb2QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbmNvcnJlY3QgTUFDJyk7XG4gIH1cblxuICBjb25zdCBjcnlwdG9LZXkgPSBhd2FpdCBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICdyYXcnLFxuICAgIGVuY3J5cHRpb25LZXksXG4gICAgJ0FFUy1DVFInLFxuICAgIHRydWUsXG4gICAgWydkZWNyeXB0J11cbiAgKTtcblxuICBjb25zdCBkZWNyeXB0ZWRCdWZmZXIgPSBhd2FpdCBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGUuZGVjcnlwdChcbiAgICB7IG5hbWU6ICdBRVMtQ1RSJywgY291bnRlcjogaXYsIGxlbmd0aDogMTI4IH0sXG4gICAgY3J5cHRvS2V5LFxuICAgIGNpcGhlclRleHRcbiAgKTtcblxuICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGRlY3J5cHRlZEJ1ZmZlcik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2hhcmVkUHJpdmF0ZUtleSA9IGFzeW5jIChcbiAgcHJpdktleTogVWludDhBcnJheSxcbiAgcHViS2V5OiBVaW50OEFycmF5XG4pID0+IHtcbiAgY29uc3Qgc2hhcmVkU2VjcmV0ID0gYXdhaXQgZ2V0U2hhcmVkU2VjcmV0KHByaXZLZXksIHB1YktleSk7XG5cbiAgcmV0dXJuIGtkZihzaGFyZWRTZWNyZXQsIDMyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWNvZGVQdWJsaWNLZXkgPSBhc3luYyAocHVibGljS2V5QmFzZTU4Q2hlY2s6IHN0cmluZykgPT4ge1xuICBjb25zdCBkZWNvZGVkID0gYXdhaXQgYnM1OFB1YmxpY0tleVRvQnl0ZXMocHVibGljS2V5QmFzZTU4Q2hlY2spO1xuICBjb25zdCB3aXRoUHJlZml4UmVtb3ZlZCA9IGRlY29kZWQuc2xpY2UoMyk7XG4gIGNvbnN0IHNlbmRlclB1YktleUhleCA9IGVjVXRpbHMuYnl0ZXNUb0hleCh3aXRoUHJlZml4UmVtb3ZlZCk7XG5cbiAgcmV0dXJuIFBvaW50LmZyb21IZXgoc2VuZGVyUHViS2V5SGV4KS50b1Jhd0J5dGVzKGZhbHNlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTaGFyZWRTZWNyZXQgPSBhc3luYyAoXG4gIHByaXZLZXk6IFVpbnQ4QXJyYXksXG4gIHB1YktleTogVWludDhBcnJheVxuKSA9PiB7XG4gIC8vIHBhc3NpbmcgdHJ1ZSB0byBjb21wcmVzcyB0aGUgcHVibGljIGtleSwgYW5kIHRoZW4gc2xpY2luZyBvZmYgdGhlIGZpcnN0IGJ5dGVcbiAgLy8gbWF0Y2hlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgZGVyaXZlIGluIHRoZSBlbGxpcHRpYyBwYWNrYWdlLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGF1bG1pbGxyL25vYmxlLXNlY3AyNTZrMS9pc3N1ZXMvMjgjaXNzdWVjb21tZW50LTk0NjUzODAzN1xuICByZXR1cm4gbm9ibGVHZXRTaGFyZWRTZWNyZXQocHJpdktleSwgcHViS2V5LCB0cnVlKS5zbGljZSgxKTtcbn07XG5cbi8vIHRha2VuIGZyb20gcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGluIHRoZSBkZXNvIGNoYXQgYXBwOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rlc28tcHJvdG9jb2wvYWNjZXNzLWdyb3VwLW1lc3NhZ2luZy1hcHAvYmxvYi9jZDVjMjM3ZjVlNTcyOTE5NmFhYzBkYTE2MWQwODUxYmRlNzgwOTJjL3NyYy9zZXJ2aWNlcy9jcnlwdG8tdXRpbHMuc2VydmljZS50c3gjTDkxXG5leHBvcnQgY29uc3Qga2RmID0gYXN5bmMgKHNlY3JldDogVWludDhBcnJheSwgb3V0cHV0TGVuZ3RoOiBudW1iZXIpID0+IHtcbiAgbGV0IGN0ciA9IDE7XG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KCk7XG5cbiAgd2hpbGUgKHdyaXR0ZW4gPCBvdXRwdXRMZW5ndGgpIHtcbiAgICBjb25zdCBoYXNoID0gYXdhaXQgZWNVdGlscy5zaGEyNTYoXG4gICAgICBuZXcgVWludDhBcnJheShbXG4gICAgICAgIC4uLm5ldyBVaW50OEFycmF5KFtjdHIgPj4gMjQsIGN0ciA+PiAxNiwgY3RyID4+IDgsIGN0cl0pLFxuICAgICAgICAuLi5zZWNyZXQsXG4gICAgICBdKVxuICAgICk7XG4gICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoWy4uLnJlc3VsdCwgLi4uaGFzaF0pO1xuICAgIHdyaXR0ZW4gKz0gMzI7XG4gICAgY3RyICs9IDE7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gVGhpcyBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGRlclRvSm9zZSBmdW5jdGlvbiBmcm9tXG4vLyBodHRwczovL2dpdGh1Yi5jb20vQnJpZ2h0c3BhY2Uvbm9kZS1lY2RzYS1zaWctZm9ybWF0dGVyL2Jsb2IvY2EyNWEyZmQ1YWU5ZGQ4NTAzNjA4MTYzMjkzNmU4MDJhNDdhMTI4OS9zcmMvZWNkc2Etc2lnLWZvcm1hdHRlci5qcyNMMzJcbi8vIFRoZSBvcmlnaW5hbCBwYWNrYWdlIGlzIG5vdCBicm93c2VyIGZyaWVuZGx5IGFuZCByZXF1aXJlcyBub2RlIHBvbHlmaWxscy4gV2Vcbi8vIGFsc28gZG9uJ3QgbmVlZCB0byBiZSBxdWl0ZSBhcyBkZWZlbnNpdmUgYXMgdGhlIG9yaWdpbmFsIHBhY2thZ2Ugc2luY2Ugd2Vcbi8vIGhhdmUgZnVsbCBjb250cm9sIG9mIHRoZSBpbnB1dC5cbmZ1bmN0aW9uIGRlclRvSm9zZUVuY29kaW5nKHNpZ25hdHVyZTogVWludDhBcnJheSkge1xuICBjb25zdCBwYXJhbUJ5dGVzID0gMzI7XG5cbiAgbGV0IG9mZnNldCA9IDM7XG4gIGNvbnN0IHJMZW5ndGggPSBzaWduYXR1cmVbb2Zmc2V0XTtcbiAgb2Zmc2V0ICs9IDE7XG4gIGNvbnN0IHJPZmZzZXQgPSBvZmZzZXQ7XG4gIG9mZnNldCArPSByTGVuZ3RoICsgMTtcbiAgY29uc3Qgc0xlbmd0aCA9IHNpZ25hdHVyZVtvZmZzZXRdO1xuICBvZmZzZXQgKz0gMTtcbiAgY29uc3Qgc09mZnNldCA9IG9mZnNldDtcbiAgb2Zmc2V0ICs9IHNMZW5ndGg7XG5cbiAgY29uc3QgclBhZGRpbmcgPSBwYXJhbUJ5dGVzIC0gckxlbmd0aDtcbiAgY29uc3Qgc1BhZGRpbmcgPSBwYXJhbUJ5dGVzIC0gc0xlbmd0aDtcblxuICBjb25zdCBvdXRQdXQgPSBuZXcgVWludDhBcnJheShyUGFkZGluZyArIHJMZW5ndGggKyBzUGFkZGluZyArIHNMZW5ndGgpO1xuXG4gIGZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgclBhZGRpbmc7ICsrb2Zmc2V0KSB7XG4gICAgb3V0UHV0W29mZnNldF0gPSAwO1xuICB9XG5cbiAgb3V0UHV0LnNldChcbiAgICBzaWduYXR1cmUuc2xpY2Uock9mZnNldCArIE1hdGgubWF4KC1yUGFkZGluZywgMCksIHJPZmZzZXQgKyByTGVuZ3RoKSxcbiAgICBvZmZzZXRcbiAgKTtcblxuICBvZmZzZXQgPSBwYXJhbUJ5dGVzO1xuXG4gIGZvciAoY29uc3QgbyA9IG9mZnNldDsgb2Zmc2V0IDwgbyArIHNQYWRkaW5nOyArK29mZnNldCkge1xuICAgIG91dFB1dFtvZmZzZXRdID0gMDtcbiAgfVxuXG4gIG91dFB1dC5zZXQoXG4gICAgc2lnbmF0dXJlLnNsaWNlKHNPZmZzZXQgKyBNYXRoLm1heCgtc1BhZGRpbmcsIDApLCBzT2Zmc2V0ICsgc0xlbmd0aCksXG4gICAgb2Zmc2V0XG4gICk7XG5cbiAgY29uc3Qgb3V0cHV0Q2hhcnMgPSBvdXRQdXQucmVkdWNlKFxuICAgIChkYXRhLCBieXRlKSA9PiBkYXRhICsgU3RyaW5nLmZyb21DaGFyQ29kZShieXRlKSxcbiAgICAnJ1xuICApO1xuXG4gIHJldHVybiB1cmxTYWZlQmFzZTY0KG91dHB1dENoYXJzKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlcml2ZUFjY2Vzc0dyb3VwS2V5UGFpcihcbiAgcHJpdmF0ZUtleUhleDogc3RyaW5nLFxuICBncm91cEtleU5hbWU6IHN0cmluZ1xuKTogUHJvbWlzZTxLZXlQYWlyPiB7XG4gIGNvbnN0IHNlY3JldEhhc2ggPSBhd2FpdCBzaGEyNTZYMihwcml2YXRlS2V5SGV4KTtcbiAgY29uc3Qga2V5TmFtZUhhc2ggPSBhd2FpdCBzaGEyNTZYMihuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZ3JvdXBLZXlOYW1lKSk7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBhd2FpdCBzaGEyNTZYMihcbiAgICBuZXcgVWludDhBcnJheShbLi4uc2VjcmV0SGFzaCwgLi4ua2V5TmFtZUhhc2hdKVxuICApO1xuXG4gIHJldHVybiBrZXlnZW4ocHJpdmF0ZUtleSk7XG59XG4iXX0= |
@@ -1,2 +0,3 @@ | ||
import { APIProvider, IdentityConfiguration, IdentityDerivePayload, LoginOptions, StoredUser, SubscriberNotification, TransactionSpendingLimitResponseOptions } from './types'; | ||
import { AccessGroupEntryResponse, DecryptedMessageEntryResponse, NewMessageEntryResponse, SubmitTransactionResponse } from 'deso-protocol-types'; | ||
import { AccessGroupPrivateInfo, APIProvider, IdentityConfiguration, IdentityDerivePayload, LoginOptions, StoredUser, SubscriberNotification, TransactionSpendingLimitResponseOptions } from './types'; | ||
export declare class Identity { | ||
@@ -171,3 +172,3 @@ #private; | ||
TransactionHex: string; | ||
}): Promise<any>; | ||
}): Promise<SubmitTransactionResponse>; | ||
/** | ||
@@ -187,5 +188,4 @@ * @deprecated Use signAndSubmit instead. Since we don't support unauthorized | ||
/** | ||
* Encrypt an arbitrary string using the sender's seed hex and the recipient's | ||
* public key. Typically this would make use of the sender's | ||
* messagingPrivateKey for building chat or messaging applications. | ||
* Encrypt an arbitrary string using the recipient's | ||
* public key. | ||
* | ||
@@ -196,4 +196,3 @@ * @example | ||
* | ||
* const cipherText = await identity.encrypt( | ||
* senderPrivateMessagingSeedHex, | ||
* const cipherText = await identity.encryptMessage( | ||
* recipientPublicKeyBase58Check, | ||
@@ -204,21 +203,26 @@ * message | ||
*/ | ||
encrypt(senderSeedHex: string, recipientPublicKeyBase58Check: string, plaintext: string): Promise<string>; | ||
encryptMessage(recipientPublicKeyBase58Check: string, messagePlainText: string): Promise<string>; | ||
/** | ||
* Decrypt a hex encoded encrypted message using the recipient's private seed | ||
* hex and the sender's public key. Typically this would make use of the | ||
* recipient's messagingPrivateKey for building chat or messaging | ||
* applications. | ||
* @param message This is a message object returned any of the messages | ||
* endpoints of the DeSo backend api, could be a DM or a Group message. | ||
* @param groups This is an array of group chats the user belongs to. This is | ||
* required to decrypt group messages. | ||
* @returns | ||
*/ | ||
decryptMessage(message: NewMessageEntryResponse, groups: AccessGroupEntryResponse[]): Promise<DecryptedMessageEntryResponse>; | ||
/** | ||
* Decrypts the encrypted access group private key that we will need to use to decrypt group messages. | ||
* | ||
* @example | ||
* ```typescript | ||
* const cipherTextHex = "df6f3ff4695edb569631af4494b9f05d86c7fb8572226a356e03678aa56b7875"; | ||
* @param encryptedKeyHex | ||
* @returns returns a promise that resolves t the decrypted key pair. | ||
*/ | ||
decryptAccessGroupKeyPair(encryptedKeyHex: string): Promise<import("./types").KeyPair>; | ||
/** | ||
* Generate a key pair for an access group. This is used to encrypt and | ||
* decrypt group messages. | ||
* | ||
* const plaintext = await identity.decrypt( | ||
* recipientPrivateMessagingSeedHex, | ||
* senderPublicKeyBase58Check, | ||
* cipherTextHex | ||
* ); | ||
* ``` | ||
* @param groupName the plaintext name of the group chat | ||
* @returns a promise that resolves to the new key info. | ||
*/ | ||
decrypt(recipientSeedHex: string, senderPublicKeyBase58Check: string, cipherTextHex: string): Promise<string>; | ||
accessGroupStandardDerivation(groupName: string): Promise<AccessGroupPrivateInfo>; | ||
/** | ||
@@ -225,0 +229,0 @@ * Get a jwt token signed by the derived key issued to the currently active user. This can be used to pass to |
@@ -39,2 +39,11 @@ "use strict"; | ||
}, []); | ||
if (result.AccessGroupLimitMap) { | ||
result.AccessGroupLimitMap = Object.values(result.AccessGroupLimitMap); | ||
} | ||
if (result.AccessGroupMemberLimitMap) { | ||
result.AccessGroupMemberLimitMap = Object.values(result.AccessGroupMemberLimitMap); | ||
} | ||
if (result.AssociationLimitMap) { | ||
result.AssociationLimitMap = Object.values(result.AssociationLimitMap); | ||
} | ||
if (!result.TransactionCountLimitMap || | ||
@@ -88,2 +97,2 @@ typeof ((_b = result.TransactionCountLimitMap) === null || _b === void 0 ? void 0 : _b['AUTHORIZE_DERIVED_KEY']) === | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2lkZW50aXR5L3NyYy9saWIvcGVybWlzc2lvbnMtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsU0FBZ0IsZ0NBQWdDLENBQzlDLG1CQUF3QixFQUN4QixpQkFBc0I7SUFFdEIsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7SUFFN0Isb0VBQW9FO0lBQ3BFLElBQUksaUJBQWlCLGFBQWpCLGlCQUFpQix1QkFBakIsaUJBQWlCLENBQUUsV0FBVyxFQUFFO1FBQ2xDLE9BQU8saUJBQWlCLENBQUM7S0FDMUI7SUFFRCxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDakQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hELElBQ0UsT0FBTyxTQUFTLEtBQUssV0FBVztZQUNoQyxDQUFDLE9BQU8sU0FBUyxLQUFLLFFBQVE7Z0JBQzVCLE9BQU8sV0FBVyxLQUFLLFFBQVE7Z0JBQy9CLFNBQVMsR0FBRyxXQUFXLENBQUM7WUFDMUIsQ0FBQyxPQUFPLFNBQVMsS0FBSyxRQUFRO2dCQUM1QixXQUFXLEtBQUssV0FBVztnQkFDM0IsU0FBUyxHQUFHLEdBQUcsQ0FBQyxFQUNsQjtZQUNBLGlCQUFpQixHQUFHLEtBQUssQ0FBQztTQUMzQjtJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxpQkFBaUIsQ0FBQztBQUMzQixDQUFDO0FBM0JELDRFQTJCQztBQUVELFNBQWdCLHFDQUFxQyxDQUNuRCxvQkFBc0U7O0lBRXRFLElBQUksb0JBQW9CLENBQUMsV0FBVyxFQUFFO1FBQ3BDLE9BQU87WUFDTCxXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFDO0tBQ0g7SUFFRCxJQUFJLENBQUEsTUFBQSxvQkFBb0IsQ0FBQyxlQUFl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bmRpbmdMaW1pdFJlc3BvbnNlIH0gZnJvbSAnZGVzby1wcm90b2NvbC10eXBlcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblNwZW5kaW5nTGltaXRSZXNwb25zZU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVUcmFuc2FjdGlvblNwZW5kaW5nTGltaXRzKFxuICBleHBlY3RlZFBlcm1pc3Npb25zOiBhbnksXG4gIGFjdHVhbFBlcm1pc3Npb25zOiBhbnlcbik6IGJvb2xlYW4ge1xuICBsZXQgaGFzQWxsUGVybWlzc2lvbnMgPSB0cnVlO1xuXG4gIC8vIGlmIHRoZSBrZXkgaXMgdW5saW1pdGVkIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBhbnl0aGluZyBlbHNlXG4gIGlmIChhY3R1YWxQZXJtaXNzaW9ucz8uSXNVbmxpbWl0ZWQpIHtcbiAgICByZXR1cm4gaGFzQWxsUGVybWlzc2lvbnM7XG4gIH1cblxuICB3YWxrT2JqKGV4cGVjdGVkUGVybWlzc2lvbnMsIChleHBlY3RlZFZhbCwgcGF0aCkgPT4ge1xuICAgIGNvbnN0IGFjdHVhbFZhbCA9IGdldERlZXBWYWx1ZShhY3R1YWxQZXJtaXNzaW9ucywgcGF0aCk7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIGFjdHVhbFZhbCA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgICh0eXBlb2YgYWN0dWFsVmFsID09PSAnbnVtYmVyJyAmJlxuICAgICAgICB0eXBlb2YgZXhwZWN0ZWRWYWwgPT09ICdudW1iZXInICYmXG4gICAgICAgIGFjdHVhbFZhbCA8IGV4cGVjdGVkVmFsKSB8fFxuICAgICAgKHR5cGVvZiBhY3R1YWxWYWwgPT09ICdudW1iZXInICYmXG4gICAgICAgIGV4cGVjdGVkVmFsID09PSAnVU5MSU1JVEVEJyAmJlxuICAgICAgICBhY3R1YWxWYWwgPCAxZTkpXG4gICAgKSB7XG4gICAgICBoYXNBbGxQZXJtaXNzaW9ucyA9IGZhbHNlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGhhc0FsbFBlcm1pc3Npb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUcmFuc2FjdGlvblNwZW5kaW5nTGltaXRSZXNwb25zZShcbiAgc3BlbmRpbmdMaW1pdE9wdGlvbnM6IFBhcnRpYWw8VHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2VPcHRpb25zPlxuKTogVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2Uge1xuICBpZiAoc3BlbmRpbmdMaW1pdE9wdGlvbnMuSXNVbmxpbWl0ZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgSXNVbmxpbWl0ZWQ6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChzcGVuZGluZ0xpbWl0T3B0aW9ucy5HbG9iYWxERVNPTGltaXQ/LnRvU3RyaW5nKCkgPT09ICdVTkxJTUlURUQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0dsb2JhbERFU09MaW1pdCBjYW5ub3QgYmUgdW5saW1pdGVkLiBZb3UgbXVzdCBzcGVjaWZ5IGEgc3BlY2lmaWMgbGltaXQsIG9yIHNldCB0aGUgSXNVbmxpbWl0ZWQgZmxhZyB0byB0cnVlLidcbiAgICApO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBUcmFuc2FjdGlvblNwZW5kaW5nTGltaXRSZXNwb25zZSA9IHt9O1xuXG4gIHdhbGtPYmooXG4gICAgc3BlbmRpbmdMaW1pdE9wdGlvbnMsXG4gICAgKHZhbCwgcGF0aCkgPT4ge1xuICAgICAgc2V0RGVlcFZhbHVlKHJlc3VsdCwgcGF0aCwgdmFsID09PSAnVU5MSU1JVEVEJyA/IDFlOSA6IHZhbCk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuXG4gIGlmIChcbiAgICAhcmVzdWx0LlRyYW5zYWN0aW9uQ291bnRMaW1pdE1hcCB8fFxuICAgIHR5cGVvZiByZXN1bHQuVHJhbnNhY3Rpb25Db3VudExpbWl0TWFwPy5bJ0FVVEhPUklaRV9ERVJJVkVEX0tFWSddID09PVxuICAgICAgJ3VuZGVmaW5lZCdcbiAgKSB7XG4gICAgcmVzdWx0LlRyYW5zYWN0aW9uQ291bnRMaW1pdE1hcCA9IHtcbiAgICAgIC4uLnJlc3VsdC5UcmFuc2FjdGlvbkNvdW50TGltaXRNYXAsXG4gICAgICBBVVRIT1JJWkVfREVSSVZFRF9LRVk6IDEsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHdhbGtPYmooXG4gIG5vZGU6IGFueSxcbiAgY2FsbGJhY2s6ICh2YWw6IGFueSwgcGF0aDogc3RyaW5nW10pID0+IHZvaWQsXG4gIHBhdGg6IHN0cmluZ1tdID0gW11cbikge1xuICBpZiAodHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmIG5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB3YWxrT2JqKG5vZGVba2V5c1tpXV0sIGNhbGxiYWNrLCBwYXRoLmNvbmNhdChrZXlzW2ldKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrKG5vZGUsIHBhdGgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlZXBWYWx1ZShvYmo6IGFueSwgcGF0aDogc3RyaW5nW10pOiBhbnkge1xuICBjb25zdCBjdXJyS2V5ID0gcGF0aFswXTtcblxuICBpZiAoXG4gICAgb2JqID09PSBudWxsIHx8XG4gICAgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHxcbiAgICB0eXBlb2Ygb2JqW2N1cnJLZXldID09PSAndW5kZWZpbmVkJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocGF0aC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gb2JqW2N1cnJLZXldO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXREZWVwVmFsdWUob2JqW2N1cnJLZXldLCBwYXRoLnNsaWNlKDEpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXREZWVwVmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZ1tdLCB2YWx1ZTogYW55KSB7XG4gIGNvbnN0IGN1cnJLZXkgPSBwYXRoWzBdO1xuXG4gIGlmICh0eXBlb2Ygb2JqW2N1cnJLZXldID09PSAndW5kZWZpbmVkJykge1xuICAgIG9ialtjdXJyS2V5XSA9IHt9O1xuICB9XG5cbiAgaWYgKHBhdGgubGVuZ3RoID09PSAxKSB7XG4gICAgb2JqW2N1cnJLZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgc2V0RGVlcFZhbHVlKG9ialtjdXJyS2V5XSwgcGF0aC5zbGljZSgxKSwgdmFsdWUpO1xuICB9XG59XG4iXX0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2lkZW50aXR5L3NyYy9saWIvcGVybWlzc2lvbnMtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsU0FBZ0IsZ0NBQWdDLENBQzlDLG1CQUF3QixFQUN4QixpQkFBc0I7SUFFdEIsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7SUFFN0Isb0VBQW9FO0lBQ3BFLElBQUksaUJBQWlCLGFBQWpCLGlCQUFpQix1QkFBakIsaUJBQWlCLENBQUUsV0FBVyxFQUFFO1FBQ2xDLE9BQU8saUJBQWlCLENBQUM7S0FDMUI7SUFFRCxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDakQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hELElBQ0UsT0FBTyxTQUFTLEtBQUssV0FBVztZQUNoQyxDQUFDLE9BQU8sU0FBUyxLQUFLLFFBQVE7Z0JBQzVCLE9BQU8sV0FBVyxLQUFLLFFBQVE7Z0JBQy9CLFNBQVMsR0FBRyxXQUFXLENBQUM7WUFDMUIsQ0FBQyxPQUFPLFNBQVMsS0FBSyxRQUFRO2dCQUM1QixXQUFXLEtBQUssV0FBVztnQkFDM0IsU0FBUyxHQUFHLEdBQUcsQ0FBQyxFQUNsQjtZQUNBLGlCQUFpQixHQUFHLEtBQUssQ0FBQztTQUMzQjtJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxpQkFBaUIsQ0FBQztBQUMzQixDQUFDO0FBM0JELDRFQTJCQztBQUVELFNBQWdCLHFDQUFxQyxDQUNuRCxvQkFBc0U7O0lBRXRFLElBQUksb0JBQW9CLENBQUMsV0FBVyxFQUFFO1FBQ3BDLE9BQU87WUFDTCxXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFDO0tBQ0g7SUFFRCxJQUFJLENBQUEsTUFBQSxvQkFBb0IsQ0FBQyxlQUFl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O0lBQ3hCLElBQUksT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssV0FBVyxFQUFFO1FBQ3ZDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDbkI7SUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3JCLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7S0FDdEI7U0FBTTtRQUNMLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNsRDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2FjdGlvblNwZW5kaW5nTGltaXRSZXNwb25zZSB9IGZyb20gJ2Rlc28tcHJvdG9jb2wtdHlwZXMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2VPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0cyhcbiAgZXhwZWN0ZWRQZXJtaXNzaW9uczogYW55LFxuICBhY3R1YWxQZXJtaXNzaW9uczogYW55XG4pOiBib29sZWFuIHtcbiAgbGV0IGhhc0FsbFBlcm1pc3Npb25zID0gdHJ1ZTtcblxuICAvLyBpZiB0aGUga2V5IGlzIHVubGltaXRlZCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgYW55dGhpbmcgZWxzZVxuICBpZiAoYWN0dWFsUGVybWlzc2lvbnM/LklzVW5saW1pdGVkKSB7XG4gICAgcmV0dXJuIGhhc0FsbFBlcm1pc3Npb25zO1xuICB9XG5cbiAgd2Fsa09iaihleHBlY3RlZFBlcm1pc3Npb25zLCAoZXhwZWN0ZWRWYWwsIHBhdGgpID0+IHtcbiAgICBjb25zdCBhY3R1YWxWYWwgPSBnZXREZWVwVmFsdWUoYWN0dWFsUGVybWlzc2lvbnMsIHBhdGgpO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBhY3R1YWxWYWwgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICAodHlwZW9mIGFjdHVhbFZhbCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgdHlwZW9mIGV4cGVjdGVkVmFsID09PSAnbnVtYmVyJyAmJlxuICAgICAgICBhY3R1YWxWYWwgPCBleHBlY3RlZFZhbCkgfHxcbiAgICAgICh0eXBlb2YgYWN0dWFsVmFsID09PSAnbnVtYmVyJyAmJlxuICAgICAgICBleHBlY3RlZFZhbCA9PT0gJ1VOTElNSVRFRCcgJiZcbiAgICAgICAgYWN0dWFsVmFsIDwgMWU5KVxuICAgICkge1xuICAgICAgaGFzQWxsUGVybWlzc2lvbnMgPSBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBoYXNBbGxQZXJtaXNzaW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2UoXG4gIHNwZW5kaW5nTGltaXRPcHRpb25zOiBQYXJ0aWFsPFRyYW5zYWN0aW9uU3BlbmRpbmdMaW1pdFJlc3BvbnNlT3B0aW9ucz5cbik6IFRyYW5zYWN0aW9uU3BlbmRpbmdMaW1pdFJlc3BvbnNlIHtcbiAgaWYgKHNwZW5kaW5nTGltaXRPcHRpb25zLklzVW5saW1pdGVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIElzVW5saW1pdGVkOiB0cnVlLFxuICAgIH07XG4gIH1cblxuICBpZiAoc3BlbmRpbmdMaW1pdE9wdGlvbnMuR2xvYmFsREVTT0xpbWl0Py50b1N0cmluZygpID09PSAnVU5MSU1JVEVEJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdHbG9iYWxERVNPTGltaXQgY2Fubm90IGJlIHVubGltaXRlZC4gWW91IG11c3Qgc3BlY2lmeSBhIHNwZWNpZmljIGxpbWl0LCBvciBzZXQgdGhlIElzVW5saW1pdGVkIGZsYWcgdG8gdHJ1ZS4nXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2UgPSB7fTtcblxuICB3YWxrT2JqKFxuICAgIHNwZW5kaW5nTGltaXRPcHRpb25zLFxuICAgICh2YWwsIHBhdGgpID0+IHtcbiAgICAgIHNldERlZXBWYWx1ZShyZXN1bHQsIHBhdGgsIHZhbCA9PT0gJ1VOTElNSVRFRCcgPyAxZTkgOiB2YWwpO1xuICAgIH0sXG4gICAgW11cbiAgKTtcblxuICBpZiAocmVzdWx0LkFjY2Vzc0dyb3VwTGltaXRNYXApIHtcbiAgICByZXN1bHQuQWNjZXNzR3JvdXBMaW1pdE1hcCA9IE9iamVjdC52YWx1ZXMocmVzdWx0LkFjY2Vzc0dyb3VwTGltaXRNYXApO1xuICB9XG4gIGlmIChyZXN1bHQuQWNjZXNzR3JvdXBNZW1iZXJMaW1pdE1hcCkge1xuICAgIHJlc3VsdC5BY2Nlc3NHcm91cE1lbWJlckxpbWl0TWFwID0gT2JqZWN0LnZhbHVlcyhcbiAgICAgIHJlc3VsdC5BY2Nlc3NHcm91cE1lbWJlckxpbWl0TWFwXG4gICAgKTtcbiAgfVxuICBpZiAocmVzdWx0LkFzc29jaWF0aW9uTGltaXRNYXApIHtcbiAgICByZXN1bHQuQXNzb2NpYXRpb25MaW1pdE1hcCA9IE9iamVjdC52YWx1ZXMocmVzdWx0LkFzc29jaWF0aW9uTGltaXRNYXApO1xuICB9XG5cbiAgaWYgKFxuICAgICFyZXN1bHQuVHJhbnNhY3Rpb25Db3VudExpbWl0TWFwIHx8XG4gICAgdHlwZW9mIHJlc3VsdC5UcmFuc2FjdGlvbkNvdW50TGltaXRNYXA/LlsnQVVUSE9SSVpFX0RFUklWRURfS0VZJ10gPT09XG4gICAgICAndW5kZWZpbmVkJ1xuICApIHtcbiAgICByZXN1bHQuVHJhbnNhY3Rpb25Db3VudExpbWl0TWFwID0ge1xuICAgICAgLi4ucmVzdWx0LlRyYW5zYWN0aW9uQ291bnRMaW1pdE1hcCxcbiAgICAgIEFVVEhPUklaRV9ERVJJVkVEX0tFWTogMSxcbiAgICB9O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHdhbGtPYmooXG4gIG5vZGU6IGFueSxcbiAgY2FsbGJhY2s6ICh2YWw6IGFueSwgcGF0aDogc3RyaW5nW10pID0+IHZvaWQsXG4gIHBhdGg6IHN0cmluZ1tdID0gW11cbikge1xuICBpZiAodHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmIG5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB3YWxrT2JqKG5vZGVba2V5c1tpXV0sIGNhbGxiYWNrLCBwYXRoLmNvbmNhdChrZXlzW2ldKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrKG5vZGUsIHBhdGgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlZXBWYWx1ZShvYmo6IGFueSwgcGF0aDogc3RyaW5nW10pOiBhbnkge1xuICBjb25zdCBjdXJyS2V5ID0gcGF0aFswXTtcblxuICBpZiAoXG4gICAgb2JqID09PSBudWxsIHx8XG4gICAgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHxcbiAgICB0eXBlb2Ygb2JqW2N1cnJLZXldID09PSAndW5kZWZpbmVkJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocGF0aC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gb2JqW2N1cnJLZXldO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXREZWVwVmFsdWUob2JqW2N1cnJLZXldLCBwYXRoLnNsaWNlKDEpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXREZWVwVmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZ1tdLCB2YWx1ZTogYW55KSB7XG4gIGNvbnN0IGN1cnJLZXkgPSBwYXRoWzBdO1xuICBpZiAodHlwZW9mIG9ialtjdXJyS2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvYmpbY3VycktleV0gPSB7fTtcbiAgfVxuXG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMSkge1xuICAgIG9ialtjdXJyS2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHNldERlZXBWYWx1ZShvYmpbY3VycktleV0sIHBhdGguc2xpY2UoMSksIHZhbHVlKTtcbiAgfVxufVxuIl19 |
@@ -55,5 +55,11 @@ import { AccessGroupLimitMapItem, AccessGroupMemberLimitMapItem, AssociationLimitMapItem, TransactionSpendingLimitResponse } from 'deso-protocol-types'; | ||
}; | ||
AssociationLimitMap?: AssociationLimitMapItem[]; | ||
AccessGroupLimitMap?: AccessGroupLimitMapItem[]; | ||
AccessGroupMemberLimitMap?: AccessGroupMemberLimitMapItem[]; | ||
AssociationLimitMap?: (Omit<AssociationLimitMapItem, 'OpCount'> & { | ||
OpCount: number | 'UNLIMITED'; | ||
})[]; | ||
AccessGroupLimitMap?: (Omit<AccessGroupLimitMapItem, 'OpCount'> & { | ||
OpCount: number | 'UNLIMITED'; | ||
})[]; | ||
AccessGroupMemberLimitMap?: (Omit<AccessGroupMemberLimitMapItem, 'OpCount'> & { | ||
OpCount: number | 'UNLIMITED'; | ||
})[]; | ||
IsUnlimited?: boolean; | ||
@@ -116,8 +122,9 @@ } | ||
} | ||
export declare type PrimaryDerivedKeyInfo = IdentityDerivePayload & { | ||
transactionSpendingLimits: TransactionSpendingLimitResponse; | ||
IsValid?: boolean; | ||
}; | ||
export declare type StoredUser = { | ||
publicKey: string; | ||
primaryDerivedKey: IdentityDerivePayload & { | ||
transactionSpendingLimits: TransactionSpendingLimitResponse; | ||
IsValid?: boolean; | ||
}; | ||
primaryDerivedKey: PrimaryDerivedKeyInfo; | ||
}; | ||
@@ -155,6 +162,11 @@ export interface IdentityUser { | ||
export interface SubscriberNotification { | ||
event: string; | ||
event: NOTIFICATION_EVENTS; | ||
currentUser: StoredUser | null; | ||
alternateUsers: Record<string, StoredUser> | null; | ||
} | ||
export interface AccessGroupPrivateInfo { | ||
AccessGroupPublicKeyBase58Check: string; | ||
AccessGroupPrivateKeyHex: string; | ||
AccessGroupKeyName: string; | ||
} | ||
export declare enum NOTIFICATION_EVENTS { | ||
@@ -161,0 +173,0 @@ /** |
@@ -76,2 +76,2 @@ "use strict"; | ||
})(NOTIFICATION_EVENTS = exports.NOTIFICATION_EVENTS || (exports.NOTIFICATION_EVENTS = {})); | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2lkZW50aXR5L3NyYy9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBcUxBLElBQVksbUJBb0ZYO0FBcEZELFdBQVksbUJBQW1CO0lBQzdCOztPQUVHO0lBQ0gsOENBQXVCLENBQUE7SUFFdkI7Ozs7T0FJRztJQUNILGtGQUEyRCxDQUFBO0lBRTNEOzs7O09BSUc7SUFDSCw4RUFBdUQsQ0FBQTtJQUV2RDs7T0FFRztJQUNILGdGQUF5RCxDQUFBO0lBRXpEOztPQUVHO0lBQ0gsOEVBQXVELENBQUE7SUFFdkQ7OztPQUdHO0lBQ0gsMEVBQW1ELENBQUE7SUFFbkQ7O09BRUc7SUFDSCxrREFBMkIsQ0FBQTtJQUUzQjs7O09BR0c7SUFDSCw4Q0FBdUIsQ0FBQTtJQUV2Qjs7T0FFRztJQUNILG9EQUE2QixDQUFBO0lBRTdCOzs7T0FHRztJQUNILGdEQUF5QixDQUFBO0lBRXpCOztPQUVHO0lBQ0gsa0VBQTJDLENBQUE7SUFFM0M7OztPQUdHO0lBQ0gsOERBQXVDLENBQUE7SUFFdkM7O09BRUc7SUFDSCw4RUFBdUQsQ0FBQTtJQUV2RDs7O09BR0c7SUFDSCwwRUFBbUQsQ0FBQTtJQUVuRDs7T0FFRztJQUNILGdFQUF5QyxDQUFBO0FBQzNDLENBQUMsRUFwRlcsbUJBQW1CLEdBQW5CLDJCQUFtQixLQUFuQiwyQkFBbUIsUUFvRjlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWNjZXNzR3JvdXBMaW1pdE1hcEl0ZW0sXG4gIEFjY2Vzc0dyb3VwTWVtYmVyTGltaXRNYXBJdGVtLFxuICBBc3NvY2lhdGlvbkxpbWl0TWFwSXRlbSxcbiAgVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2UsXG59IGZyb20gJ2Rlc28tcHJvdG9jb2wtdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBOZXR3b3JrID0gJ21haW5uZXQnIHwgJ3Rlc3RuZXQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UmVzcG9uc2Uge1xuICBzZXJ2aWNlOiAnaWRlbnRpdHknO1xuICBtZXRob2Q6ICdkZXJpdmUnIHwgJ2xvZ2luJyB8ICdpbml0aWFsaXplJztcbiAgcGF5bG9hZD86IGFueTtcbiAgaWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlEZXJpdmVQYXlsb2FkIHtcbiAgZGVyaXZlZFNlZWRIZXg/OiBzdHJpbmc7XG4gIGRlcml2ZWRQdWJsaWNLZXlCYXNlNThDaGVjazogc3RyaW5nO1xuICBwdWJsaWNLZXlCYXNlNThDaGVjazogc3RyaW5nO1xuICBidGNEZXBvc2l0QWRkcmVzczogc3RyaW5nO1xuICBldGhEZXBvc2l0QWRkcmVzczogc3RyaW5nO1xuICBleHBpcmF0aW9uQmxvY2s6IG51bWJlcjtcbiAgbmV0d29yazogTmV0d29yaztcbiAgYWNjZXNzU2lnbmF0dXJlOiBzdHJpbmc7XG4gIGp3dDogc3RyaW5nO1xuICBkZXJpdmVkSnd0OiBzdHJpbmc7XG4gIG1lc3NhZ2luZ1B1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmc7XG4gIG1lc3NhZ2luZ1ByaXZhdGVLZXk6IHN0cmluZztcbiAgbWVzc2FnaW5nS2V5TmFtZTogc3RyaW5nO1xuICBtZXNzYWdpbmdLZXlTaWduYXR1cmU6IHN0cmluZztcbiAgdHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0SGV4OiBzdHJpbmc7XG4gIHNpZ25lZFVwOiBib29sZWFuO1xuICBwdWJsaWNLZXlBZGRlZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblNwZW5kaW5nTGltaXRSZXNwb25zZU9wdGlvbnMge1xuICBHbG9iYWxERVNPTGltaXQ/OiBudW1iZXI7XG4gIFRyYW5zYWN0aW9uQ291bnRMaW1pdE1hcD86IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIHwgJ1VOTElNSVRFRCcgfTtcbiAgQ3JlYXRvckNvaW5PcGVyYXRpb25MaW1pdE1hcD86IHtcbiAgICBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB8ICdVTkxJTUlURUQnIH07XG4gIH07XG4gIERBT0NvaW5PcGVyYXRpb25MaW1pdE1hcD86IHtcbiAgICBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB8ICdVTkxJTUlURUQnIH07XG4gIH07XG4gIE5GVE9wZXJhdGlvbkxpbWl0TWFwPzoge1xuICAgIFtrZXk6IHN0cmluZ106IHsgW2tleTogbnVtYmVyXTogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfCAnVU5MSU1JVEVEJyB9IH07XG4gIH07XG4gIERBT0NvaW5MaW1pdE9yZGVyTGltaXRNYXA/OiB7XG4gICAgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfCAnVU5MSU1JVEVEJyB9O1xuICB9O1xuICBBc3NvY2lhdGlvbkxpbWl0TWFwPzogQXNzb2NpYXRpb25MaW1pdE1hcEl0ZW1bXTtcbiAgQWNjZXNzR3JvdXBMaW1pdE1hcD86IEFjY2Vzc0dyb3VwTGltaXRNYXBJdGVtW107XG4gIEFjY2Vzc0dyb3VwTWVtYmVyTGltaXRNYXA/OiBBY2Nlc3NHcm91cE1lbWJlckxpbWl0TWFwSXRlbVtdO1xuICBJc1VubGltaXRlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIGp3dEFsZ29yaXRobSA9ICdFUzI1NksnIHwgJ0VTMjU2JztcbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBpZGVudGl0eSBkb21haW4uIERlZmF1bHRzIHRvIGh0dHBzOi8vaWRlbnRpdHkuZGVzby5vcmdcbiAgICovXG4gIGlkZW50aXR5VVJJPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBuZXR3b3JrLiBJZiBub3QgcHJvdmlkZWQsIHdlIHdpbGwgYXNzdW1lIG1haW5uZXQuXG4gICAqL1xuICBuZXR3b3JrPzogTmV0d29yaztcblxuICAvKipcbiAgICogVGhlIGRlc28gbm9kZSB1c2VkIGZvciBhbnkgYXBpIGNhbGxzIChnZXQgYmFsYW5jZSwgZGVyaXZlZCBrZXkgYXV0aG9yaXphdGlvbiwgZXRjKVxuICAgKi9cbiAgbm9kZVVSST86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgcmVkaXJlY3QgVVJJLiBJZiBwcm92aWRlZCwgd2UgZG8gYSBoYXJkIHJlZGlyZWN0IHRvIHRoZSBpZGVudGl0eVxuICAgKiBkb21haW4gYW5kIHBhc3MgZGF0YSB2aWEgcXVlcnkgcGFyYW1zIGJhY2sgdG8gdGhlIHByb3ZpZGVkIHVyaS5cbiAgICovXG4gIHJlZGlyZWN0VVJJPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBwZXJtaXNzaW9ucyBhbmQgc3BlbmRpbmcgbGltaXRzIHRoYXQgd2lsbCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXJcbiAgICogZHVyaW5nIGxvZ2luLiBJZiBub3QgcHJvdmlkZWQsIHdlIHdpbGwgYXNzdW1lIG5vIHBlcm1pc3Npb25zLlxuICAgKi9cbiAgc3BlbmRpbmdMaW1pdE9wdGlvbnM/OiBUcmFuc2FjdGlvblNwZW5kaW5nTGltaXRSZXNwb25zZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhcHAgdXNlZCB0byBhdXRob3JpemUgZGVyaXZlZCBrZXlzLiBEZWZhdWx0cyB0byB1bmtub3duLlxuICAgKi9cbiAgYXBwTmFtZT86IHN0cmluZztcblxuICAvLyBTaW5jZSBvdXIga2V5cyBhcmUgZ2VuZXJhdGVkIHVzaW5nIHRoZSBzZWNwMjU2azEgY3VydmUsIHRoZSBjb3JyZWN0XG4gIC8vIEpXVCBhbGdvcml0aG0gaGVhZGVyICpzaG91bGQqIGJlIEVTMjU2Sy5cbiAgLy8gU2VlOiBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjODgxMi5odG1sI25hbWUtam9zZS1hbGdvcml0aG1zLXJlZ2lzdHJhdGlvXG4gIC8vXG4gIC8vIEhPV0VWRVIsIHRoZSBiYWNrZW5kIGp3dCBsaWIgdXNlZCBieSBkZXNvIGZvdW5kYXRpb24gLVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ29sYW5nLWp3dC9qd3QgLSAoYXMgd2VsbCBhcyBtYW55IG90aGVyIGp3dCBsaWJyYXJpZXMpXG4gIC8vIGRvIG5vdCBzdXBwb3J0IEVTMjU2Sy4gU28gaW5zdGVhZCwgd2UgZGVmYXVsdCB0byB0aGUgbW9yZSB3aWRlbHkgc3VwcG9ydGVkIEVTMjU2IGFsZ28sXG4gIC8vIHdoaWNoIGNhbiBzdGlsbCB3b3JrIGZvciB2ZXJpZnlpbmcgb3VyIHNpZ25hdHVyZXMuIEJ1dCBpZiBhIGNvbnN1bWVyIG9mIHRoaXMgbGliIGlzIHVzaW5nIGFcbiAgLy8gand0IGxpYiB0aGF0IHN1cHBvcnRzIEVTMjU2SyB0aGV5IGNhbiBzcGVjaWZ5IHRoYXQgaGVyZS5cbiAgLy8gU2VlIHRoaXMgZ2l0aHViIGlzc3VlXG4gIC8vIGZvciBtb3JlIGNvbnRleHQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hdXRoMC9ub2RlLWpzb253ZWJ0b2tlbi9pc3N1ZXMvODYyXG4gIC8vIElmIEVTMjU2SyBpcyBldmVyIHN1cHBvcnRlZCBieSB0aGUgYmFja2VuZCBqd3QgbGliLCB3ZSBzaG91bGQgY2hhbmdlIHRoaXMuXG4gIGp3dEFsZ29yaXRobT86IGp3dEFsZ29yaXRobTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBUElQcm92aWRlciB7XG4gIHBvc3Q6ICh1cmw6IHN0cmluZywgZGF0YTogYW55KSA9PiBQcm9taXNlPGFueT47XG4gIGdldDogKHVybDogc3RyaW5nKSA9PiBQcm9taXNlPGFueT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93UHJvdmlkZXIge1xuICBsb2NhdGlvbjogeyBzZWFyY2g6IHN0cmluZzsgcGF0aG5hbWU6IHN0cmluZzsgaHJlZjogc3RyaW5nIH07XG4gIGhpc3Rvcnk6IHsgcmVwbGFjZVN0YXRlOiAoc3RhdGU6IGFueSwgdGl0bGU6IHN0cmluZywgdXJsOiBzdHJpbmcpID0+IHZvaWQgfTtcbiAgbG9jYWxTdG9yYWdlOiB7XG4gICAgZ2V0SXRlbTogKGtleTogc3RyaW5nKSA9PiBzdHJpbmcgfCBudWxsO1xuICAgIHNldEl0ZW06IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgICByZW1vdmVJdGVtOiAoa2V5OiBzdHJpbmcpID0+IHZvaWQ7XG4gIH07XG4gIG9wZW46IChcbiAgICB1cmw6IHN0cmluZyxcbiAgICB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIG9wdGlvbnM6IHN0cmluZ1xuICApID0+IFdpbmRvdyB8IG51bGw7XG4gIGFkZEV2ZW50TGlzdGVuZXI6IChldmVudDogc3RyaW5nLCBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7XG4gIHJlbW92ZUV2ZW50TGlzdGVuZXI6IChldmVudDogc3RyaW5nLCBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5PcHRpb25zIHtcbiAgZ2V0RnJlZURlc286IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFN0b3JlZFVzZXIgPSB7XG4gIHB1YmxpY0tleTogc3RyaW5nO1xuICBwcmltYXJ5RGVyaXZlZEtleTogSWRlbnRpdHlEZXJpdmVQYXlsb2FkICYge1xuICAgIHRyYW5zYWN0aW9uU3BlbmRpbmdMaW1pdHM6IFRyYW5zYWN0aW9uU3BlbmRpbmdMaW1pdFJlc3BvbnNlO1xuICAgIElzVmFsaWQ/OiBib29sZWFuO1xuICB9O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVVzZXIge1xuICBhY2Nlc3NMZXZlbDogbnVtYmVyO1xuICBhY2Nlc3NMZXZlbEhtYWM6IHN0cmluZztcbiAgYnRjRGVwb3NpdEFkZHJlc3M6IHN0cmluZztcbiAgZW5jcnlwdGVkU2VlZEhleDogc3RyaW5nO1xuICBldGhEZXBvc2l0QWRkcmVzczogc3RyaW5nO1xuICBkZXJpdmVkUHVibGljS2V5QmFzZTU4Q2hlY2s/OiBzdHJpbmc7XG4gIGhhc0V4dHJhVGV4dDogYm9vbGVhbjtcbiAgbmV0d29yazogc3RyaW5nO1xuICB2ZXJzaW9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlMb2dpblBheWxvYWQge1xuICB1c2VyczogUmVjb3JkPHN0cmluZywgSWRlbnRpdHlVc2VyPjtcbiAgcHVibGljS2V5QWRkZWQ6IHN0cmluZztcbiAgcGhvbmVOdW1iZXJTdWNjZXNzOiBib29sZWFuO1xuICBzaWduZWRVcDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVN0YXRlIHtcbiAgY3VycmVudFVzZXI6IFN0b3JlZFVzZXIgfCBudWxsO1xuICBhbHRlcm5hdGVVc2VyczogUmVjb3JkPHN0cmluZywgU3RvcmVkVXNlcj4gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlZmVycmVkIHtcbiAgcmVzb2x2ZTogKGFyZ3M6IGFueSkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoYXJnczogYW55KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEtleVBhaXIge1xuICBzZWVkSGV4OiBzdHJpbmc7XG4gIHByaXZhdGU6IFVpbnQ4QXJyYXk7XG4gIHB1YmxpYzogVWludDhBcnJheTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJzY3JpYmVyTm90aWZpY2F0aW9uIHtcbiAgZXZlbnQ6IHN0cmluZztcbiAgY3VycmVudFVzZXI6IFN0b3JlZFVzZXIgfCBudWxsO1xuICBhbHRlcm5hdGVVc2VyczogUmVjb3JkPHN0cmluZywgU3RvcmVkVXNlcj4gfCBudWxsO1xufVxuXG5leHBvcnQgZW51bSBOT1RJRklDQVRJT05fRVZFTlRTIHtcbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgY29uc3VtaW5nIGFwcCBpbml0aWFsbHkgc3Vic2NyaWJlcyB0byBpZGVudGl0eS5cbiAgICovXG4gIFNVQlNDUklCRSA9ICdTVUJTQ1JJQkUnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGFuIGludGVybWVkaWF0ZSBldmVudCBmaXJlZCBBRlRFUiB0aGUgdXNlciBjb21wbGV0ZXMgYW4gaWRlbnRpdHkgZmxvd1xuICAgKiB0aGF0IHJlcXVpcmVzIGEgZGVyaXZlZCBrZXkgYXV0aG9yaXphdGlvbi4gVGhpcyBldmVudCBpcyBmaXJlZCBCRUZPUkUgdGhlXG4gICAqIHJlcXVlc3QgdG8gYXV0aG9yaXplIHRoZSBkZXJpdmVkIGtleSBpcyBtYWRlLlxuICAgKi9cbiAgQVVUSE9SSVpFX0RFUklWRURfS0VZX1NUQVJUID0gJ0FVVEhPUklaRV9ERVJJVkVEX0tFWV9TVEFSVCcsXG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYW4gaW50ZXJtZWRpYXRlIGV2ZW50IGZpcmVkIEFGVEVSIHRoZSB1c2VyIGNvbXBsZXRlcyBhbiBpZGVudGl0eVxuICAgKiBmbG93IHRoYXQgcmVxdWlyZXMgYSBkZXJpdmVkIGtleSBhdXRob3JpemF0aW9uLiBUaGlzIGV2ZW50IGlzIGZpcmVkIEFGVEVSXG4gICAqIHRoZSByZXF1ZXN0IHRvIGF1dGhvcml6ZSB0aGUgZGVyaXZlZCBrZXkgaXMgbWFkZS5cbiAgICovXG4gIEFVVEhPUklaRV9ERVJJVkVEX0tFWV9FTkQgPSAnQVVUSE9SSVpFX0RFUklWRURfS0VZX0VORCcsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgaWYgdGhlIHJlcXVlc3QgdG8gYXV0aG9yaXplIGEgZGVyaXZlZCBrZXkgZmFpbHMuXG4gICAqL1xuICBBVVRIT1JJWkVfREVSSVZFRF9LRVlfRkFJTCA9ICdBVVRIT1JJWkVfREVSSVZFRF9LRVlfRkFJTCcsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBvcGVucyB0aGUgcGVybWlzc2lvbnMgYXBwcm92YWwgcG9wdXAuXG4gICAqL1xuICBSRVFVRVNUX1BFUk1JU1NJT05TX1NUQVJUID0gJ1JFUVVFU1RfUEVSTUlTU0lPTlNfU1RBUlQnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgY29tcGxldGVzIGFwcHJvdmluZyBwZXJtaXNzaW9ucywgYW5kXG4gICAqIGNvbWVzIEFGVEVSIHRoZSBpbnRlcm1lZGlhdGUgQVVUSE9SSVpFX0RFUklWRURfS0VZIGV2ZW50cy5cbiAgICovXG4gIFJFUVVFU1RfUEVSTUlTU0lPTlNfRU5EID0gJ1JFUVVFU1RfUEVSTUlTU0lPTlNfRU5EJyxcblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSB1c2VyIG9wZW5zIHRoZSBsb2dpbiBwb3B1cC5cbiAgICovXG4gIExPR0lOX1NUQVJUID0gJ0xPR0lOX1NUQVJUJyxcblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSB1c2VyIGNvbXBsZXRlcyBsb2dnaW5nIGluLCBhbmRcbiAgICogY29tZXMgQUZURVIgdGhlIGludGVybWVkaWF0ZSBBVVRIT1JJWkVfREVSSVZFRF9LRVkgZXZlbnRzLlxuICAgKi9cbiAgTE9HSU5fRU5EID0gJ0xPR0lOX0VORCcsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBvcGVucyB0aGUgbG9nb3V0IHBvcHVwLlxuICAgKi9cbiAgTE9HT1VUX1NUQVJUID0gJ0xPR09VVF9TVEFSVCcsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBjb21wbGV0ZXMgbG9nZ2luZyBvdXQsIGFuZFxuICAgKiBjb21lcyBBRlRFUiB0aGUgaW50ZXJtZWRpYXRlIEFVVEhPUklaRV9ERVJJVkVEX0tFWSBldmVudHMuXG4gICAqL1xuICBMT0dPVVRfRU5EID0gJ0xPR09VVF9FTkQnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgb3BlbnMgdGhlIGdldCBkZXNvIHBvcHVwLlxuICAgKi9cbiAgR0VUX0ZSRUVfREVTT19TVEFSVCA9ICdHRVRfRlJFRV9ERVNPX1NUQVJUJyxcblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSB1c2VyIGNvbXBsZXRlcyB0aGUgZ2V0IGRlc28gZmxvdywgYW5kIGNvbWVzXG4gICAqIEFGVEVSIHRoZSBpbnRlcm1lZGlhdGUgQVVUSE9SSVpFX0RFUklWRURfS0VZIGV2ZW50cy5cbiAgICovXG4gIEdFVF9GUkVFX0RFU09fRU5EID0gJ0dFVF9GUkVFX0RFU09fRU5EJyxcblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSB1c2VyIG9wZW5zIHRoZSB2ZXJpZnkgcGhvbmUgbnVtYmVyIHBvcHVwLlxuICAgKi9cbiAgVkVSSUZZX1BIT05FX05VTUJFUl9TVEFSVCA9ICdWRVJJRllfUEhPTkVfTlVNQkVSX1NUQVJUJyxcblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSB1c2VyIGNvbXBsZXRlcyB0aGUgdmVyaWZ5IHBob25lIG51bWJlciBmbG93LFxuICAgKiBhbmQgY29tZXMgQUZURVIgdGhlIGludGVybWVkaWF0ZSBBVVRIT1JJWkVfREVSSVZFRF9LRVkgZXZlbnRzLlxuICAgKi9cbiAgVkVSSUZZX1BIT05FX05VTUJFUl9FTkQgPSAnVkVSSUZZX1BIT05FX05VTUJFUl9FTkQnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIGNvbnN1bWluZyBhcHAgc3dpdGNoZXMgdGhlIGFjdGl2ZSB1c2VyLlxuICAgKi9cbiAgQ0hBTkdFX0FDVElWRV9VU0VSID0gJ0NIQU5HRV9BQ1RJVkVfVVNFUicsXG59XG4iXX0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2lkZW50aXR5L3NyYy9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBb01BLElBQVksbUJBb0ZYO0FBcEZELFdBQVksbUJBQW1CO0lBQzdCOztPQUVHO0lBQ0gsOENBQXVCLENBQUE7SUFFdkI7Ozs7T0FJRztJQUNILGtGQUEyRCxDQUFBO0lBRTNEOzs7O09BSUc7SUFDSCw4RUFBdUQsQ0FBQTtJQUV2RDs7T0FFRztJQUNILGdGQUF5RCxDQUFBO0lBRXpEOztPQUVHO0lBQ0gsOEVBQXVELENBQUE7SUFFdkQ7OztPQUdHO0lBQ0gsMEVBQW1ELENBQUE7SUFFbkQ7O09BRUc7SUFDSCxrREFBMkIsQ0FBQTtJQUUzQjs7O09BR0c7SUFDSCw4Q0FBdUIsQ0FBQTtJQUV2Qjs7T0FFRztJQUNILG9EQUE2QixDQUFBO0lBRTdCOzs7T0FHRztJQUNILGdEQUF5QixDQUFBO0lBRXpCOztPQUVHO0lBQ0gsa0VBQTJDLENBQUE7SUFFM0M7OztPQUdHO0lBQ0gsOERBQXVDLENBQUE7SUFFdkM7O09BRUc7SUFDSCw4RUFBdUQsQ0FBQTtJQUV2RDs7O09BR0c7SUFDSCwwRUFBbUQsQ0FBQTtJQUVuRDs7T0FFRztJQUNILGdFQUF5QyxDQUFBO0FBQzNDLENBQUMsRUFwRlcsbUJBQW1CLEdBQW5CLDJCQUFtQixLQUFuQiwyQkFBbUIsUUFvRjlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWNjZXNzR3JvdXBMaW1pdE1hcEl0ZW0sXG4gIEFjY2Vzc0dyb3VwTWVtYmVyTGltaXRNYXBJdGVtLFxuICBBc3NvY2lhdGlvbkxpbWl0TWFwSXRlbSxcbiAgVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2UsXG59IGZyb20gJ2Rlc28tcHJvdG9jb2wtdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBOZXR3b3JrID0gJ21haW5uZXQnIHwgJ3Rlc3RuZXQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UmVzcG9uc2Uge1xuICBzZXJ2aWNlOiAnaWRlbnRpdHknO1xuICBtZXRob2Q6ICdkZXJpdmUnIHwgJ2xvZ2luJyB8ICdpbml0aWFsaXplJztcbiAgcGF5bG9hZD86IGFueTtcbiAgaWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlEZXJpdmVQYXlsb2FkIHtcbiAgZGVyaXZlZFNlZWRIZXg/OiBzdHJpbmc7XG4gIGRlcml2ZWRQdWJsaWNLZXlCYXNlNThDaGVjazogc3RyaW5nO1xuICBwdWJsaWNLZXlCYXNlNThDaGVjazogc3RyaW5nO1xuICBidGNEZXBvc2l0QWRkcmVzczogc3RyaW5nO1xuICBldGhEZXBvc2l0QWRkcmVzczogc3RyaW5nO1xuICBleHBpcmF0aW9uQmxvY2s6IG51bWJlcjtcbiAgbmV0d29yazogTmV0d29yaztcbiAgYWNjZXNzU2lnbmF0dXJlOiBzdHJpbmc7XG4gIGp3dDogc3RyaW5nO1xuICBkZXJpdmVkSnd0OiBzdHJpbmc7XG4gIG1lc3NhZ2luZ1B1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmc7XG4gIG1lc3NhZ2luZ1ByaXZhdGVLZXk6IHN0cmluZztcbiAgbWVzc2FnaW5nS2V5TmFtZTogc3RyaW5nO1xuICBtZXNzYWdpbmdLZXlTaWduYXR1cmU6IHN0cmluZztcbiAgdHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0SGV4OiBzdHJpbmc7XG4gIHNpZ25lZFVwOiBib29sZWFuO1xuICBwdWJsaWNLZXlBZGRlZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblNwZW5kaW5nTGltaXRSZXNwb25zZU9wdGlvbnMge1xuICBHbG9iYWxERVNPTGltaXQ/OiBudW1iZXI7XG4gIFRyYW5zYWN0aW9uQ291bnRMaW1pdE1hcD86IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIHwgJ1VOTElNSVRFRCcgfTtcbiAgQ3JlYXRvckNvaW5PcGVyYXRpb25MaW1pdE1hcD86IHtcbiAgICBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB8ICdVTkxJTUlURUQnIH07XG4gIH07XG4gIERBT0NvaW5PcGVyYXRpb25MaW1pdE1hcD86IHtcbiAgICBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB8ICdVTkxJTUlURUQnIH07XG4gIH07XG4gIE5GVE9wZXJhdGlvbkxpbWl0TWFwPzoge1xuICAgIFtrZXk6IHN0cmluZ106IHsgW2tleTogbnVtYmVyXTogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfCAnVU5MSU1JVEVEJyB9IH07XG4gIH07XG4gIERBT0NvaW5MaW1pdE9yZGVyTGltaXRNYXA/OiB7XG4gICAgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfCAnVU5MSU1JVEVEJyB9O1xuICB9O1xuICBBc3NvY2lhdGlvbkxpbWl0TWFwPzogKE9taXQ8QXNzb2NpYXRpb25MaW1pdE1hcEl0ZW0sICdPcENvdW50Jz4gJiB7XG4gICAgT3BDb3VudDogbnVtYmVyIHwgJ1VOTElNSVRFRCc7XG4gIH0pW107XG4gIEFjY2Vzc0dyb3VwTGltaXRNYXA/OiAoT21pdDxBY2Nlc3NHcm91cExpbWl0TWFwSXRlbSwgJ09wQ291bnQnPiAmIHtcbiAgICBPcENvdW50OiBudW1iZXIgfCAnVU5MSU1JVEVEJztcbiAgfSlbXTtcbiAgQWNjZXNzR3JvdXBNZW1iZXJMaW1pdE1hcD86IChPbWl0PFxuICAgIEFjY2Vzc0dyb3VwTWVtYmVyTGltaXRNYXBJdGVtLFxuICAgICdPcENvdW50J1xuICA+ICYgeyBPcENvdW50OiBudW1iZXIgfCAnVU5MSU1JVEVEJyB9KVtdO1xuICBJc1VubGltaXRlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIGp3dEFsZ29yaXRobSA9ICdFUzI1NksnIHwgJ0VTMjU2JztcbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBpZGVudGl0eSBkb21haW4uIERlZmF1bHRzIHRvIGh0dHBzOi8vaWRlbnRpdHkuZGVzby5vcmdcbiAgICovXG4gIGlkZW50aXR5VVJJPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBuZXR3b3JrLiBJZiBub3QgcHJvdmlkZWQsIHdlIHdpbGwgYXNzdW1lIG1haW5uZXQuXG4gICAqL1xuICBuZXR3b3JrPzogTmV0d29yaztcblxuICAvKipcbiAgICogVGhlIGRlc28gbm9kZSB1c2VkIGZvciBhbnkgYXBpIGNhbGxzIChnZXQgYmFsYW5jZSwgZGVyaXZlZCBrZXkgYXV0aG9yaXphdGlvbiwgZXRjKVxuICAgKi9cbiAgbm9kZVVSST86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgcmVkaXJlY3QgVVJJLiBJZiBwcm92aWRlZCwgd2UgZG8gYSBoYXJkIHJlZGlyZWN0IHRvIHRoZSBpZGVudGl0eVxuICAgKiBkb21haW4gYW5kIHBhc3MgZGF0YSB2aWEgcXVlcnkgcGFyYW1zIGJhY2sgdG8gdGhlIHByb3ZpZGVkIHVyaS5cbiAgICovXG4gIHJlZGlyZWN0VVJJPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBwZXJtaXNzaW9ucyBhbmQgc3BlbmRpbmcgbGltaXRzIHRoYXQgd2lsbCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXJcbiAgICogZHVyaW5nIGxvZ2luLiBJZiBub3QgcHJvdmlkZWQsIHdlIHdpbGwgYXNzdW1lIG5vIHBlcm1pc3Npb25zLlxuICAgKi9cbiAgc3BlbmRpbmdMaW1pdE9wdGlvbnM/OiBUcmFuc2FjdGlvblNwZW5kaW5nTGltaXRSZXNwb25zZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhcHAgdXNlZCB0byBhdXRob3JpemUgZGVyaXZlZCBrZXlzLiBEZWZhdWx0cyB0byB1bmtub3duLlxuICAgKi9cbiAgYXBwTmFtZT86IHN0cmluZztcblxuICAvLyBTaW5jZSBvdXIga2V5cyBhcmUgZ2VuZXJhdGVkIHVzaW5nIHRoZSBzZWNwMjU2azEgY3VydmUsIHRoZSBjb3JyZWN0XG4gIC8vIEpXVCBhbGdvcml0aG0gaGVhZGVyICpzaG91bGQqIGJlIEVTMjU2Sy5cbiAgLy8gU2VlOiBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjODgxMi5odG1sI25hbWUtam9zZS1hbGdvcml0aG1zLXJlZ2lzdHJhdGlvXG4gIC8vXG4gIC8vIEhPV0VWRVIsIHRoZSBiYWNrZW5kIGp3dCBsaWIgdXNlZCBieSBkZXNvIGZvdW5kYXRpb24gLVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ29sYW5nLWp3dC9qd3QgLSAoYXMgd2VsbCBhcyBtYW55IG90aGVyIGp3dCBsaWJyYXJpZXMpXG4gIC8vIGRvIG5vdCBzdXBwb3J0IEVTMjU2Sy4gU28gaW5zdGVhZCwgd2UgZGVmYXVsdCB0byB0aGUgbW9yZSB3aWRlbHkgc3VwcG9ydGVkIEVTMjU2IGFsZ28sXG4gIC8vIHdoaWNoIGNhbiBzdGlsbCB3b3JrIGZvciB2ZXJpZnlpbmcgb3VyIHNpZ25hdHVyZXMuIEJ1dCBpZiBhIGNvbnN1bWVyIG9mIHRoaXMgbGliIGlzIHVzaW5nIGFcbiAgLy8gand0IGxpYiB0aGF0IHN1cHBvcnRzIEVTMjU2SyB0aGV5IGNhbiBzcGVjaWZ5IHRoYXQgaGVyZS5cbiAgLy8gU2VlIHRoaXMgZ2l0aHViIGlzc3VlXG4gIC8vIGZvciBtb3JlIGNvbnRleHQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hdXRoMC9ub2RlLWpzb253ZWJ0b2tlbi9pc3N1ZXMvODYyXG4gIC8vIElmIEVTMjU2SyBpcyBldmVyIHN1cHBvcnRlZCBieSB0aGUgYmFja2VuZCBqd3QgbGliLCB3ZSBzaG91bGQgY2hhbmdlIHRoaXMuXG4gIGp3dEFsZ29yaXRobT86IGp3dEFsZ29yaXRobTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBUElQcm92aWRlciB7XG4gIHBvc3Q6ICh1cmw6IHN0cmluZywgZGF0YTogYW55KSA9PiBQcm9taXNlPGFueT47XG4gIGdldDogKHVybDogc3RyaW5nKSA9PiBQcm9taXNlPGFueT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93UHJvdmlkZXIge1xuICBsb2NhdGlvbjogeyBzZWFyY2g6IHN0cmluZzsgcGF0aG5hbWU6IHN0cmluZzsgaHJlZjogc3RyaW5nIH07XG4gIGhpc3Rvcnk6IHsgcmVwbGFjZVN0YXRlOiAoc3RhdGU6IGFueSwgdGl0bGU6IHN0cmluZywgdXJsOiBzdHJpbmcpID0+IHZvaWQgfTtcbiAgbG9jYWxTdG9yYWdlOiB7XG4gICAgZ2V0SXRlbTogKGtleTogc3RyaW5nKSA9PiBzdHJpbmcgfCBudWxsO1xuICAgIHNldEl0ZW06IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgICByZW1vdmVJdGVtOiAoa2V5OiBzdHJpbmcpID0+IHZvaWQ7XG4gIH07XG4gIG9wZW46IChcbiAgICB1cmw6IHN0cmluZyxcbiAgICB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIG9wdGlvbnM6IHN0cmluZ1xuICApID0+IFdpbmRvdyB8IG51bGw7XG4gIGFkZEV2ZW50TGlzdGVuZXI6IChldmVudDogc3RyaW5nLCBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7XG4gIHJlbW92ZUV2ZW50TGlzdGVuZXI6IChldmVudDogc3RyaW5nLCBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5PcHRpb25zIHtcbiAgZ2V0RnJlZURlc286IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFByaW1hcnlEZXJpdmVkS2V5SW5mbyA9IElkZW50aXR5RGVyaXZlUGF5bG9hZCAmIHtcbiAgdHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0czogVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2U7XG4gIElzVmFsaWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgU3RvcmVkVXNlciA9IHtcbiAgcHVibGljS2V5OiBzdHJpbmc7XG4gIHByaW1hcnlEZXJpdmVkS2V5OiBQcmltYXJ5RGVyaXZlZEtleUluZm87XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5VXNlciB7XG4gIGFjY2Vzc0xldmVsOiBudW1iZXI7XG4gIGFjY2Vzc0xldmVsSG1hYzogc3RyaW5nO1xuICBidGNEZXBvc2l0QWRkcmVzczogc3RyaW5nO1xuICBlbmNyeXB0ZWRTZWVkSGV4OiBzdHJpbmc7XG4gIGV0aERlcG9zaXRBZGRyZXNzOiBzdHJpbmc7XG4gIGRlcml2ZWRQdWJsaWNLZXlCYXNlNThDaGVjaz86IHN0cmluZztcbiAgaGFzRXh0cmFUZXh0OiBib29sZWFuO1xuICBuZXR3b3JrOiBzdHJpbmc7XG4gIHZlcnNpb246IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eUxvZ2luUGF5bG9hZCB7XG4gIHVzZXJzOiBSZWNvcmQ8c3RyaW5nLCBJZGVudGl0eVVzZXI+O1xuICBwdWJsaWNLZXlBZGRlZDogc3RyaW5nO1xuICBwaG9uZU51bWJlclN1Y2Nlc3M6IGJvb2xlYW47XG4gIHNpZ25lZFVwOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5U3RhdGUge1xuICBjdXJyZW50VXNlcjogU3RvcmVkVXNlciB8IG51bGw7XG4gIGFsdGVybmF0ZVVzZXJzOiBSZWNvcmQ8c3RyaW5nLCBTdG9yZWRVc2VyPiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVmZXJyZWQge1xuICByZXNvbHZlOiAoYXJnczogYW55KSA9PiB2b2lkO1xuICByZWplY3Q6IChhcmdzOiBhbnkpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2V5UGFpciB7XG4gIHNlZWRIZXg6IHN0cmluZztcbiAgcHJpdmF0ZTogVWludDhBcnJheTtcbiAgcHVibGljOiBVaW50OEFycmF5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YnNjcmliZXJOb3RpZmljYXRpb24ge1xuICBldmVudDogTk9USUZJQ0FUSU9OX0VWRU5UUztcbiAgY3VycmVudFVzZXI6IFN0b3JlZFVzZXIgfCBudWxsO1xuICBhbHRlcm5hdGVVc2VyczogUmVjb3JkPHN0cmluZywgU3RvcmVkVXNlcj4gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFjY2Vzc0dyb3VwUHJpdmF0ZUluZm8ge1xuICBBY2Nlc3NHcm91cFB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmc7XG4gIEFjY2Vzc0dyb3VwUHJpdmF0ZUtleUhleDogc3RyaW5nO1xuICBBY2Nlc3NHcm91cEtleU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gTk9USUZJQ0FUSU9OX0VWRU5UUyB7XG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIGNvbnN1bWluZyBhcHAgaW5pdGlhbGx5IHN1YnNjcmliZXMgdG8gaWRlbnRpdHkuXG4gICAqL1xuICBTVUJTQ1JJQkUgPSAnU1VCU0NSSUJFJyxcblxuICAvKipcbiAgICogVGhpcyBpcyBhbiBpbnRlcm1lZGlhdGUgZXZlbnQgZmlyZWQgQUZURVIgdGhlIHVzZXIgY29tcGxldGVzIGFuIGlkZW50aXR5IGZsb3dcbiAgICogdGhhdCByZXF1aXJlcyBhIGRlcml2ZWQga2V5IGF1dGhvcml6YXRpb24uIFRoaXMgZXZlbnQgaXMgZmlyZWQgQkVGT1JFIHRoZVxuICAgKiByZXF1ZXN0IHRvIGF1dGhvcml6ZSB0aGUgZGVyaXZlZCBrZXkgaXMgbWFkZS5cbiAgICovXG4gIEFVVEhPUklaRV9ERVJJVkVEX0tFWV9TVEFSVCA9ICdBVVRIT1JJWkVfREVSSVZFRF9LRVlfU1RBUlQnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGFuIGludGVybWVkaWF0ZSBldmVudCBmaXJlZCBBRlRFUiB0aGUgdXNlciBjb21wbGV0ZXMgYW4gaWRlbnRpdHlcbiAgICogZmxvdyB0aGF0IHJlcXVpcmVzIGEgZGVyaXZlZCBrZXkgYXV0aG9yaXphdGlvbi4gVGhpcyBldmVudCBpcyBmaXJlZCBBRlRFUlxuICAgKiB0aGUgcmVxdWVzdCB0byBhdXRob3JpemUgdGhlIGRlcml2ZWQga2V5IGlzIG1hZGUuXG4gICAqL1xuICBBVVRIT1JJWkVfREVSSVZFRF9LRVlfRU5EID0gJ0FVVEhPUklaRV9ERVJJVkVEX0tFWV9FTkQnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIGlmIHRoZSByZXF1ZXN0IHRvIGF1dGhvcml6ZSBhIGRlcml2ZWQga2V5IGZhaWxzLlxuICAgKi9cbiAgQVVUSE9SSVpFX0RFUklWRURfS0VZX0ZBSUwgPSAnQVVUSE9SSVpFX0RFUklWRURfS0VZX0ZBSUwnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgb3BlbnMgdGhlIHBlcm1pc3Npb25zIGFwcHJvdmFsIHBvcHVwLlxuICAgKi9cbiAgUkVRVUVTVF9QRVJNSVNTSU9OU19TVEFSVCA9ICdSRVFVRVNUX1BFUk1JU1NJT05TX1NUQVJUJyxcblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSB1c2VyIGNvbXBsZXRlcyBhcHByb3ZpbmcgcGVybWlzc2lvbnMsIGFuZFxuICAgKiBjb21lcyBBRlRFUiB0aGUgaW50ZXJtZWRpYXRlIEFVVEhPUklaRV9ERVJJVkVEX0tFWSBldmVudHMuXG4gICAqL1xuICBSRVFVRVNUX1BFUk1JU1NJT05TX0VORCA9ICdSRVFVRVNUX1BFUk1JU1NJT05TX0VORCcsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBvcGVucyB0aGUgbG9naW4gcG9wdXAuXG4gICAqL1xuICBMT0dJTl9TVEFSVCA9ICdMT0dJTl9TVEFSVCcsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBjb21wbGV0ZXMgbG9nZ2luZyBpbiwgYW5kXG4gICAqIGNvbWVzIEFGVEVSIHRoZSBpbnRlcm1lZGlhdGUgQVVUSE9SSVpFX0RFUklWRURfS0VZIGV2ZW50cy5cbiAgICovXG4gIExPR0lOX0VORCA9ICdMT0dJTl9FTkQnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgb3BlbnMgdGhlIGxvZ291dCBwb3B1cC5cbiAgICovXG4gIExPR09VVF9TVEFSVCA9ICdMT0dPVVRfU1RBUlQnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgY29tcGxldGVzIGxvZ2dpbmcgb3V0LCBhbmRcbiAgICogY29tZXMgQUZURVIgdGhlIGludGVybWVkaWF0ZSBBVVRIT1JJWkVfREVSSVZFRF9LRVkgZXZlbnRzLlxuICAgKi9cbiAgTE9HT1VUX0VORCA9ICdMT0dPVVRfRU5EJyxcblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSB1c2VyIG9wZW5zIHRoZSBnZXQgZGVzbyBwb3B1cC5cbiAgICovXG4gIEdFVF9GUkVFX0RFU09fU1RBUlQgPSAnR0VUX0ZSRUVfREVTT19TVEFSVCcsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBjb21wbGV0ZXMgdGhlIGdldCBkZXNvIGZsb3csIGFuZCBjb21lc1xuICAgKiBBRlRFUiB0aGUgaW50ZXJtZWRpYXRlIEFVVEhPUklaRV9ERVJJVkVEX0tFWSBldmVudHMuXG4gICAqL1xuICBHRVRfRlJFRV9ERVNPX0VORCA9ICdHRVRfRlJFRV9ERVNPX0VORCcsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBvcGVucyB0aGUgdmVyaWZ5IHBob25lIG51bWJlciBwb3B1cC5cbiAgICovXG4gIFZFUklGWV9QSE9ORV9OVU1CRVJfU1RBUlQgPSAnVkVSSUZZX1BIT05FX05VTUJFUl9TVEFSVCcsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBjb21wbGV0ZXMgdGhlIHZlcmlmeSBwaG9uZSBudW1iZXIgZmxvdyxcbiAgICogYW5kIGNvbWVzIEFGVEVSIHRoZSBpbnRlcm1lZGlhdGUgQVVUSE9SSVpFX0RFUklWRURfS0VZIGV2ZW50cy5cbiAgICovXG4gIFZFUklGWV9QSE9ORV9OVU1CRVJfRU5EID0gJ1ZFUklGWV9QSE9ORV9OVU1CRVJfRU5EJyxcblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSBjb25zdW1pbmcgYXBwIHN3aXRjaGVzIHRoZSBhY3RpdmUgdXNlci5cbiAgICovXG4gIENIQU5HRV9BQ1RJVkVfVVNFUiA9ICdDSEFOR0VfQUNUSVZFX1VTRVInLFxufVxuIl19 |
Sorry, the diff of this file is too big to display
289392
2389
191
+ Addeddeso-protocol-types@0.5.7(transitive)
- Removeddeso-protocol-types@0.5.0(transitive)
Updateddeso-protocol-types@0.5.7