Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Socket
Sign inDemoInstall

@bitgo/utxo-lib

Package Overview
Dependencies
Maintainers
4
Versions
171
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@bitgo/utxo-lib - npm Package Compare versions

Comparing version 2.2.0 to 2.2.1-rc.0

dist/src/forks/zcash/bufferutils.js

1

dist/src/bitgo/index.d.ts

@@ -10,2 +10,3 @@ export * as keyutil from './keyutil';

export * from './dash';
export * from './types';
//# sourceMappingURL=index.d.ts.map

3

dist/src/bitgo/index.js

@@ -23,2 +23,3 @@ "use strict";

__exportStar(require("./dash"), exports);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYml0Z28vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUFxQztBQUNyQyxtREFBaUQ7QUFDakQsbUVBQWlFO0FBQ2pFLDhDQUE0QjtBQUM1QixnREFBOEI7QUFDOUIsb0RBQWtDO0FBQ2xDLDJEQUF5QztBQUN6QywwQ0FBd0I7QUFDeEIseUNBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogYXMga2V5dXRpbCBmcm9tICcuL2tleXV0aWwnO1xuZXhwb3J0ICogYXMgb3V0cHV0U2NyaXB0cyBmcm9tICcuL291dHB1dFNjcmlwdHMnO1xuZXhwb3J0ICogYXMgbm9uU3RhbmRhcmRIYWxmU2lnbmVkIGZyb20gJy4vbm9uU3RhbmRhcmRIYWxmU2lnbmVkJztcbmV4cG9ydCAqIGZyb20gJy4vc2lnbmF0dXJlJztcbmV4cG9ydCAqIGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9VdHhvVHJhbnNhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9VdHhvVHJhbnNhY3Rpb25CdWlsZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vemNhc2gnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXNoJztcbiJdfQ==
__exportStar(require("./types"), exports);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYml0Z28vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUFxQztBQUNyQyxtREFBaUQ7QUFDakQsbUVBQWlFO0FBQ2pFLDhDQUE0QjtBQUM1QixnREFBOEI7QUFDOUIsb0RBQWtDO0FBQ2xDLDJEQUF5QztBQUN6QywwQ0FBd0I7QUFDeEIseUNBQXVCO0FBQ3ZCLDBDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGFzIGtleXV0aWwgZnJvbSAnLi9rZXl1dGlsJztcbmV4cG9ydCAqIGFzIG91dHB1dFNjcmlwdHMgZnJvbSAnLi9vdXRwdXRTY3JpcHRzJztcbmV4cG9ydCAqIGFzIG5vblN0YW5kYXJkSGFsZlNpZ25lZCBmcm9tICcuL25vblN0YW5kYXJkSGFsZlNpZ25lZCc7XG5leHBvcnQgKiBmcm9tICcuL3NpZ25hdHVyZSc7XG5leHBvcnQgKiBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vVXR4b1RyYW5zYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vVXR4b1RyYW5zYWN0aW9uQnVpbGRlcic7XG5leHBvcnQgKiBmcm9tICcuL3pjYXNoJztcbmV4cG9ydCAqIGZyb20gJy4vZGFzaCc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbiJdfQ==
/// <reference types="node" />
import * as bitcoinjs from 'bitcoinjs-lib';
import { Triple, Tuple } from './types';
export declare const scriptTypeP2shP2pk = "p2shP2pk";
export declare type ScriptTypeP2shP2pk = typeof scriptTypeP2shP2pk;
export declare const scriptTypes2Of3: readonly ["p2sh", "p2shP2wsh", "p2wsh", "p2tr"];
export declare type ScriptType2Of3 = typeof scriptTypes2Of3[number];
export declare function isScriptType2Of3(t: string): t is ScriptType2Of3;
export declare type ScriptType = ScriptTypeP2shP2pk | ScriptType2Of3;
export declare function scriptTypeForChain(chain: number): ScriptType2Of3;

