New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

appium-ios-simulator

Package Overview
Dependencies
Maintainers
7
Versions
235
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

appium-ios-simulator - npm Package Compare versions

Comparing version 3.22.0 to 3.22.1

10

build/lib/simulator-xcode-11.4.js

@@ -53,2 +53,10 @@ "use strict";

async launchWindow(isUiClientRunning, opts) {
if (!isUiClientRunning) {
await this.startUIClient(opts);
}
await this.boot();
}
}

@@ -60,2 +68,2 @@

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zaW11bGF0b3IteGNvZGUtMTEuNC5qcyJdLCJuYW1lcyI6WyJTaW11bGF0b3JYY29kZTExXzQiLCJTaW11bGF0b3JYY29kZTExIiwiY29uc3RydWN0b3IiLCJ1ZGlkIiwieGNvZGVWZXJzaW9uIiwiX2xvY2F0aW9uTWVudSIsInNldEFwcGVhcmFuY2UiLCJ2YWx1ZSIsInNpbWN0bCIsIl8iLCJ0b0xvd2VyIiwiZ2V0QXBwZWFyYW5jZSIsImFkZENlcnRpZmljYXRlIiwicGF5bG9hZCIsIm9wdHMiLCJpc1Jvb3QiLCJtZXRob2ROYW1lIiwicmF3IiwicHVzaE5vdGlmaWNhdGlvbiIsInNldFBlcm1pc3Npb25zIiwiYnVuZGxlSWQiLCJwZXJtaXNzaW9uc01hcHBpbmciLCJjbGVhcktleWNoYWlucyIsInJlc2V0S2V5Y2hhaW4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0EsTUFBTUEsa0JBQU4sU0FBaUNDLHVCQUFqQyxDQUFrRDtBQUNoREMsRUFBQUEsV0FBVyxDQUFFQyxJQUFGLEVBQVFDLFlBQVIsRUFBc0I7QUFDL0IsVUFBTUQsSUFBTixFQUFZQyxZQUFaO0FBSUEsU0FBS0MsYUFBTCxHQUFxQixVQUFyQjtBQUNEOztBQVlELFFBQU1DLGFBQU4sQ0FBcUJDLEtBQXJCLEVBQTRCO0FBQzFCLFVBQU0sS0FBS0MsTUFBTCxDQUFZRixhQUFaLENBQTBCRyxnQkFBRUMsT0FBRixDQUFVSCxLQUFWLENBQTFCLENBQU47QUFDRDs7QUFhRCxRQUFNSSxhQUFOLEdBQXVCO0FBQ3JCLFdBQU8sTUFBTSxLQUFLSCxNQUFMLENBQVlHLGFBQVosRUFBYjtBQUNEOztBQWtCRCxRQUFNQyxjQUFOLENBQXNCQyxPQUF0QixFQUErQkMsSUFBSSxHQUFHLEVBQXRDLEVBQTBDO0FBQ3hDLFVBQU07QUFDSkMsTUFBQUEsTUFBTSxHQUFHO0FBREwsUUFFRkQsSUFGSjtBQUdBLFVBQU1FLFVBQVUsR0FBR0QsTUFBTSxHQUFHLG9CQUFILEdBQTBCLGdCQUFuRDtBQUNBLFVBQU0sS0FBS1AsTUFBTCxDQUFZUSxVQUFaLEVBQXdCSCxPQUF4QixFQUFpQztBQUFDSSxNQUFBQSxHQUFHLEVBQUU7QUFBTixLQUFqQyxDQUFOO0FBQ0EsV0FBTyxJQUFQO0FBQ0Q7O0FBb0JELFFBQU1DLGdCQUFOLENBQXdCTCxPQUF4QixFQUFpQztBQUMvQixVQUFNLEtBQUtMLE1BQUwsQ0FBWVUsZ0JBQVosQ0FBNkJMLE9BQTdCLENBQU47QUFDRDs7QUFLRCxRQUFNTSxjQUFOLENBQXNCQyxRQUF0QixFQUFnQ0Msa0JBQWhDLEVBQW9EO0FBQ2xELFdBQU8sTUFBTSxNQUFNRixjQUFOLENBQXFCQyxRQUFyQixFQUErQkMsa0JBQS9CLENBQWI7QUFLRDs7QUFLRCxRQUFNQyxjQUFOLEdBQXdCO0FBQ3RCLFVBQU0sS0FBS2QsTUFBTCxDQUFZZSxhQUFaLEVBQU47QUFDRDs7QUFyRytDOztlQXdHbkN2QixrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgU2ltdWxhdG9yWGNvZGUxMSBmcm9tICcuL3NpbXVsYXRvci14Y29kZS0xMSc7XG5cblxuY2xhc3MgU2ltdWxhdG9yWGNvZGUxMV80IGV4dGVuZHMgU2ltdWxhdG9yWGNvZGUxMSB7XG4gIGNvbnN0cnVjdG9yICh1ZGlkLCB4Y29kZVZlcnNpb24pIHtcbiAgICBzdXBlcih1ZGlkLCB4Y29kZVZlcnNpb24pO1xuXG4gICAgLy8gZm9yIHNldHRpbmcgdGhlIGxvY2F0aW9uIHVzaW5nIEFwcGxlU2NyaXB0LCB0aGUgdG9wLWxldmVsIG1lbnUgdGhyb3VnaCB3aGljaFxuICAgIC8vIHRoZSAnTG9jYXRpb24nIG9wdGlvbiBpcyBmb3VuZFxuICAgIHRoaXMuX2xvY2F0aW9uTWVudSA9ICdGZWF0dXJlcyc7XG4gIH1cblxuICAvKipcbiAgICogQG92ZXJyaWRlXG4gICAqIFNldHMgVUkgYXBwZWFyYW5jZSBzdHlsZS5cbiAgICogVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSBjYWxsZWQgb24gYSBib290ZWQgc2ltdWxhdG9yLlxuICAgKlxuICAgKiBAc2luY2UgWGNvZGUgU0RLIDExLjRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIG9uZSBvZiBwb3NzaWJsZSBhcHBlYXJhbmNlIHZhbHVlczpcbiAgICogLSBkYXJrOiB0byBzd2l0Y2ggdG8gdGhlIERhcmsgbW9kZVxuICAgKiAtIGxpZ2h0OiB0byBzd2l0Y2ggdG8gdGhlIExpZ2h0IG1vZGVcbiAgICovXG4gIGFzeW5jIHNldEFwcGVhcmFuY2UgKHZhbHVlKSB7XG4gICAgYXdhaXQgdGhpcy5zaW1jdGwuc2V0QXBwZWFyYW5jZShfLnRvTG93ZXIodmFsdWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3ZlcnJpZGVcbiAgICogR2V0cyB0aGUgY3VycmVudCBVSSBhcHBlYXJhbmNlIHN0eWxlXG4gICAqIFRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUgY2FsbGVkIG9uIGEgYm9vdGVkIHNpbXVsYXRvci5cbiAgICpcbiAgICogQHNpbmNlIFhjb2RlIFNESyAxMS40XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBjdXJyZW50IFVJIGFwcGVhcmFuY2Ugc3R5bGUuXG4gICAqIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG4gICAqIC0gZGFyazogdG8gc3dpdGNoIHRvIHRoZSBEYXJrIG1vZGVcbiAgICogLSBsaWdodDogdG8gc3dpdGNoIHRvIHRoZSBMaWdodCBtb2RlXG4gICAqL1xuICBhc3luYyBnZXRBcHBlYXJhbmNlICgpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zaW1jdGwuZ2V0QXBwZWFyYW5jZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IENlcnRpZmljYXRlT3B0aW9uc1xuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzUm9vdCBbdHJ1ZV0gLSBXaGV0aGVyIHRvIGluc3RhbGwgdGhlIGdpdmVuXG4gICAqIGNlcnRpZmljYXRlIGludG8gdGhlIFRydXN0ZWQgUm9vdCBzdG9yZSAoYHRydWVgKSBvciB0byB0aGUga2V5Y2hhaW5cbiAgICogKGBmYWxzZWApXG4gICAqL1xuXG4gIC8qKlxuICAgKiBAb3ZlcnJpZGVcbiAgICogQWRkcyB0aGUgZ2l2ZW4gY2VydGlmaWNhdGUgdG8gdGhlIGJvb3RlZCBzaW11bGF0b3IuXG4gICAqIFRoZSBzaW11bGF0b3IgY291bGQgYmUgaW4gYm90aCBydW5uaW5nIGFuZCBzaHV0ZG93biBzdGF0ZXNcbiAgICogaW4gb3JkZXIgZm9yIHRoaXMgbWV0aG9kIHRvIHJ1biBhcyBleHBlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBheWxvYWQgdGhlIGNvbnRlbnQgb2YgdGhlIFBFTSBjZXJ0aWZpY2F0ZVxuICAgKiBAcGFyYW0ge0NlcnRpZmljYXRlT3B0aW9uc30gb3B0c1xuICAgKi9cbiAgYXN5bmMgYWRkQ2VydGlmaWNhdGUgKHBheWxvYWQsIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGlzUm9vdCA9IHRydWUsXG4gICAgfSA9IG9wdHM7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IGlzUm9vdCA/ICdhZGRSb290Q2VydGlmaWNhdGUnIDogJ2FkZENlcnRpZmljYXRlJztcbiAgICBhd2FpdCB0aGlzLnNpbWN0bFttZXRob2ROYW1lXShwYXlsb2FkLCB7cmF3OiB0cnVlfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQG92ZXJyaWRlXG4gICAqIFNpbXVsYXRlcyBwdXNoIG5vdGlmaWNhdGlvbiBkZWxpdmVyeSB0byB0aGUgYm9vdGVkIHNpbXVsYXRvclxuICAgKlxuICAgKiBAc2luY2UgWGNvZGUgU0RLIDExLjRcbiAgICogQHBhcmFtIHtPYmplY3R9IHBheWxvYWQgLSBUaGUgb2JqZWN0IHRoYXQgZGVzY3JpYmVzIEFwcGxlIHB1c2ggbm90aWZpY2F0aW9uIGNvbnRlbnQuXG4gICAqIEl0IG11c3QgY29udGFpbiBhIHRvcC1sZXZlbCBcIlNpbXVsYXRvciBUYXJnZXQgQnVuZGxlXCIga2V5IHdpdGggYSBzdHJpbmcgdmFsdWUgbWF0Y2hpbmdcbiAgICogdGhlIHRhcmdldCBhcHBsaWNhdGlvbuKAmHMgYnVuZGxlIGlkZW50aWZpZXIgYW5kIFwiYXBzXCIga2V5IHdpdGggdmFsaWQgQXBwbGUgUHVzaCBOb3RpZmljYXRpb24gdmFsdWVzLlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICoge1xuICAgKiAgIFwiU2ltdWxhdG9yIFRhcmdldCBCdW5kbGVcIjogXCJjb20uYXBwbGUuUHJlZmVyZW5jZXNcIixcbiAgICogICBcImFwc1wiOiB7XG4gICAqICAgICBcImFsZXJ0XCI6IFwiVGhpcyBpcyBhIHNpbXVsYXRlZCBub3RpZmljYXRpb24hXCIsXG4gICAqICAgICBcImJhZGdlXCI6IDMsXG4gICAqICAgICBcInNvdW5kXCI6IFwiZGVmYXVsdFwiXG4gICAqICAgfVxuICAgKiB9XG4gICAqL1xuICBhc3luYyBwdXNoTm90aWZpY2F0aW9uIChwYXlsb2FkKSB7XG4gICAgYXdhaXQgdGhpcy5zaW1jdGwucHVzaE5vdGlmaWNhdGlvbihwYXlsb2FkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIGFzeW5jIHNldFBlcm1pc3Npb25zIChidW5kbGVJZCwgcGVybWlzc2lvbnNNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnNldFBlcm1pc3Npb25zKGJ1bmRsZUlkLCBwZXJtaXNzaW9uc01hcHBpbmcpO1xuXG4gICAgLy8gVE9ETzogU3dpdGNoIHRvIGBzaW1jdGwgcHJpdmFjeWAgY2FsbCBhZnRlciBBcHBsZVxuICAgIC8vIGZpeGVzIHRoZSBjb21tYW5kIChodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTQzNTUpXG4gICAgLy8gU291cmNlIFBSOiBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS1pb3Mtc2ltdWxhdG9yL3B1bGwvMjc5XG4gIH1cblxuICAvKipcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBhc3luYyBjbGVhcktleWNoYWlucyAoKSB7XG4gICAgYXdhaXQgdGhpcy5zaW1jdGwucmVzZXRLZXljaGFpbigpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNpbXVsYXRvclhjb2RlMTFfNDtcbiJdLCJmaWxlIjoibGliL3NpbXVsYXRvci14Y29kZS0xMS40LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zaW11bGF0b3IteGNvZGUtMTEuNC5qcyJdLCJuYW1lcyI6WyJTaW11bGF0b3JYY29kZTExXzQiLCJTaW11bGF0b3JYY29kZTExIiwiY29uc3RydWN0b3IiLCJ1ZGlkIiwieGNvZGVWZXJzaW9uIiwiX2xvY2F0aW9uTWVudSIsInNldEFwcGVhcmFuY2UiLCJ2YWx1ZSIsInNpbWN0bCIsIl8iLCJ0b0xvd2VyIiwiZ2V0QXBwZWFyYW5jZSIsImFkZENlcnRpZmljYXRlIiwicGF5bG9hZCIsIm9wdHMiLCJpc1Jvb3QiLCJtZXRob2ROYW1lIiwicmF3IiwicHVzaE5vdGlmaWNhdGlvbiIsInNldFBlcm1pc3Npb25zIiwiYnVuZGxlSWQiLCJwZXJtaXNzaW9uc01hcHBpbmciLCJjbGVhcktleWNoYWlucyIsInJlc2V0S2V5Y2hhaW4iLCJsYXVuY2hXaW5kb3ciLCJpc1VpQ2xpZW50UnVubmluZyIsInN0YXJ0VUlDbGllbnQiLCJib290Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLGtCQUFOLFNBQWlDQyx1QkFBakMsQ0FBa0Q7QUFDaERDLEVBQUFBLFdBQVcsQ0FBRUMsSUFBRixFQUFRQyxZQUFSLEVBQXNCO0FBQy9CLFVBQU1ELElBQU4sRUFBWUMsWUFBWjtBQUlBLFNBQUtDLGFBQUwsR0FBcUIsVUFBckI7QUFDRDs7QUFZRCxRQUFNQyxhQUFOLENBQXFCQyxLQUFyQixFQUE0QjtBQUMxQixVQUFNLEtBQUtDLE1BQUwsQ0FBWUYsYUFBWixDQUEwQkcsZ0JBQUVDLE9BQUYsQ0FBVUgsS0FBVixDQUExQixDQUFOO0FBQ0Q7O0FBYUQsUUFBTUksYUFBTixHQUF1QjtBQUNyQixXQUFPLE1BQU0sS0FBS0gsTUFBTCxDQUFZRyxhQUFaLEVBQWI7QUFDRDs7QUFrQkQsUUFBTUMsY0FBTixDQUFzQkMsT0FBdEIsRUFBK0JDLElBQUksR0FBRyxFQUF0QyxFQUEwQztBQUN4QyxVQUFNO0FBQ0pDLE1BQUFBLE1BQU0sR0FBRztBQURMLFFBRUZELElBRko7QUFHQSxVQUFNRSxVQUFVLEdBQUdELE1BQU0sR0FBRyxvQkFBSCxHQUEwQixnQkFBbkQ7QUFDQSxVQUFNLEtBQUtQLE1BQUwsQ0FBWVEsVUFBWixFQUF3QkgsT0FBeEIsRUFBaUM7QUFBQ0ksTUFBQUEsR0FBRyxFQUFFO0FBQU4sS0FBakMsQ0FBTjtBQUNBLFdBQU8sSUFBUDtBQUNEOztBQW9CRCxRQUFNQyxnQkFBTixDQUF3QkwsT0FBeEIsRUFBaUM7QUFDL0IsVUFBTSxLQUFLTCxNQUFMLENBQVlVLGdCQUFaLENBQTZCTCxPQUE3QixDQUFOO0FBQ0Q7O0FBS0QsUUFBTU0sY0FBTixDQUFzQkMsUUFBdEIsRUFBZ0NDLGtCQUFoQyxFQUFvRDtBQUNsRCxXQUFPLE1BQU0sTUFBTUYsY0FBTixDQUFxQkMsUUFBckIsRUFBK0JDLGtCQUEvQixDQUFiO0FBS0Q7O0FBS0QsUUFBTUMsY0FBTixHQUF3QjtBQUN0QixVQUFNLEtBQUtkLE1BQUwsQ0FBWWUsYUFBWixFQUFOO0FBQ0Q7O0FBTUQsUUFBTUMsWUFBTixDQUFvQkMsaUJBQXBCLEVBQXVDWCxJQUF2QyxFQUE2QztBQUczQyxRQUFJLENBQUNXLGlCQUFMLEVBQXdCO0FBQ3RCLFlBQU0sS0FBS0MsYUFBTCxDQUFtQlosSUFBbkIsQ0FBTjtBQUNEOztBQUNELFVBQU0sS0FBS2EsSUFBTCxFQUFOO0FBQ0Q7O0FBbEgrQzs7ZUFzSG5DM0Isa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFNpbXVsYXRvclhjb2RlMTEgZnJvbSAnLi9zaW11bGF0b3IteGNvZGUtMTEnO1xuXG5jbGFzcyBTaW11bGF0b3JYY29kZTExXzQgZXh0ZW5kcyBTaW11bGF0b3JYY29kZTExIHtcbiAgY29uc3RydWN0b3IgKHVkaWQsIHhjb2RlVmVyc2lvbikge1xuICAgIHN1cGVyKHVkaWQsIHhjb2RlVmVyc2lvbik7XG5cbiAgICAvLyBmb3Igc2V0dGluZyB0aGUgbG9jYXRpb24gdXNpbmcgQXBwbGVTY3JpcHQsIHRoZSB0b3AtbGV2ZWwgbWVudSB0aHJvdWdoIHdoaWNoXG4gICAgLy8gdGhlICdMb2NhdGlvbicgb3B0aW9uIGlzIGZvdW5kXG4gICAgdGhpcy5fbG9jYXRpb25NZW51ID0gJ0ZlYXR1cmVzJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3ZlcnJpZGVcbiAgICogU2V0cyBVSSBhcHBlYXJhbmNlIHN0eWxlLlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBhIGJvb3RlZCBzaW11bGF0b3IuXG4gICAqXG4gICAqIEBzaW5jZSBYY29kZSBTREsgMTEuNFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgb25lIG9mIHBvc3NpYmxlIGFwcGVhcmFuY2UgdmFsdWVzOlxuICAgKiAtIGRhcms6IHRvIHN3aXRjaCB0byB0aGUgRGFyayBtb2RlXG4gICAqIC0gbGlnaHQ6IHRvIHN3aXRjaCB0byB0aGUgTGlnaHQgbW9kZVxuICAgKi9cbiAgYXN5bmMgc2V0QXBwZWFyYW5jZSAodmFsdWUpIHtcbiAgICBhd2FpdCB0aGlzLnNpbWN0bC5zZXRBcHBlYXJhbmNlKF8udG9Mb3dlcih2YWx1ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvdmVycmlkZVxuICAgKiBHZXRzIHRoZSBjdXJyZW50IFVJIGFwcGVhcmFuY2Ugc3R5bGVcbiAgICogVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSBjYWxsZWQgb24gYSBib290ZWQgc2ltdWxhdG9yLlxuICAgKlxuICAgKiBAc2luY2UgWGNvZGUgU0RLIDExLjRcbiAgICogQHJldHVybnMge3N0cmluZ30gdGhlIGN1cnJlbnQgVUkgYXBwZWFyYW5jZSBzdHlsZS5cbiAgICogUG9zc2libGUgdmFsdWVzIGFyZTpcbiAgICogLSBkYXJrOiB0byBzd2l0Y2ggdG8gdGhlIERhcmsgbW9kZVxuICAgKiAtIGxpZ2h0OiB0byBzd2l0Y2ggdG8gdGhlIExpZ2h0IG1vZGVcbiAgICovXG4gIGFzeW5jIGdldEFwcGVhcmFuY2UgKCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnNpbWN0bC5nZXRBcHBlYXJhbmNlKCk7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gQ2VydGlmaWNhdGVPcHRpb25zXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNSb290IFt0cnVlXSAtIFdoZXRoZXIgdG8gaW5zdGFsbCB0aGUgZ2l2ZW5cbiAgICogY2VydGlmaWNhdGUgaW50byB0aGUgVHJ1c3RlZCBSb290IHN0b3JlIChgdHJ1ZWApIG9yIHRvIHRoZSBrZXljaGFpblxuICAgKiAoYGZhbHNlYClcbiAgICovXG5cbiAgLyoqXG4gICAqIEBvdmVycmlkZVxuICAgKiBBZGRzIHRoZSBnaXZlbiBjZXJ0aWZpY2F0ZSB0byB0aGUgYm9vdGVkIHNpbXVsYXRvci5cbiAgICogVGhlIHNpbXVsYXRvciBjb3VsZCBiZSBpbiBib3RoIHJ1bm5pbmcgYW5kIHNodXRkb3duIHN0YXRlc1xuICAgKiBpbiBvcmRlciBmb3IgdGhpcyBtZXRob2QgdG8gcnVuIGFzIGV4cGVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF5bG9hZCB0aGUgY29udGVudCBvZiB0aGUgUEVNIGNlcnRpZmljYXRlXG4gICAqIEBwYXJhbSB7Q2VydGlmaWNhdGVPcHRpb25zfSBvcHRzXG4gICAqL1xuICBhc3luYyBhZGRDZXJ0aWZpY2F0ZSAocGF5bG9hZCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3Qge1xuICAgICAgaXNSb290ID0gdHJ1ZSxcbiAgICB9ID0gb3B0cztcbiAgICBjb25zdCBtZXRob2ROYW1lID0gaXNSb290ID8gJ2FkZFJvb3RDZXJ0aWZpY2F0ZScgOiAnYWRkQ2VydGlmaWNhdGUnO1xuICAgIGF3YWl0IHRoaXMuc2ltY3RsW21ldGhvZE5hbWVdKHBheWxvYWQsIHtyYXc6IHRydWV9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3ZlcnJpZGVcbiAgICogU2ltdWxhdGVzIHB1c2ggbm90aWZpY2F0aW9uIGRlbGl2ZXJ5IHRvIHRoZSBib290ZWQgc2ltdWxhdG9yXG4gICAqXG4gICAqIEBzaW5jZSBYY29kZSBTREsgMTEuNFxuICAgKiBAcGFyYW0ge09iamVjdH0gcGF5bG9hZCAtIFRoZSBvYmplY3QgdGhhdCBkZXNjcmliZXMgQXBwbGUgcHVzaCBub3RpZmljYXRpb24gY29udGVudC5cbiAgICogSXQgbXVzdCBjb250YWluIGEgdG9wLWxldmVsIFwiU2ltdWxhdG9yIFRhcmdldCBCdW5kbGVcIiBrZXkgd2l0aCBhIHN0cmluZyB2YWx1ZSBtYXRjaGluZ1xuICAgKiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9u4oCYcyBidW5kbGUgaWRlbnRpZmllciBhbmQgXCJhcHNcIiBrZXkgd2l0aCB2YWxpZCBBcHBsZSBQdXNoIE5vdGlmaWNhdGlvbiB2YWx1ZXMuXG4gICAqIEZvciBleGFtcGxlOlxuICAgKiB7XG4gICAqICAgXCJTaW11bGF0b3IgVGFyZ2V0IEJ1bmRsZVwiOiBcImNvbS5hcHBsZS5QcmVmZXJlbmNlc1wiLFxuICAgKiAgIFwiYXBzXCI6IHtcbiAgICogICAgIFwiYWxlcnRcIjogXCJUaGlzIGlzIGEgc2ltdWxhdGVkIG5vdGlmaWNhdGlvbiFcIixcbiAgICogICAgIFwiYmFkZ2VcIjogMyxcbiAgICogICAgIFwic291bmRcIjogXCJkZWZhdWx0XCJcbiAgICogICB9XG4gICAqIH1cbiAgICovXG4gIGFzeW5jIHB1c2hOb3RpZmljYXRpb24gKHBheWxvYWQpIHtcbiAgICBhd2FpdCB0aGlzLnNpbWN0bC5wdXNoTm90aWZpY2F0aW9uKHBheWxvYWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgYXN5bmMgc2V0UGVybWlzc2lvbnMgKGJ1bmRsZUlkLCBwZXJtaXNzaW9uc01hcHBpbmcpIHtcbiAgICByZXR1cm4gYXdhaXQgc3VwZXIuc2V0UGVybWlzc2lvbnMoYnVuZGxlSWQsIHBlcm1pc3Npb25zTWFwcGluZyk7XG5cbiAgICAvLyBUT0RPOiBTd2l0Y2ggdG8gYHNpbWN0bCBwcml2YWN5YCBjYWxsIGFmdGVyIEFwcGxlXG4gICAgLy8gZml4ZXMgdGhlIGNvbW1hbmQgKGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNDM1NSlcbiAgICAvLyBTb3VyY2UgUFI6IGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLWlvcy1zaW11bGF0b3IvcHVsbC8yNzlcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIGFzeW5jIGNsZWFyS2V5Y2hhaW5zICgpIHtcbiAgICBhd2FpdCB0aGlzLnNpbWN0bC5yZXNldEtleWNoYWluKCk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICogQG92ZXJyaWRlXG4gICAqICovXG4gIGFzeW5jIGxhdW5jaFdpbmRvdyAoaXNVaUNsaWVudFJ1bm5pbmcsIG9wdHMpIHtcbiAgICAvLyBJbiB4Y29kZSAxMS40LCBVSSBDbGllbnQgbXVzdCBiZSBmaXJzdCBsYXVuY2hlZCwgb3RoZXJ3aXNlXG4gICAgLy8gc2ltIHdpbmRvdyBzdGF5cyBtaW5pbWl6ZWRcbiAgICBpZiAoIWlzVWlDbGllbnRSdW5uaW5nKSB7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0VUlDbGllbnQob3B0cyk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYm9vdCgpO1xuICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2ltdWxhdG9yWGNvZGUxMV80O1xuIl0sImZpbGUiOiJsaWIvc2ltdWxhdG9yLXhjb2RlLTExLjQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==

12

build/lib/simulator-xcode-8.js

@@ -159,12 +159,2 @@ "use strict";

