appium-webdriveragent 4.5.1 → 4.6.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.
@@ -1,7 +1,7 @@
1
1
  const path = require('path');
2
2
  const os = require('os');
3
3
  const { asyncify } = require('asyncbox');
4
- const { logger, fs, mkdirp, zip } = require('@appium/support');
4
+ const { logger, fs, mkdirp, zip } = require('appium/support');
5
5
  const { exec } = require('teen_process');
6
6
  const xcode = require('appium-xcode');
7
7
 
@@ -1,7 +1,7 @@
1
1
  const path = require('path');
2
2
  const axios = require('axios');
3
3
  const { asyncify } = require('asyncbox');
4
- const { logger, fs, mkdirp, net } = require('@appium/support');
4
+ const { logger, fs, mkdirp, net } = require('appium/support');
5
5
  const _ = require('lodash');
6
6
  const B = require('bluebird');
7
7
 
@@ -0,0 +1,91 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Bucket
3
+ uuid = "2F0174F2-ED3F-4D11-9A17-7C590053D796"
4
+ type = "1"
5
+ version = "2.0">
6
+ <Breakpoints>
7
+ <BreakpointProxy
8
+ BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint">
9
+ <BreakpointContent
10
+ uuid = "471ECA8C-2C53-4C59-88DB-1C1CB3D61601"
11
+ shouldBeEnabled = "No"
12
+ ignoreCount = "0"
13
+ continueAfterRunningActions = "No"
14
+ breakpointStackSelectionBehavior = "1"
15
+ scope = "1"
16
+ stopOnStyle = "0">
17
+ </BreakpointContent>
18
+ </BreakpointProxy>
19
+ <BreakpointProxy
20
+ BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
21
+ <BreakpointContent
22
+ uuid = "C2E06865-6A52-4686-9771-279AF13ABF8A"
23
+ shouldBeEnabled = "Yes"
24
+ ignoreCount = "0"
25
+ continueAfterRunningActions = "No"
26
+ filePath = "WebDriverAgentLib/Categories/XCUIElement+FBUtilities.m"
27
+ timestampString = "0"
28
+ startingColumnNumber = "9223372036854775807"
29
+ endingColumnNumber = "9223372036854775807"
30
+ startingLineNumber = "264"
31
+ endingLineNumber = "264">
32
+ </BreakpointContent>
33
+ </BreakpointProxy>
34
+ <BreakpointProxy
35
+ BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
36
+ <BreakpointContent
37
+ uuid = "54216FE6-E240-47F1-88D3-D450CF0AF44E"
38
+ shouldBeEnabled = "Yes"
39
+ ignoreCount = "0"
40
+ continueAfterRunningActions = "No"
41
+ filePath = "WebDriverAgentLib/Categories/XCUIElement+FBResolve.m"
42
+ startingColumnNumber = "9223372036854775807"
43
+ endingColumnNumber = "9223372036854775807"
44
+ startingLineNumber = "37"
45
+ endingLineNumber = "37"
46
+ landmarkName = "-fb_stableInstance"
47
+ landmarkType = "7">
48
+ <Locations>
49
+ <Location
50
+ uuid = "54216FE6-E240-47F1-88D3-D450CF0AF44E - b09f4ce1ce926e6"
51
+ shouldBeEnabled = "Yes"
52
+ ignoreCount = "0"
53
+ continueAfterRunningActions = "No"
54
+ symbolName = "-[XCUIElement(FBResolve) fb_stableInstance]"
55
+ moduleName = "WebDriverAgentLib"
56
+ usesParentBreakpointCondition = "Yes"
57
+ urlString = "file:///Users/elf/code/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBResolve.m"
58
+ startingColumnNumber = "9223372036854775807"
59
+ endingColumnNumber = "9223372036854775807"
60
+ startingLineNumber = "37"
61
+ endingLineNumber = "37"
62
+ offsetFromSymbolStart = "19">
63
+ </Location>
64
+ <Location
65
+ shouldBeEnabled = "Yes"
66
+ ignoreCount = "0"
67
+ continueAfterRunningActions = "No"
68
+ usesParentBreakpointCondition = "Yes"
69
+ offsetFromSymbolStart = "0">
70
+ </Location>
71
+ </Locations>
72
+ </BreakpointContent>
73
+ </BreakpointProxy>
74
+ <BreakpointProxy
75
+ BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
76
+ <BreakpointContent
77
+ uuid = "D3009B57-42BC-4905-99BC-70232544FAFB"
78
+ shouldBeEnabled = "Yes"
79
+ ignoreCount = "0"
80
+ continueAfterRunningActions = "No"
81
+ filePath = "WebDriverAgentTests/IntegrationTests/FBAlertTests.m"
82
+ startingColumnNumber = "5"
83
+ endingColumnNumber = "64"
84
+ startingLineNumber = "32"
85
+ endingLineNumber = "32"
86
+ landmarkName = "-setUp"
87
+ landmarkType = "7">
88
+ </BreakpointContent>
89
+ </BreakpointProxy>
90
+ </Breakpoints>
91
+ </Bucket>
@@ -0,0 +1,59 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>SchemeUserState</key>
6
+ <dict>
7
+ <key>IntegrationApp.xcscheme_^#shared#^_</key>
8
+ <dict>
9
+ <key>orderHint</key>
10
+ <integer>0</integer>
11
+ </dict>
12
+ <key>IntegrationTests_1.xcscheme_^#shared#^_</key>
13
+ <dict>
14
+ <key>orderHint</key>
15
+ <integer>1</integer>
16
+ </dict>
17
+ <key>IntegrationTests_2.xcscheme_^#shared#^_</key>
18
+ <dict>
19
+ <key>orderHint</key>
20
+ <integer>2</integer>
21
+ </dict>
22
+ <key>IntegrationTests_3.xcscheme_^#shared#^_</key>
23
+ <dict>
24
+ <key>orderHint</key>
25
+ <integer>3</integer>
26
+ </dict>
27
+ <key>WebDriverAgentLib copy.xcscheme_^#shared#^_</key>
28
+ <dict>
29
+ <key>orderHint</key>
30
+ <integer>9</integer>
31
+ </dict>
32
+ <key>WebDriverAgentLib.xcscheme_^#shared#^_</key>
33
+ <dict>
34
+ <key>orderHint</key>
35
+ <integer>4</integer>
36
+ </dict>
37
+ <key>WebDriverAgentLib_tvOS.xcscheme_^#shared#^_</key>
38
+ <dict>
39
+ <key>orderHint</key>
40
+ <integer>5</integer>
41
+ </dict>
42
+ <key>WebDriverAgentRunner-nodebug.xcscheme_^#shared#^_</key>
43
+ <dict>
44
+ <key>orderHint</key>
45
+ <integer>7</integer>
46
+ </dict>
47
+ <key>WebDriverAgentRunner.xcscheme_^#shared#^_</key>
48
+ <dict>
49
+ <key>orderHint</key>
50
+ <integer>6</integer>
51
+ </dict>
52
+ <key>WebDriverAgentRunner_tvOS.xcscheme_^#shared#^_</key>
53
+ <dict>
54
+ <key>orderHint</key>
55
+ <integer>8</integer>
56
+ </dict>
57
+ </dict>
58
+ </dict>
59
+ </plist>
Binary file
@@ -214,6 +214,7 @@
214
214
  [self verifyGesture:gesture orientation:UIDeviceOrientationLandscapeLeft];
215
215
  }
216
216
 
217
+ // TODO: UIDeviceOrientationLandscapeRight is not so good in iOS 16? (Especially simulators)
217
218
  - (void)testPress
218
219
  {
219
220
  if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"15.0")) {
@@ -9,6 +9,7 @@
9
9
 
10
10
  #import <XCTest/XCTest.h>
11
11
 
12
+ #import "FBMacros.h"
12
13
  #import "FBIntegrationTestCase.h"
13
14
  #import "XCUIDevice+FBRotation.h"
14
15
  #import "XCUIElement+FBUtilities.h"
@@ -41,27 +42,11 @@
41
42
  XCUIElement *button = self.testedApplication.buttons[FBShowAlertButtonName];
42
43
  NSError *error = nil;
43
44
  NSData *screenshotData = [button fb_screenshotWithError:&error];
44
- if (nil == screenshotData && [error.description containsString:@"available since Xcode9"]) {
45
- return;
46
- }
47
45
  XCTAssertNotNil(screenshotData);
48
46
  XCTAssertNil(error);
49
47
  UIImage *image = [UIImage imageWithData:screenshotData];
50
48
  XCTAssertNotNil(image);
51
49
  XCTAssertTrue(image.size.width > image.size.height);
52
-
53
- XCUIScreen *mainScreen = XCUIScreen.mainScreen;
54
- // Note about iPadOS 15.0 environment.
55
- // The 'button.screenshot.image' (by XCTest) had a white image while 'image' had
56
- // expected FBShowAlertButtonName area image by WebDriverAgent.
57
- // It seems the native XCTest element screenshot has an issue on iPadOS.
58
- UIImage *buttonScreenshot = button.screenshot.image;
59
- XCTAssertEqualWithAccuracy(buttonScreenshot.size.height * mainScreen.scale,
60
- image.size.height,
61
- FLT_EPSILON);
62
- XCTAssertEqualWithAccuracy(buttonScreenshot.size.width * mainScreen.scale,
63
- image.size.width,
64
- FLT_EPSILON);
65
50
  }
66
51
 
67
52
  @end
@@ -61,7 +61,9 @@
61
61
  matchingIdentifier:@"Select All"].firstMatch;
62
62
  XCTAssertTrue([selectAllItem waitForExistenceWithTimeout:5]);
63
63
  [selectAllItem tap];
64
- [textField pressForDuration:2.0];
64
+ if (SYSTEM_VERSION_LESS_THAN(@"16.0")) {
65
+ [textField pressForDuration:2.0];
66
+ }
65
67
  XCUIElement *copyItem = [[self.testedApplication descendantsMatchingType:XCUIElementTypeAny]
66
68
  matchingIdentifier:@"Copy"].firstMatch;
67
69
  XCTAssertTrue([copyItem waitForExistenceWithTimeout:5]);
@@ -69,7 +71,11 @@
69
71
  FBWaitExact(1.0);
70
72
  NSData *result = [FBPasteboard dataForType:@"plaintext" error:&error];
71
73
  XCTAssertNil(error);
72
- XCTAssertEqualObjects(textField.value, [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding]);
74
+ if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"16.0")) {
75
+ // Pasteboard permission appears in a simulator. Not in a real device.
76
+ } else {
77
+ XCTAssertEqualObjects(textField.value, [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding]);
78
+ }
73
79
  }
74
80
 
75
81
  - (void)testUrlCopyPaste
@@ -294,6 +294,8 @@
294
294
  [self verifyGesture:gesture orientation:UIDeviceOrientationPortrait];
295
295
  }
296
296
 
297
+ // TODO: UIDeviceOrientationLandscapeLeft did not work in iOS 16 simumlator.
298
+ // UIDeviceOrientationPortrait was ok.
297
299
  - (void)testDoubleTap
