appium-android-driver 4.43.0 → 4.43.1
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.
|
@@ -360,7 +360,7 @@ helpers.setupNewChromedriver = async function setupNewChromedriver(opts, curDevi
|
|
|
360
360
|
}
|
|
361
361
|
}
|
|
362
362
|
|
|
363
|
-
const caps = _webviewHelpers.default.createChromedriverCaps(opts, curDeviceId);
|
|
363
|
+
const caps = _webviewHelpers.default.createChromedriverCaps(opts, curDeviceId, details);
|
|
364
364
|
|
|
365
365
|
_logger.default.debug(`Before starting chromedriver, androidPackage is '${caps.chromeOptions.androidPackage}'`);
|
|
366
366
|
|
|
@@ -375,4 +375,4 @@ var _default = extensions;
|
|
|
375
375
|
exports.default = _default;require('source-map-support').install();
|
|
376
376
|
|
|
377
377
|
|
|
378
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIl0sIm5hbWVzIjpbIkNIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRDdXJyZW50Q29udGV4dCIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJnZXRDb250ZXh0cyIsIndlYnZpZXdzIiwiaXNDaHJvbWVTZXNzaW9uIiwiQ0hST01JVU1fV0lOIiwid2Vidmlld0hlbHBlcnMiLCJnZXRXZWJ2aWV3cyIsImFkYiIsIm9wdHMiLCJjb250ZXh0cyIsIl8iLCJ1bmlvbiIsIk5BVElWRV9XSU4iLCJsb2ciLCJkZWJ1ZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzZXRDb250ZXh0IiwibmFtZSIsInV0aWwiLCJoYXNWYWx1ZSIsIldFQlZJRVdfV0lOIiwiZGVmYXVsdFdlYnZpZXdOYW1lIiwiaW5jbHVkZXMiLCJlcnJvcnMiLCJOb1N1Y2hDb250ZXh0RXJyb3IiLCJzd2l0Y2hDb250ZXh0IiwibW9iaWxlR2V0Q29udGV4dHMiLCJhbmRyb2lkRGV2aWNlU29ja2V0IiwiZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMiLCJ3ZWJ2aWV3RGV2dG9vbHNQb3J0IiwiZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uIiwiZ2V0V2ViVmlld3NNYXBwaW5nIiwiaXNDaHJvbWVkcml2ZXJDb250ZXh0Iiwic3RhcnRDaHJvbWVkcml2ZXJQcm94eSIsInJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMiLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsIkVycm9yIiwiV0VCVklFV19CQVNFIiwiYXBwUGFja2FnZSIsImlzV2ViQ29udGV4dCIsImNvbnRleHQiLCJjZCIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwic2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlciIsImNsb25lRGVlcCIsImNocm9tZVVzZVJ1bm5pbmdBcHAiLCJleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWUiLCJhbmRyb2lkUGFja2FnZSIsIm1hdGNoIiwibGVuZ3RoIiwiY2hyb21lQW5kcm9pZFBhY2thZ2UiLCJzZXR1cE5ld0Nocm9tZWRyaXZlciIsImN1ckRldmljZUlkIiwib24iLCJDaHJvbWVkcml2ZXIiLCJFVkVOVF9DSEFOR0VEIiwibXNnIiwic3RhdGUiLCJTVEFURV9TVE9QUEVEIiwib25DaHJvbWVkcml2ZXJTdG9wIiwiY2hyb21lZHJpdmVyIiwicHJveHlSZXFSZXMiLCJwcm94eVJlcSIsImJpbmQiLCJqd3BQcm94eUFjdGl2ZSIsIndhcm4iLCJlcnIiLCJzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biIsImtleXMiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzdG9wIiwibWVzc2FnZSIsInZpZXdOYW1lIiwic2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUiLCJjaHJvbWVPcHRpb25zIiwiaXNBcnJheSIsImFyZ3MiLCJkaXNtaXNzQ2hyb21lV2VsY29tZSIsImluZm8iLCJhY3Rpdml0eSIsImdldEN1cnJlbnRBY3Rpdml0eSIsImVsIiwiZmluZEVsT3JFbHMiLCJjbGljayIsIkVMRU1FTlQiLCJlIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwia25vd25QYWNrYWdlcyIsImNocm9tZUJ1bmRsZUlkIiwiY2hyb21lQW5kcm9pZEFjdGl2aXR5IiwiYXBwQWN0aXZpdHkiLCJoYXNXb3JraW5nV2VidmlldyIsInJlc3RhcnQiLCJnZXRDaHJvbWVkcml2ZXJQb3J0IiwicG9ydFNwZWMiLCJnZXRQb3J0IiwiQiIsInByb21pc2lmeSIsIlBvcnRGaW5kZXIiLCJwb3J0IiwiZm91bmRQb3J0IiwicG90ZW50aWFsUG9ydCIsInN0b3BQb3J0IiwicGFyc2VJbnQiLCJpc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQiLCJpc0ZlYXR1cmVFbmFibGVkIiwiY2hyb21lRHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnQiLCJjaHJvbWVkcml2ZXJQb3J0cyIsImRldGFpbHMiLCJnZXRXZWJ2aWV3RGV0YWlscyIsInVuZGVmaW5lZCIsImlzRW1wdHkiLCJleGVjdXRhYmxlIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZSIsImNtZEFyZ3MiLCJjaHJvbWVkcml2ZXJBcmdzIiwidmVyYm9zZSIsInNob3dDaHJvbWVkcml2ZXJMb2ciLCJleGVjdXRhYmxlRGlyIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpciIsIm1hcHBpbmdQYXRoIiwiY2hyb21lZHJpdmVyQ2hyb21lTWFwcGluZ0ZpbGUiLCJidW5kbGVJZCIsInVzZVN5c3RlbUV4ZWN1dGFibGUiLCJjaHJvbWVkcml2ZXJVc2VTeXN0ZW1FeGVjdXRhYmxlIiwiZGlzYWJsZUJ1aWxkQ2hlY2siLCJjaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjayIsImlzQXV0b2Rvd25sb2FkRW5hYmxlZCIsIm9wdCIsImVuZHNXaXRoIiwibWVyZ2UiLCJjYXBzIiwiY3JlYXRlQ2hyb21lZHJpdmVyQ2FwcyIsInN0YXJ0IiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0EsTUFBTUEsaUNBQWlDLEdBQUcsMkJBQTFDO0FBRUEsSUFBSUMsUUFBUSxHQUFHLEVBQWY7QUFBQSxJQUFtQkMsT0FBTyxHQUFHLEVBQTdCO0FBQUEsSUFBaUNDLFVBQVUsR0FBRyxFQUE5Qzs7OztBQU1BRixRQUFRLENBQUNHLGlCQUFULEdBQTZCLGVBQWVBLGlCQUFmLEdBQW9DO0FBRy9ELFNBQU8sS0FBS0MsVUFBTCxJQUFtQixLQUFLQyxrQkFBTCxFQUExQjtBQUNELENBSkQ7O0FBTUFMLFFBQVEsQ0FBQ00sV0FBVCxHQUF1QixlQUFlQSxXQUFmLEdBQThCO0FBQ25ELE1BQUlDLFFBQUo7O0FBQ0EsTUFBSSxLQUFLQyxlQUFULEVBQTBCO0FBR3hCRCxJQUFBQSxRQUFRLEdBQUcs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LHNCQUFJc0QsSUFBSixDQUFVLFlBQVdnRSxHQUFJLDREQUF6Qjs7QUFDQXpILHNCQUFFMkgsS0FBRixDQUFRN0gsSUFBSSxDQUFDb0UsYUFBYixFQUE0QnBFLElBQUksQ0FBQzJILEdBQUQsQ0FBaEM7QUFDRDtBQUNGOztBQUVELFFBQU1HLElBQUksR0FBR2pJLHdCQUFla0ksc0JBQWYsQ0FBc0MvSCxJQUF0QyxFQUE0QzhDLFdBQTVDLENBQWI7O0FBQ0F6QyxrQkFBSUMsS0FBSixDQUFXLG9EQUFtRHdILElBQUksQ0FBQzFELGFBQUwsQ0FBbUIzQixjQUFlLEdBQWhHOztBQUNBLFFBQU1hLFlBQVksQ0FBQzBFLEtBQWIsQ0FBbUJGLElBQW5CLENBQU47QUFDQSxTQUFPeEUsWUFBUDtBQUNELENBbEREOztBQW1EQSxNQUFNVCxvQkFBb0IsR0FBR3pELE9BQU8sQ0FBQ3lELG9CQUFyQzs7QUFHQW9GLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjN0ksVUFBZCxFQUEwQkYsUUFBMUIsRUFBb0NDLE9BQXBDO2VBRWVDLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IENocm9tZWRyaXZlciBmcm9tICdhcHBpdW0tY2hyb21lZHJpdmVyJztcbmltcG9ydCBQb3J0RmluZGVyIGZyb20gJ3BvcnRmaW5kZXInO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQge1xuICBkZWZhdWx0IGFzIHdlYnZpZXdIZWxwZXJzLFxuICBOQVRJVkVfV0lOLCBXRUJWSUVXX0JBU0UsIFdFQlZJRVdfV0lOLCBDSFJPTUlVTV9XSU5cbn0gZnJvbSAnLi4vd2Vidmlldy1oZWxwZXJzJztcblxuY29uc3QgQ0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFID0gJ2Nocm9tZWRyaXZlcl9hdXRvZG93bmxvYWQnO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQWN0dWFsIE1KU09OV1AgY29tbWFuZCBoYW5kbGVyc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuY29tbWFuZHMuZ2V0Q3VycmVudENvbnRleHQgPSBhc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50Q29udGV4dCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAvLyBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGBudWxsYCwgaW5kaWNhdGluZyBubyBjb250ZXh0XG4gIC8vIGV4cGxpY2l0bHkgc2V0LCBpdCBpcyB0aGUgZGVmYXVsdCBjb250ZXh0XG4gIHJldHVybiB0aGlzLmN1ckNvbnRleHQgfHwgdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcbn07XG5cbmNvbW1hbmRzLmdldENvbnRleHRzID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q29udGV4dHMgKCkge1xuICBsZXQgd2Vidmlld3M7XG4gIGlmICh0aGlzLmlzQ2hyb21lU2Vzc2lvbikge1xuICAgIC8vIGlmIHdlIGhhdmUgYSBDaHJvbWUgYnJvd3NlciBzZXNzaW9uLCB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIENocm9tZVxuICAgIC8vIGNvbnRleHQgYW5kIHRoZSBuYXRpdmUgY29udGV4dFxuICAgIHdlYnZpZXdzID0gW0NIUk9NSVVNX1dJTl07XG4gIH0gZWxzZSB7XG4gICAgLy8gb3RoZXJ3aXNlIHdlIHVzZSBBREIgdG8gZmlndXJlIG91dCB3aGljaCB3ZWJ2aWV3cyBhcmUgYXZhaWxhYmxlXG4gICAgd2Vidmlld3MgPSBhd2FpdCB3ZWJ2aWV3SGVscGVycy5nZXRXZWJ2aWV3cyh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgfVxuICB0aGlzLmNvbnRleHRzID0gXy51bmlvbihbTkFUSVZFX1dJTl0sIHdlYnZpZXdzKTtcbiAgbG9nLmRlYnVnKGBBdmFpbGFibGUgY29udGV4dHM6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5jb250ZXh0cyl9YCk7XG4gIHJldHVybiB0aGlzLmNvbnRleHRzO1xufTtcblxuY29tbWFuZHMuc2V0Q29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIHNldENvbnRleHQgKG5hbWUpIHtcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKG5hbWUpKSB7XG4gICAgbmFtZSA9IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gV0VCVklFV19XSU4pIHtcbiAgICAvLyBoYW5kbGUgc2V0Q29udGV4dCBcIldFQlZJRVdcIlxuICAgIG5hbWUgPSB0aGlzLmRlZmF1bHRXZWJ2aWV3TmFtZSgpO1xuICB9XG4gIC8vIGlmIHdlJ3JlIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgd2Ugd2FudCwgZG8gbm90aGluZ1xuICBpZiAobmFtZSA9PT0gdGhpcy5jdXJDb250ZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGNvbnRleHRzID0gYXdhaXQgdGhpcy5nZXRDb250ZXh0cygpO1xuICAvLyBpZiB0aGUgY29udGV4dCB3ZSB3YW50IGRvZXNuJ3QgZXhpc3QsIGZhaWxcbiAgaWYgKCFfLmluY2x1ZGVzKGNvbnRleHRzLCBuYW1lKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoQ29udGV4dEVycm9yKCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLnN3aXRjaENvbnRleHQobmFtZSk7XG4gIHRoaXMuY3VyQ29udGV4dCA9IG5hbWU7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFdlYnZpZXdzTWFwcGluZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHByb2MgVGhlIG5hbWUgb2YgdGhlIERldnRvb2xzIFVuaXggc29ja2V0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gd2VidmlldyBUaGUgd2ViIHZpZXcgYWxpYXMuIExvb2tzIGxpa2UgYFdFQlZJRVdfYFxuICogcHJlZml4IHBsdXMgUElEIG9yIHBhY2thZ2UgbmFtZVxuICogQHByb3BlcnR5IHs/T2JqZWN0fSBpbmZvIFdlYnZpZXcgaW5mb3JtYXRpb24gYXMgaXQgaXMgcmV0cmlldmVkIGJ5XG4gKiAvanNvbi92ZXJzaW9uIENEUCBlbmRwb2ludFxuICogQHByb3BlcnR5IHs/QXJyYXk8T2JqZWN0Pn0gcGFnZXMgV2VidmlldyBwYWdlcyBsaXN0IGFzIGl0IGlzIHJldHJpZXZlZCBieVxuICogL2pzb24vbGlzdCBDRFAgZW5kcG9pbnRcbiAqIEBwcm9wZXJ5IHs/c3RyaW5nfSB3ZWJ2aWV3TmFtZSBBbiBhY3R1YWwgd2VidmlldyBuYW1lIGZvciBzd2l0Y2hpbmcgY29udGV4dC5cbiAqIFRoaXMgdmFsdWUgYmVjb21lcyBudWxsIHdoZW4gZmFpbGluZyB0byBmaW5kIGEgUElEIGZvciBhIHdlYnZpZXcuXG4gKlxuICogVGhlIGZvbGxvd2luZyBqc29uIGRlbW9uc3RyYXRlcyB0aGUgZXhhbXBsZSBvZiBXZWJ2aWV3c01hcHBpbmcgb2JqZWN0LlxuICogTm90ZSB0aGF0IGBkZXNjcmlwdGlvbmAgaW4gYHBhZ2VgIGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcgbW9zdCBsaWtlbHkgd2hlbiBpdCBjb21lcyB0byBNb2JpbGUgQ2hyb21lKVxuICoge1xuICogICBcInByb2NcIjogXCJAd2Vidmlld19kZXZ0b29sc19yZW1vdGVfMjIxMzhcIixcbiAqICAgXCJ3ZWJ2aWV3XCI6IFwiV0VCVklFV18yMjEzOFwiLFxuICogICBcImluZm9cIjoge1xuICogICAgIFwiQW5kcm9pZC1QYWNrYWdlXCI6IFwiaW8uYXBwaXVtLnNldHRpbmdzXCIsXG4gKiAgICAgXCJCcm93c2VyXCI6IFwiQ2hyb21lLzc0LjAuMzcyOS4xODVcIixcbiAqICAgICBcIlByb3RvY29sLVZlcnNpb25cIjogXCIxLjNcIixcbiAqICAgICBcIlVzZXItQWdlbnRcIjogXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTA7IEFuZHJvaWQgU0RLIGJ1aWx0IGZvciB4ODYgQnVpbGQvUVNSMS4xOTA5MjAuMDAxOyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzc0LjAuMzcyOS4xODUgTW9iaWxlIFNhZmFyaS81MzcuMzZcIixcbiAqICAgICBcIlY4LVZlcnNpb25cIjogXCI3LjQuMjg4LjI4XCIsXG4gKiAgICAgXCJXZWJLaXQtVmVyc2lvblwiOiBcIjUzNy4zNiAoQDIyOTU1NjgyZjk0Y2UwOTMzNjE5N2JmYjhkZmZlYTk5MWZhMzJmMGQpXCIsXG4gKiAgICAgXCJ3ZWJTb2NrZXREZWJ1Z2dlclVybFwiOiBcIndzOi8vMTI3LjAuMC4xOjEwOTAwL2RldnRvb2xzL2Jyb3dzZXJcIlxuICogICB9LFxuICogICBcInBhZ2VzXCI6IFtcbiAqICAgICB7XG4gKiAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwie1xcXCJhdHRhY2hlZFxcXCI6dHJ1ZSxcXFwiZW1wdHlcXFwiOmZhbHNlLFxcXCJoZWlnaHRcXFwiOjE0NTgsXFxcInNjcmVlblhcXFwiOjAsXFxcInNjcmVlbllcXFwiOjMzNixcXFwidmlzaWJsZVxcXCI6dHJ1ZSxcXFwid2lkdGhcXFwiOjEwODB9XCIsXG4gKiAgICAgICBcImRldnRvb2xzRnJvbnRlbmRVcmxcIjogXCJodHRwOi8vY2hyb21lLWRldnRvb2xzLWZyb250ZW5kLmFwcHNwb3QuY29tL3NlcnZlX3Jldi9AMjI5NTU2ODJmOTRjZTA5MzM2MTk3YmZiOGRmZmVhOTkxZmEzMmYwZC9pbnNwZWN0b3IuaHRtbD93cz0xMjcuMC4wLjE6MTA5MDAvZGV2dG9vbHMvcGFnZS8yNzMyNUNDNTBCNjAwRDMxQjIzM0Y0NUUwOTQ4N0IxRlwiLFxuICogICAgICAgXCJpZFwiOiBcIjI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCIsXG4gKiAgICAgICBcInRpdGxlXCI6IFwiUmVsZWFzZXMgwrcgYXBwaXVtL2FwcGl1bSDCtyBHaXRIdWJcIixcbiAqICAgICAgIFwidHlwZVwiOiBcInBhZ2VcIixcbiAqICAgICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vcmVsZWFzZXNcIixcbiAqICAgICAgIFwid2ViU29ja2V0RGVidWdnZXJVcmxcIjogXCJ3czovLzEyNy4wLjAuMToxMDkwMC9kZXZ0b29scy9wYWdlLzI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCJcbiAqICAgICB9XG4gKiAgIF0sXG4gKiAgIFwid2Vidmlld05hbWVcIjogXCJXRUJWSUVXX2NvbS5pby5hcHBpdW0uc2V0dGluZ1wiXG4gKiB9XG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgd2Vidmlld3NNYXBwaW5nIGJhc2VkIG9uIENEUCBlbmRwb2ludHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxXZWJ2aWV3c01hcHBpbmc+fSB3ZWJ2aWV3c01hcHBpbmdcbiAqL1xuY29tbWFuZHMubW9iaWxlR2V0Q29udGV4dHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRDb250ZXh0cyAoKSB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgYW5kcm9pZERldmljZVNvY2tldDogdGhpcy5vcHRzLmFuZHJvaWREZXZpY2VTb2NrZXQsXG4gICAgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXM6IHRydWUsXG4gICAgd2Vidmlld0RldnRvb2xzUG9ydDogdGhpcy5vcHRzLndlYnZpZXdEZXZ0b29sc1BvcnQsXG4gICAgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uOiB0cnVlXG4gIH07XG4gIHJldHVybiBhd2FpdCB3ZWJ2aWV3SGVscGVycy5nZXRXZWJWaWV3c01hcHBpbmcodGhpcy5hZGIsIG9wdHMpO1xufTtcblxuaGVscGVycy5zd2l0Y2hDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gc3dpdGNoQ29udGV4dCAobmFtZSkge1xuICAvLyBXZSBoYXZlIHNvbWUgb3B0aW9ucyB3aGVuIGl0IGNvbWVzIHRvIHdlYnZpZXdzLiBJZiB3ZSB3YW50IGFcbiAgLy8gQ2hyb21lZHJpdmVyIHdlYnZpZXcsIHdlIGNhbiBvbmx5IGNvbnRyb2wgb25lIGF0IGEgdGltZS5cbiAgaWYgKHRoaXMuaXNDaHJvbWVkcml2ZXJDb250ZXh0KG5hbWUpKSB7XG4gICAgLy8gc3RhcnQgcHJveHlpbmcgY29tbWFuZHMgZGlyZWN0bHkgdG8gY2hyb21lZHJpdmVyXG4gICAgYXdhaXQgdGhpcy5zdGFydENocm9tZWRyaXZlclByb3h5KG5hbWUpO1xuICB9IGVsc2UgaWYgKHRoaXMuaXNDaHJvbWVkcml2ZXJDb250ZXh0KHRoaXMuY3VyQ29udGV4dCkpIHtcbiAgICAvLyBpZiB3ZSdyZSBtb3ZpbmcgdG8gYSBub24tY2hyb21lZHJpdmVyIHdlYnZpZXcsIGFuZCBvdXIgY3VycmVudCBjb250ZXh0XG4gICAgLy8gX2lzXyBhIGNocm9tZWRyaXZlciB3ZWJ2aWV3LCBpZiBjYXBzIHJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMgaXMgc2V0XG4gICAgLy8gdG8gdHJ1ZSB0aGVuIGtpbGwgY2hyb21lZHJpdmVyIHNlc3Npb24gdXNpbmcgc3RvcENocm9tZWRyaXZlclByb3hpZXMgb3JcbiAgICAvLyBlbHNlIHNpbXBseSBzdXNwZW5kIHByb3h5aW5nIHRvIHRoZSBsYXR0ZXJcbiAgICBpZiAodGhpcy5vcHRzLnJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMpIHtcbiAgICAgIGxvZy5kZWJ1ZygncmVjcmVhdGVDaHJvbWVEcml2ZXJTZXNzaW9ucyBzZXQgdG8gdHJ1ZTsga2lsbGluZyBleGlzdGluZyBjaHJvbWVkcml2ZXJzJyk7XG4gICAgICBhd2FpdCB0aGlzLnN0b3BDaHJvbWVkcml2ZXJQcm94aWVzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5KCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGlkbid0IGtub3cgaG93IHRvIGhhbmRsZSBzd2l0Y2hpbmcgdG8gY29udGV4dCAnJHtuYW1lfSdgKTtcbiAgfVxufTtcblxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIE9uLW9iamVjdCBjb250ZXh0LXJlbGF0ZWQgaGVscGVyc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8vIFRoZSByZWFzb24gdGhpcyBpcyBhIGZ1bmN0aW9uIGFuZCBub3QganVzdCBhIGNvbnN0YW50IGlzIHRoYXQgYm90aCBhbmRyb2lkLVxuLy8gZHJpdmVyIGFuZCBzZWxlbmRyb2lkLWRyaXZlciB1c2UgdGhpcyBsb2dpYywgYW5kIGVhY2ggb25lIHJldHVybnNcbi8vIGEgZGlmZmVyZW50IGRlZmF1bHQgY29udGV4dCBuYW1lXG5oZWxwZXJzLmRlZmF1bHRDb250ZXh0TmFtZSA9IGZ1bmN0aW9uIGRlZmF1bHRDb250ZXh0TmFtZSAoKSB7XG4gIHJldHVybiBOQVRJVkVfV0lOO1xufTtcblxuaGVscGVycy5kZWZhdWx0V2Vidmlld05hbWUgPSBmdW5jdGlvbiBkZWZhdWx0V2Vidmlld05hbWUgKCkge1xuICByZXR1cm4gV0VCVklFV19CQVNFICsgdGhpcy5vcHRzLmFwcFBhY2thZ2U7XG59O1xuXG5oZWxwZXJzLmlzV2ViQ29udGV4dCA9IGZ1bmN0aW9uIGlzV2ViQ29udGV4dCAoKSB7XG4gIHJldHVybiB0aGlzLmN1ckNvbnRleHQgIT09IG51bGwgJiYgdGhpcy5jdXJDb250ZXh0ICE9PSBOQVRJVkVfV0lOO1xufTtcblxuLy8gVHVybiBvbiBwcm94eWluZyB0byBhbiBleGlzdGluZyBDaHJvbWVkcml2ZXIgc2Vzc2lvbiBvciBhIG5ldyBvbmVcbmhlbHBlcnMuc3RhcnRDaHJvbWVkcml2ZXJQcm94eSA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0Q2hyb21lZHJpdmVyUHJveHkgKGNvbnRleHQpIHtcbiAgbG9nLmRlYnVnKGBDb25uZWN0aW5nIHRvIGNocm9tZS1iYWNrZWQgd2VidmlldyBjb250ZXh0ICcke2NvbnRleHR9J2ApO1xuXG4gIGxldCBjZDtcbiAgaWYgKHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF0pIHtcbiAgICAvLyBpbiB0aGUgY2FzZSB3aGVyZSB3ZSd2ZSBhbHJlYWR5IHNldCB1cCBhIGNocm9tZWRyaXZlciBmb3IgYSBjb250ZXh0LFxuICAgIC8vIHdlIHdhbnQgdG8gcmVjb25uZWN0IHRvIGl0LCBub3QgY3JlYXRlIGEgd2hvbGUgbmV3IG9uZVxuICAgIGxvZy5kZWJ1ZyhgRm91bmQgZXhpc3RpbmcgQ2hyb21lZHJpdmVyIGZvciBjb250ZXh0ICcke2NvbnRleHR9Jy4gVXNpbmcgaXQuYCk7XG4gICAgY2QgPSB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdO1xuICAgIGF3YWl0IHNldHVwRXhpc3RpbmdDaHJvbWVkcml2ZXIoY2QpO1xuICB9IGVsc2Uge1xuICAgIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcbiAgICBvcHRzLmNocm9tZVVzZVJ1bm5pbmdBcHAgPSB0cnVlO1xuXG4gICAgLy8gaWYgcmVxdWVzdGVkLCB0ZWxsIGNocm9tZWRyaXZlciB0byBhdHRhY2ggdG8gdGhlIGFuZHJvaWQgcGFja2FnZSB3ZSBoYXZlXG4gICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZXh0IG5hbWUsIHJhdGhlciB0aGFuIHRoZSBwYWNrYWdlIG9mIHRoZSBBVVQuXG4gICAgLy8gQW5kIHR1cm4gdGhpcyBvbiBieSBkZWZhdWx0IGZvciBjaHJvbWUtLWlmIGNocm9tZSBwb3BzIHVwIHdpdGggYSB3ZWJ2aWV3XG4gICAgLy8gYW5kIHNvbWVvbmUgd2FudHMgdG8gc3dpdGNoIHRvIGl0LCB3ZSBzaG91bGQgbGV0IGNocm9tZWRyaXZlciBjb25uZWN0IHRvXG4gICAgLy8gY2hyb21lIHJhdGhlciB0aGFuIHN0YXlpbmcgc3R1Y2sgb24gdGhlIEFVVFxuICAgIGlmIChvcHRzLmV4dHJhY3RDaHJvbWVBbmRyb2lkUGFja2FnZUZyb21Db250ZXh0TmFtZSB8fCBjb250ZXh0ID09PSBgJHtXRUJWSUVXX0JBU0V9Y2hyb21lYCkge1xuICAgICAgbGV0IGFuZHJvaWRQYWNrYWdlID0gY29udGV4dC5tYXRjaChgJHtXRUJWSUVXX0JBU0V9KC4rKWApO1xuICAgICAgaWYgKGFuZHJvaWRQYWNrYWdlICYmIGFuZHJvaWRQYWNrYWdlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZSA9IGFuZHJvaWRQYWNrYWdlWzFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNkID0gYXdhaXQgdGhpcy5zZXR1cE5ld0Nocm9tZWRyaXZlcihvcHRzLCB0aGlzLmFkYi5jdXJEZXZpY2VJZCwgdGhpcy5hZGIsIGNvbnRleHQpO1xuICAgIC8vIGJpbmQgb3VyIHN0b3AvZXhpdCBoYW5kbGVyLCBwYXNzaW5nIGluIGNvbnRleHQgc28gd2Uga25vdyB3aGljaFxuICAgIC8vIG9uZSBzdG9wcGVkIHVuZXhwZWN0ZWRseVxuICAgIGNkLm9uKENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VELCAobXNnKSA9PiB7XG4gICAgICBpZiAobXNnLnN0YXRlID09PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgICB0aGlzLm9uQ2hyb21lZHJpdmVyU3RvcChjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBzYXZlIHRoZSBjaHJvbWVkcml2ZXIgb2JqZWN0IHVuZGVyIHRoZSBjb250ZXh0XG4gICAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XSA9IGNkO1xuICB9XG4gIC8vIGhvb2sgdXAgdGhlIGxvY2FsIHZhcmlhYmxlcyBzbyB3ZSBjYW4gcHJveHkgdGhpcyBiaXpcbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBjZDtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuY2hyb21lZHJpdmVyLnByb3h5UmVxLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIpO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcbn07XG5cbi8vIFN0b3AgcHJveHlpbmcgdG8gYW55IENocm9tZWRyaXZlclxuaGVscGVycy5zdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkgPSBmdW5jdGlvbiBzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkgKCkge1xuICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG59O1xuXG4vLyBIYW5kbGUgYW4gb3V0LW9mLWJhbmQgQ2hyb21lZHJpdmVyIHN0b3AgZXZlbnRcbmhlbHBlcnMub25DaHJvbWVkcml2ZXJTdG9wID0gYXN5bmMgZnVuY3Rpb24gb25DaHJvbWVkcml2ZXJTdG9wIChjb250ZXh0KSB7XG4gIGxvZy53YXJuKGBDaHJvbWVkcml2ZXIgZm9yIGNvbnRleHQgJHtjb250ZXh0fSBzdG9wcGVkIHVuZXhwZWN0ZWRseWApO1xuICBpZiAoY29udGV4dCA9PT0gdGhpcy5jdXJDb250ZXh0KSB7XG4gICAgLy8gd2UgZXhpdGVkIHVuZXhwZWN0ZWRseSB3aGlsZSBhdXRvbWF0aW5nIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIHNvIHdhbnRcbiAgICAvLyB0byBzaHV0IGRvd24gdGhlIHNlc3Npb24gYW5kIHJlc3BvbmQgd2l0aCBhbiBlcnJvclxuICAgIGxldCBlcnIgPSBuZXcgRXJyb3IoJ0Nocm9tZWRyaXZlciBxdWl0IHVuZXhwZWN0ZWRseSBkdXJpbmcgc2Vzc2lvbicpO1xuICAgIGF3YWl0IHRoaXMuc3RhcnRVbmV4cGVjdGVkU2h1dGRvd24oZXJyKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiBhIENocm9tZWRyaXZlciBpbiB0aGUgbm9uLWFjdGl2ZSBjb250ZXh0IGJhcmZzLCB3ZSBkb24ndCByZWFsbHlcbiAgICAvLyBjYXJlLCB3ZSdsbCBqdXN0IG1ha2UgYSBuZXcgb25lIG5leHQgdGltZSB3ZSBuZWVkIHRoZSBjb250ZXh0LlxuICAgIGxvZy53YXJuKFwiQ2hyb21lZHJpdmVyIHF1aXQgdW5leHBlY3RlZGx5LCBidXQgaXQgd2Fzbid0IHRoZSBhY3RpdmUgXCIgK1xuICAgICAgICAgICAgICAgICdjb250ZXh0LCBpZ25vcmluZycpO1xuICAgIGRlbGV0ZSB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdO1xuICB9XG59O1xuXG4vLyBJbnRlbnRpb25hbGx5IHN0b3AgYWxsIHRoZSBjaHJvbWVkcml2ZXJzIGN1cnJlbnRseSBhY3RpdmUsIGFuZCBpZ25vcmVcbi8vIHRoZWlyIGV4aXQgZXZlbnRzXG5oZWxwZXJzLnN0b3BDaHJvbWVkcml2ZXJQcm94aWVzID0gYXN5bmMgZnVuY3Rpb24gc3RvcENocm9tZWRyaXZlclByb3hpZXMgKCkge1xuICB0aGlzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSgpOyAvLyBtYWtlIHN1cmUgd2UgdHVybiBvZmYgdGhlIHByb3h5IGZsYWdcbiAgZm9yIChsZXQgY29udGV4dCBvZiBfLmtleXModGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVycykpIHtcbiAgICBsZXQgY2QgPSB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdO1xuICAgIGxvZy5kZWJ1ZyhgU3RvcHBpbmcgY2hyb21lZHJpdmVyIGZvciBjb250ZXh0ICR7Y29udGV4dH1gKTtcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgdGhlIHN0b3BwZWQgc3RhdGUgZXZlbnRcbiAgICBjZC5yZW1vdmVBbGxMaXN0ZW5lcnMoQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjZC5zdG9wKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihgRXJyb3Igc3RvcHBpbmcgQ2hyb21lZHJpdmVyOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XTtcbiAgfVxufTtcblxuaGVscGVycy5pc0Nocm9tZWRyaXZlckNvbnRleHQgPSBmdW5jdGlvbiBpc0Nocm9tZWRyaXZlckNvbnRleHQgKHZpZXdOYW1lKSB7XG4gIHJldHVybiBfLmluY2x1ZGVzKHZpZXdOYW1lLCBXRUJWSUVXX1dJTikgfHwgdmlld05hbWUgPT09IENIUk9NSVVNX1dJTjtcbn07XG5cbmhlbHBlcnMuc2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUgPSBmdW5jdGlvbiBzaG91bGREaXNtaXNzQ2hyb21lV2VsY29tZSAoKSB7XG4gIHJldHVybiAhIXRoaXMub3B0cy5jaHJvbWVPcHRpb25zICYmXG4gICAgICAgICBfLmlzQXJyYXkodGhpcy5vcHRzLmNocm9tZU9wdGlvbnMuYXJncykgJiZcbiAgICAgICAgIHRoaXMub3B0cy5jaHJvbWVPcHRpb25zLmFyZ3MuaW5jbHVkZXMoJy0tbm8tZmlyc3QtcnVuJyk7XG59O1xuXG5oZWxwZXJzLmRpc21pc3NDaHJvbWVXZWxjb21lID0gYXN5bmMgZnVuY3Rpb24gZGlzbWlzc0Nocm9tZVdlbGNvbWUgKCkge1xuICBsb2cuaW5mbygnVHJ5aW5nIHRvIGRpc21pc3MgQ2hyb21lIHdlbGNvbWUnKTtcbiAgbGV0IGFjdGl2aXR5ID0gYXdhaXQgdGhpcy5nZXRDdXJyZW50QWN0aXZpdHkoKTtcbiAgaWYgKGFjdGl2aXR5ICE9PSAnb3JnLmNocm9taXVtLmNocm9tZS5icm93c2VyLmZpcnN0cnVuLkZpcnN0UnVuQWN0aXZpdHknKSB7XG4gICAgbG9nLmluZm8oJ0Nocm9tZSB3ZWxjb21lIGRpYWxvZyBuZXZlciBzaG93ZWQgdXAhIENvbnRpbnVpbmcnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGVsID0gYXdhaXQgdGhpcy5maW5kRWxPckVscygnaWQnLCAnY29tLmFuZHJvaWQuY2hyb21lOmlkL3Rlcm1zX2FjY2VwdCcsIGZhbHNlKTtcbiAgYXdhaXQgdGhpcy5jbGljayhlbC5FTEVNRU5UKTtcbiAgdHJ5IHtcbiAgICBsZXQgZWwgPSBhd2FpdCB0aGlzLmZpbmRFbE9yRWxzKCdpZCcsICdjb20uYW5kcm9pZC5jaHJvbWU6aWQvbmVnYXRpdmVfYnV0dG9uJywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuY2xpY2soZWwuRUxFTUVOVCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBETyBOT1RISU5HLCBUSElTIERFVklDRSBESUROVCBMQVVOQ0ggVEhFIFNJR05JTiBESUFMT0dcbiAgICAvLyBJVCBNVVNUIEJFIEEgTk9OIEdNUyBERVZJQ0VcbiAgICBsb2cud2FybihgVGhpcyBkZXZpY2UgZGlkIG5vdCBzaG93IENocm9tZSBTaWduSW4gZGlhbG9nLCAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuaGVscGVycy5zdGFydENocm9tZVNlc3Npb24gPSBhc3luYyBmdW5jdGlvbiBzdGFydENocm9tZVNlc3Npb24gKCkge1xuICBsb2cuaW5mbygnU3RhcnRpbmcgYSBjaHJvbWUtYmFzZWQgYnJvd3NlciBzZXNzaW9uJyk7XG4gIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcblxuICBjb25zdCBrbm93blBhY2thZ2VzID0gW1xuICAgICdvcmcuY2hyb21pdW0uY2hyb21lLnNoZWxsJyxcbiAgICAnY29tLmFuZHJvaWQuY2hyb21lJyxcbiAgICAnY29tLmNocm9tZS5iZXRhJyxcbiAgICAnb3JnLmNocm9taXVtLmNocm9tZScsXG4gICAgJ29yZy5jaHJvbWl1bS53ZWJ2aWV3X3NoZWxsJyxcbiAgXTtcblxuICBpZiAoXy5pbmNsdWRlcyhrbm93blBhY2thZ2VzLCB0aGlzLm9wdHMuYXBwUGFja2FnZSkpIHtcbiAgICBvcHRzLmNocm9tZUJ1bmRsZUlkID0gdGhpcy5vcHRzLmFwcFBhY2thZ2U7XG4gIH0gZWxzZSB7XG4gICAgb3B0cy5jaHJvbWVBbmRyb2lkQWN0aXZpdHkgPSB0aGlzLm9wdHMuYXBwQWN0aXZpdHk7XG4gIH1cbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBhd2FpdCB0aGlzLnNldHVwTmV3Q2hyb21lZHJpdmVyKG9wdHMsIHRoaXMuYWRiLmN1ckRldmljZUlkLCB0aGlzLmFkYik7XG4gIHRoaXMuY2hyb21lZHJpdmVyLm9uKENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VELCAobXNnKSA9PiB7XG4gICAgaWYgKG1zZy5zdGF0ZSA9PT0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpIHtcbiAgICAgIHRoaXMub25DaHJvbWVkcml2ZXJTdG9wKENIUk9NSVVNX1dJTik7XG4gICAgfVxuICB9KTtcblxuICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgQ2hyb21lIHNlc3Npb24sIHdlIGVuc3VyZSB0aGF0IHRoZSBjb250ZXh0IGlzXG4gIC8vIGFwcHJvcHJpYXRlbHkgc2V0IGFuZCB0aGF0IHRoaXMgY2hyb21lZHJpdmVyIGlzIGFkZGVkIHRvIHRoZSBsaXN0XG4gIC8vIG9mIHNlc3Npb24gY2hyb21lZHJpdmVycyBzbyB3ZSBjYW4gc3dpdGNoIGJhY2sgYW5kIGZvcnRoXG4gIHRoaXMuY3VyQ29udGV4dCA9IENIUk9NSVVNX1dJTjtcbiAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tDSFJPTUlVTV9XSU5dID0gdGhpcy5jaHJvbWVkcml2ZXI7XG4gIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmNocm9tZWRyaXZlci5wcm94eVJlcS5iaW5kKHRoaXMuY2hyb21lZHJpdmVyKTtcbiAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG5cbiAgaWYgKHRoaXMuc2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUoKSkge1xuICAgIC8vIGRpc21pc3MgQ2hyb21lIHdlbGNvbWUgZGlhbG9nXG4gICAgYXdhaXQgdGhpcy5kaXNtaXNzQ2hyb21lV2VsY29tZSgpO1xuICB9XG59O1xuXG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBJbnRlcm5hbCBsaWJyYXJ5IGZ1bmN0aW9uc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlciAoY2hyb21lZHJpdmVyKSB7XG4gIC8vIGNoZWNrIHRoZSBzdGF0dXMgYnkgc2VuZGluZyBhIHNpbXBsZSB3aW5kb3ctYmFzZWQgY29tbWFuZCB0byBDaHJvbWVEcml2ZXJcbiAgLy8gaWYgdGhlcmUgaXMgYW4gZXJyb3IsIHdlIHdhbnQgdG8gcmVjcmVhdGUgdGhlIENocm9tZURyaXZlciBzZXNzaW9uXG4gIGlmICghYXdhaXQgY2hyb21lZHJpdmVyLmhhc1dvcmtpbmdXZWJ2aWV3KCkpIHtcbiAgICBsb2cuZGVidWcoJ0Nocm9tZURyaXZlciBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGEgd2luZG93LiAnICtcbiAgICAgICAgICAgICAgICAgJ1JlLWluaXRpYWxpemluZyB0aGUgc2Vzc2lvbi4nKTtcbiAgICBhd2FpdCBjaHJvbWVkcml2ZXIucmVzdGFydCgpO1xuICB9XG4gIHJldHVybiBjaHJvbWVkcml2ZXI7XG59XG5cbi8qKlxuICogRmluZCBhIGZyZWUgcG9ydCB0byBoYXZlIENocm9tZWRyaXZlciBsaXN0ZW4gb24uXG4gKlxuICogQHBhcmFtIHthcnJheX0gW3BvcnRTcGVjXSAtIEFycmF5IHdoaWNoIGlzIGEgbGlzdCBvZiBwb3J0cy4gQSBsaXN0IGl0ZW0gbWF5XG4gKiBhbHNvIGl0c2VsZiBiZSBhbiBhcnJheSBvZiBsZW5ndGggMiBzcGVjaWZ5aW5nIGEgc3RhcnQgYW5kIGVuZCBwb3J0IG9mXG4gKiBhIHJhbmdlLiBTb21lIHZhbGlkIHBvcnQgc3BlY3M6XG4gKiAgICAtIFs4MDAwLCA4MDAxLCA4MDAyXVxuICogICAgLSBbWzgwMDAsIDgwMDVdXVxuICogICAgLSBbODAwMCwgWzkwMDAsIDkxMDBdXVxuICpcbiAqIEByZXR1cm4ge251bWJlcn0gQSBmcmVlIHBvcnRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0Q2hyb21lZHJpdmVyUG9ydCAocG9ydFNwZWMpIHtcbiAgY29uc3QgZ2V0UG9ydCA9IEIucHJvbWlzaWZ5KFBvcnRGaW5kZXIuZ2V0UG9ydCwge2NvbnRleHQ6IFBvcnRGaW5kZXJ9KTtcblxuICAvLyBpZiB0aGUgdXNlciBkaWRuJ3QgZ2l2ZSB1cyBhbnkgc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgY2hyb21lZHJpdmVyXG4gIC8vIHBvcnQgcmFuZ2VzLCBqdXN0IGZpbmQgYW55IGZyZWUgcG9ydFxuICBpZiAoIXBvcnRTcGVjKSB7XG4gICAgY29uc3QgcG9ydCA9IGF3YWl0IGdldFBvcnQoKTtcbiAgICBsb2cuZGVidWcoYEEgcG9ydCB3YXMgbm90IGdpdmVuLCB1c2luZyByYW5kb20gZnJlZSBwb3J0OiAke3BvcnR9YCk7XG4gICAgcmV0dXJuIHBvcnQ7XG4gIH1cblxuICAvLyBvdGhlcndpc2UgZmluZCB0aGUgZnJlZSBwb3J0IGJhc2VkIG9uIGEgbGlzdCBvciByYW5nZSBwcm92aWRlZCBieSB0aGUgdXNlclxuICBsb2cuZGVidWcoYEZpbmRpbmcgYSBmcmVlIHBvcnQgZm9yIGNocm9tZWRyaXZlciB1c2luZyBzcGVjICR7SlNPTi5zdHJpbmdpZnkocG9ydFNwZWMpfWApO1xuICBsZXQgZm91bmRQb3J0ID0gbnVsbDtcbiAgZm9yIChjb25zdCBwb3RlbnRpYWxQb3J0IG9mIHBvcnRTcGVjKSB7XG4gICAgbGV0IHBvcnQsIHN0b3BQb3J0O1xuICAgIGlmIChfLmlzQXJyYXkocG90ZW50aWFsUG9ydCkpIHtcbiAgICAgIChbcG9ydCwgc3RvcFBvcnRdID0gcG90ZW50aWFsUG9ydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcnQgPSBwYXJzZUludChwb3RlbnRpYWxQb3J0LCAxMCk7IC8vIGVuc3VyZSB3ZSBoYXZlIGEgbnVtYmVyIGFuZCBub3QgYSBzdHJpbmdcbiAgICAgIHN0b3BQb3J0ID0gcG9ydDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGxvZy5kZWJ1ZyhgQ2hlY2tpbmcgcG9ydCByYW5nZSAke3BvcnR9OiR7c3RvcFBvcnR9YCk7XG4gICAgICBmb3VuZFBvcnQgPSBhd2FpdCBnZXRQb3J0KHtwb3J0LCBzdG9wUG9ydH0pO1xuICAgICAgYnJlYWs7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmRlYnVnKGBOb3RoaW5nIGluIHBvcnQgcmFuZ2UgJHtwb3J0fToke3N0b3BQb3J0fSB3YXMgYXZhaWxhYmxlYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZvdW5kUG9ydCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgYSBmcmVlIHBvcnQgZm9yIGNocm9tZWRyaXZlciB1c2luZyBgICtcbiAgICAgICAgICAgICAgICAgICAgYGNocm9tZWRyaXZlclBvcnRzIHNwZWMgJHtKU09OLnN0cmluZ2lmeShwb3J0U3BlYyl9YCk7XG4gIH1cblxuICBsb2cuZGVidWcoYFVzaW5nIGZyZWUgcG9ydCAke2ZvdW5kUG9ydH0gZm9yIGNocm9tZWRyaXZlcmApO1xuICByZXR1cm4gZm91bmRQb3J0O1xufVxuXG5oZWxwZXJzLmlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCA9IGZ1bmN0aW9uIGlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCAoKSB7XG4gIGlmICh0aGlzLmlzRmVhdHVyZUVuYWJsZWQoQ0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGxvZy5kZWJ1ZyhgQXV0b21hdGVkIENocm9tZWRyaXZlciBkb3dubG9hZCBpcyBkaXNhYmxlZC4gYCArXG4gICAgYFVzZSAnJHtDSFJPTUVEUklWRVJfQVVUT0RPV05MT0FEX0ZFQVRVUkV9JyBzZXJ2ZXIgZmVhdHVyZSB0byBlbmFibGUgaXRgKTtcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuaGVscGVycy5zZXR1cE5ld0Nocm9tZWRyaXZlciA9IGFzeW5jIGZ1bmN0aW9uIHNldHVwTmV3Q2hyb21lZHJpdmVyIChvcHRzLCBjdXJEZXZpY2VJZCwgYWRiLCBjb250ZXh0ID0gbnVsbCkge1xuICBpZiAob3B0cy5jaHJvbWVEcml2ZXJQb3J0KSB7XG4gICAgbG9nLndhcm4oYFRoZSAnY2hyb21lRHJpdmVyUG9ydCcgY2FwYWJpbGl0eSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICdjaHJvbWVkcml2ZXJQb3J0JyBpbnN0ZWFkYCk7XG4gICAgb3B0cy5jaHJvbWVkcml2ZXJQb3J0ID0gb3B0cy5jaHJvbWVEcml2ZXJQb3J0O1xuICB9XG5cbiAgaWYgKG9wdHMuY2hyb21lZHJpdmVyUG9ydCkge1xuICAgIGxvZy5kZWJ1ZyhgVXNpbmcgdXNlci1zcGVjaWZpZWQgcG9ydCAke29wdHMuY2hyb21lZHJpdmVyUG9ydH0gZm9yIGNocm9tZWRyaXZlcmApO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIGEgc2luZ2xlIHBvcnQgd2Fzbid0IGdpdmVuLCB3ZSdsbCBsb29rIGZvciBhIGZyZWUgb25lXG4gICAgb3B0cy5jaHJvbWVkcml2ZXJQb3J0ID0gYXdhaXQgZ2V0Q2hyb21lZHJpdmVyUG9ydChvcHRzLmNocm9tZWRyaXZlclBvcnRzKTtcbiAgfVxuXG4gIGNvbnN0IGRldGFpbHMgPSBjb250ZXh0ID8gd2Vidmlld0hlbHBlcnMuZ2V0V2Vidmlld0RldGFpbHMoYWRiLCBjb250ZXh0KSA6IHVuZGVmaW5lZDtcbiAgaWYgKCFfLmlzRW1wdHkoZGV0YWlscykpIHtcbiAgICBsb2cuZGVidWcoJ1Bhc3Npbmcgd2ViIHZpZXcgZGV0YWlscyB0byB0aGUgQ2hyb21lZHJpdmVyIGNvbnN0cnVjdG9yOiAnICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KGRldGFpbHMsIG51bGwsIDIpKTtcbiAgfVxuXG4gIGNvbnN0IGNocm9tZWRyaXZlciA9IG5ldyBDaHJvbWVkcml2ZXIoe1xuICAgIHBvcnQ6IG9wdHMuY2hyb21lZHJpdmVyUG9ydCxcbiAgICBleGVjdXRhYmxlOiBvcHRzLmNocm9tZWRyaXZlckV4ZWN1dGFibGUsXG4gICAgYWRiLFxuICAgIGNtZEFyZ3M6IG9wdHMuY2hyb21lZHJpdmVyQXJncyxcbiAgICB2ZXJib3NlOiAhIW9wdHMuc2hvd0Nocm9tZWRyaXZlckxvZyxcbiAgICBleGVjdXRhYmxlRGlyOiBvcHRzLmNocm9tZWRyaXZlckV4ZWN1dGFibGVEaXIsXG4gICAgbWFwcGluZ1BhdGg6IG9wdHMuY2hyb21lZHJpdmVyQ2hyb21lTWFwcGluZ0ZpbGUsXG4gICAgYnVuZGxlSWQ6IG9wdHMuY2hyb21lQnVuZGxlSWQsXG4gICAgdXNlU3lzdGVtRXhlY3V0YWJsZTogb3B0cy5jaHJvbWVkcml2ZXJVc2VTeXN0ZW1FeGVjdXRhYmxlLFxuICAgIGRpc2FibGVCdWlsZENoZWNrOiBvcHRzLmNocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrLFxuICAgIGRldGFpbHMsXG4gICAgaXNBdXRvZG93bmxvYWRFbmFibGVkOiAodGhpcyB8fCB7fSkuaXNDaHJvbWVkcml2ZXJBdXRvZG93bmxvYWRFbmFibGVkXG4gICAgICA/IHRoaXMuaXNDaHJvbWVkcml2ZXJBdXRvZG93bmxvYWRFbmFibGVkKCkgOiB1bmRlZmluZWQsXG4gIH0pO1xuXG4gIC8vIG1ha2Ugc3VyZSB0aGVyZSBhcmUgY2hyb21lT3B0aW9uc1xuICBvcHRzLmNocm9tZU9wdGlvbnMgPSBvcHRzLmNocm9tZU9wdGlvbnMgfHwge307XG4gIC8vIHRyeSBvdXQgYW55IHByZWZpeGVkIGNocm9tZU9wdGlvbnMsXG4gIC8vIGFuZCBzdHJpcCB0aGUgcHJlZml4XG4gIGZvciAoY29uc3Qgb3B0IG9mIF8ua2V5cyhvcHRzKSkge1xuICAgIGlmIChvcHQuZW5kc1dpdGgoJzpjaHJvbWVPcHRpb25zJykpIHtcbiAgICAgIGxvZy53YXJuKGBNZXJnaW5nICcke29wdH0nIGludG8gJ2Nocm9tZU9wdGlvbnMnLiBUaGlzIG1heSBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9yYCk7XG4gICAgICBfLm1lcmdlKG9wdHMuY2hyb21lT3B0aW9ucywgb3B0c1tvcHRdKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjYXBzID0gd2Vidmlld0hlbHBlcnMuY3JlYXRlQ2hyb21lZHJpdmVyQ2FwcyhvcHRzLCBjdXJEZXZpY2VJZCk7XG4gIGxvZy5kZWJ1ZyhgQmVmb3JlIHN0YXJ0aW5nIGNocm9tZWRyaXZlciwgYW5kcm9pZFBhY2thZ2UgaXMgJyR7Y2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWRQYWNrYWdlfSdgKTtcbiAgYXdhaXQgY2hyb21lZHJpdmVyLnN0YXJ0KGNhcHMpO1xuICByZXR1cm4gY2hyb21lZHJpdmVyO1xufTtcbmNvbnN0IHNldHVwTmV3Q2hyb21lZHJpdmVyID0gaGVscGVycy5zZXR1cE5ld0Nocm9tZWRyaXZlcjtcblxuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzLCBzZXR1cE5ld0Nocm9tZWRyaXZlciB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2NvbnRleHQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
378
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIl0sIm5hbWVzIjpbIkNIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRDdXJyZW50Q29udGV4dCIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJnZXRDb250ZXh0cyIsIndlYnZpZXdzIiwiaXNDaHJvbWVTZXNzaW9uIiwiQ0hST01JVU1fV0lOIiwid2Vidmlld0hlbHBlcnMiLCJnZXRXZWJ2aWV3cyIsImFkYiIsIm9wdHMiLCJjb250ZXh0cyIsIl8iLCJ1bmlvbiIsIk5BVElWRV9XSU4iLCJsb2ciLCJkZWJ1ZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzZXRDb250ZXh0IiwibmFtZSIsInV0aWwiLCJoYXNWYWx1ZSIsIldFQlZJRVdfV0lOIiwiZGVmYXVsdFdlYnZpZXdOYW1lIiwiaW5jbHVkZXMiLCJlcnJvcnMiLCJOb1N1Y2hDb250ZXh0RXJyb3IiLCJzd2l0Y2hDb250ZXh0IiwibW9iaWxlR2V0Q29udGV4dHMiLCJhbmRyb2lkRGV2aWNlU29ja2V0IiwiZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMiLCJ3ZWJ2aWV3RGV2dG9vbHNQb3J0IiwiZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uIiwiZ2V0V2ViVmlld3NNYXBwaW5nIiwiaXNDaHJvbWVkcml2ZXJDb250ZXh0Iiwic3RhcnRDaHJvbWVkcml2ZXJQcm94eSIsInJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMiLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsIkVycm9yIiwiV0VCVklFV19CQVNFIiwiYXBwUGFja2FnZSIsImlzV2ViQ29udGV4dCIsImNvbnRleHQiLCJjZCIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwic2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlciIsImNsb25lRGVlcCIsImNocm9tZVVzZVJ1bm5pbmdBcHAiLCJleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWUiLCJhbmRyb2lkUGFja2FnZSIsIm1hdGNoIiwibGVuZ3RoIiwiY2hyb21lQW5kcm9pZFBhY2thZ2UiLCJzZXR1cE5ld0Nocm9tZWRyaXZlciIsImN1ckRldmljZUlkIiwib24iLCJDaHJvbWVkcml2ZXIiLCJFVkVOVF9DSEFOR0VEIiwibXNnIiwic3RhdGUiLCJTVEFURV9TVE9QUEVEIiwib25DaHJvbWVkcml2ZXJTdG9wIiwiY2hyb21lZHJpdmVyIiwicHJveHlSZXFSZXMiLCJwcm94eVJlcSIsImJpbmQiLCJqd3BQcm94eUFjdGl2ZSIsIndhcm4iLCJlcnIiLCJzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biIsImtleXMiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzdG9wIiwibWVzc2FnZSIsInZpZXdOYW1lIiwic2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUiLCJjaHJvbWVPcHRpb25zIiwiaXNBcnJheSIsImFyZ3MiLCJkaXNtaXNzQ2hyb21lV2VsY29tZSIsImluZm8iLCJhY3Rpdml0eSIsImdldEN1cnJlbnRBY3Rpdml0eSIsImVsIiwiZmluZEVsT3JFbHMiLCJjbGljayIsIkVMRU1FTlQiLCJlIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwia25vd25QYWNrYWdlcyIsImNocm9tZUJ1bmRsZUlkIiwiY2hyb21lQW5kcm9pZEFjdGl2aXR5IiwiYXBwQWN0aXZpdHkiLCJoYXNXb3JraW5nV2VidmlldyIsInJlc3RhcnQiLCJnZXRDaHJvbWVkcml2ZXJQb3J0IiwicG9ydFNwZWMiLCJnZXRQb3J0IiwiQiIsInByb21pc2lmeSIsIlBvcnRGaW5kZXIiLCJwb3J0IiwiZm91bmRQb3J0IiwicG90ZW50aWFsUG9ydCIsInN0b3BQb3J0IiwicGFyc2VJbnQiLCJpc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQiLCJpc0ZlYXR1cmVFbmFibGVkIiwiY2hyb21lRHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnQiLCJjaHJvbWVkcml2ZXJQb3J0cyIsImRldGFpbHMiLCJnZXRXZWJ2aWV3RGV0YWlscyIsInVuZGVmaW5lZCIsImlzRW1wdHkiLCJleGVjdXRhYmxlIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZSIsImNtZEFyZ3MiLCJjaHJvbWVkcml2ZXJBcmdzIiwidmVyYm9zZSIsInNob3dDaHJvbWVkcml2ZXJMb2ciLCJleGVjdXRhYmxlRGlyIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpciIsIm1hcHBpbmdQYXRoIiwiY2hyb21lZHJpdmVyQ2hyb21lTWFwcGluZ0ZpbGUiLCJidW5kbGVJZCIsInVzZVN5c3RlbUV4ZWN1dGFibGUiLCJjaHJvbWVkcml2ZXJVc2VTeXN0ZW1FeGVjdXRhYmxlIiwiZGlzYWJsZUJ1aWxkQ2hlY2siLCJjaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjayIsImlzQXV0b2Rvd25sb2FkRW5hYmxlZCIsIm9wdCIsImVuZHNXaXRoIiwibWVyZ2UiLCJjYXBzIiwiY3JlYXRlQ2hyb21lZHJpdmVyQ2FwcyIsInN0YXJ0IiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0EsTUFBTUEsaUNBQWlDLEdBQUcsMkJBQTFDO0FBRUEsSUFBSUMsUUFBUSxHQUFHLEVBQWY7QUFBQSxJQUFtQkMsT0FBTyxHQUFHLEVBQTdCO0FBQUEsSUFBaUNDLFVBQVUsR0FBRyxFQUE5Qzs7OztBQU1BRixRQUFRLENBQUNHLGlCQUFULEdBQTZCLGVBQWVBLGlCQUFmLEdBQW9DO0FBRy9ELFNBQU8sS0FBS0MsVUFBTCxJQUFtQixLQUFLQyxrQkFBTCxFQUExQjtBQUNELENBSkQ7O0FBTUFMLFFBQVEsQ0FBQ00sV0FBVCxHQUF1QixlQUFlQSxXQUFmLEdBQThCO0FBQ25ELE1BQUlDLFFBQUo7O0FBQ0EsTUFBSSxLQUFLQyxlQUFULEVBQTBCO0FBR3hCRCxJQUFBQSxRQUFRLEdBQUcs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LHNCQUFJc0QsSUFBSixDQUFVLFlBQVdnRSxHQUFJLDREQUF6Qjs7QUFDQXpILHNCQUFFMkgsS0FBRixDQUFRN0gsSUFBSSxDQUFDb0UsYUFBYixFQUE0QnBFLElBQUksQ0FBQzJILEdBQUQsQ0FBaEM7QUFDRDtBQUNGOztBQUVELFFBQU1HLElBQUksR0FBR2pJLHdCQUFla0ksc0JBQWYsQ0FBc0MvSCxJQUF0QyxFQUE0QzhDLFdBQTVDLEVBQXlEeUQsT0FBekQsQ0FBYjs7QUFDQWxHLGtCQUFJQyxLQUFKLENBQVcsb0RBQW1Ed0gsSUFBSSxDQUFDMUQsYUFBTCxDQUFtQjNCLGNBQWUsR0FBaEc7O0FBQ0EsUUFBTWEsWUFBWSxDQUFDMEUsS0FBYixDQUFtQkYsSUFBbkIsQ0FBTjtBQUNBLFNBQU94RSxZQUFQO0FBQ0QsQ0FsREQ7O0FBbURBLE1BQU1ULG9CQUFvQixHQUFHekQsT0FBTyxDQUFDeUQsb0JBQXJDOztBQUdBb0YsTUFBTSxDQUFDQyxNQUFQLENBQWM3SSxVQUFkLEVBQTBCRixRQUExQixFQUFvQ0MsT0FBcEM7ZUFFZUMsVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgQ2hyb21lZHJpdmVyIGZyb20gJ2FwcGl1bS1jaHJvbWVkcml2ZXInO1xuaW1wb3J0IFBvcnRGaW5kZXIgZnJvbSAncG9ydGZpbmRlcic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCB7XG4gIGRlZmF1bHQgYXMgd2Vidmlld0hlbHBlcnMsXG4gIE5BVElWRV9XSU4sIFdFQlZJRVdfQkFTRSwgV0VCVklFV19XSU4sIENIUk9NSVVNX1dJTlxufSBmcm9tICcuLi93ZWJ2aWV3LWhlbHBlcnMnO1xuXG5jb25zdCBDSFJPTUVEUklWRVJfQVVUT0RPV05MT0FEX0ZFQVRVUkUgPSAnY2hyb21lZHJpdmVyX2F1dG9kb3dubG9hZCc7XG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBBY3R1YWwgTUpTT05XUCBjb21tYW5kIGhhbmRsZXJzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5jb21tYW5kcy5nZXRDdXJyZW50Q29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRDb250ZXh0ICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIC8vIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgYG51bGxgLCBpbmRpY2F0aW5nIG5vIGNvbnRleHRcbiAgLy8gZXhwbGljaXRseSBzZXQsIGl0IGlzIHRoZSBkZWZhdWx0IGNvbnRleHRcbiAgcmV0dXJuIHRoaXMuY3VyQ29udGV4dCB8fCB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZSgpO1xufTtcblxuY29tbWFuZHMuZ2V0Q29udGV4dHMgPSBhc3luYyBmdW5jdGlvbiBnZXRDb250ZXh0cyAoKSB7XG4gIGxldCB3ZWJ2aWV3cztcbiAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgLy8gaWYgd2UgaGF2ZSBhIENocm9tZSBicm93c2VyIHNlc3Npb24sIHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgQ2hyb21lXG4gICAgLy8gY29udGV4dCBhbmQgdGhlIG5hdGl2ZSBjb250ZXh0XG4gICAgd2Vidmlld3MgPSBbQ0hST01JVU1fV0lOXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBvdGhlcndpc2Ugd2UgdXNlIEFEQiB0byBmaWd1cmUgb3V0IHdoaWNoIHdlYnZpZXdzIGFyZSBhdmFpbGFibGVcbiAgICB3ZWJ2aWV3cyA9IGF3YWl0IHdlYnZpZXdIZWxwZXJzLmdldFdlYnZpZXdzKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICB9XG4gIHRoaXMuY29udGV4dHMgPSBfLnVuaW9uKFtOQVRJVkVfV0lOXSwgd2Vidmlld3MpO1xuICBsb2cuZGVidWcoYEF2YWlsYWJsZSBjb250ZXh0czogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmNvbnRleHRzKX1gKTtcbiAgcmV0dXJuIHRoaXMuY29udGV4dHM7XG59O1xuXG5jb21tYW5kcy5zZXRDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gc2V0Q29udGV4dCAobmFtZSkge1xuICBpZiAoIXV0aWwuaGFzVmFsdWUobmFtZSkpIHtcbiAgICBuYW1lID0gdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcbiAgfSBlbHNlIGlmIChuYW1lID09PSBXRUJWSUVXX1dJTikge1xuICAgIC8vIGhhbmRsZSBzZXRDb250ZXh0IFwiV0VCVklFV1wiXG4gICAgbmFtZSA9IHRoaXMuZGVmYXVsdFdlYnZpZXdOYW1lKCk7XG4gIH1cbiAgLy8gaWYgd2UncmUgYWxyZWFkeSBpbiB0aGUgY29udGV4dCB3ZSB3YW50LCBkbyBub3RoaW5nXG4gIGlmIChuYW1lID09PSB0aGlzLmN1ckNvbnRleHQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgY29udGV4dHMgPSBhd2FpdCB0aGlzLmdldENvbnRleHRzKCk7XG4gIC8vIGlmIHRoZSBjb250ZXh0IHdlIHdhbnQgZG9lc24ndCBleGlzdCwgZmFpbFxuICBpZiAoIV8uaW5jbHVkZXMoY29udGV4dHMsIG5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob1N1Y2hDb250ZXh0RXJyb3IoKTtcbiAgfVxuXG4gIGF3YWl0IHRoaXMuc3dpdGNoQ29udGV4dChuYW1lKTtcbiAgdGhpcy5jdXJDb250ZXh0ID0gbmFtZTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gV2Vidmlld3NNYXBwaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvYyBUaGUgbmFtZSBvZiB0aGUgRGV2dG9vbHMgVW5peCBzb2NrZXRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3ZWJ2aWV3IFRoZSB3ZWIgdmlldyBhbGlhcy4gTG9va3MgbGlrZSBgV0VCVklFV19gXG4gKiBwcmVmaXggcGx1cyBQSUQgb3IgcGFja2FnZSBuYW1lXG4gKiBAcHJvcGVydHkgez9PYmplY3R9IGluZm8gV2VidmlldyBpbmZvcm1hdGlvbiBhcyBpdCBpcyByZXRyaWV2ZWQgYnlcbiAqIC9qc29uL3ZlcnNpb24gQ0RQIGVuZHBvaW50XG4gKiBAcHJvcGVydHkgez9BcnJheTxPYmplY3Q+fSBwYWdlcyBXZWJ2aWV3IHBhZ2VzIGxpc3QgYXMgaXQgaXMgcmV0cmlldmVkIGJ5XG4gKiAvanNvbi9saXN0IENEUCBlbmRwb2ludFxuICogQHByb3Blcnkgez9zdHJpbmd9IHdlYnZpZXdOYW1lIEFuIGFjdHVhbCB3ZWJ2aWV3IG5hbWUgZm9yIHN3aXRjaGluZyBjb250ZXh0LlxuICogVGhpcyB2YWx1ZSBiZWNvbWVzIG51bGwgd2hlbiBmYWlsaW5nIHRvIGZpbmQgYSBQSUQgZm9yIGEgd2Vidmlldy5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIGpzb24gZGVtb25zdHJhdGVzIHRoZSBleGFtcGxlIG9mIFdlYnZpZXdzTWFwcGluZyBvYmplY3QuXG4gKiBOb3RlIHRoYXQgYGRlc2NyaXB0aW9uYCBpbiBgcGFnZWAgY2FuIGJlIGFuIGVtcHR5IHN0cmluZyBtb3N0IGxpa2VseSB3aGVuIGl0IGNvbWVzIHRvIE1vYmlsZSBDaHJvbWUpXG4gKiB7XG4gKiAgIFwicHJvY1wiOiBcIkB3ZWJ2aWV3X2RldnRvb2xzX3JlbW90ZV8yMjEzOFwiLFxuICogICBcIndlYnZpZXdcIjogXCJXRUJWSUVXXzIyMTM4XCIsXG4gKiAgIFwiaW5mb1wiOiB7XG4gKiAgICAgXCJBbmRyb2lkLVBhY2thZ2VcIjogXCJpby5hcHBpdW0uc2V0dGluZ3NcIixcbiAqICAgICBcIkJyb3dzZXJcIjogXCJDaHJvbWUvNzQuMC4zNzI5LjE4NVwiLFxuICogICAgIFwiUHJvdG9jb2wtVmVyc2lvblwiOiBcIjEuM1wiLFxuICogICAgIFwiVXNlci1BZ2VudFwiOiBcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMDsgQW5kcm9pZCBTREsgYnVpbHQgZm9yIHg4NiBCdWlsZC9RU1IxLjE5MDkyMC4wMDE7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvNzQuMC4zNzI5LjE4NSBNb2JpbGUgU2FmYXJpLzUzNy4zNlwiLFxuICogICAgIFwiVjgtVmVyc2lvblwiOiBcIjcuNC4yODguMjhcIixcbiAqICAgICBcIldlYktpdC1WZXJzaW9uXCI6IFwiNTM3LjM2IChAMjI5NTU2ODJmOTRjZTA5MzM2MTk3YmZiOGRmZmVhOTkxZmEzMmYwZClcIixcbiAqICAgICBcIndlYlNvY2tldERlYnVnZ2VyVXJsXCI6IFwid3M6Ly8xMjcuMC4wLjE6MTA5MDAvZGV2dG9vbHMvYnJvd3NlclwiXG4gKiAgIH0sXG4gKiAgIFwicGFnZXNcIjogW1xuICogICAgIHtcbiAqICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ7XFxcImF0dGFjaGVkXFxcIjp0cnVlLFxcXCJlbXB0eVxcXCI6ZmFsc2UsXFxcImhlaWdodFxcXCI6MTQ1OCxcXFwic2NyZWVuWFxcXCI6MCxcXFwic2NyZWVuWVxcXCI6MzM2LFxcXCJ2aXNpYmxlXFxcIjp0cnVlLFxcXCJ3aWR0aFxcXCI6MTA4MH1cIixcbiAqICAgICAgIFwiZGV2dG9vbHNGcm9udGVuZFVybFwiOiBcImh0dHA6Ly9jaHJvbWUtZGV2dG9vbHMtZnJvbnRlbmQuYXBwc3BvdC5jb20vc2VydmVfcmV2L0AyMjk1NTY4MmY5NGNlMDkzMzYxOTdiZmI4ZGZmZWE5OTFmYTMyZjBkL2luc3BlY3Rvci5odG1sP3dzPTEyNy4wLjAuMToxMDkwMC9kZXZ0b29scy9wYWdlLzI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCIsXG4gKiAgICAgICBcImlkXCI6IFwiMjczMjVDQzUwQjYwMEQzMUIyMzNGNDVFMDk0ODdCMUZcIixcbiAqICAgICAgIFwidGl0bGVcIjogXCJSZWxlYXNlcyDCtyBhcHBpdW0vYXBwaXVtIMK3IEdpdEh1YlwiLFxuICogICAgICAgXCJ0eXBlXCI6IFwicGFnZVwiLFxuICogICAgICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9yZWxlYXNlc1wiLFxuICogICAgICAgXCJ3ZWJTb2NrZXREZWJ1Z2dlclVybFwiOiBcIndzOi8vMTI3LjAuMC4xOjEwOTAwL2RldnRvb2xzL3BhZ2UvMjczMjVDQzUwQjYwMEQzMUIyMzNGNDVFMDk0ODdCMUZcIlxuICogICAgIH1cbiAqICAgXSxcbiAqICAgXCJ3ZWJ2aWV3TmFtZVwiOiBcIldFQlZJRVdfY29tLmlvLmFwcGl1bS5zZXR0aW5nXCJcbiAqIH1cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSB3ZWJ2aWV3c01hcHBpbmcgYmFzZWQgb24gQ0RQIGVuZHBvaW50c1xuICpcbiAqIEByZXR1cm4ge0FycmF5PFdlYnZpZXdzTWFwcGluZz59IHdlYnZpZXdzTWFwcGluZ1xuICovXG5jb21tYW5kcy5tb2JpbGVHZXRDb250ZXh0cyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldENvbnRleHRzICgpIHtcbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBhbmRyb2lkRGV2aWNlU29ja2V0OiB0aGlzLm9wdHMuYW5kcm9pZERldmljZVNvY2tldCxcbiAgICBlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlczogdHJ1ZSxcbiAgICB3ZWJ2aWV3RGV2dG9vbHNQb3J0OiB0aGlzLm9wdHMud2Vidmlld0RldnRvb2xzUG9ydCxcbiAgICBlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb246IHRydWVcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHdlYnZpZXdIZWxwZXJzLmdldFdlYlZpZXdzTWFwcGluZyh0aGlzLmFkYiwgb3B0cyk7XG59O1xuXG5oZWxwZXJzLnN3aXRjaENvbnRleHQgPSBhc3luYyBmdW5jdGlvbiBzd2l0Y2hDb250ZXh0IChuYW1lKSB7XG4gIC8vIFdlIGhhdmUgc29tZSBvcHRpb25zIHdoZW4gaXQgY29tZXMgdG8gd2Vidmlld3MuIElmIHdlIHdhbnQgYVxuICAvLyBDaHJvbWVkcml2ZXIgd2Vidmlldywgd2UgY2FuIG9ubHkgY29udHJvbCBvbmUgYXQgYSB0aW1lLlxuICBpZiAodGhpcy5pc0Nocm9tZWRyaXZlckNvbnRleHQobmFtZSkpIHtcbiAgICAvLyBzdGFydCBwcm94eWluZyBjb21tYW5kcyBkaXJlY3RseSB0byBjaHJvbWVkcml2ZXJcbiAgICBhd2FpdCB0aGlzLnN0YXJ0Q2hyb21lZHJpdmVyUHJveHkobmFtZSk7XG4gIH0gZWxzZSBpZiAodGhpcy5pc0Nocm9tZWRyaXZlckNvbnRleHQodGhpcy5jdXJDb250ZXh0KSkge1xuICAgIC8vIGlmIHdlJ3JlIG1vdmluZyB0byBhIG5vbi1jaHJvbWVkcml2ZXIgd2VidmlldywgYW5kIG91ciBjdXJyZW50IGNvbnRleHRcbiAgICAvLyBfaXNfIGEgY2hyb21lZHJpdmVyIHdlYnZpZXcsIGlmIGNhcHMgcmVjcmVhdGVDaHJvbWVEcml2ZXJTZXNzaW9ucyBpcyBzZXRcbiAgICAvLyB0byB0cnVlIHRoZW4ga2lsbCBjaHJvbWVkcml2ZXIgc2Vzc2lvbiB1c2luZyBzdG9wQ2hyb21lZHJpdmVyUHJveGllcyBvclxuICAgIC8vIGVsc2Ugc2ltcGx5IHN1c3BlbmQgcHJveHlpbmcgdG8gdGhlIGxhdHRlclxuICAgIGlmICh0aGlzLm9wdHMucmVjcmVhdGVDaHJvbWVEcml2ZXJTZXNzaW9ucykge1xuICAgICAgbG9nLmRlYnVnKCdyZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zIHNldCB0byB0cnVlOyBraWxsaW5nIGV4aXN0aW5nIGNocm9tZWRyaXZlcnMnKTtcbiAgICAgIGF3YWl0IHRoaXMuc3RvcENocm9tZWRyaXZlclByb3hpZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5zdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEaWRuJ3Qga25vdyBob3cgdG8gaGFuZGxlIHN3aXRjaGluZyB0byBjb250ZXh0ICcke25hbWV9J2ApO1xuICB9XG59O1xuXG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogT24tb2JqZWN0IGNvbnRleHQtcmVsYXRlZCBoZWxwZXJzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLy8gVGhlIHJlYXNvbiB0aGlzIGlzIGEgZnVuY3Rpb24gYW5kIG5vdCBqdXN0IGEgY29uc3RhbnQgaXMgdGhhdCBib3RoIGFuZHJvaWQtXG4vLyBkcml2ZXIgYW5kIHNlbGVuZHJvaWQtZHJpdmVyIHVzZSB0aGlzIGxvZ2ljLCBhbmQgZWFjaCBvbmUgcmV0dXJuc1xuLy8gYSBkaWZmZXJlbnQgZGVmYXVsdCBjb250ZXh0IG5hbWVcbmhlbHBlcnMuZGVmYXVsdENvbnRleHROYW1lID0gZnVuY3Rpb24gZGVmYXVsdENvbnRleHROYW1lICgpIHtcbiAgcmV0dXJuIE5BVElWRV9XSU47XG59O1xuXG5oZWxwZXJzLmRlZmF1bHRXZWJ2aWV3TmFtZSA9IGZ1bmN0aW9uIGRlZmF1bHRXZWJ2aWV3TmFtZSAoKSB7XG4gIHJldHVybiBXRUJWSUVXX0JBU0UgKyB0aGlzLm9wdHMuYXBwUGFja2FnZTtcbn07XG5cbmhlbHBlcnMuaXNXZWJDb250ZXh0ID0gZnVuY3Rpb24gaXNXZWJDb250ZXh0ICgpIHtcbiAgcmV0dXJuIHRoaXMuY3VyQ29udGV4dCAhPT0gbnVsbCAmJiB0aGlzLmN1ckNvbnRleHQgIT09IE5BVElWRV9XSU47XG59O1xuXG4vLyBUdXJuIG9uIHByb3h5aW5nIHRvIGFuIGV4aXN0aW5nIENocm9tZWRyaXZlciBzZXNzaW9uIG9yIGEgbmV3IG9uZVxuaGVscGVycy5zdGFydENocm9tZWRyaXZlclByb3h5ID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRDaHJvbWVkcml2ZXJQcm94eSAoY29udGV4dCkge1xuICBsb2cuZGVidWcoYENvbm5lY3RpbmcgdG8gY2hyb21lLWJhY2tlZCB3ZWJ2aWV3IGNvbnRleHQgJyR7Y29udGV4dH0nYCk7XG5cbiAgbGV0IGNkO1xuICBpZiAodGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XSkge1xuICAgIC8vIGluIHRoZSBjYXNlIHdoZXJlIHdlJ3ZlIGFscmVhZHkgc2V0IHVwIGEgY2hyb21lZHJpdmVyIGZvciBhIGNvbnRleHQsXG4gICAgLy8gd2Ugd2FudCB0byByZWNvbm5lY3QgdG8gaXQsIG5vdCBjcmVhdGUgYSB3aG9sZSBuZXcgb25lXG4gICAgbG9nLmRlYnVnKGBGb3VuZCBleGlzdGluZyBDaHJvbWVkcml2ZXIgZm9yIGNvbnRleHQgJyR7Y29udGV4dH0nLiBVc2luZyBpdC5gKTtcbiAgICBjZCA9IHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gICAgYXdhaXQgc2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlcihjZCk7XG4gIH0gZWxzZSB7XG4gICAgbGV0IG9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLm9wdHMpO1xuICAgIG9wdHMuY2hyb21lVXNlUnVubmluZ0FwcCA9IHRydWU7XG5cbiAgICAvLyBpZiByZXF1ZXN0ZWQsIHRlbGwgY2hyb21lZHJpdmVyIHRvIGF0dGFjaCB0byB0aGUgYW5kcm9pZCBwYWNrYWdlIHdlIGhhdmVcbiAgICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRleHQgbmFtZSwgcmF0aGVyIHRoYW4gdGhlIHBhY2thZ2Ugb2YgdGhlIEFVVC5cbiAgICAvLyBBbmQgdHVybiB0aGlzIG9uIGJ5IGRlZmF1bHQgZm9yIGNocm9tZS0taWYgY2hyb21lIHBvcHMgdXAgd2l0aCBhIHdlYnZpZXdcbiAgICAvLyBhbmQgc29tZW9uZSB3YW50cyB0byBzd2l0Y2ggdG8gaXQsIHdlIHNob3VsZCBsZXQgY2hyb21lZHJpdmVyIGNvbm5lY3QgdG9cbiAgICAvLyBjaHJvbWUgcmF0aGVyIHRoYW4gc3RheWluZyBzdHVjayBvbiB0aGUgQVVUXG4gICAgaWYgKG9wdHMuZXh0cmFjdENocm9tZUFuZHJvaWRQYWNrYWdlRnJvbUNvbnRleHROYW1lIHx8IGNvbnRleHQgPT09IGAke1dFQlZJRVdfQkFTRX1jaHJvbWVgKSB7XG4gICAgICBsZXQgYW5kcm9pZFBhY2thZ2UgPSBjb250ZXh0Lm1hdGNoKGAke1dFQlZJRVdfQkFTRX0oLispYCk7XG4gICAgICBpZiAoYW5kcm9pZFBhY2thZ2UgJiYgYW5kcm9pZFBhY2thZ2UubGVuZ3RoID4gMCkge1xuICAgICAgICBvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlID0gYW5kcm9pZFBhY2thZ2VbMV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2QgPSBhd2FpdCB0aGlzLnNldHVwTmV3Q2hyb21lZHJpdmVyKG9wdHMsIHRoaXMuYWRiLmN1ckRldmljZUlkLCB0aGlzLmFkYiwgY29udGV4dCk7XG4gICAgLy8gYmluZCBvdXIgc3RvcC9leGl0IGhhbmRsZXIsIHBhc3NpbmcgaW4gY29udGV4dCBzbyB3ZSBrbm93IHdoaWNoXG4gICAgLy8gb25lIHN0b3BwZWQgdW5leHBlY3RlZGx5XG4gICAgY2Qub24oQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQsIChtc2cpID0+IHtcbiAgICAgIGlmIChtc2cuc3RhdGUgPT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICAgIHRoaXMub25DaHJvbWVkcml2ZXJTdG9wKGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHNhdmUgdGhlIGNocm9tZWRyaXZlciBvYmplY3QgdW5kZXIgdGhlIGNvbnRleHRcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdID0gY2Q7XG4gIH1cbiAgLy8gaG9vayB1cCB0aGUgbG9jYWwgdmFyaWFibGVzIHNvIHdlIGNhbiBwcm94eSB0aGlzIGJpelxuICB0aGlzLmNocm9tZWRyaXZlciA9IGNkO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5jaHJvbWVkcml2ZXIucHJveHlSZXEuYmluZCh0aGlzLmNocm9tZWRyaXZlcik7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyXG5oZWxwZXJzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSA9IGZ1bmN0aW9uIHN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSAoKSB7XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IG51bGw7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbn07XG5cbi8vIEhhbmRsZSBhbiBvdXQtb2YtYmFuZCBDaHJvbWVkcml2ZXIgc3RvcCBldmVudFxuaGVscGVycy5vbkNocm9tZWRyaXZlclN0b3AgPSBhc3luYyBmdW5jdGlvbiBvbkNocm9tZWRyaXZlclN0b3AgKGNvbnRleHQpIHtcbiAgbG9nLndhcm4oYENocm9tZWRyaXZlciBmb3IgY29udGV4dCAke2NvbnRleHR9IHN0b3BwZWQgdW5leHBlY3RlZGx5YCk7XG4gIGlmIChjb250ZXh0ID09PSB0aGlzLmN1ckNvbnRleHQpIHtcbiAgICAvLyB3ZSBleGl0ZWQgdW5leHBlY3RlZGx5IHdoaWxlIGF1dG9tYXRpbmcgdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgc28gd2FudFxuICAgIC8vIHRvIHNodXQgZG93biB0aGUgc2Vzc2lvbiBhbmQgcmVzcG9uZCB3aXRoIGFuIGVycm9yXG4gICAgbGV0IGVyciA9IG5ldyBFcnJvcignQ2hyb21lZHJpdmVyIHF1aXQgdW5leHBlY3RlZGx5IGR1cmluZyBzZXNzaW9uJyk7XG4gICAgYXdhaXQgdGhpcy5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihlcnIpO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIGEgQ2hyb21lZHJpdmVyIGluIHRoZSBub24tYWN0aXZlIGNvbnRleHQgYmFyZnMsIHdlIGRvbid0IHJlYWxseVxuICAgIC8vIGNhcmUsIHdlJ2xsIGp1c3QgbWFrZSBhIG5ldyBvbmUgbmV4dCB0aW1lIHdlIG5lZWQgdGhlIGNvbnRleHQuXG4gICAgbG9nLndhcm4oXCJDaHJvbWVkcml2ZXIgcXVpdCB1bmV4cGVjdGVkbHksIGJ1dCBpdCB3YXNuJ3QgdGhlIGFjdGl2ZSBcIiArXG4gICAgICAgICAgICAgICAgJ2NvbnRleHQsIGlnbm9yaW5nJyk7XG4gICAgZGVsZXRlIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gIH1cbn07XG5cbi8vIEludGVudGlvbmFsbHkgc3RvcCBhbGwgdGhlIGNocm9tZWRyaXZlcnMgY3VycmVudGx5IGFjdGl2ZSwgYW5kIGlnbm9yZVxuLy8gdGhlaXIgZXhpdCBldmVudHNcbmhlbHBlcnMuc3RvcENocm9tZWRyaXZlclByb3hpZXMgPSBhc3luYyBmdW5jdGlvbiBzdG9wQ2hyb21lZHJpdmVyUHJveGllcyAoKSB7XG4gIHRoaXMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5KCk7IC8vIG1ha2Ugc3VyZSB3ZSB0dXJuIG9mZiB0aGUgcHJveHkgZmxhZ1xuICBmb3IgKGxldCBjb250ZXh0IG9mIF8ua2V5cyh0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzKSkge1xuICAgIGxldCBjZCA9IHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gICAgbG9nLmRlYnVnKGBTdG9wcGluZyBjaHJvbWVkcml2ZXIgZm9yIGNvbnRleHQgJHtjb250ZXh0fWApO1xuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciB0aGUgc3RvcHBlZCBzdGF0ZSBldmVudFxuICAgIGNkLnJlbW92ZUFsbExpc3RlbmVycyhDaHJvbWVkcml2ZXIuRVZFTlRfQ0hBTkdFRCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNkLnN0b3AoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBFcnJvciBzdG9wcGluZyBDaHJvbWVkcml2ZXI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdO1xuICB9XG59O1xuXG5oZWxwZXJzLmlzQ2hyb21lZHJpdmVyQ29udGV4dCA9IGZ1bmN0aW9uIGlzQ2hyb21lZHJpdmVyQ29udGV4dCAodmlld05hbWUpIHtcbiAgcmV0dXJuIF8uaW5jbHVkZXModmlld05hbWUsIFdFQlZJRVdfV0lOKSB8fCB2aWV3TmFtZSA9PT0gQ0hST01JVU1fV0lOO1xufTtcblxuaGVscGVycy5zaG91bGREaXNtaXNzQ2hyb21lV2VsY29tZSA9IGZ1bmN0aW9uIHNob3VsZERpc21pc3NDaHJvbWVXZWxjb21lICgpIHtcbiAgcmV0dXJuICEhdGhpcy5vcHRzLmNocm9tZU9wdGlvbnMgJiZcbiAgICAgICAgIF8uaXNBcnJheSh0aGlzLm9wdHMuY2hyb21lT3B0aW9ucy5hcmdzKSAmJlxuICAgICAgICAgdGhpcy5vcHRzLmNocm9tZU9wdGlvbnMuYXJncy5pbmNsdWRlcygnLS1uby1maXJzdC1ydW4nKTtcbn07XG5cbmhlbHBlcnMuZGlzbWlzc0Nocm9tZVdlbGNvbWUgPSBhc3luYyBmdW5jdGlvbiBkaXNtaXNzQ2hyb21lV2VsY29tZSAoKSB7XG4gIGxvZy5pbmZvKCdUcnlpbmcgdG8gZGlzbWlzcyBDaHJvbWUgd2VsY29tZScpO1xuICBsZXQgYWN0aXZpdHkgPSBhd2FpdCB0aGlzLmdldEN1cnJlbnRBY3Rpdml0eSgpO1xuICBpZiAoYWN0aXZpdHkgIT09ICdvcmcuY2hyb21pdW0uY2hyb21lLmJyb3dzZXIuZmlyc3RydW4uRmlyc3RSdW5BY3Rpdml0eScpIHtcbiAgICBsb2cuaW5mbygnQ2hyb21lIHdlbGNvbWUgZGlhbG9nIG5ldmVyIHNob3dlZCB1cCEgQ29udGludWluZycpO1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgZWwgPSBhd2FpdCB0aGlzLmZpbmRFbE9yRWxzKCdpZCcsICdjb20uYW5kcm9pZC5jaHJvbWU6aWQvdGVybXNfYWNjZXB0JywgZmFsc2UpO1xuICBhd2FpdCB0aGlzLmNsaWNrKGVsLkVMRU1FTlQpO1xuICB0cnkge1xuICAgIGxldCBlbCA9IGF3YWl0IHRoaXMuZmluZEVsT3JFbHMoJ2lkJywgJ2NvbS5hbmRyb2lkLmNocm9tZTppZC9uZWdhdGl2ZV9idXR0b24nLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5jbGljayhlbC5FTEVNRU5UKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIERPIE5PVEhJTkcsIFRISVMgREVWSUNFIERJRE5UIExBVU5DSCBUSEUgU0lHTklOIERJQUxPR1xuICAgIC8vIElUIE1VU1QgQkUgQSBOT04gR01TIERFVklDRVxuICAgIGxvZy53YXJuKGBUaGlzIGRldmljZSBkaWQgbm90IHNob3cgQ2hyb21lIFNpZ25JbiBkaWFsb2csICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLnN0YXJ0Q2hyb21lU2Vzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0Q2hyb21lU2Vzc2lvbiAoKSB7XG4gIGxvZy5pbmZvKCdTdGFydGluZyBhIGNocm9tZS1iYXNlZCBicm93c2VyIHNlc3Npb24nKTtcbiAgbGV0IG9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLm9wdHMpO1xuXG4gIGNvbnN0IGtub3duUGFja2FnZXMgPSBbXG4gICAgJ29yZy5jaHJvbWl1bS5jaHJvbWUuc2hlbGwnLFxuICAgICdjb20uYW5kcm9pZC5jaHJvbWUnLFxuICAgICdjb20uY2hyb21lLmJldGEnLFxuICAgICdvcmcuY2hyb21pdW0uY2hyb21lJyxcbiAgICAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwnLFxuICBdO1xuXG4gIGlmIChfLmluY2x1ZGVzKGtub3duUGFja2FnZXMsIHRoaXMub3B0cy5hcHBQYWNrYWdlKSkge1xuICAgIG9wdHMuY2hyb21lQnVuZGxlSWQgPSB0aGlzLm9wdHMuYXBwUGFja2FnZTtcbiAgfSBlbHNlIHtcbiAgICBvcHRzLmNocm9tZUFuZHJvaWRBY3Rpdml0eSA9IHRoaXMub3B0cy5hcHBBY3Rpdml0eTtcbiAgfVxuICB0aGlzLmNocm9tZWRyaXZlciA9IGF3YWl0IHRoaXMuc2V0dXBOZXdDaHJvbWVkcml2ZXIob3B0cywgdGhpcy5hZGIuY3VyRGV2aWNlSWQsIHRoaXMuYWRiKTtcbiAgdGhpcy5jaHJvbWVkcml2ZXIub24oQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQsIChtc2cpID0+IHtcbiAgICBpZiAobXNnLnN0YXRlID09PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgdGhpcy5vbkNocm9tZWRyaXZlclN0b3AoQ0hST01JVU1fV0lOKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBDaHJvbWUgc2Vzc2lvbiwgd2UgZW5zdXJlIHRoYXQgdGhlIGNvbnRleHQgaXNcbiAgLy8gYXBwcm9wcmlhdGVseSBzZXQgYW5kIHRoYXQgdGhpcyBjaHJvbWVkcml2ZXIgaXMgYWRkZWQgdG8gdGhlIGxpc3RcbiAgLy8gb2Ygc2Vzc2lvbiBjaHJvbWVkcml2ZXJzIHNvIHdlIGNhbiBzd2l0Y2ggYmFjayBhbmQgZm9ydGhcbiAgdGhpcy5jdXJDb250ZXh0ID0gQ0hST01JVU1fV0lOO1xuICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW0NIUk9NSVVNX1dJTl0gPSB0aGlzLmNocm9tZWRyaXZlcjtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuY2hyb21lZHJpdmVyLnByb3h5UmVxLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIpO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcblxuICBpZiAodGhpcy5zaG91bGREaXNtaXNzQ2hyb21lV2VsY29tZSgpKSB7XG4gICAgLy8gZGlzbWlzcyBDaHJvbWUgd2VsY29tZSBkaWFsb2dcbiAgICBhd2FpdCB0aGlzLmRpc21pc3NDaHJvbWVXZWxjb21lKCk7XG4gIH1cbn07XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEludGVybmFsIGxpYnJhcnkgZnVuY3Rpb25zXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5hc3luYyBmdW5jdGlvbiBzZXR1cEV4aXN0aW5nQ2hyb21lZHJpdmVyIChjaHJvbWVkcml2ZXIpIHtcbiAgLy8gY2hlY2sgdGhlIHN0YXR1cyBieSBzZW5kaW5nIGEgc2ltcGxlIHdpbmRvdy1iYXNlZCBjb21tYW5kIHRvIENocm9tZURyaXZlclxuICAvLyBpZiB0aGVyZSBpcyBhbiBlcnJvciwgd2Ugd2FudCB0byByZWNyZWF0ZSB0aGUgQ2hyb21lRHJpdmVyIHNlc3Npb25cbiAgaWYgKCFhd2FpdCBjaHJvbWVkcml2ZXIuaGFzV29ya2luZ1dlYnZpZXcoKSkge1xuICAgIGxvZy5kZWJ1ZygnQ2hyb21lRHJpdmVyIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSB3aW5kb3cuICcgK1xuICAgICAgICAgICAgICAgICAnUmUtaW5pdGlhbGl6aW5nIHRoZSBzZXNzaW9uLicpO1xuICAgIGF3YWl0IGNocm9tZWRyaXZlci5yZXN0YXJ0KCk7XG4gIH1cbiAgcmV0dXJuIGNocm9tZWRyaXZlcjtcbn1cblxuLyoqXG4gKiBGaW5kIGEgZnJlZSBwb3J0IHRvIGhhdmUgQ2hyb21lZHJpdmVyIGxpc3RlbiBvbi5cbiAqXG4gKiBAcGFyYW0ge2FycmF5fSBbcG9ydFNwZWNdIC0gQXJyYXkgd2hpY2ggaXMgYSBsaXN0IG9mIHBvcnRzLiBBIGxpc3QgaXRlbSBtYXlcbiAqIGFsc28gaXRzZWxmIGJlIGFuIGFycmF5IG9mIGxlbmd0aCAyIHNwZWNpZnlpbmcgYSBzdGFydCBhbmQgZW5kIHBvcnQgb2ZcbiAqIGEgcmFuZ2UuIFNvbWUgdmFsaWQgcG9ydCBzcGVjczpcbiAqICAgIC0gWzgwMDAsIDgwMDEsIDgwMDJdXG4gKiAgICAtIFtbODAwMCwgODAwNV1dXG4gKiAgICAtIFs4MDAwLCBbOTAwMCwgOTEwMF1dXG4gKlxuICogQHJldHVybiB7bnVtYmVyfSBBIGZyZWUgcG9ydFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDaHJvbWVkcml2ZXJQb3J0IChwb3J0U3BlYykge1xuICBjb25zdCBnZXRQb3J0ID0gQi5wcm9taXNpZnkoUG9ydEZpbmRlci5nZXRQb3J0LCB7Y29udGV4dDogUG9ydEZpbmRlcn0pO1xuXG4gIC8vIGlmIHRoZSB1c2VyIGRpZG4ndCBnaXZlIHVzIGFueSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCBjaHJvbWVkcml2ZXJcbiAgLy8gcG9ydCByYW5nZXMsIGp1c3QgZmluZCBhbnkgZnJlZSBwb3J0XG4gIGlmICghcG9ydFNwZWMpIHtcbiAgICBjb25zdCBwb3J0ID0gYXdhaXQgZ2V0UG9ydCgpO1xuICAgIGxvZy5kZWJ1ZyhgQSBwb3J0IHdhcyBub3QgZ2l2ZW4sIHVzaW5nIHJhbmRvbSBmcmVlIHBvcnQ6ICR7cG9ydH1gKTtcbiAgICByZXR1cm4gcG9ydDtcbiAgfVxuXG4gIC8vIG90aGVyd2lzZSBmaW5kIHRoZSBmcmVlIHBvcnQgYmFzZWQgb24gYSBsaXN0IG9yIHJhbmdlIHByb3ZpZGVkIGJ5IHRoZSB1c2VyXG4gIGxvZy5kZWJ1ZyhgRmluZGluZyBhIGZyZWUgcG9ydCBmb3IgY2hyb21lZHJpdmVyIHVzaW5nIHNwZWMgJHtKU09OLnN0cmluZ2lmeShwb3J0U3BlYyl9YCk7XG4gIGxldCBmb3VuZFBvcnQgPSBudWxsO1xuICBmb3IgKGNvbnN0IHBvdGVudGlhbFBvcnQgb2YgcG9ydFNwZWMpIHtcbiAgICBsZXQgcG9ydCwgc3RvcFBvcnQ7XG4gICAgaWYgKF8uaXNBcnJheShwb3RlbnRpYWxQb3J0KSkge1xuICAgICAgKFtwb3J0LCBzdG9wUG9ydF0gPSBwb3RlbnRpYWxQb3J0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9ydCA9IHBhcnNlSW50KHBvdGVudGlhbFBvcnQsIDEwKTsgLy8gZW5zdXJlIHdlIGhhdmUgYSBudW1iZXIgYW5kIG5vdCBhIHN0cmluZ1xuICAgICAgc3RvcFBvcnQgPSBwb3J0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbG9nLmRlYnVnKGBDaGVja2luZyBwb3J0IHJhbmdlICR7cG9ydH06JHtzdG9wUG9ydH1gKTtcbiAgICAgIGZvdW5kUG9ydCA9IGF3YWl0IGdldFBvcnQoe3BvcnQsIHN0b3BQb3J0fSk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZGVidWcoYE5vdGhpbmcgaW4gcG9ydCByYW5nZSAke3BvcnR9OiR7c3RvcFBvcnR9IHdhcyBhdmFpbGFibGVgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZm91bmRQb3J0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBhIGZyZWUgcG9ydCBmb3IgY2hyb21lZHJpdmVyIHVzaW5nIGAgK1xuICAgICAgICAgICAgICAgICAgICBgY2hyb21lZHJpdmVyUG9ydHMgc3BlYyAke0pTT04uc3RyaW5naWZ5KHBvcnRTcGVjKX1gKTtcbiAgfVxuXG4gIGxvZy5kZWJ1ZyhgVXNpbmcgZnJlZSBwb3J0ICR7Zm91bmRQb3J0fSBmb3IgY2hyb21lZHJpdmVyYCk7XG4gIHJldHVybiBmb3VuZFBvcnQ7XG59XG5cbmhlbHBlcnMuaXNDaHJvbWVkcml2ZXJBdXRvZG93bmxvYWRFbmFibGVkID0gZnVuY3Rpb24gaXNDaHJvbWVkcml2ZXJBdXRvZG93bmxvYWRFbmFibGVkICgpIHtcbiAgaWYgKHRoaXMuaXNGZWF0dXJlRW5hYmxlZChDSFJPTUVEUklWRVJfQVVUT0RPV05MT0FEX0ZFQVRVUkUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgbG9nLmRlYnVnKGBBdXRvbWF0ZWQgQ2hyb21lZHJpdmVyIGRvd25sb2FkIGlzIGRpc2FibGVkLiBgICtcbiAgICBgVXNlICcke0NIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRX0nIHNlcnZlciBmZWF0dXJlIHRvIGVuYWJsZSBpdGApO1xuICByZXR1cm4gZmFsc2U7XG59O1xuXG5oZWxwZXJzLnNldHVwTmV3Q2hyb21lZHJpdmVyID0gYXN5bmMgZnVuY3Rpb24gc2V0dXBOZXdDaHJvbWVkcml2ZXIgKG9wdHMsIGN1ckRldmljZUlkLCBhZGIsIGNvbnRleHQgPSBudWxsKSB7XG4gIGlmIChvcHRzLmNocm9tZURyaXZlclBvcnQpIHtcbiAgICBsb2cud2FybihgVGhlICdjaHJvbWVEcml2ZXJQb3J0JyBjYXBhYmlsaXR5IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgJ2Nocm9tZWRyaXZlclBvcnQnIGluc3RlYWRgKTtcbiAgICBvcHRzLmNocm9tZWRyaXZlclBvcnQgPSBvcHRzLmNocm9tZURyaXZlclBvcnQ7XG4gIH1cblxuICBpZiAob3B0cy5jaHJvbWVkcml2ZXJQb3J0KSB7XG4gICAgbG9nLmRlYnVnKGBVc2luZyB1c2VyLXNwZWNpZmllZCBwb3J0ICR7b3B0cy5jaHJvbWVkcml2ZXJQb3J0fSBmb3IgY2hyb21lZHJpdmVyYCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgYSBzaW5nbGUgcG9ydCB3YXNuJ3QgZ2l2ZW4sIHdlJ2xsIGxvb2sgZm9yIGEgZnJlZSBvbmVcbiAgICBvcHRzLmNocm9tZWRyaXZlclBvcnQgPSBhd2FpdCBnZXRDaHJvbWVkcml2ZXJQb3J0KG9wdHMuY2hyb21lZHJpdmVyUG9ydHMpO1xuICB9XG5cbiAgY29uc3QgZGV0YWlscyA9IGNvbnRleHQgPyB3ZWJ2aWV3SGVscGVycy5nZXRXZWJ2aWV3RGV0YWlscyhhZGIsIGNvbnRleHQpIDogdW5kZWZpbmVkO1xuICBpZiAoIV8uaXNFbXB0eShkZXRhaWxzKSkge1xuICAgIGxvZy5kZWJ1ZygnUGFzc2luZyB3ZWIgdmlldyBkZXRhaWxzIHRvIHRoZSBDaHJvbWVkcml2ZXIgY29uc3RydWN0b3I6ICcgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkoZGV0YWlscywgbnVsbCwgMikpO1xuICB9XG5cbiAgY29uc3QgY2hyb21lZHJpdmVyID0gbmV3IENocm9tZWRyaXZlcih7XG4gICAgcG9ydDogb3B0cy5jaHJvbWVkcml2ZXJQb3J0LFxuICAgIGV4ZWN1dGFibGU6IG9wdHMuY2hyb21lZHJpdmVyRXhlY3V0YWJsZSxcbiAgICBhZGIsXG4gICAgY21kQXJnczogb3B0cy5jaHJvbWVkcml2ZXJBcmdzLFxuICAgIHZlcmJvc2U6ICEhb3B0cy5zaG93Q2hyb21lZHJpdmVyTG9nLFxuICAgIGV4ZWN1dGFibGVEaXI6IG9wdHMuY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpcixcbiAgICBtYXBwaW5nUGF0aDogb3B0cy5jaHJvbWVkcml2ZXJDaHJvbWVNYXBwaW5nRmlsZSxcbiAgICBidW5kbGVJZDogb3B0cy5jaHJvbWVCdW5kbGVJZCxcbiAgICB1c2VTeXN0ZW1FeGVjdXRhYmxlOiBvcHRzLmNocm9tZWRyaXZlclVzZVN5c3RlbUV4ZWN1dGFibGUsXG4gICAgZGlzYWJsZUJ1aWxkQ2hlY2s6IG9wdHMuY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2ssXG4gICAgZGV0YWlscyxcbiAgICBpc0F1dG9kb3dubG9hZEVuYWJsZWQ6ICh0aGlzIHx8IHt9KS5pc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWRcbiAgICAgID8gdGhpcy5pc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQoKSA6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgLy8gbWFrZSBzdXJlIHRoZXJlIGFyZSBjaHJvbWVPcHRpb25zXG4gIG9wdHMuY2hyb21lT3B0aW9ucyA9IG9wdHMuY2hyb21lT3B0aW9ucyB8fCB7fTtcbiAgLy8gdHJ5IG91dCBhbnkgcHJlZml4ZWQgY2hyb21lT3B0aW9ucyxcbiAgLy8gYW5kIHN0cmlwIHRoZSBwcmVmaXhcbiAgZm9yIChjb25zdCBvcHQgb2YgXy5rZXlzKG9wdHMpKSB7XG4gICAgaWYgKG9wdC5lbmRzV2l0aCgnOmNocm9tZU9wdGlvbnMnKSkge1xuICAgICAgbG9nLndhcm4oYE1lcmdpbmcgJyR7b3B0fScgaW50byAnY2hyb21lT3B0aW9ucycuIFRoaXMgbWF5IGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3JgKTtcbiAgICAgIF8ubWVyZ2Uob3B0cy5jaHJvbWVPcHRpb25zLCBvcHRzW29wdF0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNhcHMgPSB3ZWJ2aWV3SGVscGVycy5jcmVhdGVDaHJvbWVkcml2ZXJDYXBzKG9wdHMsIGN1ckRldmljZUlkLCBkZXRhaWxzKTtcbiAgbG9nLmRlYnVnKGBCZWZvcmUgc3RhcnRpbmcgY2hyb21lZHJpdmVyLCBhbmRyb2lkUGFja2FnZSBpcyAnJHtjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZFBhY2thZ2V9J2ApO1xuICBhd2FpdCBjaHJvbWVkcml2ZXIuc3RhcnQoY2Fwcyk7XG4gIHJldHVybiBjaHJvbWVkcml2ZXI7XG59O1xuY29uc3Qgc2V0dXBOZXdDaHJvbWVkcml2ZXIgPSBoZWxwZXJzLnNldHVwTmV3Q2hyb21lZHJpdmVyO1xuXG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMsIHNldHVwTmV3Q2hyb21lZHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
@@ -295,6 +295,7 @@ helpers.getWebViewsMapping = async function getWebViewsMapping(adb, {
|
|
|
295
295
|
} = webviewMapping;
|
|
296
296
|
webviewMapping.webviewName = null;
|
|
297
297
|
let wvName = webview;
|
|
298
|
+
let process = undefined;
|
|
298
299
|
|
|
299
300
|
if (!androidDeviceSocket) {
|
|
300
301
|
const pkgMatch = WEBVIEW_PKG_PATTERN.exec(webview);
|
|
@@ -302,6 +303,11 @@ helpers.getWebViewsMapping = async function getWebViewsMapping(adb, {
|
|
|
302
303
|
try {
|
|
303
304
|
const pkg = pkgMatch ? pkgMatch[1] : await helpers.procFromWebview(adb, webview);
|
|
304
305
|
wvName = `${WEBVIEW_BASE}${pkg}`;
|
|
306
|
+
const pidMatch = WEBVIEW_PID_PATTERN.exec(webview);
|
|
307
|
+
process = {
|
|
308
|
+
name: pkg,
|
|
309
|
+
id: pidMatch ? pidMatch[1] : null
|
|
310
|
+
};
|
|
305
311
|
} catch (e) {
|
|
306
312
|
_logger.default.warn(e.message);
|
|
307
313
|
|
|
@@ -312,9 +318,10 @@ helpers.getWebViewsMapping = async function getWebViewsMapping(adb, {
|
|
|
312
318
|
webviewMapping.webviewName = wvName;
|
|
313
319
|
const key = toDetailsCacheKey(adb, wvName);
|
|
314
320
|
|
|
315
|
-
if (info) {
|
|
321
|
+
if (info || process) {
|
|
316
322
|
WEBVIEWS_DETAILS_CACHE.set(key, {
|
|
317
|
-
info
|
|
323
|
+
info,
|
|
324
|
+
process
|
|
318
325
|
});
|
|
319
326
|
} else if (WEBVIEWS_DETAILS_CACHE.has(key)) {
|
|
320
327
|
WEBVIEWS_DETAILS_CACHE.del(key);
|
|
@@ -329,8 +336,8 @@ helpers.getWebviewDetails = function getWebviewDetails(adb, webview) {
|
|
|
329
336
|
return WEBVIEWS_DETAILS_CACHE.get(key);
|
|
330
337
|
};
|
|
331
338
|
|
|
332
|
-
helpers.createChromedriverCaps = function createChromedriverCaps(opts, deviceId) {
|
|
333
|
-
var _opts$chromeOptions, _opts$chromeOptions2;
|
|
339
|
+
helpers.createChromedriverCaps = function createChromedriverCaps(opts, deviceId, webViewDetails) {
|
|
340
|
+
var _opts$chromeOptions, _opts$chromeOptions2, _webViewDetails$proce;
|
|
334
341
|
|
|
335
342
|
const caps = {
|
|
336
343
|
chromeOptions: {}
|
|
@@ -391,6 +398,10 @@ helpers.createChromedriverCaps = function createChromedriverCaps(opts, deviceId)
|
|
|
391
398
|
delete opts.chromeOptions.Arguments;
|
|
392
399
|
}
|
|
393
400
|
|
|
401
|
+
if (webViewDetails !== null && webViewDetails !== void 0 && (_webViewDetails$proce = webViewDetails.process) !== null && _webViewDetails$proce !== void 0 && _webViewDetails$proce.name) {
|
|
402
|
+
caps.chromeOptions.androidProcess = webViewDetails.process.name;
|
|
403
|
+
}
|
|
404
|
+
|
|
394
405
|
_logger.default.debug('Precalculated Chromedriver capabilities: ' + JSON.stringify(caps.chromeOptions, null, 2));
|
|
395
406
|
|
|
396
407
|
const protectedCapNames = [];
|
|
@@ -418,4 +429,4 @@ var _default = helpers;
|
|
|
418
429
|
exports.default = _default;require('source-map-support').install();
|
|
419
430
|
|
|
420
431
|
|
|
421
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi93ZWJ2aWV3LWhlbHBlcnMuanMiXSwibmFtZXMiOlsiTkFUSVZFX1dJTiIsIldFQlZJRVdfV0lOIiwiQ0hST01JVU1fV0lOIiwiV0VCVklFV19CQVNFIiwiV0VCVklFV19QSURfUEFUVEVSTiIsIlJlZ0V4cCIsIldFQlZJRVdfUEtHX1BBVFRFUk4iLCJERVZUT09MU19TT0NLRVRfUEFUVEVSTiIsIkNST1NTV0FMS19TT0NLRVRfUEFUVEVSTiIsIkNIUk9NSVVNX0RFVlRPT0xTX1NPQ0tFVCIsIkNIUk9NRV9QQUNLQUdFX05BTUUiLCJERVZUT09MU19QT1JUU19SQU5HRSIsIlBPUlRfQUxMT0NBVElPTl9HVUFSRCIsIkFzeW5jTG9jayIsIldFQlZJRVdTX0RFVEFJTFNfQ0FDSEUiLCJMUlUiLCJtYXgiLCJ1cGRhdGVBZ2VPbkdldCIsIkNEUF9SRVFfVElNRU9VVCIsImhlbHBlcnMiLCJ0b0RldGFpbHNDYWNoZUtleSIsImFkYiIsIndlYnZpZXciLCJjdXJEZXZpY2VJZCIsImdldFBvdGVudGlhbFdlYnZpZXdQcm9jcyIsIm91dCIsInNoZWxsIiwibmFtZXMiLCJhbGxNYXRjaGVzIiwibGluZSIsInNwbGl0IiwiZmxhZ3MiLCJzdCIsInNvY2tQYXRoIiwidHJpbSIsInN0YXJ0c1dpdGgiLCJwdXNoIiwidGVzdCIsIl8iLCJpc0VtcHR5IiwibG9nZ2VyIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwibGVuZ3RoIiwidXRpbCIsInBsdXJhbGl6ZSIsInVuaXEiLCJ3ZWJ2aWV3c0Zyb21Qcm9jcyIsImRldmljZVNvY2tldCIsInNvY2tldE5hbWVzIiwid2Vidmlld3MiLCJzb2NrZXROYW1lIiwicHJvYyIsInNvY2tldE5hbWVNYXRjaCIsImV4ZWMiLCJjcm9zc3dhbGtNYXRjaCIsImFsbG9jYXRlRGV2dG9vbHNQb3J0Iiwid2Vidmlld0RldnRvb2xzUG9ydCIsImFjcXVpcmUiLCJzdGFydFBvcnQiLCJlbmRQb3J0IiwibG9jYWxQb3J0IiwiZSIsIkVycm9yIiwicmVtb3RlUG9ydCIsInJlcGxhY2UiLCJhZGJFeGVjIiwiY29sbGVjdFdlYnZpZXdzRGV0YWlscyIsIndlYnZpZXdzTWFwcGluZyIsIm9wdHMiLCJlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcyIsImVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiIsImluZm8iLCJkZXRhaWxDb2xsZWN0b3JzIiwiaXRlbSIsImNkcEluZm8iLCJwYWdlcyIsImNkcExpc3QiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsIkIiLCJhbGwiLCJ1cmwiLCJ0aW1lb3V0IiwiZGF0YSIsInByb2NGcm9tV2VidmlldyIsInBpZE1hdGNoIiwicGlkIiwicGtnIiwiZ2V0TmFtZUJ5UGlkIiwiZ2V0V2Vidmlld3MiLCJhbmRyb2lkRGV2aWNlU29ja2V0IiwiZ2V0V2ViVmlld3NNYXBwaW5nIiwicmVzdWx0Iiwid2Vidmlld05hbWUiLCJ3ZWJ2aWV3TWFwcGluZyIsInd2TmFtZSIsInBrZ01hdGNoIiwid2FybiIsIm1lc3NhZ2UiLCJrZXkiLCJzZXQiLCJoYXMiLCJkZWwiLCJnZXRXZWJ2aWV3RGV0YWlscyIsImdldCIsImNyZWF0ZUNocm9tZWRyaXZlckNhcHMiLCJkZXZpY2VJZCIsImNhcHMiLCJjaHJvbWVPcHRpb25zIiwiYW5kcm9pZFBhY2thZ2UiLCJhcHBQYWNrYWdlIiwiaXNCb29sZWFuIiwiY2hyb21lVXNlUnVubmluZ0FwcCIsImFuZHJvaWRVc2VSdW5uaW5nQXBwIiwiY2hyb21lQW5kcm9pZFBhY2thZ2UiLCJjaHJvbWVBbmRyb2lkQWN0aXZpdHkiLCJhbmRyb2lkQWN0aXZpdHkiLCJjaHJvbWVBbmRyb2lkUHJvY2VzcyIsImFuZHJvaWRQcm9jZXNzIiwidG9Mb3dlciIsImJyb3dzZXJOYW1lIiwiYXBwQWN0aXZpdHkiLCJwYWdlTG9hZFN0cmF0ZWd5IiwiYW5kcm9pZERldmljZVNlcmlhbCIsImxvZ2dpbmdQcmVmcyIsImVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZyIsIm5ld1ByZWYiLCJwZXJmb3JtYW5jZSIsIk9iamVjdCIsImFzc2lnbiIsIkFyZ3VtZW50cyIsImFyZ3MiLCJwcm90ZWN0ZWRDYXBOYW1lcyIsIm9wdCIsInZhbCIsInRvUGFpcnMiLCJpc1VuZGVmaW5lZCIsIm9wdE5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsVUFBVSxHQUFHLFlBQW5COztBQUNBLE1BQU1DLFdBQVcsR0FBRyxTQUFwQjs7QUFDQSxNQUFNQyxZQUFZLEdBQUcsVUFBckI7O0FBQ0EsTUFBTUMsWUFBWSxHQUFJLEdBQUVGLFdBQVksR0FBcEM7O0FBQ0EsTUFBTUcsbUJBQW1CLEdBQUcsSUFBSUMsTUFBSixDQUFZLElBQUdGLFlBQWEsUUFBNUIsQ0FBNUI7QUFDQSxNQUFNRyxtQkFBbUIsR0FBRyxJQUFJRCxNQUFKLENBQVksSUFBR0YsWUFBYSxvQkFBNUIsQ0FBNUI7QUFDQSxNQUFNSSx1QkFBdUIsR0FBRyxtQ0FBaEM7QUFDQSxNQUFNQyx3QkFBd0IsR0FBRyw2QkFBakM7QUFDQSxNQUFNQyx3QkFBd0IsR0FBRyx3QkFBakM7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxvQkFBNUI7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxDQUFDLEtBQUQsRUFBUSxLQUFSLENBQTdCO0FBQ0EsTUFBTUMscUJBQXFCLEdBQUcsSUFBSUMsa0JBQUosRUFBOUI7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxJQUFJQyxpQkFBSixDQUFRO0FBQ3JDQyxFQUFBQSxHQUFHLEVBQUUsR0FEZ0M7QUFFckNDLEVBQUFBLGNBQWMsRUFBRTtBQUZxQixDQUFSLENBQS9CO0FBSUEsTUFBTUMsZUFBZSxHQUFHLElBQXhCO0FBRUEsTUFBTUMsT0FBTyxHQUFHLEVBQWhCOzs7QUFFQSxTQUFTQyxpQkFBVCxDQUE0QkMsR0FBNUIsRUFBaUNDLE9BQWpDLEVBQTBDO0FBQ3hDLFNBQVEsR0FBRUQsR0FBSCxhQUFHQSxHQUFILHVCQUFHQSxHQUFHLENBQUVFLFdBQVks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QUwsQ0FBZTJCLElBQUksQ0FBQ3VDLGFBQUwsQ0FBbUI2QixPQUFuQixDQUFmLENBQTRDLEdBQXpFO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPOUIsSUFBUDtBQUNELENBNUVEOztlQThFZXpGLE8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgTkFUSVZFX1dJTiA9ICdOQVRJVkVfQVBQJztcbmNvbnN0IFdFQlZJRVdfV0lOID0gJ1dFQlZJRVcnO1xuY29uc3QgQ0hST01JVU1fV0lOID0gJ0NIUk9NSVVNJztcbmNvbnN0IFdFQlZJRVdfQkFTRSA9IGAke1dFQlZJRVdfV0lOfV9gO1xuY29uc3QgV0VCVklFV19QSURfUEFUVEVSTiA9IG5ldyBSZWdFeHAoYF4ke1dFQlZJRVdfQkFTRX0oXFxcXGQrKWApO1xuY29uc3QgV0VCVklFV19QS0dfUEFUVEVSTiA9IG5ldyBSZWdFeHAoYF4ke1dFQlZJRVdfQkFTRX0oW15cXFxcZFxcXFxzXVtcXFxcdy5dKilgKTtcbmNvbnN0IERFVlRPT0xTX1NPQ0tFVF9QQVRURVJOID0gL0BbXFx3Ll0rX2RldnRvb2xzX3JlbW90ZV8/KFxcZCspP1xcYi87XG5jb25zdCBDUk9TU1dBTEtfU09DS0VUX1BBVFRFUk4gPSAvQChbXFx3Ll0rKV9kZXZ0b29sc19yZW1vdGVcXGIvO1xuY29uc3QgQ0hST01JVU1fREVWVE9PTFNfU09DS0VUID0gJ2Nocm9tZV9kZXZ0b29sc19yZW1vdGUnO1xuY29uc3QgQ0hST01FX1BBQ0tBR0VfTkFNRSA9ICdjb20uYW5kcm9pZC5jaHJvbWUnO1xuY29uc3QgREVWVE9PTFNfUE9SVFNfUkFOR0UgPSBbMTA5MDAsIDExMDAwXTtcbmNvbnN0IFBPUlRfQUxMT0NBVElPTl9HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IFdFQlZJRVdTX0RFVEFJTFNfQ0FDSEUgPSBuZXcgTFJVKHtcbiAgbWF4OiAxMDAsXG4gIHVwZGF0ZUFnZU9uR2V0OiB0cnVlLFxufSk7XG5jb25zdCBDRFBfUkVRX1RJTUVPVVQgPSAyMDAwOyAvLyBtc1xuXG5jb25zdCBoZWxwZXJzID0ge307XG5cbmZ1bmN0aW9uIHRvRGV0YWlsc0NhY2hlS2V5IChhZGIsIHdlYnZpZXcpIHtcbiAgcmV0dXJuIGAke2FkYj8uY3VyRGV2aWNlSWR9OiR7d2Vidmlld31gO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBhIGxpc3Qgb2YgYW5kcm9pZCBzeXN0ZW0gcHJvY2Vzc2VzIGFuZCByZXR1cm5zIG9uZXNcbiAqIHRoYXQgbG9vayBsaWtlIHdlYnZpZXdzXG4gKiBTZWUgaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL2Nocm9tZS9icm93c2VyL2RldnRvb2xzL2RldmljZS9hbmRyb2lkX2RldmljZV9pbmZvX3F1ZXJ5LmNjXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGFkYiAtIGFuIEFEQiBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fSAtIGEgbGlzdCBvZiBtYXRjaGluZyB3ZWJ2aWV3IHNvY2tldCBuYW1lcyAoaW5jbHVkaW5nIHRoZSBsZWFkaW5nICdAJylcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UG90ZW50aWFsV2Vidmlld1Byb2NzIChhZGIpIHtcbiAgY29uc3Qgb3V0ID0gYXdhaXQgYWRiLnNoZWxsKFsnY2F0JywgJy9wcm9jL25ldC91bml4J10pO1xuICBjb25zdCBuYW1lcyA9IFtdO1xuICBjb25zdCBhbGxNYXRjaGVzID0gW107XG4gIGZvciAoY29uc3QgbGluZSBvZiBvdXQuc3BsaXQoJ1xcbicpKSB7XG4gICAgLy8gTnVtIFJlZkNvdW50IFByb3RvY29sIEZsYWdzIFR5cGUgU3QgSW5vZGUgUGF0aFxuICAgIGNvbnN0IFssLCwgZmxhZ3MsLCBzdCwsIHNvY2tQYXRoXSA9IGxpbmUudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG4gICAgaWYgKCFzb2NrUGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChzb2NrUGF0aC5zdGFydHNXaXRoKCdAJykpIHtcbiAgICAgIGFsbE1hdGNoZXMucHVzaChsaW5lLnRyaW0oKSk7XG4gICAgfVxuICAgIGlmIChmbGFncyAhPT0gJzAwMDEwMDAwJyB8fCBzdCAhPT0gJzAxJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICghREVWVE9PTFNfU09DS0VUX1BBVFRFUk4udGVzdChzb2NrUGF0aCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG5hbWVzLnB1c2goc29ja1BhdGgpO1xuICB9XG4gIGlmIChfLmlzRW1wdHkobmFtZXMpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdGb3VuZCBubyBhY3RpdmUgZGV2dG9vbHMgc29ja2V0cycpO1xuICAgIGlmICghXy5pc0VtcHR5KGFsbE1hdGNoZXMpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYE90aGVyIHNvY2tldHMgYXJlOiAke0pTT04uc3RyaW5naWZ5KGFsbE1hdGNoZXMsIG51bGwsIDIpfWApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIuZGVidWcoYFBhcnNlZCAke25hbWVzLmxlbmd0aH0gYWN0aXZlIGRldnRvb2xzICR7dXRpbC5wbHVyYWxpemUoJ3NvY2tldCcsIG5hbWVzLmxlbmd0aCwgZmFsc2UpfTogYCArXG4gICAgICBKU09OLnN0cmluZ2lmeShuYW1lcykpO1xuICB9XG4gIC8vIHNvbWV0aW1lcyB0aGUgd2VidmlldyBwcm9jZXNzIHNob3dzIHVwIG11bHRpcGxlIHRpbWVzIHBlciBhcHBcbiAgcmV0dXJuIF8udW5pcShuYW1lcyk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gV2Vidmlld1Byb2NcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcm9jIC0gVGhlIHdlYnZpZXcgcHJvY2VzcyBuYW1lIChhcyByZXR1cm5lZCBieVxuICogZ2V0UG90ZW50aWFsV2Vidmlld1Byb2NzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gd2VidmlldyAtIFRoZSBhY3R1YWwgd2VidmlldyBjb250ZXh0IG5hbWVcbiAqL1xuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyBhIGxpc3Qgb2Ygc3lzdGVtIHByb2Nlc3NlcyB0aGF0IGxvb2sgbGlrZSB3ZWJ2aWV3cyxcbiAqIGFuZCByZXR1cm5zIHRoZW0gYWxvbmcgd2l0aCB0aGUgd2VidmlldyBjb250ZXh0IG5hbWUgYXBwcm9wcmlhdGUgZm9yIGl0LlxuICogSWYgd2UgcGFzcyBpbiBhIGRldmljZVNvY2tldCwgd2Ugb25seSBhdHRlbXB0IHRvIGZpbmQgd2Vidmlld3Mgd2hpY2ggbWF0Y2hcbiAqIHRoYXQgc29ja2V0IG5hbWUgKHRoaXMgaXMgZm9yIGFwcHMgd2hpY2ggZW1iZWQgQ2hyb21pdW0sIHdoaWNoIGlzbid0IHRoZVxuICogc2FtZSBhcyBjaHJvbWUtYmFja2VkIHdlYnZpZXdzKS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gYWRiIC0gYW4gQURCIGluc3RhbmNlXG4gKiBAcGFyYW0gez9zdHJpbmd9IGRldmljZVNvY2tldCAtIHRoZSBleHBsaWN0bHktbmFtZWQgZGV2aWNlIHNvY2tldCB0byB1c2VcbiAqXG4gKiBAcmV0dXJuIHtBcnJheS48V2Vidmlld1Byb2M+fVxuICovXG5hc3luYyBmdW5jdGlvbiB3ZWJ2aWV3c0Zyb21Qcm9jcyAoYWRiLCBkZXZpY2VTb2NrZXQgPSBudWxsKSB7XG4gIGNvbnN0IHNvY2tldE5hbWVzID0gYXdhaXQgZ2V0UG90ZW50aWFsV2Vidmlld1Byb2NzKGFkYik7XG4gIGNvbnN0IHdlYnZpZXdzID0gW107XG4gIGZvciAoY29uc3Qgc29ja2V0TmFtZSBvZiBzb2NrZXROYW1lcykge1xuICAgIGlmIChkZXZpY2VTb2NrZXQgPT09IENIUk9NSVVNX0RFVlRPT0xTX1NPQ0tFVCAmJiBzb2NrZXROYW1lID09PSBgQCR7ZGV2aWNlU29ja2V0fWApIHtcbiAgICAgIHdlYnZpZXdzLnB1c2goe1xuICAgICAgICBwcm9jOiBzb2NrZXROYW1lLFxuICAgICAgICB3ZWJ2aWV3OiBDSFJPTUlVTV9XSU4sXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHNvY2tldE5hbWVNYXRjaCA9IERFVlRPT0xTX1NPQ0tFVF9QQVRURVJOLmV4ZWMoc29ja2V0TmFtZSk7XG4gICAgaWYgKCFzb2NrZXROYW1lTWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBjcm9zc3dhbGtNYXRjaCA9IENST1NTV0FMS19TT0NLRVRfUEFUVEVSTi5leGVjKHNvY2tldE5hbWUpO1xuICAgIGlmICghc29ja2V0TmFtZU1hdGNoWzFdICYmICFjcm9zc3dhbGtNYXRjaCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGRldmljZVNvY2tldCAmJiBzb2NrZXROYW1lID09PSBgQCR7ZGV2aWNlU29ja2V0fWAgfHwgIWRldmljZVNvY2tldCkge1xuICAgICAgd2Vidmlld3MucHVzaCh7XG4gICAgICAgIHByb2M6IHNvY2tldE5hbWUsXG4gICAgICAgIHdlYnZpZXc6IHNvY2tldE5hbWVNYXRjaFsxXVxuICAgICAgICAgID8gYCR7V0VCVklFV19CQVNFfSR7c29ja2V0TmFtZU1hdGNoWzFdfWBcbiAgICAgICAgICA6IGAke1dFQlZJRVdfQkFTRX0ke2Nyb3Nzd2Fsa01hdGNoWzFdfWAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHdlYnZpZXdzO1xufVxuXG4vKipcbiAqIEFsbG9jYXRlcyBhIGxvY2FsIHBvcnQgZm9yIGRldnRvb2xzIGNvbW11bmljYXRpb25cbiAqXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEFEQiBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IHNvY2tldE5hbWUgVGhlIHJlbW90ZSBVbml4IHNvY2tldCBuYW1lXG4gKiBAcGFyYW0gez9zdHJpbmd8bnVtYmVyfSB3ZWJ2aWV3RGV2dG9vbHNQb3J0IFRoZSBsb2NhbCBwb3J0IG51bWJlciBvciBudWxsIHRvIGFwcGx5XG4gKiBhdXRvZGV0ZWN0aW9uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbG9jYWwgcG9ydCBudW1iZXIgaWYgdGhlIHJlbW90ZSBzb2NrZXQgaGFzIGJlZW4gZm9yd2FyZGVkXG4gKiBzdWNjZXNzZnVsbHkgb3IgYG51bGxgIG90aGVyd2lzZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBhbGxvY2F0aW5nIHRoZSBsb2NhbCBwb3J0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFsbG9jYXRlRGV2dG9vbHNQb3J0IChhZGIsIHNvY2tldE5hbWUsIHdlYnZpZXdEZXZ0b29sc1BvcnQgPSBudWxsKSB7XG4gIHJldHVybiBhd2FpdCBQT1JUX0FMTE9DQVRJT05fR1VBUkQuYWNxdWlyZSgnRGV2dG9vbHNQb3J0QWxsb2NhdG9yJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHN0YXJ0UG9ydCA9IHdlYnZpZXdEZXZ0b29sc1BvcnQgfHwgREVWVE9PTFNfUE9SVFNfUkFOR0VbMF07XG4gICAgY29uc3QgZW5kUG9ydCA9IHN0YXJ0UG9ydCArIERFVlRPT0xTX1BPUlRTX1JBTkdFWzFdIC0gREVWVE9PTFNfUE9SVFNfUkFOR0VbMF07XG4gICAgbGV0IGxvY2FsUG9ydDtcbiAgICB0cnkge1xuICAgICAgbG9jYWxQb3J0ID0gYXdhaXQgZmluZEFQb3J0Tm90SW5Vc2Uoc3RhcnRQb3J0LCBlbmRQb3J0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIGFueSBmcmVlIHBvcnQgdG8gZm9yd2FyZCB0aGUgZGV2dG9vbHMgc29ja2V0IGAgK1xuICAgICAgICBgaW4gcmFuZ2UgJHtzdGFydFBvcnR9Li4ke2VuZFBvcnR9fS4gWW91IGNhbiBzZXQgdGhlIHN0YXJ0aW5nIHBvcnQgbnVtYmVyIGAgK1xuICAgICAgICBgbWFudWFsbHkgYnkgcHJvdmlkaW5nIHRoZSAnd2Vidmlld0RldnRvb2xzUG9ydCcgY2FwYWJpbGl0eWApO1xuICAgIH1cbiAgICAvLyBzb2NrZXQgbmFtZXMgY29tZSB3aXRoICdAJywgYnV0IHRoaXMgc2hvdWxkIG5vdCBiZSBhIHBhcnQgb2YgdGhlIGFic3RyYWN0XG4gICAgLy8gcmVtb3RlIHBvcnQsIHNvIHJlbW92ZSBpdFxuICAgIGNvbnN0IHJlbW90ZVBvcnQgPSBzb2NrZXROYW1lLnJlcGxhY2UoL15ALywgJycpO1xuICAgIGF3YWl0IGFkYi5hZGJFeGVjKFsnZm9yd2FyZCcsIGB0Y3A6JHtsb2NhbFBvcnR9YCwgYGxvY2FsYWJzdHJhY3Q6JHtyZW1vdGVQb3J0fWBdKTtcbiAgICByZXR1cm4gbG9jYWxQb3J0O1xuICB9KTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBXZWJ2aWV3UHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcm9jIFRoZSBuYW1lIG9mIHRoZSBEZXZ0b29scyBVbml4IHNvY2tldFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHdlYnZpZXcgVGhlIHdlYiB2aWV3IGFsaWFzLiBMb29rcyBsaWtlIGBXRUJWSUVXX2BcbiAqIHByZWZpeCBwbHVzIFBJRCBvciBwYWNrYWdlIG5hbWVcbiAqIEBwcm9wZXJ0eSB7P09iamVjdH0gaW5mbyBXZWJ2aWV3IGluZm9ybWF0aW9uIGFzIGl0IGlzIHJldHJpZXZlZCBieVxuICogL2pzb24vdmVyc2lvbiBDRFAgZW5kcG9pbnRcbiAqIEBwcm9wZXJ0eSB7P0FycmF5PE9iamVjdD59IHBhZ2VzIFdlYnZpZXcgcGFnZXMgbGlzdCBhcyBpdCBpcyByZXRyaWV2ZWQgYnlcbiAqIC9qc29uL2xpc3QgQ0RQIGVuZHBvaW50XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZXRhaWxDb2xsZWN0aW9uT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfG51bWJlcn0gd2Vidmlld0RldnRvb2xzUG9ydCBUaGUgc3RhcnRpbmcgcG9ydCB0byB1c2UgZm9yIHdlYnZpZXcgcGFnZVxuICogcHJlc2VuY2UgY2hlY2sgKGlmIG5vdCB0aGUgZGVmYXVsdCBvZiA5MjIyKS5cbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IGVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzIFdoZXRoZXIgdG8gY2hlY2sgZm9yIHdlYnZpZXdcbiAqIHBhZ2VzIHByZXNlbmNlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiBXaGV0aGVyIHRvIGNvbGxlY3RcbiAqIHdlYiB2aWV3IGRldGFpbHMgYW5kIHNlbmQgdGhlbSB0byBDaHJvbWVkcml2ZXIgY29uc3RydWN0b3IsIHNvIGl0IGNvdWxkXG4gKiBzZWxlY3QgYSBiaW5hcnkgbW9yZSBwcmVjaXNlbHkgYmFzZWQgb24gdGhpcyBpbmZvLlxuICovXG5cbi8qKlxuICogVGhpcyBpcyBhIHdyYXBwZXIgZm9yIENocm9tZSBEZWJ1Z2dlciBQcm90b2NvbCBkYXRhIGNvbGxlY3Rpb24uXG4gKiBObyBlcnJvciBpcyB0aHJvd24gaWYgQ0RQIHJlcXVlc3QgZmFpbHMgLSBpbiBzdWNoIGNhc2Ugbm8gZGF0YSB3aWxsIGJlXG4gKiByZWNvcmRlZCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGB3ZWJ2aWV3c01hcHBpbmdgIGl0ZW0uXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYiBUaGUgQURCIGluc3RhbmNlXG4gKiBAcGFyYW0ge0FycmF5PFdlYnZpZXdQcm9wcz59IHdlYnZpZXdzTWFwcGluZyBUaGUgY3VycmVudCB3ZWJ2aWV3cyBtYXBwaW5nXG4gKiAhISEgRWFjaCBpdGVtIG9mIHRoaXMgYXJyYXkgZ2V0cyBtdXRhdGVkIChgaW5mb2AvYHBhZ2VzYCBwcm9wZXJ0aWVzIGdldCBhZGRlZFxuICogYmFzZWQgb24gdGhlIHByb3ZpZGVkIGBvcHRzYCkgaWYgdGhlIHJlcXVlc3RlZCBkZXRhaWxzIGhhdmUgYmVlblxuICogc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBmb3IgaXQgISEhXG4gKiBAcGFyYW0ge0RldGFpbENvbGxlY3Rpb25PcHRpb25zfSBvcHRzIElmIGJvdGggYGVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzYCBhbmRcbiAqIGBlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb25gIHByb3BlcnRpZXMgYXJlIGZhbHN5IHRoZW4gbm8gZGV0YWlscyBjb2xsZWN0aW9uXG4gKiBpcyBwZXJmb3JtZWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29sbGVjdFdlYnZpZXdzRGV0YWlscyAoYWRiLCB3ZWJ2aWV3c01hcHBpbmcsIG9wdHMgPSB7fSkge1xuICBpZiAoXy5pc0VtcHR5KHdlYnZpZXdzTWFwcGluZykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7XG4gICAgd2Vidmlld0RldnRvb2xzUG9ydCA9IG51bGwsXG4gICAgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMgPSBudWxsLFxuICAgIGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiA9IG51bGwsXG4gIH0gPSBvcHRzO1xuXG4gIGlmICghZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMpIHtcbiAgICBsb2dnZXIuaW5mbyhgTm90IGNoZWNraW5nIHdoZXRoZXIgd2Vidmlld3MgaGF2ZSBhY3RpdmUgcGFnZXM7IHVzZSB0aGUgYCArXG4gICAgICBgJ2Vuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzJyBjYXAgdG8gdHVybiB0aGlzIGNoZWNrIG9uYCk7XG4gIH1cblxuICBpZiAoIWVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbikge1xuICAgIGxvZ2dlci5pbmZvKGBOb3QgY29sbGVjdGluZyB3ZWIgdmlldyBkZXRhaWxzLiBEZXRhaWxzIGNvbGxlY3Rpb24gbWlnaHQgaGVscCBgICtcbiAgICAgIGB0byBtYWtlIENocm9tZWRyaXZlciBpbml0aWFsaXphdGlvbiBtb3JlIHByZWNpc2UuIFVzZSB0aGUgJ2VuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbicgYCArXG4gICAgICBgY2FwIHRvIHR1cm4gaXQgb25gKTtcbiAgfVxuXG4gIGlmICghZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMgJiYgIWVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIENvbm5lY3QgdG8gZWFjaCBkZXZ0b29scyBzb2NrZXQgYW5kIHJldHJpZXZlIHdlYiB2aWV3IGRldGFpbHNcbiAgbG9nZ2VyLmRlYnVnKGBDb2xsZWN0aW5nIENEUCBkYXRhIG9mICR7dXRpbC5wbHVyYWxpemUoJ3dlYnZpZXcnLCB3ZWJ2aWV3c01hcHBpbmcubGVuZ3RoLCB0cnVlKX1gKTtcbiAgY29uc3QgZGV0YWlsQ29sbGVjdG9ycyA9IFtdO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2Vidmlld3NNYXBwaW5nKSB7XG4gICAgZGV0YWlsQ29sbGVjdG9ycy5wdXNoKChhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgbG9jYWxQb3J0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9jYWxQb3J0ID0gYXdhaXQgYWxsb2NhdGVEZXZ0b29sc1BvcnQoYWRiLCBpdGVtLnByb2MsIHdlYnZpZXdEZXZ0b29sc1BvcnQpO1xuICAgICAgICBpZiAoZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgaXRlbS5pbmZvID0gYXdhaXQgY2RwSW5mbyhsb2NhbFBvcnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcykge1xuICAgICAgICAgIGl0ZW0ucGFnZXMgPSBhd2FpdCBjZHBMaXN0KGxvY2FsUG9ydCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGxvY2FsUG9ydCkge1xuICAgICAgICAgIGF3YWl0IGFkYi5yZW1vdmVQb3J0Rm9yd2FyZChsb2NhbFBvcnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoKSk7XG4gIH1cbiAgYXdhaXQgQi5hbGwoZGV0YWlsQ29sbGVjdG9ycyk7XG4gIGxvZ2dlci5kZWJ1ZyhgQ0RQIGRhdGEgY29sbGVjdGlvbiBjb21wbGV0ZWRgKTtcbn1cblxuLy8gaHR0cHM6Ly9jaHJvbWVkZXZ0b29scy5naXRodWIuaW8vZGV2dG9vbHMtcHJvdG9jb2wvXG5hc3luYyBmdW5jdGlvbiBjZHBMaXN0IChsb2NhbFBvcnQpIHtcbiAgcmV0dXJuIChhd2FpdCBheGlvcyh7XG4gICAgdXJsOiBgaHR0cDovLzEyNy4wLjAuMToke2xvY2FsUG9ydH0vanNvbi9saXN0YCxcbiAgICB0aW1lb3V0OiBDRFBfUkVRX1RJTUVPVVQsXG4gIH0pKS5kYXRhO1xufVxuXG4vLyBodHRwczovL2Nocm9tZWRldnRvb2xzLmdpdGh1Yi5pby9kZXZ0b29scy1wcm90b2NvbC9cbmFzeW5jIGZ1bmN0aW9uIGNkcEluZm8gKGxvY2FsUG9ydCkge1xuICByZXR1cm4gKGF3YWl0IGF4aW9zKHtcbiAgICB1cmw6IGBodHRwOi8vMTI3LjAuMC4xOiR7bG9jYWxQb3J0fS9qc29uL3ZlcnNpb25gLFxuICAgIHRpbWVvdXQ6IENEUF9SRVFfVElNRU9VVCxcbiAgfSkpLmRhdGE7XG59XG5cbi8qKlxuICogVGFrZSBhIHdlYnZpZXcgbmFtZSBsaWtlIFdFQlZJRVdfNDI5NiBhbmQgdXNlICdhZGIgc2hlbGwgcHMnIHRvIGZpZ3VyZSBvdXRcbiAqIHdoaWNoIGFwcCBwYWNrYWdlIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHdlYnZpZXcuIE9uZSBvZiB0aGUgcmVhc29ucyB3ZVxuICogd2FudCB0byBkbyB0aGlzIGlzIHRvIG1ha2Ugc3VyZSB3ZSdyZSBsaXN0aW5nIHdlYnZpZXdzIGZvciB0aGUgYWN0dWFsIEFVVCxcbiAqIG5vdCBzb21lIG90aGVyIHJ1bm5pbmcgYXBwXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGFkYiAtIGFuIEFEQiBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IHdlYnZpZXcgLSBhIHdlYnZpZXcgcHJvY2VzcyBuYW1lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgcGFja2FnZSBuYW1lIG9mIHRoZSBhcHAgcnVubmluZyB0aGUgd2Vidmlld1xuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgcmV0cmlldmluZyB0aGUgcHJvY2VzcyBuYW1lXG4gKi9cbmhlbHBlcnMucHJvY0Zyb21XZWJ2aWV3ID0gYXN5bmMgZnVuY3Rpb24gcHJvY0Zyb21XZWJ2aWV3IChhZGIsIHdlYnZpZXcpIHtcbiAgY29uc3QgcGlkTWF0Y2ggPSBXRUJWSUVXX1BJRF9QQVRURVJOLmV4ZWMod2Vidmlldyk7XG4gIGlmICghcGlkTWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIFBJRCBmb3Igd2VidmlldyAnJHt3ZWJ2aWV3fSdgKTtcbiAgfVxuXG4gIGNvbnN0IHBpZCA9IHBpZE1hdGNoWzFdO1xuICBsb2dnZXIuZGVidWcoYCR7d2Vidmlld30gbWFwcGVkIHRvIHBpZCAke3BpZH1gKTtcbiAgbG9nZ2VyLmRlYnVnKGBHZXR0aW5nIHByb2Nlc3MgbmFtZSBmb3Igd2VidmlldyAnJHt3ZWJ2aWV3fSdgKTtcbiAgY29uc3QgcGtnID0gYXdhaXQgYWRiLmdldE5hbWVCeVBpZChwaWQpO1xuICBsb2dnZXIuZGVidWcoYEdvdCBwcm9jZXNzIG5hbWU6ICcke3BrZ30nYCk7XG4gIHJldHVybiBwa2c7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB3ZWJ2aWV3IG5hbWVzIGZvciBnZXRDb250ZXh0c1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBhZGIgLSBhbiBBREIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7R2V0V2Vidmlld09wdHN9IG9wdHMgU2VlIG5vdGUgb24gZ2V0V2ViVmlld3NNYXBwaW5nXG4gKlxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59IC0gYSBsaXN0IG9mIHdlYnZpZXcgbmFtZXNcbiAqL1xuaGVscGVycy5nZXRXZWJ2aWV3cyA9IGFzeW5jIGZ1bmN0aW9uIGdldFdlYnZpZXdzIChhZGIsIHtcbiAgYW5kcm9pZERldmljZVNvY2tldCA9IG51bGwsXG4gIGVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzID0gdHJ1ZSxcbiAgd2Vidmlld0RldnRvb2xzUG9ydCA9IG51bGwsXG4gIGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiA9IG51bGwsXG59ID0ge30pIHtcbiAgY29uc3Qgd2Vidmlld3NNYXBwaW5nID0gYXdhaXQgdGhpcy5nZXRXZWJWaWV3c01hcHBpbmcoYWRiLCB7XG4gICAgYW5kcm9pZERldmljZVNvY2tldCxcbiAgICBlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcyxcbiAgICB3ZWJ2aWV3RGV2dG9vbHNQb3J0LFxuICAgIGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvblxuICB9KTtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAoY29uc3Qge3dlYnZpZXcsIHBhZ2VzLCBwcm9jLCB3ZWJ2aWV3TmFtZX0gb2Ygd2Vidmlld3NNYXBwaW5nKSB7XG4gICAgaWYgKGVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzICYmIHBhZ2VzPy5sZW5ndGggPT09IDApIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBTa2lwcGluZyB0aGUgd2VidmlldyAnJHt3ZWJ2aWV3fScgYXQgJyR7cHJvY30nIGAgK1xuICAgICAgICBgc2luY2UgaXQgaGFzIHJlcG9ydGVkIGhhdmluZyB6ZXJvIHBhZ2VzYCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHdlYnZpZXdOYW1lKSB7XG4gICAgICByZXN1bHQucHVzaCh3ZWJ2aWV3TmFtZSk7XG4gICAgfVxuICB9XG4gIGxvZ2dlci5kZWJ1ZyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnd2VidmlldycsIHJlc3VsdC5sZW5ndGgsIHRydWUpfTogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBHZXRXZWJ2aWV3c09wdHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhbmRyb2lkRGV2aWNlU29ja2V0IFtudWxsXSAtIGRldmljZSBzb2NrZXQgbmFtZVxuICogQHByb3BlcnR5IHtib29sZWFufSBlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcyBbdHJ1ZV0gLSB3aGV0aGVyIHRvIGNoZWNrIGZvciB3ZWJ2aWV3XG4gKiBwYWdlIHByZXNlbmNlXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2Vidmlld0RldnRvb2xzUG9ydCBbOTIyMl0gLSBwb3J0IHRvIHVzZSBmb3Igd2VidmlldyBwYWdlXG4gKiBwcmVzZW5jZSBjaGVjay5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uIFtmYWxzZV0gLSB3aGV0aGVyIHRvIGNvbGxlY3RcbiAqIHdlYiB2aWV3IGRldGFpbHMgYW5kIHNlbmQgdGhlbSB0byBDaHJvbWVkcml2ZXIgY29uc3RydWN0b3IsIHNvIGl0IGNvdWxkXG4gKiBzZWxlY3QgYSBiaW5hcnkgbW9yZSBwcmVjaXNlbHkgYmFzZWQgb24gdGhpcyBpbmZvLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gV2Vidmlld3NNYXBwaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvYyBTZWUgbm90ZSBvbiBXZWJ2aWV3UHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3ZWJ2aWV3IFNlZSBub3RlIG9uIFdlYnZpZXdQcm9wc1xuICogQHByb3BlcnR5IHs/T2JqZWN0fSBpbmZvIFNlZSBub3RlIG9uIFdlYnZpZXdQcm9wc1xuICogQHByb3BlcnR5IHs/QXJyYXk8T2JqZWN0Pn0gcGFnZXMgU2VlIG5vdGUgb24gV2Vidmlld1Byb3BzXG4gKiBAcHJvcGVyeSB7P3N0cmluZ30gd2Vidmlld05hbWUgQW4gYWN0dWFsIHdlYnZpZXcgbmFtZSBmb3Igc3dpdGNoaW5nIGNvbnRleHRcbiAqL1xuXG4vKipcbiAqIEdldCBhIGxpc3Qgb2YgYXZhaWxhYmxlIHdlYnZpZXdzIG1hcHBpbmcgYnkgaW50cm9zcGVjdGluZyBwcm9jZXNzZXMgd2l0aCBhZGIsXG4gKiB3aGVyZSB3ZWJ2aWV3cyBhcmUgbGlzdGVkLiBJdCdzIHBvc3NpYmxlIHRvIHBhc3MgaW4gYSAnZGV2aWNlU29ja2V0JyBhcmcsIHdoaWNoXG4gKiBsaW1pdHMgdGhlIHdlYnZpZXcgcG9zc2liaWxpdGllcyB0byB0aGUgb25lIHJ1bm5pbmcgb24gdGhlIENocm9taXVtIGRldnRvb2xzXG4gKiBzb2NrZXQgd2UncmUgaW50ZXJlc3RlZCBpbiAoc2VlIG5vdGUgb24gd2Vidmlld3NGcm9tUHJvY3MpLiBXZSBjYW4gYWxzb1xuICogZGlyZWN0IHRoaXMgbWV0aG9kIHRvIHZlcmlmeSB3aGV0aGVyIGEgcGFydGljdWxhciB3ZWJ2aWV3IHByb2Nlc3MgYWN0dWFsbHlcbiAqIGhhcyBhbnkgcGFnZXMgKGlmIGEgcHJvY2VzcyBleGlzdHMgYnV0IG5vIHBhZ2VzIGFyZSBmb3VuZCwgQ2hyb21lZHJpdmVyIHdpbGxcbiAqIG5vdCBhY3R1YWxseSBiZSBhYmxlIHRvIGNvbm5lY3QgdG8gaXQsIHNvIHRoaXMgc2VydmVzIGFzIGEgZ3VhcmQgZm9yIHRoYXRcbiAqIHN0cmFuZ2UgZmFpbHVyZSBtb2RlKS4gVGhlIHN0cmF0ZWd5IGZvciBjaGVja2luZyB3aGV0aGVyIGFueSBwYWdlcyBhcmVcbiAqIGFjdGl2ZSBpbnZvbHZlcyBzZW5kaW5nIGEgcmVxdWVzdCB0byB0aGUgcmVtb3RlIGRlYnVnIHNlcnZlciBvbiB0aGUgZGV2aWNlLFxuICogaGVuY2UgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5IHRoZSBwb3J0IG9uIHRoZSBob3N0IG1hY2hpbmUgd2hpY2hcbiAqIHNob3VsZCBiZSB1c2VkIGZvciB0aGlzIGNvbW11bmljYXRpb24uXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGFkYiAtIGFuIEFEQiBpbnN0YW5jZVxuICogQHBhcmFtIHtHZXRXZWJ2aWV3T3B0c30gb3B0c1xuICpcbiAqIEByZXR1cm4ge0FycmF5PFdlYnZpZXdzTWFwcGluZz59IHdlYnZpZXdzTWFwcGluZ1xuICovXG5oZWxwZXJzLmdldFdlYlZpZXdzTWFwcGluZyA9IGFzeW5jIGZ1bmN0aW9uIGdldFdlYlZpZXdzTWFwcGluZyAoYWRiLCB7XG4gIGFuZHJvaWREZXZpY2VTb2NrZXQgPSBudWxsLFxuICBlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcyA9IHRydWUsXG4gIHdlYnZpZXdEZXZ0b29sc1BvcnQgPSBudWxsLFxuICBlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24gPSBudWxsLFxufSA9IHt9KSB7XG4gIGxvZ2dlci5kZWJ1ZygnR2V0dGluZyBhIGxpc3Qgb2YgYXZhaWxhYmxlIHdlYnZpZXdzJyk7XG4gIGNvbnN0IHdlYnZpZXdzTWFwcGluZyA9IGF3YWl0IHdlYnZpZXdzRnJvbVByb2NzKGFkYiwgYW5kcm9pZERldmljZVNvY2tldCk7XG5cbiAgYXdhaXQgY29sbGVjdFdlYnZpZXdzRGV0YWlscyhhZGIsIHdlYnZpZXdzTWFwcGluZywge1xuICAgIGVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzLFxuICAgIGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbixcbiAgICB3ZWJ2aWV3RGV2dG9vbHNQb3J0LFxuICB9KTtcblxuICBmb3IgKGNvbnN0IHdlYnZpZXdNYXBwaW5nIG9mIHdlYnZpZXdzTWFwcGluZykge1xuICAgIGNvbnN0IHt3ZWJ2aWV3LCBpbmZvfSA9IHdlYnZpZXdNYXBwaW5nO1xuICAgIHdlYnZpZXdNYXBwaW5nLndlYnZpZXdOYW1lID0gbnVsbDtcblxuICAgIGxldCB3dk5hbWUgPSB3ZWJ2aWV3O1xuICAgIGlmICghYW5kcm9pZERldmljZVNvY2tldCkge1xuICAgICAgY29uc3QgcGtnTWF0Y2ggPSBXRUJWSUVXX1BLR19QQVRURVJOLmV4ZWMod2Vidmlldyk7XG4gICAgICB0cnkge1xuICAgICAgICAvLyB3ZWIgdmlldyBuYW1lIGNvdWxkIGVpdGhlciBiZSBzdWZmaXhlZCB3aXRoIFBJRCBvciB0aGUgcGFja2FnZSBuYW1lXG4gICAgICAgIC8vIHBhY2thZ2UgbmFtZXMgY291bGQgbm90IHN0YXJ0IHdpdGggYSBkaWdpdFxuICAgICAgICBjb25zdCBwa2cgPSBwa2dNYXRjaCA/IHBrZ01hdGNoWzFdIDogYXdhaXQgaGVscGVycy5wcm9jRnJvbVdlYnZpZXcoYWRiLCB3ZWJ2aWV3KTtcbiAgICAgICAgd3ZOYW1lID0gYCR7V0VCVklFV19CQVNFfSR7cGtnfWA7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGUubWVzc2FnZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHdlYnZpZXdNYXBwaW5nLndlYnZpZXdOYW1lID0gd3ZOYW1lO1xuICAgIGNvbnN0IGtleSA9IHRvRGV0YWlsc0NhY2hlS2V5KGFkYiwgd3ZOYW1lKTtcbiAgICBpZiAoaW5mbykge1xuICAgICAgV0VCVklFV1NfREVUQUlMU19DQUNIRS5zZXQoa2V5LCB7IGluZm8gfSk7XG4gICAgfSBlbHNlIGlmIChXRUJWSUVXU19ERVRBSUxTX0NBQ0hFLmhhcyhrZXkpKSB7XG4gICAgICBXRUJWSUVXU19ERVRBSUxTX0NBQ0hFLmRlbChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gd2Vidmlld3NNYXBwaW5nO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBXZWJWaWV3RGV0YWlsc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGluZm8gLSBXZWIgdmlldyBkZXRhaWxzIGFzIHJldHVybmVkIGJ5IC9qc29uL3ZlcnNpb24gQ0RQIGVuZHBvaW50LCBmb3IgZXhhbXBsZTpcbiAqIHtcbiAqICBcIkJyb3dzZXJcIjogXCJDaHJvbWUvNzIuMC4zNjAxLjBcIixcbiAqICBcIlByb3RvY29sLVZlcnNpb25cIjogXCIxLjNcIixcbiAqICBcIlVzZXItQWdlbnRcIjogXCJNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xM182KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNzIuMC4zNjAxLjAgU2FmYXJpLzUzNy4zNlwiLFxuICogIFwiVjgtVmVyc2lvblwiOiBcIjcuMi4yMzNcIixcbiAqICBcIldlYktpdC1WZXJzaW9uXCI6IFwiNTM3LjM2IChAY2ZlZGU5ZGIxZDE1NGRlMDQ2OGNiMDUzODQ3OWYzNGMwNzU1YTBmNClcIixcbiAqICBcIndlYlNvY2tldERlYnVnZ2VyVXJsXCI6IFwid3M6Ly9sb2NhbGhvc3Q6OTIyMi9kZXZ0b29scy9icm93c2VyL2IwYjhhNGZiLWJiMTctNDM1OS05NTMzLWE4ZDlmMzkwOGJkOFwiXG4gKiB9XG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgd2ViIHZpZXcgZGV0YWlscyBwcmV2aW91c2x5IGNhY2hlZCBieSBgZ2V0V2Vidmlld3NgIGNhbGxcbiAqXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEFEQiBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IHdlYnZpZXcgVGhlIG5hbWUgb2YgdGhlIHdlYiB2aWV3XG4gKiBAcmV0dXJucyB7P1dlYlZpZXdEZXRhaWxzfSBFaXRoZXIgYHVuZGVmaW5lZGAgb3IgdGhlIHJlY2VudCB3ZWIgdmlldyBkZXRhaWxzXG4gKi9cbmhlbHBlcnMuZ2V0V2Vidmlld0RldGFpbHMgPSBmdW5jdGlvbiBnZXRXZWJ2aWV3RGV0YWlscyAoYWRiLCB3ZWJ2aWV3KSB7XG4gIGNvbnN0IGtleSA9IHRvRGV0YWlsc0NhY2hlS2V5KGFkYiwgd2Vidmlldyk7XG4gIHJldHVybiBXRUJWSUVXU19ERVRBSUxTX0NBQ0hFLmdldChrZXkpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgQ2hyb21lIGRyaXZlciBjYXBhYmlsaXRpZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkXG4gKiBBcHBpdW0gY2FwYWJpbGl0aWVzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgVXNlci1wcm92aWRlZCBjYXBhYmlsaXRpZXMgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gZGV2aWNlSWQgVGhlIGlkZW50aWZpZXIgb2YgdGhlIEFuZHJvaWQgZGV2aWNlIHVuZGVyIHRlc3RcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBjYXBhYmlsaXRpZXMgb2JqZWN0LlxuICogU2VlIGh0dHBzOi8vY2hyb21lZHJpdmVyLmNocm9taXVtLm9yZy9jYXBhYmlsaXRpZXMgZm9yIG1vcmUgZGV0YWlscy5cbiAqL1xuaGVscGVycy5jcmVhdGVDaHJvbWVkcml2ZXJDYXBzID0gZnVuY3Rpb24gY3JlYXRlQ2hyb21lZHJpdmVyQ2FwcyAob3B0cywgZGV2aWNlSWQpIHtcbiAgY29uc3QgY2FwcyA9IHsgY2hyb21lT3B0aW9uczoge30gfTtcblxuICBjb25zdCBhbmRyb2lkUGFja2FnZSA9IG9wdHMuY2hyb21lT3B0aW9ucz8uYW5kcm9pZFBhY2thZ2UgfHwgb3B0cy5hcHBQYWNrYWdlO1xuICBpZiAoYW5kcm9pZFBhY2thZ2UpIHtcbiAgICAvLyBjaHJvbWVkcml2ZXIgcmFpc2VzIGFuIGludmFsaWQgYXJndW1lbnQgZXJyb3Igd2hlbiBhbmRyb2lkUGFja2FnZSBpcyAnbnVsbCdcbiAgICBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZFBhY2thZ2UgPSBhbmRyb2lkUGFja2FnZTtcbiAgfVxuICBpZiAoXy5pc0Jvb2xlYW4ob3B0cy5jaHJvbWVVc2VSdW5uaW5nQXBwKSkge1xuICAgIGNhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkVXNlUnVubmluZ0FwcCA9IG9wdHMuY2hyb21lVXNlUnVubmluZ0FwcDtcbiAgfVxuICBpZiAob3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZSkge1xuICAgIGNhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkUGFja2FnZSA9IG9wdHMuY2hyb21lQW5kcm9pZFBhY2thZ2U7XG4gIH1cbiAgaWYgKG9wdHMuY2hyb21lQW5kcm9pZEFjdGl2aXR5KSB7XG4gICAgY2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWRBY3Rpdml0eSA9IG9wdHMuY2hyb21lQW5kcm9pZEFjdGl2aXR5O1xuICB9XG4gIGlmIChvcHRzLmNocm9tZUFuZHJvaWRQcm9jZXNzKSB7XG4gICAgY2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWRQcm9jZXNzID0gb3B0cy5jaHJvbWVBbmRyb2lkUHJvY2VzcztcbiAgfVxuICBpZiAoXy50b0xvd2VyKG9wdHMuYnJvd3Nlck5hbWUpID09PSAnY2hyb21pdW0td2VidmlldycpIHtcbiAgICBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZEFjdGl2aXR5ID0gb3B0cy5hcHBBY3Rpdml0eTtcbiAgfVxuICBpZiAob3B0cy5wYWdlTG9hZFN0cmF0ZWd5KSB7XG4gICAgY2Fwcy5wYWdlTG9hZFN0cmF0ZWd5ID0gb3B0cy5wYWdlTG9hZFN0cmF0ZWd5O1xuICB9XG4gIGlmIChfLnRvTG93ZXIoY2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWRQYWNrYWdlKSA9PT0gJ2Nocm9tZScpIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGV4dHJhY3RlZCBwYWNrYWdlIGZyb20gY29udGV4dCBuYW1lLCBpdCBjb3VsZCBjb21lIGluIGFzIGJhcmVcbiAgICAvLyBcImNocm9tZVwiLCBhbmQgc28gd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGUgZGV0YWlscyBhcmUgY29ycmVjdCwgaW5jbHVkaW5nXG4gICAgLy8gbm90IHVzaW5nIGFuIGFjdGl2aXR5IG9yIHByb2Nlc3MgaWRcbiAgICBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZFBhY2thZ2UgPSBDSFJPTUVfUEFDS0FHRV9OQU1FO1xuICAgIGRlbGV0ZSBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZEFjdGl2aXR5O1xuICAgIGRlbGV0ZSBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZFByb2Nlc3M7XG4gIH1cbiAgLy8gYWRkIGRldmljZSBpZCBmcm9tIGFkYlxuICBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZERldmljZVNlcmlhbCA9IGRldmljZUlkO1xuXG4gIGlmIChvcHRzLmxvZ2dpbmdQcmVmcykge1xuICAgIGNhcHMubG9nZ2luZ1ByZWZzID0gb3B0cy5sb2dnaW5nUHJlZnM7XG4gIH1cbiAgaWYgKG9wdHMuZW5hYmxlUGVyZm9ybWFuY2VMb2dnaW5nKSB7XG4gICAgbG9nZ2VyLndhcm4oYFRoZSAnZW5hYmxlUGVyZm9ybWFuY2VMb2dnaW5nJyBjYXAgaXMgZGVwcmVjYXRlZDsgc2ltcGx5IHVzZSBgICtcbiAgICAgIGB0aGUgJ2xvZ2dpbmdQcmVmcycgY2FwIGluc3RlYWQsIHdpdGggYSAncGVyZm9ybWFuY2UnIGtleSBzZXQgdG8gJ0FMTCdgKTtcbiAgICBjb25zdCBuZXdQcmVmID0ge3BlcmZvcm1hbmNlOiAnQUxMJ307XG4gICAgLy8gZG9uJ3Qgb3ZlcndyaXRlIG90aGVyIGxvZ2dpbmcgcHJlZnMgdGhhdCBoYXZlIGJlZW4gc2VudCBpbiBpZiB0aGV5IGV4aXN0XG4gICAgY2Fwcy5sb2dnaW5nUHJlZnMgPSBjYXBzLmxvZ2dpbmdQcmVmcyA/XG4gICAgICBPYmplY3QuYXNzaWduKHt9LCBjYXBzLmxvZ2dpbmdQcmVmcywgbmV3UHJlZikgOlxuICAgICAgbmV3UHJlZjtcbiAgfVxuXG4gIGlmIChvcHRzLmNocm9tZU9wdGlvbnM/LkFyZ3VtZW50cykge1xuICAgIC8vIG1lcmdlIGBBcmd1bWVudHNgIGFuZCBgYXJnc2BcbiAgICBvcHRzLmNocm9tZU9wdGlvbnMuYXJncyA9IFsuLi4ob3B0cy5jaHJvbWVPcHRpb25zLmFyZ3MgfHwgW10pLCAuLi5vcHRzLmNocm9tZU9wdGlvbnMuQXJndW1lbnRzXTtcbiAgICBkZWxldGUgb3B0cy5jaHJvbWVPcHRpb25zLkFyZ3VtZW50cztcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZygnUHJlY2FsY3VsYXRlZCBDaHJvbWVkcml2ZXIgY2FwYWJpbGl0aWVzOiAnICtcbiAgICBKU09OLnN0cmluZ2lmeShjYXBzLmNocm9tZU9wdGlvbnMsIG51bGwsIDIpKTtcblxuICBjb25zdCBwcm90ZWN0ZWRDYXBOYW1lcyA9IFtdO1xuICBmb3IgKGNvbnN0IFtvcHQsIHZhbF0gb2YgXy50b1BhaXJzKG9wdHMuY2hyb21lT3B0aW9ucykpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChjYXBzLmNocm9tZU9wdGlvbnNbb3B0XSkpIHtcbiAgICAgIGNhcHMuY2hyb21lT3B0aW9uc1tvcHRdID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm90ZWN0ZWRDYXBOYW1lcy5wdXNoKG9wdCk7XG4gICAgfVxuICB9XG4gIGlmICghXy5pc0VtcHR5KHByb3RlY3RlZENhcE5hbWVzKSkge1xuICAgIGxvZ2dlci5pbmZvKCdUaGUgZm9sbG93aW5nIENocm9tZWRyaXZlciBjYXBhYmlsaXRpZXMgY2Fubm90IGJlIG92ZXJyaWRkZW4gJyArXG4gICAgICAnYnkgdGhlIHByb3ZpZGVkIGNocm9tZU9wdGlvbnM6Jyk7XG4gICAgZm9yIChjb25zdCBvcHROYW1lIG9mIHByb3RlY3RlZENhcE5hbWVzKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgICAke29wdE5hbWV9ICgke0pTT04uc3RyaW5naWZ5KG9wdHMuY2hyb21lT3B0aW9uc1tvcHROYW1lXSl9KWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjYXBzO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaGVscGVycztcbmV4cG9ydCB7IGhlbHBlcnMsIE5BVElWRV9XSU4sIFdFQlZJRVdfV0lOLCBXRUJWSUVXX0JBU0UsIENIUk9NSVVNX1dJTiB9O1xuIl0sImZpbGUiOiJsaWIvd2Vidmlldy1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
432
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi93ZWJ2aWV3LWhlbHBlcnMuanMiXSwibmFtZXMiOlsiTkFUSVZFX1dJTiIsIldFQlZJRVdfV0lOIiwiQ0hST01JVU1fV0lOIiwiV0VCVklFV19CQVNFIiwiV0VCVklFV19QSURfUEFUVEVSTiIsIlJlZ0V4cCIsIldFQlZJRVdfUEtHX1BBVFRFUk4iLCJERVZUT09MU19TT0NLRVRfUEFUVEVSTiIsIkNST1NTV0FMS19TT0NLRVRfUEFUVEVSTiIsIkNIUk9NSVVNX0RFVlRPT0xTX1NPQ0tFVCIsIkNIUk9NRV9QQUNLQUdFX05BTUUiLCJERVZUT09MU19QT1JUU19SQU5HRSIsIlBPUlRfQUxMT0NBVElPTl9HVUFSRCIsIkFzeW5jTG9jayIsIldFQlZJRVdTX0RFVEFJTFNfQ0FDSEUiLCJMUlUiLCJtYXgiLCJ1cGRhdGVBZ2VPbkdldCIsIkNEUF9SRVFfVElNRU9VVCIsImhlbHBlcnMiLCJ0b0RldGFpbHNDYWNoZUtleSIsImFkYiIsIndlYnZpZXciLCJjdXJEZXZpY2VJZCIsImdldFBvdGVudGlhbFdlYnZpZXdQcm9jcyIsIm91dCIsInNoZWxsIiwibmFtZXMiLCJhbGxNYXRjaGVzIiwibGluZSIsInNwbGl0IiwiZmxhZ3MiLCJzdCIsInNvY2tQYXRoIiwidHJpbSIsInN0YXJ0c1dpdGgiLCJwdXNoIiwidGVzdCIsIl8iLCJpc0VtcHR5IiwibG9nZ2VyIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwibGVuZ3RoIiwidXRpbCIsInBsdXJhbGl6ZSIsInVuaXEiLCJ3ZWJ2aWV3c0Zyb21Qcm9jcyIsImRldmljZVNvY2tldCIsInNvY2tldE5hbWVzIiwid2Vidmlld3MiLCJzb2NrZXROYW1lIiwicHJvYyIsInNvY2tldE5hbWVNYXRjaCIsImV4ZWMiLCJjcm9zc3dhbGtNYXRjaCIsImFsbG9jYXRlRGV2dG9vbHNQb3J0Iiwid2Vidmlld0RldnRvb2xzUG9ydCIsImFjcXVpcmUiLCJzdGFydFBvcnQiLCJlbmRQb3J0IiwibG9jYWxQb3J0IiwiZSIsIkVycm9yIiwicmVtb3RlUG9ydCIsInJlcGxhY2UiLCJhZGJFeGVjIiwiY29sbGVjdFdlYnZpZXdzRGV0YWlscyIsIndlYnZpZXdzTWFwcGluZyIsIm9wdHMiLCJlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcyIsImVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiIsImluZm8iLCJkZXRhaWxDb2xsZWN0b3JzIiwiaXRlbSIsImNkcEluZm8iLCJwYWdlcyIsImNkcExpc3QiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsIkIiLCJhbGwiLCJ1cmwiLCJ0aW1lb3V0IiwiZGF0YSIsInByb2NGcm9tV2VidmlldyIsInBpZE1hdGNoIiwicGlkIiwicGtnIiwiZ2V0TmFtZUJ5UGlkIiwiZ2V0V2Vidmlld3MiLCJhbmRyb2lkRGV2aWNlU29ja2V0IiwiZ2V0V2ViVmlld3NNYXBwaW5nIiwicmVzdWx0Iiwid2Vidmlld05hbWUiLCJ3ZWJ2aWV3TWFwcGluZyIsInd2TmFtZSIsInByb2Nlc3MiLCJ1bmRlZmluZWQiLCJwa2dNYXRjaCIsIm5hbWUiLCJpZCIsIndhcm4iLCJtZXNzYWdlIiwia2V5Iiwic2V0IiwiaGFzIiwiZGVsIiwiZ2V0V2Vidmlld0RldGFpbHMiLCJnZXQiLCJjcmVhdGVDaHJvbWVkcml2ZXJDYXBzIiwiZGV2aWNlSWQiLCJ3ZWJWaWV3RGV0YWlscyIsImNhcHMiLCJjaHJvbWVPcHRpb25zIiwiYW5kcm9pZFBhY2thZ2UiLCJhcHBQYWNrYWdlIiwiaXNCb29sZWFuIiwiY2hyb21lVXNlUnVubmluZ0FwcCIsImFuZHJvaWRVc2VSdW5uaW5nQXBwIiwiY2hyb21lQW5kcm9pZFBhY2thZ2UiLCJjaHJvbWVBbmRyb2lkQWN0aXZpdHkiLCJhbmRyb2lkQWN0aXZpdHkiLCJjaHJvbWVBbmRyb2lkUHJvY2VzcyIsImFuZHJvaWRQcm9jZXNzIiwidG9Mb3dlciIsImJyb3dzZXJOYW1lIiwiYXBwQWN0aXZpdHkiLCJwYWdlTG9hZFN0cmF0ZWd5IiwiYW5kcm9pZERldmljZVNlcmlhbCIsImxvZ2dpbmdQcmVmcyIsImVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZyIsIm5ld1ByZWYiLCJwZXJmb3JtYW5jZSIsIk9iamVjdCIsImFzc2lnbiIsIkFyZ3VtZW50cyIsImFyZ3MiLCJwcm90ZWN0ZWRDYXBOYW1lcyIsIm9wdCIsInZhbCIsInRvUGFpcnMiLCJpc1VuZGVmaW5lZCIsIm9wdE5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsVUFBVSxHQUFHLFlBQW5COztBQUNBLE1BQU1DLFdBQVcsR0FBRyxTQUFwQjs7QUFDQSxNQUFNQyxZQUFZLEdBQUcsVUFBckI7O0FBQ0EsTUFBTUMsWUFBWSxHQUFJLEdBQUVGLFdBQVksR0FBcEM7O0FBQ0EsTUFBTUcsbUJBQW1CLEdBQUcsSUFBSUMsTUFBSixDQUFZLElBQUdGLFlBQWEsUUFBNUIsQ0FBNUI7QUFDQSxNQUFNRyxtQkFBbUIsR0FBRyxJQUFJRCxNQUFKLENBQVksSUFBR0YsWUFBYSxvQkFBNUIsQ0FBNUI7QUFDQSxNQUFNSSx1QkFBdUIsR0FBRyxtQ0FBaEM7QUFDQSxNQUFNQyx3QkFBd0IsR0FBRyw2QkFBakM7QUFDQSxNQUFNQyx3QkFBd0IsR0FBRyx3QkFBakM7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxvQkFBNUI7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxDQUFDLEtBQUQsRUFBUSxLQUFSLENBQTdCO0FBQ0EsTUFBTUMscUJBQXFCLEdBQUcsSUFBSUMsa0JBQUosRUFBOUI7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxJQUFJQyxpQkFBSixDQUFRO0FBQ3JDQyxFQUFBQSxHQUFHLEVBQUUsR0FEZ0M7QUFFckNDLEVBQUFBLGNBQWMsRUFBRTtBQUZxQixDQUFSLENBQS9CO0FBSUEsTUFBTUMsZUFBZSxHQUFHLElBQXhCO0FBRUEsTUFBTUMsT0FBTyxHQUFHLEVBQWhCOzs7QUFFQSxTQUFTQyxpQkFBVCxDQUE0QkMsR0FBNUIsRUFBaUNDLE9BQWpDLEVBQTBDO0FBQ3hD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TUMsR0FBTixDQUFYLElBQXlCdEcsZ0JBQUV1RyxPQUFGLENBQVV2RSxJQUFJLENBQUM0QyxhQUFmLENBQXpCLEVBQXdEO0FBQ3RELFFBQUk1RSxnQkFBRXdHLFdBQUYsQ0FBYzdCLElBQUksQ0FBQ0MsYUFBTCxDQUFtQnlCLEdBQW5CLENBQWQsQ0FBSixFQUE0QztBQUMxQzFCLE1BQUFBLElBQUksQ0FBQ0MsYUFBTCxDQUFtQnlCLEdBQW5CLElBQTBCQyxHQUExQjtBQUNELEtBRkQsTUFFTztBQUNMRixNQUFBQSxpQkFBaUIsQ0FBQ3RHLElBQWxCLENBQXVCdUcsR0FBdkI7QUFDRDtBQUNGOztBQUNELE1BQUksQ0FBQ3JHLGdCQUFFQyxPQUFGLENBQVVtRyxpQkFBVixDQUFMLEVBQW1DO0FBQ2pDbEcsb0JBQU9pQyxJQUFQLENBQVksa0VBQ1YsZ0NBREY7O0FBRUEsU0FBSyxNQUFNc0UsT0FBWCxJQUFzQkwsaUJBQXRCLEVBQXlDO0FBQ3ZDbEcsc0JBQU9pQyxJQUFQLENBQWEsS0FBSXNFLE9BQVEsS0FBSXJHLElBQUksQ0FBQ0MsU0FBTCxDQUFlMkIsSUFBSSxDQUFDNEMsYUFBTCxDQUFtQjZCLE9BQW5CLENBQWYsQ0FBNEMsR0FBekU7QUFDRDtBQUNGOztBQUVELFNBQU85QixJQUFQO0FBQ0QsQ0FoRkQ7O2VBa0ZlOUYsTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgZmluZEFQb3J0Tm90SW5Vc2UgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IExSVSBmcm9tICdscnUtY2FjaGUnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG5jb25zdCBOQVRJVkVfV0lOID0gJ05BVElWRV9BUFAnO1xuY29uc3QgV0VCVklFV19XSU4gPSAnV0VCVklFVyc7XG5jb25zdCBDSFJPTUlVTV9XSU4gPSAnQ0hST01JVU0nO1xuY29uc3QgV0VCVklFV19CQVNFID0gYCR7V0VCVklFV19XSU59X2A7XG5jb25zdCBXRUJWSUVXX1BJRF9QQVRURVJOID0gbmV3IFJlZ0V4cChgXiR7V0VCVklFV19CQVNFfShcXFxcZCspYCk7XG5jb25zdCBXRUJWSUVXX1BLR19QQVRURVJOID0gbmV3IFJlZ0V4cChgXiR7V0VCVklFV19CQVNFfShbXlxcXFxkXFxcXHNdW1xcXFx3Ll0qKWApO1xuY29uc3QgREVWVE9PTFNfU09DS0VUX1BBVFRFUk4gPSAvQFtcXHcuXStfZGV2dG9vbHNfcmVtb3RlXz8oXFxkKyk/XFxiLztcbmNvbnN0IENST1NTV0FMS19TT0NLRVRfUEFUVEVSTiA9IC9AKFtcXHcuXSspX2RldnRvb2xzX3JlbW90ZVxcYi87XG5jb25zdCBDSFJPTUlVTV9ERVZUT09MU19TT0NLRVQgPSAnY2hyb21lX2RldnRvb2xzX3JlbW90ZSc7XG5jb25zdCBDSFJPTUVfUEFDS0FHRV9OQU1FID0gJ2NvbS5hbmRyb2lkLmNocm9tZSc7XG5jb25zdCBERVZUT09MU19QT1JUU19SQU5HRSA9IFsxMDkwMCwgMTEwMDBdO1xuY29uc3QgUE9SVF9BTExPQ0FUSU9OX0dVQVJEID0gbmV3IEFzeW5jTG9jaygpO1xuY29uc3QgV0VCVklFV1NfREVUQUlMU19DQUNIRSA9IG5ldyBMUlUoe1xuICBtYXg6IDEwMCxcbiAgdXBkYXRlQWdlT25HZXQ6IHRydWUsXG59KTtcbmNvbnN0IENEUF9SRVFfVElNRU9VVCA9IDIwMDA7IC8vIG1zXG5cbmNvbnN0IGhlbHBlcnMgPSB7fTtcblxuZnVuY3Rpb24gdG9EZXRhaWxzQ2FjaGVLZXkgKGFkYiwgd2Vidmlldykge1xuICByZXR1cm4gYCR7YWRiPy5jdXJEZXZpY2VJZH06JHt3ZWJ2aWV3fWA7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZXRzIGEgbGlzdCBvZiBhbmRyb2lkIHN5c3RlbSBwcm9jZXNzZXMgYW5kIHJldHVybnMgb25lc1xuICogdGhhdCBsb29rIGxpa2Ugd2Vidmlld3NcbiAqIFNlZSBodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvY2hyb21lL2Jyb3dzZXIvZGV2dG9vbHMvZGV2aWNlL2FuZHJvaWRfZGV2aWNlX2luZm9fcXVlcnkuY2NcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gYWRiIC0gYW4gQURCIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59IC0gYSBsaXN0IG9mIG1hdGNoaW5nIHdlYnZpZXcgc29ja2V0IG5hbWVzIChpbmNsdWRpbmcgdGhlIGxlYWRpbmcgJ0AnKVxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRQb3RlbnRpYWxXZWJ2aWV3UHJvY3MgKGFkYikge1xuICBjb25zdCBvdXQgPSBhd2FpdCBhZGIuc2hlbGwoWydjYXQnLCAnL3Byb2MvbmV0L3VuaXgnXSk7XG4gIGNvbnN0IG5hbWVzID0gW107XG4gIGNvbnN0IGFsbE1hdGNoZXMgPSBbXTtcbiAgZm9yIChjb25zdCBsaW5lIG9mIG91dC5zcGxpdCgnXFxuJykpIHtcbiAgICAvLyBOdW0gUmVmQ291bnQgUHJvdG9jb2wgRmxhZ3MgVHlwZSBTdCBJbm9kZSBQYXRoXG4gICAgY29uc3QgWywsLCBmbGFncywsIHN0LCwgc29ja1BhdGhdID0gbGluZS50cmltKCkuc3BsaXQoL1xccysvKTtcbiAgICBpZiAoIXNvY2tQYXRoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHNvY2tQYXRoLnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgYWxsTWF0Y2hlcy5wdXNoKGxpbmUudHJpbSgpKTtcbiAgICB9XG4gICAgaWYgKGZsYWdzICE9PSAnMDAwMTAwMDAnIHx8IHN0ICE9PSAnMDEnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCFERVZUT09MU19TT0NLRVRfUEFUVEVSTi50ZXN0KHNvY2tQYXRoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbmFtZXMucHVzaChzb2NrUGF0aCk7XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShuYW1lcykpIHtcbiAgICBsb2dnZXIuZGVidWcoJ0ZvdW5kIG5vIGFjdGl2ZSBkZXZ0b29scyBzb2NrZXRzJyk7XG4gICAgaWYgKCFfLmlzRW1wdHkoYWxsTWF0Y2hlcykpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgT3RoZXIgc29ja2V0cyBhcmU6ICR7SlNPTi5zdHJpbmdpZnkoYWxsTWF0Y2hlcywgbnVsbCwgMil9YCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxvZ2dlci5kZWJ1ZyhgUGFyc2VkICR7bmFtZXMubGVuZ3RofSBhY3RpdmUgZGV2dG9vbHMgJHt1dGlsLnBsdXJhbGl6ZSgnc29ja2V0JywgbmFtZXMubGVuZ3RoLCBmYWxzZSl9OiBgICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KG5hbWVzKSk7XG4gIH1cbiAgLy8gc29tZXRpbWVzIHRoZSB3ZWJ2aWV3IHByb2Nlc3Mgc2hvd3MgdXAgbXVsdGlwbGUgdGltZXMgcGVyIGFwcFxuICByZXR1cm4gXy51bmlxKG5hbWVzKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBXZWJ2aWV3UHJvY1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHByb2MgLSBUaGUgd2VidmlldyBwcm9jZXNzIG5hbWUgKGFzIHJldHVybmVkIGJ5XG4gKiBnZXRQb3RlbnRpYWxXZWJ2aWV3UHJvY3NcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3ZWJ2aWV3IC0gVGhlIGFjdHVhbCB3ZWJ2aWV3IGNvbnRleHQgbmFtZVxuICovXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIGEgbGlzdCBvZiBzeXN0ZW0gcHJvY2Vzc2VzIHRoYXQgbG9vayBsaWtlIHdlYnZpZXdzLFxuICogYW5kIHJldHVybnMgdGhlbSBhbG9uZyB3aXRoIHRoZSB3ZWJ2aWV3IGNvbnRleHQgbmFtZSBhcHByb3ByaWF0ZSBmb3IgaXQuXG4gKiBJZiB3ZSBwYXNzIGluIGEgZGV2aWNlU29ja2V0LCB3ZSBvbmx5IGF0dGVtcHQgdG8gZmluZCB3ZWJ2aWV3cyB3aGljaCBtYXRjaFxuICogdGhhdCBzb2NrZXQgbmFtZSAodGhpcyBpcyBmb3IgYXBwcyB3aGljaCBlbWJlZCBDaHJvbWl1bSwgd2hpY2ggaXNuJ3QgdGhlXG4gKiBzYW1lIGFzIGNocm9tZS1iYWNrZWQgd2Vidmlld3MpLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBhZGIgLSBhbiBBREIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7P3N0cmluZ30gZGV2aWNlU29ja2V0IC0gdGhlIGV4cGxpY3RseS1uYW1lZCBkZXZpY2Ugc29ja2V0IHRvIHVzZVxuICpcbiAqIEByZXR1cm4ge0FycmF5LjxXZWJ2aWV3UHJvYz59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdlYnZpZXdzRnJvbVByb2NzIChhZGIsIGRldmljZVNvY2tldCA9IG51bGwpIHtcbiAgY29uc3Qgc29ja2V0TmFtZXMgPSBhd2FpdCBnZXRQb3RlbnRpYWxXZWJ2aWV3UHJvY3MoYWRiKTtcbiAgY29uc3Qgd2Vidmlld3MgPSBbXTtcbiAgZm9yIChjb25zdCBzb2NrZXROYW1lIG9mIHNvY2tldE5hbWVzKSB7XG4gICAgaWYgKGRldmljZVNvY2tldCA9PT0gQ0hST01JVU1fREVWVE9PTFNfU09DS0VUICYmIHNvY2tldE5hbWUgPT09IGBAJHtkZXZpY2VTb2NrZXR9YCkge1xuICAgICAgd2Vidmlld3MucHVzaCh7XG4gICAgICAgIHByb2M6IHNvY2tldE5hbWUsXG4gICAgICAgIHdlYnZpZXc6IENIUk9NSVVNX1dJTixcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3Qgc29ja2V0TmFtZU1hdGNoID0gREVWVE9PTFNfU09DS0VUX1BBVFRFUk4uZXhlYyhzb2NrZXROYW1lKTtcbiAgICBpZiAoIXNvY2tldE5hbWVNYXRjaCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGNyb3Nzd2Fsa01hdGNoID0gQ1JPU1NXQUxLX1NPQ0tFVF9QQVRURVJOLmV4ZWMoc29ja2V0TmFtZSk7XG4gICAgaWYgKCFzb2NrZXROYW1lTWF0Y2hbMV0gJiYgIWNyb3Nzd2Fsa01hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoZGV2aWNlU29ja2V0ICYmIHNvY2tldE5hbWUgPT09IGBAJHtkZXZpY2VTb2NrZXR9YCB8fCAhZGV2aWNlU29ja2V0KSB7XG4gICAgICB3ZWJ2aWV3cy5wdXNoKHtcbiAgICAgICAgcHJvYzogc29ja2V0TmFtZSxcbiAgICAgICAgd2Vidmlldzogc29ja2V0TmFtZU1hdGNoWzFdXG4gICAgICAgICAgPyBgJHtXRUJWSUVXX0JBU0V9JHtzb2NrZXROYW1lTWF0Y2hbMV19YFxuICAgICAgICAgIDogYCR7V0VCVklFV19CQVNFfSR7Y3Jvc3N3YWxrTWF0Y2hbMV19YCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gd2Vidmlld3M7XG59XG5cbi8qKlxuICogQWxsb2NhdGVzIGEgbG9jYWwgcG9ydCBmb3IgZGV2dG9vbHMgY29tbXVuaWNhdGlvblxuICpcbiAqIEBwYXJhbSB7QURCfSBhZGIgQURCIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc29ja2V0TmFtZSBUaGUgcmVtb3RlIFVuaXggc29ja2V0IG5hbWVcbiAqIEBwYXJhbSB7P3N0cmluZ3xudW1iZXJ9IHdlYnZpZXdEZXZ0b29sc1BvcnQgVGhlIGxvY2FsIHBvcnQgbnVtYmVyIG9yIG51bGwgdG8gYXBwbHlcbiAqIGF1dG9kZXRlY3Rpb25cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBsb2NhbCBwb3J0IG51bWJlciBpZiB0aGUgcmVtb3RlIHNvY2tldCBoYXMgYmVlbiBmb3J3YXJkZWRcbiAqIHN1Y2Nlc3NmdWxseSBvciBgbnVsbGAgb3RoZXJ3aXNlXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGFsbG9jYXRpbmcgdGhlIGxvY2FsIHBvcnRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gYWxsb2NhdGVEZXZ0b29sc1BvcnQgKGFkYiwgc29ja2V0TmFtZSwgd2Vidmlld0RldnRvb2xzUG9ydCA9IG51bGwpIHtcbiAgcmV0dXJuIGF3YWl0IFBPUlRfQUxMT0NBVElPTl9HVUFSRC5hY3F1aXJlKCdEZXZ0b29sc1BvcnRBbGxvY2F0b3InLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc3RhcnRQb3J0ID0gd2Vidmlld0RldnRvb2xzUG9ydCB8fCBERVZUT09MU19QT1JUU19SQU5HRVswXTtcbiAgICBjb25zdCBlbmRQb3J0ID0gc3RhcnRQb3J0ICsgREVWVE9PTFNfUE9SVFNfUkFOR0VbMV0gLSBERVZUT09MU19QT1JUU19SQU5HRVswXTtcbiAgICBsZXQgbG9jYWxQb3J0O1xuICAgIHRyeSB7XG4gICAgICBsb2NhbFBvcnQgPSBhd2FpdCBmaW5kQVBvcnROb3RJblVzZShzdGFydFBvcnQsIGVuZFBvcnQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgYW55IGZyZWUgcG9ydCB0byBmb3J3YXJkIHRoZSBkZXZ0b29scyBzb2NrZXQgYCArXG4gICAgICAgIGBpbiByYW5nZSAke3N0YXJ0UG9ydH0uLiR7ZW5kUG9ydH19LiBZb3UgY2FuIHNldCB0aGUgc3RhcnRpbmcgcG9ydCBudW1iZXIgYCArXG4gICAgICAgIGBtYW51YWxseSBieSBwcm92aWRpbmcgdGhlICd3ZWJ2aWV3RGV2dG9vbHNQb3J0JyBjYXBhYmlsaXR5YCk7XG4gICAgfVxuICAgIC8vIHNvY2tldCBuYW1lcyBjb21lIHdpdGggJ0AnLCBidXQgdGhpcyBzaG91bGQgbm90IGJlIGEgcGFydCBvZiB0aGUgYWJzdHJhY3RcbiAgICAvLyByZW1vdGUgcG9ydCwgc28gcmVtb3ZlIGl0XG4gICAgY29uc3QgcmVtb3RlUG9ydCA9IHNvY2tldE5hbWUucmVwbGFjZSgvXkAvLCAnJyk7XG4gICAgYXdhaXQgYWRiLmFkYkV4ZWMoWydmb3J3YXJkJywgYHRjcDoke2xvY2FsUG9ydH1gLCBgbG9jYWxhYnN0cmFjdDoke3JlbW90ZVBvcnR9YF0pO1xuICAgIHJldHVybiBsb2NhbFBvcnQ7XG4gIH0pO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFdlYnZpZXdQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHByb2MgVGhlIG5hbWUgb2YgdGhlIERldnRvb2xzIFVuaXggc29ja2V0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gd2VidmlldyBUaGUgd2ViIHZpZXcgYWxpYXMuIExvb2tzIGxpa2UgYFdFQlZJRVdfYFxuICogcHJlZml4IHBsdXMgUElEIG9yIHBhY2thZ2UgbmFtZVxuICogQHByb3BlcnR5IHs/T2JqZWN0fSBpbmZvIFdlYnZpZXcgaW5mb3JtYXRpb24gYXMgaXQgaXMgcmV0cmlldmVkIGJ5XG4gKiAvanNvbi92ZXJzaW9uIENEUCBlbmRwb2ludFxuICogQHByb3BlcnR5IHs/QXJyYXk8T2JqZWN0Pn0gcGFnZXMgV2VidmlldyBwYWdlcyBsaXN0IGFzIGl0IGlzIHJldHJpZXZlZCBieVxuICogL2pzb24vbGlzdCBDRFAgZW5kcG9pbnRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERldGFpbENvbGxlY3Rpb25PcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd8bnVtYmVyfSB3ZWJ2aWV3RGV2dG9vbHNQb3J0IFRoZSBzdGFydGluZyBwb3J0IHRvIHVzZSBmb3Igd2VidmlldyBwYWdlXG4gKiBwcmVzZW5jZSBjaGVjayAoaWYgbm90IHRoZSBkZWZhdWx0IG9mIDkyMjIpLlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMgV2hldGhlciB0byBjaGVjayBmb3Igd2Vidmlld1xuICogcGFnZXMgcHJlc2VuY2VcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uIFdoZXRoZXIgdG8gY29sbGVjdFxuICogd2ViIHZpZXcgZGV0YWlscyBhbmQgc2VuZCB0aGVtIHRvIENocm9tZWRyaXZlciBjb25zdHJ1Y3Rvciwgc28gaXQgY291bGRcbiAqIHNlbGVjdCBhIGJpbmFyeSBtb3JlIHByZWNpc2VseSBiYXNlZCBvbiB0aGlzIGluZm8uXG4gKi9cblxuLyoqXG4gKiBUaGlzIGlzIGEgd3JhcHBlciBmb3IgQ2hyb21lIERlYnVnZ2VyIFByb3RvY29sIGRhdGEgY29sbGVjdGlvbi5cbiAqIE5vIGVycm9yIGlzIHRocm93biBpZiBDRFAgcmVxdWVzdCBmYWlscyAtIGluIHN1Y2ggY2FzZSBubyBkYXRhIHdpbGwgYmVcbiAqIHJlY29yZGVkIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgYHdlYnZpZXdzTWFwcGluZ2AgaXRlbS5cbiAqXG4gKiBAcGFyYW0ge0FEQn0gYWRiIFRoZSBBREIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7QXJyYXk8V2Vidmlld1Byb3BzPn0gd2Vidmlld3NNYXBwaW5nIFRoZSBjdXJyZW50IHdlYnZpZXdzIG1hcHBpbmdcbiAqICEhISBFYWNoIGl0ZW0gb2YgdGhpcyBhcnJheSBnZXRzIG11dGF0ZWQgKGBpbmZvYC9gcGFnZXNgIHByb3BlcnRpZXMgZ2V0IGFkZGVkXG4gKiBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgYG9wdHNgKSBpZiB0aGUgcmVxdWVzdGVkIGRldGFpbHMgaGF2ZSBiZWVuXG4gKiBzdWNjZXNzZnVsbHkgcmV0cmlldmVkIGZvciBpdCAhISFcbiAqIEBwYXJhbSB7RGV0YWlsQ29sbGVjdGlvbk9wdGlvbnN9IG9wdHMgSWYgYm90aCBgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXNgIGFuZFxuICogYGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbmAgcHJvcGVydGllcyBhcmUgZmFsc3kgdGhlbiBubyBkZXRhaWxzIGNvbGxlY3Rpb25cbiAqIGlzIHBlcmZvcm1lZFxuICovXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0V2Vidmlld3NEZXRhaWxzIChhZGIsIHdlYnZpZXdzTWFwcGluZywgb3B0cyA9IHt9KSB7XG4gIGlmIChfLmlzRW1wdHkod2Vidmlld3NNYXBwaW5nKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICB3ZWJ2aWV3RGV2dG9vbHNQb3J0ID0gbnVsbCxcbiAgICBlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcyA9IG51bGwsXG4gICAgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uID0gbnVsbCxcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKCFlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcykge1xuICAgIGxvZ2dlci5pbmZvKGBOb3QgY2hlY2tpbmcgd2hldGhlciB3ZWJ2aWV3cyBoYXZlIGFjdGl2ZSBwYWdlczsgdXNlIHRoZSBgICtcbiAgICAgIGAnZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMnIGNhcCB0byB0dXJuIHRoaXMgY2hlY2sgb25gKTtcbiAgfVxuXG4gIGlmICghZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uKSB7XG4gICAgbG9nZ2VyLmluZm8oYE5vdCBjb2xsZWN0aW5nIHdlYiB2aWV3IGRldGFpbHMuIERldGFpbHMgY29sbGVjdGlvbiBtaWdodCBoZWxwIGAgK1xuICAgICAgYHRvIG1ha2UgQ2hyb21lZHJpdmVyIGluaXRpYWxpemF0aW9uIG1vcmUgcHJlY2lzZS4gVXNlIHRoZSAnZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uJyBgICtcbiAgICAgIGBjYXAgdG8gdHVybiBpdCBvbmApO1xuICB9XG5cbiAgaWYgKCFlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcyAmJiAhZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQ29ubmVjdCB0byBlYWNoIGRldnRvb2xzIHNvY2tldCBhbmQgcmV0cmlldmUgd2ViIHZpZXcgZGV0YWlsc1xuICBsb2dnZXIuZGVidWcoYENvbGxlY3RpbmcgQ0RQIGRhdGEgb2YgJHt1dGlsLnBsdXJhbGl6ZSgnd2VidmlldycsIHdlYnZpZXdzTWFwcGluZy5sZW5ndGgsIHRydWUpfWApO1xuICBjb25zdCBkZXRhaWxDb2xsZWN0b3JzID0gW107XG4gIGZvciAoY29uc3QgaXRlbSBvZiB3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgICBkZXRhaWxDb2xsZWN0b3JzLnB1c2goKGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBsb2NhbFBvcnQ7XG4gICAgICB0cnkge1xuICAgICAgICBsb2NhbFBvcnQgPSBhd2FpdCBhbGxvY2F0ZURldnRvb2xzUG9ydChhZGIsIGl0ZW0ucHJvYywgd2Vidmlld0RldnRvb2xzUG9ydCk7XG4gICAgICAgIGlmIChlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24pIHtcbiAgICAgICAgICBpdGVtLmluZm8gPSBhd2FpdCBjZHBJbmZvKGxvY2FsUG9ydCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzKSB7XG4gICAgICAgICAgaXRlbS5wYWdlcyA9IGF3YWl0IGNkcExpc3QobG9jYWxQb3J0KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobG9jYWxQb3J0KSB7XG4gICAgICAgICAgYXdhaXQgYWRiLnJlbW92ZVBvcnRGb3J3YXJkKGxvY2FsUG9ydCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSgpKTtcbiAgfVxuICBhd2FpdCBCLmFsbChkZXRhaWxDb2xsZWN0b3JzKTtcbiAgbG9nZ2VyLmRlYnVnKGBDRFAgZGF0YSBjb2xsZWN0aW9uIGNvbXBsZXRlZGApO1xufVxuXG4vLyBodHRwczovL2Nocm9tZWRldnRvb2xzLmdpdGh1Yi5pby9kZXZ0b29scy1wcm90b2NvbC9cbmFzeW5jIGZ1bmN0aW9uIGNkcExpc3QgKGxvY2FsUG9ydCkge1xuICByZXR1cm4gKGF3YWl0IGF4aW9zKHtcbiAgICB1cmw6IGBodHRwOi8vMTI3LjAuMC4xOiR7bG9jYWxQb3J0fS9qc29uL2xpc3RgLFxuICAgIHRpbWVvdXQ6IENEUF9SRVFfVElNRU9VVCxcbiAgfSkpLmRhdGE7XG59XG5cbi8vIGh0dHBzOi8vY2hyb21lZGV2dG9vbHMuZ2l0aHViLmlvL2RldnRvb2xzLXByb3RvY29sL1xuYXN5bmMgZnVuY3Rpb24gY2RwSW5mbyAobG9jYWxQb3J0KSB7XG4gIHJldHVybiAoYXdhaXQgYXhpb3Moe1xuICAgIHVybDogYGh0dHA6Ly8xMjcuMC4wLjE6JHtsb2NhbFBvcnR9L2pzb24vdmVyc2lvbmAsXG4gICAgdGltZW91dDogQ0RQX1JFUV9USU1FT1VULFxuICB9KSkuZGF0YTtcbn1cblxuLyoqXG4gKiBUYWtlIGEgd2VidmlldyBuYW1lIGxpa2UgV0VCVklFV180Mjk2IGFuZCB1c2UgJ2FkYiBzaGVsbCBwcycgdG8gZmlndXJlIG91dFxuICogd2hpY2ggYXBwIHBhY2thZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgd2Vidmlldy4gT25lIG9mIHRoZSByZWFzb25zIHdlXG4gKiB3YW50IHRvIGRvIHRoaXMgaXMgdG8gbWFrZSBzdXJlIHdlJ3JlIGxpc3Rpbmcgd2Vidmlld3MgZm9yIHRoZSBhY3R1YWwgQVVULFxuICogbm90IHNvbWUgb3RoZXIgcnVubmluZyBhcHBcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gYWRiIC0gYW4gQURCIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gd2VidmlldyAtIGEgd2VidmlldyBwcm9jZXNzIG5hbWVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBwYWNrYWdlIG5hbWUgb2YgdGhlIGFwcCBydW5uaW5nIHRoZSB3ZWJ2aWV3XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSByZXRyaWV2aW5nIHRoZSBwcm9jZXNzIG5hbWVcbiAqL1xuaGVscGVycy5wcm9jRnJvbVdlYnZpZXcgPSBhc3luYyBmdW5jdGlvbiBwcm9jRnJvbVdlYnZpZXcgKGFkYiwgd2Vidmlldykge1xuICBjb25zdCBwaWRNYXRjaCA9IFdFQlZJRVdfUElEX1BBVFRFUk4uZXhlYyh3ZWJ2aWV3KTtcbiAgaWYgKCFwaWRNYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgUElEIGZvciB3ZWJ2aWV3ICcke3dlYnZpZXd9J2ApO1xuICB9XG5cbiAgY29uc3QgcGlkID0gcGlkTWF0Y2hbMV07XG4gIGxvZ2dlci5kZWJ1ZyhgJHt3ZWJ2aWV3fSBtYXBwZWQgdG8gcGlkICR7cGlkfWApO1xuICBsb2dnZXIuZGVidWcoYEdldHRpbmcgcHJvY2VzcyBuYW1lIGZvciB3ZWJ2aWV3ICcke3dlYnZpZXd9J2ApO1xuICBjb25zdCBwa2cgPSBhd2FpdCBhZGIuZ2V0TmFtZUJ5UGlkKHBpZCk7XG4gIGxvZ2dlci5kZWJ1ZyhgR290IHByb2Nlc3MgbmFtZTogJyR7cGtnfSdgKTtcbiAgcmV0dXJuIHBrZztcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHdlYnZpZXcgbmFtZXMgZm9yIGdldENvbnRleHRzXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGFkYiAtIGFuIEFEQiBpbnN0YW5jZVxuICogQHBhcmFtIHtHZXRXZWJ2aWV3T3B0c30gb3B0cyBTZWUgbm90ZSBvbiBnZXRXZWJWaWV3c01hcHBpbmdcbiAqXG4gKiBAcmV0dXJuIHtBcnJheS48c3RyaW5nPn0gLSBhIGxpc3Qgb2Ygd2VidmlldyBuYW1lc1xuICovXG5oZWxwZXJzLmdldFdlYnZpZXdzID0gYXN5bmMgZnVuY3Rpb24gZ2V0V2Vidmlld3MgKGFkYiwge1xuICBhbmRyb2lkRGV2aWNlU29ja2V0ID0gbnVsbCxcbiAgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMgPSB0cnVlLFxuICB3ZWJ2aWV3RGV2dG9vbHNQb3J0ID0gbnVsbCxcbiAgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uID0gbnVsbCxcbn0gPSB7fSkge1xuICBjb25zdCB3ZWJ2aWV3c01hcHBpbmcgPSBhd2FpdCB0aGlzLmdldFdlYlZpZXdzTWFwcGluZyhhZGIsIHtcbiAgICBhbmRyb2lkRGV2aWNlU29ja2V0LFxuICAgIGVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzLFxuICAgIHdlYnZpZXdEZXZ0b29sc1BvcnQsXG4gICAgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uXG4gIH0pO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChjb25zdCB7d2VidmlldywgcGFnZXMsIHByb2MsIHdlYnZpZXdOYW1lfSBvZiB3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgICBpZiAoZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMgJiYgcGFnZXM/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9nZ2VyLmluZm8oYFNraXBwaW5nIHRoZSB3ZWJ2aWV3ICcke3dlYnZpZXd9JyBhdCAnJHtwcm9jfScgYCArXG4gICAgICAgIGBzaW5jZSBpdCBoYXMgcmVwb3J0ZWQgaGF2aW5nIHplcm8gcGFnZXNgKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAod2Vidmlld05hbWUpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHdlYnZpZXdOYW1lKTtcbiAgICB9XG4gIH1cbiAgbG9nZ2VyLmRlYnVnKGBGb3VuZCAke3V0aWwucGx1cmFsaXplKCd3ZWJ2aWV3JywgcmVzdWx0Lmxlbmd0aCwgdHJ1ZSl9OiAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEdldFdlYnZpZXdzT3B0c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFuZHJvaWREZXZpY2VTb2NrZXQgW251bGxdIC0gZGV2aWNlIHNvY2tldCBuYW1lXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzIFt0cnVlXSAtIHdoZXRoZXIgdG8gY2hlY2sgZm9yIHdlYnZpZXdcbiAqIHBhZ2UgcHJlc2VuY2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3ZWJ2aWV3RGV2dG9vbHNQb3J0IFs5MjIyXSAtIHBvcnQgdG8gdXNlIGZvciB3ZWJ2aWV3IHBhZ2VcbiAqIHByZXNlbmNlIGNoZWNrLlxuICogQHByb3BlcnR5IHtib29sZWFufSBlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24gW2ZhbHNlXSAtIHdoZXRoZXIgdG8gY29sbGVjdFxuICogd2ViIHZpZXcgZGV0YWlscyBhbmQgc2VuZCB0aGVtIHRvIENocm9tZWRyaXZlciBjb25zdHJ1Y3Rvciwgc28gaXQgY291bGRcbiAqIHNlbGVjdCBhIGJpbmFyeSBtb3JlIHByZWNpc2VseSBiYXNlZCBvbiB0aGlzIGluZm8uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBXZWJ2aWV3c01hcHBpbmdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcm9jIFNlZSBub3RlIG9uIFdlYnZpZXdQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHdlYnZpZXcgU2VlIG5vdGUgb24gV2Vidmlld1Byb3BzXG4gKiBAcHJvcGVydHkgez9PYmplY3R9IGluZm8gU2VlIG5vdGUgb24gV2Vidmlld1Byb3BzXG4gKiBAcHJvcGVydHkgez9BcnJheTxPYmplY3Q+fSBwYWdlcyBTZWUgbm90ZSBvbiBXZWJ2aWV3UHJvcHNcbiAqIEBwcm9wZXJ5IHs/c3RyaW5nfSB3ZWJ2aWV3TmFtZSBBbiBhY3R1YWwgd2VidmlldyBuYW1lIGZvciBzd2l0Y2hpbmcgY29udGV4dFxuICovXG5cbi8qKlxuICogR2V0IGEgbGlzdCBvZiBhdmFpbGFibGUgd2Vidmlld3MgbWFwcGluZyBieSBpbnRyb3NwZWN0aW5nIHByb2Nlc3NlcyB3aXRoIGFkYixcbiAqIHdoZXJlIHdlYnZpZXdzIGFyZSBsaXN0ZWQuIEl0J3MgcG9zc2libGUgdG8gcGFzcyBpbiBhICdkZXZpY2VTb2NrZXQnIGFyZywgd2hpY2hcbiAqIGxpbWl0cyB0aGUgd2VidmlldyBwb3NzaWJpbGl0aWVzIHRvIHRoZSBvbmUgcnVubmluZyBvbiB0aGUgQ2hyb21pdW0gZGV2dG9vbHNcbiAqIHNvY2tldCB3ZSdyZSBpbnRlcmVzdGVkIGluIChzZWUgbm90ZSBvbiB3ZWJ2aWV3c0Zyb21Qcm9jcykuIFdlIGNhbiBhbHNvXG4gKiBkaXJlY3QgdGhpcyBtZXRob2QgdG8gdmVyaWZ5IHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHdlYnZpZXcgcHJvY2VzcyBhY3R1YWxseVxuICogaGFzIGFueSBwYWdlcyAoaWYgYSBwcm9jZXNzIGV4aXN0cyBidXQgbm8gcGFnZXMgYXJlIGZvdW5kLCBDaHJvbWVkcml2ZXIgd2lsbFxuICogbm90IGFjdHVhbGx5IGJlIGFibGUgdG8gY29ubmVjdCB0byBpdCwgc28gdGhpcyBzZXJ2ZXMgYXMgYSBndWFyZCBmb3IgdGhhdFxuICogc3RyYW5nZSBmYWlsdXJlIG1vZGUpLiBUaGUgc3RyYXRlZ3kgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW55IHBhZ2VzIGFyZVxuICogYWN0aXZlIGludm9sdmVzIHNlbmRpbmcgYSByZXF1ZXN0IHRvIHRoZSByZW1vdGUgZGVidWcgc2VydmVyIG9uIHRoZSBkZXZpY2UsXG4gKiBoZW5jZSBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgdGhlIHBvcnQgb24gdGhlIGhvc3QgbWFjaGluZSB3aGljaFxuICogc2hvdWxkIGJlIHVzZWQgZm9yIHRoaXMgY29tbXVuaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gYWRiIC0gYW4gQURCIGluc3RhbmNlXG4gKiBAcGFyYW0ge0dldFdlYnZpZXdPcHRzfSBvcHRzXG4gKlxuICogQHJldHVybiB7QXJyYXk8V2Vidmlld3NNYXBwaW5nPn0gd2Vidmlld3NNYXBwaW5nXG4gKi9cbmhlbHBlcnMuZ2V0V2ViVmlld3NNYXBwaW5nID0gYXN5bmMgZnVuY3Rpb24gZ2V0V2ViVmlld3NNYXBwaW5nIChhZGIsIHtcbiAgYW5kcm9pZERldmljZVNvY2tldCA9IG51bGwsXG4gIGVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzID0gdHJ1ZSxcbiAgd2Vidmlld0RldnRvb2xzUG9ydCA9IG51bGwsXG4gIGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiA9IG51bGwsXG59ID0ge30pIHtcbiAgbG9nZ2VyLmRlYnVnKCdHZXR0aW5nIGEgbGlzdCBvZiBhdmFpbGFibGUgd2Vidmlld3MnKTtcbiAgY29uc3Qgd2Vidmlld3NNYXBwaW5nID0gYXdhaXQgd2Vidmlld3NGcm9tUHJvY3MoYWRiLCBhbmRyb2lkRGV2aWNlU29ja2V0KTtcblxuICBhd2FpdCBjb2xsZWN0V2Vidmlld3NEZXRhaWxzKGFkYiwgd2Vidmlld3NNYXBwaW5nLCB7XG4gICAgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMsXG4gICAgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uLFxuICAgIHdlYnZpZXdEZXZ0b29sc1BvcnQsXG4gIH0pO1xuXG4gIGZvciAoY29uc3Qgd2Vidmlld01hcHBpbmcgb2Ygd2Vidmlld3NNYXBwaW5nKSB7XG4gICAgY29uc3Qge3dlYnZpZXcsIGluZm99ID0gd2Vidmlld01hcHBpbmc7XG4gICAgd2Vidmlld01hcHBpbmcud2Vidmlld05hbWUgPSBudWxsO1xuXG4gICAgbGV0IHd2TmFtZSA9IHdlYnZpZXc7XG4gICAgbGV0IHByb2Nlc3MgPSB1bmRlZmluZWQ7XG4gICAgaWYgKCFhbmRyb2lkRGV2aWNlU29ja2V0KSB7XG4gICAgICBjb25zdCBwa2dNYXRjaCA9IFdFQlZJRVdfUEtHX1BBVFRFUk4uZXhlYyh3ZWJ2aWV3KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHdlYiB2aWV3IG5hbWUgY291bGQgZWl0aGVyIGJlIHN1ZmZpeGVkIHdpdGggUElEIG9yIHRoZSBwYWNrYWdlIG5hbWVcbiAgICAgICAgLy8gcGFja2FnZSBuYW1lcyBjb3VsZCBub3Qgc3RhcnQgd2l0aCBhIGRpZ2l0XG4gICAgICAgIGNvbnN0IHBrZyA9IHBrZ01hdGNoID8gcGtnTWF0Y2hbMV0gOiBhd2FpdCBoZWxwZXJzLnByb2NGcm9tV2VidmlldyhhZGIsIHdlYnZpZXcpO1xuICAgICAgICB3dk5hbWUgPSBgJHtXRUJWSUVXX0JBU0V9JHtwa2d9YDtcbiAgICAgICAgY29uc3QgcGlkTWF0Y2ggPSBXRUJWSUVXX1BJRF9QQVRURVJOLmV4ZWMod2Vidmlldyk7XG4gICAgICAgIHByb2Nlc3MgPSB7XG4gICAgICAgICAgbmFtZTogcGtnLFxuICAgICAgICAgIGlkOiBwaWRNYXRjaCA/IHBpZE1hdGNoWzFdIDogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oZS5tZXNzYWdlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2Vidmlld01hcHBpbmcud2Vidmlld05hbWUgPSB3dk5hbWU7XG4gICAgY29uc3Qga2V5ID0gdG9EZXRhaWxzQ2FjaGVLZXkoYWRiLCB3dk5hbWUpO1xuICAgIGlmIChpbmZvIHx8IHByb2Nlc3MpIHtcbiAgICAgIFdFQlZJRVdTX0RFVEFJTFNfQ0FDSEUuc2V0KGtleSwgeyBpbmZvLCBwcm9jZXNzIH0pO1xuICAgIH0gZWxzZSBpZiAoV0VCVklFV1NfREVUQUlMU19DQUNIRS5oYXMoa2V5KSkge1xuICAgICAgV0VCVklFV1NfREVUQUlMU19DQUNIRS5kZWwoa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHdlYnZpZXdzTWFwcGluZztcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJvY2Vzc0luZm9cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIFRoZSBwcm9jZXNzIG5hbWVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gaWQgVGhlIHByb2Nlc3MgaWQgKGlmIGNvdWxkIGJlIHJldHJpZXZlZClcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFdlYlZpZXdEZXRhaWxzXG4gKiBAcHJvcGVydHkgez9Qcm9jZXNzSW5mb30gcHJvY2VzcyAtIFdlYiB2aWV3IHByb2Nlc3MgZGV0YWlsc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGluZm8gLSBXZWIgdmlldyBkZXRhaWxzIGFzIHJldHVybmVkIGJ5IC9qc29uL3ZlcnNpb24gQ0RQIGVuZHBvaW50LCBmb3IgZXhhbXBsZTpcbiAqIHtcbiAqICBcIkJyb3dzZXJcIjogXCJDaHJvbWUvNzIuMC4zNjAxLjBcIixcbiAqICBcIlByb3RvY29sLVZlcnNpb25cIjogXCIxLjNcIixcbiAqICBcIlVzZXItQWdlbnRcIjogXCJNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xM182KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNzIuMC4zNjAxLjAgU2FmYXJpLzUzNy4zNlwiLFxuICogIFwiVjgtVmVyc2lvblwiOiBcIjcuMi4yMzNcIixcbiAqICBcIldlYktpdC1WZXJzaW9uXCI6IFwiNTM3LjM2IChAY2ZlZGU5ZGIxZDE1NGRlMDQ2OGNiMDUzODQ3OWYzNGMwNzU1YTBmNClcIixcbiAqICBcIndlYlNvY2tldERlYnVnZ2VyVXJsXCI6IFwid3M6Ly9sb2NhbGhvc3Q6OTIyMi9kZXZ0b29scy9icm93c2VyL2IwYjhhNGZiLWJiMTctNDM1OS05NTMzLWE4ZDlmMzkwOGJkOFwiXG4gKiB9XG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgd2ViIHZpZXcgZGV0YWlscyBwcmV2aW91c2x5IGNhY2hlZCBieSBgZ2V0V2Vidmlld3NgIGNhbGxcbiAqXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEFEQiBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IHdlYnZpZXcgVGhlIG5hbWUgb2YgdGhlIHdlYiB2aWV3XG4gKiBAcmV0dXJucyB7P1dlYlZpZXdEZXRhaWxzfSBFaXRoZXIgYHVuZGVmaW5lZGAgb3IgdGhlIHJlY2VudCB3ZWIgdmlldyBkZXRhaWxzXG4gKi9cbmhlbHBlcnMuZ2V0V2Vidmlld0RldGFpbHMgPSBmdW5jdGlvbiBnZXRXZWJ2aWV3RGV0YWlscyAoYWRiLCB3ZWJ2aWV3KSB7XG4gIGNvbnN0IGtleSA9IHRvRGV0YWlsc0NhY2hlS2V5KGFkYiwgd2Vidmlldyk7XG4gIHJldHVybiBXRUJWSUVXU19ERVRBSUxTX0NBQ0hFLmdldChrZXkpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgQ2hyb21lIGRyaXZlciBjYXBhYmlsaXRpZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkXG4gKiBBcHBpdW0gY2FwYWJpbGl0aWVzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgVXNlci1wcm92aWRlZCBjYXBhYmlsaXRpZXMgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gZGV2aWNlSWQgVGhlIGlkZW50aWZpZXIgb2YgdGhlIEFuZHJvaWQgZGV2aWNlIHVuZGVyIHRlc3RcbiAqIEBwYXJhbSB7P1dlYlZpZXdEZXRhaWxzfSB3ZWJWaWV3RGV0YWlsc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGNhcGFiaWxpdGllcyBvYmplY3QuXG4gKiBTZWUgaHR0cHM6Ly9jaHJvbWVkcml2ZXIuY2hyb21pdW0ub3JnL2NhcGFiaWxpdGllcyBmb3IgbW9yZSBkZXRhaWxzLlxuICovXG5oZWxwZXJzLmNyZWF0ZUNocm9tZWRyaXZlckNhcHMgPSBmdW5jdGlvbiBjcmVhdGVDaHJvbWVkcml2ZXJDYXBzIChvcHRzLCBkZXZpY2VJZCwgd2ViVmlld0RldGFpbHMpIHtcbiAgY29uc3QgY2FwcyA9IHsgY2hyb21lT3B0aW9uczoge30gfTtcblxuICBjb25zdCBhbmRyb2lkUGFja2FnZSA9IG9wdHMuY2hyb21lT3B0aW9ucz8uYW5kcm9pZFBhY2thZ2UgfHwgb3B0cy5hcHBQYWNrYWdlO1xuICBpZiAoYW5kcm9pZFBhY2thZ2UpIHtcbiAgICAvLyBjaHJvbWVkcml2ZXIgcmFpc2VzIGFuIGludmFsaWQgYXJndW1lbnQgZXJyb3Igd2hlbiBhbmRyb2lkUGFja2FnZSBpcyAnbnVsbCdcbiAgICBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZFBhY2thZ2UgPSBhbmRyb2lkUGFja2FnZTtcbiAgfVxuICBpZiAoXy5pc0Jvb2xlYW4ob3B0cy5jaHJvbWVVc2VSdW5uaW5nQXBwKSkge1xuICAgIGNhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkVXNlUnVubmluZ0FwcCA9IG9wdHMuY2hyb21lVXNlUnVubmluZ0FwcDtcbiAgfVxuICBpZiAob3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZSkge1xuICAgIGNhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkUGFja2FnZSA9IG9wdHMuY2hyb21lQW5kcm9pZFBhY2thZ2U7XG4gIH1cbiAgaWYgKG9wdHMuY2hyb21lQW5kcm9pZEFjdGl2aXR5KSB7XG4gICAgY2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWRBY3Rpdml0eSA9IG9wdHMuY2hyb21lQW5kcm9pZEFjdGl2aXR5O1xuICB9XG4gIGlmIChvcHRzLmNocm9tZUFuZHJvaWRQcm9jZXNzKSB7XG4gICAgY2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWRQcm9jZXNzID0gb3B0cy5jaHJvbWVBbmRyb2lkUHJvY2VzcztcbiAgfVxuICBpZiAoXy50b0xvd2VyKG9wdHMuYnJvd3Nlck5hbWUpID09PSAnY2hyb21pdW0td2VidmlldycpIHtcbiAgICBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZEFjdGl2aXR5ID0gb3B0cy5hcHBBY3Rpdml0eTtcbiAgfVxuICBpZiAob3B0cy5wYWdlTG9hZFN0cmF0ZWd5KSB7XG4gICAgY2Fwcy5wYWdlTG9hZFN0cmF0ZWd5ID0gb3B0cy5wYWdlTG9hZFN0cmF0ZWd5O1xuICB9XG4gIGlmIChfLnRvTG93ZXIoY2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWRQYWNrYWdlKSA9PT0gJ2Nocm9tZScpIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGV4dHJhY3RlZCBwYWNrYWdlIGZyb20gY29udGV4dCBuYW1lLCBpdCBjb3VsZCBjb21lIGluIGFzIGJhcmVcbiAgICAvLyBcImNocm9tZVwiLCBhbmQgc28gd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGUgZGV0YWlscyBhcmUgY29ycmVjdCwgaW5jbHVkaW5nXG4gICAgLy8gbm90IHVzaW5nIGFuIGFjdGl2aXR5IG9yIHByb2Nlc3MgaWRcbiAgICBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZFBhY2thZ2UgPSBDSFJPTUVfUEFDS0FHRV9OQU1FO1xuICAgIGRlbGV0ZSBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZEFjdGl2aXR5O1xuICAgIGRlbGV0ZSBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZFByb2Nlc3M7XG4gIH1cbiAgLy8gYWRkIGRldmljZSBpZCBmcm9tIGFkYlxuICBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZERldmljZVNlcmlhbCA9IGRldmljZUlkO1xuXG4gIGlmIChvcHRzLmxvZ2dpbmdQcmVmcykge1xuICAgIGNhcHMubG9nZ2luZ1ByZWZzID0gb3B0cy5sb2dnaW5nUHJlZnM7XG4gIH1cbiAgaWYgKG9wdHMuZW5hYmxlUGVyZm9ybWFuY2VMb2dnaW5nKSB7XG4gICAgbG9nZ2VyLndhcm4oYFRoZSAnZW5hYmxlUGVyZm9ybWFuY2VMb2dnaW5nJyBjYXAgaXMgZGVwcmVjYXRlZDsgc2ltcGx5IHVzZSBgICtcbiAgICAgIGB0aGUgJ2xvZ2dpbmdQcmVmcycgY2FwIGluc3RlYWQsIHdpdGggYSAncGVyZm9ybWFuY2UnIGtleSBzZXQgdG8gJ0FMTCdgKTtcbiAgICBjb25zdCBuZXdQcmVmID0ge3BlcmZvcm1hbmNlOiAnQUxMJ307XG4gICAgLy8gZG9uJ3Qgb3ZlcndyaXRlIG90aGVyIGxvZ2dpbmcgcHJlZnMgdGhhdCBoYXZlIGJlZW4gc2VudCBpbiBpZiB0aGV5IGV4aXN0XG4gICAgY2Fwcy5sb2dnaW5nUHJlZnMgPSBjYXBzLmxvZ2dpbmdQcmVmcyA/XG4gICAgICBPYmplY3QuYXNzaWduKHt9LCBjYXBzLmxvZ2dpbmdQcmVmcywgbmV3UHJlZikgOlxuICAgICAgbmV3UHJlZjtcbiAgfVxuXG4gIGlmIChvcHRzLmNocm9tZU9wdGlvbnM/LkFyZ3VtZW50cykge1xuICAgIC8vIG1lcmdlIGBBcmd1bWVudHNgIGFuZCBgYXJnc2BcbiAgICBvcHRzLmNocm9tZU9wdGlvbnMuYXJncyA9IFsuLi4ob3B0cy5jaHJvbWVPcHRpb25zLmFyZ3MgfHwgW10pLCAuLi5vcHRzLmNocm9tZU9wdGlvbnMuQXJndW1lbnRzXTtcbiAgICBkZWxldGUgb3B0cy5jaHJvbWVPcHRpb25zLkFyZ3VtZW50cztcbiAgfVxuXG4gIGlmICh3ZWJWaWV3RGV0YWlscz8ucHJvY2Vzcz8ubmFtZSkge1xuICAgIGNhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkUHJvY2VzcyA9IHdlYlZpZXdEZXRhaWxzLnByb2Nlc3MubmFtZTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZygnUHJlY2FsY3VsYXRlZCBDaHJvbWVkcml2ZXIgY2FwYWJpbGl0aWVzOiAnICtcbiAgICBKU09OLnN0cmluZ2lmeShjYXBzLmNocm9tZU9wdGlvbnMsIG51bGwsIDIpKTtcblxuICBjb25zdCBwcm90ZWN0ZWRDYXBOYW1lcyA9IFtdO1xuICBmb3IgKGNvbnN0IFtvcHQsIHZhbF0gb2YgXy50b1BhaXJzKG9wdHMuY2hyb21lT3B0aW9ucykpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChjYXBzLmNocm9tZU9wdGlvbnNbb3B0XSkpIHtcbiAgICAgIGNhcHMuY2hyb21lT3B0aW9uc1tvcHRdID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm90ZWN0ZWRDYXBOYW1lcy5wdXNoKG9wdCk7XG4gICAgfVxuICB9XG4gIGlmICghXy5pc0VtcHR5KHByb3RlY3RlZENhcE5hbWVzKSkge1xuICAgIGxvZ2dlci5pbmZvKCdUaGUgZm9sbG93aW5nIENocm9tZWRyaXZlciBjYXBhYmlsaXRpZXMgY2Fubm90IGJlIG92ZXJyaWRkZW4gJyArXG4gICAgICAnYnkgdGhlIHByb3ZpZGVkIGNocm9tZU9wdGlvbnM6Jyk7XG4gICAgZm9yIChjb25zdCBvcHROYW1lIG9mIHByb3RlY3RlZENhcE5hbWVzKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgICAke29wdE5hbWV9ICgke0pTT04uc3RyaW5naWZ5KG9wdHMuY2hyb21lT3B0aW9uc1tvcHROYW1lXSl9KWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjYXBzO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaGVscGVycztcbmV4cG9ydCB7IGhlbHBlcnMsIE5BVElWRV9XSU4sIFdFQlZJRVdfV0lOLCBXRUJWSUVXX0JBU0UsIENIUk9NSVVNX1dJTiB9O1xuIl0sImZpbGUiOiJsaWIvd2Vidmlldy1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
package/lib/commands/context.js
CHANGED
|
@@ -435,7 +435,7 @@ helpers.setupNewChromedriver = async function setupNewChromedriver (opts, curDev
|
|
|
435
435
|
}
|
|
436
436
|
}
|
|
437
437
|
|
|
438
|
-
const caps = webviewHelpers.createChromedriverCaps(opts, curDeviceId);
|
|
438
|
+
const caps = webviewHelpers.createChromedriverCaps(opts, curDeviceId, details);
|
|
439
439
|
log.debug(`Before starting chromedriver, androidPackage is '${caps.chromeOptions.androidPackage}'`);
|
|
440
440
|
await chromedriver.start(caps);
|
|
441
441
|
return chromedriver;
|
package/lib/webview-helpers.js
CHANGED
|
@@ -383,6 +383,7 @@ helpers.getWebViewsMapping = async function getWebViewsMapping (adb, {
|
|
|
383
383
|
webviewMapping.webviewName = null;
|
|
384
384
|
|
|
385
385
|
let wvName = webview;
|
|
386
|
+
let process = undefined;
|
|
386
387
|
if (!androidDeviceSocket) {
|
|
387
388
|
const pkgMatch = WEBVIEW_PKG_PATTERN.exec(webview);
|
|
388
389
|
try {
|
|
@@ -390,6 +391,11 @@ helpers.getWebViewsMapping = async function getWebViewsMapping (adb, {
|
|
|
390
391
|
// package names could not start with a digit
|
|
391
392
|
const pkg = pkgMatch ? pkgMatch[1] : await helpers.procFromWebview(adb, webview);
|
|
392
393
|
wvName = `${WEBVIEW_BASE}${pkg}`;
|
|
394
|
+
const pidMatch = WEBVIEW_PID_PATTERN.exec(webview);
|
|
395
|
+
process = {
|
|
396
|
+
name: pkg,
|
|
397
|
+
id: pidMatch ? pidMatch[1] : null,
|
|
398
|
+
};
|
|
393
399
|
} catch (e) {
|
|
394
400
|
logger.warn(e.message);
|
|
395
401
|
continue;
|
|
@@ -398,8 +404,8 @@ helpers.getWebViewsMapping = async function getWebViewsMapping (adb, {
|
|
|
398
404
|
|
|
399
405
|
webviewMapping.webviewName = wvName;
|
|
400
406
|
const key = toDetailsCacheKey(adb, wvName);
|
|
401
|
-
if (info) {
|
|
402
|
-
WEBVIEWS_DETAILS_CACHE.set(key, { info });
|
|
407
|
+
if (info || process) {
|
|
408
|
+
WEBVIEWS_DETAILS_CACHE.set(key, { info, process });
|
|
403
409
|
} else if (WEBVIEWS_DETAILS_CACHE.has(key)) {
|
|
404
410
|
WEBVIEWS_DETAILS_CACHE.del(key);
|
|
405
411
|
}
|
|
@@ -407,8 +413,15 @@ helpers.getWebViewsMapping = async function getWebViewsMapping (adb, {
|
|
|
407
413
|
return webviewsMapping;
|
|
408
414
|
};
|
|
409
415
|
|
|
416
|
+
/**
|
|
417
|
+
* @typedef {Object} ProcessInfo
|
|
418
|
+
* @property {string} name The process name
|
|
419
|
+
* @property {?string} id The process id (if could be retrieved)
|
|
420
|
+
*/
|
|
421
|
+
|
|
410
422
|
/**
|
|
411
423
|
* @typedef {Object} WebViewDetails
|
|
424
|
+
* @property {?ProcessInfo} process - Web view process details
|
|
412
425
|
* @property {Object} info - Web view details as returned by /json/version CDP endpoint, for example:
|
|
413
426
|
* {
|
|
414
427
|
* "Browser": "Chrome/72.0.3601.0",
|
|
@@ -438,10 +451,11 @@ helpers.getWebviewDetails = function getWebviewDetails (adb, webview) {
|
|
|
438
451
|
*
|
|
439
452
|
* @param {Object} opts User-provided capabilities object
|
|
440
453
|
* @param {string} deviceId The identifier of the Android device under test
|
|
454
|
+
* @param {?WebViewDetails} webViewDetails
|
|
441
455
|
* @returns {Object} The capabilities object.
|
|
442
456
|
* See https://chromedriver.chromium.org/capabilities for more details.
|
|
443
457
|
*/
|
|
444
|
-
helpers.createChromedriverCaps = function createChromedriverCaps (opts, deviceId) {
|
|
458
|
+
helpers.createChromedriverCaps = function createChromedriverCaps (opts, deviceId, webViewDetails) {
|
|
445
459
|
const caps = { chromeOptions: {} };
|
|
446
460
|
|
|
447
461
|
const androidPackage = opts.chromeOptions?.androidPackage || opts.appPackage;
|
|
@@ -497,6 +511,10 @@ helpers.createChromedriverCaps = function createChromedriverCaps (opts, deviceId
|
|
|
497
511
|
delete opts.chromeOptions.Arguments;
|
|
498
512
|
}
|
|
499
513
|
|
|
514
|
+
if (webViewDetails?.process?.name) {
|
|
515
|
+
caps.chromeOptions.androidProcess = webViewDetails.process.name;
|
|
516
|
+
}
|
|
517
|
+
|
|
500
518
|
logger.debug('Precalculated Chromedriver capabilities: ' +
|
|
501
519
|
JSON.stringify(caps.chromeOptions, null, 2));
|
|
502
520
|
|
package/package.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"mobile",
|
|
10
10
|
"mobile testing"
|
|
11
11
|
],
|
|
12
|
-
"version": "4.43.
|
|
12
|
+
"version": "4.43.1",
|
|
13
13
|
"author": "appium",
|
|
14
14
|
"license": "Apache-2.0",
|
|
15
15
|
"repository": {
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"mocha": "^8.0.1",
|
|
90
90
|
"mock-fs": "^4.5.0",
|
|
91
91
|
"pre-commit": "^1.1.3",
|
|
92
|
-
"sinon": "^
|
|
92
|
+
"sinon": "^10.0.0",
|
|
93
93
|
"xmldom": "^0.x",
|
|
94
94
|
"xpath": "^0.x"
|
|
95
95
|
}
|