async _activateWindow() {
if (this.idb) {
return await this.idb.focusSimulator();
}
_logger.default.warn(`Cannot focus Simulator window with idb. Defaulting to AppleScript`);
return await super._activateWindow();
}
async isBiometricEnrolled() {

@@ -234,2 +224,2 @@ const output = await this.executeUIClientScript(`

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zaW11bGF0b3IteGNvZGUtOC5qcyJdLCJuYW1lcyI6WyJTVEFSVFVQX1RJTUVPVVQiLCJQUk9DRVNTX0xBVU5DSF9PS19QQVRURVJOIiwiYnVuZGxlSWQiLCJSZWdFeHAiLCJyZXBsYWNlIiwiU2ltdWxhdG9yWGNvZGU4IiwiU2ltdWxhdG9yWGNvZGU3IiwiY29uc3RydWN0b3IiLCJ1ZGlkIiwieGNvZGVWZXJzaW9uIiwiaXNGcmVzaEZpbGVzIiwiX2lkYiIsIl9sb2NhdGlvbk1lbnUiLCJpZGIiLCJ2YWx1ZSIsImtpbGxVSUNsaWVudCIsIm9wdHMiLCJwaWQiLCJzaWduYWwiLCJnZXRVSUNsaWVudFBpZCIsImxvZyIsImRlYnVnIiwiZSIsImNvZGUiLCJFcnJvciIsIm1lc3NhZ2UiLCJpc0FwcEluc3RhbGxlZCIsImFwcENvbnRhaW5lciIsInNpbWN0bCIsImdldEFwcENvbnRhaW5lciIsImVuZHNXaXRoIiwiZXJyIiwiaW5mbyIsImFwcEluZm8iLCJpbmNsdWRlcyIsInN0YXJ0dXBUaW1lb3V0Iiwid2FpdEZvckJvb3QiLCJzdGFydEJvb3RNb25pdG9yIiwidGltZW91dCIsImVtaXQiLCJCT09UX0NPTVBMRVRFRF9FVkVOVCIsIm9wZW5VcmwiLCJ1cmwiLCJpc1J1bm5pbmciLCJ0aW1lciIsInRpbWluZyIsIlRpbWVyIiwic3RhcnQiLCJsYXN0RXJyb3IiLCJzdGRvdXQiLCJsYXVuY2hBcHAiLCJNT0JJTEVfU0FGQVJJX0JVTkRMRV9JRCIsInRlc3QiLCJ3YXJuIiwic3RkZXJyIiwid2FpdE1zIiwiU0FGQVJJX1NUQVJUVVBfVElNRU9VVCIsImludGVydmFsTXMiLCJnZXREdXJhdGlvbiIsImFzU2Vjb25kcyIsInRvRml4ZWQiLCJjbGVhblNhZmFyaSIsImtlZXBQcmVmcyIsInRlcm1pbmF0ZUFwcCIsImlnbiIsImNsZWFuQ3VzdG9tQXBwIiwiYXBwRmlsZSIsImFwcEJ1bmRsZUlkIiwic2NydWIiLCJzaGFrZSIsInNwYXduUHJvY2VzcyIsIl9hY3RpdmF0ZVdpbmRvdyIsImZvY3VzU2ltdWxhdG9yIiwiaXNCaW9tZXRyaWNFbnJvbGxlZCIsIm91dHB1dCIsImV4ZWN1dGVVSUNsaWVudFNjcmlwdCIsIl8iLCJpc1N0cmluZyIsInRyaW0iLCJlbnJvbGxCaW9tZXRyaWMiLCJpc0VuYWJsZWQiLCJzZW5kQmlvbWV0cmljTWF0Y2giLCJzaG91bGRNYXRjaCIsInNldEdlb2xvY2F0aW9uIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJsb2NhdGlvblNldHRlcnMiLCJzZXR0ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBSUEsTUFBTUEsZUFBZSxHQUFHLE1BQU0sSUFBOUI7O0FBQ0EsTUFBTUMseUJBQXlCLEdBQUlDLFFBQUQsSUFBYyxJQUFJQyxNQUFKLENBQVksR0FBRUQsUUFBUSxDQUFDRSxPQUFULENBQWlCLEdBQWpCLEVBQXNCLEtBQXRCLENBQTZCLFdBQTNDLENBQWhEOztBQUVBLE1BQU1DLGVBQU4sU0FBOEJDLHdCQUE5QixDQUE4QztBQUM1Q0MsRUFBQUEsV0FBVyxDQUFFQyxJQUFGLEVBQVFDLFlBQVIsRUFBc0I7QUFDL0IsVUFBTUQsSUFBTixFQUFZQyxZQUFaO0FBS0EsU0FBS0MsWUFBTCxHQUFvQixDQUNsQixpQkFEa0IsRUFFbEIsOENBRmtCLEVBR2xCLGlEQUhrQixFQUlsQixvQkFKa0IsQ0FBcEI7QUFNQSxTQUFLQyxJQUFMLEdBQVksSUFBWjtBQUlBLFNBQUtDLGFBQUwsR0FBcUIsT0FBckI7QUFDRDs7QUFPRCxNQUFJQyxHQUFKLENBQVNDLEtBQVQsRUFBZ0I7QUFDZCxTQUFLSCxJQUFMLEdBQVlHLEtBQVo7QUFDRDs7QUFLRCxNQUFJRCxHQUFKLEdBQVc7QUFDVCxXQUFPLEtBQUtGLElBQVo7QUFDRDs7QUFpQkQsUUFBTUksWUFBTixDQUFvQkMsSUFBSSxHQUFHLEVBQTNCLEVBQStCO0FBQzdCLFFBQUk7QUFDRkMsTUFBQUEs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UUFBakMsRUFBMkNDLFNBQTNDLEVBQXNELEtBQUt6RSxhQUEzRCxDQUhJLENBQXhCO0FBTUEsUUFBSW9DLFNBQUo7O0FBQ0EsU0FBSyxNQUFNdUMsTUFBWCxJQUFxQkQsZUFBckIsRUFBc0M7QUFDcEMsVUFBSTtBQUNGLGNBQU1DLE1BQU0sRUFBWjtBQUNBLGVBQU8sSUFBUDtBQUNELE9BSEQsQ0FHRSxPQUFPakUsQ0FBUCxFQUFVO0FBQ1ZGLHdCQUFJWSxJQUFKLENBQVNWLENBQUMsQ0FBQ0csT0FBWDs7QUFDQXVCLFFBQUFBLFNBQVMsR0FBRzFCLENBQVo7QUFDRDtBQUNGOztBQUNELFVBQU0wQixTQUFOO0FBQ0Q7O0FBbFMyQzs7ZUFxUy9CM0MsZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJPT1RfQ09NUExFVEVEX0VWRU5UIH0gZnJvbSAnLi9zaW11bGF0b3IteGNvZGUtNic7XG5pbXBvcnQgU2ltdWxhdG9yWGNvZGU3IGZyb20gJy4vc2ltdWxhdG9yLXhjb2RlLTcnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgc2V0TG9jYXRpb25XaXRoTHlmdCxcbiAgc2V0TG9jYXRpb25XaXRoSWRiLFxuICBzZXRMb2NhdGlvbldpdGhBcHBsZVNjcmlwdCB9IGZyb20gJy4vZ2VvbG9jYXRpb24nO1xuaW1wb3J0IHsgdGltaW5nIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgTU9CSUxFX1NBRkFSSV9CVU5ETEVfSUQsIFNBRkFSSV9TVEFSVFVQX1RJTUVPVVQgfSBmcm9tICcuL3V0aWxzJztcblxuXG4vLyB0aGVzZSBzaW1zIGFyZSBzbG9vb29vb29vd1xuY29uc3QgU1RBUlRVUF9USU1FT1VUID0gMTIwICogMTAwMDtcbmNvbnN0IFBST0NFU1NfTEFVTkNIX09LX1BBVFRFUk4gPSAoYnVuZGxlSWQpID0+IG5ldyBSZWdFeHAoYCR7YnVuZGxlSWQucmVwbGFjZSgnLicsICdcXFxcLicpfTpcXFxccytcXFxcZCtgKTtcblxuY2xhc3MgU2ltdWxhdG9yWGNvZGU4IGV4dGVuZHMgU2ltdWxhdG9yWGNvZGU3IHtcbiAgY29uc3RydWN0b3IgKHVkaWQsIHhjb2RlVmVyc2lvbikge1xuICAgIHN1cGVyKHVkaWQsIHhjb2RlVmVyc2lvbik7XG5cbiAgICAvLyBsaXN0IG9mIGZpbGVzIHRvIGNoZWNrIGZvciB3aGVuIHNlZWluZyBpZiBhIHNpbXVsYXRvciBpcyBcImZyZXNoXCJcbiAgICAvLyAobWVhbmluZyBpdCBoYXMgbmV2ZXIgYmVlbiBib290ZWQpLlxuICAgIC8vIElmIHRoZXNlIGZpbGVzIGFyZSBwcmVzZW50LCB3ZSBhc3N1bWUgaXQncyBiZWVuIHN1Y2Nlc3NmdWxseSBib290ZWRcbiAgICB0aGlzLmlzRnJlc2hGaWxlcyA9IFtcbiAgICAgICdMaWJyYXJ5L0Nvb2tpZXMnLFxuICAgICAgJ0xpYnJhcnkvUHJlZmVyZW5jZXMvLkdsb2JhbFByZWZlcmVuY2VzLnBsaXN0JyxcbiAgICAgICdMaWJyYXJ5L1ByZWZlcmVuY2VzL2NvbS5hcHBsZS5zcHJpbmdib2FyZC5wbGlzdCcsXG4gICAgICAndmFyL3J1bi9zeXNsb2cucGlkJ1xuICAgIF07XG4gICAgdGhpcy5faWRiID0gbnVsbDtcblxuICAgIC8vIGZvciBzZXR0aW5nIHRoZSBsb2NhdGlvbiB1c2luZyBBcHBsZVNjcmlwdCwgdGhlIHRvcC1sZXZlbCBtZW51IHRocm91Z2ggd2hpY2hcbiAgICAvLyB0aGUgJ0xvY2F0aW9uJyBvcHRpb24gaXMgZm91bmRcbiAgICB0aGlzLl9sb2NhdGlvbk1lbnUgPSAnRGVidWcnO1xuICB9XG5cbiAgLyoqXG4gICAqIElEQiBpbnN0YW5jZSBzZXR0ZXJcbiAgICpcbiAgICogQHBhcmFtIHtJREJ9IHZhbHVlXG4gICAqL1xuICBzZXQgaWRiICh2YWx1ZSkge1xuICAgIHRoaXMuX2lkYiA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge0lEQn0gaWRiIGluc3RhbmNlXG4gICAqL1xuICBnZXQgaWRiICgpIHtcbiAgICByZXR1cm4gdGhpcy5faWRiO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IGtpbGxPcHRzXG4gICAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHBpZCAtIFByb2Nlc3MgaWQgb2YgdGhlIFVJIFNpbXVsYXRvciB3aW5kb3dcbiAgICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSBzaWduYWwgWzJdIC0gVGhlIHNpZ25hbCBudW1iZXIgdG8gc2VuZCB0byB0aGVcbiAgICogYGtpbGxgIGNvbW1hbmRcbiAgICovXG5cbiAgLyoqXG4gICAqIEtpbGwgdGhlIFVJIGNsaWVudCBpZiBpdCBpcyBydW5uaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gez9raWxsT3B0c30gb3B0c1xuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBVSSBjbGllbnQgd2FzIHN1Y2Nlc3NmdWxseSBraWxsZWQgb3IgZmFsc2VcbiAgICogICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgbm90IHJ1bm5pbmcuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBzZW5kaW5nIHRoZSBzaWduYWwgdG8gdGhlIGNsaWVudCBwcm9jZXNzIGZhaWxzXG4gICAqL1xuICBhc3luYyBraWxsVUlDbGllbnQgKG9wdHMgPSB7fSkge1xuICAgIGxldCB7XG4gICAgICBwaWQsXG4gICAgICBzaWduYWwgPSAyLFxuICAgIH0gPSBvcHRzO1xuICAgIHBpZCA9IHBpZCB8fCBhd2FpdCB0aGlzLmdldFVJQ2xpZW50UGlkKCk7XG4gICAgaWYgKCFwaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsb2cuZGVidWcoYFNlbmRpbmcgJHtzaWduYWx9IGtpbGwgc2lnbmFsIHRvIFNpbXVsYXRvciBVSSBjbGllbnQgd2l0aCBQSUQgJHtwaWR9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWMoJ2tpbGwnLCBbYC0ke3NpZ25hbH1gLCBwaWRdKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLmNvZGUgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qga2lsbCB0aGUgU2ltdWxhdG9yIFVJIGNsaWVudC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgd2hldGhlciB0aGUgcGFydGljdWxhciBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgb24gU2ltdWxhdG9yLlxuICAgKiBAb3ZlcnJpZGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJ1bmRsZUlkIC0gVGhlIGJ1bmRsZSBpZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gYmUgY2hlY2tlZC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gaXMgaW5zdGFsbGVkLlxuICAgKi9cbiAgYXN5bmMgaXNBcHBJbnN0YWxsZWQgKGJ1bmRsZUlkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFwcENvbnRhaW5lciA9IGF3YWl0IHRoaXMuc2ltY3RsLmdldEFwcENvbnRhaW5lcihidW5kbGVJZCk7XG4gICAgICByZXR1cm4gYXBwQ29udGFpbmVyLmVuZHNXaXRoKCcuYXBwJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBnZXRfYXBwX2NvbnRhaW5lciBzdWJjb21tYW5kIGZhaWxzIGZvciBzeXN0ZW0gYXBwbGljYXRpb25zLFxuICAgICAgLy8gc28gd2UgdHJ5IHRoZSBoaWRkZW4gYXBwaW5mbyBzdWJjb21tYW5kLCB3aGljaCBwcmludHMgY29ycmVjdCBpbmZvIGZvclxuICAgICAgLy8gc3lzdGVtL2hpZGRlbiBhcHBzXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgdGhpcy5zaW1jdGwuYXBwSW5mbyhidW5kbGVJZCk7XG4gICAgICAgIHJldHVybiBpbmZvLmluY2x1ZGVzKCdBcHBsaWNhdGlvblR5cGUnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBtYXggbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIFNpbXVsYXRvciBib290aW5nIGlzIGNvbXBsZXRlZC5cbiAgICovXG4gIGdldCBzdGFydHVwVGltZW91dCAoKSB7XG4gICAgcmV0dXJuIFNUQVJUVVBfVElNRU9VVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgd2hldGhlciB0aGUgU2ltdWxhdG9yIGJvb3RpbmcgaXMgY29tcGxldGVkIGFuZC9vciB3YWl0IGZvciBpdFxuICAgKiB1bnRpbCB0aGUgdGltZW91dCBleHBpcmVzLlxuICAgKiBAb3ZlcnJpZGVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0dXBUaW1lb3V0IC0gdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCBib290aW5nIGlzIGNvbXBsZXRlZC5cbiAgICogQGVtaXRzIEJPT1RfQ09NUExFVEVEX0VWRU5UIGlmIHRoZSBjdXJyZW50IFNpbXVsYXRvciBpcyByZWFkeSB0byBhY2NlcHQgc2ltY3RsIGNvbW1hbmRzLCBsaWtlICdpbnN0YWxsJy5cbiAgICovXG4gIGFzeW5jIHdhaXRGb3JCb290IChzdGFydHVwVGltZW91dCkge1xuICAgIGF3YWl0IHRoaXMuc2ltY3RsLnN0YXJ0Qm9vdE1vbml0b3Ioe3RpbWVvdXQ6IHN0YXJ0dXBUaW1lb3V0fSk7XG4gICAgdGhpcy5lbWl0KEJPT1RfQ09NUExFVEVEX0VWRU5UKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBnaXZlbiBVUkwgaW4gbW9iaWxlIFNhZmFyaSBicm93c2VyLlxuICAgKiBUaGUgYnJvd3NlciB3aWxsIGJlIHN0YXJ0ZWQgYXV0b21hdGljYWxseSBpZiBpdCBpcyBub3QgcnVubmluZy5cbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSBUaGUgVVJMIHRvIGJlIG9wZW5lZC5cbiAgICovXG4gIGFzeW5jIG9wZW5VcmwgKHVybCkge1xuICAgIGlmICghYXdhaXQgdGhpcy5pc1J1bm5pbmcoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcmllZCB0byBvcGVuICcke3VybH0nLCBidXQgU2ltdWxhdG9yIGlzIG5vdCBpbiBCb290ZWQgc3RhdGVgKTtcbiAgICB9XG4gICAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgICBsZXQgbGFzdEVycm9yID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyB0byBtYWtlIHN1cmUgU2FmYXJpIGlzIGFscmVhZHkgcnVubmluZ1xuICAgICAgICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IHRoaXMuc2ltY3RsLmxhdW5jaEFwcChNT0JJTEVfU0FGQVJJX0JVTkRMRV9JRCk7XG4gICAgICAgICAgaWYgKFBST0NFU1NfTEFVTkNIX09LX1BBVFRFUk4oTU9CSUxFX1NBRkFSSV9CVU5ETEVfSUQpLnRlc3Qoc3Rkb3V0KSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zaW1jdGwub3BlblVybCh1cmwpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBsb2cud2FybihgRmFpbGVkIHRvIG9wZW4gJyR7dXJsfScgaW4gU2FmYXJpLiBSZXRyeWluZy4uLmApO1xuICAgICAgICAgIGxhc3RFcnJvciA9IGVyci5zdGRlcnIgfHwgZXJyLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSwge3dhaXRNczogU0FGQVJJX1NUQVJUVVBfVElNRU9VVCwgaW50ZXJ2YWxNczogNTAwfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNhZmFyaSBjYW5ub3Qgb3BlbiAnJHt1cmx9JyBhZnRlciAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNTZWNvbmRzLnRvRml4ZWQoMyl9cyBgICtcbiAgICAgICAgYGJlY2F1c2Ugb2Y6ICR7bGFzdEVycm9yIHx8ICdhbiB1bmtub3duIGVycm9yJ31gKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBTYWZhcmkgc3VjY2Vzc2Z1bGx5IG9wZW5lZCAnJHt1cmx9JyBpbiAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNTZWNvbmRzLnRvRml4ZWQoMyl9c2ApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFuIHVwIHRoZSBkaXJlY3RvcmllcyBmb3IgbW9iaWxlIFNhZmFyaS5cbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0ga2VlcFByZWZzIC0gV2hldGhlciB0byBrZWVwIFNhZmFyaSBwcmVmZXJlbmNlcyBmcm9tIGJlaW5nIGRlbGV0ZWQuXG4gICAqL1xuICBhc3luYyBjbGVhblNhZmFyaSAoa2VlcFByZWZzID0gdHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoYXdhaXQgdGhpcy5pc1J1bm5pbmcoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnNpbWN0bC50ZXJtaW5hdGVBcHAoTU9CSUxFX1NBRkFSSV9CVU5ETEVfSUQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgLy8gaWdub3JlIGVycm9yXG4gICAgfVxuICAgIGF3YWl0IHN1cGVyLmNsZWFuU2FmYXJpKGtlZXBQcmVmcyk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW4vc2NydWIgdGhlIHBhcnRpY3VsYXIgYXBwbGljYXRpb24gb24gU2ltdWxhdG9yLlxuICAgKiBAb3ZlcnJpZGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcEZpbGUgLSBBcHBsaWNhdGlvbiBuYW1lIG1pbnVzIFwiLmFwcFwiLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwQnVuZGxlSWQgLSBCdW5kbGUgaWRlbnRpZmllciBvZiB0aGUgYXBwbGljYXRpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2NydWIgLSBJZiBgc2NydWJgIGlzIGZhbHNlLCB3ZSB3YW50IHRvIGNsZWFuIGJ5IGRlbGV0aW5nIHRoZSBhcHAgYW5kIGFsbFxuICAgKiAgIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBpdC4gSWYgYHNjcnViYCBpcyB0cnVlLCB3ZSBqdXN0IHdhbnQgdG8gZGVsZXRlIHRoZSBwcmVmZXJlbmNlcyBhbmRcbiAgICogICBjaGFuZ2VkIGZpbGVzLlxuICAgKi9cbiAgYXN5bmMgY2xlYW5DdXN0b21BcHAgKGFwcEZpbGUsIGFwcEJ1bmRsZUlkLCBzY3J1YiA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuc2ltY3RsLnRlcm1pbmF0ZUFwcChhcHBCdW5kbGVJZCk7XG4gICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAvLyBpZ25vcmUgZXJyb3JcbiAgICB9XG4gICAgYXdhaXQgc3VwZXIuY2xlYW5DdXN0b21BcHAoYXBwRmlsZSwgYXBwQnVuZGxlSWQsIHNjcnViKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIFNoYWtlIGdlc3R1cmUgb24gU2ltdWxhdG9yIHdpbmRvdy5cbiAgICovXG4gIGFzeW5jIHNoYWtlICgpIHtcbiAgICBsb2cuaW5mbyhgUGVyZm9ybWluZyBzaGFrZSBnZXN0dXJlIG9uICR7dGhpcy51ZGlkfSBTaW11bGF0b3JgKTtcbiAgICBhd2FpdCB0aGlzLnNpbWN0bC5zcGF3blByb2Nlc3MoW1xuICAgICAgJ25vdGlmeXV0aWwnLFxuICAgICAgJy1wJywgJ2NvbS5hcHBsZS5VSUtpdC5TaW11bGF0b3JTaGFrZSdcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKiBAb3ZlcnJpZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFzeW5jIF9hY3RpdmF0ZVdpbmRvdyAoKSB7XG4gICAgaWYgKHRoaXMuaWRiKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5pZGIuZm9jdXNTaW11bGF0b3IoKTtcbiAgICB9XG4gICAgbG9nLndhcm4oYENhbm5vdCBmb2N1cyBTaW11bGF0b3Igd2luZG93IHdpdGggaWRiLiBEZWZhdWx0aW5nIHRvIEFwcGxlU2NyaXB0YCk7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLl9hY3RpdmF0ZVdpbmRvdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgYXN5bmMgaXNCaW9tZXRyaWNFbnJvbGxlZCAoKSB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgdGhpcy5leGVjdXRlVUlDbGllbnRTY3JpcHQoYFxuICAgICAgdGVsbCBhcHBsaWNhdGlvbiBcIlN5c3RlbSBFdmVudHNcIlxuICAgICAgICB0ZWxsIHByb2Nlc3MgXCJTaW11bGF0b3JcIlxuICAgICAgICAgIHNldCBkc3RNZW51SXRlbSB0byBtZW51IGl0ZW0gXCJUb2dnbGUgRW5yb2xsZWQgU3RhdGVcIiBvZiBtZW51IDEgb2YgbWVudSBpdGVtIFwiVG91Y2ggSURcIiBvZiBtZW51IDEgb2YgbWVudSBiYXIgaXRlbSBcIkhhcmR3YXJlXCIgb2YgbWVudSBiYXIgMVxuICAgICAgICAgIHNldCBpc0NoZWNrZWQgdG8gKHZhbHVlIG9mIGF0dHJpYnV0ZSBcIkFYTWVudUl0ZW1NYXJrQ2hhclwiIG9mIGRzdE1lbnVJdGVtKSBpcyBcIuKck1wiXG4gICAgICAgIGVuZCB0ZWxsXG4gICAgICBlbmQgdGVsbFxuICAgIGApO1xuICAgIGxvZy5kZWJ1ZyhgVG91Y2ggSUQgZW5yb2xsZWQgc3RhdGU6ICR7b3V0cHV0fWApO1xuICAgIHJldHVybiBfLmlzU3RyaW5nKG91dHB1dCkgJiYgb3V0cHV0LnRyaW0oKSA9PT0gJ3RydWUnO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgYXN5bmMgZW5yb2xsQmlvbWV0cmljIChpc0VuYWJsZWQgPSB0cnVlKSB7XG4gICAgYXdhaXQgdGhpcy5leGVjdXRlVUlDbGllbnRTY3JpcHQoYFxuICAgICAgdGVsbCBhcHBsaWNhdGlvbiBcIlN5c3RlbSBFdmVudHNcIlxuICAgICAgICB0ZWxsIHByb2Nlc3MgXCJTaW11bGF0b3JcIlxuICAgICAgICAgIHNldCBkc3RNZW51SXRlbSB0byBtZW51IGl0ZW0gXCJUb2dnbGUgRW5yb2xsZWQgU3RhdGVcIiBvZiBtZW51IDEgb2YgbWVudSBpdGVtIFwiVG91Y2ggSURcIiBvZiBtZW51IDEgb2YgbWVudSBiYXIgaXRlbSBcIkhhcmR3YXJlXCIgb2YgbWVudSBiYXIgMVxuICAgICAgICAgIHNldCBpc0NoZWNrZWQgdG8gKHZhbHVlIG9mIGF0dHJpYnV0ZSBcIkFYTWVudUl0ZW1NYXJrQ2hhclwiIG9mIGRzdE1lbnVJdGVtKSBpcyBcIuKck1wiXG4gICAgICAgICAgaWYgJHtpc0VuYWJsZWQgPyAnbm90ICcgOiAnJ31pc0NoZWNrZWQgdGhlblxuICAgICAgICAgICAgY2xpY2sgZHN0TWVudUl0ZW1cbiAgICAgICAgICBlbmQgaWZcbiAgICAgICAgZW5kIHRlbGxcbiAgICAgIGVuZCB0ZWxsXG4gICAgYCk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBhc3luYyBzZW5kQmlvbWV0cmljTWF0Y2ggKHNob3VsZE1hdGNoID0gdHJ1ZSkge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZVVJQ2xpZW50U2NyaXB0KGBcbiAgICAgIHRlbGwgYXBwbGljYXRpb24gXCJTeXN0ZW0gRXZlbnRzXCJcbiAgICAgICAgdGVsbCBwcm9jZXNzIFwiU2ltdWxhdG9yXCJcbiAgICAgICAgICBzZXQgZHN0TWVudUl0ZW0gdG8gbWVudSBpdGVtIFwiJHtzaG91bGRNYXRjaCA/ICdNYXRjaGluZyBUb3VjaCcgOiAnTm9uLW1hdGNoaW5nIFRvdWNoJ31cIiBvZiBtZW51IDEgb2YgbWVudSBpdGVtIFwiVG91Y2ggSURcIiBvZiBtZW51IDEgb2YgbWVudSBiYXIgaXRlbSBcIkhhcmR3YXJlXCIgb2YgbWVudSBiYXIgMVxuICAgICAgICAgIGNsaWNrIGRzdE1lbnVJdGVtXG4gICAgICAgIGVuZCB0ZWxsXG4gICAgICBlbmQgdGVsbFxuICAgIGApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBjdXN0b20gZ2VvbG9jYXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIGdpdmVuIFNpbXVsYXRvciB1c2luZyBBcHBsZVNjcmlwdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBsYXRpdHVkZSAtIFRoZSBsYXRpdHVkZSB2YWx1ZSwgd2hpY2ggaXMgZ29pbmcgdG8gYmUgZW50ZXJlZFxuICAgKiAgIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgZWRpdCBmaWVsZCwgZm9yIGV4YW1wbGUgJzM5LDAwMDYnLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGxvbmdpdHVkZSAtIFRoZSBsb25naXR1ZGUgdmFsdWUsIHdoaWNoIGlzIGdvaW5nIHRvIGJlIGVudGVyZWRcbiAgICogICBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGVkaXQgZmllbGQsIGZvciBleGFtcGxlICcxOSwwMDY4Jy5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGdpdmVuIHBhcmFtZXRlcnMgaGF2ZSBjb3JyZWN0IGZvcm1hdCBhbmQgd2VyZSBzdWNjZXNzZnVsbHkgYWNjZXB0ZWQuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgc2V0dGluZyB0aGUgbG9jYXRpb25cbiAgICovXG4gIGFzeW5jIHNldEdlb2xvY2F0aW9uIChsYXRpdHVkZSwgbG9uZ2l0dWRlKSB7XG4gICAgY29uc3QgbG9jYXRpb25TZXR0ZXJzID0gW1xuICAgICAgYXN5bmMgKCkgPT4gYXdhaXQgc2V0TG9jYXRpb25XaXRoTHlmdCh0aGlzLnVkaWQsIGxhdGl0dWRlLCBsb25naXR1ZGUpLFxuICAgICAgYXN5bmMgKCkgPT4gYXdhaXQgc2V0TG9jYXRpb25XaXRoSWRiKHRoaXMuaWRiLCBsYXRpdHVkZSwgbG9uZ2l0dWRlKSxcbiAgICAgIGFzeW5jICgpID0+IGF3YWl0IHNldExvY2F0aW9uV2l0aEFwcGxlU2NyaXB0KHRoaXMsIGxhdGl0dWRlLCBsb25naXR1ZGUsIHRoaXMuX2xvY2F0aW9uTWVudSksXG4gICAgXTtcblxuICAgIGxldCBsYXN0RXJyb3I7XG4gICAgZm9yIChjb25zdCBzZXR0ZXIgb2YgbG9jYXRpb25TZXR0ZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzZXR0ZXIoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy5pbmZvKGUubWVzc2FnZSk7XG4gICAgICAgIGxhc3RFcnJvciA9IGU7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IGxhc3RFcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaW11bGF0b3JYY29kZTg7XG4iXSwiZmlsZSI6ImxpYi9zaW11bGF0b3IteGNvZGUtOC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zaW11bGF0b3IteGNvZGUtOC5qcyJdLCJuYW1lcyI6WyJTVEFSVFVQX1RJTUVPVVQiLCJQUk9DRVNTX0xBVU5DSF9PS19QQVRURVJOIiwiYnVuZGxlSWQiLCJSZWdFeHAiLCJyZXBsYWNlIiwiU2ltdWxhdG9yWGNvZGU4IiwiU2ltdWxhdG9yWGNvZGU3IiwiY29uc3RydWN0b3IiLCJ1ZGlkIiwieGNvZGVWZXJzaW9uIiwiaXNGcmVzaEZpbGVzIiwiX2lkYiIsIl9sb2NhdGlvbk1lbnUiLCJpZGIiLCJ2YWx1ZSIsImtpbGxVSUNsaWVudCIsIm9wdHMiLCJwaWQiLCJzaWduYWwiLCJnZXRVSUNsaWVudFBpZCIsImxvZyIsImRlYnVnIiwiZSIsImNvZGUiLCJFcnJvciIsIm1lc3NhZ2UiLCJpc0FwcEluc3RhbGxlZCIsImFwcENvbnRhaW5lciIsInNpbWN0bCIsImdldEFwcENvbnRhaW5lciIsImVuZHNXaXRoIiwiZXJyIiwiaW5mbyIsImFwcEluZm8iLCJpbmNsdWRlcyIsInN0YXJ0dXBUaW1lb3V0Iiwid2FpdEZvckJvb3QiLCJzdGFydEJvb3RNb25pdG9yIiwidGltZW91dCIsImVtaXQiLCJCT09UX0NPTVBMRVRFRF9FVkVOVCIsIm9wZW5VcmwiLCJ1cmwiLCJpc1J1bm5pbmciLCJ0aW1lciIsInRpbWluZyIsIlRpbWVyIiwic3RhcnQiLCJsYXN0RXJyb3IiLCJzdGRvdXQiLCJsYXVuY2hBcHAiLCJNT0JJTEVfU0FGQVJJX0JVTkRMRV9JRCIsInRlc3QiLCJ3YXJuIiwic3RkZXJyIiwid2FpdE1zIiwiU0FGQVJJX1NUQVJUVVBfVElNRU9VVCIsImludGVydmFsTXMiLCJnZXREdXJhdGlvbiIsImFzU2Vjb25kcyIsInRvRml4ZWQiLCJjbGVhblNhZmFyaSIsImtlZXBQcmVmcyIsInRlcm1pbmF0ZUFwcCIsImlnbiIsImNsZWFuQ3VzdG9tQXBwIiwiYXBwRmlsZSIsImFwcEJ1bmRsZUlkIiwic2NydWIiLCJzaGFrZSIsInNwYXduUHJvY2VzcyIsImlzQmlvbWV0cmljRW5yb2xsZWQiLCJvdXRwdXQiLCJleGVjdXRlVUlDbGllbnRTY3JpcHQiLCJfIiwiaXNTdHJpbmciLCJ0cmltIiwiZW5yb2xsQmlvbWV0cmljIiwiaXNFbmFibGVkIiwic2VuZEJpb21ldHJpY01hdGNoIiwic2hvdWxkTWF0Y2giLCJzZXRHZW9sb2NhdGlvbiIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwibG9jYXRpb25TZXR0ZXJzIiwic2V0dGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUlBLE1BQU1BLGVBQWUsR0FBRyxNQUFNLElBQTlCOztBQUNBLE1BQU1DLHlCQUF5QixHQUFJQyxRQUFELElBQWMsSUFBSUMsTUFBSixDQUFZLEdBQUVELFFBQVEsQ0FBQ0UsT0FBVCxDQUFpQixHQUFqQixFQUFzQixLQUF0QixDQUE2QixXQUEzQyxDQUFoRDs7QUFFQSxNQUFNQyxlQUFOLFNBQThCQyx3QkFBOUIsQ0FBOEM7QUFDNUNDLEVBQUFBLFdBQVcsQ0FBRUMsSUFBRixFQUFRQyxZQUFSLEVBQXNCO0FBQy9CLFVBQU1ELElBQU4sRUFBWUMsWUFBWjtBQUtBLFNBQUtDLFlBQUwsR0FBb0IsQ0FDbEIsaUJBRGtCLEVBRWxCLDhDQUZrQixFQUdsQixpREFIa0IsRUFJbEIsb0JBSmtCLENBQXBCO0FBTUEsU0FBS0MsSUFBTCxHQUFZLElBQVo7QUFJQSxTQUFLQyxhQUFMLEdBQXFCLE9BQXJCO0FBQ0Q7O0FBT0QsTUFBSUMsR0FBSixDQUFTQyxLQUFULEVBQWdCO0FBQ2QsU0FBS0gsSUFBTCxHQUFZRyxLQUFaO0FBQ0Q7O0FBS0QsTUFBSUQsR0FBSixHQUFXO0FBQ1QsV0FBTyxLQUFLRixJQUFaO0FBQ0Q7O0FBaUJELFFBQU1JLFlBQU4sQ0FBb0JDLElBQUksR0FBRyxFQUEzQixFQUErQjtBQUM3QixRQUFJO0FBQ0ZDLE1BQUFBLEdBREU7QUFFRkMsTUFBQUEsTUFBTSxHQUFHO0FBRlAsUUFH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LENBQVNWLENBQUMsQ0FBQ0csT0FBWDs7QUFDQXVCLFFBQUFBLFNBQVMsR0FBRzFCLENBQVo7QUFDRDtBQUNGOztBQUNELFVBQU0wQixTQUFOO0FBQ0Q7O0FBclIyQzs7ZUF3Ui9CM0MsZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJPT1RfQ09NUExFVEVEX0VWRU5UIH0gZnJvbSAnLi9zaW11bGF0b3IteGNvZGUtNic7XG5pbXBvcnQgU2ltdWxhdG9yWGNvZGU3IGZyb20gJy4vc2ltdWxhdG9yLXhjb2RlLTcnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgc2V0TG9jYXRpb25XaXRoTHlmdCxcbiAgc2V0TG9jYXRpb25XaXRoSWRiLFxuICBzZXRMb2NhdGlvbldpdGhBcHBsZVNjcmlwdCB9IGZyb20gJy4vZ2VvbG9jYXRpb24nO1xuaW1wb3J0IHsgdGltaW5nIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgTU9CSUxFX1NBRkFSSV9CVU5ETEVfSUQsIFNBRkFSSV9TVEFSVFVQX1RJTUVPVVQgfSBmcm9tICcuL3V0aWxzJztcblxuXG4vLyB0aGVzZSBzaW1zIGFyZSBzbG9vb29vb29vd1xuY29uc3QgU1RBUlRVUF9USU1FT1VUID0gMTIwICogMTAwMDtcbmNvbnN0IFBST0NFU1NfTEFVTkNIX09LX1BBVFRFUk4gPSAoYnVuZGxlSWQpID0+IG5ldyBSZWdFeHAoYCR7YnVuZGxlSWQucmVwbGFjZSgnLicsICdcXFxcLicpfTpcXFxccytcXFxcZCtgKTtcblxuY2xhc3MgU2ltdWxhdG9yWGNvZGU4IGV4dGVuZHMgU2ltdWxhdG9yWGNvZGU3IHtcbiAgY29uc3RydWN0b3IgKHVkaWQsIHhjb2RlVmVyc2lvbikge1xuICAgIHN1cGVyKHVkaWQsIHhjb2RlVmVyc2lvbik7XG5cbiAgICAvLyBsaXN0IG9mIGZpbGVzIHRvIGNoZWNrIGZvciB3aGVuIHNlZWluZyBpZiBhIHNpbXVsYXRvciBpcyBcImZyZXNoXCJcbiAgICAvLyAobWVhbmluZyBpdCBoYXMgbmV2ZXIgYmVlbiBib290ZWQpLlxuICAgIC8vIElmIHRoZXNlIGZpbGVzIGFyZSBwcmVzZW50LCB3ZSBhc3N1bWUgaXQncyBiZWVuIHN1Y2Nlc3NmdWxseSBib290ZWRcbiAgICB0aGlzLmlzRnJlc2hGaWxlcyA9IFtcbiAgICAgICdMaWJyYXJ5L0Nvb2tpZXMnLFxuICAgICAgJ0xpYnJhcnkvUHJlZmVyZW5jZXMvLkdsb2JhbFByZWZlcmVuY2VzLnBsaXN0JyxcbiAgICAgICdMaWJyYXJ5L1ByZWZlcmVuY2VzL2NvbS5hcHBsZS5zcHJpbmdib2FyZC5wbGlzdCcsXG4gICAgICAndmFyL3J1bi9zeXNsb2cucGlkJ1xuICAgIF07XG4gICAgdGhpcy5faWRiID0gbnVsbDtcblxuICAgIC8vIGZvciBzZXR0aW5nIHRoZSBsb2NhdGlvbiB1c2luZyBBcHBsZVNjcmlwdCwgdGhlIHRvcC1sZXZlbCBtZW51IHRocm91Z2ggd2hpY2hcbiAgICAvLyB0aGUgJ0xvY2F0aW9uJyBvcHRpb24gaXMgZm91bmRcbiAgICB0aGlzLl9sb2NhdGlvbk1lbnUgPSAnRGVidWcnO1xuICB9XG5cbiAgLyoqXG4gICAqIElEQiBpbnN0YW5jZSBzZXR0ZXJcbiAgICpcbiAgICogQHBhcmFtIHtJREJ9IHZhbHVlXG4gICAqL1xuICBzZXQgaWRiICh2YWx1ZSkge1xuICAgIHRoaXMuX2lkYiA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge0lEQn0gaWRiIGluc3RhbmNlXG4gICAqL1xuICBnZXQgaWRiICgpIHtcbiAgICByZXR1cm4gdGhpcy5faWRiO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IGtpbGxPcHRzXG4gICAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHBpZCAtIFByb2Nlc3MgaWQgb2YgdGhlIFVJIFNpbXVsYXRvciB3aW5kb3dcbiAgICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSBzaWduYWwgWzJdIC0gVGhlIHNpZ25hbCBudW1iZXIgdG8gc2VuZCB0byB0aGVcbiAgICogYGtpbGxgIGNvbW1hbmRcbiAgICovXG5cbiAgLyoqXG4gICAqIEtpbGwgdGhlIFVJIGNsaWVudCBpZiBpdCBpcyBydW5uaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gez9raWxsT3B0c30gb3B0c1xuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBVSSBjbGllbnQgd2FzIHN1Y2Nlc3NmdWxseSBraWxsZWQgb3IgZmFsc2VcbiAgICogICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgbm90IHJ1bm5pbmcuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBzZW5kaW5nIHRoZSBzaWduYWwgdG8gdGhlIGNsaWVudCBwcm9jZXNzIGZhaWxzXG4gICAqL1xuICBhc3luYyBraWxsVUlDbGllbnQgKG9wdHMgPSB7fSkge1xuICAgIGxldCB7XG4gICAgICBwaWQsXG4gICAgICBzaWduYWwgPSAyLFxuICAgIH0gPSBvcHRzO1xuICAgIHBpZCA9IHBpZCB8fCBhd2FpdCB0aGlzLmdldFVJQ2xpZW50UGlkKCk7XG4gICAgaWYgKCFwaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsb2cuZGVidWcoYFNlbmRpbmcgJHtzaWduYWx9IGtpbGwgc2lnbmFsIHRvIFNpbXVsYXRvciBVSSBjbGllbnQgd2l0aCBQSUQgJHtwaWR9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWMoJ2tpbGwnLCBbYC0ke3NpZ25hbH1gLCBwaWRdKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLmNvZGUgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qga2lsbCB0aGUgU2ltdWxhdG9yIFVJIGNsaWVudC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgd2hldGhlciB0aGUgcGFydGljdWxhciBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgb24gU2ltdWxhdG9yLlxuICAgKiBAb3ZlcnJpZGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJ1bmRsZUlkIC0gVGhlIGJ1bmRsZSBpZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gYmUgY2hlY2tlZC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gaXMgaW5zdGFsbGVkLlxuICAgKi9cbiAgYXN5bmMgaXNBcHBJbnN0YWxsZWQgKGJ1bmRsZUlkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFwcENvbnRhaW5lciA9IGF3YWl0IHRoaXMuc2ltY3RsLmdldEFwcENvbnRhaW5lcihidW5kbGVJZCk7XG4gICAgICByZXR1cm4gYXBwQ29udGFpbmVyLmVuZHNXaXRoKCcuYXBwJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBnZXRfYXBwX2NvbnRhaW5lciBzdWJjb21tYW5kIGZhaWxzIGZvciBzeXN0ZW0gYXBwbGljYXRpb25zLFxuICAgICAgLy8gc28gd2UgdHJ5IHRoZSBoaWRkZW4gYXBwaW5mbyBzdWJjb21tYW5kLCB3aGljaCBwcmludHMgY29ycmVjdCBpbmZvIGZvclxuICAgICAgLy8gc3lzdGVtL2hpZGRlbiBhcHBzXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgdGhpcy5zaW1jdGwuYXBwSW5mbyhidW5kbGVJZCk7XG4gICAgICAgIHJldHVybiBpbmZvLmluY2x1ZGVzKCdBcHBsaWNhdGlvblR5cGUnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBtYXggbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIFNpbXVsYXRvciBib290aW5nIGlzIGNvbXBsZXRlZC5cbiAgICovXG4gIGdldCBzdGFydHVwVGltZW91dCAoKSB7XG4gICAgcmV0dXJuIFNUQVJUVVBfVElNRU9VVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgd2hldGhlciB0aGUgU2ltdWxhdG9yIGJvb3RpbmcgaXMgY29tcGxldGVkIGFuZC9vciB3YWl0IGZvciBpdFxuICAgKiB1bnRpbCB0aGUgdGltZW91dCBleHBpcmVzLlxuICAgKiBAb3ZlcnJpZGVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0dXBUaW1lb3V0IC0gdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCBib290aW5nIGlzIGNvbXBsZXRlZC5cbiAgICogQGVtaXRzIEJPT1RfQ09NUExFVEVEX0VWRU5UIGlmIHRoZSBjdXJyZW50IFNpbXVsYXRvciBpcyByZWFkeSB0byBhY2NlcHQgc2ltY3RsIGNvbW1hbmRzLCBsaWtlICdpbnN0YWxsJy5cbiAgICovXG4gIGFzeW5jIHdhaXRGb3JCb290IChzdGFydHVwVGltZW91dCkge1xuICAgIGF3YWl0IHRoaXMuc2ltY3RsLnN0YXJ0Qm9vdE1vbml0b3Ioe3RpbWVvdXQ6IHN0YXJ0dXBUaW1lb3V0fSk7XG4gICAgdGhpcy5lbWl0KEJPT1RfQ09NUExFVEVEX0VWRU5UKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBnaXZlbiBVUkwgaW4gbW9iaWxlIFNhZmFyaSBicm93c2VyLlxuICAgKiBUaGUgYnJvd3NlciB3aWxsIGJlIHN0YXJ0ZWQgYXV0b21hdGljYWxseSBpZiBpdCBpcyBub3QgcnVubmluZy5cbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSBUaGUgVVJMIHRvIGJlIG9wZW5lZC5cbiAgICovXG4gIGFzeW5jIG9wZW5VcmwgKHVybCkge1xuICAgIGlmICghYXdhaXQgdGhpcy5pc1J1bm5pbmcoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcmllZCB0byBvcGVuICcke3VybH0nLCBidXQgU2ltdWxhdG9yIGlzIG5vdCBpbiBCb290ZWQgc3RhdGVgKTtcbiAgICB9XG4gICAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgICBsZXQgbGFzdEVycm9yID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyB0byBtYWtlIHN1cmUgU2FmYXJpIGlzIGFscmVhZHkgcnVubmluZ1xuICAgICAgICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IHRoaXMuc2ltY3RsLmxhdW5jaEFwcChNT0JJTEVfU0FGQVJJX0JVTkRMRV9JRCk7XG4gICAgICAgICAgaWYgKFBST0NFU1NfTEFVTkNIX09LX1BBVFRFUk4oTU9CSUxFX1NBRkFSSV9CVU5ETEVfSUQpLnRlc3Qoc3Rkb3V0KSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zaW1jdGwub3BlblVybCh1cmwpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBsb2cud2FybihgRmFpbGVkIHRvIG9wZW4gJyR7dXJsfScgaW4gU2FmYXJpLiBSZXRyeWluZy4uLmApO1xuICAgICAgICAgIGxhc3RFcnJvciA9IGVyci5zdGRlcnIgfHwgZXJyLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSwge3dhaXRNczogU0FGQVJJX1NUQVJUVVBfVElNRU9VVCwgaW50ZXJ2YWxNczogNTAwfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNhZmFyaSBjYW5ub3Qgb3BlbiAnJHt1cmx9JyBhZnRlciAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNTZWNvbmRzLnRvRml4ZWQoMyl9cyBgICtcbiAgICAgICAgYGJlY2F1c2Ugb2Y6ICR7bGFzdEVycm9yIHx8ICdhbiB1bmtub3duIGVycm9yJ31gKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBTYWZhcmkgc3VjY2Vzc2Z1bGx5IG9wZW5lZCAnJHt1cmx9JyBpbiAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNTZWNvbmRzLnRvRml4ZWQoMyl9c2ApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFuIHVwIHRoZSBkaXJlY3RvcmllcyBmb3IgbW9iaWxlIFNhZmFyaS5cbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0ga2VlcFByZWZzIC0gV2hldGhlciB0byBrZWVwIFNhZmFyaSBwcmVmZXJlbmNlcyBmcm9tIGJlaW5nIGRlbGV0ZWQuXG4gICAqL1xuICBhc3luYyBjbGVhblNhZmFyaSAoa2VlcFByZWZzID0gdHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoYXdhaXQgdGhpcy5pc1J1bm5pbmcoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnNpbWN0bC50ZXJtaW5hdGVBcHAoTU9CSUxFX1NBRkFSSV9CVU5ETEVfSUQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgLy8gaWdub3JlIGVycm9yXG4gICAgfVxuICAgIGF3YWl0IHN1cGVyLmNsZWFuU2FmYXJpKGtlZXBQcmVmcyk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW4vc2NydWIgdGhlIHBhcnRpY3VsYXIgYXBwbGljYXRpb24gb24gU2ltdWxhdG9yLlxuICAgKiBAb3ZlcnJpZGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcEZpbGUgLSBBcHBsaWNhdGlvbiBuYW1lIG1pbnVzIFwiLmFwcFwiLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwQnVuZGxlSWQgLSBCdW5kbGUgaWRlbnRpZmllciBvZiB0aGUgYXBwbGljYXRpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2NydWIgLSBJZiBgc2NydWJgIGlzIGZhbHNlLCB3ZSB3YW50IHRvIGNsZWFuIGJ5IGRlbGV0aW5nIHRoZSBhcHAgYW5kIGFsbFxuICAgKiAgIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBpdC4gSWYgYHNjcnViYCBpcyB0cnVlLCB3ZSBqdXN0IHdhbnQgdG8gZGVsZXRlIHRoZSBwcmVmZXJlbmNlcyBhbmRcbiAgICogICBjaGFuZ2VkIGZpbGVzLlxuICAgKi9cbiAgYXN5bmMgY2xlYW5DdXN0b21BcHAgKGFwcEZpbGUsIGFwcEJ1bmRsZUlkLCBzY3J1YiA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuc2ltY3RsLnRlcm1pbmF0ZUFwcChhcHBCdW5kbGVJZCk7XG4gICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAvLyBpZ25vcmUgZXJyb3JcbiAgICB9XG4gICAgYXdhaXQgc3VwZXIuY2xlYW5DdXN0b21BcHAoYXBwRmlsZSwgYXBwQnVuZGxlSWQsIHNjcnViKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIFNoYWtlIGdlc3R1cmUgb24gU2ltdWxhdG9yIHdpbmRvdy5cbiAgICovXG4gIGFzeW5jIHNoYWtlICgpIHtcbiAgICBsb2cuaW5mbyhgUGVyZm9ybWluZyBzaGFrZSBnZXN0dXJlIG9uICR7dGhpcy51ZGlkfSBTaW11bGF0b3JgKTtcbiAgICBhd2FpdCB0aGlzLnNpbWN0bC5zcGF3blByb2Nlc3MoW1xuICAgICAgJ25vdGlmeXV0aWwnLFxuICAgICAgJy1wJywgJ2NvbS5hcHBsZS5VSUtpdC5TaW11bGF0b3JTaGFrZSdcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIGFzeW5jIGlzQmlvbWV0cmljRW5yb2xsZWQgKCkge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHRoaXMuZXhlY3V0ZVVJQ2xpZW50U2NyaXB0KGBcbiAgICAgIHRlbGwgYXBwbGljYXRpb24gXCJTeXN0ZW0gRXZlbnRzXCJcbiAgICAgICAgdGVsbCBwcm9jZXNzIFwiU2ltdWxhdG9yXCJcbiAgICAgICAgICBzZXQgZHN0TWVudUl0ZW0gdG8gbWVudSBpdGVtIFwiVG9nZ2xlIEVucm9sbGVkIFN0YXRlXCIgb2YgbWVudSAxIG9mIG1lbnUgaXRlbSBcIlRvdWNoIElEXCIgb2YgbWVudSAxIG9mIG1lbnUgYmFyIGl0ZW0gXCJIYXJkd2FyZVwiIG9mIG1lbnUgYmFyIDFcbiAgICAgICAgICBzZXQgaXNDaGVja2VkIHRvICh2YWx1ZSBvZiBhdHRyaWJ1dGUgXCJBWE1lbnVJdGVtTWFya0NoYXJcIiBvZiBkc3RNZW51SXRlbSkgaXMgXCLinJNcIlxuICAgICAgICBlbmQgdGVsbFxuICAgICAgZW5kIHRlbGxcbiAgICBgKTtcbiAgICBsb2cuZGVidWcoYFRvdWNoIElEIGVucm9sbGVkIHN0YXRlOiAke291dHB1dH1gKTtcbiAgICByZXR1cm4gXy5pc1N0cmluZyhvdXRwdXQpICYmIG91dHB1dC50cmltKCkgPT09ICd0cnVlJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIGFzeW5jIGVucm9sbEJpb21ldHJpYyAoaXNFbmFibGVkID0gdHJ1ZSkge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZVVJQ2xpZW50U2NyaXB0KGBcbiAgICAgIHRlbGwgYXBwbGljYXRpb24gXCJTeXN0ZW0gRXZlbnRzXCJcbiAgICAgICAgdGVsbCBwcm9jZXNzIFwiU2ltdWxhdG9yXCJcbiAgICAgICAgICBzZXQgZHN0TWVudUl0ZW0gdG8gbWVudSBpdGVtIFwiVG9nZ2xlIEVucm9sbGVkIFN0YXRlXCIgb2YgbWVudSAxIG9mIG1lbnUgaXRlbSBcIlRvdWNoIElEXCIgb2YgbWVudSAxIG9mIG1lbnUgYmFyIGl0ZW0gXCJIYXJkd2FyZVwiIG9mIG1lbnUgYmFyIDFcbiAgICAgICAgICBzZXQgaXNDaGVja2VkIHRvICh2YWx1ZSBvZiBhdHRyaWJ1dGUgXCJBWE1lbnVJdGVtTWFya0NoYXJcIiBvZiBkc3RNZW51SXRlbSkgaXMgXCLinJNcIlxuICAgICAgICAgIGlmICR7aXNFbmFibGVkID8gJ25vdCAnIDogJyd9aXNDaGVja2VkIHRoZW5cbiAgICAgICAgICAgIGNsaWNrIGRzdE1lbnVJdGVtXG4gICAgICAgICAgZW5kIGlmXG4gICAgICAgIGVuZCB0ZWxsXG4gICAgICBlbmQgdGVsbFxuICAgIGApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgYXN5bmMgc2VuZEJpb21ldHJpY01hdGNoIChzaG91bGRNYXRjaCA9IHRydWUpIHtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGVVSUNsaWVudFNjcmlwdChgXG4gICAgICB0ZWxsIGFwcGxpY2F0aW9uIFwiU3lzdGVtIEV2ZW50c1wiXG4gICAgICAgIHRlbGwgcHJvY2VzcyBcIlNpbXVsYXRvclwiXG4gICAgICAgICAgc2V0IGRzdE1lbnVJdGVtIHRvIG1lbnUgaXRlbSBcIiR7c2hvdWxkTWF0Y2ggPyAnTWF0Y2hpbmcgVG91Y2gnIDogJ05vbi1tYXRjaGluZyBUb3VjaCd9XCIgb2YgbWVudSAxIG9mIG1lbnUgaXRlbSBcIlRvdWNoIElEXCIgb2YgbWVudSAxIG9mIG1lbnUgYmFyIGl0ZW0gXCJIYXJkd2FyZVwiIG9mIG1lbnUgYmFyIDFcbiAgICAgICAgICBjbGljayBkc3RNZW51SXRlbVxuICAgICAgICBlbmQgdGVsbFxuICAgICAgZW5kIHRlbGxcbiAgICBgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgY3VzdG9tIGdlb2xvY2F0aW9uIHBhcmFtZXRlcnMgZm9yIHRoZSBnaXZlbiBTaW11bGF0b3IgdXNpbmcgQXBwbGVTY3JpcHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbGF0aXR1ZGUgLSBUaGUgbGF0aXR1ZGUgdmFsdWUsIHdoaWNoIGlzIGdvaW5nIHRvIGJlIGVudGVyZWRcbiAgICogICBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGVkaXQgZmllbGQsIGZvciBleGFtcGxlICczOSwwMDA2Jy5cbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBsb25naXR1ZGUgLSBUaGUgbG9uZ2l0dWRlIHZhbHVlLCB3aGljaCBpcyBnb2luZyB0byBiZSBlbnRlcmVkXG4gICAqICAgaW50byB0aGUgY29ycmVzcG9uZGluZyBlZGl0IGZpZWxkLCBmb3IgZXhhbXBsZSAnMTksMDA2OCcuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGhhdmUgY29ycmVjdCBmb3JtYXQgYW5kIHdlcmUgc3VjY2Vzc2Z1bGx5IGFjY2VwdGVkLlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHNldHRpbmcgdGhlIGxvY2F0aW9uXG4gICAqL1xuICBhc3luYyBzZXRHZW9sb2NhdGlvbiAobGF0aXR1ZGUsIGxvbmdpdHVkZSkge1xuICAgIGNvbnN0IGxvY2F0aW9uU2V0dGVycyA9IFtcbiAgICAgIGFzeW5jICgpID0+IGF3YWl0IHNldExvY2F0aW9uV2l0aEx5ZnQodGhpcy51ZGlkLCBsYXRpdHVkZSwgbG9uZ2l0dWRlKSxcbiAgICAgIGFzeW5jICgpID0+IGF3YWl0IHNldExvY2F0aW9uV2l0aElkYih0aGlzLmlkYiwgbGF0aXR1ZGUsIGxvbmdpdHVkZSksXG4gICAgICBhc3luYyAoKSA9PiBhd2FpdCBzZXRMb2NhdGlvbldpdGhBcHBsZVNjcmlwdCh0aGlzLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCB0aGlzLl9sb2NhdGlvbk1lbnUpLFxuICAgIF07XG5cbiAgICBsZXQgbGFzdEVycm9yO1xuICAgIGZvciAoY29uc3Qgc2V0dGVyIG9mIGxvY2F0aW9uU2V0dGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgc2V0dGVyKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2cuaW5mbyhlLm1lc3NhZ2UpO1xuICAgICAgICBsYXN0RXJyb3IgPSBlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBsYXN0RXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2ltdWxhdG9yWGNvZGU4O1xuIl0sImZpbGUiOiJsaWIvc2ltdWxhdG9yLXhjb2RlLTguanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==

@@ -64,10 +64,2 @@ "use strict";

const bootSimulator = async () => {
try {
await (0, _asyncbox.retryInterval)(3, 2000, async () => await this.simctl.bootDevice());
} catch (err) {
_logger.default.warn(`'xcrun simctl boot ${this.udid}' command has returned non-zero exit code`);
}
};
const waitForShutdown = async (waitMs = SIMULATOR_SHUTDOWN_TIMEOUT) => {

@@ -126,3 +118,3 @@ try {

await bootSimulator();
await this.boot();
} else {

@@ -149,9 +141,3 @@ if (isServerRunning && uiClientPid) {

_logger.default.info(`Booting Simulator with UDID '${this.udid}'...`);
await bootSimulator();
if (!uiClientPid) {
await this.startUIClient(opts);
}
await this.launchWindow(uiClientPid, opts);
}

@@ -169,2 +155,30 @@

async launchWindow(isUiClientRunning, opts = {}) {
await this.boot();
if (!isUiClientRunning) {
await this.startUIClient(opts);
}
}
async boot() {
_logger.default.info(`Booting Simulator with UDID '${this.udid}'...`);
try {
await (0, _asyncbox.retryInterval)(3, 2000, async () => {
try {
await this.simctl.bootDevice();
} catch (e) {
if (!_lodash.default.includes(e.stderr, 'Unable to boot device in current state: Booted')) {
throw e;
}
_logger.default.debug(`Simulator with UDID '${this.udid}' is already in Booted state`);
}
});
} catch (err) {
_logger.default.warn(err.stderr || err.message);
}
}
verifyDevicePreferences(prefs = {}) {

@@ -275,12 +289,27 @@ if (_lodash.default.isEmpty(prefs)) {

async _activateWindow() {
if (this.idb) {
return await this.idb.focusSimulator();
let selfName;
let selfSdk;
let bootedDevicesCount = 0;
for (const [sdk, deviceArr] of _lodash.default.toPairs(await this.simctl.getDevices())) {
for (const {
state,
udid,
name
} of deviceArr) {
if (state === 'Booted') {
bootedDevicesCount++;
}
if (!selfName && udid === this.udid) {
selfSdk = sdk;
selfName = name;
}
}
}
_logger.default.warn(`Cannot focus Simulator window with idb. Defaulting to AppleScript`);
if (bootedDevicesCount < 2) {
return await super._activateWindow();
}
const {
name,
sdk
} = await this.stat();
return `

@@ -291,3 +320,3 @@ tell application "System Events"

set frontmost to true
click (menu item 1 where (its name contains "${name} " and its name contains "${sdk}")) of menu 1 of menu bar item "Window" of menu bar 1
click (menu item 1 where (its name contains "${selfName} " and its name contains "${selfSdk}")) of menu 1 of menu bar item "Window" of menu bar 1
end tell

@@ -343,2 +372,2 @@ end tell

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zaW11bGF0b3IteGNvZGUtOS5qcyJdLCJuYW1lcyI6WyJTSU1VTEFUT1JfU0hVVERPV05fVElNRU9VVCIsInN0YXJ0dXBMb2NrIiwiQXN5bmNMb2NrIiwicHJlZmVyZW5jZXNQbGlzdEd1YXJkIiwiRU5ST0xMTUVOVF9OT1RJRklDQVRJT05fUkVDRUlWRVIiLCJTaW11bGF0b3JYY29kZTkiLCJTaW11bGF0b3JYY29kZTgiLCJjb25zdHJ1Y3RvciIsInVkaWQiLCJ4Y29kZVZlcnNpb24iLCJydW4iLCJvcHRzIiwiXyIsImNsb25lRGVlcCIsImRlZmF1bHRzRGVlcCIsImRldmljZVByZWZlcmVuY2VzIiwiaXNIZWFkbGVzcyIsInN0YXJ0dXBUaW1lb3V0Iiwic2NhbGVGYWN0b3IiLCJTaW11bGF0b3JXaW5kb3dMYXN0U2NhbGUiLCJwYXJzZUZsb2F0IiwiY29tbW9uUHJlZmVyZW5jZXMiLCJSb3RhdGVXaW5kb3dXaGVuU2lnbmFsZWRCeUd1ZXN0IiwiaXNCb29sZWFuIiwiY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQiLCJDb25uZWN0SGFyZHdhcmVLZXlib2FyZCIsImlzRW1wdHkiLCJ1cGRhdGVQcmVmZXJlbmNlcyIsImJvb3RTaW11bGF0b3IiLCJzaW1jdGwiLCJib290RGV2aWNlIiwiZXJyIiwibG9nIiwid2FybiIsIndhaXRGb3JTaHV0ZG93biIsIndhaXRNcyIsInN0YXRlIiwic3RhdCIsImludGVydmFsTXMiLCJFcnJvciIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsInNob3VsZFdhaXRGb3JCb290IiwiYWNxdWlyZSIsInVpQ2xpZW50QnVuZGxlSWQiLCJzZXJ2ZXJTdGF0ZSIsImlzU2VydmVyUnVubmluZyIsInVpQ2xpZW50UGlkIiwiZ2V0VUlDbGllbnRQaWQiLCJpbmZvIiwia2lsbFVJQ2xpZW50IiwicGlkIiwiZSIsImluY2x1ZGVzIiwic2h1dGRvd24iLCJtZXNzYWdlIiwic3RhcnRVSUNsaWVudCIsIndhaXRGb3JCb290IiwiZ2V0RHVyYXRpb24iLCJhc1NlY29uZHMiLCJ0b0ZpeGVkIiwidmVyaWZ5RGV2aWNlUHJlZmVyZW5jZXMiLCJwcmVmcyIsImlzVW5kZWZpbmVkIiwiaXNOdW1iZXIiLCJlcnJvckFuZFRocm93IiwiU2ltdWxhdG9yV2luZG93Q2VudGVyIiwidmVyaWZpY2F0aW9uUGF0dGVybiIsImlzU3RyaW5nIiwidGVzdCIsIlNpbXVsYXRvcldpbmRvd09yaWVudGF0aW9uIiwiYWNjZXB0YWJsZVZhbHVlcyIsImluZGV4T2YiLCJTaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlIiwiZGV2aWNlUHJlZnMiLCJjb21tb25QcmVmcyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsImhvbWVGb2xkZXJQYXRoIiwicHJvY2VzcyIsImVudiIsIkhPTUUiLCJwbGlzdFBhdGgiLCJwYXRoIiwicmVzb2x2ZSIsImZzIiwiaGFzQWNjZXNzIiwibmV3UHJlZnMiLCJEZXZpY2VQcmVmZXJlbmNlcyIsInRvVXBwZXJDYXNlIiwibWVyZ2UiLCJuYW1lIiwiY3VycmVudFBsaXN0Q29udGVudCIsInBsaXN0IiwicGFyc2VQbGlzdEZpbGUiLCJ1cGRhdGVQbGlzdEZpbGUiLCJzaHV0ZG93bkRldmljZSIsImJpbmQiLCJjbGVhbiIsImVyYXNlRGV2aWNlIiwiX2FjdGl2YXRlV2luZG93IiwiaWRiIiwiZm9jdXNTaW11bGF0b3IiLCJzZGsiLCJpc0Jpb21ldHJpY0Vucm9sbGVkIiwic3Rkb3V0Iiwic3Bhd25Qcm9jZXNzIiwibWF0Y2giLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJleGVjIiwiZW5yb2xsQmlvbWV0cmljIiwiaXNFbmFibGVkIiwic2VuZEJpb21ldHJpY01hdGNoIiwic2hvdWxkTWF0Y2giLCJiaW9tZXRyaWNOYW1lIiwiZG9tYWluQ29tcG9uZW50IiwiZG9tYWluIiwiZ2V0TGF1bmNoRGFlbW9uc1Jvb3QiLCJkZXZSb290Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztB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LG9CQUFOLEdBQThCO0FBQzVCLFVBQU1DLE9BQU8sR0FBRyxNQUFNLDhCQUF0QjtBQUNBLFdBQU9wQyxjQUFLQyxPQUFMLENBQWFtQyxPQUFiLEVBQ0wsMEpBREssQ0FBUDtBQUVEOztBQTVWMkM7O2VBZ1cvQnJILGUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2ltdWxhdG9yWGNvZGU4IGZyb20gJy4vc2ltdWxhdG9yLXhjb2RlLTgnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZnMsIHBsaXN0LCB0aW1pbmcgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uLCByZXRyeUludGVydmFsIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdG9CaW9tZXRyaWNEb21haW5Db21wb25lbnQsIGdldERldmVsb3BlclJvb3QgfSBmcm9tICcuL3V0aWxzLmpzJztcblxuY29uc3QgU0lNVUxBVE9SX1NIVVRET1dOX1RJTUVPVVQgPSAxNSAqIDEwMDA7XG5jb25zdCBzdGFydHVwTG9jayA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IHByZWZlcmVuY2VzUGxpc3RHdWFyZCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IEVOUk9MTE1FTlRfTk9USUZJQ0FUSU9OX1JFQ0VJVkVSID0gJ2NvbS5hcHBsZS5CaW9tZXRyaWNLaXQuZW5yb2xsbWVudENoYW5nZWQnO1xuXG5jbGFzcyBTaW11bGF0b3JYY29kZTkgZXh0ZW5kcyBTaW11bGF0b3JYY29kZTgge1xuICBjb25zdHJ1Y3RvciAodWRpZCwgeGNvZGVWZXJzaW9uKSB7XG4gICAgc3VwZXIodWRpZCwgeGNvZGVWZXJzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBEZXZpY2VQcmVmZXJlbmNlc1xuICAgKiBAcHJvcGVydHkgez9udW1iZXJ9IFNpbXVsYXRvckV4dGVybmFsRGlzcGxheSAtIFRCRC4gRXhhbXBsZSB2YWx1ZTogMi4xMTRcbiAgICogQHByb3BlcnR5IHs/c3RyaW5nfSBDaHJvbWVUaW50IC0gVEJELiBFeGFtcGxlIHZhbHVlOiAnJ1xuICAgKiBAcHJvcGVydHkgez9udW1iZXJ9IFNpbXVsYXRvcldpbmRvd0xhc3RTY2FsZSAtIFNjYWxlIHZhbHVlIGZvciB0aGUgcGFydGljdWxhciBTaW11bGF0b3Igd2luZG93LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMCBtZWFucyAxMDAlIHNjYWxlLlxuICAgKiBAcHJvcGVydHkgez9zdHJpbmd9IFNpbXVsYXRvcldpbmRvd09yaWVudGF0aW9uIC0gU2ltdWxhdG9yIHdpbmRvdyBvcmllbnRhdGlvbi4gUG9zc2libGUgdmFsdWVzIGFyZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQb3J0cmFpdCcsICdMYW5kc2NhcGVMZWZ0JywgJ1BvcnRyYWl0VXBzaWRlRG93bicgYW5kICdMYW5kc2NhcGVSaWdodCcuXG4gICAqIEBwcm9wZXJ0eSB7P251bWJlcn0gU2ltdWxhdG9yV2luZG93Um90YXRpb25BbmdsZSAtIFdpbmRvdyByb3RhdGlvbiBhbmdsZS4gVGhpcyB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSBpbiBzeW5jXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggX1NpbXVsYXRvcldpbmRvd09yaWVudGF0aW9uXy4gVGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGFyZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgOTAsIDE4MCBhbmQgMjcwLlxuICAgKiBAcHJvcGVydHkgez9zdHJpbmd9IFNpbXVsYXRvcldpbmRvd0NlbnRlciAtIFRoZSBjb29yZGluYXRlcyBvZiBTaW11bGF0b3IncyB3aW5kb3cgY2VudGVyIGluIHBpeGVscyxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZXhhbXBsZSAney0xMjk0LjUsIDc3NS41fScuXG4gICAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IENvbm5lY3RIYXJkd2FyZUtleWJvYXJkIC0gRXF1YWxzIHRvIDEgaWYgaGFyZHdhcmUga2V5Ym9hcmQgc2hvdWxkIGJlIGNvbm5lY3RlZC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UgMC5cbiAgICovXG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IENvbW1vblByZWZlcmVuY2VzXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gQ29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQgLSBXaGV0aGVyIHRvIGNvbm5lY3QgaGFyZHdhcmUga2V5Ym9hcmRcbiAgICovXG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IFJ1bk9wdGlvbnNcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHNjYWxlRmFjdG9yOiBBbnkgcG9zaXRpdmUgZmxvYXQgdmFsdWUuIDEuMCBtZWFucyAxOjEgc2NhbGUuXG4gICAqIERlZmluZXMgdGhlIHdpbmRvdyBzY2FsZSB2YWx1ZSBmb3IgdGhlIFVJIGNsaWVudCB3aW5kb3cgZm9yIHRoZSBjdXJyZW50IFNpbXVsYXRvci5cbiAgICogRXF1YWxzIHRvIGBudWxsYCBieSBkZWZhdWx0LCB3aGljaCBrZWVwcyB0aGUgY3VycmVudCBzY2FsZSB1bmNoYW5nZWQuXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQ6IHdoZXRoZXIgdG8gY29ubmVjdCB0aGUgaGFyZHdhcmUga2V5Ym9hcmQgdG8gdGhlXG4gICAqIFNpbXVsYXRvciBVSSBjbGllbnQuIEVxdWFscyB0byBgZmFsc2VgIGJ5IGRlZmF1bHQuXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzdGFydHVwVGltZW91dDogbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIFNpbXVsYXRvciBib290aW5nXG4gICAqIHByb2Nlc3MgaXMgY29tcGxldGVkLiBUaGUgZGVmYXVsdCB0aW1lb3V0IHdpbGwgYmUgdXNlZCBpZiBub3Qgc2V0IGV4cGxpY2l0bHkuXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNIZWFkbGVzczogd2hldGhlciB0byBzdGFydCB0aGUgU2ltdWxhdG9yIGluIGhlYWRsZXNzIG1vZGUgKHdpdGggVUlcbiAgICogY2xpZW50IGludmlzaWJsZSkuIGBmYWxzZWAgYnkgZGVmYXVsdC5cbiAgICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gdHJhY2VQb2ludGVyIFtmYWxzZV0gLSBXaGV0aGVyIHRvIGhpZ2hsaWdodCB0b3VjaGVzIG9uIFNpbXVsYXRvclxuICAgKiBzY3JlZW4uIFRoaXMgaXMgaGVscGZ1bCB3aGlsZSBkZWJ1Z2dpbmcgYXV0b21hdGVkIHRlc3RzIG9yIHdoaWxlIG9ic2VydmluZyB0aGUgYXV0b21hdGlvblxuICAgKiByZWNvcmRpbmdzLlxuICAgKiBAcHJvcGVydHkge0RldmljZVByZWZlcmVuY2VzfSBkZXZpY2VQcmVmZXJlbmNlczogcHJlZmVyZW5jZXMgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgU2ltdWxhdG9yXG4gICAqIGRldmljZVxuICAgKi9cblxuICAvKipcbiAgICogRXhlY3V0ZXMgZ2l2ZW4gU2ltdWxhdG9yIHdpdGggb3B0aW9ucy4gVGhlIFNpbXVsYXRvciB3aWxsIG5vdCBiZSByZXN0YXJ0ZWQgaWZcbiAgICogaXQgaXMgYWxyZWFkeSBydW5uaW5nIGFuZCB0aGUgY3VycmVudCBVSSBzdGF0ZSBtYXRjaGVzIHRvIGBpc0hlYWRsZXNzYCBvcHRpb24uXG4gICAqIEBvdmVycmlkZVxuICAgKlxuICAgKiBAcGFyYW0ge1J1bk9wdGlvbnN9IG9wdHMgLSBPbmUgb3IgbW9yZSBvZiBhdmFpbGFibGUgU2ltdWxhdG9yIG9wdGlvbnNcbiAgICovXG4gIGFzeW5jIHJ1biAob3B0cyA9IHt9KSB7XG4gICAgb3B0cyA9IF8uY2xvbmVEZWVwKG9wdHMpO1xuICAgIF8uZGVmYXVsdHNEZWVwKG9wdHMsIHtcbiAgICAgIGRldmljZVByZWZlcmVuY2VzOiB7fSxcbiAgICAgIGlzSGVhZGxlc3M6IGZhbHNlLFxuICAgICAgc3RhcnR1cFRpbWVvdXQ6IHRoaXMuc3RhcnR1cFRpbWVvdXQsXG4gICAgfSk7XG4gICAgaWYgKG9wdHMuc2NhbGVGYWN0b3IpIHtcbiAgICAgIG9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93TGFzdFNjYWxlID0gcGFyc2VGbG9hdChvcHRzLnNjYWxlRmFjdG9yKTtcbiAgICB9XG4gICAgLy8gVGhpcyBvcHRpb24gaXMgbmVjZXNzYXJ5IHRvIG1ha2UgdGhlIFNpbXVsYXRvciB3aW5kb3cgZm9sbG93XG4gICAgLy8gdGhlIGFjdHVhbCBYQ1VJRGV2aWNlIG9yaWVudGF0aW9uXG4gICAgY29uc3QgY29tbW9uUHJlZmVyZW5jZXMgPSB7XG4gICAgICBSb3RhdGVXaW5kb3dXaGVuU2lnbmFsZWRCeUd1ZXN0OiB0cnVlXG4gICAgfTtcbiAgICBpZiAoXy5pc0Jvb2xlYW4ob3B0cy5jb25uZWN0SGFyZHdhcmVLZXlib2FyZCkpIHtcbiAgICAgIG9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuQ29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQgPSBvcHRzLmNvbm5lY3RIYXJkd2FyZUtleWJvYXJkO1xuICAgICAgY29tbW9uUHJlZmVyZW5jZXMuQ29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQgPSBvcHRzLmNvbm5lY3RIYXJkd2FyZUtleWJvYXJkO1xuICAgIH1cbiAgICBpZiAoIV8uaXNFbXB0eShvcHRzLmRldmljZVByZWZlcmVuY2VzKSB8fCAhXy5pc0VtcHR5KGNvbW1vblByZWZlcmVuY2VzKSkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVQcmVmZXJlbmNlcyhvcHRzLmRldmljZVByZWZlcmVuY2VzLCBjb21tb25QcmVmZXJlbmNlcyk7XG4gICAgfVxuICAgIGNvbnN0IGJvb3RTaW11bGF0b3IgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCByZXRyeUludGVydmFsKDMsIDIwMDAsIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuc2ltY3RsLmJvb3REZXZpY2UoKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nLndhcm4oYCd4Y3J1biBzaW1jdGwgYm9vdCAke3RoaXMudWRpZH0nIGNvbW1hbmQgaGFzIHJldHVybmVkIG5vbi16ZXJvIGV4aXQgY29kZWApO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgd2FpdEZvclNodXRkb3duID0gYXN5bmMgKHdhaXRNcyA9IFNJTVVMQVRPUl9TSFVURE9XTl9USU1FT1VUKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7c3RhdGV9ID0gYXdhaXQgdGhpcy5zdGF0KCk7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlID09PSAnU2h1dGRvd24nO1xuICAgICAgICB9LCB7d2FpdE1zLCBpbnRlcnZhbE1zOiA1MDB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNpbXVsYXRvciBpcyBub3QgaW4gJ1NodXRkb3duJyBzdGF0ZSBhZnRlciAke3dhaXRNc31tc2ApO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgICBjb25zdCBzaG91bGRXYWl0Rm9yQm9vdCA9IGF3YWl0IHN0YXJ0dXBMb2NrLmFjcXVpcmUodGhpcy51aUNsaWVudEJ1bmRsZUlkLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7c3RhdGU6IHNlcnZlclN0YXRlfSA9IGF3YWl0IHRoaXMuc3RhdCgpO1xuICAgICAgY29uc3QgaXNTZXJ2ZXJSdW5uaW5nID0gc2VydmVyU3RhdGUgPT09ICdCb290ZWQnO1xuICAgICAgY29uc3QgdWlDbGllbnRQaWQgPSBhd2FpdCB0aGlzLmdldFVJQ2xpZW50UGlkKCk7XG4gICAgICBpZiAob3B0cy5pc0hlYWRsZXNzKSB7XG4gICAgICAgIGlmIChpc1NlcnZlclJ1bm5pbmcgJiYgIXVpQ2xpZW50UGlkKSB7XG4gICAgICAgICAgbG9nLmluZm8oYFNpbXVsYXRvciB3aXRoIFVESUQgJyR7dGhpcy51ZGlkfScgaXMgYWxyZWFkeSBib290ZWQgaW4gaGVhZGxlc3MgbW9kZS5gKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF3YWl0IHRoaXMua2lsbFVJQ2xpZW50KHtwaWQ6IHVpQ2xpZW50UGlkfSkpIHtcbiAgICAgICAgICBsb2cuaW5mbyhgRGV0ZWN0ZWQgdGhlIFNpbXVsYXRvciBVSSBjbGllbnQgd2FzIHJ1bm5pbmcgYW5kIGtpbGxlZCBpdC4gVmVyaWZ5aW5nIHRoZSBjdXJyZW50IFNpbXVsYXRvciBzdGF0ZS4uLmApO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gU3RvcHBpbmcgdGhlIFVJIGNsaWVudCBraWxscyBhbGwgcnVubmluZyBzZXJ2ZXJzIGZvciBzb21lIGVhcmx5IFhDb2RlIHZlcnNpb25zLiBUaGlzIGlzIGEga25vd24gYnVnXG4gICAgICAgICAgYXdhaXQgd2FpdEZvclNodXRkb3duKDMwMDApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc3Qge3N0YXRlfSA9IGF3YWl0IHRoaXMuc3RhdCgpO1xuICAgICAgICAgIGlmIChzdGF0ZSAhPT0gJ0Jvb3RlZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2ltdWxhdG9yIHdpdGggVURJRCAnJHt0aGlzLnVkaWR9JyBjYW5ub3QgYmUgdHJhbnNpdGlvbmVkIHRvIGhlYWRsZXNzIG1vZGUuIGAgK1xuICAgICAgICAgICAgICBgVGhlIHJlY2VudCBzdGF0ZSBpcyAnJHtzdGF0ZX0nYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsb2cuaW5mbyhgQm9vdGluZyBTaW11bGF0b3Igd2l0aCBVRElEICcke3RoaXMudWRpZH0nIGluIGhlYWRsZXNzIG1vZGUuIEFsbCBVSS1yZWxhdGVkIGNhcGFiaWxpdGllcyBhcmUgZ29pbmcgdG8gYmUgaWdub3JlZGApO1xuICAgICAgICBhd2FpdCBib290U2ltdWxhdG9yKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNTZXJ2ZXJSdW5uaW5nICYmIHVpQ2xpZW50UGlkKSB7XG4gICAgICAgICAgbG9nLmluZm8oYEJvdGggU2ltdWxhdG9yIHdpdGggVURJRCAnJHt0aGlzLnVkaWR9JyBhbmQgdGhlIFVJIGNsaWVudCBhcmUgY3VycmVudGx5IHJ1bm5pbmdgKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFbJ1NodXRkb3duJywgJ0Jvb3RlZCddLmluY2x1ZGVzKHNlcnZlclN0YXRlKSkge1xuICAgICAgICAgIGlmIChzZXJ2ZXJTdGF0ZSAhPT0gJ1NodXR0aW5nIERvd24nKSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhgU2ltdWxhdG9yICcke3RoaXMudWRpZH0nIGlzIGluICcke3NlcnZlclN0YXRlfScgc3RhdGUuIFRyeWluZyB0byBzaHV0ZG93bi4uLmApO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zaHV0ZG93bigpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIGxvZy53YXJuKGBFcnJvciBvbiBTaW11bGF0b3Igc2h1dGRvd246ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHdhaXRGb3JTaHV0ZG93bigpO1xuICAgICAgICB9XG4gICAgICAgIGxvZy5pbmZvKGBCb290aW5nIFNpbXVsYXRvciB3aXRoIFVESUQgJyR7dGhpcy51ZGlkfScuLi5gKTtcbiAgICAgICAgYXdhaXQgYm9vdFNpbXVsYXRvcigpO1xuICAgICAgICBpZiAoIXVpQ2xpZW50UGlkKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFVJQ2xpZW50KG9wdHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGlmIChzaG91bGRXYWl0Rm9yQm9vdCkge1xuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yQm9vdChvcHRzLnN0YXJ0dXBUaW1lb3V0KTtcbiAgICAgIGxvZy5pbmZvKGBTaW11bGF0b3Igd2l0aCBVRElEICR7dGhpcy51ZGlkfSBib290ZWQgaW4gJHt0aW1lci5nZXREdXJhdGlvbigpLmFzU2Vjb25kcy50b0ZpeGVkKDMpfXNgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSB2ZXJpZmljYXRpb24gb2YgZGV2aWNlIHByZWZlcmVuY2VzIGNvcnJlY3RuZXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0RldmljZVByZWZlcmVuY2VzfSBwcmVmcyBbe31dIC0gVGhlIHByZWZlcmVuY2VzIHRvIGJlIHZlcmlmaWVkXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBhbnkgb2YgdGhlIGdpdmVuIHByZWZlcmVuY2UgdmFsdWVzIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZFxuICAgKiBmb3JtYXQuXG4gICAqL1xuICB2ZXJpZnlEZXZpY2VQcmVmZXJlbmNlcyAocHJlZnMgPSB7fSkge1xuICAgIGlmIChfLmlzRW1wdHkocHJlZnMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHByZWZzLlNpbXVsYXRvcldpbmRvd0xhc3RTY2FsZSkpIHtcbiAgICAgIGlmICghXy5pc051bWJlcihwcmVmcy5TaW11bGF0b3JXaW5kb3dMYXN0U2NhbGUpIHx8IHByZWZzLlNpbXVsYXRvcldpbmRvd0xhc3RTY2FsZSA8PSAwKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBTaW11bGF0b3JXaW5kb3dMYXN0U2NhbGUgaXMgZXhwZWN0ZWQgdG8gYmUgYSBwb3NpdGl2ZSBmbG9hdCB2YWx1ZS4gYCArXG4gICAgICAgICAgYCcke3ByZWZzLlNpbXVsYXRvcldpbmRvd0xhc3RTY2FsZX0nIGlzIGFzc2lnbmVkIGluc3RlYWQuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHByZWZzLlNpbXVsYXRvcldpbmRvd0NlbnRlcikpIHtcbiAgICAgIC8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvMlpYT2lqLzJcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvblBhdHRlcm4gPSAvey0/XFxkKyhcXC5cXGQrKT8sLT9cXGQrKFxcLlxcZCspP30vO1xuICAgICAgaWYgKCFfLmlzU3RyaW5nKHByZWZzLlNpbXVsYXRvcldpbmRvd0NlbnRlcikgfHwgIXZlcmlmaWNhdGlvblBhdHRlcm4udGVzdChwcmVmcy5TaW11bGF0b3JXaW5kb3dDZW50ZXIpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBTaW11bGF0b3JXaW5kb3dDZW50ZXIgaXMgZXhwZWN0ZWQgdG8gbWF0Y2ggXCJ7ZmxvYXRYUG9zaXRpb24sZmxvYXRZUG9zaXRpb259XCIgZm9ybWF0ICh3aXRob3V0IHNwYWNlcykuIGAgK1xuICAgICAgICAgIGAnJHtwcmVmcy5TaW11bGF0b3JXaW5kb3dDZW50ZXJ9JyBpcyBhc3NpZ25lZCBpbnN0ZWFkLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghXy5pc1VuZGVmaW5lZChwcmVmcy5TaW11bGF0b3JXaW5kb3dPcmllbnRhdGlvbikpIHtcbiAgICAgIGNvbnN0IGFjY2VwdGFibGVWYWx1ZXMgPSBbJ1BvcnRyYWl0JywgJ0xhbmRzY2FwZUxlZnQnLCAnUG9ydHJhaXRVcHNpZGVEb3duJywgJ0xhbmRzY2FwZVJpZ2h0J107XG4gICAgICBpZiAoYWNjZXB0YWJsZVZhbHVlcy5pbmRleE9mKHByZWZzLlNpbXVsYXRvcldpbmRvd09yaWVudGF0aW9uKSA9PT0gLTEpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYFNpbXVsYXRvcldpbmRvd09yaWVudGF0aW9uIGlzIGV4cGVjdGVkIHRvIGJlIG9uZSBvZiAke2FjY2VwdGFibGVWYWx1ZXN9LiBgICtcbiAgICAgICAgICBgJyR7cHJlZnMuU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb259JyBpcyBhc3NpZ25lZCBpbnN0ZWFkLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghXy5pc1VuZGVmaW5lZChwcmVmcy5TaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlKSkge1xuICAgICAgaWYgKCFfLmlzTnVtYmVyKHByZWZzLlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBTaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlIGlzIGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgbnVtYmVyLiBgICtcbiAgICAgICAgICBgJyR7cHJlZnMuU2ltdWxhdG9yV2luZG93Um90YXRpb25BbmdsZX0nIGlzIGFzc2lnbmVkIGluc3RlYWQuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY29tbW9uIGlPUyBTaW11bGF0b3IgcHJlZmVyZW5jZXMgZmlsZSB3aXRoIG5ldyB2YWx1ZXMuXG4gICAqIEl0IGlzIG5lY2Vzc2FyeSB0byByZXN0YXJ0IHRoZSBjb3JyZXNwb25kaW5nIFNpbXVsYXRvciBiZWZvcmVcbiAgICogdGhlc2UgY2hhbmdlcyBhcmUgYXBwbGllZC5cbiAgICpcbiAgICogQHBhcmFtIHtEZXZpY2VQcmVmZXJlbmNlc30gZGV2aWNlUHJlZnMgW3t9XSAtIFRoZSBtYXBwaW5nLCB3aGljaCByZXByZXNlbnRzIG5ldyBkZXZpY2UgcHJlZmVyZW5jZSB2YWx1ZXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgZ2l2ZW4gU2ltdWxhdG9yLlxuICAgKiBAcGFyYW0ge0NvbW1vblByZWZlcmVuY2VzfSBjb21tb25QcmVmcyBbe31dIC0gVGhlIG1hcHBpbmcsIHdoaWNoIHJlcHJlc2VudHMgbmV3IGNvbW1vbiBwcmVmZXJlbmNlIHZhbHVlc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFsbCBTaW11bGF0b3JzLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBwcmVmZXJlbmNlcyB3ZXJlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlUHJlZmVyZW5jZXMgKGRldmljZVByZWZzID0ge30sIGNvbW1vblByZWZzID0ge30pIHtcbiAgICBpZiAoIV8uaXNFbXB0eShkZXZpY2VQcmVmcykpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgU2V0dGluZyBwcmVmZXJlbmNlcyBvZiAke3RoaXMudWRpZH0gU2ltdWxhdG9yIHRvICR7SlNPTi5zdHJpbmdpZnkoZGV2aWNlUHJlZnMpfWApO1xuICAgIH1cbiAgICBpZiAoIV8uaXNFbXB0eShjb21tb25QcmVmcykpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgU2V0dGluZyBjb21tb24gU2ltdWxhdG9yIHByZWZlcmVuY2VzIHRvICR7SlNPTi5zdHJpbmdpZnkoY29tbW9uUHJlZnMpfWApO1xuICAgIH1cbiAgICBjb25zdCBob21lRm9sZGVyUGF0aCA9IHByb2Nlc3MuZW52LkhPTUU7XG4gICAgaWYgKCFob21lRm9sZGVyUGF0aCkge1xuICAgICAgbG9nLndhcm4oYENhbm5vdCBnZXQgdGhlIHBhdGggdG8gSE9NRSBmb2xkZXIgZnJvbSB0aGUgcHJvY2VzcyBlbnZpcm9ubWVudC4gYCArXG4gICAgICAgIGBJZ25vcmluZyBTaW11bGF0b3IgcHJlZmVyZW5jZXMgdXBkYXRlLmApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnZlcmlmeURldmljZVByZWZlcmVuY2VzKGRldmljZVByZWZzKTtcbiAgICBjb25zdCBwbGlzdFBhdGggPSBwYXRoLnJlc29sdmUoaG9tZUZvbGRlclBhdGgsICdMaWJyYXJ5JywgJ1ByZWZlcmVuY2VzJywgJ2NvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3IucGxpc3QnKTtcbiAgICBpZiAoIWF3YWl0IGZzLmhhc0FjY2VzcyhwbGlzdFBhdGgpKSB7XG4gICAgICBsb2cud2FybihgU2ltdWxhdG9yIHByZWZlcmVuY2VzIGZpbGUgJyR7cGxpc3RQYXRofScgaXMgbm90IGFjY2Vzc2libGUuIGAgK1xuICAgICAgICBgSWdub3JpbmcgU2ltdWxhdG9yIHByZWZlcmVuY2VzIHVwZGF0ZS5gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IG5ld1ByZWZzID0ge307XG4gICAgaWYgKCFfLmlzRW1wdHkoZGV2aWNlUHJlZnMpKSB7XG4gICAgICBuZXdQcmVmcy5EZXZpY2VQcmVmZXJlbmNlcyA9IHtbdGhpcy51ZGlkLnRvVXBwZXJDYXNlKCldOiBkZXZpY2VQcmVmc307XG4gICAgfVxuICAgIG5ld1ByZWZzID0gXy5tZXJnZShuZXdQcmVmcywgY29tbW9uUHJlZnMpO1xuICAgIHJldHVybiBhd2FpdCBwcmVmZXJlbmNlc1BsaXN0R3VhcmQuYWNxdWlyZShTaW11bGF0b3JYY29kZTkubmFtZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY3VycmVudFBsaXN0Q29udGVudCA9IGF3YWl0IHBsaXN0LnBhcnNlUGxpc3RGaWxlKHBsaXN0UGF0aCk7XG4gICAgICAgIGF3YWl0IHBsaXN0LnVwZGF0ZVBsaXN0RmlsZShwbGlzdFBhdGgsIF8ubWVyZ2UoY3VycmVudFBsaXN0Q29udGVudCwgbmV3UHJlZnMpLCB0cnVlKTtcbiAgICAgICAgbG9nLmRlYnVnKGBVcGRhdGVkICR7dGhpcy51ZGlkfSBTaW11bGF0b3IgcHJlZmVyZW5jZXMgYXQgJyR7cGxpc3RQYXRofScgd2l0aCAke0pTT04uc3RyaW5naWZ5KG5ld1ByZWZzKX1gKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy53YXJuKGBDYW5ub3QgdXBkYXRlICR7dGhpcy51ZGlkfSBTaW11bGF0b3IgcHJlZmVyZW5jZXMgYXQgJyR7cGxpc3RQYXRofScuIGAgK1xuICAgICAgICAgICAgICAgICBgVHJ5IHRvIGRlbGV0ZSB0aGUgZmlsZSBtYW51YWxseSBpbiBvcmRlciB0byByZXNldCBpdC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2h1dCBkb3duIHRoZSBjdXJyZW50IFNpbXVsYXRvci5cbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBhc3luYyBzaHV0ZG93biAoKSB7XG4gICAgY29uc3Qge3N0YXRlfSA9IGF3YWl0IHRoaXMuc3RhdCgpO1xuICAgIGlmIChzdGF0ZSA9PT0gJ1NodXRkb3duJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCByZXRyeUludGVydmFsKDUsIDUwMCwgdGhpcy5zaW1jdGwuc2h1dGRvd25EZXZpY2UuYmluZCh0aGlzLnNpbWN0bCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBjdXJyZW50IFNpbXVsYXRvciB0byB0aGUgY2xlYW4gc3RhdGUuXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgYXN5bmMgY2xlYW4gKCkge1xuICAgIGxvZy5pbmZvKGBDbGVhbmluZyBzaW11bGF0b3IgJHt0aGlzLnVkaWR9YCk7XG4gICAgYXdhaXQgdGhpcy5zaW1jdGwuZXJhc2VEZXZpY2UoMTAwMDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqIEBvdmVycmlkZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYXN5bmMgX2FjdGl2YXRlV2luZG93ICgpIHtcbiAgICBpZiAodGhpcy5pZGIpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmlkYi5mb2N1c1NpbXVsYXRvcigpO1xuICAgIH1cbiAgICBsb2cud2FybihgQ2Fubm90IGZvY3VzIFNpbXVsYXRvciB3aW5kb3cgd2l0aCBpZGIuIERlZmF1bHRpbmcgdG8gQXBwbGVTY3JpcHRgKTtcbiAgICBjb25zdCB7bmFtZSwgc2RrfSA9IGF3YWl0IHRoaXMuc3RhdCgpO1xuICAgIHJldHVybiBgXG4gICAgICB0ZWxsIGFwcGxpY2F0aW9uIFwiU3lzdGVtIEV2ZW50c1wiXG4gICAgICAgIHRlbGwgcHJvY2VzcyBcIlNpbXVsYXRvclwiXG4gICAgICAgICAgc2V0IGZyb250bW9zdCB0byBmYWxzZVxuICAgICAgICAgIHNldCBmcm9udG1vc3QgdG8gdHJ1ZVxuICAgICAgICAgIGNsaWNrIChtZW51IGl0ZW0gMSB3aGVyZSAoaXRzIG5hbWUgY29udGFpbnMgXCIke25hbWV9IFwiIGFuZCBpdHMgbmFtZSBjb250YWlucyBcIiR7c2RrfVwiKSkgb2YgbWVudSAxIG9mIG1lbnUgYmFyIGl0ZW0gXCJXaW5kb3dcIiBvZiBtZW51IGJhciAxXG4gICAgICAgIGVuZCB0ZWxsXG4gICAgICBlbmQgdGVsbFxuICAgIGA7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBhc3luYyBpc0Jpb21ldHJpY0Vucm9sbGVkICgpIHtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHRoaXMuc2ltY3RsLnNwYXduUHJvY2VzcyhbXG4gICAgICAnbm90aWZ5dXRpbCcsXG4gICAgICAnLWcnLCBFTlJPTExNRU5UX05PVElGSUNBVElPTl9SRUNFSVZFUlxuICAgIF0pO1xuICAgIGNvbnN0IG1hdGNoID0gKG5ldyBSZWdFeHAoYCR7Xy5lc2NhcGVSZWdFeHAoRU5ST0xMTUVOVF9OT1RJRklDQVRJT05fUkVDRUlWRVIpfVxcXFxzKyhbMDFdKWApKVxuICAgICAgLmV4ZWMoc3Rkb3V0KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSBiaW9tZXRyaWMgZW5yb2xsbWVudCBzdGF0ZSBmcm9tICcke3N0ZG91dH0nYCk7XG4gICAgfVxuICAgIGxvZy5pbmZvKGBDdXJyZW50IGJpb21ldHJpYyBlbnJvbGxlZCBzdGF0ZSBmb3IgJHt0aGlzLnVkaWR9IFNpbXVsYXRvcjogJHttYXRjaFsxXX1gKTtcbiAgICByZXR1cm4gbWF0Y2hbMV0gPT09ICcxJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIGFzeW5jIGVucm9sbEJpb21ldHJpYyAoaXNFbmFibGVkID0gdHJ1ZSkge1xuICAgIGxvZy5kZWJ1ZyhgU2V0dGluZyBiaW9tZXRyaWMgZW5yb2xsZWQgc3RhdGUgZm9yICR7dGhpcy51ZGlkfSBTaW11bGF0b3IgdG8gJyR7aXNFbmFibGVkID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJ30nYCk7XG4gICAgYXdhaXQgdGhpcy5zaW1jdGwuc3Bhd25Qcm9jZXNzKFtcbiAgICAgICdub3RpZnl1dGlsJyxcbiAgICAgICctcycsIEVOUk9MTE1FTlRfTk9USUZJQ0FUSU9OX1JFQ0VJVkVSLCBpc0VuYWJsZWQgPyAnMScgOiAnMCdcbiAgICBdKTtcbiAgICBhd2FpdCB0aGlzLnNpbWN0bC5zcGF3blByb2Nlc3MoW1xuICAgICAgJ25vdGlmeXV0aWwnLFxuICAgICAgJy1wJywgRU5ST0xMTUVOVF9OT1RJRklDQVRJT05fUkVDRUlWRVJcbiAgICBdKTtcbiAgICBpZiAoYXdhaXQgdGhpcy5pc0Jpb21ldHJpY0Vucm9sbGVkKCkgIT09IGlzRW5hYmxlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IGJpb21ldHJpYyBlbnJvbGxlZCBzdGF0ZSBmb3IgJHt0aGlzLnVkaWR9IFNpbXVsYXRvciB0byAnJHtpc0VuYWJsZWQgPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnfSdgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSBub3RpZmljYXRpb24gdG8gbWF0Y2gvbm90IG1hdGNoIHRoZSBwYXJ0aWN1bGFyIGJpb21ldHJpYy5cbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBwYXJhbSB7P2Jvb2xlYW59IHNob3VsZE1hdGNoIFt0cnVlXSAtIFNldCBpdCB0byB0cnVlIG9yIGZhbHNlIGluIG9yZGVyIHRvIGVtdWxhdGVcbiAgICogbWF0Y2hpbmcvbm90IG1hdGNoaW5nIHRoZSBjb3JyZXNwb25kaW5nIGJpb21ldHJpY1xuICAgKiBAcGFyYW0gez9zdHJpbmd9IGJpb21ldHJpY05hbWUgW3RvdWNoSWRdIC0gRWl0aGVyIHRvdWNoSWQgb3IgZmFjZUlkIChmYWNlSWQgaXMgb25seSBhdmFpbGFibGUgc2luY2UgaU9TIDExKVxuICAgKi9cbiAgYXN5bmMgc2VuZEJpb21ldHJpY01hdGNoIChzaG91bGRNYXRjaCA9IHRydWUsIGJpb21ldHJpY05hbWUgPSAndG91Y2hJZCcpIHtcbiAgICBjb25zdCBkb21haW5Db21wb25lbnQgPSB0b0Jpb21ldHJpY0RvbWFpbkNvbXBvbmVudChiaW9tZXRyaWNOYW1lKTtcbiAgICBjb25zdCBkb21haW4gPSBgY29tLmFwcGxlLkJpb21ldHJpY0tpdF9TaW0uJHtkb21haW5Db21wb25lbnR9LiR7c2hvdWxkTWF0Y2ggPyAnJyA6ICdubyd9bWF0Y2hgO1xuICAgIGF3YWl0IHRoaXMuc2ltY3RsLnNwYXduUHJvY2VzcyhbXG4gICAgICAnbm90aWZ5dXRpbCcsXG4gICAgICAnLXAnLCBkb21haW5cbiAgICBdKTtcbiAgICBsb2cuaW5mbyhgU2VudCBub3RpZmljYXRpb24gJHtkb21haW59IHRvICR7c2hvdWxkTWF0Y2ggPyAnbWF0Y2gnIDogJ25vdCBtYXRjaCd9ICR7YmlvbWV0cmljTmFtZX0gYmlvbWV0cmljIGAgK1xuICAgICAgYGZvciAke3RoaXMudWRpZH0gU2ltdWxhdG9yYCk7XG4gIH1cblxuICAvKipcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBhc3luYyBnZXRMYXVuY2hEYWVtb25zUm9vdCAoKSB7XG4gICAgY29uc3QgZGV2Um9vdCA9IGF3YWl0IGdldERldmVsb3BlclJvb3QoKTtcbiAgICByZXR1cm4gcGF0aC5yZXNvbHZlKGRldlJvb3QsXG4gICAgICAnUGxhdGZvcm1zL2lQaG9uZU9TLnBsYXRmb3JtL0RldmVsb3Blci9MaWJyYXJ5L0NvcmVTaW11bGF0b3IvUHJvZmlsZXMvUnVudGltZXMvaU9TLnNpbXJ1bnRpbWUvQ29udGVudHMvUmVzb3VyY2VzL1J1bnRpbWVSb290L1N5c3RlbS9MaWJyYXJ5L0xhdW5jaERhZW1vbnMnKTtcbiAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IFNpbXVsYXRvclhjb2RlOTtcbiJdLCJmaWxlIjoibGliL3NpbXVsYXRvci14Y29kZS05LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zaW11bGF0b3IteGNvZGUtOS5qcyJdLCJuYW1lcyI6WyJTSU1VTEFUT1JfU0hVVERPV05fVElNRU9VVCIsInN0YXJ0dXBMb2NrIiwiQXN5bmNMb2NrIiwicHJlZmVyZW5jZXNQbGlzdEd1YXJkIiwiRU5ST0xMTUVOVF9OT1RJRklDQVRJT05fUkVDRUlWRVIiLCJTaW11bGF0b3JYY29kZTkiLCJTaW11bGF0b3JYY29kZTgiLCJjb25zdHJ1Y3RvciIsInVkaWQiLCJ4Y29kZVZlcnNpb24iLCJydW4iLCJvcHRzIiwiXyIsImNsb25lRGVlcCIsImRlZmF1bHRzRGVlcCIsImRldmljZVByZWZlcmVuY2VzIiwiaXNIZWFkbGVzcyIsInN0YXJ0dXBUaW1lb3V0Iiwic2NhbGVGYWN0b3IiLCJTaW11bGF0b3JXaW5kb3dMYXN0U2NhbGUiLCJwYXJzZUZsb2F0IiwiY29tbW9uUHJlZmVyZW5jZXMiLCJSb3RhdGVXaW5kb3dXaGVuU2lnbmFsZWRCeUd1ZXN0IiwiaXNCb29sZWFuIiwiY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQiLCJDb25uZWN0SGFyZHdhcmVLZXlib2FyZCIsImlzRW1wdHkiLCJ1cGRhdGVQcmVmZXJlbmNlcyIsIndhaXRGb3JTaHV0ZG93biIsIndhaXRNcyIsInN0YXRlIiwic3RhdCIsImludGVydmFsTXMiLCJlcnIiLCJFcnJvciIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsInNob3VsZFdhaXRGb3JCb290IiwiYWNxdWlyZSIsInVpQ2xpZW50QnVuZGxlSWQiLCJzZXJ2ZXJTdGF0ZSIsImlzU2VydmVyUnVubmluZyIsInVpQ2xpZW50UGlkIiwiZ2V0VUlDbGllbnRQaWQiLCJsb2ciLCJpbmZvIiwia2lsbFVJQ2xpZW50IiwicGlkIiwiZSIsImJvb3QiLCJpbmNsdWRlcyIsInNodXRkb3duIiwid2FybiIsIm1lc3NhZ2UiLCJsYXVuY2hXaW5kb3ciLCJ3YWl0Rm9yQm9vdCIsImdldER1cmF0aW9uIiwiYXNTZWNvbmRzIiwidG9GaXhlZCIsImlzVWlDbGllbnRSdW5uaW5nIiwic3RhcnRVSUNsaWVudCIsInNpbWN0bCIsImJvb3REZXZpY2UiLCJzdGRlcnIiLCJkZWJ1ZyIsInZlcmlmeURldmljZVByZWZlcmVuY2VzIiwicHJlZnMiLCJpc1VuZGVmaW5lZCIsImlzTnVtYmVyIiwiZXJyb3JBbmRUaHJvdyIsIlNpbXVsYXRvcldpbmRvd0NlbnRlciIsInZlcmlmaWNhdGlvblBhdHRlcm4iLCJpc1N0cmluZyIsInRlc3QiLCJTaW11bGF0b3JXaW5kb3dPcmllbnRhdGlvbiIsImFjY2VwdGFibGVWYWx1ZXMiLCJpbmRleE9mIiwiU2ltdWxhdG9yV2luZG93Um90YXRpb25BbmdsZSIsImRldmljZVByZWZzIiwiY29tbW9uUHJlZnMiLCJKU09OIiwic3RyaW5naWZ5IiwiaG9tZUZvbGRlclBhdGgiLCJwcm9jZXNzIiwiZW52IiwiSE9NRSIsInBsaXN0UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwiZnMiLCJoYXNBY2Nlc3MiLCJuZXdQcmVmcyIsIkRldmljZVByZWZlcmVuY2VzIiwidG9VcHBlckNhc2UiLCJtZXJnZSIsIm5hbWUiLCJjdXJyZW50UGxpc3RDb250ZW50IiwicGxpc3QiLCJwYXJzZVBsaXN0RmlsZSIsInVwZGF0ZVBsaXN0RmlsZSIsInNodXRkb3duRGV2aWNlIiwiYmluZCIsImNsZWFuIiwiZXJhc2VEZXZpY2UiLCJfYWN0aXZhdGVXaW5kb3ciLCJzZWxmTmFtZSIsInNlbGZTZGsiLCJib290ZWREZXZpY2VzQ291bnQiLCJzZGsiLCJkZXZpY2VBcnIiLCJ0b1BhaXJzIiwiZ2V0RGV2aWNlcyIsImlzQmlvbWV0cmljRW5yb2xsZWQiLCJzdGRvdXQiLCJzcGF3blByb2Nlc3MiLCJtYXRjaCIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsImV4ZWMiLCJlbnJvbGxCaW9tZXRyaWMiLCJpc0VuYWJsZWQiLCJzZW5kQmlvbWV0cmljTWF0Y2giLCJzaG91bGRNYXRjaCIsImJpb21ldHJpY05hbWUiLCJkb21haW5Db21wb25lbnQiLCJk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WS9CNUgsZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTaW11bGF0b3JYY29kZTggZnJvbSAnLi9zaW11bGF0b3IteGNvZGUtOCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBmcywgcGxpc3QsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24sIHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyB0b0Jpb21ldHJpY0RvbWFpbkNvbXBvbmVudCwgZ2V0RGV2ZWxvcGVyUm9vdCB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG5jb25zdCBTSU1VTEFUT1JfU0hVVERPV05fVElNRU9VVCA9IDE1ICogMTAwMDtcbmNvbnN0IHN0YXJ0dXBMb2NrID0gbmV3IEFzeW5jTG9jaygpO1xuY29uc3QgcHJlZmVyZW5jZXNQbGlzdEd1YXJkID0gbmV3IEFzeW5jTG9jaygpO1xuY29uc3QgRU5ST0xMTUVOVF9OT1RJRklDQVRJT05fUkVDRUlWRVIgPSAnY29tLmFwcGxlLkJpb21ldHJpY0tpdC5lbnJvbGxtZW50Q2hhbmdlZCc7XG5cbmNsYXNzIFNpbXVsYXRvclhjb2RlOSBleHRlbmRzIFNpbXVsYXRvclhjb2RlOCB7XG4gIGNvbnN0cnVjdG9yICh1ZGlkLCB4Y29kZVZlcnNpb24pIHtcbiAgICBzdXBlcih1ZGlkLCB4Y29kZVZlcnNpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IERldmljZVByZWZlcmVuY2VzXG4gICAqIEBwcm9wZXJ0eSB7P251bWJlcn0gU2ltdWxhdG9yRXh0ZXJuYWxEaXNwbGF5IC0gVEJELiBFeGFtcGxlIHZhbHVlOiAyLjExNFxuICAgKiBAcHJvcGVydHkgez9zdHJpbmd9IENocm9tZVRpbnQgLSBUQkQuIEV4YW1wbGUgdmFsdWU6ICcnXG4gICAqIEBwcm9wZXJ0eSB7P251bWJlcn0gU2ltdWxhdG9yV2luZG93TGFzdFNjYWxlIC0gU2NhbGUgdmFsdWUgZm9yIHRoZSBwYXJ0aWN1bGFyIFNpbXVsYXRvciB3aW5kb3cuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wIG1lYW5zIDEwMCUgc2NhbGUuXG4gICAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24gLSBTaW11bGF0b3Igd2luZG93IG9yaWVudGF0aW9uLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BvcnRyYWl0JywgJ0xhbmRzY2FwZUxlZnQnLCAnUG9ydHJhaXRVcHNpZGVEb3duJyBhbmQgJ0xhbmRzY2FwZVJpZ2h0Jy5cbiAgICogQHByb3BlcnR5IHs/bnVtYmVyfSBTaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlIC0gV2luZG93IHJvdGF0aW9uIGFuZ2xlLiBUaGlzIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIGluIHN5bmNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBfU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb25fLiBUaGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgYXJlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCA5MCwgMTgwIGFuZCAyNzAuXG4gICAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gU2ltdWxhdG9yV2luZG93Q2VudGVyIC0gVGhlIGNvb3JkaW5hdGVzIG9mIFNpbXVsYXRvcidzIHdpbmRvdyBjZW50ZXIgaW4gcGl4ZWxzLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBleGFtcGxlICd7LTEyOTQuNSwgNzc1LjV9Jy5cbiAgICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gQ29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQgLSBFcXVhbHMgdG8gMSBpZiBoYXJkd2FyZSBrZXlib2FyZCBzaG91bGQgYmUgY29ubmVjdGVkLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyd2lzZSAwLlxuICAgKi9cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gQ29tbW9uUHJlZmVyZW5jZXNcbiAgICogQHByb3BlcnR5IHtib29sZWFufSBDb25uZWN0SGFyZHdhcmVLZXlib2FyZCAtIFdoZXRoZXIgdG8gY29ubmVjdCBoYXJkd2FyZSBrZXlib2FyZFxuICAgKi9cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gUnVuT3B0aW9uc1xuICAgKiBAcHJvcGVydHkge3N0cmluZ30gc2NhbGVGYWN0b3I6IEFueSBwb3NpdGl2ZSBmbG9hdCB2YWx1ZS4gMS4wIG1lYW5zIDE6MSBzY2FsZS5cbiAgICogRGVmaW5lcyB0aGUgd2luZG93IHNjYWxlIHZhbHVlIGZvciB0aGUgVUkgY2xpZW50IHdpbmRvdyBmb3IgdGhlIGN1cnJlbnQgU2ltdWxhdG9yLlxuICAgKiBFcXVhbHMgdG8gYG51bGxgIGJ5IGRlZmF1bHQsIHdoaWNoIGtlZXBzIHRoZSBjdXJyZW50IHNjYWxlIHVuY2hhbmdlZC5cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBjb25uZWN0SGFyZHdhcmVLZXlib2FyZDogd2hldGhlciB0byBjb25uZWN0IHRoZSBoYXJkd2FyZSBrZXlib2FyZCB0byB0aGVcbiAgICogU2ltdWxhdG9yIFVJIGNsaWVudC4gRXF1YWxzIHRvIGBmYWxzZWAgYnkgZGVmYXVsdC5cbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IHN0YXJ0dXBUaW1lb3V0OiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgU2ltdWxhdG9yIGJvb3RpbmdcbiAgICogcHJvY2VzcyBpcyBjb21wbGV0ZWQuIFRoZSBkZWZhdWx0IHRpbWVvdXQgd2lsbCBiZSB1c2VkIGlmIG5vdCBzZXQgZXhwbGljaXRseS5cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBpc0hlYWRsZXNzOiB3aGV0aGVyIHRvIHN0YXJ0IHRoZSBTaW11bGF0b3IgaW4gaGVhZGxlc3MgbW9kZSAod2l0aCBVSVxuICAgKiBjbGllbnQgaW52aXNpYmxlKS4gYGZhbHNlYCBieSBkZWZhdWx0LlxuICAgKiBAcHJvcGVydHkgez9ib29sZWFufSB0cmFjZVBvaW50ZXIgW2ZhbHNlXSAtIFdoZXRoZXIgdG8gaGlnaGxpZ2h0IHRvdWNoZXMgb24gU2ltdWxhdG9yXG4gICAqIHNjcmVlbi4gVGhpcyBpcyBoZWxwZnVsIHdoaWxlIGRlYnVnZ2luZyBhdXRvbWF0ZWQgdGVzdHMgb3Igd2hpbGUgb2JzZXJ2aW5nIHRoZSBhdXRvbWF0aW9uXG4gICAqIHJlY29yZGluZ3MuXG4gICAqIEBwcm9wZXJ0eSB7RGV2aWNlUHJlZmVyZW5jZXN9IGRldmljZVByZWZlcmVuY2VzOiBwcmVmZXJlbmNlcyBvZiB0aGUgbmV3bHkgY3JlYXRlZCBTaW11bGF0b3JcbiAgICogZGV2aWNlXG4gICAqL1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBnaXZlbiBTaW11bGF0b3Igd2l0aCBvcHRpb25zLiBUaGUgU2ltdWxhdG9yIHdpbGwgbm90IGJlIHJlc3RhcnRlZCBpZlxuICAgKiBpdCBpcyBhbHJlYWR5IHJ1bm5pbmcgYW5kIHRoZSBjdXJyZW50IFVJIHN0YXRlIG1hdGNoZXMgdG8gYGlzSGVhZGxlc3NgIG9wdGlvbi5cbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBwYXJhbSB7UnVuT3B0aW9uc30gb3B0cyAtIE9uZSBvciBtb3JlIG9mIGF2YWlsYWJsZSBTaW11bGF0b3Igb3B0aW9uc1xuICAgKi9cbiAgYXN5bmMgcnVuIChvcHRzID0ge30pIHtcbiAgICBvcHRzID0gXy5jbG9uZURlZXAob3B0cyk7XG4gICAgXy5kZWZhdWx0c0RlZXAob3B0cywge1xuICAgICAgZGV2aWNlUHJlZmVyZW5jZXM6IHt9LFxuICAgICAgaXNIZWFkbGVzczogZmFsc2UsXG4gICAgICBzdGFydHVwVGltZW91dDogdGhpcy5zdGFydHVwVGltZW91dCxcbiAgICB9KTtcbiAgICBpZiAob3B0cy5zY2FsZUZhY3Rvcikge1xuICAgICAgb3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dMYXN0U2NhbGUgPSBwYXJzZUZsb2F0KG9wdHMuc2NhbGVGYWN0b3IpO1xuICAgIH1cbiAgICAvLyBUaGlzIG9wdGlvbiBpcyBuZWNlc3NhcnkgdG8gbWFrZSB0aGUgU2ltdWxhdG9yIHdpbmRvdyBmb2xsb3dcbiAgICAvLyB0aGUgYWN0dWFsIFhDVUlEZXZpY2Ugb3JpZW50YXRpb25cbiAgICBjb25zdCBjb21tb25QcmVmZXJlbmNlcyA9IHtcbiAgICAgIFJvdGF0ZVdpbmRvd1doZW5TaWduYWxlZEJ5R3Vlc3Q6IHRydWVcbiAgICB9O1xuICAgIGlmIChfLmlzQm9vbGVhbihvcHRzLmNvbm5lY3RIYXJkd2FyZUtleWJvYXJkKSkge1xuICAgICAgb3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5Db25uZWN0SGFyZHdhcmVLZXlib2FyZCA9IG9wdHMuY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQ7XG4gICAgICBjb21tb25QcmVmZXJlbmNlcy5Db25uZWN0SGFyZHdhcmVLZXlib2FyZCA9IG9wdHMuY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQ7XG4gICAgfVxuICAgIGlmICghXy5pc0VtcHR5KG9wdHMuZGV2aWNlUHJlZmVyZW5jZXMpIHx8ICFfLmlzRW1wdHkoY29tbW9uUHJlZmVyZW5jZXMpKSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVByZWZlcmVuY2VzKG9wdHMuZGV2aWNlUHJlZmVyZW5jZXMsIGNvbW1vblByZWZlcmVuY2VzKTtcbiAgICB9XG4gICAgY29uc3Qgd2FpdEZvclNodXRkb3duID0gYXN5bmMgKHdhaXRNcyA9IFNJTVVMQVRPUl9TSFVURE9XTl9USU1FT1VUKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7c3RhdGV9ID0gYXdhaXQgdGhpcy5zdGF0KCk7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlID09PSAnU2h1dGRvd24nO1xuICAgICAgICB9LCB7d2FpdE1zLCBpbnRlcnZhbE1zOiA1MDB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNpbXVsYXRvciBpcyBub3QgaW4gJ1NodXRkb3duJyBzdGF0ZSBhZnRlciAke3dhaXRNc31tc2ApO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgICBjb25zdCBzaG91bGRXYWl0Rm9yQm9vdCA9IGF3YWl0IHN0YXJ0dXBMb2NrLmFjcXVpcmUodGhpcy51aUNsaWVudEJ1bmRsZUlkLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7c3RhdGU6IHNlcnZlclN0YXRlfSA9IGF3YWl0IHRoaXMuc3RhdCgpO1xuICAgICAgY29uc3QgaXNTZXJ2ZXJSdW5uaW5nID0gc2VydmVyU3RhdGUgPT09ICdCb290ZWQnO1xuICAgICAgY29uc3QgdWlDbGllbnRQaWQgPSBhd2FpdCB0aGlzLmdldFVJQ2xpZW50UGlkKCk7XG4gICAgICBpZiAob3B0cy5pc0hlYWRsZXNzKSB7XG4gICAgICAgIGlmIChpc1NlcnZlclJ1bm5pbmcgJiYgIXVpQ2xpZW50UGlkKSB7XG4gICAgICAgICAgbG9nLmluZm8oYFNpbXVsYXRvciB3aXRoIFVESUQgJyR7dGhpcy51ZGlkfScgaXMgYWxyZWFkeSBib290ZWQgaW4gaGVhZGxlc3MgbW9kZS5gKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF3YWl0IHRoaXMua2lsbFVJQ2xpZW50KHtwaWQ6IHVpQ2xpZW50UGlkfSkpIHtcbiAgICAgICAgICBsb2cuaW5mbyhgRGV0ZWN0ZWQgdGhlIFNpbXVsYXRvciBVSSBjbGllbnQgd2FzIHJ1bm5pbmcgYW5kIGtpbGxlZCBpdC4gVmVyaWZ5aW5nIHRoZSBjdXJyZW50IFNpbXVsYXRvciBzdGF0ZS4uLmApO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gU3RvcHBpbmcgdGhlIFVJIGNsaWVudCBraWxscyBhbGwgcnVubmluZyBzZXJ2ZXJzIGZvciBzb21lIGVhcmx5IFhDb2RlIHZlcnNpb25zLiBUaGlzIGlzIGEga25vd24gYnVnXG4gICAgICAgICAgYXdhaXQgd2FpdEZvclNodXRkb3duKDMwMDApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc3Qge3N0YXRlfSA9IGF3YWl0IHRoaXMuc3RhdCgpO1xuICAgICAgICAgIGlmIChzdGF0ZSAhPT0gJ0Jvb3RlZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2ltdWxhdG9yIHdpdGggVURJRCAnJHt0aGlzLnVkaWR9JyBjYW5ub3QgYmUgdHJhbnNpdGlvbmVkIHRvIGhlYWRsZXNzIG1vZGUuIGAgK1xuICAgICAgICAgICAgICBgVGhlIHJlY2VudCBzdGF0ZSBpcyAnJHtzdGF0ZX0nYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsb2cuaW5mbyhgQm9vdGluZyBTaW11bGF0b3Igd2l0aCBVRElEICcke3RoaXMudWRpZH0nIGluIGhlYWRsZXNzIG1vZGUuIEFsbCBVSS1yZWxhdGVkIGNhcGFiaWxpdGllcyBhcmUgZ29pbmcgdG8gYmUgaWdub3JlZGApO1xuICAgICAgICBhd2FpdCB0aGlzLmJvb3QoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1NlcnZlclJ1bm5pbmcgJiYgdWlDbGllbnRQaWQpIHtcbiAgICAgICAgICBsb2cuaW5mbyhgQm90aCBTaW11bGF0b3Igd2l0aCBVRElEICcke3RoaXMudWRpZH0nIGFuZCB0aGUgVUkgY2xpZW50IGFyZSBjdXJyZW50bHkgcnVubmluZ2ApO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIVsnU2h1dGRvd24nLCAnQm9vdGVkJ10uaW5jbHVkZXMoc2VydmVyU3RhdGUpKSB7XG4gICAgICAgICAgaWYgKHNlcnZlclN0YXRlICE9PSAnU2h1dHRpbmcgRG93bicpIHtcbiAgICAgICAgICAgIGxvZy5pbmZvKGBTaW11bGF0b3IgJyR7dGhpcy51ZGlkfScgaXMgaW4gJyR7c2VydmVyU3RhdGV9JyBzdGF0ZS4gVHJ5aW5nIHRvIHNodXRkb3duLi4uYCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNodXRkb3duKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgbG9nLndhcm4oYEVycm9yIG9uIFNpbXVsYXRvciBzaHV0ZG93bjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgd2FpdEZvclNodXRkb3duKCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5sYXVuY2hXaW5kb3codWlDbGllbnRQaWQsIG9wdHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBpZiAoc2hvdWxkV2FpdEZvckJvb3QpIHtcbiAgICAgIGF3YWl0IHRoaXMud2FpdEZvckJvb3Qob3B0cy5zdGFydHVwVGltZW91dCk7XG4gICAgICBsb2cuaW5mbyhgU2ltdWxhdG9yIHdpdGggVURJRCAke3RoaXMudWRpZH0gYm9vdGVkIGluICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc1NlY29uZHMudG9GaXhlZCgzKX1zYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqKlxuICAgKiBCb290cyBzaW11bGF0b3IgYW5kIG9wZW5zIHNpbXVsYXRvcnMgVUkgQ2xpZW50IGlmIG5vdCBhbHJlYWR5IG9wZW5lZC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBpc1VpQ2xpZW50UnVubmluZyAtIHByb2Nlc3MgaWQgb2Ygc2ltdWxhdG9yIFVJIGNsaWVudC5cbiAgICogQHBhcmFtIHtSdW5PcHRpb25zfSBvcHRzIC0gYXJndW1lbnRzIHRvIHN0YXJ0IHNpbXVsYXRvciBVSSBjbGllbnQgd2l0aC5cbiAgICovXG4gIGFzeW5jIGxhdW5jaFdpbmRvdyAoaXNVaUNsaWVudFJ1bm5pbmcsIG9wdHMgPSB7fSkge1xuICAgIGF3YWl0IHRoaXMuYm9vdCgpO1xuICAgIGlmICghaXNVaUNsaWVudFJ1bm5pbmcpIHtcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRVSUNsaWVudChvcHRzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQm9vdHMgc2ltdWxhdG9yIGlmIG5vdCBhbHJlYWR5IGJvb3RlZC5cbiAgICovXG4gIGFzeW5jIGJvb3QgKCkge1xuICAgIGxvZy5pbmZvKGBCb290aW5nIFNpbXVsYXRvciB3aXRoIFVESUQgJyR7dGhpcy51ZGlkfScuLi5gKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbCgzLCAyMDAwLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zaW1jdGwuYm9vdERldmljZSgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKCFfLmluY2x1ZGVzKGUuc3RkZXJyLCAnVW5hYmxlIHRvIGJvb3QgZGV2aWNlIGluIGN1cnJlbnQgc3RhdGU6IEJvb3RlZCcpKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsb2cuZGVidWcoYFNpbXVsYXRvciB3aXRoIFVESUQgJyR7dGhpcy51ZGlkfScgaXMgYWxyZWFkeSBpbiBCb290ZWQgc3RhdGVgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihlcnIuc3RkZXJyIHx8IGVyci5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSB2ZXJpZmljYXRpb24gb2YgZGV2aWNlIHByZWZlcmVuY2VzIGNvcnJlY3RuZXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0RldmljZVByZWZlcmVuY2VzfSBwcmVmcyBbe31dIC0gVGhlIHByZWZlcmVuY2VzIHRvIGJlIHZlcmlmaWVkXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBhbnkgb2YgdGhlIGdpdmVuIHByZWZlcmVuY2UgdmFsdWVzIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZFxuICAgKiBmb3JtYXQuXG4gICAqL1xuICB2ZXJpZnlEZXZpY2VQcmVmZXJlbmNlcyAocHJlZnMgPSB7fSkge1xuICAgIGlmIChfLmlzRW1wdHkocHJlZnMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHByZWZzLlNpbXVsYXRvcldpbmRvd0xhc3RTY2FsZSkpIHtcbiAgICAgIGlmICghXy5pc051bWJlcihwcmVmcy5TaW11bGF0b3JXaW5kb3dMYXN0U2NhbGUpIHx8IHByZWZzLlNpbXVsYXRvcldpbmRvd0xhc3RTY2FsZSA8PSAwKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBTaW11bGF0b3JXaW5kb3dMYXN0U2NhbGUgaXMgZXhwZWN0ZWQgdG8gYmUgYSBwb3NpdGl2ZSBmbG9hdCB2YWx1ZS4gYCArXG4gICAgICAgICAgYCcke3ByZWZzLlNpbXVsYXRvcldpbmRvd0xhc3RTY2FsZX0nIGlzIGFzc2lnbmVkIGluc3RlYWQuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHByZWZzLlNpbXVsYXRvcldpbmRvd0NlbnRlcikpIHtcbiAgICAgIC8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvMlpYT2lqLzJcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvblBhdHRlcm4gPSAvey0/XFxkKyhcXC5cXGQrKT8sLT9cXGQrKFxcLlxcZCspP30vO1xuICAgICAgaWYgKCFfLmlzU3RyaW5nKHByZWZzLlNpbXVsYXRvcldpbmRvd0NlbnRlcikgfHwgIXZlcmlmaWNhdGlvblBhdHRlcm4udGVzdChwcmVmcy5TaW11bGF0b3JXaW5kb3dDZW50ZXIpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBTaW11bGF0b3JXaW5kb3dDZW50ZXIgaXMgZXhwZWN0ZWQgdG8gbWF0Y2ggXCJ7ZmxvYXRYUG9zaXRpb24sZmxvYXRZUG9zaXRpb259XCIgZm9ybWF0ICh3aXRob3V0IHNwYWNlcykuIGAgK1xuICAgICAgICAgIGAnJHtwcmVmcy5TaW11bGF0b3JXaW5kb3dDZW50ZXJ9JyBpcyBhc3NpZ25lZCBpbnN0ZWFkLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghXy5pc1VuZGVmaW5lZChwcmVmcy5TaW11bGF0b3JXaW5kb3dPcmllbnRhdGlvbikpIHtcbiAgICAgIGNvbnN0IGFjY2VwdGFibGVWYWx1ZXMgPSBbJ1BvcnRyYWl0JywgJ0xhbmRzY2FwZUxlZnQnLCAnUG9ydHJhaXRVcHNpZGVEb3duJywgJ0xhbmRzY2FwZVJpZ2h0J107XG4gICAgICBpZiAoYWNjZXB0YWJsZVZhbHVlcy5pbmRleE9mKHByZWZzLlNpbXVsYXRvcldpbmRvd09yaWVudGF0aW9uKSA9PT0gLTEpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYFNpbXVsYXRvcldpbmRvd09yaWVudGF0aW9uIGlzIGV4cGVjdGVkIHRvIGJlIG9uZSBvZiAke2FjY2VwdGFibGVWYWx1ZXN9LiBgICtcbiAgICAgICAgICBgJyR7cHJlZnMuU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb259JyBpcyBhc3NpZ25lZCBpbnN0ZWFkLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghXy5pc1VuZGVmaW5lZChwcmVmcy5TaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlKSkge1xuICAgICAgaWYgKCFfLmlzTnVtYmVyKHByZWZzLlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBTaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlIGlzIGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgbnVtYmVyLiBgICtcbiAgICAgICAgICBgJyR7cHJlZnMuU2ltdWxhdG9yV2luZG93Um90YXRpb25BbmdsZX0nIGlzIGFzc2lnbmVkIGluc3RlYWQuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY29tbW9uIGlPUyBTaW11bGF0b3IgcHJlZmVyZW5jZXMgZmlsZSB3aXRoIG5ldyB2YWx1ZXMuXG4gICAqIEl0IGlzIG5lY2Vzc2FyeSB0byByZXN0YXJ0IHRoZSBjb3JyZXNwb25kaW5nIFNpbXVsYXRvciBiZWZvcmVcbiAgICogdGhlc2UgY2hhbmdlcyBhcmUgYXBwbGllZC5cbiAgICpcbiAgICogQHBhcmFtIHtEZXZpY2VQcmVmZXJlbmNlc30gZGV2aWNlUHJlZnMgW3t9XSAtIFRoZSBtYXBwaW5nLCB3aGljaCByZXByZXNlbnRzIG5ldyBkZXZpY2UgcHJlZmVyZW5jZSB2YWx1ZXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgZ2l2ZW4gU2ltdWxhdG9yLlxuICAgKiBAcGFyYW0ge0NvbW1vblByZWZlcmVuY2VzfSBjb21tb25QcmVmcyBbe31dIC0gVGhlIG1hcHBpbmcsIHdoaWNoIHJlcHJlc2VudHMgbmV3IGNvbW1vbiBwcmVmZXJlbmNlIHZhbHVlc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFsbCBTaW11bGF0b3JzLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBwcmVmZXJlbmNlcyB3ZXJlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlUHJlZmVyZW5jZXMgKGRldmljZVByZWZzID0ge30sIGNvbW1vblByZWZzID0ge30pIHtcbiAgICBpZiAoIV8uaXNFbXB0eShkZXZpY2VQcmVmcykpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgU2V0dGluZyBwcmVmZXJlbmNlcyBvZiAke3RoaXMudWRpZH0gU2ltdWxhdG9yIHRvICR7SlNPTi5zdHJpbmdpZnkoZGV2aWNlUHJlZnMpfWApO1xuICAgIH1cbiAgICBpZiAoIV8uaXNFbXB0eShjb21tb25QcmVmcykpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgU2V0dGluZyBjb21tb24gU2ltdWxhdG9yIHByZWZlcmVuY2VzIHRvICR7SlNPTi5zdHJpbmdpZnkoY29tbW9uUHJlZnMpfWApO1xuICAgIH1cbiAgICBjb25zdCBob21lRm9sZGVyUGF0aCA9IHByb2Nlc3MuZW52LkhPTUU7XG4gICAgaWYgKCFob21lRm9sZGVyUGF0aCkge1xuICAgICAgbG9nLndhcm4oYENhbm5vdCBnZXQgdGhlIHBhdGggdG8gSE9NRSBmb2xkZXIgZnJvbSB0aGUgcHJvY2VzcyBlbnZpcm9ubWVudC4gYCArXG4gICAgICAgIGBJZ25vcmluZyBTaW11bGF0b3IgcHJlZmVyZW5jZXMgdXBkYXRlLmApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnZlcmlmeURldmljZVByZWZlcmVuY2VzKGRldmljZVByZWZzKTtcbiAgICBjb25zdCBwbGlzdFBhdGggPSBwYXRoLnJlc29sdmUoaG9tZUZvbGRlclBhdGgsICdMaWJyYXJ5JywgJ1ByZWZlcmVuY2VzJywgJ2NvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3IucGxpc3QnKTtcbiAgICBpZiAoIWF3YWl0IGZzLmhhc0FjY2VzcyhwbGlzdFBhdGgpKSB7XG4gICAgICBsb2cud2FybihgU2ltdWxhdG9yIHByZWZlcmVuY2VzIGZpbGUgJyR7cGxpc3RQYXRofScgaXMgbm90IGFjY2Vzc2libGUuIGAgK1xuICAgICAgICBgSWdub3JpbmcgU2ltdWxhdG9yIHByZWZlcmVuY2VzIHVwZGF0ZS5gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IG5ld1ByZWZzID0ge307XG4gICAgaWYgKCFfLmlzRW1wdHkoZGV2aWNlUHJlZnMpKSB7XG4gICAgICBuZXdQcmVmcy5EZXZpY2VQcmVmZXJlbmNlcyA9IHtbdGhpcy51ZGlkLnRvVXBwZXJDYXNlKCldOiBkZXZpY2VQcmVmc307XG4gICAgfVxuICAgIG5ld1ByZWZzID0gXy5tZXJnZShuZXdQcmVmcywgY29tbW9uUHJlZnMpO1xuICAgIHJldHVybiBhd2FpdCBwcmVmZXJlbmNlc1BsaXN0R3VhcmQuYWNxdWlyZShTaW11bGF0b3JYY29kZTkubmFtZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY3VycmVudFBsaXN0Q29udGVudCA9IGF3YWl0IHBsaXN0LnBhcnNlUGxpc3RGaWxlKHBsaXN0UGF0aCk7XG4gICAgICAgIGF3YWl0IHBsaXN0LnVwZGF0ZVBsaXN0RmlsZShwbGlzdFBhdGgsIF8ubWVyZ2UoY3VycmVudFBsaXN0Q29udGVudCwgbmV3UHJlZnMpLCB0cnVlKTtcbiAgICAgICAgbG9nLmRlYnVnKGBVcGRhdGVkICR7dGhpcy51ZGlkfSBTaW11bGF0b3IgcHJlZmVyZW5jZXMgYXQgJyR7cGxpc3RQYXRofScgd2l0aCAke0pTT04uc3RyaW5naWZ5KG5ld1ByZWZzKX1gKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy53YXJuKGBDYW5ub3QgdXBkYXRlICR7dGhpcy51ZGlkfSBTaW11bGF0b3IgcHJlZmVyZW5jZXMgYXQgJyR7cGxpc3RQYXRofScuIGAgK1xuICAgICAgICAgICAgICAgICBgVHJ5IHRvIGRlbGV0ZSB0aGUgZmlsZSBtYW51YWxseSBpbiBvcmRlciB0byByZXNldCBpdC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2h1dCBkb3duIHRoZSBjdXJyZW50IFNpbXVsYXRvci5cbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBhc3luYyBzaHV0ZG93biAoKSB7XG4gICAgY29uc3Qge3N0YXRlfSA9IGF3YWl0IHRoaXMuc3RhdCgpO1xuICAgIGlmIChzdGF0ZSA9PT0gJ1NodXRkb3duJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCByZXRyeUludGVydmFsKDUsIDUwMCwgdGhpcy5zaW1jdGwuc2h1dGRvd25EZXZpY2UuYmluZCh0aGlzLnNpbWN0bCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBjdXJyZW50IFNpbXVsYXRvciB0byB0aGUgY2xlYW4gc3RhdGUuXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgYXN5bmMgY2xlYW4gKCkge1xuICAgIGxvZy5pbmZvKGBDbGVhbmluZyBzaW11bGF0b3IgJHt0aGlzLnVkaWR9YCk7XG4gICAgYXdhaXQgdGhpcy5zaW1jdGwuZXJhc2VEZXZpY2UoMTAwMDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqIEBvdmVycmlkZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYXN5bmMgX2FjdGl2YXRlV2luZG93ICgpIHtcbiAgICBsZXQgc2VsZk5hbWU7XG4gICAgbGV0IHNlbGZTZGs7XG4gICAgbGV0IGJvb3RlZERldmljZXNDb3VudCA9IDA7XG4gICAgZm9yIChjb25zdCBbc2RrLCBkZXZpY2VBcnJdIG9mIF8udG9QYWlycyhhd2FpdCB0aGlzLnNpbWN0bC5nZXREZXZpY2VzKCkpKSB7XG4gICAgICBmb3IgKGNvbnN0IHtzdGF0ZSwgdWRpZCwgbmFtZX0gb2YgZGV2aWNlQXJyKSB7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gJ0Jvb3RlZCcpIHtcbiAgICAgICAgICBib290ZWREZXZpY2VzQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlbGZOYW1lICYmIHVkaWQgPT09IHRoaXMudWRpZCkge1xuICAgICAgICAgIHNlbGZTZGsgPSBzZGs7XG4gICAgICAgICAgc2VsZk5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChib290ZWREZXZpY2VzQ291bnQgPCAyKSB7XG4gICAgICByZXR1cm4gYXdhaXQgc3VwZXIuX2FjdGl2YXRlV2luZG93KCk7XG4gICAgfVxuXG4gICAgLy8gVGhlcmUgYXJlIHBvdGVudGlhbGx5IG1vcmUgdGhhdCBvbmUgU2ltdWxhdG9yIHdpbmRvd1xuICAgIHJldHVybiBgXG4gICAgICB0ZWxsIGFwcGxpY2F0aW9uIFwiU3lzdGVtIEV2ZW50c1wiXG4gICAgICAgIHRlbGwgcHJvY2VzcyBcIlNpbXVsYXRvclwiXG4gICAgICAgICAgc2V0IGZyb250bW9zdCB0byBmYWxzZVxuICAgICAgICAgIHNldCBmcm9udG1vc3QgdG8gdHJ1ZVxuICAgICAgICAgIGNsaWNrIChtZW51IGl0ZW0gMSB3aGVyZSAoaXRzIG5hbWUgY29udGFpbnMgXCIke3NlbGZOYW1lfSBcIiBhbmQgaXRzIG5hbWUgY29udGFpbnMgXCIke3NlbGZTZGt9XCIpKSBvZiBtZW51IDEgb2YgbWVudSBiYXIgaXRlbSBcIldpbmRvd1wiIG9mIG1lbnUgYmFyIDFcbiAgICAgICAgZW5kIHRlbGxcbiAgICAgIGVuZCB0ZWxsXG4gICAgYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIGFzeW5jIGlzQmlvbWV0cmljRW5yb2xsZWQgKCkge1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgdGhpcy5zaW1jdGwuc3Bhd25Qcm9jZXNzKFtcbiAgICAgICdub3RpZnl1dGlsJyxcbiAgICAgICctZycsIEVOUk9MTE1FTlRfTk9USUZJQ0FUSU9OX1JFQ0VJVkVSXG4gICAgXSk7XG4gICAgY29uc3QgbWF0Y2ggPSAobmV3IFJlZ0V4cChgJHtfLmVzY2FwZVJlZ0V4cChFTlJPTExNRU5UX05PVElGSUNBVElPTl9SRUNFSVZFUil9XFxcXHMrKFswMV0pYCkpXG4gICAgICAuZXhlYyhzdGRvdXQpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIGJpb21ldHJpYyBlbnJvbGxtZW50IHN0YXRlIGZyb20gJyR7c3Rkb3V0fSdgKTtcbiAgICB9XG4gICAgbG9nLmluZm8oYEN1cnJlbnQgYmlvbWV0cmljIGVucm9sbGVkIHN0YXRlIGZvciAke3RoaXMudWRpZH0gU2ltdWxhdG9yOiAke21hdGNoWzFdfWApO1xuICAgIHJldHVybiBtYXRjaFsxXSA9PT0gJzEnO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgYXN5bmMgZW5yb2xsQmlvbWV0cmljIChpc0VuYWJsZWQgPSB0cnVlKSB7XG4gICAgbG9nLmRlYnVnKGBTZXR0aW5nIGJpb21ldHJpYyBlbnJvbGxlZCBzdGF0ZSBmb3IgJHt0aGlzLnVkaWR9IFNpbXVsYXRvciB0byAnJHtpc0VuYWJsZWQgPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnfSdgKTtcbiAgICBhd2FpdCB0aGlzLnNpbWN0bC5zcGF3blByb2Nlc3MoW1xuICAgICAgJ25vdGlmeXV0aWwnLFxuICAgICAgJy1zJywgRU5ST0xMTUVOVF9OT1RJRklDQVRJT05fUkVDRUlWRVIsIGlzRW5hYmxlZCA/ICcxJyA6ICcwJ1xuICAgIF0pO1xuICAgIGF3YWl0IHRoaXMuc2ltY3RsLnNwYXduUHJvY2VzcyhbXG4gICAgICAnbm90aWZ5dXRpbCcsXG4gICAgICAnLXAnLCBFTlJPTExNRU5UX05PVElGSUNBVElPTl9SRUNFSVZFUlxuICAgIF0pO1xuICAgIGlmIChhd2FpdCB0aGlzLmlzQmlvbWV0cmljRW5yb2xsZWQoKSAhPT0gaXNFbmFibGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgYmlvbWV0cmljIGVucm9sbGVkIHN0YXRlIGZvciAke3RoaXMudWRpZH0gU2ltdWxhdG9yIHRvICcke2lzRW5hYmxlZCA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCd9J2ApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIG5vdGlmaWNhdGlvbiB0byBtYXRjaC9ub3QgbWF0Y2ggdGhlIHBhcnRpY3VsYXIgYmlvbWV0cmljLlxuICAgKiBAb3ZlcnJpZGVcbiAgICpcbiAgICogQHBhcmFtIHs/Ym9vbGVhbn0gc2hvdWxkTWF0Y2ggW3RydWVdIC0gU2V0IGl0IHRvIHRydWUgb3IgZmFsc2UgaW4gb3JkZXIgdG8gZW11bGF0ZVxuICAgKiBtYXRjaGluZy9ub3QgbWF0Y2hpbmcgdGhlIGNvcnJlc3BvbmRpbmcgYmlvbWV0cmljXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gYmlvbWV0cmljTmFtZSBbdG91Y2hJZF0gLSBFaXRoZXIgdG91Y2hJZCBvciBmYWNlSWQgKGZhY2VJZCBpcyBvbmx5IGF2YWlsYWJsZSBzaW5jZSBpT1MgMTEpXG4gICAqL1xuICBhc3luYyBzZW5kQmlvbWV0cmljTWF0Y2ggKHNob3VsZE1hdGNoID0gdHJ1ZSwgYmlvbWV0cmljTmFtZSA9ICd0b3VjaElkJykge1xuICAgIGNvbnN0IGRvbWFpbkNvbXBvbmVudCA9IHRvQmlvbWV0cmljRG9tYWluQ29tcG9uZW50KGJpb21ldHJpY05hbWUpO1xuICAgIGNvbnN0IGRvbWFpbiA9IGBjb20uYXBwbGUuQmlvbWV0cmljS2l0X1NpbS4ke2RvbWFpbkNvbXBvbmVudH0uJHtzaG91bGRNYXRjaCA/ICcnIDogJ25vJ31tYXRjaGA7XG4gICAgYXdhaXQgdGhpcy5zaW1jdGwuc3Bhd25Qcm9jZXNzKFtcbiAgICAgICdub3RpZnl1dGlsJyxcbiAgICAgICctcCcsIGRvbWFpblxuICAgIF0pO1xuICAgIGxvZy5pbmZvKGBTZW50IG5vdGlmaWNhdGlvbiAke2RvbWFpbn0gdG8gJHtzaG91bGRNYXRjaCA/ICdtYXRjaCcgOiAnbm90IG1hdGNoJ30gJHtiaW9tZXRyaWNOYW1lfSBiaW9tZXRyaWMgYCArXG4gICAgICBgZm9yICR7dGhpcy51ZGlkfSBTaW11bGF0b3JgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIGFzeW5jIGdldExhdW5jaERhZW1vbnNSb290ICgpIHtcbiAgICBjb25zdCBkZXZSb290ID0gYXdhaXQgZ2V0RGV2ZWxvcGVyUm9vdCgpO1xuICAgIHJldHVybiBwYXRoLnJlc29sdmUoZGV2Um9vdCxcbiAgICAgICdQbGF0Zm9ybXMvaVBob25lT1MucGxhdGZvcm0vRGV2ZWxvcGVyL0xpYnJhcnkvQ29yZVNpbXVsYXRvci9Qcm9maWxlcy9SdW50aW1lcy9pT1Muc2ltcnVudGltZS9Db250ZW50cy9SZXNvdXJjZXMvUnVudGltZVJvb3QvU3lzdGVtL0xpYnJhcnkvTGF1bmNoRGFlbW9ucycpO1xuICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2ltdWxhdG9yWGNvZGU5O1xuIl0sImZpbGUiOiJsaWIvc2ltdWxhdG9yLXhjb2RlLTkuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==

@@ -19,2 +19,3 @@ "use strict";

exports.getDeveloperRoot = getDeveloperRoot;
exports.activateApp = activateApp;
exports.MOBILE_SAFARI_BUNDLE_ID = exports.SAFARI_STARTUP_TIMEOUT = void 0;

@@ -51,2 +52,15 @@

exports.MOBILE_SAFARI_BUNDLE_ID = MOBILE_SAFARI_BUNDLE_ID;
const APP_ACTIVATION_SCRIPT = pid => `#!/usr/bin/python
from AppKit import NSApplicationActivateIgnoringOtherApps, NSApplicationActivateAllWindows
from Cocoa import NSRunningApplication
app = NSRunningApplication.runningApplicationWithProcessIdentifier_(${pid})
if not app:
raise ValueError('App with PID ${pid} is not running')
if not app.activateWithOptions_(NSApplicationActivateAllWindows | NSApplicationActivateIgnoringOtherApps):
raise ValueError('App with PID ${pid} cannot be activated')
`;
const BIOMETRICS = {

@@ -328,5 +342,19 @@ touchId: 'fingerTouch',

return stdout.trim();
}
async function activateApp(pid) {
const tmpScript = await _appiumSupport.tempDir.path({
prefix: `activate_sim_${_appiumSupport.util.uuidV4().substring(0, 8)}`,
suffix: '.py'
});
await _appiumSupport.fs.writeFile(tmpScript, APP_ACTIVATION_SCRIPT(pid), 'utf8');
try {
await (0, _teen_process.exec)('/usr/bin/python', [tmpScript]);
} finally {
await _appiumSupport.fs.rimraf(tmpScript);
}
}require('source-map-support').install();
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJERUZBVUxUX1NJTV9TSFVURE9XTl9USU1FT1VUIiwiU0FGQVJJX1NUQVJUVVBfVElNRU9VVCIsIk1PQklMRV9TQUZBUklfQlVORExFX0lEIiwiQklPTUVUUklDUyIsInRvdWNoSWQiLCJmYWNlSWQiLCJ0b0Jpb21ldHJpY0RvbWFpbkNvbXBvbmVudCIsIm5hbWUiLCJFcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJfIiwia2V5cyIsInBraWxsIiwiYXBwTmFtZSIsImZvcmNlS2lsbCIsImFyZ3MiLCJwdXNoIiwiZXJyIiwiaXNVbmRlZmluZWQiLCJjb2RlIiwibG9nIiwiZXJyb3IiLCJtZXNzYWdlIiwia2lsbEFsbFNpbXVsYXRvcnMiLCJ0aW1lb3V0IiwiZGVidWciLCJ4Y29kZVZlcnNpb24iLCJtYWpvciIsImlnbiIsInBpZHMiLCJzdGRvdXQiLCJ0cmltIiwic3BsaXQiLCJlIiwiaXNFbXB0eSIsIndhcm4iLCJqb2luIiwiZm9yY2UiLCJyZW1haW5pbmdEZXZpY2VzIiwiYWxsU2ltc0FyZURvd24iLCJkZXZpY2VzIiwiU2ltY3RsIiwiZ2V0RGV2aWNlcyIsImZsYXR0ZW4iLCJ2YWx1ZXMiLCJldmVyeSIsInNpbSIsInN0YXRlIiwidG9Mb3dlckNhc2UiLCJkb25lIiwic2RrIiwidWRpZCIsIndhaXRNcyIsImludGVydmFsTXMiLCJsZW5ndGgiLCJkZXZpY2UiLCJlbmRBbGxTaW11bGF0b3JEYWVtb25zIiwic2VydmljZVBhdHRlcm4iLCJsYXVuY2hDdGxDb21tYW5kIiwic3RvcENtZCIsInJlbW92ZUNtZCIsImdldFNpbXVsYXRvckluZm8iLCJ0b1BhaXJzIiwibWFwIiwicGFpciIsInJlZHVjZSIsImEiLCJiIiwiY29uY2F0IiwiZmluZCIsInNpbUV4aXN0cyIsInNhZmVSaW1SYWYiLCJkZWxQYXRoIiwidHJ5TnVtIiwiZnMiLCJyaW1yYWYiLCJpbmRleE9mIiwiaW5zdGFsbFNTTENlcnQiLCJwZW1UZXh0Iiwid2hpY2giLCJlcnJvckFuZFRocm93IiwidGVtcEZpbGVOYW1lIiwicGF0aCIsInJlc29sdmUiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInBhdGhUb0tleWNoYWluIiwiU2ltdWxhdG9yIiwiZ2V0RGlyIiwid3JpdGVGaWxlIiwic3RhdCIsImNlcnRpZmljYXRlIiwiQ2VydGlmaWNhdGUiLCJhZGQiLCJ1bmxpbmsiLCJ1bmluc3RhbGxTU0xDZXJ0IiwiX19kaXJuYW1lIiwicmVtb3ZlIiwiaGFzU1NMQ2VydCIsImhhcyIsImV4ZWNTUUxpdGVRdWVyeSIsImRiIiwicXVlcnkiLCJxdWVyeVBhcmFtcyIsInJlcGxhY2UiLCJxdWVyeVRva2VucyIsImZvcm1hdHRlZFF1ZXJ5IiwicGFyYW0iLCJmb3JFYWNoIiwiaSIsInN0ZGVyciIsImdldERldmVsb3BlclJvb3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSw0QkFBNEIsR0FBRyxLQUFyQztBQUNBLE1BQU1DLHNCQUFzQixHQUFHLEtBQUssSUFBcEM7O0FBQ0EsTUFBTUMsdUJBQXVCLEdBQUcsd0JBQWhDOztBQUVBLE1BQU1DLFVBQVUsR0FBRztBQUNqQkMsRUFBQUEsT0FBTyxFQUFFLGFBRFE7QUFFakJDLEVBQUFBLE1BQU0sRUFBRTtBQUZTLENBQW5COztBQUtBLFNBQVNDLDBCQUFULENBQXFDQyxJQUFyQyxFQUEyQztBQUN6QyxNQUFJLENBQUNKLFVBQVUsQ0FBQ0ksSUFBRCxDQUFmLEVBQXVCO0FBQ3JCLFVBQU0sSUFBSUMsS0FBSixDQUFXLElBQUdELElBQUssMkNBQTBDRSxJQUFJLENBQUNDLFNBQUwsQ0FBZUMsZ0JBQUVDLElBQUYsQ0FBT1QsVUFBUCxDQUFmLENBQW1DLEVBQWhHLENBQU47QUFDRDs7QUFDRCxTQUFPQSxVQUFVLENBQUNJLElBQUQsQ0FBakI7QUFDRDs7QUFRRCxlQUFl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QUosQ0FBVyx3QkFBdUJpRixjQUFjLENBQUN0RSxJQUFmLENBQW9CLEVBQXBCLENBQXdCLFNBQVFpRSxFQUFHLEdBQXJFOztBQUNBLE1BQUk7QUFDRixXQUFPLENBQUMsTUFBTSx3QkFBSyxTQUFMLEVBQWdCLENBQUMsT0FBRCxFQUFVQSxFQUFWLEVBQWNLLGNBQWMsQ0FBQ3RFLElBQWYsQ0FBb0IsRUFBcEIsQ0FBZCxDQUFoQixDQUFQLEVBQWdFTixNQUF2RTtBQUNELEdBRkQsQ0FFRSxPQUFPYixHQUFQLEVBQVk7QUFDWixVQUFNLElBQUlWLEtBQUosQ0FBVyxnQ0FBK0JtRyxjQUFjLENBQUN0RSxJQUFmLENBQW9CLEVBQXBCLENBQXdCLFNBQVFpRSxFQUFHLEtBQW5FLEdBQ2IsbUJBQWtCcEYsR0FBRyxDQUFDNkYsTUFBTyxFQUQxQixDQUFOO0FBRUQ7QUFDRjs7QUFFRCxlQUFlQyxnQkFBZixHQUFtQztBQUNqQyxRQUFNO0FBQUNqRixJQUFBQTtBQUFELE1BQVcsTUFBTSx3QkFBSyxjQUFMLEVBQXFCLENBQUMsSUFBRCxDQUFyQixDQUF2QjtBQUNBLFNBQU9BLE1BQU0sQ0FBQ0MsSUFBUCxFQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBnZXRWZXJzaW9uIH0gZnJvbSAnYXBwaXVtLXhjb2RlJztcbmltcG9ydCBTaW1jdGwgZnJvbSAnbm9kZS1zaW1jdGwnO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgeyBDZXJ0aWZpY2F0ZSB9IGZyb20gJy4vY2VydGlmaWNhdGUnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgU2ltdWxhdG9yIGZyb20gJy4vc2ltdWxhdG9yLXhjb2RlLTYnO1xuaW1wb3J0IGZraWxsIGZyb20gJ2ZraWxsJztcblxuXG5jb25zdCBERUZBVUxUX1NJTV9TSFVURE9XTl9USU1FT1VUID0gMzAwMDA7XG5jb25zdCBTQUZBUklfU1RBUlRVUF9USU1FT1VUID0gMjUgKiAxMDAwO1xuY29uc3QgTU9CSUxFX1NBRkFSSV9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLm1vYmlsZXNhZmFyaSc7XG5cbmNvbnN0IEJJT01FVFJJQ1MgPSB7XG4gIHRvdWNoSWQ6ICdmaW5nZXJUb3VjaCcsXG4gIGZhY2VJZDogJ3BlYXJsJyxcbn07XG5cbmZ1bmN0aW9uIHRvQmlvbWV0cmljRG9tYWluQ29tcG9uZW50IChuYW1lKSB7XG4gIGlmICghQklPTUVUUklDU1tuYW1lXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7bmFtZX0nIGlzIG5vdCBhIHZhbGlkIGJpb21ldHJpYy4gVXNlIG9uZSBvZjogJHtKU09OLnN0cmluZ2lmeShfLmtleXMoQklPTUVUUklDUykpfWApO1xuICB9XG4gIHJldHVybiBCSU9NRVRSSUNTW25hbWVdO1xufVxuXG4vLyBwZ3JlcC9wa2lsbCBleGl0IGNvZGVzOlxuLy8gMCAgICAgICBPbmUgb3IgbW9yZSBwcm9jZXNzZXMgd2VyZSBtYXRjaGVkLlxuLy8gMSAgICAgICBObyBwcm9jZXNzZXMgd2VyZSBtYXRjaGVkLlxuLy8gMiAgICAgICBJbnZhbGlkIG9wdGlvbnMgd2VyZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS5cbi8vIDMgICAgICAgQW4gaW50ZXJuYWwgZXJyb3Igb2NjdXJyZWQuXG5cbmFzeW5jIGZ1bmN0aW9uIHBraWxsIChhcHBOYW1lLCBmb3JjZUtpbGwgPSBmYWxzZSkge1xuICBsZXQgYXJncyA9IGZvcmNlS2lsbCA/IFsnLTknXSA6IFtdO1xuICBhcmdzLnB1c2goJy14JywgYXBwTmFtZSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlYygncGtpbGwnLCBhcmdzKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKGVyci5jb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZm9yY2VmdWxseSB0ZXJtaW5hdGUgJHthcHBOYW1lfS4gcGtpbGwgZXJyb3IgY29kZTogJHtlcnIuY29kZX1gKTtcbiAgICB9XG4gICAgbG9nLmVycm9yKGBSZWNlaXZlZCB1bmV4cGVjdGVkIGVycm9yIHdoaWxlIHRyeWluZyB0byBraWxsICR7YXBwTmFtZX06ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGtpbGxBbGxTaW11bGF0b3JzICh0aW1lb3V0ID0gREVGQVVMVF9TSU1fU0hVVERPV05fVElNRU9VVCkge1xuICBsb2cuZGVidWcoJ0tpbGxpbmcgYWxsIGlPUyBTaW11bGF0b3JzJyk7XG4gIGNvbnN0IHhjb2RlVmVyc2lvbiA9IGF3YWl0IGdldFZlcnNpb24odHJ1ZSk7XG4gIGNvbnN0IGFwcE5hbWUgPSB4Y29kZVZlcnNpb24ubWFqb3IgPj0gNyA/ICdTaW11bGF0b3InIDogJ2lPUyBTaW11bGF0b3InO1xuXG4gIC8vIGxhdGVyIHZlcnNpb25zIGFyZSBzbG93ZXIgdG8gY2xvc2VcbiAgdGltZW91dCA9IHRpbWVvdXQgKiAoeGNvZGVWZXJzaW9uLm1ham9yID49IDggPyAyIDogMSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjKCd4Y3J1bicsIFsnc2ltY3RsJywgJ3NodXRkb3duJywgeGNvZGVWZXJzaW9uLm1ham9yID4gOCA/ICdhbGwnIDogJ2Jvb3RlZCddLCB7dGltZW91dH0pO1xuICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgY29uc3QgcGlkcyA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygncGdyZXAnLCBbJy1mJywgYCR7YXBwTmFtZX0uYXBwL0NvbnRlbnRzL01hY09TL2BdKTtcbiAgICBpZiAoc3Rkb3V0LnRyaW0oKSkge1xuICAgICAgcGlkcy5wdXNoKC4uLihzdGRvdXQudHJpbSgpLnNwbGl0KC9cXHMrLykpKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZS5jb2RlID09PSAxKSB7XG4gICAgICBsb2cuZGVidWcoYCR7YXBwTmFtZX0gaXMgbm90IHJ1bm5pbmcuIENvbnRpbnVpbmcuLi5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eShwaWRzKSkge1xuICAgICAgbG9nLndhcm4oYHBncmVwIGVycm9yICR7ZS5jb2RlfSB3aGlsZSBkZXRlY3Rpbmcgd2hldGhlciAke2FwcE5hbWV9IGlzIHJ1bm5pbmcuIFRyeWluZyB0byBraWxsIGFueXdheS5gKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFfLmlzRW1wdHkocGlkcykpIHtcbiAgICBsb2cuZGVidWcoYFVzaW5nIGZraWxsIHRvIGtpbGwgcHJvY2Vzc2VzOiAke3BpZHMuam9pbignLCAnKX1gKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZmtpbGwocGlkcywge2ZvcmNlOiB0cnVlfSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG5cbiAgbG9nLmRlYnVnKGBVc2luZyBwa2lsbCB0byBraWxsIGFwcGxpY2F0aW9uOiAke2FwcE5hbWV9YCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgcGtpbGwoYXBwTmFtZSwgdHJ1ZSk7XG4gIH0gY2F0Y2ggKGlnbikge31cblxuICAvLyB3YWl0IGZvciBhbGwgdGhlIGRldmljZXMgdG8gYmUgc2h1dGRvd24gYmVmb3JlIENvbnRpbnVpbmdcbiAgLy8gYnV0IG9ubHkgcHJpbnQgb3V0IHRoZSBmYWlsZWQgb25lcyB3aGVuIHRoZXkgYXJlIGFjdHVhbGx5IGZ1bGx5IGZhaWxlZFxuICBsZXQgcmVtYWluaW5nRGV2aWNlcyA9IFtdO1xuICBhc3luYyBmdW5jdGlvbiBhbGxTaW1zQXJlRG93biAoKSB7XG4gICAgcmVtYWluaW5nRGV2aWNlcyA9IFtdO1xuICAgIGxldCBkZXZpY2VzID0gYXdhaXQgbmV3IFNpbWN0bCgpLmdldERldmljZXMoKTtcbiAgICBkZXZpY2VzID0gXy5mbGF0dGVuKF8udmFsdWVzKGRldmljZXMpKTtcbiAgICByZXR1cm4gXy5ldmVyeShkZXZpY2VzLCAoc2ltKSA9PiB7XG4gICAgICBsZXQgc3RhdGUgPSBzaW0uc3RhdGUudG9Mb3dlckNhc2UoKTtcbiAgICAgIGxldCBkb25lID0gc3RhdGUgPT09ICdzaHV0ZG93bicgfHxcbiAgICAgICAgICAgICAgICAgc3RhdGUgPT09ICd1bmF2YWlsYWJsZScgfHxcbiAgICAgICAgICAgICAgICAgc3RhdGUgPT09ICdkaXNjb25uZWN0ZWQnO1xuICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgIHJlbWFpbmluZ0RldmljZXMucHVzaChgJHtzaW0ubmFtZX0gKCR7c2ltLnNka30sIHVkaWQ6ICR7c2ltLnVkaWR9KSBpcyBzdGlsbCBpbiBzdGF0ZSAnJHtzdGF0ZX0nYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZG9uZTtcbiAgICB9KTtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYWxsU2ltc0FyZURvd24sIHtcbiAgICAgIHdhaXRNczogdGltZW91dCxcbiAgICAgIGludGVydmFsTXM6IDIwMFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAocmVtYWluaW5nRGV2aWNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBsb2cud2FybihgVGhlIGZvbGxvd2luZyBkZXZpY2VzIGFyZSBzdGlsbCBub3QgaW4gdGhlIGNvcnJlY3Qgc3RhdGUgYWZ0ZXIgJHt0aW1lb3V0fSBtczpgKTtcbiAgICAgIGZvciAobGV0IGRldmljZSBvZiByZW1haW5pbmdEZXZpY2VzKSB7XG4gICAgICAgIGxvZy53YXJuKGAgICAgJHtkZXZpY2V9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBlbmRBbGxTaW11bGF0b3JEYWVtb25zICgpIHtcbiAgbG9nLmRlYnVnKCdFbmRpbmcgYWxsIHNpbXVsYXRvciBkYWVtb25zJyk7XG4gIGZvciAobGV0IHNlcnZpY2VQYXR0ZXJuIG9mIFsnY29tLmFwcGxlLmlwaG9uZXNpbXVsYXRvcicsICdjb20uYXBwbGUuQ29yZVNpbXVsYXRvciddKSB7XG4gICAgbG9nLmRlYnVnKGBLaWxsaW5nIGFueSBvdGhlciAke3NlcnZpY2VQYXR0ZXJufSBkYWVtb25zYCk7XG4gICAgbGV0IGxhdW5jaEN0bENvbW1hbmQgPSBgbGF1bmNoY3RsIGxpc3QgfCBncmVwICR7c2VydmljZVBhdHRlcm59IHwgY3V0IC1mIDMgfCB4YXJncyAtbiAxIGxhdW5jaGN0bGA7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzdG9wQ21kID0gYCR7bGF1bmNoQ3RsQ29tbWFuZH0gc3RvcGA7XG4gICAgICBhd2FpdCBleGVjKCdiYXNoJywgWyctYycsIHN0b3BDbWRdKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBDb3VsZCBub3Qgc3RvcCAke3NlcnZpY2VQYXR0ZXJufSBkYWVtb25zLCBjYXJyeWluZyBvbiBhbnl3YXkhYCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBsZXQgcmVtb3ZlQ21kID0gYCR7bGF1bmNoQ3RsQ29tbWFuZH0gcmVtb3ZlYDtcbiAgICAgIGF3YWl0IGV4ZWMoJ2Jhc2gnLCBbJy1jJywgcmVtb3ZlQ21kXSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihgQ291bGQgbm90IHJlbW92ZSAke3NlcnZpY2VQYXR0ZXJufSBkYWVtb25zLCBjYXJyeWluZyBvbiBhbnl3YXkhYCk7XG4gICAgfVxuICB9XG4gIC8vIHdhaXRpbmcgdW50aWwgdGhlIHNpbXVsYXRvciBzZXJ2aWNlIGhhcyBkaWVkLlxuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygnYmFzaCcsIFsnLWMnLFxuICAgICAgICBgcHMgLWUgIHwgZ3JlcCBsYXVuY2hkX3NpbSB8IGdyZXAgLXYgYmFzaCB8IGdyZXAgLXYgZ3JlcCB8IGF3ayB7J3ByaW50JDEnfWBdKTtcbiAgICAgIHJldHVybiBzdGRvdXQudHJpbSgpLmxlbmd0aCA9PT0gMDtcbiAgICB9LCB7d2FpdE1zOiA1MDAwLCBpbnRlcnZhbE1zOiA1MDB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oYENvdWxkIG5vdCBlbmQgYWxsIHNpbXVsYXRvciBkYWVtb25zLCBjYXJyeWluZyBvbiFgKTtcbiAgfVxuICBsb2cuZGVidWcoJ0ZpbmlzaGluZyBlbmRpbmcgYWxsIHNpbXVsYXRvciBkYWVtb25zJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNpbXVsYXRvckluZm8gKHVkaWQpIHtcbiAgLy8gc2VlIHRoZSBSRUFETUUgZm9yIGdpdGh1Yi5jb20vYXBwaXVtL25vZGUtc2ltY3RsIGZvciBleGFtcGxlIG91dHB1dCBvZiBnZXREZXZpY2VzKClcbiAgbGV0IGRldmljZXMgPSBhd2FpdCBuZXcgU2ltY3RsKCkuZ2V0RGV2aWNlcygpO1xuXG4gIGRldmljZXMgPSBfLnRvUGFpcnMoZGV2aWNlcylcbiAgICAubWFwKChwYWlyKSA9PiBwYWlyWzFdKVxuICAgIC5yZWR1Y2UoKGEsIGIpID0+IGEuY29uY2F0KGIpLCBbXSk7XG4gIHJldHVybiBfLmZpbmQoZGV2aWNlcywgKHNpbSkgPT4gc2ltLnVkaWQgPT09IHVkaWQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaW1FeGlzdHMgKHVkaWQpIHtcbiAgcmV0dXJuICEhKGF3YWl0IGdldFNpbXVsYXRvckluZm8odWRpZCkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzYWZlUmltUmFmIChkZWxQYXRoLCB0cnlOdW0gPSAwKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMucmltcmFmKGRlbFBhdGgpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHJ5TnVtIDwgMjApIHtcbiAgICAgIGlmIChlcnIubWVzc2FnZS5pbmRleE9mKCdFTk9URU1QVFknKSAhPT0gLTEpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBQYXRoICcke2RlbFBhdGh9JyB3YXMgbm90IGVtcHR5IGR1cmluZyBkZWxldGU7IHJldHJ5aW5nYCk7XG4gICAgICAgIHJldHVybiBhd2FpdCBzYWZlUmltUmFmKGRlbFBhdGgsIHRyeU51bSArIDEpO1xuICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZS5pbmRleE9mKCdFTk9FTlQnKSAhPT0gLTEpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBQYXRoICcke2RlbFBhdGh9JyBkaWQgbm90IGV4aXN0IHdoZW4gd2UgdHJpZWQgdG8gZGVsZXRlLCBpZ25vcmluZ2ApO1xuICAgICAgICByZXR1cm4gYXdhaXQgc2FmZVJpbVJhZihkZWxQYXRoLCB0cnlOdW0gKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBJbnN0YWxsIGFuIFNTTCBjZXJ0aWZpY2F0ZSB0byBhIGRldmljZSB3aXRoIGdpdmVuIHVkaWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBwZW1UZXh0IFNTTCBwZW0gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHVkaWQgSWRlbnRpZmllciBvZiB0aGUgU2ltdWxhdG9yXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluc3RhbGxTU0xDZXJ0IChwZW1UZXh0LCB1ZGlkKSB7XG4gIC8vIENoZWNrIHRoYXQgb3BlbnNzbCBpcyBpbnN0YWxsZWQgb24gdGhlIHBhdGhcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy53aGljaCgnb3BlbnNzbCcpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmRlYnVnKGBjdXN0b21TU0xDZXJ0IHJlcXVpcmVzIG9wZW5zc2wgdG8gYmUgYXZhaWxhYmxlIG9uIHBhdGhgKTtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ29tbWFuZCAnb3BlbnNzbCcgbm90IGZvdW5kYCk7XG4gIH1cblxuICAvLyBDaGVjayB0aGF0IHNxbGl0ZTMgaXMgaW5zdGFsbGVkIG9uIHRoZSBwYXRoXG4gIHRyeSB7XG4gICAgYXdhaXQgZnMud2hpY2goJ3NxbGl0ZTMnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1ZyhgY3VzdG9tU1NMQ2VydCByZXF1aXJlcyBzcWxpdGUzIHRvIGJlIGF2YWlsYWJsZSBvbiBwYXRoYCk7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYENvbW1hbmQgJ3NxbGl0ZTMnIG5vdCBmb3VuZGApO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUgdG8gc3RvcmUgUEVNIHRleHRcbiAgLy8gKGEgdGVtcCBmaWxlIGlzIG5lY2Vzc2FyeSB0byBydW4gYG9wZW5zc2xgIHNoZWxsIGNvbW1hbmRzLCBjYW4ndCBiZSBkb25lIGluIG1lbW9yeSlcbiAgbGV0IHRlbXBGaWxlTmFtZSA9IHBhdGgucmVzb2x2ZShhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKSwgJ3RlbXAtc3NsLWNlcnQucGVtJyk7XG4gIGxldCBwYXRoVG9LZXljaGFpbiA9IG5ldyBTaW11bGF0b3IodWRpZCkuZ2V0RGlyKCk7XG4gIGF3YWl0IGZzLndyaXRlRmlsZSh0ZW1wRmlsZU5hbWUsIHBlbVRleHQpO1xuICB0cnkge1xuICAgIGF3YWl0IGZzLnN0YXQocGF0aFRvS2V5Y2hhaW4pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmRlYnVnKGBDb3VsZCBub3QgaW5zdGFsbCBTU0wgY2VydGlmaWNhdGUuIE5vIHNpbXVsYXRvciB3aXRoIHVkaWQgJyR7dWRpZH0nYCk7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coZSk7XG4gIH1cblxuICAvLyBEbyB0aGUgY2VydGlmaWNhdGUgaW5zdGFsbGF0aW9uXG4gIGxldCBjZXJ0aWZpY2F0ZSA9IG5ldyBDZXJ0aWZpY2F0ZSh0ZW1wRmlsZU5hbWUpO1xuICBsb2cuZGVidWcoYEluc3RhbGxpbmcgY2VydGlmaWNhdGUgdG8gJHtwYXRoVG9LZXljaGFpbn1gKTtcbiAgYXdhaXQgY2VydGlmaWNhdGUuYWRkKHBhdGhUb0tleWNoYWluKTtcblxuICAvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlXG4gIGF3YWl0IGZzLnVubGluayh0ZW1wRmlsZU5hbWUpO1xuXG4gIHJldHVybiBjZXJ0aWZpY2F0ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pbnN0YWxsU1NMQ2VydCAocGVtVGV4dCwgdWRpZCkge1xuICB0cnkge1xuICAgIGxldCB0ZW1wRmlsZU5hbWUgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAndGVtcC1zc2wtY2VydC5wZW0nKTtcbiAgICBsZXQgcGF0aFRvS2V5Y2hhaW4gPSBwYXRoLnJlc29sdmUobmV3IFNpbXVsYXRvcih1ZGlkKS5nZXREaXIoKSk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHRlbXBGaWxlTmFtZSwgcGVtVGV4dCk7XG4gICAgbGV0IGNlcnRpZmljYXRlID0gbmV3IENlcnRpZmljYXRlKHRlbXBGaWxlTmFtZSk7XG4gICAgYXdhaXQgY2VydGlmaWNhdGUucmVtb3ZlKHBhdGhUb0tleWNoYWluKTtcbiAgICBhd2FpdCBmcy51bmxpbmsodGVtcEZpbGVOYW1lKTtcbiAgICByZXR1cm4gY2VydGlmaWNhdGU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZGVidWcoYENvdWxkIG5vdCB1bmluc3RhbGwgU1NMIGNlcnRpZmljYXRlLiBObyBzaW11bGF0b3Igd2l0aCB1ZGlkICcke3VkaWR9J2ApO1xuICAgIGxvZy5lcnJvckFuZFRocm93KGUpO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIFNpbXVsYXRvciBhbHJlYWR5IGhhcyB0aGlzIFNTTCBjZXJ0aWZpY2F0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBlbVRleHQgUEVNIHRleHQgb2YgU1NMIGNlcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB1ZGlkIElkZW50aWZpZXIgb2YgdGhlIFNpbXVsYXRvclxuICovXG5hc3luYyBmdW5jdGlvbiBoYXNTU0xDZXJ0IChwZW1UZXh0LCB1ZGlkKSB7XG4gIGNvbnN0IHRlbXBGaWxlTmFtZSA9IHBhdGgucmVzb2x2ZShhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKSwgJ3RlbXAtc3NsLWNlcnQucGVtJyk7XG4gIGNvbnN0IHBhdGhUb0tleWNoYWluID0gbmV3IFNpbXVsYXRvcih1ZGlkKS5nZXREaXIoKTtcbiAgYXdhaXQgZnMud3JpdGVGaWxlKHRlbXBGaWxlTmFtZSwgcGVtVGV4dCk7XG4gIGNvbnN0IGNlcnRpZmljYXRlID0gbmV3IENlcnRpZmljYXRlKHRlbXBGaWxlTmFtZSk7XG4gIHJldHVybiBjZXJ0aWZpY2F0ZS5oYXMocGF0aFRvS2V5Y2hhaW4pO1xufVxuXG4vKipcbiAqIFJ1bnMgYSBjb21tYW5kIGxpbmUgc3FsaXRlMyBxdWVyeVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYiAtIEZ1bGwgcGF0aCB0byBzcWxpdGUgZGF0YWJhc2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeSAtIFRoZSBhY3R1YWwgcXVlcnkgc3RyaW5nXG4gKiBAcGFyYW0gey4uLnN0cmluZ30gcXVlcnlQYXJhbXMgLSBUaGUgbGlzdCBvZiBxdWVyeSBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBzcWxpdGUgY29tbWFuZCBzdGRvdXRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY1NRTGl0ZVF1ZXJ5IChkYiwgcXVlcnksIC4uLnF1ZXJ5UGFyYW1zKSB7XG4gIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZSgvXFxuKy9nLCAnICcpO1xuICBsZXQgcXVlcnlUb2tlbnMgPSBxdWVyeS5zcGxpdCgnPycpO1xuICBsZXQgZm9ybWF0dGVkUXVlcnkgPSBbXTtcbiAgcXVlcnlQYXJhbXNcbiAgICAubWFwKChwYXJhbSkgPT4gYCR7cGFyYW19YClcbiAgICAuZm9yRWFjaCgocGFyYW0sIGkpID0+IHtcbiAgICAgIGZvcm1hdHRlZFF1ZXJ5LnB1c2gocXVlcnlUb2tlbnNbaV0pO1xuICAgICAgZm9ybWF0dGVkUXVlcnkucHVzaChwYXJhbS5yZXBsYWNlKC8nL2csIFwiJydcIikpO1xuICAgIH0pO1xuICBmb3JtYXR0ZWRRdWVyeS5wdXNoKHF1ZXJ5VG9rZW5zW3F1ZXJ5VG9rZW5zLmxlbmd0aCAtIDFdKTtcblxuICBsb2cuZGVidWcoYEV4ZWN1dGluZyBTUUwgcXVlcnkgXCIke2Zvcm1hdHRlZFF1ZXJ5LmpvaW4oJycpfVwiIG9uICcke2RifSdgKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IGV4ZWMoJ3NxbGl0ZTMnLCBbJy1saW5lJywgZGIsIGZvcm1hdHRlZFF1ZXJ5LmpvaW4oJycpXSkpLnN0ZG91dDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZXhlY3V0ZSBTUUxpdGUgcXVlcnkgXCIke2Zvcm1hdHRlZFF1ZXJ5LmpvaW4oJycpfVwiIHRvICcke2RifScuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyci5zdGRlcnJ9YCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0RGV2ZWxvcGVyUm9vdCAoKSB7XG4gIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygneGNvZGUtc2VsZWN0JywgWyctcCddKTtcbiAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG59XG5cbmV4cG9ydCB7XG4gIGtpbGxBbGxTaW11bGF0b3JzLFxuICBlbmRBbGxTaW11bGF0b3JEYWVtb25zLFxuICBzYWZlUmltUmFmLFxuICBzaW1FeGlzdHMsXG4gIGdldFNpbXVsYXRvckluZm8sXG4gIGluc3RhbGxTU0xDZXJ0LFxuICB1bmluc3RhbGxTU0xDZXJ0LFxuICBoYXNTU0xDZXJ0LFxuICBleGVjU1FMaXRlUXVlcnksXG4gIHRvQmlvbWV0cmljRG9tYWluQ29tcG9uZW50LFxuICBnZXREZXZlbG9wZXJSb290LFxuICBTQUZBUklfU1RBUlRVUF9USU1FT1VULFxuICBNT0JJTEVfU0FGQVJJX0JVTkRMRV9JRCxcbn07XG4iXSwiZmlsZSI6ImxpYi91dGlscy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJERUZBVUxUX1NJTV9TSFVURE9XTl9USU1FT1VUIiwiU0FGQVJJX1NUQVJUVVBfVElNRU9VVCIsIk1PQklMRV9TQUZBUklfQlVORExFX0lEIiwiQVBQX0FDVElWQVRJT05fU0NSSVBUIiwicGlkIiwiQklPTUVUUklDUyIsInRvdWNoSWQiLCJmYWNlSWQiLCJ0b0Jpb21ldHJpY0RvbWFpbkNvbXBvbmVudCIsIm5hbWUiLCJFcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJfIiwia2V5cyIsInBraWxsIiwiYXBwTmFtZSIsImZvcmNlS2lsbCIsImFyZ3MiLCJwdXNoIiwiZXJyIiwiaXNVbmRlZmluZWQiLCJjb2RlIiwibG9nIiwiZXJyb3IiLCJtZXNzYWdlIiwia2lsbEFsbFNpbXVsYXRvcnMiLCJ0aW1lb3V0IiwiZGVidWciLCJ4Y29kZVZlcnNpb24iLCJtYWpvciIsImlnbiIsInBpZHMiLCJzdGRvdXQiLCJ0cmltIiwic3BsaXQiLCJlIiwiaXNFbXB0eSIsIndhcm4iLCJqb2luIiwiZm9yY2UiLCJyZW1haW5pbmdEZXZpY2VzIiwiYWxsU2ltc0FyZURvd24iLCJkZXZpY2VzIiwiU2ltY3RsIiwiZ2V0RGV2aWNlcyIsImZsYXR0ZW4iLCJ2YWx1ZXMiLCJldmVyeSIsInNpbSIsInN0YXRlIiwidG9Mb3dlckNhc2UiLCJkb25lIiwic2RrIiwidWRpZCIsIndhaXRNcyIsImludGVydmFsTXMiLCJsZW5ndGgiLCJkZXZpY2UiLCJlbmRBbGxTaW11bGF0b3JEYWVtb25zIiwic2VydmljZVBhdHRlcm4iLCJsYXVuY2hDdGxDb21tYW5kIiwic3RvcENtZCIsInJlbW92ZUNtZCIsImdldFNpbXVsYXRvckluZm8iLCJ0b1BhaXJzIiwibWFwIiwicGFpciIsInJlZHVjZSIsImEiLCJiIiwiY29uY2F0IiwiZmluZCIsInNpbUV4aXN0cyIsInNhZmVSaW1SYWYiLCJkZWxQYXRoIiwidHJ5TnVtIiwiZnMiLCJyaW1yYWYiLCJpbmRleE9mIiwiaW5zdGFsbFNTTENlcnQiLCJwZW1UZXh0Iiwid2hpY2giLCJlcnJvckFuZFRocm93IiwidGVtcEZpbGVOYW1lIiwicGF0aCIsInJlc29sdmUiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInBhdGhUb0tleWNoYWluIiwiU2ltdWxhdG9yIiwiZ2V0RGlyIiwid3JpdGVGaWxlIiwic3RhdCIsImNlcnRpZmljYXRlIiwiQ2VydGlmaWNhdGUiLCJhZGQiLCJ1bmxpbmsiLCJ1bmluc3RhbGxTU0xDZXJ0IiwiX19kaXJuYW1lIiwicmVtb3ZlIiwiaGFzU1NMQ2VydCIsImhhcyIsImV4ZWNTUUxpdGVRdWVyeSIsImRiIiwicXVlcnkiLCJxdWVyeVBhcmFtcyIsInJlcGxhY2UiLCJxdWVyeVRva2VucyIsImZvcm1hdHRlZFF1ZXJ5IiwicGFyYW0iLCJmb3JFYWNoIiwiaSIsInN0ZGVyciIsImdldERldmVsb3BlclJvb3QiLCJhY3RpdmF0ZUFwcCIsInRtcFNjcmlwdCIsInByZWZpeCIsInV0aWwiLCJ1dWlkVjQiLCJzdWJzdHJpbmciLCJzdWZmaXgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsNEJBQTRCLEdBQUcsS0FBckM7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxLQUFLLElBQXBDOztBQUNBLE1BQU1DLHVCQUF1QixHQUFHLHdCQUFoQzs7O0FBQ0EsTUFBTUMscUJBQXFCLEdBQUlDLEdBQUQsSUFBVTs7Ozs7c0VBSzhCQSxHQUFJOztxQ0FFckNBLEdBQUk7O3FDQUVKQSxHQUFJO0NBVHpDOztBQWFBLE1BQU1DLFVBQVUsR0FBRztBQUNqQkMsRUFBQUEsT0FBTyxFQUFFLGFBRFE7QUFFakJDLEVBQUFBLE1BQU0sRUFBRTtBQUZTLENBQW5COztBQUtBLFNBQVNDLDBCQUFULENBQXFDQyxJQUFyQyxFQUEyQztBQUN6QyxNQUFJLENBQUNKLFVBQVUs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QUFGMkIsR0FBYixDQUF4QjtBQUlBLFFBQU01QyxrQkFBR2UsU0FBSCxDQUFhd0IsU0FBYixFQUF3QmpILHFCQUFxQixDQUFDQyxHQUFELENBQTdDLEVBQW9ELE1BQXBELENBQU47O0FBQ0EsTUFBSTtBQUNGLFVBQU0sd0JBQUssaUJBQUwsRUFBd0IsQ0FBQ2dILFNBQUQsQ0FBeEIsQ0FBTjtBQUNELEdBRkQsU0FFVTtBQUNSLFVBQU12QyxrQkFBR0MsTUFBSCxDQUFVc0MsU0FBVixDQUFOO0FBQ0Q7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IGdldFZlcnNpb24gfSBmcm9tICdhcHBpdW0teGNvZGUnO1xuaW1wb3J0IFNpbWN0bCBmcm9tICdub2RlLXNpbWN0bCc7XG5pbXBvcnQgeyBmcywgdGVtcERpciwgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCB7IENlcnRpZmljYXRlIH0gZnJvbSAnLi9jZXJ0aWZpY2F0ZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBTaW11bGF0b3IgZnJvbSAnLi9zaW11bGF0b3IteGNvZGUtNic7XG5pbXBvcnQgZmtpbGwgZnJvbSAnZmtpbGwnO1xuXG5cbmNvbnN0IERFRkFVTFRfU0lNX1NIVVRET1dOX1RJTUVPVVQgPSAzMDAwMDtcbmNvbnN0IFNBRkFSSV9TVEFSVFVQX1RJTUVPVVQgPSAyNSAqIDEwMDA7XG5jb25zdCBNT0JJTEVfU0FGQVJJX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUubW9iaWxlc2FmYXJpJztcbmNvbnN0IEFQUF9BQ1RJVkFUSU9OX1NDUklQVCA9IChwaWQpID0+IGAjIS91c3IvYmluL3B5dGhvblxuXG5mcm9tIEFwcEtpdCBpbXBvcnQgTlNBcHBsaWNhdGlvbkFjdGl2YXRlSWdub3JpbmdPdGhlckFwcHMsIE5TQXBwbGljYXRpb25BY3RpdmF0ZUFsbFdpbmRvd3NcbmZyb20gQ29jb2EgaW1wb3J0IE5TUnVubmluZ0FwcGxpY2F0aW9uXG5cbmFwcCA9IE5TUnVubmluZ0FwcGxpY2F0aW9uLnJ1bm5pbmdBcHBsaWNhdGlvbldpdGhQcm9jZXNzSWRlbnRpZmllcl8oJHtwaWR9KVxuaWYgbm90IGFwcDpcbiAgICByYWlzZSBWYWx1ZUVycm9yKCdBcHAgd2l0aCBQSUQgJHtwaWR9IGlzIG5vdCBydW5uaW5nJylcbmlmIG5vdCBhcHAuYWN0aXZhdGVXaXRoT3B0aW9uc18oTlNBcHBsaWNhdGlvbkFjdGl2YXRlQWxsV2luZG93cyB8IE5TQXBwbGljYXRpb25BY3RpdmF0ZUlnbm9yaW5nT3RoZXJBcHBzKTpcbiAgICByYWlzZSBWYWx1ZUVycm9yKCdBcHAgd2l0aCBQSUQgJHtwaWR9IGNhbm5vdCBiZSBhY3RpdmF0ZWQnKVxuYDtcblxuXG5jb25zdCBCSU9NRVRSSUNTID0ge1xuICB0b3VjaElkOiAnZmluZ2VyVG91Y2gnLFxuICBmYWNlSWQ6ICdwZWFybCcsXG59O1xuXG5mdW5jdGlvbiB0b0Jpb21ldHJpY0RvbWFpbkNvbXBvbmVudCAobmFtZSkge1xuICBpZiAoIUJJT01FVFJJQ1NbbmFtZV0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke25hbWV9JyBpcyBub3QgYSB2YWxpZCBiaW9tZXRyaWMuIFVzZSBvbmUgb2Y6ICR7SlNPTi5zdHJpbmdpZnkoXy5rZXlzKEJJT01FVFJJQ1MpKX1gKTtcbiAgfVxuICByZXR1cm4gQklPTUVUUklDU1tuYW1lXTtcbn1cblxuLy8gcGdyZXAvcGtpbGwgZXhpdCBjb2Rlczpcbi8vIDAgICAgICAgT25lIG9yIG1vcmUgcHJvY2Vzc2VzIHdlcmUgbWF0Y2hlZC5cbi8vIDEgICAgICAgTm8gcHJvY2Vzc2VzIHdlcmUgbWF0Y2hlZC5cbi8vIDIgICAgICAgSW52YWxpZCBvcHRpb25zIHdlcmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuXG4vLyAzICAgICAgIEFuIGludGVybmFsIGVycm9yIG9jY3VycmVkLlxuXG5hc3luYyBmdW5jdGlvbiBwa2lsbCAoYXBwTmFtZSwgZm9yY2VLaWxsID0gZmFsc2UpIHtcbiAgbGV0IGFyZ3MgPSBmb3JjZUtpbGwgPyBbJy05J10gOiBbXTtcbiAgYXJncy5wdXNoKCcteCcsIGFwcE5hbWUpO1xuICB0cnkge1xuICAgIGF3YWl0IGV4ZWMoJ3BraWxsJywgYXJncyk7XG4gICAgcmV0dXJuIDA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICghXy5pc1VuZGVmaW5lZChlcnIuY29kZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZvcmNlZnVsbHkgdGVybWluYXRlICR7YXBwTmFtZX0uIHBraWxsIGVycm9yIGNvZGU6ICR7ZXJyLmNvZGV9YCk7XG4gICAgfVxuICAgIGxvZy5lcnJvcihgUmVjZWl2ZWQgdW5leHBlY3RlZCBlcnJvciB3aGlsZSB0cnlpbmcgdG8ga2lsbCAke2FwcE5hbWV9OiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBraWxsQWxsU2ltdWxhdG9ycyAodGltZW91dCA9IERFRkFVTFRfU0lNX1NIVVRET1dOX1RJTUVPVVQpIHtcbiAgbG9nLmRlYnVnKCdLaWxsaW5nIGFsbCBpT1MgU2ltdWxhdG9ycycpO1xuICBjb25zdCB4Y29kZVZlcnNpb24gPSBhd2FpdCBnZXRWZXJzaW9uKHRydWUpO1xuICBjb25zdCBhcHBOYW1lID0geGNvZGVWZXJzaW9uLm1ham9yID49IDcgPyAnU2ltdWxhdG9yJyA6ICdpT1MgU2ltdWxhdG9yJztcblxuICAvLyBsYXRlciB2ZXJzaW9ucyBhcmUgc2xvd2VyIHRvIGNsb3NlXG4gIHRpbWVvdXQgPSB0aW1lb3V0ICogKHhjb2RlVmVyc2lvbi5tYWpvciA+PSA4ID8gMiA6IDEpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlYygneGNydW4nLCBbJ3NpbWN0bCcsICdzaHV0ZG93bicsIHhjb2RlVmVyc2lvbi5tYWpvciA+IDggPyAnYWxsJyA6ICdib290ZWQnXSwge3RpbWVvdXR9KTtcbiAgfSBjYXRjaCAoaWduKSB7fVxuXG4gIGNvbnN0IHBpZHMgPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ3BncmVwJywgWyctZicsIGAke2FwcE5hbWV9LmFwcC9Db250ZW50cy9NYWNPUy9gXSk7XG4gICAgaWYgKHN0ZG91dC50cmltKCkpIHtcbiAgICAgIHBpZHMucHVzaCguLi4oc3Rkb3V0LnRyaW0oKS5zcGxpdCgvXFxzKy8pKSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUuY29kZSA9PT0gMSkge1xuICAgICAgbG9nLmRlYnVnKGAke2FwcE5hbWV9IGlzIG5vdCBydW5uaW5nLiBDb250aW51aW5nLi4uYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChfLmlzRW1wdHkocGlkcykpIHtcbiAgICAgIGxvZy53YXJuKGBwZ3JlcCBlcnJvciAke2UuY29kZX0gd2hpbGUgZGV0ZWN0aW5nIHdoZXRoZXIgJHthcHBOYW1lfSBpcyBydW5uaW5nLiBUcnlpbmcgdG8ga2lsbCBhbnl3YXkuYCk7XG4gICAgfVxuICB9XG4gIGlmICghXy5pc0VtcHR5KHBpZHMpKSB7XG4gICAgbG9nLmRlYnVnKGBVc2luZyBma2lsbCB0byBraWxsIHByb2Nlc3NlczogJHtwaWRzLmpvaW4oJywgJyl9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZraWxsKHBpZHMsIHtmb3JjZTogdHJ1ZX0pO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuXG4gIGxvZy5kZWJ1ZyhgVXNpbmcgcGtpbGwgdG8ga2lsbCBhcHBsaWNhdGlvbjogJHthcHBOYW1lfWApO1xuICB0cnkge1xuICAgIGF3YWl0IHBraWxsKGFwcE5hbWUsIHRydWUpO1xuICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgLy8gd2FpdCBmb3IgYWxsIHRoZSBkZXZpY2VzIHRvIGJlIHNodXRkb3duIGJlZm9yZSBDb250aW51aW5nXG4gIC8vIGJ1dCBvbmx5IHByaW50IG91dCB0aGUgZmFpbGVkIG9uZXMgd2hlbiB0aGV5IGFyZSBhY3R1YWxseSBmdWxseSBmYWlsZWRcbiAgbGV0IHJlbWFpbmluZ0RldmljZXMgPSBbXTtcbiAgYXN5bmMgZnVuY3Rpb24gYWxsU2ltc0FyZURvd24gKCkge1xuICAgIHJlbWFpbmluZ0RldmljZXMgPSBbXTtcbiAgICBsZXQgZGV2aWNlcyA9IGF3YWl0IG5ldyBTaW1jdGwoKS5nZXREZXZpY2VzKCk7XG4gICAgZGV2aWNlcyA9IF8uZmxhdHRlbihfLnZhbHVlcyhkZXZpY2VzKSk7XG4gICAgcmV0dXJuIF8uZXZlcnkoZGV2aWNlcywgKHNpbSkgPT4ge1xuICAgICAgbGV0IHN0YXRlID0gc2ltLnN0YXRlLnRvTG93ZXJDYXNlKCk7XG4gICAgICBsZXQgZG9uZSA9IHN0YXRlID09PSAnc2h1dGRvd24nIHx8XG4gICAgICAgICAgICAgICAgIHN0YXRlID09PSAndW5hdmFpbGFibGUnIHx8XG4gICAgICAgICAgICAgICAgIHN0YXRlID09PSAnZGlzY29ubmVjdGVkJztcbiAgICAgIGlmICghZG9uZSkge1xuICAgICAgICByZW1haW5pbmdEZXZpY2VzLnB1c2goYCR7c2ltLm5hbWV9ICgke3NpbS5zZGt9LCB1ZGlkOiAke3NpbS51ZGlkfSkgaXMgc3RpbGwgaW4gc3RhdGUgJyR7c3RhdGV9J2ApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRvbmU7XG4gICAgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFsbFNpbXNBcmVEb3duLCB7XG4gICAgICB3YWl0TXM6IHRpbWVvdXQsXG4gICAgICBpbnRlcnZhbE1zOiAyMDBcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHJlbWFpbmluZ0RldmljZXMubGVuZ3RoID4gMCkge1xuICAgICAgbG9nLndhcm4oYFRoZSBmb2xsb3dpbmcgZGV2aWNlcyBhcmUgc3RpbGwgbm90IGluIHRoZSBjb3JyZWN0IHN0YXRlIGFmdGVyICR7dGltZW91dH0gbXM6YCk7XG4gICAgICBmb3IgKGxldCBkZXZpY2Ugb2YgcmVtYWluaW5nRGV2aWNlcykge1xuICAgICAgICBsb2cud2FybihgICAgICR7ZGV2aWNlfWApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZW5kQWxsU2ltdWxhdG9yRGFlbW9ucyAoKSB7XG4gIGxvZy5kZWJ1ZygnRW5kaW5nIGFsbCBzaW11bGF0b3IgZGFlbW9ucycpO1xuICBmb3IgKGxldCBzZXJ2aWNlUGF0dGVybiBvZiBbJ2NvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3InLCAnY29tLmFwcGxlLkNvcmVTaW11bGF0b3InXSkge1xuICAgIGxvZy5kZWJ1ZyhgS2lsbGluZyBhbnkgb3RoZXIgJHtzZXJ2aWNlUGF0dGVybn0gZGFlbW9uc2ApO1xuICAgIGxldCBsYXVuY2hDdGxDb21tYW5kID0gYGxhdW5jaGN0bCBsaXN0IHwgZ3JlcCAke3NlcnZpY2VQYXR0ZXJufSB8IGN1dCAtZiAzIHwgeGFyZ3MgLW4gMSBsYXVuY2hjdGxgO1xuICAgIHRyeSB7XG4gICAgICBsZXQgc3RvcENtZCA9IGAke2xhdW5jaEN0bENvbW1hbmR9IHN0b3BgO1xuICAgICAgYXdhaXQgZXhlYygnYmFzaCcsIFsnLWMnLCBzdG9wQ21kXSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihgQ291bGQgbm90IHN0b3AgJHtzZXJ2aWNlUGF0dGVybn0gZGFlbW9ucywgY2Fycnlpbmcgb24gYW55d2F5IWApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbGV0IHJlbW92ZUNtZCA9IGAke2xhdW5jaEN0bENvbW1hbmR9IHJlbW92ZWA7XG4gICAgICBhd2FpdCBleGVjKCdiYXNoJywgWyctYycsIHJlbW92ZUNtZF0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYENvdWxkIG5vdCByZW1vdmUgJHtzZXJ2aWNlUGF0dGVybn0gZGFlbW9ucywgY2Fycnlpbmcgb24gYW55d2F5IWApO1xuICAgIH1cbiAgfVxuICAvLyB3YWl0aW5nIHVudGlsIHRoZSBzaW11bGF0b3Igc2VydmljZSBoYXMgZGllZC5cbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIGxldCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ2Jhc2gnLCBbJy1jJyxcbiAgICAgICAgYHBzIC1lICB8IGdyZXAgbGF1bmNoZF9zaW0gfCBncmVwIC12IGJhc2ggfCBncmVwIC12IGdyZXAgfCBhd2sgeydwcmludCQxJ31gXSk7XG4gICAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKS5sZW5ndGggPT09IDA7XG4gICAgfSwge3dhaXRNczogNTAwMCwgaW50ZXJ2YWxNczogNTAwfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy53YXJuKGBDb3VsZCBub3QgZW5kIGFsbCBzaW11bGF0b3IgZGFlbW9ucywgY2Fycnlpbmcgb24hYCk7XG4gIH1cbiAgbG9nLmRlYnVnKCdGaW5pc2hpbmcgZW5kaW5nIGFsbCBzaW11bGF0b3IgZGFlbW9ucycpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRTaW11bGF0b3JJbmZvICh1ZGlkKSB7XG4gIC8vIHNlZSB0aGUgUkVBRE1FIGZvciBnaXRodWIuY29tL2FwcGl1bS9ub2RlLXNpbWN0bCBmb3IgZXhhbXBsZSBvdXRwdXQgb2YgZ2V0RGV2aWNlcygpXG4gIGxldCBkZXZpY2VzID0gYXdhaXQgbmV3IFNpbWN0bCgpLmdldERldmljZXMoKTtcblxuICBkZXZpY2VzID0gXy50b1BhaXJzKGRldmljZXMpXG4gICAgLm1hcCgocGFpcikgPT4gcGFpclsxXSlcbiAgICAucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiKSwgW10pO1xuICByZXR1cm4gXy5maW5kKGRldmljZXMsIChzaW0pID0+IHNpbS51ZGlkID09PSB1ZGlkKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2ltRXhpc3RzICh1ZGlkKSB7XG4gIHJldHVybiAhIShhd2FpdCBnZXRTaW11bGF0b3JJbmZvKHVkaWQpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2FmZVJpbVJhZiAoZGVsUGF0aCwgdHJ5TnVtID0gMCkge1xuICB0cnkge1xuICAgIGF3YWl0IGZzLnJpbXJhZihkZWxQYXRoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHRyeU51bSA8IDIwKSB7XG4gICAgICBpZiAoZXJyLm1lc3NhZ2UuaW5kZXhPZignRU5PVEVNUFRZJykgIT09IC0xKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgUGF0aCAnJHtkZWxQYXRofScgd2FzIG5vdCBlbXB0eSBkdXJpbmcgZGVsZXRlOyByZXRyeWluZ2ApO1xuICAgICAgICByZXR1cm4gYXdhaXQgc2FmZVJpbVJhZihkZWxQYXRoLCB0cnlOdW0gKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UuaW5kZXhPZignRU5PRU5UJykgIT09IC0xKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgUGF0aCAnJHtkZWxQYXRofScgZGlkIG5vdCBleGlzdCB3aGVuIHdlIHRyaWVkIHRvIGRlbGV0ZSwgaWdub3JpbmdgKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHNhZmVSaW1SYWYoZGVsUGF0aCwgdHJ5TnVtICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSW5zdGFsbCBhbiBTU0wgY2VydGlmaWNhdGUgdG8gYSBkZXZpY2Ugd2l0aCBnaXZlbiB1ZGlkXG4gKiBAcGFyYW0ge3N0cmluZ30gcGVtVGV4dCBTU0wgcGVtIHRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSB1ZGlkIElkZW50aWZpZXIgb2YgdGhlIFNpbXVsYXRvclxuICovXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsU1NMQ2VydCAocGVtVGV4dCwgdWRpZCkge1xuICAvLyBDaGVjayB0aGF0IG9wZW5zc2wgaXMgaW5zdGFsbGVkIG9uIHRoZSBwYXRoXG4gIHRyeSB7XG4gICAgYXdhaXQgZnMud2hpY2goJ29wZW5zc2wnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1ZyhgY3VzdG9tU1NMQ2VydCByZXF1aXJlcyBvcGVuc3NsIHRvIGJlIGF2YWlsYWJsZSBvbiBwYXRoYCk7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYENvbW1hbmQgJ29wZW5zc2wnIG5vdCBmb3VuZGApO1xuICB9XG5cbiAgLy8gQ2hlY2sgdGhhdCBzcWxpdGUzIGlzIGluc3RhbGxlZCBvbiB0aGUgcGF0aFxuICB0cnkge1xuICAgIGF3YWl0IGZzLndoaWNoKCdzcWxpdGUzJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZGVidWcoYGN1c3RvbVNTTENlcnQgcmVxdWlyZXMgc3FsaXRlMyB0byBiZSBhdmFpbGFibGUgb24gcGF0aGApO1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBDb21tYW5kICdzcWxpdGUzJyBub3QgZm91bmRgKTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIHRvIHN0b3JlIFBFTSB0ZXh0XG4gIC8vIChhIHRlbXAgZmlsZSBpcyBuZWNlc3NhcnkgdG8gcnVuIGBvcGVuc3NsYCBzaGVsbCBjb21tYW5kcywgY2FuJ3QgYmUgZG9uZSBpbiBtZW1vcnkpXG4gIGxldCB0ZW1wRmlsZU5hbWUgPSBwYXRoLnJlc29sdmUoYXdhaXQgdGVtcERpci5vcGVuRGlyKCksICd0ZW1wLXNzbC1jZXJ0LnBlbScpO1xuICBsZXQgcGF0aFRvS2V5Y2hhaW4gPSBuZXcgU2ltdWxhdG9yKHVkaWQpLmdldERpcigpO1xuICBhd2FpdCBmcy53cml0ZUZpbGUodGVtcEZpbGVOYW1lLCBwZW1UZXh0KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5zdGF0KHBhdGhUb0tleWNoYWluKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1ZyhgQ291bGQgbm90IGluc3RhbGwgU1NMIGNlcnRpZmljYXRlLiBObyBzaW11bGF0b3Igd2l0aCB1ZGlkICcke3VkaWR9J2ApO1xuICAgIGxvZy5lcnJvckFuZFRocm93KGUpO1xuICB9XG5cbiAgLy8gRG8gdGhlIGNlcnRpZmljYXRlIGluc3RhbGxhdGlvblxuICBsZXQgY2VydGlmaWNhdGUgPSBuZXcgQ2VydGlmaWNhdGUodGVtcEZpbGVOYW1lKTtcbiAgbG9nLmRlYnVnKGBJbnN0YWxsaW5nIGNlcnRpZmljYXRlIHRvICR7cGF0aFRvS2V5Y2hhaW59YCk7XG4gIGF3YWl0IGNlcnRpZmljYXRlLmFkZChwYXRoVG9LZXljaGFpbik7XG5cbiAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZVxuICBhd2FpdCBmcy51bmxpbmsodGVtcEZpbGVOYW1lKTtcblxuICByZXR1cm4gY2VydGlmaWNhdGU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaW5zdGFsbFNTTENlcnQgKHBlbVRleHQsIHVkaWQpIHtcbiAgdHJ5IHtcbiAgICBsZXQgdGVtcEZpbGVOYW1lID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3RlbXAtc3NsLWNlcnQucGVtJyk7XG4gICAgbGV0IHBhdGhUb0tleWNoYWluID0gcGF0aC5yZXNvbHZlKG5ldyBTaW11bGF0b3IodWRpZCkuZ2V0RGlyKCkpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0ZW1wRmlsZU5hbWUsIHBlbVRleHQpO1xuICAgIGxldCBjZXJ0aWZpY2F0ZSA9IG5ldyBDZXJ0aWZpY2F0ZSh0ZW1wRmlsZU5hbWUpO1xuICAgIGF3YWl0IGNlcnRpZmljYXRlLnJlbW92ZShwYXRoVG9LZXljaGFpbik7XG4gICAgYXdhaXQgZnMudW5saW5rKHRlbXBGaWxlTmFtZSk7XG4gICAgcmV0dXJuIGNlcnRpZmljYXRlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmRlYnVnKGBDb3VsZCBub3QgdW5pbnN0YWxsIFNTTCBjZXJ0aWZpY2F0ZS4gTm8gc2ltdWxhdG9yIHdpdGggdWRpZCAnJHt1ZGlkfSdgKTtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhlKTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBTaW11bGF0b3IgYWxyZWFkeSBoYXMgdGhpcyBTU0wgY2VydGlmaWNhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwZW1UZXh0IFBFTSB0ZXh0IG9mIFNTTCBjZXJ0XG4gKiBAcGFyYW0ge3N0cmluZ30gdWRpZCBJZGVudGlmaWVyIG9mIHRoZSBTaW11bGF0b3JcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaGFzU1NMQ2VydCAocGVtVGV4dCwgdWRpZCkge1xuICBjb25zdCB0ZW1wRmlsZU5hbWUgPSBwYXRoLnJlc29sdmUoYXdhaXQgdGVtcERpci5vcGVuRGlyKCksICd0ZW1wLXNzbC1jZXJ0LnBlbScpO1xuICBjb25zdCBwYXRoVG9LZXljaGFpbiA9IG5ldyBTaW11bGF0b3IodWRpZCkuZ2V0RGlyKCk7XG4gIGF3YWl0IGZzLndyaXRlRmlsZSh0ZW1wRmlsZU5hbWUsIHBlbVRleHQpO1xuICBjb25zdCBjZXJ0aWZpY2F0ZSA9IG5ldyBDZXJ0aWZpY2F0ZSh0ZW1wRmlsZU5hbWUpO1xuICByZXR1cm4gY2VydGlmaWNhdGUuaGFzKHBhdGhUb0tleWNoYWluKTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgY29tbWFuZCBsaW5lIHNxbGl0ZTMgcXVlcnlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGIgLSBGdWxsIHBhdGggdG8gc3FsaXRlIGRhdGFiYXNlXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVlcnkgLSBUaGUgYWN0dWFsIHF1ZXJ5IHN0cmluZ1xuICogQHBhcmFtIHsuLi5zdHJpbmd9IHF1ZXJ5UGFyYW1zIC0gVGhlIGxpc3Qgb2YgcXVlcnkgcGFyYW1ldGVyc1xuICogQHJldHVybnMge3N0cmluZ30gc3FsaXRlIGNvbW1hbmQgc3Rkb3V0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNTUUxpdGVRdWVyeSAoZGIsIHF1ZXJ5LCAuLi5xdWVyeVBhcmFtcykge1xuICBxdWVyeSA9IHF1ZXJ5LnJlcGxhY2UoL1xcbisvZywgJyAnKTtcbiAgbGV0IHF1ZXJ5VG9rZW5zID0gcXVlcnkuc3BsaXQoJz8nKTtcbiAgbGV0IGZvcm1hdHRlZFF1ZXJ5ID0gW107XG4gIHF1ZXJ5UGFyYW1zXG4gICAgLm1hcCgocGFyYW0pID0+IGAke3BhcmFtfWApXG4gICAgLmZvckVhY2goKHBhcmFtLCBpKSA9PiB7XG4gICAgICBmb3JtYXR0ZWRRdWVyeS5wdXNoKHF1ZXJ5VG9rZW5zW2ldKTtcbiAgICAgIGZvcm1hdHRlZFF1ZXJ5LnB1c2gocGFyYW0ucmVwbGFjZSgvJy9nLCBcIicnXCIpKTtcbiAgICB9KTtcbiAgZm9ybWF0dGVkUXVlcnkucHVzaChxdWVyeVRva2Vuc1txdWVyeVRva2Vucy5sZW5ndGggLSAxXSk7XG5cbiAgbG9nLmRlYnVnKGBFeGVjdXRpbmcgU1FMIHF1ZXJ5IFwiJHtmb3JtYXR0ZWRRdWVyeS5qb2luKCcnKX1cIiBvbiAnJHtkYn0nYCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBleGVjKCdzcWxpdGUzJywgWyctbGluZScsIGRiLCBmb3JtYXR0ZWRRdWVyeS5qb2luKCcnKV0pKS5zdGRvdXQ7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGV4ZWN1dGUgU1FMaXRlIHF1ZXJ5IFwiJHtmb3JtYXR0ZWRRdWVyeS5qb2luKCcnKX1cIiB0byAnJHtkYn0nLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIuc3RkZXJyfWApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldERldmVsb3BlclJvb3QgKCkge1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ3hjb2RlLXNlbGVjdCcsIFsnLXAnXSk7XG4gIHJldHVybiBzdGRvdXQudHJpbSgpO1xufVxuXG4vKipcbiAqIEFjdGl2YXRlcyB0aGUgYXBwIGhhdmluZyB0aGUgZ2l2ZW4gcHJvY2VzcyBpZGVudGlmaWVyLlxuICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL2FwcGtpdC9uc3J1bm5pbmdhcHBsaWNhdGlvbi8xNTI4NzI1LWFjdGl2YXRld2l0aG9wdGlvbnM/bGFuZ3VhZ2U9b2JqY1xuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHBpZCBBcHAgcHJvY2VzcyBpZGVudGlmaWVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGdpdmVuIFBJRCBpcyBub3QgcnVubmluZyBvciB0aGVyZSB3YXMgYSBmYWlsdXJlXG4gKiB3aGlsZSBhY3RpdmF0aW5nIHRoZSBhcHBcbiAqL1xuYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKHBpZCkge1xuICBjb25zdCB0bXBTY3JpcHQgPSBhd2FpdCB0ZW1wRGlyLnBhdGgoe1xuICAgIHByZWZpeDogYGFjdGl2YXRlX3NpbV8ke3V0aWwudXVpZFY0KCkuc3Vic3RyaW5nKDAsIDgpfWAsXG4gICAgc3VmZml4OiAnLnB5JyxcbiAgfSk7XG4gIGF3YWl0IGZzLndyaXRlRmlsZSh0bXBTY3JpcHQsIEFQUF9BQ1RJVkFUSU9OX1NDUklQVChwaWQpLCAndXRmOCcpO1xuICB0cnkge1xuICAgIGF3YWl0IGV4ZWMoJy91c3IvYmluL3B5dGhvbicsIFt0bXBTY3JpcHRdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodG1wU2NyaXB0KTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBraWxsQWxsU2ltdWxhdG9ycyxcbiAgZW5kQWxsU2ltdWxhdG9yRGFlbW9ucyxcbiAgc2FmZVJpbVJhZixcbiAgc2ltRXhpc3RzLFxuICBnZXRTaW11bGF0b3JJbmZvLFxuICBpbnN0YWxsU1NMQ2VydCxcbiAgdW5pbnN0YWxsU1NMQ2VydCxcbiAgaGFzU1NMQ2VydCxcbiAgZXhlY1NRTGl0ZVF1ZXJ5LFxuICB0b0Jpb21ldHJpY0RvbWFpbkNvbXBvbmVudCxcbiAgZ2V0RGV2ZWxvcGVyUm9vdCxcbiAgYWN0aXZhdGVBcHAsXG4gIFNBRkFSSV9TVEFSVFVQX1RJTUVPVVQsXG4gIE1PQklMRV9TQUZBUklfQlVORExFX0lELFxufTtcbiJdLCJmaWxlIjoibGliL3V0aWxzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
import _ from 'lodash';
import SimulatorXcode11 from './simulator-xcode-11';
class SimulatorXcode11_4 extends SimulatorXcode11 {

@@ -107,4 +106,18 @@ constructor (udid, xcodeVersion) {

}
/**
* @inheritdoc
* @override
* */
async launchWindow (isUiClientRunning, opts) {
// In xcode 11.4, UI Client must be first launched, otherwise
// sim window stays minimized
if (!isUiClientRunning) {
await this.startUIClient(opts);
}
await this.boot();
}
}
export default SimulatorXcode11_4;

@@ -10,3 +10,3 @@ import path from 'path';

killAllSimulators, safeRimRaf, getDeveloperRoot,
installSSLCert, hasSSLCert,
installSSLCert, hasSSLCert, activateApp,
} from './utils.js';

@@ -1037,2 +1037,10 @@ import { asyncmap, retryInterval, waitForCondition, retry } from 'asyncbox';

async _activateWindow () { // eslint-disable-line require-await
const pid = await this.getUIClientPid();
if (pid) {
try {
return await activateApp(pid);
} catch (e) {
log.debug(e.stderr || e.message);
}
}
return `

@@ -1039,0 +1047,0 @@ tell application "System Events"

@@ -221,16 +221,3 @@ import { BOOT_COMPLETED_EVENT } from './simulator-xcode-6';

* @override
* @private
*/
async _activateWindow () {
if (this.idb) {
return await this.idb.focusSimulator();
}
log.warn(`Cannot focus Simulator window with idb. Defaulting to AppleScript`);
return await super._activateWindow();
}
/**
* @inheritdoc
* @override
*/
async isBiometricEnrolled () {

@@ -237,0 +224,0 @@ const output = await this.executeUIClientScript(`

@@ -89,9 +89,2 @@ import SimulatorXcode8 from './simulator-xcode-8';

}
const bootSimulator = async () => {
try {
await retryInterval(3, 2000, async () => await this.simctl.bootDevice());
} catch (err) {
log.warn(`'xcrun simctl boot ${this.udid}' command has returned non-zero exit code`);
}
};
const waitForShutdown = async (waitMs = SIMULATOR_SHUTDOWN_TIMEOUT) => {

@@ -132,3 +125,3 @@ try {

log.info(`Booting Simulator with UDID '${this.udid}' in headless mode. All UI-related capabilities are going to be ignored`);
await bootSimulator();
await this.boot();
} else {

@@ -150,7 +143,3 @@ if (isServerRunning && uiClientPid) {

}
log.info(`Booting Simulator with UDID '${this.udid}'...`);
await bootSimulator();
if (!uiClientPid) {
await this.startUIClient(opts);
}
await this.launchWindow(uiClientPid, opts);
}

@@ -166,3 +155,37 @@ return true;

/***
* Boots simulator and opens simulators UI Client if not already opened.
*
* @param {boolean} isUiClientRunning - process id of simulator UI client.
* @param {RunOptions} opts - arguments to start simulator UI client with.
*/
async launchWindow (isUiClientRunning, opts = {}) {
await this.boot();
if (!isUiClientRunning) {
await this.startUIClient(opts);
}
}
/**
* Boots simulator if not already booted.
*/
async boot () {
log.info(`Booting Simulator with UDID '${this.udid}'...`);
try {
await retryInterval(3, 2000, async () => {
try {
await this.simctl.bootDevice();
} catch (e) {
if (!_.includes(e.stderr, 'Unable to boot device in current state: Booted')) {
throw e;
}
log.debug(`Simulator with UDID '${this.udid}' is already in Booted state`);
}
});
} catch (err) {
log.warn(err.stderr || err.message);
}
}
/**
* Perform verification of device preferences correctness.

@@ -288,7 +311,21 @@ *

async _activateWindow () {
if (this.idb) {
return await this.idb.focusSimulator();
let selfName;
let selfSdk;
let bootedDevicesCount = 0;
for (const [sdk, deviceArr] of _.toPairs(await this.simctl.getDevices())) {
for (const {state, udid, name} of deviceArr) {
if (state === 'Booted') {
bootedDevicesCount++;
}
if (!selfName && udid === this.udid) {
selfSdk = sdk;
selfName = name;
}
}
}
log.warn(`Cannot focus Simulator window with idb. Defaulting to AppleScript`);
const {name, sdk} = await this.stat();
if (bootedDevicesCount < 2) {
return await super._activateWindow();
}
// There are potentially more that one Simulator window
return `

@@ -299,3 +336,3 @@ tell application "System Events"

set frontmost to true
click (menu item 1 where (its name contains "${name} " and its name contains "${sdk}")) of menu 1 of menu bar item "Window" of menu bar 1
click (menu item 1 where (its name contains "${selfName} " and its name contains "${selfSdk}")) of menu 1 of menu bar item "Window" of menu bar 1
end tell

@@ -302,0 +339,0 @@ end tell

@@ -7,3 +7,3 @@ import log from './logger';

import Simctl from 'node-simctl';
import { fs, tempDir } from 'appium-support';
import { fs, tempDir, util } from 'appium-support';
import { Certificate } from './certificate';

@@ -18,3 +18,15 @@ import path from 'path';

const MOBILE_SAFARI_BUNDLE_ID = 'com.apple.mobilesafari';
const APP_ACTIVATION_SCRIPT = (pid) => `#!/usr/bin/python
from AppKit import NSApplicationActivateIgnoringOtherApps, NSApplicationActivateAllWindows
from Cocoa import NSRunningApplication
app = NSRunningApplication.runningApplicationWithProcessIdentifier_(${pid})
if not app:
raise ValueError('App with PID ${pid} is not running')
if not app.activateWithOptions_(NSApplicationActivateAllWindows | NSApplicationActivateIgnoringOtherApps):
raise ValueError('App with PID ${pid} cannot be activated')
`;
const BIOMETRICS = {

@@ -294,2 +306,24 @@ touchId: 'fingerTouch',

/**
* Activates the app having the given process identifier.
* See https://developer.apple.com/documentation/appkit/nsrunningapplication/1528725-activatewithoptions?language=objc
* for more details.
*
* @param {number|string} pid App process identifier
* @throws {Error} If the given PID is not running or there was a failure
* while activating the app
*/
async function activateApp (pid) {
const tmpScript = await tempDir.path({
prefix: `activate_sim_${util.uuidV4().substring(0, 8)}`,
suffix: '.py',
});
await fs.writeFile(tmpScript, APP_ACTIVATION_SCRIPT(pid), 'utf8');
try {
await exec('/usr/bin/python', [tmpScript]);
} finally {
await fs.rimraf(tmpScript);
}
}
export {

@@ -307,4 +341,5 @@ killAllSimulators,

getDeveloperRoot,
activateApp,
SAFARI_STARTUP_TIMEOUT,
MOBILE_SAFARI_BUNDLE_ID,
};

@@ -7,3 +7,3 @@ {

],
"version": "3.22.0",
"version": "3.22.1",
"author": "appium",

@@ -76,3 +76,3 @@ "license": "Apache-2.0",

"ios-test-app": "^3.0.0",
"mocha": "^7.0.1",
"mocha": "^8.0.1",
"pem": "^1.8.3",

@@ -79,0 +79,0 @@ "pre-commit": "^1.1.3",

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc