appium-xcuitest-driver 4.12.2 → 4.12.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 +2 -0
- package/build/lib/commands/context.js +2 -1
- package/build/lib/commands/context.js.map +1 -1
- package/build/lib/desired-caps.js +10 -4
- package/build/lib/desired-caps.js.map +1 -1
- package/build/lib/device-log/ios-crash-log.js +2 -1
- package/build/lib/device-log/ios-crash-log.js.map +1 -1
- package/build/lib/driver.js +2 -1
- package/build/lib/driver.js.map +1 -1
- package/npm-shrinkwrap.json +140 -281
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -355,6 +355,7 @@ extensions.onPageChange = async function onPageChange(pageChangeNotification) {
|
|
|
355
355
|
}
|
|
356
356
|
}
|
|
357
357
|
}
|
|
358
|
+
|
|
358
359
|
return false;
|
|
359
360
|
}
|
|
360
361
|
for (const page of pageArray) {
|
|
@@ -437,4 +438,4 @@ extensions.onPageChange = async function onPageChange(pageChangeNotification) {
|
|
|
437
438
|
Object.assign(commands, extensions, helpers);
|
|
438
439
|
var _default = commands;
|
|
439
440
|
exports.default = _default;
|
|
440
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOQVRJVkVfV0lOIiwiV0VCVklFV19XSU4iLCJXRUJWSUVXX0JBU0UiLCJSRUNFTlRfV0VCVklFV19ERVRFQ1RJT05fVElNRU9VVF9NUyIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRDdXJyZW50Q29udGV4dCIsImN1ckNvbnRleHQiLCJnZXRDb250ZXh0c0FuZFZpZXdzIiwidXNlVXJsIiwibG9nIiwiZGVidWciLCJ3ZWJ2aWV3cyIsImxpc3RXZWJGcmFtZXMiLCJjdHhzIiwiaWQiLCJ2aWV3IiwiY29udGV4dHMiLCJwdXNoIiwidG9TdHJpbmciLCJ1c2VOZXdTYWZhcmkiLCJpc1JlYWxEZXZpY2UiLCJvcHRzIiwic2FmYXJpIiwiYWN0aXZhdGVSZWNlbnRXZWJ2aWV3IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0Iiwic3BpblRpbWVNcyIsInNwaW5IYW5kbGVzIiwiY29udGV4dElkIiwiZ2V0UmVjZW50V2Vidmlld0NvbnRleHRJZCIsImVyciIsIm1lc3NhZ2UiLCJpbmNsdWRlcyIsImVycm9yIiwiRXJyb3IiLCJzdGFjayIsInNldENvbnRleHQiLCJyZW1vdGUiLCJjYW5jZWxQYWdlTG9hZCIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ3YXJuIiwiQiIsImRlbGF5IiwiZWxlbWVudCIsImZpbmRVSUVsZW1lbnRPckVsZW1lbnRzIiwibmF0aXZlQ2xpY2siLCJzdG9wUmVtb3RlIiwiY2xvc2VXaW5kb3dCZWZvcmVEaXNjb25uZWN0aW5nIiwiZXJyb3JBbmRUaHJvdyIsImNsb3NlV2luZG93IiwiZGlzY29ubmVjdCIsImN1cldlYkZyYW1lcyIsImN1cldlYkNvb3JkcyIsInNldEN1cnJlbnRVcmwiLCJ1cmwiLCJfY3VycmVudFVybCIsImdldEN1cnJlbnRVcmwiLCJ0aXRsZVJlZ0V4cCIsInVybFJlZ0V4cCIsIl8iLCJpc1JlZ0V4cCIsImVycm9ycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiY3VycmVudFVybCIsImZpbHRlciIsImN0eCIsImZpbmQiLCJ0aXRsZSIsInRlc3QiLCJpc1dlYkNvbnRleHQiLCJpc1dlYnZpZXciLCJnZXROZXdSZW1vdGVEZWJ1Z2dlciIsInNvY2tldFBhdGgiLCJkZXZpY2UiLCJnZXRXZWJJbnNwZWN0b3JTb2NrZXQiLCJjcmVhdGVSZW1vdGVEZWJ1Z2dlciIsImJ1bmRsZUlkIiwiYWRkaXRpb25hbEJ1bmRsZUlkcyIsImFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzIiwiaXNTYWZhcmkiLCJpbmNsdWRlU2FmYXJpIiwiaW5jbHVkZVNhZmFyaUluV2Vidmlld3MiLCJwYWdlTG9hZE1zIiwicGxhdGZvcm1WZXJzaW9uIiwicmVtb3RlRGVidWdQcm94eSIsImdhcmJhZ2VDb2xsZWN0T25FeGVjdXRlIiwidXRpbCIsImhhc1ZhbHVlIiwic2FmYXJpR2FyYmFnZUNvbGxlY3QiLCJ1ZGlkIiwibG9nQWxsQ29tbXVuaWNhdGlvbiIsInNhZmFyaUxvZ0FsbENvbW11bmljYXRpb24iLCJsb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCIsInNhZmFyaUxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwic29ja2V0Q2h1bmtTaXplIiwic2FmYXJpU29ja2V0Q2h1bmtTaXplIiwid2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGgiLCJzYWZhcmlXZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aCIsIm5hbWUiLCJjYWxsYmFjayIsInNraXBSZWFkeUNoZWNrIiwiYWxyZWFkeUluQ29udGV4dCIsImRlc2lyZWQiLCJjdXJyZW50IiwiaXNOYXRpdmVDb250ZXh0IiwiY29udGV4dCIsInJlcGxhY2UiLCJpc1VuZGVmaW5lZCIsImdldENvbnRleHRzIiwiTm9TdWNoQ29udGV4dEVycm9yIiwib2xkQ29udGV4dCIsImN1cldpbmRvd0hhbmRsZSIsImFwcElkS2V5IiwicGFnZUlkS2V5IiwibWFwIiwic3BsaXQiLCJwYXJzZUludCIsInNlbGVjdGluZ05ld1BhZ2UiLCJzZWxlY3RQYWdlIiwiZW5hYmxlUGVyZm9ybWFuY2VMb2dnaW5nIiwibG9ncyIsInBlcmZvcm1hbmNlIiwiSU9TUGVyZm9ybWFuY2VMb2ciLCJzdGFydENhcHR1cmUiLCJzYWZhcmlDb25zb2xlIiwic3RhcnRDb25zb2xlIiwiYWRkTG9nTGluZSIsImJpbmQiLCJzYWZhcmlOZXR3b3JrIiwic3RhcnROZXR3b3JrIiwiY29ubmVjdFRvUmVtb3RlRGVidWdnZXIiLCJvbiIsIlJlbW90ZURlYnVnZ2VyIiwiRVZFTlRfUEFHRV9DSEFOR0UiLCJvblBhZ2VDaGFuZ2UiLCJFVkVOVF9GUkFNRVNfREVUQUNIRUQiLCJpc0VtcHR5IiwicGx1cmFsaXplIiwibGVuZ3RoIiwiam9pbiIsImNvbm5lY3QiLCJ3ZWJ2aWV3Q29ubmVjdFRpbWVvdXQiLCJzZXRDb25uZWN0aW9uS2V5IiwiZ2V0V2Vidmlld1BhZ2VzIiwic2VsZWN0QXBwIiwidW5kZWZpbmVkIiwid2Vidmlld0Nvbm5lY3RSZXRyaWVzIiwiaWdub3JlQWJvdXRCbGFua1VybCIsInBhZ2VBcnJheSIsIm1hcEZuIiwiZnVsbENvbnRleHRMaXN0IiwibW9iaWxlR2V0Q29udGV4dHMiLCJ3YWl0Rm9yV2Vidmlld01zIiwiaXNOdW1iZXIiLCJpc05hTiIsImN1ck9wdCIsInRvRml4ZWQiLCJzZXRXaW5kb3ciLCJub29wIiwiaXNFcnJvclR5cGUiLCJOb1N1Y2hXaW5kb3dFcnJvciIsImdldFdpbmRvd0hhbmRsZSIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJnZXRXaW5kb3dIYW5kbGVzIiwicGFnZUNoYW5nZU5vdGlmaWNhdGlvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJpc0Nvbm5lY3RlZCIsIm5ld0lkcyIsIm5ld1BhZ2VzIiwia2V5SWQiLCJpc1VybElnbm9yZWQiLCJzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMiLCJpZ25vcmVkSG9zdHMiLCJiIiwidHJpbSIsImlnbm9yZWRIb3N0IiwiaG9zdG5hbWUiLCJVUkwiLCJpZ24iLCJwYWdlIiwiaXNLZXkiLCJpbmZvIiwiY3VyQXBwSWRLZXkiLCJjdXJQYWdlSWRLZXkiLCJuZXdQYWdlIiwibGFzdCIsIm5lZWRzUGFnZUxvYWQiLCJjb250ZXh0QXJyYXkiLCJpc0VxdWFsIiwicGFnZUxvYWQiLCJjdXJyZW50UGFnZUlkIiwicCIsImNhdGNoIiwid2luZG93SGFuZGxlQ2FjaGUiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvY29udGV4dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSZW1vdGVEZWJ1Z2dlciwgUmVtb3RlRGVidWdnZXIgfSBmcm9tICdhcHBpdW0tcmVtb3RlLWRlYnVnZ2VyJztcbmltcG9ydCB7IGVycm9ycywgaXNFcnJvclR5cGUgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IHV0aWwsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBJT1NQZXJmb3JtYW5jZUxvZyBmcm9tICcuLi9kZXZpY2UtbG9nL2lvcy1wZXJmb3JtYW5jZS1sb2cnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgTkFUSVZFX1dJTiA9ICdOQVRJVkVfQVBQJztcbmNvbnN0IFdFQlZJRVdfV0lOID0gJ1dFQlZJRVcnO1xuY29uc3QgV0VCVklFV19CQVNFID0gYCR7V0VCVklFV19XSU59X2A7XG5jb25zdCBSRUNFTlRfV0VCVklFV19ERVRFQ1RJT05fVElNRU9VVF9NUyA9IDkwMDAwO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuXG5jb21tYW5kcy5nZXRDdXJyZW50Q29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRDb250ZXh0ICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIGlmICh0aGlzLmN1ckNvbnRleHQgJiYgdGhpcy5jdXJDb250ZXh0ICE9PSBOQVRJVkVfV0lOKSB7XG4gICAgcmV0dXJuIGAke1dFQlZJRVdfQkFTRX0ke3RoaXMuY3VyQ29udGV4dH1gO1xuICB9XG4gIHJldHVybiBOQVRJVkVfV0lOO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRDb250ZXh0c0FuZFZpZXdzID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q29udGV4dHNBbmRWaWV3cyAodXNlVXJsID0gdHJ1ZSkge1xuICB0aGlzLmxvZy5kZWJ1ZygnUmV0cmlldmluZyBjb250ZXh0cyBhbmQgdmlld3MnKTtcbiAgbGV0IHdlYnZpZXdzID0gYXdhaXQgdGhpcy5saXN0V2ViRnJhbWVzKHVzZVVybCk7XG5cbiAgbGV0IGN0eHMgPSBbe2lkOiBOQVRJVkVfV0lOLCB2aWV3OiB7fX1dO1xuICB0aGlzLmNvbnRleHRzID0gW05BVElWRV9XSU5dO1xuICBmb3IgKGxldCB2aWV3IG9mIHdlYnZpZXdzKSB7XG4gICAgY3R4cy5wdXNoKHtpZDogYCR7V0VCVklFV19CQVNFfSR7dmlldy5pZH1gLCB2aWV3fSk7XG4gICAgdGhpcy5jb250ZXh0cy5wdXNoKHZpZXcuaWQudG9TdHJpbmcoKSk7XG4gIH1cbiAgcmV0dXJuIGN0eHM7XG59O1xuXG4vLyBSaWdodCBub3cgd2UgZG9uJ3QgbmVjZXNzYXJpbHkgd2FpdCBmb3Igd2Vidmlld1xuLy8gYW5kIGZyYW1lIHRvIGxvYWQsIHdoaWNoIGxlYWRzIHRvIHJhY2UgY29uZGl0aW9ucyBhbmQgZmxha2luZXNzLFxuLy8gbGV0J3Mgc2VlIGlmIHdlIGNhbiB0cmFuc2l0aW9uIHRvIHNvbWV0aGluZyBiZXR0ZXJcbmV4dGVuc2lvbnMudXNlTmV3U2FmYXJpID0gZnVuY3Rpb24gdXNlTmV3U2FmYXJpICgpIHtcbiAgcmV0dXJuICF0aGlzLmlzUmVhbERldmljZSgpICYmIHRoaXMub3B0cy5zYWZhcmk7XG59O1xuXG5leHRlbnNpb25zLmFjdGl2YXRlUmVjZW50V2VidmlldyA9IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlUmVjZW50V2VidmlldyAoKSB7XG4gIHRoaXMubG9nLmRlYnVnKCdBY3RpdmF0aW5nIGEgcmVjZW50IHdlYnZpZXcnKTtcbiAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgY29uc3Qgc3BpblRpbWVNcyA9IDUwMDtcbiAgY29uc3Qgc3BpbkhhbmRsZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgbGV0IGNvbnRleHRJZDtcbiAgICB0cnkge1xuICAgICAgY29udGV4dElkID0gYXdhaXQgdGhpcy5nZXRSZWNlbnRXZWJ2aWV3Q29udGV4dElkKC8uKi8sIC8uKi8pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcygnQ291bGQgbm90IGNvbm5lY3QgdG8gYSB2YWxpZCBhcHAgYWZ0ZXInKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgQ291bGQgbm90IG5hdmlnYXRlIHRvIHdlYnZpZXchIEVycjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgZXJyb3Iuc3RhY2sgKz0gYFxcbkNhdXNlZCBieTogJHtlcnIuc3RhY2t9YDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnQ291bGQgbm90IG5hdmlnYXRlIHRvIHdlYnZpZXcuIFJldHJ5aW5nIGlmIHBvc3NpYmxlLicpO1xuICAgIH1cbiAgICBpZiAoY29udGV4dElkKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgUGlja2luZyB3ZWJ2aWV3ICcke2NvbnRleHRJZH0nYCk7XG4gICAgICBhd2FpdCB0aGlzLnNldENvbnRleHQoY29udGV4dElkKTtcbiAgICAgIGF3YWl0IHRoaXMucmVtb3RlLmNhbmNlbFBhZ2VMb2FkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gbm8gd2VidmlldyB3YXMgZm91bmRcbiAgICBpZiAodGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcyA+PSBSRUNFTlRfV0VCVklFV19ERVRFQ1RJT05fVElNRU9VVF9NUykge1xuICAgICAgLy8gdG9vIHNsb3csIGdldCBvdXRcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IG5hdmlnYXRlIHRvIHdlYnZpZXc7IHRoZXJlIGFyZSBub25lIScpO1xuICAgIH1cblxuICAgIHRoaXMubG9nLndhcm4oJ0NvdWxkIG5vdCBmaW5kIGFueSB3ZWJ2aWV3cyB5ZXQsIHJlZnJlc2hpbmcvcmV0cnlpbmcnKTtcbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSB8fCAhdGhpcy5vcHRzLnNhZmFyaSkge1xuICAgICAgLy8gb24gYSByZWFsIGRldmljZSwgd2hlbiBub3QgdXNpbmcgU2FmYXJpLCB3ZSBqdXN0IHdhbnQgdG8gdHJ5IGFnYWluXG4gICAgICBhd2FpdCBCLmRlbGF5KHNwaW5UaW1lTXMpO1xuICAgICAgcmV0dXJuIGF3YWl0IHNwaW5IYW5kbGVzKCk7XG4gICAgfVxuXG4gICAgLy8gZmluZCB0aGUgcmVsb2FkIGJ1dHRvbiBhbmQgdGFwIGl0LCBpZiBwb3NzaWJsZVxuICAgIGxldCBlbGVtZW50O1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnRmluZGluZyBhbmQgdGFwcGluZyByZWxvYWQgYnV0dG9uJyk7XG4gICAgICBlbGVtZW50ID0gYXdhaXQgdGhpcy5maW5kVUlFbGVtZW50T3JFbGVtZW50cygnYWNjZXNzaWJpbGl0eSBpZCcsICdSZWxvYWRCdXR0b24nLCAnJywgZmFsc2UpO1xuICAgICAgYXdhaXQgdGhpcy5uYXRpdmVDbGljayhlbGVtZW50KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYEVycm9yIGZpbmRpbmcgYW5kIHRhcHBpbmcgcmVsb2FkIGJ1dHRvbjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIHRoaXMubG9nLndhcm4oJ1JldHJ5aW5nLicpO1xuICAgICAgYXdhaXQgQi5kZWxheShzcGluVGltZU1zKTtcbiAgICB9XG5cbiAgICAvLyB0cnkgaXQgYWxsIGFnYWluXG4gICAgcmV0dXJuIGF3YWl0IHNwaW5IYW5kbGVzKCk7XG4gIH07XG4gIGF3YWl0IHNwaW5IYW5kbGVzKCk7XG59O1xuXG5oZWxwZXJzLnN0b3BSZW1vdGUgPSBhc3luYyBmdW5jdGlvbiBzdG9wUmVtb3RlIChjbG9zZVdpbmRvd0JlZm9yZURpc2Nvbm5lY3RpbmcgPSBmYWxzZSkge1xuICBpZiAoIXRoaXMucmVtb3RlKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnVHJpZWQgdG8gbGVhdmUgYSB3ZWIgZnJhbWUgYnV0IHdlcmUgbm90IGluIG9uZScpO1xuICB9XG5cbiAgaWYgKGNsb3NlV2luZG93QmVmb3JlRGlzY29ubmVjdGluZykge1xuICAgIGF3YWl0IHRoaXMuY2xvc2VXaW5kb3coKTtcbiAgfVxuICBhd2FpdCB0aGlzLnJlbW90ZS5kaXNjb25uZWN0KCk7XG4gIHRoaXMuY3VyQ29udGV4dCA9IG51bGw7XG4gIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gIHRoaXMuY3VyV2ViQ29vcmRzID0gbnVsbDtcbiAgdGhpcy5yZW1vdGUgPSBudWxsO1xufTtcblxuaGVscGVycy5zZXRDdXJyZW50VXJsID0gZnVuY3Rpb24gc2V0Q3VycmVudFVybCAodXJsKSB7XG4gIHRoaXMuX2N1cnJlbnRVcmwgPSB1cmw7XG59O1xuXG5oZWxwZXJzLmdldEN1cnJlbnRVcmwgPSBmdW5jdGlvbiBnZXRDdXJyZW50VXJsICgpIHtcbiAgcmV0dXJuIHRoaXMuX2N1cnJlbnRVcmw7XG59O1xuXG5leHRlbnNpb25zLmdldFJlY2VudFdlYnZpZXdDb250ZXh0SWQgPSBhc3luYyBmdW5jdGlvbiBnZXRSZWNlbnRXZWJ2aWV3Q29udGV4dElkICh0aXRsZVJlZ0V4cCwgdXJsUmVnRXhwKSB7XG4gIGlmICghXy5pc1JlZ0V4cCh0aXRsZVJlZ0V4cCkgJiYgIV8uaXNSZWdFeHAodXJsUmVnRXhwKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAnQSByZWd1bGFyIGV4cHJlc3Npb24gZm9yIGVpdGhlciB3ZWIgdmlldyB0aXRsZSBvciB1cmwgbXVzdCBiZSBwcm92aWRlZCdcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY3VycmVudFVybCA9IHRoaXMuZ2V0Q3VycmVudFVybCgpO1xuICBjb25zdCBjb250ZXh0cyA9IF8uZmlsdGVyKGF3YWl0IHRoaXMuZ2V0Q29udGV4dHNBbmRWaWV3cyhmYWxzZSksICd2aWV3Jyk7XG4gIC8vIGZpcnN0IHRyeSB0byBtYXRjaCBieSBjdXJyZW50IHVybFxuICBpZiAoY3VycmVudFVybCkge1xuICAgIGNvbnN0IGN0eCA9IGNvbnRleHRzLmZpbmQoKHt2aWV3fSkgPT4gKHZpZXcudXJsIHx8ICcnKSA9PT0gY3VycmVudFVybCk7XG4gICAgaWYgKGN0eCkge1xuICAgICAgcmV0dXJuIGN0eC5pZDtcbiAgICB9XG4gIH1cbiAgLy8gaWYgbm90LCB0cnkgdG8gbWF0Y2ggYnkgcmVndWxhciBleHByZXNzaW9uXG4gIHJldHVybiAoY29udGV4dHMuZmluZCgoe3ZpZXd9KSA9PlxuICAgIHZpZXcudGl0bGUgJiYgdGl0bGVSZWdFeHA/LnRlc3Qodmlldy50aXRsZSkgfHwgdmlldy51cmwgJiYgdXJsUmVnRXhwPy50ZXN0KHZpZXcudXJsKVxuICApKT8uaWQ7XG59O1xuXG5leHRlbnNpb25zLmlzV2ViQ29udGV4dCA9IGZ1bmN0aW9uIGlzV2ViQ29udGV4dCAoKSB7XG4gIHJldHVybiAhIXRoaXMuY3VyQ29udGV4dCAmJiB0aGlzLmN1ckNvbnRleHQgIT09IE5BVElWRV9XSU47XG59O1xuXG5leHRlbnNpb25zLmlzV2VidmlldyA9IGZ1bmN0aW9uIGlzV2VidmlldyAoKSB7XG4gIHJldHVybiB0aGlzLmlzV2ViQ29udGV4dCgpO1xufTtcblxuZXh0ZW5zaW9ucy5nZXROZXdSZW1vdGVEZWJ1Z2dlciA9IGFzeW5jIGZ1bmN0aW9uIGdldE5ld1JlbW90ZURlYnVnZ2VyICgpIHtcbiAgbGV0IHNvY2tldFBhdGg7XG4gIGlmICghdGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgIHNvY2tldFBhdGggPSBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmdldFdlYkluc3BlY3RvclNvY2tldCgpO1xuICB9XG4gIHJldHVybiBjcmVhdGVSZW1vdGVEZWJ1Z2dlcih7XG4gICAgYnVuZGxlSWQ6IHRoaXMub3B0cy5idW5kbGVJZCxcbiAgICBhZGRpdGlvbmFsQnVuZGxlSWRzOiB0aGlzLm9wdHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMsXG4gICAgaXNTYWZhcmk6IHRoaXMuaXNTYWZhcmkoKSxcbiAgICBpbmNsdWRlU2FmYXJpOiB0aGlzLm9wdHMuaW5jbHVkZVNhZmFyaUluV2Vidmlld3MsXG4gICAgdXNlTmV3U2FmYXJpOiB0aGlzLnVzZU5ld1NhZmFyaSgpLFxuICAgIHBhZ2VMb2FkTXM6IHRoaXMucGFnZUxvYWRNcyxcbiAgICBwbGF0Zm9ybVZlcnNpb246IHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sXG4gICAgc29ja2V0UGF0aCxcbiAgICByZW1vdGVEZWJ1Z1Byb3h5OiB0aGlzLm9wdHMucmVtb3RlRGVidWdQcm94eSxcbiAgICBnYXJiYWdlQ29sbGVjdE9uRXhlY3V0ZTogdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMuc2FmYXJpR2FyYmFnZUNvbGxlY3QpXG4gICAgICA/ICEhdGhpcy5vcHRzLnNhZmFyaUdhcmJhZ2VDb2xsZWN0XG4gICAgICA6IGZhbHNlLFxuICAgIHVkaWQ6IHRoaXMub3B0cy51ZGlkLFxuICAgIGxvZ0FsbENvbW11bmljYXRpb246IHRoaXMub3B0cy5zYWZhcmlMb2dBbGxDb21tdW5pY2F0aW9uLFxuICAgIGxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wOiB0aGlzLm9wdHMuc2FmYXJpTG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAsXG4gICAgc29ja2V0Q2h1bmtTaXplOiB0aGlzLm9wdHMuc2FmYXJpU29ja2V0Q2h1bmtTaXplLFxuICAgIHdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoOiB0aGlzLm9wdHMuc2FmYXJpV2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGhcbiAgfSwgdGhpcy5pc1JlYWxEZXZpY2UoKSk7XG59O1xuXG4vKipcbiAqIFNldCBjb250ZXh0XG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgY29udGV4dCB0byBzZXQuIEl0IGNvdWxkIGJlICdudWxsJyBhcyBOQVRJVkVfV0lOLlxuICogQHBhcmFtIHtjYWxsYmFja30gY2FsbGJhY2sgVGhlIGNhbGxiYWNrLiAoSXQgaXMgbm90IGNhbGxlZCBpbiB0aGlzIG1ldGhvZClcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2tpcFJlYWR5Q2hlY2sgLSBXaGV0aGVyIGl0IHdhaXRzIGZvciB0aGUgbmV3IGNvbnRleHQgaXMgcmVhZHlcbiAqL1xuY29tbWFuZHMuc2V0Q29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIHNldENvbnRleHQgKG5hbWUsIGNhbGxiYWNrLCBza2lwUmVhZHlDaGVjaykge1xuICBmdW5jdGlvbiBhbHJlYWR5SW5Db250ZXh0IChkZXNpcmVkLCBjdXJyZW50KSB7XG4gICAgcmV0dXJuIChkZXNpcmVkID09PSBjdXJyZW50IHx8XG4gICAgICAoZGVzaXJlZCA9PT0gbnVsbCAmJiBjdXJyZW50ID09PSBOQVRJVkVfV0lOKSB8fFxuICAgICAgKGRlc2lyZWQgPT09IE5BVElWRV9XSU4gJiYgY3VycmVudCA9PT0gbnVsbCkpO1xuICB9XG4gIGZ1bmN0aW9uIGlzTmF0aXZlQ29udGV4dCAoY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0ID09PSBOQVRJVkVfV0lOIHx8IGNvbnRleHQgPT09IG51bGw7XG4gIH1cblxuICAvLyBhbGxvdyB0aGUgZnVsbCBjb250ZXh0IGxpc3QgdG8gYmUgcGFzc2VkIGluXG4gIGlmIChuYW1lICYmIG5hbWUuaWQpIHtcbiAgICBuYW1lID0gbmFtZS5pZDtcbiAgfVxuXG4gIHRoaXMubG9nLmRlYnVnKGBBdHRlbXB0aW5nIHRvIHNldCBjb250ZXh0IHRvICcke25hbWUgfHwgTkFUSVZFX1dJTn0nIGZyb20gJyR7dGhpcy5jdXJDb250ZXh0ID8gdGhpcy5jdXJDb250ZXh0IDogTkFUSVZFX1dJTn0nYCk7XG5cbiAgaWYgKGFscmVhZHlJbkNvbnRleHQobmFtZSwgdGhpcy5jdXJDb250ZXh0KSB8fCBhbHJlYWR5SW5Db250ZXh0KF8ucmVwbGFjZShuYW1lLCBXRUJWSUVXX0JBU0UsICcnKSwgdGhpcy5jdXJDb250ZXh0KSkge1xuICAgIC8vIGFscmVhZHkgaW4gdGhlIG5hbWVkIGNvbnRleHQsIG5vIG5lZWQgdG8gZG8gYW55dGhpbmdcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgQWxyZWFkeSBpbiAnJHtuYW1lIHx8IE5BVElWRV9XSU59JyBjb250ZXh0LiBEb2luZyBub3RoaW5nLmApO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaXNOYXRpdmVDb250ZXh0KG5hbWUpKSB7XG4gICAgLy8gc3dpdGNoaW5nIGludG8gdGhlIG5hdGl2ZSBjb250ZXh0XG4gICAgdGhpcy5jdXJDb250ZXh0ID0gbnVsbDtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBzd2l0Y2hpbmcgaW50byBhIHdlYnZpZXcgY29udGV4dFxuXG4gIC8vIGlmIGNvbnRleHRzIGhhdmUgbm90IGFscmVhZHkgYmVlbiByZXRyaWV2ZWQsIGdldCB0aGVtXG4gIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMuY29udGV4dHMpKSB7XG4gICAgYXdhaXQgdGhpcy5nZXRDb250ZXh0cygpO1xuICB9XG5cbiAgbGV0IGNvbnRleHRJZCA9IF8ucmVwbGFjZShuYW1lLCBXRUJWSUVXX0JBU0UsICcnKTtcbiAgaWYgKGNvbnRleHRJZCA9PT0gJycpIHtcbiAgICAvLyBhbGxvdyB1c2VyIHRvIHBhc3MgaW4gXCJXRUJWSUVXXCIgd2l0aG91dCBhbiBpbmRleFxuICAgIC8vIHRoZSBzZWNvbmQgY29udGV4dCB3aWxsIGJlIHRoZSBmaXJzdCB3ZWJ2aWV3IGFzXG4gICAgLy8gdGhlIGZpcnN0IGlzIGFsd2F5cyBOQVRJVkVfQVBQXG4gICAgY29udGV4dElkID0gdGhpcy5jb250ZXh0c1sxXTtcbiAgfVxuICBpZiAoIV8uaW5jbHVkZXModGhpcy5jb250ZXh0cywgY29udGV4dElkKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoQ29udGV4dEVycm9yKCk7XG4gIH1cblxuICBjb25zdCBvbGRDb250ZXh0ID0gdGhpcy5jdXJDb250ZXh0O1xuICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmN1cldpbmRvd0hhbmRsZSA9IGNvbnRleHRJZDtcblxuICAvLyBgY29udGV4dElkYCB3aWxsIGJlIGluIHRoZSBmb3JtIG9mIGBhcHBJZC5wYWdlSWRgIGluIHRoaXMgY2FzZVxuICBjb25zdCBbYXBwSWRLZXksIHBhZ2VJZEtleV0gPSBfLm1hcChjb250ZXh0SWQuc3BsaXQoJy4nKSwgKGlkKSA9PiBwYXJzZUludChpZCwgMTApKTtcbiAgdHJ5IHtcbiAgICB0aGlzLnNlbGVjdGluZ05ld1BhZ2UgPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMucmVtb3RlLnNlbGVjdFBhZ2UoYXBwSWRLZXksIHBhZ2VJZEtleSwgc2tpcFJlYWR5Q2hlY2spO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmN1cldpbmRvd0hhbmRsZSA9IG9sZENvbnRleHQ7XG4gICAgdGhyb3cgZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMuc2VsZWN0aW5nTmV3UGFnZSA9IGZhbHNlO1xuICB9XG5cbiAgLy8gYXR0ZW1wdCB0byBzdGFydCBwZXJmb3JtYW5jZSBsb2dnaW5nLCBpZiByZXF1ZXN0ZWRcbiAgaWYgKHRoaXMub3B0cy5lbmFibGVQZXJmb3JtYW5jZUxvZ2dpbmcgJiYgdGhpcy5yZW1vdGUpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgU3RhcnRpbmcgcGVyZm9ybWFuY2UgbG9nIG9uICcke3RoaXMuY3VyQ29udGV4dH0nYCk7XG4gICAgdGhpcy5sb2dzLnBlcmZvcm1hbmNlID0gbmV3IElPU1BlcmZvcm1hbmNlTG9nKHRoaXMucmVtb3RlKTtcbiAgICBhd2FpdCB0aGlzLmxvZ3MucGVyZm9ybWFuY2Uuc3RhcnRDYXB0dXJlKCk7XG4gIH1cblxuICAvLyBzdGFydCBzYWZhcmkgbG9nZ2luZyBpZiB0aGUgbG9ncyBoYW5kbGVycyBhcmUgYWN0aXZlXG4gIGlmIChuYW1lICYmIG5hbWUgIT09IE5BVElWRV9XSU4gJiYgdGhpcy5sb2dzKSB7XG4gICAgaWYgKHRoaXMubG9ncy5zYWZhcmlDb25zb2xlKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlbW90ZS5zdGFydENvbnNvbGUodGhpcy5sb2dzLnNhZmFyaUNvbnNvbGUuYWRkTG9nTGluZS5iaW5kKHRoaXMubG9ncy5zYWZhcmlDb25zb2xlKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxvZ3Muc2FmYXJpTmV0d29yaykge1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdGUuc3RhcnROZXR3b3JrKHRoaXMubG9ncy5zYWZhcmlOZXR3b3JrLmFkZExvZ0xpbmUuYmluZCh0aGlzLmxvZ3Muc2FmYXJpTmV0d29yaykpO1xuICAgIH1cbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5jb25uZWN0VG9SZW1vdGVEZWJ1Z2dlciA9IGFzeW5jIGZ1bmN0aW9uIGNvbm5lY3RUb1JlbW90ZURlYnVnZ2VyICgpIHtcbiAgdGhpcy5yZW1vdGUgPSBhd2FpdCB0aGlzLmdldE5ld1JlbW90ZURlYnVnZ2VyKCk7XG5cbiAgdGhpcy5yZW1vdGUub24oUmVtb3RlRGVidWdnZXIuRVZFTlRfUEFHRV9DSEFOR0UsIHRoaXMub25QYWdlQ2hhbmdlLmJpbmQodGhpcykpO1xuICB0aGlzLnJlbW90ZS5vbihSZW1vdGVEZWJ1Z2dlci5FVkVOVF9GUkFNRVNfREVUQUNIRUQsICgpID0+IHtcbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLmN1cldlYkZyYW1lcykpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBDbGVhcmluZyAke3V0aWwucGx1cmFsaXplKCdmcmFtZScsIHRoaXMuY3VyV2ViRnJhbWVzLmxlbmd0aCwgdHJ1ZSl9OiAke3RoaXMuY3VyV2ViRnJhbWVzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gIH0pO1xuXG4gIGF3YWl0IHRoaXMucmVtb3RlLmNvbm5lY3QodGhpcy5vcHRzLndlYnZpZXdDb25uZWN0VGltZW91dCk7XG59O1xuXG5leHRlbnNpb25zLmxpc3RXZWJGcmFtZXMgPSBhc3luYyBmdW5jdGlvbiBsaXN0V2ViRnJhbWVzICh1c2VVcmwgPSB0cnVlKSB7XG4gIHVzZVVybCA9IHVzZVVybCAmJiAhdGhpcy5pc1JlYWxEZXZpY2UoKSAmJiAhIXRoaXMuZ2V0Q3VycmVudFVybCgpO1xuICB0aGlzLmxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGJ5IHVybDogJHt1c2VVcmx9JHt1c2VVcmwgPyBgIChleHBlY3RlZCB1cmw6ICcke3RoaXMuZ2V0Q3VycmVudFVybCgpfScpYCA6ICcnfWApO1xuXG4gIGlmICghdGhpcy5yZW1vdGUpIHtcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3RUb1JlbW90ZURlYnVnZ2VyKCk7XG4gICAgaWYgKCF0aGlzLnJlbW90ZS5hcHBJZEtleSkge1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdGUuc2V0Q29ubmVjdGlvbktleSgpO1xuICAgIH1cbiAgfVxuICBjb25zdCBnZXRXZWJ2aWV3UGFnZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlbW90ZS5zZWxlY3RBcHAoXG4gICAgICAgIHVzZVVybCA/IHRoaXMuZ2V0Q3VycmVudFVybCgpIDogdW5kZWZpbmVkLFxuICAgICAgICB0aGlzLm9wdHMud2Vidmlld0Nvbm5lY3RSZXRyaWVzLFxuICAgICAgICB0aGlzLm9wdHMuaWdub3JlQWJvdXRCbGFua1VybFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBObyBhdmFpbGFibGUgd2ViIHBhZ2VzOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcGFnZUFycmF5ID0gYXdhaXQgZ2V0V2Vidmlld1BhZ2VzKCk7XG4gIGlmIChfLmlzRW1wdHkocGFnZUFycmF5KSkge1xuICAgIC8vIHdlIGhhdmUgbm8gd2ViIGZyYW1lcywgYnV0IGNvbnRpbnVlIGFueXdheVxuICAgIHRoaXMubG9nLmRlYnVnKCdObyB3ZWIgZnJhbWVzIGZvdW5kLicpO1xuICB9XG4gIHJldHVybiBwYWdlQXJyYXk7XG59O1xuXG5jb21tYW5kcy5nZXRDb250ZXh0cyA9IGFzeW5jIGZ1bmN0aW9uIGdldENvbnRleHRzICgpIHtcbiAgdGhpcy5sb2cuZGVidWcoJ0dldHRpbmcgbGlzdCBvZiBhdmFpbGFibGUgY29udGV4dHMnKTtcbiAgY29uc3QgY29udGV4dHMgPSBhd2FpdCB0aGlzLmdldENvbnRleHRzQW5kVmlld3MoZmFsc2UpO1xuXG4gIGNvbnN0IG1hcEZuID0gdGhpcy5vcHRzLmZ1bGxDb250ZXh0TGlzdFxuICAgID8gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBjb250ZXh0LmlkLnRvU3RyaW5nKCksXG4gICAgICAgIHRpdGxlOiBjb250ZXh0LnZpZXcudGl0bGUsXG4gICAgICAgIHVybDogY29udGV4dC52aWV3LnVybCxcbiAgICAgICAgYnVuZGxlSWQ6IGNvbnRleHQudmlldy5idW5kbGVJZCxcbiAgICAgIH07XG4gICAgfVxuICAgIDogKGNvbnRleHQpID0+IGNvbnRleHQuaWQudG9TdHJpbmcoKTtcbiAgcmV0dXJuIGNvbnRleHRzLm1hcChtYXBGbik7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENvbnRleHRcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBUaGUgaWRlbnRpZmllciBvZiB0aGUgY29udGV4dC4gVGhlIG5hdGl2ZSBjb250ZXh0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSAnTkFUSVZFX0FQUCcgYW5kIHRoZSB3ZWJ2aWV3cyB3aWxsIGJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dFQlZJRVdfeHh4J1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSB0aXRsZSAtIFRoZSB0aXRsZSBhc3NvY2lhdGVkIHdpdGggdGhlIHdlYnZpZXcgY29udGVudFxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB1cmwgLSBUaGUgdXJsIGFzc29jaWF0ZWQgd2l0aCB0aGUgd2VidmlldyBjb250ZW50XG4gKi9cblxuLyoqXG4gKiBHZXQgdGhlIGNvbnRleHRzIGF2YWlsYWJsZSwgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXJsIGFuZCB0aXRsZSBvZiBlYWNoXG4gKiB3ZWJ2aWV3XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBPcHRpb25zIHNldCwgd2hpY2ggY2FuIGluY2x1ZGUgYHdhaXRGb3JXZWJ2aWV3TXNgIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIHBlcmlvZCB0byBwb2xsIGZvciBhdmFpbGFibGUgd2Vidmlld3NcbiAqIEByZXR1cm5zIHtBcnJheX0gTGlzdCBvZiBDb250ZXh0IG9iamVjdHNcbiAqL1xuZXh0ZW5zaW9ucy5tb2JpbGVHZXRDb250ZXh0cyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldENvbnRleHRzIChvcHRzID0ge30pIHtcbiAgbGV0IHtcbiAgICB3YWl0Rm9yV2Vidmlld01zID0gMCxcbiAgfSA9IG9wdHM7XG5cbiAgLy8gbWFrZSBzdXJlIGl0IGlzIGEgbnVtYmVyLCBzbyB0aGUgZHVyYXRpb24gY2hlY2sgd29ya3MgcHJvcGVybHlcbiAgaWYgKCFfLmlzTnVtYmVyKHdhaXRGb3JXZWJ2aWV3TXMpKSB7XG4gICAgd2FpdEZvcldlYnZpZXdNcyA9IHBhcnNlSW50KHdhaXRGb3JXZWJ2aWV3TXMsIDEwKTtcbiAgICBpZiAoaXNOYU4od2FpdEZvcldlYnZpZXdNcykpIHtcbiAgICAgIHdhaXRGb3JXZWJ2aWV3TXMgPSAwO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGN1ck9wdCA9IHRoaXMub3B0cy5mdWxsQ29udGV4dExpc3Q7XG4gIHRoaXMub3B0cy5mdWxsQ29udGV4dExpc3QgPSB0cnVlO1xuXG4gIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gIHRyeSB7XG4gICAgbGV0IGNvbnRleHRzO1xuICAgIGRvIHtcbiAgICAgIGNvbnRleHRzID0gYXdhaXQgdGhpcy5nZXRDb250ZXh0cygpO1xuXG4gICAgICBpZiAoY29udGV4dHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYEZvdW5kIHdlYnZpZXcgY29udGV4dCBhZnRlciAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgICAgICByZXR1cm4gY29udGV4dHM7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgTm8gd2Vidmlld3MgZm91bmQgaW4gJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICB9IHdoaWxlICh0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzIDwgd2FpdEZvcldlYnZpZXdNcyk7XG4gICAgcmV0dXJuIGNvbnRleHRzO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIHJlc2V0IHRoZSBvcHRpb24gc28gdGhlcmUgYXJlIG5vIHNpZGUgZWZmZWN0c1xuICAgIHRoaXMub3B0cy5mdWxsQ29udGV4dExpc3QgPSBjdXJPcHQ7XG4gIH1cbn07XG5cbmNvbW1hbmRzLnNldFdpbmRvdyA9IGFzeW5jIGZ1bmN0aW9uIHNldFdpbmRvdyAobmFtZSwgc2tpcFJlYWR5Q2hlY2spIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLnNldENvbnRleHQobmFtZSwgXy5ub29wLCBza2lwUmVhZHlDaGVjayk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIHRyYW5zbGF0ZSB0aGUgZXJyb3IgaW4gdGVybXMgb2Ygd2luZG93c1xuICAgIHRocm93IGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLk5vU3VjaENvbnRleHRFcnJvcilcbiAgICAgID8gbmV3IGVycm9ycy5Ob1N1Y2hXaW5kb3dFcnJvcigpXG4gICAgICA6IGVycjtcbiAgfVxufTtcblxuY29tbWFuZHMuZ2V0V2luZG93SGFuZGxlID0gYXN5bmMgZnVuY3Rpb24gZ2V0V2luZG93SGFuZGxlICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG4gIHRoaXMubG9nLmRlYnVnKGBHZXR0aW5nIGN1cnJlbnQgd2luZG93IGhhbmRsZWApO1xuICByZXR1cm4gdGhpcy5jdXJDb250ZXh0O1xufTtcblxuY29tbWFuZHMuZ2V0V2luZG93SGFuZGxlcyA9IGFzeW5jIGZ1bmN0aW9uIGdldFdpbmRvd0hhbmRsZXMgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuICB0aGlzLmxvZy5kZWJ1ZygnR2V0dGluZyBsaXN0IG9mIGF2YWlsYWJsZSB3aW5kb3cgaGFuZGxlcycpO1xuICBjb25zdCBjb250ZXh0cyA9IGF3YWl0IHRoaXMuZ2V0Q29udGV4dHNBbmRWaWV3cyhmYWxzZSk7XG4gIHJldHVybiBjb250ZXh0c1xuICAgIC8vIGdldCByaWQgb2YgdGhlIG5hdGl2ZSBhcHAgY29udGV4dFxuICAgIC5maWx0ZXIoKGNvbnRleHQpID0+IGNvbnRleHQuaWQgIT09IE5BVElWRV9XSU4pXG4gICAgLy8gZ2V0IHRoZSBgYXBwLmlkYCBmb3JtYXQgZXhwZWN0ZWRcbiAgICAubWFwKChjb250ZXh0KSA9PiBjb250ZXh0LnZpZXcuaWQudG9TdHJpbmcoKSk7XG59O1xuXG5leHRlbnNpb25zLm9uUGFnZUNoYW5nZSA9IGFzeW5jIGZ1bmN0aW9uIG9uUGFnZUNoYW5nZSAocGFnZUNoYW5nZU5vdGlmaWNhdGlvbikge1xuICB0aGlzLmxvZy5kZWJ1ZyhgUmVtb3RlIGRlYnVnZ2VyIG5vdGlmaWVkIHVzIG9mIGEgbmV3IHBhZ2UgbGlzdGluZzogJHtKU09OLnN0cmluZ2lmeShwYWdlQ2hhbmdlTm90aWZpY2F0aW9uKX1gKTtcbiAgaWYgKHRoaXMuc2VsZWN0aW5nTmV3UGFnZSkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdXZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBzZWxlY3RpbmcgYSBwYWdlLCBpZ25vcmluZycpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIXRoaXMucmVtb3RlIHx8ICF0aGlzLnJlbW90ZS5pc0Nvbm5lY3RlZCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdXZSBoYXZlIG5vdCB5ZXQgY29ubmVjdGVkLCBpZ25vcmluZycpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHthcHBJZEtleSwgcGFnZUFycmF5fSA9IHBhZ2VDaGFuZ2VOb3RpZmljYXRpb247XG5cbiAgbGV0IG5ld0lkcyA9IFtdO1xuICBsZXQgbmV3UGFnZXMgPSBbXTtcbiAgbGV0IGtleUlkID0gbnVsbDtcblxuICAvLyBDaGVja3MgaWYgYSBVUkwgaXMgYmxhY2tsaXN0ZWQgaW4gdGhlICdzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMnIGNhcGFiaWxpdHlcbiAgZnVuY3Rpb24gaXNVcmxJZ25vcmVkICh1cmwsIHNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcykge1xuICAgIGNvbnN0IGlnbm9yZWRIb3N0cyA9IChzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMgfHwgJycpXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcCgoYikgPT4gYi50cmltKCkpXG4gICAgICAuZmlsdGVyKChiKSA9PiAhXy5pc0VtcHR5KGIpKTtcbiAgICBmb3IgKGNvbnN0IGlnbm9yZWRIb3N0IG9mIGlnbm9yZWRIb3N0cykge1xuICAgICAgaWYgKGlnbm9yZWRIb3N0ID09PSAnYWJvdXQ6YmxhbmsnICYmIHVybCA9PT0gJ2Fib3V0OmJsYW5rJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaG9zdG5hbWUgPSBuZXcgVVJMKHVybCkuaG9zdG5hbWU7XG4gICAgICAgICAgaWYgKGhvc3RuYW1lID09PSBpZ25vcmVkSG9zdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgICAvLyBkbyBub3RoaW5nIGlmIGludmFsaWQgVVJMXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChjb25zdCBwYWdlIG9mIHBhZ2VBcnJheSkge1xuICAgIGNvbnN0IGlkID0gcGFnZS5pZC50b1N0cmluZygpO1xuICAgIG5ld0lkcy5wdXNoKGlkKTtcbiAgICBpZiAocGFnZS5pc0tleSkge1xuICAgICAga2V5SWQgPSBpZDtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dElkID0gYCR7YXBwSWRLZXl9LiR7aWR9YDtcblxuICAgIC8vIGFkZCBpZiB0aGlzIGlzIGEgbmV3IHBhZ2VcbiAgICBpZiAoIV8uaW5jbHVkZXModGhpcy5jb250ZXh0cywgY29udGV4dElkKSkge1xuICAgICAgaWYgKGlzVXJsSWdub3JlZChwYWdlLnVybCwgdGhpcy5vcHRzLnNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcykpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgTm90IHRyYWNraW5nICcke3BhZ2UudXJsfScgcGFnZSBiZWNhdXNlIGl0IGlzIGJsYWNrbGlzdGVkLiBgICtcbiAgICAgICAgICBgJ3NhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcyc9JHt0aGlzLm9wdHMuc2FmYXJpSWdub3JlV2ViSG9zdG5hbWVzfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3UGFnZXMucHVzaChpZCk7XG4gICAgICAgIHRoaXMuY29udGV4dHMucHVzaChjb250ZXh0SWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICgha2V5SWQpIHtcbiAgICAvLyBpZiB0aGVyZSBpcyBubyBrZXkgaWQsIHB1bGwgdGhlIGZpcnN0IGlkIGZyb20gdGhlIHBhZ2UgYXJyYXkgYW5kIHVzZSB0aGF0XG4gICAgLy8gYXMgYSBzdGFuZCBpblxuICAgIHRoaXMubG9nLmRlYnVnKCdObyBrZXkgaWQgZm91bmQuIENob29zaW5nIGZpcnN0IGlkIGZyb20gcGFnZSBhcnJheScpO1xuICAgIGtleUlkID0gbmV3SWRzWzBdIHx8IG51bGw7XG4gIH1cblxuICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy5jdXJDb250ZXh0KSkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdXZSBkbyBub3QgYXBwZWFyIHRvIGhhdmUgd2luZG93IHNldCB5ZXQsIGlnbm9yaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgW2N1ckFwcElkS2V5LCBjdXJQYWdlSWRLZXldID0gdGhpcy5jdXJDb250ZXh0LnNwbGl0KCcuJyk7XG5cbiAgaWYgKGN1ckFwcElkS2V5ICE9PSBhcHBJZEtleSkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdQYWdlIGNoYW5nZSBub3QgcmVmZXJyaW5nIHRvIGN1cnJlbnRseSBzZWxlY3RlZCBhcHAsIGlnbm9yaW5nLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBuZXdQYWdlID0gbnVsbDtcbiAgaWYgKG5ld1BhZ2VzLmxlbmd0aCkge1xuICAgIG5ld1BhZ2UgPSBfLmxhc3QobmV3UGFnZXMpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBXZSBoYXZlIG5ldyBwYWdlcywgc2VsZWN0aW5nIHBhZ2UgJyR7bmV3UGFnZX0nYCk7XG4gIH0gZWxzZSBpZiAoIV8uaW5jbHVkZXMobmV3SWRzLCBjdXJQYWdlSWRLZXkpKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ05ldyBwYWdlIGxpc3RpbmcgZnJvbSByZW1vdGUgZGVidWdnZXIgZG9lcyBub3QgY29udGFpbiAnICtcbiAgICAgICAgICAgICAgICAgJ2N1cnJlbnQgd2luZG93OyBhc3N1bWluZyBpdCBpcyBjbG9zZWQnKTtcbiAgICBpZiAoIXV0aWwuaGFzVmFsdWUoa2V5SWQpKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcignRG8gbm90IGhhdmUgb3VyIGN1cnJlbnQgd2luZG93IGFueW1vcmUsIGFuZCB0aGVyZSAnICtcbiAgICAgICAgICAgICAgICAgICAnYXJlIG5vdCBhbnkgbW9yZSB0byBsb2FkISBEb2luZyBub3RoaW5nLi4uJyk7XG4gICAgICB0aGlzLnNldEN1cnJlbnRVcmwodW5kZWZpbmVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRGVidWdnZXIgYWxyZWFkeSBzZWxlY3RlZCBwYWdlICcke2tleUlkfScsIGAgK1xuICAgICAgICAgICAgICAgICBgY29uZmlybWluZyB0aGF0IGNob2ljZS5gKTtcbiAgICB0aGlzLmN1ckNvbnRleHQgPSBgJHthcHBJZEtleX0uJHtrZXlJZH1gO1xuICAgIG5ld1BhZ2UgPSBrZXlJZDtcbiAgfSBlbHNlIHtcbiAgICAvLyBhdCB0aGlzIHBvaW50LCB0aGVyZSBhcmUgbm8gbmV3IHBhZ2VzLCBhbmQgdGhlIGN1cnJlbnQgcGFnZSBzdGlsbCBleGlzdHNcbiAgICB0aGlzLmxvZy5kZWJ1ZygnQ2hlY2tpbmcgaWYgcGFnZSBuZWVkcyB0byBsb2FkJyk7XG4gICAgLy8gSWYgYSB3aW5kb3cgbmF2aWdhdGVzIHRvIGFuIGFuY2hvciBpdCBkb2Vzbid0IGFsd2F5cyBmaXJlIGEgcGFnZVxuICAgIC8vIGNhbGxiYWNrIGV2ZW50LiBMZXQncyBjaGVjayBpZiB3ZSB3b3VuZCB1cCBpbiBzdWNoIGEgc2l0dWF0aW9uLlxuICAgIGNvbnN0IG5lZWRzUGFnZUxvYWQgPSAoKCkgPT4ge1xuICAgICAgLy8gbmVlZCB0byBtYXAgdGhlIHBhZ2UgaWRzIHRvIGNvbnRleHQgaWRzXG4gICAgICBjb25zdCBjb250ZXh0QXJyYXkgPSBfLm1hcChwYWdlQXJyYXksIChwYWdlKSA9PiBgJHthcHBJZEtleX0uJHtwYWdlLmlkfWApO1xuICAgICAgLy8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgY29udGV4dCBleGlzdHMgaW4gYm90aCBvdXIgcmVjb3JkZWQgY29udGV4dHMsXG4gICAgICAvLyBhbmQgdGhlIHBhZ2UgYXJyYXlcbiAgICAgIHJldHVybiAhXy5pc0VxdWFsKF8uZmluZCh0aGlzLmNvbnRleHRzLCB0aGlzLmN1ckNvbnRleHQpLCBfLmZpbmQoY29udGV4dEFycmF5LCB0aGlzLmN1ckNvbnRleHQpKTtcbiAgICB9KSgpO1xuXG4gICAgaWYgKG5lZWRzUGFnZUxvYWQpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdQYWdlIGxvYWQgbmVlZGVkLiBMb2FkaW5nLi4uJyk7XG4gICAgICBhd2FpdCB0aGlzLnJlbW90ZS5wYWdlTG9hZCgpO1xuICAgIH1cblxuICAgIHRoaXMubG9nLmRlYnVnKCdOZXcgcGFnZSBsaXN0aW5nIGlzIHNhbWUgYXMgb2xkLCBkb2luZyBub3RoaW5nJyk7XG4gIH1cblxuICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgcGFnZSBsaXN0aW5nIGlzbid0IGluZGljYXRpbmcgYSByZWRpcmVjdFxuICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLmN1ckNvbnRleHQpKSB7XG4gICAgbGV0IGN1cnJlbnRQYWdlSWQgPSBwYXJzZUludChfLmxhc3QodGhpcy5jdXJDb250ZXh0LnNwbGl0KCcuJykpLCAxMCk7XG4gICAgbGV0IHBhZ2UgPSBfLmZpbmQocGFnZUFycmF5LCAocCkgPT4gcGFyc2VJbnQocC5pZCwgMTApID09PSBjdXJyZW50UGFnZUlkKTtcbiAgICBpZiAocGFnZSAmJiBwYWdlLnVybCAhPT0gdGhpcy5nZXRDdXJyZW50VXJsKCkpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBSZWRpcmVjdGVkIGZyb20gJyR7dGhpcy5nZXRDdXJyZW50VXJsKCl9JyB0byAnJHtwYWdlLnVybH0nYCk7XG4gICAgICB0aGlzLnNldEN1cnJlbnRVcmwocGFnZS51cmwpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1dGlsLmhhc1ZhbHVlKG5ld1BhZ2UpKSB7XG4gICAgdGhpcy5zZWxlY3RpbmdOZXdQYWdlID0gdHJ1ZTtcbiAgICBjb25zdCBvbGRDb250ZXh0ID0gdGhpcy5jdXJDb250ZXh0O1xuICAgIHRoaXMuY3VyQ29udGV4dCA9IGAke2FwcElkS2V5fS4ke25ld1BhZ2V9YDtcbiAgICAvLyBkbyBub3Qgd2FpdCwgYXMgdGhpcyBjYW4gdGFrZSBhIGxvbmcgdGltZSwgYW5kIHRoZSByZXNwb25zZSBpcyBub3QgbmVjZXNzYXJ5XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrcywgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tdGhlblxuICAgIHRoaXMucmVtb3RlLnNlbGVjdFBhZ2UoYXBwSWRLZXksIHBhcnNlSW50KG5ld1BhZ2UsIDEwKSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgdGhpcy5sb2cud2FybihgRmFpbGVkIHRvIHNlbGVjdCBwYWdlOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgdGhpcy5jdXJDb250ZXh0ID0gb2xkQ29udGV4dDtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGluZ05ld1BhZ2UgPSBmYWxzZTtcbiAgfVxuICB0aGlzLndpbmRvd0hhbmRsZUNhY2hlID0gcGFnZUFycmF5O1xufTtcblxuXG5PYmplY3QuYXNzaWduKGNvbW1hbmRzLCBleHRlbnNpb25zLCBoZWxwZXJzKTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLFVBQVUsR0FBRyxZQUFZO0FBQy9CLE1BQU1DLFdBQVcsR0FBRyxTQUFTO0FBQzdCLE1BQU1DLFlBQVksR0FBSSxHQUFFRCxXQUFZLEdBQUU7QUFDdEMsTUFBTUUsbUNBQW1D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
|
|
441
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOQVRJVkVfV0lOIiwiV0VCVklFV19XSU4iLCJXRUJWSUVXX0JBU0UiLCJSRUNFTlRfV0VCVklFV19ERVRFQ1RJT05fVElNRU9VVF9NUyIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRDdXJyZW50Q29udGV4dCIsImN1ckNvbnRleHQiLCJnZXRDb250ZXh0c0FuZFZpZXdzIiwidXNlVXJsIiwibG9nIiwiZGVidWciLCJ3ZWJ2aWV3cyIsImxpc3RXZWJGcmFtZXMiLCJjdHhzIiwiaWQiLCJ2aWV3IiwiY29udGV4dHMiLCJwdXNoIiwidG9TdHJpbmciLCJ1c2VOZXdTYWZhcmkiLCJpc1JlYWxEZXZpY2UiLCJvcHRzIiwic2FmYXJpIiwiYWN0aXZhdGVSZWNlbnRXZWJ2aWV3IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0Iiwic3BpblRpbWVNcyIsInNwaW5IYW5kbGVzIiwiY29udGV4dElkIiwiZ2V0UmVjZW50V2Vidmlld0NvbnRleHRJZCIsImVyciIsIm1lc3NhZ2UiLCJpbmNsdWRlcyIsImVycm9yIiwiRXJyb3IiLCJzdGFjayIsInNldENvbnRleHQiLCJyZW1vdGUiLCJjYW5jZWxQYWdlTG9hZCIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ3YXJuIiwiQiIsImRlbGF5IiwiZWxlbWVudCIsImZpbmRVSUVsZW1lbnRPckVsZW1lbnRzIiwibmF0aXZlQ2xpY2siLCJzdG9wUmVtb3RlIiwiY2xvc2VXaW5kb3dCZWZvcmVEaXNjb25uZWN0aW5nIiwiZXJyb3JBbmRUaHJvdyIsImNsb3NlV2luZG93IiwiZGlzY29ubmVjdCIsImN1cldlYkZyYW1lcyIsImN1cldlYkNvb3JkcyIsInNldEN1cnJlbnRVcmwiLCJ1cmwiLCJfY3VycmVudFVybCIsImdldEN1cnJlbnRVcmwiLCJ0aXRsZVJlZ0V4cCIsInVybFJlZ0V4cCIsIl8iLCJpc1JlZ0V4cCIsImVycm9ycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiY3VycmVudFVybCIsImZpbHRlciIsImN0eCIsImZpbmQiLCJ0aXRsZSIsInRlc3QiLCJpc1dlYkNvbnRleHQiLCJpc1dlYnZpZXciLCJnZXROZXdSZW1vdGVEZWJ1Z2dlciIsInNvY2tldFBhdGgiLCJkZXZpY2UiLCJnZXRXZWJJbnNwZWN0b3JTb2NrZXQiLCJjcmVhdGVSZW1vdGVEZWJ1Z2dlciIsImJ1bmRsZUlkIiwiYWRkaXRpb25hbEJ1bmRsZUlkcyIsImFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzIiwiaXNTYWZhcmkiLCJpbmNsdWRlU2FmYXJpIiwiaW5jbHVkZVNhZmFyaUluV2Vidmlld3MiLCJwYWdlTG9hZE1zIiwicGxhdGZvcm1WZXJzaW9uIiwicmVtb3RlRGVidWdQcm94eSIsImdhcmJhZ2VDb2xsZWN0T25FeGVjdXRlIiwidXRpbCIsImhhc1ZhbHVlIiwic2FmYXJpR2FyYmFnZUNvbGxlY3QiLCJ1ZGlkIiwibG9nQWxsQ29tbXVuaWNhdGlvbiIsInNhZmFyaUxvZ0FsbENvbW11bmljYXRpb24iLCJsb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCIsInNhZmFyaUxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwic29ja2V0Q2h1bmtTaXplIiwic2FmYXJpU29ja2V0Q2h1bmtTaXplIiwid2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGgiLCJzYWZhcmlXZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aCIsIm5hbWUiLCJjYWxsYmFjayIsInNraXBSZWFkeUNoZWNrIiwiYWxyZWFkeUluQ29udGV4dCIsImRlc2lyZWQiLCJjdXJyZW50IiwiaXNOYXRpdmVDb250ZXh0IiwiY29udGV4dCIsInJlcGxhY2UiLCJpc1VuZGVmaW5lZCIsImdldENvbnRleHRzIiwiTm9TdWNoQ29udGV4dEVycm9yIiwib2xkQ29udGV4dCIsImN1cldpbmRvd0hhbmRsZSIsImFwcElkS2V5IiwicGFnZUlkS2V5IiwibWFwIiwic3BsaXQiLCJwYXJzZUludCIsInNlbGVjdGluZ05ld1BhZ2UiLCJzZWxlY3RQYWdlIiwiZW5hYmxlUGVyZm9ybWFuY2VMb2dnaW5nIiwibG9ncyIsInBlcmZvcm1hbmNlIiwiSU9TUGVyZm9ybWFuY2VMb2ciLCJzdGFydENhcHR1cmUiLCJzYWZhcmlDb25zb2xlIiwic3RhcnRDb25zb2xlIiwiYWRkTG9nTGluZSIsImJpbmQiLCJzYWZhcmlOZXR3b3JrIiwic3RhcnROZXR3b3JrIiwiY29ubmVjdFRvUmVtb3RlRGVidWdnZXIiLCJvbiIsIlJlbW90ZURlYnVnZ2VyIiwiRVZFTlRfUEFHRV9DSEFOR0UiLCJvblBhZ2VDaGFuZ2UiLCJFVkVOVF9GUkFNRVNfREVUQUNIRUQiLCJpc0VtcHR5IiwicGx1cmFsaXplIiwibGVuZ3RoIiwiam9pbiIsImNvbm5lY3QiLCJ3ZWJ2aWV3Q29ubmVjdFRpbWVvdXQiLCJzZXRDb25uZWN0aW9uS2V5IiwiZ2V0V2Vidmlld1BhZ2VzIiwic2VsZWN0QXBwIiwidW5kZWZpbmVkIiwid2Vidmlld0Nvbm5lY3RSZXRyaWVzIiwiaWdub3JlQWJvdXRCbGFua1VybCIsInBhZ2VBcnJheSIsIm1hcEZuIiwiZnVsbENvbnRleHRMaXN0IiwibW9iaWxlR2V0Q29udGV4dHMiLCJ3YWl0Rm9yV2Vidmlld01zIiwiaXNOdW1iZXIiLCJpc05hTiIsImN1ck9wdCIsInRvRml4ZWQiLCJzZXRXaW5kb3ciLCJub29wIiwiaXNFcnJvclR5cGUiLCJOb1N1Y2hXaW5kb3dFcnJvciIsImdldFdpbmRvd0hhbmRsZSIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJnZXRXaW5kb3dIYW5kbGVzIiwicGFnZUNoYW5nZU5vdGlmaWNhdGlvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJpc0Nvbm5lY3RlZCIsIm5ld0lkcyIsIm5ld1BhZ2VzIiwia2V5SWQiLCJpc1VybElnbm9yZWQiLCJzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMiLCJpZ25vcmVkSG9zdHMiLCJiIiwidHJpbSIsImlnbm9yZWRIb3N0IiwiaG9zdG5hbWUiLCJVUkwiLCJpZ24iLCJwYWdlIiwiaXNLZXkiLCJpbmZvIiwiY3VyQXBwSWRLZXkiLCJjdXJQYWdlSWRLZXkiLCJuZXdQYWdlIiwibGFzdCIsIm5lZWRzUGFnZUxvYWQiLCJjb250ZXh0QXJyYXkiLCJpc0VxdWFsIiwicGFnZUxvYWQiLCJjdXJyZW50UGFnZUlkIiwicCIsImNhdGNoIiwid2luZG93SGFuZGxlQ2FjaGUiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvY29udGV4dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSZW1vdGVEZWJ1Z2dlciwgUmVtb3RlRGVidWdnZXIgfSBmcm9tICdhcHBpdW0tcmVtb3RlLWRlYnVnZ2VyJztcbmltcG9ydCB7IGVycm9ycywgaXNFcnJvclR5cGUgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IHV0aWwsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBJT1NQZXJmb3JtYW5jZUxvZyBmcm9tICcuLi9kZXZpY2UtbG9nL2lvcy1wZXJmb3JtYW5jZS1sb2cnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgTkFUSVZFX1dJTiA9ICdOQVRJVkVfQVBQJztcbmNvbnN0IFdFQlZJRVdfV0lOID0gJ1dFQlZJRVcnO1xuY29uc3QgV0VCVklFV19CQVNFID0gYCR7V0VCVklFV19XSU59X2A7XG5jb25zdCBSRUNFTlRfV0VCVklFV19ERVRFQ1RJT05fVElNRU9VVF9NUyA9IDkwMDAwO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuXG5jb21tYW5kcy5nZXRDdXJyZW50Q29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRDb250ZXh0ICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIGlmICh0aGlzLmN1ckNvbnRleHQgJiYgdGhpcy5jdXJDb250ZXh0ICE9PSBOQVRJVkVfV0lOKSB7XG4gICAgcmV0dXJuIGAke1dFQlZJRVdfQkFTRX0ke3RoaXMuY3VyQ29udGV4dH1gO1xuICB9XG4gIHJldHVybiBOQVRJVkVfV0lOO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRDb250ZXh0c0FuZFZpZXdzID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q29udGV4dHNBbmRWaWV3cyAodXNlVXJsID0gdHJ1ZSkge1xuICB0aGlzLmxvZy5kZWJ1ZygnUmV0cmlldmluZyBjb250ZXh0cyBhbmQgdmlld3MnKTtcbiAgbGV0IHdlYnZpZXdzID0gYXdhaXQgdGhpcy5saXN0V2ViRnJhbWVzKHVzZVVybCk7XG5cbiAgbGV0IGN0eHMgPSBbe2lkOiBOQVRJVkVfV0lOLCB2aWV3OiB7fX1dO1xuICB0aGlzLmNvbnRleHRzID0gW05BVElWRV9XSU5dO1xuICBmb3IgKGxldCB2aWV3IG9mIHdlYnZpZXdzKSB7XG4gICAgY3R4cy5wdXNoKHtpZDogYCR7V0VCVklFV19CQVNFfSR7dmlldy5pZH1gLCB2aWV3fSk7XG4gICAgdGhpcy5jb250ZXh0cy5wdXNoKHZpZXcuaWQudG9TdHJpbmcoKSk7XG4gIH1cbiAgcmV0dXJuIGN0eHM7XG59O1xuXG4vLyBSaWdodCBub3cgd2UgZG9uJ3QgbmVjZXNzYXJpbHkgd2FpdCBmb3Igd2Vidmlld1xuLy8gYW5kIGZyYW1lIHRvIGxvYWQsIHdoaWNoIGxlYWRzIHRvIHJhY2UgY29uZGl0aW9ucyBhbmQgZmxha2luZXNzLFxuLy8gbGV0J3Mgc2VlIGlmIHdlIGNhbiB0cmFuc2l0aW9uIHRvIHNvbWV0aGluZyBiZXR0ZXJcbmV4dGVuc2lvbnMudXNlTmV3U2FmYXJpID0gZnVuY3Rpb24gdXNlTmV3U2FmYXJpICgpIHtcbiAgcmV0dXJuICF0aGlzLmlzUmVhbERldmljZSgpICYmIHRoaXMub3B0cy5zYWZhcmk7XG59O1xuXG5leHRlbnNpb25zLmFjdGl2YXRlUmVjZW50V2VidmlldyA9IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlUmVjZW50V2VidmlldyAoKSB7XG4gIHRoaXMubG9nLmRlYnVnKCdBY3RpdmF0aW5nIGEgcmVjZW50IHdlYnZpZXcnKTtcbiAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgY29uc3Qgc3BpblRpbWVNcyA9IDUwMDtcbiAgY29uc3Qgc3BpbkhhbmRsZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgbGV0IGNvbnRleHRJZDtcbiAgICB0cnkge1xuICAgICAgY29udGV4dElkID0gYXdhaXQgdGhpcy5nZXRSZWNlbnRXZWJ2aWV3Q29udGV4dElkKC8uKi8sIC8uKi8pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcygnQ291bGQgbm90IGNvbm5lY3QgdG8gYSB2YWxpZCBhcHAgYWZ0ZXInKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgQ291bGQgbm90IG5hdmlnYXRlIHRvIHdlYnZpZXchIEVycjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgZXJyb3Iuc3RhY2sgKz0gYFxcbkNhdXNlZCBieTogJHtlcnIuc3RhY2t9YDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnQ291bGQgbm90IG5hdmlnYXRlIHRvIHdlYnZpZXcuIFJldHJ5aW5nIGlmIHBvc3NpYmxlLicpO1xuICAgIH1cbiAgICBpZiAoY29udGV4dElkKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgUGlja2luZyB3ZWJ2aWV3ICcke2NvbnRleHRJZH0nYCk7XG4gICAgICBhd2FpdCB0aGlzLnNldENvbnRleHQoY29udGV4dElkKTtcbiAgICAgIGF3YWl0IHRoaXMucmVtb3RlLmNhbmNlbFBhZ2VMb2FkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gbm8gd2VidmlldyB3YXMgZm91bmRcbiAgICBpZiAodGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcyA+PSBSRUNFTlRfV0VCVklFV19ERVRFQ1RJT05fVElNRU9VVF9NUykge1xuICAgICAgLy8gdG9vIHNsb3csIGdldCBvdXRcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IG5hdmlnYXRlIHRvIHdlYnZpZXc7IHRoZXJlIGFyZSBub25lIScpO1xuICAgIH1cblxuICAgIHRoaXMubG9nLndhcm4oJ0NvdWxkIG5vdCBmaW5kIGFueSB3ZWJ2aWV3cyB5ZXQsIHJlZnJlc2hpbmcvcmV0cnlpbmcnKTtcbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSB8fCAhdGhpcy5vcHRzLnNhZmFyaSkge1xuICAgICAgLy8gb24gYSByZWFsIGRldmljZSwgd2hlbiBub3QgdXNpbmcgU2FmYXJpLCB3ZSBqdXN0IHdhbnQgdG8gdHJ5IGFnYWluXG4gICAgICBhd2FpdCBCLmRlbGF5KHNwaW5UaW1lTXMpO1xuICAgICAgcmV0dXJuIGF3YWl0IHNwaW5IYW5kbGVzKCk7XG4gICAgfVxuXG4gICAgLy8gZmluZCB0aGUgcmVsb2FkIGJ1dHRvbiBhbmQgdGFwIGl0LCBpZiBwb3NzaWJsZVxuICAgIGxldCBlbGVtZW50O1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnRmluZGluZyBhbmQgdGFwcGluZyByZWxvYWQgYnV0dG9uJyk7XG4gICAgICBlbGVtZW50ID0gYXdhaXQgdGhpcy5maW5kVUlFbGVtZW50T3JFbGVtZW50cygnYWNjZXNzaWJpbGl0eSBpZCcsICdSZWxvYWRCdXR0b24nLCAnJywgZmFsc2UpO1xuICAgICAgYXdhaXQgdGhpcy5uYXRpdmVDbGljayhlbGVtZW50KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYEVycm9yIGZpbmRpbmcgYW5kIHRhcHBpbmcgcmVsb2FkIGJ1dHRvbjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIHRoaXMubG9nLndhcm4oJ1JldHJ5aW5nLicpO1xuICAgICAgYXdhaXQgQi5kZWxheShzcGluVGltZU1zKTtcbiAgICB9XG5cbiAgICAvLyB0cnkgaXQgYWxsIGFnYWluXG4gICAgcmV0dXJuIGF3YWl0IHNwaW5IYW5kbGVzKCk7XG4gIH07XG4gIGF3YWl0IHNwaW5IYW5kbGVzKCk7XG59O1xuXG5oZWxwZXJzLnN0b3BSZW1vdGUgPSBhc3luYyBmdW5jdGlvbiBzdG9wUmVtb3RlIChjbG9zZVdpbmRvd0JlZm9yZURpc2Nvbm5lY3RpbmcgPSBmYWxzZSkge1xuICBpZiAoIXRoaXMucmVtb3RlKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnVHJpZWQgdG8gbGVhdmUgYSB3ZWIgZnJhbWUgYnV0IHdlcmUgbm90IGluIG9uZScpO1xuICB9XG5cbiAgaWYgKGNsb3NlV2luZG93QmVmb3JlRGlzY29ubmVjdGluZykge1xuICAgIGF3YWl0IHRoaXMuY2xvc2VXaW5kb3coKTtcbiAgfVxuICBhd2FpdCB0aGlzLnJlbW90ZS5kaXNjb25uZWN0KCk7XG4gIHRoaXMuY3VyQ29udGV4dCA9IG51bGw7XG4gIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gIHRoaXMuY3VyV2ViQ29vcmRzID0gbnVsbDtcbiAgdGhpcy5yZW1vdGUgPSBudWxsO1xufTtcblxuaGVscGVycy5zZXRDdXJyZW50VXJsID0gZnVuY3Rpb24gc2V0Q3VycmVudFVybCAodXJsKSB7XG4gIHRoaXMuX2N1cnJlbnRVcmwgPSB1cmw7XG59O1xuXG5oZWxwZXJzLmdldEN1cnJlbnRVcmwgPSBmdW5jdGlvbiBnZXRDdXJyZW50VXJsICgpIHtcbiAgcmV0dXJuIHRoaXMuX2N1cnJlbnRVcmw7XG59O1xuXG5leHRlbnNpb25zLmdldFJlY2VudFdlYnZpZXdDb250ZXh0SWQgPSBhc3luYyBmdW5jdGlvbiBnZXRSZWNlbnRXZWJ2aWV3Q29udGV4dElkICh0aXRsZVJlZ0V4cCwgdXJsUmVnRXhwKSB7XG4gIGlmICghXy5pc1JlZ0V4cCh0aXRsZVJlZ0V4cCkgJiYgIV8uaXNSZWdFeHAodXJsUmVnRXhwKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAnQSByZWd1bGFyIGV4cHJlc3Npb24gZm9yIGVpdGhlciB3ZWIgdmlldyB0aXRsZSBvciB1cmwgbXVzdCBiZSBwcm92aWRlZCdcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY3VycmVudFVybCA9IHRoaXMuZ2V0Q3VycmVudFVybCgpO1xuICBjb25zdCBjb250ZXh0cyA9IF8uZmlsdGVyKGF3YWl0IHRoaXMuZ2V0Q29udGV4dHNBbmRWaWV3cyhmYWxzZSksICd2aWV3Jyk7XG4gIC8vIGZpcnN0IHRyeSB0byBtYXRjaCBieSBjdXJyZW50IHVybFxuICBpZiAoY3VycmVudFVybCkge1xuICAgIGNvbnN0IGN0eCA9IGNvbnRleHRzLmZpbmQoKHt2aWV3fSkgPT4gKHZpZXcudXJsIHx8ICcnKSA9PT0gY3VycmVudFVybCk7XG4gICAgaWYgKGN0eCkge1xuICAgICAgcmV0dXJuIGN0eC5pZDtcbiAgICB9XG4gIH1cbiAgLy8gaWYgbm90LCB0cnkgdG8gbWF0Y2ggYnkgcmVndWxhciBleHByZXNzaW9uXG4gIHJldHVybiAoY29udGV4dHMuZmluZCgoe3ZpZXd9KSA9PlxuICAgIHZpZXcudGl0bGUgJiYgdGl0bGVSZWdFeHA/LnRlc3Qodmlldy50aXRsZSkgfHwgdmlldy51cmwgJiYgdXJsUmVnRXhwPy50ZXN0KHZpZXcudXJsKVxuICApKT8uaWQ7XG59O1xuXG5leHRlbnNpb25zLmlzV2ViQ29udGV4dCA9IGZ1bmN0aW9uIGlzV2ViQ29udGV4dCAoKSB7XG4gIHJldHVybiAhIXRoaXMuY3VyQ29udGV4dCAmJiB0aGlzLmN1ckNvbnRleHQgIT09IE5BVElWRV9XSU47XG59O1xuXG5leHRlbnNpb25zLmlzV2VidmlldyA9IGZ1bmN0aW9uIGlzV2VidmlldyAoKSB7XG4gIHJldHVybiB0aGlzLmlzV2ViQ29udGV4dCgpO1xufTtcblxuZXh0ZW5zaW9ucy5nZXROZXdSZW1vdGVEZWJ1Z2dlciA9IGFzeW5jIGZ1bmN0aW9uIGdldE5ld1JlbW90ZURlYnVnZ2VyICgpIHtcbiAgbGV0IHNvY2tldFBhdGg7XG4gIGlmICghdGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgIHNvY2tldFBhdGggPSBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmdldFdlYkluc3BlY3RvclNvY2tldCgpO1xuICB9XG4gIHJldHVybiBjcmVhdGVSZW1vdGVEZWJ1Z2dlcih7XG4gICAgYnVuZGxlSWQ6IHRoaXMub3B0cy5idW5kbGVJZCxcbiAgICBhZGRpdGlvbmFsQnVuZGxlSWRzOiB0aGlzLm9wdHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMsXG4gICAgaXNTYWZhcmk6IHRoaXMuaXNTYWZhcmkoKSxcbiAgICBpbmNsdWRlU2FmYXJpOiB0aGlzLm9wdHMuaW5jbHVkZVNhZmFyaUluV2Vidmlld3MsXG4gICAgdXNlTmV3U2FmYXJpOiB0aGlzLnVzZU5ld1NhZmFyaSgpLFxuICAgIHBhZ2VMb2FkTXM6IHRoaXMucGFnZUxvYWRNcyxcbiAgICBwbGF0Zm9ybVZlcnNpb246IHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sXG4gICAgc29ja2V0UGF0aCxcbiAgICByZW1vdGVEZWJ1Z1Byb3h5OiB0aGlzLm9wdHMucmVtb3RlRGVidWdQcm94eSxcbiAgICBnYXJiYWdlQ29sbGVjdE9uRXhlY3V0ZTogdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMuc2FmYXJpR2FyYmFnZUNvbGxlY3QpXG4gICAgICA/ICEhdGhpcy5vcHRzLnNhZmFyaUdhcmJhZ2VDb2xsZWN0XG4gICAgICA6IGZhbHNlLFxuICAgIHVkaWQ6IHRoaXMub3B0cy51ZGlkLFxuICAgIGxvZ0FsbENvbW11bmljYXRpb246IHRoaXMub3B0cy5zYWZhcmlMb2dBbGxDb21tdW5pY2F0aW9uLFxuICAgIGxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wOiB0aGlzLm9wdHMuc2FmYXJpTG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAsXG4gICAgc29ja2V0Q2h1bmtTaXplOiB0aGlzLm9wdHMuc2FmYXJpU29ja2V0Q2h1bmtTaXplLFxuICAgIHdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoOiB0aGlzLm9wdHMuc2FmYXJpV2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGhcbiAgfSwgdGhpcy5pc1JlYWxEZXZpY2UoKSk7XG59O1xuXG4vKipcbiAqIFNldCBjb250ZXh0XG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgY29udGV4dCB0byBzZXQuIEl0IGNvdWxkIGJlICdudWxsJyBhcyBOQVRJVkVfV0lOLlxuICogQHBhcmFtIHtjYWxsYmFja30gY2FsbGJhY2sgVGhlIGNhbGxiYWNrLiAoSXQgaXMgbm90IGNhbGxlZCBpbiB0aGlzIG1ldGhvZClcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2tpcFJlYWR5Q2hlY2sgLSBXaGV0aGVyIGl0IHdhaXRzIGZvciB0aGUgbmV3IGNvbnRleHQgaXMgcmVhZHlcbiAqL1xuY29tbWFuZHMuc2V0Q29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIHNldENvbnRleHQgKG5hbWUsIGNhbGxiYWNrLCBza2lwUmVhZHlDaGVjaykge1xuICBmdW5jdGlvbiBhbHJlYWR5SW5Db250ZXh0IChkZXNpcmVkLCBjdXJyZW50KSB7XG4gICAgcmV0dXJuIChkZXNpcmVkID09PSBjdXJyZW50IHx8XG4gICAgICAoZGVzaXJlZCA9PT0gbnVsbCAmJiBjdXJyZW50ID09PSBOQVRJVkVfV0lOKSB8fFxuICAgICAgKGRlc2lyZWQgPT09IE5BVElWRV9XSU4gJiYgY3VycmVudCA9PT0gbnVsbCkpO1xuICB9XG4gIGZ1bmN0aW9uIGlzTmF0aXZlQ29udGV4dCAoY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0ID09PSBOQVRJVkVfV0lOIHx8IGNvbnRleHQgPT09IG51bGw7XG4gIH1cblxuICAvLyBhbGxvdyB0aGUgZnVsbCBjb250ZXh0IGxpc3QgdG8gYmUgcGFzc2VkIGluXG4gIGlmIChuYW1lICYmIG5hbWUuaWQpIHtcbiAgICBuYW1lID0gbmFtZS5pZDtcbiAgfVxuXG4gIHRoaXMubG9nLmRlYnVnKGBBdHRlbXB0aW5nIHRvIHNldCBjb250ZXh0IHRvICcke25hbWUgfHwgTkFUSVZFX1dJTn0nIGZyb20gJyR7dGhpcy5jdXJDb250ZXh0ID8gdGhpcy5jdXJDb250ZXh0IDogTkFUSVZFX1dJTn0nYCk7XG5cbiAgaWYgKGFscmVhZHlJbkNvbnRleHQobmFtZSwgdGhpcy5jdXJDb250ZXh0KSB8fCBhbHJlYWR5SW5Db250ZXh0KF8ucmVwbGFjZShuYW1lLCBXRUJWSUVXX0JBU0UsICcnKSwgdGhpcy5jdXJDb250ZXh0KSkge1xuICAgIC8vIGFscmVhZHkgaW4gdGhlIG5hbWVkIGNvbnRleHQsIG5vIG5lZWQgdG8gZG8gYW55dGhpbmdcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgQWxyZWFkeSBpbiAnJHtuYW1lIHx8IE5BVElWRV9XSU59JyBjb250ZXh0LiBEb2luZyBub3RoaW5nLmApO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaXNOYXRpdmVDb250ZXh0KG5hbWUpKSB7XG4gICAgLy8gc3dpdGNoaW5nIGludG8gdGhlIG5hdGl2ZSBjb250ZXh0XG4gICAgdGhpcy5jdXJDb250ZXh0ID0gbnVsbDtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBzd2l0Y2hpbmcgaW50byBhIHdlYnZpZXcgY29udGV4dFxuXG4gIC8vIGlmIGNvbnRleHRzIGhhdmUgbm90IGFscmVhZHkgYmVlbiByZXRyaWV2ZWQsIGdldCB0aGVtXG4gIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMuY29udGV4dHMpKSB7XG4gICAgYXdhaXQgdGhpcy5nZXRDb250ZXh0cygpO1xuICB9XG5cbiAgbGV0IGNvbnRleHRJZCA9IF8ucmVwbGFjZShuYW1lLCBXRUJWSUVXX0JBU0UsICcnKTtcbiAgaWYgKGNvbnRleHRJZCA9PT0gJycpIHtcbiAgICAvLyBhbGxvdyB1c2VyIHRvIHBhc3MgaW4gXCJXRUJWSUVXXCIgd2l0aG91dCBhbiBpbmRleFxuICAgIC8vIHRoZSBzZWNvbmQgY29udGV4dCB3aWxsIGJlIHRoZSBmaXJzdCB3ZWJ2aWV3IGFzXG4gICAgLy8gdGhlIGZpcnN0IGlzIGFsd2F5cyBOQVRJVkVfQVBQXG4gICAgY29udGV4dElkID0gdGhpcy5jb250ZXh0c1sxXTtcbiAgfVxuICBpZiAoIV8uaW5jbHVkZXModGhpcy5jb250ZXh0cywgY29udGV4dElkKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoQ29udGV4dEVycm9yKCk7XG4gIH1cblxuICBjb25zdCBvbGRDb250ZXh0ID0gdGhpcy5jdXJDb250ZXh0O1xuICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmN1cldpbmRvd0hhbmRsZSA9IGNvbnRleHRJZDtcblxuICAvLyBgY29udGV4dElkYCB3aWxsIGJlIGluIHRoZSBmb3JtIG9mIGBhcHBJZC5wYWdlSWRgIGluIHRoaXMgY2FzZVxuICBjb25zdCBbYXBwSWRLZXksIHBhZ2VJZEtleV0gPSBfLm1hcChjb250ZXh0SWQuc3BsaXQoJy4nKSwgKGlkKSA9PiBwYXJzZUludChpZCwgMTApKTtcbiAgdHJ5IHtcbiAgICB0aGlzLnNlbGVjdGluZ05ld1BhZ2UgPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMucmVtb3RlLnNlbGVjdFBhZ2UoYXBwSWRLZXksIHBhZ2VJZEtleSwgc2tpcFJlYWR5Q2hlY2spO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmN1cldpbmRvd0hhbmRsZSA9IG9sZENvbnRleHQ7XG4gICAgdGhyb3cgZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMuc2VsZWN0aW5nTmV3UGFnZSA9IGZhbHNlO1xuICB9XG5cbiAgLy8gYXR0ZW1wdCB0byBzdGFydCBwZXJmb3JtYW5jZSBsb2dnaW5nLCBpZiByZXF1ZXN0ZWRcbiAgaWYgKHRoaXMub3B0cy5lbmFibGVQZXJmb3JtYW5jZUxvZ2dpbmcgJiYgdGhpcy5yZW1vdGUpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgU3RhcnRpbmcgcGVyZm9ybWFuY2UgbG9nIG9uICcke3RoaXMuY3VyQ29udGV4dH0nYCk7XG4gICAgdGhpcy5sb2dzLnBlcmZvcm1hbmNlID0gbmV3IElPU1BlcmZvcm1hbmNlTG9nKHRoaXMucmVtb3RlKTtcbiAgICBhd2FpdCB0aGlzLmxvZ3MucGVyZm9ybWFuY2Uuc3RhcnRDYXB0dXJlKCk7XG4gIH1cblxuICAvLyBzdGFydCBzYWZhcmkgbG9nZ2luZyBpZiB0aGUgbG9ncyBoYW5kbGVycyBhcmUgYWN0aXZlXG4gIGlmIChuYW1lICYmIG5hbWUgIT09IE5BVElWRV9XSU4gJiYgdGhpcy5sb2dzKSB7XG4gICAgaWYgKHRoaXMubG9ncy5zYWZhcmlDb25zb2xlKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlbW90ZS5zdGFydENvbnNvbGUodGhpcy5sb2dzLnNhZmFyaUNvbnNvbGUuYWRkTG9nTGluZS5iaW5kKHRoaXMubG9ncy5zYWZhcmlDb25zb2xlKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxvZ3Muc2FmYXJpTmV0d29yaykge1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdGUuc3RhcnROZXR3b3JrKHRoaXMubG9ncy5zYWZhcmlOZXR3b3JrLmFkZExvZ0xpbmUuYmluZCh0aGlzLmxvZ3Muc2FmYXJpTmV0d29yaykpO1xuICAgIH1cbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5jb25uZWN0VG9SZW1vdGVEZWJ1Z2dlciA9IGFzeW5jIGZ1bmN0aW9uIGNvbm5lY3RUb1JlbW90ZURlYnVnZ2VyICgpIHtcbiAgdGhpcy5yZW1vdGUgPSBhd2FpdCB0aGlzLmdldE5ld1JlbW90ZURlYnVnZ2VyKCk7XG5cbiAgdGhpcy5yZW1vdGUub24oUmVtb3RlRGVidWdnZXIuRVZFTlRfUEFHRV9DSEFOR0UsIHRoaXMub25QYWdlQ2hhbmdlLmJpbmQodGhpcykpO1xuICB0aGlzLnJlbW90ZS5vbihSZW1vdGVEZWJ1Z2dlci5FVkVOVF9GUkFNRVNfREVUQUNIRUQsICgpID0+IHtcbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLmN1cldlYkZyYW1lcykpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBDbGVhcmluZyAke3V0aWwucGx1cmFsaXplKCdmcmFtZScsIHRoaXMuY3VyV2ViRnJhbWVzLmxlbmd0aCwgdHJ1ZSl9OiAke3RoaXMuY3VyV2ViRnJhbWVzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gIH0pO1xuXG4gIGF3YWl0IHRoaXMucmVtb3RlLmNvbm5lY3QodGhpcy5vcHRzLndlYnZpZXdDb25uZWN0VGltZW91dCk7XG59O1xuXG5leHRlbnNpb25zLmxpc3RXZWJGcmFtZXMgPSBhc3luYyBmdW5jdGlvbiBsaXN0V2ViRnJhbWVzICh1c2VVcmwgPSB0cnVlKSB7XG4gIHVzZVVybCA9IHVzZVVybCAmJiAhdGhpcy5pc1JlYWxEZXZpY2UoKSAmJiAhIXRoaXMuZ2V0Q3VycmVudFVybCgpO1xuICB0aGlzLmxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGJ5IHVybDogJHt1c2VVcmx9JHt1c2VVcmwgPyBgIChleHBlY3RlZCB1cmw6ICcke3RoaXMuZ2V0Q3VycmVudFVybCgpfScpYCA6ICcnfWApO1xuXG4gIGlmICghdGhpcy5yZW1vdGUpIHtcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3RUb1JlbW90ZURlYnVnZ2VyKCk7XG4gICAgaWYgKCF0aGlzLnJlbW90ZS5hcHBJZEtleSkge1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdGUuc2V0Q29ubmVjdGlvbktleSgpO1xuICAgIH1cbiAgfVxuICBjb25zdCBnZXRXZWJ2aWV3UGFnZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlbW90ZS5zZWxlY3RBcHAoXG4gICAgICAgIHVzZVVybCA/IHRoaXMuZ2V0Q3VycmVudFVybCgpIDogdW5kZWZpbmVkLFxuICAgICAgICB0aGlzLm9wdHMud2Vidmlld0Nvbm5lY3RSZXRyaWVzLFxuICAgICAgICB0aGlzLm9wdHMuaWdub3JlQWJvdXRCbGFua1VybFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBObyBhdmFpbGFibGUgd2ViIHBhZ2VzOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcGFnZUFycmF5ID0gYXdhaXQgZ2V0V2Vidmlld1BhZ2VzKCk7XG4gIGlmIChfLmlzRW1wdHkocGFnZUFycmF5KSkge1xuICAgIC8vIHdlIGhhdmUgbm8gd2ViIGZyYW1lcywgYnV0IGNvbnRpbnVlIGFueXdheVxuICAgIHRoaXMubG9nLmRlYnVnKCdObyB3ZWIgZnJhbWVzIGZvdW5kLicpO1xuICB9XG4gIHJldHVybiBwYWdlQXJyYXk7XG59O1xuXG5jb21tYW5kcy5nZXRDb250ZXh0cyA9IGFzeW5jIGZ1bmN0aW9uIGdldENvbnRleHRzICgpIHtcbiAgdGhpcy5sb2cuZGVidWcoJ0dldHRpbmcgbGlzdCBvZiBhdmFpbGFibGUgY29udGV4dHMnKTtcbiAgY29uc3QgY29udGV4dHMgPSBhd2FpdCB0aGlzLmdldENvbnRleHRzQW5kVmlld3MoZmFsc2UpO1xuXG4gIGNvbnN0IG1hcEZuID0gdGhpcy5vcHRzLmZ1bGxDb250ZXh0TGlzdFxuICAgID8gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBjb250ZXh0LmlkLnRvU3RyaW5nKCksXG4gICAgICAgIHRpdGxlOiBjb250ZXh0LnZpZXcudGl0bGUsXG4gICAgICAgIHVybDogY29udGV4dC52aWV3LnVybCxcbiAgICAgICAgYnVuZGxlSWQ6IGNvbnRleHQudmlldy5idW5kbGVJZCxcbiAgICAgIH07XG4gICAgfVxuICAgIDogKGNvbnRleHQpID0+IGNvbnRleHQuaWQudG9TdHJpbmcoKTtcbiAgcmV0dXJuIGNvbnRleHRzLm1hcChtYXBGbik7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENvbnRleHRcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBUaGUgaWRlbnRpZmllciBvZiB0aGUgY29udGV4dC4gVGhlIG5hdGl2ZSBjb250ZXh0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSAnTkFUSVZFX0FQUCcgYW5kIHRoZSB3ZWJ2aWV3cyB3aWxsIGJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dFQlZJRVdfeHh4J1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSB0aXRsZSAtIFRoZSB0aXRsZSBhc3NvY2lhdGVkIHdpdGggdGhlIHdlYnZpZXcgY29udGVudFxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB1cmwgLSBUaGUgdXJsIGFzc29jaWF0ZWQgd2l0aCB0aGUgd2VidmlldyBjb250ZW50XG4gKi9cblxuLyoqXG4gKiBHZXQgdGhlIGNvbnRleHRzIGF2YWlsYWJsZSwgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXJsIGFuZCB0aXRsZSBvZiBlYWNoXG4gKiB3ZWJ2aWV3XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBPcHRpb25zIHNldCwgd2hpY2ggY2FuIGluY2x1ZGUgYHdhaXRGb3JXZWJ2aWV3TXNgIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIHBlcmlvZCB0byBwb2xsIGZvciBhdmFpbGFibGUgd2Vidmlld3NcbiAqIEByZXR1cm5zIHtBcnJheX0gTGlzdCBvZiBDb250ZXh0IG9iamVjdHNcbiAqL1xuZXh0ZW5zaW9ucy5tb2JpbGVHZXRDb250ZXh0cyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldENvbnRleHRzIChvcHRzID0ge30pIHtcbiAgbGV0IHtcbiAgICB3YWl0Rm9yV2Vidmlld01zID0gMCxcbiAgfSA9IG9wdHM7XG5cbiAgLy8gbWFrZSBzdXJlIGl0IGlzIGEgbnVtYmVyLCBzbyB0aGUgZHVyYXRpb24gY2hlY2sgd29ya3MgcHJvcGVybHlcbiAgaWYgKCFfLmlzTnVtYmVyKHdhaXRGb3JXZWJ2aWV3TXMpKSB7XG4gICAgd2FpdEZvcldlYnZpZXdNcyA9IHBhcnNlSW50KHdhaXRGb3JXZWJ2aWV3TXMsIDEwKTtcbiAgICBpZiAoaXNOYU4od2FpdEZvcldlYnZpZXdNcykpIHtcbiAgICAgIHdhaXRGb3JXZWJ2aWV3TXMgPSAwO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGN1ck9wdCA9IHRoaXMub3B0cy5mdWxsQ29udGV4dExpc3Q7XG4gIHRoaXMub3B0cy5mdWxsQ29udGV4dExpc3QgPSB0cnVlO1xuXG4gIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gIHRyeSB7XG4gICAgbGV0IGNvbnRleHRzO1xuICAgIGRvIHtcbiAgICAgIGNvbnRleHRzID0gYXdhaXQgdGhpcy5nZXRDb250ZXh0cygpO1xuXG4gICAgICBpZiAoY29udGV4dHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYEZvdW5kIHdlYnZpZXcgY29udGV4dCBhZnRlciAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgICAgICByZXR1cm4gY29udGV4dHM7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgTm8gd2Vidmlld3MgZm91bmQgaW4gJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICB9IHdoaWxlICh0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzIDwgd2FpdEZvcldlYnZpZXdNcyk7XG4gICAgcmV0dXJuIGNvbnRleHRzO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIHJlc2V0IHRoZSBvcHRpb24gc28gdGhlcmUgYXJlIG5vIHNpZGUgZWZmZWN0c1xuICAgIHRoaXMub3B0cy5mdWxsQ29udGV4dExpc3QgPSBjdXJPcHQ7XG4gIH1cbn07XG5cbmNvbW1hbmRzLnNldFdpbmRvdyA9IGFzeW5jIGZ1bmN0aW9uIHNldFdpbmRvdyAobmFtZSwgc2tpcFJlYWR5Q2hlY2spIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLnNldENvbnRleHQobmFtZSwgXy5ub29wLCBza2lwUmVhZHlDaGVjayk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIHRyYW5zbGF0ZSB0aGUgZXJyb3IgaW4gdGVybXMgb2Ygd2luZG93c1xuICAgIHRocm93IGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLk5vU3VjaENvbnRleHRFcnJvcilcbiAgICAgID8gbmV3IGVycm9ycy5Ob1N1Y2hXaW5kb3dFcnJvcigpXG4gICAgICA6IGVycjtcbiAgfVxufTtcblxuY29tbWFuZHMuZ2V0V2luZG93SGFuZGxlID0gYXN5bmMgZnVuY3Rpb24gZ2V0V2luZG93SGFuZGxlICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG4gIHRoaXMubG9nLmRlYnVnKGBHZXR0aW5nIGN1cnJlbnQgd2luZG93IGhhbmRsZWApO1xuICByZXR1cm4gdGhpcy5jdXJDb250ZXh0O1xufTtcblxuY29tbWFuZHMuZ2V0V2luZG93SGFuZGxlcyA9IGFzeW5jIGZ1bmN0aW9uIGdldFdpbmRvd0hhbmRsZXMgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuICB0aGlzLmxvZy5kZWJ1ZygnR2V0dGluZyBsaXN0IG9mIGF2YWlsYWJsZSB3aW5kb3cgaGFuZGxlcycpO1xuICBjb25zdCBjb250ZXh0cyA9IGF3YWl0IHRoaXMuZ2V0Q29udGV4dHNBbmRWaWV3cyhmYWxzZSk7XG4gIHJldHVybiBjb250ZXh0c1xuICAgIC8vIGdldCByaWQgb2YgdGhlIG5hdGl2ZSBhcHAgY29udGV4dFxuICAgIC5maWx0ZXIoKGNvbnRleHQpID0+IGNvbnRleHQuaWQgIT09IE5BVElWRV9XSU4pXG4gICAgLy8gZ2V0IHRoZSBgYXBwLmlkYCBmb3JtYXQgZXhwZWN0ZWRcbiAgICAubWFwKChjb250ZXh0KSA9PiBjb250ZXh0LnZpZXcuaWQudG9TdHJpbmcoKSk7XG59O1xuXG5leHRlbnNpb25zLm9uUGFnZUNoYW5nZSA9IGFzeW5jIGZ1bmN0aW9uIG9uUGFnZUNoYW5nZSAocGFnZUNoYW5nZU5vdGlmaWNhdGlvbikge1xuICB0aGlzLmxvZy5kZWJ1ZyhgUmVtb3RlIGRlYnVnZ2VyIG5vdGlmaWVkIHVzIG9mIGEgbmV3IHBhZ2UgbGlzdGluZzogJHtKU09OLnN0cmluZ2lmeShwYWdlQ2hhbmdlTm90aWZpY2F0aW9uKX1gKTtcbiAgaWYgKHRoaXMuc2VsZWN0aW5nTmV3UGFnZSkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdXZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBzZWxlY3RpbmcgYSBwYWdlLCBpZ25vcmluZycpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIXRoaXMucmVtb3RlIHx8ICF0aGlzLnJlbW90ZS5pc0Nvbm5lY3RlZCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdXZSBoYXZlIG5vdCB5ZXQgY29ubmVjdGVkLCBpZ25vcmluZycpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHthcHBJZEtleSwgcGFnZUFycmF5fSA9IHBhZ2VDaGFuZ2VOb3RpZmljYXRpb247XG5cbiAgbGV0IG5ld0lkcyA9IFtdO1xuICBsZXQgbmV3UGFnZXMgPSBbXTtcbiAgbGV0IGtleUlkID0gbnVsbDtcblxuICAvLyBDaGVja3MgaWYgYSBVUkwgaXMgYmxhY2tsaXN0ZWQgaW4gdGhlICdzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMnIGNhcGFiaWxpdHlcbiAgZnVuY3Rpb24gaXNVcmxJZ25vcmVkICh1cmwsIHNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcykge1xuICAgIGNvbnN0IGlnbm9yZWRIb3N0cyA9IChzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMgfHwgJycpXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcCgoYikgPT4gYi50cmltKCkpXG4gICAgICAuZmlsdGVyKChiKSA9PiAhXy5pc0VtcHR5KGIpKTtcbiAgICBmb3IgKGNvbnN0IGlnbm9yZWRIb3N0IG9mIGlnbm9yZWRIb3N0cykge1xuICAgICAgaWYgKGlnbm9yZWRIb3N0ID09PSAnYWJvdXQ6YmxhbmsnICYmIHVybCA9PT0gJ2Fib3V0OmJsYW5rJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaG9zdG5hbWUgPSBuZXcgVVJMKHVybCkuaG9zdG5hbWU7XG4gICAgICAgICAgaWYgKGhvc3RuYW1lID09PSBpZ25vcmVkSG9zdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgICAvLyBkbyBub3RoaW5nIGlmIGludmFsaWQgVVJMXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChjb25zdCBwYWdlIG9mIHBhZ2VBcnJheSkge1xuICAgIGNvbnN0IGlkID0gcGFnZS5pZC50b1N0cmluZygpO1xuICAgIG5ld0lkcy5wdXNoKGlkKTtcbiAgICBpZiAocGFnZS5pc0tleSkge1xuICAgICAga2V5SWQgPSBpZDtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dElkID0gYCR7YXBwSWRLZXl9LiR7aWR9YDtcblxuICAgIC8vIGFkZCBpZiB0aGlzIGlzIGEgbmV3IHBhZ2VcbiAgICBpZiAoIV8uaW5jbHVkZXModGhpcy5jb250ZXh0cywgY29udGV4dElkKSkge1xuICAgICAgaWYgKGlzVXJsSWdub3JlZChwYWdlLnVybCwgdGhpcy5vcHRzLnNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcykpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgTm90IHRyYWNraW5nICcke3BhZ2UudXJsfScgcGFnZSBiZWNhdXNlIGl0IGlzIGJsYWNrbGlzdGVkLiBgICtcbiAgICAgICAgICBgJ3NhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcyc9JHt0aGlzLm9wdHMuc2FmYXJpSWdub3JlV2ViSG9zdG5hbWVzfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3UGFnZXMucHVzaChpZCk7XG4gICAgICAgIHRoaXMuY29udGV4dHMucHVzaChjb250ZXh0SWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICgha2V5SWQpIHtcbiAgICAvLyBpZiB0aGVyZSBpcyBubyBrZXkgaWQsIHB1bGwgdGhlIGZpcnN0IGlkIGZyb20gdGhlIHBhZ2UgYXJyYXkgYW5kIHVzZSB0aGF0XG4gICAgLy8gYXMgYSBzdGFuZCBpblxuICAgIHRoaXMubG9nLmRlYnVnKCdObyBrZXkgaWQgZm91bmQuIENob29zaW5nIGZpcnN0IGlkIGZyb20gcGFnZSBhcnJheScpO1xuICAgIGtleUlkID0gbmV3SWRzWzBdIHx8IG51bGw7XG4gIH1cblxuICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy5jdXJDb250ZXh0KSkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdXZSBkbyBub3QgYXBwZWFyIHRvIGhhdmUgd2luZG93IHNldCB5ZXQsIGlnbm9yaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgW2N1ckFwcElkS2V5LCBjdXJQYWdlSWRLZXldID0gdGhpcy5jdXJDb250ZXh0LnNwbGl0KCcuJyk7XG5cbiAgaWYgKGN1ckFwcElkS2V5ICE9PSBhcHBJZEtleSkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdQYWdlIGNoYW5nZSBub3QgcmVmZXJyaW5nIHRvIGN1cnJlbnRseSBzZWxlY3RlZCBhcHAsIGlnbm9yaW5nLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBuZXdQYWdlID0gbnVsbDtcbiAgaWYgKG5ld1BhZ2VzLmxlbmd0aCkge1xuICAgIG5ld1BhZ2UgPSBfLmxhc3QobmV3UGFnZXMpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBXZSBoYXZlIG5ldyBwYWdlcywgc2VsZWN0aW5nIHBhZ2UgJyR7bmV3UGFnZX0nYCk7XG4gIH0gZWxzZSBpZiAoIV8uaW5jbHVkZXMobmV3SWRzLCBjdXJQYWdlSWRLZXkpKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ05ldyBwYWdlIGxpc3RpbmcgZnJvbSByZW1vdGUgZGVidWdnZXIgZG9lcyBub3QgY29udGFpbiAnICtcbiAgICAgICAgICAgICAgICAgJ2N1cnJlbnQgd2luZG93OyBhc3N1bWluZyBpdCBpcyBjbG9zZWQnKTtcbiAgICBpZiAoIXV0aWwuaGFzVmFsdWUoa2V5SWQpKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcignRG8gbm90IGhhdmUgb3VyIGN1cnJlbnQgd2luZG93IGFueW1vcmUsIGFuZCB0aGVyZSAnICtcbiAgICAgICAgICAgICAgICAgICAnYXJlIG5vdCBhbnkgbW9yZSB0byBsb2FkISBEb2luZyBub3RoaW5nLi4uJyk7XG4gICAgICB0aGlzLnNldEN1cnJlbnRVcmwodW5kZWZpbmVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRGVidWdnZXIgYWxyZWFkeSBzZWxlY3RlZCBwYWdlICcke2tleUlkfScsIGAgK1xuICAgICAgICAgICAgICAgICBgY29uZmlybWluZyB0aGF0IGNob2ljZS5gKTtcbiAgICB0aGlzLmN1ckNvbnRleHQgPSBgJHthcHBJZEtleX0uJHtrZXlJZH1gO1xuICAgIG5ld1BhZ2UgPSBrZXlJZDtcbiAgfSBlbHNlIHtcbiAgICAvLyBhdCB0aGlzIHBvaW50LCB0aGVyZSBhcmUgbm8gbmV3IHBhZ2VzLCBhbmQgdGhlIGN1cnJlbnQgcGFnZSBzdGlsbCBleGlzdHNcbiAgICB0aGlzLmxvZy5kZWJ1ZygnQ2hlY2tpbmcgaWYgcGFnZSBuZWVkcyB0byBsb2FkJyk7XG4gICAgLy8gSWYgYSB3aW5kb3cgbmF2aWdhdGVzIHRvIGFuIGFuY2hvciBpdCBkb2Vzbid0IGFsd2F5cyBmaXJlIGEgcGFnZVxuICAgIC8vIGNhbGxiYWNrIGV2ZW50LiBMZXQncyBjaGVjayBpZiB3ZSB3b3VuZCB1cCBpbiBzdWNoIGEgc2l0dWF0aW9uLlxuICAgIGNvbnN0IG5lZWRzUGFnZUxvYWQgPSAoKCkgPT4ge1xuICAgICAgLy8gbmVlZCB0byBtYXAgdGhlIHBhZ2UgaWRzIHRvIGNvbnRleHQgaWRzXG4gICAgICBjb25zdCBjb250ZXh0QXJyYXkgPSBfLm1hcChwYWdlQXJyYXksIChwYWdlKSA9PiBgJHthcHBJZEtleX0uJHtwYWdlLmlkfWApO1xuICAgICAgLy8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgY29udGV4dCBleGlzdHMgaW4gYm90aCBvdXIgcmVjb3JkZWQgY29udGV4dHMsXG4gICAgICAvLyBhbmQgdGhlIHBhZ2UgYXJyYXlcbiAgICAgIHJldHVybiAhXy5pc0VxdWFsKF8uZmluZCh0aGlzLmNvbnRleHRzLCB0aGlzLmN1ckNvbnRleHQpLCBfLmZpbmQoY29udGV4dEFycmF5LCB0aGlzLmN1ckNvbnRleHQpKTtcbiAgICB9KSgpO1xuXG4gICAgaWYgKG5lZWRzUGFnZUxvYWQpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdQYWdlIGxvYWQgbmVlZGVkLiBMb2FkaW5nLi4uJyk7XG4gICAgICBhd2FpdCB0aGlzLnJlbW90ZS5wYWdlTG9hZCgpO1xuICAgIH1cblxuICAgIHRoaXMubG9nLmRlYnVnKCdOZXcgcGFnZSBsaXN0aW5nIGlzIHNhbWUgYXMgb2xkLCBkb2luZyBub3RoaW5nJyk7XG4gIH1cblxuICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgcGFnZSBsaXN0aW5nIGlzbid0IGluZGljYXRpbmcgYSByZWRpcmVjdFxuICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLmN1ckNvbnRleHQpKSB7XG4gICAgbGV0IGN1cnJlbnRQYWdlSWQgPSBwYXJzZUludChfLmxhc3QodGhpcy5jdXJDb250ZXh0LnNwbGl0KCcuJykpLCAxMCk7XG4gICAgbGV0IHBhZ2UgPSBfLmZpbmQocGFnZUFycmF5LCAocCkgPT4gcGFyc2VJbnQocC5pZCwgMTApID09PSBjdXJyZW50UGFnZUlkKTtcbiAgICBpZiAocGFnZSAmJiBwYWdlLnVybCAhPT0gdGhpcy5nZXRDdXJyZW50VXJsKCkpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBSZWRpcmVjdGVkIGZyb20gJyR7dGhpcy5nZXRDdXJyZW50VXJsKCl9JyB0byAnJHtwYWdlLnVybH0nYCk7XG4gICAgICB0aGlzLnNldEN1cnJlbnRVcmwocGFnZS51cmwpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1dGlsLmhhc1ZhbHVlKG5ld1BhZ2UpKSB7XG4gICAgdGhpcy5zZWxlY3RpbmdOZXdQYWdlID0gdHJ1ZTtcbiAgICBjb25zdCBvbGRDb250ZXh0ID0gdGhpcy5jdXJDb250ZXh0O1xuICAgIHRoaXMuY3VyQ29udGV4dCA9IGAke2FwcElkS2V5fS4ke25ld1BhZ2V9YDtcbiAgICAvLyBkbyBub3Qgd2FpdCwgYXMgdGhpcyBjYW4gdGFrZSBhIGxvbmcgdGltZSwgYW5kIHRoZSByZXNwb25zZSBpcyBub3QgbmVjZXNzYXJ5XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrcywgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tdGhlblxuICAgIHRoaXMucmVtb3RlLnNlbGVjdFBhZ2UoYXBwSWRLZXksIHBhcnNlSW50KG5ld1BhZ2UsIDEwKSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgdGhpcy5sb2cud2FybihgRmFpbGVkIHRvIHNlbGVjdCBwYWdlOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgdGhpcy5jdXJDb250ZXh0ID0gb2xkQ29udGV4dDtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGluZ05ld1BhZ2UgPSBmYWxzZTtcbiAgfVxuICB0aGlzLndpbmRvd0hhbmRsZUNhY2hlID0gcGFnZUFycmF5O1xufTtcblxuXG5PYmplY3QuYXNzaWduKGNvbW1hbmRzLCBleHRlbnNpb25zLCBoZWxwZXJzKTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLFVBQVUsR0FBRyxZQUFZO0FBQy9CLE1BQU1DLFdBQVcsR0FBRyxTQUFTO0FBQzdCLE1BQU1DLFlBQVksR0FBSSxHQUFFRCxXQUFZLEdBQUU7QUFDdEMsTUFBTUUsbUNBQW1D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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":["NATIVE_WIN","WEBVIEW_WIN","WEBVIEW_BASE","RECENT_WEBVIEW_DETECTION_TIMEOUT_MS","commands","helpers","extensions","getCurrentContext","curContext","getContextsAndViews","useUrl","log","debug","webviews","listWebFrames","ctxs","id","view","contexts","push","toString","useNewSafari","isRealDevice","opts","safari","activateRecentWebview","timer","timing","Timer","start","spinTimeMs","spinHandles","contextId","getRecentWebviewContextId","err","message","includes","error","Error","stack","setContext","remote","cancelPageLoad","getDuration","asMilliSeconds","warn","B","delay","element","findUIElementOrElements","nativeClick","stopRemote","closeWindowBeforeDisconnecting","errorAndThrow","closeWindow","disconnect","curWebFrames","curWebCoords","setCurrentUrl","url","_currentUrl","getCurrentUrl","titleRegExp","urlRegExp","_","isRegExp","errors","InvalidArgumentError","currentUrl","filter","ctx","find","title","test","isWebContext","isWebview","getNewRemoteDebugger","socketPath","device","getWebInspectorSocket","createRemoteDebugger","bundleId","additionalBundleIds","additionalWebviewBundleIds","isSafari","includeSafari","includeSafariInWebviews","pageLoadMs","platformVersion","remoteDebugProxy","garbageCollectOnExecute","util","hasValue","safariGarbageCollect","udid","logAllCommunication","safariLogAllCommunication","logAllCommunicationHexDump","safariLogAllCommunicationHexDump","socketChunkSize","safariSocketChunkSize","webInspectorMaxFrameLength","safariWebInspectorMaxFrameLength","name","callback","skipReadyCheck","alreadyInContext","desired","current","isNativeContext","context","replace","isUndefined","getContexts","NoSuchContextError","oldContext","curWindowHandle","appIdKey","pageIdKey","map","split","parseInt","selectingNewPage","selectPage","enablePerformanceLogging","logs","performance","IOSPerformanceLog","startCapture","safariConsole","startConsole","addLogLine","bind","safariNetwork","startNetwork","connectToRemoteDebugger","on","RemoteDebugger","EVENT_PAGE_CHANGE","onPageChange","EVENT_FRAMES_DETACHED","isEmpty","pluralize","length","join","connect","webviewConnectTimeout","setConnectionKey","getWebviewPages","selectApp","undefined","webviewConnectRetries","ignoreAboutBlankUrl","pageArray","mapFn","fullContextList","mobileGetContexts","waitForWebviewMs","isNumber","isNaN","curOpt","toFixed","setWindow","noop","isErrorType","NoSuchWindowError","getWindowHandle","NotImplementedError","getWindowHandles","pageChangeNotification","JSON","stringify","isConnected","newIds","newPages","keyId","isUrlIgnored","safariIgnoreWebHostnames","ignoredHosts","b","trim","ignoredHost","hostname","URL","ign","page","isKey","info","curAppIdKey","curPageIdKey","newPage","last","needsPageLoad","contextArray","isEqual","pageLoad","currentPageId","p","catch","windowHandleCache","Object","assign"],"sources":["../../../lib/commands/context.js"],"sourcesContent":["import { createRemoteDebugger, RemoteDebugger } from 'appium-remote-debugger';\nimport { errors, isErrorType } from 'appium/driver';\nimport { util, timing } from 'appium/support';\nimport B from 'bluebird';\nimport IOSPerformanceLog from '../device-log/ios-performance-log';\nimport _ from 'lodash';\n\nconst NATIVE_WIN = 'NATIVE_APP';\nconst WEBVIEW_WIN = 'WEBVIEW';\nconst WEBVIEW_BASE = `${WEBVIEW_WIN}_`;\nconst RECENT_WEBVIEW_DETECTION_TIMEOUT_MS = 90000;\n\nconst commands = {}, helpers = {}, extensions = {};\n\n\ncommands.getCurrentContext = async function getCurrentContext () { // eslint-disable-line require-await\n if (this.curContext && this.curContext !== NATIVE_WIN) {\n return `${WEBVIEW_BASE}${this.curContext}`;\n }\n return NATIVE_WIN;\n};\n\nextensions.getContextsAndViews = async function getContextsAndViews (useUrl = true) {\n this.log.debug('Retrieving contexts and views');\n let webviews = await this.listWebFrames(useUrl);\n\n let ctxs = [{id: NATIVE_WIN, view: {}}];\n this.contexts = [NATIVE_WIN];\n for (let view of webviews) {\n ctxs.push({id: `${WEBVIEW_BASE}${view.id}`, view});\n this.contexts.push(view.id.toString());\n }\n return ctxs;\n};\n\n// Right now we don't necessarily wait for webview\n// and frame to load, which leads to race conditions and flakiness,\n// let's see if we can transition to something better\nextensions.useNewSafari = function useNewSafari () {\n return !this.isRealDevice() && this.opts.safari;\n};\n\nextensions.activateRecentWebview = async function activateRecentWebview () {\n this.log.debug('Activating a recent webview');\n const timer = new timing.Timer().start();\n const spinTimeMs = 500;\n const spinHandles = async () => {\n let contextId;\n try {\n contextId = await this.getRecentWebviewContextId(/.*/, /.*/);\n } catch (err) {\n if (!err.message.includes('Could not connect to a valid app after')) {\n const error = new Error(`Could not navigate to webview! Err: ${err.message}`);\n error.stack += `\\nCaused by: ${err.stack}`;\n throw error;\n }\n this.log.debug('Could not navigate to webview. Retrying if possible.');\n }\n if (contextId) {\n this.log.debug(`Picking webview '${contextId}'`);\n await this.setContext(contextId);\n await this.remote.cancelPageLoad();\n return;\n }\n\n // no webview was found\n if (timer.getDuration().asMilliSeconds >= RECENT_WEBVIEW_DETECTION_TIMEOUT_MS) {\n // too slow, get out\n throw new Error('Could not navigate to webview; there are none!');\n }\n\n this.log.warn('Could not find any webviews yet, refreshing/retrying');\n if (this.isRealDevice() || !this.opts.safari) {\n // on a real device, when not using Safari, we just want to try again\n await B.delay(spinTimeMs);\n return await spinHandles();\n }\n\n // find the reload button and tap it, if possible\n let element;\n try {\n this.log.debug('Finding and tapping reload button');\n element = await this.findUIElementOrElements('accessibility id', 'ReloadButton', '', false);\n await this.nativeClick(element);\n } catch (err) {\n this.log.warn(`Error finding and tapping reload button: ${err.message}`);\n this.log.warn('Retrying.');\n await B.delay(spinTimeMs);\n }\n\n // try it all again\n return await spinHandles();\n };\n await spinHandles();\n};\n\nhelpers.stopRemote = async function stopRemote (closeWindowBeforeDisconnecting = false) {\n if (!this.remote) {\n this.log.errorAndThrow('Tried to leave a web frame but were not in one');\n }\n\n if (closeWindowBeforeDisconnecting) {\n await this.closeWindow();\n }\n await this.remote.disconnect();\n this.curContext = null;\n this.curWebFrames = [];\n this.curWebCoords = null;\n this.remote = null;\n};\n\nhelpers.setCurrentUrl = function setCurrentUrl (url) {\n this._currentUrl = url;\n};\n\nhelpers.getCurrentUrl = function getCurrentUrl () {\n return this._currentUrl;\n};\n\nextensions.getRecentWebviewContextId = async function getRecentWebviewContextId (titleRegExp, urlRegExp) {\n if (!_.isRegExp(titleRegExp) && !_.isRegExp(urlRegExp)) {\n throw new errors.InvalidArgumentError(\n 'A regular expression for either web view title or url must be provided'\n );\n }\n\n const currentUrl = this.getCurrentUrl();\n const contexts = _.filter(await this.getContextsAndViews(false), 'view');\n // first try to match by current url\n if (currentUrl) {\n const ctx = contexts.find(({view}) => (view.url || '') === currentUrl);\n if (ctx) {\n return ctx.id;\n }\n }\n // if not, try to match by regular expression\n return (contexts.find(({view}) =>\n view.title && titleRegExp?.test(view.title) || view.url && urlRegExp?.test(view.url)\n ))?.id;\n};\n\nextensions.isWebContext = function isWebContext () {\n return !!this.curContext && this.curContext !== NATIVE_WIN;\n};\n\nextensions.isWebview = function isWebview () {\n return this.isWebContext();\n};\n\nextensions.getNewRemoteDebugger = async function getNewRemoteDebugger () {\n let socketPath;\n if (!this.isRealDevice()) {\n socketPath = await this.opts.device.getWebInspectorSocket();\n }\n return createRemoteDebugger({\n bundleId: this.opts.bundleId,\n additionalBundleIds: this.opts.additionalWebviewBundleIds,\n isSafari: this.isSafari(),\n includeSafari: this.opts.includeSafariInWebviews,\n useNewSafari: this.useNewSafari(),\n pageLoadMs: this.pageLoadMs,\n platformVersion: this.opts.platformVersion,\n socketPath,\n remoteDebugProxy: this.opts.remoteDebugProxy,\n garbageCollectOnExecute: util.hasValue(this.opts.safariGarbageCollect)\n ? !!this.opts.safariGarbageCollect\n : false,\n udid: this.opts.udid,\n logAllCommunication: this.opts.safariLogAllCommunication,\n logAllCommunicationHexDump: this.opts.safariLogAllCommunicationHexDump,\n socketChunkSize: this.opts.safariSocketChunkSize,\n webInspectorMaxFrameLength: this.opts.safariWebInspectorMaxFrameLength\n }, this.isRealDevice());\n};\n\n/**\n * Set context\n *\n * @param {?string} name - The name of context to set. It could be 'null' as NATIVE_WIN.\n * @param {callback} callback The callback. (It is not called in this method)\n * @param {boolean} skipReadyCheck - Whether it waits for the new context is ready\n */\ncommands.setContext = async function setContext (name, callback, skipReadyCheck) {\n function alreadyInContext (desired, current) {\n return (desired === current ||\n (desired === null && current === NATIVE_WIN) ||\n (desired === NATIVE_WIN && current === null));\n }\n function isNativeContext (context) {\n return context === NATIVE_WIN || context === null;\n }\n\n // allow the full context list to be passed in\n if (name && name.id) {\n name = name.id;\n }\n\n this.log.debug(`Attempting to set context to '${name || NATIVE_WIN}' from '${this.curContext ? this.curContext : NATIVE_WIN}'`);\n\n if (alreadyInContext(name, this.curContext) || alreadyInContext(_.replace(name, WEBVIEW_BASE, ''), this.curContext)) {\n // already in the named context, no need to do anything\n this.log.debug(`Already in '${name || NATIVE_WIN}' context. Doing nothing.`);\n return;\n }\n if (isNativeContext(name)) {\n // switching into the native context\n this.curContext = null;\n return;\n }\n\n // switching into a webview context\n\n // if contexts have not already been retrieved, get them\n if (_.isUndefined(this.contexts)) {\n await this.getContexts();\n }\n\n let contextId = _.replace(name, WEBVIEW_BASE, '');\n if (contextId === '') {\n // allow user to pass in \"WEBVIEW\" without an index\n // the second context will be the first webview as\n // the first is always NATIVE_APP\n contextId = this.contexts[1];\n }\n if (!_.includes(this.contexts, contextId)) {\n throw new errors.NoSuchContextError();\n }\n\n const oldContext = this.curContext;\n this.curContext = this.curWindowHandle = contextId;\n\n // `contextId` will be in the form of `appId.pageId` in this case\n const [appIdKey, pageIdKey] = _.map(contextId.split('.'), (id) => parseInt(id, 10));\n try {\n this.selectingNewPage = true;\n await this.remote.selectPage(appIdKey, pageIdKey, skipReadyCheck);\n } catch (err) {\n this.curContext = this.curWindowHandle = oldContext;\n throw err;\n } finally {\n this.selectingNewPage = false;\n }\n\n // attempt to start performance logging, if requested\n if (this.opts.enablePerformanceLogging && this.remote) {\n this.log.debug(`Starting performance log on '${this.curContext}'`);\n this.logs.performance = new IOSPerformanceLog(this.remote);\n await this.logs.performance.startCapture();\n }\n\n // start safari logging if the logs handlers are active\n if (name && name !== NATIVE_WIN && this.logs) {\n if (this.logs.safariConsole) {\n await this.remote.startConsole(this.logs.safariConsole.addLogLine.bind(this.logs.safariConsole));\n }\n if (this.logs.safariNetwork) {\n await this.remote.startNetwork(this.logs.safariNetwork.addLogLine.bind(this.logs.safariNetwork));\n }\n }\n};\n\nextensions.connectToRemoteDebugger = async function connectToRemoteDebugger () {\n this.remote = await this.getNewRemoteDebugger();\n\n this.remote.on(RemoteDebugger.EVENT_PAGE_CHANGE, this.onPageChange.bind(this));\n this.remote.on(RemoteDebugger.EVENT_FRAMES_DETACHED, () => {\n if (!_.isEmpty(this.curWebFrames)) {\n this.log.debug(`Clearing ${util.pluralize('frame', this.curWebFrames.length, true)}: ${this.curWebFrames.join(', ')}`);\n }\n this.curWebFrames = [];\n });\n\n await this.remote.connect(this.opts.webviewConnectTimeout);\n};\n\nextensions.listWebFrames = async function listWebFrames (useUrl = true) {\n useUrl = useUrl && !this.isRealDevice() && !!this.getCurrentUrl();\n this.log.debug(`Selecting by url: ${useUrl}${useUrl ? ` (expected url: '${this.getCurrentUrl()}')` : ''}`);\n\n if (!this.remote) {\n await this.connectToRemoteDebugger();\n if (!this.remote.appIdKey) {\n await this.remote.setConnectionKey();\n }\n }\n const getWebviewPages = async () => {\n try {\n return await this.remote.selectApp(\n useUrl ? this.getCurrentUrl() : undefined,\n this.opts.webviewConnectRetries,\n this.opts.ignoreAboutBlankUrl\n );\n } catch (err) {\n this.log.debug(`No available web pages: ${err.message}`);\n return [];\n }\n };\n const pageArray = await getWebviewPages();\n if (_.isEmpty(pageArray)) {\n // we have no web frames, but continue anyway\n this.log.debug('No web frames found.');\n }\n return pageArray;\n};\n\ncommands.getContexts = async function getContexts () {\n this.log.debug('Getting list of available contexts');\n const contexts = await this.getContextsAndViews(false);\n\n const mapFn = this.opts.fullContextList\n ? function (context) {\n return {\n id: context.id.toString(),\n title: context.view.title,\n url: context.view.url,\n bundleId: context.view.bundleId,\n };\n }\n : (context) => context.id.toString();\n return contexts.map(mapFn);\n};\n\n/**\n * @typedef {Object} Context\n *\n * @property {string} id - The identifier of the context. The native context\n * will be 'NATIVE_APP' and the webviews will be\n * 'WEBVIEW_xxx'\n * @property {?string} title - The title associated with the webview content\n * @property {?string} url - The url associated with the webview content\n */\n\n/**\n * Get the contexts available, with information about the url and title of each\n * webview\n *\n * @param {Object} opts - Options set, which can include `waitForWebviewMs` to\n * specify the period to poll for available webviews\n * @returns {Array} List of Context objects\n */\nextensions.mobileGetContexts = async function mobileGetContexts (opts = {}) {\n let {\n waitForWebviewMs = 0,\n } = opts;\n\n // make sure it is a number, so the duration check works properly\n if (!_.isNumber(waitForWebviewMs)) {\n waitForWebviewMs = parseInt(waitForWebviewMs, 10);\n if (isNaN(waitForWebviewMs)) {\n waitForWebviewMs = 0;\n }\n }\n\n const curOpt = this.opts.fullContextList;\n this.opts.fullContextList = true;\n\n const timer = new timing.Timer().start();\n try {\n let contexts;\n do {\n contexts = await this.getContexts();\n\n if (contexts.length >= 2) {\n this.log.debug(`Found webview context after ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n return contexts;\n }\n this.log.debug(`No webviews found in ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n } while (timer.getDuration().asMilliSeconds < waitForWebviewMs);\n return contexts;\n } finally {\n // reset the option so there are no side effects\n this.opts.fullContextList = curOpt;\n }\n};\n\ncommands.setWindow = async function setWindow (name, skipReadyCheck) {\n try {\n await this.setContext(name, _.noop, skipReadyCheck);\n } catch (err) {\n // translate the error in terms of windows\n throw isErrorType(err, errors.NoSuchContextError)\n ? new errors.NoSuchWindowError()\n : err;\n }\n};\n\ncommands.getWindowHandle = async function getWindowHandle () { // eslint-disable-line require-await\n if (!this.isWebContext()) {\n throw new errors.NotImplementedError();\n }\n this.log.debug(`Getting current window handle`);\n return this.curContext;\n};\n\ncommands.getWindowHandles = async function getWindowHandles () {\n if (!this.isWebContext()) {\n throw new errors.NotImplementedError();\n }\n this.log.debug('Getting list of available window handles');\n const contexts = await this.getContextsAndViews(false);\n return contexts\n // get rid of the native app context\n .filter((context) => context.id !== NATIVE_WIN)\n // get the `app.id` format expected\n .map((context) => context.view.id.toString());\n};\n\nextensions.onPageChange = async function onPageChange (pageChangeNotification) {\n this.log.debug(`Remote debugger notified us of a new page listing: ${JSON.stringify(pageChangeNotification)}`);\n if (this.selectingNewPage) {\n this.log.debug('We are in the middle of selecting a page, ignoring');\n return;\n }\n if (!this.remote || !this.remote.isConnected) {\n this.log.debug('We have not yet connected, ignoring');\n return;\n }\n\n const {appIdKey, pageArray} = pageChangeNotification;\n\n let newIds = [];\n let newPages = [];\n let keyId = null;\n\n // Checks if a URL is blacklisted in the 'safariIgnoreWebHostnames' capability\n function isUrlIgnored (url, safariIgnoreWebHostnames) {\n const ignoredHosts = (safariIgnoreWebHostnames || '')\n .split(',')\n .map((b) => b.trim())\n .filter((b) => !_.isEmpty(b));\n for (const ignoredHost of ignoredHosts) {\n if (ignoredHost === 'about:blank' && url === 'about:blank') {\n return true;\n } else {\n try {\n const hostname = new URL(url).hostname;\n if (hostname === ignoredHost) {\n return true;\n }\n } catch (ign) {\n // do nothing if invalid URL\n }\n }\n }\n return false;\n }\n\n for (const page of pageArray) {\n const id = page.id.toString();\n newIds.push(id);\n if (page.isKey) {\n keyId = id;\n }\n const contextId = `${appIdKey}.${id}`;\n\n // add if this is a new page\n if (!_.includes(this.contexts, contextId)) {\n if (isUrlIgnored(page.url, this.opts.safariIgnoreWebHostnames)) {\n this.log.info(`Not tracking '${page.url}' page because it is blacklisted. ` +\n `'safariIgnoreWebHostnames'=${this.opts.safariIgnoreWebHostnames}`);\n } else {\n newPages.push(id);\n this.contexts.push(contextId);\n }\n }\n }\n\n if (!keyId) {\n // if there is no key id, pull the first id from the page array and use that\n // as a stand in\n this.log.debug('No key id found. Choosing first id from page array');\n keyId = newIds[0] || null;\n }\n\n if (!util.hasValue(this.curContext)) {\n this.log.debug('We do not appear to have window set yet, ignoring');\n return;\n }\n\n const [curAppIdKey, curPageIdKey] = this.curContext.split('.');\n\n if (curAppIdKey !== appIdKey) {\n this.log.debug('Page change not referring to currently selected app, ignoring.');\n return;\n }\n\n let newPage = null;\n if (newPages.length) {\n newPage = _.last(newPages);\n this.log.debug(`We have new pages, selecting page '${newPage}'`);\n } else if (!_.includes(newIds, curPageIdKey)) {\n this.log.debug('New page listing from remote debugger does not contain ' +\n 'current window; assuming it is closed');\n if (!util.hasValue(keyId)) {\n this.log.error('Do not have our current window anymore, and there ' +\n 'are not any more to load! Doing nothing...');\n this.setCurrentUrl(undefined);\n return;\n }\n\n this.log.debug(`Debugger already selected page '${keyId}', ` +\n `confirming that choice.`);\n this.curContext = `${appIdKey}.${keyId}`;\n newPage = keyId;\n } else {\n // at this point, there are no new pages, and the current page still exists\n this.log.debug('Checking if page needs to load');\n // If a window navigates to an anchor it doesn't always fire a page\n // callback event. Let's check if we wound up in such a situation.\n const needsPageLoad = (() => {\n // need to map the page ids to context ids\n const contextArray = _.map(pageArray, (page) => `${appIdKey}.${page.id}`);\n // check if the current context exists in both our recorded contexts,\n // and the page array\n return !_.isEqual(_.find(this.contexts, this.curContext), _.find(contextArray, this.curContext));\n })();\n\n if (needsPageLoad) {\n this.log.debug('Page load needed. Loading...');\n await this.remote.pageLoad();\n }\n\n this.log.debug('New page listing is same as old, doing nothing');\n }\n\n // make sure that the page listing isn't indicating a redirect\n if (util.hasValue(this.curContext)) {\n let currentPageId = parseInt(_.last(this.curContext.split('.')), 10);\n let page = _.find(pageArray, (p) => parseInt(p.id, 10) === currentPageId);\n if (page && page.url !== this.getCurrentUrl()) {\n this.log.debug(`Redirected from '${this.getCurrentUrl()}' to '${page.url}'`);\n this.setCurrentUrl(page.url);\n }\n }\n\n if (util.hasValue(newPage)) {\n this.selectingNewPage = true;\n const oldContext = this.curContext;\n this.curContext = `${appIdKey}.${newPage}`;\n // do not wait, as this can take a long time, and the response is not necessary\n // eslint-disable-next-line promise/prefer-await-to-callbacks, promise/prefer-await-to-then\n this.remote.selectPage(appIdKey, parseInt(newPage, 10)).catch((err) => {\n this.log.warn(`Failed to select page: ${err.message}`);\n this.curContext = oldContext;\n });\n this.selectingNewPage = false;\n }\n this.windowHandleCache = pageArray;\n};\n\n\nObject.assign(commands, extensions, helpers);\nexport default commands;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"context.js","names":["NATIVE_WIN","WEBVIEW_WIN","WEBVIEW_BASE","RECENT_WEBVIEW_DETECTION_TIMEOUT_MS","commands","helpers","extensions","getCurrentContext","curContext","getContextsAndViews","useUrl","log","debug","webviews","listWebFrames","ctxs","id","view","contexts","push","toString","useNewSafari","isRealDevice","opts","safari","activateRecentWebview","timer","timing","Timer","start","spinTimeMs","spinHandles","contextId","getRecentWebviewContextId","err","message","includes","error","Error","stack","setContext","remote","cancelPageLoad","getDuration","asMilliSeconds","warn","B","delay","element","findUIElementOrElements","nativeClick","stopRemote","closeWindowBeforeDisconnecting","errorAndThrow","closeWindow","disconnect","curWebFrames","curWebCoords","setCurrentUrl","url","_currentUrl","getCurrentUrl","titleRegExp","urlRegExp","_","isRegExp","errors","InvalidArgumentError","currentUrl","filter","ctx","find","title","test","isWebContext","isWebview","getNewRemoteDebugger","socketPath","device","getWebInspectorSocket","createRemoteDebugger","bundleId","additionalBundleIds","additionalWebviewBundleIds","isSafari","includeSafari","includeSafariInWebviews","pageLoadMs","platformVersion","remoteDebugProxy","garbageCollectOnExecute","util","hasValue","safariGarbageCollect","udid","logAllCommunication","safariLogAllCommunication","logAllCommunicationHexDump","safariLogAllCommunicationHexDump","socketChunkSize","safariSocketChunkSize","webInspectorMaxFrameLength","safariWebInspectorMaxFrameLength","name","callback","skipReadyCheck","alreadyInContext","desired","current","isNativeContext","context","replace","isUndefined","getContexts","NoSuchContextError","oldContext","curWindowHandle","appIdKey","pageIdKey","map","split","parseInt","selectingNewPage","selectPage","enablePerformanceLogging","logs","performance","IOSPerformanceLog","startCapture","safariConsole","startConsole","addLogLine","bind","safariNetwork","startNetwork","connectToRemoteDebugger","on","RemoteDebugger","EVENT_PAGE_CHANGE","onPageChange","EVENT_FRAMES_DETACHED","isEmpty","pluralize","length","join","connect","webviewConnectTimeout","setConnectionKey","getWebviewPages","selectApp","undefined","webviewConnectRetries","ignoreAboutBlankUrl","pageArray","mapFn","fullContextList","mobileGetContexts","waitForWebviewMs","isNumber","isNaN","curOpt","toFixed","setWindow","noop","isErrorType","NoSuchWindowError","getWindowHandle","NotImplementedError","getWindowHandles","pageChangeNotification","JSON","stringify","isConnected","newIds","newPages","keyId","isUrlIgnored","safariIgnoreWebHostnames","ignoredHosts","b","trim","ignoredHost","hostname","URL","ign","page","isKey","info","curAppIdKey","curPageIdKey","newPage","last","needsPageLoad","contextArray","isEqual","pageLoad","currentPageId","p","catch","windowHandleCache","Object","assign"],"sources":["../../../lib/commands/context.js"],"sourcesContent":["import { createRemoteDebugger, RemoteDebugger } from 'appium-remote-debugger';\nimport { errors, isErrorType } from 'appium/driver';\nimport { util, timing } from 'appium/support';\nimport B from 'bluebird';\nimport IOSPerformanceLog from '../device-log/ios-performance-log';\nimport _ from 'lodash';\n\nconst NATIVE_WIN = 'NATIVE_APP';\nconst WEBVIEW_WIN = 'WEBVIEW';\nconst WEBVIEW_BASE = `${WEBVIEW_WIN}_`;\nconst RECENT_WEBVIEW_DETECTION_TIMEOUT_MS = 90000;\n\nconst commands = {}, helpers = {}, extensions = {};\n\n\ncommands.getCurrentContext = async function getCurrentContext () { // eslint-disable-line require-await\n if (this.curContext && this.curContext !== NATIVE_WIN) {\n return `${WEBVIEW_BASE}${this.curContext}`;\n }\n return NATIVE_WIN;\n};\n\nextensions.getContextsAndViews = async function getContextsAndViews (useUrl = true) {\n this.log.debug('Retrieving contexts and views');\n let webviews = await this.listWebFrames(useUrl);\n\n let ctxs = [{id: NATIVE_WIN, view: {}}];\n this.contexts = [NATIVE_WIN];\n for (let view of webviews) {\n ctxs.push({id: `${WEBVIEW_BASE}${view.id}`, view});\n this.contexts.push(view.id.toString());\n }\n return ctxs;\n};\n\n// Right now we don't necessarily wait for webview\n// and frame to load, which leads to race conditions and flakiness,\n// let's see if we can transition to something better\nextensions.useNewSafari = function useNewSafari () {\n return !this.isRealDevice() && this.opts.safari;\n};\n\nextensions.activateRecentWebview = async function activateRecentWebview () {\n this.log.debug('Activating a recent webview');\n const timer = new timing.Timer().start();\n const spinTimeMs = 500;\n const spinHandles = async () => {\n let contextId;\n try {\n contextId = await this.getRecentWebviewContextId(/.*/, /.*/);\n } catch (err) {\n if (!err.message.includes('Could not connect to a valid app after')) {\n const error = new Error(`Could not navigate to webview! Err: ${err.message}`);\n error.stack += `\\nCaused by: ${err.stack}`;\n throw error;\n }\n this.log.debug('Could not navigate to webview. Retrying if possible.');\n }\n if (contextId) {\n this.log.debug(`Picking webview '${contextId}'`);\n await this.setContext(contextId);\n await this.remote.cancelPageLoad();\n return;\n }\n\n // no webview was found\n if (timer.getDuration().asMilliSeconds >= RECENT_WEBVIEW_DETECTION_TIMEOUT_MS) {\n // too slow, get out\n throw new Error('Could not navigate to webview; there are none!');\n }\n\n this.log.warn('Could not find any webviews yet, refreshing/retrying');\n if (this.isRealDevice() || !this.opts.safari) {\n // on a real device, when not using Safari, we just want to try again\n await B.delay(spinTimeMs);\n return await spinHandles();\n }\n\n // find the reload button and tap it, if possible\n let element;\n try {\n this.log.debug('Finding and tapping reload button');\n element = await this.findUIElementOrElements('accessibility id', 'ReloadButton', '', false);\n await this.nativeClick(element);\n } catch (err) {\n this.log.warn(`Error finding and tapping reload button: ${err.message}`);\n this.log.warn('Retrying.');\n await B.delay(spinTimeMs);\n }\n\n // try it all again\n return await spinHandles();\n };\n await spinHandles();\n};\n\nhelpers.stopRemote = async function stopRemote (closeWindowBeforeDisconnecting = false) {\n if (!this.remote) {\n this.log.errorAndThrow('Tried to leave a web frame but were not in one');\n }\n\n if (closeWindowBeforeDisconnecting) {\n await this.closeWindow();\n }\n await this.remote.disconnect();\n this.curContext = null;\n this.curWebFrames = [];\n this.curWebCoords = null;\n this.remote = null;\n};\n\nhelpers.setCurrentUrl = function setCurrentUrl (url) {\n this._currentUrl = url;\n};\n\nhelpers.getCurrentUrl = function getCurrentUrl () {\n return this._currentUrl;\n};\n\nextensions.getRecentWebviewContextId = async function getRecentWebviewContextId (titleRegExp, urlRegExp) {\n if (!_.isRegExp(titleRegExp) && !_.isRegExp(urlRegExp)) {\n throw new errors.InvalidArgumentError(\n 'A regular expression for either web view title or url must be provided'\n );\n }\n\n const currentUrl = this.getCurrentUrl();\n const contexts = _.filter(await this.getContextsAndViews(false), 'view');\n // first try to match by current url\n if (currentUrl) {\n const ctx = contexts.find(({view}) => (view.url || '') === currentUrl);\n if (ctx) {\n return ctx.id;\n }\n }\n // if not, try to match by regular expression\n return (contexts.find(({view}) =>\n view.title && titleRegExp?.test(view.title) || view.url && urlRegExp?.test(view.url)\n ))?.id;\n};\n\nextensions.isWebContext = function isWebContext () {\n return !!this.curContext && this.curContext !== NATIVE_WIN;\n};\n\nextensions.isWebview = function isWebview () {\n return this.isWebContext();\n};\n\nextensions.getNewRemoteDebugger = async function getNewRemoteDebugger () {\n let socketPath;\n if (!this.isRealDevice()) {\n socketPath = await this.opts.device.getWebInspectorSocket();\n }\n return createRemoteDebugger({\n bundleId: this.opts.bundleId,\n additionalBundleIds: this.opts.additionalWebviewBundleIds,\n isSafari: this.isSafari(),\n includeSafari: this.opts.includeSafariInWebviews,\n useNewSafari: this.useNewSafari(),\n pageLoadMs: this.pageLoadMs,\n platformVersion: this.opts.platformVersion,\n socketPath,\n remoteDebugProxy: this.opts.remoteDebugProxy,\n garbageCollectOnExecute: util.hasValue(this.opts.safariGarbageCollect)\n ? !!this.opts.safariGarbageCollect\n : false,\n udid: this.opts.udid,\n logAllCommunication: this.opts.safariLogAllCommunication,\n logAllCommunicationHexDump: this.opts.safariLogAllCommunicationHexDump,\n socketChunkSize: this.opts.safariSocketChunkSize,\n webInspectorMaxFrameLength: this.opts.safariWebInspectorMaxFrameLength\n }, this.isRealDevice());\n};\n\n/**\n * Set context\n *\n * @param {?string} name - The name of context to set. It could be 'null' as NATIVE_WIN.\n * @param {callback} callback The callback. (It is not called in this method)\n * @param {boolean} skipReadyCheck - Whether it waits for the new context is ready\n */\ncommands.setContext = async function setContext (name, callback, skipReadyCheck) {\n function alreadyInContext (desired, current) {\n return (desired === current ||\n (desired === null && current === NATIVE_WIN) ||\n (desired === NATIVE_WIN && current === null));\n }\n function isNativeContext (context) {\n return context === NATIVE_WIN || context === null;\n }\n\n // allow the full context list to be passed in\n if (name && name.id) {\n name = name.id;\n }\n\n this.log.debug(`Attempting to set context to '${name || NATIVE_WIN}' from '${this.curContext ? this.curContext : NATIVE_WIN}'`);\n\n if (alreadyInContext(name, this.curContext) || alreadyInContext(_.replace(name, WEBVIEW_BASE, ''), this.curContext)) {\n // already in the named context, no need to do anything\n this.log.debug(`Already in '${name || NATIVE_WIN}' context. Doing nothing.`);\n return;\n }\n if (isNativeContext(name)) {\n // switching into the native context\n this.curContext = null;\n return;\n }\n\n // switching into a webview context\n\n // if contexts have not already been retrieved, get them\n if (_.isUndefined(this.contexts)) {\n await this.getContexts();\n }\n\n let contextId = _.replace(name, WEBVIEW_BASE, '');\n if (contextId === '') {\n // allow user to pass in \"WEBVIEW\" without an index\n // the second context will be the first webview as\n // the first is always NATIVE_APP\n contextId = this.contexts[1];\n }\n if (!_.includes(this.contexts, contextId)) {\n throw new errors.NoSuchContextError();\n }\n\n const oldContext = this.curContext;\n this.curContext = this.curWindowHandle = contextId;\n\n // `contextId` will be in the form of `appId.pageId` in this case\n const [appIdKey, pageIdKey] = _.map(contextId.split('.'), (id) => parseInt(id, 10));\n try {\n this.selectingNewPage = true;\n await this.remote.selectPage(appIdKey, pageIdKey, skipReadyCheck);\n } catch (err) {\n this.curContext = this.curWindowHandle = oldContext;\n throw err;\n } finally {\n this.selectingNewPage = false;\n }\n\n // attempt to start performance logging, if requested\n if (this.opts.enablePerformanceLogging && this.remote) {\n this.log.debug(`Starting performance log on '${this.curContext}'`);\n this.logs.performance = new IOSPerformanceLog(this.remote);\n await this.logs.performance.startCapture();\n }\n\n // start safari logging if the logs handlers are active\n if (name && name !== NATIVE_WIN && this.logs) {\n if (this.logs.safariConsole) {\n await this.remote.startConsole(this.logs.safariConsole.addLogLine.bind(this.logs.safariConsole));\n }\n if (this.logs.safariNetwork) {\n await this.remote.startNetwork(this.logs.safariNetwork.addLogLine.bind(this.logs.safariNetwork));\n }\n }\n};\n\nextensions.connectToRemoteDebugger = async function connectToRemoteDebugger () {\n this.remote = await this.getNewRemoteDebugger();\n\n this.remote.on(RemoteDebugger.EVENT_PAGE_CHANGE, this.onPageChange.bind(this));\n this.remote.on(RemoteDebugger.EVENT_FRAMES_DETACHED, () => {\n if (!_.isEmpty(this.curWebFrames)) {\n this.log.debug(`Clearing ${util.pluralize('frame', this.curWebFrames.length, true)}: ${this.curWebFrames.join(', ')}`);\n }\n this.curWebFrames = [];\n });\n\n await this.remote.connect(this.opts.webviewConnectTimeout);\n};\n\nextensions.listWebFrames = async function listWebFrames (useUrl = true) {\n useUrl = useUrl && !this.isRealDevice() && !!this.getCurrentUrl();\n this.log.debug(`Selecting by url: ${useUrl}${useUrl ? ` (expected url: '${this.getCurrentUrl()}')` : ''}`);\n\n if (!this.remote) {\n await this.connectToRemoteDebugger();\n if (!this.remote.appIdKey) {\n await this.remote.setConnectionKey();\n }\n }\n const getWebviewPages = async () => {\n try {\n return await this.remote.selectApp(\n useUrl ? this.getCurrentUrl() : undefined,\n this.opts.webviewConnectRetries,\n this.opts.ignoreAboutBlankUrl\n );\n } catch (err) {\n this.log.debug(`No available web pages: ${err.message}`);\n return [];\n }\n };\n const pageArray = await getWebviewPages();\n if (_.isEmpty(pageArray)) {\n // we have no web frames, but continue anyway\n this.log.debug('No web frames found.');\n }\n return pageArray;\n};\n\ncommands.getContexts = async function getContexts () {\n this.log.debug('Getting list of available contexts');\n const contexts = await this.getContextsAndViews(false);\n\n const mapFn = this.opts.fullContextList\n ? function (context) {\n return {\n id: context.id.toString(),\n title: context.view.title,\n url: context.view.url,\n bundleId: context.view.bundleId,\n };\n }\n : (context) => context.id.toString();\n return contexts.map(mapFn);\n};\n\n/**\n * @typedef {Object} Context\n *\n * @property {string} id - The identifier of the context. The native context\n * will be 'NATIVE_APP' and the webviews will be\n * 'WEBVIEW_xxx'\n * @property {?string} title - The title associated with the webview content\n * @property {?string} url - The url associated with the webview content\n */\n\n/**\n * Get the contexts available, with information about the url and title of each\n * webview\n *\n * @param {Object} opts - Options set, which can include `waitForWebviewMs` to\n * specify the period to poll for available webviews\n * @returns {Array} List of Context objects\n */\nextensions.mobileGetContexts = async function mobileGetContexts (opts = {}) {\n let {\n waitForWebviewMs = 0,\n } = opts;\n\n // make sure it is a number, so the duration check works properly\n if (!_.isNumber(waitForWebviewMs)) {\n waitForWebviewMs = parseInt(waitForWebviewMs, 10);\n if (isNaN(waitForWebviewMs)) {\n waitForWebviewMs = 0;\n }\n }\n\n const curOpt = this.opts.fullContextList;\n this.opts.fullContextList = true;\n\n const timer = new timing.Timer().start();\n try {\n let contexts;\n do {\n contexts = await this.getContexts();\n\n if (contexts.length >= 2) {\n this.log.debug(`Found webview context after ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n return contexts;\n }\n this.log.debug(`No webviews found in ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n } while (timer.getDuration().asMilliSeconds < waitForWebviewMs);\n return contexts;\n } finally {\n // reset the option so there are no side effects\n this.opts.fullContextList = curOpt;\n }\n};\n\ncommands.setWindow = async function setWindow (name, skipReadyCheck) {\n try {\n await this.setContext(name, _.noop, skipReadyCheck);\n } catch (err) {\n // translate the error in terms of windows\n throw isErrorType(err, errors.NoSuchContextError)\n ? new errors.NoSuchWindowError()\n : err;\n }\n};\n\ncommands.getWindowHandle = async function getWindowHandle () { // eslint-disable-line require-await\n if (!this.isWebContext()) {\n throw new errors.NotImplementedError();\n }\n this.log.debug(`Getting current window handle`);\n return this.curContext;\n};\n\ncommands.getWindowHandles = async function getWindowHandles () {\n if (!this.isWebContext()) {\n throw new errors.NotImplementedError();\n }\n this.log.debug('Getting list of available window handles');\n const contexts = await this.getContextsAndViews(false);\n return contexts\n // get rid of the native app context\n .filter((context) => context.id !== NATIVE_WIN)\n // get the `app.id` format expected\n .map((context) => context.view.id.toString());\n};\n\nextensions.onPageChange = async function onPageChange (pageChangeNotification) {\n this.log.debug(`Remote debugger notified us of a new page listing: ${JSON.stringify(pageChangeNotification)}`);\n if (this.selectingNewPage) {\n this.log.debug('We are in the middle of selecting a page, ignoring');\n return;\n }\n if (!this.remote || !this.remote.isConnected) {\n this.log.debug('We have not yet connected, ignoring');\n return;\n }\n\n const {appIdKey, pageArray} = pageChangeNotification;\n\n let newIds = [];\n let newPages = [];\n let keyId = null;\n\n // Checks if a URL is blacklisted in the 'safariIgnoreWebHostnames' capability\n function isUrlIgnored (url, safariIgnoreWebHostnames) {\n const ignoredHosts = (safariIgnoreWebHostnames || '')\n .split(',')\n .map((b) => b.trim())\n .filter((b) => !_.isEmpty(b));\n for (const ignoredHost of ignoredHosts) {\n if (ignoredHost === 'about:blank' && url === 'about:blank') {\n return true;\n } else {\n try {\n const hostname = new URL(url).hostname;\n if (hostname === ignoredHost) {\n return true;\n }\n } catch (ign) {\n // do nothing if invalid URL\n }\n }\n }\n return false;\n }\n\n for (const page of pageArray) {\n const id = page.id.toString();\n newIds.push(id);\n if (page.isKey) {\n keyId = id;\n }\n const contextId = `${appIdKey}.${id}`;\n\n // add if this is a new page\n if (!_.includes(this.contexts, contextId)) {\n if (isUrlIgnored(page.url, this.opts.safariIgnoreWebHostnames)) {\n this.log.info(`Not tracking '${page.url}' page because it is blacklisted. ` +\n `'safariIgnoreWebHostnames'=${this.opts.safariIgnoreWebHostnames}`);\n } else {\n newPages.push(id);\n this.contexts.push(contextId);\n }\n }\n }\n\n if (!keyId) {\n // if there is no key id, pull the first id from the page array and use that\n // as a stand in\n this.log.debug('No key id found. Choosing first id from page array');\n keyId = newIds[0] || null;\n }\n\n if (!util.hasValue(this.curContext)) {\n this.log.debug('We do not appear to have window set yet, ignoring');\n return;\n }\n\n const [curAppIdKey, curPageIdKey] = this.curContext.split('.');\n\n if (curAppIdKey !== appIdKey) {\n this.log.debug('Page change not referring to currently selected app, ignoring.');\n return;\n }\n\n let newPage = null;\n if (newPages.length) {\n newPage = _.last(newPages);\n this.log.debug(`We have new pages, selecting page '${newPage}'`);\n } else if (!_.includes(newIds, curPageIdKey)) {\n this.log.debug('New page listing from remote debugger does not contain ' +\n 'current window; assuming it is closed');\n if (!util.hasValue(keyId)) {\n this.log.error('Do not have our current window anymore, and there ' +\n 'are not any more to load! Doing nothing...');\n this.setCurrentUrl(undefined);\n return;\n }\n\n this.log.debug(`Debugger already selected page '${keyId}', ` +\n `confirming that choice.`);\n this.curContext = `${appIdKey}.${keyId}`;\n newPage = keyId;\n } else {\n // at this point, there are no new pages, and the current page still exists\n this.log.debug('Checking if page needs to load');\n // If a window navigates to an anchor it doesn't always fire a page\n // callback event. Let's check if we wound up in such a situation.\n const needsPageLoad = (() => {\n // need to map the page ids to context ids\n const contextArray = _.map(pageArray, (page) => `${appIdKey}.${page.id}`);\n // check if the current context exists in both our recorded contexts,\n // and the page array\n return !_.isEqual(_.find(this.contexts, this.curContext), _.find(contextArray, this.curContext));\n })();\n\n if (needsPageLoad) {\n this.log.debug('Page load needed. Loading...');\n await this.remote.pageLoad();\n }\n\n this.log.debug('New page listing is same as old, doing nothing');\n }\n\n // make sure that the page listing isn't indicating a redirect\n if (util.hasValue(this.curContext)) {\n let currentPageId = parseInt(_.last(this.curContext.split('.')), 10);\n let page = _.find(pageArray, (p) => parseInt(p.id, 10) === currentPageId);\n if (page && page.url !== this.getCurrentUrl()) {\n this.log.debug(`Redirected from '${this.getCurrentUrl()}' to '${page.url}'`);\n this.setCurrentUrl(page.url);\n }\n }\n\n if (util.hasValue(newPage)) {\n this.selectingNewPage = true;\n const oldContext = this.curContext;\n this.curContext = `${appIdKey}.${newPage}`;\n // do not wait, as this can take a long time, and the response is not necessary\n // eslint-disable-next-line promise/prefer-await-to-callbacks, promise/prefer-await-to-then\n this.remote.selectPage(appIdKey, parseInt(newPage, 10)).catch((err) => {\n this.log.warn(`Failed to select page: ${err.message}`);\n this.curContext = oldContext;\n });\n this.selectingNewPage = false;\n }\n this.windowHandleCache = pageArray;\n};\n\n\nObject.assign(commands, extensions, helpers);\nexport default commands;\n"],"mappings":"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"}
|
|
@@ -70,7 +70,9 @@ const desiredCapConstraints = {
|
|
|
70
70
|
isString: true
|
|
71
71
|
},
|
|
72
72
|
processArguments: {
|
|
73
|
-
}
|
|
73
|
+
}
|
|
74
|
+
,
|
|
75
|
+
|
|
74
76
|
showIOSLog: {
|
|
75
77
|
isBoolean: true
|
|
76
78
|
},
|
|
@@ -174,7 +176,9 @@ const desiredCapConstraints = {
|
|
|
174
176
|
isBoolean: true
|
|
175
177
|
},
|
|
176
178
|
commandTimeouts: {
|
|
177
|
-
}
|
|
179
|
+
}
|
|
180
|
+
,
|
|
181
|
+
|
|
178
182
|
wdaStartupRetries: {
|
|
179
183
|
isNumber: true
|
|
180
184
|
},
|
|
@@ -293,7 +297,9 @@ const desiredCapConstraints = {
|
|
|
293
297
|
isBoolean: true
|
|
294
298
|
},
|
|
295
299
|
additionalWebviewBundleIds: {
|
|
296
|
-
}
|
|
300
|
+
}
|
|
301
|
+
,
|
|
302
|
+
|
|
297
303
|
webviewConnectTimeout: {
|
|
298
304
|
isNumber: true
|
|
299
305
|
},
|
|
@@ -347,4 +353,4 @@ const desiredCapConstraints = {
|
|
|
347
353
|
exports.desiredCapConstraints = desiredCapConstraints;
|
|
348
354
|
var _default = desiredCapConstraints;
|
|
349
355
|
exports.default = _default;
|
|
350
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQTEFURk9STV9OQU1FX0lPUyIsIlBMQVRGT1JNX05BTUVfVFZPUyIsImRlc2lyZWRDYXBDb25zdHJhaW50cyIsInBsYXRmb3JtTmFtZSIsInByZXNlbmNlIiwiaXNTdHJpbmciLCJpbmNsdXNpb25DYXNlSW5zZW5zaXRpdmUiLCJicm93c2VyTmFtZSIsImFwcCIsImNhbGVuZGFyRm9ybWF0IiwiYnVuZGxlSWQiLCJ1ZGlkIiwiYXV0b0FjY2VwdEFsZXJ0cyIsImlzQm9vbGVhbiIsImF1dG9EaXNtaXNzQWxlcnRzIiwibmF0aXZlV2ViVGFwIiwic2FmYXJpSW5pdGlhbFVybCIsInNhZmFyaUFsbG93UG9wdXBzIiwic2FmYXJpSWdub3JlRnJhdWRXYXJuaW5nIiwic2FmYXJpT3BlbkxpbmtzSW5CYWNrZ3JvdW5kIiwic2FmYXJpU2hvd0Z1bGxSZXNwb25zZSIsImtlZXBLZXlDaGFpbnMiLCJsb2NhdGlvblNlcnZpY2VzRW5hYmxlZCIsImxvY2F0aW9uU2VydmljZXNBdXRob3JpemVkIiwicmVzZXRMb2NhdGlvblNlcnZpY2UiLCJsb2NhbGl6YWJsZVN0cmluZ3NEaXIiLCJwcm9jZXNzQXJndW1lbnRzIiwic2hvd0lPU0xvZyIsIndlYnZpZXdDb25uZWN0UmV0cmllcyIsImlzTnVtYmVyIiwiY2xlYXJTeXN0ZW1GaWxlcyIsImN1c3RvbVNTTENlcnQiLCJ3ZWJraXRSZXNwb25zZVRpbWVvdXQiLCJyZW1vdGVEZWJ1Z1Byb3h5IiwiZW5hYmxlUGVyZm9ybWFuY2VMb2dnaW5nIiwiZW5hYmxlQXN5bmNFeGVjdXRlRnJvbUh0dHBzIiwiZnVsbENvbnRleHRMaXN0IiwiaWdub3JlQWJvdXRCbGFua1VybCIsInNraXBMb2dDYXB0dXJlIiwiZGV2aWNlTmFtZSIsInNob3dYY29kZUxvZyIsIndkYUxvY2FsUG9ydCIsIndkYUJhc2VVcmwiLCJpb3NJbnN0YWxsUGF1c2UiLCJ4Y29kZUNvbmZpZ0ZpbGUiLCJ4Y29kZU9yZ0lkIiwieGNvZGVTaWduaW5nSWQiLCJrZXljaGFpblBhdGgiLCJrZXljaGFpblBhc3N3b3JkIiwiYm9vdHN0cmFwUGF0aCIsImFnZW50UGF0aCIsInRhcFdpdGhTaG9ydFByZXNzRHVyYXRpb24iLCJzY2FsZUZhY3RvciIsInVzZVByZWJ1aWx0V0RBIiwid2ViRHJpdmVyQWdlbnRVcmwiLCJkZXJpdmVkRGF0YVBhdGgiLCJsYXVuY2hXaXRoSURCIiwidXNlTmV3V0RBIiwid2RhTGF1bmNoVGltZW91dCIsIndkYUNvbm5lY3Rpb25UaW1lb3V0IiwidXBkYXRlZFdEQUJ1bmRsZUlkIiwicmVzZXRPblNlc3Npb25TdGFydE9ubHkiLCJjb21tYW5kVGltZW91dHMiLCJ3ZGFTdGFydHVwUmV0cmllcyIsIndkYVN0YXJ0dXBSZXRyeUludGVydmFsIiwicHJlYnVpbGRXREEiLCJjb25uZWN0SGFyZHdhcmVLZXlib2FyZCIsImZvcmNlVHVybk9uU29mdHdhcmVLZXlib2FyZFNpbXVsYXRvciIsInNpbXVsYXRvclBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jIiwic2ltdWxhdG9yRGV2aWNlc1NldFBhdGgiLCJjYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQiLCJ1c2VTaW1wbGVCdWlsZFRlc3QiLCJ3YWl0Rm9yUXVpZXNjZW5jZSIsIm1heFR5cGluZ0ZyZXF1ZW5jeSIsIm5hdGl2ZVR5cGluZyIsInNpbXBsZUlzVmlzaWJsZUNoZWNrIiwic2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXIiLCJpc0hlYWRsZXNzIiwidXNlWGN0ZXN0cnVuRmlsZSIsImFic29sdXRlV2ViTG9jYXRpb25zIiwic2ltdWxhdG9yV2luZG93Q2VudGVyIiwic2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQiLCJzaW11bGF0b3JUcmFjZVBvaW50ZXIiLCJ1c2VKU09OU291cmNlIiwiZW5mb3JjZUZyZXNoU2ltdWxhdG9yQ3JlYXRpb24iLCJzaHV0ZG93bk90aGVyU2ltdWxhdG9ycyIsImtleWNoYWluc0V4Y2x1ZGVQYXR0ZXJucyIsInNob3dTYWZhcmlDb25zb2xlTG9nIiwic2hvd1NhZmFyaU5ldHdvcmtMb2ciLCJzYWZhcmlHYXJiYWdlQ29sbGVjdCIsInNhZmFyaUdsb2JhbFByZWZlcmVuY2VzIiwiaXNPYmplY3QiLCJzYWZhcmlMb2dBbGxDb21tdW5pY2F0aW9uIiwic2FmYXJpTG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAiLCJzYWZhcmlTb2NrZXRDaHVua1NpemUiLCJtanBlZ1NlcnZlclBvcnQiLCJyZWR1Y2VNb3Rpb24iLCJtanBlZ1NjcmVlbnNob3RVcmwiLCJwZXJtaXNzaW9ucyIsInNjcmVlbnNob3RRdWFsaXR5Iiwid2RhRXZlbnRsb29wSWRsZURlbGF5Iiwib3RoZXJBcHBzIiwiaW5jbHVkZVNhZmFyaUluV2Vidmlld3MiLCJhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyIsIndlYnZpZXdDb25uZWN0VGltZW91dCIsImlvc1NpbXVsYXRvckxvZ3NQcmVkaWNhdGUiLCJhcHBQdXNoVGltZW91dCIsIm5hdGl2ZVdlYlRhcFN0cmljdCIsInNhZmFyaVdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoIiwiYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24iLCJ3YWl0Rm9ySWRsZVRpbWVvdXQiLCJyZXN1bHRCdW5kbGVQYXRoIiwicmVzdWx0QnVuZGxlVmVyc2lvbiIsInNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcyIsImluY2x1ZGVEZXZpY2VDYXBzVG9TZXNzaW9uSW5mbyIsImRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90cyIsInNob3VsZFRlcm1pbmF0ZUFwcCIsImZvcmNlQXBwTGF1bmNoIiwidXNlTmF0aXZlQ2FjaGluZ1N0cmF0ZWd5IiwiYXBwSW5zdGFsbFN0cmF0ZWd5Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2Rlc2lyZWQtY2Fwcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGVzZSBwbGF0Zm9ybSBuYW1lcyBzaG91bGQgYmUgdmFsaWQgaW4gc2ltdWxhdG9yIG5hbWVcbmNvbnN0IFBMQVRGT1JNX05BTUVfSU9TID0gJ2lPUyc7XG5jb25zdCBQTEFURk9STV9OQU1FX1RWT1MgPSAndHZPUyc7XG5cbmNvbnN0IGRlc2lyZWRDYXBDb25zdHJhaW50cyA9IHtcbiAgcGxhdGZvcm1OYW1lOiB7IC8vIG92ZXJyaWRlXG4gICAgcHJlc2VuY2U6IHRydWUsXG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBbUExBVEZPUk1fTkFNRV9JT1MsIFBMQVRGT1JNX05BTUVfVFZPU11cbiAgfSxcbiAgYnJvd3Nlck5hbWU6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHA6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBjYWxlbmRhckZvcm1hdDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGJ1bmRsZUlkOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgdWRpZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGF1dG9BY2NlcHRBbGVydHM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgYXV0b0Rpc21pc3NBbGVydHM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgbmF0aXZlV2ViVGFwOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNhZmFyaUluaXRpYWxVcmw6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBzYWZhcmlBbGxvd1BvcHVwczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBzYWZhcmlJZ25vcmVGcmF1ZFdhcm5pbmc6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2FmYXJpT3BlbkxpbmtzSW5CYWNrZ3JvdW5kOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNhZmFyaVNob3dGdWxsUmVzcG9uc2U6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAga2VlcEtleUNoYWluczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBsb2NhdGlvblNlcnZpY2VzRW5hYmxlZDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBsb2NhdGlvblNlcnZpY2VzQXV0aG9yaXplZDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZXNldExvY2F0aW9uU2VydmljZToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBsb2NhbGl6YWJsZVN0cmluZ3NEaXI6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBwcm9jZXNzQXJndW1lbnRzOiB7XG4gICAgLy8gcmVjb2duaXplIHRoZSBjYXAsXG4gICAgLy8gYnV0IHZhbGlkYXRlIGluIHRoZSBkcml2ZXIjdmFsaWRhdGVEZXNpcmVkQ2FwcyBtZXRob2RcbiAgfSxcbiAgc2hvd0lPU0xvZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB3ZWJ2aWV3Q29ubmVjdFJldHJpZXM6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBjbGVhclN5c3RlbUZpbGVzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGN1c3RvbVNTTENlcnQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB3ZWJraXRSZXNwb25zZVRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICByZW1vdGVEZWJ1Z1Byb3h5OiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgZW5hYmxlUGVyZm9ybWFuY2VMb2dnaW5nOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGVuYWJsZUFzeW5jRXhlY3V0ZUZyb21IdHRwczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBmdWxsQ29udGV4dExpc3Q6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgaWdub3JlQWJvdXRCbGFua1VybDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBza2lwTG9nQ2FwdHVyZToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBkZXZpY2VOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgc2hvd1hjb2RlTG9nOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHdkYUxvY2FsUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHdkYUJhc2VVcmw6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBpb3NJbnN0YWxsUGF1c2U6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICB4Y29kZUNvbmZpZ0ZpbGU6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB4Y29kZU9yZ0lkOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgeGNvZGVTaWduaW5nSWQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBrZXljaGFpblBhdGg6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBrZXljaGFpblBhc3N3b3JkOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYm9vdHN0cmFwUGF0aDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFnZW50UGF0aDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHRhcFdpdGhTaG9ydFByZXNzRHVyYXRpb246IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBzY2FsZUZhY3Rvcjoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHVzZVByZWJ1aWx0V0RBOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHdlYkRyaXZlckFnZW50VXJsOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgZGVyaXZlZERhdGFQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgbGF1bmNoV2l0aElEQjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB1c2VOZXdXREE6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgd2RhTGF1bmNoVGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHdkYUNvbm5lY3Rpb25UaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgdXBkYXRlZFdEQUJ1bmRsZUlkOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgcmVzZXRPblNlc3Npb25TdGFydE9ubHk6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY29tbWFuZFRpbWVvdXRzOiB7XG4gICAgLy8gcmVjb2duaXplIHRoZSBjYXAsXG4gICAgLy8gYnV0IHZhbGlkYXRlIGluIHRoZSBkcml2ZXIjdmFsaWRhdGVEZXNpcmVkQ2FwcyBtZXRob2RcbiAgfSxcbiAgd2RhU3RhcnR1cFJldHJpZXM6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICB3ZGFTdGFydHVwUmV0cnlJbnRlcnZhbDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHByZWJ1aWxkV0RBOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGNvbm5lY3RIYXJkd2FyZUtleWJvYXJkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGZvcmNlVHVybk9uU29mdHdhcmVLZXlib2FyZFNpbXVsYXRvcjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBzaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYzoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNpbXVsYXRvckRldmljZXNTZXRQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHVzZVNpbXBsZUJ1aWxkVGVzdDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB3YWl0Rm9yUXVpZXNjZW5jZToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBtYXhUeXBpbmdGcmVxdWVuY3k6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBuYXRpdmVUeXBpbmc6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2ltcGxlSXNWaXNpYmxlQ2hlY2s6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXI6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgaXNIZWFkbGVzczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB1c2VYY3Rlc3RydW5GaWxlOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFic29sdXRlV2ViTG9jYXRpb25zOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNpbXVsYXRvcldpbmRvd0NlbnRlcjoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgc2ltdWxhdG9yVHJhY2VQb2ludGVyOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHVzZUpTT05Tb3VyY2U6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZW5mb3JjZUZyZXNoU2ltdWxhdG9yQ3JlYXRpb246IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2h1dGRvd25PdGhlclNpbXVsYXRvcnM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAga2V5Y2hhaW5zRXhjbHVkZVBhdHRlcm5zOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgc2hvd1NhZmFyaUNvbnNvbGVMb2c6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hvd1NhZmFyaU5ldHdvcmtMb2c6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2FmYXJpR2FyYmFnZUNvbGxlY3Q6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2FmYXJpR2xvYmFsUHJlZmVyZW5jZXM6IHtcbiAgICBpc09iamVjdDogdHJ1ZVxuICB9LFxuICBzYWZhcmlMb2dBbGxDb21tdW5pY2F0aW9uOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNhZmFyaUxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNhZmFyaVNvY2tldENodW5rU2l6ZToge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIG1qcGVnU2VydmVyUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHJlZHVjZU1vdGlvbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBtanBlZ1NjcmVlbnNob3RVcmw6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBwZXJtaXNzaW9uczoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNjcmVlbnNob3RRdWFsaXR5OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgd2RhRXZlbnRsb29wSWRsZURlbGF5OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgb3RoZXJBcHBzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgaW5jbHVkZVNhZmFyaUluV2Vidmlld3M6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHM6IHtcbiAgICAvLyByZWNvZ25pemUgdGhlIGNhcGFiaWxpdHlcbiAgICAvLyBidXQgdmFsaWRhdGUgaW4gZHJpdmVyI3ZhbGlkYXRlRGVzaXJlZENhcHNcbiAgfSxcbiAgd2Vidmlld0Nvbm5lY3RUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgaW9zU2ltdWxhdG9yTG9nc1ByZWRpY2F0ZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFwcFB1c2hUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgbmF0aXZlV2ViVGFwU3RyaWN0OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNhZmFyaVdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoOiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb246IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgd2FpdEZvcklkbGVUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgcmVzdWx0QnVuZGxlUGF0aDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHJlc3VsdEJ1bmRsZVZlcnNpb246IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXM6IHtcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgfSxcbiAgaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlLFxuICB9LFxuICBkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWUsXG4gIH0sXG4gIHNob3VsZFRlcm1pbmF0ZUFwcDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZSxcbiAgfSxcbiAgZm9yY2VBcHBMYXVuY2g6IHtcbiAgICBpc0Jvb2xlYW46IHRydWUsXG4gIH0sXG4gIHVzZU5hdGl2ZUNhY2hpbmdTdHJhdGVneToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZSxcbiAgfSxcbiAgYXBwSW5zdGFsbFN0cmF0ZWd5OiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBbJ3NlcmlhbCcsICdwYXJhbGxlbCcsICdpb3MtZGVwbG95J11cbiAgfVxufTtcblxuZXhwb3J0IHsgZGVzaXJlZENhcENvbnN0cmFpbnRzLCBQTEFURk9STV9OQU1FX0lPUywgUExBVEZPUk1fTkFNRV9UVk9TIH07XG5leHBvcnQgZGVmYXVsdCBkZXNpcmVkQ2FwQ29uc3RyYWlu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
|
|
356
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQTEFURk9STV9OQU1FX0lPUyIsIlBMQVRGT1JNX05BTUVfVFZPUyIsImRlc2lyZWRDYXBDb25zdHJhaW50cyIsInBsYXRmb3JtTmFtZSIsInByZXNlbmNlIiwiaXNTdHJpbmciLCJpbmNsdXNpb25DYXNlSW5zZW5zaXRpdmUiLCJicm93c2VyTmFtZSIsImFwcCIsImNhbGVuZGFyRm9ybWF0IiwiYnVuZGxlSWQiLCJ1ZGlkIiwiYXV0b0FjY2VwdEFsZXJ0cyIsImlzQm9vbGVhbiIsImF1dG9EaXNtaXNzQWxlcnRzIiwibmF0aXZlV2ViVGFwIiwic2FmYXJpSW5pdGlhbFVybCIsInNhZmFyaUFsbG93UG9wdXBzIiwic2FmYXJpSWdub3JlRnJhdWRXYXJuaW5nIiwic2FmYXJpT3BlbkxpbmtzSW5CYWNrZ3JvdW5kIiwic2FmYXJpU2hvd0Z1bGxSZXNwb25zZSIsImtlZXBLZXlDaGFpbnMiLCJsb2NhdGlvblNlcnZpY2VzRW5hYmxlZCIsImxvY2F0aW9uU2VydmljZXNBdXRob3JpemVkIiwicmVzZXRMb2NhdGlvblNlcnZpY2UiLCJsb2NhbGl6YWJsZVN0cmluZ3NEaXIiLCJwcm9jZXNzQXJndW1lbnRzIiwic2hvd0lPU0xvZyIsIndlYnZpZXdDb25uZWN0UmV0cmllcyIsImlzTnVtYmVyIiwiY2xlYXJTeXN0ZW1GaWxlcyIsImN1c3RvbVNTTENlcnQiLCJ3ZWJraXRSZXNwb25zZVRpbWVvdXQiLCJyZW1vdGVEZWJ1Z1Byb3h5IiwiZW5hYmxlUGVyZm9ybWFuY2VMb2dnaW5nIiwiZW5hYmxlQXN5bmNFeGVjdXRlRnJvbUh0dHBzIiwiZnVsbENvbnRleHRMaXN0IiwiaWdub3JlQWJvdXRCbGFua1VybCIsInNraXBMb2dDYXB0dXJlIiwiZGV2aWNlTmFtZSIsInNob3dYY29kZUxvZyIsIndkYUxvY2FsUG9ydCIsIndkYUJhc2VVcmwiLCJpb3NJbnN0YWxsUGF1c2UiLCJ4Y29kZUNvbmZpZ0ZpbGUiLCJ4Y29kZU9yZ0lkIiwieGNvZGVTaWduaW5nSWQiLCJrZXljaGFpblBhdGgiLCJrZXljaGFpblBhc3N3b3JkIiwiYm9vdHN0cmFwUGF0aCIsImFnZW50UGF0aCIsInRhcFdpdGhTaG9ydFByZXNzRHVyYXRpb24iLCJzY2FsZUZhY3RvciIsInVzZVByZWJ1aWx0V0RBIiwid2ViRHJpdmVyQWdlbnRVcmwiLCJkZXJpdmVkRGF0YVBhdGgiLCJsYXVuY2hXaXRoSURCIiwidXNlTmV3V0RBIiwid2RhTGF1bmNoVGltZW91dCIsIndkYUNvbm5lY3Rpb25UaW1lb3V0IiwidXBkYXRlZFdEQUJ1bmRsZUlkIiwicmVzZXRPblNlc3Npb25TdGFydE9ubHkiLCJjb21tYW5kVGltZW91dHMiLCJ3ZGFTdGFydHVwUmV0cmllcyIsIndkYVN0YXJ0dXBSZXRyeUludGVydmFsIiwicHJlYnVpbGRXREEiLCJjb25uZWN0SGFyZHdhcmVLZXlib2FyZCIsImZvcmNlVHVybk9uU29mdHdhcmVLZXlib2FyZFNpbXVsYXRvciIsInNpbXVsYXRvclBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jIiwic2ltdWxhdG9yRGV2aWNlc1NldFBhdGgiLCJjYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQiLCJ1c2VTaW1wbGVCdWlsZFRlc3QiLCJ3YWl0Rm9yUXVpZXNjZW5jZSIsIm1heFR5cGluZ0ZyZXF1ZW5jeSIsIm5hdGl2ZVR5cGluZyIsInNpbXBsZUlzVmlzaWJsZUNoZWNrIiwic2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXIiLCJpc0hlYWRsZXNzIiwidXNlWGN0ZXN0cnVuRmlsZSIsImFic29sdXRlV2ViTG9jYXRpb25zIiwic2ltdWxhdG9yV2luZG93Q2VudGVyIiwic2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQiLCJzaW11bGF0b3JUcmFjZVBvaW50ZXIiLCJ1c2VKU09OU291cmNlIiwiZW5mb3JjZUZyZXNoU2ltdWxhdG9yQ3JlYXRpb24iLCJzaHV0ZG93bk90aGVyU2ltdWxhdG9ycyIsImtleWNoYWluc0V4Y2x1ZGVQYXR0ZXJucyIsInNob3dTYWZhcmlDb25zb2xlTG9nIiwic2hvd1NhZmFyaU5ldHdvcmtMb2ciLCJzYWZhcmlHYXJiYWdlQ29sbGVjdCIsInNhZmFyaUdsb2JhbFByZWZlcmVuY2VzIiwiaXNPYmplY3QiLCJzYWZhcmlMb2dBbGxDb21tdW5pY2F0aW9uIiwic2FmYXJpTG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAiLCJzYWZhcmlTb2NrZXRDaHVua1NpemUiLCJtanBlZ1NlcnZlclBvcnQiLCJyZWR1Y2VNb3Rpb24iLCJtanBlZ1NjcmVlbnNob3RVcmwiLCJwZXJtaXNzaW9ucyIsInNjcmVlbnNob3RRdWFsaXR5Iiwid2RhRXZlbnRsb29wSWRsZURlbGF5Iiwib3RoZXJBcHBzIiwiaW5jbHVkZVNhZmFyaUluV2Vidmlld3MiLCJhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyIsIndlYnZpZXdDb25uZWN0VGltZW91dCIsImlvc1NpbXVsYXRvckxvZ3NQcmVkaWNhdGUiLCJhcHBQdXNoVGltZW91dCIsIm5hdGl2ZVdlYlRhcFN0cmljdCIsInNhZmFyaVdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoIiwiYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24iLCJ3YWl0Rm9ySWRsZVRpbWVvdXQiLCJyZXN1bHRCdW5kbGVQYXRoIiwicmVzdWx0QnVuZGxlVmVyc2lvbiIsInNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcyIsImluY2x1ZGVEZXZpY2VDYXBzVG9TZXNzaW9uSW5mbyIsImRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90cyIsInNob3VsZFRlcm1pbmF0ZUFwcCIsImZvcmNlQXBwTGF1bmNoIiwidXNlTmF0aXZlQ2FjaGluZ1N0cmF0ZWd5IiwiYXBwSW5zdGFsbFN0cmF0ZWd5Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2Rlc2lyZWQtY2Fwcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGVzZSBwbGF0Zm9ybSBuYW1lcyBzaG91bGQgYmUgdmFsaWQgaW4gc2ltdWxhdG9yIG5hbWVcbmNvbnN0IFBMQVRGT1JNX05BTUVfSU9TID0gJ2lPUyc7XG5jb25zdCBQTEFURk9STV9OQU1FX1RWT1MgPSAndHZPUyc7XG5cbmNvbnN0IGRlc2lyZWRDYXBDb25zdHJhaW50cyA9IHtcbiAgcGxhdGZvcm1OYW1lOiB7IC8vIG92ZXJyaWRlXG4gICAgcHJlc2VuY2U6IHRydWUsXG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBbUExBVEZPUk1fTkFNRV9JT1MsIFBMQVRGT1JNX05BTUVfVFZPU11cbiAgfSxcbiAgYnJvd3Nlck5hbWU6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHA6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBjYWxlbmRhckZvcm1hdDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGJ1bmRsZUlkOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgdWRpZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGF1dG9BY2NlcHRBbGVydHM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgYXV0b0Rpc21pc3NBbGVydHM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgbmF0aXZlV2ViVGFwOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNhZmFyaUluaXRpYWxVcmw6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBzYWZhcmlBbGxvd1BvcHVwczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBzYWZhcmlJZ25vcmVGcmF1ZFdhcm5pbmc6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2FmYXJpT3BlbkxpbmtzSW5CYWNrZ3JvdW5kOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNhZmFyaVNob3dGdWxsUmVzcG9uc2U6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAga2VlcEtleUNoYWluczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBsb2NhdGlvblNlcnZpY2VzRW5hYmxlZDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBsb2NhdGlvblNlcnZpY2VzQXV0aG9yaXplZDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZXNldExvY2F0aW9uU2VydmljZToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBsb2NhbGl6YWJsZVN0cmluZ3NEaXI6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBwcm9jZXNzQXJndW1lbnRzOiB7XG4gICAgLy8gcmVjb2duaXplIHRoZSBjYXAsXG4gICAgLy8gYnV0IHZhbGlkYXRlIGluIHRoZSBkcml2ZXIjdmFsaWRhdGVEZXNpcmVkQ2FwcyBtZXRob2RcbiAgfSxcbiAgc2hvd0lPU0xvZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB3ZWJ2aWV3Q29ubmVjdFJldHJpZXM6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBjbGVhclN5c3RlbUZpbGVzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGN1c3RvbVNTTENlcnQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB3ZWJraXRSZXNwb25zZVRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICByZW1vdGVEZWJ1Z1Byb3h5OiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgZW5hYmxlUGVyZm9ybWFuY2VMb2dnaW5nOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGVuYWJsZUFzeW5jRXhlY3V0ZUZyb21IdHRwczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBmdWxsQ29udGV4dExpc3Q6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgaWdub3JlQWJvdXRCbGFua1VybDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBza2lwTG9nQ2FwdHVyZToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBkZXZpY2VOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgc2hvd1hjb2RlTG9nOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHdkYUxvY2FsUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHdkYUJhc2VVcmw6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBpb3NJbnN0YWxsUGF1c2U6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICB4Y29kZUNvbmZpZ0ZpbGU6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB4Y29kZU9yZ0lkOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgeGNvZGVTaWduaW5nSWQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBrZXljaGFpblBhdGg6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBrZXljaGFpblBhc3N3b3JkOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYm9vdHN0cmFwUGF0aDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFnZW50UGF0aDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHRhcFdpdGhTaG9ydFByZXNzRHVyYXRpb246IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBzY2FsZUZhY3Rvcjoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHVzZVByZWJ1aWx0V0RBOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHdlYkRyaXZlckFnZW50VXJsOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgZGVyaXZlZERhdGFQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgbGF1bmNoV2l0aElEQjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB1c2VOZXdXREE6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgd2RhTGF1bmNoVGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHdkYUNvbm5lY3Rpb25UaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgdXBkYXRlZFdEQUJ1bmRsZUlkOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgcmVzZXRPblNlc3Npb25TdGFydE9ubHk6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY29tbWFuZFRpbWVvdXRzOiB7XG4gICAgLy8gcmVjb2duaXplIHRoZSBjYXAsXG4gICAgLy8gYnV0IHZhbGlkYXRlIGluIHRoZSBkcml2ZXIjdmFsaWRhdGVEZXNpcmVkQ2FwcyBtZXRob2RcbiAgfSxcbiAgd2RhU3RhcnR1cFJldHJpZXM6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICB3ZGFTdGFydHVwUmV0cnlJbnRlcnZhbDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHByZWJ1aWxkV0RBOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGNvbm5lY3RIYXJkd2FyZUtleWJvYXJkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGZvcmNlVHVybk9uU29mdHdhcmVLZXlib2FyZFNpbXVsYXRvcjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBzaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYzoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNpbXVsYXRvckRldmljZXNTZXRQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHVzZVNpbXBsZUJ1aWxkVGVzdDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB3YWl0Rm9yUXVpZXNjZW5jZToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBtYXhUeXBpbmdGcmVxdWVuY3k6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBuYXRpdmVUeXBpbmc6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2ltcGxlSXNWaXNpYmxlQ2hlY2s6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXI6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgaXNIZWFkbGVzczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB1c2VYY3Rlc3RydW5GaWxlOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFic29sdXRlV2ViTG9jYXRpb25zOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNpbXVsYXRvcldpbmRvd0NlbnRlcjoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgc2ltdWxhdG9yVHJhY2VQb2ludGVyOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHVzZUpTT05Tb3VyY2U6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZW5mb3JjZUZyZXNoU2ltdWxhdG9yQ3JlYXRpb246IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2h1dGRvd25PdGhlclNpbXVsYXRvcnM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAga2V5Y2hhaW5zRXhjbHVkZVBhdHRlcm5zOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgc2hvd1NhZmFyaUNvbnNvbGVMb2c6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hvd1NhZmFyaU5ldHdvcmtMb2c6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2FmYXJpR2FyYmFnZUNvbGxlY3Q6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2FmYXJpR2xvYmFsUHJlZmVyZW5jZXM6IHtcbiAgICBpc09iamVjdDogdHJ1ZVxuICB9LFxuICBzYWZhcmlMb2dBbGxDb21tdW5pY2F0aW9uOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNhZmFyaUxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNhZmFyaVNvY2tldENodW5rU2l6ZToge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIG1qcGVnU2VydmVyUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHJlZHVjZU1vdGlvbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBtanBlZ1NjcmVlbnNob3RVcmw6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBwZXJtaXNzaW9uczoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNjcmVlbnNob3RRdWFsaXR5OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgd2RhRXZlbnRsb29wSWRsZURlbGF5OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgb3RoZXJBcHBzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgaW5jbHVkZVNhZmFyaUluV2Vidmlld3M6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHM6IHtcbiAgICAvLyByZWNvZ25pemUgdGhlIGNhcGFiaWxpdHlcbiAgICAvLyBidXQgdmFsaWRhdGUgaW4gZHJpdmVyI3ZhbGlkYXRlRGVzaXJlZENhcHNcbiAgfSxcbiAgd2Vidmlld0Nvbm5lY3RUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgaW9zU2ltdWxhdG9yTG9nc1ByZWRpY2F0ZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFwcFB1c2hUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgbmF0aXZlV2ViVGFwU3RyaWN0OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNhZmFyaVdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoOiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb246IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgd2FpdEZvcklkbGVUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgcmVzdWx0QnVuZGxlUGF0aDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHJlc3VsdEJ1bmRsZVZlcnNpb246IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXM6IHtcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgfSxcbiAgaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlLFxuICB9LFxuICBkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWUsXG4gIH0sXG4gIHNob3VsZFRlcm1pbmF0ZUFwcDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZSxcbiAgfSxcbiAgZm9yY2VBcHBMYXVuY2g6IHtcbiAgICBpc0Jvb2xlYW46IHRydWUsXG4gIH0sXG4gIHVzZU5hdGl2ZUNhY2hpbmdTdHJhdGVneToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZSxcbiAgfSxcbiAgYXBwSW5zdGFsbFN0cmF0ZWd5OiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBbJ3NlcmlhbCcsICdwYXJhbGxlbCcsICdpb3MtZGVwbG95J11cbiAgfVxufTtcblxuZXhwb3J0IHsgZGVzaXJlZENhcENvbnN0cmFpbnRzLCBQTEFURk9STV9OQU1FX0lPUywgUExBVEZPUk1fTkFNRV9UVk9TIH07XG5leHBvcnQgZGVmYXVsdCBkZXNpcmVkQ2FwQ29uc3RyYWludHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQSxNQUFNQSxpQkFBaUIsR0FBRyxLQUFLO0FBQUM7QUFDaEMsTUFBTUMsa0JBQWtCLEdBQUcsTUFBTTtBQUFDO0FBRWxDLE1BQU1DLHFCQUFxQixHQUFHO0VBQzVCQyxZQUFZLEVBQUU7SUFDWkMsUUFBUSxFQUFFLElBQUk7SUFDZEMsUUFBUSxFQUFFLElBQUk7SUFDZEMsd0JBQXdCLEVBQUUsQ0FBQ04saUJBQWlCLEVBQUVDLGtCQUFrQjtFQUNsRSxDQUFDO0VBQ0RNLFdBQVcsRUFBRTtJQUNYRixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RHLEdBQUcsRUFBRTtJQUNISCxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RJLGNBQWMsRUFBRTtJQUNkSixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RLLFFBQVEsRUFBRTtJQUNSTCxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RNLElBQUksRUFBRTtJQUNKTixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RPLGdCQUFnQixFQUFFO0lBQ2hCQyxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RDLGlCQUFpQixFQUFFO0lBQ2pCRCxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RFLFlBQVksRUFBRTtJQUNaRixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RHLGdCQUFnQixFQUFFO0lBQ2hCWCxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RZLGlCQUFpQixFQUFFO0lBQ2pCSixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RLLHdCQUF3QixFQUFFO0lBQ3hCTCxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RNLDJCQUEyQixFQUFFO0lBQzNCTixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RPLHNCQUFzQixFQUFFO0lBQ3RCUCxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RRLGFBQWEsRUFBRTtJQUNiUixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RTLHVCQUF1QixFQUFFO0lBQ3ZCVCxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RVLDBCQUEwQixFQUFFO0lBQzFCVixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RXLG9CQUFvQixFQUFFO0lBQ3BCWCxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RZLHFCQUFxQixFQUFFO0lBQ3JCcEIsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEcUIsZ0JBQWdCLEVBQUU7RUFHbEI7RUFBQzs7RUFDREMsVUFBVSxFQUFFO0lBQ1ZkLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRGUscUJBQXFCLEVBQUU7SUFDckJDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREMsZ0JBQWdCLEVBQUU7SUFDaEJqQixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RrQixhQUFhLEVBQUU7SUFDYjFCLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRDJCLHFCQUFxQixFQUFFO0lBQ3JCSCxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RJLGdCQUFnQixFQUFFO0lBQ2hCNUIsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNENkIsd0JBQXdCLEVBQUU7SUFDeEJyQixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RzQiwyQkFBMkIsRUFBRTtJQUMzQnRCLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRHVCLGVBQWUsRUFBRTtJQUNmdkIsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEd0IsbUJBQW1CLEVBQUU7SUFDbkJ4QixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0R5QixjQUFjLEVBQUU7SUFDZHpCLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRDBCLFVBQVUsRUFBRTtJQUNWbEMsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEbUMsWUFBWSxFQUFFO0lBQ1ozQixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0Q0QixZQUFZLEVBQUU7SUFDWlosUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEYSxVQUFVLEVBQUU7SUFDVnJDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRHNDLGVBQWUsRUFBRTtJQUNmZCxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RlLGVBQWUsRUFBRTtJQUNmdkMsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEd0MsVUFBVSxFQUFFO0lBQ1Z4QyxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0R5QyxjQUFjLEVBQUU7SUFDZHpDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRDBDLFlBQVksRUFBRTtJQUNaMUMsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEMkMsZ0JBQWdCLEVBQUU7SUFDaEIzQyxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0Q0QyxhQUFhLEVBQUU7SUFDYjVDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRDZDLFNBQVMsRUFBRTtJQUNUN0MsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEOEMseUJBQXlCLEVBQUU7SUFDekJ0QixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0R1QixXQUFXLEVBQUU7SUFDWC9DLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRGdELGNBQWMsRUFBRTtJQUNkeEMsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEeUMsaUJBQWlCLEVBQUU7SUFDakJqRCxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RrRCxlQUFlLEVBQUU7SUFDZmxELFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRG1ELGFBQWEsRUFBRTtJQUNiM0MsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNENEMsU0FBUyxFQUFFO0lBQ1Q1QyxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0Q2QyxnQkFBZ0IsRUFBRTtJQUNoQjdCLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRDhCLG9CQUFvQixFQUFFO0lBQ3BCOUIsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEK0Isa0JBQWtCLEVBQUU7SUFDbEJ2RCxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0R3RCx1QkFBdUIsRUFBRTtJQUN2QmhELFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRGlELGVBQWUsRUFBRTtFQUdqQjtFQUFDOztFQUNEQyxpQkFBaUIsRUFBRTtJQUNqQmxDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRG1DLHVCQUF1QixFQUFFO0lBQ3ZCbkMsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEb0MsV0FBVyxFQUFFO0lBQ1hwRCxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RxRCx1QkFBdUIsRUFBRTtJQUN2QnJELFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRHNELG9DQUFvQyxFQUFFO0lBQ3BDdEQsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEdUQsZ0NBQWdDLEVBQUU7SUFDaEMvRCxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RnRSx1QkFBdUIsRUFBRTtJQUN2QmhFLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRGlFLHdCQUF3QixFQUFFO0lBQ3hCekQsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEMEQsa0JBQWtCLEVBQUU7SUFDbEIxRCxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0QyRCxpQkFBaUIsRUFBRTtJQUNqQjNELFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRDRELGtCQUFrQixFQUFFO0lBQ2xCNUMsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNENkMsWUFBWSxFQUFFO0lBQ1o3RCxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0Q4RCxvQkFBb0IsRUFBRTtJQUNwQjlELFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRCtELDZCQUE2QixFQUFFO0lBQzdCL0QsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEZ0UsVUFBVSxFQUFFO0lBQ1ZoRSxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RpRSxnQkFBZ0IsRUFBRTtJQUNoQmpFLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRGtFLG9CQUFvQixFQUFFO0lBQ3BCbEUsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEbUUscUJBQXFCLEVBQUU7SUFDckIzRSxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0Q0RSx1QkFBdUIsRUFBRTtJQUN2QnBELFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRHFELHFCQUFxQixFQUFFO0lBQ3JCckUsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEc0UsYUFBYSxFQUFFO0lBQ2J0RSxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0R1RSw2QkFBNkIsRUFBRTtJQUM3QnZFLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRHdFLHVCQUF1QixFQUFFO0lBQ3ZCeEUsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEeUUsd0JBQXdCLEVBQUU7SUFDeEJqRixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RrRixvQkFBb0IsRUFBRTtJQUNwQjFFLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRDJFLG9CQUFvQixFQUFFO0lBQ3BCM0UsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNENEUsb0JBQW9CLEVBQUU7SUFDcEI1RSxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0Q2RSx1QkFBdUIsRUFBRTtJQUN2QkMsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEQyx5QkFBeUIsRUFBRTtJQUN6Qi9FLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRGdGLGdDQUFnQyxFQUFFO0lBQ2hDaEYsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEaUYscUJBQXFCLEVBQUU7SUFDckJqRSxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RrRSxlQUFlLEVBQUU7SUFDZmxFLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRG1FLFlBQVksRUFBRTtJQUNabkYsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEb0Ysa0JBQWtCLEVBQUU7SUFDbEI1RixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0Q2RixXQUFXLEVBQUU7SUFDWDdGLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRDhGLGlCQUFpQixFQUFFO0lBQ2pCdEUsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEdUUscUJBQXFCLEVBQUU7SUFDckJ2RSxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0R3RSxTQUFTLEVBQUU7SUFDVGhHLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRGlHLHVCQUF1QixFQUFFO0lBQ3ZCekYsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEMEYsMEJBQTBCLEVBQUU7RUFHNUI7RUFBQzs7RUFDREMscUJBQXFCLEVBQUU7SUFDckIzRSxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0Q0RSx5QkFBeUIsRUFBRTtJQUN6QnBHLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRHFHLGNBQWMsRUFBRTtJQUNkN0UsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEOEUsa0JBQWtCLEVBQUU7SUFDbEI5RixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0QrRixnQ0FBZ0MsRUFBRTtJQUNoQy9FLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRGdGLG1DQUFtQyxFQUFFO0lBQ25DaEcsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEaUcsa0JBQWtCLEVBQUU7SUFDbEJqRixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RrRixnQkFBZ0IsRUFBRTtJQUNoQjFHLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRDJHLG1CQUFtQixFQUFFO0lBQ25CbkYsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEb0Ysd0JBQXdCLEVBQUU7SUFDeEI1RyxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0Q2Ryw4QkFBOEIsRUFBRTtJQUM5QnJHLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRHNHLDJCQUEyQixFQUFFO0lBQzNCdEcsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEdUcsa0JBQWtCLEVBQUU7SUFDbEJ2RyxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0R3RyxjQUFjLEVBQUU7SUFDZHhHLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRHlHLHdCQUF3QixFQUFFO0lBQ3hCekcsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEMEcsa0JBQWtCLEVBQUU7SUFDbEJsSCxRQUFRLEVBQUUsSUFBSTtJQUNkQyx3QkFBd0IsRUFBRSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWTtFQUMvRDtBQUNGLENBQUM7QUFBQztBQUFBLGVBR2FKLHFCQUFxQjtBQUFBIn0=
|