appium-android-driver 5.7.1 → 5.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/build/index.js +1 -2
- package/build/lib/android-helpers.js +3 -27
- package/build/lib/android-helpers.js.map +1 -1
- package/build/lib/bootstrap.js +2 -9
- package/build/lib/bootstrap.js.map +1 -1
- package/build/lib/commands/actions.js +2 -3
- package/build/lib/commands/actions.js.map +1 -1
- package/build/lib/commands/alert.js +1 -2
- package/build/lib/commands/alert.js.map +1 -1
- package/build/lib/commands/app-management.js +3 -17
- package/build/lib/commands/app-management.js.map +1 -1
- package/build/lib/commands/context.js +2 -16
- package/build/lib/commands/context.js.map +1 -1
- package/build/lib/commands/element.js +2 -5
- package/build/lib/commands/element.js.map +1 -1
- package/build/lib/commands/emu-console.js +1 -3
- package/build/lib/commands/emu-console.js.map +1 -1
- package/build/lib/commands/file-actions.js +2 -14
- package/build/lib/commands/file-actions.js.map +1 -1
- package/build/lib/commands/find.js +1 -5
- package/build/lib/commands/find.js.map +1 -1
- package/build/lib/commands/general.js +2 -15
- package/build/lib/commands/general.js.map +1 -1
- package/build/lib/commands/index.js +2 -3
- package/build/lib/commands/index.js.map +1 -1
- package/build/lib/commands/intent.js +1 -5
- package/build/lib/commands/intent.js.map +1 -1
- package/build/lib/commands/log.js +1 -4
- package/build/lib/commands/log.js.map +1 -1
- package/build/lib/commands/media-projection.js +2 -6
- package/build/lib/commands/media-projection.js.map +1 -1
- package/build/lib/commands/network.js +1 -7
- package/build/lib/commands/network.js.map +1 -1
- package/build/lib/commands/performance.js +1 -8
- package/build/lib/commands/performance.js.map +1 -1
- package/build/lib/commands/recordscreen.js +2 -4
- package/build/lib/commands/recordscreen.js.map +1 -1
- package/build/lib/commands/shell.js +2 -2
- package/build/lib/commands/shell.js.map +1 -1
- package/build/lib/commands/streamscreen.js +5 -10
- package/build/lib/commands/streamscreen.js.map +1 -1
- package/build/lib/commands/system-bars.js +1 -4
- package/build/lib/commands/system-bars.js.map +1 -1
- package/build/lib/commands/touch.js +2 -10
- package/build/lib/commands/touch.js.map +1 -1
- package/build/lib/desired-caps.js +2 -3
- package/build/lib/desired-caps.js.map +1 -1
- package/build/lib/driver.js +2 -21
- package/build/lib/driver.js.map +1 -1
- package/build/lib/logger.js +2 -2
- package/build/lib/logger.js.map +1 -1
- package/build/lib/uiautomator.js +2 -4
- package/build/lib/uiautomator.js.map +1 -1
- package/build/lib/unlock-helpers.js +2 -4
- package/build/lib/unlock-helpers.js.map +1 -1
- package/build/lib/webview-helpers.js +2 -14
- package/build/lib/webview-helpers.js.map +1 -1
- package/lib/android-helpers.js +1 -1
- package/lib/bootstrap.js +1 -1
- package/lib/commands/actions.js +1 -1
- package/lib/commands/app-management.js +1 -1
- package/lib/commands/context.js +1 -1
- package/lib/commands/element.js +1 -1
- package/lib/commands/file-actions.js +1 -1
- package/lib/commands/general.js +1 -1
- package/lib/commands/media-projection.js +1 -1
- package/lib/commands/recordscreen.js +1 -1
- package/lib/commands/shell.js +1 -1
- package/lib/commands/streamscreen.js +1 -1
- package/lib/commands/touch.js +1 -1
- package/lib/driver.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/uiautomator.js +1 -1
- package/lib/unlock-helpers.js +1 -1
- package/lib/webview-helpers.js +1 -1
- package/package.json +3 -2
|
@@ -83,7 +83,6 @@ function parseIntentSpec(opts = {}) {
|
|
|
83
83
|
}
|
|
84
84
|
return resultArgs;
|
|
85
85
|
}
|
|
86
|
-
|
|
87
86
|
commands.mobileStartActivity = async function mobileStartActivity(opts = {}) {
|
|
88
87
|
const {
|
|
89
88
|
user,
|
|
@@ -115,7 +114,6 @@ commands.mobileStartActivity = async function mobileStartActivity(opts = {}) {
|
|
|
115
114
|
cmd.push(...parseIntentSpec(opts));
|
|
116
115
|
return await this.adb.shell(cmd);
|
|
117
116
|
};
|
|
118
|
-
|
|
119
117
|
commands.mobileBroadcast = async function mobileBroadcast(opts = {}) {
|
|
120
118
|
const {
|
|
121
119
|
user,
|
|
@@ -135,7 +133,6 @@ commands.mobileBroadcast = async function mobileBroadcast(opts = {}) {
|
|
|
135
133
|
cmd.push(...parseIntentSpec(opts));
|
|
136
134
|
return await this.adb.shell(cmd);
|
|
137
135
|
};
|
|
138
|
-
|
|
139
136
|
commands.mobileStartService = async function mobileStartService(opts = {}) {
|
|
140
137
|
const {
|
|
141
138
|
user,
|
|
@@ -153,7 +150,6 @@ commands.mobileStartService = async function mobileStartService(opts = {}) {
|
|
|
153
150
|
cmd.push(...parseIntentSpec(opts));
|
|
154
151
|
return await this.adb.shell(cmd);
|
|
155
152
|
};
|
|
156
|
-
|
|
157
153
|
commands.mobileStopService = async function mobileStopService(opts = {}) {
|
|
158
154
|
const {
|
|
159
155
|
user
|
|
@@ -167,4 +163,4 @@ commands.mobileStopService = async function mobileStopService(opts = {}) {
|
|
|
167
163
|
};
|
|
168
164
|
var _default = commands;
|
|
169
165
|
exports.default = _default;
|
|
170
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOT19WQUxVRV9BUkdfVFlQRSIsIlNVUFBPUlRFRF9FWFRSQV9UWVBFUyIsIkFQSV9MRVZFTF9BTkRST0lEXzgiLCJjb21tYW5kcyIsInBhcnNlSW50ZW50U3BlYyIsIm9wdHMiLCJpbnRlbnQiLCJhY3Rpb24iLCJ1cmkiLCJtaW1lVHlwZSIsImlkZW50aWZpZXIiLCJjYXRlZ29yaWVzIiwiY29tcG9uZW50IiwiZXh0cmFzIiwiZmxhZ3MiLCJyZXN1bHRBcmdzIiwicHVzaCIsIl8iLCJpc05pbCIsImlzQXJyYXkiLCJmbGF0TWFwIiwibWFwIiwiY05hbWUiLCJwYWNrYWdlIiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJpdGVtIiwidHlwZSIsImtleSIsInZhbHVlIiwiaW5jbHVkZXMiLCJpc0VtcHR5IiwiaXNTdHJpbmciLCJ0cmltIiwiSlNPTiIsInN0cmluZ2lmeSIsImlzVW5kZWZpbmVkIiwibW9iaWxlU3RhcnRBY3Rpdml0eSIsInVzZXIiLCJ3YWl0Iiwic3RvcCIsIndpbmRvd2luZ01vZGUiLCJhY3Rpdml0eVR5cGUiLCJkaXNwbGF5IiwiY21kIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJzaGVsbCIsIm1vYmlsZUJyb2FkY2FzdCIsInJlY2VpdmVyUGVybWlzc2lvbiIsImFsbG93QmFja2dyb3VuZEFjdGl2aXR5U3RhcnRzIiwibW9iaWxlU3RhcnRTZXJ2aWNlIiwiZm9yZWdyb3VuZCIsIm1vYmlsZVN0b3BTZXJ2aWNlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2ludGVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5cbmNvbnN0IE5PX1ZBTFVFX0FSR19UWVBFID0gJ3NuJztcbmNvbnN0IFNVUFBPUlRFRF9FWFRSQV9UWVBFUyA9IFtcbiAgJ3MnLCBOT19WQUxVRV9BUkdfVFlQRSwgJ3onLCAnaScsICdsJywgJ2YnLCAndScsICdjbicsXG4gICdpYScsICdpYWwnLCAnbGEnLCAnbGFsJywgJ2ZhJywgJ2ZhbCcsICdzYScsICdzYWwnLFxuXTtcbmNvbnN0IEFQSV9MRVZFTF9BTkRST0lEXzggPSAyNjtcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuZnVuY3Rpb24gcGFyc2VJbnRlbnRTcGVjIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGludGVudCxcbiAgICBhY3Rpb24sXG4gICAgdXJpLFxuICAgIG1pbWVUeXBlLFxuICAgIGlkZW50aWZpZXIsXG4gICAgY2F0ZWdvcmllcyxcbiAgICBjb21wb25lbnQsXG4gICAgZXh0cmFzLFxuICAgIGZsYWdzLFxuICB9ID0gb3B0cztcbiAgY29uc3QgcmVzdWx0QXJncyA9IFtdO1xuICBpZiAoaW50ZW50KSB7XG4gICAgcmVzdWx0QXJncy5wdXNoKGludGVudCk7XG4gIH1cbiAgaWYgKGFjdGlvbikge1xuICAgIHJlc3VsdEFyZ3MucHVzaCgnLWEnLCBhY3Rpb24pO1xuICB9XG4gIGlmICh1cmkpIHtcbiAgICByZXN1bHRBcmdzLnB1c2goJy1kJywgdXJpKTtcbiAgfVxuICBpZiAobWltZVR5cGUpIHtcbiAgICByZXN1bHRBcmdzLnB1c2goJy10JywgbWltZVR5cGUpO1xuICB9XG4gIGlmICghXy5pc05pbChpZGVudGlmaWVyKSkge1xuICAgIHJlc3VsdEFyZ3MucHVzaCgnLWknLCBpZGVudGlmaWVyKTtcbiAgfVxuICBpZiAoY2F0ZWdvcmllcykge1xuICAgIGlmIChfLmlzQXJyYXkoY2F0ZWdvcmllcykpIHtcbiAgICAgIHJlc3VsdEFyZ3MucHVzaCguLi4oXy5mbGF0TWFwKGNhdGVnb3JpZXMubWFwKChjTmFtZSkgPT4gWyctYycsIGNOYW1lXSkpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdEFyZ3MucHVzaCgnLWMnLCBjYXRlZ29yaWVzKTtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbXBvbmVudCkge1xuICAgIHJlc3VsdEFyZ3MucHVzaCgnLW4nLCBjb21wb25lbnQpO1xuICB9XG4gIGlmIChvcHRzLnBhY2thZ2UpIHtcbiAgICByZXN1bHRBcmdzLnB1c2goJy1wJywgb3B0cy5wYWNrYWdlKTtcbiAgfVxuICBpZiAoZXh0cmFzKSB7XG4gICAgaWYgKCFfLmlzQXJyYXkoZXh0cmFzKSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgJ2V4dHJhcycgbXVzdCBiZSBhbiBhcnJheWApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZXh0cmFzKSB7XG4gICAgICBpZiAoIV8uaXNBcnJheShpdGVtKSkge1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBFeHRyYSBhcmd1bWVudCAnJHtpdGVtfScgbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgfVxuICAgICAgY29uc3QgW3R5cGUsIGtleSwgdmFsdWVdID0gaXRlbTtcbiAgICAgIGlmICghXy5pbmNsdWRlcyhTVVBQT1JURURfRVhUUkFfVFlQRVMsIHR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICAgYEV4dHJhIGFyZ3VtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBrbm93bi4gYCArXG4gICAgICAgICAgYFN1cHBvcnRlZCBpbnRlbnQgYXJndW1lbnQgdHlwZXMgYXJlOiAke1NVUFBPUlRFRF9FWFRSQV9UWVBFU31gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXy5pc0VtcHR5KGtleSkgfHwgKF8uaXNTdHJpbmcoa2V5KSAmJiBfLnRyaW0oa2V5KSA9PT0gJycpKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICAgYEV4dHJhIGFyZ3VtZW50J3Mga2V5IGluICcke0pTT04uc3RyaW5naWZ5KGl0ZW0pfScgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBpZGVudGlmaWVyYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09IE5PX1ZBTFVFX0FSR19UWVBFKSB7XG4gICAgICAgIHJlc3VsdEFyZ3MucHVzaChgLS1lJHt0eXBlfWAsIGtleSk7XG4gICAgICB9IGVsc2UgaWYgKF8uaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICAgYEludGVudCBhcmd1bWVudCB0eXBlICcke3R5cGV9JyBpbiAnJHtKU09OLnN0cmluZ2lmeShpdGVtKX0nIHJlcXVpcmVzIGEgYCArXG4gICAgICAgICAgYHZhbGlkIHZhbHVlIHRvIGJlIHByb3ZpZGVkYFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0QXJncy5wdXNoKGAtLWUke3R5cGV9YCwga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChmbGFncykge1xuICAgIHJlc3VsdEFyZ3MucHVzaCgnLWYnLCBmbGFncyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdEFyZ3M7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3RhcnRBY3Rpdml0eU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ3xudW1iZXJ9IHVzZXIgWydjdXJyZW50J10gLSBUaGUgdXNlciBJRCBmb3Igd2hpY2ggdGhlIHNlcnZpY2UgaXMgc3RhcnRlZC5cbiAqIFRoZSBgY3VycmVudGAgdXNlciBpZCBpcyB1c2VkIGJ5IGRlZmF1bHRcbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IHdhaXQgW2ZhbHNlXSAtIFNldCBpdCB0byBgdHJ1ZWAgaWYgeW91IHdhbnQgdG8gYmxvY2sgdGhlIG1ldGhvZCBjYWxsXG4gKiB1bnRpbCB0aGUgYWN0aXZpdHkgbWFuYWdlcidzIHByb2Nlc3MgcmV0dXJucyB0aGUgY29udHJvbCB0byB0aGUgc3lzdGVtLlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gc3RvcCBbZmFsc2VdIC0gU2V0IGl0IHRvIGB0cnVlYCB0byBmb3JjZSBzdG9wIHRoZSB0YXJnZXRcbiAqIGFwcCBiZWZvcmUgc3RhcnRpbmcgdGhlIGFjdGl2aXR5XG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSB3aW5kb3dpbmdNb2RlIC0gVGhlIHdpbmRvd2luZyBtb2RlIHRvIGxhdW5jaCB0aGUgYWN0aXZpdHkgaW50by5cbiAqIENoZWNrIGh0dHBzOi8vYW5kcm9pZC5nb29nbGVzb3VyY2UuY29tL3BsYXRmb3JtL2ZyYW1ld29ya3MvYmFzZS8rL21hc3Rlci9jb3JlL2phdmEvYW5kcm9pZC9hcHAvV2luZG93Q29uZmlndXJhdGlvbi5qYXZhXG4gKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHBvc3NpYmxlIHdpbmRvd2luZyBtb2RlcyAoY29uc3RhbnRzIHN0YXJ0aW5nIHdpdGggYFdJTkRPV0lOR19NT0RFX2ApLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfHN0cmluZ30gYWN0aXZpdHlUeXBlIC0gVGhlIGFjdGl2aXR5IHR5cGUgdG8gbGF1bmNoIHRoZSBhY3Rpdml0eSBhcy5cbiAqIENoZWNrIGh0dHBzOi8vYW5kcm9pZC5nb29nbGVzb3VyY2UuY29tL3BsYXRmb3JtL2ZyYW1ld29ya3MvYmFzZS8rL21hc3Rlci9jb3JlL2phdmEvYW5kcm9pZC9hcHAvV2luZG93Q29uZmlndXJhdGlvbi5qYXZhXG4gKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHBvc3NpYmxlIGFjdGl2aXR5IHR5cGVzIChjb25zdGFudHMgc3RhcnRpbmcgd2l0aCBgQUNUSVZJVFlfVFlQRV9gKS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IGRpc3BsYXkgLSBUaGUgZGlzcGxheSBpZGVudGlmaWVyIHRvIGxhdW5jaCB0aGUgYWN0aXZpdHkgaW50by5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gaW50ZW50IC0gVGhlIG5hbWUgb2YgdGhlIGFjdGl2aXR5IGludGVudCB0byBzdGFydCwgZm9yIGV4YW1wbGVcbiAqIGBjb20uc29tZS5wYWNrYWdlLm5hbWUvLllvdXJTZXJ2aWNlU3ViQ2xhc3NOYW1lYFxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBhY3Rpb24gLSBBY3Rpb24gbmFtZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwYWNrYWdlIC0gUGFja2FnZSBuYW1lXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHVyaSAtIFVuaWZpZWQgcmVzb3VyY2UgaWRlbnRpZmllclxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBtaW1lVHlwZSAtIE1pbWUgdHlwZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBpZGVudGlmaWVyIC0gT3B0aW9uYWwgaWRlbnRpZmllclxuICogQHByb3BlcnR5IHs/c3RyaW5nfEFycmF5PHN0cmluZz59IGNhdGVnb3JpZXMgLSBPbmUgb3IgbW9yZSBjYXRlZ29yeSBuYW1lc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBjb21wb25lbnQgLSBDb21wb25lbnQgbmFtZVxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmd8QXJyYXk8c3RyaW5nPj59IGV4dHJhcyAtIE9wdGlvbmFsIGludGVudCBhcmd1bWVudHMuIE11c3QgYmUgcmVwcmVzZW50ZWRcbiAqIGFzIGFycmF5IG9mIGFycmF5cywgd2hlcmUgZWFjaCBzdWJhcnJheSBpdGVtIGNvbnRhaW5zIHR3byBvciB0aHJlZSBzdHJpbmcgaXRlbXM6XG4gKiB2YWx1ZSB0eXBlLCBrZXkgbmFtZSBhbmQgdGhlIHZhbHVlIGl0c2VsZi5cbiAqIFN1cHBvcnRlZCB2YWx1ZSB0eXBlcyBhcmU6XG4gKiAtIHM6IHN0cmluZy4gVmFsdWUgbXVzdCBiZSBhIHZhbGlkIHN0cmluZ1xuICogLSBzbjogbnVsbC4gVmFsdWUgaXMgaWdub3JlZCBmb3IgdGhpcyB0eXBlXG4gKiAtIHo6IGJvb2xlYW4uIFZhbHVlIG11c3QgYmUgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgXG4gKiAtIGk6IGludGVnZXIuIFZhbHVlIG11c3QgYmUgYSB2YWxpZCA0LWJ5dGUgaW50ZWdlciBudW1iZXJcbiAqIC0gbDogbG9uZy4gVmFsdWUgbXVzdCBiZSBhIHZhbGlkIDgtYnl0ZSBsb25nIG51bWJlclxuICogLSBmOiBmbG9hdDogVmFsdWUgbXVzdCBiZSBhIHZhbGlkIGZsb2F0IG51bWJlclxuICogLSB1OiB1cmkuIFZhbHVlIG11c3QgYmUgYSB2YWxpZCB1bmlmb3JtIHJlc291cmNlIGlkZW50aWZpZXIgc3RyaW5nXG4gKiAtIGNuOiBjb21wb25lbnQgbmFtZS4gVmFsdWUgbXVzdCBiZSBhIHZhbGlkIGNvbXBvbmVudCBuYW1lIHN0cmluZ1xuICogLSBpYTogSW50ZWdlcltdLiBWYWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9mIGNvbW1hLXNlcGFyYXRlZCBpbnRlZ2Vyc1xuICogLSBpYWw6IExpc3Q8SW50ZWdlcj4uIFZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2YgY29tbWEtc2VwYXJhdGVkIGludGVnZXJzXG4gKiAtIGxhOiBMb25nW10uIFZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2YgY29tbWEtc2VwYXJhdGVkIGxvbmcgbnVtYmVyc1xuICogLSBsYWw6IExpc3Q8TG9uZz4uIFZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2YgY29tbWEtc2VwYXJhdGVkIGxvbmcgbnVtYmVyc1xuICogLSBmYTogRmxvYXRbXS4gVmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvZiBjb21tYS1zZXBhcmF0ZWQgZmxvYXQgbnVtYmVyc1xuICogLSBmYWw6IExpc3Q8RmxvYXQ+LiBWYWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9mIGNvbW1hLXNlcGFyYXRlZCBmbG9hdCBudW1iZXJzXG4gKiAtIHNhOiBTdHJpbmdbXS4gVmFsdWUgbXVzdCBiZSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5ncy4gVG8gZW1iZWQgYSBjb21tYSBpbnRvIGEgc3RyaW5nLFxuICogZXNjYXBlIGl0IHVzaW5nIFwiXFwsXCJcbiAqIC0gc2FsOiBMaXN0PFN0cmluZz4uIFZhbHVlIG11c3QgYmUgY29tbWEtc2VwYXJhdGVkIHN0cmluZ3MuIFRvIGVtYmVkIGEgY29tbWEgaW50byBhIHN0cmluZyxcbiAqIGVzY2FwZSBpdCB1c2luZyBcIlxcLFwiXG4gKiBGb3IgZXhhbXBsZTogW1sncycsICd2YXJOYW1lMScsICdNeSBTdHJpbmcxJ10sIFsncycsICd2YXJOYW1lMicsICdNeSBTdHJpbmcyJ10sIFsnaWEnLCAnYXJyTmFtZScsICcxLDIsMyw0J11dXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGZsYWdzIC0gSW50ZW50IHN0YXJ0dXAtc3BlY2lmaWMgZmxhZ3MgYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmcuXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvY29udGVudC9JbnRlbnQuaHRtbFxuICogZm9yIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBmbGFnIHZhbHVlcyAoY29uc3RhbnRzIHN0YXJ0aW5nIHdpdGggRkxBR19BQ1RJVklUWV8pLlxuICogRmxhZyB2YWx1ZXMgY291bGQgYmUgbWVyZ2VkIHVzaW5nIHRoZSBsb2dpY2FsICdvcicgb3BlcmF0aW9uLlxuICogRm9yIGV4YW1wbGUsIDB4MTAyMDAwMDAgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIHR3byBmbGFnczpcbiAqIDB4MTAwMDAwMDAgYEZMQUdfQUNUSVZJVFlfTkVXX1RBU0tgIHwgMHgwMDIwMDAwMCBgRkxBR19BQ1RJVklUWV9SRVNFVF9UQVNLX0lGX05FRURFRGBcbiAqL1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgZ2l2ZW4gYWN0aXZpdHkgaW50ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RhcnRBY3Rpdml0eU9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21tYW5kIG91dHB1dFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgc3RhcnRpbmcgdGhlIGFjdGl2aXR5XG4gKiBvciByZXF1aXJlZCBvcHRpb25zIGFyZSBtaXNzaW5nXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVN0YXJ0QWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTdGFydEFjdGl2aXR5IChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHVzZXIsXG4gICAgd2FpdCxcbiAgICBzdG9wLFxuICAgIHdpbmRvd2luZ01vZGUsXG4gICAgYWN0aXZpdHlUeXBlLFxuICAgIGRpc3BsYXksXG4gIH0gPSBvcHRzO1xuICBjb25zdCBjbWQgPSBbXG4gICAgJ2FtJywgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCBBUElfTEVWRUxfQU5EUk9JRF84KSA/ICdzdGFydCcgOiAnc3RhcnQtYWN0aXZpdHknLFxuICBdO1xuICBpZiAoIV8uaXNOaWwodXNlcikpIHtcbiAgICBjbWQucHVzaCgnLS11c2VyJywgdXNlcik7XG4gIH1cbiAgaWYgKHdhaXQpIHtcbiAgICBjbWQucHVzaCgnLVcnKTtcbiAgfVxuICBpZiAoc3RvcCkge1xuICAgIGNtZC5wdXNoKCctUycpO1xuICB9XG4gIGlmICghXy5pc05pbCh3aW5kb3dpbmdNb2RlKSkge1xuICAgIGNtZC5wdXNoKCctLXdpbmRvd2luZ01vZGUnLCB3aW5kb3dpbmdNb2RlKTtcbiAgfVxuICBpZiAoIV8uaXNOaWwoYWN0aXZpdHlUeXBlKSkge1xuICAgIGNtZC5wdXNoKCctLWFjdGl2aXR5VHlwZScsIGFjdGl2aXR5VHlwZSk7XG4gIH1cbiAgaWYgKCFfLmlzTmlsKGRpc3BsYXkpKSB7XG4gICAgY21kLnB1c2goJy0tZGlzcGxheScsIGRpc3BsYXkpO1xuICB9XG4gIGNtZC5wdXNoKC4uLihwYXJzZUludGVudFNwZWMob3B0cykpKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnNoZWxsKGNtZCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEJyb2FkY2FzdE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ3xudW1iZXJ9IHVzZXIgWydhbGwnXSAtIFRoZSB1c2VyIElEIGZvciB3aGljaCB0aGUgYnJvYWRjYXN0IGlzIHNlbnQuXG4gKiBUaGUgYGN1cnJlbnRgIGFsaWFzIGFzc3VtZXMgdGhlIGN1cnJlbnQgdXNlciBJRC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcmVjZWl2ZXJQZXJtaXNzaW9uIC0gUmVxdWlyZSByZWNlaXZlciB0byBob2xkIHRoZSBnaXZlbiBwZXJtaXNzaW9uLlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gYWxsb3dCYWNrZ3JvdW5kQWN0aXZpdHlTdGFydHMgW2ZhbHNlXSAtIFdoZXRoZXIgdGhlIHJlY2VpdmVyIG1heVxuICogc3RhcnQgYWN0aXZpdGllcyBldmVuIGlmIGluIHRoZSBiYWNrZ3JvdW5kLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBpbnRlbnQgLSBUaGUgbmFtZSBvZiB0aGUgaW50ZW50IHRvIGJyb2FkY2FzdCB0bywgZm9yIGV4YW1wbGVcbiAqIGBjb20uc29tZS5wYWNrYWdlLm5hbWUvLllvdXJTZXJ2aWNlU3ViQ2xhc3NOYW1lYC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gYWN0aW9uIC0gQWN0aW9uIG5hbWVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdXJpIC0gVW5pZmllZCByZXNvdXJjZSBpZGVudGlmaWVyXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG1pbWVUeXBlIC0gTWltZSB0eXBlXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGlkZW50aWZpZXIgLSBPcHRpb25hbCBpZGVudGlmaWVyXG4gKiBAcHJvcGVydHkgez9zdHJpbmd8QXJyYXk8c3RyaW5nPn0gY2F0ZWdvcmllcyAtIE9uZSBvciBtb3JlIGNhdGVnb3J5IG5hbWVzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGNvbXBvbmVudCAtIENvbXBvbmVudCBuYW1lXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHBhY2thZ2UgLSBQYWNrYWdlIG5hbWVcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8QXJyYXk8c3RyaW5nPj59IGV4dHJhcyAtIE9wdGlvbmFsIGludGVudCBhcmd1bWVudHMuXG4gKiBTZWUgYWJvdmUgZm9yIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbi5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZmxhZ3MgLSBJbnRlbnQgc3RhcnR1cC1zcGVjaWZpYyBmbGFncyBhcyBhIGhleGFkZWNpbWFsIHN0cmluZy5cbiAqIFNlZSBhYm92ZSBmb3IgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uLlxuICovXG5cblxuLyoqXG4gKiBTZW5kIGEgYnJvYWRjYXN0IGludGVudC5cbiAqXG4gKiBAcGFyYW0ge0Jyb2FkY2FzdE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21tYW5kIG91dHB1dFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgc3RhcnRpbmcgdGhlIGFjdGl2aXR5XG4gKiBvciByZXF1aXJlZCBvcHRpb25zIGFyZSBtaXNzaW5nXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUJyb2FkY2FzdCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUJyb2FkY2FzdCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB1c2VyLFxuICAgIHJlY2VpdmVyUGVybWlzc2lvbixcbiAgICBhbGxvd0JhY2tncm91bmRBY3Rpdml0eVN0YXJ0cyxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IGNtZCA9IFsnYW0nLCAnYnJvYWRjYXN0J107XG4gIGlmICghXy5pc05pbCh1c2VyKSkge1xuICAgIGNtZC5wdXNoKCctLXVzZXInLCB1c2VyKTtcbiAgfVxuICBpZiAocmVjZWl2ZXJQZXJtaXNzaW9uKSB7XG4gICAgY21kLnB1c2goJy0tcmVjZWl2ZXItcGVybWlzc2lvbicsIHJlY2VpdmVyUGVybWlzc2lvbik7XG4gIH1cbiAgaWYgKGFsbG93QmFja2dyb3VuZEFjdGl2aXR5U3RhcnRzKSB7XG4gICAgY21kLnB1c2goJy0tYWxsb3ctYmFja2dyb3VuZC1hY3Rpdml0eS1zdGFydHMnKTtcbiAgfVxuICBjbWQucHVzaCguLi4ocGFyc2VJbnRlbnRTcGVjKG9wdHMpKSk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5zaGVsbChjbWQpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdGFydFNlcnZpY2VPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd8bnVtYmVyfSB1c2VyIFsnY3VycmVudCddIC0gVGhlIHVzZXIgSUQgZm9yIHdoaWNoIHRoZSBzZXJ2aWNlIGlzIHN0YXJ0ZWQuXG4gKiBUaGUgYGN1cnJlbnRgIHVzZXIgaWQgaXMgdXNlZCBieSBkZWZhdWx0XG4gKiBAcHJvcGVydHkgez9ib29sZWFufSBmb3JlZ3JvdW5kIFtmYWxzZV0gLSBTZXQgaXQgdG8gYHRydWVgIGlmIHlvdXIgc2VydmljZSBtdXN0IGJlXG4gKiBzdGFydGVkIGFzIGZvcmVncm91bmQgc2VydmljZS4gVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiB0aGUgQVBJIGxldmVsIG9mIHRoZVxuICogZGV2aWNlIHVuZGVyIHRlc3QgaXMgYmVsb3cgMjYgKEFuZHJvaWQgOCkuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGludGVudCAtIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGludGVudCB0byBzdGFydCwgZm9yIGV4YW1wbGVcbiAqIGBjb20uc29tZS5wYWNrYWdlLm5hbWUvLllvdXJTZXJ2aWNlU3ViQ2xhc3NOYW1lYC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gYWN0aW9uIC0gQWN0aW9uIG5hbWVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdXJpIC0gVW5pZmllZCByZXNvdXJjZSBpZGVudGlmaWVyXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG1pbWVUeXBlIC0gTWltZSB0eXBlXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGlkZW50aWZpZXIgLSBPcHRpb25hbCBpZGVudGlmaWVyXG4gKiBAcHJvcGVydHkgez9zdHJpbmd8QXJyYXk8c3RyaW5nPn0gY2F0ZWdvcmllcyAtIE9uZSBvciBtb3JlIGNhdGVnb3J5IG5hbWVzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGNvbXBvbmVudCAtIENvbXBvbmVudCBuYW1lXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHBhY2thZ2UgLSBQYWNrYWdlIG5hbWVcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8QXJyYXk8c3RyaW5nPj59IGV4dHJhcyAtIE9wdGlvbmFsIGludGVudCBhcmd1bWVudHMuXG4gKiBTZWUgYWJvdmUgZm9yIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbi5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZmxhZ3MgLSBJbnRlbnQgc3RhcnR1cC1zcGVjaWZpYyBmbGFncyBhcyBhIGhleGFkZWNpbWFsIHN0cmluZy5cbiAqIFNlZSBhYm92ZSBmb3IgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uLlxuICovXG5cbi8qKlxuICogU3RhcnRzIHRoZSBnaXZlbiBzZXJ2aWNlIGludGVudC5cbiAqXG4gKiBAcGFyYW0ge1N0YXJ0U2VydmljZU9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21tYW5kIG91dHB1dFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgc3RhcnRpbmcgdGhlIHNlcnZpY2VcbiAqIG9yIHJlcXVpcmVkIG9wdGlvbnMgYXJlIG1pc3NpbmdcbiAqL1xuY29tbWFuZHMubW9iaWxlU3RhcnRTZXJ2aWNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3RhcnRTZXJ2aWNlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHVzZXIsXG4gICAgZm9yZWdyb3VuZCxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IGNtZCA9IFsnYW0nXTtcbiAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCBBUElfTEVWRUxfQU5EUk9JRF84KSB7XG4gICAgY21kLnB1c2goJ3N0YXJ0c2VydmljZScpO1xuICB9IGVsc2Uge1xuICAgIGNtZC5wdXNoKGZvcmVncm91bmQgPyAnc3RhcnQtZm9yZWdyb3VuZC1zZXJ2aWNlJyA6ICdzdGFydC1zZXJ2aWNlJyk7XG4gIH1cbiAgaWYgKCFfLmlzTmlsKHVzZXIpKSB7XG4gICAgY21kLnB1c2goJy0tdXNlcicsIHVzZXIpO1xuICB9XG4gIGNtZC5wdXNoKC4uLihwYXJzZUludGVudFNwZWMob3B0cykpKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnNoZWxsKGNtZCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0b3BTZXJ2aWNlT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSB1c2VyIFsnY3VycmVudCddIC0gVGhlIHVzZXIgSUQgZm9yIHdoaWNoIHRoZSBzZXJ2aWNlIGlzIHJ1bm5pbmcuXG4gKiBUaGUgYGN1cnJlbnRgIHVzZXIgaWQgaXMgdXNlZCBieSBkZWZhdWx0XG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGludGVudCAtIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGludGVudCB0byBzdG9wLCBmb3IgZXhhbXBsZVxuICogYGNvbS5zb21lLnBhY2thZ2UubmFtZS8uWW91clNlcnZpY2VTdWJDbGFzc05hbWVgLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBhY3Rpb24gLSBBY3Rpb24gbmFtZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB1cmkgLSBVbmlmaWVkIHJlc291cmNlIGlkZW50aWZpZXJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbWltZVR5cGUgLSBNaW1lIHR5cGVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gaWRlbnRpZmllciAtIE9wdGlvbmFsIGlkZW50aWZpZXJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ3xBcnJheTxzdHJpbmc+fSBjYXRlZ29yaWVzIC0gT25lIG9yIG1vcmUgY2F0ZWdvcnkgbmFtZXNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gY29tcG9uZW50IC0gQ29tcG9uZW50IG5hbWVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGFja2FnZSAtIFBhY2thZ2UgbmFtZVxuICogQHByb3BlcnR5IHtBcnJheTxBcnJheTxzdHJpbmc+Pn0gZXh0cmFzIC0gT3B0aW9uYWwgaW50ZW50IGFyZ3VtZW50cy5cbiAqIFNlZSBhYm92ZSBmb3IgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBmbGFncyAtIFNlZSBhYm92ZSBmb3IgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uLlxuICovXG5cbi8qKlxuICogU3RvcHMgdGhlIGdpdmVuIHNlcnZpY2UgaW50ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RvcFNlcnZpY2VPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tbWFuZCBvdXRwdXRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIHN0b3BwaW5nIHRoZSBzZXJ2aWNlXG4gKiBvciByZXF1aXJlZCBvcHRpb25zIGFyZSBtaXNzaW5nXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVN0b3BTZXJ2aWNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3RvcFNlcnZpY2UgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXNlcixcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IGNtZCA9IFtcbiAgICAnYW0nLFxuICAgIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpIDwgQVBJX0xFVkVMX0FORFJPSURfOCkgPyAnc3RvcHNlcnZpY2UnIDogJ3N0b3Atc2VydmljZSdcbiAgXTtcbiAgaWYgKCFfLmlzTmlsKHVzZXIpKSB7XG4gICAgY21kLnB1c2goJy0tdXNlcicsIHVzZXIpO1xuICB9XG4gIGNtZC5wdXNoKC4uLihwYXJzZUludGVudFNwZWMob3B0cykpKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnNoZWxsKGNtZCk7XG59O1xuXG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsSUFBSTtBQUM5QixNQUFNQyxxQkFBcUIsR0FBRyxDQUM1QixHQUFHLEVBQUVELGlCQUFpQixFQUFFLEdBQUcs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
|
|
166
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOT19WQUxVRV9BUkdfVFlQRSIsIlNVUFBPUlRFRF9FWFRSQV9UWVBFUyIsIkFQSV9MRVZFTF9BTkRST0lEXzgiLCJjb21tYW5kcyIsInBhcnNlSW50ZW50U3BlYyIsIm9wdHMiLCJpbnRlbnQiLCJhY3Rpb24iLCJ1cmkiLCJtaW1lVHlwZSIsImlkZW50aWZpZXIiLCJjYXRlZ29yaWVzIiwiY29tcG9uZW50IiwiZXh0cmFzIiwiZmxhZ3MiLCJyZXN1bHRBcmdzIiwicHVzaCIsIl8iLCJpc05pbCIsImlzQXJyYXkiLCJmbGF0TWFwIiwibWFwIiwiY05hbWUiLCJwYWNrYWdlIiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJpdGVtIiwidHlwZSIsImtleSIsInZhbHVlIiwiaW5jbHVkZXMiLCJpc0VtcHR5IiwiaXNTdHJpbmciLCJ0cmltIiwiSlNPTiIsInN0cmluZ2lmeSIsImlzVW5kZWZpbmVkIiwibW9iaWxlU3RhcnRBY3Rpdml0eSIsInVzZXIiLCJ3YWl0Iiwic3RvcCIsIndpbmRvd2luZ01vZGUiLCJhY3Rpdml0eVR5cGUiLCJkaXNwbGF5IiwiY21kIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJzaGVsbCIsIm1vYmlsZUJyb2FkY2FzdCIsInJlY2VpdmVyUGVybWlzc2lvbiIsImFsbG93QmFja2dyb3VuZEFjdGl2aXR5U3RhcnRzIiwibW9iaWxlU3RhcnRTZXJ2aWNlIiwiZm9yZWdyb3VuZCIsIm1vYmlsZVN0b3BTZXJ2aWNlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2ludGVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5cbmNvbnN0IE5PX1ZBTFVFX0FSR19UWVBFID0gJ3NuJztcbmNvbnN0IFNVUFBPUlRFRF9FWFRSQV9UWVBFUyA9IFtcbiAgJ3MnLCBOT19WQUxVRV9BUkdfVFlQRSwgJ3onLCAnaScsICdsJywgJ2YnLCAndScsICdjbicsXG4gICdpYScsICdpYWwnLCAnbGEnLCAnbGFsJywgJ2ZhJywgJ2ZhbCcsICdzYScsICdzYWwnLFxuXTtcbmNvbnN0IEFQSV9MRVZFTF9BTkRST0lEXzggPSAyNjtcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuZnVuY3Rpb24gcGFyc2VJbnRlbnRTcGVjIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGludGVudCxcbiAgICBhY3Rpb24sXG4gICAgdXJpLFxuICAgIG1pbWVUeXBlLFxuICAgIGlkZW50aWZpZXIsXG4gICAgY2F0ZWdvcmllcyxcbiAgICBjb21wb25lbnQsXG4gICAgZXh0cmFzLFxuICAgIGZsYWdzLFxuICB9ID0gb3B0cztcbiAgY29uc3QgcmVzdWx0QXJncyA9IFtdO1xuICBpZiAoaW50ZW50KSB7XG4gICAgcmVzdWx0QXJncy5wdXNoKGludGVudCk7XG4gIH1cbiAgaWYgKGFjdGlvbikge1xuICAgIHJlc3VsdEFyZ3MucHVzaCgnLWEnLCBhY3Rpb24pO1xuICB9XG4gIGlmICh1cmkpIHtcbiAgICByZXN1bHRBcmdzLnB1c2goJy1kJywgdXJpKTtcbiAgfVxuICBpZiAobWltZVR5cGUpIHtcbiAgICByZXN1bHRBcmdzLnB1c2goJy10JywgbWltZVR5cGUpO1xuICB9XG4gIGlmICghXy5pc05pbChpZGVudGlmaWVyKSkge1xuICAgIHJlc3VsdEFyZ3MucHVzaCgnLWknLCBpZGVudGlmaWVyKTtcbiAgfVxuICBpZiAoY2F0ZWdvcmllcykge1xuICAgIGlmIChfLmlzQXJyYXkoY2F0ZWdvcmllcykpIHtcbiAgICAgIHJlc3VsdEFyZ3MucHVzaCguLi4oXy5mbGF0TWFwKGNhdGVnb3JpZXMubWFwKChjTmFtZSkgPT4gWyctYycsIGNOYW1lXSkpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdEFyZ3MucHVzaCgnLWMnLCBjYXRlZ29yaWVzKTtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbXBvbmVudCkge1xuICAgIHJlc3VsdEFyZ3MucHVzaCgnLW4nLCBjb21wb25lbnQpO1xuICB9XG4gIGlmIChvcHRzLnBhY2thZ2UpIHtcbiAgICByZXN1bHRBcmdzLnB1c2goJy1wJywgb3B0cy5wYWNrYWdlKTtcbiAgfVxuICBpZiAoZXh0cmFzKSB7XG4gICAgaWYgKCFfLmlzQXJyYXkoZXh0cmFzKSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgJ2V4dHJhcycgbXVzdCBiZSBhbiBhcnJheWApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZXh0cmFzKSB7XG4gICAgICBpZiAoIV8uaXNBcnJheShpdGVtKSkge1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBFeHRyYSBhcmd1bWVudCAnJHtpdGVtfScgbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgfVxuICAgICAgY29uc3QgW3R5cGUsIGtleSwgdmFsdWVdID0gaXRlbTtcbiAgICAgIGlmICghXy5pbmNsdWRlcyhTVVBQT1JURURfRVhUUkFfVFlQRVMsIHR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICAgYEV4dHJhIGFyZ3VtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBrbm93bi4gYCArXG4gICAgICAgICAgYFN1cHBvcnRlZCBpbnRlbnQgYXJndW1lbnQgdHlwZXMgYXJlOiAke1NVUFBPUlRFRF9FWFRSQV9UWVBFU31gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXy5pc0VtcHR5KGtleSkgfHwgKF8uaXNTdHJpbmcoa2V5KSAmJiBfLnRyaW0oa2V5KSA9PT0gJycpKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICAgYEV4dHJhIGFyZ3VtZW50J3Mga2V5IGluICcke0pTT04uc3RyaW5naWZ5KGl0ZW0pfScgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBpZGVudGlmaWVyYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09IE5PX1ZBTFVFX0FSR19UWVBFKSB7XG4gICAgICAgIHJlc3VsdEFyZ3MucHVzaChgLS1lJHt0eXBlfWAsIGtleSk7XG4gICAgICB9IGVsc2UgaWYgKF8uaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICAgYEludGVudCBhcmd1bWVudCB0eXBlICcke3R5cGV9JyBpbiAnJHtKU09OLnN0cmluZ2lmeShpdGVtKX0nIHJlcXVpcmVzIGEgYCArXG4gICAgICAgICAgYHZhbGlkIHZhbHVlIHRvIGJlIHByb3ZpZGVkYFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0QXJncy5wdXNoKGAtLWUke3R5cGV9YCwga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChmbGFncykge1xuICAgIHJlc3VsdEFyZ3MucHVzaCgnLWYnLCBmbGFncyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdEFyZ3M7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3RhcnRBY3Rpdml0eU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ3xudW1iZXJ9IHVzZXIgWydjdXJyZW50J10gLSBUaGUgdXNlciBJRCBmb3Igd2hpY2ggdGhlIHNlcnZpY2UgaXMgc3RhcnRlZC5cbiAqIFRoZSBgY3VycmVudGAgdXNlciBpZCBpcyB1c2VkIGJ5IGRlZmF1bHRcbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IHdhaXQgW2ZhbHNlXSAtIFNldCBpdCB0byBgdHJ1ZWAgaWYgeW91IHdhbnQgdG8gYmxvY2sgdGhlIG1ldGhvZCBjYWxsXG4gKiB1bnRpbCB0aGUgYWN0aXZpdHkgbWFuYWdlcidzIHByb2Nlc3MgcmV0dXJucyB0aGUgY29udHJvbCB0byB0aGUgc3lzdGVtLlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gc3RvcCBbZmFsc2VdIC0gU2V0IGl0IHRvIGB0cnVlYCB0byBmb3JjZSBzdG9wIHRoZSB0YXJnZXRcbiAqIGFwcCBiZWZvcmUgc3RhcnRpbmcgdGhlIGFjdGl2aXR5XG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSB3aW5kb3dpbmdNb2RlIC0gVGhlIHdpbmRvd2luZyBtb2RlIHRvIGxhdW5jaCB0aGUgYWN0aXZpdHkgaW50by5cbiAqIENoZWNrIGh0dHBzOi8vYW5kcm9pZC5nb29nbGVzb3VyY2UuY29tL3BsYXRmb3JtL2ZyYW1ld29ya3MvYmFzZS8rL21hc3Rlci9jb3JlL2phdmEvYW5kcm9pZC9hcHAvV2luZG93Q29uZmlndXJhdGlvbi5qYXZhXG4gKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHBvc3NpYmxlIHdpbmRvd2luZyBtb2RlcyAoY29uc3RhbnRzIHN0YXJ0aW5nIHdpdGggYFdJTkRPV0lOR19NT0RFX2ApLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfHN0cmluZ30gYWN0aXZpdHlUeXBlIC0gVGhlIGFjdGl2aXR5IHR5cGUgdG8gbGF1bmNoIHRoZSBhY3Rpdml0eSBhcy5cbiAqIENoZWNrIGh0dHBzOi8vYW5kcm9pZC5nb29nbGVzb3VyY2UuY29tL3BsYXRmb3JtL2ZyYW1ld29ya3MvYmFzZS8rL21hc3Rlci9jb3JlL2phdmEvYW5kcm9pZC9hcHAvV2luZG93Q29uZmlndXJhdGlvbi5qYXZhXG4gKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHBvc3NpYmxlIGFjdGl2aXR5IHR5cGVzIChjb25zdGFudHMgc3RhcnRpbmcgd2l0aCBgQUNUSVZJVFlfVFlQRV9gKS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IGRpc3BsYXkgLSBUaGUgZGlzcGxheSBpZGVudGlmaWVyIHRvIGxhdW5jaCB0aGUgYWN0aXZpdHkgaW50by5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gaW50ZW50IC0gVGhlIG5hbWUgb2YgdGhlIGFjdGl2aXR5IGludGVudCB0byBzdGFydCwgZm9yIGV4YW1wbGVcbiAqIGBjb20uc29tZS5wYWNrYWdlLm5hbWUvLllvdXJTZXJ2aWNlU3ViQ2xhc3NOYW1lYFxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBhY3Rpb24gLSBBY3Rpb24gbmFtZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwYWNrYWdlIC0gUGFja2FnZSBuYW1lXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHVyaSAtIFVuaWZpZWQgcmVzb3VyY2UgaWRlbnRpZmllclxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBtaW1lVHlwZSAtIE1pbWUgdHlwZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBpZGVudGlmaWVyIC0gT3B0aW9uYWwgaWRlbnRpZmllclxuICogQHByb3BlcnR5IHs/c3RyaW5nfEFycmF5PHN0cmluZz59IGNhdGVnb3JpZXMgLSBPbmUgb3IgbW9yZSBjYXRlZ29yeSBuYW1lc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBjb21wb25lbnQgLSBDb21wb25lbnQgbmFtZVxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmd8QXJyYXk8c3RyaW5nPj59IGV4dHJhcyAtIE9wdGlvbmFsIGludGVudCBhcmd1bWVudHMuIE11c3QgYmUgcmVwcmVzZW50ZWRcbiAqIGFzIGFycmF5IG9mIGFycmF5cywgd2hlcmUgZWFjaCBzdWJhcnJheSBpdGVtIGNvbnRhaW5zIHR3byBvciB0aHJlZSBzdHJpbmcgaXRlbXM6XG4gKiB2YWx1ZSB0eXBlLCBrZXkgbmFtZSBhbmQgdGhlIHZhbHVlIGl0c2VsZi5cbiAqIFN1cHBvcnRlZCB2YWx1ZSB0eXBlcyBhcmU6XG4gKiAtIHM6IHN0cmluZy4gVmFsdWUgbXVzdCBiZSBhIHZhbGlkIHN0cmluZ1xuICogLSBzbjogbnVsbC4gVmFsdWUgaXMgaWdub3JlZCBmb3IgdGhpcyB0eXBlXG4gKiAtIHo6IGJvb2xlYW4uIFZhbHVlIG11c3QgYmUgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgXG4gKiAtIGk6IGludGVnZXIuIFZhbHVlIG11c3QgYmUgYSB2YWxpZCA0LWJ5dGUgaW50ZWdlciBudW1iZXJcbiAqIC0gbDogbG9uZy4gVmFsdWUgbXVzdCBiZSBhIHZhbGlkIDgtYnl0ZSBsb25nIG51bWJlclxuICogLSBmOiBmbG9hdDogVmFsdWUgbXVzdCBiZSBhIHZhbGlkIGZsb2F0IG51bWJlclxuICogLSB1OiB1cmkuIFZhbHVlIG11c3QgYmUgYSB2YWxpZCB1bmlmb3JtIHJlc291cmNlIGlkZW50aWZpZXIgc3RyaW5nXG4gKiAtIGNuOiBjb21wb25lbnQgbmFtZS4gVmFsdWUgbXVzdCBiZSBhIHZhbGlkIGNvbXBvbmVudCBuYW1lIHN0cmluZ1xuICogLSBpYTogSW50ZWdlcltdLiBWYWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9mIGNvbW1hLXNlcGFyYXRlZCBpbnRlZ2Vyc1xuICogLSBpYWw6IExpc3Q8SW50ZWdlcj4uIFZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2YgY29tbWEtc2VwYXJhdGVkIGludGVnZXJzXG4gKiAtIGxhOiBMb25nW10uIFZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2YgY29tbWEtc2VwYXJhdGVkIGxvbmcgbnVtYmVyc1xuICogLSBsYWw6IExpc3Q8TG9uZz4uIFZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2YgY29tbWEtc2VwYXJhdGVkIGxvbmcgbnVtYmVyc1xuICogLSBmYTogRmxvYXRbXS4gVmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvZiBjb21tYS1zZXBhcmF0ZWQgZmxvYXQgbnVtYmVyc1xuICogLSBmYWw6IExpc3Q8RmxvYXQ+LiBWYWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9mIGNvbW1hLXNlcGFyYXRlZCBmbG9hdCBudW1iZXJzXG4gKiAtIHNhOiBTdHJpbmdbXS4gVmFsdWUgbXVzdCBiZSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5ncy4gVG8gZW1iZWQgYSBjb21tYSBpbnRvIGEgc3RyaW5nLFxuICogZXNjYXBlIGl0IHVzaW5nIFwiXFwsXCJcbiAqIC0gc2FsOiBMaXN0PFN0cmluZz4uIFZhbHVlIG11c3QgYmUgY29tbWEtc2VwYXJhdGVkIHN0cmluZ3MuIFRvIGVtYmVkIGEgY29tbWEgaW50byBhIHN0cmluZyxcbiAqIGVzY2FwZSBpdCB1c2luZyBcIlxcLFwiXG4gKiBGb3IgZXhhbXBsZTogW1sncycsICd2YXJOYW1lMScsICdNeSBTdHJpbmcxJ10sIFsncycsICd2YXJOYW1lMicsICdNeSBTdHJpbmcyJ10sIFsnaWEnLCAnYXJyTmFtZScsICcxLDIsMyw0J11dXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGZsYWdzIC0gSW50ZW50IHN0YXJ0dXAtc3BlY2lmaWMgZmxhZ3MgYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmcuXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvY29udGVudC9JbnRlbnQuaHRtbFxuICogZm9yIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBmbGFnIHZhbHVlcyAoY29uc3RhbnRzIHN0YXJ0aW5nIHdpdGggRkxBR19BQ1RJVklUWV8pLlxuICogRmxhZyB2YWx1ZXMgY291bGQgYmUgbWVyZ2VkIHVzaW5nIHRoZSBsb2dpY2FsICdvcicgb3BlcmF0aW9uLlxuICogRm9yIGV4YW1wbGUsIDB4MTAyMDAwMDAgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIHR3byBmbGFnczpcbiAqIDB4MTAwMDAwMDAgYEZMQUdfQUNUSVZJVFlfTkVXX1RBU0tgIHwgMHgwMDIwMDAwMCBgRkxBR19BQ1RJVklUWV9SRVNFVF9UQVNLX0lGX05FRURFRGBcbiAqL1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgZ2l2ZW4gYWN0aXZpdHkgaW50ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RhcnRBY3Rpdml0eU9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21tYW5kIG91dHB1dFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgc3RhcnRpbmcgdGhlIGFjdGl2aXR5XG4gKiBvciByZXF1aXJlZCBvcHRpb25zIGFyZSBtaXNzaW5nXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVN0YXJ0QWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTdGFydEFjdGl2aXR5IChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHVzZXIsXG4gICAgd2FpdCxcbiAgICBzdG9wLFxuICAgIHdpbmRvd2luZ01vZGUsXG4gICAgYWN0aXZpdHlUeXBlLFxuICAgIGRpc3BsYXksXG4gIH0gPSBvcHRzO1xuICBjb25zdCBjbWQgPSBbXG4gICAgJ2FtJywgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCBBUElfTEVWRUxfQU5EUk9JRF84KSA/ICdzdGFydCcgOiAnc3RhcnQtYWN0aXZpdHknLFxuICBdO1xuICBpZiAoIV8uaXNOaWwodXNlcikpIHtcbiAgICBjbWQucHVzaCgnLS11c2VyJywgdXNlcik7XG4gIH1cbiAgaWYgKHdhaXQpIHtcbiAgICBjbWQucHVzaCgnLVcnKTtcbiAgfVxuICBpZiAoc3RvcCkge1xuICAgIGNtZC5wdXNoKCctUycpO1xuICB9XG4gIGlmICghXy5pc05pbCh3aW5kb3dpbmdNb2RlKSkge1xuICAgIGNtZC5wdXNoKCctLXdpbmRvd2luZ01vZGUnLCB3aW5kb3dpbmdNb2RlKTtcbiAgfVxuICBpZiAoIV8uaXNOaWwoYWN0aXZpdHlUeXBlKSkge1xuICAgIGNtZC5wdXNoKCctLWFjdGl2aXR5VHlwZScsIGFjdGl2aXR5VHlwZSk7XG4gIH1cbiAgaWYgKCFfLmlzTmlsKGRpc3BsYXkpKSB7XG4gICAgY21kLnB1c2goJy0tZGlzcGxheScsIGRpc3BsYXkpO1xuICB9XG4gIGNtZC5wdXNoKC4uLihwYXJzZUludGVudFNwZWMob3B0cykpKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnNoZWxsKGNtZCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEJyb2FkY2FzdE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ3xudW1iZXJ9IHVzZXIgWydhbGwnXSAtIFRoZSB1c2VyIElEIGZvciB3aGljaCB0aGUgYnJvYWRjYXN0IGlzIHNlbnQuXG4gKiBUaGUgYGN1cnJlbnRgIGFsaWFzIGFzc3VtZXMgdGhlIGN1cnJlbnQgdXNlciBJRC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcmVjZWl2ZXJQZXJtaXNzaW9uIC0gUmVxdWlyZSByZWNlaXZlciB0byBob2xkIHRoZSBnaXZlbiBwZXJtaXNzaW9uLlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gYWxsb3dCYWNrZ3JvdW5kQWN0aXZpdHlTdGFydHMgW2ZhbHNlXSAtIFdoZXRoZXIgdGhlIHJlY2VpdmVyIG1heVxuICogc3RhcnQgYWN0aXZpdGllcyBldmVuIGlmIGluIHRoZSBiYWNrZ3JvdW5kLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBpbnRlbnQgLSBUaGUgbmFtZSBvZiB0aGUgaW50ZW50IHRvIGJyb2FkY2FzdCB0bywgZm9yIGV4YW1wbGVcbiAqIGBjb20uc29tZS5wYWNrYWdlLm5hbWUvLllvdXJTZXJ2aWNlU3ViQ2xhc3NOYW1lYC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gYWN0aW9uIC0gQWN0aW9uIG5hbWVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdXJpIC0gVW5pZmllZCByZXNvdXJjZSBpZGVudGlmaWVyXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG1pbWVUeXBlIC0gTWltZSB0eXBlXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGlkZW50aWZpZXIgLSBPcHRpb25hbCBpZGVudGlmaWVyXG4gKiBAcHJvcGVydHkgez9zdHJpbmd8QXJyYXk8c3RyaW5nPn0gY2F0ZWdvcmllcyAtIE9uZSBvciBtb3JlIGNhdGVnb3J5IG5hbWVzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGNvbXBvbmVudCAtIENvbXBvbmVudCBuYW1lXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHBhY2thZ2UgLSBQYWNrYWdlIG5hbWVcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8QXJyYXk8c3RyaW5nPj59IGV4dHJhcyAtIE9wdGlvbmFsIGludGVudCBhcmd1bWVudHMuXG4gKiBTZWUgYWJvdmUgZm9yIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbi5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZmxhZ3MgLSBJbnRlbnQgc3RhcnR1cC1zcGVjaWZpYyBmbGFncyBhcyBhIGhleGFkZWNpbWFsIHN0cmluZy5cbiAqIFNlZSBhYm92ZSBmb3IgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uLlxuICovXG5cblxuLyoqXG4gKiBTZW5kIGEgYnJvYWRjYXN0IGludGVudC5cbiAqXG4gKiBAcGFyYW0ge0Jyb2FkY2FzdE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21tYW5kIG91dHB1dFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgc3RhcnRpbmcgdGhlIGFjdGl2aXR5XG4gKiBvciByZXF1aXJlZCBvcHRpb25zIGFyZSBtaXNzaW5nXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUJyb2FkY2FzdCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUJyb2FkY2FzdCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB1c2VyLFxuICAgIHJlY2VpdmVyUGVybWlzc2lvbixcbiAgICBhbGxvd0JhY2tncm91bmRBY3Rpdml0eVN0YXJ0cyxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IGNtZCA9IFsnYW0nLCAnYnJvYWRjYXN0J107XG4gIGlmICghXy5pc05pbCh1c2VyKSkge1xuICAgIGNtZC5wdXNoKCctLXVzZXInLCB1c2VyKTtcbiAgfVxuICBpZiAocmVjZWl2ZXJQZXJtaXNzaW9uKSB7XG4gICAgY21kLnB1c2goJy0tcmVjZWl2ZXItcGVybWlzc2lvbicsIHJlY2VpdmVyUGVybWlzc2lvbik7XG4gIH1cbiAgaWYgKGFsbG93QmFja2dyb3VuZEFjdGl2aXR5U3RhcnRzKSB7XG4gICAgY21kLnB1c2goJy0tYWxsb3ctYmFja2dyb3VuZC1hY3Rpdml0eS1zdGFydHMnKTtcbiAgfVxuICBjbWQucHVzaCguLi4ocGFyc2VJbnRlbnRTcGVjKG9wdHMpKSk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5zaGVsbChjbWQpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdGFydFNlcnZpY2VPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd8bnVtYmVyfSB1c2VyIFsnY3VycmVudCddIC0gVGhlIHVzZXIgSUQgZm9yIHdoaWNoIHRoZSBzZXJ2aWNlIGlzIHN0YXJ0ZWQuXG4gKiBUaGUgYGN1cnJlbnRgIHVzZXIgaWQgaXMgdXNlZCBieSBkZWZhdWx0XG4gKiBAcHJvcGVydHkgez9ib29sZWFufSBmb3JlZ3JvdW5kIFtmYWxzZV0gLSBTZXQgaXQgdG8gYHRydWVgIGlmIHlvdXIgc2VydmljZSBtdXN0IGJlXG4gKiBzdGFydGVkIGFzIGZvcmVncm91bmQgc2VydmljZS4gVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiB0aGUgQVBJIGxldmVsIG9mIHRoZVxuICogZGV2aWNlIHVuZGVyIHRlc3QgaXMgYmVsb3cgMjYgKEFuZHJvaWQgOCkuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGludGVudCAtIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGludGVudCB0byBzdGFydCwgZm9yIGV4YW1wbGVcbiAqIGBjb20uc29tZS5wYWNrYWdlLm5hbWUvLllvdXJTZXJ2aWNlU3ViQ2xhc3NOYW1lYC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gYWN0aW9uIC0gQWN0aW9uIG5hbWVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdXJpIC0gVW5pZmllZCByZXNvdXJjZSBpZGVudGlmaWVyXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG1pbWVUeXBlIC0gTWltZSB0eXBlXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGlkZW50aWZpZXIgLSBPcHRpb25hbCBpZGVudGlmaWVyXG4gKiBAcHJvcGVydHkgez9zdHJpbmd8QXJyYXk8c3RyaW5nPn0gY2F0ZWdvcmllcyAtIE9uZSBvciBtb3JlIGNhdGVnb3J5IG5hbWVzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGNvbXBvbmVudCAtIENvbXBvbmVudCBuYW1lXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHBhY2thZ2UgLSBQYWNrYWdlIG5hbWVcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8QXJyYXk8c3RyaW5nPj59IGV4dHJhcyAtIE9wdGlvbmFsIGludGVudCBhcmd1bWVudHMuXG4gKiBTZWUgYWJvdmUgZm9yIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbi5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZmxhZ3MgLSBJbnRlbnQgc3RhcnR1cC1zcGVjaWZpYyBmbGFncyBhcyBhIGhleGFkZWNpbWFsIHN0cmluZy5cbiAqIFNlZSBhYm92ZSBmb3IgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uLlxuICovXG5cbi8qKlxuICogU3RhcnRzIHRoZSBnaXZlbiBzZXJ2aWNlIGludGVudC5cbiAqXG4gKiBAcGFyYW0ge1N0YXJ0U2VydmljZU9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21tYW5kIG91dHB1dFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgc3RhcnRpbmcgdGhlIHNlcnZpY2VcbiAqIG9yIHJlcXVpcmVkIG9wdGlvbnMgYXJlIG1pc3NpbmdcbiAqL1xuY29tbWFuZHMubW9iaWxlU3RhcnRTZXJ2aWNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3RhcnRTZXJ2aWNlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHVzZXIsXG4gICAgZm9yZWdyb3VuZCxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IGNtZCA9IFsnYW0nXTtcbiAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCBBUElfTEVWRUxfQU5EUk9JRF84KSB7XG4gICAgY21kLnB1c2goJ3N0YXJ0c2VydmljZScpO1xuICB9IGVsc2Uge1xuICAgIGNtZC5wdXNoKGZvcmVncm91bmQgPyAnc3RhcnQtZm9yZWdyb3VuZC1zZXJ2aWNlJyA6ICdzdGFydC1zZXJ2aWNlJyk7XG4gIH1cbiAgaWYgKCFfLmlzTmlsKHVzZXIpKSB7XG4gICAgY21kLnB1c2goJy0tdXNlcicsIHVzZXIpO1xuICB9XG4gIGNtZC5wdXNoKC4uLihwYXJzZUludGVudFNwZWMob3B0cykpKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnNoZWxsKGNtZCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0b3BTZXJ2aWNlT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSB1c2VyIFsnY3VycmVudCddIC0gVGhlIHVzZXIgSUQgZm9yIHdoaWNoIHRoZSBzZXJ2aWNlIGlzIHJ1bm5pbmcuXG4gKiBUaGUgYGN1cnJlbnRgIHVzZXIgaWQgaXMgdXNlZCBieSBkZWZhdWx0XG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGludGVudCAtIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGludGVudCB0byBzdG9wLCBmb3IgZXhhbXBsZVxuICogYGNvbS5zb21lLnBhY2thZ2UubmFtZS8uWW91clNlcnZpY2VTdWJDbGFzc05hbWVgLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBhY3Rpb24gLSBBY3Rpb24gbmFtZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB1cmkgLSBVbmlmaWVkIHJlc291cmNlIGlkZW50aWZpZXJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbWltZVR5cGUgLSBNaW1lIHR5cGVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gaWRlbnRpZmllciAtIE9wdGlvbmFsIGlkZW50aWZpZXJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ3xBcnJheTxzdHJpbmc+fSBjYXRlZ29yaWVzIC0gT25lIG9yIG1vcmUgY2F0ZWdvcnkgbmFtZXNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gY29tcG9uZW50IC0gQ29tcG9uZW50IG5hbWVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGFja2FnZSAtIFBhY2thZ2UgbmFtZVxuICogQHByb3BlcnR5IHtBcnJheTxBcnJheTxzdHJpbmc+Pn0gZXh0cmFzIC0gT3B0aW9uYWwgaW50ZW50IGFyZ3VtZW50cy5cbiAqIFNlZSBhYm92ZSBmb3IgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBmbGFncyAtIFNlZSBhYm92ZSBmb3IgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uLlxuICovXG5cbi8qKlxuICogU3RvcHMgdGhlIGdpdmVuIHNlcnZpY2UgaW50ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RvcFNlcnZpY2VPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tbWFuZCBvdXRwdXRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIHN0b3BwaW5nIHRoZSBzZXJ2aWNlXG4gKiBvciByZXF1aXJlZCBvcHRpb25zIGFyZSBtaXNzaW5nXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVN0b3BTZXJ2aWNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3RvcFNlcnZpY2UgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXNlcixcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IGNtZCA9IFtcbiAgICAnYW0nLFxuICAgIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpIDwgQVBJX0xFVkVMX0FORFJPSURfOCkgPyAnc3RvcHNlcnZpY2UnIDogJ3N0b3Atc2VydmljZSdcbiAgXTtcbiAgaWYgKCFfLmlzTmlsKHVzZXIpKSB7XG4gICAgY21kLnB1c2goJy0tdXNlcicsIHVzZXIpO1xuICB9XG4gIGNtZC5wdXNoKC4uLihwYXJzZUludGVudFNwZWMob3B0cykpKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnNoZWxsKGNtZCk7XG59O1xuXG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsSUFBSTtBQUM5QixNQUFNQyxxQkFBcUIsR0FBRyxDQUM1QixHQUFHLEVBQUVELGlCQUFpQixFQUFFLEdBQUcs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent.js","names":["NO_VALUE_ARG_TYPE","SUPPORTED_EXTRA_TYPES","API_LEVEL_ANDROID_8","commands","parseIntentSpec","opts","intent","action","uri","mimeType","identifier","categories","component","extras","flags","resultArgs","push","_","isNil","isArray","flatMap","map","cName","package","errors","InvalidArgumentError","item","type","key","value","includes","isEmpty","isString","trim","JSON","stringify","isUndefined","mobileStartActivity","user","wait","stop","windowingMode","activityType","display","cmd","adb","getApiLevel","shell","mobileBroadcast","receiverPermission","allowBackgroundActivityStarts","mobileStartService","foreground","mobileStopService"],"sources":["../../../lib/commands/intent.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors } from 'appium/driver';\n\nconst NO_VALUE_ARG_TYPE = 'sn';\nconst SUPPORTED_EXTRA_TYPES = [\n 's', NO_VALUE_ARG_TYPE, 'z', 'i', 'l', 'f', 'u', 'cn',\n 'ia', 'ial', 'la', 'lal', 'fa', 'fal', 'sa', 'sal',\n];\nconst API_LEVEL_ANDROID_8 = 26;\n\nconst commands = {};\n\nfunction parseIntentSpec (opts = {}) {\n const {\n intent,\n action,\n uri,\n mimeType,\n identifier,\n categories,\n component,\n extras,\n flags,\n } = opts;\n const resultArgs = [];\n if (intent) {\n resultArgs.push(intent);\n }\n if (action) {\n resultArgs.push('-a', action);\n }\n if (uri) {\n resultArgs.push('-d', uri);\n }\n if (mimeType) {\n resultArgs.push('-t', mimeType);\n }\n if (!_.isNil(identifier)) {\n resultArgs.push('-i', identifier);\n }\n if (categories) {\n if (_.isArray(categories)) {\n resultArgs.push(...(_.flatMap(categories.map((cName) => ['-c', cName]))));\n } else {\n resultArgs.push('-c', categories);\n }\n }\n if (component) {\n resultArgs.push('-n', component);\n }\n if (opts.package) {\n resultArgs.push('-p', opts.package);\n }\n if (extras) {\n if (!_.isArray(extras)) {\n throw new errors.InvalidArgumentError(`'extras' must be an array`);\n }\n for (const item of extras) {\n if (!_.isArray(item)) {\n throw new errors.InvalidArgumentError(`Extra argument '${item}' must be an array`);\n }\n const [type, key, value] = item;\n if (!_.includes(SUPPORTED_EXTRA_TYPES, type)) {\n throw new errors.InvalidArgumentError(\n `Extra argument type '${type}' is not known. ` +\n `Supported intent argument types are: ${SUPPORTED_EXTRA_TYPES}`\n );\n }\n if (_.isEmpty(key) || (_.isString(key) && _.trim(key) === '')) {\n throw new errors.InvalidArgumentError(\n `Extra argument's key in '${JSON.stringify(item)}' must be a valid string identifier`\n );\n }\n if (type === NO_VALUE_ARG_TYPE) {\n resultArgs.push(`--e${type}`, key);\n } else if (_.isUndefined(value)) {\n throw new errors.InvalidArgumentError(\n `Intent argument type '${type}' in '${JSON.stringify(item)}' requires a ` +\n `valid value to be provided`\n );\n } else {\n resultArgs.push(`--e${type}`, key, value);\n }\n }\n }\n if (flags) {\n resultArgs.push('-f', flags);\n }\n return resultArgs;\n}\n\n/**\n * @typedef {Object} StartActivityOptions\n * @property {?string|number} user ['current'] - The user ID for which the service is started.\n * The `current` user id is used by default\n * @property {?boolean} wait [false] - Set it to `true` if you want to block the method call\n * until the activity manager's process returns the control to the system.\n * @property {?boolean} stop [false] - Set it to `true` to force stop the target\n * app before starting the activity\n * @property {?number|string} windowingMode - The windowing mode to launch the activity into.\n * Check https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/app/WindowConfiguration.java\n * for more details on possible windowing modes (constants starting with `WINDOWING_MODE_`).\n * @property {?number|string} activityType - The activity type to launch the activity as.\n * Check https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/app/WindowConfiguration.java\n * for more details on possible activity types (constants starting with `ACTIVITY_TYPE_`).\n * @property {?number|string} display - The display identifier to launch the activity into.\n * @property {?string} intent - The name of the activity intent to start, for example\n * `com.some.package.name/.YourServiceSubClassName`\n * @property {?string} action - Action name\n * @property {?string} package - Package name\n * @property {?string} uri - Unified resource identifier\n * @property {?string} mimeType - Mime type\n * @property {?string} identifier - Optional identifier\n * @property {?string|Array<string>} categories - One or more category names\n * @property {?string} component - Component name\n * @property {Array<string|Array<string>>} extras - Optional intent arguments. Must be represented\n * as array of arrays, where each subarray item contains two or three string items:\n * value type, key name and the value itself.\n * Supported value types are:\n * - s: string. Value must be a valid string\n * - sn: null. Value is ignored for this type\n * - z: boolean. Value must be either `true` or `false`\n * - i: integer. Value must be a valid 4-byte integer number\n * - l: long. Value must be a valid 8-byte long number\n * - f: float: Value must be a valid float number\n * - u: uri. Value must be a valid uniform resource identifier string\n * - cn: component name. Value must be a valid component name string\n * - ia: Integer[]. Value must be a string of comma-separated integers\n * - ial: List<Integer>. Value must be a string of comma-separated integers\n * - la: Long[]. Value must be a string of comma-separated long numbers\n * - lal: List<Long>. Value must be a string of comma-separated long numbers\n * - fa: Float[]. Value must be a string of comma-separated float numbers\n * - fal: List<Float>. Value must be a string of comma-separated float numbers\n * - sa: String[]. Value must be comma-separated strings. To embed a comma into a string,\n * escape it using \"\\,\"\n * - sal: List<String>. Value must be comma-separated strings. To embed a comma into a string,\n * escape it using \"\\,\"\n * For example: [['s', 'varName1', 'My String1'], ['s', 'varName2', 'My String2'], ['ia', 'arrName', '1,2,3,4']]\n * @property {?string} flags - Intent startup-specific flags as a hexadecimal string.\n * See https://developer.android.com/reference/android/content/Intent.html\n * for the list of available flag values (constants starting with FLAG_ACTIVITY_).\n * Flag values could be merged using the logical 'or' operation.\n * For example, 0x10200000 is the combination of two flags:\n * 0x10000000 `FLAG_ACTIVITY_NEW_TASK` | 0x00200000 `FLAG_ACTIVITY_RESET_TASK_IF_NEEDED`\n */\n\n/**\n * Starts the given activity intent.\n *\n * @param {StartActivityOptions} opts\n * @returns {string} The command output\n * @throws {Error} If there was a failure while starting the activity\n * or required options are missing\n */\ncommands.mobileStartActivity = async function mobileStartActivity (opts = {}) {\n const {\n user,\n wait,\n stop,\n windowingMode,\n activityType,\n display,\n } = opts;\n const cmd = [\n 'am', (await this.adb.getApiLevel() < API_LEVEL_ANDROID_8) ? 'start' : 'start-activity',\n ];\n if (!_.isNil(user)) {\n cmd.push('--user', user);\n }\n if (wait) {\n cmd.push('-W');\n }\n if (stop) {\n cmd.push('-S');\n }\n if (!_.isNil(windowingMode)) {\n cmd.push('--windowingMode', windowingMode);\n }\n if (!_.isNil(activityType)) {\n cmd.push('--activityType', activityType);\n }\n if (!_.isNil(display)) {\n cmd.push('--display', display);\n }\n cmd.push(...(parseIntentSpec(opts)));\n return await this.adb.shell(cmd);\n};\n\n/**\n * @typedef {Object} BroadcastOptions\n * @property {?string|number} user ['all'] - The user ID for which the broadcast is sent.\n * The `current` alias assumes the current user ID.\n * @property {?string} receiverPermission - Require receiver to hold the given permission.\n * @property {?boolean} allowBackgroundActivityStarts [false] - Whether the receiver may\n * start activities even if in the background.\n * @property {?string} intent - The name of the intent to broadcast to, for example\n * `com.some.package.name/.YourServiceSubClassName`.\n * @property {?string} action - Action name\n * @property {?string} uri - Unified resource identifier\n * @property {?string} mimeType - Mime type\n * @property {?string} identifier - Optional identifier\n * @property {?string|Array<string>} categories - One or more category names\n * @property {?string} component - Component name\n * @property {?string} package - Package name\n * @property {Array<Array<string>>} extras - Optional intent arguments.\n * See above for the detailed description.\n * @property {?string} flags - Intent startup-specific flags as a hexadecimal string.\n * See above for the detailed description.\n */\n\n\n/**\n * Send a broadcast intent.\n *\n * @param {BroadcastOptions} opts\n * @returns {string} The command output\n * @throws {Error} If there was a failure while starting the activity\n * or required options are missing\n */\ncommands.mobileBroadcast = async function mobileBroadcast (opts = {}) {\n const {\n user,\n receiverPermission,\n allowBackgroundActivityStarts,\n } = opts;\n const cmd = ['am', 'broadcast'];\n if (!_.isNil(user)) {\n cmd.push('--user', user);\n }\n if (receiverPermission) {\n cmd.push('--receiver-permission', receiverPermission);\n }\n if (allowBackgroundActivityStarts) {\n cmd.push('--allow-background-activity-starts');\n }\n cmd.push(...(parseIntentSpec(opts)));\n return await this.adb.shell(cmd);\n};\n\n/**\n * @typedef {Object} StartServiceOptions\n * @property {?string|number} user ['current'] - The user ID for which the service is started.\n * The `current` user id is used by default\n * @property {?boolean} foreground [false] - Set it to `true` if your service must be\n * started as foreground service. This option is ignored if the API level of the\n * device under test is below 26 (Android 8).\n * @property {?string} intent - The name of the service intent to start, for example\n * `com.some.package.name/.YourServiceSubClassName`.\n * @property {?string} action - Action name\n * @property {?string} uri - Unified resource identifier\n * @property {?string} mimeType - Mime type\n * @property {?string} identifier - Optional identifier\n * @property {?string|Array<string>} categories - One or more category names\n * @property {?string} component - Component name\n * @property {?string} package - Package name\n * @property {Array<Array<string>>} extras - Optional intent arguments.\n * See above for the detailed description.\n * @property {?string} flags - Intent startup-specific flags as a hexadecimal string.\n * See above for the detailed description.\n */\n\n/**\n * Starts the given service intent.\n *\n * @param {StartServiceOptions} opts\n * @returns {string} The command output\n * @throws {Error} If there was a failure while starting the service\n * or required options are missing\n */\ncommands.mobileStartService = async function mobileStartService (opts = {}) {\n const {\n user,\n foreground,\n } = opts;\n const cmd = ['am'];\n if (await this.adb.getApiLevel() < API_LEVEL_ANDROID_8) {\n cmd.push('startservice');\n } else {\n cmd.push(foreground ? 'start-foreground-service' : 'start-service');\n }\n if (!_.isNil(user)) {\n cmd.push('--user', user);\n }\n cmd.push(...(parseIntentSpec(opts)));\n return await this.adb.shell(cmd);\n};\n\n/**\n * @typedef {Object} StopServiceOptions\n * @property {string|number} user ['current'] - The user ID for which the service is running.\n * The `current` user id is used by default\n * @property {?string} intent - The name of the service intent to stop, for example\n * `com.some.package.name/.YourServiceSubClassName`.\n * @property {?string} action - Action name\n * @property {?string} uri - Unified resource identifier\n * @property {?string} mimeType - Mime type\n * @property {?string} identifier - Optional identifier\n * @property {?string|Array<string>} categories - One or more category names\n * @property {?string} component - Component name\n * @property {?string} package - Package name\n * @property {Array<Array<string>>} extras - Optional intent arguments.\n * See above for the detailed description.\n * @property {?string} flags - See above for the detailed description.\n */\n\n/**\n * Stops the given service intent.\n *\n * @param {StopServiceOptions} opts\n * @returns {string} The command output\n * @throws {Error} If there was a failure while stopping the service\n * or required options are missing\n */\ncommands.mobileStopService = async function mobileStopService (opts = {}) {\n const {\n user,\n } = opts;\n const cmd = [\n 'am',\n (await this.adb.getApiLevel() < API_LEVEL_ANDROID_8) ? 'stopservice' : 'stop-service'\n ];\n if (!_.isNil(user)) {\n cmd.push('--user', user);\n }\n cmd.push(...(parseIntentSpec(opts)));\n return await this.adb.shell(cmd);\n};\n\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;;AAAA;AACA;AAEA,MAAMA,iBAAiB,GAAG,IAAI;AAC9B,MAAMC,qBAAqB,GAAG,CAC5B,GAAG,EAAED,iBAAiB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EACrD,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CACnD;AACD,MAAME,mBAAmB,GAAG,EAAE;AAE9B,MAAMC,QAAQ,GAAG,CAAC,CAAC;AAAC;AAEpB,SAASC,eAAe,CAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EACnC,MAAM;IACJC,MAAM;IACNC,MAAM;IACNC,GAAG;IACHC,QAAQ;IACRC,UAAU;IACVC,UAAU;IACVC,SAAS;IACTC,MAAM;IACNC;EACF,CAAC,GAAGT,IAAI;EACR,MAAMU,UAAU,GAAG,EAAE;EACrB,IAAIT,MAAM,EAAE;IACVS,UAAU,CAACC,IAAI,CAACV,MAAM,CAAC;EACzB;EACA,IAAIC,MAAM,EAAE;IACVQ,UAAU,CAACC,IAAI,CAAC,IAAI,EAAET,MAAM,CAAC;EAC/B;EACA,IAAIC,GAAG,EAAE;IACPO,UAAU,CAACC,IAAI,CAAC,IAAI,EAAER,GAAG,CAAC;EAC5B;EACA,IAAIC,QAAQ,EAAE;IACZM,UAAU,CAACC,IAAI,CAAC,IAAI,EAAEP,QAAQ,CAAC;EACjC;EACA,IAAI,CAACQ,eAAC,CAACC,KAAK,CAACR,UAAU,CAAC,EAAE;IACxBK,UAAU,CAACC,IAAI,CAAC,IAAI,EAAEN,UAAU,CAAC;EACnC;EACA,IAAIC,UAAU,EAAE;IACd,IAAIM,eAAC,CAACE,OAAO,CAACR,UAAU,CAAC,EAAE;MACzBI,UAAU,CAACC,IAAI,CAAC,GAAIC,eAAC,CAACG,OAAO,CAACT,UAAU,CAACU,GAAG,CAAEC,KAAK,IAAK,CAAC,IAAI,EAAEA,KAAK,CAAC,CAAC,CAAE,CAAC;IAC3E,CAAC,MAAM;MACLP,UAAU,CAACC,IAAI,CAAC,IAAI,EAAEL,UAAU,CAAC;IACnC;EACF;EACA,IAAIC,SAAS,EAAE;IACbG,UAAU,CAACC,IAAI,CAAC,IAAI,EAAEJ,SAAS,CAAC;EAClC;EACA,IAAIP,IAAI,CAACkB,OAAO,EAAE;IAChBR,UAAU,CAACC,IAAI,CAAC,IAAI,EAAEX,IAAI,CAACkB,OAAO,CAAC;EACrC;EACA,IAAIV,MAAM,EAAE;IACV,IAAI,CAACI,eAAC,CAACE,OAAO,CAACN,MAAM,CAAC,EAAE;MACtB,MAAM,IAAIW,cAAM,CAACC,oBAAoB,CAAE,2BAA0B,CAAC;IACpE;IACA,KAAK,MAAMC,IAAI,IAAIb,MAAM,EAAE;MACzB,IAAI,CAACI,eAAC,CAACE,OAAO,CAACO,IAAI,CAAC,EAAE;QACpB,MAAM,IAAIF,cAAM,CAACC,oBAAoB,CAAE,mBAAkBC,IAAK,oBAAmB,CAAC;MACpF;MACA,MAAM,CAACC,IAAI,EAAEC,GAAG,EAAEC,KAAK,CAAC,GAAGH,IAAI;MAC/B,IAAI,CAACT,eAAC,CAACa,QAAQ,CAAC7B,qBAAqB,EAAE0B,IAAI,CAAC,EAAE;QAC5C,MAAM,IAAIH,cAAM,CAACC,oBAAoB,CAClC,wBAAuBE,IAAK,kBAAiB,GAC7C,wCAAuC1B,qBAAsB,EAAC,CAChE;MACH;MACA,IAAIgB,eAAC,CAACc,OAAO,CAACH,GAAG,CAAC,IAAKX,eAAC,CAACe,QAAQ,CAACJ,GAAG,CAAC,IAAIX,eAAC,CAACgB,IAAI,CAACL,GAAG,CAAC,KAAK,EAAG,EAAE;QAC7D,MAAM,IAAIJ,cAAM,CAACC,oBAAoB,CAClC,4BAA2BS,IAAI,CAACC,SAAS,CAACT,IAAI,CAAE,qCAAoC,CACtF;MACH;MACA,IAAIC,IAAI,KAAK3B,iBAAiB,EAAE;QAC9Be,UAAU,CAACC,IAAI,CAAE,MAAKW,IAAK,EAAC,EAAEC,GAAG,CAAC;MACpC,CAAC,MAAM,IAAIX,eAAC,CAACmB,WAAW,CAACP,KAAK,CAAC,EAAE;QAC/B,MAAM,IAAIL,cAAM,CAACC,oBAAoB,CAClC,yBAAwBE,IAAK,SAAQO,IAAI,CAACC,SAAS,CAACT,IAAI,CAAE,eAAc,GACxE,4BAA2B,CAC7B;MACH,CAAC,MAAM;QACLX,UAAU,CAACC,IAAI,CAAE,MAAKW,IAAK,EAAC,EAAEC,GAAG,EAAEC,KAAK,CAAC;MAC3C;IACF;EACF;EACA,IAAIf,KAAK,EAAE;IACTC,UAAU,CAACC,IAAI,CAAC,IAAI,EAAEF,KAAK,CAAC;EAC9B;EACA,OAAOC,UAAU;AACnB;;AAiEAZ,QAAQ,CAACkC,mBAAmB,GAAG,eAAeA,mBAAmB,CAAEhC,IAAI,GAAG,CAAC,CAAC,EAAE;EAC5E,MAAM;IACJiC,IAAI;IACJC,IAAI;IACJC,IAAI;IACJC,aAAa;IACbC,YAAY;IACZC;EACF,CAAC,GAAGtC,IAAI;EACR,MAAMuC,GAAG,GAAG,CACV,IAAI,EAAG,OAAM,IAAI,CAACC,GAAG,CAACC,WAAW,EAAE,IAAG5C,mBAAmB,GAAI,OAAO,GAAG,gBAAgB,CACxF;EACD,IAAI,CAACe,eAAC,CAACC,KAAK,CAACoB,IAAI,CAAC,EAAE;IAClBM,GAAG,CAAC5B,IAAI,CAAC,QAAQ,EAAEsB,IAAI,CAAC;EAC1B;EACA,IAAIC,IAAI,EAAE;IACRK,GAAG,CAAC5B,IAAI,CAAC,IAAI,CAAC;EAChB;EACA,IAAIwB,IAAI,EAAE;IACRI,GAAG,CAAC5B,IAAI,CAAC,IAAI,CAAC;EAChB;EACA,IAAI,CAACC,eAAC,CAACC,KAAK,CAACuB,aAAa,CAAC,EAAE;IAC3BG,GAAG,CAAC5B,IAAI,CAAC,iBAAiB,EAAEyB,aAAa,CAAC;EAC5C;EACA,IAAI,CAACxB,eAAC,CAACC,KAAK,CAACwB,YAAY,CAAC,EAAE;IAC1BE,GAAG,CAAC5B,IAAI,CAAC,gBAAgB,EAAE0B,YAAY,CAAC;EAC1C;EACA,IAAI,CAACzB,eAAC,CAACC,KAAK,CAACyB,OAAO,CAAC,EAAE;IACrBC,GAAG,CAAC5B,IAAI,CAAC,WAAW,EAAE2B,OAAO,CAAC;EAChC;EACAC,GAAG,CAAC5B,IAAI,CAAC,GAAIZ,eAAe,CAACC,IAAI,CAAE,CAAC;EACpC,OAAO,MAAM,IAAI,CAACwC,GAAG,CAACE,KAAK,CAACH,GAAG,CAAC;AAClC,CAAC;;AAiCDzC,QAAQ,CAAC6C,eAAe,GAAG,eAAeA,eAAe,CAAE3C,IAAI,GAAG,CAAC,CAAC,EAAE;EACpE,MAAM;IACJiC,IAAI;IACJW,kBAAkB;IAClBC;EACF,CAAC,GAAG7C,IAAI;EACR,MAAMuC,GAAG,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC;EAC/B,IAAI,CAAC3B,eAAC,CAACC,KAAK,CAACoB,IAAI,CAAC,EAAE;IAClBM,GAAG,CAAC5B,IAAI,CAAC,QAAQ,EAAEsB,IAAI,CAAC;EAC1B;EACA,IAAIW,kBAAkB,EAAE;IACtBL,GAAG,CAAC5B,IAAI,CAAC,uBAAuB,EAAEiC,kBAAkB,CAAC;EACvD;EACA,IAAIC,6BAA6B,EAAE;IACjCN,GAAG,CAAC5B,IAAI,CAAC,oCAAoC,CAAC;EAChD;EACA4B,GAAG,CAAC5B,IAAI,CAAC,GAAIZ,eAAe,CAACC,IAAI,CAAE,CAAC;EACpC,OAAO,MAAM,IAAI,CAACwC,GAAG,CAACE,KAAK,CAACH,GAAG,CAAC;AAClC,CAAC;;AAgCDzC,QAAQ,CAACgD,kBAAkB,GAAG,eAAeA,kBAAkB,CAAE9C,IAAI,GAAG,CAAC,CAAC,EAAE;EAC1E,MAAM;IACJiC,IAAI;IACJc;EACF,CAAC,GAAG/C,IAAI;EACR,MAAMuC,GAAG,GAAG,CAAC,IAAI,CAAC;EAClB,IAAI,OAAM,IAAI,CAACC,GAAG,CAACC,WAAW,EAAE,IAAG5C,mBAAmB,EAAE;IACtD0C,GAAG,CAAC5B,IAAI,CAAC,cAAc,CAAC;EAC1B,CAAC,MAAM;IACL4B,GAAG,CAAC5B,IAAI,CAACoC,UAAU,GAAG,0BAA0B,GAAG,eAAe,CAAC;EACrE;EACA,IAAI,CAACnC,eAAC,CAACC,KAAK,CAACoB,IAAI,CAAC,EAAE;IAClBM,GAAG,CAAC5B,IAAI,CAAC,QAAQ,EAAEsB,IAAI,CAAC;EAC1B;EACAM,GAAG,CAAC5B,IAAI,CAAC,GAAIZ,eAAe,CAACC,IAAI,CAAE,CAAC;EACpC,OAAO,MAAM,IAAI,CAACwC,GAAG,CAACE,KAAK,CAACH,GAAG,CAAC;AAClC,CAAC;;AA4BDzC,QAAQ,CAACkD,iBAAiB,GAAG,eAAeA,iBAAiB,CAAEhD,IAAI,GAAG,CAAC,CAAC,EAAE;EACxE,MAAM;IACJiC;EACF,CAAC,GAAGjC,IAAI;EACR,MAAMuC,GAAG,GAAG,CACV,IAAI,EACH,OAAM,IAAI,CAACC,GAAG,CAACC,WAAW,EAAE,IAAG5C,mBAAmB,GAAI,aAAa,GAAG,cAAc,CACtF;EACD,IAAI,CAACe,eAAC,CAACC,KAAK,CAACoB,IAAI,CAAC,EAAE;IAClBM,GAAG,CAAC5B,IAAI,CAAC,QAAQ,EAAEsB,IAAI,CAAC;EAC1B;EACAM,GAAG,CAAC5B,IAAI,CAAC,GAAIZ,eAAe,CAACC,IAAI,CAAE,CAAC;EACpC,OAAO,MAAM,IAAI,CAACwC,GAAG,CAACE,KAAK,CAACH,GAAG,CAAC;AAClC,CAAC;AAAC,eAIazC,QAAQ;AAAA"}
|
|
1
|
+
{"version":3,"file":"intent.js","names":["NO_VALUE_ARG_TYPE","SUPPORTED_EXTRA_TYPES","API_LEVEL_ANDROID_8","commands","parseIntentSpec","opts","intent","action","uri","mimeType","identifier","categories","component","extras","flags","resultArgs","push","_","isNil","isArray","flatMap","map","cName","package","errors","InvalidArgumentError","item","type","key","value","includes","isEmpty","isString","trim","JSON","stringify","isUndefined","mobileStartActivity","user","wait","stop","windowingMode","activityType","display","cmd","adb","getApiLevel","shell","mobileBroadcast","receiverPermission","allowBackgroundActivityStarts","mobileStartService","foreground","mobileStopService"],"sources":["../../../lib/commands/intent.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors } from 'appium/driver';\n\nconst NO_VALUE_ARG_TYPE = 'sn';\nconst SUPPORTED_EXTRA_TYPES = [\n 's', NO_VALUE_ARG_TYPE, 'z', 'i', 'l', 'f', 'u', 'cn',\n 'ia', 'ial', 'la', 'lal', 'fa', 'fal', 'sa', 'sal',\n];\nconst API_LEVEL_ANDROID_8 = 26;\n\nconst commands = {};\n\nfunction parseIntentSpec (opts = {}) {\n const {\n intent,\n action,\n uri,\n mimeType,\n identifier,\n categories,\n component,\n extras,\n flags,\n } = opts;\n const resultArgs = [];\n if (intent) {\n resultArgs.push(intent);\n }\n if (action) {\n resultArgs.push('-a', action);\n }\n if (uri) {\n resultArgs.push('-d', uri);\n }\n if (mimeType) {\n resultArgs.push('-t', mimeType);\n }\n if (!_.isNil(identifier)) {\n resultArgs.push('-i', identifier);\n }\n if (categories) {\n if (_.isArray(categories)) {\n resultArgs.push(...(_.flatMap(categories.map((cName) => ['-c', cName]))));\n } else {\n resultArgs.push('-c', categories);\n }\n }\n if (component) {\n resultArgs.push('-n', component);\n }\n if (opts.package) {\n resultArgs.push('-p', opts.package);\n }\n if (extras) {\n if (!_.isArray(extras)) {\n throw new errors.InvalidArgumentError(`'extras' must be an array`);\n }\n for (const item of extras) {\n if (!_.isArray(item)) {\n throw new errors.InvalidArgumentError(`Extra argument '${item}' must be an array`);\n }\n const [type, key, value] = item;\n if (!_.includes(SUPPORTED_EXTRA_TYPES, type)) {\n throw new errors.InvalidArgumentError(\n `Extra argument type '${type}' is not known. ` +\n `Supported intent argument types are: ${SUPPORTED_EXTRA_TYPES}`\n );\n }\n if (_.isEmpty(key) || (_.isString(key) && _.trim(key) === '')) {\n throw new errors.InvalidArgumentError(\n `Extra argument's key in '${JSON.stringify(item)}' must be a valid string identifier`\n );\n }\n if (type === NO_VALUE_ARG_TYPE) {\n resultArgs.push(`--e${type}`, key);\n } else if (_.isUndefined(value)) {\n throw new errors.InvalidArgumentError(\n `Intent argument type '${type}' in '${JSON.stringify(item)}' requires a ` +\n `valid value to be provided`\n );\n } else {\n resultArgs.push(`--e${type}`, key, value);\n }\n }\n }\n if (flags) {\n resultArgs.push('-f', flags);\n }\n return resultArgs;\n}\n\n/**\n * @typedef {Object} StartActivityOptions\n * @property {?string|number} user ['current'] - The user ID for which the service is started.\n * The `current` user id is used by default\n * @property {?boolean} wait [false] - Set it to `true` if you want to block the method call\n * until the activity manager's process returns the control to the system.\n * @property {?boolean} stop [false] - Set it to `true` to force stop the target\n * app before starting the activity\n * @property {?number|string} windowingMode - The windowing mode to launch the activity into.\n * Check https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/app/WindowConfiguration.java\n * for more details on possible windowing modes (constants starting with `WINDOWING_MODE_`).\n * @property {?number|string} activityType - The activity type to launch the activity as.\n * Check https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/app/WindowConfiguration.java\n * for more details on possible activity types (constants starting with `ACTIVITY_TYPE_`).\n * @property {?number|string} display - The display identifier to launch the activity into.\n * @property {?string} intent - The name of the activity intent to start, for example\n * `com.some.package.name/.YourServiceSubClassName`\n * @property {?string} action - Action name\n * @property {?string} package - Package name\n * @property {?string} uri - Unified resource identifier\n * @property {?string} mimeType - Mime type\n * @property {?string} identifier - Optional identifier\n * @property {?string|Array<string>} categories - One or more category names\n * @property {?string} component - Component name\n * @property {Array<string|Array<string>>} extras - Optional intent arguments. Must be represented\n * as array of arrays, where each subarray item contains two or three string items:\n * value type, key name and the value itself.\n * Supported value types are:\n * - s: string. Value must be a valid string\n * - sn: null. Value is ignored for this type\n * - z: boolean. Value must be either `true` or `false`\n * - i: integer. Value must be a valid 4-byte integer number\n * - l: long. Value must be a valid 8-byte long number\n * - f: float: Value must be a valid float number\n * - u: uri. Value must be a valid uniform resource identifier string\n * - cn: component name. Value must be a valid component name string\n * - ia: Integer[]. Value must be a string of comma-separated integers\n * - ial: List<Integer>. Value must be a string of comma-separated integers\n * - la: Long[]. Value must be a string of comma-separated long numbers\n * - lal: List<Long>. Value must be a string of comma-separated long numbers\n * - fa: Float[]. Value must be a string of comma-separated float numbers\n * - fal: List<Float>. Value must be a string of comma-separated float numbers\n * - sa: String[]. Value must be comma-separated strings. To embed a comma into a string,\n * escape it using \"\\,\"\n * - sal: List<String>. Value must be comma-separated strings. To embed a comma into a string,\n * escape it using \"\\,\"\n * For example: [['s', 'varName1', 'My String1'], ['s', 'varName2', 'My String2'], ['ia', 'arrName', '1,2,3,4']]\n * @property {?string} flags - Intent startup-specific flags as a hexadecimal string.\n * See https://developer.android.com/reference/android/content/Intent.html\n * for the list of available flag values (constants starting with FLAG_ACTIVITY_).\n * Flag values could be merged using the logical 'or' operation.\n * For example, 0x10200000 is the combination of two flags:\n * 0x10000000 `FLAG_ACTIVITY_NEW_TASK` | 0x00200000 `FLAG_ACTIVITY_RESET_TASK_IF_NEEDED`\n */\n\n/**\n * Starts the given activity intent.\n *\n * @param {StartActivityOptions} opts\n * @returns {string} The command output\n * @throws {Error} If there was a failure while starting the activity\n * or required options are missing\n */\ncommands.mobileStartActivity = async function mobileStartActivity (opts = {}) {\n const {\n user,\n wait,\n stop,\n windowingMode,\n activityType,\n display,\n } = opts;\n const cmd = [\n 'am', (await this.adb.getApiLevel() < API_LEVEL_ANDROID_8) ? 'start' : 'start-activity',\n ];\n if (!_.isNil(user)) {\n cmd.push('--user', user);\n }\n if (wait) {\n cmd.push('-W');\n }\n if (stop) {\n cmd.push('-S');\n }\n if (!_.isNil(windowingMode)) {\n cmd.push('--windowingMode', windowingMode);\n }\n if (!_.isNil(activityType)) {\n cmd.push('--activityType', activityType);\n }\n if (!_.isNil(display)) {\n cmd.push('--display', display);\n }\n cmd.push(...(parseIntentSpec(opts)));\n return await this.adb.shell(cmd);\n};\n\n/**\n * @typedef {Object} BroadcastOptions\n * @property {?string|number} user ['all'] - The user ID for which the broadcast is sent.\n * The `current` alias assumes the current user ID.\n * @property {?string} receiverPermission - Require receiver to hold the given permission.\n * @property {?boolean} allowBackgroundActivityStarts [false] - Whether the receiver may\n * start activities even if in the background.\n * @property {?string} intent - The name of the intent to broadcast to, for example\n * `com.some.package.name/.YourServiceSubClassName`.\n * @property {?string} action - Action name\n * @property {?string} uri - Unified resource identifier\n * @property {?string} mimeType - Mime type\n * @property {?string} identifier - Optional identifier\n * @property {?string|Array<string>} categories - One or more category names\n * @property {?string} component - Component name\n * @property {?string} package - Package name\n * @property {Array<Array<string>>} extras - Optional intent arguments.\n * See above for the detailed description.\n * @property {?string} flags - Intent startup-specific flags as a hexadecimal string.\n * See above for the detailed description.\n */\n\n\n/**\n * Send a broadcast intent.\n *\n * @param {BroadcastOptions} opts\n * @returns {string} The command output\n * @throws {Error} If there was a failure while starting the activity\n * or required options are missing\n */\ncommands.mobileBroadcast = async function mobileBroadcast (opts = {}) {\n const {\n user,\n receiverPermission,\n allowBackgroundActivityStarts,\n } = opts;\n const cmd = ['am', 'broadcast'];\n if (!_.isNil(user)) {\n cmd.push('--user', user);\n }\n if (receiverPermission) {\n cmd.push('--receiver-permission', receiverPermission);\n }\n if (allowBackgroundActivityStarts) {\n cmd.push('--allow-background-activity-starts');\n }\n cmd.push(...(parseIntentSpec(opts)));\n return await this.adb.shell(cmd);\n};\n\n/**\n * @typedef {Object} StartServiceOptions\n * @property {?string|number} user ['current'] - The user ID for which the service is started.\n * The `current` user id is used by default\n * @property {?boolean} foreground [false] - Set it to `true` if your service must be\n * started as foreground service. This option is ignored if the API level of the\n * device under test is below 26 (Android 8).\n * @property {?string} intent - The name of the service intent to start, for example\n * `com.some.package.name/.YourServiceSubClassName`.\n * @property {?string} action - Action name\n * @property {?string} uri - Unified resource identifier\n * @property {?string} mimeType - Mime type\n * @property {?string} identifier - Optional identifier\n * @property {?string|Array<string>} categories - One or more category names\n * @property {?string} component - Component name\n * @property {?string} package - Package name\n * @property {Array<Array<string>>} extras - Optional intent arguments.\n * See above for the detailed description.\n * @property {?string} flags - Intent startup-specific flags as a hexadecimal string.\n * See above for the detailed description.\n */\n\n/**\n * Starts the given service intent.\n *\n * @param {StartServiceOptions} opts\n * @returns {string} The command output\n * @throws {Error} If there was a failure while starting the service\n * or required options are missing\n */\ncommands.mobileStartService = async function mobileStartService (opts = {}) {\n const {\n user,\n foreground,\n } = opts;\n const cmd = ['am'];\n if (await this.adb.getApiLevel() < API_LEVEL_ANDROID_8) {\n cmd.push('startservice');\n } else {\n cmd.push(foreground ? 'start-foreground-service' : 'start-service');\n }\n if (!_.isNil(user)) {\n cmd.push('--user', user);\n }\n cmd.push(...(parseIntentSpec(opts)));\n return await this.adb.shell(cmd);\n};\n\n/**\n * @typedef {Object} StopServiceOptions\n * @property {string|number} user ['current'] - The user ID for which the service is running.\n * The `current` user id is used by default\n * @property {?string} intent - The name of the service intent to stop, for example\n * `com.some.package.name/.YourServiceSubClassName`.\n * @property {?string} action - Action name\n * @property {?string} uri - Unified resource identifier\n * @property {?string} mimeType - Mime type\n * @property {?string} identifier - Optional identifier\n * @property {?string|Array<string>} categories - One or more category names\n * @property {?string} component - Component name\n * @property {?string} package - Package name\n * @property {Array<Array<string>>} extras - Optional intent arguments.\n * See above for the detailed description.\n * @property {?string} flags - See above for the detailed description.\n */\n\n/**\n * Stops the given service intent.\n *\n * @param {StopServiceOptions} opts\n * @returns {string} The command output\n * @throws {Error} If there was a failure while stopping the service\n * or required options are missing\n */\ncommands.mobileStopService = async function mobileStopService (opts = {}) {\n const {\n user,\n } = opts;\n const cmd = [\n 'am',\n (await this.adb.getApiLevel() < API_LEVEL_ANDROID_8) ? 'stopservice' : 'stop-service'\n ];\n if (!_.isNil(user)) {\n cmd.push('--user', user);\n }\n cmd.push(...(parseIntentSpec(opts)));\n return await this.adb.shell(cmd);\n};\n\n\nexport { commands };\nexport default commands;\n"],"mappings":"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"}
|
|
@@ -18,7 +18,6 @@ let commands = {},
|
|
|
18
18
|
exports.helpers = helpers;
|
|
19
19
|
exports.commands = commands;
|
|
20
20
|
const WEBSOCKET_ENDPOINT = sessionId => `${_driver.DEFAULT_WS_PATHNAME_PREFIX}/session/${sessionId}/appium/device/logcat`;
|
|
21
|
-
|
|
22
21
|
function toLogRecord(timestamp, level, message) {
|
|
23
22
|
return {
|
|
24
23
|
timestamp,
|
|
@@ -48,7 +47,6 @@ extensions.supportedLogTypes = {
|
|
|
48
47
|
}
|
|
49
48
|
}
|
|
50
49
|
};
|
|
51
|
-
|
|
52
50
|
commands.mobileStartLogsBroadcast = async function mobileStartLogsBroadcast() {
|
|
53
51
|
const pathname = WEBSOCKET_ENDPOINT(this.sessionId);
|
|
54
52
|
if (!_lodash.default.isEmpty(await this.server.getWebSocketHandlers(pathname))) {
|
|
@@ -94,7 +92,6 @@ commands.mobileStartLogsBroadcast = async function mobileStartLogsBroadcast() {
|
|
|
94
92
|
});
|
|
95
93
|
await this.server.addWebSocketHandler(pathname, wss);
|
|
96
94
|
};
|
|
97
|
-
|
|
98
95
|
commands.mobileStopLogsBroadcast = async function mobileStopLogsBroadcast() {
|
|
99
96
|
const pathname = WEBSOCKET_ENDPOINT(this.sessionId);
|
|
100
97
|
if (_lodash.default.isEmpty(await this.server.getWebSocketHandlers(pathname))) {
|
|
@@ -122,4 +119,4 @@ commands.getLog = async function getLog(logType) {
|
|
|
122
119
|
Object.assign(extensions, commands, helpers);
|
|
123
120
|
var _default = extensions;
|
|
124
121
|
exports.default = _default;
|
|
125
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJHRVRfU0VSVkVSX0xPR1NfRkVBVFVSRSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJXRUJTT0NLRVRfRU5EUE9JTlQiLCJzZXNzaW9uSWQiLCJERUZBVUxUX1dTX1BBVEhOQU1FX1BSRUZJWCIsInRvTG9nUmVjb3JkIiwidGltZXN0YW1wIiwibGV2ZWwiLCJtZXNzYWdlIiwic3VwcG9ydGVkTG9nVHlwZXMiLCJsb2djYXQiLCJkZXNjcmlwdGlvbiIsImdldHRlciIsInNlbGYiLCJhZGIiLCJnZXRMb2djYXRMb2dzIiwiYnVncmVwb3J0Iiwib3V0cHV0IiwiRGF0ZSIsIm5vdyIsInNwbGl0Iiwib3MiLCJFT0wiLCJtYXAiLCJ4Iiwic2VydmVyIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJsb2ciLCJ1bndyYXAiLCJyZWNvcmQiLCJfIiwiaXNFbXB0eSIsInByZWZpeCIsIm1vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCIsInBhdGhuYW1lIiwiZ2V0V2ViU29ja2V0SGFuZGxlcnMiLCJkZWJ1ZyIsImluZm8iLCJ3c3MiLCJXZWJTb2NrZXQiLCJTZXJ2ZXIiLCJub1NlcnZlciIsIm9uIiwid3MiLCJyZXEiLCJyZW1vdGVJcCIsImhlYWRlcnMiLCJjb25uZWN0aW9uIiwicmVtb3RlQWRkcmVzcyIsIl9sb2djYXRXZWJzb2NrZXRMaXN0ZW5lciIsImxvZ1JlY29yZCIsInJlYWR5U3RhdGUiLCJPUEVOIiwic2VuZCIsInNldExvZ2NhdExpc3RlbmVyIiwiY29kZSIsInJlYXNvbiIsInJlbW92ZUxvZ2NhdExpc3RlbmVyIiwiaWduIiwiY2xvc2VNc2ciLCJ0b1N0cmluZyIsImFkZFdlYlNvY2tldEhhbmRsZXIiLCJtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCIsInJlbW92ZVdlYlNvY2tldEhhbmRsZXIiLCJnZXRMb2dUeXBlcyIsIm5hdGl2ZUxvZ1R5cGVzIiwiQmFzZURyaXZlciIsInByb3RvdHlwZSIsImNhbGwiLCJpc1dlYkNvbnRleHQiLCJ3ZWJMb2dUeXBlcyIsImNocm9tZWRyaXZlciIsImp3cHJveHkiLCJjb21tYW5kIiwiZ2V0TG9nIiwibG9nVHlwZSIsImtleXMiLCJpbmNsdWRlcyIsInR5cGUiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvbG9nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFdlYlNvY2tldCBmcm9tICd3cyc7XG5pbXBvcnQgeyBERUZBVUxUX1dTX1BBVEhOQU1FX1BSRUZJWCwgQmFzZURyaXZlciB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5jb25zdCBHRVRfU0VSVkVSX0xPR1NfRkVBVFVSRSA9ICdnZXRfc2VydmVyX2xvZ3MnO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbnN0IFdFQlNPQ0tFVF9FTkRQT0lOVCA9IChzZXNzaW9uSWQpID0+IGAke0RFRkFVTFRfV1NfUEFUSE5BTUVfUFJFRklYfS9zZXNzaW9uLyR7c2Vzc2lvbklkfS9hcHBpdW0vZGV2aWNlL2xvZ2NhdGA7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9TZWxlbml1bUhRL3NlbGVuaXVtL2Jsb2IvMGQ0MjU2NzZiM2M5ZGYyNjFkZDY0MTkxN2Y4NjdkNGQ1Y2U3Nzc0ZC9qYXZhL2NsaWVudC9zcmMvb3JnL29wZW5xYS9zZWxlbml1bS9sb2dnaW5nL0xvZ0VudHJ5LmphdmFcbmZ1bmN0aW9uIHRvTG9nUmVjb3JkICh0aW1lc3RhbXAsIGxldmVsLCBtZXNzYWdlKSB7XG4gIHJldHVybiB7XG4gICAgdGltZXN0YW1wLFxuICAgIGxldmVsLFxuICAgIG1lc3NhZ2UsXG4gIH07XG59XG5cbmV4dGVuc2lvbnMuc3VwcG9ydGVkTG9nVHlwZXMgPSB7XG4gIGxvZ2NhdDoge1xuICAgIGRlc2NyaXB0aW9uOiAnTG9ncyBmb3IgQW5kcm9pZCBhcHBsaWNhdGlvbnMgb24gcmVhbCBkZXZpY2UgYW5kIGVtdWxhdG9ycyB2aWEgQURCJyxcbiAgICBnZXR0ZXI6IGFzeW5jIChzZWxmKSA9PiBhd2FpdCBzZWxmLmFkYi5nZXRMb2djYXRMb2dzKCksXG4gIH0sXG4gIGJ1Z3JlcG9ydDoge1xuICAgIGRlc2NyaXB0aW9uOiBgJ2FkYiBidWdyZXBvcnQnIG91dHB1dCBmb3IgYWR2YW5jZWQgaXNzdWVzIGRpYWdub3N0aWNgLFxuICAgIGdldHRlcjogYXN5bmMgKHNlbGYpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHNlbGYuYWRiLmJ1Z3JlcG9ydCgpO1xuICAgICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgIHJldHVybiBvdXRwdXQuc3BsaXQob3MuRU9MKVxuICAgICAgICAubWFwKCh4KSA9PiB0b0xvZ1JlY29yZCh0aW1lc3RhbXAsICdBTEwnLCB4KSk7XG4gICAgfSxcbiAgfSxcbiAgc2VydmVyOiB7XG4gICAgZGVzY3JpcHRpb246ICdBcHBpdW0gc2VydmVyIGxvZ3MnLFxuICAgIGdldHRlcjogKHNlbGYpID0+IHtcbiAgICAgIHNlbGYuZW5zdXJlRmVhdHVyZUVuYWJsZWQoR0VUX1NFUlZFUl9MT0dTX0ZFQVRVUkUpO1xuICAgICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgIHJldHVybiBsb2cudW53cmFwKCkucmVjb3JkXG4gICAgICAgIC5tYXAoKHgpID0+IHRvTG9nUmVjb3JkKHRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FMTCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uaXNFbXB0eSh4LnByZWZpeCkgPyB4Lm1lc3NhZ2UgOiBgWyR7eC5wcmVmaXh9XSAke3gubWVzc2FnZX1gKVxuICAgICAgICApO1xuICAgIH0sXG4gIH0sXG59O1xuXG4vKipcbiAqIFN0YXJ0cyBBbmRyb2lkIGxvZ2NhdCBicm9hZGNhc3Qgd2Vic29ja2V0IG9uIHRoZSBzYW1lIGhvc3QgYW5kIHBvcnRcbiAqIHdoZXJlIEFwcGl1bSBzZXJ2ZXIgaXMgcnVubmluZyBhdCBgL3dzL3Nlc3Npb24vOnNlc3Npb25JZDovYXBwaXVtL2xvZ2NhdGAgZW5kcG9pbnQuIFRoZSBtZXRob2RcbiAqIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZSB3ZWIgc29ja2V0IGlzIGFscmVhZHkgbGlzdGVuaW5nLlxuICpcbiAqIEVhY2ggY29ubmVjdGVkIHdlYnNvY2tldCBsaXN0ZW5lciB3aWxsIHJlY2VpdmUgbG9nY2F0IGxvZyBsaW5lc1xuICogYXMgc29vbiBhcyB0aGV5IGFyZSB2aXNpYmxlIHRvIEFwcGl1bS5cbiAqL1xuY29tbWFuZHMubW9iaWxlU3RhcnRMb2dzQnJvYWRjYXN0ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3RhcnRMb2dzQnJvYWRjYXN0ICgpIHtcbiAgY29uc3QgcGF0aG5hbWUgPSBXRUJTT0NLRVRfRU5EUE9JTlQodGhpcy5zZXNzaW9uSWQpO1xuICBpZiAoIV8uaXNFbXB0eShhd2FpdCB0aGlzLnNlcnZlci5nZXRXZWJTb2NrZXRIYW5kbGVycyhwYXRobmFtZSkpKSB7XG4gICAgbG9nLmRlYnVnKGBUaGUgbG9nY2F0IGJyb2FkY2FzdGluZyB3ZWIgc29ja2V0IHNlcnZlciBpcyBhbHJlYWR5IGxpc3RlbmluZyBhdCAke3BhdGhuYW1lfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZy5pbmZvKGBBc3NpZ25pbmcgbG9nY2F0IGJyb2FkY2FzdGluZyB3ZWIgc29ja2V0IHNlcnZlciB0byAke3BhdGhuYW1lfWApO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9ibG9iL21hc3Rlci9kb2Mvd3MubWRcbiAgY29uc3Qgd3NzID0gbmV3IFdlYlNvY2tldC5TZXJ2ZXIoe1xuICAgIG5vU2VydmVyOiB0cnVlLFxuICB9KTtcbiAgd3NzLm9uKCdjb25uZWN0aW9uJywgKHdzLCByZXEpID0+IHtcbiAgICBpZiAocmVxKSB7XG4gICAgICBjb25zdCByZW1vdGVJcCA9IF8uaXNFbXB0eShyZXEuaGVhZGVyc1sneC1mb3J3YXJkZWQtZm9yJ10pXG4gICAgICAgID8gcmVxLmNvbm5lY3Rpb24/LnJlbW90ZUFkZHJlc3NcbiAgICAgICAgOiByZXEuaGVhZGVyc1sneC1mb3J3YXJkZWQtZm9yJ107XG4gICAgICBsb2cuZGVidWcoYEVzdGFibGlzaGVkIGEgbmV3IGxvZ2NhdCBsaXN0ZW5lciB3ZWIgc29ja2V0IGNvbm5lY3Rpb24gZnJvbSAke3JlbW90ZUlwfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuZGVidWcoJ0VzdGFibGlzaGVkIGEgbmV3IGxvZ2NhdCBsaXN0ZW5lciB3ZWIgc29ja2V0IGNvbm5lY3Rpb24nKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMuX2xvZ2NhdFdlYnNvY2tldExpc3RlbmVyKSkge1xuICAgICAgdGhpcy5fbG9nY2F0V2Vic29ja2V0TGlzdGVuZXIgPSAobG9nUmVjb3JkKSA9PiB7XG4gICAgICAgIGlmICh3cz8ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgICAgICB3cy5zZW5kKGxvZ1JlY29yZC5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5hZGIuc2V0TG9nY2F0TGlzdGVuZXIodGhpcy5fbG9nY2F0V2Vic29ja2V0TGlzdGVuZXIpO1xuXG4gICAgd3Mub24oJ2Nsb3NlJywgKGNvZGUsIHJlYXNvbikgPT4ge1xuICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5fbG9nY2F0V2Vic29ja2V0TGlzdGVuZXIpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5hZGIucmVtb3ZlTG9nY2F0TGlzdGVuZXIodGhpcy5fbG9nY2F0V2Vic29ja2V0TGlzdGVuZXIpO1xuICAgICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgICAgIHRoaXMuX2xvZ2NhdFdlYnNvY2tldExpc3RlbmVyID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbGV0IGNsb3NlTXNnID0gJ0xvZ2NhdCBsaXN0ZW5lciB3ZWIgc29ja2V0IGlzIGNsb3NlZC4nO1xuICAgICAgaWYgKCFfLmlzRW1wdHkoY29kZSkpIHtcbiAgICAgICAgY2xvc2VNc2cgKz0gYCBDb2RlOiAke2NvZGV9LmA7XG4gICAgICB9XG4gICAgICBpZiAoIV8uaXNFbXB0eShyZWFzb24pKSB7XG4gICAgICAgIGNsb3NlTXNnICs9IGAgUmVhc29uOiAke3JlYXNvbi50b1N0cmluZygpfS5gO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKGNsb3NlTXNnKTtcbiAgICB9KTtcbiAgfSk7XG4gIGF3YWl0IHRoaXMuc2VydmVyLmFkZFdlYlNvY2tldEhhbmRsZXIocGF0aG5hbWUsIHdzcyk7XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSBwcmV2aW91c2x5IHN0YXJ0ZWQgbG9nY2F0IGJyb2FkY2FzdGluZyB3ZXNvY2tldCBzZXJ2ZXIuXG4gKiBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBpbW1lZGlhdGVseSBpZiBubyBzZXJ2ZXIgaXMgcnVubmluZy5cbiAqL1xuY29tbWFuZHMubW9iaWxlU3RvcExvZ3NCcm9hZGNhc3QgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCAoKSB7XG4gIGNvbnN0IHBhdGhuYW1lID0gV0VCU09DS0VUX0VORFBPSU5UKHRoaXMuc2Vzc2lvbklkKTtcbiAgaWYgKF8uaXNFbXB0eShhd2FpdCB0aGlzLnNlcnZlci5nZXRXZWJTb2NrZXRIYW5kbGVycyhwYXRobmFtZSkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nLmRlYnVnKCdTdG9wcGluZyB0aGUgbG9nY2F0IGJyb2FkY2FzdGluZyB3ZWIgc29ja2V0IHNlcnZlcicpO1xuICBhd2FpdCB0aGlzLnNlcnZlci5yZW1vdmVXZWJTb2NrZXRIYW5kbGVyKHBhdGhuYW1lKTtcbn07XG5cbmNvbW1hbmRzLmdldExvZ1R5cGVzID0gYXN5bmMgZnVuY3Rpb24gZ2V0TG9nVHlwZXMgKCkge1xuICBjb25zdCBuYXRpdmVMb2dUeXBlcyA9IGF3YWl0IEJhc2VEcml2ZXIucHJvdG90eXBlLmdldExvZ1R5cGVzLmNhbGwodGhpcyk7XG4gIGlmICh0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgY29uc3Qgd2ViTG9nVHlwZXMgPSBhd2FpdCB0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmNvbW1hbmQoJy9sb2cvdHlwZXMnLCAnR0VUJyk7XG4gICAgcmV0dXJuIFsuLi5uYXRpdmVMb2dUeXBlcywgLi4ud2ViTG9nVHlwZXNdO1xuICB9XG4gIHJldHVybiBuYXRpdmVMb2dUeXBlcztcbn07XG5cbmNvbW1hbmRzLmdldExvZyA9IGFzeW5jIGZ1bmN0aW9uIGdldExvZyAobG9nVHlwZSkge1xuICBpZiAodGhpcy5pc1dlYkNvbnRleHQoKSAmJiAhXy5rZXlzKHRoaXMuc3VwcG9ydGVkTG9nVHlwZXMpLmluY2x1ZGVzKGxvZ1R5cGUpKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuY29tbWFuZCgnL2xvZycsICdQT1NUJywge3R5cGU6IGxvZ1R5cGV9KTtcbiAgfVxuICByZXR1cm4gYXdhaXQgQmFzZURyaXZlci5wcm90b3R5cGUuZ2V0TG9nLmNhbGwodGhpcywgbG9nVHlwZSk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSx1QkFBdUIsR0FBRyxpQkFBaUI7QUFFakQsSUFBSUMsUUFBUSxHQUFHLENBQUMsQ0FBQztFQUFFQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFBQztBQUFBO0FBRWpELE1B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
|
|
122
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJHRVRfU0VSVkVSX0xPR1NfRkVBVFVSRSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJXRUJTT0NLRVRfRU5EUE9JTlQiLCJzZXNzaW9uSWQiLCJERUZBVUxUX1dTX1BBVEhOQU1FX1BSRUZJWCIsInRvTG9nUmVjb3JkIiwidGltZXN0YW1wIiwibGV2ZWwiLCJtZXNzYWdlIiwic3VwcG9ydGVkTG9nVHlwZXMiLCJsb2djYXQiLCJkZXNjcmlwdGlvbiIsImdldHRlciIsInNlbGYiLCJhZGIiLCJnZXRMb2djYXRMb2dzIiwiYnVncmVwb3J0Iiwib3V0cHV0IiwiRGF0ZSIsIm5vdyIsInNwbGl0Iiwib3MiLCJFT0wiLCJtYXAiLCJ4Iiwic2VydmVyIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJsb2ciLCJ1bndyYXAiLCJyZWNvcmQiLCJfIiwiaXNFbXB0eSIsInByZWZpeCIsIm1vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCIsInBhdGhuYW1lIiwiZ2V0V2ViU29ja2V0SGFuZGxlcnMiLCJkZWJ1ZyIsImluZm8iLCJ3c3MiLCJXZWJTb2NrZXQiLCJTZXJ2ZXIiLCJub1NlcnZlciIsIm9uIiwid3MiLCJyZXEiLCJyZW1vdGVJcCIsImhlYWRlcnMiLCJjb25uZWN0aW9uIiwicmVtb3RlQWRkcmVzcyIsIl9sb2djYXRXZWJzb2NrZXRMaXN0ZW5lciIsImxvZ1JlY29yZCIsInJlYWR5U3RhdGUiLCJPUEVOIiwic2VuZCIsInNldExvZ2NhdExpc3RlbmVyIiwiY29kZSIsInJlYXNvbiIsInJlbW92ZUxvZ2NhdExpc3RlbmVyIiwiaWduIiwiY2xvc2VNc2ciLCJ0b1N0cmluZyIsImFkZFdlYlNvY2tldEhhbmRsZXIiLCJtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCIsInJlbW92ZVdlYlNvY2tldEhhbmRsZXIiLCJnZXRMb2dUeXBlcyIsIm5hdGl2ZUxvZ1R5cGVzIiwiQmFzZURyaXZlciIsInByb3RvdHlwZSIsImNhbGwiLCJpc1dlYkNvbnRleHQiLCJ3ZWJMb2dUeXBlcyIsImNocm9tZWRyaXZlciIsImp3cHJveHkiLCJjb21tYW5kIiwiZ2V0TG9nIiwibG9nVHlwZSIsImtleXMiLCJpbmNsdWRlcyIsInR5cGUiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvbG9nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFdlYlNvY2tldCBmcm9tICd3cyc7XG5pbXBvcnQgeyBERUZBVUxUX1dTX1BBVEhOQU1FX1BSRUZJWCwgQmFzZURyaXZlciB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5jb25zdCBHRVRfU0VSVkVSX0xPR1NfRkVBVFVSRSA9ICdnZXRfc2VydmVyX2xvZ3MnO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbnN0IFdFQlNPQ0tFVF9FTkRQT0lOVCA9IChzZXNzaW9uSWQpID0+IGAke0RFRkFVTFRfV1NfUEFUSE5BTUVfUFJFRklYfS9zZXNzaW9uLyR7c2Vzc2lvbklkfS9hcHBpdW0vZGV2aWNlL2xvZ2NhdGA7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9TZWxlbml1bUhRL3NlbGVuaXVtL2Jsb2IvMGQ0MjU2NzZiM2M5ZGYyNjFkZDY0MTkxN2Y4NjdkNGQ1Y2U3Nzc0ZC9qYXZhL2NsaWVudC9zcmMvb3JnL29wZW5xYS9zZWxlbml1bS9sb2dnaW5nL0xvZ0VudHJ5LmphdmFcbmZ1bmN0aW9uIHRvTG9nUmVjb3JkICh0aW1lc3RhbXAsIGxldmVsLCBtZXNzYWdlKSB7XG4gIHJldHVybiB7XG4gICAgdGltZXN0YW1wLFxuICAgIGxldmVsLFxuICAgIG1lc3NhZ2UsXG4gIH07XG59XG5cbmV4dGVuc2lvbnMuc3VwcG9ydGVkTG9nVHlwZXMgPSB7XG4gIGxvZ2NhdDoge1xuICAgIGRlc2NyaXB0aW9uOiAnTG9ncyBmb3IgQW5kcm9pZCBhcHBsaWNhdGlvbnMgb24gcmVhbCBkZXZpY2UgYW5kIGVtdWxhdG9ycyB2aWEgQURCJyxcbiAgICBnZXR0ZXI6IGFzeW5jIChzZWxmKSA9PiBhd2FpdCBzZWxmLmFkYi5nZXRMb2djYXRMb2dzKCksXG4gIH0sXG4gIGJ1Z3JlcG9ydDoge1xuICAgIGRlc2NyaXB0aW9uOiBgJ2FkYiBidWdyZXBvcnQnIG91dHB1dCBmb3IgYWR2YW5jZWQgaXNzdWVzIGRpYWdub3N0aWNgLFxuICAgIGdldHRlcjogYXN5bmMgKHNlbGYpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHNlbGYuYWRiLmJ1Z3JlcG9ydCgpO1xuICAgICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgIHJldHVybiBvdXRwdXQuc3BsaXQob3MuRU9MKVxuICAgICAgICAubWFwKCh4KSA9PiB0b0xvZ1JlY29yZCh0aW1lc3RhbXAsICdBTEwnLCB4KSk7XG4gICAgfSxcbiAgfSxcbiAgc2VydmVyOiB7XG4gICAgZGVzY3JpcHRpb246ICdBcHBpdW0gc2VydmVyIGxvZ3MnLFxuICAgIGdldHRlcjogKHNlbGYpID0+IHtcbiAgICAgIHNlbGYuZW5zdXJlRmVhdHVyZUVuYWJsZWQoR0VUX1NFUlZFUl9MT0dTX0ZFQVRVUkUpO1xuICAgICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgIHJldHVybiBsb2cudW53cmFwKCkucmVjb3JkXG4gICAgICAgIC5tYXAoKHgpID0+IHRvTG9nUmVjb3JkKHRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FMTCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uaXNFbXB0eSh4LnByZWZpeCkgPyB4Lm1lc3NhZ2UgOiBgWyR7eC5wcmVmaXh9XSAke3gubWVzc2FnZX1gKVxuICAgICAgICApO1xuICAgIH0sXG4gIH0sXG59O1xuXG4vKipcbiAqIFN0YXJ0cyBBbmRyb2lkIGxvZ2NhdCBicm9hZGNhc3Qgd2Vic29ja2V0IG9uIHRoZSBzYW1lIGhvc3QgYW5kIHBvcnRcbiAqIHdoZXJlIEFwcGl1bSBzZXJ2ZXIgaXMgcnVubmluZyBhdCBgL3dzL3Nlc3Npb24vOnNlc3Npb25JZDovYXBwaXVtL2xvZ2NhdGAgZW5kcG9pbnQuIFRoZSBtZXRob2RcbiAqIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZSB3ZWIgc29ja2V0IGlzIGFscmVhZHkgbGlzdGVuaW5nLlxuICpcbiAqIEVhY2ggY29ubmVjdGVkIHdlYnNvY2tldCBsaXN0ZW5lciB3aWxsIHJlY2VpdmUgbG9nY2F0IGxvZyBsaW5lc1xuICogYXMgc29vbiBhcyB0aGV5IGFyZSB2aXNpYmxlIHRvIEFwcGl1bS5cbiAqL1xuY29tbWFuZHMubW9iaWxlU3RhcnRMb2dzQnJvYWRjYXN0ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3RhcnRMb2dzQnJvYWRjYXN0ICgpIHtcbiAgY29uc3QgcGF0aG5hbWUgPSBXRUJTT0NLRVRfRU5EUE9JTlQodGhpcy5zZXNzaW9uSWQpO1xuICBpZiAoIV8uaXNFbXB0eShhd2FpdCB0aGlzLnNlcnZlci5nZXRXZWJTb2NrZXRIYW5kbGVycyhwYXRobmFtZSkpKSB7XG4gICAgbG9nLmRlYnVnKGBUaGUgbG9nY2F0IGJyb2FkY2FzdGluZyB3ZWIgc29ja2V0IHNlcnZlciBpcyBhbHJlYWR5IGxpc3RlbmluZyBhdCAke3BhdGhuYW1lfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZy5pbmZvKGBBc3NpZ25pbmcgbG9nY2F0IGJyb2FkY2FzdGluZyB3ZWIgc29ja2V0IHNlcnZlciB0byAke3BhdGhuYW1lfWApO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9ibG9iL21hc3Rlci9kb2Mvd3MubWRcbiAgY29uc3Qgd3NzID0gbmV3IFdlYlNvY2tldC5TZXJ2ZXIoe1xuICAgIG5vU2VydmVyOiB0cnVlLFxuICB9KTtcbiAgd3NzLm9uKCdjb25uZWN0aW9uJywgKHdzLCByZXEpID0+IHtcbiAgICBpZiAocmVxKSB7XG4gICAgICBjb25zdCByZW1vdGVJcCA9IF8uaXNFbXB0eShyZXEuaGVhZGVyc1sneC1mb3J3YXJkZWQtZm9yJ10pXG4gICAgICAgID8gcmVxLmNvbm5lY3Rpb24/LnJlbW90ZUFkZHJlc3NcbiAgICAgICAgOiByZXEuaGVhZGVyc1sneC1mb3J3YXJkZWQtZm9yJ107XG4gICAgICBsb2cuZGVidWcoYEVzdGFibGlzaGVkIGEgbmV3IGxvZ2NhdCBsaXN0ZW5lciB3ZWIgc29ja2V0IGNvbm5lY3Rpb24gZnJvbSAke3JlbW90ZUlwfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuZGVidWcoJ0VzdGFibGlzaGVkIGEgbmV3IGxvZ2NhdCBsaXN0ZW5lciB3ZWIgc29ja2V0IGNvbm5lY3Rpb24nKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMuX2xvZ2NhdFdlYnNvY2tldExpc3RlbmVyKSkge1xuICAgICAgdGhpcy5fbG9nY2F0V2Vic29ja2V0TGlzdGVuZXIgPSAobG9nUmVjb3JkKSA9PiB7XG4gICAgICAgIGlmICh3cz8ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgICAgICB3cy5zZW5kKGxvZ1JlY29yZC5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5hZGIuc2V0TG9nY2F0TGlzdGVuZXIodGhpcy5fbG9nY2F0V2Vic29ja2V0TGlzdGVuZXIpO1xuXG4gICAgd3Mub24oJ2Nsb3NlJywgKGNvZGUsIHJlYXNvbikgPT4ge1xuICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5fbG9nY2F0V2Vic29ja2V0TGlzdGVuZXIpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5hZGIucmVtb3ZlTG9nY2F0TGlzdGVuZXIodGhpcy5fbG9nY2F0V2Vic29ja2V0TGlzdGVuZXIpO1xuICAgICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgICAgIHRoaXMuX2xvZ2NhdFdlYnNvY2tldExpc3RlbmVyID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbGV0IGNsb3NlTXNnID0gJ0xvZ2NhdCBsaXN0ZW5lciB3ZWIgc29ja2V0IGlzIGNsb3NlZC4nO1xuICAgICAgaWYgKCFfLmlzRW1wdHkoY29kZSkpIHtcbiAgICAgICAgY2xvc2VNc2cgKz0gYCBDb2RlOiAke2NvZGV9LmA7XG4gICAgICB9XG4gICAgICBpZiAoIV8uaXNFbXB0eShyZWFzb24pKSB7XG4gICAgICAgIGNsb3NlTXNnICs9IGAgUmVhc29uOiAke3JlYXNvbi50b1N0cmluZygpfS5gO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKGNsb3NlTXNnKTtcbiAgICB9KTtcbiAgfSk7XG4gIGF3YWl0IHRoaXMuc2VydmVyLmFkZFdlYlNvY2tldEhhbmRsZXIocGF0aG5hbWUsIHdzcyk7XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSBwcmV2aW91c2x5IHN0YXJ0ZWQgbG9nY2F0IGJyb2FkY2FzdGluZyB3ZXNvY2tldCBzZXJ2ZXIuXG4gKiBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBpbW1lZGlhdGVseSBpZiBubyBzZXJ2ZXIgaXMgcnVubmluZy5cbiAqL1xuY29tbWFuZHMubW9iaWxlU3RvcExvZ3NCcm9hZGNhc3QgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCAoKSB7XG4gIGNvbnN0IHBhdGhuYW1lID0gV0VCU09DS0VUX0VORFBPSU5UKHRoaXMuc2Vzc2lvbklkKTtcbiAgaWYgKF8uaXNFbXB0eShhd2FpdCB0aGlzLnNlcnZlci5nZXRXZWJTb2NrZXRIYW5kbGVycyhwYXRobmFtZSkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nLmRlYnVnKCdTdG9wcGluZyB0aGUgbG9nY2F0IGJyb2FkY2FzdGluZyB3ZWIgc29ja2V0IHNlcnZlcicpO1xuICBhd2FpdCB0aGlzLnNlcnZlci5yZW1vdmVXZWJTb2NrZXRIYW5kbGVyKHBhdGhuYW1lKTtcbn07XG5cbmNvbW1hbmRzLmdldExvZ1R5cGVzID0gYXN5bmMgZnVuY3Rpb24gZ2V0TG9nVHlwZXMgKCkge1xuICBjb25zdCBuYXRpdmVMb2dUeXBlcyA9IGF3YWl0IEJhc2VEcml2ZXIucHJvdG90eXBlLmdldExvZ1R5cGVzLmNhbGwodGhpcyk7XG4gIGlmICh0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgY29uc3Qgd2ViTG9nVHlwZXMgPSBhd2FpdCB0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmNvbW1hbmQoJy9sb2cvdHlwZXMnLCAnR0VUJyk7XG4gICAgcmV0dXJuIFsuLi5uYXRpdmVMb2dUeXBlcywgLi4ud2ViTG9nVHlwZXNdO1xuICB9XG4gIHJldHVybiBuYXRpdmVMb2dUeXBlcztcbn07XG5cbmNvbW1hbmRzLmdldExvZyA9IGFzeW5jIGZ1bmN0aW9uIGdldExvZyAobG9nVHlwZSkge1xuICBpZiAodGhpcy5pc1dlYkNvbnRleHQoKSAmJiAhXy5rZXlzKHRoaXMuc3VwcG9ydGVkTG9nVHlwZXMpLmluY2x1ZGVzKGxvZ1R5cGUpKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuY29tbWFuZCgnL2xvZycsICdQT1NUJywge3R5cGU6IGxvZ1R5cGV9KTtcbiAgfVxuICByZXR1cm4gYXdhaXQgQmFzZURyaXZlci5wcm90b3R5cGUuZ2V0TG9nLmNhbGwodGhpcywgbG9nVHlwZSk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSx1QkFBdUIsR0FBRyxpQkFBaUI7QUFFakQsSUFBSUMsUUFBUSxHQUFHLENBQUMsQ0FBQztFQUFFQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFBQztBQUFBO0FBRWpELE1B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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","names":["GET_SERVER_LOGS_FEATURE","commands","helpers","extensions","WEBSOCKET_ENDPOINT","sessionId","DEFAULT_WS_PATHNAME_PREFIX","toLogRecord","timestamp","level","message","supportedLogTypes","logcat","description","getter","self","adb","getLogcatLogs","bugreport","output","Date","now","split","os","EOL","map","x","server","ensureFeatureEnabled","log","unwrap","record","_","isEmpty","prefix","mobileStartLogsBroadcast","pathname","getWebSocketHandlers","debug","info","wss","WebSocket","Server","noServer","on","ws","req","remoteIp","headers","connection","remoteAddress","_logcatWebsocketListener","logRecord","readyState","OPEN","send","setLogcatListener","code","reason","removeLogcatListener","ign","closeMsg","toString","addWebSocketHandler","mobileStopLogsBroadcast","removeWebSocketHandler","getLogTypes","nativeLogTypes","BaseDriver","prototype","call","isWebContext","webLogTypes","chromedriver","jwproxy","command","getLog","logType","keys","includes","type","Object","assign"],"sources":["../../../lib/commands/log.js"],"sourcesContent":["import log from '../logger';\nimport os from 'os';\nimport _ from 'lodash';\nimport WebSocket from 'ws';\nimport { DEFAULT_WS_PATHNAME_PREFIX, BaseDriver } from 'appium/driver';\n\nconst GET_SERVER_LOGS_FEATURE = 'get_server_logs';\n\nlet commands = {}, helpers = {}, extensions = {};\n\nconst WEBSOCKET_ENDPOINT = (sessionId) => `${DEFAULT_WS_PATHNAME_PREFIX}/session/${sessionId}/appium/device/logcat`;\n\n// https://github.com/SeleniumHQ/selenium/blob/0d425676b3c9df261dd641917f867d4d5ce7774d/java/client/src/org/openqa/selenium/logging/LogEntry.java\nfunction toLogRecord (timestamp, level, message) {\n return {\n timestamp,\n level,\n message,\n };\n}\n\nextensions.supportedLogTypes = {\n logcat: {\n description: 'Logs for Android applications on real device and emulators via ADB',\n getter: async (self) => await self.adb.getLogcatLogs(),\n },\n bugreport: {\n description: `'adb bugreport' output for advanced issues diagnostic`,\n getter: async (self) => {\n const output = await self.adb.bugreport();\n const timestamp = Date.now();\n return output.split(os.EOL)\n .map((x) => toLogRecord(timestamp, 'ALL', x));\n },\n },\n server: {\n description: 'Appium server logs',\n getter: (self) => {\n self.ensureFeatureEnabled(GET_SERVER_LOGS_FEATURE);\n const timestamp = Date.now();\n return log.unwrap().record\n .map((x) => toLogRecord(timestamp,\n 'ALL',\n _.isEmpty(x.prefix) ? x.message : `[${x.prefix}] ${x.message}`)\n );\n },\n },\n};\n\n/**\n * Starts Android logcat broadcast websocket on the same host and port\n * where Appium server is running at `/ws/session/:sessionId:/appium/logcat` endpoint. The method\n * will return immediately if the web socket is already listening.\n *\n * Each connected websocket listener will receive logcat log lines\n * as soon as they are visible to Appium.\n */\ncommands.mobileStartLogsBroadcast = async function mobileStartLogsBroadcast () {\n const pathname = WEBSOCKET_ENDPOINT(this.sessionId);\n if (!_.isEmpty(await this.server.getWebSocketHandlers(pathname))) {\n log.debug(`The logcat broadcasting web socket server is already listening at ${pathname}`);\n return;\n }\n\n log.info(`Assigning logcat broadcasting web socket server to ${pathname}`);\n // https://github.com/websockets/ws/blob/master/doc/ws.md\n const wss = new WebSocket.Server({\n noServer: true,\n });\n wss.on('connection', (ws, req) => {\n if (req) {\n const remoteIp = _.isEmpty(req.headers['x-forwarded-for'])\n ? req.connection?.remoteAddress\n : req.headers['x-forwarded-for'];\n log.debug(`Established a new logcat listener web socket connection from ${remoteIp}`);\n } else {\n log.debug('Established a new logcat listener web socket connection');\n }\n\n if (_.isEmpty(this._logcatWebsocketListener)) {\n this._logcatWebsocketListener = (logRecord) => {\n if (ws?.readyState === WebSocket.OPEN) {\n ws.send(logRecord.message);\n }\n };\n }\n this.adb.setLogcatListener(this._logcatWebsocketListener);\n\n ws.on('close', (code, reason) => {\n if (!_.isEmpty(this._logcatWebsocketListener)) {\n try {\n this.adb.removeLogcatListener(this._logcatWebsocketListener);\n } catch (ign) {}\n this._logcatWebsocketListener = null;\n }\n\n let closeMsg = 'Logcat listener web socket is closed.';\n if (!_.isEmpty(code)) {\n closeMsg += ` Code: ${code}.`;\n }\n if (!_.isEmpty(reason)) {\n closeMsg += ` Reason: ${reason.toString()}.`;\n }\n log.debug(closeMsg);\n });\n });\n await this.server.addWebSocketHandler(pathname, wss);\n};\n\n/**\n * Stops the previously started logcat broadcasting wesocket server.\n * This method will return immediately if no server is running.\n */\ncommands.mobileStopLogsBroadcast = async function mobileStopLogsBroadcast () {\n const pathname = WEBSOCKET_ENDPOINT(this.sessionId);\n if (_.isEmpty(await this.server.getWebSocketHandlers(pathname))) {\n return;\n }\n\n log.debug('Stopping the logcat broadcasting web socket server');\n await this.server.removeWebSocketHandler(pathname);\n};\n\ncommands.getLogTypes = async function getLogTypes () {\n const nativeLogTypes = await BaseDriver.prototype.getLogTypes.call(this);\n if (this.isWebContext()) {\n const webLogTypes = await this.chromedriver.jwproxy.command('/log/types', 'GET');\n return [...nativeLogTypes, ...webLogTypes];\n }\n return nativeLogTypes;\n};\n\ncommands.getLog = async function getLog (logType) {\n if (this.isWebContext() && !_.keys(this.supportedLogTypes).includes(logType)) {\n return await this.chromedriver.jwproxy.command('/log', 'POST', {type: logType});\n }\n return await BaseDriver.prototype.getLog.call(this, logType);\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AAEA,MAAMA,uBAAuB,GAAG,iBAAiB;AAEjD,IAAIC,QAAQ,GAAG,CAAC,CAAC;EAAEC,OAAO,GAAG,CAAC,CAAC;EAAEC,UAAU,GAAG,CAAC,CAAC;AAAC;AAAA;AAEjD,MAAMC,kBAAkB,GAAIC,SAAS,IAAM,GAAEC,kCAA2B,YAAWD,SAAU,uBAAsB;;AAGnH,SAASE,WAAW,CAAEC,SAAS,EAAEC,KAAK,EAAEC,OAAO,EAAE;EAC/C,OAAO;IACLF,SAAS;IACTC,KAAK;IACLC;EACF,CAAC;AACH;AAEAP,UAAU,CAACQ,iBAAiB,GAAG;EAC7BC,MAAM,EAAE;IACNC,WAAW,EAAE,oEAAoE;IACjFC,MAAM,EAAE,MAAOC,IAAI,IAAK,MAAMA,IAAI,CAACC,GAAG,CAACC,aAAa;EACtD,CAAC;EACDC,SAAS,EAAE;IACTL,WAAW,EAAG,uDAAsD;IACpEC,MAAM,EAAE,MAAOC,IAAI,IAAK;MACtB,MAAMI,MAAM,GAAG,MAAMJ,IAAI,CAACC,GAAG,CAACE,SAAS,EAAE;MACzC,MAAMV,SAAS,GAAGY,IAAI,CAACC,GAAG,EAAE;MAC5B,OAAOF,MAAM,CAACG,KAAK,CAACC,WAAE,CAACC,GAAG,CAAC,CACxBC,GAAG,CAAEC,CAAC,IAAKnB,WAAW,CAACC,SAAS,EAAE,KAAK,EAAEkB,CAAC,CAAC,CAAC;IACjD;EACF,CAAC;EACDC,MAAM,EAAE;IACNd,WAAW,EAAE,oBAAoB;IACjCC,MAAM,EAAGC,IAAI,IAAK;MAChBA,IAAI,CAACa,oBAAoB,CAAC5B,uBAAuB,CAAC;MAClD,MAAMQ,SAAS,GAAGY,IAAI,CAACC,GAAG,EAAE;MAC5B,OAAOQ,eAAG,CAACC,MAAM,EAAE,CAACC,MAAM,CACvBN,GAAG,CAAEC,CAAC,IAAKnB,WAAW,CAACC,SAAS,EACT,KAAK,EACLwB,eAAC,CAACC,OAAO,CAACP,CAAC,CAACQ,MAAM,CAAC,GAAGR,CAAC,CAAChB,OAAO,GAAI,IAAGgB,CAAC,CAACQ,MAAO,KAAIR,CAAC,CAAChB,OAAQ,EAAC,CAAC,CACtF;IACL;EACF;AACF,CAAC;;AAUDT,QAAQ,CAACkC,wBAAwB,GAAG,eAAeA,wBAAwB,GAAI;EAC7E,MAAMC,QAAQ,GAAGhC,kBAAkB,CAAC,IAAI,CAACC,SAAS,CAAC;EACnD,IAAI,CAAC2B,eAAC,CAACC,OAAO,CAAC,MAAM,IAAI,CAACN,MAAM,CAACU,oBAAoB,CAACD,QAAQ,CAAC,CAAC,EAAE;IAChEP,eAAG,CAACS,KAAK,CAAE,qEAAoEF,QAAS,EAAC,CAAC;IAC1F;EACF;EAEAP,eAAG,CAACU,IAAI,CAAE,sDAAqDH,QAAS,EAAC,CAAC;EAE1E,MAAMI,GAAG,GAAG,IAAIC,WAAS,CAACC,MAAM,CAAC;IAC/BC,QAAQ,EAAE;EACZ,CAAC,CAAC;EACFH,GAAG,CAACI,EAAE,CAAC,YAAY,EAAE,CAACC,EAAE,EAAEC,GAAG,KAAK;IAChC,IAAIA,GAAG,EAAE;MAAA;MACP,MAAMC,QAAQ,GAAGf,eAAC,CAACC,OAAO,CAACa,GAAG,CAACE,OAAO,CAAC,iBAAiB,CAAC,CAAC,sBACtDF,GAAG,CAACG,UAAU,oDAAd,gBAAgBC,aAAa,GAC7BJ,GAAG,CAACE,OAAO,CAAC,iBAAiB,CAAC;MAClCnB,eAAG,CAACS,KAAK,CAAE,gEAA+DS,QAAS,EAAC,CAAC;IACvF,CAAC,MAAM;MACLlB,eAAG,CAACS,KAAK,CAAC,yDAAyD,CAAC;IACtE;IAEA,IAAIN,eAAC,CAACC,OAAO,CAAC,IAAI,CAACkB,wBAAwB,CAAC,EAAE;MAC5C,IAAI,CAACA,wBAAwB,GAAIC,SAAS,IAAK;QAC7C,IAAI,CAAAP,EAAE,aAAFA,EAAE,uBAAFA,EAAE,CAAEQ,UAAU,MAAKZ,WAAS,CAACa,IAAI,EAAE;UACrCT,EAAE,CAACU,IAAI,CAACH,SAAS,CAAC1C,OAAO,CAAC;QAC5B;MACF,CAAC;IACH;IACA,IAAI,CAACM,GAAG,CAACwC,iBAAiB,CAAC,IAAI,CAACL,wBAAwB,CAAC;IAEzDN,EAAE,CAACD,EAAE,CAAC,OAAO,EAAE,CAACa,IAAI,EAAEC,MAAM,KAAK;MAC/B,IAAI,CAAC1B,eAAC,CAACC,OAAO,CAAC,IAAI,CAACkB,wBAAwB,CAAC,EAAE;QAC7C,IAAI;UACF,IAAI,CAACnC,GAAG,CAAC2C,oBAAoB,CAAC,IAAI,CAACR,wBAAwB,CAAC;QAC9D,CAAC,CAAC,OAAOS,GAAG,EAAE,CAAC;QACf,IAAI,CAACT,wBAAwB,GAAG,IAAI;MACtC;MAEA,IAAIU,QAAQ,GAAG,uCAAuC;MACtD,IAAI,CAAC7B,eAAC,CAACC,OAAO,CAACwB,IAAI,CAAC,EAAE;QACpBI,QAAQ,IAAK,UAASJ,IAAK,GAAE;MAC/B;MACA,IAAI,CAACzB,eAAC,CAACC,OAAO,CAACyB,MAAM,CAAC,EAAE;QACtBG,QAAQ,IAAK,YAAWH,MAAM,CAACI,QAAQ,EAAG,GAAE;MAC9C;MACAjC,eAAG,CAACS,KAAK,CAACuB,QAAQ,CAAC;IACrB,CAAC,CAAC;EACJ,CAAC,CAAC;EACF,MAAM,IAAI,CAAClC,MAAM,CAACoC,mBAAmB,CAAC3B,QAAQ,EAAEI,GAAG,CAAC;AACtD,CAAC;;AAMDvC,QAAQ,CAAC+D,uBAAuB,GAAG,eAAeA,uBAAuB,GAAI;EAC3E,MAAM5B,QAAQ,GAAGhC,kBAAkB,CAAC,IAAI,CAACC,SAAS,CAAC;EACnD,IAAI2B,eAAC,CAACC,OAAO,CAAC,MAAM,IAAI,CAACN,MAAM,CAACU,oBAAoB,CAACD,QAAQ,CAAC,CAAC,EAAE;IAC/D;EACF;EAEAP,eAAG,CAACS,KAAK,CAAC,oDAAoD,CAAC;EAC/D,MAAM,IAAI,CAACX,MAAM,CAACsC,sBAAsB,CAAC7B,QAAQ,CAAC;AACpD,CAAC;AAEDnC,QAAQ,CAACiE,WAAW,GAAG,eAAeA,WAAW,GAAI;EACnD,MAAMC,cAAc,GAAG,MAAMC,kBAAU,CAACC,SAAS,CAACH,WAAW,CAACI,IAAI,CAAC,IAAI,CAAC;EACxE,IAAI,IAAI,CAACC,YAAY,EAAE,EAAE;IACvB,MAAMC,WAAW,GAAG,MAAM,IAAI,CAACC,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC;IAChF,OAAO,CAAC,GAAGR,cAAc,EAAE,GAAGK,WAAW,CAAC;EAC5C;EACA,OAAOL,cAAc;AACvB,CAAC;AAEDlE,QAAQ,CAAC2E,MAAM,GAAG,eAAeA,MAAM,CAAEC,OAAO,EAAE;EAChD,IAAI,IAAI,CAACN,YAAY,EAAE,IAAI,CAACvC,eAAC,CAAC8C,IAAI,CAAC,IAAI,CAACnE,iBAAiB,CAAC,CAACoE,QAAQ,CAACF,OAAO,CAAC,EAAE;IAC5E,OAAO,MAAM,IAAI,CAACJ,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE;MAACK,IAAI,EAAEH;IAAO,CAAC,CAAC;EACjF;EACA,OAAO,MAAMT,kBAAU,CAACC,SAAS,CAACO,MAAM,CAACN,IAAI,CAAC,IAAI,EAAEO,OAAO,CAAC;AAC9D,CAAC;AAEDI,MAAM,CAACC,MAAM,CAAC/E,UAAU,EAAEF,QAAQ,EAAEC,OAAO,CAAC;AAAC,eAE9BC,UAAU;AAAA"}
|
|
1
|
+
{"version":3,"file":"log.js","names":["GET_SERVER_LOGS_FEATURE","commands","helpers","extensions","WEBSOCKET_ENDPOINT","sessionId","DEFAULT_WS_PATHNAME_PREFIX","toLogRecord","timestamp","level","message","supportedLogTypes","logcat","description","getter","self","adb","getLogcatLogs","bugreport","output","Date","now","split","os","EOL","map","x","server","ensureFeatureEnabled","log","unwrap","record","_","isEmpty","prefix","mobileStartLogsBroadcast","pathname","getWebSocketHandlers","debug","info","wss","WebSocket","Server","noServer","on","ws","req","remoteIp","headers","connection","remoteAddress","_logcatWebsocketListener","logRecord","readyState","OPEN","send","setLogcatListener","code","reason","removeLogcatListener","ign","closeMsg","toString","addWebSocketHandler","mobileStopLogsBroadcast","removeWebSocketHandler","getLogTypes","nativeLogTypes","BaseDriver","prototype","call","isWebContext","webLogTypes","chromedriver","jwproxy","command","getLog","logType","keys","includes","type","Object","assign"],"sources":["../../../lib/commands/log.js"],"sourcesContent":["import log from '../logger';\nimport os from 'os';\nimport _ from 'lodash';\nimport WebSocket from 'ws';\nimport { DEFAULT_WS_PATHNAME_PREFIX, BaseDriver } from 'appium/driver';\n\nconst GET_SERVER_LOGS_FEATURE = 'get_server_logs';\n\nlet commands = {}, helpers = {}, extensions = {};\n\nconst WEBSOCKET_ENDPOINT = (sessionId) => `${DEFAULT_WS_PATHNAME_PREFIX}/session/${sessionId}/appium/device/logcat`;\n\n// https://github.com/SeleniumHQ/selenium/blob/0d425676b3c9df261dd641917f867d4d5ce7774d/java/client/src/org/openqa/selenium/logging/LogEntry.java\nfunction toLogRecord (timestamp, level, message) {\n return {\n timestamp,\n level,\n message,\n };\n}\n\nextensions.supportedLogTypes = {\n logcat: {\n description: 'Logs for Android applications on real device and emulators via ADB',\n getter: async (self) => await self.adb.getLogcatLogs(),\n },\n bugreport: {\n description: `'adb bugreport' output for advanced issues diagnostic`,\n getter: async (self) => {\n const output = await self.adb.bugreport();\n const timestamp = Date.now();\n return output.split(os.EOL)\n .map((x) => toLogRecord(timestamp, 'ALL', x));\n },\n },\n server: {\n description: 'Appium server logs',\n getter: (self) => {\n self.ensureFeatureEnabled(GET_SERVER_LOGS_FEATURE);\n const timestamp = Date.now();\n return log.unwrap().record\n .map((x) => toLogRecord(timestamp,\n 'ALL',\n _.isEmpty(x.prefix) ? x.message : `[${x.prefix}] ${x.message}`)\n );\n },\n },\n};\n\n/**\n * Starts Android logcat broadcast websocket on the same host and port\n * where Appium server is running at `/ws/session/:sessionId:/appium/logcat` endpoint. The method\n * will return immediately if the web socket is already listening.\n *\n * Each connected websocket listener will receive logcat log lines\n * as soon as they are visible to Appium.\n */\ncommands.mobileStartLogsBroadcast = async function mobileStartLogsBroadcast () {\n const pathname = WEBSOCKET_ENDPOINT(this.sessionId);\n if (!_.isEmpty(await this.server.getWebSocketHandlers(pathname))) {\n log.debug(`The logcat broadcasting web socket server is already listening at ${pathname}`);\n return;\n }\n\n log.info(`Assigning logcat broadcasting web socket server to ${pathname}`);\n // https://github.com/websockets/ws/blob/master/doc/ws.md\n const wss = new WebSocket.Server({\n noServer: true,\n });\n wss.on('connection', (ws, req) => {\n if (req) {\n const remoteIp = _.isEmpty(req.headers['x-forwarded-for'])\n ? req.connection?.remoteAddress\n : req.headers['x-forwarded-for'];\n log.debug(`Established a new logcat listener web socket connection from ${remoteIp}`);\n } else {\n log.debug('Established a new logcat listener web socket connection');\n }\n\n if (_.isEmpty(this._logcatWebsocketListener)) {\n this._logcatWebsocketListener = (logRecord) => {\n if (ws?.readyState === WebSocket.OPEN) {\n ws.send(logRecord.message);\n }\n };\n }\n this.adb.setLogcatListener(this._logcatWebsocketListener);\n\n ws.on('close', (code, reason) => {\n if (!_.isEmpty(this._logcatWebsocketListener)) {\n try {\n this.adb.removeLogcatListener(this._logcatWebsocketListener);\n } catch (ign) {}\n this._logcatWebsocketListener = null;\n }\n\n let closeMsg = 'Logcat listener web socket is closed.';\n if (!_.isEmpty(code)) {\n closeMsg += ` Code: ${code}.`;\n }\n if (!_.isEmpty(reason)) {\n closeMsg += ` Reason: ${reason.toString()}.`;\n }\n log.debug(closeMsg);\n });\n });\n await this.server.addWebSocketHandler(pathname, wss);\n};\n\n/**\n * Stops the previously started logcat broadcasting wesocket server.\n * This method will return immediately if no server is running.\n */\ncommands.mobileStopLogsBroadcast = async function mobileStopLogsBroadcast () {\n const pathname = WEBSOCKET_ENDPOINT(this.sessionId);\n if (_.isEmpty(await this.server.getWebSocketHandlers(pathname))) {\n return;\n }\n\n log.debug('Stopping the logcat broadcasting web socket server');\n await this.server.removeWebSocketHandler(pathname);\n};\n\ncommands.getLogTypes = async function getLogTypes () {\n const nativeLogTypes = await BaseDriver.prototype.getLogTypes.call(this);\n if (this.isWebContext()) {\n const webLogTypes = await this.chromedriver.jwproxy.command('/log/types', 'GET');\n return [...nativeLogTypes, ...webLogTypes];\n }\n return nativeLogTypes;\n};\n\ncommands.getLog = async function getLog (logType) {\n if (this.isWebContext() && !_.keys(this.supportedLogTypes).includes(logType)) {\n return await this.chromedriver.jwproxy.command('/log', 'POST', {type: logType});\n }\n return await BaseDriver.prototype.getLog.call(this, logType);\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
|
|
@@ -8,13 +8,12 @@ exports.default = exports.commands = void 0;
|
|
|
8
8
|
require("source-map-support/register");
|
|
9
9
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
10
10
|
var _asyncbox = require("asyncbox");
|
|
11
|
-
var _support = require("appium/support");
|
|
11
|
+
var _support = require("@appium/support");
|
|
12
12
|
var _path = _interopRequireDefault(require("path"));
|
|
13
13
|
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
14
14
|
var _androidHelpers = require("../android-helpers");
|
|
15
15
|
var _moment = _interopRequireDefault(require("moment"));
|
|
16
16
|
const commands = {};
|
|
17
|
-
|
|
18
17
|
exports.commands = commands;
|
|
19
18
|
const DEFAULT_EXT = '.mp4';
|
|
20
19
|
const RECORDING_STARTUP_TIMEOUT_MS = 3 * 1000;
|
|
@@ -133,7 +132,6 @@ class MediaProjectionRecorder {
|
|
|
133
132
|
return true;
|
|
134
133
|
}
|
|
135
134
|
}
|
|
136
|
-
|
|
137
135
|
commands.mobileStartMediaProjectionRecording = async function mobileStartMediaProjectionRecording(options = {}) {
|
|
138
136
|
await verifyMediaProjectionRecordingIsSupported(this.adb);
|
|
139
137
|
const {
|
|
@@ -157,13 +155,11 @@ commands.mobileStartMediaProjectionRecording = async function mobileStartMediaPr
|
|
|
157
155
|
}
|
|
158
156
|
return didStart;
|
|
159
157
|
};
|
|
160
|
-
|
|
161
158
|
commands.mobileIsMediaProjectionRecordingRunning = async function mobileIsMediaProjectionRecordingRunning() {
|
|
162
159
|
await verifyMediaProjectionRecordingIsSupported(this.adb);
|
|
163
160
|
const recorder = new MediaProjectionRecorder(this.adb);
|
|
164
161
|
return await recorder.isRunning();
|
|
165
162
|
};
|
|
166
|
-
|
|
167
163
|
commands.mobileStopMediaProjectionRecording = async function mobileStopMediaProjectionRecording(options = {}) {
|
|
168
164
|
await verifyMediaProjectionRecordingIsSupported(this.adb);
|
|
169
165
|
const recorder = new MediaProjectionRecorder(this.adb);
|
|
@@ -193,4 +189,4 @@ commands.mobileStopMediaProjectionRecording = async function mobileStopMediaProj
|
|
|
193
189
|
};
|
|
194
190
|
var _default = commands;
|
|
195
191
|
exports.default = _default;
|
|
196
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsIkRFRkFVTFRfRVhUIiwiUkVDT1JESU5HX1NUQVJUVVBfVElNRU9VVF9NUyIsIlJFQ09SRElOR19TVE9QX1RJTUVPVVRfTVMiLCJNSU5fQVBJX0xFVkVMIiwiUkVDT1JESU5HX1NFUlZJQ0VfTkFNRSIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJSRUNPUkRJTkdfQUNUSVZJVFlfTkFNRSIsIlJFQ09SRElOR19BQ1RJT05fU1RBUlQiLCJSRUNPUkRJTkdfQUNUSU9OX1NUT1AiLCJSRUNPUkRJTkdTX1JPT1QiLCJERUZBVUxUX0ZJTEVOQU1FX0ZPUk1BVCIsInVwbG9hZFJlY29yZGVkTWVkaWEiLCJsb2NhbEZpbGUiLCJyZW1vdGVQYXRoIiwidXBsb2FkT3B0aW9ucyIsIl8iLCJpc0VtcHR5IiwidXRpbCIsInRvSW5NZW1vcnlCYXNlNjQiLCJ0b1N0cmluZyIsInVzZXIiLCJwYXNzIiwibWV0aG9kIiwiaGVhZGVycyIsImZpbGVGaWVsZE5hbWUiLCJmb3JtRmllbGRzIiwib3B0aW9ucyIsImF1dGgiLCJuZXQiLCJ1cGxvYWRGaWxlIiwiYWRqdXN0TWVkaWFFeHRlbnNpb24iLCJuYW1lIiwidG9Mb3dlciIsImVuZHNXaXRoIiwidmVyaWZ5TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nSXNTdXBwb3J0ZWQiLCJhZGIiLCJhcGlMZXZlbCIsImdldEFwaUxldmVsIiwiRXJyb3IiLCJNZWRpYVByb2plY3Rpb25SZWNvcmRlciIsImNvbnN0cnVjdG9yIiwiaXNSdW5uaW5nIiwic3Rkb3V0Iiwic2hlbGwiLCJpbmNsdWRlcyIsInN0YXJ0Iiwib3B0cyIsImNsZWFudXAiLCJmaWxlbmFtZSIsIm1heER1cmF0aW9uU2VjIiwicHJpb3JpdHkiLCJyZXNvbHV0aW9uIiwiYXJncyIsInB1c2giLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsInNldFRpbWVvdXQiLCJwdWxsUmVjZW50IiwicmVjb3JkaW5ncyIsImxzIiwiZHN0UGF0aCIsInBhdGgiLCJqb2luIiwidGVtcERpciIsIm9wZW5EaXIiLCJwdWxsIiwic3RvcCIsIndhaXRGb3JDb25kaXRpb24iLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiZSIsIm1vYmlsZVN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwicmVjb3JkZXIiLCJmbmFtZSIsIm1vbWVudCIsImZvcm1hdCIsImRpZFN0YXJ0IiwibG9nIiwiaW5mbyIsIm1vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZyIsIm1vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJyZWNlbnRSZWNvcmRpbmdQYXRoIiwic2l6ZSIsImZzIiwic3RhdCIsImRlYnVnIiwidG9SZWFkYWJsZVNpemVTdHJpbmciLCJyaW1yYWYiLCJkaXJuYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL21lZGlhLXByb2plY3Rpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyB1dGlsLCBmcywgbmV0LCB0ZW1wRGlyIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBTRVRUSU5HU19IRUxQRVJfUEtHX0lEIH0gZnJvbSAnLi4vYW5kcm9pZC1oZWxwZXJzJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2lvLmFwcGl1bS5zZXR0aW5ncyNpbnRlcm5hbC1hdWRpby0tdmlkZW8tcmVjb3JkaW5nXG5jb25zdCBERUZBVUxUX0VYVCA9ICcubXA0JztcbmNvbnN0IFJFQ09SRElOR19TVEFSVFVQX1RJTUVPVVRfTVMgPSAzICogMTAwMDtcbmNvbnN0IFJFQ09SRElOR19TVE9QX1RJTUVPVVRfTVMgPSAzICogMTAwMDtcbmNvbnN0IE1JTl9BUElfTEVWRUwgPSAyOTtcbmNvbnN0IFJFQ09SRElOR19TRVJWSUNFX05BTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS8ucmVjb3JkZXIuUmVjb3JkZXJTZXJ2aWNlYDtcbmNvbnN0IFJFQ09SRElOR19BQ1RJVklUWV9OQU1FID0gYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0vaW8uYXBwaXVtLnNldHRpbmdzLlNldHRpbmdzYDtcbmNvbnN0IFJFQ09SRElOR19BQ1RJT05fU1RBUlQgPSBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS5yZWNvcmRpbmcuQUNUSU9OX1NUQVJUYDtcbmNvbnN0IFJFQ09SRElOR19BQ1RJT05fU1RPUCA9IGAke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9LnJlY29yZGluZy5BQ1RJT05fU1RPUGA7XG5jb25zdCBSRUNPUkRJTkdTX1JPT1QgPSBgL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS9maWxlc2A7XG5jb25zdCBERUZBVUxUX0ZJTEVOQU1FX0ZPUk1BVCA9ICdZWVlZLU1NLUREVEhILW1tLXNzJztcblxuXG5hc3luYyBmdW5jdGlvbiB1cGxvYWRSZWNvcmRlZE1lZGlhIChsb2NhbEZpbGUsIHJlbW90ZVBhdGggPSBudWxsLCB1cGxvYWRPcHRpb25zID0ge30pIHtcbiAgaWYgKF8uaXNFbXB0eShyZW1vdGVQYXRoKSkge1xuICAgIHJldHVybiAoYXdhaXQgdXRpbC50b0luTWVtb3J5QmFzZTY0KGxvY2FsRmlsZSkpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBjb25zdCB7dXNlciwgcGFzcywgbWV0aG9kLCBoZWFkZXJzLCBmaWxlRmllbGROYW1lLCBmb3JtRmllbGRzfSA9IHVwbG9hZE9wdGlvbnM7XG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgbWV0aG9kOiBtZXRob2QgfHwgJ1BVVCcsXG4gICAgaGVhZGVycyxcbiAgICBmaWxlRmllbGROYW1lLFxuICAgIGZvcm1GaWVsZHMsXG4gIH07XG4gIGlmICh1c2VyICYmIHBhc3MpIHtcbiAgICBvcHRpb25zLmF1dGggPSB7dXNlciwgcGFzc307XG4gIH1cbiAgYXdhaXQgbmV0LnVwbG9hZEZpbGUobG9jYWxGaWxlLCByZW1vdGVQYXRoLCBvcHRpb25zKTtcbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RNZWRpYUV4dGVuc2lvbiAobmFtZSkge1xuICByZXR1cm4gXy50b0xvd2VyKG5hbWUpLmVuZHNXaXRoKERFRkFVTFRfRVhUKSA/IG5hbWUgOiBgJHtuYW1lfSR7REVGQVVMVF9FWFR9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdmVyaWZ5TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nSXNTdXBwb3J0ZWQgKGFkYikge1xuICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpO1xuICBpZiAoYXBpTGV2ZWwgPCBNSU5fQVBJX0xFVkVMKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNZWRpYSBwcm9qZWN0aW9uLWJhc2VkIHJlY29yZGluZyBpcyBub3QgYXZhaWxhYmxlIG9uIEFQSSBMZXZlbCAke2FwaUxldmVsfS4gYCArXG4gICAgICBgTWluaW11bSByZXF1aXJlZCBBUEkgTGV2ZWwgaXMgJHtNSU5fQVBJX0xFVkVMfS5gKTtcbiAgfVxufVxuXG5cbmNsYXNzIE1lZGlhUHJvamVjdGlvblJlY29yZGVyIHtcbiAgY29uc3RydWN0b3IgKGFkYikge1xuICAgIHRoaXMuYWRiID0gYWRiO1xuICB9XG5cbiAgYXN5bmMgaXNSdW5uaW5nICgpIHtcbiAgICBjb25zdCBzdGRvdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbXG4gICAgICAnZHVtcHN5cycsICdhY3Rpdml0eScsICdzZXJ2aWNlcycsIFJFQ09SRElOR19TRVJWSUNFX05BTUVcbiAgICBdKTtcbiAgICByZXR1cm4gc3Rkb3V0LmluY2x1ZGVzKFJFQ09SRElOR19TRVJWSUNFX05BTUUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKG9wdHMgPSB7fSkge1xuICAgIGlmIChhd2FpdCB0aGlzLmlzUnVubmluZygpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jbGVhbnVwKCk7XG4gICAgY29uc3Qge1xuICAgICAgZmlsZW5hbWUsXG4gICAgICBtYXhEdXJhdGlvblNlYyxcbiAgICAgIHByaW9yaXR5LFxuICAgICAgcmVzb2x1dGlvbixcbiAgICB9ID0gb3B0cztcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgJ2FtJywgJ3N0YXJ0JyxcbiAgICAgICctbicsIFJFQ09SRElOR19BQ1RJVklUWV9OQU1FLFxuICAgICAgJy1hJywgUkVDT1JESU5HX0FDVElPTl9TVEFSVCxcbiAgICBdO1xuICAgIGlmIChmaWxlbmFtZSkge1xuICAgICAgYXJncy5wdXNoKCctLWVzJywgJ2ZpbGVuYW1lJywgZmlsZW5hbWUpO1xuICAgIH1cbiAgICBpZiAobWF4RHVyYXRpb25TZWMpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1lcycsICdtYXhfZHVyYXRpb25fc2VjJywgYCR7bWF4RHVyYXRpb25TZWN9YCk7XG4gICAgfVxuICAgIGlmIChwcmlvcml0eSkge1xuICAgICAgYXJncy5wdXNoKCctLWVzJywgJ3ByaW9yaXR5JywgcHJpb3JpdHkpO1xuICAgIH1cbiAgICBpZiAocmVzb2x1dGlvbikge1xuICAgICAgYXJncy5wdXNoKCctLWVzJywgJ3Jlc29sdXRpb24nLCByZXNvbHV0aW9uKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5hZGIuc2hlbGwoYXJncyk7XG4gICAgYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghYXdhaXQgdGhpcy5pc1J1bm5pbmcoKSkge1xuICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKFxuICAgICAgICAgICAgYFRoZSBtZWRpYSBwcm9qZWN0aW9uIHJlY29yZGluZyBpcyBub3QgcnVubmluZyBhZnRlciAke1JFQ09SRElOR19TVEFSVFVQX1RJTUVPVVRfTVN9bXMuIGAgK1xuICAgICAgICAgICAgYFBsZWFzZSBjaGVjayB0aGUgbG9nY2F0IG91dHB1dCBmb3IgbW9yZSBkZXRhaWxzLmBcbiAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9LCBSRUNPUkRJTkdfU1RBUlRVUF9USU1FT1VUX01TKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFudXAgKCkge1xuICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFtgcm0gLWYgJHtSRUNPUkRJTkdTX1JPT1R9LypgXSk7XG4gIH1cblxuICBhc3luYyBwdWxsUmVjZW50ICgpIHtcbiAgICBjb25zdCByZWNvcmRpbmdzID0gYXdhaXQgdGhpcy5hZGIubHMoUkVDT1JESU5HU19ST09ULCBbJy10ciddKTtcbiAgICBpZiAoXy5pc0VtcHR5KHJlY29yZGluZ3MpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkc3RQYXRoID0gcGF0aC5qb2luKGF3YWl0IHRlbXBEaXIub3BlbkRpcigpLCByZWNvcmRpbmdzWzBdKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5wdWxsKGAke1JFQ09SRElOR1NfUk9PVH0vJHtyZWNvcmRpbmdzWzBdfWAsIGRzdFBhdGgpO1xuICAgIHJldHVybiBkc3RQYXRoO1xuICB9XG5cbiAgYXN5bmMgc3RvcCAoKSB7XG4gICAgaWYgKCFhd2FpdCB0aGlzLmlzUnVubmluZygpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5hZGIuc2hlbGwoW1xuICAgICAgJ2FtJywgJ3N0YXJ0JyxcbiAgICAgICctbicsIFJFQ09SRElOR19BQ1RJVklUWV9OQU1FLFxuICAgICAgJy1hJywgUkVDT1JESU5HX0FDVElPTl9TVE9QLFxuICAgIF0pO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+ICEoYXdhaXQgdGhpcy5pc1J1bm5pbmcoKSksIHtcbiAgICAgICAgd2FpdE1zOiBSRUNPUkRJTkdfU1RPUF9USU1FT1VUX01TLFxuICAgICAgICBpbnRlcnZhbE1zOiA1MDAsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgYXR0ZW1wdCB0byBzdG9wIHRoZSBjdXJyZW50IG1lZGlhIHByb2plY3Rpb24gcmVjb3JkaW5nIHRpbWVkIG91dCBhZnRlciBgICtcbiAgICAgICAgYCR7UkVDT1JESU5HX1NUT1BfVElNRU9VVF9NU31tc2BcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdGFydFJlY29yZGluZ09wdGlvbnNcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZz99IHJlc29sdXRpb24gTWF4aW11bSBzdXBwb3J0ZWQgcmVzb2x1dGlvbiBvbi1kZXZpY2UgKERldGVjdGVkXG4gKiBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBhcHAgaXRzZWxmKSwgd2hpY2ggdXN1YWxseSBlcXVhbHMgdG8gRnVsbCBIRCAxOTIweDEwODAgb24gbW9zdFxuICogcGhvbmVzIGhvd2V2ZXIgeW91IGNhbiBjaGFuZ2UgaXQgdG8gZm9sbG93aW5nIHN1cHBvcnRlZCByZXNvbHV0aW9uc1xuICogYXMgd2VsbDogXCIxOTIweDEwODBcIiwgXCIxMjgweDcyMFwiLCBcIjcyMHg0ODBcIiwgXCIzMjB4MjQwXCIsIFwiMTc2eDE0NFwiLlxuICogQHByb3BlcnR5IHtudW1iZXI/fSBtYXhEdXJhdGlvblNlYyBbOTAwXSBEZWZhdWx0IHZhbHVlOiA5MDAgc2Vjb25kcyB3aGljaCBtZWFuc1xuICogbWF4aW11bSBhbGxvd2VkIGR1cmF0aW9uIGlzIDE1IG1pbnV0ZSwgeW91IGNhbiBpbmNyZWFzZSBpdCBpZiB5b3VyIHRlc3QgdGFrZXNcbiAqIGxvbmdlciB0aGFuIHRoYXQuXG4gKiBAcHJvcGVydHkge3N0cmluZz99IHByaW9yaXR5IFtoaWdoXSBNZWFucyByZWNvcmRpbmcgdGhyZWFkIHByaW9yaXR5IGlzIG1heGltdW1cbiAqIGhvd2V2ZXIgaWYgeW91IGZhY2UgcGVyZm9ybWFuY2UgZHJvcHMgZHVyaW5nIHRlc3Rpbmcgd2l0aCByZWNvcmRpbmcgZW5hYmxlZCwgeW91XG4gKiBjYW4gcmVkdWNlIHJlY29yZGluZyBwcmlvcml0eSB0byBcIm5vcm1hbFwiIG9yIFwibG93XCIuXG4gKiBAcHJvcGVydHkge3N0cmluZz99IGZpbGVuYW1lIFlvdSBjYW4gdHlwZSByZWNvcmRpbmcgdmlkZW8gZmlsZSBuYW1lIGFzIHlvdSB3YW50LFxuICogYnV0IHJlY29yZGluZyBjdXJyZW50bHkgc3VwcG9ydHMgb25seSBcIm1wNFwiIGZvcm1hdCBzbyB5b3VyIGZpbGVuYW1lIG11c3QgZW5kIHdpdGggXCIubXA0XCIuXG4gKiBBbiBpbnZhbGlkIGZpbGUgbmFtZSB3aWxsIGZhaWwgdG8gc3RhcnQgdGhlIHJlY29yZGluZy5cbiAqIElmIG5vdCBwcm92aWRlZCB0aGVuIHRoZSBjdXJyZW50IHRpbWVzdGFtcCB3aWxsIGJlIHVzZWQgYXMgZmlsZSBuYW1lLlxuICovXG5cbi8qKlxuICogUmVjb3JkIHRoZSBkaXNwbGF5IG9mIGEgcmVhbCBkZXZpY2VzIHJ1bm5pbmcgQW5kcm9pZCAxMCAoQVBJIGxldmVsIDI5KSBhbmQgaGlnaGVyLlxuICogVGhlIHNjcmVlbiBhY3Rpdml0eSBpcyByZWNvcmRlZCB0byBhIE1QRUctNCBmaWxlLiBBdWRpbyBpcyBhbHNvIHJlY29yZGVkIGJ5IGRlZmF1bHRcbiAqIChvbmx5IGZvciBhcHBzIHRoYXQgYWxsb3cgaXQgaW4gdGhlaXIgbWFuaWZlc3RzKS5cbiAqIElmIGFub3RoZXIgcmVjb3JkaW5nIGhhcyBiZWVuIGFscmVhZHkgc3RhcnRlZCB0aGVuIHRoZSBjb21tYW5kIHdpbGwgZXhpdCBzaWxlbnRseS5cbiAqIFRoZSBwcmV2aW91c2x5IHJlY29yZGVkIHZpZGVvIGZpbGUgaXMgZGVsZXRlZCB3aGVuIGEgbmV3IHJlY29yZGluZyBzZXNzaW9uIGlzIHN0YXJ0ZWQuXG4gKiBSZWNvcmRpbmcgY29udGludWVzIGl0IGlzIHN0b3BwZWQgZXhwbGljaXRseSBvciB1bnRpbCB0aGUgdGltZW91dCBoYXBwZW5zLlxuICpcbiAqIEBwYXJhbSB7P1N0YXJ0UmVjb3JkaW5nT3B0aW9uc30gb3B0aW9ucyBBdmFpbGFibGUgb3B0aW9ucy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGEgbmV3IHJlY29yZGluZyBoYXMgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgcmVjb3JkaW5nIGhhcyBmYWlsZWQgdG8gc3RhcnQgb3IgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcgKG9wdGlvbnMgPSB7fSkge1xuICBhd2FpdCB2ZXJpZnlNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdJc1N1cHBvcnRlZCh0aGlzLmFkYik7XG5cbiAgY29uc3Qge3Jlc29sdXRpb24sIHByaW9yaXR5LCBtYXhEdXJhdGlvblNlYywgZmlsZW5hbWV9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVjb3JkZXIgPSBuZXcgTWVkaWFQcm9qZWN0aW9uUmVjb3JkZXIodGhpcy5hZGIpO1xuICBjb25zdCBmbmFtZSA9IGFkanVzdE1lZGlhRXh0ZW5zaW9uKGZpbGVuYW1lIHx8IG1vbWVudCgpLmZvcm1hdChERUZBVUxUX0ZJTEVOQU1FX0ZPUk1BVCkpO1xuICBjb25zdCBkaWRTdGFydCA9IGF3YWl0IHJlY29yZGVyLnN0YXJ0KHtcbiAgICByZXNvbHV0aW9uLFxuICAgIHByaW9yaXR5LFxuICAgIG1heER1cmF0aW9uU2VjLFxuICAgIGZpbGVuYW1lOiBmbmFtZSxcbiAgfSk7XG4gIGlmIChkaWRTdGFydCkge1xuICAgIHRoaXMubG9nLmluZm8oYEEgbmV3IG1lZGlhIHByb2plY3Rpb24gcmVjb3JkaW5nICcke2ZuYW1lfScgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWRgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdBbm90aGVyIG1lZGlhIHByb2plY3Rpb24gcmVjb3JkaW5nIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuIFRoZXJlIGlzIG5vdGhpbmcgdG8gc3RhcnQnKTtcbiAgfVxuICByZXR1cm4gZGlkU3RhcnQ7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1lZGlhIHByb2plY3Rpb24tYmFzZWQgcmVjb3JkaW5nIGlzIGN1cnJlbnRseSBydW5uaW5nLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGEgcmVjb3JkaW5nIGlzIGluIHByb2dyZXNzLlxuICogQHRocm93cyB7RXJyb3J9IElmIGEgcmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICovXG5jb21tYW5kcy5tb2JpbGVJc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmcgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmcgKCkge1xuICBhd2FpdCB2ZXJpZnlNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdJc1N1cHBvcnRlZCh0aGlzLmFkYik7XG5cbiAgY29uc3QgcmVjb3JkZXIgPSBuZXcgTWVkaWFQcm9qZWN0aW9uUmVjb3JkZXIodGhpcy5hZGIpO1xuICByZXR1cm4gYXdhaXQgcmVjb3JkZXIuaXNSdW5uaW5nKCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0b3BSZWNvcmRpbmdPcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmc/fSByZW1vdGVQYXRoIFRoZSBwYXRoIHRvIHRoZSByZW1vdGUgbG9jYXRpb24sIHdoZXJlIHRoZSByZXN1bHRpbmcgdmlkZW8gc2hvdWxkIGJlIHVwbG9hZGVkLlxuICogVGhlIGZvbGxvd2luZyBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZDogaHR0cC9odHRwcywgZnRwLlxuICogTnVsbCBvciBlbXB0eSBzdHJpbmcgdmFsdWUgKHRoZSBkZWZhdWx0IHNldHRpbmcpIG1lYW5zIHRoZSBjb250ZW50IG9mIHJlc3VsdGluZ1xuICogZmlsZSBzaG91bGQgYmUgZW5jb2RlZCBhcyBCYXNlNjQgYW5kIHBhc3NlZCBhcyB0aGUgZW5kcG9vbnQgcmVzcG9uc2UgdmFsdWUuXG4gKiBBbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24gaWYgdGhlIGdlbmVyYXRlZCBtZWRpYSBmaWxlIGlzIHRvbyBiaWcgdG9cbiAqIGZpdCBpbnRvIHRoZSBhdmFpbGFibGUgcHJvY2VzcyBtZW1vcnkuXG4gKiBAcHJvcGVydHkge3N0cmluZz99IHVzZXIgVGhlIG5hbWUgb2YgdGhlIHVzZXIgZm9yIHRoZSByZW1vdGUgYXV0aGVudGljYXRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZz99IHBhc3MgVGhlIHBhc3N3b3JkIGZvciB0aGUgcmVtb3RlIGF1dGhlbnRpY2F0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmc/fSBtZXRob2QgVGhlIGh0dHAgbXVsdGlwYXJ0IHVwbG9hZCBtZXRob2QgbmFtZS4gVGhlICdQVVQnIG9uZSBpcyB1c2VkIGJ5IGRlZmF1bHQuXG4gKiBAcHJvcGVydHkge09iamVjdD99IGhlYWRlcnMgQWRkaXRpb25hbCBoZWFkZXJzIG1hcHBpbmcgZm9yIG11bHRpcGFydCBodHRwKHMpIHVwbG9hZHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nP30gZmlsZUZpZWxkTmFtZSBbZmlsZV0gVGhlIG5hbWUgb2YgdGhlIGZvcm0gZmllbGQsIHdoZXJlIHRoZSBmaWxlIGNvbnRlbnQgQkxPQiBzaG91bGQgYmUgc3RvcmVkIGZvclxuICogaHR0cChzKSB1cGxvYWRzXG4gKiBAcHJvcGVydHkge09iamVjdHxBcnJheTxQYWlyPj99IGZvcm1GaWVsZHMgQWRkaXRpb25hbCBmb3JtIGZpZWxkcyBmb3IgbXVsdGlwYXJ0IGh0dHAocykgdXBsb2Fkc1xuICovXG5cbi8qKlxuICogU3RvcCBhIG1lZGlhIHByb2plY3Rpb24tYmFzZWQgcmVjb3JkaW5nLlxuICogSWYgbm8gcmVjb3JkaW5nIGhhcyBiZWVuIHN0YXJ0ZWQgYmVmb3JlIHRoZW4gYW4gZXJyb3IgaXMgdGhyb3duLlxuICogSWYgdGhlIHJlY29yZGluZyBoYXMgYmVlbiBhbHJlYWR5IGZpbmlzaGVkIGJlZm9yZSB0aGlzIEFQSSBoYXMgYmVlbiBjYWxsZWRcbiAqIHRoZW4gdGhlIG1vc3QgcmVjZW50IHJlY29yZGVkIGZpbGUgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHs/U3RvcFJlY29yZGluZ09wdGlvbnN9IG9wdGlvbnMgQXZhaWxhYmxlIG9wdGlvbnMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQtZW5jb2RlZCBjb250ZW50IG9mIHRoZSByZWNvcmRlZCBtZWRpYSBmaWxlIGlmICdyZW1vdGVQYXRoJ1xuICogcGFyYW1ldGVyIGlzIGZhbHN5IG9yIGFuIGVtcHR5IHN0cmluZy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgc3RvcHBpbmcgYSByZWNvcmRpbmcsXG4gKiBmZXRjaGluZyB0aGUgY29udGVudCBvZiB0aGUgcmVtb3RlIG1lZGlhIGZpbGUsXG4gKiBvciBpZiBhIHJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqL1xuY29tbWFuZHMubW9iaWxlU3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcgKG9wdGlvbnMgPSB7fSkge1xuICBhd2FpdCB2ZXJpZnlNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdJc1N1cHBvcnRlZCh0aGlzLmFkYik7XG5cbiAgY29uc3QgcmVjb3JkZXIgPSBuZXcgTWVkaWFQcm9qZWN0aW9uUmVjb3JkZXIodGhpcy5hZGIpO1xuICBpZiAoYXdhaXQgcmVjb3JkZXIuc3RvcCgpKSB7XG4gICAgdGhpcy5sb2cuaW5mbygnU3VjY2Vzc2Z1bGx5IHN0b3BwZWQgYSBtZWRpYSBwcm9qZWN0aW9uIHJlY29yZGluZy4gUHVsbGluZyB0aGUgcmVjb3JkZWQgbWVkaWEnKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdNZWRpYSBwcm9qZWN0aW9uIHJlY29yZGluZyBpcyBub3QgcnVubmluZy4gVGhlcmUgaXMgbm90aGluZyB0byBzdG9wJyk7XG4gIH1cbiAgY29uc3QgcmVjZW50UmVjb3JkaW5nUGF0aCA9IGF3YWl0IHJlY29yZGVyLnB1bGxSZWNlbnQoKTtcbiAgaWYgKCFyZWNlbnRSZWNvcmRpbmdQYXRoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyByZWNlbnQgbWVkaWEgcHJvamVjdGlvbiByZWNvcmRpbmcgaGF2ZSBiZWVuIGZvdW5kLiBEaWQgeW91IHN0YXJ0IGFueT9gKTtcbiAgfVxuXG4gIGNvbnN0IHtyZW1vdGVQYXRofSA9IG9wdGlvbnM7XG4gIGlmIChfLmlzRW1wdHkocmVtb3RlUGF0aCkpIHtcbiAgICBjb25zdCB7c2l6ZX0gPSBhd2FpdCBmcy5zdGF0KHJlY2VudFJlY29yZGluZ1BhdGgpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBUaGUgc2l6ZSBvZiB0aGUgcmVzdWx0aW5nIG1lZGlhIHByb2plY3Rpb24gcmVjb3JkaW5nIGlzICR7dXRpbC50b1JlYWRhYmxlU2l6ZVN0cmluZyhzaXplKX1gKTtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB1cGxvYWRSZWNvcmRlZE1lZGlhKHJlY2VudFJlY29yZGluZ1BhdGgsIHJlbW90ZVBhdGgsIG9wdGlvbnMpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZihwYXRoLmRpcm5hbWUocmVjZW50UmVjb3JkaW5nUGF0aCkpO1xuICB9XG59O1xuXG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBLE1BQU1BLFFBQVEsR0FBRyxDQUFDLENBQUM7O0FBQUM7QUFHcEIsTUFBTUMsV0FBVyxHQUFHLE1BQU07QUFDMUIsTUFBTUMsNEJBQTRCLEdBQUcsQ0FBQyxHQUFHLElBQUk7QUFDN0MsTUFBTUMseUJBQXlCLEdBQUcsQ0FBQyxHQUFHLElBQUk7QUFDMUMsTUFBTUMsYUFBYSxHQUFHLEVBQUU7QUFDeEIsTUFBTUMsc0JBQXNCLEdBQUksR0FBRUMsc0NBQXVCLDRCQUEyQjtBQUNwRixNQUFNQyx1QkFBdUIsR0FBSSxHQUFFRCxzQ0FBdUIsOEJBQTZCO0FBQ3ZGLE1BQU1FLHNCQUFzQixHQUFJLEdBQUVGLHNDQUF1Qix5QkFBd0I7QUFDakYsTUFBTUcscUJBQXFCLEdBQUksR0FBRUgsc0NBQXVCLHdCQUF1QjtBQUMvRSxNQUFNSSxlQUFlLEdBQUksb0NBQW1DSixzQ0FBdUIsUUFBTztBQUMxRixNQUFNSyx1QkFBdUIsR0FBRyxxQkFBcUI7QUFHckQsZUFBZUMsbUJBQW1CLENBQUVDLFNBQVMsRUFBRUMsVUFBVSxHQUFHLElBQUksRUFBRUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ3BGLElBQUlDLGVBQUMsQ0FBQ0MsT0FBTyxDQUFDSCxVQUFVLENBQUMsRUFBRTtJQUN6QixPQUFPLENBQUMsTUFBTUksYUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQ04sU0FBUyxDQUFDLEVBQUVPLFFBQVEsRUFBRTtFQUM1RDtFQUVBLE1BQU07SUFBQ0MsSUFBSTtJQUFFQyxJQUFJO0lBQUVDLE1BQU07SUFBRUMsT0FBTztJQUFFQyxhQUFhO0lBQUVDO0VBQVUsQ0FBQyxHQUFHWCxhQUFhO0VBQzlFLE1BQU1ZLE9BQU8s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
|
|
192
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsIkRFRkFVTFRfRVhUIiwiUkVDT1JESU5HX1NUQVJUVVBfVElNRU9VVF9NUyIsIlJFQ09SRElOR19TVE9QX1RJTUVPVVRfTVMiLCJNSU5fQVBJX0xFVkVMIiwiUkVDT1JESU5HX1NFUlZJQ0VfTkFNRSIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJSRUNPUkRJTkdfQUNUSVZJVFlfTkFNRSIsIlJFQ09SRElOR19BQ1RJT05fU1RBUlQiLCJSRUNPUkRJTkdfQUNUSU9OX1NUT1AiLCJSRUNPUkRJTkdTX1JPT1QiLCJERUZBVUxUX0ZJTEVOQU1FX0ZPUk1BVCIsInVwbG9hZFJlY29yZGVkTWVkaWEiLCJsb2NhbEZpbGUiLCJyZW1vdGVQYXRoIiwidXBsb2FkT3B0aW9ucyIsIl8iLCJpc0VtcHR5IiwidXRpbCIsInRvSW5NZW1vcnlCYXNlNjQiLCJ0b1N0cmluZyIsInVzZXIiLCJwYXNzIiwibWV0aG9kIiwiaGVhZGVycyIsImZpbGVGaWVsZE5hbWUiLCJmb3JtRmllbGRzIiwib3B0aW9ucyIsImF1dGgiLCJuZXQiLCJ1cGxvYWRGaWxlIiwiYWRqdXN0TWVkaWFFeHRlbnNpb24iLCJuYW1lIiwidG9Mb3dlciIsImVuZHNXaXRoIiwidmVyaWZ5TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nSXNTdXBwb3J0ZWQiLCJhZGIiLCJhcGlMZXZlbCIsImdldEFwaUxldmVsIiwiRXJyb3IiLCJNZWRpYVByb2plY3Rpb25SZWNvcmRlciIsImNvbnN0cnVjdG9yIiwiaXNSdW5uaW5nIiwic3Rkb3V0Iiwic2hlbGwiLCJpbmNsdWRlcyIsInN0YXJ0Iiwib3B0cyIsImNsZWFudXAiLCJmaWxlbmFtZSIsIm1heER1cmF0aW9uU2VjIiwicHJpb3JpdHkiLCJyZXNvbHV0aW9uIiwiYXJncyIsInB1c2giLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsInNldFRpbWVvdXQiLCJwdWxsUmVjZW50IiwicmVjb3JkaW5ncyIsImxzIiwiZHN0UGF0aCIsInBhdGgiLCJqb2luIiwidGVtcERpciIsIm9wZW5EaXIiLCJwdWxsIiwic3RvcCIsIndhaXRGb3JDb25kaXRpb24iLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiZSIsIm1vYmlsZVN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwicmVjb3JkZXIiLCJmbmFtZSIsIm1vbWVudCIsImZvcm1hdCIsImRpZFN0YXJ0IiwibG9nIiwiaW5mbyIsIm1vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZyIsIm1vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJyZWNlbnRSZWNvcmRpbmdQYXRoIiwic2l6ZSIsImZzIiwic3RhdCIsImRlYnVnIiwidG9SZWFkYWJsZVNpemVTdHJpbmciLCJyaW1yYWYiLCJkaXJuYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL21lZGlhLXByb2plY3Rpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyB1dGlsLCBmcywgbmV0LCB0ZW1wRGlyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgU0VUVElOR1NfSEVMUEVSX1BLR19JRCB9IGZyb20gJy4uL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9pby5hcHBpdW0uc2V0dGluZ3MjaW50ZXJuYWwtYXVkaW8tLXZpZGVvLXJlY29yZGluZ1xuY29uc3QgREVGQVVMVF9FWFQgPSAnLm1wNCc7XG5jb25zdCBSRUNPUkRJTkdfU1RBUlRVUF9USU1FT1VUX01TID0gMyAqIDEwMDA7XG5jb25zdCBSRUNPUkRJTkdfU1RPUF9USU1FT1VUX01TID0gMyAqIDEwMDA7XG5jb25zdCBNSU5fQVBJX0xFVkVMID0gMjk7XG5jb25zdCBSRUNPUkRJTkdfU0VSVklDRV9OQU1FID0gYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0vLnJlY29yZGVyLlJlY29yZGVyU2VydmljZWA7XG5jb25zdCBSRUNPUkRJTkdfQUNUSVZJVFlfTkFNRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9L2lvLmFwcGl1bS5zZXR0aW5ncy5TZXR0aW5nc2A7XG5jb25zdCBSRUNPUkRJTkdfQUNUSU9OX1NUQVJUID0gYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0ucmVjb3JkaW5nLkFDVElPTl9TVEFSVGA7XG5jb25zdCBSRUNPUkRJTkdfQUNUSU9OX1NUT1AgPSBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS5yZWNvcmRpbmcuQUNUSU9OX1NUT1BgO1xuY29uc3QgUkVDT1JESU5HU19ST09UID0gYC9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhLyR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0vZmlsZXNgO1xuY29uc3QgREVGQVVMVF9GSUxFTkFNRV9GT1JNQVQgPSAnWVlZWS1NTS1ERFRISC1tbS1zcyc7XG5cblxuYXN5bmMgZnVuY3Rpb24gdXBsb2FkUmVjb3JkZWRNZWRpYSAobG9jYWxGaWxlLCByZW1vdGVQYXRoID0gbnVsbCwgdXBsb2FkT3B0aW9ucyA9IHt9KSB7XG4gIGlmIChfLmlzRW1wdHkocmVtb3RlUGF0aCkpIHtcbiAgICByZXR1cm4gKGF3YWl0IHV0aWwudG9Jbk1lbW9yeUJhc2U2NChsb2NhbEZpbGUpKS50b1N0cmluZygpO1xuICB9XG5cbiAgY29uc3Qge3VzZXIsIHBhc3MsIG1ldGhvZCwgaGVhZGVycywgZmlsZUZpZWxkTmFtZSwgZm9ybUZpZWxkc30gPSB1cGxvYWRPcHRpb25zO1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIG1ldGhvZDogbWV0aG9kIHx8ICdQVVQnLFxuICAgIGhlYWRlcnMsXG4gICAgZmlsZUZpZWxkTmFtZSxcbiAgICBmb3JtRmllbGRzLFxuICB9O1xuICBpZiAodXNlciAmJiBwYXNzKSB7XG4gICAgb3B0aW9ucy5hdXRoID0ge3VzZXIsIHBhc3N9O1xuICB9XG4gIGF3YWl0IG5ldC51cGxvYWRGaWxlKGxvY2FsRmlsZSwgcmVtb3RlUGF0aCwgb3B0aW9ucyk7XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gYWRqdXN0TWVkaWFFeHRlbnNpb24gKG5hbWUpIHtcbiAgcmV0dXJuIF8udG9Mb3dlcihuYW1lKS5lbmRzV2l0aChERUZBVUxUX0VYVCkgPyBuYW1lIDogYCR7bmFtZX0ke0RFRkFVTFRfRVhUfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeU1lZGlhUHJvamVjdGlvblJlY29yZGluZ0lzU3VwcG9ydGVkIChhZGIpIHtcbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgaWYgKGFwaUxldmVsIDwgTUlOX0FQSV9MRVZFTCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWVkaWEgcHJvamVjdGlvbi1iYXNlZCByZWNvcmRpbmcgaXMgbm90IGF2YWlsYWJsZSBvbiBBUEkgTGV2ZWwgJHthcGlMZXZlbH0uIGAgK1xuICAgICAgYE1pbmltdW0gcmVxdWlyZWQgQVBJIExldmVsIGlzICR7TUlOX0FQSV9MRVZFTH0uYCk7XG4gIH1cbn1cblxuXG5jbGFzcyBNZWRpYVByb2plY3Rpb25SZWNvcmRlciB7XG4gIGNvbnN0cnVjdG9yIChhZGIpIHtcbiAgICB0aGlzLmFkYiA9IGFkYjtcbiAgfVxuXG4gIGFzeW5jIGlzUnVubmluZyAoKSB7XG4gICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoW1xuICAgICAgJ2R1bXBzeXMnLCAnYWN0aXZpdHknLCAnc2VydmljZXMnLCBSRUNPUkRJTkdfU0VSVklDRV9OQU1FXG4gICAgXSk7XG4gICAgcmV0dXJuIHN0ZG91dC5pbmNsdWRlcyhSRUNPUkRJTkdfU0VSVklDRV9OQU1FKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0IChvcHRzID0ge30pIHtcbiAgICBpZiAoYXdhaXQgdGhpcy5pc1J1bm5pbmcoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuY2xlYW51cCgpO1xuICAgIGNvbnN0IHtcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgbWF4RHVyYXRpb25TZWMsXG4gICAgICBwcmlvcml0eSxcbiAgICAgIHJlc29sdXRpb24sXG4gICAgfSA9IG9wdHM7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICdhbScsICdzdGFydCcsXG4gICAgICAnLW4nLCBSRUNPUkRJTkdfQUNUSVZJVFlfTkFNRSxcbiAgICAgICctYScsIFJFQ09SRElOR19BQ1RJT05fU1RBUlQsXG4gICAgXTtcbiAgICBpZiAoZmlsZW5hbWUpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1lcycsICdmaWxlbmFtZScsIGZpbGVuYW1lKTtcbiAgICB9XG4gICAgaWYgKG1heER1cmF0aW9uU2VjKSB7XG4gICAgICBhcmdzLnB1c2goJy0tZXMnLCAnbWF4X2R1cmF0aW9uX3NlYycsIGAke21heER1cmF0aW9uU2VjfWApO1xuICAgIH1cbiAgICBpZiAocHJpb3JpdHkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1lcycsICdwcmlvcml0eScsIHByaW9yaXR5KTtcbiAgICB9XG4gICAgaWYgKHJlc29sdXRpb24pIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1lcycsICdyZXNvbHV0aW9uJywgcmVzb2x1dGlvbik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKGFyZ3MpO1xuICAgIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoIWF3YWl0IHRoaXMuaXNSdW5uaW5nKCkpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUaGUgbWVkaWEgcHJvamVjdGlvbiByZWNvcmRpbmcgaXMgbm90IHJ1bm5pbmcgYWZ0ZXIgJHtSRUNPUkRJTkdfU1RBUlRVUF9USU1FT1VUX01TfW1zLiBgICtcbiAgICAgICAgICAgIGBQbGVhc2UgY2hlY2sgdGhlIGxvZ2NhdCBvdXRwdXQgZm9yIG1vcmUgZGV0YWlscy5gXG4gICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSwgUkVDT1JESU5HX1NUQVJUVVBfVElNRU9VVF9NUyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBjbGVhbnVwICgpIHtcbiAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbYHJtIC1mICR7UkVDT1JESU5HU19ST09UfS8qYF0pO1xuICB9XG5cbiAgYXN5bmMgcHVsbFJlY2VudCAoKSB7XG4gICAgY29uc3QgcmVjb3JkaW5ncyA9IGF3YWl0IHRoaXMuYWRiLmxzKFJFQ09SRElOR1NfUk9PVCwgWyctdHInXSk7XG4gICAgaWYgKF8uaXNFbXB0eShyZWNvcmRpbmdzKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZHN0UGF0aCA9IHBhdGguam9pbihhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKSwgcmVjb3JkaW5nc1swXSk7XG4gICAgYXdhaXQgdGhpcy5hZGIucHVsbChgJHtSRUNPUkRJTkdTX1JPT1R9LyR7cmVjb3JkaW5nc1swXX1gLCBkc3RQYXRoKTtcbiAgICByZXR1cm4gZHN0UGF0aDtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKCkge1xuICAgIGlmICghYXdhaXQgdGhpcy5pc1J1bm5pbmcoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFtcbiAgICAgICdhbScsICdzdGFydCcsXG4gICAgICAnLW4nLCBSRUNPUkRJTkdfQUNUSVZJVFlfTkFNRSxcbiAgICAgICctYScsIFJFQ09SRElOR19BQ1RJT05fU1RPUCxcbiAgICBdKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiAhKGF3YWl0IHRoaXMuaXNSdW5uaW5nKCkpLCB7XG4gICAgICAgIHdhaXRNczogUkVDT1JESU5HX1NUT1BfVElNRU9VVF9NUyxcbiAgICAgICAgaW50ZXJ2YWxNczogNTAwLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIGF0dGVtcHQgdG8gc3RvcCB0aGUgY3VycmVudCBtZWRpYSBwcm9qZWN0aW9uIHJlY29yZGluZyB0aW1lZCBvdXQgYWZ0ZXIgYCArXG4gICAgICAgIGAke1JFQ09SRElOR19TVE9QX1RJTUVPVVRfTVN9bXNgXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3RhcnRSZWNvcmRpbmdPcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmc/fSByZXNvbHV0aW9uIE1heGltdW0gc3VwcG9ydGVkIHJlc29sdXRpb24gb24tZGV2aWNlIChEZXRlY3RlZFxuICogYXV0b21hdGljYWxseSBieSB0aGUgYXBwIGl0c2VsZiksIHdoaWNoIHVzdWFsbHkgZXF1YWxzIHRvIEZ1bGwgSEQgMTkyMHgxMDgwIG9uIG1vc3RcbiAqIHBob25lcyBob3dldmVyIHlvdSBjYW4gY2hhbmdlIGl0IHRvIGZvbGxvd2luZyBzdXBwb3J0ZWQgcmVzb2x1dGlvbnNcbiAqIGFzIHdlbGw6IFwiMTkyMHgxMDgwXCIsIFwiMTI4MHg3MjBcIiwgXCI3MjB4NDgwXCIsIFwiMzIweDI0MFwiLCBcIjE3NngxNDRcIi5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyP30gbWF4RHVyYXRpb25TZWMgWzkwMF0gRGVmYXVsdCB2YWx1ZTogOTAwIHNlY29uZHMgd2hpY2ggbWVhbnNcbiAqIG1heGltdW0gYWxsb3dlZCBkdXJhdGlvbiBpcyAxNSBtaW51dGUsIHlvdSBjYW4gaW5jcmVhc2UgaXQgaWYgeW91ciB0ZXN0IHRha2VzXG4gKiBsb25nZXIgdGhhbiB0aGF0LlxuICogQHByb3BlcnR5IHtzdHJpbmc/fSBwcmlvcml0eSBbaGlnaF0gTWVhbnMgcmVjb3JkaW5nIHRocmVhZCBwcmlvcml0eSBpcyBtYXhpbXVtXG4gKiBob3dldmVyIGlmIHlvdSBmYWNlIHBlcmZvcm1hbmNlIGRyb3BzIGR1cmluZyB0ZXN0aW5nIHdpdGggcmVjb3JkaW5nIGVuYWJsZWQsIHlvdVxuICogY2FuIHJlZHVjZSByZWNvcmRpbmcgcHJpb3JpdHkgdG8gXCJub3JtYWxcIiBvciBcImxvd1wiLlxuICogQHByb3BlcnR5IHtzdHJpbmc/fSBmaWxlbmFtZSBZb3UgY2FuIHR5cGUgcmVjb3JkaW5nIHZpZGVvIGZpbGUgbmFtZSBhcyB5b3Ugd2FudCxcbiAqIGJ1dCByZWNvcmRpbmcgY3VycmVudGx5IHN1cHBvcnRzIG9ubHkgXCJtcDRcIiBmb3JtYXQgc28geW91ciBmaWxlbmFtZSBtdXN0IGVuZCB3aXRoIFwiLm1wNFwiLlxuICogQW4gaW52YWxpZCBmaWxlIG5hbWUgd2lsbCBmYWlsIHRvIHN0YXJ0IHRoZSByZWNvcmRpbmcuXG4gKiBJZiBub3QgcHJvdmlkZWQgdGhlbiB0aGUgY3VycmVudCB0aW1lc3RhbXAgd2lsbCBiZSB1c2VkIGFzIGZpbGUgbmFtZS5cbiAqL1xuXG4vKipcbiAqIFJlY29yZCB0aGUgZGlzcGxheSBvZiBhIHJlYWwgZGV2aWNlcyBydW5uaW5nIEFuZHJvaWQgMTAgKEFQSSBsZXZlbCAyOSkgYW5kIGhpZ2hlci5cbiAqIFRoZSBzY3JlZW4gYWN0aXZpdHkgaXMgcmVjb3JkZWQgdG8gYSBNUEVHLTQgZmlsZS4gQXVkaW8gaXMgYWxzbyByZWNvcmRlZCBieSBkZWZhdWx0XG4gKiAob25seSBmb3IgYXBwcyB0aGF0IGFsbG93IGl0IGluIHRoZWlyIG1hbmlmZXN0cykuXG4gKiBJZiBhbm90aGVyIHJlY29yZGluZyBoYXMgYmVlbiBhbHJlYWR5IHN0YXJ0ZWQgdGhlbiB0aGUgY29tbWFuZCB3aWxsIGV4aXQgc2lsZW50bHkuXG4gKiBUaGUgcHJldmlvdXNseSByZWNvcmRlZCB2aWRlbyBmaWxlIGlzIGRlbGV0ZWQgd2hlbiBhIG5ldyByZWNvcmRpbmcgc2Vzc2lvbiBpcyBzdGFydGVkLlxuICogUmVjb3JkaW5nIGNvbnRpbnVlcyBpdCBpcyBzdG9wcGVkIGV4cGxpY2l0bHkgb3IgdW50aWwgdGhlIHRpbWVvdXQgaGFwcGVucy5cbiAqXG4gKiBAcGFyYW0gez9TdGFydFJlY29yZGluZ09wdGlvbnN9IG9wdGlvbnMgQXZhaWxhYmxlIG9wdGlvbnMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBhIG5ldyByZWNvcmRpbmcgaGFzIHN1Y2Nlc3NmdWxseSBzdGFydGVkLlxuICogQHRocm93cyB7RXJyb3J9IElmIHJlY29yZGluZyBoYXMgZmFpbGVkIHRvIHN0YXJ0IG9yIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICovXG5jb21tYW5kcy5tb2JpbGVTdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIChvcHRpb25zID0ge30pIHtcbiAgYXdhaXQgdmVyaWZ5TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nSXNTdXBwb3J0ZWQodGhpcy5hZGIpO1xuXG4gIGNvbnN0IHtyZXNvbHV0aW9uLCBwcmlvcml0eSwgbWF4RHVyYXRpb25TZWMsIGZpbGVuYW1lfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlY29yZGVyID0gbmV3IE1lZGlhUHJvamVjdGlvblJlY29yZGVyKHRoaXMuYWRiKTtcbiAgY29uc3QgZm5hbWUgPSBhZGp1c3RNZWRpYUV4dGVuc2lvbihmaWxlbmFtZSB8fCBtb21lbnQoKS5mb3JtYXQoREVGQVVMVF9GSUxFTkFNRV9GT1JNQVQpKTtcbiAgY29uc3QgZGlkU3RhcnQgPSBhd2FpdCByZWNvcmRlci5zdGFydCh7XG4gICAgcmVzb2x1dGlvbixcbiAgICBwcmlvcml0eSxcbiAgICBtYXhEdXJhdGlvblNlYyxcbiAgICBmaWxlbmFtZTogZm5hbWUsXG4gIH0pO1xuICBpZiAoZGlkU3RhcnQpIHtcbiAgICB0aGlzLmxvZy5pbmZvKGBBIG5ldyBtZWRpYSBwcm9qZWN0aW9uIHJlY29yZGluZyAnJHtmbmFtZX0nIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzdGFydGVkYCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5sb2cuaW5mbygnQW5vdGhlciBtZWRpYSBwcm9qZWN0aW9uIHJlY29yZGluZyBpcyBhbHJlYWR5IGluIHByb2dyZXNzLiBUaGVyZSBpcyBub3RoaW5nIHRvIHN0YXJ0Jyk7XG4gIH1cbiAgcmV0dXJuIGRpZFN0YXJ0O1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtZWRpYSBwcm9qZWN0aW9uLWJhc2VkIHJlY29yZGluZyBpcyBjdXJyZW50bHkgcnVubmluZy5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBhIHJlY29yZGluZyBpcyBpbiBwcm9ncmVzcy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBhIHJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqL1xuY29tbWFuZHMubW9iaWxlSXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nICgpIHtcbiAgYXdhaXQgdmVyaWZ5TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nSXNTdXBwb3J0ZWQodGhpcy5hZGIpO1xuXG4gIGNvbnN0IHJlY29yZGVyID0gbmV3IE1lZGlhUHJvamVjdGlvblJlY29yZGVyKHRoaXMuYWRiKTtcbiAgcmV0dXJuIGF3YWl0IHJlY29yZGVyLmlzUnVubmluZygpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdG9wUmVjb3JkaW5nT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nP30gcmVtb3RlUGF0aCBUaGUgcGF0aCB0byB0aGUgcmVtb3RlIGxvY2F0aW9uLCB3aGVyZSB0aGUgcmVzdWx0aW5nIHZpZGVvIHNob3VsZCBiZSB1cGxvYWRlZC5cbiAqIFRoZSBmb2xsb3dpbmcgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQ6IGh0dHAvaHR0cHMsIGZ0cC5cbiAqIE51bGwgb3IgZW1wdHkgc3RyaW5nIHZhbHVlICh0aGUgZGVmYXVsdCBzZXR0aW5nKSBtZWFucyB0aGUgY29udGVudCBvZiByZXN1bHRpbmdcbiAqIGZpbGUgc2hvdWxkIGJlIGVuY29kZWQgYXMgQmFzZTY0IGFuZCBwYXNzZWQgYXMgdGhlIGVuZHBvb250IHJlc3BvbnNlIHZhbHVlLlxuICogQW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duIGlmIHRoZSBnZW5lcmF0ZWQgbWVkaWEgZmlsZSBpcyB0b28gYmlnIHRvXG4gKiBmaXQgaW50byB0aGUgYXZhaWxhYmxlIHByb2Nlc3MgbWVtb3J5LlxuICogQHByb3BlcnR5IHtzdHJpbmc/fSB1c2VyIFRoZSBuYW1lIG9mIHRoZSB1c2VyIGZvciB0aGUgcmVtb3RlIGF1dGhlbnRpY2F0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmc/fSBwYXNzIFRoZSBwYXNzd29yZCBmb3IgdGhlIHJlbW90ZSBhdXRoZW50aWNhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nP30gbWV0aG9kIFRoZSBodHRwIG11bHRpcGFydCB1cGxvYWQgbWV0aG9kIG5hbWUuIFRoZSAnUFVUJyBvbmUgaXMgdXNlZCBieSBkZWZhdWx0LlxuICogQHByb3BlcnR5IHtPYmplY3Q/fSBoZWFkZXJzIEFkZGl0aW9uYWwgaGVhZGVycyBtYXBwaW5nIGZvciBtdWx0aXBhcnQgaHR0cChzKSB1cGxvYWRzXG4gKiBAcHJvcGVydHkge3N0cmluZz99IGZpbGVGaWVsZE5hbWUgW2ZpbGVdIFRoZSBuYW1lIG9mIHRoZSBmb3JtIGZpZWxkLCB3aGVyZSB0aGUgZmlsZSBjb250ZW50IEJMT0Igc2hvdWxkIGJlIHN0b3JlZCBmb3JcbiAqIGh0dHAocykgdXBsb2Fkc1xuICogQHByb3BlcnR5IHtPYmplY3R8QXJyYXk8UGFpcj4/fSBmb3JtRmllbGRzIEFkZGl0aW9uYWwgZm9ybSBmaWVsZHMgZm9yIG11bHRpcGFydCBodHRwKHMpIHVwbG9hZHNcbiAqL1xuXG4vKipcbiAqIFN0b3AgYSBtZWRpYSBwcm9qZWN0aW9uLWJhc2VkIHJlY29yZGluZy5cbiAqIElmIG5vIHJlY29yZGluZyBoYXMgYmVlbiBzdGFydGVkIGJlZm9yZSB0aGVuIGFuIGVycm9yIGlzIHRocm93bi5cbiAqIElmIHRoZSByZWNvcmRpbmcgaGFzIGJlZW4gYWxyZWFkeSBmaW5pc2hlZCBiZWZvcmUgdGhpcyBBUEkgaGFzIGJlZW4gY2FsbGVkXG4gKiB0aGVuIHRoZSBtb3N0IHJlY2VudCByZWNvcmRlZCBmaWxlIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7P1N0b3BSZWNvcmRpbmdPcHRpb25zfSBvcHRpb25zIEF2YWlsYWJsZSBvcHRpb25zLlxuICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0LWVuY29kZWQgY29udGVudCBvZiB0aGUgcmVjb3JkZWQgbWVkaWEgZmlsZSBpZiAncmVtb3RlUGF0aCdcbiAqIHBhcmFtZXRlciBpcyBmYWxzeSBvciBhbiBlbXB0eSBzdHJpbmcuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHN0b3BwaW5nIGEgcmVjb3JkaW5nLFxuICogZmV0Y2hpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIHJlbW90ZSBtZWRpYSBmaWxlLFxuICogb3IgaWYgYSByZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIChvcHRpb25zID0ge30pIHtcbiAgYXdhaXQgdmVyaWZ5TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nSXNTdXBwb3J0ZWQodGhpcy5hZGIpO1xuXG4gIGNvbnN0IHJlY29yZGVyID0gbmV3IE1lZGlhUHJvamVjdGlvblJlY29yZGVyKHRoaXMuYWRiKTtcbiAgaWYgKGF3YWl0IHJlY29yZGVyLnN0b3AoKSkge1xuICAgIHRoaXMubG9nLmluZm8oJ1N1Y2Nlc3NmdWxseSBzdG9wcGVkIGEgbWVkaWEgcHJvamVjdGlvbiByZWNvcmRpbmcuIFB1bGxpbmcgdGhlIHJlY29yZGVkIG1lZGlhJyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5sb2cuaW5mbygnTWVkaWEgcHJvamVjdGlvbiByZWNvcmRpbmcgaXMgbm90IHJ1bm5pbmcuIFRoZXJlIGlzIG5vdGhpbmcgdG8gc3RvcCcpO1xuICB9XG4gIGNvbnN0IHJlY2VudFJlY29yZGluZ1BhdGggPSBhd2FpdCByZWNvcmRlci5wdWxsUmVjZW50KCk7XG4gIGlmICghcmVjZW50UmVjb3JkaW5nUGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gcmVjZW50IG1lZGlhIHByb2plY3Rpb24gcmVjb3JkaW5nIGhhdmUgYmVlbiBmb3VuZC4gRGlkIHlvdSBzdGFydCBhbnk/YCk7XG4gIH1cblxuICBjb25zdCB7cmVtb3RlUGF0aH0gPSBvcHRpb25zO1xuICBpZiAoXy5pc0VtcHR5KHJlbW90ZVBhdGgpKSB7XG4gICAgY29uc3Qge3NpemV9ID0gYXdhaXQgZnMuc3RhdChyZWNlbnRSZWNvcmRpbmdQYXRoKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIHNpemUgb2YgdGhlIHJlc3VsdGluZyBtZWRpYSBwcm9qZWN0aW9uIHJlY29yZGluZyBpcyAke3V0aWwudG9SZWFkYWJsZVNpemVTdHJpbmcoc2l6ZSl9YCk7XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdXBsb2FkUmVjb3JkZWRNZWRpYShyZWNlbnRSZWNvcmRpbmdQYXRoLCByZW1vdGVQYXRoLCBvcHRpb25zKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYocGF0aC5kaXJuYW1lKHJlY2VudFJlY29yZGluZ1BhdGgpKTtcbiAgfVxufTtcblxuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQSxNQUFNQSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQUM7QUFHcEIsTUFBTUMsV0FBVyxHQUFHLE1BQU07QUFDMUIsTUFBTUMsNEJBQTRCLEdBQUcsQ0FBQyxHQUFHLElBQUk7QUFDN0MsTUFBTUMseUJBQXlCLEdBQUcsQ0FBQyxHQUFHLElBQUk7QUFDMUMsTUFBTUMsYUFBYSxHQUFHLEVBQUU7QUFDeEIsTUFBTUMsc0JBQXNCLEdBQUksR0FBRUMsc0NBQXVCLDRCQUEyQjtBQUNwRixNQUFNQyx1QkFBdUIsR0FBSSxHQUFFRCxzQ0FBdUIsOEJBQTZCO0FBQ3ZGLE1BQU1FLHNCQUFzQixHQUFJLEdBQUVGLHNDQUF1Qix5QkFBd0I7QUFDakYsTUFBTUcscUJBQXFCLEdBQUksR0FBRUgsc0NBQXVCLHdCQUF1QjtBQUMvRSxNQUFNSSxlQUFlLEdBQUksb0NBQW1DSixzQ0FBdUIsUUFBTztBQUMxRixNQUFNSyx1QkFBdUIsR0FBRyxxQkFBcUI7QUFHckQsZUFBZUMsbUJBQW1CLENBQUVDLFNBQVMsRUFBRUMsVUFBVSxHQUFHLElBQUksRUFBRUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ3BGLElBQUlDLGVBQUMsQ0FBQ0MsT0FBTyxDQUFDSCxVQUFVLENBQUMsRUFBRTtJQUN6QixPQUFPLENBQUMsTUFBTUksYUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQ04sU0FBUyxDQUFDLEVBQUVPLFFBQVEsRUFBRTtFQUM1RDtFQUVBLE1BQU07SUFBQ0MsSUFBSTtJQUFFQyxJQUFJO0lBQUVDLE1BQU07SUFBRUMsT0FBTztJQUFFQyxhQUFhO0lBQUVDO0VBQVUsQ0FBQyxHQUFHWCxhQUFhO0VBQzlFLE1BQU1ZLE9BQU8s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
|