appium-remote-debugger 9.1.12 → 9.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/build/index.js +1 -1
- package/build/lib/atoms.js +1 -1
- package/build/lib/atoms.js.map +1 -1
- package/build/lib/logger.js +1 -1
- package/build/lib/logger.js.map +1 -1
- package/build/lib/mixins/connect.js +1 -1
- package/build/lib/mixins/connect.js.map +1 -1
- package/build/lib/mixins/events.js +1 -1
- package/build/lib/mixins/events.js.map +1 -1
- package/build/lib/mixins/execute.js +1 -1
- package/build/lib/mixins/execute.js.map +1 -1
- package/build/lib/mixins/index.js +1 -1
- package/build/lib/mixins/index.js.map +1 -1
- package/build/lib/mixins/message-handlers.js +1 -1
- package/build/lib/mixins/message-handlers.js.map +1 -1
- package/build/lib/mixins/navigate.js +1 -1
- package/build/lib/mixins/navigate.js.map +1 -1
- package/build/lib/protocol/index.js +16 -3
- package/build/lib/protocol/index.js.map +1 -1
- package/build/lib/remote-debugger-real-device.js +1 -1
- package/build/lib/remote-debugger-real-device.js.map +1 -1
- package/build/lib/remote-debugger.js +18 -3
- package/build/lib/remote-debugger.js.map +1 -1
- package/build/lib/rpc/index.js +1 -1
- package/build/lib/rpc/index.js.map +1 -1
- package/build/lib/rpc/remote-messages.js +1 -1
- package/build/lib/rpc/remote-messages.js.map +1 -1
- package/build/lib/rpc/rpc-client-real-device.js +1 -1
- package/build/lib/rpc/rpc-client-real-device.js.map +1 -1
- package/build/lib/rpc/rpc-client-simulator.js +1 -1
- package/build/lib/rpc/rpc-client-simulator.js.map +1 -1
- package/build/lib/rpc/rpc-client.js +1 -1
- package/build/lib/rpc/rpc-client.js.map +1 -1
- package/build/lib/rpc/rpc-message-handler.js +1 -1
- package/build/lib/rpc/rpc-message-handler.js.map +1 -1
- package/build/lib/utils.js +1 -1
- package/build/lib/utils.js.map +1 -1
- package/lib/protocol/index.js +16 -2
- package/lib/remote-debugger.js +20 -2
- package/package.json +1 -1
|
@@ -450,4 +450,4 @@ class RpcClient {
|
|
|
450
450
|
}
|
|
451
451
|
}
|
|
452
452
|
exports.default = RpcClient;
|
|
453
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEQVRBX0xPR19MRU5HVEgiLCJsZW5ndGgiLCJXQUlUX0ZPUl9UQVJHRVRfVElNRU9VVCIsIldBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCIsIk1JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEIiwiTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMiLCJpc1RhcmdldEJhc2VkIiwiaXNTYWZhcmkiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc0hpZ2hWZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsImxvZyIsImRlYnVnIiwiUnBjQ2xpZW50IiwiY29uc3RydWN0b3IiLCJvcHRzIiwiX3RhcmdldHMiLCJfc2hvdWxkQ2hlY2tGb3JUYXJnZXQiLCJzaG91bGRDaGVja0ZvclRhcmdldCIsImJ1bmRsZUlkIiwibG9nQWxsQ29tbXVuaWNhdGlvbiIsImxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwid2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGgiLCJzb2NrZXRDaHVua1NpemUiLCJmdWxsUGFnZUluaXRpYWxpemF0aW9uIiwiaXNDb25uZWN0ZWQiLCJjb25uSWQiLCJ1dWlkVjQiLCJzZW5kZXJJZCIsIm1zZ0lkIiwiX2NvbnRleHRzIiwiY29udGV4dHMiLCJuZWVkc1RhcmdldCIsInRhcmdldHMiLCJjb25uZWN0ZWQiLCJvbiIsImV2ZW50IiwibGlzdGVuZXIiLCJtZXNzYWdlSGFuZGxlciIsIm9uY2UiLCJvZmYiLCJ3YXJuIiwiX2lzVGFyZ2V0QmFzZWQiLCJyZW1vdGVNZXNzYWdlcyIsIlJlbW90ZU1lc3NhZ2VzIiwiUnBjTWVzc2FnZUhhbmRsZXIiLCJhZGRUYXJnZXQiLCJiaW5kIiwidXBkYXRlVGFyZ2V0IiwicmVtb3ZlVGFyZ2V0Iiwib25FeGVjdXRpb25Db250ZXh0Q3JlYXRlZCIsIm9uR2FyYmFnZUNvbGxlY3RlZCIsIndhaXRGb3JUYXJnZXQiLCJhcHBJZEtleSIsInBhZ2VJZEtleSIsImZvcmNlIiwiZ2V0VGFyZ2V0Iiwid2FpdEZvckNvbmRpdGlvbiIsIl8iLCJpc0VtcHR5Iiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVycm9yIiwiZXJyIiwibWVzc2FnZSIsImluY2x1ZGVzIiwiRXJyb3IiLCJzZW5kIiwiY29tbWFuZCIsIndhaXRGb3JSZXNwb25zZSIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsInNlbmRUb0RldmljZSIsInRvTG93ZXJDYXNlIiwiaW5mbyIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJ3cmFwcGVyTXNnSWQiLCJ0b1N0cmluZyIsInRhcmdldElkIiwiZnVsbE9wdHMiLCJkZWZhdWx0cyIsImlkIiwiY21kIiwiZ2V0UmVtb3RlQ29tbWFuZCIsIl9fYXJndW1lbnQiLCJXSVJTb2NrZXREYXRhS2V5IiwiaXNOaWwiLCJCdWZmZXIiLCJmcm9tIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1lc3NhZ2VIYW5kbGVkIiwidHJ1bmNhdGUiLCJsaXN0ZW5lcnMiLCJfX3NlbGVjdG9yIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImFyZ3MiLCJ2YWx1ZSIsImNvZGUiLCJtc2ciLCJyZXMiLCJzZW5kTWVzc2FnZSIsImNvbm5lY3QiLCJkaXNjb25uZWN0IiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwicmVjZWl2ZSIsImFwcCIsInRhcmdldEluZm8iLCJwZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uIiwiaXNQcm92aXNpb25hbCIsImhhcyIsIm9sZFRhcmdldElkIiwibmV3VGFyZ2V0SWQiLCJwcm92aXNpb25hbCIsInBhZ2UiLCJ0b1BhaXJzIiwic2VsZWN0UGFnZSIsInNlbmRPcHRzIiwiZW5hYmxlZCIsIk9iamVjdCIsImFzc2lnbiIsImluaXRpYWxpemVQYWdlRnVsbCIsImluaXRpYWxpemVQYWdlIiwiZGlzYWJsZWQiLCJpbnN0cnVtZW50cyIsImFjdGl2ZSIsInN0YXRlIiwiZGVwdGgiLCJzaG91bGRQYXVzZSIsImxvZ2dpbmdDaGFubmVscyIsInNvdXJjZSIsImNoYW5uZWxzIiwibWFwIiwiZW50cnkiLCJsZXZlbCIsInNlbGVjdEFwcCIsIm9uQXBwQ2hhbmdlIiwiZGljdCIsIm9sZEFwcElkS2V5IiwiV0lSSG9zdEFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsImNvcnJlY3RBcHBJZEtleSIsIldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsInBhZ2VEaWN0IiwiY29ubmVjdGVkQXBwSWRLZXkiLCJjb250ZXh0IiwicHVzaCIsIm9uU2NyaXB0UGFyc2VkIiwic2NyaXB0SW5mbyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9ycGMvcnBjLWNsaWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVtb3RlTWVzc2FnZXMgZnJvbSAnLi9yZW1vdGUtbWVzc2FnZXMnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgUnBjTWVzc2FnZUhhbmRsZXIgZnJvbSAnLi9ycGMtbWVzc2FnZS1oYW5kbGVyJztcbmltcG9ydCB7IHV0aWwsIHRpbWluZyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cblxuY29uc3QgREFUQV9MT0dfTEVOR1RIID0ge2xlbmd0aDogMjAwfTtcblxuY29uc3QgV0FJVF9GT1JfVEFSR0VUX1RJTUVPVVQgPSAxMDAwMDtcbmNvbnN0IFdBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCA9IDEwMDA7XG5cbmNvbnN0IE1JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEID0gJzEyLjInO1xuXG4vLyBgVGFyZ2V0LmV4aXN0c2AgcHJvdG9jb2wgbWV0aG9kIHdhcyByZW1vdmVkIGZyb20gV2ViS2l0IGluIDEzLjRcbmNvbnN0IE1JTl9QTEFURk9STV9OT19UQVJHRVRfRVhJU1RTID0gJzEzLjQnO1xuXG5mdW5jdGlvbiBpc1RhcmdldEJhc2VkIChpc1NhZmFyaSwgcGxhdGZvcm1WZXJzaW9uKSB7XG4gIC8vIE9uIGlPUyAxMi4yIHRoZSBtZXNzYWdlcyBnZXQgc2VudCB0aHJvdWdoIHRoZSBUYXJnZXQgZG9tYWluXG4gIC8vIE9uIGlPUyAxMy4wKywgV0tXZWJWaWV3IGFsc28gbmVlZHMgdG8gZm9sbG93IHRoZSBUYXJnZXQgZG9tYWluLFxuICAvLyBzbyBoZXJlIG9ubHkgY2hlY2sgdGhlIHRhcmdldCBPUyB2ZXJzaW9uIGFzIHRoZSBkZWZhdWx0IGJlaGF2aW91ci5cbiAgY29uc3QgaXNIaWdoVmVyc2lvbiA9IHV0aWwuY29tcGFyZVZlcnNpb25zKHBsYXRmb3JtVmVyc2lvbiwgJz49JywgTUlOX1BMQVRGT1JNX0ZPUl9UQVJHRVRfQkFTRUQpO1xuICBsb2cuZGVidWcoYENoZWNraW5nIHdoaWNoIGNvbW11bmljYXRpb24gc3R5bGUgdG8gdXNlICgke2lzU2FmYXJpID8gJycgOiAnbm9uLSd9U2FmYXJpIG9uIHBsYXRmb3JtIHZlcnNpb24gJyR7cGxhdGZvcm1WZXJzaW9ufScpYCk7XG4gIGxvZy5kZWJ1ZyhgUGxhdGZvcm0gdmVyc2lvbiBlcXVhbCBvciBoaWdoZXIgdGhhbiAnJHtNSU5fUExBVEZPUk1fRk9SX1RBUkdFVF9CQVNFRH0nOiAke2lzSGlnaFZlcnNpb259YCk7XG4gIHJldHVybiBpc0hpZ2hWZXJzaW9uO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBScGNDbGllbnQge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgdGhpcy5fdGFyZ2V0cyA9IFtdO1xuICAgIHRoaXMuX3Nob3VsZENoZWNrRm9yVGFyZ2V0ID0gISFvcHRzLnNob3VsZENoZWNrRm9yVGFyZ2V0O1xuXG4gICAgY29uc3Qge1xuICAgICAgYnVuZGxlSWQsXG4gICAgICBwbGF0Zm9ybVZlcnNpb24gPSB7fSxcbiAgICAgIGlzU2FmYXJpID0gdHJ1ZSxcbiAgICAgIGxvZ0FsbENvbW11bmljYXRpb24gPSBmYWxzZSxcbiAgICAgIGxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wID0gZmFsc2UsXG4gICAgICB3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aCxcbiAgICAgIHNvY2tldENodW5rU2l6ZSxcbiAgICAgIGZ1bGxQYWdlSW5pdGlhbGl6YXRpb24gPSBmYWxzZSxcbiAgICB9ID0gb3B0cztcblxuICAgIHRoaXMuaXNTYWZhcmkgPSBpc1NhZmFyaTtcblxuICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNvbm5JZCA9IHV0aWwudXVpZFY0KCk7XG4gICAgdGhpcy5zZW5kZXJJZCA9IHV0aWwudXVpZFY0KCk7XG4gICAgdGhpcy5tc2dJZCA9IDA7XG5cbiAgICB0aGlzLmxvZ0FsbENvbW11bmljYXRpb24gPSBsb2dBbGxDb21tdW5pY2F0aW9uO1xuICAgIHRoaXMubG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAgPSBsb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcDtcbiAgICB0aGlzLnNvY2tldENodW5rU2l6ZSA9IHNvY2tldENodW5rU2l6ZTtcbiAgICB0aGlzLndlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoID0gd2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGg7XG5cbiAgICB0aGlzLmZ1bGxQYWdlSW5pdGlhbGl6YXRpb24gPSBmdWxsUGFnZUluaXRpYWxpemF0aW9uO1xuXG4gICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgIHRoaXMucGxhdGZvcm1WZXJzaW9uID0gcGxhdGZvcm1WZXJzaW9uO1xuXG4gICAgdGhpcy5fY29udGV4dHMgPSBbXTtcbiAgICB0aGlzLl90YXJnZXRzID0ge307XG5cbiAgICAvLyBzdGFydCB3aXRoIGEgYmVzdCBndWVzcyBmb3IgdGhlIHByb3RvY29sXG4gICAgdGhpcy5pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZChpc1NhZmFyaSwgdGhpcy5wbGF0Zm9ybVZlcnNpb24pO1xuICB9XG5cbiAgZ2V0IGNvbnRleHRzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dHM7XG4gIH1cblxuICBnZXQgbmVlZHNUYXJnZXQgKCkge1xuICAgIHJldHVybiB0aGlzLnNob3VsZENoZWNrRm9yVGFyZ2V0ICYmIHRoaXMuaXNUYXJnZXRCYXNlZDtcbiAgfVxuXG4gIGdldCB0YXJnZXRzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFyZ2V0cztcbiAgfVxuXG4gIGdldCBzaG91bGRDaGVja0ZvclRhcmdldCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3VsZENoZWNrRm9yVGFyZ2V0O1xuICB9XG5cbiAgc2V0IHNob3VsZENoZWNrRm9yVGFyZ2V0IChzaG91bGRDaGVja0ZvclRhcmdldCkge1xuICAgIHRoaXMuX3Nob3VsZENoZWNrRm9yVGFyZ2V0ID0gISFzaG91bGRDaGVja0ZvclRhcmdldDtcbiAgfVxuXG4gIGdldCBpc0Nvbm5lY3RlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGVkO1xuICB9XG5cbiAgc2V0IGlzQ29ubmVjdGVkIChjb25uZWN0ZWQpIHtcbiAgICB0aGlzLmNvbm5lY3RlZCA9ICEhY29ubmVjdGVkO1xuICB9XG5cbiAgb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub24oZXZlbnQsIGxpc3RlbmVyKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9uY2UgKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub25jZShldmVudCwgbGlzdGVuZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb2ZmIChldmVudCwgbGlzdGVuZXIpIHtcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9mZihldmVudCwgbGlzdGVuZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0IGlzVGFyZ2V0QmFzZWQgKGlzVGFyZ2V0QmFzZWQpIHtcbiAgICBsb2cud2FybihgU2V0dGluZyBjb21tdW5pY2F0aW9uIHByb3RvY29sOiB1c2luZyAke2lzVGFyZ2V0QmFzZWQgPyAnVGFyZ2V0LWJhc2VkJyA6ICdmdWxsIFdlYiBJbnNwZWN0b3IgcHJvdG9jb2wnfSBjb21tdW5pY2F0aW9uYCk7XG4gICAgdGhpcy5faXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG5cbiAgICBpZiAoIXRoaXMucmVtb3RlTWVzc2FnZXMpIHtcbiAgICAgIHRoaXMucmVtb3RlTWVzc2FnZXMgPSBuZXcgUmVtb3RlTWVzc2FnZXMoaXNUYXJnZXRCYXNlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVtb3RlTWVzc2FnZXMuaXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gbmV3IFJwY01lc3NhZ2VIYW5kbGVyKGlzVGFyZ2V0QmFzZWQpO1xuXG4gICAgICAvLyBhZGQgaGFuZGxlcnMgZm9yIGludGVybmFsIGV2ZW50c1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignVGFyZ2V0LnRhcmdldENyZWF0ZWQnLCB0aGlzLmFkZFRhcmdldC5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub24oJ1RhcmdldC5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCcsIHRoaXMudXBkYXRlVGFyZ2V0LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignVGFyZ2V0LnRhcmdldERlc3Ryb3llZCcsIHRoaXMucmVtb3ZlVGFyZ2V0LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignUnVudGltZS5leGVjdXRpb25Db250ZXh0Q3JlYXRlZCcsIHRoaXMub25FeGVjdXRpb25Db250ZXh0Q3JlYXRlZC5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub24oJ0hlYXAuZ2FyYmFnZUNvbGxlY3RlZCcsIHRoaXMub25HYXJiYWdlQ29sbGVjdGVkLmJpbmQodGhpcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLmlzVGFyZ2V0QmFzZWQgPSBpc1RhcmdldEJhc2VkO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc1RhcmdldEJhc2VkICgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNUYXJnZXRCYXNlZDtcbiAgfVxuXG4gIGFzeW5jIHdhaXRGb3JUYXJnZXQgKGFwcElkS2V5LCBwYWdlSWRLZXksIGZvcmNlID0gZmFsc2UpIHtcbiAgICBpZiAoIWZvcmNlICYmICF0aGlzLm5lZWRzVGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2V0VGFyZ2V0KGFwcElkS2V5LCBwYWdlSWRLZXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlIHdhaXRpbmcgaXMgbmVjZXNzYXJ5IHRvIHNlZSB3aGF0IHRoZSB0YXJnZXQgaXNcbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbigoKSA9PiAhXy5pc0VtcHR5KHRoaXMuZ2V0VGFyZ2V0KGFwcElkS2V5LCBwYWdlSWRLZXkpKSwge1xuICAgICAgICB3YWl0TXM6IFdBSVRfRk9SX1RBUkdFVF9USU1FT1VULFxuICAgICAgICBpbnRlcnZhbE1zOiBXQUlUX0ZPUl9UQVJHRVRfSU5URVJWQUwsXG4gICAgICAgIGVycm9yOiAnTm8gdGFyZ2V0cyBmb3VuZCwgdW5hYmxlIHRvIGNvbW11bmljYXRlIHdpdGggZGV2aWNlJyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcygnQ29uZGl0aW9uIHVubWV0JykpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB0YXJnZXRzIGZvdW5kLCB1bmFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBkZXZpY2UnKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZW5kIChjb21tYW5kLCBvcHRzID0ge30sIHdhaXRGb3JSZXNwb25zZSA9IHRydWUpIHtcbiAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgIGNvbnN0IHtcbiAgICAgIGFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5XG4gICAgfSA9IG9wdHM7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghXy5pc0VtcHR5KGFwcElkS2V5KSAmJiAhXy5pc0VtcHR5KHBhZ2VJZEtleSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yVGFyZ2V0KGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZFRvRGV2aWNlKGNvbW1hbmQsIG9wdHMsIHdhaXRGb3JSZXNwb25zZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsZXQgeyBtZXNzYWdlID0gJycgfSA9IGVycjtcbiAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcyhgJ3RhcmdldCcgZG9tYWluIHdhcyBub3QgZm91bmRgKSkge1xuICAgICAgICBsb2cuaW5mbygnVGhlIHRhcmdldCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBUYXJnZXQgYmFzZWQgY29tbXVuaWNhdGlvbi4gJyArXG4gICAgICAgICAgJ1dpbGwgZm9sbG93IG5vbi10YXJnZXQgYmFzZWQgY29tbXVuaWNhdGlvbi4nKTtcbiAgICAgICAgdGhpcy5pc1RhcmdldEJhc2VkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNlbmRUb0RldmljZShjb21tYW5kLCBvcHRzLCB3YWl0Rm9yUmVzcG9uc2UpO1xuICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmluY2x1ZGVzKGBkb21haW4gd2FzIG5vdCBmb3VuZGApIHx8XG4gICAgICAgICAgbWVzc2FnZS5pbmNsdWRlcyhgc29tZSBhcmd1bWVudHMgb2YgbWV0aG9kYCkgfHxcbiAgICAgICAgICBtZXNzYWdlLmluY2x1ZGVzKGBtaXNzaW5nIHRhcmdldGApKSB7XG4gICAgICAgIHRoaXMuaXNUYXJnZXRCYXNlZCA9IHRydWU7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclRhcmdldChhcHBJZEtleSwgcGFnZUlkS2V5KTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZFRvRGV2aWNlKGNvbW1hbmQsIG9wdHMsIHdhaXRGb3JSZXNwb25zZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGxvZy5kZWJ1ZyhgU2VuZGluZyB0byBXZWIgSW5zcGVjdG9yIHRvb2sgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZW5kVG9EZXZpY2UgKGNvbW1hbmQsIG9wdHMgPSB7fSwgd2FpdEZvclJlc3BvbnNlID0gdHJ1ZSkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgQihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBwcm9taXNlIHRvIGJlIHJlc29sdmVkIHdoZW5ldmVyIHJlbW90ZSBkZWJ1Z2dlclxuICAgICAgLy8gcmVwbGllcyB0byBvdXIgcmVxdWVzdFxuXG4gICAgICAvLyBrZWVwIHRyYWNrIG9mIHRoZSBtZXNzYWdlcyBjb21pbmcgYW5kIGdvaW5nIHVzaW5nIGEgc2ltcGxlIHNlcXVlbnRpYWwgaWRcbiAgICAgIGNvbnN0IG1zZ0lkID0gdGhpcy5tc2dJZCsrO1xuICAgICAgbGV0IHdyYXBwZXJNc2dJZCA9IG1zZ0lkO1xuICAgICAgaWYgKHRoaXMuaXNUYXJnZXRCYXNlZCkge1xuICAgICAgICAvLyBmb3IgdGFyZ2V0LWJhc2UgY29tbXVuaWNhdGlvbiwgZXZlcnl0aGluZyBpcyB3cmFwcGVkIHVwXG4gICAgICAgIHdyYXBwZXJNc2dJZCA9IHRoaXMubXNnSWQrKztcbiAgICAgICAgLy8gYWNrbm93bGVkZ2Ugd3JhcHBlciBtZXNzYWdlXG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub24od3JhcHBlck1zZ0lkLnRvU3RyaW5nKCksIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcHBJZEtleSA9IG9wdHMuYXBwSWRLZXk7XG4gICAgICBjb25zdCBwYWdlSWRLZXkgPSBvcHRzLnBhZ2VJZEtleTtcbiAgICAgIGNvbnN0IHRhcmdldElkID0gdGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG5cbiAgICAgIC8vIHJldHJpZXZlIHRoZSBjb3JyZWN0IGNvbW1hbmQgdG8gc2VuZFxuICAgICAgY29uc3QgZnVsbE9wdHMgPSBfLmRlZmF1bHRzKHtcbiAgICAgICAgY29ubklkOiB0aGlzLmNvbm5JZCxcbiAgICAgICAgc2VuZGVySWQ6IHRoaXMuc2VuZGVySWQsXG4gICAgICAgIHRhcmdldElkLFxuICAgICAgICBpZDogbXNnSWQsXG4gICAgICB9LCBvcHRzKTtcbiAgICAgIGNvbnN0IGNtZCA9IHRoaXMucmVtb3RlTWVzc2FnZXMuZ2V0UmVtb3RlQ29tbWFuZChjb21tYW5kLCBmdWxsT3B0cyk7XG5cbiAgICAgIGlmIChjbWQ/Ll9fYXJndW1lbnQ/LldJUlNvY2tldERhdGFLZXkpIHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBtZXNzYWdlIGJlaW5nIHNlbnQgaGFzIGFsbCB0aGUgaW5mb3JtYXRpb24gdGhhdCBpcyBuZWVkZWRcbiAgICAgICAgaWYgKF8uaXNOaWwoY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleS5pZCkpIHtcbiAgICAgICAgICBjbWQuX19hcmd1bWVudC5XSVJTb2NrZXREYXRhS2V5LmlkID0gd3JhcHBlck1zZ0lkO1xuICAgICAgICB9XG4gICAgICAgIGNtZC5fX2FyZ3VtZW50LldJUlNvY2tldERhdGFLZXkgPVxuICAgICAgICAgIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGNtZC5fX2FyZ3VtZW50LldJUlNvY2tldERhdGFLZXkpKTtcbiAgICAgIH1cblxuICAgICAgbGV0IG1lc3NhZ2VIYW5kbGVkID0gdHJ1ZTtcbiAgICAgIGlmICghd2FpdEZvclJlc3BvbnNlKSB7XG4gICAgICAgIC8vIHRoZSBwcm9taXNlIHdpbGwgYmUgcmVzb2x2ZWQgYXMgc29vbiBhcyB0aGUgc29ja2V0IGhhcyBiZWVuIHNlbnRcbiAgICAgICAgbWVzc2FnZUhhbmRsZWQgPSBmYWxzZTtcbiAgICAgICAgLy8gZG8gbm90IGxvZyByZWNlaXB0c1xuICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uY2UobXNnSWQudG9TdHJpbmcoKSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIC8vIHdlIGFyZSBub3Qgd2FpdGluZyBmb3IgdGhpcywgYW5kIGlmIGl0IGVycm9ycyBpdCBpcyBtb3N0IGxpa2VseVxuICAgICAgICAgICAgLy8gYSBwcm90b2NvbCBjaGFuZ2UuIExvZyBhbmQgY2hlY2sgZHVyaW5nIHRlc3RpbmdcbiAgICAgICAgICAgIGxvZy5lcnJvcihgUmVjZWl2ZWQgZXJyb3IgZnJvbSBzZW5kIHRoYXQgaXMgbm90IGJlaW5nIHdhaXRlZCBmb3IgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoZXJyKSwgREFUQV9MT0dfTEVOR1RIKX0nYCk7XG4gICAgICAgICAgICAvLyByZWplY3QsIHRob3VnaCBpdCBpcyB2ZXJ5IHJhcmUgdGhhdCB0aGlzIHdpbGwgYmUgdHJpZ2dlcmVkLCBzaW5jZVxuICAgICAgICAgICAgLy8gdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgZGlyZWN0bHR5IGFmdGVyIHNlbmQuIE9uIHRoZSBvZmYgY2hhbmNlLFxuICAgICAgICAgICAgLy8gdGhvdWdoLCBpdCB3aWxsIGFsZXJ0IG9mIGEgcHJvdG9jb2wgY2hhbmdlLlxuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tZXNzYWdlSGFuZGxlci5saXN0ZW5lcnMoY21kLl9fc2VsZWN0b3IpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLnByZXBlbmRPbmNlTGlzdGVuZXIoY21kLl9fc2VsZWN0b3IsIGZ1bmN0aW9uIChlcnIsIC4uLmFyZ3MpIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgcmVzcG9uc2UgZnJvbSBzZW5kIChpZDogJHttc2dJZH0pOiAnJHtfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KGFyZ3MpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICByZXNvbHZlKGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoY21kPy5fX2FyZ3VtZW50Py5XSVJTb2NrZXREYXRhS2V5KSB7XG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub25jZShtc2dJZC50b1N0cmluZygpLCBmdW5jdGlvbiAoZXJyLCB2YWx1ZSkge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBSZW1vdGUgZGVidWdnZXIgZXJyb3Igd2l0aCBjb2RlICcke2Vyci5jb2RlfSc6ICR7ZXJyLm1lc3NhZ2V9YCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsb2cuZGVidWcoYFJlY2VpdmVkIGRhdGEgcmVzcG9uc2UgZnJvbSBzZW5kIChpZDogJHttc2dJZH0pOiAnJHtfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSwgREFUQV9MT0dfTEVOR1RIKX0nYCk7XG4gICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm90aGluZyBlbHNlIGlzIGhhbmRsaW5nIHRoaW5ncywgc28ganVzdCByZXNvbHZlIHdoZW4gdGhlIG1lc3NhZ2UgaXMgc2VudFxuICAgICAgICBtZXNzYWdlSGFuZGxlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtc2cgPSBgU2VuZGluZyAnJHtjbWQuX19zZWxlY3Rvcn0nIG1lc3NhZ2VgICtcbiAgICAgICAgKGZ1bGxPcHRzLmFwcElkS2V5ID8gYCB0byBhcHAgJyR7ZnVsbE9wdHMuYXBwSWRLZXl9J2AgOiAnJykgK1xuICAgICAgICAoZnVsbE9wdHMucGFnZUlkS2V5ID8gYCwgcGFnZSAnJHtmdWxsT3B0cy5wYWdlSWRLZXl9J2AgOiAnJykgK1xuICAgICAgICAodGhpcy5uZWVkc1RhcmdldCAmJiB0YXJnZXRJZCA/IGAsIHRhcmdldCAnJHt0YXJnZXRJZH0nYCA6ICcnKSArXG4gICAgICAgIGAgKGlkOiAke21zZ0lkfSk6ICcke2NvbW1hbmR9J2A7XG4gICAgICBsb2cuZGVidWcobXNnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VuZE1lc3NhZ2UoY21kKTtcbiAgICAgICAgaWYgKCFtZXNzYWdlSGFuZGxlZCkge1xuICAgICAgICAgIC8vIFRoZXJlIGFyZSBubyBoYW5kbGVycyB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGJlZm9yZSByZXNvbHZpbmcsXG4gICAgICAgICAgLy8gYW5kIG5vIGVycm9ycyBzZW5kaW5nIHRoZSBtZXNzYWdlIG92ZXIgdGhlIHNvY2tldCwgc28gcmVzb2x2ZVxuICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNvbm5lY3QgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN1Yi1jbGFzc2VzIG5lZWQgdG8gaW1wbGVtZW50IGEgJ2Nvbm5lY3QnIGZ1bmN0aW9uYCk7XG4gIH1cblxuICBhc3luYyBkaXNjb25uZWN0ICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRNZXNzYWdlICgvKiBjb21tYW5kICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHRocm93IG5ldyBFcnJvcihgU3ViLWNsYXNzZXMgbmVlZCB0byBpbXBsZW1lbnQgYSAnc2VuZE1lc3NhZ2UnIGZ1bmN0aW9uYCk7XG4gIH1cblxuICBhc3luYyByZWNlaXZlICgvKiBkYXRhICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHRocm93IG5ldyBFcnJvcihgU3ViLWNsYXNzZXMgbmVlZCB0byBpbXBsZW1lbnQgYSAncmVjZWl2ZScgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFkZFRhcmdldCAoZXJyLCBhcHAsIHRhcmdldEluZm8pIHtcbiAgICBpZiAoXy5pc05pbCh0YXJnZXRJbmZvPy50YXJnZXRJZCkpIHtcbiAgICAgIGxvZy53YXJuKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldENyZWF0ZWQnIGV2ZW50IGZvciBhcHAgJyR7YXBwfScgd2l0aCBubyB0YXJnZXQuIFNraXBwaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChfLmlzRW1wdHkodGhpcy5wZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uKSAmJiAhdGFyZ2V0SW5mby5pc1Byb3Zpc2lvbmFsKSB7XG4gICAgICBsb2cud2FybihgUmVjZWl2ZWQgJ1RhcmdldC50YXJnZXRDcmVhdGVkJyBldmVudCBmb3IgYXBwICcke2FwcH0nIHdpdGggbm8gcGVuZGluZyByZXF1ZXN0OiAke0pTT04uc3RyaW5naWZ5KHRhcmdldEluZm8pfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0YXJnZXRJbmZvLmlzUHJvdmlzaW9uYWwpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgUHJvdmlzaW9uYWwgdGFyZ2V0IGNyZWF0ZWQgZm9yIGFwcCAnJHthcHB9JywgJyR7dGFyZ2V0SW5mby50YXJnZXRJZH0nLiBJZ25vcmluZyB1bnRpbCB0YXJnZXQgdXBkYXRlIGV2ZW50YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgW2FwcElkS2V5LCBwYWdlSWRLZXldID0gdGhpcy5wZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uO1xuXG4gICAgbG9nLmRlYnVnKGBUYXJnZXQgY3JlYXRlZCBmb3IgYXBwICcke2FwcElkS2V5fScgYW5kIHBhZ2UgJyR7cGFnZUlkS2V5fSc6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW5mbyl9YCk7XG4gICAgaWYgKF8uaGFzKHRoaXMudGFyZ2V0c1thcHBJZEtleV0sIHBhZ2VJZEtleSkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVGhlcmUgaXMgYWxyZWFkeSBhIHRhcmdldCBmb3IgdGhpcyBhcHAgYW5kIHBhZ2UgKCcke3RoaXMudGFyZ2V0c1thcHBJZEtleV1bcGFnZUlkS2V5XX0nKS4gVGhpcyBtaWdodCBjYXVzZSBwcm9ibGVtc2ApO1xuICAgIH1cbiAgICB0aGlzLnRhcmdldHNbYXBwXSA9IHRoaXMudGFyZ2V0c1thcHBdIHx8IHt9O1xuICAgIHRoaXMudGFyZ2V0c1thcHBJZEtleV1bcGFnZUlkS2V5XSA9IHRhcmdldEluZm8udGFyZ2V0SWQ7XG4gIH1cblxuICB1cGRhdGVUYXJnZXQgKGVyciwgYXBwLCBvbGRUYXJnZXRJZCwgbmV3VGFyZ2V0SWQpIHtcbiAgICBsb2cuZGVidWcoYFRhcmdldCB1cGRhdGVkIGZvciBhcHAgJyR7YXBwfScuIE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfSdgKTtcbiAgICBpZiAoIXRoaXMudGFyZ2V0c1thcHBdKSB7XG4gICAgICBsb2cud2FybihgTm8gZXhpc3RpbmcgdGFyZ2V0IGZvciBhcHAgJyR7YXBwfScuIE5vdCBzdXJlIHdoYXQgdG8gZG9gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gc2F2ZSB0aGlzLCB0byBiZSB1c2VkIGlmL3doZW4gdGhlIGV4aXN0aW5nIHRhcmdldCBpcyBkZXN0cm95ZWRcbiAgICB0aGlzLnRhcmdldHNbYXBwXS5wcm92aXNpb25hbCA9IHtcbiAgICAgIG9sZFRhcmdldElkLFxuICAgICAgbmV3VGFyZ2V0SWQsXG4gICAgfTtcbiAgfVxuXG4gIHJlbW92ZVRhcmdldCAoZXJyLCBhcHAsIHRhcmdldEluZm8pIHtcbiAgICBpZiAoXy5pc05pbCh0YXJnZXRJbmZvPy50YXJnZXRJZCkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgJ1RhcmdldC50YXJnZXREZXN0cm95ZWQnIGV2ZW50IHdpdGggbm8gdGFyZ2V0LiBTa2lwcGluZ2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvZy5kZWJ1ZyhgVGFyZ2V0IGRlc3Ryb3llZCBmb3IgYXBwICcke2FwcH0nOiAke3RhcmdldEluZm8udGFyZ2V0SWR9YCk7XG5cbiAgICAvLyBnbyB0aHJvdWdoIHRoZSB0YXJnZXRzIGFuZCBmaW5kIHRoZSBvbmUgdGhhdCBoYXMgYSB3YWl0aW5nIHByb3Zpc2lvbmFsIHRhcmdldFxuICAgIGlmICh0aGlzLnRhcmdldHNbYXBwXT8ucHJvdmlzaW9uYWw/Lm9sZFRhcmdldElkID09PSB0YXJnZXRJbmZvLnRhcmdldElkKSB7XG4gICAgICBjb25zdCB7b2xkVGFyZ2V0SWQsIG5ld1RhcmdldElkfSA9IHRoaXMudGFyZ2V0c1thcHBdLnByb3Zpc2lvbmFsO1xuICAgICAgZGVsZXRlIHRoaXMudGFyZ2V0c1thcHBdLnByb3Zpc2lvbmFsO1xuXG4gICAgICAvLyB3ZSBkbyBub3Qga25vdyB0aGUgcGFnZSwgc28gZ28gdGhyb3VnaCBhbmQgZmluZCB0aGUgZXhpc3RpbmcgdGFyZ2V0XG4gICAgICBjb25zdCB0YXJnZXRzID0gdGhpcy50YXJnZXRzW2FwcF07XG4gICAgICBmb3IgKGNvbnN0IFtwYWdlLCB0YXJnZXRJZF0gb2YgXy50b1BhaXJzKHRhcmdldHMpKSB7XG4gICAgICAgIGlmICh0YXJnZXRJZCA9PT0gb2xkVGFyZ2V0SWQpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYEZvdW5kIHByb3Zpc2lvbmFsIHRhcmdldCBmb3IgYXBwICcke2FwcH0nLiBPbGQgdGFyZ2V0OiAnJHtvbGRUYXJnZXRJZH0nLCBuZXcgdGFyZ2V0OiAnJHtuZXdUYXJnZXRJZH0nLiBVcGRhdGluZ2ApO1xuICAgICAgICAgIHRhcmdldHNbcGFnZV0gPSBuZXdUYXJnZXRJZDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxvZy53YXJuKGBQcm92aXNpb25hbCB0YXJnZXQgZm9yIGFwcCAnJHthcHB9JyBmb3VuZCwgYnV0IG5vIHN1aXRhYmxlIGV4aXN0aW5nIHRhcmdldCBmb3VuZC4gVGhpcyBtYXkgY2F1c2UgcHJvYmxlbXNgKTtcbiAgICAgIGxvZy53YXJuKGBPbGQgdGFyZ2V0OiAnJHtvbGRUYXJnZXRJZH0nLCBuZXcgdGFyZ2V0OiAnJHtuZXdUYXJnZXRJZH0nLiBFeGlzdGluZyB0YXJnZXRzOiAke0pTT04uc3RyaW5naWZ5KHRhcmdldHMpfWApO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZXJlIGlzIG5vIHdhaXRpbmcgcHJvdmlzaW9uYWwgdGFyZ2V0LCBqdXN0IGdldCByaWQgb2YgdGhlIGV4aXN0aW5nIG9uZVxuICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLnRhcmdldHNbYXBwXTtcbiAgICBmb3IgKGNvbnN0IFtwYWdlLCB0YXJnZXRJZF0gb2YgXy50b1BhaXJzKHRhcmdldHMpKSB7XG4gICAgICBpZiAodGFyZ2V0SWQgPT09IHRhcmdldEluZm8udGFyZ2V0SWQpIHtcbiAgICAgICAgZGVsZXRlIHRhcmdldHNbcGFnZV07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgbG9nLmRlYnVnKGBUYXJnZXQgJyR7dGFyZ2V0SW5mby50YXJnZXRJZH0nIGRlbGV0ZWQgZm9yIGFwcCAnJHthcHB9JywgYnV0IG5vIHN1Y2ggdGFyZ2V0IGV4aXN0c2ApO1xuICB9XG5cbiAgZ2V0VGFyZ2V0IChhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgcmV0dXJuICh0aGlzLnRhcmdldHNbYXBwSWRLZXldIHx8IHt9KVtwYWdlSWRLZXldO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0UGFnZSAoYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIHRoaXMucGVuZGluZ1RhcmdldE5vdGlmaWNhdGlvbiA9IFthcHBJZEtleSwgcGFnZUlkS2V5XTtcbiAgICB0aGlzLnNob3VsZENoZWNrRm9yVGFyZ2V0ID0gZmFsc2U7XG5cbiAgICAvLyBnbyB0aHJvdWdoIHRoZSBzdGVwcyB0aGF0IHRoZSBEZXNrdG9wIFNhZmFyaSBzeXN0ZW1cbiAgICAvLyBnb2VzIHRocm91Z2ggdG8gaW5pdGlhbGl6ZSB0aGUgV2ViIEluc3BlY3RvciBzZXNzaW9uXG5cbiAgICBjb25zdCBzZW5kT3B0cyA9IHtcbiAgICAgIGFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5LFxuICAgIH07XG5cbiAgICAvLyBoaWdobGlnaHQgYW5kIHRoZW4gdW4taGlnaGxpZ2h0IHRoZSB3ZWJ2aWV3XG4gICAgZm9yIChjb25zdCBlbmFibGVkIG9mIFt0cnVlLCBmYWxzZV0pIHtcbiAgICAgIGF3YWl0IHRoaXMuc2VuZCgnaW5kaWNhdGVXZWJWaWV3JywgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIGVuYWJsZWQsXG4gICAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoJ3NldFNlbmRlcktleScsIHNlbmRPcHRzKTtcbiAgICBsb2cuZGVidWcoJ1NlbmRlciBrZXkgc2V0Jyk7XG5cbiAgICBpZiAodGhpcy5pc1RhcmdldEJhc2VkICYmIHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMucGxhdGZvcm1WZXJzaW9uLCAnPCcsIE1JTl9QTEFURk9STV9OT19UQVJHRVRfRVhJU1RTKSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdUYXJnZXQuZXhpc3RzJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNob3VsZENoZWNrRm9yVGFyZ2V0ID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmZ1bGxQYWdlSW5pdGlhbGl6YXRpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBhZ2VGdWxsKGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQYWdlKGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gICAqIFBlcmZvcm0gdGhlIG1pbmltYWwgaW5pdGlhbGl6YXRpb24gdG8gZ2V0IHRoZSBXZWIgSW5zcGVjdG9yIHdvcmtpbmdcbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemVQYWdlIChhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgY29uc3Qgc2VuZE9wdHMgPSB7XG4gICAgICBhcHBJZEtleSxcbiAgICAgIHBhZ2VJZEtleSxcbiAgICB9O1xuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdJbnNwZWN0b3IuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1BhZ2UuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHRhc2tzIHRvIGluaXRpYWxpemVcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ05ldHdvcmsuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1J1bnRpbWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0hlYXAuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdJbnNwZWN0b3IuaW5pdGlhbGl6ZWQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICB9XG5cbiAgLypcbiAgICogTWltaWMgZXZlcnkgc3RlcCB0aGF0IERlc2t0b3AgU2FmYXJpIERldmVsb3AgdG9vbHMgdXNlcyB0byBpbml0aWFsaXplIGFcbiAgICogV2ViIEluc3BlY3RvciBzZXNzaW9uXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplUGFnZUZ1bGwgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICBjb25zdCBzZW5kT3B0cyA9IHtcbiAgICAgIGFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5LFxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUGFnZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuXG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdGFza3MgdG8gaW5pdGlhbGl6ZVxuICAgIGF3YWl0IHRoaXMuc2VuZCgnUGFnZS5nZXRSZXNvdXJjZVRyZWUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnTmV0d29yay5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnTmV0d29yay5zZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZCcsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRE9NU3RvcmFnZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGF0YWJhc2UuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luZGV4ZWREQi5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQ1NTLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdSdW50aW1lLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdIZWFwLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdNZW1vcnkuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0FwcGxpY2F0aW9uQ2FjaGUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0FwcGxpY2F0aW9uQ2FjaGUuZ2V0RnJhbWVzV2l0aE1hbmlmZXN0cycsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdUaW1lbGluZS5zZXRJbnN0cnVtZW50cycsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgaW5zdHJ1bWVudHM6IFsnVGltZWxpbmUnLCAnU2NyaXB0UHJvZmlsZXInLCAnQ1BVJ10sXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdUaW1lbGluZS5zZXRBdXRvQ2FwdHVyZUVuYWJsZWQnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBhY3RpdmU6IHRydWUsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5zZXRQYXVzZU9uRXhjZXB0aW9ucycsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgc3RhdGU6ICdub25lJyxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLnNldFBhdXNlT25Bc3NlcnRpb25zJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLnNldEFzeW5jU3RhY2tUcmFjZURlcHRoJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBkZXB0aDogMjAwLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIHNob3VsZFBhdXNlOiBmYWxzZSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnTGF5ZXJUcmVlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdXb3JrZXIuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0NhbnZhcy5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQ29uc29sZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRE9NLmdldERvY3VtZW50Jywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBjb25zdCBsb2dnaW5nQ2hhbm5lbHMgPSBhd2FpdCB0aGlzLnNlbmQoJ0NvbnNvbGUuZ2V0TG9nZ2luZ0NoYW5uZWxzJywgc2VuZE9wdHMpO1xuICAgIGZvciAoY29uc3Qgc291cmNlIG9mIChsb2dnaW5nQ2hhbm5lbHMuY2hhbm5lbHMgfHwgW10pLm1hcCgoZW50cnkpID0+IGVudHJ5LnNvdXJjZSkpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2VuZCgnQ29uc29sZS5zZXRMb2dnaW5nQ2hhbm5lbExldmVsJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgbGV2ZWw6ICd2ZXJib3NlJyxcbiAgICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5zcGVjdG9yLmluaXRpYWxpemVkJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIHNlbGVjdEFwcCAoYXBwSWRLZXkpIHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gbG9jYWwgY2FsbGJhY2ssIHRlbXBvcmFyaWx5IGFkZGVkIGFzIGNhbGxiYWNrIHRvXG4gICAgICAvLyBgX3JwY19hcHBsaWNhdGlvbkNvbm5lY3RlZDpgIHJlbW90ZSBkZWJ1Z2dlciByZXNwb25zZVxuICAgICAgLy8gdG8gaGFuZGxlIHRoZSBpbml0aWFsIGNvbm5lY3Rpb25cbiAgICAgIGNvbnN0IG9uQXBwQ2hhbmdlID0gKGVyciwgZGljdCkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZyb20gdGhlIGRpY3Rpb25hcnkgcmV0dXJuZWQsIGdldCB0aGUgaWRzXG4gICAgICAgIGNvbnN0IG9sZEFwcElkS2V5ID0gZGljdC5XSVJIb3N0QXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuICAgICAgICBjb25zdCBjb3JyZWN0QXBwSWRLZXkgPSBkaWN0LldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleTtcblxuICAgICAgICAvLyBpZiB0aGlzIGlzIGEgcmVwb3J0IG9mIGEgcHJveHkgcmVkaXJlY3QgZnJvbSB0aGUgcmVtb3RlIGRlYnVnZ2VyXG4gICAgICAgIC8vIHdlIHdhbnQgdG8gdXBkYXRlIG91ciBkaWN0aW9uYXJ5IGFuZCBnZXQgYSBuZXcgYXBwIGlkXG4gICAgICAgIGlmIChvbGRBcHBJZEtleSAmJiBjb3JyZWN0QXBwSWRLZXkgIT09IG9sZEFwcElkS2V5KSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBXZSB3ZXJlIG5vdGlmaWVkIHdlIG1pZ2h0IGhhdmUgY29ubmVjdGVkIHRvIHRoZSB3cm9uZyBhcHAuIGAgK1xuICAgICAgICAgICAgICAgICAgICBgVXNpbmcgaWQgJHtjb3JyZWN0QXBwSWRLZXl9IGluc3RlYWQgb2YgJHtvbGRBcHBJZEtleX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ05ldyBhcHBsaWNhdGlvbiBoYXMgY29ubmVjdGVkJykpO1xuICAgICAgfTtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIucHJlcGVuZE9uY2VMaXN0ZW5lcignX3JwY19hcHBsaWNhdGlvbkNvbm5lY3RlZDonLCBvbkFwcENoYW5nZSk7XG5cbiAgICAgIC8vIGRvIHRoZSBhY3R1YWwgY29ubmVjdGluZyB0byB0aGUgYXBwXG4gICAgICByZXR1cm4gKGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IHBhZ2VEaWN0LCBjb25uZWN0ZWRBcHBJZEtleTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAoW2Nvbm5lY3RlZEFwcElkS2V5LCBwYWdlRGljdF0gPSBhd2FpdCB0aGlzLnNlbmQoJ2Nvbm5lY3RUb0FwcCcsIHtcbiAgICAgICAgICAgIGFwcElkS2V5XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBsb2cud2FybihgVW5hYmxlIHRvIGNvbm5lY3QgdG8gYXBwOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc29tZXRpbWVzIHRoZSBjb25uZWN0IGxvZ2ljIGhhcHBlbnMsIGJ1dCB3aXRoIGFuIGVtcHR5IGRpY3Rpb25hcnlcbiAgICAgICAgLy8gd2hpY2ggbGVhZHMgdG8gdGhlIHJlbW90ZSBkZWJ1Z2dlciBnZXR0aW5nIGRpc2Nvbm5lY3RlZCwgYW5kIGludG8gYSBsb29wXG4gICAgICAgIGlmIChfLmlzRW1wdHkocGFnZURpY3QpKSB7XG4gICAgICAgICAgbGV0IG1zZyA9ICdFbXB0eSBwYWdlIGRpY3Rpb25hcnkgcmVjZWl2ZWQnO1xuICAgICAgICAgIGxvZy5kZWJ1Zyhtc2cpO1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IobXNnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShbY29ubmVjdGVkQXBwSWRLZXksIHBhZ2VEaWN0XSk7XG4gICAgICAgIH1cbiAgICAgIH0pKCk7XG4gICAgfSk7XG4gIH1cblxuICBvbkV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkIChlcnIsIGNvbnRleHQpIHtcbiAgICAvLyB7IGlkOiAyLCBpc1BhZ2VDb250ZXh0OiB0cnVlLCBuYW1lOiAnJywgZnJhbWVJZDogJzAuMScgfVxuICAgIC8vIHJpZ2h0IG5vdyB3ZSBoYXZlIG5vIHdheSB0byBtYXAgY29udGV4dHMgdG8gYXBwcy9wYWdlc1xuICAgIC8vIHNvIGp1c3Qgc3RvcmVcbiAgICB0aGlzLmNvbnRleHRzLnB1c2goY29udGV4dC5pZCk7XG4gIH1cblxuICBvbkdhcmJhZ2VDb2xsZWN0ZWQgKCkge1xuICAgIC8vIGp1c3Qgd2FudCB0byBsb2cgdGhhdCB0aGlzIGlzIGhhcHBlbmluZywgYXMgaXQgY2FuIGFmZmVjdCBvcGVydGlvblxuICAgIGxvZy5kZWJ1ZyhgV2ViIEluc3BlY3RvciBnYXJiYWdlIGNvbGxlY3RlZGApO1xuICB9XG5cbiAgb25TY3JpcHRQYXJzZWQgKGVyciwgc2NyaXB0SW5mbykge1xuICAgIC8vIHsgc2NyaXB0SWQ6ICcxMycsIHVybDogJycsIHN0YXJ0TGluZTogMCwgc3RhcnRDb2x1bW46IDAsIGVuZExpbmU6IDgyLCBlbmRDb2x1bW46IDMgfVxuICAgIGxvZy5kZWJ1ZyhgU2NyaXB0IHBhcnNlZDogJHtKU09OLnN0cmluZ2lmeShzY3JpcHRJbmZvKX1gKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0EsTUFBTUEsZUFBZSxHQUFHO0VBQUNDLE1BQU0sRUFBRTtBQUFHLENBQUM7QUFFckMsTUFBTUMsdUJBQXVCLEdBQUcsS0FBSztBQUNyQyxNQUFNQyx3QkFBd0IsR0FBRyxJQUFJO0FBRXJDLE1BQU1DLDZCQUE2QixHQUFHLE1BQU07QUFHNUMsTUFBTUMsNkJBQTZCLEdBQUcsTUFBTTtBQUU1QyxTQUFTQyxhQUFhLENBQUVDLFFBQVEsRUFBRUMsZUFBZSxFQUFFO0VBSWpELE1BQU1DLGFBQWEsR0FBR0MsYUFBSSxDQUFDQyxlQUFlLENBQUNILGVBQWUsRUFBRSxJQUFJLEVBQUVKLDZCQUE2QixDQUFDO0VBQ2hHUSxlQUFHLENBQUNDLEtBQUssQ0FBRSw4Q0FBNkNOLFFBQVEsR0FBRyxFQUFFLEdBQUcsTUFBTywrQkFBOEJDLGVBQWdCLElBQUcsQ0FBQztFQUNqSUksZUFBRyxDQUFDQyxLQUFLLENBQUUsMENBQXlDVCw2QkFBOEIsTUFBS0ssYUFBYyxFQUFDLENBQUM7RUFDdkcsT0FBT0EsYUFBYTtBQUN0QjtBQUVlLE1BQU1LLFNBQVMsQ0FBQztFQUM3QkMsV0FBVyxDQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDdEIsSUFBSSxDQUFDQyxRQUFRLEdBQUcsRUFBRTtJQUNsQixJQUFJLENBQUNDLHFCQUFxQixHQUFHLENBQUMsQ0FBQ0YsSUFBSSxDQUFDRyxvQkFBb0I7SUFFeEQsTUFBTTtNQUNKQyxRQUFRO01BQ1JaLGVBQWUsR0FBRyxDQUFDLENBQUM7TUFDcEJELFFBQVEsR0FBRyxJQUFJO01BQ2ZjLG1CQUFtQixHQUFHLEtBQUs7TUFDM0JDLDBCQUEwQixHQUFH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
|
|
453
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVtb3RlTWVzc2FnZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9hc3luY2JveCIsIl9sb2dnZXIiLCJfbG9kYXNoIiwiX2JsdWViaXJkIiwiX3JwY01lc3NhZ2VIYW5kbGVyIiwiX3N1cHBvcnQiLCJEQVRBX0xPR19MRU5HVEgiLCJsZW5ndGgiLCJXQUlUX0ZPUl9UQVJHRVRfVElNRU9VVCIsIldBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCIsIk1JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEIiwiTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMiLCJpc1RhcmdldEJhc2VkIiwiaXNTYWZhcmkiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc0hpZ2hWZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsImxvZyIsImRlYnVnIiwiUnBjQ2xpZW50IiwiY29uc3RydWN0b3IiLCJvcHRzIiwiX3RhcmdldHMiLCJfc2hvdWxkQ2hlY2tGb3JUYXJnZXQiLCJzaG91bGRDaGVja0ZvclRhcmdldCIsImJ1bmRsZUlkIiwibG9nQWxsQ29tbXVuaWNhdGlvbiIsImxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwid2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGgiLCJzb2NrZXRDaHVua1NpemUiLCJmdWxsUGFnZUluaXRpYWxpemF0aW9uIiwiaXNDb25uZWN0ZWQiLCJjb25uSWQiLCJ1dWlkVjQiLCJzZW5kZXJJZCIsIm1zZ0lkIiwiX2NvbnRleHRzIiwiY29udGV4dHMiLCJuZWVkc1RhcmdldCIsInRhcmdldHMiLCJjb25uZWN0ZWQiLCJvbiIsImV2ZW50IiwibGlzdGVuZXIiLCJtZXNzYWdlSGFuZGxlciIsIm9uY2UiLCJvZmYiLCJ3YXJuIiwiX2lzVGFyZ2V0QmFzZWQiLCJyZW1vdGVNZXNzYWdlcyIsIlJlbW90ZU1lc3NhZ2VzIiwiUnBjTWVzc2FnZUhhbmRsZXIiLCJhZGRUYXJnZXQiLCJiaW5kIiwidXBkYXRlVGFyZ2V0IiwicmVtb3ZlVGFyZ2V0Iiwib25FeGVjdXRpb25Db250ZXh0Q3JlYXRlZCIsIm9uR2FyYmFnZUNvbGxlY3RlZCIsIndhaXRGb3JUYXJnZXQiLCJhcHBJZEtleSIsInBhZ2VJZEtleSIsImZvcmNlIiwiZ2V0VGFyZ2V0Iiwid2FpdEZvckNvbmRpdGlvbiIsIl8iLCJpc0VtcHR5Iiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVycm9yIiwiZXJyIiwibWVzc2FnZSIsImluY2x1ZGVzIiwiRXJyb3IiLCJzZW5kIiwiY29tbWFuZCIsIndhaXRGb3JSZXNwb25zZSIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsInNlbmRUb0RldmljZSIsInRvTG93ZXJDYXNlIiwiaW5mbyIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJfY21kJF9fYXJndW1lbnQiLCJfY21kJF9fYXJndW1lbnQyIiwid3JhcHBlck1zZ0lkIiwidG9TdHJpbmciLCJ0YXJnZXRJZCIsImZ1bGxPcHRzIiwiZGVmYXVsdHMiLCJpZCIsImNtZCIsImdldFJlbW90ZUNvbW1hbmQiLCJfX2FyZ3VtZW50IiwiV0lSU29ja2V0RGF0YUtleSIsImlzTmlsIiwiQnVmZmVyIiwiZnJvbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtZXNzYWdlSGFuZGxlZCIsInRydW5jYXRlIiwibGlzdGVuZXJzIiwiX19zZWxlY3RvciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJhcmdzIiwidmFsdWUiLCJjb2RlIiwibXNnIiwicmVzIiwic2VuZE1lc3NhZ2UiLCJjb25uZWN0IiwiZGlzY29ubmVjdCIsInJlbW92ZUFsbExpc3RlbmVycyIsInJlY2VpdmUiLCJhcHAiLCJ0YXJnZXRJbmZvIiwicGVuZGluZ1RhcmdldE5vdGlmaWNhdGlvbiIsImlzUHJvdmlzaW9uYWwiLCJoYXMiLCJvbGRUYXJnZXRJZCIsIm5ld1RhcmdldElkIiwicHJvdmlzaW9uYWwiLCJfdGhpcyR0YXJnZXRzJGFwcCIsIl90aGlzJHRhcmdldHMkYXBwJHBybyIsInBhZ2UiLCJ0b1BhaXJzIiwic2VsZWN0UGFnZSIsInNlbmRPcHRzIiwiZW5hYmxlZCIsIk9iamVjdCIsImFzc2lnbiIsImluaXRpYWxpemVQYWdlRnVsbCIsImluaXRpYWxpemVQYWdlIiwiZGlzYWJsZWQiLCJpbnN0cnVtZW50cyIsImFjdGl2ZSIsInN0YXRlIiwiZGVwdGgiLCJzaG91bGRQYXVzZSIsImxvZ2dpbmdDaGFubmVscyIsInNvdXJjZSIsImNoYW5uZWxzIiwibWFwIiwiZW50cnkiLCJsZXZlbCIsInNlbGVjdEFwcCIsIm9uQXBwQ2hhbmdlIiwiZGljdCIsIm9sZEFwcElkS2V5IiwiV0lSSG9zdEFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsImNvcnJlY3RBcHBJZEtleSIsIldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsInBhZ2VEaWN0IiwiY29ubmVjdGVkQXBwSWRLZXkiLCJjb250ZXh0IiwicHVzaCIsIm9uU2NyaXB0UGFyc2VkIiwic2NyaXB0SW5mbyIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3JwYy9ycGMtY2xpZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZW1vdGVNZXNzYWdlcyBmcm9tICcuL3JlbW90ZS1tZXNzYWdlcyc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBScGNNZXNzYWdlSGFuZGxlciBmcm9tICcuL3JwYy1tZXNzYWdlLWhhbmRsZXInO1xuaW1wb3J0IHsgdXRpbCwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBEQVRBX0xPR19MRU5HVEggPSB7bGVuZ3RoOiAyMDB9O1xuXG5jb25zdCBXQUlUX0ZPUl9UQVJHRVRfVElNRU9VVCA9IDEwMDAwO1xuY29uc3QgV0FJVF9GT1JfVEFSR0VUX0lOVEVSVkFMID0gMTAwMDtcblxuY29uc3QgTUlOX1BMQVRGT1JNX0ZPUl9UQVJHRVRfQkFTRUQgPSAnMTIuMic7XG5cbi8vIGBUYXJnZXQuZXhpc3RzYCBwcm90b2NvbCBtZXRob2Qgd2FzIHJlbW92ZWQgZnJvbSBXZWJLaXQgaW4gMTMuNFxuY29uc3QgTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMgPSAnMTMuNCc7XG5cbmZ1bmN0aW9uIGlzVGFyZ2V0QmFzZWQgKGlzU2FmYXJpLCBwbGF0Zm9ybVZlcnNpb24pIHtcbiAgLy8gT24gaU9TIDEyLjIgdGhlIG1lc3NhZ2VzIGdldCBzZW50IHRocm91Z2ggdGhlIFRhcmdldCBkb21haW5cbiAgLy8gT24gaU9TIDEzLjArLCBXS1dlYlZpZXcgYWxzbyBuZWVkcyB0byBmb2xsb3cgdGhlIFRhcmdldCBkb21haW4sXG4gIC8vIHNvIGhlcmUgb25seSBjaGVjayB0aGUgdGFyZ2V0IE9TIHZlcnNpb24gYXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLlxuICBjb25zdCBpc0hpZ2hWZXJzaW9uID0gdXRpbC5jb21wYXJlVmVyc2lvbnMocGxhdGZvcm1WZXJzaW9uLCAnPj0nLCBNSU5fUExBVEZPUk1fRk9SX1RBUkdFVF9CQVNFRCk7XG4gIGxvZy5kZWJ1ZyhgQ2hlY2tpbmcgd2hpY2ggY29tbXVuaWNhdGlvbiBzdHlsZSB0byB1c2UgKCR7aXNTYWZhcmkgPyAnJyA6ICdub24tJ31TYWZhcmkgb24gcGxhdGZvcm0gdmVyc2lvbiAnJHtwbGF0Zm9ybVZlcnNpb259JylgKTtcbiAgbG9nLmRlYnVnKGBQbGF0Zm9ybSB2ZXJzaW9uIGVxdWFsIG9yIGhpZ2hlciB0aGFuICcke01JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEfSc6ICR7aXNIaWdoVmVyc2lvbn1gKTtcbiAgcmV0dXJuIGlzSGlnaFZlcnNpb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJwY0NsaWVudCB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICB0aGlzLl90YXJnZXRzID0gW107XG4gICAgdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSAhIW9wdHMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG5cbiAgICBjb25zdCB7XG4gICAgICBidW5kbGVJZCxcbiAgICAgIHBsYXRmb3JtVmVyc2lvbiA9IHt9LFxuICAgICAgaXNTYWZhcmkgPSB0cnVlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbiA9IGZhbHNlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAgPSBmYWxzZSxcbiAgICAgIHdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoLFxuICAgICAgc29ja2V0Q2h1bmtTaXplLFxuICAgICAgZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZhbHNlLFxuICAgIH0gPSBvcHRzO1xuXG4gICAgdGhpcy5pc1NhZmFyaSA9IGlzU2FmYXJpO1xuXG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuY29ubklkID0gdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLnNlbmRlcklkID0gdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLm1zZ0lkID0gMDtcblxuICAgIHRoaXMubG9nQWxsQ29tbXVuaWNhdGlvbiA9IGxvZ0FsbENvbW11bmljYXRpb247XG4gICAgdGhpcy5sb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCA9IGxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wO1xuICAgIHRoaXMuc29ja2V0Q2h1bmtTaXplID0gc29ja2V0Q2h1bmtTaXplO1xuICAgIHRoaXMud2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGggPSB3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aDtcblxuICAgIHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZ1bGxQYWdlSW5pdGlhbGl6YXRpb247XG5cbiAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBwbGF0Zm9ybVZlcnNpb247XG5cbiAgICB0aGlzLl9jb250ZXh0cyA9IFtdO1xuICAgIHRoaXMuX3RhcmdldHMgPSB7fTtcblxuICAgIC8vIHN0YXJ0IHdpdGggYSBiZXN0IGd1ZXNzIGZvciB0aGUgcHJvdG9jb2xcbiAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBpc1RhcmdldEJhc2VkKGlzU2FmYXJpLCB0aGlzLnBsYXRmb3JtVmVyc2lvbik7XG4gIH1cblxuICBnZXQgY29udGV4dHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0cztcbiAgfVxuXG4gIGdldCBuZWVkc1RhcmdldCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgJiYgdGhpcy5pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgZ2V0IHRhcmdldHMgKCkge1xuICAgIHJldHVybiB0aGlzLl90YXJnZXRzO1xuICB9XG5cbiAgZ2V0IHNob3VsZENoZWNrRm9yVGFyZ2V0ICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG4gIH1cblxuICBzZXQgc2hvdWxkQ2hlY2tGb3JUYXJnZXQgKHNob3VsZENoZWNrRm9yVGFyZ2V0KSB7XG4gICAgdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSAhIXNob3VsZENoZWNrRm9yVGFyZ2V0O1xuICB9XG5cbiAgZ2V0IGlzQ29ubmVjdGVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWQ7XG4gIH1cblxuICBzZXQgaXNDb25uZWN0ZWQgKGNvbm5lY3RlZCkge1xuICAgIHRoaXMuY29ubmVjdGVkID0gISFjb25uZWN0ZWQ7XG4gIH1cblxuICBvbiAoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbihldmVudCwgbGlzdGVuZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb25jZSAoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbmNlKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvZmYgKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub2ZmKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXQgaXNUYXJnZXRCYXNlZCAoaXNUYXJnZXRCYXNlZCkge1xuICAgIGxvZy53YXJuKGBTZXR0aW5nIGNvbW11bmljYXRpb24gcHJvdG9jb2w6IHVzaW5nICR7aXNUYXJnZXRCYXNlZCA/ICdUYXJnZXQtYmFzZWQnIDogJ2Z1bGwgV2ViIEluc3BlY3RvciBwcm90b2NvbCd9IGNvbW11bmljYXRpb25gKTtcbiAgICB0aGlzLl9pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcblxuICAgIGlmICghdGhpcy5yZW1vdGVNZXNzYWdlcykge1xuICAgICAgdGhpcy5yZW1vdGVNZXNzYWdlcyA9IG5ldyBSZW1vdGVNZXNzYWdlcyhpc1RhcmdldEJhc2VkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdGVNZXNzYWdlcy5pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBuZXcgUnBjTWVzc2FnZUhhbmRsZXIoaXNUYXJnZXRCYXNlZCk7XG5cbiAgICAgIC8vIGFkZCBoYW5kbGVycyBmb3IgaW50ZXJuYWwgZXZlbnRzXG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcsIHRoaXMuYWRkVGFyZ2V0LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignVGFyZ2V0LmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0JywgdGhpcy51cGRhdGVUYXJnZXQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdUYXJnZXQudGFyZ2V0RGVzdHJveWVkJywgdGhpcy5yZW1vdmVUYXJnZXQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdSdW50aW1lLmV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkJywgdGhpcy5vbkV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignSGVhcC5nYXJiYWdlQ29sbGVjdGVkJywgdGhpcy5vbkdhcmJhZ2VDb2xsZWN0ZWQuYmluZCh0aGlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIuaXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzVGFyZ2V0QmFzZWQgKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclRhcmdldCAoYXBwSWRLZXksIHBhZ2VJZEtleSwgZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmICghZm9yY2UgJiYgIXRoaXMubmVlZHNUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2Ugd2FpdGluZyBpcyBuZWNlc3NhcnkgdG8gc2VlIHdoYXQgdGhlIHRhcmdldCBpc1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+ICFfLmlzRW1wdHkodGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSkpLCB7XG4gICAgICAgIHdhaXRNczogV0FJVF9GT1JfVEFSR0VUX1RJTUVPVVQsXG4gICAgICAgIGludGVydmFsTXM6IFdBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCxcbiAgICAgICAgZXJyb3I6ICdObyB0YXJnZXRzIGZvdW5kLCB1bmFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBkZXZpY2UnLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb25kaXRpb24gdW5tZXQnKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHRhcmdldHMgZm91bmQsIHVuYWJsZSB0byBjb21tdW5pY2F0ZSB3aXRoIGRldmljZScpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmQgKGNvbW1hbmQsIG9wdHMgPSB7fSwgd2FpdEZvclJlc3BvbnNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgY29uc3Qge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXlcbiAgICB9ID0gb3B0cztcbiAgICB0cnkge1xuICAgICAgaWYgKCFfLmlzRW1wdHkoYXBwSWRLZXkpICYmICFfLmlzRW1wdHkocGFnZUlkS2V5KSkge1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kVG9EZXZpY2UoY29tbWFuZCwgb3B0cywgd2FpdEZvclJlc3BvbnNlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxldCB7IG1lc3NhZ2UgPSAnJyB9ID0gZXJyO1xuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKGAndGFyZ2V0JyBkb21haW4gd2FzIG5vdCBmb3VuZGApKSB7XG4gICAgICAgIGxvZy5pbmZvKCdUaGUgdGFyZ2V0IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IFRhcmdldCBiYXNlZCBjb21tdW5pY2F0aW9uLiAnICtcbiAgICAgICAgICAnV2lsbCBmb2xsb3cgbm9uLXRhcmdldCBiYXNlZCBjb21tdW5pY2F0aW9uLicpO1xuICAgICAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZFRvRGV2aWNlKGNvbW1hbmQsIG9wdHMsIHdhaXRGb3JSZXNwb25zZSk7XG4gICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoYGRvbWFpbiB3YXMgbm90IGZvdW5kYCkgfHxcbiAgICAgICAgICBtZXNzYWdlLmluY2x1ZGVzKGBzb21lIGFyZ3VtZW50cyBvZiBtZXRob2RgKSB8fFxuICAgICAgICAgIG1lc3NhZ2UuaW5jbHVkZXMoYG1pc3NpbmcgdGFyZ2V0YCkpIHtcbiAgICAgICAgdGhpcy5pc1RhcmdldEJhc2VkID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yVGFyZ2V0KGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kVG9EZXZpY2UoY29tbWFuZCwgb3B0cywgd2FpdEZvclJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbG9nLmRlYnVnKGBTZW5kaW5nIHRvIFdlYiBJbnNwZWN0b3IgdG9vayAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmRUb0RldmljZSAoY29tbWFuZCwgb3B0cyA9IHt9LCB3YWl0Rm9yUmVzcG9uc2UgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgd2hlbmV2ZXIgcmVtb3RlIGRlYnVnZ2VyXG4gICAgICAvLyByZXBsaWVzIHRvIG91ciByZXF1ZXN0XG5cbiAgICAgIC8vIGtlZXAgdHJhY2sgb2YgdGhlIG1lc3NhZ2VzIGNvbWluZyBhbmQgZ29pbmcgdXNpbmcgYSBzaW1wbGUgc2VxdWVudGlhbCBpZFxuICAgICAgY29uc3QgbXNnSWQgPSB0aGlzLm1zZ0lkKys7XG4gICAgICBsZXQgd3JhcHBlck1zZ0lkID0gbXNnSWQ7XG4gICAgICBpZiAodGhpcy5pc1RhcmdldEJhc2VkKSB7XG4gICAgICAgIC8vIGZvciB0YXJnZXQtYmFzZSBjb21tdW5pY2F0aW9uLCBldmVyeXRoaW5nIGlzIHdyYXBwZWQgdXBcbiAgICAgICAgd3JhcHBlck1zZ0lkID0gdGhpcy5tc2dJZCsrO1xuICAgICAgICAvLyBhY2tub3dsZWRnZSB3cmFwcGVyIG1lc3NhZ2VcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbih3cmFwcGVyTXNnSWQudG9TdHJpbmcoKSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFwcElkS2V5ID0gb3B0cy5hcHBJZEtleTtcbiAgICAgIGNvbnN0IHBhZ2VJZEtleSA9IG9wdHMucGFnZUlkS2V5O1xuICAgICAgY29uc3QgdGFyZ2V0SWQgPSB0aGlzLmdldFRhcmdldChhcHBJZEtleSwgcGFnZUlkS2V5KTtcblxuICAgICAgLy8gcmV0cmlldmUgdGhlIGNvcnJlY3QgY29tbWFuZCB0byBzZW5kXG4gICAgICBjb25zdCBmdWxsT3B0cyA9IF8uZGVmYXVsdHMoe1xuICAgICAgICBjb25uSWQ6IHRoaXMuY29ubklkLFxuICAgICAgICBzZW5kZXJJZDogdGhpcy5zZW5kZXJJZCxcbiAgICAgICAgdGFyZ2V0SWQsXG4gICAgICAgIGlkOiBtc2dJZCxcbiAgICAgIH0sIG9wdHMpO1xuICAgICAgY29uc3QgY21kID0gdGhpcy5yZW1vdGVNZXNzYWdlcy5nZXRSZW1vdGVDb21tYW5kKGNvbW1hbmQsIGZ1bGxPcHRzKTtcblxuICAgICAgaWYgKGNtZD8uX19hcmd1bWVudD8uV0lSU29ja2V0RGF0YUtleSkge1xuICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIG1lc3NhZ2UgYmVpbmcgc2VudCBoYXMgYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIG5lZWRlZFxuICAgICAgICBpZiAoXy5pc05pbChjbWQuX19hcmd1bWVudC5XSVJTb2NrZXREYXRhS2V5LmlkKSkge1xuICAgICAgICAgIGNtZC5fX2FyZ3VtZW50LldJUlNvY2tldERhdGFLZXkuaWQgPSB3cmFwcGVyTXNnSWQ7XG4gICAgICAgIH1cbiAgICAgICAgY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleSA9XG4gICAgICAgICAgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleSkpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWVzc2FnZUhhbmRsZWQgPSB0cnVlO1xuICAgICAgaWYgKCF3YWl0Rm9yUmVzcG9uc2UpIHtcbiAgICAgICAgLy8gdGhlIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCBhcyBzb29uIGFzIHRoZSBzb2NrZXQgaGFzIGJlZW4gc2VudFxuICAgICAgICBtZXNzYWdlSGFuZGxlZCA9IGZhbHNlO1xuICAgICAgICAvLyBkbyBub3QgbG9nIHJlY2VpcHRzXG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub25jZShtc2dJZC50b1N0cmluZygpLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgLy8gd2UgYXJlIG5vdCB3YWl0aW5nIGZvciB0aGlzLCBhbmQgaWYgaXQgZXJyb3JzIGl0IGlzIG1vc3QgbGlrZWx5XG4gICAgICAgICAgICAvLyBhIHByb3RvY29sIGNoYW5nZS4gTG9nIGFuZCBjaGVjayBkdXJpbmcgdGVzdGluZ1xuICAgICAgICAgICAgbG9nLmVycm9yKGBSZWNlaXZlZCBlcnJvciBmcm9tIHNlbmQgdGhhdCBpcyBub3QgYmVpbmcgd2FpdGVkIGZvciAoaWQ6ICR7bXNnSWR9KTogJyR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShlcnIpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICAgIC8vIHJlamVjdCwgdGhvdWdoIGl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoaXMgd2lsbCBiZSB0cmlnZ2VyZWQsIHNpbmNlXG4gICAgICAgICAgICAvLyB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBkaXJlY3RsdHkgYWZ0ZXIgc2VuZC4gT24gdGhlIG9mZiBjaGFuY2UsXG4gICAgICAgICAgICAvLyB0aG91Z2gsIGl0IHdpbGwgYWxlcnQgb2YgYSBwcm90b2NvbCBjaGFuZ2UuXG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyLmxpc3RlbmVycyhjbWQuX19zZWxlY3RvcikubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIucHJlcGVuZE9uY2VMaXN0ZW5lcihjbWQuX19zZWxlY3RvciwgZnVuY3Rpb24gKGVyciwgLi4uYXJncykge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCByZXNwb25zZSBmcm9tIHNlbmQgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoYXJncyksIERBVEFfTE9HX0xFTkdUSCl9J2ApO1xuICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChjbWQ/Ll9fYXJndW1lbnQ/LldJUlNvY2tldERhdGFLZXkpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbmNlKG1zZ0lkLnRvU3RyaW5nKCksIGZ1bmN0aW9uIChlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYFJlbW90ZSBkZWJ1Z2dlciBlcnJvciB3aXRoIGNvZGUgJyR7ZXJyLmNvZGV9JzogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgZGF0YSByZXNwb25zZSBmcm9tIHNlbmQgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkodmFsdWUpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub3RoaW5nIGVsc2UgaXMgaGFuZGxpbmcgdGhpbmdzLCBzbyBqdXN0IHJlc29sdmUgd2hlbiB0aGUgbWVzc2FnZSBpcyBzZW50XG4gICAgICAgIG1lc3NhZ2VIYW5kbGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1zZyA9IGBTZW5kaW5nICcke2NtZC5fX3NlbGVjdG9yfScgbWVzc2FnZWAgK1xuICAgICAgICAoZnVsbE9wdHMuYXBwSWRLZXkgPyBgIHRvIGFwcCAnJHtmdWxsT3B0cy5hcHBJZEtleX0nYCA6ICcnKSArXG4gICAgICAgIChmdWxsT3B0cy5wYWdlSWRLZXkgPyBgLCBwYWdlICcke2Z1bGxPcHRzLnBhZ2VJZEtleX0nYCA6ICcnKSArXG4gICAgICAgICh0aGlzLm5lZWRzVGFyZ2V0ICYmIHRhcmdldElkID8gYCwgdGFyZ2V0ICcke3RhcmdldElkfSdgIDogJycpICtcbiAgICAgICAgYCAoaWQ6ICR7bXNnSWR9KTogJyR7Y29tbWFuZH0nYDtcbiAgICAgIGxvZy5kZWJ1Zyhtc2cpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZW5kTWVzc2FnZShjbWQpO1xuICAgICAgICBpZiAoIW1lc3NhZ2VIYW5kbGVkKSB7XG4gICAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGhhbmRsZXJzIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgYmVmb3JlIHJlc29sdmluZyxcbiAgICAgICAgICAvLyBhbmQgbm8gZXJyb3JzIHNlbmRpbmcgdGhlIG1lc3NhZ2Ugb3ZlciB0aGUgc29ja2V0LCBzbyByZXNvbHZlXG4gICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHRocm93IG5ldyBFcnJvcihgU3ViLWNsYXNzZXMgbmVlZCB0byBpbXBsZW1lbnQgYSAnY29ubmVjdCcgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2Nvbm5lY3QgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UgKC8qIGNvbW1hbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdWItY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCBhICdzZW5kTWVzc2FnZScgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmUgKC8qIGRhdGEgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdWItY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCBhICdyZWNlaXZlJyBmdW5jdGlvbmApO1xuICB9XG5cbiAgYWRkVGFyZ2V0IChlcnIsIGFwcCwgdGFyZ2V0SW5mbykge1xuICAgIGlmIChfLmlzTmlsKHRhcmdldEluZm8/LnRhcmdldElkKSkge1xuICAgICAgbG9nLndhcm4oYFJlY2VpdmVkICdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcgZXZlbnQgZm9yIGFwcCAnJHthcHB9JyB3aXRoIG5vIHRhcmdldC4gU2tpcHBpbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLnBlbmRpbmdUYXJnZXROb3RpZmljYXRpb24pICYmICF0YXJnZXRJbmZvLmlzUHJvdmlzaW9uYWwpIHtcbiAgICAgIGxvZy53YXJuKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldENyZWF0ZWQnIGV2ZW50IGZvciBhcHAgJyR7YXBwfScgd2l0aCBubyBwZW5kaW5nIHJlcXVlc3Q6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW5mbyl9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldEluZm8uaXNQcm92aXNpb25hbCkge1xuICAgICAgbG9nLmRlYnVnKGBQcm92aXNpb25hbCB0YXJnZXQgY3JlYXRlZCBmb3IgYXBwICcke2FwcH0nLCAnJHt0YXJnZXRJbmZvLnRhcmdldElkfScuIElnbm9yaW5nIHVudGlsIHRhcmdldCB1cGRhdGUgZXZlbnRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBbYXBwSWRLZXksIHBhZ2VJZEtleV0gPSB0aGlzLnBlbmRpbmdUYXJnZXROb3RpZmljYXRpb247XG5cbiAgICBsb2cuZGVidWcoYFRhcmdldCBjcmVhdGVkIGZvciBhcHAgJyR7YXBwSWRLZXl9JyBhbmQgcGFnZSAnJHtwYWdlSWRLZXl9JzogJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbmZvKX1gKTtcbiAgICBpZiAoXy5oYXModGhpcy50YXJnZXRzW2FwcElkS2V5XSwgcGFnZUlkS2V5KSkge1xuICAgICAgbG9nLmRlYnVnKGBUaGVyZSBpcyBhbHJlYWR5IGEgdGFyZ2V0IGZvciB0aGlzIGFwcCBhbmQgcGFnZSAoJyR7dGhpcy50YXJnZXRzW2FwcElkS2V5XVtwYWdlSWRLZXldfScpLiBUaGlzIG1pZ2h0IGNhdXNlIHByb2JsZW1zYCk7XG4gICAgfVxuICAgIHRoaXMudGFyZ2V0c1thcHBdID0gdGhpcy50YXJnZXRzW2FwcF0gfHwge307XG4gICAgdGhpcy50YXJnZXRzW2FwcElkS2V5XVtwYWdlSWRLZXldID0gdGFyZ2V0SW5mby50YXJnZXRJZDtcbiAgfVxuXG4gIHVwZGF0ZVRhcmdldCAoZXJyLCBhcHAsIG9sZFRhcmdldElkLCBuZXdUYXJnZXRJZCkge1xuICAgIGxvZy5kZWJ1ZyhgVGFyZ2V0IHVwZGF0ZWQgZm9yIGFwcCAnJHthcHB9Jy4gT2xkIHRhcmdldDogJyR7b2xkVGFyZ2V0SWR9JywgbmV3IHRhcmdldDogJyR7bmV3VGFyZ2V0SWR9J2ApO1xuICAgIGlmICghdGhpcy50YXJnZXRzW2FwcF0pIHtcbiAgICAgIGxvZy53YXJuKGBObyBleGlzdGluZyB0YXJnZXQgZm9yIGFwcCAnJHthcHB9Jy4gTm90IHN1cmUgd2hhdCB0byBkb2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBzYXZlIHRoaXMsIHRvIGJlIHVzZWQgaWYvd2hlbiB0aGUgZXhpc3RpbmcgdGFyZ2V0IGlzIGRlc3Ryb3llZFxuICAgIHRoaXMudGFyZ2V0c1thcHBdLnByb3Zpc2lvbmFsID0ge1xuICAgICAgb2xkVGFyZ2V0SWQsXG4gICAgICBuZXdUYXJnZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgcmVtb3ZlVGFyZ2V0IChlcnIsIGFwcCwgdGFyZ2V0SW5mbykge1xuICAgIGlmIChfLmlzTmlsKHRhcmdldEluZm8/LnRhcmdldElkKSkge1xuICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldERlc3Ryb3llZCcgZXZlbnQgd2l0aCBubyB0YXJnZXQuIFNraXBwaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKGBUYXJnZXQgZGVzdHJveWVkIGZvciBhcHAgJyR7YXBwfSc6ICR7dGFyZ2V0SW5mby50YXJnZXRJZH1gKTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHRhcmdldHMgYW5kIGZpbmQgdGhlIG9uZSB0aGF0IGhhcyBhIHdhaXRpbmcgcHJvdmlzaW9uYWwgdGFyZ2V0XG4gICAgaWYgKHRoaXMudGFyZ2V0c1thcHBdPy5wcm92aXNpb25hbD8ub2xkVGFyZ2V0SWQgPT09IHRhcmdldEluZm8udGFyZ2V0SWQpIHtcbiAgICAgIGNvbnN0IHtvbGRUYXJnZXRJZCwgbmV3VGFyZ2V0SWR9ID0gdGhpcy50YXJnZXRzW2FwcF0ucHJvdmlzaW9uYWw7XG4gICAgICBkZWxldGUgdGhpcy50YXJnZXRzW2FwcF0ucHJvdmlzaW9uYWw7XG5cbiAgICAgIC8vIHdlIGRvIG5vdCBrbm93IHRoZSBwYWdlLCBzbyBnbyB0aHJvdWdoIGFuZCBmaW5kIHRoZSBleGlzdGluZyB0YXJnZXRcbiAgICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLnRhcmdldHNbYXBwXTtcbiAgICAgIGZvciAoY29uc3QgW3BhZ2UsIHRhcmdldElkXSBvZiBfLnRvUGFpcnModGFyZ2V0cykpIHtcbiAgICAgICAgaWYgKHRhcmdldElkID09PSBvbGRUYXJnZXRJZCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgcHJvdmlzaW9uYWwgdGFyZ2V0IGZvciBhcHAgJyR7YXBwfScuIE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfScuIFVwZGF0aW5nYCk7XG4gICAgICAgICAgdGFyZ2V0c1twYWdlXSA9IG5ld1RhcmdldElkO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nLndhcm4oYFByb3Zpc2lvbmFsIHRhcmdldCBmb3IgYXBwICcke2FwcH0nIGZvdW5kLCBidXQgbm8gc3VpdGFibGUgZXhpc3RpbmcgdGFyZ2V0IGZvdW5kLiBUaGlzIG1heSBjYXVzZSBwcm9ibGVtc2ApO1xuICAgICAgbG9nLndhcm4oYE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfScuIEV4aXN0aW5nIHRhcmdldHM6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0cyl9YCk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gd2FpdGluZyBwcm92aXNpb25hbCB0YXJnZXQsIGp1c3QgZ2V0IHJpZCBvZiB0aGUgZXhpc3Rpbmcgb25lXG4gICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMudGFyZ2V0c1thcHBdO1xuICAgIGZvciAoY29uc3QgW3BhZ2UsIHRhcmdldElkXSBvZiBfLnRvUGFpcnModGFyZ2V0cykpIHtcbiAgICAgIGlmICh0YXJnZXRJZCA9PT0gdGFyZ2V0SW5mby50YXJnZXRJZCkge1xuICAgICAgICBkZWxldGUgdGFyZ2V0c1twYWdlXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2cuZGVidWcoYFRhcmdldCAnJHt0YXJnZXRJbmZvLnRhcmdldElkfScgZGVsZXRlZCBmb3IgYXBwICcke2FwcH0nLCBidXQgbm8gc3VjaCB0YXJnZXQgZXhpc3RzYCk7XG4gIH1cblxuICBnZXRUYXJnZXQgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICByZXR1cm4gKHRoaXMudGFyZ2V0c1thcHBJZEtleV0gfHwge30pW3BhZ2VJZEtleV07XG4gIH1cblxuICBhc3luYyBzZWxlY3RQYWdlIChhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgdGhpcy5wZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uID0gW2FwcElkS2V5LCBwYWdlSWRLZXldO1xuICAgIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSBmYWxzZTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHN0ZXBzIHRoYXQgdGhlIERlc2t0b3AgU2FmYXJpIHN5c3RlbVxuICAgIC8vIGdvZXMgdGhyb3VnaCB0byBpbml0aWFsaXplIHRoZSBXZWIgSW5zcGVjdG9yIHNlc3Npb25cblxuICAgIGNvbnN0IHNlbmRPcHRzID0ge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXksXG4gICAgfTtcblxuICAgIC8vIGhpZ2hsaWdodCBhbmQgdGhlbiB1bi1oaWdobGlnaHQgdGhlIHdlYnZpZXdcbiAgICBmb3IgKGNvbnN0IGVuYWJsZWQgb2YgW3RydWUsIGZhbHNlXSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdpbmRpY2F0ZVdlYlZpZXcnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgZW5hYmxlZCxcbiAgICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnc2V0U2VuZGVyS2V5Jywgc2VuZE9wdHMpO1xuICAgIGxvZy5kZWJ1ZygnU2VuZGVyIGtleSBzZXQnKTtcblxuICAgIGlmICh0aGlzLmlzVGFyZ2V0QmFzZWQgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5wbGF0Zm9ybVZlcnNpb24sICc8JywgTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNlbmQoJ1RhcmdldC5leGlzdHMnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIH1cblxuICAgIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUGFnZUZ1bGwoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBhZ2UoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogUGVyZm9ybSB0aGUgbWluaW1hbCBpbml0aWFsaXphdGlvbiB0byBnZXQgdGhlIFdlYiBJbnNwZWN0b3Igd29ya2luZ1xuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZVBhZ2UgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICBjb25zdCBzZW5kT3B0cyA9IHtcbiAgICAgIGFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5LFxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUGFnZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuXG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdGFza3MgdG8gaW5pdGlhbGl6ZVxuICAgIGF3YWl0IHRoaXMuc2VuZCgnTmV0d29yay5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUnVudGltZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnSGVhcC5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0NvbnNvbGUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5pbml0aWFsaXplZCcsIHNlbmRPcHRzLCBmYWxzZSk7XG4gIH1cblxuICAvKlxuICAgKiBNaW1pYyBldmVyeSBzdGVwIHRoYXQgRGVza3RvcCBTYWZhcmkgRGV2ZWxvcCB0b29scyB1c2VzIHRvIGluaXRpYWxpemUgYVxuICAgKiBXZWIgSW5zcGVjdG9yIHNlc3Npb25cbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemVQYWdlRnVsbCAoYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIGNvbnN0IHNlbmRPcHRzID0ge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXksXG4gICAgfTtcblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5zcGVjdG9yLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdQYWdlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG5cbiAgICAvLyBnbyB0aHJvdWdoIHRoZSB0YXNrcyB0byBpbml0aWFsaXplXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdQYWdlLmdldFJlc291cmNlVHJlZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdOZXR3b3JrLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdOZXR3b3JrLnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdET01TdG9yYWdlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEYXRhYmFzZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5kZXhlZERCLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDU1MuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1J1bnRpbWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0hlYXAuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ01lbW9yeS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQXBwbGljYXRpb25DYWNoZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQXBwbGljYXRpb25DYWNoZS5nZXRGcmFtZXNXaXRoTWFuaWZlc3RzJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1RpbWVsaW5lLnNldEluc3RydW1lbnRzJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBpbnN0cnVtZW50czogWydUaW1lbGluZScsICdTY3JpcHRQcm9maWxlcicsICdDUFUnXSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1RpbWVsaW5lLnNldEF1dG9DYXB0dXJlRW5hYmxlZCcsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBzdGF0ZTogJ25vbmUnLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0UGF1c2VPbkFzc2VydGlvbnMnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0QXN5bmNTdGFja1RyYWNlRGVwdGgnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGRlcHRoOiAyMDAsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5zZXRQYXVzZUZvckludGVybmFsU2NyaXB0cycsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgc2hvdWxkUGF1c2U6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdMYXllclRyZWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1dvcmtlci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQ2FudmFzLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdET00uZ2V0RG9jdW1lbnQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGNvbnN0IGxvZ2dpbmdDaGFubmVscyA9IGF3YWl0IHRoaXMuc2VuZCgnQ29uc29sZS5nZXRMb2dnaW5nQ2hhbm5lbHMnLCBzZW5kT3B0cyk7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgKGxvZ2dpbmdDaGFubmVscy5jaGFubmVscyB8fCBbXSkubWFwKChlbnRyeSkgPT4gZW50cnkuc291cmNlKSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLnNldExvZ2dpbmdDaGFubmVsTGV2ZWwnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgc291cmNlLFxuICAgICAgICBsZXZlbDogJ3ZlcmJvc2UnLFxuICAgICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdJbnNwZWN0b3IuaW5pdGlhbGl6ZWQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0QXBwIChhcHBJZEtleSkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBsb2NhbCBjYWxsYmFjaywgdGVtcG9yYXJpbHkgYWRkZWQgYXMgY2FsbGJhY2sgdG9cbiAgICAgIC8vIGBfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOmAgcmVtb3RlIGRlYnVnZ2VyIHJlc3BvbnNlXG4gICAgICAvLyB0byBoYW5kbGUgdGhlIGluaXRpYWwgY29ubmVjdGlvblxuICAgICAgY29uc3Qgb25BcHBDaGFuZ2UgPSAoZXJyLCBkaWN0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZnJvbSB0aGUgZGljdGlvbmFyeSByZXR1cm5lZCwgZ2V0IHRoZSBpZHNcbiAgICAgICAgY29uc3Qgb2xkQXBwSWRLZXkgPSBkaWN0LldJUkhvc3RBcHBsaWNhdGlvbklkZW50aWZpZXJLZXk7XG4gICAgICAgIGNvbnN0IGNvcnJlY3RBcHBJZEtleSA9IGRpY3QuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuXG4gICAgICAgIC8vIGlmIHRoaXMgaXMgYSByZXBvcnQgb2YgYSBwcm94eSByZWRpcmVjdCBmcm9tIHRoZSByZW1vdGUgZGVidWdnZXJcbiAgICAgICAgLy8gd2Ugd2FudCB0byB1cGRhdGUgb3VyIGRpY3Rpb25hcnkgYW5kIGdldCBhIG5ldyBhcHAgaWRcbiAgICAgICAgaWYgKG9sZEFwcElkS2V5ICYmIGNvcnJlY3RBcHBJZEtleSAhPT0gb2xkQXBwSWRLZXkpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYFdlIHdlcmUgbm90aWZpZWQgd2UgbWlnaHQgaGF2ZSBjb25uZWN0ZWQgdG8gdGhlIHdyb25nIGFwcC4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBVc2luZyBpZCAke2NvcnJlY3RBcHBJZEtleX0gaW5zdGVhZCBvZiAke29sZEFwcElkS2V5fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignTmV3IGFwcGxpY2F0aW9uIGhhcyBjb25uZWN0ZWQnKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5wcmVwZW5kT25jZUxpc3RlbmVyKCdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOicsIG9uQXBwQ2hhbmdlKTtcblxuICAgICAgLy8gZG8gdGhlIGFjdHVhbCBjb25uZWN0aW5nIHRvIHRoZSBhcHBcbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgcGFnZURpY3QsIGNvbm5lY3RlZEFwcElkS2V5O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIChbY29ubmVjdGVkQXBwSWRLZXksIHBhZ2VEaWN0XSA9IGF3YWl0IHRoaXMuc2VuZCgnY29ubmVjdFRvQXBwJywge1xuICAgICAgICAgICAgYXBwSWRLZXlcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy53YXJuKGBVbmFibGUgdG8gY29ubmVjdCB0byBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzb21ldGltZXMgdGhlIGNvbm5lY3QgbG9naWMgaGFwcGVucywgYnV0IHdpdGggYW4gZW1wdHkgZGljdGlvbmFyeVxuICAgICAgICAvLyB3aGljaCBsZWFkcyB0byB0aGUgcmVtb3RlIGRlYnVnZ2VyIGdldHRpbmcgZGlzY29ubmVjdGVkLCBhbmQgaW50byBhIGxvb3BcbiAgICAgICAgaWYgKF8uaXNFbXB0eShwYWdlRGljdCkpIHtcbiAgICAgICAgICBsZXQgbXNnID0gJ0VtcHR5IHBhZ2UgZGljdGlvbmFyeSByZWNlaXZlZCc7XG4gICAgICAgICAgbG9nLmRlYnVnKG1zZyk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihtc2cpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKFtjb25uZWN0ZWRBcHBJZEtleSwgcGFnZURpY3RdKTtcbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRXhlY3V0aW9uQ29udGV4dENyZWF0ZWQgKGVyciwgY29udGV4dCkge1xuICAgIC8vIHsgaWQ6IDIsIGlzUGFnZUNvbnRleHQ6IHRydWUsIG5hbWU6ICcnLCBmcmFtZUlkOiAnMC4xJyB9XG4gICAgLy8gcmlnaHQgbm93IHdlIGhhdmUgbm8gd2F5IHRvIG1hcCBjb250ZXh0cyB0byBhcHBzL3BhZ2VzXG4gICAgLy8gc28ganVzdCBzdG9yZVxuICAgIHRoaXMuY29udGV4dHMucHVzaChjb250ZXh0LmlkKTtcbiAgfVxuXG4gIG9uR2FyYmFnZUNvbGxlY3RlZCAoKSB7XG4gICAgLy8ganVzdCB3YW50IHRvIGxvZyB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nLCBhcyBpdCBjYW4gYWZmZWN0IG9wZXJ0aW9uXG4gICAgbG9nLmRlYnVnKGBXZWIgSW5zcGVjdG9yIGdhcmJhZ2UgY29sbGVjdGVkYCk7XG4gIH1cblxuICBvblNjcmlwdFBhcnNlZCAoZXJyLCBzY3JpcHRJbmZvKSB7XG4gICAgLy8geyBzY3JpcHRJZDogJzEzJywgdXJsOiAnJywgc3RhcnRMaW5lOiAwLCBzdGFydENvbHVtbjogMCwgZW5kTGluZTogODIsIGVuZENvbHVtbjogMyB9XG4gICAgbG9nLmRlYnVnKGBTY3JpcHQgcGFyc2VkOiAke0pTT04uc3RyaW5naWZ5KHNjcmlwdEluZm8pfWApO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsZUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsU0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksU0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssa0JBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUdBLE1BQU1PLGVBQWUsR0FBRztFQUFDQyxNQUFNLEVBQUU7QUFBRyxDQUFDO0FBRXJDLE1BQU1DLHVCQUF1QixHQUFHLEtBQUs7QUFDckMsTUFBTUMsd0JBQXdCLEdBQUcsSUFBSTtBQUVyQyxNQUFNQyw2QkFBNkIsR0FBRyxNQUFNO0FBRzVDLE1BQU1DLDZCQUE2QixHQUFHLE1BQU07QUFFNUMsU0FBU0MsYUFBYUEsQ0FBRUMsUUFBUSxFQUFFQyxlQUFlLEVBQUU7RUFJakQsTUFBTUMsYUFBYSxHQUFHQyxhQUFJLENBQUNDLGVBQWUsQ0FBQ0gsZUFBZSxFQUFFLElBQUksRUFBRUosNkJB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-client.js","names":["DATA_LOG_LENGTH","length","WAIT_FOR_TARGET_TIMEOUT","WAIT_FOR_TARGET_INTERVAL","MIN_PLATFORM_FOR_TARGET_BASED","MIN_PLATFORM_NO_TARGET_EXISTS","isTargetBased","isSafari","platformVersion","isHighVersion","util","compareVersions","log","debug","RpcClient","constructor","opts","_targets","_shouldCheckForTarget","shouldCheckForTarget","bundleId","logAllCommunication","logAllCommunicationHexDump","webInspectorMaxFrameLength","socketChunkSize","fullPageInitialization","isConnected","connId","uuidV4","senderId","msgId","_contexts","contexts","needsTarget","targets","connected","on","event","listener","messageHandler","once","off","warn","_isTargetBased","remoteMessages","RemoteMessages","RpcMessageHandler","addTarget","bind","updateTarget","removeTarget","onExecutionContextCreated","onGarbageCollected","waitForTarget","appIdKey","pageIdKey","force","getTarget","waitForCondition","_","isEmpty","waitMs","intervalMs","error","err","message","includes","Error","send","command","waitForResponse","timer","timing","Timer","start","sendToDevice","toLowerCase","info","getDuration","asMilliSeconds","toFixed","B","resolve","reject","wrapperMsgId","toString","targetId","fullOpts","defaults","id","cmd","getRemoteCommand","__argument","WIRSocketDataKey","isNil","Buffer","from","JSON","stringify","messageHandled","truncate","listeners","__selector","prependOnceListener","args","value","code","msg","res","sendMessage","connect","disconnect","removeAllListeners","receive","app","targetInfo","pendingTargetNotification","isProvisional","has","oldTargetId","newTargetId","provisional","page","toPairs","selectPage","sendOpts","enabled","Object","assign","initializePageFull","initializePage","disabled","instruments","active","state","depth","shouldPause","loggingChannels","source","channels","map","entry","level","selectApp","onAppChange","dict","oldAppIdKey","WIRHostApplicationIdentifierKey","correctAppIdKey","WIRApplicationIdentifierKey","pageDict","connectedAppIdKey","context","push","onScriptParsed","scriptInfo"],"sources":["../../../lib/rpc/rpc-client.js"],"sourcesContent":["import RemoteMessages from './remote-messages';\nimport { waitForCondition } from 'asyncbox';\nimport log from '../logger';\nimport _ from 'lodash';\nimport B from 'bluebird';\nimport RpcMessageHandler from './rpc-message-handler';\nimport { util, timing } from '@appium/support';\n\n\nconst DATA_LOG_LENGTH = {length: 200};\n\nconst WAIT_FOR_TARGET_TIMEOUT = 10000;\nconst WAIT_FOR_TARGET_INTERVAL = 1000;\n\nconst MIN_PLATFORM_FOR_TARGET_BASED = '12.2';\n\n// `Target.exists` protocol method was removed from WebKit in 13.4\nconst MIN_PLATFORM_NO_TARGET_EXISTS = '13.4';\n\nfunction isTargetBased (isSafari, platformVersion) {\n // On iOS 12.2 the messages get sent through the Target domain\n // On iOS 13.0+, WKWebView also needs to follow the Target domain,\n // so here only check the target OS version as the default behaviour.\n const isHighVersion = util.compareVersions(platformVersion, '>=', MIN_PLATFORM_FOR_TARGET_BASED);\n log.debug(`Checking which communication style to use (${isSafari ? '' : 'non-'}Safari on platform version '${platformVersion}')`);\n log.debug(`Platform version equal or higher than '${MIN_PLATFORM_FOR_TARGET_BASED}': ${isHighVersion}`);\n return isHighVersion;\n}\n\nexport default class RpcClient {\n constructor (opts = {}) {\n this._targets = [];\n this._shouldCheckForTarget = !!opts.shouldCheckForTarget;\n\n const {\n bundleId,\n platformVersion = {},\n isSafari = true,\n logAllCommunication = false,\n logAllCommunicationHexDump = false,\n webInspectorMaxFrameLength,\n socketChunkSize,\n fullPageInitialization = false,\n } = opts;\n\n this.isSafari = isSafari;\n\n this.isConnected = false;\n this.connId = util.uuidV4();\n this.senderId = util.uuidV4();\n this.msgId = 0;\n\n this.logAllCommunication = logAllCommunication;\n this.logAllCommunicationHexDump = logAllCommunicationHexDump;\n this.socketChunkSize = socketChunkSize;\n this.webInspectorMaxFrameLength = webInspectorMaxFrameLength;\n\n this.fullPageInitialization = fullPageInitialization;\n\n this.bundleId = bundleId;\n this.platformVersion = platformVersion;\n\n this._contexts = [];\n this._targets = {};\n\n // start with a best guess for the protocol\n this.isTargetBased = isTargetBased(isSafari, this.platformVersion);\n }\n\n get contexts () {\n return this._contexts;\n }\n\n get needsTarget () {\n return this.shouldCheckForTarget && this.isTargetBased;\n }\n\n get targets () {\n return this._targets;\n }\n\n get shouldCheckForTarget () {\n return this._shouldCheckForTarget;\n }\n\n set shouldCheckForTarget (shouldCheckForTarget) {\n this._shouldCheckForTarget = !!shouldCheckForTarget;\n }\n\n get isConnected () {\n return this.connected;\n }\n\n set isConnected (connected) {\n this.connected = !!connected;\n }\n\n on (event, listener) {\n this.messageHandler.on(event, listener);\n return this;\n }\n\n once (event, listener) {\n this.messageHandler.once(event, listener);\n return this;\n }\n\n off (event, listener) {\n this.messageHandler.off(event, listener);\n return this;\n }\n\n set isTargetBased (isTargetBased) {\n log.warn(`Setting communication protocol: using ${isTargetBased ? 'Target-based' : 'full Web Inspector protocol'} communication`);\n this._isTargetBased = isTargetBased;\n\n if (!this.remoteMessages) {\n this.remoteMessages = new RemoteMessages(isTargetBased);\n } else {\n this.remoteMessages.isTargetBased = isTargetBased;\n }\n\n if (!this.messageHandler) {\n this.messageHandler = new RpcMessageHandler(isTargetBased);\n\n // add handlers for internal events\n this.messageHandler.on('Target.targetCreated', this.addTarget.bind(this));\n this.messageHandler.on('Target.didCommitProvisionalTarget', this.updateTarget.bind(this));\n this.messageHandler.on('Target.targetDestroyed', this.removeTarget.bind(this));\n this.messageHandler.on('Runtime.executionContextCreated', this.onExecutionContextCreated.bind(this));\n this.messageHandler.on('Heap.garbageCollected', this.onGarbageCollected.bind(this));\n } else {\n this.messageHandler.isTargetBased = isTargetBased;\n }\n }\n\n get isTargetBased () {\n return this._isTargetBased;\n }\n\n async waitForTarget (appIdKey, pageIdKey, force = false) {\n if (!force && !this.needsTarget) {\n return;\n }\n\n if (this.getTarget(appIdKey, pageIdKey)) {\n return;\n }\n\n // otherwise waiting is necessary to see what the target is\n try {\n await waitForCondition(() => !_.isEmpty(this.getTarget(appIdKey, pageIdKey)), {\n waitMs: WAIT_FOR_TARGET_TIMEOUT,\n intervalMs: WAIT_FOR_TARGET_INTERVAL,\n error: 'No targets found, unable to communicate with device',\n });\n } catch (err) {\n if (!err.message.includes('Condition unmet')) {\n throw err;\n }\n throw new Error('No targets found, unable to communicate with device');\n }\n }\n\n async send (command, opts = {}, waitForResponse = true) {\n const timer = new timing.Timer().start();\n const {\n appIdKey,\n pageIdKey\n } = opts;\n try {\n if (!_.isEmpty(appIdKey) && !_.isEmpty(pageIdKey)) {\n await this.waitForTarget(appIdKey, pageIdKey);\n }\n return await this.sendToDevice(command, opts, waitForResponse);\n } catch (err) {\n let { message = '' } = err;\n message = message.toLowerCase();\n if (message.includes(`'target' domain was not found`)) {\n log.info('The target device does not support Target based communication. ' +\n 'Will follow non-target based communication.');\n this.isTargetBased = false;\n return await this.sendToDevice(command, opts, waitForResponse);\n } else if (message.includes(`domain was not found`) ||\n message.includes(`some arguments of method`) ||\n message.includes(`missing target`)) {\n this.isTargetBased = true;\n await this.waitForTarget(appIdKey, pageIdKey);\n return await this.sendToDevice(command, opts, waitForResponse);\n }\n throw err;\n } finally {\n log.debug(`Sending to Web Inspector took ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n }\n }\n\n async sendToDevice (command, opts = {}, waitForResponse = true) {\n return await new B(async (resolve, reject) => {\n // promise to be resolved whenever remote debugger\n // replies to our request\n\n // keep track of the messages coming and going using a simple sequential id\n const msgId = this.msgId++;\n let wrapperMsgId = msgId;\n if (this.isTargetBased) {\n // for target-base communication, everything is wrapped up\n wrapperMsgId = this.msgId++;\n // acknowledge wrapper message\n this.messageHandler.on(wrapperMsgId.toString(), function (err) {\n if (err) {\n reject(err);\n }\n });\n }\n\n const appIdKey = opts.appIdKey;\n const pageIdKey = opts.pageIdKey;\n const targetId = this.getTarget(appIdKey, pageIdKey);\n\n // retrieve the correct command to send\n const fullOpts = _.defaults({\n connId: this.connId,\n senderId: this.senderId,\n targetId,\n id: msgId,\n }, opts);\n const cmd = this.remoteMessages.getRemoteCommand(command, fullOpts);\n\n if (cmd?.__argument?.WIRSocketDataKey) {\n // make sure the message being sent has all the information that is needed\n if (_.isNil(cmd.__argument.WIRSocketDataKey.id)) {\n cmd.__argument.WIRSocketDataKey.id = wrapperMsgId;\n }\n cmd.__argument.WIRSocketDataKey =\n Buffer.from(JSON.stringify(cmd.__argument.WIRSocketDataKey));\n }\n\n let messageHandled = true;\n if (!waitForResponse) {\n // the promise will be resolved as soon as the socket has been sent\n messageHandled = false;\n // do not log receipts\n this.messageHandler.once(msgId.toString(), function (err) {\n if (err) {\n // we are not waiting for this, and if it errors it is most likely\n // a protocol change. Log and check during testing\n log.error(`Received error from send that is not being waited for (id: ${msgId}): '${_.truncate(JSON.stringify(err), DATA_LOG_LENGTH)}'`);\n // reject, though it is very rare that this will be triggered, since\n // the promise is resolved directlty after send. On the off chance,\n // though, it will alert of a protocol change.\n reject(err);\n }\n });\n } else if (this.messageHandler.listeners(cmd.__selector).length) {\n this.messageHandler.prependOnceListener(cmd.__selector, function (err, ...args) {\n if (err) {\n return reject(err);\n }\n log.debug(`Received response from send (id: ${msgId}): '${_.truncate(JSON.stringify(args), DATA_LOG_LENGTH)}'`);\n resolve(args);\n });\n } else if (cmd?.__argument?.WIRSocketDataKey) {\n this.messageHandler.once(msgId.toString(), function (err, value) {\n if (err) {\n return reject(new Error(`Remote debugger error with code '${err.code}': ${err.message}`));\n }\n log.debug(`Received data response from send (id: ${msgId}): '${_.truncate(JSON.stringify(value), DATA_LOG_LENGTH)}'`);\n resolve(value);\n });\n } else {\n // nothing else is handling things, so just resolve when the message is sent\n messageHandled = false;\n }\n\n const msg = `Sending '${cmd.__selector}' message` +\n (fullOpts.appIdKey ? ` to app '${fullOpts.appIdKey}'` : '') +\n (fullOpts.pageIdKey ? `, page '${fullOpts.pageIdKey}'` : '') +\n (this.needsTarget && targetId ? `, target '${targetId}'` : '') +\n ` (id: ${msgId}): '${command}'`;\n log.debug(msg);\n try {\n const res = await this.sendMessage(cmd);\n if (!messageHandled) {\n // There are no handlers waiting for a response before resolving,\n // and no errors sending the message over the socket, so resolve\n resolve(res);\n }\n } catch (err) {\n return reject(err);\n }\n });\n }\n\n async connect () { // eslint-disable-line require-await\n throw new Error(`Sub-classes need to implement a 'connect' function`);\n }\n\n async disconnect () { // eslint-disable-line require-await\n this.messageHandler.removeAllListeners();\n }\n\n async sendMessage (/* command */) { // eslint-disable-line require-await\n throw new Error(`Sub-classes need to implement a 'sendMessage' function`);\n }\n\n async receive (/* data */) { // eslint-disable-line require-await\n throw new Error(`Sub-classes need to implement a 'receive' function`);\n }\n\n addTarget (err, app, targetInfo) {\n if (_.isNil(targetInfo?.targetId)) {\n log.warn(`Received 'Target.targetCreated' event for app '${app}' with no target. Skipping`);\n return;\n }\n if (_.isEmpty(this.pendingTargetNotification) && !targetInfo.isProvisional) {\n log.warn(`Received 'Target.targetCreated' event for app '${app}' with no pending request: ${JSON.stringify(targetInfo)}`);\n return;\n }\n\n if (targetInfo.isProvisional) {\n log.debug(`Provisional target created for app '${app}', '${targetInfo.targetId}'. Ignoring until target update event`);\n return;\n }\n\n const [appIdKey, pageIdKey] = this.pendingTargetNotification;\n\n log.debug(`Target created for app '${appIdKey}' and page '${pageIdKey}': ${JSON.stringify(targetInfo)}`);\n if (_.has(this.targets[appIdKey], pageIdKey)) {\n log.debug(`There is already a target for this app and page ('${this.targets[appIdKey][pageIdKey]}'). This might cause problems`);\n }\n this.targets[app] = this.targets[app] || {};\n this.targets[appIdKey][pageIdKey] = targetInfo.targetId;\n }\n\n updateTarget (err, app, oldTargetId, newTargetId) {\n log.debug(`Target updated for app '${app}'. Old target: '${oldTargetId}', new target: '${newTargetId}'`);\n if (!this.targets[app]) {\n log.warn(`No existing target for app '${app}'. Not sure what to do`);\n return;\n }\n // save this, to be used if/when the existing target is destroyed\n this.targets[app].provisional = {\n oldTargetId,\n newTargetId,\n };\n }\n\n removeTarget (err, app, targetInfo) {\n if (_.isNil(targetInfo?.targetId)) {\n log.debug(`Received 'Target.targetDestroyed' event with no target. Skipping`);\n return;\n }\n\n log.debug(`Target destroyed for app '${app}': ${targetInfo.targetId}`);\n\n // go through the targets and find the one that has a waiting provisional target\n if (this.targets[app]?.provisional?.oldTargetId === targetInfo.targetId) {\n const {oldTargetId, newTargetId} = this.targets[app].provisional;\n delete this.targets[app].provisional;\n\n // we do not know the page, so go through and find the existing target\n const targets = this.targets[app];\n for (const [page, targetId] of _.toPairs(targets)) {\n if (targetId === oldTargetId) {\n log.debug(`Found provisional target for app '${app}'. Old target: '${oldTargetId}', new target: '${newTargetId}'. Updating`);\n targets[page] = newTargetId;\n return;\n }\n }\n log.warn(`Provisional target for app '${app}' found, but no suitable existing target found. This may cause problems`);\n log.warn(`Old target: '${oldTargetId}', new target: '${newTargetId}'. Existing targets: ${JSON.stringify(targets)}`);\n }\n\n // if there is no waiting provisional target, just get rid of the existing one\n const targets = this.targets[app];\n for (const [page, targetId] of _.toPairs(targets)) {\n if (targetId === targetInfo.targetId) {\n delete targets[page];\n return;\n }\n }\n log.debug(`Target '${targetInfo.targetId}' deleted for app '${app}', but no such target exists`);\n }\n\n getTarget (appIdKey, pageIdKey) {\n return (this.targets[appIdKey] || {})[pageIdKey];\n }\n\n async selectPage (appIdKey, pageIdKey) {\n this.pendingTargetNotification = [appIdKey, pageIdKey];\n this.shouldCheckForTarget = false;\n\n // go through the steps that the Desktop Safari system\n // goes through to initialize the Web Inspector session\n\n const sendOpts = {\n appIdKey,\n pageIdKey,\n };\n\n // highlight and then un-highlight the webview\n for (const enabled of [true, false]) {\n await this.send('indicateWebView', Object.assign({\n enabled,\n }, sendOpts), false);\n }\n\n await this.send('setSenderKey', sendOpts);\n log.debug('Sender key set');\n\n if (this.isTargetBased && util.compareVersions(this.platformVersion, '<', MIN_PLATFORM_NO_TARGET_EXISTS)) {\n await this.send('Target.exists', sendOpts, false);\n }\n\n this.shouldCheckForTarget = true;\n\n if (this.fullPageInitialization) {\n await this.initializePageFull(appIdKey, pageIdKey);\n } else {\n await this.initializePage(appIdKey, pageIdKey);\n }\n }\n\n /*\n * Perform the minimal initialization to get the Web Inspector working\n */\n async initializePage (appIdKey, pageIdKey) {\n const sendOpts = {\n appIdKey,\n pageIdKey,\n };\n\n await this.send('Inspector.enable', sendOpts, false);\n await this.send('Page.enable', sendOpts, false);\n\n // go through the tasks to initialize\n await this.send('Network.enable', sendOpts, false);\n await this.send('Runtime.enable', sendOpts, false);\n await this.send('Heap.enable', sendOpts, false);\n await this.send('Debugger.enable', sendOpts, false);\n await this.send('Console.enable', sendOpts, false);\n await this.send('Inspector.initialized', sendOpts, false);\n }\n\n /*\n * Mimic every step that Desktop Safari Develop tools uses to initialize a\n * Web Inspector session\n */\n async initializePageFull (appIdKey, pageIdKey) {\n const sendOpts = {\n appIdKey,\n pageIdKey,\n };\n\n await this.send('Inspector.enable', sendOpts, false);\n await this.send('Page.enable', sendOpts, false);\n\n // go through the tasks to initialize\n await this.send('Page.getResourceTree', sendOpts, false);\n await this.send('Network.enable', sendOpts, false);\n await this.send('Network.setResourceCachingDisabled', Object.assign({\n disabled: false,\n }, sendOpts), false);\n await this.send('DOMStorage.enable', sendOpts, false);\n await this.send('Database.enable', sendOpts, false);\n await this.send('IndexedDB.enable', sendOpts, false);\n await this.send('CSS.enable', sendOpts, false);\n await this.send('Runtime.enable', sendOpts, false);\n await this.send('Heap.enable', sendOpts, false);\n await this.send('Memory.enable', sendOpts, false);\n await this.send('ApplicationCache.enable', sendOpts, false);\n await this.send('ApplicationCache.getFramesWithManifests', sendOpts, false);\n await this.send('Timeline.setInstruments', Object.assign({\n instruments: ['Timeline', 'ScriptProfiler', 'CPU'],\n }, sendOpts), false);\n await this.send('Timeline.setAutoCaptureEnabled', Object.assign({\n enabled: false,\n }, sendOpts), false);\n await this.send('Debugger.enable', sendOpts, false);\n await this.send('Debugger.setBreakpointsActive', Object.assign({\n active: true,\n }, sendOpts), false);\n await this.send('Debugger.setPauseOnExceptions', Object.assign({\n state: 'none',\n }, sendOpts), false);\n await this.send('Debugger.setPauseOnAssertions', Object.assign({\n enabled: false,\n }, sendOpts), false);\n await this.send('Debugger.setAsyncStackTraceDepth', Object.assign({\n depth: 200,\n }, sendOpts), false);\n await this.send('Debugger.setPauseForInternalScripts', Object.assign({\n shouldPause: false,\n }, sendOpts), false);\n\n await this.send('LayerTree.enable', sendOpts, false);\n await this.send('Worker.enable', sendOpts, false);\n await this.send('Canvas.enable', sendOpts, false);\n await this.send('Console.enable', sendOpts, false);\n await this.send('DOM.getDocument', sendOpts, false);\n const loggingChannels = await this.send('Console.getLoggingChannels', sendOpts);\n for (const source of (loggingChannels.channels || []).map((entry) => entry.source)) {\n await this.send('Console.setLoggingChannelLevel', Object.assign({\n source,\n level: 'verbose',\n }, sendOpts), false);\n }\n\n await this.send('Inspector.initialized', sendOpts, false);\n }\n\n async selectApp (appIdKey) {\n return await new B((resolve, reject) => {\n // local callback, temporarily added as callback to\n // `_rpc_applicationConnected:` remote debugger response\n // to handle the initial connection\n const onAppChange = (err, dict) => {\n if (err) {\n return reject(err);\n }\n // from the dictionary returned, get the ids\n const oldAppIdKey = dict.WIRHostApplicationIdentifierKey;\n const correctAppIdKey = dict.WIRApplicationIdentifierKey;\n\n // if this is a report of a proxy redirect from the remote debugger\n // we want to update our dictionary and get a new app id\n if (oldAppIdKey && correctAppIdKey !== oldAppIdKey) {\n log.debug(`We were notified we might have connected to the wrong app. ` +\n `Using id ${correctAppIdKey} instead of ${oldAppIdKey}`);\n }\n\n reject(new Error('New application has connected'));\n };\n this.messageHandler.prependOnceListener('_rpc_applicationConnected:', onAppChange);\n\n // do the actual connecting to the app\n return (async () => {\n let pageDict, connectedAppIdKey;\n try {\n ([connectedAppIdKey, pageDict] = await this.send('connectToApp', {\n appIdKey\n }));\n } catch (err) {\n log.warn(`Unable to connect to app: ${err.message}`);\n reject(err);\n }\n\n // sometimes the connect logic happens, but with an empty dictionary\n // which leads to the remote debugger getting disconnected, and into a loop\n if (_.isEmpty(pageDict)) {\n let msg = 'Empty page dictionary received';\n log.debug(msg);\n reject(new Error(msg));\n } else {\n resolve([connectedAppIdKey, pageDict]);\n }\n })();\n });\n }\n\n onExecutionContextCreated (err, context) {\n // { id: 2, isPageContext: true, name: '', frameId: '0.1' }\n // right now we have no way to map contexts to apps/pages\n // so just store\n this.contexts.push(context.id);\n }\n\n onGarbageCollected () {\n // just want to log that this is happening, as it can affect opertion\n log.debug(`Web Inspector garbage collected`);\n }\n\n onScriptParsed (err, scriptInfo) {\n // { scriptId: '13', url: '', startLine: 0, startColumn: 0, endLine: 82, endColumn: 3 }\n log.debug(`Script parsed: ${JSON.stringify(scriptInfo)}`);\n }\n}\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA,MAAMA,eAAe,GAAG;EAACC,MAAM,EAAE;AAAG,CAAC;AAErC,MAAMC,uBAAuB,GAAG,KAAK;AACrC,MAAMC,wBAAwB,GAAG,IAAI;AAErC,MAAMC,6BAA6B,GAAG,MAAM;AAG5C,MAAMC,6BAA6B,GAAG,MAAM;AAE5C,SAASC,aAAa,CAAEC,QAAQ,EAAEC,eAAe,EAAE;EAIjD,MAAMC,aAAa,GAAGC,aAAI,CAACC,eAAe,CAACH,eAAe,EAAE,IAAI,EAAEJ,6BAA6B,CAAC;EAChGQ,eAAG,CAACC,KAAK,CAAE,8CAA6CN,QAAQ,GAAG,EAAE,GAAG,MAAO,+BAA8BC,eAAgB,IAAG,CAAC;EACjII,eAAG,CAACC,KAAK,CAAE,0CAAyCT,6BAA8B,MAAKK,aAAc,EAAC,CAAC;EACvG,OAAOA,aAAa;AACtB;AAEe,MAAMK,SAAS,CAAC;EAC7BC,WAAW,CAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;IACtB,IAAI,CAACC,QAAQ,GAAG,EAAE;IAClB,IAAI,CAACC,qBAAqB,GAAG,CAAC,CAACF,IAAI,CAACG,oBAAoB;IAExD,MAAM;MACJC,QAAQ;MACRZ,eAAe,GAAG,CAAC,CAAC;MACpBD,QAAQ,GAAG,IAAI;MACfc,mBAAmB,GAAG,KAAK;MAC3BC,0BAA0B,GAAG,KAAK;MAClCC,0BAA0B;MAC1BC,eAAe;MACfC,sBAAsB,GAAG;IAC3B,CAAC,GAAGT,IAAI;IAER,IAAI,CAACT,QAAQ,GAAGA,QAAQ;IAExB,IAAI,CAACmB,WAAW,GAAG,KAAK;IACxB,IAAI,CAACC,MAAM,GAAGjB,aAAI,CAACkB,MAAM,EAAE;IAC3B,IAAI,CAACC,QAAQ,GAAGnB,aAAI,CAACkB,MAAM,EAAE;IAC7B,IAAI,CAACE,KAAK,GAAG,CAAC;IAEd,IAAI,CAACT,mBAAmB,GAAGA,mBAAmB;IAC9C,IAAI,CAACC,0BAA0B,GAAGA,0BAA0B;IAC5D,IAAI,CAACE,eAAe,GAAGA,eAAe;IACtC,IAAI,CAACD,0BAA0B,GAAGA,0BAA0B;IAE5D,IAAI,CAACE,sBAAsB,GAAGA,sBAAsB;IAEpD,IAAI,CAACL,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACZ,eAAe,GAAGA,eAAe;IAEtC,IAAI,CAACuB,SAAS,GAAG,EAAE;IACnB,IAAI,CAACd,QAAQ,GAAG,CAAC,CAAC;IAGlB,IAAI,CAACX,aAAa,GAAGA,aAAa,CAACC,QAAQ,EAAE,IAAI,CAACC,eAAe,CAAC;EACpE;EAEA,IAAIwB,QAAQ,GAAI;IACd,OAAO,IAAI,CAACD,SAAS;EACvB;EAEA,IAAIE,WAAW,GAAI;IACjB,OAAO,IAAI,CAACd,oBAAoB,IAAI,IAAI,CAACb,aAAa;EACxD;EAEA,IAAI4B,OAAO,GAAI;IACb,OAAO,IAAI,CAACjB,QAAQ;EACtB;EAEA,IAAIE,oBAAoB,GAAI;IAC1B,OAAO,IAAI,CAACD,qBAAqB;EACnC;EAEA,IAAIC,oBAAoB,CAAEA,oBAAoB,EAAE;IAC9C,IAAI,CAACD,qBAAqB,GAAG,CAAC,CAACC,oBAAoB;EACrD;EAEA,IAAIO,WAAW,GAAI;IACjB,OAAO,IAAI,CAACS,SAAS;EACvB;EAEA,IAAIT,WAAW,CAAES,SAAS,EAAE;IAC1B,IAAI,CAACA,SAAS,GAAG,CAAC,CAACA,SAAS;EAC9B;EAEAC,EAAE,CAAEC,KAAK,EAAEC,QAAQ,EAAE;IACnB,IAAI,CAACC,cAAc,CAACH,EAAE,CAACC,KAAK,EAAEC,QAAQ,CAAC;IACvC,OAAO,IAAI;EACb;EAEAE,IAAI,CAAEH,KAAK,EAAEC,QAAQ,EAAE;IACrB,IAAI,CAACC,cAAc,CAACC,IAAI,CAACH,KAAK,EAAEC,QAAQ,CAAC;IACzC,OAAO,IAAI;EACb;EAEAG,GAAG,CAAEJ,KAAK,EAAEC,QAAQ,EAAE;IACpB,IAAI,CAACC,cAAc,CAACE,GAAG,CAACJ,KAAK,EAAEC,QAAQ,CAAC;IACxC,OAAO,IAAI;EACb;EAEA,IAAIhC,aAAa,CAAEA,aAAa,EAAE;IAChCM,eAAG,CAAC8B,IAAI,CAAE,yCAAwCpC,aAAa,GAAG,cAAc,GAAG,6BAA8B,gBAAe,CAAC;IACjI,IAAI,CAACqC,cAAc,GAAGrC,aAAa;IAEnC,IAAI,CAAC,IAAI,CAACsC,cAAc,EAAE;MACxB,IAAI,CAACA,cAAc,GAAG,IAAIC,uBAAc,CAACvC,aAAa,CAAC;IACzD,CAAC,MAAM;MACL,IAAI,CAACsC,cAAc,CAACtC,aAAa,GAAGA,aAAa;IACnD;IAEA,IAAI,CAAC,IAAI,CAACiC,cAAc,EAAE;MACxB,IAAI,CAACA,cAAc,GAAG,IAAIO,0BAAiB,CAACxC,aAAa,CAAC;MAG1D,IAAI,CAACiC,cAAc,CAACH,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAACW,SAAS,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC;MACzE,IAAI,CAACT,cAAc,CAACH,EAAE,CAAC,mCAAmC,EAAE,IAAI,CAACa,YAAY,CAACD,IAAI,CAAC,IAAI,CAAC,CAAC;MACzF,IAAI,CAACT,cAAc,CAACH,EAAE,CAAC,wBAAwB,EAAE,IAAI,CAACc,YAAY,CAACF,IAAI,CAAC,IAAI,CAAC,CAAC;MAC9E,IAAI,CAACT,cAAc,CAACH,EAAE,CAAC,iCAAiC,EAAE,IAAI,CAACe,yBAAyB,CAACH,IAAI,CAAC,IAAI,CAAC,CAAC;MACpG,IAAI,CAACT,cAAc,CAACH,EAAE,CAAC,uBAAuB,EAAE,IAAI,CAACgB,kBAAkB,CAACJ,IAAI,CAAC,IAAI,CAAC,CAAC;IACrF,CAAC,MAAM;MACL,IAAI,CAACT,cAAc,CAACjC,aAAa,GAAGA,aAAa;IACnD;EACF;EAEA,IAAIA,aAAa,GAAI;IACnB,OAAO,IAAI,CAACqC,cAAc;EAC5B;EAEA,MAAMU,aAAa,CAAEC,QAAQ,EAAEC,SAAS,EAAEC,KAAK,GAAG,KAAK,EAAE;IACvD,IAAI,CAACA,KAAK,IAAI,CAAC,IAAI,CAACvB,WAAW,EAAE;MAC/B;IACF;IAEA,IAAI,IAAI,CAACwB,SAAS,CAACH,QAAQ,EAAEC,SAAS,CAAC,EAAE;MACvC;IACF;IAGA,IAAI;MACF,MAAM,IAAAG,0BAAgB,EAAC,MAAM,CAACC,eAAC,CAACC,OAAO,CAAC,IAAI,CAACH,SAAS,CAACH,QAAQ,EAAEC,SAAS,CAAC,CAAC,EAAE;QAC5EM,MAAM,EAAE3D,uBAAuB;QAC/B4D,UAAU,EAAE3D,wBAAwB;QACpC4D,KAAK,EAAE;MACT,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOC,GAAG,EAAE;MACZ,IAAI,CAACA,GAAG,CAACC,OAAO,CAACC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;QAC5C,MAAMF,GAAG;MACX;MACA,MAAM,IAAIG,KAAK,CAAC,qDAAqD,CAAC;IACxE;EACF;EAEA,MAAMC,IAAI,CAAEC,OAAO,EAAErD,IAAI,GAAG,CAAC,CAAC,EAAEsD,eAAe,GAAG,IAAI,EAAE;IACtD,MAAMC,KAAK,GAAG,IAAIC,eAAM,CAACC,KAAK,EAAE,CAACC,KAAK,EAAE;IACxC,MAAM;MACJpB,QAAQ;MACRC;IACF,CAAC,GAAGvC,IAAI;IACR,IAAI;MACF,IAAI,CAAC2C,eAAC,CAACC,OAAO,CAACN,QAAQ,CAAC,IAAI,CAACK,eAAC,CAACC,OAAO,CAACL,SAAS,CAAC,EAAE;QACjD,MAAM,IAAI,CAACF,aAAa,CAACC,QAAQ,EAAEC,SAAS,CAAC;MAC/C;MACA,OAAO,MAAM,IAAI,CAACoB,YAAY,CAACN,OAAO,EAAErD,IAAI,EAAEsD,eAAe,CAAC;IAChE,CAAC,CAAC,OAAON,GAAG,EAAE;MACZ,IAAI;QAAEC,OAAO,GAAG;MAAG,CAAC,GAAGD,GAAG;MAC1BC,OAAO,GAAGA,OAAO,CAACW,WAAW,EAAE;MAC/B,IAAIX,OAAO,CAACC,QAAQ,CAAE,+BAA8B,CAAC,EAAE;QACrDtD,eAAG,CAACiE,IAAI,CAAC,iEAAiE,GACxE,6CAA6C,CAAC;QAChD,IAAI,CAACvE,aAAa,GAAG,KAAK;QAC1B,OAAO,MAAM,IAAI,CAACqE,YAAY,CAACN,OAAO,EAAErD,IAAI,EAAEsD,eAAe,CAAC;MAChE,CAAC,MAAM,IAAIL,OAAO,CAACC,QAAQ,CAAE,sBAAqB,CAAC,IAC/CD,OAAO,CAACC,QAAQ,CAAE,0BAAyB,CAAC,IAC5CD,OAAO,CAACC,QAAQ,CAAE,gBAAe,CAAC,EAAE;QACtC,IAAI,CAAC5D,aAAa,GAAG,IAAI;QACzB,MAAM,IAAI,CAAC+C,aAAa,CAACC,QAAQ,EAAEC,SAAS,CAAC;QAC7C,OAAO,MAAM,IAAI,CAACoB,YAAY,CAACN,OAAO,EAAErD,IAAI,EAAEsD,eAAe,CAAC;MAChE;MACA,MAAMN,GAAG;IACX,CAAC,SAAS;MACRpD,eAAG,CAACC,KAAK,CAAE,iCAAgC0D,KAAK,CAACO,WAAW,EAAE,CAACC,cAAc,CAACC,OAAO,CAAC,CAAC,CAAE,IAAG,CAAC;IAC/F;EACF;EAEA,MAAML,YAAY,CAAEN,OAAO,EAAErD,IAAI,GAAG,CAAC,CAAC,EAAEsD,eAAe,GAAG,IAAI,EAAE;IAC9D,OAAO,MAAM,IAAIW,iBAAC,CAAC,OAAOC,OAAO,EAAEC,MAAM,KAAK;MAAA;MAK5C,MAAMrD,KAAK,GAAG,IAAI,CAACA,KAAK,EAAE;MAC1B,IAAIsD,YAAY,GAAGtD,KAAK;MACxB,IAAI,IAAI,CAACxB,aAAa,EAAE;QAEtB8E,YAAY,GAAG,IAAI,CAACtD,KAAK,EAAE;QAE3B,IAAI,CAACS,cAAc,CAACH,EAAE,CAACgD,YAAY,CAACC,QAAQ,EAAE,EAAE,UAAUrB,GAAG,EAAE;UAC7D,IAAIA,GAAG,EAAE;YACPmB,MAAM,CAACnB,GAAG,CAAC;UACb;QACF,CAAC,CAAC;MACJ;MAEA,MAAMV,QAAQ,GAAGtC,IAAI,CAACsC,QAAQ;MAC9B,MAAMC,SAAS,GAAGvC,IAAI,CAACuC,SAAS;MAChC,MAAM+B,QAAQ,GAAG,IAAI,CAAC7B,SAAS,CAACH,QAAQ,EAAEC,SAAS,CAAC;MAGpD,MAAMgC,QAAQ,GAAG5B,eAAC,CAAC6B,QAAQ,CAAC;QAC1B7D,MAAM,EAAE,IAAI,CAACA,MAAM;QACnBE,QAAQ,EAAE,IAAI,CAACA,QAAQ;QACvByD,QAAQ;QACRG,EAAE,EAAE3D;MACN,CAAC,EAAEd,IAAI,CAAC;MACR,MAAM0E,GAAG,GAAG,IAAI,CAAC9C,cAAc,CAAC+C,gBAAgB,CAACtB,OAAO,EAAEkB,QAAQ,CAAC;MAEnE,IAAIG,GAAG,aAAHA,GAAG,kCAAHA,GAAG,CAAEE,UAAU,4CAAf,gBAAiBC,gBAAgB,EAAE;QAErC,IAAIlC,eAAC,CAACmC,KAAK,CAACJ,GAAG,CAACE,UAAU,CAACC,gBAAgB,CAACJ,EAAE,CAAC,EAAE;UAC/CC,GAAG,CAACE,UAAU,CAACC,gBAAgB,CAACJ,EAAE,GAAGL,YAAY;QACnD;QACAM,GAAG,CAACE,UAAU,CAACC,gBAAgB,GAC7BE,MAAM,CAACC,IAAI,CAACC,IAAI,CAACC,SAAS,CAACR,GAAG,CAACE,UAAU,CAACC,gBAAgB,CAAC,CAAC;MAChE;MAEA,IAAIM,cAAc,GAAG,IAAI;MACzB,IAAI,CAAC7B,eAAe,EAAE;QAEpB6B,cAAc,GAAG,KAAK;QAEtB,IAAI,CAAC5D,cAAc,CAACC,IAAI,CAACV,KAAK,CAACuD,QAAQ,EAAE,EAAE,UAAUrB,GAAG,EAAE;UACxD,IAAIA,GAAG,EAAE;YAGPpD,eAAG,CAACmD,KAAK,CAAE,8DAA6DjC,KAAM,OAAM6B,eAAC,CAACyC,QAAQ,CAACH,IAAI,CAACC,SAAS,CAAClC,GAAG,CAAC,EAAEhE,eAAe,CAAE,GAAE,CAAC;YAIxImF,MAAM,CAACnB,GAAG,CAAC;UACb;QACF,CAAC,CAAC;MACJ,CAAC,MAAM,IAAI,IAAI,CAACzB,cAAc,CAAC8D,SAAS,CAACX,GAAG,CAACY,UAAU,CAAC,CAACrG,MAAM,EAAE;QAC/D,IAAI,CAACsC,cAAc,CAACgE,mBAAmB,CAACb,GAAG,CAACY,UAAU,EAAE,UAAUtC,GAAG,EAAE,GAAGwC,IAAI,EAAE;UAC9E,IAAIxC,GAAG,EAAE;YACP,OAAOmB,MAAM,CAACnB,GAAG,CAAC;UACpB;UACApD,eAAG,CAACC,KAAK,CAAE,oCAAmCiB,KAAM,OAAM6B,eAAC,CAACyC,QAAQ,CAACH,IAAI,CAACC,SAAS,CAACM,IAAI,CAAC,EAAExG,eAAe,CAAE,GAAE,CAAC;UAC/GkF,OAAO,CAACsB,IAAI,CAAC;QACf,CAAC,CAAC;MACJ,CAAC,MAAM,IAAId,GAAG,aAAHA,GAAG,mCAAHA,GAAG,CAAEE,UAAU,6CAAf,iBAAiBC,gBAAgB,EAAE;QAC5C,IAAI,CAACtD,cAAc,CAACC,IAAI,CAACV,KAAK,CAACuD,QAAQ,EAAE,EAAE,UAAUrB,GAAG,EAAEyC,KAAK,EAAE;UAC/D,IAAIzC,GAAG,EAAE;YACP,OAAOmB,MAAM,CAAC,IAAIhB,KAAK,CAAE,oCAAmCH,GAAG,CAAC0C,IAAK,MAAK1C,GAAG,CAACC,OAAQ,EAAC,CAAC,CAAC;UAC3F;UACArD,eAAG,CAACC,KAAK,CAAE,yCAAwCiB,KAAM,OAAM6B,eAAC,CAACyC,QAAQ,CAACH,IAAI,CAACC,SAAS,CAACO,KAAK,CAAC,EAAEzG,eAAe,CAAE,GAAE,CAAC;UACrHkF,OAAO,CAACuB,KAAK,CAAC;QAChB,CAAC,CAAC;MACJ,CAAC,MAAM;QAELN,cAAc,GAAG,KAAK;MACxB;MAEA,MAAMQ,GAAG,GAAI,YAAWjB,GAAG,CAACY,UAAW,WAAU,IAC9Cf,QAAQ,CAACjC,QAAQ,GAAI,YAAWiC,QAAQ,CAACjC,QAAS,GAAE,GAAG,EAAE,CAAC,IAC1DiC,QAAQ,CAAChC,SAAS,GAAI,WAAUgC,QAAQ,CAAChC,SAAU,GAAE,GAAG,EAAE,CAAC,IAC3D,IAAI,CAACtB,WAAW,IAAIqD,QAAQ,GAAI,aAAYA,QAAS,GAAE,GAAG,EAAE,CAAC,GAC7D,SAAQxD,KAAM,OAAMuC,OAAQ,GAAE;MACjCzD,eAAG,CAACC,KAAK,CAAC8F,GAAG,CAAC;MACd,IAAI;QACF,MAAMC,GAAG,GAAG,MAAM,IAAI,CAACC,WAAW,CAACnB,GAAG,CAAC;QACvC,IAAI,CAACS,cAAc,EAAE;UAGnBjB,OAAO,CAAC0B,GAAG,CAAC;QACd;MACF,CAAC,CAAC,OAAO5C,GAAG,EAAE;QACZ,OAAOmB,MAAM,CAACnB,GAAG,CAAC;MACpB;IACF,CAAC,CAAC;EACJ;EAEA,MAAM8C,OAAO,GAAI;IACf,MAAM,IAAI3C,KAAK,CAAE,oDAAmD,CAAC;EACvE;EAEA,MAAM4C,UAAU,GAAI;IAClB,IAAI,CAACxE,cAAc,CAACyE,kBAAkB,EAAE;EAC1C;EAEA,MAAMH,WAAW,GAAiB;IAChC,MAAM,IAAI1C,KAAK,CAAE,wDAAuD,CAAC;EAC3E;EAEA,MAAM8C,OAAO,GAAc;IACzB,MAAM,IAAI9C,KAAK,CAAE,oDAAmD,CAAC;EACvE;EAEApB,SAAS,CAAEiB,GAAG,EAAEkD,GAAG,EAAEC,UAAU,EAAE;IAC/B,IAAIxD,eAAC,CAACmC,KAAK,CAACqB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAE7B,QAAQ,CAAC,EAAE;MACjC1E,eAAG,CAAC8B,IAAI,CAAE,kDAAiDwE,GAAI,4BAA2B,CAAC;MAC3F;IACF;IACA,IAAIvD,eAAC,CAACC,OAAO,CAAC,IAAI,CAACwD,yBAAyB,CAAC,IAAI,CAACD,UAAU,CAACE,aAAa,EAAE;MAC1EzG,eAAG,CAAC8B,IAAI,CAAE,kDAAiDwE,GAAI,8BAA6BjB,IAAI,CAACC,SAAS,CAACiB,UAAU,CAAE,EAAC,CAAC;MACzH;IACF;IAEA,IAAIA,UAAU,CAACE,aAAa,EAAE;MAC5BzG,eAAG,CAACC,KAAK,CAAE,uCAAsCqG,GAAI,OAAMC,UAAU,CAAC7B,QAAS,uCAAsC,CAAC;MACtH;IACF;IAEA,MAAM,CAAChC,QAAQ,EAAEC,SAAS,CAAC,GAAG,IAAI,CAAC6D,yBAAyB;IAE5DxG,eAAG,CAACC,KAAK,CAAE,2BAA0ByC,QAAS,eAAcC,SAAU,MAAK0C,IAAI,CAACC,SAAS,CAACiB,UAAU,CAAE,EAAC,CAAC;IACxG,IAAIxD,eAAC,CAAC2D,GAAG,CAAC,IAAI,CAACpF,OAAO,CAACoB,QAAQ,CAAC,EAAEC,SAAS,CAAC,EAAE;MAC5C3C,eAAG,CAACC,KAAK,CAAE,qDAAoD,IAAI,CAACqB,OAAO,CAACoB,QAAQ,CAAC,CAACC,SAAS,CAAE,+BAA8B,CAAC;IAClI;IACA,IAAI,CAACrB,OAAO,CAACgF,GAAG,CAAC,GAAG,IAAI,CAAChF,OAAO,CAACgF,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAChF,OAAO,CAACoB,QAAQ,CAAC,CAACC,SAAS,CAAC,GAAG4D,UAAU,CAAC7B,QAAQ;EACzD;EAEArC,YAAY,CAAEe,GAAG,EAAEkD,GAAG,EAAEK,WAAW,EAAEC,WAAW,EAAE;IAChD5G,eAAG,CAACC,KAAK,CAAE,2BAA0BqG,GAAI,mBAAkBK,WAAY,mBAAkBC,WAAY,GAAE,CAAC;IACxG,IAAI,CAAC,IAAI,CAACtF,OAAO,CAACgF,GAAG,CAAC,EAAE;MACtBtG,eAAG,CAAC8B,IAAI,CAAE,+BAA8BwE,GAAI,wBAAuB,CAAC;MACpE;IACF;IAEA,IAAI,CAAChF,OAAO,CAACgF,GAAG,CAAC,CAACO,WAAW,GAAG;MAC9BF,WAAW;MACXC;IACF,CAAC;EACH;EAEAtE,YAAY,CAAEc,GAAG,EAAEkD,GAAG,EAAEC,UAAU,EAAE;IAAA;IAClC,IAAIxD,eAAC,CAACmC,KAAK,CAACqB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAE7B,QAAQ,CAAC,EAAE;MACjC1E,eAAG,CAACC,KAAK,CAAE,kEAAiE,CAAC;MAC7E;IACF;IAEAD,eAAG,CAACC,KAAK,CAAE,6BAA4BqG,GAAI,MAAKC,UAAU,CAAC7B,QAAS,EAAC,CAAC;IAGtE,IAAI,0BAAI,CAACpD,OAAO,CAACgF,GAAG,CAAC,+EAAjB,kBAAmBO,WAAW,0DAA9B,sBAAgCF,WAAW,MAAKJ,UAAU,CAAC7B,QAAQ,EAAE;MACvE,MAAM;QAACiC,WAAW;QAAEC;MAAW,CAAC,GAAG,IAAI,CAACtF,OAAO,CAACgF,GAAG,CAAC,CAACO,WAAW;MAChE,OAAO,IAAI,CAACvF,OAAO,CAACgF,GAAG,CAAC,CAACO,WAAW;MAGpC,MAAMvF,OAAO,GAAG,IAAI,CAACA,OAAO,CAACgF,GAAG,CAAC;MACjC,KAAK,MAAM,CAACQ,IAAI,EAAEpC,QAAQ,CAAC,IAAI3B,eAAC,CAACgE,OAAO,CAACzF,OAAO,CAAC,EAAE;QACjD,IAAIoD,QAAQ,KAAKiC,WAAW,EAAE;UAC5B3G,eAAG,CAACC,KAAK,CAAE,qCAAoCqG,GAAI,mBAAkBK,WAAY,mBAAkBC,WAAY,aAAY,CAAC;UAC5HtF,OAAO,CAACwF,IAAI,CAAC,GAAGF,WAAW;UAC3B;QACF;MACF;MACA5G,eAAG,CAAC8B,IAAI,CAAE,+BAA8BwE,GAAI,yEAAwE,CAAC;MACrHtG,eAAG,CAAC8B,IAAI,CAAE,gBAAe6E,WAAY,mBAAkBC,WAAY,wBAAuBvB,IAAI,CAACC,SAAS,CAAChE,OAAO,CAAE,EAAC,CAAC;IACtH;IAGA,MAAMA,OAAO,GAAG,IAAI,CAACA,OAAO,CAACgF,GAAG,CAAC;IACjC,KAAK,MAAM,CAACQ,IAAI,EAAEpC,QAAQ,CAAC,IAAI3B,eAAC,CAACgE,OAAO,CAACzF,OAAO,CAAC,EAAE;MACjD,IAAIoD,QAAQ,KAAK6B,UAAU,CAAC7B,QAAQ,EAAE;QACpC,OAAOpD,OAAO,CAACwF,IAAI,CAAC;QACpB;MACF;IACF;IACA9G,eAAG,CAACC,KAAK,CAAE,WAAUsG,UAAU,CAAC7B,QAAS,sBAAqB4B,GAAI,8BAA6B,CAAC;EAClG;EAEAzD,SAAS,CAAEH,QAAQ,EAAEC,SAAS,EAAE;IAC9B,OAAO,CAAC,IAAI,CAACrB,OAAO,CAACoB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAEC,SAAS,CAAC;EAClD;EAEA,MAAMqE,UAAU,CAAEtE,QAAQ,EAAEC,SAAS,EAAE;IACrC,IAAI,CAAC6D,yBAAyB,GAAG,CAAC9D,QAAQ,EAAEC,SAAS,CAAC;IACtD,IAAI,CAACpC,oBAAoB,GAAG,KAAK;IAKjC,MAAM0G,QAAQ,GAAG;MACfvE,QAAQ;MACRC;IACF,CAAC;IAGD,KAAK,MAAMuE,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;MACnC,MAAM,IAAI,CAAC1D,IAAI,CAAC,iBAAiB,EAAE2D,MAAM,CAACC,MAAM,CAAC;QAC/CF;MACF,CAAC,EAAED,QAAQ,CAAC,EAAE,KAAK,CAAC;IACtB;IAEA,MAAM,IAAI,CAACzD,IAAI,CAAC,cAAc,EAAEyD,QAAQ,CAAC;IACzCjH,eAAG,CAACC,KAAK,CAAC,gBAAgB,CAAC;IAE3B,IAAI,IAAI,CAACP,aAAa,IAAII,aAAI,CAACC,eAAe,CAAC,IAAI,CAACH,eAAe,EAAE,GAAG,EAAEH,6BAA6B,CAAC,EAAE;MACxG,MAAM,IAAI,CAAC+D,IAAI,CAAC,eAAe,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IACnD;IAEA,IAAI,CAAC1G,oBAAoB,GAAG,IAAI;IAEhC,IAAI,IAAI,CAACM,sBAAsB,EAAE;MAC/B,MAAM,IAAI,CAACwG,kBAAkB,CAAC3E,QAAQ,EAAEC,SAAS,CAAC;IACpD,CAAC,MAAM;MACL,MAAM,IAAI,CAAC2E,cAAc,CAAC5E,QAAQ,EAAEC,SAAS,CAAC;IAChD;EACF;EAKA,MAAM2E,cAAc,CAAE5E,QAAQ,EAAEC,SAAS,EAAE;IACzC,MAAMsE,QAAQ,GAAG;MACfvE,QAAQ;MACRC;IACF,CAAC;IAED,MAAM,IAAI,CAACa,IAAI,CAAC,kBAAkB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IACpD,MAAM,IAAI,CAACzD,IAAI,CAAC,aAAa,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IAG/C,MAAM,IAAI,CAACzD,IAAI,CAAC,gBAAgB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IAClD,MAAM,IAAI,CAACzD,IAAI,CAAC,gBAAgB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IAClD,MAAM,IAAI,CAACzD,IAAI,CAAC,aAAa,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IAC/C,MAAM,IAAI,CAACzD,IAAI,CAAC,iBAAiB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IACnD,MAAM,IAAI,CAACzD,IAAI,CAAC,gBAAgB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IAClD,MAAM,IAAI,CAACzD,IAAI,CAAC,uBAAuB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;EAC3D;EAMA,MAAMI,kBAAkB,CAAE3E,QAAQ,EAAEC,SAAS,EAAE;IAC7C,MAAMsE,QAAQ,GAAG;MACfvE,QAAQ;MACRC;IACF,CAAC;IAED,MAAM,IAAI,CAACa,IAAI,CAAC,kBAAkB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IACpD,MAAM,IAAI,CAACzD,IAAI,CAAC,aAAa,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IAG/C,MAAM,IAAI,CAACzD,IAAI,CAAC,sBAAsB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IACxD,MAAM,IAAI,CAACzD,IAAI,CAAC,gBAAgB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IAClD,MAAM,IAAI,CAACzD,IAAI,CAAC,oCAAoC,EAAE2D,MAAM,CAACC,MAAM,CAAC;MAClEG,QAAQ,EAAE;IACZ,CAAC,EAAEN,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpB,MAAM,IAAI,CAACzD,IAAI,CAAC,mBAAmB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IACrD,MAAM,IAAI,CAACzD,IAAI,CAAC,iBAAiB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IACnD,MAAM,IAAI,CAACzD,IAAI,CAAC,kBAAkB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IACpD,MAAM,IAAI,CAACzD,IAAI,CAAC,YAAY,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IAC9C,MAAM,IAAI,CAACzD,IAAI,CAAC,gBAAgB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IAClD,MAAM,IAAI,CAACzD,IAAI,CAAC,aAAa,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IAC/C,MAAM,IAAI,CAACzD,IAAI,CAAC,eAAe,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IACjD,MAAM,IAAI,CAACzD,IAAI,CAAC,yBAAyB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IAC3D,MAAM,IAAI,CAACzD,IAAI,CAAC,yCAAyC,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IAC3E,MAAM,IAAI,CAACzD,IAAI,CAAC,yBAAyB,EAAE2D,MAAM,CAACC,MAAM,CAAC;MACvDI,WAAW,EAAE,CAAC,UAAU,EAAE,gBAAgB,EAAE,KAAK;IACnD,CAAC,EAAEP,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpB,MAAM,IAAI,CAACzD,IAAI,CAAC,gCAAgC,EAAE2D,MAAM,CAACC,MAAM,CAAC;MAC9DF,OAAO,EAAE;IACX,CAAC,EAAED,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpB,MAAM,IAAI,CAACzD,IAAI,CAAC,iBAAiB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IACnD,MAAM,IAAI,CAACzD,IAAI,CAAC,+BAA+B,EAAE2D,MAAM,CAACC,MAAM,CAAC;MAC7DK,MAAM,EAAE;IACV,CAAC,EAAER,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpB,MAAM,IAAI,CAACzD,IAAI,CAAC,+BAA+B,EAAE2D,MAAM,CAACC,MAAM,CAAC;MAC7DM,KAAK,EAAE;IACT,CAAC,EAAET,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpB,MAAM,IAAI,CAACzD,IAAI,CAAC,+BAA+B,EAAE2D,MAAM,CAACC,MAAM,CAAC;MAC7DF,OAAO,EAAE;IACX,CAAC,EAAED,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpB,MAAM,IAAI,CAACzD,IAAI,CAAC,kCAAkC,EAAE2D,MAAM,CAACC,MAAM,CAAC;MAChEO,KAAK,EAAE;IACT,CAAC,EAAEV,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpB,MAAM,IAAI,CAACzD,IAAI,CAAC,qCAAqC,EAAE2D,MAAM,CAACC,MAAM,CAAC;MACnEQ,WAAW,EAAE;IACf,CAAC,EAAEX,QAAQ,CAAC,EAAE,KAAK,CAAC;IAEpB,MAAM,IAAI,CAACzD,IAAI,CAAC,kBAAkB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IACpD,MAAM,IAAI,CAACzD,IAAI,CAAC,eAAe,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IACjD,MAAM,IAAI,CAACzD,IAAI,CAAC,eAAe,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IACjD,MAAM,IAAI,CAACzD,IAAI,CAAC,gBAAgB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IAClD,MAAM,IAAI,CAACzD,IAAI,CAAC,iBAAiB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;IACnD,MAAMY,eAAe,GAAG,MAAM,IAAI,CAACrE,IAAI,CAAC,4BAA4B,EAAEyD,QAAQ,CAAC;IAC/E,KAAK,MAAMa,MAAM,IAAI,CAACD,eAAe,CAACE,QAAQ,IAAI,EAAE,EAAEC,GAAG,CAAEC,KAAK,IAAKA,KAAK,CAACH,MAAM,CAAC,EAAE;MAClF,MAAM,IAAI,CAACtE,IAAI,CAAC,gCAAgC,EAAE2D,MAAM,CAACC,MAAM,CAAC;QAC9DU,MAAM;QACNI,KAAK,EAAE;MACT,CAAC,EAAEjB,QAAQ,CAAC,EAAE,KAAK,CAAC;IACtB;IAEA,MAAM,IAAI,CAACzD,IAAI,CAAC,uBAAuB,EAAEyD,QAAQ,EAAE,KAAK,CAAC;EAC3D;EAEA,MAAMkB,SAAS,CAAEzF,QAAQ,EAAE;IACzB,OAAO,MAAM,IAAI2B,iBAAC,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MAItC,MAAM6D,WAAW,GAAG,CAAChF,GAAG,EAAEiF,IAAI,KAAK;QACjC,IAAIjF,GAAG,EAAE;UACP,OAAOmB,MAAM,CAACnB,GAAG,CAAC;QACpB;QAEA,MAAMkF,WAAW,GAAGD,IAAI,CAACE,+BAA+B;QACxD,MAAMC,eAAe,GAAGH,IAAI,CAACI,2BAA2B;QAIxD,IAAIH,WAAW,IAAIE,eAAe,KAAKF,WAAW,EAAE;UAClDtI,eAAG,CAACC,KAAK,CAAE,6DAA4D,GAC5D,YAAWuI,eAAgB,eAAcF,WAAY,EAAC,CAAC;QACpE;QAEA/D,MAAM,CAAC,IAAIhB,KAAK,CAAC,+BAA+B,CAAC,CAAC;MACpD,CAAC;MACD,IAAI,CAAC5B,cAAc,CAACgE,mBAAmB,CAAC,4BAA4B,EAAEyC,WAAW,CAAC;MAGlF,OAAO,CAAC,YAAY;QAClB,IAAIM,QAAQ,EAAEC,iBAAiB;QAC/B,IAAI;UACD,CAACA,iBAAiB,EAAED,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAClF,IAAI,CAAC,cAAc,EAAE;YAC/Dd;UACF,CAAC,CAAC;QACJ,CAAC,CAAC,OAAOU,GAAG,EAAE;UACZpD,eAAG,CAAC8B,IAAI,CAAE,6BAA4BsB,GAAG,CAACC,OAAQ,EAAC,CAAC;UACpDkB,MAAM,CAACnB,GAAG,CAAC;QACb;QAIA,IAAIL,eAAC,CAACC,OAAO,CAAC0F,QAAQ,CAAC,EAAE;UACvB,IAAI3C,GAAG,GAAG,gCAAgC;UAC1C/F,eAAG,CAACC,KAAK,CAAC8F,GAAG,CAAC;UACdxB,MAAM,CAAC,IAAIhB,KAAK,CAACwC,GAAG,CAAC,CAAC;QACxB,CAAC,MAAM;UACLzB,OAAO,CAAC,CAACqE,iBAAiB,EAAED,QAAQ,CAAC,CAAC;QACxC;MACF,CAAC,GAAG;IACN,CAAC,CAAC;EACJ;EAEAnG,yBAAyB,CAAEa,GAAG,EAAEwF,OAAO,EAAE;IAIvC,IAAI,CAACxH,QAAQ,CAACyH,IAAI,CAACD,OAAO,CAAC/D,EAAE,CAAC;EAChC;EAEArC,kBAAkB,GAAI;IAEpBxC,eAAG,CAACC,KAAK,CAAE,iCAAgC,CAAC;EAC9C;EAEA6I,cAAc,CAAE1F,GAAG,EAAE2F,UAAU,EAAE;IAE/B/I,eAAG,CAACC,KAAK,CAAE,kBAAiBoF,IAAI,CAACC,SAAS,CAACyD,UAAU,CAAE,EAAC,CAAC;EAC3D;AACF;AAAC"}
|
|
1
|
+
{"version":3,"file":"rpc-client.js","names":["_remoteMessages","_interopRequireDefault","require","_asyncbox","_logger","_lodash","_bluebird","_rpcMessageHandler","_support","DATA_LOG_LENGTH","length","WAIT_FOR_TARGET_TIMEOUT","WAIT_FOR_TARGET_INTERVAL","MIN_PLATFORM_FOR_TARGET_BASED","MIN_PLATFORM_NO_TARGET_EXISTS","isTargetBased","isSafari","platformVersion","isHighVersion","util","compareVersions","log","debug","RpcClient","constructor","opts","_targets","_shouldCheckForTarget","shouldCheckForTarget","bundleId","logAllCommunication","logAllCommunicationHexDump","webInspectorMaxFrameLength","socketChunkSize","fullPageInitialization","isConnected","connId","uuidV4","senderId","msgId","_contexts","contexts","needsTarget","targets","connected","on","event","listener","messageHandler","once","off","warn","_isTargetBased","remoteMessages","RemoteMessages","RpcMessageHandler","addTarget","bind","updateTarget","removeTarget","onExecutionContextCreated","onGarbageCollected","waitForTarget","appIdKey","pageIdKey","force","getTarget","waitForCondition","_","isEmpty","waitMs","intervalMs","error","err","message","includes","Error","send","command","waitForResponse","timer","timing","Timer","start","sendToDevice","toLowerCase","info","getDuration","asMilliSeconds","toFixed","B","resolve","reject","_cmd$__argument","_cmd$__argument2","wrapperMsgId","toString","targetId","fullOpts","defaults","id","cmd","getRemoteCommand","__argument","WIRSocketDataKey","isNil","Buffer","from","JSON","stringify","messageHandled","truncate","listeners","__selector","prependOnceListener","args","value","code","msg","res","sendMessage","connect","disconnect","removeAllListeners","receive","app","targetInfo","pendingTargetNotification","isProvisional","has","oldTargetId","newTargetId","provisional","_this$targets$app","_this$targets$app$pro","page","toPairs","selectPage","sendOpts","enabled","Object","assign","initializePageFull","initializePage","disabled","instruments","active","state","depth","shouldPause","loggingChannels","source","channels","map","entry","level","selectApp","onAppChange","dict","oldAppIdKey","WIRHostApplicationIdentifierKey","correctAppIdKey","WIRApplicationIdentifierKey","pageDict","connectedAppIdKey","context","push","onScriptParsed","scriptInfo","exports","default"],"sources":["../../../lib/rpc/rpc-client.js"],"sourcesContent":["import RemoteMessages from './remote-messages';\nimport { waitForCondition } from 'asyncbox';\nimport log from '../logger';\nimport _ from 'lodash';\nimport B from 'bluebird';\nimport RpcMessageHandler from './rpc-message-handler';\nimport { util, timing } from '@appium/support';\n\n\nconst DATA_LOG_LENGTH = {length: 200};\n\nconst WAIT_FOR_TARGET_TIMEOUT = 10000;\nconst WAIT_FOR_TARGET_INTERVAL = 1000;\n\nconst MIN_PLATFORM_FOR_TARGET_BASED = '12.2';\n\n// `Target.exists` protocol method was removed from WebKit in 13.4\nconst MIN_PLATFORM_NO_TARGET_EXISTS = '13.4';\n\nfunction isTargetBased (isSafari, platformVersion) {\n // On iOS 12.2 the messages get sent through the Target domain\n // On iOS 13.0+, WKWebView also needs to follow the Target domain,\n // so here only check the target OS version as the default behaviour.\n const isHighVersion = util.compareVersions(platformVersion, '>=', MIN_PLATFORM_FOR_TARGET_BASED);\n log.debug(`Checking which communication style to use (${isSafari ? '' : 'non-'}Safari on platform version '${platformVersion}')`);\n log.debug(`Platform version equal or higher than '${MIN_PLATFORM_FOR_TARGET_BASED}': ${isHighVersion}`);\n return isHighVersion;\n}\n\nexport default class RpcClient {\n constructor (opts = {}) {\n this._targets = [];\n this._shouldCheckForTarget = !!opts.shouldCheckForTarget;\n\n const {\n bundleId,\n platformVersion = {},\n isSafari = true,\n logAllCommunication = false,\n logAllCommunicationHexDump = false,\n webInspectorMaxFrameLength,\n socketChunkSize,\n fullPageInitialization = false,\n } = opts;\n\n this.isSafari = isSafari;\n\n this.isConnected = false;\n this.connId = util.uuidV4();\n this.senderId = util.uuidV4();\n this.msgId = 0;\n\n this.logAllCommunication = logAllCommunication;\n this.logAllCommunicationHexDump = logAllCommunicationHexDump;\n this.socketChunkSize = socketChunkSize;\n this.webInspectorMaxFrameLength = webInspectorMaxFrameLength;\n\n this.fullPageInitialization = fullPageInitialization;\n\n this.bundleId = bundleId;\n this.platformVersion = platformVersion;\n\n this._contexts = [];\n this._targets = {};\n\n // start with a best guess for the protocol\n this.isTargetBased = isTargetBased(isSafari, this.platformVersion);\n }\n\n get contexts () {\n return this._contexts;\n }\n\n get needsTarget () {\n return this.shouldCheckForTarget && this.isTargetBased;\n }\n\n get targets () {\n return this._targets;\n }\n\n get shouldCheckForTarget () {\n return this._shouldCheckForTarget;\n }\n\n set shouldCheckForTarget (shouldCheckForTarget) {\n this._shouldCheckForTarget = !!shouldCheckForTarget;\n }\n\n get isConnected () {\n return this.connected;\n }\n\n set isConnected (connected) {\n this.connected = !!connected;\n }\n\n on (event, listener) {\n this.messageHandler.on(event, listener);\n return this;\n }\n\n once (event, listener) {\n this.messageHandler.once(event, listener);\n return this;\n }\n\n off (event, listener) {\n this.messageHandler.off(event, listener);\n return this;\n }\n\n set isTargetBased (isTargetBased) {\n log.warn(`Setting communication protocol: using ${isTargetBased ? 'Target-based' : 'full Web Inspector protocol'} communication`);\n this._isTargetBased = isTargetBased;\n\n if (!this.remoteMessages) {\n this.remoteMessages = new RemoteMessages(isTargetBased);\n } else {\n this.remoteMessages.isTargetBased = isTargetBased;\n }\n\n if (!this.messageHandler) {\n this.messageHandler = new RpcMessageHandler(isTargetBased);\n\n // add handlers for internal events\n this.messageHandler.on('Target.targetCreated', this.addTarget.bind(this));\n this.messageHandler.on('Target.didCommitProvisionalTarget', this.updateTarget.bind(this));\n this.messageHandler.on('Target.targetDestroyed', this.removeTarget.bind(this));\n this.messageHandler.on('Runtime.executionContextCreated', this.onExecutionContextCreated.bind(this));\n this.messageHandler.on('Heap.garbageCollected', this.onGarbageCollected.bind(this));\n } else {\n this.messageHandler.isTargetBased = isTargetBased;\n }\n }\n\n get isTargetBased () {\n return this._isTargetBased;\n }\n\n async waitForTarget (appIdKey, pageIdKey, force = false) {\n if (!force && !this.needsTarget) {\n return;\n }\n\n if (this.getTarget(appIdKey, pageIdKey)) {\n return;\n }\n\n // otherwise waiting is necessary to see what the target is\n try {\n await waitForCondition(() => !_.isEmpty(this.getTarget(appIdKey, pageIdKey)), {\n waitMs: WAIT_FOR_TARGET_TIMEOUT,\n intervalMs: WAIT_FOR_TARGET_INTERVAL,\n error: 'No targets found, unable to communicate with device',\n });\n } catch (err) {\n if (!err.message.includes('Condition unmet')) {\n throw err;\n }\n throw new Error('No targets found, unable to communicate with device');\n }\n }\n\n async send (command, opts = {}, waitForResponse = true) {\n const timer = new timing.Timer().start();\n const {\n appIdKey,\n pageIdKey\n } = opts;\n try {\n if (!_.isEmpty(appIdKey) && !_.isEmpty(pageIdKey)) {\n await this.waitForTarget(appIdKey, pageIdKey);\n }\n return await this.sendToDevice(command, opts, waitForResponse);\n } catch (err) {\n let { message = '' } = err;\n message = message.toLowerCase();\n if (message.includes(`'target' domain was not found`)) {\n log.info('The target device does not support Target based communication. ' +\n 'Will follow non-target based communication.');\n this.isTargetBased = false;\n return await this.sendToDevice(command, opts, waitForResponse);\n } else if (message.includes(`domain was not found`) ||\n message.includes(`some arguments of method`) ||\n message.includes(`missing target`)) {\n this.isTargetBased = true;\n await this.waitForTarget(appIdKey, pageIdKey);\n return await this.sendToDevice(command, opts, waitForResponse);\n }\n throw err;\n } finally {\n log.debug(`Sending to Web Inspector took ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n }\n }\n\n async sendToDevice (command, opts = {}, waitForResponse = true) {\n return await new B(async (resolve, reject) => {\n // promise to be resolved whenever remote debugger\n // replies to our request\n\n // keep track of the messages coming and going using a simple sequential id\n const msgId = this.msgId++;\n let wrapperMsgId = msgId;\n if (this.isTargetBased) {\n // for target-base communication, everything is wrapped up\n wrapperMsgId = this.msgId++;\n // acknowledge wrapper message\n this.messageHandler.on(wrapperMsgId.toString(), function (err) {\n if (err) {\n reject(err);\n }\n });\n }\n\n const appIdKey = opts.appIdKey;\n const pageIdKey = opts.pageIdKey;\n const targetId = this.getTarget(appIdKey, pageIdKey);\n\n // retrieve the correct command to send\n const fullOpts = _.defaults({\n connId: this.connId,\n senderId: this.senderId,\n targetId,\n id: msgId,\n }, opts);\n const cmd = this.remoteMessages.getRemoteCommand(command, fullOpts);\n\n if (cmd?.__argument?.WIRSocketDataKey) {\n // make sure the message being sent has all the information that is needed\n if (_.isNil(cmd.__argument.WIRSocketDataKey.id)) {\n cmd.__argument.WIRSocketDataKey.id = wrapperMsgId;\n }\n cmd.__argument.WIRSocketDataKey =\n Buffer.from(JSON.stringify(cmd.__argument.WIRSocketDataKey));\n }\n\n let messageHandled = true;\n if (!waitForResponse) {\n // the promise will be resolved as soon as the socket has been sent\n messageHandled = false;\n // do not log receipts\n this.messageHandler.once(msgId.toString(), function (err) {\n if (err) {\n // we are not waiting for this, and if it errors it is most likely\n // a protocol change. Log and check during testing\n log.error(`Received error from send that is not being waited for (id: ${msgId}): '${_.truncate(JSON.stringify(err), DATA_LOG_LENGTH)}'`);\n // reject, though it is very rare that this will be triggered, since\n // the promise is resolved directlty after send. On the off chance,\n // though, it will alert of a protocol change.\n reject(err);\n }\n });\n } else if (this.messageHandler.listeners(cmd.__selector).length) {\n this.messageHandler.prependOnceListener(cmd.__selector, function (err, ...args) {\n if (err) {\n return reject(err);\n }\n log.debug(`Received response from send (id: ${msgId}): '${_.truncate(JSON.stringify(args), DATA_LOG_LENGTH)}'`);\n resolve(args);\n });\n } else if (cmd?.__argument?.WIRSocketDataKey) {\n this.messageHandler.once(msgId.toString(), function (err, value) {\n if (err) {\n return reject(new Error(`Remote debugger error with code '${err.code}': ${err.message}`));\n }\n log.debug(`Received data response from send (id: ${msgId}): '${_.truncate(JSON.stringify(value), DATA_LOG_LENGTH)}'`);\n resolve(value);\n });\n } else {\n // nothing else is handling things, so just resolve when the message is sent\n messageHandled = false;\n }\n\n const msg = `Sending '${cmd.__selector}' message` +\n (fullOpts.appIdKey ? ` to app '${fullOpts.appIdKey}'` : '') +\n (fullOpts.pageIdKey ? `, page '${fullOpts.pageIdKey}'` : '') +\n (this.needsTarget && targetId ? `, target '${targetId}'` : '') +\n ` (id: ${msgId}): '${command}'`;\n log.debug(msg);\n try {\n const res = await this.sendMessage(cmd);\n if (!messageHandled) {\n // There are no handlers waiting for a response before resolving,\n // and no errors sending the message over the socket, so resolve\n resolve(res);\n }\n } catch (err) {\n return reject(err);\n }\n });\n }\n\n async connect () { // eslint-disable-line require-await\n throw new Error(`Sub-classes need to implement a 'connect' function`);\n }\n\n async disconnect () { // eslint-disable-line require-await\n this.messageHandler.removeAllListeners();\n }\n\n async sendMessage (/* command */) { // eslint-disable-line require-await\n throw new Error(`Sub-classes need to implement a 'sendMessage' function`);\n }\n\n async receive (/* data */) { // eslint-disable-line require-await\n throw new Error(`Sub-classes need to implement a 'receive' function`);\n }\n\n addTarget (err, app, targetInfo) {\n if (_.isNil(targetInfo?.targetId)) {\n log.warn(`Received 'Target.targetCreated' event for app '${app}' with no target. Skipping`);\n return;\n }\n if (_.isEmpty(this.pendingTargetNotification) && !targetInfo.isProvisional) {\n log.warn(`Received 'Target.targetCreated' event for app '${app}' with no pending request: ${JSON.stringify(targetInfo)}`);\n return;\n }\n\n if (targetInfo.isProvisional) {\n log.debug(`Provisional target created for app '${app}', '${targetInfo.targetId}'. Ignoring until target update event`);\n return;\n }\n\n const [appIdKey, pageIdKey] = this.pendingTargetNotification;\n\n log.debug(`Target created for app '${appIdKey}' and page '${pageIdKey}': ${JSON.stringify(targetInfo)}`);\n if (_.has(this.targets[appIdKey], pageIdKey)) {\n log.debug(`There is already a target for this app and page ('${this.targets[appIdKey][pageIdKey]}'). This might cause problems`);\n }\n this.targets[app] = this.targets[app] || {};\n this.targets[appIdKey][pageIdKey] = targetInfo.targetId;\n }\n\n updateTarget (err, app, oldTargetId, newTargetId) {\n log.debug(`Target updated for app '${app}'. Old target: '${oldTargetId}', new target: '${newTargetId}'`);\n if (!this.targets[app]) {\n log.warn(`No existing target for app '${app}'. Not sure what to do`);\n return;\n }\n // save this, to be used if/when the existing target is destroyed\n this.targets[app].provisional = {\n oldTargetId,\n newTargetId,\n };\n }\n\n removeTarget (err, app, targetInfo) {\n if (_.isNil(targetInfo?.targetId)) {\n log.debug(`Received 'Target.targetDestroyed' event with no target. Skipping`);\n return;\n }\n\n log.debug(`Target destroyed for app '${app}': ${targetInfo.targetId}`);\n\n // go through the targets and find the one that has a waiting provisional target\n if (this.targets[app]?.provisional?.oldTargetId === targetInfo.targetId) {\n const {oldTargetId, newTargetId} = this.targets[app].provisional;\n delete this.targets[app].provisional;\n\n // we do not know the page, so go through and find the existing target\n const targets = this.targets[app];\n for (const [page, targetId] of _.toPairs(targets)) {\n if (targetId === oldTargetId) {\n log.debug(`Found provisional target for app '${app}'. Old target: '${oldTargetId}', new target: '${newTargetId}'. Updating`);\n targets[page] = newTargetId;\n return;\n }\n }\n log.warn(`Provisional target for app '${app}' found, but no suitable existing target found. This may cause problems`);\n log.warn(`Old target: '${oldTargetId}', new target: '${newTargetId}'. Existing targets: ${JSON.stringify(targets)}`);\n }\n\n // if there is no waiting provisional target, just get rid of the existing one\n const targets = this.targets[app];\n for (const [page, targetId] of _.toPairs(targets)) {\n if (targetId === targetInfo.targetId) {\n delete targets[page];\n return;\n }\n }\n log.debug(`Target '${targetInfo.targetId}' deleted for app '${app}', but no such target exists`);\n }\n\n getTarget (appIdKey, pageIdKey) {\n return (this.targets[appIdKey] || {})[pageIdKey];\n }\n\n async selectPage (appIdKey, pageIdKey) {\n this.pendingTargetNotification = [appIdKey, pageIdKey];\n this.shouldCheckForTarget = false;\n\n // go through the steps that the Desktop Safari system\n // goes through to initialize the Web Inspector session\n\n const sendOpts = {\n appIdKey,\n pageIdKey,\n };\n\n // highlight and then un-highlight the webview\n for (const enabled of [true, false]) {\n await this.send('indicateWebView', Object.assign({\n enabled,\n }, sendOpts), false);\n }\n\n await this.send('setSenderKey', sendOpts);\n log.debug('Sender key set');\n\n if (this.isTargetBased && util.compareVersions(this.platformVersion, '<', MIN_PLATFORM_NO_TARGET_EXISTS)) {\n await this.send('Target.exists', sendOpts, false);\n }\n\n this.shouldCheckForTarget = true;\n\n if (this.fullPageInitialization) {\n await this.initializePageFull(appIdKey, pageIdKey);\n } else {\n await this.initializePage(appIdKey, pageIdKey);\n }\n }\n\n /*\n * Perform the minimal initialization to get the Web Inspector working\n */\n async initializePage (appIdKey, pageIdKey) {\n const sendOpts = {\n appIdKey,\n pageIdKey,\n };\n\n await this.send('Inspector.enable', sendOpts, false);\n await this.send('Page.enable', sendOpts, false);\n\n // go through the tasks to initialize\n await this.send('Network.enable', sendOpts, false);\n await this.send('Runtime.enable', sendOpts, false);\n await this.send('Heap.enable', sendOpts, false);\n await this.send('Debugger.enable', sendOpts, false);\n await this.send('Console.enable', sendOpts, false);\n await this.send('Inspector.initialized', sendOpts, false);\n }\n\n /*\n * Mimic every step that Desktop Safari Develop tools uses to initialize a\n * Web Inspector session\n */\n async initializePageFull (appIdKey, pageIdKey) {\n const sendOpts = {\n appIdKey,\n pageIdKey,\n };\n\n await this.send('Inspector.enable', sendOpts, false);\n await this.send('Page.enable', sendOpts, false);\n\n // go through the tasks to initialize\n await this.send('Page.getResourceTree', sendOpts, false);\n await this.send('Network.enable', sendOpts, false);\n await this.send('Network.setResourceCachingDisabled', Object.assign({\n disabled: false,\n }, sendOpts), false);\n await this.send('DOMStorage.enable', sendOpts, false);\n await this.send('Database.enable', sendOpts, false);\n await this.send('IndexedDB.enable', sendOpts, false);\n await this.send('CSS.enable', sendOpts, false);\n await this.send('Runtime.enable', sendOpts, false);\n await this.send('Heap.enable', sendOpts, false);\n await this.send('Memory.enable', sendOpts, false);\n await this.send('ApplicationCache.enable', sendOpts, false);\n await this.send('ApplicationCache.getFramesWithManifests', sendOpts, false);\n await this.send('Timeline.setInstruments', Object.assign({\n instruments: ['Timeline', 'ScriptProfiler', 'CPU'],\n }, sendOpts), false);\n await this.send('Timeline.setAutoCaptureEnabled', Object.assign({\n enabled: false,\n }, sendOpts), false);\n await this.send('Debugger.enable', sendOpts, false);\n await this.send('Debugger.setBreakpointsActive', Object.assign({\n active: true,\n }, sendOpts), false);\n await this.send('Debugger.setPauseOnExceptions', Object.assign({\n state: 'none',\n }, sendOpts), false);\n await this.send('Debugger.setPauseOnAssertions', Object.assign({\n enabled: false,\n }, sendOpts), false);\n await this.send('Debugger.setAsyncStackTraceDepth', Object.assign({\n depth: 200,\n }, sendOpts), false);\n await this.send('Debugger.setPauseForInternalScripts', Object.assign({\n shouldPause: false,\n }, sendOpts), false);\n\n await this.send('LayerTree.enable', sendOpts, false);\n await this.send('Worker.enable', sendOpts, false);\n await this.send('Canvas.enable', sendOpts, false);\n await this.send('Console.enable', sendOpts, false);\n await this.send('DOM.getDocument', sendOpts, false);\n const loggingChannels = await this.send('Console.getLoggingChannels', sendOpts);\n for (const source of (loggingChannels.channels || []).map((entry) => entry.source)) {\n await this.send('Console.setLoggingChannelLevel', Object.assign({\n source,\n level: 'verbose',\n }, sendOpts), false);\n }\n\n await this.send('Inspector.initialized', sendOpts, false);\n }\n\n async selectApp (appIdKey) {\n return await new B((resolve, reject) => {\n // local callback, temporarily added as callback to\n // `_rpc_applicationConnected:` remote debugger response\n // to handle the initial connection\n const onAppChange = (err, dict) => {\n if (err) {\n return reject(err);\n }\n // from the dictionary returned, get the ids\n const oldAppIdKey = dict.WIRHostApplicationIdentifierKey;\n const correctAppIdKey = dict.WIRApplicationIdentifierKey;\n\n // if this is a report of a proxy redirect from the remote debugger\n // we want to update our dictionary and get a new app id\n if (oldAppIdKey && correctAppIdKey !== oldAppIdKey) {\n log.debug(`We were notified we might have connected to the wrong app. ` +\n `Using id ${correctAppIdKey} instead of ${oldAppIdKey}`);\n }\n\n reject(new Error('New application has connected'));\n };\n this.messageHandler.prependOnceListener('_rpc_applicationConnected:', onAppChange);\n\n // do the actual connecting to the app\n return (async () => {\n let pageDict, connectedAppIdKey;\n try {\n ([connectedAppIdKey, pageDict] = await this.send('connectToApp', {\n appIdKey\n }));\n } catch (err) {\n log.warn(`Unable to connect to app: ${err.message}`);\n reject(err);\n }\n\n // sometimes the connect logic happens, but with an empty dictionary\n // which leads to the remote debugger getting disconnected, and into a loop\n if (_.isEmpty(pageDict)) {\n let msg = 'Empty page dictionary received';\n log.debug(msg);\n reject(new Error(msg));\n } else {\n resolve([connectedAppIdKey, pageDict]);\n }\n })();\n });\n }\n\n onExecutionContextCreated (err, context) {\n // { id: 2, isPageContext: true, name: '', frameId: '0.1' }\n // right now we have no way to map contexts to apps/pages\n // so just store\n this.contexts.push(context.id);\n }\n\n onGarbageCollected () {\n // just want to log that this is happening, as it can affect opertion\n log.debug(`Web Inspector garbage collected`);\n }\n\n onScriptParsed (err, scriptInfo) {\n // { scriptId: '13', url: '', startLine: 0, startColumn: 0, endLine: 82, endColumn: 3 }\n log.debug(`Script parsed: ${JSON.stringify(scriptInfo)}`);\n }\n}\n"],"mappings":"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"}
|
|
@@ -173,4 +173,4 @@ class RpcMessageHandler extends _events.default {
|
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
175
|
exports.default = RpcMessageHandler;
|
|
176
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJScGNNZXNzYWdlSGFuZGxlciIsIkV2ZW50RW1pdHRlcnMiLCJjb25zdHJ1Y3RvciIsImlzVGFyZ2V0QmFzZWQiLCJfaXNUYXJnZXRCYXNlZCIsImhhbmRsZU1lc3NhZ2UiLCJwbGlzdCIsInNlbGVjdG9yIiwiX19zZWxlY3RvciIsImxvZyIsImRlYnVnIiwiYXJndW1lbnQiLCJfX2FyZ3VtZW50IiwiZW1pdCIsIldJUlNpbXVsYXRvck5hbWVLZXkiLCJXSVJTaW11bGF0b3JCdWlsZEtleSIsIldJUlNpbXVsYXRvclByb2R1Y3RWZXJzaW9uS2V5IiwiV0lSQXBwbGljYXRpb25EaWN0aW9uYXJ5S2V5IiwiV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5IiwiV0lSTGlzdGluZ0tleSIsImhhbmRsZURhdGFNZXNzYWdlIiwicGFyc2VEYXRhS2V5IiwiSlNPTiIsInBhcnNlIiwiV0lSTWVzc2FnZURhdGFLZXkiLCJ0b1N0cmluZyIsImVyciIsImVycm9yIiwiXyIsInRydW5jYXRlIiwic3RyaW5naWZ5IiwibGVuZ3RoIiwiRXJyb3IiLCJtZXNzYWdlIiwiZGlzcGF0Y2hEYXRhTWVzc2FnZSIsIm1zZ0lkIiwibWV0aG9kIiwicGFyYW1zIiwicmVzdWx0IiwiaXNFbXB0eSIsImxpc3RlbmVyQ291bnQiLCJoYXMiLCJ2YWx1ZSIsImV2ZW50TmFtZXMiLCJhcmdzIiwicHVzaCIsInJlY29yZCIsImNvbnRleHQiLCJzdGFydHNXaXRoIiwibmFtZSIsImRhdGFLZXkiLCJpZCIsImFwcCIsInRhcmdldEluZm8iLCJvbGRUYXJnZXRJZCIsIm5ld1RhcmdldElkIiwidGFyZ2V0SWQiLCJ3YXJuIiwidXRpbCIsImpzb25TdHJpbmdpZnkiLCJ3YXNUaHJvd24iLCJkZXNjcmlwdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9ycGMvcnBjLW1lc3NhZ2UtaGFuZGxlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgRXZlbnRFbWl0dGVycyBmcm9tICdldmVudHMnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJwY01lc3NhZ2VIYW5kbGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVycyB7XG4gIGNvbnN0cnVjdG9yIChpc1RhcmdldEJhc2VkID0gZmFsc2UpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcbiAgfVxuXG4gIGdldCBpc1RhcmdldEJhc2VkICgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNUYXJnZXRCYXNlZDtcbiAgfVxuXG4gIHNldCBpc1RhcmdldEJhc2VkIChpc1RhcmdldEJhc2VkKSB7XG4gICAgdGhpcy5faXNUYXJnZXRCYXNlZCA9ICEhaXNUYXJnZXRCYXNlZDtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZU1lc3NhZ2UgKHBsaXN0KSB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBwbGlzdC5fX3NlbGVjdG9yO1xuICAgIGlmICghc2VsZWN0b3IpIHtcbiAgICAgIGxvZy5kZWJ1ZygnR290IGFuIGludmFsaWQgcGxpc3QnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcmd1bWVudCA9IHBsaXN0Ll9fYXJndW1lbnQ7XG4gICAgc3dpdGNoIChzZWxlY3Rvcikge1xuICAgICAgY2FzZSAnX3JwY19yZXBvcnRTZXR1cDonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfcmVwb3J0U2V0dXA6JyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIGFyZ3VtZW50LldJUlNpbXVsYXRvck5hbWVLZXksXG4gICAgICAgICAgYXJndW1lbnQuV0lSU2ltdWxhdG9yQnVpbGRLZXksXG4gICAgICAgICAgYXJndW1lbnQuV0lSU2ltdWxhdG9yUHJvZHVjdFZlcnNpb25LZXlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdfcnBjX3JlcG9ydENvbm5lY3RlZEFwcGxpY2F0aW9uTGlzdDonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfcmVwb3J0Q29ubmVjdGVkQXBwbGljYXRpb25MaXN0OicsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBhcmd1bWVudC5XSVJBcHBsaWNhdGlvbkRpY3Rpb25hcnlLZXlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdfcnBjX2FwcGxpY2F0aW9uU2VudExpc3Rpbmc6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX2ZvcndhcmRHZXRMaXN0aW5nOicsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBhcmd1bWVudC5XSVJBcHBsaWNhdGlvbklkZW50aWZpZXJLZXksXG4gICAgICAgICAgYXJndW1lbnQuV0lSTGlzdGluZ0tleVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfYXBwbGljYXRpb25Db25uZWN0ZWQ6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOicsIG51bGwsIGFyZ3VtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdfcnBjX2FwcGxpY2F0aW9uRGlzY29ubmVjdGVkOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19hcHBsaWNhdGlvbkRpc2Nvbm5lY3RlZDonLCBudWxsLCBhcmd1bWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19hcHBsaWNhdGlvblVwZGF0ZWQ6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX2FwcGxpY2F0aW9uVXBkYXRlZDonLCBudWxsLCBhcmd1bWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19yZXBvcnRDb25uZWN0ZWREcml2ZXJMaXN0Oic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19yZXBvcnRDb25uZWN0ZWREcml2ZXJMaXN0OicsIG51bGwsIGFyZ3VtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdfcnBjX3JlcG9ydEN1cnJlbnRTdGF0ZTonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfcmVwb3J0Q3VycmVudFN0YXRlOicsIG51bGwsIGFyZ3VtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdfcnBjX2FwcGxpY2F0aW9uU2VudERhdGE6JzpcbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVEYXRhTWVzc2FnZShwbGlzdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbG9nLmRlYnVnKGBEZWJ1Z2dlciBnb3QgYSBtZXNzYWdlIGZvciAnJHtzZWxlY3Rvcn0nIGFuZCBoYXZlIG5vIGAgK1xuICAgICAgICAgIGBoYW5kbGVyLCBkb2luZyBub3RoaW5nLmApO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlRGF0YUtleSAocGxpc3QpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocGxpc3QuX19hcmd1bWVudC5XSVJNZXNzYWdlRGF0YUtleS50b1N0cmluZygndXRmOCcpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy5lcnJvcihgVW5wYXJzZWFibGUgbWVzc2FnZSBkYXRhOiAke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkocGxpc3QpLCB7bGVuZ3RoOiAxMDB9KX1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIG1lc3NhZ2UgZGF0YTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkaXNwYXRjaERhdGFNZXNzYWdlIChtc2dJZCwgbWV0aG9kLCBwYXJhbXMsIHJlc3VsdCwgZXJyb3IpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgaWYgKCFfLmlzRW1wdHkobXNnSWQpKSB7XG4gICAgICBsb2cuZGVidWcoYEhhbmRsaW5nIG1lc3NhZ2UgKGlkOiAnJHttc2dJZH0nKWApO1xuICAgIH1cblxuICAgIGlmIChtc2dJZCkge1xuICAgICAgaWYgKHRoaXMubGlzdGVuZXJDb3VudChtc2dJZCkpIHtcbiAgICAgICAgaWYgKF8uaGFzKHJlc3VsdD8ucmVzdWx0LCAndmFsdWUnKSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXN1bHQudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0KG1zZ0lkLCBlcnJvciwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5lcnJvcihgV2ViIEluc3BlY3RvciByZXR1cm5lZCBkYXRhIGZvciBtZXNzYWdlICcke21zZ0lkfScgYCArXG4gICAgICAgICAgYGJ1dCB3ZSB3ZXJlIG5vdCB3YWl0aW5nIGZvciB0aGF0IG1lc3NhZ2UhIGAgK1xuICAgICAgICAgIGByZXN1bHQ6ICcke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9JzsgYCArXG4gICAgICAgICAgYGVycm9yOiAnJHtKU09OLnN0cmluZ2lmeShlcnJvcil9J2ApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBldmVudE5hbWVzID0gW21ldGhvZF07XG4gICAgbGV0IGFyZ3MgPSBbcGFyYW1zXTtcblxuICAgIC8vIHNvbWUgZXZlbnRzIGhhdmUgZGlmZmVyZW50IG5hbWVzLCBvciB0aGUgYXJndW1lbnRzIGFyZSBtYXBwZWQgZnJvbSB0aGVcbiAgICAvLyBwYXJhbWV0ZXJzIHJlY2VpdmVkXG4gICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgIGNhc2UgJ1BhZ2UuZnJhbWVTdG9wcGVkTG9hZGluZyc6XG4gICAgICAgIGV2ZW50TmFtZXMucHVzaCgnUGFnZS5mcmFtZU5hdmlnYXRlZCcpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlICdQYWdlLmZyYW1lTmF2aWdhdGVkJzpcbiAgICAgICAgYXJncyA9IFtgJyR7bWV0aG9kfScgZXZlbnRgXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdUaW1lbGluZS5ldmVudFJlY29yZGVkJzpcbiAgICAgICAgYXJncyA9IFtwYXJhbXMgfHwgcGFyYW1zLnJlY29yZF07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQ29uc29sZS5tZXNzYWdlQWRkZWQnOlxuICAgICAgICBhcmdzID0gW3BhcmFtcy5tZXNzYWdlXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdSdW50aW1lLmV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkJzpcbiAgICAgICAgYXJncyA9IFtwYXJhbXMuY29udGV4dF07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gcGFzc1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoXy5zdGFydHNXaXRoKG1ldGhvZCwgJ05ldHdvcmsuJykpIHtcbiAgICAgIC8vIGFnZ3JlZ2F0ZSBOZXR3b3JrIGV2ZW50cywgYW5kIGFkZCBvcmlnaW5hbCBtZXRob2QgbmFtZSB0byB0aGUgYXJndW1lbnRzXG4gICAgICBldmVudE5hbWVzLnB1c2goJ05ldHdvcmtFdmVudCcpO1xuICAgICAgYXJncy5wdXNoKG1ldGhvZCk7XG4gICAgfVxuICAgIGlmIChfLnN0YXJ0c1dpdGgobWV0aG9kLCAnQ29uc29sZS4nKSkge1xuICAgICAgLy8gYWdncmVnYXRlIE5ldHdvcmsgZXZlbnRzLCBhbmQgYWRkIG9yaWdpbmFsIG1ldGhvZCBuYW1lIHRvIHRoZSBhcmd1bWVudHNcbiAgICAgIGV2ZW50TmFtZXMucHVzaCgnQ29uc29sZUV2ZW50Jyk7XG4gICAgICBhcmdzLnB1c2gobWV0aG9kKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgZXZlbnROYW1lcykge1xuICAgICAgdGhpcy5lbWl0KG5hbWUsIGVycm9yLCAuLi5hcmdzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYW5kbGVEYXRhTWVzc2FnZSAocGxpc3QpIHtcbiAgICBjb25zdCBkYXRhS2V5ID0gdGhpcy5wYXJzZURhdGFLZXkocGxpc3QpO1xuICAgIGxldCBtc2dJZCA9IChkYXRhS2V5LmlkIHx8ICcnKS50b1N0cmluZygpO1xuICAgIGxldCByZXN1bHQgPSBkYXRhS2V5LnJlc3VsdDtcblxuICAgIGxldCBtZXRob2QgPSBkYXRhS2V5Lm1ldGhvZDtcbiAgICBsZXQgcGFyYW1zO1xuXG4gICAgaWYgKG1ldGhvZCA9PT0gJ1RhcmdldC50YXJnZXRDcmVhdGVkJykge1xuICAgICAgLy8gdGhpcyBpcyBpbiByZXNwb25zZSB0byBhIGBfcnBjX2ZvcndhcmRTb2NrZXRTZXR1cDpgIGNhbGxcbiAgICAgIC8vIHRhcmdldEluZm86IHsgdGFyZ2V0SWQ6ICdwYWdlLTEnLCB0eXBlOiAncGFnZScgfVxuICAgICAgY29uc3QgYXBwID0gcGxpc3QuX19hcmd1bWVudC5XSVJBcHBsaWNhdGlvbklkZW50aWZpZXJLZXk7XG4gICAgICBjb25zdCB0YXJnZXRJbmZvID0gZGF0YUtleS5wYXJhbXMudGFyZ2V0SW5mbztcbiAgICAgIHRoaXMuZW1pdCgnVGFyZ2V0LnRhcmdldENyZWF0ZWQnLCBudWxsLCBhcHAsIHRhcmdldEluZm8pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAnVGFyZ2V0LmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0Jykge1xuICAgICAgY29uc3QgYXBwID0gcGxpc3QuX19hcmd1bWVudC5XSVJBcHBsaWNhdGlvbklkZW50aWZpZXJLZXk7XG4gICAgICBjb25zdCBvbGRUYXJnZXRJZCA9IGRhdGFLZXkucGFyYW1zLm9sZFRhcmdldElkO1xuICAgICAgY29uc3QgbmV3VGFyZ2V0SWQgPSBkYXRhS2V5LnBhcmFtcy5uZXdUYXJnZXRJZDtcbiAgICAgIHRoaXMuZW1pdCgnVGFyZ2V0LmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0JywgbnVsbCwgYXBwLCBvbGRUYXJnZXRJZCwgbmV3VGFyZ2V0SWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAnVGFyZ2V0LnRhcmdldERlc3Ryb3llZCcpIHtcbiAgICAgIGNvbnN0IGFwcCA9IHBsaXN0Ll9fYXJndW1lbnQuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuICAgICAgY29uc3QgdGFyZ2V0SW5mbyA9IGRhdGFLZXkucGFyYW1zLnRhcmdldEluZm8gfHwge3RhcmdldElkOiBkYXRhS2V5LnBhcmFtcy50YXJnZXRJZH07XG4gICAgICB0aGlzLmVtaXQoJ1RhcmdldC50YXJnZXREZXN0cm95ZWQnLCBudWxsLCBhcHAsIHRhcmdldEluZm8pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGF0YUtleS5lcnJvciAmJiB0aGlzLmlzVGFyZ2V0QmFzZWQpIHtcbiAgICAgIGlmIChkYXRhS2V5Lm1ldGhvZCAhPT0gJ1RhcmdldC5kaXNwYXRjaE1lc3NhZ2VGcm9tVGFyZ2V0Jykge1xuICAgICAgICAvLyB0aGlzIHNvcnQgb2YgbWVzc2FnZSwgYXQgdGhpcyBwb2ludCwgaXMganVzdCBhbiBhY2tub3dsZWRnZW1lbnRcbiAgICAgICAgLy8gdGhhdCB0aGUgb3JpZ2luYWwgbWVzc2FnZSB3YXMgcmVjZWl2ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBhdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGEgVGFyZ2V0LWJhc2VkIG1lc3NhZ2Ugd3JhcHBpbmcgYSBwcm90b2NvbCBtZXNzYWdlXG4gICAgICBsZXQgbWVzc2FnZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1lc3NhZ2UgPSBKU09OLnBhcnNlKGRhdGFLZXkucGFyYW1zLm1lc3NhZ2UpO1xuICAgICAgICBtc2dJZCA9IG1lc3NhZ2UuaWQ7XG4gICAgICAgIG1ldGhvZCA9IG1lc3NhZ2UubWV0aG9kO1xuICAgICAgICByZXN1bHQgPSBtZXNzYWdlLnJlc3VsdCB8fCBtZXNzYWdlO1xuICAgICAgICBwYXJhbXMgPSByZXN1bHQucGFyYW1zO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIGlmIHRoaXMgaGFwcGVucyB0aGVuIHNvbWUgYXNwZWN0IG9mIHRoZSBwcm90b2NvbCBpcyBtaXNzaW5nIHRvIHVzXG4gICAgICAgIC8vIHNvIHByaW50IHRoZSBlbnRpcmUgbWVzc2FnZSB0byBnZXQgdmlzaWJpaXR5IGludG8gd2hhdCBpcyBnb2luZyBvblxuICAgICAgICBsb2cuZXJyb3IoYFVuZXhwZWN0ZWQgbWVzc2FnZSBmb3JtYXQgZnJvbSBXZWIgSW5zcGVjdG9yOmApO1xuICAgICAgICB0aGlzLndhcm4odXRpbC5qc29uU3RyaW5naWZ5KHBsaXN0KSk7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zID0gZGF0YUtleS5wYXJhbXM7XG4gICAgfVxuXG4gICAgLy8gd2UgY2FuIGdldCBhbiBlcnJvciwgb3Igd2UgY2FuIGdldCBhIHJlc3BvbnNlIHRoYXQgaXMgYW4gZXJyb3JcbiAgICBsZXQgZXJyb3IgPSBkYXRhS2V5LmVycm9yIHx8IG51bGw7XG4gICAgaWYgKHJlc3VsdD8ud2FzVGhyb3duKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gKHJlc3VsdD8ucmVzdWx0Py52YWx1ZSB8fCByZXN1bHQ/LnJlc3VsdD8uZGVzY3JpcHRpb24pXG4gICAgICAgID8gKHJlc3VsdD8ucmVzdWx0Py52YWx1ZSB8fCByZXN1bHQ/LnJlc3VsdD8uZGVzY3JpcHRpb24pXG4gICAgICAgIDogJ0Vycm9yIG9jY3VycmVkIGluIGhhbmRsaW5nIGRhdGEgbWVzc2FnZSc7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmRpc3BhdGNoRGF0YU1lc3NhZ2UobXNnSWQsIG1ldGhvZCwgcGFyYW1zLCByZXN1bHQsIGVycm9yKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR2UsTUFBTUEsaUJBQWlCLFNBQVNDLGVB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
|
|
176
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX3N1cHBvcnQiLCJfZXZlbnRzIiwiUnBjTWVzc2FnZUhhbmRsZXIiLCJFdmVudEVtaXR0ZXJzIiwiY29uc3RydWN0b3IiLCJpc1RhcmdldEJhc2VkIiwiX2lzVGFyZ2V0QmFzZWQiLCJoYW5kbGVNZXNzYWdlIiwicGxpc3QiLCJzZWxlY3RvciIsIl9fc2VsZWN0b3IiLCJsb2ciLCJkZWJ1ZyIsImFyZ3VtZW50IiwiX19hcmd1bWVudCIsImVtaXQiLCJXSVJTaW11bGF0b3JOYW1lS2V5IiwiV0lSU2ltdWxhdG9yQnVpbGRLZXkiLCJXSVJTaW11bGF0b3JQcm9kdWN0VmVyc2lvbktleSIsIldJUkFwcGxpY2F0aW9uRGljdGlvbmFyeUtleSIsIldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsIldJUkxpc3RpbmdLZXkiLCJoYW5kbGVEYXRhTWVzc2FnZSIsInBhcnNlRGF0YUtleSIsIkpTT04iLCJwYXJzZSIsIldJUk1lc3NhZ2VEYXRhS2V5IiwidG9TdHJpbmciLCJlcnIiLCJlcnJvciIsIl8iLCJ0cnVuY2F0ZSIsInN0cmluZ2lmeSIsImxlbmd0aCIsIkVycm9yIiwibWVzc2FnZSIsImRpc3BhdGNoRGF0YU1lc3NhZ2UiLCJtc2dJZCIsIm1ldGhvZCIsInBhcmFtcyIsInJlc3VsdCIsImlzRW1wdHkiLCJsaXN0ZW5lckNvdW50IiwiX3Jlc3VsdCIsImhhcyIsInZhbHVlIiwiZXZlbnROYW1lcyIsImFyZ3MiLCJwdXNoIiwicmVjb3JkIiwiY29udGV4dCIsInN0YXJ0c1dpdGgiLCJuYW1lIiwiX3Jlc3VsdDIiLCJkYXRhS2V5IiwiaWQiLCJhcHAiLCJ0YXJnZXRJbmZvIiwib2xkVGFyZ2V0SWQiLCJuZXdUYXJnZXRJZCIsInRhcmdldElkIiwid2FybiIsInV0aWwiLCJqc29uU3RyaW5naWZ5Iiwid2FzVGhyb3duIiwiX3Jlc3VsdDMiLCJfcmVzdWx0MyRyZXN1bHQiLCJfcmVzdWx0NCIsIl9yZXN1bHQ0JHJlc3VsdCIsIl9yZXN1bHQ1IiwiX3Jlc3VsdDUkcmVzdWx0IiwiX3Jlc3VsdDYiLCJfcmVzdWx0NiRyZXN1bHQiLCJkZXNjcmlwdGlvbiIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3JwYy9ycGMtbWVzc2FnZS1oYW5kbGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBFdmVudEVtaXR0ZXJzIGZyb20gJ2V2ZW50cyc7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnBjTWVzc2FnZUhhbmRsZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXJzIHtcbiAgY29uc3RydWN0b3IgKGlzVGFyZ2V0QmFzZWQgPSBmYWxzZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBpc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgZ2V0IGlzVGFyZ2V0QmFzZWQgKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgc2V0IGlzVGFyZ2V0QmFzZWQgKGlzVGFyZ2V0QmFzZWQpIHtcbiAgICB0aGlzLl9pc1RhcmdldEJhc2VkID0gISFpc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlTWVzc2FnZSAocGxpc3QpIHtcbiAgICBjb25zdCBzZWxlY3RvciA9IHBsaXN0Ll9fc2VsZWN0b3I7XG4gICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgbG9nLmRlYnVnKCdHb3QgYW4gaW52YWxpZCBwbGlzdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFyZ3VtZW50ID0gcGxpc3QuX19hcmd1bWVudDtcbiAgICBzd2l0Y2ggKHNlbGVjdG9yKSB7XG4gICAgICBjYXNlICdfcnBjX3JlcG9ydFNldHVwOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19yZXBvcnRTZXR1cDonLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgYXJndW1lbnQuV0lSU2ltdWxhdG9yTmFtZUtleSxcbiAgICAgICAgICBhcmd1bWVudC5XSVJTaW11bGF0b3JCdWlsZEtleSxcbiAgICAgICAgICBhcmd1bWVudC5XSVJTaW11bGF0b3JQcm9kdWN0VmVyc2lvbktleVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfcmVwb3J0Q29ubmVjdGVkQXBwbGljYXRpb25MaXN0Oic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19yZXBvcnRDb25uZWN0ZWRBcHBsaWNhdGlvbkxpc3Q6JyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIGFyZ3VtZW50LldJUkFwcGxpY2F0aW9uRGljdGlvbmFyeUtleVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfYXBwbGljYXRpb25TZW50TGlzdGluZzonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfZm9yd2FyZEdldExpc3Rpbmc6JyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIGFyZ3VtZW50LldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSxcbiAgICAgICAgICBhcmd1bWVudC5XSVJMaXN0aW5nS2V5XG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19hcHBsaWNhdGlvbkNvbm5lY3RlZDonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfYXBwbGljYXRpb25Db25uZWN0ZWQ6JywgbnVsbCwgYXJndW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfYXBwbGljYXRpb25EaXNjb25uZWN0ZWQ6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX2FwcGxpY2F0aW9uRGlzY29ubmVjdGVkOicsIG51bGwsIGFyZ3VtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdfcnBjX2FwcGxpY2F0aW9uVXBkYXRlZDonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfYXBwbGljYXRpb25VcGRhdGVkOicsIG51bGwsIGFyZ3VtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdfcnBjX3JlcG9ydENvbm5lY3RlZERyaXZlckxpc3Q6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX3JlcG9ydENvbm5lY3RlZERyaXZlckxpc3Q6JywgbnVsbCwgYXJndW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfcmVwb3J0Q3VycmVudFN0YXRlOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19yZXBvcnRDdXJyZW50U3RhdGU6JywgbnVsbCwgYXJndW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfYXBwbGljYXRpb25TZW50RGF0YTonOlxuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZURhdGFNZXNzYWdlKHBsaXN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsb2cuZGVidWcoYERlYnVnZ2VyIGdvdCBhIG1lc3NhZ2UgZm9yICcke3NlbGVjdG9yfScgYW5kIGhhdmUgbm8gYCArXG4gICAgICAgICAgYGhhbmRsZXIsIGRvaW5nIG5vdGhpbmcuYCk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VEYXRhS2V5IChwbGlzdCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShwbGlzdC5fX2FyZ3VtZW50LldJUk1lc3NhZ2VEYXRhS2V5LnRvU3RyaW5nKCd1dGY4JykpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmVycm9yKGBVbnBhcnNlYWJsZSBtZXNzYWdlIGRhdGE6ICR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShwbGlzdCksIHtsZW5ndGg6IDEwMH0pfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgbWVzc2FnZSBkYXRhOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRpc3BhdGNoRGF0YU1lc3NhZ2UgKG1zZ0lkLCBtZXRob2QsIHBhcmFtcywgcmVzdWx0LCBlcnJvcikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICBpZiAoIV8uaXNFbXB0eShtc2dJZCkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgSGFuZGxpbmcgbWVzc2FnZSAoaWQ6ICcke21zZ0lkfScpYCk7XG4gICAgfVxuXG4gICAgaWYgKG1zZ0lkKSB7XG4gICAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50KG1zZ0lkKSkge1xuICAgICAgICBpZiAoXy5oYXMocmVzdWx0Py5yZXN1bHQsICd2YWx1ZScpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlc3VsdC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQobXNnSWQsIGVycm9yLCByZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmVycm9yKGBXZWIgSW5zcGVjdG9yIHJldHVybmVkIGRhdGEgZm9yIG1lc3NhZ2UgJyR7bXNnSWR9JyBgICtcbiAgICAgICAgICBgYnV0IHdlIHdlcmUgbm90IHdhaXRpbmcgZm9yIHRoYXQgbWVzc2FnZSEgYCArXG4gICAgICAgICAgYHJlc3VsdDogJyR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX0nOyBgICtcbiAgICAgICAgICBgZXJyb3I6ICcke0pTT04uc3RyaW5naWZ5KGVycm9yKX0nYCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGV2ZW50TmFtZXMgPSBbbWV0aG9kXTtcbiAgICBsZXQgYXJncyA9IFtwYXJhbXNdO1xuXG4gICAgLy8gc29tZSBldmVudHMgaGF2ZSBkaWZmZXJlbnQgbmFtZXMsIG9yIHRoZSBhcmd1bWVudHMgYXJlIG1hcHBlZCBmcm9tIHRoZVxuICAgIC8vIHBhcmFtZXRlcnMgcmVjZWl2ZWRcbiAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgY2FzZSAnUGFnZS5mcmFtZVN0b3BwZWRMb2FkaW5nJzpcbiAgICAgICAgZXZlbnROYW1lcy5wdXNoKCdQYWdlLmZyYW1lTmF2aWdhdGVkJyk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgJ1BhZ2UuZnJhbWVOYXZpZ2F0ZWQnOlxuICAgICAgICBhcmdzID0gW2AnJHttZXRob2R9JyBldmVudGBdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1RpbWVsaW5lLmV2ZW50UmVjb3JkZWQnOlxuICAgICAgICBhcmdzID0gW3BhcmFtcyB8fCBwYXJhbXMucmVjb3JkXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdDb25zb2xlLm1lc3NhZ2VBZGRlZCc6XG4gICAgICAgIGFyZ3MgPSBbcGFyYW1zLm1lc3NhZ2VdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1J1bnRpbWUuZXhlY3V0aW9uQ29udGV4dENyZWF0ZWQnOlxuICAgICAgICBhcmdzID0gW3BhcmFtcy5jb250ZXh0XTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBwYXNzXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChfLnN0YXJ0c1dpdGgobWV0aG9kLCAnTmV0d29yay4nKSkge1xuICAgICAgLy8gYWdncmVnYXRlIE5ldHdvcmsgZXZlbnRzLCBhbmQgYWRkIG9yaWdpbmFsIG1ldGhvZCBuYW1lIHRvIHRoZSBhcmd1bWVudHNcbiAgICAgIGV2ZW50TmFtZXMucHVzaCgnTmV0d29ya0V2ZW50Jyk7XG4gICAgICBhcmdzLnB1c2gobWV0aG9kKTtcbiAgICB9XG4gICAgaWYgKF8uc3RhcnRzV2l0aChtZXRob2QsICdDb25zb2xlLicpKSB7XG4gICAgICAvLyBhZ2dyZWdhdGUgTmV0d29yayBldmVudHMsIGFuZCBhZGQgb3JpZ2luYWwgbWV0aG9kIG5hbWUgdG8gdGhlIGFyZ3VtZW50c1xuICAgICAgZXZlbnROYW1lcy5wdXNoKCdDb25zb2xlRXZlbnQnKTtcbiAgICAgIGFyZ3MucHVzaChtZXRob2QpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBldmVudE5hbWVzKSB7XG4gICAgICB0aGlzLmVtaXQobmFtZSwgZXJyb3IsIC4uLmFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhbmRsZURhdGFNZXNzYWdlIChwbGlzdCkge1xuICAgIGNvbnN0IGRhdGFLZXkgPSB0aGlzLnBhcnNlRGF0YUtleShwbGlzdCk7XG4gICAgbGV0IG1zZ0lkID0gKGRhdGFLZXkuaWQgfHwgJycpLnRvU3RyaW5nKCk7XG4gICAgbGV0IHJlc3VsdCA9IGRhdGFLZXkucmVzdWx0O1xuXG4gICAgbGV0IG1ldGhvZCA9IGRhdGFLZXkubWV0aG9kO1xuICAgIGxldCBwYXJhbXM7XG5cbiAgICBpZiAobWV0aG9kID09PSAnVGFyZ2V0LnRhcmdldENyZWF0ZWQnKSB7XG4gICAgICAvLyB0aGlzIGlzIGluIHJlc3BvbnNlIHRvIGEgYF9ycGNfZm9yd2FyZFNvY2tldFNldHVwOmAgY2FsbFxuICAgICAgLy8gdGFyZ2V0SW5mbzogeyB0YXJnZXRJZDogJ3BhZ2UtMScsIHR5cGU6ICdwYWdlJyB9XG4gICAgICBjb25zdCBhcHAgPSBwbGlzdC5fX2FyZ3VtZW50LldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleTtcbiAgICAgIGNvbnN0IHRhcmdldEluZm8gPSBkYXRhS2V5LnBhcmFtcy50YXJnZXRJbmZvO1xuICAgICAgdGhpcy5lbWl0KCdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcsIG51bGwsIGFwcCwgdGFyZ2V0SW5mbyk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdUYXJnZXQuZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQnKSB7XG4gICAgICBjb25zdCBhcHAgPSBwbGlzdC5fX2FyZ3VtZW50LldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleTtcbiAgICAgIGNvbnN0IG9sZFRhcmdldElkID0gZGF0YUtleS5wYXJhbXMub2xkVGFyZ2V0SWQ7XG4gICAgICBjb25zdCBuZXdUYXJnZXRJZCA9IGRhdGFLZXkucGFyYW1zLm5ld1RhcmdldElkO1xuICAgICAgdGhpcy5lbWl0KCdUYXJnZXQuZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQnLCBudWxsLCBhcHAsIG9sZFRhcmdldElkLCBuZXdUYXJnZXRJZCk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdUYXJnZXQudGFyZ2V0RGVzdHJveWVkJykge1xuICAgICAgY29uc3QgYXBwID0gcGxpc3QuX19hcmd1bWVudC5XSVJBcHBsaWNhdGlvbklkZW50aWZpZXJLZXk7XG4gICAgICBjb25zdCB0YXJnZXRJbmZvID0gZGF0YUtleS5wYXJhbXMudGFyZ2V0SW5mbyB8fCB7dGFyZ2V0SWQ6IGRhdGFLZXkucGFyYW1zLnRhcmdldElkfTtcbiAgICAgIHRoaXMuZW1pdCgnVGFyZ2V0LnRhcmdldERlc3Ryb3llZCcsIG51bGwsIGFwcCwgdGFyZ2V0SW5mbyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhS2V5LmVycm9yICYmIHRoaXMuaXNUYXJnZXRCYXNlZCkge1xuICAgICAgaWYgKGRhdGFLZXkubWV0aG9kICE9PSAnVGFyZ2V0LmRpc3BhdGNoTWVzc2FnZUZyb21UYXJnZXQnKSB7XG4gICAgICAgIC8vIHRoaXMgc29ydCBvZiBtZXNzYWdlLCBhdCB0aGlzIHBvaW50LCBpcyBqdXN0IGFuIGFja25vd2xlZGdlbWVudFxuICAgICAgICAvLyB0aGF0IHRoZSBvcmlnaW5hbCBtZXNzYWdlIHdhcyByZWNlaXZlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgYSBUYXJnZXQtYmFzZWQgbWVzc2FnZSB3cmFwcGluZyBhIHByb3RvY29sIG1lc3NhZ2VcbiAgICAgIGxldCBtZXNzYWdlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWVzc2FnZSA9IEpTT04ucGFyc2UoZGF0YUtleS5wYXJhbXMubWVzc2FnZSk7XG4gICAgICAgIG1zZ0lkID0gbWVzc2FnZS5pZDtcbiAgICAgICAgbWV0aG9kID0gbWVzc2FnZS5tZXRob2Q7XG4gICAgICAgIHJlc3VsdCA9IG1lc3NhZ2UucmVzdWx0IHx8IG1lc3NhZ2U7XG4gICAgICAgIHBhcmFtcyA9IHJlc3VsdC5wYXJhbXM7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gaWYgdGhpcyBoYXBwZW5zIHRoZW4gc29tZSBhc3BlY3Qgb2YgdGhlIHByb3RvY29sIGlzIG1pc3NpbmcgdG8gdXNcbiAgICAgICAgLy8gc28gcHJpbnQgdGhlIGVudGlyZSBtZXNzYWdlIHRvIGdldCB2aXNpYmlpdHkgaW50byB3aGF0IGlzIGdvaW5nIG9uXG4gICAgICAgIGxvZy5lcnJvcihgVW5leHBlY3RlZCBtZXNzYWdlIGZvcm1hdCBmcm9tIFdlYiBJbnNwZWN0b3I6YCk7XG4gICAgICAgIHRoaXMud2Fybih1dGlsLmpzb25TdHJpbmdpZnkocGxpc3QpKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXMgPSBkYXRhS2V5LnBhcmFtcztcbiAgICB9XG5cbiAgICAvLyB3ZSBjYW4gZ2V0IGFuIGVycm9yLCBvciB3ZSBjYW4gZ2V0IGEgcmVzcG9uc2UgdGhhdCBpcyBhbiBlcnJvclxuICAgIGxldCBlcnJvciA9IGRhdGFLZXkuZXJyb3IgfHwgbnVsbDtcbiAgICBpZiAocmVzdWx0Py53YXNUaHJvd24pIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAocmVzdWx0Py5yZXN1bHQ/LnZhbHVlIHx8IHJlc3VsdD8ucmVzdWx0Py5kZXNjcmlwdGlvbilcbiAgICAgICAgPyAocmVzdWx0Py5yZXN1bHQ/LnZhbHVlIHx8IHJlc3VsdD8ucmVzdWx0Py5kZXNjcmlwdGlvbilcbiAgICAgICAgOiAnRXJyb3Igb2NjdXJyZWQgaW4gaGFuZGxpbmcgZGF0YSBtZXNzYWdlJztcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2hEYXRhTWVzc2FnZShtc2dJZCwgbWV0aG9kLCBwYXJhbXMsIHJlc3VsdCwgZXJyb3IpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBR2UsTUFBTUksaUJBQWlCLFNBQVNDLGVBQWEsQ0FBQztFQUMzREMsV0FBV0EsQ0FBRUMsYUFBYSxHQUFHLEtBQUssRUFBRTtJQUNsQyxLQUFLLEVBQUU7SUFFUCxJQUFJLENBQUNBLGFBQWEsR0FBR0EsYUFBYTtFQUNwQztFQUVBLElBQUlBLGFBQWFBLENBQUEsRUFBSTtJQUNuQixPQUFPLElBQUksQ0FBQ0MsY0FBYztFQUM1QjtFQUVBLElBQUlELGFBQWFBLENBQUVBLGFBQWEsRUFBRTtJQUNoQyxJQUFJLENBQUNDLGNBQWMsR0FBRyxDQUFDLENBQUNELGFBQWE7RUFDdkM7RUFFQSxNQUFNRSxhQUFhQSxDQUFFQyxLQUFLLEVBQUU7SUFDMUIsTUFBTUMsUUFBUSxHQUFHRCxLQUFLLENBQUNFLFVBQVU7SUFDakMsSUFBSSxDQUFDRCxRQUFRLEVBQUU7TUFDYkUsZUFBRyxDQUFDQyxLQUFLLENBQUMsc0JBQXNCLENBQUM7TUFDakM7SUFDRjtJQUVBLE1BQU1DLFFBQVEsR0FBR0wsS0FBSyxDQUFDTSxVQUFVO0lBQ2pDLFFBQVFMLFFBQVE7TUFDZCxLQUFLLG1CQUFtQjtRQUN0QixJQUFJLENBQUNNLElBQUksQ0FBQyxtQkFBbUIsRUFDM0IsSUFBSSxFQUNKRixRQUFRLENBQUNHLG1CQUFtQixFQUM1QkgsUUFB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
|