@ultipa-graph/ultipa-driver 6.2.0 → 6.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,7 +17,32 @@ export declare class ConnectionPool {
17
17
  /** Get a connection for a specific host */
18
18
  getConnectionForHost(host: string): grpc.Client;
19
19
  private startHealthCheck;
20
+ /**
21
+ * Health-check tick. Connectivity-state semantics:
22
+ * - READY / IDLE → healthy; reset the unhealthy counter.
23
+ * - CONNECTING → transient; let the channel heal itself,
24
+ * don't count toward unhealthy.
25
+ * - SHUTDOWN → terminal; reconnect immediately.
26
+ * - TRANSIENT_FAILURE → count toward unhealthy; reconnect only
27
+ * after UNHEALTHY_RECONNECT_THRESHOLD
28
+ * consecutive ticks.
29
+ *
30
+ * Reconnect replaces the pool's channel reference; it does NOT close
31
+ * the old channel, so in-flight RPCs continue to completion on it.
32
+ */
20
33
  private checkHealth;
34
+ /**
35
+ * Replace the pool's channel for `host` with a fresh one.
36
+ *
37
+ * Critically, does NOT close the old channel. In-flight RPCs hold
38
+ * their own reference to it via the client they were issued on and
39
+ * continue to completion on that channel; the Node.js runtime's
40
+ * garbage collector releases the old channel only after every
41
+ * in-flight RPC has resolved.
42
+ *
43
+ * Earlier versions closed the old channel synchronously here, which
44
+ * cancelled every pending RPC with a "Channel closed!"-style error.
45
+ */
21
46
  private reconnect;
22
47
  /** Close all connections in the pool */
23
48
  close(): void;
@@ -39,6 +39,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.ConnectionPool = void 0;
40
40
  const grpc = __importStar(require("@grpc/grpc-js"));
41
41
  const errors_1 = require("./errors");
42
+ /**
43
+ * Number of consecutive unhealthy ticks required before forcing a
44
+ * reconnect (which replaces the channel; in-flight RPCs are NOT
45
+ * cancelled because the old channel is left alive until GC).
46
+ */
47
+ const UNHEALTHY_RECONNECT_THRESHOLD = 3;
42
48
  /** Manages a pool of connections to GQLDB servers */
43
49
  class ConnectionPool {
44
50
  config;
@@ -87,6 +93,7 @@ class ConnectionPool {
87
93
  client,
88
94
  healthy: true,
89
95
  lastPing: Date.now(),
96
+ consecutiveUnhealthy: 0,
90
97
  };
91
98
  }
92
99
  /** Get a healthy connection from the pool */
@@ -115,39 +122,73 @@ class ConnectionPool {
115
122
  this.healthCheckTimer = setInterval(() => this.checkHealth(), interval);
116
123
  }
117
124
  }