298
300
  {
299
301
  if ([UIDevice.currentDevice userInterfaceIdiom] == UIUserInterfaceIdiomPad &&
@@ -324,6 +326,8 @@
324
326
  [self verifyGesture:gesture orientation:UIDeviceOrientationLandscapeLeft];
325
327
  }
326
328
 
329
+ // TODO: UIDeviceOrientationLandscapeRight did not work in iOS 16 simumlator.
330
+ // UIDeviceOrientationPortrait was ok.
327
331
  - (void)testLongPressWithCombinedPause
328
332
  {
329
333
  if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"15.0")) {
@@ -78,6 +78,7 @@
78
78
  XCTAssertTrue(screenshot.size.width > screenshot.size.height);
79
79
 
80
80
  XCUIScreen *mainScreen = XCUIScreen.mainScreen;
81
+ // TODO: This screenshot rotation was not landscape in an iOS 16 beta simulator.
81
82
  UIImage *screenshotExact = ((XCUIScreenshot *)mainScreen.screenshot).image;
82
83
  XCTAssertEqualWithAccuracy(screenshotExact.size.height * mainScreen.scale,
83
84
  screenshot.size.height,
@@ -10,7 +10,7 @@ exports.checkForDependencies = checkForDependencies;
10
10
 
11
11
  require("source-map-support/register");
12
12
 
13
- var _support = require("@appium/support");
13
+ var _support = require("appium/support");
14
14
 
15
15
  var _lodash = _interopRequireDefault(require("lodash"));
16
16
 
@@ -55,4 +55,4 @@ async function bundleWDASim(xcodebuild, opts = {}) {
55
55
  }require('source-map-support').install();
56
56
 
57
57
 
58
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NoZWNrLWRlcGVuZGVuY2llcy5qcyIsIm5hbWVzIjpbImJ1aWxkV0RBU2ltIiwiYXJncyIsIldEQV9QUk9KRUNUIiwiV0RBX1NDSEVNRSIsIlNES19TSU1VTEFUT1IiLCJleGVjIiwiY2hlY2tGb3JEZXBlbmRlbmNpZXMiLCJsb2ciLCJkZWJ1ZyIsImJ1bmRsZVdEQVNpbSIsInhjb2RlYnVpbGQiLCJvcHRzIiwiXyIsImlzRnVuY3Rpb24iLCJyZXRyaWV2ZURlcml2ZWREYXRhUGF0aCIsIlhjb2RlQnVpbGQiLCJkZXJpdmVkRGF0YVBhdGgiLCJ3ZGFCdW5kbGVQYXRoIiwicGF0aCIsImpvaW4iLCJXREFfUlVOTkVSX0FQUCIsImZzIiwiZXhpc3RzIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2NoZWNrLWRlcGVuZGVuY2llcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBYY29kZUJ1aWxkIGZyb20gJy4veGNvZGVidWlsZCc7XG5pbXBvcnQge1xuICBXREFfUFJPSkVDVCwgV0RBX1NDSEVNRSwgU0RLX1NJTVVMQVRPUiwgV0RBX1JVTk5FUl9BUFBcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkV0RBU2ltICgpIHtcbiAgY29uc3QgYXJncyA9IFtcbiAgICAnLXByb2plY3QnLCBXREFfUFJPSkVDVCxcbiAgICAnLXNjaGVtZScsIFdEQV9TQ0hFTUUsXG4gICAgJy1zZGsnLCBTREtfU0lNVUxBVE9SLFxuICAgICdDT0RFX1NJR05fSURFTlRJVFk9XCJcIicsXG4gICAgJ0NPREVfU0lHTklOR19SRVFVSVJFRD1cIk5PXCInLFxuICAgICdHQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTPTAnLFxuICBdO1xuICBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgYXJncyk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF3YWl0XG5hc3luYyBmdW5jdGlvbiBjaGVja0ZvckRlcGVuZGVuY2llcyAoKSB7XG4gIGxvZy5kZWJ1ZygnRGVwZW5kZW5jaWVzIGFyZSB1cCB0byBkYXRlJyk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYnVuZGxlV0RBU2ltICh4Y29kZWJ1aWxkLCBvcHRzID0ge30pIHtcbiAgaWYgKHhjb2RlYnVpbGQgJiYgIV8uaXNGdW5jdGlvbih4Y29kZWJ1aWxkLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKSkge1xuICAgIHhjb2RlYnVpbGQgPSBuZXcgWGNvZGVCdWlsZCgpO1xuICAgIG9wdHMgPSB4Y29kZWJ1aWxkO1xuICB9XG5cbiAgY29uc3QgZGVyaXZlZERhdGFQYXRoID0gYXdhaXQgeGNvZGVidWlsZC5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICBjb25zdCB3ZGFCdW5kbGVQYXRoID0gcGF0aC5qb2luKGRlcml2ZWREYXRhUGF0aCwgJ0J1aWxkJywgJ1Byb2R1Y3RzJywgJ0RlYnVnLWlwaG9uZXNpbXVsYXRvcicsIFdEQV9SVU5ORVJfQVBQKTtcbiAgaWYgKGF3YWl0IGZzLmV4aXN0cyh3ZGFCdW5kbGVQYXRoKSkge1xuICAgIHJldHVybiB3ZGFCdW5kbGVQYXRoO1xuICB9XG4gIGF3YWl0IGNoZWNrRm9yRGVwZW5kZW5jaWVzKG9wdHMpO1xuICBhd2FpdCBidWlsZFdEQVNpbSh4Y29kZWJ1aWxkLCBvcHRzKTtcbiAgcmV0dXJuIHdkYUJ1bmRsZVBhdGg7XG59XG5cbmV4cG9ydCB7IGNoZWNrRm9yRGVwZW5kZW5jaWVzLCBidW5kbGVXREFTaW0gfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBRUEsZUFBZUEsV0FBZixHQUE4QjtFQUM1QixNQUFNQyxJQUFJLEdBQUcsQ0FDWCxVQURXLEVBQ0NDLHNCQURELEVBRVgsU0FGVyxFQUVBQyxxQkFGQSxFQUdYLE1BSFcsRUFHSEMsd0JBSEcsRUFJWCx1QkFKVyxFQUtYLDRCQUxXLEVBTVgsZ0NBTlcsQ0FBYjtFQVFBLE1BQU0sSUFBQUMsa0JBQUEsRUFBSyxZQUFMLEVBQW1CSixJQUFuQixDQUFOO0FBQ0Q7O0FBR0QsZUFBZUssb0JBQWYsR0FBdUM7RUFDckNDLGVBQUEsQ0FBSUMsS0FBSixDQUFVLDZCQUFWOztFQUNBLE9BQU8sS0FBUDtBQUNEOztBQUVELGVBQWVDLFlBQWYsQ0FBNkJDLFVBQTdCLEVBQXlDQyxJQUFJLEdBQUcsRUFBaEQsRUFBb0Q7RUFDbEQsSUFBSUQsVUFBVSxJQUFJLENBQUNFLGVBQUEsQ0FBRUMsVUFBRixDQUFhSCxVQUFVLENBQUNJLHVCQUF4QixDQUFuQixFQUFxRTtJQUNuRUosVUFBVSxHQUFHLElBQUlLLG1CQUFKLEVBQWI7SUFDQUosSUFBSSxHQUFHRCxVQUFQO0VBQ0Q7O0VBRUQsTUFBTU0sZUFBZSxHQUFHLE1BQU1OLFVBQVUsQ0FBQ0ksdUJBQVgsRUFBOUI7O0VBQ0EsTUFBTUcsYUFBYSxHQUFHQyxhQUFBLENBQUtDLElBQUwsQ0FBVUgsZUFBVixFQUEyQixPQUEzQixFQUFvQyxVQUFwQyxFQUFnRCx1QkFBaEQsRUFBeUVJLHlCQUF6RSxDQUF0Qjs7RUFDQSxJQUFJLE1BQU1DLFdBQUEsQ0FBR0MsTUFBSCxDQUFVTCxhQUFWLENBQVYsRUFBb0M7SUFDbEMsT0FBT0EsYUFBUDtFQUNEOztFQUNELE1BQU1YLG9CQUFvQixDQUFDSyxJQUFELENBQTFCO0VBQ0EsTUFBTVgsV0FBVyxDQUFDVSxVQUFELEVBQWFDLElBQWIsQ0FBakI7RUFDQSxPQUFPTSxhQUFQO0FBQ0QifQ==
58
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NoZWNrLWRlcGVuZGVuY2llcy5qcyIsIm5hbWVzIjpbImJ1aWxkV0RBU2ltIiwiYXJncyIsIldEQV9QUk9KRUNUIiwiV0RBX1NDSEVNRSIsIlNES19TSU1VTEFUT1IiLCJleGVjIiwiY2hlY2tGb3JEZXBlbmRlbmNpZXMiLCJsb2ciLCJkZWJ1ZyIsImJ1bmRsZVdEQVNpbSIsInhjb2RlYnVpbGQiLCJvcHRzIiwiXyIsImlzRnVuY3Rpb24iLCJyZXRyaWV2ZURlcml2ZWREYXRhUGF0aCIsIlhjb2RlQnVpbGQiLCJkZXJpdmVkRGF0YVBhdGgiLCJ3ZGFCdW5kbGVQYXRoIiwicGF0aCIsImpvaW4iLCJXREFfUlVOTkVSX0FQUCIsImZzIiwiZXhpc3RzIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2NoZWNrLWRlcGVuZGVuY2llcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IFhjb2RlQnVpbGQgZnJvbSAnLi94Y29kZWJ1aWxkJztcbmltcG9ydCB7XG4gIFdEQV9QUk9KRUNULCBXREFfU0NIRU1FLCBTREtfU0lNVUxBVE9SLCBXREFfUlVOTkVSX0FQUFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRXREFTaW0gKCkge1xuICBjb25zdCBhcmdzID0gW1xuICAgICctcHJvamVjdCcsIFdEQV9QUk9KRUNULFxuICAgICctc2NoZW1lJywgV0RBX1NDSEVNRSxcbiAgICAnLXNkaycsIFNES19TSU1VTEFUT1IsXG4gICAgJ0NPREVfU0lHTl9JREVOVElUWT1cIlwiJyxcbiAgICAnQ09ERV9TSUdOSU5HX1JFUVVJUkVEPVwiTk9cIicsXG4gICAgJ0dDQ19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlM9MCcsXG4gIF07XG4gIGF3YWl0IGV4ZWMoJ3hjb2RlYnVpbGQnLCBhcmdzKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmFzeW5jIGZ1bmN0aW9uIGNoZWNrRm9yRGVwZW5kZW5jaWVzICgpIHtcbiAgbG9nLmRlYnVnKCdEZXBlbmRlbmNpZXMgYXJlIHVwIHRvIGRhdGUnKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBidW5kbGVXREFTaW0gKHhjb2RlYnVpbGQsIG9wdHMgPSB7fSkge1xuICBpZiAoeGNvZGVidWlsZCAmJiAhXy5pc0Z1bmN0aW9uKHhjb2RlYnVpbGQucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgpKSB7XG4gICAgeGNvZGVidWlsZCA9IG5ldyBYY29kZUJ1aWxkKCk7XG4gICAgb3B0cyA9IHhjb2RlYnVpbGQ7XG4gIH1cblxuICBjb25zdCBkZXJpdmVkRGF0YVBhdGggPSBhd2FpdCB4Y29kZWJ1aWxkLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gIGNvbnN0IHdkYUJ1bmRsZVBhdGggPSBwYXRoLmpvaW4oZGVyaXZlZERhdGFQYXRoLCAnQnVpbGQnLCAnUHJvZHVjdHMnLCAnRGVidWctaXBob25lc2ltdWxhdG9yJywgV0RBX1JVTk5FUl9BUFApO1xuICBpZiAoYXdhaXQgZnMuZXhpc3RzKHdkYUJ1bmRsZVBhdGgpKSB7XG4gICAgcmV0dXJuIHdkYUJ1bmRsZVBhdGg7XG4gIH1cbiAgYXdhaXQgY2hlY2tGb3JEZXBlbmRlbmNpZXMob3B0cyk7XG4gIGF3YWl0IGJ1aWxkV0RBU2ltKHhjb2RlYnVpbGQsIG9wdHMpO1xuICByZXR1cm4gd2RhQnVuZGxlUGF0aDtcbn1cblxuZXhwb3J0IHsgY2hlY2tGb3JEZXBlbmRlbmNpZXMsIGJ1bmRsZVdEQVNpbSB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFFQSxlQUFlQSxXQUFmLEdBQThCO0VBQzVCLE1BQU1DLElBQUksR0FBRyxDQUNYLFVBRFcsRUFDQ0Msc0JBREQsRUFFWCxTQUZXLEVBRUFDLHFCQUZBLEVBR1gsTUFIVyxFQUdIQyx3QkFIRyxFQUlYLHVCQUpXLEVBS1gsNEJBTFcsRUFNWCxnQ0FOVyxDQUFiO0VBUUEsTUFBTSxJQUFBQyxrQkFBQSxFQUFLLFlBQUwsRUFBbUJKLElBQW5CLENBQU47QUFDRDs7QUFHRCxlQUFlSyxvQkFBZixHQUF1QztFQUNyQ0MsZUFBQSxDQUFJQyxLQUFKLENBQVUsNkJBQVY7O0VBQ0EsT0FBTyxLQUFQO0FBQ0Q7O0FBRUQsZUFBZUMsWUFBZixDQUE2QkMsVUFBN0IsRUFBeUNDLElBQUksR0FBRyxFQUFoRCxFQUFvRDtFQUNsRCxJQUFJRCxVQUFVLElBQUksQ0FBQ0UsZUFBQSxDQUFFQyxVQUFGLENBQWFILFVBQVUsQ0FBQ0ksdUJBQXhCLENBQW5CLEVBQXFFO0lBQ25FSixVQUFVLEdBQUcsSUFBSUssbUJBQUosRUFBYjtJQUNBSixJQUFJLEdBQUdELFVBQVA7RUFDRDs7RUFFRCxNQUFNTSxlQUFlLEdBQUcsTUFBTU4sVUFBVSxDQUFDSSx1QkFBWCxFQUE5Qjs7RUFDQSxNQUFNRyxhQUFhLEdBQUdDLGFBQUEsQ0FBS0MsSUFBTCxDQUFVSCxlQUFWLEVBQTJCLE9BQTNCLEVBQW9DLFVBQXBDLEVBQWdELHVCQUFoRCxFQUF5RUkseUJBQXpFLENBQXRCOztFQUNBLElBQUksTUFBTUMsV0FBQSxDQUFHQyxNQUFILENBQVVMLGFBQVYsQ0FBVixFQUFvQztJQUNsQyxPQUFPQSxhQUFQO0VBQ0Q7O0VBQ0QsTUFBTVgsb0JBQW9CLENBQUNLLElBQUQsQ0FBMUI7RUFDQSxNQUFNWCxXQUFXLENBQUNVLFVBQUQsRUFBYUMsSUFBYixDQUFqQjtFQUNBLE9BQU9NLGFBQVA7QUFDRCJ9
@@ -7,7 +7,7 @@ exports.default = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9
 
10
- var _support = require("@appium/support");
10
+ var _support = require("appium/support");
11
11
 
12
12
  const log = _support.logger.getLogger('WebDriverAgent');
13
13
 
@@ -15,4 +15,4 @@ var _default = log;
15
15
  exports.default = _default;require('source-map-support').install();
16
16
 
17
17
 
18
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignV2ViRHJpdmVyQWdlbnQnKTtcblxuZXhwb3J0IGRlZmF1bHQgbG9nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxHQUFHLEdBQUdDLGVBQUEsQ0FBT0MsU0FBUCxDQUFpQixnQkFBakIsQ0FBWjs7ZUFFZUYsRyJ9
18
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdXZWJEcml2ZXJBZ2VudCcpO1xuXG5leHBvcnQgZGVmYXVsdCBsb2c7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUVBLE1BQU1BLEdBQUcsR0FBR0MsZUFBQSxDQUFPQyxTQUFQLENBQWlCLGdCQUFqQixDQUFaOztlQUVlRixHIn0=
@@ -7,9 +7,9 @@ exports.default = exports.NoSessionProxy = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9
 
10
- var _baseDriver = require("@appium/base-driver");
10
+ var _driver = require("appium/driver");
11
11
 
12
- class NoSessionProxy extends _baseDriver.JWProxy {
12
+ class NoSessionProxy extends _driver.JWProxy {
13
13
  constructor(opts = {}) {
14
14
  super(opts);
15
15
  }
@@ -39,4 +39,4 @@ var _default = NoSessionProxy;
39
39
  exports.default = _default;require('source-map-support').install();
40
40
 
41
41
 
42
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL25vLXNlc3Npb24tcHJveHkuanMiLCJuYW1lcyI6WyJOb1Nlc3Npb25Qcm94eSIsIkpXUHJveHkiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJnZXRVcmxGb3JQcm94eSIsInVybCIsInByb3h5QmFzZSIsInNjaGVtZSIsInNlcnZlciIsInBvcnQiLCJiYXNlIiwicmVtYWluaW5nVXJsIiwiUmVnRXhwIiwidGVzdCIsIkVycm9yIiwicmVwbGFjZSJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9uby1zZXNzaW9uLXByb3h5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEpXUHJveHkgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcblxuXG5jbGFzcyBOb1Nlc3Npb25Qcm94eSBleHRlbmRzIEpXUHJveHkge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gIH1cblxuICBnZXRVcmxGb3JQcm94eSAodXJsKSB7XG4gICAgaWYgKHVybCA9PT0gJycpIHtcbiAgICAgIHVybCA9ICcvJztcbiAgICB9XG4gICAgY29uc3QgcHJveHlCYXNlID0gYCR7dGhpcy5zY2hlbWV9Oi8vJHt0aGlzLnNlcnZlcn06JHt0aGlzLnBvcnR9JHt0aGlzLmJhc2V9YDtcbiAgICBsZXQgcmVtYWluaW5nVXJsID0gJyc7XG4gICAgaWYgKChuZXcgUmVnRXhwKCdeLycpKS50ZXN0KHVybCkpIHtcbiAgICAgIHJlbWFpbmluZ1VybCA9IHVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgbm90IGtub3cgd2hhdCB0byBkbyB3aXRoIHVybCAnJHt1cmx9J2ApO1xuICAgIH1cbiAgICByZW1haW5pbmdVcmwgPSByZW1haW5pbmdVcmwucmVwbGFjZSgvXFwvJC8sICcnKTsgLy8gY2FuJ3QgaGF2ZSB0cmFpbGluZyBzbGFzaGVzXG4gICAgcmV0dXJuIHByb3h5QmFzZSArIHJlbWFpbmluZ1VybDtcbiAgfVxufVxuXG5leHBvcnQgeyBOb1Nlc3Npb25Qcm94eSB9O1xuZXhwb3J0IGRlZmF1bHQgTm9TZXNzaW9uUHJveHk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUdBLE1BQU1BLGNBQU4sU0FBNkJDLG1CQUE3QixDQUFxQztFQUNuQ0MsV0FBVyxDQUFFQyxJQUFJLEdBQUcsRUFBVCxFQUFhO0lBQ3RCLE1BQU1BLElBQU47RUFDRDs7RUFFREMsY0FBYyxDQUFFQyxHQUFGLEVBQU87SUFDbkIsSUFBSUEsR0FBRyxLQUFLLEVBQVosRUFBZ0I7TUFDZEEsR0FBRyxHQUFHLEdBQU47SUFDRDs7SUFDRCxNQUFNQyxTQUFTLEdBQUksR0FBRSxLQUFLQyxNQUFPLE1BQUssS0FBS0MsTUFBTyxJQUFHLEtBQUtDLElBQUssR0FBRSxLQUFLQyxJQUFLLEVBQTNFO0lBQ0EsSUFBSUMsWUFBWSxHQUFHLEVBQW5COztJQUNBLElBQUssSUFBSUMsTUFBSixDQUFXLElBQVgsQ0FBRCxDQUFtQkMsSUFBbkIsQ0FBd0JSLEdBQXhCLENBQUosRUFBa0M7TUFDaENNLFlBQVksR0FBR04sR0FBZjtJQUNELENBRkQsTUFFTztNQUNMLE1BQU0sSUFBSVMsS0FBSixDQUFXLHFDQUFvQ1QsR0FBSSxHQUFuRCxDQUFOO0lBQ0Q7O0lBQ0RNLFlBQVksR0FBR0EsWUFBWSxDQUFDSSxPQUFiLENBQXFCLEtBQXJCLEVBQTRCLEVBQTVCLENBQWY7SUFDQSxPQUFPVCxTQUFTLEdBQUdLLFlBQW5CO0VBQ0Q7O0FBbEJrQzs7O2VBc0J0QlgsYyJ9
42
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL25vLXNlc3Npb24tcHJveHkuanMiLCJuYW1lcyI6WyJOb1Nlc3Npb25Qcm94eSIsIkpXUHJveHkiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJnZXRVcmxGb3JQcm94eSIsInVybCIsInByb3h5QmFzZSIsInNjaGVtZSIsInNlcnZlciIsInBvcnQiLCJiYXNlIiwicmVtYWluaW5nVXJsIiwiUmVnRXhwIiwidGVzdCIsIkVycm9yIiwicmVwbGFjZSJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9uby1zZXNzaW9uLXByb3h5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEpXUHJveHkgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxuXG5jbGFzcyBOb1Nlc3Npb25Qcm94eSBleHRlbmRzIEpXUHJveHkge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gIH1cblxuICBnZXRVcmxGb3JQcm94eSAodXJsKSB7XG4gICAgaWYgKHVybCA9PT0gJycpIHtcbiAgICAgIHVybCA9ICcvJztcbiAgICB9XG4gICAgY29uc3QgcHJveHlCYXNlID0gYCR7dGhpcy5zY2hlbWV9Oi8vJHt0aGlzLnNlcnZlcn06JHt0aGlzLnBvcnR9JHt0aGlzLmJhc2V9YDtcbiAgICBsZXQgcmVtYWluaW5nVXJsID0gJyc7XG4gICAgaWYgKChuZXcgUmVnRXhwKCdeLycpKS50ZXN0KHVybCkpIHtcbiAgICAgIHJlbWFpbmluZ1VybCA9IHVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgbm90IGtub3cgd2hhdCB0byBkbyB3aXRoIHVybCAnJHt1cmx9J2ApO1xuICAgIH1cbiAgICByZW1haW5pbmdVcmwgPSByZW1haW5pbmdVcmwucmVwbGFjZSgvXFwvJC8sICcnKTsgLy8gY2FuJ3QgaGF2ZSB0cmFpbGluZyBzbGFzaGVzXG4gICAgcmV0dXJuIHByb3h5QmFzZSArIHJlbWFpbmluZ1VybDtcbiAgfVxufVxuXG5leHBvcnQgeyBOb1Nlc3Npb25Qcm94eSB9O1xuZXhwb3J0IGRlZmF1bHQgTm9TZXNzaW9uUHJveHk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUdBLE1BQU1BLGNBQU4sU0FBNkJDLGVBQTdCLENBQXFDO0VBQ25DQyxXQUFXLENBQUVDLElBQUksR0FBRyxFQUFULEVBQWE7SUFDdEIsTUFBTUEsSUFBTjtFQUNEOztFQUVEQyxjQUFjLENBQUVDLEdBQUYsRUFBTztJQUNuQixJQUFJQSxHQUFHLEtBQUssRUFBWixFQUFnQjtNQUNkQSxHQUFHLEdBQUcsR0FBTjtJQUNEOztJQUNELE1BQU1DLFNBQVMsR0FBSSxHQUFFLEtBQUtDLE1BQU8sTUFBSyxLQUFLQyxNQUFPLElBQUcsS0FBS0MsSUFBSyxHQUFFLEtBQUtDLElBQUssRUFBM0U7SUFDQSxJQUFJQyxZQUFZLEdBQUcsRUFBbkI7O0lBQ0EsSUFBSyxJQUFJQyxNQUFKLENBQVcsSUFBWCxDQUFELENBQW1CQyxJQUFuQixDQUF3QlIsR0FBeEIsQ0FBSixFQUFrQztNQUNoQ00sWUFBWSxHQUFHTixHQUFmO0lBQ0QsQ0FGRCxNQUVPO01BQ0wsTUFBTSxJQUFJUyxLQUFKLENBQVcscUNBQW9DVCxHQUFJLEdBQW5ELENBQU47SUFDRDs7SUFDRE0sWUFBWSxHQUFHQSxZQUFZLENBQUNJLE9BQWIsQ0FBcUIsS0FBckIsRUFBNEIsRUFBNUIsQ0FBZjtJQUNBLE9BQU9ULFNBQVMsR0FBR0ssWUFBbkI7RUFDRDs7QUFsQmtDOzs7ZUFzQnRCWCxjIn0=
@@ -23,7 +23,7 @@ exports.updateProjectFile = updateProjectFile;
23
23
 
24
24
  require("source-map-support/register");
25
25
 
26
- var _support = require("@appium/support");
26
+ var _support = require("appium/support");
27
27
 
28
28
  var _teen_process = require("teen_process");
29
29
 
@@ -314,4 +314,4 @@ async function getPIDsListeningOnPort(port, filteringFunc = null) {
314
314
  }require('source-map-support').install();
315
315
 
316
316
 
317
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3V0aWxzLmpzIiwibmFtZXMiOlsiUk9PVF9ESVIiLCJwYXRoIiwiYmFzZW5hbWUiLCJfX2Rpcm5hbWUiLCJyZXNvbHZlIiwicHJvY2VzcyIsImVudiIsIk5PX1BSRUNPTVBJTEUiLCJQUk9KRUNUX0ZJTEUiLCJnZXRQSURzVXNpbmdQYXR0ZXJuIiwicGF0dGVybiIsImFyZ3MiLCJzdGRvdXQiLCJleGVjIiwic3BsaXQiLCJtYXAiLCJ4IiwicGFyc2VJbnQiLCJmaWx0ZXIiLCJfIiwiaXNJbnRlZ2VyIiwiZXJyIiwibG9nIiwiZGVidWciLCJqb2luIiwiY29kZSIsImtpbGxBcHBVc2luZ1BhdHRlcm4iLCJwZ3JlcFBhdHRlcm4iLCJzaWduYWxzIiwic2lnbmFsIiwibWF0Y2hlZFBpZHMiLCJpc0VtcHR5IiwibWVzc2FnZSIsImxhc3QiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwicGlkQ2hlY2tQcm9taXNlcyIsInBpZCIsInRoZW4iLCJjYXRjaCIsIkIiLCJhbGwiLCJldmVyeSIsIndhaXRNcyIsImludGVydmFsTXMiLCJpZ24iLCJpc1R2T1MiLCJwbGF0Zm9ybU5hbWUiLCJ0b0xvd2VyIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwicmVwbGFjZUluRmlsZSIsImZpbGUiLCJmaW5kIiwicmVwbGFjZSIsImNvbnRlbnRzIiwiZnMiLCJyZWFkRmlsZSIsIm5ld0NvbnRlbnRzIiwid3JpdGVGaWxlIiwidXBkYXRlUHJvamVjdEZpbGUiLCJhZ2VudFBhdGgiLCJuZXdCdW5kbGVJZCIsInByb2plY3RGaWxlUGF0aCIsImNvcHlGaWxlIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJ3YXJuIiwicmVzZXRQcm9qZWN0RmlsZSIsImV4aXN0cyIsIm12Iiwic2V0UmVhbERldmljZVNlY3VyaXR5Iiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsImdlbmVyYXRlWGNvZGVDb25maWdGaWxlIiwib3JnSWQiLCJzaWduaW5nSWQiLCJ4Y2NvbmZpZ1BhdGgiLCJ0ZW1wRGlyIiwic2V0WGN0ZXN0cnVuRmlsZSIsImRldmljZUluZm8iLCJzZGtWZXJzaW9uIiwiYm9vdHN0cmFwUGF0aCIsIndkYVJlbW90ZVBvcnQiLCJ4Y3Rlc3RydW5GaWxlUGF0aCIsImdldFhjdGVzdHJ1bkZpbGVQYXRoIiwieGN0ZXN0UnVuQ29udGVudCIsInBsaXN0IiwicGFyc2VQbGlzdEZpbGUiLCJ1cGRhdGVXREFQb3J0IiwiZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQiLCJuZXdYY3Rlc3RSdW5Db250ZW50IiwibWVyZ2UiLCJ1cGRhdGVQbGlzdEZpbGUiLCJydW5uZXIiLCJFbnZpcm9ubWVudFZhcmlhYmxlcyIsIlVTRV9QT1JUIiwic2RrQmFzZWQiLCJ1ZGlkIiwicGxhdGZvcm1CYXNlZCIsInBsYXRmb3JtVmVyc2lvbiIsImZpbGVQYXRoIiwidmVyc2lvbiIsImluZm8iLCJvcmlnaW5hbFhjdGVzdHJ1bkZpbGUiLCJnZXRYY3Rlc3RydW5GaWxlTmFtZSIsImVycm9yQW5kVGhyb3ciLCJpc1JlYWxEZXZpY2UiLCJraWxsUHJvY2VzcyIsIm5hbWUiLCJwcm9jIiwiaXNSdW5uaW5nIiwic3RvcCIsImluY2x1ZGVzIiwicmFuZG9tSW50IiwibG93IiwiaGlnaCIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImdldFdEQVVwZ3JhZGVUaW1lc3RhbXAiLCJwYWNrYWdlTWFuaWZlc3QiLCJtdGltZSIsInN0YXQiLCJnZXRUaW1lIiwicmVzZXRUZXN0UHJvY2Vzc2VzIiwiaXNTaW11bGF0b3IiLCJwcm9jZXNzUGF0dGVybnMiLCJwdXNoIiwiZ2V0UElEc0xpc3RlbmluZ09uUG9ydCIsInBvcnQiLCJmaWx0ZXJpbmdGdW5jIiwicmVzdWx0IiwidHJpbSIsImUiLCJzdGRlcnIiLCJpc0Z1bmN0aW9uIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZzLCB0ZW1wRGlyLCBwbGlzdCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgV0RBX1JVTk5FUl9CVU5ETEVfSUQsIFBMQVRGT1JNX05BTUVfVFZPUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5cbmNvbnN0IFJPT1RfRElSID0gcGF0aC5iYXNlbmFtZShfX2Rpcm5hbWUpID09PSAnbGliJ1xuICA/IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsIHByb2Nlc3MuZW52Lk5PX1BSRUNPTVBJTEUgPyAnLi4nIDogJy4uLy4uJylcbiAgOiBfX2Rpcm5hbWU7XG5jb25zdCBQUk9KRUNUX0ZJTEUgPSAncHJvamVjdC5wYnhwcm9qJztcblxuYXN5bmMgZnVuY3Rpb24gZ2V0UElEc1VzaW5nUGF0dGVybiAocGF0dGVybikge1xuICBjb25zdCBhcmdzID0gW1xuICAgICctaWYnLCAvLyBjYXNlIGluc2Vuc2l0aXZlLCBmdWxsIGNtZGxpbmUgbWF0Y2hcbiAgICBwYXR0ZXJuLFxuICBdO1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygncGdyZXAnLCBhcmdzKTtcbiAgICByZXR1cm4gc3Rkb3V0LnNwbGl0KC9cXHMrLylcbiAgICAgIC5tYXAoKHgpID0+IHBhcnNlSW50KHgsIDEwKSlcbiAgICAgIC5maWx0ZXIoXy5pc0ludGVnZXIpXG4gICAgICAubWFwKCh4KSA9PiBgJHt4fWApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZGVidWcoYCdwZ3JlcCAke2FyZ3Muam9pbignICcpfScgZGlkbid0IGRldGVjdCBhbnkgbWF0Y2hpbmcgcHJvY2Vzc2VzLiBSZXR1cm4gY29kZTogJHtlcnIuY29kZX1gKTtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24ga2lsbEFwcFVzaW5nUGF0dGVybiAocGdyZXBQYXR0ZXJuKSB7XG4gIGNvbnN0IHNpZ25hbHMgPSBbMiwgMTUsIDldO1xuICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBzaWduYWxzKSB7XG4gICAgY29uc3QgbWF0Y2hlZFBpZHMgPSBhd2FpdCBnZXRQSURzVXNpbmdQYXR0ZXJuKHBncmVwUGF0dGVybik7XG4gICAgaWYgKF8uaXNFbXB0eShtYXRjaGVkUGlkcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYXJncyA9IFtgLSR7c2lnbmFsfWAsIC4uLm1hdGNoZWRQaWRzXTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYygna2lsbCcsIGFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmRlYnVnKGBraWxsICR7YXJncy5qb2luKCcgJyl9IC0+ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGlmIChzaWduYWwgPT09IF8ubGFzdChzaWduYWxzKSkge1xuICAgICAgLy8gdGhlcmUgaXMgbm8gbmVlZCB0byB3YWl0IGFmdGVyIFNJR0tJTExcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwaWRDaGVja1Byb21pc2VzID0gbWF0Y2hlZFBpZHNcbiAgICAgICAgICAubWFwKChwaWQpID0+IGV4ZWMoJ2tpbGwnLCBbJy0wJywgcGlkXSlcbiAgICAgICAgICAgIC8vIHRoZSBwcm9jZXNzIGlzIHN0aWxsIGFsaXZlXG4gICAgICAgICAgICAudGhlbigoKSA9PiBmYWxzZSlcbiAgICAgICAgICAgIC8vIHRoZSBwcm9jZXNzIGlzIGRlYWRcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB0cnVlKVxuICAgICAgICAgICk7XG4gICAgICAgIHJldHVybiAoYXdhaXQgQi5hbGwocGlkQ2hlY2tQcm9taXNlcykpXG4gICAgICAgICAgLmV2ZXJ5KCh4KSA9PiB4ID09PSB0cnVlKTtcbiAgICAgIH0sIHtcbiAgICAgICAgd2FpdE1zOiAxMDAwLFxuICAgICAgICBpbnRlcnZhbE1zOiAxMDAsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgIC8vIHRyeSB0aGUgbmV4dCBzaWduYWxcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm1OYW1lIGlzIHR2T1NcbiAqIEBwYXJhbSB7c3RyaW5nfSBwbGF0Zm9ybU5hbWUgVGhlIG5hbWUgb2YgdGhlIHBsYXRvcm1cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm1OYW1lIGlzIHR2T1NcbiAqL1xuZnVuY3Rpb24gaXNUdk9TIChwbGF0Zm9ybU5hbWUpIHtcbiAgcmV0dXJuIF8udG9Mb3dlcihwbGF0Zm9ybU5hbWUpID09PSBfLnRvTG93ZXIoUExBVEZPUk1fTkFNRV9UVk9TKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUluRmlsZSAoZmlsZSwgZmluZCwgcmVwbGFjZSkge1xuICBsZXQgY29udGVudHMgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlLCAndXRmOCcpO1xuXG4gIGxldCBuZXdDb250ZW50cyA9IGNvbnRlbnRzLnJlcGxhY2UoZmluZCwgcmVwbGFjZSk7XG4gIGlmIChuZXdDb250ZW50cyAhPT0gY29udGVudHMpIHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZSwgbmV3Q29udGVudHMsICd1dGY4Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBVcGRhdGUgV2ViRHJpdmVyQWdlbnRSdW5uZXIgcHJvamVjdCBidW5kbGUgSUQgd2l0aCBuZXdCdW5kbGVJZC5cbiAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgcHJvamVjdCBmaWxlIGlzIGluIHRoZSBjb3JyZWN0IHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGFnZW50UGF0aCAtIFBhdGggdG8gdGhlIC54Y29kZXByb2ogZGlyZWN0b3J5LlxuICogQHBhcmFtIHtzdHJpbmd9IG5ld0J1bmRsZUlkIHRoZSBuZXcgYnVuZGxlIElEIHVzZWQgdG8gdXBkYXRlLlxuICovXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVQcm9qZWN0RmlsZSAoYWdlbnRQYXRoLCBuZXdCdW5kbGVJZCkge1xuICBsZXQgcHJvamVjdEZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGFnZW50UGF0aCwgUFJPSkVDVF9GSUxFKTtcbiAgdHJ5IHtcbiAgICAvLyBBc3N1bWluZyBwcm9qZWN0RmlsZVBhdGggaXMgaW4gdGhlIGNvcnJlY3Qgc3RhdGUsIGNyZWF0ZSAub2xkIGZyb20gcHJvamVjdEZpbGVQYXRoXG4gICAgYXdhaXQgZnMuY29weUZpbGUocHJvamVjdEZpbGVQYXRoLCBgJHtwcm9qZWN0RmlsZVBhdGh9Lm9sZGApO1xuICAgIGF3YWl0IHJlcGxhY2VJbkZpbGUocHJvamVjdEZpbGVQYXRoLCBuZXcgUmVnRXhwKF8uZXNjYXBlUmVnRXhwKFdEQV9SVU5ORVJfQlVORExFX0lEKSwgJ2cnKSwgbmV3QnVuZGxlSWQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgbG9nLmRlYnVnKGBTdWNjZXNzZnVsbHkgdXBkYXRlZCAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGJ1bmRsZSBpZCAnJHtuZXdCdW5kbGVJZH0nYCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgRXJyb3IgdXBkYXRpbmcgcHJvamVjdCBmaWxlOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGxvZy53YXJuKGBVbmFibGUgdG8gdXBkYXRlIHByb2plY3QgZmlsZSAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGAgK1xuICAgICAgYGJ1bmRsZSBpZCAnJHtuZXdCdW5kbGVJZH0nLiBXZWJEcml2ZXJBZ2VudCBtYXkgbm90IHN0YXJ0YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldCBXZWJEcml2ZXJBZ2VudFJ1bm5lciBwcm9qZWN0IGJ1bmRsZSBJRCB0byBjb3JyZWN0IHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGFnZW50UGF0aCAtIFBhdGggdG8gdGhlIC54Y29kZXByb2ogZGlyZWN0b3J5LlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNldFByb2plY3RGaWxlIChhZ2VudFBhdGgpIHtcbiAgY29uc3QgcHJvamVjdEZpbGVQYXRoID0gcGF0aC5qb2luKGFnZW50UGF0aCwgUFJPSkVDVF9GSUxFKTtcbiAgdHJ5IHtcbiAgICAvLyByZXN0b3JlIHByb2plY3RGaWxlUGF0aCBmcm9tIC5vbGQgZmlsZVxuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKGAke3Byb2plY3RGaWxlUGF0aH0ub2xkYCkpIHtcbiAgICAgIHJldHVybjsgLy8gbm8gbmVlZCB0byByZXNldFxuICAgIH1cbiAgICBhd2FpdCBmcy5tdihgJHtwcm9qZWN0RmlsZVBhdGh9Lm9sZGAsIHByb2plY3RGaWxlUGF0aCk7XG4gICAgbG9nLmRlYnVnKGBTdWNjZXNzZnVsbHkgcmVzZXQgJyR7cHJvamVjdEZpbGVQYXRofScgd2l0aCBidW5kbGUgaWQgJyR7V0RBX1JVTk5FUl9CVU5ETEVfSUR9J2ApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZGVidWcoYEVycm9yIHJlc2V0dGluZyBwcm9qZWN0IGZpbGU6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgbG9nLndhcm4oYFVuYWJsZSB0byByZXNldCBwcm9qZWN0IGZpbGUgJyR7cHJvamVjdEZpbGVQYXRofScgd2l0aCBgICtcbiAgICAgIGBidW5kbGUgaWQgJyR7V0RBX1JVTk5FUl9CVU5ETEVfSUR9Jy4gV2ViRHJpdmVyQWdlbnQgaGFzIGJlZW4gYCArXG4gICAgICBgbW9kaWZpZWQgYW5kIG5vdCByZXR1cm5lZCB0byB0aGUgb3JpZ2luYWwgc3RhdGUuYCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0UmVhbERldmljZVNlY3VyaXR5IChrZXljaGFpblBhdGgsIGtleWNoYWluUGFzc3dvcmQpIHtcbiAgbG9nLmRlYnVnKCdTZXR0aW5nIHNlY3VyaXR5IGZvciBpT1MgZGV2aWNlJyk7XG4gIGF3YWl0IGV4ZWMoJ3NlY3VyaXR5JywgWyctdicsICdsaXN0LWtleWNoYWlucycsICctcycsIGtleWNoYWluUGF0aF0pO1xuICBhd2FpdCBleGVjKCdzZWN1cml0eScsIFsnLXYnLCAndW5sb2NrLWtleWNoYWluJywgJy1wJywga2V5Y2hhaW5QYXNzd29yZCwga2V5Y2hhaW5QYXRoXSk7XG4gIGF3YWl0IGV4ZWMoJ3NlY3VyaXR5JywgWydzZXQta2V5Y2hhaW4tc2V0dGluZ3MnLCAnLXQnLCAnMzYwMCcsICctbCcsIGtleWNoYWluUGF0aF0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSAob3JnSWQsIHNpZ25pbmdJZCkge1xuICBsb2cuZGVidWcoYEdlbmVyYXRpbmcgeGNvZGUgY29uZmlnIGZpbGUgZm9yIG9yZ0lkICcke29yZ0lkfScgYW5kIHNpZ25pbmdJZCBgICtcbiAgICAgICAgICAgIGAnJHtzaWduaW5nSWR9J2ApO1xuICBjb25zdCBjb250ZW50cyA9IGBERVZFTE9QTUVOVF9URUFNID0gJHtvcmdJZH1cbkNPREVfU0lHTl9JREVOVElUWSA9ICR7c2lnbmluZ0lkfVxuYDtcbiAgY29uc3QgeGNjb25maWdQYXRoID0gYXdhaXQgdGVtcERpci5wYXRoKCdhcHBpdW0tdGVtcC54Y2NvbmZpZycpO1xuICBsb2cuZGVidWcoYFdyaXRpbmcgeGNvZGUgY29uZmlnIGZpbGUgdG8gJHt4Y2NvbmZpZ1BhdGh9YCk7XG4gIGF3YWl0IGZzLndyaXRlRmlsZSh4Y2NvbmZpZ1BhdGgsIGNvbnRlbnRzLCAndXRmOCcpO1xuICByZXR1cm4geGNjb25maWdQYXRoO1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIG9mIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICogQHR5cGVkZWYge09iamVjdH0gRGV2aWNlSW5mb1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGlzUmVhbERldmljZSAtIEVxdWFscyB0byB0cnVlIGlmIHRoZSBjdXJyZW50IGRldmljZSBpcyBhIHJlYWwgZGV2aWNlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdWRpZCAtIFRoZSBkZXZpY2UgVURJRC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGF0Zm9ybVZlcnNpb24gLSBUaGUgcGxhdGZvcm0gdmVyc2lvbiBvZiBPUy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGF0Zm9ybU5hbWUgLSBUaGUgcGxhdGZvcm0gbmFtZSBvZiBpT1MsIHR2T1NcbiovXG4vKipcbiAqIENyZWF0ZXMgeGN0ZXN0cnVuIGZpbGUgcGVyIGRldmljZSAmIHBsYXRmb3JtIHZlcnNpb24uXG4gKiBXZSBleHBlY3RzIHRvIGhhdmUgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lb3Mke3Nka1ZlcnNpb258cGxhdGZvcm1WZXJzaW9ufS1hcm02NC54Y3Rlc3RydW4gZm9yIHJlYWwgZGV2aWNlXG4gKiBhbmQgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lc2ltdWxhdG9yJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0teDg2XzY0LnhjdGVzdHJ1biBmb3Igc2ltdWxhdG9yIGxvY2F0ZWQgQGJvb3RzdHJhcFBhdGhcbiAqIE5ld2VyIFhjb2RlIChYY29kZSAxMC4wIGF0IGxlYXN0KSBnZW5lcmF0ZSB4Y3Rlc3RydW4gZmlsZSBmb2xsb3dpbmcgc2RrVmVyc2lvbi5cbiAqIGUuZy4gWGNvZGUgd2hpY2ggaGFzIGlPUyBTREsgVmVyc2lvbiAxMi4yIGdlbmVyYXRlIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZXNpbXVsYXRvci4yLXg4Nl82NC54Y3Rlc3RydW5cbiAqICAgICAgZXZlbiBpZiB0aGUgY2FwIGhhcyBwbGF0Zm9ybSB2ZXJzaW9uIDExLjRcbiAqXG4gKiBAcGFyYW0ge0RldmljZUluZm99IGRldmljZUluZm9cbiAqIEBwYXJhbSB7c3RyaW5nfSBzZGtWZXJzaW9uIC0gVGhlIFhjb2RlIFNESyB2ZXJzaW9uIG9mIE9TLlxuICogQHBhcmFtIHtzdHJpbmd9IGJvb3RzdHJhcFBhdGggLSBUaGUgZm9sZGVyIHBhdGggY29udGFpbmluZyB4Y3Rlc3RydW4gZmlsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB3ZGFSZW1vdGVQb3J0IC0gVGhlIHJlbW90ZSBwb3J0IFdEQSBpcyBsaXN0ZW5pbmcgb24uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJldHVybnMgeGN0ZXN0cnVuRmlsZVBhdGggZm9yIGdpdmVuIGRldmljZVxuICogQHRocm93cyBpZiBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVvcyR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LWFybTY0LnhjdGVzdHJ1biBmb3IgcmVhbCBkZXZpY2VcbiAqIG9yIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZXNpbXVsYXRvciR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LXg4Nl82NC54Y3Rlc3RydW4gZm9yIHNpbXVsYXRvciBpcyBub3QgZm91bmQgQGJvb3RzdHJhcFBhdGgsXG4gKiB0aGVuIGl0IHdpbGwgdGhyb3cgZmlsZSBub3QgZm91bmQgZXhjZXB0aW9uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNldFhjdGVzdHJ1bkZpbGUgKGRldmljZUluZm8sIHNka1ZlcnNpb24sIGJvb3RzdHJhcFBhdGgsIHdkYVJlbW90ZVBvcnQpIHtcbiAgY29uc3QgeGN0ZXN0cnVuRmlsZVBhdGggPSBhd2FpdCBnZXRYY3Rlc3RydW5GaWxlUGF0aChkZXZpY2VJbmZvLCBzZGtWZXJzaW9uLCBib290c3RyYXBQYXRoKTtcbiAgY29uc3QgeGN0ZXN0UnVuQ29udGVudCA9IGF3YWl0IHBsaXN0LnBhcnNlUGxpc3RGaWxlKHhjdGVzdHJ1bkZpbGVQYXRoKTtcbiAgY29uc3QgdXBkYXRlV0RBUG9ydCA9IGdldEFkZGl0aW9uYWxSdW5Db250ZW50KGRldmljZUluZm8ucGxhdGZvcm1OYW1lLCB3ZGFSZW1vdGVQb3J0KTtcbiAgY29uc3QgbmV3WGN0ZXN0UnVuQ29udGVudCA9IF8ubWVyZ2UoeGN0ZXN0UnVuQ29udGVudCwgdXBkYXRlV0RBUG9ydCk7XG4gIGF3YWl0IHBsaXN0LnVwZGF0ZVBsaXN0RmlsZSh4Y3Rlc3RydW5GaWxlUGF0aCwgbmV3WGN0ZXN0UnVuQ29udGVudCwgdHJ1ZSk7XG5cbiAgcmV0dXJuIHhjdGVzdHJ1bkZpbGVQYXRoO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgV0RBIG9iamVjdCB3aGljaCBhcHBlbmRzIGV4aXN0aW5nIHhjdGVzdCBydW5uZXIgY29udGVudFxuICogQHBhcmFtIHtzdHJpbmd9IHBsYXRmb3JtTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwbGF0Zm9ybVxuICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcmV0dXJuIHtvYmplY3R9IHJldHVybnMgYSBydW5uZXIgb2JqZWN0IHdoaWNoIGhhcyBVU0VfUE9SVFxuICovXG5mdW5jdGlvbiBnZXRBZGRpdGlvbmFsUnVuQ29udGVudCAocGxhdGZvcm1OYW1lLCB3ZGFSZW1vdGVQb3J0KSB7XG4gIGNvbnN0IHJ1bm5lciA9IGBXZWJEcml2ZXJBZ2VudFJ1bm5lciR7aXNUdk9TKHBsYXRmb3JtTmFtZSkgPyAnX3R2T1MnIDogJyd9YDtcblxuICByZXR1cm4ge1xuICAgIFtydW5uZXJdOiB7XG4gICAgICBFbnZpcm9ubWVudFZhcmlhYmxlczoge1xuICAgICAgICAvLyBVU0VfUE9SVCBtdXN0IGJlICdzdHJpbmcnXG4gICAgICAgIFVTRV9QT1JUOiBgJHt3ZGFSZW1vdGVQb3J0fWBcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBwYXRoIG9mIHhjdGVzdHJ1biBpZiBpdCBleGlzdHNcbiAqIEBwYXJhbSB7RGV2aWNlSW5mb30gZGV2aWNlSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IHNka1ZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9vdHN0cmFwUGF0aCAtIFRoZSBmb2xkZXIgcGF0aCBjb250YWluaW5nIHhjdGVzdHJ1biBmaWxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRYY3Rlc3RydW5GaWxlUGF0aCAoZGV2aWNlSW5mbywgc2RrVmVyc2lvbiwgYm9vdHN0cmFwUGF0aCkge1xuICAvLyBGaXJzdCB0cnkgdGhlIFNESyBwYXRoLCBmb3IgWGNvZGUgMTAgKGF0IGxlYXN0KVxuICBjb25zdCBzZGtCYXNlZCA9IFtcbiAgICBwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgYCR7ZGV2aWNlSW5mby51ZGlkfV8ke3Nka1ZlcnNpb259LnhjdGVzdHJ1bmApLFxuICAgIHNka1ZlcnNpb24sXG4gIF07XG4gIC8vIE5leHQgdHJ5IFBsYXRmb3JtIHBhdGgsIGZvciBlYXJsaWVyIFhjb2RlIHZlcnNpb25zXG4gIGNvbnN0IHBsYXRmb3JtQmFzZWQgPSBbXG4gICAgcGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGAke2RldmljZUluZm8udWRpZH1fJHtkZXZpY2VJbmZvLnBsYXRmb3JtVmVyc2lvbn0ueGN0ZXN0cnVuYCksXG4gICAgZGV2aWNlSW5mby5wbGF0Zm9ybVZlcnNpb24sXG4gIF07XG5cbiAgZm9yIChjb25zdCBbZmlsZVBhdGgsIHZlcnNpb25dIG9mIFtzZGtCYXNlZCwgcGxhdGZvcm1CYXNlZF0pIHtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGZpbGVQYXRoKSkge1xuICAgICAgbG9nLmluZm8oYFVzaW5nICcke2ZpbGVQYXRofScgYXMgeGN0ZXN0cnVuIGZpbGVgKTtcbiAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICB9XG4gICAgY29uc3Qgb3JpZ2luYWxYY3Rlc3RydW5GaWxlID0gcGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGdldFhjdGVzdHJ1bkZpbGVOYW1lKGRldmljZUluZm8sIHZlcnNpb24pKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKG9yaWdpbmFsWGN0ZXN0cnVuRmlsZSkpIHtcbiAgICAgIC8vIElmIHRoaXMgaXMgZmlyc3QgdGltZSBydW4gZm9yIGdpdmVuIGRldmljZSwgdGhlbiBmaXJzdCBnZW5lcmF0ZSB4Y3Rlc3RydW4gZmlsZSBmb3IgZGV2aWNlLlxuICAgICAgLy8gV2UgbmVlZCB0byBoYXZlIGEgeGN0ZXN0cnVuIGZpbGUgKipwZXIgZGV2aWNlKiogYmVjYXVzZSB3ZSBjYW50IG5vdCBoYXZlIHNhbWUgd2RhIHBvcnQgZm9yIGFsbCBkZXZpY2VzLlxuICAgICAgYXdhaXQgZnMuY29weUZpbGUob3JpZ2luYWxYY3Rlc3RydW5GaWxlLCBmaWxlUGF0aCk7XG4gICAgICBsb2cuaW5mbyhgVXNpbmcgJyR7ZmlsZVBhdGh9JyBhcyB4Y3Rlc3RydW4gZmlsZSBjb3BpZWQgYnkgJyR7b3JpZ2luYWxYY3Rlc3RydW5GaWxlfSdgKTtcbiAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICB9XG4gIH1cblxuICBsb2cuZXJyb3JBbmRUaHJvdyhgSWYgeW91IGFyZSB1c2luZyAndXNlWGN0ZXN0cnVuRmlsZScgY2FwYWJpbGl0eSB0aGVuIHlvdSBgICtcbiAgICBgbmVlZCB0byBoYXZlIGEgeGN0ZXN0cnVuIGZpbGUgKGV4cGVjdGVkOiBgICtcbiAgICBgJyR7cGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGdldFhjdGVzdHJ1bkZpbGVOYW1lKGRldmljZUluZm8sIHNka1ZlcnNpb24pKX0nKWApO1xufVxuXG5cbi8qKlxuICogUmV0dXJuIHRoZSBuYW1lIG9mIHhjdGVzdHJ1biBmaWxlXG4gKiBAcGFyYW0ge0RldmljZUluZm99IGRldmljZUluZm9cbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uIC0gVGhlIFhjb2RlIFNESyB2ZXJzaW9uIG9mIE9TLlxuICogQHJldHVybiB7c3RyaW5nfSByZXR1cm5zIHhjdGVzdHJ1bkZpbGVQYXRoIGZvciBnaXZlbiBkZXZpY2VcbiAqL1xuZnVuY3Rpb24gZ2V0WGN0ZXN0cnVuRmlsZU5hbWUgKGRldmljZUluZm8sIHZlcnNpb24pIHtcbiAgcmV0dXJuIGlzVHZPUyhkZXZpY2VJbmZvLnBsYXRmb3JtTmFtZSlcbiAgICA/IGBXZWJEcml2ZXJBZ2VudFJ1bm5lcl90dk9TX2FwcGxldHYke2RldmljZUluZm8uaXNSZWFsRGV2aWNlID8gYG9zJHt2ZXJzaW9ufS1hcm02NGAgOiBgc2ltdWxhdG9yJHt2ZXJzaW9ufS14ODZfNjRgfS54Y3Rlc3RydW5gXG4gICAgOiBgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lJHtkZXZpY2VJbmZvLmlzUmVhbERldmljZSA/IGBvcyR7dmVyc2lvbn0tYXJtNjRgIDogYHNpbXVsYXRvciR7dmVyc2lvbn0teDg2XzY0YH0ueGN0ZXN0cnVuYDtcbn1cblxuYXN5bmMgZnVuY3Rpb24ga2lsbFByb2Nlc3MgKG5hbWUsIHByb2MpIHtcbiAgaWYgKCFwcm9jIHx8ICFwcm9jLmlzUnVubmluZykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZy5pbmZvKGBTaHV0dGluZyBkb3duICcke25hbWV9JyBwcm9jZXNzIChwaWQgJyR7cHJvYy5wcm9jLnBpZH0nKWApO1xuXG4gIGxvZy5pbmZvKGBTZW5kaW5nICdTSUdURVJNJy4uLmApO1xuICB0cnkge1xuICAgIGF3YWl0IHByb2Muc3RvcCgnU0lHVEVSTScsIDEwMDApO1xuICAgIHJldHVybjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcyhgUHJvY2VzcyBkaWRuJ3QgZW5kIGFmdGVyYCkpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGAke25hbWV9IHByb2Nlc3MgZGlkIG5vdCBlbmQgaW4gYSB0aW1lbHkgZmFzaGlvbjogJyR7ZXJyLm1lc3NhZ2V9Jy5gKTtcbiAgfVxuXG4gIGxvZy5pbmZvKGBTZW5kaW5nICdTSUdLSUxMJy4uLmApO1xuICB0cnkge1xuICAgIGF3YWl0IHByb2Muc3RvcCgnU0lHS0lMTCcpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBjdXJyZW50bHkgcnVubmluZycpKSB7XG4gICAgICAvLyB0aGUgcHJvY2VzcyBlbmRlZCBidXQgZm9yIHNvbWUgcmVhc29uIHdlIHdlcmUgbm90IGluZm9ybWVkXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIGludGVnZXIuXG4gKlxuICogQHJldHVybiB7bnVtYmVyfSBBIHJhbmRvbSBpbnRlZ2VyIG51bWJlciBpbiByYW5nZSBbbG93LCBoaWdodCkuIGBsb3dgYCBpcyBpbmNsdXNpdmUgYW5kIGBoaWdoYCBpcyBleGNsdXNpdmUuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbUludCAobG93LCBoaWdoKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaGlnaCAtIGxvdykgKyBsb3cpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBXREEgdXBncmFkZSB0aW1lc3RhbXBcbiAqXG4gKiBAcmV0dXJuIHs/bnVtYmVyfSBUaGUgVU5JWCB0aW1lc3RhbXAgb2YgdGhlIHBhY2thZ2UgbWFuaWZlc3QuIFRoZSBtYW5pZmVzdCBvbmx5IGdldHMgbW9kaWZpZWQgb25cbiAqIHBhY2thZ2UgdXBncmFkZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCAoKSB7XG4gIGNvbnN0IHBhY2thZ2VNYW5pZmVzdCA9IHBhdGgucmVzb2x2ZShST09UX0RJUiwgJ3BhY2thZ2UuanNvbicpO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwYWNrYWdlTWFuaWZlc3QpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qge210aW1lfSA9IGF3YWl0IGZzLnN0YXQocGFja2FnZU1hbmlmZXN0KTtcbiAgcmV0dXJuIG10aW1lLmdldFRpbWUoKTtcbn1cblxuLyoqXG4gKiBLaWxscyBydW5uaW5nIFhDVGVzdCBwcm9jZXNzZXMgZm9yIHRoZSBwYXJ0aWN1bGFyIGRldmljZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdWRpZCAtIFRoZSBkZXZpY2UgVURJRC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNTaW11bGF0b3IgLSBFcXVhbHMgdG8gdHJ1ZSBpZiB0aGUgY3VycmVudCBkZXZpY2UgaXMgYSBTaW11bGF0b3JcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzZXRUZXN0UHJvY2Vzc2VzICh1ZGlkLCBpc1NpbXVsYXRvcikge1xuICBjb25zdCBwcm9jZXNzUGF0dGVybnMgPSBbYHhjb2RlYnVpbGQuKiR7dWRpZH1gXTtcbiAgaWYgKGlzU2ltdWxhdG9yKSB7XG4gICAgcHJvY2Vzc1BhdHRlcm5zLnB1c2goYCR7dWRpZH0uKlhDVFJ1bm5lcmApO1xuICAgIC8vIFRoZSBwYXR0ZXJuIHRvIGZpbmQgaW4gY2FzZSBpZGIgd2FzIHVzZWRcbiAgICBwcm9jZXNzUGF0dGVybnMucHVzaChgeGN0ZXN0Lioke3VkaWR9YCk7XG4gIH1cbiAgbG9nLmRlYnVnKGBLaWxsaW5nIHJ1bm5pbmcgcHJvY2Vzc2VzICcke3Byb2Nlc3NQYXR0ZXJucy5qb2luKCcsICcpfScgZm9yIHRoZSBkZXZpY2UgJHt1ZGlkfS4uLmApO1xuICBhd2FpdCBCLmFsbChwcm9jZXNzUGF0dGVybnMubWFwKGtpbGxBcHBVc2luZ1BhdHRlcm4pKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIElEcyBvZiBwcm9jZXNzZXMgbGlzdGVuaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHN5c3RlbSBwb3J0LlxuICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhcHBseSBhZGRpdGlvbmFsIGZpbHRlcmluZyBiYXNlZCBvbiB0aGVcbiAqIHByb2Nlc3MgY29tbWFuZCBsaW5lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gcG9ydCAtIFRoZSBwb3J0IG51bWJlci5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmaWx0ZXJpbmdGdW5jIC0gT3B0aW9uYWwgbGFtYmRhIGZ1bmN0aW9uLCB3aGljaFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlcyBjb21tYW5kIGxpbmUgc3RyaW5nIG9mIHRoZSBwYXJ0aWN1bGFyIHByb2Nlc3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuaW5nIG9uIGdpdmVuIHBvcnQsIGFuZCBpcyBleHBlY3RlZCB0byByZXR1cm5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWl0aGVyIHRydWUgb3IgZmFsc2UgdG8gaW5jbHVkZS9leGNsdWRlIHRoZSBjb3JyZXNwb25kaW5nIFBJRFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSByZXN1bHRpbmcgYXJyYXkuXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gLSB0aGUgbGlzdCBvZiBtYXRjaGVkIHByb2Nlc3MgaWRzLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRQSURzTGlzdGVuaW5nT25Qb3J0IChwb3J0LCBmaWx0ZXJpbmdGdW5jID0gbnVsbCkge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgdHJ5IHtcbiAgICAvLyBUaGlzIG9ubHkgd29ya3Mgc2luY2UgTWFjIE9TIFggRWwgQ2FwaXRhblxuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygnbHNvZicsIFsnLXRpJywgYHRjcDoke3BvcnR9YF0pO1xuICAgIHJlc3VsdC5wdXNoKC4uLihzdGRvdXQudHJpbSgpLnNwbGl0KC9cXG4rLykpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlLmNvZGUgIT09IDEpIHtcbiAgICAgIC8vIGNvZGUgMSBtZWFucyBubyBwcm9jZXNzZXMuIE90aGVyIGVycm9ycyBuZWVkIHJlcG9ydGluZ1xuICAgICAgbG9nLmRlYnVnKGBFcnJvciBnZXR0aW5nIHByb2Nlc3NlcyBsaXN0ZW5pbmcgb24gcG9ydCAnJHtwb3J0fSc6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFfLmlzRnVuY3Rpb24oZmlsdGVyaW5nRnVuYykpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiBhd2FpdCBCLmZpbHRlcihyZXN1bHQsIGFzeW5jIChwaWQpID0+IHtcbiAgICBsZXQgc3Rkb3V0O1xuICAgIHRyeSB7XG4gICAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCdwcycsIFsnLXAnLCBwaWQsICctbycsICdjb21tYW5kJ10pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5jb2RlID09PSAxKSB7XG4gICAgICAgIC8vIFRoZSBwcm9jZXNzIGRvZXMgbm90IGV4aXN0IGFueW1vcmUsIHRoZXJlJ3Mgbm90aGluZyB0byBmaWx0ZXJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IGZpbHRlcmluZ0Z1bmMoc3Rkb3V0KTtcbiAgfSk7XG59XG5cbmV4cG9ydCB7IHVwZGF0ZVByb2plY3RGaWxlLCByZXNldFByb2plY3RGaWxlLCBzZXRSZWFsRGV2aWNlU2VjdXJpdHksXG4gIGdldEFkZGl0aW9uYWxSdW5Db250ZW50LCBnZXRYY3Rlc3RydW5GaWxlTmFtZSwgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUsXG4gIHNldFhjdGVzdHJ1bkZpbGUsIGdldFhjdGVzdHJ1bkZpbGVQYXRoLCBraWxsUHJvY2VzcywgcmFuZG9tSW50LFxuICBnZXRXREFVcGdyYWRlVGltZXN0YW1wLCByZXNldFRlc3RQcm9jZXNzZXMsXG4gIGdldFBJRHNMaXN0ZW5pbmdPblBvcnQsIGtpbGxBcHBVc2luZ1BhdHRlcm4sIGlzVHZPUyxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFF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
317
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3V0aWxzLmpzIiwibmFtZXMiOlsiUk9PVF9ESVIiLCJwYXRoIiwiYmFzZW5hbWUiLCJfX2Rpcm5hbWUiLCJyZXNvbHZlIiwicHJvY2VzcyIsImVudiIsIk5PX1BSRUNPTVBJTEUiLCJQUk9KRUNUX0ZJTEUiLCJnZXRQSURzVXNpbmdQYXR0ZXJuIiwicGF0dGVybiIsImFyZ3MiLCJzdGRvdXQiLCJleGVjIiwic3BsaXQiLCJtYXAiLCJ4IiwicGFyc2VJbnQiLCJmaWx0ZXIiLCJfIiwiaXNJbnRlZ2VyIiwiZXJyIiwibG9nIiwiZGVidWciLCJqb2luIiwiY29kZSIsImtpbGxBcHBVc2luZ1BhdHRlcm4iLCJwZ3JlcFBhdHRlcm4iLCJzaWduYWxzIiwic2lnbmFsIiwibWF0Y2hlZFBpZHMiLCJpc0VtcHR5IiwibWVzc2FnZSIsImxhc3QiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwicGlkQ2hlY2tQcm9taXNlcyIsInBpZCIsInRoZW4iLCJjYXRjaCIsIkIiLCJhbGwiLCJldmVyeSIsIndhaXRNcyIsImludGVydmFsTXMiLCJpZ24iLCJpc1R2T1MiLCJwbGF0Zm9ybU5hbWUiLCJ0b0xvd2VyIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwicmVwbGFjZUluRmlsZSIsImZpbGUiLCJmaW5kIiwicmVwbGFjZSIsImNvbnRlbnRzIiwiZnMiLCJyZWFkRmlsZSIsIm5ld0NvbnRlbnRzIiwid3JpdGVGaWxlIiwidXBkYXRlUHJvamVjdEZpbGUiLCJhZ2VudFBhdGgiLCJuZXdCdW5kbGVJZCIsInByb2plY3RGaWxlUGF0aCIsImNvcHlGaWxlIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJ3YXJuIiwicmVzZXRQcm9qZWN0RmlsZSIsImV4aXN0cyIsIm12Iiwic2V0UmVhbERldmljZVNlY3VyaXR5Iiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsImdlbmVyYXRlWGNvZGVDb25maWdGaWxlIiwib3JnSWQiLCJzaWduaW5nSWQiLCJ4Y2NvbmZpZ1BhdGgiLCJ0ZW1wRGlyIiwic2V0WGN0ZXN0cnVuRmlsZSIsImRldmljZUluZm8iLCJzZGtWZXJzaW9uIiwiYm9vdHN0cmFwUGF0aCIsIndkYVJlbW90ZVBvcnQiLCJ4Y3Rlc3RydW5GaWxlUGF0aCIsImdldFhjdGVzdHJ1bkZpbGVQYXRoIiwieGN0ZXN0UnVuQ29udGVudCIsInBsaXN0IiwicGFyc2VQbGlzdEZpbGUiLCJ1cGRhdGVXREFQb3J0IiwiZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQiLCJuZXdYY3Rlc3RSdW5Db250ZW50IiwibWVyZ2UiLCJ1cGRhdGVQbGlzdEZpbGUiLCJydW5uZXIiLCJFbnZpcm9ubWVudFZhcmlhYmxlcyIsIlVTRV9QT1JUIiwic2RrQmFzZWQiLCJ1ZGlkIiwicGxhdGZvcm1CYXNlZCIsInBsYXRmb3JtVmVyc2lvbiIsImZpbGVQYXRoIiwidmVyc2lvbiIsImluZm8iLCJvcmlnaW5hbFhjdGVzdHJ1bkZpbGUiLCJnZXRYY3Rlc3RydW5GaWxlTmFtZSIsImVycm9yQW5kVGhyb3ciLCJpc1JlYWxEZXZpY2UiLCJraWxsUHJvY2VzcyIsIm5hbWUiLCJwcm9jIiwiaXNSdW5uaW5nIiwic3RvcCIsImluY2x1ZGVzIiwicmFuZG9tSW50IiwibG93IiwiaGlnaCIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImdldFdEQVVwZ3JhZGVUaW1lc3RhbXAiLCJwYWNrYWdlTWFuaWZlc3QiLCJtdGltZSIsInN0YXQiLCJnZXRUaW1lIiwicmVzZXRUZXN0UHJvY2Vzc2VzIiwiaXNTaW11bGF0b3IiLCJwcm9jZXNzUGF0dGVybnMiLCJwdXNoIiwiZ2V0UElEc0xpc3RlbmluZ09uUG9ydCIsInBvcnQiLCJmaWx0ZXJpbmdGdW5jIiwicmVzdWx0IiwidHJpbSIsImUiLCJzdGRlcnIiLCJpc0Z1bmN0aW9uIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZzLCB0ZW1wRGlyLCBwbGlzdCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBXREFfUlVOTkVSX0JVTkRMRV9JRCwgUExBVEZPUk1fTkFNRV9UVk9TIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcblxuY29uc3QgUk9PVF9ESVIgPSBwYXRoLmJhc2VuYW1lKF9fZGlybmFtZSkgPT09ICdsaWInXG4gID8gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgcHJvY2Vzcy5lbnYuTk9fUFJFQ09NUElMRSA/ICcuLicgOiAnLi4vLi4nKVxuICA6IF9fZGlybmFtZTtcbmNvbnN0IFBST0pFQ1RfRklMRSA9ICdwcm9qZWN0LnBieHByb2onO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRQSURzVXNpbmdQYXR0ZXJuIChwYXR0ZXJuKSB7XG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgJy1pZicsIC8vIGNhc2UgaW5zZW5zaXRpdmUsIGZ1bGwgY21kbGluZSBtYXRjaFxuICAgIHBhdHRlcm4sXG4gIF07XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdwZ3JlcCcsIGFyZ3MpO1xuICAgIHJldHVybiBzdGRvdXQuc3BsaXQoL1xccysvKVxuICAgICAgLm1hcCgoeCkgPT4gcGFyc2VJbnQoeCwgMTApKVxuICAgICAgLmZpbHRlcihfLmlzSW50ZWdlcilcbiAgICAgIC5tYXAoKHgpID0+IGAke3h9YCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgJ3BncmVwICR7YXJncy5qb2luKCcgJyl9JyBkaWRuJ3QgZGV0ZWN0IGFueSBtYXRjaGluZyBwcm9jZXNzZXMuIFJldHVybiBjb2RlOiAke2Vyci5jb2RlfWApO1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBraWxsQXBwVXNpbmdQYXR0ZXJuIChwZ3JlcFBhdHRlcm4pIHtcbiAgY29uc3Qgc2lnbmFscyA9IFsyLCAxNSwgOV07XG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIHNpZ25hbHMpIHtcbiAgICBjb25zdCBtYXRjaGVkUGlkcyA9IGF3YWl0IGdldFBJRHNVc2luZ1BhdHRlcm4ocGdyZXBQYXR0ZXJuKTtcbiAgICBpZiAoXy5pc0VtcHR5KG1hdGNoZWRQaWRzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhcmdzID0gW2AtJHtzaWduYWx9YCwgLi4ubWF0Y2hlZFBpZHNdO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKCdraWxsJywgYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZGVidWcoYGtpbGwgJHthcmdzLmpvaW4oJyAnKX0gLT4gJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgaWYgKHNpZ25hbCA9PT0gXy5sYXN0KHNpZ25hbHMpKSB7XG4gICAgICAvLyB0aGVyZSBpcyBubyBuZWVkIHRvIHdhaXQgYWZ0ZXIgU0lHS0lMTFxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBpZENoZWNrUHJvbWlzZXMgPSBtYXRjaGVkUGlkc1xuICAgICAgICAgIC5tYXAoKHBpZCkgPT4gZXhlYygna2lsbCcsIFsnLTAnLCBwaWRdKVxuICAgICAgICAgICAgLy8gdGhlIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmVcbiAgICAgICAgICAgIC50aGVuKCgpID0+IGZhbHNlKVxuICAgICAgICAgICAgLy8gdGhlIHByb2Nlc3MgaXMgZGVhZFxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHRydWUpXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBCLmFsbChwaWRDaGVja1Byb21pc2VzKSlcbiAgICAgICAgICAuZXZlcnkoKHgpID0+IHggPT09IHRydWUpO1xuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IDEwMDAsXG4gICAgICAgIGludGVydmFsTXM6IDEwMCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgLy8gdHJ5IHRoZSBuZXh0IHNpZ25hbFxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybU5hbWUgaXMgdHZPU1xuICogQHBhcmFtIHtzdHJpbmd9IHBsYXRmb3JtTmFtZSBUaGUgbmFtZSBvZiB0aGUgcGxhdG9ybVxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybU5hbWUgaXMgdHZPU1xuICovXG5mdW5jdGlvbiBpc1R2T1MgKHBsYXRmb3JtTmFtZSkge1xuICByZXR1cm4gXy50b0xvd2VyKHBsYXRmb3JtTmFtZSkgPT09IF8udG9Mb3dlcihQTEFURk9STV9OQU1FX1RWT1MpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXBsYWNlSW5GaWxlIChmaWxlLCBmaW5kLCByZXBsYWNlKSB7XG4gIGxldCBjb250ZW50cyA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGUsICd1dGY4Jyk7XG5cbiAgbGV0IG5ld0NvbnRlbnRzID0gY29udGVudHMucmVwbGFjZShmaW5kLCByZXBsYWNlKTtcbiAgaWYgKG5ld0NvbnRlbnRzICE9PSBjb250ZW50cykge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlLCBuZXdDb250ZW50cywgJ3V0ZjgnKTtcbiAgfVxufVxuXG4vKipcbiAqIFVwZGF0ZSBXZWJEcml2ZXJBZ2VudFJ1bm5lciBwcm9qZWN0IGJ1bmRsZSBJRCB3aXRoIG5ld0J1bmRsZUlkLlxuICogVGhpcyBtZXRob2QgYXNzdW1lcyBwcm9qZWN0IGZpbGUgaXMgaW4gdGhlIGNvcnJlY3Qgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWdlbnRQYXRoIC0gUGF0aCB0byB0aGUgLnhjb2RlcHJvaiBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmV3QnVuZGxlSWQgdGhlIG5ldyBidW5kbGUgSUQgdXNlZCB0byB1cGRhdGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByb2plY3RGaWxlIChhZ2VudFBhdGgsIG5ld0J1bmRsZUlkKSB7XG4gIGxldCBwcm9qZWN0RmlsZVBhdGggPSBwYXRoLnJlc29sdmUoYWdlbnRQYXRoLCBQUk9KRUNUX0ZJTEUpO1xuICB0cnkge1xuICAgIC8vIEFzc3VtaW5nIHByb2plY3RGaWxlUGF0aCBpcyBpbiB0aGUgY29ycmVjdCBzdGF0ZSwgY3JlYXRlIC5vbGQgZnJvbSBwcm9qZWN0RmlsZVBhdGhcbiAgICBhd2FpdCBmcy5jb3B5RmlsZShwcm9qZWN0RmlsZVBhdGgsIGAke3Byb2plY3RGaWxlUGF0aH0ub2xkYCk7XG4gICAgYXdhaXQgcmVwbGFjZUluRmlsZShwcm9qZWN0RmlsZVBhdGgsIG5ldyBSZWdFeHAoXy5lc2NhcGVSZWdFeHAoV0RBX1JVTk5FUl9CVU5ETEVfSUQpLCAnZycpLCBuZXdCdW5kbGVJZCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgICBsb2cuZGVidWcoYFN1Y2Nlc3NmdWxseSB1cGRhdGVkICcke3Byb2plY3RGaWxlUGF0aH0nIHdpdGggYnVuZGxlIGlkICcke25ld0J1bmRsZUlkfSdgKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmRlYnVnKGBFcnJvciB1cGRhdGluZyBwcm9qZWN0IGZpbGU6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgbG9nLndhcm4oYFVuYWJsZSB0byB1cGRhdGUgcHJvamVjdCBmaWxlICcke3Byb2plY3RGaWxlUGF0aH0nIHdpdGggYCArXG4gICAgICBgYnVuZGxlIGlkICcke25ld0J1bmRsZUlkfScuIFdlYkRyaXZlckFnZW50IG1heSBub3Qgc3RhcnRgKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0IFdlYkRyaXZlckFnZW50UnVubmVyIHByb2plY3QgYnVuZGxlIElEIHRvIGNvcnJlY3Qgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWdlbnRQYXRoIC0gUGF0aCB0byB0aGUgLnhjb2RlcHJvaiBkaXJlY3RvcnkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc2V0UHJvamVjdEZpbGUgKGFnZW50UGF0aCkge1xuICBjb25zdCBwcm9qZWN0RmlsZVBhdGggPSBwYXRoLmpvaW4oYWdlbnRQYXRoLCBQUk9KRUNUX0ZJTEUpO1xuICB0cnkge1xuICAgIC8vIHJlc3RvcmUgcHJvamVjdEZpbGVQYXRoIGZyb20gLm9sZCBmaWxlXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoYCR7cHJvamVjdEZpbGVQYXRofS5vbGRgKSkge1xuICAgICAgcmV0dXJuOyAvLyBubyBuZWVkIHRvIHJlc2V0XG4gICAgfVxuICAgIGF3YWl0IGZzLm12KGAke3Byb2plY3RGaWxlUGF0aH0ub2xkYCwgcHJvamVjdEZpbGVQYXRoKTtcbiAgICBsb2cuZGVidWcoYFN1Y2Nlc3NmdWxseSByZXNldCAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGJ1bmRsZSBpZCAnJHtXREFfUlVOTkVSX0JVTkRMRV9JRH0nYCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgRXJyb3IgcmVzZXR0aW5nIHByb2plY3QgZmlsZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBsb2cud2FybihgVW5hYmxlIHRvIHJlc2V0IHByb2plY3QgZmlsZSAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGAgK1xuICAgICAgYGJ1bmRsZSBpZCAnJHtXREFfUlVOTkVSX0JVTkRMRV9JRH0nLiBXZWJEcml2ZXJBZ2VudCBoYXMgYmVlbiBgICtcbiAgICAgIGBtb2RpZmllZCBhbmQgbm90IHJldHVybmVkIHRvIHRoZSBvcmlnaW5hbCBzdGF0ZS5gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzZXRSZWFsRGV2aWNlU2VjdXJpdHkgKGtleWNoYWluUGF0aCwga2V5Y2hhaW5QYXNzd29yZCkge1xuICBsb2cuZGVidWcoJ1NldHRpbmcgc2VjdXJpdHkgZm9yIGlPUyBkZXZpY2UnKTtcbiAgYXdhaXQgZXhlYygnc2VjdXJpdHknLCBbJy12JywgJ2xpc3Qta2V5Y2hhaW5zJywgJy1zJywga2V5Y2hhaW5QYXRoXSk7XG4gIGF3YWl0IGV4ZWMoJ3NlY3VyaXR5JywgWyctdicsICd1bmxvY2sta2V5Y2hhaW4nLCAnLXAnLCBrZXljaGFpblBhc3N3b3JkLCBrZXljaGFpblBhdGhdKTtcbiAgYXdhaXQgZXhlYygnc2VjdXJpdHknLCBbJ3NldC1rZXljaGFpbi1zZXR0aW5ncycsICctdCcsICczNjAwJywgJy1sJywga2V5Y2hhaW5QYXRoXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlWGNvZGVDb25maWdGaWxlIChvcmdJZCwgc2lnbmluZ0lkKSB7XG4gIGxvZy5kZWJ1ZyhgR2VuZXJhdGluZyB4Y29kZSBjb25maWcgZmlsZSBmb3Igb3JnSWQgJyR7b3JnSWR9JyBhbmQgc2lnbmluZ0lkIGAgK1xuICAgICAgICAgICAgYCcke3NpZ25pbmdJZH0nYCk7XG4gIGNvbnN0IGNvbnRlbnRzID0gYERFVkVMT1BNRU5UX1RFQU0gPSAke29yZ0lkfVxuQ09ERV9TSUdOX0lERU5USVRZID0gJHtzaWduaW5nSWR9XG5gO1xuICBjb25zdCB4Y2NvbmZpZ1BhdGggPSBhd2FpdCB0ZW1wRGlyLnBhdGgoJ2FwcGl1bS10ZW1wLnhjY29uZmlnJyk7XG4gIGxvZy5kZWJ1ZyhgV3JpdGluZyB4Y29kZSBjb25maWcgZmlsZSB0byAke3hjY29uZmlnUGF0aH1gKTtcbiAgYXdhaXQgZnMud3JpdGVGaWxlKHhjY29uZmlnUGF0aCwgY29udGVudHMsICd1dGY4Jyk7XG4gIHJldHVybiB4Y2NvbmZpZ1BhdGg7XG59XG5cbi8qKlxuICogSW5mb3JtYXRpb24gb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZXZpY2VJbmZvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaXNSZWFsRGV2aWNlIC0gRXF1YWxzIHRvIHRydWUgaWYgdGhlIGN1cnJlbnQgZGV2aWNlIGlzIGEgcmVhbCBkZXZpY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1ZGlkIC0gVGhlIGRldmljZSBVRElELlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYXRmb3JtVmVyc2lvbiAtIFRoZSBwbGF0Zm9ybSB2ZXJzaW9uIG9mIE9TLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYXRmb3JtTmFtZSAtIFRoZSBwbGF0Zm9ybSBuYW1lIG9mIGlPUywgdHZPU1xuKi9cbi8qKlxuICogQ3JlYXRlcyB4Y3Rlc3RydW4gZmlsZSBwZXIgZGV2aWNlICYgcGxhdGZvcm0gdmVyc2lvbi5cbiAqIFdlIGV4cGVjdHMgdG8gaGF2ZSBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVvcyR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LWFybTY0LnhjdGVzdHJ1biBmb3IgcmVhbCBkZXZpY2VcbiAqIGFuZCBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVzaW11bGF0b3Ike3Nka1ZlcnNpb258cGxhdGZvcm1WZXJzaW9ufS14ODZfNjQueGN0ZXN0cnVuIGZvciBzaW11bGF0b3IgbG9jYXRlZCBAYm9vdHN0cmFwUGF0aFxuICogTmV3ZXIgWGNvZGUgKFhjb2RlIDEwLjAgYXQgbGVhc3QpIGdlbmVyYXRlIHhjdGVzdHJ1biBmaWxlIGZvbGxvd2luZyBzZGtWZXJzaW9uLlxuICogZS5nLiBYY29kZSB3aGljaCBoYXMgaU9TIFNESyBWZXJzaW9uIDEyLjIgZ2VuZXJhdGUgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lc2ltdWxhdG9yLjIteDg2XzY0LnhjdGVzdHJ1blxuICogICAgICBldmVuIGlmIHRoZSBjYXAgaGFzIHBsYXRmb3JtIHZlcnNpb24gMTEuNFxuICpcbiAqIEBwYXJhbSB7RGV2aWNlSW5mb30gZGV2aWNlSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IHNka1ZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9vdHN0cmFwUGF0aCAtIFRoZSBmb2xkZXIgcGF0aCBjb250YWluaW5nIHhjdGVzdHJ1biBmaWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IHdkYVJlbW90ZVBvcnQgLSBUaGUgcmVtb3RlIHBvcnQgV0RBIGlzIGxpc3RlbmluZyBvbi5cbiAqIEByZXR1cm4ge3N0cmluZ30gcmV0dXJucyB4Y3Rlc3RydW5GaWxlUGF0aCBmb3IgZ2l2ZW4gZGV2aWNlXG4gKiBAdGhyb3dzIGlmIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZW9zJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0tYXJtNjQueGN0ZXN0cnVuIGZvciByZWFsIGRldmljZVxuICogb3IgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lc2ltdWxhdG9yJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0teDg2XzY0LnhjdGVzdHJ1biBmb3Igc2ltdWxhdG9yIGlzIG5vdCBmb3VuZCBAYm9vdHN0cmFwUGF0aCxcbiAqIHRoZW4gaXQgd2lsbCB0aHJvdyBmaWxlIG5vdCBmb3VuZCBleGNlcHRpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0WGN0ZXN0cnVuRmlsZSAoZGV2aWNlSW5mbywgc2RrVmVyc2lvbiwgYm9vdHN0cmFwUGF0aCwgd2RhUmVtb3RlUG9ydCkge1xuICBjb25zdCB4Y3Rlc3RydW5GaWxlUGF0aCA9IGF3YWl0IGdldFhjdGVzdHJ1bkZpbGVQYXRoKGRldmljZUluZm8sIHNka1ZlcnNpb24sIGJvb3RzdHJhcFBhdGgpO1xuICBjb25zdCB4Y3Rlc3RSdW5Db250ZW50ID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUoeGN0ZXN0cnVuRmlsZVBhdGgpO1xuICBjb25zdCB1cGRhdGVXREFQb3J0ID0gZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQoZGV2aWNlSW5mby5wbGF0Zm9ybU5hbWUsIHdkYVJlbW90ZVBvcnQpO1xuICBjb25zdCBuZXdYY3Rlc3RSdW5Db250ZW50ID0gXy5tZXJnZSh4Y3Rlc3RSdW5Db250ZW50LCB1cGRhdGVXREFQb3J0KTtcbiAgYXdhaXQgcGxpc3QudXBkYXRlUGxpc3RGaWxlKHhjdGVzdHJ1bkZpbGVQYXRoLCBuZXdYY3Rlc3RSdW5Db250ZW50LCB0cnVlKTtcblxuICByZXR1cm4geGN0ZXN0cnVuRmlsZVBhdGg7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBXREEgb2JqZWN0IHdoaWNoIGFwcGVuZHMgZXhpc3RpbmcgeGN0ZXN0IHJ1bm5lciBjb250ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gcGxhdGZvcm1OYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHBsYXRmb3JtXG4gKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvbiAtIFRoZSBYY29kZSBTREsgdmVyc2lvbiBvZiBPUy5cbiAqIEByZXR1cm4ge29iamVjdH0gcmV0dXJucyBhIHJ1bm5lciBvYmplY3Qgd2hpY2ggaGFzIFVTRV9QT1JUXG4gKi9cbmZ1bmN0aW9uIGdldEFkZGl0aW9uYWxSdW5Db250ZW50IChwbGF0Zm9ybU5hbWUsIHdkYVJlbW90ZVBvcnQpIHtcbiAgY29uc3QgcnVubmVyID0gYFdlYkRyaXZlckFnZW50UnVubmVyJHtpc1R2T1MocGxhdGZvcm1OYW1lKSA/ICdfdHZPUycgOiAnJ31gO1xuXG4gIHJldHVybiB7XG4gICAgW3J1bm5lcl06IHtcbiAgICAgIEVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgIC8vIFVTRV9QT1JUIG11c3QgYmUgJ3N0cmluZydcbiAgICAgICAgVVNFX1BPUlQ6IGAke3dkYVJlbW90ZVBvcnR9YFxuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHBhdGggb2YgeGN0ZXN0cnVuIGlmIGl0IGV4aXN0c1xuICogQHBhcmFtIHtEZXZpY2VJbmZvfSBkZXZpY2VJbmZvXG4gKiBAcGFyYW0ge3N0cmluZ30gc2RrVmVyc2lvbiAtIFRoZSBYY29kZSBTREsgdmVyc2lvbiBvZiBPUy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBib290c3RyYXBQYXRoIC0gVGhlIGZvbGRlciBwYXRoIGNvbnRhaW5pbmcgeGN0ZXN0cnVuIGZpbGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFhjdGVzdHJ1bkZpbGVQYXRoIChkZXZpY2VJbmZvLCBzZGtWZXJzaW9uLCBib290c3RyYXBQYXRoKSB7XG4gIC8vIEZpcnN0IHRyeSB0aGUgU0RLIHBhdGgsIGZvciBYY29kZSAxMCAoYXQgbGVhc3QpXG4gIGNvbnN0IHNka0Jhc2VkID0gW1xuICAgIHBhdGgucmVzb2x2ZShib290c3RyYXBQYXRoLCBgJHtkZXZpY2VJbmZvLnVkaWR9XyR7c2RrVmVyc2lvbn0ueGN0ZXN0cnVuYCksXG4gICAgc2RrVmVyc2lvbixcbiAgXTtcbiAgLy8gTmV4dCB0cnkgUGxhdGZvcm0gcGF0aCwgZm9yIGVhcmxpZXIgWGNvZGUgdmVyc2lvbnNcbiAgY29uc3QgcGxhdGZvcm1CYXNlZCA9IFtcbiAgICBwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgYCR7ZGV2aWNlSW5mby51ZGlkfV8ke2RldmljZUluZm8ucGxhdGZvcm1WZXJzaW9ufS54Y3Rlc3RydW5gKSxcbiAgICBkZXZpY2VJbmZvLnBsYXRmb3JtVmVyc2lvbixcbiAgXTtcblxuICBmb3IgKGNvbnN0IFtmaWxlUGF0aCwgdmVyc2lvbl0gb2YgW3Nka0Jhc2VkLCBwbGF0Zm9ybUJhc2VkXSkge1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgICBsb2cuaW5mbyhgVXNpbmcgJyR7ZmlsZVBhdGh9JyBhcyB4Y3Rlc3RydW4gZmlsZWApO1xuICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5hbFhjdGVzdHJ1bkZpbGUgPSBwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgZ2V0WGN0ZXN0cnVuRmlsZU5hbWUoZGV2aWNlSW5mbywgdmVyc2lvbikpO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMob3JpZ2luYWxYY3Rlc3RydW5GaWxlKSkge1xuICAgICAgLy8gSWYgdGhpcyBpcyBmaXJzdCB0aW1lIHJ1biBmb3IgZ2l2ZW4gZGV2aWNlLCB0aGVuIGZpcnN0IGdlbmVyYXRlIHhjdGVzdHJ1biBmaWxlIGZvciBkZXZpY2UuXG4gICAgICAvLyBXZSBuZWVkIHRvIGhhdmUgYSB4Y3Rlc3RydW4gZmlsZSAqKnBlciBkZXZpY2UqKiBiZWNhdXNlIHdlIGNhbnQgbm90IGhhdmUgc2FtZSB3ZGEgcG9ydCBmb3IgYWxsIGRldmljZXMuXG4gICAgICBhd2FpdCBmcy5jb3B5RmlsZShvcmlnaW5hbFhjdGVzdHJ1bkZpbGUsIGZpbGVQYXRoKTtcbiAgICAgIGxvZy5pbmZvKGBVc2luZyAnJHtmaWxlUGF0aH0nIGFzIHhjdGVzdHJ1biBmaWxlIGNvcGllZCBieSAnJHtvcmlnaW5hbFhjdGVzdHJ1bkZpbGV9J2ApO1xuICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgIH1cbiAgfVxuXG4gIGxvZy5lcnJvckFuZFRocm93KGBJZiB5b3UgYXJlIHVzaW5nICd1c2VYY3Rlc3RydW5GaWxlJyBjYXBhYmlsaXR5IHRoZW4geW91IGAgK1xuICAgIGBuZWVkIHRvIGhhdmUgYSB4Y3Rlc3RydW4gZmlsZSAoZXhwZWN0ZWQ6IGAgK1xuICAgIGAnJHtwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgZ2V0WGN0ZXN0cnVuRmlsZU5hbWUoZGV2aWNlSW5mbywgc2RrVmVyc2lvbikpfScpYCk7XG59XG5cblxuLyoqXG4gKiBSZXR1cm4gdGhlIG5hbWUgb2YgeGN0ZXN0cnVuIGZpbGVcbiAqIEBwYXJhbSB7RGV2aWNlSW5mb30gZGV2aWNlSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJldHVybnMgeGN0ZXN0cnVuRmlsZVBhdGggZm9yIGdpdmVuIGRldmljZVxuICovXG5mdW5jdGlvbiBnZXRYY3Rlc3RydW5GaWxlTmFtZSAoZGV2aWNlSW5mbywgdmVyc2lvbikge1xuICByZXR1cm4gaXNUdk9TKGRldmljZUluZm8ucGxhdGZvcm1OYW1lKVxuICAgID8gYFdlYkRyaXZlckFnZW50UnVubmVyX3R2T1NfYXBwbGV0diR7ZGV2aWNlSW5mby5pc1JlYWxEZXZpY2UgPyBgb3Mke3ZlcnNpb259LWFybTY0YCA6IGBzaW11bGF0b3Ike3ZlcnNpb259LXg4Nl82NGB9LnhjdGVzdHJ1bmBcbiAgICA6IGBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmUke2RldmljZUluZm8uaXNSZWFsRGV2aWNlID8gYG9zJHt2ZXJzaW9ufS1hcm02NGAgOiBgc2ltdWxhdG9yJHt2ZXJzaW9ufS14ODZfNjRgfS54Y3Rlc3RydW5gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBraWxsUHJvY2VzcyAobmFtZSwgcHJvYykge1xuICBpZiAoIXByb2MgfHwgIXByb2MuaXNSdW5uaW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nLmluZm8oYFNodXR0aW5nIGRvd24gJyR7bmFtZX0nIHByb2Nlc3MgKHBpZCAnJHtwcm9jLnByb2MucGlkfScpYCk7XG5cbiAgbG9nLmluZm8oYFNlbmRpbmcgJ1NJR1RFUk0nLi4uYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgcHJvYy5zdG9wKCdTSUdURVJNJywgMTAwMCk7XG4gICAgcmV0dXJuO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKGBQcm9jZXNzIGRpZG4ndCBlbmQgYWZ0ZXJgKSkge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYCR7bmFtZX0gcHJvY2VzcyBkaWQgbm90IGVuZCBpbiBhIHRpbWVseSBmYXNoaW9uOiAnJHtlcnIubWVzc2FnZX0nLmApO1xuICB9XG5cbiAgbG9nLmluZm8oYFNlbmRpbmcgJ1NJR0tJTEwnLi4uYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgcHJvYy5zdG9wKCdTSUdLSUxMJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnbm90IGN1cnJlbnRseSBydW5uaW5nJykpIHtcbiAgICAgIC8vIHRoZSBwcm9jZXNzIGVuZGVkIGJ1dCBmb3Igc29tZSByZWFzb24gd2Ugd2VyZSBub3QgaW5mb3JtZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gaW50ZWdlci5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgcmFuZG9tIGludGVnZXIgbnVtYmVyIGluIHJhbmdlIFtsb3csIGhpZ2h0KS4gYGxvd2BgIGlzIGluY2x1c2l2ZSBhbmQgYGhpZ2hgIGlzIGV4Y2x1c2l2ZS5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tSW50IChsb3csIGhpZ2gpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSArIGxvdyk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIFdEQSB1cGdyYWRlIHRpbWVzdGFtcFxuICpcbiAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBVTklYIHRpbWVzdGFtcCBvZiB0aGUgcGFja2FnZSBtYW5pZmVzdC4gVGhlIG1hbmlmZXN0IG9ubHkgZ2V0cyBtb2RpZmllZCBvblxuICogcGFja2FnZSB1cGdyYWRlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRXREFVcGdyYWRlVGltZXN0YW1wICgpIHtcbiAgY29uc3QgcGFja2FnZU1hbmlmZXN0ID0gcGF0aC5yZXNvbHZlKFJPT1RfRElSLCAncGFja2FnZS5qc29uJyk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHBhY2thZ2VNYW5pZmVzdCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB7bXRpbWV9ID0gYXdhaXQgZnMuc3RhdChwYWNrYWdlTWFuaWZlc3QpO1xuICByZXR1cm4gbXRpbWUuZ2V0VGltZSgpO1xufVxuXG4vKipcbiAqIEtpbGxzIHJ1bm5pbmcgWENUZXN0IHByb2Nlc3NlcyBmb3IgdGhlIHBhcnRpY3VsYXIgZGV2aWNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1ZGlkIC0gVGhlIGRldmljZSBVRElELlxuICogQHBhcmFtIHtib29sZWFufSBpc1NpbXVsYXRvciAtIEVxdWFscyB0byB0cnVlIGlmIHRoZSBjdXJyZW50IGRldmljZSBpcyBhIFNpbXVsYXRvclxuICovXG5hc3luYyBmdW5jdGlvbiByZXNldFRlc3RQcm9jZXNzZXMgKHVkaWQsIGlzU2ltdWxhdG9yKSB7XG4gIGNvbnN0IHByb2Nlc3NQYXR0ZXJucyA9IFtgeGNvZGVidWlsZC4qJHt1ZGlkfWBdO1xuICBpZiAoaXNTaW11bGF0b3IpIHtcbiAgICBwcm9jZXNzUGF0dGVybnMucHVzaChgJHt1ZGlkfS4qWENUUnVubmVyYCk7XG4gICAgLy8gVGhlIHBhdHRlcm4gdG8gZmluZCBpbiBjYXNlIGlkYiB3YXMgdXNlZFxuICAgIHByb2Nlc3NQYXR0ZXJucy5wdXNoKGB4Y3Rlc3QuKiR7dWRpZH1gKTtcbiAgfVxuICBsb2cuZGVidWcoYEtpbGxpbmcgcnVubmluZyBwcm9jZXNzZXMgJyR7cHJvY2Vzc1BhdHRlcm5zLmpvaW4oJywgJyl9JyBmb3IgdGhlIGRldmljZSAke3VkaWR9Li4uYCk7XG4gIGF3YWl0IEIuYWxsKHByb2Nlc3NQYXR0ZXJucy5tYXAoa2lsbEFwcFVzaW5nUGF0dGVybikpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgSURzIG9mIHByb2Nlc3NlcyBsaXN0ZW5pbmcgb24gdGhlIHBhcnRpY3VsYXIgc3lzdGVtIHBvcnQuXG4gKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGFwcGx5IGFkZGl0aW9uYWwgZmlsdGVyaW5nIGJhc2VkIG9uIHRoZVxuICogcHJvY2VzcyBjb21tYW5kIGxpbmUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBwb3J0IC0gVGhlIHBvcnQgbnVtYmVyLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGZpbHRlcmluZ0Z1bmMgLSBPcHRpb25hbCBsYW1iZGEgZnVuY3Rpb24sIHdoaWNoXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVzIGNvbW1hbmQgbGluZSBzdHJpbmcgb2YgdGhlIHBhcnRpY3VsYXIgcHJvY2Vzc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5pbmcgb24gZ2l2ZW4gcG9ydCwgYW5kIGlzIGV4cGVjdGVkIHRvIHJldHVyblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlaXRoZXIgdHJ1ZSBvciBmYWxzZSB0byBpbmNsdWRlL2V4Y2x1ZGUgdGhlIGNvcnJlc3BvbmRpbmcgUElEXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHJlc3VsdGluZyBhcnJheS5cbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSAtIHRoZSBsaXN0IG9mIG1hdGNoZWQgcHJvY2VzcyBpZHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBJRHNMaXN0ZW5pbmdPblBvcnQgKHBvcnQsIGZpbHRlcmluZ0Z1bmMgPSBudWxsKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICB0cnkge1xuICAgIC8vIFRoaXMgb25seSB3b3JrcyBzaW5jZSBNYWMgT1MgWCBFbCBDYXBpdGFuXG4gICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdsc29mJywgWyctdGknLCBgdGNwOiR7cG9ydH1gXSk7XG4gICAgcmVzdWx0LnB1c2goLi4uKHN0ZG91dC50cmltKCkuc3BsaXQoL1xcbisvKSkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUuY29kZSAhPT0gMSkge1xuICAgICAgLy8gY29kZSAxIG1lYW5zIG5vIHByb2Nlc3Nlcy4gT3RoZXIgZXJyb3JzIG5lZWQgcmVwb3J0aW5nXG4gICAgICBsb2cuZGVidWcoYEVycm9yIGdldHRpbmcgcHJvY2Vzc2VzIGxpc3RlbmluZyBvbiBwb3J0ICcke3BvcnR9JzogJHtlLnN0ZGVyciB8fCBlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAoIV8uaXNGdW5jdGlvbihmaWx0ZXJpbmdGdW5jKSkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IEIuZmlsdGVyKHJlc3VsdCwgYXN5bmMgKHBpZCkgPT4ge1xuICAgIGxldCBzdGRvdXQ7XG4gICAgdHJ5IHtcbiAgICAgICh7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ3BzJywgWyctcCcsIHBpZCwgJy1vJywgJ2NvbW1hbmQnXSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLmNvZGUgPT09IDEpIHtcbiAgICAgICAgLy8gVGhlIHByb2Nlc3MgZG9lcyBub3QgZXhpc3QgYW55bW9yZSwgdGhlcmUncyBub3RoaW5nIHRvIGZpbHRlclxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgZmlsdGVyaW5nRnVuYyhzdGRvdXQpO1xuICB9KTtcbn1cblxuZXhwb3J0IHsgdXBkYXRlUHJvamVjdEZpbGUsIHJlc2V0UHJvamVjdEZpbGUsIHNldFJlYWxEZXZpY2VTZWN1cml0eSxcbiAgZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQsIGdldFhjdGVzdHJ1bkZpbGVOYW1lLCBnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSxcbiAgc2V0WGN0ZXN0cnVuRmlsZSwgZ2V0WGN0ZXN0cnVuRmlsZVBhdGgsIGtpbGxQcm9jZXNzLCByYW5kb21JbnQsXG4gIGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAsIHJlc2V0VGVzdFByb2Nlc3NlcyxcbiAgZ2V0UElEc0xpc3RlbmluZ09uUG9ydCwga2lsbEFwcFVzaW5nUGF0dGVybiwgaXNUdk9TLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVB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
@@ -17,9 +17,9 @@ var _url2 = _interopRequireDefault(require("url"));
17
17
 
18
18
  var _bluebird = _interopRequireDefault(require("bluebird"));
19
19
 
20
- var _baseDriver = require("@appium/base-driver");
20
+ var _driver = require("appium/driver");
21
21
 
22
- var _support = require("@appium/support");
22
+ var _support = require("appium/support");
23
23
 
24
24
  var _logger = _interopRequireDefault(require("./logger"));
25
25
 
@@ -345,7 +345,7 @@ class WebDriverAgent {
345
345
  timeout: this.wdaConnectionTimeout,
346
346
  keepAlive: true
347
347
  };
348
- this.jwproxy = new _baseDriver.JWProxy(proxyOpts);
348
+ this.jwproxy = new _driver.JWProxy(proxyOpts);
349
349
  this.jwproxy.sessionId = sessionId;
350
350
  this.proxyReqRes = this.jwproxy.proxyReqRes.bind(this.jwproxy);
351
351
  this.noSessionProxy = new _noSessionProxy.NoSessionProxy(proxyOpts);
@@ -451,4 +451,4 @@ var _default = WebDriverAgent;
451
451
  exports.default = _default;require('source-map-support').install();
452
452
 
453
453
 
454
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3dlYmRyaXZlcmFnZW50LmpzIiwibmFtZXMiOlsiV0RBX0xBVU5DSF9USU1FT1VUIiwiV0RBX0FHRU5UX1BPUlQiLCJXREFfQ0ZfQlVORExFX05BTUUiLCJTSEFSRURfUkVTT1VSQ0VTX0dVQVJEIiwiQXN5bmNMb2NrIiwiV2ViRHJpdmVyQWdlbnQiLCJjb25zdHJ1Y3RvciIsInhjb2RlVmVyc2lvbiIsImFyZ3MiLCJsb2ciLCJfIiwiY2xvbmUiLCJkZWZhdWx0TG9nZ2VyIiwiZGV2aWNlIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsImhvc3QiLCJpc1JlYWxEZXZpY2UiLCJyZWFsRGV2aWNlIiwiaWRiIiwid2RhQnVuZGxlUGF0aCIsInNldFdEQVBhdGhzIiwiYm9vdHN0cmFwUGF0aCIsImFnZW50UGF0aCIsIndkYUxvY2FsUG9ydCIsIndkYVJlbW90ZVBvcnQiLCJ3ZGFCYXNlVXJsIiwiV0RBX0JBU0VfVVJMIiwicHJlYnVpbGRXREEiLCJ3ZWJEcml2ZXJBZ2VudFVybCIsInN0YXJ0ZWQiLCJ3ZGFDb25uZWN0aW9uVGltZW91dCIsInVzZVhjdGVzdHJ1bkZpbGUiLCJ1c2VQcmVidWlsdFdEQSIsImRlcml2ZWREYXRhUGF0aCIsIm1qcGVnU2VydmVyUG9ydCIsInVwZGF0ZWRXREFCdW5kbGVJZCIsInhjb2RlYnVpbGQiLCJYY29kZUJ1aWxkIiwic2hvd1hjb2RlTG9nIiwieGNvZGVDb25maWdGaWxlIiwieGNvZGVPcmdJZCIsInhjb2RlU2lnbmluZ0lkIiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsInVzZVNpbXBsZUJ1aWxkVGVzdCIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFMYXVuY2hUaW1lb3V0IiwiYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24iLCJyZXN1bHRCdW5kbGVQYXRoIiwicmVzdWx0QnVuZGxlVmVyc2lvbiIsIkJPT1RTVFJBUF9QQVRIIiwiaW5mbyIsInBhdGgiLCJyZXNvbHZlIiwiY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzIiwib2Jzb2xldGVQaWRzIiwiZ2V0UElEc0xpc3RlbmluZ09uUG9ydCIsInVybCIsInBvcnQiLCJjbWRMaW5lIiwiaW5jbHVkZXMiLCJ0b0xvd2VyQ2FzZSIsInVkaWQiLCJpc0VtcHR5IiwiZGVidWciLCJsZW5ndGgiLCJleGVjIiwiZSIsIndhcm4iLCJtZXNzYWdlIiwiaXNSdW5uaW5nIiwiZ2V0U3RhdHVzIiwiYmFzZVBhdGgiLCJub1Nlc3Npb25Qcm94eSIsIk5vU2Vzc2lvblByb3h5Iiwic2VydmVyIiwiaG9zdG5hbWUiLCJiYXNlIiwidGltZW91dCIsImNvbW1hbmQiLCJlcnIiLCJocmVmIiwidW5pbnN0YWxsIiwiYnVuZGxlSWRzIiwiZ2V0VXNlckluc3RhbGxlZEJ1bmRsZUlkc0J5QnVuZGxlTmFtZSIsImJ1bmRsZUlkIiwicmVtb3ZlQXBwIiwiX2NsZWFudXBQcm9qZWN0SWZGcmVzaCIsImhvbWVGb2xkZXIiLCJwcm9jZXNzIiwiZW52IiwiSE9NRSIsImN1cnJlbnRVcGdyYWRlVGltZXN0YW1wIiwiZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCIsImlzSW50ZWdlciIsInRpbWVzdGFtcFBhdGgiLCJXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCIsImRpZFRpbWVzdGFtcEV4aXN0IiwiZnMiLCJleGlzdHMiLCJhY2Nlc3MiLCJXX09LIiwiaWduIiwicmVjZW50VXBncmFkZVRpbWVzdGFtcCIsInBhcnNlSW50IiwicmVhZEZpbGUiLCJta2RpcnAiLCJkaXJuYW1lIiwid3JpdGVGaWxlIiwiY2xlYW5Qcm9qZWN0IiwibGF1bmNoIiwic2Vzc2lvbklkIiwic2V0dXBQcm94aWVzIiwiRXJyb3IiLCJzeW5jaHJvbml6YXRpb25LZXkiLCJub3JtYWxpemUiLCJhY3F1aXJlIiwicmVzZXRUZXN0UHJvY2Vzc2VzIiwic3RhcnRXaXRoSURCIiwiaW5pdCIsInByZWJ1aWxkIiwic3RhcnQiLCJ3ZGFCdW5kbGVJZCIsInRlc3RCdW5kbGVJZCIsInByZXBhcmVXREEiLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiTUpQRUdfU0VSVkVSX1BPUlQiLCJydW5YQ1VJVGVzdCIsInBhcnNlQnVuZGxlSWQiLCJpbmZvUGxpc3RQYXRoIiwiam9pbiIsImluZm9QbGlzdCIsInBsaXN0IiwicGFyc2VQbGlzdCIsIkNGQnVuZGxlSWRlbnRpZmllciIsImZldGNoV0RBQnVuZGxlIiwiaXNBcHBJbnN0YWxsZWQiLCJpbnN0YWxsQXBwIiwiaW5zdGFsbFhDVGVzdEJ1bmRsZSIsImJ1bmRsZVdEQVNpbSIsIndkYUJ1bmRsZVBhdGhzIiwiZ2xvYiIsIldEQV9SVU5ORVJfQVBQIiwiYWJzb2x1dGUiLCJpc1NvdXJjZUZyZXNoIiwiZXhpc3RzUHJvbWlzZXMiLCJzZXAiLCJtYXAiLCJzdWJQYXRoIiwiQiIsImFsbCIsInNvbWUiLCJ2IiwicHJveHlPcHRzIiwia2VlcEFsaXZlIiwiandwcm94eSIsIkpXUHJveHkiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJxdWl0IiwicmVzZXQiLCJfdXJsIiwicGFyc2UiLCJwcm90b2NvbCIsImZ1bGx5U3RhcnRlZCIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwic2V0dXBDYWNoaW5nIiwic3RhdHVzIiwiYnVpbGQiLCJwcm9kdWN0QnVuZGxlSWRlbnRpZmllciIsInVwZ3JhZGVkQXQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsImFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAiLCJ0b0xvd2VyIiwicXVpdEFuZFVuaW5zdGFsbCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi93ZWJkcml2ZXJhZ2VudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBKV1Byb3h5IH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcywgdXRpbCwgcGxpc3QsIG1rZGlycCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBOb1Nlc3Npb25Qcm94eSB9IGZyb20gJy4vbm8tc2Vzc2lvbi1wcm94eSc7XG5pbXBvcnQge1xuICBnZXRXREFVcGdyYWRlVGltZXN0YW1wLCByZXNldFRlc3RQcm9jZXNzZXMsIGdldFBJRHNMaXN0ZW5pbmdPblBvcnRcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgWGNvZGVCdWlsZCBmcm9tICcuL3hjb2RlYnVpbGQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgYnVuZGxlV0RBU2ltIH0gZnJvbSAnLi9jaGVjay1kZXBlbmRlbmNpZXMnO1xuaW1wb3J0IHtcbiAgQk9PVFNUUkFQX1BBVEgsIFdEQV9SVU5ORVJfQlVORExFX0lELCBXREFfUlVOTkVSX0FQUCxcbiAgV0RBX0JBU0VfVVJMLCBXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5jb25zdCBXREFfTEFVTkNIX1RJTUVPVVQgPSA2MCAqIDEwMDA7XG5jb25zdCBXREFfQUdFTlRfUE9SVCA9IDgxMDA7XG5jb25zdCBXREFfQ0ZfQlVORExFX05BTUUgPSAnV2ViRHJpdmVyQWdlbnRSdW5uZXItUnVubmVyJztcbmNvbnN0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbmNsYXNzIFdlYkRyaXZlckFnZW50IHtcbiAgY29uc3RydWN0b3IgKHhjb2RlVmVyc2lvbiwgYXJncyA9IHt9LCBsb2cgPSBudWxsKSB7XG4gICAgdGhpcy54Y29kZVZlcnNpb24gPSB4Y29kZVZlcnNpb247XG5cbiAgICB0aGlzLmFyZ3MgPSBfLmNsb25lKGFyZ3MpO1xuICAgIHRoaXMubG9nID0gbG9nID8/IGRlZmF1bHRMb2dnZXI7XG5cbiAgICB0aGlzLmRldmljZSA9IGFyZ3MuZGV2aWNlO1xuICAgIHRoaXMucGxhdGZvcm1WZXJzaW9uID0gYXJncy5wbGF0Zm9ybVZlcnNpb247XG4gICAgdGhpcy5wbGF0Zm9ybU5hbWUgPSBhcmdzLnBsYXRmb3JtTmFtZTtcbiAgICB0aGlzLmlvc1Nka1ZlcnNpb24gPSBhcmdzLmlvc1Nka1ZlcnNpb247XG4gICAgdGhpcy5ob3N0ID0gYXJncy5ob3N0O1xuICAgIHRoaXMuaXNSZWFsRGV2aWNlID0gISFhcmdzLnJlYWxEZXZpY2U7XG4gICAgdGhpcy5pZGIgPSAoYXJncy5kZXZpY2UgfHwge30pLmlkYjtcbiAgICB0aGlzLndkYUJ1bmRsZVBhdGggPSBhcmdzLndkYUJ1bmRsZVBhdGg7XG5cbiAgICB0aGlzLnNldFdEQVBhdGhzKGFyZ3MuYm9vdHN0cmFwUGF0aCwgYXJncy5hZ2VudFBhdGgpO1xuXG4gICAgdGhpcy53ZGFMb2NhbFBvcnQgPSBhcmdzLndkYUxvY2FsUG9ydDtcbiAgICB0aGlzLndkYVJlbW90ZVBvcnQgPSBhcmdzLndkYUxvY2FsUG9ydCB8fCBXREFfQUdFTlRfUE9SVDtcbiAgICB0aGlzLndkYUJhc2VVcmwgPSBhcmdzLndkYUJhc2VVcmwgfHwgV0RBX0JBU0VfVVJMO1xuXG4gICAgdGhpcy5wcmVidWlsZFdEQSA9IGFyZ3MucHJlYnVpbGRXREE7XG5cbiAgICB0aGlzLndlYkRyaXZlckFnZW50VXJsID0gYXJncy53ZWJEcml2ZXJBZ2VudFVybDtcblxuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy53ZGFDb25uZWN0aW9uVGltZW91dCA9IGFyZ3Mud2RhQ29ubmVjdGlvblRpbWVvdXQ7XG5cbiAgICB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgPSBhcmdzLnVzZVhjdGVzdHJ1bkZpbGU7XG4gICAgdGhpcy51c2VQcmVidWlsdFdEQSA9IGFyZ3MudXNlUHJlYnVpbHRXREE7XG4gICAgdGhpcy5kZXJpdmVkRGF0YVBhdGggPSBhcmdzLmRlcml2ZWREYXRhUGF0aDtcbiAgICB0aGlzLm1qcGVnU2VydmVyUG9ydCA9IGFyZ3MubWpwZWdTZXJ2ZXJQb3J0O1xuXG4gICAgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgPSBhcmdzLnVwZGF0ZWRXREFCdW5kbGVJZDtcblxuICAgIHRoaXMueGNvZGVidWlsZCA9IG5ldyBYY29kZUJ1aWxkKHRoaXMueGNvZGVWZXJzaW9uLCB0aGlzLmRldmljZSwge1xuICAgICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLnBsYXRmb3JtVmVyc2lvbixcbiAgICAgIHBsYXRmb3JtTmFtZTogdGhpcy5wbGF0Zm9ybU5hbWUsXG4gICAgICBpb3NTZGtWZXJzaW9uOiB0aGlzLmlvc1Nka1ZlcnNpb24sXG4gICAgICBhZ2VudFBhdGg6IHRoaXMuYWdlbnRQYXRoLFxuICAgICAgYm9vdHN0cmFwUGF0aDogdGhpcy5ib290c3RyYXBQYXRoLFxuICAgICAgcmVhbERldmljZTogdGhpcy5pc1JlYWxEZXZpY2UsXG4gICAgICBzaG93WGNvZGVMb2c6IGFyZ3Muc2hvd1hjb2RlTG9nLFxuICAgICAgeGNvZGVDb25maWdGaWxlOiBhcmdzLnhjb2RlQ29uZmlnRmlsZSxcbiAgICAgIHhjb2RlT3JnSWQ6IGFyZ3MueGNvZGVPcmdJZCxcbiAgICAgIHhjb2RlU2lnbmluZ0lkOiBhcmdzLnhjb2RlU2lnbmluZ0lkLFxuICAgICAga2V5Y2hhaW5QYXRoOiBhcmdzLmtleWNoYWluUGF0aCxcbiAgICAgIGtleWNoYWluUGFzc3dvcmQ6IGFyZ3Mua2V5Y2hhaW5QYXNzd29yZCxcbiAgICAgIHVzZVNpbXBsZUJ1aWxkVGVzdDogYXJncy51c2VTaW1wbGVCdWlsZFRlc3QsXG4gICAgICB1c2VQcmVidWlsdFdEQTogYXJncy51c2VQcmVidWlsdFdEQSxcbiAgICAgIHVwZGF0ZWRXREFCdW5kbGVJZDogdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQsXG4gICAgICBsYXVuY2hUaW1lb3V0OiBhcmdzLndkYUxhdW5jaFRpbWVvdXQgfHwgV0RBX0xBVU5DSF9USU1FT1VULFxuICAgICAgd2RhUmVtb3RlUG9ydDogdGhpcy53ZGFSZW1vdGVQb3J0LFxuICAgICAgdXNlWGN0ZXN0cnVuRmlsZTogdGhpcy51c2VYY3Rlc3RydW5GaWxlLFxuICAgICAgZGVyaXZlZERhdGFQYXRoOiBhcmdzLmRlcml2ZWREYXRhUGF0aCxcbiAgICAgIG1qcGVnU2VydmVyUG9ydDogdGhpcy5tanBlZ1NlcnZlclBvcnQsXG4gICAgICBhbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbjogYXJncy5hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbixcbiAgICAgIHJlc3VsdEJ1bmRsZVBhdGg6IGFyZ3MucmVzdWx0QnVuZGxlUGF0aCxcbiAgICAgIHJlc3VsdEJ1bmRsZVZlcnNpb246IGFyZ3MucmVzdWx0QnVuZGxlVmVyc2lvbixcbiAgICB9LCB0aGlzLmxvZyk7XG4gIH1cblxuICBzZXRXREFQYXRocyAoYm9vdHN0cmFwUGF0aCwgYWdlbnRQYXRoKSB7XG4gICAgLy8gYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeSBhIHBsYWNlIGZvciBXREEuIFRoaXMgaXMgdW5kb2N1bWVudGVkIGFuZFxuICAgIC8vIG9ubHkgaGVyZSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRlc3RpbmcgZGV2ZWxvcG1lbnQgb2YgV0RBXG4gICAgdGhpcy5ib290c3RyYXBQYXRoID0gYm9vdHN0cmFwUGF0aCB8fCBCT09UU1RSQVBfUEFUSDtcbiAgICB0aGlzLmxvZy5pbmZvKGBVc2luZyBXREEgcGF0aDogJyR7dGhpcy5ib290c3RyYXBQYXRofSdgKTtcblxuICAgIC8vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdlIG5lZWQgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IGFnZW50UGF0aCB0b29cbiAgICB0aGlzLmFnZW50UGF0aCA9IGFnZW50UGF0aCB8fCBwYXRoLnJlc29sdmUodGhpcy5ib290c3RyYXBQYXRoLCAnV2ViRHJpdmVyQWdlbnQueGNvZGVwcm9qJyk7XG4gICAgdGhpcy5sb2cuaW5mbyhgVXNpbmcgV0RBIGFnZW50OiAnJHt0aGlzLmFnZW50UGF0aH0nYCk7XG4gIH1cblxuICBhc3luYyBjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMgKCkge1xuICAgIGNvbnN0IG9ic29sZXRlUGlkcyA9IGF3YWl0IGdldFBJRHNMaXN0ZW5pbmdPblBvcnQodGhpcy51cmwucG9ydCxcbiAgICAgIChjbWRMaW5lKSA9PiBjbWRMaW5lLmluY2x1ZGVzKCcvV2ViRHJpdmVyQWdlbnRSdW5uZXInKSAmJlxuICAgICAgICAhY21kTGluZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZGV2aWNlLnVkaWQudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgaWYgKF8uaXNFbXB0eShvYnNvbGV0ZVBpZHMpKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgTm8gb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3NlcyBmcm9tIHByZXZpb3VzIFdEQSBzZXNzaW9ucyBgICtcbiAgICAgICAgYGxpc3RlbmluZyBvbiBwb3J0ICR7dGhpcy51cmwucG9ydH0gaGF2ZSBiZWVuIGZvdW5kYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2cuaW5mbyhgRGV0ZWN0ZWQgJHtvYnNvbGV0ZVBpZHMubGVuZ3RofSBvYnNvbGV0ZSBjYWNoZWQgcHJvY2VzcyR7b2Jzb2xldGVQaWRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ2VzJ30gYCArXG4gICAgICBgZnJvbSBwcmV2aW91cyBXREEgc2Vzc2lvbnMuIENsZWFuaW5nIHRoZW0gdXBgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYygna2lsbCcsIG9ic29sZXRlUGlkcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cud2FybihgRmFpbGVkIHRvIGtpbGwgb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3Mke29ic29sZXRlUGlkcy5sZW5ndGggPT09IDEgPyAnJyA6ICdlcyd9ICcke29ic29sZXRlUGlkc30nLiBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaWYgV0RBIGlzIHJ1bm5pbmcgb3Igbm90XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgV0RBIGlzIHJ1bm5pbmdcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBpbnZhbGlkIHJlc3BvbnNlIGNvZGUgb3IgYm9keVxuICAgKi9cbiAgYXN5bmMgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEoYXdhaXQgdGhpcy5nZXRTdGF0dXMoKSk7XG4gIH1cblxuICBnZXQgYmFzZVBhdGggKCkge1xuICAgIGlmICh0aGlzLnVybC5wYXRoID09PSAnLycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXJsLnBhdGggfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGN1cnJlbnQgcnVubmluZyBXREEncyBzdGF0dXMgbGlrZSBiZWxvd1xuICAgKiB7XG4gICAqICAgXCJzdGF0ZVwiOiBcInN1Y2Nlc3NcIixcbiAgICogICBcIm9zXCI6IHtcbiAgICogICAgIFwibmFtZVwiOiBcImlPU1wiLFxuICAgKiAgICAgXCJ2ZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJzZGtWZXJzaW9uXCI6IFwiMTEuM1wiXG4gICAqICAgfSxcbiAgICogICBcImlvc1wiOiB7XG4gICAqICAgICBcInNpbXVsYXRvclZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcImlwXCI6IFwiMTcyLjI1NC45OS4zNFwiXG4gICAqICAgfSxcbiAgICogICBcImJ1aWxkXCI6IHtcbiAgICogICAgIFwidGltZVwiOiBcIkp1biAyNCAyMDE4IDE3OjA4OjIxXCIsXG4gICAqICAgICBcInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyXCI6IFwiY29tLmZhY2Vib29rLldlYkRyaXZlckFnZW50UnVubmVyXCJcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogQHJldHVybiB7P29iamVjdH0gU3RhdGUgT2JqZWN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgaW52YWxpZCByZXNwb25zZSBjb2RlIG9yIGJvZHlcbiAgICovXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7XG4gICAgY29uc3Qgbm9TZXNzaW9uUHJveHkgPSBuZXcgTm9TZXNzaW9uUHJveHkoe1xuICAgICAgc2VydmVyOiB0aGlzLnVybC5ob3N0bmFtZSxcbiAgICAgIHBvcnQ6IHRoaXMudXJsLnBvcnQsXG4gICAgICBiYXNlOiB0aGlzLmJhc2VQYXRoLFxuICAgICAgdGltZW91dDogMzAwMCxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG5vU2Vzc2lvblByb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgV0RBIGlzIG5vdCBsaXN0ZW5pbmcgYXQgJyR7dGhpcy51cmwuaHJlZn0nYCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5pbnN0YWxsIFdEQXMgZnJvbSB0aGUgdGVzdCBkZXZpY2UuXG4gICAqIE92ZXIgWGNvZGUgMTEsIG11bHRpcGxlIFdEQSBjYW4gYmUgaW4gdGhlIGRldmljZSBzaW5jZSBYY29kZSAxMSBnZW5lcmF0ZXMgZGlmZmVyZW50IFdEQS5cbiAgICogQXBwaXVtIGRvZXMgbm90IGV4cGVjdCBtdWx0aXBsZSBXREFzIGFyZSBydW5uaW5nIG9uIGEgZGV2aWNlLlxuICAgKi9cbiAgYXN5bmMgdW5pbnN0YWxsICgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYnVuZGxlSWRzID0gYXdhaXQgdGhpcy5kZXZpY2UuZ2V0VXNlckluc3RhbGxlZEJ1bmRsZUlkc0J5QnVuZGxlTmFtZShXREFfQ0ZfQlVORExFX05BTUUpO1xuICAgICAgaWYgKF8uaXNFbXB0eShidW5kbGVJZHMpKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdObyBXREFzIG9uIHRoZSBkZXZpY2UuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2cuZGVidWcoYFVuaW5zdGFsbGluZyBXREFzOiAnJHtidW5kbGVJZHN9J2ApO1xuICAgICAgZm9yIChjb25zdCBidW5kbGVJZCBvZiBidW5kbGVJZHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZXZpY2UucmVtb3ZlQXBwKGJ1bmRsZUlkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhlKTtcbiAgICAgIHRoaXMubG9nLndhcm4oYFdlYkRyaXZlckFnZW50IHVuaW5zdGFsbCBmYWlsZWQuIFBlcmhhcHMsIGl0IGlzIGFscmVhZHkgdW5pbnN0YWxsZWQ/IGAgK1xuICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9jbGVhbnVwUHJvamVjdElmRnJlc2ggKCkge1xuICAgIGNvbnN0IGhvbWVGb2xkZXIgPSBwcm9jZXNzLmVudi5IT01FO1xuICAgIGlmICghaG9tZUZvbGRlcikge1xuICAgICAgdGhpcy5sb2cuaW5mbygnVGhlIEhPTUUgZm9sZGVyIHBhdGggY2Fubm90IGJlIGRldGVybWluZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VXBncmFkZVRpbWVzdGFtcCA9IGF3YWl0IGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAoKTtcbiAgICBpZiAoIV8uaXNJbnRlZ2VyKGN1cnJlbnRVcGdyYWRlVGltZXN0YW1wKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnSXQgaXMgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIHRpbWVzdGFtcCBvZiB0aGUgcGFja2FnZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVzdGFtcFBhdGggPSBwYXRoLnJlc29sdmUoaG9tZUZvbGRlciwgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEgpO1xuICAgIGNvbnN0IGRpZFRpbWVzdGFtcEV4aXN0ID0gYXdhaXQgZnMuZXhpc3RzKHRpbWVzdGFtcFBhdGgpO1xuICAgIGlmIChkaWRUaW1lc3RhbXBFeGlzdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMuYWNjZXNzKHRpbWVzdGFtcFBhdGgsIGZzLldfT0spO1xuICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFdlYkRyaXZlckFnZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9JyBpcyBub3Qgd3JpdGVhYmxlLiBgICtcbiAgICAgICAgICBgU2tpcHBpbmcgc291cmNlcyBjbGVhbnVwYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY2VudFVwZ3JhZGVUaW1lc3RhbXAgPSBwYXJzZUludChhd2FpdCBmcy5yZWFkRmlsZSh0aW1lc3RhbXBQYXRoLCAndXRmOCcpLCAxMCk7XG4gICAgICBpZiAoXy5pc0ludGVnZXIocmVjZW50VXBncmFkZVRpbWVzdGFtcCkpIHtcbiAgICAgICAgaWYgKHJlY2VudFVwZ3JhZGVUaW1lc3RhbXAgPj0gY3VycmVudFVwZ3JhZGVUaW1lc3RhbXApIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBXZWJEcml2ZXJBZ2VudCBkb2VzIG5vdCBuZWVkIGEgY2xlYW51cC4gVGhlIHNvdXJjZXMgYXJlIHVwIHRvIGRhdGUgYCArXG4gICAgICAgICAgICBgKCR7cmVjZW50VXBncmFkZVRpbWVzdGFtcH0gPj0gJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0pYCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFdlYkRyaXZlckFnZW50IHNvdXJjZXMgaGF2ZSBiZWVuIHVwZ3JhZGVkIGAgK1xuICAgICAgICAgIGAoJHtyZWNlbnRVcGdyYWRlVGltZXN0YW1wfSA8ICR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9KWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVGhlIHJlY2VudCB1cGdyYWRlIHRpbWVzdGFtcCBhdCAnJHt0aW1lc3RhbXBQYXRofScgaXMgY29ycnVwdGVkLiBUcnlpbmcgdG8gZml4IGl0YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG1rZGlycChwYXRoLmRpcm5hbWUodGltZXN0YW1wUGF0aCkpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRpbWVzdGFtcFBhdGgsIGAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfWAsICd1dGY4Jyk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU3RvcmVkIHRoZSByZWNlbnQgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0gYCArXG4gICAgICAgIGBhdCAnJHt0aW1lc3RhbXBQYXRofSdgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBVbmFibGUgdG8gY3JlYXRlIHRoZSByZWNlbnQgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgYXQgJyR7dGltZXN0YW1wUGF0aH0nLiBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRpZFRpbWVzdGFtcEV4aXN0KSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdUaGVyZSBpcyBubyBuZWVkIHRvIHBlcmZvcm0gdGhlIHByb2plY3QgY2xlYW51cC4gQSBmcmVzaCBpbnN0YWxsIGhhcyBiZWVuIGRldGVjdGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5jbGVhblByb2plY3QoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcGVyZm9ybSBXZWJEcml2ZXJBZ2VudCBwcm9qZWN0IGNsZWFudXAuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGN1cnJlbnQgcnVubmluZyBXREEncyBzdGF0dXMgbGlrZSBiZWxvdyBhZnRlciBsYXVuY2hpbmcgV0RBXG4gICAqIHtcbiAgICogICBcInN0YXRlXCI6IFwic3VjY2Vzc1wiLFxuICAgKiAgIFwib3NcIjoge1xuICAgKiAgICAgXCJuYW1lXCI6IFwiaU9TXCIsXG4gICAqICAgICBcInZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcInNka1ZlcnNpb25cIjogXCIxMS4zXCJcbiAgICogICB9LFxuICAgKiAgIFwiaW9zXCI6IHtcbiAgICogICAgIFwic2ltdWxhdG9yVmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwiaXBcIjogXCIxNzIuMjU0Ljk5LjM0XCJcbiAgICogICB9LFxuICAgKiAgIFwiYnVpbGRcIjoge1xuICAgKiAgICAgXCJ0aW1lXCI6IFwiSnVuIDI0IDIwMTggMTc6MDg6MjFcIixcbiAgICogICAgIFwicHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJcIjogXCJjb20uZmFjZWJvb2suV2ViRHJpdmVyQWdlbnRSdW5uZXJcIlxuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkIExhdW5jaCBXREEgYW5kIGVzdGFibGlzaCB0aGUgc2Vzc2lvbiB3aXRoIHRoaXMgc2Vzc2lvbklkXG4gICAqIEByZXR1cm4gez9vYmplY3R9IFN0YXRlIE9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGludmFsaWQgcmVzcG9uc2UgY29kZSBvciBib2R5XG4gICAqL1xuICBhc3luYyBsYXVuY2ggKHNlc3Npb25JZCkge1xuICAgIGlmICh0aGlzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBVc2luZyBwcm92aWRlZCBXZWJkcml2ZXJBZ2VudCBhdCAnJHt0aGlzLndlYkRyaXZlckFnZW50VXJsfSdgKTtcbiAgICAgIHRoaXMudXJsID0gdGhpcy53ZWJEcml2ZXJBZ2VudFVybDtcbiAgICAgIHRoaXMuc2V0dXBQcm94aWVzKHNlc3Npb25JZCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZy5pbmZvKCdMYXVuY2hpbmcgV2ViRHJpdmVyQWdlbnQgb24gdGhlIGRldmljZScpO1xuXG4gICAgdGhpcy5zZXR1cFByb3hpZXMoc2Vzc2lvbklkKTtcblxuICAgIGlmICghdGhpcy51c2VYY3Rlc3RydW5GaWxlICYmICFhd2FpdCBmcy5leGlzdHModGhpcy5hZ2VudFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byB1c2UgV2ViRHJpdmVyQWdlbnQgcHJvamVjdCBhdCAnJHt0aGlzLmFnZW50UGF0aH0nIGJ1dCB0aGUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgJ2ZpbGUgZG9lcyBub3QgZXhpc3QnKTtcbiAgICB9XG5cbiAgICAvLyB1c2VYY3Rlc3RydW5GaWxlIGFuZCB1c2VQcmVidWlsdFdEQSB1c2UgZXhpc3RpbmcgZGVwZW5kZW5jaWVzXG4gICAgLy8gSXQgZGVwZW5kcyBvbiB1c2VyIHNpZGVcbiAgICBpZiAodGhpcy5pZGIgfHwgdGhpcy51c2VYY3Rlc3RydW5GaWxlIHx8ICh0aGlzLmRlcml2ZWREYXRhUGF0aCAmJiB0aGlzLnVzZVByZWJ1aWx0V0RBKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnU2tpcHBlZCBXREEgcHJvamVjdCBjbGVhbnVwIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgY2FwYWJpbGl0aWVzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN5bmNocm9uaXphdGlvbktleSA9IHBhdGgubm9ybWFsaXplKHRoaXMuYm9vdHN0cmFwUGF0aCk7XG4gICAgICBhd2FpdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmFjcXVpcmUoc3luY2hyb25pemF0aW9uS2V5LFxuICAgICAgICBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLl9jbGVhbnVwUHJvamVjdElmRnJlc2goKSk7XG4gICAgfVxuXG4gICAgLy8gV2UgbmVlZCB0byBwcm92aWRlIFdEQSBsb2NhbCBwb3J0LCBiZWNhdXNlIGl0IG1pZ2h0IGJlIG9jY3VwaWVkXG4gICAgYXdhaXQgcmVzZXRUZXN0UHJvY2Vzc2VzKHRoaXMuZGV2aWNlLnVkaWQsICF0aGlzLmlzUmVhbERldmljZSk7XG5cbiAgICBpZiAodGhpcy5pZGIpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnN0YXJ0V2l0aElEQigpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5pbml0KHRoaXMubm9TZXNzaW9uUHJveHkpO1xuXG4gICAgLy8gU3RhcnQgdGhlIHhjb2RlYnVpbGQgcHJvY2Vzc1xuICAgIGlmICh0aGlzLnByZWJ1aWxkV0RBKSB7XG4gICAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQucHJlYnVpbGQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMueGNvZGVidWlsZC5zdGFydCgpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRXaXRoSURCICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdXaWxsIGxhdW5jaCBXREEgd2l0aCBpZGIgaW5zdGVhZCBvZiB4Y29kZWJ1aWxkIHNpbmNlIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcgaXMgZW5hYmxlZCcpO1xuICAgIGNvbnN0IHt3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkfSA9IGF3YWl0IHRoaXMucHJlcGFyZVdEQSgpO1xuICAgIGNvbnN0IGVudiA9IHtcbiAgICAgIFVTRV9QT1JUOiB0aGlzLndkYVJlbW90ZVBvcnQsXG4gICAgICBXREFfUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUjogdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQsXG4gICAgfTtcbiAgICBpZiAodGhpcy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIGVudi5NSlBFR19TRVJWRVJfUE9SVCA9IHRoaXMubWpwZWdTZXJ2ZXJQb3J0O1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmlkYi5ydW5YQ1VJVGVzdCh3ZGFCdW5kbGVJZCwgd2RhQnVuZGxlSWQsIHRlc3RCdW5kbGVJZCwge2Vudn0pO1xuICB9XG5cbiAgYXN5bmMgcGFyc2VCdW5kbGVJZCAod2RhQnVuZGxlUGF0aCkge1xuICAgIGNvbnN0IGluZm9QbGlzdFBhdGggPSBwYXRoLmpvaW4od2RhQnVuZGxlUGF0aCwgJ0luZm8ucGxpc3QnKTtcbiAgICBjb25zdCBpbmZvUGxpc3QgPSBhd2FpdCBwbGlzdC5wYXJzZVBsaXN0KGF3YWl0IGZzLnJlYWRGaWxlKGluZm9QbGlzdFBhdGgpKTtcbiAgICBpZiAoIWluZm9QbGlzdC5DRkJ1bmRsZUlkZW50aWZpZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgYnVuZGxlIGlkIGluICcke2luZm9QbGlzdFBhdGh9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gaW5mb1BsaXN0LkNGQnVuZGxlSWRlbnRpZmllcjtcbiAgfVxuXG4gIGFzeW5jIHByZXBhcmVXREEgKCkge1xuICAgIGNvbnN0IHdkYUJ1bmRsZVBhdGggPSB0aGlzLndkYUJ1bmRsZVBhdGggfHwgYXdhaXQgdGhpcy5mZXRjaFdEQUJ1bmRsZSgpO1xuICAgIGNvbnN0IHdkYUJ1bmRsZUlkID0gYXdhaXQgdGhpcy5wYXJzZUJ1bmRsZUlkKHdkYUJ1bmRsZVBhdGgpO1xuICAgIGlmICghYXdhaXQgdGhpcy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQod2RhQnVuZGxlSWQpKSB7XG4gICAgICBhd2FpdCB0aGlzLmRldmljZS5pbnN0YWxsQXBwKHdkYUJ1bmRsZVBhdGgpO1xuICAgIH1cbiAgICBjb25zdCB0ZXN0QnVuZGxlSWQgPSBhd2FpdCB0aGlzLmlkYi5pbnN0YWxsWENUZXN0QnVuZGxlKHBhdGguam9pbih3ZGFCdW5kbGVQYXRoLCAnUGx1Z0lucycsICdXZWJEcml2ZXJBZ2VudFJ1bm5lci54Y3Rlc3QnKSk7XG4gICAgcmV0dXJuIHt3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkLCB3ZGFCdW5kbGVQYXRofTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoV0RBQnVuZGxlICgpIHtcbiAgICBpZiAoIXRoaXMuZGVyaXZlZERhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgYnVuZGxlV0RBU2ltKHRoaXMueGNvZGVidWlsZCk7XG4gICAgfVxuICAgIGNvbnN0IHdkYUJ1bmRsZVBhdGhzID0gYXdhaXQgZnMuZ2xvYihgJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0vKiovKiR7V0RBX1JVTk5FUl9BUFB9L2AsIHtcbiAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgIH0pO1xuICAgIGlmIChfLmlzRW1wdHkod2RhQnVuZGxlUGF0aHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSBXREEgYnVuZGxlIGluICcke3RoaXMuZGVyaXZlZERhdGFQYXRofSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIHdkYUJ1bmRsZVBhdGhzWzBdO1xuICB9XG5cbiAgYXN5bmMgaXNTb3VyY2VGcmVzaCAoKSB7XG4gICAgY29uc3QgZXhpc3RzUHJvbWlzZXMgPSBbXG4gICAgICAnUmVzb3VyY2VzJyxcbiAgICAgIGBSZXNvdXJjZXMke3BhdGguc2VwfVdlYkRyaXZlckFnZW50LmJ1bmRsZWAsXG4gICAgXS5tYXAoKHN1YlBhdGgpID0+IGZzLmV4aXN0cyhwYXRoLnJlc29sdmUodGhpcy5ib290c3RyYXBQYXRoLCBzdWJQYXRoKSkpO1xuICAgIHJldHVybiAoYXdhaXQgQi5hbGwoZXhpc3RzUHJvbWlzZXMpKS5zb21lKCh2KSA9PiB2ID09PSBmYWxzZSk7XG4gIH1cblxuICBzZXR1cFByb3hpZXMgKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IHByb3h5T3B0cyA9IHtcbiAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICBzZXJ2ZXI6IHRoaXMudXJsLmhvc3RuYW1lLFxuICAgICAgcG9ydDogdGhpcy51cmwucG9ydCxcbiAgICAgIGJhc2U6IHRoaXMuYmFzZVBhdGgsXG4gICAgICB0aW1lb3V0OiB0aGlzLndkYUNvbm5lY3Rpb25UaW1lb3V0LFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH07XG5cbiAgICB0aGlzLmp3cHJveHkgPSBuZXcgSldQcm94eShwcm94eU9wdHMpO1xuICAgIHRoaXMuandwcm94eS5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuandwcm94eS5wcm94eVJlcVJlcy5iaW5kKHRoaXMuandwcm94eSk7XG5cbiAgICB0aGlzLm5vU2Vzc2lvblByb3h5ID0gbmV3IE5vU2Vzc2lvblByb3h5KHByb3h5T3B0cyk7XG4gIH1cblxuICBhc3luYyBxdWl0ICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdTaHV0dGluZyBkb3duIHN1Yi1wcm9jZXNzZXMnKTtcblxuICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5xdWl0KCk7XG4gICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnJlc2V0KCk7XG5cbiAgICBpZiAodGhpcy5qd3Byb3h5KSB7XG4gICAgICB0aGlzLmp3cHJveHkuc2Vzc2lvbklkID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5hcmdzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAvLyBpZiB3ZSBwb3B1bGF0ZWQgdGhlIHVybCBvdXJzZWx2ZXMgKGR1cmluZyBgc2V0dXBDYWNoaW5nYCBjYWxsLCBmb3IgaW5zdGFuY2UpXG4gICAgICAvLyB0aGVuIGNsZWFuIHRoYXQgdXAuIElmIHRoZSB1cmwgd2FzIHN1cHBsaWVkLCB3ZSB3YW50IHRvIGtlZXAgaXRcbiAgICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldCB1cmwgKCkge1xuICAgIGlmICghdGhpcy5fdXJsKSB7XG4gICAgICBpZiAodGhpcy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UodGhpcy53ZWJEcml2ZXJBZ2VudFVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy53ZGFMb2NhbFBvcnQgfHwgV0RBX0FHRU5UX1BPUlQ7XG4gICAgICAgIGNvbnN0IHtwcm90b2NvbCwgaG9zdG5hbWV9ID0gdXJsLnBhcnNlKHRoaXMud2RhQmFzZVVybCB8fCBXREFfQkFTRV9VUkwpO1xuICAgICAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UoYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfToke3BvcnR9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsIChfdXJsKSB7XG4gICAgdGhpcy5fdXJsID0gdXJsLnBhcnNlKF91cmwpO1xuICB9XG5cbiAgZ2V0IGZ1bGx5U3RhcnRlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRlZDtcbiAgfVxuXG4gIHNldCBmdWxseVN0YXJ0ZWQgKHN0YXJ0ZWQgPSBmYWxzZSkge1xuICAgIHRoaXMuc3RhcnRlZCA9IHN0YXJ0ZWQ7XG4gIH1cblxuICBhc3luYyByZXRyaWV2ZURlcml2ZWREYXRhUGF0aCAoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMueGNvZGVidWlsZC5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldXNlIHJ1bm5pbmcgV0RBIGlmIGl0IGhhcyB0aGUgc2FtZSBidW5kbGUgaWQgd2l0aCB1cGRhdGVkV0RBQnVuZGxlSWQuXG4gICAqIE9yIHJldXNlIGl0IGlmIGl0IGhhcyB0aGUgZGVmYXVsdCBpZCB3aXRob3V0IHVwZGF0ZWRXREFCdW5kbGVJZC5cbiAgICogVW5pbnN0YWxsIGl0IGlmIHRoZSBtZXRob2QgZmFjZXMgYW4gZXhjZXB0aW9uIGZvciB0aGUgYWJvdmUgc2l0dWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXBkYXRlZFdEQUJ1bmRsZUlkIEJ1bmRsZUlkIHlvdSdkIGxpa2UgdG8gdXNlXG4gICAqL1xuICBhc3luYyBzZXR1cENhY2hpbmcgKCkge1xuICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgaWYgKCFzdGF0dXMgfHwgIXN0YXR1cy5idWlsZCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1dEQSBpcyBjdXJyZW50bHkgbm90IHJ1bm5pbmcuIFRoZXJlIGlzIG5vdGhpbmcgdG8gY2FjaGUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcixcbiAgICAgIHVwZ3JhZGVkQXQsXG4gICAgfSA9IHN0YXR1cy5idWlsZDtcbiAgICAvLyBmb3IgcmVhbCBkZXZpY2VcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikgJiYgdXRpbC5oYXNWYWx1ZSh0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCkgJiYgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgIT09IHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBXaWxsIHVuaW5zdGFsbCBydW5uaW5nIFdEQSBzaW5jZSBpdCBoYXMgZGlmZmVyZW50IGJ1bmRsZSBpZC4gVGhlIGFjdHVhbCB2YWx1ZSBpcyAnJHtwcm9kdWN0QnVuZGxlSWRlbnRpZmllcn0nLmApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gICAgfVxuICAgIC8vIGZvciBzaW11bGF0b3JcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikgJiYgIXV0aWwuaGFzVmFsdWUodGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpICYmIFdEQV9SVU5ORVJfQlVORExFX0lEICE9PSBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgV2lsbCB1bmluc3RhbGwgcnVubmluZyBXREEgc2luY2UgaXRzIGJ1bmRsZSBpZCBpcyBub3QgZXF1YWwgdG8gdGhlIGRlZmF1bHQgdmFsdWUgJHtXREFfUlVOTkVSX0JVTkRMRV9JRH1gKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAgPSBhd2FpdCBnZXRXREFVcGdyYWRlVGltZXN0YW1wKCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYFVwZ3JhZGUgdGltZXN0YW1wIG9mIHRoZSBjdXJyZW50bHkgYnVuZGxlZCBXREE6ICR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVXBncmFkZSB0aW1lc3RhbXAgb2YgdGhlIFdEQSBvbiB0aGUgZGV2aWNlOiAke3VwZ3JhZGVkQXR9YCk7XG4gICAgaWYgKGFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAgJiYgdXBncmFkZWRBdCAmJiBfLnRvTG93ZXIoYCR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH1gKSAhPT0gXy50b0xvd2VyKGAke3VwZ3JhZGVkQXR9YCkpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1dpbGwgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQgdmVyc2lvbiBpbiBjb21wYXJpc29uIHRvIHRoZSBvbmUgJyArXG4gICAgICAgIGB3aGljaCBpcyBidW5kbGVkIHdpdGggYXBwaXVtLXhjdWl0ZXN0LWRyaXZlciBtb2R1bGUgKCR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH0gIT0gJHt1cGdyYWRlZEF0fSlgKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSB1dGlsLmhhc1ZhbHVlKHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKVxuICAgICAgPyBgV2lsbCByZXVzZSBwcmV2aW91c2x5IGNhY2hlZCBXREEgaW5zdGFuY2UgYXQgJyR7dGhpcy51cmwuaHJlZn0nIHdpdGggJyR7cHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJ9J2BcbiAgICAgIDogYFdpbGwgcmV1c2UgcHJldmlvdXNseSBjYWNoZWQgV0RBIGluc3RhbmNlIGF0ICcke3RoaXMudXJsLmhyZWZ9J2A7XG4gICAgdGhpcy5sb2cuaW5mbyhgJHttZXNzYWdlfS4gU2V0IHRoZSB3ZGFMb2NhbFBvcnQgY2FwYWJpbGl0eSB0byBhIHZhbHVlIGRpZmZlcmVudCBmcm9tICR7dGhpcy51cmwucG9ydH0gaWYgdGhpcyBpcyBhbiB1bmRlc2lyZWQgYmVoYXZpb3IuYCk7XG4gICAgdGhpcy53ZWJEcml2ZXJBZ2VudFVybCA9IHRoaXMudXJsLmhyZWY7XG4gIH1cblxuICAvKipcbiAgICogUXVpdCBhbmQgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBLlxuICAgKi9cbiAgYXN5bmMgcXVpdEFuZFVuaW5zdGFsbCAoKSB7XG4gICAgYXdhaXQgdGhpcy5xdWl0KCk7XG4gICAgYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBXZWJEcml2ZXJBZ2VudDtcbmV4cG9ydCB7IFdlYkRyaXZlckFnZW50IH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0EsTUFBTUEsa0JBQWtCLEdBQUcsS0FBSyxJQUFoQztBQUNBLE1BQU1DLGNBQWMsR0FBRyxJQUF2QjtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLDZCQUEzQjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLElBQUlDLGtCQUFKLEVBQS9COztBQUVBLE1BQU1DLGNBQU4s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
454
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3dlYmRyaXZlcmFnZW50LmpzIiwibmFtZXMiOlsiV0RBX0xBVU5DSF9USU1FT1VUIiwiV0RBX0FHRU5UX1BPUlQiLCJXREFfQ0ZfQlVORExFX05BTUUiLCJTSEFSRURfUkVTT1VSQ0VTX0dVQVJEIiwiQXN5bmNMb2NrIiwiV2ViRHJpdmVyQWdlbnQiLCJjb25zdHJ1Y3RvciIsInhjb2RlVmVyc2lvbiIsImFyZ3MiLCJsb2ciLCJfIiwiY2xvbmUiLCJkZWZhdWx0TG9nZ2VyIiwiZGV2aWNlIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsImhvc3QiLCJpc1JlYWxEZXZpY2UiLCJyZWFsRGV2aWNlIiwiaWRiIiwid2RhQnVuZGxlUGF0aCIsInNldFdEQVBhdGhzIiwiYm9vdHN0cmFwUGF0aCIsImFnZW50UGF0aCIsIndkYUxvY2FsUG9ydCIsIndkYVJlbW90ZVBvcnQiLCJ3ZGFCYXNlVXJsIiwiV0RBX0JBU0VfVVJMIiwicHJlYnVpbGRXREEiLCJ3ZWJEcml2ZXJBZ2VudFVybCIsInN0YXJ0ZWQiLCJ3ZGFDb25uZWN0aW9uVGltZW91dCIsInVzZVhjdGVzdHJ1bkZpbGUiLCJ1c2VQcmVidWlsdFdEQSIsImRlcml2ZWREYXRhUGF0aCIsIm1qcGVnU2VydmVyUG9ydCIsInVwZGF0ZWRXREFCdW5kbGVJZCIsInhjb2RlYnVpbGQiLCJYY29kZUJ1aWxkIiwic2hvd1hjb2RlTG9nIiwieGNvZGVDb25maWdGaWxlIiwieGNvZGVPcmdJZCIsInhjb2RlU2lnbmluZ0lkIiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsInVzZVNpbXBsZUJ1aWxkVGVzdCIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFMYXVuY2hUaW1lb3V0IiwiYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24iLCJyZXN1bHRCdW5kbGVQYXRoIiwicmVzdWx0QnVuZGxlVmVyc2lvbiIsIkJPT1RTVFJBUF9QQVRIIiwiaW5mbyIsInBhdGgiLCJyZXNvbHZlIiwiY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzIiwib2Jzb2xldGVQaWRzIiwiZ2V0UElEc0xpc3RlbmluZ09uUG9ydCIsInVybCIsInBvcnQiLCJjbWRMaW5lIiwiaW5jbHVkZXMiLCJ0b0xvd2VyQ2FzZSIsInVkaWQiLCJpc0VtcHR5IiwiZGVidWciLCJsZW5ndGgiLCJleGVjIiwiZSIsIndhcm4iLCJtZXNzYWdlIiwiaXNSdW5uaW5nIiwiZ2V0U3RhdHVzIiwiYmFzZVBhdGgiLCJub1Nlc3Npb25Qcm94eSIsIk5vU2Vzc2lvblByb3h5Iiwic2VydmVyIiwiaG9zdG5hbWUiLCJiYXNlIiwidGltZW91dCIsImNvbW1hbmQiLCJlcnIiLCJocmVmIiwidW5pbnN0YWxsIiwiYnVuZGxlSWRzIiwiZ2V0VXNlckluc3RhbGxlZEJ1bmRsZUlkc0J5QnVuZGxlTmFtZSIsImJ1bmRsZUlkIiwicmVtb3ZlQXBwIiwiX2NsZWFudXBQcm9qZWN0SWZGcmVzaCIsImhvbWVGb2xkZXIiLCJwcm9jZXNzIiwiZW52IiwiSE9NRSIsImN1cnJlbnRVcGdyYWRlVGltZXN0YW1wIiwiZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCIsImlzSW50ZWdlciIsInRpbWVzdGFtcFBhdGgiLCJXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCIsImRpZFRpbWVzdGFtcEV4aXN0IiwiZnMiLCJleGlzdHMiLCJhY2Nlc3MiLCJXX09LIiwiaWduIiwicmVjZW50VXBncmFkZVRpbWVzdGFtcCIsInBhcnNlSW50IiwicmVhZEZpbGUiLCJta2RpcnAiLCJkaXJuYW1lIiwid3JpdGVGaWxlIiwiY2xlYW5Qcm9qZWN0IiwibGF1bmNoIiwic2Vzc2lvbklkIiwic2V0dXBQcm94aWVzIiwiRXJyb3IiLCJzeW5jaHJvbml6YXRpb25LZXkiLCJub3JtYWxpemUiLCJhY3F1aXJlIiwicmVzZXRUZXN0UHJvY2Vzc2VzIiwic3RhcnRXaXRoSURCIiwiaW5pdCIsInByZWJ1aWxkIiwic3RhcnQiLCJ3ZGFCdW5kbGVJZCIsInRlc3RCdW5kbGVJZCIsInByZXBhcmVXREEiLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiTUpQRUdfU0VSVkVSX1BPUlQiLCJydW5YQ1VJVGVzdCIsInBhcnNlQnVuZGxlSWQiLCJpbmZvUGxpc3RQYXRoIiwiam9pbiIsImluZm9QbGlzdCIsInBsaXN0IiwicGFyc2VQbGlzdCIsIkNGQnVuZGxlSWRlbnRpZmllciIsImZldGNoV0RBQnVuZGxlIiwiaXNBcHBJbnN0YWxsZWQiLCJpbnN0YWxsQXBwIiwiaW5zdGFsbFhDVGVzdEJ1bmRsZSIsImJ1bmRsZVdEQVNpbSIsIndkYUJ1bmRsZVBhdGhzIiwiZ2xvYiIsIldEQV9SVU5ORVJfQVBQIiwiYWJzb2x1dGUiLCJpc1NvdXJjZUZyZXNoIiwiZXhpc3RzUHJvbWlzZXMiLCJzZXAiLCJtYXAiLCJzdWJQYXRoIiwiQiIsImFsbCIsInNvbWUiLCJ2IiwicHJveHlPcHRzIiwia2VlcEFsaXZlIiwiandwcm94eSIsIkpXUHJveHkiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJxdWl0IiwicmVzZXQiLCJfdXJsIiwicGFyc2UiLCJwcm90b2NvbCIsImZ1bGx5U3RhcnRlZCIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwic2V0dXBDYWNoaW5nIiwic3RhdHVzIiwiYnVpbGQiLCJwcm9kdWN0QnVuZGxlSWRlbnRpZmllciIsInVwZ3JhZGVkQXQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsImFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAiLCJ0b0xvd2VyIiwicXVpdEFuZFVuaW5zdGFsbCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi93ZWJkcml2ZXJhZ2VudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBKV1Byb3h5IH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBmcywgdXRpbCwgcGxpc3QsIG1rZGlycCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBkZWZhdWx0TG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IE5vU2Vzc2lvblByb3h5IH0gZnJvbSAnLi9uby1zZXNzaW9uLXByb3h5JztcbmltcG9ydCB7XG4gIGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAsIHJlc2V0VGVzdFByb2Nlc3NlcywgZ2V0UElEc0xpc3RlbmluZ09uUG9ydFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBYY29kZUJ1aWxkIGZyb20gJy4veGNvZGVidWlsZCc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyBidW5kbGVXREFTaW0gfSBmcm9tICcuL2NoZWNrLWRlcGVuZGVuY2llcyc7XG5pbXBvcnQge1xuICBCT09UU1RSQVBfUEFUSCwgV0RBX1JVTk5FUl9CVU5ETEVfSUQsIFdEQV9SVU5ORVJfQVBQLFxuICBXREFfQkFTRV9VUkwsIFdEQV9VUEdSQURFX1RJTUVTVEFNUF9QQVRILFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmNvbnN0IFdEQV9MQVVOQ0hfVElNRU9VVCA9IDYwICogMTAwMDtcbmNvbnN0IFdEQV9BR0VOVF9QT1JUID0gODEwMDtcbmNvbnN0IFdEQV9DRl9CVU5ETEVfTkFNRSA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lci1SdW5uZXInO1xuY29uc3QgU0hBUkVEX1JFU09VUkNFU19HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcblxuY2xhc3MgV2ViRHJpdmVyQWdlbnQge1xuICBjb25zdHJ1Y3RvciAoeGNvZGVWZXJzaW9uLCBhcmdzID0ge30sIGxvZyA9IG51bGwpIHtcbiAgICB0aGlzLnhjb2RlVmVyc2lvbiA9IHhjb2RlVmVyc2lvbjtcblxuICAgIHRoaXMuYXJncyA9IF8uY2xvbmUoYXJncyk7XG4gICAgdGhpcy5sb2cgPSBsb2cgPz8gZGVmYXVsdExvZ2dlcjtcblxuICAgIHRoaXMuZGV2aWNlID0gYXJncy5kZXZpY2U7XG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBhcmdzLnBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IGFyZ3MucGxhdGZvcm1OYW1lO1xuICAgIHRoaXMuaW9zU2RrVmVyc2lvbiA9IGFyZ3MuaW9zU2RrVmVyc2lvbjtcbiAgICB0aGlzLmhvc3QgPSBhcmdzLmhvc3Q7XG4gICAgdGhpcy5pc1JlYWxEZXZpY2UgPSAhIWFyZ3MucmVhbERldmljZTtcbiAgICB0aGlzLmlkYiA9IChhcmdzLmRldmljZSB8fCB7fSkuaWRiO1xuICAgIHRoaXMud2RhQnVuZGxlUGF0aCA9IGFyZ3Mud2RhQnVuZGxlUGF0aDtcblxuICAgIHRoaXMuc2V0V0RBUGF0aHMoYXJncy5ib290c3RyYXBQYXRoLCBhcmdzLmFnZW50UGF0aCk7XG5cbiAgICB0aGlzLndkYUxvY2FsUG9ydCA9IGFyZ3Mud2RhTG9jYWxQb3J0O1xuICAgIHRoaXMud2RhUmVtb3RlUG9ydCA9IGFyZ3Mud2RhTG9jYWxQb3J0IHx8IFdEQV9BR0VOVF9QT1JUO1xuICAgIHRoaXMud2RhQmFzZVVybCA9IGFyZ3Mud2RhQmFzZVVybCB8fCBXREFfQkFTRV9VUkw7XG5cbiAgICB0aGlzLnByZWJ1aWxkV0RBID0gYXJncy5wcmVidWlsZFdEQTtcblxuICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSBhcmdzLndlYkRyaXZlckFnZW50VXJsO1xuXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLndkYUNvbm5lY3Rpb25UaW1lb3V0ID0gYXJncy53ZGFDb25uZWN0aW9uVGltZW91dDtcblxuICAgIHRoaXMudXNlWGN0ZXN0cnVuRmlsZSA9IGFyZ3MudXNlWGN0ZXN0cnVuRmlsZTtcbiAgICB0aGlzLnVzZVByZWJ1aWx0V0RBID0gYXJncy51c2VQcmVidWlsdFdEQTtcbiAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IGFyZ3MuZGVyaXZlZERhdGFQYXRoO1xuICAgIHRoaXMubWpwZWdTZXJ2ZXJQb3J0ID0gYXJncy5tanBlZ1NlcnZlclBvcnQ7XG5cbiAgICB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCA9IGFyZ3MudXBkYXRlZFdEQUJ1bmRsZUlkO1xuXG4gICAgdGhpcy54Y29kZWJ1aWxkID0gbmV3IFhjb2RlQnVpbGQodGhpcy54Y29kZVZlcnNpb24sIHRoaXMuZGV2aWNlLCB7XG4gICAgICBwbGF0Zm9ybVZlcnNpb246IHRoaXMucGxhdGZvcm1WZXJzaW9uLFxuICAgICAgcGxhdGZvcm1OYW1lOiB0aGlzLnBsYXRmb3JtTmFtZSxcbiAgICAgIGlvc1Nka1ZlcnNpb246IHRoaXMuaW9zU2RrVmVyc2lvbixcbiAgICAgIGFnZW50UGF0aDogdGhpcy5hZ2VudFBhdGgsXG4gICAgICBib290c3RyYXBQYXRoOiB0aGlzLmJvb3RzdHJhcFBhdGgsXG4gICAgICByZWFsRGV2aWNlOiB0aGlzLmlzUmVhbERldmljZSxcbiAgICAgIHNob3dYY29kZUxvZzogYXJncy5zaG93WGNvZGVMb2csXG4gICAgICB4Y29kZUNvbmZpZ0ZpbGU6IGFyZ3MueGNvZGVDb25maWdGaWxlLFxuICAgICAgeGNvZGVPcmdJZDogYXJncy54Y29kZU9yZ0lkLFxuICAgICAgeGNvZGVTaWduaW5nSWQ6IGFyZ3MueGNvZGVTaWduaW5nSWQsXG4gICAgICBrZXljaGFpblBhdGg6IGFyZ3Mua2V5Y2hhaW5QYXRoLFxuICAgICAga2V5Y2hhaW5QYXNzd29yZDogYXJncy5rZXljaGFpblBhc3N3b3JkLFxuICAgICAgdXNlU2ltcGxlQnVpbGRUZXN0OiBhcmdzLnVzZVNpbXBsZUJ1aWxkVGVzdCxcbiAgICAgIHVzZVByZWJ1aWx0V0RBOiBhcmdzLnVzZVByZWJ1aWx0V0RBLFxuICAgICAgdXBkYXRlZFdEQUJ1bmRsZUlkOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCxcbiAgICAgIGxhdW5jaFRpbWVvdXQ6IGFyZ3Mud2RhTGF1bmNoVGltZW91dCB8fCBXREFfTEFVTkNIX1RJTUVPVVQsXG4gICAgICB3ZGFSZW1vdGVQb3J0OiB0aGlzLndkYVJlbW90ZVBvcnQsXG4gICAgICB1c2VYY3Rlc3RydW5GaWxlOiB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUsXG4gICAgICBkZXJpdmVkRGF0YVBhdGg6IGFyZ3MuZGVyaXZlZERhdGFQYXRoLFxuICAgICAgbWpwZWdTZXJ2ZXJQb3J0OiB0aGlzLm1qcGVnU2VydmVyUG9ydCxcbiAgICAgIGFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uOiBhcmdzLmFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uLFxuICAgICAgcmVzdWx0QnVuZGxlUGF0aDogYXJncy5yZXN1bHRCdW5kbGVQYXRoLFxuICAgICAgcmVzdWx0QnVuZGxlVmVyc2lvbjogYXJncy5yZXN1bHRCdW5kbGVWZXJzaW9uLFxuICAgIH0sIHRoaXMubG9nKTtcbiAgfVxuXG4gIHNldFdEQVBhdGhzIChib290c3RyYXBQYXRoLCBhZ2VudFBhdGgpIHtcbiAgICAvLyBhbGxvdyB0aGUgdXNlciB0byBzcGVjaWZ5IGEgcGxhY2UgZm9yIFdEQS4gVGhpcyBpcyB1bmRvY3VtZW50ZWQgYW5kXG4gICAgLy8gb25seSBoZXJlIGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZyBkZXZlbG9wbWVudCBvZiBXREFcbiAgICB0aGlzLmJvb3RzdHJhcFBhdGggPSBib290c3RyYXBQYXRoIHx8IEJPT1RTVFJBUF9QQVRIO1xuICAgIHRoaXMubG9nLmluZm8oYFVzaW5nIFdEQSBwYXRoOiAnJHt0aGlzLmJvb3RzdHJhcFBhdGh9J2ApO1xuXG4gICAgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2UgbmVlZCB0byBiZSBhYmxlIHRvIHNwZWNpZnkgYWdlbnRQYXRoIHRvb1xuICAgIHRoaXMuYWdlbnRQYXRoID0gYWdlbnRQYXRoIHx8IHBhdGgucmVzb2x2ZSh0aGlzLmJvb3RzdHJhcFBhdGgsICdXZWJEcml2ZXJBZ2VudC54Y29kZXByb2onKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBVc2luZyBXREEgYWdlbnQ6ICcke3RoaXMuYWdlbnRQYXRofSdgKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcyAoKSB7XG4gICAgY29uc3Qgb2Jzb2xldGVQaWRzID0gYXdhaXQgZ2V0UElEc0xpc3RlbmluZ09uUG9ydCh0aGlzLnVybC5wb3J0LFxuICAgICAgKGNtZExpbmUpID0+IGNtZExpbmUuaW5jbHVkZXMoJy9XZWJEcml2ZXJBZ2VudFJ1bm5lcicpICYmXG4gICAgICAgICFjbWRMaW5lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5kZXZpY2UudWRpZC50b0xvd2VyQ2FzZSgpKSk7XG5cbiAgICBpZiAoXy5pc0VtcHR5KG9ic29sZXRlUGlkcykpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBObyBvYnNvbGV0ZSBjYWNoZWQgcHJvY2Vzc2VzIGZyb20gcHJldmlvdXMgV0RBIHNlc3Npb25zIGAgK1xuICAgICAgICBgbGlzdGVuaW5nIG9uIHBvcnQgJHt0aGlzLnVybC5wb3J0fSBoYXZlIGJlZW4gZm91bmRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZy5pbmZvKGBEZXRlY3RlZCAke29ic29sZXRlUGlkcy5sZW5ndGh9IG9ic29sZXRlIGNhY2hlZCBwcm9jZXNzJHtvYnNvbGV0ZVBpZHMubGVuZ3RoID09PSAxID8gJycgOiAnZXMnfSBgICtcbiAgICAgIGBmcm9tIHByZXZpb3VzIFdEQSBzZXNzaW9ucy4gQ2xlYW5pbmcgdGhlbSB1cGApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKCdraWxsJywgb2Jzb2xldGVQaWRzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBGYWlsZWQgdG8ga2lsbCBvYnNvbGV0ZSBjYWNoZWQgcHJvY2VzcyR7b2Jzb2xldGVQaWRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ2VzJ30gJyR7b2Jzb2xldGVQaWRzfScuIGAgK1xuICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpZiBXREEgaXMgcnVubmluZyBvciBub3RcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBXREEgaXMgcnVubmluZ1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGludmFsaWQgcmVzcG9uc2UgY29kZSBvciBib2R5XG4gICAqL1xuICBhc3luYyBpc1J1bm5pbmcgKCkge1xuICAgIHJldHVybiAhIShhd2FpdCB0aGlzLmdldFN0YXR1cygpKTtcbiAgfVxuXG4gIGdldCBiYXNlUGF0aCAoKSB7XG4gICAgaWYgKHRoaXMudXJsLnBhdGggPT09ICcvJykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cmwucGF0aCB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gY3VycmVudCBydW5uaW5nIFdEQSdzIHN0YXR1cyBsaWtlIGJlbG93XG4gICAqIHtcbiAgICogICBcInN0YXRlXCI6IFwic3VjY2Vzc1wiLFxuICAgKiAgIFwib3NcIjoge1xuICAgKiAgICAgXCJuYW1lXCI6IFwiaU9TXCIsXG4gICAqICAgICBcInZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcInNka1ZlcnNpb25cIjogXCIxMS4zXCJcbiAgICogICB9LFxuICAgKiAgIFwiaW9zXCI6IHtcbiAgICogICAgIFwic2ltdWxhdG9yVmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwiaXBcIjogXCIxNzIuMjU0Ljk5LjM0XCJcbiAgICogICB9LFxuICAgKiAgIFwiYnVpbGRcIjoge1xuICAgKiAgICAgXCJ0aW1lXCI6IFwiSnVuIDI0IDIwMTggMTc6MDg6MjFcIixcbiAgICogICAgIFwicHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJcIjogXCJjb20uZmFjZWJvb2suV2ViRHJpdmVyQWdlbnRSdW5uZXJcIlxuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBTdGF0ZSBPYmplY3RcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBpbnZhbGlkIHJlc3BvbnNlIGNvZGUgb3IgYm9keVxuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdHVzICgpIHtcbiAgICBjb25zdCBub1Nlc3Npb25Qcm94eSA9IG5ldyBOb1Nlc3Npb25Qcm94eSh7XG4gICAgICBzZXJ2ZXI6IHRoaXMudXJsLmhvc3RuYW1lLFxuICAgICAgcG9ydDogdGhpcy51cmwucG9ydCxcbiAgICAgIGJhc2U6IHRoaXMuYmFzZVBhdGgsXG4gICAgICB0aW1lb3V0OiAzMDAwLFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgbm9TZXNzaW9uUHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBXREEgaXMgbm90IGxpc3RlbmluZyBhdCAnJHt0aGlzLnVybC5ocmVmfSdgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbmluc3RhbGwgV0RBcyBmcm9tIHRoZSB0ZXN0IGRldmljZS5cbiAgICogT3ZlciBYY29kZSAxMSwgbXVsdGlwbGUgV0RBIGNhbiBiZSBpbiB0aGUgZGV2aWNlIHNpbmNlIFhjb2RlIDExIGdlbmVyYXRlcyBkaWZmZXJlbnQgV0RBLlxuICAgKiBBcHBpdW0gZG9lcyBub3QgZXhwZWN0IG11bHRpcGxlIFdEQXMgYXJlIHJ1bm5pbmcgb24gYSBkZXZpY2UuXG4gICAqL1xuICBhc3luYyB1bmluc3RhbGwgKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBidW5kbGVJZHMgPSBhd2FpdCB0aGlzLmRldmljZS5nZXRVc2VySW5zdGFsbGVkQnVuZGxlSWRzQnlCdW5kbGVOYW1lKFdEQV9DRl9CVU5ETEVfTkFNRSk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGJ1bmRsZUlkcykpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoJ05vIFdEQXMgb24gdGhlIGRldmljZS4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVW5pbnN0YWxsaW5nIFdEQXM6ICcke2J1bmRsZUlkc30nYCk7XG4gICAgICBmb3IgKGNvbnN0IGJ1bmRsZUlkIG9mIGJ1bmRsZUlkcykge1xuICAgICAgICBhd2FpdCB0aGlzLmRldmljZS5yZW1vdmVBcHAoYnVuZGxlSWQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGUpO1xuICAgICAgdGhpcy5sb2cud2FybihgV2ViRHJpdmVyQWdlbnQgdW5pbnN0YWxsIGZhaWxlZC4gUGVyaGFwcywgaXQgaXMgYWxyZWFkeSB1bmluc3RhbGxlZD8gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX2NsZWFudXBQcm9qZWN0SWZGcmVzaCAoKSB7XG4gICAgY29uc3QgaG9tZUZvbGRlciA9IHByb2Nlc3MuZW52LkhPTUU7XG4gICAgaWYgKCFob21lRm9sZGVyKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdUaGUgSE9NRSBmb2xkZXIgcGF0aCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRVcGdyYWRlVGltZXN0YW1wID0gYXdhaXQgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCgpO1xuICAgIGlmICghXy5pc0ludGVnZXIoY3VycmVudFVwZ3JhZGVUaW1lc3RhbXApKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdJdCBpcyBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgdGltZXN0YW1wIG9mIHRoZSBwYWNrYWdlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGltZXN0YW1wUGF0aCA9IHBhdGgucmVzb2x2ZShob21lRm9sZGVyLCBXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCk7XG4gICAgY29uc3QgZGlkVGltZXN0YW1wRXhpc3QgPSBhd2FpdCBmcy5leGlzdHModGltZXN0YW1wUGF0aCk7XG4gICAgaWYgKGRpZFRpbWVzdGFtcEV4aXN0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5hY2Nlc3ModGltZXN0YW1wUGF0aCwgZnMuV19PSyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgYXQgJyR7dGltZXN0YW1wUGF0aH0nIGlzIG5vdCB3cml0ZWFibGUuIGAgK1xuICAgICAgICAgIGBTa2lwcGluZyBzb3VyY2VzIGNsZWFudXBgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjZW50VXBncmFkZVRpbWVzdGFtcCA9IHBhcnNlSW50KGF3YWl0IGZzLnJlYWRGaWxlKHRpbWVzdGFtcFBhdGgsICd1dGY4JyksIDEwKTtcbiAgICAgIGlmIChfLmlzSW50ZWdlcihyZWNlbnRVcGdyYWRlVGltZXN0YW1wKSkge1xuICAgICAgICBpZiAocmVjZW50VXBncmFkZVRpbWVzdGFtcCA+PSBjdXJyZW50VXBncmFkZVRpbWVzdGFtcCkge1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oYFdlYkRyaXZlckFnZW50IGRvZXMgbm90IG5lZWQgYSBjbGVhbnVwLiBUaGUgc291cmNlcyBhcmUgdXAgdG8gZGF0ZSBgICtcbiAgICAgICAgICAgIGAoJHtyZWNlbnRVcGdyYWRlVGltZXN0YW1wfSA+PSAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfSlgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgV2ViRHJpdmVyQWdlbnQgc291cmNlcyBoYXZlIGJlZW4gdXBncmFkZWQgYCArXG4gICAgICAgICAgYCgke3JlY2VudFVwZ3JhZGVUaW1lc3RhbXB9IDwgJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0pYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBUaGUgcmVjZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9JyBpcyBjb3JydXB0ZWQuIFRyeWluZyB0byBmaXggaXRgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgbWtkaXJwKHBhdGguZGlybmFtZSh0aW1lc3RhbXBQYXRoKSk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUodGltZXN0YW1wUGF0aCwgYCR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9YCwgJ3V0ZjgnKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBTdG9yZWQgdGhlIHJlY2VudCBXZWJEcml2ZXJBZ2VudCB1cGdyYWRlIHRpbWVzdGFtcCAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfSBgICtcbiAgICAgICAgYGF0ICcke3RpbWVzdGFtcFBhdGh9J2ApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFVuYWJsZSB0byBjcmVhdGUgdGhlIHJlY2VudCBXZWJEcml2ZXJBZ2VudCB1cGdyYWRlIHRpbWVzdGFtcCBhdCAnJHt0aW1lc3RhbXBQYXRofScuIGAgK1xuICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGlkVGltZXN0YW1wRXhpc3QpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1RoZXJlIGlzIG5vIG5lZWQgdG8gcGVyZm9ybSB0aGUgcHJvamVjdCBjbGVhbnVwLiBBIGZyZXNoIGluc3RhbGwgaGFzIGJlZW4gZGV0ZWN0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLmNsZWFuUHJvamVjdCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBwZXJmb3JtIFdlYkRyaXZlckFnZW50IHByb2plY3QgY2xlYW51cC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gY3VycmVudCBydW5uaW5nIFdEQSdzIHN0YXR1cyBsaWtlIGJlbG93IGFmdGVyIGxhdW5jaGluZyBXREFcbiAgICoge1xuICAgKiAgIFwic3RhdGVcIjogXCJzdWNjZXNzXCIsXG4gICAqICAgXCJvc1wiOiB7XG4gICAqICAgICBcIm5hbWVcIjogXCJpT1NcIixcbiAgICogICAgIFwidmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwic2RrVmVyc2lvblwiOiBcIjExLjNcIlxuICAgKiAgIH0sXG4gICAqICAgXCJpb3NcIjoge1xuICAgKiAgICAgXCJzaW11bGF0b3JWZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJpcFwiOiBcIjE3Mi4yNTQuOTkuMzRcIlxuICAgKiAgIH0sXG4gICAqICAgXCJidWlsZFwiOiB7XG4gICAqICAgICBcInRpbWVcIjogXCJKdW4gMjQgMjAxOCAxNzowODoyMVwiLFxuICAgKiAgICAgXCJwcm9kdWN0QnVuZGxlSWRlbnRpZmllclwiOiBcImNvbS5mYWNlYm9vay5XZWJEcml2ZXJBZ2VudFJ1bm5lclwiXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWQgTGF1bmNoIFdEQSBhbmQgZXN0YWJsaXNoIHRoZSBzZXNzaW9uIHdpdGggdGhpcyBzZXNzaW9uSWRcbiAgICogQHJldHVybiB7P29iamVjdH0gU3RhdGUgT2JqZWN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgaW52YWxpZCByZXNwb25zZSBjb2RlIG9yIGJvZHlcbiAgICovXG4gIGFzeW5jIGxhdW5jaCAoc2Vzc2lvbklkKSB7XG4gICAgaWYgKHRoaXMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFVzaW5nIHByb3ZpZGVkIFdlYmRyaXZlckFnZW50IGF0ICcke3RoaXMud2ViRHJpdmVyQWdlbnRVcmx9J2ApO1xuICAgICAgdGhpcy51cmwgPSB0aGlzLndlYkRyaXZlckFnZW50VXJsO1xuICAgICAgdGhpcy5zZXR1cFByb3hpZXMoc2Vzc2lvbklkKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIH1cblxuICAgIHRoaXMubG9nLmluZm8oJ0xhdW5jaGluZyBXZWJEcml2ZXJBZ2VudCBvbiB0aGUgZGV2aWNlJyk7XG5cbiAgICB0aGlzLnNldHVwUHJveGllcyhzZXNzaW9uSWQpO1xuXG4gICAgaWYgKCF0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgJiYgIWF3YWl0IGZzLmV4aXN0cyh0aGlzLmFnZW50UGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHJ5aW5nIHRvIHVzZSBXZWJEcml2ZXJBZ2VudCBwcm9qZWN0IGF0ICcke3RoaXMuYWdlbnRQYXRofScgYnV0IHRoZSBgICtcbiAgICAgICAgICAgICAgICAgICAgICAnZmlsZSBkb2VzIG5vdCBleGlzdCcpO1xuICAgIH1cblxuICAgIC8vIHVzZVhjdGVzdHJ1bkZpbGUgYW5kIHVzZVByZWJ1aWx0V0RBIHVzZSBleGlzdGluZyBkZXBlbmRlbmNpZXNcbiAgICAvLyBJdCBkZXBlbmRzIG9uIHVzZXIgc2lkZVxuICAgIGlmICh0aGlzLmlkYiB8fCB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgfHwgKHRoaXMuZGVyaXZlZERhdGFQYXRoICYmIHRoaXMudXNlUHJlYnVpbHRXREEpKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdTa2lwcGVkIFdEQSBwcm9qZWN0IGNsZWFudXAgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBjYXBhYmlsaXRpZXMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3luY2hyb25pemF0aW9uS2V5ID0gcGF0aC5ub3JtYWxpemUodGhpcy5ib290c3RyYXBQYXRoKTtcbiAgICAgIGF3YWl0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuYWNxdWlyZShzeW5jaHJvbml6YXRpb25LZXksXG4gICAgICAgIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuX2NsZWFudXBQcm9qZWN0SWZGcmVzaCgpKTtcbiAgICB9XG5cbiAgICAvLyBXZSBuZWVkIHRvIHByb3ZpZGUgV0RBIGxvY2FsIHBvcnQsIGJlY2F1c2UgaXQgbWlnaHQgYmUgb2NjdXBpZWRcbiAgICBhd2FpdCByZXNldFRlc3RQcm9jZXNzZXModGhpcy5kZXZpY2UudWRpZCwgIXRoaXMuaXNSZWFsRGV2aWNlKTtcblxuICAgIGlmICh0aGlzLmlkYikge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc3RhcnRXaXRoSURCKCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLmluaXQodGhpcy5ub1Nlc3Npb25Qcm94eSk7XG5cbiAgICAvLyBTdGFydCB0aGUgeGNvZGVidWlsZCBwcm9jZXNzXG4gICAgaWYgKHRoaXMucHJlYnVpbGRXREEpIHtcbiAgICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5wcmVidWlsZCgpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnN0YXJ0KCk7XG4gIH1cblxuICBhc3luYyBzdGFydFdpdGhJREIgKCkge1xuICAgIHRoaXMubG9nLmluZm8oJ1dpbGwgbGF1bmNoIFdEQSB3aXRoIGlkYiBpbnN0ZWFkIG9mIHhjb2RlYnVpbGQgc2luY2UgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZyBpcyBlbmFibGVkJyk7XG4gICAgY29uc3Qge3dkYUJ1bmRsZUlkLCB0ZXN0QnVuZGxlSWR9ID0gYXdhaXQgdGhpcy5wcmVwYXJlV0RBKCk7XG4gICAgY29uc3QgZW52ID0ge1xuICAgICAgVVNFX1BPUlQ6IHRoaXMud2RhUmVtb3RlUG9ydCxcbiAgICAgIFdEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCxcbiAgICB9O1xuICAgIGlmICh0aGlzLm1qcGVnU2VydmVyUG9ydCkge1xuICAgICAgZW52Lk1KUEVHX1NFUlZFUl9QT1JUID0gdGhpcy5tanBlZ1NlcnZlclBvcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaWRiLnJ1blhDVUlUZXN0KHdkYUJ1bmRsZUlkLCB3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkLCB7ZW52fSk7XG4gIH1cblxuICBhc3luYyBwYXJzZUJ1bmRsZUlkICh3ZGFCdW5kbGVQYXRoKSB7XG4gICAgY29uc3QgaW5mb1BsaXN0UGF0aCA9IHBhdGguam9pbih3ZGFCdW5kbGVQYXRoLCAnSW5mby5wbGlzdCcpO1xuICAgIGNvbnN0IGluZm9QbGlzdCA9IGF3YWl0IHBsaXN0LnBhcnNlUGxpc3QoYXdhaXQgZnMucmVhZEZpbGUoaW5mb1BsaXN0UGF0aCkpO1xuICAgIGlmICghaW5mb1BsaXN0LkNGQnVuZGxlSWRlbnRpZmllcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBidW5kbGUgaWQgaW4gJyR7aW5mb1BsaXN0UGF0aH0nYCk7XG4gICAgfVxuICAgIHJldHVybiBpbmZvUGxpc3QuQ0ZCdW5kbGVJZGVudGlmaWVyO1xuICB9XG5cbiAgYXN5bmMgcHJlcGFyZVdEQSAoKSB7XG4gICAgY29uc3Qgd2RhQnVuZGxlUGF0aCA9IHRoaXMud2RhQnVuZGxlUGF0aCB8fCBhd2FpdCB0aGlzLmZldGNoV0RBQnVuZGxlKCk7XG4gICAgY29uc3Qgd2RhQnVuZGxlSWQgPSBhd2FpdCB0aGlzLnBhcnNlQnVuZGxlSWQod2RhQnVuZGxlUGF0aCk7XG4gICAgaWYgKCFhd2FpdCB0aGlzLmRldmljZS5pc0FwcEluc3RhbGxlZCh3ZGFCdW5kbGVJZCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGV2aWNlLmluc3RhbGxBcHAod2RhQnVuZGxlUGF0aCk7XG4gICAgfVxuICAgIGNvbnN0IHRlc3RCdW5kbGVJZCA9IGF3YWl0IHRoaXMuaWRiLmluc3RhbGxYQ1Rlc3RCdW5kbGUocGF0aC5qb2luKHdkYUJ1bmRsZVBhdGgsICdQbHVnSW5zJywgJ1dlYkRyaXZlckFnZW50UnVubmVyLnhjdGVzdCcpKTtcbiAgICByZXR1cm4ge3dkYUJ1bmRsZUlkLCB0ZXN0QnVuZGxlSWQsIHdkYUJ1bmRsZVBhdGh9O1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hXREFCdW5kbGUgKCkge1xuICAgIGlmICghdGhpcy5kZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiBhd2FpdCBidW5kbGVXREFTaW0odGhpcy54Y29kZWJ1aWxkKTtcbiAgICB9XG4gICAgY29uc3Qgd2RhQnVuZGxlUGF0aHMgPSBhd2FpdCBmcy5nbG9iKGAke3RoaXMuZGVyaXZlZERhdGFQYXRofS8qKi8qJHtXREFfUlVOTkVSX0FQUH0vYCwge1xuICAgICAgYWJzb2x1dGU6IHRydWUsXG4gICAgfSk7XG4gICAgaWYgKF8uaXNFbXB0eSh3ZGFCdW5kbGVQYXRocykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIFdEQSBidW5kbGUgaW4gJyR7dGhpcy5kZXJpdmVkRGF0YVBhdGh9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gd2RhQnVuZGxlUGF0aHNbMF07XG4gIH1cblxuICBhc3luYyBpc1NvdXJjZUZyZXNoICgpIHtcbiAgICBjb25zdCBleGlzdHNQcm9taXNlcyA9IFtcbiAgICAgICdSZXNvdXJjZXMnLFxuICAgICAgYFJlc291cmNlcyR7cGF0aC5zZXB9V2ViRHJpdmVyQWdlbnQuYnVuZGxlYCxcbiAgICBdLm1hcCgoc3ViUGF0aCkgPT4gZnMuZXhpc3RzKHBhdGgucmVzb2x2ZSh0aGlzLmJvb3RzdHJhcFBhdGgsIHN1YlBhdGgpKSk7XG4gICAgcmV0dXJuIChhd2FpdCBCLmFsbChleGlzdHNQcm9taXNlcykpLnNvbWUoKHYpID0+IHYgPT09IGZhbHNlKTtcbiAgfVxuXG4gIHNldHVwUHJveGllcyAoc2Vzc2lvbklkKSB7XG4gICAgY29uc3QgcHJveHlPcHRzID0ge1xuICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgIHNlcnZlcjogdGhpcy51cmwuaG9zdG5hbWUsXG4gICAgICBwb3J0OiB0aGlzLnVybC5wb3J0LFxuICAgICAgYmFzZTogdGhpcy5iYXNlUGF0aCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMud2RhQ29ubmVjdGlvblRpbWVvdXQsXG4gICAgICBrZWVwQWxpdmU6IHRydWUsXG4gICAgfTtcblxuICAgIHRoaXMuandwcm94eSA9IG5ldyBKV1Byb3h5KHByb3h5T3B0cyk7XG4gICAgdGhpcy5qd3Byb3h5LnNlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5qd3Byb3h5LnByb3h5UmVxUmVzLmJpbmQodGhpcy5qd3Byb3h5KTtcblxuICAgIHRoaXMubm9TZXNzaW9uUHJveHkgPSBuZXcgTm9TZXNzaW9uUHJveHkocHJveHlPcHRzKTtcbiAgfVxuXG4gIGFzeW5jIHF1aXQgKCkge1xuICAgIHRoaXMubG9nLmluZm8oJ1NodXR0aW5nIGRvd24gc3ViLXByb2Nlc3NlcycpO1xuXG4gICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnF1aXQoKTtcbiAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQucmVzZXQoKTtcblxuICAgIGlmICh0aGlzLmp3cHJveHkpIHtcbiAgICAgIHRoaXMuandwcm94eS5zZXNzaW9uSWQgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLmFyZ3Mud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgIC8vIGlmIHdlIHBvcHVsYXRlZCB0aGUgdXJsIG91cnNlbHZlcyAoZHVyaW5nIGBzZXR1cENhY2hpbmdgIGNhbGwsIGZvciBpbnN0YW5jZSlcbiAgICAgIC8vIHRoZW4gY2xlYW4gdGhhdCB1cC4gSWYgdGhlIHVybCB3YXMgc3VwcGxpZWQsIHdlIHdhbnQgdG8ga2VlcCBpdFxuICAgICAgdGhpcy53ZWJEcml2ZXJBZ2VudFVybCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHVybCAoKSB7XG4gICAgaWYgKCF0aGlzLl91cmwpIHtcbiAgICAgIGlmICh0aGlzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAgIHRoaXMuX3VybCA9IHVybC5wYXJzZSh0aGlzLndlYkRyaXZlckFnZW50VXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBvcnQgPSB0aGlzLndkYUxvY2FsUG9ydCB8fCBXREFfQUdFTlRfUE9SVDtcbiAgICAgICAgY29uc3Qge3Byb3RvY29sLCBob3N0bmFtZX0gPSB1cmwucGFyc2UodGhpcy53ZGFCYXNlVXJsIHx8IFdEQV9CQVNFX1VSTCk7XG4gICAgICAgIHRoaXMuX3VybCA9IHVybC5wYXJzZShgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWV9OiR7cG9ydH1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwgKF91cmwpIHtcbiAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UoX3VybCk7XG4gIH1cblxuICBnZXQgZnVsbHlTdGFydGVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydGVkO1xuICB9XG5cbiAgc2V0IGZ1bGx5U3RhcnRlZCAoc3RhcnRlZCA9IGZhbHNlKSB7XG4gICAgdGhpcy5zdGFydGVkID0gc3RhcnRlZDtcbiAgfVxuXG4gIGFzeW5jIHJldHJpZXZlRGVyaXZlZERhdGFQYXRoICgpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV1c2UgcnVubmluZyBXREEgaWYgaXQgaGFzIHRoZSBzYW1lIGJ1bmRsZSBpZCB3aXRoIHVwZGF0ZWRXREFCdW5kbGVJZC5cbiAgICogT3IgcmV1c2UgaXQgaWYgaXQgaGFzIHRoZSBkZWZhdWx0IGlkIHdpdGhvdXQgdXBkYXRlZFdEQUJ1bmRsZUlkLlxuICAgKiBVbmluc3RhbGwgaXQgaWYgdGhlIG1ldGhvZCBmYWNlcyBhbiBleGNlcHRpb24gZm9yIHRoZSBhYm92ZSBzaXR1YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cGRhdGVkV0RBQnVuZGxlSWQgQnVuZGxlSWQgeW91J2QgbGlrZSB0byB1c2VcbiAgICovXG4gIGFzeW5jIHNldHVwQ2FjaGluZyAoKSB7XG4gICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICBpZiAoIXN0YXR1cyB8fCAhc3RhdHVzLmJ1aWxkKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnV0RBIGlzIGN1cnJlbnRseSBub3QgcnVubmluZy4gVGhlcmUgaXMgbm90aGluZyB0byBjYWNoZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyLFxuICAgICAgdXBncmFkZWRBdCxcbiAgICB9ID0gc3RhdHVzLmJ1aWxkO1xuICAgIC8vIGZvciByZWFsIGRldmljZVxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSAmJiB1dGlsLmhhc1ZhbHVlKHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSAmJiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCAhPT0gcHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFdpbGwgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQgYnVuZGxlIGlkLiBUaGUgYWN0dWFsIHZhbHVlIGlzICcke3Byb2R1Y3RCdW5kbGVJZGVudGlmaWVyfScuYCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgICB9XG4gICAgLy8gZm9yIHNpbXVsYXRvclxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSAmJiAhdXRpbC5oYXNWYWx1ZSh0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCkgJiYgV0RBX1JVTk5FUl9CVU5ETEVfSUQgIT09IHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBXaWxsIHVuaW5zdGFsbCBydW5uaW5nIFdEQSBzaW5jZSBpdHMgYnVuZGxlIGlkIGlzIG5vdCBlcXVhbCB0byB0aGUgZGVmYXVsdCB2YWx1ZSAke1dEQV9SVU5ORVJfQlVORExFX0lEfWApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0dWFsVXBncmFkZVRpbWVzdGFtcCA9IGF3YWl0IGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAoKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVXBncmFkZSB0aW1lc3RhbXAgb2YgdGhlIGN1cnJlbnRseSBidW5kbGVkIFdEQTogJHthY3R1YWxVcGdyYWRlVGltZXN0YW1wfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGBVcGdyYWRlIHRpbWVzdGFtcCBvZiB0aGUgV0RBIG9uIHRoZSBkZXZpY2U6ICR7dXBncmFkZWRBdH1gKTtcbiAgICBpZiAoYWN0dWFsVXBncmFkZVRpbWVzdGFtcCAmJiB1cGdyYWRlZEF0ICYmIF8udG9Mb3dlcihgJHthY3R1YWxVcGdyYWRlVGltZXN0YW1wfWApICE9PSBfLnRvTG93ZXIoYCR7dXBncmFkZWRBdH1gKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnV2lsbCB1bmluc3RhbGwgcnVubmluZyBXREEgc2luY2UgaXQgaGFzIGRpZmZlcmVudCB2ZXJzaW9uIGluIGNvbXBhcmlzb24gdG8gdGhlIG9uZSAnICtcbiAgICAgICAgYHdoaWNoIGlzIGJ1bmRsZWQgd2l0aCBhcHBpdW0teGN1aXRlc3QtZHJpdmVyIG1vZHVsZSAoJHthY3R1YWxVcGdyYWRlVGltZXN0YW1wfSAhPSAke3VwZ3JhZGVkQXR9KWApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IHV0aWwuaGFzVmFsdWUocHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpXG4gICAgICA/IGBXaWxsIHJldXNlIHByZXZpb3VzbHkgY2FjaGVkIFdEQSBpbnN0YW5jZSBhdCAnJHt0aGlzLnVybC5ocmVmfScgd2l0aCAnJHtwcm9kdWN0QnVuZGxlSWRlbnRpZmllcn0nYFxuICAgICAgOiBgV2lsbCByZXVzZSBwcmV2aW91c2x5IGNhY2hlZCBXREEgaW5zdGFuY2UgYXQgJyR7dGhpcy51cmwuaHJlZn0nYDtcbiAgICB0aGlzLmxvZy5pbmZvKGAke21lc3NhZ2V9LiBTZXQgdGhlIHdkYUxvY2FsUG9ydCBjYXBhYmlsaXR5IHRvIGEgdmFsdWUgZGlmZmVyZW50IGZyb20gJHt0aGlzLnVybC5wb3J0fSBpZiB0aGlzIGlzIGFuIHVuZGVzaXJlZCBiZWhhdmlvci5gKTtcbiAgICB0aGlzLndlYkRyaXZlckFnZW50VXJsID0gdGhpcy51cmwuaHJlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWl0IGFuZCB1bmluc3RhbGwgcnVubmluZyBXREEuXG4gICAqL1xuICBhc3luYyBxdWl0QW5kVW5pbnN0YWxsICgpIHtcbiAgICBhd2FpdCB0aGlzLnF1aXQoKTtcbiAgICBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdlYkRyaXZlckFnZW50O1xuZXhwb3J0IHsgV2ViRHJpdmVyQWdlbnQgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLQSxNQUFNQSxrQkFBa0IsR0FBRyxLQUFLLElBQWhDO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLElBQXZCO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsNkJBQTNCO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsSUFBSUMsa0JBQUosRUFBL0I7O0FBRUEsTUFBTUMsY0FBTixDQUFxQjtF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
@@ -13,7 +13,7 @@ var _asyncbox = require("asyncbox");
13
13
 
14
14
  var _teen_process = require("teen_process");
15
15
 
16
- var _support = require("@appium/support");
16
+ var _support = require("appium/support");
17
17
 
18
18
  var _logger = _interopRequireDefault(require("./logger"));
19
19
 
@@ -393,4 +393,4 @@ var _default = XcodeBuild;
393
393
  exports.default = _default;require('source-map-support').install();
394
394
 
395
395
 
396
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3hjb2RlYnVpbGQuanMiLCJuYW1lcyI6WyJERUZBVUxUX1NJR05JTkdfSUQiLCJQUkVCVUlMRF9ERUxBWSIsIlJVTk5FUl9TQ0hFTUVfSU9TIiwiTElCX1NDSEVNRV9JT1MiLCJFUlJPUl9XUklUSU5HX0FUVEFDSE1FTlQiLCJFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQiLCJJR05PUkVEX0VSUk9SUyIsIlJVTk5FUl9TQ0hFTUVfVFYiLCJMSUJfU0NIRU1FX1RWIiwieGNvZGVMb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJYY29kZUJ1aWxkIiwiY29uc3RydWN0b3IiLCJ4Y29kZVZlcnNpb24iLCJkZXZpY2UiLCJhcmdzIiwibG9nIiwiZGVmYXVsdExvZ2dlciIsInJlYWxEZXZpY2UiLCJhZ2VudFBhdGgiLCJib290c3RyYXBQYXRoIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsInNob3dYY29kZUxvZyIsInhjb2RlQ29uZmlnRmlsZSIsInhjb2RlT3JnSWQiLCJ4Y29kZVNpZ25pbmdJZCIsImtleWNoYWluUGF0aCIsImtleWNoYWluUGFzc3dvcmQiLCJwcmVidWlsZFdEQSIsInVzZVByZWJ1aWx0V0RBIiwidXNlU2ltcGxlQnVpbGRUZXN0IiwidXNlWGN0ZXN0cnVuRmlsZSIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFSZW1vdGVQb3J0IiwidXBkYXRlZFdEQUJ1bmRsZUlkIiwiZGVyaXZlZERhdGFQYXRoIiwibWpwZWdTZXJ2ZXJQb3J0IiwicHJlYnVpbGREZWxheSIsIl8iLCJpc051bWJlciIsImFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIiwicmVzdWx0QnVuZGxlUGF0aCIsInJlc3VsdEJ1bmRsZVZlcnNpb24iLCJpbml0Iiwibm9TZXNzaW9uUHJveHkiLCJkZXZpdmVJbmZvIiwiaXNSZWFsRGV2aWNlIiwidWRpZCIsInhjdGVzdHJ1bkZpbGVQYXRoIiwic2V0WGN0ZXN0cnVuRmlsZSIsInJlc2V0UHJvamVjdEZpbGUiLCJ1cGRhdGVQcm9qZWN0RmlsZSIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwiX2Rlcml2ZWREYXRhUGF0aFByb21pc2UiLCJzdGRvdXQiLCJleGVjIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJwYXR0ZXJuIiwibWF0Y2giLCJ0cnVuY2F0ZSIsImxlbmd0aCIsImRlYnVnIiwicGF0aCIsImRpcm5hbWUiLCJub3JtYWxpemUiLCJyZXNldCIsInByZWJ1aWxkIiwic3RhcnQiLCJ4Y29kZWJ1aWxkIiwiQiIsImRlbGF5IiwiY2xlYW5Qcm9qZWN0IiwidG1wSXNUdk9TIiwiaXNUdk9TIiwibGliU2NoZW1lIiwicnVubmVyU2NoZW1lIiwic2NoZW1lIiwiZ2V0Q29tbWFuZCIsImJ1aWxkT25seSIsImNtZCIsImJ1aWxkQ21kIiwidGVzdENtZCIsInB1c2giLCJ2ZXJzaW9uTWF0Y2giLCJSZWdFeHAiLCJwcm9jZXNzIiwiZW52IiwiQVBQSVVNX1hDVUlURVNUX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUyIsImNyZWF0ZVN1YlByb2Nlc3MiLCJzZXRSZWFsRGV2aWNlU2VjdXJpdHkiLCJnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSIsImpvaW4iLCJPYmplY3QiLCJhc3NpZ24iLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJNSlBFR19TRVJWRVJfUE9SVCIsInVwZ3JhZGVUaW1lc3RhbXAiLCJnZXRXREFVcGdyYWRlVGltZXN0YW1wIiwiVVBHUkFERV9USU1FU1RBTVAiLCJTdWJQcm9jZXNzIiwiY3dkIiwiZGV0YWNoZWQiLCJzdGRpbyIsImxvZ1hjb2RlT3V0cHV0IiwibG9nTXNnIiwiaXNCb29sZWFuIiwib24iLCJzdGRlcnIiLCJvdXQiLCJpbmNsdWRlcyIsImxvZ0xvY2F0aW9uIiwiZmlyc3QiLCJyZW1vdmUiLCJ0cmltIiwic3BsaXQiLCJ2Iiwic3RhcnRzV2l0aCIsInNlcCIsImlnbm9yZUVycm9yIiwic29tZSIsIngiLCJfd2RhX2Vycm9yX29jY3VycmVkIiwibGluZSIsIkVPTCIsImVycm9yIiwiX3dkYV9lcnJvcl9tZXNzYWdlIiwicmVzb2x2ZSIsInJlamVjdCIsImNvZGUiLCJzaWduYWwiLCJkYXRhIiwiZnMiLCJyZWFkRmlsZSIsInByb2Nlc3NFeGl0ZWQiLCJFcnJvciIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGF0dXMiLCJ3YWl0Rm9yU3RhcnQiLCJtc2ciLCJjdXJyZW50U3RhdHVzIiwicmV0cmllcyIsInBhcnNlSW50IiwicmV0cnlJbnRlcnZhbCIsInByb3h5VGltZW91dCIsInRpbWVvdXQiLCJjb21tYW5kIiwiaW9zIiwiaXAiLCJhZ2VudFVybCIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsInF1aXQiLCJraWxsUHJvY2VzcyJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi94Y29kZWJ1aWxkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzLCBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGZzLCBsb2dnZXIsIHRpbWluZyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQge1xuICBzZXRSZWFsRGV2aWNlU2VjdXJpdHksIGdlbmVyYXRlWGNvZGVDb25maWdGaWxlLCBzZXRYY3Rlc3RydW5GaWxlLFxuICB1cGRhdGVQcm9qZWN0RmlsZSwgcmVzZXRQcm9qZWN0RmlsZSwga2lsbFByb2Nlc3MsXG4gIGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAsIGlzVHZPUyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgRU9MIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHsgV0RBX1JVTk5FUl9CVU5ETEVfSUQgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cblxuY29uc3QgREVGQVVMVF9TSUdOSU5HX0lEID0gJ2lQaG9uZSBEZXZlbG9wZXInO1xuY29uc3QgUFJFQlVJTERfREVMQVkgPSAwO1xuY29uc3QgUlVOTkVSX1NDSEVNRV9JT1MgPSAnV2ViRHJpdmVyQWdlbnRSdW5uZXInO1xuY29uc3QgTElCX1NDSEVNRV9JT1MgPSAnV2ViRHJpdmVyQWdlbnRMaWInO1xuXG5jb25zdCBFUlJPUl9XUklUSU5HX0FUVEFDSE1FTlQgPSAnRXJyb3Igd3JpdGluZyBhdHRhY2htZW50IGRhdGEgdG8gZmlsZSc7XG5jb25zdCBFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQgPSAnRXJyb3IgY29weWluZyB0ZXN0aW5nIGF0dGFjaG1lbnQnO1xuY29uc3QgSUdOT1JFRF9FUlJPUlMgPSBbXG4gIEVSUk9SX1dSSVRJTkdfQVRUQUNITUVOVCxcbiAgRVJST1JfQ09QWUlOR19BVFRBQ0hNRU5ULFxuICAnRmFpbGVkIHRvIHJlbW92ZSBzY3JlZW5zaG90IGF0IHBhdGgnLFxuXTtcblxuY29uc3QgUlVOTkVSX1NDSEVNRV9UViA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lcl90dk9TJztcbmNvbnN0IExJQl9TQ0hFTUVfVFYgPSAnV2ViRHJpdmVyQWdlbnRMaWJfdHZPUyc7XG5cbmNvbnN0IHhjb2RlTG9nID0gbG9nZ2VyLmdldExvZ2dlcignWGNvZGUnKTtcblxuXG5jbGFzcyBYY29kZUJ1aWxkIHtcbiAgY29uc3RydWN0b3IgKHhjb2RlVmVyc2lvbiwgZGV2aWNlLCBhcmdzID0ge30sIGxvZyA9IG51bGwpIHtcbiAgICB0aGlzLnhjb2RlVmVyc2lvbiA9IHhjb2RlVmVyc2lvbjtcblxuICAgIHRoaXMuZGV2aWNlID0gZGV2aWNlO1xuICAgIHRoaXMubG9nID0gbG9nID8/IGRlZmF1bHRMb2dnZXI7XG5cbiAgICB0aGlzLnJlYWxEZXZpY2UgPSBhcmdzLnJlYWxEZXZpY2U7XG5cbiAgICB0aGlzLmFnZW50UGF0aCA9IGFyZ3MuYWdlbnRQYXRoO1xuICAgIHRoaXMuYm9vdHN0cmFwUGF0aCA9IGFyZ3MuYm9vdHN0cmFwUGF0aDtcblxuICAgIHRoaXMucGxhdGZvcm1WZXJzaW9uID0gYXJncy5wbGF0Zm9ybVZlcnNpb247XG4gICAgdGhpcy5wbGF0Zm9ybU5hbWUgPSBhcmdzLnBsYXRmb3JtTmFtZTtcbiAgICB0aGlzLmlvc1Nka1ZlcnNpb24gPSBhcmdzLmlvc1Nka1ZlcnNpb247XG5cbiAgICB0aGlzLnNob3dYY29kZUxvZyA9IGFyZ3Muc2hvd1hjb2RlTG9nO1xuXG4gICAgdGhpcy54Y29kZUNvbmZpZ0ZpbGUgPSBhcmdzLnhjb2RlQ29uZmlnRmlsZTtcbiAgICB0aGlzLnhjb2RlT3JnSWQgPSBhcmdzLnhjb2RlT3JnSWQ7XG4gICAgdGhpcy54Y29kZVNpZ25pbmdJZCA9IGFyZ3MueGNvZGVTaWduaW5nSWQgfHwgREVGQVVMVF9TSUdOSU5HX0lEO1xuICAgIHRoaXMua2V5Y2hhaW5QYXRoID0gYXJncy5rZXljaGFpblBhdGg7XG4gICAgdGhpcy5rZXljaGFpblBhc3N3b3JkID0gYXJncy5rZXljaGFpblBhc3N3b3JkO1xuXG4gICAgdGhpcy5wcmVidWlsZFdEQSA9IGFyZ3MucHJlYnVpbGRXREE7XG4gICAgdGhpcy51c2VQcmVidWlsdFdEQSA9IGFyZ3MudXNlUHJlYnVpbHRXREE7XG4gICAgdGhpcy51c2VTaW1wbGVCdWlsZFRlc3QgPSBhcmdzLnVzZVNpbXBsZUJ1aWxkVGVzdDtcblxuICAgIHRoaXMudXNlWGN0ZXN0cnVuRmlsZSA9IGFyZ3MudXNlWGN0ZXN0cnVuRmlsZTtcblxuICAgIHRoaXMubGF1bmNoVGltZW91dCA9IGFyZ3MubGF1bmNoVGltZW91dDtcblxuICAgIHRoaXMud2RhUmVtb3RlUG9ydCA9IGFyZ3Mud2RhUmVtb3RlUG9ydDtcblxuICAgIHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkID0gYXJncy51cGRhdGVkV0RBQnVuZGxlSWQ7XG4gICAgdGhpcy5kZXJpdmVkRGF0YVBhdGggPSBhcmdzLmRlcml2ZWREYXRhUGF0aDtcblxuICAgIHRoaXMubWpwZWdTZXJ2ZXJQb3J0ID0gYXJncy5tanBlZ1NlcnZlclBvcnQ7XG5cbiAgICB0aGlzLnByZWJ1aWxkRGVsYXkgPSBfLmlzTnVtYmVyKGFyZ3MucHJlYnVpbGREZWxheSkgPyBhcmdzLnByZWJ1aWxkRGVsYXkgOiBQUkVCVUlMRF9ERUxBWTtcblxuICAgIHRoaXMuYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24gPSBhcmdzLmFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uO1xuXG4gICAgdGhpcy5yZXN1bHRCdW5kbGVQYXRoID0gYXJncy5yZXN1bHRCdW5kbGVQYXRoO1xuICAgIHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbiA9IGFyZ3MucmVzdWx0QnVuZGxlVmVyc2lvbjtcbiAgfVxuXG4gIGFzeW5jIGluaXQgKG5vU2Vzc2lvblByb3h5KSB7XG4gICAgdGhpcy5ub1Nlc3Npb25Qcm94eSA9IG5vU2Vzc2lvblByb3h5O1xuXG4gICAgaWYgKHRoaXMudXNlWGN0ZXN0cnVuRmlsZSkge1xuICAgICAgY29uc3QgZGV2aXZlSW5mbyA9IHtcbiAgICAgICAgaXNSZWFsRGV2aWNlOiB0aGlzLnJlYWxEZXZpY2UsXG4gICAgICAgIHVkaWQ6IHRoaXMuZGV2aWNlLnVkaWQsXG4gICAgICAgIHBsYXRmb3JtVmVyc2lvbjogdGhpcy5wbGF0Zm9ybVZlcnNpb24sXG4gICAgICAgIHBsYXRmb3JtTmFtZTogdGhpcy5wbGF0Zm9ybU5hbWVcbiAgICAgIH07XG4gICAgICB0aGlzLnhjdGVzdHJ1bkZpbGVQYXRoID0gYXdhaXQgc2V0WGN0ZXN0cnVuRmlsZShkZXZpdmVJbmZvLCB0aGlzLmlvc1Nka1ZlcnNpb24sIHRoaXMuYm9vdHN0cmFwUGF0aCwgdGhpcy53ZGFSZW1vdGVQb3J0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiBuZWNlc3NhcnksIHVwZGF0ZSB0aGUgYnVuZGxlSWQgdG8gdXNlcidzIHNwZWNpZmljYXRpb25cbiAgICBpZiAodGhpcy5yZWFsRGV2aWNlKSB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSBwcm9qZWN0IHN0aWxsIGhhcyB0aGUgdXNlciBzcGVjaWZpYyBidW5kbGUgSUQsIHJlc2V0IHRoZSBwcm9qZWN0IGZpbGUgZmlyc3QuXG4gICAgICAvLyAtIFdlIGRvIHRoaXMgcmVzZXQgZXZlbiBpZiB1cGRhdGVkV0RBQnVuZGxlSWQgaXMgbm90IHNwZWNpZmllZCxcbiAgICAgIC8vICAgc2luY2UgdGhlIHByZXZpb3VzIHVwZGF0ZWRXREFCdW5kbGVJZCB0ZXN0IGhhcyBnZW5lcmF0ZWQgdGhlIHVzZXIgc3BlY2lmaWMgYnVuZGxlIElEIHByb2plY3QgZmlsZS5cbiAgICAgIC8vIC0gV2UgZG9uJ3QgY2FsbCByZXNldFByb2plY3RGaWxlIGZvciBzaW11bGF0b3IsXG4gICAgICAvLyAgIHNpbmNlIHNpbXVsYXRvciB0ZXN0IHJ1biB3aWxsIHdvcmsgd2l0aCBhbnkgdXNlciBzcGVjaWZpYyBidW5kbGUgSUQuXG4gICAgICBhd2FpdCByZXNldFByb2plY3RGaWxlKHRoaXMuYWdlbnRQYXRoKTtcbiAgICAgIGlmICh0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCkge1xuICAgICAgICBhd2FpdCB1cGRhdGVQcm9qZWN0RmlsZSh0aGlzLmFnZW50UGF0aCwgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJldHJpZXZlRGVyaXZlZERhdGFQYXRoICgpIHtcbiAgICBpZiAodGhpcy5kZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlcml2ZWREYXRhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBhdm9pZCByYWNlIGNvbmRpdGlvbnNcbiAgICBpZiAodGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2Rlcml2ZWREYXRhUGF0aFByb21pc2U7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgc3Rkb3V0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgKHtzdGRvdXR9ID0gYXdhaXQgZXhlYygneGNvZGVidWlsZCcsIFsnLXByb2plY3QnLCB0aGlzLmFnZW50UGF0aCwgJy1zaG93QnVpbGRTZXR0aW5ncyddKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHJldHJpZXZlIFdEQSBidWlsZCBzZXR0aW5ncy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGF0dGVybiA9IC9eXFxzKkJVSUxEX0RJUlxccys9XFxzKyhcXC8uKikvbTtcbiAgICAgIGNvbnN0IG1hdGNoID0gcGF0dGVybi5leGVjKHN0ZG91dCk7XG4gICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBwYXJzZSBXREEgYnVpbGQgZGlyIGZyb20gJHtfLnRydW5jYXRlKHN0ZG91dCwge2xlbmd0aDogMzAwfSl9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nLmRlYnVnKGBQYXJzZWQgQlVJTERfRElSIGNvbmZpZ3VyYXRpb24gdmFsdWU6ICcke21hdGNoWzFdfSdgKTtcbiAgICAgIC8vIERlcml2ZWQgZGF0YSByb290IGlzIHR3byBsZXZlbHMgaGlnaGVyIG92ZXIgdGhlIGJ1aWxkIGRpclxuICAgICAgdGhpcy5kZXJpdmVkRGF0YVBhdGggPSBwYXRoLmRpcm5hbWUocGF0aC5kaXJuYW1lKHBhdGgubm9ybWFsaXplKG1hdGNoWzFdKSkpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYEdvdCBkZXJpdmVkIGRhdGEgcm9vdDogJyR7dGhpcy5kZXJpdmVkRGF0YVBhdGh9J2ApO1xuICAgICAgcmV0dXJuIHRoaXMuZGVyaXZlZERhdGFQYXRoO1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2Rlcml2ZWREYXRhUGF0aFByb21pc2U7XG4gIH1cblxuICBhc3luYyByZXNldCAoKSB7XG4gICAgLy8gaWYgbmVjZXNzYXJ5LCByZXNldCB0aGUgYnVuZGxlSWQgdG8gb3JpZ2luYWwgdmFsdWVcbiAgICBpZiAodGhpcy5yZWFsRGV2aWNlICYmIHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSB7XG4gICAgICBhd2FpdCByZXNldFByb2plY3RGaWxlKHRoaXMuYWdlbnRQYXRoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBwcmVidWlsZCAoKSB7XG4gICAgLy8gZmlyc3QgZG8gYSBidWlsZCBwaGFzZVxuICAgIHRoaXMubG9nLmRlYnVnKCdQcmUtYnVpbGRpbmcgV0RBIGJlZm9yZSBsYXVuY2hpbmcgdGVzdCcpO1xuICAgIHRoaXMudXNlUHJlYnVpbHRXREEgPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMuc3RhcnQodHJ1ZSk7XG5cbiAgICB0aGlzLnhjb2RlYnVpbGQgPSBudWxsO1xuXG4gICAgLy8gcGF1c2UgYSBtb21lbnRcbiAgICBhd2FpdCBCLmRlbGF5KHRoaXMucHJlYnVpbGREZWxheSk7XG4gIH1cblxuICBhc3luYyBjbGVhblByb2plY3QgKCkge1xuICAgIGNvbnN0IHRtcElzVHZPUyA9IGlzVHZPUyh0aGlzLnBsYXRmb3JtTmFtZSk7XG4gICAgY29uc3QgbGliU2NoZW1lID0gdG1wSXNUdk9TID8gTElCX1NDSEVNRV9UViA6IExJQl9TQ0hFTUVfSU9TO1xuICAgIGNvbnN0IHJ1bm5lclNjaGVtZSA9IHRtcElzVHZPUyA/IFJVTk5FUl9TQ0hFTUVfVFYgOiBSVU5ORVJfU0NIRU1FX0lPUztcblxuICAgIGZvciAoY29uc3Qgc2NoZW1lIG9mIFtsaWJTY2hlbWUsIHJ1bm5lclNjaGVtZV0pIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBDbGVhbmluZyB0aGUgcHJvamVjdCBzY2hlbWUgJyR7c2NoZW1lfScgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBsZWZ0b3ZlcnMgZnJvbSBwcmV2aW91cyBpbnN0YWxsc2ApO1xuICAgICAgYXdhaXQgZXhlYygneGNvZGVidWlsZCcsIFtcbiAgICAgICAgJ2NsZWFuJyxcbiAgICAgICAgJy1wcm9qZWN0JywgdGhpcy5hZ2VudFBhdGgsXG4gICAgICAgICctc2NoZW1lJywgc2NoZW1lLFxuICAgICAgXSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29tbWFuZCAoYnVpbGRPbmx5ID0gZmFsc2UpIHtcbiAgICBsZXQgY21kID0gJ3hjb2RlYnVpbGQnO1xuICAgIGxldCBhcmdzO1xuXG4gICAgLy8gZmlndXJlIG91dCB0aGUgdGFyZ2V0cyBmb3IgeGNvZGVidWlsZFxuICAgIGNvbnN0IFtidWlsZENtZCwgdGVzdENtZF0gPSB0aGlzLnVzZVNpbXBsZUJ1aWxkVGVzdCA/IFsnYnVpbGQnLCAndGVzdCddIDogWydidWlsZC1mb3ItdGVzdGluZycsICd0ZXN0LXdpdGhvdXQtYnVpbGRpbmcnXTtcbiAgICBpZiAoYnVpbGRPbmx5KSB7XG4gICAgICBhcmdzID0gW2J1aWxkQ21kXTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudXNlUHJlYnVpbHRXREEgfHwgdGhpcy51c2VYY3Rlc3RydW5GaWxlKSB7XG4gICAgICBhcmdzID0gW3Rlc3RDbWRdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzID0gW2J1aWxkQ21kLCB0ZXN0Q21kXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbikge1xuICAgICAgLy8gVG8gLWFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIGZsYWcgdGFrZXMgZWZmZWN0LCAtYWxsb3dQcm92aXNpb25pbmdVcGRhdGVzIG5lZWRzIHRvIGJlIHBhc3NlZCBhcyB3ZWxsLlxuICAgICAgYXJncy5wdXNoKCctYWxsb3dQcm92aXNpb25pbmdVcGRhdGVzJywgJy1hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlc3VsdEJ1bmRsZVBhdGgpIHtcbiAgICAgIGFyZ3MucHVzaCgnLXJlc3VsdEJ1bmRsZVBhdGgnLCB0aGlzLnJlc3VsdEJ1bmRsZVBhdGgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlc3VsdEJ1bmRsZVZlcnNpb24pIHtcbiAgICAgIGFyZ3MucHVzaCgnLXJlc3VsdEJ1bmRsZVZlcnNpb24nLCB0aGlzLnJlc3VsdEJ1bmRsZVZlcnNpb24pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnVzZVhjdGVzdHJ1bkZpbGUpIHtcbiAgICAgIGFyZ3MucHVzaCgnLXhjdGVzdHJ1bicsIHRoaXMueGN0ZXN0cnVuRmlsZVBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBydW5uZXJTY2hlbWUgPSBpc1R2T1ModGhpcy5wbGF0Zm9ybU5hbWUpID8gUlVOTkVSX1NDSEVNRV9UViA6IFJVTk5FUl9TQ0hFTUVfSU9TO1xuICAgICAgYXJncy5wdXNoKCctcHJvamVjdCcsIHRoaXMuYWdlbnRQYXRoLCAnLXNjaGVtZScsIHJ1bm5lclNjaGVtZSk7XG4gICAgICBpZiAodGhpcy5kZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgICAgYXJncy5wdXNoKCctZGVyaXZlZERhdGFQYXRoJywgdGhpcy5kZXJpdmVkRGF0YVBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBhcmdzLnB1c2goJy1kZXN0aW5hdGlvbicsIGBpZD0ke3RoaXMuZGV2aWNlLnVkaWR9YCk7XG5cbiAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBuZXcgUmVnRXhwKC9eKFxcZCspXFwuKFxcZCspLykuZXhlYyh0aGlzLnBsYXRmb3JtVmVyc2lvbik7XG4gICAgaWYgKHZlcnNpb25NYXRjaCkge1xuICAgICAgYXJncy5wdXNoKGBJUEhPTkVPU19ERVBMT1lNRU5UX1RBUkdFVD0ke3ZlcnNpb25NYXRjaFsxXX0uJHt2ZXJzaW9uTWF0Y2hbMl19YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBwYXJzZSBtYWpvciBhbmQgbWlub3IgdmVyc2lvbiBudW1iZXJzIGZyb20gcGxhdGZvcm1WZXJzaW9uIFwiJHt0aGlzLnBsYXRmb3JtVmVyc2lvbn1cIi4gYCArXG4gICAgICAgICdXaWxsIGJ1aWxkIGZvciB0aGUgZGVmYXVsdCBwbGF0Zm9ybSBpbnN0ZWFkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhbERldmljZSAmJiB0aGlzLnhjb2RlQ29uZmlnRmlsZSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFVzaW5nIFhjb2RlIGNvbmZpZ3VyYXRpb24gZmlsZTogJyR7dGhpcy54Y29kZUNvbmZpZ0ZpbGV9J2ApO1xuICAgICAgYXJncy5wdXNoKCcteGNjb25maWcnLCB0aGlzLnhjb2RlQ29uZmlnRmlsZSk7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9jZXNzLmVudi5BUFBJVU1fWENVSVRFU1RfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTKSB7XG4gICAgICAvLyBUaGlzIHNvbWV0aW1lcyBoZWxwcyB0byBzdXJ2aXZlIFhjb2RlIHVwZGF0ZXNcbiAgICAgIGFyZ3MucHVzaCgnR0NDX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUz0wJyk7XG4gICAgfVxuXG4gICAgLy8gQmVsb3cgb3B0aW9uIHNsaWdodGx5IHJlZHVjZXMgYnVpbGQgdGltZSBpbiBkZWJ1ZyBidWlsZFxuICAgIC8vIHdpdGggcHJldmVudGluZyB0byBnZW5lcmF0ZSBgL0luZGV4L0RhdGFTdG9yZWAgd2hpY2ggaXMgdXNlZCBieSBkZXZlbG9wbWVudFxuICAgIGFyZ3MucHVzaCgnQ09NUElMRVJfSU5ERVhfU1RPUkVfRU5BQkxFPU5PJyk7XG5cbiAgICByZXR1cm4ge2NtZCwgYXJnc307XG4gIH1cblxuICBhc3luYyBjcmVhdGVTdWJQcm9jZXNzIChidWlsZE9ubHkgPSBmYWxzZSkge1xuICAgIGlmICghdGhpcy51c2VYY3Rlc3RydW5GaWxlICYmIHRoaXMucmVhbERldmljZSkge1xuICAgICAgaWYgKHRoaXMua2V5Y2hhaW5QYXRoICYmIHRoaXMua2V5Y2hhaW5QYXNzd29yZCkge1xuICAgICAgICBhd2FpdCBzZXRSZWFsRGV2aWNlU2VjdXJpdHkodGhpcy5rZXljaGFpblBhdGgsIHRoaXMua2V5Y2hhaW5QYXNzd29yZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy54Y29kZU9yZ0lkICYmIHRoaXMueGNvZGVTaWduaW5nSWQgJiYgIXRoaXMueGNvZGVDb25maWdGaWxlKSB7XG4gICAgICAgIHRoaXMueGNvZGVDb25maWdGaWxlID0gYXdhaXQgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUodGhpcy54Y29kZU9yZ0lkLCB0aGlzLnhjb2RlU2lnbmluZ0lkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7Y21kLCBhcmdzfSA9IHRoaXMuZ2V0Q29tbWFuZChidWlsZE9ubHkpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBCZWdpbm5pbmcgJHtidWlsZE9ubHkgPyAnYnVpbGQnIDogJ3Rlc3QnfSB3aXRoIGNvbW1hbmQgJyR7Y21kfSAke2FyZ3Muam9pbignICcpfScgYCArXG4gICAgICBgaW4gZGlyZWN0b3J5ICcke3RoaXMuYm9vdHN0cmFwUGF0aH0nYCk7XG4gICAgY29uc3QgZW52ID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYsIHtcbiAgICAgIFVTRV9QT1JUOiB0aGlzLndkYVJlbW90ZVBvcnQsXG4gICAgICBXREFfUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUjogdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgfHwgV0RBX1JVTk5FUl9CVU5ETEVfSUQsXG4gICAgfSk7XG4gICAgaWYgKHRoaXMubWpwZWdTZXJ2ZXJQb3J0KSB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL1dlYkRyaXZlckFnZW50L3B1bGwvMTA1XG4gICAgICBlbnYuTUpQRUdfU0VSVkVSX1BPUlQgPSB0aGlzLm1qcGVnU2VydmVyUG9ydDtcbiAgICB9XG4gICAgY29uc3QgdXBncmFkZVRpbWVzdGFtcCA9IGF3YWl0IGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAodGhpcy5ib290c3RyYXBQYXRoKTtcbiAgICBpZiAodXBncmFkZVRpbWVzdGFtcCkge1xuICAgICAgZW52LlVQR1JBREVfVElNRVNUQU1QID0gdXBncmFkZVRpbWVzdGFtcDtcbiAgICB9XG4gICAgY29uc3QgeGNvZGVidWlsZCA9IG5ldyBTdWJQcm9jZXNzKGNtZCwgYXJncywge1xuICAgICAgY3dkOiB0aGlzLmJvb3RzdHJhcFBhdGgsXG4gICAgICBlbnYsXG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICB9KTtcblxuICAgIGxldCBsb2dYY29kZU91dHB1dCA9ICEhdGhpcy5zaG93WGNvZGVMb2c7XG4gICAgY29uc3QgbG9nTXNnID0gXy5pc0Jvb2xlYW4odGhpcy5zaG93WGNvZGVMb2cpXG4gICAgICA/IGBPdXRwdXQgZnJvbSB4Y29kZWJ1aWxkICR7dGhpcy5zaG93WGNvZGVMb2cgPyAnd2lsbCcgOiAnd2lsbCBub3QnfSBiZSBsb2dnZWRgXG4gICAgICA6ICdPdXRwdXQgZnJvbSB4Y29kZWJ1aWxkIHdpbGwgb25seSBiZSBsb2dnZWQgaWYgYW55IGVycm9ycyBhcmUgcHJlc2VudCB0aGVyZSc7XG4gICAgdGhpcy5sb2cuZGVidWcoYCR7bG9nTXNnfS4gVG8gY2hhbmdlIHRoaXMsIHVzZSAnc2hvd1hjb2RlTG9nJyBkZXNpcmVkIGNhcGFiaWxpdHlgKTtcbiAgICB4Y29kZWJ1aWxkLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgIGxldCBvdXQgPSBzdGRvdXQgfHwgc3RkZXJyO1xuICAgICAgLy8gd2Ugd2FudCB0byBwdWxsIG91dCB0aGUgbG9nIGZpbGUgdGhhdCBpcyBjcmVhdGVkLCBhbmQgaGlnaGxpZ2h0IGl0XG4gICAgICAvLyBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlc1xuICAgICAgaWYgKG91dC5pbmNsdWRlcygnV3JpdGluZyBkaWFnbm9zdGljIGxvZyBmb3IgdGVzdCBzZXNzaW9uIHRvJykpIHtcbiAgICAgICAgLy8gcHVsbCBvdXQgdGhlIGZpcnN0IGxpbmUgdGhhdCBiZWdpbnMgd2l0aCB0aGUgcGF0aCBzZXBhcmF0b3JcbiAgICAgICAgLy8gd2hpY2ggKnNob3VsZCogYmUgdGhlIGxpbmUgaW5kaWNhdGluZyB0aGUgbG9nIGZpbGUgZ2VuZXJhdGVkXG4gICAgICAgIHhjb2RlYnVpbGQubG9nTG9jYXRpb24gPSBfLmZpcnN0KF8ucmVtb3ZlKG91dC50cmltKCkuc3BsaXQoJ1xcbicpLCAodikgPT4gdi5zdGFydHNXaXRoKHBhdGguc2VwKSkpO1xuICAgICAgICB4Y29kZUxvZy5kZWJ1ZyhgTG9nIGZpbGUgZm9yIHhjb2RlYnVpbGQgdGVzdDogJHt4Y29kZWJ1aWxkLmxvZ0xvY2F0aW9ufWApO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB3ZSBoYXZlIGFuIGVycm9yIHdlIHdhbnQgdG8gb3V0cHV0IHRoZSBsb2dzXG4gICAgICAvLyBvdGhlcndpc2UgdGhlIGZhaWx1cmUgaXMgaW5zY3J1dGlibGVcbiAgICAgIC8vIGJ1dCBkbyBub3QgbG9nIHBlcm1pc3Npb24gZXJyb3JzIGZyb20gdHJ5aW5nIHRvIHdyaXRlIHRvIGF0dGFjaG1lbnRzIGZvbGRlclxuICAgICAgY29uc3QgaWdub3JlRXJyb3IgPSBJR05PUkVEX0VSUk9SUy5zb21lKCh4KSA9PiBvdXQuaW5jbHVkZXMoeCkpO1xuICAgICAgaWYgKHRoaXMuc2hvd1hjb2RlTG9nICE9PSBmYWxzZSAmJiBvdXQuaW5jbHVkZXMoJ0Vycm9yIERvbWFpbj0nKSAmJiAhaWdub3JlRXJyb3IpIHtcbiAgICAgICAgbG9nWGNvZGVPdXRwdXQgPSB0cnVlO1xuXG4gICAgICAgIC8vIHRlcnJpYmxlIGhhY2sgdG8gaGFuZGxlIGNhc2Ugd2hlcmUgeGNvZGUgcmV0dXJuIDAgYnV0IGlzIGZhaWxpbmdcbiAgICAgICAgeGNvZGVidWlsZC5fd2RhX2Vycm9yX29jY3VycmVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZG8gbm90IGxvZyBwZXJtaXNzaW9uIGVycm9ycyBmcm9tIHRyeWluZyB0byB3cml0ZSB0byBhdHRhY2htZW50cyBmb2xkZXJcbiAgICAgIGlmIChsb2dYY29kZU91dHB1dCAmJiAhaWdub3JlRXJyb3IpIHtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIG91dC5zcGxpdChFT0wpKSB7XG4gICAgICAgICAgeGNvZGVMb2cuZXJyb3IobGluZSk7XG4gICAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICAgIHhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlICs9IGAke0VPTH0ke2xpbmV9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB4Y29kZWJ1aWxkO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKGJ1aWxkT25seSA9IGZhbHNlKSB7XG4gICAgdGhpcy54Y29kZWJ1aWxkID0gYXdhaXQgdGhpcy5jcmVhdGVTdWJQcm9jZXNzKGJ1aWxkT25seSk7XG4gICAgLy8gU3RvcmUgeGNvZGVidWlsZCBtZXNzYWdlXG4gICAgdGhpcy54Y29kZWJ1aWxkLl93ZGFfZXJyb3JfbWVzc2FnZSA9ICcnO1xuXG4gICAgLy8gd3JhcCB0aGUgc3RhcnQgcHJvY2VkdXJlIGluIGEgcHJvbWlzZSBzbyB0aGF0IHdlIGNhbiBjYXRjaCwgYW5kIHJlcG9ydCxcbiAgICAvLyBhbnkgc3RhcnR1cCBlcnJvcnMgdGhhdCBhcmUgdGhyb3duIGFzIGV2ZW50c1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnhjb2RlYnVpbGQub24oJ2V4aXQnLCBhc3luYyAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIHhjb2RlTG9nLmVycm9yKGB4Y29kZWJ1aWxkIGV4aXRlZCB3aXRoIGNvZGUgJyR7Y29kZX0nIGFuZCBzaWduYWwgJyR7c2lnbmFsfSdgKTtcbiAgICAgICAgLy8gcHJpbnQgb3V0IHRoZSB4Y29kZWJ1aWxkIGZpbGUgaWYgdXNlcnMgaGF2ZSBhc2tlZCBmb3IgaXRcbiAgICAgICAgaWYgKHRoaXMuc2hvd1hjb2RlTG9nICYmIHRoaXMueGNvZGVidWlsZC5sb2dMb2NhdGlvbikge1xuICAgICAgICAgIHhjb2RlTG9nLmVycm9yKGBDb250ZW50cyBvZiB4Y29kZWJ1aWxkIGxvZyBmaWxlICcke3RoaXMueGNvZGVidWlsZC5sb2dMb2NhdGlvbn0nOmApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMueGNvZGVidWlsZC5sb2dMb2NhdGlvbiwgJ3V0ZjgnKTtcbiAgICAgICAgICAgIGZvciAobGV0IGxpbmUgb2YgZGF0YS5zcGxpdCgnXFxuJykpIHtcbiAgICAgICAgICAgICAgeGNvZGVMb2cuZXJyb3IobGluZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB4Y29kZUxvZy5lcnJvcihgVW5hYmxlIHRvIGFjY2VzcyB4Y29kZWJ1aWxkIGxvZyBmaWxlOiAnJHtlcnIubWVzc2FnZX0nYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMueGNvZGVidWlsZC5wcm9jZXNzRXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMueGNvZGVidWlsZC5fd2RhX2Vycm9yX29jY3VycmVkIHx8ICghc2lnbmFsICYmIGNvZGUgIT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYHhjb2RlYnVpbGQgZmFpbGVkIHdpdGggY29kZSAke2NvZGV9JHtFT0x9YCArXG4gICAgICAgICAgICBgeGNvZGVidWlsZCBlcnJvciBtZXNzYWdlOiR7RU9MfSR7dGhpcy54Y29kZWJ1aWxkLl93ZGFfZXJyb3JfbWVzc2FnZX1gKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YganVzdCBidWlsZGluZywgdGhlIHByb2Nlc3Mgd2lsbCBleGl0IGFuZCB0aGF0IGlzIG91ciBmaW5pc2hcbiAgICAgICAgaWYgKGJ1aWxkT25seSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gKGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgICAgICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5zdGFydCh0cnVlKTtcbiAgICAgICAgICBpZiAoIWJ1aWxkT25seSkge1xuICAgICAgICAgICAgbGV0IHN0YXR1cyA9IGF3YWl0IHRoaXMud2FpdEZvclN0YXJ0KHRpbWVyKTtcbiAgICAgICAgICAgIHJlc29sdmUoc3RhdHVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxldCBtc2cgPSBgVW5hYmxlIHRvIHN0YXJ0IFdlYkRyaXZlckFnZW50OiAke2Vycn1gO1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yKG1zZyk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihtc2cpKTtcbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHdhaXRGb3JTdGFydCAodGltZXIpIHtcbiAgICAvLyB0cnkgdG8gY29ubmVjdCBvbmNlIGV2ZXJ5IDAuNSBzZWNvbmRzLCB1bnRpbCBgbGF1bmNoVGltZW91dGAgaXMgdXBcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgV2FpdGluZyB1cCB0byAke3RoaXMubGF1bmNoVGltZW91dH1tcyBmb3IgV2ViRHJpdmVyQWdlbnQgdG8gc3RhcnRgKTtcbiAgICBsZXQgY3VycmVudFN0YXR1cyA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGxldCByZXRyaWVzID0gcGFyc2VJbnQodGhpcy5sYXVuY2hUaW1lb3V0IC8gNTAwLCAxMCk7XG4gICAgICBhd2FpdCByZXRyeUludGVydmFsKHJldHJpZXMsIDEwMDAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMueGNvZGVidWlsZC5wcm9jZXNzRXhpdGVkKSB7XG4gICAgICAgICAgLy8gdGhlcmUgaGFzIGJlZW4gYW4gZXJyb3IgZWxzZXdoZXJlIGFuZCB3ZSBuZWVkIHRvIHNob3J0LWNpcmN1aXRcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJveHlUaW1lb3V0ID0gdGhpcy5ub1Nlc3Npb25Qcm94eS50aW1lb3V0O1xuICAgICAgICB0aGlzLm5vU2Vzc2lvblByb3h5LnRpbWVvdXQgPSAxMDAwO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGN1cnJlbnRTdGF0dXMgPSBhd2FpdCB0aGlzLm5vU2Vzc2lvblByb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICAgICAgaWYgKGN1cnJlbnRTdGF0dXMgJiYgY3VycmVudFN0YXR1cy5pb3MgJiYgY3VycmVudFN0YXR1cy5pb3MuaXApIHtcbiAgICAgICAgICAgIHRoaXMuYWdlbnRVcmwgPSBjdXJyZW50U3RhdHVzLmlvcy5pcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFdlYkRyaXZlckFnZW50IGluZm9ybWF0aW9uOmApO1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRTdGF0dXMsIG51bGwsIDIpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gY29ubmVjdCB0byBydW5uaW5nIFdlYkRyaXZlckFnZW50OiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRoaXMubm9TZXNzaW9uUHJveHkudGltZW91dCA9IHByb3h5VGltZW91dDtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnhjb2RlYnVpbGQucHJvY2Vzc0V4aXRlZCkge1xuICAgICAgICAvLyB0aGVyZSBoYXMgYmVlbiBhbiBlcnJvciBlbHNld2hlcmUgYW5kIHdlIG5lZWQgdG8gc2hvcnQtY2lyY3VpdFxuICAgICAgICByZXR1cm4gY3VycmVudFN0YXR1cztcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2cuZGVidWcoYFdlYkRyaXZlckFnZW50IHN1Y2Nlc3NmdWxseSBzdGFydGVkIGFmdGVyICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBhdCB0aGlzIHBvaW50LCBpZiB3ZSBoYXZlIG5vdCBoYWQgYW55IGVycm9ycyBmcm9tIHhjb2RlIGl0c2VsZiAocmVwb3J0ZWRcbiAgICAgIC8vIGVsc2V3aGVyZSksIHdlIGNhbiBsZXQgdGhpcyBnbyB0aHJvdWdoIGFuZCB0cnkgdG8gY3JlYXRlIHRoZSBzZXNzaW9uXG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhlcnIubWVzc2FnZSk7XG4gICAgICB0aGlzLmxvZy53YXJuKGBHZXR0aW5nIHN0YXR1cyBvZiBXZWJEcml2ZXJBZ2VudCBvbiBkZXZpY2UgdGltZWQgb3V0LiBDb250aW51aW5nYCk7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50U3RhdHVzO1xuICB9XG5cbiAgYXN5bmMgcXVpdCAoKSB7XG4gICAgYXdhaXQga2lsbFByb2Nlc3MoJ3hjb2RlYnVpbGQnLCB0aGlzLnhjb2RlYnVpbGQpO1xuICB9XG59XG5cbmV4cG9ydCB7IFhjb2RlQnVpbGQgfTtcbmV4cG9ydCBkZWZhdWx0IFhjb2RlQnVpbGQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FB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
396
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3hjb2RlYnVpbGQuanMiLCJuYW1lcyI6WyJERUZBVUxUX1NJR05JTkdfSUQiLCJQUkVCVUlMRF9ERUxBWSIsIlJVTk5FUl9TQ0hFTUVfSU9TIiwiTElCX1NDSEVNRV9JT1MiLCJFUlJPUl9XUklUSU5HX0FUVEFDSE1FTlQiLCJFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQiLCJJR05PUkVEX0VSUk9SUyIsIlJVTk5FUl9TQ0hFTUVfVFYiLCJMSUJfU0NIRU1FX1RWIiwieGNvZGVMb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJYY29kZUJ1aWxkIiwiY29uc3RydWN0b3IiLCJ4Y29kZVZlcnNpb24iLCJkZXZpY2UiLCJhcmdzIiwibG9nIiwiZGVmYXVsdExvZ2dlciIsInJlYWxEZXZpY2UiLCJhZ2VudFBhdGgiLCJib290c3RyYXBQYXRoIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsInNob3dYY29kZUxvZyIsInhjb2RlQ29uZmlnRmlsZSIsInhjb2RlT3JnSWQiLCJ4Y29kZVNpZ25pbmdJZCIsImtleWNoYWluUGF0aCIsImtleWNoYWluUGFzc3dvcmQiLCJwcmVidWlsZFdEQSIsInVzZVByZWJ1aWx0V0RBIiwidXNlU2ltcGxlQnVpbGRUZXN0IiwidXNlWGN0ZXN0cnVuRmlsZSIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFSZW1vdGVQb3J0IiwidXBkYXRlZFdEQUJ1bmRsZUlkIiwiZGVyaXZlZERhdGFQYXRoIiwibWpwZWdTZXJ2ZXJQb3J0IiwicHJlYnVpbGREZWxheSIsIl8iLCJpc051bWJlciIsImFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIiwicmVzdWx0QnVuZGxlUGF0aCIsInJlc3VsdEJ1bmRsZVZlcnNpb24iLCJpbml0Iiwibm9TZXNzaW9uUHJveHkiLCJkZXZpdmVJbmZvIiwiaXNSZWFsRGV2aWNlIiwidWRpZCIsInhjdGVzdHJ1bkZpbGVQYXRoIiwic2V0WGN0ZXN0cnVuRmlsZSIsInJlc2V0UHJvamVjdEZpbGUiLCJ1cGRhdGVQcm9qZWN0RmlsZSIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwiX2Rlcml2ZWREYXRhUGF0aFByb21pc2UiLCJzdGRvdXQiLCJleGVjIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJwYXR0ZXJuIiwibWF0Y2giLCJ0cnVuY2F0ZSIsImxlbmd0aCIsImRlYnVnIiwicGF0aCIsImRpcm5hbWUiLCJub3JtYWxpemUiLCJyZXNldCIsInByZWJ1aWxkIiwic3RhcnQiLCJ4Y29kZWJ1aWxkIiwiQiIsImRlbGF5IiwiY2xlYW5Qcm9qZWN0IiwidG1wSXNUdk9TIiwiaXNUdk9TIiwibGliU2NoZW1lIiwicnVubmVyU2NoZW1lIiwic2NoZW1lIiwiZ2V0Q29tbWFuZCIsImJ1aWxkT25seSIsImNtZCIsImJ1aWxkQ21kIiwidGVzdENtZCIsInB1c2giLCJ2ZXJzaW9uTWF0Y2giLCJSZWdFeHAiLCJwcm9jZXNzIiwiZW52IiwiQVBQSVVNX1hDVUlURVNUX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUyIsImNyZWF0ZVN1YlByb2Nlc3MiLCJzZXRSZWFsRGV2aWNlU2VjdXJpdHkiLCJnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSIsImpvaW4iLCJPYmplY3QiLCJhc3NpZ24iLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJNSlBFR19TRVJWRVJfUE9SVCIsInVwZ3JhZGVUaW1lc3RhbXAiLCJnZXRXREFVcGdyYWRlVGltZXN0YW1wIiwiVVBHUkFERV9USU1FU1RBTVAiLCJTdWJQcm9jZXNzIiwiY3dkIiwiZGV0YWNoZWQiLCJzdGRpbyIsImxvZ1hjb2RlT3V0cHV0IiwibG9nTXNnIiwiaXNCb29sZWFuIiwib24iLCJzdGRlcnIiLCJvdXQiLCJpbmNsdWRlcyIsImxvZ0xvY2F0aW9uIiwiZmlyc3QiLCJyZW1vdmUiLCJ0cmltIiwic3BsaXQiLCJ2Iiwic3RhcnRzV2l0aCIsInNlcCIsImlnbm9yZUVycm9yIiwic29tZSIsIngiLCJfd2RhX2Vycm9yX29jY3VycmVkIiwibGluZSIsIkVPTCIsImVycm9yIiwiX3dkYV9lcnJvcl9tZXNzYWdlIiwicmVzb2x2ZSIsInJlamVjdCIsImNvZGUiLCJzaWduYWwiLCJkYXRhIiwiZnMiLCJyZWFkRmlsZSIsInByb2Nlc3NFeGl0ZWQiLCJFcnJvciIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGF0dXMiLCJ3YWl0Rm9yU3RhcnQiLCJtc2ciLCJjdXJyZW50U3RhdHVzIiwicmV0cmllcyIsInBhcnNlSW50IiwicmV0cnlJbnRlcnZhbCIsInByb3h5VGltZW91dCIsInRpbWVvdXQiLCJjb21tYW5kIiwiaW9zIiwiaXAiLCJhZ2VudFVybCIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsInF1aXQiLCJraWxsUHJvY2VzcyJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi94Y29kZWJ1aWxkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzLCBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGZzLCBsb2dnZXIsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBkZWZhdWx0TG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7XG4gIHNldFJlYWxEZXZpY2VTZWN1cml0eSwgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUsIHNldFhjdGVzdHJ1bkZpbGUsXG4gIHVwZGF0ZVByb2plY3RGaWxlLCByZXNldFByb2plY3RGaWxlLCBraWxsUHJvY2VzcyxcbiAgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCwgaXNUdk9TIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBXREFfUlVOTkVSX0JVTkRMRV9JRCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuXG5jb25zdCBERUZBVUxUX1NJR05JTkdfSUQgPSAnaVBob25lIERldmVsb3Blcic7XG5jb25zdCBQUkVCVUlMRF9ERUxBWSA9IDA7XG5jb25zdCBSVU5ORVJfU0NIRU1FX0lPUyA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lcic7XG5jb25zdCBMSUJfU0NIRU1FX0lPUyA9ICdXZWJEcml2ZXJBZ2VudExpYic7XG5cbmNvbnN0IEVSUk9SX1dSSVRJTkdfQVRUQUNITUVOVCA9ICdFcnJvciB3cml0aW5nIGF0dGFjaG1lbnQgZGF0YSB0byBmaWxlJztcbmNvbnN0IEVSUk9SX0NPUFlJTkdfQVRUQUNITUVOVCA9ICdFcnJvciBjb3B5aW5nIHRlc3RpbmcgYXR0YWNobWVudCc7XG5jb25zdCBJR05PUkVEX0VSUk9SUyA9IFtcbiAgRVJST1JfV1JJVElOR19BVFRBQ0hNRU5ULFxuICBFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQsXG4gICdGYWlsZWQgdG8gcmVtb3ZlIHNjcmVlbnNob3QgYXQgcGF0aCcsXG5dO1xuXG5jb25zdCBSVU5ORVJfU0NIRU1FX1RWID0gJ1dlYkRyaXZlckFnZW50UnVubmVyX3R2T1MnO1xuY29uc3QgTElCX1NDSEVNRV9UViA9ICdXZWJEcml2ZXJBZ2VudExpYl90dk9TJztcblxuY29uc3QgeGNvZGVMb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdYY29kZScpO1xuXG5cbmNsYXNzIFhjb2RlQnVpbGQge1xuICBjb25zdHJ1Y3RvciAoeGNvZGVWZXJzaW9uLCBkZXZpY2UsIGFyZ3MgPSB7fSwgbG9nID0gbnVsbCkge1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0geGNvZGVWZXJzaW9uO1xuXG4gICAgdGhpcy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgdGhpcy5sb2cgPSBsb2cgPz8gZGVmYXVsdExvZ2dlcjtcblxuICAgIHRoaXMucmVhbERldmljZSA9IGFyZ3MucmVhbERldmljZTtcblxuICAgIHRoaXMuYWdlbnRQYXRoID0gYXJncy5hZ2VudFBhdGg7XG4gICAgdGhpcy5ib290c3RyYXBQYXRoID0gYXJncy5ib290c3RyYXBQYXRoO1xuXG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBhcmdzLnBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IGFyZ3MucGxhdGZvcm1OYW1lO1xuICAgIHRoaXMuaW9zU2RrVmVyc2lvbiA9IGFyZ3MuaW9zU2RrVmVyc2lvbjtcblxuICAgIHRoaXMuc2hvd1hjb2RlTG9nID0gYXJncy5zaG93WGNvZGVMb2c7XG5cbiAgICB0aGlzLnhjb2RlQ29uZmlnRmlsZSA9IGFyZ3MueGNvZGVDb25maWdGaWxlO1xuICAgIHRoaXMueGNvZGVPcmdJZCA9IGFyZ3MueGNvZGVPcmdJZDtcbiAgICB0aGlzLnhjb2RlU2lnbmluZ0lkID0gYXJncy54Y29kZVNpZ25pbmdJZCB8fCBERUZBVUxUX1NJR05JTkdfSUQ7XG4gICAgdGhpcy5rZXljaGFpblBhdGggPSBhcmdzLmtleWNoYWluUGF0aDtcbiAgICB0aGlzLmtleWNoYWluUGFzc3dvcmQgPSBhcmdzLmtleWNoYWluUGFzc3dvcmQ7XG5cbiAgICB0aGlzLnByZWJ1aWxkV0RBID0gYXJncy5wcmVidWlsZFdEQTtcbiAgICB0aGlzLnVzZVByZWJ1aWx0V0RBID0gYXJncy51c2VQcmVidWlsdFdEQTtcbiAgICB0aGlzLnVzZVNpbXBsZUJ1aWxkVGVzdCA9IGFyZ3MudXNlU2ltcGxlQnVpbGRUZXN0O1xuXG4gICAgdGhpcy51c2VYY3Rlc3RydW5GaWxlID0gYXJncy51c2VYY3Rlc3RydW5GaWxlO1xuXG4gICAgdGhpcy5sYXVuY2hUaW1lb3V0ID0gYXJncy5sYXVuY2hUaW1lb3V0O1xuXG4gICAgdGhpcy53ZGFSZW1vdGVQb3J0ID0gYXJncy53ZGFSZW1vdGVQb3J0O1xuXG4gICAgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgPSBhcmdzLnVwZGF0ZWRXREFCdW5kbGVJZDtcbiAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IGFyZ3MuZGVyaXZlZERhdGFQYXRoO1xuXG4gICAgdGhpcy5tanBlZ1NlcnZlclBvcnQgPSBhcmdzLm1qcGVnU2VydmVyUG9ydDtcblxuICAgIHRoaXMucHJlYnVpbGREZWxheSA9IF8uaXNOdW1iZXIoYXJncy5wcmVidWlsZERlbGF5KSA/IGFyZ3MucHJlYnVpbGREZWxheSA6IFBSRUJVSUxEX0RFTEFZO1xuXG4gICAgdGhpcy5hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbiA9IGFyZ3MuYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb247XG5cbiAgICB0aGlzLnJlc3VsdEJ1bmRsZVBhdGggPSBhcmdzLnJlc3VsdEJ1bmRsZVBhdGg7XG4gICAgdGhpcy5yZXN1bHRCdW5kbGVWZXJzaW9uID0gYXJncy5yZXN1bHRCdW5kbGVWZXJzaW9uO1xuICB9XG5cbiAgYXN5bmMgaW5pdCAobm9TZXNzaW9uUHJveHkpIHtcbiAgICB0aGlzLm5vU2Vzc2lvblByb3h5ID0gbm9TZXNzaW9uUHJveHk7XG5cbiAgICBpZiAodGhpcy51c2VYY3Rlc3RydW5GaWxlKSB7XG4gICAgICBjb25zdCBkZXZpdmVJbmZvID0ge1xuICAgICAgICBpc1JlYWxEZXZpY2U6IHRoaXMucmVhbERldmljZSxcbiAgICAgICAgdWRpZDogdGhpcy5kZXZpY2UudWRpZCxcbiAgICAgICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLnBsYXRmb3JtVmVyc2lvbixcbiAgICAgICAgcGxhdGZvcm1OYW1lOiB0aGlzLnBsYXRmb3JtTmFtZVxuICAgICAgfTtcbiAgICAgIHRoaXMueGN0ZXN0cnVuRmlsZVBhdGggPSBhd2FpdCBzZXRYY3Rlc3RydW5GaWxlKGRldml2ZUluZm8sIHRoaXMuaW9zU2RrVmVyc2lvbiwgdGhpcy5ib290c3RyYXBQYXRoLCB0aGlzLndkYVJlbW90ZVBvcnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIG5lY2Vzc2FyeSwgdXBkYXRlIHRoZSBidW5kbGVJZCB0byB1c2VyJ3Mgc3BlY2lmaWNhdGlvblxuICAgIGlmICh0aGlzLnJlYWxEZXZpY2UpIHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIHByb2plY3Qgc3RpbGwgaGFzIHRoZSB1c2VyIHNwZWNpZmljIGJ1bmRsZSBJRCwgcmVzZXQgdGhlIHByb2plY3QgZmlsZSBmaXJzdC5cbiAgICAgIC8vIC0gV2UgZG8gdGhpcyByZXNldCBldmVuIGlmIHVwZGF0ZWRXREFCdW5kbGVJZCBpcyBub3Qgc3BlY2lmaWVkLFxuICAgICAgLy8gICBzaW5jZSB0aGUgcHJldmlvdXMgdXBkYXRlZFdEQUJ1bmRsZUlkIHRlc3QgaGFzIGdlbmVyYXRlZCB0aGUgdXNlciBzcGVjaWZpYyBidW5kbGUgSUQgcHJvamVjdCBmaWxlLlxuICAgICAgLy8gLSBXZSBkb24ndCBjYWxsIHJlc2V0UHJvamVjdEZpbGUgZm9yIHNpbXVsYXRvcixcbiAgICAgIC8vICAgc2luY2Ugc2ltdWxhdG9yIHRlc3QgcnVuIHdpbGwgd29yayB3aXRoIGFueSB1c2VyIHNwZWNpZmljIGJ1bmRsZSBJRC5cbiAgICAgIGF3YWl0IHJlc2V0UHJvamVjdEZpbGUodGhpcy5hZ2VudFBhdGgpO1xuICAgICAgaWYgKHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSB7XG4gICAgICAgIGF3YWl0IHVwZGF0ZVByb2plY3RGaWxlKHRoaXMuYWdlbnRQYXRoLCB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmV0cmlldmVEZXJpdmVkRGF0YVBhdGggKCkge1xuICAgIGlmICh0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVyaXZlZERhdGFQYXRoO1xuICAgIH1cblxuICAgIC8vIGF2b2lkIHJhY2UgY29uZGl0aW9uc1xuICAgIGlmICh0aGlzLl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBzdGRvdXQ7XG4gICAgICB0cnkge1xuICAgICAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgWyctcHJvamVjdCcsIHRoaXMuYWdlbnRQYXRoLCAnLXNob3dCdWlsZFNldHRpbmdzJ10pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcmV0cmlldmUgV0RBIGJ1aWxkIHNldHRpbmdzLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXR0ZXJuID0gL15cXHMqQlVJTERfRElSXFxzKz1cXHMrKFxcLy4qKS9tO1xuICAgICAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc3Rkb3V0KTtcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBhcnNlIFdEQSBidWlsZCBkaXIgZnJvbSAke18udHJ1bmNhdGUoc3Rkb3V0LCB7bGVuZ3RoOiAzMDB9KX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoYFBhcnNlZCBCVUlMRF9ESVIgY29uZmlndXJhdGlvbiB2YWx1ZTogJyR7bWF0Y2hbMV19J2ApO1xuICAgICAgLy8gRGVyaXZlZCBkYXRhIHJvb3QgaXMgdHdvIGxldmVscyBoaWdoZXIgb3ZlciB0aGUgYnVpbGQgZGlyXG4gICAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IHBhdGguZGlybmFtZShwYXRoLmRpcm5hbWUocGF0aC5ub3JtYWxpemUobWF0Y2hbMV0pKSk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgR290IGRlcml2ZWQgZGF0YSByb290OiAnJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0nYCk7XG4gICAgICByZXR1cm4gdGhpcy5kZXJpdmVkRGF0YVBhdGg7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0ICgpIHtcbiAgICAvLyBpZiBuZWNlc3NhcnksIHJlc2V0IHRoZSBidW5kbGVJZCB0byBvcmlnaW5hbCB2YWx1ZVxuICAgIGlmICh0aGlzLnJlYWxEZXZpY2UgJiYgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpIHtcbiAgICAgIGF3YWl0IHJlc2V0UHJvamVjdEZpbGUodGhpcy5hZ2VudFBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHByZWJ1aWxkICgpIHtcbiAgICAvLyBmaXJzdCBkbyBhIGJ1aWxkIHBoYXNlXG4gICAgdGhpcy5sb2cuZGVidWcoJ1ByZS1idWlsZGluZyBXREEgYmVmb3JlIGxhdW5jaGluZyB0ZXN0Jyk7XG4gICAgdGhpcy51c2VQcmVidWlsdFdEQSA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5zdGFydCh0cnVlKTtcblxuICAgIHRoaXMueGNvZGVidWlsZCA9IG51bGw7XG5cbiAgICAvLyBwYXVzZSBhIG1vbWVudFxuICAgIGF3YWl0IEIuZGVsYXkodGhpcy5wcmVidWlsZERlbGF5KTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFuUHJvamVjdCAoKSB7XG4gICAgY29uc3QgdG1wSXNUdk9TID0gaXNUdk9TKHRoaXMucGxhdGZvcm1OYW1lKTtcbiAgICBjb25zdCBsaWJTY2hlbWUgPSB0bXBJc1R2T1MgPyBMSUJfU0NIRU1FX1RWIDogTElCX1NDSEVNRV9JT1M7XG4gICAgY29uc3QgcnVubmVyU2NoZW1lID0gdG1wSXNUdk9TID8gUlVOTkVSX1NDSEVNRV9UViA6IFJVTk5FUl9TQ0hFTUVfSU9TO1xuXG4gICAgZm9yIChjb25zdCBzY2hlbWUgb2YgW2xpYlNjaGVtZSwgcnVubmVyU2NoZW1lXSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYENsZWFuaW5nIHRoZSBwcm9qZWN0IHNjaGVtZSAnJHtzY2hlbWV9JyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGxlZnRvdmVycyBmcm9tIHByZXZpb3VzIGluc3RhbGxzYCk7XG4gICAgICBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgW1xuICAgICAgICAnY2xlYW4nLFxuICAgICAgICAnLXByb2plY3QnLCB0aGlzLmFnZW50UGF0aCxcbiAgICAgICAgJy1zY2hlbWUnLCBzY2hlbWUsXG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb21tYW5kIChidWlsZE9ubHkgPSBmYWxzZSkge1xuICAgIGxldCBjbWQgPSAneGNvZGVidWlsZCc7XG4gICAgbGV0IGFyZ3M7XG5cbiAgICAvLyBmaWd1cmUgb3V0IHRoZSB0YXJnZXRzIGZvciB4Y29kZWJ1aWxkXG4gICAgY29uc3QgW2J1aWxkQ21kLCB0ZXN0Q21kXSA9IHRoaXMudXNlU2ltcGxlQnVpbGRUZXN0ID8gWydidWlsZCcsICd0ZXN0J10gOiBbJ2J1aWxkLWZvci10ZXN0aW5nJywgJ3Rlc3Qtd2l0aG91dC1idWlsZGluZyddO1xuICAgIGlmIChidWlsZE9ubHkpIHtcbiAgICAgIGFyZ3MgPSBbYnVpbGRDbWRdO1xuICAgIH0gZWxzZSBpZiAodGhpcy51c2VQcmVidWlsdFdEQSB8fCB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUpIHtcbiAgICAgIGFyZ3MgPSBbdGVzdENtZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MgPSBbYnVpbGRDbWQsIHRlc3RDbWRdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uKSB7XG4gICAgICAvLyBUbyAtYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24gZmxhZyB0YWtlcyBlZmZlY3QsIC1hbGxvd1Byb3Zpc2lvbmluZ1VwZGF0ZXMgbmVlZHMgdG8gYmUgcGFzc2VkIGFzIHdlbGwuXG4gICAgICBhcmdzLnB1c2goJy1hbGxvd1Byb3Zpc2lvbmluZ1VwZGF0ZXMnLCAnLWFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdWx0QnVuZGxlUGF0aCkge1xuICAgICAgYXJncy5wdXNoKCctcmVzdWx0QnVuZGxlUGF0aCcsIHRoaXMucmVzdWx0QnVuZGxlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbikge1xuICAgICAgYXJncy5wdXNoKCctcmVzdWx0QnVuZGxlVmVyc2lvbicsIHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudXNlWGN0ZXN0cnVuRmlsZSkge1xuICAgICAgYXJncy5wdXNoKCcteGN0ZXN0cnVuJywgdGhpcy54Y3Rlc3RydW5GaWxlUGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJ1bm5lclNjaGVtZSA9IGlzVHZPUyh0aGlzLnBsYXRmb3JtTmFtZSkgPyBSVU5ORVJfU0NIRU1FX1RWIDogUlVOTkVSX1NDSEVNRV9JT1M7XG4gICAgICBhcmdzLnB1c2goJy1wcm9qZWN0JywgdGhpcy5hZ2VudFBhdGgsICctc2NoZW1lJywgcnVubmVyU2NoZW1lKTtcbiAgICAgIGlmICh0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICBhcmdzLnB1c2goJy1kZXJpdmVkRGF0YVBhdGgnLCB0aGlzLmRlcml2ZWREYXRhUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLWRlc3RpbmF0aW9uJywgYGlkPSR7dGhpcy5kZXZpY2UudWRpZH1gKTtcblxuICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IG5ldyBSZWdFeHAoL14oXFxkKylcXC4oXFxkKykvKS5leGVjKHRoaXMucGxhdGZvcm1WZXJzaW9uKTtcbiAgICBpZiAodmVyc2lvbk1hdGNoKSB7XG4gICAgICBhcmdzLnB1c2goYElQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUPSR7dmVyc2lvbk1hdGNoWzFdfS4ke3ZlcnNpb25NYXRjaFsyXX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBhcnNlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG51bWJlcnMgZnJvbSBwbGF0Zm9ybVZlcnNpb24gXCIke3RoaXMucGxhdGZvcm1WZXJzaW9ufVwiLiBgICtcbiAgICAgICAgJ1dpbGwgYnVpbGQgZm9yIHRoZSBkZWZhdWx0IHBsYXRmb3JtIGluc3RlYWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWFsRGV2aWNlICYmIHRoaXMueGNvZGVDb25maWdGaWxlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVXNpbmcgWGNvZGUgY29uZmlndXJhdGlvbiBmaWxlOiAnJHt0aGlzLnhjb2RlQ29uZmlnRmlsZX0nYCk7XG4gICAgICBhcmdzLnB1c2goJy14Y2NvbmZpZycsIHRoaXMueGNvZGVDb25maWdGaWxlKTtcbiAgICB9XG5cbiAgICBpZiAoIXByb2Nlc3MuZW52LkFQUElVTV9YQ1VJVEVTVF9UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMpIHtcbiAgICAgIC8vIFRoaXMgc29tZXRpbWVzIGhlbHBzIHRvIHN1cnZpdmUgWGNvZGUgdXBkYXRlc1xuICAgICAgYXJncy5wdXNoKCdHQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTPTAnKTtcbiAgICB9XG5cbiAgICAvLyBCZWxvdyBvcHRpb24gc2xpZ2h0bHkgcmVkdWNlcyBidWlsZCB0aW1lIGluIGRlYnVnIGJ1aWxkXG4gICAgLy8gd2l0aCBwcmV2ZW50aW5nIHRvIGdlbmVyYXRlIGAvSW5kZXgvRGF0YVN0b3JlYCB3aGljaCBpcyB1c2VkIGJ5IGRldmVsb3BtZW50XG4gICAgYXJncy5wdXNoKCdDT01QSUxFUl9JTkRFWF9TVE9SRV9FTkFCTEU9Tk8nKTtcblxuICAgIHJldHVybiB7Y21kLCBhcmdzfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVN1YlByb2Nlc3MgKGJ1aWxkT25seSA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgJiYgdGhpcy5yZWFsRGV2aWNlKSB7XG4gICAgICBpZiAodGhpcy5rZXljaGFpblBhdGggJiYgdGhpcy5rZXljaGFpblBhc3N3b3JkKSB7XG4gICAgICAgIGF3YWl0IHNldFJlYWxEZXZpY2VTZWN1cml0eSh0aGlzLmtleWNoYWluUGF0aCwgdGhpcy5rZXljaGFpblBhc3N3b3JkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnhjb2RlT3JnSWQgJiYgdGhpcy54Y29kZVNpZ25pbmdJZCAmJiAhdGhpcy54Y29kZUNvbmZpZ0ZpbGUpIHtcbiAgICAgICAgdGhpcy54Y29kZUNvbmZpZ0ZpbGUgPSBhd2FpdCBnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSh0aGlzLnhjb2RlT3JnSWQsIHRoaXMueGNvZGVTaWduaW5nSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHtjbWQsIGFyZ3N9ID0gdGhpcy5nZXRDb21tYW5kKGJ1aWxkT25seSk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEJlZ2lubmluZyAke2J1aWxkT25seSA/ICdidWlsZCcgOiAndGVzdCd9IHdpdGggY29tbWFuZCAnJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9JyBgICtcbiAgICAgIGBpbiBkaXJlY3RvcnkgJyR7dGhpcy5ib290c3RyYXBQYXRofSdgKTtcbiAgICBjb25zdCBlbnYgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudiwge1xuICAgICAgVVNFX1BPUlQ6IHRoaXMud2RhUmVtb3RlUG9ydCxcbiAgICAgIFdEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCB8fCBXREFfUlVOTkVSX0JVTkRMRV9JRCxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vV2ViRHJpdmVyQWdlbnQvcHVsbC8xMDVcbiAgICAgIGVudi5NSlBFR19TRVJWRVJfUE9SVCA9IHRoaXMubWpwZWdTZXJ2ZXJQb3J0O1xuICAgIH1cbiAgICBjb25zdCB1cGdyYWRlVGltZXN0YW1wID0gYXdhaXQgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCh0aGlzLmJvb3RzdHJhcFBhdGgpO1xuICAgIGlmICh1cGdyYWRlVGltZXN0YW1wKSB7XG4gICAgICBlbnYuVVBHUkFERV9USU1FU1RBTVAgPSB1cGdyYWRlVGltZXN0YW1wO1xuICAgIH1cbiAgICBjb25zdCB4Y29kZWJ1aWxkID0gbmV3IFN1YlByb2Nlc3MoY21kLCBhcmdzLCB7XG4gICAgICBjd2Q6IHRoaXMuYm9vdHN0cmFwUGF0aCxcbiAgICAgIGVudixcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuXG4gICAgbGV0IGxvZ1hjb2RlT3V0cHV0ID0gISF0aGlzLnNob3dYY29kZUxvZztcbiAgICBjb25zdCBsb2dNc2cgPSBfLmlzQm9vbGVhbih0aGlzLnNob3dYY29kZUxvZylcbiAgICAgID8gYE91dHB1dCBmcm9tIHhjb2RlYnVpbGQgJHt0aGlzLnNob3dYY29kZUxvZyA/ICd3aWxsJyA6ICd3aWxsIG5vdCd9IGJlIGxvZ2dlZGBcbiAgICAgIDogJ091dHB1dCBmcm9tIHhjb2RlYnVpbGQgd2lsbCBvbmx5IGJlIGxvZ2dlZCBpZiBhbnkgZXJyb3JzIGFyZSBwcmVzZW50IHRoZXJlJztcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgJHtsb2dNc2d9LiBUbyBjaGFuZ2UgdGhpcywgdXNlICdzaG93WGNvZGVMb2cnIGRlc2lyZWQgY2FwYWJpbGl0eWApO1xuICAgIHhjb2RlYnVpbGQub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgbGV0IG91dCA9IHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgICAvLyB3ZSB3YW50IHRvIHB1bGwgb3V0IHRoZSBsb2cgZmlsZSB0aGF0IGlzIGNyZWF0ZWQsIGFuZCBoaWdobGlnaHQgaXRcbiAgICAgIC8vIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzXG4gICAgICBpZiAob3V0LmluY2x1ZGVzKCdXcml0aW5nIGRpYWdub3N0aWMgbG9nIGZvciB0ZXN0IHNlc3Npb24gdG8nKSkge1xuICAgICAgICAvLyBwdWxsIG91dCB0aGUgZmlyc3QgbGluZSB0aGF0IGJlZ2lucyB3aXRoIHRoZSBwYXRoIHNlcGFyYXRvclxuICAgICAgICAvLyB3aGljaCAqc2hvdWxkKiBiZSB0aGUgbGluZSBpbmRpY2F0aW5nIHRoZSBsb2cgZmlsZSBnZW5lcmF0ZWRcbiAgICAgICAgeGNvZGVidWlsZC5sb2dMb2NhdGlvbiA9IF8uZmlyc3QoXy5yZW1vdmUob3V0LnRyaW0oKS5zcGxpdCgnXFxuJyksICh2KSA9PiB2LnN0YXJ0c1dpdGgocGF0aC5zZXApKSk7XG4gICAgICAgIHhjb2RlTG9nLmRlYnVnKGBMb2cgZmlsZSBmb3IgeGNvZGVidWlsZCB0ZXN0OiAke3hjb2RlYnVpbGQubG9nTG9jYXRpb259YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHdlIGhhdmUgYW4gZXJyb3Igd2Ugd2FudCB0byBvdXRwdXQgdGhlIGxvZ3NcbiAgICAgIC8vIG90aGVyd2lzZSB0aGUgZmFpbHVyZSBpcyBpbnNjcnV0aWJsZVxuICAgICAgLy8gYnV0IGRvIG5vdCBsb2cgcGVybWlzc2lvbiBlcnJvcnMgZnJvbSB0cnlpbmcgdG8gd3JpdGUgdG8gYXR0YWNobWVudHMgZm9sZGVyXG4gICAgICBjb25zdCBpZ25vcmVFcnJvciA9IElHTk9SRURfRVJST1JTLnNvbWUoKHgpID0+IG91dC5pbmNsdWRlcyh4KSk7XG4gICAgICBpZiAodGhpcy5zaG93WGNvZGVMb2cgIT09IGZhbHNlICYmIG91dC5pbmNsdWRlcygnRXJyb3IgRG9tYWluPScpICYmICFpZ25vcmVFcnJvcikge1xuICAgICAgICBsb2dYY29kZU91dHB1dCA9IHRydWU7XG5cbiAgICAgICAgLy8gdGVycmlibGUgaGFjayB0byBoYW5kbGUgY2FzZSB3aGVyZSB4Y29kZSByZXR1cm4gMCBidXQgaXMgZmFpbGluZ1xuICAgICAgICB4Y29kZWJ1aWxkLl93ZGFfZXJyb3Jfb2NjdXJyZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBkbyBub3QgbG9nIHBlcm1pc3Npb24gZXJyb3JzIGZyb20gdHJ5aW5nIHRvIHdyaXRlIHRvIGF0dGFjaG1lbnRzIGZvbGRlclxuICAgICAgaWYgKGxvZ1hjb2RlT3V0cHV0ICYmICFpZ25vcmVFcnJvcikge1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygb3V0LnNwbGl0KEVPTCkpIHtcbiAgICAgICAgICB4Y29kZUxvZy5lcnJvcihsaW5lKTtcbiAgICAgICAgICBpZiAobGluZSkge1xuICAgICAgICAgICAgeGNvZGVidWlsZC5fd2RhX2Vycm9yX21lc3NhZ2UgKz0gYCR7RU9MfSR7bGluZX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHhjb2RlYnVpbGQ7XG4gIH1cblxuICBhc3luYyBzdGFydCAoYnVpbGRPbmx5ID0gZmFsc2UpIHtcbiAgICB0aGlzLnhjb2RlYnVpbGQgPSBhd2FpdCB0aGlzLmNyZWF0ZVN1YlByb2Nlc3MoYnVpbGRPbmx5KTtcbiAgICAvLyBTdG9yZSB4Y29kZWJ1aWxkIG1lc3NhZ2VcbiAgICB0aGlzLnhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlID0gJyc7XG5cbiAgICAvLyB3cmFwIHRoZSBzdGFydCBwcm9jZWR1cmUgaW4gYSBwcm9taXNlIHNvIHRoYXQgd2UgY2FuIGNhdGNoLCBhbmQgcmVwb3J0LFxuICAgIC8vIGFueSBzdGFydHVwIGVycm9ycyB0aGF0IGFyZSB0aHJvd24gYXMgZXZlbnRzXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMueGNvZGVidWlsZC5vbignZXhpdCcsIGFzeW5jIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgeGNvZGVMb2cuZXJyb3IoYHhjb2RlYnVpbGQgZXhpdGVkIHdpdGggY29kZSAnJHtjb2RlfScgYW5kIHNpZ25hbCAnJHtzaWduYWx9J2ApO1xuICAgICAgICAvLyBwcmludCBvdXQgdGhlIHhjb2RlYnVpbGQgZmlsZSBpZiB1c2VycyBoYXZlIGFza2VkIGZvciBpdFxuICAgICAgICBpZiAodGhpcy5zaG93WGNvZGVMb2cgJiYgdGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9uKSB7XG4gICAgICAgICAgeGNvZGVMb2cuZXJyb3IoYENvbnRlbnRzIG9mIHhjb2RlYnVpbGQgbG9nIGZpbGUgJyR7dGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9ufSc6YCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9uLCAndXRmOCcpO1xuICAgICAgICAgICAgZm9yIChsZXQgbGluZSBvZiBkYXRhLnNwbGl0KCdcXG4nKSkge1xuICAgICAgICAgICAgICB4Y29kZUxvZy5lcnJvcihsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHhjb2RlTG9nLmVycm9yKGBVbmFibGUgdG8gYWNjZXNzIHhjb2RlYnVpbGQgbG9nIGZpbGU6ICcke2Vyci5tZXNzYWdlfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy54Y29kZWJ1aWxkLnByb2Nlc3NFeGl0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy54Y29kZWJ1aWxkLl93ZGFfZXJyb3Jfb2NjdXJyZWQgfHwgKCFzaWduYWwgJiYgY29kZSAhPT0gMCkpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgeGNvZGVidWlsZCBmYWlsZWQgd2l0aCBjb2RlICR7Y29kZX0ke0VPTH1gICtcbiAgICAgICAgICAgIGB4Y29kZWJ1aWxkIGVycm9yIG1lc3NhZ2U6JHtFT0x9JHt0aGlzLnhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlfWApKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBqdXN0IGJ1aWxkaW5nLCB0aGUgcHJvY2VzcyB3aWxsIGV4aXQgYW5kIHRoYXQgaXMgb3VyIGZpbmlzaFxuICAgICAgICBpZiAoYnVpbGRPbmx5KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnN0YXJ0KHRydWUpO1xuICAgICAgICAgIGlmICghYnVpbGRPbmx5KSB7XG4gICAgICAgICAgICBsZXQgc3RhdHVzID0gYXdhaXQgdGhpcy53YWl0Rm9yU3RhcnQodGltZXIpO1xuICAgICAgICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbGV0IG1zZyA9IGBVbmFibGUgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQ6ICR7ZXJyfWA7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3IobXNnKTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKG1zZykpO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclN0YXJ0ICh0aW1lcikge1xuICAgIC8vIHRyeSB0byBjb25uZWN0IG9uY2UgZXZlcnkgMC41IHNlY29uZHMsIHVudGlsIGBsYXVuY2hUaW1lb3V0YCBpcyB1cFxuICAgIHRoaXMubG9nLmRlYnVnKGBXYWl0aW5nIHVwIHRvICR7dGhpcy5sYXVuY2hUaW1lb3V0fW1zIGZvciBXZWJEcml2ZXJBZ2VudCB0byBzdGFydGApO1xuICAgIGxldCBjdXJyZW50U3RhdHVzID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgbGV0IHJldHJpZXMgPSBwYXJzZUludCh0aGlzLmxhdW5jaFRpbWVvdXQgLyA1MDAsIDEwKTtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgMTAwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy54Y29kZWJ1aWxkLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAvLyB0aGVyZSBoYXMgYmVlbiBhbiBlcnJvciBlbHNld2hlcmUgYW5kIHdlIG5lZWQgdG8gc2hvcnQtY2lyY3VpdFxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm94eVRpbWVvdXQgPSB0aGlzLm5vU2Vzc2lvblByb3h5LnRpbWVvdXQ7XG4gICAgICAgIHRoaXMubm9TZXNzaW9uUHJveHkudGltZW91dCA9IDEwMDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3VycmVudFN0YXR1cyA9IGF3YWl0IHRoaXMubm9TZXNzaW9uUHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICBpZiAoY3VycmVudFN0YXR1cyAmJiBjdXJyZW50U3RhdHVzLmlvcyAmJiBjdXJyZW50U3RhdHVzLmlvcy5pcCkge1xuICAgICAgICAgICAgdGhpcy5hZ2VudFVybCA9IGN1cnJlbnRTdGF0dXMuaW9zLmlwO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2ViRHJpdmVyQWdlbnQgaW5mb3JtYXRpb246YCk7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoSlNPTi5zdHJpbmdpZnkoY3VycmVudFN0YXR1cywgbnVsbCwgMikpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb25uZWN0IHRvIHJ1bm5pbmcgV2ViRHJpdmVyQWdlbnQ6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5ub1Nlc3Npb25Qcm94eS50aW1lb3V0ID0gcHJveHlUaW1lb3V0O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMueGNvZGVidWlsZC5wcm9jZXNzRXhpdGVkKSB7XG4gICAgICAgIC8vIHRoZXJlIGhhcyBiZWVuIGFuIGVycm9yIGVsc2V3aGVyZSBhbmQgd2UgbmVlZCB0byBzaG9ydC1jaXJjdWl0XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RhdHVzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2ViRHJpdmVyQWdlbnQgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYWZ0ZXIgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIGlmIHdlIGhhdmUgbm90IGhhZCBhbnkgZXJyb3JzIGZyb20geGNvZGUgaXRzZWxmIChyZXBvcnRlZFxuICAgICAgLy8gZWxzZXdoZXJlKSwgd2UgY2FuIGxldCB0aGlzIGdvIHRocm91Z2ggYW5kIHRyeSB0byBjcmVhdGUgdGhlIHNlc3Npb25cbiAgICAgIHRoaXMubG9nLmRlYnVnKGVyci5tZXNzYWdlKTtcbiAgICAgIHRoaXMubG9nLndhcm4oYEdldHRpbmcgc3RhdHVzIG9mIFdlYkRyaXZlckFnZW50IG9uIGRldmljZSB0aW1lZCBvdXQuIENvbnRpbnVpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRTdGF0dXM7XG4gIH1cblxuICBhc3luYyBxdWl0ICgpIHtcbiAgICBhd2FpdCBraWxsUHJvY2VzcygneGNvZGVidWlsZCcsIHRoaXMueGNvZGVidWlsZCk7XG4gIH1cbn1cblxuZXhwb3J0IHsgWGNvZGVCdWlsZCB9O1xuZXhwb3J0IGRlZmF1bHQgWGNvZGVCdWlsZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFD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
@@ -1,4 +1,4 @@
1
- import { fs } from '@appium/support';
1
+ import { fs } from 'appium/support';
2
2
  import _ from 'lodash';
3
3
  import { exec } from 'teen_process';
4
4
  import path from 'path';
package/lib/logger.js CHANGED
@@ -1,4 +1,4 @@
1
- import { logger } from '@appium/support';
1
+ import { logger } from 'appium/support';
2
2
 
3
3
  const log = logger.getLogger('WebDriverAgent');
4
4
 
@@ -1,4 +1,4 @@
1
- import { JWProxy } from '@appium/base-driver';
1
+ import { JWProxy } from 'appium/driver';
2
2
 
3
3
 
4
4
  class NoSessionProxy extends JWProxy {
package/lib/utils.js CHANGED
@@ -1,4 +1,4 @@
1
- import { fs, tempDir, plist } from '@appium/support';
1
+ import { fs, tempDir, plist } from 'appium/support';
2
2
  import { exec } from 'teen_process';
3
3
  import path from 'path';
4
4
  import log from './logger';
@@ -2,8 +2,8 @@ import _ from 'lodash';
2
2
  import path from 'path';
3
3
  import url from 'url';
4
4
  import B from 'bluebird';
5
- import { JWProxy } from '@appium/base-driver';
6
- import { fs, util, plist, mkdirp } from '@appium/support';
5
+ import { JWProxy } from 'appium/driver';
6
+ import { fs, util, plist, mkdirp } from 'appium/support';
7
7
  import defaultLogger from './logger';
8
8
  import { NoSessionProxy } from './no-session-proxy';
9
9
  import {
package/lib/xcodebuild.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { retryInterval } from 'asyncbox';
2
2
  import { SubProcess, exec } from 'teen_process';
3
- import { fs, logger, timing } from '@appium/support';
3
+ import { fs, logger, timing } from 'appium/support';
4
4
  import defaultLogger from './logger';
5
5
  import B from 'bluebird';
6
6
  import {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appium-webdriveragent",
3
- "version": "4.5.1",
3
+ "version": "4.6.0",
4
4
  "description": "Package bundling WebDriverAgent",
5
5
  "main": "build/index.js",
6
6
  "scripts": {
@@ -47,6 +47,7 @@
47
47
  "@appium/eslint-config-appium": "^6.0.0",
48
48
  "@appium/test-support": "^1.0.0",
49
49
  "@semantic-release/git": "^10.0.1",
50
+ "appium": "^2.0.0-beta.40",
50
51
  "appium-xcode": "^4.0.0",
51
52
  "chai": "^4.2.0",
52
53
  "chai-as-promised": "^7.1.1",
@@ -59,9 +60,10 @@
59
60
  "semantic-release": "^19.0.2",
60
61
  "sinon": "^14.0.0"
61
62
  },
63
+ "peerDependencies": {
64
+ "appium": "^2.0.0-beta.40"
65
+ },
62
66
  "dependencies": {
63
- "@appium/base-driver": "^8.3.0",
64
- "@appium/support": "^2.55.3",
65
67
  "@babel/runtime": "^7.0.0",
66
68
  "appium-ios-simulator": "^4.0.0",
67
69
  "async-lock": "^1.0.0",