@@ -8,0 +11,0 @@ /**

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createSpendScriptP2tr = exports.createPaymentP2tr = exports.createOutputScript2of3 = exports.createOutputScriptP2shP2pk = exports.scriptType2Of3AsPrevOutType = exports.scriptTypeForChain = exports.isScriptType2Of3 = exports.scriptTypes2Of3 = void 0;
exports.createSpendScriptP2tr = exports.createPaymentP2tr = exports.createOutputScript2of3 = exports.createOutputScriptP2shP2pk = exports.scriptType2Of3AsPrevOutType = exports.scriptTypeForChain = exports.isScriptType2Of3 = exports.scriptTypes2Of3 = exports.scriptTypeP2shP2pk = void 0;
const assert = require("assert");
const bitcoinjs = require("bitcoinjs-lib");
const types_1 = require("./types");
exports.scriptTypeP2shP2pk = 'p2shP2pk';
exports.scriptTypes2Of3 = ['p2sh', 'p2shP2wsh', 'p2wsh', 'p2tr'];

@@ -180,2 +181,2 @@ function isScriptType2Of3(t) {

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0U2NyaXB0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXRnby9vdXRwdXRTY3JpcHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFpQztBQUNqQywyQ0FBMkM7QUFDM0MsbUNBQWtEO0FBRXJDLFFBQUEsZUFBZSxHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFVLENBQUM7QUFHL0UsU0FBZ0IsZ0JBQWdCLENBQUMsQ0FBUztJQUN4QyxPQUFPLHVCQUFlLENBQUMsUUFBUSxDQUFDLENBQW1CLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRkQsNENBRUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxLQUFhO0lBQzlDLFFBQVEsS0FBSyxFQUFFO1FBQ2IsS0FBSyxDQUFDLENBQUM7UUFDUCxLQUFLLENBQUM7WUFDSixPQUFPLE1BQU0sQ0FBQztRQUNoQixLQUFLLEVBQUUsQ0FBQztRQUNSLEtBQUssRUFBRTtZQUNMLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLEtBQUssRUFBRSxDQUFDO1FBQ1IsS0FBSyxFQUFFO1lBQ0wsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxFQUFFLENBQUM7UUFDUixLQUFLLEVBQUU7WUFDTCxPQUFPLE1BQU0sQ0FBQztRQUNoQjtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDN0M7QUFDSCxDQUFDO0FBakJELGdEQWlCQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLDJCQUEyQixDQUFDLENBQWlCO0lBQzNELFFBQVEsQ0FBQyxFQUFFO1FBQ1QsS0FBSyxNQUFNO1lBQ1QsT0FBTyxXQUFXLENBQUM7UUFDckIsS0FBSyxXQUFXO1lBQ2QsT0FBTyxpQkFBaUIsQ0FBQztRQUMzQixLQUFLLE9BQU87WUFDVixPQUFPLFlBQVksQ0FBQztRQUN0QixLQUFLLE1BQU07WUFDVCxPQUFPLFdBQVcs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LENBQUM7SUFFdEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNyQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLE9BQU87UUFDTCxZQUFZO1FBQ1osYUFBYSxFQUFFLE1BQU07S0FDdEIsQ0FBQztBQUNKLENBQUM7QUF0QkQsc0RBc0JDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxPQUF1QjtJQUN0RCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoQyxPQUFPO1FBQ0wsWUFBWSxFQUFFLE1BQU07S0FDckIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIGJpdGNvaW5qcyBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCB7IGlzVHJpcGxlLCBUcmlwbGUsIFR1cGxlIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBzY3JpcHRUeXBlczJPZjMgPSBbJ3Ayc2gnLCAncDJzaFAyd3NoJywgJ3Ayd3NoJywgJ3AydHInXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFNjcmlwdFR5cGUyT2YzID0gdHlwZW9mIHNjcmlwdFR5cGVzMk9mM1tudW1iZXJdO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNTY3JpcHRUeXBlMk9mMyh0OiBzdHJpbmcpOiB0IGlzIFNjcmlwdFR5cGUyT2YzIHtcbiAgcmV0dXJuIHNjcmlwdFR5cGVzMk9mMy5pbmNsdWRlcyh0IGFzIFNjcmlwdFR5cGUyT2YzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcmlwdFR5cGVGb3JDaGFpbihjaGFpbjogbnVtYmVyKTogU2NyaXB0VHlwZTJPZjMge1xuICBzd2l0Y2ggKGNoYWluKSB7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiAncDJzaCc7XG4gICAgY2FzZSAxMDpcbiAgICBjYXNlIDExOlxuICAgICAgcmV0dXJuICdwMnNoUDJ3c2gnO1xuICAgIGNhc2UgMjA6XG4gICAgY2FzZSAyMTpcbiAgICAgIHJldHVybiAncDJ3c2gnO1xuICAgIGNhc2UgMzA6XG4gICAgY2FzZSAzMTpcbiAgICAgIHJldHVybiAncDJ0cic7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBjaGFpbiAke2NoYWlufWApO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHRcbiAqIEByZXR1cm4gc3RyaW5nIHByZXZPdXQgYXMgZGVmaW5lZCBpbiBQUkVWT1VUX1RZUEVTIChiaXRjb2luanMtbGliLy4uLi90cmFuc2FjdGlvbl9idWlsZGVyLmpzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2NyaXB0VHlwZTJPZjNBc1ByZXZPdXRUeXBlKHQ6IFNjcmlwdFR5cGUyT2YzKTogc3RyaW5nIHtcbiAgc3dpdGNoICh0KSB7XG4gICAgY2FzZSAncDJzaCc6XG4gICAgICByZXR1cm4gJ3Ayc2gtcDJtcyc7XG4gICAgY2FzZSAncDJzaFAyd3NoJzpcbiAgICAgIHJldHVybiAncDJzaC1wMndzaC1wMm1zJztcbiAgICBjYXNlICdwMndzaCc6XG4gICAgICByZXR1cm4gJ3Ayd3NoLXAybXMnO1xuICAgIGNhc2UgJ3AydHInOlxuICAgICAgcmV0dXJuICdwMnRyLXAybnMnO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIHNjcmlwdCB0eXBlICR7dH1gKTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBTcGVuZGFibGVTY3JpcHQgPSB7XG4gIHNjcmlwdFB1YktleTogQnVmZmVyO1xuICAvKiogQGRlcHJlY2F0ZWQgLSB1c2UgY3JlYXRlU3BlbmRTY3JpcHRzMm9mMyAqL1xuICByZWRlZW1TY3JpcHQ/OiBCdWZmZXI7XG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVzZSBjcmVhdGVTcGVuZFNjcmlwdDJvZjMgKi9cbiAgd2l0bmVzc1NjcmlwdD86IEJ1ZmZlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFNwZW5kU2NyaXB0UDJ0ciA9IHtcbiAgY29udHJvbEJsb2NrOiBCdWZmZXI7XG4gIHdpdG5lc3NTY3JpcHQ6IEJ1ZmZlcjtcbn07XG5cbi8qKlxuICogUmV0dXJuIHNjcmlwdHMgZm9yIHAyc2gtcDJwayAodXNlZCBmb3IgQkNIL0JTViByZXBsYXkgcHJvdGVjdGlvbilcbiAqIEBwYXJhbSBwdWJrZXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU91dHB1dFNjcmlwdFAyc2hQMnBrKHB1YmtleTogQnVmZmVyKTogU3BlbmRhYmxlU2NyaXB0IHtcbiAgY29uc3QgcDJwayA9IGJpdGNvaW5qcy5wYXltZW50cy5wMnBrKHsgcHVia2V5IH0pO1xuICBjb25zdCBwMnNoID0gYml0Y29pbmpzLnBheW1lbnRzLnAyc2goeyByZWRlZW06IHAycGsgfSk7XG4gIGlmICghcDJzaC5vdXRwdXQgfHwgIXAycGsub3V0cHV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHN0YXRlYCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRQdWJLZXk6IHAyc2gub3V0cHV0LFxuICAgIHJlZGVlbVNjcmlwdDogcDJway5vdXRwdXQsXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIHNjcmlwdHMgZm9yIDItb2YtMyBtdWx0aXNpZyBvdXRwdXRcbiAqIEBwYXJhbSBwdWJrZXlzIC0gdGhlIGtleSB0cmlwbGUgZm9yIG11bHRpc2lnXG4gKiBAcGFyYW0gc2NyaXB0VHlwZVxuICogQHJldHVybnMge3tyZWRlZW1TY3JpcHQsIHdpdG5lc3NTY3JpcHQsIHNjcmlwdFB1YktleX19XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPdXRwdXRTY3JpcHQyb2YzKHB1YmtleXM6IEJ1ZmZlcltdLCBzY3JpcHRUeXBlOiBTY3JpcHRUeXBlMk9mMyk6IFNwZW5kYWJsZVNjcmlwdCB7XG4gIGlmICghaXNUcmlwbGUocHVia2V5cykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcHJvdmlkZSBwdWJrZXkgdHJpcGxlYCk7XG4gIH1cblxuICBwdWJrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChrZXkubGVuZ3RoICE9PSAzMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGtleSBsZW5ndGggJHtrZXkubGVuZ3RofS4gTXVzdCB1c2UgY29tcHJlc3NlZCBrZXlzLmApO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHNjcmlwdFR5cGUgPT09ICdwMnRyJykge1xuICAgIC8vIHAydHIgYWRkcmVzc2VzIHVzZSBhIGNvbWJpbmF0aW9uIG9mIDIgb2YgMiBtdWx0aXNpZyBzY3JpcHRzIGRpc3RpbmN0IGZyb21cbiAgICAvLyB0aGUgMiBvZiAzIG11bHRpc2lnIHVzZWQgZm9yIG90aGVyIHNjcmlwdCB0eXBlc1xuICAgIHJldHVybiBjcmVhdGVUYXByb290U2NyaXB0Mm9mMyhwdWJrZXlzKTtcbiAgfVxuXG4gIGNvbnN0IHNjcmlwdDJvZjMgPSBiaXRjb2luanMucGF5bWVudHMucDJtcyh7IG06IDIsIHB1YmtleXMgfSk7XG4gIGFzc2VydChzY3JpcHQyb2YzLm91dHB1dCk7XG5cbiAgbGV0IHNjcmlwdFB1YktleTogYml0Y29pbmpzLlBheW1lbnQ7XG4gIGxldCByZWRlZW1TY3JpcHQ6IGJpdGNvaW5qcy5QYXltZW50IHwgdW5kZWZpbmVkO1xuICBsZXQgd2l0bmVzc1NjcmlwdDogYml0Y29pbmpzLlBheW1lbnQgfCB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoc2NyaXB0VHlwZSkge1xuICAgIGNhc2UgJ3Ayc2gnOlxuICAgICAgcmVkZWVtU2NyaXB0ID0gc2NyaXB0Mm9mMztcbiAgICAgIHNjcmlwdFB1YktleSA9IGJpdGNvaW5qcy5wYXltZW50cy5wMnNoKHsgcmVkZWVtOiBzY3JpcHQyb2YzIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncDJzaFAyd3NoJzpcbiAgICAgIHdpdG5lc3NTY3JpcHQgPSBzY3JpcHQyb2YzO1xuICAgICAgcmVkZWVtU2NyaXB0ID0gYml0Y29pbmpzLnBheW1lbnRzLnAyd3NoKHsgcmVkZWVtOiBzY3JpcHQyb2YzIH0pO1xuICAgICAgc2NyaXB0UHViS2V5ID0gYml0Y29pbmpzLnBheW1lbnRzLnAyc2goeyByZWRlZW06IHJlZGVlbVNjcmlwdCB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICAgIHdpdG5lc3NTY3JpcHQgPSBzY3JpcHQyb2YzO1xuICAgICAgc2NyaXB0UHViS2V5ID0gYml0Y29pbmpzLnBheW1lbnRzLnAyd3NoKHsgcmVkZWVtOiB3aXRuZXNzU2NyaXB0IH0pO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBtdWx0aXNpZyBzY3JpcHQgdHlwZSAke3NjcmlwdFR5cGV9YCk7XG4gIH1cblxuICBhc3NlcnQoc2NyaXB0UHViS2V5KTtcbiAgYXNzZXJ0KHNjcmlwdFB1YktleS5vdXRwdXQpO1xuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0UHViS2V5OiBzY3JpcHRQdWJLZXkub3V0cHV0LFxuICAgIHJlZGVlbVNjcmlwdDogcmVkZWVtU2NyaXB0Py5vdXRwdXQsXG4gICAgd2l0bmVzc1NjcmlwdDogd2l0bmVzc1NjcmlwdD8ub3V0cHV0LFxuICB9O1xufVxuXG5mdW5jdGlvbiB0b1hPbmx5UHVibGljS2V5KGI6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGlmIChiLmxlbmd0aCA9PT0gMzMpIHtcbiAgICByZXR1cm4gYi5zbGljZSgxKTtcbiAgfVxuICBpZiAoYi5sZW5ndGggPT09IDMyKSB7XG4gICAgcmV0dXJuIGI7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGtleSBzaXplICR7Yi5sZW5ndGh9YCk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcHRyZWVLZXlDb21iaW5hdGlvbnMoa2V5czogVHJpcGxlPEJ1ZmZlcj4pOiBUdXBsZTxCdWZmZXI+W10ge1xuICBjb25zdCBbdXNlcktleSwgYmFja3VwS2V5LCBiaXRHb0tleV0gPSBrZXlzLm1hcCgoaykgPT4gdG9YT25seVB1YmxpY0tleShrKSk7XG4gIHJldHVybiBbXG4gICAgW3VzZXJLZXksIGJpdEdvS2V5XSxcbiAgICBbdXNlcktleSwgYmFja3VwS2V5XSxcbiAgICBbYmFja3VwS2V5LCBiaXRHb0tleV0sXG4gIF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXltZW50UDJ0cihwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPiwgcmVkZWVtSW5kZXg/OiBudW1iZXIpOiBiaXRjb2luanMuUGF5bWVudCB7XG4gIGNvbnN0IGtleUNvbWJpbmF0aW9uczJvZjIgPSBnZXRUYXB0cmVlS2V5Q29tYmluYXRpb25zKHB1YmtleXMpO1xuICBjb25zdCByZWRlZW1zID0ga2V5Q29tYmluYXRpb25zMm9mMi5tYXAoKHB1YmtleXMsIGluZGV4KSA9PlxuICAgIGJpdGNvaW5qcy5wYXltZW50cy5wMnRyX25zKHtcbiAgICAgIHB1YmtleXMsXG4gICAgICB3ZWlnaHQ6IGluZGV4ID09PSAwID8gMiA6IDEsXG4gICAgfSlcbiAgKTtcblxuICByZXR1cm4gYml0Y29pbmpzLnBheW1lbnRzLnAydHIoe1xuICAgIHB1YmtleXM6IGtleUNvbWJpbmF0aW9uczJvZjJbMF0sXG4gICAgcmVkZWVtcyxcbiAgICByZWRlZW1JbmRleCxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTcGVuZFNjcmlwdFAydHIocHVia2V5czogVHJpcGxlPEJ1ZmZlcj4sIGtleUNvbWJpbmF0aW9uOiBUdXBsZTxCdWZmZXI+KTogU3BlbmRTY3JpcHRQMnRyIHtcbiAgY29uc3Qga2V5Q29tYmluYXRpb25zID0gZ2V0VGFwdHJlZUtleUNvbWJpbmF0aW9ucyhwdWJrZXlzKTtcbiAgY29uc3QgW2EsIGJdID0ga2V5Q29tYmluYXRpb24ubWFwKChrKSA9PiB0b1hPbmx5UHVibGljS2V5KGspKTtcbiAgY29uc3QgcmVkZWVtSW5kZXggPSBrZXlDb21iaW5hdGlvbnMuZmluZEluZGV4KFxuICAgIChbYywgZF0pID0+IChhLmVxdWFscyhjKSAmJiBiLmVxdWFscyhkKSkgfHwgKGEuZXF1YWxzKGQpICYmIGIuZXF1YWxzKGMpKVxuICApO1xuXG4gIGlmIChyZWRlZW1JbmRleCA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNvdWxkIG5vdCBmaW5kIHJlZGVlbUluZGV4IGZvciBrZXkgY29tYmluYXRpb25gKTtcbiAgfVxuXG4gIGNvbnN0IHBheW1lbnQgPSBjcmVhdGVQYXltZW50UDJ0cihwdWJrZXlzLCByZWRlZW1JbmRleCk7XG4gIGNvbnN0IHsgY29udHJvbEJsb2NrIH0gPSBwYXltZW50O1xuICBhc3NlcnQoQnVmZmVyLmlzQnVmZmVyKGNvbnRyb2xCbG9jaykpO1xuXG4gIGFzc2VydChwYXltZW50LnJlZGVlbSk7XG4gIGNvbnN0IG91dHB1dCA9IHBheW1lbnQucmVkZWVtLm91dHB1dDtcbiAgYXNzZXJ0KEJ1ZmZlci5pc0J1ZmZlcihvdXRwdXQpKTtcbiAgcmV0dXJuIHtcbiAgICBjb250cm9sQmxvY2ssXG4gICAgd2l0bmVzc1NjcmlwdDogb3V0cHV0LFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSB0YXByb290IG91dHB1dCBzY3JpcHQgdXNpbmcgdGhlIHVzZXIgYW5kIGJpdGdvIGtleXMgZm9yIHRoZSBhZ2dyZWdhdGVcbiAqIHB1YmxpYyBrZXkgYW5kIGEgdGFwdHJlZSBjb250YWluaW5nIGEgdXNlcitiaXRnbyAyLW9mLTIgc2NyaXB0IGF0IHRoZSBmaXJzdCBkZXB0aCBsZXZlbCBvZiB0aGVcbiAqIHRyZWUgYW5kIHVzZXIrYmFja3VwIGFuZCBiaXRnbytiYWNrdXAgMi1vZi0yIHNjcmlwdHMgb25lIGxldmVsIGRlZXBlci5cbiAqIEBwYXJhbSBwdWJrZXlzIC0gYSBwdWJrZXkgYXJyYXkgY29udGFpbmluZyB0aGUgdXNlciBrZXksIGJhY2t1cCBrZXksIGFuZCBiaXRnbyBrZXkgaW4gdGhhdCBvcmRlclxuICogQHJldHVybnMge3tzY3JpcHRQdWJLZXl9fVxuICovXG5mdW5jdGlvbiBjcmVhdGVUYXByb290U2NyaXB0Mm9mMyhwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPik6IFNwZW5kYWJsZVNjcmlwdCB7XG4gIGNvbnN0IHsgb3V0cHV0IH0gPSBjcmVhdGVQYXltZW50UDJ0cihwdWJrZXlzKTtcbiAgYXNzZXJ0KEJ1ZmZlci5pc0J1ZmZlcihvdXRwdXQpKTtcbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRQdWJLZXk6IG91dHB1dCxcbiAgfTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0U2NyaXB0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXRnby9vdXRwdXRTY3JpcHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFpQztBQUNqQywyQ0FBMkM7QUFDM0MsbUNBQWtEO0FBRXJDLFFBQUEsa0JBQWtCLEdBQUcsVUFBVSxDQUFDO0FBR2hDLFFBQUEsZUFBZSxHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFVLENBQUM7QUFHL0UsU0FBZ0IsZ0JBQWdCLENBQUMsQ0FBUztJQUN4QyxPQUFPLHVCQUFlLENBQUMsUUFBUSxDQUFDLENBQW1CLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRkQsNENBRUM7QUFJRCxTQUFnQixrQkFBa0IsQ0FBQyxLQUFhO0lBQzlDLFFBQVEsS0FBSyxFQUFFO1FBQ2IsS0FBSyxDQUFDLENBQUM7UUFDUCxLQUFLLENBQUM7WUFDSixPQUFPLE1BQU0sQ0FBQztRQUNoQixLQUFLLEVBQUUsQ0FBQztRQUNSLEtBQUssRUFBRTtZQUNMLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLEtBQUssRUFBRSxDQUFDO1FBQ1IsS0FBSyxFQUFFO1lBQ0wsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxFQUFFLENBQUM7UUFDUixLQUFLLEVBQUU7WUFDTCxPQUFPLE1BQU0sQ0FBQztRQUNoQjtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDN0M7QUFDSCxDQUFDO0FBakJELGdEQWlCQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLDJCQUEyQixDQUFDLENBQWlCO0lBQzNELFFBQVEsQ0FBQyxFQUFFO1FBQ1QsS0FBSyxNQUFNO1lBQ1QsT0FBTyxXQUFXLENBQUM7UUFDckIsS0FBSyxXQUFXO1lBQ2QsT0FBTyxpQkFBaUIsQ0FBQztRQUMzQixLQUFLLE9BQU87WUFDVixPQUFPLFlBQVksQ0FB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QUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFFdEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNyQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLE9BQU87UUFDTCxZQUFZO1FBQ1osYUFBYSxFQUFFLE1BQU07S0FDdEIsQ0FBQztBQUNKLENBQUM7QUF0QkQsc0RBc0JDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxPQUF1QjtJQUN0RCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoQyxPQUFPO1FBQ0wsWUFBWSxFQUFFLE1BQU07S0FDckIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIGJpdGNvaW5qcyBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCB7IGlzVHJpcGxlLCBUcmlwbGUsIFR1cGxlIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBzY3JpcHRUeXBlUDJzaFAycGsgPSAncDJzaFAycGsnO1xuZXhwb3J0IHR5cGUgU2NyaXB0VHlwZVAyc2hQMnBrID0gdHlwZW9mIHNjcmlwdFR5cGVQMnNoUDJwaztcblxuZXhwb3J0IGNvbnN0IHNjcmlwdFR5cGVzMk9mMyA9IFsncDJzaCcsICdwMnNoUDJ3c2gnLCAncDJ3c2gnLCAncDJ0ciddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgU2NyaXB0VHlwZTJPZjMgPSB0eXBlb2Ygc2NyaXB0VHlwZXMyT2YzW251bWJlcl07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NjcmlwdFR5cGUyT2YzKHQ6IHN0cmluZyk6IHQgaXMgU2NyaXB0VHlwZTJPZjMge1xuICByZXR1cm4gc2NyaXB0VHlwZXMyT2YzLmluY2x1ZGVzKHQgYXMgU2NyaXB0VHlwZTJPZjMpO1xufVxuXG5leHBvcnQgdHlwZSBTY3JpcHRUeXBlID0gU2NyaXB0VHlwZVAyc2hQMnBrIHwgU2NyaXB0VHlwZTJPZjM7XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JpcHRUeXBlRm9yQ2hhaW4oY2hhaW46IG51bWJlcik6IFNjcmlwdFR5cGUyT2YzIHtcbiAgc3dpdGNoIChjaGFpbikge1xuICAgIGNhc2UgMDpcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gJ3Ayc2gnO1xuICAgIGNhc2UgMTA6XG4gICAgY2FzZSAxMTpcbiAgICAgIHJldHVybiAncDJzaFAyd3NoJztcbiAgICBjYXNlIDIwOlxuICAgIGNhc2UgMjE6XG4gICAgICByZXR1cm4gJ3Ayd3NoJztcbiAgICBjYXNlIDMwOlxuICAgIGNhc2UgMzE6XG4gICAgICByZXR1cm4gJ3AydHInO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgY2hhaW4gJHtjaGFpbn1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB0XG4gKiBAcmV0dXJuIHN0cmluZyBwcmV2T3V0IGFzIGRlZmluZWQgaW4gUFJFVk9VVF9UWVBFUyAoYml0Y29pbmpzLWxpYi8uLi4vdHJhbnNhY3Rpb25fYnVpbGRlci5qcylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcmlwdFR5cGUyT2YzQXNQcmV2T3V0VHlwZSh0OiBTY3JpcHRUeXBlMk9mMyk6IHN0cmluZyB7XG4gIHN3aXRjaCAodCkge1xuICAgIGNhc2UgJ3Ayc2gnOlxuICAgICAgcmV0dXJuICdwMnNoLXAybXMnO1xuICAgIGNhc2UgJ3Ayc2hQMndzaCc6XG4gICAgICByZXR1cm4gJ3Ayc2gtcDJ3c2gtcDJtcyc7XG4gICAgY2FzZSAncDJ3c2gnOlxuICAgICAgcmV0dXJuICdwMndzaC1wMm1zJztcbiAgICBjYXNlICdwMnRyJzpcbiAgICAgIHJldHVybiAncDJ0ci1wMm5zJztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBzY3JpcHQgdHlwZSAke3R9YCk7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgU3BlbmRhYmxlU2NyaXB0ID0ge1xuICBzY3JpcHRQdWJLZXk6IEJ1ZmZlcjtcbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIGNyZWF0ZVNwZW5kU2NyaXB0czJvZjMgKi9cbiAgcmVkZWVtU2NyaXB0PzogQnVmZmVyO1xuICAvKiogQGRlcHJlY2F0ZWQgLSB1c2UgY3JlYXRlU3BlbmRTY3JpcHQyb2YzICovXG4gIHdpdG5lc3NTY3JpcHQ/OiBCdWZmZXI7XG59O1xuXG5leHBvcnQgdHlwZSBTcGVuZFNjcmlwdFAydHIgPSB7XG4gIGNvbnRyb2xCbG9jazogQnVmZmVyO1xuICB3aXRuZXNzU2NyaXB0OiBCdWZmZXI7XG59O1xuXG4vKipcbiAqIFJldHVybiBzY3JpcHRzIGZvciBwMnNoLXAycGsgKHVzZWQgZm9yIEJDSC9CU1YgcmVwbGF5IHByb3RlY3Rpb24pXG4gKiBAcGFyYW0gcHVia2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPdXRwdXRTY3JpcHRQMnNoUDJwayhwdWJrZXk6IEJ1ZmZlcik6IFNwZW5kYWJsZVNjcmlwdCB7XG4gIGNvbnN0IHAycGsgPSBiaXRjb2luanMucGF5bWVudHMucDJwayh7IHB1YmtleSB9KTtcbiAgY29uc3QgcDJzaCA9IGJpdGNvaW5qcy5wYXltZW50cy5wMnNoKHsgcmVkZWVtOiBwMnBrIH0pO1xuICBpZiAoIXAyc2gub3V0cHV0IHx8ICFwMnBrLm91dHB1dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzdGF0ZWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NyaXB0UHViS2V5OiBwMnNoLm91dHB1dCxcbiAgICByZWRlZW1TY3JpcHQ6IHAycGsub3V0cHV0LFxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybiBzY3JpcHRzIGZvciAyLW9mLTMgbXVsdGlzaWcgb3V0cHV0XG4gKiBAcGFyYW0gcHVia2V5cyAtIHRoZSBrZXkgdHJpcGxlIGZvciBtdWx0aXNpZ1xuICogQHBhcmFtIHNjcmlwdFR5cGVcbiAqIEByZXR1cm5zIHt7cmVkZWVtU2NyaXB0LCB3aXRuZXNzU2NyaXB0LCBzY3JpcHRQdWJLZXl9fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhwdWJrZXlzOiBCdWZmZXJbXSwgc2NyaXB0VHlwZTogU2NyaXB0VHlwZTJPZjMpOiBTcGVuZGFibGVTY3JpcHQge1xuICBpZiAoIWlzVHJpcGxlKHB1YmtleXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBtdXN0IHByb3ZpZGUgcHVia2V5IHRyaXBsZWApO1xuICB9XG5cbiAgcHVia2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoa2V5Lmxlbmd0aCAhPT0gMzMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBrZXkgbGVuZ3RoICR7a2V5Lmxlbmd0aH0uIE11c3QgdXNlIGNvbXByZXNzZWQga2V5cy5gKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChzY3JpcHRUeXBlID09PSAncDJ0cicpIHtcbiAgICAvLyBwMnRyIGFkZHJlc3NlcyB1c2UgYSBjb21iaW5hdGlvbiBvZiAyIG9mIDIgbXVsdGlzaWcgc2NyaXB0cyBkaXN0aW5jdCBmcm9tXG4gICAgLy8gdGhlIDIgb2YgMyBtdWx0aXNpZyB1c2VkIGZvciBvdGhlciBzY3JpcHQgdHlwZXNcbiAgICByZXR1cm4gY3JlYXRlVGFwcm9vdFNjcmlwdDJvZjMocHVia2V5cyk7XG4gIH1cblxuICBjb25zdCBzY3JpcHQyb2YzID0gYml0Y29pbmpzLnBheW1lbnRzLnAybXMoeyBtOiAyLCBwdWJrZXlzIH0pO1xuICBhc3NlcnQoc2NyaXB0Mm9mMy5vdXRwdXQpO1xuXG4gIGxldCBzY3JpcHRQdWJLZXk6IGJpdGNvaW5qcy5QYXltZW50O1xuICBsZXQgcmVkZWVtU2NyaXB0OiBiaXRjb2luanMuUGF5bWVudCB8IHVuZGVmaW5lZDtcbiAgbGV0IHdpdG5lc3NTY3JpcHQ6IGJpdGNvaW5qcy5QYXltZW50IHwgdW5kZWZpbmVkO1xuICBzd2l0Y2ggKHNjcmlwdFR5cGUpIHtcbiAgICBjYXNlICdwMnNoJzpcbiAgICAgIHJlZGVlbVNjcmlwdCA9IHNjcmlwdDJvZjM7XG4gICAgICBzY3JpcHRQdWJLZXkgPSBiaXRjb2luanMucGF5bWVudHMucDJzaCh7IHJlZGVlbTogc2NyaXB0Mm9mMyB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Ayc2hQMndzaCc6XG4gICAgICB3aXRuZXNzU2NyaXB0ID0gc2NyaXB0Mm9mMztcbiAgICAgIHJlZGVlbVNjcmlwdCA9IGJpdGNvaW5qcy5wYXltZW50cy5wMndzaCh7IHJlZGVlbTogc2NyaXB0Mm9mMyB9KTtcbiAgICAgIHNjcmlwdFB1YktleSA9IGJpdGNvaW5qcy5wYXltZW50cy5wMnNoKHsgcmVkZWVtOiByZWRlZW1TY3JpcHQgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwMndzaCc6XG4gICAgICB3aXRuZXNzU2NyaXB0ID0gc2NyaXB0Mm9mMztcbiAgICAgIHNjcmlwdFB1YktleSA9IGJpdGNvaW5qcy5wYXltZW50cy5wMndzaCh7IHJlZGVlbTogd2l0bmVzc1NjcmlwdCB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gbXVsdGlzaWcgc2NyaXB0IHR5cGUgJHtzY3JpcHRUeXBlfWApO1xuICB9XG5cbiAgYXNzZXJ0KHNjcmlwdFB1YktleSk7XG4gIGFzc2VydChzY3JpcHRQdWJLZXkub3V0cHV0KTtcblxuICByZXR1cm4ge1xuICAgIHNjcmlwdFB1YktleTogc2NyaXB0UHViS2V5Lm91dHB1dCxcbiAgICByZWRlZW1TY3JpcHQ6IHJlZGVlbVNjcmlwdD8ub3V0cHV0LFxuICAgIHdpdG5lc3NTY3JpcHQ6IHdpdG5lc3NTY3JpcHQ/Lm91dHB1dCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdG9YT25seVB1YmxpY0tleShiOiBCdWZmZXIpOiBCdWZmZXIge1xuICBpZiAoYi5sZW5ndGggPT09IDMzKSB7XG4gICAgcmV0dXJuIGIuc2xpY2UoMSk7XG4gIH1cbiAgaWYgKGIubGVuZ3RoID09PSAzMikge1xuICAgIHJldHVybiBiO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBrZXkgc2l6ZSAke2IubGVuZ3RofWApO1xufVxuXG5mdW5jdGlvbiBnZXRUYXB0cmVlS2V5Q29tYmluYXRpb25zKGtleXM6IFRyaXBsZTxCdWZmZXI+KTogVHVwbGU8QnVmZmVyPltdIHtcbiAgY29uc3QgW3VzZXJLZXksIGJhY2t1cEtleSwgYml0R29LZXldID0ga2V5cy5tYXAoKGspID0+IHRvWE9ubHlQdWJsaWNLZXkoaykpO1xuICByZXR1cm4gW1xuICAgIFt1c2VyS2V5LCBiaXRHb0tleV0sXG4gICAgW3VzZXJLZXksIGJhY2t1cEtleV0sXG4gICAgW2JhY2t1cEtleSwgYml0R29LZXldLFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGF5bWVudFAydHIocHVia2V5czogVHJpcGxlPEJ1ZmZlcj4sIHJlZGVlbUluZGV4PzogbnVtYmVyKTogYml0Y29pbmpzLlBheW1lbnQge1xuICBjb25zdCBrZXlDb21iaW5hdGlvbnMyb2YyID0gZ2V0VGFwdHJlZUtleUNvbWJpbmF0aW9ucyhwdWJrZXlzKTtcbiAgY29uc3QgcmVkZWVtcyA9IGtleUNvbWJpbmF0aW9uczJvZjIubWFwKChwdWJrZXlzLCBpbmRleCkgPT5cbiAgICBiaXRjb2luanMucGF5bWVudHMucDJ0cl9ucyh7XG4gICAgICBwdWJrZXlzLFxuICAgICAgd2VpZ2h0OiBpbmRleCA9PT0gMCA/IDIgOiAxLFxuICAgIH0pXG4gICk7XG5cbiAgcmV0dXJuIGJpdGNvaW5qcy5wYXltZW50cy5wMnRyKHtcbiAgICBwdWJrZXlzOiBrZXlDb21iaW5hdGlvbnMyb2YyWzBdLFxuICAgIHJlZGVlbXMsXG4gICAgcmVkZWVtSW5kZXgsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3BlbmRTY3JpcHRQMnRyKHB1YmtleXM6IFRyaXBsZTxCdWZmZXI+LCBrZXlDb21iaW5hdGlvbjogVHVwbGU8QnVmZmVyPik6IFNwZW5kU2NyaXB0UDJ0ciB7XG4gIGNvbnN0IGtleUNvbWJpbmF0aW9ucyA9IGdldFRhcHRyZWVLZXlDb21iaW5hdGlvbnMocHVia2V5cyk7XG4gIGNvbnN0IFthLCBiXSA9IGtleUNvbWJpbmF0aW9uLm1hcCgoaykgPT4gdG9YT25seVB1YmxpY0tleShrKSk7XG4gIGNvbnN0IHJlZGVlbUluZGV4ID0ga2V5Q29tYmluYXRpb25zLmZpbmRJbmRleChcbiAgICAoW2MsIGRdKSA9PiAoYS5lcXVhbHMoYykgJiYgYi5lcXVhbHMoZCkpIHx8IChhLmVxdWFscyhkKSAmJiBiLmVxdWFscyhjKSlcbiAgKTtcblxuICBpZiAocmVkZWVtSW5kZXggPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjb3VsZCBub3QgZmluZCByZWRlZW1JbmRleCBmb3Iga2V5IGNvbWJpbmF0aW9uYCk7XG4gIH1cblxuICBjb25zdCBwYXltZW50ID0gY3JlYXRlUGF5bWVudFAydHIocHVia2V5cywgcmVkZWVtSW5kZXgpO1xuICBjb25zdCB7IGNvbnRyb2xCbG9jayB9ID0gcGF5bWVudDtcbiAgYXNzZXJ0KEJ1ZmZlci5pc0J1ZmZlcihjb250cm9sQmxvY2spKTtcblxuICBhc3NlcnQocGF5bWVudC5yZWRlZW0pO1xuICBjb25zdCBvdXRwdXQgPSBwYXltZW50LnJlZGVlbS5vdXRwdXQ7XG4gIGFzc2VydChCdWZmZXIuaXNCdWZmZXIob3V0cHV0KSk7XG4gIHJldHVybiB7XG4gICAgY29udHJvbEJsb2NrLFxuICAgIHdpdG5lc3NTY3JpcHQ6IG91dHB1dCxcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgdGFwcm9vdCBvdXRwdXQgc2NyaXB0IHVzaW5nIHRoZSB1c2VyIGFuZCBiaXRnbyBrZXlzIGZvciB0aGUgYWdncmVnYXRlXG4gKiBwdWJsaWMga2V5IGFuZCBhIHRhcHRyZWUgY29udGFpbmluZyBhIHVzZXIrYml0Z28gMi1vZi0yIHNjcmlwdCBhdCB0aGUgZmlyc3QgZGVwdGggbGV2ZWwgb2YgdGhlXG4gKiB0cmVlIGFuZCB1c2VyK2JhY2t1cCBhbmQgYml0Z28rYmFja3VwIDItb2YtMiBzY3JpcHRzIG9uZSBsZXZlbCBkZWVwZXIuXG4gKiBAcGFyYW0gcHVia2V5cyAtIGEgcHVia2V5IGFycmF5IGNvbnRhaW5pbmcgdGhlIHVzZXIga2V5LCBiYWNrdXAga2V5LCBhbmQgYml0Z28ga2V5IGluIHRoYXQgb3JkZXJcbiAqIEByZXR1cm5zIHt7c2NyaXB0UHViS2V5fX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVGFwcm9vdFNjcmlwdDJvZjMocHVia2V5czogVHJpcGxlPEJ1ZmZlcj4pOiBTcGVuZGFibGVTY3JpcHQge1xuICBjb25zdCB7IG91dHB1dCB9ID0gY3JlYXRlUGF5bWVudFAydHIocHVia2V5cyk7XG4gIGFzc2VydChCdWZmZXIuaXNCdWZmZXIob3V0cHV0KSk7XG4gIHJldHVybiB7XG4gICAgc2NyaXB0UHViS2V5OiBvdXRwdXQsXG4gIH07XG59XG4iXX0=

@@ -7,7 +7,9 @@ /// <reference types="node" />

import { UtxoTransactionBuilder } from './UtxoTransactionBuilder';
import { ScriptType2Of3 } from './outputScripts';
import { ScriptType, ScriptType2Of3 } from './outputScripts';
import { Triple } from './types';
declare const inputTypes: readonly ["multisig", "nonstandard", "nulldata", "pubkey", "pubkeyhash", "scripthash", "witnesspubkeyhash", "witnessscripthash", "taproot", "taprootnofn", "witnesscommitment"];
declare type InputType = typeof inputTypes[number];
export declare function isPlaceholderSignature(v: number | Buffer): boolean;
export interface ParsedSignatureScript {
scriptType: ScriptType | 'p2pkh' | undefined;
isSegwitInput: boolean;

@@ -18,8 +20,19 @@ inputClassification: InputType;

}
export interface ParsedSignatureP2PKH extends ParsedSignatureScript {
export interface ParsedSignatureScriptUnknown extends ParsedSignatureScript {
scriptType: undefined;
}
export interface ParsedSignatureScriptP2PK extends ParsedSignatureScript {
scriptType: 'p2shP2pk';
inputClassification: 'scripthash';
}
export interface ParsedSignatureScriptP2PKH extends ParsedSignatureScript {
scriptType: 'p2pkh';
inputClassification: 'pubkeyhash';
signatures: [Buffer];
publicKeys: [Buffer];
pubScript: Buffer;
pubScript?: Buffer;
}
export interface ParsedSignatureScript2Of3 extends ParsedSignatureScript {
scriptType: 'p2sh' | 'p2shP2wsh' | 'p2wsh';
inputClassification: 'scripthash' | 'witnessscripthash';
signatures: [Buffer, Buffer] | [Buffer | 0, Buffer | 0, Buffer | 0];

@@ -30,2 +43,4 @@ publicKeys: [Buffer, Buffer, Buffer];

export interface ParsedSignatureScriptTaproot extends ParsedSignatureScript {
scriptType: 'p2tr';
inputClassification: 'taproot';
signatures: [Buffer, Buffer];

@@ -36,3 +51,2 @@ publicKeys: [Buffer, Buffer];

}
export declare function isParsedSignatureScriptTaproot(parsed: ParsedSignatureScript): parsed is ParsedSignatureScriptTaproot;
export declare function getDefaultSigHash(network: Network, scriptType?: ScriptType2Of3): number;

@@ -48,3 +62,3 @@ /**

*/
export declare function parseSignatureScript(input: TxInput): ParsedSignatureScript | ParsedSignatureP2PKH | ParsedSignatureScript2Of3 | ParsedSignatureScriptTaproot;
export declare function parseSignatureScript(input: TxInput): ParsedSignatureScriptUnknown | ParsedSignatureScriptP2PK | ParsedSignatureScriptP2PKH | ParsedSignatureScript2Of3 | ParsedSignatureScriptTaproot;
export declare function parseSignatureScript2Of3(input: TxInput): ParsedSignatureScript2Of3 | ParsedSignatureScriptTaproot;