125
+ /**
126
+ * Health-check tick. Connectivity-state semantics:
127
+ * - READY / IDLE → healthy; reset the unhealthy counter.
128
+ * - CONNECTING → transient; let the channel heal itself,
129
+ * don't count toward unhealthy.
130
+ * - SHUTDOWN → terminal; reconnect immediately.
131
+ * - TRANSIENT_FAILURE → count toward unhealthy; reconnect only
132
+ * after UNHEALTHY_RECONNECT_THRESHOLD
133
+ * consecutive ticks.
134
+ *
135
+ * Reconnect replaces the pool's channel reference; it does NOT close
136
+ * the old channel, so in-flight RPCs continue to completion on it.
137
+ */
118
138
  checkHealth() {
119
139
  for (const [host, conn] of this.connections) {
120
140
  const state = conn.client.getChannel().getConnectivityState(false);
121
- const healthy = state === grpc.connectivityState.READY ||
122
- state === grpc.connectivityState.IDLE;
123
- conn.healthy = healthy;
124
- if (healthy) {
141
+ if (state === grpc.connectivityState.READY ||
142
+ state === grpc.connectivityState.IDLE) {
143
+ conn.healthy = true;
144
+ conn.consecutiveUnhealthy = 0;
125
145
  conn.lastPing = Date.now();
146
+ continue;
147
+ }
148
+ if (state === grpc.connectivityState.CONNECTING) {
149
+ // Transient — let the channel heal itself.
150
+ continue;
126
151
  }
127
- else {
152
+ if (state === grpc.connectivityState.SHUTDOWN) {
153
+ conn.healthy = false;
154
+ conn.consecutiveUnhealthy = UNHEALTHY_RECONNECT_THRESHOLD;
155
+ this.reconnect(host);
156
+ continue;
157
+ }
158
+ // TRANSIENT_FAILURE or any other non-READY state.
159
+ conn.consecutiveUnhealthy++;
160
+ if (conn.consecutiveUnhealthy >= UNHEALTHY_RECONNECT_THRESHOLD) {
161
+ conn.healthy = false;
128
162
  this.reconnect(host);
129
163
  }
130
164
  }
131
165
  }
166
+ /**
167
+ * Replace the pool's channel for `host` with a fresh one.
168
+ *
169
+ * Critically, does NOT close the old channel. In-flight RPCs hold
170
+ * their own reference to it via the client they were issued on and
171
+ * continue to completion on that channel; the Node.js runtime's
172
+ * garbage collector releases the old channel only after every
173
+ * in-flight RPC has resolved.
174
+ *
175
+ * Earlier versions closed the old channel synchronously here, which
176
+ * cancelled every pending RPC with a "Channel closed!"-style error.
177
+ */
132
178
  async reconnect(host) {
133
179
  if (this.closed)
134
180
  return;
135
- const oldConn = this.connections.get(host);
136
- if (oldConn) {
137
- try {
138
- oldConn.client.close();
139
- }
140
- catch (e) {
141
- // Ignore
142
- }
143
- this.connections.delete(host);
144
- }
145
181
  try {
182
+ // Build the new connection up-front; only swap if it succeeds.
146
183
  const newConn = this.createConnection(host);
184
+ // Overwrite the pool entry. The old Connection is now
185
+ // unreferenced by the pool; in-flight RPCs still hold its
186
+ // grpc.Client alive via per-call references. Once they
187
+ // complete the client becomes garbage and gRPC closes it
188
+ // naturally.
147
189
  this.connections.set(host, newConn);
148
190
  }
149
191
  catch (e) {
150
- // Log and continue
151
192
  console.error(`Failed to reconnect to ${host}:`, e);
152
193
  }
153
194
  }
@@ -188,4 +229,4 @@ class ConnectionPool {
188
229
  }
189
230
  }
190
231
  exports.ConnectionPool = ConnectionPool;
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsb0RBQXNDO0FBRXRDLHFDQUF5RjtBQVV6RixxREFBcUQ7QUFDckQsTUFBYSxjQUFjO0lBQ2pCLE1BQU0sQ0FBYztJQUNwQixXQUFXLEdBQTRCLElBQUksR0FBRyxFQUFFLENBQUM7SUFDakQsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNmLGdCQUFnQixDQUFrQjtJQUUxQyxZQUFZLE1BQW1CO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sZUFBZTtRQUNyQixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDO2dCQUNILE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLDRCQUE0QjtnQkFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSw0QkFBbUIsRUFBRSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCLENB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QUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDO2dCQUNILElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEIsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsU0FBUztZQUNYLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsc0NBQXNDO0lBQ3RDLGdCQUFnQjtRQUNkLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQzdDLElBQUksSUFBSSxDQUFDLE9BQU87Z0JBQUUsS0FBSyxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELHVDQUF1QztJQUN2QyxLQUFLO1FBQ0gsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztDQUNGO0FBbktELHdDQW1LQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29ubmVjdGlvbiBtYW5hZ2VtZW50IGZvciBHUUxEQiBOb2RlLmpzIGRyaXZlci5cbiAqL1xuXG5pbXBvcnQgKiBhcyBncnBjIGZyb20gJ0BncnBjL2dycGMtanMnO1xuaW1wb3J0IHsgR3FsZGJDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBBbGxIb3N0c0ZhaWxlZEVycm9yLCBDb25uZWN0aW9uQ2xvc2VkRXJyb3IsIE5vQ29ubmVjdGlvbkVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuXG4vKiogUmVwcmVzZW50cyBhIHNpbmdsZSBnUlBDIGNvbm5lY3Rpb24gKi9cbmludGVyZmFjZSBDb25uZWN0aW9uIHtcbiAgaG9zdDogc3RyaW5nO1xuICBjbGllbnQ6IGdycGMuQ2xpZW50O1xuICBoZWFsdGh5OiBib29sZWFuO1xuICBsYXN0UGluZzogbnVtYmVyO1xufVxuXG4vKiogTWFuYWdlcyBhIHBvb2wgb2YgY29ubmVjdGlvbnMgdG8gR1FMREIgc2VydmVycyAqL1xuZXhwb3J0IGNsYXNzIENvbm5lY3Rpb25Qb29sIHtcbiAgcHJpdmF0ZSBjb25maWc6IEdxbGRiQ29uZmlnO1xuICBwcml2YXRlIGNvbm5lY3Rpb25zOiBNYXA8c3RyaW5nLCBDb25uZWN0aW9uPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBjbG9zZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBoZWFsdGhDaGVja1RpbWVyPzogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBHcWxkYkNvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuaW5pdENvbm5lY3Rpb25zKCk7XG4gICAgdGhpcy5zdGFydEhlYWx0aENoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRDb25uZWN0aW9ucygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGhvc3Qgb2YgdGhpcy5jb25maWcuaG9zdHMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbm4gPSB0aGlzLmNyZWF0ZUNvbm5lY3Rpb24oaG9zdCk7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KGhvc3QsIGNvbm4pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBDb250aW51ZSB3aXRoIG90aGVyIGhvc3RzXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjb25uZWN0IHRvICR7aG9zdH06YCwgZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEFsbEhvc3RzRmFpbGVkRXJyb3IoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbm5lY3Rpb24oaG9zdDogc3RyaW5nKTogQ29ubmVjdGlvbiB7XG4gICAgbGV0IGNyZWRlbnRpYWxzOiBncnBjLkNoYW5uZWxDcmVkZW50aWFscztcblxuICAgIGlmICh0aGlzLmNvbmZpZy50bHNPcHRpb25zKSB7XG4gICAgICBjcmVkZW50aWFscyA9IGdycGMuY3JlZGVudGlhbHMuY3JlYXRlU3NsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNyZWRlbnRpYWxzID0gZ3JwYy5jcmVkZW50aWFscy5jcmVhdGVJbnNlY3VyZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnM6IGdycGMuQ2hhbm5lbE9wdGlvbnMgPSB7XG4gICAgICAnZ3JwYy5tYXhfcmVjZWl2ZV9tZXNzYWdlX2xlbmd0aCc6IHRoaXMuY29uZmlnLm1heFJlY3ZTaXplID8/IDY0ICogMTAyNCAqIDEwMjQsXG4gICAgICAnZ3JwYy5tYXhfc2VuZF9tZXNzYWdlX2xlbmd0aCc6IHRoaXMuY29uZmlnLm1heFJlY3ZTaXplID8/IDY0ICogMTAyNCAqIDEwMjQsXG4gICAgICAnZ3JwYy5rZWVwYWxpdmVfdGltZV9tcyc6IDMwMDAwLFxuICAgICAgJ2dycGMua2VlcGFsaXZlX3RpbWVvdXRfbXMnOiAxMDAwMCxcbiAgICAgICdncnBjLmtlZXBhbGl2ZV9wZXJtaXRfd2l0aG91dF9jYWxscyc6IDEsXG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSBhIGdlbmVyaWMgY2xpZW50IGZvciB0aGUgY2hhbm5lbFxuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBncnBjLkNsaWVudChob3N0LCBjcmVkZW50aWFscywgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaG9zdCxcbiAgICAgIGNsaWVudCxcbiAgICAgIGhlYWx0aHk6IHRydWUsXG4gICAgICBsYXN0UGluZzogRGF0ZS5ub3coKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEdldCBhIGhlYWx0aHkgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sICovXG4gIGdldENvbm5lY3Rpb24oKTogZ3JwYy5DbGllbnQge1xuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IENvbm5lY3Rpb25DbG9zZWRFcnJvcigpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29ubiBvZiB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpKSB7XG4gICAgICBpZiAoY29ubi5oZWFsdGh5KSB7XG4gICAgICAgIHJldHVybiBjb25uLmNsaWVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgTm9Db25uZWN0aW9uRXJyb3IoKTtcbiAgfVxuXG4gIC8qKiBHZXQgYSBjb25uZWN0aW9uIGZvciBhIHNwZWNpZmljIGhvc3QgKi9cbiAgZ2V0Q29ubmVjdGlvbkZvckhvc3QoaG9zdDogc3RyaW5nKTogZ3JwYy5DbGllbnQge1xuICAgIGNvbnN0IGNvbm4gPSB0aGlzLmNvbm5lY3Rpb25zLmdldChob3N0KTtcbiAgICBpZiAoIWNvbm4gfHwgIWNvbm4uaGVhbHRoeSkge1xuICAgICAgdGhyb3cgbmV3IE5vQ29ubmVjdGlvbkVycm9yKCk7XG4gICAgfVxuICAgIHJldHVybiBjb25uLmNsaWVudDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRIZWFsdGhDaGVjaygpOiB2b2lkIHtcbiAgICBjb25zdCBpbnRlcnZhbCA9IHRoaXMuY29uZmlnLmhlYWx0aENoZWNrSW50ZXJ2YWwgPz8gMzAwMDA7XG4gICAgaWYgKGludGVydmFsID4gMCkge1xuICAgICAgdGhpcy5oZWFsdGhDaGVja1RpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5jaGVja0hlYWx0aCgpLCBpbnRlcnZhbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0hlYWx0aCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFtob3N0LCBjb25uXSBvZiB0aGlzLmNvbm5lY3Rpb25zKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IGNvbm4uY2xpZW50LmdldENoYW5uZWwoKS5nZXRDb25uZWN0aXZpdHlTdGF0ZShmYWxzZSk7XG4gICAgICBjb25zdCBoZWFsdGh5ID0gc3RhdGUgPT09IGdycGMuY29ubmVjdGl2aXR5U3RhdGUuUkVBRFkgfHxcbiAgICAgICAgICAgICAgICAgICAgIHN0YXRlID09PSBncnBjLmNvbm5lY3Rpdml0eVN0YXRlLklETEU7XG5cbiAgICAgIGNvbm4uaGVhbHRoeSA9IGhlYWx0aHk7XG4gICAgICBpZiAoaGVhbHRoeSkge1xuICAgICAgICBjb25uLmxhc3RQaW5nID0gRGF0ZS5ub3coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVjb25uZWN0KGhvc3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVjb25uZWN0KGhvc3Q6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuXG4gICAgY29uc3Qgb2xkQ29ubiA9IHRoaXMuY29ubmVjdGlvbnMuZ2V0KGhvc3QpO1xuICAgIGlmIChvbGRDb25uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBvbGRDb25uLmNsaWVudC5jbG9zZSgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBJZ25vcmVcbiAgICAgIH1cbiAgICAgIHRoaXMuY29ubmVjdGlvbnMuZGVsZXRlKGhvc3QpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBuZXdDb25uID0gdGhpcy5jcmVhdGVDb25uZWN0aW9uKGhvc3QpO1xuICAgICAgdGhpcy5jb25uZWN0aW9ucy5zZXQoaG9zdCwgbmV3Q29ubik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gTG9nIGFuZCBjb250aW51ZVxuICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHJlY29ubmVjdCB0byAke2hvc3R9OmAsIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDbG9zZSBhbGwgY29ubmVjdGlvbnMgaW4gdGhlIHBvb2wgKi9cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG5cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5oZWFsdGhDaGVja1RpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaGVhbHRoQ2hlY2tUaW1lcik7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjb25uIG9mIHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbm4uY2xpZW50LmNsb3NlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIElnbm9yZVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29ubmVjdGlvbnMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIG51bWJlciBvZiBoZWFsdGh5IGhvc3RzICovXG4gIGhlYWx0aHlIb3N0Q291bnQoKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGZvciAoY29uc3QgY29ubiBvZiB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpKSB7XG4gICAgICBpZiAoY29ubi5oZWFsdGh5KSBjb3VudCsrO1xuICAgIH1cbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICAvKiogR2V0IHRoZSBsaXN0IG9mIGNvbmZpZ3VyZWQgaG9zdHMgKi9cbiAgaG9zdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY29ubmVjdGlvbnMua2V5cygpKTtcbiAgfVxuXG4gIC8qKiBDaGVjayBpZiB0aGUgcG9vbCBpcyBjbG9zZWQgKi9cbiAgaXNDbG9zZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VkO1xuICB9XG59XG4iXX0=
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsb0RBQXNDO0FBRXRDLHFDQUF5RjtBQWtCekY7Ozs7R0FJRztBQUNILE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxDQUFDO0FBRXhDLHFEQUFxRDtBQUNyRCxNQUFhLGNBQWM7SUFDakIsTUFBTSxDQUFjO0lBQ3BCLFdBQVcsR0FBNEIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNqRCxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ2YsZ0JBQWdCLENBQWtCO0lBRTFDLFlBQVksTUFBbUI7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxlQUFlO1FBQ3JCLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsNEJBQTRCO2dCQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNwRCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLDRCQUFt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O1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7Q0FDRjtBQTFNRCx3Q0EwTUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbm5lY3Rpb24gbWFuYWdlbWVudCBmb3IgR1FMREIgTm9kZS5qcyBkcml2ZXIuXG4gKi9cblxuaW1wb3J0ICogYXMgZ3JwYyBmcm9tICdAZ3JwYy9ncnBjLWpzJztcbmltcG9ydCB7IEdxbGRiQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgQWxsSG9zdHNGYWlsZWRFcnJvciwgQ29ubmVjdGlvbkNsb3NlZEVycm9yLCBOb0Nvbm5lY3Rpb25FcnJvciB9IGZyb20gJy4vZXJyb3JzJztcblxuLyoqIFJlcHJlc2VudHMgYSBzaW5nbGUgZ1JQQyBjb25uZWN0aW9uICovXG5pbnRlcmZhY2UgQ29ubmVjdGlvbiB7XG4gIGhvc3Q6IHN0cmluZztcbiAgY2xpZW50OiBncnBjLkNsaWVudDtcbiAgaGVhbHRoeTogYm9vbGVhbjtcbiAgbGFzdFBpbmc6IG51bWJlcjtcbiAgLyoqXG4gICAqIE51bWJlciBvZiBjb25zZWN1dGl2ZSBoZWFsdGgtY2hlY2sgdGlja3MgdGhhdCBvYnNlcnZlZCBhIG5vbi1SRUFEWVxuICAgKiBzdGF0ZS4gUmVjb25uZWN0IGlzIG9ubHkgdHJpZ2dlcmVkIGFmdGVyIHRoaXMgcmVhY2hlc1xuICAgKiBVTkhFQUxUSFlfUkVDT05ORUNUX1RIUkVTSE9MRCwgc28gYSBzaW5nbGUgdHJhbnNpZW50IGZsaWNrZXJcbiAgICogZHVyaW5nIGEgYnVzeSBpbi1mbGlnaHQgUlBDIGRvZXMgbm90IHRlYXIgdGhlIGNoYW5uZWwgZG93biBhbmRcbiAgICogY2FuY2VsIGV2ZXJ5IHBlbmRpbmcgcmVxdWVzdC5cbiAgICovXG4gIGNvbnNlY3V0aXZlVW5oZWFsdGh5OiBudW1iZXI7XG59XG5cbi8qKlxuICogTnVtYmVyIG9mIGNvbnNlY3V0aXZlIHVuaGVhbHRoeSB0aWNrcyByZXF1aXJlZCBiZWZvcmUgZm9yY2luZyBhXG4gKiByZWNvbm5lY3QgKHdoaWNoIHJlcGxhY2VzIHRoZSBjaGFubmVsOyBpbi1mbGlnaHQgUlBDcyBhcmUgTk9UXG4gKiBjYW5jZWxsZWQgYmVjYXVzZSB0aGUgb2xkIGNoYW5uZWwgaXMgbGVmdCBhbGl2ZSB1bnRpbCBHQykuXG4gKi9cbmNvbnN0IFVOSEVBTFRIWV9SRUNPTk5FQ1RfVEhSRVNIT0xEID0gMztcblxuLyoqIE1hbmFnZXMgYSBwb29sIG9mIGNvbm5lY3Rpb25zIHRvIEdRTERCIHNlcnZlcnMgKi9cbmV4cG9ydCBjbGFzcyBDb25uZWN0aW9uUG9vbCB7XG4gIHByaXZhdGUgY29uZmlnOiBHcWxkYkNvbmZpZztcbiAgcHJpdmF0ZSBjb25uZWN0aW9uczogTWFwPHN0cmluZywgQ29ubmVjdGlvbj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgY2xvc2VkID0gZmFsc2U7XG4gIHByaXZhdGUgaGVhbHRoQ2hlY2tUaW1lcj86IE5vZGVKUy5UaW1lb3V0O1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogR3FsZGJDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmluaXRDb25uZWN0aW9ucygpO1xuICAgIHRoaXMuc3RhcnRIZWFsdGhDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q29ubmVjdGlvbnMoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBob3N0IG9mIHRoaXMuY29uZmlnLmhvc3RzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb25uID0gdGhpcy5jcmVhdGVDb25uZWN0aW9uKGhvc3QpO1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChob3N0LCBjb25uKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gQ29udGludWUgd2l0aCBvdGhlciBob3N0c1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY29ubmVjdCB0byAke2hvc3R9OmAsIGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbm5lY3Rpb25zLnNpemUgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBBbGxIb3N0c0ZhaWxlZEVycm9yKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb25uZWN0aW9uKGhvc3Q6IHN0cmluZyk6IENvbm5lY3Rpb24ge1xuICAgIGxldCBjcmVkZW50aWFsczogZ3JwYy5DaGFubmVsQ3JlZGVudGlhbHM7XG5cbiAgICBpZiAodGhpcy5jb25maWcudGxzT3B0aW9ucykge1xuICAgICAgY3JlZGVudGlhbHMgPSBncnBjLmNyZWRlbnRpYWxzLmNyZWF0ZVNzbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjcmVkZW50aWFscyA9IGdycGMuY3JlZGVudGlhbHMuY3JlYXRlSW5zZWN1cmUoKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zOiBncnBjLkNoYW5uZWxPcHRpb25zID0ge1xuICAgICAgJ2dycGMubWF4X3JlY2VpdmVfbWVzc2FnZV9sZW5ndGgnOiB0aGlzLmNvbmZpZy5tYXhSZWN2U2l6ZSA/PyA2NCAqIDEwMjQgKiAxMDI0LFxuICAgICAgJ2dycGMubWF4X3NlbmRfbWVzc2FnZV9sZW5ndGgnOiB0aGlzLmNvbmZpZy5tYXhSZWN2U2l6ZSA/PyA2NCAqIDEwMjQgKiAxMDI0LFxuICAgICAgJ2dycGMua2VlcGFsaXZlX3RpbWVfbXMnOiAzMDAwMCxcbiAgICAgICdncnBjLmtlZXBhbGl2ZV90aW1lb3V0X21zJzogMTAwMDAsXG4gICAgICAnZ3JwYy5rZWVwYWxpdmVfcGVybWl0X3dpdGhvdXRfY2FsbHMnOiAxLFxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgYSBnZW5lcmljIGNsaWVudCBmb3IgdGhlIGNoYW5uZWxcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgZ3JwYy5DbGllbnQoaG9zdCwgY3JlZGVudGlhbHMsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGhvc3QsXG4gICAgICBjbGllbnQsXG4gICAgICBoZWFsdGh5OiB0cnVlLFxuICAgICAgbGFzdFBpbmc6IERhdGUubm93KCksXG4gICAgICBjb25zZWN1dGl2ZVVuaGVhbHRoeTogMCxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEdldCBhIGhlYWx0aHkgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sICovXG4gIGdldENvbm5lY3Rpb24oKTogZ3JwYy5DbGllbnQge1xuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IENvbm5lY3Rpb25DbG9zZWRFcnJvcigpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29ubiBvZiB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpKSB7XG4gICAgICBpZiAoY29ubi5oZWFsdGh5KSB7XG4gICAgICAgIHJldHVybiBjb25uLmNsaWVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgTm9Db25uZWN0aW9uRXJyb3IoKTtcbiAgfVxuXG4gIC8qKiBHZXQgYSBjb25uZWN0aW9uIGZvciBhIHNwZWNpZmljIGhvc3QgKi9cbiAgZ2V0Q29ubmVjdGlvbkZvckhvc3QoaG9zdDogc3RyaW5nKTogZ3JwYy5DbGllbnQge1xuICAgIGNvbnN0IGNvbm4gPSB0aGlzLmNvbm5lY3Rpb25zLmdldChob3N0KTtcbiAgICBpZiAoIWNvbm4gfHwgIWNvbm4uaGVhbHRoeSkge1xuICAgICAgdGhyb3cgbmV3IE5vQ29ubmVjdGlvbkVycm9yKCk7XG4gICAgfVxuICAgIHJldHVybiBjb25uLmNsaWVudDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRIZWFsdGhDaGVjaygpOiB2b2lkIHtcbiAgICBjb25zdCBpbnRlcnZhbCA9IHRoaXMuY29uZmlnLmhlYWx0aENoZWNrSW50ZXJ2YWwgPz8gMzAwMDA7XG4gICAgaWYgKGludGVydmFsID4gMCkge1xuICAgICAgdGhpcy5oZWFsdGhDaGVja1RpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5jaGVja0hlYWx0aCgpLCBpbnRlcnZhbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhlYWx0aC1jaGVjayB0aWNrLiAgQ29ubmVjdGl2aXR5LXN0YXRlIHNlbWFudGljczpcbiAgICogIC0gUkVBRFkgLyBJRExFICAgICAgICAg4oaSIGhlYWx0aHk7IHJlc2V0IHRoZSB1bmhlYWx0aHkgY291bnRlci5cbiAgICogIC0gQ09OTkVDVElORyAgICAgICAgICAg4oaSIHRyYW5zaWVudDsgbGV0IHRoZSBjaGFubmVsIGhlYWwgaXRzZWxmLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb24ndCBjb3VudCB0b3dhcmQgdW5oZWFsdGh5LlxuICAgKiAgLSBTSFVURE9XTiAgICAgICAgICAgICDihpIgdGVybWluYWw7IHJlY29ubmVjdCBpbW1lZGlhdGVseS5cbiAgICogIC0gVFJBTlNJRU5UX0ZBSUxVUkUgICAg4oaSIGNvdW50IHRvd2FyZCB1bmhlYWx0aHk7IHJlY29ubmVjdCBvbmx5XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIFVOSEVBTFRIWV9SRUNPTk5FQ1RfVEhSRVNIT0xEXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlY3V0aXZlIHRpY2tzLlxuICAgKlxuICAgKiBSZWNvbm5lY3QgcmVwbGFjZXMgdGhlIHBvb2wncyBjaGFubmVsIHJlZmVyZW5jZTsgaXQgZG9lcyBOT1QgY2xvc2VcbiAgICogdGhlIG9sZCBjaGFubmVsLCBzbyBpbi1mbGlnaHQgUlBDcyBjb250aW51ZSB0byBjb21wbGV0aW9uIG9uIGl0LlxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja0hlYWx0aCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFtob3N0LCBjb25uXSBvZiB0aGlzLmNvbm5lY3Rpb25zKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IGNvbm4uY2xpZW50LmdldENoYW5uZWwoKS5nZXRDb25uZWN0aXZpdHlTdGF0ZShmYWxzZSk7XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gZ3JwYy5jb25uZWN0aXZpdHlTdGF0ZS5SRUFEWSB8fFxuICAgICAgICAgIHN0YXRlID09PSBncnBjLmNvbm5lY3Rpdml0eVN0YXRlLklETEUpIHtcbiAgICAgICAgY29ubi5oZWFsdGh5ID0gdHJ1ZTtcbiAgICAgICAgY29ubi5jb25zZWN1dGl2ZVVuaGVhbHRoeSA9IDA7XG4gICAgICAgIGNvbm4ubGFzdFBpbmcgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBncnBjLmNvbm5lY3Rpdml0eVN0YXRlLkNPTk5FQ1RJTkcpIHtcbiAgICAgICAgLy8gVHJhbnNpZW50IOKAlCBsZXQgdGhlIGNoYW5uZWwgaGVhbCBpdHNlbGYuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IGdycGMuY29ubmVjdGl2aXR5U3RhdGUuU0hVVERPV04pIHtcbiAgICAgICAgY29ubi5oZWFsdGh5ID0gZmFsc2U7XG4gICAgICAgIGNvbm4uY29uc2VjdXRpdmVVbmhlYWx0aHkgPSBVTkhFQUxUSFlfUkVDT05ORUNUX1RIUkVTSE9MRDtcbiAgICAgICAgdGhpcy5yZWNvbm5lY3QoaG9zdCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBUUkFOU0lFTlRfRkFJTFVSRSBvciBhbnkgb3RoZXIgbm9uLVJFQURZIHN0YXRlLlxuICAgICAgY29ubi5jb25zZWN1dGl2ZVVuaGVhbHRoeSsrO1xuICAgICAgaWYgKGNvbm4uY29uc2VjdXRpdmVVbmhlYWx0aHkgPj0gVU5IRUFMVEhZX1JFQ09OTkVDVF9USFJFU0hPTEQpIHtcbiAgICAgICAgY29ubi5oZWFsdGh5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVjb25uZWN0KGhvc3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIHRoZSBwb29sJ3MgY2hhbm5lbCBmb3IgYGhvc3RgIHdpdGggYSBmcmVzaCBvbmUuXG4gICAqXG4gICAqIENyaXRpY2FsbHksIGRvZXMgTk9UIGNsb3NlIHRoZSBvbGQgY2hhbm5lbC4gIEluLWZsaWdodCBSUENzIGhvbGRcbiAgICogdGhlaXIgb3duIHJlZmVyZW5jZSB0byBpdCB2aWEgdGhlIGNsaWVudCB0aGV5IHdlcmUgaXNzdWVkIG9uIGFuZFxuICAgKiBjb250aW51ZSB0byBjb21wbGV0aW9uIG9uIHRoYXQgY2hhbm5lbDsgdGhlIE5vZGUuanMgcnVudGltZSdzXG4gICAqIGdhcmJhZ2UgY29sbGVjdG9yIHJlbGVhc2VzIHRoZSBvbGQgY2hhbm5lbCBvbmx5IGFmdGVyIGV2ZXJ5XG4gICAqIGluLWZsaWdodCBSUEMgaGFzIHJlc29sdmVkLlxuICAgKlxuICAgKiBFYXJsaWVyIHZlcnNpb25zIGNsb3NlZCB0aGUgb2xkIGNoYW5uZWwgc3luY2hyb25vdXNseSBoZXJlLCB3aGljaFxuICAgKiBjYW5jZWxsZWQgZXZlcnkgcGVuZGluZyBSUEMgd2l0aCBhIFwiQ2hhbm5lbCBjbG9zZWQhXCItc3R5bGUgZXJyb3IuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlY29ubmVjdChob3N0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICAvLyBCdWlsZCB0aGUgbmV3IGNvbm5lY3Rpb24gdXAtZnJvbnQ7IG9ubHkgc3dhcCBpZiBpdCBzdWNjZWVkcy5cbiAgICAgIGNvbnN0IG5ld0Nvbm4gPSB0aGlzLmNyZWF0ZUNvbm5lY3Rpb24oaG9zdCk7XG4gICAgICAvLyBPdmVyd3JpdGUgdGhlIHBvb2wgZW50cnkuICBUaGUgb2xkIENvbm5lY3Rpb24gaXMgbm93XG4gICAgICAvLyB1bnJlZmVyZW5jZWQgYnkgdGhlIHBvb2w7IGluLWZsaWdodCBSUENzIHN0aWxsIGhvbGQgaXRzXG4gICAgICAvLyBncnBjLkNsaWVudCBhbGl2ZSB2aWEgcGVyLWNhbGwgcmVmZXJlbmNlcy4gIE9uY2UgdGhleVxuICAgICAgLy8gY29tcGxldGUgdGhlIGNsaWVudCBiZWNvbWVzIGdhcmJhZ2UgYW5kIGdSUEMgY2xvc2VzIGl0XG4gICAgICAvLyBuYXR1cmFsbHkuXG4gICAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChob3N0LCBuZXdDb25uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcmVjb25uZWN0IHRvICR7aG9zdH06YCwgZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENsb3NlIGFsbCBjb25uZWN0aW9ucyBpbiB0aGUgcG9vbCAqL1xuICBjbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcblxuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmhlYWx0aENoZWNrVGltZXIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5oZWFsdGhDaGVja1RpbWVyKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvbm4gb2YgdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29ubi5jbGllbnQuY2xvc2UoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gSWdub3JlXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb25uZWN0aW9ucy5jbGVhcigpO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgbnVtYmVyIG9mIGhlYWx0aHkgaG9zdHMgKi9cbiAgaGVhbHRoeUhvc3RDb3VudCgpOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgZm9yIChjb25zdCBjb25uIG9mIHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkpIHtcbiAgICAgIGlmIChjb25uLmhlYWx0aHkpIGNvdW50Kys7XG4gICAgfVxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIGxpc3Qgb2YgY29uZmlndXJlZCBob3N0cyAqL1xuICBob3N0cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5jb25uZWN0aW9ucy5rZXlzKCkpO1xuICB9XG5cbiAgLyoqIENoZWNrIGlmIHRoZSBwb29sIGlzIGNsb3NlZCAqL1xuICBpc0Nsb3NlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZWQ7XG4gIH1cbn1cbiJdfQ==
@@ -186,7 +186,8 @@ function createTypedValue(value) {
186
186
  }
187
187
  if ((0, data_types_1.isGqldbLocalDateTime)(value)) {
188
188
  const data = Buffer.alloc(11);
189
- data.writeUInt16LE(value.year, 0);
189
+ // year is signed int16 so BCE years (e.g. -44) round-trip.
190
+ data.writeInt16LE(value.year, 0);
190
191
  data.writeUInt8(value.month, 2);
191
192
  data.writeUInt8(value.day, 3);
192
193
  data.writeUInt8(value.hour, 4);
@@ -197,7 +198,8 @@ function createTypedValue(value) {
197
198
  }
198
199
  if ((0, data_types_1.isGqldbDate)(value)) {
199
200
  const data = Buffer.alloc(8);
200
- data.writeUInt16LE(value.year, 0);
201
+ // year is signed int16 so BCE years (e.g. -44) round-trip.
202
+ data.writeInt16LE(value.year, 0);
201
203
  data.writeUInt8(value.month, 2);
202
204
  data.writeUInt8(value.day, 3);
203
205
  // bytes 4-7 are padding (zeros)
@@ -205,7 +207,8 @@ function createTypedValue(value) {
205
207
  }
206
208
  if ((0, data_types_1.isGqldbZonedDateTime)(value)) {
207
209
  const data = Buffer.alloc(13);
208
- data.writeUInt16LE(value.year, 0);
210
+ // year is signed int16 so BCE years (e.g. -44) round-trip.
211
+ data.writeInt16LE(value.year, 0);
209
212
  data.writeUInt8(value.month, 2);
210
213
  data.writeUInt8(value.day, 3);
211
214
  data.writeUInt8(value.hour, 4);
@@ -318,7 +321,8 @@ function typedValueToJS(tv) {
318
321
  case enums_1.PropertyType.DATE:
319
322
  if (tv.data.length >= 4) {
320
323
  return {
321
- year: tv.data.readUInt16LE(0),
324
+ // year is signed int16 so BCE years (e.g. -44) round-trip.
325
+ year: tv.data.readInt16LE(0),
322
326
  month: tv.data.readUInt8(2),
323
327
  day: tv.data.readUInt8(3),
324
328
  };
@@ -348,7 +352,8 @@ function typedValueToJS(tv) {
348
352
  case enums_1.PropertyType.ZONED_DATETIME:
349
353
  if (tv.data.length >= 13) {
350
354
  return {
351
- year: tv.data.readUInt16LE(0),
355
+ // year is signed int16 so BCE years (e.g. -44) round-trip.
356
+ year: tv.data.readInt16LE(0),
352
357
  month: tv.data.readUInt8(2),
353
358
  day: tv.data.readUInt8(3),
354
359
  hour: tv.data.readUInt8(4),
@@ -362,7 +367,9 @@ function typedValueToJS(tv) {
362
367
  case enums_1.PropertyType.LOCAL_DATETIME:
363
368
  case enums_1.PropertyType.DATETIME:
364
369
  if (tv.data.length >= 11) {
365
- return (0, data_types_1.createLocalDateTime)(tv.data.readUInt16LE(0), // year
370
+ return (0, data_types_1.createLocalDateTime)(
371
+ // year is signed int16 so BCE years (e.g. -44) round-trip.
372
+ tv.data.readInt16LE(0), // year
366
373
  tv.data.readUInt8(2), // month
367
374
  tv.data.readUInt8(3), // day
368
375
  tv.data.readUInt8(4), // hour
@@ -748,7 +755,8 @@ function formatValue(tv) {
748
755
  case enums_1.PropertyType.DATE: {
749
756
  if (tv.data.length < 4)
750
757
  return '0000-00-00';
751
- const y = tv.data.readUInt16LE(0);
758
+ // year is signed int16 so BCE years (e.g. -44) round-trip.
759
+ const y = tv.data.readInt16LE(0);
752
760
  const m = tv.data.readUInt8(2);
753
761
  const d = tv.data.readUInt8(3);
754
762
  return `${pad(y, 4)}-${pad(m, 2)}-${pad(d, 2)}`;
@@ -776,7 +784,8 @@ function formatValue(tv) {
776
784
  case enums_1.PropertyType.DATETIME: {
777
785
  if (tv.data.length < 11)
778
786
  return '0000-00-00 00:00:00';
779
- const y = tv.data.readUInt16LE(0);
787
+ // year is signed int16 so BCE years (e.g. -44) round-trip.
788
+ const y = tv.data.readInt16LE(0);
780
789
  const mo = tv.data.readUInt8(2);
781
790
  const d = tv.data.readUInt8(3);
782
791
  const h = tv.data.readUInt8(4);
@@ -788,7 +797,8 @@ function formatValue(tv) {
788
797
  case enums_1.PropertyType.ZONED_DATETIME: {
789
798
  if (tv.data.length < 13)
790
799
  return '0000-00-00 00:00:00+00:00';
791
- const y = tv.data.readUInt16LE(0);
800
+ // year is signed int16 so BCE years (e.g. -44) round-trip.
801
+ const y = tv.data.readInt16LE(0);
792
802
  const mo = tv.data.readUInt8(2);
793
803
  const d = tv.data.readUInt8(3);
794
804
  const h = tv.data.readUInt8(4);
@@ -927,7 +937,8 @@ function fromString(s, targetType) {
927
937
  // "yyyy-MM-dd"
928
938
  const parts = s.split('-');
929
939
  const data = Buffer.alloc(8);
930
- data.writeUInt16LE(parseInt(parts[0], 10), 0);
940
+ // year is signed int16 so BCE years (e.g. -44) round-trip.
941
+ data.writeInt16LE(parseInt(parts[0], 10), 0);
931
942
  data.writeUInt8(parseInt(parts[1], 10), 2);
932
943
  data.writeUInt8(parseInt(parts[2], 10), 3);
933
944
  return { type: enums_1.PropertyType.DATE, data, isNull: false };
@@ -967,7 +978,8 @@ function fromString(s, targetType) {
967
978
  const dp = datePart.split('-');
968
979
  const { hour, minute, second, nanosecond } = parseTimeString(timePart);
969
980
  const data = Buffer.alloc(11);
970
- data.writeUInt16LE(parseInt(dp[0], 10), 0);
981
+ // year is signed int16 so BCE years (e.g. -44) round-trip.
982
+ data.writeInt16LE(parseInt(dp[0], 10), 0);
971
983
  data.writeUInt8(parseInt(dp[1], 10), 2);
972
984
  data.writeUInt8(parseInt(dp[2], 10), 3);
973
985
  data.writeUInt8(hour, 4);
@@ -987,7 +999,8 @@ function fromString(s, targetType) {
987
999
  const { hour, minute, second, nanosecond } = parseTimeString(timePart);
988
1000
  const offMin = parseOffset(offsetPart);
989
1001
  const data = Buffer.alloc(13);
990
- data.writeUInt16LE(parseInt(dp[0], 10), 0);
1002
+ // year is signed int16 so BCE years (e.g. -44) round-trip.
1003
+ data.writeInt16LE(parseInt(dp[0], 10), 0);
991
1004
  data.writeUInt8(parseInt(dp[1], 10), 2);
992
1005
  data.writeUInt8(parseInt(dp[2], 10), 3);
993
1006
  data.writeUInt8(hour, 4);
@@ -1198,4 +1211,4 @@ function normalizeOffset(s) {
1198
1211
  function createParameter(name, value) {
1199
1212
  return { name, value: createTypedValue(value) };
1200
1213
  }
1201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRfdmFsdWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvdHlwZWRfdmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOztBQTBISCw0Q0FpTkM7QUFRRCx3Q0F1TUM7QUFvVUQsa0NBNEpDO0FBV0QsZ0NBK1FDO0FBeUZELDBDQUVDO0FBNzJDRCxtQ0FBdUM7QUFDdkMseUNBQTREO0FBQzVELDZDQThCc0I7QUFZdEIsZ0ZBQWdGO0FBQ2hGLHdCQUF3QjtBQUN4QixnRkFBZ0Y7QUFFaEYsb0VBQW9FO0FBQ3BFLFNBQVMsWUFBWSxDQUFDLENBQVM7SUFDN0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsd0VBQXdFO0FBQ3hFLFNBQVMsWUFBWSxDQUFDLElBQVksRUFBRSxNQUFjO0lBQ2hELElBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxJQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxPQUFPLENB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S0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUNuQyxDQUFDO0lBQ0Qsd0RBQXdEO0lBQ3hELE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUM3RCxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBU0QsNkNBQTZDO0FBQzdDLFNBQWdCLGVBQWUsQ0FBQyxJQUFZLEVBQUUsS0FBVTtJQUN0RCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFR5cGVkVmFsdWUgZW5jb2RpbmcgYW5kIGRlY29kaW5nIGZvciBHUUxEQiBOb2RlLmpzIGRyaXZlci5cbiAqL1xuXG5pbXBvcnQgeyBQcm9wZXJ0eVR5cGUgfSBmcm9tICcuL2VudW1zJztcbmltcG9ydCB7IEludDMyLCBVSW50MzIsIEZsb2F0MzIsIFVJbnQ2NCB9IGZyb20gJy4vd3JhcHBlcnMnO1xuaW1wb3J0IHtcbiAgUG9pbnQsXG4gIFBvaW50M0QsXG4gIEdxbGRiRGVjaW1hbCxcbiAgR3FsZGJUaW1lc3RhbXAsXG4gIEdxbGRiTG9jYWxEYXRlVGltZSxcbiAgR3FsZGJEYXRlLFxuICBHcWxkYlpvbmVkRGF0ZVRpbWUsXG4gIEdxbGRiTG9jYWxUaW1lLFxuICBHcWxkYlpvbmVkVGltZSxcbiAgR3FsZGJUYWJsZSxcbiAgWWVhclRvTW9udGgsXG4gIERheVRvU2Vjb25kLFxuICBWZWN0b3IsXG4gIGlzUG9pbnQsXG4gIGlzUG9pbnQzRCxcbiAgaXNHcWxkYkRlY2ltYWwsXG4gIGlzR3FsZGJUaW1lc3RhbXAsXG4gIGlzR3FsZGJMb2NhbERhdGVUaW1lLFxuICBpc0dxbGRiRGF0ZSxcbiAgaXNHcWxkYlpvbmVkRGF0ZVRpbWUsXG4gIGlzR3FsZGJMb2NhbFRpbWUsXG4gIGlzR3FsZGJab25lZFRpbWUsXG4gIGlzWWVhclRvTW9udGgsXG4gIGlzRGF5VG9TZWNvbmQsXG4gIGlzVmVjdG9yLFxuICBpc0dxbGRiU2V0LFxuICB0aW1lc3RhbXBGcm9tRGF0ZSxcbiAgY3JlYXRlVGltZXN0YW1wLFxuICBjcmVhdGVMb2NhbERhdGVUaW1lLFxufSBmcm9tICcuL2RhdGFfdHlwZXMnO1xuaW1wb3J0IHsgR3FsZGJOb2RlLCBHcWxkYkVkZ2UsIEdxbGRiUGF0aCwgR3FsZGJFcnJvciB9IGZyb20gJy4vZ3JhcGhfbW9kZWxzJztcblxuXG4vKiogUmVwcmVzZW50cyBhIHR5cGVkIHZhbHVlIGZvciB3aXJlIHRyYW5zbWlzc2lvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeXBlZFZhbHVlIHtcbiAgdHlwZTogUHJvcGVydHlUeXBlO1xuICBkYXRhOiBCdWZmZXI7XG4gIGlzTnVsbDogYm9vbGVhbjtcbn1cblxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQmluYXJ5IEZvcm1hdCBIZWxwZXJzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogRW5jb2RlIGEgbGVuZ3RoLXByZWZpeGVkIHN0cmluZzogW2xlbjoyIHVpbnQxNkxFXVt1dGY4IGJ5dGVzXSAqL1xuZnVuY3Rpb24gZW5jb2RlU3RyaW5nKHM6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHN0ckJ1ZiA9IEJ1ZmZlci5mcm9tKHMsICd1dGYtOCcpO1xuICBjb25zdCByZXN1bHQgPSBCdWZmZXIuYWxsb2MoMiArIHN0ckJ1Zi5sZW5ndGgpO1xuICByZXN1bHQud3JpdGVVSW50MTZMRShzdHJCdWYubGVuZ3RoLCAwKTtcbiAgc3RyQnVmLmNvcHkocmVzdWx0LCAyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIERlY29kZSBhIGxlbmd0aC1wcmVmaXhlZCBzdHJpbmcuIFJldHVybnMgW3N0cmluZywgYnl0ZXNDb25zdW1lZF0uICovXG5mdW5jdGlvbiBkZWNvZGVTdHJpbmcoZGF0YTogQnVmZmVyLCBvZmZzZXQ6IG51bWJlcik6IFtzdHJpbmcsIG51bWJlcl0ge1xuICBpZiAob2Zmc2V0ICsgMiA+IGRhdGEubGVuZ3RoKSByZXR1cm4gWycnLCAwXTtcbiAgY29uc3QgbGVuID0gZGF0YS5yZWFkVUludDE2TEUob2Zmc2V0KTtcbiAgaWYgKG9mZnNldCArIDIgKyBsZW4gPiBkYXRhLmxlbmd0aCkgcmV0dXJuIFsnJywgMF07XG4gIHJldHVybiBbZGF0YS5zbGljZShvZmZzZXQgKyAyLCBvZmZzZXQgKyAyICsgbGVuKS50b1N0cmluZygndXRmLTgnKSwgMiArIGxlbl07XG59XG5cbi8qKiBFbmNvZGUgYSBUeXBlZFZhbHVlRW50cnk6IFt0eXBlOjFdW2lzTnVsbDoxXVtkYXRhTGVuOjQgdWludDMyTEVdW2RhdGFdICovXG5mdW5jdGlvbiBlbmNvZGVUeXBlZFZhbHVlRW50cnkodHY6IFR5cGVkVmFsdWUpOiBCdWZmZXIge1xuICBjb25zdCByZXN1bHQgPSBCdWZmZXIuYWxsb2MoNiArIHR2LmRhdGEubGVuZ3RoKTtcbiAgcmVzdWx0LndyaXRlVUludDgodHYudHlwZSwgMCk7XG4gIHJlc3VsdC53cml0ZVVJbnQ4KHR2LmlzTnVsbCA/IDEgOiAwLCAxKTtcbiAgcmVzdWx0LndyaXRlVUludDMyTEUodHYuZGF0YS5sZW5ndGgsIDIpO1xuICBpZiAodHYuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgdHYuZGF0YS5jb3B5KHJlc3VsdCwgNik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIERlY29kZSBhIFR5cGVkVmFsdWVFbnRyeS4gUmV0dXJucyBbVHlwZWRWYWx1ZSwgYnl0ZXNDb25zdW1lZF0uICovXG5mdW5jdGlvbiBkZWNvZGVUeXBlZFZhbHVlRW50cnkoZGF0YTogQnVmZmVyLCBvZmZzZXQ6IG51bWJlcik6IFtUeXBlZFZhbHVlLCBudW1iZXJdIHtcbiAgaWYgKG9mZnNldCArIDYgPiBkYXRhLmxlbmd0aCkge1xuICAgIHJldHVybiBbeyB0eXBlOiBQcm9wZXJ0eVR5cGUuTlVMTCwgZGF0YTogQnVmZmVyLmFsbG9jKDApLCBpc051bGw6IHRydWUgfSwgMF07XG4gIH1cbiAgY29uc3QgdHlwZSA9IGRhdGEucmVhZFVJbnQ4KG9mZnNldCkgYXMgUHJvcGVydHlUeXBlO1xuICBjb25zdCBpc051bGwgPSBkYXRhLnJlYWRVSW50OChvZmZzZXQgKyAxKSAhPT0gMDtcbiAgY29uc3QgZGF0YUxlbiA9IGRhdGEucmVhZFVJbnQzMkxFKG9mZnNldCArIDIpO1xuICBpZiAob2Zmc2V0ICsgNiArIGRhdGFMZW4gPiBkYXRhLmxlbmd0aCkge1xuICAgIHJldHVybiBbeyB0eXBlOiBQcm9wZXJ0eVR5cGUuTlVMTCwgZGF0YTogQnVmZmVyLmFsbG9jKDApLCBpc051bGw6IHRydWUgfSwgMF07XG4gIH1cbiAgY29uc3QgdHZEYXRhID0gZGF0YS5zbGljZShvZmZzZXQgKyA2LCBvZmZzZXQgKyA2ICsgZGF0YUxlbik7XG4gIHJldHVybiBbeyB0eXBlLCBkYXRhOiB0dkRhdGEsIGlzTnVsbCB9LCA2ICsgZGF0YUxlbl07XG59XG5cbi8qKiBEZWNvZGUgYmluYXJ5IHByb3BlcnRpZXM6IFtjb3VudDoyXVtrZXlMZW46Ml1ba2V5XVtUVkVdLi4uICovXG5mdW5jdGlvbiBkZWNvZGVQcm9wZXJ0aWVzQmluYXJ5KGRhdGE6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIpOiBbUmVjb3JkPHN0cmluZywgYW55PiwgbnVtYmVyXSB7XG4gIGlmIChvZmZzZXQgKyAyID4gZGF0YS5sZW5ndGgpIHJldHVybiBbe30sIDBdO1xuICBjb25zdCBjb3VudCA9IGRhdGEucmVhZFVJbnQxNkxFKG9mZnNldCk7XG4gIGxldCBwb3MgPSBvZmZzZXQgKyAyO1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBjb25zdCBba2V5LCBrZXlMZW5dID0gZGVjb2RlU3RyaW5nKGRhdGEsIHBvcyk7XG4gICAgaWYgKGtleUxlbiA9PT0gMCkgYnJlYWs7XG4gICAgcG9zICs9IGtleUxlbjtcblxuICAgIGNvbnN0IFt0diwgdHZMZW5dID0gZGVjb2RlVHlwZWRWYWx1ZUVudHJ5KGRhdGEsIHBvcyk7XG4gICAgaWYgKHR2TGVuID09PSAwKSBicmVhaztcbiAgICBwb3MgKz0gdHZMZW47XG5cbiAgICByZXN1bHRba2V5XSA9IHR5cGVkVmFsdWVUb0pTKHR2KTtcbiAgfVxuXG4gIHJldHVybiBbcmVzdWx0LCBwb3MgLSBvZmZzZXRdO1xufVxuXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFbmNvZGluZzogSlMg4oaSIFR5cGVkVmFsdWVcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBDcmVhdGUgYSBUeXBlZFZhbHVlIGZyb20gYSBKYXZhU2NyaXB0IHZhbHVlICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHlwZWRWYWx1ZSh2YWx1ZTogYW55KTogVHlwZWRWYWx1ZSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLk5VTEwsIGRhdGE6IEJ1ZmZlci5hbGxvYygwKSwgaXNOdWxsOiB0cnVlIH07XG4gIH1cblxuICAvLyBQYXNzLXRocm91Z2g6IGlmIGFscmVhZHkgYSBUeXBlZFZhbHVlLCByZXR1cm4gZGlyZWN0bHlcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3R5cGUnIGluIHZhbHVlICYmICdkYXRhJyBpbiB2YWx1ZSAmJiAnaXNOdWxsJyBpbiB2YWx1ZSAmJiB2YWx1ZS5kYXRhIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIFR5cGVkVmFsdWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDEpO1xuICAgIGRhdGEud3JpdGVVSW50OCh2YWx1ZSA/IDEgOiAwLCAwKTtcbiAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuQk9PTCwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICB9XG5cbiAgLy8gSGFuZGxlIGV4cGxpY2l0IHR5cGUgd3JhcHBlcnNcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgSW50MzIpIHtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDQpO1xuICAgIGRhdGEud3JpdGVJbnQzMkxFKHZhbHVlLnZhbHVlLCAwKTtcbiAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuSU5UMzIsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgfVxuXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVJbnQzMikge1xuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoNCk7XG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKHZhbHVlLnZhbHVlLCAwKTtcbiAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuVUlOVDMyLCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gIH1cblxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGbG9hdDMyKSB7XG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICBkYXRhLndyaXRlRmxvYXRMRSh2YWx1ZS52YWx1ZSwgMCk7XG4gICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLkZMT0FULCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gIH1cblxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVSW50NjQpIHtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDgpO1xuICAgIGRhdGEud3JpdGVCaWdVSW50NjRMRSh2YWx1ZS52YWx1ZSwgMCk7XG4gICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLlVJTlQ2NCwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAvLyBVc2UgaXNTYWZlSW50ZWdlciB0byBhdm9pZCBpc3N1ZXMgd2l0aCBsYXJnZSBmbG9hdHMgbGlrZSBOdW1iZXIuTUFYX1ZBTFVFXG4gICAgLy8gd2hpY2ggYXBwZWFyIGFzIGludGVnZXJzIGR1ZSB0byBwcmVjaXNpb24gbG9zc1xuICAgIGlmIChOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoOCk7XG4gICAgICBkYXRhLndyaXRlQmlnSW50NjRMRShCaWdJbnQodmFsdWUpLCAwKTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5JTlQ2NCwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDgpO1xuICAgICAgZGF0YS53cml0ZURvdWJsZUxFKHZhbHVlLCAwKTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5ET1VCTEUsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50Jykge1xuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoOCk7XG4gICAgLy8gQ2hlY2sgaWYgdmFsdWUgZml0cyBpbiBzaWduZWQgSU5UNjQgcmFuZ2VcbiAgICBjb25zdCBJTlQ2NF9NSU4gPSBCaWdJbnQoJy05MjIzMzcyMDM2ODU0Nzc1ODA4Jyk7XG4gICAgY29uc3QgSU5UNjRfTUFYID0gQmlnSW50KCc5MjIzMzcyMDM2ODU0Nzc1ODA3Jyk7XG4gICAgaWYgKHZhbHVlID49IElOVDY0X01JTiAmJiB2YWx1ZSA8PSBJTlQ2NF9NQVgpIHtcbiAgICAgIGRhdGEud3JpdGVCaWdJbnQ2NExFKHZhbHVlLCAwKTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5JTlQ2NCwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWYWx1ZSBpcyBvdXRzaWRlIElOVDY0IHJhbmdlLCB1c2UgVUlOVDY0XG4gICAgICBkYXRhLndyaXRlQmlnVUludDY0TEUodmFsdWUsIDApO1xuICAgICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLlVJTlQ2NCwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLlNUUklORywgZGF0YTogQnVmZmVyLmZyb20odmFsdWUsICd1dGYtOCcpLCBpc051bGw6IGZhbHNlIH07XG4gIH1cblxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5CTE9CLCBkYXRhOiB2YWx1ZSwgaXNOdWxsOiBmYWxzZSB9O1xuICB9XG5cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIGNvbnN0IHVuaXhTZWNvbmRzID0gQmlnSW50KE1hdGguZmxvb3IodmFsdWUuZ2V0VGltZSgpIC8gMTAwMCkpO1xuICAgIGNvbnN0IG5hbm9zID0gKHZhbHVlLmdldFRpbWUoKSAlIDEwMDApICogMV8wMDBfMDAwO1xuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMTIpO1xuICAgIGRhdGEud3JpdGVCaWdJbnQ2NExFKHVuaXhTZWNvbmRzLCAwKTtcbiAgICBkYXRhLndyaXRlVUludDMyTEUobmFub3MgPCAwID8gbmFub3MgKyAxXzAwMF8wMDBfMDAwIDogbmFub3MsIDgpO1xuICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5USU1FU1RBTVAsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgfVxuXG4gIGlmIChpc0dxbGRiVGltZXN0YW1wKHZhbHVlKSkge1xuICAgIGNvbnN0IHVuaXhTZWNvbmRzID0gQmlnSW50KE1hdGguZmxvb3IoXG4gICAgICBEYXRlLlVUQyh2YWx1ZS55ZWFyLCB2YWx1ZS5tb250aCAtIDEsIHZhbHVlLmRheSwgdmFsdWUuaG91ciwgdmFsdWUubWludXRlLCB2YWx1ZS5zZWNvbmQpIC8gMTAwMFxuICAgICkpO1xuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMTIpO1xuICAgIGRhdGEud3JpdGVCaWdJbnQ2NExFKHVuaXhTZWNvbmRzLCAwKTtcbiAgICBkYXRhLndyaXRlVUludDMyTEUodmFsdWUubmFub3NlY29uZCwgOCk7XG4gICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLlRJTUVTVEFNUCwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGVuY29kZUxpc3QodmFsdWUpO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIG5ldyB0eXBlcyBiZWZvcmUgZ2VuZXJpYyBvYmplY3QgaGFuZGxpbmdcbiAgaWYgKGlzUG9pbnQodmFsdWUpKSB7XG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYygxNik7XG4gICAgZGF0YS53cml0ZURvdWJsZUxFKHZhbHVlLmxvbmdpdHVkZSwgMCk7XG4gICAgZGF0YS53cml0ZURvdWJsZUxFKHZhbHVlLmxhdGl0dWRlLCA4KTtcbiAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuUE9JTlQsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgfVxuXG4gIGlmIChpc1BvaW50M0QodmFsdWUpKSB7XG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYygyNCk7XG4gICAgZGF0YS53cml0ZURvdWJsZUxFKHZhbHVlLngsIDApO1xuICAgIGRhdGEud3JpdGVEb3VibGVMRSh2YWx1ZS55LCA4KTtcbiAgICBkYXRhLndyaXRlRG91YmxlTEUodmFsdWUueiwgMTYpO1xuICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5QT0lOVDNELCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gIH1cblxuICBpZiAoaXNHcWxkYkRlY2ltYWwodmFsdWUpKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLkRFQ0lNQUwsIGRhdGE6IEJ1ZmZlci5mcm9tKHZhbHVlLnZhbHVlLCAndXRmLTgnKSwgaXNOdWxsOiBmYWxzZSB9O1xuICB9XG5cbiAgaWYgKGlzR3FsZGJMb2NhbERhdGVUaW1lKHZhbHVlKSkge1xuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMTEpO1xuICAgIGRhdGEud3JpdGVVSW50MTZMRSh2YWx1ZS55ZWFyLCAwKTtcbiAgICBkYXRhLndyaXRlVUludDgodmFsdWUubW9udGgsIDIpO1xuICAgIGRhdGEud3JpdGVVSW50OCh2YWx1ZS5kYXksIDMpO1xuICAgIGRhdGEud3JpdGVVSW50OCh2YWx1ZS5ob3VyLCA0KTtcbiAgICBkYXRhLndyaXRlVUludDgodmFsdWUubWludXRlLCA1KTtcbiAgICBkYXRhLndyaXRlVUludDgodmFsdWUuc2Vjb25kLCA2KTtcbiAgICBkYXRhLndyaXRlVUludDMyTEUodmFsdWUubmFub3NlY29uZCwgNyk7XG4gICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLkxPQ0FMX0RBVEVUSU1FLCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gIH1cblxuICBpZiAoaXNHcWxkYkRhdGUodmFsdWUpKSB7XG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg4KTtcbiAgICBkYXRhLndyaXRlVUludDE2TEUodmFsdWUueWVhciwgMCk7XG4gICAgZGF0YS53cml0ZVVJbnQ4KHZhbHVlLm1vbnRoLCAyKTtcbiAgICBkYXRhLndyaXRlVUludDgodmFsdWUuZGF5LCAzKTtcbiAgICAvLyBieXRlcyA0LTcgYXJlIHBhZGRpbmcgKHplcm9zKVxuICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5EQVRFLCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gIH1cblxuICBpZiAoaXNHcWxkYlpvbmVkRGF0ZVRpbWUodmFsdWUpKSB7XG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYygxMyk7XG4gICAgZGF0YS53cml0ZVVJbnQxNkxFKHZhbHVlLnllYXIsIDApO1xuICAgIGRhdGEud3JpdGVVSW50OCh2YWx1ZS5tb250aCwgMik7XG4gICAgZGF0YS53cml0ZVVJbnQ4KHZhbHVlLmRheSwgMyk7XG4gICAgZGF0YS53cml0ZVVJbnQ4KHZhbHVlLmhvdXIsIDQpO1xuICAgIGRhdGEud3JpdGVVSW50OCh2YWx1ZS5taW51dGUsIDUpO1xuICAgIGRhdGEud3JpdGVVSW50OCh2YWx1ZS5zZWNvbmQsIDYpO1xuICAgIGRhdGEud3JpdGVVSW50MzJMRSh2YWx1ZS5uYW5vc2Vjb25kLCA3KTtcbiAgICBkYXRhLndyaXRlSW50MTZMRSh2YWx1ZS5vZmZzZXRNaW51dGVzLCAxMSk7XG4gICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLlpPTkVEX0RBVEVUSU1FLCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gIH1cblxuICBpZiAoaXNHcWxkYlpvbmVkVGltZSh2YWx1ZSkpIHtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDEwKTtcbiAgICBkYXRhLndyaXRlVUludDgodmFsdWUuaG91ciwgMCk7XG4gICAgZGF0YS53cml0ZVVJbnQ4KHZhbHVlLm1pbnV0ZSwgMSk7XG4gICAgZGF0YS53cml0ZVVJbnQ4KHZhbHVlLnNlY29uZCwgMik7XG4gICAgLy8gYnl0ZSAzIGlzIHBhZGRpbmdcbiAgICBkYXRhLndyaXRlVUludDMyTEUodmFsdWUubmFub3NlY29uZCwgNCk7XG4gICAgZGF0YS53cml0ZUludDE2TEUodmFsdWUub2Zmc2V0TWludXRlcywgOCk7XG4gICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLlpPTkVEX1RJTUUsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgfVxuXG4gIGlmIChpc0dxbGRiTG9jYWxUaW1lKHZhbHVlKSkge1xuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoOCk7XG4gICAgZGF0YS53cml0ZVVJbnQ4KHZhbHVlLmhvdXIsIDApO1xuICAgIGRhdGEud3JpdGVVSW50OCh2YWx1ZS5taW51dGUsIDEpO1xuICAgIGRhdGEud3JpdGVVSW50OCh2YWx1ZS5zZWNvbmQsIDIpO1xuICAgIC8vIGJ5dGUgMyBpcyBwYWRkaW5nXG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKHZhbHVlLm5hbm9zZWNvbmQsIDQpO1xuICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5MT0NBTF9USU1FLCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gIH1cblxuICBpZiAoaXNZZWFyVG9Nb250aCh2YWx1ZSkpIHtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDQpO1xuICAgIGRhdGEud3JpdGVJbnQzMkxFKHZhbHVlLm1vbnRocywgMCk7XG4gICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLllFQVJfVE9fTU9OVEgsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgfVxuXG4gIGlmIChpc0RheVRvU2Vjb25kKHZhbHVlKSkge1xuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMTIpO1xuICAgIC8vIHNlY29uZHMgaXMgc2lnbmVkIChpbnQ2NCkgc28gbmVnYXRpdmUgZHVyYXRpb25zIHJvdW5kLXRyaXAgY29ycmVjdGx5LFxuICAgIC8vIG1hdGNoaW5nIEphdmEncyBsb25nIGFuZCBQeXRob24ncyBgPHFgIHN0cnVjdCBmb3JtYXQuXG4gICAgZGF0YS53cml0ZUJpZ0ludDY0TEUoQmlnSW50KHZhbHVlLnNlY29uZHMpLCAwKTtcbiAgICBkYXRhLndyaXRlVUludDMyTEUodmFsdWUubmFub3NlY29uZHMsIDgpO1xuICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5EQVlfVE9fU0VDT05ELCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gIH1cblxuICBpZiAoaXNWZWN0b3IodmFsdWUpKSB7XG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg0ICsgdmFsdWUudmFsdWVzLmxlbmd0aCAqIDQpO1xuICAgIGRhdGEud3JpdGVVSW50MzJMRSh2YWx1ZS52YWx1ZXMubGVuZ3RoLCAwKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZGF0YS53cml0ZUZsb2F0TEUodmFsdWUudmFsdWVzW2ldLCA0ICsgaSAqIDQpO1xuICAgIH1cbiAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuVkVDVE9SLCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gIH1cblxuICBpZiAoaXNHcWxkYlNldCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZW5jb2RlU2V0KHZhbHVlKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGVuY29kZU1hcCh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdHlwZTogJHt0eXBlb2YgdmFsdWV9YCk7XG59XG5cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERlY29kaW5nOiBUeXBlZFZhbHVlIOKGkiBKU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIENvbnZlcnQgYSBUeXBlZFZhbHVlIHRvIGEgSmF2YVNjcmlwdCB2YWx1ZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGVkVmFsdWVUb0pTKHR2OiBUeXBlZFZhbHVlKTogYW55IHtcbiAgaWYgKHR2LmlzTnVsbCB8fCB0di50eXBlID09PSBQcm9wZXJ0eVR5cGUuTlVMTCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3dpdGNoICh0di50eXBlKSB7XG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuQk9PTDpcbiAgICAgIHJldHVybiB0di5kYXRhLmxlbmd0aCA+PSAxICYmIHR2LmRhdGEucmVhZFVJbnQ4KDApICE9PSAwO1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuSU5UMzI6XG4gICAgICByZXR1cm4gdHYuZGF0YS5sZW5ndGggPj0gNCA/IHR2LmRhdGEucmVhZEludDMyTEUoMCkgOiAwO1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuVUlOVDMyOlxuICAgICAgcmV0dXJuIHR2LmRhdGEubGVuZ3RoID49IDQgPyB0di5kYXRhLnJlYWRVSW50MzJMRSgwKSA6IDA7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5JTlQ2NDoge1xuICAgICAgaWYgKHR2LmRhdGEubGVuZ3RoIDwgOCkgcmV0dXJuIDA7XG4gICAgICBjb25zdCBiaWdWYWwgPSB0di5kYXRhLnJlYWRCaWdJbnQ2NExFKDApO1xuICAgICAgLy8gUmV0dXJuIHJlZ3VsYXIgbnVtYmVyIGlmIHZhbHVlIGZpdHMgaW4gc2FmZSBpbnRlZ2VyIHJhbmdlXG4gICAgICBpZiAoYmlnVmFsID49IEJpZ0ludChOdW1iZXIuTUlOX1NBRkVfSU5URUdFUikgJiYgYmlnVmFsIDw9IEJpZ0ludChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpIHtcbiAgICAgICAgcmV0dXJuIE51bWJlcihiaWdWYWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJpZ1ZhbDtcbiAgICB9XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5VSU5UNjQ6IHtcbiAgICAgIGlmICh0di5kYXRhLmxlbmd0aCA8IDgpIHJldHVybiAwO1xuICAgICAgY29uc3QgYmlnVmFsID0gdHYuZGF0YS5yZWFkQmlnVUludDY0TEUoMCk7XG4gICAgICAvLyBSZXR1cm4gcmVndWxhciBudW1iZXIgaWYgdmFsdWUgZml0cyBpbiBzYWZlIGludGVnZXIgcmFuZ2VcbiAgICAgIGlmIChiaWdWYWwgPD0gQmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSkge1xuICAgICAgICByZXR1cm4gTnVtYmVyKGJpZ1ZhbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmlnVmFsO1xuICAgIH1cblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkZMT0FUOlxuICAgICAgcmV0dXJuIHR2LmRhdGEubGVuZ3RoID49IDQgPyB0di5kYXRhLnJlYWRGbG9hdExFKDApIDogMDtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkRPVUJMRTpcbiAgICAgIHJldHVybiB0di5kYXRhLmxlbmd0aCA+PSA4ID8gdHYuZGF0YS5yZWFkRG91YmxlTEUoMCkgOiAwO1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuU1RSSU5HOlxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlRFWFQ6XG4gICAgICByZXR1cm4gdHYuZGF0YS50b1N0cmluZygndXRmLTgnKTtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkJMT0I6XG4gICAgICByZXR1cm4gdHYuZGF0YTtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlRJTUVTVEFNUDpcbiAgICAgIGlmICh0di5kYXRhLmxlbmd0aCA+PSAxMikge1xuICAgICAgICBjb25zdCBzZWNzID0gTnVtYmVyKHR2LmRhdGEucmVhZEJpZ0ludDY0TEUoMCkpO1xuICAgICAgICBjb25zdCBuYW5vcyA9IHR2LmRhdGEucmVhZFVJbnQzMkxFKDgpO1xuICAgICAgICBjb25zdCBkID0gbmV3IERhdGUoc2VjcyAqIDEwMDAgKyBNYXRoLmZsb29yKG5hbm9zIC8gMV8wMDBfMDAwKSk7XG4gICAgICAgIHJldHVybiBjcmVhdGVUaW1lc3RhbXAoXG4gICAgICAgICAgZC5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgICAgIGQuZ2V0VVRDTW9udGgoKSArIDEsXG4gICAgICAgICAgZC5nZXRVVENEYXRlKCksXG4gICAgICAgICAgZC5nZXRVVENIb3VycygpLFxuICAgICAgICAgIGQuZ2V0VVRDTWludXRlcygpLFxuICAgICAgICAgIGQuZ2V0VVRDU2Vjb25kcygpLFxuICAgICAgICAgIG5hbm9zLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZVRpbWVzdGFtcCgwLCAwLCAwLCAwLCAwLCAwLCAwKTtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkRBVEU6XG4gICAgICBpZiAodHYuZGF0YS5sZW5ndGggPj0gNCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHllYXI6IHR2LmRhdGEucmVhZFVJbnQxNkxFKDApLFxuICAgICAgICAgIG1vbnRoOiB0di5kYXRhLnJlYWRVSW50OCgyKSxcbiAgICAgICAgICBkYXk6IHR2LmRhdGEucmVhZFVJbnQ4KDMpLFxuICAgICAgICB9IGFzIEdxbGRiRGF0ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHllYXI6IDAsIG1vbnRoOiAwLCBkYXk6IDAgfSBhcyBHcWxkYkRhdGU7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5MT0NBTF9USU1FOlxuICAgICAgaWYgKHR2LmRhdGEubGVuZ3RoID49IDgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBob3VyOiB0di5kYXRhLnJlYWRVSW50OCgwKSxcbiAgICAgICAgICBtaW51dGU6IHR2LmRhdGEucmVhZFVJbnQ4KDEpLFxuICAgICAgICAgIHNlY29uZDogdHYuZGF0YS5yZWFkVUludDgoMiksXG4gICAgICAgICAgbmFub3NlY29uZDogdHYuZGF0YS5yZWFkVUludDMyTEUoNCksXG4gICAgICAgIH0gYXMgR3FsZGJMb2NhbFRpbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbmFub3NlY29uZDogMCB9IGFzIEdxbGRiTG9jYWxUaW1lO1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuWk9ORURfVElNRTpcbiAgICAgIGlmICh0di5kYXRhLmxlbmd0aCA+PSAxMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhvdXI6IHR2LmRhdGEucmVhZFVJbnQ4KDApLFxuICAgICAgICAgIG1pbnV0ZTogdHYuZGF0YS5yZWFkVUludDgoMSksXG4gICAgICAgICAgc2Vjb25kOiB0di5kYXRhLnJlYWRVSW50OCgyKSxcbiAgICAgICAgICBuYW5vc2Vjb25kOiB0di5kYXRhLnJlYWRVSW50MzJMRSg0KSxcbiAgICAgICAgICBvZmZzZXRNaW51dGVzOiB0di5kYXRhLnJlYWRJbnQxNkxFKDgpLFxuICAgICAgICB9IGFzIEdxbGRiWm9uZWRUaW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG5hbm9zZWNvbmQ6IDAsIG9mZnNldE1pbnV0ZXM6IDAgfSBhcyBHcWxkYlpvbmVkVGltZTtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlpPTkVEX0RBVEVUSU1FOlxuICAgICAgaWYgKHR2LmRhdGEubGVuZ3RoID49IDEzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeWVhcjogdHYuZGF0YS5yZWFkVUludDE2TEUoMCksXG4gICAgICAgICAgbW9udGg6IHR2LmRhdGEucmVhZFVJbnQ4KDIpLFxuICAgICAgICAgIGRheTogdHYuZGF0YS5yZWFkVUludDgoMyksXG4gICAgICAgICAgaG91cjogdHYuZGF0YS5yZWFkVUludDgoNCksXG4gICAgICAgICAgbWludXRlOiB0di5kYXRhLnJlYWRVSW50OCg1KSxcbiAgICAgICAgICBzZWNvbmQ6IHR2LmRhdGEucmVhZFVJbnQ4KDYpLFxuICAgICAgICAgIG5hbm9zZWNvbmQ6IHR2LmRhdGEucmVhZFVJbnQzMkxFKDcpLFxuICAgICAgICAgIG9mZnNldE1pbnV0ZXM6IHR2LmRhdGEucmVhZEludDE2TEUoMTEpLFxuICAgICAgICB9IGFzIEdxbGRiWm9uZWREYXRlVGltZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHllYXI6IDAsIG1vbnRoOiAwLCBkYXk6IDAsIGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBuYW5vc2Vjb25kOiAwLCBvZmZzZXRNaW51dGVzOiAwIH0gYXMgR3FsZGJab25lZERhdGVUaW1lO1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuTE9DQUxfREFURVRJTUU6XG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuREFURVRJTUU6XG4gICAgICBpZiAodHYuZGF0YS5sZW5ndGggPj0gMTEpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsRGF0ZVRpbWUoXG4gICAgICAgICAgdHYuZGF0YS5yZWFkVUludDE2TEUoMCksICAgLy8geWVhclxuICAgICAgICAgIHR2LmRhdGEucmVhZFVJbnQ4KDIpLCAgICAgIC8vIG1vbnRoXG4gICAgICAgICAgdHYuZGF0YS5yZWFkVUludDgoMyksICAgICAgLy8gZGF5XG4gICAgICAgICAgdHYuZGF0YS5yZWFkVUludDgoNCksICAgICAgLy8gaG91clxuICAgICAgICAgIHR2LmRhdGEucmVhZFVJbnQ4KDUpLCAgICAgIC8vIG1pbnV0ZVxuICAgICAgICAgIHR2LmRhdGEucmVhZFVJbnQ4KDYpLCAgICAgIC8vIHNlY29uZFxuICAgICAgICAgIHR2LmRhdGEucmVhZFVJbnQzMkxFKDcpLCAgIC8vIG5hbm9zZWNvbmRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVhdGVMb2NhbERhdGVUaW1lKDAsIDAsIDAsIDAsIDAsIDAsIDApO1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuWUVBUl9UT19NT05USDpcbiAgICAgIGlmICh0di5kYXRhLmxlbmd0aCA+PSA0KSB7XG4gICAgICAgIHJldHVybiB7IG1vbnRoczogdHYuZGF0YS5yZWFkSW50MzJMRSgwKSB9IGFzIFllYXJUb01vbnRoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgbW9udGhzOiAwIH0gYXMgWWVhclRvTW9udGg7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5EQVlfVE9fU0VDT05EOlxuICAgICAgaWYgKHR2LmRhdGEubGVuZ3RoID49IDEyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2Vjb25kczogTnVtYmVyKHR2LmRhdGEucmVhZEJpZ0ludDY0TEUoMCkpLFxuICAgICAgICAgIG5hbm9zZWNvbmRzOiB0di5kYXRhLnJlYWRVSW50MzJMRSg4KSxcbiAgICAgICAgfSBhcyBEYXlUb1NlY29uZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHNlY29uZHM6IDAsIG5hbm9zZWNvbmRzOiAwIH0gYXMgRGF5VG9TZWNvbmQ7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5QT0lOVDpcbiAgICAgIGlmICh0di5kYXRhLmxlbmd0aCA+PSAxNikge1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50KHR2LmRhdGEucmVhZERvdWJsZUxFKDgpLCB0di5kYXRhLnJlYWREb3VibGVMRSgwKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFBvaW50KDAsIDApO1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuUE9JTlQzRDpcbiAgICAgIGlmICh0di5kYXRhLmxlbmd0aCA+PSAyNCkge1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50M0QodHYuZGF0YS5yZWFkRG91YmxlTEUoMCksIHR2LmRhdGEucmVhZERvdWJsZUxFKDgpLCB0di5kYXRhLnJlYWREb3VibGVMRSgxNikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBQb2ludDNEKDAsIDAsIDApO1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuREVDSU1BTDpcbiAgICAgIHJldHVybiB7IHZhbHVlOiB0di5kYXRhLnRvU3RyaW5nKCd1dGYtOCcpIH0gYXMgR3FsZGJEZWNpbWFsO1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuVkVDVE9SOlxuICAgICAgaWYgKHR2LmRhdGEubGVuZ3RoID49IDQpIHtcbiAgICAgICAgY29uc3QgZGltID0gdHYuZGF0YS5yZWFkVUludDMyTEUoMCk7XG4gICAgICAgIGlmICh0di5kYXRhLmxlbmd0aCA+PSA0ICsgZGltICogNCkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlczogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbTsgaSsrKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh0di5kYXRhLnJlYWRGbG9hdExFKDQgKyBpICogNCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFZlY3Rvcih2YWx1ZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFZlY3RvcihbXSk7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5MSVNUOlxuICAgICAgcmV0dXJuIGRlY29kZUxpc3QodHYuZGF0YSk7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5TRVQ6XG4gICAgICByZXR1cm4gbmV3IFNldChkZWNvZGVMaXN0KHR2LmRhdGEpKTtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLk1BUDpcbiAgICBjYXNlIFByb3BlcnR5VHlwZS5SRUNPUkQ6XG4gICAgICByZXR1cm4gZGVjb2RlTWFwKHR2LmRhdGEpO1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuVEFCTEU6XG4gICAgICByZXR1cm4gZGVjb2RlVGFibGUodHYuZGF0YSk7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5OT0RFOlxuICAgICAgcmV0dXJuIGRlY29kZU5vZGUodHYuZGF0YSk7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5FREdFOlxuICAgICAgcmV0dXJuIGRlY29kZUVkZ2UodHYuZGF0YSk7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5QQVRIOlxuICAgICAgcmV0dXJuIGRlY29kZVBhdGgodHYuZGF0YSk7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5FUlJPUjpcbiAgICAgIHJldHVybiBkZWNvZGVFcnJvcih0di5kYXRhKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHYuZGF0YTtcbiAgfVxufVxuXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEZWNvZGU6IENvbXBsZXggVHlwZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRGVjb2RlIGEgbm9kZSBmcm9tIGJpbmFyeSBmb3JtYXQuXG4gKlxuICogV2lyZSBmb3JtYXQ6XG4gKiAgIHByZS02LjEuMTQ3OiAgW2lkTGVuOjJdW2lkXVtsYWJlbENvdW50OjJdW2xhYmVsTGVuOjJdW2xhYmVsXS4uLltwcm9wZXJ0aWVzX2JpbmFyeV1cbiAqICAgNi4xLjE0Nys6ICAgICAuLi5bcHJvcGVydGllc19iaW5hcnldW0ludGVybmFsSUQ6OCBMRSB1aW50NjRdXG4gKlxuICogVGhlIDgtYnl0ZSBJbnRlcm5hbElEIHRyYWlsZXIgaXMgcmVhZCB3aGVuIHByZXNlbnQ7IGFic2VudCBvblxuICogcHJlLTYuMS4xNDcgc2VydmVycywgaW4gd2hpY2ggY2FzZSBgR3FsZGJOb2RlLnV1aWRgIGlzIGxlZnQgZW1wdHlcbiAqIGFuZCBhcHBsaWNhdGlvbiBjb2RlIGNhbiBmYWxsIGJhY2sgdG8gYGlkYC5cbiAqL1xuZnVuY3Rpb24gZGVjb2RlTm9kZShkYXRhOiBCdWZmZXIpOiBHcWxkYk5vZGUge1xuICBsZXQgb2Zmc2V0ID0gMDtcblxuICAvLyBEZWNvZGUgSURcbiAgY29uc3QgW2lkLCBpZExlbl0gPSBkZWNvZGVTdHJpbmcoZGF0YSwgb2Zmc2V0KTtcbiAgaWYgKGlkTGVuID09PSAwKSByZXR1cm4geyBpZDogJycsIHV1aWQ6ICcnLCBsYWJlbHM6IFtdLCBwcm9wZXJ0aWVzOiB7fSB9O1xuICBvZmZzZXQgKz0gaWRMZW47XG5cbiAgLy8gRGVjb2RlIGxhYmVsc1xuICBpZiAob2Zmc2V0ICsgMiA+IGRhdGEubGVuZ3RoKSByZXR1cm4geyBpZCwgdXVpZDogJycsIGxhYmVsczogW10sIHByb3BlcnRpZXM6IHt9IH07XG4gIGNvbnN0IGxhYmVsQ291bnQgPSBkYXRhLnJlYWRVSW50MTZMRShvZmZzZXQpO1xuICBvZmZzZXQgKz0gMjtcblxuICBjb25zdCBsYWJlbHM6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGFiZWxDb3VudDsgaSsrKSB7XG4gICAgY29uc3QgW2xhYmVsLCBsYWJlbExlbl0gPSBkZWNvZGVTdHJpbmcoZGF0YSwgb2Zmc2V0KTtcbiAgICBpZiAobGFiZWxMZW4gPT09IDApIGJyZWFrO1xuICAgIGxhYmVscy5wdXNoKGxhYmVsKTtcbiAgICBvZmZzZXQgKz0gbGFiZWxMZW47XG4gIH1cblxuICAvLyBEZWNvZGUgcHJvcGVydGllc1xuICBjb25zdCBbcHJvcGVydGllcywgcHJvcHNMZW5dID0gZGVjb2RlUHJvcGVydGllc0JpbmFyeShkYXRhLCBvZmZzZXQpO1xuICBvZmZzZXQgKz0gcHJvcHNMZW47XG5cbiAgLy8gRGVjb2RlIG9wdGlvbmFsIEludGVybmFsSUQgdHJhaWxlciAoNi4xLjE0NyspLlxuICBjb25zdCB1dWlkID0gZGVjb2RlSW50ZXJuYWxJZFRyYWlsZXIoZGF0YSwgb2Zmc2V0KTtcblxuICByZXR1cm4geyBpZCwgdXVpZCwgbGFiZWxzLCBwcm9wZXJ0aWVzIH07XG59XG5cbi8qKlxuICogRGVjb2RlIGFuIGVkZ2UgZnJvbSBiaW5hcnkgZm9ybWF0LlxuICogU2VlIHtAbGluayBkZWNvZGVOb2RlfSBmb3IgdGhlIEludGVybmFsSUQgdHJhaWxlciBzZW1hbnRpY3MuXG4gKi9cbmZ1bmN0aW9uIGRlY29kZUVkZ2UoZGF0YTogQnVmZmVyKTogR3FsZGJFZGdlIHtcbiAgbGV0IG9mZnNldCA9IDA7XG5cbiAgY29uc3QgW2lkLCBpZExlbl0gPSBkZWNvZGVTdHJpbmcoZGF0YSwgb2Zmc2V0KTtcbiAgaWYgKGlkTGVuID09PSAwKSByZXR1cm4geyBpZDogJycsIHV1aWQ6ICcnLCBsYWJlbDogJycsIGZyb21Ob2RlSWQ6ICcnLCB0b05vZGVJZDogJycsIHByb3BlcnRpZXM6IHt9IH07XG4gIG9mZnNldCArPSBpZExlbjtcblxuICBjb25zdCBbbGFiZWwsIGxhYmVsTGVuXSA9IGRlY29kZVN0cmluZyhkYXRhLCBvZmZzZXQpO1xuICBpZiAobGFiZWxMZW4gPT09IDApIHJldHVybiB7IGlkLCB1dWlkOiAnJywgbGFiZWw6ICcnLCBmcm9tTm9kZUlkOiAnJywgdG9Ob2RlSWQ6ICcnLCBwcm9wZXJ0aWVzOiB7fSB9O1xuICBvZmZzZXQgKz0gbGFiZWxMZW47XG5cbiAgY29uc3QgW2Zyb21Ob2RlSWQsIGZyb21MZW5dID0gZGVjb2RlU3RyaW5nKGRhdGEsIG9mZnNldCk7XG4gIGlmIChmcm9tTGVuID09PSAwKSByZXR1cm4geyBpZCwgdXVpZDogJycsIGxhYmVsLCBmcm9tTm9kZUlkOiAnJywgdG9Ob2RlSWQ6ICcnLCBwcm9wZXJ0aWVzOiB7fSB9O1xuICBvZmZzZXQgKz0gZnJvbUxlbjtcblxuICBjb25zdCBbdG9Ob2RlSWQsIHRvTGVuXSA9IGRlY29kZVN0cmluZyhkYXRhLCBvZmZzZXQpO1xuICBpZiAodG9MZW4gPT09IDApIHJldHVybiB7IGlkLCB1dWlkOiAnJywgbGFiZWwsIGZyb21Ob2RlSWQsIHRvTm9kZUlkOiAnJywgcHJvcGVydGllczoge30gfTtcbiAgb2Zmc2V0ICs9IHRvTGVuO1xuXG4gIGNvbnN0IFtwcm9wZXJ0aWVzLCBwcm9wc0xlbl0gPSBkZWNvZGVQcm9wZXJ0aWVzQmluYXJ5KGRhdGEsIG9mZnNldCk7XG4gIG9mZnNldCArPSBwcm9wc0xlbjtcblxuICBjb25zdCB1dWlkID0gZGVjb2RlSW50ZXJuYWxJZFRyYWlsZXIoZGF0YSwgb2Zmc2V0KTtcblxuICByZXR1cm4geyBpZCwgdXVpZCwgbGFiZWwsIGZyb21Ob2RlSWQsIHRvTm9kZUlkLCBwcm9wZXJ0aWVzIH07XG59XG5cbi8qKlxuICogUmVhZCB0aGUgb3B0aW9uYWwgOC1ieXRlIGxpdHRsZS1lbmRpYW4gdWludDY0IEludGVybmFsSUQgdHJhaWxlclxuICogZW1pdHRlZCBieSBncWxkYiA2LjEuMTQ3KyBzZXJ2ZXJzIGF0IHRoZSB0YWlsIG9mIGV2ZXJ5IGVuY29kZWRcbiAqIG5vZGUvZWRnZSBwYXlsb2FkLiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3JtYXR0ZWQgYXMgYSBkZWNpbWFsIHN0cmluZyxcbiAqIG9yICcnIHdoZW4gdGhlIHRyYWlsZXIgaXMgYWJzZW50IChwcmUtNi4xLjE0NyB3aXJlIGZvcm1hdCkuXG4gKlxuICogVXNlcyBCaWdJbnQgdG8gcHJlc2VydmUgdGhlIGZ1bGwgdWludDY0IHJhbmdlOyBjb252ZXJ0cyB0byBkZWNpbWFsXG4gKiBzdHJpbmcgaW1tZWRpYXRlbHkgc28gY2FsbGVycyBkb24ndCBuZWVkIHRvIGhhbmRsZSBCaWdJbnQgZGlyZWN0bHkuXG4gKi9cbmZ1bmN0aW9uIGRlY29kZUludGVybmFsSWRUcmFpbGVyKGRhdGE6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAob2Zmc2V0ICsgOCA+IGRhdGEubGVuZ3RoKSByZXR1cm4gJyc7XG4gIGNvbnN0IHZhbHVlID0gZGF0YS5yZWFkQmlnVUludDY0TEUob2Zmc2V0KTtcbiAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogRGVjb2RlIGEgcGF0aCBmcm9tIGJpbmFyeSBmb3JtYXQuXG4gKiBGb3JtYXQ6IFtub2RlQ291bnQ6Ml1bbm9kZUxlbjo0XVtub2RlRGF0YV0uLi5bZWRnZUNvdW50OjJdW2VkZ2VMZW46NF1bZWRnZURhdGFdLi4uXG4gKi9cbmZ1bmN0aW9uIGRlY29kZVBhdGgoZGF0YTogQnVmZmVyKTogR3FsZGJQYXRoIHtcbiAgbGV0IG9mZnNldCA9IDA7XG5cbiAgLy8gRGVjb2RlIG5vZGVzXG4gIGlmIChvZmZzZXQgKyAyID4gZGF0YS5sZW5ndGgpIHJldHVybiB7IG5vZGVzOiBbXSwgZWRnZXM6IFtdIH07XG4gIGNvbnN0IG5vZGVDb3VudCA9IGRhdGEucmVhZFVJbnQxNkxFKG9mZnNldCk7XG4gIG9mZnNldCArPSAyO1xuXG4gIGNvbnN0IG5vZGVzOiBHcWxkYk5vZGVbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVDb3VudDsgaSsrKSB7XG4gICAgaWYgKG9mZnNldCArIDQgPiBkYXRhLmxlbmd0aCkgYnJlYWs7XG4gICAgY29uc3Qgbm9kZUxlbiA9IGRhdGEucmVhZFVJbnQzMkxFKG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IDQ7XG5cbiAgICBpZiAob2Zmc2V0ICsgbm9kZUxlbiA+IGRhdGEubGVuZ3RoKSBicmVhaztcbiAgICBjb25zdCBub2RlRGF0YSA9IGRhdGEuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBub2RlTGVuKTtcbiAgICBub2Rlcy5wdXNoKGRlY29kZU5vZGUobm9kZURhdGEpKTtcbiAgICBvZmZzZXQgKz0gbm9kZUxlbjtcbiAgfVxuXG4gIC8vIERlY29kZSBlZGdlc1xuICBpZiAob2Zmc2V0ICsgMiA+IGRhdGEubGVuZ3RoKSByZXR1cm4geyBub2RlcywgZWRnZXM6IFtdIH07XG4gIGNvbnN0IGVkZ2VDb3VudCA9IGRhdGEucmVhZFVJbnQxNkxFKG9mZnNldCk7XG4gIG9mZnNldCArPSAyO1xuXG4gIGNvbnN0IGVkZ2VzOiBHcWxkYkVkZ2VbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VDb3VudDsgaSsrKSB7XG4gICAgaWYgKG9mZnNldCArIDQgPiBkYXRhLmxlbmd0aCkgYnJlYWs7XG4gICAgY29uc3QgZWRnZUxlbiA9IGRhdGEucmVhZFVJbnQzMkxFKG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IDQ7XG5cbiAgICBpZiAob2Zmc2V0ICsgZWRnZUxlbiA+IGRhdGEubGVuZ3RoKSBicmVhaztcbiAgICBjb25zdCBlZGdlRGF0YSA9IGRhdGEuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBlZGdlTGVuKTtcbiAgICBlZGdlcy5wdXNoKGRlY29kZUVkZ2UoZWRnZURhdGEpKTtcbiAgICBvZmZzZXQgKz0gZWRnZUxlbjtcbiAgfVxuXG4gIHJldHVybiB7IG5vZGVzLCBlZGdlcyB9O1xufVxuXG4vKipcbiAqIERlY29kZSBhIGxpc3QgZnJvbSBiaW5hcnkgZm9ybWF0LlxuICogRm9ybWF0OiBbY291bnQ6MiB1aW50MTZMRV1bVHlwZWRWYWx1ZUVudHJ5XS4uLlxuICovXG5mdW5jdGlvbiBkZWNvZGVMaXN0KGRhdGE6IEJ1ZmZlcik6IGFueVtdIHtcbiAgaWYgKGRhdGEubGVuZ3RoIDwgMikgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IGNvdW50ID0gZGF0YS5yZWFkVUludDE2TEUoMCk7XG4gIGxldCBvZmZzZXQgPSAyO1xuICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgY29uc3QgW3R2LCB0dkxlbl0gPSBkZWNvZGVUeXBlZFZhbHVlRW50cnkoZGF0YSwgb2Zmc2V0KTtcbiAgICBpZiAodHZMZW4gPT09IDApIGJyZWFrO1xuICAgIHJlc3VsdC5wdXNoKHR5cGVkVmFsdWVUb0pTKHR2KSk7XG4gICAgb2Zmc2V0ICs9IHR2TGVuO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZWNvZGUgYSBtYXAgZnJvbSBiaW5hcnkgZm9ybWF0LlxuICogRm9ybWF0OiBbY291bnQ6Ml1ba2V5TGVuOjJdW2tleV1bVFZFXS4uLlxuICovXG5mdW5jdGlvbiBkZWNvZGVNYXAoZGF0YTogQnVmZmVyKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIGNvbnN0IFtyZXN1bHRdID0gZGVjb2RlUHJvcGVydGllc0JpbmFyeShkYXRhLCAwKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZWNvZGUgYSB0YWJsZSBmcm9tIGJpbmFyeSBmb3JtYXQuXG4gKiBGb3JtYXQ6IFtjb2xDb3VudDoyXVtjb2xMZW46Ml1bY29sXS4uLltyb3dDb3VudDoyXVtjZWxsQ291bnQ6Ml1bVFZFXS4uLlxuICovXG5mdW5jdGlvbiBkZWNvZGVUYWJsZShkYXRhOiBCdWZmZXIpOiBHcWxkYlRhYmxlIHtcbiAgbGV0IG9mZnNldCA9IDA7XG5cbiAgLy8gRGVjb2RlIGNvbHVtbnNcbiAgaWYgKG9mZnNldCArIDIgPiBkYXRhLmxlbmd0aCkgcmV0dXJuIHsgY29sdW1uczogW10sIHJvd3M6IFtdIH07XG4gIGNvbnN0IGNvbENvdW50ID0gZGF0YS5yZWFkVUludDE2TEUob2Zmc2V0KTtcbiAgb2Zmc2V0ICs9IDI7XG5cbiAgY29uc3QgY29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7XG4gICAgY29uc3QgW2NvbCwgY29sTGVuXSA9IGRlY29kZVN0cmluZyhkYXRhLCBvZmZzZXQpO1xuICAgIGlmIChjb2xMZW4gPT09IDApIGJyZWFrO1xuICAgIGNvbHVtbnMucHVzaChjb2wpO1xuICAgIG9mZnNldCArPSBjb2xMZW47XG4gIH1cblxuICAvLyBEZWNvZGUgcm93c1xuICBpZiAob2Zmc2V0ICsgMiA+IGRhdGEubGVuZ3RoKSByZXR1cm4geyBjb2x1bW5zLCByb3dzOiBbXSB9O1xuICBjb25zdCByb3dDb3VudCA9IGRhdGEucmVhZFVJbnQxNkxFKG9mZnNldCk7XG4gIG9mZnNldCArPSAyO1xuXG4gIGNvbnN0IHJvd3M6IGFueVtdW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XG4gICAgaWYgKG9mZnNldCArIDIgPiBkYXRhLmxlbmd0aCkgYnJlYWs7XG4gICAgY29uc3QgY2VsbENvdW50ID0gZGF0YS5yZWFkVUludDE2TEUob2Zmc2V0KTtcbiAgICBvZmZzZXQgKz0gMjtcblxuICAgIGNvbnN0IHJvdzogYW55W10gPSBbXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNlbGxDb3VudDsgaisrKSB7XG4gICAgICBjb25zdCBbdHYsIHR2TGVuXSA9IGRlY29kZVR5cGVkVmFsdWVFbnRyeShkYXRhLCBvZmZzZXQpO1xuICAgICAgaWYgKHR2TGVuID09PSAwKSBicmVhaztcbiAgICAgIHJvdy5wdXNoKHR5cGVkVmFsdWVUb0pTKHR2KSk7XG4gICAgICBvZmZzZXQgKz0gdHZMZW47XG4gICAgfVxuICAgIHJvd3MucHVzaChyb3cpO1xuICB9XG5cbiAgcmV0dXJuIHsgY29sdW1ucywgcm93cyB9O1xufVxuXG5mdW5jdGlvbiBkZWNvZGVFcnJvcihkYXRhOiBCdWZmZXIpOiBHcWxkYkVycm9yIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBqc29uID0gZGF0YS50b1N0cmluZygndXRmLTgnKTtcbiAgICBjb25zdCBlcnJEYXRhID0gSlNPTi5wYXJzZShqc29uKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29kZTogdHlwZW9mIGVyckRhdGEuY29kZSA9PT0gJ251bWJlcicgPyBlcnJEYXRhLmNvZGUgOiAwLFxuICAgICAgbWVzc2FnZTogdHlwZW9mIGVyckRhdGEubWVzc2FnZSA9PT0gJ3N0cmluZycgPyBlcnJEYXRhLm1lc3NhZ2UgOiBqc29uLFxuICAgIH07XG4gIH0gY2F0Y2gge1xuICAgIC8vIElmIG5vdCB2YWxpZCBKU09OLCB0cmVhdCBhcyBwbGFpbiBtZXNzYWdlXG4gICAgcmV0dXJuIHsgY29kZTogMCwgbWVzc2FnZTogZGF0YS50b1N0cmluZygndXRmLTgnKSB9O1xuICB9XG59XG5cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVuY29kZTogQ29tcGxleCBUeXBlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBFbmNvZGUgYSBsaXN0IGluIGJpbmFyeSBmb3JtYXQuXG4gKiBGb3JtYXQ6IFtjb3VudDoyIHVpbnQxNkxFXVtUeXBlZFZhbHVlRW50cnldLi4uXG4gKi9cbmZ1bmN0aW9uIGVuY29kZUxpc3QodmFsdWVzOiBhbnlbXSk6IFR5cGVkVmFsdWUge1xuICBjb25zdCBwYXJ0czogQnVmZmVyW10gPSBbXTtcblxuICAvLyBXcml0ZSBjb3VudFxuICBjb25zdCBjb3VudEJ1ZiA9IEJ1ZmZlci5hbGxvYygyKTtcbiAgY291bnRCdWYud3JpdGVVSW50MTZMRSh2YWx1ZXMubGVuZ3RoLCAwKTtcbiAgcGFydHMucHVzaChjb3VudEJ1Zik7XG5cbiAgZm9yIChjb25zdCB2IG9mIHZhbHVlcykge1xuICAgIGNvbnN0IHR2ID0gY3JlYXRlVHlwZWRWYWx1ZSh2KTtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZVR5cGVkVmFsdWVFbnRyeSh0dikpO1xuICB9XG5cbiAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLkxJU1QsIGRhdGE6IEJ1ZmZlci5jb25jYXQocGFydHMpLCBpc051bGw6IGZhbHNlIH07XG59XG5cbi8qKlxuICogRW5jb2RlIGEgbWFwIGluIGJpbmFyeSBmb3JtYXQuXG4gKiBGb3JtYXQ6IFtjb3VudDoyXVtrZXlMZW46Ml1ba2V5XVtUVkVdLi4uXG4gKi9cbmZ1bmN0aW9uIGVuY29kZU1hcChtOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogVHlwZWRWYWx1ZSB7XG4gIGNvbnN0IHBhcnRzOiBCdWZmZXJbXSA9IFtdO1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMobSk7XG5cbiAgLy8gV3JpdGUgY291bnRcbiAgY29uc3QgY291bnRCdWYgPSBCdWZmZXIuYWxsb2MoMik7XG4gIGNvdW50QnVmLndyaXRlVUludDE2TEUoZW50cmllcy5sZW5ndGgsIDApO1xuICBwYXJ0cy5wdXNoKGNvdW50QnVmKTtcblxuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBlbnRyaWVzKSB7XG4gICAgLy8gV3JpdGUga2V5IChsZW5ndGgtcHJlZml4ZWQpXG4gICAgcGFydHMucHVzaChlbmNvZGVTdHJpbmcoaykpO1xuXG4gICAgLy8gV3JpdGUgdmFsdWUgYXMgVFZFXG4gICAgY29uc3QgdHYgPSBjcmVhdGVUeXBlZFZhbHVlKHYpO1xuICAgIHBhcnRzLnB1c2goZW5jb2RlVHlwZWRWYWx1ZUVudHJ5KHR2KSk7XG4gIH1cblxuICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuTUFQLCBkYXRhOiBCdWZmZXIuY29uY2F0KHBhcnRzKSwgaXNOdWxsOiBmYWxzZSB9O1xufVxuXG4vKipcbiAqIEVuY29kZSBhIHNldCBpbiBiaW5hcnkgZm9ybWF0IChzYW1lIGFzIGxpc3QpLlxuICovXG5mdW5jdGlvbiBlbmNvZGVTZXQoc2V0OiBTZXQ8YW55Pik6IFR5cGVkVmFsdWUge1xuICBjb25zdCB2YWx1ZXMgPSBBcnJheS5mcm9tKHNldCk7XG4gIGNvbnN0IHBhcnRzOiBCdWZmZXJbXSA9IFtdO1xuXG4gIC8vIFdyaXRlIGNvdW50XG4gIGNvbnN0IGNvdW50QnVmID0gQnVmZmVyLmFsbG9jKDIpO1xuICBjb3VudEJ1Zi53cml0ZVVJbnQxNkxFKHZhbHVlcy5sZW5ndGgsIDApO1xuICBwYXJ0cy5wdXNoKGNvdW50QnVmKTtcblxuICBmb3IgKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgY29uc3QgdHYgPSBjcmVhdGVUeXBlZFZhbHVlKHYpO1xuICAgIHBhcnRzLnB1c2goZW5jb2RlVHlwZWRWYWx1ZUVudHJ5KHR2KSk7XG4gIH1cblxuICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuU0VULCBkYXRhOiBCdWZmZXIuY29uY2F0KHBhcnRzKSwgaXNOdWxsOiBmYWxzZSB9O1xufVxuXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBGb3JtYXQgJiBQYXJzZTogVHlwZWRWYWx1ZSDihpQgU3RyaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogUGFkIGEgbnVtYmVyIHRvIGEgZml4ZWQgd2lkdGggd2l0aCBsZWFkaW5nIHplcm9zICovXG5mdW5jdGlvbiBwYWQobjogbnVtYmVyLCB3aWR0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIG4udG9TdHJpbmcoKS5wYWRTdGFydCh3aWR0aCwgJzAnKTtcbn1cblxuLyoqIEZvcm1hdCBuYW5vc2Vjb25kcywgdHJpbW1pbmcgdHJhaWxpbmcgemVyb3MuIFJldHVybnMgZW1wdHkgc3RyaW5nIGlmIHplcm8uICovXG5mdW5jdGlvbiBmb3JtYXROYW5vcyhuYW5vczogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKG5hbm9zID09PSAwKSByZXR1cm4gJyc7XG4gIGNvbnN0IHMgPSBuYW5vcy50b1N0cmluZygpLnBhZFN0YXJ0KDksICcwJyk7XG4gIHJldHVybiAnLicgKyBzLnJlcGxhY2UoLzArJC8sICcnKTtcbn1cblxuLyoqIEZvcm1hdCBhbiBvZmZzZXQgaW4gbWludXRlcyBhcyBcIitISDpNTVwiIG9yIFwiLUhIOk1NXCIgKi9cbmZ1bmN0aW9uIGZvcm1hdE9mZnNldChvZmZzZXRNaW51dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBzaWduID0gb2Zmc2V0TWludXRlcyA8IDAgPyAnLScgOiAnKyc7XG4gIGNvbnN0IGFicyA9IE1hdGguYWJzKG9mZnNldE1pbnV0ZXMpO1xuICBjb25zdCBoID0gTWF0aC5mbG9vcihhYnMgLyA2MCk7XG4gIGNvbnN0IG0gPSBhYnMgJSA2MDtcbiAgcmV0dXJuIGAke3NpZ259JHtwYWQoaCwgMil9OiR7cGFkKG0sIDIpfWA7XG59XG5cbi8qKiBTZXJpYWxpemUgYSBUeXBlZFZhbHVlIHRvIGl0cyBjYW5vbmljYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VmFsdWUodHY6IFR5cGVkVmFsdWUpOiBzdHJpbmcge1xuICBpZiAodHYuaXNOdWxsIHx8IHR2LnR5cGUgPT09IFByb3BlcnR5VHlwZS5OVUxMKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgc3dpdGNoICh0di50eXBlKSB7XG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuQk9PTDpcbiAgICAgIHJldHVybiB0di5kYXRhLmxlbmd0aCA+PSAxICYmIHR2LmRhdGEucmVhZFVJbnQ4KDApICE9PSAwID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLklOVDMyOlxuICAgICAgcmV0dXJuIHR2LmRhdGEubGVuZ3RoID49IDQgPyB0di5kYXRhLnJlYWRJbnQzMkxFKDApLnRvU3RyaW5nKCkgOiAnMCc7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5VSU5UMzI6XG4gICAgICByZXR1cm4gdHYuZGF0YS5sZW5ndGggPj0gNCA/IHR2LmRhdGEucmVhZFVJbnQzMkxFKDApLnRvU3RyaW5nKCkgOiAnMCc7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5JTlQ2NDoge1xuICAgICAgaWYgKHR2LmRhdGEubGVuZ3RoIDwgOCkgcmV0dXJuICcwJztcbiAgICAgIHJldHVybiB0di5kYXRhLnJlYWRCaWdJbnQ2NExFKDApLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuVUlOVDY0OiB7XG4gICAgICBpZiAodHYuZGF0YS5sZW5ndGggPCA4KSByZXR1cm4gJzAnO1xuICAgICAgcmV0dXJuIHR2LmRhdGEucmVhZEJpZ1VJbnQ2NExFKDApLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuRkxPQVQ6XG4gICAgICByZXR1cm4gdHYuZGF0YS5sZW5ndGggPj0gNCA/IHR2LmRhdGEucmVhZEZsb2F0TEUoMCkudG9TdHJpbmcoKSA6ICcwJztcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkRPVUJMRTpcbiAgICAgIHJldHVybiB0di5kYXRhLmxlbmd0aCA+PSA4ID8gdHYuZGF0YS5yZWFkRG91YmxlTEUoMCkudG9TdHJpbmcoKSA6ICcwJztcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlNUUklORzpcbiAgICBjYXNlIFByb3BlcnR5VHlwZS5URVhUOlxuICAgICAgcmV0dXJuIHR2LmRhdGEudG9TdHJpbmcoJ3V0Zi04Jyk7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5ERUNJTUFMOlxuICAgICAgcmV0dXJuIHR2LmRhdGEudG9TdHJpbmcoJ3V0Zi04Jyk7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5EQVRFOiB7XG4gICAgICBpZiAodHYuZGF0YS5sZW5ndGggPCA0KSByZXR1cm4gJzAwMDAtMDAtMDAnO1xuICAgICAgY29uc3QgeSA9IHR2LmRhdGEucmVhZFVJbnQxNkxFKDApO1xuICAgICAgY29uc3QgbSA9IHR2LmRhdGEucmVhZFVJbnQ4KDIpO1xuICAgICAgY29uc3QgZCA9IHR2LmRhdGEucmVhZFVJbnQ4KDMpO1xuICAgICAgcmV0dXJuIGAke3BhZCh5LCA0KX0tJHtwYWQobSwgMil9LSR7cGFkKGQsIDIpfWA7XG4gICAgfVxuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuTE9DQUxfVElNRToge1xuICAgICAgaWYgKHR2LmRhdGEubGVuZ3RoIDwgOCkgcmV0dXJuICcwMDowMDowMCc7XG4gICAgICBjb25zdCBoID0gdHYuZGF0YS5yZWFkVUludDgoMCk7XG4gICAgICBjb25zdCBtID0gdHYuZGF0YS5yZWFkVUludDgoMSk7XG4gICAgICBjb25zdCBzID0gdHYuZGF0YS5yZWFkVUludDgoMik7XG4gICAgICBjb25zdCBucyA9IHR2LmRhdGEucmVhZFVJbnQzMkxFKDQpO1xuICAgICAgcmV0dXJuIGAke3BhZChoLCAyKX06JHtwYWQobSwgMil9OiR7cGFkKHMsIDIpfSR7Zm9ybWF0TmFub3MobnMpfWA7XG4gICAgfVxuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuWk9ORURfVElNRToge1xuICAgICAgaWYgKHR2LmRhdGEubGVuZ3RoIDwgMTApIHJldHVybiAnMDA6MDA6MDArMDA6MDAnO1xuICAgICAgY29uc3QgaCA9IHR2LmRhdGEucmVhZFVJbnQ4KDApO1xuICAgICAgY29uc3QgbSA9IHR2LmRhdGEucmVhZFVJbnQ4KDEpO1xuICAgICAgY29uc3QgcyA9IHR2LmRhdGEucmVhZFVJbnQ4KDIpO1xuICAgICAgY29uc3QgbnMgPSB0di5kYXRhLnJlYWRVSW50MzJMRSg0KTtcbiAgICAgIGNvbnN0IG9mZiA9IHR2LmRhdGEucmVhZEludDE2TEUoOCk7XG4gICAgICByZXR1cm4gYCR7cGFkKGgsIDIpfToke3BhZChtLCAyKX06JHtwYWQocywgMil9JHtmb3JtYXROYW5vcyhucyl9JHtmb3JtYXRPZmZzZXQob2ZmKX1gO1xuICAgIH1cblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkxPQ0FMX0RBVEVUSU1FOlxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkRBVEVUSU1FOiB7XG4gICAgICBpZiAodHYuZGF0YS5sZW5ndGggPCAxMSkgcmV0dXJuICcwMDAwLTAwLTAwIDAwOjAwOjAwJztcbiAgICAgIGNvbnN0IHkgPSB0di5kYXRhLnJlYWRVSW50MTZMRSgwKTtcbiAgICAgIGNvbnN0IG1vID0gdHYuZGF0YS5yZWFkVUludDgoMik7XG4gICAgICBjb25zdCBkID0gdHYuZGF0YS5yZWFkVUludDgoMyk7XG4gICAgICBjb25zdCBoID0gdHYuZGF0YS5yZWFkVUludDgoNCk7XG4gICAgICBjb25zdCBtaSA9IHR2LmRhdGEucmVhZFVJbnQ4KDUpO1xuICAgICAgY29uc3QgcyA9IHR2LmRhdGEucmVhZFVJbnQ4KDYpO1xuICAgICAgY29uc3QgbnMgPSB0di5kYXRhLnJlYWRVSW50MzJMRSg3KTtcbiAgICAgIHJldHVybiBgJHtwYWQoeSwgNCl9LSR7cGFkKG1vLCAyKX0tJHtwYWQoZCwgMil9ICR7cGFkKGgsIDIpfToke3BhZChtaSwgMil9OiR7cGFkKHMsIDIpfSR7Zm9ybWF0TmFub3MobnMpfWA7XG4gICAgfVxuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuWk9ORURfREFURVRJTUU6IHtcbiAgICAgIGlmICh0di5kYXRhLmxlbmd0aCA8IDEzKSByZXR1cm4gJzAwMDAtMDAtMDAgMDA6MDA6MDArMDA6MDAnO1xuICAgICAgY29uc3QgeSA9IHR2LmRhdGEucmVhZFVJbnQxNkxFKDApO1xuICAgICAgY29uc3QgbW8gPSB0di5kYXRhLnJlYWRVSW50OCgyKTtcbiAgICAgIGNvbnN0IGQgPSB0di5kYXRhLnJlYWRVSW50OCgzKTtcbiAgICAgIGNvbnN0IGggPSB0di5kYXRhLnJlYWRVSW50OCg0KTtcbiAgICAgIGNvbnN0IG1pID0gdHYuZGF0YS5yZWFkVUludDgoNSk7XG4gICAgICBjb25zdCBzID0gdHYuZGF0YS5yZWFkVUludDgoNik7XG4gICAgICBjb25zdCBucyA9IHR2LmRhdGEucmVhZFVJbnQzMkxFKDcpO1xuICAgICAgY29uc3Qgb2ZmID0gdHYuZGF0YS5yZWFkSW50MTZMRSgxMSk7XG4gICAgICByZXR1cm4gYCR7cGFkKHksIDQpfS0ke3BhZChtbywgMil9LSR7cGFkKGQsIDIpfSAke3BhZChoLCAyKX06JHtwYWQobWksIDIpfToke3BhZChzLCAyKX0ke2Zvcm1hdE5hbm9zKG5zKX0ke2Zvcm1hdE9mZnNldChvZmYpfWA7XG4gICAgfVxuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuVElNRVNUQU1QOiB7XG4gICAgICBpZiAodHYuZGF0YS5sZW5ndGggPCAxMikgcmV0dXJuICcwMDAwLTAwLTAwIDAwOjAwOjAwJztcbiAgICAgIGNvbnN0IHNlY3MgPSBOdW1iZXIodHYuZGF0YS5yZWFkQmlnSW50NjRMRSgwKSk7XG4gICAgICBjb25zdCBucyA9IHR2LmRhdGEucmVhZFVJbnQzMkxFKDgpO1xuICAgICAgY29uc3QgZHQgPSBuZXcgRGF0ZShzZWNzICogMTAwMCArIE1hdGguZmxvb3IobnMgLyAxXzAwMF8wMDApKTtcbiAgICAgIGNvbnN0IHkgPSBkdC5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgY29uc3QgbW8gPSBkdC5nZXRVVENNb250aCgpICsgMTtcbiAgICAgIGNvbnN0IGQgPSBkdC5nZXRVVENEYXRlKCk7XG4gICAgICBjb25zdCBoID0gZHQuZ2V0VVRDSG91cnMoKTtcbiAgICAgIGNvbnN0IG1pID0gZHQuZ2V0VVRDTWludXRlcygpO1xuICAgICAgY29uc3QgcyA9IGR0LmdldFVUQ1NlY29uZHMoKTtcbiAgICAgIHJldHVybiBgJHtwYWQoeSwgNCl9LSR7cGFkKG1vLCAyKX0tJHtwYWQoZCwgMil9ICR7cGFkKGgsIDIpfToke3BhZChtaSwgMil9OiR7cGFkKHMsIDIpfSR7Zm9ybWF0TmFub3MobnMpfWA7XG4gICAgfVxuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuWUVBUl9UT19NT05USDoge1xuICAgICAgaWYgKHR2LmRhdGEubGVuZ3RoIDwgNCkgcmV0dXJuICdQME0nO1xuICAgICAgY29uc3QgdG90YWxNb250aHMgPSB0di5kYXRhLnJlYWRJbnQzMkxFKDApO1xuICAgICAgaWYgKHRvdGFsTW9udGhzID09PSAwKSByZXR1cm4gJ1AwTSc7XG4gICAgICBjb25zdCBuZWdhdGl2ZSA9IHRvdGFsTW9udGhzIDwgMDtcbiAgICAgIGNvbnN0IGFicyA9IE1hdGguYWJzKHRvdGFsTW9udGhzKTtcbiAgICAgIGNvbnN0IHllYXJzID0gTWF0aC5mbG9vcihhYnMgLyAxMik7XG4gICAgICBjb25zdCBtb250aHMgPSBhYnMgJSAxMjtcbiAgICAgIGxldCByZXN1bHQgPSBuZWdhdGl2ZSA/ICctUCcgOiAnUCc7XG4gICAgICBpZiAoeWVhcnMgPiAwKSByZXN1bHQgKz0gYCR7eWVhcnN9WWA7XG4gICAgICBpZiAobW9udGhzID4gMCkgcmVzdWx0ICs9IGAke21vbnRoc31NYDtcbiAgICAgIC8vIElmIG9ubHkgeWVhcnMgYW5kIG5vIG1vbnRocywgdGhhdCdzIGZpbmUgKGUuZy4gXCJQMllcIilcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuREFZX1RPX1NFQ09ORDoge1xuICAgICAgaWYgKHR2LmRhdGEubGVuZ3RoIDwgMTIpIHJldHVybiAnUFQwUyc7XG4gICAgICBjb25zdCBzaWduZWRTZWMgPSBOdW1iZXIodHYuZGF0YS5yZWFkQmlnSW50NjRMRSgwKSk7XG4gICAgICBjb25zdCBuYW5vcyA9IHR2LmRhdGEucmVhZFVJbnQzMkxFKDgpO1xuICAgICAgaWYgKHNpZ25lZFNlYyA9PT0gMCAmJiBuYW5vcyA9PT0gMCkgcmV0dXJuICdQVDBTJztcblxuICAgICAgY29uc3QgbmVnYXRpdmUgPSBzaWduZWRTZWMgPCAwO1xuICAgICAgY29uc3QgdG90YWxTZWMgPSBuZWdhdGl2ZSA/IC1zaWduZWRTZWMgOiBzaWduZWRTZWM7XG4gICAgICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcih0b3RhbFNlYyAvIDg2NDAwKTtcbiAgICAgIGNvbnN0IHJlbSA9IHRvdGFsU2VjICUgODY0MDA7XG4gICAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IocmVtIC8gMzYwMCk7XG4gICAgICBjb25zdCByZW0yID0gcmVtICUgMzYwMDtcbiAgICAgIGNvbnN0IG1pbnMgPSBNYXRoLmZsb29yKHJlbTIgLyA2MCk7XG4gICAgICBjb25zdCBzZWNzID0gcmVtMiAlIDYwO1xuXG4gICAgICBsZXQgcmVzdWx0ID0gbmVnYXRpdmUgPyAnLVAnIDogJ1AnO1xuICAgICAgaWYgKGRheXMgPiAwKSByZXN1bHQgKz0gYCR7ZGF5c31EYDtcbiAgICAgIGlmIChob3VycyA+IDAgfHwgbWlucyA+IDAgfHwgc2VjcyA+IDAgfHwgbmFub3MgPiAwKSB7XG4gICAgICAgIHJlc3VsdCArPSAnVCc7XG4gICAgICAgIGlmIChob3VycyA+IDApIHJlc3VsdCArPSBgJHtob3Vyc31IYDtcbiAgICAgICAgaWYgKG1pbnMgPiAwKSByZXN1bHQgKz0gYCR7bWluc31NYDtcbiAgICAgICAgaWYgKHNlY3MgPiAwIHx8IG5hbm9zID4gMCkge1xuICAgICAgICAgIGlmIChuYW5vcyA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZyYWNTdHIgPSBuYW5vcy50b1N0cmluZygpLnBhZFN0YXJ0KDksICcwJykucmVwbGFjZSgvMCskLywgJycpO1xuICAgICAgICAgICAgcmVzdWx0ICs9IGAke3NlY3N9LiR7ZnJhY1N0cn1TYDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ICs9IGAke3NlY3N9U2A7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHYuZGF0YS50b1N0cmluZygndXRmLTgnKTtcbiAgfVxufVxuXG5cbi8qKiBQYXJzZSBhbiBvZmZzZXQgc3RyaW5nIGxpa2UgXCIrMDU6MzBcIiBvciBcIi0wODowMFwiIGludG8gbWludXRlcyAqL1xuZnVuY3Rpb24gcGFyc2VPZmZzZXQoczogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3Qgc2lnbiA9IHNbMF0gPT09ICctJyA/IC0xIDogMTtcbiAgY29uc3QgcGFydHMgPSBzLnN1YnN0cmluZygxKS5zcGxpdCgnOicpO1xuICByZXR1cm4gc2lnbiAqIChwYXJzZUludChwYXJ0c1swXSwgMTApICogNjAgKyBwYXJzZUludChwYXJ0c1sxXSwgMTApKTtcbn1cblxuLyoqIFBhcnNlIGEgc3RyaW5nIGludG8gYSBUeXBlZFZhbHVlIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0IHR5cGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tU3RyaW5nKHM6IHN0cmluZywgdGFyZ2V0VHlwZTogUHJvcGVydHlUeXBlKTogVHlwZWRWYWx1ZSB7XG4gIGlmIChzID09PSAnJykge1xuICAgIHJldHVybiB7IHR5cGU6IHRhcmdldFR5cGUsIGRhdGE6IEJ1ZmZlci5hbGxvYygwKSwgaXNOdWxsOiB0cnVlIH07XG4gIH1cblxuICBzd2l0Y2ggKHRhcmdldFR5cGUpIHtcbiAgICBjYXNlIFByb3BlcnR5VHlwZS5CT09MOiB7XG4gICAgICBjb25zdCB2YWwgPSBzLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJztcbiAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMSk7XG4gICAgICBkYXRhLndyaXRlVUludDgodmFsID8gMSA6IDAsIDApO1xuICAgICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLkJPT0wsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5JTlQzMjoge1xuICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICAgIGRhdGEud3JpdGVJbnQzMkxFKHBhcnNlSW50KHMsIDEwKSwgMCk7XG4gICAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuSU5UMzIsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5VSU5UMzI6IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoNCk7XG4gICAgICBkYXRhLndyaXRlVUludDMyTEUocGFyc2VJbnQocywgMTApID4+PiAwLCAwKTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5VSU5UMzIsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5JTlQ2NDoge1xuICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg4KTtcbiAgICAgIGRhdGEud3JpdGVCaWdJbnQ2NExFKEJpZ0ludChzKSwgMCk7XG4gICAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuSU5UNjQsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5VSU5UNjQ6IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoOCk7XG4gICAgICBkYXRhLndyaXRlQmlnVUludDY0TEUoQmlnSW50KHMpLCAwKTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5VSU5UNjQsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5GTE9BVDoge1xuICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICAgIGRhdGEud3JpdGVGbG9hdExFKHBhcnNlRmxvYXQocyksIDApO1xuICAgICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLkZMT0FULCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuRE9VQkxFOiB7XG4gICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDgpO1xuICAgICAgZGF0YS53cml0ZURvdWJsZUxFKHBhcnNlRmxvYXQocyksIDApO1xuICAgICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLkRPVUJMRSwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlNUUklORzpcbiAgICBjYXNlIFByb3BlcnR5VHlwZS5URVhUOlxuICAgICAgcmV0dXJuIHsgdHlwZTogdGFyZ2V0VHlwZSwgZGF0YTogQnVmZmVyLmZyb20ocywgJ3V0Zi04JyksIGlzTnVsbDogZmFsc2UgfTtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkRFQ0lNQUw6XG4gICAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuREVDSU1BTCwgZGF0YTogQnVmZmVyLmZyb20ocywgJ3V0Zi04JyksIGlzTnVsbDogZmFsc2UgfTtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkRBVEU6IHtcbiAgICAgIC8vIFwieXl5eS1NTS1kZFwiXG4gICAgICBjb25zdCBwYXJ0cyA9IHMuc3BsaXQoJy0nKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoOCk7XG4gICAgICBkYXRhLndyaXRlVUludDE2TEUocGFyc2VJbnQocGFydHNbMF0sIDEwKSwgMCk7XG4gICAgICBkYXRhLndyaXRlVUludDgocGFyc2VJbnQocGFydHNbMV0sIDEwKSwgMik7XG4gICAgICBkYXRhLndyaXRlVUludDgocGFyc2VJbnQocGFydHNbMl0sIDEwKSwgMyk7XG4gICAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuREFURSwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkxPQ0FMX1RJTUU6IHtcbiAgICAgIC8vIFwiSEg6bW06c3NbLm5ubm5ubm5ubl1cIiDigJQgc3RyaXAgYW55IHRyYWlsaW5nIG9mZnNldCBvciBaLCBrZWVwIGxvY2FsIHRpbWUgb25seVxuICAgICAgY29uc3QgY2xlYW5lZCA9IHJlbW92ZU9mZnNldChzKTtcbiAgICAgIGNvbnN0IHsgaG91ciwgbWludXRlLCBzZWNvbmQsIG5hbm9zZWNvbmQgfSA9IHBhcnNlVGltZVN0cmluZyhjbGVhbmVkKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoOCk7XG4gICAgICBkYXRhLndyaXRlVUludDgoaG91ciwgMCk7XG4gICAgICBkYXRhLndyaXRlVUludDgobWludXRlLCAxKTtcbiAgICAgIGRhdGEud3JpdGVVSW50OChzZWNvbmQsIDIpO1xuICAgICAgZGF0YS53cml0ZVVJbnQzMkxFKG5hbm9zZWNvbmQsIDQpO1xuICAgICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLkxPQ0FMX1RJTUUsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5aT05FRF9USU1FOiB7XG4gICAgICAvLyBcIkhIOm1tOnNzWy5uXStISDpNTVwiXG4gICAgICBjb25zdCB7IHRpbWVQYXJ0LCBvZmZzZXRQYXJ0IH0gPSBzcGxpdFRpbWVBbmRPZmZzZXQocyk7XG4gICAgICBjb25zdCB7IGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBuYW5vc2Vjb25kIH0gPSBwYXJzZVRpbWVTdHJpbmcodGltZVBhcnQpO1xuICAgICAgY29uc3Qgb2ZmTWluID0gcGFyc2VPZmZzZXQob2Zmc2V0UGFydCk7XG4gICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDEwKTtcbiAgICAgIGRhdGEud3JpdGVVSW50OChob3VyLCAwKTtcbiAgICAgIGRhdGEud3JpdGVVSW50OChtaW51dGUsIDEpO1xuICAgICAgZGF0YS53cml0ZVVJbnQ4KHNlY29uZCwgMik7XG4gICAgICBkYXRhLndyaXRlVUludDMyTEUobmFub3NlY29uZCwgNCk7XG4gICAgICBkYXRhLndyaXRlSW50MTZMRShvZmZNaW4sIDgpO1xuICAgICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLlpPTkVEX1RJTUUsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5MT0NBTF9EQVRFVElNRTpcbiAgICBjYXNlIFByb3BlcnR5VHlwZS5EQVRFVElNRToge1xuICAgICAgLy8gXCJ5eXl5LU1NLWRkIEhIOm1tOnNzWy5uXVwiIOKAlCBzdHJpcCBhbnkgdHJhaWxpbmcgb2Zmc2V0IG9yIFosIGtlZXAgbG9jYWwgdGltZSBvbmx5XG4gICAgICAvLyBOb3JtYWxpemUgVCBzZXBhcmF0b3IgdG8gc3BhY2VcbiAgICAgIGNvbnN0IGNsZWFuZWQgPSByZW1vdmVPZmZzZXQocy5yZXBsYWNlKCdUJywgJyAnKSk7XG4gICAgICBjb25zdCBzcGFjZUlkeCA9IGNsZWFuZWQuaW5kZXhPZignICcpO1xuICAgICAgY29uc3QgZGF0ZVBhcnQgPSBjbGVhbmVkLnN1YnN0cmluZygwLCBzcGFjZUlkeCk7XG4gICAgICBjb25zdCB0aW1lUGFydCA9IGNsZWFuZWQuc3Vic3RyaW5nKHNwYWNlSWR4ICsgMSk7XG4gICAgICBjb25zdCBkcCA9IGRhdGVQYXJ0LnNwbGl0KCctJyk7XG4gICAgICBjb25zdCB7IGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBuYW5vc2Vjb25kIH0gPSBwYXJzZVRpbWVTdHJpbmcodGltZVBhcnQpO1xuICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYygxMSk7XG4gICAgICBkYXRhLndyaXRlVUludDE2TEUocGFyc2VJbnQoZHBbMF0sIDEwKSwgMCk7XG4gICAgICBkYXRhLndyaXRlVUludDgocGFyc2VJbnQoZHBbMV0sIDEwKSwgMik7XG4gICAgICBkYXRhLndyaXRlVUludDgocGFyc2VJbnQoZHBbMl0sIDEwKSwgMyk7XG4gICAgICBkYXRhLndyaXRlVUludDgoaG91ciwgNCk7XG4gICAgICBkYXRhLndyaXRlVUludDgobWludXRlLCA1KTtcbiAgICAgIGRhdGEud3JpdGVVSW50OChzZWNvbmQsIDYpO1xuICAgICAgZGF0YS53cml0ZVVJbnQzMkxFKG5hbm9zZWNvbmQsIDcpO1xuICAgICAgcmV0dXJuIHsgdHlwZTogdGFyZ2V0VHlwZSwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlpPTkVEX0RBVEVUSU1FOiB7XG4gICAgICAvLyBcInl5eXktTU0tZGQgSEg6bW06c3NbLm5dK0hIOk1NXCIg4oCUIGFsc28gc3VwcG9ydHMgVCBzZXBhcmF0b3IsIFogc3VmZml4LCBzcGFjZS1zZXBhcmF0ZWQgb2Zmc2V0XG4gICAgICBjb25zdCBub3JtID0gbm9ybWFsaXplT2Zmc2V0KHMucmVwbGFjZSgnVCcsICcgJykpO1xuICAgICAgY29uc3Qgc3BhY2VJZHggPSBub3JtLmluZGV4T2YoJyAnKTtcbiAgICAgIGNvbnN0IGRhdGVQYXJ0ID0gbm9ybS5zdWJzdHJpbmcoMCwgc3BhY2VJZHgpO1xuICAgICAgY29uc3QgcmVzdCA9IG5vcm0uc3Vic3RyaW5nKHNwYWNlSWR4ICsgMSk7XG4gICAgICBjb25zdCB7IHRpbWVQYXJ0LCBvZmZzZXRQYXJ0IH0gPSBzcGxpdFRpbWVBbmRPZmZzZXQocmVzdCk7XG4gICAgICBjb25zdCBkcCA9IGRhdGVQYXJ0LnNwbGl0KCctJyk7XG4gICAgICBjb25zdCB7IGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBuYW5vc2Vjb25kIH0gPSBwYXJzZVRpbWVTdHJpbmcodGltZVBhcnQpO1xuICAgICAgY29uc3Qgb2ZmTWluID0gcGFyc2VPZmZzZXQob2Zmc2V0UGFydCk7XG4gICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDEzKTtcbiAgICAgIGRhdGEud3JpdGVVSW50MTZMRShwYXJzZUludChkcFswXSwgMTApLCAwKTtcbiAgICAgIGRhdGEud3JpdGVVSW50OChwYXJzZUludChkcFsxXSwgMTApLCAyKTtcbiAgICAgIGRhdGEud3JpdGVVSW50OChwYXJzZUludChkcFsyXSwgMTApLCAzKTtcbiAgICAgIGRhdGEud3JpdGVVSW50OChob3VyLCA0KTtcbiAgICAgIGRhdGEud3JpdGVVSW50OChtaW51dGUsIDUpO1xuICAgICAgZGF0YS53cml0ZVVJbnQ4KHNlY29uZCwgNik7XG4gICAgICBkYXRhLndyaXRlVUludDMyTEUobmFub3NlY29uZCwgNyk7XG4gICAgICBkYXRhLndyaXRlSW50MTZMRShvZmZNaW4sIDExKTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5aT05FRF9EQVRFVElNRSwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlRJTUVTVEFNUDoge1xuICAgICAgLy8gU3VwcG9ydCBlcG9jaCBzZWNvbmRzIGxpa2UgXCIxNzE1MTY5NjAwXCIgb3IgXCJ5eXl5LU1NLWRkIEhIOm1tOnNzWy5uXVwiXG4gICAgICBpZiAoL15cXGQrJC8udGVzdChzKSkge1xuICAgICAgICAvLyBFcG9jaCBzZWNvbmRzXG4gICAgICAgIGNvbnN0IGVwb2NoID0gcGFyc2VJbnQocywgMTApO1xuICAgICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDEyKTtcbiAgICAgICAgZGF0YS53cml0ZUJpZ0ludDY0TEUoQmlnSW50KGVwb2NoKSwgMCk7XG4gICAgICAgIGRhdGEud3JpdGVVSW50MzJMRSgwLCA4KTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLlRJTUVTVEFNUCwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICAgLy8gXCJ5eXl5LU1NLWRkIEhIOm1tOnNzWy5uXVwiIG9yIFwieXl5eS1NTS1kZFRISDptbTpzc1subl1bKy1dSEg6TU1cIiAvIFwiWystXUhITU1cIiAvIFwiWlwiXG4gICAgICAvLyBBbHNvIHN1cHBvcnRzIHNwYWNlLXNlcGFyYXRlZCBvZmZzZXQ6IFwiMjAyNC0wNi0xNSAxNDozMDowMCArMDg6MDBcIlxuICAgICAgLy8gTm9ybWFsaXplIFQgc2VwYXJhdG9yIHRvIHNwYWNlXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gcy5yZXBsYWNlKCdUJywgJyAnKTtcblxuICAgICAgLy8gQ2hlY2sgZm9yIFogc3VmZml4IOKGkiB0cmVhdCBhcyArMDA6MDBcbiAgICAgIGNvbnN0IGhhc1ogPSBub3JtYWxpemVkLmVuZHNXaXRoKCdaJykgfHwgbm9ybWFsaXplZC5lbmRzV2l0aCgneicpO1xuXG4gICAgICAvLyBOb3JtYWxpemUgc3BhY2Utc2VwYXJhdGVkIG9mZnNldHM6IFwiICswODowMFwiIOKGkiBcIiswODowMFwiXG4gICAgICAvLyBBbHNvIG5vcm1hbGl6ZSBaIHRvICswMDowMFxuICAgICAgbGV0IHByb2Nlc3NlZCA9IG5vcm1hbGl6ZWQ7XG4gICAgICBpZiAoaGFzWikge1xuICAgICAgICBwcm9jZXNzZWQgPSBub3JtYWxpemVkLnNsaWNlKDAsIC0xKSArICcrMDA6MDAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ29sbGFwc2Ugc3BhY2UgYmVmb3JlIG9mZnNldCAob25seSBpbiBsYXN0IH4xMCBjaGFycyB0byBhdm9pZCBkYXRlIGh5cGhlbnMpXG4gICAgICAgIGNvbnN0IHNwYWNlT2ZmTWF0Y2ggPSBwcm9jZXNzZWQubWF0Y2goL14oLis/KVxccysoWystXVxcZHsyfTo/XFxkezJ9KSQvKTtcbiAgICAgICAgaWYgKHNwYWNlT2ZmTWF0Y2gpIHtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBzcGFjZU9mZk1hdGNoWzFdICsgc3BhY2VPZmZNYXRjaFsyXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXBJZHggPSBwcm9jZXNzZWQuaW5kZXhPZignICcpO1xuICAgICAgY29uc3QgZGF0ZVBhcnQgPSBwcm9jZXNzZWQuc3Vic3RyaW5nKDAsIHNlcElkeCk7XG4gICAgICBjb25zdCByZXN0ID0gcHJvY2Vzc2VkLnN1YnN0cmluZyhzZXBJZHggKyAxKTtcblxuICAgICAgLy8gQ2hlY2sgZm9yIHRpbWV6b25lIG9mZnNldDogK0hIOk1NLCAtSEg6TU0sICtISE1NLCAtSEhNTSBhdCB0aGUgZW5kXG4gICAgICBjb25zdCBvZmZzZXRNYXRjaCA9IHJlc3QubWF0Y2goLyhbKy1dKShcXGR7Mn0pOj8oXFxkezJ9KSQvKTtcbiAgICAgIGlmIChvZmZzZXRNYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lUGFydCA9IHJlc3Quc3Vic3RyaW5nKDAsIG9mZnNldE1hdGNoLmluZGV4ISk7XG4gICAgICAgIGNvbnN0IHNpZ24gPSBvZmZzZXRNYXRjaFsxXSA9PT0gJy0nID8gLTEgOiAxO1xuICAgICAgICBjb25zdCBvZmZIb3VycyA9IHBhcnNlSW50KG9mZnNldE1hdGNoWzJdLCAxMCk7XG4gICAgICAgIGNvbnN0IG9mZk1pbnMgPSBwYXJzZUludChvZmZzZXRNYXRjaFszXSwgMTApO1xuICAgICAgICBjb25zdCBvZmZzZXRUb3RhbE1pbnV0ZXMgPSBzaWduICogKG9mZkhvdXJzICogNjAgKyBvZmZNaW5zKTtcblxuICAgICAgICBjb25zdCBkcCA9IGRhdGVQYXJ0LnNwbGl0KCctJyk7XG4gICAgICAgIGNvbnN0IHsgaG91ciwgbWludXRlLCBzZWNvbmQsIG5hbm9zZWNvbmQgfSA9IHBhcnNlVGltZVN0cmluZyh0aW1lUGFydCk7XG5cbiAgICAgICAgLy8gQ29udmVydCB0byBVVEMgYnkgc3VidHJhY3RpbmcgdGhlIG9mZnNldFxuICAgICAgICBjb25zdCBkID0gbmV3IERhdGUoRGF0ZS5VVEMoXG4gICAgICAgICAgcGFyc2VJbnQoZHBbMF0sIDEwKSwgcGFyc2VJbnQoZHBbMV0sIDEwKSAtIDEsIHBhcnNlSW50KGRwWzJdLCAxMCksXG4gICAgICAgICAgaG91ciwgbWludXRlIC0gb2Zmc2V0VG90YWxNaW51dGVzLCBzZWNvbmRcbiAgICAgICAgKSk7XG5cbiAgICAgICAgY29uc3QgdW5peFNlY3MgPSBCaWdJbnQoTWF0aC5mbG9vcihkLmdldFRpbWUoKSAvIDEwMDApKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYygxMik7XG4gICAgICAgIGRhdGEud3JpdGVCaWdJbnQ2NExFKHVuaXhTZWNzLCAwKTtcbiAgICAgICAgZGF0YS53cml0ZVVJbnQzMkxFKG5hbm9zZWNvbmQsIDgpO1xuICAgICAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuVElNRVNUQU1QLCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gICAgICB9XG5cbiAgICAgIC8vIE5vIG9mZnNldCDigJQgdHJlYXQgYXMgbG9jYWwgZGF0ZXRpbWUgKGNvbnZlcnQgdG8gVVRDIHVzaW5nIERhdGUuVVRDKVxuICAgICAgY29uc3QgZHAgPSBkYXRlUGFydC5zcGxpdCgnLScpO1xuICAgICAgY29uc3QgeyBob3VyLCBtaW51dGUsIHNlY29uZCwgbmFub3NlY29uZCB9ID0gcGFyc2VUaW1lU3RyaW5nKHJlc3QpO1xuICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKERhdGUuVVRDKFxuICAgICAgICBwYXJzZUludChkcFswXSwgMTApLCBwYXJzZUludChkcFsxXSwgMTApIC0gMSwgcGFyc2VJbnQoZHBbMl0sIDEwKSxcbiAgICAgICAgaG91ciwgbWludXRlLCBzZWNvbmRcbiAgICAgICkpO1xuICAgICAgY29uc3QgdW5peFNlY3MgPSBCaWdJbnQoTWF0aC5mbG9vcihkLmdldFRpbWUoKSAvIDEwMDApKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMTIpO1xuICAgICAgZGF0YS53cml0ZUJpZ0ludDY0TEUodW5peFNlY3MsIDApO1xuICAgICAgZGF0YS53cml0ZVVJbnQzMkxFKG5hbm9zZWNvbmQsIDgpO1xuICAgICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLlRJTUVTVEFNUCwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLllFQVJfVE9fTU9OVEg6IHtcbiAgICAgIC8vIElTTy04NjAxOiBcIlAyWTVNXCIsIFwiUDBNXCIsIFwiLVAxWTVNXCJcbiAgICAgIGNvbnN0IG5lZ2F0aXZlID0gcy5zdGFydHNXaXRoKCctJyk7XG4gICAgICBjb25zdCBib2R5ID0gbmVnYXRpdmUgPyBzLnN1YnN0cmluZygyKSA6IHMuc3Vic3RyaW5nKDEpOyAvLyBza2lwIFAgb3IgLVBcbiAgICAgIGxldCB5ZWFycyA9IDA7XG4gICAgICBsZXQgbW9udGhzID0gMDtcbiAgICAgIGNvbnN0IHltID0gYm9keS5tYXRjaCgvKFxcZCspWS8pO1xuICAgICAgaWYgKHltKSB5ZWFycyA9IHBhcnNlSW50KHltWzFdLCAxMCk7XG4gICAgICBjb25zdCBtbSA9IGJvZHkubWF0Y2goLyhcXGQrKU0vKTtcbiAgICAgIGlmIChtbSkgbW9udGhzID0gcGFyc2VJbnQobW1bMV0sIDEwKTtcbiAgICAgIGNvbnN0IHRvdGFsID0gKHllYXJzICogMTIgKyBtb250aHMpICogKG5lZ2F0aXZlID8gLTEgOiAxKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoNCk7XG4gICAgICBkYXRhLndyaXRlSW50MzJMRSh0b3RhbCwgMCk7XG4gICAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuWUVBUl9UT19NT05USCwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkRBWV9UT19TRUNPTkQ6IHtcbiAgICAgIC8vIElTTy04NjAxOiBcIlAzRFQ0SFwiLCBcIlBUMFNcIiwgXCJQMURUMkgzTTQuMTJTXCIsIFwiLVAzRFQ0SFwiXG4gICAgICBjb25zdCBuZWdhdGl2ZSA9IHMuc3RhcnRzV2l0aCgnLScpO1xuICAgICAgY29uc3QgYm9keSA9IG5lZ2F0aXZlID8gcy5zdWJzdHJpbmcoMikgOiBzLnN1YnN0cmluZygxKTsgLy8gc2tpcCBQIG9yIC1QXG4gICAgICBsZXQgZGF5cyA9IDA7XG4gICAgICBsZXQgaG91cnMgPSAwO1xuICAgICAgbGV0IG1pbnMgPSAwO1xuICAgICAgbGV0IHNlY3MgPSAwO1xuICAgICAgbGV0IG5hbm9zID0gMDtcblxuICAgICAgY29uc3QgdElkeCA9IGJvZHkuaW5kZXhPZignVCcpO1xuICAgICAgY29uc3QgZGF0ZVBhcnQyID0gdElkeCA+PSAwID8gYm9keS5zdWJzdHJpbmcoMCwgdElkeCkgOiBib2R5O1xuICAgICAgY29uc3QgdGltZVBhcnQyID0gdElkeCA+PSAwID8gYm9keS5zdWJzdHJpbmcodElkeCArIDEpIDogJyc7XG5cbiAgICAgIGNvbnN0IGRtID0gZGF0ZVBhcnQyLm1hdGNoKC8oXFxkKylELyk7XG4gICAgICBpZiAoZG0pIGRheXMgPSBwYXJzZUludChkbVsxXSwgMTApO1xuXG4gICAgICBpZiAodGltZVBhcnQyKSB7XG4gICAgICAgIGNvbnN0IGhtID0gdGltZVBhcnQyLm1hdGNoKC8oXFxkKylILyk7XG4gICAgICAgIGlmIChobSkgaG91cnMgPSBwYXJzZUludChobVsxXSwgMTApO1xuICAgICAgICBjb25zdCBtaW5tID0gdGltZVBhcnQyLm1hdGNoKC8oXFxkKylNLyk7XG4gICAgICAgIGlmIChtaW5tKSBtaW5zID0gcGFyc2VJbnQobWlubVsxXSwgMTApO1xuICAgICAgICBjb25zdCBzbSA9IHRpbWVQYXJ0Mi5tYXRjaCgvKFtcXGQuXSspUy8pO1xuICAgICAgICBpZiAoc20pIHtcbiAgICAgICAgICBjb25zdCBzZWNTdHIgPSBzbVsxXTtcbiAgICAgICAgICBjb25zdCBkb3RJZHggPSBzZWNTdHIuaW5kZXhPZignLicpO1xuICAgICAgICAgIGlmIChkb3RJZHggPj0gMCkge1xuICAgICAgICAgICAgc2VjcyA9IHBhcnNlSW50KHNlY1N0ci5zdWJzdHJpbmcoMCwgZG90SWR4KSwgMTApO1xuICAgICAgICAgICAgY29uc3QgZnJhYyA9IHNlY1N0ci5zdWJzdHJpbmcoZG90SWR4ICsgMSk7XG4gICAgICAgICAgICBuYW5vcyA9IHBhcnNlSW50KGZyYWMucGFkRW5kKDksICcwJykuc3Vic3RyaW5nKDAsIDkpLCAxMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlY3MgPSBwYXJzZUludChzZWNTdHIsIDEwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdG90YWxTZWNvbmRzID0gKGRheXMgKiA4NjQwMCArIGhvdXJzICogMzYwMCArIG1pbnMgKiA2MCArIHNlY3MpICogKG5lZ2F0aXZlID8gLTEgOiAxKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMTIpO1xuICAgICAgZGF0YS53cml0ZUJpZ0ludDY0TEUoQmlnSW50KHRvdGFsU2Vjb25kcyksIDApO1xuICAgICAgZGF0YS53cml0ZVVJbnQzMkxFKG5hbm9zLCA4KTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5EQVlfVE9fU0VDT05ELCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7IHR5cGU6IHRhcmdldFR5cGUsIGRhdGE6IEJ1ZmZlci5mcm9tKHMsICd1dGYtOCcpLCBpc051bGw6IGZhbHNlIH07XG4gIH1cbn1cblxuLyoqIFBhcnNlIFwiSEg6bW06c3NbLm5ubm5ubm5ubl1cIiBpbnRvIGNvbXBvbmVudHMgKi9cbmZ1bmN0aW9uIHBhcnNlVGltZVN0cmluZyhzOiBzdHJpbmcpOiB7IGhvdXI6IG51bWJlcjsgbWludXRlOiBudW1iZXI7IHNlY29uZDogbnVtYmVyOyBuYW5vc2Vjb25kOiBudW1iZXIgfSB7XG4gIGNvbnN0IGRvdElkeCA9IHMuaW5kZXhPZignLicpO1xuICBsZXQgdGltZVBvcnRpb246IHN0cmluZztcbiAgbGV0IG5hbm9zZWNvbmQgPSAwO1xuXG4gIGlmIChkb3RJZHggPj0gMCkge1xuICAgIHRpbWVQb3J0aW9uID0gcy5zdWJzdHJpbmcoMCwgZG90SWR4KTtcbiAgICBjb25zdCBmcmFjID0gcy5zdWJzdHJpbmcoZG90SWR4ICsgMSk7XG4gICAgbmFub3NlY29uZCA9IHBhcnNlSW50KGZyYWMucGFkRW5kKDksICcwJykuc3Vic3RyaW5nKDAsIDkpLCAxMCk7XG4gIH0gZWxzZSB7XG4gICAgdGltZVBvcnRpb24gPSBzO1xuICB9XG5cbiAgY29uc3QgcGFydHMgPSB0aW1lUG9ydGlvbi5zcGxpdCgnOicpO1xuICByZXR1cm4ge1xuICAgIGhvdXI6IHBhcnNlSW50KHBhcnRzWzBdLCAxMCksXG4gICAgbWludXRlOiBwYXJzZUludChwYXJ0c1sxXSwgMTApLFxuICAgIHNlY29uZDogcGFyc2VJbnQocGFydHNbMl0sIDEwKSxcbiAgICBuYW5vc2Vjb25kLFxuICB9O1xufVxuXG4vKiogU3BsaXQgXCJISDptbTpzc1subl0rSEg6TU1cIiBvciBcIkhIOm1tOnNzWy5uXS1ISDpNTVwiIGludG8gdGltZVBhcnQgYW5kIG9mZnNldFBhcnQuXG4gKiAgQWxzbyBzdXBwb3J0cyBaIHN1ZmZpeCAodHJlYXRlZCBhcyArMDA6MDApIGFuZCBzcGFjZS1zZXBhcmF0ZWQgb2Zmc2V0cyBsaWtlIFwiMTQ6MzA6MDAgKzA4OjAwXCIuICovXG5mdW5jdGlvbiBzcGxpdFRpbWVBbmRPZmZzZXQoczogc3RyaW5nKTogeyB0aW1lUGFydDogc3RyaW5nOyBvZmZzZXRQYXJ0OiBzdHJpbmcgfSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVPZmZzZXQocyk7XG4gIC8vIEZpbmQgdGhlIGxhc3QgJysnIG9yICctJyB0aGF0IGluZGljYXRlcyBvZmZzZXQgKHNraXAgdGhlIG9uZSBhdCBwb3NpdGlvbiAwIGlmIHByZXNlbnQpXG4gIC8vIE9mZnNldCBpcyBhbHdheXMgaW4gdGhlIGZvcm1hdCArSEg6TU0gb3IgLUhIOk1NIGF0IHRoZSBlbmRcbiAgLy8gU2VhcmNoIGZvciArIG9yIC0gdGhhdCBpcyBmb2xsb3dlZCBieSBleGFjdGx5IEREOkREIHBhdHRlcm4gYXQgZW5kXG4gIGNvbnN0IG1hdGNoID0gbm9ybWFsaXplZC5tYXRjaCgvXiguKz8pKFsrLV1cXGR7Mn06XFxkezJ9KSQvKTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIHsgdGltZVBhcnQ6IG1hdGNoWzFdLCBvZmZzZXRQYXJ0OiBtYXRjaFsyXSB9O1xuICB9XG4gIHJldHVybiB7IHRpbWVQYXJ0OiBub3JtYWxpemVkLCBvZmZzZXRQYXJ0OiAnKzAwOjAwJyB9O1xufVxuXG4vKipcbiAqIFJlbW92ZSB0cmFpbGluZyB0aW1lem9uZSBvZmZzZXQgb3IgWiBzdWZmaXggZnJvbSBhIGRhdGV0aW1lL3RpbWUgc3RyaW5nLlxuICogT25seSBsb29rcyBpbiB0aGUgbGFzdCB+MTAgY2hhcmFjdGVycyB0byBhdm9pZCBtYXRjaGluZyBkYXRlIGh5cGhlbnMgbGlrZSBcIjE5OTMtMDUtMDZcIi5cbiAqIFJldHVybnMgdGhlIGNsZWFuIGxvY2FsIHRpbWUvZGF0ZXRpbWUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiByZW1vdmVPZmZzZXQoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gSGFuZGxlIFogc3VmZml4XG4gIGlmIChzLmVuZHNXaXRoKCdaJykgfHwgcy5lbmRzV2l0aCgneicpKSB7XG4gICAgcmV0dXJuIHMuc2xpY2UoMCwgLTEpO1xuICB9XG4gIC8vIEhhbmRsZSBzcGFjZS1zZXBhcmF0ZWQgb2Zmc2V0OiBcIiArSEg6TU1cIiBvciBcIiAtSEg6TU1cIlxuICBjb25zdCBzcGFjZU9mZk1hdGNoID0gcy5tYXRjaCgvXiguKz8pXFxzK1srLV1cXGR7Mn06P1xcZHsyfSQvKTtcbiAgaWYgKHNwYWNlT2ZmTWF0Y2gpIHtcbiAgICByZXR1cm4gc3BhY2VPZmZNYXRjaFsxXTtcbiAgfVxuICAvLyBIYW5kbGUgYXR0YWNoZWQgb2Zmc2V0OiBcIitISDpNTVwiIG9yIFwiLUhIOk1NXCIgb3IgXCIrSEhNTVwiIG9yIFwiLUhITU1cIiBhdCBlbmRcbiAgLy8gT25seSBtYXRjaCBpbiB0aGUgbGFzdCAxMCBjaGFycyB0byBhdm9pZCBkYXRlIGh5cGhlbnNcbiAgY29uc3QgdGFpbCA9IHMubGVuZ3RoID4gMTAgPyBzLnN1YnN0cmluZyhzLmxlbmd0aCAtIDEwKSA6IHM7XG4gIGNvbnN0IG9mZk1hdGNoID0gdGFpbC5tYXRjaCgvWystXVxcZHsyfTo/XFxkezJ9JC8pO1xuICBpZiAob2ZmTWF0Y2gpIHtcbiAgICByZXR1cm4gcy5zdWJzdHJpbmcoMCwgcy5sZW5ndGggLSBvZmZNYXRjaFswXS5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBzO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHN0cmluZydzIHRyYWlsaW5nIG9mZnNldDogY29sbGFwc2Ugc3BhY2UgYmVmb3JlIG9mZnNldCwgY29udmVydCBaIHRvICswMDowMC5cbiAqIE9ubHkgbG9va3MgaW4gdGhlIGxhc3QgfjEwIGNoYXJhY3RlcnMgdG8gYXZvaWQgbWF0Y2hpbmcgZGF0ZSBoeXBoZW5zLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVPZmZzZXQoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gSGFuZGxlIFogc3VmZml4IOKGkiArMDA6MDBcbiAgaWYgKHMuZW5kc1dpdGgoJ1onKSB8fCBzLmVuZHNXaXRoKCd6JykpIHtcbiAgICByZXR1cm4gcy5zbGljZSgwLCAtMSkgKyAnKzAwOjAwJztcbiAgfVxuICAvLyBIYW5kbGUgc3BhY2Utc2VwYXJhdGVkIG9mZnNldDogXCIgK0hIOk1NXCIgb3IgXCIgLUhIOk1NXCJcbiAgY29uc3Qgc3BhY2VPZmZNYXRjaCA9IHMubWF0Y2goL14oLis/KVxccysoWystXVxcZHsyfTpcXGR7Mn0pJC8pO1xuICBpZiAoc3BhY2VPZmZNYXRjaCkge1xuICAgIHJldHVybiBzcGFjZU9mZk1hdGNoWzFdICsgc3BhY2VPZmZNYXRjaFsyXTtcbiAgfVxuICByZXR1cm4gcztcbn1cblxuXG4vKiogUGFyYW1ldGVyIGZvciBxdWVyaWVzICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtZXRlciB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmFsdWU6IFR5cGVkVmFsdWU7XG59XG5cbi8qKiBDcmVhdGUgYSBwYXJhbWV0ZXIgZnJvbSBuYW1lIGFuZCB2YWx1ZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhcmFtZXRlcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBQYXJhbWV0ZXIge1xuICByZXR1cm4geyBuYW1lLCB2YWx1ZTogY3JlYXRlVHlwZWRWYWx1ZSh2YWx1ZSkgfTtcbn1cbiJdfQ==
1214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRfdmFsdWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvdHlwZWRfdmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOztBQTBISCw0Q0FvTkM7QUFRRCx3Q0EwTUM7QUFvVUQsa0NBK0pDO0FBV0QsZ0NBa1JDO0FBeUZELDBDQUVDO0FBejNDRCxtQ0FBdUM7QUFDdkMseUNBQTREO0FBQzVELDZDQThCc0I7QUFZdEIsZ0ZBQWdGO0FBQ2hGLHdCQUF3QjtBQUN4QixnRkFBZ0Y7QUFFaEYsb0VBQW9FO0FBQ3BFLFNBQVMsWUFBWSxDQUFDLENBQVM7SUFDN0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsd0VBQXdFO0FBQ3hFLFNBQVMsWUFBWSxDQUFDLElBQVksRUFBRSxNQUFjO0lBQ2hELElBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxJQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxPQUFPLENB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QUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGVBQWUsQ0FBQyxDQUFTO0lBQ2hDLDJCQUEyQjtJQUMzQixJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDbkMsQ0FBQztJQUNELHdEQUF3RDtJQUN4RCxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDN0QsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNsQixPQUFPLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQVNELDZDQUE2QztBQUM3QyxTQUFnQixlQUFlLENBQUMsSUFBWSxFQUFFLEtBQVU7SUFDdEQsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlZFZhbHVlIGVuY29kaW5nIGFuZCBkZWNvZGluZyBmb3IgR1FMREIgTm9kZS5qcyBkcml2ZXIuXG4gKi9cblxuaW1wb3J0IHsgUHJvcGVydHlUeXBlIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBJbnQzMiwgVUludDMyLCBGbG9hdDMyLCBVSW50NjQgfSBmcm9tICcuL3dyYXBwZXJzJztcbmltcG9ydCB7XG4gIFBvaW50LFxuICBQb2ludDNELFxuICBHcWxkYkRlY2ltYWwsXG4gIEdxbGRiVGltZXN0YW1wLFxuICBHcWxkYkxvY2FsRGF0ZVRpbWUsXG4gIEdxbGRiRGF0ZSxcbiAgR3FsZGJab25lZERhdGVUaW1lLFxuICBHcWxkYkxvY2FsVGltZSxcbiAgR3FsZGJab25lZFRpbWUsXG4gIEdxbGRiVGFibGUsXG4gIFllYXJUb01vbnRoLFxuICBEYXlUb1NlY29uZCxcbiAgVmVjdG9yLFxuICBpc1BvaW50LFxuICBpc1BvaW50M0QsXG4gIGlzR3FsZGJEZWNpbWFsLFxuICBpc0dxbGRiVGltZXN0YW1wLFxuICBpc0dxbGRiTG9jYWxEYXRlVGltZSxcbiAgaXNHcWxkYkRhdGUsXG4gIGlzR3FsZGJab25lZERhdGVUaW1lLFxuICBpc0dxbGRiTG9jYWxUaW1lLFxuICBpc0dxbGRiWm9uZWRUaW1lLFxuICBpc1llYXJUb01vbnRoLFxuICBpc0RheVRvU2Vjb25kLFxuICBpc1ZlY3RvcixcbiAgaXNHcWxkYlNldCxcbiAgdGltZXN0YW1wRnJvbURhdGUsXG4gIGNyZWF0ZVRpbWVzdGFtcCxcbiAgY3JlYXRlTG9jYWxEYXRlVGltZSxcbn0gZnJvbSAnLi9kYXRhX3R5cGVzJztcbmltcG9ydCB7IEdxbGRiTm9kZSwgR3FsZGJFZGdlLCBHcWxkYlBhdGgsIEdxbGRiRXJyb3IgfSBmcm9tICcuL2dyYXBoX21vZGVscyc7XG5cblxuLyoqIFJlcHJlc2VudHMgYSB0eXBlZCB2YWx1ZSBmb3Igd2lyZSB0cmFuc21pc3Npb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZWRWYWx1ZSB7XG4gIHR5cGU6IFByb3BlcnR5VHlwZTtcbiAgZGF0YTogQnVmZmVyO1xuICBpc051bGw6IGJvb2xlYW47XG59XG5cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJpbmFyeSBGb3JtYXQgSGVscGVyc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEVuY29kZSBhIGxlbmd0aC1wcmVmaXhlZCBzdHJpbmc6IFtsZW46MiB1aW50MTZMRV1bdXRmOCBieXRlc10gKi9cbmZ1bmN0aW9uIGVuY29kZVN0cmluZyhzOiBzdHJpbmcpOiBCdWZmZXIge1xuICBjb25zdCBzdHJCdWYgPSBCdWZmZXIuZnJvbShzLCAndXRmLTgnKTtcbiAgY29uc3QgcmVzdWx0ID0gQnVmZmVyLmFsbG9jKDIgKyBzdHJCdWYubGVuZ3RoKTtcbiAgcmVzdWx0LndyaXRlVUludDE2TEUoc3RyQnVmLmxlbmd0aCwgMCk7XG4gIHN0ckJ1Zi5jb3B5KHJlc3VsdCwgMik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBEZWNvZGUgYSBsZW5ndGgtcHJlZml4ZWQgc3RyaW5nLiBSZXR1cm5zIFtzdHJpbmcsIGJ5dGVzQ29uc3VtZWRdLiAqL1xuZnVuY3Rpb24gZGVjb2RlU3RyaW5nKGRhdGE6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIpOiBbc3RyaW5nLCBudW1iZXJdIHtcbiAgaWYgKG9mZnNldCArIDIgPiBkYXRhLmxlbmd0aCkgcmV0dXJuIFsnJywgMF07XG4gIGNvbnN0IGxlbiA9IGRhdGEucmVhZFVJbnQxNkxFKG9mZnNldCk7XG4gIGlmIChvZmZzZXQgKyAyICsgbGVuID4gZGF0YS5sZW5ndGgpIHJldHVybiBbJycsIDBdO1xuICByZXR1cm4gW2RhdGEuc2xpY2Uob2Zmc2V0ICsgMiwgb2Zmc2V0ICsgMiArIGxlbikudG9TdHJpbmcoJ3V0Zi04JyksIDIgKyBsZW5dO1xufVxuXG4vKiogRW5jb2RlIGEgVHlwZWRWYWx1ZUVudHJ5OiBbdHlwZToxXVtpc051bGw6MV1bZGF0YUxlbjo0IHVpbnQzMkxFXVtkYXRhXSAqL1xuZnVuY3Rpb24gZW5jb2RlVHlwZWRWYWx1ZUVudHJ5KHR2OiBUeXBlZFZhbHVlKTogQnVmZmVyIHtcbiAgY29uc3QgcmVzdWx0ID0gQnVmZmVyLmFsbG9jKDYgKyB0di5kYXRhLmxlbmd0aCk7XG4gIHJlc3VsdC53cml0ZVVJbnQ4KHR2LnR5cGUsIDApO1xuICByZXN1bHQud3JpdGVVSW50OCh0di5pc051bGwgPyAxIDogMCwgMSk7XG4gIHJlc3VsdC53cml0ZVVJbnQzMkxFKHR2LmRhdGEubGVuZ3RoLCAyKTtcbiAgaWYgKHR2LmRhdGEubGVuZ3RoID4gMCkge1xuICAgIHR2LmRhdGEuY29weShyZXN1bHQsIDYpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBEZWNvZGUgYSBUeXBlZFZhbHVlRW50cnkuIFJldHVybnMgW1R5cGVkVmFsdWUsIGJ5dGVzQ29uc3VtZWRdLiAqL1xuZnVuY3Rpb24gZGVjb2RlVHlwZWRWYWx1ZUVudHJ5KGRhdGE6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIpOiBbVHlwZWRWYWx1ZSwgbnVtYmVyXSB7XG4gIGlmIChvZmZzZXQgKyA2ID4gZGF0YS5sZW5ndGgpIHtcbiAgICByZXR1cm4gW3sgdHlwZTogUHJvcGVydHlUeXBlLk5VTEwsIGRhdGE6IEJ1ZmZlci5hbGxvYygwKSwgaXNOdWxsOiB0cnVlIH0sIDBdO1xuICB9XG4gIGNvbnN0IHR5cGUgPSBkYXRhLnJlYWRVSW50OChvZmZzZXQpIGFzIFByb3BlcnR5VHlwZTtcbiAgY29uc3QgaXNOdWxsID0gZGF0YS5yZWFkVUludDgob2Zmc2V0ICsgMSkgIT09IDA7XG4gIGNvbnN0IGRhdGFMZW4gPSBkYXRhLnJlYWRVSW50MzJMRShvZmZzZXQgKyAyKTtcbiAgaWYgKG9mZnNldCArIDYgKyBkYXRhTGVuID4gZGF0YS5sZW5ndGgpIHtcbiAgICByZXR1cm4gW3sgdHlwZTogUHJvcGVydHlUeXBlLk5VTEwsIGRhdGE6IEJ1ZmZlci5hbGxvYygwKSwgaXNOdWxsOiB0cnVlIH0sIDBdO1xuICB9XG4gIGNvbnN0IHR2RGF0YSA9IGRhdGEuc2xpY2Uob2Zmc2V0ICsgNiwgb2Zmc2V0ICsgNiArIGRhdGFMZW4pO1xuICByZXR1cm4gW3sgdHlwZSwgZGF0YTogdHZEYXRhLCBpc051bGwgfSwgNiArIGRhdGFMZW5dO1xufVxuXG4vKiogRGVjb2RlIGJpbmFyeSBwcm9wZXJ0aWVzOiBbY291bnQ6Ml1ba2V5TGVuOjJdW2tleV1bVFZFXS4uLiAqL1xuZnVuY3Rpb24gZGVjb2RlUHJvcGVydGllc0JpbmFyeShkYXRhOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyKTogW1JlY29yZDxzdHJpbmcsIGFueT4sIG51bWJlcl0ge1xuICBpZiAob2Zmc2V0ICsgMiA+IGRhdGEubGVuZ3RoKSByZXR1cm4gW3t9LCAwXTtcbiAgY29uc3QgY291bnQgPSBkYXRhLnJlYWRVSW50MTZMRShvZmZzZXQpO1xuICBsZXQgcG9zID0gb2Zmc2V0ICsgMjtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgY29uc3QgW2tleSwga2V5TGVuXSA9IGRlY29kZVN0cmluZyhkYXRhLCBwb3MpO1xuICAgIGlmIChrZXlMZW4gPT09IDApIGJyZWFrO1xuICAgIHBvcyArPSBrZXlMZW47XG5cbiAgICBjb25zdCBbdHYsIHR2TGVuXSA9IGRlY29kZVR5cGVkVmFsdWVFbnRyeShkYXRhLCBwb3MpO1xuICAgIGlmICh0dkxlbiA9PT0gMCkgYnJlYWs7XG4gICAgcG9zICs9IHR2TGVuO1xuXG4gICAgcmVzdWx0W2tleV0gPSB0eXBlZFZhbHVlVG9KUyh0dik7XG4gIH1cblxuICByZXR1cm4gW3Jlc3VsdCwgcG9zIC0gb2Zmc2V0XTtcbn1cblxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRW5jb2Rpbmc6IEpTIOKGkiBUeXBlZFZhbHVlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQ3JlYXRlIGEgVHlwZWRWYWx1ZSBmcm9tIGEgSmF2YVNjcmlwdCB2YWx1ZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVR5cGVkVmFsdWUodmFsdWU6IGFueSk6IFR5cGVkVmFsdWUge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5OVUxMLCBkYXRhOiBCdWZmZXIuYWxsb2MoMCksIGlzTnVsbDogdHJ1ZSB9O1xuICB9XG5cbiAgLy8gUGFzcy10aHJvdWdoOiBpZiBhbHJlYWR5IGEgVHlwZWRWYWx1ZSwgcmV0dXJuIGRpcmVjdGx5XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICd0eXBlJyBpbiB2YWx1ZSAmJiAnZGF0YScgaW4gdmFsdWUgJiYgJ2lzTnVsbCcgaW4gdmFsdWUgJiYgdmFsdWUuZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgIHJldHVybiB2YWx1ZSBhcyBUeXBlZFZhbHVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYygxKTtcbiAgICBkYXRhLndyaXRlVUludDgodmFsdWUgPyAxIDogMCwgMCk7XG4gICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLkJPT0wsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBleHBsaWNpdCB0eXBlIHdyYXBwZXJzXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEludDMyKSB7XG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICBkYXRhLndyaXRlSW50MzJMRSh2YWx1ZS52YWx1ZSwgMCk7XG4gICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLklOVDMyLCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gIH1cblxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVSW50MzIpIHtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDQpO1xuICAgIGRhdGEud3JpdGVVSW50MzJMRSh2YWx1ZS52YWx1ZSwgMCk7XG4gICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLlVJTlQzMiwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICB9XG5cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmxvYXQzMikge1xuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoNCk7XG4gICAgZGF0YS53cml0ZUZsb2F0TEUodmFsdWUudmFsdWUsIDApO1xuICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5GTE9BVCwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICB9XG5cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVUludDY0KSB7XG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg4KTtcbiAgICBkYXRhLndyaXRlQmlnVUludDY0TEUodmFsdWUudmFsdWUsIDApO1xuICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5VSU5UNjQsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgLy8gVXNlIGlzU2FmZUludGVnZXIgdG8gYXZvaWQgaXNzdWVzIHdpdGggbGFyZ2UgZmxvYXRzIGxpa2UgTnVtYmVyLk1BWF9WQUxVRVxuICAgIC8vIHdoaWNoIGFwcGVhciBhcyBpbnRlZ2VycyBkdWUgdG8gcHJlY2lzaW9uIGxvc3NcbiAgICBpZiAoTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWUpKSB7XG4gICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDgpO1xuICAgICAgZGF0YS53cml0ZUJpZ0ludDY0TEUoQmlnSW50KHZhbHVlKSwgMCk7XG4gICAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuSU5UNjQsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg4KTtcbiAgICAgIGRhdGEud3JpdGVEb3VibGVMRSh2YWx1ZSwgMCk7XG4gICAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuRE9VQkxFLCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDgpO1xuICAgIC8vIENoZWNrIGlmIHZhbHVlIGZpdHMgaW4gc2lnbmVkIElOVDY0IHJhbmdlXG4gICAgY29uc3QgSU5UNjRfTUlOID0gQmlnSW50KCctOTIyMzM3MjAzNjg1NDc3NTgwOCcpO1xuICAgIGNvbnN0IElOVDY0X01BWCA9IEJpZ0ludCgnOTIyMzM3MjAzNjg1NDc3NTgwNycpO1xuICAgIGlmICh2YWx1ZSA+PSBJTlQ2NF9NSU4gJiYgdmFsdWUgPD0gSU5UNjRfTUFYKSB7XG4gICAgICBkYXRhLndyaXRlQmlnSW50NjRMRSh2YWx1ZSwgMCk7XG4gICAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuSU5UNjQsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVmFsdWUgaXMgb3V0c2lkZSBJTlQ2NCByYW5nZSwgdXNlIFVJTlQ2NFxuICAgICAgZGF0YS53cml0ZUJpZ1VJbnQ2NExFKHZhbHVlLCAwKTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5VSU5UNjQsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5TVFJJTkcsIGRhdGE6IEJ1ZmZlci5mcm9tKHZhbHVlLCAndXRmLTgnKSwgaXNOdWxsOiBmYWxzZSB9O1xuICB9XG5cbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuQkxPQiwgZGF0YTogdmFsdWUsIGlzTnVsbDogZmFsc2UgfTtcbiAgfVxuXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICBjb25zdCB1bml4U2Vjb25kcyA9IEJpZ0ludChNYXRoLmZsb29yKHZhbHVlLmdldFRpbWUoKSAvIDEwMDApKTtcbiAgICBjb25zdCBuYW5vcyA9ICh2YWx1ZS5nZXRUaW1lKCkgJSAxMDAwKSAqIDFfMDAwXzAwMDtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDEyKTtcbiAgICBkYXRhLndyaXRlQmlnSW50NjRMRSh1bml4U2Vjb25kcywgMCk7XG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKG5hbm9zIDwgMCA/IG5hbm9zICsgMV8wMDBfMDAwXzAwMCA6IG5hbm9zLCA4KTtcbiAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuVElNRVNUQU1QLCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gIH1cblxuICBpZiAoaXNHcWxkYlRpbWVzdGFtcCh2YWx1ZSkpIHtcbiAgICBjb25zdCB1bml4U2Vjb25kcyA9IEJpZ0ludChNYXRoLmZsb29yKFxuICAgICAgRGF0ZS5VVEModmFsdWUueWVhciwgdmFsdWUubW9udGggLSAxLCB2YWx1ZS5kYXksIHZhbHVlLmhvdXIsIHZhbHVlLm1pbnV0ZSwgdmFsdWUuc2Vjb25kKSAvIDEwMDBcbiAgICApKTtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDEyKTtcbiAgICBkYXRhLndyaXRlQmlnSW50NjRMRSh1bml4U2Vjb25kcywgMCk7XG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKHZhbHVlLm5hbm9zZWNvbmQsIDgpO1xuICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5USU1FU1RBTVAsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBlbmNvZGVMaXN0KHZhbHVlKTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBuZXcgdHlwZXMgYmVmb3JlIGdlbmVyaWMgb2JqZWN0IGhhbmRsaW5nXG4gIGlmIChpc1BvaW50KHZhbHVlKSkge1xuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMTYpO1xuICAgIGRhdGEud3JpdGVEb3VibGVMRSh2YWx1ZS5sb25naXR1ZGUsIDApO1xuICAgIGRhdGEud3JpdGVEb3VibGVMRSh2YWx1ZS5sYXRpdHVkZSwgOCk7XG4gICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLlBPSU5ULCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gIH1cblxuICBpZiAoaXNQb2ludDNEKHZhbHVlKSkge1xuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMjQpO1xuICAgIGRhdGEud3JpdGVEb3VibGVMRSh2YWx1ZS54LCAwKTtcbiAgICBkYXRhLndyaXRlRG91YmxlTEUodmFsdWUueSwgOCk7XG4gICAgZGF0YS53cml0ZURvdWJsZUxFKHZhbHVlLnosIDE2KTtcbiAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuUE9JTlQzRCwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICB9XG5cbiAgaWYgKGlzR3FsZGJEZWNpbWFsKHZhbHVlKSkge1xuICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5ERUNJTUFMLCBkYXRhOiBCdWZmZXIuZnJvbSh2YWx1ZS52YWx1ZSwgJ3V0Zi04JyksIGlzTnVsbDogZmFsc2UgfTtcbiAgfVxuXG4gIGlmIChpc0dxbGRiTG9jYWxEYXRlVGltZSh2YWx1ZSkpIHtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDExKTtcbiAgICAvLyB5ZWFyIGlzIHNpZ25lZCBpbnQxNiBzbyBCQ0UgeWVhcnMgKGUuZy4gLTQ0KSByb3VuZC10cmlwLlxuICAgIGRhdGEud3JpdGVJbnQxNkxFKHZhbHVlLnllYXIsIDApO1xuICAgIGRhdGEud3JpdGVVSW50OCh2YWx1ZS5tb250aCwgMik7XG4gICAgZGF0YS53cml0ZVVJbnQ4KHZhbHVlLmRheSwgMyk7XG4gICAgZGF0YS53cml0ZVVJbnQ4KHZhbHVlLmhvdXIsIDQpO1xuICAgIGRhdGEud3JpdGVVSW50OCh2YWx1ZS5taW51dGUsIDUpO1xuICAgIGRhdGEud3JpdGVVSW50OCh2YWx1ZS5zZWNvbmQsIDYpO1xuICAgIGRhdGEud3JpdGVVSW50MzJMRSh2YWx1ZS5uYW5vc2Vjb25kLCA3KTtcbiAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuTE9DQUxfREFURVRJTUUsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgfVxuXG4gIGlmIChpc0dxbGRiRGF0ZSh2YWx1ZSkpIHtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDgpO1xuICAgIC8vIHllYXIgaXMgc2lnbmVkIGludDE2IHNvIEJDRSB5ZWFycyAoZS5nLiAtNDQpIHJvdW5kLXRyaXAuXG4gICAgZGF0YS53cml0ZUludDE2TEUodmFsdWUueWVhciwgMCk7XG4gICAgZGF0YS53cml0ZVVJbnQ4KHZhbHVlLm1vbnRoLCAyKTtcbiAgICBkYXRhLndyaXRlVUludDgodmFsdWUuZGF5LCAzKTtcbiAgICAvLyBieXRlcyA0LTcgYXJlIHBhZGRpbmcgKHplcm9zKVxuICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5EQVRFLCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gIH1cblxuICBpZiAoaXNHcWxkYlpvbmVkRGF0ZVRpbWUodmFsdWUpKSB7XG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYygxMyk7XG4gICAgLy8geWVhciBpcyBzaWduZWQgaW50MTYgc28gQkNFIHllYXJzIChlLmcuIC00NCkgcm91bmQtdHJpcC5cbiAgICBkYXRhLndyaXRlSW50MTZMRSh2YWx1ZS55ZWFyLCAwKTtcbiAgICBkYXRhLndyaXRlVUludDgodmFsdWUubW9udGgsIDIpO1xuICAgIGRhdGEud3JpdGVVSW50OCh2YWx1ZS5kYXksIDMpO1xuICAgIGRhdGEud3JpdGVVSW50OCh2YWx1ZS5ob3VyLCA0KTtcbiAgICBkYXRhLndyaXRlVUludDgodmFsdWUubWludXRlLCA1KTtcbiAgICBkYXRhLndyaXRlVUludDgodmFsdWUuc2Vjb25kLCA2KTtcbiAgICBkYXRhLndyaXRlVUludDMyTEUodmFsdWUubmFub3NlY29uZCwgNyk7XG4gICAgZGF0YS53cml0ZUludDE2TEUodmFsdWUub2Zmc2V0TWludXRlcywgMTEpO1xuICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5aT05FRF9EQVRFVElNRSwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICB9XG5cbiAgaWYgKGlzR3FsZGJab25lZFRpbWUodmFsdWUpKSB7XG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYygxMCk7XG4gICAgZGF0YS53cml0ZVVJbnQ4KHZhbHVlLmhvdXIsIDApO1xuICAgIGRhdGEud3JpdGVVSW50OCh2YWx1ZS5taW51dGUsIDEpO1xuICAgIGRhdGEud3JpdGVVSW50OCh2YWx1ZS5zZWNvbmQsIDIpO1xuICAgIC8vIGJ5dGUgMyBpcyBwYWRkaW5nXG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKHZhbHVlLm5hbm9zZWNvbmQsIDQpO1xuICAgIGRhdGEud3JpdGVJbnQxNkxFKHZhbHVlLm9mZnNldE1pbnV0ZXMsIDgpO1xuICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5aT05FRF9USU1FLCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gIH1cblxuICBpZiAoaXNHcWxkYkxvY2FsVGltZSh2YWx1ZSkpIHtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDgpO1xuICAgIGRhdGEud3JpdGVVSW50OCh2YWx1ZS5ob3VyLCAwKTtcbiAgICBkYXRhLndyaXRlVUludDgodmFsdWUubWludXRlLCAxKTtcbiAgICBkYXRhLndyaXRlVUludDgodmFsdWUuc2Vjb25kLCAyKTtcbiAgICAvLyBieXRlIDMgaXMgcGFkZGluZ1xuICAgIGRhdGEud3JpdGVVSW50MzJMRSh2YWx1ZS5uYW5vc2Vjb25kLCA0KTtcbiAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuTE9DQUxfVElNRSwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICB9XG5cbiAgaWYgKGlzWWVhclRvTW9udGgodmFsdWUpKSB7XG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICBkYXRhLndyaXRlSW50MzJMRSh2YWx1ZS5tb250aHMsIDApO1xuICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5ZRUFSX1RPX01PTlRILCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gIH1cblxuICBpZiAoaXNEYXlUb1NlY29uZCh2YWx1ZSkpIHtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDEyKTtcbiAgICAvLyBzZWNvbmRzIGlzIHNpZ25lZCAoaW50NjQpIHNvIG5lZ2F0aXZlIGR1cmF0aW9ucyByb3VuZC10cmlwIGNvcnJlY3RseSxcbiAgICAvLyBtYXRjaGluZyBKYXZhJ3MgbG9uZyBhbmQgUHl0aG9uJ3MgYDxxYCBzdHJ1Y3QgZm9ybWF0LlxuICAgIGRhdGEud3JpdGVCaWdJbnQ2NExFKEJpZ0ludCh2YWx1ZS5zZWNvbmRzKSwgMCk7XG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKHZhbHVlLm5hbm9zZWNvbmRzLCA4KTtcbiAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuREFZX1RPX1NFQ09ORCwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICB9XG5cbiAgaWYgKGlzVmVjdG9yKHZhbHVlKSkge1xuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoNCArIHZhbHVlLnZhbHVlcy5sZW5ndGggKiA0KTtcbiAgICBkYXRhLndyaXRlVUludDMyTEUodmFsdWUudmFsdWVzLmxlbmd0aCwgMCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS52YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRhdGEud3JpdGVGbG9hdExFKHZhbHVlLnZhbHVlc1tpXSwgNCArIGkgKiA0KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLlZFQ1RPUiwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICB9XG5cbiAgaWYgKGlzR3FsZGJTZXQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGVuY29kZVNldCh2YWx1ZSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBlbmNvZGVNYXAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYW55Pik7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHR5cGU6ICR7dHlwZW9mIHZhbHVlfWApO1xufVxuXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEZWNvZGluZzogVHlwZWRWYWx1ZSDihpIgSlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBDb252ZXJ0IGEgVHlwZWRWYWx1ZSB0byBhIEphdmFTY3JpcHQgdmFsdWUgKi9cbmV4cG9ydCBmdW5jdGlvbiB0eXBlZFZhbHVlVG9KUyh0djogVHlwZWRWYWx1ZSk6IGFueSB7XG4gIGlmICh0di5pc051bGwgfHwgdHYudHlwZSA9PT0gUHJvcGVydHlUeXBlLk5VTEwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAodHYudHlwZSkge1xuICAgIGNhc2UgUHJvcGVydHlUeXBlLkJPT0w6XG4gICAgICByZXR1cm4gdHYuZGF0YS5sZW5ndGggPj0gMSAmJiB0di5kYXRhLnJlYWRVSW50OCgwKSAhPT0gMDtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLklOVDMyOlxuICAgICAgcmV0dXJuIHR2LmRhdGEubGVuZ3RoID49IDQgPyB0di5kYXRhLnJlYWRJbnQzMkxFKDApIDogMDtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlVJTlQzMjpcbiAgICAgIHJldHVybiB0di5kYXRhLmxlbmd0aCA+PSA0ID8gdHYuZGF0YS5yZWFkVUludDMyTEUoMCkgOiAwO1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuSU5UNjQ6IHtcbiAgICAgIGlmICh0di5kYXRhLmxlbmd0aCA8IDgpIHJldHVybiAwO1xuICAgICAgY29uc3QgYmlnVmFsID0gdHYuZGF0YS5yZWFkQmlnSW50NjRMRSgwKTtcbiAgICAgIC8vIFJldHVybiByZWd1bGFyIG51bWJlciBpZiB2YWx1ZSBmaXRzIGluIHNhZmUgaW50ZWdlciByYW5nZVxuICAgICAgaWYgKGJpZ1ZhbCA+PSBCaWdJbnQoTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpICYmIGJpZ1ZhbCA8PSBCaWdJbnQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIoYmlnVmFsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiaWdWYWw7XG4gICAgfVxuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuVUlOVDY0OiB7XG4gICAgICBpZiAodHYuZGF0YS5sZW5ndGggPCA4KSByZXR1cm4gMDtcbiAgICAgIGNvbnN0IGJpZ1ZhbCA9IHR2LmRhdGEucmVhZEJpZ1VJbnQ2NExFKDApO1xuICAgICAgLy8gUmV0dXJuIHJlZ3VsYXIgbnVtYmVyIGlmIHZhbHVlIGZpdHMgaW4gc2FmZSBpbnRlZ2VyIHJhbmdlXG4gICAgICBpZiAoYmlnVmFsIDw9IEJpZ0ludChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpIHtcbiAgICAgICAgcmV0dXJuIE51bWJlcihiaWdWYWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJpZ1ZhbDtcbiAgICB9XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5GTE9BVDpcbiAgICAgIHJldHVybiB0di5kYXRhLmxlbmd0aCA+PSA0ID8gdHYuZGF0YS5yZWFkRmxvYXRMRSgwKSA6IDA7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5ET1VCTEU6XG4gICAgICByZXR1cm4gdHYuZGF0YS5sZW5ndGggPj0gOCA/IHR2LmRhdGEucmVhZERvdWJsZUxFKDApIDogMDtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlNUUklORzpcbiAgICBjYXNlIFByb3BlcnR5VHlwZS5URVhUOlxuICAgICAgcmV0dXJuIHR2LmRhdGEudG9TdHJpbmcoJ3V0Zi04Jyk7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5CTE9COlxuICAgICAgcmV0dXJuIHR2LmRhdGE7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5USU1FU1RBTVA6XG4gICAgICBpZiAodHYuZGF0YS5sZW5ndGggPj0gMTIpIHtcbiAgICAgICAgY29uc3Qgc2VjcyA9IE51bWJlcih0di5kYXRhLnJlYWRCaWdJbnQ2NExFKDApKTtcbiAgICAgICAgY29uc3QgbmFub3MgPSB0di5kYXRhLnJlYWRVSW50MzJMRSg4KTtcbiAgICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKHNlY3MgKiAxMDAwICsgTWF0aC5mbG9vcihuYW5vcyAvIDFfMDAwXzAwMCkpO1xuICAgICAgICByZXR1cm4gY3JlYXRlVGltZXN0YW1wKFxuICAgICAgICAgIGQuZ2V0VVRDRnVsbFllYXIoKSxcbiAgICAgICAgICBkLmdldFVUQ01vbnRoKCkgKyAxLFxuICAgICAgICAgIGQuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgIGQuZ2V0VVRDSG91cnMoKSxcbiAgICAgICAgICBkLmdldFVUQ01pbnV0ZXMoKSxcbiAgICAgICAgICBkLmdldFVUQ1NlY29uZHMoKSxcbiAgICAgICAgICBuYW5vcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVhdGVUaW1lc3RhbXAoMCwgMCwgMCwgMCwgMCwgMCwgMCk7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5EQVRFOlxuICAgICAgaWYgKHR2LmRhdGEubGVuZ3RoID49IDQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAvLyB5ZWFyIGlzIHNpZ25lZCBpbnQxNiBzbyBCQ0UgeWVhcnMgKGUuZy4gLTQ0KSByb3VuZC10cmlwLlxuICAgICAgICAgIHllYXI6IHR2LmRhdGEucmVhZEludDE2TEUoMCksXG4gICAgICAgICAgbW9udGg6IHR2LmRhdGEucmVhZFVJbnQ4KDIpLFxuICAgICAgICAgIGRheTogdHYuZGF0YS5yZWFkVUludDgoMyksXG4gICAgICAgIH0gYXMgR3FsZGJEYXRlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgeWVhcjogMCwgbW9udGg6IDAsIGRheTogMCB9IGFzIEdxbGRiRGF0ZTtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkxPQ0FMX1RJTUU6XG4gICAgICBpZiAodHYuZGF0YS5sZW5ndGggPj0gOCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhvdXI6IHR2LmRhdGEucmVhZFVJbnQ4KDApLFxuICAgICAgICAgIG1pbnV0ZTogdHYuZGF0YS5yZWFkVUludDgoMSksXG4gICAgICAgICAgc2Vjb25kOiB0di5kYXRhLnJlYWRVSW50OCgyKSxcbiAgICAgICAgICBuYW5vc2Vjb25kOiB0di5kYXRhLnJlYWRVSW50MzJMRSg0KSxcbiAgICAgICAgfSBhcyBHcWxkYkxvY2FsVGltZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBuYW5vc2Vjb25kOiAwIH0gYXMgR3FsZGJMb2NhbFRpbWU7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5aT05FRF9USU1FOlxuICAgICAgaWYgKHR2LmRhdGEubGVuZ3RoID49IDEwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaG91cjogdHYuZGF0YS5yZWFkVUludDgoMCksXG4gICAgICAgICAgbWludXRlOiB0di5kYXRhLnJlYWRVSW50OCgxKSxcbiAgICAgICAgICBzZWNvbmQ6IHR2LmRhdGEucmVhZFVJbnQ4KDIpLFxuICAgICAgICAgIG5hbm9zZWNvbmQ6IHR2LmRhdGEucmVhZFVJbnQzMkxFKDQpLFxuICAgICAgICAgIG9mZnNldE1pbnV0ZXM6IHR2LmRhdGEucmVhZEludDE2TEUoOCksXG4gICAgICAgIH0gYXMgR3FsZGJab25lZFRpbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbmFub3NlY29uZDogMCwgb2Zmc2V0TWludXRlczogMCB9IGFzIEdxbGRiWm9uZWRUaW1lO1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuWk9ORURfREFURVRJTUU6XG4gICAgICBpZiAodHYuZGF0YS5sZW5ndGggPj0gMTMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAvLyB5ZWFyIGlzIHNpZ25lZCBpbnQxNiBzbyBCQ0UgeWVhcnMgKGUuZy4gLTQ0KSByb3VuZC10cmlwLlxuICAgICAgICAgIHllYXI6IHR2LmRhdGEucmVhZEludDE2TEUoMCksXG4gICAgICAgICAgbW9udGg6IHR2LmRhdGEucmVhZFVJbnQ4KDIpLFxuICAgICAgICAgIGRheTogdHYuZGF0YS5yZWFkVUludDgoMyksXG4gICAgICAgICAgaG91cjogdHYuZGF0YS5yZWFkVUludDgoNCksXG4gICAgICAgICAgbWludXRlOiB0di5kYXRhLnJlYWRVSW50OCg1KSxcbiAgICAgICAgICBzZWNvbmQ6IHR2LmRhdGEucmVhZFVJbnQ4KDYpLFxuICAgICAgICAgIG5hbm9zZWNvbmQ6IHR2LmRhdGEucmVhZFVJbnQzMkxFKDcpLFxuICAgICAgICAgIG9mZnNldE1pbnV0ZXM6IHR2LmRhdGEucmVhZEludDE2TEUoMTEpLFxuICAgICAgICB9IGFzIEdxbGRiWm9uZWREYXRlVGltZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHllYXI6IDAsIG1vbnRoOiAwLCBkYXk6IDAsIGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBuYW5vc2Vjb25kOiAwLCBvZmZzZXRNaW51dGVzOiAwIH0gYXMgR3FsZGJab25lZERhdGVUaW1lO1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuTE9DQUxfREFURVRJTUU6XG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuREFURVRJTUU6XG4gICAgICBpZiAodHYuZGF0YS5sZW5ndGggPj0gMTEpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsRGF0ZVRpbWUoXG4gICAgICAgICAgLy8geWVhciBpcyBzaWduZWQgaW50MTYgc28gQkNFIHllYXJzIChlLmcuIC00NCkgcm91bmQtdHJpcC5cbiAgICAgICAgICB0di5kYXRhLnJlYWRJbnQxNkxFKDApLCAgICAvLyB5ZWFyXG4gICAgICAgICAgdHYuZGF0YS5yZWFkVUludDgoMiksICAgICAgLy8gbW9udGhcbiAgICAgICAgICB0di5kYXRhLnJlYWRVSW50OCgzKSwgICAgICAvLyBkYXlcbiAgICAgICAgICB0di5kYXRhLnJlYWRVSW50OCg0KSwgICAgICAvLyBob3VyXG4gICAgICAgICAgdHYuZGF0YS5yZWFkVUludDgoNSksICAgICAgLy8gbWludXRlXG4gICAgICAgICAgdHYuZGF0YS5yZWFkVUludDgoNiksICAgICAgLy8gc2Vjb25kXG4gICAgICAgICAgdHYuZGF0YS5yZWFkVUludDMyTEUoNyksICAgLy8gbmFub3NlY29uZFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsRGF0ZVRpbWUoMCwgMCwgMCwgMCwgMCwgMCwgMCk7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5ZRUFSX1RPX01PTlRIOlxuICAgICAgaWYgKHR2LmRhdGEubGVuZ3RoID49IDQpIHtcbiAgICAgICAgcmV0dXJuIHsgbW9udGhzOiB0di5kYXRhLnJlYWRJbnQzMkxFKDApIH0gYXMgWWVhclRvTW9udGg7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBtb250aHM6IDAgfSBhcyBZZWFyVG9Nb250aDtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkRBWV9UT19TRUNPTkQ6XG4gICAgICBpZiAodHYuZGF0YS5sZW5ndGggPj0gMTIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZWNvbmRzOiBOdW1iZXIodHYuZGF0YS5yZWFkQmlnSW50NjRMRSgwKSksXG4gICAgICAgICAgbmFub3NlY29uZHM6IHR2LmRhdGEucmVhZFVJbnQzMkxFKDgpLFxuICAgICAgICB9IGFzIERheVRvU2Vjb25kO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgc2Vjb25kczogMCwgbmFub3NlY29uZHM6IDAgfSBhcyBEYXlUb1NlY29uZDtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlBPSU5UOlxuICAgICAgaWYgKHR2LmRhdGEubGVuZ3RoID49IDE2KSB7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQodHYuZGF0YS5yZWFkRG91YmxlTEUoOCksIHR2LmRhdGEucmVhZERvdWJsZUxFKDApKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgUG9pbnQoMCwgMCk7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5QT0lOVDNEOlxuICAgICAgaWYgKHR2LmRhdGEubGVuZ3RoID49IDI0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQzRCh0di5kYXRhLnJlYWREb3VibGVMRSgwKSwgdHYuZGF0YS5yZWFkRG91YmxlTEUoOCksIHR2LmRhdGEucmVhZERvdWJsZUxFKDE2KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFBvaW50M0QoMCwgMCwgMCk7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5ERUNJTUFMOlxuICAgICAgcmV0dXJuIHsgdmFsdWU6IHR2LmRhdGEudG9TdHJpbmcoJ3V0Zi04JykgfSBhcyBHcWxkYkRlY2ltYWw7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5WRUNUT1I6XG4gICAgICBpZiAodHYuZGF0YS5sZW5ndGggPj0gNCkge1xuICAgICAgICBjb25zdCBkaW0gPSB0di5kYXRhLnJlYWRVSW50MzJMRSgwKTtcbiAgICAgICAgaWYgKHR2LmRhdGEubGVuZ3RoID49IDQgKyBkaW0gKiA0KSB7XG4gICAgICAgICAgY29uc3QgdmFsdWVzOiBudW1iZXJbXSA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGltOyBpKyspIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHR2LmRhdGEucmVhZEZsb2F0TEUoNCArIGkgKiA0KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yKHZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgVmVjdG9yKFtdKTtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkxJU1Q6XG4gICAgICByZXR1cm4gZGVjb2RlTGlzdCh0di5kYXRhKTtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlNFVDpcbiAgICAgIHJldHVybiBuZXcgU2V0KGRlY29kZUxpc3QodHYuZGF0YSkpO1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuTUFQOlxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlJFQ09SRDpcbiAgICAgIHJldHVybiBkZWNvZGVNYXAodHYuZGF0YSk7XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5UQUJMRTpcbiAgICAgIHJldHVybiBkZWNvZGVUYWJsZSh0di5kYXRhKTtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLk5PREU6XG4gICAgICByZXR1cm4gZGVjb2RlTm9kZSh0di5kYXRhKTtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkVER0U6XG4gICAgICByZXR1cm4gZGVjb2RlRWRnZSh0di5kYXRhKTtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlBBVEg6XG4gICAgICByZXR1cm4gZGVjb2RlUGF0aCh0di5kYXRhKTtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkVSUk9SOlxuICAgICAgcmV0dXJuIGRlY29kZUVycm9yKHR2LmRhdGEpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0di5kYXRhO1xuICB9XG59XG5cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERlY29kZTogQ29tcGxleCBUeXBlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBEZWNvZGUgYSBub2RlIGZyb20gYmluYXJ5IGZvcm1hdC5cbiAqXG4gKiBXaXJlIGZvcm1hdDpcbiAqICAgcHJlLTYuMS4xNDc6ICBbaWRMZW46Ml1baWRdW2xhYmVsQ291bnQ6Ml1bbGFiZWxMZW46Ml1bbGFiZWxdLi4uW3Byb3BlcnRpZXNfYmluYXJ5XVxuICogICA2LjEuMTQ3KzogICAgIC4uLltwcm9wZXJ0aWVzX2JpbmFyeV1bSW50ZXJuYWxJRDo4IExFIHVpbnQ2NF1cbiAqXG4gKiBUaGUgOC1ieXRlIEludGVybmFsSUQgdHJhaWxlciBpcyByZWFkIHdoZW4gcHJlc2VudDsgYWJzZW50IG9uXG4gKiBwcmUtNi4xLjE0NyBzZXJ2ZXJzLCBpbiB3aGljaCBjYXNlIGBHcWxkYk5vZGUudXVpZGAgaXMgbGVmdCBlbXB0eVxuICogYW5kIGFwcGxpY2F0aW9uIGNvZGUgY2FuIGZhbGwgYmFjayB0byBgaWRgLlxuICovXG5mdW5jdGlvbiBkZWNvZGVOb2RlKGRhdGE6IEJ1ZmZlcik6IEdxbGRiTm9kZSB7XG4gIGxldCBvZmZzZXQgPSAwO1xuXG4gIC8vIERlY29kZSBJRFxuICBjb25zdCBbaWQsIGlkTGVuXSA9IGRlY29kZVN0cmluZyhkYXRhLCBvZmZzZXQpO1xuICBpZiAoaWRMZW4gPT09IDApIHJldHVybiB7IGlkOiAnJywgdXVpZDogJycsIGxhYmVsczogW10sIHByb3BlcnRpZXM6IHt9IH07XG4gIG9mZnNldCArPSBpZExlbjtcblxuICAvLyBEZWNvZGUgbGFiZWxzXG4gIGlmIChvZmZzZXQgKyAyID4gZGF0YS5sZW5ndGgpIHJldHVybiB7IGlkLCB1dWlkOiAnJywgbGFiZWxzOiBbXSwgcHJvcGVydGllczoge30gfTtcbiAgY29uc3QgbGFiZWxDb3VudCA9IGRhdGEucmVhZFVJbnQxNkxFKG9mZnNldCk7XG4gIG9mZnNldCArPSAyO1xuXG4gIGNvbnN0IGxhYmVsczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYWJlbENvdW50OyBpKyspIHtcbiAgICBjb25zdCBbbGFiZWwsIGxhYmVsTGVuXSA9IGRlY29kZVN0cmluZyhkYXRhLCBvZmZzZXQpO1xuICAgIGlmIChsYWJlbExlbiA9PT0gMCkgYnJlYWs7XG4gICAgbGFiZWxzLnB1c2gobGFiZWwpO1xuICAgIG9mZnNldCArPSBsYWJlbExlbjtcbiAgfVxuXG4gIC8vIERlY29kZSBwcm9wZXJ0aWVzXG4gIGNvbnN0IFtwcm9wZXJ0aWVzLCBwcm9wc0xlbl0gPSBkZWNvZGVQcm9wZXJ0aWVzQmluYXJ5KGRhdGEsIG9mZnNldCk7XG4gIG9mZnNldCArPSBwcm9wc0xlbjtcblxuICAvLyBEZWNvZGUgb3B0aW9uYWwgSW50ZXJuYWxJRCB0cmFpbGVyICg2LjEuMTQ3KykuXG4gIGNvbnN0IHV1aWQgPSBkZWNvZGVJbnRlcm5hbElkVHJhaWxlcihkYXRhLCBvZmZzZXQpO1xuXG4gIHJldHVybiB7IGlkLCB1dWlkLCBsYWJlbHMsIHByb3BlcnRpZXMgfTtcbn1cblxuLyoqXG4gKiBEZWNvZGUgYW4gZWRnZSBmcm9tIGJpbmFyeSBmb3JtYXQuXG4gKiBTZWUge0BsaW5rIGRlY29kZU5vZGV9IGZvciB0aGUgSW50ZXJuYWxJRCB0cmFpbGVyIHNlbWFudGljcy5cbiAqL1xuZnVuY3Rpb24gZGVjb2RlRWRnZShkYXRhOiBCdWZmZXIpOiBHcWxkYkVkZ2Uge1xuICBsZXQgb2Zmc2V0ID0gMDtcblxuICBjb25zdCBbaWQsIGlkTGVuXSA9IGRlY29kZVN0cmluZyhkYXRhLCBvZmZzZXQpO1xuICBpZiAoaWRMZW4gPT09IDApIHJldHVybiB7IGlkOiAnJywgdXVpZDogJycsIGxhYmVsOiAnJywgZnJvbU5vZGVJZDogJycsIHRvTm9kZUlkOiAnJywgcHJvcGVydGllczoge30gfTtcbiAgb2Zmc2V0ICs9IGlkTGVuO1xuXG4gIGNvbnN0IFtsYWJlbCwgbGFiZWxMZW5dID0gZGVjb2RlU3RyaW5nKGRhdGEsIG9mZnNldCk7XG4gIGlmIChsYWJlbExlbiA9PT0gMCkgcmV0dXJuIHsgaWQsIHV1aWQ6ICcnLCBsYWJlbDogJycsIGZyb21Ob2RlSWQ6ICcnLCB0b05vZGVJZDogJycsIHByb3BlcnRpZXM6IHt9IH07XG4gIG9mZnNldCArPSBsYWJlbExlbjtcblxuICBjb25zdCBbZnJvbU5vZGVJZCwgZnJvbUxlbl0gPSBkZWNvZGVTdHJpbmcoZGF0YSwgb2Zmc2V0KTtcbiAgaWYgKGZyb21MZW4gPT09IDApIHJldHVybiB7IGlkLCB1dWlkOiAnJywgbGFiZWwsIGZyb21Ob2RlSWQ6ICcnLCB0b05vZGVJZDogJycsIHByb3BlcnRpZXM6IHt9IH07XG4gIG9mZnNldCArPSBmcm9tTGVuO1xuXG4gIGNvbnN0IFt0b05vZGVJZCwgdG9MZW5dID0gZGVjb2RlU3RyaW5nKGRhdGEsIG9mZnNldCk7XG4gIGlmICh0b0xlbiA9PT0gMCkgcmV0dXJuIHsgaWQsIHV1aWQ6ICcnLCBsYWJlbCwgZnJvbU5vZGVJZCwgdG9Ob2RlSWQ6ICcnLCBwcm9wZXJ0aWVzOiB7fSB9O1xuICBvZmZzZXQgKz0gdG9MZW47XG5cbiAgY29uc3QgW3Byb3BlcnRpZXMsIHByb3BzTGVuXSA9IGRlY29kZVByb3BlcnRpZXNCaW5hcnkoZGF0YSwgb2Zmc2V0KTtcbiAgb2Zmc2V0ICs9IHByb3BzTGVuO1xuXG4gIGNvbnN0IHV1aWQgPSBkZWNvZGVJbnRlcm5hbElkVHJhaWxlcihkYXRhLCBvZmZzZXQpO1xuXG4gIHJldHVybiB7IGlkLCB1dWlkLCBsYWJlbCwgZnJvbU5vZGVJZCwgdG9Ob2RlSWQsIHByb3BlcnRpZXMgfTtcbn1cblxuLyoqXG4gKiBSZWFkIHRoZSBvcHRpb25hbCA4LWJ5dGUgbGl0dGxlLWVuZGlhbiB1aW50NjQgSW50ZXJuYWxJRCB0cmFpbGVyXG4gKiBlbWl0dGVkIGJ5IGdxbGRiIDYuMS4xNDcrIHNlcnZlcnMgYXQgdGhlIHRhaWwgb2YgZXZlcnkgZW5jb2RlZFxuICogbm9kZS9lZGdlIHBheWxvYWQuIFJldHVybnMgdGhlIHZhbHVlIGZvcm1hdHRlZCBhcyBhIGRlY2ltYWwgc3RyaW5nLFxuICogb3IgJycgd2hlbiB0aGUgdHJhaWxlciBpcyBhYnNlbnQgKHByZS02LjEuMTQ3IHdpcmUgZm9ybWF0KS5cbiAqXG4gKiBVc2VzIEJpZ0ludCB0byBwcmVzZXJ2ZSB0aGUgZnVsbCB1aW50NjQgcmFuZ2U7IGNvbnZlcnRzIHRvIGRlY2ltYWxcbiAqIHN0cmluZyBpbW1lZGlhdGVseSBzbyBjYWxsZXJzIGRvbid0IG5lZWQgdG8gaGFuZGxlIEJpZ0ludCBkaXJlY3RseS5cbiAqL1xuZnVuY3Rpb24gZGVjb2RlSW50ZXJuYWxJZFRyYWlsZXIoZGF0YTogQnVmZmVyLCBvZmZzZXQ6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChvZmZzZXQgKyA4ID4gZGF0YS5sZW5ndGgpIHJldHVybiAnJztcbiAgY29uc3QgdmFsdWUgPSBkYXRhLnJlYWRCaWdVSW50NjRMRShvZmZzZXQpO1xuICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBEZWNvZGUgYSBwYXRoIGZyb20gYmluYXJ5IGZvcm1hdC5cbiAqIEZvcm1hdDogW25vZGVDb3VudDoyXVtub2RlTGVuOjRdW25vZGVEYXRhXS4uLltlZGdlQ291bnQ6Ml1bZWRnZUxlbjo0XVtlZGdlRGF0YV0uLi5cbiAqL1xuZnVuY3Rpb24gZGVjb2RlUGF0aChkYXRhOiBCdWZmZXIpOiBHcWxkYlBhdGgge1xuICBsZXQgb2Zmc2V0ID0gMDtcblxuICAvLyBEZWNvZGUgbm9kZXNcbiAgaWYgKG9mZnNldCArIDIgPiBkYXRhLmxlbmd0aCkgcmV0dXJuIHsgbm9kZXM6IFtdLCBlZGdlczogW10gfTtcbiAgY29uc3Qgbm9kZUNvdW50ID0gZGF0YS5yZWFkVUludDE2TEUob2Zmc2V0KTtcbiAgb2Zmc2V0ICs9IDI7XG5cbiAgY29uc3Qgbm9kZXM6IEdxbGRiTm9kZVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUNvdW50OyBpKyspIHtcbiAgICBpZiAob2Zmc2V0ICsgNCA+IGRhdGEubGVuZ3RoKSBicmVhaztcbiAgICBjb25zdCBub2RlTGVuID0gZGF0YS5yZWFkVUludDMyTEUob2Zmc2V0KTtcbiAgICBvZmZzZXQgKz0gNDtcblxuICAgIGlmIChvZmZzZXQgKyBub2RlTGVuID4gZGF0YS5sZW5ndGgpIGJyZWFrO1xuICAgIGNvbnN0IG5vZGVEYXRhID0gZGF0YS5zbGljZShvZmZzZXQsIG9mZnNldCArIG5vZGVMZW4pO1xuICAgIG5vZGVzLnB1c2goZGVjb2RlTm9kZShub2RlRGF0YSkpO1xuICAgIG9mZnNldCArPSBub2RlTGVuO1xuICB9XG5cbiAgLy8gRGVjb2RlIGVkZ2VzXG4gIGlmIChvZmZzZXQgKyAyID4gZGF0YS5sZW5ndGgpIHJldHVybiB7IG5vZGVzLCBlZGdlczogW10gfTtcbiAgY29uc3QgZWRnZUNvdW50ID0gZGF0YS5yZWFkVUludDE2TEUob2Zmc2V0KTtcbiAgb2Zmc2V0ICs9IDI7XG5cbiAgY29uc3QgZWRnZXM6IEdxbGRiRWRnZVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZUNvdW50OyBpKyspIHtcbiAgICBpZiAob2Zmc2V0ICsgNCA+IGRhdGEubGVuZ3RoKSBicmVhaztcbiAgICBjb25zdCBlZGdlTGVuID0gZGF0YS5yZWFkVUludDMyTEUob2Zmc2V0KTtcbiAgICBvZmZzZXQgKz0gNDtcblxuICAgIGlmIChvZmZzZXQgKyBlZGdlTGVuID4gZGF0YS5sZW5ndGgpIGJyZWFrO1xuICAgIGNvbnN0IGVkZ2VEYXRhID0gZGF0YS5zbGljZShvZmZzZXQsIG9mZnNldCArIGVkZ2VMZW4pO1xuICAgIGVkZ2VzLnB1c2goZGVjb2RlRWRnZShlZGdlRGF0YSkpO1xuICAgIG9mZnNldCArPSBlZGdlTGVuO1xuICB9XG5cbiAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzIH07XG59XG5cbi8qKlxuICogRGVjb2RlIGEgbGlzdCBmcm9tIGJpbmFyeSBmb3JtYXQuXG4gKiBGb3JtYXQ6IFtjb3VudDoyIHVpbnQxNkxFXVtUeXBlZFZhbHVlRW50cnldLi4uXG4gKi9cbmZ1bmN0aW9uIGRlY29kZUxpc3QoZGF0YTogQnVmZmVyKTogYW55W10ge1xuICBpZiAoZGF0YS5sZW5ndGggPCAyKSByZXR1cm4gW107XG5cbiAgY29uc3QgY291bnQgPSBkYXRhLnJlYWRVSW50MTZMRSgwKTtcbiAgbGV0IG9mZnNldCA9IDI7XG4gIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBjb25zdCBbdHYsIHR2TGVuXSA9IGRlY29kZVR5cGVkVmFsdWVFbnRyeShkYXRhLCBvZmZzZXQpO1xuICAgIGlmICh0dkxlbiA9PT0gMCkgYnJlYWs7XG4gICAgcmVzdWx0LnB1c2godHlwZWRWYWx1ZVRvSlModHYpKTtcbiAgICBvZmZzZXQgKz0gdHZMZW47XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERlY29kZSBhIG1hcCBmcm9tIGJpbmFyeSBmb3JtYXQuXG4gKiBGb3JtYXQ6IFtjb3VudDoyXVtrZXlMZW46Ml1ba2V5XVtUVkVdLi4uXG4gKi9cbmZ1bmN0aW9uIGRlY29kZU1hcChkYXRhOiBCdWZmZXIpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgY29uc3QgW3Jlc3VsdF0gPSBkZWNvZGVQcm9wZXJ0aWVzQmluYXJ5KGRhdGEsIDApO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERlY29kZSBhIHRhYmxlIGZyb20gYmluYXJ5IGZvcm1hdC5cbiAqIEZvcm1hdDogW2NvbENvdW50OjJdW2NvbExlbjoyXVtjb2xdLi4uW3Jvd0NvdW50OjJdW2NlbGxDb3VudDoyXVtUVkVdLi4uXG4gKi9cbmZ1bmN0aW9uIGRlY29kZVRhYmxlKGRhdGE6IEJ1ZmZlcik6IEdxbGRiVGFibGUge1xuICBsZXQgb2Zmc2V0ID0gMDtcblxuICAvLyBEZWNvZGUgY29sdW1uc1xuICBpZiAob2Zmc2V0ICsgMiA+IGRhdGEubGVuZ3RoKSByZXR1cm4geyBjb2x1bW5zOiBbXSwgcm93czogW10gfTtcbiAgY29uc3QgY29sQ291bnQgPSBkYXRhLnJlYWRVSW50MTZMRShvZmZzZXQpO1xuICBvZmZzZXQgKz0gMjtcblxuICBjb25zdCBjb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHtcbiAgICBjb25zdCBbY29sLCBjb2xMZW5dID0gZGVjb2RlU3RyaW5nKGRhdGEsIG9mZnNldCk7XG4gICAgaWYgKGNvbExlbiA9PT0gMCkgYnJlYWs7XG4gICAgY29sdW1ucy5wdXNoKGNvbCk7XG4gICAgb2Zmc2V0ICs9IGNvbExlbjtcbiAgfVxuXG4gIC8vIERlY29kZSByb3dzXG4gIGlmIChvZmZzZXQgKyAyID4gZGF0YS5sZW5ndGgpIHJldHVybiB7IGNvbHVtbnMsIHJvd3M6IFtdIH07XG4gIGNvbnN0IHJvd0NvdW50ID0gZGF0YS5yZWFkVUludDE2TEUob2Zmc2V0KTtcbiAgb2Zmc2V0ICs9IDI7XG5cbiAgY29uc3Qgcm93czogYW55W11bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHtcbiAgICBpZiAob2Zmc2V0ICsgMiA+IGRhdGEubGVuZ3RoKSBicmVhaztcbiAgICBjb25zdCBjZWxsQ291bnQgPSBkYXRhLnJlYWRVSW50MTZMRShvZmZzZXQpO1xuICAgIG9mZnNldCArPSAyO1xuXG4gICAgY29uc3Qgcm93OiBhbnlbXSA9IFtdO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgY2VsbENvdW50OyBqKyspIHtcbiAgICAgIGNvbnN0IFt0diwgdHZMZW5dID0gZGVjb2RlVHlwZWRWYWx1ZUVudHJ5KGRhdGEsIG9mZnNldCk7XG4gICAgICBpZiAodHZMZW4gPT09IDApIGJyZWFrO1xuICAgICAgcm93LnB1c2godHlwZWRWYWx1ZVRvSlModHYpKTtcbiAgICAgIG9mZnNldCArPSB0dkxlbjtcbiAgICB9XG4gICAgcm93cy5wdXNoKHJvdyk7XG4gIH1cblxuICByZXR1cm4geyBjb2x1bW5zLCByb3dzIH07XG59XG5cbmZ1bmN0aW9uIGRlY29kZUVycm9yKGRhdGE6IEJ1ZmZlcik6IEdxbGRiRXJyb3Ige1xuICB0cnkge1xuICAgIGNvbnN0IGpzb24gPSBkYXRhLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgIGNvbnN0IGVyckRhdGEgPSBKU09OLnBhcnNlKGpzb24pO1xuICAgIHJldHVybiB7XG4gICAgICBjb2RlOiB0eXBlb2YgZXJyRGF0YS5jb2RlID09PSAnbnVtYmVyJyA/IGVyckRhdGEuY29kZSA6IDAsXG4gICAgICBtZXNzYWdlOiB0eXBlb2YgZXJyRGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJyA/IGVyckRhdGEubWVzc2FnZSA6IGpzb24sXG4gICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWYgbm90IHZhbGlkIEpTT04sIHRyZWF0IGFzIHBsYWluIG1lc3NhZ2VcbiAgICByZXR1cm4geyBjb2RlOiAwLCBtZXNzYWdlOiBkYXRhLnRvU3RyaW5nKCd1dGYtOCcpIH07XG4gIH1cbn1cblxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRW5jb2RlOiBDb21wbGV4IFR5cGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEVuY29kZSBhIGxpc3QgaW4gYmluYXJ5IGZvcm1hdC5cbiAqIEZvcm1hdDogW2NvdW50OjIgdWludDE2TEVdW1R5cGVkVmFsdWVFbnRyeV0uLi5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlTGlzdCh2YWx1ZXM6IGFueVtdKTogVHlwZWRWYWx1ZSB7XG4gIGNvbnN0IHBhcnRzOiBCdWZmZXJbXSA9IFtdO1xuXG4gIC8vIFdyaXRlIGNvdW50XG4gIGNvbnN0IGNvdW50QnVmID0gQnVmZmVyLmFsbG9jKDIpO1xuICBjb3VudEJ1Zi53cml0ZVVJbnQxNkxFKHZhbHVlcy5sZW5ndGgsIDApO1xuICBwYXJ0cy5wdXNoKGNvdW50QnVmKTtcblxuICBmb3IgKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgY29uc3QgdHYgPSBjcmVhdGVUeXBlZFZhbHVlKHYpO1xuICAgIHBhcnRzLnB1c2goZW5jb2RlVHlwZWRWYWx1ZUVudHJ5KHR2KSk7XG4gIH1cblxuICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuTElTVCwgZGF0YTogQnVmZmVyLmNvbmNhdChwYXJ0cyksIGlzTnVsbDogZmFsc2UgfTtcbn1cblxuLyoqXG4gKiBFbmNvZGUgYSBtYXAgaW4gYmluYXJ5IGZvcm1hdC5cbiAqIEZvcm1hdDogW2NvdW50OjJdW2tleUxlbjoyXVtrZXldW1RWRV0uLi5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlTWFwKG06IFJlY29yZDxzdHJpbmcsIGFueT4pOiBUeXBlZFZhbHVlIHtcbiAgY29uc3QgcGFydHM6IEJ1ZmZlcltdID0gW107XG4gIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhtKTtcblxuICAvLyBXcml0ZSBjb3VudFxuICBjb25zdCBjb3VudEJ1ZiA9IEJ1ZmZlci5hbGxvYygyKTtcbiAgY291bnRCdWYud3JpdGVVSW50MTZMRShlbnRyaWVzLmxlbmd0aCwgMCk7XG4gIHBhcnRzLnB1c2goY291bnRCdWYpO1xuXG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIGVudHJpZXMpIHtcbiAgICAvLyBXcml0ZSBrZXkgKGxlbmd0aC1wcmVmaXhlZClcbiAgICBwYXJ0cy5wdXNoKGVuY29kZVN0cmluZyhrKSk7XG5cbiAgICAvLyBXcml0ZSB2YWx1ZSBhcyBUVkVcbiAgICBjb25zdCB0diA9IGNyZWF0ZVR5cGVkVmFsdWUodik7XG4gICAgcGFydHMucHVzaChlbmNvZGVUeXBlZFZhbHVlRW50cnkodHYpKTtcbiAgfVxuXG4gIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5NQVAsIGRhdGE6IEJ1ZmZlci5jb25jYXQocGFydHMpLCBpc051bGw6IGZhbHNlIH07XG59XG5cbi8qKlxuICogRW5jb2RlIGEgc2V0IGluIGJpbmFyeSBmb3JtYXQgKHNhbWUgYXMgbGlzdCkuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZVNldChzZXQ6IFNldDxhbnk+KTogVHlwZWRWYWx1ZSB7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmZyb20oc2V0KTtcbiAgY29uc3QgcGFydHM6IEJ1ZmZlcltdID0gW107XG5cbiAgLy8gV3JpdGUgY291bnRcbiAgY29uc3QgY291bnRCdWYgPSBCdWZmZXIuYWxsb2MoMik7XG4gIGNvdW50QnVmLndyaXRlVUludDE2TEUodmFsdWVzLmxlbmd0aCwgMCk7XG4gIHBhcnRzLnB1c2goY291bnRCdWYpO1xuXG4gIGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcbiAgICBjb25zdCB0diA9IGNyZWF0ZVR5cGVkVmFsdWUodik7XG4gICAgcGFydHMucHVzaChlbmNvZGVUeXBlZFZhbHVlRW50cnkodHYpKTtcbiAgfVxuXG4gIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5TRVQsIGRhdGE6IEJ1ZmZlci5jb25jYXQocGFydHMpLCBpc051bGw6IGZhbHNlIH07XG59XG5cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEZvcm1hdCAmIFBhcnNlOiBUeXBlZFZhbHVlIOKGlCBTdHJpbmdcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBQYWQgYSBudW1iZXIgdG8gYSBmaXhlZCB3aWR0aCB3aXRoIGxlYWRpbmcgemVyb3MgKi9cbmZ1bmN0aW9uIHBhZChuOiBudW1iZXIsIHdpZHRoOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gbi50b1N0cmluZygpLnBhZFN0YXJ0KHdpZHRoLCAnMCcpO1xufVxuXG4vKiogRm9ybWF0IG5hbm9zZWNvbmRzLCB0cmltbWluZyB0cmFpbGluZyB6ZXJvcy4gUmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgemVyby4gKi9cbmZ1bmN0aW9uIGZvcm1hdE5hbm9zKG5hbm9zOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAobmFub3MgPT09IDApIHJldHVybiAnJztcbiAgY29uc3QgcyA9IG5hbm9zLnRvU3RyaW5nKCkucGFkU3RhcnQoOSwgJzAnKTtcbiAgcmV0dXJuICcuJyArIHMucmVwbGFjZSgvMCskLywgJycpO1xufVxuXG4vKiogRm9ybWF0IGFuIG9mZnNldCBpbiBtaW51dGVzIGFzIFwiK0hIOk1NXCIgb3IgXCItSEg6TU1cIiAqL1xuZnVuY3Rpb24gZm9ybWF0T2Zmc2V0KG9mZnNldE1pbnV0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IHNpZ24gPSBvZmZzZXRNaW51dGVzIDwgMCA/ICctJyA6ICcrJztcbiAgY29uc3QgYWJzID0gTWF0aC5hYnMob2Zmc2V0TWludXRlcyk7XG4gIGNvbnN0IGggPSBNYXRoLmZsb29yKGFicyAvIDYwKTtcbiAgY29uc3QgbSA9IGFicyAlIDYwO1xuICByZXR1cm4gYCR7c2lnbn0ke3BhZChoLCAyKX06JHtwYWQobSwgMil9YDtcbn1cblxuLyoqIFNlcmlhbGl6ZSBhIFR5cGVkVmFsdWUgdG8gaXRzIGNhbm9uaWNhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRWYWx1ZSh0djogVHlwZWRWYWx1ZSk6IHN0cmluZyB7XG4gIGlmICh0di5pc051bGwgfHwgdHYudHlwZSA9PT0gUHJvcGVydHlUeXBlLk5VTEwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBzd2l0Y2ggKHR2LnR5cGUpIHtcbiAgICBjYXNlIFByb3BlcnR5VHlwZS5CT09MOlxuICAgICAgcmV0dXJuIHR2LmRhdGEubGVuZ3RoID49IDEgJiYgdHYuZGF0YS5yZWFkVUludDgoMCkgIT09IDAgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuSU5UMzI6XG4gICAgICByZXR1cm4gdHYuZGF0YS5sZW5ndGggPj0gNCA/IHR2LmRhdGEucmVhZEludDMyTEUoMCkudG9TdHJpbmcoKSA6ICcwJztcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlVJTlQzMjpcbiAgICAgIHJldHVybiB0di5kYXRhLmxlbmd0aCA+PSA0ID8gdHYuZGF0YS5yZWFkVUludDMyTEUoMCkudG9TdHJpbmcoKSA6ICcwJztcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLklOVDY0OiB7XG4gICAgICBpZiAodHYuZGF0YS5sZW5ndGggPCA4KSByZXR1cm4gJzAnO1xuICAgICAgcmV0dXJuIHR2LmRhdGEucmVhZEJpZ0ludDY0TEUoMCkudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5VSU5UNjQ6IHtcbiAgICAgIGlmICh0di5kYXRhLmxlbmd0aCA8IDgpIHJldHVybiAnMCc7XG4gICAgICByZXR1cm4gdHYuZGF0YS5yZWFkQmlnVUludDY0TEUoMCkudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5GTE9BVDpcbiAgICAgIHJldHVybiB0di5kYXRhLmxlbmd0aCA+PSA0ID8gdHYuZGF0YS5yZWFkRmxvYXRMRSgwKS50b1N0cmluZygpIDogJzAnO1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuRE9VQkxFOlxuICAgICAgcmV0dXJuIHR2LmRhdGEubGVuZ3RoID49IDggPyB0di5kYXRhLnJlYWREb3VibGVMRSgwKS50b1N0cmluZygpIDogJzAnO1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuU1RSSU5HOlxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlRFWFQ6XG4gICAgICByZXR1cm4gdHYuZGF0YS50b1N0cmluZygndXRmLTgnKTtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkRFQ0lNQUw6XG4gICAgICByZXR1cm4gdHYuZGF0YS50b1N0cmluZygndXRmLTgnKTtcblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkRBVEU6IHtcbiAgICAgIGlmICh0di5kYXRhLmxlbmd0aCA8IDQpIHJldHVybiAnMDAwMC0wMC0wMCc7XG4gICAgICAvLyB5ZWFyIGlzIHNpZ25lZCBpbnQxNiBzbyBCQ0UgeWVhcnMgKGUuZy4gLTQ0KSByb3VuZC10cmlwLlxuICAgICAgY29uc3QgeSA9IHR2LmRhdGEucmVhZEludDE2TEUoMCk7XG4gICAgICBjb25zdCBtID0gdHYuZGF0YS5yZWFkVUludDgoMik7XG4gICAgICBjb25zdCBkID0gdHYuZGF0YS5yZWFkVUludDgoMyk7XG4gICAgICByZXR1cm4gYCR7cGFkKHksIDQpfS0ke3BhZChtLCAyKX0tJHtwYWQoZCwgMil9YDtcbiAgICB9XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5MT0NBTF9USU1FOiB7XG4gICAgICBpZiAodHYuZGF0YS5sZW5ndGggPCA4KSByZXR1cm4gJzAwOjAwOjAwJztcbiAgICAgIGNvbnN0IGggPSB0di5kYXRhLnJlYWRVSW50OCgwKTtcbiAgICAgIGNvbnN0IG0gPSB0di5kYXRhLnJlYWRVSW50OCgxKTtcbiAgICAgIGNvbnN0IHMgPSB0di5kYXRhLnJlYWRVSW50OCgyKTtcbiAgICAgIGNvbnN0IG5zID0gdHYuZGF0YS5yZWFkVUludDMyTEUoNCk7XG4gICAgICByZXR1cm4gYCR7cGFkKGgsIDIpfToke3BhZChtLCAyKX06JHtwYWQocywgMil9JHtmb3JtYXROYW5vcyhucyl9YDtcbiAgICB9XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5aT05FRF9USU1FOiB7XG4gICAgICBpZiAodHYuZGF0YS5sZW5ndGggPCAxMCkgcmV0dXJuICcwMDowMDowMCswMDowMCc7XG4gICAgICBjb25zdCBoID0gdHYuZGF0YS5yZWFkVUludDgoMCk7XG4gICAgICBjb25zdCBtID0gdHYuZGF0YS5yZWFkVUludDgoMSk7XG4gICAgICBjb25zdCBzID0gdHYuZGF0YS5yZWFkVUludDgoMik7XG4gICAgICBjb25zdCBucyA9IHR2LmRhdGEucmVhZFVJbnQzMkxFKDQpO1xuICAgICAgY29uc3Qgb2ZmID0gdHYuZGF0YS5yZWFkSW50MTZMRSg4KTtcbiAgICAgIHJldHVybiBgJHtwYWQoaCwgMil9OiR7cGFkKG0sIDIpfToke3BhZChzLCAyKX0ke2Zvcm1hdE5hbm9zKG5zKX0ke2Zvcm1hdE9mZnNldChvZmYpfWA7XG4gICAgfVxuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuTE9DQUxfREFURVRJTUU6XG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuREFURVRJTUU6IHtcbiAgICAgIGlmICh0di5kYXRhLmxlbmd0aCA8IDExKSByZXR1cm4gJzAwMDAtMDAtMDAgMDA6MDA6MDAnO1xuICAgICAgLy8geWVhciBpcyBzaWduZWQgaW50MTYgc28gQkNFIHllYXJzIChlLmcuIC00NCkgcm91bmQtdHJpcC5cbiAgICAgIGNvbnN0IHkgPSB0di5kYXRhLnJlYWRJbnQxNkxFKDApO1xuICAgICAgY29uc3QgbW8gPSB0di5kYXRhLnJlYWRVSW50OCgyKTtcbiAgICAgIGNvbnN0IGQgPSB0di5kYXRhLnJlYWRVSW50OCgzKTtcbiAgICAgIGNvbnN0IGggPSB0di5kYXRhLnJlYWRVSW50OCg0KTtcbiAgICAgIGNvbnN0IG1pID0gdHYuZGF0YS5yZWFkVUludDgoNSk7XG4gICAgICBjb25zdCBzID0gdHYuZGF0YS5yZWFkVUludDgoNik7XG4gICAgICBjb25zdCBucyA9IHR2LmRhdGEucmVhZFVJbnQzMkxFKDcpO1xuICAgICAgcmV0dXJuIGAke3BhZCh5LCA0KX0tJHtwYWQobW8sIDIpfS0ke3BhZChkLCAyKX0gJHtwYWQoaCwgMil9OiR7cGFkKG1pLCAyKX06JHtwYWQocywgMil9JHtmb3JtYXROYW5vcyhucyl9YDtcbiAgICB9XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5aT05FRF9EQVRFVElNRToge1xuICAgICAgaWYgKHR2LmRhdGEubGVuZ3RoIDwgMTMpIHJldHVybiAnMDAwMC0wMC0wMCAwMDowMDowMCswMDowMCc7XG4gICAgICAvLyB5ZWFyIGlzIHNpZ25lZCBpbnQxNiBzbyBCQ0UgeWVhcnMgKGUuZy4gLTQ0KSByb3VuZC10cmlwLlxuICAgICAgY29uc3QgeSA9IHR2LmRhdGEucmVhZEludDE2TEUoMCk7XG4gICAgICBjb25zdCBtbyA9IHR2LmRhdGEucmVhZFVJbnQ4KDIpO1xuICAgICAgY29uc3QgZCA9IHR2LmRhdGEucmVhZFVJbnQ4KDMpO1xuICAgICAgY29uc3QgaCA9IHR2LmRhdGEucmVhZFVJbnQ4KDQpO1xuICAgICAgY29uc3QgbWkgPSB0di5kYXRhLnJlYWRVSW50OCg1KTtcbiAgICAgIGNvbnN0IHMgPSB0di5kYXRhLnJlYWRVSW50OCg2KTtcbiAgICAgIGNvbnN0IG5zID0gdHYuZGF0YS5yZWFkVUludDMyTEUoNyk7XG4gICAgICBjb25zdCBvZmYgPSB0di5kYXRhLnJlYWRJbnQxNkxFKDExKTtcbiAgICAgIHJldHVybiBgJHtwYWQoeSwgNCl9LSR7cGFkKG1vLCAyKX0tJHtwYWQoZCwgMil9ICR7cGFkKGgsIDIpfToke3BhZChtaSwgMil9OiR7cGFkKHMsIDIpfSR7Zm9ybWF0TmFub3MobnMpfSR7Zm9ybWF0T2Zmc2V0KG9mZil9YDtcbiAgICB9XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5USU1FU1RBTVA6IHtcbiAgICAgIGlmICh0di5kYXRhLmxlbmd0aCA8IDEyKSByZXR1cm4gJzAwMDAtMDAtMDAgMDA6MDA6MDAnO1xuICAgICAgY29uc3Qgc2VjcyA9IE51bWJlcih0di5kYXRhLnJlYWRCaWdJbnQ2NExFKDApKTtcbiAgICAgIGNvbnN0IG5zID0gdHYuZGF0YS5yZWFkVUludDMyTEUoOCk7XG4gICAgICBjb25zdCBkdCA9IG5ldyBEYXRlKHNlY3MgKiAxMDAwICsgTWF0aC5mbG9vcihucyAvIDFfMDAwXzAwMCkpO1xuICAgICAgY29uc3QgeSA9IGR0LmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICBjb25zdCBtbyA9IGR0LmdldFVUQ01vbnRoKCkgKyAxO1xuICAgICAgY29uc3QgZCA9IGR0LmdldFVUQ0RhdGUoKTtcbiAgICAgIGNvbnN0IGggPSBkdC5nZXRVVENIb3VycygpO1xuICAgICAgY29uc3QgbWkgPSBkdC5nZXRVVENNaW51dGVzKCk7XG4gICAgICBjb25zdCBzID0gZHQuZ2V0VVRDU2Vjb25kcygpO1xuICAgICAgcmV0dXJuIGAke3BhZCh5LCA0KX0tJHtwYWQobW8sIDIpfS0ke3BhZChkLCAyKX0gJHtwYWQoaCwgMil9OiR7cGFkKG1pLCAyKX06JHtwYWQocywgMil9JHtmb3JtYXROYW5vcyhucyl9YDtcbiAgICB9XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5ZRUFSX1RPX01PTlRIOiB7XG4gICAgICBpZiAodHYuZGF0YS5sZW5ndGggPCA0KSByZXR1cm4gJ1AwTSc7XG4gICAgICBjb25zdCB0b3RhbE1vbnRocyA9IHR2LmRhdGEucmVhZEludDMyTEUoMCk7XG4gICAgICBpZiAodG90YWxNb250aHMgPT09IDApIHJldHVybiAnUDBNJztcbiAgICAgIGNvbnN0IG5lZ2F0aXZlID0gdG90YWxNb250aHMgPCAwO1xuICAgICAgY29uc3QgYWJzID0gTWF0aC5hYnModG90YWxNb250aHMpO1xuICAgICAgY29uc3QgeWVhcnMgPSBNYXRoLmZsb29yKGFicyAvIDEyKTtcbiAgICAgIGNvbnN0IG1vbnRocyA9IGFicyAlIDEyO1xuICAgICAgbGV0IHJlc3VsdCA9IG5lZ2F0aXZlID8gJy1QJyA6ICdQJztcbiAgICAgIGlmICh5ZWFycyA+IDApIHJlc3VsdCArPSBgJHt5ZWFyc31ZYDtcbiAgICAgIGlmIChtb250aHMgPiAwKSByZXN1bHQgKz0gYCR7bW9udGhzfU1gO1xuICAgICAgLy8gSWYgb25seSB5ZWFycyBhbmQgbm8gbW9udGhzLCB0aGF0J3MgZmluZSAoZS5nLiBcIlAyWVwiKVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5EQVlfVE9fU0VDT05EOiB7XG4gICAgICBpZiAodHYuZGF0YS5sZW5ndGggPCAxMikgcmV0dXJuICdQVDBTJztcbiAgICAgIGNvbnN0IHNpZ25lZFNlYyA9IE51bWJlcih0di5kYXRhLnJlYWRCaWdJbnQ2NExFKDApKTtcbiAgICAgIGNvbnN0IG5hbm9zID0gdHYuZGF0YS5yZWFkVUludDMyTEUoOCk7XG4gICAgICBpZiAoc2lnbmVkU2VjID09PSAwICYmIG5hbm9zID09PSAwKSByZXR1cm4gJ1BUMFMnO1xuXG4gICAgICBjb25zdCBuZWdhdGl2ZSA9IHNpZ25lZFNlYyA8IDA7XG4gICAgICBjb25zdCB0b3RhbFNlYyA9IG5lZ2F0aXZlID8gLXNpZ25lZFNlYyA6IHNpZ25lZFNlYztcbiAgICAgIGNvbnN0IGRheXMgPSBNYXRoLmZsb29yKHRvdGFsU2VjIC8gODY0MDApO1xuICAgICAgY29uc3QgcmVtID0gdG90YWxTZWMgJSA4NjQwMDtcbiAgICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihyZW0gLyAzNjAwKTtcbiAgICAgIGNvbnN0IHJlbTIgPSByZW0gJSAzNjAwO1xuICAgICAgY29uc3QgbWlucyA9IE1hdGguZmxvb3IocmVtMiAvIDYwKTtcbiAgICAgIGNvbnN0IHNlY3MgPSByZW0yICUgNjA7XG5cbiAgICAgIGxldCByZXN1bHQgPSBuZWdhdGl2ZSA/ICctUCcgOiAnUCc7XG4gICAgICBpZiAoZGF5cyA+IDApIHJlc3VsdCArPSBgJHtkYXlzfURgO1xuICAgICAgaWYgKGhvdXJzID4gMCB8fCBtaW5zID4gMCB8fCBzZWNzID4gMCB8fCBuYW5vcyA+IDApIHtcbiAgICAgICAgcmVzdWx0ICs9ICdUJztcbiAgICAgICAgaWYgKGhvdXJzID4gMCkgcmVzdWx0ICs9IGAke2hvdXJzfUhgO1xuICAgICAgICBpZiAobWlucyA+IDApIHJlc3VsdCArPSBgJHttaW5zfU1gO1xuICAgICAgICBpZiAoc2VjcyA+IDAgfHwgbmFub3MgPiAwKSB7XG4gICAgICAgICAgaWYgKG5hbm9zID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZnJhY1N0ciA9IG5hbm9zLnRvU3RyaW5nKCkucGFkU3RhcnQoOSwgJzAnKS5yZXBsYWNlKC8wKyQvLCAnJyk7XG4gICAgICAgICAgICByZXN1bHQgKz0gYCR7c2Vjc30uJHtmcmFjU3RyfVNgO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gYCR7c2Vjc31TYDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0di5kYXRhLnRvU3RyaW5nKCd1dGYtOCcpO1xuICB9XG59XG5cblxuLyoqIFBhcnNlIGFuIG9mZnNldCBzdHJpbmcgbGlrZSBcIiswNTozMFwiIG9yIFwiLTA4OjAwXCIgaW50byBtaW51dGVzICovXG5mdW5jdGlvbiBwYXJzZU9mZnNldChzOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBzaWduID0gc1swXSA9PT0gJy0nID8gLTEgOiAxO1xuICBjb25zdCBwYXJ0cyA9IHMuc3Vic3RyaW5nKDEpLnNwbGl0KCc6Jyk7XG4gIHJldHVybiBzaWduICogKHBhcnNlSW50KHBhcnRzWzBdLCAxMCkgKiA2MCArIHBhcnNlSW50KHBhcnRzWzFdLCAxMCkpO1xufVxuXG4vKiogUGFyc2UgYSBzdHJpbmcgaW50byBhIFR5cGVkVmFsdWUgZm9yIHRoZSBnaXZlbiB0YXJnZXQgdHlwZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21TdHJpbmcoczogc3RyaW5nLCB0YXJnZXRUeXBlOiBQcm9wZXJ0eVR5cGUpOiBUeXBlZFZhbHVlIHtcbiAgaWYgKHMgPT09ICcnKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogdGFyZ2V0VHlwZSwgZGF0YTogQnVmZmVyLmFsbG9jKDApLCBpc051bGw6IHRydWUgfTtcbiAgfVxuXG4gIHN3aXRjaCAodGFyZ2V0VHlwZSkge1xuICAgIGNhc2UgUHJvcGVydHlUeXBlLkJPT0w6IHtcbiAgICAgIGNvbnN0IHZhbCA9IHMudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xuICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYygxKTtcbiAgICAgIGRhdGEud3JpdGVVSW50OCh2YWwgPyAxIDogMCwgMCk7XG4gICAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuQk9PTCwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLklOVDMyOiB7XG4gICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDQpO1xuICAgICAgZGF0YS53cml0ZUludDMyTEUocGFyc2VJbnQocywgMTApLCAwKTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5JTlQzMiwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlVJTlQzMjoge1xuICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICAgIGRhdGEud3JpdGVVSW50MzJMRShwYXJzZUludChzLCAxMCkgPj4+IDAsIDApO1xuICAgICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLlVJTlQzMiwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLklOVDY0OiB7XG4gICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDgpO1xuICAgICAgZGF0YS53cml0ZUJpZ0ludDY0TEUoQmlnSW50KHMpLCAwKTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5JTlQ2NCwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlVJTlQ2NDoge1xuICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg4KTtcbiAgICAgIGRhdGEud3JpdGVCaWdVSW50NjRMRShCaWdJbnQocyksIDApO1xuICAgICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLlVJTlQ2NCwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkZMT0FUOiB7XG4gICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDQpO1xuICAgICAgZGF0YS53cml0ZUZsb2F0TEUocGFyc2VGbG9hdChzKSwgMCk7XG4gICAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuRkxPQVQsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBjYXNlIFByb3BlcnR5VHlwZS5ET1VCTEU6IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoOCk7XG4gICAgICBkYXRhLndyaXRlRG91YmxlTEUocGFyc2VGbG9hdChzKSwgMCk7XG4gICAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuRE9VQkxFLCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuU1RSSU5HOlxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlRFWFQ6XG4gICAgICByZXR1cm4geyB0eXBlOiB0YXJnZXRUeXBlLCBkYXRhOiBCdWZmZXIuZnJvbShzLCAndXRmLTgnKSwgaXNOdWxsOiBmYWxzZSB9O1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuREVDSU1BTDpcbiAgICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5ERUNJTUFMLCBkYXRhOiBCdWZmZXIuZnJvbShzLCAndXRmLTgnKSwgaXNOdWxsOiBmYWxzZSB9O1xuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuREFURToge1xuICAgICAgLy8gXCJ5eXl5LU1NLWRkXCJcbiAgICAgIGNvbnN0IHBhcnRzID0gcy5zcGxpdCgnLScpO1xuICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg4KTtcbiAgICAgIC8vIHllYXIgaXMgc2lnbmVkIGludDE2IHNvIEJDRSB5ZWFycyAoZS5nLiAtNDQpIHJvdW5kLXRyaXAuXG4gICAgICBkYXRhLndyaXRlSW50MTZMRShwYXJzZUludChwYXJ0c1swXSwgMTApLCAwKTtcbiAgICAgIGRhdGEud3JpdGVVSW50OChwYXJzZUludChwYXJ0c1sxXSwgMTApLCAyKTtcbiAgICAgIGRhdGEud3JpdGVVSW50OChwYXJzZUludChwYXJ0c1syXSwgMTApLCAzKTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5EQVRFLCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuTE9DQUxfVElNRToge1xuICAgICAgLy8gXCJISDptbTpzc1subm5ubm5ubm5uXVwiIOKAlCBzdHJpcCBhbnkgdHJhaWxpbmcgb2Zmc2V0IG9yIFosIGtlZXAgbG9jYWwgdGltZSBvbmx5XG4gICAgICBjb25zdCBjbGVhbmVkID0gcmVtb3ZlT2Zmc2V0KHMpO1xuICAgICAgY29uc3QgeyBob3VyLCBtaW51dGUsIHNlY29uZCwgbmFub3NlY29uZCB9ID0gcGFyc2VUaW1lU3RyaW5nKGNsZWFuZWQpO1xuICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg4KTtcbiAgICAgIGRhdGEud3JpdGVVSW50OChob3VyLCAwKTtcbiAgICAgIGRhdGEud3JpdGVVSW50OChtaW51dGUsIDEpO1xuICAgICAgZGF0YS53cml0ZVVJbnQ4KHNlY29uZCwgMik7XG4gICAgICBkYXRhLndyaXRlVUludDMyTEUobmFub3NlY29uZCwgNCk7XG4gICAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuTE9DQUxfVElNRSwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLlpPTkVEX1RJTUU6IHtcbiAgICAgIC8vIFwiSEg6bW06c3NbLm5dK0hIOk1NXCJcbiAgICAgIGNvbnN0IHsgdGltZVBhcnQsIG9mZnNldFBhcnQgfSA9IHNwbGl0VGltZUFuZE9mZnNldChzKTtcbiAgICAgIGNvbnN0IHsgaG91ciwgbWludXRlLCBzZWNvbmQsIG5hbm9zZWNvbmQgfSA9IHBhcnNlVGltZVN0cmluZyh0aW1lUGFydCk7XG4gICAgICBjb25zdCBvZmZNaW4gPSBwYXJzZU9mZnNldChvZmZzZXRQYXJ0KTtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMTApO1xuICAgICAgZGF0YS53cml0ZVVJbnQ4KGhvdXIsIDApO1xuICAgICAgZGF0YS53cml0ZVVJbnQ4KG1pbnV0ZSwgMSk7XG4gICAgICBkYXRhLndyaXRlVUludDgoc2Vjb25kLCAyKTtcbiAgICAgIGRhdGEud3JpdGVVSW50MzJMRShuYW5vc2Vjb25kLCA0KTtcbiAgICAgIGRhdGEud3JpdGVJbnQxNkxFKG9mZk1pbiwgOCk7XG4gICAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuWk9ORURfVElNRSwgZGF0YSwgaXNOdWxsOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkxPQ0FMX0RBVEVUSU1FOlxuICAgIGNhc2UgUHJvcGVydHlUeXBlLkRBVEVUSU1FOiB7XG4gICAgICAvLyBcInl5eXktTU0tZGQgSEg6bW06c3NbLm5dXCIg4oCUIHN0cmlwIGFueSB0cmFpbGluZyBvZmZzZXQgb3IgWiwga2VlcCBsb2NhbCB0aW1lIG9ubHlcbiAgICAgIC8vIE5vcm1hbGl6ZSBUIHNlcGFyYXRvciB0byBzcGFjZVxuICAgICAgY29uc3QgY2xlYW5lZCA9IHJlbW92ZU9mZnNldChzLnJlcGxhY2UoJ1QnLCAnICcpKTtcbiAgICAgIGNvbnN0IHNwYWNlSWR4ID0gY2xlYW5lZC5pbmRleE9mKCcgJyk7XG4gICAgICBjb25zdCBkYXRlUGFydCA9IGNsZWFuZWQuc3Vic3RyaW5nKDAsIHNwYWNlSWR4KTtcbiAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gY2xlYW5lZC5zdWJzdHJpbmcoc3BhY2VJZHggKyAxKTtcbiAgICAgIGNvbnN0IGRwID0gZGF0ZVBhcnQuc3BsaXQoJy0nKTtcbiAgICAgIGNvbnN0IHsgaG91ciwgbWludXRlLCBzZWNvbmQsIG5hbm9zZWNvbmQgfSA9IHBhcnNlVGltZVN0cmluZyh0aW1lUGFydCk7XG4gICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDExKTtcbiAgICAgIC8vIHllYXIgaXMgc2lnbmVkIGludDE2IHNvIEJDRSB5ZWFycyAoZS5nLiAtNDQpIHJvdW5kLXRyaXAuXG4gICAgICBkYXRhLndyaXRlSW50MTZMRShwYXJzZUludChkcFswXSwgMTApLCAwKTtcbiAgICAgIGRhdGEud3JpdGVVSW50OChwYXJzZUludChkcFsxXSwgMTApLCAyKTtcbiAgICAgIGRhdGEud3JpdGVVSW50OChwYXJzZUludChkcFsyXSwgMTApLCAzKTtcbiAgICAgIGRhdGEud3JpdGVVSW50OChob3VyLCA0KTtcbiAgICAgIGRhdGEud3JpdGVVSW50OChtaW51dGUsIDUpO1xuICAgICAgZGF0YS53cml0ZVVJbnQ4KHNlY29uZCwgNik7XG4gICAgICBkYXRhLndyaXRlVUludDMyTEUobmFub3NlY29uZCwgNyk7XG4gICAgICByZXR1cm4geyB0eXBlOiB0YXJnZXRUeXBlLCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuWk9ORURfREFURVRJTUU6IHtcbiAgICAgIC8vIFwieXl5eS1NTS1kZCBISDptbTpzc1subl0rSEg6TU1cIiDigJQgYWxzbyBzdXBwb3J0cyBUIHNlcGFyYXRvciwgWiBzdWZmaXgsIHNwYWNlLXNlcGFyYXRlZCBvZmZzZXRcbiAgICAgIGNvbnN0IG5vcm0gPSBub3JtYWxpemVPZmZzZXQocy5yZXBsYWNlKCdUJywgJyAnKSk7XG4gICAgICBjb25zdCBzcGFjZUlkeCA9IG5vcm0uaW5kZXhPZignICcpO1xuICAgICAgY29uc3QgZGF0ZVBhcnQgPSBub3JtLnN1YnN0cmluZygwLCBzcGFjZUlkeCk7XG4gICAgICBjb25zdCByZXN0ID0gbm9ybS5zdWJzdHJpbmcoc3BhY2VJZHggKyAxKTtcbiAgICAgIGNvbnN0IHsgdGltZVBhcnQsIG9mZnNldFBhcnQgfSA9IHNwbGl0VGltZUFuZE9mZnNldChyZXN0KTtcbiAgICAgIGNvbnN0IGRwID0gZGF0ZVBhcnQuc3BsaXQoJy0nKTtcbiAgICAgIGNvbnN0IHsgaG91ciwgbWludXRlLCBzZWNvbmQsIG5hbm9zZWNvbmQgfSA9IHBhcnNlVGltZVN0cmluZyh0aW1lUGFydCk7XG4gICAgICBjb25zdCBvZmZNaW4gPSBwYXJzZU9mZnNldChvZmZzZXRQYXJ0KTtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMTMpO1xuICAgICAgLy8geWVhciBpcyBzaWduZWQgaW50MTYgc28gQkNFIHllYXJzIChlLmcuIC00NCkgcm91bmQtdHJpcC5cbiAgICAgIGRhdGEud3JpdGVJbnQxNkxFKHBhcnNlSW50KGRwWzBdLCAxMCksIDApO1xuICAgICAgZGF0YS53cml0ZVVJbnQ4KHBhcnNlSW50KGRwWzFdLCAxMCksIDIpO1xuICAgICAgZGF0YS53cml0ZVVJbnQ4KHBhcnNlSW50KGRwWzJdLCAxMCksIDMpO1xuICAgICAgZGF0YS53cml0ZVVJbnQ4KGhvdXIsIDQpO1xuICAgICAgZGF0YS53cml0ZVVJbnQ4KG1pbnV0ZSwgNSk7XG4gICAgICBkYXRhLndyaXRlVUludDgoc2Vjb25kLCA2KTtcbiAgICAgIGRhdGEud3JpdGVVSW50MzJMRShuYW5vc2Vjb25kLCA3KTtcbiAgICAgIGRhdGEud3JpdGVJbnQxNkxFKG9mZk1pbiwgMTEpO1xuICAgICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLlpPTkVEX0RBVEVUSU1FLCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuVElNRVNUQU1QOiB7XG4gICAgICAvLyBTdXBwb3J0IGVwb2NoIHNlY29uZHMgbGlrZSBcIjE3MTUxNjk2MDBcIiBvciBcInl5eXktTU0tZGQgSEg6bW06c3NbLm5dXCJcbiAgICAgIGlmICgvXlxcZCskLy50ZXN0KHMpKSB7XG4gICAgICAgIC8vIEVwb2NoIHNlY29uZHNcbiAgICAgICAgY29uc3QgZXBvY2ggPSBwYXJzZUludChzLCAxMCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMTIpO1xuICAgICAgICBkYXRhLndyaXRlQmlnSW50NjRMRShCaWdJbnQoZXBvY2gpLCAwKTtcbiAgICAgICAgZGF0YS53cml0ZVVJbnQzMkxFKDAsIDgpO1xuICAgICAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuVElNRVNUQU1QLCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gICAgICB9XG4gICAgICAvLyBcInl5eXktTU0tZGQgSEg6bW06c3NbLm5dXCIgb3IgXCJ5eXl5LU1NLWRkVEhIOm1tOnNzWy5uXVsrLV1ISDpNTVwiIC8gXCJbKy1dSEhNTVwiIC8gXCJaXCJcbiAgICAgIC8vIEFsc28gc3VwcG9ydHMgc3BhY2Utc2VwYXJhdGVkIG9mZnNldDogXCIyMDI0LTA2LTE1IDE0OjMwOjAwICswODowMFwiXG4gICAgICAvLyBOb3JtYWxpemUgVCBzZXBhcmF0b3IgdG8gc3BhY2VcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBzLnJlcGxhY2UoJ1QnLCAnICcpO1xuXG4gICAgICAvLyBDaGVjayBmb3IgWiBzdWZmaXgg4oaSIHRyZWF0IGFzICswMDowMFxuICAgICAgY29uc3QgaGFzWiA9IG5vcm1hbGl6ZWQuZW5kc1dpdGgoJ1onKSB8fCBub3JtYWxpemVkLmVuZHNXaXRoKCd6Jyk7XG5cbiAgICAgIC8vIE5vcm1hbGl6ZSBzcGFjZS1zZXBhcmF0ZWQgb2Zmc2V0czogXCIgKzA4OjAwXCIg4oaSIFwiKzA4OjAwXCJcbiAgICAgIC8vIEFsc28gbm9ybWFsaXplIFogdG8gKzAwOjAwXG4gICAgICBsZXQgcHJvY2Vzc2VkID0gbm9ybWFsaXplZDtcbiAgICAgIGlmIChoYXNaKSB7XG4gICAgICAgIHByb2Nlc3NlZCA9IG5vcm1hbGl6ZWQuc2xpY2UoMCwgLTEpICsgJyswMDowMCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDb2xsYXBzZSBzcGFjZSBiZWZvcmUgb2Zmc2V0IChvbmx5IGluIGxhc3QgfjEwIGNoYXJzIHRvIGF2b2lkIGRhdGUgaHlwaGVucylcbiAgICAgICAgY29uc3Qgc3BhY2VPZmZNYXRjaCA9IHByb2Nlc3NlZC5tYXRjaCgvXiguKz8pXFxzKyhbKy1dXFxkezJ9Oj9cXGR7Mn0pJC8pO1xuICAgICAgICBpZiAoc3BhY2VPZmZNYXRjaCkge1xuICAgICAgICAgIHByb2Nlc3NlZCA9IHNwYWNlT2ZmTWF0Y2hbMV0gKyBzcGFjZU9mZk1hdGNoWzJdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlcElkeCA9IHByb2Nlc3NlZC5pbmRleE9mKCcgJyk7XG4gICAgICBjb25zdCBkYXRlUGFydCA9IHByb2Nlc3NlZC5zdWJzdHJpbmcoMCwgc2VwSWR4KTtcbiAgICAgIGNvbnN0IHJlc3QgPSBwcm9jZXNzZWQuc3Vic3RyaW5nKHNlcElkeCArIDEpO1xuXG4gICAgICAvLyBDaGVjayBmb3IgdGltZXpvbmUgb2Zmc2V0OiArSEg6TU0sIC1ISDpNTSwgK0hITU0sIC1ISE1NIGF0IHRoZSBlbmRcbiAgICAgIGNvbnN0IG9mZnNldE1hdGNoID0gcmVzdC5tYXRjaCgvKFsrLV0pKFxcZHsyfSk6PyhcXGR7Mn0pJC8pO1xuICAgICAgaWYgKG9mZnNldE1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gcmVzdC5zdWJzdHJpbmcoMCwgb2Zmc2V0TWF0Y2guaW5kZXghKTtcbiAgICAgICAgY29uc3Qgc2lnbiA9IG9mZnNldE1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgIGNvbnN0IG9mZkhvdXJzID0gcGFyc2VJbnQob2Zmc2V0TWF0Y2hbMl0sIDEwKTtcbiAgICAgICAgY29uc3Qgb2ZmTWlucyA9IHBhcnNlSW50KG9mZnNldE1hdGNoWzNdLCAxMCk7XG4gICAgICAgIGNvbnN0IG9mZnNldFRvdGFsTWludXRlcyA9IHNpZ24gKiAob2ZmSG91cnMgKiA2MCArIG9mZk1pbnMpO1xuXG4gICAgICAgIGNvbnN0IGRwID0gZGF0ZVBhcnQuc3BsaXQoJy0nKTtcbiAgICAgICAgY29uc3QgeyBob3VyLCBtaW51dGUsIHNlY29uZCwgbmFub3NlY29uZCB9ID0gcGFyc2VUaW1lU3RyaW5nKHRpbWVQYXJ0KTtcblxuICAgICAgICAvLyBDb252ZXJ0IHRvIFVUQyBieSBzdWJ0cmFjdGluZyB0aGUgb2Zmc2V0XG4gICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShEYXRlLlVUQyhcbiAgICAgICAgICBwYXJzZUludChkcFswXSwgMTApLCBwYXJzZUludChkcFsxXSwgMTApIC0gMSwgcGFyc2VJbnQoZHBbMl0sIDEwKSxcbiAgICAgICAgICBob3VyLCBtaW51dGUgLSBvZmZzZXRUb3RhbE1pbnV0ZXMsIHNlY29uZFxuICAgICAgICApKTtcblxuICAgICAgICBjb25zdCB1bml4U2VjcyA9IEJpZ0ludChNYXRoLmZsb29yKGQuZ2V0VGltZSgpIC8gMTAwMCkpO1xuICAgICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDEyKTtcbiAgICAgICAgZGF0YS53cml0ZUJpZ0ludDY0TEUodW5peFNlY3MsIDApO1xuICAgICAgICBkYXRhLndyaXRlVUludDMyTEUobmFub3NlY29uZCwgOCk7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5USU1FU1RBTVAsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgICAgIH1cblxuICAgICAgLy8gTm8gb2Zmc2V0IOKAlCB0cmVhdCBhcyBsb2NhbCBkYXRldGltZSAoY29udmVydCB0byBVVEMgdXNpbmcgRGF0ZS5VVEMpXG4gICAgICBjb25zdCBkcCA9IGRhdGVQYXJ0LnNwbGl0KCctJyk7XG4gICAgICBjb25zdCB7IGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBuYW5vc2Vjb25kIH0gPSBwYXJzZVRpbWVTdHJpbmcocmVzdCk7XG4gICAgICBjb25zdCBkID0gbmV3IERhdGUoRGF0ZS5VVEMoXG4gICAgICAgIHBhcnNlSW50KGRwWzBdLCAxMCksIHBhcnNlSW50KGRwWzFdLCAxMCkgLSAxLCBwYXJzZUludChkcFsyXSwgMTApLFxuICAgICAgICBob3VyLCBtaW51dGUsIHNlY29uZFxuICAgICAgKSk7XG4gICAgICBjb25zdCB1bml4U2VjcyA9IEJpZ0ludChNYXRoLmZsb29yKGQuZ2V0VGltZSgpIC8gMTAwMCkpO1xuICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYygxMik7XG4gICAgICBkYXRhLndyaXRlQmlnSW50NjRMRSh1bml4U2VjcywgMCk7XG4gICAgICBkYXRhLndyaXRlVUludDMyTEUobmFub3NlY29uZCwgOCk7XG4gICAgICByZXR1cm4geyB0eXBlOiBQcm9wZXJ0eVR5cGUuVElNRVNUQU1QLCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuWUVBUl9UT19NT05USDoge1xuICAgICAgLy8gSVNPLTg2MDE6IFwiUDJZNU1cIiwgXCJQME1cIiwgXCItUDFZNU1cIlxuICAgICAgY29uc3QgbmVnYXRpdmUgPSBzLnN0YXJ0c1dpdGgoJy0nKTtcbiAgICAgIGNvbnN0IGJvZHkgPSBuZWdhdGl2ZSA/IHMuc3Vic3RyaW5nKDIpIDogcy5zdWJzdHJpbmcoMSk7IC8vIHNraXAgUCBvciAtUFxuICAgICAgbGV0IHllYXJzID0gMDtcbiAgICAgIGxldCBtb250aHMgPSAwO1xuICAgICAgY29uc3QgeW0gPSBib2R5Lm1hdGNoKC8oXFxkKylZLyk7XG4gICAgICBpZiAoeW0pIHllYXJzID0gcGFyc2VJbnQoeW1bMV0sIDEwKTtcbiAgICAgIGNvbnN0IG1tID0gYm9keS5tYXRjaCgvKFxcZCspTS8pO1xuICAgICAgaWYgKG1tKSBtb250aHMgPSBwYXJzZUludChtbVsxXSwgMTApO1xuICAgICAgY29uc3QgdG90YWwgPSAoeWVhcnMgKiAxMiArIG1vbnRocykgKiAobmVnYXRpdmUgPyAtMSA6IDEpO1xuICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICAgIGRhdGEud3JpdGVJbnQzMkxFKHRvdGFsLCAwKTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFByb3BlcnR5VHlwZS5ZRUFSX1RPX01PTlRILCBkYXRhLCBpc051bGw6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgY2FzZSBQcm9wZXJ0eVR5cGUuREFZX1RPX1NFQ09ORDoge1xuICAgICAgLy8gSVNPLTg2MDE6IFwiUDNEVDRIXCIsIFwiUFQwU1wiLCBcIlAxRFQySDNNNC4xMlNcIiwgXCItUDNEVDRIXCJcbiAgICAgIGNvbnN0IG5lZ2F0aXZlID0gcy5zdGFydHNXaXRoKCctJyk7XG4gICAgICBjb25zdCBib2R5ID0gbmVnYXRpdmUgPyBzLnN1YnN0cmluZygyKSA6IHMuc3Vic3RyaW5nKDEpOyAvLyBza2lwIFAgb3IgLVBcbiAgICAgIGxldCBkYXlzID0gMDtcbiAgICAgIGxldCBob3VycyA9IDA7XG4gICAgICBsZXQgbWlucyA9IDA7XG4gICAgICBsZXQgc2VjcyA9IDA7XG4gICAgICBsZXQgbmFub3MgPSAwO1xuXG4gICAgICBjb25zdCB0SWR4ID0gYm9keS5pbmRleE9mKCdUJyk7XG4gICAgICBjb25zdCBkYXRlUGFydDIgPSB0SWR4ID49IDAgPyBib2R5LnN1YnN0cmluZygwLCB0SWR4KSA6IGJvZHk7XG4gICAgICBjb25zdCB0aW1lUGFydDIgPSB0SWR4ID49IDAgPyBib2R5LnN1YnN0cmluZyh0SWR4ICsgMSkgOiAnJztcblxuICAgICAgY29uc3QgZG0gPSBkYXRlUGFydDIubWF0Y2goLyhcXGQrKUQvKTtcbiAgICAgIGlmIChkbSkgZGF5cyA9IHBhcnNlSW50KGRtWzFdLCAxMCk7XG5cbiAgICAgIGlmICh0aW1lUGFydDIpIHtcbiAgICAgICAgY29uc3QgaG0gPSB0aW1lUGFydDIubWF0Y2goLyhcXGQrKUgvKTtcbiAgICAgICAgaWYgKGhtKSBob3VycyA9IHBhcnNlSW50KGhtWzFdLCAxMCk7XG4gICAgICAgIGNvbnN0IG1pbm0gPSB0aW1lUGFydDIubWF0Y2goLyhcXGQrKU0vKTtcbiAgICAgICAgaWYgKG1pbm0pIG1pbnMgPSBwYXJzZUludChtaW5tWzFdLCAxMCk7XG4gICAgICAgIGNvbnN0IHNtID0gdGltZVBhcnQyLm1hdGNoKC8oW1xcZC5dKylTLyk7XG4gICAgICAgIGlmIChzbSkge1xuICAgICAgICAgIGNvbnN0IHNlY1N0ciA9IHNtWzFdO1xuICAgICAgICAgIGNvbnN0IGRvdElkeCA9IHNlY1N0ci5pbmRleE9mKCcuJyk7XG4gICAgICAgICAgaWYgKGRvdElkeCA+PSAwKSB7XG4gICAgICAgICAgICBzZWNzID0gcGFyc2VJbnQoc2VjU3RyLnN1YnN0cmluZygwLCBkb3RJZHgpLCAxMCk7XG4gICAgICAgICAgICBjb25zdCBmcmFjID0gc2VjU3RyLnN1YnN0cmluZyhkb3RJZHggKyAxKTtcbiAgICAgICAgICAgIG5hbm9zID0gcGFyc2VJbnQoZnJhYy5wYWRFbmQoOSwgJzAnKS5zdWJzdHJpbmcoMCwgOSksIDEwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VjcyA9IHBhcnNlSW50KHNlY1N0ciwgMTApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0b3RhbFNlY29uZHMgPSAoZGF5cyAqIDg2NDAwICsgaG91cnMgKiAzNjAwICsgbWlucyAqIDYwICsgc2VjcykgKiAobmVnYXRpdmUgPyAtMSA6IDEpO1xuICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYygxMik7XG4gICAgICBkYXRhLndyaXRlQmlnSW50NjRMRShCaWdJbnQodG90YWxTZWNvbmRzKSwgMCk7XG4gICAgICBkYXRhLndyaXRlVUludDMyTEUobmFub3MsIDgpO1xuICAgICAgcmV0dXJuIHsgdHlwZTogUHJvcGVydHlUeXBlLkRBWV9UT19TRUNPTkQsIGRhdGEsIGlzTnVsbDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHsgdHlwZTogdGFyZ2V0VHlwZSwgZGF0YTogQnVmZmVyLmZyb20ocywgJ3V0Zi04JyksIGlzTnVsbDogZmFsc2UgfTtcbiAgfVxufVxuXG4vKiogUGFyc2UgXCJISDptbTpzc1subm5ubm5ubm5uXVwiIGludG8gY29tcG9uZW50cyAqL1xuZnVuY3Rpb24gcGFyc2VUaW1lU3RyaW5nKHM6IHN0cmluZyk6IHsgaG91cjogbnVtYmVyOyBtaW51dGU6IG51bWJlcjsgc2Vjb25kOiBudW1iZXI7IG5hbm9zZWNvbmQ6IG51bWJlciB9IHtcbiAgY29uc3QgZG90SWR4ID0gcy5pbmRleE9mKCcuJyk7XG4gIGxldCB0aW1lUG9ydGlvbjogc3RyaW5nO1xuICBsZXQgbmFub3NlY29uZCA9IDA7XG5cbiAgaWYgKGRvdElkeCA+PSAwKSB7XG4gICAgdGltZVBvcnRpb24gPSBzLnN1YnN0cmluZygwLCBkb3RJZHgpO1xuICAgIGNvbnN0IGZyYWMgPSBzLnN1YnN0cmluZyhkb3RJZHggKyAxKTtcbiAgICBuYW5vc2Vjb25kID0gcGFyc2VJbnQoZnJhYy5wYWRFbmQoOSwgJzAnKS5zdWJzdHJpbmcoMCwgOSksIDEwKTtcbiAgfSBlbHNlIHtcbiAgICB0aW1lUG9ydGlvbiA9IHM7XG4gIH1cblxuICBjb25zdCBwYXJ0cyA9IHRpbWVQb3J0aW9uLnNwbGl0KCc6Jyk7XG4gIHJldHVybiB7XG4gICAgaG91cjogcGFyc2VJbnQocGFydHNbMF0sIDEwKSxcbiAgICBtaW51dGU6IHBhcnNlSW50KHBhcnRzWzFdLCAxMCksXG4gICAgc2Vjb25kOiBwYXJzZUludChwYXJ0c1syXSwgMTApLFxuICAgIG5hbm9zZWNvbmQsXG4gIH07XG59XG5cbi8qKiBTcGxpdCBcIkhIOm1tOnNzWy5uXStISDpNTVwiIG9yIFwiSEg6bW06c3NbLm5dLUhIOk1NXCIgaW50byB0aW1lUGFydCBhbmQgb2Zmc2V0UGFydC5cbiAqICBBbHNvIHN1cHBvcnRzIFogc3VmZml4ICh0cmVhdGVkIGFzICswMDowMCkgYW5kIHNwYWNlLXNlcGFyYXRlZCBvZmZzZXRzIGxpa2UgXCIxNDozMDowMCArMDg6MDBcIi4gKi9cbmZ1bmN0aW9uIHNwbGl0VGltZUFuZE9mZnNldChzOiBzdHJpbmcpOiB7IHRpbWVQYXJ0OiBzdHJpbmc7IG9mZnNldFBhcnQ6IHN0cmluZyB9IHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZU9mZnNldChzKTtcbiAgLy8gRmluZCB0aGUgbGFzdCAnKycgb3IgJy0nIHRoYXQgaW5kaWNhdGVzIG9mZnNldCAoc2tpcCB0aGUgb25lIGF0IHBvc2l0aW9uIDAgaWYgcHJlc2VudClcbiAgLy8gT2Zmc2V0IGlzIGFsd2F5cyBpbiB0aGUgZm9ybWF0ICtISDpNTSBvciAtSEg6TU0gYXQgdGhlIGVuZFxuICAvLyBTZWFyY2ggZm9yICsgb3IgLSB0aGF0IGlzIGZvbGxvd2VkIGJ5IGV4YWN0bHkgREQ6REQgcGF0dGVybiBhdCBlbmRcbiAgY29uc3QgbWF0Y2ggPSBub3JtYWxpemVkLm1hdGNoKC9eKC4rPykoWystXVxcZHsyfTpcXGR7Mn0pJC8pO1xuICBpZiAobWF0Y2gpIHtcbiAgICByZXR1cm4geyB0aW1lUGFydDogbWF0Y2hbMV0sIG9mZnNldFBhcnQ6IG1hdGNoWzJdIH07XG4gIH1cbiAgcmV0dXJuIHsgdGltZVBhcnQ6IG5vcm1hbGl6ZWQsIG9mZnNldFBhcnQ6ICcrMDA6MDAnIH07XG59XG5cbi8qKlxuICogUmVtb3ZlIHRyYWlsaW5nIHRpbWV6b25lIG9mZnNldCBvciBaIHN1ZmZpeCBmcm9tIGEgZGF0ZXRpbWUvdGltZSBzdHJpbmcuXG4gKiBPbmx5IGxvb2tzIGluIHRoZSBsYXN0IH4xMCBjaGFyYWN0ZXJzIHRvIGF2b2lkIG1hdGNoaW5nIGRhdGUgaHlwaGVucyBsaWtlIFwiMTk5My0wNS0wNlwiLlxuICogUmV0dXJucyB0aGUgY2xlYW4gbG9jYWwgdGltZS9kYXRldGltZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZU9mZnNldChzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBIYW5kbGUgWiBzdWZmaXhcbiAgaWYgKHMuZW5kc1dpdGgoJ1onKSB8fCBzLmVuZHNXaXRoKCd6JykpIHtcbiAgICByZXR1cm4gcy5zbGljZSgwLCAtMSk7XG4gIH1cbiAgLy8gSGFuZGxlIHNwYWNlLXNlcGFyYXRlZCBvZmZzZXQ6IFwiICtISDpNTVwiIG9yIFwiIC1ISDpNTVwiXG4gIGNvbnN0IHNwYWNlT2ZmTWF0Y2ggPSBzLm1hdGNoKC9eKC4rPylcXHMrWystXVxcZHsyfTo/XFxkezJ9JC8pO1xuICBpZiAoc3BhY2VPZmZNYXRjaCkge1xuICAgIHJldHVybiBzcGFjZU9mZk1hdGNoWzFdO1xuICB9XG4gIC8vIEhhbmRsZSBhdHRhY2hlZCBvZmZzZXQ6IFwiK0hIOk1NXCIgb3IgXCItSEg6TU1cIiBvciBcIitISE1NXCIgb3IgXCItSEhNTVwiIGF0IGVuZFxuICAvLyBPbmx5IG1hdGNoIGluIHRoZSBsYXN0IDEwIGNoYXJzIHRvIGF2b2lkIGRhdGUgaHlwaGVuc1xuICBjb25zdCB0YWlsID0gcy5sZW5ndGggPiAxMCA/IHMuc3Vic3RyaW5nKHMubGVuZ3RoIC0gMTApIDogcztcbiAgY29uc3Qgb2ZmTWF0Y2ggPSB0YWlsLm1hdGNoKC9bKy1dXFxkezJ9Oj9cXGR7Mn0kLyk7XG4gIGlmIChvZmZNYXRjaCkge1xuICAgIHJldHVybiBzLnN1YnN0cmluZygwLCBzLmxlbmd0aCAtIG9mZk1hdGNoWzBdLmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIHM7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGEgc3RyaW5nJ3MgdHJhaWxpbmcgb2Zmc2V0OiBjb2xsYXBzZSBzcGFjZSBiZWZvcmUgb2Zmc2V0LCBjb252ZXJ0IFogdG8gKzAwOjAwLlxuICogT25seSBsb29rcyBpbiB0aGUgbGFzdCB+MTAgY2hhcmFjdGVycyB0byBhdm9pZCBtYXRjaGluZyBkYXRlIGh5cGhlbnMuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZU9mZnNldChzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBIYW5kbGUgWiBzdWZmaXgg4oaSICswMDowMFxuICBpZiAocy5lbmRzV2l0aCgnWicpIHx8IHMuZW5kc1dpdGgoJ3onKSkge1xuICAgIHJldHVybiBzLnNsaWNlKDAsIC0xKSArICcrMDA6MDAnO1xuICB9XG4gIC8vIEhhbmRsZSBzcGFjZS1zZXBhcmF0ZWQgb2Zmc2V0OiBcIiArSEg6TU1cIiBvciBcIiAtSEg6TU1cIlxuICBjb25zdCBzcGFjZU9mZk1hdGNoID0gcy5tYXRjaCgvXiguKz8pXFxzKyhbKy1dXFxkezJ9OlxcZHsyfSkkLyk7XG4gIGlmIChzcGFjZU9mZk1hdGNoKSB7XG4gICAgcmV0dXJuIHNwYWNlT2ZmTWF0Y2hbMV0gKyBzcGFjZU9mZk1hdGNoWzJdO1xuICB9XG4gIHJldHVybiBzO1xufVxuXG5cbi8qKiBQYXJhbWV0ZXIgZm9yIHF1ZXJpZXMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYW1ldGVyIHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZTogVHlwZWRWYWx1ZTtcbn1cblxuLyoqIENyZWF0ZSBhIHBhcmFtZXRlciBmcm9tIG5hbWUgYW5kIHZhbHVlICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFyYW1ldGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IFBhcmFtZXRlciB7XG4gIHJldHVybiB7IG5hbWUsIHZhbHVlOiBjcmVhdGVUeXBlZFZhbHVlKHZhbHVlKSB9O1xufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ultipa-graph/ultipa-driver",
3
- "version": "6.2.0",
3
+ "version": "6.2.1",
4
4
  "description": "NodeJS SDK for Ultipa GQL",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",