appium 1.21.0-rc.1 → 1.21.0
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.js +11 -4
- package/build/lib/main.js +5 -3
- package/lib/appium.js +8 -1
- package/npm-shrinkwrap.json +30 -29
- package/package.json +2 -2
package/build/lib/appium.js
CHANGED
|
@@ -40,7 +40,8 @@ const PLATFORMS = {
|
|
|
40
40
|
MAC: 'mac',
|
|
41
41
|
TIZEN: 'tizen',
|
|
42
42
|
LINUX: 'linux',
|
|
43
|
-
ROKU: 'roku'
|
|
43
|
+
ROKU: 'roku',
|
|
44
|
+
WEBOS: 'webos'
|
|
44
45
|
};
|
|
45
46
|
const AUTOMATION_NAMES = {
|
|
46
47
|
APPIUM: 'Appium',
|
|
@@ -58,7 +59,8 @@ const AUTOMATION_NAMES = {
|
|
|
58
59
|
FLUTTER: 'Flutter',
|
|
59
60
|
SAFARI: 'Safari',
|
|
60
61
|
GECKO: 'Gecko',
|
|
61
|
-
ROKU: 'Roku'
|
|
62
|
+
ROKU: 'Roku',
|
|
63
|
+
WEBOS: 'WebOS'
|
|
62
64
|
};
|
|
63
65
|
const DRIVER_MAP = {
|
|
64
66
|
[AUTOMATION_NAMES.UIAUTOMATOR2.toLowerCase()]: {
|
|
@@ -120,6 +122,10 @@ const DRIVER_MAP = {
|
|
|
120
122
|
[AUTOMATION_NAMES.ROKU.toLowerCase()]: {
|
|
121
123
|
driverClassName: 'RokuDriver',
|
|
122
124
|
driverPackage: 'appium-roku-driver'
|
|
125
|
+
},
|
|
126
|
+
[AUTOMATION_NAMES.WEBOS.toLowerCase()]: {
|
|
127
|
+
driverClassName: 'WebOSDriver',
|
|
128
|
+
driverPackage: 'appium-webos-driver'
|
|
123
129
|
}
|
|
124
130
|
};
|
|
125
131
|
const PLATFORMS_MAP = {
|
|
@@ -161,7 +167,8 @@ const PLATFORMS_MAP = {
|
|
|
161
167
|
[PLATFORMS.MAC]: () => AUTOMATION_NAMES.MAC,
|
|
162
168
|
[PLATFORMS.TIZEN]: () => AUTOMATION_NAMES.TIZEN,
|
|
163
169
|
[PLATFORMS.LINUX]: () => AUTOMATION_NAMES.GECKO,
|
|
164
|
-
[PLATFORMS.ROKU]: () => AUTOMATION_NAMES.ROKU
|
|
170
|
+
[PLATFORMS.ROKU]: () => AUTOMATION_NAMES.ROKU,
|
|
171
|
+
[PLATFORMS.WEBOS]: () => AUTOMATION_NAMES.WEBOS
|
|
165
172
|
};
|
|
166
173
|
const desiredCapabilityConstraints = {
|
|
167
174
|
automationName: {
|
|
@@ -552,4 +559,4 @@ function isAppiumDriverCommand(cmd) {
|
|
|
552
559
|
}require('source-map-support').install();
|
|
553
560
|
|
|
554
561
|
|
|
555
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9hcHBpdW0uanMiXSwibmFtZXMiOlsiUExBVEZPUk1TIiwiRkFLRSIsIkFORFJPSUQiLCJJT1MiLCJBUFBMRV9UVk9TIiwiV0lORE9XUyIsIk1BQyIsIlRJWkVOIiwiTElOVVgiLCJST0tVIiwiQVVUT01BVElPTl9OQU1FUyIsIkFQUElVTSIsIlVJQVVUT01BVE9SMiIsIlVJQVVUT01BVE9SMSIsIlhDVUlURVNUIiwiWU9VSUVOR0lORSIsIkVTUFJFU1NPIiwiSU5TVFJVTUVOVFMiLCJNQUMyIiwiRkxVVFRFUiIsIlNBRkFSSSIsIkdFQ0tPIiwiRFJJVkVSX01BUCIsInRvTG93ZXJDYXNlIiwiZHJpdmVyQ2xhc3NOYW1lIiwiZHJpdmVyUGFja2FnZSIsIlBMQVRGT1JNU19NQVAiLCJsb2dEaXZpZGVyTGVuZ3RoIiwiYXV0b21hdGlvbldhcm5pbmciLCJkaXZpZGVyIiwiRU9MIiwiXyIsInJlcGVhdCIsImF1dG9tYXRpb25XYXJuaW5nU3RyaW5nIiwibG9nIiwid2lkdGgiLCJ3YXJuIiwiY2FwcyIsInBsYXRmb3JtVmVyc2lvbiIsInNlbXZlciIsInZhbGlkIiwiY29lcmNlIiwic2F0aXNmaWVzIiwiaW5mbyIsImRlc2lyZWRDYXBhYmlsaXR5Q29uc3RyYWludHMiLCJhdXRvbWF0aW9uTmFtZSIsInByZXNlbmNlIiwiaXNTdHJpbmciLCJpbmNsdXNpb25DYXNlSW5zZW5zaXRpdmUiLCJ2YWx1ZXMiLCJwbGF0Zm9ybU5hbWUiLCJrZXlzIiwic2Vzc2lvbnNMaXN0R3VhcmQiLCJBc3luY0xvY2siLCJwZW5kaW5nRHJpdmVyc0d1YXJkIiwiQXBwaXVtRHJpdmVyIiwiQmFzZURyaXZlciIsImNvbnN0cnVjdG9yIiwiYXJncyIsInRtcERpciIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fVE1QX0RJUiIsImRlc2lyZWRDYXBDb25zdHJhaW50cyIsIm5ld0NvbW1hbmRUaW1lb3V0TXMiLCJPYmplY3QiLCJhc3NpZ24iLCJzZXNzaW9ucyIsInBlbmRpbmdEcml2ZXJzIiwiaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCIsInNlc3Npb25FeGlzdHMiLCJzZXNzaW9uSWQiLCJkc3RTZXNzaW9uIiwiZHJpdmVyRm9yU2Vzc2lvbiIsImdldERyaXZlckFuZFZlcnNpb25Gb3JDYXBzIiwiRXJyb3IiLCJhdXRvbWF0aW9uTmFtZUNhcCIsImRyaXZlclNlbGVjdG9yIiwidG9Mb3dlciIsImZhaWx1cmVWZXJiIiwic3VnZ2VzdGlvbiIsImlzUGxhaW5PYmplY3QiLCJkcml2ZXIiLCJyZXF1aXJlIiwidmVyc2lvbiIsImdldERyaXZlclZlcnNpb24iLCJuYW1lIiwiZSIsImRlYnVnIiwibXNnIiwiZHJpdmVyTmFtZSIsImdldFN0YXR1cyIsImJ1aWxkIiwiY2xvbmUiLCJnZXRTZXNzaW9ucyIsImFjcXVpcmUiLCJ0b1BhaXJzIiwibWFwIiwiaWQiLCJjYXBhYmlsaXRpZXMiLCJwcmludE5ld1Nlc3Npb25Bbm5vdW5jZW1lbnQiLCJkcml2ZXJWZXJzaW9uIiwiaW50cm9TdHJpbmciLCJBUFBJVU1fVkVSIiwiY3JlYXRlU2Vzc2lvbiIsImpzb253cENhcHMiLCJyZXFDYXBzIiwidzNjQ2FwYWJpbGl0aWVzIiwiZGVmYXVsdENhcGFiaWxpdGllcyIsImNsb25lRGVlcCIsImRlZmF1bHRTZXR0aW5ncyIsImp3cFNldHRpbmdzIiwidzNjU2V0dGluZ3MiLCJhbHdheXNNYXRjaCIsImZpcnN0TWF0Y2hFbnRyeSIsImZpcnN0TWF0Y2giLCJwcm90b2NvbCIsImlubmVyU2Vzc2lvbklkIiwiZENhcHMiLCJwYXJzZWRDYXBzIiwiZGVzaXJlZENhcHMiLCJwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMiLCJwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMiLCJlcnJvciIsIklubmVyRHJpdmVyIiwic2Vzc2lvbk92ZXJyaWRlIiwiZGVsZXRlQWxsU2Vzc2lvbnMiLCJydW5uaW5nRHJpdmVyc0RhdGEiLCJvdGhlclBlbmRpbmdEcml2ZXJzRGF0YSIsImQiLCJyZWxheGVkU2VjdXJpdHlFbmFibGVkIiwiaXNFbXB0eSIsImRlbnlJbnNlY3VyZSIsImEiLCJhbGxvd0luc2VjdXJlIiwic2VydmVyIiwiY3VyU2Vzc2lvbkRhdGFGb3JEcml2ZXIiLCJlcnJvcnMiLCJTZXNzaW9uTm90Q3JlYXRlZEVycm9yIiwibWVzc2FnZSIsImRydiIsImRyaXZlckRhdGEiLCJwdXNoIiwicHVsbCIsImF0dGFjaFVuZXhwZWN0ZWRTaHV0ZG93bkhhbmRsZXIiLCJzdGFydE5ld0NvbW1hbmRUaW1lb3V0IiwiaXNXM0NQcm90b2NvbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ1cGRhdGVTZXR0aW5ncyIsImlzTWpzb253cFByb3RvY29sIiwidmFsdWUiLCJyZW1vdmVTZXNzaW9uRnJvbU1hc3Rlckxpc3QiLCJjYXVzZSIsImlzRnVuY3Rpb24iLCJvblVuZXhwZWN0ZWRTaHV0ZG93biIsInRoZW4iLCJjYXRjaCIsIkIiLCJDYW5jZWxsYXRpb25FcnJvciIsImRhdGEiLCJmaWx0ZXIiLCJzIiwiZGF0dW0iLCJkZWxldGVTZXNzaW9uIiwib3RoZXJTZXNzaW9uc0RhdGEiLCJjdXJDb25zdHJ1Y3Rvck5hbWUiLCJrZXkiLCJvcHRzIiwic2Vzc2lvbnNDb3VudCIsInNpemUiLCJmb3JjZSIsInJlYXNvbiIsInV0aWwiLCJwbHVyYWxpemUiLCJjbGVhbnVwUHJvbWlzZXMiLCJzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biIsImNsZWFudXBQcm9taXNlIiwiZXhlY3V0ZUNvbW1hbmQiLCJjbWQiLCJpc0FwcGl1bURyaXZlckNvbW1hbmQiLCJsYXN0IiwicmVzIiwicHJveHlBY3RpdmUiLCJnZXRQcm94eUF2b2lkTGlzdCIsImNhblByb3h5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLFNBQVMsR0FBRztBQUNoQkMsRUFBQUEsSUFBSSxFQUFFLE1BRFU7QUFFaEJDLEVBQUFBLE9BQU8sRUFBRSxTQUZPO0FBR2hCQyxFQUFBQSxHQUFHLEVBQUUsS0FIVztBQUloQkMsRUFBQUEsVUFBVSxFQUFFLE1BSkk7QUFLaEJDLEVBQUFBLE9BQU8sRUFBRSxTQUxPO0FBTWhCQyxFQUFBQSxHQUFHLEVBQUUsS0FOVztBQU9oQkMsRUFBQUEsS0FBSyxFQUFFLE9BUFM7QUFRaEJDLEVBQUFBLEtBQUssRUFBRSxPQVJTO0FBU2hCQyxFQUFBQSxJQUFJLEVBQUU7QUFUVSxDQUFsQjtBQVlBLE1BQU1DLGdCQUFnQixHQUFHO0FBQ3ZCQyxFQUFBQSxNQUFNLEVBQUUsUUFEZTtBQUV2QkMsRUFBQUEsWUFBWSxFQUFFLGNBRlM7QUFHdkJDLEVBQUFBLFlBQVksRUFBRSxjQUhTO0FBSXZCQyxFQUFBQSxRQUFRLEVBQUUsVUFKYTtBQUt2QkMsRUFBQUEsVUFBVSxFQUFFLFlBTFc7QUFNdkJDLEVBQUFBLFFBQVEsRUFBRSxVQU5hO0FBT3ZCVCxFQUFBQSxLQUFLLEVBQUUsT0FQZ0I7QUFRdkJOLEVBQUFBLElBQUksRUFBRSxNQVJpQjtBQVN2QmdCLEVBQUFBLFdBQVcsRUFBRSxhQVRVO0FBVXZCWixFQUFBQSxPQUFPLEVBQUUsU0FWYztBQVd2QkMsRUFBQUEsR0FBRyxFQUFFLEtBWGtCO0FBWXZCWSxFQUFBQSxJQUFJLEVBQUUsTUFaaUI7QUFhdkJDLEVBQUFBLE9BQU8sRUFBRSxTQWJjO0FBY3ZCQyxFQUFBQSxNQUFNLEVBQUUsUUFkZTtBQWV2QkMsRUFBQUEsS0FBSyxFQUFFLE9BZmdCO0FBZ0J2QlosRUFBQUEsSUFBSSxFQUFFO0FBaEJpQixDQUF6QjtBQWtCQSxNQUFNYSxVQUFVLEdBQUc7QUFDakIsR0FBQ1osZ0JBQWdCLENBQUNFLFlBQWpCLENBQThCVyxXQUE5QixFQUFELEdBQStDO0FBQzdDQyxJQUFBQSxlQUFlLEVBQUUsMkJBRDRCO0FBRTdDQyxJQUFBQSxhQUFhLEVBQUU7QUFGOEIsR0FEOUI7QUFLakIsR0FBQ2YsZ0JBQWdCLENBQUNJLFFBQWpCLENBQTBCUyxXQUExQixFQUFELEdBQTJDO0FBQ3pDQyxJQUFBQSxlQUFlLEVBQUUsZ0JBRHdCO0FBRXpDQyxJQUFBQSxhQUFhLEVBQUU7QUFGMEIsR0FMMUI7QUFTakIsR0FBQ2YsZ0JBQWdCLENBQUNLLFVBQWpCLENBQTRCUSxXQUE1QixFQUFELEdBQTZDO0FBQzNDQyxJQUFBQSxlQUFlLEVBQUUsa0JBRDBCO0FBRTNDQyxJQUFBQSxhQUFhLEVBQUU7QUFGNEIsR0FUNUI7QUFhakIsR0FBQ2YsZ0JBQWdCLENBQUNULElBQWpCLENBQXNCc0IsV0FBdEIsRUFBRCxHQUF1QztBQUNyQ0MsSUFBQUEsZUFBZSxFQUFFLFlBRG9CO0FBRXJDQyxJQUFBQSxhQUFhLEVBQUU7QUFGc0IsR0FidEI7QUFpQmpCLEdBQUNmLGdCQUFnQixDQUFDRyxZQUFqQixDQUE4QlUsV0FBOUIsRUFBRCxHQUErQztBQUM3Q0MsSUFBQUEsZUFBZSxFQUFFLGVBRDRCO0FBRTdDQyxJQUFBQSxhQUFhLEVBQUU7QUFGOEIsR0FqQjlCO0FBcUJqQixHQUFDZixnQkFBZ0IsQ0FBQ08sV0FBakIsQ0FBNkJNLFdBQTdCLEVBQUQsR0FBOEM7QUFDNUNDLElBQUFBLGVBQWUsRUFBRSxXQUQyQjtBQUU1Q0MsSUFBQUEsYUFBYSxFQUFFO0FBRjZCLEdBckI3QjtBQXlCakIsR0FBQ2YsZ0JBQWdCLENBQUNMLE9BQWpCLENBQXlCa0IsV0FBekIsRUFBRCxHQUEwQztBQUN4Q0MsSUFBQUEsZUFBZSxFQUFFLGVBRHVCO0FBRXhDQyxJQUFBQSxhQUFhLEVBQUU7QUFGeUIsR0F6QnpCO0FBNkJqQixHQUFDZixnQkFBZ0IsQ0FBQ0osR0FBakIsQ0FBcUJpQixXQUFyQixFQUFELEdBQXNDO0FBQ3BDQyxJQUFBQSxlQUFlLEVBQUUsV0FEbUI7QUFFcENDLElBQUFBLGFBQWEsRUFBRTtBQUZxQixHQTdCckI7QUFpQ2pCLEdBQUNmLGdCQUFnQixDQUFDUSxJQUFqQixDQUFzQkssV0FBdEIsRUFBRCxHQUF1QztBQUNyQ0MsSUFBQUEsZUFBZSxFQUFFLFlBRG9CO0FBRXJDQyxJQUFBQSxhQUFhLEVBQUU7QUFGc0IsR0FqQ3RCO0FBcUNqQixHQUFDZixnQkFBZ0IsQ0FBQ00sUUFBakIsQ0FBMEJPLFdBQTFCLEVBQUQsR0FBMkM7QUFDekNDLElBQUFBLGVBQWUsRUFBRSxnQkFEd0I7QUFFekNDLElBQUFBLGFBQWEsRUFBRTtBQUYwQixHQXJDMUI7QUF5Q2pCLEdBQUNmLGdCQUFnQixDQUFDSCxLQUFqQixDQUF1QmdCLFdBQXZCLEVBQUQsR0FBd0M7QUFDdENDLElBQUFBLGVBQWUsRUFBRSxhQURxQjtBQUV0Q0MsSUFBQUEsYUFBYSxFQUFFO0FBRnVCLEdBekN2QjtBQTZDakIsR0FBQ2YsZ0JBQWdCLENBQUNTLE9BQWpCLENBQXlCSSxXQUF6QixFQUFELEdBQTBDO0FBQ3hDQyxJQUFBQSxlQUFlLEVBQUUsZUFEdUI7QUFFeENDLElBQUFBLGFBQWEsRUFBRTtBQUZ5QixHQTdDekI7QUFpRGpCLEdBQUNmLGdCQUFnQixDQUFDVSxNQUFqQixDQUF3QkcsV0FBeEIsRUFBRCxHQUF5QztBQUN2Q0MsSUFBQUEsZUFBZSxFQUFFLGNBRHNCO0FBRXZDQyxJQUFBQSxhQUFhLEVBQUU7QUFGd0IsR0FqRHhCO0FBcURqQixHQUFDZixnQkFBZ0IsQ0FBQ1csS0FBakIsQ0FBdUJFLFdBQXZCLEVBQUQsR0FBd0M7QUFDdENDLElBQUFBLGVBQWUsRUFBRSxhQURxQjtBQUV0Q0MsSUFBQUEsYUFBYSxFQUFFO0FBRnVCLEdBckR2QjtBQXlEakIsR0FBQ2YsZ0JBQWdCLENBQUNELElBQWpCLENBQXNCYyxXQUF0QixFQUFELEdBQXVDO0FBQ3JDQyxJQUFBQSxlQUFlLEVBQUUsWUFEb0I7QUFFckNDLElBQUFBLGFBQWEsRUFBRTtBQUZzQjtBQXpEdEIsQ0FBbkI7QUErREEsTUFBTUMsYUFBYSxHQUFHO0FBQ3BCLEdBQUMxQixTQUFTLENBQUNDLElBQVgsR0FBa0IsTUFBTVMsZ0JBQWdCLENBQUNULElBRHJCO0FBRXBCLEdBQUNELFNBQVMsQ0FBQ0UsT0FBWCxHQUFxQixNQUFNO0FBR3pCLFVBQU15QixnQkFBZ0IsR0FBRyxFQUF6QjtBQUVBLFVBQU1DLGlCQUFpQixHQUFHLENBQ3ZCLHVHQUR1QixFQUV2QixvRkFGdUIsRUFHdkIscUlBSHVCLEVBSXZCLHdGQUp1QixFQUt2QixtSUFMdUIsRUFNdkIsOEhBTnVCLENBQTFCO0FBU0EsUUFBSUMsT0FBTyxHQUFJLEdBQUVDLE9BQUksR0FBRUMsZ0JBQUVDLE1BQUYsQ0FBUyxHQUFULEVBQWNMLGdCQUFkLENBQWdDLEdBQUVHLE9BQUksRUFBN0Q7QUFDQSxRQUFJRyx1QkFBdUIsR0FBR0osT0FBOUI7QUFDQUksSUFBQUEsdUJBQXVCLElBQUssd0JBQUQsR0FBMkJILE9BQXREOztBQUNBLFNBQUssSUFBSUksR0FBVCxJQUFnQk4saUJBQWhCLEVBQW1DO0FBQ2pDSyxNQUFBQSx1QkFBdUIsSUFBSUgsVUFBTSx1QkFBS0ksR0FBTCxFQUFVO0FBQUNDLFFBQUFBLEtBQUssRUFBRVIsZ0JBQWdCLEdBQUc7QUFBM0IsT0FBVixDQUFOLEdBQWlERyxPQUE1RTtBQUNEOztBQUNERyxJQUFBQSx1QkFBdUIsSUFBSUosT0FBM0I7O0FBR0FLLG9CQUFJRSxJQUFKLENBQVNILHVCQUFUOztBQUVBLFdBQU92QixnQkFBZ0IsQ0FBQ0UsWUFBeEI7QUFDRCxHQTVCbUI7QUE2QnBCLEdBQUNaLFNBQVMsQ0FBQ0csR0FBWCxHQUFrQmtDLElBQUQsSUFBVTtBQUN6QixVQUFNQyxlQUFlLEdBQUdDLGdCQUFPQyxLQUFQLENBQWFELGdCQUFPRSxNQUFQLENBQWNKLElBQUksQ0FBQ0MsZUFBbkIsQ0FBYixDQUF4Qjs7QUFDQUosb0JBQUlFLElBQUosQ0FBVSxvRUFBRCxHQUNOLGdHQURIOztBQUVBLFFBQUlFLGVBQWUsSUFBSUMsZ0JBQU9HLFNBQVAsQ0FBaUJKLGVBQWpCLEVBQWtDLFVBQWxDLENBQXZCLEVBQXNFO0FBQ3BFSixzQkFBSVMsSUFBSixDQUFTLCtDQUNOLFVBQVNqQyxnQkFBZ0IsQ0FBQ0ksUUFBUyxJQUQ3QixHQUVQLHlEQUZPLEdBR1AseUNBSEY7O0FBSUEsYUFBT0osZ0JBQWdCLENBQUNJLFFBQXhCO0FBQ0Q7O0FBRUQsV0FBT0osZ0JBQWdCLENBQUNPLFdBQXhCO0FBQ0QsR0ExQ21CO0FBMkNwQixHQUFDakIsU0FBUyxDQUFDSSxVQUFYLEdBQXdCLE1BQU1NLGdCQUFnQixDQUFDSSxRQTNDM0I7QUE0Q3BCLEdBQUNkLFNBQVMsQ0FBQ0ssT0FBWCxHQUFxQixNQUFNSyxnQkFBZ0IsQ0FBQ0wsT0E1Q3hCO0FBNkNwQixHQUFDTCxTQUFTLENBQUNNLEdBQVgsR0FBaUIsTUFBTUksZ0JBQWdCLENBQUNKLEdBN0NwQjtBQThDcEIsR0FBQ04sU0FBUyxDQUFDTyxLQUFYLEdBQW1CLE1BQU1HLGdCQUFnQixDQUFDSCxLQTlDdEI7QUErQ3BCLEdBQUNQLFNBQVMsQ0FBQ1EsS0FBWCxHQUFtQixNQUFNRSxnQkFBZ0IsQ0FBQ1csS0EvQ3RCO0FBZ0RwQixHQUFDckIsU0FBUyxDQUFDUyxJQUFYLEdBQWtCLE1BQU1DLGdCQUFnQixDQUFDRDtBQWhEckIsQ0FBdEI7QUFtREEsTUFBTW1DLDRCQUE0QixHQUFHO0FBQ25DQyxFQUFBQSxjQUFjLEVBQUU7QUFDZEMsSUFBQUEsUUFBUSxFQUFFLEtBREk7QUFFZEMsSUFBQUEsUUFBUSxFQUFFLElBRkk7QUFHZEMsSUFBQUEsd0JBQXdCLEVBQUVqQixnQkFBRWtCLE1BQUYsQ0FBU3ZDLGdCQUFUO0FBSFosR0FEbUI7QUFNbkN3QyxFQUFBQSxZQUFZLEVBQUU7QUFDWkosSUFBQUEsUUFBUSxFQUFFLElBREU7QUFFWkMsSUFBQUEsUUFBUSxFQUFFLElBRkU7QUFHWkMsSUFBQUEsd0JBQXdCLEVBQUVqQixnQkFBRW9CLElBQUYsQ0FBT3pCLGFBQVA7QUFIZDtBQU5xQixDQUFyQztBQWFBLE1BQU0wQixpQkFBaUIsR0FBRyxJQUFJQyxrQkFBSixFQUExQjtBQUNBLE1BQU1DLG1CQUFtQixHQUFHLElBQUlELGtCQUFKLEVBQTVCOztBQUVBLE1BQU1FLFlBQU4sU0FBMkJDLDRCQUEzQixDQUFzQztBQUNwQ0MsRUFBQUEsV0FBVyxDQUFFQyxJQUFGLEVBQVE7QUFLakIsUUFBSUEsSUFBSSxDQUFDQyxNQUFULEVBQWlCO0FBQ2ZDLE1BQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxjQUFaLEdBQTZCSixJQUFJLENBQUNDLE1BQWxDO0FBQ0Q7O0FBRUQsVUFBTUQsSUFBTjtBQUVBLFNBQUtLLHFCQUFMLEdBQTZCbkIsNEJBQTdCO0FBR0EsU0FBS29CLG1CQUFMLEdBQTJCLENBQTNCO0FBRUEsU0FBS04sSUFBTCxHQUFZTyxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCUixJQUFsQixDQUFaO0FBS0EsU0FBS1MsUUFBTCxHQUFnQixFQUFoQjtBQUtBLFNBQUtDLGNBQUwsR0FBc0IsRUFBdEI7QUFHQTtBQUNEOztBQUt5QixNQUF0QkMsc0JBQXNCLEdBQUk7QUFDNUIsV0FBTyxLQUFQO0FBQ0Q7O0FBRURDLEVBQUFBLGFBQWEsQ0FBRUMsU0FBRixFQUFhO0FBQ3hCLFVBQU1DLFVBQVUsR0FBRyxLQUFLTCxRQUFMLENBQWNJLFNBQWQsQ0FBbkI7QUFDQSxXQUFPQyxVQUFVLElBQUlBLFVBQVUsQ0FBQ0QsU0FBWCxLQUF5QixJQUE5QztBQUNEOztBQUVERSxFQUFBQSxnQkFBZ0IsQ0FBRUYsU0FBRixFQUFhO0FBQzNCLFdBQU8sS0FBS0osUUFBTCxDQUFjSSxTQUFkLENBQVA7QUFDRDs7QUFFREcsRUFBQUEsMEJBQTBCLENBQUVyQyxJQUFGLEVBQVE7QUFDaEMsUUFBSSxDQUFDTixnQkFBRWdCLFFBQUYsQ0FBV1YsSUFBSSxDQUFDYSxZQUFoQixDQUFMLEVBQW9DO0FBQ2xDLFlBQU0sSUFBSXlCLEtBQUosQ0FBVSw0Q0FBVixDQUFOO0FBQ0Q7O0FBRUQsVUFBTXpCLFlBQVksR0FBR2IsSUFBSSxDQUFDYSxZQUFMLENBQWtCM0IsV0FBbEIsRUFBckI7QUFHQSxRQUFJcUQsaUJBQWlCLEdBQUd2QyxJQUFJLENBQUNRLGNBQTdCOztBQUNBLFFBQUksQ0FBQ2QsZ0JBQUVnQixRQUFGLENBQVc2QixpQkFBWCxDQUFELElBQWtDQSxpQkFBaUIsQ0FBQ3JELFdBQWxCLE9BQW9DLFFBQTFFLEVBQW9GO0FBQ2xGLFlBQU1zRCxjQUFjLEdBQUduRCxhQUFhLENBQUN3QixZQUFELENBQXBDOztBQUNBLFVBQUkyQixjQUFKLEVBQW9CO0FBQ2xCRCxRQUFBQSxpQkFBaUIsR0FBR0MsY0FBYyxDQUFDeEMsSUFBRCxDQUFsQztBQUNEO0FBQ0Y7O0FBQ0R1QyxJQUFBQSxpQkFBaUIsR0FBRzdDLGdCQUFFK0MsT0FBRixDQUFVRixpQkFBVixDQUFwQjtBQUVBLFFBQUlHLFdBQVcsR0FBRyxNQUFsQjtBQUNBLFFBQUlDLFVBQVUsR0FBRyx3Q0FBakI7O0FBQ0EsUUFBSWpELGdCQUFFa0QsYUFBRixDQUFnQjNELFVBQVUsQ0FBQ3NELGlCQUFELENBQTFCLENBQUosRUFBb0Q7QUFDbEQsVUFBSTtBQUNGLGNBQU07QUFBQ25ELFVBQUFBLGFBQUQ7QUFBZ0JELFVBQUFBO0FBQWhCLFlBQW1DRixVQUFVLENBQUNzRCxpQkFBRCxDQUFuRDs7QUFDQSxjQUFNTSxNQUFNLEdBQUdDLE9BQU8sQ0FBQzFELGFBQUQsQ0FBUCxDQUF1QkQsZUFBdkIsQ0FBZjs7QUFDQSxlQUFPO0FBQ0wwRCxVQUFBQSxNQURLO0FBRUxFLFVBQUFBLE9BQU8sRUFBRSxLQUFLQyxnQkFBTCxDQUFzQkgsTUFBTSxDQUFDSSxJQUE3QixFQUFtQzdELGFBQW5DO0FBRkosU0FBUDtBQUlELE9BUEQsQ0FPRSxPQUFPOEQsQ0FBUCxFQUFVO0FBQ1ZyRCx3QkFBSXNELEtBQUosQ0FBVUQsQ0FBVjs7QUFDQVIsUUFBQUEsV0FBVyxHQUFHLE1BQWQ7QUFDQUMsUUFBQUEsVUFBVSxHQUFHLHdDQUFiO0FBQ0Q7QUFDRjs7QUFFRCxVQUFNUyxHQUFHLEdBQUcxRCxnQkFBRWdCLFFBQUYsQ0FBV1YsSUFBSSxDQUFDUSxjQUFoQixJQUNQLGFBQVlrQyxXQUFZLGlDQUFnQzFDLElBQUksQ0FBQ1EsY0FBZSxxQkFBN0UsR0FDSyxJQUFHUixJQUFJLENBQUNhLFlBQWEsR0FGbEIsR0FHUCxhQUFZNkIsV0FBWSwrQkFBOEIxQyxJQUFJLENBQUNhLFlBQWEsR0FIN0U7QUFJQSxVQUFNLElBQUl5QixLQUFKLENBQVcsR0FBRWMsR0FBSSxLQUFJVCxVQUFXLEVBQWhDLENBQU47QUFDRDs7QUFFREssRUFBQUEsZ0JBQWdCLENBQUVLLFVBQUYsRUFBY2pFLGFBQWQsRUFBNkI7QUFDM0MsVUFBTTJELE9BQU8sR0FBRyw4QkFBa0IzRCxhQUFsQixDQUFoQjs7QUFDQSxRQUFJMkQsT0FBSixFQUFhO0FBQ1gsYUFBT0EsT0FBUDtBQUNEOztBQUNEbEQsb0JBQUlFLElBQUosQ0FBVSxvQ0FBbUNzRCxVQUFXLEdBQXhEO0FBQ0Q7O0FBRWMsUUFBVEMsU0FBUyxHQUFJO0FBQ2pCLFdBQU87QUFDTEMsTUFBQUEsS0FBSyxFQUFFN0QsZ0JBQUU4RCxLQUFGLENBQVEsMkJBQVI7QUFERixLQUFQO0FBR0Q7O0FBRWdCLFFBQVhDLFdBQVcsR0FBSTtBQUNuQixVQUFNM0IsUUFBUSxHQUFHLE1BQU1mLGlCQUFpQixDQUFDMkMsT0FBbEIsQ0FBMEJ4QyxZQUFZLENBQUMrQixJQUF2QyxFQUE2QyxNQUFNLEtBQUtuQixRQUF4RCxDQUF2QjtBQUNBLFdBQU9wQyxnQkFBRWlFLE9BQUYsQ0FBVTdCLFFBQVYsRUFDSjhCLEdBREksQ0FDQSxDQUFDLENBQUNDLEVBQUQsRUFBS2hCLE1BQUwsQ0FBRCxNQUFtQjtBQUFDZ0IsTUFBQUEsRUFBRDtBQUFLQyxNQUFBQSxZQUFZLEVBQUVqQixNQUFNLENBQUM3QztBQUExQixLQUFuQixDQURBLENBQVA7QUFFRDs7QUFFRCtELEVBQUFBLDJCQUEyQixDQUFFVixVQUFGLEVBQWNXLGFBQWQsRUFBNkI7QUFDdEQsVUFBTUMsV0FBVyxHQUFHRCxhQUFhLEdBQzVCLFdBQVVFLGtCQUFXLGlCQUFnQmIsVUFBVyxNQUFLVyxhQUFjLFdBRHZDLEdBRTVCLFdBQVVFLGtCQUFXLGlCQUFnQmIsVUFBVyxVQUZyRDs7QUFHQXhELG9CQUFJUyxJQUFKLENBQVMyRCxXQUFUO0FBQ0Q7O0FBU2tCLFFBQWJFLGFBQWEsQ0FBRUMsVUFBRixFQUFjQyxPQUFkLEVBQXVCQyxlQUF2QixFQUF3QztBQUN6RCxVQUFNQyxtQkFBbUIsR0FBRzdFLGdCQUFFOEUsU0FBRixDQUFZLEtBQUtuRCxJQUFMLENBQVVrRCxtQkFBdEIsQ0FBNUI7O0FBQ0EsVUFBTUUsZUFBZSxHQUFHLHlCQUFhRixtQkFBYixDQUF4QjtBQUNBSCxJQUFBQSxVQUFVLEdBQUcxRSxnQkFBRThFLFNBQUYsQ0FBWUosVUFBWixDQUFiO0FBQ0EsVUFBTU0sV0FBVyxHQUFHOUMsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQjRDLGVBQWxCLEVBQW1DLHlCQUFhTCxVQUFiLENBQW5DLENBQXBCO0FBQ0FFLElBQUFBLGVBQWUsR0FBRzVFLGdCQUFFOEUsU0FBRixDQUFZRixlQUFaLENBQWxCO0FBS0EsVUFBTUssV0FBVyxHQUFHL0MsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQjZDLFdBQWxCLENBQXBCO0FBQ0E5QyxJQUFBQSxNQUFNLENBQUNDLE1BQVAsQ0FBYzhDLFdBQWQsRUFBMkIseUJBQWEsQ0FBQ0wsZUFBZSxJQUFJLEVBQXBCLEVBQXdCTSxXQUF4QixJQUF1QyxFQUFwRCxDQUEzQjs7QUFDQSxTQUFLLE1BQU1DLGVBQVgsSUFBK0IsQ0FBQ1AsZUFBZSxJQUFJLEVBQXBCLEVBQXdCUSxVQUF4QixJQUFzQyxFQUFyRSxFQUEwRTtBQUN4RWxELE1BQUFBLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjOEMsV0FBZCxFQUEyQix5QkFBYUUsZUFBYixDQUEzQjtBQUNEOztBQUVELFFBQUlFLFFBQUo7QUFDQSxRQUFJQyxjQUFKLEVBQW9CQyxLQUFwQjs7QUFDQSxRQUFJO0FBRUYsWUFBTUMsVUFBVSxHQUFHLG9DQUNqQmQsVUFEaUIsRUFFakJFLGVBRmlCLEVBR2pCLEtBQUs1QyxxQkFIWSxFQUlqQjZDLG1CQUppQixDQUFuQjtBQU9BLFlBQU07QUFBQ1ksUUFBQUEsV0FBRDtBQUFjQyxRQUFBQSwyQkFBZDtBQUEyQ0MsUUFBQUEsd0JBQTNDO0FBQXFFQyxRQUFBQTtBQUFyRSxVQUE4RUosVUFBcEY7QUFDQUgsTUFBQUEsUUFBUSxHQUFHRyxVQUFVLENBQUNILFFBQXRCOztBQUdBLFVBQUlPLEtBQUosRUFBVztBQUNULGNBQU1BLEtBQU47QUFDRDs7QUFFRCxZQUFNO0FBQUN6QyxRQUFBQSxNQUFNLEVBQUUwQyxXQUFUO0FBQXNCeEMsUUFBQUEsT0FBTyxFQUFFaUI7QUFBL0IsVUFBZ0QsS0FBSzNCLDBCQUFMLENBQWdDOEMsV0FBaEMsQ0FBdEQ7QUFDQSxXQUFLcEIsMkJBQUwsQ0FBaUN3QixXQUFXLENBQUN0QyxJQUE3QyxFQUFtRGUsYUFBbkQ7O0FBRUEsVUFBSSxLQUFLM0MsSUFBTCxDQUFVbUUsZUFBZCxFQUErQjtBQUM3QixjQUFNLEtBQUtDLGlCQUFMLEVBQU47QUFDRDs7QUFFRCxVQUFJQyxrQkFBSixFQUF3QkMsdUJBQXhCO0FBQ0EsWUFBTUMsQ0FBQyxHQUFHLElBQUlMLFdBQUosQ0FBZ0IsS0FBS2xFLElBQXJCLENBQVY7O0FBTUEsVUFBSSxLQUFLQSxJQUFMLENBQVV3RSxzQkFBZCxFQUFzQztBQUNwQ2hHLHdCQUFJUyxJQUFKLENBQVUsaUNBQWdDaUYsV0FBVyxDQUFDdEMsSUFBSyxXQUFsRCxHQUNDLDhEQURELEdBRUMsdURBRlY7O0FBR0EyQyxRQUFBQSxDQUFDLENBQUNDLHNCQUFGLEdBQTJCLElBQTNCO0FBQ0Q7O0FBRUQsVUFBSSxDQUFDbkcsZ0JBQUVvRyxPQUFGLENBQVUsS0FBS3pFLElBQUwsQ0FBVTBFLFlBQXBCLENBQUwsRUFBd0M7QUFDdENsRyx3QkFBSVMsSUFBSixDQUFTLGlEQUFUOztBQUNBLGFBQUtlLElBQUwsQ0FBVTBFLFlBQVYsQ0FBdUJuQyxHQUF2QixDQUE0Qm9DLENBQUQsSUFBT25HLGdCQUFJUyxJQUFKLENBQVUsT0FBTTBGLENBQUUsRUFBbEIsQ0FBbEM7QUFDQUosUUFBQUEsQ0FBQyxDQUFDRyxZQUFGLEdBQWlCLEtBQUsxRSxJQUFMLENBQVUwRSxZQUEzQjtBQUNEOztBQUVELFVBQUksQ0FBQ3JHLGdCQUFFb0csT0FBRixDQUFVLEtBQUt6RSxJQUFMLENBQVU0RSxhQUFwQixDQUFMLEVBQXlDO0FBQ3ZDcEcsd0JBQUlTLElBQUosQ0FBUywrQ0FBVDs7QUFDQSxhQUFLZSxJQUFMLENBQVU0RSxhQUFWLENBQXdCckMsR0FBeEIsQ0FBNkJvQyxDQUFELElBQU9uRyxnQkFBSVMsSUFBSixDQUFVLE9BQU0wRixDQUFFLEVBQWxCLENBQW5DO0FBQ0FKLFFBQUFBLENBQUMsQ0FBQ0ssYUFBRixHQUFrQixLQUFLNUUsSUFBTCxDQUFVNEUsYUFBNUI7QUFDRDs7QUFHREwsTUFBQUEsQ0FBQyxDQUFDTSxNQUFGLEdBQVcsS0FBS0EsTUFBaEI7O0FBQ0EsVUFBSTtBQUNGUixRQUFBQSxrQkFBa0IsR0FBRyxNQUFNLEtBQUtTLHVCQUFMLENBQTZCWixXQUE3QixDQUEzQjtBQUNELE9BRkQsQ0FFRSxPQUFPckMsQ0FBUCxFQUFVO0FBQ1YsY0FBTSxJQUFJa0QseUJBQU9DLHNCQUFYLENBQWtDbkQsQ0FBQyxDQUFDb0QsT0FBcEMsQ0FBTjtBQUNEOztBQUNELFlBQU1yRixtQkFBbUIsQ0FBQ3lDLE9BQXBCLENBQTRCeEMsWUFBWSxDQUFDK0IsSUFBekMsRUFBK0MsTUFBTTtBQUN6RCxhQUFLbEIsY0FBTCxDQUFvQndELFdBQVcsQ0FBQ3RDLElBQWhDLElBQXdDLEtBQUtsQixjQUFMLENBQW9Cd0QsV0FBVyxDQUFDdEMsSUFBaEMsS0FBeUMsRUFBakY7QUFDQTBDLFFBQUFBLHVCQUF1QixHQUFHLEtBQUs1RCxjQUFMLENBQW9Cd0QsV0FBVyxDQUFDdEMsSUFBaEMsRUFBc0NXLEdBQXRDLENBQTJDMkMsR0FBRCxJQUFTQSxHQUFHLENBQUNDLFVBQXZELENBQTFCO0FBQ0EsYUFBS3pFLGNBQUwsQ0FBb0J3RCxXQUFXLENBQUN0QyxJQUFoQyxFQUFzQ3dELElBQXRDLENBQTJDYixDQUEzQztBQUNELE9BSkssQ0FBTjs7QUFNQSxVQUFJO0FBQ0YsU0FBQ1osY0FBRCxFQUFpQkMsS0FBakIsSUFBMEIsTUFBTVcsQ0FBQyxDQUFDekIsYUFBRixDQUM5QmlCLDJCQUQ4QixFQUU5QmYsT0FGOEIsRUFHOUJnQix3QkFIOEIsRUFJOUIsQ0FBQyxHQUFHSyxrQkFBSixFQUF3QixHQUFHQyx1QkFBM0IsQ0FKOEIsQ0FBaEM7QUFNQVosUUFBQUEsUUFBUSxHQUFHYSxDQUFDLENBQUNiLFFBQWI7QUFDQSxjQUFNaEUsaUJBQWlCLENBQUMyQyxPQUFsQixDQUEwQnhDLFlBQVksQ0FBQytCLElBQXZDLEVBQTZDLE1BQU07QUFDdkQsZUFBS25CLFFBQUwsQ0FBY2tELGNBQWQsSUFBZ0NZLENBQWhDO0FBQ0QsU0FGSyxDQUFOO0FBR0QsT0FYRCxTQVdVO0FBQ1IsY0FBTTNFLG1CQUFtQixDQUFDeUMsT0FBcEIsQ0FBNEJ4QyxZQUFZLENBQUMrQixJQUF6QyxFQUErQyxNQUFNO0FBQ3pEdkQsMEJBQUVnSCxJQUFGLENBQU8sS0FBSzNFLGNBQUwsQ0FBb0J3RCxXQUFXLENBQUN0QyxJQUFoQyxDQUFQLEVBQThDMkMsQ0FBOUM7QUFDRCxTQUZLLENBQU47QUFHRDs7QUFFRCxXQUFLZSwrQkFBTCxDQUFxQ2YsQ0FBckMsRUFBd0NaLGNBQXhDOztBQUVBbkYsc0JBQUlTLElBQUosQ0FBVSxPQUFNaUYsV0FBVyxDQUFDdEMsSUFBSyx5Q0FBeEIsR0FDQSxHQUFFK0IsY0FBZSwrQkFEMUI7O0FBSUFZLE1BQUFBLENBQUMsQ0FBQ2dCLHNCQUFGOztBQUdBLFVBQUloQixDQUFDLENBQUNpQixhQUFGLE1BQXFCLENBQUNuSCxnQkFBRW9HLE9BQUYsQ0FBVW5CLFdBQVYsQ0FBMUIsRUFBa0Q7QUFDaEQ5RSx3QkFBSVMsSUFBSixDQUFVLHVFQUFELEdBQ1B3RyxJQUFJLENBQUNDLFNBQUwsQ0FBZXBDLFdBQWYsQ0FERjs7QUFFQSxjQUFNaUIsQ0FBQyxDQUFDb0IsY0FBRixDQUFpQnJDLFdBQWpCLENBQU47QUFDRCxPQUpELE1BSU8sSUFBSWlCLENBQUMsQ0FBQ3FCLGlCQUFGLE1BQXlCLENBQUN2SCxnQkFBRW9HLE9BQUYsQ0FBVXBCLFdBQVYsQ0FBOUIsRUFBc0Q7QUFDM0Q3RSx3QkFBSVMsSUFBSixDQUFVLDJFQUFELEdBQ1B3RyxJQUFJLENBQUNDLFNBQUwsQ0FBZXJDLFdBQWYsQ0FERjs7QUFFQSxjQUFNa0IsQ0FBQyxDQUFDb0IsY0FBRixDQUFpQnRDLFdBQWpCLENBQU47QUFDRDtBQUNGLEtBbEdELENBa0dFLE9BQU9ZLEtBQVAsRUFBYztBQUNkLGFBQU87QUFDTFAsUUFBQUEsUUFESztBQUVMTyxRQUFBQTtBQUZLLE9BQVA7QUFJRDs7QUFFRCxXQUFPO0FBQ0xQLE1BQUFBLFFBREs7QUFFTG1DLE1BQUFBLEtBQUssRUFBRSxDQUFDbEMsY0FBRCxFQUFpQkMsS0FBakIsRUFBd0JGLFFBQXhCO0FBRkYsS0FBUDtBQUlEOztBQUVENEIsRUFBQUEsK0JBQStCLENBQUU5RCxNQUFGLEVBQVVtQyxjQUFWLEVBQTBCO0FBQ3ZELFVBQU1tQywyQkFBMkIsR0FBRyxDQUFDQyxLQUFLLEdBQUcsSUFBSTlFLEtBQUosQ0FBVSxlQUFWLENBQVQsS0FBd0M7QUFDMUV6QyxzQkFBSUUsSUFBSixDQUFVLCtCQUE4QnFILEtBQUssQ0FBQ2QsT0FBUSxHQUF0RDs7QUFDQXpHLHNCQUFJUyxJQUFKLENBQVUscUJBQW9CMEUsY0FBZSxnQ0FBN0M7O0FBQ0EsYUFBTyxLQUFLbEQsUUFBTCxDQUFja0QsY0FBZCxDQUFQO0FBQ0QsS0FKRDs7QUFPQSxRQUFJdEYsZ0JBQUUySCxVQUFGLENBQWEsQ0FBQ3hFLE1BQU0sQ0FBQ3lFLG9CQUFQLElBQStCLEVBQWhDLEVBQW9DQyxJQUFqRCxDQUFKLEVBQTREO0FBSTFEMUUsTUFBQUEsTUFBTSxDQUFDeUUsb0JBQVAsQ0FFR0MsSUFGSCxDQUVRLE1BQU07QUFFVixjQUFNLElBQUlqRixLQUFKLENBQVUscUJBQVYsQ0FBTjtBQUNELE9BTEgsRUFNR2tGLEtBTkgsQ0FNVXRFLENBQUQsSUFBTztBQUdaLFlBQUksRUFBRUEsQ0FBQyxZQUFZdUUsa0JBQUVDLGlCQUFqQixDQUFKLEVBQXlDO0FBQ3ZDUCxVQUFBQSwyQkFBMkIsQ0FBQ2pFLENBQUQsQ0FBM0I7QUFDRDtBQUNGLE9BWkg7QUFhRCxLQWpCRCxNQWlCTyxJQUFJeEQsZ0JBQUUySCxVQUFGLENBQWF4RSxNQUFNLENBQUN5RSxvQkFBcEIsQ0FBSixFQUErQztBQUVwRHpFLE1BQUFBLE1BQU0sQ0FBQ3lFLG9CQUFQLENBQTRCSCwyQkFBNUI7QUFDRCxLQUhNLE1BR0E7QUFDTHRILHNCQUFJRSxJQUFKLENBQVUscURBQUQsR0FDTixtREFBa0Q4QyxNQUFNLENBQUN6QixXQUFQLENBQW1CNkIsSUFBSyxJQUQ3RTtBQUVEO0FBQ0Y7O0FBRTRCLFFBQXZCa0QsdUJBQXVCLENBQUVaLFdBQUYsRUFBZTtBQUMxQyxVQUFNekQsUUFBUSxHQUFHLE1BQU1mLGlCQUFpQixDQUFDMkMsT0FBbEIsQ0FBMEJ4QyxZQUFZLENBQUMrQixJQUF2QyxFQUE2QyxNQUFNLEtBQUtuQixRQUF4RCxDQUF2Qjs7QUFDQSxVQUFNNkYsSUFBSSxHQUFHakksZ0JBQUVrQixNQUFGLENBQVNrQixRQUFULEVBQ0c4RixNQURILENBQ1dDLENBQUQsSUFBT0EsQ0FBQyxDQUFDekcsV0FBRixDQUFjNkIsSUFBZCxLQUF1QnNDLFdBQVcsQ0FBQ3RDLElBRHBELEVBRUdXLEdBRkgsQ0FFUWlFLENBQUQsSUFBT0EsQ0FBQyxDQUFDckIsVUFGaEIsQ0FBYjs7QUFHQSxTQUFLLElBQUlzQixLQUFULElBQWtCSCxJQUFsQixFQUF3QjtBQUN0QixVQUFJLENBQUNHLEtBQUwsRUFBWTtBQUNWLGNBQU0sSUFBSXhGLEtBQUosQ0FBVywrQ0FBRCxHQUNDLEdBQUVpRCxXQUFXLENBQUN0QyxJQUFLLDJCQURwQixHQUVDLGNBRlgsQ0FBTjtBQUdEO0FBQ0Y7O0FBQ0QsV0FBTzBFLElBQVA7QUFDRDs7QUFFa0IsUUFBYkksYUFBYSxDQUFFN0YsU0FBRixFQUFhO0FBQzlCLFFBQUk2QyxRQUFKOztBQUNBLFFBQUk7QUFDRixVQUFJaUQsaUJBQWlCLEdBQUcsSUFBeEI7QUFDQSxVQUFJN0YsVUFBVSxHQUFHLElBQWpCO0FBQ0EsWUFBTXBCLGlCQUFpQixDQUFDMkMsT0FBbEIsQ0FBMEJ4QyxZQUFZLENBQUMrQixJQUF2QyxFQUE2QyxNQUFNO0FBQ3ZELFlBQUksQ0FBQyxLQUFLbkIsUUFBTCxDQUFjSSxTQUFkLENBQUwsRUFBK0I7QUFDN0I7QUFDRDs7QUFDRCxjQUFNK0Ysa0JBQWtCLEdBQUcsS0FBS25HLFFBQUwsQ0FBY0ksU0FBZCxFQUF5QmQsV0FBekIsQ0FBcUM2QixJQUFoRTtBQUNBK0UsUUFBQUEsaUJBQWlCLEdBQUd0SSxnQkFBRWlFLE9BQUYsQ0FBVSxLQUFLN0IsUUFBZixFQUNiOEYsTUFEYSxDQUNOLENBQUMsQ0FBQ00sR0FBRCxFQUFNaEIsS0FBTixDQUFELEtBQWtCQSxLQUFLLENBQUM5RixXQUFOLENBQWtCNkIsSUFBbEIsS0FBMkJnRixrQkFBM0IsSUFBaURDLEdBQUcsS0FBS2hHLFNBRHJFLEVBRWIwQixHQUZhLENBRVQsQ0FBQyxHQUFHc0QsS0FBSCxDQUFELEtBQWVBLEtBQUssQ0FBQ1YsVUFGWixDQUFwQjtBQUdBckUsUUFBQUEsVUFBVSxHQUFHLEtBQUtMLFFBQUwsQ0FBY0ksU0FBZCxDQUFiO0FBQ0E2QyxRQUFBQSxRQUFRLEdBQUc1QyxVQUFVLENBQUM0QyxRQUF0Qjs7QUFDQWxGLHdCQUFJUyxJQUFKLENBQVUsb0JBQW1CNEIsU0FBVSwrQkFBdkM7O0FBSUEsZUFBTyxLQUFLSixRQUFMLENBQWNJLFNBQWQsQ0FBUDtBQUNELE9BZkssQ0FBTjtBQWdCQSxhQUFPO0FBQ0w2QyxRQUFBQSxRQURLO0FBRUxtQyxRQUFBQSxLQUFLLEVBQUUsTUFBTS9FLFVBQVUsQ0FBQzRGLGFBQVgsQ0FBeUI3RixTQUF6QixFQUFvQzhGLGlCQUFwQztBQUZSLE9BQVA7QUFJRCxLQXZCRCxDQXVCRSxPQUFPOUUsQ0FBUCxFQUFVO0FBQ1ZyRCxzQkFBSXlGLEtBQUosQ0FBVyw4QkFBNkJwRCxTQUFVLEtBQUlnQixDQUFDLENBQUNvRCxPQUFRLEVBQWhFOztBQUNBLGFBQU87QUFDTHZCLFFBQUFBLFFBREs7QUFFTE8sUUFBQUEsS0FBSyxFQUFFcEM7QUFGRixPQUFQO0FBSUQ7QUFDRjs7QUFFc0IsUUFBakJ1QyxpQkFBaUIsQ0FBRTBDLElBQUksR0FBRyxFQUFULEVBQWE7QUFDbEMsVUFBTUMsYUFBYSxHQUFHMUksZ0JBQUUySSxJQUFGLENBQU8sS0FBS3ZHLFFBQVosQ0FBdEI7O0FBQ0EsUUFBSSxNQUFNc0csYUFBVixFQUF5QjtBQUN2QnZJLHNCQUFJc0QsS0FBSixDQUFVLDBDQUFWOztBQUNBO0FBQ0Q7O0FBRUQsVUFBTTtBQUNKbUYsTUFBQUEsS0FBSyxHQUFHLEtBREo7QUFFSkMsTUFBQUE7QUFGSSxRQUdGSixJQUhKOztBQUlBdEksb0JBQUlzRCxLQUFKLENBQVcsZUFBY3FGLG9CQUFLQyxTQUFMLENBQWUsZ0JBQWYsRUFBaUNMLGFBQWpDLEVBQWdELElBQWhELENBQXNELEVBQS9FOztBQUNBLFVBQU1NLGVBQWUsR0FBR0osS0FBSyxHQUN6QjVJLGdCQUFFa0IsTUFBRixDQUFTLEtBQUtrQixRQUFkLEVBQXdCOEIsR0FBeEIsQ0FBNkIyQyxHQUFELElBQVNBLEdBQUcsQ0FBQ29DLHVCQUFKLENBQTRCSixNQUFNLElBQUksSUFBSWpHLEtBQUosQ0FBVWlHLE1BQVYsQ0FBdEMsQ0FBckMsQ0FEeUIsR0FFekI3SSxnQkFBRW9CLElBQUYsQ0FBTyxLQUFLZ0IsUUFBWixFQUFzQjhCLEdBQXRCLENBQTJCQyxFQUFELElBQVEsS0FBS2tFLGFBQUwsQ0FBbUJsRSxFQUFuQixDQUFsQyxDQUZKOztBQUdBLFNBQUssTUFBTStFLGNBQVgsSUFBNkJGLGVBQTdCLEVBQThDO0FBQzVDLFVBQUk7QUFDRixjQUFNRSxjQUFOO0FBQ0QsT0FGRCxDQUVFLE9BQU8xRixDQUFQLEVBQVU7QUFDVnJELHdCQUFJc0QsS0FBSixDQUFVRCxDQUFWO0FBQ0Q7QUFDRjtBQUNGOztBQUVtQixRQUFkMkYsY0FBYyxDQUFFQyxHQUFGLEVBQU8sR0FBR3pILElBQVYsRUFBZ0I7QUFHbEMsUUFBSXlILEdBQUcsS0FBSyxXQUFaLEVBQXlCO0FBQ3ZCLGFBQU8sTUFBTSxLQUFLeEYsU0FBTCxFQUFiO0FBQ0Q7O0FBRUQsUUFBSXlGLHFCQUFxQixDQUFDRCxHQUFELENBQXpCLEVBQWdDO0FBQzlCLGFBQU8sTUFBTSxNQUFNRCxjQUFOLENBQXFCQyxHQUFyQixFQUEwQixHQUFHekgsSUFBN0IsQ0FBYjtBQUNEOztBQUVELFVBQU1hLFNBQVMsR0FBR3hDLGdCQUFFc0osSUFBRixDQUFPM0gsSUFBUCxDQUFsQjs7QUFDQSxVQUFNYyxVQUFVLEdBQUcsTUFBTXBCLGlCQUFpQixDQUFDMkMsT0FBbEIsQ0FBMEJ4QyxZQUFZLENBQUMrQixJQUF2QyxFQUE2QyxNQUFNLEtBQUtuQixRQUFMLENBQWNJLFNBQWQsQ0FBbkQsQ0FBekI7O0FBQ0EsUUFBSSxDQUFDQyxVQUFMLEVBQWlCO0FBQ2YsWUFBTSxJQUFJRyxLQUFKLENBQVcsd0JBQXVCSixTQUFVLGtCQUE1QyxDQUFOO0FBQ0Q7O0FBRUQsUUFBSStHLEdBQUcsR0FBRztBQUNSbEUsTUFBQUEsUUFBUSxFQUFFNUMsVUFBVSxDQUFDNEM7QUFEYixLQUFWOztBQUlBLFFBQUk7QUFDRmtFLE1BQUFBLEdBQUcsQ0FBQy9CLEtBQUosR0FBWSxNQUFNL0UsVUFBVSxDQUFDMEcsY0FBWCxDQUEwQkMsR0FBMUIsRUFBK0IsR0FBR3pILElBQWxDLENBQWxCO0FBQ0QsS0FGRCxDQUVFLE9BQU82QixDQUFQLEVBQVU7QUFDVitGLE1BQUFBLEdBQUcsQ0FBQzNELEtBQUosR0FBWXBDLENBQVo7QUFDRDs7QUFDRCxXQUFPK0YsR0FBUDtBQUNEOztBQUVEQyxFQUFBQSxXQUFXLENBQUVoSCxTQUFGLEVBQWE7QUFDdEIsVUFBTUMsVUFBVSxHQUFHLEtBQUtMLFFBQUwsQ0FBY0ksU0FBZCxDQUFuQjtBQUNBLFdBQU9DLFVBQVUsSUFBSXpDLGdCQUFFMkgsVUFBRixDQUFhbEYsVUFBVSxDQUFDK0csV0FBeEIsQ0FBZCxJQUFzRC9HLFVBQVUsQ0FBQytHLFdBQVgsQ0FBdUJoSCxTQUF2QixDQUE3RDtBQUNEOztBQUVEaUgsRUFBQUEsaUJBQWlCLENBQUVqSCxTQUFGLEVBQWE7QUFDNUIsVUFBTUMsVUFBVSxHQUFHLEtBQUtMLFFBQUwsQ0FBY0ksU0FBZCxDQUFuQjtBQUNBLFdBQU9DLFVBQVUsR0FBR0EsVUFBVSxDQUFDZ0gsaUJBQVgsRUFBSCxHQUFvQyxFQUFyRDtBQUNEOztBQUVEQyxFQUFBQSxRQUFRLENBQUVsSCxTQUFGLEVBQWE7QUFDbkIsVUFBTUMsVUFBVSxHQUFHLEtBQUtMLFFBQUwsQ0FBY0ksU0FBZCxDQUFuQjtBQUNBLFdBQU9DLFVBQVUsSUFBSUEsVUFBVSxDQUFDaUgsUUFBWCxDQUFvQmxILFNBQXBCLENBQXJCO0FBQ0Q7O0FBbFptQzs7OztBQXVadEMsU0FBUzZHLHFCQUFULENBQWdDRCxHQUFoQyxFQUFxQztBQUNuQyxTQUFPLENBQUMsd0NBQWlCQSxHQUFqQixDQUFELElBQTBCQSxHQUFHLEtBQUssZUFBekM7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGdldEJ1aWxkSW5mbywgdXBkYXRlQnVpbGRJbmZvLCBBUFBJVU1fVkVSIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgQmFzZURyaXZlciwgZXJyb3JzLCBpc1Nlc3Npb25Db21tYW5kIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgeyBwYXJzZUNhcHNGb3JJbm5lckRyaXZlciwgZ2V0UGFja2FnZVZlcnNpb24sIHB1bGxTZXR0aW5ncyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHdyYXAgZnJvbSAnd29yZC13cmFwJztcbmltcG9ydCB7IEVPTCB9IGZyb20gJ29zJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5cblxuY29uc3QgUExBVEZPUk1TID0ge1xuICBGQUtFOiAnZmFrZScsXG4gIEFORFJPSUQ6ICdhbmRyb2lkJyxcbiAgSU9TOiAnaW9zJyxcbiAgQVBQTEVfVFZPUzogJ3R2b3MnLFxuICBXSU5ET1dTOiAnd2luZG93cycsXG4gIE1BQzogJ21hYycsXG4gIFRJWkVOOiAndGl6ZW4nLFxuICBMSU5VWDogJ2xpbnV4JyxcbiAgUk9LVTogJ3Jva3UnXG59O1xuXG5jb25zdCBBVVRPTUFUSU9OX05BTUVTID0ge1xuICBBUFBJVU06ICdBcHBpdW0nLFxuICBVSUFVVE9NQVRPUjI6ICdVaUF1dG9tYXRvcjInLFxuICBVSUFVVE9NQVRPUjE6ICdVaUF1dG9tYXRvcjEnLFxuICBYQ1VJVEVTVDogJ1hDVUlUZXN0JyxcbiAgWU9VSUVOR0lORTogJ1lvdWlFbmdpbmUnLFxuICBFU1BSRVNTTzogJ0VzcHJlc3NvJyxcbiAgVElaRU46ICdUaXplbicsXG4gIEZBS0U6ICdGYWtlJyxcbiAgSU5TVFJVTUVOVFM6ICdJbnN0cnVtZW50cycsXG4gIFdJTkRPV1M6ICdXaW5kb3dzJyxcbiAgTUFDOiAnTWFjJyxcbiAgTUFDMjogJ01hYzInLFxuICBGTFVUVEVSOiAnRmx1dHRlcicsXG4gIFNBRkFSSTogJ1NhZmFyaScsXG4gIEdFQ0tPOiAnR2Vja28nLFxuICBST0tVOiAnUm9rdScsXG59O1xuY29uc3QgRFJJVkVSX01BUCA9IHtcbiAgW0FVVE9NQVRJT05fTkFNRVMuVUlBVVRPTUFUT1IyLnRvTG93ZXJDYXNlKCldOiB7XG4gICAgZHJpdmVyQ2xhc3NOYW1lOiAnQW5kcm9pZFVpYXV0b21hdG9yMkRyaXZlcicsXG4gICAgZHJpdmVyUGFja2FnZTogJ2FwcGl1bS11aWF1dG9tYXRvcjItZHJpdmVyJyxcbiAgfSxcbiAgW0FVVE9NQVRJT05fTkFNRVMuWENVSVRFU1QudG9Mb3dlckNhc2UoKV06IHtcbiAgICBkcml2ZXJDbGFzc05hbWU6ICdYQ1VJVGVzdERyaXZlcicsXG4gICAgZHJpdmVyUGFja2FnZTogJ2FwcGl1bS14Y3VpdGVzdC1kcml2ZXInLFxuICB9LFxuICBbQVVUT01BVElPTl9OQU1FUy5ZT1VJRU5HSU5FLnRvTG93ZXJDYXNlKCldOiB7XG4gICAgZHJpdmVyQ2xhc3NOYW1lOiAnWW91aUVuZ2luZURyaXZlcicsXG4gICAgZHJpdmVyUGFja2FnZTogJ2FwcGl1bS15b3VpZW5naW5lLWRyaXZlcicsXG4gIH0sXG4gIFtBVVRPTUFUSU9OX05BTUVTLkZBS0UudG9Mb3dlckNhc2UoKV06IHtcbiAgICBkcml2ZXJDbGFzc05hbWU6ICdGYWtlRHJpdmVyJyxcbiAgICBkcml2ZXJQYWNrYWdlOiAnYXBwaXVtLWZha2UtZHJpdmVyJyxcbiAgfSxcbiAgW0FVVE9NQVRJT05fTkFNRVMuVUlBVVRPTUFUT1IxLnRvTG93ZXJDYXNlKCldOiB7XG4gICAgZHJpdmVyQ2xhc3NOYW1lOiAnQW5kcm9pZERyaXZlcicsXG4gICAgZHJpdmVyUGFja2FnZTogJ2FwcGl1bS1hbmRyb2lkLWRyaXZlcicsXG4gIH0sXG4gIFtBVVRPTUFUSU9OX05BTUVTLklOU1RSVU1FTlRTLnRvTG93ZXJDYXNlKCldOiB7XG4gICAgZHJpdmVyQ2xhc3NOYW1lOiAnSW9zRHJpdmVyJyxcbiAgICBkcml2ZXJQYWNrYWdlOiAnYXBwaXVtLWlvcy1kcml2ZXInLFxuICB9LFxuICBbQVVUT01BVElPTl9OQU1FUy5XSU5ET1dTLnRvTG93ZXJDYXNlKCldOiB7XG4gICAgZHJpdmVyQ2xhc3NOYW1lOiAnV2luZG93c0RyaXZlcicsXG4gICAgZHJpdmVyUGFja2FnZTogJ2FwcGl1bS13aW5kb3dzLWRyaXZlcicsXG4gIH0sXG4gIFtBVVRPTUFUSU9OX05BTUVTLk1BQy50b0xvd2VyQ2FzZSgpXToge1xuICAgIGRyaXZlckNsYXNzTmFtZTogJ01hY0RyaXZlcicsXG4gICAgZHJpdmVyUGFja2FnZTogJ2FwcGl1bS1tYWMtZHJpdmVyJyxcbiAgfSxcbiAgW0FVVE9NQVRJT05fTkFNRVMuTUFDMi50b0xvd2VyQ2FzZSgpXToge1xuICAgIGRyaXZlckNsYXNzTmFtZTogJ01hYzJEcml2ZXInLFxuICAgIGRyaXZlclBhY2thZ2U6ICdhcHBpdW0tbWFjMi1kcml2ZXInLFxuICB9LFxuICBbQVVUT01BVElPTl9OQU1FUy5FU1BSRVNTTy50b0xvd2VyQ2FzZSgpXToge1xuICAgIGRyaXZlckNsYXNzTmFtZTogJ0VzcHJlc3NvRHJpdmVyJyxcbiAgICBkcml2ZXJQYWNrYWdlOiAnYXBwaXVtLWVzcHJlc3NvLWRyaXZlcicsXG4gIH0sXG4gIFtBVVRPTUFUSU9OX05BTUVTLlRJWkVOLnRvTG93ZXJDYXNlKCldOiB7XG4gICAgZHJpdmVyQ2xhc3NOYW1lOiAnVGl6ZW5Ecml2ZXInLFxuICAgIGRyaXZlclBhY2thZ2U6ICdhcHBpdW0tdGl6ZW4tZHJpdmVyJyxcbiAgfSxcbiAgW0FVVE9NQVRJT05fTkFNRVMuRkxVVFRFUi50b0xvd2VyQ2FzZSgpXToge1xuICAgIGRyaXZlckNsYXNzTmFtZTogJ0ZsdXR0ZXJEcml2ZXInLFxuICAgIGRyaXZlclBhY2thZ2U6ICdhcHBpdW0tZmx1dHRlci1kcml2ZXInXG4gIH0sXG4gIFtBVVRPTUFUSU9OX05BTUVTLlNBRkFSSS50b0xvd2VyQ2FzZSgpXToge1xuICAgIGRyaXZlckNsYXNzTmFtZTogJ1NhZmFyaURyaXZlcicsXG4gICAgZHJpdmVyUGFja2FnZTogJ2FwcGl1bS1zYWZhcmktZHJpdmVyJ1xuICB9LFxuICBbQVVUT01BVElPTl9OQU1FUy5HRUNLTy50b0xvd2VyQ2FzZSgpXToge1xuICAgIGRyaXZlckNsYXNzTmFtZTogJ0dlY2tvRHJpdmVyJyxcbiAgICBkcml2ZXJQYWNrYWdlOiAnYXBwaXVtLWdlY2tvZHJpdmVyJ1xuICB9LFxuICBbQVVUT01BVElPTl9OQU1FUy5ST0tVLnRvTG93ZXJDYXNlKCldOiB7XG4gICAgZHJpdmVyQ2xhc3NOYW1lOiAnUm9rdURyaXZlcicsXG4gICAgZHJpdmVyUGFja2FnZTogJ2FwcGl1bS1yb2t1LWRyaXZlcidcbiAgfSxcbn07XG5cbmNvbnN0IFBMQVRGT1JNU19NQVAgPSB7XG4gIFtQTEFURk9STVMuRkFLRV06ICgpID0+IEFVVE9NQVRJT05fTkFNRVMuRkFLRSxcbiAgW1BMQVRGT1JNUy5BTkRST0lEXTogKCkgPT4ge1xuICAgIC8vIFdhcm4gdXNlcnMgdGhhdCBkZWZhdWx0IGF1dG9tYXRpb24gaXMgZ29pbmcgdG8gY2hhbmdlIHRvIFVpQXV0b21hdG9yMiBmb3IgMS4xNFxuICAgIC8vIGFuZCB3aWxsIGJlY29tZSByZXF1aXJlZCBvbiBBcHBpdW0gMi4wXG4gICAgY29uc3QgbG9nRGl2aWRlckxlbmd0aCA9IDcwOyAvLyBGaXQgaW4gY29tbWFuZCBsaW5lXG5cbiAgICBjb25zdCBhdXRvbWF0aW9uV2FybmluZyA9IFtcbiAgICAgIGBUaGUgJ2F1dG9tYXRpb25OYW1lJyBjYXBhYmlsaXR5IHdhcyBub3QgcHJvdmlkZWQgaW4gdGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIGZvciB0aGlzIEFuZHJvaWQgc2Vzc2lvbmAsXG4gICAgICBgU2V0dGluZyAnYXV0b21hdGlvbk5hbWU9VWlBdXRvbWF0b3IyJyBieSBkZWZhdWx0IGFuZCB1c2luZyB0aGUgVWlBdXRvbWF0b3IyIERyaXZlcmAsXG4gICAgICBgVGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBBcHBpdW0gKDIueCkgd2lsbCAqKnJlcXVpcmUqKiB0aGUgJ2F1dG9tYXRpb25OYW1lJyBjYXBhYmlsaXR5IHRvIGJlIHNldCBmb3IgYWxsIHNlc3Npb25zIG9uIGFsbCBwbGF0Zm9ybXNgLFxuICAgICAgYEluIHByZXZpb3VzIHZlcnNpb25zIChBcHBpdW0gPD0gMS4xMy54KSwgdGhlIGRlZmF1bHQgd2FzICdhdXRvbWF0aW9uTmFtZT1VaUF1dG9tYXRvcjEnYCxcbiAgICAgIGBJZiB5b3Ugd2lzaCB0byB1c2UgdGhhdCBhdXRvbWF0aW9uIGluc3RlYWQgb2YgVWlBdXRvbWF0b3IyLCBwbGVhc2UgYWRkICdhdXRvbWF0aW9uTmFtZT1VaUF1dG9tYXRvcjEnIHRvIHlvdXIgZGVzaXJlZCBjYXBhYmlsaXRpZXNgLFxuICAgICAgYEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRyaXZlcnMsIHBsZWFzZSB2aXNpdCBodHRwOi8vYXBwaXVtLmlvL2RvY3MvZW4vYWJvdXQtYXBwaXVtL2ludHJvLyBhbmQgZXhwbG9yZSB0aGUgJ0RyaXZlcnMnIG1lbnVgXG4gICAgXTtcblxuICAgIGxldCBkaXZpZGVyID0gYCR7RU9MfSR7Xy5yZXBlYXQoJz0nLCBsb2dEaXZpZGVyTGVuZ3RoKX0ke0VPTH1gO1xuICAgIGxldCBhdXRvbWF0aW9uV2FybmluZ1N0cmluZyA9IGRpdmlkZXI7XG4gICAgYXV0b21hdGlvbldhcm5pbmdTdHJpbmcgKz0gYCAgREVQUkVDQVRJT04gV0FSTklORzpgICsgRU9MO1xuICAgIGZvciAobGV0IGxvZyBvZiBhdXRvbWF0aW9uV2FybmluZykge1xuICAgICAgYXV0b21hdGlvbldhcm5pbmdTdHJpbmcgKz0gRU9MICsgd3JhcChsb2csIHt3aWR0aDogbG9nRGl2aWRlckxlbmd0aCAtIDJ9KSArIEVPTDtcbiAgICB9XG4gICAgYXV0b21hdGlvbldhcm5pbmdTdHJpbmcgKz0gZGl2aWRlcjtcblxuICAgIC8vIFJlY29tbWVuZCB1c2VycyB0byB1cGdyYWRlIHRvIFVpQXV0b21hdG9yMiBpZiB0aGV5J3JlIHVzaW5nIEFuZHJvaWQgPj0gNlxuICAgIGxvZy53YXJuKGF1dG9tYXRpb25XYXJuaW5nU3RyaW5nKTtcblxuICAgIHJldHVybiBBVVRPTUFUSU9OX05BTUVTLlVJQVVUT01BVE9SMjtcbiAgfSxcbiAgW1BMQVRGT1JNUy5JT1NdOiAoY2FwcykgPT4ge1xuICAgIGNvbnN0IHBsYXRmb3JtVmVyc2lvbiA9IHNlbXZlci52YWxpZChzZW12ZXIuY29lcmNlKGNhcHMucGxhdGZvcm1WZXJzaW9uKSk7XG4gICAgbG9nLndhcm4oYERlcHJlY2F0aW9uV2FybmluZzogJ2F1dG9tYXRpb25OYW1lJyBjYXBhYmlsaXR5IHdhcyBub3QgcHJvdmlkZWQuIGAgK1xuICAgICAgYEZ1dHVyZSB2ZXJzaW9ucyBvZiBBcHBpdW0gd2lsbCByZXF1aXJlICdhdXRvbWF0aW9uTmFtZScgY2FwYWJpbGl0eSB0byBiZSBzZXQgZm9yIGlPUyBzZXNzaW9ucy5gKTtcbiAgICBpZiAocGxhdGZvcm1WZXJzaW9uICYmIHNlbXZlci5zYXRpc2ZpZXMocGxhdGZvcm1WZXJzaW9uLCAnPj0xMC4wLjAnKSkge1xuICAgICAgbG9nLmluZm8oJ1JlcXVlc3RlZCBpT1Mgc3VwcG9ydCB3aXRoIHZlcnNpb24gPj0gMTAsICcgK1xuICAgICAgICBgdXNpbmcgJyR7QVVUT01BVElPTl9OQU1FUy5YQ1VJVEVTVH0nIGAgK1xuICAgICAgICAnZHJpdmVyIGluc3RlYWQgb2YgVUlBdXRvbWF0aW9uLWJhc2VkIGRyaXZlciwgc2luY2UgdGhlICcgK1xuICAgICAgICAnbGF0dGVyIGlzIHVuc3VwcG9ydGVkIG9uIGlPUyAxMCBhbmQgdXAuJyk7XG4gICAgICByZXR1cm4gQVVUT01BVElPTl9OQU1FUy5YQ1VJVEVTVDtcbiAgICB9XG5cbiAgICByZXR1cm4gQVVUT01BVElPTl9OQU1FUy5JTlNUUlVNRU5UUztcbiAgfSxcbiAgW1BMQVRGT1JNUy5BUFBMRV9UVk9TXTogKCkgPT4gQVVUT01BVElPTl9OQU1FUy5YQ1VJVEVTVCxcbiAgW1BMQVRGT1JNUy5XSU5ET1dTXTogKCkgPT4gQVVUT01BVElPTl9OQU1FUy5XSU5ET1dTLFxuICBbUExBVEZPUk1TLk1BQ106ICgpID0+IEFVVE9NQVRJT05fTkFNRVMuTUFDLFxuICBbUExBVEZPUk1TLlRJWkVOXTogKCkgPT4gQVVUT01BVElPTl9OQU1FUy5USVpFTixcbiAgW1BMQVRGT1JNUy5MSU5VWF06ICgpID0+IEFVVE9NQVRJT05fTkFNRVMuR0VDS08sXG4gIFtQTEFURk9STVMuUk9LVV06ICgpID0+IEFVVE9NQVRJT05fTkFNRVMuUk9LVSxcbn07XG5cbmNvbnN0IGRlc2lyZWRDYXBhYmlsaXR5Q29uc3RyYWludHMgPSB7XG4gIGF1dG9tYXRpb25OYW1lOiB7XG4gICAgcHJlc2VuY2U6IGZhbHNlLFxuICAgIGlzU3RyaW5nOiB0cnVlLFxuICAgIGluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZTogXy52YWx1ZXMoQVVUT01BVElPTl9OQU1FUyksXG4gIH0sXG4gIHBsYXRmb3JtTmFtZToge1xuICAgIHByZXNlbmNlOiB0cnVlLFxuICAgIGlzU3RyaW5nOiB0cnVlLFxuICAgIGluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZTogXy5rZXlzKFBMQVRGT1JNU19NQVApLFxuICB9LFxufTtcblxuY29uc3Qgc2Vzc2lvbnNMaXN0R3VhcmQgPSBuZXcgQXN5bmNMb2NrKCk7XG5jb25zdCBwZW5kaW5nRHJpdmVyc0d1YXJkID0gbmV3IEFzeW5jTG9jaygpO1xuXG5jbGFzcyBBcHBpdW1Ecml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKGFyZ3MpIHtcbiAgICAvLyBJdCBpcyBuZWNlc3NhcnkgdG8gc2V0IGAtLXRtcGAgaGVyZSBzaW5jZSBpdCBzaG91bGQgYmUgc2V0IHRvXG4gICAgLy8gcHJvY2Vzcy5lbnYuQVBQSVVNX1RNUF9ESVIgb25jZSBhdCBhbiBpbml0aWFsIHBvaW50IGluIHRoZSBBcHBpdW0gbGlmZWN5Y2xlLlxuICAgIC8vIFRoZSBwcm9jZXNzIGFyZ3VtZW50IHdpbGwgYmUgcmVmZXJlbmNlZCBieSBCYXNlRHJpdmVyLlxuICAgIC8vIFBsZWFzZSBjYWxsIGFwcGl1bS1zdXBwb3J0LnRlbXBEaXIgbW9kdWxlIHRvIGFwcGx5IHRoaXMgYmVuZWZpdC5cbiAgICBpZiAoYXJncy50bXBEaXIpIHtcbiAgICAgIHByb2Nlc3MuZW52LkFQUElVTV9UTVBfRElSID0gYXJncy50bXBEaXI7XG4gICAgfVxuXG4gICAgc3VwZXIoYXJncyk7XG5cbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBhYmlsaXR5Q29uc3RyYWludHM7XG5cbiAgICAvLyB0aGUgbWFpbiBBcHBpdW0gRHJpdmVyIGhhcyBubyBuZXcgY29tbWFuZCB0aW1lb3V0XG4gICAgdGhpcy5uZXdDb21tYW5kVGltZW91dE1zID0gMDtcblxuICAgIHRoaXMuYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xuXG4gICAgLy8gQWNjZXNzIHRvIHNlc3Npb25zIGxpc3QgbXVzdCBiZSBndWFyZGVkIHdpdGggYSBTZW1hcGhvcmUsIGJlY2F1c2VcbiAgICAvLyBpdCBtaWdodCBiZSBjaGFuZ2VkIGJ5IG90aGVyIGFzeW5jIGNhbGxzIGF0IGFueSB0aW1lXG4gICAgLy8gSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFjY2VzcyB0aGlzIHByb3BlcnR5IGRpcmVjdGx5IGZyb20gdGhlIG91dHNpZGVcbiAgICB0aGlzLnNlc3Npb25zID0ge307XG5cbiAgICAvLyBBY2Nlc3MgdG8gcGVuZGluZyBkcml2ZXJzIGxpc3QgbXVzdCBiZSBndWFyZGVkIHdpdGggYSBTZW1hcGhvcmUsIGJlY2F1c2VcbiAgICAvLyBpdCBtaWdodCBiZSBjaGFuZ2VkIGJ5IG90aGVyIGFzeW5jIGNhbGxzIGF0IGFueSB0aW1lXG4gICAgLy8gSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFjY2VzcyB0aGlzIHByb3BlcnR5IGRpcmVjdGx5IGZyb20gdGhlIG91dHNpZGVcbiAgICB0aGlzLnBlbmRpbmdEcml2ZXJzID0ge307XG5cbiAgICAvLyBhbGxvdyB0aGlzIHRvIGhhcHBlbiBpbiB0aGUgYmFja2dyb3VuZCwgc28gbm8gYGF3YWl0YFxuICAgIHVwZGF0ZUJ1aWxkSW5mbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbCBjb21tYW5kcyBxdWV1ZWluZyBmb3IgdGhlIHVtYnJlbGxhIEFwcGl1bSBkcml2ZXJcbiAgICovXG4gIGdldCBpc0NvbW1hbmRzUXVldWVFbmFibGVkICgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzZXNzaW9uRXhpc3RzIChzZXNzaW9uSWQpIHtcbiAgICBjb25zdCBkc3RTZXNzaW9uID0gdGhpcy5zZXNzaW9uc1tzZXNzaW9uSWRdO1xuICAgIHJldHVybiBkc3RTZXNzaW9uICYmIGRzdFNlc3Npb24uc2Vzc2lvbklkICE9PSBudWxsO1xuICB9XG5cbiAgZHJpdmVyRm9yU2Vzc2lvbiAoc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXTtcbiAgfVxuXG4gIGdldERyaXZlckFuZFZlcnNpb25Gb3JDYXBzIChjYXBzKSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKGNhcHMucGxhdGZvcm1OYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBpbmNsdWRlIGEgcGxhdGZvcm1OYW1lIGNhcGFiaWxpdHknKTtcbiAgICB9XG5cbiAgICBjb25zdCBwbGF0Zm9ybU5hbWUgPSBjYXBzLnBsYXRmb3JtTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gd2UgZG9uJ3QgbmVjZXNzYXJpbHkgaGF2ZSBhbiBgYXV0b21hdGlvbk5hbWVgIGNhcGFiaWxpdHlcbiAgICBsZXQgYXV0b21hdGlvbk5hbWVDYXAgPSBjYXBzLmF1dG9tYXRpb25OYW1lO1xuICAgIGlmICghXy5pc1N0cmluZyhhdXRvbWF0aW9uTmFtZUNhcCkgfHwgYXV0b21hdGlvbk5hbWVDYXAudG9Mb3dlckNhc2UoKSA9PT0gJ2FwcGl1bScpIHtcbiAgICAgIGNvbnN0IGRyaXZlclNlbGVjdG9yID0gUExBVEZPUk1TX01BUFtwbGF0Zm9ybU5hbWVdO1xuICAgICAgaWYgKGRyaXZlclNlbGVjdG9yKSB7XG4gICAgICAgIGF1dG9tYXRpb25OYW1lQ2FwID0gZHJpdmVyU2VsZWN0b3IoY2Fwcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGF1dG9tYXRpb25OYW1lQ2FwID0gXy50b0xvd2VyKGF1dG9tYXRpb25OYW1lQ2FwKTtcblxuICAgIGxldCBmYWlsdXJlVmVyYiA9ICdmaW5kJztcbiAgICBsZXQgc3VnZ2VzdGlvbiA9ICdQbGVhc2UgY2hlY2sgeW91ciBkZXNpcmVkIGNhcGFiaWxpdGllcyc7XG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdChEUklWRVJfTUFQW2F1dG9tYXRpb25OYW1lQ2FwXSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHtkcml2ZXJQYWNrYWdlLCBkcml2ZXJDbGFzc05hbWV9ID0gRFJJVkVSX01BUFthdXRvbWF0aW9uTmFtZUNhcF07XG4gICAgICAgIGNvbnN0IGRyaXZlciA9IHJlcXVpcmUoZHJpdmVyUGFja2FnZSlbZHJpdmVyQ2xhc3NOYW1lXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkcml2ZXIsXG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5nZXREcml2ZXJWZXJzaW9uKGRyaXZlci5uYW1lLCBkcml2ZXJQYWNrYWdlKSxcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmRlYnVnKGUpO1xuICAgICAgICBmYWlsdXJlVmVyYiA9ICdsb2FkJztcbiAgICAgICAgc3VnZ2VzdGlvbiA9ICdQbGVhc2UgdmVyaWZ5IHlvdXIgQXBwaXVtIGluc3RhbGxhdGlvbic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbXNnID0gXy5pc1N0cmluZyhjYXBzLmF1dG9tYXRpb25OYW1lKVxuICAgICAgPyBgQ291bGQgbm90ICR7ZmFpbHVyZVZlcmJ9IGEgZHJpdmVyIGZvciBhdXRvbWF0aW9uTmFtZSAnJHtjYXBzLmF1dG9tYXRpb25OYW1lfScgYW5kIHBsYXRmb3JtTmFtZSBgICtcbiAgICAgICAgICAgIGAnJHtjYXBzLnBsYXRmb3JtTmFtZX0nYFxuICAgICAgOiBgQ291bGQgbm90ICR7ZmFpbHVyZVZlcmJ9IGEgZHJpdmVyIGZvciBwbGF0Zm9ybU5hbWUgJyR7Y2Fwcy5wbGF0Zm9ybU5hbWV9J2A7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke21zZ30uICR7c3VnZ2VzdGlvbn1gKTtcbiAgfVxuXG4gIGdldERyaXZlclZlcnNpb24gKGRyaXZlck5hbWUsIGRyaXZlclBhY2thZ2UpIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gZ2V0UGFja2FnZVZlcnNpb24oZHJpdmVyUGFja2FnZSk7XG4gICAgaWYgKHZlcnNpb24pIHtcbiAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgIH1cbiAgICBsb2cud2FybihgVW5hYmxlIHRvIGdldCB2ZXJzaW9uIG9mIGRyaXZlciAnJHtkcml2ZXJOYW1lfSdgKTtcbiAgfVxuXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHJldHVybiB7XG4gICAgICBidWlsZDogXy5jbG9uZShnZXRCdWlsZEluZm8oKSksXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldFNlc3Npb25zICgpIHtcbiAgICBjb25zdCBzZXNzaW9ucyA9IGF3YWl0IHNlc3Npb25zTGlzdEd1YXJkLmFjcXVpcmUoQXBwaXVtRHJpdmVyLm5hbWUsICgpID0+IHRoaXMuc2Vzc2lvbnMpO1xuICAgIHJldHVybiBfLnRvUGFpcnMoc2Vzc2lvbnMpXG4gICAgICAubWFwKChbaWQsIGRyaXZlcl0pID0+ICh7aWQsIGNhcGFiaWxpdGllczogZHJpdmVyLmNhcHN9KSk7XG4gIH1cblxuICBwcmludE5ld1Nlc3Npb25Bbm5vdW5jZW1lbnQgKGRyaXZlck5hbWUsIGRyaXZlclZlcnNpb24pIHtcbiAgICBjb25zdCBpbnRyb1N0cmluZyA9IGRyaXZlclZlcnNpb25cbiAgICAgID8gYEFwcGl1bSB2JHtBUFBJVU1fVkVSfSBjcmVhdGluZyBuZXcgJHtkcml2ZXJOYW1lfSAodiR7ZHJpdmVyVmVyc2lvbn0pIHNlc3Npb25gXG4gICAgICA6IGBBcHBpdW0gdiR7QVBQSVVNX1ZFUn0gY3JlYXRpbmcgbmV3ICR7ZHJpdmVyTmFtZX0gc2Vzc2lvbmA7XG4gICAgbG9nLmluZm8oaW50cm9TdHJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBzZXNzaW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29ud3BDYXBzIEpTT05XUCBmb3JtYXR0ZWQgZGVzaXJlZCBjYXBhYmlsaXRpZXNcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcUNhcHMgUmVxdWlyZWQgY2FwYWJpbGl0aWVzIChKU09OV1Agc3RhbmRhcmQpXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB3M2NDYXBhYmlsaXRpZXMgVzNDIGNhcGFiaWxpdGllc1xuICAgKiBAcmV0dXJuIHtBcnJheX0gVW5pcXVlIHNlc3Npb24gSUQgYW5kIGNhcGFiaWxpdGllc1xuICAgKi9cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoanNvbndwQ2FwcywgcmVxQ2FwcywgdzNjQ2FwYWJpbGl0aWVzKSB7XG4gICAgY29uc3QgZGVmYXVsdENhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKHRoaXMuYXJncy5kZWZhdWx0Q2FwYWJpbGl0aWVzKTtcbiAgICBjb25zdCBkZWZhdWx0U2V0dGluZ3MgPSBwdWxsU2V0dGluZ3MoZGVmYXVsdENhcGFiaWxpdGllcyk7XG4gICAganNvbndwQ2FwcyA9IF8uY2xvbmVEZWVwKGpzb253cENhcHMpO1xuICAgIGNvbnN0IGp3cFNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzLCBwdWxsU2V0dGluZ3MoanNvbndwQ2FwcykpO1xuICAgIHczY0NhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKHczY0NhcGFiaWxpdGllcyk7XG4gICAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgY2xpZW50IG9ubHkgcHJvdmlkZXMgY2FwcyB1c2luZyBKU09OV1Agc3RhbmRhcmQsXG4gICAgLy8gYWx0aG91Z2ggZmlyc3RNYXRjaC9hbHdheXNNYXRjaCBwcm9wZXJ0aWVzIGFyZSBzdGlsbCBwcmVzZW50LlxuICAgIC8vIEluIHN1Y2ggY2FzZSB3ZSBhc3N1bWUgdGhlIGNsaWVudCB1bmRlcnN0YW5kcyBXM0MgcHJvdG9jb2wgYW5kIG1lcmdlIHRoZSBnaXZlblxuICAgIC8vIEpTT05XUCBjYXBzIHRvIFczQyBjYXBzXG4gICAgY29uc3QgdzNjU2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBqd3BTZXR0aW5ncyk7XG4gICAgT2JqZWN0LmFzc2lnbih3M2NTZXR0aW5ncywgcHVsbFNldHRpbmdzKCh3M2NDYXBhYmlsaXRpZXMgfHwge30pLmFsd2F5c01hdGNoIHx8IHt9KSk7XG4gICAgZm9yIChjb25zdCBmaXJzdE1hdGNoRW50cnkgb2YgKCh3M2NDYXBhYmlsaXRpZXMgfHwge30pLmZpcnN0TWF0Y2ggfHwgW10pKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHczY1NldHRpbmdzLCBwdWxsU2V0dGluZ3MoZmlyc3RNYXRjaEVudHJ5KSk7XG4gICAgfVxuXG4gICAgbGV0IHByb3RvY29sO1xuICAgIGxldCBpbm5lclNlc3Npb25JZCwgZENhcHM7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFBhcnNlIHRoZSBjYXBzIGludG8gYSBmb3JtYXQgdGhhdCB0aGUgSW5uZXJEcml2ZXIgd2lsbCBhY2NlcHRcbiAgICAgIGNvbnN0IHBhcnNlZENhcHMgPSBwYXJzZUNhcHNGb3JJbm5lckRyaXZlcihcbiAgICAgICAganNvbndwQ2FwcyxcbiAgICAgICAgdzNjQ2FwYWJpbGl0aWVzLFxuICAgICAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyxcbiAgICAgICAgZGVmYXVsdENhcGFiaWxpdGllc1xuICAgICAgKTtcblxuICAgICAgY29uc3Qge2Rlc2lyZWRDYXBzLCBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMsIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcywgZXJyb3J9ID0gcGFyc2VkQ2FwcztcbiAgICAgIHByb3RvY29sID0gcGFyc2VkQ2Fwcy5wcm90b2NvbDtcblxuICAgICAgLy8gSWYgdGhlIHBhcnNpbmcgb2YgdGhlIGNhcHMgcHJvZHVjZWQgYW4gZXJyb3IsIHRocm93IGl0IGluIGhlcmVcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge2RyaXZlcjogSW5uZXJEcml2ZXIsIHZlcnNpb246IGRyaXZlclZlcnNpb259ID0gdGhpcy5nZXREcml2ZXJBbmRWZXJzaW9uRm9yQ2FwcyhkZXNpcmVkQ2Fwcyk7XG4gICAgICB0aGlzLnByaW50TmV3U2Vzc2lvbkFubm91bmNlbWVudChJbm5lckRyaXZlci5uYW1lLCBkcml2ZXJWZXJzaW9uKTtcblxuICAgICAgaWYgKHRoaXMuYXJncy5zZXNzaW9uT3ZlcnJpZGUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVBbGxTZXNzaW9ucygpO1xuICAgICAgfVxuXG4gICAgICBsZXQgcnVubmluZ0RyaXZlcnNEYXRhLCBvdGhlclBlbmRpbmdEcml2ZXJzRGF0YTtcbiAgICAgIGNvbnN0IGQgPSBuZXcgSW5uZXJEcml2ZXIodGhpcy5hcmdzKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBhc3NpZ24gc2VjdXJpdHkgdmFsdWVzIGRpcmVjdGx5IG9uIHRoZSBkcml2ZXIuIFRoZSBkcml2ZXJcbiAgICAgIC8vIHNob3VsZCBub3QgcmVhZCBzZWN1cml0eSB2YWx1ZXMgZnJvbSBgdGhpcy5vcHRzYCBiZWNhdXNlIHRob3NlIHZhbHVlc1xuICAgICAgLy8gY291bGQgaGF2ZSBiZWVuIHNldCBieSBhIG1hbGljaW91cyB1c2VyIHZpYSBjYXBhYmlsaXRpZXMsIHdoZXJlYXMgd2VcbiAgICAgIC8vIHdhbnQgYSBndWFyYW50ZWUgdGhlIHZhbHVlcyB3ZXJlIHNldCBieSB0aGUgYXBwaXVtIHNlcnZlciBhZG1pblxuICAgICAgaWYgKHRoaXMuYXJncy5yZWxheGVkU2VjdXJpdHlFbmFibGVkKSB7XG4gICAgICAgIGxvZy5pbmZvKGBBcHBseWluZyByZWxheGVkIHNlY3VyaXR5IHRvICcke0lubmVyRHJpdmVyLm5hbWV9JyBhcyBwZXIgYCArXG4gICAgICAgICAgICAgICAgIGBzZXJ2ZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiBBbGwgaW5zZWN1cmUgZmVhdHVyZXMgd2lsbCBiZSBgICtcbiAgICAgICAgICAgICAgICAgYGVuYWJsZWQgdW5sZXNzIGV4cGxpY2l0bHkgZGlzYWJsZWQgYnkgLS1kZW55LWluc2VjdXJlYCk7XG4gICAgICAgIGQucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuYXJncy5kZW55SW5zZWN1cmUpKSB7XG4gICAgICAgIGxvZy5pbmZvKCdFeHBsaWNpdGx5IHByZXZlbnRpbmcgdXNlIG9mIGluc2VjdXJlIGZlYXR1cmVzOicpO1xuICAgICAgICB0aGlzLmFyZ3MuZGVueUluc2VjdXJlLm1hcCgoYSkgPT4gbG9nLmluZm8oYCAgICAke2F9YCkpO1xuICAgICAgICBkLmRlbnlJbnNlY3VyZSA9IHRoaXMuYXJncy5kZW55SW5zZWN1cmU7XG4gICAgICB9XG5cbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuYXJncy5hbGxvd0luc2VjdXJlKSkge1xuICAgICAgICBsb2cuaW5mbygnRXhwbGljaXRseSBlbmFibGluZyB1c2Ugb2YgaW5zZWN1cmUgZmVhdHVyZXM6Jyk7XG4gICAgICAgIHRoaXMuYXJncy5hbGxvd0luc2VjdXJlLm1hcCgoYSkgPT4gbG9nLmluZm8oYCAgICAke2F9YCkpO1xuICAgICAgICBkLmFsbG93SW5zZWN1cmUgPSB0aGlzLmFyZ3MuYWxsb3dJbnNlY3VyZTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhpcyBhc3NpZ25tZW50IGlzIHJlcXVpcmVkIGZvciBjb3JyZWN0IHdlYiBzb2NrZXRzIGZ1bmN0aW9uYWxpdHkgaW5zaWRlIHRoZSBkcml2ZXJcbiAgICAgIGQuc2VydmVyID0gdGhpcy5zZXJ2ZXI7XG4gICAgICB0cnkge1xuICAgICAgICBydW5uaW5nRHJpdmVyc0RhdGEgPSBhd2FpdCB0aGlzLmN1clNlc3Npb25EYXRhRm9yRHJpdmVyKElubmVyRHJpdmVyKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5TZXNzaW9uTm90Q3JlYXRlZEVycm9yKGUubWVzc2FnZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBwZW5kaW5nRHJpdmVyc0d1YXJkLmFjcXVpcmUoQXBwaXVtRHJpdmVyLm5hbWUsICgpID0+IHtcbiAgICAgICAgdGhpcy5wZW5kaW5nRHJpdmVyc1tJbm5lckRyaXZlci5uYW1lXSA9IHRoaXMucGVuZGluZ0RyaXZlcnNbSW5uZXJEcml2ZXIubmFtZV0gfHwgW107XG4gICAgICAgIG90aGVyUGVuZGluZ0RyaXZlcnNEYXRhID0gdGhpcy5wZW5kaW5nRHJpdmVyc1tJbm5lckRyaXZlci5uYW1lXS5tYXAoKGRydikgPT4gZHJ2LmRyaXZlckRhdGEpO1xuICAgICAgICB0aGlzLnBlbmRpbmdEcml2ZXJzW0lubmVyRHJpdmVyLm5hbWVdLnB1c2goZCk7XG4gICAgICB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgW2lubmVyU2Vzc2lvbklkLCBkQ2Fwc10gPSBhd2FpdCBkLmNyZWF0ZVNlc3Npb24oXG4gICAgICAgICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLFxuICAgICAgICAgIHJlcUNhcHMsXG4gICAgICAgICAgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzLFxuICAgICAgICAgIFsuLi5ydW5uaW5nRHJpdmVyc0RhdGEsIC4uLm90aGVyUGVuZGluZ0RyaXZlcnNEYXRhXVxuICAgICAgICApO1xuICAgICAgICBwcm90b2NvbCA9IGQucHJvdG9jb2w7XG4gICAgICAgIGF3YWl0IHNlc3Npb25zTGlzdEd1YXJkLmFjcXVpcmUoQXBwaXVtRHJpdmVyLm5hbWUsICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNlc3Npb25zW2lubmVyU2Vzc2lvbklkXSA9IGQ7XG4gICAgICAgIH0pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgYXdhaXQgcGVuZGluZ0RyaXZlcnNHdWFyZC5hY3F1aXJlKEFwcGl1bURyaXZlci5uYW1lLCAoKSA9PiB7XG4gICAgICAgICAgXy5wdWxsKHRoaXMucGVuZGluZ0RyaXZlcnNbSW5uZXJEcml2ZXIubmFtZV0sIGQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hdHRhY2hVbmV4cGVjdGVkU2h1dGRvd25IYW5kbGVyKGQsIGlubmVyU2Vzc2lvbklkKTtcblxuICAgICAgbG9nLmluZm8oYE5ldyAke0lubmVyRHJpdmVyLm5hbWV9IHNlc3Npb24gY3JlYXRlZCBzdWNjZXNzZnVsbHksIHNlc3Npb24gYCArXG4gICAgICAgICAgICAgIGAke2lubmVyU2Vzc2lvbklkfSBhZGRlZCB0byBtYXN0ZXIgc2Vzc2lvbiBsaXN0YCk7XG5cbiAgICAgIC8vIHNldCB0aGUgTmV3IENvbW1hbmQgVGltZW91dCBmb3IgdGhlIGlubmVyIGRyaXZlclxuICAgICAgZC5zdGFydE5ld0NvbW1hbmRUaW1lb3V0KCk7XG5cbiAgICAgIC8vIGFwcGx5IGluaXRpYWwgdmFsdWVzIHRvIEFwcGl1bSBzZXR0aW5ncyAoaWYgcHJvdmlkZWQpXG4gICAgICBpZiAoZC5pc1czQ1Byb3RvY29sKCkgJiYgIV8uaXNFbXB0eSh3M2NTZXR0aW5ncykpIHtcbiAgICAgICAgbG9nLmluZm8oYEFwcGx5aW5nIHRoZSBpbml0aWFsIHZhbHVlcyB0byBBcHBpdW0gc2V0dGluZ3MgcGFyc2VkIGZyb20gVzNDIGNhcHM6IGAgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHczY1NldHRpbmdzKSk7XG4gICAgICAgIGF3YWl0IGQudXBkYXRlU2V0dGluZ3ModzNjU2V0dGluZ3MpO1xuICAgICAgfSBlbHNlIGlmIChkLmlzTWpzb253cFByb3RvY29sKCkgJiYgIV8uaXNFbXB0eShqd3BTZXR0aW5ncykpIHtcbiAgICAgICAgbG9nLmluZm8oYEFwcGx5aW5nIHRoZSBpbml0aWFsIHZhbHVlcyB0byBBcHBpdW0gc2V0dGluZ3MgcGFyc2VkIGZyb20gTUpTT05XUCBjYXBzOiBgICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShqd3BTZXR0aW5ncykpO1xuICAgICAgICBhd2FpdCBkLnVwZGF0ZVNldHRpbmdzKGp3cFNldHRpbmdzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIGVycm9yLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJvdG9jb2wsXG4gICAgICB2YWx1ZTogW2lubmVyU2Vzc2lvbklkLCBkQ2FwcywgcHJvdG9jb2xdXG4gICAgfTtcbiAgfVxuXG4gIGF0dGFjaFVuZXhwZWN0ZWRTaHV0ZG93bkhhbmRsZXIgKGRyaXZlciwgaW5uZXJTZXNzaW9uSWQpIHtcbiAgICBjb25zdCByZW1vdmVTZXNzaW9uRnJvbU1hc3Rlckxpc3QgPSAoY2F1c2UgPSBuZXcgRXJyb3IoJ1Vua25vd24gZXJyb3InKSkgPT4ge1xuICAgICAgbG9nLndhcm4oYENsb3Npbmcgc2Vzc2lvbiwgY2F1c2Ugd2FzICcke2NhdXNlLm1lc3NhZ2V9J2ApO1xuICAgICAgbG9nLmluZm8oYFJlbW92aW5nIHNlc3Npb24gJyR7aW5uZXJTZXNzaW9uSWR9JyBmcm9tIG91ciBtYXN0ZXIgc2Vzc2lvbiBsaXN0YCk7XG4gICAgICBkZWxldGUgdGhpcy5zZXNzaW9uc1tpbm5lclNlc3Npb25JZF07XG4gICAgfTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by10aGVuXG4gICAgaWYgKF8uaXNGdW5jdGlvbigoZHJpdmVyLm9uVW5leHBlY3RlZFNodXRkb3duIHx8IHt9KS50aGVuKSkge1xuICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgYmxvY2sgYWZ0ZXIgYWxsIHRoZSBkcml2ZXJzIHVzZSBiYXNlIGRyaXZlciBhYm92ZSB2IDUuMC4wXG4gICAgICAvLyBSZW1vdmUgdGhlIHNlc3Npb24gb24gdW5leHBlY3RlZCBzaHV0ZG93biwgc28gdGhhdCB3ZSBhcmUgaW4gYSBwb3NpdGlvblxuICAgICAgLy8gdG8gb3BlbiBhbm90aGVyIHNlc3Npb24gbGF0ZXIgb24uXG4gICAgICBkcml2ZXIub25VbmV4cGVjdGVkU2h1dGRvd25cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLXRoZW5cbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIC8vIGlmIHdlIGdldCBoZXJlLCB3ZSd2ZSBoYWQgYW4gdW5leHBlY3RlZCBzaHV0ZG93biwgc28gZXJyb3JcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgc2h1dGRvd24nKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgLy8gaWYgd2UgY2FuY2VsbGVkIHRoZSB1bmV4cGVjdGVkIHNodXRkb3duIHByb21pc2UsIHRoYXQgbWVhbnMgd2VcbiAgICAgICAgICAvLyBubyBsb25nZXIgY2FyZSBhYm91dCBpdCwgYW5kIGNhbiBzYWZlbHkgaWdub3JlIGl0XG4gICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIEIuQ2FuY2VsbGF0aW9uRXJyb3IpKSB7XG4gICAgICAgICAgICByZW1vdmVTZXNzaW9uRnJvbU1hc3Rlckxpc3QoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTsgLy8gdGhpcyBpcyBhIGNhbmNlbGxhYmxlIHByb21pc2VcbiAgICB9IGVsc2UgaWYgKF8uaXNGdW5jdGlvbihkcml2ZXIub25VbmV4cGVjdGVkU2h1dGRvd24pKSB7XG4gICAgICAvLyBzaW5jZSBiYXNlIGRyaXZlciB2IDUuMC4wXG4gICAgICBkcml2ZXIub25VbmV4cGVjdGVkU2h1dGRvd24ocmVtb3ZlU2Vzc2lvbkZyb21NYXN0ZXJMaXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLndhcm4oYEZhaWxlZCB0byBhdHRhY2ggdGhlIHVuZXhwZWN0ZWQgc2h1dGRvd24gbGlzdGVuZXIuIGAgK1xuICAgICAgICBgSXMgJ29uVW5leHBlY3RlZFNodXRkb3duJyBtZXRob2QgYXZhaWxhYmxlIGZvciAnJHtkcml2ZXIuY29uc3RydWN0b3IubmFtZX0nP2ApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGN1clNlc3Npb25EYXRhRm9yRHJpdmVyIChJbm5lckRyaXZlcikge1xuICAgIGNvbnN0IHNlc3Npb25zID0gYXdhaXQgc2Vzc2lvbnNMaXN0R3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4gdGhpcy5zZXNzaW9ucyk7XG4gICAgY29uc3QgZGF0YSA9IF8udmFsdWVzKHNlc3Npb25zKVxuICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHMpID0+IHMuY29uc3RydWN0b3IubmFtZSA9PT0gSW5uZXJEcml2ZXIubmFtZSlcbiAgICAgICAgICAgICAgICAgICAubWFwKChzKSA9PiBzLmRyaXZlckRhdGEpO1xuICAgIGZvciAobGV0IGRhdHVtIG9mIGRhdGEpIHtcbiAgICAgIGlmICghZGF0dW0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9ibGVtIGdldHRpbmcgc2Vzc2lvbiBkYXRhIGZvciBkcml2ZXIgdHlwZSBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke0lubmVyRHJpdmVyLm5hbWV9OyBkb2VzIGl0IGltcGxlbWVudCAnZ2V0IGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYGRyaXZlckRhdGEnP2ApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKHNlc3Npb25JZCkge1xuICAgIGxldCBwcm90b2NvbDtcbiAgICB0cnkge1xuICAgICAgbGV0IG90aGVyU2Vzc2lvbnNEYXRhID0gbnVsbDtcbiAgICAgIGxldCBkc3RTZXNzaW9uID0gbnVsbDtcbiAgICAgIGF3YWl0IHNlc3Npb25zTGlzdEd1YXJkLmFjcXVpcmUoQXBwaXVtRHJpdmVyLm5hbWUsICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF0pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyQ29uc3RydWN0b3JOYW1lID0gdGhpcy5zZXNzaW9uc1tzZXNzaW9uSWRdLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgIG90aGVyU2Vzc2lvbnNEYXRhID0gXy50b1BhaXJzKHRoaXMuc2Vzc2lvbnMpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4gdmFsdWUuY29uc3RydWN0b3IubmFtZSA9PT0gY3VyQ29uc3RydWN0b3JOYW1lICYmIGtleSAhPT0gc2Vzc2lvbklkKVxuICAgICAgICAgICAgICAubWFwKChbLCB2YWx1ZV0pID0+IHZhbHVlLmRyaXZlckRhdGEpO1xuICAgICAgICBkc3RTZXNzaW9uID0gdGhpcy5zZXNzaW9uc1tzZXNzaW9uSWRdO1xuICAgICAgICBwcm90b2NvbCA9IGRzdFNlc3Npb24ucHJvdG9jb2w7XG4gICAgICAgIGxvZy5pbmZvKGBSZW1vdmluZyBzZXNzaW9uICR7c2Vzc2lvbklkfSBmcm9tIG91ciBtYXN0ZXIgc2Vzc2lvbiBsaXN0YCk7XG4gICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgZGVsZXRlU2Vzc2lvbiBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IG9yIG5vdFxuICAgICAgICAvLyBtYWtlIHRoZSBzZXNzaW9uIHVuYXZhaWxhYmxlLCBiZWNhdXNlIHdobyBrbm93cyB3aGF0IHN0YXRlIGl0IG1pZ2h0XG4gICAgICAgIC8vIGJlIGluIG90aGVyd2lzZVxuICAgICAgICBkZWxldGUgdGhpcy5zZXNzaW9uc1tzZXNzaW9uSWRdO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdmFsdWU6IGF3YWl0IGRzdFNlc3Npb24uZGVsZXRlU2Vzc2lvbihzZXNzaW9uSWQsIG90aGVyU2Vzc2lvbnNEYXRhKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yKGBIYWQgdHJvdWJsZSBlbmRpbmcgc2Vzc2lvbiAke3Nlc3Npb25JZH06ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIGVycm9yOiBlLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVBbGxTZXNzaW9ucyAob3B0cyA9IHt9KSB7XG4gICAgY29uc3Qgc2Vzc2lvbnNDb3VudCA9IF8uc2l6ZSh0aGlzLnNlc3Npb25zKTtcbiAgICBpZiAoMCA9PT0gc2Vzc2lvbnNDb3VudCkge1xuICAgICAgbG9nLmRlYnVnKCdUaGVyZSBhcmUgbm8gYWN0aXZlIHNlc3Npb25zIGZvciBjbGVhbnVwJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgZm9yY2UgPSBmYWxzZSxcbiAgICAgIHJlYXNvbixcbiAgICB9ID0gb3B0cztcbiAgICBsb2cuZGVidWcoYENsZWFuaW5nIHVwICR7dXRpbC5wbHVyYWxpemUoJ2FjdGl2ZSBzZXNzaW9uJywgc2Vzc2lvbnNDb3VudCwgdHJ1ZSl9YCk7XG4gICAgY29uc3QgY2xlYW51cFByb21pc2VzID0gZm9yY2VcbiAgICAgID8gXy52YWx1ZXModGhpcy5zZXNzaW9ucykubWFwKChkcnYpID0+IGRydi5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihyZWFzb24gJiYgbmV3IEVycm9yKHJlYXNvbikpKVxuICAgICAgOiBfLmtleXModGhpcy5zZXNzaW9ucykubWFwKChpZCkgPT4gdGhpcy5kZWxldGVTZXNzaW9uKGlkKSk7XG4gICAgZm9yIChjb25zdCBjbGVhbnVwUHJvbWlzZSBvZiBjbGVhbnVwUHJvbWlzZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGNsZWFudXBQcm9taXNlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2cuZGVidWcoZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQgKGNtZCwgLi4uYXJncykge1xuICAgIC8vIGdldFN0YXR1cyBjb21tYW5kIHNob3VsZCBub3QgYmUgcHV0IGludG8gcXVldWUuIElmIHdlIGRvIGl0IGFzIHBhcnQgb2Ygc3VwZXIuZXhlY3V0ZUNvbW1hbmQsIGl0IHdpbGwgYmUgYWRkZWQgdG8gcXVldWUuXG4gICAgLy8gVGhlcmUgd2lsbCBiZSBsb3Qgb2Ygc3RhdHVzIGNvbW1hbmRzIGluIHF1ZXVlIGR1cmluZyBjcmVhdGVTZXNzaW9uIGNvbW1hbmQsIGFzIGNyZWF0ZVNlc3Npb24gY2FuIHRha2UgdXAgdG8gb3IgbW9yZSB0aGFuIGEgbWludXRlLlxuICAgIGlmIChjbWQgPT09ICdnZXRTdGF0dXMnKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNBcHBpdW1Ecml2ZXJDb21tYW5kKGNtZCkpIHtcbiAgICAgIHJldHVybiBhd2FpdCBzdXBlci5leGVjdXRlQ29tbWFuZChjbWQsIC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlc3Npb25JZCA9IF8ubGFzdChhcmdzKTtcbiAgICBjb25zdCBkc3RTZXNzaW9uID0gYXdhaXQgc2Vzc2lvbnNMaXN0R3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4gdGhpcy5zZXNzaW9uc1tzZXNzaW9uSWRdKTtcbiAgICBpZiAoIWRzdFNlc3Npb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHNlc3Npb24gd2l0aCBpZCAnJHtzZXNzaW9uSWR9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgIH1cblxuICAgIGxldCByZXMgPSB7XG4gICAgICBwcm90b2NvbDogZHN0U2Vzc2lvbi5wcm90b2NvbFxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgcmVzLnZhbHVlID0gYXdhaXQgZHN0U2Vzc2lvbi5leGVjdXRlQ29tbWFuZChjbWQsIC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJlcy5lcnJvciA9IGU7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcm94eUFjdGl2ZSAoc2Vzc2lvbklkKSB7XG4gICAgY29uc3QgZHN0U2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXTtcbiAgICByZXR1cm4gZHN0U2Vzc2lvbiAmJiBfLmlzRnVuY3Rpb24oZHN0U2Vzc2lvbi5wcm94eUFjdGl2ZSkgJiYgZHN0U2Vzc2lvbi5wcm94eUFjdGl2ZShzZXNzaW9uSWQpO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gPyBkc3RTZXNzaW9uLmdldFByb3h5QXZvaWRMaXN0KCkgOiBbXTtcbiAgfVxuXG4gIGNhblByb3h5IChzZXNzaW9uSWQpIHtcbiAgICBjb25zdCBkc3RTZXNzaW9uID0gdGhpcy5zZXNzaW9uc1tzZXNzaW9uSWRdO1xuICAgIHJldHVybiBkc3RTZXNzaW9uICYmIGRzdFNlc3Npb24uY2FuUHJveHkoc2Vzc2lvbklkKTtcbiAgfVxufVxuXG4vLyBoZWxwIGRlY2lkZSB3aGljaCBjb21tYW5kcyBzaG91bGQgYmUgcHJveGllZCB0byBzdWItZHJpdmVycyBhbmQgd2hpY2hcbi8vIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoaXMsIG91ciB1bWJyZWxsYSBkcml2ZXJcbmZ1bmN0aW9uIGlzQXBwaXVtRHJpdmVyQ29tbWFuZCAoY21kKSB7XG4gIHJldHVybiAhaXNTZXNzaW9uQ29tbWFuZChjbWQpIHx8IGNtZCA9PT0gJ2RlbGV0ZVNlc3Npb24nO1xufVxuXG5leHBvcnQgeyBBcHBpdW1Ecml2ZXIgfTtcbiJdLCJmaWxlIjoibGliL2FwcGl1bS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
562
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9hcHBpdW0uanMiXSwibmFtZXMiOlsiUExBVEZPUk1TIiwiRkFLRSIsIkFORFJPSUQiLCJJT1MiLCJBUFBMRV9UVk9TIiwiV0lORE9XUyIsIk1BQyIsIlRJWkVOIiwiTElOVVgiLCJST0tVIiwiV0VCT1MiLCJBVVRPTUFUSU9OX05BTUVTIiwiQVBQSVVNIiwiVUlBVVRPTUFUT1IyIiwiVUlBVVRPTUFUT1IxIiwiWENVSVRFU1QiLCJZT1VJRU5HSU5FIiwiRVNQUkVTU08iLCJJTlNUUlVNRU5UUyIsIk1BQzIiLCJGTFVUVEVSIiwiU0FGQVJJIiwiR0VDS08iLCJEUklWRVJfTUFQIiwidG9Mb3dlckNhc2UiLCJkcml2ZXJDbGFzc05hbWUiLCJkcml2ZXJQYWNrYWdlIiwiUExBVEZPUk1TX01BUCIsImxvZ0RpdmlkZXJMZW5ndGgiLCJhdXRvbWF0aW9uV2FybmluZyIsImRpdmlkZXIiLCJFT0wiLCJfIiwicmVwZWF0IiwiYXV0b21hdGlvbldhcm5pbmdTdHJpbmciLCJsb2ciLCJ3aWR0aCIsIndhcm4iLCJjYXBzIiwicGxhdGZvcm1WZXJzaW9uIiwic2VtdmVyIiwidmFsaWQiLCJjb2VyY2UiLCJzYXRpc2ZpZXMiLCJpbmZvIiwiZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cyIsImF1dG9tYXRpb25OYW1lIiwicHJlc2VuY2UiLCJpc1N0cmluZyIsImluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZSIsInZhbHVlcyIsInBsYXRmb3JtTmFtZSIsImtleXMiLCJzZXNzaW9uc0xpc3RHdWFyZCIsIkFzeW5jTG9jayIsInBlbmRpbmdEcml2ZXJzR3VhcmQiLCJBcHBpdW1Ecml2ZXIiLCJCYXNlRHJpdmVyIiwiY29uc3RydWN0b3IiLCJhcmdzIiwidG1wRGlyIiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9UTVBfRElSIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwibmV3Q29tbWFuZFRpbWVvdXRNcyIsIk9iamVjdCIsImFzc2lnbiIsInNlc3Npb25zIiwicGVuZGluZ0RyaXZlcnMiLCJpc0NvbW1hbmRzUXVldWVFbmFibGVkIiwic2Vzc2lvbkV4aXN0cyIsInNlc3Npb25JZCIsImRzdFNlc3Npb24iLCJkcml2ZXJGb3JTZXNzaW9uIiwiZ2V0RHJpdmVyQW5kVmVyc2lvbkZvckNhcHMiLCJFcnJvciIsImF1dG9tYXRpb25OYW1lQ2FwIiwiZHJpdmVyU2VsZWN0b3IiLCJ0b0xvd2VyIiwiZmFpbHVyZVZlcmIiLCJzdWdnZXN0aW9uIiwiaXNQbGFpbk9iamVjdCIsImRyaXZlciIsInJlcXVpcmUiLCJ2ZXJzaW9uIiwiZ2V0RHJpdmVyVmVyc2lvbiIsIm5hbWUiLCJlIiwiZGVidWciLCJtc2ciLCJkcml2ZXJOYW1lIiwiZ2V0U3RhdHVzIiwiYnVpbGQiLCJjbG9uZSIsImdldFNlc3Npb25zIiwiYWNxdWlyZSIsInRvUGFpcnMiLCJtYXAiLCJpZCIsImNhcGFiaWxpdGllcyIsInByaW50TmV3U2Vzc2lvbkFubm91bmNlbWVudCIsImRyaXZlclZlcnNpb24iLCJpbnRyb1N0cmluZyIsIkFQUElVTV9WRVIiLCJjcmVhdGVTZXNzaW9uIiwianNvbndwQ2FwcyIsInJlcUNhcHMiLCJ3M2NDYXBhYmlsaXRpZXMiLCJkZWZhdWx0Q2FwYWJpbGl0aWVzIiwiY2xvbmVEZWVwIiwiZGVmYXVsdFNldHRpbmdzIiwiandwU2V0dGluZ3MiLCJ3M2NTZXR0aW5ncyIsImFsd2F5c01hdGNoIiwiZmlyc3RNYXRjaEVudHJ5IiwiZmlyc3RNYXRjaCIsInByb3RvY29sIiwiaW5uZXJTZXNzaW9uSWQiLCJkQ2FwcyIsInBhcnNlZENhcHMiLCJkZXNpcmVkQ2FwcyIsInByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyIsInByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyIsImVycm9yIiwiSW5uZXJEcml2ZXIiLCJzZXNzaW9uT3ZlcnJpZGUiLCJkZWxldGVBbGxTZXNzaW9ucyIsInJ1bm5pbmdEcml2ZXJzRGF0YSIsIm90aGVyUGVuZGluZ0RyaXZlcnNEYXRhIiwiZCIsInJlbGF4ZWRTZWN1cml0eUVuYWJsZWQiLCJpc0VtcHR5IiwiZGVueUluc2VjdXJlIiwiYSIsImFsbG93SW5zZWN1cmUiLCJzZXJ2ZXIiLCJjdXJTZXNzaW9uRGF0YUZvckRyaXZlciIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJtZXNzYWdlIiwiZHJ2IiwiZHJpdmVyRGF0YSIsInB1c2giLCJwdWxsIiwiYXR0YWNoVW5leHBlY3RlZFNodXRkb3duSGFuZGxlciIsInN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQiLCJpc1czQ1Byb3RvY29sIiwiSlNPTiIsInN0cmluZ2lmeSIsInVwZGF0ZVNldHRpbmdzIiwiaXNNanNvbndwUHJvdG9jb2wiLCJ2YWx1ZSIsInJlbW92ZVNlc3Npb25Gcm9tTWFzdGVyTGlzdCIsImNhdXNlIiwiaXNGdW5jdGlvbiIsIm9uVW5leHBlY3RlZFNodXRkb3duIiwidGhlbiIsImNhdGNoIiwiQiIsIkNhbmNlbGxhdGlvbkVycm9yIiwiZGF0YSIsImZpbHRlciIsInMiLCJkYXR1bSIsImRlbGV0ZVNlc3Npb24iLCJvdGhlclNlc3Npb25zRGF0YSIsImN1ckNvbnN0cnVjdG9yTmFtZSIsImtleSIsIm9wdHMiLCJzZXNzaW9uc0NvdW50Iiwic2l6ZSIsImZvcmNlIiwicmVhc29uIiwidXRpbCIsInBsdXJhbGl6ZSIsImNsZWFudXBQcm9taXNlcyIsInN0YXJ0VW5leHBlY3RlZFNodXRkb3duIiwiY2xlYW51cFByb21pc2UiLCJleGVjdXRlQ29tbWFuZCIsImNtZCIsImlzQXBwaXVtRHJpdmVyQ29tbWFuZCIsImxhc3QiLCJyZXMiLCJwcm94eUFjdGl2ZSIsImdldFByb3h5QXZvaWRMaXN0IiwiY2FuUHJveHkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsU0FBUyxHQUFHO0FBQ2hCQyxFQUFBQSxJQUFJLEVBQUUsTUFEVTtBQUVoQkMsRUFBQUEsT0FBTyxF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SCxTQUFGLEVBQWE7QUFDdEIsVUFBTUMsVUFBVSxHQUFHLEtBQUtMLFFBQUwsQ0FBY0ksU0FBZCxDQUFuQjtBQUNBLFdBQU9DLFVBQVUsSUFBSXpDLGdCQUFFMkgsVUFBRixDQUFhbEYsVUFBVSxDQUFDK0csV0FBeEIsQ0FBZCxJQUFzRC9HLFVBQVUsQ0FBQytHLFdBQVgsQ0FBdUJoSCxTQUF2QixDQUE3RDtBQUNEOztBQUVEaUgsRUFBQUEsaUJBQWlCLENBQUVqSCxTQUFGLEVBQWE7QUFDNUIsVUFBTUMsVUFBVSxHQUFHLEtBQUtMLFFBQUwsQ0FBY0ksU0FBZCxDQUFuQjtBQUNBLFdBQU9DLFVBQVUsR0FBR0EsVUFBVSxDQUFDZ0gsaUJBQVgsRUFBSCxHQUFvQyxFQUFyRDtBQUNEOztBQUVEQyxFQUFBQSxRQUFRLENBQUVsSCxTQUFGLEVBQWE7QUFDbkIsVUFBTUMsVUFBVSxHQUFHLEtBQUtMLFFBQUwsQ0FBY0ksU0FBZCxDQUFuQjtBQUNBLFdBQU9DLFVBQVUsSUFBSUEsVUFBVSxDQUFDaUgsUUFBWCxDQUFvQmxILFNBQXBCLENBQXJCO0FBQ0Q7O0FBbFptQzs7OztBQXVadEMsU0FBUzZHLHFCQUFULENBQWdDRCxHQUFoQyxFQUFxQztBQUNuQyxTQUFPLENBQUMsd0NBQWlCQSxHQUFqQixDQUFELElBQTBCQSxHQUFHLEtBQUssZUFBekM7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGdldEJ1aWxkSW5mbywgdXBkYXRlQnVpbGRJbmZvLCBBUFBJVU1fVkVSIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgQmFzZURyaXZlciwgZXJyb3JzLCBpc1Nlc3Npb25Db21tYW5kIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgeyBwYXJzZUNhcHNGb3JJbm5lckRyaXZlciwgZ2V0UGFja2FnZVZlcnNpb24sIHB1bGxTZXR0aW5ncyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHdyYXAgZnJvbSAnd29yZC13cmFwJztcbmltcG9ydCB7IEVPTCB9IGZyb20gJ29zJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5cblxuY29uc3QgUExBVEZPUk1TID0ge1xuICBGQUtFOiAnZmFrZScsXG4gIEFORFJPSUQ6ICdhbmRyb2lkJyxcbiAgSU9TOiAnaW9zJyxcbiAgQVBQTEVfVFZPUzogJ3R2b3MnLFxuICBXSU5ET1dTOiAnd2luZG93cycsXG4gIE1BQzogJ21hYycsXG4gIFRJWkVOOiAndGl6ZW4nLFxuICBMSU5VWDogJ2xpbnV4JyxcbiAgUk9LVTogJ3Jva3UnLFxuICBXRUJPUzogJ3dlYm9zJ1xufTtcblxuY29uc3QgQVVUT01BVElPTl9OQU1FUyA9IHtcbiAgQVBQSVVNOiAnQXBwaXVtJyxcbiAgVUlBVVRPTUFUT1IyOiAnVWlBdXRvbWF0b3IyJyxcbiAgVUlBVVRPTUFUT1IxOiAnVWlBdXRvbWF0b3IxJyxcbiAgWENVSVRFU1Q6ICdYQ1VJVGVzdCcsXG4gIFlPVUlFTkdJTkU6ICdZb3VpRW5naW5lJyxcbiAgRVNQUkVTU086ICdFc3ByZXNzbycsXG4gIFRJWkVOOiAnVGl6ZW4nLFxuICBGQUtFOiAnRmFrZScsXG4gIElOU1RSVU1FTlRTOiAnSW5zdHJ1bWVudHMnLFxuICBXSU5ET1dTOiAnV2luZG93cycsXG4gIE1BQzogJ01hYycsXG4gIE1BQzI6ICdNYWMyJyxcbiAgRkxVVFRFUjogJ0ZsdXR0ZXInLFxuICBTQUZBUkk6ICdTYWZhcmknLFxuICBHRUNLTzogJ0dlY2tvJyxcbiAgUk9LVTogJ1Jva3UnLFxuICBXRUJPUzogJ1dlYk9TJ1xufTtcbmNvbnN0IERSSVZFUl9NQVAgPSB7XG4gIFtBVVRPTUFUSU9OX05BTUVTLlVJQVVUT01BVE9SMi50b0xvd2VyQ2FzZSgpXToge1xuICAgIGRyaXZlckNsYXNzTmFtZTogJ0FuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXInLFxuICAgIGRyaXZlclBhY2thZ2U6ICdhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcicsXG4gIH0sXG4gIFtBVVRPTUFUSU9OX05BTUVTLlhDVUlURVNULnRvTG93ZXJDYXNlKCldOiB7XG4gICAgZHJpdmVyQ2xhc3NOYW1lOiAnWENVSVRlc3REcml2ZXInLFxuICAgIGRyaXZlclBhY2thZ2U6ICdhcHBpdW0teGN1aXRlc3QtZHJpdmVyJyxcbiAgfSxcbiAgW0FVVE9NQVRJT05fTkFNRVMuWU9VSUVOR0lORS50b0xvd2VyQ2FzZSgpXToge1xuICAgIGRyaXZlckNsYXNzTmFtZTogJ1lvdWlFbmdpbmVEcml2ZXInLFxuICAgIGRyaXZlclBhY2thZ2U6ICdhcHBpdW0teW91aWVuZ2luZS1kcml2ZXInLFxuICB9LFxuICBbQVVUT01BVElPTl9OQU1FUy5GQUtFLnRvTG93ZXJDYXNlKCldOiB7XG4gICAgZHJpdmVyQ2xhc3NOYW1lOiAnRmFrZURyaXZlcicsXG4gICAgZHJpdmVyUGFja2FnZTogJ2FwcGl1bS1mYWtlLWRyaXZlcicsXG4gIH0sXG4gIFtBVVRPTUFUSU9OX05BTUVTLlVJQVVUT01BVE9SMS50b0xvd2VyQ2FzZSgpXToge1xuICAgIGRyaXZlckNsYXNzTmFtZTogJ0FuZHJvaWREcml2ZXInLFxuICAgIGRyaXZlclBhY2thZ2U6ICdhcHBpdW0tYW5kcm9pZC1kcml2ZXInLFxuICB9LFxuICBbQVVUT01BVElPTl9OQU1FUy5JTlNUUlVNRU5UUy50b0xvd2VyQ2FzZSgpXToge1xuICAgIGRyaXZlckNsYXNzTmFtZTogJ0lvc0RyaXZlcicsXG4gICAgZHJpdmVyUGFja2FnZTogJ2FwcGl1bS1pb3MtZHJpdmVyJyxcbiAgfSxcbiAgW0FVVE9NQVRJT05fTkFNRVMuV0lORE9XUy50b0xvd2VyQ2FzZSgpXToge1xuICAgIGRyaXZlckNsYXNzTmFtZTogJ1dpbmRvd3NEcml2ZXInLFxuICAgIGRyaXZlclBhY2thZ2U6ICdhcHBpdW0td2luZG93cy1kcml2ZXInLFxuICB9LFxuICBbQVVUT01BVElPTl9OQU1FUy5NQUMudG9Mb3dlckNhc2UoKV06IHtcbiAgICBkcml2ZXJDbGFzc05hbWU6ICdNYWNEcml2ZXInLFxuICAgIGRyaXZlclBhY2thZ2U6ICdhcHBpdW0tbWFjLWRyaXZlcicsXG4gIH0sXG4gIFtBVVRPTUFUSU9OX05BTUVTLk1BQzIudG9Mb3dlckNhc2UoKV06IHtcbiAgICBkcml2ZXJDbGFzc05hbWU6ICdNYWMyRHJpdmVyJyxcbiAgICBkcml2ZXJQYWNrYWdlOiAnYXBwaXVtLW1hYzItZHJpdmVyJyxcbiAgfSxcbiAgW0FVVE9NQVRJT05fTkFNRVMuRVNQUkVTU08udG9Mb3dlckNhc2UoKV06IHtcbiAgICBkcml2ZXJDbGFzc05hbWU6ICdFc3ByZXNzb0RyaXZlcicsXG4gICAgZHJpdmVyUGFja2FnZTogJ2FwcGl1bS1lc3ByZXNzby1kcml2ZXInLFxuICB9LFxuICBbQVVUT01BVElPTl9OQU1FUy5USVpFTi50b0xvd2VyQ2FzZSgpXToge1xuICAgIGRyaXZlckNsYXNzTmFtZTogJ1RpemVuRHJpdmVyJyxcbiAgICBkcml2ZXJQYWNrYWdlOiAnYXBwaXVtLXRpemVuLWRyaXZlcicsXG4gIH0sXG4gIFtBVVRPTUFUSU9OX05BTUVTLkZMVVRURVIudG9Mb3dlckNhc2UoKV06IHtcbiAgICBkcml2ZXJDbGFzc05hbWU6ICdGbHV0dGVyRHJpdmVyJyxcbiAgICBkcml2ZXJQYWNrYWdlOiAnYXBwaXVtLWZsdXR0ZXItZHJpdmVyJ1xuICB9LFxuICBbQVVUT01BVElPTl9OQU1FUy5TQUZBUkkudG9Mb3dlckNhc2UoKV06IHtcbiAgICBkcml2ZXJDbGFzc05hbWU6ICdTYWZhcmlEcml2ZXInLFxuICAgIGRyaXZlclBhY2thZ2U6ICdhcHBpdW0tc2FmYXJpLWRyaXZlcidcbiAgfSxcbiAgW0FVVE9NQVRJT05fTkFNRVMuR0VDS08udG9Mb3dlckNhc2UoKV06IHtcbiAgICBkcml2ZXJDbGFzc05hbWU6ICdHZWNrb0RyaXZlcicsXG4gICAgZHJpdmVyUGFja2FnZTogJ2FwcGl1bS1nZWNrb2RyaXZlcidcbiAgfSxcbiAgW0FVVE9NQVRJT05fTkFNRVMuUk9LVS50b0xvd2VyQ2FzZSgpXToge1xuICAgIGRyaXZlckNsYXNzTmFtZTogJ1Jva3VEcml2ZXInLFxuICAgIGRyaXZlclBhY2thZ2U6ICdhcHBpdW0tcm9rdS1kcml2ZXInXG4gIH0sXG4gIFtBVVRPTUFUSU9OX05BTUVTLldFQk9TLnRvTG93ZXJDYXNlKCldOiB7XG4gICAgZHJpdmVyQ2xhc3NOYW1lOiAnV2ViT1NEcml2ZXInLFxuICAgIGRyaXZlclBhY2thZ2U6ICdhcHBpdW0td2Vib3MtZHJpdmVyJ1xuICB9LFxufTtcblxuY29uc3QgUExBVEZPUk1TX01BUCA9IHtcbiAgW1BMQVRGT1JNUy5GQUtFXTogKCkgPT4gQVVUT01BVElPTl9OQU1FUy5GQUtFLFxuICBbUExBVEZPUk1TLkFORFJPSURdOiAoKSA9PiB7XG4gICAgLy8gV2FybiB1c2VycyB0aGF0IGRlZmF1bHQgYXV0b21hdGlvbiBpcyBnb2luZyB0byBjaGFuZ2UgdG8gVWlBdXRvbWF0b3IyIGZvciAxLjE0XG4gICAgLy8gYW5kIHdpbGwgYmVjb21lIHJlcXVpcmVkIG9uIEFwcGl1bSAyLjBcbiAgICBjb25zdCBsb2dEaXZpZGVyTGVuZ3RoID0gNzA7IC8vIEZpdCBpbiBjb21tYW5kIGxpbmVcblxuICAgIGNvbnN0IGF1dG9tYXRpb25XYXJuaW5nID0gW1xuICAgICAgYFRoZSAnYXV0b21hdGlvbk5hbWUnIGNhcGFiaWxpdHkgd2FzIG5vdCBwcm92aWRlZCBpbiB0aGUgZGVzaXJlZCBjYXBhYmlsaXRpZXMgZm9yIHRoaXMgQW5kcm9pZCBzZXNzaW9uYCxcbiAgICAgIGBTZXR0aW5nICdhdXRvbWF0aW9uTmFtZT1VaUF1dG9tYXRvcjInIGJ5IGRlZmF1bHQgYW5kIHVzaW5nIHRoZSBVaUF1dG9tYXRvcjIgRHJpdmVyYCxcbiAgICAgIGBUaGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIEFwcGl1bSAoMi54KSB3aWxsICoqcmVxdWlyZSoqIHRoZSAnYXV0b21hdGlvbk5hbWUnIGNhcGFiaWxpdHkgdG8gYmUgc2V0IGZvciBhbGwgc2Vzc2lvbnMgb24gYWxsIHBsYXRmb3Jtc2AsXG4gICAgICBgSW4gcHJldmlvdXMgdmVyc2lvbnMgKEFwcGl1bSA8PSAxLjEzLngpLCB0aGUgZGVmYXVsdCB3YXMgJ2F1dG9tYXRpb25OYW1lPVVpQXV0b21hdG9yMSdgLFxuICAgICAgYElmIHlvdSB3aXNoIHRvIHVzZSB0aGF0IGF1dG9tYXRpb24gaW5zdGVhZCBvZiBVaUF1dG9tYXRvcjIsIHBsZWFzZSBhZGQgJ2F1dG9tYXRpb25OYW1lPVVpQXV0b21hdG9yMScgdG8geW91ciBkZXNpcmVkIGNhcGFiaWxpdGllc2AsXG4gICAgICBgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZHJpdmVycywgcGxlYXNlIHZpc2l0IGh0dHA6Ly9hcHBpdW0uaW8vZG9jcy9lbi9hYm91dC1hcHBpdW0vaW50cm8vIGFuZCBleHBsb3JlIHRoZSAnRHJpdmVycycgbWVudWBcbiAgICBdO1xuXG4gICAgbGV0IGRpdmlkZXIgPSBgJHtFT0x9JHtfLnJlcGVhdCgnPScsIGxvZ0RpdmlkZXJMZW5ndGgpfSR7RU9MfWA7XG4gICAgbGV0IGF1dG9tYXRpb25XYXJuaW5nU3RyaW5nID0gZGl2aWRlcjtcbiAgICBhdXRvbWF0aW9uV2FybmluZ1N0cmluZyArPSBgICBERVBSRUNBVElPTiBXQVJOSU5HOmAgKyBFT0w7XG4gICAgZm9yIChsZXQgbG9nIG9mIGF1dG9tYXRpb25XYXJuaW5nKSB7XG4gICAgICBhdXRvbWF0aW9uV2FybmluZ1N0cmluZyArPSBFT0wgKyB3cmFwKGxvZywge3dpZHRoOiBsb2dEaXZpZGVyTGVuZ3RoIC0gMn0pICsgRU9MO1xuICAgIH1cbiAgICBhdXRvbWF0aW9uV2FybmluZ1N0cmluZyArPSBkaXZpZGVyO1xuXG4gICAgLy8gUmVjb21tZW5kIHVzZXJzIHRvIHVwZ3JhZGUgdG8gVWlBdXRvbWF0b3IyIGlmIHRoZXkncmUgdXNpbmcgQW5kcm9pZCA+PSA2XG4gICAgbG9nLndhcm4oYXV0b21hdGlvbldhcm5pbmdTdHJpbmcpO1xuXG4gICAgcmV0dXJuIEFVVE9NQVRJT05fTkFNRVMuVUlBVVRPTUFUT1IyO1xuICB9LFxuICBbUExBVEZPUk1TLklPU106IChjYXBzKSA9PiB7XG4gICAgY29uc3QgcGxhdGZvcm1WZXJzaW9uID0gc2VtdmVyLnZhbGlkKHNlbXZlci5jb2VyY2UoY2Fwcy5wbGF0Zm9ybVZlcnNpb24pKTtcbiAgICBsb2cud2FybihgRGVwcmVjYXRpb25XYXJuaW5nOiAnYXV0b21hdGlvbk5hbWUnIGNhcGFiaWxpdHkgd2FzIG5vdCBwcm92aWRlZC4gYCArXG4gICAgICBgRnV0dXJlIHZlcnNpb25zIG9mIEFwcGl1bSB3aWxsIHJlcXVpcmUgJ2F1dG9tYXRpb25OYW1lJyBjYXBhYmlsaXR5IHRvIGJlIHNldCBmb3IgaU9TIHNlc3Npb25zLmApO1xuICAgIGlmIChwbGF0Zm9ybVZlcnNpb24gJiYgc2VtdmVyLnNhdGlzZmllcyhwbGF0Zm9ybVZlcnNpb24sICc+PTEwLjAuMCcpKSB7XG4gICAgICBsb2cuaW5mbygnUmVxdWVzdGVkIGlPUyBzdXBwb3J0IHdpdGggdmVyc2lvbiA+PSAxMCwgJyArXG4gICAgICAgIGB1c2luZyAnJHtBVVRPTUFUSU9OX05BTUVTLlhDVUlURVNUfScgYCArXG4gICAgICAgICdkcml2ZXIgaW5zdGVhZCBvZiBVSUF1dG9tYXRpb24tYmFzZWQgZHJpdmVyLCBzaW5jZSB0aGUgJyArXG4gICAgICAgICdsYXR0ZXIgaXMgdW5zdXBwb3J0ZWQgb24gaU9TIDEwIGFuZCB1cC4nKTtcbiAgICAgIHJldHVybiBBVVRPTUFUSU9OX05BTUVTLlhDVUlURVNUO1xuICAgIH1cblxuICAgIHJldHVybiBBVVRPTUFUSU9OX05BTUVTLklOU1RSVU1FTlRTO1xuICB9LFxuICBbUExBVEZPUk1TLkFQUExFX1RWT1NdOiAoKSA9PiBBVVRPTUFUSU9OX05BTUVTLlhDVUlURVNULFxuICBbUExBVEZPUk1TLldJTkRPV1NdOiAoKSA9PiBBVVRPTUFUSU9OX05BTUVTLldJTkRPV1MsXG4gIFtQTEFURk9STVMuTUFDXTogKCkgPT4gQVVUT01BVElPTl9OQU1FUy5NQUMsXG4gIFtQTEFURk9STVMuVElaRU5dOiAoKSA9PiBBVVRPTUFUSU9OX05BTUVTLlRJWkVOLFxuICBbUExBVEZPUk1TLkxJTlVYXTogKCkgPT4gQVVUT01BVElPTl9OQU1FUy5HRUNLTyxcbiAgW1BMQVRGT1JNUy5ST0tVXTogKCkgPT4gQVVUT01BVElPTl9OQU1FUy5ST0tVLFxuICBbUExBVEZPUk1TLldFQk9TXTogKCkgPT4gQVVUT01BVElPTl9OQU1FUy5XRUJPU1xufTtcblxuY29uc3QgZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cyA9IHtcbiAgYXV0b21hdGlvbk5hbWU6IHtcbiAgICBwcmVzZW5jZTogZmFsc2UsXG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBfLnZhbHVlcyhBVVRPTUFUSU9OX05BTUVTKSxcbiAgfSxcbiAgcGxhdGZvcm1OYW1lOiB7XG4gICAgcHJlc2VuY2U6IHRydWUsXG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBfLmtleXMoUExBVEZPUk1TX01BUCksXG4gIH0sXG59O1xuXG5jb25zdCBzZXNzaW9uc0xpc3RHdWFyZCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IHBlbmRpbmdEcml2ZXJzR3VhcmQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbmNsYXNzIEFwcGl1bURyaXZlciBleHRlbmRzIEJhc2VEcml2ZXIge1xuICBjb25zdHJ1Y3RvciAoYXJncykge1xuICAgIC8vIEl0IGlzIG5lY2Vzc2FyeSB0byBzZXQgYC0tdG1wYCBoZXJlIHNpbmNlIGl0IHNob3VsZCBiZSBzZXQgdG9cbiAgICAvLyBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUiBvbmNlIGF0IGFuIGluaXRpYWwgcG9pbnQgaW4gdGhlIEFwcGl1bSBsaWZlY3ljbGUuXG4gICAgLy8gVGhlIHByb2Nlc3MgYXJndW1lbnQgd2lsbCBiZSByZWZlcmVuY2VkIGJ5IEJhc2VEcml2ZXIuXG4gICAgLy8gUGxlYXNlIGNhbGwgYXBwaXVtLXN1cHBvcnQudGVtcERpciBtb2R1bGUgdG8gYXBwbHkgdGhpcyBiZW5lZml0LlxuICAgIGlmIChhcmdzLnRtcERpcikge1xuICAgICAgcHJvY2Vzcy5lbnYuQVBQSVVNX1RNUF9ESVIgPSBhcmdzLnRtcERpcjtcbiAgICB9XG5cbiAgICBzdXBlcihhcmdzKTtcblxuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cztcblxuICAgIC8vIHRoZSBtYWluIEFwcGl1bSBEcml2ZXIgaGFzIG5vIG5ldyBjb21tYW5kIHRpbWVvdXRcbiAgICB0aGlzLm5ld0NvbW1hbmRUaW1lb3V0TXMgPSAwO1xuXG4gICAgdGhpcy5hcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XG5cbiAgICAvLyBBY2Nlc3MgdG8gc2Vzc2lvbnMgbGlzdCBtdXN0IGJlIGd1YXJkZWQgd2l0aCBhIFNlbWFwaG9yZSwgYmVjYXVzZVxuICAgIC8vIGl0IG1pZ2h0IGJlIGNoYW5nZWQgYnkgb3RoZXIgYXN5bmMgY2FsbHMgYXQgYW55IHRpbWVcbiAgICAvLyBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gYWNjZXNzIHRoaXMgcHJvcGVydHkgZGlyZWN0bHkgZnJvbSB0aGUgb3V0c2lkZVxuICAgIHRoaXMuc2Vzc2lvbnMgPSB7fTtcblxuICAgIC8vIEFjY2VzcyB0byBwZW5kaW5nIGRyaXZlcnMgbGlzdCBtdXN0IGJlIGd1YXJkZWQgd2l0aCBhIFNlbWFwaG9yZSwgYmVjYXVzZVxuICAgIC8vIGl0IG1pZ2h0IGJlIGNoYW5nZWQgYnkgb3RoZXIgYXN5bmMgY2FsbHMgYXQgYW55IHRpbWVcbiAgICAvLyBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gYWNjZXNzIHRoaXMgcHJvcGVydHkgZGlyZWN0bHkgZnJvbSB0aGUgb3V0c2lkZVxuICAgIHRoaXMucGVuZGluZ0RyaXZlcnMgPSB7fTtcblxuICAgIC8vIGFsbG93IHRoaXMgdG8gaGFwcGVuIGluIHRoZSBiYWNrZ3JvdW5kLCBzbyBubyBgYXdhaXRgXG4gICAgdXBkYXRlQnVpbGRJbmZvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIGNvbW1hbmRzIHF1ZXVlaW5nIGZvciB0aGUgdW1icmVsbGEgQXBwaXVtIGRyaXZlclxuICAgKi9cbiAgZ2V0IGlzQ29tbWFuZHNRdWV1ZUVuYWJsZWQgKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHNlc3Npb25FeGlzdHMgKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gJiYgZHN0U2Vzc2lvbi5zZXNzaW9uSWQgIT09IG51bGw7XG4gIH1cblxuICBkcml2ZXJGb3JTZXNzaW9uIChzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uc1tzZXNzaW9uSWRdO1xuICB9XG5cbiAgZ2V0RHJpdmVyQW5kVmVyc2lvbkZvckNhcHMgKGNhcHMpIHtcbiAgICBpZiAoIV8uaXNTdHJpbmcoY2Fwcy5wbGF0Zm9ybU5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IGluY2x1ZGUgYSBwbGF0Zm9ybU5hbWUgY2FwYWJpbGl0eScpO1xuICAgIH1cblxuICAgIGNvbnN0IHBsYXRmb3JtTmFtZSA9IGNhcHMucGxhdGZvcm1OYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyB3ZSBkb24ndCBuZWNlc3NhcmlseSBoYXZlIGFuIGBhdXRvbWF0aW9uTmFtZWAgY2FwYWJpbGl0eVxuICAgIGxldCBhdXRvbWF0aW9uTmFtZUNhcCA9IGNhcHMuYXV0b21hdGlvbk5hbWU7XG4gICAgaWYgKCFfLmlzU3RyaW5nKGF1dG9tYXRpb25OYW1lQ2FwKSB8fCBhdXRvbWF0aW9uTmFtZUNhcC50b0xvd2VyQ2FzZSgpID09PSAnYXBwaXVtJykge1xuICAgICAgY29uc3QgZHJpdmVyU2VsZWN0b3IgPSBQTEFURk9STVNfTUFQW3BsYXRmb3JtTmFtZV07XG4gICAgICBpZiAoZHJpdmVyU2VsZWN0b3IpIHtcbiAgICAgICAgYXV0b21hdGlvbk5hbWVDYXAgPSBkcml2ZXJTZWxlY3RvcihjYXBzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXV0b21hdGlvbk5hbWVDYXAgPSBfLnRvTG93ZXIoYXV0b21hdGlvbk5hbWVDYXApO1xuXG4gICAgbGV0IGZhaWx1cmVWZXJiID0gJ2ZpbmQnO1xuICAgIGxldCBzdWdnZXN0aW9uID0gJ1BsZWFzZSBjaGVjayB5b3VyIGRlc2lyZWQgY2FwYWJpbGl0aWVzJztcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KERSSVZFUl9NQVBbYXV0b21hdGlvbk5hbWVDYXBdKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qge2RyaXZlclBhY2thZ2UsIGRyaXZlckNsYXNzTmFtZX0gPSBEUklWRVJfTUFQW2F1dG9tYXRpb25OYW1lQ2FwXTtcbiAgICAgICAgY29uc3QgZHJpdmVyID0gcmVxdWlyZShkcml2ZXJQYWNrYWdlKVtkcml2ZXJDbGFzc05hbWVdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRyaXZlcixcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLmdldERyaXZlclZlcnNpb24oZHJpdmVyLm5hbWUsIGRyaXZlclBhY2thZ2UpLFxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2cuZGVidWcoZSk7XG4gICAgICAgIGZhaWx1cmVWZXJiID0gJ2xvYWQnO1xuICAgICAgICBzdWdnZXN0aW9uID0gJ1BsZWFzZSB2ZXJpZnkgeW91ciBBcHBpdW0gaW5zdGFsbGF0aW9uJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtc2cgPSBfLmlzU3RyaW5nKGNhcHMuYXV0b21hdGlvbk5hbWUpXG4gICAgICA/IGBDb3VsZCBub3QgJHtmYWlsdXJlVmVyYn0gYSBkcml2ZXIgZm9yIGF1dG9tYXRpb25OYW1lICcke2NhcHMuYXV0b21hdGlvbk5hbWV9JyBhbmQgcGxhdGZvcm1OYW1lIGAgK1xuICAgICAgICAgICAgYCcke2NhcHMucGxhdGZvcm1OYW1lfSdgXG4gICAgICA6IGBDb3VsZCBub3QgJHtmYWlsdXJlVmVyYn0gYSBkcml2ZXIgZm9yIHBsYXRmb3JtTmFtZSAnJHtjYXBzLnBsYXRmb3JtTmFtZX0nYDtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bXNnfS4gJHtzdWdnZXN0aW9ufWApO1xuICB9XG5cbiAgZ2V0RHJpdmVyVmVyc2lvbiAoZHJpdmVyTmFtZSwgZHJpdmVyUGFja2FnZSkge1xuICAgIGNvbnN0IHZlcnNpb24gPSBnZXRQYWNrYWdlVmVyc2lvbihkcml2ZXJQYWNrYWdlKTtcbiAgICBpZiAodmVyc2lvbikge1xuICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgfVxuICAgIGxvZy53YXJuKGBVbmFibGUgdG8gZ2V0IHZlcnNpb24gb2YgZHJpdmVyICcke2RyaXZlck5hbWV9J2ApO1xuICB9XG5cbiAgYXN5bmMgZ2V0U3RhdHVzICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1aWxkOiBfLmNsb25lKGdldEJ1aWxkSW5mbygpKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0U2Vzc2lvbnMgKCkge1xuICAgIGNvbnN0IHNlc3Npb25zID0gYXdhaXQgc2Vzc2lvbnNMaXN0R3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4gdGhpcy5zZXNzaW9ucyk7XG4gICAgcmV0dXJuIF8udG9QYWlycyhzZXNzaW9ucylcbiAgICAgIC5tYXAoKFtpZCwgZHJpdmVyXSkgPT4gKHtpZCwgY2FwYWJpbGl0aWVzOiBkcml2ZXIuY2Fwc30pKTtcbiAgfVxuXG4gIHByaW50TmV3U2Vzc2lvbkFubm91bmNlbWVudCAoZHJpdmVyTmFtZSwgZHJpdmVyVmVyc2lvbikge1xuICAgIGNvbnN0IGludHJvU3RyaW5nID0gZHJpdmVyVmVyc2lvblxuICAgICAgPyBgQXBwaXVtIHYke0FQUElVTV9WRVJ9IGNyZWF0aW5nIG5ldyAke2RyaXZlck5hbWV9ICh2JHtkcml2ZXJWZXJzaW9ufSkgc2Vzc2lvbmBcbiAgICAgIDogYEFwcGl1bSB2JHtBUFBJVU1fVkVSfSBjcmVhdGluZyBuZXcgJHtkcml2ZXJOYW1lfSBzZXNzaW9uYDtcbiAgICBsb2cuaW5mbyhpbnRyb1N0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IHNlc3Npb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb253cENhcHMgSlNPTldQIGZvcm1hdHRlZCBkZXNpcmVkIGNhcGFiaWxpdGllc1xuICAgKiBAcGFyYW0ge09iamVjdH0gcmVxQ2FwcyBSZXF1aXJlZCBjYXBhYmlsaXRpZXMgKEpTT05XUCBzdGFuZGFyZClcbiAgICogQHBhcmFtIHtPYmplY3R9IHczY0NhcGFiaWxpdGllcyBXM0MgY2FwYWJpbGl0aWVzXG4gICAqIEByZXR1cm4ge0FycmF5fSBVbmlxdWUgc2Vzc2lvbiBJRCBhbmQgY2FwYWJpbGl0aWVzXG4gICAqL1xuICBhc3luYyBjcmVhdGVTZXNzaW9uIChqc29ud3BDYXBzLCByZXFDYXBzLCB3M2NDYXBhYmlsaXRpZXMpIHtcbiAgICBjb25zdCBkZWZhdWx0Q2FwYWJpbGl0aWVzID0gXy5jbG9uZURlZXAodGhpcy5hcmdzLmRlZmF1bHRDYXBhYmlsaXRpZXMpO1xuICAgIGNvbnN0IGRlZmF1bHRTZXR0aW5ncyA9IHB1bGxTZXR0aW5ncyhkZWZhdWx0Q2FwYWJpbGl0aWVzKTtcbiAgICBqc29ud3BDYXBzID0gXy5jbG9uZURlZXAoanNvbndwQ2Fwcyk7XG4gICAgY29uc3QgandwU2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2V0dGluZ3MsIHB1bGxTZXR0aW5ncyhqc29ud3BDYXBzKSk7XG4gICAgdzNjQ2FwYWJpbGl0aWVzID0gXy5jbG9uZURlZXAodzNjQ2FwYWJpbGl0aWVzKTtcbiAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBjbGllbnQgb25seSBwcm92aWRlcyBjYXBzIHVzaW5nIEpTT05XUCBzdGFuZGFyZCxcbiAgICAvLyBhbHRob3VnaCBmaXJzdE1hdGNoL2Fsd2F5c01hdGNoIHByb3BlcnRpZXMgYXJlIHN0aWxsIHByZXNlbnQuXG4gICAgLy8gSW4gc3VjaCBjYXNlIHdlIGFzc3VtZSB0aGUgY2xpZW50IHVuZGVyc3RhbmRzIFczQyBwcm90b2NvbCBhbmQgbWVyZ2UgdGhlIGdpdmVuXG4gICAgLy8gSlNPTldQIGNhcHMgdG8gVzNDIGNhcHNcbiAgICBjb25zdCB3M2NTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGp3cFNldHRpbmdzKTtcbiAgICBPYmplY3QuYXNzaWduKHczY1NldHRpbmdzLCBwdWxsU2V0dGluZ3MoKHczY0NhcGFiaWxpdGllcyB8fCB7fSkuYWx3YXlzTWF0Y2ggfHwge30pKTtcbiAgICBmb3IgKGNvbnN0IGZpcnN0TWF0Y2hFbnRyeSBvZiAoKHczY0NhcGFiaWxpdGllcyB8fCB7fSkuZmlyc3RNYXRjaCB8fCBbXSkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odzNjU2V0dGluZ3MsIHB1bGxTZXR0aW5ncyhmaXJzdE1hdGNoRW50cnkpKTtcbiAgICB9XG5cbiAgICBsZXQgcHJvdG9jb2w7XG4gICAgbGV0IGlubmVyU2Vzc2lvbklkLCBkQ2FwcztcbiAgICB0cnkge1xuICAgICAgLy8gUGFyc2UgdGhlIGNhcHMgaW50byBhIGZvcm1hdCB0aGF0IHRoZSBJbm5lckRyaXZlciB3aWxsIGFjY2VwdFxuICAgICAgY29uc3QgcGFyc2VkQ2FwcyA9IHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyKFxuICAgICAgICBqc29ud3BDYXBzLFxuICAgICAgICB3M2NDYXBhYmlsaXRpZXMsXG4gICAgICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzLFxuICAgICAgICBkZWZhdWx0Q2FwYWJpbGl0aWVzXG4gICAgICApO1xuXG4gICAgICBjb25zdCB7ZGVzaXJlZENhcHMsIHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcywgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzLCBlcnJvcn0gPSBwYXJzZWRDYXBzO1xuICAgICAgcHJvdG9jb2wgPSBwYXJzZWRDYXBzLnByb3RvY29sO1xuXG4gICAgICAvLyBJZiB0aGUgcGFyc2luZyBvZiB0aGUgY2FwcyBwcm9kdWNlZCBhbiBlcnJvciwgdGhyb3cgaXQgaW4gaGVyZVxuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7ZHJpdmVyOiBJbm5lckRyaXZlciwgdmVyc2lvbjogZHJpdmVyVmVyc2lvbn0gPSB0aGlzLmdldERyaXZlckFuZFZlcnNpb25Gb3JDYXBzKGRlc2lyZWRDYXBzKTtcbiAgICAgIHRoaXMucHJpbnROZXdTZXNzaW9uQW5ub3VuY2VtZW50KElubmVyRHJpdmVyLm5hbWUsIGRyaXZlclZlcnNpb24pO1xuXG4gICAgICBpZiAodGhpcy5hcmdzLnNlc3Npb25PdmVycmlkZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZUFsbFNlc3Npb25zKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBydW5uaW5nRHJpdmVyc0RhdGEsIG90aGVyUGVuZGluZ0RyaXZlcnNEYXRhO1xuICAgICAgY29uc3QgZCA9IG5ldyBJbm5lckRyaXZlcih0aGlzLmFyZ3MpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIGFzc2lnbiBzZWN1cml0eSB2YWx1ZXMgZGlyZWN0bHkgb24gdGhlIGRyaXZlci4gVGhlIGRyaXZlclxuICAgICAgLy8gc2hvdWxkIG5vdCByZWFkIHNlY3VyaXR5IHZhbHVlcyBmcm9tIGB0aGlzLm9wdHNgIGJlY2F1c2UgdGhvc2UgdmFsdWVzXG4gICAgICAvLyBjb3VsZCBoYXZlIGJlZW4gc2V0IGJ5IGEgbWFsaWNpb3VzIHVzZXIgdmlhIGNhcGFiaWxpdGllcywgd2hlcmVhcyB3ZVxuICAgICAgLy8gd2FudCBhIGd1YXJhbnRlZSB0aGUgdmFsdWVzIHdlcmUgc2V0IGJ5IHRoZSBhcHBpdW0gc2VydmVyIGFkbWluXG4gICAgICBpZiAodGhpcy5hcmdzLnJlbGF4ZWRTZWN1cml0eUVuYWJsZWQpIHtcbiAgICAgICAgbG9nLmluZm8oYEFwcGx5aW5nIHJlbGF4ZWQgc2VjdXJpdHkgdG8gJyR7SW5uZXJEcml2ZXIubmFtZX0nIGFzIHBlciBgICtcbiAgICAgICAgICAgICAgICAgYHNlcnZlciBjb21tYW5kIGxpbmUgYXJndW1lbnQuIEFsbCBpbnNlY3VyZSBmZWF0dXJlcyB3aWxsIGJlIGAgK1xuICAgICAgICAgICAgICAgICBgZW5hYmxlZCB1bmxlc3MgZXhwbGljaXRseSBkaXNhYmxlZCBieSAtLWRlbnktaW5zZWN1cmVgKTtcbiAgICAgICAgZC5yZWxheGVkU2VjdXJpdHlFbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5hcmdzLmRlbnlJbnNlY3VyZSkpIHtcbiAgICAgICAgbG9nLmluZm8oJ0V4cGxpY2l0bHkgcHJldmVudGluZyB1c2Ugb2YgaW5zZWN1cmUgZmVhdHVyZXM6Jyk7XG4gICAgICAgIHRoaXMuYXJncy5kZW55SW5zZWN1cmUubWFwKChhKSA9PiBsb2cuaW5mbyhgICAgICR7YX1gKSk7XG4gICAgICAgIGQuZGVueUluc2VjdXJlID0gdGhpcy5hcmdzLmRlbnlJbnNlY3VyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5hcmdzLmFsbG93SW5zZWN1cmUpKSB7XG4gICAgICAgIGxvZy5pbmZvKCdFeHBsaWNpdGx5IGVuYWJsaW5nIHVzZSBvZiBpbnNlY3VyZSBmZWF0dXJlczonKTtcbiAgICAgICAgdGhpcy5hcmdzLmFsbG93SW5zZWN1cmUubWFwKChhKSA9PiBsb2cuaW5mbyhgICAgICR7YX1gKSk7XG4gICAgICAgIGQuYWxsb3dJbnNlY3VyZSA9IHRoaXMuYXJncy5hbGxvd0luc2VjdXJlO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIGFzc2lnbm1lbnQgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3Qgd2ViIHNvY2tldHMgZnVuY3Rpb25hbGl0eSBpbnNpZGUgdGhlIGRyaXZlclxuICAgICAgZC5zZXJ2ZXIgPSB0aGlzLnNlcnZlcjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJ1bm5pbmdEcml2ZXJzRGF0YSA9IGF3YWl0IHRoaXMuY3VyU2Vzc2lvbkRhdGFGb3JEcml2ZXIoSW5uZXJEcml2ZXIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHBlbmRpbmdEcml2ZXJzR3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4ge1xuICAgICAgICB0aGlzLnBlbmRpbmdEcml2ZXJzW0lubmVyRHJpdmVyLm5hbWVdID0gdGhpcy5wZW5kaW5nRHJpdmVyc1tJbm5lckRyaXZlci5uYW1lXSB8fCBbXTtcbiAgICAgICAgb3RoZXJQZW5kaW5nRHJpdmVyc0RhdGEgPSB0aGlzLnBlbmRpbmdEcml2ZXJzW0lubmVyRHJpdmVyLm5hbWVdLm1hcCgoZHJ2KSA9PiBkcnYuZHJpdmVyRGF0YSk7XG4gICAgICAgIHRoaXMucGVuZGluZ0RyaXZlcnNbSW5uZXJEcml2ZXIubmFtZV0ucHVzaChkKTtcbiAgICAgIH0pO1xuXG4gICAgICB0cnkge1xuICAgICAgICBbaW5uZXJTZXNzaW9uSWQsIGRDYXBzXSA9IGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihcbiAgICAgICAgICBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMsXG4gICAgICAgICAgcmVxQ2FwcyxcbiAgICAgICAgICBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMsXG4gICAgICAgICAgWy4uLnJ1bm5pbmdEcml2ZXJzRGF0YSwgLi4ub3RoZXJQZW5kaW5nRHJpdmVyc0RhdGFdXG4gICAgICAgICk7XG4gICAgICAgIHByb3RvY29sID0gZC5wcm90b2NvbDtcbiAgICAgICAgYXdhaXQgc2Vzc2lvbnNMaXN0R3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2Vzc2lvbnNbaW5uZXJTZXNzaW9uSWRdID0gZDtcbiAgICAgICAgfSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBhd2FpdCBwZW5kaW5nRHJpdmVyc0d1YXJkLmFjcXVpcmUoQXBwaXVtRHJpdmVyLm5hbWUsICgpID0+IHtcbiAgICAgICAgICBfLnB1bGwodGhpcy5wZW5kaW5nRHJpdmVyc1tJbm5lckRyaXZlci5uYW1lXSwgZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmF0dGFjaFVuZXhwZWN0ZWRTaHV0ZG93bkhhbmRsZXIoZCwgaW5uZXJTZXNzaW9uSWQpO1xuXG4gICAgICBsb2cuaW5mbyhgTmV3ICR7SW5uZXJEcml2ZXIubmFtZX0gc2Vzc2lvbiBjcmVhdGVkIHN1Y2Nlc3NmdWxseSwgc2Vzc2lvbiBgICtcbiAgICAgICAgICAgICAgYCR7aW5uZXJTZXNzaW9uSWR9IGFkZGVkIHRvIG1hc3RlciBzZXNzaW9uIGxpc3RgKTtcblxuICAgICAgLy8gc2V0IHRoZSBOZXcgQ29tbWFuZCBUaW1lb3V0IGZvciB0aGUgaW5uZXIgZHJpdmVyXG4gICAgICBkLnN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQoKTtcblxuICAgICAgLy8gYXBwbHkgaW5pdGlhbCB2YWx1ZXMgdG8gQXBwaXVtIHNldHRpbmdzIChpZiBwcm92aWRlZClcbiAgICAgIGlmIChkLmlzVzNDUHJvdG9jb2woKSAmJiAhXy5pc0VtcHR5KHczY1NldHRpbmdzKSkge1xuICAgICAgICBsb2cuaW5mbyhgQXBwbHlpbmcgdGhlIGluaXRpYWwgdmFsdWVzIHRvIEFwcGl1bSBzZXR0aW5ncyBwYXJzZWQgZnJvbSBXM0MgY2FwczogYCArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodzNjU2V0dGluZ3MpKTtcbiAgICAgICAgYXdhaXQgZC51cGRhdGVTZXR0aW5ncyh3M2NTZXR0aW5ncyk7XG4gICAgICB9IGVsc2UgaWYgKGQuaXNNanNvbndwUHJvdG9jb2woKSAmJiAhXy5pc0VtcHR5KGp3cFNldHRpbmdzKSkge1xuICAgICAgICBsb2cuaW5mbyhgQXBwbHlpbmcgdGhlIGluaXRpYWwgdmFsdWVzIHRvIEFwcGl1bSBzZXR0aW5ncyBwYXJzZWQgZnJvbSBNSlNPTldQIGNhcHM6IGAgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGp3cFNldHRpbmdzKSk7XG4gICAgICAgIGF3YWl0IGQudXBkYXRlU2V0dGluZ3MoandwU2V0dGluZ3MpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgZXJyb3IsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwcm90b2NvbCxcbiAgICAgIHZhbHVlOiBbaW5uZXJTZXNzaW9uSWQsIGRDYXBzLCBwcm90b2NvbF1cbiAgICB9O1xuICB9XG5cbiAgYXR0YWNoVW5leHBlY3RlZFNodXRkb3duSGFuZGxlciAoZHJpdmVyLCBpbm5lclNlc3Npb25JZCkge1xuICAgIGNvbnN0IHJlbW92ZVNlc3Npb25Gcm9tTWFzdGVyTGlzdCA9IChjYXVzZSA9IG5ldyBFcnJvcignVW5rbm93biBlcnJvcicpKSA9PiB7XG4gICAgICBsb2cud2FybihgQ2xvc2luZyBzZXNzaW9uLCBjYXVzZSB3YXMgJyR7Y2F1c2UubWVzc2FnZX0nYCk7XG4gICAgICBsb2cuaW5mbyhgUmVtb3Zpbmcgc2Vzc2lvbiAnJHtpbm5lclNlc3Npb25JZH0nIGZyb20gb3VyIG1hc3RlciBzZXNzaW9uIGxpc3RgKTtcbiAgICAgIGRlbGV0ZSB0aGlzLnNlc3Npb25zW2lubmVyU2Vzc2lvbklkXTtcbiAgICB9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLXRoZW5cbiAgICBpZiAoXy5pc0Z1bmN0aW9uKChkcml2ZXIub25VbmV4cGVjdGVkU2h1dGRvd24gfHwge30pLnRoZW4pKSB7XG4gICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBibG9jayBhZnRlciBhbGwgdGhlIGRyaXZlcnMgdXNlIGJhc2UgZHJpdmVyIGFib3ZlIHYgNS4wLjBcbiAgICAgIC8vIFJlbW92ZSB0aGUgc2Vzc2lvbiBvbiB1bmV4cGVjdGVkIHNodXRkb3duLCBzbyB0aGF0IHdlIGFyZSBpbiBhIHBvc2l0aW9uXG4gICAgICAvLyB0byBvcGVuIGFub3RoZXIgc2Vzc2lvbiBsYXRlciBvbi5cbiAgICAgIGRyaXZlci5vblVuZXhwZWN0ZWRTaHV0ZG93blxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tdGhlblxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgLy8gaWYgd2UgZ2V0IGhlcmUsIHdlJ3ZlIGhhZCBhbiB1bmV4cGVjdGVkIHNodXRkb3duLCBzbyBlcnJvclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzaHV0ZG93bicpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAvLyBpZiB3ZSBjYW5jZWxsZWQgdGhlIHVuZXhwZWN0ZWQgc2h1dGRvd24gcHJvbWlzZSwgdGhhdCBtZWFucyB3ZVxuICAgICAgICAgIC8vIG5vIGxvbmdlciBjYXJlIGFib3V0IGl0LCBhbmQgY2FuIHNhZmVseSBpZ25vcmUgaXRcbiAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgQi5DYW5jZWxsYXRpb25FcnJvcikpIHtcbiAgICAgICAgICAgIHJlbW92ZVNlc3Npb25Gcm9tTWFzdGVyTGlzdChlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pOyAvLyB0aGlzIGlzIGEgY2FuY2VsbGFibGUgcHJvbWlzZVxuICAgIH0gZWxzZSBpZiAoXy5pc0Z1bmN0aW9uKGRyaXZlci5vblVuZXhwZWN0ZWRTaHV0ZG93bikpIHtcbiAgICAgIC8vIHNpbmNlIGJhc2UgZHJpdmVyIHYgNS4wLjBcbiAgICAgIGRyaXZlci5vblVuZXhwZWN0ZWRTaHV0ZG93bihyZW1vdmVTZXNzaW9uRnJvbU1hc3Rlckxpc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cud2FybihgRmFpbGVkIHRvIGF0dGFjaCB0aGUgdW5leHBlY3RlZCBzaHV0ZG93biBsaXN0ZW5lci4gYCArXG4gICAgICAgIGBJcyAnb25VbmV4cGVjdGVkU2h1dGRvd24nIG1ldGhvZCBhdmFpbGFibGUgZm9yICcke2RyaXZlci5jb25zdHJ1Y3Rvci5uYW1lfSc/YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3VyU2Vzc2lvbkRhdGFGb3JEcml2ZXIgKElubmVyRHJpdmVyKSB7XG4gICAgY29uc3Qgc2Vzc2lvbnMgPSBhd2FpdCBzZXNzaW9uc0xpc3RHdWFyZC5hY3F1aXJlKEFwcGl1bURyaXZlci5uYW1lLCAoKSA9PiB0aGlzLnNlc3Npb25zKTtcbiAgICBjb25zdCBkYXRhID0gXy52YWx1ZXMoc2Vzc2lvbnMpXG4gICAgICAgICAgICAgICAgICAgLmZpbHRlcigocykgPT4gcy5jb25zdHJ1Y3Rvci5uYW1lID09PSBJbm5lckRyaXZlci5uYW1lKVxuICAgICAgICAgICAgICAgICAgIC5tYXAoKHMpID0+IHMuZHJpdmVyRGF0YSk7XG4gICAgZm9yIChsZXQgZGF0dW0gb2YgZGF0YSkge1xuICAgICAgaWYgKCFkYXR1bSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb2JsZW0gZ2V0dGluZyBzZXNzaW9uIGRhdGEgZm9yIGRyaXZlciB0eXBlIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCR7SW5uZXJEcml2ZXIubmFtZX07IGRvZXMgaXQgaW1wbGVtZW50ICdnZXQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgZHJpdmVyRGF0YSc/YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoc2Vzc2lvbklkKSB7XG4gICAgbGV0IHByb3RvY29sO1xuICAgIHRyeSB7XG4gICAgICBsZXQgb3RoZXJTZXNzaW9uc0RhdGEgPSBudWxsO1xuICAgICAgbGV0IGRzdFNlc3Npb24gPSBudWxsO1xuICAgICAgYXdhaXQgc2Vzc2lvbnNMaXN0R3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJDb25zdHJ1Y3Rvck5hbWUgPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF0uY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgb3RoZXJTZXNzaW9uc0RhdGEgPSBfLnRvUGFpcnModGhpcy5zZXNzaW9ucylcbiAgICAgICAgICAgICAgLmZpbHRlcigoW2tleSwgdmFsdWVdKSA9PiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lID09PSBjdXJDb25zdHJ1Y3Rvck5hbWUgJiYga2V5ICE9PSBzZXNzaW9uSWQpXG4gICAgICAgICAgICAgIC5tYXAoKFssIHZhbHVlXSkgPT4gdmFsdWUuZHJpdmVyRGF0YSk7XG4gICAgICAgIGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgICAgIHByb3RvY29sID0gZHN0U2Vzc2lvbi5wcm90b2NvbDtcbiAgICAgICAgbG9nLmluZm8oYFJlbW92aW5nIHNlc3Npb24gJHtzZXNzaW9uSWR9IGZyb20gb3VyIG1hc3RlciBzZXNzaW9uIGxpc3RgKTtcbiAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBkZWxldGVTZXNzaW9uIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkgb3Igbm90XG4gICAgICAgIC8vIG1ha2UgdGhlIHNlc3Npb24gdW5hdmFpbGFibGUsIGJlY2F1c2Ugd2hvIGtub3dzIHdoYXQgc3RhdGUgaXQgbWlnaHRcbiAgICAgICAgLy8gYmUgaW4gb3RoZXJ3aXNlXG4gICAgICAgIGRlbGV0ZSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICB2YWx1ZTogYXdhaXQgZHN0U2Vzc2lvbi5kZWxldGVTZXNzaW9uKHNlc3Npb25JZCwgb3RoZXJTZXNzaW9uc0RhdGEpLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3IoYEhhZCB0cm91YmxlIGVuZGluZyBzZXNzaW9uICR7c2Vzc2lvbklkfTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgZXJyb3I6IGUsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFsbFNlc3Npb25zIChvcHRzID0ge30pIHtcbiAgICBjb25zdCBzZXNzaW9uc0NvdW50ID0gXy5zaXplKHRoaXMuc2Vzc2lvbnMpO1xuICAgIGlmICgwID09PSBzZXNzaW9uc0NvdW50KSB7XG4gICAgICBsb2cuZGVidWcoJ1RoZXJlIGFyZSBubyBhY3RpdmUgc2Vzc2lvbnMgZm9yIGNsZWFudXAnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBmb3JjZSA9IGZhbHNlLFxuICAgICAgcmVhc29uLFxuICAgIH0gPSBvcHRzO1xuICAgIGxvZy5kZWJ1ZyhgQ2xlYW5pbmcgdXAgJHt1dGlsLnBsdXJhbGl6ZSgnYWN0aXZlIHNlc3Npb24nLCBzZXNzaW9uc0NvdW50LCB0cnVlKX1gKTtcbiAgICBjb25zdCBjbGVhbnVwUHJvbWlzZXMgPSBmb3JjZVxuICAgICAgPyBfLnZhbHVlcyh0aGlzLnNlc3Npb25zKS5tYXAoKGRydikgPT4gZHJ2LnN0YXJ0VW5leHBlY3RlZFNodXRkb3duKHJlYXNvbiAmJiBuZXcgRXJyb3IocmVhc29uKSkpXG4gICAgICA6IF8ua2V5cyh0aGlzLnNlc3Npb25zKS5tYXAoKGlkKSA9PiB0aGlzLmRlbGV0ZVNlc3Npb24oaWQpKTtcbiAgICBmb3IgKGNvbnN0IGNsZWFudXBQcm9taXNlIG9mIGNsZWFudXBQcm9taXNlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY2xlYW51cFByb21pc2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBleGVjdXRlQ29tbWFuZCAoY21kLCAuLi5hcmdzKSB7XG4gICAgLy8gZ2V0U3RhdHVzIGNvbW1hbmQgc2hvdWxkIG5vdCBiZSBwdXQgaW50byBxdWV1ZS4gSWYgd2UgZG8gaXQgYXMgcGFydCBvZiBzdXBlci5leGVjdXRlQ29tbWFuZCwgaXQgd2lsbCBiZSBhZGRlZCB0byBxdWV1ZS5cbiAgICAvLyBUaGVyZSB3aWxsIGJlIGxvdCBvZiBzdGF0dXMgY29tbWFuZHMgaW4gcXVldWUgZHVyaW5nIGNyZWF0ZVNlc3Npb24gY29tbWFuZCwgYXMgY3JlYXRlU2Vzc2lvbiBjYW4gdGFrZSB1cCB0byBvciBtb3JlIHRoYW4gYSBtaW51dGUuXG4gICAgaWYgKGNtZCA9PT0gJ2dldFN0YXR1cycpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIH1cblxuICAgIGlmIChpc0FwcGl1bURyaXZlckNvbW1hbmQoY21kKSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHN1cGVyLmV4ZWN1dGVDb21tYW5kKGNtZCwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2Vzc2lvbklkID0gXy5sYXN0KGFyZ3MpO1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSBhd2FpdCBzZXNzaW9uc0xpc3RHdWFyZC5hY3F1aXJlKEFwcGl1bURyaXZlci5uYW1lLCAoKSA9PiB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF0pO1xuICAgIGlmICghZHN0U2Vzc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgc2Vzc2lvbiB3aXRoIGlkICcke3Nlc3Npb25JZH0nIGRvZXMgbm90IGV4aXN0YCk7XG4gICAgfVxuXG4gICAgbGV0IHJlcyA9IHtcbiAgICAgIHByb3RvY29sOiBkc3RTZXNzaW9uLnByb3RvY29sXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICByZXMudmFsdWUgPSBhd2FpdCBkc3RTZXNzaW9uLmV4ZWN1dGVDb21tYW5kKGNtZCwgLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVzLmVycm9yID0gZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByb3h5QWN0aXZlIChzZXNzaW9uSWQpIHtcbiAgICBjb25zdCBkc3RTZXNzaW9uID0gdGhpcy5zZXNzaW9uc1tzZXNzaW9uSWRdO1xuICAgIHJldHVybiBkc3RTZXNzaW9uICYmIF8uaXNGdW5jdGlvbihkc3RTZXNzaW9uLnByb3h5QWN0aXZlKSAmJiBkc3RTZXNzaW9uLnByb3h5QWN0aXZlKHNlc3Npb25JZCk7XG4gIH1cblxuICBnZXRQcm94eUF2b2lkTGlzdCAoc2Vzc2lvbklkKSB7XG4gICAgY29uc3QgZHN0U2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXTtcbiAgICByZXR1cm4gZHN0U2Vzc2lvbiA/IGRzdFNlc3Npb24uZ2V0UHJveHlBdm9pZExpc3QoKSA6IFtdO1xuICB9XG5cbiAgY2FuUHJveHkgKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gJiYgZHN0U2Vzc2lvbi5jYW5Qcm94eShzZXNzaW9uSWQpO1xuICB9XG59XG5cbi8vIGhlbHAgZGVjaWRlIHdoaWNoIGNvbW1hbmRzIHNob3VsZCBiZSBwcm94aWVkIHRvIHN1Yi1kcml2ZXJzIGFuZCB3aGljaFxuLy8gc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhpcywgb3VyIHVtYnJlbGxhIGRyaXZlclxuZnVuY3Rpb24gaXNBcHBpdW1Ecml2ZXJDb21tYW5kIChjbWQpIHtcbiAgcmV0dXJuICFpc1Nlc3Npb25Db21tYW5kKGNtZCkgfHwgY21kID09PSAnZGVsZXRlU2Vzc2lvbic7XG59XG5cbmV4cG9ydCB7IEFwcGl1bURyaXZlciB9O1xuIl0sImZpbGUiOiJsaWIvYXBwaXVtLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
package/build/lib/main.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
5
|
-
|
|
6
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
7
5
|
|
|
8
6
|
Object.defineProperty(exports, "__esModule", {
|
|
@@ -34,6 +32,10 @@ var _gridRegister = _interopRequireDefault(require("./grid-register"));
|
|
|
34
32
|
|
|
35
33
|
var _utils = require("./utils");
|
|
36
34
|
|
|
35
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
36
|
+
|
|
37
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
38
|
+
|
|
37
39
|
async function preflightChecks(parser, args, throwInsteadOfExit = false) {
|
|
38
40
|
try {
|
|
39
41
|
(0, _config.checkNodeOk)();
|
|
@@ -217,4 +219,4 @@ if (require.main === module) {
|
|
|
217
219
|
}require('source-map-support').install();
|
|
218
220
|
|
|
219
221
|
|
|
220
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9tYWluLmpzIl0sIm5hbWVzIjpbInByZWZsaWdodENoZWNrcyIsInBhcnNlciIsImFyZ3MiLCJ0aHJvd0luc3RlYWRPZkV4aXQiLCJsb25nU3RhY2t0cmFjZSIsInJlcXVpcmUiLCJhc3luY190cmFjZV9saW1pdCIsInNob3dDb25maWciLCJwcm9jZXNzIiwiZXhpdCIsInRtcERpciIsImVyciIsImxvZ2dlciIsImVycm9yIiwibWVzc2FnZSIsInJlZCIsImxvZ0RlcHJlY2F0aW9uV2FybmluZyIsImRlcHJlY2F0ZWRBcmdzIiwid2FybiIsImFyZyIsInJlYWxBcmciLCJfIiwidG9QYWlycyIsImxvZ05vbkRlZmF1bHRBcmdzV2FybmluZyIsImluZm8iLCJsb2dEZWZhdWx0Q2FwYWJpbGl0aWVzV2FybmluZyIsImNhcHMiLCJsb2dTdGFydHVwSW5mbyIsIndlbGNvbWUiLCJBUFBJVU1fVkVSIiwiYXBwaXVtUmV2Iiwic2hvd0FyZ3MiLCJzaXplIiwiaXNFbXB0eSIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJsb2dTZXJ2ZXJQb3J0IiwiYWRkcmVzcyIsInBvcnQiLCJsb2dNZXNzYWdlIiwibWFpbiIsIk9iamVjdCIsImFzc2lnbiIsInBhcnNlX2FyZ3MiLCJsb2dGaWx0ZXJzIiwiaXNzdWVzIiwicnVsZXMiLCJsb2dGYWN0b3J5IiwibG9hZFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NpbmdSdWxlcyIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsInV0aWwiLCJwbHVyYWxpemUiLCJsZW5ndGgiLCJhcHBpdW1Ecml2ZXIiLCJBcHBpdW1Ecml2ZXIiLCJyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24iLCJzZXJ2ZXJPcHRzIiwiaG9zdG5hbWUiLCJhbGxvd0NvcnMiLCJiYXNlUGF0aCIsImtlZXBBbGl2ZVRpbWVvdXQiLCJzZXJ2ZXIiLCJub2RlY29uZmlnIiwiY2xvc2UiLCJzaWduYWwiLCJvbmNlIiwib25TaWduYWwiLCJkZWxldGVBbGxTZXNzaW9ucyIs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QWlCaUMsTUFBckIsRUFBNkI7QUFDM0IsMEJBQVNqQyxJQUFUO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG4vLyB0cmFuc3BpbGU6bWFpblxuXG5pbXBvcnQgeyBpbml0IGFzIGxvZ3NpbmtJbml0LCBjbGVhciBhcyBsb2dzaW5rQ2xlYXIgfSBmcm9tICcuL2xvZ3NpbmsnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7IC8vIGxvZ2dlciBuZWVkcyB0byByZW1haW4gZmlyc3Qgb2YgaW1wb3J0c1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHNlcnZlciBhcyBiYXNlU2VydmVyLCByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24gYXMgbWFrZVJvdXRlciB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBhc3luY2lmeSB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IGRlZmF1bHQgYXMgZ2V0UGFyc2VyLCBnZXREZWZhdWx0QXJncyB9IGZyb20gJy4vcGFyc2VyJztcbmltcG9ydCB7IGxvZ2dlciBhcyBsb2dGYWN0b3J5LCB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHtcbiAgc2hvd0NvbmZpZywgY2hlY2tOb2RlT2ssIHZhbGlkYXRlU2VydmVyQXJncyxcbiAgd2Fybk5vZGVEZXByZWNhdGlvbnMsIHZhbGlkYXRlVG1wRGlyLCBnZXROb25EZWZhdWx0QXJncyxcbiAgZ2V0RGVwcmVjYXRlZEFyZ3MsIGdldEdpdFJldiwgQVBQSVVNX1ZFUlxufSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBBcHBpdW1Ecml2ZXIgfSBmcm9tICcuL2FwcGl1bSc7XG5pbXBvcnQgcmVnaXN0ZXJOb2RlIGZyb20gJy4vZ3JpZC1yZWdpc3Rlcic7XG5pbXBvcnQgeyBpbnNwZWN0T2JqZWN0IH0gZnJvbSAnLi91dGlscyc7XG5cblxuYXN5bmMgZnVuY3Rpb24gcHJlZmxpZ2h0Q2hlY2tzIChwYXJzZXIsIGFyZ3MsIHRocm93SW5zdGVhZE9mRXhpdCA9IGZhbHNlKSB7XG4gIHRyeSB7XG4gICAgY2hlY2tOb2RlT2soKTtcbiAgICBpZiAoYXJncy5sb25nU3RhY2t0cmFjZSkge1xuICAgICAgcmVxdWlyZSgnbG9uZ2pvaG4nKS5hc3luY190cmFjZV9saW1pdCA9IC0xO1xuICAgIH1cbiAgICBpZiAoYXJncy5zaG93Q29uZmlnKSB7XG4gICAgICBhd2FpdCBzaG93Q29uZmlnKCk7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuICAgIHdhcm5Ob2RlRGVwcmVjYXRpb25zKCk7XG4gICAgdmFsaWRhdGVTZXJ2ZXJBcmdzKHBhcnNlciwgYXJncyk7XG4gICAgaWYgKGFyZ3MudG1wRGlyKSB7XG4gICAgICBhd2FpdCB2YWxpZGF0ZVRtcERpcihhcmdzLnRtcERpcik7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZXJyb3IoZXJyLm1lc3NhZ2UucmVkKTtcbiAgICBpZiAodGhyb3dJbnN0ZWFkT2ZFeGl0KSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxvZ0RlcHJlY2F0aW9uV2FybmluZyAoZGVwcmVjYXRlZEFyZ3MpIHtcbiAgbG9nZ2VyLndhcm4oJ0RlcHJlY2F0ZWQgc2VydmVyIGFyZ3M6Jyk7XG4gIGZvciAobGV0IFthcmcsIHJlYWxBcmddIG9mIF8udG9QYWlycyhkZXByZWNhdGVkQXJncykpIHtcbiAgICBsb2dnZXIud2FybihgICAke2FyZy5yZWR9ID0+ICR7cmVhbEFyZ31gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsb2dOb25EZWZhdWx0QXJnc1dhcm5pbmcgKGFyZ3MpIHtcbiAgbG9nZ2VyLmluZm8oJ05vbi1kZWZhdWx0IHNlcnZlciBhcmdzOicpO1xuICBpbnNwZWN0T2JqZWN0KGFyZ3MpO1xufVxuXG5mdW5jdGlvbiBsb2dEZWZhdWx0Q2FwYWJpbGl0aWVzV2FybmluZyAoY2Fwcykge1xuICBsb2dnZXIuaW5mbygnRGVmYXVsdCBjYXBhYmlsaXRpZXMsIHdoaWNoIHdpbGwgYmUgYWRkZWQgdG8gZWFjaCByZXF1ZXN0ICcgK1xuICAgICAgICAgICAgICAndW5sZXNzIG92ZXJyaWRkZW4gYnkgZGVzaXJlZCBjYXBhYmlsaXRpZXM6Jyk7XG4gIGluc3BlY3RPYmplY3QoY2Fwcyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvZ1N0YXJ0dXBJbmZvIChwYXJzZXIsIGFyZ3MpIHtcbiAgbGV0IHdlbGNvbWUgPSBgV2VsY29tZSB0byBBcHBpdW0gdiR7QVBQSVVNX1ZFUn1gO1xuICBsZXQgYXBwaXVtUmV2ID0gYXdhaXQgZ2V0R2l0UmV2KCk7XG4gIGlmIChhcHBpdW1SZXYpIHtcbiAgICB3ZWxjb21lICs9IGAgKFJFViAke2FwcGl1bVJldn0pYDtcbiAgfVxuICBsb2dnZXIuaW5mbyh3ZWxjb21lKTtcblxuICBsZXQgc2hvd0FyZ3MgPSBnZXROb25EZWZhdWx0QXJncyhwYXJzZXIsIGFyZ3MpO1xuICBpZiAoXy5zaXplKHNob3dBcmdzKSkge1xuICAgIGxvZ05vbkRlZmF1bHRBcmdzV2FybmluZyhzaG93QXJncyk7XG4gIH1cbiAgbGV0IGRlcHJlY2F0ZWRBcmdzID0gZ2V0RGVwcmVjYXRlZEFyZ3MocGFyc2VyLCBhcmdzKTtcbiAgaWYgKF8uc2l6ZShkZXByZWNhdGVkQXJncykpIHtcbiAgICBsb2dEZXByZWNhdGlvbldhcm5pbmcoZGVwcmVjYXRlZEFyZ3MpO1xuICB9XG4gIGlmICghXy5pc0VtcHR5KGFyZ3MuZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICBsb2dEZWZhdWx0Q2FwYWJpbGl0aWVzV2FybmluZyhhcmdzLmRlZmF1bHRDYXBhYmlsaXRpZXMpO1xuICB9XG4gIC8vIFRPRE86IGJyaW5nIGJhY2sgbG9nbGV2ZWwgcmVwb3J0aW5nIGJlbG93IG9uY2UgbG9nZ2VyIGlzIGZsdXNoZWQgb3V0XG4gIC8vIGxvZ2dlci5pbmZvKCdDb25zb2xlIExvZ0xldmVsOiAnICsgbG9nZ2VyLnRyYW5zcG9ydHMuY29uc29sZS5sZXZlbCk7XG4gIC8vIGlmIChsb2dnZXIudHJhbnNwb3J0cy5maWxlKSB7XG4gIC8vICAgbG9nZ2VyLmluZm8oJ0ZpbGUgTG9nTGV2ZWw6ICcgKyBsb2dnZXIudHJhbnNwb3J0cy5maWxlLmxldmVsKTtcbiAgLy8gfVxufVxuXG5mdW5jdGlvbiBsb2dTZXJ2ZXJQb3J0IChhZGRyZXNzLCBwb3J0KSB7XG4gIGxldCBsb2dNZXNzYWdlID0gYEFwcGl1bSBSRVNUIGh0dHAgaW50ZXJmYWNlIGxpc3RlbmVyIHN0YXJ0ZWQgb24gYCArXG4gICAgICAgICAgICAgICAgICAgYCR7YWRkcmVzc306JHtwb3J0fWA7XG4gIGxvZ2dlci5pbmZvKGxvZ01lc3NhZ2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtYWluIChhcmdzID0gbnVsbCkge1xuICBsZXQgcGFyc2VyID0gZ2V0UGFyc2VyKCk7XG4gIGxldCB0aHJvd0luc3RlYWRPZkV4aXQgPSBmYWxzZTtcbiAgaWYgKGFyZ3MpIHtcbiAgICAvLyBhIGNvbnRhaW5pbmcgcGFja2FnZSBwYXNzZWQgaW4gdGhlaXIgb3duIGFyZ3MsIGxldCdzIGZpbGwgdGhlbSBvdXRcbiAgICAvLyB3aXRoIGRlZmF1bHRzXG4gICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGdldERlZmF1bHRBcmdzKCksIGFyZ3MpO1xuXG4gICAgLy8gaWYgd2UgaGF2ZSBhIGNvbnRhaW5pbmcgcGFja2FnZSBpbnN0ZWFkIG9mIHJ1bm5pbmcgYXMgYSBDTEkgcHJvY2VzcyxcbiAgICAvLyB0aGF0IHBhY2thZ2UgbWlnaHQgbm90IGFwcHJlY2lhdGUgdXMgY2FsbGluZyAncHJvY2Vzcy5leGl0JyB3aWxseS1cbiAgICAvLyBuaWxseSwgc28gZ2l2ZSBpdCB0aGUgb3B0aW9uIHRvIGhhdmUgdXMgdGhyb3cgaW5zdGVhZCBvZiBleGl0XG4gICAgaWYgKGFyZ3MudGhyb3dJbnN0ZWFkT2ZFeGl0KSB7XG4gICAgICB0aHJvd0luc3RlYWRPZkV4aXQgPSB0cnVlO1xuICAgICAgLy8gYnV0IHJlbW92ZSBpdCBzaW5jZSBpdCdzIG5vdCBhIHJlYWwgc2VydmVyIGFyZyBwZXIgc2VcbiAgICAgIGRlbGV0ZSBhcmdzLnRocm93SW5zdGVhZE9mRXhpdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gb3RoZXJ3aXNlIHBhcnNlIGZyb20gQ0xJXG4gICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCk7XG4gIH1cbiAgYXdhaXQgbG9nc2lua0luaXQoYXJncyk7XG4gIGlmIChhcmdzLmxvZ0ZpbHRlcnMpIHtcbiAgICBjb25zdCB7aXNzdWVzLCBydWxlc30gPSBhd2FpdCBsb2dGYWN0b3J5LmxvYWRTZWN1cmVWYWx1ZXNQcmVwcm9jZXNzaW5nUnVsZXMoYXJncy5sb2dGaWx0ZXJzKTtcbiAgICBpZiAoIV8uaXNFbXB0eShpc3N1ZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBsb2cgZmlsdGVyaW5nIHJ1bGVzIGNvbmZpZyAnJHthcmdzLmxvZ0ZpbHRlcnN9JyBoYXMgaXNzdWVzOiBgICtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoaXNzdWVzLCBudWxsLCAyKSk7XG4gICAgfVxuICAgIGlmIChfLmlzRW1wdHkocnVsZXMpKSB7XG4gICAgICBsb2dnZXIud2FybihgRm91bmQgbm8gbG9nIGZpbHRlcmluZyBydWxlcyBpbiAnJHthcmdzLmxvZ0ZpbHRlcnN9Jy4gSXMgdGhhdCBleHBlY3RlZD9gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmluZm8oYExvYWRlZCAke3V0aWwucGx1cmFsaXplKCdmaWx0ZXJpbmcgcnVsZScsIHJ1bGVzLmxlbmd0aCwgdHJ1ZSl9IGZyb20gJyR7YXJncy5sb2dGaWx0ZXJzfSdgKTtcbiAgICB9XG4gIH1cbiAgYXdhaXQgcHJlZmxpZ2h0Q2hlY2tzKHBhcnNlciwgYXJncywgdGhyb3dJbnN0ZWFkT2ZFeGl0KTtcbiAgYXdhaXQgbG9nU3RhcnR1cEluZm8ocGFyc2VyLCBhcmdzKTtcbiAgbGV0IGFwcGl1bURyaXZlciA9IG5ldyBBcHBpdW1Ecml2ZXIoYXJncyk7XG4gIGxldCByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24gPSBtYWtlUm91dGVyKGFwcGl1bURyaXZlcik7XG4gIGNvbnN0IHNlcnZlck9wdHMgPSB7XG4gICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLFxuICAgIHBvcnQ6IGFyZ3MucG9ydCxcbiAgICBob3N0bmFtZTogYXJncy5hZGRyZXNzLFxuICAgIGFsbG93Q29yczogYXJncy5hbGxvd0NvcnMsXG4gICAgYmFzZVBhdGg6IGFyZ3MuYmFzZVBhdGgsXG4gIH07XG4gIGlmIChhcmdzLmtlZXBBbGl2ZVRpbWVvdXQpIHtcbiAgICBzZXJ2ZXJPcHRzLmtlZXBBbGl2ZVRpbWVvdXQgPSBhcmdzLmtlZXBBbGl2ZVRpbWVvdXQgKiAxMDAwO1xuICB9XG4gIGxldCBzZXJ2ZXIgPSBhd2FpdCBiYXNlU2VydmVyKHNlcnZlck9wdHMpO1xuICBpZiAoYXJncy5hbGxvd0NvcnMpIHtcbiAgICBsb2dnZXIud2FybignWW91IGhhdmUgZW5hYmxlZCBDT1JTIHJlcXVlc3RzIGZyb20gYW55IGhvc3QuIEJlIGNhcmVmdWwgbm90ICcgK1xuICAgICAgICAgICAgICAgICd0byB2aXNpdCBzaXRlcyB3aGljaCBjb3VsZCBtYWxpY2lvdXNseSB0cnkgdG8gc3RhcnQgQXBwaXVtICcgK1xuICAgICAgICAgICAgICAgICdzZXNzaW9ucyBvbiB5b3VyIG1hY2hpbmUnKTtcbiAgfVxuICBhcHBpdW1Ecml2ZXIuc2VydmVyID0gc2VydmVyO1xuICB0cnkge1xuICAgIC8vIFRPRE8gcHJlbGF1bmNoIGlmIGFyZ3MubGF1bmNoIGlzIHNldFxuICAgIC8vIFRPRE86IHN0YXJ0QWxlcnRTb2NrZXQoc2VydmVyLCBhcHBpdW1TZXJ2ZXIpO1xuXG4gICAgLy8gY29uZmlndXJlIGFzIG5vZGUgb24gZ3JpZCwgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKGFyZ3Mubm9kZWNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgYXdhaXQgcmVnaXN0ZXJOb2RlKGFyZ3Mubm9kZWNvbmZpZywgYXJncy5hZGRyZXNzLCBhcmdzLnBvcnQpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgYXdhaXQgc2VydmVyLmNsb3NlKCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgWydTSUdJTlQnLCAnU0lHVEVSTSddKSB7XG4gICAgcHJvY2Vzcy5vbmNlKHNpZ25hbCwgYXN5bmMgZnVuY3Rpb24gb25TaWduYWwgKCkge1xuICAgICAgbG9nZ2VyLmluZm8oYFJlY2VpdmVkICR7c2lnbmFsfSAtIHNodXR0aW5nIGRvd25gKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYXBwaXVtRHJpdmVyLmRlbGV0ZUFsbFNlc3Npb25zKHtcbiAgICAgICAgICAgIGZvcmNlOiB0cnVlLFxuICAgICAgICAgICAgcmVhc29uOiBgVGhlIHByb2Nlc3MgaGFzIHJlY2VpdmVkICR7c2lnbmFsfSBzaWduYWxgLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxvZ3NpbmtDbGVhcigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGF3YWl0IHNlcnZlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGUubWVzc2FnZSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGxvZ1NlcnZlclBvcnQoYXJncy5hZGRyZXNzLCBhcmdzLnBvcnQpO1xuXG4gIHJldHVybiBzZXJ2ZXI7XG59XG5cbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBhc3luY2lmeShtYWluKTtcbn1cblxuZXhwb3J0IHsgbWFpbiB9O1xuIl0sImZpbGUiOiJsaWIvbWFpbi5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
222
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9tYWluLmpzIl0sIm5hbWVzIjpbInByZWZsaWdodENoZWNrcyIsInBhcnNlciIsImFyZ3MiLCJ0aHJvd0luc3RlYWRPZkV4aXQiLCJsb25nU3RhY2t0cmFjZSIsInJlcXVpcmUiLCJhc3luY190cmFjZV9saW1pdCIsInNob3dDb25maWciLCJwcm9jZXNzIiwiZXhpdCIsInRtcERpciIsImVyciIsImxvZ2dlciIsImVycm9yIiwibWVzc2FnZSIsInJlZCIsImxvZ0RlcHJlY2F0aW9uV2FybmluZyIsImRlcHJlY2F0ZWRBcmdzIiwid2FybiIsImFyZyIsInJlYWxBcmciLCJfIiwidG9QYWlycyIsImxvZ05vbkRlZmF1bHRBcmdzV2FybmluZyIsImluZm8iLCJsb2dEZWZhdWx0Q2FwYWJpbGl0aWVzV2FybmluZyIsImNhcHMiLCJsb2dTdGFydHVwSW5mbyIsIndlbGNvbWUiLCJBUFBJVU1fVkVSIiwiYXBwaXVtUmV2Iiwic2hvd0FyZ3MiLCJzaXplIiwiaXNFbXB0eSIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJsb2dTZXJ2ZXJQb3J0IiwiYWRkcmVzcyIsInBvcnQiLCJsb2dNZXNzYWdlIiwibWFpbiIsIk9iamVjdCIsImFzc2lnbiIsInBhcnNlX2FyZ3MiLCJsb2dGaWx0ZXJzIiwiaXNzdWVzIiwicnVsZXMiLCJsb2dGYWN0b3J5IiwibG9hZFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NpbmdSdWxlcyIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsInV0aWwiLCJwbHVyYWxpemUiLCJsZW5ndGgiLCJhcHBpdW1Ecml2ZXIiLCJBcHBpdW1Ecml2ZXIiLCJyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24iLCJzZXJ2ZXJPcHRzIiwiaG9zdG5hbWUiLCJhbGxvd0NvcnMiLCJiYXNlUGF0aCIsImtlZXBBbGl2ZVRpbWVvdXQiLCJzZXJ2ZXIiLCJub2RlY29uZmlnIiwiY2xvc2UiLCJzaWduYWwiLCJvbmNlIiwib25TaWduYWwiLCJkZWxldGVBbGxTZXNzaW9ucyIs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S0FBaUJpQyxNQUFyQixFQUE2QjtBQUMzQiwwQkFBU2pDLElBQVQ7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbi8vIHRyYW5zcGlsZTptYWluXG5cbmltcG9ydCB7IGluaXQgYXMgbG9nc2lua0luaXQsIGNsZWFyIGFzIGxvZ3NpbmtDbGVhciB9IGZyb20gJy4vbG9nc2luayc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJzsgLy8gbG9nZ2VyIG5lZWRzIHRvIHJlbWFpbiBmaXJzdCBvZiBpbXBvcnRzXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgc2VydmVyIGFzIGJhc2VTZXJ2ZXIsIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiBhcyBtYWtlUm91dGVyIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCB7IGFzeW5jaWZ5IH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBnZXRQYXJzZXIsIGdldERlZmF1bHRBcmdzIH0gZnJvbSAnLi9wYXJzZXInO1xuaW1wb3J0IHsgbG9nZ2VyIGFzIGxvZ0ZhY3RvcnksIHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQge1xuICBzaG93Q29uZmlnLCBjaGVja05vZGVPaywgdmFsaWRhdGVTZXJ2ZXJBcmdzLFxuICB3YXJuTm9kZURlcHJlY2F0aW9ucywgdmFsaWRhdGVUbXBEaXIsIGdldE5vbkRlZmF1bHRBcmdzLFxuICBnZXREZXByZWNhdGVkQXJncywgZ2V0R2l0UmV2LCBBUFBJVU1fVkVSXG59IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IEFwcGl1bURyaXZlciB9IGZyb20gJy4vYXBwaXVtJztcbmltcG9ydCByZWdpc3Rlck5vZGUgZnJvbSAnLi9ncmlkLXJlZ2lzdGVyJztcbmltcG9ydCB7IGluc3BlY3RPYmplY3QgfSBmcm9tICcuL3V0aWxzJztcblxuXG5hc3luYyBmdW5jdGlvbiBwcmVmbGlnaHRDaGVja3MgKHBhcnNlciwgYXJncywgdGhyb3dJbnN0ZWFkT2ZFeGl0ID0gZmFsc2UpIHtcbiAgdHJ5IHtcbiAgICBjaGVja05vZGVPaygpO1xuICAgIGlmIChhcmdzLmxvbmdTdGFja3RyYWNlKSB7XG4gICAgICByZXF1aXJlKCdsb25nam9obicpLmFzeW5jX3RyYWNlX2xpbWl0ID0gLTE7XG4gICAgfVxuICAgIGlmIChhcmdzLnNob3dDb25maWcpIHtcbiAgICAgIGF3YWl0IHNob3dDb25maWcoKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG4gICAgd2Fybk5vZGVEZXByZWNhdGlvbnMoKTtcbiAgICB2YWxpZGF0ZVNlcnZlckFyZ3MocGFyc2VyLCBhcmdzKTtcbiAgICBpZiAoYXJncy50bXBEaXIpIHtcbiAgICAgIGF3YWl0IHZhbGlkYXRlVG1wRGlyKGFyZ3MudG1wRGlyKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcihlcnIubWVzc2FnZS5yZWQpO1xuICAgIGlmICh0aHJvd0luc3RlYWRPZkV4aXQpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbG9nRGVwcmVjYXRpb25XYXJuaW5nIChkZXByZWNhdGVkQXJncykge1xuICBsb2dnZXIud2FybignRGVwcmVjYXRlZCBzZXJ2ZXIgYXJnczonKTtcbiAgZm9yIChsZXQgW2FyZywgcmVhbEFyZ10gb2YgXy50b1BhaXJzKGRlcHJlY2F0ZWRBcmdzKSkge1xuICAgIGxvZ2dlci53YXJuKGAgICR7YXJnLnJlZH0gPT4gJHtyZWFsQXJnfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxvZ05vbkRlZmF1bHRBcmdzV2FybmluZyAoYXJncykge1xuICBsb2dnZXIuaW5mbygnTm9uLWRlZmF1bHQgc2VydmVyIGFyZ3M6Jyk7XG4gIGluc3BlY3RPYmplY3QoYXJncyk7XG59XG5cbmZ1bmN0aW9uIGxvZ0RlZmF1bHRDYXBhYmlsaXRpZXNXYXJuaW5nIChjYXBzKSB7XG4gIGxvZ2dlci5pbmZvKCdEZWZhdWx0IGNhcGFiaWxpdGllcywgd2hpY2ggd2lsbCBiZSBhZGRlZCB0byBlYWNoIHJlcXVlc3QgJyArXG4gICAgICAgICAgICAgICd1bmxlc3Mgb3ZlcnJpZGRlbiBieSBkZXNpcmVkIGNhcGFiaWxpdGllczonKTtcbiAgaW5zcGVjdE9iamVjdChjYXBzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9nU3RhcnR1cEluZm8gKHBhcnNlciwgYXJncykge1xuICBsZXQgd2VsY29tZSA9IGBXZWxjb21lIHRvIEFwcGl1bSB2JHtBUFBJVU1fVkVSfWA7XG4gIGxldCBhcHBpdW1SZXYgPSBhd2FpdCBnZXRHaXRSZXYoKTtcbiAgaWYgKGFwcGl1bVJldikge1xuICAgIHdlbGNvbWUgKz0gYCAoUkVWICR7YXBwaXVtUmV2fSlgO1xuICB9XG4gIGxvZ2dlci5pbmZvKHdlbGNvbWUpO1xuXG4gIGxldCBzaG93QXJncyA9IGdldE5vbkRlZmF1bHRBcmdzKHBhcnNlciwgYXJncyk7XG4gIGlmIChfLnNpemUoc2hvd0FyZ3MpKSB7XG4gICAgbG9nTm9uRGVmYXVsdEFyZ3NXYXJuaW5nKHNob3dBcmdzKTtcbiAgfVxuICBsZXQgZGVwcmVjYXRlZEFyZ3MgPSBnZXREZXByZWNhdGVkQXJncyhwYXJzZXIsIGFyZ3MpO1xuICBpZiAoXy5zaXplKGRlcHJlY2F0ZWRBcmdzKSkge1xuICAgIGxvZ0RlcHJlY2F0aW9uV2FybmluZyhkZXByZWNhdGVkQXJncyk7XG4gIH1cbiAgaWYgKCFfLmlzRW1wdHkoYXJncy5kZWZhdWx0Q2FwYWJpbGl0aWVzKSkge1xuICAgIGxvZ0RlZmF1bHRDYXBhYmlsaXRpZXNXYXJuaW5nKGFyZ3MuZGVmYXVsdENhcGFiaWxpdGllcyk7XG4gIH1cbiAgLy8gVE9ETzogYnJpbmcgYmFjayBsb2dsZXZlbCByZXBvcnRpbmcgYmVsb3cgb25jZSBsb2dnZXIgaXMgZmx1c2hlZCBvdXRcbiAgLy8gbG9nZ2VyLmluZm8oJ0NvbnNvbGUgTG9nTGV2ZWw6ICcgKyBsb2dnZXIudHJhbnNwb3J0cy5jb25zb2xlLmxldmVsKTtcbiAgLy8gaWYgKGxvZ2dlci50cmFuc3BvcnRzLmZpbGUpIHtcbiAgLy8gICBsb2dnZXIuaW5mbygnRmlsZSBMb2dMZXZlbDogJyArIGxvZ2dlci50cmFuc3BvcnRzLmZpbGUubGV2ZWwpO1xuICAvLyB9XG59XG5cbmZ1bmN0aW9uIGxvZ1NlcnZlclBvcnQgKGFkZHJlc3MsIHBvcnQpIHtcbiAgbGV0IGxvZ01lc3NhZ2UgPSBgQXBwaXVtIFJFU1QgaHR0cCBpbnRlcmZhY2UgbGlzdGVuZXIgc3RhcnRlZCBvbiBgICtcbiAgICAgICAgICAgICAgICAgICBgJHthZGRyZXNzfToke3BvcnR9YDtcbiAgbG9nZ2VyLmluZm8obG9nTWVzc2FnZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4gKGFyZ3MgPSBudWxsKSB7XG4gIGxldCBwYXJzZXIgPSBnZXRQYXJzZXIoKTtcbiAgbGV0IHRocm93SW5zdGVhZE9mRXhpdCA9IGZhbHNlO1xuICBpZiAoYXJncykge1xuICAgIC8vIGEgY29udGFpbmluZyBwYWNrYWdlIHBhc3NlZCBpbiB0aGVpciBvd24gYXJncywgbGV0J3MgZmlsbCB0aGVtIG91dFxuICAgIC8vIHdpdGggZGVmYXVsdHNcbiAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZ2V0RGVmYXVsdEFyZ3MoKSwgYXJncyk7XG5cbiAgICAvLyBpZiB3ZSBoYXZlIGEgY29udGFpbmluZyBwYWNrYWdlIGluc3RlYWQgb2YgcnVubmluZyBhcyBhIENMSSBwcm9jZXNzLFxuICAgIC8vIHRoYXQgcGFja2FnZSBtaWdodCBub3QgYXBwcmVjaWF0ZSB1cyBjYWxsaW5nICdwcm9jZXNzLmV4aXQnIHdpbGx5LVxuICAgIC8vIG5pbGx5LCBzbyBnaXZlIGl0IHRoZSBvcHRpb24gdG8gaGF2ZSB1cyB0aHJvdyBpbnN0ZWFkIG9mIGV4aXRcbiAgICBpZiAoYXJncy50aHJvd0luc3RlYWRPZkV4aXQpIHtcbiAgICAgIHRocm93SW5zdGVhZE9mRXhpdCA9IHRydWU7XG4gICAgICAvLyBidXQgcmVtb3ZlIGl0IHNpbmNlIGl0J3Mgbm90IGEgcmVhbCBzZXJ2ZXIgYXJnIHBlciBzZVxuICAgICAgZGVsZXRlIGFyZ3MudGhyb3dJbnN0ZWFkT2ZFeGl0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBvdGhlcndpc2UgcGFyc2UgZnJvbSBDTElcbiAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKTtcbiAgfVxuICBhd2FpdCBsb2dzaW5rSW5pdChhcmdzKTtcbiAgaWYgKGFyZ3MubG9nRmlsdGVycykge1xuICAgIGNvbnN0IHtpc3N1ZXMsIHJ1bGVzfSA9IGF3YWl0IGxvZ0ZhY3RvcnkubG9hZFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NpbmdSdWxlcyhhcmdzLmxvZ0ZpbHRlcnMpO1xuICAgIGlmICghXy5pc0VtcHR5KGlzc3VlcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGxvZyBmaWx0ZXJpbmcgcnVsZXMgY29uZmlnICcke2FyZ3MubG9nRmlsdGVyc30nIGhhcyBpc3N1ZXM6IGAgK1xuICAgICAgICBKU09OLnN0cmluZ2lmeShpc3N1ZXMsIG51bGwsIDIpKTtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eShydWxlcykpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBGb3VuZCBubyBsb2cgZmlsdGVyaW5nIHJ1bGVzIGluICcke2FyZ3MubG9nRmlsdGVyc30nLiBJcyB0aGF0IGV4cGVjdGVkP2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuaW5mbyhgTG9hZGVkICR7dXRpbC5wbHVyYWxpemUoJ2ZpbHRlcmluZyBydWxlJywgcnVsZXMubGVuZ3RoLCB0cnVlKX0gZnJvbSAnJHthcmdzLmxvZ0ZpbHRlcnN9J2ApO1xuICAgIH1cbiAgfVxuICBhd2FpdCBwcmVmbGlnaHRDaGVja3MocGFyc2VyLCBhcmdzLCB0aHJvd0luc3RlYWRPZkV4aXQpO1xuICBhd2FpdCBsb2dTdGFydHVwSW5mbyhwYXJzZXIsIGFyZ3MpO1xuICBsZXQgYXBwaXVtRHJpdmVyID0gbmV3IEFwcGl1bURyaXZlcihhcmdzKTtcbiAgbGV0IHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiA9IG1ha2VSb3V0ZXIoYXBwaXVtRHJpdmVyKTtcbiAgY29uc3Qgc2VydmVyT3B0cyA9IHtcbiAgICByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24sXG4gICAgcG9ydDogYXJncy5wb3J0LFxuICAgIGhvc3RuYW1lOiBhcmdzLmFkZHJlc3MsXG4gICAgYWxsb3dDb3JzOiBhcmdzLmFsbG93Q29ycyxcbiAgICBiYXNlUGF0aDogYXJncy5iYXNlUGF0aCxcbiAgfTtcbiAgaWYgKGFyZ3Mua2VlcEFsaXZlVGltZW91dCkge1xuICAgIHNlcnZlck9wdHMua2VlcEFsaXZlVGltZW91dCA9IGFyZ3Mua2VlcEFsaXZlVGltZW91dCAqIDEwMDA7XG4gIH1cbiAgbGV0IHNlcnZlciA9IGF3YWl0IGJhc2VTZXJ2ZXIoc2VydmVyT3B0cyk7XG4gIGlmIChhcmdzLmFsbG93Q29ycykge1xuICAgIGxvZ2dlci53YXJuKCdZb3UgaGF2ZSBlbmFibGVkIENPUlMgcmVxdWVzdHMgZnJvbSBhbnkgaG9zdC4gQmUgY2FyZWZ1bCBub3QgJyArXG4gICAgICAgICAgICAgICAgJ3RvIHZpc2l0IHNpdGVzIHdoaWNoIGNvdWxkIG1hbGljaW91c2x5IHRyeSB0byBzdGFydCBBcHBpdW0gJyArXG4gICAgICAgICAgICAgICAgJ3Nlc3Npb25zIG9uIHlvdXIgbWFjaGluZScpO1xuICB9XG4gIGFwcGl1bURyaXZlci5zZXJ2ZXIgPSBzZXJ2ZXI7XG4gIHRyeSB7XG4gICAgLy8gVE9ETyBwcmVsYXVuY2ggaWYgYXJncy5sYXVuY2ggaXMgc2V0XG4gICAgLy8gVE9ETzogc3RhcnRBbGVydFNvY2tldChzZXJ2ZXIsIGFwcGl1bVNlcnZlcik7XG5cbiAgICAvLyBjb25maWd1cmUgYXMgbm9kZSBvbiBncmlkLCBpZiBuZWNlc3NhcnlcbiAgICBpZiAoYXJncy5ub2RlY29uZmlnICE9PSBudWxsKSB7XG4gICAgICBhd2FpdCByZWdpc3Rlck5vZGUoYXJncy5ub2RlY29uZmlnLCBhcmdzLmFkZHJlc3MsIGFyZ3MucG9ydCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBhd2FpdCBzZXJ2ZXIuY2xvc2UoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cblxuICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBbJ1NJR0lOVCcsICdTSUdURVJNJ10pIHtcbiAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCBhc3luYyBmdW5jdGlvbiBvblNpZ25hbCAoKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgUmVjZWl2ZWQgJHtzaWduYWx9IC0gc2h1dHRpbmcgZG93bmApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBhcHBpdW1Ecml2ZXIuZGVsZXRlQWxsU2Vzc2lvbnMoe1xuICAgICAgICAgICAgZm9yY2U6IHRydWUsXG4gICAgICAgICAgICByZWFzb246IGBUaGUgcHJvY2VzcyBoYXMgcmVjZWl2ZWQgJHtzaWduYWx9IHNpZ25hbGAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbG9nc2lua0NsZWFyKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgYXdhaXQgc2VydmVyLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9nU2VydmVyUG9ydChhcmdzLmFkZHJlc3MsIGFyZ3MucG9ydCk7XG5cbiAgcmV0dXJuIHNlcnZlcjtcbn1cblxuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIGFzeW5jaWZ5KG1haW4pO1xufVxuXG5leHBvcnQgeyBtYWluIH07XG4iXSwiZmlsZSI6ImxpYi9tYWluLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
package/lib/appium.js
CHANGED
|
@@ -20,7 +20,8 @@ const PLATFORMS = {
|
|
|
20
20
|
MAC: 'mac',
|
|
21
21
|
TIZEN: 'tizen',
|
|
22
22
|
LINUX: 'linux',
|
|
23
|
-
ROKU: 'roku'
|
|
23
|
+
ROKU: 'roku',
|
|
24
|
+
WEBOS: 'webos'
|
|
24
25
|
};
|
|
25
26
|
|
|
26
27
|
const AUTOMATION_NAMES = {
|
|
@@ -40,6 +41,7 @@ const AUTOMATION_NAMES = {
|
|
|
40
41
|
SAFARI: 'Safari',
|
|
41
42
|
GECKO: 'Gecko',
|
|
42
43
|
ROKU: 'Roku',
|
|
44
|
+
WEBOS: 'WebOS'
|
|
43
45
|
};
|
|
44
46
|
const DRIVER_MAP = {
|
|
45
47
|
[AUTOMATION_NAMES.UIAUTOMATOR2.toLowerCase()]: {
|
|
@@ -102,6 +104,10 @@ const DRIVER_MAP = {
|
|
|
102
104
|
driverClassName: 'RokuDriver',
|
|
103
105
|
driverPackage: 'appium-roku-driver'
|
|
104
106
|
},
|
|
107
|
+
[AUTOMATION_NAMES.WEBOS.toLowerCase()]: {
|
|
108
|
+
driverClassName: 'WebOSDriver',
|
|
109
|
+
driverPackage: 'appium-webos-driver'
|
|
110
|
+
},
|
|
105
111
|
};
|
|
106
112
|
|
|
107
113
|
const PLATFORMS_MAP = {
|
|
@@ -153,6 +159,7 @@ const PLATFORMS_MAP = {
|
|
|
153
159
|
[PLATFORMS.TIZEN]: () => AUTOMATION_NAMES.TIZEN,
|
|
154
160
|
[PLATFORMS.LINUX]: () => AUTOMATION_NAMES.GECKO,
|
|
155
161
|
[PLATFORMS.ROKU]: () => AUTOMATION_NAMES.ROKU,
|
|
162
|
+
[PLATFORMS.WEBOS]: () => AUTOMATION_NAMES.WEBOS
|
|
156
163
|
};
|
|
157
164
|
|
|
158
165
|
const desiredCapabilityConstraints = {
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium",
|
|
3
|
-
"version": "1.21.0
|
|
3
|
+
"version": "1.21.0",
|
|
4
4
|
"lockfileVersion": 1,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"dependencies": {
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
"@babel/runtime": {
|
|
27
|
-
"version": "7.13.
|
|
28
|
-
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.
|
|
29
|
-
"integrity": "sha512-
|
|
27
|
+
"version": "7.13.17",
|
|
28
|
+
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.17.tgz",
|
|
29
|
+
"integrity": "sha512-NCdgJEelPTSh+FEFylhnP1ylq848l1z9t9N0j1Lfbcw0+KXGjsTvUmkxy+voLLXB5SOKMbLLx4jxYliGrYQseA==",
|
|
30
30
|
"requires": {
|
|
31
31
|
"regenerator-runtime": "^0.13.4"
|
|
32
32
|
}
|
|
@@ -623,9 +623,9 @@
|
|
|
623
623
|
"integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg=="
|
|
624
624
|
},
|
|
625
625
|
"appium-adb": {
|
|
626
|
-
"version": "8.12.
|
|
627
|
-
"resolved": "https://registry.npmjs.org/appium-adb/-/appium-adb-8.12.
|
|
628
|
-
"integrity": "sha512-
|
|
626
|
+
"version": "8.12.3",
|
|
627
|
+
"resolved": "https://registry.npmjs.org/appium-adb/-/appium-adb-8.12.3.tgz",
|
|
628
|
+
"integrity": "sha512-sHfCOuaxH8g/n/DmIfrSEE6lalVB1aqPQmJB2Nnq54NMLEb4MIlr5eI2Rt0Xx/LtkN/SWDtLwS6LyEyBUlECzA==",
|
|
629
629
|
"requires": {
|
|
630
630
|
"@babel/runtime": "^7.0.0",
|
|
631
631
|
"adbkit-apkreader": "^3.1.2",
|
|
@@ -643,9 +643,9 @@
|
|
|
643
643
|
}
|
|
644
644
|
},
|
|
645
645
|
"appium-android-driver": {
|
|
646
|
-
"version": "4.43.
|
|
647
|
-
"resolved": "https://registry.npmjs.org/appium-android-driver/-/appium-android-driver-4.43.
|
|
648
|
-
"integrity": "sha512-
|
|
646
|
+
"version": "4.43.1",
|
|
647
|
+
"resolved": "https://registry.npmjs.org/appium-android-driver/-/appium-android-driver-4.43.1.tgz",
|
|
648
|
+
"integrity": "sha512-mv/UqVyQCvRcxq7vk851Quc9xuVXO/y1epcav30B/xztpQArFiZVuACxAdkGSr6EfKh4nCguIe+bZ2dtBrj4NA==",
|
|
649
649
|
"requires": {
|
|
650
650
|
"@babel/runtime": "^7.0.0",
|
|
651
651
|
"appium-adb": "^8.11.0",
|
|
@@ -721,9 +721,9 @@
|
|
|
721
721
|
}
|
|
722
722
|
},
|
|
723
723
|
"appium-espresso-driver": {
|
|
724
|
-
"version": "1.
|
|
725
|
-
"resolved": "https://registry.npmjs.org/appium-espresso-driver/-/appium-espresso-driver-1.
|
|
726
|
-
"integrity": "sha512-
|
|
724
|
+
"version": "1.44.0",
|
|
725
|
+
"resolved": "https://registry.npmjs.org/appium-espresso-driver/-/appium-espresso-driver-1.44.0.tgz",
|
|
726
|
+
"integrity": "sha512-yqWTpNOacUU6h9AtIwPAxAM2wJKoogWQ2Fz+CdbDMi7HykDpfRBHAW5wECUVGxSeJnVVTyE4EqDe7u3DqjzgMA==",
|
|
727
727
|
"requires": {
|
|
728
728
|
"@babel/runtime": "^7.4.3",
|
|
729
729
|
"appium-adb": "^8.9.0",
|
|
@@ -1321,14 +1321,15 @@
|
|
|
1321
1321
|
}
|
|
1322
1322
|
},
|
|
1323
1323
|
"appium-mac2-driver": {
|
|
1324
|
-
"version": "0.
|
|
1325
|
-
"resolved": "https://registry.npmjs.org/appium-mac2-driver/-/appium-mac2-driver-0.
|
|
1326
|
-
"integrity": "sha512-
|
|
1324
|
+
"version": "0.13.0",
|
|
1325
|
+
"resolved": "https://registry.npmjs.org/appium-mac2-driver/-/appium-mac2-driver-0.13.0.tgz",
|
|
1326
|
+
"integrity": "sha512-a3qgH8kGOOGIJ5MM9sDEiPIBbLLmrX8VZEjY03rN6ouXKZNXjEo3LpPCliV5tIjVBdEL72cKX8oaTT/0YBbBqw==",
|
|
1327
1327
|
"requires": {
|
|
1328
1328
|
"@babel/runtime": "^7.0.0",
|
|
1329
1329
|
"appium-base-driver": "^7.1.0",
|
|
1330
1330
|
"appium-support": "^2.46.0",
|
|
1331
1331
|
"asyncbox": "^2.0.2",
|
|
1332
|
+
"axios": "^0.x",
|
|
1332
1333
|
"bluebird": "^3.5.1",
|
|
1333
1334
|
"lodash": "^4.17.4",
|
|
1334
1335
|
"portscanner": "2.2.0",
|
|
@@ -2163,9 +2164,9 @@
|
|
|
2163
2164
|
}
|
|
2164
2165
|
},
|
|
2165
2166
|
"appium-uiautomator2-driver": {
|
|
2166
|
-
"version": "1.
|
|
2167
|
-
"resolved": "https://registry.npmjs.org/appium-uiautomator2-driver/-/appium-uiautomator2-driver-1.
|
|
2168
|
-
"integrity": "sha512-
|
|
2167
|
+
"version": "1.65.0",
|
|
2168
|
+
"resolved": "https://registry.npmjs.org/appium-uiautomator2-driver/-/appium-uiautomator2-driver-1.65.0.tgz",
|
|
2169
|
+
"integrity": "sha512-hOHhEFZ5Y98ugye60aaMn7d6FyY3avIetnEd1oxcgtEEUIBwNYkivRHa3a7t/mxK497hIv9j8z0aCnpY2WPsOQ==",
|
|
2169
2170
|
"requires": {
|
|
2170
2171
|
"@babel/runtime": "^7.0.0",
|
|
2171
2172
|
"appium-adb": "^8.10.0",
|
|
@@ -2186,14 +2187,14 @@
|
|
|
2186
2187
|
}
|
|
2187
2188
|
},
|
|
2188
2189
|
"appium-uiautomator2-server": {
|
|
2189
|
-
"version": "4.21.
|
|
2190
|
-
"resolved": "https://registry.npmjs.org/appium-uiautomator2-server/-/appium-uiautomator2-server-4.21.
|
|
2191
|
-
"integrity": "sha512-
|
|
2190
|
+
"version": "4.21.1",
|
|
2191
|
+
"resolved": "https://registry.npmjs.org/appium-uiautomator2-server/-/appium-uiautomator2-server-4.21.1.tgz",
|
|
2192
|
+
"integrity": "sha512-gYcQFezpUS7+bWXL5/lNATWeOaCs8QqrWWOGI8QrfXrDrVXQU3xPKWOw1WxDNl6Febnd6u5+wdaaqww8c++KVQ=="
|
|
2192
2193
|
},
|
|
2193
2194
|
"appium-webdriveragent": {
|
|
2194
|
-
"version": "3.
|
|
2195
|
-
"resolved": "https://registry.npmjs.org/appium-webdriveragent/-/appium-webdriveragent-3.
|
|
2196
|
-
"integrity": "sha512-
|
|
2195
|
+
"version": "3.8.0",
|
|
2196
|
+
"resolved": "https://registry.npmjs.org/appium-webdriveragent/-/appium-webdriveragent-3.8.0.tgz",
|
|
2197
|
+
"integrity": "sha512-AZXX6kLyu8ZBpIg+LseRzROlI1z3712+UiJRVxxztcHuAxDGedlWCFMmPGApvzJAL3tgfc5ANSRcgsDs6QdWKw==",
|
|
2197
2198
|
"requires": {
|
|
2198
2199
|
"@babel/runtime": "^7.0.0",
|
|
2199
2200
|
"appium-base-driver": "^7.0.0",
|
|
@@ -2242,9 +2243,9 @@
|
|
|
2242
2243
|
}
|
|
2243
2244
|
},
|
|
2244
2245
|
"appium-xcuitest-driver": {
|
|
2245
|
-
"version": "3.
|
|
2246
|
-
"resolved": "https://registry.npmjs.org/appium-xcuitest-driver/-/appium-xcuitest-driver-3.
|
|
2247
|
-
"integrity": "sha512-
|
|
2246
|
+
"version": "3.43.0",
|
|
2247
|
+
"resolved": "https://registry.npmjs.org/appium-xcuitest-driver/-/appium-xcuitest-driver-3.43.0.tgz",
|
|
2248
|
+
"integrity": "sha512-e6dwRv+4Lamk/xn3F35jEOB9XFPQ+NMBuUTuIcqBJTyjH0TPf9/d+W1tseNMZjy0fuQU0IFKt0MSgdWeE+emWw==",
|
|
2248
2249
|
"requires": {
|
|
2249
2250
|
"@babel/runtime": "^7.0.0",
|
|
2250
2251
|
"appium-base-driver": "^7.0.0",
|
|
@@ -2254,7 +2255,7 @@
|
|
|
2254
2255
|
"appium-ios-simulator": "^3.25.1",
|
|
2255
2256
|
"appium-remote-debugger": "^8.13.2",
|
|
2256
2257
|
"appium-support": "^2.47.1",
|
|
2257
|
-
"appium-webdriveragent": "^3.
|
|
2258
|
+
"appium-webdriveragent": "^3.8.0",
|
|
2258
2259
|
"appium-xcode": "^3.8.0",
|
|
2259
2260
|
"async-lock": "^1.0.0",
|
|
2260
2261
|
"asyncbox": "^2.3.1",
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"firefoxos",
|
|
12
12
|
"testing"
|
|
13
13
|
],
|
|
14
|
-
"version": "1.21.0
|
|
14
|
+
"version": "1.21.0",
|
|
15
15
|
"author": "https://github.com/appium",
|
|
16
16
|
"license": "Apache-2.0",
|
|
17
17
|
"repository": {
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"appium-uiautomator2-driver": "^1.37.1",
|
|
57
57
|
"appium-windows-driver": "1.x",
|
|
58
58
|
"appium-xcuitest-driver": "^3.27.6",
|
|
59
|
-
"appium-youiengine-driver": "^1.2.
|
|
59
|
+
"appium-youiengine-driver": "^1.2.8",
|
|
60
60
|
"argparse": "^2.0.1",
|
|
61
61
|
"async-lock": "^1.0.0",
|
|
62
62
|
"asyncbox": "2.x",
|