@witnet/sdk 1.0.3 → 1.0.4
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/.env_witnet +6 -6
- package/LICENSE +21 -21
- package/README.md +103 -103
- package/dist/bin/helpers.d.ts +88 -0
- package/dist/bin/helpers.d.ts.map +1 -0
- package/dist/bin/helpers.js +866 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/lib/crypto/account.d.ts +18 -0
- package/dist/lib/crypto/account.d.ts.map +1 -0
- package/dist/lib/crypto/account.js +152 -0
- package/dist/lib/crypto/coinbase.d.ts +9 -0
- package/dist/lib/crypto/coinbase.d.ts.map +1 -0
- package/dist/lib/crypto/coinbase.js +39 -0
- package/dist/lib/crypto/index.d.ts +7 -0
- package/dist/lib/crypto/index.d.ts.map +1 -0
- package/dist/lib/crypto/index.js +28 -0
- package/dist/lib/crypto/interfaces.d.ts +80 -0
- package/dist/lib/crypto/interfaces.d.ts.map +1 -0
- package/dist/lib/crypto/interfaces.js +3 -0
- package/dist/lib/crypto/payloads/DataRequestPayload.d.ts +47 -0
- package/dist/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -0
- package/dist/lib/crypto/payloads/DataRequestPayload.js +384 -0
- package/dist/lib/crypto/payloads/StakePayload.d.ts +27 -0
- package/dist/lib/crypto/payloads/StakePayload.d.ts.map +1 -0
- package/dist/lib/crypto/payloads/StakePayload.js +184 -0
- package/dist/lib/crypto/payloads/UnstakePayload.d.ts +35 -0
- package/dist/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -0
- package/dist/lib/crypto/payloads/UnstakePayload.js +244 -0
- package/dist/lib/crypto/payloads/ValueTransferPayload.d.ts +24 -0
- package/dist/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -0
- package/dist/lib/crypto/payloads/ValueTransferPayload.js +182 -0
- package/dist/lib/crypto/payloads.d.ts +54 -0
- package/dist/lib/crypto/payloads.d.ts.map +1 -0
- package/dist/lib/crypto/payloads.js +224 -0
- package/dist/lib/crypto/signer.d.ts +26 -0
- package/dist/lib/crypto/signer.d.ts.map +1 -0
- package/dist/lib/crypto/signer.js +299 -0
- package/dist/lib/crypto/transmitters/DataRequests.d.ts +14 -0
- package/dist/lib/crypto/transmitters/DataRequests.d.ts.map +1 -0
- package/dist/lib/crypto/transmitters/DataRequests.js +62 -0
- package/dist/lib/crypto/transmitters/StakeDeposits.d.ts +11 -0
- package/dist/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -0
- package/dist/lib/crypto/transmitters/StakeDeposits.js +48 -0
- package/dist/lib/crypto/transmitters/StakeWithdrawals.d.ts +17 -0
- package/dist/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -0
- package/dist/lib/crypto/transmitters/StakeWithdrawals.js +115 -0
- package/dist/lib/crypto/transmitters/ValueTransfers.d.ts +10 -0
- package/dist/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -0
- package/dist/lib/crypto/transmitters/ValueTransfers.js +47 -0
- package/dist/lib/crypto/transmitters.d.ts +46 -0
- package/dist/lib/crypto/transmitters.d.ts.map +1 -0
- package/dist/lib/crypto/transmitters.js +506 -0
- package/dist/lib/crypto/types.d.ts +127 -0
- package/dist/lib/crypto/types.d.ts.map +1 -0
- package/dist/lib/crypto/types.js +261 -0
- package/dist/lib/crypto/utils.d.ts +10 -0
- package/dist/lib/crypto/utils.d.ts.map +1 -0
- package/dist/lib/crypto/utils.js +97 -0
- package/dist/lib/crypto/wallet.d.ts +26 -0
- package/dist/lib/crypto/wallet.d.ts.map +1 -0
- package/dist/lib/crypto/wallet.js +327 -0
- package/dist/lib/helpers.d.ts +90 -0
- package/dist/lib/helpers.d.ts.map +1 -0
- package/dist/lib/helpers.js +1031 -0
- package/dist/lib/index.d.ts +5 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +21 -0
- package/dist/lib/radon/artifacts.d.ts +55 -0
- package/dist/lib/radon/artifacts.d.ts.map +1 -0
- package/dist/lib/radon/artifacts.js +347 -0
- package/dist/lib/radon/ccdr/eth.d.ts +100 -0
- package/dist/lib/radon/ccdr/eth.d.ts.map +1 -0
- package/dist/lib/radon/ccdr/eth.js +237 -0
- package/dist/lib/radon/ccdr/index.d.ts +34 -0
- package/dist/lib/radon/ccdr/index.d.ts.map +1 -0
- package/dist/lib/radon/ccdr/index.js +63 -0
- package/dist/lib/radon/ccdr/wit.d.ts +29 -0
- package/dist/lib/radon/ccdr/wit.d.ts.map +1 -0
- package/dist/lib/radon/ccdr/wit.js +60 -0
- package/dist/lib/radon/filters.d.ts +14 -0
- package/dist/lib/radon/filters.d.ts.map +1 -0
- package/dist/lib/radon/filters.js +47 -0
- package/dist/lib/radon/index.d.ts +36 -0
- package/dist/lib/radon/index.d.ts.map +1 -0
- package/dist/lib/radon/index.js +154 -0
- package/dist/lib/radon/reducers.d.ts +29 -0
- package/dist/lib/radon/reducers.d.ts.map +1 -0
- package/dist/lib/radon/reducers.js +101 -0
- package/dist/lib/radon/retrievals.d.ts +120 -0
- package/dist/lib/radon/retrievals.d.ts.map +1 -0
- package/dist/lib/radon/retrievals.js +358 -0
- package/dist/lib/radon/sources.d.ts +102 -0
- package/dist/lib/radon/sources.d.ts.map +1 -0
- package/dist/lib/radon/sources.js +294 -0
- package/dist/lib/radon/types.d.ts +521 -0
- package/dist/lib/radon/types.d.ts.map +1 -0
- package/dist/lib/radon/types.js +1066 -0
- package/dist/lib/radon/utils.d.ts +55 -0
- package/dist/lib/radon/utils.d.ts.map +1 -0
- package/dist/lib/radon/utils.js +181 -0
- package/dist/lib/rpc/farm.d.ts +66 -0
- package/dist/lib/rpc/farm.d.ts.map +1 -0
- package/dist/lib/rpc/farm.js +808 -0
- package/dist/lib/rpc/index.d.ts +3 -0
- package/dist/lib/rpc/index.d.ts.map +1 -0
- package/dist/lib/rpc/index.js +19 -0
- package/dist/lib/rpc/node.d.ts +38 -0
- package/dist/lib/rpc/node.d.ts.map +1 -0
- package/dist/lib/rpc/node.js +335 -0
- package/dist/lib/rpc/nodes.d.ts +40 -0
- package/dist/lib/rpc/nodes.d.ts.map +1 -0
- package/dist/lib/rpc/nodes.js +531 -0
- package/dist/lib/rpc/provider.d.ts +72 -0
- package/dist/lib/rpc/provider.d.ts.map +1 -0
- package/dist/lib/rpc/provider.js +402 -0
- package/dist/lib/rpc/reporter.d.ts +18 -0
- package/dist/lib/rpc/reporter.d.ts.map +1 -0
- package/dist/lib/rpc/reporter.js +99 -0
- package/dist/lib/rpc/types.d.ts +396 -0
- package/dist/lib/rpc/types.d.ts.map +1 -0
- package/dist/lib/rpc/types.js +81 -0
- package/dist/lib/rpc/wallet.d.ts +72 -0
- package/dist/lib/rpc/wallet.d.ts.map +1 -0
- package/dist/lib/rpc/wallet.js +41 -0
- package/dist/lib/types.d.ts +19 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +7 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +51 -0
- package/dist/package.json +1 -1
- package/dist/src/bin/helpers.js +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/lib/crypto/account.js +1 -1
- package/dist/src/lib/crypto/coinbase.js +1 -1
- package/dist/src/lib/crypto/index.js +1 -1
- package/dist/src/lib/crypto/interfaces.js +1 -1
- package/dist/src/lib/crypto/payloads/DataRequestPayload.js +1 -1
- package/dist/src/lib/crypto/payloads/StakePayload.js +1 -1
- package/dist/src/lib/crypto/payloads/UnstakePayload.js +1 -1
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +1 -1
- package/dist/src/lib/crypto/payloads.js +1 -1
- package/dist/src/lib/crypto/signer.js +1 -1
- package/dist/src/lib/crypto/transmitters/DataRequests.js +1 -1
- package/dist/src/lib/crypto/transmitters/StakeDeposits.js +1 -1
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +1 -1
- package/dist/src/lib/crypto/transmitters/ValueTransfers.js +1 -1
- package/dist/src/lib/crypto/transmitters.js +1 -1
- package/dist/src/lib/crypto/types.js +1 -1
- package/dist/src/lib/crypto/utils.js +1 -1
- package/dist/src/lib/crypto/wallet.js +1 -1
- package/dist/src/lib/index.js +1 -1
- package/dist/src/lib/radon/ccdr/eth.js +1 -1
- package/dist/src/lib/radon/ccdr/index.js +1 -1
- package/dist/src/lib/radon/ccdr/wit.js +1 -1
- package/dist/src/lib/radon/filters.js +1 -1
- package/dist/src/lib/radon/index.js +1 -1
- package/dist/src/lib/radon/reducers.js +1 -1
- package/dist/src/lib/radon/types.js +1 -1
- package/dist/src/lib/radon/utils.js +1 -1
- package/dist/src/lib/rpc/index.js +1 -1
- package/dist/src/lib/rpc/nodes.js +1 -1
- package/dist/src/lib/rpc/provider.js +1 -1
- package/dist/src/lib/rpc/reporter.js +1 -1
- package/dist/src/lib/rpc/types.js +1 -1
- package/dist/src/lib/types.d.ts +1 -1
- package/dist/src/lib/types.d.ts.map +1 -1
- package/dist/src/lib/types.js +1 -1
- package/dist/src/lib/utils.js +1 -1
- package/dist/witnet/assets/index.js +1 -1
- package/dist/witnet/assets/modals/index.js +1 -1
- package/dist/witnet/assets/modals/web3/eth.js +1 -1
- package/dist/witnet/assets/modals/web3/ipfs.js +1 -1
- package/dist/witnet/assets/modals/web3/wit.js +1 -1
- package/dist/witnet/assets/requests.js +1 -1
- package/package.json +1 -1
- package/src/bin/cli/history.js +31 -31
- package/src/bin/cli/inspect.js +405 -405
- package/src/bin/cli/network.js +594 -594
- package/src/bin/cli/nodes.js +364 -364
- package/src/bin/cli/radon.js +815 -815
- package/src/bin/cli/wallet.js +1117 -1117
- package/src/bin/helpers.js +840 -840
- package/src/bin/postinstall.js +9 -9
- package/src/bin/toolkit.js +295 -295
- package/witnet/assets/_index.js +8 -8
- package/witnet/assets/_requests.js +25 -25
- package/witnet/assets/_sources.js +36 -36
- package/witnet/assets/_templates.js +36 -36
- package/witnet/assets/index.js +4 -4
- package/witnet/assets/modals/index.js +9 -9
- package/witnet/assets/modals/web3/eth.js +29 -29
- package/witnet/assets/modals/web3/ipfs.js +19 -19
- package/witnet/assets/modals/web3/wit.js +21 -21
- package/witnet/assets/requests.js +95 -95
|
@@ -0,0 +1,1066 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
+
}) : function(o, v) {
|
|
31
|
+
o["default"] = v;
|
|
32
|
+
});
|
|
33
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
34
|
+
var ownKeys = function(o) {
|
|
35
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
36
|
+
var ar = [];
|
|
37
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
38
|
+
return ar;
|
|
39
|
+
};
|
|
40
|
+
return ownKeys(o);
|
|
41
|
+
};
|
|
42
|
+
return function (mod) {
|
|
43
|
+
if (mod && mod.__esModule) return mod;
|
|
44
|
+
var result = {};
|
|
45
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
46
|
+
__setModuleDefault(result, mod);
|
|
47
|
+
return result;
|
|
48
|
+
};
|
|
49
|
+
})();
|
|
50
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
51
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
52
|
+
if (!m) return o;
|
|
53
|
+
var i = m.call(o), r, ar = [], e;
|
|
54
|
+
try {
|
|
55
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
56
|
+
}
|
|
57
|
+
catch (error) { e = { error: error }; }
|
|
58
|
+
finally {
|
|
59
|
+
try {
|
|
60
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
61
|
+
}
|
|
62
|
+
finally { if (e) throw e.error; }
|
|
63
|
+
}
|
|
64
|
+
return ar;
|
|
65
|
+
};
|
|
66
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
67
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
68
|
+
if (ar || !(i in from)) {
|
|
69
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
70
|
+
ar[i] = from[i];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
74
|
+
};
|
|
75
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
76
|
+
exports.RadonString = exports.RadonMap = exports.RadonInteger = exports.RadonFloat = exports.RadonBytes = exports.RadonBoolean = exports.RadonArray = exports.RadonAny = exports.RadonScript = exports.RadonOperator = exports.RadonOperators = exports.RadonEncodings = void 0;
|
|
77
|
+
var cbor_1 = require("cbor");
|
|
78
|
+
var helpers = __importStar(require("../../bin/helpers"));
|
|
79
|
+
var Utils = __importStar(require("../utils"));
|
|
80
|
+
var RadonEncodings;
|
|
81
|
+
(function (RadonEncodings) {
|
|
82
|
+
RadonEncodings[RadonEncodings["HexString"] = 0] = "HexString";
|
|
83
|
+
RadonEncodings[RadonEncodings["Base64"] = 1] = "Base64";
|
|
84
|
+
})(RadonEncodings || (exports.RadonEncodings = RadonEncodings = {}));
|
|
85
|
+
var RadonOperators;
|
|
86
|
+
(function (RadonOperators) {
|
|
87
|
+
RadonOperators[RadonOperators["ArrayLength"] = 16] = "ArrayLength";
|
|
88
|
+
RadonOperators[RadonOperators["ArrayFilter"] = 17] = "ArrayFilter";
|
|
89
|
+
RadonOperators[RadonOperators["ArrayJoin"] = 18] = "ArrayJoin";
|
|
90
|
+
RadonOperators[RadonOperators["ArrayGetArray"] = 19] = "ArrayGetArray";
|
|
91
|
+
RadonOperators[RadonOperators["ArrayGetBoolean"] = 20] = "ArrayGetBoolean";
|
|
92
|
+
RadonOperators[RadonOperators["ArrayGetBytes"] = 21] = "ArrayGetBytes";
|
|
93
|
+
RadonOperators[RadonOperators["ArrayGetFloat"] = 22] = "ArrayGetFloat";
|
|
94
|
+
RadonOperators[RadonOperators["ArrayGetInteger"] = 23] = "ArrayGetInteger";
|
|
95
|
+
RadonOperators[RadonOperators["ArrayGetMap"] = 24] = "ArrayGetMap";
|
|
96
|
+
RadonOperators[RadonOperators["ArrayGetString"] = 25] = "ArrayGetString";
|
|
97
|
+
RadonOperators[RadonOperators["ArrayMap"] = 26] = "ArrayMap";
|
|
98
|
+
RadonOperators[RadonOperators["ArrayReduce"] = 27] = "ArrayReduce";
|
|
99
|
+
RadonOperators[RadonOperators["ArraySort"] = 29] = "ArraySort";
|
|
100
|
+
RadonOperators[RadonOperators["ArrayPick"] = 30] = "ArrayPick";
|
|
101
|
+
RadonOperators[RadonOperators["BooleanStringify"] = 32] = "BooleanStringify";
|
|
102
|
+
RadonOperators[RadonOperators["BooleanNegate"] = 34] = "BooleanNegate";
|
|
103
|
+
RadonOperators[RadonOperators["BytesStringify"] = 48] = "BytesStringify";
|
|
104
|
+
RadonOperators[RadonOperators["BytesHash"] = 49] = "BytesHash";
|
|
105
|
+
RadonOperators[RadonOperators["BytesAsInteger"] = 50] = "BytesAsInteger";
|
|
106
|
+
RadonOperators[RadonOperators["BytesLength"] = 52] = "BytesLength";
|
|
107
|
+
RadonOperators[RadonOperators["BytesSlice"] = 60] = "BytesSlice";
|
|
108
|
+
RadonOperators[RadonOperators["FloatAbsolute"] = 80] = "FloatAbsolute";
|
|
109
|
+
RadonOperators[RadonOperators["FloatStringify"] = 81] = "FloatStringify";
|
|
110
|
+
RadonOperators[RadonOperators["FloatCeiling"] = 82] = "FloatCeiling";
|
|
111
|
+
RadonOperators[RadonOperators["FloatGreaterThan"] = 83] = "FloatGreaterThan";
|
|
112
|
+
RadonOperators[RadonOperators["FloatFloor"] = 84] = "FloatFloor";
|
|
113
|
+
RadonOperators[RadonOperators["FloatLessThan"] = 85] = "FloatLessThan";
|
|
114
|
+
RadonOperators[RadonOperators["FloatModule"] = 86] = "FloatModule";
|
|
115
|
+
RadonOperators[RadonOperators["FloatMultiply"] = 87] = "FloatMultiply";
|
|
116
|
+
RadonOperators[RadonOperators["FloatNegate"] = 88] = "FloatNegate";
|
|
117
|
+
RadonOperators[RadonOperators["FloatPower"] = 89] = "FloatPower";
|
|
118
|
+
RadonOperators[RadonOperators["FloatRound"] = 91] = "FloatRound";
|
|
119
|
+
RadonOperators[RadonOperators["FloatTruncate"] = 93] = "FloatTruncate";
|
|
120
|
+
RadonOperators[RadonOperators["IntegerAbsolute"] = 64] = "IntegerAbsolute";
|
|
121
|
+
RadonOperators[RadonOperators["IntegerToFloat"] = 65] = "IntegerToFloat";
|
|
122
|
+
RadonOperators[RadonOperators["IntegerStringify"] = 66] = "IntegerStringify";
|
|
123
|
+
RadonOperators[RadonOperators["IntegerGreaterThan"] = 67] = "IntegerGreaterThan";
|
|
124
|
+
RadonOperators[RadonOperators["IntegerLessThan"] = 68] = "IntegerLessThan";
|
|
125
|
+
RadonOperators[RadonOperators["IntegerModulo"] = 70] = "IntegerModulo";
|
|
126
|
+
RadonOperators[RadonOperators["IntegerMultiply"] = 71] = "IntegerMultiply";
|
|
127
|
+
RadonOperators[RadonOperators["IntegerNegate"] = 72] = "IntegerNegate";
|
|
128
|
+
RadonOperators[RadonOperators["IntegerPower"] = 73] = "IntegerPower";
|
|
129
|
+
RadonOperators[RadonOperators["IntegerToBytes"] = 74] = "IntegerToBytes";
|
|
130
|
+
RadonOperators[RadonOperators["MapStringify"] = 96] = "MapStringify";
|
|
131
|
+
RadonOperators[RadonOperators["MapGetArray"] = 97] = "MapGetArray";
|
|
132
|
+
RadonOperators[RadonOperators["MapGetBoolean"] = 98] = "MapGetBoolean";
|
|
133
|
+
RadonOperators[RadonOperators["MapGetFloat"] = 100] = "MapGetFloat";
|
|
134
|
+
RadonOperators[RadonOperators["MapGetInteger"] = 101] = "MapGetInteger";
|
|
135
|
+
RadonOperators[RadonOperators["MapGetMap"] = 102] = "MapGetMap";
|
|
136
|
+
RadonOperators[RadonOperators["MapGetString"] = 103] = "MapGetString";
|
|
137
|
+
RadonOperators[RadonOperators["MapKeys"] = 104] = "MapKeys";
|
|
138
|
+
RadonOperators[RadonOperators["MapValues"] = 105] = "MapValues";
|
|
139
|
+
RadonOperators[RadonOperators["MapAlter"] = 107] = "MapAlter";
|
|
140
|
+
RadonOperators[RadonOperators["MapPick"] = 110] = "MapPick";
|
|
141
|
+
RadonOperators[RadonOperators["StringAsBoolean"] = 112] = "StringAsBoolean";
|
|
142
|
+
RadonOperators[RadonOperators["StringAsBytes"] = 113] = "StringAsBytes";
|
|
143
|
+
RadonOperators[RadonOperators["StringAsFloat"] = 114] = "StringAsFloat";
|
|
144
|
+
RadonOperators[RadonOperators["StringLength"] = 116] = "StringLength";
|
|
145
|
+
RadonOperators[RadonOperators["StringMatch"] = 117] = "StringMatch";
|
|
146
|
+
RadonOperators[RadonOperators["StringParseJSONArray"] = 118] = "StringParseJSONArray";
|
|
147
|
+
RadonOperators[RadonOperators["StringParseJSONMap"] = 119] = "StringParseJSONMap";
|
|
148
|
+
RadonOperators[RadonOperators["StringParseXMLMap"] = 120] = "StringParseXMLMap";
|
|
149
|
+
RadonOperators[RadonOperators["StringToLowerCase"] = 121] = "StringToLowerCase";
|
|
150
|
+
RadonOperators[RadonOperators["StringToUppserCase"] = 122] = "StringToUppserCase";
|
|
151
|
+
RadonOperators[RadonOperators["StringParseReplace"] = 123] = "StringParseReplace";
|
|
152
|
+
RadonOperators[RadonOperators["StringParseSlice"] = 124] = "StringParseSlice";
|
|
153
|
+
RadonOperators[RadonOperators["StringParseSplit"] = 125] = "StringParseSplit";
|
|
154
|
+
})(RadonOperators || (exports.RadonOperators = RadonOperators = {}));
|
|
155
|
+
var RadonClass = /** @class */ (function () {
|
|
156
|
+
function RadonClass(prev) {
|
|
157
|
+
this.prev = prev;
|
|
158
|
+
}
|
|
159
|
+
return RadonClass;
|
|
160
|
+
}());
|
|
161
|
+
var RadonOperator = /** @class */ (function (_super) {
|
|
162
|
+
__extends(RadonOperator, _super);
|
|
163
|
+
function RadonOperator(opcode, params, ops) {
|
|
164
|
+
var _this = _super.call(this, ops) || this;
|
|
165
|
+
_this.opcode = opcode;
|
|
166
|
+
_this.params = params || [];
|
|
167
|
+
return _this;
|
|
168
|
+
}
|
|
169
|
+
RadonOperator.prototype.argsCount = function () {
|
|
170
|
+
var _a, _b;
|
|
171
|
+
var maxCount = 0;
|
|
172
|
+
(_a = this.params) === null || _a === void 0 ? void 0 : _a.forEach(function (param) {
|
|
173
|
+
if (typeof param === 'string') {
|
|
174
|
+
var count = helpers.getWildcardsCountFromString(param);
|
|
175
|
+
if (count > maxCount)
|
|
176
|
+
maxCount = count;
|
|
177
|
+
}
|
|
178
|
+
else if (typeof param === 'object' && param instanceof RadonScript) {
|
|
179
|
+
var count = param.argsCount();
|
|
180
|
+
if (count > maxCount)
|
|
181
|
+
maxCount = count;
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
return Math.max(maxCount, ((_b = this.prev) === null || _b === void 0 ? void 0 : _b.argsCount()) || 0);
|
|
185
|
+
};
|
|
186
|
+
RadonOperator.prototype.disect = function (level) {
|
|
187
|
+
var _a, _b;
|
|
188
|
+
if (level === void 0) { level = 0; }
|
|
189
|
+
var result = ((_a = this === null || this === void 0 ? void 0 : this.prev) === null || _a === void 0 ? void 0 : _a.disect(level)) || [];
|
|
190
|
+
var operator = RadonOperators[this.opcode];
|
|
191
|
+
var inputType = "Radon".concat(operator.split(/(?=[A-Z])/)[0]);
|
|
192
|
+
var radonCall = operator.split(/(?=[A-Z])/).slice(1).join('');
|
|
193
|
+
radonCall = radonCall.charAt(0).toLowerCase() + radonCall.slice(1);
|
|
194
|
+
var args = "";
|
|
195
|
+
var script;
|
|
196
|
+
if (this.params && this.params[0] !== undefined) {
|
|
197
|
+
this.params.map(function (param) {
|
|
198
|
+
if (typeof param !== 'object' || !(param instanceof RadonScript)) {
|
|
199
|
+
args += (typeof param === 'string' ? "\"".concat(param, "\"") : param.toString()) + ", ";
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
script = param;
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
if (script)
|
|
206
|
+
args += "RadonOperator {";
|
|
207
|
+
else
|
|
208
|
+
args = args.slice(0, -2);
|
|
209
|
+
}
|
|
210
|
+
if (script) {
|
|
211
|
+
var outputType = "".concat(((_b = script.outputType) === null || _b === void 0 ? void 0 : _b.constructor.name) || "RadonAny");
|
|
212
|
+
radonCall += "(".concat(args);
|
|
213
|
+
result.push([level, inputType, radonCall]);
|
|
214
|
+
result.push.apply(result, __spreadArray([], __read(script.disect(level + 1)), false));
|
|
215
|
+
result.push([level, outputType, "})"]);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
radonCall += "(".concat(args, ")");
|
|
219
|
+
result.push([level, inputType, radonCall]);
|
|
220
|
+
}
|
|
221
|
+
return result;
|
|
222
|
+
};
|
|
223
|
+
RadonOperator.prototype.encode = function () {
|
|
224
|
+
var encoded;
|
|
225
|
+
if ((this === null || this === void 0 ? void 0 : this.params) && this.params[0] !== undefined) {
|
|
226
|
+
var args = this.params.map(function (param) {
|
|
227
|
+
var _a;
|
|
228
|
+
if (typeof param === 'object') {
|
|
229
|
+
if (param instanceof RadonAny) {
|
|
230
|
+
return (_a = param.prev) === null || _a === void 0 ? void 0 : _a.encode();
|
|
231
|
+
}
|
|
232
|
+
else if (param instanceof RadonOperator) {
|
|
233
|
+
return param.encode();
|
|
234
|
+
}
|
|
235
|
+
else if (param instanceof RadonScript) {
|
|
236
|
+
return param.encode();
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
return param;
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
encoded = __spreadArray([this.opcode], __read(args), false);
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
encoded = this.opcode;
|
|
247
|
+
}
|
|
248
|
+
if (this.prev) {
|
|
249
|
+
return __spreadArray(__spreadArray([], __read(this.prev.encode()), false), [encoded], false);
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
return [encoded];
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
RadonOperator.prototype.replaceWildcards = function (args) {
|
|
256
|
+
var _a, _b;
|
|
257
|
+
if (args.length < this.argsCount()) {
|
|
258
|
+
throw EvalError("Insufficent args were provided (".concat(args.length, " < ").concat(this.argsCount(), ")"));
|
|
259
|
+
}
|
|
260
|
+
return new RadonOperator(this.opcode, (_a = this.params) === null || _a === void 0 ? void 0 : _a.map(function (param) {
|
|
261
|
+
if (typeof param === 'string') {
|
|
262
|
+
return helpers.replaceWildcards(param, args);
|
|
263
|
+
}
|
|
264
|
+
else if (typeof param === 'object' && param instanceof RadonScript) {
|
|
265
|
+
return param.replaceWildcards.apply(param, __spreadArray([], __read(args), false));
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
return param;
|
|
269
|
+
}
|
|
270
|
+
}), (_b = this === null || this === void 0 ? void 0 : this.prev) === null || _b === void 0 ? void 0 : _b.replaceWildcards(args));
|
|
271
|
+
};
|
|
272
|
+
RadonOperator.prototype.spliceWildcard = function (argIndex, argValue) {
|
|
273
|
+
var _this = this;
|
|
274
|
+
var _a, _b;
|
|
275
|
+
return new RadonOperator(this.opcode, (_a = this.params) === null || _a === void 0 ? void 0 : _a.map(function (param) {
|
|
276
|
+
if (typeof param === 'string') {
|
|
277
|
+
return helpers.spliceWildcard(param, argIndex, argValue, _this.argsCount());
|
|
278
|
+
}
|
|
279
|
+
else if (typeof param === 'object' && param instanceof RadonScript) {
|
|
280
|
+
return param.spliceWildcard(argIndex, argValue);
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
return param;
|
|
284
|
+
}
|
|
285
|
+
}), (_b = this === null || this === void 0 ? void 0 : this.prev) === null || _b === void 0 ? void 0 : _b.spliceWildcard(argIndex, argValue));
|
|
286
|
+
};
|
|
287
|
+
RadonOperator.prototype.toString = function (left, indent, level) {
|
|
288
|
+
var _a;
|
|
289
|
+
if (left === void 0) { left = ""; }
|
|
290
|
+
if (indent === void 0) { indent = 4; }
|
|
291
|
+
if (level === void 0) { level = 0; }
|
|
292
|
+
var lf = left !== "" ? "\n" : "";
|
|
293
|
+
var str = ((_a = this === null || this === void 0 ? void 0 : this.prev) === null || _a === void 0 ? void 0 : _a.toString(left, indent, level)) || "";
|
|
294
|
+
var methodName = RadonOperators[this.opcode].split(/(?=[A-Z])/).slice(1).join('');
|
|
295
|
+
methodName = methodName.charAt(0).toLowerCase() + methodName.slice(1);
|
|
296
|
+
str += "".concat(left).concat(" ".repeat(indent * level), ".").concat(methodName, "(");
|
|
297
|
+
if (this.params && this.params[0] !== undefined) {
|
|
298
|
+
this.params.forEach(function (param) {
|
|
299
|
+
if (typeof param === 'string') {
|
|
300
|
+
str += "\"".concat(param, "\", ");
|
|
301
|
+
}
|
|
302
|
+
else if (typeof param === 'object' && param instanceof RadonScript) {
|
|
303
|
+
str += "".concat(param.toString(left, indent, level + 1)).concat(left).concat(" ".repeat(indent * level), ", ");
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
str += param.toString() + ", ";
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
str = str.slice(0, -2);
|
|
310
|
+
}
|
|
311
|
+
str += ")".concat(lf);
|
|
312
|
+
return str;
|
|
313
|
+
};
|
|
314
|
+
return RadonOperator;
|
|
315
|
+
}(RadonClass));
|
|
316
|
+
exports.RadonOperator = RadonOperator;
|
|
317
|
+
var RadonScript = /** @class */ (function () {
|
|
318
|
+
function RadonScript(output) {
|
|
319
|
+
this.ops = output === null || output === void 0 ? void 0 : output.prev;
|
|
320
|
+
var radonTypes = {
|
|
321
|
+
"Array": RadonArray,
|
|
322
|
+
"Boolean": RadonBoolean,
|
|
323
|
+
"Bytes": RadonBytes,
|
|
324
|
+
"Float": RadonFloat,
|
|
325
|
+
"Integer": RadonInteger,
|
|
326
|
+
"Map": RadonMap,
|
|
327
|
+
"String": RadonString,
|
|
328
|
+
};
|
|
329
|
+
var input = output === null || output === void 0 ? void 0 : output.prev;
|
|
330
|
+
while (input === null || input === void 0 ? void 0 : input.prev)
|
|
331
|
+
input = input === null || input === void 0 ? void 0 : input.prev;
|
|
332
|
+
var inputType = Object.entries(radonTypes).find(function (_a) {
|
|
333
|
+
var _b = __read(_a, 2), prefix = _b[0], _ = _b[1];
|
|
334
|
+
return input && RadonOperators[input.opcode].startsWith(prefix);
|
|
335
|
+
});
|
|
336
|
+
if (inputType && inputType[1])
|
|
337
|
+
this.inputType = new inputType[1]();
|
|
338
|
+
var outputType = Object.values(radonTypes).find(function (outputType) { return output instanceof outputType; });
|
|
339
|
+
if (outputType)
|
|
340
|
+
this.outputType = new outputType();
|
|
341
|
+
}
|
|
342
|
+
RadonScript.prototype.argsCount = function () {
|
|
343
|
+
var _a;
|
|
344
|
+
return ((_a = this.ops) === null || _a === void 0 ? void 0 : _a.argsCount()) || 0;
|
|
345
|
+
};
|
|
346
|
+
RadonScript.prototype.disect = function (level) {
|
|
347
|
+
var _a;
|
|
348
|
+
if (level === void 0) { level = 0; }
|
|
349
|
+
return ((_a = this.ops) === null || _a === void 0 ? void 0 : _a.disect(level)) || [[level, "RadonAny", ""]];
|
|
350
|
+
};
|
|
351
|
+
RadonScript.prototype.encode = function () {
|
|
352
|
+
var _a;
|
|
353
|
+
return ((_a = this.ops) === null || _a === void 0 ? void 0 : _a.encode()) || [];
|
|
354
|
+
};
|
|
355
|
+
RadonScript.prototype.replaceWildcards = function () {
|
|
356
|
+
var _this = this;
|
|
357
|
+
var _a;
|
|
358
|
+
var args = [];
|
|
359
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
360
|
+
args[_i] = arguments[_i];
|
|
361
|
+
}
|
|
362
|
+
var OutputType = [
|
|
363
|
+
RadonArray,
|
|
364
|
+
RadonBoolean,
|
|
365
|
+
RadonBytes,
|
|
366
|
+
RadonFloat,
|
|
367
|
+
RadonInteger,
|
|
368
|
+
RadonMap,
|
|
369
|
+
RadonString,
|
|
370
|
+
].find(function (OutputType) { return _this.outputType instanceof OutputType; });
|
|
371
|
+
if (OutputType) {
|
|
372
|
+
return new OutputType((_a = this.ops) === null || _a === void 0 ? void 0 : _a.replaceWildcards(args));
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
throw EvalError("Cannot replace wildcards on empty script");
|
|
376
|
+
}
|
|
377
|
+
};
|
|
378
|
+
RadonScript.prototype.spliceWildcard = function (argIndex, argValue) {
|
|
379
|
+
var _this = this;
|
|
380
|
+
var _a;
|
|
381
|
+
var OutputType = [
|
|
382
|
+
RadonArray,
|
|
383
|
+
RadonBoolean,
|
|
384
|
+
RadonBytes,
|
|
385
|
+
RadonFloat,
|
|
386
|
+
RadonInteger,
|
|
387
|
+
RadonMap,
|
|
388
|
+
RadonString,
|
|
389
|
+
].find(function (OutputType) { return _this.outputType instanceof OutputType; });
|
|
390
|
+
if (OutputType) {
|
|
391
|
+
return new OutputType((_a = this.ops) === null || _a === void 0 ? void 0 : _a.spliceWildcard(argIndex, argValue));
|
|
392
|
+
}
|
|
393
|
+
else {
|
|
394
|
+
throw EvalError("Cannot splice wildcards on empty script");
|
|
395
|
+
}
|
|
396
|
+
};
|
|
397
|
+
RadonScript.prototype.toBytecode = function () {
|
|
398
|
+
return Utils.toHexString(Object.values(Uint8Array.from((0, cbor_1.encode)(this.encode()))), true);
|
|
399
|
+
};
|
|
400
|
+
RadonScript.prototype.toString = function (left, indent, level) {
|
|
401
|
+
var _a, _b;
|
|
402
|
+
if (left === void 0) { left = ""; }
|
|
403
|
+
if (indent === void 0) { indent = 0; }
|
|
404
|
+
if (level === void 0) { level = 0; }
|
|
405
|
+
var lf = left !== "" ? "\n" : "";
|
|
406
|
+
return "RadonOperator(".concat(((_a = this.inputType) === null || _a === void 0 ? void 0 : _a.constructor.name) || "", ")").concat(lf).concat((_b = this.ops) === null || _b === void 0 ? void 0 : _b.toString(left, indent, level + 1));
|
|
407
|
+
};
|
|
408
|
+
return RadonScript;
|
|
409
|
+
}());
|
|
410
|
+
exports.RadonScript = RadonScript;
|
|
411
|
+
var RadonAny = /** @class */ (function (_super) {
|
|
412
|
+
__extends(RadonAny, _super);
|
|
413
|
+
function RadonAny() {
|
|
414
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
415
|
+
}
|
|
416
|
+
RadonAny.prototype._pushOperator = function (outputType, params) {
|
|
417
|
+
var _a;
|
|
418
|
+
var name;
|
|
419
|
+
try {
|
|
420
|
+
throw new Error();
|
|
421
|
+
}
|
|
422
|
+
catch (err) {
|
|
423
|
+
var result = err;
|
|
424
|
+
name = (_a = result.stack) === null || _a === void 0 ? void 0 : _a.split(' at ')[2].split(' ')[0].split('.').map(function (part) { return helpers.toUpperCamelCase(part); }).join('').split(/(?=[A-Z])/).slice(1).join('');
|
|
425
|
+
}
|
|
426
|
+
var opcode = RadonOperators[name];
|
|
427
|
+
if (!opcode) {
|
|
428
|
+
throw Error("Fatal: unknown Radon Operator opcode '".concat(name, "'"));
|
|
429
|
+
}
|
|
430
|
+
else {
|
|
431
|
+
return new outputType(new RadonOperator(opcode, __spreadArray([], __read(params), false), this === null || this === void 0 ? void 0 : this.prev));
|
|
432
|
+
}
|
|
433
|
+
};
|
|
434
|
+
return RadonAny;
|
|
435
|
+
}(RadonClass));
|
|
436
|
+
exports.RadonAny = RadonAny;
|
|
437
|
+
var RadonArray = /** @class */ (function (_super) {
|
|
438
|
+
__extends(RadonArray, _super);
|
|
439
|
+
function RadonArray() {
|
|
440
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Discard the items in the input array that make the given `innerScript` to return a `false` value.
|
|
444
|
+
* @param script Filtering script ultimately returning a `RadonBoolean` object.
|
|
445
|
+
* Must accept as input the same data types as the ones of the items being iterated.
|
|
446
|
+
* @returns A `RadonArray` object containing only the items that make the `innerScript` to return a `true` value.
|
|
447
|
+
*/
|
|
448
|
+
RadonArray.prototype.filter = function (innerScript) {
|
|
449
|
+
if (!(innerScript instanceof RadonBoolean)) {
|
|
450
|
+
throw new EvalError("Inner script must fetch a RadonBoolean value");
|
|
451
|
+
}
|
|
452
|
+
return this._pushOperator((RadonArray), [new RadonScript(innerScript)]);
|
|
453
|
+
};
|
|
454
|
+
/**
|
|
455
|
+
* Fetch the item at the given `index` as a `RadonArray` object.
|
|
456
|
+
* @param index
|
|
457
|
+
*/
|
|
458
|
+
RadonArray.prototype.getArray = function (index) {
|
|
459
|
+
return this._pushOperator((RadonArray), [index]);
|
|
460
|
+
};
|
|
461
|
+
/**
|
|
462
|
+
* Fetch the item at the given `index` as a `RadonBoolean` object.
|
|
463
|
+
* @param index
|
|
464
|
+
*/
|
|
465
|
+
RadonArray.prototype.getBoolean = function (index) {
|
|
466
|
+
return this._pushOperator(RadonBoolean, [index]);
|
|
467
|
+
};
|
|
468
|
+
/**
|
|
469
|
+
* Fetch the item at the given `index` as a `RadonBytes` object.
|
|
470
|
+
* @param index
|
|
471
|
+
*/
|
|
472
|
+
RadonArray.prototype.getBytes = function (index) {
|
|
473
|
+
return this._pushOperator(RadonBytes, [index]);
|
|
474
|
+
};
|
|
475
|
+
/**
|
|
476
|
+
* Fetch the item at the given `index` as a `RadonFloat` object.
|
|
477
|
+
* @param index
|
|
478
|
+
*/
|
|
479
|
+
RadonArray.prototype.getFloat = function (index) {
|
|
480
|
+
return this._pushOperator(RadonFloat, [index]);
|
|
481
|
+
};
|
|
482
|
+
/**
|
|
483
|
+
* Fetch the item at the given `index` as a `RadonInteger` object.
|
|
484
|
+
* @param index
|
|
485
|
+
*/
|
|
486
|
+
RadonArray.prototype.getInteger = function (index) {
|
|
487
|
+
return this._pushOperator(RadonInteger, [index]);
|
|
488
|
+
};
|
|
489
|
+
/**
|
|
490
|
+
* Fetch the item at the given `index` as a `RadonMap` object.
|
|
491
|
+
* @param index
|
|
492
|
+
*/
|
|
493
|
+
RadonArray.prototype.getMap = function (index) {
|
|
494
|
+
return this._pushOperator(RadonMap, [index]);
|
|
495
|
+
};
|
|
496
|
+
/**
|
|
497
|
+
* Fetch the item at the given `index` as a `RadonString` object.
|
|
498
|
+
* @param index
|
|
499
|
+
*/
|
|
500
|
+
RadonArray.prototype.getString = function (index) {
|
|
501
|
+
return this._pushOperator(RadonString, [index]);
|
|
502
|
+
};
|
|
503
|
+
/**
|
|
504
|
+
* Join all items of the array into a value of the given type. The array must be homogeneous,
|
|
505
|
+
* all items being of the same type as the outputType`, if specified, or the Array's itemsType otherwise.
|
|
506
|
+
* @param separator Separator to be used when joining strings. When joining RadonMaps, it can be used to settle base schema on resulting object.
|
|
507
|
+
* @param outputType Radon type of the output value.
|
|
508
|
+
*/
|
|
509
|
+
RadonArray.prototype.join = function (separator, outputType) {
|
|
510
|
+
if (separator === void 0) { separator = ""; }
|
|
511
|
+
if (outputType)
|
|
512
|
+
this._pushOperator((RadonArray), [separator]);
|
|
513
|
+
else
|
|
514
|
+
this._pushOperator((RadonArray), [separator]);
|
|
515
|
+
};
|
|
516
|
+
/**
|
|
517
|
+
* Count the number of items.
|
|
518
|
+
* @returns A `RadonInteger` object.
|
|
519
|
+
*/
|
|
520
|
+
RadonArray.prototype.length = function () {
|
|
521
|
+
return this._pushOperator(RadonInteger, []);
|
|
522
|
+
};
|
|
523
|
+
/**
|
|
524
|
+
* Map all items in the array with the given `innerScript`.
|
|
525
|
+
* @param innerScript Mapping script returning some `RadonAny` object.
|
|
526
|
+
* Must accept as input the same data type as the one of the items being iterated.
|
|
527
|
+
* @returns A `RadonArray` object containing the mapped values.
|
|
528
|
+
*/
|
|
529
|
+
RadonArray.prototype.map = function (innerScript) {
|
|
530
|
+
return this._pushOperator(RadonArray, [innerScript]);
|
|
531
|
+
};
|
|
532
|
+
// public map<OutputItemsType extends RadonAny>(innerScript: RadonOperator<OutputItemsType>) {
|
|
533
|
+
// // todo: check script's input type matches array's items type, if any ??
|
|
534
|
+
// return this._pushOperator(RadonArray<OutputItemsType>, [innerScript])
|
|
535
|
+
// }
|
|
536
|
+
/**
|
|
537
|
+
* Reduce all items in the array into a single value.
|
|
538
|
+
* @param reductor The reductor method to be applied. All array items must be
|
|
539
|
+
* convertable into float values.
|
|
540
|
+
* @returns A `RadonFloat` object.
|
|
541
|
+
*/
|
|
542
|
+
RadonArray.prototype.reduce = function (reductor) {
|
|
543
|
+
return this._pushOperator(RadonFloat, [reductor]);
|
|
544
|
+
};
|
|
545
|
+
/**
|
|
546
|
+
* Order the array items based either on the results of applying the given `innerScript` to every item, or on the
|
|
547
|
+
* actual item values (as long as these are either integers or strings).
|
|
548
|
+
* Fails if applied on non-homegenous arrays (i.e. not all items sharing the same `RadonAny`).
|
|
549
|
+
* @param innerScript (Optional) Sorting script returning either a `RadonInteger` or a `RadonString` object.
|
|
550
|
+
* @returns A `RadonArray` object.
|
|
551
|
+
*/
|
|
552
|
+
// TODO
|
|
553
|
+
// public sort(innerScript?: RadonOperator<RadonString | RadonInteger>) {
|
|
554
|
+
// return this._pushOperator(RadonArray<ItemsType>, [innerScript])
|
|
555
|
+
// }
|
|
556
|
+
/**
|
|
557
|
+
* Take a selection of items from the input array.
|
|
558
|
+
* @param indexes Indexes of the input items to take into the output array.
|
|
559
|
+
* @return A `RadonArray` object.
|
|
560
|
+
*/
|
|
561
|
+
RadonArray.prototype.pick = function () {
|
|
562
|
+
var indexes = [];
|
|
563
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
564
|
+
indexes[_i] = arguments[_i];
|
|
565
|
+
}
|
|
566
|
+
if (Array(indexes).length == 0) {
|
|
567
|
+
throw new EvalError("\u001B[1;33mRadonArray::pick: a non-empty array of numbers must be provided\u001B[0m");
|
|
568
|
+
}
|
|
569
|
+
return this._pushOperator((RadonArray), __spreadArray([], __read(indexes), false));
|
|
570
|
+
};
|
|
571
|
+
return RadonArray;
|
|
572
|
+
}(RadonAny));
|
|
573
|
+
exports.RadonArray = RadonArray;
|
|
574
|
+
var RadonBoolean = /** @class */ (function (_super) {
|
|
575
|
+
__extends(RadonBoolean, _super);
|
|
576
|
+
function RadonBoolean() {
|
|
577
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
578
|
+
}
|
|
579
|
+
/**
|
|
580
|
+
* Reverse value.
|
|
581
|
+
* @returns A `RadonBoolean` object.
|
|
582
|
+
*/
|
|
583
|
+
RadonBoolean.prototype.negate = function () {
|
|
584
|
+
return this._pushOperator(RadonBoolean, []);
|
|
585
|
+
};
|
|
586
|
+
/**
|
|
587
|
+
* Cast value into a string.
|
|
588
|
+
* @returns A `RadonString` object.
|
|
589
|
+
*/
|
|
590
|
+
RadonBoolean.prototype.stringify = function () {
|
|
591
|
+
return this._pushOperator(RadonString, []);
|
|
592
|
+
};
|
|
593
|
+
return RadonBoolean;
|
|
594
|
+
}(RadonAny));
|
|
595
|
+
exports.RadonBoolean = RadonBoolean;
|
|
596
|
+
var RadonBytes = /** @class */ (function (_super) {
|
|
597
|
+
__extends(RadonBytes, _super);
|
|
598
|
+
function RadonBytes() {
|
|
599
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
600
|
+
}
|
|
601
|
+
/**
|
|
602
|
+
* Convert buffer into (big-endian) integer.
|
|
603
|
+
* @returns A `RadonBytes` object.
|
|
604
|
+
*/
|
|
605
|
+
RadonBytes.prototype.asInteger = function () {
|
|
606
|
+
return this._pushOperator(RadonInteger, []);
|
|
607
|
+
};
|
|
608
|
+
/**
|
|
609
|
+
* Apply the SHA2-256 hash function.
|
|
610
|
+
* @returns A `RadonBytes` object.
|
|
611
|
+
*/
|
|
612
|
+
RadonBytes.prototype.hash = function () {
|
|
613
|
+
return this._pushOperator(RadonBytes, []);
|
|
614
|
+
};
|
|
615
|
+
/**
|
|
616
|
+
* Count the number of bytes.
|
|
617
|
+
* @returns A `RadonInteger` object.
|
|
618
|
+
*/
|
|
619
|
+
RadonBytes.prototype.length = function () {
|
|
620
|
+
return this._pushOperator(RadonInteger, []);
|
|
621
|
+
};
|
|
622
|
+
/**
|
|
623
|
+
* Returns a slice extracted from the input buffer.
|
|
624
|
+
* A `startIndex` of 0 refers to the beginning of the input buffer. If no `endIndex` is provided, it will be assumed
|
|
625
|
+
* the length of the input buffer. Negative values will be relative to the end of the input buffer.
|
|
626
|
+
* @param startIndex Position within input buffer where the output buffer will start.
|
|
627
|
+
* @param endIndex Position within input buffer where the output buffer will end
|
|
628
|
+
* @returns A `RadonBytes` object.
|
|
629
|
+
*/
|
|
630
|
+
RadonBytes.prototype.slice = function (startIndex, endIndex) {
|
|
631
|
+
if (startIndex === void 0) { startIndex = 0; }
|
|
632
|
+
return this._pushOperator(RadonBytes, [startIndex, endIndex]);
|
|
633
|
+
};
|
|
634
|
+
/**
|
|
635
|
+
* Convert the input buffer into a string.
|
|
636
|
+
* @param encoding Enum integer value specifying the encoding schema on the output string, standing:
|
|
637
|
+
* 0 -> Hex string (default, if none was specified)
|
|
638
|
+
* 1 -> Base64 string
|
|
639
|
+
* @returns A `RadonString` object.
|
|
640
|
+
*/
|
|
641
|
+
RadonBytes.prototype.stringify = function (encoding) {
|
|
642
|
+
if (encoding === void 0) { encoding = RadonEncodings.HexString; }
|
|
643
|
+
return this._pushOperator(RadonString, [encoding]);
|
|
644
|
+
};
|
|
645
|
+
RadonBytes.Encodings = RadonEncodings;
|
|
646
|
+
return RadonBytes;
|
|
647
|
+
}(RadonAny));
|
|
648
|
+
exports.RadonBytes = RadonBytes;
|
|
649
|
+
var RadonFloat = /** @class */ (function (_super) {
|
|
650
|
+
__extends(RadonFloat, _super);
|
|
651
|
+
function RadonFloat() {
|
|
652
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
653
|
+
}
|
|
654
|
+
/**
|
|
655
|
+
* Compute the absolute value.
|
|
656
|
+
* @returns A `RadonFloat` object.
|
|
657
|
+
*/
|
|
658
|
+
RadonFloat.prototype.absolute = function () {
|
|
659
|
+
return this._pushOperator(RadonFloat, []);
|
|
660
|
+
};
|
|
661
|
+
/**
|
|
662
|
+
* Compute the lowest integer greater than or equal to the float value.
|
|
663
|
+
* @returns A `RadonInteger` object.
|
|
664
|
+
*/
|
|
665
|
+
RadonFloat.prototype.ceiling = function () {
|
|
666
|
+
return this._pushOperator(RadonFloat, []);
|
|
667
|
+
};
|
|
668
|
+
/**
|
|
669
|
+
* Compute the greatest integer less than or equal to the float value.
|
|
670
|
+
* @returns A `RadonInteger` object.
|
|
671
|
+
*/
|
|
672
|
+
RadonFloat.prototype.floor = function () {
|
|
673
|
+
return this._pushOperator(RadonInteger, []);
|
|
674
|
+
};
|
|
675
|
+
/**
|
|
676
|
+
* Determine if the float value is greater than the given `input`.
|
|
677
|
+
* @param input
|
|
678
|
+
* @returns A `RadonBoolean` object.
|
|
679
|
+
*/
|
|
680
|
+
RadonFloat.prototype.greaterThan = function (input) {
|
|
681
|
+
return this._pushOperator(RadonBoolean, [input]);
|
|
682
|
+
};
|
|
683
|
+
/**
|
|
684
|
+
* Determine if the float value is less than the given `input`.
|
|
685
|
+
* @param input
|
|
686
|
+
* @returns A `RadonBoolean` object.
|
|
687
|
+
*/
|
|
688
|
+
RadonFloat.prototype.lessThan = function (input) {
|
|
689
|
+
return this._pushOperator(RadonBoolean, [input]);
|
|
690
|
+
};
|
|
691
|
+
/**
|
|
692
|
+
* Compute the float remainder of dividing the value by the given `integer`.
|
|
693
|
+
* @param integer
|
|
694
|
+
* @returns A `RadonFloat` object.
|
|
695
|
+
*/
|
|
696
|
+
RadonFloat.prototype.modulo = function (integer) {
|
|
697
|
+
return this._pushOperator(RadonFloat, [integer]);
|
|
698
|
+
};
|
|
699
|
+
/**
|
|
700
|
+
* Multiply the float value by the given `factor`.
|
|
701
|
+
* @param factor
|
|
702
|
+
* @returns A `RadonFloat` object.
|
|
703
|
+
*/
|
|
704
|
+
RadonFloat.prototype.multiply = function (factor) {
|
|
705
|
+
return this._pushOperator(RadonFloat, [factor]);
|
|
706
|
+
};
|
|
707
|
+
/**
|
|
708
|
+
* Negate the float value.
|
|
709
|
+
* @returns A `RadonFloat` object.
|
|
710
|
+
*/
|
|
711
|
+
RadonFloat.prototype.negate = function () {
|
|
712
|
+
return this._pushOperator(RadonFloat, []);
|
|
713
|
+
};
|
|
714
|
+
/**
|
|
715
|
+
* Compute the float value raised to the power of given `exponent`
|
|
716
|
+
* @param exponent
|
|
717
|
+
* @returns A `RadonFloat` object.
|
|
718
|
+
*/
|
|
719
|
+
RadonFloat.prototype.power = function (exponent) {
|
|
720
|
+
return this._pushOperator(RadonFloat, [exponent]);
|
|
721
|
+
};
|
|
722
|
+
/**
|
|
723
|
+
* Round to the closest integer value.
|
|
724
|
+
* @returns A `RadonInteger` object.
|
|
725
|
+
*/
|
|
726
|
+
RadonFloat.prototype.round = function () {
|
|
727
|
+
return this._pushOperator(RadonInteger, []);
|
|
728
|
+
};
|
|
729
|
+
/**
|
|
730
|
+
* Stringify the float value.
|
|
731
|
+
* @returns A `RadonString` object.
|
|
732
|
+
*/
|
|
733
|
+
RadonFloat.prototype.stringify = function () {
|
|
734
|
+
return this._pushOperator(RadonString, []);
|
|
735
|
+
};
|
|
736
|
+
/**
|
|
737
|
+
* Take the integer part of the float value.
|
|
738
|
+
* @returns A `RadonInteger` object.
|
|
739
|
+
*/
|
|
740
|
+
RadonFloat.prototype.truncate = function () {
|
|
741
|
+
return this._pushOperator(RadonInteger, []);
|
|
742
|
+
};
|
|
743
|
+
return RadonFloat;
|
|
744
|
+
}(RadonAny));
|
|
745
|
+
exports.RadonFloat = RadonFloat;
|
|
746
|
+
var RadonInteger = /** @class */ (function (_super) {
|
|
747
|
+
__extends(RadonInteger, _super);
|
|
748
|
+
function RadonInteger() {
|
|
749
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
750
|
+
}
|
|
751
|
+
/**
|
|
752
|
+
* Compute the absolute value.
|
|
753
|
+
* @returns A `RadonInteger` object.
|
|
754
|
+
*/
|
|
755
|
+
RadonInteger.prototype.absolute = function () {
|
|
756
|
+
return this._pushOperator(RadonInteger, []);
|
|
757
|
+
};
|
|
758
|
+
/**
|
|
759
|
+
* Determine if the integer value is greater than the given `input`.
|
|
760
|
+
* @param input
|
|
761
|
+
* @returns A `RadonBoolean` object.
|
|
762
|
+
*/
|
|
763
|
+
RadonInteger.prototype.greaterThan = function (input) {
|
|
764
|
+
return this._pushOperator(RadonBoolean, [input]);
|
|
765
|
+
};
|
|
766
|
+
/**
|
|
767
|
+
* Determine if the integer value is less than the given `input`.
|
|
768
|
+
* @param input
|
|
769
|
+
* @returns A `RadonBoolean` object.
|
|
770
|
+
*/
|
|
771
|
+
RadonInteger.prototype.lessThan = function (input) {
|
|
772
|
+
return this._pushOperator(RadonBoolean, [input]);
|
|
773
|
+
};
|
|
774
|
+
/**
|
|
775
|
+
* Compute the remainder of dividing the value by the given `integer`.
|
|
776
|
+
* @param integer
|
|
777
|
+
* @returns A `RadonFloat` object.
|
|
778
|
+
*/
|
|
779
|
+
RadonInteger.prototype.modulo = function (integer) {
|
|
780
|
+
return this._pushOperator(RadonInteger, [integer]);
|
|
781
|
+
};
|
|
782
|
+
/**
|
|
783
|
+
* Multiply the value by the given `integer`.
|
|
784
|
+
* @param integer
|
|
785
|
+
* @returns A `RadonInteger` object.
|
|
786
|
+
*/
|
|
787
|
+
RadonInteger.prototype.multiply = function (integer) {
|
|
788
|
+
return this._pushOperator(RadonInteger, [integer]);
|
|
789
|
+
};
|
|
790
|
+
/**
|
|
791
|
+
* Negate the integer value.
|
|
792
|
+
* @returns A `RadonFloat` object.
|
|
793
|
+
*/
|
|
794
|
+
RadonInteger.prototype.negate = function () {
|
|
795
|
+
return this._pushOperator(RadonInteger, []);
|
|
796
|
+
};
|
|
797
|
+
/**
|
|
798
|
+
* Compute the value raised to the power of given `exponent`
|
|
799
|
+
* @param exponent
|
|
800
|
+
* @returns A `RadonInteger` object.
|
|
801
|
+
*/
|
|
802
|
+
RadonInteger.prototype.power = function (exponent) {
|
|
803
|
+
return this._pushOperator(RadonInteger, [exponent]);
|
|
804
|
+
};
|
|
805
|
+
/**
|
|
806
|
+
* Stringify the value.
|
|
807
|
+
* @returns A `RadonString` object.
|
|
808
|
+
*/
|
|
809
|
+
RadonInteger.prototype.stringify = function () {
|
|
810
|
+
return this._pushOperator(RadonString, []);
|
|
811
|
+
};
|
|
812
|
+
/**
|
|
813
|
+
* Cast into a big-endian bytes buffer.
|
|
814
|
+
* @returns A `RadonBytes` object.
|
|
815
|
+
*/
|
|
816
|
+
RadonInteger.prototype.toBytes = function () {
|
|
817
|
+
return this._pushOperator(RadonBytes, []);
|
|
818
|
+
};
|
|
819
|
+
/**
|
|
820
|
+
* Cast into a float value.
|
|
821
|
+
* @returns A `RadonFloat` object.
|
|
822
|
+
*/
|
|
823
|
+
RadonInteger.prototype.toFloat = function () {
|
|
824
|
+
return this._pushOperator(RadonFloat, []);
|
|
825
|
+
};
|
|
826
|
+
return RadonInteger;
|
|
827
|
+
}(RadonAny));
|
|
828
|
+
exports.RadonInteger = RadonInteger;
|
|
829
|
+
var RadonMap = /** @class */ (function (_super) {
|
|
830
|
+
__extends(RadonMap, _super);
|
|
831
|
+
function RadonMap() {
|
|
832
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
833
|
+
}
|
|
834
|
+
/**
|
|
835
|
+
* Alter the value of the item(s) identified by `keys`, applying the given `innerScript` to each one of them.
|
|
836
|
+
* @param key
|
|
837
|
+
* @param innerScript
|
|
838
|
+
* @returns The same RadonMap upon which this operator is executed, with the specified item(s) altered
|
|
839
|
+
* by the given `innerScript`.
|
|
840
|
+
*/
|
|
841
|
+
// TODO
|
|
842
|
+
// public alter<AlteredOutputType extends RadonAny>(innerScript: RadonOperator<AlteredOutputType>, ...keys: string[]) {
|
|
843
|
+
// return this._pushOperator(RadonMap, [innerScript, ...keys])
|
|
844
|
+
// }
|
|
845
|
+
/**
|
|
846
|
+
* Fetch the array within the specified `key` field.
|
|
847
|
+
* @param key
|
|
848
|
+
* @returns A `RadonArray` object.
|
|
849
|
+
*/
|
|
850
|
+
RadonMap.prototype.getArray = function (key, _itemsType) {
|
|
851
|
+
return this._pushOperator((RadonArray), [key]);
|
|
852
|
+
};
|
|
853
|
+
/**
|
|
854
|
+
* Fetch the boolean within the specified `key` field.
|
|
855
|
+
* @param key
|
|
856
|
+
* @returns A `RadonBoolean` object.
|
|
857
|
+
*/
|
|
858
|
+
RadonMap.prototype.getBoolean = function (key) {
|
|
859
|
+
return this._pushOperator(RadonBoolean, [key]);
|
|
860
|
+
};
|
|
861
|
+
/**
|
|
862
|
+
* Fetch the float value within the specified `key` field.
|
|
863
|
+
* @param key
|
|
864
|
+
* @returns A `RadonFloat` object.
|
|
865
|
+
*/
|
|
866
|
+
RadonMap.prototype.getFloat = function (key) {
|
|
867
|
+
return this._pushOperator(RadonFloat, [key]);
|
|
868
|
+
};
|
|
869
|
+
/**
|
|
870
|
+
* Fetch the integer value within the specified `key` field.
|
|
871
|
+
* @param key
|
|
872
|
+
* @returns A `RadonInteger` object.
|
|
873
|
+
*/
|
|
874
|
+
RadonMap.prototype.getInteger = function (key) {
|
|
875
|
+
return this._pushOperator(RadonInteger, [key]);
|
|
876
|
+
};
|
|
877
|
+
/**
|
|
878
|
+
* Fetch the map object within the specified `key` field.
|
|
879
|
+
* @param key
|
|
880
|
+
* @returns A `RadonMap` object.
|
|
881
|
+
*/
|
|
882
|
+
RadonMap.prototype.getMap = function (key) {
|
|
883
|
+
return this._pushOperator(RadonMap, [key]);
|
|
884
|
+
};
|
|
885
|
+
/**
|
|
886
|
+
* Fetch the string within the specified `key` field.
|
|
887
|
+
* @param key
|
|
888
|
+
* @returns A `RadonString` object.
|
|
889
|
+
*/
|
|
890
|
+
RadonMap.prototype.getString = function (key) {
|
|
891
|
+
return this._pushOperator(RadonString, [key]);
|
|
892
|
+
};
|
|
893
|
+
/**
|
|
894
|
+
* Extract key names of the map into an array of strings.
|
|
895
|
+
* @returns A `RadonArray` object.
|
|
896
|
+
*/
|
|
897
|
+
RadonMap.prototype.keys = function () {
|
|
898
|
+
return this._pushOperator((RadonArray), []);
|
|
899
|
+
};
|
|
900
|
+
/**
|
|
901
|
+
* Take a selection of items from the input map. Fails if unexistent items are referred.
|
|
902
|
+
* @param keys Key string of the input items to take into the output map.
|
|
903
|
+
* @return A `RadonMap` object.
|
|
904
|
+
*/
|
|
905
|
+
RadonMap.prototype.pick = function () {
|
|
906
|
+
var keys = [];
|
|
907
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
908
|
+
keys[_i] = arguments[_i];
|
|
909
|
+
}
|
|
910
|
+
if (Array(keys).length == 0) {
|
|
911
|
+
throw new EvalError("\u001B[1;33mRadonMap::pick: a non-empty array of key strings must be provided\u001B[0m");
|
|
912
|
+
}
|
|
913
|
+
return this._pushOperator(RadonMap, __spreadArray([], __read(keys), false));
|
|
914
|
+
};
|
|
915
|
+
/**
|
|
916
|
+
* Extract the map values into an array.
|
|
917
|
+
* @returns A `RadonArray` object.
|
|
918
|
+
*/
|
|
919
|
+
RadonMap.prototype.values = function () {
|
|
920
|
+
return this._pushOperator(RadonArray, []);
|
|
921
|
+
};
|
|
922
|
+
/**
|
|
923
|
+
* Stringify input `RadonMap` object into a JSON string.
|
|
924
|
+
* @return A `RadonString` object.
|
|
925
|
+
*/
|
|
926
|
+
RadonMap.prototype.stringify = function () {
|
|
927
|
+
return this._pushOperator(RadonString, []);
|
|
928
|
+
};
|
|
929
|
+
return RadonMap;
|
|
930
|
+
}(RadonAny));
|
|
931
|
+
exports.RadonMap = RadonMap;
|
|
932
|
+
var RadonString = /** @class */ (function (_super) {
|
|
933
|
+
__extends(RadonString, _super);
|
|
934
|
+
function RadonString() {
|
|
935
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
936
|
+
}
|
|
937
|
+
/**
|
|
938
|
+
* Cast into a boolean value.
|
|
939
|
+
* @returns A `RadonBoolean` object.
|
|
940
|
+
*/
|
|
941
|
+
RadonString.prototype.asBoolean = function () {
|
|
942
|
+
return this._pushOperator(RadonBoolean, []);
|
|
943
|
+
};
|
|
944
|
+
/**
|
|
945
|
+
* Convert the input string into a bytes buffer.
|
|
946
|
+
* @param encoding Enum integer value specifying the encoding schema on the input string, standing:
|
|
947
|
+
* 0 -> Hex string (default, if none was specified)
|
|
948
|
+
* 1 -> Base64 string
|
|
949
|
+
* @returns A `RadonBytes` object.
|
|
950
|
+
*/
|
|
951
|
+
RadonString.prototype.asBytes = function (encoding) {
|
|
952
|
+
if (encoding === void 0) { encoding = RadonEncodings.HexString; }
|
|
953
|
+
return this._pushOperator(RadonBytes, [encoding]);
|
|
954
|
+
};
|
|
955
|
+
/**
|
|
956
|
+
* Cast into a float number.
|
|
957
|
+
* @returns A `RadonFloat` object.
|
|
958
|
+
*/
|
|
959
|
+
RadonString.prototype.asFloat = function () {
|
|
960
|
+
return this._pushOperator(RadonFloat, []);
|
|
961
|
+
};
|
|
962
|
+
/**
|
|
963
|
+
* Count the number of chars.
|
|
964
|
+
* @returns A `RadonInteger` object.
|
|
965
|
+
*/
|
|
966
|
+
RadonString.prototype.length = function () {
|
|
967
|
+
return this._pushOperator(RadonInteger, []);
|
|
968
|
+
};
|
|
969
|
+
/**
|
|
970
|
+
* Replace the string by a value of type `outputType`, determined on whether the string value matches
|
|
971
|
+
* any of the keys within the provided `matchingMap`, or set to a `defaultValue` if no match is found.
|
|
972
|
+
* @param outputType Radon type of the output value.
|
|
973
|
+
* @param matchingMap Map determining the output value depending on the string value.
|
|
974
|
+
* @param defaultValue Value returned if no match is found.
|
|
975
|
+
* @returns
|
|
976
|
+
*/
|
|
977
|
+
RadonString.prototype.match = function (outputType, matchingMap, defaultValue) {
|
|
978
|
+
return this._pushOperator(outputType, [matchingMap, defaultValue]);
|
|
979
|
+
// this._bytecode = [
|
|
980
|
+
// 0x75,
|
|
981
|
+
// matchingMap,
|
|
982
|
+
// defaultValue
|
|
983
|
+
// ]
|
|
984
|
+
// this._method = "match"
|
|
985
|
+
// this._params = `{ ${Object.entries(matchingMap).map((entry: [string, any]) => `\"${entry[0]}\": ${entry[1]}, `)}}, ${defaultValue}`
|
|
986
|
+
// let keys: string = ""
|
|
987
|
+
// Object.keys(matchingMap).map((key: string) => keys += key + ";")
|
|
988
|
+
// return new outputType(this, keys)
|
|
989
|
+
};
|
|
990
|
+
/**
|
|
991
|
+
* Parse input string as an array of JSON items.
|
|
992
|
+
* @param jsonPaths (optional) Array of JSON paths within input `RadonString` from where to fetch items that will be appended to the output `RadonArray`.
|
|
993
|
+
* @returns A `RadonArray` object.
|
|
994
|
+
*/
|
|
995
|
+
RadonString.prototype.parseJSONArray = function () {
|
|
996
|
+
var jsonPaths = [];
|
|
997
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
998
|
+
jsonPaths[_i] = arguments[_i];
|
|
999
|
+
}
|
|
1000
|
+
return this._pushOperator((RadonArray), __spreadArray([], __read(jsonPaths), false));
|
|
1001
|
+
};
|
|
1002
|
+
/**
|
|
1003
|
+
* Parse string as a JSON-encoded map.
|
|
1004
|
+
* @param jsonPath (optional) JSON path within input `RadonString` from where to extract the output `RadonMap`.
|
|
1005
|
+
* @returns A `RadonMap` object.
|
|
1006
|
+
*/
|
|
1007
|
+
RadonString.prototype.parseJSONMap = function (jsonPath) {
|
|
1008
|
+
return this._pushOperator(RadonMap, [jsonPath]);
|
|
1009
|
+
};
|
|
1010
|
+
/**
|
|
1011
|
+
* Parse string as an XML-encoded map.
|
|
1012
|
+
* @returns A `RadonMap` object.
|
|
1013
|
+
*/
|
|
1014
|
+
RadonString.prototype.parseXMLMap = function () {
|
|
1015
|
+
return this._pushOperator(RadonMap, []);
|
|
1016
|
+
};
|
|
1017
|
+
/**
|
|
1018
|
+
* Replace with given `replacement` string, all parts of the input string that match with given regular expression.
|
|
1019
|
+
* @param regex Regular expression to be matched.
|
|
1020
|
+
* @param replacement Text that will replace all occurences.
|
|
1021
|
+
* @returns A `RadonString` object.
|
|
1022
|
+
*/
|
|
1023
|
+
RadonString.prototype.replace = function (regex, replacement) {
|
|
1024
|
+
if (regex === void 0) { regex = ""; }
|
|
1025
|
+
if (replacement === void 0) { replacement = ""; }
|
|
1026
|
+
return this._pushOperator(RadonString, [regex, replacement]);
|
|
1027
|
+
};
|
|
1028
|
+
/**
|
|
1029
|
+
* Returns a slice extracted from the input string.
|
|
1030
|
+
* A `startIndex` of 0 refers to the beginning of the input string. If no `endIndex` is provided, it will be assumed
|
|
1031
|
+
* the length of the input string. Negative values will be relative to the end of the input string.
|
|
1032
|
+
* @param startIndex Position within input string where the output string will start.
|
|
1033
|
+
* @param endIndex Position within input string where the output string will end.
|
|
1034
|
+
* @returns A `RadonString` object.
|
|
1035
|
+
*/
|
|
1036
|
+
RadonString.prototype.slice = function (startIndex, endIndex) {
|
|
1037
|
+
if (startIndex === void 0) { startIndex = 0; }
|
|
1038
|
+
return this._pushOperator(RadonString, [startIndex, endIndex]);
|
|
1039
|
+
};
|
|
1040
|
+
/**
|
|
1041
|
+
* Divides input string into an array of substrings,
|
|
1042
|
+
* @param regex The string or regular expression to use for splitting.
|
|
1043
|
+
* @returns A `RadonArray` object.
|
|
1044
|
+
*/
|
|
1045
|
+
RadonString.prototype.split = function (regex) {
|
|
1046
|
+
if (regex === void 0) { regex = "\r"; }
|
|
1047
|
+
return this._pushOperator((RadonArray), [regex]);
|
|
1048
|
+
};
|
|
1049
|
+
/**
|
|
1050
|
+
* Lower case all characters.
|
|
1051
|
+
* @returns A `RadonString` object.
|
|
1052
|
+
*/
|
|
1053
|
+
RadonString.prototype.toLowercase = function () {
|
|
1054
|
+
return this._pushOperator(RadonString, []);
|
|
1055
|
+
};
|
|
1056
|
+
/**
|
|
1057
|
+
* Upper case all characters.
|
|
1058
|
+
* @returns A `RadonString` object.
|
|
1059
|
+
*/
|
|
1060
|
+
RadonString.prototype.toUpperCase = function () {
|
|
1061
|
+
return this._pushOperator(RadonString, []);
|
|
1062
|
+
};
|
|
1063
|
+
return RadonString;
|
|
1064
|
+
}(RadonAny));
|
|
1065
|
+
exports.RadonString = RadonString;
|
|
1066
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3JhZG9uL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2QkFBMkM7QUFDM0MseURBQTRDO0FBRzVDLDhDQUFpQztBQUVqQyxJQUFZLGNBR1g7QUFIRCxXQUFZLGNBQWM7SUFDdEIsNkRBQWEsQ0FBQTtJQUNiLHVEQUFVLENBQUE7QUFDZCxDQUFDLEVBSFcsY0FBYyw4QkFBZCxjQUFjLFFBR3pCO0FBRUQsSUFBWSxjQW9FWDtBQXBFRCxXQUFZLGNBQWM7SUFDdEIsa0VBQWtCLENBQUE7SUFDbEIsa0VBQWtCLENBQUE7SUFDbEIsOERBQWdCLENBQUE7SUFDaEIsc0VBQW9CLENBQUE7SUFDcEIsMEVBQXNCLENBQUE7SUFDdEIsc0VBQW9CLENBQUE7SUFDcEIsc0VBQW9CLENBQUE7SUFDcEIsMEVBQXNCLENBQUE7SUFDdEIsa0VBQWtCLENBQUE7SUFDbEIsd0VBQXFCLENBQUE7SUFDckIsNERBQWUsQ0FBQTtJQUNmLGtFQUFrQixDQUFBO0lBQ2xCLDhEQUFnQixDQUFBO0lBQ2hCLDhEQUFnQixDQUFBO0lBQ2hCLDRFQUF1QixDQUFBO0lBQ3ZCLHNFQUFvQixDQUFBO0lBQ3BCLHdFQUFxQixDQUFBO0lBQ3JCLDhEQUFnQixDQUFBO0lBQ2hCLHdFQUFxQixDQUFBO0lBQ3JCLGtFQUFrQixDQUFBO0lBQ2xCLGdFQUFpQixDQUFBO0lBQ2pCLHNFQUFvQixDQUFBO0lBQ3BCLHdFQUFxQixDQUFBO0lBQ3JCLG9FQUFtQixDQUFBO0lBQ25CLDRFQUF1QixDQUFBO0lBQ3ZCLGdFQUFpQixDQUFBO0lBQ2pCLHNFQUFvQixDQUFBO0lBQ3BCLGtFQUFrQixDQUFBO0lBQ2xCLHNFQUFvQixDQUFBO0lBQ3BCLGtFQUFrQixDQUFB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QUNEOzs7O09BSUc7SUFDSSwyQkFBSyxHQUFaLFVBQWEsS0FBb0I7UUFBcEIsc0JBQUEsRUFBQSxZQUFvQjtRQUM3QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQSxVQUF1QixDQUFBLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQy9ELENBQUM7SUFDRDs7O09BR0c7SUFDSSxpQ0FBVyxHQUFsQjtRQUNJLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDOUMsQ0FBQztJQUNEOzs7T0FHRztJQUNJLGlDQUFXLEdBQWxCO1FBQ0ksT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0lBQ0wsa0JBQUM7QUFBRCxDQUFDLEFBMUhELENBQWlDLFFBQVEsR0EwSHhDO0FBMUhZLGtDQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZW5jb2RlIGFzIGNib3JFbmNvZGUgfSBmcm9tIFwiY2JvclwiXG5pbXBvcnQgKiBhcyBoZWxwZXJzIGZyb20gXCIuLi8uLi9iaW4vaGVscGVyc1wiXG5cbmltcG9ydCB7IE9wY29kZXMgYXMgUmFkb25SZWR1Y2VyT3Bjb2RlcyB9IGZyb20gJy4vcmVkdWNlcnMnXG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuLi91dGlscydcblxuZXhwb3J0IGVudW0gUmFkb25FbmNvZGluZ3Mge1xuICAgIEhleFN0cmluZyA9IDAsXG4gICAgQmFzZTY0ID0gMSxcbn1cblxuZXhwb3J0IGVudW0gUmFkb25PcGVyYXRvcnMge1xuICAgIEFycmF5TGVuZ3RoID0gMHgxMCxcbiAgICBBcnJheUZpbHRlciA9IDB4MTEsXG4gICAgQXJyYXlKb2luID0gMHgxMixcbiAgICBBcnJheUdldEFycmF5ID0gMHgxMyxcbiAgICBBcnJheUdldEJvb2xlYW4gPSAweDE0LFxuICAgIEFycmF5R2V0Qnl0ZXMgPSAweDE1LFxuICAgIEFycmF5R2V0RmxvYXQgPSAweDE2LFxuICAgIEFycmF5R2V0SW50ZWdlciA9IDB4MTcsXG4gICAgQXJyYXlHZXRNYXAgPSAweDE4LFxuICAgIEFycmF5R2V0U3RyaW5nID0gMHgxOSxcbiAgICBBcnJheU1hcCA9IDB4MWEsXG4gICAgQXJyYXlSZWR1Y2UgPSAweDFiLFxuICAgIEFycmF5U29ydCA9IDB4MWQsXG4gICAgQXJyYXlQaWNrID0gMHgxZSxcbiAgICBCb29sZWFuU3RyaW5naWZ5ID0gMHgyMCxcbiAgICBCb29sZWFuTmVnYXRlID0gMHgyMixcbiAgICBCeXRlc1N0cmluZ2lmeSA9IDB4MzAsXG4gICAgQnl0ZXNIYXNoID0gMHgzMSxcbiAgICBCeXRlc0FzSW50ZWdlciA9IDB4MzIsXG4gICAgQnl0ZXNMZW5ndGggPSAweDM0LFxuICAgIEJ5dGVzU2xpY2UgPSAweDNjLFxuICAgIEZsb2F0QWJzb2x1dGUgPSAweDUwLFxuICAgIEZsb2F0U3RyaW5naWZ5ID0gMHg1MSxcbiAgICBGbG9hdENlaWxpbmcgPSAweDUyLFxuICAgIEZsb2F0R3JlYXRlclRoYW4gPSAweDUzLFxuICAgIEZsb2F0Rmxvb3IgPSAweDU0LFxuICAgIEZsb2F0TGVzc1RoYW4gPSAweDU1LFxuICAgIEZsb2F0TW9kdWxlID0gMHg1NixcbiAgICBGbG9hdE11bHRpcGx5ID0gMHg1NyxcbiAgICBGbG9hdE5lZ2F0ZSA9IDB4NTgsXG4gICAgRmxvYXRQb3dlciA9IDB4NTksXG4gICAgRmxvYXRSb3VuZCA9IDB4NWIsXG4gICAgRmxvYXRUcnVuY2F0ZSA9IDB4NWQsXG4gICAgSW50ZWdlckFic29sdXRlID0gMHg0MCxcbiAgICBJbnRlZ2VyVG9GbG9hdCA9IDB4NDEsXG4gICAgSW50ZWdlclN0cmluZ2lmeSA9IDB4NDIsXG4gICAgSW50ZWdlckdyZWF0ZXJUaGFuID0gMHg0MyxcbiAgICBJbnRlZ2VyTGVzc1RoYW4gPSAweDQ0LFxuICAgIEludGVnZXJNb2R1bG8gPSAweDQ2LFxuICAgIEludGVnZXJNdWx0aXBseSA9IDB4NDcsXG4gICAgSW50ZWdlck5lZ2F0ZSA9IDB4NDgsXG4gICAgSW50ZWdlclBvd2VyID0gMHg0OSxcbiAgICBJbnRlZ2VyVG9CeXRlcyA9IDB4NGEsXG4gICAgTWFwU3RyaW5naWZ5ID0gMHg2MCxcbiAgICBNYXBHZXRBcnJheSA9IDB4NjEsXG4gICAgTWFwR2V0Qm9vbGVhbiA9IDB4NjIsXG4gICAgTWFwR2V0RmxvYXQgPSAweDY0LFxuICAgIE1hcEdldEludGVnZXIgPSAweDY1LFxuICAgIE1hcEdldE1hcCA9IDB4NjYsXG4gICAgTWFwR2V0U3RyaW5nID0gMHg2NyxcbiAgICBNYXBLZXlzID0gMHg2OCxcbiAgICBNYXBWYWx1ZXMgPSAweDY5LFxuICAgIE1hcEFsdGVyID0gMHg2YixcbiAgICBNYXBQaWNrID0gMHg2ZSwgICBcbiAgICBTdHJpbmdBc0Jvb2xlYW4gPSAweDcwLFxuICAgIFN0cmluZ0FzQnl0ZXMgPSAweDcxLFxuICAgIFN0cmluZ0FzRmxvYXQgPSAweDcyLFxuICAgIFN0cmluZ0xlbmd0aCA9IDB4NzQsXG4gICAgU3RyaW5nTWF0Y2ggPSAweDc1LFxuICAgIFN0cmluZ1BhcnNlSlNPTkFycmF5ID0gMHg3NixcbiAgICBTdHJpbmdQYXJzZUpTT05NYXAgPSAweDc3LFxuICAgIFN0cmluZ1BhcnNlWE1MTWFwID0gMHg3OCxcbiAgICBTdHJpbmdUb0xvd2VyQ2FzZSA9IDB4NzksXG4gICAgU3RyaW5nVG9VcHBzZXJDYXNlID0gMHg3YSxcbiAgICBTdHJpbmdQYXJzZVJlcGxhY2UgPSAweDdiLFxuICAgIFN0cmluZ1BhcnNlU2xpY2UgPSAweDdjLFxuICAgIFN0cmluZ1BhcnNlU3BsaXQgPSAweDdkLFxufVxuXG5hYnN0cmFjdCBjbGFzcyBSYWRvbkNsYXNzIHtcbiAgICByZWFkb25seSBwcmV2PzogUmFkb25PcGVyYXRvcjtcbiAgICBjb25zdHJ1Y3RvcihwcmV2PzogUmFkb25PcGVyYXRvcikge1xuICAgICAgICB0aGlzLnByZXYgPSBwcmV2XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmFkb25PcGVyYXRvciBleHRlbmRzIFJhZG9uQ2xhc3Mge1xuICAgIHJlYWRvbmx5IG9wY29kZTogUmFkb25PcGVyYXRvcnNcbiAgICByZWFkb25seSBwYXJhbXM/OiBhbnlbXVxuICAgIGNvbnN0cnVjdG9yKG9wY29kZTogUmFkb25PcGVyYXRvcnMsIHBhcmFtcz86IGFueVtdLCBvcHM/OiBSYWRvbk9wZXJhdG9yKSB7XG4gICAgICAgIHN1cGVyKG9wcylcbiAgICAgICAgdGhpcy5vcGNvZGUgPSBvcGNvZGVcbiAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXMgfHwgW11cbiAgICB9XG4gICAgcHVibGljIGFyZ3NDb3VudCgpOiBudW1iZXIgeyBcbiAgICAgICAgbGV0IG1heENvdW50OiBudW1iZXIgPSAwXG4gICAgICAgIHRoaXMucGFyYW1zPy5mb3JFYWNoKHBhcmFtID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBoZWxwZXJzLmdldFdpbGRjYXJkc0NvdW50RnJvbVN0cmluZyhwYXJhbSlcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPiBtYXhDb3VudCkgbWF4Q291bnQgPSBjb3VudFxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcGFyYW0gPT09ICdvYmplY3QnICYmIHBhcmFtIGluc3RhbmNlb2YgUmFkb25TY3JpcHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IHBhcmFtLmFyZ3NDb3VudCgpXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gbWF4Q291bnQpIG1heENvdW50ID0gY291bnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICAgICAgbWF4Q291bnQsXG4gICAgICAgICAgICB0aGlzLnByZXY/LmFyZ3NDb3VudCgpIHx8IDBcbiAgICAgICAgKVxuICAgIH1cbiAgICBwdWJsaWMgZGlzZWN0KGxldmVsID0gMCk6IFtudW1iZXIsIHN0cmluZywgc3RyaW5nXVtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcz8ucHJldj8uZGlzZWN0KGxldmVsKSB8fCBbXVxuICAgICAgICBjb25zdCBvcGVyYXRvciA9IFJhZG9uT3BlcmF0b3JzW3RoaXMub3Bjb2RlXVxuICAgICAgICBjb25zdCBpbnB1dFR5cGUgPSBgUmFkb24ke29wZXJhdG9yLnNwbGl0KC8oPz1bQS1aXSkvKVswXX1gXG4gICAgICAgIGxldCByYWRvbkNhbGwgPSBvcGVyYXRvci5zcGxpdCgvKD89W0EtWl0pLykuc2xpY2UoMSkuam9pbignJylcbiAgICAgICAgcmFkb25DYWxsID0gcmFkb25DYWxsLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgcmFkb25DYWxsLnNsaWNlKDEpXG4gICAgICAgIGxldCBhcmdzID0gXCJcIlxuICAgICAgICBsZXQgc2NyaXB0XG4gICAgICAgIGlmICh0aGlzLnBhcmFtcyAmJiB0aGlzLnBhcmFtc1swXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5tYXAocGFyYW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW0gIT09ICdvYmplY3QnIHx8ICEocGFyYW0gaW5zdGFuY2VvZiBSYWRvblNjcmlwdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyArPSAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJyA/ICBgXCIke3BhcmFtfVwiYCA6IHBhcmFtLnRvU3RyaW5nKCkpICsgXCIsIFwiXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2NyaXB0ID0gcGFyYW1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaWYgKHNjcmlwdCkgYXJncyArPSBcIlJhZG9uT3BlcmF0b3Ige1wiXG4gICAgICAgICAgICBlbHNlIGFyZ3MgPSBhcmdzLnNsaWNlKDAsIC0yKVxuICAgICAgICB9XG4gICAgICAgIGlmIChzY3JpcHQpIHtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dFR5cGUgPSBgJHsoc2NyaXB0IGFzIFJhZG9uU2NyaXB0KS5vdXRwdXRUeXBlPy5jb25zdHJ1Y3Rvci5uYW1lIHx8IFwiUmFkb25BbnlcIn1gXG4gICAgICAgICAgICByYWRvbkNhbGwgKz0gYCgke2FyZ3N9YFxuICAgICAgICAgICAgcmVzdWx0LnB1c2goW2xldmVsLCBpbnB1dFR5cGUsIHJhZG9uQ2FsbF0pXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi4oc2NyaXB0IGFzIFJhZG9uU2NyaXB0KS5kaXNlY3QobGV2ZWwgKyAxKSlcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFtsZXZlbCwgb3V0cHV0VHlwZSwgXCJ9KVwiXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJhZG9uQ2FsbCArPSBgKCR7YXJnc30pYFxuICAgICAgICAgICAgcmVzdWx0LnB1c2goW2xldmVsLCBpbnB1dFR5cGUsIHJhZG9uQ2FsbF0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgICBwdWJsaWMgZW5jb2RlKCk6IGFueVtdIHsgXG4gICAgICAgIGxldCBlbmNvZGVkXG4gICAgICAgIGlmICh0aGlzPy5wYXJhbXMgJiYgdGhpcy5wYXJhbXNbMF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IHRoaXMucGFyYW1zLm1hcChwYXJhbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtIGluc3RhbmNlb2YgUmFkb25BbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbS5wcmV2Py5lbmNvZGUoKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtIGluc3RhbmNlb2YgUmFkb25PcGVyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtLmVuY29kZSgpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBSYWRvblNjcmlwdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtLmVuY29kZSgpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZW5jb2RlZCA9IFt0aGlzLm9wY29kZSwgLi4uYXJnc11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVuY29kZWQgPSB0aGlzLm9wY29kZVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByZXYpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4udGhpcy5wcmV2LmVuY29kZSgpLCBlbmNvZGVkXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtlbmNvZGVkXVxuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyByZXBsYWNlV2lsZGNhcmRzKGFyZ3M6IHN0cmluZ1tdKTogUmFkb25PcGVyYXRvciB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IHRoaXMuYXJnc0NvdW50KCkpIHtcbiAgICAgICAgICAgIHRocm93IEV2YWxFcnJvcihgSW5zdWZmaWNlbnQgYXJncyB3ZXJlIHByb3ZpZGVkICgke2FyZ3MubGVuZ3RofSA8ICR7dGhpcy5hcmdzQ291bnQoKX0pYClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFJhZG9uT3BlcmF0b3IoXG4gICAgICAgICAgICB0aGlzLm9wY29kZSwgXG4gICAgICAgICAgICB0aGlzLnBhcmFtcz8ubWFwKHBhcmFtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVycy5yZXBsYWNlV2lsZGNhcmRzKHBhcmFtLCBhcmdzKVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhcmFtID09PSAnb2JqZWN0JyAmJiBwYXJhbSBpbnN0YW5jZW9mIFJhZG9uU2NyaXB0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbS5yZXBsYWNlV2lsZGNhcmRzKC4uLmFyZ3MpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksIFxuICAgICAgICAgICAgdGhpcz8ucHJldj8ucmVwbGFjZVdpbGRjYXJkcyhhcmdzKVxuICAgICAgICApXG4gICAgfVxuICAgIHB1YmxpYyBzcGxpY2VXaWxkY2FyZChhcmdJbmRleDogbnVtYmVyLCBhcmdWYWx1ZTogc3RyaW5nKTogUmFkb25PcGVyYXRvciB7XG4gICAgICAgIHJldHVybiBuZXcgUmFkb25PcGVyYXRvcihcbiAgICAgICAgICAgIHRoaXMub3Bjb2RlLFxuICAgICAgICAgICAgdGhpcy5wYXJhbXM/Lm1hcChwYXJhbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlcnMuc3BsaWNlV2lsZGNhcmQocGFyYW0sIGFyZ0luZGV4LCBhcmdWYWx1ZSwgdGhpcy5hcmdzQ291bnQoKSlcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ29iamVjdCcgJiYgcGFyYW0gaW5zdGFuY2VvZiBSYWRvblNjcmlwdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW0uc3BsaWNlV2lsZGNhcmQoYXJnSW5kZXgsIGFyZ1ZhbHVlKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcz8ucHJldj8uc3BsaWNlV2lsZGNhcmQoYXJnSW5kZXgsIGFyZ1ZhbHVlKVxuICAgICAgICApXG4gICAgfVxuICAgIHB1YmxpYyB0b1N0cmluZyhsZWZ0ID0gXCJcIiwgaW5kZW50ID0gNCwgbGV2ZWwgPSAwKTogc3RyaW5nIHsgXG4gICAgICAgIGNvbnN0IGxmID0gbGVmdCAhPT0gXCJcIiA/IFwiXFxuXCIgOiBcIlwiXG4gICAgICAgIGxldCBzdHIgPSB0aGlzPy5wcmV2Py50b1N0cmluZyhsZWZ0LCBpbmRlbnQsIGxldmVsKSB8fCBcIlwiXG4gICAgICAgIGxldCBtZXRob2ROYW1lID0gUmFkb25PcGVyYXRvcnNbdGhpcy5vcGNvZGVdLnNwbGl0KC8oPz1bQS1aXSkvKS5zbGljZSgxKS5qb2luKCcnKVxuICAgICAgICBtZXRob2ROYW1lID0gbWV0aG9kTmFtZS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIG1ldGhvZE5hbWUuc2xpY2UoMSlcbiAgICAgICAgc3RyICs9IGAke2xlZnR9JHtcIiBcIi5yZXBlYXQoaW5kZW50ICogbGV2ZWwpfS4ke21ldGhvZE5hbWV9KGBcbiAgICAgICAgaWYgKHRoaXMucGFyYW1zICYmIHRoaXMucGFyYW1zWzBdICE9PSB1bmRlZmluZWQpIHsgXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5mb3JFYWNoKHBhcmFtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBzdHIgKz0gYFwiJHtwYXJhbX1cIiwgYFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhcmFtID09PSAnb2JqZWN0JyAmJiBwYXJhbSBpbnN0YW5jZW9mIFJhZG9uU2NyaXB0KSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSBgJHtwYXJhbS50b1N0cmluZyhsZWZ0LCBpbmRlbnQsIGxldmVsICsgMSl9JHtsZWZ0fSR7XCIgXCIucmVwZWF0KGluZGVudCAqIGxldmVsKX0sIGBcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdHIgKz0gcGFyYW0udG9TdHJpbmcoKSArIFwiLCBcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBzdHIgPSBzdHIuc2xpY2UoMCwgLTIpXG4gICAgICAgIH1cbiAgICAgICAgc3RyICs9IGApJHtsZn1gXG4gICAgICAgIHJldHVybiBzdHJcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSYWRvblNjcmlwdCB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wcz86IFJhZG9uT3BlcmF0b3I7XG4gICAgcHVibGljIHJlYWRvbmx5IGlucHV0VHlwZT86IFJhZG9uQW55O1xuICAgIHB1YmxpYyByZWFkb25seSBvdXRwdXRUeXBlPzogUmFkb25Bbnk7XG4gICAgY29uc3RydWN0b3IgKG91dHB1dDogUmFkb25BbnkpIHtcbiAgICAgICAgdGhpcy5vcHMgPSBvdXRwdXQ/LnByZXY7XG4gICAgICAgIGNvbnN0IHJhZG9uVHlwZXMgPSB7XG4gICAgICAgICAgICBcIkFycmF5XCI6IFJhZG9uQXJyYXksXG4gICAgICAgICAgICBcIkJvb2xlYW5cIjogUmFkb25Cb29sZWFuLFxuICAgICAgICAgICAgXCJCeXRlc1wiOiBSYWRvbkJ5dGVzLFxuICAgICAgICAgICAgXCJGbG9hdFwiOiBSYWRvbkZsb2F0LFxuICAgICAgICAgICAgXCJJbnRlZ2VyXCI6IFJhZG9uSW50ZWdlcixcbiAgICAgICAgICAgIFwiTWFwXCI6IFJhZG9uTWFwLFxuICAgICAgICAgICAgXCJTdHJpbmdcIjogUmFkb25TdHJpbmcsXG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlucHV0ID0gb3V0cHV0Py5wcmV2XG4gICAgICAgIHdoaWxlIChpbnB1dD8ucHJldikgaW5wdXQgPSBpbnB1dD8ucHJldlxuICAgICAgICBjb25zdCBpbnB1dFR5cGUgPSBPYmplY3QuZW50cmllcyhyYWRvblR5cGVzKS5maW5kKChbcHJlZml4LCBfXSkgPT4gaW5wdXQgJiYgUmFkb25PcGVyYXRvcnNbaW5wdXQub3Bjb2RlXS5zdGFydHNXaXRoKHByZWZpeCkpXG4gICAgICAgIGlmIChpbnB1dFR5cGUgJiYgaW5wdXRUeXBlWzFdKSB0aGlzLmlucHV0VHlwZSA9IG5ldyBpbnB1dFR5cGVbMV0oKVxuICAgICAgICBjb25zdCBvdXRwdXRUeXBlID0gT2JqZWN0LnZhbHVlcyhyYWRvblR5cGVzKS5maW5kKG91dHB1dFR5cGUgPT4gb3V0cHV0IGluc3RhbmNlb2Ygb3V0cHV0VHlwZSk7XG4gICAgICAgIGlmIChvdXRwdXRUeXBlKSB0aGlzLm91dHB1dFR5cGUgPSBuZXcgb3V0cHV0VHlwZSgpXG4gICAgfVxuICAgIHB1YmxpYyBhcmdzQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BzPy5hcmdzQ291bnQoKSB8fCAwO1xuICAgIH1cbiAgICBwdWJsaWMgZGlzZWN0KGxldmVsID0gMCk6IFtudW1iZXIsIHN0cmluZywgc3RyaW5nXVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BzPy5kaXNlY3QobGV2ZWwpIHx8IFtbbGV2ZWwsIFwiUmFkb25BbnlcIiwgXCJcIl1dXG4gICAgfVxuICAgIHB1YmxpYyBlbmNvZGUoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHM/LmVuY29kZSgpIHx8IFtdO1xuICAgIH1cbiAgICBwdWJsaWMgcmVwbGFjZVdpbGRjYXJkcyguLi5hcmdzOiBzdHJpbmdbXSk6IFJhZG9uQW55IHtcbiAgICAgICAgY29uc3QgT3V0cHV0VHlwZSA9IFtcbiAgICAgICAgICAgIFJhZG9uQXJyYXksXG4gICAgICAgICAgICBSYWRvbkJvb2xlYW4sXG4gICAgICAgICAgICBSYWRvbkJ5dGVzLFxuICAgICAgICAgICAgUmFkb25GbG9hdCxcbiAgICAgICAgICAgIFJhZG9uSW50ZWdlcixcbiAgICAgICAgICAgIFJhZG9uTWFwLFxuICAgICAgICAgICAgUmFkb25TdHJpbmcsXG4gICAgICAgIF0uZmluZChPdXRwdXRUeXBlID0+IHRoaXMub3V0cHV0VHlwZSBpbnN0YW5jZW9mIE91dHB1dFR5cGUpO1xuICAgICAgICBpZiAoT3V0cHV0VHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPdXRwdXRUeXBlKHRoaXMub3BzPy5yZXBsYWNlV2lsZGNhcmRzKGFyZ3MpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXZhbEVycm9yKGBDYW5ub3QgcmVwbGFjZSB3aWxkY2FyZHMgb24gZW1wdHkgc2NyaXB0YClcbiAgICAgICAgfVxuICAgIH1cbiAgICBwdWJsaWMgc3BsaWNlV2lsZGNhcmQoYXJnSW5kZXg6IG51bWJlciwgYXJnVmFsdWU6IHN0cmluZyk6IFJhZG9uQW55IHtcbiAgICAgICAgY29uc3QgT3V0cHV0VHlwZSA9IFtcbiAgICAgICAgICAgIFJhZG9uQXJyYXksXG4gICAgICAgICAgICBSYWRvbkJvb2xlYW4sXG4gICAgICAgICAgICBSYWRvbkJ5dGVzLFxuICAgICAgICAgICAgUmFkb25GbG9hdCxcbiAgICAgICAgICAgIFJhZG9uSW50ZWdlcixcbiAgICAgICAgICAgIFJhZG9uTWFwLFxuICAgICAgICAgICAgUmFkb25TdHJpbmcsXG4gICAgICAgIF0uZmluZChPdXRwdXRUeXBlID0+IHRoaXMub3V0cHV0VHlwZSBpbnN0YW5jZW9mIE91dHB1dFR5cGUpO1xuICAgICAgICBpZiAoT3V0cHV0VHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPdXRwdXRUeXBlKHRoaXMub3BzPy5zcGxpY2VXaWxkY2FyZChhcmdJbmRleCwgYXJnVmFsdWUpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXZhbEVycm9yKGBDYW5ub3Qgc3BsaWNlIHdpbGRjYXJkcyBvbiBlbXB0eSBzY3JpcHRgKVxuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyB0b0J5dGVjb2RlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBVdGlscy50b0hleFN0cmluZyhPYmplY3QudmFsdWVzKFVpbnQ4QXJyYXkuZnJvbShjYm9yRW5jb2RlKHRoaXMuZW5jb2RlKCkpKSksIHRydWUpXG4gICAgfVxuICAgIHB1YmxpYyB0b1N0cmluZyhsZWZ0ID0gXCJcIiwgaW5kZW50ID0gMCwgbGV2ZWwgPSAwKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbGYgPSBsZWZ0ICE9PSBcIlwiID8gXCJcXG5cIiA6IFwiXCJcbiAgICAgICAgcmV0dXJuIGBSYWRvbk9wZXJhdG9yKCR7dGhpcy5pbnB1dFR5cGU/LmNvbnN0cnVjdG9yLm5hbWUgfHwgXCJcIn0pJHtsZn0ke3RoaXMub3BzPy50b1N0cmluZyhsZWZ0LCBpbmRlbnQsIGxldmVsICsgMSl9YFxuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJhZG9uQW55IGV4dGVuZHMgUmFkb25DbGFzcyB7XG4gICAgcHJvdGVjdGVkIF9wdXNoT3BlcmF0b3I8T3V0cHV0VHlwZSBleHRlbmRzIFJhZG9uQW55PihcbiAgICAgICAgb3V0cHV0VHlwZTogeyBuZXcob3BzPzogUmFkb25PcGVyYXRvcik6IE91dHB1dFR5cGU7IH0sIFxuICAgICAgICBwYXJhbXM6IGFueVtdLFxuICAgICk6IE91dHB1dFR5cGUge1xuICAgICAgICBsZXQgbmFtZVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gKGVyciBhcyBFcnJvcilcbiAgICAgICAgICAgIG5hbWUgPSByZXN1bHQuc3RhY2s/LnNwbGl0KCcgYXQgJylbMl1cbiAgICAgICAgICAgICAgICAuc3BsaXQoJyAnKVswXVxuICAgICAgICAgICAgICAgIC5zcGxpdCgnLicpXG4gICAgICAgICAgICAgICAgLm1hcChwYXJ0ID0+IGhlbHBlcnMudG9VcHBlckNhbWVsQ2FzZShwYXJ0KSlcbiAgICAgICAgICAgICAgICAuam9pbignJylcbiAgICAgICAgICAgICAgICAuc3BsaXQoLyg/PVtBLVpdKS8pLnNsaWNlKDEpXG4gICAgICAgICAgICAgICAgLmpvaW4oJycpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3Bjb2RlID0gUmFkb25PcGVyYXRvcnNbbmFtZSBhcyBrZXlvZiB0eXBlb2YgUmFkb25PcGVyYXRvcnNdXG4gICAgICAgIGlmICghb3Bjb2RlKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgRmF0YWw6IHVua25vd24gUmFkb24gT3BlcmF0b3Igb3Bjb2RlICcke25hbWV9J2ApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IG91dHB1dFR5cGUobmV3IFJhZG9uT3BlcmF0b3IoXG4gICAgICAgICAgICAgICAgb3Bjb2RlLCBcbiAgICAgICAgICAgICAgICBbLi4ucGFyYW1zXSwgXG4gICAgICAgICAgICAgICAgdGhpcz8ucHJldlxuICAgICAgICAgICAgKSlcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSYWRvbkFycmF5PEl0ZW1zVHlwZSBleHRlbmRzIFJhZG9uQW55PiB7XG4gICAgaXRlbXNUeXBlOiBJdGVtc1R5cGU7XG59XG5cbmV4cG9ydCBjbGFzcyBSYWRvbkFycmF5PEl0ZW1zVHlwZSBleHRlbmRzIFJhZG9uQW55ID0gUmFkb25Bbnk+IGV4dGVuZHMgUmFkb25Bbnkge1xuICAgIC8qKlxuICAgICAqIERpc2NhcmQgdGhlIGl0ZW1zIGluIHRoZSBpbnB1dCBhcnJheSB0aGF0IG1ha2UgdGhlIGdpdmVuIGBpbm5lclNjcmlwdGAgdG8gcmV0dXJuIGEgYGZhbHNlYCB2YWx1ZS4gXG4gICAgICogQHBhcmFtIHNjcmlwdCBGaWx0ZXJpbmcgc2NyaXB0IHVsdGltYXRlbHkgcmV0dXJuaW5nIGEgYFJhZG9uQm9vbGVhbmAgb2JqZWN0LlxuICAgICAqIE11c3QgYWNjZXB0IGFzIGlucHV0IHRoZSBzYW1lIGRhdGEgdHlwZXMgYXMgdGhlIG9uZXMgb2YgdGhlIGl0ZW1zIGJlaW5nIGl0ZXJhdGVkLiBcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkFycmF5YCBvYmplY3QgY29udGFpbmluZyBvbmx5IHRoZSBpdGVtcyB0aGF0IG1ha2UgdGhlIGBpbm5lclNjcmlwdGAgdG8gcmV0dXJuIGEgYHRydWVgIHZhbHVlLiBcbiAgICAgKi9cbiAgICBwdWJsaWMgZmlsdGVyKGlubmVyU2NyaXB0OiBSYWRvbkJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCEoaW5uZXJTY3JpcHQgaW5zdGFuY2VvZiBSYWRvbkJvb2xlYW4pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXZhbEVycm9yKGBJbm5lciBzY3JpcHQgbXVzdCBmZXRjaCBhIFJhZG9uQm9vbGVhbiB2YWx1ZWApXG4gICAgICAgIH0gXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25BcnJheTxJdGVtc1R5cGU+LCBbbmV3IFJhZG9uU2NyaXB0KGlubmVyU2NyaXB0KV0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZldGNoIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBgaW5kZXhgIGFzIGEgYFJhZG9uQXJyYXlgIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gaW5kZXggXG4gICAgICovXG4gICAgcHVibGljIGdldEFycmF5PFN1Ykl0ZW1zVHlwZSBleHRlbmRzIFJhZG9uQW55ID0gUmFkb25Bbnk+KGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkFycmF5PFN1Ykl0ZW1zVHlwZT4sIFtpbmRleF0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZldGNoIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBgaW5kZXhgIGFzIGEgYFJhZG9uQm9vbGVhbmAgb2JqZWN0LlxuICAgICAqIEBwYXJhbSBpbmRleCBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Qm9vbGVhbihpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25Cb29sZWFuLCBbaW5kZXhdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGZXRjaCB0aGUgaXRlbSBhdCB0aGUgZ2l2ZW4gYGluZGV4YCBhcyBhIGBSYWRvbkJ5dGVzYCBvYmplY3QuXG4gICAgICogQHBhcmFtIGluZGV4IFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRCeXRlcyhpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25CeXRlcywgW2luZGV4XSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmV0Y2ggdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIGBpbmRleGAgYXMgYSBgUmFkb25GbG9hdGAgb2JqZWN0LlxuICAgICAqIEBwYXJhbSBpbmRleCBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RmxvYXQoaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uRmxvYXQsIFtpbmRleF0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZldGNoIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBgaW5kZXhgIGFzIGEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LlxuICAgICAqIEBwYXJhbSBpbmRleCBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW50ZWdlcihpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbaW5kZXhdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGZXRjaCB0aGUgaXRlbSBhdCB0aGUgZ2l2ZW4gYGluZGV4YCBhcyBhIGBSYWRvbk1hcGAgb2JqZWN0LlxuICAgICAqIEBwYXJhbSBpbmRleCBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TWFwKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbk1hcCwgW2luZGV4XSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmV0Y2ggdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIGBpbmRleGAgYXMgYSBgUmFkb25TdHJpbmdgIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gaW5kZXggXG4gICAgICovXG4gICAgcHVibGljIGdldFN0cmluZyhpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25TdHJpbmcsIFtpbmRleF0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEpvaW4gYWxsIGl0ZW1zIG9mIHRoZSBhcnJheSBpbnRvIGEgdmFsdWUgb2YgdGhlIGdpdmVuIHR5cGUuIFRoZSBhcnJheSBtdXN0IGJlIGhvbW9nZW5lb3VzLCBcbiAgICAgKiBhbGwgaXRlbXMgYmVpbmcgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGUgb3V0cHV0VHlwZWAsIGlmIHNwZWNpZmllZCwgb3IgdGhlIEFycmF5J3MgaXRlbXNUeXBlIG90aGVyd2lzZS5cbiAgICAgKiBAcGFyYW0gc2VwYXJhdG9yIFNlcGFyYXRvciB0byBiZSB1c2VkIHdoZW4gam9pbmluZyBzdHJpbmdzLiBXaGVuIGpvaW5pbmcgUmFkb25NYXBzLCBpdCBjYW4gYmUgdXNlZCB0byBzZXR0bGUgYmFzZSBzY2hlbWEgb24gcmVzdWx0aW5nIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gb3V0cHV0VHlwZSBSYWRvbiB0eXBlIG9mIHRoZSBvdXRwdXQgdmFsdWUuIFxuICAgICAqL1xuICAgIHB1YmxpYyBqb2luPE91dHB1dFR5cGUgZXh0ZW5kcyBSYWRvbkFueSA9IFJhZG9uQW55PihzZXBhcmF0b3IgPSBcIlwiLCBvdXRwdXRUeXBlPzogeyBuZXcoKTogSXRlbXNUeXBlOyB9KSB7XG4gICAgICAgIGlmIChvdXRwdXRUeXBlKSB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25BcnJheTxPdXRwdXRUeXBlPiwgW3NlcGFyYXRvcl0pXG4gICAgICAgIGVsc2UgdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQXJyYXk8SXRlbXNUeXBlPiwgW3NlcGFyYXRvcl0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvdW50IHRoZSBudW1iZXIgb2YgaXRlbXMuIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFwIGFsbCBpdGVtcyBpbiB0aGUgYXJyYXkgd2l0aCB0aGUgZ2l2ZW4gYGlubmVyU2NyaXB0YC4gXG4gICAgICogQHBhcmFtIGlubmVyU2NyaXB0IE1hcHBpbmcgc2NyaXB0IHJldHVybmluZyBzb21lIGBSYWRvbkFueWAgb2JqZWN0LlxuICAgICAqIE11c3QgYWNjZXB0IGFzIGlucHV0IHRoZSBzYW1lIGRhdGEgdHlwZSBhcyB0aGUgb25lIG9mIHRoZSBpdGVtcyBiZWluZyBpdGVyYXRlZC4gXG4gICAgICogQHJldHVybnMgQSBgUmFkb25BcnJheWAgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG1hcHBlZCB2YWx1ZXMuIFxuICAgICAqL1xuICAgIHB1YmxpYyBtYXAoaW5uZXJTY3JpcHQ6IFJhZG9uT3BlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkFycmF5LCBbaW5uZXJTY3JpcHRdKVxuICAgIH1cbiAgICAvLyBwdWJsaWMgbWFwPE91dHB1dEl0ZW1zVHlwZSBleHRlbmRzIFJhZG9uQW55Pihpbm5lclNjcmlwdDogUmFkb25PcGVyYXRvcjxPdXRwdXRJdGVtc1R5cGU+KSB7XG4gICAgLy8gICAgIC8vIHRvZG86IGNoZWNrIHNjcmlwdCdzIGlucHV0IHR5cGUgbWF0Y2hlcyBhcnJheSdzIGl0ZW1zIHR5cGUsIGlmIGFueSA/P1xuICAgIC8vICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQXJyYXk8T3V0cHV0SXRlbXNUeXBlPiwgW2lubmVyU2NyaXB0XSlcbiAgICAvLyB9XG4gICAgLyoqXG4gICAgICogUmVkdWNlIGFsbCBpdGVtcyBpbiB0aGUgYXJyYXkgaW50byBhIHNpbmdsZSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0gcmVkdWN0b3IgVGhlIHJlZHVjdG9yIG1ldGhvZCB0byBiZSBhcHBsaWVkLiBBbGwgYXJyYXkgaXRlbXMgbXVzdCBiZSBcbiAgICAgKiBjb252ZXJ0YWJsZSBpbnRvIGZsb2F0IHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkZsb2F0YCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHJlZHVjZShyZWR1Y3RvcjogUmFkb25SZWR1Y2VyT3Bjb2Rlcykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uRmxvYXQsIFtyZWR1Y3Rvcl0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9yZGVyIHRoZSBhcnJheSBpdGVtcyBiYXNlZCBlaXRoZXIgb24gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGdpdmVuIGBpbm5lclNjcmlwdGAgdG8gZXZlcnkgaXRlbSwgb3Igb24gdGhlIFxuICAgICAqIGFjdHVhbCBpdGVtIHZhbHVlcyAoYXMgbG9uZyBhcyB0aGVzZSBhcmUgZWl0aGVyIGludGVnZXJzIG9yIHN0cmluZ3MpLlxuICAgICAqIEZhaWxzIGlmIGFwcGxpZWQgb24gbm9uLWhvbWVnZW5vdXMgYXJyYXlzIChpLmUuIG5vdCBhbGwgaXRlbXMgc2hhcmluZyB0aGUgc2FtZSBgUmFkb25BbnlgKS4gXG4gICAgICogQHBhcmFtIGlubmVyU2NyaXB0IChPcHRpb25hbCkgU29ydGluZyBzY3JpcHQgcmV0dXJuaW5nIGVpdGhlciBhIGBSYWRvbkludGVnZXJgIG9yIGEgYFJhZG9uU3RyaW5nYCBvYmplY3QuXG4gICAgICogQHJldHVybnMgQSBgUmFkb25BcnJheWAgb2JqZWN0LlxuICAgICAqL1xuICAgIC8vIFRPRE9cbiAgICAvLyBwdWJsaWMgc29ydChpbm5lclNjcmlwdD86IFJhZG9uT3BlcmF0b3I8UmFkb25TdHJpbmcgfCBSYWRvbkludGVnZXI+KSB7XG4gICAgLy8gICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25BcnJheTxJdGVtc1R5cGU+LCBbaW5uZXJTY3JpcHRdKVxuICAgIC8vIH1cbiAgICAvKipcbiAgICAgKiBUYWtlIGEgc2VsZWN0aW9uIG9mIGl0ZW1zIGZyb20gdGhlIGlucHV0IGFycmF5LlxuICAgICAqIEBwYXJhbSBpbmRleGVzIEluZGV4ZXMgb2YgdGhlIGlucHV0IGl0ZW1zIHRvIHRha2UgaW50byB0aGUgb3V0cHV0IGFycmF5LiBcbiAgICAgKiBAcmV0dXJuIEEgYFJhZG9uQXJyYXlgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGljayguLi5pbmRleGVzOiBudW1iZXJbXSkge1xuICAgICAgICBpZiAoQXJyYXkoaW5kZXhlcykubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFdmFsRXJyb3IoYFxceDFiWzE7MzNtUmFkb25BcnJheTo6cGljazogYSBub24tZW1wdHkgYXJyYXkgb2YgbnVtYmVycyBtdXN0IGJlIHByb3ZpZGVkXFx4MWJbMG1gKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25BcnJheTxJdGVtc1R5cGU+LCBbLi4uaW5kZXhlc10pXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmFkb25Cb29sZWFuIGV4dGVuZHMgUmFkb25Bbnkge1xuICAgIC8qKlxuICAgICAqIFJldmVyc2UgdmFsdWUuXG4gICAgICogQHJldHVybnMgQSBgUmFkb25Cb29sZWFuYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIG5lZ2F0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkJvb2xlYW4sIFtdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYXN0IHZhbHVlIGludG8gYSBzdHJpbmcuIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uU3RyaW5nYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHN0cmluZ2lmeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvblN0cmluZywgW10pXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmFkb25CeXRlcyBleHRlbmRzIFJhZG9uQW55IHtcbiAgICBzdGF0aWMgcmVhZG9ubHkgRW5jb2RpbmdzID0gUmFkb25FbmNvZGluZ3M7XG4gICAgLyoqXG4gICAgICogQ29udmVydCBidWZmZXIgaW50byAoYmlnLWVuZGlhbikgaW50ZWdlci5cbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkJ5dGVzYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGFzSW50ZWdlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkludGVnZXIsIFtdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBcHBseSB0aGUgU0hBMi0yNTYgaGFzaCBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkJ5dGVzYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGhhc2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25CeXRlcywgW10pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMuIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHNsaWNlIGV4dHJhY3RlZCBmcm9tIHRoZSBpbnB1dCBidWZmZXIuIFxuICAgICAqIEEgYHN0YXJ0SW5kZXhgIG9mIDAgcmVmZXJzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGlucHV0IGJ1ZmZlci4gSWYgbm8gYGVuZEluZGV4YCBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSBhc3N1bWVkIFxuICAgICAqIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlci4gTmVnYXRpdmUgdmFsdWVzIHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGUgaW5wdXQgYnVmZmVyLlxuICAgICAqIEBwYXJhbSBzdGFydEluZGV4IFBvc2l0aW9uIHdpdGhpbiBpbnB1dCBidWZmZXIgd2hlcmUgdGhlIG91dHB1dCBidWZmZXIgd2lsbCBzdGFydC5cbiAgICAgKiBAcGFyYW0gZW5kSW5kZXggUG9zaXRpb24gd2l0aGluIGlucHV0IGJ1ZmZlciB3aGVyZSB0aGUgb3V0cHV0IGJ1ZmZlciB3aWxsIGVuZFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQnl0ZXNgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2xpY2Uoc3RhcnRJbmRleDogbnVtYmVyID0gMCwgZW5kSW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkJ5dGVzLCBbc3RhcnRJbmRleCwgZW5kSW5kZXhdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IHRoZSBpbnB1dCBidWZmZXIgaW50byBhIHN0cmluZy5cbiAgICAgKiBAcGFyYW0gZW5jb2RpbmcgRW51bSBpbnRlZ2VyIHZhbHVlIHNwZWNpZnlpbmcgdGhlIGVuY29kaW5nIHNjaGVtYSBvbiB0aGUgb3V0cHV0IHN0cmluZywgc3RhbmRpbmc6XG4gICAgICogICAwIC0+IEhleCBzdHJpbmcgKGRlZmF1bHQsIGlmIG5vbmUgd2FzIHNwZWNpZmllZClcbiAgICAgKiAgIDEgLT4gQmFzZTY0IHN0cmluZ1xuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uU3RyaW5nYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHN0cmluZ2lmeShlbmNvZGluZyA9IFJhZG9uRW5jb2RpbmdzLkhleFN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uU3RyaW5nLCBbZW5jb2RpbmddKVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJhZG9uRmxvYXQgZXh0ZW5kcyBSYWRvbkFueSB7XG4gICAgLyoqXG4gICAgICogQ29tcHV0ZSB0aGUgYWJzb2x1dGUgdmFsdWUuXG4gICAgICogQHJldHVybnMgQSBgUmFkb25GbG9hdGAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBhYnNvbHV0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkZsb2F0LCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tcHV0ZSB0aGUgbG93ZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBmbG9hdCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkludGVnZXJgIG9iamVjdC4gXG4gICAgICovXG4gICAgcHVibGljIGNlaWxpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25GbG9hdCwgW10pXG5cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tcHV0ZSB0aGUgZ3JlYXRlc3QgaW50ZWdlciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGZsb2F0IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBmbG9vcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkludGVnZXIsIFtdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGZsb2F0IHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgZ2l2ZW4gYGlucHV0YC4gXG4gICAgICogQHBhcmFtIGlucHV0XG4gICAgICogQHJldHVybnMgQSBgUmFkb25Cb29sZWFuYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGdyZWF0ZXJUaGFuKGlucHV0OiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkJvb2xlYW4sIFtpbnB1dF0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZSBpZiB0aGUgZmxvYXQgdmFsdWUgaXMgbGVzcyB0aGFuIHRoZSBnaXZlbiBgaW5wdXRgLlxuICAgICAqIEBwYXJhbSBpbnB1dCBcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkJvb2xlYW5gIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGVzc1RoYW4oaW5wdXQ6IG51bWJlciB8IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQm9vbGVhbiwgW2lucHV0XSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tcHV0ZSB0aGUgZmxvYXQgcmVtYWluZGVyIG9mIGRpdmlkaW5nIHRoZSB2YWx1ZSBieSB0aGUgZ2l2ZW4gYGludGVnZXJgLlxuICAgICAqIEBwYXJhbSBpbnRlZ2VyIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uRmxvYXRgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbW9kdWxvKGludGVnZXI6IG51bWJlciB8IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uRmxvYXQsIFtpbnRlZ2VyXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogTXVsdGlwbHkgdGhlIGZsb2F0IHZhbHVlIGJ5IHRoZSBnaXZlbiBgZmFjdG9yYC5cbiAgICAgKiBAcGFyYW0gZmFjdG9yIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uRmxvYXRgIG9iamVjdC4gXG4gICAgICovXG4gICAgcHVibGljIG11bHRpcGx5KGZhY3RvcjogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25GbG9hdCwgW2ZhY3Rvcl0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIE5lZ2F0ZSB0aGUgZmxvYXQgdmFsdWUuIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uRmxvYXRgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmVnYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uRmxvYXQsIFtdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21wdXRlIHRoZSBmbG9hdCB2YWx1ZSByYWlzZWQgdG8gdGhlIHBvd2VyIG9mIGdpdmVuIGBleHBvbmVudGBcbiAgICAgKiBAcGFyYW0gZXhwb25lbnRcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkZsb2F0YCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHBvd2VyKGV4cG9uZW50OiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkZsb2F0LCBbZXhwb25lbnRdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSb3VuZCB0byB0aGUgY2xvc2VzdCBpbnRlZ2VyIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyByb3VuZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkludGVnZXIsIFtdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdHJpbmdpZnkgdGhlIGZsb2F0IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uU3RyaW5nYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHN0cmluZ2lmeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvblN0cmluZywgW10pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRha2UgdGhlIGludGVnZXIgcGFydCBvZiB0aGUgZmxvYXQgdmFsdWUuIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyB0cnVuY2F0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkludGVnZXIsIFtdKVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJhZG9uSW50ZWdlciBleHRlbmRzIFJhZG9uQW55IHtcbiAgICAvKipcbiAgICAgKiBDb21wdXRlIHRoZSBhYnNvbHV0ZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkludGVnZXJgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzb2x1dGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lIGlmIHRoZSBpbnRlZ2VyIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgZ2l2ZW4gYGlucHV0YC4gXG4gICAgICogQHBhcmFtIGlucHV0XG4gICAgICogQHJldHVybnMgQSBgUmFkb25Cb29sZWFuYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGdyZWF0ZXJUaGFuKGlucHV0OiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkJvb2xlYW4sIFtpbnB1dF0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZSBpZiB0aGUgaW50ZWdlciB2YWx1ZSBpcyBsZXNzIHRoYW4gdGhlIGdpdmVuIGBpbnB1dGAuIFxuICAgICAqIEBwYXJhbSBpbnB1dFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQm9vbGVhbmAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBsZXNzVGhhbihpbnB1dDogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25Cb29sZWFuLCBbaW5wdXRdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21wdXRlIHRoZSByZW1haW5kZXIgb2YgZGl2aWRpbmcgdGhlIHZhbHVlIGJ5IHRoZSBnaXZlbiBgaW50ZWdlcmAuXG4gICAgICogQHBhcmFtIGludGVnZXIgXG4gICAgICogQHJldHVybnMgQSBgUmFkb25GbG9hdGAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBtb2R1bG8oaW50ZWdlcjogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbaW50ZWdlcl0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIE11bHRpcGx5IHRoZSB2YWx1ZSBieSB0aGUgZ2l2ZW4gYGludGVnZXJgLlxuICAgICAqIEBwYXJhbSBpbnRlZ2VyIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LiBcbiAgICAgKi9cbiAgICBwdWJsaWMgbXVsdGlwbHkoaW50ZWdlcjogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbaW50ZWdlcl0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIE5lZ2F0ZSB0aGUgaW50ZWdlciB2YWx1ZS4gXG4gICAgICogQHJldHVybnMgQSBgUmFkb25GbG9hdGAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBuZWdhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tcHV0ZSB0aGUgdmFsdWUgcmFpc2VkIHRvIHRoZSBwb3dlciBvZiBnaXZlbiBgZXhwb25lbnRgXG4gICAgICogQHBhcmFtIGV4cG9uZW50XG4gICAgICogQHJldHVybnMgQSBgUmFkb25JbnRlZ2VyYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHBvd2VyKGV4cG9uZW50OiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkludGVnZXIsIFtleHBvbmVudF0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0cmluZ2lmeSB0aGUgdmFsdWUuXG4gICAgICogQHJldHVybnMgQSBgUmFkb25TdHJpbmdgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RyaW5naWZ5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uU3RyaW5nLCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FzdCBpbnRvIGEgYmlnLWVuZGlhbiBieXRlcyBidWZmZXIuXG4gICAgICogQHJldHVybnMgQSBgUmFkb25CeXRlc2Agb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyB0b0J5dGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQnl0ZXMsIFtdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYXN0IGludG8gYSBmbG9hdCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkZsb2F0YCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHRvRmxvYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25GbG9hdCwgW10pXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmFkb25NYXAgZXh0ZW5kcyBSYWRvbkFueSB7XG4gICAgLyoqXG4gICAgICogQWx0ZXIgdGhlIHZhbHVlIG9mIHRoZSBpdGVtKHMpIGlkZW50aWZpZWQgYnkgYGtleXNgLCBhcHBseWluZyB0aGUgZ2l2ZW4gYGlubmVyU2NyaXB0YCB0byBlYWNoIG9uZSBvZiB0aGVtLlxuICAgICAqIEBwYXJhbSBrZXkgXG4gICAgICogQHBhcmFtIGlubmVyU2NyaXB0IFxuICAgICAqIEByZXR1cm5zIFRoZSBzYW1lIFJhZG9uTWFwIHVwb24gd2hpY2ggdGhpcyBvcGVyYXRvciBpcyBleGVjdXRlZCwgd2l0aCB0aGUgc3BlY2lmaWVkIGl0ZW0ocykgYWx0ZXJlZFxuICAgICAqIGJ5IHRoZSBnaXZlbiBgaW5uZXJTY3JpcHRgLlxuICAgICAqL1xuICAgIC8vIFRPRE9cbiAgICAvLyBwdWJsaWMgYWx0ZXI8QWx0ZXJlZE91dHB1dFR5cGUgZXh0ZW5kcyBSYWRvbkFueT4oaW5uZXJTY3JpcHQ6IFJhZG9uT3BlcmF0b3I8QWx0ZXJlZE91dHB1dFR5cGU+LCAuLi5rZXlzOiBzdHJpbmdbXSkge1xuICAgIC8vICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uTWFwLCBbaW5uZXJTY3JpcHQsIC4uLmtleXNdKVxuICAgIC8vIH1cbiAgICAvKipcbiAgICAgKiBGZXRjaCB0aGUgYXJyYXkgd2l0aGluIHRoZSBzcGVjaWZpZWQgYGtleWAgZmllbGQuXG4gICAgICogQHBhcmFtIGtleSBcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkFycmF5YCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGdldEFycmF5PEl0ZW1zVHlwZSBleHRlbmRzIFJhZG9uQW55ID0gUmFkb25Bbnk+KGtleTogc3RyaW5nLCBfaXRlbXNUeXBlPzogeyBuZXcoKTogSXRlbXNUeXBlOyB9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25BcnJheTxJdGVtc1R5cGU+LCBba2V5XSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmV0Y2ggdGhlIGJvb2xlYW4gd2l0aGluIHRoZSBzcGVjaWZpZWQgYGtleWAgZmllbGQuIFxuICAgICAqIEBwYXJhbSBrZXkgXG4gICAgICogQHJldHVybnMgQSBgUmFkb25Cb29sZWFuYCBvYmplY3QuIFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRCb29sZWFuKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25Cb29sZWFuLCBba2V5XSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmV0Y2ggdGhlIGZsb2F0IHZhbHVlIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGBrZXlgIGZpZWxkLlxuICAgICAqIEBwYXJhbSBrZXkgXG4gICAgICogQHJldHVybnMgQSBgUmFkb25GbG9hdGAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRGbG9hdChrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uRmxvYXQsIFtrZXldKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGZXRjaCB0aGUgaW50ZWdlciB2YWx1ZSB3aXRoaW4gdGhlIHNwZWNpZmllZCBga2V5YCBmaWVsZC4gXG4gICAgICogQHBhcmFtIGtleSBcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkludGVnZXJgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW50ZWdlcihrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uSW50ZWdlciwgW2tleV0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZldGNoIHRoZSBtYXAgb2JqZWN0IHdpdGhpbiB0aGUgc3BlY2lmaWVkIGBrZXlgIGZpZWxkLiBcbiAgICAgKiBAcGFyYW0ga2V5IFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uTWFwYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGdldE1hcChrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uTWFwLCBba2V5XSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmV0Y2ggdGhlIHN0cmluZyB3aXRoaW4gdGhlIHNwZWNpZmllZCBga2V5YCBmaWVsZC5cbiAgICAgKiBAcGFyYW0ga2V5IFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uU3RyaW5nYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGdldFN0cmluZyhrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uU3RyaW5nLCBba2V5XSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXh0cmFjdCBrZXkgbmFtZXMgb2YgdGhlIG1hcCBpbnRvIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gICAgICogQHJldHVybnMgQSBgUmFkb25BcnJheWAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBrZXlzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQXJyYXk8UmFkb25TdHJpbmc+LCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGFrZSBhIHNlbGVjdGlvbiBvZiBpdGVtcyBmcm9tIHRoZSBpbnB1dCBtYXAuIEZhaWxzIGlmIHVuZXhpc3RlbnQgaXRlbXMgYXJlIHJlZmVycmVkLlxuICAgICAqIEBwYXJhbSBrZXlzIEtleSBzdHJpbmcgb2YgdGhlIGlucHV0IGl0ZW1zIHRvIHRha2UgaW50byB0aGUgb3V0cHV0IG1hcC4gXG4gICAgICogQHJldHVybiBBIGBSYWRvbk1hcGAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBwaWNrKC4uLmtleXM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGlmIChBcnJheShrZXlzKS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEV2YWxFcnJvcihgXFx4MWJbMTszM21SYWRvbk1hcDo6cGljazogYSBub24tZW1wdHkgYXJyYXkgb2Yga2V5IHN0cmluZ3MgbXVzdCBiZSBwcm92aWRlZFxceDFiWzBtYClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uTWFwLCBbLi4ua2V5c10pXG5cbiAgICB9XG4gICAgLyoqXG4gICAgICogRXh0cmFjdCB0aGUgbWFwIHZhbHVlcyBpbnRvIGFuIGFycmF5LlxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQXJyYXlgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdmFsdWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQXJyYXksIFtdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdHJpbmdpZnkgaW5wdXQgYFJhZG9uTWFwYCBvYmplY3QgaW50byBhIEpTT04gc3RyaW5nLlxuICAgICAqIEByZXR1cm4gQSBgUmFkb25TdHJpbmdgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RyaW5naWZ5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uU3RyaW5nLCBbXSlcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSYWRvblN0cmluZyBleHRlbmRzIFJhZG9uQW55IHtcbiAgICAvKipcbiAgICAgKiBDYXN0IGludG8gYSBib29sZWFuIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQm9vbGVhbmAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBhc0Jvb2xlYW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25Cb29sZWFuLCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCB0aGUgaW5wdXQgc3RyaW5nIGludG8gYSBieXRlcyBidWZmZXIuXG4gICAgICogQHBhcmFtIGVuY29kaW5nIEVudW0gaW50ZWdlciB2YWx1ZSBzcGVjaWZ5aW5nIHRoZSBlbmNvZGluZyBzY2hlbWEgb24gdGhlIGlucHV0IHN0cmluZywgc3RhbmRpbmc6XG4gICAgICogICAwIC0+IEhleCBzdHJpbmcgKGRlZmF1bHQsIGlmIG5vbmUgd2FzIHNwZWNpZmllZClcbiAgICAgKiAgIDEgLT4gQmFzZTY0IHN0cmluZ1xuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQnl0ZXNgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXNCeXRlcyhlbmNvZGluZyA9IFJhZG9uRW5jb2RpbmdzLkhleFN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQnl0ZXMsIFtlbmNvZGluZ10pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhc3QgaW50byBhIGZsb2F0IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkZsb2F0YCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGFzRmxvYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25GbG9hdCwgW10pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvdW50IHRoZSBudW1iZXIgb2YgY2hhcnMuIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVwbGFjZSB0aGUgc3RyaW5nIGJ5IGEgdmFsdWUgb2YgdHlwZSBgb3V0cHV0VHlwZWAsIGRldGVybWluZWQgb24gd2hldGhlciB0aGUgc3RyaW5nIHZhbHVlIG1hdGNoZXMgXG4gICAgICogYW55IG9mIHRoZSBrZXlzIHdpdGhpbiB0aGUgcHJvdmlkZWQgYG1hdGNoaW5nTWFwYCwgb3Igc2V0IHRvIGEgYGRlZmF1bHRWYWx1ZWAgaWYgbm8gbWF0Y2ggaXMgZm91bmQuXG4gICAgICogQHBhcmFtIG91dHB1dFR5cGUgUmFkb24gdHlwZSBvZiB0aGUgb3V0cHV0IHZhbHVlLiBcbiAgICAgKiBAcGFyYW0gbWF0Y2hpbmdNYXAgTWFwIGRldGVybWluaW5nIHRoZSBvdXRwdXQgdmFsdWUgZGVwZW5kaW5nIG9uIHRoZSBzdHJpbmcgdmFsdWUuXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBWYWx1ZSByZXR1cm5lZCBpZiBubyBtYXRjaCBpcyBmb3VuZC4gXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHVibGljIG1hdGNoPE91dHB1dFR5cGUgZXh0ZW5kcyBSYWRvbkFueSA9IFJhZG9uU3RyaW5nPihcbiAgICAgICAgb3V0cHV0VHlwZTogeyBuZXcocHJldj86IFJhZG9uT3BlcmF0b3IpOiBPdXRwdXRUeXBlOyB9LCBcbiAgICAgICAgbWF0Y2hpbmdNYXA6IE1hcDxzdHJpbmcsIGFueT4sIFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGFueVxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKG91dHB1dFR5cGUsIFttYXRjaGluZ01hcCwgZGVmYXVsdFZhbHVlXSlcbiAgICAgICAgLy8gdGhpcy5fYnl0ZWNvZGUgPSBbIFxuICAgICAgICAvLyAgICAgMHg3NSwgIFxuICAgICAgICAvLyAgICAgbWF0Y2hpbmdNYXAsXG4gICAgICAgIC8vICAgICBkZWZhdWx0VmFsdWVcbiAgICAgICAgLy8gXVxuICAgICAgICAvLyB0aGlzLl9tZXRob2QgPSBcIm1hdGNoXCJcbiAgICAgICAgLy8gdGhpcy5fcGFyYW1zID0gYHsgJHtPYmplY3QuZW50cmllcyhtYXRjaGluZ01hcCkubWFwKChlbnRyeTogW3N0cmluZywgYW55XSkgPT4gYFxcXCIke2VudHJ5WzBdfVxcXCI6ICR7ZW50cnlbMV19LCBgKX19LCAke2RlZmF1bHRWYWx1ZX1gXG4gICAgICAgIC8vIGxldCBrZXlzOiBzdHJpbmcgPSBcIlwiXG4gICAgICAgIC8vIE9iamVjdC5rZXlzKG1hdGNoaW5nTWFwKS5tYXAoKGtleTogc3RyaW5nKSA9PiBrZXlzICs9IGtleSArIFwiO1wiKVxuICAgICAgICAvLyByZXR1cm4gbmV3IG91dHB1dFR5cGUodGhpcywga2V5cylcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2UgaW5wdXQgc3RyaW5nIGFzIGFuIGFycmF5IG9mIEpTT04gaXRlbXMuIFxuICAgICAqIEBwYXJhbSBqc29uUGF0aHMgKG9wdGlvbmFsKSBBcnJheSBvZiBKU09OIHBhdGhzIHdpdGhpbiBpbnB1dCBgUmFkb25TdHJpbmdgIGZyb20gd2hlcmUgdG8gZmV0Y2ggaXRlbXMgdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBvdXRwdXQgYFJhZG9uQXJyYXlgLiBcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkFycmF5YCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHBhcnNlSlNPTkFycmF5KC4uLmpzb25QYXRoczogc3RyaW5nW10pOiBSYWRvbkFycmF5PFJhZG9uQW55PiB7IFxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQXJyYXk8UmFkb25Bbnk+LCBbLi4uanNvblBhdGhzXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2Ugc3RyaW5nIGFzIGEgSlNPTi1lbmNvZGVkIG1hcC4gXG4gICAgICogQHBhcmFtIGpzb25QYXRoIChvcHRpb25hbCkgSlNPTiBwYXRoIHdpdGhpbiBpbnB1dCBgUmFkb25TdHJpbmdgIGZyb20gd2hlcmUgdG8gZXh0cmFjdCB0aGUgb3V0cHV0IGBSYWRvbk1hcGAuIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uTWFwYCBvYmplY3QuIFxuICAgICAqL1xuICAgIHB1YmxpYyBwYXJzZUpTT05NYXAoanNvblBhdGg/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbk1hcCwgW2pzb25QYXRoXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2Ugc3RyaW5nIGFzIGFuIFhNTC1lbmNvZGVkIG1hcC4gXG4gICAgICogQHJldHVybnMgQSBgUmFkb25NYXBgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGFyc2VYTUxNYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25NYXAsIFtdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlIHdpdGggZ2l2ZW4gYHJlcGxhY2VtZW50YCBzdHJpbmcsIGFsbCBwYXJ0cyBvZiB0aGUgaW5wdXQgc3RyaW5nIHRoYXQgbWF0Y2ggd2l0aCBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24uIFxuICAgICAqIEBwYXJhbSByZWdleCBSZWd1bGFyIGV4cHJlc3Npb24gdG8gYmUgbWF0Y2hlZC5cbiAgICAgKiBAcGFyYW0gcmVwbGFjZW1lbnQgVGV4dCB0aGF0IHdpbGwgcmVwbGFjZSBhbGwgb2NjdXJlbmNlcy4gXG4gICAgICogQHJldHVybnMgQSBgUmFkb25TdHJpbmdgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVwbGFjZShyZWdleDogc3RyaW5nID0gXCJcIiwgcmVwbGFjZW1lbnQ6IHN0cmluZyA9IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvblN0cmluZywgW3JlZ2V4LCByZXBsYWNlbWVudF0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBzbGljZSBleHRyYWN0ZWQgZnJvbSB0aGUgaW5wdXQgc3RyaW5nLiBcbiAgICAgKiBBIGBzdGFydEluZGV4YCBvZiAwIHJlZmVycyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnB1dCBzdHJpbmcuIElmIG5vIGBlbmRJbmRleGAgaXMgcHJvdmlkZWQsIGl0IHdpbGwgYmUgYXNzdW1lZCBcbiAgICAgKiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBzdHJpbmcuIE5lZ2F0aXZlIHZhbHVlcyB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2YgdGhlIGlucHV0IHN0cmluZy5cbiAgICAgKiBAcGFyYW0gc3RhcnRJbmRleCBQb3NpdGlvbiB3aXRoaW4gaW5wdXQgc3RyaW5nIHdoZXJlIHRoZSBvdXRwdXQgc3RyaW5nIHdpbGwgc3RhcnQuXG4gICAgICogQHBhcmFtIGVuZEluZGV4IFBvc2l0aW9uIHdpdGhpbiBpbnB1dCBzdHJpbmcgd2hlcmUgdGhlIG91dHB1dCBzdHJpbmcgd2lsbCBlbmQuXG4gICAgICogQHJldHVybnMgQSBgUmFkb25TdHJpbmdgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2xpY2Uoc3RhcnRJbmRleDogbnVtYmVyID0gMCwgZW5kSW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvblN0cmluZywgW3N0YXJ0SW5kZXgsIGVuZEluZGV4XSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGl2aWRlcyBpbnB1dCBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBzdWJzdHJpbmdzLCBcbiAgICAgKiBAcGFyYW0gcmVnZXggVGhlIHN0cmluZyBvciByZWd1bGFyIGV4cHJlc3Npb24gdG8gdXNlIGZvciBzcGxpdHRpbmcuXG4gICAgICogQHJldHVybnMgQSBgUmFkb25BcnJheWAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBzcGxpdChyZWdleDogc3RyaW5nID0gXCJcXHJcIikge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQXJyYXk8UmFkb25TdHJpbmc+LCBbcmVnZXhdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBMb3dlciBjYXNlIGFsbCBjaGFyYWN0ZXJzLlxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uU3RyaW5nYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHRvTG93ZXJjYXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uU3RyaW5nLCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBwZXIgY2FzZSBhbGwgY2hhcmFjdGVycy5cbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvblN0cmluZ2Agb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyB0b1VwcGVyQ2FzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvblN0cmluZywgW10pXG4gICAgfVxufVxuIl19
|