@@ -51,0 +65,0 @@ /**

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.signInput2Of3 = exports.signInputP2shP2pk = exports.verifySignature = exports.getSignatureVerifications = exports.parseSignatureScript2Of3 = exports.parseSignatureScript = exports.getDefaultSigHash = exports.isParsedSignatureScriptTaproot = void 0;
exports.signInput2Of3 = exports.signInputP2shP2pk = exports.verifySignature = exports.getSignatureVerifications = exports.parseSignatureScript2Of3 = exports.parseSignatureScript = exports.getDefaultSigHash = exports.isPlaceholderSignature = void 0;
const opcodes = require("bitcoin-ops");

@@ -10,2 +10,3 @@ const bitcoinjs_lib_1 = require("bitcoinjs-lib");

const outputScripts_1 = require("./outputScripts");
const types_1 = require("./types");
const inputTypes = [

@@ -24,6 +25,9 @@ 'multisig',

];
function isParsedSignatureScriptTaproot(parsed) {
return parsed.inputClassification === 'taproot';
function isPlaceholderSignature(v) {
if (Buffer.isBuffer(v)) {
return v.length === 0;
}
return v === 0;
}
exports.isParsedSignatureScriptTaproot = isParsedSignatureScriptTaproot;
exports.isPlaceholderSignature = isPlaceholderSignature;
function getDefaultSigHash(network, scriptType) {

@@ -72,5 +76,5 @@ switch (coins_1.getMainnet(network)) {

if (!decompiledSigScript) {
return { isSegwitInput, inputClassification };
return { scriptType: undefined, isSegwitInput, inputClassification };
}
if (inputClassification === bitcoinjs_lib_1.classify.types.P2PKH) {
if (inputClassification === 'pubkeyhash') {
/* istanbul ignore next */

