appium 2.0.0-beta.39 → 2.0.0-beta.41
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/build/lib/appium.d.ts.map +1 -1
- package/build/lib/appium.js +14 -15
- package/build/lib/cli/args.d.ts +2 -5
- package/build/lib/cli/args.d.ts.map +1 -1
- package/build/lib/cli/args.js +1 -1
- package/build/lib/config-file.js +4 -4
- package/build/lib/config.d.ts +9 -2
- package/build/lib/config.d.ts.map +1 -1
- package/build/lib/config.js +12 -29
- package/build/lib/extension/extension-config.d.ts.map +1 -1
- package/build/lib/extension/extension-config.js +3 -3
- package/build/lib/extension/index.js +6 -5
- package/build/lib/extension/package-changed.js +2 -4
- package/build/lib/main.d.ts.map +1 -1
- package/build/lib/main.js +22 -17
- package/build/lib/schema/arg-spec.d.ts +5 -5
- package/build/lib/schema/arg-spec.d.ts.map +1 -1
- package/build/lib/schema/arg-spec.js +2 -2
- package/build/lib/schema/cli-args.js +5 -7
- package/build/lib/schema/schema.d.ts +3 -3
- package/build/lib/schema/schema.d.ts.map +1 -1
- package/build/lib/schema/schema.js +2 -4
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/cli.d.ts +4 -5
- package/build/types/cli.d.ts.map +1 -1
- package/lib/appium.js +8 -5
- package/lib/cli/args.js +1 -3
- package/lib/config.js +18 -24
- package/lib/extension/extension-config.js +4 -6
- package/lib/main.js +17 -2
- package/lib/schema/arg-spec.js +1 -1
- package/lib/schema/schema.js +1 -1
- package/package.json +24 -15
- package/scripts/autoinstall-extensions.js +11 -3
- package/test.d.ts +7 -0
- package/test.js +13 -0
- package/types/cli.ts +8 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appium.d.ts","sourceRoot":"","sources":["../../lib/appium.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"appium.d.ts","sourceRoot":"","sources":["../../lib/appium.js"],"names":[],"mappings":"AAkyBA;;;GAGG;AACH;IAME,cAOC;IAZD;;OAEG;IACH,MAFU,SAAS,MAAM,CAAC,CAEgB;CAU3C;6BAKY,OAAO,eAAe,EAAE,cAAc;qBACtC,OAAO,eAAe,EAAE,MAAM;0BAC9B,OAAO,eAAe,EAAE,WAAW;8BACnC,OAAO,eAAe,EAAE,eAAe;yBACvC,OAAO,eAAe,EAAE,UAAU;yBAClC,OAAO,eAAe,EAAE,UAAU;0BAClC,OAAO,eAAe,EAAE,WAAW;2BACnC,OAAO,eAAe,EAAE,YAAY;4BACpC,OAAO,eAAe,EAAE,aAAa;2BACrC,OAAO,2BAA2B,EAAE,YAAY;qBAChD,OAAO,eAAe,EAAE,MAAM;0BAC9B,OAAO,eAAe,EAAE,WAAW;yBACnC,OAAO,eAAe,EAAE,UAAU;yBAClC,OAAO,eAAe,EAAE,UAAU;6BAClC,OAAO,eAAe,EAAE,cAAc,CAAC,qBAAqB,GAAG,EAAE,CAAC,EAAC,qBAAqB,IAAI,CAAC,CAAC;;;;;;;;;;AAnyB3G;;GAEG;AACH;IAqDE;;OAEG;IACH,kBAFW,UAAU,EAwBpB;IA7ED;;;;;OAKG;IACH,UAFU,OAAO,MAAM,EAAC,cAAc,CAAC,CAEzB;IAEd;;;;;OAKG;IACH,gBAFU,OAAO,MAAM,EAAC,cAAc,EAAE,CAAC,CAErB;IASpB;;;OAGG;IACH,eAFU,IAAI,WAAW,EAAC,MAAM,CAAC,CAEnB;IAEd;;;OAGG;IACH,gBAFU,OAAO,MAAM,EAAC,aAAa,WAAW,CAAC,EAAE,CAAC,CAEhC;IAEpB;;;OAGG;IACH,oBAFU,aAAa,WAAW,CAAC,EAAE,CAEb;IAExB,2BAA2B;IAC3B,cADW,YAAY,CACV;IAEb,2BAA2B;IAC3B,QADW,YAAY,CAChB;IAEP,qEAAqD;IAErD,yBAAyB;IACzB,MADW,UAAU,CAChB;IA+CL,uCAGC;IAED,yEAEC;IAGD;;OAIC;IAGD;;;;;SAKC;IAED,+FAiBC;IAED;;;;OAIG;IACH,6BAHW,MAAM,GACJ,OAAO,MAAM,EAAC,OAAO,CAAC,CAIlC;IAED;;;;;;;;OAQG;IACH,6BAHW,MAAM,GACJ,OAAO,MAAM,EAAC,OAAO,CAAC,GAAC,SAAS,CAgB5C;IAED;;;;;;OAMG;IACH,0BALW,eAAe,WACf,eAAe,mBACf,eAAe;;;;;;;;OAuKzB;IAED;;;;OAIG;IACH,wCAHW,MAAM,kBACN,MAAM,QAsChB;IAED;;;;OAIG;IAEH,qCAJW,WAAW,GACT,QAAQ,UAAU,EAAE,CAAC,CAkBjC;IAED;;OAEG;IACH,yBAFW,MAAM;;;;;;;;OA0ChB;IAED,4CAqBC;IAED;;;;;OAKG;IACH,8BAHY,MAAM,gBAejB;IAED;;;;;;;;;OASG;IACH,wBAJW,MAAM,cACL,MAAM,gBASjB;IAED;;;OAGG;IACH,yBAFa,MAAM,EAAE,CAWpB;IAED;;;;;OAKG;IACH,oBAJW,MAAM,WACF,GAAG,kBA+HjB;IAED;;;;;;;YAwBC;IAED;;;aAoBC;IAED;;;;;;;OAwBC;IAED,qCAGC;IAED,sDAGC;IAED,kCAGC;CACF"}
|
package/build/lib/appium.js
CHANGED
|
@@ -58,9 +58,14 @@ class AppiumDriver extends _baseDriver.DriverCore {
|
|
|
58
58
|
super(opts);
|
|
59
59
|
this.args = { ...opts
|
|
60
60
|
};
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
|
|
62
|
+
(async () => {
|
|
63
|
+
try {
|
|
64
|
+
await (0, _config.updateBuildInfo)();
|
|
65
|
+
} catch (e) {
|
|
66
|
+
this.log.debug(`Cannot fetch Appium build info: ${e.message}`);
|
|
67
|
+
}
|
|
68
|
+
})();
|
|
64
69
|
}
|
|
65
70
|
|
|
66
71
|
get log() {
|
|
@@ -106,9 +111,9 @@ class AppiumDriver extends _baseDriver.DriverCore {
|
|
|
106
111
|
}
|
|
107
112
|
|
|
108
113
|
getCliArgsForPlugin(extName) {
|
|
109
|
-
var _this$args$plugin
|
|
114
|
+
var _this$args$plugin;
|
|
110
115
|
|
|
111
|
-
return (
|
|
116
|
+
return ((_this$args$plugin = this.args.plugin) === null || _this$args$plugin === void 0 ? void 0 : _this$args$plugin[extName]) ?? {};
|
|
112
117
|
}
|
|
113
118
|
|
|
114
119
|
getCliArgsForDriver(extName) {
|
|
@@ -127,8 +132,6 @@ class AppiumDriver extends _baseDriver.DriverCore {
|
|
|
127
132
|
}
|
|
128
133
|
|
|
129
134
|
async createSession(jsonwpCaps, reqCaps, w3cCapabilities, driverData) {
|
|
130
|
-
var _alwaysMatch, _w3cCapabilities;
|
|
131
|
-
|
|
132
135
|
const defaultCapabilities = _lodash.default.cloneDeep(this.args.defaultCapabilities);
|
|
133
136
|
|
|
134
137
|
const defaultSettings = (0, _utils.pullSettings)(defaultCapabilities);
|
|
@@ -138,12 +141,10 @@ class AppiumDriver extends _baseDriver.DriverCore {
|
|
|
138
141
|
};
|
|
139
142
|
w3cCapabilities = _lodash.default.cloneDeep(w3cCapabilities);
|
|
140
143
|
const w3cSettings = { ...jwpSettings,
|
|
141
|
-
...(0, _utils.pullSettings)((
|
|
144
|
+
...(0, _utils.pullSettings)((w3cCapabilities ?? {}).alwaysMatch ?? {})
|
|
142
145
|
};
|
|
143
146
|
|
|
144
|
-
for (const firstMatchEntry of (
|
|
145
|
-
var _firstMatch, _w3cCapabilities2;
|
|
146
|
-
|
|
147
|
+
for (const firstMatchEntry of (w3cCapabilities ?? {}).firstMatch ?? []) {
|
|
147
148
|
Object.assign(w3cSettings, (0, _utils.pullSettings)(firstMatchEntry));
|
|
148
149
|
}
|
|
149
150
|
|
|
@@ -208,9 +209,7 @@ class AppiumDriver extends _baseDriver.DriverCore {
|
|
|
208
209
|
driverInstance.serverPath = this.args.basePath;
|
|
209
210
|
|
|
210
211
|
try {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
runningDriversData = (_await$this$curSessio = await this.curSessionDataForDriver(InnerDriver)) !== null && _await$this$curSessio !== void 0 ? _await$this$curSessio : [];
|
|
212
|
+
runningDriversData = (await this.curSessionDataForDriver(InnerDriver)) ?? [];
|
|
214
213
|
} catch (e) {
|
|
215
214
|
throw new _baseDriver.errors.SessionNotCreatedError(e.message);
|
|
216
215
|
}
|
|
@@ -582,4 +581,4 @@ class NoDriverProxyCommandError extends Error {
|
|
|
582
581
|
}
|
|
583
582
|
|
|
584
583
|
exports.NoDriverProxyCommandError = NoDriverProxyCommandError;
|
|
585
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzIiwiT2JqZWN0IiwiZnJlZXplIiwiYXV0b21hdGlvbk5hbWUiLCJwcmVzZW5jZSIsImlzU3RyaW5nIiwicGxhdGZvcm1OYW1lIiwic2Vzc2lvbnNMaXN0R3VhcmQiLCJBc3luY0xvY2siLCJwZW5kaW5nRHJpdmVyc0d1YXJkIiwiQXBwaXVtRHJpdmVyIiwiRHJpdmVyQ29yZSIsInNlc3Npb25zIiwicGVuZGluZ0RyaXZlcnMiLCJuZXdDb21tYW5kVGltZW91dE1zIiwicGx1Z2luQ2xhc3NlcyIsInNlc3Npb25QbHVnaW5zIiwic2Vzc2lvbmxlc3NQbHVnaW5zIiwiZHJpdmVyQ29uZmlnIiwic2VydmVyIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiYXJncyIsImNvbnN0cnVjdG9yIiwib3B0cyIsInRtcERpciIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fVE1QX0RJUiIsInVwZGF0ZUJ1aWxkSW5mbyIsImNhdGNoIiwiZXJyIiwibG9nIiwiZGVidWciLCJfbG9nIiwiaW5zdGFuY2VOYW1lIiwibmFtZSIsIm5vZGUiLCJnZXRPYmplY3RJZCIsInN1YnN0cmluZyIsImxvZ2dlciIsImdldExvZ2dlciIsImlzQ29tbWFuZHNRdWV1ZUVuYWJsZWQiLCJzZXNzaW9uRXhpc3RzIiwic2Vzc2lvbklkIiwiZHN0U2Vzc2lvbiIsImRyaXZlckZvclNlc3Npb24iLCJnZXRTdGF0dXMiLCJidWlsZCIsIl8iLCJjbG9uZSIsImdldEJ1aWxkSW5mbyIsImdldFNlc3Npb25zIiwidG9QYWlycyIsIm1hcCIsImlkIiwiZHJpdmVyIiwiY2FwYWJpbGl0aWVzIiwiY2FwcyIsInByaW50TmV3U2Vzc2lvbkFubm91bmNlbWVudCIsImRyaXZlck5hbWUiLCJkcml2ZXJWZXJzaW9uIiwiZHJpdmVyQmFzZVZlcnNpb24iLCJpbmZvIiwiQVBQSVVNX1ZFUiIsImJhc2VWZXJzaW9uIiwiZ2V0Q2xpQXJnc0ZvclBsdWdpbiIsImV4dE5hbWUiLCJwbHVnaW4iLCJnZXRDbGlBcmdzRm9yRHJpdmVyIiwiYWxsQ2xpQXJnc0ZvckV4dCIsImlzRW1wdHkiLCJkZWZhdWx0cyIsImdldERlZmF1bHRzRm9yRXh0ZW5zaW9uIiwiRFJJVkVSX1RZUEUiLCJjbGlBcmdzIiwib21pdEJ5IiwidmFsdWUiLCJrZXkiLCJpc0VxdWFsIiwiY3JlYXRlU2Vzc2lvbiIsImpzb253cENhcHMiLCJyZXFDYXBzIiwidzNjQ2FwYWJpbGl0aWVzIiwiZHJpdmVyRGF0YSIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJjbG9uZURlZXAiLCJkZWZhdWx0U2V0dGluZ3MiLCJwdWxsU2V0dGluZ3MiLCJqd3BTZXR0aW5ncyIsInczY1NldHRpbmdzIiwiYWx3YXlzTWF0Y2giLCJmaXJzdE1hdGNoRW50cnkiLCJmaXJzdE1hdGNoIiwiYXNzaWduIiwicHJvdG9jb2wiLCJpbm5lclNlc3Npb25JZCIsImRDYXBzIiwicGFyc2VkQ2FwcyIsInBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyIiwiZGVzaXJlZENhcHMiLCJwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMiLCJwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMiLCJlcnJvciIsIklubmVyRHJpdmVyIiwidmVyc2lvbiIsImZpbmRNYXRjaGluZ0RyaXZlciIsInNlc3Npb25PdmVycmlkZSIsImRlbGV0ZUFsbFNlc3Npb25zIiwicnVubmluZ0RyaXZlcnNEYXRhIiwib3RoZXJQZW5kaW5nRHJpdmVyc0RhdGEiLCJkcml2ZXJJbnN0YW5jZSIsInJlbGF4ZWRTZWN1cml0eUVuYWJsZWQiLCJkZW55SW5zZWN1cmUiLCJhIiwiYWxsb3dJbnNlY3VyZSIsInNlcnZlckhvc3QiLCJhZGRyZXNzIiwic2VydmVyUG9ydCIsInBvcnQiLCJzZXJ2ZXJQYXRoIiwiYmFzZVBhdGgiLCJjdXJTZXNzaW9uRGF0YUZvckRyaXZlciIsImUiLCJlcnJvcnMiLCJTZXNzaW9uTm90Q3JlYXRlZEVycm9yIiwibWVzc2FnZSIsImFjcXVpcmUiLCJjb21wYWN0IiwiZHJ2IiwicHVzaCIsInB1bGwiLCJhdHRhY2hVbmV4cGVjdGVkU2h1dGRvd25IYW5kbGVyIiwic3RhcnROZXdDb21tYW5kVGltZW91dCIsImlzVzNDUHJvdG9jb2wiLCJKU09OIiwic3RyaW5naWZ5IiwidXBkYXRlU2V0dGluZ3MiLCJpc01qc29ud3BQcm90b2NvbCIsIm9uU2h1dGRvd24iLCJjYXVzZSIsIkVycm9yIiwid2FybiIsImlzRnVuY3Rpb24iLCJvblVuZXhwZWN0ZWRTaHV0ZG93biIsImRhdGEiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJzIiwiZGF0dW0iLCJkZWxldGVTZXNzaW9uIiwib3RoZXJTZXNzaW9uc0RhdGEiLCJjdXJDb25zdHJ1Y3Rvck5hbWUiLCJzZXNzaW9uc0NvdW50Iiwic2l6ZSIsImZvcmNlIiwicmVhc29uIiwidXRpbCIsInBsdXJhbGl6ZSIsImNsZWFudXBQcm9taXNlcyIsInN0YXJ0VW5leHBlY3RlZFNodXRkb3duIiwia2V5cyIsImNsZWFudXBQcm9taXNlIiwicGx1Z2luc0ZvclNlc3Npb24iLCJjcmVhdGVQbHVnaW5JbnN0YW5jZXMiLCJwbHVnaW5zVG9IYW5kbGVDbWQiLCJjbWQiLCJwIiwiaGFuZGxlIiwicGx1Z2luSW5zdGFuY2VzIiwiUGx1Z2luQ2xhc3MiLCJlbnRyaWVzIiwiZXhlY3V0ZUNvbW1hbmQiLCJpc0dldFN0YXR1cyIsIkdFVF9TVEFUVVNfQ09NTUFORCIsImlzVW1icmVsbGFDbWQiLCJpc0FwcGl1bURyaXZlckNvbW1hbmQiLCJpc1Nlc3Npb25DbWQiLCJpc1Nlc3Npb25Db21tYW5kIiwicmVxRm9yUHJveHkiLCJsYXN0IiwicG9wIiwicGx1Z2lucyIsImNtZEhhbmRsZWRCeSIsImRlZmF1bHQiLCJkZWZhdWx0QmVoYXZpb3IiLCJsZW5ndGgiLCJwcm94eUNvbW1hbmQiLCJOb0RyaXZlclByb3h5Q29tbWFuZEVycm9yIiwib3JpZ2luYWxVcmwiLCJtZXRob2QiLCJib2R5IiwiQmFzZURyaXZlciIsInByb3RvdHlwZSIsImNhbGwiLCJ3cmFwcGVkQ21kIiwid3JhcENvbW1hbmRXaXRoUGx1Z2lucyIsIm5leHQiLCJyZXMiLCJleGVjdXRlV3JhcHBlZENvbW1hbmQiLCJsb2dQbHVnaW5IYW5kbGVyUmVwb3J0IiwiQ1JFQVRFX1NFU1NJT05fQ09NTUFORCIsImZpcnN0IiwiX25leHQiLCJkaWRIYW5kbGUiLCJrIiwiZGlkbnRIYW5kbGUiLCJjbWRSZXMiLCJjbWRFcnIiLCJpc1BsYWluT2JqZWN0IiwiaGFzIiwicHJveHlBY3RpdmUiLCJnZXRQcm94eUF2b2lkTGlzdCIsImNhblByb3h5IiwiREVMRVRFX1NFU1NJT05fQ09NTUFORCIsImNvZGUiXSwic291cmNlcyI6WyIuLi8uLi9saWIvYXBwaXVtLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtnZXRCdWlsZEluZm8sIHVwZGF0ZUJ1aWxkSW5mbywgQVBQSVVNX1ZFUn0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHtcbiAgQmFzZURyaXZlcixcbiAgRHJpdmVyQ29yZSxcbiAgZXJyb3JzLFxuICBpc1Nlc3Npb25Db21tYW5kLFxuICBDUkVBVEVfU0VTU0lPTl9DT01NQU5ELFxuICBERUxFVEVfU0VTU0lPTl9DT01NQU5ELFxuICBHRVRfU1RBVFVTX0NPTU1BTkQsXG59IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCB7cGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIsIHB1bGxTZXR0aW5nc30gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge3V0aWwsIG5vZGUsIGxvZ2dlcn0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7Z2V0RGVmYXVsdHNGb3JFeHRlbnNpb259IGZyb20gJy4vc2NoZW1hJztcbmltcG9ydCB7RFJJVkVSX1RZUEUsIFBMVUdJTl9UWVBFfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogSW52YXJpYW50IHNldCBvZiBiYXNlIGNvbnN0cmFpbnRzXG4gKiBAdHlwZSB7UmVhZG9ubHk8Q29uc3RyYWludHM+fVxuICovXG5jb25zdCBkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGF1dG9tYXRpb25OYW1lOiB7XG4gICAgcHJlc2VuY2U6IHRydWUsXG4gICAgaXNTdHJpbmc6IHRydWUsXG4gIH0sXG4gIHBsYXRmb3JtTmFtZToge1xuICAgIHByZXNlbmNlOiB0cnVlLFxuICAgIGlzU3RyaW5nOiB0cnVlLFxuICB9LFxufSk7XG5cbmNvbnN0IHNlc3Npb25zTGlzdEd1YXJkID0gbmV3IEFzeW5jTG9jaygpO1xuY29uc3QgcGVuZGluZ0RyaXZlcnNHdWFyZCA9IG5ldyBBc3luY0xvY2soKTtcblxuLyoqXG4gKiBAaW1wbGVtZW50cyB7U2Vzc2lvbkhhbmRsZXJ9XG4gKi9cbmNsYXNzIEFwcGl1bURyaXZlciBleHRlbmRzIERyaXZlckNvcmUge1xuICAvKipcbiAgICogQWNjZXNzIHRvIHNlc3Npb25zIGxpc3QgbXVzdCBiZSBndWFyZGVkIHdpdGggYSBTZW1hcGhvcmUsIGJlY2F1c2VcbiAgICogaXQgbWlnaHQgYmUgY2hhbmdlZCBieSBvdGhlciBhc3luYyBjYWxscyBhdCBhbnkgdGltZVxuICAgKiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gYWNjZXNzIHRoaXMgcHJvcGVydHkgZGlyZWN0bHkgZnJvbSB0aGUgb3V0c2lkZVxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxFeHRlcm5hbERyaXZlcj59XG4gICAqL1xuICBzZXNzaW9ucyA9IHt9O1xuXG4gIC8qKlxuICAgKiBBY2Nlc3MgdG8gcGVuZGluZyBkcml2ZXJzIGxpc3QgbXVzdCBiZSBndWFyZGVkIHdpdGggYSBTZW1hcGhvcmUsIGJlY2F1c2VcbiAgICogaXQgbWlnaHQgYmUgY2hhbmdlZCBieSBvdGhlciBhc3luYyBjYWxscyBhdCBhbnkgdGltZVxuICAgKiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gYWNjZXNzIHRoaXMgcHJvcGVydHkgZGlyZWN0bHkgZnJvbSB0aGUgb3V0c2lkZVxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxFeHRlcm5hbERyaXZlcltdPn1cbiAgICovXG4gIHBlbmRpbmdEcml2ZXJzID0ge307XG5cbiAgLyoqXG4gICAqIE5vdGUgdGhhdCB7QGxpbmtjb2RlIEFwcGl1bURyaXZlcn0gaGFzIG5vIGBuZXdDb21tYW5kVGltZW91dGAgbWV0aG9kLlxuICAgKiBgQXBwaXVtRHJpdmVyYCBkb2VzIG5vdCBzZXQgYW5kIG9ic2VydmUgaXRzIG93biB0aW1lb3V0czsgaW5kaXZpZHVhbFxuICAgKiBzZXNzaW9ucyAobWFuYWdlZCBkcml2ZXJzKSBkbyBpbnN0ZWFkLlxuICAgKi9cbiAgbmV3Q29tbWFuZFRpbWVvdXRNcyA9IDA7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgYWN0aXZlIHBsdWdpbnNcbiAgICogQHR5cGUge01hcDxQbHVnaW5DbGFzcyxzdHJpbmc+fVxuICAgKi9cbiAgcGx1Z2luQ2xhc3NlcztcblxuICAvKipcbiAgICogbWFwIG9mIHNlc3Npb25zIHRvIGFjdHVhbCBwbHVnaW4gaW5zdGFuY2VzIHBlciBzZXNzaW9uXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLEluc3RhbmNlVHlwZTxQbHVnaW5DbGFzcz5bXT59XG4gICAqL1xuICBzZXNzaW9uUGx1Z2lucyA9IHt9O1xuXG4gIC8qKlxuICAgKiBzb21lIGNvbW1hbmRzIGFyZSBzZXNzaW9ubGVzcywgc28gd2UgbmVlZCBhIHNldCBvZiBwbHVnaW5zIGZvciB0aGVtXG4gICAqIEB0eXBlIHtJbnN0YW5jZVR5cGU8UGx1Z2luQ2xhc3M+W119XG4gICAqL1xuICBzZXNzaW9ubGVzc1BsdWdpbnMgPSBbXTtcblxuICAvKiogQHR5cGUge0RyaXZlckNvbmZpZ30gKi9cbiAgZHJpdmVyQ29uZmlnO1xuXG4gIC8qKiBAdHlwZSB7QXBwaXVtU2VydmVyfSAqL1xuICBzZXJ2ZXI7XG5cbiAgZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cztcblxuICAvKiogQHR5cGUge0RyaXZlck9wdHN9ICovXG4gIGFyZ3M7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RHJpdmVyT3B0c30gb3B0c1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0cykge1xuICAgIC8vIEl0IGlzIG5lY2Vzc2FyeSB0byBzZXQgYC0tdG1wYCBoZXJlIHNpbmNlIGl0IHNob3VsZCBiZSBzZXQgdG9cbiAgICAvLyBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUiBvbmNlIGF0IGFuIGluaXRpYWwgcG9pbnQgaW4gdGhlIEFwcGl1bSBsaWZlY3ljbGUuXG4gICAgLy8gVGhlIHByb2Nlc3MgYXJndW1lbnQgd2lsbCBiZSByZWZlcmVuY2VkIGJ5IEJhc2VEcml2ZXIuXG4gICAgLy8gUGxlYXNlIGNhbGwgQGFwcGl1bS9zdXBwb3J0LnRlbXBEaXIgbW9kdWxlIHRvIGFwcGx5IHRoaXMgYmVuZWZpdC5cbiAgICBpZiAob3B0cy50bXBEaXIpIHtcbiAgICAgIHByb2Nlc3MuZW52LkFQUElVTV9UTVBfRElSID0gb3B0cy50bXBEaXI7XG4gICAgfVxuXG4gICAgc3VwZXIob3B0cyk7XG5cbiAgICB0aGlzLmFyZ3MgPSB7Li4ub3B0c307XG5cbiAgICAvLyBhbGxvdyB0aGlzIHRvIGhhcHBlbiBpbiB0aGUgYmFja2dyb3VuZCwgc28gbm8gYGF3YWl0YFxuICAgIC8vIGNhdGNoIHRoaXMgdG8gYXZvaWQgYW4gdW5oYW5kbGVkIHJlamVjdGlvblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by10aGVuLHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrc1xuICAgIHVwZGF0ZUJ1aWxkSW5mbygpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGVycik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGxvZ2dlciBpbnN0YW5jZSBmb3IgdGhlIGN1cnJlbnQgdW1icmVsbGEgZHJpdmVyIGluc3RhbmNlXG4gICAqL1xuICBnZXQgbG9nKCkge1xuICAgIGlmICghdGhpcy5fbG9nKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZU5hbWUgPSBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9QCR7bm9kZS5nZXRPYmplY3RJZCh0aGlzKS5zdWJzdHJpbmcoMCwgNCl9YDtcbiAgICAgIHRoaXMuX2xvZyA9IGxvZ2dlci5nZXRMb2dnZXIoaW5zdGFuY2VOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2xvZztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgY29tbWFuZHMgcXVldWVpbmcgZm9yIHRoZSB1bWJyZWxsYSBBcHBpdW0gZHJpdmVyXG4gICAqL1xuICBnZXQgaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzZXNzaW9uRXhpc3RzKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gJiYgZHN0U2Vzc2lvbi5zZXNzaW9uSWQgIT09IG51bGw7XG4gIH1cblxuICBkcml2ZXJGb3JTZXNzaW9uKHNlc3Npb25JZCkge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuICBhc3luYyBnZXRTdGF0dXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1aWxkOiBfLmNsb25lKGdldEJ1aWxkSW5mbygpKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbiAgYXN5bmMgZ2V0U2Vzc2lvbnMoKSB7XG4gICAgcmV0dXJuIF8udG9QYWlycyh0aGlzLnNlc3Npb25zKS5tYXAoKFtpZCwgZHJpdmVyXSkgPT4gKHtcbiAgICAgIGlkLFxuICAgICAgY2FwYWJpbGl0aWVzOiBkcml2ZXIuY2FwcyxcbiAgICB9KSk7XG4gIH1cblxuICBwcmludE5ld1Nlc3Npb25Bbm5vdW5jZW1lbnQoZHJpdmVyTmFtZSwgZHJpdmVyVmVyc2lvbiwgZHJpdmVyQmFzZVZlcnNpb24pIHtcbiAgICB0aGlzLmxvZy5pbmZvKFxuICAgICAgZHJpdmVyVmVyc2lvblxuICAgICAgICA/IGBBcHBpdW0gdiR7QVBQSVVNX1ZFUn0gY3JlYXRpbmcgbmV3ICR7ZHJpdmVyTmFtZX0gKHYke2RyaXZlclZlcnNpb259KSBzZXNzaW9uYFxuICAgICAgICA6IGBBcHBpdW0gdiR7QVBQSVVNX1ZFUn0gY3JlYXRpbmcgbmV3ICR7ZHJpdmVyTmFtZX0gc2Vzc2lvbmBcbiAgICApO1xuICAgIHRoaXMubG9nLmluZm8oYENoZWNraW5nIEJhc2VEcml2ZXIgdmVyc2lvbnMgZm9yIEFwcGl1bSBhbmQgJHtkcml2ZXJOYW1lfWApO1xuICAgIHRoaXMubG9nLmluZm8oXG4gICAgICBBcHBpdW1Ecml2ZXIuYmFzZVZlcnNpb25cbiAgICAgICAgPyBgQXBwaXVtJ3MgQmFzZURyaXZlciB2ZXJzaW9uIGlzICR7QXBwaXVtRHJpdmVyLmJhc2VWZXJzaW9ufWBcbiAgICAgICAgOiBgQ291bGQgbm90IGRldGVybWluZSBBcHBpdW0ncyBCYXNlRHJpdmVyIHZlcnNpb25gXG4gICAgKTtcbiAgICB0aGlzLmxvZy5pbmZvKFxuICAgICAgZHJpdmVyQmFzZVZlcnNpb25cbiAgICAgICAgPyBgJHtkcml2ZXJOYW1lfSdzIEJhc2VEcml2ZXIgdmVyc2lvbiBpcyAke2RyaXZlckJhc2VWZXJzaW9ufWBcbiAgICAgICAgOiBgQ291bGQgbm90IGRldGVybWluZSAke2RyaXZlck5hbWV9J3MgQmFzZURyaXZlciB2ZXJzaW9uYFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCBDTEkgYXJndW1lbnRzIGZvciBhIHNwZWNpZmljIHBsdWdpbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBQbHVnaW4gbmFtZVxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZyx1bmtub3duPn0gQXJndW1lbnRzIG9iamVjdC4gSWYgbm9uZSwgYW4gZW1wdHkgb2JqZWN0LlxuICAgKi9cbiAgZ2V0Q2xpQXJnc0ZvclBsdWdpbihleHROYW1lKSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZyx1bmtub3duPn0gKi8gKHRoaXMuYXJncy5wbHVnaW4/LltleHROYW1lXSA/PyB7fSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIENMSSBhcmdzIGZvciBhIHNwZWNpZmljIGRyaXZlci5cbiAgICpcbiAgICogX0FueSBhcmcgd2hpY2ggaXMgZXF1YWwgdG8gaXRzIGRlZmF1bHQgdmFsdWUgd2lsbCBub3QgYmUgcHJlc2VudCBpbiB0aGUgcmV0dXJuZWQgb2JqZWN0Ll9cbiAgICpcbiAgICogX05vdGUgdGhhdCB0aGlzIGJlaGF2aW9yIGN1cnJlbnRseSAoTWF5IDE4IDIwMjIpIGRpZmZlcnMgZnJvbSBob3cgcGx1Z2lucyBhcmUgaGFuZGxlZF8gKHNlZSB7QGxpbmtjb2RlIEFwcGl1bURyaXZlci5nZXRDbGlBcmdzRm9yUGx1Z2lufSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gRHJpdmVyIG5hbWVcbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsdW5rbm93bj58dW5kZWZpbmVkfSBBcmd1bWVudHMgb2JqZWN0LiBJZiBub25lLCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgZ2V0Q2xpQXJnc0ZvckRyaXZlcihleHROYW1lKSB7XG4gICAgY29uc3QgYWxsQ2xpQXJnc0ZvckV4dCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZyx1bmtub3duPnx1bmRlZmluZWR9ICovIChcbiAgICAgIHRoaXMuYXJncy5kcml2ZXI/LltleHROYW1lXVxuICAgICk7XG5cbiAgICBpZiAoIV8uaXNFbXB0eShhbGxDbGlBcmdzRm9yRXh0KSkge1xuICAgICAgY29uc3QgZGVmYXVsdHMgPSBnZXREZWZhdWx0c0ZvckV4dGVuc2lvbihEUklWRVJfVFlQRSwgZXh0TmFtZSk7XG4gICAgICBjb25zdCBjbGlBcmdzID0gXy5pc0VtcHR5KGRlZmF1bHRzKVxuICAgICAgICA/IGFsbENsaUFyZ3NGb3JFeHRcbiAgICAgICAgOiBfLm9taXRCeShhbGxDbGlBcmdzRm9yRXh0LCAodmFsdWUsIGtleSkgPT4gXy5pc0VxdWFsKGRlZmF1bHRzW2tleV0sIHZhbHVlKSk7XG4gICAgICBpZiAoIV8uaXNFbXB0eShjbGlBcmdzKSkge1xuICAgICAgICByZXR1cm4gY2xpQXJncztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IHNlc3Npb25cbiAgICogQHBhcmFtIHtXM0NDYXBhYmlsaXRpZXN9IGpzb253cENhcHMgSlNPTldQIGZvcm1hdHRlZCBkZXNpcmVkIGNhcGFiaWxpdGllc1xuICAgKiBAcGFyYW0ge1czQ0NhcGFiaWxpdGllc30gcmVxQ2FwcyBSZXF1aXJlZCBjYXBhYmlsaXRpZXMgKEpTT05XUCBzdGFuZGFyZClcbiAgICogQHBhcmFtIHtXM0NDYXBhYmlsaXRpZXN9IHczY0NhcGFiaWxpdGllcyBXM0MgY2FwYWJpbGl0aWVzXG4gICAqIEBwYXJhbSB7RHJpdmVyRGF0YVtdfSBbZHJpdmVyRGF0YV1cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24oanNvbndwQ2FwcywgcmVxQ2FwcywgdzNjQ2FwYWJpbGl0aWVzLCBkcml2ZXJEYXRhKSB7XG4gICAgY29uc3QgZGVmYXVsdENhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKHRoaXMuYXJncy5kZWZhdWx0Q2FwYWJpbGl0aWVzKTtcbiAgICBjb25zdCBkZWZhdWx0U2V0dGluZ3MgPSBwdWxsU2V0dGluZ3MoZGVmYXVsdENhcGFiaWxpdGllcyk7XG4gICAganNvbndwQ2FwcyA9IF8uY2xvbmVEZWVwKGpzb253cENhcHMpO1xuICAgIGNvbnN0IGp3cFNldHRpbmdzID0gey4uLmRlZmF1bHRTZXR0aW5ncywgLi4ucHVsbFNldHRpbmdzKGpzb253cENhcHMpfTtcbiAgICB3M2NDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcCh3M2NDYXBhYmlsaXRpZXMpO1xuICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGNsaWVudCBvbmx5IHByb3ZpZGVzIGNhcHMgdXNpbmcgSlNPTldQIHN0YW5kYXJkLFxuICAgIC8vIGFsdGhvdWdoIGZpcnN0TWF0Y2gvYWx3YXlzTWF0Y2ggcHJvcGVydGllcyBhcmUgc3RpbGwgcHJlc2VudC5cbiAgICAvLyBJbiBzdWNoIGNhc2Ugd2UgYXNzdW1lIHRoZSBjbGllbnQgdW5kZXJzdGFuZHMgVzNDIHByb3RvY29sIGFuZCBtZXJnZSB0aGUgZ2l2ZW5cbiAgICAvLyBKU09OV1AgY2FwcyB0byBXM0MgY2Fwc1xuICAgIGNvbnN0IHczY1NldHRpbmdzID0ge1xuICAgICAgLi4uandwU2V0dGluZ3MsXG4gICAgICAuLi5wdWxsU2V0dGluZ3MoKHczY0NhcGFiaWxpdGllcyA/PyB7fSkuYWx3YXlzTWF0Y2ggPz8ge30pLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBmaXJzdE1hdGNoRW50cnkgb2YgKHczY0NhcGFiaWxpdGllcyA/PyB7fSkuZmlyc3RNYXRjaCA/PyBbXSkge1xuICAgICAgT2JqZWN0LmFzc2lnbih3M2NTZXR0aW5ncywgcHVsbFNldHRpbmdzKGZpcnN0TWF0Y2hFbnRyeSkpO1xuICAgIH1cblxuICAgIGxldCBwcm90b2NvbDtcbiAgICBsZXQgaW5uZXJTZXNzaW9uSWQsIGRDYXBzO1xuICAgIHRyeSB7XG4gICAgICAvLyBQYXJzZSB0aGUgY2FwcyBpbnRvIGEgZm9ybWF0IHRoYXQgdGhlIElubmVyRHJpdmVyIHdpbGwgYWNjZXB0XG4gICAgICBjb25zdCBwYXJzZWRDYXBzID0gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIoXG4gICAgICAgIGpzb253cENhcHMsXG4gICAgICAgIHczY0NhcGFiaWxpdGllcyxcbiAgICAgICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMsXG4gICAgICAgIGRlZmF1bHRDYXBhYmlsaXRpZXNcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHtkZXNpcmVkQ2FwcywgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLCBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXN9ID1cbiAgICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vdXRpbHMnKS5QYXJzZWREcml2ZXJDYXBzfSAqLyAocGFyc2VkQ2Fwcyk7XG4gICAgICBwcm90b2NvbCA9IHBhcnNlZENhcHMucHJvdG9jb2w7XG4gICAgICBjb25zdCBlcnJvciA9IC8qKiBAdHlwZSB7aW1wb3J0KCcuL3V0aWxzJykuSW52YWxpZENhcHN9ICovIChwYXJzZWRDYXBzKS5lcnJvcjtcbiAgICAgIC8vIElmIHRoZSBwYXJzaW5nIG9mIHRoZSBjYXBzIHByb2R1Y2VkIGFuIGVycm9yLCB0aHJvdyBpdCBpbiBoZXJlXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZHJpdmVyOiBJbm5lckRyaXZlcixcbiAgICAgICAgdmVyc2lvbjogZHJpdmVyVmVyc2lvbixcbiAgICAgICAgZHJpdmVyTmFtZSxcbiAgICAgIH0gPSB0aGlzLmRyaXZlckNvbmZpZy5maW5kTWF0Y2hpbmdEcml2ZXIoZGVzaXJlZENhcHMpO1xuICAgICAgdGhpcy5wcmludE5ld1Nlc3Npb25Bbm5vdW5jZW1lbnQoSW5uZXJEcml2ZXIubmFtZSwgZHJpdmVyVmVyc2lvbiwgSW5uZXJEcml2ZXIuYmFzZVZlcnNpb24pO1xuXG4gICAgICBpZiAodGhpcy5hcmdzLnNlc3Npb25PdmVycmlkZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZUFsbFNlc3Npb25zKCk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogQHR5cGUge0RyaXZlckRhdGFbXX1cbiAgICAgICAqL1xuICAgICAgbGV0IHJ1bm5pbmdEcml2ZXJzRGF0YSA9IFtdO1xuICAgICAgLyoqXG4gICAgICAgKiBAdHlwZSB7RHJpdmVyRGF0YVtdfVxuICAgICAgICovXG4gICAgICBsZXQgb3RoZXJQZW5kaW5nRHJpdmVyc0RhdGEgPSBbXTtcblxuICAgICAgY29uc3QgZHJpdmVySW5zdGFuY2UgPSBuZXcgSW5uZXJEcml2ZXIodGhpcy5hcmdzLCB0cnVlKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBhc3NpZ24gc2VjdXJpdHkgdmFsdWVzIGRpcmVjdGx5IG9uIHRoZSBkcml2ZXIuIFRoZSBkcml2ZXJcbiAgICAgIC8vIHNob3VsZCBub3QgcmVhZCBzZWN1cml0eSB2YWx1ZXMgZnJvbSBgdGhpcy5vcHRzYCBiZWNhdXNlIHRob3NlIHZhbHVlc1xuICAgICAgLy8gY291bGQgaGF2ZSBiZWVuIHNldCBieSBhIG1hbGljaW91cyB1c2VyIHZpYSBjYXBhYmlsaXRpZXMsIHdoZXJlYXMgd2VcbiAgICAgIC8vIHdhbnQgYSBndWFyYW50ZWUgdGhlIHZhbHVlcyB3ZXJlIHNldCBieSB0aGUgYXBwaXVtIHNlcnZlciBhZG1pblxuICAgICAgaWYgKHRoaXMuYXJncy5yZWxheGVkU2VjdXJpdHlFbmFibGVkKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oXG4gICAgICAgICAgYEFwcGx5aW5nIHJlbGF4ZWQgc2VjdXJpdHkgdG8gJyR7SW5uZXJEcml2ZXIubmFtZX0nIGFzIHBlciBgICtcbiAgICAgICAgICAgIGBzZXJ2ZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiBBbGwgaW5zZWN1cmUgZmVhdHVyZXMgd2lsbCBiZSBgICtcbiAgICAgICAgICAgIGBlbmFibGVkIHVubGVzcyBleHBsaWNpdGx5IGRpc2FibGVkIGJ5IC0tZGVueS1pbnNlY3VyZWBcbiAgICAgICAgKTtcbiAgICAgICAgZHJpdmVySW5zdGFuY2UucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuYXJncy5kZW55SW5zZWN1cmUpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ0V4cGxpY2l0bHkgcHJldmVudGluZyB1c2Ugb2YgaW5zZWN1cmUgZmVhdHVyZXM6Jyk7XG4gICAgICAgIHRoaXMuYXJncy5kZW55SW5zZWN1cmUubWFwKChhKSA9PiB0aGlzLmxvZy5pbmZvKGAgICAgJHthfWApKTtcbiAgICAgICAgZHJpdmVySW5zdGFuY2UuZGVueUluc2VjdXJlID0gdGhpcy5hcmdzLmRlbnlJbnNlY3VyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5hcmdzLmFsbG93SW5zZWN1cmUpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ0V4cGxpY2l0bHkgZW5hYmxpbmcgdXNlIG9mIGluc2VjdXJlIGZlYXR1cmVzOicpO1xuICAgICAgICB0aGlzLmFyZ3MuYWxsb3dJbnNlY3VyZS5tYXAoKGEpID0+IHRoaXMubG9nLmluZm8oYCAgICAke2F9YCkpO1xuICAgICAgICBkcml2ZXJJbnN0YW5jZS5hbGxvd0luc2VjdXJlID0gdGhpcy5hcmdzLmFsbG93SW5zZWN1cmU7XG4gICAgICB9XG5cbiAgICAgIC8vIExpa2V3aXNlLCBhbnkgZHJpdmVyLXNwZWNpZmljIENMSSBhcmdzIHRoYXQgd2VyZSBwYXNzZWQgaW4gc2hvdWxkIGJlIGFzc2lnbmVkIGRpcmVjdGx5IHRvXG4gICAgICAvLyB0aGUgZHJpdmVyIHNvIHRoYXQgdGhleSBjYW5ub3QgYmUgbWltaWNrZWQgYnkgYSBtYWxpY2lvdXMgdXNlciBzZW5kaW5nIGluIGNhcGFiaWxpdGllc1xuICAgICAgY29uc3QgY2xpQXJncyA9IHRoaXMuZ2V0Q2xpQXJnc0ZvckRyaXZlcihkcml2ZXJOYW1lKTtcbiAgICAgIGlmICghXy5pc0VtcHR5KGNsaUFyZ3MpKSB7XG4gICAgICAgIGRyaXZlckluc3RhbmNlLmNsaUFyZ3MgPSBjbGlBcmdzO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIGFzc2lnbm1lbnQgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3Qgd2ViIHNvY2tldHMgZnVuY3Rpb25hbGl0eSBpbnNpZGUgdGhlIGRyaXZlclxuICAgICAgLy8gRHJpdmVycy9wbHVnaW5zIG1pZ2h0IGFsc28gd2FudCB0byBrbm93IHdoZXJlIHRoZXkgYXJlIGhvc3RlZFxuXG4gICAgICAvLyBYWFg6IHRlbXBvcmFyeSBoYWNrIHRvIHdvcmsgYXJvdW5kICMxNjc0N1xuICAgICAgZHJpdmVySW5zdGFuY2Uuc2VydmVyID0gdGhpcy5zZXJ2ZXI7XG4gICAgICBkcml2ZXJJbnN0YW5jZS5zZXJ2ZXJIb3N0ID0gdGhpcy5hcmdzLmFkZHJlc3M7XG4gICAgICBkcml2ZXJJbnN0YW5jZS5zZXJ2ZXJQb3J0ID0gdGhpcy5hcmdzLnBvcnQ7XG4gICAgICBkcml2ZXJJbnN0YW5jZS5zZXJ2ZXJQYXRoID0gdGhpcy5hcmdzLmJhc2VQYXRoO1xuXG4gICAgICB0cnkge1xuICAgICAgICBydW5uaW5nRHJpdmVyc0RhdGEgPSAoYXdhaXQgdGhpcy5jdXJTZXNzaW9uRGF0YUZvckRyaXZlcihJbm5lckRyaXZlcikpID8/IFtdO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHBlbmRpbmdEcml2ZXJzR3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4ge1xuICAgICAgICB0aGlzLnBlbmRpbmdEcml2ZXJzW0lubmVyRHJpdmVyLm5hbWVdID0gdGhpcy5wZW5kaW5nRHJpdmVyc1tJbm5lckRyaXZlci5uYW1lXSB8fCBbXTtcbiAgICAgICAgb3RoZXJQZW5kaW5nRHJpdmVyc0RhdGEgPSBfLmNvbXBhY3QoXG4gICAgICAgICAgdGhpcy5wZW5kaW5nRHJpdmVyc1tJbm5lckRyaXZlci5uYW1lXS5tYXAoKGRydikgPT4gZHJ2LmRyaXZlckRhdGEpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucGVuZGluZ0RyaXZlcnNbSW5uZXJEcml2ZXIubmFtZV0ucHVzaChkcml2ZXJJbnN0YW5jZSk7XG4gICAgICB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgW2lubmVyU2Vzc2lvbklkLCBkQ2Fwc10gPSBhd2FpdCBkcml2ZXJJbnN0YW5jZS5jcmVhdGVTZXNzaW9uKFxuICAgICAgICAgIHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyxcbiAgICAgICAgICByZXFDYXBzLFxuICAgICAgICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyxcbiAgICAgICAgICBbLi4ucnVubmluZ0RyaXZlcnNEYXRhLCAuLi5vdGhlclBlbmRpbmdEcml2ZXJzRGF0YV1cbiAgICAgICAgKTtcbiAgICAgICAgcHJvdG9jb2wgPSBkcml2ZXJJbnN0YW5jZS5wcm90b2NvbDtcbiAgICAgICAgdGhpcy5zZXNzaW9uc1tpbm5lclNlc3Npb25JZF0gPSBkcml2ZXJJbnN0YW5jZTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IHBlbmRpbmdEcml2ZXJzR3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4ge1xuICAgICAgICAgIF8ucHVsbCh0aGlzLnBlbmRpbmdEcml2ZXJzW0lubmVyRHJpdmVyLm5hbWVdLCBkcml2ZXJJbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmF0dGFjaFVuZXhwZWN0ZWRTaHV0ZG93bkhhbmRsZXIoZHJpdmVySW5zdGFuY2UsIGlubmVyU2Vzc2lvbklkKTtcblxuICAgICAgdGhpcy5sb2cuaW5mbyhcbiAgICAgICAgYE5ldyAke0lubmVyRHJpdmVyLm5hbWV9IHNlc3Npb24gY3JlYXRlZCBzdWNjZXNzZnVsbHksIHNlc3Npb24gYCArXG4gICAgICAgICAgYCR7aW5uZXJTZXNzaW9uSWR9IGFkZGVkIHRvIG1hc3RlciBzZXNzaW9uIGxpc3RgXG4gICAgICApO1xuXG4gICAgICAvLyBzZXQgdGhlIE5ldyBDb21tYW5kIFRpbWVvdXQgZm9yIHRoZSBpbm5lciBkcml2ZXJcbiAgICAgIGRyaXZlckluc3RhbmNlLnN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQoKTtcblxuICAgICAgLy8gYXBwbHkgaW5pdGlhbCB2YWx1ZXMgdG8gQXBwaXVtIHNldHRpbmdzIChpZiBwcm92aWRlZClcbiAgICAgIGlmIChkcml2ZXJJbnN0YW5jZS5pc1czQ1Byb3RvY29sKCkgJiYgIV8uaXNFbXB0eSh3M2NTZXR0aW5ncykpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhcbiAgICAgICAgICBgQXBwbHlpbmcgdGhlIGluaXRpYWwgdmFsdWVzIHRvIEFwcGl1bSBzZXR0aW5ncyBwYXJzZWQgZnJvbSBXM0MgY2FwczogYCArXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh3M2NTZXR0aW5ncylcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgZHJpdmVySW5zdGFuY2UudXBkYXRlU2V0dGluZ3ModzNjU2V0dGluZ3MpO1xuICAgICAgfSBlbHNlIGlmIChkcml2ZXJJbnN0YW5jZS5pc01qc29ud3BQcm90b2NvbCgpICYmICFfLmlzRW1wdHkoandwU2V0dGluZ3MpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oXG4gICAgICAgICAgYEFwcGx5aW5nIHRoZSBpbml0aWFsIHZhbHVlcyB0byBBcHBpdW0gc2V0dGluZ3MgcGFyc2VkIGZyb20gTUpTT05XUCBjYXBzOiBgICtcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGp3cFNldHRpbmdzKVxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBkcml2ZXJJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyhqd3BTZXR0aW5ncyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBlcnJvcixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3RvY29sLFxuICAgICAgdmFsdWU6IFtpbm5lclNlc3Npb25JZCwgZENhcHMsIHByb3RvY29sXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RHJpdmVyfSBkcml2ZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlubmVyU2Vzc2lvbklkXG4gICAqL1xuICBhdHRhY2hVbmV4cGVjdGVkU2h1dGRvd25IYW5kbGVyKGRyaXZlciwgaW5uZXJTZXNzaW9uSWQpIHtcbiAgICBjb25zdCBvblNodXRkb3duID0gKGNhdXNlID0gbmV3IEVycm9yKCdVbmtub3duIGVycm9yJykpID0+IHtcbiAgICAgIHRoaXMubG9nLndhcm4oYEVuZGluZyBzZXNzaW9uLCBjYXVzZSB3YXMgJyR7Y2F1c2UubWVzc2FnZX0nYCk7XG5cbiAgICAgIGlmICh0aGlzLnNlc3Npb25QbHVnaW5zW2lubmVyU2Vzc2lvbklkXSkge1xuICAgICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB0aGlzLnNlc3Npb25QbHVnaW5zW2lubmVyU2Vzc2lvbklkXSkge1xuICAgICAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luLm9uVW5leHBlY3RlZFNodXRkb3duKSkge1xuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoXG4gICAgICAgICAgICAgIGBQbHVnaW4gJHtwbHVnaW4ubmFtZX0gZGVmaW5lcyBhbiB1bmV4cGVjdGVkIHNodXRkb3duIGhhbmRsZXI7IGNhbGxpbmcgaXQgbm93YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHBsdWdpbi5vblVuZXhwZWN0ZWRTaHV0ZG93bihkcml2ZXIsIGNhdXNlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2cud2FybihcbiAgICAgICAgICAgICAgICBgR290IGFuIGVycm9yIHdoZW4gcnVubmluZyBwbHVnaW4gJHtwbHVnaW4ubmFtZX0gc2h1dGRvd24gaGFuZGxlcjogJHtlfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFBsdWdpbiAke3BsdWdpbi5uYW1lfSBkb2VzIG5vdCBkZWZpbmUgYW4gdW5leHBlY3RlZCBzaHV0ZG93biBoYW5kbGVyYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nLmluZm8oYFJlbW92aW5nIHNlc3Npb24gJyR7aW5uZXJTZXNzaW9uSWR9JyBmcm9tIG91ciBtYXN0ZXIgc2Vzc2lvbiBsaXN0YCk7XG4gICAgICBkZWxldGUgdGhpcy5zZXNzaW9uc1tpbm5lclNlc3Npb25JZF07XG4gICAgICBkZWxldGUgdGhpcy5zZXNzaW9uUGx1Z2luc1tpbm5lclNlc3Npb25JZF07XG4gICAgfTtcblxuICAgIGlmIChfLmlzRnVuY3Rpb24oZHJpdmVyLm9uVW5leHBlY3RlZFNodXRkb3duKSkge1xuICAgICAgZHJpdmVyLm9uVW5leHBlY3RlZFNodXRkb3duKG9uU2h1dGRvd24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy53YXJuKFxuICAgICAgICBgRmFpbGVkIHRvIGF0dGFjaCB0aGUgdW5leHBlY3RlZCBzaHV0ZG93biBsaXN0ZW5lci4gYCArXG4gICAgICAgICAgYElzICdvblVuZXhwZWN0ZWRTaHV0ZG93bicgbWV0aG9kIGF2YWlsYWJsZSBmb3IgJyR7ZHJpdmVyLmNvbnN0cnVjdG9yLm5hbWV9Jz9gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0RyaXZlckNsYXNzfSBJbm5lckRyaXZlclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEcml2ZXJEYXRhW10+fX1cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF3YWl0XG4gIGFzeW5jIGN1clNlc3Npb25EYXRhRm9yRHJpdmVyKElubmVyRHJpdmVyKSB7XG4gICAgY29uc3QgZGF0YSA9IF8uY29tcGFjdChcbiAgICAgIF8udmFsdWVzKHRoaXMuc2Vzc2lvbnMpXG4gICAgICAgIC5maWx0ZXIoKHMpID0+IHMuY29uc3RydWN0b3IubmFtZSA9PT0gSW5uZXJEcml2ZXIubmFtZSlcbiAgICAgICAgLm1hcCgocykgPT4gcy5kcml2ZXJEYXRhKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBkYXR1bSBvZiBkYXRhKSB7XG4gICAgICBpZiAoIWRhdHVtKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgUHJvYmxlbSBnZXR0aW5nIHNlc3Npb24gZGF0YSBmb3IgZHJpdmVyIHR5cGUgYCArXG4gICAgICAgICAgICBgJHtJbm5lckRyaXZlci5uYW1lfTsgZG9lcyBpdCBpbXBsZW1lbnQgJ2dldCBkcml2ZXJEYXRhJz9gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWRcbiAgICovXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24oc2Vzc2lvbklkKSB7XG4gICAgbGV0IHByb3RvY29sO1xuICAgIHRyeSB7XG4gICAgICBsZXQgb3RoZXJTZXNzaW9uc0RhdGE7XG4gICAgICBjb25zdCBkc3RTZXNzaW9uID0gYXdhaXQgc2Vzc2lvbnNMaXN0R3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJDb25zdHJ1Y3Rvck5hbWUgPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF0uY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgb3RoZXJTZXNzaW9uc0RhdGEgPSBfLnRvUGFpcnModGhpcy5zZXNzaW9ucylcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKFtrZXksIHZhbHVlXSkgPT4gdmFsdWUuY29uc3RydWN0b3IubmFtZSA9PT0gY3VyQ29uc3RydWN0b3JOYW1lICYmIGtleSAhPT0gc2Vzc2lvbklkXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKFssIHZhbHVlXSkgPT4gdmFsdWUuZHJpdmVyRGF0YSk7XG4gICAgICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgICAgIHByb3RvY29sID0gZHN0U2Vzc2lvbi5wcm90b2NvbDtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgUmVtb3Zpbmcgc2Vzc2lvbiAke3Nlc3Npb25JZH0gZnJvbSBvdXIgbWFzdGVyIHNlc3Npb24gbGlzdGApO1xuICAgICAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGRlbGV0ZVNlc3Npb24gY29tcGxldGVzIHN1Y2Nlc3NmdWxseSBvciBub3RcbiAgICAgICAgLy8gbWFrZSB0aGUgc2Vzc2lvbiB1bmF2YWlsYWJsZSwgYmVjYXVzZSB3aG8ga25vd3Mgd2hhdCBzdGF0ZSBpdCBtaWdodFxuICAgICAgICAvLyBiZSBpbiBvdGhlcndpc2VcbiAgICAgICAgZGVsZXRlIHRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2Vzc2lvblBsdWdpbnNbc2Vzc2lvbklkXTtcbiAgICAgICAgcmV0dXJuIGRzdFNlc3Npb247XG4gICAgICB9KTtcbiAgICAgIC8vIHRoaXMgbWF5IG5vdCBiZSBjb3JyZWN0LCBidXQgaWYgYGRzdFNlc3Npb25gIHdhcyBmYWxzeSwgdGhlIGNhbGwgdG8gYGRlbGV0ZVNlc3Npb24oKWAgd291bGRcbiAgICAgIC8vIHRocm93IGFueXdheS5cbiAgICAgIGlmICghZHN0U2Vzc2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nlc3Npb24gbm90IGZvdW5kJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdmFsdWU6IGF3YWl0IGRzdFNlc3Npb24uZGVsZXRlU2Vzc2lvbihzZXNzaW9uSWQsIG90aGVyU2Vzc2lvbnNEYXRhKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoYEhhZCB0cm91YmxlIGVuZGluZyBzZXNzaW9uICR7c2Vzc2lvbklkfTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgZXJyb3I6IGUsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFsbFNlc3Npb25zKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHNlc3Npb25zQ291bnQgPSBfLnNpemUodGhpcy5zZXNzaW9ucyk7XG4gICAgaWYgKDAgPT09IHNlc3Npb25zQ291bnQpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdUaGVyZSBhcmUgbm8gYWN0aXZlIHNlc3Npb25zIGZvciBjbGVhbnVwJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge2ZvcmNlID0gZmFsc2UsIHJlYXNvbn0gPSBvcHRzO1xuICAgIHRoaXMubG9nLmRlYnVnKGBDbGVhbmluZyB1cCAke3V0aWwucGx1cmFsaXplKCdhY3RpdmUgc2Vzc2lvbicsIHNlc3Npb25zQ291bnQsIHRydWUpfWApO1xuICAgIGNvbnN0IGNsZWFudXBQcm9taXNlcyA9IGZvcmNlXG4gICAgICA/IF8udmFsdWVzKHRoaXMuc2Vzc2lvbnMpLm1hcCgoZHJ2KSA9PlxuICAgICAgICAgIGRydi5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihyZWFzb24gJiYgbmV3IEVycm9yKHJlYXNvbikpXG4gICAgICAgIClcbiAgICAgIDogXy5rZXlzKHRoaXMuc2Vzc2lvbnMpLm1hcCgoaWQpID0+IHRoaXMuZGVsZXRlU2Vzc2lvbihpZCkpO1xuICAgIGZvciAoY29uc3QgY2xlYW51cFByb21pc2Ugb2YgY2xlYW51cFByb21pc2VzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjbGVhbnVwUHJvbWlzZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYXBwcm9wcmlhdGUgcGx1Z2lucyBmb3IgYSBzZXNzaW9uIChvciBzZXNzaW9ubGVzcyBwbHVnaW5zKVxuICAgKlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IHNlc3Npb25JZCAtIHRoZSBzZXNzaW9uSWQgKG9yIG51bGwpIHRvIHVzZSB0byBmaW5kIHBsdWdpbnNcbiAgICogQHJldHVybnMge0FycmF5fSAtIGFycmF5IG9mIHBsdWdpbiBpbnN0YW5jZXNcbiAgICovXG4gIHBsdWdpbnNGb3JTZXNzaW9uKHNlc3Npb25JZCA9IG51bGwpIHtcbiAgICBpZiAoc2Vzc2lvbklkKSB7XG4gICAgICBpZiAoIXRoaXMuc2Vzc2lvblBsdWdpbnNbc2Vzc2lvbklkXSkge1xuICAgICAgICB0aGlzLnNlc3Npb25QbHVnaW5zW3Nlc3Npb25JZF0gPSB0aGlzLmNyZWF0ZVBsdWdpbkluc3RhbmNlcygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvblBsdWdpbnNbc2Vzc2lvbklkXTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMuc2Vzc2lvbmxlc3NQbHVnaW5zKSkge1xuICAgICAgdGhpcy5zZXNzaW9ubGVzc1BsdWdpbnMgPSB0aGlzLmNyZWF0ZVBsdWdpbkluc3RhbmNlcygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9ubGVzc1BsdWdpbnM7XG4gIH1cblxuICAvKipcbiAgICogVG8gZ2V0IHBsdWdpbnMgZm9yIGEgY29tbWFuZCwgd2UgZWl0aGVyIGdldCB0aGUgcGx1Z2luIGluc3RhbmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlXG4gICAqIHBhcnRpY3VsYXIgY29tbWFuZCdzIHNlc3Npb24sIG9yIGluIHRoZSBjYXNlIG9mIHNlc3Npb25sZXNzIHBsdWdpbnMsIHB1bGwgZnJvbSB0aGUgc2V0IG9mXG4gICAqIHBsdWdpbiBpbnN0YW5jZXMgcmVzZXJ2ZWQgZm9yIHNlc3Npb25sZXNzIGNvbW1hbmRzIChhbmQgd2UgbGF6aWx5IGNyZWF0ZSBwbHVnaW4gaW5zdGFuY2VzIG9uXG4gICAqIGZpcnN0IHVzZSlcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNtZCAtIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIHRvIGZpbmQgYSBwbHVnaW4gdG8gaGFuZGxlXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gc2Vzc2lvbklkIC0gdGhlIHBhcnRpY3VsYXIgc2Vzc2lvbiBmb3Igd2hpY2ggdG8gZmluZCBhIHBsdWdpbiwgb3IgbnVsbCBpZlxuICAgKiBzZXNzaW9ubGVzc1xuICAgKi9cbiAgcGx1Z2luc1RvSGFuZGxlQ21kKGNtZCwgc2Vzc2lvbklkID0gbnVsbCkge1xuICAgIC8vIHRvIGhhbmRsZSBhIGdpdmVuIGNvbW1hbmQsIGEgcGx1Z2luIHNob3VsZCBlaXRoZXIgaW1wbGVtZW50IHRoYXQgY29tbWFuZCBhcyBhIHBsdWdpblxuICAgIC8vIGluc3RhbmNlIG1ldGhvZCBvciBpdCBzaG91bGQgaW1wbGVtZW50IGEgZ2VuZXJpYyAnaGFuZGxlJyBtZXRob2RcbiAgICByZXR1cm4gdGhpcy5wbHVnaW5zRm9yU2Vzc2lvbihzZXNzaW9uSWQpLmZpbHRlcihcbiAgICAgIChwKSA9PiBfLmlzRnVuY3Rpb24ocFtjbWRdKSB8fCBfLmlzRnVuY3Rpb24ocC5oYW5kbGUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGluc3RhbmNlcyBvZiBhbGwgb2YgdGhlIGVuYWJsZWQgUGx1Z2luIGNsYXNzZXNcbiAgICogQHJldHVybnMge1BsdWdpbltdfVxuICAgKi9cbiAgY3JlYXRlUGx1Z2luSW5zdGFuY2VzKCkge1xuICAgIC8qKiBAdHlwZSB7UGx1Z2luW119ICovXG4gICAgY29uc3QgcGx1Z2luSW5zdGFuY2VzID0gW107XG4gICAgZm9yIChjb25zdCBbUGx1Z2luQ2xhc3MsIG5hbWVdIG9mIHRoaXMucGx1Z2luQ2xhc3Nlcy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaUFyZ3MgPSB0aGlzLmdldENsaUFyZ3NGb3JQbHVnaW4obmFtZSk7XG4gICAgICBjb25zdCBwbHVnaW4gPSBuZXcgUGx1Z2luQ2xhc3MobmFtZSwgY2xpQXJncyk7XG4gICAgICBwbHVnaW5JbnN0YW5jZXMucHVzaChwbHVnaW4pO1xuICAgIH1cbiAgICByZXR1cm4gcGx1Z2luSW5zdGFuY2VzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbWRcbiAgICogQHBhcmFtICB7Li4uYW55fSBhcmdzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHt2YWx1ZTogYW55LCBlcnJvcj86IEVycm9yLCBwcm90b2NvbDogc3RyaW5nfSB8IGltcG9ydCgndHlwZS1mZXN0JykuQXN5bmNSZXR1cm5UeXBlPERyaXZlclsnZXhlY3V0ZUNvbW1hbmQnXT4+fVxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQoY21kLCAuLi5hcmdzKSB7XG4gICAgLy8gV2UgaGF2ZSBiYXNpY2FsbHkgdGhyZWUgY2FzZXMgZm9yIGhvdyB0byBoYW5kbGUgY29tbWFuZHM6XG4gICAgLy8gMS4gaGFuZGxlIGdldFN0YXR1cyAod2UgZG8gdGhpcyBhcyBhIHNwZWNpYWwgb3V0IG9mIGJhbmQgY2FzZSBzbyBpdCBkb2Vzbid0IGdldCBhZGRlZCB0byBhblxuICAgIC8vICAgIGV4ZWN1dGlvbiBxdWV1ZSwgYW5kIGNhbiBiZSBjYWxsZWQgd2hpbGUgZS5nLiBjcmVhdGVTZXNzaW9uIGlzIGluIHByb2dyZXNzKVxuICAgIC8vIDIuIGhhbmRsZSBjb21tYW5kcyB0aGF0IHRoaXMgdW1icmVsbGEgZHJpdmVyIHNob3VsZCBoYW5kbGUsIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgc2Vzc2lvblxuICAgIC8vICAgIGRyaXZlciAoZm9yIGV4YW1wbGUsIGRlbGV0ZVNlc3Npb24sIG9yIG90aGVyIG5vbi1zZXNzaW9uIGNvbW1hbmRzKVxuICAgIC8vIDMuIGhhbmRsZSBzZXNzaW9uIGRyaXZlciBjb21tYW5kcy5cbiAgICAvLyBUaGUgdHJpY2t5IHBhcnQgaXMgdGhhdCBiZWNhdXNlIHdlIHN1cHBvcnQgY29tbWFuZCBwbHVnaW5zLCB3ZSBuZWVkIHRvIHdyYXAgYW55IG9mIHRoZXNlXG4gICAgLy8gY2FzZXMgd2l0aCBwbHVnaW4gaGFuZGxpbmcuXG5cbiAgICBjb25zdCBpc0dldFN0YXR1cyA9IGNtZCA9PT0gR0VUX1NUQVRVU19DT01NQU5EO1xuICAgIGNvbnN0IGlzVW1icmVsbGFDbWQgPSBpc0FwcGl1bURyaXZlckNvbW1hbmQoY21kKTtcbiAgICBjb25zdCBpc1Nlc3Npb25DbWQgPSBpc1Nlc3Npb25Db21tYW5kKGNtZCk7XG5cbiAgICAvLyBpZiBhIHBsdWdpbiBvdmVycmlkZSBwcm94eWluZyBmb3IgdGhpcyBjb21tYW5kIGFuZCB0aGF0IGlzIHdoeSB3ZSBhcmUgaGVyZSBpbnN0ZWFkIG9mIGp1c3RcbiAgICAvLyBsZXR0aW5nIHRoZSBwcm90b2NvbCBwcm94eSB0aGUgY29tbWFuZCBlbnRpcmVseSwgZGV0ZXJtaW5lIHRoYXQsIGdldCB0aGUgcmVxdWVzdCBvYmplY3QgZm9yXG4gICAgLy8gdXNlIGxhdGVyIG9uLCB0aGVuIGNsZWFuIHVwIHRoZSBhcmdzXG4gICAgY29uc3QgcmVxRm9yUHJveHkgPSBfLmxhc3QoYXJncyk/LnJlcUZvclByb3h5O1xuICAgIGlmIChyZXFGb3JQcm94eSkge1xuICAgICAgYXJncy5wb3AoKTtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCBkbyBzb21lIGVycm9yIGNoZWNraW5nLiBJZiB3ZSdyZSByZXF1ZXN0aW5nIGEgc2Vzc2lvbiBjb21tYW5kIGV4ZWN1dGlvbiwgdGhlbiBtYWtlXG4gICAgLy8gc3VyZSB0aGF0IHNlc3Npb24gYWN0dWFsbHkgZXhpc3RzIG9uIHRoZSBzZXNzaW9uIGRyaXZlciwgYW5kIHNldCB0aGUgc2Vzc2lvbiBkcml2ZXIgaXRzZWxmXG4gICAgbGV0IHNlc3Npb25JZCA9IG51bGw7XG4gICAgbGV0IGRzdFNlc3Npb24gPSBudWxsO1xuICAgIGxldCBwcm90b2NvbCA9IG51bGw7XG4gICAgLyoqIEB0eXBlIHt0aGlzIHwgRXh0ZXJuYWxEcml2ZXJ9ICovXG4gICAgbGV0IGRyaXZlciA9IHRoaXM7XG4gICAgaWYgKGlzU2Vzc2lvbkNtZCkge1xuICAgICAgc2Vzc2lvbklkID0gXy5sYXN0KGFyZ3MpO1xuICAgICAgZHN0U2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXTtcbiAgICAgIGlmICghZHN0U2Vzc2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZXNzaW9uIHdpdGggaWQgJyR7c2Vzc2lvbklkfScgZG9lcyBub3QgZXhpc3RgKTtcbiAgICAgIH1cbiAgICAgIC8vIG5vdyBzYXZlIHRoZSByZXNwb25zZSBwcm90b2NvbCBnaXZlbiB0aGF0IHRoZSBzZXNzaW9uIGRyaXZlcidzIHByb3RvY29sIG1pZ2h0IGRpZmZlclxuICAgICAgcHJvdG9jb2wgPSBkc3RTZXNzaW9uLnByb3RvY29sO1xuICAgICAgaWYgKCFpc1VtYnJlbGxhQ21kKSB7XG4gICAgICAgIGRyaXZlciA9IGRzdFNlc3Npb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZ2V0IGFueSBwbHVnaW5zIHdoaWNoIGFyZSByZWdpc3RlcmVkIGFzIGhhbmRsaW5nIHRoaXMgY29tbWFuZFxuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnNUb0hhbmRsZUNtZChjbWQsIHNlc3Npb25JZCk7XG5cbiAgICAvLyBub3cgd2UgZGVmaW5lIGEgJ2NtZEhhbmRsZWRCeScgb2JqZWN0IHdoaWNoIHdpbGwga2VlcCB0cmFjayBvZiB3aGljaCBwbHVnaW5zIGhhdmUgaGFuZGxlZCB0aGlzXG4gICAgLy8gY29tbWFuZC4gd2UgY2FyZSBhYm91dCB0aGlzIGJlY2F1c2UgKGEpIG11bHRpcGxlIHBsdWdpbnMgY2FuIGhhbmRsZSB0aGUgc2FtZSBjb21tYW5kLCBhbmRcbiAgICAvLyAoYikgdGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCBhIHBsdWdpbiB3aWxsIGFjdHVhbGx5IGNhbGwgdGhlIG5leHQoKSBtZXRob2Qgd2hpY2ggcnVucyB0aGVcbiAgICAvLyBvcmlnaW5hbCBjb21tYW5kIGV4ZWN1dGlvbi4gVGhpcyByZXN1bHRzIGluIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBjb21tYW5kIG1pZ2h0IGJlIGhhbmRsZWRcbiAgICAvLyBieSBzb21lIGJ1dCBub3QgYWxsIHBsdWdpbnMsIG9yIGJ5IHBsdWdpbihzKSBidXQgbm90IGJ5IHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBTbyBzdGFydCBvdXRcbiAgICAvLyB0aGlzIG9iamVjdCBkZWNsYXJpbmcgdGhhdCB0aGUgZGVmYXVsdCBoYW5kbGVyIGhhcyBub3QgYmVlbiBleGVjdXRlZC5cbiAgICBjb25zdCBjbWRIYW5kbGVkQnkgPSB7ZGVmYXVsdDogZmFsc2V9O1xuXG4gICAgLy8gbm93IHdlIGRlZmluZSBhbiBhc3luYyBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byBwbHVnaW5zLCBhbmQgc3VjY2Vzc2l2ZWx5IHdyYXBwZWRcbiAgICAvLyBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBsdWdpbiB0aGF0IGNhbiBoYW5kbGUgdGhlIGNvbW1hbmQuIFRvIHN0YXJ0IG9mZiB3aXRoLCB0aGUgYXN5bmNcbiAgICAvLyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGNhbGxpbmcgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIGkuZS4sIHdoaWNoZXZlciBvZiB0aGUgMyBjYXNlcyBhYm92ZSBpc1xuICAgIC8vIHRoZSBhcHByb3ByaWF0ZSBvbmVcbiAgICBjb25zdCBkZWZhdWx0QmVoYXZpb3IgPSBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBpZiB3ZSdyZSBydW5uaW5nIHdpdGggcGx1Z2lucywgbWFrZSBzdXJlIHdlIGxvZyB0aGF0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIGFjdHVhbGx5XG4gICAgICAvLyBoYXBwZW5pbmcgc28gd2UgY2FuIHRlbGwgd2hlbiB0aGUgcGx1Z2luIGNhbGwgY2hhaW4gaXMgdW53cmFwcGluZyB0byB0aGUgZGVmYXVsdCBiZWhhdmlvclxuICAgICAgLy8gaWYgdGhhdCdzIHdoYXQgaGFwcGVuc1xuICAgICAgcGx1Z2lucy5sZW5ndGggJiYgdGhpcy5sb2cuaW5mbyhgRXhlY3V0aW5nIGRlZmF1bHQgaGFuZGxpbmcgYmVoYXZpb3IgZm9yIGNvbW1hbmQgJyR7Y21kfSdgKTtcblxuICAgICAgLy8gaWYgd2UgbWFrZSBpdCBoZXJlLCB3ZSBrbm93IHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgaGFuZGxlZFxuICAgICAgY21kSGFuZGxlZEJ5LmRlZmF1bHQgPSB0cnVlO1xuXG4gICAgICBpZiAocmVxRm9yUHJveHkpIHtcbiAgICAgICAgLy8gd2Ugd291bGQgaGF2ZSBwcm94aWVkIHRoaXMgY29tbWFuZCBoYWQgYSBwbHVnaW4gbm90IGhhbmRsZWQgaXQsIHNvIHRoZSBkZWZhdWx0IGJlaGF2aW9yXG4gICAgICAgIC8vIGlzIHRvIGRvIHRoZSBwcm94eSBhbmQgcmV0cmlldmUgdGhlIHJlc3VsdCBpbnRlcm5hbGx5IHNvIGl0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIHBsdWdpblxuICAgICAgICAvLyBpbiBjYXNlIGl0IGNhbGxzICdhd2FpdCBuZXh0KCknLiBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIGRyaXZlciBoYXZlIGRlZmluZWRcbiAgICAgICAgLy8gJ3Byb3h5Q29tbWFuZCcgYW5kIG5vdCBqdXN0ICdwcm94eVJlcVJlcycuXG4gICAgICAgIGlmICghZHN0U2Vzc2lvbi5wcm94eUNvbW1hbmQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9Ecml2ZXJQcm94eUNvbW1hbmRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBkc3RTZXNzaW9uLnByb3h5Q29tbWFuZChcbiAgICAgICAgICByZXFGb3JQcm94eS5vcmlnaW5hbFVybCxcbiAgICAgICAgICByZXFGb3JQcm94eS5tZXRob2QsXG4gICAgICAgICAgcmVxRm9yUHJveHkuYm9keVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNHZXRTdGF0dXMpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1VtYnJlbGxhQ21kKSB7XG4gICAgICAgIC8vIHNvbWUgY29tbWFuZHMsIGxpa2UgZGVsZXRlU2Vzc2lvbiwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdG8gaGFuZGxlIG9uICp0aGlzKiBkcml2ZXIsXG4gICAgICAgIC8vIG5vdCB0aGUgcGxhdGZvcm0gZHJpdmVyXG4gICAgICAgIHJldHVybiBhd2FpdCBCYXNlRHJpdmVyLnByb3RvdHlwZS5leGVjdXRlQ29tbWFuZC5jYWxsKHRoaXMsIGNtZCwgLi4uYXJncyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGhlcmUgd2Uga25vdyB0aGF0IHdlIGFyZSBleGVjdXRpbmcgYSBzZXNzaW9uIGNvbW1hbmQsIGFuZCBoYXZlIGEgdmFsaWQgc2Vzc2lvbiBkcml2ZXJcbiAgICAgIHJldHVybiBhd2FpdCBkc3RTZXNzaW9uLmV4ZWN1dGVDb21tYW5kKGNtZCwgLi4uYXJncyk7XG4gICAgfTtcblxuICAgIC8vIG5vdyB0YWtlIG91ciBkZWZhdWx0IGJlaGF2aW9yLCB3cmFwIGl0IHdpdGggYW55IG51bWJlciBvZiBwbHVnaW4gYmVoYXZpb3JzLCBhbmQgcnVuIGl0XG4gICAgY29uc3Qgd3JhcHBlZENtZCA9IHRoaXMud3JhcENvbW1hbmRXaXRoUGx1Z2lucyh7XG4gICAgICBkcml2ZXIsXG4gICAgICBjbWQsXG4gICAgICBhcmdzLFxuICAgICAgcGx1Z2lucyxcbiAgICAgIGNtZEhhbmRsZWRCeSxcbiAgICAgIG5leHQ6IGRlZmF1bHRCZWhhdmlvcixcbiAgICB9KTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmV4ZWN1dGVXcmFwcGVkQ29tbWFuZCh7d3JhcHBlZENtZCwgcHJvdG9jb2x9KTtcblxuICAgIC8vIGlmIHdlIGhhZCBwbHVnaW5zLCBtYWtlIHN1cmUgdG8gbG9nIG91dCB0aGUgaGVscGZ1bCByZXBvcnQgYWJvdXQgd2hpY2ggcGx1Z2lucyBlbmRlZCB1cFxuICAgIC8vIGhhbmRsaW5nIHRoZSBjb21tYW5kIGFuZCB3aGljaCBkaWRuJ3RcbiAgICB0aGlzLmxvZ1BsdWdpbkhhbmRsZXJSZXBvcnQocGx1Z2lucywge2NtZCwgY21kSGFuZGxlZEJ5fSk7XG5cbiAgICAvLyBBbmQgZmluYWxseSwgaWYgdGhlIGNvbW1hbmQgd2FzIGNyZWF0ZVNlc3Npb24sIHdlIHdhbnQgdG8gbWlncmF0ZSBhbnkgcGx1Z2lucyB3aGljaCB3ZXJlXG4gICAgLy8gcHJldmlvdXNseSBzZXNzaW9ubGVzcyB0byB1c2UgdGhlIG5ldyBzZXNzaW9uSWQsIHNvIHRoYXQgcGx1Z2lucyBjYW4gc2hhcmUgc3RhdGUgYmV0d2VlblxuICAgIC8vIHRoZWlyIGNyZWF0ZVNlc3Npb24gbWV0aG9kIGFuZCBvdGhlciBpbnN0YW5jZSBtZXRob2RzXG4gICAgaWYgKGNtZCA9PT0gQ1JFQVRFX1NFU1NJT05fQ09NTUFORCAmJiB0aGlzLnNlc3Npb25sZXNzUGx1Z2lucy5sZW5ndGggJiYgIXJlcy5lcnJvcikge1xuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gXy5maXJzdChyZXMudmFsdWUpO1xuICAgICAgdGhpcy5sb2cuaW5mbyhcbiAgICAgICAgYFByb21vdGluZyAke3RoaXMuc2Vzc2lvbmxlc3NQbHVnaW5zLmxlbmd0aH0gc2Vzc2lvbmxlc3MgcGx1Z2lucyB0byBiZSBhdHRhY2hlZCBgICtcbiAgICAgICAgICBgdG8gc2Vzc2lvbiBJRCAke3Nlc3Npb25JZH1gXG4gICAgICApO1xuICAgICAgdGhpcy5zZXNzaW9uUGx1Z2luc1tzZXNzaW9uSWRdID0gdGhpcy5zZXNzaW9ubGVzc1BsdWdpbnM7XG4gICAgICB0aGlzLnNlc3Npb25sZXNzUGx1Z2lucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICB3cmFwQ29tbWFuZFdpdGhQbHVnaW5zKHtkcml2ZXIsIGNtZCwgYXJncywgbmV4dCwgY21kSGFuZGxlZEJ5LCBwbHVnaW5zfSkge1xuICAgIHBsdWdpbnMubGVuZ3RoICYmXG4gICAgICB0aGlzLmxvZy5pbmZvKGBQbHVnaW5zIHdoaWNoIGNhbiBoYW5kbGUgY21kICcke2NtZH0nOiAke3BsdWdpbnMubWFwKChwKSA9PiBwLm5hbWUpfWApO1xuXG4gICAgLy8gbm93IHdlIGNhbiBnbyB0aHJvdWdoIGVhY2ggcGx1Z2luIGFuZCB3cmFwIGBuZXh0YCBhcm91bmQgaXRzIG93biBoYW5kbGVyLCBwYXNzaW5nIHRoZSAqb2xkKlxuICAgIC8vIG5leHQgaW4gc28gdGhhdCBpdCBjYW4gY2FsbCBpdCBpZiBpdCB3YW50cyB0b1xuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMpIHtcbiAgICAgIC8vIG5lZWQgYW4gSUlGRSBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0aGUgdmFsdWUgb2YgbmV4dCB0aGF0J3MgcGFzc2VkIHRvIHBsdWdpbi5oYW5kbGUgdG8gYmVcbiAgICAgIC8vIGV4YWN0bHkgdGhlIHZhbHVlIG9mIG5leHQgaGVyZSBiZWZvcmUgcmVhc3NpZ25tZW50OyB3ZSBkb24ndCB3YW50IGl0IHRvIGJlIGxhemlseVxuICAgICAgLy8gZXZhbHVhdGVkLCBvdGhlcndpc2Ugd2UgZW5kIHVwIHdpdGggaW5maW5pdGUgcmVjdXJzaW9uIG9mIHRoZSBsYXN0IGBuZXh0YCB0byBiZSBkZWZpbmVkLlxuICAgICAgY21kSGFuZGxlZEJ5W3BsdWdpbi5uYW1lXSA9IGZhbHNlOyAvLyB3ZSBzZWUgYSBuZXcgcGx1Z2luLCBzbyBhZGQgaXQgdG8gdGhlICdjbWRIYW5kbGVkQnknIG9iamVjdFxuICAgICAgbmV4dCA9ICgoX25leHQpID0+IGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgUGx1Z2luICR7cGx1Z2luLm5hbWV9IGlzIG5vdyBoYW5kbGluZyBjbWQgJyR7Y21kfSdgKTtcbiAgICAgICAgY21kSGFuZGxlZEJ5W3BsdWdpbi5uYW1lXSA9IHRydWU7IC8vIGlmIHdlIG1ha2UgaXQgaGVyZSwgdGhpcyBwbHVnaW4gaGFzIGF0dGVtcHRlZCB0byBoYW5kbGUgY21kXG4gICAgICAgIC8vIGZpcnN0IGF0dGVtcHQgdG8gaGFuZGxlIHRoZSBjb21tYW5kIHZpYSBhIGNvbW1hbmQtc3BlY2lmaWMgaGFuZGxlciBvbiB0aGUgcGx1Z2luXG4gICAgICAgIGlmIChwbHVnaW5bY21kXSkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBwbHVnaW5bY21kXShfbmV4dCwgZHJpdmVyLCAuLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlcndpc2UsIGNhbGwgdGhlIGdlbmVyaWMgJ2hhbmRsZScgbWV0aG9kXG4gICAgICAgIHJldHVybiBhd2FpdCBwbHVnaW4uaGFuZGxlKF9uZXh0LCBkcml2ZXIsIGNtZCwgLi4uYXJncyk7XG4gICAgICB9KShuZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuXG4gIGxvZ1BsdWdpbkhhbmRsZXJSZXBvcnQocGx1Z2lucywge2NtZCwgY21kSGFuZGxlZEJ5fSkge1xuICAgIGlmICghcGx1Z2lucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBkYXksIHdlIGhhdmUgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB3aGljaCBwbHVnaW5zIGVuZGVkIHVwIGdldHRpbmdcbiAgICAvLyB0aGVpciBjb2RlIHJ1biBhcyBwYXJ0IG9mIGhhbmRsaW5nIHRoaXMgY29tbWFuZC4gQmVjYXVzZSBwbHVnaW5zIGNhbiBjaG9vc2UgKm5vdCogdG9cbiAgICAvLyBwYXNzIGNvbnRyb2wgdG8gb3RoZXIgcGx1Z2lucyBvciB0byB0aGUgZGVmYXVsdCBkcml2ZXIgYmVoYXZpb3IsIHRoaXMgaXMgaW5mb3JtYXRpb25cbiAgICAvLyB3aGljaCBpcyBwcm9iYWJseSB1c2VmdWwgdG8gdGhlIHVzZXIgKGVzcGVjaWFsbHkgaW4gc2l0dWF0aW9ucyB3aGVyZSBwbHVnaW5zIG1pZ2h0IG5vdFxuICAgIC8vIGludGVyYWN0IHdlbGwgdG9nZXRoZXIsIGFuZCBpdCB3b3VsZCBiZSBoYXJkIHRvIGRlYnVnIG90aGVyd2lzZSB3aXRob3V0IHRoaXMga2luZCBvZlxuICAgIC8vIG1lc3NhZ2UpLlxuICAgIGNvbnN0IGRpZEhhbmRsZSA9IE9iamVjdC5rZXlzKGNtZEhhbmRsZWRCeSkuZmlsdGVyKChrKSA9PiBjbWRIYW5kbGVkQnlba10pO1xuICAgIGNvbnN0IGRpZG50SGFuZGxlID0gT2JqZWN0LmtleXMoY21kSGFuZGxlZEJ5KS5maWx0ZXIoKGspID0+ICFjbWRIYW5kbGVkQnlba10pO1xuICAgIGlmIChkaWRudEhhbmRsZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKFxuICAgICAgICBgQ29tbWFuZCAnJHtjbWR9JyB3YXMgKm5vdCogaGFuZGxlZCBieSB0aGUgZm9sbG93aW5nIGJlaGF2aW91cnMgb3IgcGx1Z2lucywgZXZlbiBgICtcbiAgICAgICAgICBgdGhvdWdoIHRoZXkgd2VyZSByZWdpc3RlcmVkIHRvIGhhbmRsZSBpdDogJHtKU09OLnN0cmluZ2lmeShkaWRudEhhbmRsZSl9LiBUaGUgYCArXG4gICAgICAgICAgYGNvbW1hbmQgKndhcyogaGFuZGxlZCBieSB0aGVzZTogJHtKU09OLnN0cmluZ2lmeShkaWRIYW5kbGUpfS5gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVXcmFwcGVkQ29tbWFuZCh7d3JhcHBlZENtZCwgcHJvdG9jb2x9KSB7XG4gICAgbGV0IGNtZFJlcyxcbiAgICAgIGNtZEVycixcbiAgICAgIHJlcyA9IHt9O1xuICAgIHRyeSB7XG4gICAgICAvLyBBdCB0aGlzIHBvaW50LCBgd3JhcHBlZENtZGAgZGVmaW5lcyBhIHdob2xlIHNlcXVlbmNlIG9mIHBsdWdpbiBoYW5kbGVycywgY3VsbWluYXRpbmcgaW5cbiAgICAgIC8vIG91ciBkZWZhdWx0IGhhbmRsZXIuIFdoYXRldmVyIGl0IHJldHVybnMgaXMgd2hhdCB3ZSdyZSBnb2luZyB0byB3YW50IHRvIHNlbmQgYmFjayB0byB0aGVcbiAgICAgIC8vIHVzZXIuXG4gICAgICBjbWRSZXMgPSBhd2FpdCB3cmFwcGVkQ21kKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY21kRXJyID0gZTtcbiAgICB9XG5cbiAgICAvLyBTYWRseSwgd2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQga2luZCBvZiBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZC4gSXQgd2lsbCBlaXRoZXIgYmUgYSBiYXJlXG4gICAgLy8gb2JqZWN0LCBvciBhIHByb3RvY29sLWF3YXJlIG9iamVjdCB3aXRoIHByb3RvY29sIGFuZCBlcnJvci92YWx1ZSBrZXlzLiBTbyB3ZSBuZWVkIHRvIHNuaWZmXG4gICAgLy8gaXQgYW5kIG1ha2Ugc3VyZSB3ZSBkb24ndCBkb3VibGUtd3JhcCBpdCBpZiBpdCdzIHRoZSBsYXR0ZXIga2luZC5cbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGNtZFJlcykgJiYgXy5oYXMoY21kUmVzLCAncHJvdG9jb2wnKSkge1xuICAgICAgcmVzID0gY21kUmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMudmFsdWUgPSBjbWRSZXM7XG4gICAgICByZXMuZXJyb3IgPSBjbWRFcnI7XG4gICAgICByZXMucHJvdG9jb2wgPSBwcm90b2NvbDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByb3h5QWN0aXZlKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gJiYgXy5pc0Z1bmN0aW9uKGRzdFNlc3Npb24ucHJveHlBY3RpdmUpICYmIGRzdFNlc3Npb24ucHJveHlBY3RpdmUoc2Vzc2lvbklkKTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0KHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gPyBkc3RTZXNzaW9uLmdldFByb3h5QXZvaWRMaXN0KCkgOiBbXTtcbiAgfVxuXG4gIGNhblByb3h5KHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gJiYgZHN0U2Vzc2lvbi5jYW5Qcm94eShzZXNzaW9uSWQpO1xuICB9XG59XG5cbi8vIGhlbHAgZGVjaWRlIHdoaWNoIGNvbW1hbmRzIHNob3VsZCBiZSBwcm94aWVkIHRvIHN1Yi1kcml2ZXJzIGFuZCB3aGljaFxuLy8gc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhpcywgb3VyIHVtYnJlbGxhIGRyaXZlclxuZnVuY3Rpb24gaXNBcHBpdW1Ecml2ZXJDb21tYW5kKGNtZCkge1xuICByZXR1cm4gIWlzU2Vzc2lvbkNvbW1hbmQoY21kKSB8fCBjbWQgPT09IERFTEVURV9TRVNTSU9OX0NPTU1BTkQ7XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gQXBwaXVtIHRyaWVkIHRvIHByb3h5IGEgY29tbWFuZCB1c2luZyBhIGRyaXZlcidzIGBwcm94eUNvbW1hbmRgIG1ldGhvZCBidXQgdGhlXG4gKiBtZXRob2QgZGlkIG5vdCBleGlzdFxuICovXG5leHBvcnQgY2xhc3MgTm9Ecml2ZXJQcm94eUNvbW1hbmRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTxzdHJpbmc+fVxuICAgKi9cbiAgY29kZSA9ICdBUFBJVU1FUlJfTk9fRFJJVkVSX1BST1hZQ09NTUFORCc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBgVGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoaXMgY29tbWFuZCB3YXMgdG8gcHJveHksIGJ1dCB0aGUgZHJpdmVyIGAgK1xuICAgICAgICBgZGlkIG5vdCBoYXZlIHRoZSAncHJveHlDb21tYW5kJyBtZXRob2QgZGVmaW5lZC4gVG8gZnVsbHkgc3VwcG9ydCBgICtcbiAgICAgICAgYHBsdWdpbnMsIGRyaXZlcnMgc2hvdWxkIGhhdmUgJ3Byb3h5Q29tbWFuZCcgc2V0IHRvIGEgandwUHJveHkgb2JqZWN0J3MgYCArXG4gICAgICAgIGAnY29tbWFuZCgpJyBtZXRob2QsIGluIGFkZGl0aW9uIHRvIHRoZSBub3JtYWwgJ3Byb3h5UmVxUmVzJ2BcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCB7QXBwaXVtRHJpdmVyfTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRXh0ZXJuYWxEcml2ZXJ9IEV4dGVybmFsRHJpdmVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVyfSBEcml2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJDbGFzc30gRHJpdmVyQ2xhc3NcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5XM0NDYXBhYmlsaXRpZXN9IFczQ0NhcGFiaWxpdGllc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlckRhdGF9IERyaXZlckRhdGFcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5TZXJ2ZXJBcmdzfSBEcml2ZXJPcHRzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ29uc3RyYWludHN9IENvbnN0cmFpbnRzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBwaXVtU2VydmVyfSBBcHBpdW1TZXJ2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2V4dGVuc2lvbi9kcml2ZXItY29uZmlnJykuRHJpdmVyQ29uZmlnfSBEcml2ZXJDb25maWdcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5QbHVnaW59IFBsdWdpblxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlBsdWdpbkNsYXNzfSBQbHVnaW5DbGFzc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlBsdWdpblR5cGV9IFBsdWdpblR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJUeXBlfSBEcml2ZXJUeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuU2Vzc2lvbkhhbmRsZXI8U2Vzc2lvbkhhbmRsZXJSZXN1bHQ8YW55W10+LFNlc3Npb25IYW5kbGVyUmVzdWx0PHZvaWQ+Pn0gU2Vzc2lvbkhhbmRsZXJcbiAqL1xuXG4vKipcbiAqIFVzZWQgYnkge0BsaW5rY29kZSBBcHBpdW1Ecml2ZXIuY3JlYXRlU2Vzc2lvbn0gYW5kIHtAbGlua2NvZGUgQXBwaXVtRHJpdmVyLmRlbGV0ZVNlc3Npb259IHRvIGRlc2NyaWJlXG4gKiByZXN1bHQuXG4gKiBAdGVtcGxhdGUgVlxuICogQHR5cGVkZWYgU2Vzc2lvbkhhbmRsZXJSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7Vn0gW3ZhbHVlXVxuICogQHByb3BlcnR5IHtFcnJvcn0gW2Vycm9yXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwcm90b2NvbF1cbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQVNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQU1BLE1BQU1BLDRCQUE0QixHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBYztFQUNqREMsY0FBYyxFQUFFO0lBQ2RDLFFBQVEsRUFBRSxJQURJO0lBRWRDLFFBQVEsRUFBRTtFQUZJLENBRGlDO0VBS2pEQyxZQUFZLEVBQUU7SUFDWkYsUUFBUSxFQUFFLElBREU7SUFFWkMsUUFBUSxFQUFFO0VBRkU7QUFMbUMsQ0FBZCxDQUFyQztBQVdB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
|
|
584
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzIiwiT2JqZWN0IiwiZnJlZXplIiwiYXV0b21hdGlvbk5hbWUiLCJwcmVzZW5jZSIsImlzU3RyaW5nIiwicGxhdGZvcm1OYW1lIiwic2Vzc2lvbnNMaXN0R3VhcmQiLCJBc3luY0xvY2siLCJwZW5kaW5nRHJpdmVyc0d1YXJkIiwiQXBwaXVtRHJpdmVyIiwiRHJpdmVyQ29yZSIsInNlc3Npb25zIiwicGVuZGluZ0RyaXZlcnMiLCJuZXdDb21tYW5kVGltZW91dE1zIiwicGx1Z2luQ2xhc3NlcyIsInNlc3Npb25QbHVnaW5zIiwic2Vzc2lvbmxlc3NQbHVnaW5zIiwiZHJpdmVyQ29uZmlnIiwic2VydmVyIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiYXJncyIsImNvbnN0cnVjdG9yIiwib3B0cyIsInRtcERpciIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fVE1QX0RJUiIsInVwZGF0ZUJ1aWxkSW5mbyIsImUiLCJsb2ciLCJkZWJ1ZyIsIm1lc3NhZ2UiLCJfbG9nIiwiaW5zdGFuY2VOYW1lIiwibmFtZSIsIm5vZGUiLCJnZXRPYmplY3RJZCIsInN1YnN0cmluZyIsImxvZ2dlciIsImdldExvZ2dlciIsImlzQ29tbWFuZHNRdWV1ZUVuYWJsZWQiLCJzZXNzaW9uRXhpc3RzIiwic2Vzc2lvbklkIiwiZHN0U2Vzc2lvbiIsImRyaXZlckZvclNlc3Npb24iLCJnZXRTdGF0dXMiLCJidWlsZCIsIl8iLCJjbG9uZSIsImdldEJ1aWxkSW5mbyIsImdldFNlc3Npb25zIiwidG9QYWlycyIsIm1hcCIsImlkIiwiZHJpdmVyIiwiY2FwYWJpbGl0aWVzIiwiY2FwcyIsInByaW50TmV3U2Vzc2lvbkFubm91bmNlbWVudCIsImRyaXZlck5hbWUiLCJkcml2ZXJWZXJzaW9uIiwiZHJpdmVyQmFzZVZlcnNpb24iLCJpbmZvIiwiQVBQSVVNX1ZFUiIsImJhc2VWZXJzaW9uIiwiZ2V0Q2xpQXJnc0ZvclBsdWdpbiIsImV4dE5hbWUiLCJwbHVnaW4iLCJnZXRDbGlBcmdzRm9yRHJpdmVyIiwiYWxsQ2xpQXJnc0ZvckV4dCIsImlzRW1wdHkiLCJkZWZhdWx0cyIsImdldERlZmF1bHRzRm9yRXh0ZW5zaW9uIiwiRFJJVkVSX1RZUEUiLCJjbGlBcmdzIiwib21pdEJ5IiwidmFsdWUiLCJrZXkiLCJpc0VxdWFsIiwiY3JlYXRlU2Vzc2lvbiIsImpzb253cENhcHMiLCJyZXFDYXBzIiwidzNjQ2FwYWJpbGl0aWVzIiwiZHJpdmVyRGF0YSIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJjbG9uZURlZXAiLCJkZWZhdWx0U2V0dGluZ3MiLCJwdWxsU2V0dGluZ3MiLCJqd3BTZXR0aW5ncyIsInczY1NldHRpbmdzIiwiYWx3YXlzTWF0Y2giLCJmaXJzdE1hdGNoRW50cnkiLCJmaXJzdE1hdGNoIiwiYXNzaWduIiwicHJvdG9jb2wiLCJpbm5lclNlc3Npb25JZCIsImRDYXBzIiwicGFyc2VkQ2FwcyIsInBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyIiwiZGVzaXJlZENhcHMiLCJwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMiLCJwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMiLCJlcnJvciIsIklubmVyRHJpdmVyIiwidmVyc2lvbiIsImZpbmRNYXRjaGluZ0RyaXZlciIsInNlc3Npb25PdmVycmlkZSIsImRlbGV0ZUFsbFNlc3Npb25zIiwicnVubmluZ0RyaXZlcnNEYXRhIiwib3RoZXJQZW5kaW5nRHJpdmVyc0RhdGEiLCJkcml2ZXJJbnN0YW5jZSIsInJlbGF4ZWRTZWN1cml0eUVuYWJsZWQiLCJkZW55SW5zZWN1cmUiLCJhIiwiYWxsb3dJbnNlY3VyZSIsInNlcnZlckhvc3QiLCJhZGRyZXNzIiwic2VydmVyUG9ydCIsInBvcnQiLCJzZXJ2ZXJQYXRoIiwiYmFzZVBhdGgiLCJjdXJTZXNzaW9uRGF0YUZvckRyaXZlciIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJhY3F1aXJlIiwiY29tcGFjdCIsImRydiIsInB1c2giLCJwdWxsIiwiYXR0YWNoVW5leHBlY3RlZFNodXRkb3duSGFuZGxlciIsInN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQiLCJpc1czQ1Byb3RvY29sIiwiSlNPTiIsInN0cmluZ2lmeSIsInVwZGF0ZVNldHRpbmdzIiwiaXNNanNvbndwUHJvdG9jb2wiLCJvblNodXRkb3duIiwiY2F1c2UiLCJFcnJvciIsIndhcm4iLCJpc0Z1bmN0aW9uIiwib25VbmV4cGVjdGVkU2h1dGRvd24iLCJkYXRhIiwidmFsdWVzIiwiZmlsdGVyIiwicyIsImRhdHVtIiwiZGVsZXRlU2Vzc2lvbiIsIm90aGVyU2Vzc2lvbnNEYXRhIiwiY3VyQ29uc3RydWN0b3JOYW1lIiwic2Vzc2lvbnNDb3VudCIsInNpemUiLCJmb3JjZSIsInJlYXNvbiIsInV0aWwiLCJwbHVyYWxpemUiLCJjbGVhbnVwUHJvbWlzZXMiLCJzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biIsImtleXMiLCJjbGVhbnVwUHJvbWlzZSIsInBsdWdpbnNGb3JTZXNzaW9uIiwiY3JlYXRlUGx1Z2luSW5zdGFuY2VzIiwicGx1Z2luc1RvSGFuZGxlQ21kIiwiY21kIiwicCIsImhhbmRsZSIsInBsdWdpbkluc3RhbmNlcyIsIlBsdWdpbkNsYXNzIiwiZW50cmllcyIsImV4ZWN1dGVDb21tYW5kIiwiaXNHZXRTdGF0dXMiLCJHRVRfU1RBVFVTX0NPTU1BTkQiLCJpc1VtYnJlbGxhQ21kIiwiaXNBcHBpdW1Ecml2ZXJDb21tYW5kIiwiaXNTZXNzaW9uQ21kIiwiaXNTZXNzaW9uQ29tbWFuZCIsInJlcUZvclByb3h5IiwibGFzdCIsInBvcCIsInBsdWdpbnMiLCJjbWRIYW5kbGVkQnkiLCJkZWZhdWx0IiwiZGVmYXVsdEJlaGF2aW9yIiwibGVuZ3RoIiwicHJveHlDb21tYW5kIiwiTm9Ecml2ZXJQcm94eUNvbW1hbmRFcnJvciIsIm9yaWdpbmFsVXJsIiwibWV0aG9kIiwiYm9keSIsIkJhc2VEcml2ZXIiLCJwcm90b3R5cGUiLCJjYWxsIiwid3JhcHBlZENtZCIsIndyYXBDb21tYW5kV2l0aFBsdWdpbnMiLCJuZXh0IiwicmVzIiwiZXhlY3V0ZVdyYXBwZWRDb21tYW5kIiwibG9nUGx1Z2luSGFuZGxlclJlcG9ydCIsIkNSRUFURV9TRVNTSU9OX0NPTU1BTkQiLCJmaXJzdCIsIl9uZXh0IiwiZGlkSGFuZGxlIiwiayIsImRpZG50SGFuZGxlIiwiY21kUmVzIiwiY21kRXJyIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsIkRFTEVURV9TRVNTSU9OX0NPTU1BTkQiLCJjb2RlIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2FwcGl1bS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7Z2V0QnVpbGRJbmZvLCB1cGRhdGVCdWlsZEluZm8sIEFQUElVTV9WRVJ9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7XG4gIEJhc2VEcml2ZXIsXG4gIERyaXZlckNvcmUsXG4gIGVycm9ycyxcbiAgaXNTZXNzaW9uQ29tbWFuZCxcbiAgQ1JFQVRFX1NFU1NJT05fQ09NTUFORCxcbiAgREVMRVRFX1NFU1NJT05fQ09NTUFORCxcbiAgR0VUX1NUQVRVU19DT01NQU5ELFxufSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQge3BhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyLCBwdWxsU2V0dGluZ3N9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHt1dGlsLCBub2RlLCBsb2dnZXJ9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQge2dldERlZmF1bHRzRm9yRXh0ZW5zaW9ufSBmcm9tICcuL3NjaGVtYSc7XG5pbXBvcnQge0RSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRX0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEludmFyaWFudCBzZXQgb2YgYmFzZSBjb25zdHJhaW50c1xuICogQHR5cGUge1JlYWRvbmx5PENvbnN0cmFpbnRzPn1cbiAqL1xuY29uc3QgZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cyA9IE9iamVjdC5mcmVlemUoe1xuICBhdXRvbWF0aW9uTmFtZToge1xuICAgIHByZXNlbmNlOiB0cnVlLFxuICAgIGlzU3RyaW5nOiB0cnVlLFxuICB9LFxuICBwbGF0Zm9ybU5hbWU6IHtcbiAgICBwcmVzZW5jZTogdHJ1ZSxcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgfSxcbn0pO1xuXG5jb25zdCBzZXNzaW9uc0xpc3RHdWFyZCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IHBlbmRpbmdEcml2ZXJzR3VhcmQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbi8qKlxuICogQGltcGxlbWVudHMge1Nlc3Npb25IYW5kbGVyfVxuICovXG5jbGFzcyBBcHBpdW1Ecml2ZXIgZXh0ZW5kcyBEcml2ZXJDb3JlIHtcbiAgLyoqXG4gICAqIEFjY2VzcyB0byBzZXNzaW9ucyBsaXN0IG11c3QgYmUgZ3VhcmRlZCB3aXRoIGEgU2VtYXBob3JlLCBiZWNhdXNlXG4gICAqIGl0IG1pZ2h0IGJlIGNoYW5nZWQgYnkgb3RoZXIgYXN5bmMgY2FsbHMgYXQgYW55IHRpbWVcbiAgICogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFjY2VzcyB0aGlzIHByb3BlcnR5IGRpcmVjdGx5IGZyb20gdGhlIG91dHNpZGVcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsRXh0ZXJuYWxEcml2ZXI+fVxuICAgKi9cbiAgc2Vzc2lvbnMgPSB7fTtcblxuICAvKipcbiAgICogQWNjZXNzIHRvIHBlbmRpbmcgZHJpdmVycyBsaXN0IG11c3QgYmUgZ3VhcmRlZCB3aXRoIGEgU2VtYXBob3JlLCBiZWNhdXNlXG4gICAqIGl0IG1pZ2h0IGJlIGNoYW5nZWQgYnkgb3RoZXIgYXN5bmMgY2FsbHMgYXQgYW55IHRpbWVcbiAgICogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFjY2VzcyB0aGlzIHByb3BlcnR5IGRpcmVjdGx5IGZyb20gdGhlIG91dHNpZGVcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsRXh0ZXJuYWxEcml2ZXJbXT59XG4gICAqL1xuICBwZW5kaW5nRHJpdmVycyA9IHt9O1xuXG4gIC8qKlxuICAgKiBOb3RlIHRoYXQge0BsaW5rY29kZSBBcHBpdW1Ecml2ZXJ9IGhhcyBubyBgbmV3Q29tbWFuZFRpbWVvdXRgIG1ldGhvZC5cbiAgICogYEFwcGl1bURyaXZlcmAgZG9lcyBub3Qgc2V0IGFuZCBvYnNlcnZlIGl0cyBvd24gdGltZW91dHM7IGluZGl2aWR1YWxcbiAgICogc2Vzc2lvbnMgKG1hbmFnZWQgZHJpdmVycykgZG8gaW5zdGVhZC5cbiAgICovXG4gIG5ld0NvbW1hbmRUaW1lb3V0TXMgPSAwO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGFjdGl2ZSBwbHVnaW5zXG4gICAqIEB0eXBlIHtNYXA8UGx1Z2luQ2xhc3Msc3RyaW5nPn1cbiAgICovXG4gIHBsdWdpbkNsYXNzZXM7XG5cbiAgLyoqXG4gICAqIG1hcCBvZiBzZXNzaW9ucyB0byBhY3R1YWwgcGx1Z2luIGluc3RhbmNlcyBwZXIgc2Vzc2lvblxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxJbnN0YW5jZVR5cGU8UGx1Z2luQ2xhc3M+W10+fVxuICAgKi9cbiAgc2Vzc2lvblBsdWdpbnMgPSB7fTtcblxuICAvKipcbiAgICogc29tZSBjb21tYW5kcyBhcmUgc2Vzc2lvbmxlc3MsIHNvIHdlIG5lZWQgYSBzZXQgb2YgcGx1Z2lucyBmb3IgdGhlbVxuICAgKiBAdHlwZSB7SW5zdGFuY2VUeXBlPFBsdWdpbkNsYXNzPltdfVxuICAgKi9cbiAgc2Vzc2lvbmxlc3NQbHVnaW5zID0gW107XG5cbiAgLyoqIEB0eXBlIHtEcml2ZXJDb25maWd9ICovXG4gIGRyaXZlckNvbmZpZztcblxuICAvKiogQHR5cGUge0FwcGl1bVNlcnZlcn0gKi9cbiAgc2VydmVyO1xuXG4gIGRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBhYmlsaXR5Q29uc3RyYWludHM7XG5cbiAgLyoqIEB0eXBlIHtEcml2ZXJPcHRzfSAqL1xuICBhcmdzO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0RyaXZlck9wdHN9IG9wdHNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAvLyBJdCBpcyBuZWNlc3NhcnkgdG8gc2V0IGAtLXRtcGAgaGVyZSBzaW5jZSBpdCBzaG91bGQgYmUgc2V0IHRvXG4gICAgLy8gcHJvY2Vzcy5lbnYuQVBQSVVNX1RNUF9ESVIgb25jZSBhdCBhbiBpbml0aWFsIHBvaW50IGluIHRoZSBBcHBpdW0gbGlmZWN5Y2xlLlxuICAgIC8vIFRoZSBwcm9jZXNzIGFyZ3VtZW50IHdpbGwgYmUgcmVmZXJlbmNlZCBieSBCYXNlRHJpdmVyLlxuICAgIC8vIFBsZWFzZSBjYWxsIEBhcHBpdW0vc3VwcG9ydC50ZW1wRGlyIG1vZHVsZSB0byBhcHBseSB0aGlzIGJlbmVmaXQuXG4gICAgaWYgKG9wdHMudG1wRGlyKSB7XG4gICAgICBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUiA9IG9wdHMudG1wRGlyO1xuICAgIH1cblxuICAgIHN1cGVyKG9wdHMpO1xuXG4gICAgdGhpcy5hcmdzID0gey4uLm9wdHN9O1xuXG4gICAgLy8gYWxsb3cgdGhpcyB0byBoYXBwZW4gaW4gdGhlIGJhY2tncm91bmQsIHNvIG5vIGBhd2FpdGBcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdXBkYXRlQnVpbGRJbmZvKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBjYXRjaCBhbnkgcG9zc2libGUgZXJyb3JzIHRvIGF2b2lkIHVuaGFuZGxlZCByZWplY3Rpb25zXG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBDYW5ub3QgZmV0Y2ggQXBwaXVtIGJ1aWxkIGluZm86ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH0pKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGxvZ2dlciBpbnN0YW5jZSBmb3IgdGhlIGN1cnJlbnQgdW1icmVsbGEgZHJpdmVyIGluc3RhbmNlXG4gICAqL1xuICBnZXQgbG9nKCkge1xuICAgIGlmICghdGhpcy5fbG9nKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZU5hbWUgPSBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9QCR7bm9kZS5nZXRPYmplY3RJZCh0aGlzKS5zdWJzdHJpbmcoMCwgNCl9YDtcbiAgICAgIHRoaXMuX2xvZyA9IGxvZ2dlci5nZXRMb2dnZXIoaW5zdGFuY2VOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2xvZztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgY29tbWFuZHMgcXVldWVpbmcgZm9yIHRoZSB1bWJyZWxsYSBBcHBpdW0gZHJpdmVyXG4gICAqL1xuICBnZXQgaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzZXNzaW9uRXhpc3RzKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gJiYgZHN0U2Vzc2lvbi5zZXNzaW9uSWQgIT09IG51bGw7XG4gIH1cblxuICBkcml2ZXJGb3JTZXNzaW9uKHNlc3Npb25JZCkge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuICBhc3luYyBnZXRTdGF0dXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1aWxkOiBfLmNsb25lKGdldEJ1aWxkSW5mbygpKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbiAgYXN5bmMgZ2V0U2Vzc2lvbnMoKSB7XG4gICAgcmV0dXJuIF8udG9QYWlycyh0aGlzLnNlc3Npb25zKS5tYXAoKFtpZCwgZHJpdmVyXSkgPT4gKHtcbiAgICAgIGlkLFxuICAgICAgY2FwYWJpbGl0aWVzOiBkcml2ZXIuY2FwcyxcbiAgICB9KSk7XG4gIH1cblxuICBwcmludE5ld1Nlc3Npb25Bbm5vdW5jZW1lbnQoZHJpdmVyTmFtZSwgZHJpdmVyVmVyc2lvbiwgZHJpdmVyQmFzZVZlcnNpb24pIHtcbiAgICB0aGlzLmxvZy5pbmZvKFxuICAgICAgZHJpdmVyVmVyc2lvblxuICAgICAgICA/IGBBcHBpdW0gdiR7QVBQSVVNX1ZFUn0gY3JlYXRpbmcgbmV3ICR7ZHJpdmVyTmFtZX0gKHYke2RyaXZlclZlcnNpb259KSBzZXNzaW9uYFxuICAgICAgICA6IGBBcHBpdW0gdiR7QVBQSVVNX1ZFUn0gY3JlYXRpbmcgbmV3ICR7ZHJpdmVyTmFtZX0gc2Vzc2lvbmBcbiAgICApO1xuICAgIHRoaXMubG9nLmluZm8oYENoZWNraW5nIEJhc2VEcml2ZXIgdmVyc2lvbnMgZm9yIEFwcGl1bSBhbmQgJHtkcml2ZXJOYW1lfWApO1xuICAgIHRoaXMubG9nLmluZm8oXG4gICAgICBBcHBpdW1Ecml2ZXIuYmFzZVZlcnNpb25cbiAgICAgICAgPyBgQXBwaXVtJ3MgQmFzZURyaXZlciB2ZXJzaW9uIGlzICR7QXBwaXVtRHJpdmVyLmJhc2VWZXJzaW9ufWBcbiAgICAgICAgOiBgQ291bGQgbm90IGRldGVybWluZSBBcHBpdW0ncyBCYXNlRHJpdmVyIHZlcnNpb25gXG4gICAgKTtcbiAgICB0aGlzLmxvZy5pbmZvKFxuICAgICAgZHJpdmVyQmFzZVZlcnNpb25cbiAgICAgICAgPyBgJHtkcml2ZXJOYW1lfSdzIEJhc2VEcml2ZXIgdmVyc2lvbiBpcyAke2RyaXZlckJhc2VWZXJzaW9ufWBcbiAgICAgICAgOiBgQ291bGQgbm90IGRldGVybWluZSAke2RyaXZlck5hbWV9J3MgQmFzZURyaXZlciB2ZXJzaW9uYFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCBDTEkgYXJndW1lbnRzIGZvciBhIHNwZWNpZmljIHBsdWdpbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBQbHVnaW4gbmFtZVxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZyx1bmtub3duPn0gQXJndW1lbnRzIG9iamVjdC4gSWYgbm9uZSwgYW4gZW1wdHkgb2JqZWN0LlxuICAgKi9cbiAgZ2V0Q2xpQXJnc0ZvclBsdWdpbihleHROYW1lKSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZyx1bmtub3duPn0gKi8gKHRoaXMuYXJncy5wbHVnaW4/LltleHROYW1lXSA/PyB7fSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIENMSSBhcmdzIGZvciBhIHNwZWNpZmljIGRyaXZlci5cbiAgICpcbiAgICogX0FueSBhcmcgd2hpY2ggaXMgZXF1YWwgdG8gaXRzIGRlZmF1bHQgdmFsdWUgd2lsbCBub3QgYmUgcHJlc2VudCBpbiB0aGUgcmV0dXJuZWQgb2JqZWN0Ll9cbiAgICpcbiAgICogX05vdGUgdGhhdCB0aGlzIGJlaGF2aW9yIGN1cnJlbnRseSAoTWF5IDE4IDIwMjIpIGRpZmZlcnMgZnJvbSBob3cgcGx1Z2lucyBhcmUgaGFuZGxlZF8gKHNlZSB7QGxpbmtjb2RlIEFwcGl1bURyaXZlci5nZXRDbGlBcmdzRm9yUGx1Z2lufSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gRHJpdmVyIG5hbWVcbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsdW5rbm93bj58dW5kZWZpbmVkfSBBcmd1bWVudHMgb2JqZWN0LiBJZiBub25lLCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgZ2V0Q2xpQXJnc0ZvckRyaXZlcihleHROYW1lKSB7XG4gICAgY29uc3QgYWxsQ2xpQXJnc0ZvckV4dCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZyx1bmtub3duPnx1bmRlZmluZWR9ICovIChcbiAgICAgIHRoaXMuYXJncy5kcml2ZXI/LltleHROYW1lXVxuICAgICk7XG5cbiAgICBpZiAoIV8uaXNFbXB0eShhbGxDbGlBcmdzRm9yRXh0KSkge1xuICAgICAgY29uc3QgZGVmYXVsdHMgPSBnZXREZWZhdWx0c0ZvckV4dGVuc2lvbihEUklWRVJfVFlQRSwgZXh0TmFtZSk7XG4gICAgICBjb25zdCBjbGlBcmdzID0gXy5pc0VtcHR5KGRlZmF1bHRzKVxuICAgICAgICA/IGFsbENsaUFyZ3NGb3JFeHRcbiAgICAgICAgOiBfLm9taXRCeShhbGxDbGlBcmdzRm9yRXh0LCAodmFsdWUsIGtleSkgPT4gXy5pc0VxdWFsKGRlZmF1bHRzW2tleV0sIHZhbHVlKSk7XG4gICAgICBpZiAoIV8uaXNFbXB0eShjbGlBcmdzKSkge1xuICAgICAgICByZXR1cm4gY2xpQXJncztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IHNlc3Npb25cbiAgICogQHBhcmFtIHtXM0NDYXBhYmlsaXRpZXN9IGpzb253cENhcHMgSlNPTldQIGZvcm1hdHRlZCBkZXNpcmVkIGNhcGFiaWxpdGllc1xuICAgKiBAcGFyYW0ge1czQ0NhcGFiaWxpdGllc30gcmVxQ2FwcyBSZXF1aXJlZCBjYXBhYmlsaXRpZXMgKEpTT05XUCBzdGFuZGFyZClcbiAgICogQHBhcmFtIHtXM0NDYXBhYmlsaXRpZXN9IHczY0NhcGFiaWxpdGllcyBXM0MgY2FwYWJpbGl0aWVzXG4gICAqIEBwYXJhbSB7RHJpdmVyRGF0YVtdfSBbZHJpdmVyRGF0YV1cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24oanNvbndwQ2FwcywgcmVxQ2FwcywgdzNjQ2FwYWJpbGl0aWVzLCBkcml2ZXJEYXRhKSB7XG4gICAgY29uc3QgZGVmYXVsdENhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKHRoaXMuYXJncy5kZWZhdWx0Q2FwYWJpbGl0aWVzKTtcbiAgICBjb25zdCBkZWZhdWx0U2V0dGluZ3MgPSBwdWxsU2V0dGluZ3MoZGVmYXVsdENhcGFiaWxpdGllcyk7XG4gICAganNvbndwQ2FwcyA9IF8uY2xvbmVEZWVwKGpzb253cENhcHMpO1xuICAgIGNvbnN0IGp3cFNldHRpbmdzID0gey4uLmRlZmF1bHRTZXR0aW5ncywgLi4ucHVsbFNldHRpbmdzKGpzb253cENhcHMpfTtcbiAgICB3M2NDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcCh3M2NDYXBhYmlsaXRpZXMpO1xuICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGNsaWVudCBvbmx5IHByb3ZpZGVzIGNhcHMgdXNpbmcgSlNPTldQIHN0YW5kYXJkLFxuICAgIC8vIGFsdGhvdWdoIGZpcnN0TWF0Y2gvYWx3YXlzTWF0Y2ggcHJvcGVydGllcyBhcmUgc3RpbGwgcHJlc2VudC5cbiAgICAvLyBJbiBzdWNoIGNhc2Ugd2UgYXNzdW1lIHRoZSBjbGllbnQgdW5kZXJzdGFuZHMgVzNDIHByb3RvY29sIGFuZCBtZXJnZSB0aGUgZ2l2ZW5cbiAgICAvLyBKU09OV1AgY2FwcyB0byBXM0MgY2Fwc1xuICAgIGNvbnN0IHczY1NldHRpbmdzID0ge1xuICAgICAgLi4uandwU2V0dGluZ3MsXG4gICAgICAuLi5wdWxsU2V0dGluZ3MoKHczY0NhcGFiaWxpdGllcyA/PyB7fSkuYWx3YXlzTWF0Y2ggPz8ge30pLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBmaXJzdE1hdGNoRW50cnkgb2YgKHczY0NhcGFiaWxpdGllcyA/PyB7fSkuZmlyc3RNYXRjaCA/PyBbXSkge1xuICAgICAgT2JqZWN0LmFzc2lnbih3M2NTZXR0aW5ncywgcHVsbFNldHRpbmdzKGZpcnN0TWF0Y2hFbnRyeSkpO1xuICAgIH1cblxuICAgIGxldCBwcm90b2NvbDtcbiAgICBsZXQgaW5uZXJTZXNzaW9uSWQsIGRDYXBzO1xuICAgIHRyeSB7XG4gICAgICAvLyBQYXJzZSB0aGUgY2FwcyBpbnRvIGEgZm9ybWF0IHRoYXQgdGhlIElubmVyRHJpdmVyIHdpbGwgYWNjZXB0XG4gICAgICBjb25zdCBwYXJzZWRDYXBzID0gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIoXG4gICAgICAgIGpzb253cENhcHMsXG4gICAgICAgIHczY0NhcGFiaWxpdGllcyxcbiAgICAgICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMsXG4gICAgICAgIGRlZmF1bHRDYXBhYmlsaXRpZXNcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHtkZXNpcmVkQ2FwcywgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLCBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXN9ID1cbiAgICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vdXRpbHMnKS5QYXJzZWREcml2ZXJDYXBzfSAqLyAocGFyc2VkQ2Fwcyk7XG4gICAgICBwcm90b2NvbCA9IHBhcnNlZENhcHMucHJvdG9jb2w7XG4gICAgICBjb25zdCBlcnJvciA9IC8qKiBAdHlwZSB7aW1wb3J0KCcuL3V0aWxzJykuSW52YWxpZENhcHN9ICovIChwYXJzZWRDYXBzKS5lcnJvcjtcbiAgICAgIC8vIElmIHRoZSBwYXJzaW5nIG9mIHRoZSBjYXBzIHByb2R1Y2VkIGFuIGVycm9yLCB0aHJvdyBpdCBpbiBoZXJlXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZHJpdmVyOiBJbm5lckRyaXZlcixcbiAgICAgICAgdmVyc2lvbjogZHJpdmVyVmVyc2lvbixcbiAgICAgICAgZHJpdmVyTmFtZSxcbiAgICAgIH0gPSB0aGlzLmRyaXZlckNvbmZpZy5maW5kTWF0Y2hpbmdEcml2ZXIoZGVzaXJlZENhcHMpO1xuICAgICAgdGhpcy5wcmludE5ld1Nlc3Npb25Bbm5vdW5jZW1lbnQoSW5uZXJEcml2ZXIubmFtZSwgZHJpdmVyVmVyc2lvbiwgSW5uZXJEcml2ZXIuYmFzZVZlcnNpb24pO1xuXG4gICAgICBpZiAodGhpcy5hcmdzLnNlc3Npb25PdmVycmlkZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZUFsbFNlc3Npb25zKCk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogQHR5cGUge0RyaXZlckRhdGFbXX1cbiAgICAgICAqL1xuICAgICAgbGV0IHJ1bm5pbmdEcml2ZXJzRGF0YSA9IFtdO1xuICAgICAgLyoqXG4gICAgICAgKiBAdHlwZSB7RHJpdmVyRGF0YVtdfVxuICAgICAgICovXG4gICAgICBsZXQgb3RoZXJQZW5kaW5nRHJpdmVyc0RhdGEgPSBbXTtcblxuICAgICAgY29uc3QgZHJpdmVySW5zdGFuY2UgPSBuZXcgSW5uZXJEcml2ZXIodGhpcy5hcmdzLCB0cnVlKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBhc3NpZ24gc2VjdXJpdHkgdmFsdWVzIGRpcmVjdGx5IG9uIHRoZSBkcml2ZXIuIFRoZSBkcml2ZXJcbiAgICAgIC8vIHNob3VsZCBub3QgcmVhZCBzZWN1cml0eSB2YWx1ZXMgZnJvbSBgdGhpcy5vcHRzYCBiZWNhdXNlIHRob3NlIHZhbHVlc1xuICAgICAgLy8gY291bGQgaGF2ZSBiZWVuIHNldCBieSBhIG1hbGljaW91cyB1c2VyIHZpYSBjYXBhYmlsaXRpZXMsIHdoZXJlYXMgd2VcbiAgICAgIC8vIHdhbnQgYSBndWFyYW50ZWUgdGhlIHZhbHVlcyB3ZXJlIHNldCBieSB0aGUgYXBwaXVtIHNlcnZlciBhZG1pblxuICAgICAgaWYgKHRoaXMuYXJncy5yZWxheGVkU2VjdXJpdHlFbmFibGVkKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oXG4gICAgICAgICAgYEFwcGx5aW5nIHJlbGF4ZWQgc2VjdXJpdHkgdG8gJyR7SW5uZXJEcml2ZXIubmFtZX0nIGFzIHBlciBgICtcbiAgICAgICAgICAgIGBzZXJ2ZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiBBbGwgaW5zZWN1cmUgZmVhdHVyZXMgd2lsbCBiZSBgICtcbiAgICAgICAgICAgIGBlbmFibGVkIHVubGVzcyBleHBsaWNpdGx5IGRpc2FibGVkIGJ5IC0tZGVueS1pbnNlY3VyZWBcbiAgICAgICAgKTtcbiAgICAgICAgZHJpdmVySW5zdGFuY2UucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuYXJncy5kZW55SW5zZWN1cmUpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ0V4cGxpY2l0bHkgcHJldmVudGluZyB1c2Ugb2YgaW5zZWN1cmUgZmVhdHVyZXM6Jyk7XG4gICAgICAgIHRoaXMuYXJncy5kZW55SW5zZWN1cmUubWFwKChhKSA9PiB0aGlzLmxvZy5pbmZvKGAgICAgJHthfWApKTtcbiAgICAgICAgZHJpdmVySW5zdGFuY2UuZGVueUluc2VjdXJlID0gdGhpcy5hcmdzLmRlbnlJbnNlY3VyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5hcmdzLmFsbG93SW5zZWN1cmUpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ0V4cGxpY2l0bHkgZW5hYmxpbmcgdXNlIG9mIGluc2VjdXJlIGZlYXR1cmVzOicpO1xuICAgICAgICB0aGlzLmFyZ3MuYWxsb3dJbnNlY3VyZS5tYXAoKGEpID0+IHRoaXMubG9nLmluZm8oYCAgICAke2F9YCkpO1xuICAgICAgICBkcml2ZXJJbnN0YW5jZS5hbGxvd0luc2VjdXJlID0gdGhpcy5hcmdzLmFsbG93SW5zZWN1cmU7XG4gICAgICB9XG5cbiAgICAgIC8vIExpa2V3aXNlLCBhbnkgZHJpdmVyLXNwZWNpZmljIENMSSBhcmdzIHRoYXQgd2VyZSBwYXNzZWQgaW4gc2hvdWxkIGJlIGFzc2lnbmVkIGRpcmVjdGx5IHRvXG4gICAgICAvLyB0aGUgZHJpdmVyIHNvIHRoYXQgdGhleSBjYW5ub3QgYmUgbWltaWNrZWQgYnkgYSBtYWxpY2lvdXMgdXNlciBzZW5kaW5nIGluIGNhcGFiaWxpdGllc1xuICAgICAgY29uc3QgY2xpQXJncyA9IHRoaXMuZ2V0Q2xpQXJnc0ZvckRyaXZlcihkcml2ZXJOYW1lKTtcbiAgICAgIGlmICghXy5pc0VtcHR5KGNsaUFyZ3MpKSB7XG4gICAgICAgIGRyaXZlckluc3RhbmNlLmNsaUFyZ3MgPSBjbGlBcmdzO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIGFzc2lnbm1lbnQgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3Qgd2ViIHNvY2tldHMgZnVuY3Rpb25hbGl0eSBpbnNpZGUgdGhlIGRyaXZlclxuICAgICAgLy8gRHJpdmVycy9wbHVnaW5zIG1pZ2h0IGFsc28gd2FudCB0byBrbm93IHdoZXJlIHRoZXkgYXJlIGhvc3RlZFxuXG4gICAgICAvLyBYWFg6IHRlbXBvcmFyeSBoYWNrIHRvIHdvcmsgYXJvdW5kICMxNjc0N1xuICAgICAgZHJpdmVySW5zdGFuY2Uuc2VydmVyID0gdGhpcy5zZXJ2ZXI7XG4gICAgICBkcml2ZXJJbnN0YW5jZS5zZXJ2ZXJIb3N0ID0gdGhpcy5hcmdzLmFkZHJlc3M7XG4gICAgICBkcml2ZXJJbnN0YW5jZS5zZXJ2ZXJQb3J0ID0gdGhpcy5hcmdzLnBvcnQ7XG4gICAgICBkcml2ZXJJbnN0YW5jZS5zZXJ2ZXJQYXRoID0gdGhpcy5hcmdzLmJhc2VQYXRoO1xuXG4gICAgICB0cnkge1xuICAgICAgICBydW5uaW5nRHJpdmVyc0RhdGEgPSAoYXdhaXQgdGhpcy5jdXJTZXNzaW9uRGF0YUZvckRyaXZlcihJbm5lckRyaXZlcikpID8/IFtdO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHBlbmRpbmdEcml2ZXJzR3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4ge1xuICAgICAgICB0aGlzLnBlbmRpbmdEcml2ZXJzW0lubmVyRHJpdmVyLm5hbWVdID0gdGhpcy5wZW5kaW5nRHJpdmVyc1tJbm5lckRyaXZlci5uYW1lXSB8fCBbXTtcbiAgICAgICAgb3RoZXJQZW5kaW5nRHJpdmVyc0RhdGEgPSBfLmNvbXBhY3QoXG4gICAgICAgICAgdGhpcy5wZW5kaW5nRHJpdmVyc1tJbm5lckRyaXZlci5uYW1lXS5tYXAoKGRydikgPT4gZHJ2LmRyaXZlckRhdGEpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucGVuZGluZ0RyaXZlcnNbSW5uZXJEcml2ZXIubmFtZV0ucHVzaChkcml2ZXJJbnN0YW5jZSk7XG4gICAgICB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgW2lubmVyU2Vzc2lvbklkLCBkQ2Fwc10gPSBhd2FpdCBkcml2ZXJJbnN0YW5jZS5jcmVhdGVTZXNzaW9uKFxuICAgICAgICAgIHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyxcbiAgICAgICAgICByZXFDYXBzLFxuICAgICAgICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyxcbiAgICAgICAgICBbLi4ucnVubmluZ0RyaXZlcnNEYXRhLCAuLi5vdGhlclBlbmRpbmdEcml2ZXJzRGF0YV1cbiAgICAgICAgKTtcbiAgICAgICAgcHJvdG9jb2wgPSBkcml2ZXJJbnN0YW5jZS5wcm90b2NvbDtcbiAgICAgICAgdGhpcy5zZXNzaW9uc1tpbm5lclNlc3Npb25JZF0gPSBkcml2ZXJJbnN0YW5jZTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IHBlbmRpbmdEcml2ZXJzR3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4ge1xuICAgICAgICAgIF8ucHVsbCh0aGlzLnBlbmRpbmdEcml2ZXJzW0lubmVyRHJpdmVyLm5hbWVdLCBkcml2ZXJJbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmF0dGFjaFVuZXhwZWN0ZWRTaHV0ZG93bkhhbmRsZXIoZHJpdmVySW5zdGFuY2UsIGlubmVyU2Vzc2lvbklkKTtcblxuICAgICAgdGhpcy5sb2cuaW5mbyhcbiAgICAgICAgYE5ldyAke0lubmVyRHJpdmVyLm5hbWV9IHNlc3Npb24gY3JlYXRlZCBzdWNjZXNzZnVsbHksIHNlc3Npb24gYCArXG4gICAgICAgICAgYCR7aW5uZXJTZXNzaW9uSWR9IGFkZGVkIHRvIG1hc3RlciBzZXNzaW9uIGxpc3RgXG4gICAgICApO1xuXG4gICAgICAvLyBzZXQgdGhlIE5ldyBDb21tYW5kIFRpbWVvdXQgZm9yIHRoZSBpbm5lciBkcml2ZXJcbiAgICAgIGRyaXZlckluc3RhbmNlLnN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQoKTtcblxuICAgICAgLy8gYXBwbHkgaW5pdGlhbCB2YWx1ZXMgdG8gQXBwaXVtIHNldHRpbmdzIChpZiBwcm92aWRlZClcbiAgICAgIGlmIChkcml2ZXJJbnN0YW5jZS5pc1czQ1Byb3RvY29sKCkgJiYgIV8uaXNFbXB0eSh3M2NTZXR0aW5ncykpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhcbiAgICAgICAgICBgQXBwbHlpbmcgdGhlIGluaXRpYWwgdmFsdWVzIHRvIEFwcGl1bSBzZXR0aW5ncyBwYXJzZWQgZnJvbSBXM0MgY2FwczogYCArXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh3M2NTZXR0aW5ncylcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgZHJpdmVySW5zdGFuY2UudXBkYXRlU2V0dGluZ3ModzNjU2V0dGluZ3MpO1xuICAgICAgfSBlbHNlIGlmIChkcml2ZXJJbnN0YW5jZS5pc01qc29ud3BQcm90b2NvbCgpICYmICFfLmlzRW1wdHkoandwU2V0dGluZ3MpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oXG4gICAgICAgICAgYEFwcGx5aW5nIHRoZSBpbml0aWFsIHZhbHVlcyB0byBBcHBpdW0gc2V0dGluZ3MgcGFyc2VkIGZyb20gTUpTT05XUCBjYXBzOiBgICtcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGp3cFNldHRpbmdzKVxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBkcml2ZXJJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyhqd3BTZXR0aW5ncyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBlcnJvcixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3RvY29sLFxuICAgICAgdmFsdWU6IFtpbm5lclNlc3Npb25JZCwgZENhcHMsIHByb3RvY29sXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RHJpdmVyfSBkcml2ZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlubmVyU2Vzc2lvbklkXG4gICAqL1xuICBhdHRhY2hVbmV4cGVjdGVkU2h1dGRvd25IYW5kbGVyKGRyaXZlciwgaW5uZXJTZXNzaW9uSWQpIHtcbiAgICBjb25zdCBvblNodXRkb3duID0gKGNhdXNlID0gbmV3IEVycm9yKCdVbmtub3duIGVycm9yJykpID0+IHtcbiAgICAgIHRoaXMubG9nLndhcm4oYEVuZGluZyBzZXNzaW9uLCBjYXVzZSB3YXMgJyR7Y2F1c2UubWVzc2FnZX0nYCk7XG5cbiAgICAgIGlmICh0aGlzLnNlc3Npb25QbHVnaW5zW2lubmVyU2Vzc2lvbklkXSkge1xuICAgICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB0aGlzLnNlc3Npb25QbHVnaW5zW2lubmVyU2Vzc2lvbklkXSkge1xuICAgICAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luLm9uVW5leHBlY3RlZFNodXRkb3duKSkge1xuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoXG4gICAgICAgICAgICAgIGBQbHVnaW4gJHtwbHVnaW4ubmFtZX0gZGVmaW5lcyBhbiB1bmV4cGVjdGVkIHNodXRkb3duIGhhbmRsZXI7IGNhbGxpbmcgaXQgbm93YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHBsdWdpbi5vblVuZXhwZWN0ZWRTaHV0ZG93bihkcml2ZXIsIGNhdXNlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2cud2FybihcbiAgICAgICAgICAgICAgICBgR290IGFuIGVycm9yIHdoZW4gcnVubmluZyBwbHVnaW4gJHtwbHVnaW4ubmFtZX0gc2h1dGRvd24gaGFuZGxlcjogJHtlfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFBsdWdpbiAke3BsdWdpbi5uYW1lfSBkb2VzIG5vdCBkZWZpbmUgYW4gdW5leHBlY3RlZCBzaHV0ZG93biBoYW5kbGVyYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nLmluZm8oYFJlbW92aW5nIHNlc3Npb24gJyR7aW5uZXJTZXNzaW9uSWR9JyBmcm9tIG91ciBtYXN0ZXIgc2Vzc2lvbiBsaXN0YCk7XG4gICAgICBkZWxldGUgdGhpcy5zZXNzaW9uc1tpbm5lclNlc3Npb25JZF07XG4gICAgICBkZWxldGUgdGhpcy5zZXNzaW9uUGx1Z2luc1tpbm5lclNlc3Npb25JZF07XG4gICAgfTtcblxuICAgIGlmIChfLmlzRnVuY3Rpb24oZHJpdmVyLm9uVW5leHBlY3RlZFNodXRkb3duKSkge1xuICAgICAgZHJpdmVyLm9uVW5leHBlY3RlZFNodXRkb3duKG9uU2h1dGRvd24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy53YXJuKFxuICAgICAgICBgRmFpbGVkIHRvIGF0dGFjaCB0aGUgdW5leHBlY3RlZCBzaHV0ZG93biBsaXN0ZW5lci4gYCArXG4gICAgICAgICAgYElzICdvblVuZXhwZWN0ZWRTaHV0ZG93bicgbWV0aG9kIGF2YWlsYWJsZSBmb3IgJyR7ZHJpdmVyLmNvbnN0cnVjdG9yLm5hbWV9Jz9gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0RyaXZlckNsYXNzfSBJbm5lckRyaXZlclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEcml2ZXJEYXRhW10+fX1cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF3YWl0XG4gIGFzeW5jIGN1clNlc3Npb25EYXRhRm9yRHJpdmVyKElubmVyRHJpdmVyKSB7XG4gICAgY29uc3QgZGF0YSA9IF8uY29tcGFjdChcbiAgICAgIF8udmFsdWVzKHRoaXMuc2Vzc2lvbnMpXG4gICAgICAgIC5maWx0ZXIoKHMpID0+IHMuY29uc3RydWN0b3IubmFtZSA9PT0gSW5uZXJEcml2ZXIubmFtZSlcbiAgICAgICAgLm1hcCgocykgPT4gcy5kcml2ZXJEYXRhKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBkYXR1bSBvZiBkYXRhKSB7XG4gICAgICBpZiAoIWRhdHVtKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgUHJvYmxlbSBnZXR0aW5nIHNlc3Npb24gZGF0YSBmb3IgZHJpdmVyIHR5cGUgYCArXG4gICAgICAgICAgICBgJHtJbm5lckRyaXZlci5uYW1lfTsgZG9lcyBpdCBpbXBsZW1lbnQgJ2dldCBkcml2ZXJEYXRhJz9gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWRcbiAgICovXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24oc2Vzc2lvbklkKSB7XG4gICAgbGV0IHByb3RvY29sO1xuICAgIHRyeSB7XG4gICAgICBsZXQgb3RoZXJTZXNzaW9uc0RhdGE7XG4gICAgICBjb25zdCBkc3RTZXNzaW9uID0gYXdhaXQgc2Vzc2lvbnNMaXN0R3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJDb25zdHJ1Y3Rvck5hbWUgPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF0uY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgb3RoZXJTZXNzaW9uc0RhdGEgPSBfLnRvUGFpcnModGhpcy5zZXNzaW9ucylcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKFtrZXksIHZhbHVlXSkgPT4gdmFsdWUuY29uc3RydWN0b3IubmFtZSA9PT0gY3VyQ29uc3RydWN0b3JOYW1lICYmIGtleSAhPT0gc2Vzc2lvbklkXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKFssIHZhbHVlXSkgPT4gdmFsdWUuZHJpdmVyRGF0YSk7XG4gICAgICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgICAgIHByb3RvY29sID0gZHN0U2Vzc2lvbi5wcm90b2NvbDtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgUmVtb3Zpbmcgc2Vzc2lvbiAke3Nlc3Npb25JZH0gZnJvbSBvdXIgbWFzdGVyIHNlc3Npb24gbGlzdGApO1xuICAgICAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGRlbGV0ZVNlc3Npb24gY29tcGxldGVzIHN1Y2Nlc3NmdWxseSBvciBub3RcbiAgICAgICAgLy8gbWFrZSB0aGUgc2Vzc2lvbiB1bmF2YWlsYWJsZSwgYmVjYXVzZSB3aG8ga25vd3Mgd2hhdCBzdGF0ZSBpdCBtaWdodFxuICAgICAgICAvLyBiZSBpbiBvdGhlcndpc2VcbiAgICAgICAgZGVsZXRlIHRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2Vzc2lvblBsdWdpbnNbc2Vzc2lvbklkXTtcbiAgICAgICAgcmV0dXJuIGRzdFNlc3Npb247XG4gICAgICB9KTtcbiAgICAgIC8vIHRoaXMgbWF5IG5vdCBiZSBjb3JyZWN0LCBidXQgaWYgYGRzdFNlc3Npb25gIHdhcyBmYWxzeSwgdGhlIGNhbGwgdG8gYGRlbGV0ZVNlc3Npb24oKWAgd291bGRcbiAgICAgIC8vIHRocm93IGFueXdheS5cbiAgICAgIGlmICghZHN0U2Vzc2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nlc3Npb24gbm90IGZvdW5kJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdmFsdWU6IGF3YWl0IGRzdFNlc3Npb24uZGVsZXRlU2Vzc2lvbihzZXNzaW9uSWQsIG90aGVyU2Vzc2lvbnNEYXRhKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoYEhhZCB0cm91YmxlIGVuZGluZyBzZXNzaW9uICR7c2Vzc2lvbklkfTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgZXJyb3I6IGUsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFsbFNlc3Npb25zKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHNlc3Npb25zQ291bnQgPSBfLnNpemUodGhpcy5zZXNzaW9ucyk7XG4gICAgaWYgKDAgPT09IHNlc3Npb25zQ291bnQpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdUaGVyZSBhcmUgbm8gYWN0aXZlIHNlc3Npb25zIGZvciBjbGVhbnVwJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge2ZvcmNlID0gZmFsc2UsIHJlYXNvbn0gPSBvcHRzO1xuICAgIHRoaXMubG9nLmRlYnVnKGBDbGVhbmluZyB1cCAke3V0aWwucGx1cmFsaXplKCdhY3RpdmUgc2Vzc2lvbicsIHNlc3Npb25zQ291bnQsIHRydWUpfWApO1xuICAgIGNvbnN0IGNsZWFudXBQcm9taXNlcyA9IGZvcmNlXG4gICAgICA/IF8udmFsdWVzKHRoaXMuc2Vzc2lvbnMpLm1hcCgoZHJ2KSA9PlxuICAgICAgICAgIGRydi5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihyZWFzb24gJiYgbmV3IEVycm9yKHJlYXNvbikpXG4gICAgICAgIClcbiAgICAgIDogXy5rZXlzKHRoaXMuc2Vzc2lvbnMpLm1hcCgoaWQpID0+IHRoaXMuZGVsZXRlU2Vzc2lvbihpZCkpO1xuICAgIGZvciAoY29uc3QgY2xlYW51cFByb21pc2Ugb2YgY2xlYW51cFByb21pc2VzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjbGVhbnVwUHJvbWlzZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYXBwcm9wcmlhdGUgcGx1Z2lucyBmb3IgYSBzZXNzaW9uIChvciBzZXNzaW9ubGVzcyBwbHVnaW5zKVxuICAgKlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IHNlc3Npb25JZCAtIHRoZSBzZXNzaW9uSWQgKG9yIG51bGwpIHRvIHVzZSB0byBmaW5kIHBsdWdpbnNcbiAgICogQHJldHVybnMge0FycmF5fSAtIGFycmF5IG9mIHBsdWdpbiBpbnN0YW5jZXNcbiAgICovXG4gIHBsdWdpbnNGb3JTZXNzaW9uKHNlc3Npb25JZCA9IG51bGwpIHtcbiAgICBpZiAoc2Vzc2lvbklkKSB7XG4gICAgICBpZiAoIXRoaXMuc2Vzc2lvblBsdWdpbnNbc2Vzc2lvbklkXSkge1xuICAgICAgICB0aGlzLnNlc3Npb25QbHVnaW5zW3Nlc3Npb25JZF0gPSB0aGlzLmNyZWF0ZVBsdWdpbkluc3RhbmNlcygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvblBsdWdpbnNbc2Vzc2lvbklkXTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMuc2Vzc2lvbmxlc3NQbHVnaW5zKSkge1xuICAgICAgdGhpcy5zZXNzaW9ubGVzc1BsdWdpbnMgPSB0aGlzLmNyZWF0ZVBsdWdpbkluc3RhbmNlcygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9ubGVzc1BsdWdpbnM7XG4gIH1cblxuICAvKipcbiAgICogVG8gZ2V0IHBsdWdpbnMgZm9yIGEgY29tbWFuZCwgd2UgZWl0aGVyIGdldCB0aGUgcGx1Z2luIGluc3RhbmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlXG4gICAqIHBhcnRpY3VsYXIgY29tbWFuZCdzIHNlc3Npb24sIG9yIGluIHRoZSBjYXNlIG9mIHNlc3Npb25sZXNzIHBsdWdpbnMsIHB1bGwgZnJvbSB0aGUgc2V0IG9mXG4gICAqIHBsdWdpbiBpbnN0YW5jZXMgcmVzZXJ2ZWQgZm9yIHNlc3Npb25sZXNzIGNvbW1hbmRzIChhbmQgd2UgbGF6aWx5IGNyZWF0ZSBwbHVnaW4gaW5zdGFuY2VzIG9uXG4gICAqIGZpcnN0IHVzZSlcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNtZCAtIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIHRvIGZpbmQgYSBwbHVnaW4gdG8gaGFuZGxlXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gc2Vzc2lvbklkIC0gdGhlIHBhcnRpY3VsYXIgc2Vzc2lvbiBmb3Igd2hpY2ggdG8gZmluZCBhIHBsdWdpbiwgb3IgbnVsbCBpZlxuICAgKiBzZXNzaW9ubGVzc1xuICAgKi9cbiAgcGx1Z2luc1RvSGFuZGxlQ21kKGNtZCwgc2Vzc2lvbklkID0gbnVsbCkge1xuICAgIC8vIHRvIGhhbmRsZSBhIGdpdmVuIGNvbW1hbmQsIGEgcGx1Z2luIHNob3VsZCBlaXRoZXIgaW1wbGVtZW50IHRoYXQgY29tbWFuZCBhcyBhIHBsdWdpblxuICAgIC8vIGluc3RhbmNlIG1ldGhvZCBvciBpdCBzaG91bGQgaW1wbGVtZW50IGEgZ2VuZXJpYyAnaGFuZGxlJyBtZXRob2RcbiAgICByZXR1cm4gdGhpcy5wbHVnaW5zRm9yU2Vzc2lvbihzZXNzaW9uSWQpLmZpbHRlcihcbiAgICAgIChwKSA9PiBfLmlzRnVuY3Rpb24ocFtjbWRdKSB8fCBfLmlzRnVuY3Rpb24ocC5oYW5kbGUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGluc3RhbmNlcyBvZiBhbGwgb2YgdGhlIGVuYWJsZWQgUGx1Z2luIGNsYXNzZXNcbiAgICogQHJldHVybnMge1BsdWdpbltdfVxuICAgKi9cbiAgY3JlYXRlUGx1Z2luSW5zdGFuY2VzKCkge1xuICAgIC8qKiBAdHlwZSB7UGx1Z2luW119ICovXG4gICAgY29uc3QgcGx1Z2luSW5zdGFuY2VzID0gW107XG4gICAgZm9yIChjb25zdCBbUGx1Z2luQ2xhc3MsIG5hbWVdIG9mIHRoaXMucGx1Z2luQ2xhc3Nlcy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaUFyZ3MgPSB0aGlzLmdldENsaUFyZ3NGb3JQbHVnaW4obmFtZSk7XG4gICAgICBjb25zdCBwbHVnaW4gPSBuZXcgUGx1Z2luQ2xhc3MobmFtZSwgY2xpQXJncyk7XG4gICAgICBwbHVnaW5JbnN0YW5jZXMucHVzaChwbHVnaW4pO1xuICAgIH1cbiAgICByZXR1cm4gcGx1Z2luSW5zdGFuY2VzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbWRcbiAgICogQHBhcmFtICB7Li4uYW55fSBhcmdzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHt2YWx1ZTogYW55LCBlcnJvcj86IEVycm9yLCBwcm90b2NvbDogc3RyaW5nfSB8IGltcG9ydCgndHlwZS1mZXN0JykuQXN5bmNSZXR1cm5UeXBlPERyaXZlclsnZXhlY3V0ZUNvbW1hbmQnXT4+fVxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQoY21kLCAuLi5hcmdzKSB7XG4gICAgLy8gV2UgaGF2ZSBiYXNpY2FsbHkgdGhyZWUgY2FzZXMgZm9yIGhvdyB0byBoYW5kbGUgY29tbWFuZHM6XG4gICAgLy8gMS4gaGFuZGxlIGdldFN0YXR1cyAod2UgZG8gdGhpcyBhcyBhIHNwZWNpYWwgb3V0IG9mIGJhbmQgY2FzZSBzbyBpdCBkb2Vzbid0IGdldCBhZGRlZCB0byBhblxuICAgIC8vICAgIGV4ZWN1dGlvbiBxdWV1ZSwgYW5kIGNhbiBiZSBjYWxsZWQgd2hpbGUgZS5nLiBjcmVhdGVTZXNzaW9uIGlzIGluIHByb2dyZXNzKVxuICAgIC8vIDIuIGhhbmRsZSBjb21tYW5kcyB0aGF0IHRoaXMgdW1icmVsbGEgZHJpdmVyIHNob3VsZCBoYW5kbGUsIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgc2Vzc2lvblxuICAgIC8vICAgIGRyaXZlciAoZm9yIGV4YW1wbGUsIGRlbGV0ZVNlc3Npb24sIG9yIG90aGVyIG5vbi1zZXNzaW9uIGNvbW1hbmRzKVxuICAgIC8vIDMuIGhhbmRsZSBzZXNzaW9uIGRyaXZlciBjb21tYW5kcy5cbiAgICAvLyBUaGUgdHJpY2t5IHBhcnQgaXMgdGhhdCBiZWNhdXNlIHdlIHN1cHBvcnQgY29tbWFuZCBwbHVnaW5zLCB3ZSBuZWVkIHRvIHdyYXAgYW55IG9mIHRoZXNlXG4gICAgLy8gY2FzZXMgd2l0aCBwbHVnaW4gaGFuZGxpbmcuXG5cbiAgICBjb25zdCBpc0dldFN0YXR1cyA9IGNtZCA9PT0gR0VUX1NUQVRVU19DT01NQU5EO1xuICAgIGNvbnN0IGlzVW1icmVsbGFDbWQgPSBpc0FwcGl1bURyaXZlckNvbW1hbmQoY21kKTtcbiAgICBjb25zdCBpc1Nlc3Npb25DbWQgPSBpc1Nlc3Npb25Db21tYW5kKGNtZCk7XG5cbiAgICAvLyBpZiBhIHBsdWdpbiBvdmVycmlkZSBwcm94eWluZyBmb3IgdGhpcyBjb21tYW5kIGFuZCB0aGF0IGlzIHdoeSB3ZSBhcmUgaGVyZSBpbnN0ZWFkIG9mIGp1c3RcbiAgICAvLyBsZXR0aW5nIHRoZSBwcm90b2NvbCBwcm94eSB0aGUgY29tbWFuZCBlbnRpcmVseSwgZGV0ZXJtaW5lIHRoYXQsIGdldCB0aGUgcmVxdWVzdCBvYmplY3QgZm9yXG4gICAgLy8gdXNlIGxhdGVyIG9uLCB0aGVuIGNsZWFuIHVwIHRoZSBhcmdzXG4gICAgY29uc3QgcmVxRm9yUHJveHkgPSBfLmxhc3QoYXJncyk/LnJlcUZvclByb3h5O1xuICAgIGlmIChyZXFGb3JQcm94eSkge1xuICAgICAgYXJncy5wb3AoKTtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCBkbyBzb21lIGVycm9yIGNoZWNraW5nLiBJZiB3ZSdyZSByZXF1ZXN0aW5nIGEgc2Vzc2lvbiBjb21tYW5kIGV4ZWN1dGlvbiwgdGhlbiBtYWtlXG4gICAgLy8gc3VyZSB0aGF0IHNlc3Npb24gYWN0dWFsbHkgZXhpc3RzIG9uIHRoZSBzZXNzaW9uIGRyaXZlciwgYW5kIHNldCB0aGUgc2Vzc2lvbiBkcml2ZXIgaXRzZWxmXG4gICAgbGV0IHNlc3Npb25JZCA9IG51bGw7XG4gICAgbGV0IGRzdFNlc3Npb24gPSBudWxsO1xuICAgIGxldCBwcm90b2NvbCA9IG51bGw7XG4gICAgLyoqIEB0eXBlIHt0aGlzIHwgRXh0ZXJuYWxEcml2ZXJ9ICovXG4gICAgbGV0IGRyaXZlciA9IHRoaXM7XG4gICAgaWYgKGlzU2Vzc2lvbkNtZCkge1xuICAgICAgc2Vzc2lvbklkID0gXy5sYXN0KGFyZ3MpO1xuICAgICAgZHN0U2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXTtcbiAgICAgIGlmICghZHN0U2Vzc2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZXNzaW9uIHdpdGggaWQgJyR7c2Vzc2lvbklkfScgZG9lcyBub3QgZXhpc3RgKTtcbiAgICAgIH1cbiAgICAgIC8vIG5vdyBzYXZlIHRoZSByZXNwb25zZSBwcm90b2NvbCBnaXZlbiB0aGF0IHRoZSBzZXNzaW9uIGRyaXZlcidzIHByb3RvY29sIG1pZ2h0IGRpZmZlclxuICAgICAgcHJvdG9jb2wgPSBkc3RTZXNzaW9uLnByb3RvY29sO1xuICAgICAgaWYgKCFpc1VtYnJlbGxhQ21kKSB7XG4gICAgICAgIGRyaXZlciA9IGRzdFNlc3Npb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZ2V0IGFueSBwbHVnaW5zIHdoaWNoIGFyZSByZWdpc3RlcmVkIGFzIGhhbmRsaW5nIHRoaXMgY29tbWFuZFxuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnNUb0hhbmRsZUNtZChjbWQsIHNlc3Npb25JZCk7XG5cbiAgICAvLyBub3cgd2UgZGVmaW5lIGEgJ2NtZEhhbmRsZWRCeScgb2JqZWN0IHdoaWNoIHdpbGwga2VlcCB0cmFjayBvZiB3aGljaCBwbHVnaW5zIGhhdmUgaGFuZGxlZCB0aGlzXG4gICAgLy8gY29tbWFuZC4gd2UgY2FyZSBhYm91dCB0aGlzIGJlY2F1c2UgKGEpIG11bHRpcGxlIHBsdWdpbnMgY2FuIGhhbmRsZSB0aGUgc2FtZSBjb21tYW5kLCBhbmRcbiAgICAvLyAoYikgdGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCBhIHBsdWdpbiB3aWxsIGFjdHVhbGx5IGNhbGwgdGhlIG5leHQoKSBtZXRob2Qgd2hpY2ggcnVucyB0aGVcbiAgICAvLyBvcmlnaW5hbCBjb21tYW5kIGV4ZWN1dGlvbi4gVGhpcyByZXN1bHRzIGluIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBjb21tYW5kIG1pZ2h0IGJlIGhhbmRsZWRcbiAgICAvLyBieSBzb21lIGJ1dCBub3QgYWxsIHBsdWdpbnMsIG9yIGJ5IHBsdWdpbihzKSBidXQgbm90IGJ5IHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBTbyBzdGFydCBvdXRcbiAgICAvLyB0aGlzIG9iamVjdCBkZWNsYXJpbmcgdGhhdCB0aGUgZGVmYXVsdCBoYW5kbGVyIGhhcyBub3QgYmVlbiBleGVjdXRlZC5cbiAgICBjb25zdCBjbWRIYW5kbGVkQnkgPSB7ZGVmYXVsdDogZmFsc2V9O1xuXG4gICAgLy8gbm93IHdlIGRlZmluZSBhbiBhc3luYyBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byBwbHVnaW5zLCBhbmQgc3VjY2Vzc2l2ZWx5IHdyYXBwZWRcbiAgICAvLyBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBsdWdpbiB0aGF0IGNhbiBoYW5kbGUgdGhlIGNvbW1hbmQuIFRvIHN0YXJ0IG9mZiB3aXRoLCB0aGUgYXN5bmNcbiAgICAvLyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGNhbGxpbmcgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIGkuZS4sIHdoaWNoZXZlciBvZiB0aGUgMyBjYXNlcyBhYm92ZSBpc1xuICAgIC8vIHRoZSBhcHByb3ByaWF0ZSBvbmVcbiAgICBjb25zdCBkZWZhdWx0QmVoYXZpb3IgPSBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBpZiB3ZSdyZSBydW5uaW5nIHdpdGggcGx1Z2lucywgbWFrZSBzdXJlIHdlIGxvZyB0aGF0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIGFjdHVhbGx5XG4gICAgICAvLyBoYXBwZW5pbmcgc28gd2UgY2FuIHRlbGwgd2hlbiB0aGUgcGx1Z2luIGNhbGwgY2hhaW4gaXMgdW53cmFwcGluZyB0byB0aGUgZGVmYXVsdCBiZWhhdmlvclxuICAgICAgLy8gaWYgdGhhdCdzIHdoYXQgaGFwcGVuc1xuICAgICAgcGx1Z2lucy5sZW5ndGggJiYgdGhpcy5sb2cuaW5mbyhgRXhlY3V0aW5nIGRlZmF1bHQgaGFuZGxpbmcgYmVoYXZpb3IgZm9yIGNvbW1hbmQgJyR7Y21kfSdgKTtcblxuICAgICAgLy8gaWYgd2UgbWFrZSBpdCBoZXJlLCB3ZSBrbm93IHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgaGFuZGxlZFxuICAgICAgY21kSGFuZGxlZEJ5LmRlZmF1bHQgPSB0cnVlO1xuXG4gICAgICBpZiAocmVxRm9yUHJveHkpIHtcbiAgICAgICAgLy8gd2Ugd291bGQgaGF2ZSBwcm94aWVkIHRoaXMgY29tbWFuZCBoYWQgYSBwbHVnaW4gbm90IGhhbmRsZWQgaXQsIHNvIHRoZSBkZWZhdWx0IGJlaGF2aW9yXG4gICAgICAgIC8vIGlzIHRvIGRvIHRoZSBwcm94eSBhbmQgcmV0cmlldmUgdGhlIHJlc3VsdCBpbnRlcm5hbGx5IHNvIGl0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIHBsdWdpblxuICAgICAgICAvLyBpbiBjYXNlIGl0IGNhbGxzICdhd2FpdCBuZXh0KCknLiBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIGRyaXZlciBoYXZlIGRlZmluZWRcbiAgICAgICAgLy8gJ3Byb3h5Q29tbWFuZCcgYW5kIG5vdCBqdXN0ICdwcm94eVJlcVJlcycuXG4gICAgICAgIGlmICghZHN0U2Vzc2lvbi5wcm94eUNvbW1hbmQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9Ecml2ZXJQcm94eUNvbW1hbmRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBkc3RTZXNzaW9uLnByb3h5Q29tbWFuZChcbiAgICAgICAgICByZXFGb3JQcm94eS5vcmlnaW5hbFVybCxcbiAgICAgICAgICByZXFGb3JQcm94eS5tZXRob2QsXG4gICAgICAgICAgcmVxRm9yUHJveHkuYm9keVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNHZXRTdGF0dXMpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1VtYnJlbGxhQ21kKSB7XG4gICAgICAgIC8vIHNvbWUgY29tbWFuZHMsIGxpa2UgZGVsZXRlU2Vzc2lvbiwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdG8gaGFuZGxlIG9uICp0aGlzKiBkcml2ZXIsXG4gICAgICAgIC8vIG5vdCB0aGUgcGxhdGZvcm0gZHJpdmVyXG4gICAgICAgIHJldHVybiBhd2FpdCBCYXNlRHJpdmVyLnByb3RvdHlwZS5leGVjdXRlQ29tbWFuZC5jYWxsKHRoaXMsIGNtZCwgLi4uYXJncyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGhlcmUgd2Uga25vdyB0aGF0IHdlIGFyZSBleGVjdXRpbmcgYSBzZXNzaW9uIGNvbW1hbmQsIGFuZCBoYXZlIGEgdmFsaWQgc2Vzc2lvbiBkcml2ZXJcbiAgICAgIHJldHVybiBhd2FpdCBkc3RTZXNzaW9uLmV4ZWN1dGVDb21tYW5kKGNtZCwgLi4uYXJncyk7XG4gICAgfTtcblxuICAgIC8vIG5vdyB0YWtlIG91ciBkZWZhdWx0IGJlaGF2aW9yLCB3cmFwIGl0IHdpdGggYW55IG51bWJlciBvZiBwbHVnaW4gYmVoYXZpb3JzLCBhbmQgcnVuIGl0XG4gICAgY29uc3Qgd3JhcHBlZENtZCA9IHRoaXMud3JhcENvbW1hbmRXaXRoUGx1Z2lucyh7XG4gICAgICBkcml2ZXIsXG4gICAgICBjbWQsXG4gICAgICBhcmdzLFxuICAgICAgcGx1Z2lucyxcbiAgICAgIGNtZEhhbmRsZWRCeSxcbiAgICAgIG5leHQ6IGRlZmF1bHRCZWhhdmlvcixcbiAgICB9KTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmV4ZWN1dGVXcmFwcGVkQ29tbWFuZCh7d3JhcHBlZENtZCwgcHJvdG9jb2x9KTtcblxuICAgIC8vIGlmIHdlIGhhZCBwbHVnaW5zLCBtYWtlIHN1cmUgdG8gbG9nIG91dCB0aGUgaGVscGZ1bCByZXBvcnQgYWJvdXQgd2hpY2ggcGx1Z2lucyBlbmRlZCB1cFxuICAgIC8vIGhhbmRsaW5nIHRoZSBjb21tYW5kIGFuZCB3aGljaCBkaWRuJ3RcbiAgICB0aGlzLmxvZ1BsdWdpbkhhbmRsZXJSZXBvcnQocGx1Z2lucywge2NtZCwgY21kSGFuZGxlZEJ5fSk7XG5cbiAgICAvLyBBbmQgZmluYWxseSwgaWYgdGhlIGNvbW1hbmQgd2FzIGNyZWF0ZVNlc3Npb24sIHdlIHdhbnQgdG8gbWlncmF0ZSBhbnkgcGx1Z2lucyB3aGljaCB3ZXJlXG4gICAgLy8gcHJldmlvdXNseSBzZXNzaW9ubGVzcyB0byB1c2UgdGhlIG5ldyBzZXNzaW9uSWQsIHNvIHRoYXQgcGx1Z2lucyBjYW4gc2hhcmUgc3RhdGUgYmV0d2VlblxuICAgIC8vIHRoZWlyIGNyZWF0ZVNlc3Npb24gbWV0aG9kIGFuZCBvdGhlciBpbnN0YW5jZSBtZXRob2RzXG4gICAgaWYgKGNtZCA9PT0gQ1JFQVRFX1NFU1NJT05fQ09NTUFORCAmJiB0aGlzLnNlc3Npb25sZXNzUGx1Z2lucy5sZW5ndGggJiYgIXJlcy5lcnJvcikge1xuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gXy5maXJzdChyZXMudmFsdWUpO1xuICAgICAgdGhpcy5sb2cuaW5mbyhcbiAgICAgICAgYFByb21vdGluZyAke3RoaXMuc2Vzc2lvbmxlc3NQbHVnaW5zLmxlbmd0aH0gc2Vzc2lvbmxlc3MgcGx1Z2lucyB0byBiZSBhdHRhY2hlZCBgICtcbiAgICAgICAgICBgdG8gc2Vzc2lvbiBJRCAke3Nlc3Npb25JZH1gXG4gICAgICApO1xuICAgICAgdGhpcy5zZXNzaW9uUGx1Z2luc1tzZXNzaW9uSWRdID0gdGhpcy5zZXNzaW9ubGVzc1BsdWdpbnM7XG4gICAgICB0aGlzLnNlc3Npb25sZXNzUGx1Z2lucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICB3cmFwQ29tbWFuZFdpdGhQbHVnaW5zKHtkcml2ZXIsIGNtZCwgYXJncywgbmV4dCwgY21kSGFuZGxlZEJ5LCBwbHVnaW5zfSkge1xuICAgIHBsdWdpbnMubGVuZ3RoICYmXG4gICAgICB0aGlzLmxvZy5pbmZvKGBQbHVnaW5zIHdoaWNoIGNhbiBoYW5kbGUgY21kICcke2NtZH0nOiAke3BsdWdpbnMubWFwKChwKSA9PiBwLm5hbWUpfWApO1xuXG4gICAgLy8gbm93IHdlIGNhbiBnbyB0aHJvdWdoIGVhY2ggcGx1Z2luIGFuZCB3cmFwIGBuZXh0YCBhcm91bmQgaXRzIG93biBoYW5kbGVyLCBwYXNzaW5nIHRoZSAqb2xkKlxuICAgIC8vIG5leHQgaW4gc28gdGhhdCBpdCBjYW4gY2FsbCBpdCBpZiBpdCB3YW50cyB0b1xuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMpIHtcbiAgICAgIC8vIG5lZWQgYW4gSUlGRSBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0aGUgdmFsdWUgb2YgbmV4dCB0aGF0J3MgcGFzc2VkIHRvIHBsdWdpbi5oYW5kbGUgdG8gYmVcbiAgICAgIC8vIGV4YWN0bHkgdGhlIHZhbHVlIG9mIG5leHQgaGVyZSBiZWZvcmUgcmVhc3NpZ25tZW50OyB3ZSBkb24ndCB3YW50IGl0IHRvIGJlIGxhemlseVxuICAgICAgLy8gZXZhbHVhdGVkLCBvdGhlcndpc2Ugd2UgZW5kIHVwIHdpdGggaW5maW5pdGUgcmVjdXJzaW9uIG9mIHRoZSBsYXN0IGBuZXh0YCB0byBiZSBkZWZpbmVkLlxuICAgICAgY21kSGFuZGxlZEJ5W3BsdWdpbi5uYW1lXSA9IGZhbHNlOyAvLyB3ZSBzZWUgYSBuZXcgcGx1Z2luLCBzbyBhZGQgaXQgdG8gdGhlICdjbWRIYW5kbGVkQnknIG9iamVjdFxuICAgICAgbmV4dCA9ICgoX25leHQpID0+IGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgUGx1Z2luICR7cGx1Z2luLm5hbWV9IGlzIG5vdyBoYW5kbGluZyBjbWQgJyR7Y21kfSdgKTtcbiAgICAgICAgY21kSGFuZGxlZEJ5W3BsdWdpbi5uYW1lXSA9IHRydWU7IC8vIGlmIHdlIG1ha2UgaXQgaGVyZSwgdGhpcyBwbHVnaW4gaGFzIGF0dGVtcHRlZCB0byBoYW5kbGUgY21kXG4gICAgICAgIC8vIGZpcnN0IGF0dGVtcHQgdG8gaGFuZGxlIHRoZSBjb21tYW5kIHZpYSBhIGNvbW1hbmQtc3BlY2lmaWMgaGFuZGxlciBvbiB0aGUgcGx1Z2luXG4gICAgICAgIGlmIChwbHVnaW5bY21kXSkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBwbHVnaW5bY21kXShfbmV4dCwgZHJpdmVyLCAuLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlcndpc2UsIGNhbGwgdGhlIGdlbmVyaWMgJ2hhbmRsZScgbWV0aG9kXG4gICAgICAgIHJldHVybiBhd2FpdCBwbHVnaW4uaGFuZGxlKF9uZXh0LCBkcml2ZXIsIGNtZCwgLi4uYXJncyk7XG4gICAgICB9KShuZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuXG4gIGxvZ1BsdWdpbkhhbmRsZXJSZXBvcnQocGx1Z2lucywge2NtZCwgY21kSGFuZGxlZEJ5fSkge1xuICAgIGlmICghcGx1Z2lucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBkYXksIHdlIGhhdmUgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB3aGljaCBwbHVnaW5zIGVuZGVkIHVwIGdldHRpbmdcbiAgICAvLyB0aGVpciBjb2RlIHJ1biBhcyBwYXJ0IG9mIGhhbmRsaW5nIHRoaXMgY29tbWFuZC4gQmVjYXVzZSBwbHVnaW5zIGNhbiBjaG9vc2UgKm5vdCogdG9cbiAgICAvLyBwYXNzIGNvbnRyb2wgdG8gb3RoZXIgcGx1Z2lucyBvciB0byB0aGUgZGVmYXVsdCBkcml2ZXIgYmVoYXZpb3IsIHRoaXMgaXMgaW5mb3JtYXRpb25cbiAgICAvLyB3aGljaCBpcyBwcm9iYWJseSB1c2VmdWwgdG8gdGhlIHVzZXIgKGVzcGVjaWFsbHkgaW4gc2l0dWF0aW9ucyB3aGVyZSBwbHVnaW5zIG1pZ2h0IG5vdFxuICAgIC8vIGludGVyYWN0IHdlbGwgdG9nZXRoZXIsIGFuZCBpdCB3b3VsZCBiZSBoYXJkIHRvIGRlYnVnIG90aGVyd2lzZSB3aXRob3V0IHRoaXMga2luZCBvZlxuICAgIC8vIG1lc3NhZ2UpLlxuICAgIGNvbnN0IGRpZEhhbmRsZSA9IE9iamVjdC5rZXlzKGNtZEhhbmRsZWRCeSkuZmlsdGVyKChrKSA9PiBjbWRIYW5kbGVkQnlba10pO1xuICAgIGNvbnN0IGRpZG50SGFuZGxlID0gT2JqZWN0LmtleXMoY21kSGFuZGxlZEJ5KS5maWx0ZXIoKGspID0+ICFjbWRIYW5kbGVkQnlba10pO1xuICAgIGlmIChkaWRudEhhbmRsZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKFxuICAgICAgICBgQ29tbWFuZCAnJHtjbWR9JyB3YXMgKm5vdCogaGFuZGxlZCBieSB0aGUgZm9sbG93aW5nIGJlaGF2aW91cnMgb3IgcGx1Z2lucywgZXZlbiBgICtcbiAgICAgICAgICBgdGhvdWdoIHRoZXkgd2VyZSByZWdpc3RlcmVkIHRvIGhhbmRsZSBpdDogJHtKU09OLnN0cmluZ2lmeShkaWRudEhhbmRsZSl9LiBUaGUgYCArXG4gICAgICAgICAgYGNvbW1hbmQgKndhcyogaGFuZGxlZCBieSB0aGVzZTogJHtKU09OLnN0cmluZ2lmeShkaWRIYW5kbGUpfS5gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVXcmFwcGVkQ29tbWFuZCh7d3JhcHBlZENtZCwgcHJvdG9jb2x9KSB7XG4gICAgbGV0IGNtZFJlcyxcbiAgICAgIGNtZEVycixcbiAgICAgIHJlcyA9IHt9O1xuICAgIHRyeSB7XG4gICAgICAvLyBBdCB0aGlzIHBvaW50LCBgd3JhcHBlZENtZGAgZGVmaW5lcyBhIHdob2xlIHNlcXVlbmNlIG9mIHBsdWdpbiBoYW5kbGVycywgY3VsbWluYXRpbmcgaW5cbiAgICAgIC8vIG91ciBkZWZhdWx0IGhhbmRsZXIuIFdoYXRldmVyIGl0IHJldHVybnMgaXMgd2hhdCB3ZSdyZSBnb2luZyB0byB3YW50IHRvIHNlbmQgYmFjayB0byB0aGVcbiAgICAgIC8vIHVzZXIuXG4gICAgICBjbWRSZXMgPSBhd2FpdCB3cmFwcGVkQ21kKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY21kRXJyID0gZTtcbiAgICB9XG5cbiAgICAvLyBTYWRseSwgd2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQga2luZCBvZiBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZC4gSXQgd2lsbCBlaXRoZXIgYmUgYSBiYXJlXG4gICAgLy8gb2JqZWN0LCBvciBhIHByb3RvY29sLWF3YXJlIG9iamVjdCB3aXRoIHByb3RvY29sIGFuZCBlcnJvci92YWx1ZSBrZXlzLiBTbyB3ZSBuZWVkIHRvIHNuaWZmXG4gICAgLy8gaXQgYW5kIG1ha2Ugc3VyZSB3ZSBkb24ndCBkb3VibGUtd3JhcCBpdCBpZiBpdCdzIHRoZSBsYXR0ZXIga2luZC5cbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGNtZFJlcykgJiYgXy5oYXMoY21kUmVzLCAncHJvdG9jb2wnKSkge1xuICAgICAgcmVzID0gY21kUmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMudmFsdWUgPSBjbWRSZXM7XG4gICAgICByZXMuZXJyb3IgPSBjbWRFcnI7XG4gICAgICByZXMucHJvdG9jb2wgPSBwcm90b2NvbDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByb3h5QWN0aXZlKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gJiYgXy5pc0Z1bmN0aW9uKGRzdFNlc3Npb24ucHJveHlBY3RpdmUpICYmIGRzdFNlc3Npb24ucHJveHlBY3RpdmUoc2Vzc2lvbklkKTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0KHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gPyBkc3RTZXNzaW9uLmdldFByb3h5QXZvaWRMaXN0KCkgOiBbXTtcbiAgfVxuXG4gIGNhblByb3h5KHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gJiYgZHN0U2Vzc2lvbi5jYW5Qcm94eShzZXNzaW9uSWQpO1xuICB9XG59XG5cbi8vIGhlbHAgZGVjaWRlIHdoaWNoIGNvbW1hbmRzIHNob3VsZCBiZSBwcm94aWVkIHRvIHN1Yi1kcml2ZXJzIGFuZCB3aGljaFxuLy8gc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhpcywgb3VyIHVtYnJlbGxhIGRyaXZlclxuZnVuY3Rpb24gaXNBcHBpdW1Ecml2ZXJDb21tYW5kKGNtZCkge1xuICByZXR1cm4gIWlzU2Vzc2lvbkNvbW1hbmQoY21kKSB8fCBjbWQgPT09IERFTEVURV9TRVNTSU9OX0NPTU1BTkQ7XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gQXBwaXVtIHRyaWVkIHRvIHByb3h5IGEgY29tbWFuZCB1c2luZyBhIGRyaXZlcidzIGBwcm94eUNvbW1hbmRgIG1ldGhvZCBidXQgdGhlXG4gKiBtZXRob2QgZGlkIG5vdCBleGlzdFxuICovXG5leHBvcnQgY2xhc3MgTm9Ecml2ZXJQcm94eUNvbW1hbmRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTxzdHJpbmc+fVxuICAgKi9cbiAgY29kZSA9ICdBUFBJVU1FUlJfTk9fRFJJVkVSX1BST1hZQ09NTUFORCc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBgVGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoaXMgY29tbWFuZCB3YXMgdG8gcHJveHksIGJ1dCB0aGUgZHJpdmVyIGAgK1xuICAgICAgICBgZGlkIG5vdCBoYXZlIHRoZSAncHJveHlDb21tYW5kJyBtZXRob2QgZGVmaW5lZC4gVG8gZnVsbHkgc3VwcG9ydCBgICtcbiAgICAgICAgYHBsdWdpbnMsIGRyaXZlcnMgc2hvdWxkIGhhdmUgJ3Byb3h5Q29tbWFuZCcgc2V0IHRvIGEgandwUHJveHkgb2JqZWN0J3MgYCArXG4gICAgICAgIGAnY29tbWFuZCgpJyBtZXRob2QsIGluIGFkZGl0aW9uIHRvIHRoZSBub3JtYWwgJ3Byb3h5UmVxUmVzJ2BcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCB7QXBwaXVtRHJpdmVyfTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRXh0ZXJuYWxEcml2ZXJ9IEV4dGVybmFsRHJpdmVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVyfSBEcml2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJDbGFzc30gRHJpdmVyQ2xhc3NcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5XM0NDYXBhYmlsaXRpZXN9IFczQ0NhcGFiaWxpdGllc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlckRhdGF9IERyaXZlckRhdGFcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5TZXJ2ZXJBcmdzfSBEcml2ZXJPcHRzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ29uc3RyYWludHN9IENvbnN0cmFpbnRzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBwaXVtU2VydmVyfSBBcHBpdW1TZXJ2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2V4dGVuc2lvbi9kcml2ZXItY29uZmlnJykuRHJpdmVyQ29uZmlnfSBEcml2ZXJDb25maWdcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5QbHVnaW59IFBsdWdpblxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlBsdWdpbkNsYXNzfSBQbHVnaW5DbGFzc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlBsdWdpblR5cGV9IFBsdWdpblR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJUeXBlfSBEcml2ZXJUeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuU2Vzc2lvbkhhbmRsZXI8U2Vzc2lvbkhhbmRsZXJSZXN1bHQ8YW55W10+LFNlc3Npb25IYW5kbGVyUmVzdWx0PHZvaWQ+Pn0gU2Vzc2lvbkhhbmRsZXJcbiAqL1xuXG4vKipcbiAqIFVzZWQgYnkge0BsaW5rY29kZSBBcHBpdW1Ecml2ZXIuY3JlYXRlU2Vzc2lvbn0gYW5kIHtAbGlua2NvZGUgQXBwaXVtRHJpdmVyLmRlbGV0ZVNlc3Npb259IHRvIGRlc2NyaWJlXG4gKiByZXN1bHQuXG4gKiBAdGVtcGxhdGUgVlxuICogQHR5cGVkZWYgU2Vzc2lvbkhhbmRsZXJSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7Vn0gW3ZhbHVlXVxuICogQHByb3BlcnR5IHtFcnJvcn0gW2Vycm9yXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwcm90b2NvbF1cbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQVNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQU1BLE1BQU1BLDRCQUE0QixHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBYztFQUNqREMsY0FBYyxFQUFFO0lBQ2RDLFFBQVEsRUFBRSxJQURJO0lBRWRDLFFBQVEsRUFBRTtFQUZJLENBRGlDO0VBS2pEQyxZQUFZLEVBQUU7SUFDWkYsUUFBUSxFQUFFLElBREU7SUFFWkMsUUFBUSxFQUFFO0VBRkU7QUFMbUMsQ0FBZCxDQUFyQztBQVdBLE1BQU1FLGlCQUFpQixHQUFHLElBQUlDLGtCQUFKLEVBQTFCO0FBQ0EsTUFBTUMsbUJBQW1CLEdBQUcsSUFBSUQsa0JBQUosRUFBNUI7O0FBS0EsTUFBTUUsWUFBTixTQUEyQkMsc0JBQTNCLENBQXNDO0VBT3BDQyxRQUFRLEdBQUcsRUFBSDtFQVFSQyxjQUFjLEdBQUcsRUFBSDtFQU9kQyxtQkFBbUIsR0FBRyxDQUFIO0VBTW5CQyxhQUFhO0VBTWJDLGNBQWMsR0FBRyxFQUFIO0VBTWRDLGtCQUFrQixHQUFHLEVBQUg7RUFHbEJDLFlBQVk7RUFHWkMsTUFBTTtFQUVOQyxxQkFBcUIsR0FBR3BCLDRCQUFIO0VBR3JCcUIsSUFBSTs7RUFLSkMsV0FBVyxDQUFDQyxJQUFELEVBQU87SUFLaEIsSUFBSUEsSUFBSSxDQUFDQyxNQUFULEVBQWlCO01BQ2ZDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxjQUFaLEdBQTZCSixJQUFJLENBQUNDLE1BQWxDO0lBQ0Q7O0lBRUQsTUFBTUQsSUFBTjtJQUVBLEtBQUtGLElBQUwsR0FBWSxFQUFDLEdBQUdFO0lBQUosQ0FBWjs7SUFHQSxDQUFDLFlBQVk7TUFDWCxJQUFJO1FBQ0YsTUFBTSxJQUFBSyx1QkFBQSxHQUFOO01BQ0QsQ0FGRCxDQUVFLE9BQU9DLENBQVAsRUFBVTtRQUVWLEtBQUtDLEdBQUwsQ0FBU0MsS0FBVCxDQUFnQixtQ0FBa0NGLENBQUMsQ0FBQ0csT0FBUSxFQUE1RDtNQUNEO0lBQ0YsQ0FQRDtFQVFEOztFQUtNLElBQUhGLEdBQUcsR0FBRztJQUNSLElBQUksQ0FBQyxLQUFLRyxJQUFWLEVBQWdCO01BQ2QsTUFBTUMsWUFBWSxHQUFJLEdBQUUsS0FBS1osV0FBTCxDQUFpQmEsSUFBSyxJQUFHQyxhQUFBLENBQUtDLFdBQUwsQ0FBaUIsSUFBakIsRUFBdUJDLFNBQXZCLENBQWlDLENBQWpDLEVBQW9DLENBQXBDLENBQXVDLEVBQXhGO01BQ0EsS0FBS0wsSUFBTCxHQUFZTSxlQUFBLENBQU9DLFNBQVAsQ0FBaUJOLFlBQWpCLENBQVo7SUFDRDs7SUFDRCxPQUFPLEtBQUtELElBQVo7RUFDRDs7RUFLeUIsSUFBdEJRLHNCQUFzQixHQUFHO0lBQzNCLE9BQU8sS0FBUDtFQUNEOztFQUVEQyxhQUFhLENBQUNDLFNBQUQsRUFBWTtJQUN2QixNQUFNQyxVQUFVLEdBQUcsS0FBS2hDLFFBQUwsQ0FBYytCLFNBQWQsQ0FBbkI7SUFDQSxPQUFPQyxVQUFVLElBQUlBLFVBQVUsQ0FBQ0QsU0FBWCxLQUF5QixJQUE5QztFQUNEOztFQUVERSxnQkFBZ0IsQ0FBQ0YsU0FBRCxFQUFZO0lBQzFCLE9BQU8sS0FBSy9CLFFBQUwsQ0FBYytCLFNBQWQsQ0FBUDtFQUNEOztFQUdjLE1BQVRHLFNBQVMsR0FBRztJQUNoQixPQUFPO01BQ0xDLEtBQUssRUFBRUMsZUFBQSxDQUFFQyxLQUFGLENBQVEsSUFBQUMsb0JBQUEsR0FBUjtJQURGLENBQVA7RUFHRDs7RUFHZ0IsTUFBWEMsV0FBVyxHQUFHO0lBQ2xCLE9BQU9ILGVBQUEsQ0FBRUksT0FBRixDQUFVLEtBQUt4QyxRQUFmLEVBQXlCeUMsR0FBekIsQ0FBNkIsQ0FBQyxDQUFDQyxFQUFELEVBQUtDLE1BQUwsQ0FBRCxNQUFtQjtNQUNyREQsRUFEcUQ7TUFFckRFLFlBQVksRUFBRUQsTUFBTSxDQUFDRTtJQUZnQyxDQUFuQixDQUE3QixDQUFQO0VBSUQ7O0VBRURDLDJCQUEyQixDQUFDQyxVQUFELEVBQWFDLGFBQWIsRUFBNEJDLGlCQUE1QixFQUErQztJQUN4RSxLQUFLL0IsR0FBTCxDQUFTZ0MsSUFBVCxDQUNFRixhQUFhLEdBQ1IsV0FBVUcsa0JBQVcsaUJBQWdCSixVQUFXLE1BQUtDLGFBQWMsV0FEM0QsR0FFUixXQUFVRyxrQkFBVyxpQkFBZ0JKLFVBQVcsVUFIdkQ7SUFLQSxLQUFLN0IsR0FBTCxDQUFTZ0MsSUFBVCxDQUFlLCtDQUE4Q0gsVUFBVyxFQUF4RTtJQUNBLEtBQUs3QixHQUFMLENBQVNnQyxJQUFULENBQ0VwRCxZQUFZLENBQUNzRCxXQUFiLEdBQ0ssa0NBQWlDdEQsWUFBWSxDQUFDc0QsV0FBWSxFQUQvRCxHQUVLLGlEQUhQO0lBS0EsS0FBS2xDLEdBQUwsQ0FBU2dDLElBQVQsQ0FDRUQsaUJBQWlCLEdBQ1osR0FBRUYsVUFBVyw0QkFBMkJFLGlCQUFrQixFQUQ5QyxHQUVaLHVCQUFzQkYsVUFBVyx1QkFIeEM7RUFLRDs7RUFPRE0sbUJBQW1CLENBQUNDLE9BQUQsRUFBVTtJQUFBOztJQUMzQixPQUE4QywyQkFBSzdDLElBQUwsQ0FBVThDLE1BQVYsd0VBQW1CRCxPQUFuQixNQUErQixFQUE3RTtFQUNEOztFQVdERSxtQkFBbUIsQ0FBQ0YsT0FBRCxFQUFVO0lBQUE7O0lBQzNCLE1BQU1HLGdCQUFnQix3QkFDcEIsS0FBS2hELElBQUwsQ0FBVWtDLE1BRFUsc0RBQ3BCLGtCQUFtQlcsT0FBbkIsQ0FERjs7SUFJQSxJQUFJLENBQUNsQixlQUFBLENBQUVzQixPQUFGLENBQVVELGdCQUFWLENBQUwsRUFBa0M7TUFDaEMsTUFBTUUsUUFBUSxHQUFHLElBQUFDLCtCQUFBLEVBQXdCQyxzQkFBeEIsRUFBcUNQLE9BQXJDLENBQWpCO01BQ0EsTUFBTVEsT0FBTyxHQUFHMUIsZUFBQSxDQUFFc0IsT0FBRixDQUFVQyxRQUFWLElBQ1pGLGdCQURZLEdBRVpyQixlQUFBLENBQUUyQixNQUFGLENBQVNOLGdCQUFULEVBQTJCLENBQUNPLEtBQUQsRUFBUUMsR0FBUixLQUFnQjdCLGVBQUEsQ0FBRThCLE9BQUYsQ0FBVVAsUUFBUSxDQUFDTSxHQUFELENBQWxCLEVBQXlCRCxLQUF6QixDQUEzQyxDQUZKOztNQUdBLElBQUksQ0FBQzVCLGVBQUEsQ0FBRXNCLE9BQUYsQ0FBVUksT0FBVixDQUFMLEVBQXlCO1FBQ3ZCLE9BQU9BLE9BQVA7TUFDRDtJQUNGO0VBQ0Y7O0VBU2tCLE1BQWJLLGFBQWEsQ0FBQ0MsVUFBRCxFQUFhQyxPQUFiLEVBQXNCQyxlQUF0QixFQUF1Q0MsVUFBdkMsRUFBbUQ7SUFDcEUsTUFBTUMsbUJBQW1CLEdBQUdwQyxlQUFBLENBQUVxQyxTQUFGLENBQVksS0FBS2hFLElBQUwsQ0FBVStELG1CQUF0QixDQUE1Qjs7SUFDQSxNQUFNRSxlQUFlLEdBQUcsSUFBQUMsbUJBQUEsRUFBYUgsbUJBQWIsQ0FBeEI7SUFDQUosVUFBVSxHQUFHaEMsZUFBQSxDQUFFcUMsU0FBRixDQUFZTCxVQUFaLENBQWI7SUFDQSxNQUFNUSxXQUFXLEdBQUcsRUFBQyxHQUFHRixlQUFKO01BQXFCLEdBQUcsSUFBQUMsbUJBQUEsRUFBYVAsVUFBYjtJQUF4QixDQUFwQjtJQUNBRSxlQUFlLEdBQUdsQyxlQUFBLENBQUVxQyxTQUFGLENBQVlILGVBQVosQ0FBbEI7SUFLQSxNQUFNTyxXQUFXLEdBQUcsRUFDbEIsR0FBR0QsV0FEZTtNQUVsQixHQUFHLElBQUFELG1CQUFBLEVBQWEsQ0FBQ0wsZUFBZSxJQUFJLEVBQXBCLEVBQXdCUSxXQUF4QixJQUF1QyxFQUFwRDtJQUZlLENBQXBCOztJQUlBLEtBQUssTUFBTUMsZUFBWCxJQUE4QixDQUFDVCxlQUFlLElBQUksRUFBcEIsRUFBd0JVLFVBQXhCLElBQXNDLEVBQXBFLEVBQXdFO01BQ3RFM0YsTUFBTSxDQUFDNEYsTUFBUCxDQUFjSixXQUFkLEVBQTJCLElBQUFGLG1CQUFBLEVBQWFJLGVBQWIsQ0FBM0I7SUFDRDs7SUFFRCxJQUFJRyxRQUFKO0lBQ0EsSUFBSUMsY0FBSixFQUFvQkMsS0FBcEI7O0lBQ0EsSUFBSTtNQUVGLE1BQU1DLFVBQVUsR0FBRyxJQUFBQyw4QkFBQSxFQUNqQmxCLFVBRGlCLEVBRWpCRSxlQUZpQixFQUdqQixLQUFLOUQscUJBSFksRUFJakJnRSxtQkFKaUIsQ0FBbkI7TUFPQSxNQUFNO1FBQUNlLFdBQUQ7UUFBY0MsMkJBQWQ7UUFBMkNDO01BQTNDLElBQytDSixVQURyRDtNQUVBSCxRQUFRLEdBQUdHLFVBQVUsQ0FBQ0gsUUFBdEI7TUFDQSxNQUFNUSxLQUFLLEdBQWlETCxVQUFELENBQWFLLEtBQXhFOztNQUVBLElBQUlBLEtBQUosRUFBVztRQUNULE1BQU1BLEtBQU47TUFDRDs7TUFFRCxNQUFNO1FBQ0ovQyxNQUFNLEVBQUVnRCxXQURKO1FBRUpDLE9BQU8sRUFBRTVDLGFBRkw7UUFHSkQ7TUFISSxJQUlGLEtBQUt6QyxZQUFMLENBQWtCdUYsa0JBQWxCLENBQXFDTixXQUFyQyxDQUpKO01BS0EsS0FBS3pDLDJCQUFMLENBQWlDNkMsV0FBVyxDQUFDcEUsSUFBN0MsRUFBbUR5QixhQUFuRCxFQUFrRTJDLFdBQVcsQ0FBQ3ZDLFdBQTlFOztNQUVBLElBQUksS0FBSzNDLElBQUwsQ0FBVXFGLGVBQWQsRUFBK0I7UUFDN0IsTUFBTSxLQUFLQyxpQkFBTCxFQUFOO01BQ0Q7O01BS0QsSUFBSUMsa0JBQWtCLEdBQUcsRUFBekI7TUFJQSxJQUFJQyx1QkFBdUIsR0FBRyxFQUE5QjtNQUVBLE1BQU1DLGNBQWMsR0FBRyxJQUFJUCxXQUFKLENBQWdCLEtBQUtsRixJQUFyQixFQUEyQixJQUEzQixDQUF2Qjs7TUFNQSxJQUFJLEtBQUtBLElBQUwsQ0FBVTBGLHNCQUFkLEVBQXNDO1FBQ3BDLEtBQUtqRixHQUFMLENBQVNnQyxJQUFULENBQ0csaUNBQWdDeUMsV0FBVyxDQUFDcEUsSUFBSyxXQUFsRCxHQUNHLDhEQURILEdBRUcsdURBSEw7UUFLQTJFLGNBQWMsQ0FBQ0Msc0JBQWYsR0FBd0MsSUFBeEM7TUFDRDs7TUFFRCxJQUFJLENBQUMvRCxlQUFBLENBQUVzQixPQUFGLENBQVUsS0FBS2pELElBQUwsQ0FBVTJGLFlBQXBCLENBQUwsRUFBd0M7UUFDdEMsS0FBS2xGLEdBQUwsQ0FBU2dDLElBQVQsQ0FBYyxpREFBZDtRQUNBLEtBQUt6QyxJQUFMLENBQVUyRixZQUFWLENBQXVCM0QsR0FBdkIsQ0FBNEI0RCxDQUFELElBQU8sS0FBS25GLEdBQUwsQ0FBU2dDLElBQVQsQ0FBZSxPQUFNbUQsQ0FBRSxFQUF2QixDQUFsQztRQUNBSCxjQUFjLENBQUNFLFlBQWYsR0FBOEIsS0FBSzNGLElBQUwsQ0FBVTJGLFlBQXhDO01BQ0Q7O01BRUQsSUFBSSxDQUFDaEUsZUFBQSxDQUFFc0IsT0FBRixDQUFVLEtBQUtqRCxJQUFMLENBQVU2RixhQUFwQixDQUFMLEVBQXlDO1FBQ3ZDLEtBQUtwRixHQUFMLENBQVNnQyxJQUFULENBQWMsK0NBQWQ7UUFDQSxLQUFLekMsSUFBTCxDQUFVNkYsYUFBVixDQUF3QjdELEdBQXhCLENBQTZCNEQsQ0FBRCxJQUFPLEtBQUtuRixHQUFMLENBQVNnQyxJQUFULENBQWUsT0FBTW1ELENBQUUsRUFBdkIsQ0FBbkM7UUFDQUgsY0FBYyxDQUFDSSxhQUFmLEdBQStCLEtBQUs3RixJQUFMLENBQVU2RixhQUF6QztNQUNEOztNQUlELE1BQU14QyxPQUFPLEdBQUcsS0FBS04sbUJBQUwsQ0FBeUJULFVBQXpCLENBQWhCOztNQUNBLElBQUksQ0FBQ1gsZUFBQSxDQUFFc0IsT0FBRixDQUFVSSxPQUFWLENBQUwsRUFBeUI7UUFDdkJvQyxjQUFjLENBQUNwQyxPQUFmLEdBQXlCQSxPQUF6QjtNQUNEOztNQU1Eb0MsY0FBYyxDQUFDM0YsTUFBZixHQUF3QixLQUFLQSxNQUE3QjtNQUNBMkYsY0FBYyxDQUFDSyxVQUFmLEdBQTRCLEtBQUs5RixJQUFMLENBQVUrRixPQUF0QztNQUNBTixjQUFjLENBQUNPLFVBQWYsR0FBNEIsS0FBS2hHLElBQUwsQ0FBVWlHLElBQXRDO01BQ0FSLGNBQWMsQ0FBQ1MsVUFBZixHQUE0QixLQUFLbEcsSUFBTCxDQUFVbUcsUUFBdEM7O01BRUEsSUFBSTtRQUNGWixrQkFBa0IsR0FBRyxDQUFDLE1BQU0sS0FBS2EsdUJBQUwsQ0FBNkJsQixXQUE3QixDQUFQLEtBQXFELEVBQTFFO01BQ0QsQ0FGRCxDQUVFLE9BQU8xRSxDQUFQLEVBQVU7UUFDVixNQUFNLElBQUk2RixrQkFBQSxDQUFPQyxzQkFBWCxDQUFrQzlGLENBQUMsQ0FBQ0csT0FBcEMsQ0FBTjtNQUNEOztNQUNELE1BQU12QixtQkFBbUIsQ0FBQ21ILE9BQXBCLENBQTRCbEgsWUFBWSxDQUFDeUIsSUFBekMsRUFBK0MsTUFBTTtRQUN6RCxLQUFLdEIsY0FBTCxDQUFvQjBGLFdBQVcsQ0FBQ3BFLElBQWhDLElBQXdDLEtBQUt0QixjQUFMLENBQW9CMEYsV0FBVyxDQUFDcEUsSUFBaEMsS0FBeUMsRUFBakY7UUFDQTBFLHVCQUF1QixHQUFHN0QsZUFBQSxDQUFFNkUsT0FBRixDQUN4QixLQUFLaEgsY0FBTCxDQUFvQjBGLFdBQVcsQ0FBQ3BFLElBQWhDLEVBQXNDa0IsR0FBdEMsQ0FBMkN5RSxHQUFELElBQVNBLEdBQUcsQ0FBQzNDLFVBQXZELENBRHdCLENBQTFCO1FBR0EsS0FBS3RFLGNBQUwsQ0FBb0IwRixXQUFXLENBQUNwRSxJQUFoQyxFQUFzQzRGLElBQXRDLENBQTJDakIsY0FBM0M7TUFDRCxDQU5LLENBQU47O01BUUEsSUFBSTtRQUNGLENBQUNmLGNBQUQsRUFBaUJDLEtBQWpCLElBQTBCLE1BQU1jLGNBQWMsQ0FBQy9CLGFBQWYsQ0FDOUJxQiwyQkFEOEIsRUFFOUJuQixPQUY4QixFQUc5Qm9CLHdCQUg4QixFQUk5QixDQUFDLEdBQUdPLGtCQUFKLEVBQXdCLEdBQUdDLHVCQUEzQixDQUo4QixDQUFoQztRQU1BZixRQUFRLEdBQUdnQixjQUFjLENBQUNoQixRQUExQjtRQUNBLEtBQUtsRixRQUFMLENBQWNtRixjQUFkLElBQWdDZSxjQUFoQztNQUNELENBVEQsU0FTVTtRQUNSLE1BQU1yRyxtQkFBbUIsQ0FBQ21ILE9BQXBCLENBQTRCbEgsWUFBWSxDQUFDeUIsSUFBekMsRUFBK0MsTUFBTTtVQUN6RGEsZUFBQSxDQUFFZ0YsSUFBRixDQUFPLEtBQUtuSCxjQUFMLENBQW9CMEYsV0FBVyxDQUFDcEUsSUFBaEMsQ0FBUCxFQUE4QzJFLGNBQTlDO1FBQ0QsQ0FGSyxDQUFOO01BR0Q7O01BRUQsS0FBS21CLCtCQUFMLENBQXFDbkIsY0FBckMsRUFBcURmLGNBQXJEO01BRUEsS0FBS2pFLEdBQUwsQ0FBU2dDLElBQVQsQ0FDRyxPQUFNeUMsV0FBVyxDQUFDcEUsSUFBSyx5Q0FBeEIsR0FDRyxHQUFFNEQsY0FBZSwrQkFGdEI7TUFNQWUsY0FBYyxDQUFDb0Isc0JBQWY7O01BR0EsSUFBSXBCLGNBQWMsQ0FBQ3FCLGFBQWYsTUFBa0MsQ0FBQ25GLGVBQUEsQ0FBRXNCLE9BQUYsQ0FBVW1CLFdBQVYsQ0FBdkMsRUFBK0Q7UUFDN0QsS0FBSzNELEdBQUwsQ0FBU2dDLElBQVQsQ0FDRyx1RUFBRCxHQUNFc0UsSUFBSSxDQUFDQyxTQUFMLENBQWU1QyxXQUFmLENBRko7UUFJQSxNQUFNcUIsY0FBYyxDQUFDd0IsY0FBZixDQUE4QjdDLFdBQTlCLENBQU47TUFDRCxDQU5ELE1BTU8sSUFBSXFCLGNBQWMsQ0FBQ3lCLGlCQUFmLE1BQXNDLENBQUN2RixlQUFBLENBQUVzQixPQUFGLENBQVVrQixXQUFWLENBQTNDLEVBQW1FO1FBQ3hFLEtBQUsxRCxHQUFMLENBQVNnQyxJQUFULENBQ0csMkVBQUQsR0FDRXNFLElBQUksQ0FBQ0MsU0FBTCxDQUFlN0MsV0FBZixDQUZKO1FBSUEsTUFBTXNCLGNBQWMsQ0FBQ3dCLGNBQWYsQ0FBOEI5QyxXQUE5QixDQUFOO01BQ0Q7SUFDRixDQXJJRCxDQXFJRSxPQUFPYyxLQUFQLEVBQWM7TUFDZCxPQUFPO1FBQ0xSLFFBREs7UUFFTFE7TUFGSyxDQUFQO0lBSUQ7O0lBRUQsT0FBTztNQUNMUixRQURLO01BRUxsQixLQUFLLEVBQUUsQ0FBQ21CLGNBQUQsRUFBaUJDLEtBQWpCLEVBQXdCRixRQUF4QjtJQUZGLENBQVA7RUFJRDs7RUFPRG1DLCtCQUErQixDQUFDMUUsTUFBRCxFQUFTd0MsY0FBVCxFQUF5QjtJQUN0RCxNQUFNeUMsVUFBVSxHQUFHLENBQUNDLEtBQUssR0FBRyxJQUFJQyxLQUFKLENBQVUsZUFBVixDQUFULEtBQXdDO01BQ3pELEtBQUs1RyxHQUFMLENBQVM2RyxJQUFULENBQWUsOEJBQTZCRixLQUFLLENBQUN6RyxPQUFRLEdBQTFEOztNQUVBLElBQUksS0FBS2hCLGNBQUwsQ0FBb0IrRSxjQUFwQixDQUFKLEVBQXlDO1FBQ3ZDLEtBQUssTUFBTTVCLE1BQVgsSUFBcUIsS0FBS25ELGNBQUwsQ0FBb0IrRSxjQUFwQixDQUFyQixFQUEwRDtVQUN4RCxJQUFJL0MsZUFBQSxDQUFFNEYsVUFBRixDQUFhekUsTUFBTSxDQUFDMEUsb0JBQXBCLENBQUosRUFBK0M7WUFDN0MsS0FBSy9HLEdBQUwsQ0FBU0MsS0FBVCxDQUNHLFVBQVNvQyxNQUFNLENBQUNoQyxJQUFLLHlEQUR4Qjs7WUFHQSxJQUFJO2NBQ0ZnQyxNQUFNLENBQUMwRSxvQkFBUCxDQUE0QnRGLE1BQTVCLEVBQW9Da0YsS0FBcEM7WUFDRCxDQUZELENBRUUsT0FBTzVHLENBQVAsRUFBVTtjQUNWLEtBQUtDLEdBQUwsQ0FBUzZHLElBQVQsQ0FDRyxvQ0FBbUN4RSxNQUFNLENBQUNoQyxJQUFLLHNCQUFxQk4sQ0FBRSxFQUR6RTtZQUdEO1VBQ0YsQ0FYRCxNQVdPO1lBQ0wsS0FBS0MsR0FBTCxDQUFTQyxLQUFULENBQWdCLFVBQVNvQyxNQUFNLENBQUNoQyxJQUFLLGlEQUFyQztVQUNEO1FBQ0Y7TUFDRjs7TUFFRCxLQUFLTCxHQUFMLENBQVNnQyxJQUFULENBQWUscUJBQW9CaUMsY0FBZSxnQ0FBbEQ7TUFDQSxPQUFPLEtBQUtuRixRQUFMLENBQWNtRixjQUFkLENBQVA7TUFDQSxPQUFPLEtBQUsvRSxjQUFMLENBQW9CK0UsY0FBcEIsQ0FBUDtJQUNELENBekJEOztJQTJCQSxJQUFJL0MsZUFBQSxDQUFFNEYsVUFBRixDQUFhckYsTUFBTSxDQUFDc0Ysb0JBQXBCLENBQUosRUFBK0M7TUFDN0N0RixNQUFNLENBQUNzRixvQkFBUCxDQUE0QkwsVUFBNUI7SUFDRCxDQUZELE1BRU87TUFDTCxLQUFLMUcsR0FBTCxDQUFTNkcsSUFBVCxDQUNHLHFEQUFELEdBQ0csbURBQWtEcEYsTUFBTSxDQUFDakMsV0FBUCxDQUFtQmEsSUFBSyxJQUYvRTtJQUlEO0VBQ0Y7O0VBUTRCLE1BQXZCc0YsdUJBQXVCLENBQUNsQixXQUFELEVBQWM7SUFDekMsTUFBTXVDLElBQUksR0FBRzlGLGVBQUEsQ0FBRTZFLE9BQUYsQ0FDWDdFLGVBQUEsQ0FBRStGLE1BQUYsQ0FBUyxLQUFLbkksUUFBZCxFQUNHb0ksTUFESCxDQUNXQyxDQUFELElBQU9BLENBQUMsQ0FBQzNILFdBQUYsQ0FBY2EsSUFBZCxLQUF1Qm9FLFdBQVcsQ0FBQ3BFLElBRHBELEVBRUdrQixHQUZILENBRVE0RixDQUFELElBQU9BLENBQUMsQ0FBQzlELFVBRmhCLENBRFcsQ0FBYjs7SUFLQSxLQUFLLE1BQU0rRCxLQUFYLElBQW9CSixJQUFwQixFQUEwQjtNQUN4QixJQUFJLENBQUNJLEtBQUwsRUFBWTtRQUNWLE1BQU0sSUFBSVIsS0FBSixDQUNILCtDQUFELEdBQ0csR0FBRW5DLFdBQVcsQ0FBQ3BFLElBQUssdUNBRmxCLENBQU47TUFJRDtJQUNGOztJQUNELE9BQU8yRyxJQUFQO0VBQ0Q7O0VBS2tCLE1BQWJLLGFBQWEsQ0FBQ3hHLFNBQUQsRUFBWTtJQUM3QixJQUFJbUQsUUFBSjs7SUFDQSxJQUFJO01BQ0YsSUFBSXNELGlCQUFKO01BQ0EsTUFBTXhHLFVBQVUsR0FBRyxNQUFNckMsaUJBQWlCLENBQUNxSCxPQUFsQixDQUEwQmxILFlBQVksQ0FBQ3lCLElBQXZDLEVBQTZDLE1BQU07UUFDMUUsSUFBSSxDQUFDLEtBQUt2QixRQUFMLENBQWMrQixTQUFkLENBQUwsRUFBK0I7VUFDN0I7UUFDRDs7UUFDRCxNQUFNMEcsa0JBQWtCLEdBQUcsS0FBS3pJLFFBQUwsQ0FBYytCLFNBQWQsRUFBeUJyQixXQUF6QixDQUFxQ2EsSUFBaEU7UUFDQWlILGlCQUFpQixHQUFHcEcsZUFBQSxDQUFFSSxPQUFGLENBQVUsS0FBS3hDLFFBQWYsRUFDakJvSSxNQURpQixDQUVoQixDQUFDLENBQUNuRSxHQUFELEVBQU1ELEtBQU4sQ0FBRCxLQUFrQkEsS0FBSyxDQUFDdEQsV0FBTixDQUFrQmEsSUFBbEIsS0FBMkJrSCxrQkFBM0IsSUFBaUR4RSxHQUFHLEtBQUtsQyxTQUYzRCxFQUlqQlUsR0FKaUIsQ0FJYixDQUFDLEdBQUd1QixLQUFILENBQUQsS0FBZUEsS0FBSyxDQUFDTyxVQUpSLENBQXBCO1FBS0EsTUFBTXZDLFVBQVUsR0FBRyxLQUFLaEMsUUFBTCxDQUFjK0IsU0FBZCxDQUFuQjtRQUNBbUQsUUFBUSxHQUFHbEQsVUFBVSxDQUFDa0QsUUFBdEI7UUFDQSxLQUFLaEUsR0FBTCxDQUFTZ0MsSUFBVCxDQUFlLG9CQUFtQm5CLFNBQVUsK0JBQTVDO1FBSUEsT0FBTyxLQUFLL0IsUUFBTCxDQUFjK0IsU0FBZCxDQUFQO1FBQ0EsT0FBTyxLQUFLM0IsY0FBTCxDQUFvQjJCLFNBQXBCLENBQVA7UUFDQSxPQUFPQyxVQUFQO01BQ0QsQ0FuQndCLENBQXpCOztNQXNCQSxJQUFJLENBQUNBLFVBQUwsRUFBaUI7UUFDZixNQUFNLElBQUk4RixLQUFKLENBQVUsbUJBQVYsQ0FBTjtNQUNEOztNQUNELE9BQU87UUFDTDVDLFFBREs7UUFFTGxCLEtBQUssRUFBRSxNQUFNaEMsVUFBVSxDQUFDdUcsYUFBWCxDQUF5QnhHLFNBQXpCLEVBQW9DeUcsaUJBQXBDO01BRlIsQ0FBUDtJQUlELENBL0JELENBK0JFLE9BQU92SCxDQUFQLEVBQVU7TUFDVixLQUFLQyxHQUFMLENBQVN3RSxLQUFULENBQWdCLDhCQUE2QjNELFNBQVUsS0FBSWQsQ0FBQyxDQUFDRyxPQUFRLEVBQXJFO01BQ0EsT0FBTztRQUNMOEQsUUFESztRQUVMUSxLQUFLLEVBQUV6RTtNQUZGLENBQVA7SUFJRDtFQUNGOztFQUVzQixNQUFqQjhFLGlCQUFpQixDQUFDcEYsSUFBSSxHQUFHLEVBQVIsRUFBWTtJQUNqQyxNQUFNK0gsYUFBYSxHQUFHdEcsZUFBQSxDQUFFdUcsSUFBRixDQUFPLEtBQUszSSxRQUFaLENBQXRCOztJQUNBLElBQUksTUFBTTBJLGFBQVYsRUFBeUI7TUFDdkIsS0FBS3hILEdBQUwsQ0FBU0MsS0FBVCxDQUFlLDBDQUFmO01BQ0E7SUFDRDs7SUFFRCxNQUFNO01BQUN5SCxLQUFLLEdBQUcsS0FBVDtNQUFnQkM7SUFBaEIsSUFBMEJsSSxJQUFoQztJQUNBLEtBQUtPLEdBQUwsQ0FBU0MsS0FBVCxDQUFnQixlQUFjMkgsYUFBQSxDQUFLQyxTQUFMLENBQWUsZ0JBQWYsRUFBaUNMLGFBQWpDLEVBQWdELElBQWhELENBQXNELEVBQXBGO0lBQ0EsTUFBTU0sZUFBZSxHQUFHSixLQUFLLEdBQ3pCeEcsZUFBQSxDQUFFK0YsTUFBRixDQUFTLEtBQUtuSSxRQUFkLEVBQXdCeUMsR0FBeEIsQ0FBNkJ5RSxHQUFELElBQzFCQSxHQUFHLENBQUMrQix1QkFBSixDQUE0QkosTUFBTSxJQUFJLElBQUlmLEtBQUosQ0FBVWUsTUFBVixDQUF0QyxDQURGLENBRHlCLEdBSXpCekcsZUFBQSxDQUFFOEcsSUFBRixDQUFPLEtBQUtsSixRQUFaLEVBQXNCeUMsR0FBdEIsQ0FBMkJDLEVBQUQsSUFBUSxLQUFLNkYsYUFBTCxDQUFtQjdGLEVBQW5CLENBQWxDLENBSko7O0lBS0EsS0FBSyxNQUFNeUcsY0FBWCxJQUE2QkgsZUFBN0IsRUFBOEM7TUFDNUMsSUFBSTtRQUNGLE1BQU1HLGNBQU47TUFDRCxDQUZELENBRUUsT0FBT2xJLENBQVAsRUFBVTtRQUNWLEtBQUtDLEdBQUwsQ0FBU0MsS0FBVCxDQUFlRixDQUFmO01BQ0Q7SUFDRjtFQUNGOztFQVFEbUksaUJBQWlCLENBQUNySCxTQUFTLEdBQUcsSUFBYixFQUFtQjtJQUNsQyxJQUFJQSxTQUFKLEVBQWU7TUFDYixJQUFJLENBQUMsS0FBSzNCLGNBQUwsQ0FBb0IyQixTQUFwQixDQUFMLEVBQXFDO1FBQ25DLEtBQUszQixjQUFMLENBQW9CMkIsU0FBcEIsSUFBaUMsS0FBS3NILHFCQUFMLEVBQWpDO01BQ0Q7O01BQ0QsT0FBTyxLQUFLakosY0FBTCxDQUFvQjJCLFNBQXBCLENBQVA7SUFDRDs7SUFFRCxJQUFJSyxlQUFBLENBQUVzQixPQUFGLENBQVUsS0FBS3JELGtCQUFmLENBQUosRUFBd0M7TUFDdEMsS0FBS0Esa0JBQUwsR0FBMEIsS0FBS2dKLHFCQUFMLEVBQTFCO0lBQ0Q7O0lBQ0QsT0FBTyxLQUFLaEosa0JBQVo7RUFDRDs7RUFZRGlKLGtCQUFrQixDQUFDQyxHQUFELEVBQU14SCxTQUFTLEdBQUcsSUFBbEIsRUFBd0I7SUFHeEMsT0FBTyxLQUFLcUgsaUJBQUwsQ0FBdUJySCxTQUF2QixFQUFrQ3FHLE1BQWxDLENBQ0pvQixDQUFELElBQU9wSCxlQUFBLENBQUU0RixVQUFGLENBQWF3QixDQUFDLENBQUNELEdBQUQsQ0FBZCxLQUF3Qm5ILGVBQUEsQ0FBRTRGLFVBQUYsQ0FBYXdCLENBQUMsQ0FBQ0MsTUFBZixDQUQxQixDQUFQO0VBR0Q7O0VBTURKLHFCQUFxQixHQUFHO0lBRXRCLE1BQU1LLGVBQWUsR0FBRyxFQUF4Qjs7SUFDQSxLQUFLLE1BQU0sQ0FBQ0MsV0FBRCxFQUFjcEksSUFBZCxDQUFYLElBQWtDLEtBQUtwQixhQUFMLENBQW1CeUosT0FBbkIsRUFBbEMsRUFBZ0U7TUFDOUQsTUFBTTlGLE9BQU8sR0FBRyxLQUFLVCxtQkFBTCxDQUF5QjlCLElBQXpCLENBQWhCO01BQ0EsTUFBTWdDLE1BQU0sR0FBRyxJQUFJb0csV0FBSixDQUFnQnBJLElBQWhCLEVBQXNCdUMsT0FBdEIsQ0FBZjtNQUNBNEYsZUFBZSxDQUFDdkMsSUFBaEIsQ0FBcUI1RCxNQUFyQjtJQUNEOztJQUNELE9BQU9tRyxlQUFQO0VBQ0Q7O0VBUW1CLE1BQWRHLGNBQWMsQ0FBQ04sR0FBRCxFQUFNLEdBQUc5SSxJQUFULEVBQWU7SUFBQTs7SUFVakMsTUFBTXFKLFdBQVcsR0FBR1AsR0FBRyxLQUFLUSw4QkFBNUI7SUFDQSxNQUFNQyxhQUFhLEdBQUdDLHFCQUFxQixDQUFDVixHQUFELENBQTNDO0lBQ0EsTUFBTVcsWUFBWSxHQUFHLElBQUFDLDRCQUFBLEVBQWlCWixHQUFqQixDQUFyQjtJQUtBLE1BQU1hLFdBQVcsYUFBR2hJLGVBQUEsQ0FBRWlJLElBQUYsQ0FBTzVKLElBQVAsQ0FBSCwyQ0FBRyxPQUFjMkosV0FBbEM7O0lBQ0EsSUFBSUEsV0FBSixFQUFpQjtNQUNmM0osSUFBSSxDQUFDNkosR0FBTDtJQUNEOztJQUlELElBQUl2SSxTQUFTLEdBQUcsSUFBaEI7SUFDQSxJQUFJQyxVQUFVLEdBQUcsSUFBakI7SUFDQSxJQUFJa0QsUUFBUSxHQUFHLElBQWY7SUFFQSxJQUFJdkMsTUFBTSxHQUFHLElBQWI7O0lBQ0EsSUFBSXVILFlBQUosRUFBa0I7TUFDaEJuSSxTQUFTLEdBQUdLLGVBQUEsQ0FBRWlJLElBQUYsQ0FBTzVKLElBQVAsQ0FBWjtNQUNBdUIsVUFBVSxHQUFHLEtBQUtoQyxRQUFMLENBQWMrQixTQUFkLENBQWI7O01BQ0EsSUFBSSxDQUFDQyxVQUFMLEVBQWlCO1FBQ2YsTUFBTSxJQUFJOEYsS0FBSixDQUFXLHdCQUF1Qi9GLFNBQVUsa0JBQTVDLENBQU47TUFDRDs7TUFFRG1ELFFBQVEsR0FBR2xELFVBQVUsQ0FBQ2tELFFBQXRCOztNQUNBLElBQUksQ0FBQzhFLGFBQUwsRUFBb0I7UUFDbEJySCxNQUFNLEdBQUdYLFVBQVQ7TUFDRDtJQUNGOztJQUdELE1BQU11SSxPQUFPLEdBQUcsS0FBS2pCLGtCQUFMLENBQXdCQyxHQUF4QixFQUE2QnhILFNBQTdCLENBQWhCO0lBUUEsTUFBTXlJLFlBQVksR0FBRztNQUFDQyxPQUFPLEVBQUU7SUFBVixDQUFyQjs7SUFNQSxNQUFNQyxlQUFlLEdBQUcsWUFBWTtNQUlsQ0gsT0FBTyxDQUFDSSxNQUFSLElBQWtCLEtBQUt6SixHQUFMLENBQVNnQyxJQUFULENBQWUsb0RBQW1EcUcsR0FBSSxHQUF0RSxDQUFsQjtNQUdBaUIsWUFBWSxDQUFDQyxPQUFiLEdBQXVCLElBQXZCOztNQUVBLElBQUlMLFdBQUosRUFBaUI7UUFLZixJQUFJLENBQUNwSSxVQUFVLENBQUM0SSxZQUFoQixFQUE4QjtVQUM1QixNQUFNLElBQUlDLHlCQUFKLEVBQU47UUFDRDs7UUFDRCxPQUFPLE1BQU03SSxVQUFVLENBQUM0SSxZQUFYLENBQ1hSLFdBQVcsQ0FBQ1UsV0FERCxFQUVYVixXQUFXLENBQUNXLE1BRkQsRUFHWFgsV0FBVyxDQUFDWSxJQUhELENBQWI7TUFLRDs7TUFFRCxJQUFJbEIsV0FBSixFQUFpQjtRQUNmLE9BQU8sTUFBTSxLQUFLNUgsU0FBTCxFQUFiO01BQ0Q7O01BRUQsSUFBSThILGFBQUosRUFBbUI7UUFHakIsT0FBTyxNQUFNaUIsc0JBQUEsQ0FBV0MsU0FBWCxDQUFxQnJCLGNBQXJCLENBQW9Dc0IsSUFBcEMsQ0FBeUMsSUFBekMsRUFBK0M1QixHQUEvQyxFQUFvRCxHQUFHOUksSUFBdkQsQ0FBYjtNQUNEOztNQUdELE9BQU8sTUFBTXVCLFVBQVUsQ0FBQzZILGNBQVgsQ0FBMEJOLEdBQTFCLEVBQStCLEdBQUc5SSxJQUFsQyxDQUFiO0lBQ0QsQ0FwQ0Q7O0lBdUNBLE1BQU0ySyxVQUFVLEdBQUcsS0FBS0Msc0JBQUwsQ0FBNEI7TUFDN0MxSSxNQUQ2QztNQUU3QzRHLEdBRjZDO01BRzdDOUksSUFINkM7TUFJN0M4SixPQUo2QztNQUs3Q0MsWUFMNkM7TUFNN0NjLElBQUksRUFBRVo7SUFOdUMsQ0FBNUIsQ0FBbkI7SUFRQSxNQUFNYSxHQUFHLEdBQUcsTUFBTSxLQUFLQyxxQkFBTCxDQUEyQjtNQUFDSixVQUFEO01BQWFsRztJQUFiLENBQTNCLENBQWxCO0lBSUEsS0FBS3VHLHNCQUFMLENBQTRCbEIsT0FBNUIsRUFBcUM7TUFBQ2hCLEdBQUQ7TUFBTWlCO0lBQU4sQ0FBckM7O0lBS0EsSUFBSWpCLEdBQUcsS0FBS21DLGtDQUFSLElBQWtDLEtBQUtyTCxrQkFBTCxDQUF3QnNLLE1BQTFELElBQW9FLENBQUNZLEdBQUcsQ0FBQzdGLEtBQTdFLEVBQW9GO01BQ2xGLE1BQU0zRCxTQUFTLEdBQUdLLGVBQUEsQ0FBRXVKLEtBQUYsQ0FBUUosR0FBRyxDQUFDdkgsS0FBWixDQUFsQjs7TUFDQSxLQUFLOUMsR0FBTCxDQUFTZ0MsSUFBVCxDQUNHLGFBQVksS0FBSzdDLGtCQUFMLENBQXdCc0ssTUFBTyxzQ0FBNUMsR0FDRyxpQkFBZ0I1SSxTQUFVLEVBRi9CO01BSUEsS0FBSzNCLGNBQUwsQ0FBb0IyQixTQUFwQixJQUFpQyxLQUFLMUIsa0JBQXRDO01BQ0EsS0FBS0Esa0JBQUwsR0FBMEIsRUFBMUI7SUFDRDs7SUFFRCxPQUFPa0wsR0FBUDtFQUNEOztFQUVERixzQkFBc0IsQ0FBQztJQUFDMUksTUFBRDtJQUFTNEcsR0FBVDtJQUFjOUksSUFBZDtJQUFvQjZLLElBQXBCO0lBQTBCZCxZQUExQjtJQUF3Q0Q7RUFBeEMsQ0FBRCxFQUFtRDtJQUN2RUEsT0FBTyxDQUFDSSxNQUFSLElBQ0UsS0FBS3pKLEdBQUwsQ0FBU2dDLElBQVQsQ0FBZSxpQ0FBZ0NxRyxHQUFJLE1BQUtnQixPQUFPLENBQUM5SCxHQUFSLENBQWErRyxDQUFELElBQU9BLENBQUMsQ0FBQ2pJLElBQXJCLENBQTJCLEVBQW5GLENBREY7O0lBS0EsS0FBSyxNQUFNZ0MsTUFBWCxJQUFxQmdILE9BQXJCLEVBQThCO01BSTVCQyxZQUFZLENBQUNqSCxNQUFNLENBQUNoQyxJQUFSLENBQVosR0FBNEIsS0FBNUI7O01BQ0ErSixJQUFJLEdBQUcsQ0FBRU0sS0FBRCxJQUFXLFlBQVk7UUFDN0IsS0FBSzFLLEdBQUwsQ0FBU2dDLElBQVQsQ0FBZSxVQUFTSyxNQUFNLENBQUNoQyxJQUFLLHlCQUF3QmdJLEdBQUksR0FBaEU7UUFDQWlCLFlBQVksQ0FBQ2pILE1BQU0sQ0FBQ2hDLElBQVIsQ0FBWixHQUE0QixJQUE1Qjs7UUFFQSxJQUFJZ0MsTUFBTSxDQUFDZ0csR0FBRCxDQUFWLEVBQWlCO1VBQ2YsT0FBTyxNQUFNaEcsTUFBTSxDQUFDZ0csR0FBRCxDQUFOLENBQVlxQyxLQUFaLEVBQW1CakosTUFBbkIsRUFBMkIsR0FBR2xDLElBQTlCLENBQWI7UUFDRDs7UUFFRCxPQUFPLE1BQU04QyxNQUFNLENBQUNrRyxNQUFQLENBQWNtQyxLQUFkLEVBQXFCakosTUFBckIsRUFBNkI0RyxHQUE3QixFQUFrQyxHQUFHOUksSUFBckMsQ0FBYjtNQUNELENBVE0sRUFTSjZLLElBVEksQ0FBUDtJQVVEOztJQUVELE9BQU9BLElBQVA7RUFDRDs7RUFFREcsc0JBQXNCLENBQUNsQixPQUFELEVBQVU7SUFBQ2hCLEdBQUQ7SUFBTWlCO0VBQU4sQ0FBVixFQUErQjtJQUNuRCxJQUFJLENBQUNELE9BQU8sQ0FBQ0ksTUFBYixFQUFxQjtNQUNuQjtJQUNEOztJQVFELE1BQU1rQixTQUFTLEdBQUd4TSxNQUFNLENBQUM2SixJQUFQLENBQVlzQixZQUFaLEVBQTBCcEMsTUFBMUIsQ0FBa0MwRCxDQUFELElBQU90QixZQUFZLENBQUNzQixDQUFELENBQXBELENBQWxCO0lBQ0EsTUFBTUMsV0FBVyxHQUFHMU0sTUFBTSxDQUFDNkosSUFBUCxDQUFZc0IsWUFBWixFQUEwQnBDLE1BQTFCLENBQWtDMEQsQ0FBRCxJQUFPLENBQUN0QixZQUFZLENBQUNzQixDQUFELENBQXJELENBQXBCOztJQUNBLElBQUlDLFdBQVcsQ0FBQ3BCLE1BQVosR0FBcUIsQ0FBekIsRUFBNEI7TUFDMUIsS0FBS3pKLEdBQUwsQ0FBU2dDLElBQVQsQ0FDRyxZQUFXcUcsR0FBSSxtRUFBaEIsR0FDRyw2Q0FBNEMvQixJQUFJLENBQUNDLFNBQUwsQ0FBZXNFLFdBQWYsQ0FBNEIsUUFEM0UsR0FFRyxtQ0FBa0N2RSxJQUFJLENBQUNDLFNBQUwsQ0FBZW9FLFNBQWYsQ0FBMEIsR0FIakU7SUFLRDtFQUNGOztFQUUwQixNQUFyQkwscUJBQXFCLENBQUM7SUFBQ0osVUFBRDtJQUFhbEc7RUFBYixDQUFELEVBQXlCO0lBQ2xELElBQUk4RyxNQUFKO0lBQUEsSUFDRUMsTUFERjtJQUFBLElBRUVWLEdBQUcsR0FBRyxFQUZSOztJQUdBLElBQUk7TUFJRlMsTUFBTSxHQUFHLE1BQU1aLFVBQVUsRUFBekI7SUFDRCxDQUxELENBS0UsT0FBT25LLENBQVAsRUFBVTtNQUNWZ0wsTUFBTSxHQUFHaEwsQ0FBVDtJQUNEOztJQUtELElBQUltQixlQUFBLENBQUU4SixhQUFGLENBQWdCRixNQUFoQixLQUEyQjVKLGVBQUEsQ0FBRStKLEdBQUYsQ0FBTUgsTUFBTixFQUFjLFVBQWQsQ0FBL0IsRUFBMEQ7TUFDeERULEdBQUcsR0FBR1MsTUFBTjtJQUNELENBRkQsTUFFTztNQUNMVCxHQUFHLENBQUN2SCxLQUFKLEdBQVlnSSxNQUFaO01BQ0FULEdBQUcsQ0FBQzdGLEtBQUosR0FBWXVHLE1BQVo7TUFDQVYsR0FBRyxDQUFDckcsUUFBSixHQUFlQSxRQUFmO0lBQ0Q7O0lBQ0QsT0FBT3FHLEdBQVA7RUFDRDs7RUFFRGEsV0FBVyxDQUFDckssU0FBRCxFQUFZO0lBQ3JCLE1BQU1DLFVBQVUsR0FBRyxLQUFLaEMsUUFBTCxDQUFjK0IsU0FBZCxDQUFuQjtJQUNBLE9BQU9DLFVBQVUsSUFBSUksZUFBQSxDQUFFNEYsVUFBRixDQUFhaEcsVUFBVSxDQUFDb0ssV0FBeEIsQ0FBZCxJQUFzRHBLLFVBQVUsQ0FBQ29LLFdBQVgsQ0FBdUJySyxTQUF2QixDQUE3RDtFQUNEOztFQUVEc0ssaUJBQWlCLENBQUN0SyxTQUFELEVBQVk7SUFDM0IsTUFBTUMsVUFBVSxHQUFHLEtBQUtoQyxRQUFMLENBQWMrQixTQUFkLENBQW5CO0lBQ0EsT0FBT0MsVUFBVSxHQUFHQSxVQUFVLENBQUNxSyxpQkFBWCxFQUFILEdBQW9DLEVBQXJEO0VBQ0Q7O0VBRURDLFFBQVEsQ0FBQ3ZLLFNBQUQsRUFBWTtJQUNsQixNQUFNQyxVQUFVLEdBQUcsS0FBS2hDLFFBQUwsQ0FBYytCLFNBQWQsQ0FBbkI7SUFDQSxPQUFPQyxVQUFVLElBQUlBLFVBQVUsQ0FBQ3NLLFFBQVgsQ0FBb0J2SyxTQUFwQixDQUFyQjtFQUNEOztBQWx2Qm1DOzs7O0FBdXZCdEMsU0FBU2tJLHFCQUFULENBQStCVixHQUEvQixFQUFvQztFQUNsQyxPQUFPLENBQUMsSUFBQVksNEJBQUEsRUFBaUJaLEdBQWpCLENBQUQsSUFBMEJBLEdBQUcsS0FBS2dELGtDQUF6QztBQUNEOztBQU1NLE1BQU0xQix5QkFBTixTQUF3Qy9DLEtBQXhDLENBQThDO0VBSW5EMEUsSUFBSSxHQUFHLGtDQUFIOztFQUVKOUwsV0FBVyxHQUFHO0lBQ1osTUFDRyxxRUFBRCxHQUNHLG1FQURILEdBRUcseUVBRkgsR0FHRyw2REFKTDtFQU1EOztBQWJrRCJ9
|
package/build/lib/cli/args.d.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Alias
|
|
3
|
-
*/
|
|
4
|
-
export type ExtensionType = import('../extension/manifest').ExtensionType;
|
|
1
|
+
export type ExtensionType = import('@appium/types').ExtensionType;
|
|
5
2
|
/**
|
|
6
3
|
* A tuple of argument aliases and argument options
|
|
7
4
|
*/
|
|
@@ -15,6 +12,6 @@ export function getServerArgs(): ArgumentDefinitions;
|
|
|
15
12
|
/**
|
|
16
13
|
* Builds a Record of extension types to a Record of subcommands to their argument definitions
|
|
17
14
|
*/
|
|
18
|
-
export const getExtensionArgs: (() => Record<import("
|
|
15
|
+
export const getExtensionArgs: (() => Record<import("@appium/types").ExtensionType, Record<import("appium/types").CliExtensionSubcommand, ArgumentDefinitions>>) & _.MemoizedFunction;
|
|
19
16
|
import _ from "lodash";
|
|
20
17
|
//# sourceMappingURL=args.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../../lib/cli/args.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../../lib/cli/args.js"],"names":[],"mappings":"4BAyRa,OAAO,eAAe,EAAE,aAAa;;;;kCAKrC,IAAI,MAAM,EAAE,EAAC,OAAO,UAAU,EAAE,eAAe,CAAC;AA/D7D;;;;GAIG;AACH,qDAEC;AA/LD;;GAEG;AACH,sLAcG"}
|
package/build/lib/cli/args.js
CHANGED
|
@@ -141,4 +141,4 @@ const serverArgsDisallowedInConfig = new Map([[['--shell'], {
|
|
|
141
141
|
required: false,
|
|
142
142
|
help: 'Explicit path to Appium configuration file'
|
|
143
143
|
}]]);
|
|
144
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEUklWRVJfRVhBTVBMRSIsIlBMVUdJTl9FWEFNUExFIiwiSU5TVEFMTF9UWVBFU19BUlJBWSIsIklOU1RBTExfVFlQRVMiLCJFWFRFTlNJT05fVFlQRVMiLCJTZXQiLCJEUklWRVJfVFlQRSIsIlBMVUdJTl9UWVBFIiwiZ2xvYmFsRXh0ZW5zaW9uQXJncyIsIk1hcCIsInJlcXVpcmVkIiwiZGVmYXVsdCIsImFjdGlvbiIsImhlbHAiLCJkZXN0IiwiZ2V0RXh0ZW5zaW9uQXJncyIsIl8iLCJtZW1vaXplIiwiZXh0ZW5zaW9uQXJncyIsInR5cGUiLCJFWFRfU1VCQ09NTUFORF9MSVNUIiwibWFrZUxpc3RBcmdzIiwiRVhUX1NVQkNPTU1BTkRfSU5TVEFMTCIsIm1ha2VJbnN0YWxsQXJncyIsIkVYVF9TVUJDT01NQU5EX1VOSU5TVEFMTCIsIm1ha2VVbmluc3RhbGxBcmdzIiwiRVhUX1NVQkNPTU1BTkRfVVBEQVRFIiwibWFrZVVwZGF0ZUFyZ3MiLCJFWFRfU1VCQ09NTUFORF9SVU4iLCJtYWtlUnVuQXJncyIsImNob2ljZXMiLCJqb2luIiwiZ2V0U2VydmVyQXJncyIsInRvUGFyc2VyQXJncyIsInNlcnZlckFyZ3NEaXNhbGxvd2VkSW5Db25maWciLCJjb25zdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jbGkvYXJncy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtaWdub3JlXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgRFJJVkVSX1RZUEUsXG4gIFBMVUdJTl9UWVBFLFxuICBFWFRfU1VCQ09NTUFORF9JTlNUQUxMLFxuICBFWFRfU1VCQ09NTUFORF9MSVNULFxuICBFWFRfU1VCQ09NTUFORF9SVU4sXG4gIEVYVF9TVUJDT01NQU5EX1VOSU5TVEFMTCxcbiAgRVhUX1NVQkNPTU1BTkRfVVBEQVRFLFxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtJTlNUQUxMX1RZUEVTfSBmcm9tICcuLi9leHRlbnNpb24vZXh0ZW5zaW9uLWNvbmZpZyc7XG5pbXBvcnQge3RvUGFyc2VyQXJnc30gZnJvbSAnLi4vc2NoZW1hL2NsaS1hcmdzJztcbmNvbnN0IERSSVZFUl9FWEFNUExFID0gJ3hjdWl0ZXN0JztcbmNvbnN0IFBMVUdJTl9FWEFNUExFID0gJ2ZpbmRfYnlfaW1hZ2UnO1xuXG4vKipcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgcGFzcyB0aGUgYXJyYXkgaW50byBgYXJncGFyc2VgLiBgYXJncGFyc2VgIGlzIGJhZCBhbmQgbXV0YXRlcyB0aGluZ3MuIFdlIGRvbid0IHdhbnQgdGhhdC5cbiAqIEJhZCBgYXJncGFyc2VgISBCYWQhXG4gKi9cbmNvbnN0IElOU1RBTExfVFlQRVNfQVJSQVkgPSBbLi4uSU5TVEFMTF9UWVBFU107XG5cbi8qKiBAdHlwZSB7U2V0PEV4dGVuc2lvblR5cGU+fSAqL1xuY29uc3QgRVhURU5TSU9OX1RZUEVTID0gbmV3IFNldChbRFJJVkVSX1RZUEUsIFBMVUdJTl9UWVBFXSk7XG5cbi8vIHRoaXMgc2V0IG9mIGFyZ3Mgd29ya3MgZm9yIGJvdGggZHJpdmVycyBhbmQgcGx1Z2lucyAoJ2V4dGVuc2lvbnMnKVxuLyoqIEB0eXBlIHtBcmd1bWVudERlZmluaXRpb25zfSAqL1xuY29uc3QgZ2xvYmFsRXh0ZW5zaW9uQXJncyA9IG5ldyBNYXAoW1xuICBbXG4gICAgWyctLWpzb24nXSxcbiAgICB7XG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGFjdGlvbjogJ3N0b3JlX3RydWUnLFxuICAgICAgaGVscDogJ1VzZSBKU09OIGZvciBvdXRwdXQgZm9ybWF0JyxcbiAgICAgIGRlc3Q6ICdqc29uJyxcbiAgICB9LFxuICBdLFxuXSk7XG5cbi8qKlxuICogQnVpbGRzIGEgUmVjb3JkIG9mIGV4dGVuc2lvbiB0eXBlcyB0byBhIFJlY29yZCBvZiBzdWJjb21tYW5kcyB0byB0aGVpciBhcmd1bWVudCBkZWZpbml0aW9uc1xuICovXG5jb25zdCBnZXRFeHRlbnNpb25BcmdzID0gXy5tZW1vaXplKGZ1bmN0aW9uIGdldEV4dGVuc2lvbkFyZ3MoKSB7XG4gIGNvbnN0IGV4dGVuc2lvbkFyZ3MgPSB7fTtcbiAgZm9yIChjb25zdCB0eXBlIG9mIEVYVEVOU0lPTl9UWVBFUykge1xuICAgIGV4dGVuc2lvbkFyZ3NbdHlwZV0gPSB7XG4gICAgICBbRVhUX1NVQkNPTU1BTkRfTElTVF06IG1ha2VMaXN0QXJncyh0eXBlKSxcbiAgICAgIFtFWFRfU1VCQ09NTUFORF9JTlNUQUxMXTogbWFrZUluc3RhbGxBcmdzKHR5cGUpLFxuICAgICAgW0VYVF9TVUJDT01NQU5EX1VOSU5TVEFMTF06IG1ha2VVbmluc3RhbGxBcmdzKHR5cGUpLFxuICAgICAgW0VYVF9TVUJDT01NQU5EX1VQREFURV06IG1ha2VVcGRhdGVBcmdzKHR5cGUpLFxuICAgICAgW0VYVF9TVUJDT01NQU5EX1JVTl06IG1ha2VSdW5BcmdzKHR5cGUpLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIC8qKiBAdHlwZSB7UmVjb3JkPEV4dGVuc2lvblR5cGUsIFJlY29yZDxpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkNsaUV4dGVuc2lvblN1YmNvbW1hbmQsQXJndW1lbnREZWZpbml0aW9ucz4+fSAqLyAoXG4gICAgZXh0ZW5zaW9uQXJnc1xuICApO1xufSk7XG5cbi8qKlxuICogTWFrZXMgdGhlIG9wdHMgZm9yIHRoZSBgbGlzdGAgc3ViY29tbWFuZCBmb3IgZWFjaCBleHRlbnNpb24gdHlwZS5cbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VMaXN0QXJncyh0eXBlKSB7XG4gIHJldHVybiBuZXcgTWFwKFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtcbiAgICAgIFsnLS1pbnN0YWxsZWQnXSxcbiAgICAgIHtcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgYWN0aW9uOiAnc3RvcmVfdHJ1ZScsXG4gICAgICAgIGhlbHA6IGBMaXN0IG9ubHkgaW5zdGFsbGVkICR7dHlwZX1zYCxcbiAgICAgICAgZGVzdDogJ3Nob3dJbnN0YWxsZWQnLFxuICAgICAgfSxcbiAgICBdLFxuICAgIFtcbiAgICAgIFsnLS11cGRhdGVzJ10sXG4gICAgICB7XG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgIGFjdGlvbjogJ3N0b3JlX3RydWUnLFxuICAgICAgICBoZWxwOiAnU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBuZXdlciB2ZXJzaW9ucycsXG4gICAgICAgIGRlc3Q6ICdzaG93VXBkYXRlcycsXG4gICAgICB9LFxuICAgIF0sXG4gIF0pO1xufVxuXG4vKipcbiAqIE1ha2VzIHRoZSBvcHRzIGZvciB0aGUgYGluc3RhbGxgIHN1YmNvbW1hbmQgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGVcbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VJbnN0YWxsQXJncyh0eXBlKSB7XG4gIHJldHVybiBuZXcgTWFwKFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtcbiAgICAgIFt0eXBlXSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3N0cicsXG4gICAgICAgIGhlbHA6XG4gICAgICAgICAgYE5hbWUgb2YgdGhlICR7dHlwZX0gdG8gaW5zdGFsbCwgZm9yIGV4YW1wbGU6IGAgKyB0eXBlID09PSBEUklWRVJfVFlQRVxuICAgICAgICAgICAgPyBEUklWRVJfRVhBTVBMRVxuICAgICAgICAgICAgOiBQTFVHSU5fRVhBTVBMRSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbXG4gICAgICBbJy0tc291cmNlJ10sXG4gICAgICB7XG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgY2hvaWNlczogSU5TVEFMTF9UWVBFU19BUlJBWSxcbiAgICAgICAgaGVscDpcbiAgICAgICAgICBgV2hlcmUgdG8gbG9vayBmb3IgdGhlICR7dHlwZX0gaWYgaXQgaXMgbm90IG9uZSBvZiBBcHBpdW0ncyB2ZXJpZmllZCBgICtcbiAgICAgICAgICBgJHt0eXBlfXMuIFBvc3NpYmxlIHZhbHVlczogJHtJTlNUQUxMX1RZUEVTX0FSUkFZLmpvaW4oJywgJyl9YCxcbiAgICAgICAgZGVzdDogJ2luc3RhbGxUeXBlJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbXG4gICAgICBbJy0tcGFja2FnZSddLFxuICAgICAge1xuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgIHR5cGU6ICdzdHInLFxuICAgICAgICBoZWxwOlxuICAgICAgICAgIGBJZiBpbnN0YWxsaW5nIGZyb20gR2l0IG9yIEdpdEh1YiwgdGhlIHBhY2thZ2UgbmFtZSwgYXMgZGVmaW5lZCBpbiB0aGUgcGx1Z2luJ3MgYCArXG4gICAgICAgICAgYHBhY2thZ2UuanNvbiBmaWxlIGluIHRoZSBcIm5hbWVcIiBmaWVsZCwgY2Fubm90IGJlIGRldGVybWluZWQgYXV0b21hdGljYWxseSwgYW5kIGAgK1xuICAgICAgICAgIGBzaG91bGQgYmUgcmVwb3J0ZWQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBpbnN0YWxsIHdpbGwgcHJvYmFibHkgZmFpbC5gLFxuICAgICAgICBkZXN0OiAncGFja2FnZU5hbWUnLFxuICAgICAgfSxcbiAgICBdLFxuICBdKTtcbn1cblxuLyoqXG4gKiBNYWtlcyB0aGUgb3B0cyBmb3IgdGhlIGB1bmluc3RhbGxgIHN1YmNvbW1hbmQgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGVcbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VVbmluc3RhbGxBcmdzKHR5cGUpIHtcbiAgcmV0dXJuIG5ldyBNYXAoW1xuICAgIC4uLmdsb2JhbEV4dGVuc2lvbkFyZ3MsXG4gICAgW1xuICAgICAgW3R5cGVdLFxuICAgICAge1xuICAgICAgICB0eXBlOiAnc3RyJyxcbiAgICAgICAgaGVscDpcbiAgICAgICAgICAnTmFtZSBvZiB0aGUgZHJpdmVyIHRvIHVuaW5zdGFsbCwgZm9yIGV4YW1wbGU6ICcgKyB0eXBlID09PSBEUklWRVJfVFlQRVxuICAgICAgICAgICAgPyBEUklWRVJfRVhBTVBMRVxuICAgICAgICAgICAgOiBQTFVHSU5fRVhBTVBMRSxcbiAgICAgIH0sXG4gICAgXSxcbiAgXSk7XG59XG5cbi8qKlxuICogTWFrZXMgdGhlIG9wdHMgZm9yIHRoZSBgdXBkYXRlYCBzdWJjb21tYW5kIGZvciBlYWNoIGV4dGVuc2lvbiB0eXBlXG4gKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IHR5cGVcbiAqIEByZXR1cm5zIHtBcmd1bWVudERlZmluaXRpb25zfVxuICovXG5mdW5jdGlvbiBtYWtlVXBkYXRlQXJncyh0eXBlKSB7XG4gIHJldHVybiBuZXcgTWFwKFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtcbiAgICAgIFt0eXBlXSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3N0cicsXG4gICAgICAgIGhlbHA6XG4gICAgICAgICAgYE5hbWUgb2YgdGhlICR7dHlwZX0gdG8gdXBkYXRlLCBvciB0aGUgd29yZCBcImluc3RhbGxlZFwiIHRvIHVwZGF0ZSBhbGwgaW5zdGFsbGVkIGAgK1xuICAgICAgICAgICAgYCR7dHlwZX1zLiBUbyBzZWUgYXZhaWxhYmxlIHVwZGF0ZXMsIHJ1biBcImFwcGl1bSAke3R5cGV9IGxpc3QgLS1pbnN0YWxsZWQgLS11cGRhdGVzXCIuIGAgK1xuICAgICAgICAgICAgJ0ZvciBleGFtcGxlOiAnICtcbiAgICAgICAgICAgIHR5cGUgPT09XG4gICAgICAgICAgRFJJVkVSX1RZUEVcbiAgICAgICAgICAgID8gRFJJVkVSX0VYQU1QTEVcbiAgICAgICAgICAgIDogUExVR0lOX0VYQU1QTEUsXG4gICAgICB9LFxuICAgIF0sXG4gICAgW1xuICAgICAgWyctLXVuc2FmZSddLFxuICAgICAge1xuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICBhY3Rpb246ICdzdG9yZV90cnVlJyxcbiAgICAgICAgaGVscDpcbiAgICAgICAgICBgSW5jbHVkZSB1cGRhdGVzIHRoYXQgbWlnaHQgaGF2ZSBhIG5ldyBtYWpvciByZXZpc2lvbiwgYW5kIHBvdGVudGlhbGx5IGluY2x1ZGUgYCArXG4gICAgICAgICAgYGJyZWFraW5nIGNoYW5nZXNgLFxuICAgICAgfSxcbiAgICBdLFxuICBdKTtcbn1cblxuLyoqXG4gKiBNYWtlcyB0aGUgb3B0cyBmb3IgdGhlIGBydW5gIHN1YmNvbW1hbmQgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGVcbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VSdW5BcmdzKHR5cGUpIHtcbiAgcmV0dXJuIG5ldyBNYXAoW1xuICAgIC4uLmdsb2JhbEV4dGVuc2lvbkFyZ3MsXG4gICAgW1xuICAgICAgW3R5cGVdLFxuICAgICAge1xuICAgICAgICB0eXBlOiAnc3RyJyxcbiAgICAgICAgaGVscDpcbiAgICAgICAgICBgTmFtZSBvZiB0aGUgJHt0eXBlfSB0byBydW4gYSBzY3JpcHQgZnJvbSwgZm9yIGV4YW1wbGU6IGAgKyB0eXBlID09PSBEUklWRVJfVFlQRVxuICAgICAgICAgICAgPyBEUklWRVJfRVhBTVBMRVxuICAgICAgICAgICAgOiBQTFVHSU5fRVhBTVBMRSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbXG4gICAgICBbJ3NjcmlwdE5hbWUnXSxcbiAgICAgIHtcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgdHlwZTogJ3N0cicsXG4gICAgICAgIGhlbHA6XG4gICAgICAgICAgYE5hbWUgb2YgdGhlIHNjcmlwdCB0byBydW4gZnJvbSB0aGUgJHt0eXBlfS4gVGhlIHNjcmlwdCBuYW1lIG11c3QgYmUgY2FjaGVkIGAgK1xuICAgICAgICAgIGBpbnNpZGUgdGhlIFwic2NyaXB0c1wiIGZpZWxkIHVuZGVyIFwiYXBwaXVtXCIgaW5zaWRlIHRoZSAke3R5cGV9J3MgXCJwYWNrYWdlLmpzb25cIiBmaWxlYCxcbiAgICAgIH0sXG4gICAgXSxcbiAgXSk7XG59XG5cbi8qKlxuICogRGVyaXZlcyB0aGUgb3B0aW9ucyBmb3IgdGhlIGBzZXJ2ZXJgIGNvbW1hbmQgZnJvbSB0aGUgc2NoZW1hLCBhbmQgYWRkcyB0aGUgYXJndW1lbnRzXG4gKiB3aGljaCBhcmUgZGlzYWxsb3dlZCBpbiB0aGUgY29uZmlnIGZpbGUuXG4gKiBAcmV0dXJucyB7QXJndW1lbnREZWZpbml0aW9uc31cbiAqL1xuZnVuY3Rpb24gZ2V0U2VydmVyQXJncygpIHtcbiAgcmV0dXJuIG5ldyBNYXAoWy4uLnRvUGFyc2VyQXJncygpLCAuLi5zZXJ2ZXJBcmdzRGlzYWxsb3dlZEluQ29uZmlnXSk7XG59XG5cbi8qKlxuICogVGhlc2UgZG9uJ3QgbWFrZSBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBhIGNvbmZpZyBmaWxlIGZvciBvYnZpb3VzIHJlYXNvbnMuXG4gKiBAdHlwZSB7QXJndW1lbnREZWZpbml0aW9uc31cbiAqL1xuY29uc3Qgc2VydmVyQXJnc0Rpc2FsbG93ZWRJbkNvbmZpZyA9IG5ldyBNYXAoW1xuICBbXG4gICAgWyctLXNoZWxsJ10sXG4gICAge1xuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgaGVscDogJ0VudGVyIFJFUEwgbW9kZScsXG4gICAgICBhY3Rpb246ICdzdG9yZV9jb25zdCcsXG4gICAgICBjb25zdDogdHJ1ZSxcbiAgICAgIGRlc3Q6ICdzaGVsbCcsXG4gICAgfSxcbiAgXSxcbiAgW1xuICAgIFsnLS1zaG93LWJ1aWxkLWluZm8nXSxcbiAgICB7XG4gICAgICBkZXN0OiAnc2hvd0J1aWxkSW5mbycsXG4gICAgICBhY3Rpb246ICdzdG9yZV9jb25zdCcsXG4gICAgICBjb25zdDogdHJ1ZSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGhlbHA6ICdTaG93IGluZm8gYWJvdXQgdGhlIEFwcGl1bSBidWlsZCBhbmQgZXhpdCcsXG4gICAgfSxcbiAgXSxcbiAgW1xuICAgIFsnLS1zaG93LWNvbmZpZyddLFxuICAgIHtcbiAgICAgIGRlc3Q6ICdzaG93Q29uZmlnJyxcbiAgICAgIGFjdGlvbjogJ3N0b3JlX2NvbnN0JyxcbiAgICAgIGNvbnN0OiB0cnVlLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgaGVscDogJ1Nob3cgdGhlIGN1cnJlbnQgQXBwaXVtIGNvbmZpZ3VyYXRpb24gYW5kIGV4aXQnLFxuICAgIH0sXG4gIF0sXG4gIFtcbiAgICBbJy0tY29uZmlnJ10sXG4gICAge1xuICAgICAgZGVzdDogJ2NvbmZpZ0ZpbGUnLFxuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBoZWxwOiAnRXhwbGljaXQgcGF0aCB0byBBcHBpdW0gY29uZmlndXJhdGlvbiBmaWxlJyxcbiAgICB9LFxuICBdLFxuXSk7XG5cbmV4cG9ydCB7Z2V0U2VydmVyQXJncywgZ2V0RXh0ZW5zaW9uQXJnc307XG5cbi8qKlxuICogQWxpYXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2V4dGVuc2lvbi9tYW5pZmVzdCcpLkV4dGVuc2lvblR5cGV9IEV4dGVuc2lvblR5cGVcbiAqL1xuXG4vKipcbiAqIEEgdHVwbGUgb2YgYXJndW1lbnQgYWxpYXNlcyBhbmQgYXJndW1lbnQgb3B0aW9uc1xuICogQHR5cGVkZWYge01hcDxzdHJpbmdbXSxpbXBvcnQoJ2FyZ3BhcnNlJykuQXJndW1lbnRPcHRpb25zPn0gQXJndW1lbnREZWZpbml0aW9uc1xuICovXG4iXSwibWFwcGlu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
|
|
144
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEUklWRVJfRVhBTVBMRSIsIlBMVUdJTl9FWEFNUExFIiwiSU5TVEFMTF9UWVBFU19BUlJBWSIsIklOU1RBTExfVFlQRVMiLCJFWFRFTlNJT05fVFlQRVMiLCJTZXQiLCJEUklWRVJfVFlQRSIsIlBMVUdJTl9UWVBFIiwiZ2xvYmFsRXh0ZW5zaW9uQXJncyIsIk1hcCIsInJlcXVpcmVkIiwiZGVmYXVsdCIsImFjdGlvbiIsImhlbHAiLCJkZXN0IiwiZ2V0RXh0ZW5zaW9uQXJncyIsIl8iLCJtZW1vaXplIiwiZXh0ZW5zaW9uQXJncyIsInR5cGUiLCJFWFRfU1VCQ09NTUFORF9MSVNUIiwibWFrZUxpc3RBcmdzIiwiRVhUX1NVQkNPTU1BTkRfSU5TVEFMTCIsIm1ha2VJbnN0YWxsQXJncyIsIkVYVF9TVUJDT01NQU5EX1VOSU5TVEFMTCIsIm1ha2VVbmluc3RhbGxBcmdzIiwiRVhUX1NVQkNPTU1BTkRfVVBEQVRFIiwibWFrZVVwZGF0ZUFyZ3MiLCJFWFRfU1VCQ09NTUFORF9SVU4iLCJtYWtlUnVuQXJncyIsImNob2ljZXMiLCJqb2luIiwiZ2V0U2VydmVyQXJncyIsInRvUGFyc2VyQXJncyIsInNlcnZlckFyZ3NEaXNhbGxvd2VkSW5Db25maWciLCJjb25zdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jbGkvYXJncy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgRFJJVkVSX1RZUEUsXG4gIFBMVUdJTl9UWVBFLFxuICBFWFRfU1VCQ09NTUFORF9JTlNUQUxMLFxuICBFWFRfU1VCQ09NTUFORF9MSVNULFxuICBFWFRfU1VCQ09NTUFORF9SVU4sXG4gIEVYVF9TVUJDT01NQU5EX1VOSU5TVEFMTCxcbiAgRVhUX1NVQkNPTU1BTkRfVVBEQVRFLFxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtJTlNUQUxMX1RZUEVTfSBmcm9tICcuLi9leHRlbnNpb24vZXh0ZW5zaW9uLWNvbmZpZyc7XG5pbXBvcnQge3RvUGFyc2VyQXJnc30gZnJvbSAnLi4vc2NoZW1hL2NsaS1hcmdzJztcbmNvbnN0IERSSVZFUl9FWEFNUExFID0gJ3hjdWl0ZXN0JztcbmNvbnN0IFBMVUdJTl9FWEFNUExFID0gJ2ZpbmRfYnlfaW1hZ2UnO1xuXG4vKipcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgcGFzcyB0aGUgYXJyYXkgaW50byBgYXJncGFyc2VgLiBgYXJncGFyc2VgIGlzIGJhZCBhbmQgbXV0YXRlcyB0aGluZ3MuIFdlIGRvbid0IHdhbnQgdGhhdC5cbiAqIEJhZCBgYXJncGFyc2VgISBCYWQhXG4gKi9cbmNvbnN0IElOU1RBTExfVFlQRVNfQVJSQVkgPSBbLi4uSU5TVEFMTF9UWVBFU107XG5cbi8qKiBAdHlwZSB7U2V0PEV4dGVuc2lvblR5cGU+fSAqL1xuY29uc3QgRVhURU5TSU9OX1RZUEVTID0gbmV3IFNldChbRFJJVkVSX1RZUEUsIFBMVUdJTl9UWVBFXSk7XG5cbi8vIHRoaXMgc2V0IG9mIGFyZ3Mgd29ya3MgZm9yIGJvdGggZHJpdmVycyBhbmQgcGx1Z2lucyAoJ2V4dGVuc2lvbnMnKVxuLyoqIEB0eXBlIHtBcmd1bWVudERlZmluaXRpb25zfSAqL1xuY29uc3QgZ2xvYmFsRXh0ZW5zaW9uQXJncyA9IG5ldyBNYXAoW1xuICBbXG4gICAgWyctLWpzb24nXSxcbiAgICB7XG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGFjdGlvbjogJ3N0b3JlX3RydWUnLFxuICAgICAgaGVscDogJ1VzZSBKU09OIGZvciBvdXRwdXQgZm9ybWF0JyxcbiAgICAgIGRlc3Q6ICdqc29uJyxcbiAgICB9LFxuICBdLFxuXSk7XG5cbi8qKlxuICogQnVpbGRzIGEgUmVjb3JkIG9mIGV4dGVuc2lvbiB0eXBlcyB0byBhIFJlY29yZCBvZiBzdWJjb21tYW5kcyB0byB0aGVpciBhcmd1bWVudCBkZWZpbml0aW9uc1xuICovXG5jb25zdCBnZXRFeHRlbnNpb25BcmdzID0gXy5tZW1vaXplKGZ1bmN0aW9uIGdldEV4dGVuc2lvbkFyZ3MoKSB7XG4gIGNvbnN0IGV4dGVuc2lvbkFyZ3MgPSB7fTtcbiAgZm9yIChjb25zdCB0eXBlIG9mIEVYVEVOU0lPTl9UWVBFUykge1xuICAgIGV4dGVuc2lvbkFyZ3NbdHlwZV0gPSB7XG4gICAgICBbRVhUX1NVQkNPTU1BTkRfTElTVF06IG1ha2VMaXN0QXJncyh0eXBlKSxcbiAgICAgIFtFWFRfU1VCQ09NTUFORF9JTlNUQUxMXTogbWFrZUluc3RhbGxBcmdzKHR5cGUpLFxuICAgICAgW0VYVF9TVUJDT01NQU5EX1VOSU5TVEFMTF06IG1ha2VVbmluc3RhbGxBcmdzKHR5cGUpLFxuICAgICAgW0VYVF9TVUJDT01NQU5EX1VQREFURV06IG1ha2VVcGRhdGVBcmdzKHR5cGUpLFxuICAgICAgW0VYVF9TVUJDT01NQU5EX1JVTl06IG1ha2VSdW5BcmdzKHR5cGUpLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIC8qKiBAdHlwZSB7UmVjb3JkPEV4dGVuc2lvblR5cGUsIFJlY29yZDxpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkNsaUV4dGVuc2lvblN1YmNvbW1hbmQsQXJndW1lbnREZWZpbml0aW9ucz4+fSAqLyAoXG4gICAgZXh0ZW5zaW9uQXJnc1xuICApO1xufSk7XG5cbi8qKlxuICogTWFrZXMgdGhlIG9wdHMgZm9yIHRoZSBgbGlzdGAgc3ViY29tbWFuZCBmb3IgZWFjaCBleHRlbnNpb24gdHlwZS5cbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VMaXN0QXJncyh0eXBlKSB7XG4gIHJldHVybiBuZXcgTWFwKFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtcbiAgICAgIFsnLS1pbnN0YWxsZWQnXSxcbiAgICAgIHtcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgYWN0aW9uOiAnc3RvcmVfdHJ1ZScsXG4gICAgICAgIGhlbHA6IGBMaXN0IG9ubHkgaW5zdGFsbGVkICR7dHlwZX1zYCxcbiAgICAgICAgZGVzdDogJ3Nob3dJbnN0YWxsZWQnLFxuICAgICAgfSxcbiAgICBdLFxuICAgIFtcbiAgICAgIFsnLS11cGRhdGVzJ10sXG4gICAgICB7XG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgIGFjdGlvbjogJ3N0b3JlX3RydWUnLFxuICAgICAgICBoZWxwOiAnU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBuZXdlciB2ZXJzaW9ucycsXG4gICAgICAgIGRlc3Q6ICdzaG93VXBkYXRlcycsXG4gICAgICB9LFxuICAgIF0sXG4gIF0pO1xufVxuXG4vKipcbiAqIE1ha2VzIHRoZSBvcHRzIGZvciB0aGUgYGluc3RhbGxgIHN1YmNvbW1hbmQgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGVcbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VJbnN0YWxsQXJncyh0eXBlKSB7XG4gIHJldHVybiBuZXcgTWFwKFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtcbiAgICAgIFt0eXBlXSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3N0cicsXG4gICAgICAgIGhlbHA6XG4gICAgICAgICAgYE5hbWUgb2YgdGhlICR7dHlwZX0gdG8gaW5zdGFsbCwgZm9yIGV4YW1wbGU6IGAgKyB0eXBlID09PSBEUklWRVJfVFlQRVxuICAgICAgICAgICAgPyBEUklWRVJfRVhBTVBMRVxuICAgICAgICAgICAgOiBQTFVHSU5fRVhBTVBMRSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbXG4gICAgICBbJy0tc291cmNlJ10sXG4gICAgICB7XG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgY2hvaWNlczogSU5TVEFMTF9UWVBFU19BUlJBWSxcbiAgICAgICAgaGVscDpcbiAgICAgICAgICBgV2hlcmUgdG8gbG9vayBmb3IgdGhlICR7dHlwZX0gaWYgaXQgaXMgbm90IG9uZSBvZiBBcHBpdW0ncyB2ZXJpZmllZCBgICtcbiAgICAgICAgICBgJHt0eXBlfXMuIFBvc3NpYmxlIHZhbHVlczogJHtJTlNUQUxMX1RZUEVTX0FSUkFZLmpvaW4oJywgJyl9YCxcbiAgICAgICAgZGVzdDogJ2luc3RhbGxUeXBlJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbXG4gICAgICBbJy0tcGFja2FnZSddLFxuICAgICAge1xuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgIHR5cGU6ICdzdHInLFxuICAgICAgICBoZWxwOlxuICAgICAgICAgIGBJZiBpbnN0YWxsaW5nIGZyb20gR2l0IG9yIEdpdEh1YiwgdGhlIHBhY2thZ2UgbmFtZSwgYXMgZGVmaW5lZCBpbiB0aGUgcGx1Z2luJ3MgYCArXG4gICAgICAgICAgYHBhY2thZ2UuanNvbiBmaWxlIGluIHRoZSBcIm5hbWVcIiBmaWVsZCwgY2Fubm90IGJlIGRldGVybWluZWQgYXV0b21hdGljYWxseSwgYW5kIGAgK1xuICAgICAgICAgIGBzaG91bGQgYmUgcmVwb3J0ZWQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBpbnN0YWxsIHdpbGwgcHJvYmFibHkgZmFpbC5gLFxuICAgICAgICBkZXN0OiAncGFja2FnZU5hbWUnLFxuICAgICAgfSxcbiAgICBdLFxuICBdKTtcbn1cblxuLyoqXG4gKiBNYWtlcyB0aGUgb3B0cyBmb3IgdGhlIGB1bmluc3RhbGxgIHN1YmNvbW1hbmQgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGVcbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VVbmluc3RhbGxBcmdzKHR5cGUpIHtcbiAgcmV0dXJuIG5ldyBNYXAoW1xuICAgIC4uLmdsb2JhbEV4dGVuc2lvbkFyZ3MsXG4gICAgW1xuICAgICAgW3R5cGVdLFxuICAgICAge1xuICAgICAgICB0eXBlOiAnc3RyJyxcbiAgICAgICAgaGVscDpcbiAgICAgICAgICAnTmFtZSBvZiB0aGUgZHJpdmVyIHRvIHVuaW5zdGFsbCwgZm9yIGV4YW1wbGU6ICcgKyB0eXBlID09PSBEUklWRVJfVFlQRVxuICAgICAgICAgICAgPyBEUklWRVJfRVhBTVBMRVxuICAgICAgICAgICAgOiBQTFVHSU5fRVhBTVBMRSxcbiAgICAgIH0sXG4gICAgXSxcbiAgXSk7XG59XG5cbi8qKlxuICogTWFrZXMgdGhlIG9wdHMgZm9yIHRoZSBgdXBkYXRlYCBzdWJjb21tYW5kIGZvciBlYWNoIGV4dGVuc2lvbiB0eXBlXG4gKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IHR5cGVcbiAqIEByZXR1cm5zIHtBcmd1bWVudERlZmluaXRpb25zfVxuICovXG5mdW5jdGlvbiBtYWtlVXBkYXRlQXJncyh0eXBlKSB7XG4gIHJldHVybiBuZXcgTWFwKFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtcbiAgICAgIFt0eXBlXSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3N0cicsXG4gICAgICAgIGhlbHA6XG4gICAgICAgICAgYE5hbWUgb2YgdGhlICR7dHlwZX0gdG8gdXBkYXRlLCBvciB0aGUgd29yZCBcImluc3RhbGxlZFwiIHRvIHVwZGF0ZSBhbGwgaW5zdGFsbGVkIGAgK1xuICAgICAgICAgICAgYCR7dHlwZX1zLiBUbyBzZWUgYXZhaWxhYmxlIHVwZGF0ZXMsIHJ1biBcImFwcGl1bSAke3R5cGV9IGxpc3QgLS1pbnN0YWxsZWQgLS11cGRhdGVzXCIuIGAgK1xuICAgICAgICAgICAgJ0ZvciBleGFtcGxlOiAnICtcbiAgICAgICAgICAgIHR5cGUgPT09XG4gICAgICAgICAgRFJJVkVSX1RZUEVcbiAgICAgICAgICAgID8gRFJJVkVSX0VYQU1QTEVcbiAgICAgICAgICAgIDogUExVR0lOX0VYQU1QTEUsXG4gICAgICB9LFxuICAgIF0sXG4gICAgW1xuICAgICAgWyctLXVuc2FmZSddLFxuICAgICAge1xuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICBhY3Rpb246ICdzdG9yZV90cnVlJyxcbiAgICAgICAgaGVscDpcbiAgICAgICAgICBgSW5jbHVkZSB1cGRhdGVzIHRoYXQgbWlnaHQgaGF2ZSBhIG5ldyBtYWpvciByZXZpc2lvbiwgYW5kIHBvdGVudGlhbGx5IGluY2x1ZGUgYCArXG4gICAgICAgICAgYGJyZWFraW5nIGNoYW5nZXNgLFxuICAgICAgfSxcbiAgICBdLFxuICBdKTtcbn1cblxuLyoqXG4gKiBNYWtlcyB0aGUgb3B0cyBmb3IgdGhlIGBydW5gIHN1YmNvbW1hbmQgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGVcbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VSdW5BcmdzKHR5cGUpIHtcbiAgcmV0dXJuIG5ldyBNYXAoW1xuICAgIC4uLmdsb2JhbEV4dGVuc2lvbkFyZ3MsXG4gICAgW1xuICAgICAgW3R5cGVdLFxuICAgICAge1xuICAgICAgICB0eXBlOiAnc3RyJyxcbiAgICAgICAgaGVscDpcbiAgICAgICAgICBgTmFtZSBvZiB0aGUgJHt0eXBlfSB0byBydW4gYSBzY3JpcHQgZnJvbSwgZm9yIGV4YW1wbGU6IGAgKyB0eXBlID09PSBEUklWRVJfVFlQRVxuICAgICAgICAgICAgPyBEUklWRVJfRVhBTVBMRVxuICAgICAgICAgICAgOiBQTFVHSU5fRVhBTVBMRSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbXG4gICAgICBbJ3NjcmlwdE5hbWUnXSxcbiAgICAgIHtcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgdHlwZTogJ3N0cicsXG4gICAgICAgIGhlbHA6XG4gICAgICAgICAgYE5hbWUgb2YgdGhlIHNjcmlwdCB0byBydW4gZnJvbSB0aGUgJHt0eXBlfS4gVGhlIHNjcmlwdCBuYW1lIG11c3QgYmUgY2FjaGVkIGAgK1xuICAgICAgICAgIGBpbnNpZGUgdGhlIFwic2NyaXB0c1wiIGZpZWxkIHVuZGVyIFwiYXBwaXVtXCIgaW5zaWRlIHRoZSAke3R5cGV9J3MgXCJwYWNrYWdlLmpzb25cIiBmaWxlYCxcbiAgICAgIH0sXG4gICAgXSxcbiAgXSk7XG59XG5cbi8qKlxuICogRGVyaXZlcyB0aGUgb3B0aW9ucyBmb3IgdGhlIGBzZXJ2ZXJgIGNvbW1hbmQgZnJvbSB0aGUgc2NoZW1hLCBhbmQgYWRkcyB0aGUgYXJndW1lbnRzXG4gKiB3aGljaCBhcmUgZGlzYWxsb3dlZCBpbiB0aGUgY29uZmlnIGZpbGUuXG4gKiBAcmV0dXJucyB7QXJndW1lbnREZWZpbml0aW9uc31cbiAqL1xuZnVuY3Rpb24gZ2V0U2VydmVyQXJncygpIHtcbiAgcmV0dXJuIG5ldyBNYXAoWy4uLnRvUGFyc2VyQXJncygpLCAuLi5zZXJ2ZXJBcmdzRGlzYWxsb3dlZEluQ29uZmlnXSk7XG59XG5cbi8qKlxuICogVGhlc2UgZG9uJ3QgbWFrZSBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBhIGNvbmZpZyBmaWxlIGZvciBvYnZpb3VzIHJlYXNvbnMuXG4gKiBAdHlwZSB7QXJndW1lbnREZWZpbml0aW9uc31cbiAqL1xuY29uc3Qgc2VydmVyQXJnc0Rpc2FsbG93ZWRJbkNvbmZpZyA9IG5ldyBNYXAoW1xuICBbXG4gICAgWyctLXNoZWxsJ10sXG4gICAge1xuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgaGVscDogJ0VudGVyIFJFUEwgbW9kZScsXG4gICAgICBhY3Rpb246ICdzdG9yZV9jb25zdCcsXG4gICAgICBjb25zdDogdHJ1ZSxcbiAgICAgIGRlc3Q6ICdzaGVsbCcsXG4gICAgfSxcbiAgXSxcbiAgW1xuICAgIFsnLS1zaG93LWJ1aWxkLWluZm8nXSxcbiAgICB7XG4gICAgICBkZXN0OiAnc2hvd0J1aWxkSW5mbycsXG4gICAgICBhY3Rpb246ICdzdG9yZV9jb25zdCcsXG4gICAgICBjb25zdDogdHJ1ZSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGhlbHA6ICdTaG93IGluZm8gYWJvdXQgdGhlIEFwcGl1bSBidWlsZCBhbmQgZXhpdCcsXG4gICAgfSxcbiAgXSxcbiAgW1xuICAgIFsnLS1zaG93LWNvbmZpZyddLFxuICAgIHtcbiAgICAgIGRlc3Q6ICdzaG93Q29uZmlnJyxcbiAgICAgIGFjdGlvbjogJ3N0b3JlX2NvbnN0JyxcbiAgICAgIGNvbnN0OiB0cnVlLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgaGVscDogJ1Nob3cgdGhlIGN1cnJlbnQgQXBwaXVtIGNvbmZpZ3VyYXRpb24gYW5kIGV4aXQnLFxuICAgIH0sXG4gIF0sXG4gIFtcbiAgICBbJy0tY29uZmlnJ10sXG4gICAge1xuICAgICAgZGVzdDogJ2NvbmZpZ0ZpbGUnLFxuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBoZWxwOiAnRXhwbGljaXQgcGF0aCB0byBBcHBpdW0gY29uZmlndXJhdGlvbiBmaWxlJyxcbiAgICB9LFxuICBdLFxuXSk7XG5cbmV4cG9ydCB7Z2V0U2VydmVyQXJncywgZ2V0RXh0ZW5zaW9uQXJnc307XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkV4dGVuc2lvblR5cGV9IEV4dGVuc2lvblR5cGVcbiAqL1xuXG4vKipcbiAqIEEgdHVwbGUgb2YgYXJndW1lbnQgYWxpYXNlcyBhbmQgYXJndW1lbnQgb3B0aW9uc1xuICogQHR5cGVkZWYge01hcDxzdHJpbmdbXSxpbXBvcnQoJ2FyZ3BhcnNlJykuQXJndW1lbnRPcHRpb25zPn0gQXJndW1lbnREZWZpbml0aW9uc1xuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQVNB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
|
package/build/lib/config-file.js
CHANGED
|
@@ -108,7 +108,7 @@ async function readConfigFile(filepath, opts = {}) {
|
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
return result
|
|
111
|
+
return result ?? {};
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
function normalizeConfig(config) {
|
|
@@ -118,9 +118,9 @@ function normalizeConfig(config) {
|
|
|
118
118
|
const obj = _lodash.default.isUndefined(section) ? config : _lodash.default.get(config, section, config);
|
|
119
119
|
|
|
120
120
|
const mappedObj = _lodash.default.mapKeys(obj, (__, prop) => {
|
|
121
|
-
var _schema$properties$pr
|
|
121
|
+
var _schema$properties$pr;
|
|
122
122
|
|
|
123
|
-
return (_schema$properties$pr =
|
|
123
|
+
return ((_schema$properties$pr = schema.properties[prop]) === null || _schema$properties$pr === void 0 ? void 0 : _schema$properties$pr.appiumCliDest) ?? _lodash.default.camelCase(prop);
|
|
124
124
|
});
|
|
125
125
|
|
|
126
126
|
return _lodash.default.mapValues(mappedObj, (value, property) => {
|
|
@@ -133,4 +133,4 @@ function normalizeConfig(config) {
|
|
|
133
133
|
|
|
134
134
|
return normalize(config);
|
|
135
135
|
}
|
|
136
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ5YW1sTG9hZGVyIiwiZmlsZXBhdGgiLCJjb250ZW50IiwieWFtbCIsInBhcnNlIiwicmF3Q29uZmlnIiwiTWFwIiwianNvbkxvYWRlciIsInNldCIsIkpTT04iLCJsb2FkQ29uZmlnRmlsZSIsImxjIiwibG9hZCIsImVyciIsImNvZGUiLCJtZXNzYWdlIiwiU3ludGF4RXJyb3IiLCJzZWFyY2hDb25maWdGaWxlIiwic2VhcmNoIiwiZm9ybWF0RXJyb3JzIiwiZXJyb3JzIiwiY29uZmlnIiwib3B0cyIsImxlbmd0aCIsIlR5cGVFcnJvciIsImJldHRlckFqdkVycm9ycyIsImdldFNjaGVtYSIsInNjaGVtYUlkIiwianNvbiIsImZvcm1hdCIsInJlYWRDb25maWdGaWxlIiwibGlsY29uZmlnIiwibG9hZGVycyIsIm5vRXh0IiwicGFja2FnZVByb3AiLCJyZXN1bHQiLCJpc0VtcHR5IiwicHJldHR5IiwiY29uZmlnUmVzdWx0IiwidmFsaWRhdGUiLCJfIiwicmVhc29uIiwiZ2V0Iiwibm9ybWFsaXplQ29uZmlnIiwiZGVsZXRlIiwic2NoZW1hIiwibm9ybWFsaXplIiwic2VjdGlvbiIsIm9iaiIsImlzVW5kZWZpbmVkIiwibWFwcGVkT2JqIiwibWFwS2V5cyIsIl9fIiwicHJvcCIsInByb3BlcnRpZXMiLCJhcHBpdW1DbGlEZXN0IiwiY2FtZWxDYXNlIiwibWFwVmFsdWVzIiwidmFsdWUiLCJwcm9wZXJ0eSIsIm5leHRTZWN0aW9uIiwiaXNTY2hlbWFUeXBlT2JqZWN0IiwiQm9vbGVhbiJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jb25maWctZmlsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmV0dGVyQWp2RXJyb3JzIGZyb20gJ0BzaWR2aW5kL2JldHRlci1hanYtZXJyb3JzJztcbmltcG9ydCB7bGlsY29uZmlnfSBmcm9tICdsaWxjb25maWcnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB5YW1sIGZyb20gJ3lhbWwnO1xuaW1wb3J0IHtnZXRTY2hlbWEsIHZhbGlkYXRlfSBmcm9tICcuL3NjaGVtYS9zY2hlbWEnO1xuXG4vKipcbiAqIGxpbGNvbmZpZyBsb2FkZXIgdG8gaGFuZGxlIGAueWFtbGAgZmlsZXNcbiAqIEB0eXBlIHtpbXBvcnQoJ2xpbGNvbmZpZycpLkxvYWRlclN5bmN9XG4gKi9cbmZ1bmN0aW9uIHlhbWxMb2FkZXIoZmlsZXBhdGgsIGNvbnRlbnQpIHtcbiAgcmV0dXJuIHlhbWwucGFyc2UoY29udGVudCk7XG59XG5cbi8qKlxuICogQSBjYWNoZSBvZiB0aGUgcmF3IGNvbmZpZyBmaWxlIChhIEpTT04gc3RyaW5nKSBhdCBhIGZpbGVwYXRoLlxuICogVGhpcyBpcyB1c2VkIGZvciBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nLlxuICogTm90ZSB0aGF0IGNvbmZpZyBmaWxlcyBuZWVkbid0IGJlIEpTT04sIGJ1dCBpdCBoZWxwcyBpZiB0aGV5IGFyZS5cbiAqIEB0eXBlIHtNYXA8c3RyaW5nLFJhd0pzb24+fVxuICovXG5jb25zdCByYXdDb25maWcgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogQ3VzdG9tIEpTT04gbG9hZGVyIHRoYXQgY2FjaGVzIHRoZSByYXcgY29uZmlnIGZpbGUgKGZvciB1c2Ugd2l0aCBgYmV0dGVyLWFqdi1lcnJvcnNgKS5cbiAqIElmIGl0IHdlcmVuJ3QgZm9yIHRoaXMgY2FjaGUsIHRoaXMgd291bGQgYmUgdW5uZWNlc3NhcnkuXG4gKiBAdHlwZSB7aW1wb3J0KCdsaWxjb25maWcnKS5Mb2FkZXJTeW5jfVxuICovXG5mdW5jdGlvbiBqc29uTG9hZGVyKGZpbGVwYXRoLCBjb250ZW50KSB7XG4gIHJhd0NvbmZpZy5zZXQoZmlsZXBhdGgsIGNvbnRlbnQpO1xuICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50KTtcbn1cblxuLyoqXG4gKiBMb2FkcyBhIGNvbmZpZyBmaWxlIGZyb20gYW4gZXhwbGljaXQgcGF0aFxuICogQHBhcmFtIHtMaWxjb25maWdBc3luY1NlYXJjaGVyfSBsYyAtIGxpbGNvbmZpZyBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVwYXRoIC0gUGF0aCB0byBjb25maWcgZmlsZVxuICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KCdsaWxjb25maWcnKS5MaWxjb25maWdSZXN1bHQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBsb2FkQ29uZmlnRmlsZShsYywgZmlsZXBhdGgpIHtcbiAgdHJ5IHtcbiAgICAvLyByZW1vdmluZyBcImF3YWl0XCIgd2lsbCBjYXVzZSBhbnkgcmVqZWN0aW9uIHRvIF9ub3RfIGJlIGNhdWdodCBpbiB0aGlzIGJsb2NrIVxuICAgIHJldHVybiBhd2FpdCBsYy5sb2FkKGZpbGVwYXRoKTtcbiAgfSBjYXRjaCAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyBlcnIpIHtcbiAgICBpZiAoLyoqIEB0eXBlIHtOb2RlSlMuRXJybm9FeGNlcHRpb259ICovIChlcnIpLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAvKiogQHR5cGUge05vZGVKUy5FcnJub0V4Y2VwdGlvbn0gKi8gKFxuICAgICAgICBlcnJcbiAgICAgICkubWVzc2FnZSA9IGBDb25maWcgZmlsZSBub3QgZm91bmQgYXQgdXNlci1wcm92aWRlZCBwYXRoOiAke2ZpbGVwYXRofWA7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgLy8gZ2VuZXJhbGx5IGludmFsaWQgSlNPTlxuICAgICAgZXJyLm1lc3NhZ2UgPSBgQ29uZmlnIGZpbGUgYXQgdXNlci1wcm92aWRlZCBwYXRoICR7ZmlsZXBhdGh9IGlzIGludmFsaWQ6XFxuJHtlcnIubWVzc2FnZX1gO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuLyoqXG4gKiBTZWFyY2hlcyBmb3IgYSBjb25maWcgZmlsZVxuICogQHBhcmFtIHtMaWxjb25maWdBc3luY1NlYXJjaGVyfSBsYyAtIGxpbGNvbmZpZyBpbnN0YW5jZVxuICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KCdsaWxjb25maWcnKS5MaWxjb25maWdSZXN1bHQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBzZWFyY2hDb25maWdGaWxlKGxjKSB7XG4gIHJldHVybiBhd2FpdCBsYy5zZWFyY2goKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhbiBhcnJheSBvZiBlcnJvcnMgYW5kIHRoZSByZXN1bHQgb2YgbG9hZGluZyBhIGNvbmZpZyBmaWxlLCBnZW5lcmF0ZSBhXG4gKiBoZWxwZnVsIHN0cmluZyBmb3IgdGhlIHVzZXIuXG4gKlxuICogLSBJZiBgb3B0c2AgY29udGFpbnMgYSBganNvbmAgcHJvcGVydHksIHRoaXMgc2hvdWxkIGJlIHRoZSBvcmlnaW5hbCBKU09OXG4gKiAgIF9zdHJpbmdfIG9mIHRoZSBjb25maWcgZmlsZS4gIFRoaXMgaXMgb25seSBhcHBsaWNhYmxlIGlmIHRoZSBjb25maWcgZmlsZVxuICogICB3YXMgaW4gSlNPTiBmb3JtYXQuIElmIHByZXNlbnQsIGl0IHdpbGwgYXNzb2NpYXRlIGxpbmUgbnVtYmVycyB3aXRoIGVycm9ycy5cbiAqIC0gSWYgYGVycm9yc2AgaGFwcGVucyB0byBiZSBlbXB0eSwgdGhpcyB3aWxsIHRocm93LlxuICogQHBhcmFtIHtpbXBvcnQoJ2FqdicpLkVycm9yT2JqZWN0W119IGVycm9ycyAtIE5vbi1lbXB0eSBhcnJheSBvZiBlcnJvcnMuIFJlcXVpcmVkLlxuICogQHBhcmFtIHtSZWFkQ29uZmlnRmlsZVJlc3VsdFsnY29uZmlnJ118YW55fSBbY29uZmlnXSAtXG4gKiBDb25maWd1cmF0aW9uICYgbWV0YWRhdGFcbiAqIEBwYXJhbSB7Rm9ybWF0Q29uZmlnRXJyb3JzT3B0aW9uc30gW29wdHNdXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGBlcnJvcnNgIGlzIGVtcHR5XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RXJyb3JzKGVycm9ycyA9IFtdLCBjb25maWcgPSB7fSwgb3B0cyA9IHt9KSB7XG4gIGlmIChlcnJvcnMgJiYgIWVycm9ycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBvZiBlcnJvcnMgbXVzdCBiZSBub24tZW1wdHknKTtcbiAgfVxuICByZXR1cm4gYmV0dGVyQWp2RXJyb3JzKGdldFNjaGVtYShvcHRzLnNjaGVtYUlkKSwgY29uZmlnLCBlcnJvcnMsIHtcbiAgICBqc29uOiBvcHRzLmpzb24sXG4gICAgZm9ybWF0OiAnY2xpJyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2l2ZW4gYW4gb3B0aW9uYWwgcGF0aCwgcmVhZCBhIGNvbmZpZyBmaWxlLiBWYWxpZGF0ZXMgdGhlIGNvbmZpZyBmaWxlLlxuICpcbiAqIENhbGwge0BsaW5rIHZhbGlkYXRlfSBpZiB5b3UgYWxyZWFkeSBoYXZlIGEgY29uZmlnIG9iamVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbZmlsZXBhdGhdIC0gUGF0aCB0byBjb25maWcgZmlsZSwgaWYgd2UgaGF2ZSBvbmVcbiAqIEBwYXJhbSB7UmVhZENvbmZpZ0ZpbGVPcHRpb25zfSBbb3B0c10gLSBPcHRpb25zXG4gKiBAcHVibGljXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxSZWFkQ29uZmlnRmlsZVJlc3VsdD59IENvbnRhaW5zIGNvbmZpZyBhbmQgZmlsZXBhdGgsIGlmIGZvdW5kLCBhbmQgYW55IGVycm9yc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZENvbmZpZ0ZpbGUoZmlsZXBhdGgsIG9wdHMgPSB7fSkge1xuICBjb25zdCBsYyA9IGxpbGNvbmZpZygnYXBwaXVtJywge1xuICAgIGxvYWRlcnM6IHtcbiAgICAgICcueWFtbCc6IHlhbWxMb2FkZXIsXG4gICAgICAnLnltbCc6IHlhbWxMb2FkZXIsXG4gICAgICAnLmpzb24nOiBqc29uTG9hZGVyLFxuICAgICAgbm9FeHQ6IGpzb25Mb2FkZXIsXG4gICAgfSxcbiAgICBwYWNrYWdlUHJvcDogJ2FwcGl1bUNvbmZpZycsXG4gIH0pO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGZpbGVwYXRoID8gYXdhaXQgbG9hZENvbmZpZ0ZpbGUobGMsIGZpbGVwYXRoKSA6IGF3YWl0IHNlYXJjaENvbmZpZ0ZpbGUobGMpO1xuXG4gIGlmIChyZXN1bHQ/LmZpbGVwYXRoICYmICFyZXN1bHQ/LmlzRW1wdHkpIHtcbiAgICBjb25zdCB7cHJldHR5ID0gdHJ1ZX0gPSBvcHRzO1xuICAgIHRyeSB7XG4gICAgICBsZXQgY29uZmlnUmVzdWx0O1xuICAgICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGUocmVzdWx0LmNvbmZpZyk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGVycm9ycykpIHtcbiAgICAgICAgY29uZmlnUmVzdWx0ID0gey4uLnJlc3VsdCwgZXJyb3JzfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlYXNvbiA9IGZvcm1hdEVycm9ycyhlcnJvcnMsIHJlc3VsdC5jb25maWcsIHtcbiAgICAgICAgICBqc29uOiByYXdDb25maWcuZ2V0KHJlc3VsdC5maWxlcGF0aCksXG4gICAgICAgICAgcHJldHR5LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uZmlnUmVzdWx0ID0gcmVhc29uID8gey4uLnJlc3VsdCwgZXJyb3JzLCByZWFzb259IDogey4uLnJlc3VsdCwgZXJyb3JzfTtcbiAgICAgIH1cblxuICAgICAgLy8gbm9ybWFsaXplICh0byBjYW1lbCBjYXNlKSBhbGwgdG9wLWxldmVsIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBjb25maWcgZmlsZVxuICAgICAgY29uZmlnUmVzdWx0LmNvbmZpZyA9IG5vcm1hbGl6ZUNvbmZpZygvKiogQHR5cGUge0FwcGl1bUNvbmZpZ30gKi8gKGNvbmZpZ1Jlc3VsdC5jb25maWcpKTtcblxuICAgICAgcmV0dXJuIGNvbmZpZ1Jlc3VsdDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gY2xlYW4gdXAgdGhlIHJhdyBjb25maWcgZmlsZSBjYWNoZSwgd2hpY2ggaXMgb25seSBrZXB0IHRvIGJldHRlciByZXBvcnQgZXJyb3JzLlxuICAgICAgcmF3Q29uZmlnLmRlbGV0ZShyZXN1bHQuZmlsZXBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0ID8/IHt9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgc2NoZW1hIHByb3BlcnR5IG5hbWVzIHRvIGVpdGhlciBhKSB0aGUgdmFsdWUgb2YgdGhlIGBhcHBpdW1DbGlEZXN0YCBwcm9wZXJ0eSwgaWYgYW55OyBvciBiKSBjYW1lbC1jYXNlXG4gKiBAcGFyYW0ge0FwcGl1bUNvbmZpZ30gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBvYmplY3RcbiAqIEByZXR1cm5zIHtOb3JtYWxpemVkQXBwaXVtQ29uZmlnfSBOZXcgb2JqZWN0IHdpdGggY2FtZWwtY2FzZWQga2V5cyAob3IgYGRlc3RgIGtleXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQ29uZmlnKGNvbmZpZykge1xuICBjb25zdCBzY2hlbWEgPSBnZXRTY2hlbWEoKTtcbiAgLyoqXG4gICAqIEBwYXJhbSB7QXBwaXVtQ29uZmlnfSBjb25maWdcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWN0aW9uXSAtIEtleXBhdGggKGxvZGFzaCBgXy5nZXQoKWAgc3R5bGUpIHRvIHNlY3Rpb24gb2YgY29uZmlnLiBJZiBvbWl0dGVkLCBhc3N1bWUgcm9vdCBBcHBpdW0gY29uZmlnIHNjaGVtYVxuICAgKiBAdG9kbyBSZXdyaXRlIGFzIGEgbG9vcFxuICAgKiBAcmV0dXJucyBOb3JtYWxpemVkIHNlY3Rpb24gb2YgY29uZmlnXG4gICAqL1xuICBjb25zdCBub3JtYWxpemUgPSAoY29uZmlnLCBzZWN0aW9uKSA9PiB7XG4gICAgY29uc3Qgb2JqID0gXy5pc1VuZGVmaW5lZChzZWN0aW9uKSA/IGNvbmZpZyA6IF8uZ2V0KGNvbmZpZywgc2VjdGlvbiwgY29uZmlnKTtcblxuICAgIGNvbnN0IG1hcHBlZE9iaiA9IF8ubWFwS2V5cyhcbiAgICAgIG9iaixcbiAgICAgIChfXywgcHJvcCkgPT4gc2NoZW1hLnByb3BlcnRpZXNbcHJvcF0/LmFwcGl1bUNsaURlc3QgPz8gXy5jYW1lbENhc2UocHJvcClcbiAgICApO1xuXG4gICAgcmV0dXJuIF8ubWFwVmFsdWVzKG1hcHBlZE9iaiwgKHZhbHVlLCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgY29uc3QgbmV4dFNlY3Rpb24gPSBzZWN0aW9uID8gYCR7c2VjdGlvbn0uJHtwcm9wZXJ0eX1gIDogcHJvcGVydHk7XG4gICAgICByZXR1cm4gaXNTY2hlbWFUeXBlT2JqZWN0KHZhbHVlKSA/IG5vcm1hbGl6ZShjb25maWcsIG5leHRTZWN0aW9uKSA6IHZhbHVlO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc2NoZW1hIHByb3AgcmVmZXJlbmNlcyBhbiBvYmplY3QsIG9yIGlmIGl0J3MgYW4gb2JqZWN0IGl0c2VsZlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYWp2JykuU2NoZW1hT2JqZWN0fG9iamVjdH0gc2NoZW1hIC0gUmVmZXJlbmNpbmcgc2NoZW1hIG9iamVjdFxuICAgKi9cbiAgY29uc3QgaXNTY2hlbWFUeXBlT2JqZWN0ID0gKHNjaGVtYSkgPT4gQm9vbGVhbihzY2hlbWEucHJvcGVydGllcyk7XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZShjb25maWcpO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBjYWxsaW5nIHtAbGluayByZWFkQ29uZmlnRmlsZX0uXG4gKiBAdHlwZWRlZiBSZWFkQ29uZmlnRmlsZVJlc3VsdFxuICogQHByb3BlcnR5IHtpbXBvcnQoJ2FqdicpLkVycm9yT2JqZWN0W119IFtlcnJvcnNdIC0gVmFsaWRhdGlvbiBlcnJvcnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZmlsZXBhdGhdIC0gVGhlIHBhdGggdG8gdGhlIGNvbmZpZyBmaWxlLCBpZiBmb3VuZFxuICogQHByb3BlcnR5IHtib29sZWFufSBbaXNFbXB0eV0gLSBJZiBgdHJ1ZWAsIHRoZSBjb25maWcgZmlsZSBleGlzdHMgYnV0IGlzIGVtcHR5XG4gKiBAcHJvcGVydHkge05vcm1hbGl6ZWRBcHBpdW1Db25maWd9IFtjb25maWddIC0gVGhlIHBhcnNlZCBjb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ3xpbXBvcnQoJ0BzaWR2aW5kL2JldHRlci1hanYtZXJyb3JzJykuSU91dHB1dEVycm9yW119IFtyZWFzb25dIC0gSHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2FnZXMgYW5kIHN1Z2dlc3Rpb25zLiBJZiB0aGUgYHByZXR0eWAgb3B0aW9uIGlzIGB0cnVlYCwgdGhpcyB3aWxsIGJlIGEgbmljZSBzdHJpbmcgdG8gcHJpbnQuXG4gKi9cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmVhZENvbmZpZ0ZpbGV9LlxuICogQHR5cGVkZWYgUmVhZENvbmZpZ0ZpbGVPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtwcmV0dHk9dHJ1ZV0gSWYgYGZhbHNlYCwgZG8gbm90IHVzZSBjb2xvciBhbmQgZmFuY3kgZm9ybWF0dGluZyBpbiB0aGUgYHJlYXNvbmAgcHJvcGVydHkgb2YgdGhlIHtAbGluayBSZWFkQ29uZmlnRmlsZVJlc3VsdH0uIFRoZSB2YWx1ZSBvZiBgcmVhc29uYCBpcyB0aGVuIHN1aXRhYmxlIGZvciBtYWNoaW5lLXJlYWRpbmcuXG4gKi9cblxuLyoqXG4gKiBUaGlzIGlzIGFuIGBBc3luY1NlYXJjaGVyYCB3aGljaCBpcyBpbmV4cGxpY2FibHkgX25vdF8gZXhwb3J0ZWQgYnkgdGhlIGBsaWxjb25maWdgIHR5cGUgZGVmaW5pdGlvbi5cbiAqIEB0eXBlZGVmIHtSZXR1cm5UeXBlPGltcG9ydCgnbGlsY29uZmlnJylbXCJsaWxjb25maWdcIl0+fSBMaWxjb25maWdBc3luY1NlYXJjaGVyXG4gKi9cblxuLyoqXG4gKiBUaGUgY29udGVudHMgb2YgYW4gQXBwaXVtIGNvbmZpZyBmaWxlLiBHZW5lcmF0ZWQgZnJvbSBzY2hlbWFcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5BcHBpdW1Db25maWd9IEFwcGl1bUNvbmZpZ1xuICovXG5cbi8qKlxuICogVGhlIGNvbnRlbnRzIG9mIGFuIEFwcGl1bSBjb25maWcgZmlsZSB3aXRoIGNhbWVsY2FzZWQgcHJvcGVydHkgbmFtZXMgKGFuZCB1c2luZyBgYXBwaXVtQ2xpRGVzdGAgdmFsdWUgaWYgcHJlc2VudCkuIEdlbmVyYXRlZCBmcm9tIHtAbGluayBBcHBpdW1Db25maWd9XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuTm9ybWFsaXplZEFwcGl1bUNvbmZpZ30gTm9ybWFsaXplZEFwcGl1bUNvbmZpZ1xuICovXG5cbi8qKlxuICogVGhlIHN0cmluZyBzaG91bGQgYmUgYSByYXcgSlNPTiBzdHJpbmcuXG4gKiBAdHlwZWRlZiB7c3RyaW5nfSBSYXdKc29uXG4gKi9cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZm9ybWF0RXJyb3JzfS5cbiAqIEB0eXBlZGVmIEZvcm1hdENvbmZpZ0Vycm9yc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCcuL2NvbmZpZy1maWxlJykuUmF3SnNvbn0gW2pzb25dIC0gUmF3IEpTT04gY29uZmlnIChhcyBzdHJpbmcpXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtwcmV0dHk9dHJ1ZV0gLSBXaGV0aGVyIHRvIGZvcm1hdCBlcnJvcnMgYXMgYSBDTEktZnJpZW5kbHkgc3RyaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gIFtzY2hlbWFJZF0gLSBTcGVjaWZpYyBJRCBvZiBhIHByb3A7IG90aGVyd2lzZSBlbnRpcmUgc2NoZW1hXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQU1BLFNBQVNBLFVBQVQsQ0FBb0JDLFFBQXBCLEVBQThCQyxPQUE5QixFQUF1QztFQUNyQyxPQUFPQyxhQUFBLENBQUtDLEtBQUwsQ0FBV0YsT0FBWCxDQUFQO0FBQ0Q7O0FBUUQsTUFBTUcsU0FBUyxHQUFHLElBQUlD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
|
|
136
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ5YW1sTG9hZGVyIiwiZmlsZXBhdGgiLCJjb250ZW50IiwieWFtbCIsInBhcnNlIiwicmF3Q29uZmlnIiwiTWFwIiwianNvbkxvYWRlciIsInNldCIsIkpTT04iLCJsb2FkQ29uZmlnRmlsZSIsImxjIiwibG9hZCIsImVyciIsImNvZGUiLCJtZXNzYWdlIiwiU3ludGF4RXJyb3IiLCJzZWFyY2hDb25maWdGaWxlIiwic2VhcmNoIiwiZm9ybWF0RXJyb3JzIiwiZXJyb3JzIiwiY29uZmlnIiwib3B0cyIsImxlbmd0aCIsIlR5cGVFcnJvciIsImJldHRlckFqdkVycm9ycyIsImdldFNjaGVtYSIsInNjaGVtYUlkIiwianNvbiIsImZvcm1hdCIsInJlYWRDb25maWdGaWxlIiwibGlsY29uZmlnIiwibG9hZGVycyIsIm5vRXh0IiwicGFja2FnZVByb3AiLCJyZXN1bHQiLCJpc0VtcHR5IiwicHJldHR5IiwiY29uZmlnUmVzdWx0IiwidmFsaWRhdGUiLCJfIiwicmVhc29uIiwiZ2V0Iiwibm9ybWFsaXplQ29uZmlnIiwiZGVsZXRlIiwic2NoZW1hIiwibm9ybWFsaXplIiwic2VjdGlvbiIsIm9iaiIsImlzVW5kZWZpbmVkIiwibWFwcGVkT2JqIiwibWFwS2V5cyIsIl9fIiwicHJvcCIsInByb3BlcnRpZXMiLCJhcHBpdW1DbGlEZXN0IiwiY2FtZWxDYXNlIiwibWFwVmFsdWVzIiwidmFsdWUiLCJwcm9wZXJ0eSIsIm5leHRTZWN0aW9uIiwiaXNTY2hlbWFUeXBlT2JqZWN0IiwiQm9vbGVhbiJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jb25maWctZmlsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmV0dGVyQWp2RXJyb3JzIGZyb20gJ0BzaWR2aW5kL2JldHRlci1hanYtZXJyb3JzJztcbmltcG9ydCB7bGlsY29uZmlnfSBmcm9tICdsaWxjb25maWcnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB5YW1sIGZyb20gJ3lhbWwnO1xuaW1wb3J0IHtnZXRTY2hlbWEsIHZhbGlkYXRlfSBmcm9tICcuL3NjaGVtYS9zY2hlbWEnO1xuXG4vKipcbiAqIGxpbGNvbmZpZyBsb2FkZXIgdG8gaGFuZGxlIGAueWFtbGAgZmlsZXNcbiAqIEB0eXBlIHtpbXBvcnQoJ2xpbGNvbmZpZycpLkxvYWRlclN5bmN9XG4gKi9cbmZ1bmN0aW9uIHlhbWxMb2FkZXIoZmlsZXBhdGgsIGNvbnRlbnQpIHtcbiAgcmV0dXJuIHlhbWwucGFyc2UoY29udGVudCk7XG59XG5cbi8qKlxuICogQSBjYWNoZSBvZiB0aGUgcmF3IGNvbmZpZyBmaWxlIChhIEpTT04gc3RyaW5nKSBhdCBhIGZpbGVwYXRoLlxuICogVGhpcyBpcyB1c2VkIGZvciBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nLlxuICogTm90ZSB0aGF0IGNvbmZpZyBmaWxlcyBuZWVkbid0IGJlIEpTT04sIGJ1dCBpdCBoZWxwcyBpZiB0aGV5IGFyZS5cbiAqIEB0eXBlIHtNYXA8c3RyaW5nLFJhd0pzb24+fVxuICovXG5jb25zdCByYXdDb25maWcgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogQ3VzdG9tIEpTT04gbG9hZGVyIHRoYXQgY2FjaGVzIHRoZSByYXcgY29uZmlnIGZpbGUgKGZvciB1c2Ugd2l0aCBgYmV0dGVyLWFqdi1lcnJvcnNgKS5cbiAqIElmIGl0IHdlcmVuJ3QgZm9yIHRoaXMgY2FjaGUsIHRoaXMgd291bGQgYmUgdW5uZWNlc3NhcnkuXG4gKiBAdHlwZSB7aW1wb3J0KCdsaWxjb25maWcnKS5Mb2FkZXJTeW5jfVxuICovXG5mdW5jdGlvbiBqc29uTG9hZGVyKGZpbGVwYXRoLCBjb250ZW50KSB7XG4gIHJhd0NvbmZpZy5zZXQoZmlsZXBhdGgsIGNvbnRlbnQpO1xuICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50KTtcbn1cblxuLyoqXG4gKiBMb2FkcyBhIGNvbmZpZyBmaWxlIGZyb20gYW4gZXhwbGljaXQgcGF0aFxuICogQHBhcmFtIHtMaWxjb25maWdBc3luY1NlYXJjaGVyfSBsYyAtIGxpbGNvbmZpZyBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVwYXRoIC0gUGF0aCB0byBjb25maWcgZmlsZVxuICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KCdsaWxjb25maWcnKS5MaWxjb25maWdSZXN1bHQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBsb2FkQ29uZmlnRmlsZShsYywgZmlsZXBhdGgpIHtcbiAgdHJ5IHtcbiAgICAvLyByZW1vdmluZyBcImF3YWl0XCIgd2lsbCBjYXVzZSBhbnkgcmVqZWN0aW9uIHRvIF9ub3RfIGJlIGNhdWdodCBpbiB0aGlzIGJsb2NrIVxuICAgIHJldHVybiBhd2FpdCBsYy5sb2FkKGZpbGVwYXRoKTtcbiAgfSBjYXRjaCAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyBlcnIpIHtcbiAgICBpZiAoLyoqIEB0eXBlIHtOb2RlSlMuRXJybm9FeGNlcHRpb259ICovIChlcnIpLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAvKiogQHR5cGUge05vZGVKUy5FcnJub0V4Y2VwdGlvbn0gKi8gKFxuICAgICAgICBlcnJcbiAgICAgICkubWVzc2FnZSA9IGBDb25maWcgZmlsZSBub3QgZm91bmQgYXQgdXNlci1wcm92aWRlZCBwYXRoOiAke2ZpbGVwYXRofWA7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgLy8gZ2VuZXJhbGx5IGludmFsaWQgSlNPTlxuICAgICAgZXJyLm1lc3NhZ2UgPSBgQ29uZmlnIGZpbGUgYXQgdXNlci1wcm92aWRlZCBwYXRoICR7ZmlsZXBhdGh9IGlzIGludmFsaWQ6XFxuJHtlcnIubWVzc2FnZX1gO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuLyoqXG4gKiBTZWFyY2hlcyBmb3IgYSBjb25maWcgZmlsZVxuICogQHBhcmFtIHtMaWxjb25maWdBc3luY1NlYXJjaGVyfSBsYyAtIGxpbGNvbmZpZyBpbnN0YW5jZVxuICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KCdsaWxjb25maWcnKS5MaWxjb25maWdSZXN1bHQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBzZWFyY2hDb25maWdGaWxlKGxjKSB7XG4gIHJldHVybiBhd2FpdCBsYy5zZWFyY2goKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhbiBhcnJheSBvZiBlcnJvcnMgYW5kIHRoZSByZXN1bHQgb2YgbG9hZGluZyBhIGNvbmZpZyBmaWxlLCBnZW5lcmF0ZSBhXG4gKiBoZWxwZnVsIHN0cmluZyBmb3IgdGhlIHVzZXIuXG4gKlxuICogLSBJZiBgb3B0c2AgY29udGFpbnMgYSBganNvbmAgcHJvcGVydHksIHRoaXMgc2hvdWxkIGJlIHRoZSBvcmlnaW5hbCBKU09OXG4gKiAgIF9zdHJpbmdfIG9mIHRoZSBjb25maWcgZmlsZS4gIFRoaXMgaXMgb25seSBhcHBsaWNhYmxlIGlmIHRoZSBjb25maWcgZmlsZVxuICogICB3YXMgaW4gSlNPTiBmb3JtYXQuIElmIHByZXNlbnQsIGl0IHdpbGwgYXNzb2NpYXRlIGxpbmUgbnVtYmVycyB3aXRoIGVycm9ycy5cbiAqIC0gSWYgYGVycm9yc2AgaGFwcGVucyB0byBiZSBlbXB0eSwgdGhpcyB3aWxsIHRocm93LlxuICogQHBhcmFtIHtpbXBvcnQoJ2FqdicpLkVycm9yT2JqZWN0W119IGVycm9ycyAtIE5vbi1lbXB0eSBhcnJheSBvZiBlcnJvcnMuIFJlcXVpcmVkLlxuICogQHBhcmFtIHtSZWFkQ29uZmlnRmlsZVJlc3VsdFsnY29uZmlnJ118YW55fSBbY29uZmlnXSAtXG4gKiBDb25maWd1cmF0aW9uICYgbWV0YWRhdGFcbiAqIEBwYXJhbSB7Rm9ybWF0Q29uZmlnRXJyb3JzT3B0aW9uc30gW29wdHNdXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGBlcnJvcnNgIGlzIGVtcHR5XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RXJyb3JzKGVycm9ycyA9IFtdLCBjb25maWcgPSB7fSwgb3B0cyA9IHt9KSB7XG4gIGlmIChlcnJvcnMgJiYgIWVycm9ycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBvZiBlcnJvcnMgbXVzdCBiZSBub24tZW1wdHknKTtcbiAgfVxuICByZXR1cm4gYmV0dGVyQWp2RXJyb3JzKGdldFNjaGVtYShvcHRzLnNjaGVtYUlkKSwgY29uZmlnLCBlcnJvcnMsIHtcbiAgICBqc29uOiBvcHRzLmpzb24sXG4gICAgZm9ybWF0OiAnY2xpJyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2l2ZW4gYW4gb3B0aW9uYWwgcGF0aCwgcmVhZCBhIGNvbmZpZyBmaWxlLiBWYWxpZGF0ZXMgdGhlIGNvbmZpZyBmaWxlLlxuICpcbiAqIENhbGwge0BsaW5rIHZhbGlkYXRlfSBpZiB5b3UgYWxyZWFkeSBoYXZlIGEgY29uZmlnIG9iamVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbZmlsZXBhdGhdIC0gUGF0aCB0byBjb25maWcgZmlsZSwgaWYgd2UgaGF2ZSBvbmVcbiAqIEBwYXJhbSB7UmVhZENvbmZpZ0ZpbGVPcHRpb25zfSBbb3B0c10gLSBPcHRpb25zXG4gKiBAcHVibGljXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxSZWFkQ29uZmlnRmlsZVJlc3VsdD59IENvbnRhaW5zIGNvbmZpZyBhbmQgZmlsZXBhdGgsIGlmIGZvdW5kLCBhbmQgYW55IGVycm9yc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZENvbmZpZ0ZpbGUoZmlsZXBhdGgsIG9wdHMgPSB7fSkge1xuICBjb25zdCBsYyA9IGxpbGNvbmZpZygnYXBwaXVtJywge1xuICAgIGxvYWRlcnM6IHtcbiAgICAgICcueWFtbCc6IHlhbWxMb2FkZXIsXG4gICAgICAnLnltbCc6IHlhbWxMb2FkZXIsXG4gICAgICAnLmpzb24nOiBqc29uTG9hZGVyLFxuICAgICAgbm9FeHQ6IGpzb25Mb2FkZXIsXG4gICAgfSxcbiAgICBwYWNrYWdlUHJvcDogJ2FwcGl1bUNvbmZpZycsXG4gIH0pO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGZpbGVwYXRoID8gYXdhaXQgbG9hZENvbmZpZ0ZpbGUobGMsIGZpbGVwYXRoKSA6IGF3YWl0IHNlYXJjaENvbmZpZ0ZpbGUobGMpO1xuXG4gIGlmIChyZXN1bHQ/LmZpbGVwYXRoICYmICFyZXN1bHQ/LmlzRW1wdHkpIHtcbiAgICBjb25zdCB7cHJldHR5ID0gdHJ1ZX0gPSBvcHRzO1xuICAgIHRyeSB7XG4gICAgICBsZXQgY29uZmlnUmVzdWx0O1xuICAgICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGUocmVzdWx0LmNvbmZpZyk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGVycm9ycykpIHtcbiAgICAgICAgY29uZmlnUmVzdWx0ID0gey4uLnJlc3VsdCwgZXJyb3JzfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlYXNvbiA9IGZvcm1hdEVycm9ycyhlcnJvcnMsIHJlc3VsdC5jb25maWcsIHtcbiAgICAgICAgICBqc29uOiByYXdDb25maWcuZ2V0KHJlc3VsdC5maWxlcGF0aCksXG4gICAgICAgICAgcHJldHR5LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uZmlnUmVzdWx0ID0gcmVhc29uID8gey4uLnJlc3VsdCwgZXJyb3JzLCByZWFzb259IDogey4uLnJlc3VsdCwgZXJyb3JzfTtcbiAgICAgIH1cblxuICAgICAgLy8gbm9ybWFsaXplICh0byBjYW1lbCBjYXNlKSBhbGwgdG9wLWxldmVsIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBjb25maWcgZmlsZVxuICAgICAgY29uZmlnUmVzdWx0LmNvbmZpZyA9IG5vcm1hbGl6ZUNvbmZpZygvKiogQHR5cGUge0FwcGl1bUNvbmZpZ30gKi8gKGNvbmZpZ1Jlc3VsdC5jb25maWcpKTtcblxuICAgICAgcmV0dXJuIGNvbmZpZ1Jlc3VsdDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gY2xlYW4gdXAgdGhlIHJhdyBjb25maWcgZmlsZSBjYWNoZSwgd2hpY2ggaXMgb25seSBrZXB0IHRvIGJldHRlciByZXBvcnQgZXJyb3JzLlxuICAgICAgcmF3Q29uZmlnLmRlbGV0ZShyZXN1bHQuZmlsZXBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0ID8/IHt9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgc2NoZW1hIHByb3BlcnR5IG5hbWVzIHRvIGVpdGhlciBhKSB0aGUgdmFsdWUgb2YgdGhlIGBhcHBpdW1DbGlEZXN0YCBwcm9wZXJ0eSwgaWYgYW55OyBvciBiKSBjYW1lbC1jYXNlXG4gKiBAcGFyYW0ge0FwcGl1bUNvbmZpZ30gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBvYmplY3RcbiAqIEByZXR1cm5zIHtOb3JtYWxpemVkQXBwaXVtQ29uZmlnfSBOZXcgb2JqZWN0IHdpdGggY2FtZWwtY2FzZWQga2V5cyAob3IgYGRlc3RgIGtleXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQ29uZmlnKGNvbmZpZykge1xuICBjb25zdCBzY2hlbWEgPSBnZXRTY2hlbWEoKTtcbiAgLyoqXG4gICAqIEBwYXJhbSB7QXBwaXVtQ29uZmlnfSBjb25maWdcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWN0aW9uXSAtIEtleXBhdGggKGxvZGFzaCBgXy5nZXQoKWAgc3R5bGUpIHRvIHNlY3Rpb24gb2YgY29uZmlnLiBJZiBvbWl0dGVkLCBhc3N1bWUgcm9vdCBBcHBpdW0gY29uZmlnIHNjaGVtYVxuICAgKiBAdG9kbyBSZXdyaXRlIGFzIGEgbG9vcFxuICAgKiBAcmV0dXJucyBOb3JtYWxpemVkIHNlY3Rpb24gb2YgY29uZmlnXG4gICAqL1xuICBjb25zdCBub3JtYWxpemUgPSAoY29uZmlnLCBzZWN0aW9uKSA9PiB7XG4gICAgY29uc3Qgb2JqID0gXy5pc1VuZGVmaW5lZChzZWN0aW9uKSA/IGNvbmZpZyA6IF8uZ2V0KGNvbmZpZywgc2VjdGlvbiwgY29uZmlnKTtcblxuICAgIGNvbnN0IG1hcHBlZE9iaiA9IF8ubWFwS2V5cyhcbiAgICAgIG9iaixcbiAgICAgIChfXywgcHJvcCkgPT4gc2NoZW1hLnByb3BlcnRpZXNbcHJvcF0/LmFwcGl1bUNsaURlc3QgPz8gXy5jYW1lbENhc2UocHJvcClcbiAgICApO1xuXG4gICAgcmV0dXJuIF8ubWFwVmFsdWVzKG1hcHBlZE9iaiwgKHZhbHVlLCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgY29uc3QgbmV4dFNlY3Rpb24gPSBzZWN0aW9uID8gYCR7c2VjdGlvbn0uJHtwcm9wZXJ0eX1gIDogcHJvcGVydHk7XG4gICAgICByZXR1cm4gaXNTY2hlbWFUeXBlT2JqZWN0KHZhbHVlKSA/IG5vcm1hbGl6ZShjb25maWcsIG5leHRTZWN0aW9uKSA6IHZhbHVlO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc2NoZW1hIHByb3AgcmVmZXJlbmNlcyBhbiBvYmplY3QsIG9yIGlmIGl0J3MgYW4gb2JqZWN0IGl0c2VsZlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYWp2JykuU2NoZW1hT2JqZWN0fG9iamVjdH0gc2NoZW1hIC0gUmVmZXJlbmNpbmcgc2NoZW1hIG9iamVjdFxuICAgKi9cbiAgY29uc3QgaXNTY2hlbWFUeXBlT2JqZWN0ID0gKHNjaGVtYSkgPT4gQm9vbGVhbihzY2hlbWEucHJvcGVydGllcyk7XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZShjb25maWcpO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBjYWxsaW5nIHtAbGluayByZWFkQ29uZmlnRmlsZX0uXG4gKiBAdHlwZWRlZiBSZWFkQ29uZmlnRmlsZVJlc3VsdFxuICogQHByb3BlcnR5IHtpbXBvcnQoJ2FqdicpLkVycm9yT2JqZWN0W119IFtlcnJvcnNdIC0gVmFsaWRhdGlvbiBlcnJvcnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZmlsZXBhdGhdIC0gVGhlIHBhdGggdG8gdGhlIGNvbmZpZyBmaWxlLCBpZiBmb3VuZFxuICogQHByb3BlcnR5IHtib29sZWFufSBbaXNFbXB0eV0gLSBJZiBgdHJ1ZWAsIHRoZSBjb25maWcgZmlsZSBleGlzdHMgYnV0IGlzIGVtcHR5XG4gKiBAcHJvcGVydHkge05vcm1hbGl6ZWRBcHBpdW1Db25maWd9IFtjb25maWddIC0gVGhlIHBhcnNlZCBjb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ3xpbXBvcnQoJ0BzaWR2aW5kL2JldHRlci1hanYtZXJyb3JzJykuSU91dHB1dEVycm9yW119IFtyZWFzb25dIC0gSHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2FnZXMgYW5kIHN1Z2dlc3Rpb25zLiBJZiB0aGUgYHByZXR0eWAgb3B0aW9uIGlzIGB0cnVlYCwgdGhpcyB3aWxsIGJlIGEgbmljZSBzdHJpbmcgdG8gcHJpbnQuXG4gKi9cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmVhZENvbmZpZ0ZpbGV9LlxuICogQHR5cGVkZWYgUmVhZENvbmZpZ0ZpbGVPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtwcmV0dHk9dHJ1ZV0gSWYgYGZhbHNlYCwgZG8gbm90IHVzZSBjb2xvciBhbmQgZmFuY3kgZm9ybWF0dGluZyBpbiB0aGUgYHJlYXNvbmAgcHJvcGVydHkgb2YgdGhlIHtAbGluayBSZWFkQ29uZmlnRmlsZVJlc3VsdH0uIFRoZSB2YWx1ZSBvZiBgcmVhc29uYCBpcyB0aGVuIHN1aXRhYmxlIGZvciBtYWNoaW5lLXJlYWRpbmcuXG4gKi9cblxuLyoqXG4gKiBUaGlzIGlzIGFuIGBBc3luY1NlYXJjaGVyYCB3aGljaCBpcyBpbmV4cGxpY2FibHkgX25vdF8gZXhwb3J0ZWQgYnkgdGhlIGBsaWxjb25maWdgIHR5cGUgZGVmaW5pdGlvbi5cbiAqIEB0eXBlZGVmIHtSZXR1cm5UeXBlPGltcG9ydCgnbGlsY29uZmlnJylbXCJsaWxjb25maWdcIl0+fSBMaWxjb25maWdBc3luY1NlYXJjaGVyXG4gKi9cblxuLyoqXG4gKiBUaGUgY29udGVudHMgb2YgYW4gQXBwaXVtIGNvbmZpZyBmaWxlLiBHZW5lcmF0ZWQgZnJvbSBzY2hlbWFcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5BcHBpdW1Db25maWd9IEFwcGl1bUNvbmZpZ1xuICovXG5cbi8qKlxuICogVGhlIGNvbnRlbnRzIG9mIGFuIEFwcGl1bSBjb25maWcgZmlsZSB3aXRoIGNhbWVsY2FzZWQgcHJvcGVydHkgbmFtZXMgKGFuZCB1c2luZyBgYXBwaXVtQ2xpRGVzdGAgdmFsdWUgaWYgcHJlc2VudCkuIEdlbmVyYXRlZCBmcm9tIHtAbGluayBBcHBpdW1Db25maWd9XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuTm9ybWFsaXplZEFwcGl1bUNvbmZpZ30gTm9ybWFsaXplZEFwcGl1bUNvbmZpZ1xuICovXG5cbi8qKlxuICogVGhlIHN0cmluZyBzaG91bGQgYmUgYSByYXcgSlNPTiBzdHJpbmcuXG4gKiBAdHlwZWRlZiB7c3RyaW5nfSBSYXdKc29uXG4gKi9cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZm9ybWF0RXJyb3JzfS5cbiAqIEB0eXBlZGVmIEZvcm1hdENvbmZpZ0Vycm9yc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCcuL2NvbmZpZy1maWxlJykuUmF3SnNvbn0gW2pzb25dIC0gUmF3IEpTT04gY29uZmlnIChhcyBzdHJpbmcpXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtwcmV0dHk9dHJ1ZV0gLSBXaGV0aGVyIHRvIGZvcm1hdCBlcnJvcnMgYXMgYSBDTEktZnJpZW5kbHkgc3RyaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gIFtzY2hlbWFJZF0gLSBTcGVjaWZpYyBJRCBvZiBhIHByb3A7IG90aGVyd2lzZSBlbnRpcmUgc2NoZW1hXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQU1BLFNBQVNBLFVBQVQsQ0FBb0JDLFFBQXBCLEVBQThCQyxPQUE5QixFQUF1QztFQUNyQyxPQUFPQyxhQUFBLENBQUtDLEtBQUwsQ0FBV0YsT0FBWCxDQUFQO0FBQ0Q7O0FBUUQsTUFBTUcsU0FBUyxHQUFHLElBQUlD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
|