@bitgo-beta/sdk-api 1.10.1-beta.503 → 1.10.1-beta.505
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/package.json +6 -6
- package/dist/src/api.d.ts +1 -1
- package/dist/src/api.d.ts.map +1 -1
- package/dist/src/api.js +22 -19
- package/dist/src/bitgoAPI.js +35 -9
- package/dist/src/encrypt.js +25 -2
- package/dist/src/util.js +25 -2
- package/dist/src/v1/blockchain.js +14 -11
- package/dist/src/v1/keychains.js +12 -9
- package/dist/src/v1/markets.js +8 -5
- package/dist/src/v1/pendingapproval.js +43 -17
- package/dist/src/v1/pendingapprovals.js +31 -5
- package/dist/src/v1/signPsbt.js +30 -4
- package/dist/src/v1/transactionBuilder.js +103 -77
- package/dist/src/v1/travelRule.js +42 -16
- package/dist/src/v1/verifyAddress.js +25 -2
- package/dist/src/v1/wallet.js +206 -180
- package/dist/src/v1/wallets.js +48 -22
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,20 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [1.55.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-api@1.54.3...@bitgo/sdk-api@1.55.0) (2024-10-04)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- move spec to unit-test scripto ([3a7f032](https://github.com/BitGo/BitGoJS/commit/3a7f0326d105a956597f66d2742c7c8a670ce9a7))
|
|
11
|
+
- **sdk-api:** use createPsbtDecode instead of createPsbtFromBuffer ([06d0b30](https://github.com/BitGo/BitGoJS/commit/06d0b30e6987678c8147f98781f17cdc4e9cb37b))
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
- add psbt signing for v1 wallets ([2c01a77](https://github.com/BitGo/BitGoJS/commit/2c01a77b42904bad9ab63cc31af4c9fdeea58f5e))
|
|
16
|
+
- **sdk-api:** assume unencrypted access token ([6b8dec1](https://github.com/BitGo/BitGoJS/commit/6b8dec1975ce99d6b144829f5a3d77a293e51d57))
|
|
17
|
+
- **sdk-api:** authenticateWithPasskey ([0dce834](https://github.com/BitGo/BitGoJS/commit/0dce834c5415d469e2332723998ac02f9ce1f98c))
|
|
18
|
+
- **sdk-api:** authenticateWithPasskey method ([4320e2b](https://github.com/BitGo/BitGoJS/commit/4320e2b57d52cd903e9d7e9721f5bbfe46eddb4f))
|
|
19
|
+
|
|
6
20
|
## [1.54.3](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-api@1.54.2...@bitgo/sdk-api@1.54.3) (2024-09-24)
|
|
7
21
|
|
|
8
22
|
**Note:** Version bump only for package @bitgo/sdk-api
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo-beta/sdk-api",
|
|
3
|
-
"version": "1.10.1-beta.
|
|
3
|
+
"version": "1.10.1-beta.505",
|
|
4
4
|
"description": "REST wrapper for BitGoJS",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
@@ -40,10 +40,10 @@
|
|
|
40
40
|
]
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@bitgo-beta/sdk-core": "8.2.1-beta.
|
|
44
|
-
"@bitgo-beta/sjcl": "1.0.2-beta.
|
|
45
|
-
"@bitgo-beta/unspents": "0.13.2-beta.
|
|
46
|
-
"@bitgo-beta/utxo-lib": "8.0.3-beta.
|
|
43
|
+
"@bitgo-beta/sdk-core": "8.2.1-beta.506",
|
|
44
|
+
"@bitgo-beta/sjcl": "1.0.2-beta.744",
|
|
45
|
+
"@bitgo-beta/unspents": "0.13.2-beta.506",
|
|
46
|
+
"@bitgo-beta/utxo-lib": "8.0.3-beta.507",
|
|
47
47
|
"@types/superagent": "4.1.15",
|
|
48
48
|
"bitcoinjs-message": "npm:@bitgo-forks/bitcoinjs-message@1.0.0-master.2",
|
|
49
49
|
"bluebird": "^3.5.3",
|
|
@@ -63,5 +63,5 @@
|
|
|
63
63
|
"resolutions": {
|
|
64
64
|
"degenerator": "5.0.0"
|
|
65
65
|
},
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "3862d6687dab985ca7d8ce9d5f76b454e363e43b"
|
|
67
67
|
}
|
package/dist/src/api.d.ts
CHANGED
package/dist/src/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAOA,OAAO,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAOA,OAAO,UAAU,MAAM,YAAY,CAAC;AAIpC,OAAO,EAAoB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,kBAAkB,GAAG,GAAG,EACrD,GAAG,EAAE,UAAU,CAAC,iBAAiB,GAChC,YAAY,CAAC,kBAAkB,CAAC,CASlC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,kBAAkB,EACrD,aAAa,CAAC,EAAE,MAAM,GACrB,CAAC,GAAG,EAAE,UAAU,CAAC,QAAQ,KAAK,kBAAkB,CAOlD;AAkBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,KAAK,GAAG;IAAE,QAAQ,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAA;CAAE,GAAG,KAAK,CAKxF;AAgCD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,GAAG,MAAM,GAAG,SAAS,CAkBhF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,UAAU,CAAC,iBAAiB,GAAG,IAAI,CAwB7E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CAAC,EACvC,GAAG,EAAE,UAAU,CAAC,iBAAiB,EACjC,QAAQ,EAAE,UAAU,CAAC,QAAQ,GAC5B,UAAU,CAAC,QAAQ,CA+CrB"}
|
package/dist/src/api.js
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.verifyResponse = exports.setRequestQueryString = exports.serializeRequestData = exports.handleResponseError = exports.handleResponseResult = exports.toBitgoRequest = void 0;
|
|
4
7
|
/**
|
|
5
8
|
* @prettier
|
|
6
9
|
*/
|
|
7
|
-
const debug_1 = require("debug");
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
10
|
+
const debug_1 = __importDefault(require("debug"));
|
|
11
|
+
const eol_1 = __importDefault(require("eol"));
|
|
12
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
13
|
+
const sanitize_html_1 = __importDefault(require("sanitize-html"));
|
|
14
|
+
const superagent_1 = __importDefault(require("superagent"));
|
|
15
|
+
const url_1 = __importDefault(require("url"));
|
|
16
|
+
const querystring_1 = __importDefault(require("querystring"));
|
|
14
17
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
15
18
|
const debug = (0, debug_1.default)('bitgo:api');
|
|
16
19
|
/**
|
|
@@ -39,7 +42,7 @@ exports.toBitgoRequest = toBitgoRequest;
|
|
|
39
42
|
*/
|
|
40
43
|
function handleResponseResult(optionalField) {
|
|
41
44
|
return function (res) {
|
|
42
|
-
if (
|
|
45
|
+
if (lodash_1.default.isNumber(res.status) && res.status >= 200 && res.status < 300) {
|
|
43
46
|
return optionalField ? res.body[optionalField] : res.body;
|
|
44
47
|
}
|
|
45
48
|
throw errFromResponse(res);
|
|
@@ -58,7 +61,7 @@ function errFromResponse(res) {
|
|
|
58
61
|
const message = createResponseErrorString(res);
|
|
59
62
|
const status = res.status;
|
|
60
63
|
const result = res.body;
|
|
61
|
-
const invalidToken =
|
|
64
|
+
const invalidToken = lodash_1.default.has(res.header, 'x-auth-required') && res.header['x-auth-required'] === 'true';
|
|
62
65
|
const needsOtp = ((_a = res.body) === null || _a === void 0 ? void 0 : _a.needsOTP) !== undefined;
|
|
63
66
|
return new sdk_core_1.ApiResponseError(message, status, result, invalidToken, needsOtp);
|
|
64
67
|
}
|
|
@@ -90,11 +93,11 @@ function createResponseErrorString(res) {
|
|
|
90
93
|
// if the response came back as text, we try to parse it as HTML and remove all tags, leaving us
|
|
91
94
|
// just the bare text, which we then trim of excessive newlines and limit to a certain length
|
|
92
95
|
try {
|
|
93
|
-
let sanitizedText =
|
|
96
|
+
let sanitizedText = (0, sanitize_html_1.default)(res.text, { allowedTags: [] });
|
|
94
97
|
sanitizedText = sanitizedText.trim();
|
|
95
|
-
sanitizedText =
|
|
96
|
-
sanitizedText =
|
|
97
|
-
sanitizedText =
|
|
98
|
+
sanitizedText = eol_1.default.lf(sanitizedText); // use '\n' for all newlines
|
|
99
|
+
sanitizedText = lodash_1.default.replace(sanitizedText, /\n[ |\t]{1,}\n/g, '\n\n'); // remove the spaces/tabs between newlines
|
|
100
|
+
sanitizedText = lodash_1.default.replace(sanitizedText, /[\n]{3,}/g, '\n\n'); // have at most 2 consecutive newlines
|
|
98
101
|
sanitizedText = sanitizedText.substring(0, 5000); // prevent message from getting too large
|
|
99
102
|
errString = errString + '\n' + sanitizedText; // add it to our existing errString (at this point the more info the better!)
|
|
100
103
|
}
|
|
@@ -118,9 +121,9 @@ function serializeRequestData(req) {
|
|
|
118
121
|
if (contentType) {
|
|
119
122
|
contentType = contentType.split(';')[0];
|
|
120
123
|
}
|
|
121
|
-
let serialize =
|
|
124
|
+
let serialize = superagent_1.default.serialize[contentType];
|
|
122
125
|
if (!serialize && /[\/+]json\b/.test(contentType)) {
|
|
123
|
-
serialize =
|
|
126
|
+
serialize = superagent_1.default.serialize['application/json'];
|
|
124
127
|
}
|
|
125
128
|
if (serialize) {
|
|
126
129
|
data = serialize(data);
|
|
@@ -135,7 +138,7 @@ exports.serializeRequestData = serializeRequestData;
|
|
|
135
138
|
* @param req
|
|
136
139
|
*/
|
|
137
140
|
function setRequestQueryString(req) {
|
|
138
|
-
const urlDetails =
|
|
141
|
+
const urlDetails = url_1.default.parse(req.url);
|
|
139
142
|
let queryString;
|
|
140
143
|
const query = req._query;
|
|
141
144
|
const qs = req.qs;
|
|
@@ -146,7 +149,7 @@ function setRequestQueryString(req) {
|
|
|
146
149
|
}
|
|
147
150
|
else if (qs) {
|
|
148
151
|
// node version
|
|
149
|
-
queryString =
|
|
152
|
+
queryString = querystring_1.default.stringify(qs);
|
|
150
153
|
req.qs = null;
|
|
151
154
|
}
|
|
152
155
|
if (queryString) {
|
|
@@ -156,7 +159,7 @@ function setRequestQueryString(req) {
|
|
|
156
159
|
else {
|
|
157
160
|
urlDetails.search = '?' + queryString;
|
|
158
161
|
}
|
|
159
|
-
req.url =
|
|
162
|
+
req.url = url_1.default.format(urlDetails);
|
|
160
163
|
}
|
|
161
164
|
}
|
|
162
165
|
exports.setRequestQueryString = setRequestQueryString;
|
|
@@ -206,4 +209,4 @@ function verifyResponse(bitgo, token, method, req, response) {
|
|
|
206
209
|
return response;
|
|
207
210
|
}
|
|
208
211
|
exports.verifyResponse = verifyResponse;
|
|
209
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7R0FFRztBQUNILGlDQUEwQjtBQUMxQiwyQkFBMkI7QUFDM0IsNEJBQTRCO0FBQzVCLDhDQUE4QztBQUM5Qyx5Q0FBeUM7QUFDekMsOEJBQThCO0FBQzlCLDJDQUEyQztBQUUzQyxtREFBc0U7QUFLdEUsTUFBTSxLQUFLLEdBQUcsSUFBQSxlQUFLLEVBQUMsV0FBVyxDQUFDLENBQUM7QUFFakM7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLGNBQWMsQ0FDNUIsR0FBaUM7SUFFakMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUN4QixNQUFNLENBQUMsYUFBc0I7WUFDM0IsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUNiLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBcUIsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQy9FLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FDdEMsQ0FBQztRQUNKLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBWEQsd0NBV0M7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQ2xDLGFBQXNCO0lBRXRCLE9BQU8sVUFBVSxHQUF3QjtRQUN2QyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ25FLE9BQU8sYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1NBQzNEO1FBQ0QsTUFBTSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7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Qy9ELHVGQUF1RjtRQUN2RixNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5RCxNQUFNLFlBQVksR0FBRztZQUNuQixZQUFZO1lBQ1osWUFBWTtZQUNaLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsWUFBWSxFQUFFLEdBQUcsQ0FBQyxtQkFBbUI7WUFDckMsVUFBVSxFQUFFLGlCQUFpQjtTQUM5QixDQUFDO1FBQ0YsS0FBSyxDQUFDLDJCQUEyQixFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pELE1BQU0sSUFBSSwyQkFBZ0IsQ0FBQywwREFBMEQsRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDM0c7SUFFRCxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQywwQkFBMEIsRUFBRTtRQUNwRixNQUFNLFlBQVksR0FBRztZQUNuQixTQUFTLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTO1lBQ3BDLGdCQUFnQixFQUFFLG9CQUFvQixDQUFDLGdCQUFnQjtTQUN4RCxDQUFDO1FBQ0YsS0FBSyxDQUFDLDJEQUEyRCxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sSUFBSSwyQkFBZ0IsQ0FDeEIsMEZBQTBGLEVBQzFGLEdBQUcsRUFDSCxZQUFZLENBQ2IsQ0FBQztLQUNIO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQXJERCx3Q0FxREMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgRGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0ICogYXMgZW9sIGZyb20gJ2VvbCc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBzYW5pdGl6ZUh0bWwgZnJvbSAnc2FuaXRpemUtaHRtbCc7XG5pbXBvcnQgKiBhcyBzdXBlcmFnZW50IGZyb20gJ3N1cGVyYWdlbnQnO1xuaW1wb3J0ICogYXMgdXJsTGliIGZyb20gJ3VybCc7XG5pbXBvcnQgKiBhcyBxdWVyeXN0cmluZyBmcm9tICdxdWVyeXN0cmluZyc7XG5cbmltcG9ydCB7IEFwaVJlc3BvbnNlRXJyb3IsIEJpdEdvUmVxdWVzdCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgVmVyaWZ5UmVzcG9uc2VPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJy4vYml0Z29BUEknO1xuXG5jb25zdCBkZWJ1ZyA9IERlYnVnKCdiaXRnbzphcGknKTtcblxuLyoqXG4gKiBBZGQgdGhlIGJpdGdvLXNwZWNpZmljIHJlc3VsdCgpIGZ1bmN0aW9uIG9uIGEgc3VwZXJhZ2VudCByZXF1ZXN0LlxuICpcbiAqIElmIHRoZSBzZXJ2ZXIgcmVzcG9uc2UgaXMgc3VjY2Vzc2Z1bCwgdGhlIGByZXN1bHQoKWAgZnVuY3Rpb24gd2lsbCByZXR1cm4gZWl0aGVyIHRoZSBlbnRpcmUgcmVzcG9uc2UgYm9keSxcbiAqIG9yIHRoZSBmaWVsZCBmcm9tIHRoZSByZXNwb25zZSBib2R5IHNwZWNpZmllZCBieSB0aGUgYG9wdGlvbmFsRmllbGRgIHBhcmFtZXRlciBpZiBpdCBpcyBwcm92aWRlZC5cbiAqXG4gKiBJZiB0aGUgc2VydmVyIHJlc3BvbnNlIHdpdGggYW4gZXJyb3IsIGByZXN1bHQoKWAgd2lsbCBoYW5kbGUgSFRUUCBlcnJvcnMgYXBwcm9wcmlhdGVseSBieVxuICogcmV0aHJvd2luZyB0aGVtIGFzIGFuIGBBcGlSZXNwb25zZUVycm9yYCBpZiBwb3NzaWJsZSwgYW5kIG90aGVyd2lzZSByZXRocm93aW5nIHRoZSB1bmRlcmx5aW5nIHJlc3BvbnNlIGVycm9yLlxuICpcbiAqIEBwYXJhbSByZXFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQml0Z29SZXF1ZXN0PFJlc3BvbnNlUmVzdWx0VHlwZSA9IGFueT4oXG4gIHJlcTogc3VwZXJhZ2VudC5TdXBlckFnZW50UmVxdWVzdFxuKTogQml0R29SZXF1ZXN0PFJlc3BvbnNlUmVzdWx0VHlwZT4ge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihyZXEsIHtcbiAgICByZXN1bHQob3B0aW9uYWxGaWVsZD86IHN0cmluZykge1xuICAgICAgcmV0dXJuIHJlcS50aGVuKFxuICAgICAgICAocmVzcG9uc2UpID0+IGhhbmRsZVJlc3BvbnNlUmVzdWx0PFJlc3BvbnNlUmVzdWx0VHlwZT4ob3B0aW9uYWxGaWVsZCkocmVzcG9uc2UpLFxuICAgICAgICAoZXJyb3IpID0+IGhhbmRsZVJlc3BvbnNlRXJyb3IoZXJyb3IpXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybiBhIGZ1bmN0aW9uIHdoaWNoIGV4dHJhY3RzIHRoZSBzcGVjaWZpZWQgcmVzcG9uc2UgYm9keSBwcm9wZXJ0eSBmcm9tIHRoZSByZXNwb25zZSBpZiBzdWNjZXNzZnVsLFxuICogb3RoZXJ3aXNlIHRocm93IGFuIGBBcGlFcnJvclJlc3BvbnNlYCBwYXJzZWQgZnJvbSB0aGUgcmVzcG9uc2UgYm9keS5cbiAqIEBwYXJhbSBvcHRpb25hbEZpZWxkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVSZXNwb25zZVJlc3VsdDxSZXNwb25zZVJlc3VsdFR5cGU+KFxuICBvcHRpb25hbEZpZWxkPzogc3RyaW5nXG4pOiAocmVzOiBzdXBlcmFnZW50LlJlc3BvbnNlKSA9PiBSZXNwb25zZVJlc3VsdFR5cGUge1xuICByZXR1cm4gZnVuY3Rpb24gKHJlczogc3VwZXJhZ2VudC5SZXNwb25zZSk6IFJlc3BvbnNlUmVzdWx0VHlwZSB7XG4gICAgaWYgKF8uaXNOdW1iZXIocmVzLnN0YXR1cykgJiYgcmVzLnN0YXR1cyA+PSAyMDAgJiYgcmVzLnN0YXR1cyA8IDMwMCkge1xuICAgICAgcmV0dXJuIG9wdGlvbmFsRmllbGQgPyByZXMuYm9keVtvcHRpb25hbEZpZWxkXSA6IHJlcy5ib2R5O1xuICAgIH1cbiAgICB0aHJvdyBlcnJGcm9tUmVzcG9uc2UocmVzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHJlbGV2YW50IGluZm9ybWF0aW9uIGZyb20gYSBzdWNjZXNzZnVsIHJlc3BvbnNlICh0aGF0IGlzLCBhIHJlc3BvbnNlIHdpdGggYW4gSFRUUCBzdGF0dXMgY29kZVxuICogYmV0d2VlbiAyMDAgYW5kIDI5OSksIGJ1dCB3aGljaCByZXN1bHRlZCBpbiBhbiBhcHBsaWNhdGlvbiBzcGVjaWZpYyBlcnJvciBhbmQgdXNlIGl0IHRvIGNvbnN0cnVjdCBhbmRcbiAqIHRocm93IGFuIGBBcGlFcnJvclJlc3BvbnNlYC5cbiAqXG4gKiBAcGFyYW0gcmVzXG4gKi9cbmZ1bmN0aW9uIGVyckZyb21SZXNwb25zZTxSZXNwb25zZUJvZHlUeXBlPihyZXM6IHN1cGVyYWdlbnQuUmVzcG9uc2UpOiBBcGlSZXNwb25zZUVycm9yIHtcbiAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZVJlc3BvbnNlRXJyb3JTdHJpbmcocmVzKTtcbiAgY29uc3Qgc3RhdHVzID0gcmVzLnN0YXR1cztcbiAgY29uc3QgcmVzdWx0ID0gcmVzLmJvZHkgYXMgUmVzcG9uc2VCb2R5VHlwZTtcbiAgY29uc3QgaW52YWxpZFRva2VuID0gXy5oYXMocmVzLmhlYWRlciwgJ3gtYXV0aC1yZXF1aXJlZCcpICYmIHJlcy5oZWFkZXJbJ3gtYXV0aC1yZXF1aXJlZCddID09PSAndHJ1ZSc7XG4gIGNvbnN0IG5lZWRzT3RwID0gcmVzLmJvZHk/Lm5lZWRzT1RQICE9PSB1bmRlZmluZWQ7XG4gIHJldHVybiBuZXcgQXBpUmVzcG9uc2VFcnJvcihtZXNzYWdlLCBzdGF0dXMsIHJlc3VsdCwgaW52YWxpZFRva2VuLCBuZWVkc090cCk7XG59XG5cbi8qKlxuICogSGFuZGxlIGFuIGVycm9yIG9yIGFuIGVycm9yIGNvbnRhaW5pbmcgYW4gSFRUUCByZXNwb25zZSBhbmQgdXNlIGl0IHRvIHRocm93IGEgd2VsbC1mb3JtZWQgZXJyb3Igb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVSZXNwb25zZUVycm9yKGU6IEVycm9yICYgeyByZXNwb25zZT86IHN1cGVyYWdlbnQuUmVzcG9uc2UgfSk6IG5ldmVyIHtcbiAgaWYgKGUucmVzcG9uc2UpIHtcbiAgICB0aHJvdyBlcnJGcm9tUmVzcG9uc2UoZS5yZXNwb25zZSk7XG4gIH1cbiAgdGhyb3cgZTtcbn1cblxuLyoqXG4gKiBUaGVyZSBhcmUgbWFueSB3YXlzIGEgcmVxdWVzdCBjYW4gZmFpbCwgYW5kIG1heSB3YXlzIGluZm9ybWF0aW9uIG9uIHRoYXQgZmFpbHVyZSBjYW4gYmVcbiAqIGNvbW11bmljYXRlZCB0byB0aGUgY2xpZW50LiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGhhbmRsZSB0aG9zZSBjYXNlcyBhbmQgY3JlYXRlIGEgc2FuZSBlcnJvciBzdHJpbmdcbiAqIEBwYXJhbSByZXMgUmVzcG9uc2UgZnJvbSBhbiBIVFRQIHJlcXVlc3RcbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2VFcnJvclN0cmluZyhyZXM6IHN1cGVyYWdlbnQuUmVzcG9uc2UpOiBzdHJpbmcge1xuICBsZXQgZXJyU3RyaW5nID0gcmVzLnN0YXR1cy50b1N0cmluZygpOyAvLyBhdCB0aGUgdmVyeSBsZWFzdCB3ZSdsbCBoYXZlIHRoZSBzdGF0dXMgY29kZVxuICBpZiAocmVzLmJvZHk/LmVycm9yKSB7XG4gICAgLy8gdGhpcyBpcyB0aGUgY2FzZSB3ZSBob3BlIGZvciwgd2hlcmUgdGhlIHNlcnZlciBnaXZlcyB1cyBhIG5pY2UgZXJyb3IgZnJvbSB0aGUgSlNPTiBib2R5XG4gICAgZXJyU3RyaW5nID0gcmVzLmJvZHkuZXJyb3I7XG4gIH0gZWxzZSBpZiAocmVzLnRleHQpIHtcbiAgICAvLyBpZiB0aGUgcmVzcG9uc2UgY2FtZSBiYWNrIGFzIHRleHQsIHdlIHRyeSB0byBwYXJzZSBpdCBhcyBIVE1MIGFuZCByZW1vdmUgYWxsIHRhZ3MsIGxlYXZpbmcgdXNcbiAgICAvLyBqdXN0IHRoZSBiYXJlIHRleHQsIHdoaWNoIHdlIHRoZW4gdHJpbSBvZiBleGNlc3NpdmUgbmV3bGluZXMgYW5kIGxpbWl0IHRvIGEgY2VydGFpbiBsZW5ndGhcbiAgICB0cnkge1xuICAgICAgbGV0IHNhbml0aXplZFRleHQgPSBzYW5pdGl6ZUh0bWwocmVzLnRleHQsIHsgYWxsb3dlZFRhZ3M6IFtdIH0pO1xuICAgICAgc2FuaXRpemVkVGV4dCA9IHNhbml0aXplZFRleHQudHJpbSgpO1xuICAgICAgc2FuaXRpemVkVGV4dCA9IGVvbC5sZihzYW5pdGl6ZWRUZXh0KTsgLy8gdXNlICdcXG4nIGZvciBhbGwgbmV3bGluZXNcbiAgICAgIHNhbml0aXplZFRleHQgPSBfLnJlcGxhY2Uoc2FuaXRpemVkVGV4dCwgL1xcblsgfFxcdF17MSx9XFxuL2csICdcXG5cXG4nKTsgLy8gcmVtb3ZlIHRoZSBzcGFjZXMvdGFicyBiZXR3ZWVuIG5ld2xpbmVzXG4gICAgICBzYW5pdGl6ZWRUZXh0ID0gXy5yZXBsYWNlKHNhbml0aXplZFRleHQsIC9bXFxuXXszLH0vZywgJ1xcblxcbicpOyAvLyBoYXZlIGF0IG1vc3QgMiBjb25zZWN1dGl2ZSBuZXdsaW5lc1xuICAgICAgc2FuaXRpemVkVGV4dCA9IHNhbml0aXplZFRleHQuc3Vic3RyaW5nKDAsIDUwMDApOyAvLyBwcmV2ZW50IG1lc3NhZ2UgZnJvbSBnZXR0aW5nIHRvbyBsYXJnZVxuICAgICAgZXJyU3RyaW5nID0gZXJyU3RyaW5nICsgJ1xcbicgKyBzYW5pdGl6ZWRUZXh0OyAvLyBhZGQgaXQgdG8gb3VyIGV4aXN0aW5nIGVyclN0cmluZyAoYXQgdGhpcyBwb2ludCB0aGUgbW9yZSBpbmZvIHRoZSBiZXR0ZXIhKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmcsIHRoZSByZXNwb25zZSdzIEhUTUwgd2FzIHRvbyB3YWNreSB0byBiZSBwYXJzZWQgY2xlYW5seVxuICAgICAgZGVidWcoJ2dvdCBlcnJvciB3aXRoIG1lc3NhZ2UgXCIlc1wiIHdoaWxlIGNyZWF0aW5nIHJlc3BvbnNlIGVycm9yIHN0cmluZyBmcm9tIHJlc3BvbnNlOiAlcycsIGUubWVzc2FnZSwgcmVzLnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlcnJTdHJpbmc7XG59XG5cbi8qKlxuICogU2VyaWFsaXplIHJlcXVlc3QgZGF0YSBiYXNlZCBvbiB0aGUgcmVxdWVzdCBjb250ZW50IHR5cGVcbiAqIE5vdGU6IE5vdCBzdXJlIHRoaXMgaXMgc3RpbGwgbmVlZGVkIG9yIGV2ZW4gdXNlZnVsLiBDb25zaWRlciByZW1vdmluZy5cbiAqIEBwYXJhbSByZXFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVJlcXVlc3REYXRhKHJlcTogc3VwZXJhZ2VudC5SZXF1ZXN0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgbGV0IGRhdGE6IHN0cmluZyB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gKHJlcSBhcyBhbnkpLl9kYXRhO1xuICBpZiAodHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgbGV0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC1UeXBlJyk7XG4gICAgLy8gUGFyc2Ugb3V0IGp1c3QgdGhlIGNvbnRlbnQgdHlwZSBmcm9tIHRoZSBoZWFkZXIgKGlnbm9yZSB0aGUgY2hhcnNldClcbiAgICBpZiAoY29udGVudFR5cGUpIHtcbiAgICAgIGNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuc3BsaXQoJzsnKVswXTtcbiAgICB9XG4gICAgbGV0IHNlcmlhbGl6ZSA9IHN1cGVyYWdlbnQuc2VyaWFsaXplW2NvbnRlbnRUeXBlXTtcbiAgICBpZiAoIXNlcmlhbGl6ZSAmJiAvW1xcLytdanNvblxcYi8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICAgIHNlcmlhbGl6ZSA9IHN1cGVyYWdlbnQuc2VyaWFsaXplWydhcHBsaWNhdGlvbi9qc29uJ107XG4gICAgfVxuICAgIGlmIChzZXJpYWxpemUpIHtcbiAgICAgIGRhdGEgPSBzZXJpYWxpemUoZGF0YSk7XG4gICAgICAocmVxIGFzIGFueSkuX2RhdGEgPSBkYXRhO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogU2V0IHRoZSBzdXBlcmFnZW50IHF1ZXJ5IHN0cmluZyBjb3JyZWN0bHkgZm9yIGJyb3dzZXJzIG9yIG5vZGUuXG4gKiBAcGFyYW0gcmVxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRSZXF1ZXN0UXVlcnlTdHJpbmcocmVxOiBzdXBlcmFnZW50LlN1cGVyQWdlbnRSZXF1ZXN0KTogdm9pZCB7XG4gIGNvbnN0IHVybERldGFpbHMgPSB1cmxMaWIucGFyc2UocmVxLnVybCk7XG5cbiAgbGV0IHF1ZXJ5U3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHF1ZXJ5OiBzdHJpbmdbXSA9IChyZXEgYXMgYW55KS5fcXVlcnk7XG4gIGNvbnN0IHFzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0gKHJlcSBhcyBhbnkpLnFzO1xuICBpZiAocXVlcnkgJiYgcXVlcnkubGVuZ3RoID4gMCkge1xuICAgIC8vIGJyb3dzZXIgdmVyc2lvblxuICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnkuam9pbignJicpO1xuICAgIChyZXEgYXMgYW55KS5fcXVlcnkgPSBbXTtcbiAgfSBlbHNlIGlmIChxcykge1xuICAgIC8vIG5vZGUgdmVyc2lvblxuICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlzdHJpbmcuc3RyaW5naWZ5KHFzKTtcbiAgICAocmVxIGFzIGFueSkucXMgPSBudWxsO1xuICB9XG5cbiAgaWYgKHF1ZXJ5U3RyaW5nKSB7XG4gICAgaWYgKHVybERldGFpbHMuc2VhcmNoKSB7XG4gICAgICB1cmxEZXRhaWxzLnNlYXJjaCArPSAnJicgKyBxdWVyeVN0cmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsRGV0YWlscy5zZWFyY2ggPSAnPycgKyBxdWVyeVN0cmluZztcbiAgICB9XG4gICAgcmVxLnVybCA9IHVybExpYi5mb3JtYXQodXJsRGV0YWlscyk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZnkgdGhhdCB0aGUgcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyIGlzIHNpZ25lZCBjb3JyZWN0bHkuXG4gKiBSaWdodCBub3csIGl0IGlzIHZlcnkgcGVybWlzc2l2ZSB3aXRoIHRoZSB0aW1lc3RhbXAgdmFyaWFuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlSZXNwb25zZShcbiAgYml0Z286IEJpdEdvQVBJLFxuICB0b2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBtZXRob2Q6IFZlcmlmeVJlc3BvbnNlT3B0aW9uc1snbWV0aG9kJ10sXG4gIHJlcTogc3VwZXJhZ2VudC5TdXBlckFnZW50UmVxdWVzdCxcbiAgcmVzcG9uc2U6IHN1cGVyYWdlbnQuUmVzcG9uc2Vcbik6IHN1cGVyYWdlbnQuUmVzcG9uc2Uge1xuICAvLyB3ZSBjYW4ndCB2ZXJpZnkgdGhlIHJlc3BvbnNlIGlmIHdlJ3JlIG5vdCBhdXRoZW50aWNhdGVkXG4gIGlmICghcmVxLmlzVjJBdXRoZW50aWNhdGVkIHx8ICFyZXEuYXV0aGVudGljYXRpb25Ub2tlbikge1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIGNvbnN0IHZlcmlmaWNhdGlvblJlc3BvbnNlID0gYml0Z28udmVyaWZ5UmVzcG9uc2Uoe1xuICAgIHVybDogcmVxLnVybCxcbiAgICBobWFjOiByZXNwb25zZS5oZWFkZXIuaG1hYyxcbiAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgdGV4dDogcmVzcG9uc2UudGV4dCxcbiAgICB0aW1lc3RhbXA6IHJlc3BvbnNlLmhlYWRlci50aW1lc3RhbXAsXG4gICAgdG9rZW46IHJlcS5hdXRoZW50aWNhdGlvblRva2VuLFxuICAgIG1ldGhvZCxcbiAgfSk7XG5cbiAgaWYgKCF2ZXJpZmljYXRpb25SZXNwb25zZS5pc1ZhbGlkKSB7XG4gICAgLy8gY2FsY3VsYXRlIHRoZSBITUFDXG4gICAgY29uc3QgcmVjZWl2ZWRIbWFjID0gcmVzcG9uc2UuaGVhZGVyLmhtYWM7XG4gICAgY29uc3QgZXhwZWN0ZWRIbWFjID0gdmVyaWZpY2F0aW9uUmVzcG9uc2UuZXhwZWN0ZWRIbWFjO1xuICAgIGNvbnN0IHNpZ25hdHVyZVN1YmplY3QgPSB2ZXJpZmljYXRpb25SZXNwb25zZS5zaWduYXR1cmVTdWJqZWN0O1xuICAgIC8vIExvZyBvbmx5IHRoZSBmaXJzdCAxMCBjaGFyYWN0ZXJzIG9mIHRoZSB0b2tlbiB0byBlbnN1cmUgdGhlIGZ1bGwgdG9rZW4gaXNuJ3QgbG9nZ2VkLlxuICAgIGNvbnN0IHBhcnRpYWxCaXRnb1Rva2VuID0gdG9rZW4gPyB0b2tlbi5zdWJzdHJpbmcoMCwgMTApIDogJyc7XG4gICAgY29uc3QgZXJyb3JEZXRhaWxzID0ge1xuICAgICAgZXhwZWN0ZWRIbWFjLFxuICAgICAgcmVjZWl2ZWRIbWFjLFxuICAgICAgaG1hY0lucHV0OiBzaWduYXR1cmVTdWJqZWN0LFxuICAgICAgcmVxdWVzdFRva2VuOiByZXEuYXV0aGVudGljYXRpb25Ub2tlbixcbiAgICAgIGJpdGdvVG9rZW46IHBhcnRpYWxCaXRnb1Rva2VuLFxuICAgIH07XG4gICAgZGVidWcoJ0ludmFsaWQgcmVzcG9uc2UgSE1BQzogJU8nLCBlcnJvckRldGFpbHMpO1xuICAgIHRocm93IG5ldyBBcGlSZXNwb25zZUVycm9yKCdpbnZhbGlkIHJlc3BvbnNlIEhNQUMsIHBvc3NpYmxlIG1hbi1pbi10aGUtbWlkZGxlLWF0dGFjaycsIDUxMSwgZXJyb3JEZXRhaWxzKTtcbiAgfVxuXG4gIGlmIChiaXRnby5nZXRBdXRoVmVyc2lvbigpID09PSAzICYmICF2ZXJpZmljYXRpb25SZXNwb25zZS5pc0luUmVzcG9uc2VWYWxpZGl0eVdpbmRvdykge1xuICAgIGNvbnN0IGVycm9yRGV0YWlscyA9IHtcbiAgICAgIHRpbWVzdGFtcDogcmVzcG9uc2UuaGVhZGVyLnRpbWVzdGFtcCxcbiAgICAgIHZlcmlmaWNhdGlvblRpbWU6IHZlcmlmaWNhdGlvblJlc3BvbnNlLnZlcmlmaWNhdGlvblRpbWUsXG4gICAgfTtcbiAgICBkZWJ1ZygnU2VydmVyIHJlc3BvbnNlIG91dHNpZGUgcmVzcG9uc2UgdmFsaWRpdHkgdGltZSB3aW5kb3c6ICVPJywgZXJyb3JEZXRhaWxzKTtcbiAgICB0aHJvdyBuZXcgQXBpUmVzcG9uc2VFcnJvcihcbiAgICAgICdzZXJ2ZXIgcmVzcG9uc2Ugb3V0c2lkZSByZXNwb25zZSB2YWxpZGl0eSB0aW1lIHdpbmRvdywgcG9zc2libGUgbWFuLWluLXRoZS1taWRkbGUtYXR0YWNrJyxcbiAgICAgIDUxMSxcbiAgICAgIGVycm9yRGV0YWlsc1xuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuIl19
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7R0FFRztBQUNILGtEQUEwQjtBQUMxQiw4Q0FBc0I7QUFDdEIsb0RBQXVCO0FBQ3ZCLGtFQUF5QztBQUN6Qyw0REFBb0M7QUFDcEMsOENBQXlCO0FBQ3pCLDhEQUFzQztBQUV0QyxtREFBc0U7QUFLdEUsTUFBTSxLQUFLLEdBQUcsSUFBQSxlQUFLLEVBQUMsV0FBVyxDQUFDLENBQUM7QUFFakM7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLGNBQWMsQ0FDNUIsR0FBaUM7SUFFakMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUN4QixNQUFNLENBQUMsYUFBc0I7WUFDM0IsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUNiLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBcUIsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQy9FLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FDdEMsQ0FBQztRQUNKLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBWEQsd0NBV0M7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQ2xDLGFBQXNCO0lBRXRCLE9BQU8sVUFBVSxHQUF3QjtRQUN2QyxJQUFJLGdCQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUNuRSxPQUFPLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztTQUMzRDtRQUNELE1BQU0sZUFBZSxDQUFDLEdBQUcsQ0FBQyxD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QyxnQkFBZ0IsQ0FBQztRQUMvRCx1RkFBdUY7UUFDdkYsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDOUQsTUFBTSxZQUFZLEdBQUc7WUFDbkIsWUFBWTtZQUNaLFlBQVk7WUFDWixTQUFTLEVBQUUsZ0JBQWdCO1lBQzNCLFlBQVksRUFBRSxHQUFHLENBQUMsbUJBQW1CO1lBQ3JDLFVBQVUsRUFBRSxpQkFBaUI7U0FDOUIsQ0FBQztRQUNGLEtBQUssQ0FBQywyQkFBMkIsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRCxNQUFNLElBQUksMkJBQWdCLENBQUMsMERBQTBELEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQzNHO0lBRUQsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsMEJBQTBCLEVBQUU7UUFDcEYsTUFBTSxZQUFZLEdBQUc7WUFDbkIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUztZQUNwQyxnQkFBZ0IsRUFBRSxvQkFBb0IsQ0FBQyxnQkFBZ0I7U0FDeEQsQ0FBQztRQUNGLEtBQUssQ0FBQywyREFBMkQsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRixNQUFNLElBQUksMkJBQWdCLENBQ3hCLDBGQUEwRixFQUMxRixHQUFHLEVBQ0gsWUFBWSxDQUNiLENBQUM7S0FDSDtJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFyREQsd0NBcURDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IERlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBlb2wgZnJvbSAnZW9sJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgc2FuaXRpemVIdG1sIGZyb20gJ3Nhbml0aXplLWh0bWwnO1xuaW1wb3J0IHN1cGVyYWdlbnQgZnJvbSAnc3VwZXJhZ2VudCc7XG5pbXBvcnQgdXJsTGliIGZyb20gJ3VybCc7XG5pbXBvcnQgcXVlcnlzdHJpbmcgZnJvbSAncXVlcnlzdHJpbmcnO1xuXG5pbXBvcnQgeyBBcGlSZXNwb25zZUVycm9yLCBCaXRHb1JlcXVlc3QgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IFZlcmlmeVJlc3BvbnNlT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICcuL2JpdGdvQVBJJztcblxuY29uc3QgZGVidWcgPSBEZWJ1ZygnYml0Z286YXBpJyk7XG5cbi8qKlxuICogQWRkIHRoZSBiaXRnby1zcGVjaWZpYyByZXN1bHQoKSBmdW5jdGlvbiBvbiBhIHN1cGVyYWdlbnQgcmVxdWVzdC5cbiAqXG4gKiBJZiB0aGUgc2VydmVyIHJlc3BvbnNlIGlzIHN1Y2Nlc3NmdWwsIHRoZSBgcmVzdWx0KClgIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGVpdGhlciB0aGUgZW50aXJlIHJlc3BvbnNlIGJvZHksXG4gKiBvciB0aGUgZmllbGQgZnJvbSB0aGUgcmVzcG9uc2UgYm9keSBzcGVjaWZpZWQgYnkgdGhlIGBvcHRpb25hbEZpZWxkYCBwYXJhbWV0ZXIgaWYgaXQgaXMgcHJvdmlkZWQuXG4gKlxuICogSWYgdGhlIHNlcnZlciByZXNwb25zZSB3aXRoIGFuIGVycm9yLCBgcmVzdWx0KClgIHdpbGwgaGFuZGxlIEhUVFAgZXJyb3JzIGFwcHJvcHJpYXRlbHkgYnlcbiAqIHJldGhyb3dpbmcgdGhlbSBhcyBhbiBgQXBpUmVzcG9uc2VFcnJvcmAgaWYgcG9zc2libGUsIGFuZCBvdGhlcndpc2UgcmV0aHJvd2luZyB0aGUgdW5kZXJseWluZyByZXNwb25zZSBlcnJvci5cbiAqXG4gKiBAcGFyYW0gcmVxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0JpdGdvUmVxdWVzdDxSZXNwb25zZVJlc3VsdFR5cGUgPSBhbnk+KFxuICByZXE6IHN1cGVyYWdlbnQuU3VwZXJBZ2VudFJlcXVlc3Rcbik6IEJpdEdvUmVxdWVzdDxSZXNwb25zZVJlc3VsdFR5cGU+IHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocmVxLCB7XG4gICAgcmVzdWx0KG9wdGlvbmFsRmllbGQ/OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiByZXEudGhlbihcbiAgICAgICAgKHJlc3BvbnNlKSA9PiBoYW5kbGVSZXNwb25zZVJlc3VsdDxSZXNwb25zZVJlc3VsdFR5cGU+KG9wdGlvbmFsRmllbGQpKHJlc3BvbnNlKSxcbiAgICAgICAgKGVycm9yKSA9PiBoYW5kbGVSZXNwb25zZUVycm9yKGVycm9yKVxuICAgICAgKTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSBmdW5jdGlvbiB3aGljaCBleHRyYWN0cyB0aGUgc3BlY2lmaWVkIHJlc3BvbnNlIGJvZHkgcHJvcGVydHkgZnJvbSB0aGUgcmVzcG9uc2UgaWYgc3VjY2Vzc2Z1bCxcbiAqIG90aGVyd2lzZSB0aHJvdyBhbiBgQXBpRXJyb3JSZXNwb25zZWAgcGFyc2VkIGZyb20gdGhlIHJlc3BvbnNlIGJvZHkuXG4gKiBAcGFyYW0gb3B0aW9uYWxGaWVsZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUmVzcG9uc2VSZXN1bHQ8UmVzcG9uc2VSZXN1bHRUeXBlPihcbiAgb3B0aW9uYWxGaWVsZD86IHN0cmluZ1xuKTogKHJlczogc3VwZXJhZ2VudC5SZXNwb25zZSkgPT4gUmVzcG9uc2VSZXN1bHRUeXBlIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZXM6IHN1cGVyYWdlbnQuUmVzcG9uc2UpOiBSZXNwb25zZVJlc3VsdFR5cGUge1xuICAgIGlmIChfLmlzTnVtYmVyKHJlcy5zdGF0dXMpICYmIHJlcy5zdGF0dXMgPj0gMjAwICYmIHJlcy5zdGF0dXMgPCAzMDApIHtcbiAgICAgIHJldHVybiBvcHRpb25hbEZpZWxkID8gcmVzLmJvZHlbb3B0aW9uYWxGaWVsZF0gOiByZXMuYm9keTtcbiAgICB9XG4gICAgdGhyb3cgZXJyRnJvbVJlc3BvbnNlKHJlcyk7XG4gIH07XG59XG5cbi8qKlxuICogRXh0cmFjdCByZWxldmFudCBpbmZvcm1hdGlvbiBmcm9tIGEgc3VjY2Vzc2Z1bCByZXNwb25zZSAodGhhdCBpcywgYSByZXNwb25zZSB3aXRoIGFuIEhUVFAgc3RhdHVzIGNvZGVcbiAqIGJldHdlZW4gMjAwIGFuZCAyOTkpLCBidXQgd2hpY2ggcmVzdWx0ZWQgaW4gYW4gYXBwbGljYXRpb24gc3BlY2lmaWMgZXJyb3IgYW5kIHVzZSBpdCB0byBjb25zdHJ1Y3QgYW5kXG4gKiB0aHJvdyBhbiBgQXBpRXJyb3JSZXNwb25zZWAuXG4gKlxuICogQHBhcmFtIHJlc1xuICovXG5mdW5jdGlvbiBlcnJGcm9tUmVzcG9uc2U8UmVzcG9uc2VCb2R5VHlwZT4ocmVzOiBzdXBlcmFnZW50LlJlc3BvbnNlKTogQXBpUmVzcG9uc2VFcnJvciB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVSZXNwb25zZUVycm9yU3RyaW5nKHJlcyk7XG4gIGNvbnN0IHN0YXR1cyA9IHJlcy5zdGF0dXM7XG4gIGNvbnN0IHJlc3VsdCA9IHJlcy5ib2R5IGFzIFJlc3BvbnNlQm9keVR5cGU7XG4gIGNvbnN0IGludmFsaWRUb2tlbiA9IF8uaGFzKHJlcy5oZWFkZXIsICd4LWF1dGgtcmVxdWlyZWQnKSAmJiByZXMuaGVhZGVyWyd4LWF1dGgtcmVxdWlyZWQnXSA9PT0gJ3RydWUnO1xuICBjb25zdCBuZWVkc090cCA9IHJlcy5ib2R5Py5uZWVkc09UUCAhPT0gdW5kZWZpbmVkO1xuICByZXR1cm4gbmV3IEFwaVJlc3BvbnNlRXJyb3IobWVzc2FnZSwgc3RhdHVzLCByZXN1bHQsIGludmFsaWRUb2tlbiwgbmVlZHNPdHApO1xufVxuXG4vKipcbiAqIEhhbmRsZSBhbiBlcnJvciBvciBhbiBlcnJvciBjb250YWluaW5nIGFuIEhUVFAgcmVzcG9uc2UgYW5kIHVzZSBpdCB0byB0aHJvdyBhIHdlbGwtZm9ybWVkIGVycm9yIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUmVzcG9uc2VFcnJvcihlOiBFcnJvciAmIHsgcmVzcG9uc2U/OiBzdXBlcmFnZW50LlJlc3BvbnNlIH0pOiBuZXZlciB7XG4gIGlmIChlLnJlc3BvbnNlKSB7XG4gICAgdGhyb3cgZXJyRnJvbVJlc3BvbnNlKGUucmVzcG9uc2UpO1xuICB9XG4gIHRocm93IGU7XG59XG5cbi8qKlxuICogVGhlcmUgYXJlIG1hbnkgd2F5cyBhIHJlcXVlc3QgY2FuIGZhaWwsIGFuZCBtYXkgd2F5cyBpbmZvcm1hdGlvbiBvbiB0aGF0IGZhaWx1cmUgY2FuIGJlXG4gKiBjb21tdW5pY2F0ZWQgdG8gdGhlIGNsaWVudC4gVGhpcyBmdW5jdGlvbiB0cmllcyB0byBoYW5kbGUgdGhvc2UgY2FzZXMgYW5kIGNyZWF0ZSBhIHNhbmUgZXJyb3Igc3RyaW5nXG4gKiBAcGFyYW0gcmVzIFJlc3BvbnNlIGZyb20gYW4gSFRUUCByZXF1ZXN0XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlRXJyb3JTdHJpbmcocmVzOiBzdXBlcmFnZW50LlJlc3BvbnNlKTogc3RyaW5nIHtcbiAgbGV0IGVyclN0cmluZyA9IHJlcy5zdGF0dXMudG9TdHJpbmcoKTsgLy8gYXQgdGhlIHZlcnkgbGVhc3Qgd2UnbGwgaGF2ZSB0aGUgc3RhdHVzIGNvZGVcbiAgaWYgKHJlcy5ib2R5Py5lcnJvcikge1xuICAgIC8vIHRoaXMgaXMgdGhlIGNhc2Ugd2UgaG9wZSBmb3IsIHdoZXJlIHRoZSBzZXJ2ZXIgZ2l2ZXMgdXMgYSBuaWNlIGVycm9yIGZyb20gdGhlIEpTT04gYm9keVxuICAgIGVyclN0cmluZyA9IHJlcy5ib2R5LmVycm9yO1xuICB9IGVsc2UgaWYgKHJlcy50ZXh0KSB7XG4gICAgLy8gaWYgdGhlIHJlc3BvbnNlIGNhbWUgYmFjayBhcyB0ZXh0LCB3ZSB0cnkgdG8gcGFyc2UgaXQgYXMgSFRNTCBhbmQgcmVtb3ZlIGFsbCB0YWdzLCBsZWF2aW5nIHVzXG4gICAgLy8ganVzdCB0aGUgYmFyZSB0ZXh0LCB3aGljaCB3ZSB0aGVuIHRyaW0gb2YgZXhjZXNzaXZlIG5ld2xpbmVzIGFuZCBsaW1pdCB0byBhIGNlcnRhaW4gbGVuZ3RoXG4gICAgdHJ5IHtcbiAgICAgIGxldCBzYW5pdGl6ZWRUZXh0ID0gc2FuaXRpemVIdG1sKHJlcy50ZXh0LCB7IGFsbG93ZWRUYWdzOiBbXSB9KTtcbiAgICAgIHNhbml0aXplZFRleHQgPSBzYW5pdGl6ZWRUZXh0LnRyaW0oKTtcbiAgICAgIHNhbml0aXplZFRleHQgPSBlb2wubGYoc2FuaXRpemVkVGV4dCk7IC8vIHVzZSAnXFxuJyBmb3IgYWxsIG5ld2xpbmVzXG4gICAgICBzYW5pdGl6ZWRUZXh0ID0gXy5yZXBsYWNlKHNhbml0aXplZFRleHQsIC9cXG5bIHxcXHRdezEsfVxcbi9nLCAnXFxuXFxuJyk7IC8vIHJlbW92ZSB0aGUgc3BhY2VzL3RhYnMgYmV0d2VlbiBuZXdsaW5lc1xuICAgICAgc2FuaXRpemVkVGV4dCA9IF8ucmVwbGFjZShzYW5pdGl6ZWRUZXh0LCAvW1xcbl17Myx9L2csICdcXG5cXG4nKTsgLy8gaGF2ZSBhdCBtb3N0IDIgY29uc2VjdXRpdmUgbmV3bGluZXNcbiAgICAgIHNhbml0aXplZFRleHQgPSBzYW5pdGl6ZWRUZXh0LnN1YnN0cmluZygwLCA1MDAwKTsgLy8gcHJldmVudCBtZXNzYWdlIGZyb20gZ2V0dGluZyB0b28gbGFyZ2VcbiAgICAgIGVyclN0cmluZyA9IGVyclN0cmluZyArICdcXG4nICsgc2FuaXRpemVkVGV4dDsgLy8gYWRkIGl0IHRvIG91ciBleGlzdGluZyBlcnJTdHJpbmcgKGF0IHRoaXMgcG9pbnQgdGhlIG1vcmUgaW5mbyB0aGUgYmV0dGVyISlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBkbyBub3RoaW5nLCB0aGUgcmVzcG9uc2UncyBIVE1MIHdhcyB0b28gd2Fja3kgdG8gYmUgcGFyc2VkIGNsZWFubHlcbiAgICAgIGRlYnVnKCdnb3QgZXJyb3Igd2l0aCBtZXNzYWdlIFwiJXNcIiB3aGlsZSBjcmVhdGluZyByZXNwb25zZSBlcnJvciBzdHJpbmcgZnJvbSByZXNwb25zZTogJXMnLCBlLm1lc3NhZ2UsIHJlcy50ZXh0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXJyU3RyaW5nO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZSByZXF1ZXN0IGRhdGEgYmFzZWQgb24gdGhlIHJlcXVlc3QgY29udGVudCB0eXBlXG4gKiBOb3RlOiBOb3Qgc3VyZSB0aGlzIGlzIHN0aWxsIG5lZWRlZCBvciBldmVuIHVzZWZ1bC4gQ29uc2lkZXIgcmVtb3ZpbmcuXG4gKiBAcGFyYW0gcmVxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVSZXF1ZXN0RGF0YShyZXE6IHN1cGVyYWdlbnQuUmVxdWVzdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGxldCBkYXRhOiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IChyZXEgYXMgYW55KS5fZGF0YTtcbiAgaWYgKHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJykge1xuICAgIGxldCBjb250ZW50VHlwZSA9IHJlcS5nZXQoJ0NvbnRlbnQtVHlwZScpO1xuICAgIC8vIFBhcnNlIG91dCBqdXN0IHRoZSBjb250ZW50IHR5cGUgZnJvbSB0aGUgaGVhZGVyIChpZ25vcmUgdGhlIGNoYXJzZXQpXG4gICAgaWYgKGNvbnRlbnRUeXBlKSB7XG4gICAgICBjb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLnNwbGl0KCc7JylbMF07XG4gICAgfVxuICAgIGxldCBzZXJpYWxpemUgPSBzdXBlcmFnZW50LnNlcmlhbGl6ZVtjb250ZW50VHlwZV07XG4gICAgaWYgKCFzZXJpYWxpemUgJiYgL1tcXC8rXWpzb25cXGIvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgICBzZXJpYWxpemUgPSBzdXBlcmFnZW50LnNlcmlhbGl6ZVsnYXBwbGljYXRpb24vanNvbiddO1xuICAgIH1cbiAgICBpZiAoc2VyaWFsaXplKSB7XG4gICAgICBkYXRhID0gc2VyaWFsaXplKGRhdGEpO1xuICAgICAgKHJlcSBhcyBhbnkpLl9kYXRhID0gZGF0YTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNldCB0aGUgc3VwZXJhZ2VudCBxdWVyeSBzdHJpbmcgY29ycmVjdGx5IGZvciBicm93c2VycyBvciBub2RlLlxuICogQHBhcmFtIHJlcVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UmVxdWVzdFF1ZXJ5U3RyaW5nKHJlcTogc3VwZXJhZ2VudC5TdXBlckFnZW50UmVxdWVzdCk6IHZvaWQge1xuICBjb25zdCB1cmxEZXRhaWxzID0gdXJsTGliLnBhcnNlKHJlcS51cmwpO1xuXG4gIGxldCBxdWVyeVN0cmluZzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb25zdCBxdWVyeTogc3RyaW5nW10gPSAocmVxIGFzIGFueSkuX3F1ZXJ5O1xuICBjb25zdCBxczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IChyZXEgYXMgYW55KS5xcztcbiAgaWYgKHF1ZXJ5ICYmIHF1ZXJ5Lmxlbmd0aCA+IDApIHtcbiAgICAvLyBicm93c2VyIHZlcnNpb25cbiAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5LmpvaW4oJyYnKTtcbiAgICAocmVxIGFzIGFueSkuX3F1ZXJ5ID0gW107XG4gIH0gZWxzZSBpZiAocXMpIHtcbiAgICAvLyBub2RlIHZlcnNpb25cbiAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeShxcyk7XG4gICAgKHJlcSBhcyBhbnkpLnFzID0gbnVsbDtcbiAgfVxuXG4gIGlmIChxdWVyeVN0cmluZykge1xuICAgIGlmICh1cmxEZXRhaWxzLnNlYXJjaCkge1xuICAgICAgdXJsRGV0YWlscy5zZWFyY2ggKz0gJyYnICsgcXVlcnlTdHJpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVybERldGFpbHMuc2VhcmNoID0gJz8nICsgcXVlcnlTdHJpbmc7XG4gICAgfVxuICAgIHJlcS51cmwgPSB1cmxMaWIuZm9ybWF0KHVybERldGFpbHMpO1xuICB9XG59XG5cbi8qKlxuICogVmVyaWZ5IHRoYXQgdGhlIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBpcyBzaWduZWQgY29ycmVjdGx5LlxuICogUmlnaHQgbm93LCBpdCBpcyB2ZXJ5IHBlcm1pc3NpdmUgd2l0aCB0aGUgdGltZXN0YW1wIHZhcmlhbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5UmVzcG9uc2UoXG4gIGJpdGdvOiBCaXRHb0FQSSxcbiAgdG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgbWV0aG9kOiBWZXJpZnlSZXNwb25zZU9wdGlvbnNbJ21ldGhvZCddLFxuICByZXE6IHN1cGVyYWdlbnQuU3VwZXJBZ2VudFJlcXVlc3QsXG4gIHJlc3BvbnNlOiBzdXBlcmFnZW50LlJlc3BvbnNlXG4pOiBzdXBlcmFnZW50LlJlc3BvbnNlIHtcbiAgLy8gd2UgY2FuJ3QgdmVyaWZ5IHRoZSByZXNwb25zZSBpZiB3ZSdyZSBub3QgYXV0aGVudGljYXRlZFxuICBpZiAoIXJlcS5pc1YyQXV0aGVudGljYXRlZCB8fCAhcmVxLmF1dGhlbnRpY2F0aW9uVG9rZW4pIHtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBjb25zdCB2ZXJpZmljYXRpb25SZXNwb25zZSA9IGJpdGdvLnZlcmlmeVJlc3BvbnNlKHtcbiAgICB1cmw6IHJlcS51cmwsXG4gICAgaG1hYzogcmVzcG9uc2UuaGVhZGVyLmhtYWMsXG4gICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxuICAgIHRleHQ6IHJlc3BvbnNlLnRleHQsXG4gICAgdGltZXN0YW1wOiByZXNwb25zZS5oZWFkZXIudGltZXN0YW1wLFxuICAgIHRva2VuOiByZXEuYXV0aGVudGljYXRpb25Ub2tlbixcbiAgICBtZXRob2QsXG4gIH0pO1xuXG4gIGlmICghdmVyaWZpY2F0aW9uUmVzcG9uc2UuaXNWYWxpZCkge1xuICAgIC8vIGNhbGN1bGF0ZSB0aGUgSE1BQ1xuICAgIGNvbnN0IHJlY2VpdmVkSG1hYyA9IHJlc3BvbnNlLmhlYWRlci5obWFjO1xuICAgIGNvbnN0IGV4cGVjdGVkSG1hYyA9IHZlcmlmaWNhdGlvblJlc3BvbnNlLmV4cGVjdGVkSG1hYztcbiAgICBjb25zdCBzaWduYXR1cmVTdWJqZWN0ID0gdmVyaWZpY2F0aW9uUmVzcG9uc2Uuc2lnbmF0dXJlU3ViamVjdDtcbiAgICAvLyBMb2cgb25seSB0aGUgZmlyc3QgMTAgY2hhcmFjdGVycyBvZiB0aGUgdG9rZW4gdG8gZW5zdXJlIHRoZSBmdWxsIHRva2VuIGlzbid0IGxvZ2dlZC5cbiAgICBjb25zdCBwYXJ0aWFsQml0Z29Ub2tlbiA9IHRva2VuID8gdG9rZW4uc3Vic3RyaW5nKDAsIDEwKSA6ICcnO1xuICAgIGNvbnN0IGVycm9yRGV0YWlscyA9IHtcbiAgICAgIGV4cGVjdGVkSG1hYyxcbiAgICAgIHJlY2VpdmVkSG1hYyxcbiAgICAgIGhtYWNJbnB1dDogc2lnbmF0dXJlU3ViamVjdCxcbiAgICAgIHJlcXVlc3RUb2tlbjogcmVxLmF1dGhlbnRpY2F0aW9uVG9rZW4sXG4gICAgICBiaXRnb1Rva2VuOiBwYXJ0aWFsQml0Z29Ub2tlbixcbiAgICB9O1xuICAgIGRlYnVnKCdJbnZhbGlkIHJlc3BvbnNlIEhNQUM6ICVPJywgZXJyb3JEZXRhaWxzKTtcbiAgICB0aHJvdyBuZXcgQXBpUmVzcG9uc2VFcnJvcignaW52YWxpZCByZXNwb25zZSBITUFDLCBwb3NzaWJsZSBtYW4taW4tdGhlLW1pZGRsZS1hdHRhY2snLCA1MTEsIGVycm9yRGV0YWlscyk7XG4gIH1cblxuICBpZiAoYml0Z28uZ2V0QXV0aFZlcnNpb24oKSA9PT0gMyAmJiAhdmVyaWZpY2F0aW9uUmVzcG9uc2UuaXNJblJlc3BvbnNlVmFsaWRpdHlXaW5kb3cpIHtcbiAgICBjb25zdCBlcnJvckRldGFpbHMgPSB7XG4gICAgICB0aW1lc3RhbXA6IHJlc3BvbnNlLmhlYWRlci50aW1lc3RhbXAsXG4gICAgICB2ZXJpZmljYXRpb25UaW1lOiB2ZXJpZmljYXRpb25SZXNwb25zZS52ZXJpZmljYXRpb25UaW1lLFxuICAgIH07XG4gICAgZGVidWcoJ1NlcnZlciByZXNwb25zZSBvdXRzaWRlIHJlc3BvbnNlIHZhbGlkaXR5IHRpbWUgd2luZG93OiAlTycsIGVycm9yRGV0YWlscyk7XG4gICAgdGhyb3cgbmV3IEFwaVJlc3BvbnNlRXJyb3IoXG4gICAgICAnc2VydmVyIHJlc3BvbnNlIG91dHNpZGUgcmVzcG9uc2UgdmFsaWRpdHkgdGltZSB3aW5kb3csIHBvc3NpYmxlIG1hbi1pbi10aGUtbWlkZGxlLWF0dGFjaycsXG4gICAgICA1MTEsXG4gICAgICBlcnJvckRldGFpbHNcbiAgICApO1xuICB9XG4gIHJldHVybiByZXNwb25zZTtcbn1cbiJdfQ==
|