@@ -88,5 +92,12 @@ if (!decompiledSigScript || decompiledSigScript.length !== 2) {

const pubScript = bitcoinjs_lib_1.payments.p2pkh({ pubkey: publicKey }).output;
return { isSegwitInput, inputClassification, signatures, publicKeys, pubScript };
return {
scriptType: 'p2pkh',
isSegwitInput,
inputClassification,
signatures,
publicKeys,
pubScript,
};
}
if (inputClassification === bitcoinjs_lib_1.classify.types.P2TR) {
if (inputClassification === 'taproot') {
// assumes no annex

@@ -98,3 +109,3 @@ if (input.witness.length !== 4) {

const tapscriptClassification = bitcoinjs_lib_1.classify.output(tapscript);
if (tapscriptClassification !== bitcoinjs_lib_1.classify.types.P2TR_NS) {
if (tapscriptClassification !== 'taprootnofn') {
throw new Error(`tapscript must be n of n multisig`);

@@ -107,2 +118,3 @@ }

return {
scriptType: 'p2tr',
isSegwitInput,

@@ -134,5 +146,4 @@ inputClassification,

// Transactions built with `.buildIncomplete()` have three signatures, where missing signatures are substituted with `OP_0`.
const expectedScriptType = inputClassification === bitcoinjs_lib_1.classify.types.P2SH || inputClassification === bitcoinjs_lib_1.classify.types.P2WSH;
if (!expectedScriptType) {
return { isSegwitInput, inputClassification };
if (inputClassification !== 'scripthash' && inputClassification !== 'witnessscripthash') {
return { scriptType: undefined, isSegwitInput, inputClassification };
}

@@ -145,4 +156,13 @@ const pubScript = decompiledSigScript[decompiledSigScript.length - 1];

const p2shOutputClassification = bitcoinjs_lib_1.classify.output(pubScript);
if (inputClassification === 'scripthash' && p2shOutputClassification === 'pubkey') {
return {
scriptType: 'p2shP2pk',
isSegwitInput,
inputClassification,
p2shOutputClassification,
};
}
if (p2shOutputClassification !== 'multisig') {
return {
scriptType: undefined,
isSegwitInput,

@@ -164,3 +184,3 @@ inputClassification,

if (!expectedScriptLength) {
return { isSegwitInput, inputClassification };
return { scriptType: undefined, isSegwitInput, inputClassification };
}

@@ -196,3 +216,3 @@ if (isSegwitInput) {

});
if (publicKeys.length !== 3) {
if (!types_1.isTriple(publicKeys)) {
/* istanbul ignore next */

@@ -219,3 +239,14 @@ throw new Error(`expected 3 public keys, got ${publicKeys.length}`);

}
const scriptType = input.witness.length
? input.script.length
? 'p2shP2wsh'
: 'p2wsh'
: input.script.length
? 'p2sh'
: undefined;
if (scriptType === undefined) {
throw new Error('illegal state');
}
return {
scriptType,
isSegwitInput,

@@ -385,2 +416,2 @@ inputClassification,

exports.signInput2Of3 = signInput2Of3;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmF0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JpdGdvL3NpZ25hdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1Q0FBdUM7QUFHdkMsaURBV3VCO0FBR3ZCLHdDQUF3QztBQUN4QyxvQ0FBc0M7QUFDdEMsdURBQW9EO0FBRXBELG1EQU15QjtBQUd6QixNQUFNLFVBQVUsR0FBRztJQUNqQixVQUFVO0lBQ1YsYUFBYTtJQUNiLFVBQVU7SUFDVixRQUFRO0lBQ1IsWUFBWTtJQUNaLFlBQVk7SUFDWixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLFNBQVM7SUFDVCxhQUFhO0lBQ2IsbUJBQW1CO0NBQ1gsQ0FBQztBQW1DWCxTQUFnQiw4QkFBOEIsQ0FBQyxNQUE2QjtJQUMxRSxPQUFPLE1BQU0sQ0FBQyxtQkFBbUIsS0FBSyxTQUFTLENBQUM7QUFDbEQsQ0FBQztBQUZELHdFQUVDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsT0FBZ0IsRUFBRSxVQUEyQjtJQUM3RSxRQUFRLGtCQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDM0IsS0FBSyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQzFCLEtBQUssUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUN4QixLQUFLLFFBQVEsQ0FBQyxXQUFXO1lBQ3ZCLE9BQU8sMkJBQVcsQ0FBQyxXQUFXLEdBQUcsaUNBQWUsQ0FBQyxjQUFjLENBQUM7UUFDbEU7WUFDRSxPQUFPLFVBQVUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLDJCQUFXLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQywyQkFBVyxDQUFDLFdBQVcsQ0FBQztLQUN4RjtBQUNILENBQUM7QUFURCw4Q0FTQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQ2xDLEtBQWM7SUFFZCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDL0Ms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Q0FBQztBQWhDRCxzQ0FnQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvcGNvZGVzIGZyb20gJ2JpdGNvaW4tb3BzJztcbmltcG9ydCAqIGFzIGJpcDMyIGZyb20gJ2JpcDMyJztcblxuaW1wb3J0IHtcbiAgRUNQYWlyLFxuICBwYXltZW50cyxcbiAgc2NyaXB0LFxuICBUcmFuc2FjdGlvbixcbiAgVHhJbnB1dCxcbiAgc2Nobm9yckJpcDM0MCxcbiAgY2xhc3NpZnksXG4gIHRhcHJvb3QsXG4gIFR4T3V0cHV0LFxuICBTY3JpcHRTaWduYXR1cmUsXG59IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuXG5pbXBvcnQgeyBOZXR3b3JrIH0gZnJvbSAnLi4vbmV0d29ya1R5cGVzJztcbmltcG9ydCAqIGFzIG5ldHdvcmtzIGZyb20gJy4uL25ldHdvcmtzJztcbmltcG9ydCB7IGdldE1haW5uZXQgfSBmcm9tICcuLi9jb2lucyc7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb24gfSBmcm9tICcuL1V0eG9UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9VdHhvVHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7XG4gIGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMsXG4gIGNyZWF0ZU91dHB1dFNjcmlwdFAyc2hQMnBrLFxuICBjcmVhdGVTcGVuZFNjcmlwdFAydHIsXG4gIFNjcmlwdFR5cGUyT2YzLFxuICBzY3JpcHRUeXBlMk9mM0FzUHJldk91dFR5cGUsXG59IGZyb20gJy4vb3V0cHV0U2NyaXB0cyc7XG5pbXBvcnQgeyBUcmlwbGUgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgaW5wdXRUeXBlcyA9IFtcbiAgJ211bHRpc2lnJyxcbiAgJ25vbnN0YW5kYXJkJyxcbiAgJ251bGxkYXRhJyxcbiAgJ3B1YmtleScsXG4gICdwdWJrZXloYXNoJyxcbiAgJ3NjcmlwdGhhc2gnLFxuICAnd2l0bmVzc3B1YmtleWhhc2gnLFxuICAnd2l0bmVzc3NjcmlwdGhhc2gnLFxuICAndGFwcm9vdCcsXG4gICd0YXByb290bm9mbicsXG4gICd3aXRuZXNzY29tbWl0bWVudCcsXG5dIGFzIGNvbnN0O1xuXG50eXBlIElucHV0VHlwZSA9IHR5cGVvZiBpbnB1dFR5cGVzW251bWJlcl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkU2lnbmF0dXJlU2NyaXB0IHtcbiAgaXNTZWd3aXRJbnB1dDogYm9vbGVhbjtcbiAgaW5wdXRDbGFzc2lmaWNhdGlvbjogSW5wdXRUeXBlO1xuICBwMnNoT3V0cHV0Q2xhc3NpZmljYXRpb24/OiBzdHJpbmc7XG4gIHB1YmxpY0tleXM/OiBCdWZmZXJbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRTaWduYXR1cmVQMlBLSCBleHRlbmRzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdCB7XG4gIHNpZ25hdHVyZXM6IFtCdWZmZXJdO1xuICBwdWJsaWNLZXlzOiBbQnVmZmVyXTtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkU2lnbmF0dXJlU2NyaXB0Mk9mMyBleHRlbmRzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdCB7XG4gIHNpZ25hdHVyZXM6XG4gICAgfCBbQnVmZmVyLCBCdWZmZXJdIC8vIGZ1bGx5LXNpZ25lZCB0cmFuc2FjdGlvbnMgd2l0aCBzaWduYXR1cmVzXG4gICAgLyogUGFydGlhbGx5IHNpZ25lZCB0cmFuc2FjdGlvbnMgd2l0aCBwbGFjZWhvbGRlciBzaWduYXR1cmVzLlxuICAgICAgIEZvciBwMnNoLCB0aGUgcGxhY2Vob2xkZXIgaXMgT1BfMCAobnVtYmVyIDApICovXG4gICAgfCBbQnVmZmVyIHwgMCwgQnVmZmVyIHwgMCwgQnVmZmVyIHwgMF07XG4gIHB1YmxpY0tleXM6IFtCdWZmZXIsIEJ1ZmZlciwgQnVmZmVyXTtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdCBleHRlbmRzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdCB7XG4gIC8vIFAyVFIgdGFwc2NyaXB0IHNwZW5kcyBhcmUgZm9yIDItb2YtMiBtdWx0aXNpZyBzY3JpcHRzXG4gIHNpZ25hdHVyZXM6IFtCdWZmZXIsIEJ1ZmZlcl07IC8vIG1pc3Npbmcgc2lnbmF0dXJlIGlzIGVuY29kZWQgYXMgZW1wdHkgYnVmZmVyXG4gIHB1YmxpY0tleXM6IFtCdWZmZXIsIEJ1ZmZlcl07XG4gIHB1YlNjcmlwdDogQnVmZmVyO1xuICBjb250cm9sQmxvY2s6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdChwYXJzZWQ6IFBhcnNlZFNpZ25hdHVyZVNjcmlwdCk6IHBhcnNlZCBpcyBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290IHtcbiAgcmV0dXJuIHBhcnNlZC5pbnB1dENsYXNzaWZpY2F0aW9uID09PSAndGFwcm9vdCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0U2lnSGFzaChuZXR3b3JrOiBOZXR3b3JrLCBzY3JpcHRUeXBlPzogU2NyaXB0VHlwZTJPZjMpOiBudW1iZXIge1xuICBzd2l0Y2ggKGdldE1haW5uZXQobmV0d29yaykpIHtcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW5jYXNoOlxuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbnN2OlxuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbmdvbGQ6XG4gICAgICByZXR1cm4gVHJhbnNhY3Rpb24uU0lHSEFTSF9BTEwgfCBVdHhvVHJhbnNhY3Rpb24uU0lHSEFTSF9GT1JLSUQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzY3JpcHRUeXBlID09PSAncDJ0cicgPyBUcmFuc2FjdGlvbi5TSUdIQVNIX0RFRkFVTFQgOiBUcmFuc2FjdGlvbi5TSUdIQVNIX0FMTDtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGEgdHJhbnNhY3Rpb24ncyBzaWduYXR1cmUgc2NyaXB0IHRvIG9idGFpbiBwdWJsaWMga2V5cywgc2lnbmF0dXJlcywgdGhlIHNpZyBzY3JpcHQsXG4gKiBhbmQgb3RoZXIgcHJvcGVydGllcy5cbiAqXG4gKiBPbmx5IHN1cHBvcnRzIHNjcmlwdCB0eXBlcyB1c2VkIGluIEJpdEdvIHRyYW5zYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gaW5wdXRcbiAqIEByZXR1cm5zIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmVTY3JpcHQoXG4gIGlucHV0OiBUeElucHV0XG4pOiBQYXJzZWRTaWduYXR1cmVTY3JpcHQgfCBQYXJzZWRTaWduYXR1cmVQMlBLSCB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdDJPZjMgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290IHtcbiAgY29uc3QgaXNTZWd3aXRJbnB1dCA9IGlucHV0LndpdG5lc3MubGVuZ3RoID4gMDtcbiAgY29uc3QgaXNOYXRpdmVTZWd3aXRJbnB1dCA9IGlucHV0LnNjcmlwdC5sZW5ndGggPT09IDA7XG4gIGxldCBkZWNvbXBpbGVkU2lnU2NyaXB0OiBBcnJheTxCdWZmZXIgfCBudW1iZXI+IHwgbnVsbDtcbiAgbGV0IGlucHV0Q2xhc3NpZmljYXRpb246IElucHV0VHlwZTtcbiAgaWYgKGlzU2Vnd2l0SW5wdXQpIHtcbiAgICAvLyBUaGUgZGVjb21waWxlZFNpZ1NjcmlwdCBpcyB0aGUgc2NyaXB0IGNvbnRhaW5pbmcgdGhlIHNpZ25hdHVyZXMsIHB1YmxpYyBrZXlzLCBhbmQgdGhlIHNjcmlwdCB0aGF0IHdhcyBjb21taXR0ZWRcbiAgICAvLyB0byAocHViU2NyaXB0KS4gSWYgdGhpcyBpcyBhIHNlZ3dpdCBpbnB1dCB0aGUgZGVjb21waWxlZFNpZ1NjcmlwdCBpcyBpbiB0aGUgd2l0bmVzcywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0XG4gICAgLy8gaXMgbmF0aXZlIG9yIG5vdC4gVGhlIGlucHV0Q2xhc3NpZmljYXRpb24gaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgaW5wdXQgaXMgbmF0aXZlIHRvIGdpdmUgYW5cbiAgICAvLyBhY2N1cmF0ZSBjbGFzc2lmaWNhdGlvbi4gTm90ZSB0aGF0IHAyc2hQMndzaCBpbnB1dHMgd2lsbCBiZSBjbGFzc2lmaWVkIGFzIHAyc2ggYW5kIG5vdCBwMndzaC5cbiAgICBkZWNvbXBpbGVkU2lnU2NyaXB0ID0gaW5wdXQud2l0bmVzcztcbiAgICBpZiAoaXNOYXRpdmVTZWd3aXRJbnB1dCkge1xuICAgICAgaW5wdXRDbGFzc2lmaWNhdGlvbiA9IGNsYXNzaWZ5LndpdG5lc3MoZGVjb21waWxlZFNpZ1NjcmlwdCBhcyBCdWZmZXJbXSwgdHJ1ZSkgYXMgSW5wdXRUeXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dENsYXNzaWZpY2F0aW9uID0gY2xhc3NpZnkuaW5wdXQoaW5wdXQuc2NyaXB0LCB0cnVlKSBhcyBJbnB1dFR5cGU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlucHV0Q2xhc3NpZmljYXRpb24gPSBjbGFzc2lmeS5pbnB1dChpbnB1dC5zY3JpcHQsIHRydWUpIGFzIElucHV0VHlwZTtcbiAgICBkZWNvbXBpbGVkU2lnU2NyaXB0ID0gc2NyaXB0LmRlY29tcGlsZShpbnB1dC5zY3JpcHQpO1xuICB9XG5cbiAgaWYgKCFkZWNvbXBpbGVkU2lnU2NyaXB0KSB7XG4gICAgcmV0dXJuIHsgaXNTZWd3aXRJbnB1dCwgaW5wdXRDbGFzc2lmaWNhdGlvbiB9O1xuICB9XG5cbiAgaWYgKGlucHV0Q2xhc3NpZmljYXRpb24gPT09IGNsYXNzaWZ5LnR5cGVzLlAyUEtIKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoIWRlY29tcGlsZWRTaWdTY3JpcHQgfHwgZGVjb21waWxlZFNpZ1NjcmlwdC5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBzaWduYXR1cmUgZm9yIHAycGtoJyk7XG4gICAgfVxuICAgIGNvbnN0IFtzaWduYXR1cmUsIHB1YmxpY0tleV0gPSBkZWNvbXBpbGVkU2lnU2NyaXB0O1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoc2lnbmF0dXJlKSB8fCAhQnVmZmVyLmlzQnVmZmVyKHB1YmxpY0tleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBzaWduYXR1cmUgZm9yIHAycGtoJyk7XG4gICAgfVxuICAgIGNvbnN0IHB1YmxpY0tleXMgPSBbcHVibGljS2V5XTtcbiAgICBjb25zdCBzaWduYXR1cmVzOiBbQnVmZmVyXSA9IFtzaWduYXR1cmVdO1xuICAgIGNvbnN0IHB1YlNjcmlwdCA9IHBheW1lbnRzLnAycGtoKHsgcHVia2V5OiBwdWJsaWNLZXkgfSkub3V0cHV0O1xuXG4gICAgcmV0dXJuIHsgaXNTZWd3aXRJbnB1dCwgaW5wdXRDbGFzc2lmaWNhdGlvbiwgc2lnbmF0dXJlcywgcHVibGljS2V5cywgcHViU2NyaXB0IH07XG4gIH1cblxuICBpZiAoaW5wdXRDbGFzc2lmaWNhdGlvbiA9PT0gY2xhc3NpZnkudHlwZXMuUDJUUikge1xuICAgIC8vIGFzc3VtZXMgbm8gYW5uZXhcbiAgICBpZiAoaW5wdXQud2l0bmVzcy5sZW5ndGggIT09IDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5yZWNvZ25pemVkIHRhcHJvb3QgaW5wdXRgKTtcbiAgICB9XG4gICAgY29uc3QgW3NpZzEsIHNpZzIsIHRhcHNjcmlwdCwgY29udHJvbEJsb2NrXSA9IGlucHV0LndpdG5lc3M7XG4gICAgY29uc3QgdGFwc2NyaXB0Q2xhc3NpZmljYXRpb24gPSBjbGFzc2lmeS5vdXRwdXQodGFwc2NyaXB0KTtcbiAgICBpZiAodGFwc2NyaXB0Q2xhc3NpZmljYXRpb24gIT09IGNsYXNzaWZ5LnR5cGVzLlAyVFJfTlMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdGFwc2NyaXB0IG11c3QgYmUgbiBvZiBuIG11bHRpc2lnYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHVibGljS2V5cyA9IHBheW1lbnRzLnAydHJfbnMoeyBvdXRwdXQ6IHRhcHNjcmlwdCB9KS5wdWJrZXlzO1xuICAgIGlmICghcHVibGljS2V5cyB8fCBwdWJsaWNLZXlzLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCAyIHB1YmtleXMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNTZWd3aXRJbnB1dCxcbiAgICAgIGlucHV0Q2xhc3NpZmljYXRpb24sXG4gICAgICBzaWduYXR1cmVzOiBbc2lnMSwgc2lnMl0ubWFwKChiKSA9PiB7XG4gICAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgc2lnbmF0dXJlIGVsZW1lbnQgJHtifWApO1xuICAgICAgfSksXG4gICAgICBwdWJsaWNLZXlzLFxuICAgICAgcHViU2NyaXB0OiB0YXBzY3JpcHQsXG4gICAgICBjb250cm9sQmxvY2ssXG4gICAgfSBhcyBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290O1xuICB9XG5cbiAgLy8gTm90ZSB0aGUgYXNzdW1wdGlvbiBoZXJlIHRoYXQgaWYgd2UgaGF2ZSBhIHAyc2ggb3IgcDJ3c2ggaW5wdXQgaXQgd2lsbCBiZSBtdWx0aXNpZyAoYXBwcm9wcmlhdGUgYmVjYXVzZSB0aGVcbiAgLy8gQml0R28gcGxhdGZvcm0gb25seSBzdXBwb3J0cyBtdWx0aXNpZyB3aXRoaW4gdGhlc2UgdHlwZXMgb2YgaW5wdXRzLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgcmVwbGF5IHByb3RlY3Rpb24gaW5wdXRzLFxuICAvLyB3aGljaCBhcmUgc2luZ2xlIHNpZ25hdHVyZSBwMnNoKS4gU2lnbmF0dXJlcyBhcmUgYWxsIGJ1dCB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgZGVjb21waWxlZFNpZ1NjcmlwdC5cbiAgLy8gVGhlIHJlZGVlbVNjcmlwdC93aXRuZXNzU2NyaXB0IChkZXBlbmRpbmcgb24gd2hpY2ggdHlwZSBvZiBpbnB1dCB0aGlzIGlzKSBpcyB0aGUgbGFzdCBlbnRyeSBpblxuICAvLyB0aGUgZGVjb21waWxlZFNpZ1NjcmlwdCAoZGVub3RlZCBoZXJlIGFzIHRoZSBwdWJTY3JpcHQpLiBUaGUgcHVibGljIGtleXMgYXJlIHRoZSBzZWNvbmQgdGhyb3VnaFxuICAvLyBhbnRlcGVudWx0aW1hdGUgZW50cmllcyBpbiB0aGUgZGVjb21waWxlZFB1YlNjcmlwdC4gU2VlIGJlbG93IGZvciBhIHZpc3VhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHlwaWNhbCAyLW9mLTNcbiAgLy8gbXVsdGlzaWcgc2V0dXA6XG4gIC8vXG4gIC8vICAgZGVjb21waWxlZFNpZ1NjcmlwdCA9IDAgPHNpZzE+IDxzaWcyPiBbPHNpZzM+XSA8cHViU2NyaXB0PlxuICAvLyAgIGRlY29tcGlsZWRQdWJTY3JpcHQgPSAyIDxwdWIxPiA8cHViMj4gPHB1YjM+IDMgT1BfQ0hFQ0tNVUxUSVNJR1xuICAvL1xuICAvLyBUcmFuc2FjdGlvbnMgYnVpbHQgd2l0aCBgLmJ1aWxkKClgIG9ubHkgaGF2ZSB0d28gc2lnbmF0dXJlcyBgPHNpZzE+YCBhbmQgYDxzaWcyPmAgaW4gX2RlY29tcGlsZWRTaWdTY3JpcHRfLlxuICAvLyBUcmFuc2FjdGlvbnMgYnVpbHQgd2l0aCBgLmJ1aWxkSW5jb21wbGV0ZSgpYCBoYXZlIHRocmVlIHNpZ25hdHVyZXMsIHdoZXJlIG1pc3Npbmcgc2lnbmF0dXJlcyBhcmUgc3Vic3RpdHV0ZWQgd2l0aCBgT1BfMGAuXG4gIGNvbnN0IGV4cGVjdGVkU2NyaXB0VHlwZSA9XG4gICAgaW5wdXRDbGFzc2lmaWNhdGlvbiA9PT0gY2xhc3NpZnkudHlwZXMuUDJTSCB8fCBpbnB1dENsYXNzaWZpY2F0aW9uID09PSBjbGFzc2lmeS50eXBlcy5QMldTSDtcblxuICBpZiAoIWV4cGVjdGVkU2NyaXB0VHlwZSkge1xuICAgIHJldHVybiB7IGlzU2Vnd2l0SW5wdXQsIGlucHV0Q2xhc3NpZmljYXRpb24gfTtcbiAgfVxuXG4gIGNvbnN0IHB1YlNjcmlwdCA9IGRlY29tcGlsZWRTaWdTY3JpcHRbZGVjb21waWxlZFNpZ1NjcmlwdC5sZW5ndGggLSAxXTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIocHViU2NyaXB0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwdWJTY3JpcHRgKTtcbiAgfVxuXG4gIGNvbnN0IHAyc2hPdXRwdXRDbGFzc2lmaWNhdGlvbiA9IGNsYXNzaWZ5Lm91dHB1dChwdWJTY3JpcHQpO1xuXG4gIGlmIChwMnNoT3V0cHV0Q2xhc3NpZmljYXRpb24gIT09ICdtdWx0aXNpZycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNTZWd3aXRJbnB1dCxcbiAgICAgIGlucHV0Q2xhc3NpZmljYXRpb24sXG4gICAgICBwMnNoT3V0cHV0Q2xhc3NpZmljYXRpb24sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGRlY29tcGlsZWRQdWJTY3JpcHQgPSBzY3JpcHQuZGVjb21waWxlKHB1YlNjcmlwdCk7XG4gIGlmIChkZWNvbXBpbGVkUHViU2NyaXB0ID09PSBudWxsKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNvdWxkIG5vdCBkZWNvbXBpbGUgcHViU2NyaXB0YCk7XG4gIH1cblxuICBjb25zdCBleHBlY3RlZFNjcmlwdExlbmd0aCA9XG4gICAgLy8gY29tcGxldGUgdHJhbnNhY3Rpb25zIHdpdGggMiBzaWduYXR1cmVzXG4gICAgZGVjb21waWxlZFNpZ1NjcmlwdC5sZW5ndGggPT09IDQgfHxcbiAgICAvLyBpbmNvbXBsZXRlIHRyYW5zYWN0aW9uIHdpdGggMyBzaWduYXR1cmVzIG9yIHNpZ25hdHVyZSBwbGFjZWhvbGRlcnNcbiAgICBkZWNvbXBpbGVkU2lnU2NyaXB0Lmxlbmd0aCA9PT0gNTtcblxuICBpZiAoIWV4cGVjdGVkU2NyaXB0TGVuZ3RoKSB7XG4gICAgcmV0dXJuIHsgaXNTZWd3aXRJbnB1dCwgaW5wdXRDbGFzc2lmaWNhdGlvbiB9O1xuICB9XG5cbiAgaWYgKGlzU2Vnd2l0SW5wdXQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGRlY29tcGlsZWRTaWdTY3JpcHRbMF0pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIGRlY29tcGlsZWRTaWdTY3JpcHRbMF0gdG8gYmUgYSBidWZmZXIgZm9yIHNlZ3dpdCBpbnB1dHNgKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoZGVjb21waWxlZFNpZ1NjcmlwdFswXS5sZW5ndGggIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgd2l0bmVzcyBzdGFjayBleHBlY3RlZCB0byBzdGFydCB3aXRoIGVtcHR5IGJ1ZmZlcmApO1xuICAgIH1cbiAgfSBlbHNlIGlmIChkZWNvbXBpbGVkU2lnU2NyaXB0WzBdICE9PSBvcGNvZGVzLk9QXzApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHNpZ1NjcmlwdCBleHBlY3RlZCB0byBzdGFydCB3aXRoIE9QXzBgKTtcbiAgfVxuXG4gIGNvbnN0IHNpZ25hdHVyZXMgPSBkZWNvbXBpbGVkU2lnU2NyaXB0LnNsaWNlKDEgLyogaWdub3JlIGxlYWRpbmcgT1BfMCAqLywgLTEgLyogaWdub3JlIHRyYWlsaW5nIHB1YlNjcmlwdCAqLyk7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmIChzaWduYXR1cmVzLmxlbmd0aCAhPT0gMiAmJiBzaWduYXR1cmVzLmxlbmd0aCAhPT0gMykge1xuICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgMiBvciAzIHNpZ25hdHVyZXMsIGdvdCAke3NpZ25hdHVyZXMubGVuZ3RofWApO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKGRlY29tcGlsZWRQdWJTY3JpcHQubGVuZ3RoICE9PSA2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIGRlY29tcGlsZWRQdWJTY3JpcHQgbGVuZ3RoYCk7XG4gIH1cbiAgY29uc3QgcHVibGljS2V5cyA9IGRlY29tcGlsZWRQdWJTY3JpcHQuc2xpY2UoMSwgLTIpIGFzIEJ1ZmZlcltdO1xuICBwdWJsaWNLZXlzLmZvckVhY2goKGIpID0+IHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9XG4gIH0pO1xuICBpZiAocHVibGljS2V5cy5sZW5ndGggIT09IDMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgMyBwdWJsaWMga2V5cywgZ290ICR7cHVibGljS2V5cy5sZW5ndGh9YCk7XG4gIH1cblxuICAvLyBPcCBjb2RlcyA4MSB0aHJvdWdoIDk2IHJlcHJlc2VudCBudW1iZXJzIDEgdGhyb3VnaCAxNiAoc2VlIGh0dHBzOi8vZW4uYml0Y29pbi5pdC93aWtpL1NjcmlwdCNPcGNvZGVzKSwgd2hpY2ggaXNcbiAgLy8gd2h5IHdlIHN1YnRyYWN0IGJ5IDgwIHRvIGdldCB0aGUgbnVtYmVyIG9mIHNpZ25hdHVyZXMgKG4pIGFuZCB0aGUgbnVtYmVyIG9mIHB1YmxpYyBrZXlzIChtKSBpbiBhbiBuLW9mLW0gc2V0dXAuXG4gIGNvbnN0IGxlbiA9IGRlY29tcGlsZWRQdWJTY3JpcHQubGVuZ3RoO1xuICBjb25zdCBzaWduYXR1cmVUaHJlc2hvbGQgPSAoZGVjb21waWxlZFB1YlNjcmlwdFswXSBhcyBudW1iZXIpIC0gODA7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmIChzaWduYXR1cmVUaHJlc2hvbGQgIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIHNpZ25hdHVyZVRocmVzaG9sZCAyLCBnb3QgJHtzaWduYXR1cmVUaHJlc2hvbGR9YCk7XG4gIH1cbiAgY29uc3QgblB1YktleXMgPSAoZGVjb21waWxlZFB1YlNjcmlwdFtsZW4gLSAyXSBhcyBudW1iZXIpIC0gODA7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmIChuUHViS2V5cyAhPT0gMykge1xuICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgblB1YktleXMgMywgZ290ICR7blB1YktleXN9YCk7XG4gIH1cblxuICBjb25zdCBsYXN0T3BDb2RlID0gZGVjb21waWxlZFB1YlNjcmlwdFtsZW4gLSAxXTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKGxhc3RPcENvZGUgIT09IG9wY29kZXMuT1BfQ0hFQ0tNVUxUSVNJRykge1xuICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgb3Bjb2RlICMke29wY29kZXMuT1BfQ0hFQ0tNVUxUSVNJR30sIGdvdCBvcGNvZGUgIyR7bGFzdE9wQ29kZX1gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaXNTZWd3aXRJbnB1dCxcbiAgICBpbnB1dENsYXNzaWZpY2F0aW9uLFxuICAgIHAyc2hPdXRwdXRDbGFzc2lmaWNhdGlvbixcbiAgICBzaWduYXR1cmVzOiBzaWduYXR1cmVzLm1hcCgoYikgPT4ge1xuICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihiKSB8fCBiID09PSAwKSB7XG4gICAgICAgIHJldHVybiBiO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHNpZ25hdHVyZSBlbGVtZW50ICR7Yn1gKTtcbiAgICB9KSBhcyBbQnVmZmVyLCBCdWZmZXJdIHwgW0J1ZmZlciwgQnVmZmVyLCBCdWZmZXJdLFxuICAgIHB1YmxpY0tleXMsXG4gICAgcHViU2NyaXB0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmVTY3JpcHQyT2YzKGlucHV0OiBUeElucHV0KTogUGFyc2VkU2lnbmF0dXJlU2NyaXB0Mk9mMyB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3Qge1xuICBjb25zdCByZXN1bHQgPSBwYXJzZVNpZ25hdHVyZVNjcmlwdChpbnB1dCkgYXMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0Mk9mMztcblxuICBpZiAoXG4gICAgIVtjbGFzc2lmeS50eXBlcy5QMldTSCwgY2xhc3NpZnkudHlwZXMuUDJTSCwgY2xhc3NpZnkudHlwZXMuUDJQS0gsIGNsYXNzaWZ5LnR5cGVzLlAyVFJdLmluY2x1ZGVzKFxuICAgICAgcmVzdWx0LmlucHV0Q2xhc3NpZmljYXRpb25cbiAgICApXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBpbnB1dENsYXNzaWZpY2F0aW9uICR7cmVzdWx0LmlucHV0Q2xhc3NpZmljYXRpb259YCk7XG4gIH1cbiAgaWYgKCFyZXN1bHQuc2lnbmF0dXJlcykge1xuICAgIHRocm93IG5ldyBFcnJvcihgbWlzc2luZyBzaWduYXR1cmVzYCk7XG4gIH1cbiAgaWYgKFxuICAgIHJlc3VsdC5wdWJsaWNLZXlzLmxlbmd0aCAhPT0gMyAmJlxuICAgIChyZXN1bHQucHVibGljS2V5cy5sZW5ndGggIT09IDIgfHwgcmVzdWx0LmlucHV0Q2xhc3NpZmljYXRpb24gIT09IGNsYXNzaWZ5LnR5cGVzLlAyVFIpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBwdWJrZXkgY291bnRgKTtcbiAgfVxuICBpZiAoIXJlc3VsdC5wdWJTY3JpcHQgfHwgcmVzdWx0LnB1YlNjcmlwdC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHB1YlNjcmlwdCBtaXNzaW5nIG9yIGVtcHR5YCk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENvbnN0cmFpbnRzIGZvciBzaWduYXR1cmUgdmVyaWZpY2F0aW9ucy5cbiAqIFBhcmFtZXRlcnMgYXJlIGNvbmp1bmN0aXZlOiBpZiBtdWx0aXBsZSBwYXJhbWV0ZXJzIGFyZSBzZXQsIGEgdmVyaWZpY2F0aW9uIGZvciBhbiBpbmRpdmlkdWFsXG4gKiBzaWduYXR1cmUgbXVzdCBzYXRpc2Z5IGFsbCBvZiB0aGVtLlxuICovXG5leHBvcnQgdHlwZSBWZXJpZmljYXRpb25TZXR0aW5ncyA9IHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgc2lnbmF0dXJlIHRvIHZlcmlmeS4gT25seSBpdGVyYXRlcyBvdmVyIG5vbi1lbXB0eSBzaWduYXR1cmVzLlxuICAgKi9cbiAgc2lnbmF0dXJlSW5kZXg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgaGV4IG9mIHRoZSBwdWJsaWMga2V5IHRvIHZlcmlmeS5cbiAgICovXG4gIHB1YmxpY0tleT86IEJ1ZmZlcjtcbn07XG5cbi8qKlxuICogUmVzdWx0IGZvciBhIGluZGl2aWR1YWwgc2lnbmF0dXJlIHZlcmlmaWNhdGlvblxuICovXG5leHBvcnQgdHlwZSBTaWduYXR1cmVWZXJpZmljYXRpb24gPSB7XG4gIC8qKiBTZXQgdG8gdGhlIHB1YmxpYyBrZXkgdGhhdCBzaWduZWQgZm9yIHRoZSBzaWduYXR1cmUgKi9cbiAgc2lnbmVkQnk6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogR2V0IHNpZ25hdHVyZSB2ZXJpZmljYXRpb25zIGZvciBtdWx0c2lnIHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0gdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBpbnB1dEluZGV4XG4gKiBAcGFyYW0gYW1vdW50IC0gbXVzdCBiZSBzZXQgZm9yIHNlZ3dpdCB0cmFuc2FjdGlvbnMgYW5kIEJJUDE0MyB0cmFuc2FjdGlvbnNcbiAqIEBwYXJhbSB2ZXJpZmljYXRpb25TZXR0aW5nc1xuICogQHBhcmFtIHByZXZPdXRwdXRzIC0gbXVzdCBiZSBzZXQgZm9yIHAydHIgdHJhbnNhY3Rpb25zXG4gKiBAcmV0dXJucyBTaWduYXR1cmVWZXJpZmljYXRpb25bXSAtIGluIG9yZGVyIG9mIHBhcnNlZCBub24tZW1wdHkgc2lnbmF0dXJlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlVmVyaWZpY2F0aW9ucyhcbiAgdHJhbnNhY3Rpb246IFV0eG9UcmFuc2FjdGlvbixcbiAgaW5wdXRJbmRleDogbnVtYmVyLFxuICBhbW91bnQ6IG51bWJlcixcbiAgdmVyaWZpY2F0aW9uU2V0dGluZ3M6IFZlcmlmaWNhdGlvblNldHRpbmdzID0ge30sXG4gIHByZXZPdXRwdXRzPzogVHhPdXRwdXRbXVxuKTogU2lnbmF0dXJlVmVyaWZpY2F0aW9uW10ge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoIXRyYW5zYWN0aW9uLmlucykge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCB0cmFuc2FjdGlvbmApO1xuICB9XG5cbiAgY29uc3QgaW5wdXQgPSB0cmFuc2FjdGlvbi5pbnNbaW5wdXRJbmRleF07XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICghaW5wdXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIGlucHV0IGF0IGluZGV4ICR7aW5wdXRJbmRleH1gKTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZFNjcmlwdCA9IHBhcnNlU2lnbmF0dXJlU2NyaXB0Mk9mMyhpbnB1dCk7XG5cbiAgY29uc3Qgc2lnbmF0dXJlcyA9IHBhcnNlZFNjcmlwdC5zaWduYXR1cmVzXG4gICAgLmZpbHRlcigocykgPT4gcyAmJiBzLmxlbmd0aClcbiAgICAuZmlsdGVyKChzLCBpKSA9PiB2ZXJpZmljYXRpb25TZXR0aW5ncy5zaWduYXR1cmVJbmRleCA9PT0gdW5kZWZpbmVkIHx8IHZlcmlmaWNhdGlvblNldHRpbmdzLnNpZ25hdHVyZUluZGV4ID09PSBpKTtcblxuICBjb25zdCBwdWJsaWNLZXlzID0gcGFyc2VkU2NyaXB0LnB1YmxpY0tleXMuZmlsdGVyKFxuICAgIChidWYpID0+XG4gICAgICB2ZXJpZmljYXRpb25TZXR0aW5ncy5wdWJsaWNLZXkgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdmVyaWZpY2F0aW9uU2V0dGluZ3MucHVibGljS2V5LmVxdWFscyhidWYpIHx8XG4gICAgICB2ZXJpZmljYXRpb25TZXR0aW5ncy5wdWJsaWNLZXkuc2xpY2UoMSkuZXF1YWxzKGJ1ZilcbiAgKTtcblxuICByZXR1cm4gc2lnbmF0dXJlcy5tYXAoKHNpZ25hdHVyZUJ1ZmZlcikgPT4ge1xuICAgIGlmIChzaWduYXR1cmVCdWZmZXIgPT09IDAgfHwgc2lnbmF0dXJlQnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHsgc2lnbmVkQnk6IHVuZGVmaW5lZCB9O1xuICAgIH1cblxuICAgIGxldCBoYXNoVHlwZSA9IFRyYW5zYWN0aW9uLlNJR0hBU0hfREVGQVVMVDtcblxuICAgIGlmIChzaWduYXR1cmVCdWZmZXIubGVuZ3RoID09PSA2NSkge1xuICAgICAgaGFzaFR5cGUgPSBzaWduYXR1cmVCdWZmZXJbc2lnbmF0dXJlQnVmZmVyLmxlbmd0aCAtIDFdO1xuICAgICAgc2lnbmF0dXJlQnVmZmVyID0gc2lnbmF0dXJlQnVmZmVyLnNsaWNlKDAsIC0xKTtcbiAgICB9XG5cbiAgICBpZiAocGFyc2VkU2NyaXB0LmlucHV0Q2xhc3NpZmljYXRpb24gPT09IGNsYXNzaWZ5LnR5cGVzLlAyVFIpIHtcbiAgICAgIGlmICh2ZXJpZmljYXRpb25TZXR0aW5ncy5zaWduYXR1cmVJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgc2lnbmF0dXJlSW5kZXggcGFyYW1ldGVyIG5vdCBzdXBwb3J0ZWQgZm9yIHAydHJgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwcmV2T3V0cHV0cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHByZXZPdXRwdXRzIG5vdCBzZXRgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXZPdXRwdXRzLmxlbmd0aCAhPT0gdHJhbnNhY3Rpb24uaW5zLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHByZXZPdXRwdXRzIGxlbmd0aCAke3ByZXZPdXRwdXRzLmxlbmd0aH0sIGV4cGVjdGVkICR7dHJhbnNhY3Rpb24uaW5zLmxlbmd0aH1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBjb250cm9sQmxvY2ssIHB1YlNjcmlwdCB9ID0gcGFyc2VkU2NyaXB0IGFzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3Q7XG4gICAgICBjb25zdCBsZWFmSGFzaCA9IHRhcHJvb3QuZ2V0VGFwbGVhZkhhc2goY29udHJvbEJsb2NrLCBwdWJTY3JpcHQpO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlSGFzaCA9IHRyYW5zYWN0aW9uLmhhc2hGb3JXaXRuZXNzVjEoXG4gICAgICAgIGlucHV0SW5kZXgsXG4gICAgICAgIHByZXZPdXRwdXRzLm1hcCgoeyBzY3JpcHQgfSkgPT4gc2NyaXB0KSxcbiAgICAgICAgcHJldk91dHB1dHMubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSxcbiAgICAgICAgaGFzaFR5cGUsXG4gICAgICAgIGxlYWZIYXNoXG4gICAgICApO1xuXG4gICAgICBjb25zdCBzaWduZWRCeSA9IHB1YmxpY0tleXMuZmlsdGVyKFxuICAgICAgICAoaykgPT4gQnVmZmVyLmlzQnVmZmVyKHNpZ25hdHVyZUJ1ZmZlcikgJiYgc2Nobm9yckJpcDM0MC52ZXJpZnlTY2hub3JyKHNpZ25hdHVyZUhhc2gsIGssIHNpZ25hdHVyZUJ1ZmZlcilcbiAgICAgICk7XG5cbiAgICAgIGlmIChzaWduZWRCeS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHsgc2lnbmVkQnk6IHVuZGVmaW5lZCB9O1xuICAgICAgfVxuICAgICAgaWYgKHNpZ25lZEJ5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4geyBzaWduZWRCeTogc2lnbmVkQnlbMF0gfTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgaWxsZWdhbCBzdGF0ZTogc2lnbmVkIGJ5IG11bHRpcGxlIHB1YmxpYyBrZXlzYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNsaWNlIHRoZSBsYXN0IGJ5dGUgZnJvbSB0aGUgc2lnbmF0dXJlIGhhc2ggaW5wdXQgYmVjYXVzZSBpdCdzIHRoZSBoYXNoIHR5cGVcbiAgICAgIGNvbnN0IHsgc2lnbmF0dXJlLCBoYXNoVHlwZSB9ID0gU2NyaXB0U2lnbmF0dXJlLmRlY29kZShzaWduYXR1cmVCdWZmZXIpO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25IYXNoID0gcGFyc2VkU2NyaXB0LmlzU2Vnd2l0SW5wdXRcbiAgICAgICAgPyB0cmFuc2FjdGlvbi5oYXNoRm9yV2l0bmVzc1YwKGlucHV0SW5kZXgsIHBhcnNlZFNjcmlwdC5wdWJTY3JpcHQsIGFtb3VudCwgaGFzaFR5cGUpXG4gICAgICAgIDogdHJhbnNhY3Rpb24uaGFzaEZvclNpZ25hdHVyZUJ5TmV0d29yayhpbnB1dEluZGV4LCBwYXJzZWRTY3JpcHQucHViU2NyaXB0LCBhbW91bnQsIGhhc2hUeXBlKTtcbiAgICAgIGNvbnN0IHNpZ25lZEJ5ID0gcHVibGljS2V5cy5maWx0ZXIoKHB1YmxpY0tleSkgPT5cbiAgICAgICAgRUNQYWlyLmZyb21QdWJsaWNLZXkocHVibGljS2V5KS52ZXJpZnkodHJhbnNhY3Rpb25IYXNoLCBzaWduYXR1cmUpXG4gICAgICApO1xuXG4gICAgICBpZiAoc2lnbmVkQnkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB7IHNpZ25lZEJ5OiB1bmRlZmluZWQgfTtcbiAgICAgIH1cbiAgICAgIGlmIChzaWduZWRCeS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHsgc2lnbmVkQnk6IHNpZ25lZEJ5WzBdIH07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGlsbGVnYWwgc3RhdGU6IHNpZ25lZCBieSBtdWx0aXBsZSBwdWJsaWMga2V5c2ApO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0gaW5wdXRJbmRleFxuICogQHBhcmFtIGFtb3VudFxuICogQHBhcmFtIHZlcmlmaWNhdGlvblNldHRpbmdzIC0gaWYgcHVibGljS2V5IGlzIHNwZWNpZmllZCwgcmV0dXJucyB0cnVlIGlmZiBhbnkgc2lnbmF0dXJlIGlzIHNpZ25lZCBieSBwdWJsaWNLZXkuXG4gKiBAcGFyYW0gcHJldk91dHB1dHMgLSBtdXN0IGJlIHNldCBmb3IgcDJ0ciB0cmFuc2FjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVNpZ25hdHVyZShcbiAgdHJhbnNhY3Rpb246IFV0eG9UcmFuc2FjdGlvbixcbiAgaW5wdXRJbmRleDogbnVtYmVyLFxuICBhbW91bnQ6IG51bWJlcixcbiAgdmVyaWZpY2F0aW9uU2V0dGluZ3M6IFZlcmlmaWNhdGlvblNldHRpbmdzID0ge30sXG4gIHByZXZPdXRwdXRzPzogVHhPdXRwdXRbXVxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNpZ25hdHVyZVZlcmlmaWNhdGlvbnMgPSBnZXRTaWduYXR1cmVWZXJpZmljYXRpb25zKFxuICAgIHRyYW5zYWN0aW9uLFxuICAgIGlucHV0SW5kZXgsXG4gICAgYW1vdW50LFxuICAgIHZlcmlmaWNhdGlvblNldHRpbmdzLFxuICAgIHByZXZPdXRwdXRzXG4gICkuZmlsdGVyKFxuICAgICh2KSA9PlxuICAgICAgLy8gSWYgbm8gcHVibGljS2V5IGlzIHNldCBpbiB2ZXJpZmljYXRpb25TZXR0aW5ncywgYWxsIHNpZ25hdHVyZXMgbXVzdCBiZSB2YWxpZC5cbiAgICAgIC8vIE90aGVyd2lzZSwgYSBzaW5nbGUgdmFsaWQgc2lnbmF0dXJlIGJ5IHRoZSBzcGVjaWZpZWQgcHVia2V5IGlzIHN1ZmZpY2llbnQuXG4gICAgICB2ZXJpZmljYXRpb25TZXR0aW5ncy5wdWJsaWNLZXkgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgKHYuc2lnbmVkQnkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAodmVyaWZpY2F0aW9uU2V0dGluZ3MucHVibGljS2V5LmVxdWFscyh2LnNpZ25lZEJ5KSB8fFxuICAgICAgICAgIHZlcmlmaWNhdGlvblNldHRpbmdzLnB1YmxpY0tleS5zbGljZSgxKS5lcXVhbHModi5zaWduZWRCeSkpKVxuICApO1xuXG4gIHJldHVybiBzaWduYXR1cmVWZXJpZmljYXRpb25zLmxlbmd0aCA+IDAgJiYgc2lnbmF0dXJlVmVyaWZpY2F0aW9ucy5ldmVyeSgodikgPT4gdi5zaWduZWRCeSAhPT0gdW5kZWZpbmVkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25JbnB1dFAyc2hQMnBrKHR4QnVpbGRlcjogVXR4b1RyYW5zYWN0aW9uQnVpbGRlciwgdmluOiBudW1iZXIsIGtleVBhaXI6IGJpcDMyLkJJUDMySW50ZXJmYWNlKTogdm9pZCB7XG4gIGNvbnN0IHByZXZPdXRTY3JpcHRUeXBlID0gJ3Ayc2gtcDJwayc7XG4gIGNvbnN0IHsgcmVkZWVtU2NyaXB0LCB3aXRuZXNzU2NyaXB0IH0gPSBjcmVhdGVPdXRwdXRTY3JpcHRQMnNoUDJwayhrZXlQYWlyLnB1YmxpY0tleSk7XG4gIGtleVBhaXIubmV0d29yayA9IHR4QnVpbGRlci5uZXR3b3JrO1xuXG4gIHR4QnVpbGRlci5zaWduKHtcbiAgICB2aW4sXG4gICAgcHJldk91dFNjcmlwdFR5cGUsXG4gICAga2V5UGFpcixcbiAgICBoYXNoVHlwZTogZ2V0RGVmYXVsdFNpZ0hhc2godHhCdWlsZGVyLm5ldHdvcmsgYXMgTmV0d29yayksXG4gICAgcmVkZWVtU2NyaXB0LFxuICAgIHdpdG5lc3NTY3JpcHQsXG4gICAgd2l0bmVzc1ZhbHVlOiB1bmRlZmluZWQsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbklucHV0Mk9mMyhcbiAgdHhCdWlsZGVyOiBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyLFxuICB2aW46IG51bWJlcixcbiAgc2NyaXB0VHlwZTogU2NyaXB0VHlwZTJPZjMsXG4gIHB1YmtleXM6IFRyaXBsZTxCdWZmZXI+LFxuICBrZXlQYWlyOiBiaXAzMi5CSVAzMkludGVyZmFjZSxcbiAgY29zaWduZXI6IEJ1ZmZlcixcbiAgYW1vdW50OiBudW1iZXJcbik6IHZvaWQge1xuICBsZXQgY29udHJvbEJsb2NrO1xuICBsZXQgcmVkZWVtU2NyaXB0O1xuICBsZXQgd2l0bmVzc1NjcmlwdDtcblxuICBjb25zdCBwcmV2T3V0U2NyaXB0VHlwZSA9IHNjcmlwdFR5cGUyT2YzQXNQcmV2T3V0VHlwZShzY3JpcHRUeXBlKTtcbiAgaWYgKHNjcmlwdFR5cGUgPT09ICdwMnRyJykge1xuICAgICh7IHdpdG5lc3NTY3JpcHQsIGNvbnRyb2xCbG9jayB9ID0gY3JlYXRlU3BlbmRTY3JpcHRQMnRyKHB1YmtleXMsIFtrZXlQYWlyLnB1YmxpY0tleSwgY29zaWduZXJdKSk7XG4gIH0gZWxzZSB7XG4gICAgKHsgcmVkZWVtU2NyaXB0LCB3aXRuZXNzU2NyaXB0IH0gPSBjcmVhdGVPdXRwdXRTY3JpcHQyb2YzKHB1YmtleXMsIHNjcmlwdFR5cGUpKTtcbiAgfVxuXG4gIGtleVBhaXIubmV0d29yayA9IHR4QnVpbGRlci5uZXR3b3JrO1xuXG4gIHR4QnVpbGRlci5zaWduKHtcbiAgICB2aW4sXG4gICAgcHJldk91dFNjcmlwdFR5cGUsXG4gICAga2V5UGFpcixcbiAgICBoYXNoVHlwZTogZ2V0RGVmYXVsdFNpZ0hhc2godHhCdWlsZGVyLm5ldHdvcmsgYXMgTmV0d29yaywgc2NyaXB0VHlwZSksXG4gICAgcmVkZWVtU2NyaXB0LFxuICAgIHdpdG5lc3NTY3JpcHQsXG4gICAgd2l0bmVzc1ZhbHVlOiBhbW91bnQsXG4gICAgY29udHJvbEJsb2NrLFxuICB9KTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmF0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JpdGdvL3NpZ25hdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1Q0FBdUM7QUFHdkMsaURBV3VCO0FBR3ZCLHdDQUF3QztBQUN4QyxvQ0FBc0M7QUFDdEMsdURBQW9EO0FBRXBELG1EQU95QjtBQUN6QixtQ0FBMkM7QUFFM0MsTUFBTSxVQUFVLEdBQUc7SUFDakIsVUFBVTtJQUNWLGFBQWE7SUFDYixVQUFVO0lBQ1YsUUFBUTtJQUNSLFlBQVk7SUFDWixZQUFZO0lBQ1osbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixTQUFTO0lBQ1QsYUFBYTtJQUNiLG1CQUFtQjtDQUNYLENBQUM7QUFJWCxTQUFnQixzQkFBc0IsQ0FBQyxDQUFrQjtJQUN2RCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztLQUN2QjtJQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqQixDQUFDO0FBTEQsd0RBS0M7QUFpREQsU0FBZ0IsaUJBQWlCLENBQUMsT0FBZ0IsRUFBRSxVQUEyQjtJQUM3RSxRQUFRLGtCQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDM0IsS0FBSyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQzFCLEtBQUssUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUN4QixLQUFLLFFBQVEsQ0FBQyxXQUFXO1lBQ3ZCLE9BQU8sMkJBQVcsQ0FBQyxXQUFXLEdBQUcsaUNBQWUsQ0FBQyxjQUFjLENBQUM7UUFDbEU7WUFDRSxPQUFPLFVBQVUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLDJCQUFXLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQywyQkFBVyxDQUFDLFdBQVcsQ0FBQztLQUN4RjtBQUNILENBQUM7QUFURCw4Q0FTQztBQUVEOzs7Ozs7OztHQVFHO0FB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LEdBQUcsMkNBQTJCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEUsSUFBSSxVQUFVLEtBQUssTUFBTSxFQUFFO1FBQ3pCLENBQUMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEdBQUcscUNBQXFCLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkc7U0FBTTtRQUNMLENBQUMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEdBQUcsc0NBQXNCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7S0FDakY7SUFFRCxPQUFPLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7SUFFcEMsU0FBUyxDQUFDLElBQUksQ0FBQztRQUNiLEdBQUc7UUFDSCxpQkFBaUI7UUFDakIsT0FBTztRQUNQLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsT0FBa0IsRUFBRSxVQUFVLENBQUM7UUFDckUsWUFBWTtRQUNaLGFBQWE7UUFDYixZQUFZLEVBQUUsTUFBTTtRQUNwQixZQUFZO0tBQ2IsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQWhDRCxzQ0FnQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvcGNvZGVzIGZyb20gJ2JpdGNvaW4tb3BzJztcbmltcG9ydCAqIGFzIGJpcDMyIGZyb20gJ2JpcDMyJztcblxuaW1wb3J0IHtcbiAgRUNQYWlyLFxuICBwYXltZW50cyxcbiAgc2NyaXB0LFxuICBUcmFuc2FjdGlvbixcbiAgVHhJbnB1dCxcbiAgc2Nobm9yckJpcDM0MCxcbiAgY2xhc3NpZnksXG4gIHRhcHJvb3QsXG4gIFR4T3V0cHV0LFxuICBTY3JpcHRTaWduYXR1cmUsXG59IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuXG5pbXBvcnQgeyBOZXR3b3JrIH0gZnJvbSAnLi4vbmV0d29ya1R5cGVzJztcbmltcG9ydCAqIGFzIG5ldHdvcmtzIGZyb20gJy4uL25ldHdvcmtzJztcbmltcG9ydCB7IGdldE1haW5uZXQgfSBmcm9tICcuLi9jb2lucyc7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb24gfSBmcm9tICcuL1V0eG9UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9VdHhvVHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7XG4gIGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMsXG4gIGNyZWF0ZU91dHB1dFNjcmlwdFAyc2hQMnBrLFxuICBjcmVhdGVTcGVuZFNjcmlwdFAydHIsXG4gIFNjcmlwdFR5cGUsXG4gIFNjcmlwdFR5cGUyT2YzLFxuICBzY3JpcHRUeXBlMk9mM0FzUHJldk91dFR5cGUsXG59IGZyb20gJy4vb3V0cHV0U2NyaXB0cyc7XG5pbXBvcnQgeyBpc1RyaXBsZSwgVHJpcGxlIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGlucHV0VHlwZXMgPSBbXG4gICdtdWx0aXNpZycsXG4gICdub25zdGFuZGFyZCcsXG4gICdudWxsZGF0YScsXG4gICdwdWJrZXknLFxuICAncHVia2V5aGFzaCcsXG4gICdzY3JpcHRoYXNoJyxcbiAgJ3dpdG5lc3NwdWJrZXloYXNoJyxcbiAgJ3dpdG5lc3NzY3JpcHRoYXNoJyxcbiAgJ3RhcHJvb3QnLFxuICAndGFwcm9vdG5vZm4nLFxuICAnd2l0bmVzc2NvbW1pdG1lbnQnLFxuXSBhcyBjb25zdDtcblxudHlwZSBJbnB1dFR5cGUgPSB0eXBlb2YgaW5wdXRUeXBlc1tudW1iZXJdO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFjZWhvbGRlclNpZ25hdHVyZSh2OiBudW1iZXIgfCBCdWZmZXIpOiBib29sZWFuIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2KSkge1xuICAgIHJldHVybiB2Lmxlbmd0aCA9PT0gMDtcbiAgfVxuICByZXR1cm4gdiA9PT0gMDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRTaWduYXR1cmVTY3JpcHQge1xuICBzY3JpcHRUeXBlOiBTY3JpcHRUeXBlIHwgJ3AycGtoJyB8IHVuZGVmaW5lZDtcbiAgaXNTZWd3aXRJbnB1dDogYm9vbGVhbjtcbiAgaW5wdXRDbGFzc2lmaWNhdGlvbjogSW5wdXRUeXBlO1xuICBwMnNoT3V0cHV0Q2xhc3NpZmljYXRpb24/OiBzdHJpbmc7XG4gIHB1YmxpY0tleXM/OiBCdWZmZXJbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRTaWduYXR1cmVTY3JpcHRVbmtub3duIGV4dGVuZHMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAyUEsgZXh0ZW5kcyBQYXJzZWRTaWduYXR1cmVTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAncDJzaFAycGsnO1xuICBpbnB1dENsYXNzaWZpY2F0aW9uOiAnc2NyaXB0aGFzaCc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJQS0ggZXh0ZW5kcyBQYXJzZWRTaWduYXR1cmVTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAncDJwa2gnO1xuICBpbnB1dENsYXNzaWZpY2F0aW9uOiAncHVia2V5aGFzaCc7XG4gIHNpZ25hdHVyZXM6IFtCdWZmZXJdO1xuICBwdWJsaWNLZXlzOiBbQnVmZmVyXTtcbiAgcHViU2NyaXB0PzogQnVmZmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdDJPZjMgZXh0ZW5kcyBQYXJzZWRTaWduYXR1cmVTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAncDJzaCcgfCAncDJzaFAyd3NoJyB8ICdwMndzaCc7XG4gIGlucHV0Q2xhc3NpZmljYXRpb246ICdzY3JpcHRoYXNoJyB8ICd3aXRuZXNzc2NyaXB0aGFzaCc7XG4gIHNpZ25hdHVyZXM6XG4gICAgfCBbQnVmZmVyLCBCdWZmZXJdIC8vIGZ1bGx5LXNpZ25lZCB0cmFuc2FjdGlvbnMgd2l0aCBzaWduYXR1cmVzXG4gICAgLyogUGFydGlhbGx5IHNpZ25lZCB0cmFuc2FjdGlvbnMgd2l0aCBwbGFjZWhvbGRlciBzaWduYXR1cmVzLlxuICAgICAgIEZvciBwMnNoLCB0aGUgcGxhY2Vob2xkZXIgaXMgT1BfMCAobnVtYmVyIDApICovXG4gICAgfCBbQnVmZmVyIHwgMCwgQnVmZmVyIHwgMCwgQnVmZmVyIHwgMF07XG4gIHB1YmxpY0tleXM6IFtCdWZmZXIsIEJ1ZmZlciwgQnVmZmVyXTtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdCBleHRlbmRzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICdwMnRyJztcbiAgaW5wdXRDbGFzc2lmaWNhdGlvbjogJ3RhcHJvb3QnO1xuICAvLyBQMlRSIHRhcHNjcmlwdCBzcGVuZHMgYXJlIGZvciAyLW9mLTIgbXVsdGlzaWcgc2NyaXB0c1xuICBzaWduYXR1cmVzOiBbQnVmZmVyLCBCdWZmZXJdOyAvLyBtaXNzaW5nIHNpZ25hdHVyZSBpcyBlbmNvZGVkIGFzIGVtcHR5IGJ1ZmZlclxuICBwdWJsaWNLZXlzOiBbQnVmZmVyLCBCdWZmZXJdO1xuICBwdWJTY3JpcHQ6IEJ1ZmZlcjtcbiAgY29udHJvbEJsb2NrOiBCdWZmZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0U2lnSGFzaChuZXR3b3JrOiBOZXR3b3JrLCBzY3JpcHRUeXBlPzogU2NyaXB0VHlwZTJPZjMpOiBudW1iZXIge1xuICBzd2l0Y2ggKGdldE1haW5uZXQobmV0d29yaykpIHtcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW5jYXNoOlxuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbnN2OlxuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbmdvbGQ6XG4gICAgICByZXR1cm4gVHJhbnNhY3Rpb24uU0lHSEFTSF9BTEwgfCBVdHhvVHJhbnNhY3Rpb24uU0lHSEFTSF9GT1JLSUQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzY3JpcHRUeXBlID09PSAncDJ0cicgPyBUcmFuc2FjdGlvbi5TSUdIQVNIX0RFRkFVTFQgOiBUcmFuc2FjdGlvbi5TSUdIQVNIX0FMTDtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGEgdHJhbnNhY3Rpb24ncyBzaWduYXR1cmUgc2NyaXB0IHRvIG9idGFpbiBwdWJsaWMga2V5cywgc2lnbmF0dXJlcywgdGhlIHNpZyBzY3JpcHQsXG4gKiBhbmQgb3RoZXIgcHJvcGVydGllcy5cbiAqXG4gKiBPbmx5IHN1cHBvcnRzIHNjcmlwdCB0eXBlcyB1c2VkIGluIEJpdEdvIHRyYW5zYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gaW5wdXRcbiAqIEByZXR1cm5zIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmVTY3JpcHQoXG4gIGlucHV0OiBUeElucHV0XG4pOlxuICB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFVua25vd25cbiAgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMlBLXG4gIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJQS0hcbiAgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHQyT2YzXG4gIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdCB7XG4gIGNvbnN0IGlzU2Vnd2l0SW5wdXQgPSBpbnB1dC53aXRuZXNzLmxlbmd0aCA+IDA7XG4gIGNvbnN0IGlzTmF0aXZlU2Vnd2l0SW5wdXQgPSBpbnB1dC5zY3JpcHQubGVuZ3RoID09PSAwO1xuICBsZXQgZGVjb21waWxlZFNpZ1NjcmlwdDogQXJyYXk8QnVmZmVyIHwgbnVtYmVyPiB8IG51bGw7XG4gIGxldCBpbnB1dENsYXNzaWZpY2F0aW9uOiBJbnB1dFR5cGU7XG4gIGlmIChpc1NlZ3dpdElucHV0KSB7XG4gICAgLy8gVGhlIGRlY29tcGlsZWRTaWdTY3JpcHQgaXMgdGhlIHNjcmlwdCBjb250YWluaW5nIHRoZSBzaWduYXR1cmVzLCBwdWJsaWMga2V5cywgYW5kIHRoZSBzY3JpcHQgdGhhdCB3YXMgY29tbWl0dGVkXG4gICAgLy8gdG8gKHB1YlNjcmlwdCkuIElmIHRoaXMgaXMgYSBzZWd3aXQgaW5wdXQgdGhlIGRlY29tcGlsZWRTaWdTY3JpcHQgaXMgaW4gdGhlIHdpdG5lc3MsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdFxuICAgIC8vIGlzIG5hdGl2ZSBvciBub3QuIFRoZSBpbnB1dENsYXNzaWZpY2F0aW9uIGlzIGRldGVybWluZWQgYmFzZWQgb24gd2hldGhlciBvciBub3QgdGhlIGlucHV0IGlzIG5hdGl2ZSB0byBnaXZlIGFuXG4gICAgLy8gYWNjdXJhdGUgY2xhc3NpZmljYXRpb24uIE5vdGUgdGhhdCBwMnNoUDJ3c2ggaW5wdXRzIHdpbGwgYmUgY2xhc3NpZmllZCBhcyBwMnNoIGFuZCBub3QgcDJ3c2guXG4gICAgZGVjb21waWxlZFNpZ1NjcmlwdCA9IGlucHV0LndpdG5lc3M7XG4gICAgaWYgKGlzTmF0aXZlU2Vnd2l0SW5wdXQpIHtcbiAgICAgIGlucHV0Q2xhc3NpZmljYXRpb24gPSBjbGFzc2lmeS53aXRuZXNzKGRlY29tcGlsZWRTaWdTY3JpcHQgYXMgQnVmZmVyW10sIHRydWUpIGFzIElucHV0VHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXRDbGFzc2lmaWNhdGlvbiA9IGNsYXNzaWZ5LmlucHV0KGlucHV0LnNjcmlwdCwgdHJ1ZSkgYXMgSW5wdXRUeXBlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpbnB1dENsYXNzaWZpY2F0aW9uID0gY2xhc3NpZnkuaW5wdXQoaW5wdXQuc2NyaXB0LCB0cnVlKSBhcyBJbnB1dFR5cGU7XG4gICAgZGVjb21waWxlZFNpZ1NjcmlwdCA9IHNjcmlwdC5kZWNvbXBpbGUoaW5wdXQuc2NyaXB0KTtcbiAgfVxuXG4gIGlmICghZGVjb21waWxlZFNpZ1NjcmlwdCkge1xuICAgIHJldHVybiB7IHNjcmlwdFR5cGU6IHVuZGVmaW5lZCwgaXNTZWd3aXRJbnB1dCwgaW5wdXRDbGFzc2lmaWNhdGlvbiB9O1xuICB9XG5cbiAgaWYgKGlucHV0Q2xhc3NpZmljYXRpb24gPT09ICdwdWJrZXloYXNoJykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKCFkZWNvbXBpbGVkU2lnU2NyaXB0IHx8IGRlY29tcGlsZWRTaWdTY3JpcHQubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgc2lnbmF0dXJlIGZvciBwMnBraCcpO1xuICAgIH1cbiAgICBjb25zdCBbc2lnbmF0dXJlLCBwdWJsaWNLZXldID0gZGVjb21waWxlZFNpZ1NjcmlwdDtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHNpZ25hdHVyZSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihwdWJsaWNLZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgc2lnbmF0dXJlIGZvciBwMnBraCcpO1xuICAgIH1cbiAgICBjb25zdCBwdWJsaWNLZXlzOiBbQnVmZmVyXSA9IFtwdWJsaWNLZXldO1xuICAgIGNvbnN0IHNpZ25hdHVyZXM6IFtCdWZmZXJdID0gW3NpZ25hdHVyZV07XG4gICAgY29uc3QgcHViU2NyaXB0ID0gcGF5bWVudHMucDJwa2goeyBwdWJrZXk6IHB1YmxpY0tleSB9KS5vdXRwdXQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2NyaXB0VHlwZTogJ3AycGtoJyxcbiAgICAgIGlzU2Vnd2l0SW5wdXQsXG4gICAgICBpbnB1dENsYXNzaWZpY2F0aW9uLFxuICAgICAgc2lnbmF0dXJlcyxcbiAgICAgIHB1YmxpY0tleXMsXG4gICAgICBwdWJTY3JpcHQsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChpbnB1dENsYXNzaWZpY2F0aW9uID09PSAndGFwcm9vdCcpIHtcbiAgICAvLyBhc3N1bWVzIG5vIGFubmV4XG4gICAgaWYgKGlucHV0LndpdG5lc3MubGVuZ3RoICE9PSA0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVucmVjb2duaXplZCB0YXByb290IGlucHV0YCk7XG4gICAgfVxuICAgIGNvbnN0IFtzaWcxLCBzaWcyLCB0YXBzY3JpcHQsIGNvbnRyb2xCbG9ja10gPSBpbnB1dC53aXRuZXNzO1xuICAgIGNvbnN0IHRhcHNjcmlwdENsYXNzaWZpY2F0aW9uID0gY2xhc3NpZnkub3V0cHV0KHRhcHNjcmlwdCk7XG4gICAgaWYgKHRhcHNjcmlwdENsYXNzaWZpY2F0aW9uICE9PSAndGFwcm9vdG5vZm4nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHRhcHNjcmlwdCBtdXN0IGJlIG4gb2YgbiBtdWx0aXNpZ2ApO1xuICAgIH1cblxuICAgIGNvbnN0IHB1YmxpY0tleXMgPSBwYXltZW50cy5wMnRyX25zKHsgb3V0cHV0OiB0YXBzY3JpcHQgfSkucHVia2V5cztcbiAgICBpZiAoIXB1YmxpY0tleXMgfHwgcHVibGljS2V5cy5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgMiBwdWJrZXlzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcmlwdFR5cGU6ICdwMnRyJyxcbiAgICAgIGlzU2Vnd2l0SW5wdXQsXG4gICAgICBpbnB1dENsYXNzaWZpY2F0aW9uLFxuICAgICAgc2lnbmF0dXJlczogW3NpZzEsIHNpZzJdLm1hcCgoYikgPT4ge1xuICAgICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHNpZ25hdHVyZSBlbGVtZW50ICR7Yn1gKTtcbiAgICAgIH0pLFxuICAgICAgcHVibGljS2V5cyxcbiAgICAgIHB1YlNjcmlwdDogdGFwc2NyaXB0LFxuICAgICAgY29udHJvbEJsb2NrLFxuICAgIH0gYXMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdDtcbiAgfVxuXG4gIC8vIE5vdGUgdGhlIGFzc3VtcHRpb24gaGVyZSB0aGF0IGlmIHdlIGhhdmUgYSBwMnNoIG9yIHAyd3NoIGlucHV0IGl0IHdpbGwgYmUgbXVsdGlzaWcgKGFwcHJvcHJpYXRlIGJlY2F1c2UgdGhlXG4gIC8vIEJpdEdvIHBsYXRmb3JtIG9ubHkgc3VwcG9ydHMgbXVsdGlzaWcgd2l0aGluIHRoZXNlIHR5cGVzIG9mIGlucHV0cywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHJlcGxheSBwcm90ZWN0aW9uIGlucHV0cyxcbiAgLy8gd2hpY2ggYXJlIHNpbmdsZSBzaWduYXR1cmUgcDJzaCkuIFNpZ25hdHVyZXMgYXJlIGFsbCBidXQgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGRlY29tcGlsZWRTaWdTY3JpcHQuXG4gIC8vIFRoZSByZWRlZW1TY3JpcHQvd2l0bmVzc1NjcmlwdCAoZGVwZW5kaW5nIG9uIHdoaWNoIHR5cGUgb2YgaW5wdXQgdGhpcyBpcykgaXMgdGhlIGxhc3QgZW50cnkgaW5cbiAgLy8gdGhlIGRlY29tcGlsZWRTaWdTY3JpcHQgKGRlbm90ZWQgaGVyZSBhcyB0aGUgcHViU2NyaXB0KS4gVGhlIHB1YmxpYyBrZXlzIGFyZSB0aGUgc2Vjb25kIHRocm91Z2hcbiAgLy8gYW50ZXBlbnVsdGltYXRlIGVudHJpZXMgaW4gdGhlIGRlY29tcGlsZWRQdWJTY3JpcHQuIFNlZSBiZWxvdyBmb3IgYSB2aXN1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHR5cGljYWwgMi1vZi0zXG4gIC8vIG11bHRpc2lnIHNldHVwOlxuICAvL1xuICAvLyAgIGRlY29tcGlsZWRTaWdTY3JpcHQgPSAwIDxzaWcxPiA8c2lnMj4gWzxzaWczPl0gPHB1YlNjcmlwdD5cbiAgLy8gICBkZWNvbXBpbGVkUHViU2NyaXB0ID0gMiA8cHViMT4gPHB1YjI+IDxwdWIzPiAzIE9QX0NIRUNLTVVMVElTSUdcbiAgLy9cbiAgLy8gVHJhbnNhY3Rpb25zIGJ1aWx0IHdpdGggYC5idWlsZCgpYCBvbmx5IGhhdmUgdHdvIHNpZ25hdHVyZXMgYDxzaWcxPmAgYW5kIGA8c2lnMj5gIGluIF9kZWNvbXBpbGVkU2lnU2NyaXB0Xy5cbiAgLy8gVHJhbnNhY3Rpb25zIGJ1aWx0IHdpdGggYC5idWlsZEluY29tcGxldGUoKWAgaGF2ZSB0aHJlZSBzaWduYXR1cmVzLCB3aGVyZSBtaXNzaW5nIHNpZ25hdHVyZXMgYXJlIHN1YnN0aXR1dGVkIHdpdGggYE9QXzBgLlxuICBpZiAoaW5wdXRDbGFzc2lmaWNhdGlvbiAhPT0gJ3NjcmlwdGhhc2gnICYmIGlucHV0Q2xhc3NpZmljYXRpb24gIT09ICd3aXRuZXNzc2NyaXB0aGFzaCcpIHtcbiAgICByZXR1cm4geyBzY3JpcHRUeXBlOiB1bmRlZmluZWQsIGlzU2Vnd2l0SW5wdXQsIGlucHV0Q2xhc3NpZmljYXRpb24gfTtcbiAgfVxuXG4gIGNvbnN0IHB1YlNjcmlwdCA9IGRlY29tcGlsZWRTaWdTY3JpcHRbZGVjb21waWxlZFNpZ1NjcmlwdC5sZW5ndGggLSAxXTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIocHViU2NyaXB0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwdWJTY3JpcHRgKTtcbiAgfVxuXG4gIGNvbnN0IHAyc2hPdXRwdXRDbGFzc2lmaWNhdGlvbiA9IGNsYXNzaWZ5Lm91dHB1dChwdWJTY3JpcHQpO1xuXG4gIGlmIChpbnB1dENsYXNzaWZpY2F0aW9uID09PSAnc2NyaXB0aGFzaCcgJiYgcDJzaE91dHB1dENsYXNzaWZpY2F0aW9uID09PSAncHVia2V5Jykge1xuICAgIHJldHVybiB7XG4gICAgICBzY3JpcHRUeXBlOiAncDJzaFAycGsnLFxuICAgICAgaXNTZWd3aXRJbnB1dCxcbiAgICAgIGlucHV0Q2xhc3NpZmljYXRpb24sXG4gICAgICBwMnNoT3V0cHV0Q2xhc3NpZmljYXRpb24sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChwMnNoT3V0cHV0Q2xhc3NpZmljYXRpb24gIT09ICdtdWx0aXNpZycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NyaXB0VHlwZTogdW5kZWZpbmVkLFxuICAgICAgaXNTZWd3aXRJbnB1dCxcbiAgICAgIGlucHV0Q2xhc3NpZmljYXRpb24sXG4gICAgICBwMnNoT3V0cHV0Q2xhc3NpZmljYXRpb24sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGRlY29tcGlsZWRQdWJTY3JpcHQgPSBzY3JpcHQuZGVjb21waWxlKHB1YlNjcmlwdCk7XG4gIGlmIChkZWNvbXBpbGVkUHViU2NyaXB0ID09PSBudWxsKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNvdWxkIG5vdCBkZWNvbXBpbGUgcHViU2NyaXB0YCk7XG4gIH1cblxuICBjb25zdCBleHBlY3RlZFNjcmlwdExlbmd0aCA9XG4gICAgLy8gY29tcGxldGUgdHJhbnNhY3Rpb25zIHdpdGggMiBzaWduYXR1cmVzXG4gICAgZGVjb21waWxlZFNpZ1NjcmlwdC5sZW5ndGggPT09IDQgfHxcbiAgICAvLyBpbmNvbXBsZXRlIHRyYW5zYWN0aW9uIHdpdGggMyBzaWduYXR1cmVzIG9yIHNpZ25hdHVyZSBwbGFjZWhvbGRlcnNcbiAgICBkZWNvbXBpbGVkU2lnU2NyaXB0Lmxlbmd0aCA9PT0gNTtcblxuICBpZiAoIWV4cGVjdGVkU2NyaXB0TGVuZ3RoKSB7XG4gICAgcmV0dXJuIHsgc2NyaXB0VHlwZTogdW5kZWZpbmVkLCBpc1NlZ3dpdElucHV0LCBpbnB1dENsYXNzaWZpY2F0aW9uIH07XG4gIH1cblxuICBpZiAoaXNTZWd3aXRJbnB1dCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZGVjb21waWxlZFNpZ1NjcmlwdFswXSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgZGVjb21waWxlZFNpZ1NjcmlwdFswXSB0byBiZSBhIGJ1ZmZlciBmb3Igc2Vnd2l0IGlucHV0c2ApO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChkZWNvbXBpbGVkU2lnU2NyaXB0WzBdLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB3aXRuZXNzIHN0YWNrIGV4cGVjdGVkIHRvIHN0YXJ0IHdpdGggZW1wdHkgYnVmZmVyYCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGRlY29tcGlsZWRTaWdTY3JpcHRbMF0gIT09IG9wY29kZXMuT1BfMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgc2lnU2NyaXB0IGV4cGVjdGVkIHRvIHN0YXJ0IHdpdGggT1BfMGApO1xuICB9XG5cbiAgY29uc3Qgc2lnbmF0dXJlcyA9IGRlY29tcGlsZWRTaWdTY3JpcHQuc2xpY2UoMSAvKiBpZ25vcmUgbGVhZGluZyBPUF8wICovLCAtMSAvKiBpZ25vcmUgdHJhaWxpbmcgcHViU2NyaXB0ICovKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHNpZ25hdHVyZXMubGVuZ3RoICE9PSAyICYmIHNpZ25hdHVyZXMubGVuZ3RoICE9PSAzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCAyIG9yIDMgc2lnbmF0dXJlcywgZ290ICR7c2lnbmF0dXJlcy5sZW5ndGh9YCk7XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoZGVjb21waWxlZFB1YlNjcmlwdC5sZW5ndGggIT09IDYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgZGVjb21waWxlZFB1YlNjcmlwdCBsZW5ndGhgKTtcbiAgfVxuICBjb25zdCBwdWJsaWNLZXlzID0gZGVjb21waWxlZFB1YlNjcmlwdC5zbGljZSgxLCAtMikgYXMgQnVmZmVyW107XG4gIHB1YmxpY0tleXMuZm9yRWFjaCgoYikgPT4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgIH1cbiAgfSk7XG4gIGlmICghaXNUcmlwbGUocHVibGljS2V5cykpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgMyBwdWJsaWMga2V5cywgZ290ICR7cHVibGljS2V5cy5sZW5ndGh9YCk7XG4gIH1cblxuICAvLyBPcCBjb2RlcyA4MSB0aHJvdWdoIDk2IHJlcHJlc2VudCBudW1iZXJzIDEgdGhyb3VnaCAxNiAoc2VlIGh0dHBzOi8vZW4uYml0Y29pbi5pdC93aWtpL1NjcmlwdCNPcGNvZGVzKSwgd2hpY2ggaXNcbiAgLy8gd2h5IHdlIHN1YnRyYWN0IGJ5IDgwIHRvIGdldCB0aGUgbnVtYmVyIG9mIHNpZ25hdHVyZXMgKG4pIGFuZCB0aGUgbnVtYmVyIG9mIHB1YmxpYyBrZXlzIChtKSBpbiBhbiBuLW9mLW0gc2V0dXAuXG4gIGNvbnN0IGxlbiA9IGRlY29tcGlsZWRQdWJTY3JpcHQubGVuZ3RoO1xuICBjb25zdCBzaWduYXR1cmVUaHJlc2hvbGQgPSAoZGVjb21waWxlZFB1YlNjcmlwdFswXSBhcyBudW1iZXIpIC0gODA7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmIChzaWduYXR1cmVUaHJlc2hvbGQgIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIHNpZ25hdHVyZVRocmVzaG9sZCAyLCBnb3QgJHtzaWduYXR1cmVUaHJlc2hvbGR9YCk7XG4gIH1cbiAgY29uc3QgblB1YktleXMgPSAoZGVjb21waWxlZFB1YlNjcmlwdFtsZW4gLSAyXSBhcyBudW1iZXIpIC0gODA7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmIChuUHViS2V5cyAhPT0gMykge1xuICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgblB1YktleXMgMywgZ290ICR7blB1YktleXN9YCk7XG4gIH1cblxuICBjb25zdCBsYXN0T3BDb2RlID0gZGVjb21waWxlZFB1YlNjcmlwdFtsZW4gLSAxXTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKGxhc3RPcENvZGUgIT09IG9wY29kZXMuT1BfQ0hFQ0tNVUxUSVNJRykge1xuICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgb3Bjb2RlICMke29wY29kZXMuT1BfQ0hFQ0tNVUxUSVNJR30sIGdvdCBvcGNvZGUgIyR7bGFzdE9wQ29kZX1gKTtcbiAgfVxuXG4gIGNvbnN0IHNjcmlwdFR5cGUgPSBpbnB1dC53aXRuZXNzLmxlbmd0aFxuICAgID8gaW5wdXQuc2NyaXB0Lmxlbmd0aFxuICAgICAgPyAncDJzaFAyd3NoJ1xuICAgICAgOiAncDJ3c2gnXG4gICAgOiBpbnB1dC5zY3JpcHQubGVuZ3RoXG4gICAgPyAncDJzaCdcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKHNjcmlwdFR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaWxsZWdhbCBzdGF0ZScpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlLFxuICAgIGlzU2Vnd2l0SW5wdXQsXG4gICAgaW5wdXRDbGFzc2lmaWNhdGlvbixcbiAgICBwMnNoT3V0cHV0Q2xhc3NpZmljYXRpb24sXG4gICAgc2lnbmF0dXJlczogc2lnbmF0dXJlcy5tYXAoKGIpID0+IHtcbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoYikgfHwgYiA9PT0gMCkge1xuICAgICAgICByZXR1cm4gYjtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBzaWduYXR1cmUgZWxlbWVudCAke2J9YCk7XG4gICAgfSkgYXMgW0J1ZmZlciwgQnVmZmVyXSB8IFtCdWZmZXIsIEJ1ZmZlciwgQnVmZmVyXSxcbiAgICBwdWJsaWNLZXlzLFxuICAgIHB1YlNjcmlwdCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2lnbmF0dXJlU2NyaXB0Mk9mMyhpbnB1dDogVHhJbnB1dCk6IFBhcnNlZFNpZ25hdHVyZVNjcmlwdDJPZjMgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290IHtcbiAgY29uc3QgcmVzdWx0ID0gcGFyc2VTaWduYXR1cmVTY3JpcHQoaW5wdXQpIGFzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdDJPZjM7XG5cbiAgaWYgKFxuICAgICFbY2xhc3NpZnkudHlwZXMuUDJXU0gsIGNsYXNzaWZ5LnR5cGVzLlAyU0gsIGNsYXNzaWZ5LnR5cGVzLlAyUEtILCBjbGFzc2lmeS50eXBlcy5QMlRSXS5pbmNsdWRlcyhcbiAgICAgIHJlc3VsdC5pbnB1dENsYXNzaWZpY2F0aW9uXG4gICAgKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgaW5wdXRDbGFzc2lmaWNhdGlvbiAke3Jlc3VsdC5pbnB1dENsYXNzaWZpY2F0aW9ufWApO1xuICB9XG4gIGlmICghcmVzdWx0LnNpZ25hdHVyZXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG1pc3Npbmcgc2lnbmF0dXJlc2ApO1xuICB9XG4gIGlmIChcbiAgICByZXN1bHQucHVibGljS2V5cy5sZW5ndGggIT09IDMgJiZcbiAgICAocmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAyIHx8IHJlc3VsdC5pbnB1dENsYXNzaWZpY2F0aW9uICE9PSBjbGFzc2lmeS50eXBlcy5QMlRSKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgcHVia2V5IGNvdW50YCk7XG4gIH1cbiAgaWYgKCFyZXN1bHQucHViU2NyaXB0IHx8IHJlc3VsdC5wdWJTY3JpcHQubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBwdWJTY3JpcHQgbWlzc2luZyBvciBlbXB0eWApO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb25zdHJhaW50cyBmb3Igc2lnbmF0dXJlIHZlcmlmaWNhdGlvbnMuXG4gKiBQYXJhbWV0ZXJzIGFyZSBjb25qdW5jdGl2ZTogaWYgbXVsdGlwbGUgcGFyYW1ldGVycyBhcmUgc2V0LCBhIHZlcmlmaWNhdGlvbiBmb3IgYW4gaW5kaXZpZHVhbFxuICogc2lnbmF0dXJlIG11c3Qgc2F0aXNmeSBhbGwgb2YgdGhlbS5cbiAqL1xuZXhwb3J0IHR5cGUgVmVyaWZpY2F0aW9uU2V0dGluZ3MgPSB7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIHNpZ25hdHVyZSB0byB2ZXJpZnkuIE9ubHkgaXRlcmF0ZXMgb3ZlciBub24tZW1wdHkgc2lnbmF0dXJlcy5cbiAgICovXG4gIHNpZ25hdHVyZUluZGV4PzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGhleCBvZiB0aGUgcHVibGljIGtleSB0byB2ZXJpZnkuXG4gICAqL1xuICBwdWJsaWNLZXk/OiBCdWZmZXI7XG59O1xuXG4vKipcbiAqIFJlc3VsdCBmb3IgYSBpbmRpdmlkdWFsIHNpZ25hdHVyZSB2ZXJpZmljYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgU2lnbmF0dXJlVmVyaWZpY2F0aW9uID0ge1xuICAvKiogU2V0IHRvIHRoZSBwdWJsaWMga2V5IHRoYXQgc2lnbmVkIGZvciB0aGUgc2lnbmF0dXJlICovXG4gIHNpZ25lZEJ5OiBCdWZmZXIgfCB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIEdldCBzaWduYXR1cmUgdmVyaWZpY2F0aW9ucyBmb3IgbXVsdHNpZyB0cmFuc2FjdGlvblxuICogQHBhcmFtIHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0gaW5wdXRJbmRleFxuICogQHBhcmFtIGFtb3VudCAtIG11c3QgYmUgc2V0IGZvciBzZWd3aXQgdHJhbnNhY3Rpb25zIGFuZCBCSVAxNDMgdHJhbnNhY3Rpb25zXG4gKiBAcGFyYW0gdmVyaWZpY2F0aW9uU2V0dGluZ3NcbiAqIEBwYXJhbSBwcmV2T3V0cHV0cyAtIG11c3QgYmUgc2V0IGZvciBwMnRyIHRyYW5zYWN0aW9uc1xuICogQHJldHVybnMgU2lnbmF0dXJlVmVyaWZpY2F0aW9uW10gLSBpbiBvcmRlciBvZiBwYXJzZWQgbm9uLWVtcHR5IHNpZ25hdHVyZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNpZ25hdHVyZVZlcmlmaWNhdGlvbnMoXG4gIHRyYW5zYWN0aW9uOiBVdHhvVHJhbnNhY3Rpb24sXG4gIGlucHV0SW5kZXg6IG51bWJlcixcbiAgYW1vdW50OiBudW1iZXIsXG4gIHZlcmlmaWNhdGlvblNldHRpbmdzOiBWZXJpZmljYXRpb25TZXR0aW5ncyA9IHt9LFxuICBwcmV2T3V0cHV0cz86IFR4T3V0cHV0W11cbik6IFNpZ25hdHVyZVZlcmlmaWNhdGlvbltdIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCF0cmFuc2FjdGlvbi5pbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgdHJhbnNhY3Rpb25gKTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0ID0gdHJhbnNhY3Rpb24uaW5zW2lucHV0SW5kZXhdO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoIWlucHV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBubyBpbnB1dCBhdCBpbmRleCAke2lucHV0SW5kZXh9YCk7XG4gIH1cblxuICBjb25zdCBwYXJzZWRTY3JpcHQgPSBwYXJzZVNpZ25hdHVyZVNjcmlwdDJPZjMoaW5wdXQpO1xuXG4gIGNvbnN0IHNpZ25hdHVyZXMgPSBwYXJzZWRTY3JpcHQuc2lnbmF0dXJlc1xuICAgIC5maWx0ZXIoKHMpID0+IHMgJiYgcy5sZW5ndGgpXG4gICAgLmZpbHRlcigocywgaSkgPT4gdmVyaWZpY2F0aW9uU2V0dGluZ3Muc2lnbmF0dXJlSW5kZXggPT09IHVuZGVmaW5lZCB8fCB2ZXJpZmljYXRpb25TZXR0aW5ncy5zaWduYXR1cmVJbmRleCA9PT0gaSk7XG5cbiAgY29uc3QgcHVibGljS2V5cyA9IHBhcnNlZFNjcmlwdC5wdWJsaWNLZXlzLmZpbHRlcihcbiAgICAoYnVmKSA9PlxuICAgICAgdmVyaWZpY2F0aW9uU2V0dGluZ3MucHVibGljS2V5ID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHZlcmlmaWNhdGlvblNldHRpbmdzLnB1YmxpY0tleS5lcXVhbHMoYnVmKSB8fFxuICAgICAgdmVyaWZpY2F0aW9uU2V0dGluZ3MucHVibGljS2V5LnNsaWNlKDEpLmVxdWFscyhidWYpXG4gICk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZXMubWFwKChzaWduYXR1cmVCdWZmZXIpID0+IHtcbiAgICBpZiAoc2lnbmF0dXJlQnVmZmVyID09PSAwIHx8IHNpZ25hdHVyZUJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7IHNpZ25lZEJ5OiB1bmRlZmluZWQgfTtcbiAgICB9XG5cbiAgICBsZXQgaGFzaFR5cGUgPSBUcmFuc2FjdGlvbi5TSUdIQVNIX0RFRkFVTFQ7XG5cbiAgICBpZiAoc2lnbmF0dXJlQnVmZmVyLmxlbmd0aCA9PT0gNjUpIHtcbiAgICAgIGhhc2hUeXBlID0gc2lnbmF0dXJlQnVmZmVyW3NpZ25hdHVyZUJ1ZmZlci5sZW5ndGggLSAxXTtcbiAgICAgIHNpZ25hdHVyZUJ1ZmZlciA9IHNpZ25hdHVyZUJ1ZmZlci5zbGljZSgwLCAtMSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlZFNjcmlwdC5pbnB1dENsYXNzaWZpY2F0aW9uID09PSBjbGFzc2lmeS50eXBlcy5QMlRSKSB7XG4gICAgICBpZiAodmVyaWZpY2F0aW9uU2V0dGluZ3Muc2lnbmF0dXJlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNpZ25hdHVyZUluZGV4IHBhcmFtZXRlciBub3Qgc3VwcG9ydGVkIGZvciBwMnRyYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghcHJldk91dHB1dHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcmV2T3V0cHV0cyBub3Qgc2V0YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmV2T3V0cHV0cy5sZW5ndGggIT09IHRyYW5zYWN0aW9uLmlucy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcmV2T3V0cHV0cyBsZW5ndGggJHtwcmV2T3V0cHV0cy5sZW5ndGh9LCBleHBlY3RlZCAke3RyYW5zYWN0aW9uLmlucy5sZW5ndGh9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgY29udHJvbEJsb2NrLCBwdWJTY3JpcHQgfSA9IHBhcnNlZFNjcmlwdCBhcyBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290O1xuICAgICAgY29uc3QgbGVhZkhhc2ggPSB0YXByb290LmdldFRhcGxlYWZIYXNoKGNvbnRyb2xCbG9jaywgcHViU2NyaXB0KTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZUhhc2ggPSB0cmFuc2FjdGlvbi5oYXNoRm9yV2l0bmVzc1YxKFxuICAgICAgICBpbnB1dEluZGV4LFxuICAgICAgICBwcmV2T3V0cHV0cy5tYXAoKHsgc2NyaXB0IH0pID0+IHNjcmlwdCksXG4gICAgICAgIHByZXZPdXRwdXRzLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSksXG4gICAgICAgIGhhc2hUeXBlLFxuICAgICAgICBsZWFmSGFzaFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc2lnbmVkQnkgPSBwdWJsaWNLZXlzLmZpbHRlcihcbiAgICAgICAgKGspID0+IEJ1ZmZlci5pc0J1ZmZlcihzaWduYXR1cmVCdWZmZXIpICYmIHNjaG5vcnJCaXAzNDAudmVyaWZ5U2Nobm9ycihzaWduYXR1cmVIYXNoLCBrLCBzaWduYXR1cmVCdWZmZXIpXG4gICAgICApO1xuXG4gICAgICBpZiAoc2lnbmVkQnkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB7IHNpZ25lZEJ5OiB1bmRlZmluZWQgfTtcbiAgICAgIH1cbiAgICAgIGlmIChzaWduZWRCeS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHsgc2lnbmVkQnk6IHNpZ25lZEJ5WzBdIH07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGlsbGVnYWwgc3RhdGU6IHNpZ25lZCBieSBtdWx0aXBsZSBwdWJsaWMga2V5c2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzbGljZSB0aGUgbGFzdCBieXRlIGZyb20gdGhlIHNpZ25hdHVyZSBoYXNoIGlucHV0IGJlY2F1c2UgaXQncyB0aGUgaGFzaCB0eXBlXG4gICAgICBjb25zdCB7IHNpZ25hdHVyZSwgaGFzaFR5cGUgfSA9IFNjcmlwdFNpZ25hdHVyZS5kZWNvZGUoc2lnbmF0dXJlQnVmZmVyKTtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSGFzaCA9IHBhcnNlZFNjcmlwdC5pc1NlZ3dpdElucHV0XG4gICAgICAgID8gdHJhbnNhY3Rpb24uaGFzaEZvcldpdG5lc3NWMChpbnB1dEluZGV4LCBwYXJzZWRTY3JpcHQucHViU2NyaXB0LCBhbW91bnQsIGhhc2hUeXBlKVxuICAgICAgICA6IHRyYW5zYWN0aW9uLmhhc2hGb3JTaWduYXR1cmVCeU5ldHdvcmsoaW5wdXRJbmRleCwgcGFyc2VkU2NyaXB0LnB1YlNjcmlwdCwgYW1vdW50LCBoYXNoVHlwZSk7XG4gICAgICBjb25zdCBzaWduZWRCeSA9IHB1YmxpY0tleXMuZmlsdGVyKChwdWJsaWNLZXkpID0+XG4gICAgICAgIEVDUGFpci5mcm9tUHVibGljS2V5KHB1YmxpY0tleSkudmVyaWZ5KHRyYW5zYWN0aW9uSGFzaCwgc2lnbmF0dXJlKVxuICAgICAgKTtcblxuICAgICAgaWYgKHNpZ25lZEJ5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4geyBzaWduZWRCeTogdW5kZWZpbmVkIH07XG4gICAgICB9XG4gICAgICBpZiAoc2lnbmVkQnkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB7IHNpZ25lZEJ5OiBzaWduZWRCeVswXSB9O1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbGxlZ2FsIHN0YXRlOiBzaWduZWQgYnkgbXVsdGlwbGUgcHVibGljIGtleXNgKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB0cmFuc2FjdGlvblxuICogQHBhcmFtIGlucHV0SW5kZXhcbiAqIEBwYXJhbSBhbW91bnRcbiAqIEBwYXJhbSB2ZXJpZmljYXRpb25TZXR0aW5ncyAtIGlmIHB1YmxpY0tleSBpcyBzcGVjaWZpZWQsIHJldHVybnMgdHJ1ZSBpZmYgYW55IHNpZ25hdHVyZSBpcyBzaWduZWQgYnkgcHVibGljS2V5LlxuICogQHBhcmFtIHByZXZPdXRwdXRzIC0gbXVzdCBiZSBzZXQgZm9yIHAydHIgdHJhbnNhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlTaWduYXR1cmUoXG4gIHRyYW5zYWN0aW9uOiBVdHhvVHJhbnNhY3Rpb24sXG4gIGlucHV0SW5kZXg6IG51bWJlcixcbiAgYW1vdW50OiBudW1iZXIsXG4gIHZlcmlmaWNhdGlvblNldHRpbmdzOiBWZXJpZmljYXRpb25TZXR0aW5ncyA9IHt9LFxuICBwcmV2T3V0cHV0cz86IFR4T3V0cHV0W11cbik6IGJvb2xlYW4ge1xuICBjb25zdCBzaWduYXR1cmVWZXJpZmljYXRpb25zID0gZ2V0U2lnbmF0dXJlVmVyaWZpY2F0aW9ucyhcbiAgICB0cmFuc2FjdGlvbixcbiAgICBpbnB1dEluZGV4LFxuICAgIGFtb3VudCxcbiAgICB2ZXJpZmljYXRpb25TZXR0aW5ncyxcbiAgICBwcmV2T3V0cHV0c1xuICApLmZpbHRlcihcbiAgICAodikgPT5cbiAgICAgIC8vIElmIG5vIHB1YmxpY0tleSBpcyBzZXQgaW4gdmVyaWZpY2F0aW9uU2V0dGluZ3MsIGFsbCBzaWduYXR1cmVzIG11c3QgYmUgdmFsaWQuXG4gICAgICAvLyBPdGhlcndpc2UsIGEgc2luZ2xlIHZhbGlkIHNpZ25hdHVyZSBieSB0aGUgc3BlY2lmaWVkIHB1YmtleSBpcyBzdWZmaWNpZW50LlxuICAgICAgdmVyaWZpY2F0aW9uU2V0dGluZ3MucHVibGljS2V5ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICh2LnNpZ25lZEJ5ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKHZlcmlmaWNhdGlvblNldHRpbmdzLnB1YmxpY0tleS5lcXVhbHModi5zaWduZWRCeSkgfHxcbiAgICAgICAgICB2ZXJpZmljYXRpb25TZXR0aW5ncy5wdWJsaWNLZXkuc2xpY2UoMSkuZXF1YWxzKHYuc2lnbmVkQnkpKSlcbiAgKTtcblxuICByZXR1cm4gc2lnbmF0dXJlVmVyaWZpY2F0aW9ucy5sZW5ndGggPiAwICYmIHNpZ25hdHVyZVZlcmlmaWNhdGlvbnMuZXZlcnkoKHYpID0+IHYuc2lnbmVkQnkgIT09IHVuZGVmaW5lZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduSW5wdXRQMnNoUDJwayh0eEJ1aWxkZXI6IFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXIsIHZpbjogbnVtYmVyLCBrZXlQYWlyOiBiaXAzMi5CSVAzMkludGVyZmFjZSk6IHZvaWQge1xuICBjb25zdCBwcmV2T3V0U2NyaXB0VHlwZSA9ICdwMnNoLXAycGsnO1xuICBjb25zdCB7IHJlZGVlbVNjcmlwdCwgd2l0bmVzc1NjcmlwdCB9ID0gY3JlYXRlT3V0cHV0U2NyaXB0UDJzaFAycGsoa2V5UGFpci5wdWJsaWNLZXkpO1xuICBrZXlQYWlyLm5ldHdvcmsgPSB0eEJ1aWxkZXIubmV0d29yaztcblxuICB0eEJ1aWxkZXIuc2lnbih7XG4gICAgdmluLFxuICAgIHByZXZPdXRTY3JpcHRUeXBlLFxuICAgIGtleVBhaXIsXG4gICAgaGFzaFR5cGU6IGdldERlZmF1bHRTaWdIYXNoKHR4QnVpbGRlci5uZXR3b3JrIGFzIE5ldHdvcmspLFxuICAgIHJlZGVlbVNjcmlwdCxcbiAgICB3aXRuZXNzU2NyaXB0LFxuICAgIHdpdG5lc3NWYWx1ZTogdW5kZWZpbmVkLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25JbnB1dDJPZjMoXG4gIHR4QnVpbGRlcjogVXR4b1RyYW5zYWN0aW9uQnVpbGRlcixcbiAgdmluOiBudW1iZXIsXG4gIHNjcmlwdFR5cGU6IFNjcmlwdFR5cGUyT2YzLFxuICBwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPixcbiAga2V5UGFpcjogYmlwMzIuQklQMzJJbnRlcmZhY2UsXG4gIGNvc2lnbmVyOiBCdWZmZXIsXG4gIGFtb3VudDogbnVtYmVyXG4pOiB2b2lkIHtcbiAgbGV0IGNvbnRyb2xCbG9jaztcbiAgbGV0IHJlZGVlbVNjcmlwdDtcbiAgbGV0IHdpdG5lc3NTY3JpcHQ7XG5cbiAgY29uc3QgcHJldk91dFNjcmlwdFR5cGUgPSBzY3JpcHRUeXBlMk9mM0FzUHJldk91dFR5cGUoc2NyaXB0VHlwZSk7XG4gIGlmIChzY3JpcHRUeXBlID09PSAncDJ0cicpIHtcbiAgICAoeyB3aXRuZXNzU2NyaXB0LCBjb250cm9sQmxvY2sgfSA9IGNyZWF0ZVNwZW5kU2NyaXB0UDJ0cihwdWJrZXlzLCBba2V5UGFpci5wdWJsaWNLZXksIGNvc2lnbmVyXSkpO1xuICB9IGVsc2Uge1xuICAgICh7IHJlZGVlbVNjcmlwdCwgd2l0bmVzc1NjcmlwdCB9ID0gY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhwdWJrZXlzLCBzY3JpcHRUeXBlKSk7XG4gIH1cblxuICBrZXlQYWlyLm5ldHdvcmsgPSB0eEJ1aWxkZXIubmV0d29yaztcblxuICB0eEJ1aWxkZXIuc2lnbih7XG4gICAgdmluLFxuICAgIHByZXZPdXRTY3JpcHRUeXBlLFxuICAgIGtleVBhaXIsXG4gICAgaGFzaFR5cGU6IGdldERlZmF1bHRTaWdIYXNoKHR4QnVpbGRlci5uZXR3b3JrIGFzIE5ldHdvcmssIHNjcmlwdFR5cGUpLFxuICAgIHJlZGVlbVNjcmlwdCxcbiAgICB3aXRuZXNzU2NyaXB0LFxuICAgIHdpdG5lc3NWYWx1ZTogYW1vdW50LFxuICAgIGNvbnRyb2xCbG9jayxcbiAgfSk7XG59XG4iXX0=
{
"name": "@bitgo/utxo-lib",
"version": "2.2.0",
"version": "2.2.1-rc.0",
"description": "Client-side Bitcoin JavaScript library",

@@ -65,3 +65,3 @@ "main": "./dist/src/index.js",

"license": "MIT",
"gitHead": "48f82e6cd9ccfb1acc112468135dca7af1533ce8"
"gitHead": "e1dfa18a2913bcfcdd45792f0152594636adf5be"
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc