ember-scoped-css 2.2.0 → 2.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.
package/README.md CHANGED
@@ -259,6 +259,35 @@ With `ember-scoped-css` you define styles in an inline `<style scoped>` block or
259
259
 
260
260
  Note that `<style>` (without `scoped`) will continue to work as it does today and be "global styles"
261
261
 
262
+ ### Using CSS preprocessors (eg. SCSS) with Vite
263
+
264
+ When using Vite, you can write preprocessor languages inside inline `<style>` blocks by using the `lang` attribute. The plugin uses Vite's `preprocessCSS` API to compile your preprocessor code to plain CSS during the build, then extracts and scopes classes from the compiled CSS.
265
+
266
+ Examples:
267
+
268
+ ```gjs
269
+ <template>
270
+ <p class="scss-hi">hello from scss</p>
271
+
272
+ <style scoped lang="scss">
273
+ $color: rgb(200, 0, 100);
274
+
275
+ .scss-hi {
276
+ color: $color;
277
+
278
+ &:focus {
279
+ outline: none;
280
+ }
281
+ }
282
+ </style>
283
+ </template>
284
+ ```
285
+
286
+ Notes:
287
+
288
+ - `lang` preprocessing is only supported when building with Vite. The plugin relies on Vite's `preprocessCSS` function. If you attempt to use `lang` without Vite, the build will throw a clear error.
289
+ - Inline styles with `lang` (for example `<style scoped inline lang="scss">`) are downgraded to a non-inline virtual module because preprocessing is asynchronous and cannot run at synchronous Babel-time; you will see a console warning informing you that the style was converted to a virtual CSS import.
290
+
262
291
  <details><summary>inline / conditional CSS</summary>
263
292
 
264
293
  Like the example above, we can specify the `scoped` attribute on the `<style>` tag, but if we add the `inline` attribute as well, the `<style>` tag will not be extracted to a CSS file during your app's build -- it will be left inline.
@@ -1113,7 +1113,7 @@ function inline(options = {}) {
1113
1113
  vite: { async configResolved(config) {
1114
1114
  viteConfig = config;
1115
1115
  try {
1116
- preprocessCSS = (await import((0, node_module.createRequire)(config.root).resolve("vite"))).preprocessCSS;
1116
+ preprocessCSS = (await import((0, node_module.createRequire)(node_path.default.join(config.root, "package.json")).resolve("vite"))).preprocessCSS;
1117
1117
  } catch {}
1118
1118
  } }
1119
1119
  };
@@ -1413,4 +1413,4 @@ Object.defineProperty(exports, 'scopedCSS', {
1413
1413
  return scopedCSS;
1414
1414
  }
1415
1415
  });
1416
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsLUNGc2FHNXBNLmNqcyIsIm5hbWVzIjpbImhhc2giLCJoYXNoIiwiaGFzaEZyb21Nb2R1bGVQYXRoIiwiaGFzaFBvc2l4TW9kdWxlUGF0aCIsInBhdGgiLCJmc1N5bmMiLCJzY29wZWRDU1MiLCJwYXRoIiwic2Nzc1N5bnRheCIsIlNFUCIsInBhcnNlciIsInJlcXVlc3QiLCJoYXNoIiwicGF0aCIsIk1FVEEiLCJDV0QiLCJwYXRoIiwiQ1dEIiwicGF0aCIsInVucGx1Z2luIiwicGF0aCIsIm5vZGUiLCJyZWNhc3QiLCJwYXRoIiwicHJvY2VzcyIsImluZm8iLCJwYXRoIiwidW5wbHVnaW4iLCJiYWJlbC5zY29wZWRDU1MiLCJ0ZW1wbGF0ZS5jcmVhdGVQbHVnaW4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3BhdGgvY29uc3QuanMiLCIuLi8uLi9zcmMvbGliL3BhdGgvbWQ1LmpzIiwiLi4vLi4vc3JjL2xpYi9wYXRoL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyIsIi4uLy4uL3NyYy9saWIvcGF0aC91dGlscy5qcyIsIi4uLy4uL3NyYy9saWIvcmVuYW1lQ2xhc3MuanMiLCIuLi8uLi9zcmMvYnVpbGQvYmFiZWwtcGx1Z2luLmpzIiwiLi4vLi4vc3JjL2xpYi9jc3MvdXRpbHMuanMiLCIuLi8uLi9zcmMvbGliL2Nzcy9yZXdyaXRlLmpzIiwiLi4vLi4vc3JjL2xpYi9yZXF1ZXN0LmpzIiwiLi4vLi4vc3JjL2J1aWxkL3VucGx1Z2luLWNvbG9jYXRlZC5qcyIsIi4uLy4uL3NyYy9idWlsZC91bnBsdWdpbi1pbmxpbmUuanMiLCIuLi8uLi9zcmMvYnVpbGQvc2NvcGVkLWNzcy11bnBsdWdpbi5qcyIsIi4uLy4uL3NyYy9saWIvcGF0aC90ZW1wbGF0ZS10cmFuc2Zvcm0tcGF0aHMuanMiLCIuLi8uLi9zcmMvbGliL3Jld3JpdGVIYnMuanMiLCIuLi8uLi9zcmMvYnVpbGQvdGVtcGxhdGUtcGx1Z2luLmpzIiwiLi4vLi4vc3JjL2J1aWxkL3B1YmxpYy1leHBvcnRzL2FsbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuLyoqXG4gKiBKb2luIHdpbGwgY29udmVydCB0byB3aGF0ZXZlciBpcyBhcHByb3ByaWF0ZSBmcm8gdGhlIGN1cnJlbnQgcGxhdGZvcm1cbiAqL1xuXG5leHBvcnQgY29uc3QgbGVhZGluZ1NsYXNoUGF0aCA9IHtcbiAgZW1icm9pZGVyRGlyOiBwYXRoLmpvaW4oJy9ub2RlX21vZHVsZXMvLmVtYnJvaWRlci8nKSxcbiAgYXRFbWJyb2lkZXI6IHBhdGguam9pbignL0BlbWJyb2lkZXInKSxcbiAgY29tcG9uZW50c0RpcjogcGF0aC5qb2luKCcvY29tcG9uZW50cy8nKSxcbiAgdGVtcGxhdGVzRGlyOiBwYXRoLmpvaW4oJy90ZW1wbGF0ZXMvJyksXG4gIHJvdXRlc0RpcjogcGF0aC5qb2luKCcvcm91dGVzLycpLFxuICB0ZXN0ZW06IHBhdGguam9pbignL3Rlc3RlbScpLFxuICBzcmM6IHBhdGguam9pbignL3NyYy8nKSxcbiAgYXBwOiBwYXRoLmpvaW4oJy9hcHAvJyksXG59O1xuXG5leHBvcnQgY29uc3QgYmFyZVBhdGggPSB7XG4gIHBucG1EaXI6IHBhdGguam9pbignbm9kZV9tb2R1bGVzLy5wbnBtJyksXG59O1xuIiwiLypcbiAqIEphdmFTY3JpcHQgTUQ1XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9KYXZhU2NyaXB0LU1ENVxuICpcbiAqIENvcHlyaWdodCAyMDExLCBTZWJhc3RpYW4gVHNjaGFuXG4gKiBodHRwczovL2JsdWVpbXAubmV0XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqXG4gKiBCYXNlZCBvblxuICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBNRDUgTWVzc2FnZVxuICogRGlnZXN0IEFsZ29yaXRobSwgYXMgZGVmaW5lZCBpbiBSRkMgMTMyMS5cbiAqIFZlcnNpb24gMi4yIENvcHlyaWdodCAoQykgUGF1bCBKb2huc3RvbiAxOTk5IC0gMjAwOVxuICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBlcnQsIFlkbmFyLCBMb3N0aW5ldFxuICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNlXG4gKiBTZWUgaHR0cDovL3BhamhvbWUub3JnLnVrL2NyeXB0L21kNSBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIE1vZGlmaWNhdGlvbnM6XG4gKiAtIHJlbW92ZWQgSUlGRSwgZXhwb3J0ZWQgbWQ1ICh0aGlzIGZpbGUgaXMgbm93IEVTTSlcbiAqL1xuXG4vKipcbiAqIEFkZCBpbnRlZ2Vycywgd3JhcHBpbmcgYXQgMl4zMi5cbiAqIFRoaXMgdXNlcyAxNi1iaXQgb3BlcmF0aW9ucyBpbnRlcm5hbGx5IHRvIHdvcmsgYXJvdW5kIGJ1Z3MgaW4gaW50ZXJwcmV0ZXJzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IEZpcnN0IGludGVnZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFNlY29uZCBpbnRlZ2VyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBTdW1cbiAqL1xuZnVuY3Rpb24gc2FmZUFkZCh4LCB5KSB7XG4gIHZhciBsc3cgPSAoeCAmIDB4ZmZmZikgKyAoeSAmIDB4ZmZmZik7XG4gIHZhciBtc3cgPSAoeCA+PiAxNikgKyAoeSA+PiAxNikgKyAobHN3ID4+IDE2KTtcblxuICByZXR1cm4gKG1zdyA8PCAxNikgfCAobHN3ICYgMHhmZmZmKTtcbn1cblxuLyoqXG4gKiBCaXR3aXNlIHJvdGF0ZSBhIDMyLWJpdCBudW1iZXIgdG8gdGhlIGxlZnQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG51bSAzMi1iaXQgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0gY250IFJvdGF0aW9uIGNvdW50XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSb3RhdGVkIG51bWJlclxuICovXG5mdW5jdGlvbiBiaXRSb3RhdGVMZWZ0KG51bSwgY250KSB7XG4gIHJldHVybiAobnVtIDw8IGNudCkgfCAobnVtID4+PiAoMzIgLSBjbnQpKTtcbn1cblxuLyoqXG4gKiBCYXNpYyBvcGVyYXRpb24gdGhlIGFsZ29yaXRobSB1c2VzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBxIHFcbiAqIEBwYXJhbSB7bnVtYmVyfSBhIGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiIGJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzIHNcbiAqIEBwYXJhbSB7bnVtYmVyfSB0IHRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJlc3VsdFxuICovXG5mdW5jdGlvbiBtZDVjbW4ocSwgYSwgYiwgeCwgcywgdCkge1xuICByZXR1cm4gc2FmZUFkZChiaXRSb3RhdGVMZWZ0KHNhZmVBZGQoc2FmZUFkZChhLCBxKSwgc2FmZUFkZCh4LCB0KSksIHMpLCBiKTtcbn1cblxuLyoqXG4gKiBCYXNpYyBvcGVyYXRpb24gdGhlIGFsZ29yaXRobSB1c2VzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhIGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiIGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjIGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkIGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzIHNcbiAqIEBwYXJhbSB7bnVtYmVyfSB0IHRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJlc3VsdFxuICovXG5mdW5jdGlvbiBtZDVmZihhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oKGIgJiBjKSB8ICh+YiAmIGQpLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuLyoqXG4gKiBCYXNpYyBvcGVyYXRpb24gdGhlIGFsZ29yaXRobSB1c2VzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhIGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiIGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjIGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkIGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzIHNcbiAqIEBwYXJhbSB7bnVtYmVyfSB0IHRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJlc3VsdFxuICovXG5mdW5jdGlvbiBtZDVnZyhhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oKGIgJiBkKSB8IChjICYgfmQpLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuLyoqXG4gKiBCYXNpYyBvcGVyYXRpb24gdGhlIGFsZ29yaXRobSB1c2VzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhIGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiIGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjIGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkIGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzIHNcbiAqIEBwYXJhbSB7bnVtYmVyfSB0IHRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJlc3VsdFxuICovXG5mdW5jdGlvbiBtZDVoaChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oYiBeIGMgXiBkLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuLyoqXG4gKiBCYXNpYyBvcGVyYXRpb24gdGhlIGFsZ29yaXRobSB1c2VzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhIGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiIGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjIGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkIGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzIHNcbiAqIEBwYXJhbSB7bnVtYmVyfSB0IHRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJlc3VsdFxuICovXG5mdW5jdGlvbiBtZDVpaShhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oYyBeIChiIHwgfmQpLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIE1ENSBvZiBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzLCBhbmQgYSBiaXQgbGVuZ3RoLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHggQXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3Jkc1xuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBCaXQgbGVuZ3RoXG4gKiBAcmV0dXJucyB7QXJyYXk8bnVtYmVyPn0gTUQ1IEFycmF5XG4gKi9cbmZ1bmN0aW9uIGJpbmxNRDUoeCwgbGVuKSB7XG4gIC8qIGFwcGVuZCBwYWRkaW5nICovXG4gIHhbbGVuID4+IDVdIHw9IDB4ODAgPDwgbGVuICUgMzI7XG4gIHhbKCgobGVuICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IGxlbjtcblxuICB2YXIgaTtcbiAgdmFyIG9sZGE7XG4gIHZhciBvbGRiO1xuICB2YXIgb2xkYztcbiAgdmFyIG9sZGQ7XG4gIHZhciBhID0gMTczMjU4NDE5MztcbiAgdmFyIGIgPSAtMjcxNzMzODc5O1xuICB2YXIgYyA9IC0xNzMyNTg0MTk0O1xuICB2YXIgZCA9IDI3MTczMzg3ODtcblxuICBmb3IgKGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkgKz0gMTYpIHtcbiAgICBvbGRhID0gYTtcbiAgICBvbGRiID0gYjtcbiAgICBvbGRjID0gYztcbiAgICBvbGRkID0gZDtcblxuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2ldLCA3LCAtNjgwODc2OTM2KTtcbiAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgMl0sIDE3LCA2MDYxMDU4MTkpO1xuICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyAzXSwgMjIsIC0xMDQ0NTI1MzMwKTtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpICsgNF0sIDcsIC0xNzY0MTg4OTcpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyA1XSwgMTIsIDEyMDAwODA0MjYpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyA2XSwgMTcsIC0xNDczMjMxMzQxKTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgN10sIDIyLCAtNDU3MDU5ODMpO1xuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyA4XSwgNywgMTc3MDAzNTQxNik7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyAxMF0sIDE3LCAtNDIwNjMpO1xuICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyAxMV0sIDIyLCAtMTk5MDQwNDE2Mik7XG4gICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaSArIDEyXSwgNywgMTgwNDYwMzY4Mik7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDEzXSwgMTIsIC00MDM0MTEwMSk7XG4gICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTcsIC0xNTAyMDAyMjkwKTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgMTVdLCAyMiwgMTIzNjUzNTMyOSk7XG5cbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgMV0sIDUsIC0xNjU3OTY1MTApO1xuICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyA2XSwgOSwgLTEwNjk1MDE2MzIpO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyAxMV0sIDE0LCA2NDM3MTc3MTMpO1xuICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2ldLCAyMCwgLTM3Mzg5NzMwMik7XG4gICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA1LCAtNzAxNTU4NjkxKTtcbiAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgMTBdLCA5LCAzODAxNjA4Myk7XG4gICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDE1XSwgMTQsIC02NjA0NzgzMzUpO1xuICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyA0XSwgMjAsIC00MDU1Mzc4NDgpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyA5XSwgNSwgNTY4NDQ2NDM4KTtcbiAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgMTRdLCA5LCAtMTAxOTgwMzY5MCk7XG4gICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDNdLCAxNCwgLTE4NzM2Mzk2MSk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaSArIDhdLCAyMCwgMTE2MzUzMTUwMSk7XG4gICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgNSwgLTE0NDQ2ODE0NjcpO1xuICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAyXSwgOSwgLTUxNDAzNzg0KTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgN10sIDE0LCAxNzM1MzI4NDczKTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpICsgMTJdLCAyMCwgLTE5MjY2MDc3MzQpO1xuXG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA0LCAtMzc4NTU4KTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpICsgOF0sIDExLCAtMjAyMjU3NDQ2Myk7XG4gICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTYsIDE4MzkwMzA1NjIpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAxNF0sIDIzLCAtMzUzMDk1NTYpO1xuICAgIGEgPSBtZDVoaChhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNCwgLTE1MzA5OTIwNjApO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyA0XSwgMTEsIDEyNzI4OTMzNTMpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyA3XSwgMTYsIC0xNTU0OTc2MzIpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAxMF0sIDIzLCAtMTA5NDczMDY0MCk7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgNCwgNjgxMjc5MTc0KTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpXSwgMTEsIC0zNTg1MzcyMjIpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyAzXSwgMTYsIC03MjI1MjE5NzkpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyA2XSwgMjMsIDc2MDI5MTg5KTtcbiAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgOV0sIDQsIC02NDAzNjQ0ODcpO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyAxMl0sIDExLCAtNDIxODE1ODM1KTtcbiAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNiwgNTMwNzQyNTIwKTtcbiAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMl0sIDIzLCAtOTk1MzM4NjUxKTtcblxuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2ldLCA2LCAtMTk4NjMwODQ0KTtcbiAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgN10sIDEwLCAxMTI2ODkxNDE1KTtcbiAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyA1XSwgMjEsIC01NzQzNDA1NSk7XG4gICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaSArIDEyXSwgNiwgMTcwMDQ4NTU3MSk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDNdLCAxMCwgLTE4OTQ5ODY2MDYpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyAxMF0sIDE1LCAtMTA1MTUyMyk7XG4gICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDFdLCAyMSwgLTIwNTQ5MjI3OTkpO1xuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2kgKyA4XSwgNiwgMTg3MzMxMzM1OSk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDE1XSwgMTAsIC0zMDYxMTc0NCk7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDZdLCAxNSwgLTE1NjAxOTgzODApO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyAxM10sIDIxLCAxMzA5MTUxNjQ5KTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpICsgNF0sIDYsIC0xNDU1MjMwNzApO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAxMV0sIDEwLCAtMTEyMDIxMDM3OSk7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDJdLCAxNSwgNzE4Nzg3MjU5KTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgOV0sIDIxLCAtMzQzNDg1NTUxKTtcblxuICAgIGEgPSBzYWZlQWRkKGEsIG9sZGEpO1xuICAgIGIgPSBzYWZlQWRkKGIsIG9sZGIpO1xuICAgIGMgPSBzYWZlQWRkKGMsIG9sZGMpO1xuICAgIGQgPSBzYWZlQWRkKGQsIG9sZGQpO1xuICB9XG5cbiAgcmV0dXJuIFthLCBiLCBjLCBkXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHMgdG8gYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGlucHV0IE1ENSBBcnJheVxuICogQHJldHVybnMge3N0cmluZ30gTUQ1IHN0cmluZ1xuICovXG5mdW5jdGlvbiBiaW5sMnJzdHIoaW5wdXQpIHtcbiAgdmFyIGk7XG4gIHZhciBvdXRwdXQgPSAnJztcbiAgdmFyIGxlbmd0aDMyID0gaW5wdXQubGVuZ3RoICogMzI7XG5cbiAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDMyOyBpICs9IDgpIHtcbiAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoaW5wdXRbaSA+PiA1XSA+Pj4gaSAlIDMyKSAmIDB4ZmYpO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgcmF3IHN0cmluZyB0byBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzXG4gKiBDaGFyYWN0ZXJzID4yNTUgaGF2ZSB0aGVpciBoaWdoLWJ5dGUgc2lsZW50bHkgaWdub3JlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgUmF3IGlucHV0IHN0cmluZ1xuICogQHJldHVybnMge0FycmF5PG51bWJlcj59IEFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHNcbiAqL1xuZnVuY3Rpb24gcnN0cjJiaW5sKGlucHV0KSB7XG4gIHZhciBpO1xuICB2YXIgb3V0cHV0ID0gW107XG4gIG91dHB1dFsoaW5wdXQubGVuZ3RoID4+IDIpIC0gMV0gPSB1bmRlZmluZWQ7XG5cbiAgZm9yIChpID0gMDsgaSA8IG91dHB1dC5sZW5ndGg7IGkgKz0gMSkge1xuICAgIG91dHB1dFtpXSA9IDA7XG4gIH1cblxuICB2YXIgbGVuZ3RoOCA9IGlucHV0Lmxlbmd0aCAqIDg7XG5cbiAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDg7IGkgKz0gOCkge1xuICAgIG91dHB1dFtpID4+IDVdIHw9IChpbnB1dC5jaGFyQ29kZUF0KGkgLyA4KSAmIDB4ZmYpIDw8IGkgJSAzMjtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBNRDUgb2YgYSByYXcgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHMgSW5wdXQgc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSYXcgTUQ1IHN0cmluZ1xuICovXG5mdW5jdGlvbiByc3RyTUQ1KHMpIHtcbiAgcmV0dXJuIGJpbmwycnN0cihiaW5sTUQ1KHJzdHIyYmlubChzKSwgcy5sZW5ndGggKiA4KSk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgSE1BQy1NRDUgb2YgYSBrZXkgYW5kIHNvbWUgZGF0YSAocmF3IHN0cmluZ3MpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBITUFDIGtleVxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgUmF3IGlucHV0IHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gUmF3IE1ENSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gcnN0ckhNQUNNRDUoa2V5LCBkYXRhKSB7XG4gIHZhciBpO1xuICB2YXIgYmtleSA9IHJzdHIyYmlubChrZXkpO1xuICB2YXIgaXBhZCA9IFtdO1xuICB2YXIgb3BhZCA9IFtdO1xuICB2YXIgaGFzaDtcbiAgaXBhZFsxNV0gPSBvcGFkWzE1XSA9IHVuZGVmaW5lZDtcblxuICBpZiAoYmtleS5sZW5ndGggPiAxNikge1xuICAgIGJrZXkgPSBiaW5sTUQ1KGJrZXksIGtleS5sZW5ndGggKiA4KTtcbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSAxKSB7XG4gICAgaXBhZFtpXSA9IGJrZXlbaV0gXiAweDM2MzYzNjM2O1xuICAgIG9wYWRbaV0gPSBia2V5W2ldIF4gMHg1YzVjNWM1YztcbiAgfVxuXG4gIGhhc2ggPSBiaW5sTUQ1KGlwYWQuY29uY2F0KHJzdHIyYmlubChkYXRhKSksIDUxMiArIGRhdGEubGVuZ3RoICogOCk7XG5cbiAgcmV0dXJuIGJpbmwycnN0cihiaW5sTUQ1KG9wYWQuY29uY2F0KGhhc2gpLCA1MTIgKyAxMjgpKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgcmF3IHN0cmluZyB0byBhIGhleCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgUmF3IGlucHV0IHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gSGV4IGVuY29kZWQgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHJzdHIyaGV4KGlucHV0KSB7XG4gIHZhciBoZXhUYWIgPSAnMDEyMzQ1Njc4OWFiY2RlZic7XG4gIHZhciBvdXRwdXQgPSAnJztcbiAgdmFyIHg7XG4gIHZhciBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHggPSBpbnB1dC5jaGFyQ29kZUF0KGkpO1xuICAgIG91dHB1dCArPSBoZXhUYWIuY2hhckF0KCh4ID4+PiA0KSAmIDB4MGYpICsgaGV4VGFiLmNoYXJBdCh4ICYgMHgwZik7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIEVuY29kZSBhIHN0cmluZyBhcyBVVEYtOFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCBJbnB1dCBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFVURjggc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHN0cjJyc3RyVVRGOChpbnB1dCkge1xuICByZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KSk7XG59XG5cbi8qKlxuICogRW5jb2RlcyBpbnB1dCBzdHJpbmcgYXMgcmF3IE1ENSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcyBJbnB1dCBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJhdyBNRDUgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHJhd01ENShzKSB7XG4gIHJldHVybiByc3RyTUQ1KHN0cjJyc3RyVVRGOChzKSk7XG59XG5cbi8qKlxuICogRW5jb2RlcyBpbnB1dCBzdHJpbmcgYXMgSGV4IGVuY29kZWQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHMgSW5wdXQgc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBIZXggZW5jb2RlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gaGV4TUQ1KHMpIHtcbiAgcmV0dXJuIHJzdHIyaGV4KHJhd01ENShzKSk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgcmF3IEhNQUMtTUQ1IGZvciB0aGUgZ2l2ZW4ga2V5IGFuZCBkYXRhXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGsgSE1BQyBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBkIElucHV0IHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gUmF3IE1ENSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gcmF3SE1BQ01ENShrLCBkKSB7XG4gIHJldHVybiByc3RySE1BQ01ENShzdHIycnN0clVURjgoayksIHN0cjJyc3RyVVRGOChkKSk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgSGV4IGVuY29kZWQgSE1BQy1NRDUgZm9yIHRoZSBnaXZlbiBrZXkgYW5kIGRhdGFcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gayBITUFDIGtleVxuICogQHBhcmFtIHtzdHJpbmd9IGQgSW5wdXQgc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSYXcgTUQ1IHN0cmluZ1xuICovXG5mdW5jdGlvbiBoZXhITUFDTUQ1KGssIGQpIHtcbiAgcmV0dXJuIHJzdHIyaGV4KHJhd0hNQUNNRDUoaywgZCkpO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgTUQ1IHZhbHVlIGZvciBhIGdpdmVuIHN0cmluZy5cbiAqIElmIGEga2V5IGlzIHByb3ZpZGVkLCBjYWxjdWxhdGVzIHRoZSBITUFDLU1ENSB2YWx1ZS5cbiAqIFJldHVybnMgYSBIZXggZW5jb2RlZCBzdHJpbmcgdW5sZXNzIHRoZSByYXcgYXJndW1lbnQgaXMgZ2l2ZW4uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBJbnB1dCBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBITUFDIGtleVxuICogQHBhcmFtIHtib29sZWFufSBbcmF3XSBSYXcgb3V0cHV0IHN3aXRjaFxuICogQHJldHVybnMge3N0cmluZ30gTUQ1IG91dHB1dFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWQ1KHN0cmluZywga2V5LCByYXcpIHtcbiAgaWYgKCFrZXkpIHtcbiAgICBpZiAoIXJhdykge1xuICAgICAgcmV0dXJuIGhleE1ENShzdHJpbmcpO1xuICAgIH1cblxuICAgIHJldHVybiByYXdNRDUoc3RyaW5nKTtcbiAgfVxuXG4gIGlmICghcmF3KSB7XG4gICAgcmV0dXJuIGhleEhNQUNNRDUoa2V5LCBzdHJpbmcpO1xuICB9XG5cbiAgcmV0dXJuIHJhd0hNQUNNRDUoa2V5LCBzdHJpbmcpO1xufVxuIiwiaW1wb3J0IHsgbWQ1IH0gZnJvbSAnLi9tZDUuanMnO1xuXG4vKipcbiAqIFRoZSBpbnRlbnQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBnZW5lcmF0ZSB0aGUgc3VmZml4L3Bvc3RmaXggZm9yIHRoZVxuICogY3NzIGNsYXNzZXMsIGJhc2VkIG9uIHRoZSBtb2R1bGUtc2NvcGVkIHBhdGggbmFtZS5cbiAqXG4gKiBmb3IgZXhhbXBsZSxcbiAqICAgIGhhc2goJ215LWFwcC9jb21wb25lbnRzL2ZvbycpXG4gKiAgaW5zdGVhZCBvZlxuICogICAgaGFzaCgnYXBwL2NvbXBvbmVudHMvZm9vJylcbiAqXG4gKiAgKHVubGVzcyB5b3VyIGFwcCBuYW1lIGlzICdhcHAnKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVQYXRoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaChtb2R1bGVQYXRoKSB7XG4gIHJldHVybiAnZScgKyBtZDUobW9kdWxlUGF0aCkuc3Vic3RyaW5nKDAsIDgpO1xufVxuXG5pZiAoaW1wb3J0Lm1ldGEudml0ZXN0KSB7XG4gIGNvbnN0IHsgaXQsIGV4cGVjdCB9ID0gaW1wb3J0Lm1ldGEudml0ZXN0O1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBvc3RmaXggPSBoYXNoKCdmb28uY3NzJyk7XG5cbiAgICBleHBlY3QocG9zdGZpeCkudG8uYmUuYSgnc3RyaW5nJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nIHN0YXJ0aW5nIHdpdGggXCJlXCInLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcG9zdGZpeCA9IGhhc2goJ2Zvby5jc3MnKTtcblxuICAgIGV4cGVjdChwb3N0Zml4KS50by5tYXRjaCgvXmUvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzdHJpbmcgb2YgbGVuZ3RoIDknLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcG9zdGZpeCA9IGhhc2goJ2Zvby5jc3MnKTtcblxuICAgIGV4cGVjdChwb3N0Zml4KS50by5oYXZlLmxlbmd0aE9mKDkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGhhc2hGcm9tTW9kdWxlUGF0aCA9IGhhc2g7XG4iLCJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0JztcbmltcG9ydCBmc1N5bmMsIHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gJ25vZGU6bW9kdWxlJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB7IGJhcmVQYXRoLCBsZWFkaW5nU2xhc2hQYXRoIH0gZnJvbSAnLi9jb25zdC5qcyc7XG5pbXBvcnQgeyBoYXNoRnJvbUFic29sdXRlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLWFic29sdXRlLXBhdGguanMnO1xuaW1wb3J0IHsgaGFzaEZyb21Nb2R1bGVQYXRoIGFzIGhhc2hQb3NpeE1vZHVsZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5cbmV4cG9ydCB7IGhhc2hGcm9tQWJzb2x1dGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyc7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hGcm9tTW9kdWxlUGF0aChmaWxlUGF0aCkge1xuICBsZXQgcG9zaXhQYXRoID0gZm9yY2VQb3NpeChmaWxlUGF0aCk7XG5cbiAgcmV0dXJuIGhhc2hQb3NpeE1vZHVsZVBhdGgocG9zaXhQYXRoKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcmNlUG9zaXgoZmlsZVBhdGgpIHtcbiAgY29uc3QgcGFyc2VkID0gcGF0aC5wYXJzZShmaWxlUGF0aCk7XG5cbiAgaWYgKHBhcnNlZC5yb290ID09PSAnJykge1xuICAgIHJldHVybiBmaWxlUGF0aC5yZXBsYWNlQWxsKHBhdGgud2luMzIuc2VwLCBwYXRoLnBvc2l4LnNlcCk7XG4gIH1cblxuICBsZXQgcm9vdGxlc3MgPSBmaWxlUGF0aC5yZXBsYWNlKFxuICAgIG5ldyBSZWdFeHAoYF4ke1JlZ0V4cC5lc2NhcGUocGFyc2VkLnJvb3QpfWApLFxuICAgIHBhdGgucG9zaXguc2VwLFxuICApO1xuXG4gIHJldHVybiByb290bGVzcy5yZXBsYWNlQWxsKHBhdGgud2luMzIuc2VwLCBwYXRoLnBvc2l4LnNlcCk7XG59XG5cbmNvbnN0IENPTVBPTkVOVF9FWFRFTlNJT05TID0gWycuZ3RzJywgJy5nanMnLCAnLnRzJywgJy5qcycsICcuaGJzJ107XG5cbi8vIENKUyAvIEVTTT9cbmxldCBoZXJlID0gaW1wb3J0Lm1ldGEudXJsO1xubGV0IG91clJlcXVpcmUgPSBnbG9iYWxUaGlzLnJlcXVpcmVcbiAgPyBnbG9iYWxUaGlzLnJlcXVpcmVcbiAgOiBoZXJlICYmIGNyZWF0ZVJlcXVpcmUoaGVyZSk7XG5cbmlmICghb3VyUmVxdWlyZSkge1xuICBvdXJSZXF1aXJlID0gcmVxdWlyZTtcbn1cblxuY29uc3QgSVJSRUxFVkFOVF9QQVRIUyA9IFtiYXJlUGF0aC5wbnBtRGlyLCAnX192aXRlLSddO1xuY29uc3QgVU5TVVBQT1JURURfRElSRUNUT1JJRVMgPSBuZXcgU2V0KFsndGVzdHMnXSk7XG5cbmNvbnN0IENXRCA9IHByb2Nlc3MuY3dkKCk7XG5cbi8qKlxuICogUmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBmaWxlUGF0aCBmb3JtYXQgaXMsXG4gKiB0aGlzIHdpbGwgdHJ5IHRvIHJldHVybiB0aGUgY29ycmVjdCBwb3N0Zml4LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hGcm9tKGZpbGVQYXRoKSB7XG4gIGlmIChwYXRoLmlzQWJzb2x1dGUoZmlsZVBhdGgpKSB7XG4gICAgcmV0dXJuIGhhc2hGcm9tQWJzb2x1dGVQYXRoKGZpbGVQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBoYXNoRnJvbU1vZHVsZVBhdGgoZmlsZVBhdGgpO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjc3NIYXNBc3NvY2lhdGVkQ29tcG9uZW50KGNzc1BhdGgpIHtcbiAgcmV0dXJuIGNzc0hhc1N0YW5kYXJkRmlsZShjc3NQYXRoKSB8fCBjc3NIYXNQb2RzRmlsZShjc3NQYXRoKTtcbn1cblxuZnVuY3Rpb24gY3NzSGFzU3RhbmRhcmRGaWxlKGlkKSB7XG4gIC8qKlxuICAgKiBOb3JtYWxseSB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGEgSlMgcGF0aCBoZXJlLCBidXQgd2hlbiB1c2luZ1xuICAgKiBlbWJyb2lkZXJAMywgd2UgaGF2ZSBhIFwicmV3cml0dGVuIGFwcFwiLCB3aGljaCBoYXMgYWxsIG91ciBzb3VyY2VcbiAgICogcHJlcHJvY2Vzc2VkIGEgYml0IGJlZm9yZSBzY29wZWQtY3NzIHRyYW5zZm9ybWF0aW9ucy5cbiAgICpcbiAgICogKEluIFZpdGUsIHdlIG9wZXJhdGUgbW9yZSBkaXJlY3RseSB3aXRoIHRoZSBzb3VyY2UpXG4gICAqL1xuICBmb3IgKGxldCBleHQgb2YgQ09NUE9ORU5UX0VYVEVOU0lPTlMpIHtcbiAgICBsZXQgY2FuZGlkYXRlUGF0aCA9IGlkLnJlcGxhY2UoL1xcLmNzcyQvLCBleHQpO1xuXG4gICAgaWYgKGV4aXN0c1N5bmMoY2FuZGlkYXRlUGF0aCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY3NzSGFzUG9kc0ZpbGUoaWQpIHtcbiAgaWYgKCFpZC5lbmRzV2l0aCgnc3R5bGVzLmNzcycpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGx5IHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgYSBKUyBwYXRoIGhlcmUsIGJ1dCB3aGVuIHVzaW5nXG4gICAqIGVtYnJvaWRlckAzLCB3ZSBoYXZlIGEgXCJyZXdyaXR0ZW4gYXBwXCIsIHdoaWNoIGhhcyBhbGwgb3VyIHNvdXJjZVxuICAgKiBwcmVwcm9jZXNzZWQgYSBiaXQgYmVmb3JlIHNjb3BlZC1jc3MgdHJhbnNmb3JtYXRpb25zLlxuICAgKlxuICAgKiAoSW4gVml0ZSwgd2Ugb3BlcmF0ZSBtb3JlIGRpcmVjdGx5IHdpdGggdGhlIHNvdXJjZSlcbiAgICovXG4gIGZvciAobGV0IGV4dCBvZiBDT01QT05FTlRfRVhURU5TSU9OUykge1xuICAgIGxldCBjYW5kaWRhdGVQYXRoID0gaWQucmVwbGFjZSgvc3R5bGVzXFwuY3NzJC8sIGB0ZW1wbGF0ZSR7ZXh0fWApO1xuXG4gICAgaWYgKGV4aXN0c1N5bmMoY2FuZGlkYXRlUGF0aCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBCYXNlZCBvbiBlbWJlcidzIGNvbXBvbmVudCBsb2NhdGlvbiBjb252ZW50aW9ucyxcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCBwcm92aWRlIGEgcGF0aCBmb3Igd2hlcmUgd2VcbiAqIGV4cGVjdCB0aGUgQ1NTIHRvIGxpdmUuXG4gKlxuICogRm9yIGNvLWxvY2F0ZWQgc3RydWN0dXJlOlxuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50Lmhic1xuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50LmNzc1xuICpcbiAqIEZvciBuZXN0ZWQgY28tbG9jYXRlZCBzdHJ1Y3R1cmVcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC9mb28uaGJzXG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQvZm9vLmNzc1xuICpcbiAqIEZvciBQb2RzIHJvdXRlcyBzdHJ1Y3R1cmVcbiAqICAgLSByb3V0ZXMvbXktcm91dGUvdGVtcGxhdGUue2hicyxqc31cbiAqICAgLSByb3V0ZXMvbXktcm91dGUvc3R5bGVzLmNzc1xuICpcbiAqIERlbGliZXJhdGVseSBub3Qgc3VwcG9ydGVkOlxuICogICAtIGNvbXBvbmVudHMgdy8gcG9kcyAtLSB0aGlzIGlzIGRlcHJlY2F0ZWQgaW4gNS4xMFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZSAtIHRoZSBoYnMsIGpzLCBnanMsIGd0cyBvciB3aGF0ZXZlciBjby1sb2NhdGVkIHBhdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIGV4cGVjdGVkIGNzcyBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjc3NQYXRoRm9yKGZpbGVOYW1lKSB7XG4gIGxldCB3aXRob3V0RXh0ID0gd2l0aG91dEV4dGVuc2lvbihmaWxlTmFtZSk7XG4gIGxldCBjc3NQYXRoID0gd2l0aG91dEV4dCArICcuY3NzJztcblxuICBpZiAoaXNQb2QoZmlsZU5hbWUpKSB7XG4gICAgY3NzUGF0aCA9IGZpbGVOYW1lXG4gICAgICAucmVwbGFjZSgvdGVtcGxhdGVcXC5qcyQvLCAnc3R5bGVzLmNzcycpXG4gICAgICAucmVwbGFjZSgvdGVtcGxhdGVcXC5nanMvLCAnc3R5bGVzLmNzcycpXG4gICAgICAucmVwbGFjZSgvdGVtcGxhdGVcXC5ndHMvLCAnc3R5bGVzLmNzcycpXG4gICAgICAucmVwbGFjZSgvdGVtcGxhdGVcXC5oYnMvLCAnc3R5bGVzLmNzcycpO1xuICB9XG5cbiAgcmV0dXJuIGNzc1BhdGg7XG59XG5cbi8qKlxuICogTm90ZSB0aGF0IGNvbXBvbmVudHMgaW4gdGhlIFwicG9kc1wiIGNvbnZlbnRpb24gd2lsbFxuICogbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb2RUZW1wbGF0ZShmaWxlUGF0aCkge1xuICBpZiAoZmlsZVBhdGguaW5jbHVkZXMobGVhZGluZ1NsYXNoUGF0aC5jb21wb25lbnRzRGlyKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgZmlsZVBhdGguZW5kc1dpdGgoJ3RlbXBsYXRlLmpzJykgfHxcbiAgICBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuaGJzJykgfHxcbiAgICBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuZ2pzJykgfHxcbiAgICBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuZ3RzJylcbiAgKTtcbn1cblxuLyoqXG4gKiBOb3RlIHRoYXQgY29tcG9uZW50cyBpbiB0aGUgXCJwb2RzXCIgY29udmVudGlvbiB3aWxsXG4gKiBuZXZlciBiZSBzdXBwb3J0ZWQuXG4gKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBlbmRzIHdpdGhcbiAqIC0gdGVtcGxhdGUuanNcbiAqIC0gdGVtcGxhdGUuaGJzXG4gKiAtIHN0eWxlcy5jc3NcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9kKGZpbGVQYXRoKSB7XG4gIGlmIChmaWxlUGF0aC5pbmNsdWRlcyhsZWFkaW5nU2xhc2hQYXRoLmNvbXBvbmVudHNEaXIpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzUG9kVGVtcGxhdGUoZmlsZVBhdGgpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmlsZVBhdGguZW5kc1dpdGgoJ3N0eWxlcy5jc3MnKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKiBAcmV0dXJucyB0aGUgc2FtZSBwYXRoLCBidXQgd2l0aG91dCB0aGUgZXh0ZW5zaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0RXh0ZW5zaW9uKGZpbGVQYXRoKSB7XG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKGZpbGVQYXRoKTtcblxuICByZXR1cm4gcGF0aC5qb2luKHBhcnNlZC5kaXIsIHBhcnNlZC5uYW1lKTtcbn1cblxuLyoqXG4gKiBFeGFtcGxlcyBmb3IgZmlsZU5hbWVcbiAqIC0gYWJzb2x1dGUgb24tZGlzayBwYXRoXG4gKiAtIGluIHdlYnBhY2tcbiAqICAgLSBVUkwtYWJzb2x1dGUgcGF0aCwgc3RhcnRpbmcgd2l0aCAvXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG4gKiBAcGFyYW0ge3sgYWRkaXRpb25hbFJvb3RzPzogc3RyaW5nW107IGN3ZDogc3RyaW5nIH19IG9wdGlvbnNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbGV2YW50RmlsZShmaWxlTmFtZSwgeyBhZGRpdGlvbmFsUm9vdHMsIGN3ZCB9KSB7XG4gIC8vIEZha2UgZmlsZSBoYW5kbGVkIGJ5IHRlc3RlbSBzZXJ2ZXIgd2hlbiBpdCBydW5zXG4gIGlmIChmaWxlTmFtZS5zdGFydHNXaXRoKGxlYWRpbmdTbGFzaFBhdGgudGVzdGVtKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBQcml2YXRlIFZpcnR1YWwgTW9kdWxlc1xuICBpZiAoZmlsZU5hbWUuc3RhcnRzV2l0aCgnXFwwJykpIHJldHVybiBmYWxzZTtcblxuICAvLyBUaGVzZSBhcmUgbm90IHZhbGlkIHVzZXJsYW5kIG5hbWVzIChvciBhcmUgZnJvbSBsaWJyYXJpZXMpXG4gIGlmIChwYXRoLmlzQWJzb2x1dGUoZmlsZU5hbWUpID09PSBmYWxzZSkge1xuICAgIGlmIChmaWxlTmFtZS5tYXRjaCgvXlthLXpBLVpdLykpIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEV4dGVybmFsIHRvIHVzXG4gIGlmIChmaWxlTmFtZS5zdGFydHNXaXRoKGxlYWRpbmdTbGFzaFBhdGguYXRFbWJyb2lkZXIpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChJUlJFTEVWQU5UX1BBVEhTLnNvbWUoKGkpID0+IGZpbGVOYW1lLmluY2x1ZGVzKGkpKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGxldCB3b3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChmaWxlTmFtZSk7XG5cbiAgYXNzZXJ0KGN3ZCwgYGN3ZCB3YXMgbm90IHBhc3NlZCB0byBpc1JlbGV2YW50RmlsZWApO1xuXG4gIGxldCBvdXJXb3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChjd2QpO1xuXG4gIGlmICh3b3Jrc3BhY2UgIT09IG91cldvcmtzcGFjZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBsb2NhbCA9IGZpbGVOYW1lLnJlcGxhY2Uod29ya3NwYWNlLCAnJyk7XG4gIGxldCBbLCAuLi5wYXJ0c10gPSBsb2NhbC5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKEJvb2xlYW4pO1xuXG4gIGlmIChVTlNVUFBPUlRFRF9ESVJFQ1RPUklFUy5oYXMocGFydHNbMF0pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vc3RseSBwb2RzIHN1cHBvcnQuXG4gICAqIGZvbGtzIG5lZWQgdG8gb3B0IGluIHRvIHBvZHMgKHJvdXRlcyksIGJlY2F1c2UgZXZlcnkgcG9kcyBhcHAgY2FuIGJlIGNvbmZpZ3VyZWQgZGlmZmVyZW50bHlcbiAgICovXG4gIGxldCByb290cyA9IFtcbiAgICBsZWFkaW5nU2xhc2hQYXRoLmNvbXBvbmVudHNEaXIsXG4gICAgbGVhZGluZ1NsYXNoUGF0aC50ZW1wbGF0ZXNEaXIsXG4gICAgbGVhZGluZ1NsYXNoUGF0aC5yb3V0ZXNEaXIsXG4gICAgLi4uKGFkZGl0aW9uYWxSb290cyB8fCBbXSksXG4gIF07XG5cbiAgaWYgKCFyb290cy5zb21lKChyb290KSA9PiBmaWxlTmFtZS5pbmNsdWRlcyhyb290KSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VTY29wZWRQYXRoKSB7XG4gIC8qKlxuICAgKiAqQnkgY29udmVudGlvbiosIGBzcmNgIGlzIG9taXR0ZWQgZnJvbSBjb21wb25lbnQgcGF0aHMuXG4gICAqIFdlIGNhbiByZWZsZWN0IHRoZSBzYW1lIGJlaGF2aW9yIGJ5IHJlcGxhY2luZyBzcmMvXG4gICAqIHdpdGggYW4gZW1wdHkgc3RyaW5nLlxuICAgKlxuICAgKiBDU1MgaXNuJ3QgZW1pdHRlZCBhcyBhIGNvLWxvY2F0ZWQgbW9kdWxlLCBidXRcbiAgICogdG8ga2VlcCBjb252ZW50aW9ucyBjb25zaXN0ZW50IGFjcm9zcyBsYW5ndWFnZXMsXG4gICAqIHdlIGNhbiBwcmV0ZW5kIGl0IGlzLlxuICAgKlxuICAgKiBBbnkgY3VzdG9taXphdGlvbiBiZXlvbmQgcmVtb3ZpbmcgYHNyY2AgYW5kIGBhcHBgIGlzIHBvdGVudGlhbGx5IGNvbmZ1c2luZy5cbiAgICogSWYgd2UgbmVlZCBmdXJ0aGVyIGN1c3RvbWl6YXRpb25zLCB3ZSdsbCB3YW50IHRvIG1hdGNoIG9uIGBleHBvcnRzYCBpbiB0aGVcbiAgICogY29ycmVzcG9uZGluZyBwYWNrYWdlLmpzb25cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlU2NvcGVkUGF0aC5yZXBsYWNlKFxuICAgIG5ldyBSZWdFeHAoYF4ke1JlZ0V4cC5lc2NhcGUobGVhZGluZ1NsYXNoUGF0aC5zcmMpfWApLFxuICAgIHBhdGguc2VwLFxuICApO1xuXG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgaWYgKGlzUG9kKHBhY2thZ2VSZWxhdGl2ZSkpIHtcbiAgICAvKipcbiAgICAgKiBGb3IgcG9kcywgd2UgY2hvcCBvZmYgdGhlIHdob2xlIGZpbGUsIGFuZCB1c2UgdGhlIGRpciBuYW1lIGFzIHRoZSBcIm1vZHVsZVBhdGhcIlxuICAgICAqL1xuICAgIHJldHVybiBwYXJzZWQuZGlyO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGFuIGV4dGVuc2lvbiBpcyBwYXNzZWQsIHJlbW92ZSBpdC5cbiAgICogV2hlbiB1c2luZyBwYWNrYWdlcnMsIGZvbGtzIGFyZSB1c2VkIHRvIG5vdCBoYXZpbmcgdG8gc3BlY2lmeSBleHRlbnNpb25zIGZvciBmaWxlcy5cbiAgICogU2luY2Ugd2UgZG9uJ3QgZXZlbiBlbWl0IGNzcyBmaWxlcyBjby1sb2NhdGVkIHRvIGVhY2ggbW9kdWxlLFxuICAgKiB0aGlzIGhlbHBzIHVzIG5vdCBjb252ZXkgYSBsaWUgdGhhdCBhIGZpbGUgbWF5IGV4aXN0IGluIGF0IHJ1bnRpbWUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlIGA8bW9kdWxlLW5hbWU+L2NvbXBvbmVudHMvYnV0dG9uYC5cbiAgICogSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgZXh0ZW5zaW9uIGlzLCBiZWNhdXNlIHlvdSBjYW4gb25seSBoYXZlIG9uZSBjc3MgZmlsZVxuICAgKiBmb3IgdGhlIGJ1dHRvbiBtb2R1bGUgYW55d2F5LlxuICAgKi9cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYXRoLmpvaW4ocGFyc2VkLmRpciwgcGFyc2VkLm5hbWUpO1xuXG4gIHJldHVybiBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoO1xufVxuXG4vKipcbiAqIHJldHVybnMgdGhlIGFwcC1tb2R1bGUgcGF0aCBvZiB0aGUgc291cmNlIGZpbGVcbiAqXG4gKiBUaGlzIGFzc3VtZXMgbm9ybWFsIGVtYmVyIGFwcCBjb252ZW50aW9uc1xuICpcbiAqIHdoaWNoIGlzIGA8cGFja2FnZS5qc29uI25hbWU+L3BhdGgtdG8tZmlsZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcFBhdGgoc291cmNlUGF0aCkge1xuICBsZXQgd29ya3NwYWNlUGF0aCA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuICBsZXQgbmFtZSA9IG1vZHVsZU5hbWUoc291cmNlUGF0aCk7XG5cbiAgLyoqXG4gICAqICBVbmRlciBlbWJyb2lkZXIgYnVpbGRzLCB0aGUgc3BlYy1jb21wbGlhbnQgdmVyc2lvbiBvZiB0aGUgYXBwXG4gICAqIGhhcyBhbGwgdGhlIGZpbGVzIHVuZGVyIGEgZm9sZGVyIHdoaWNoIHJlcHJlc2VudHMgdGhlIHBhY2thZ2UgbmFtZSxcbiAgICogcmF0aGVyIHRoYW4gXCJhcHBcIi5cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBzb3VyY2VQYXRoLnJlcGxhY2Uod29ya3NwYWNlUGF0aCwgJycpO1xuXG4gIC8qKlxuICAgKiBCdXQgd2UgYWxzbyBkb24ndCB3YW50ICdhcHAnIC0tIHdoaWNoIGlzIHByZXNlbnQgaW4gdGhlIHYxIGFkZG9uIHBpcGVsaW5lXG4gICAqL1xuICBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlUmVsYXRpdmUucmVwbGFjZShsZWFkaW5nU2xhc2hQYXRoLmFwcCwgcGF0aC5zZXApO1xuXG4gIC8vIEFueSBvZiB0aGUgYWJvdmUgcmVscGFjZW1lbnRzIGNvdWxkIGFjY2lkZW50YWxseSBnaXZlIHVzIGFuIGV4dHJhIC8gKGRlcGVuZGluZyBvbiBvdXIgYnVpbGQgZW52aXJvbm1lbnQpXG4gIHBhY2thZ2VSZWxhdGl2ZSA9IHBhdGgubm9ybWFsaXplKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIHJldHVybiBgJHtuYW1lfSR7bG9jYWxQYWNrYWdlclN0eWxlUGF0aH1gO1xufVxuXG4vKipcbiAqIFRvIGF2b2lkIGhpdHRpbmcgdGhlIGZpbGVzeXNldG0sIHdlJ2xsIHN0b3JlIGFsbCBmb3VuZFxuICogcHJvamVjdCBwYXRocyBiZXJlLCBzbyB3ZSBjYW4sIGluIG1lbW9yeSxcbiAqIGdldCB0aGUgZm9sZGVyIHdoZXJlIGEgcGFja2FnZS5qc29uIGV4aXN0cywgcmF0aGVyIHRoYW5cbiAqIGhpdCB0aGUgZmlsZSBzeXN0ZW0gZXZlcnkgdGltZS5cbiAqL1xuY29uc3QgU0VFTiA9IG5ldyBTZXQoKTtcblxuZnVuY3Rpb24gZ2V0U2Vlbihzb3VyY2VQYXRoKSB7XG4gIGlmIChTRUVOLmhhcyhzb3VyY2VQYXRoKSkgcmV0dXJuIHNvdXJjZVBhdGg7XG5cbiAgbGV0IHBhcnRzID0gc291cmNlUGF0aC5zcGxpdChwYXRoLnNlcCk7XG5cbiAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPiAxOyBpLS0pIHtcbiAgICBsZXQgdG9DaGVjayA9IHBhcnRzLnNsaWNlKDAsIGkpLmpvaW4ocGF0aC5zZXApO1xuXG4gICAgbGV0IHNlZW4gPSBTRUVOLmhhcyh0b0NoZWNrKTtcblxuICAgIGlmIChzZWVuKSB7XG4gICAgICByZXR1cm4gdG9DaGVjaztcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgsIG9wdGlvbnMpIHtcbiAgbGV0IGN3ZCA9IG9wdGlvbnM/LmN3ZCA/PyBDV0Q7XG5cbiAgaWYgKHNvdXJjZVBhdGguZW5kc1dpdGgocGF0aC5zZXApKSB7XG4gICAgc291cmNlUGF0aCA9IHNvdXJjZVBhdGgucmVwbGFjZShcbiAgICAgIG5ldyBSZWdFeHAoYCR7UmVnRXhwLmVzY2FwZShwYXRoLnNlcCl9JGApLFxuICAgICAgJycsXG4gICAgKTtcbiAgfVxuXG4gIGxldCBzZWVuID0gZ2V0U2Vlbihzb3VyY2VQYXRoKTtcblxuICBpZiAoc2Vlbikge1xuICAgIHJldHVybiBzZWVuO1xuICB9XG5cbiAgbGV0IGNhbmRpZGF0ZVBhdGggPSBwYXRoLmpvaW4oc291cmNlUGF0aCwgJ3BhY2thZ2UuanNvbicpO1xuXG4gIGNvbnN0IGlzV29ya3NwYWNlID0gZnNTeW5jLmV4aXN0c1N5bmMoY2FuZGlkYXRlUGF0aCk7XG5cbiAgaWYgKGlzV29ya3NwYWNlKSB7XG4gICAgcmV0dXJuIHNvdXJjZVBhdGg7XG4gIH1cblxuICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBmaW5kUGFja2FnZUpzb25VcChzb3VyY2VQYXRoLCB7IGN3ZCB9KTtcblxuICBpZiAoIXBhY2thZ2VKc29uUGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGRldGVybWluZSBwcm9qZWN0IGZvciAke3NvdXJjZVBhdGh9YCk7XG4gIH1cblxuICBjb25zdCB3b3Jrc3BhY2VQYXRoID0gcGF0aC5kaXJuYW1lKHBhY2thZ2VKc29uUGF0aCk7XG5cbiAgU0VFTi5hZGQod29ya3NwYWNlUGF0aCk7XG5cbiAgcmV0dXJuIHdvcmtzcGFjZVBhdGg7XG59XG5cbmZ1bmN0aW9uIGZpbmRQYWNrYWdlSnNvblVwKHN0YXJ0UGF0aCwgb3B0aW9ucykge1xuICBsZXQgY3dkID0gb3B0aW9ucz8uY3dkID8/IENXRDtcbiAgbGV0IHBhcnRzID0gc3RhcnRQYXRoLnNwbGl0KHBhdGguc2VwKTtcblxuICBmb3IgKGxldCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+IDE7IGktLSkge1xuICAgIGxldCB0b0NoZWNrID0gcGFydHMuc2xpY2UoMCwgaSkuam9pbihwYXRoLnNlcCk7XG5cbiAgICBsZXQgcGFja2FnZUpzb24gPSBwYXRoLmpvaW4odG9DaGVjaywgJ3BhY2thZ2UuanNvbicpO1xuICAgIGxldCBleGlzdHMgPSBmc1N5bmMuZXhpc3RzU3luYyhwYWNrYWdlSnNvbik7XG5cbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICByZXR1cm4gcGFja2FnZUpzb247XG4gICAgfVxuXG4gICAgLy8gRG9uJ3QgdHJhdmVyc2UgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3Qgb2YgdGhlIGZpbGUgc3lzdGVtLlxuICAgIGlmICh0b0NoZWNrID09PSBjd2QpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBNQU5JRkVTVF9DQUNIRSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiB0aGUgcGFja2FnZS5qc29uI25hbWUsIG9yIGNvbmZpZy9lbnZpcm9ubWVudCNtb3VkbGVQcmVmaXggKGlmIHYxIGFwcClcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kdWxlTmFtZShzb3VyY2VQYXRoKSB7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuICBjb25zdCBtYW5pZmVzdCA9IGdldE1hbmlmZXN0KHdvcmtzcGFjZSk7XG5cbiAgcmV0dXJuIG1hbmlmZXN0Lm5hbWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHdvcmtzcGFjZVxuICovXG5mdW5jdGlvbiBnZXRNYW5pZmVzdCh3b3Jrc3BhY2UpIHtcbiAgbGV0IGV4aXN0aW5nID0gTUFOSUZFU1RfQ0FDSEUuZ2V0KHdvcmtzcGFjZSk7XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG5cbiAgbGV0IGJ1ZmZlciA9IGZzU3luYy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHdvcmtzcGFjZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgbGV0IGNvbnRlbnQgPSBidWZmZXIudG9TdHJpbmcoKTtcbiAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gIE1BTklGRVNUX0NBQ0hFLnNldCh3b3Jrc3BhY2UsIGpzb24pO1xuXG4gIHJldHVybiBqc29uO1xufVxuIiwiLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvc3RmaXhcbiAqIEBwYXJhbSB7U2V0PHN0cmluZz59IFtjbGFzc2VzSW5Dc3NdXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lQ2xhc3MoY2xhc3NOYW1lLCBwb3N0Zml4LCBjbGFzc2VzSW5Dc3MpIHtcbiAgY29uc3QgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgvXFxzKy8pO1xuICBjb25zdCByZW5hbWVkQ2xhc3NlcyA9IGNsYXNzZXNcbiAgICAuZmlsdGVyKChjKSA9PiBjKVxuICAgIC5tYXAoKGMpID0+IGMudHJpbSgpKVxuICAgIC5tYXAoKGMpID0+IHtcbiAgICAgIGlmICghY2xhc3Nlc0luQ3NzIHx8IGNsYXNzZXNJbkNzcy5oYXMoYykpIHtcbiAgICAgICAgaWYgKGMuZW5kc1dpdGgocG9zdGZpeCkpIHJldHVybiBjO1xuXG4gICAgICAgIHJldHVybiBjICsgJ18nICsgcG9zdGZpeDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGM7XG4gICAgfSlcbiAgICAuam9pbignICcpO1xuXG4gIGNvbnN0IHJlbmFtZWRXaXRoUHJlc2VydmVkU3BhY2VzID0gY2xhc3NOYW1lLnJlcGxhY2UoXG4gICAgY2xhc3NOYW1lLnRyaW1TdGFydCgpLnRyaW1FbmQoKSxcbiAgICByZW5hbWVkQ2xhc3NlcyxcbiAgKTtcblxuICByZXR1cm4gcmVuYW1lZFdpdGhQcmVzZXJ2ZWRTcGFjZXM7XG59XG4iLCJpbXBvcnQge1xuICBhcHBQYXRoLFxuICBoYXNoRnJvbU1vZHVsZVBhdGgsXG4gIGlzUmVsZXZhbnRGaWxlLFxufSBmcm9tICcuLi9saWIvcGF0aC91dGlscy5qcyc7XG5pbXBvcnQgeyByZW5hbWVDbGFzcyB9IGZyb20gJy4uL2xpYi9yZW5hbWVDbGFzcy5qcyc7XG5cbmZ1bmN0aW9uIF9pc1JlbGV2YW50RmlsZShzdGF0ZSwgY3dkKSB7XG4gIGxldCBmaWxlTmFtZSA9IHN0YXRlLmZpbGUub3B0cy5maWxlbmFtZTtcbiAgbGV0IGFkZGl0aW9uYWxSb290cyA9IHN0YXRlLm9wdHM/LmFkZGl0aW9uYWxSb290cztcblxuICByZXR1cm4gaXNSZWxldmFudEZpbGUoZmlsZU5hbWUsIHtcbiAgICBhZGRpdGlvbmFsUm9vdHMsXG4gICAgY3dkLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gZW52IC0gYmFiZWwgcGx1Z2luIGVudiwgZW52LnR5cGVzIGlzIG1vc3QgY29tbW9ubHkgdXNlZCAoZXNwIGluIFRTKVxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSB0aGUgb3B0aW9ucyBmb3Igc2NvcGVkLWNzcyAtLSB0aGlzIGlzIGFsc28gYXZhaWxhYmxlIGluIGVhY2ggdmlzaXRvcidzIHN0YXRlLm9wdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB3b3JraW5nRGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBjb25zdCBzY29wZWRDU1MgPSAoY29uZmlnKSA9PiAoZW52LCBvcHRpb25zLCB3b3JraW5nRGlyZWN0b3J5KSA9PiB7XG4gIC8vIG5vdCByZWFsbHkgYSBkZWVwIG1lcmdlLCBidXQgdGhlIGlkZWEgaXMgdG8gdXNlIG9uZSBvciB0aGUgb3RoZXIgYW5kIG5vdCBtaXggdGhlIGNvbmZpZ3NcbiAgb3B0aW9ucyA9IHsgLi4uY29uZmlnLCAuLi5vcHRpb25zIH07XG5cbiAgLyoqXG4gICAqIFRoaXMgYmFiZWwgcGx1Z2luIGRvZXMgdHdvIHRoaW5nczpcbiAgICogLSByZW1vdmVzIHRoZSBpbXBvcnQgb2Ygc2NvcGVkQ2xhc3MsIGlmIGl0IGV4aXN0c1xuICAgKiAgIC0gaWYgc2NvcGVkQ2xhc3Mgd2FzIGltcG9ydGVkLCBpdCBpcyByZW1vdmVkIGZyb20gYW55IGNvbXBvbmVudCdzIFwic2NvcGUgYmFnXCJcbiAgICogICAgICh0aGUgc2NvcGUgYmFnIGJlaW5nIGEgbG93LWxldmVsIG9iamVjdCB1c2VkIGZvciBwYXNzaW5nIHdoYXQgaXMgXCJpbiBzY29wZVwiIGZvciBhIGNvbXBvbmVudClcbiAgICovXG4gIHJldHVybiB7XG4gICAgdmlzaXRvcjoge1xuICAgICAgUHJvZ3JhbToge1xuICAgICAgICBlbnRlcihwYXRoLCBzdGF0ZSkge1xuICAgICAgICAgIGlmICghX2lzUmVsZXZhbnRGaWxlKHN0YXRlLCB3b3JraW5nRGlyZWN0b3J5KSkge1xuICAgICAgICAgICAgc3RhdGUuY2FuU2tpcCA9IHRydWU7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgbW9kdWxlUGF0aCA9IGFwcFBhdGgoc3RhdGUuZmlsZW5hbWUpO1xuXG4gICAgICAgICAgc3RhdGUucG9zdGZpeCA9IGhhc2hGcm9tTW9kdWxlUGF0aChtb2R1bGVQYXRoKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBJbXBvcnREZWNsYXJhdGlvbihwYXRoLCBzdGF0ZSkge1xuICAgICAgICBpZiAoc3RhdGUuY2FuU2tpcCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXRoLm5vZGUuc291cmNlLnZhbHVlID09PSAnZW1iZXItc2NvcGVkLWNzcycpIHtcbiAgICAgICAgICBsZXQgc3BlY2lmaWVyID0gcGF0aC5ub2RlLnNwZWNpZmllcnMuZmluZChcbiAgICAgICAgICAgICh4KSA9PiB4LmltcG9ydGVkLm5hbWUgPT09ICdzY29wZWRDbGFzcycsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzcGVjaWZpZXIpIHtcbiAgICAgICAgICAgIHN0YXRlLmZpbGUub3B0cy5pbXBvcnRlZFNjb3BlZENsYXNzID0gc3BlY2lmaWVyLmxvY2FsLm5hbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNwZWNpZmllci5sb2NhbC5uYW1lICE9PSAnc2NvcGVkQ2xhc3MnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBUaGUgc2NvcGVkQ2xhc3MgaW1wb3J0IGlzIGEgcHN1ZWRvLWhlbHBlciwgYW5kIG1heSBub3QgYmUgcmVuYW1lZCBhcyBpdCBpcyByZW1vdmVkIGF0IGJ1aWxkIHRpbWUuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGF0aC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogUmVuYW1lIHVzYWdlcyBpbiBKUy9UUy9HSlMvR1RTXG4gICAgICAgKi9cbiAgICAgIENhbGxFeHByZXNzaW9uKHBhdGgsIHN0YXRlKSB7XG4gICAgICAgIGlmIChzdGF0ZS5jYW5Ta2lwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhdGgubm9kZS5jYWxsZWUudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgcGF0aC5ub2RlLmNhbGxlZS5uYW1lID09PSBzdGF0ZS5maWxlLm9wdHM/LmltcG9ydGVkU2NvcGVkQ2xhc3NcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGF0aC5ub2RlLmFyZ3VtZW50cy5sZW5ndGggIT09IDEgfHxcbiAgICAgICAgICAgIHBhdGgubm9kZS5hcmd1bWVudHNbMF0udHlwZSAhPT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBUaGUgc2NvcGVkQ2xhc3MgaGVscGVyIG9ubHkgYWNjZXB0cyBhIHNpbmdsZSwgbm9uLWR5bmFtaWMsIHN0cmluZyBsaXRlcmFsIGFyZ3VtZW50LmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gcGF0aC5ub2RlLmFyZ3VtZW50c1swXS52YWx1ZTtcbiAgICAgICAgICBjb25zdCByZW5hbWVkID0gcmVuYW1lQ2xhc3MoXG4gICAgICAgICAgICBvcmlnaW5hbCxcbiAgICAgICAgICAgIHN0YXRlLnBvc3RmaXgsXG4gICAgICAgICAgICBuZXcgU2V0KFtvcmlnaW5hbF0pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRTdHJpbmcgPSBlbnYudHlwZXMuc3RyaW5nTGl0ZXJhbChyZW5hbWVkKTtcblxuICAgICAgICAgIHBhdGgucmVwbGFjZVdpdGgodHJhbnNmb3JtZWRTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBPbmx5IGluIHN0cmljdCBtb2RlLCBkbyB3ZSBjYXJlIGFib3V0IHJlbW9uaW5nIHRoZSBzY29wZSBiYWcgcmVmZXJlbmNlXG4gICAgICAgKi9cbiAgICAgIE9iamVjdFByb3BlcnR5KHBhdGgsIHN0YXRlKSB7XG4gICAgICAgIGlmICghc3RhdGUuZmlsZS5vcHRzPy5pbXBvcnRlZFNjb3BlZENsYXNzKSByZXR1cm47XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhdGgubm9kZS52YWx1ZS50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICBwYXRoLm5vZGUudmFsdWUubmFtZSA9PT0gc3RhdGUuZmlsZS5vcHRzPy5pbXBvcnRlZFNjb3BlZENsYXNzXG4gICAgICAgICkge1xuICAgICAgICAgIHBhdGgucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn07XG4iLCJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgcG9zdGNzcyBmcm9tICdwb3N0Y3NzJztcbmltcG9ydCBzY3NzU3ludGF4IGZyb20gJ3Bvc3Rjc3Mtc2Nzcyc7XG5pbXBvcnQgcGFyc2VyIGZyb20gJ3Bvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyJztcblxuaW1wb3J0IHsgbWQ1IH0gZnJvbSAnLi4vcGF0aC9tZDUuanMnO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjc3NcbiAqIEByZXR1cm4ge3N0cmluZ30gaGFzaGVkIGRvd24gdmVyc2lvbiBvZiB0aGUgQ1NTIGZvciBkaXNhbWJpZ3VhdGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaChjc3MpIHtcbiAgcmV0dXJuIGBjc3MtJHttZDUoY3NzKX1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbnNpZGVHbG9iYWwobm9kZSwgZnVuYykge1xuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudDtcblxuICBpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuICBpZiAocGFyZW50LnR5cGUgPT09ICdwc2V1ZG8nICYmIHBhcmVudC52YWx1ZSA9PT0gJzpnbG9iYWwnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVHbG9iYWwocGFyZW50LCBmdW5jKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY3NzUGF0aCBwYXRoIHRvIGEgQ1NTIGZpbGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENTU0luZm8oY3NzUGF0aCkge1xuICBpZiAoIWV4aXN0c1N5bmMoY3NzUGF0aCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBjc3MgPSByZWFkRmlsZVN5bmMoY3NzUGF0aCwgJ3V0ZjgnKTtcblxuICByZXR1cm4gZ2V0Q1NTQ29udGVudEluZm8oY3NzKTtcbn1cblxuLyoqXG4gKiBXZSB1c2UgdGhpcyBmdW5jdGlvbiB0byBjaGVjayBlYWNoIGNsYXNzIHVzZWQgaW4gdGhlIHRlbXBsYXRlXG4gKiB0byBzZWUgaWYgd2UgbmVlZCB0byBsZWF2ZSBpdCBhbG9uZSBvciB0cmFuc2Zvcm0gaXRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY3NzIHRoZSBDU1MncyBjb250ZW50c1xuICogQHBhcmFtIHtzdHJpbmd9IFtsYW5nXSBvcHRpb25hbCBsYW5ndWFnZSBoaW50IChlLmcuICdzY3NzJywgJ3Nhc3MnLCAnbGVzcycpXG4gKiBAcmV0dXJuIHt7IGNsYXNzZXM6IFNldDxzdHJpbmc+LCB0YWdzOiBTZXQ8c3RyaW5nPiwgY3NzOiBzdHJpbmcsIGlkOiBzdHJpbmcgfX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENTU0NvbnRlbnRJbmZvKGNzcywgbGFuZykge1xuICBjb25zdCBjbGFzc2VzID0gbmV3IFNldCgpO1xuICBjb25zdCB0YWdzID0gbmV3IFNldCgpO1xuXG4gIGNvbnN0IHBhcnNlT3B0aW9ucyA9XG4gICAgbGFuZyA9PT0gJ3Njc3MnIHx8IGxhbmcgPT09ICdzYXNzJyA/IHsgc3ludGF4OiBzY3NzU3ludGF4IH0gOiB7fTtcblxuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcywgcGFyc2VPcHRpb25zKTtcblxuICBjb25zdCBpc1Njc3MgPSBsYW5nID09PSAnc2NzcycgfHwgbGFuZyA9PT0gJ3Nhc3MnO1xuXG4gIGFzdC53YWxrKChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gJ3J1bGUnKSB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IGlzU2NzcyA/IHJlc29sdmVOZXN0ZWRTYXNzU2VsZWN0b3Iobm9kZSkgOiBub2RlLnNlbGVjdG9yO1xuXG4gICAgICBnZXRDbGFzc2VzQW5kVGFncyhzZWxlY3RvciwgY2xhc3NlcywgdGFncyk7XG4gICAgfVxuICB9KTtcblxuICBsZXQgaWQgPSBoYXNoKGNzcyk7XG5cbiAgcmV0dXJuIHsgY2xhc3NlcywgdGFncywgY3NzLCBpZCB9O1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgbmVzdGVkIFNDU1Mgc2VsZWN0b3IgYnkgc3Vic3RpdHV0aW5nIGAmYCB3aXRoIHRoZSBmdWxseS1yZXNvbHZlZFxuICogcGFyZW50IHNlbGVjdG9yLCByZWN1cnNpdmVseS4gVGhpcyBjb252ZXJ0cyBlLmcuIGAmLS1tb2RpZmllcmAgKGNoaWxkIG9mXG4gKiBgLmJsb2NrYCkgaW50byBgLmJsb2NrLS1tb2RpZmllcmAsIGFuZCBoYW5kbGVzIGFyYml0cmFyeSBuZXN0aW5nIGRlcHRoIHNvXG4gKiB0aGF0IGAmLS1tb2RpZmllcmAgaW5zaWRlIGAmLS1tb2RpZmllcmAgaW5zaWRlIGAuYmxvY2tgIHlpZWxkc1xuICogYC5ibG9jay0tbW9kaWZpZXItLW1vZGlmaWVyYC5cbiAqXG4gKiBAcGFyYW0ge2ltcG9ydCgncG9zdGNzcycpLlJ1bGV9IG5vZGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU5lc3RlZFNhc3NTZWxlY3Rvcihub2RlKSB7XG4gIGNvbnN0IHsgc2VsZWN0b3IgfSA9IG5vZGU7XG5cbiAgaWYgKCFzZWxlY3Rvci5pbmNsdWRlcygnJicpKSB7XG4gICAgcmV0dXJuIHNlbGVjdG9yO1xuICB9XG5cbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgaWYgKCFwYXJlbnQgfHwgcGFyZW50LnR5cGUgIT09ICdydWxlJykge1xuICAgIC8vIE5vIHBhcmVudCBydWxlIOKAlCBgJmAgaGFzIG5vdGhpbmcgdG8gc3Vic3RpdHV0ZSwgcmV0dXJuIGFzLWlzXG4gICAgcmV0dXJuIHNlbGVjdG9yO1xuICB9XG5cbiAgLy8gUmVjdXJzaXZlbHkgcmVzb2x2ZSB0aGUgcGFyZW50IGZpcnN0LCB0aGVuIHN1YnN0aXR1dGUgaW50byB0aGlzIHNlbGVjdG9yXG4gIGNvbnN0IHJlc29sdmVkUGFyZW50ID0gcmVzb2x2ZU5lc3RlZFNhc3NTZWxlY3RvcihwYXJlbnQpO1xuXG4gIHJldHVybiBzZWxlY3Rvci5yZXBsYWNlKC8mL2csIHJlc29sdmVkUGFyZW50KTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xhc3Nlc0FuZFRhZ3Moc2VsLCBjbGFzc2VzLCB0YWdzKSB7XG4gIGNvbnN0IHRyYW5zZm9ybSA9IChzbHMpID0+IHtcbiAgICBzbHMud2Fsaygoc2VsZWN0b3IpID0+IHtcbiAgICAgIGlmIChzZWxlY3Rvci50eXBlID09PSAnY2xhc3MnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgY2xhc3Nlcy5hZGQoc2VsZWN0b3IudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci50eXBlID09PSAndGFnJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHRhZ3MuYWRkKHNlbGVjdG9yLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBwYXJzZXIodHJhbnNmb3JtKS5wcm9jZXNzU3luYyhzZWwpO1xufVxuXG5pZiAoaW1wb3J0Lm1ldGEudml0ZXN0KSB7XG4gIGNvbnN0IHsgaXQsIGV4cGVjdCB9ID0gaW1wb3J0Lm1ldGEudml0ZXN0O1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGNsYXNzZXMgYW5kIHRhZ3MgdGhhdCBhcmUgbm90IGluIDpnbG9iYWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY3NzID0gJy5iYXogOmdsb2JhbCguZm9vKSAuYmFyIGRpdiA6Z2xvYmFsKHApICB7IGNvbG9yOiByZWQ7IH0nO1xuICAgIGNvbnN0IHsgY2xhc3NlcywgdGFncyB9ID0gZ2V0Q1NTQ29udGVudEluZm8oY3NzKTtcblxuICAgIC8vIGNsYXNzZXMgc2hvdWxkIGJlIGJheiBhbmQgYmFyXG4gICAgZXhwZWN0KGNsYXNzZXMuc2l6ZSkudG8uZXF1YWwoMik7XG4gICAgZXhwZWN0KFsuLi5jbGFzc2VzXSkudG8uaGF2ZS5tZW1iZXJzKFsnYmF6JywgJ2JhciddKTtcbiAgICBleHBlY3QodGFncy5zaXplKS50by5lcXVhbCgxKTtcbiAgICBleHBlY3QoWy4uLnRhZ3NdKS50by5oYXZlLm1lbWJlcnMoWydkaXYnXSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFyc2UgU0NTUyBuZXN0aW5nIHN5bnRheCB3aXRob3V0IGNyYXNoaW5nIHdoZW4gbGFuZz1zY3NzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNjc3MgPSBgXG4gICAgICAkYmFzZS1jb2xvcjogI2M2NTM4YztcbiAgICAgICRib3JkZXItZGFyazogcmdiYSgkYmFzZS1jb2xvciwgMC44OCk7XG5cbiAgICAgIC5wYXJlbnQge1xuICAgICAgICAmOmhvdmVyIHsgY29sb3I6ICRiYXNlLWNvbG9yOyB9XG4gICAgICAgIC5jaGlsZCB7IGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXItZGFyazsgfVxuICAgICAgICBjb2xvcjogcmVkO1xuICAgICAgfVxuICAgIGA7XG4gICAgY29uc3QgeyBjbGFzc2VzIH0gPSBnZXRDU1NDb250ZW50SW5mbyhzY3NzLCAnc2NzcycpO1xuXG4gICAgZXhwZWN0KFsuLi5jbGFzc2VzXSkudG9NYXRjaElubGluZVNuYXBzaG90KGBcbiAgICAgIFtcbiAgICAgICAgXCJwYXJlbnRcIixcbiAgICAgICAgXCJjaGlsZFwiLFxuICAgICAgXVxuICAgIGApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhcnNlIFNDU1MgbmVzdGluZyBzeW50YXggd2l0aG91dCBjcmFzaGluZyB3aGVuIGxhbmc9c2FzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzY3NzID0gYFxuICAgICAgJGJhc2UtY29sb3I6IGdyZWVuO1xuICAgICAgLmJsb2NrIHtcbiAgICAgICAgJi0tbW9kaWZpZXIgeyBjb2xvcjogJGJhc2UtY29sb3I7IH1cbiAgICAgIH1cbiAgICBgO1xuICAgIGNvbnN0IHsgY2xhc3NlcyB9ID0gZ2V0Q1NTQ29udGVudEluZm8oc2NzcywgJ3Nhc3MnKTtcblxuICAgIGV4cGVjdChbLi4uY2xhc3Nlc10pLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChgXG4gICAgICBbXG4gICAgICAgIFwiYmxvY2tcIixcbiAgICAgICAgXCJibG9jay0tbW9kaWZpZXJcIixcbiAgICAgIF1cbiAgICBgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXJzZSBTQ1NTIGRlZXBseSBuZXN0ZWQgQkVNIHdoZW4gbGFuZz1zYXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNjc3MgPSBgXG4gICAgICAkYmFzZS1jb2xvcjogZ3JlZW47XG4gICAgICAuYmxvY2sge1xuICAgICAgICAmLS1tb2RpZmllciB7XG4gICAgICAgICAgY29sb3I6ICRiYXNlLWNvbG9yO1xuICAgICAgICAgICYtLW1vZGlmaWVyIHtcbiAgICAgICAgICAgIGNvbG9yOiAkYmFzZS1jb2xvcjtcbiAgICAgICAgICAgICYtLW1vZGlmaWVyIHtcbiAgICAgICAgICAgICAgY29sb3I6ICRiYXNlLWNvbG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIGA7XG4gICAgY29uc3QgeyBjbGFzc2VzIH0gPSBnZXRDU1NDb250ZW50SW5mbyhzY3NzLCAnc2FzcycpO1xuXG4gICAgZXhwZWN0KFsuLi5jbGFzc2VzXSkudG9NYXRjaElubGluZVNuYXBzaG90KGBcbiAgICAgIFtcbiAgICAgICAgXCJibG9ja1wiLFxuICAgICAgICBcImJsb2NrLS1tb2RpZmllclwiLFxuICAgICAgICBcImJsb2NrLS1tb2RpZmllci0tbW9kaWZpZXJcIixcbiAgICAgICAgXCJibG9jay0tbW9kaWZpZXItLW1vZGlmaWVyLS1tb2RpZmllclwiLFxuICAgICAgXVxuICAgIGApO1xuICB9KTtcbn1cbiIsIi8qKlxuICogSW1wb3J0YW50IGRvY3M6XG4gKiAtIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9cbiAqL1xuaW1wb3J0IHBvc3Rjc3MgZnJvbSAncG9zdGNzcyc7XG5pbXBvcnQgcGFyc2VyIGZyb20gJ3Bvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyJztcblxuaW1wb3J0IHsgaXNJbnNpZGVHbG9iYWwgfSBmcm9tICcuL3V0aWxzLmpzJztcblxuY29uc3QgU0VQID0gJ19fJztcblxuZnVuY3Rpb24gaXNSdWxlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ3J1bGUnO1xufVxuXG5mdW5jdGlvbiBpc0RlY2xhcmF0aW9uKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ2RlY2wnO1xufVxuXG4vKipcbiAqIE5PVEU6IFwia2V5ZnJhbWVzXCIgaXMgYSBzaW5ndWxhciBkZWZpbml0aW9uLCBpbiB0aGF0IGl0J3MgYSBibG9jayBjb250YWluaW5nIGtleWZyYW1lc1xuICogICAgICAgdXNpbmcgYEBrZXlmcmFtZXMge31gIHdpdGggb25seSBvbmUgdGhpbmcgb24gdGhlIGluc2lkZSBkb2Vzbid0IG1ha2Ugc2Vuc2UuXG4gKi9cbmZ1bmN0aW9uIHJld3JpdGVSZWZlcmVuY2VhYmxlKG5vZGUsIHBvc3RmaXgpIHtcbiAgbGV0IG9yaWdpbmFsTmFtZSA9IG5vZGUucGFyYW1zO1xuICBsZXQgcG9zdGZpeGVkTmFtZSA9IG5vZGUucGFyYW1zICsgU0VQICsgcG9zdGZpeDtcblxuICBub2RlLnBhcmFtcyA9IHBvc3RmaXhlZE5hbWU7XG5cbiAgcmV0dXJuIHtcbiAgICBvcmlnaW5hbE5hbWUsXG4gICAgcG9zdGZpeGVkTmFtZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmV3cml0ZVNlbGVjdG9yKHNlbCwgcG9zdGZpeCkge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2VsZWN0b3JzKSA9PiB7XG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSByZXR1cm47XG5cbiAgICAgIC8vIFdlIG5ldmVyIHdhbnQgdG8gdG91Y2ggcHN1ZWRvIHNlbGVjdG9ycyBzaW5jZSB3ZSBhbmQgdGhlIHVzZXIgZG9lc24ndCBvd24gdGhlbS5cbiAgICAgIGlmIChzZWxlY3Rvci50eXBlID09PSAncHN1ZWRvJykgcmV0dXJuO1xuXG4gICAgICAvLyA6bnRoLW9mLXR5cGUgaGFzIHNwZWNpYWwgc3ludGF4IHdoZXJlIHRoZSB2YWx1ZXMgcGFzc2VkIHRvIG50aC1vZi10eXBlKClcbiAgICAgIC8vIG11c3QgZWl0aGVyIGJlIGV4YWN0bHkgXCJvZGRcIiwgXCJldmVuXCIsIG9yIGEgc2ltcGxlIGZvcm11bGFcbiAgICAgIC8vXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvOm50aC1vZi10eXBlXG4gICAgICBpZiAoaXNOdGhPZlR5cGUoc2VsZWN0b3IpKSByZXR1cm47XG5cbiAgICAgIGlmIChzZWxlY3Rvci50eXBlID09PSAnY2xhc3MnKSB7XG4gICAgICAgIHNlbGVjdG9yLnZhbHVlICs9ICdfJyArIHBvc3RmaXg7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnKSB7XG4gICAgICAgIHNlbGVjdG9yLnJlcGxhY2VXaXRoKFxuICAgICAgICAgIHBhcnNlci50YWcoeyB2YWx1ZTogc2VsZWN0b3IudmFsdWUgfSksXG4gICAgICAgICAgcGFyc2VyLmNsYXNzTmFtZSh7IHZhbHVlOiBwb3N0Zml4IH0pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gcmVtb3ZlIDpnbG9iYWxcbiAgICBzZWxlY3RvcnMud2Fsaygoc2VsZWN0b3IpID0+IHtcbiAgICAgIGlmIChzZWxlY3Rvci50eXBlID09PSAncHNldWRvJyAmJiBzZWxlY3Rvci52YWx1ZSA9PT0gJzpnbG9iYWwnKSB7XG4gICAgICAgIHNlbGVjdG9yLnJlcGxhY2VXaXRoKC4uLnNlbGVjdG9yLm5vZGVzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgdHJhbnNmb3JtZWQgPSBwYXJzZXIodHJhbnNmb3JtKS5wcm9jZXNzU3luYyhzZWwpO1xuXG4gIHJldHVybiB0cmFuc2Zvcm1lZDtcbn1cblxuZnVuY3Rpb24gaXNOdGhPZlR5cGUobm9kZSkge1xuICBpZiAoIW5vZGUpIHJldHVybiBmYWxzZTtcblxuICByZXR1cm4gbm9kZS5wYXJlbnQ/LnZhbHVlID09PSAnOm50aC1vZi10eXBlJyB8fCBpc050aE9mVHlwZShub2RlLnBhcmVudCk7XG59XG5cbmZ1bmN0aW9uIGlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpIHtcbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHBhcmVudC50eXBlID09PSAnYXRydWxlJyAmJiBwYXJlbnQubmFtZSA9PT0gJ2tleWZyYW1lcycpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiBpc0luc2lkZUtleWZyYW1lcyhwYXJlbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUNzcyhjc3MsIHBvc3RmaXgsIGZpbGVOYW1lLCBsYXllck5hbWUpIHtcbiAgY29uc3QgYXN0ID0gcG9zdGNzcy5wYXJzZShjc3MpO1xuICAvKipcbiAgICoga2luZCA9PiBvcmlnaW5hbE5hbWUgPT4gcG9zdGZpeGVkTmFtZVxuICAgKiBAdHlwZSB7eyBba2luZDogc3RyaW5nXTogeyBbb3JpZ2luYWxOYW1lOiBzdHJpbmddOiBzdHJpbmcgfX19XG4gICAqL1xuICBjb25zdCByZWZlcmVuY2VhYmxlcyA9IHtcbiAgICBrZXlmcmFtZXM6IHt9LFxuICAgICdjb3VudGVyLXN0eWxlJzoge30sXG4gICAgJ3Bvc2l0aW9uLXRyeSc6IHt9LFxuICAgIHByb3BlcnR5OiB7fSxcbiAgfTtcblxuICBjb25zdCBhdmFpbGFibGVSZWZlcmVuY2VhYmxlcyA9IG5ldyBTZXQoT2JqZWN0LmtleXMocmVmZXJlbmNlYWJsZXMpKTtcblxuICBmdW5jdGlvbiBpc1JlZmVyZW5jZWFibGUobm9kZSkge1xuICAgIGlmIChub2RlLnR5cGUgIT09ICdhdHJ1bGUnKSByZXR1cm47XG5cbiAgICByZXR1cm4gYXZhaWxhYmxlUmVmZXJlbmNlYWJsZXMuaGFzKG5vZGUubmFtZSk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVEaXJlY3RSZWZlcmVuY2VzKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUudmFsdWUpIHJldHVybjtcblxuICAgIGZvciAobGV0IFssIG1hcF0gb2YgT2JqZWN0LmVudHJpZXMocmVmZXJlbmNlYWJsZXMpKSB7XG4gICAgICBpZiAobWFwW25vZGUudmFsdWVdKSB7XG4gICAgICAgIG5vZGUudmFsdWUgPSBtYXBbbm9kZS52YWx1ZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2hvcnRoYW5kQ29udGVudHMobm9kZSkge1xuICAgIGlmIChub2RlLnByb3AgPT09ICdhbmltYXRpb24nKSB7XG4gICAgICBsZXQgcGFydHMgPSBub2RlLnZhbHVlLnNwbGl0KCcgJyk7XG4gICAgICBsZXQgbWF0Y2ggPSBwYXJ0cy5maWx0ZXIoKHgpID0+IHJlZmVyZW5jZWFibGVzLmtleWZyYW1lc1t4XSk7XG5cbiAgICAgIGlmIChtYXRjaC5sZW5ndGgpIHtcbiAgICAgICAgbWF0Y2guZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgIGxldCByZXBsYWNlbWVudCA9IHJlZmVyZW5jZWFibGVzLmtleWZyYW1lc1t4XTtcblxuICAgICAgICAgIGlmICghcmVwbGFjZW1lbnQpIHJldHVybjtcblxuICAgICAgICAgIG5vZGUudmFsdWUgPSBub2RlLnZhbHVlLnJlcGxhY2UoeCwgcmVwbGFjZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBbbG9va0ZvciwgcmVwbGFjZVdpdGhdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgcmVmZXJlbmNlYWJsZXMucHJvcGVydHksXG4gICAgKSkge1xuICAgICAgbGV0IGxvb2tGb3JWYXIgPSBgdmFyKCR7bG9va0Zvcn0pYDtcbiAgICAgIGxldCByZXBsYWNlV2l0aFZhciA9IGB2YXIoJHtyZXBsYWNlV2l0aH0pYDtcblxuICAgICAgbm9kZS52YWx1ZSA9IG5vZGUudmFsdWUucmVwbGFjZShsb29rRm9yVmFyLCByZXBsYWNlV2l0aFZhcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdlIGhhdmUgdG8gZG8gdHdvIHBhc3NlczpcbiAgICogMS4gcG9zdGZpeCBhbGwgdGhlIHJlZmVyZW5jZWFibGUgc3ludGF4XG4gICAqIDIuIHBvc3RmaXggYXMgbm9ybWFsLCBidXQgYWxzbyBjaGVja2luZyB2YWx1ZXMgb2YgQ1NTIHByb3BlcnRpZXNcbiAgICogICAgdGhhdCBjb3VsZCBtYXRjaCBwb3N0Zml4ZWQgcmVmZXJlbmNlYWJsZXMgZnJvbSBzdGVwIDFcbiAgICovXG5cbiAgLy8gU3RlcCAxOiBmaW5kIHJlZmVyZW5jZWFibGVzXG4gIGFzdC53YWxrKChub2RlKSA9PiB7XG4gICAgLyoqXG4gICAgICogQGtleWZyYW1lcywgQGNvdW50ZXItc3R5bGUsIGV0Y1xuICAgICAqL1xuICAgIGlmIChpc1JlZmVyZW5jZWFibGUobm9kZSkpIHtcbiAgICAgIGxldCBuYW1lID0gbm9kZS5uYW1lO1xuICAgICAgbGV0IHsgb3JpZ2luYWxOYW1lLCBwb3N0Zml4ZWROYW1lIH0gPSByZXdyaXRlUmVmZXJlbmNlYWJsZShub2RlLCBwb3N0Zml4KTtcblxuICAgICAgcmVmZXJlbmNlYWJsZXNbbmFtZV1bb3JpZ2luYWxOYW1lXSA9IHBvc3RmaXhlZE5hbWU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFN0ZXAgMjogcG9zdGZpeCBhbmQgdXBkYXRlIHJlZmVyZW5jZWQgcmVmZXJlbmNlYWJsZXNcbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAoaXNEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgdXBkYXRlRGlyZWN0UmVmZXJlbmNlcyhub2RlKTtcbiAgICAgIHVwZGF0ZVNob3J0aGFuZENvbnRlbnRzKG5vZGUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzUnVsZShub2RlKSkge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgaW5uZXItY29udGVudHMgb2YgYSBrZXlmcmFtZSBhcmUgcGVyY2VudGFnZXMsIHJhdGhlciB0aGFuIHNlbGVjdG9yc1xuICAgICAgICovXG4gICAgICBpZiAoaXNJbnNpZGVLZXlmcmFtZXMobm9kZSkpIHJldHVybjtcblxuICAgICAgbm9kZS5zZWxlY3RvciA9IHJld3JpdGVTZWxlY3Rvcihub2RlLnNlbGVjdG9yLCBwb3N0Zml4KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcmV3cml0dGVuQ3NzID0gYXN0LnRvU3RyaW5nKCk7XG5cbiAgcmV0dXJuIChcbiAgICBbXG4gICAgICBgLyogJHtmaWxlTmFtZX0gKi9gLFxuICAgICAgbGF5ZXJOYW1lID8gYEBsYXllciAke2xheWVyTmFtZX0ge2AgOiAnJyxcbiAgICAgIHJld3JpdHRlbkNzcy50cmltRW5kKCksXG4gICAgICBsYXllck5hbWUgPyBgfWAgOiAnJyxcbiAgICBdXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAuam9pbignXFxuJykgKyAnXFxuJ1xuICApO1xufVxuIiwiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuY29uc3QgS0VZID0gJ2VtYmVyLXNjb3BlZC5jc3MnO1xuY29uc3QgU0VQID0gJ19fXyc7XG5cbmV4cG9ydCBjb25zdCByZXF1ZXN0ID0ge1xuICBpczoge1xuICAgIGlubGluZShyZXF1ZXN0KSB7XG4gICAgICByZXR1cm4gcmVxdWVzdC5pbmNsdWRlcyhLRVkpO1xuICAgIH0sXG4gICAgY29sb2NhdGVkKHJlcXVlc3QpIHtcbiAgICAgIHJldHVybiByZXF1ZXN0LmluY2x1ZGVzKCcuY3NzP3Njb3BlZD0nKTtcbiAgICB9LFxuICB9LFxuICBpbmxpbmU6IHtcbiAgICAvKipcbiAgICAgKiBNYWtlcyByZXF1ZXN0IFVSTCBmb3IgZW1iZWRkaW5nIGA8c3R5bGU+YCBhcyBgPGxpbms+YCBpbnRvIHRoZSBgPGhlYWQ+YFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNzc0hhc2ggdGhlIGhhc2ggb2YgdGhlIENTUyBjb250ZW50c1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwb3N0Zml4IHRoZSBoYXNoIG9mIHRoZSBmaWxlIHRoYXQgX2luY2x1ZGVzXyB0aGUgbGlua2VkIGZpbGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY3NzQ29udGVudHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBDU1MgZmlsZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbbGFuZ10gb3B0aW9uYWwgcHJlcHJvY2Vzc29yIGxhbmd1YWdlIChlLmcuICdzY3NzJywgJ3Nhc3MnLCAnbGVzcycpXG4gICAgICovXG4gICAgY3JlYXRlKGNzc0hhc2gsIHBvc3RmaXgsIGNzc0NvbnRlbnRzLCBsYW5nKSB7XG4gICAgICBsZXQgdXJsID0gYC4vJHtwb3N0Zml4fSR7U0VQfSR7Y3NzSGFzaH0uJHtLRVl9P2Nzcz0ke2VuY29kZVVSSUNvbXBvbmVudChjc3NDb250ZW50cyl9YDtcblxuICAgICAgaWYgKGxhbmcpIHtcbiAgICAgICAgdXJsICs9IGAmbGFuZz0ke2VuY29kZVVSSUNvbXBvbmVudChsYW5nKX1gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXJsO1xuICAgIH0sXG4gICAgZGVjb2RlKHJlcXVlc3QpIHtcbiAgICAgIGxldCBbbGVmdCwgcXBzXSA9IHJlcXVlc3Quc3BsaXQoJz8nKTtcblxuICAgICAgbGVmdCA9IGxlZnQuc2xpY2UoMikucmVwbGFjZShgLiR7S0VZfWAsICcnKTtcblxuICAgICAgbGV0IFtwb3N0Zml4LCBoYXNoXSA9IGxlZnQuc3BsaXQoU0VQKTtcblxuICAgICAgbGV0IHNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocXBzKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGFzaCxcbiAgICAgICAgcG9zdGZpeCxcbiAgICAgICAgY3NzOiBzZWFyY2guZ2V0KCdjc3MnKSxcbiAgICAgICAgZnJvbTogc2VhcmNoLmdldCgnZnJvbScpLFxuICAgICAgICBsYW5nOiBzZWFyY2guZ2V0KCdsYW5nJyksXG4gICAgICB9O1xuICAgIH0sXG4gIH0sXG4gIGNvbG9jYXRlZDoge1xuICAgIC8qKlxuICAgICAqIE1ha2VzIHJlcXVlc3QgVVJMIGZvciBlbWJlZGRpbmcgc2VwYXJhdGUgQ1NTIEZpbGUgYXMgYDxsaW5rPmAgaW50byB0aGUgYDxoZWFkPmBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjc3NIYXNoIHRoZSBoYXNoIG9mIHRoZSBDU1MgY29udGVudHNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcG9zdGZpeCB0aGUgaGFzaCBvZiB0aGUgZmlsZSB0aGF0IF9pbmNsdWRlc18gdGhlIGxpbmtlZCBmaWxlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoIHBhdGggdG8gdGhlIHNlcGFyYXRlIENTUyBGaWxlXG4gICAgICovXG4gICAgY3JlYXRlKGNzc0hhc2gsIHBvc3RmaXgsIGZpbGVQYXRoKSB7XG4gICAgICByZXR1cm4gYC4vJHtwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKX0/c2NvcGVkPSR7cG9zdGZpeH0mY3NzSGFzaD0ke2Nzc0hhc2h9YDtcbiAgICB9LFxuICAgIGRlY29kZShyZXF1ZXN0KSB7XG4gICAgICBjb25zdCBbZmlsZU5hbWUsIHFzXSA9IHJlcXVlc3Quc3BsaXQoJz8nKTtcbiAgICAgIGNvbnN0IHNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocXMpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgY3NzSGFzaDogc2VhcmNoLmdldCgnY3NzSGFzaCcpLFxuICAgICAgICBwb3N0Zml4OiBzZWFyY2guZ2V0KCdzY29wZWQnKSxcbiAgICAgIH07XG4gICAgfSxcbiAgfSxcbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgeyByZXdyaXRlQ3NzIH0gZnJvbSAnLi4vbGliL2Nzcy9yZXdyaXRlLmpzJztcbmltcG9ydCB7IHJlcXVlc3QgfSBmcm9tICcuLi9saWIvcmVxdWVzdC5qcyc7XG5cbmNvbnN0IE1FVEEgPSAnc2NvcGVkLWNzczpjb2xvY2F0ZWQnO1xuXG4vKiogRmlsZSBleHRlbnNpb25zIHRoYXQgVml0ZSBjYW4gcHJlcHJvY2VzcyB2aWEgaXRzIENTUyBwcmVwcm9jZXNzb3IgcGlwZWxpbmUgKi9cbmNvbnN0IFBSRVBST0NFU1NFRF9FWFRFTlNJT05TID0gbmV3IFNldChbXG4gICcuc2NzcycsXG4gICcuc2FzcycsXG4gICcubGVzcycsXG4gICcuc3R5bCcsXG4gICcuc3R5bHVzJyxcbl0pO1xuXG4vKipcbiAqIFBsdWdpbiBmb3Igc3VwcG9ydGluZyBjb2xvY2F0ZWQgc3R5bGVzXG4gKlxuICogZS5nLjpcbiAqICBzcmMvY29tcG9uZW50cy9teS1jb21wb25lbnQuanNcbiAqICBzcmMvY29tcG9uZW50cy9teS1jb21wb25lbnQuY3NzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xvY2F0ZWQob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IENXRCA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ3ZpdGUnKS5SZXNvbHZlZENvbmZpZyB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IHZpdGVDb25maWc7XG5cbiAgLyoqIEB0eXBlIHsoKGNvZGU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZywgY29uZmlnOiB1bmtub3duKSA9PiBQcm9taXNlPHsgY29kZTogc3RyaW5nIH0+KSB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IHByZXByb2Nlc3NDU1M7XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCB0aGUgcmVxdWVzdCBpZCAvIHdoYXQgd2FzIGltcG9ydGVkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCAgcGF0aCBvbiBkaXNrXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBmdW5jdGlvbiBidWlsZFJlc3BvbnNlKGlkLCBmaWxlUGF0aCkge1xuICAgIGNvbnN0IHBhcnNlZCA9IHJlcXVlc3QuY29sb2NhdGVkLmRlY29kZShpZCk7XG4gICAgY29uc3QgcmVsYXRpdmVGaWxlUGF0aCA9IHBhdGgucmVsYXRpdmUoQ1dELCBmaWxlUGF0aCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGZpbGVQYXRoLFxuICAgICAgbWV0YToge1xuICAgICAgICBbTUVUQV06IHtcbiAgICAgICAgICBwb3N0Zml4OiBwYXJzZWQucG9zdGZpeCxcbiAgICAgICAgICBmaWxlTmFtZTogcmVsYXRpdmVGaWxlUGF0aCxcbiAgICAgICAgICBmdWxsUGF0aDogZmlsZVBhdGgsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdlbWJlci1zY29wZWQtY3NzOmNvbG9jYXRlZCcsXG4gICAgcmVzb2x2ZUlkKGlkLCBpbXBvcnRlcikge1xuICAgICAgLy8gaGFuZGxlczogc29tZS1maWxlLmNzcz9zY29wZWQ9W3Bvc3RmaXhdXG4gICAgICAvLyB0aGlzIGlzIG9ubHkgcnVuIGluIHJvbGx1cCwgdml0ZSBoYW5kbGVzIGl0IGRpZmZlcmVudGx5XG4gICAgICBpZiAocmVxdWVzdC5pcy5jb2xvY2F0ZWQoaWQpKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHJlcXVlc3QuY29sb2NhdGVkLmRlY29kZShpZCk7XG5cbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnJlc29sdmUoXG4gICAgICAgICAgcGF0aC5kaXJuYW1lKGltcG9ydGVyKSxcbiAgICAgICAgICBwYXRoLmJhc2VuYW1lKHBhcnNlZC5maWxlTmFtZSksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGJ1aWxkUmVzcG9uc2UoaWQsIGZpbGVQYXRoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGxvYWQoaWQpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmdldE1vZHVsZUluZm8oaWQpPy5tZXRhPy5bTUVUQV07XG5cbiAgICAgIGlmIChtZXRhKSB7XG4gICAgICAgIHRoaXMuYWRkV2F0Y2hGaWxlKG1ldGEuZnVsbFBhdGgpO1xuXG4gICAgICAgIGxldCBjb2RlID0gcmVhZEZpbGVTeW5jKG1ldGEuZnVsbFBhdGgsICd1dGYtOCcpO1xuXG4gICAgICAgIGxldCBjc3MgPSByZXdyaXRlQ3NzKFxuICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgbWV0YS5wb3N0Zml4LFxuICAgICAgICAgIG1ldGEuZmlsZU5hbWUsXG4gICAgICAgICAgb3B0aW9ucy5sYXllck5hbWUsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGNzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHZpdGU6IHtcbiAgICAgIGFzeW5jIGNvbmZpZ1Jlc29sdmVkKGNvbmZpZykge1xuICAgICAgICB2aXRlQ29uZmlnID0gY29uZmlnO1xuXG4gICAgICAgIC8vIFJlc29sdmUgVml0ZSdzIHByZXByb2Nlc3NDU1MgZnJvbSB0aGUgYXBwIHJvb3QgdG8gZW5zdXJlIHdlIGZpbmRcbiAgICAgICAgLy8gdGhlIGNvcnJlY3QgVml0ZSBpbnN0YWxsYXRpb24gKG5vdCBhIHN0YWxlIG9yIG1pc3Npbmcgb25lKS5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShjb25maWcucm9vdCk7XG4gICAgICAgICAgY29uc3Qgdml0ZVBhdGggPSByZXF1aXJlLnJlc29sdmUoJ3ZpdGUnKTtcbiAgICAgICAgICBjb25zdCB2aXRlTW9kdWxlID0gYXdhaXQgaW1wb3J0KHZpdGVQYXRoKTtcblxuICAgICAgICAgIHByZXByb2Nlc3NDU1MgPSB2aXRlTW9kdWxlLnByZXByb2Nlc3NDU1M7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIFZpdGUgbWF5IG5vdCBiZSByZXNvbHZhYmxlIGZyb20gdGhlIGNvbmZpZyByb290IGluIHNvbWUgc2V0dXBzO1xuICAgICAgICAgIC8vIHByZXByb2Nlc3NvciBzdXBwb3J0IGZvciBjb2xvY2F0ZWQgLnNjc3MgZmlsZXMgd2lsbCB0aHJvdyBhIGNsZWFyXG4gICAgICAgICAgLy8gZXJyb3IgYXQgbG9hZCB0aW1lIGlmIHVzZWQuXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlcmUgbWF5IG5vdCBiZSBtZXRhIGZvciB0aGlzIHJlcXVlc3QgeWV0LlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7Kn0gaWRcbiAgICAgICAqL1xuICAgICAgYXN5bmMgbG9hZChpZCkge1xuICAgICAgICBpZiAocmVxdWVzdC5pcy5jb2xvY2F0ZWQoaWQpKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gcmVxdWVzdC5jb2xvY2F0ZWQuZGVjb2RlKGlkKTtcblxuICAgICAgICAgIGxldCBjb2RlID0gcmVhZEZpbGVTeW5jKHBhcnNlZC5maWxlTmFtZSwgJ3V0Zi04Jyk7XG4gICAgICAgICAgbGV0IHJlbGF0aXZlRmlsZVBhdGggPSBwYXRoLnJlbGF0aXZlKENXRCwgcGFyc2VkLmZpbGVOYW1lKTtcblxuICAgICAgICAgIGNvbnN0IGV4dCA9IHBhdGguZXh0bmFtZShwYXJzZWQuZmlsZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICBpZiAoUFJFUFJPQ0VTU0VEX0VYVEVOU0lPTlMuaGFzKGV4dCkpIHtcbiAgICAgICAgICAgIGlmICghdml0ZUNvbmZpZyB8fCAhcHJlcHJvY2Vzc0NTUykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYFtlbWJlci1zY29wZWQtY3NzXSBDb2xvY2F0ZWQgQ1NTIGZpbGUgd2l0aCBleHRlbnNpb24gJyR7ZXh0fScgcmVxdWlyZXMgVml0ZS4gYCArXG4gICAgICAgICAgICAgICAgICBgQ1NTIHByZXByb2Nlc3NpbmcgaXMgb25seSBzdXBwb3J0ZWQgaW4gVml0ZSBidWlsZHMuYCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJlcHJvY2Vzc0NTUyhcbiAgICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgICAgcGFyc2VkLmZpbGVOYW1lLFxuICAgICAgICAgICAgICB2aXRlQ29uZmlnLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29kZSA9IHJlc3VsdC5jb2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBjc3MgPSByZXdyaXRlQ3NzKFxuICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgIHBhcnNlZC5wb3N0Zml4LFxuICAgICAgICAgICAgcmVsYXRpdmVGaWxlUGF0aCxcbiAgICAgICAgICAgIG9wdGlvbnMubGF5ZXJOYW1lLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4gY3NzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbm9kZTptb2R1bGUnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgcmV3cml0ZUNzcyB9IGZyb20gJy4uL2xpYi9jc3MvcmV3cml0ZS5qcyc7XG5pbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSAnLi4vbGliL3JlcXVlc3QuanMnO1xuXG5jb25zdCBNRVRBID0gJ3Njb3BlZC1jc3M6aW5saW5lJztcblxuLyoqXG4gKiBQbHVnaW4gZm9yIHN1cHBvcnRpbmcgdGhlIHN0eWxlcyBmcm9tXG4gKlxuICogPHRlbXBsYXRlPlxuICogICA8c3R5bGU+Li4uPC9zdHlsZT5cbiAqIDwvdGVtcGxhdGU+XG4gKlxuICogVGhpcyBwbHVnaW4gY2FuJ3QgaGF2ZSBITVIgZm9yIENTUyBiZWNhdXNlIGNoYW5nZXMgdG8gdGhlIENTUyBjb250ZW50IGFsdGVycyB0aGUgdGVtcGxhdGUgY29udGVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5saW5lKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBDV0QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KCd2aXRlJykuUmVzb2x2ZWRDb25maWcgfCB1bmRlZmluZWR9ICovXG4gIGxldCB2aXRlQ29uZmlnO1xuXG4gIC8qKiBAdHlwZSB7KChjb2RlOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIGNvbmZpZzogdW5rbm93bikgPT4gUHJvbWlzZTx7IGNvZGU6IHN0cmluZyB9PikgfCB1bmRlZmluZWR9ICovXG4gIGxldCBwcmVwcm9jZXNzQ1NTO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgdGhlIHJlcXVlc3QgaWQgLyB3aGF0IHdhcyBpbXBvcnRlZFxuICAgKi9cbiAgZnVuY3Rpb24gYnVpbGRSZXNwb25zZShpZCwgZmlsZVBhdGgpIHtcbiAgICBjb25zdCBwYXJzZWQgPSByZXF1ZXN0LmlubGluZS5kZWNvZGUoaWQpO1xuXG4gICAgY29uc3QgcmVsYXRpdmVGaWxlUGF0aCA9IHBhdGgucmVsYXRpdmUoQ1dELCBmaWxlUGF0aCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGZpbGVQYXRoLnNwbGl0KCc/JylbMF0sXG4gICAgICBtZXRhOiB7XG4gICAgICAgIFtNRVRBXToge1xuICAgICAgICAgIHJhd0NzczogcGFyc2VkLmNzcyxcbiAgICAgICAgICBwb3N0Zml4OiBwYXJzZWQucG9zdGZpeCxcbiAgICAgICAgICBmaWxlTmFtZTogcmVsYXRpdmVGaWxlUGF0aCxcbiAgICAgICAgICBsYW5nOiBwYXJzZWQubGFuZyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2VtYmVyLXNjb3BlZC1jc3M6aW5saW5lJyxcbiAgICByZXNvbHZlSWQoaWQsIGltcG9ydGVyKSB7XG4gICAgICBpZiAocmVxdWVzdC5pcy5pbmxpbmUoaWQpKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHJlcXVlc3QuaW5saW5lLmRlY29kZShpZCk7XG5cbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnJlc29sdmUoXG4gICAgICAgICAgcGF0aC5kaXJuYW1lKGltcG9ydGVyKSxcbiAgICAgICAgICBgJHtwYXRoLmJhc2VuYW1lKGltcG9ydGVyLCBwYXRoLmV4dG5hbWUoaW1wb3J0ZXIpKX0tJHtwYXJzZWQuaGFzaH0uY3NzYCxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gYnVpbGRSZXNwb25zZShpZCwgZmlsZVBhdGgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgbG9hZChpZCkge1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuZ2V0TW9kdWxlSW5mbyhpZCk/Lm1ldGE/LltNRVRBXTtcblxuICAgICAgaWYgKG1ldGEpIHtcbiAgICAgICAgbGV0IHJhd0NzcyA9IG1ldGEucmF3Q3NzO1xuXG4gICAgICAgIGlmIChtZXRhLmxhbmcpIHtcbiAgICAgICAgICBpZiAoIXZpdGVDb25maWcgfHwgIXByZXByb2Nlc3NDU1MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFtlbWJlci1zY29wZWQtY3NzXSA8c3R5bGUgc2NvcGVkIGxhbmc9XCIke21ldGEubGFuZ31cIj4gcmVxdWlyZXMgVml0ZS4gYCArXG4gICAgICAgICAgICAgICAgYENTUyBwcmVwcm9jZXNzaW5nIHZpYSB0aGUgJ2xhbmcnIGF0dHJpYnV0ZSBpcyBvbmx5IHN1cHBvcnRlZCBpbiBWaXRlIGJ1aWxkcy5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmYWtlRmlsZW5hbWUgPSBgJHttZXRhLmZpbGVOYW1lfS4ke21ldGEubGFuZ31gO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByZXByb2Nlc3NDU1MocmF3Q3NzLCBmYWtlRmlsZW5hbWUsIHZpdGVDb25maWcpO1xuXG4gICAgICAgICAgcmF3Q3NzID0gcmVzdWx0LmNvZGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjc3MgPSByZXdyaXRlQ3NzKFxuICAgICAgICAgIHJhd0NzcyxcbiAgICAgICAgICBtZXRhLnBvc3RmaXgsXG4gICAgICAgICAgYDxpbmxpbmU+LyR7bWV0YS5maWxlTmFtZX1gLFxuICAgICAgICAgIG9wdGlvbnMubGF5ZXJOYW1lLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBjc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB2aXRlOiB7XG4gICAgICBhc3luYyBjb25maWdSZXNvbHZlZChjb25maWcpIHtcbiAgICAgICAgdml0ZUNvbmZpZyA9IGNvbmZpZztcblxuICAgICAgICAvLyBSZXNvbHZlIFZpdGUncyBwcmVwcm9jZXNzQ1NTIGZyb20gdGhlIGFwcCByb290IHRvIGVuc3VyZSB3ZSBmaW5kXG4gICAgICAgIC8vIHRoZSBjb3JyZWN0IFZpdGUgaW5zdGFsbGF0aW9uIChub3QgYSBzdGFsZSBvciBtaXNzaW5nIG9uZSkuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoY29uZmlnLnJvb3QpO1xuICAgICAgICAgIGNvbnN0IHZpdGVQYXRoID0gcmVxdWlyZS5yZXNvbHZlKCd2aXRlJyk7XG4gICAgICAgICAgY29uc3Qgdml0ZU1vZHVsZSA9IGF3YWl0IGltcG9ydCh2aXRlUGF0aCk7XG5cbiAgICAgICAgICBwcmVwcm9jZXNzQ1NTID0gdml0ZU1vZHVsZS5wcmVwcm9jZXNzQ1NTO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBWaXRlIG1heSBub3QgYmUgcmVzb2x2YWJsZSBmcm9tIHRoZSBjb25maWcgcm9vdCBpbiBzb21lIHNldHVwcztcbiAgICAgICAgICAvLyBsYW5nPSBzdXBwb3J0IHdpbGwgdGhyb3cgYSBjbGVhciBlcnJvciBhdCBsb2FkIHRpbWUgaWYgdXNlZC5cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSBmcm9tICd1bnBsdWdpbic7XG5cbmltcG9ydCB7IGNvbG9jYXRlZCB9IGZyb20gJy4vdW5wbHVnaW4tY29sb2NhdGVkLmpzJztcbmltcG9ydCB7IGlubGluZSB9IGZyb20gJy4vdW5wbHVnaW4taW5saW5lLmpzJztcblxuLyoqXG4gKiBUaGUgcGx1Z2luIHRoYXQgaGFuZGxlcyBDU1MgcmVxdWVzdHMgZm9yIGA8c3R5bGU+YCBlbGVtZW50cyBhbmQgdHJhbnNmb3Jtc1xuICogZm9yIGV4aXN0aW5nIGZpbGVzXG4gKlxuICogdml0ZTogQ1NTIGZpbGVzIGFyZSByZXNvbHZlZCBieSB2aXRlLiBXZSB1c2UgdGhlaXIgcmVzb2x2ZXIgdG8gYWxzbyBnZXRcbiAqICAgICAgIEhNUi4gVGhhdCBpcywgZm9yIGFsbCBub24tcGh5c2ljYWwgQ1NTIGZpbGVzLCB3ZSBleHRlbmQgdml0ZSBieSBvdXJcbiAqICAgICAgIHJlc29sdmVyIGFuZCBhbHNvIGNhbiBlbnJpY2ggbWV0YWRhdGEgdG8gaXQgKGZvciBiZXR0ZXIgZGVidWdnaW5nKVxuICovXG5leHBvcnQgY29uc3QgdW5wbHVnaW4gPSBjcmVhdGVVbnBsdWdpbigob3B0aW9ucyA9IHt9KSA9PiB7XG4gIHJldHVybiBbY29sb2NhdGVkKG9wdGlvbnMpLCBpbmxpbmUob3B0aW9ucyldO1xufSk7XG4iLCJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgeyBsZWFkaW5nU2xhc2hQYXRoIH0gZnJvbSAnLi9jb25zdC5qcyc7XG5pbXBvcnQgeyBmaW5kV29ya3NwYWNlUGF0aCB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG4vKipcbiAqIHRlbXBsYXRlIHBsdWdpbnMgZG8gbm90IGhhbmQgdXMgdGhlIGNvcnJlY3QgZmlsZSBwYXRoLlxuICogYWRkaXRpb25hbGx5LCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gcmVseSBvbiB0aGlzIGRhdGEgaW4gdGhlIGZ1dHVyZSxcbiAqIHNvIHRoaXMgZnVuY3Rpb25zIGFjdHMgYXMgYSBtZWFucyBvZiBub3JtYWxpemluZyBfd2hhdGV2ZXJfIHdlJ3JlIGdpdmVuXG4gKiBpbiB0aGUgZnV0dXJlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpeEZpbGVuYW1lKGZpbGVuYW1lKSB7XG4gIGxldCBmaWxlTmFtZSA9IGZpbGVuYW1lO1xuICBsZXQgd29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoZmlsZU5hbWUpO1xuXG4gIC8qKlxuICAgKiBlbWJlci1zb3VyY2UgNS44OlxuICAgKiAtIHRoZSBmaWxlbmFtZSBsb29rcyBsaWtlIGFuIGFic29sdXRlIHBhdGgsIGJ1dCBzd2FwcGVkIG91dCB0aGUgJ2FwcCcgcGFydCBvZiB0aGUgcGF0aFxuICAgKiAgIHdpdGggdGhlIG1vZHVsZSBuYW1lLCBzbyB0aGUgZmlsZSBwYXRocyBuZXZlciBleGlzdCBvbiBkaXNrXG4gICAqXG4gICAqIC0gaW4gdml0ZSBhcHBzOlxuICAgKiAgIHRoZSAnYXBwJyBwYXJ0IF9tYXlfIGJlIGBzcmNgLCBzbyB3ZSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgYHNyY2AgaXMgZXhjbHVkZWQgYXMgd2VsbFxuICAgKi9cbiAgbGV0IGhhc0FwcERpciA9IGZpbGVOYW1lLmluY2x1ZGVzKHBhdGguam9pbih3b3Jrc3BhY2UsICdhcHAnKSk7XG4gIGxldCBoYXNTcmNEaXIgPSBmaWxlTmFtZS5pbmNsdWRlcyhwYXRoLmpvaW4od29ya3NwYWNlLCAnc3JjJykpO1xuXG4gIGlmIChcbiAgICAhKGhhc0FwcERpciB8fCBoYXNTcmNEaXIpICYmXG4gICAgIWZpbGVOYW1lLmluY2x1ZGVzKGxlYWRpbmdTbGFzaFBhdGguZW1icm9pZGVyRGlyKVxuICApIHtcbiAgICBsZXQgbWF5YmVNb2R1bGUgPSBmaWxlTmFtZS5yZXBsYWNlKHdvcmtzcGFjZSwgJycpO1xuICAgIGxldCBbbWF5YmVTY29wZSwgLi4ucmVzdF0gPSBtYXliZU1vZHVsZS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGxldCBwYXJ0cyA9IHJlc3Q7XG5cbiAgICBpZiAobWF5YmVTY29wZS5zdGFydHNXaXRoKCdAJykpIHtcbiAgICAgIGxldCBbLCAuLi5yZXN0ZXJdID0gcmVzdDtcblxuICAgICAgcGFydHMgPSByZXN0ZXI7XG4gICAgfVxuXG4gICAgbGV0IHJlbGF0aXZlID0gcGF0aC5qb2luKC4uLnBhcnRzKTtcblxuICAgIC8qKlxuICAgICAqIFdlIGRvbid0IGFjdHVhbGx5IGtub3cgaWYgdGhpcyBmaWxlIGlzIGFuIGFwcC5cbiAgICAgKiBpdCBjb3VsZCBiZSBhbiBhZGRvbiAodjEgb3IgdjIpXG4gICAgICpcbiAgICAgKiBTbyBoZXJlIHdlIGxvZyB0byBzZWUgaWYgd2UgaGF2ZSB1bmhhbmRsZWQgc2l0dWF0aW9ucy5cbiAgICAgKi9cbiAgICBsZXQgY2FuZGlkYXRlUGF0aCA9IHBhdGguam9pbih3b3Jrc3BhY2UsICdhcHAnLCByZWxhdGl2ZSk7XG5cbiAgICByZXR1cm4gY2FuZGlkYXRlUGF0aDtcbiAgfVxuXG4gIC8vIFRPRE86IHdoeSBhcmUgd2UgcGFzc2VkIGZpbGVzIHRvIG90aGVyIHByb2plY3RzP1xuICBpZiAoIWZpbGVOYW1lLmluY2x1ZGVzKHdvcmtzcGFjZSkpIHtcbiAgICByZXR1cm4gZmlsZU5hbWU7XG4gIH1cblxuICAvLyBGYWxsYmFjayB0byB3aGF0IHRoZSBwbHVnaW4gc3lzdGVtIGdpdmVzIHVzLlxuICAvLyBUaGlzIG1heSBiZSB3cm9uZywgYW5kIGlmIHdyb25nLCByZXZlYWxzXG4gIC8vIHVuaGFuZGxlZCBzY2VuYXJpb3Mgd2l0aCB0aGUgZmlsZSBuYW1lcyBpbiB0aGUgcGx1Z2luIGluZnJhXG4gIHJldHVybiBmaWxlTmFtZTtcbn1cbiIsImltcG9ydCAqIGFzIHJlY2FzdCBmcm9tICdlbWJlci10ZW1wbGF0ZS1yZWNhc3QnO1xuXG5pbXBvcnQgeyByZW5hbWVDbGFzcyB9IGZyb20gJy4vcmVuYW1lQ2xhc3MuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGVQbHVnaW4oeyBjbGFzc2VzLCB0YWdzLCBwb3N0Zml4IH0pIHtcbiAgbGV0IHN0YWNrID0gW107XG4gIC8vIHNjb3BlZC1jbGFzcyBpcyBhIGdsb2JhbCB3ZSBhbGxvdyBpbiBoYnNcbiAgLy8gc2NvcGVkQ2xhc3MgaXMgaW1wb3J0YWJsZSwgYW5kIHdlJ2xsIGVycm9yIGlmIHNvbWVvbmUgdHJpZXMgdG8gcmVuYW1lIGl0XG4gIGxldCBzY29wZWRDbGFzc0NhbmRpZGF0ZXMgPSBbJ3Njb3BlZC1jbGFzcycsICdzY29wZWRDbGFzcyddO1xuXG4gIGZ1bmN0aW9uIGlzU2NvcGVkQ2xhc3Moc3RyKSB7XG4gICAgaWYgKCFzdHIpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBzY29wZWRDbGFzc0NhbmRpZGF0ZXMuc29tZSgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUgPT09IHN0cik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIEF0dHJOb2RlKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLm5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgICAgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ1RleHROb2RlJyAmJiBub2RlLnZhbHVlLmNoYXJzKSB7XG4gICAgICAgICAgY29uc3QgcmVuYW1lZENsYXNzID0gcmVuYW1lQ2xhc3Mobm9kZS52YWx1ZS5jaGFycywgcG9zdGZpeCwgY2xhc3Nlcyk7XG5cbiAgICAgICAgICBub2RlLnZhbHVlLmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ0NvbmNhdFN0YXRlbWVudCcpIHtcbiAgICAgICAgICBmb3IgKGxldCBwYXJ0IG9mIG5vZGUudmFsdWUucGFydHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0LnR5cGUgPT09ICdUZXh0Tm9kZScgJiYgcGFydC5jaGFycykge1xuICAgICAgICAgICAgICBjb25zdCByZW5hbWVkQ2xhc3MgPSByZW5hbWVDbGFzcyhwYXJ0LmNoYXJzLCBwb3N0Zml4LCBjbGFzc2VzKTtcblxuICAgICAgICAgICAgICBwYXJ0LmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0LnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgICAgICAgcmVjYXN0LnRyYXZlcnNlKHBhcnQsIHtcbiAgICAgICAgICAgICAgICBTdHJpbmdMaXRlcmFsKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbmFtZWRDbGFzcyA9IHJlbmFtZUNsYXNzKFxuICAgICAgICAgICAgICAgICAgICBub2RlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwb3N0Zml4LFxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgbm9kZS52YWx1ZSA9IHJlbmFtZWRDbGFzcztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgRWxlbWVudE5vZGUobm9kZSkge1xuICAgICAgaWYgKHRhZ3MuaGFzKG5vZGUudGFnKSkge1xuICAgICAgICAvLyBjaGVjayBpZiBjbGFzcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgY29uc3QgY2xhc3NBdHRyID0gbm9kZS5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIubmFtZSA9PT0gJ2NsYXNzJyk7XG5cbiAgICAgICAgaWYgKGNsYXNzQXR0cikge1xuICAgICAgICAgIGNsYXNzQXR0ci52YWx1ZS5jaGFycyArPSAnICcgKyBwb3N0Zml4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHB1c2ggY2xhc3MgYXR0cmlidXRlXG4gICAgICAgICAgbm9kZS5hdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICByZWNhc3QuYnVpbGRlcnMuYXR0cignY2xhc3MnLCByZWNhc3QuYnVpbGRlcnMudGV4dChwb3N0Zml4KSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBBbGw6IHtcbiAgICAgIGVudGVyKG5vZGUpIHtcbiAgICAgICAgc3RhY2sucHVzaChub2RlKTtcbiAgICAgIH0sXG4gICAgICBleGl0KCkge1xuICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIE11c3RhY2hlU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgIGxldCBjc3NDbGFzcztcblxuICAgICAgaWYgKFxuICAgICAgICBpc1Njb3BlZENsYXNzKGdldFZhbHVlKG5vZGUucGF0aCkpICYmXG4gICAgICAgIG5vZGUucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY3NzQ2xhc3MgPSBub2RlLnBhcmFtc1swXS52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBpc1Njb3BlZENsYXNzKGdldFZhbHVlKG5vZGUucGF0aD8ucGF0aCkpICYmXG4gICAgICAgIG5vZGUucGF0aD8ucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXRoPy5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY3NzQ2xhc3MgPSBub2RlLnBhdGgucGFyYW1zWzBdLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3NzQ2xhc3MpIHtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSByZWNhc3QuYnVpbGRlcnMudGV4dChyZW5hbWVDbGFzcyhjc3NDbGFzcywgcG9zdGZpeCkpO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgICBpZiAocGFyZW50Py50eXBlID09PSAnQXR0ck5vZGUnKSB7XG4gICAgICAgICAgcGFyZW50LnF1b3RlVHlwZSA9ICdcIic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGV4dE5vZGU7XG4gICAgICB9XG4gICAgfSxcblxuICAgIFN1YkV4cHJlc3Npb24obm9kZSkge1xuICAgICAgaWYgKFxuICAgICAgICBpc1Njb3BlZENsYXNzKGdldFZhbHVlKG5vZGUucGF0aCkpICYmXG4gICAgICAgIG5vZGUucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY3NzQ2xhc3MgPSBub2RlLnBhcmFtc1swXS52YWx1ZTtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSByZWNhc3QuYnVpbGRlcnMubGl0ZXJhbChcbiAgICAgICAgICAnU3RyaW5nTGl0ZXJhbCcsXG4gICAgICAgICAgcmVuYW1lQ2xhc3MoY3NzQ2xhc3MsIHBvc3RmaXgpLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0ZXh0Tm9kZTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZShwYXRoKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuO1xuXG4gIGlmICgndmFsdWUnIGluIHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXByZWNhdGVkIGluIGVtYmVyIDUuOStcbiAgICogKHNvIHdlIHVzZSB0aGUgYWJvdmUgZm9yIG5ld2VyIGVtYmVycylcbiAgICovXG4gIHJldHVybiBwYXRoLm9yaWdpbmFsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXdyaXRlSGJzKGhicywgY2xhc3NlcywgdGFncywgcG9zdGZpeCkge1xuICBsZXQgYXN0ID0gcmVjYXN0LnBhcnNlKGhicyk7XG5cbiAgcmVjYXN0LnRyYXZlcnNlKGFzdCwgdGVtcGxhdGVQbHVnaW4oeyBjbGFzc2VzLCB0YWdzLCBwb3N0Zml4IH0pKTtcblxuICBsZXQgcmVzdWx0ID0gcmVjYXN0LnByaW50KGFzdCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGdsaW1tZXIvc3ludGF4JykuQVNUUGx1Z2lufSBBU1RQbHVnaW5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BnbGltbWVyL3N5bnRheCcpLkFTVFBsdWdpbkVudmlyb25tZW50fSBBU1RQbHVnaW5FbnZpcm9ubWVudFxuICpcbiAqL1xuXG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHsgcmV3cml0ZUNzcyB9IGZyb20gJy4uL2xpYi9jc3MvcmV3cml0ZS5qcyc7XG5pbXBvcnQgeyBnZXRDU1NDb250ZW50SW5mbywgZ2V0Q1NTSW5mbyB9IGZyb20gJy4uL2xpYi9jc3MvdXRpbHMuanMnO1xuaW1wb3J0IHsgZml4RmlsZW5hbWUgfSBmcm9tICcuLi9saWIvcGF0aC90ZW1wbGF0ZS10cmFuc2Zvcm0tcGF0aHMuanMnO1xuaW1wb3J0IHtcbiAgYXBwUGF0aCxcbiAgY3NzUGF0aEZvcixcbiAgZm9yY2VQb3NpeCxcbiAgaGFzaEZyb21Nb2R1bGVQYXRoLFxuICBpc1JlbGV2YW50RmlsZSxcbn0gZnJvbSAnLi4vbGliL3BhdGgvdXRpbHMuanMnO1xuaW1wb3J0IHsgcmVxdWVzdCB9IGZyb20gJy4uL2xpYi9yZXF1ZXN0LmpzJztcbmltcG9ydCB7IHRlbXBsYXRlUGx1Z2luIH0gZnJvbSAnLi4vbGliL3Jld3JpdGVIYnMuanMnO1xuXG5jb25zdCBub29wUGx1Z2luID0ge1xuICBuYW1lOiAnZW1iZXItc2NvcGVkLWNzczpub29wJyxcbiAgdmlzaXRvcjoge30sXG59O1xuXG4vKipcbiAqIEByZXR1cm5zIHtBU1RQbHVnaW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQbHVnaW4oY29uZmlnKSB7XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0FTVFBsdWdpbkVudmlyb25tZW50fSBlbnZcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBzY29wZWRDc3MoZW52KSB7XG4gICAgbGV0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgICBsZXQgaXNSZWxldmFudCA9IGlzUmVsZXZhbnRGaWxlKGVudi5maWxlbmFtZSwge1xuICAgICAgYWRkaXRpb25hbFJvb3RzOiBjb25maWcuYWRkaXRpb25hbFJvb3RzLFxuICAgICAgY3dkLFxuICAgIH0pO1xuXG4gICAgaWYgKCFpc1JlbGV2YW50KSB7XG4gICAgICByZXR1cm4gbm9vcFBsdWdpbjtcbiAgICB9XG5cbiAgICBsZXQgYWJzb2x1dGVQYXRoID0gZml4RmlsZW5hbWUoZW52LmZpbGVuYW1lKTtcbiAgICBsZXQgbW9kdWxlUGF0aCA9IGFwcFBhdGgoYWJzb2x1dGVQYXRoKTtcbiAgICBsZXQgcG9zdGZpeCA9IGhhc2hGcm9tTW9kdWxlUGF0aChtb2R1bGVQYXRoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBsaXN0IG9mIG5ha2VkIHRhZyBzZWxlY3RvcnMgZm91bmQgaW4gdGhlIENTU1xuICAgICAqXG4gICAgICogQHR5cGUge1NldDxzdHJpbmc+fVxuICAgICAqL1xuICAgIGxldCBzY29wZWRUYWdzID0gbmV3IFNldCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxpc3Qgb2YgY2xhc3NlcyBmb3VuZCBpbiB0aGUgQ1NTXG4gICAgICpcbiAgICAgKiBAdHlwZSB7U2V0PHN0cmluZz59XG4gICAgICovXG4gICAgbGV0IHNjb3BlZENsYXNzZXMgPSBuZXcgU2V0KCk7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge3sgdGFnczogU2V0PHN0cmluZz47IGNsYXNzZXM6IFNldDxzdHJpbmc+IH19IGluZm9cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZGRJbmZvKGluZm8pIHtcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgaW5mby50YWdzKSB7XG4gICAgICAgIHNjb3BlZFRhZ3MuYWRkKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpdGVtIG9mIGluZm8uY2xhc3Nlcykge1xuICAgICAgICBzY29wZWRDbGFzc2VzLmFkZChpdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY3NzUGF0aCA9IGNzc1BhdGhGb3IoYWJzb2x1dGVQYXRoKTtcbiAgICBsZXQgaW5mbyA9IGdldENTU0luZm8oY3NzUGF0aCk7XG4gICAgbGV0IGxvY2FsQ3NzUGF0aCA9IGZvcmNlUG9zaXgoY3NzUGF0aC5yZXBsYWNlKGN3ZCArIHBhdGguc2VwLCAnJykpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGJlIGZhbHNleSBpZiB3ZSBkb24ndCBoYXZlIGEgY28tbG9jYXRlZCBDU1MgZmlsZS5cbiAgICAgKiBXZSdsbCBzdGlsbCB3YW50IHRvIGNoZWNrIGZvciBlbWJlZGRlZCA8c3R5bGUgc2NvcGVkPiB0YWdzIHRob3VnaC5cbiAgICAgKi9cbiAgICBpZiAoaW5mbykge1xuICAgICAgYWRkSW5mbyhpbmZvKTtcblxuICAgICAgbGV0IGNzc1JlcXVlc3QgPSByZXF1ZXN0LmNvbG9jYXRlZC5jcmVhdGUoaW5mby5pZCwgcG9zdGZpeCwgbG9jYWxDc3NQYXRoKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBXaXRoIHRoaXMgd2UgZG9uJ3QgbmVlZCBhIEpTIHBsdWdpblxuICAgICAgICovXG4gICAgICBlbnYubWV0YS5qc3V0aWxzLmltcG9ydEZvclNpZGVFZmZlY3QoY3NzUmVxdWVzdCk7XG4gICAgfVxuXG4gICAgbGV0IHZpc2l0b3JzID0gdGVtcGxhdGVQbHVnaW4oe1xuICAgICAgY2xhc3Nlczogc2NvcGVkQ2xhc3NlcyxcbiAgICAgIHRhZ3M6IHNjb3BlZFRhZ3MsXG4gICAgICBwb3N0Zml4LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdlbWJlci1zY29wZWQtY3NzOnRlbXBsYXRlLXBsdWdpbicsXG4gICAgICB2aXNpdG9yOiB7XG4gICAgICAgIC8vIFN0YWNrIE1hbmFnZXJcbiAgICAgICAgLi4udmlzaXRvcnMsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdlIGhhdmUgdG8gZWFnZXJseSBnZXQgdGhlIDxzdHlsZSBzY29wZWQ+IGNvbnRlbnRzLCBzbyB3ZSBjYW4gcHJlLXBhcnNlXG4gICAgICAgICAqIHRoZSB0YWdzIGFuZCBjbGFzc2VzIHRvIHRoZW4gcGFzcyB0byB0aGUgb3RoZXIgdmlzaXRvcnMgc28gdGhhdCB0aGV5IGNhblxuICAgICAgICAgKiBhcHByb3ByaWF0ZWx5IGNoYW5nZSBtYXRjaGluZyBjbGFzc2VzIC8gdGFncy5cbiAgICAgICAgICovXG4gICAgICAgIFRlbXBsYXRlKG5vZGUpIHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBXZSBvbmx5IGFsbG93IGEgc2NvcGVkIDxzdHlsZT4gYXQgdGhlIHJvb3RcbiAgICAgICAgICAgKi9cbiAgICAgICAgICBsZXQgc3R5bGVUYWcgPSBub2RlLmJvZHkuZmluZChcbiAgICAgICAgICAgIChuKSA9PiBuLnR5cGUgPT09ICdFbGVtZW50Tm9kZScgJiYgbi50YWcgPT09ICdzdHlsZScsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChoYXNTY29wZWRBdHRyaWJ1dGUoc3R5bGVUYWcpKSB7XG4gICAgICAgICAgICBsZXQgY3NzID0gdGV4dENvbnRlbnQoc3R5bGVUYWcpO1xuICAgICAgICAgICAgbGV0IGxhbmcgPSBnZXRMYW5nQXR0cmlidXRlKHN0eWxlVGFnKTtcbiAgICAgICAgICAgIGxldCBpbmZvID0gZ2V0Q1NTQ29udGVudEluZm8oY3NzLCBsYW5nKTtcblxuICAgICAgICAgICAgYWRkSW5mbyhpbmZvKTtcblxuICAgICAgICAgICAgaWYgKGhhc0lubGluZUF0dHJpYnV0ZVdpdGhvdXRMYW5nKHN0eWxlVGFnKSkge1xuICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICogVGhpcyB3aWxsIGJlIGhhbmRsZWQgaW4gRWxlbWVudE5vZGUgdHJhdmVyc2FsXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsYW5nKSB7XG4gICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgKiBGb3IgPHN0eWxlIHNjb3BlZCBpbmxpbmUgbGFuZz1cIi4uLlwiPiB3ZSBjYW5ub3QgcHJlcHJvY2VzcyBhdCBCYWJlbC10aW1lXG4gICAgICAgICAgICAgICAqIChwcmVwcm9jZXNzaW5nIGlzIGFzeW5jIGFuZCByZXF1aXJlcyBWaXRlJ3MgUmVzb2x2ZWRDb25maWcpLlxuICAgICAgICAgICAgICAgKiBSZW1vdmUgdGhlIHRhZyBhbmQgaW5qZWN0IHZpYSB2aXJ0dWFsIENTUyBtb2R1bGUgYW5kIHdhcm4gdXNlci5cbiAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICBgW2VtYmVyLXNjb3BlZC1jc3NdIDxzdHlsZSBzY29wZWQgaW5saW5lIGxhbmc9XCIke2xhbmd9XCI+IGlzIG5vdCBzdXBwb3J0ZWQgYCArXG4gICAgICAgICAgICAgICAgICBgKHByZXByb2Nlc3NpbmcgaXMgYXN5bmMgYW5kIGNhbm5vdCBydW4gYXQgQmFiZWwtdGltZSkuIGAgK1xuICAgICAgICAgICAgICAgICAgYERvd25ncmFkaW5nIHRvIG5vbi1pbmxpbmU6IHRoZSBzdHlsZSB0YWcgd2lsbCBiZSByZW1vdmVkIGFuZCBpbmplY3RlZCBhcyBhIHZpcnR1YWwgQ1NTIG1vZHVsZS5gLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgY3NzUmVxdWVzdCA9IHJlcXVlc3QuaW5saW5lLmNyZWF0ZShpbmZvLmlkLCBwb3N0Zml4LCBjc3MsIGxhbmcpO1xuXG4gICAgICAgICAgICBlbnYubWV0YS5qc3V0aWxzLmltcG9ydEZvclNpZGVFZmZlY3QoY3NzUmVxdWVzdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFZpc2l0b3JzIGJyb2tlbiBvdXQgbGlrZSB0aGlzIHNvIHdlIGNhbiBjb25kaXRpb25hbGx5XG4gICAgICAgIC8vIGRlYnVnIGJhc2VkIG9uIGZpbGUgcGF0aC5cbiAgICAgICAgQXR0ck5vZGUoLi4uYXJncykge1xuICAgICAgICAgIHJldHVybiB2aXNpdG9ycy5BdHRyTm9kZSguLi5hcmdzKTtcbiAgICAgICAgfSxcbiAgICAgICAgRWxlbWVudE5vZGUobm9kZSwgd2Fsa2VyKSB7XG4gICAgICAgICAgLy8gY2xhc3MgYXR0cmlidXRlIGhhbmRsaW5nXG4gICAgICAgICAgdmlzaXRvcnMuRWxlbWVudE5vZGUobm9kZSwgd2Fsa2VyKTtcblxuICAgICAgICAgIGlmIChoYXNTY29wZWRBdHRyaWJ1dGUobm9kZSkpIHtcbiAgICAgICAgICAgIGlmICh3YWxrZXIucGFyZW50Py5ub2RlLnR5cGUgIT09ICdUZW1wbGF0ZScpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICc8c3R5bGUgc2NvcGVkPiB0YWdzIG11c3QgYmUgYXQgdGhlIHJvb3Qgb2YgdGhlIHRlbXBsYXRlLCB0aGV5IGNhbm5vdCBiZSBuZXN0ZWQnLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzSW5saW5lQXR0cmlidXRlV2l0aG91dExhbmcobm9kZSkpIHtcbiAgICAgICAgICAgICAgbGV0IHRleHQgPSB0ZXh0Q29udGVudChub2RlKTtcbiAgICAgICAgICAgICAgbGV0IHNjb3BlZFRleHQgPSByZXdyaXRlQ3NzKFxuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgcG9zdGZpeCxcbiAgICAgICAgICAgICAgICBsb2NhbENzc1BhdGgsXG4gICAgICAgICAgICAgICAgY29uZmlnLmxheWVyTmFtZSxcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICogVHJhdmVyc2UgdGhpcyBhbmQgYWxsb3cgaW50ZXJwb2xhdGlvblxuICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbiA9IFtlbnYuc3ludGF4LmJ1aWxkZXJzLnRleHQoc2NvcGVkVGV4dCldO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUmV0dXJuaW5nIG51bGwgcmVtb3ZlcyB0aGUgbm9kZVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGhhc0lubGluZUF0dHJpYnV0ZVdpdGhvdXRMYW5nKG5vZGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGA8c3R5bGUgaW5saW5lPiBpcyBub3QgdmFsaWQuIFBsZWFzZSBhZGQgdGhlIHNjb3BlZCBhdHRyaWJ1dGU6IDxzdHlsZSBzY29wZWQgaW5saW5lPmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgTXVzdGFjaGVTdGF0ZW1lbnQoLi4uYXJncykge1xuICAgICAgICAgIHJldHVybiB2aXNpdG9ycy5NdXN0YWNoZVN0YXRlbWVudCguLi5hcmdzKTtcbiAgICAgICAgfSxcbiAgICAgICAgU3ViRXhwcmVzc2lvbiguLi5hcmdzKSB7XG4gICAgICAgICAgcmV0dXJuIHZpc2l0b3JzLlN1YkV4cHJlc3Npb24oLi4uYXJncyk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH07XG59XG5cbi8qKlxuICogVGhhbmtzLCBDYXJkU3RhY2sgYW5kIEBlZjQgZm9yIHRoaXMgY29kZS5cbiAqL1xuY29uc3QgU0NPUEVEX0FUVFJJQlVURV9OQU1FID0gJ3Njb3BlZCc7XG5jb25zdCBJTkxJTkVfQVRUUklCVVRFX05BTUUgPSAnaW5saW5lJztcbmNvbnN0IExBTkdfQVRUUklCVVRFX05BTUUgPSAnbGFuZyc7XG5cbmZ1bmN0aW9uIGhhc1Njb3BlZEF0dHJpYnV0ZShub2RlKSB7XG4gIGlmICghbm9kZSkgcmV0dXJuO1xuICBpZiAobm9kZS50YWcgIT09ICdzdHlsZScpIHJldHVybjtcbiAgaWYgKG5vZGUudHlwZSAhPT0gJ0VsZW1lbnROb2RlJykgcmV0dXJuO1xuXG4gIHJldHVybiBub2RlLmF0dHJpYnV0ZXMuc29tZShcbiAgICAoYXR0cmlidXRlKSA9PiBhdHRyaWJ1dGUubmFtZSA9PT0gU0NPUEVEX0FUVFJJQlVURV9OQU1FLFxuICApO1xufVxuXG5mdW5jdGlvbiBoYXNJbmxpbmVBdHRyaWJ1dGVXaXRob3V0TGFuZyhub2RlKSB7XG4gIGlmICghbm9kZSkgcmV0dXJuO1xuICBpZiAobm9kZS50YWcgIT09ICdzdHlsZScpIHJldHVybjtcbiAgaWYgKG5vZGUudHlwZSAhPT0gJ0VsZW1lbnROb2RlJykgcmV0dXJuO1xuXG4gIGlmIChnZXRMYW5nQXR0cmlidXRlKG5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIG5vZGUuYXR0cmlidXRlcy5zb21lKFxuICAgIChhdHRyaWJ1dGUpID0+IGF0dHJpYnV0ZS5uYW1lID09PSBJTkxJTkVfQVRUUklCVVRFX05BTUUsXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGBsYW5nYCBhdHRyaWJ1dGUgb24gYSBgPHN0eWxlPmAgbm9kZSwgb3IgbnVsbCBpZiBhYnNlbnQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5vZGVcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsfVxuICovXG5mdW5jdGlvbiBnZXRMYW5nQXR0cmlidXRlKG5vZGUpIHtcbiAgaWYgKCFub2RlKSByZXR1cm4gbnVsbDtcbiAgaWYgKG5vZGUudGFnICE9PSAnc3R5bGUnKSByZXR1cm4gbnVsbDtcbiAgaWYgKG5vZGUudHlwZSAhPT0gJ0VsZW1lbnROb2RlJykgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgYXR0ciA9IG5vZGUuYXR0cmlidXRlcy5maW5kKFxuICAgIChhdHRyaWJ1dGUpID0+IGF0dHJpYnV0ZS5uYW1lID09PSBMQU5HX0FUVFJJQlVURV9OQU1FLFxuICApO1xuXG4gIGlmICghYXR0cikgcmV0dXJuIG51bGw7XG5cbiAgLy8gVGhlIGF0dHJpYnV0ZSB2YWx1ZSBpcyBhIFRleHROb2RlIGNoaWxkIG9mIHRoZSBBdHRyTm9kZSdzIHZhbHVlXG4gIGNvbnN0IHZhbHVlID0gYXR0ci52YWx1ZTtcblxuICBpZiAodmFsdWU/LnR5cGUgPT09ICdUZXh0Tm9kZScpIHJldHVybiB2YWx1ZS5jaGFycyB8fCBudWxsO1xuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiB0ZXh0Q29udGVudChub2RlKSB7XG4gIGxldCB0ZXh0Q2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLmZpbHRlcigoYykgPT4gYy50eXBlID09PSAnVGV4dE5vZGUnKTtcblxuICByZXR1cm4gdGV4dENoaWxkcmVuLm1hcCgoYykgPT4gYy5jaGFycykuam9pbignJyk7XG59XG4iLCJpbXBvcnQgKiBhcyBiYWJlbCBmcm9tICcuLi9iYWJlbC1wbHVnaW4uanMnO1xuaW1wb3J0IHsgdW5wbHVnaW4gfSBmcm9tICcuLi9zY29wZWQtY3NzLXVucGx1Z2luLmpzJztcbmltcG9ydCAqIGFzIHRlbXBsYXRlIGZyb20gJy4uL3RlbXBsYXRlLXBsdWdpbi5qcyc7XG5cbmV4cG9ydCBjb25zdCBzY29wZWRDU1MgPSB7XG4gIHZpdGU6IHVucGx1Z2luLnZpdGUsXG4gIHJvbGx1cDogdW5wbHVnaW4ucm9sbHVwLFxuICBiYWJlbDogYmFiZWwuc2NvcGVkQ1NTLFxuICB0ZW1wbGF0ZTogdGVtcGxhdGUuY3JlYXRlUGx1Z2luLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLE1BQWEsbUJBQW1CO0NBQzlCLGNBQWMsYUFBSyxLQUFLLDRCQUE0QjtDQUNwRCxhQUFhLGFBQUssS0FBSyxjQUFjO0NBQ3JDLGVBQWUsYUFBSyxLQUFLLGVBQWU7Q0FDeEMsY0FBYyxhQUFLLEtBQUssY0FBYztDQUN0QyxXQUFXLGFBQUssS0FBSyxXQUFXO0NBQ2hDLFFBQVEsYUFBSyxLQUFLLFVBQVU7Q0FDNUIsS0FBSyxhQUFLLEtBQUssUUFBUTtDQUN2QixLQUFLLGFBQUssS0FBSyxRQUFRO0NBQ3hCO0FBRUQsTUFBYSxXQUFXLEVBQ3RCLFNBQVMsYUFBSyxLQUFLLHFCQUFxQixFQUN6Qzs7Ozs7Ozs7Ozs7O0FDV0QsU0FBUyxRQUFRLEdBQUcsR0FBRztDQUNyQixJQUFJLE9BQU8sSUFBSSxVQUFXLElBQUk7QUFHOUIsU0FGVyxLQUFLLE9BQU8sS0FBSyxPQUFPLE9BQU8sT0FFM0IsS0FBTyxNQUFNOzs7Ozs7Ozs7QUFVOUIsU0FBUyxjQUFjLEtBQUssS0FBSztBQUMvQixRQUFRLE9BQU8sTUFBUSxRQUFTLEtBQUs7Ozs7Ozs7Ozs7Ozs7QUFjdkMsU0FBUyxPQUFPLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO0FBQ2hDLFFBQU8sUUFBUSxjQUFjLFFBQVEsUUFBUSxHQUFHLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7Ozs7Ozs7Ozs7Ozs7O0FBZTVFLFNBQVMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO0FBQ2xDLFFBQU8sT0FBUSxJQUFJLElBQU0sQ0FBQyxJQUFJLEdBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFOzs7Ozs7Ozs7Ozs7OztBQWVsRCxTQUFTLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztBQUNsQyxRQUFPLE9BQVEsSUFBSSxJQUFNLElBQUksQ0FBQyxHQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRTs7Ozs7Ozs7Ozs7Ozs7QUFlbEQsU0FBUyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7QUFDbEMsUUFBTyxPQUFPLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRTs7Ozs7Ozs7Ozs7Ozs7QUFlekMsU0FBUyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7QUFDbEMsUUFBTyxPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFOzs7Ozs7Ozs7QUFVNUMsU0FBUyxRQUFRLEdBQUcsS0FBSztBQUV2QixHQUFFLE9BQU8sTUFBTSxPQUFRLE1BQU07QUFDN0IsSUFBSyxNQUFNLE9BQVEsS0FBTSxLQUFLLE1BQU07Q0FFcEMsSUFBSTtDQUNKLElBQUk7Q0FDSixJQUFJO0NBQ0osSUFBSTtDQUNKLElBQUk7Q0FDSixJQUFJLElBQUk7Q0FDUixJQUFJLElBQUk7Q0FDUixJQUFJLElBQUk7Q0FDUixJQUFJLElBQUk7QUFFUixNQUFLLElBQUksR0FBRyxJQUFJLEVBQUUsUUFBUSxLQUFLLElBQUk7QUFDakMsU0FBTztBQUNQLFNBQU87QUFDUCxTQUFPO0FBQ1AsU0FBTztBQUVQLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLFdBQVc7QUFDMUMsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxXQUFXO0FBQy9DLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksVUFBVTtBQUM5QyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLFlBQVk7QUFDaEQsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxXQUFXO0FBQzlDLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksV0FBVztBQUMvQyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLFlBQVk7QUFDaEQsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxVQUFVO0FBQzlDLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsV0FBVztBQUM5QyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLFlBQVk7QUFDaEQsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEtBQUssSUFBSSxPQUFPO0FBQzVDLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLElBQUksWUFBWTtBQUNqRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLFdBQVc7QUFDL0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEtBQUssSUFBSSxVQUFVO0FBQy9DLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLElBQUksWUFBWTtBQUNqRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxJQUFJLFdBQVc7QUFFaEQsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxXQUFXO0FBQzlDLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsWUFBWTtBQUMvQyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxJQUFJLFVBQVU7QUFDL0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksV0FBVztBQUMzQyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLFdBQVc7QUFDOUMsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEtBQUssR0FBRyxTQUFTO0FBQzdDLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLElBQUksV0FBVztBQUNoRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLFdBQVc7QUFDL0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxVQUFVO0FBQzdDLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsWUFBWTtBQUNoRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLFdBQVc7QUFDL0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxXQUFXO0FBQy9DLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsWUFBWTtBQUNoRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLFVBQVU7QUFDN0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxXQUFXO0FBQy9DLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLElBQUksWUFBWTtBQUVqRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLFFBQVE7QUFDM0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxZQUFZO0FBQ2hELE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLElBQUksV0FBVztBQUNoRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxJQUFJLFVBQVU7QUFDL0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxZQUFZO0FBQy9DLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksV0FBVztBQUMvQyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLFdBQVc7QUFDL0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEtBQUssSUFBSSxZQUFZO0FBQ2pELE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsVUFBVTtBQUM5QyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxXQUFXO0FBQzNDLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksV0FBVztBQUMvQyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLFNBQVM7QUFDN0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxXQUFXO0FBQzlDLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLElBQUksV0FBVztBQUNoRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxJQUFJLFVBQVU7QUFDL0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxXQUFXO0FBRS9DLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLFdBQVc7QUFDMUMsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxXQUFXO0FBQy9DLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLElBQUksWUFBWTtBQUNqRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLFVBQVU7QUFDOUMsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEtBQUssR0FBRyxXQUFXO0FBQy9DLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksWUFBWTtBQUNoRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxJQUFJLFNBQVM7QUFDOUMsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxZQUFZO0FBQ2hELE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsV0FBVztBQUM5QyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxJQUFJLFVBQVU7QUFDL0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxZQUFZO0FBQ2hELE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLElBQUksV0FBVztBQUNoRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLFdBQVc7QUFDOUMsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEtBQUssSUFBSSxZQUFZO0FBQ2pELE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksVUFBVTtBQUM5QyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLFdBQVc7QUFFL0MsTUFBSSxRQUFRLEdBQUcsS0FBSztBQUNwQixNQUFJLFFBQVEsR0FBRyxLQUFLO0FBQ3BCLE1BQUksUUFBUSxHQUFHLEtBQUs7QUFDcEIsTUFBSSxRQUFRLEdBQUcsS0FBSzs7QUFHdEIsUUFBTztFQUFDO0VBQUc7RUFBRztFQUFHO0VBQUU7Ozs7Ozs7O0FBU3JCLFNBQVMsVUFBVSxPQUFPO0NBQ3hCLElBQUk7Q0FDSixJQUFJLFNBQVM7Q0FDYixJQUFJLFdBQVcsTUFBTSxTQUFTO0FBRTlCLE1BQUssSUFBSSxHQUFHLElBQUksVUFBVSxLQUFLLEVBQzdCLFdBQVUsT0FBTyxhQUFjLE1BQU0sS0FBSyxPQUFPLElBQUksS0FBTSxJQUFLO0FBR2xFLFFBQU87Ozs7Ozs7OztBQVVULFNBQVMsVUFBVSxPQUFPO0NBQ3hCLElBQUk7Q0FDSixJQUFJLFNBQVMsRUFBRTtBQUNmLFNBQVEsTUFBTSxVQUFVLEtBQUssS0FBSztBQUVsQyxNQUFLLElBQUksR0FBRyxJQUFJLE9BQU8sUUFBUSxLQUFLLEVBQ2xDLFFBQU8sS0FBSztDQUdkLElBQUksVUFBVSxNQUFNLFNBQVM7QUFFN0IsTUFBSyxJQUFJLEdBQUcsSUFBSSxTQUFTLEtBQUssRUFDNUIsUUFBTyxLQUFLLE9BQU8sTUFBTSxXQUFXLElBQUksRUFBRSxHQUFHLFFBQVMsSUFBSTtBQUc1RCxRQUFPOzs7Ozs7OztBQVNULFNBQVMsUUFBUSxHQUFHO0FBQ2xCLFFBQU8sVUFBVSxRQUFRLFVBQVUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUM7Ozs7Ozs7OztBQVV2RCxTQUFTLFlBQVksS0FBSyxNQUFNO0NBQzlCLElBQUk7Q0FDSixJQUFJLE9BQU8sVUFBVSxJQUFJO0NBQ3pCLElBQUksT0FBTyxFQUFFO0NBQ2IsSUFBSSxPQUFPLEVBQUU7Q0FDYixJQUFJQTtBQUNKLE1BQUssTUFBTSxLQUFLLE1BQU07QUFFdEIsS0FBSSxLQUFLLFNBQVMsR0FDaEIsUUFBTyxRQUFRLE1BQU0sSUFBSSxTQUFTLEVBQUU7QUFHdEMsTUFBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEtBQUssR0FBRztBQUMxQixPQUFLLEtBQUssS0FBSyxLQUFLO0FBQ3BCLE9BQUssS0FBSyxLQUFLLEtBQUs7O0FBR3RCLFVBQU8sUUFBUSxLQUFLLE9BQU8sVUFBVSxLQUFLLENBQUMsRUFBRSxNQUFNLEtBQUssU0FBUyxFQUFFO0FBRW5FLFFBQU8sVUFBVSxRQUFRLEtBQUssT0FBT0EsT0FBSyxFQUFFLElBQVUsQ0FBQzs7Ozs7Ozs7QUFTekQsU0FBUyxTQUFTLE9BQU87Q0FDdkIsSUFBSSxTQUFTO0NBQ2IsSUFBSSxTQUFTO0NBQ2IsSUFBSTtDQUNKLElBQUk7QUFFSixNQUFLLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDcEMsTUFBSSxNQUFNLFdBQVcsRUFBRTtBQUN2QixZQUFVLE9BQU8sT0FBUSxNQUFNLElBQUssR0FBSyxHQUFHLE9BQU8sT0FBTyxJQUFJLEdBQUs7O0FBR3JFLFFBQU87Ozs7Ozs7O0FBU1QsU0FBUyxhQUFhLE9BQU87QUFDM0IsUUFBTyxTQUFTLG1CQUFtQixNQUFNLENBQUM7Ozs7Ozs7O0FBUzVDLFNBQVMsT0FBTyxHQUFHO0FBQ2pCLFFBQU8sUUFBUSxhQUFhLEVBQUUsQ0FBQzs7Ozs7Ozs7QUFTakMsU0FBUyxPQUFPLEdBQUc7QUFDakIsUUFBTyxTQUFTLE9BQU8sRUFBRSxDQUFDOzs7Ozs7Ozs7QUFVNUIsU0FBUyxXQUFXLEdBQUcsR0FBRztBQUN4QixRQUFPLFlBQVksYUFBYSxFQUFFLEVBQUUsYUFBYSxFQUFFLENBQUM7Ozs7Ozs7OztBQVV0RCxTQUFTLFdBQVcsR0FBRyxHQUFHO0FBQ3hCLFFBQU8sU0FBUyxXQUFXLEdBQUcsRUFBRSxDQUFDOzs7Ozs7Ozs7Ozs7QUFhbkMsU0FBZ0IsSUFBSSxRQUFRLEtBQUssS0FBSztBQUNwQyxLQUFJLENBQUMsS0FBSztBQUNSLE1BQUksQ0FBQyxJQUNILFFBQU8sT0FBTyxPQUFPO0FBR3ZCLFNBQU8sT0FBTyxPQUFPOztBQUd2QixLQUFJLENBQUMsSUFDSCxRQUFPLFdBQVcsS0FBSyxPQUFPO0FBR2hDLFFBQU8sV0FBVyxLQUFLLE9BQU87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN6WWhDLFNBQWdCQyxPQUFLLFlBQVk7QUFDL0IsUUFBTyxNQUFNLElBQUksV0FBVyxDQUFDLFVBQVUsR0FBRyxFQUFFOztBQXlCOUMsTUFBYUMsdUJBQXFCRDs7Ozs7Ozs7O0FDMUJsQyxTQUFnQixtQkFBbUIsVUFBVTtBQUczQyxRQUFPRSxxQkFGUyxXQUFXLFNBQVMsQ0FFQzs7Ozs7QUFNdkMsU0FBZ0IsV0FBVyxVQUFVO0NBQ25DLE1BQU0sU0FBU0Msa0JBQUssTUFBTSxTQUFTO0FBRW5DLEtBQUksT0FBTyxTQUFTLEdBQ2xCLFFBQU8sU0FBUyxXQUFXQSxrQkFBSyxNQUFNLEtBQUtBLGtCQUFLLE1BQU0sSUFBSTtBQVE1RCxRQUxlLFNBQVMsd0JBQ3RCLElBQUksT0FBTyxJQUFJLE9BQU8sT0FBTyxPQUFPLEtBQUssR0FBRyxFQUM1Q0Esa0JBQUssTUFBTSxJQUNaLENBRWUsV0FBV0Esa0JBQUssTUFBTSxLQUFLQSxrQkFBSyxNQUFNLElBQUk7O0FBTTVELElBQUk7QUFDSixJQUFJLGFBQWEsV0FBVyxVQUN4QixXQUFXLFVBQ1gsdUNBQXNCLEtBQUs7QUFFL0IsSUFBSSxDQUFDLFdBQ0gsY0FBYTtBQUdmLE1BQU0sbUJBQW1CLENBQUMsU0FBUyxTQUFTLFVBQVU7QUFDdEQsTUFBTSwwQkFBMEIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO0FBRWxELE1BQU0sTUFBTSxRQUFRLEtBQUs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlGekIsU0FBZ0IsV0FBVyxVQUFVO0NBRW5DLElBQUksVUFEYSxpQkFBaUIsU0FBUyxHQUNoQjtBQUUzQixLQUFJLE1BQU0sU0FBUyxDQUNqQixXQUFVLFNBQ1AsUUFBUSxpQkFBaUIsYUFBYSxDQUN0QyxRQUFRLGlCQUFpQixhQUFhLENBQ3RDLFFBQVEsaUJBQWlCLGFBQWEsQ0FDdEMsUUFBUSxpQkFBaUIsYUFBYTtBQUczQyxRQUFPOzs7Ozs7OztBQVNULFNBQWdCLGNBQWMsVUFBVTtBQUN0QyxLQUFJLFNBQVMsU0FBUyxpQkFBaUIsY0FBYyxDQUNuRCxRQUFPO0FBR1QsUUFDRSxTQUFTLFNBQVMsY0FBYyxJQUNoQyxTQUFTLFNBQVMsZUFBZSxJQUNqQyxTQUFTLFNBQVMsZUFBZSxJQUNqQyxTQUFTLFNBQVMsZUFBZTs7Ozs7Ozs7Ozs7OztBQWVyQyxTQUFnQixNQUFNLFVBQVU7QUFDOUIsS0FBSSxTQUFTLFNBQVMsaUJBQWlCLGNBQWMsQ0FDbkQsUUFBTztBQUdULEtBQUksY0FBYyxTQUFTLENBQ3pCLFFBQU87QUFHVCxRQUFPLFNBQVMsU0FBUyxhQUFhOzs7Ozs7O0FBUXhDLFNBQWdCLGlCQUFpQixVQUFVO0NBQ3pDLElBQUksU0FBU0Esa0JBQUssTUFBTSxTQUFTO0FBRWpDLFFBQU9BLGtCQUFLLEtBQUssT0FBTyxLQUFLLE9BQU8sS0FBSzs7Ozs7Ozs7Ozs7O0FBYTNDLFNBQWdCLGVBQWUsVUFBVSxFQUFFLGlCQUFpQixPQUFPO0FBRWpFLEtBQUksU0FBUyxXQUFXLGlCQUFpQixPQUFPLENBQUUsUUFBTztBQUV6RCxLQUFJLFNBQVMsV0FBVyxLQUFLLENBQUUsUUFBTztBQUd0QyxLQUFJQSxrQkFBSyxXQUFXLFNBQVMsS0FBSyxPQUNoQztNQUFJLFNBQVMsTUFBTSxZQUFZLENBQUUsUUFBTzs7QUFJMUMsS0FBSSxTQUFTLFdBQVcsaUJBQWlCLFlBQVksQ0FBRSxRQUFPO0FBQzlELEtBQUksaUJBQWlCLE1BQU0sTUFBTSxTQUFTLFNBQVMsRUFBRSxDQUFDLENBQUUsUUFBTztDQUUvRCxJQUFJLFlBQVksa0JBQWtCLFNBQVM7QUFFM0MsMEJBQU8sS0FBSyx1Q0FBdUM7QUFJbkQsS0FBSSxjQUZlLGtCQUFrQixJQUFJLENBR3ZDLFFBQU87Q0FJVCxJQUFJLEdBQUcsR0FBRyxTQURFLFNBQVMsUUFBUSxXQUFXLEdBQUcsQ0FDbEIsTUFBTUEsa0JBQUssSUFBSSxDQUFDLE9BQU8sUUFBUTtBQUV4RCxLQUFJLHdCQUF3QixJQUFJLE1BQU0sR0FBRyxDQUN2QyxRQUFPO0FBY1QsS0FBSSxDQVBRO0VBQ1YsaUJBQWlCO0VBQ2pCLGlCQUFpQjtFQUNqQixpQkFBaUI7RUFDakIsR0FBSSxtQkFBbUIsRUFBRTtFQUMxQixDQUVVLE1BQU0sU0FBUyxTQUFTLFNBQVMsS0FBSyxDQUFDLENBQ2hEO0FBR0YsUUFBTzs7QUFHVCxTQUFnQiw4QkFBOEIsbUJBQW1COzs7Ozs7Ozs7Ozs7OztDQWMvRCxJQUFJLGtCQUFrQixrQkFBa0Isd0JBQ3RDLElBQUksT0FBTyxJQUFJLE9BQU8sT0FBTyxpQkFBaUIsSUFBSSxHQUFHLEVBQ3JEQSxrQkFBSyxJQUNOO0NBRUQsSUFBSSxTQUFTQSxrQkFBSyxNQUFNLGdCQUFnQjtBQUV4QyxLQUFJLE1BQU0sZ0JBQWdCOzs7O0FBSXhCLFFBQU8sT0FBTztBQWVoQixRQUY2QkEsa0JBQUssS0FBSyxPQUFPLEtBQUssT0FBTyxLQUFLOzs7Ozs7Ozs7QUFZakUsU0FBZ0IsUUFBUSxZQUFZO0NBQ2xDLElBQUksZ0JBQWdCLGtCQUFrQixXQUFXO0NBQ2pELElBQUksT0FBTyxXQUFXLFdBQVc7Ozs7OztDQU9qQyxJQUFJLGtCQUFrQixXQUFXLFFBQVEsZUFBZSxHQUFHOzs7O0FBSzNELG1CQUFrQixnQkFBZ0IsUUFBUSxpQkFBaUIsS0FBS0Esa0JBQUssSUFBSTtBQUd6RSxtQkFBa0JBLGtCQUFLLFVBQVUsZ0JBQWdCO0FBSWpELFFBQU8sR0FBRyxPQUZtQiw4QkFBOEIsZ0JBQWdCOzs7Ozs7OztBQVc3RSxNQUFNLHVCQUFPLElBQUksS0FBSztBQUV0QixTQUFTLFFBQVEsWUFBWTtBQUMzQixLQUFJLEtBQUssSUFBSSxXQUFXLENBQUUsUUFBTztDQUVqQyxJQUFJLFFBQVEsV0FBVyxNQUFNQSxrQkFBSyxJQUFJO0FBRXRDLE1BQUssSUFBSSxJQUFJLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxLQUFLO0VBQ3pDLElBQUksVUFBVSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBS0Esa0JBQUssSUFBSTtBQUk5QyxNQUZXLEtBQUssSUFBSSxRQUFRLENBRzFCLFFBQU87OztBQUtiLFNBQWdCLGtCQUFrQixZQUFZLFNBQVM7Q0FDckQsSUFBSSxNQUFNLFNBQVMsT0FBTztBQUUxQixLQUFJLFdBQVcsU0FBU0Esa0JBQUssSUFBSSxDQUMvQixjQUFhLFdBQVcsd0JBQ3RCLElBQUksT0FBTyxHQUFHLE9BQU8sT0FBT0Esa0JBQUssSUFBSSxDQUFDLEdBQUcsRUFDekMsR0FDRDtDQUdILElBQUksT0FBTyxRQUFRLFdBQVc7QUFFOUIsS0FBSSxLQUNGLFFBQU87Q0FHVCxJQUFJLGdCQUFnQkEsa0JBQUssS0FBSyxZQUFZLGVBQWU7QUFJekQsS0FGb0JDLGdCQUFPLFdBQVcsY0FBYyxDQUdsRCxRQUFPO0NBR1QsTUFBTSxrQkFBa0Isa0JBQWtCLFlBQVksRUFBRSxLQUFLLENBQUM7QUFFOUQsS0FBSSxDQUFDLGdCQUNILE9BQU0sSUFBSSxNQUFNLG1DQUFtQyxhQUFhO0NBR2xFLE1BQU0sZ0JBQWdCRCxrQkFBSyxRQUFRLGdCQUFnQjtBQUVuRCxNQUFLLElBQUksY0FBYztBQUV2QixRQUFPOztBQUdULFNBQVMsa0JBQWtCLFdBQVcsU0FBUztDQUM3QyxJQUFJLE1BQU0sU0FBUyxPQUFPO0NBQzFCLElBQUksUUFBUSxVQUFVLE1BQU1BLGtCQUFLLElBQUk7QUFFckMsTUFBSyxJQUFJLElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEtBQUs7RUFDekMsSUFBSSxVQUFVLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLQSxrQkFBSyxJQUFJO0VBRTlDLElBQUksY0FBY0Esa0JBQUssS0FBSyxTQUFTLGVBQWU7QUFHcEQsTUFGYUMsZ0JBQU8sV0FBVyxZQUFZLENBR3pDLFFBQU87QUFJVCxNQUFJLFlBQVksSUFDZDs7QUFJSixRQUFPOztBQUdULE1BQU0saUNBQWlCLElBQUksS0FBSzs7Ozs7O0FBT2hDLFNBQWdCLFdBQVcsWUFBWTtBQUlyQyxRQUZpQixZQURDLGtCQUFrQixXQUFXLENBQ1IsQ0FFdkI7Ozs7O0FBTWxCLFNBQVMsWUFBWSxXQUFXO0NBQzlCLElBQUksV0FBVyxlQUFlLElBQUksVUFBVTtBQUU1QyxLQUFJLFNBQ0YsUUFBTztDQUlULElBQUksVUFEU0EsZ0JBQU8sYUFBYUQsa0JBQUssS0FBSyxXQUFXLGVBQWUsQ0FBQyxDQUNqRCxVQUFVO0NBQy9CLElBQUksT0FBTyxLQUFLLE1BQU0sUUFBUTtBQUU5QixnQkFBZSxJQUFJLFdBQVcsS0FBSztBQUVuQyxRQUFPOzs7Ozs7Ozs7Ozs7QUNyY1QsU0FBZ0IsWUFBWSxXQUFXLFNBQVMsY0FBYztDQUU1RCxNQUFNLGlCQURVLFVBQVUsTUFBTSxNQUFNLENBRW5DLFFBQVEsTUFBTSxFQUFFLENBQ2hCLEtBQUssTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUNwQixLQUFLLE1BQU07QUFDVixNQUFJLENBQUMsZ0JBQWdCLGFBQWEsSUFBSSxFQUFFLEVBQUU7QUFDeEMsT0FBSSxFQUFFLFNBQVMsUUFBUSxDQUFFLFFBQU87QUFFaEMsVUFBTyxJQUFJLE1BQU07O0FBR25CLFNBQU87R0FDUCxDQUNELEtBQUssSUFBSTtBQU9aLFFBTG1DLFVBQVUsUUFDM0MsVUFBVSxXQUFXLENBQUMsU0FBUyxFQUMvQixlQUNEOzs7OztBQ25CSCxTQUFTLGdCQUFnQixPQUFPLEtBQUs7Q0FDbkMsSUFBSSxXQUFXLE1BQU0sS0FBSyxLQUFLO0NBQy9CLElBQUksa0JBQWtCLE1BQU0sTUFBTTtBQUVsQyxRQUFPLGVBQWUsVUFBVTtFQUM5QjtFQUNBO0VBQ0QsQ0FBQzs7Ozs7OztBQVFKLE1BQWFFLGVBQWEsWUFBWSxLQUFLLFNBQVMscUJBQXFCO0FBRXZFLFdBQVU7RUFBRSxHQUFHO0VBQVEsR0FBRztFQUFTOzs7Ozs7O0FBUW5DLFFBQU8sRUFDTCxTQUFTO0VBQ1AsU0FBUyxFQUNQLE1BQU0sUUFBTSxPQUFPO0FBQ2pCLE9BQUksQ0FBQyxnQkFBZ0IsT0FBTyxpQkFBaUIsRUFBRTtBQUM3QyxVQUFNLFVBQVU7QUFFaEI7O0FBS0YsU0FBTSxVQUFVLG1CQUZDLFFBQVEsTUFBTSxTQUFTLENBRU07S0FFakQ7RUFDRCxrQkFBa0IsUUFBTSxPQUFPO0FBQzdCLE9BQUksTUFBTSxRQUNSO0FBR0YsT0FBSUMsT0FBSyxLQUFLLE9BQU8sVUFBVSxvQkFBb0I7SUFDakQsSUFBSSxZQUFZQSxPQUFLLEtBQUssV0FBVyxNQUNsQyxNQUFNLEVBQUUsU0FBUyxTQUFTLGNBQzVCO0FBRUQsUUFBSSxVQUNGLE9BQU0sS0FBSyxLQUFLLHNCQUFzQixVQUFVLE1BQU07QUFHeEQsUUFBSSxVQUFVLE1BQU0sU0FBUyxjQUMzQixPQUFNLElBQUksTUFDUixvR0FDRDtBQUdILFdBQUssUUFBUTs7O0VBTWpCLGVBQWUsUUFBTSxPQUFPO0FBQzFCLE9BQUksTUFBTSxRQUNSO0FBR0YsT0FDRUEsT0FBSyxLQUFLLE9BQU8sU0FBUyxnQkFDMUJBLE9BQUssS0FBSyxPQUFPLFNBQVMsTUFBTSxLQUFLLE1BQU0scUJBQzNDO0FBQ0EsUUFDRUEsT0FBSyxLQUFLLFVBQVUsV0FBVyxLQUMvQkEsT0FBSyxLQUFLLFVBQVUsR0FBRyxTQUFTLGdCQUVoQyxPQUFNLElBQUksTUFDUixzRkFDRDtJQUdILE1BQU0sV0FBV0EsT0FBSyxLQUFLLFVBQVUsR0FBRztJQUN4QyxNQUFNLFVBQVUsWUFDZCxVQUNBLE1BQU0sU0FDTixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDcEI7SUFDRCxNQUFNLG9CQUFvQixJQUFJLE1BQU0sY0FBYyxRQUFRO0FBRTFELFdBQUssWUFBWSxrQkFBa0I7OztFQU12QyxlQUFlLFFBQU0sT0FBTztBQUMxQixPQUFJLENBQUMsTUFBTSxLQUFLLE1BQU0sb0JBQXFCO0FBRTNDLE9BQ0VBLE9BQUssS0FBSyxNQUFNLFNBQVMsZ0JBQ3pCQSxPQUFLLEtBQUssTUFBTSxTQUFTLE1BQU0sS0FBSyxNQUFNLG9CQUUxQyxRQUFLLFFBQVE7O0VBR2xCLEVBQ0Y7Ozs7Ozs7OztBQ3pHSCxTQUFnQixLQUFLLEtBQUs7QUFDeEIsUUFBTyxPQUFPLElBQUksSUFBSTs7QUFHeEIsU0FBZ0IsZUFBZSxNQUFNLE1BQU07Q0FDekMsTUFBTSxTQUFTLEtBQUs7QUFFcEIsS0FBSSxDQUFDLE9BQVEsUUFBTztBQUNwQixLQUFJLE9BQU8sU0FBUyxZQUFZLE9BQU8sVUFBVSxVQUFXLFFBQU87QUFFbkUsUUFBTyxlQUFlLFFBQVEsS0FBSzs7Ozs7QUFNckMsU0FBZ0IsV0FBVyxTQUFTO0FBQ2xDLEtBQUksb0JBQVksUUFBUSxDQUN0QixRQUFPO0FBS1QsUUFBTyx1Q0FGZ0IsU0FBUyxPQUFPLENBRVY7Ozs7Ozs7Ozs7QUFXL0IsU0FBZ0Isa0JBQWtCLEtBQUssTUFBTTtDQUMzQyxNQUFNLDBCQUFVLElBQUksS0FBSztDQUN6QixNQUFNLHVCQUFPLElBQUksS0FBSztDQUV0QixNQUFNLGVBQ0osU0FBUyxVQUFVLFNBQVMsU0FBUyxFQUFFLFFBQVFDLHNCQUFZLEdBQUcsRUFBRTtDQUVsRSxNQUFNLE1BQU0sZ0JBQVEsTUFBTSxLQUFLLGFBQWE7Q0FFNUMsTUFBTSxTQUFTLFNBQVMsVUFBVSxTQUFTO0FBRTNDLEtBQUksTUFBTSxTQUFTO0FBQ2pCLE1BQUksS0FBSyxTQUFTLE9BR2hCLG1CQUZpQixTQUFTLDBCQUEwQixLQUFLLEdBQUcsS0FBSyxVQUVyQyxTQUFTLEtBQUs7R0FFNUM7QUFJRixRQUFPO0VBQUU7RUFBUztFQUFNO0VBQUssSUFGcEIsS0FBSyxJQUFJO0VBRWU7Ozs7Ozs7Ozs7OztBQWFuQyxTQUFTLDBCQUEwQixNQUFNO0NBQ3ZDLE1BQU0sRUFBRSxhQUFhO0FBRXJCLEtBQUksQ0FBQyxTQUFTLFNBQVMsSUFBSSxDQUN6QixRQUFPO0NBR1QsTUFBTSxTQUFTLEtBQUs7QUFFcEIsS0FBSSxDQUFDLFVBQVUsT0FBTyxTQUFTLE9BRTdCLFFBQU87Q0FJVCxNQUFNLGlCQUFpQiwwQkFBMEIsT0FBTztBQUV4RCxRQUFPLFNBQVMsUUFBUSxNQUFNLGVBQWU7O0FBRy9DLFNBQVMsa0JBQWtCLEtBQUssU0FBUyxNQUFNO0NBQzdDLE1BQU0sYUFBYSxRQUFRO0FBQ3pCLE1BQUksTUFBTSxhQUFhO0FBQ3JCLE9BQUksU0FBUyxTQUFTLFdBQVcsQ0FBQyxlQUFlLFNBQVMsQ0FDeEQsU0FBUSxJQUFJLFNBQVMsTUFBTTtZQUNsQixTQUFTLFNBQVMsU0FBUyxDQUFDLGVBQWUsU0FBUyxDQUM3RCxNQUFLLElBQUksU0FBUyxNQUFNO0lBRTFCOztBQUdKLHNDQUFPLFVBQVUsQ0FBQyxZQUFZLElBQUk7Ozs7O0FDckdwQyxNQUFNQyxRQUFNO0FBRVosU0FBUyxPQUFPLE1BQU07QUFDcEIsUUFBTyxLQUFLLFNBQVM7O0FBR3ZCLFNBQVMsY0FBYyxNQUFNO0FBQzNCLFFBQU8sS0FBSyxTQUFTOzs7Ozs7QUFPdkIsU0FBUyxxQkFBcUIsTUFBTSxTQUFTO0NBQzNDLElBQUksZUFBZSxLQUFLO0NBQ3hCLElBQUksZ0JBQWdCLEtBQUssU0FBU0EsUUFBTTtBQUV4QyxNQUFLLFNBQVM7QUFFZCxRQUFPO0VBQ0w7RUFDQTtFQUNEOztBQUdILFNBQVMsZ0JBQWdCLEtBQUssU0FBUztDQUNyQyxNQUFNLGFBQWEsY0FBYztBQUMvQixZQUFVLE1BQU0sYUFBYTtBQUMzQixPQUFJLGVBQWUsU0FBUyxDQUFFO0FBRzlCLE9BQUksU0FBUyxTQUFTLFNBQVU7QUFNaEMsT0FBSSxZQUFZLFNBQVMsQ0FBRTtBQUUzQixPQUFJLFNBQVMsU0FBUyxRQUNwQixVQUFTLFNBQVMsTUFBTTtZQUNmLFNBQVMsU0FBUyxNQUMzQixVQUFTLFlBQ1BDLGdDQUFPLElBQUksRUFBRSxPQUFPLFNBQVMsT0FBTyxDQUFDLEVBQ3JDQSxnQ0FBTyxVQUFVLEVBQUUsT0FBTyxTQUFTLENBQUMsQ0FDckM7SUFFSDtBQUdGLFlBQVUsTUFBTSxhQUFhO0FBQzNCLE9BQUksU0FBUyxTQUFTLFlBQVksU0FBUyxVQUFVLFVBQ25ELFVBQVMsWUFBWSxHQUFHLFNBQVMsTUFBTTtJQUV6Qzs7QUFJSiw2Q0FGMkIsVUFBVSxDQUFDLFlBQVksSUFBSTs7QUFLeEQsU0FBUyxZQUFZLE1BQU07QUFDekIsS0FBSSxDQUFDLEtBQU0sUUFBTztBQUVsQixRQUFPLEtBQUssUUFBUSxVQUFVLGtCQUFrQixZQUFZLEtBQUssT0FBTzs7QUFHMUUsU0FBUyxrQkFBa0IsTUFBTTtDQUMvQixNQUFNLFNBQVMsS0FBSztBQUVwQixLQUFJLENBQUMsT0FBUSxRQUFPO0FBQ3BCLEtBQUksT0FBTyxTQUFTLFlBQVksT0FBTyxTQUFTLFlBQWEsUUFBTztBQUVwRSxRQUFPLGtCQUFrQixPQUFPOztBQUdsQyxTQUFnQixXQUFXLEtBQUssU0FBUyxVQUFVLFdBQVc7Q0FDNUQsTUFBTSxNQUFNLGdCQUFRLE1BQU0sSUFBSTs7Ozs7Q0FLOUIsTUFBTSxpQkFBaUI7RUFDckIsV0FBVyxFQUFFO0VBQ2IsaUJBQWlCLEVBQUU7RUFDbkIsZ0JBQWdCLEVBQUU7RUFDbEIsVUFBVSxFQUFFO0VBQ2I7Q0FFRCxNQUFNLDBCQUEwQixJQUFJLElBQUksT0FBTyxLQUFLLGVBQWUsQ0FBQztDQUVwRSxTQUFTLGdCQUFnQixNQUFNO0FBQzdCLE1BQUksS0FBSyxTQUFTLFNBQVU7QUFFNUIsU0FBTyx3QkFBd0IsSUFBSSxLQUFLLEtBQUs7O0NBRy9DLFNBQVMsdUJBQXVCLE1BQU07QUFDcEMsTUFBSSxDQUFDLEtBQUssTUFBTztBQUVqQixPQUFLLElBQUksR0FBRyxRQUFRLE9BQU8sUUFBUSxlQUFlLENBQ2hELEtBQUksSUFBSSxLQUFLLE9BQ1gsTUFBSyxRQUFRLElBQUksS0FBSzs7Q0FLNUIsU0FBUyx3QkFBd0IsTUFBTTtBQUNyQyxNQUFJLEtBQUssU0FBUyxhQUFhO0dBRTdCLElBQUksUUFEUSxLQUFLLE1BQU0sTUFBTSxJQUFJLENBQ2YsUUFBUSxNQUFNLGVBQWUsVUFBVSxHQUFHO0FBRTVELE9BQUksTUFBTSxPQUNSLE9BQU0sU0FBUyxNQUFNO0lBQ25CLElBQUksY0FBYyxlQUFlLFVBQVU7QUFFM0MsUUFBSSxDQUFDLFlBQWE7QUFFbEIsU0FBSyxRQUFRLEtBQUssTUFBTSxRQUFRLEdBQUcsWUFBWTtLQUMvQzs7QUFJTixPQUFLLElBQUksQ0FBQyxTQUFTLGdCQUFnQixPQUFPLFFBQ3hDLGVBQWUsU0FDaEIsRUFBRTtHQUNELElBQUksYUFBYSxPQUFPLFFBQVE7R0FDaEMsSUFBSSxpQkFBaUIsT0FBTyxZQUFZO0FBRXhDLFFBQUssUUFBUSxLQUFLLE1BQU0sUUFBUSxZQUFZLGVBQWU7Ozs7Ozs7OztBQVkvRCxLQUFJLE1BQU0sU0FBUzs7OztBQUlqQixNQUFJLGdCQUFnQixLQUFLLEVBQUU7R0FDekIsSUFBSSxPQUFPLEtBQUs7R0FDaEIsSUFBSSxFQUFFLGNBQWMsa0JBQWtCLHFCQUFxQixNQUFNLFFBQVE7QUFFekUsa0JBQWUsTUFBTSxnQkFBZ0I7QUFFckM7O0dBRUY7QUFHRixLQUFJLE1BQU0sU0FBUztBQUNqQixNQUFJLGNBQWMsS0FBSyxFQUFFO0FBQ3ZCLDBCQUF1QixLQUFLO0FBQzVCLDJCQUF3QixLQUFLO0FBRTdCOztBQUdGLE1BQUksT0FBTyxLQUFLLEVBQUU7Ozs7QUFJaEIsT0FBSSxrQkFBa0IsS0FBSyxDQUFFO0FBRTdCLFFBQUssV0FBVyxnQkFBZ0IsS0FBSyxVQUFVLFFBQVE7QUFFdkQ7O0dBRUY7Q0FFRixNQUFNLGVBQWUsSUFBSSxVQUFVO0FBRW5DLFFBQ0U7RUFDRSxNQUFNLFNBQVM7RUFDZixZQUFZLFVBQVUsVUFBVSxNQUFNO0VBQ3RDLGFBQWEsU0FBUztFQUN0QixZQUFZLE1BQU07RUFDbkIsQ0FDRSxPQUFPLFFBQVEsQ0FDZixLQUFLLEtBQUssR0FBRzs7Ozs7QUNsTXBCLE1BQU0sTUFBTTtBQUNaLE1BQU0sTUFBTTtBQUVaLE1BQWEsVUFBVTtDQUNyQixJQUFJO0VBQ0YsT0FBTyxXQUFTO0FBQ2QsVUFBT0MsVUFBUSxTQUFTLElBQUk7O0VBRTlCLFVBQVUsV0FBUztBQUNqQixVQUFPQSxVQUFRLFNBQVMsZUFBZTs7RUFFMUM7Q0FDRCxRQUFRO0VBU04sT0FBTyxTQUFTLFNBQVMsYUFBYSxNQUFNO0dBQzFDLElBQUksTUFBTSxLQUFLLFVBQVUsTUFBTSxRQUFRLEdBQUcsSUFBSSxPQUFPLG1CQUFtQixZQUFZO0FBRXBGLE9BQUksS0FDRixRQUFPLFNBQVMsbUJBQW1CLEtBQUs7QUFHMUMsVUFBTzs7RUFFVCxPQUFPLFdBQVM7R0FDZCxJQUFJLENBQUMsTUFBTSxPQUFPQSxVQUFRLE1BQU0sSUFBSTtBQUVwQyxVQUFPLEtBQUssTUFBTSxFQUFFLENBQUMsUUFBUSxJQUFJLE9BQU8sR0FBRztHQUUzQyxJQUFJLENBQUMsU0FBU0MsVUFBUSxLQUFLLE1BQU0sSUFBSTtHQUVyQyxJQUFJLFNBQVMsSUFBSSxnQkFBZ0IsSUFBSTtBQUVyQyxVQUFPO0lBQ0w7SUFDQTtJQUNBLEtBQUssT0FBTyxJQUFJLE1BQU07SUFDdEIsTUFBTSxPQUFPLElBQUksT0FBTztJQUN4QixNQUFNLE9BQU8sSUFBSSxPQUFPO0lBQ3pCOztFQUVKO0NBQ0QsV0FBVztFQVFULE9BQU8sU0FBUyxTQUFTLFVBQVU7QUFDakMsVUFBTyxLQUFLQyxrQkFBSyxTQUFTLFNBQVMsQ0FBQyxVQUFVLFFBQVEsV0FBVzs7RUFFbkUsT0FBTyxXQUFTO0dBQ2QsTUFBTSxDQUFDLFVBQVUsTUFBTUYsVUFBUSxNQUFNLElBQUk7R0FDekMsTUFBTSxTQUFTLElBQUksZ0JBQWdCLEdBQUc7QUFFdEMsVUFBTztJQUNMO0lBQ0EsU0FBUyxPQUFPLElBQUksVUFBVTtJQUM5QixTQUFTLE9BQU8sSUFBSSxTQUFTO0lBQzlCOztFQUVKO0NBQ0Y7Ozs7QUNqRUQsTUFBTUcsU0FBTzs7QUFHYixNQUFNLDBCQUEwQixJQUFJLElBQUk7Q0FDdEM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNELENBQUM7Ozs7Ozs7O0FBU0YsU0FBZ0IsVUFBVSxVQUFVLEVBQUUsRUFBRTtDQUN0QyxNQUFNQyxRQUFNLFFBQVEsS0FBSzs7Q0FHekIsSUFBSTs7Q0FHSixJQUFJOzs7Ozs7O0NBUUosU0FBUyxjQUFjLElBQUksVUFBVTtFQUNuQyxNQUFNLFNBQVMsUUFBUSxVQUFVLE9BQU8sR0FBRztFQUMzQyxNQUFNLG1CQUFtQkMsa0JBQUssU0FBU0QsT0FBSyxTQUFTO0FBRXJELFNBQU87R0FDTCxJQUFJO0dBQ0osTUFBTSxHQUNIRCxTQUFPO0lBQ04sU0FBUyxPQUFPO0lBQ2hCLFVBQVU7SUFDVixVQUFVO0lBQ1gsRUFDRjtHQUNGOztBQUdILFFBQU87RUFDTCxNQUFNO0VBQ04sVUFBVSxJQUFJLFVBQVU7QUFHdEIsT0FBSSxRQUFRLEdBQUcsVUFBVSxHQUFHLEVBQUU7SUFDNUIsTUFBTSxTQUFTLFFBQVEsVUFBVSxPQUFPLEdBQUc7QUFPM0MsV0FBTyxjQUFjLElBTEpFLGtCQUFLLFFBQ3BCQSxrQkFBSyxRQUFRLFNBQVMsRUFDdEJBLGtCQUFLLFNBQVMsT0FBTyxTQUFTLENBQy9CLENBRWlDOzs7RUFHdEMsS0FBSyxJQUFJO0dBQ1AsTUFBTSxPQUFPLEtBQUssY0FBYyxHQUFHLEVBQUUsT0FBT0Y7QUFFNUMsT0FBSSxNQUFNO0FBQ1IsU0FBSyxhQUFhLEtBQUssU0FBUztBQVdoQyxXQVBVLHFDQUZjLEtBQUssVUFBVSxRQUFRLEVBSTdDLEtBQUssU0FDTCxLQUFLLFVBQ0wsUUFBUSxVQUNUOzs7RUFLTCxNQUFNO0dBQ0osTUFBTSxlQUFlLFFBQVE7QUFDM0IsaUJBQWE7QUFJYixRQUFJO0FBS0Ysc0JBRm1CLE1BQU0sc0NBRkssT0FBTyxLQUFLLENBQ2pCLFFBQVEsT0FBTyxHQUdiO1lBQ3JCOztHQVlWLE1BQU0sS0FBSyxJQUFJO0FBQ2IsUUFBSSxRQUFRLEdBQUcsVUFBVSxHQUFHLEVBQUU7S0FDNUIsTUFBTSxTQUFTLFFBQVEsVUFBVSxPQUFPLEdBQUc7S0FFM0MsSUFBSSxpQ0FBb0IsT0FBTyxVQUFVLFFBQVE7S0FDakQsSUFBSSxtQkFBbUJFLGtCQUFLLFNBQVNELE9BQUssT0FBTyxTQUFTO0tBRTFELE1BQU0sTUFBTUMsa0JBQUssUUFBUSxPQUFPLFNBQVMsQ0FBQyxhQUFhO0FBRXZELFNBQUksd0JBQXdCLElBQUksSUFBSSxFQUFFO0FBQ3BDLFVBQUksQ0FBQyxjQUFjLENBQUMsY0FDbEIsT0FBTSxJQUFJLE1BQ1IseURBQXlELElBQUksc0VBRTlEO0FBU0gsY0FOZSxNQUFNLGNBQ25CLE1BQ0EsT0FBTyxVQUNQLFdBQ0QsRUFFYTs7QUFVaEIsWUFQVSxXQUNSLE1BQ0EsT0FBTyxTQUNQLGtCQUNBLFFBQVEsVUFDVDs7O0dBS047RUFDRjs7Ozs7QUNqSkgsTUFBTSxPQUFPOzs7Ozs7Ozs7O0FBV2IsU0FBZ0IsT0FBTyxVQUFVLEVBQUUsRUFBRTtDQUNuQyxNQUFNQyxRQUFNLFFBQVEsS0FBSzs7Q0FHekIsSUFBSTs7Q0FHSixJQUFJOzs7O0NBS0osU0FBUyxjQUFjLElBQUksVUFBVTtFQUNuQyxNQUFNLFNBQVMsUUFBUSxPQUFPLE9BQU8sR0FBRztFQUV4QyxNQUFNLG1CQUFtQkMsa0JBQUssU0FBU0QsT0FBSyxTQUFTO0FBRXJELFNBQU87R0FDTCxJQUFJLFNBQVMsTUFBTSxJQUFJLENBQUM7R0FDeEIsTUFBTSxHQUNILE9BQU87SUFDTixRQUFRLE9BQU87SUFDZixTQUFTLE9BQU87SUFDaEIsVUFBVTtJQUNWLE1BQU0sT0FBTztJQUNkLEVBQ0Y7R0FDRjs7QUFHSCxRQUFPO0VBQ0wsTUFBTTtFQUNOLFVBQVUsSUFBSSxVQUFVO0FBQ3RCLE9BQUksUUFBUSxHQUFHLE9BQU8sR0FBRyxFQUFFO0lBQ3pCLE1BQU0sU0FBUyxRQUFRLE9BQU8sT0FBTyxHQUFHO0FBT3hDLFdBQU8sY0FBYyxJQUxKQyxrQkFBSyxRQUNwQkEsa0JBQUssUUFBUSxTQUFTLEVBQ3RCLEdBQUdBLGtCQUFLLFNBQVMsVUFBVUEsa0JBQUssUUFBUSxTQUFTLENBQUMsQ0FBQyxHQUFHLE9BQU8sS0FBSyxNQUNuRSxDQUVpQzs7O0VBR3RDLE1BQU0sS0FBSyxJQUFJO0dBQ2IsTUFBTSxPQUFPLEtBQUssY0FBYyxHQUFHLEVBQUUsT0FBTztBQUU1QyxPQUFJLE1BQU07SUFDUixJQUFJLFNBQVMsS0FBSztBQUVsQixRQUFJLEtBQUssTUFBTTtBQUNiLFNBQUksQ0FBQyxjQUFjLENBQUMsY0FDbEIsT0FBTSxJQUFJLE1BQ1IsMENBQTBDLEtBQUssS0FBSyxnR0FFckQ7S0FHSCxNQUFNLGVBQWUsR0FBRyxLQUFLLFNBQVMsR0FBRyxLQUFLO0FBRzlDLGVBRmUsTUFBTSxjQUFjLFFBQVEsY0FBYyxXQUFXLEVBRXBEOztBQVVsQixXQVBZLFdBQ1YsUUFDQSxLQUFLLFNBQ0wsWUFBWSxLQUFLLFlBQ2pCLFFBQVEsVUFDVDs7O0VBS0wsTUFBTSxFQUNKLE1BQU0sZUFBZSxRQUFRO0FBQzNCLGdCQUFhO0FBSWIsT0FBSTtBQUtGLHFCQUZtQixNQUFNLHNDQUZLLE9BQU8sS0FBSyxDQUNqQixRQUFRLE9BQU8sR0FHYjtXQUNyQjtLQUtYO0VBQ0Y7Ozs7Ozs7Ozs7Ozs7QUNoR0gsTUFBYUMsMkNBQTJCLFVBQVUsRUFBRSxLQUFLO0FBQ3ZELFFBQU8sQ0FBQyxVQUFVLFFBQVEsRUFBRSxPQUFPLFFBQVEsQ0FBQztFQUM1Qzs7Ozs7Ozs7Ozs7OztBQ0RGLFNBQWdCLFlBQVksVUFBVTtDQUNwQyxJQUFJLFdBQVc7Q0FDZixJQUFJLFlBQVksa0JBQWtCLFNBQVM7Ozs7Ozs7OztDQVUzQyxJQUFJLFlBQVksU0FBUyxTQUFTQyxrQkFBSyxLQUFLLFdBQVcsTUFBTSxDQUFDO0NBQzlELElBQUksWUFBWSxTQUFTLFNBQVNBLGtCQUFLLEtBQUssV0FBVyxNQUFNLENBQUM7QUFFOUQsS0FDRSxFQUFFLGFBQWEsY0FDZixDQUFDLFNBQVMsU0FBUyxpQkFBaUIsYUFBYSxFQUNqRDtFQUVBLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFERixTQUFTLFFBQVEsV0FBVyxHQUFHLENBQ1QsTUFBTUEsa0JBQUssSUFBSSxDQUFDLE9BQU8sUUFBUTtFQUN2RSxJQUFJLFFBQVE7QUFFWixNQUFJLFdBQVcsV0FBVyxJQUFJLEVBQUU7R0FDOUIsSUFBSSxHQUFHLEdBQUcsVUFBVTtBQUVwQixXQUFROztFQUdWLElBQUksV0FBV0Esa0JBQUssS0FBSyxHQUFHLE1BQU07QUFVbEMsU0FGb0JBLGtCQUFLLEtBQUssV0FBVyxPQUFPLFNBQVM7O0FBTTNELEtBQUksQ0FBQyxTQUFTLFNBQVMsVUFBVSxDQUMvQixRQUFPO0FBTVQsUUFBTzs7Ozs7QUM1RFQsU0FBZ0IsZUFBZSxFQUFFLFNBQVMsTUFBTSxXQUFXO0NBQ3pELElBQUksUUFBUSxFQUFFO0NBR2QsSUFBSSx3QkFBd0IsQ0FBQyxnQkFBZ0IsY0FBYztDQUUzRCxTQUFTLGNBQWMsS0FBSztBQUMxQixNQUFJLENBQUMsSUFBSyxRQUFPO0FBRWpCLFNBQU8sc0JBQXNCLE1BQU0sY0FBYyxjQUFjLElBQUk7O0FBR3JFLFFBQU87RUFDTCxTQUFTLE1BQU07QUFDYixPQUFJLEtBQUssU0FBUyxTQUNoQjtRQUFJLEtBQUssTUFBTSxTQUFTLGNBQWMsS0FBSyxNQUFNLE9BQU87S0FDdEQsTUFBTSxlQUFlLFlBQVksS0FBSyxNQUFNLE9BQU8sU0FBUyxRQUFRO0FBRXBFLFVBQUssTUFBTSxRQUFRO2VBQ1YsS0FBSyxNQUFNLFNBQVMsbUJBQzdCO1VBQUssSUFBSSxRQUFRLEtBQUssTUFBTSxNQUMxQixLQUFJLEtBQUssU0FBUyxjQUFjLEtBQUssTUFHbkMsTUFBSyxRQUZnQixZQUFZLEtBQUssT0FBTyxTQUFTLFFBQVE7Y0FHckQsS0FBSyxTQUFTLG9CQUN2Qix1QkFBTyxTQUFTLE1BQU0sRUFDcEIsY0FBYyxRQUFNO0FBT2xCLGFBQUssUUFOZ0IsWUFDbkJDLE9BQUssT0FDTCxTQUNBLFFBQ0Q7UUFJSixDQUFDOzs7O0VBT1osWUFBWSxNQUFNO0FBQ2hCLE9BQUksS0FBSyxJQUFJLEtBQUssSUFBSSxFQUFFO0lBRXRCLE1BQU0sWUFBWSxLQUFLLFdBQVcsTUFBTSxTQUFTLEtBQUssU0FBUyxRQUFRO0FBRXZFLFFBQUksVUFDRixXQUFVLE1BQU0sU0FBUyxNQUFNO1FBRy9CLE1BQUssV0FBVyxLQUNkQyxzQkFBTyxTQUFTLEtBQUssU0FBU0Esc0JBQU8sU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUM3RDs7O0VBS1AsS0FBSztHQUNILE1BQU0sTUFBTTtBQUNWLFVBQU0sS0FBSyxLQUFLOztHQUVsQixPQUFPO0FBQ0wsVUFBTSxLQUFLOztHQUVkO0VBRUQsa0JBQWtCLE1BQU07R0FDdEIsSUFBSTtBQUVKLE9BQ0UsY0FBYyxTQUFTLEtBQUssS0FBSyxDQUFDLElBQ2xDLEtBQUssUUFBUSxXQUFXLEtBQ3hCLEtBQUssT0FBTyxHQUFHLFNBQVMsZ0JBRXhCLFlBQVcsS0FBSyxPQUFPLEdBQUc7QUFHNUIsT0FDRSxjQUFjLFNBQVMsS0FBSyxNQUFNLEtBQUssQ0FBQyxJQUN4QyxLQUFLLE1BQU0sUUFBUSxXQUFXLEtBQzlCLEtBQUssTUFBTSxPQUFPLEdBQUcsU0FBUyxnQkFFOUIsWUFBVyxLQUFLLEtBQUssT0FBTyxHQUFHO0FBR2pDLE9BQUksVUFBVTtJQUNaLE1BQU0sV0FBV0Esc0JBQU8sU0FBUyxLQUFLLFlBQVksVUFBVSxRQUFRLENBQUM7SUFDckUsTUFBTSxTQUFTLE1BQU0sTUFBTSxTQUFTO0FBRXBDLFFBQUksUUFBUSxTQUFTLFdBQ25CLFFBQU8sWUFBWTtBQUdyQixXQUFPOzs7RUFJWCxjQUFjLE1BQU07QUFDbEIsT0FDRSxjQUFjLFNBQVMsS0FBSyxLQUFLLENBQUMsSUFDbEMsS0FBSyxRQUFRLFdBQVcsS0FDeEIsS0FBSyxPQUFPLEdBQUcsU0FBUyxpQkFDeEI7SUFDQSxNQUFNLFdBQVcsS0FBSyxPQUFPLEdBQUc7QUFNaEMsV0FMaUJBLHNCQUFPLFNBQVMsUUFDL0IsaUJBQ0EsWUFBWSxVQUFVLFFBQVEsQ0FDL0I7OztFQUtOOztBQUdILFNBQVMsU0FBUyxRQUFNO0FBQ3RCLEtBQUksQ0FBQ0MsT0FBTTtBQUVYLEtBQUksV0FBV0EsT0FDYixRQUFPQSxPQUFLOzs7OztBQU9kLFFBQU9BLE9BQUs7Ozs7O0FDOUdkLE1BQU0sYUFBYTtDQUNqQixNQUFNO0NBQ04sU0FBUyxFQUFFO0NBQ1o7Ozs7QUFLRCxTQUFnQixhQUFhLFFBQVE7Ozs7O0FBS25DLFFBQU8sU0FBUyxVQUFVLEtBQUs7RUFDN0IsSUFBSSxNQUFNQyxxQkFBUSxLQUFLO0FBT3ZCLE1BQUksQ0FMYSxlQUFlLElBQUksVUFBVTtHQUM1QyxpQkFBaUIsT0FBTztHQUN4QjtHQUNELENBQUMsQ0FHQSxRQUFPO0VBR1QsSUFBSSxlQUFlLFlBQVksSUFBSSxTQUFTO0VBRTVDLElBQUksVUFBVSxtQkFERyxRQUFRLGFBQWEsQ0FDTTs7Ozs7O0VBTzVDLElBQUksNkJBQWEsSUFBSSxLQUFLOzs7Ozs7RUFPMUIsSUFBSSxnQ0FBZ0IsSUFBSSxLQUFLOzs7O0VBSzdCLFNBQVMsUUFBUSxRQUFNO0FBQ3JCLFFBQUssSUFBSSxRQUFRQyxPQUFLLEtBQ3BCLFlBQVcsSUFBSSxLQUFLO0FBR3RCLFFBQUssSUFBSSxRQUFRQSxPQUFLLFFBQ3BCLGVBQWMsSUFBSSxLQUFLOztFQUkzQixJQUFJLFVBQVUsV0FBVyxhQUFhO0VBQ3RDLElBQUksT0FBTyxXQUFXLFFBQVE7RUFDOUIsSUFBSSxlQUFlLFdBQVcsUUFBUSxRQUFRLE1BQU1DLGtCQUFLLEtBQUssR0FBRyxDQUFDOzs7OztBQU1sRSxNQUFJLE1BQU07QUFDUixXQUFRLEtBQUs7R0FFYixJQUFJLGFBQWEsUUFBUSxVQUFVLE9BQU8sS0FBSyxJQUFJLFNBQVMsYUFBYTs7OztBQUt6RSxPQUFJLEtBQUssUUFBUSxvQkFBb0IsV0FBVzs7RUFHbEQsSUFBSSxXQUFXLGVBQWU7R0FDNUIsU0FBUztHQUNULE1BQU07R0FDTjtHQUNELENBQUM7QUFFRixTQUFPO0dBQ0wsTUFBTTtHQUNOLFNBQVM7SUFFUCxHQUFHO0lBT0gsU0FBUyxNQUFNOzs7O0tBSWIsSUFBSSxXQUFXLEtBQUssS0FBSyxNQUN0QixNQUFNLEVBQUUsU0FBUyxpQkFBaUIsRUFBRSxRQUFRLFFBQzlDO0FBRUQsU0FBSSxtQkFBbUIsU0FBUyxFQUFFO01BQ2hDLElBQUksTUFBTSxZQUFZLFNBQVM7TUFDL0IsSUFBSSxPQUFPLGlCQUFpQixTQUFTO01BQ3JDLElBQUlELFNBQU8sa0JBQWtCLEtBQUssS0FBSztBQUV2QyxjQUFRQSxPQUFLO0FBRWIsVUFBSSw4QkFBOEIsU0FBUzs7OztBQUl6QztBQUdGLFVBQUk7Ozs7OztBQU1GLGNBQVEsS0FDTixpREFBaUQsS0FBSywyS0FHdkQ7TUFHSCxJQUFJLGFBQWEsUUFBUSxPQUFPLE9BQU9BLE9BQUssSUFBSSxTQUFTLEtBQUssS0FBSztBQUVuRSxVQUFJLEtBQUssUUFBUSxvQkFBb0IsV0FBVzs7O0lBTXBELFNBQVMsR0FBRyxNQUFNO0FBQ2hCLFlBQU8sU0FBUyxTQUFTLEdBQUcsS0FBSzs7SUFFbkMsWUFBWSxNQUFNLFFBQVE7QUFFeEIsY0FBUyxZQUFZLE1BQU0sT0FBTztBQUVsQyxTQUFJLG1CQUFtQixLQUFLLEVBQUU7QUFDNUIsVUFBSSxPQUFPLFFBQVEsS0FBSyxTQUFTLFdBQy9CLE9BQU0sSUFBSSxNQUNSLGlGQUNEO0FBR0gsVUFBSSw4QkFBOEIsS0FBSyxFQUFFO09BRXZDLElBQUksYUFBYSxXQUROLFlBQVksS0FBSyxFQUcxQixTQUNBLGNBQ0EsT0FBTyxVQUNSOzs7O0FBS0QsWUFBSyxXQUFXLENBQUMsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLENBQUM7QUFFdEQ7O0FBSUYsYUFBTzs7QUFHVCxTQUFJLDhCQUE4QixLQUFLLENBQ3JDLE9BQU0sSUFBSSxNQUNSLHNGQUNEOztJQUdMLGtCQUFrQixHQUFHLE1BQU07QUFDekIsWUFBTyxTQUFTLGtCQUFrQixHQUFHLEtBQUs7O0lBRTVDLGNBQWMsR0FBRyxNQUFNO0FBQ3JCLFlBQU8sU0FBUyxjQUFjLEdBQUcsS0FBSzs7SUFFekM7R0FDRjs7Ozs7O0FBT0wsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSxzQkFBc0I7QUFFNUIsU0FBUyxtQkFBbUIsTUFBTTtBQUNoQyxLQUFJLENBQUMsS0FBTTtBQUNYLEtBQUksS0FBSyxRQUFRLFFBQVM7QUFDMUIsS0FBSSxLQUFLLFNBQVMsY0FBZTtBQUVqQyxRQUFPLEtBQUssV0FBVyxNQUNwQixjQUFjLFVBQVUsU0FBUyxzQkFDbkM7O0FBR0gsU0FBUyw4QkFBOEIsTUFBTTtBQUMzQyxLQUFJLENBQUMsS0FBTTtBQUNYLEtBQUksS0FBSyxRQUFRLFFBQVM7QUFDMUIsS0FBSSxLQUFLLFNBQVMsY0FBZTtBQUVqQyxLQUFJLGlCQUFpQixLQUFLLENBQ3hCLFFBQU87QUFHVCxRQUFPLEtBQUssV0FBVyxNQUNwQixjQUFjLFVBQVUsU0FBUyxzQkFDbkM7Ozs7Ozs7O0FBU0gsU0FBUyxpQkFBaUIsTUFBTTtBQUM5QixLQUFJLENBQUMsS0FBTSxRQUFPO0FBQ2xCLEtBQUksS0FBSyxRQUFRLFFBQVMsUUFBTztBQUNqQyxLQUFJLEtBQUssU0FBUyxjQUFlLFFBQU87Q0FFeEMsTUFBTSxPQUFPLEtBQUssV0FBVyxNQUMxQixjQUFjLFVBQVUsU0FBUyxvQkFDbkM7QUFFRCxLQUFJLENBQUMsS0FBTSxRQUFPO0NBR2xCLE1BQU0sUUFBUSxLQUFLO0FBRW5CLEtBQUksT0FBTyxTQUFTLFdBQVksUUFBTyxNQUFNLFNBQVM7QUFFdEQsUUFBTzs7QUFHVCxTQUFTLFlBQVksTUFBTTtBQUd6QixRQUZtQixLQUFLLFNBQVMsUUFBUSxNQUFNLEVBQUUsU0FBUyxXQUFXLENBRWpELEtBQUssTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEdBQUc7Ozs7O0FDeFFsRCxNQUFhLFlBQVk7Q0FDdkIsTUFBTUUsV0FBUztDQUNmLFFBQVFBLFdBQVM7Q0FDakIsT0FBT0M7Q0FDUCxVQUFVQztDQUNYIn0=
1416
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsLUR4SU54dGJwLmNqcyIsIm5hbWVzIjpbImhhc2giLCJoYXNoIiwiaGFzaEZyb21Nb2R1bGVQYXRoIiwiaGFzaFBvc2l4TW9kdWxlUGF0aCIsInBhdGgiLCJmc1N5bmMiLCJzY29wZWRDU1MiLCJwYXRoIiwic2Nzc1N5bnRheCIsIlNFUCIsInBhcnNlciIsInJlcXVlc3QiLCJoYXNoIiwicGF0aCIsIk1FVEEiLCJDV0QiLCJwYXRoIiwiQ1dEIiwicGF0aCIsInVucGx1Z2luIiwicGF0aCIsIm5vZGUiLCJyZWNhc3QiLCJwYXRoIiwicHJvY2VzcyIsImluZm8iLCJwYXRoIiwidW5wbHVnaW4iLCJiYWJlbC5zY29wZWRDU1MiLCJ0ZW1wbGF0ZS5jcmVhdGVQbHVnaW4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3BhdGgvY29uc3QuanMiLCIuLi8uLi9zcmMvbGliL3BhdGgvbWQ1LmpzIiwiLi4vLi4vc3JjL2xpYi9wYXRoL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyIsIi4uLy4uL3NyYy9saWIvcGF0aC91dGlscy5qcyIsIi4uLy4uL3NyYy9saWIvcmVuYW1lQ2xhc3MuanMiLCIuLi8uLi9zcmMvYnVpbGQvYmFiZWwtcGx1Z2luLmpzIiwiLi4vLi4vc3JjL2xpYi9jc3MvdXRpbHMuanMiLCIuLi8uLi9zcmMvbGliL2Nzcy9yZXdyaXRlLmpzIiwiLi4vLi4vc3JjL2xpYi9yZXF1ZXN0LmpzIiwiLi4vLi4vc3JjL2J1aWxkL3VucGx1Z2luLWNvbG9jYXRlZC5qcyIsIi4uLy4uL3NyYy9idWlsZC91bnBsdWdpbi1pbmxpbmUuanMiLCIuLi8uLi9zcmMvYnVpbGQvc2NvcGVkLWNzcy11bnBsdWdpbi5qcyIsIi4uLy4uL3NyYy9saWIvcGF0aC90ZW1wbGF0ZS10cmFuc2Zvcm0tcGF0aHMuanMiLCIuLi8uLi9zcmMvbGliL3Jld3JpdGVIYnMuanMiLCIuLi8uLi9zcmMvYnVpbGQvdGVtcGxhdGUtcGx1Z2luLmpzIiwiLi4vLi4vc3JjL2J1aWxkL3B1YmxpYy1leHBvcnRzL2FsbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuLyoqXG4gKiBKb2luIHdpbGwgY29udmVydCB0byB3aGF0ZXZlciBpcyBhcHByb3ByaWF0ZSBmcm8gdGhlIGN1cnJlbnQgcGxhdGZvcm1cbiAqL1xuXG5leHBvcnQgY29uc3QgbGVhZGluZ1NsYXNoUGF0aCA9IHtcbiAgZW1icm9pZGVyRGlyOiBwYXRoLmpvaW4oJy9ub2RlX21vZHVsZXMvLmVtYnJvaWRlci8nKSxcbiAgYXRFbWJyb2lkZXI6IHBhdGguam9pbignL0BlbWJyb2lkZXInKSxcbiAgY29tcG9uZW50c0RpcjogcGF0aC5qb2luKCcvY29tcG9uZW50cy8nKSxcbiAgdGVtcGxhdGVzRGlyOiBwYXRoLmpvaW4oJy90ZW1wbGF0ZXMvJyksXG4gIHJvdXRlc0RpcjogcGF0aC5qb2luKCcvcm91dGVzLycpLFxuICB0ZXN0ZW06IHBhdGguam9pbignL3Rlc3RlbScpLFxuICBzcmM6IHBhdGguam9pbignL3NyYy8nKSxcbiAgYXBwOiBwYXRoLmpvaW4oJy9hcHAvJyksXG59O1xuXG5leHBvcnQgY29uc3QgYmFyZVBhdGggPSB7XG4gIHBucG1EaXI6IHBhdGguam9pbignbm9kZV9tb2R1bGVzLy5wbnBtJyksXG59O1xuIiwiLypcbiAqIEphdmFTY3JpcHQgTUQ1XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9KYXZhU2NyaXB0LU1ENVxuICpcbiAqIENvcHlyaWdodCAyMDExLCBTZWJhc3RpYW4gVHNjaGFuXG4gKiBodHRwczovL2JsdWVpbXAubmV0XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqXG4gKiBCYXNlZCBvblxuICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBNRDUgTWVzc2FnZVxuICogRGlnZXN0IEFsZ29yaXRobSwgYXMgZGVmaW5lZCBpbiBSRkMgMTMyMS5cbiAqIFZlcnNpb24gMi4yIENvcHlyaWdodCAoQykgUGF1bCBKb2huc3RvbiAxOTk5IC0gMjAwOVxuICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBlcnQsIFlkbmFyLCBMb3N0aW5ldFxuICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNlXG4gKiBTZWUgaHR0cDovL3BhamhvbWUub3JnLnVrL2NyeXB0L21kNSBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIE1vZGlmaWNhdGlvbnM6XG4gKiAtIHJlbW92ZWQgSUlGRSwgZXhwb3J0ZWQgbWQ1ICh0aGlzIGZpbGUgaXMgbm93IEVTTSlcbiAqL1xuXG4vKipcbiAqIEFkZCBpbnRlZ2Vycywgd3JhcHBpbmcgYXQgMl4zMi5cbiAqIFRoaXMgdXNlcyAxNi1iaXQgb3BlcmF0aW9ucyBpbnRlcm5hbGx5IHRvIHdvcmsgYXJvdW5kIGJ1Z3MgaW4gaW50ZXJwcmV0ZXJzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IEZpcnN0IGludGVnZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFNlY29uZCBpbnRlZ2VyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBTdW1cbiAqL1xuZnVuY3Rpb24gc2FmZUFkZCh4LCB5KSB7XG4gIHZhciBsc3cgPSAoeCAmIDB4ZmZmZikgKyAoeSAmIDB4ZmZmZik7XG4gIHZhciBtc3cgPSAoeCA+PiAxNikgKyAoeSA+PiAxNikgKyAobHN3ID4+IDE2KTtcblxuICByZXR1cm4gKG1zdyA8PCAxNikgfCAobHN3ICYgMHhmZmZmKTtcbn1cblxuLyoqXG4gKiBCaXR3aXNlIHJvdGF0ZSBhIDMyLWJpdCBudW1iZXIgdG8gdGhlIGxlZnQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG51bSAzMi1iaXQgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0gY250IFJvdGF0aW9uIGNvdW50XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSb3RhdGVkIG51bWJlclxuICovXG5mdW5jdGlvbiBiaXRSb3RhdGVMZWZ0KG51bSwgY250KSB7XG4gIHJldHVybiAobnVtIDw8IGNudCkgfCAobnVtID4+PiAoMzIgLSBjbnQpKTtcbn1cblxuLyoqXG4gKiBCYXNpYyBvcGVyYXRpb24gdGhlIGFsZ29yaXRobSB1c2VzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBxIHFcbiAqIEBwYXJhbSB7bnVtYmVyfSBhIGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiIGJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzIHNcbiAqIEBwYXJhbSB7bnVtYmVyfSB0IHRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJlc3VsdFxuICovXG5mdW5jdGlvbiBtZDVjbW4ocSwgYSwgYiwgeCwgcywgdCkge1xuICByZXR1cm4gc2FmZUFkZChiaXRSb3RhdGVMZWZ0KHNhZmVBZGQoc2FmZUFkZChhLCBxKSwgc2FmZUFkZCh4LCB0KSksIHMpLCBiKTtcbn1cblxuLyoqXG4gKiBCYXNpYyBvcGVyYXRpb24gdGhlIGFsZ29yaXRobSB1c2VzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhIGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiIGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjIGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkIGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzIHNcbiAqIEBwYXJhbSB7bnVtYmVyfSB0IHRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJlc3VsdFxuICovXG5mdW5jdGlvbiBtZDVmZihhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oKGIgJiBjKSB8ICh+YiAmIGQpLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuLyoqXG4gKiBCYXNpYyBvcGVyYXRpb24gdGhlIGFsZ29yaXRobSB1c2VzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhIGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiIGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjIGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkIGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzIHNcbiAqIEBwYXJhbSB7bnVtYmVyfSB0IHRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJlc3VsdFxuICovXG5mdW5jdGlvbiBtZDVnZyhhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oKGIgJiBkKSB8IChjICYgfmQpLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuLyoqXG4gKiBCYXNpYyBvcGVyYXRpb24gdGhlIGFsZ29yaXRobSB1c2VzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhIGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiIGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjIGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkIGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzIHNcbiAqIEBwYXJhbSB7bnVtYmVyfSB0IHRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJlc3VsdFxuICovXG5mdW5jdGlvbiBtZDVoaChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oYiBeIGMgXiBkLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuLyoqXG4gKiBCYXNpYyBvcGVyYXRpb24gdGhlIGFsZ29yaXRobSB1c2VzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhIGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiIGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjIGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkIGRcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzIHNcbiAqIEBwYXJhbSB7bnVtYmVyfSB0IHRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJlc3VsdFxuICovXG5mdW5jdGlvbiBtZDVpaShhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oYyBeIChiIHwgfmQpLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIE1ENSBvZiBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzLCBhbmQgYSBiaXQgbGVuZ3RoLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHggQXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3Jkc1xuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBCaXQgbGVuZ3RoXG4gKiBAcmV0dXJucyB7QXJyYXk8bnVtYmVyPn0gTUQ1IEFycmF5XG4gKi9cbmZ1bmN0aW9uIGJpbmxNRDUoeCwgbGVuKSB7XG4gIC8qIGFwcGVuZCBwYWRkaW5nICovXG4gIHhbbGVuID4+IDVdIHw9IDB4ODAgPDwgbGVuICUgMzI7XG4gIHhbKCgobGVuICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IGxlbjtcblxuICB2YXIgaTtcbiAgdmFyIG9sZGE7XG4gIHZhciBvbGRiO1xuICB2YXIgb2xkYztcbiAgdmFyIG9sZGQ7XG4gIHZhciBhID0gMTczMjU4NDE5MztcbiAgdmFyIGIgPSAtMjcxNzMzODc5O1xuICB2YXIgYyA9IC0xNzMyNTg0MTk0O1xuICB2YXIgZCA9IDI3MTczMzg3ODtcblxuICBmb3IgKGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkgKz0gMTYpIHtcbiAgICBvbGRhID0gYTtcbiAgICBvbGRiID0gYjtcbiAgICBvbGRjID0gYztcbiAgICBvbGRkID0gZDtcblxuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2ldLCA3LCAtNjgwODc2OTM2KTtcbiAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgMl0sIDE3LCA2MDYxMDU4MTkpO1xuICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyAzXSwgMjIsIC0xMDQ0NTI1MzMwKTtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpICsgNF0sIDcsIC0xNzY0MTg4OTcpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyA1XSwgMTIsIDEyMDAwODA0MjYpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyA2XSwgMTcsIC0xNDczMjMxMzQxKTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgN10sIDIyLCAtNDU3MDU5ODMpO1xuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyA4XSwgNywgMTc3MDAzNTQxNik7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyAxMF0sIDE3LCAtNDIwNjMpO1xuICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyAxMV0sIDIyLCAtMTk5MDQwNDE2Mik7XG4gICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaSArIDEyXSwgNywgMTgwNDYwMzY4Mik7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDEzXSwgMTIsIC00MDM0MTEwMSk7XG4gICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTcsIC0xNTAyMDAyMjkwKTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgMTVdLCAyMiwgMTIzNjUzNTMyOSk7XG5cbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgMV0sIDUsIC0xNjU3OTY1MTApO1xuICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyA2XSwgOSwgLTEwNjk1MDE2MzIpO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyAxMV0sIDE0LCA2NDM3MTc3MTMpO1xuICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2ldLCAyMCwgLTM3Mzg5NzMwMik7XG4gICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA1LCAtNzAxNTU4NjkxKTtcbiAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgMTBdLCA5LCAzODAxNjA4Myk7XG4gICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDE1XSwgMTQsIC02NjA0NzgzMzUpO1xuICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyA0XSwgMjAsIC00MDU1Mzc4NDgpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyA5XSwgNSwgNTY4NDQ2NDM4KTtcbiAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgMTRdLCA5LCAtMTAxOTgwMzY5MCk7XG4gICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDNdLCAxNCwgLTE4NzM2Mzk2MSk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaSArIDhdLCAyMCwgMTE2MzUzMTUwMSk7XG4gICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgNSwgLTE0NDQ2ODE0NjcpO1xuICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAyXSwgOSwgLTUxNDAzNzg0KTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgN10sIDE0LCAxNzM1MzI4NDczKTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpICsgMTJdLCAyMCwgLTE5MjY2MDc3MzQpO1xuXG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA0LCAtMzc4NTU4KTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpICsgOF0sIDExLCAtMjAyMjU3NDQ2Myk7XG4gICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTYsIDE4MzkwMzA1NjIpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAxNF0sIDIzLCAtMzUzMDk1NTYpO1xuICAgIGEgPSBtZDVoaChhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNCwgLTE1MzA5OTIwNjApO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyA0XSwgMTEsIDEyNzI4OTMzNTMpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyA3XSwgMTYsIC0xNTU0OTc2MzIpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAxMF0sIDIzLCAtMTA5NDczMDY0MCk7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgNCwgNjgxMjc5MTc0KTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpXSwgMTEsIC0zNTg1MzcyMjIpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyAzXSwgMTYsIC03MjI1MjE5NzkpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyA2XSwgMjMsIDc2MDI5MTg5KTtcbiAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgOV0sIDQsIC02NDAzNjQ0ODcpO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyAxMl0sIDExLCAtNDIxODE1ODM1KTtcbiAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNiwgNTMwNzQyNTIwKTtcbiAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMl0sIDIzLCAtOTk1MzM4NjUxKTtcblxuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2ldLCA2LCAtMTk4NjMwODQ0KTtcbiAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgN10sIDEwLCAxMTI2ODkxNDE1KTtcbiAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyA1XSwgMjEsIC01NzQzNDA1NSk7XG4gICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaSArIDEyXSwgNiwgMTcwMDQ4NTU3MSk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDNdLCAxMCwgLTE4OTQ5ODY2MDYpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyAxMF0sIDE1LCAtMTA1MTUyMyk7XG4gICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDFdLCAyMSwgLTIwNTQ5MjI3OTkpO1xuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2kgKyA4XSwgNiwgMTg3MzMxMzM1OSk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDE1XSwgMTAsIC0zMDYxMTc0NCk7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDZdLCAxNSwgLTE1NjAxOTgzODApO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyAxM10sIDIxLCAxMzA5MTUxNjQ5KTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpICsgNF0sIDYsIC0xNDU1MjMwNzApO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAxMV0sIDEwLCAtMTEyMDIxMDM3OSk7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDJdLCAxNSwgNzE4Nzg3MjU5KTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgOV0sIDIxLCAtMzQzNDg1NTUxKTtcblxuICAgIGEgPSBzYWZlQWRkKGEsIG9sZGEpO1xuICAgIGIgPSBzYWZlQWRkKGIsIG9sZGIpO1xuICAgIGMgPSBzYWZlQWRkKGMsIG9sZGMpO1xuICAgIGQgPSBzYWZlQWRkKGQsIG9sZGQpO1xuICB9XG5cbiAgcmV0dXJuIFthLCBiLCBjLCBkXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHMgdG8gYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGlucHV0IE1ENSBBcnJheVxuICogQHJldHVybnMge3N0cmluZ30gTUQ1IHN0cmluZ1xuICovXG5mdW5jdGlvbiBiaW5sMnJzdHIoaW5wdXQpIHtcbiAgdmFyIGk7XG4gIHZhciBvdXRwdXQgPSAnJztcbiAgdmFyIGxlbmd0aDMyID0gaW5wdXQubGVuZ3RoICogMzI7XG5cbiAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDMyOyBpICs9IDgpIHtcbiAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoaW5wdXRbaSA+PiA1XSA+Pj4gaSAlIDMyKSAmIDB4ZmYpO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgcmF3IHN0cmluZyB0byBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzXG4gKiBDaGFyYWN0ZXJzID4yNTUgaGF2ZSB0aGVpciBoaWdoLWJ5dGUgc2lsZW50bHkgaWdub3JlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgUmF3IGlucHV0IHN0cmluZ1xuICogQHJldHVybnMge0FycmF5PG51bWJlcj59IEFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHNcbiAqL1xuZnVuY3Rpb24gcnN0cjJiaW5sKGlucHV0KSB7XG4gIHZhciBpO1xuICB2YXIgb3V0cHV0ID0gW107XG4gIG91dHB1dFsoaW5wdXQubGVuZ3RoID4+IDIpIC0gMV0gPSB1bmRlZmluZWQ7XG5cbiAgZm9yIChpID0gMDsgaSA8IG91dHB1dC5sZW5ndGg7IGkgKz0gMSkge1xuICAgIG91dHB1dFtpXSA9IDA7XG4gIH1cblxuICB2YXIgbGVuZ3RoOCA9IGlucHV0Lmxlbmd0aCAqIDg7XG5cbiAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDg7IGkgKz0gOCkge1xuICAgIG91dHB1dFtpID4+IDVdIHw9IChpbnB1dC5jaGFyQ29kZUF0KGkgLyA4KSAmIDB4ZmYpIDw8IGkgJSAzMjtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBNRDUgb2YgYSByYXcgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHMgSW5wdXQgc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSYXcgTUQ1IHN0cmluZ1xuICovXG5mdW5jdGlvbiByc3RyTUQ1KHMpIHtcbiAgcmV0dXJuIGJpbmwycnN0cihiaW5sTUQ1KHJzdHIyYmlubChzKSwgcy5sZW5ndGggKiA4KSk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgSE1BQy1NRDUgb2YgYSBrZXkgYW5kIHNvbWUgZGF0YSAocmF3IHN0cmluZ3MpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBITUFDIGtleVxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgUmF3IGlucHV0IHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gUmF3IE1ENSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gcnN0ckhNQUNNRDUoa2V5LCBkYXRhKSB7XG4gIHZhciBpO1xuICB2YXIgYmtleSA9IHJzdHIyYmlubChrZXkpO1xuICB2YXIgaXBhZCA9IFtdO1xuICB2YXIgb3BhZCA9IFtdO1xuICB2YXIgaGFzaDtcbiAgaXBhZFsxNV0gPSBvcGFkWzE1XSA9IHVuZGVmaW5lZDtcblxuICBpZiAoYmtleS5sZW5ndGggPiAxNikge1xuICAgIGJrZXkgPSBiaW5sTUQ1KGJrZXksIGtleS5sZW5ndGggKiA4KTtcbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSAxKSB7XG4gICAgaXBhZFtpXSA9IGJrZXlbaV0gXiAweDM2MzYzNjM2O1xuICAgIG9wYWRbaV0gPSBia2V5W2ldIF4gMHg1YzVjNWM1YztcbiAgfVxuXG4gIGhhc2ggPSBiaW5sTUQ1KGlwYWQuY29uY2F0KHJzdHIyYmlubChkYXRhKSksIDUxMiArIGRhdGEubGVuZ3RoICogOCk7XG5cbiAgcmV0dXJuIGJpbmwycnN0cihiaW5sTUQ1KG9wYWQuY29uY2F0KGhhc2gpLCA1MTIgKyAxMjgpKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgcmF3IHN0cmluZyB0byBhIGhleCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgUmF3IGlucHV0IHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gSGV4IGVuY29kZWQgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHJzdHIyaGV4KGlucHV0KSB7XG4gIHZhciBoZXhUYWIgPSAnMDEyMzQ1Njc4OWFiY2RlZic7XG4gIHZhciBvdXRwdXQgPSAnJztcbiAgdmFyIHg7XG4gIHZhciBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHggPSBpbnB1dC5jaGFyQ29kZUF0KGkpO1xuICAgIG91dHB1dCArPSBoZXhUYWIuY2hhckF0KCh4ID4+PiA0KSAmIDB4MGYpICsgaGV4VGFiLmNoYXJBdCh4ICYgMHgwZik7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIEVuY29kZSBhIHN0cmluZyBhcyBVVEYtOFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCBJbnB1dCBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFVURjggc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHN0cjJyc3RyVVRGOChpbnB1dCkge1xuICByZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KSk7XG59XG5cbi8qKlxuICogRW5jb2RlcyBpbnB1dCBzdHJpbmcgYXMgcmF3IE1ENSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcyBJbnB1dCBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJhdyBNRDUgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHJhd01ENShzKSB7XG4gIHJldHVybiByc3RyTUQ1KHN0cjJyc3RyVVRGOChzKSk7XG59XG5cbi8qKlxuICogRW5jb2RlcyBpbnB1dCBzdHJpbmcgYXMgSGV4IGVuY29kZWQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHMgSW5wdXQgc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBIZXggZW5jb2RlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gaGV4TUQ1KHMpIHtcbiAgcmV0dXJuIHJzdHIyaGV4KHJhd01ENShzKSk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgcmF3IEhNQUMtTUQ1IGZvciB0aGUgZ2l2ZW4ga2V5IGFuZCBkYXRhXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGsgSE1BQyBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBkIElucHV0IHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gUmF3IE1ENSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gcmF3SE1BQ01ENShrLCBkKSB7XG4gIHJldHVybiByc3RySE1BQ01ENShzdHIycnN0clVURjgoayksIHN0cjJyc3RyVVRGOChkKSk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgSGV4IGVuY29kZWQgSE1BQy1NRDUgZm9yIHRoZSBnaXZlbiBrZXkgYW5kIGRhdGFcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gayBITUFDIGtleVxuICogQHBhcmFtIHtzdHJpbmd9IGQgSW5wdXQgc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSYXcgTUQ1IHN0cmluZ1xuICovXG5mdW5jdGlvbiBoZXhITUFDTUQ1KGssIGQpIHtcbiAgcmV0dXJuIHJzdHIyaGV4KHJhd0hNQUNNRDUoaywgZCkpO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgTUQ1IHZhbHVlIGZvciBhIGdpdmVuIHN0cmluZy5cbiAqIElmIGEga2V5IGlzIHByb3ZpZGVkLCBjYWxjdWxhdGVzIHRoZSBITUFDLU1ENSB2YWx1ZS5cbiAqIFJldHVybnMgYSBIZXggZW5jb2RlZCBzdHJpbmcgdW5sZXNzIHRoZSByYXcgYXJndW1lbnQgaXMgZ2l2ZW4uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBJbnB1dCBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBITUFDIGtleVxuICogQHBhcmFtIHtib29sZWFufSBbcmF3XSBSYXcgb3V0cHV0IHN3aXRjaFxuICogQHJldHVybnMge3N0cmluZ30gTUQ1IG91dHB1dFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWQ1KHN0cmluZywga2V5LCByYXcpIHtcbiAgaWYgKCFrZXkpIHtcbiAgICBpZiAoIXJhdykge1xuICAgICAgcmV0dXJuIGhleE1ENShzdHJpbmcpO1xuICAgIH1cblxuICAgIHJldHVybiByYXdNRDUoc3RyaW5nKTtcbiAgfVxuXG4gIGlmICghcmF3KSB7XG4gICAgcmV0dXJuIGhleEhNQUNNRDUoa2V5LCBzdHJpbmcpO1xuICB9XG5cbiAgcmV0dXJuIHJhd0hNQUNNRDUoa2V5LCBzdHJpbmcpO1xufVxuIiwiaW1wb3J0IHsgbWQ1IH0gZnJvbSAnLi9tZDUuanMnO1xuXG4vKipcbiAqIFRoZSBpbnRlbnQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBnZW5lcmF0ZSB0aGUgc3VmZml4L3Bvc3RmaXggZm9yIHRoZVxuICogY3NzIGNsYXNzZXMsIGJhc2VkIG9uIHRoZSBtb2R1bGUtc2NvcGVkIHBhdGggbmFtZS5cbiAqXG4gKiBmb3IgZXhhbXBsZSxcbiAqICAgIGhhc2goJ215LWFwcC9jb21wb25lbnRzL2ZvbycpXG4gKiAgaW5zdGVhZCBvZlxuICogICAgaGFzaCgnYXBwL2NvbXBvbmVudHMvZm9vJylcbiAqXG4gKiAgKHVubGVzcyB5b3VyIGFwcCBuYW1lIGlzICdhcHAnKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVQYXRoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaChtb2R1bGVQYXRoKSB7XG4gIHJldHVybiAnZScgKyBtZDUobW9kdWxlUGF0aCkuc3Vic3RyaW5nKDAsIDgpO1xufVxuXG5pZiAoaW1wb3J0Lm1ldGEudml0ZXN0KSB7XG4gIGNvbnN0IHsgaXQsIGV4cGVjdCB9ID0gaW1wb3J0Lm1ldGEudml0ZXN0O1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBvc3RmaXggPSBoYXNoKCdmb28uY3NzJyk7XG5cbiAgICBleHBlY3QocG9zdGZpeCkudG8uYmUuYSgnc3RyaW5nJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nIHN0YXJ0aW5nIHdpdGggXCJlXCInLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcG9zdGZpeCA9IGhhc2goJ2Zvby5jc3MnKTtcblxuICAgIGV4cGVjdChwb3N0Zml4KS50by5tYXRjaCgvXmUvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzdHJpbmcgb2YgbGVuZ3RoIDknLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcG9zdGZpeCA9IGhhc2goJ2Zvby5jc3MnKTtcblxuICAgIGV4cGVjdChwb3N0Zml4KS50by5oYXZlLmxlbmd0aE9mKDkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGhhc2hGcm9tTW9kdWxlUGF0aCA9IGhhc2g7XG4iLCJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0JztcbmltcG9ydCBmc1N5bmMsIHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gJ25vZGU6bW9kdWxlJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB7IGJhcmVQYXRoLCBsZWFkaW5nU2xhc2hQYXRoIH0gZnJvbSAnLi9jb25zdC5qcyc7XG5pbXBvcnQgeyBoYXNoRnJvbUFic29sdXRlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLWFic29sdXRlLXBhdGguanMnO1xuaW1wb3J0IHsgaGFzaEZyb21Nb2R1bGVQYXRoIGFzIGhhc2hQb3NpeE1vZHVsZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5cbmV4cG9ydCB7IGhhc2hGcm9tQWJzb2x1dGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyc7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hGcm9tTW9kdWxlUGF0aChmaWxlUGF0aCkge1xuICBsZXQgcG9zaXhQYXRoID0gZm9yY2VQb3NpeChmaWxlUGF0aCk7XG5cbiAgcmV0dXJuIGhhc2hQb3NpeE1vZHVsZVBhdGgocG9zaXhQYXRoKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcmNlUG9zaXgoZmlsZVBhdGgpIHtcbiAgY29uc3QgcGFyc2VkID0gcGF0aC5wYXJzZShmaWxlUGF0aCk7XG5cbiAgaWYgKHBhcnNlZC5yb290ID09PSAnJykge1xuICAgIHJldHVybiBmaWxlUGF0aC5yZXBsYWNlQWxsKHBhdGgud2luMzIuc2VwLCBwYXRoLnBvc2l4LnNlcCk7XG4gIH1cblxuICBsZXQgcm9vdGxlc3MgPSBmaWxlUGF0aC5yZXBsYWNlKFxuICAgIG5ldyBSZWdFeHAoYF4ke1JlZ0V4cC5lc2NhcGUocGFyc2VkLnJvb3QpfWApLFxuICAgIHBhdGgucG9zaXguc2VwLFxuICApO1xuXG4gIHJldHVybiByb290bGVzcy5yZXBsYWNlQWxsKHBhdGgud2luMzIuc2VwLCBwYXRoLnBvc2l4LnNlcCk7XG59XG5cbmNvbnN0IENPTVBPTkVOVF9FWFRFTlNJT05TID0gWycuZ3RzJywgJy5nanMnLCAnLnRzJywgJy5qcycsICcuaGJzJ107XG5cbi8vIENKUyAvIEVTTT9cbmxldCBoZXJlID0gaW1wb3J0Lm1ldGEudXJsO1xubGV0IG91clJlcXVpcmUgPSBnbG9iYWxUaGlzLnJlcXVpcmVcbiAgPyBnbG9iYWxUaGlzLnJlcXVpcmVcbiAgOiBoZXJlICYmIGNyZWF0ZVJlcXVpcmUoaGVyZSk7XG5cbmlmICghb3VyUmVxdWlyZSkge1xuICBvdXJSZXF1aXJlID0gcmVxdWlyZTtcbn1cblxuY29uc3QgSVJSRUxFVkFOVF9QQVRIUyA9IFtiYXJlUGF0aC5wbnBtRGlyLCAnX192aXRlLSddO1xuY29uc3QgVU5TVVBQT1JURURfRElSRUNUT1JJRVMgPSBuZXcgU2V0KFsndGVzdHMnXSk7XG5cbmNvbnN0IENXRCA9IHByb2Nlc3MuY3dkKCk7XG5cbi8qKlxuICogUmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBmaWxlUGF0aCBmb3JtYXQgaXMsXG4gKiB0aGlzIHdpbGwgdHJ5IHRvIHJldHVybiB0aGUgY29ycmVjdCBwb3N0Zml4LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hGcm9tKGZpbGVQYXRoKSB7XG4gIGlmIChwYXRoLmlzQWJzb2x1dGUoZmlsZVBhdGgpKSB7XG4gICAgcmV0dXJuIGhhc2hGcm9tQWJzb2x1dGVQYXRoKGZpbGVQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBoYXNoRnJvbU1vZHVsZVBhdGgoZmlsZVBhdGgpO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjc3NIYXNBc3NvY2lhdGVkQ29tcG9uZW50KGNzc1BhdGgpIHtcbiAgcmV0dXJuIGNzc0hhc1N0YW5kYXJkRmlsZShjc3NQYXRoKSB8fCBjc3NIYXNQb2RzRmlsZShjc3NQYXRoKTtcbn1cblxuZnVuY3Rpb24gY3NzSGFzU3RhbmRhcmRGaWxlKGlkKSB7XG4gIC8qKlxuICAgKiBOb3JtYWxseSB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGEgSlMgcGF0aCBoZXJlLCBidXQgd2hlbiB1c2luZ1xuICAgKiBlbWJyb2lkZXJAMywgd2UgaGF2ZSBhIFwicmV3cml0dGVuIGFwcFwiLCB3aGljaCBoYXMgYWxsIG91ciBzb3VyY2VcbiAgICogcHJlcHJvY2Vzc2VkIGEgYml0IGJlZm9yZSBzY29wZWQtY3NzIHRyYW5zZm9ybWF0aW9ucy5cbiAgICpcbiAgICogKEluIFZpdGUsIHdlIG9wZXJhdGUgbW9yZSBkaXJlY3RseSB3aXRoIHRoZSBzb3VyY2UpXG4gICAqL1xuICBmb3IgKGxldCBleHQgb2YgQ09NUE9ORU5UX0VYVEVOU0lPTlMpIHtcbiAgICBsZXQgY2FuZGlkYXRlUGF0aCA9IGlkLnJlcGxhY2UoL1xcLmNzcyQvLCBleHQpO1xuXG4gICAgaWYgKGV4aXN0c1N5bmMoY2FuZGlkYXRlUGF0aCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY3NzSGFzUG9kc0ZpbGUoaWQpIHtcbiAgaWYgKCFpZC5lbmRzV2l0aCgnc3R5bGVzLmNzcycpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGx5IHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgYSBKUyBwYXRoIGhlcmUsIGJ1dCB3aGVuIHVzaW5nXG4gICAqIGVtYnJvaWRlckAzLCB3ZSBoYXZlIGEgXCJyZXdyaXR0ZW4gYXBwXCIsIHdoaWNoIGhhcyBhbGwgb3VyIHNvdXJjZVxuICAgKiBwcmVwcm9jZXNzZWQgYSBiaXQgYmVmb3JlIHNjb3BlZC1jc3MgdHJhbnNmb3JtYXRpb25zLlxuICAgKlxuICAgKiAoSW4gVml0ZSwgd2Ugb3BlcmF0ZSBtb3JlIGRpcmVjdGx5IHdpdGggdGhlIHNvdXJjZSlcbiAgICovXG4gIGZvciAobGV0IGV4dCBvZiBDT01QT05FTlRfRVhURU5TSU9OUykge1xuICAgIGxldCBjYW5kaWRhdGVQYXRoID0gaWQucmVwbGFjZSgvc3R5bGVzXFwuY3NzJC8sIGB0ZW1wbGF0ZSR7ZXh0fWApO1xuXG4gICAgaWYgKGV4aXN0c1N5bmMoY2FuZGlkYXRlUGF0aCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBCYXNlZCBvbiBlbWJlcidzIGNvbXBvbmVudCBsb2NhdGlvbiBjb252ZW50aW9ucyxcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCBwcm92aWRlIGEgcGF0aCBmb3Igd2hlcmUgd2VcbiAqIGV4cGVjdCB0aGUgQ1NTIHRvIGxpdmUuXG4gKlxuICogRm9yIGNvLWxvY2F0ZWQgc3RydWN0dXJlOlxuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50Lmhic1xuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50LmNzc1xuICpcbiAqIEZvciBuZXN0ZWQgY28tbG9jYXRlZCBzdHJ1Y3R1cmVcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC9mb28uaGJzXG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQvZm9vLmNzc1xuICpcbiAqIEZvciBQb2RzIHJvdXRlcyBzdHJ1Y3R1cmVcbiAqICAgLSByb3V0ZXMvbXktcm91dGUvdGVtcGxhdGUue2hicyxqc31cbiAqICAgLSByb3V0ZXMvbXktcm91dGUvc3R5bGVzLmNzc1xuICpcbiAqIERlbGliZXJhdGVseSBub3Qgc3VwcG9ydGVkOlxuICogICAtIGNvbXBvbmVudHMgdy8gcG9kcyAtLSB0aGlzIGlzIGRlcHJlY2F0ZWQgaW4gNS4xMFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZSAtIHRoZSBoYnMsIGpzLCBnanMsIGd0cyBvciB3aGF0ZXZlciBjby1sb2NhdGVkIHBhdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIGV4cGVjdGVkIGNzcyBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjc3NQYXRoRm9yKGZpbGVOYW1lKSB7XG4gIGxldCB3aXRob3V0RXh0ID0gd2l0aG91dEV4dGVuc2lvbihmaWxlTmFtZSk7XG4gIGxldCBjc3NQYXRoID0gd2l0aG91dEV4dCArICcuY3NzJztcblxuICBpZiAoaXNQb2QoZmlsZU5hbWUpKSB7XG4gICAgY3NzUGF0aCA9IGZpbGVOYW1lXG4gICAgICAucmVwbGFjZSgvdGVtcGxhdGVcXC5qcyQvLCAnc3R5bGVzLmNzcycpXG4gICAgICAucmVwbGFjZSgvdGVtcGxhdGVcXC5nanMvLCAnc3R5bGVzLmNzcycpXG4gICAgICAucmVwbGFjZSgvdGVtcGxhdGVcXC5ndHMvLCAnc3R5bGVzLmNzcycpXG4gICAgICAucmVwbGFjZSgvdGVtcGxhdGVcXC5oYnMvLCAnc3R5bGVzLmNzcycpO1xuICB9XG5cbiAgcmV0dXJuIGNzc1BhdGg7XG59XG5cbi8qKlxuICogTm90ZSB0aGF0IGNvbXBvbmVudHMgaW4gdGhlIFwicG9kc1wiIGNvbnZlbnRpb24gd2lsbFxuICogbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb2RUZW1wbGF0ZShmaWxlUGF0aCkge1xuICBpZiAoZmlsZVBhdGguaW5jbHVkZXMobGVhZGluZ1NsYXNoUGF0aC5jb21wb25lbnRzRGlyKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgZmlsZVBhdGguZW5kc1dpdGgoJ3RlbXBsYXRlLmpzJykgfHxcbiAgICBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuaGJzJykgfHxcbiAgICBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuZ2pzJykgfHxcbiAgICBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuZ3RzJylcbiAgKTtcbn1cblxuLyoqXG4gKiBOb3RlIHRoYXQgY29tcG9uZW50cyBpbiB0aGUgXCJwb2RzXCIgY29udmVudGlvbiB3aWxsXG4gKiBuZXZlciBiZSBzdXBwb3J0ZWQuXG4gKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBlbmRzIHdpdGhcbiAqIC0gdGVtcGxhdGUuanNcbiAqIC0gdGVtcGxhdGUuaGJzXG4gKiAtIHN0eWxlcy5jc3NcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9kKGZpbGVQYXRoKSB7XG4gIGlmIChmaWxlUGF0aC5pbmNsdWRlcyhsZWFkaW5nU2xhc2hQYXRoLmNvbXBvbmVudHNEaXIpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzUG9kVGVtcGxhdGUoZmlsZVBhdGgpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmlsZVBhdGguZW5kc1dpdGgoJ3N0eWxlcy5jc3MnKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKiBAcmV0dXJucyB0aGUgc2FtZSBwYXRoLCBidXQgd2l0aG91dCB0aGUgZXh0ZW5zaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0RXh0ZW5zaW9uKGZpbGVQYXRoKSB7XG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKGZpbGVQYXRoKTtcblxuICByZXR1cm4gcGF0aC5qb2luKHBhcnNlZC5kaXIsIHBhcnNlZC5uYW1lKTtcbn1cblxuLyoqXG4gKiBFeGFtcGxlcyBmb3IgZmlsZU5hbWVcbiAqIC0gYWJzb2x1dGUgb24tZGlzayBwYXRoXG4gKiAtIGluIHdlYnBhY2tcbiAqICAgLSBVUkwtYWJzb2x1dGUgcGF0aCwgc3RhcnRpbmcgd2l0aCAvXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG4gKiBAcGFyYW0ge3sgYWRkaXRpb25hbFJvb3RzPzogc3RyaW5nW107IGN3ZDogc3RyaW5nIH19IG9wdGlvbnNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbGV2YW50RmlsZShmaWxlTmFtZSwgeyBhZGRpdGlvbmFsUm9vdHMsIGN3ZCB9KSB7XG4gIC8vIEZha2UgZmlsZSBoYW5kbGVkIGJ5IHRlc3RlbSBzZXJ2ZXIgd2hlbiBpdCBydW5zXG4gIGlmIChmaWxlTmFtZS5zdGFydHNXaXRoKGxlYWRpbmdTbGFzaFBhdGgudGVzdGVtKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBQcml2YXRlIFZpcnR1YWwgTW9kdWxlc1xuICBpZiAoZmlsZU5hbWUuc3RhcnRzV2l0aCgnXFwwJykpIHJldHVybiBmYWxzZTtcblxuICAvLyBUaGVzZSBhcmUgbm90IHZhbGlkIHVzZXJsYW5kIG5hbWVzIChvciBhcmUgZnJvbSBsaWJyYXJpZXMpXG4gIGlmIChwYXRoLmlzQWJzb2x1dGUoZmlsZU5hbWUpID09PSBmYWxzZSkge1xuICAgIGlmIChmaWxlTmFtZS5tYXRjaCgvXlthLXpBLVpdLykpIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEV4dGVybmFsIHRvIHVzXG4gIGlmIChmaWxlTmFtZS5zdGFydHNXaXRoKGxlYWRpbmdTbGFzaFBhdGguYXRFbWJyb2lkZXIpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChJUlJFTEVWQU5UX1BBVEhTLnNvbWUoKGkpID0+IGZpbGVOYW1lLmluY2x1ZGVzKGkpKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGxldCB3b3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChmaWxlTmFtZSk7XG5cbiAgYXNzZXJ0KGN3ZCwgYGN3ZCB3YXMgbm90IHBhc3NlZCB0byBpc1JlbGV2YW50RmlsZWApO1xuXG4gIGxldCBvdXJXb3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChjd2QpO1xuXG4gIGlmICh3b3Jrc3BhY2UgIT09IG91cldvcmtzcGFjZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBsb2NhbCA9IGZpbGVOYW1lLnJlcGxhY2Uod29ya3NwYWNlLCAnJyk7XG4gIGxldCBbLCAuLi5wYXJ0c10gPSBsb2NhbC5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKEJvb2xlYW4pO1xuXG4gIGlmIChVTlNVUFBPUlRFRF9ESVJFQ1RPUklFUy5oYXMocGFydHNbMF0pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vc3RseSBwb2RzIHN1cHBvcnQuXG4gICAqIGZvbGtzIG5lZWQgdG8gb3B0IGluIHRvIHBvZHMgKHJvdXRlcyksIGJlY2F1c2UgZXZlcnkgcG9kcyBhcHAgY2FuIGJlIGNvbmZpZ3VyZWQgZGlmZmVyZW50bHlcbiAgICovXG4gIGxldCByb290cyA9IFtcbiAgICBsZWFkaW5nU2xhc2hQYXRoLmNvbXBvbmVudHNEaXIsXG4gICAgbGVhZGluZ1NsYXNoUGF0aC50ZW1wbGF0ZXNEaXIsXG4gICAgbGVhZGluZ1NsYXNoUGF0aC5yb3V0ZXNEaXIsXG4gICAgLi4uKGFkZGl0aW9uYWxSb290cyB8fCBbXSksXG4gIF07XG5cbiAgaWYgKCFyb290cy5zb21lKChyb290KSA9PiBmaWxlTmFtZS5pbmNsdWRlcyhyb290KSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VTY29wZWRQYXRoKSB7XG4gIC8qKlxuICAgKiAqQnkgY29udmVudGlvbiosIGBzcmNgIGlzIG9taXR0ZWQgZnJvbSBjb21wb25lbnQgcGF0aHMuXG4gICAqIFdlIGNhbiByZWZsZWN0IHRoZSBzYW1lIGJlaGF2aW9yIGJ5IHJlcGxhY2luZyBzcmMvXG4gICAqIHdpdGggYW4gZW1wdHkgc3RyaW5nLlxuICAgKlxuICAgKiBDU1MgaXNuJ3QgZW1pdHRlZCBhcyBhIGNvLWxvY2F0ZWQgbW9kdWxlLCBidXRcbiAgICogdG8ga2VlcCBjb252ZW50aW9ucyBjb25zaXN0ZW50IGFjcm9zcyBsYW5ndWFnZXMsXG4gICAqIHdlIGNhbiBwcmV0ZW5kIGl0IGlzLlxuICAgKlxuICAgKiBBbnkgY3VzdG9taXphdGlvbiBiZXlvbmQgcmVtb3ZpbmcgYHNyY2AgYW5kIGBhcHBgIGlzIHBvdGVudGlhbGx5IGNvbmZ1c2luZy5cbiAgICogSWYgd2UgbmVlZCBmdXJ0aGVyIGN1c3RvbWl6YXRpb25zLCB3ZSdsbCB3YW50IHRvIG1hdGNoIG9uIGBleHBvcnRzYCBpbiB0aGVcbiAgICogY29ycmVzcG9uZGluZyBwYWNrYWdlLmpzb25cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlU2NvcGVkUGF0aC5yZXBsYWNlKFxuICAgIG5ldyBSZWdFeHAoYF4ke1JlZ0V4cC5lc2NhcGUobGVhZGluZ1NsYXNoUGF0aC5zcmMpfWApLFxuICAgIHBhdGguc2VwLFxuICApO1xuXG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgaWYgKGlzUG9kKHBhY2thZ2VSZWxhdGl2ZSkpIHtcbiAgICAvKipcbiAgICAgKiBGb3IgcG9kcywgd2UgY2hvcCBvZmYgdGhlIHdob2xlIGZpbGUsIGFuZCB1c2UgdGhlIGRpciBuYW1lIGFzIHRoZSBcIm1vZHVsZVBhdGhcIlxuICAgICAqL1xuICAgIHJldHVybiBwYXJzZWQuZGlyO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGFuIGV4dGVuc2lvbiBpcyBwYXNzZWQsIHJlbW92ZSBpdC5cbiAgICogV2hlbiB1c2luZyBwYWNrYWdlcnMsIGZvbGtzIGFyZSB1c2VkIHRvIG5vdCBoYXZpbmcgdG8gc3BlY2lmeSBleHRlbnNpb25zIGZvciBmaWxlcy5cbiAgICogU2luY2Ugd2UgZG9uJ3QgZXZlbiBlbWl0IGNzcyBmaWxlcyBjby1sb2NhdGVkIHRvIGVhY2ggbW9kdWxlLFxuICAgKiB0aGlzIGhlbHBzIHVzIG5vdCBjb252ZXkgYSBsaWUgdGhhdCBhIGZpbGUgbWF5IGV4aXN0IGluIGF0IHJ1bnRpbWUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlIGA8bW9kdWxlLW5hbWU+L2NvbXBvbmVudHMvYnV0dG9uYC5cbiAgICogSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgZXh0ZW5zaW9uIGlzLCBiZWNhdXNlIHlvdSBjYW4gb25seSBoYXZlIG9uZSBjc3MgZmlsZVxuICAgKiBmb3IgdGhlIGJ1dHRvbiBtb2R1bGUgYW55d2F5LlxuICAgKi9cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYXRoLmpvaW4ocGFyc2VkLmRpciwgcGFyc2VkLm5hbWUpO1xuXG4gIHJldHVybiBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoO1xufVxuXG4vKipcbiAqIHJldHVybnMgdGhlIGFwcC1tb2R1bGUgcGF0aCBvZiB0aGUgc291cmNlIGZpbGVcbiAqXG4gKiBUaGlzIGFzc3VtZXMgbm9ybWFsIGVtYmVyIGFwcCBjb252ZW50aW9uc1xuICpcbiAqIHdoaWNoIGlzIGA8cGFja2FnZS5qc29uI25hbWU+L3BhdGgtdG8tZmlsZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcFBhdGgoc291cmNlUGF0aCkge1xuICBsZXQgd29ya3NwYWNlUGF0aCA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuICBsZXQgbmFtZSA9IG1vZHVsZU5hbWUoc291cmNlUGF0aCk7XG5cbiAgLyoqXG4gICAqICBVbmRlciBlbWJyb2lkZXIgYnVpbGRzLCB0aGUgc3BlYy1jb21wbGlhbnQgdmVyc2lvbiBvZiB0aGUgYXBwXG4gICAqIGhhcyBhbGwgdGhlIGZpbGVzIHVuZGVyIGEgZm9sZGVyIHdoaWNoIHJlcHJlc2VudHMgdGhlIHBhY2thZ2UgbmFtZSxcbiAgICogcmF0aGVyIHRoYW4gXCJhcHBcIi5cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBzb3VyY2VQYXRoLnJlcGxhY2Uod29ya3NwYWNlUGF0aCwgJycpO1xuXG4gIC8qKlxuICAgKiBCdXQgd2UgYWxzbyBkb24ndCB3YW50ICdhcHAnIC0tIHdoaWNoIGlzIHByZXNlbnQgaW4gdGhlIHYxIGFkZG9uIHBpcGVsaW5lXG4gICAqL1xuICBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlUmVsYXRpdmUucmVwbGFjZShsZWFkaW5nU2xhc2hQYXRoLmFwcCwgcGF0aC5zZXApO1xuXG4gIC8vIEFueSBvZiB0aGUgYWJvdmUgcmVscGFjZW1lbnRzIGNvdWxkIGFjY2lkZW50YWxseSBnaXZlIHVzIGFuIGV4dHJhIC8gKGRlcGVuZGluZyBvbiBvdXIgYnVpbGQgZW52aXJvbm1lbnQpXG4gIHBhY2thZ2VSZWxhdGl2ZSA9IHBhdGgubm9ybWFsaXplKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIHJldHVybiBgJHtuYW1lfSR7bG9jYWxQYWNrYWdlclN0eWxlUGF0aH1gO1xufVxuXG4vKipcbiAqIFRvIGF2b2lkIGhpdHRpbmcgdGhlIGZpbGVzeXNldG0sIHdlJ2xsIHN0b3JlIGFsbCBmb3VuZFxuICogcHJvamVjdCBwYXRocyBiZXJlLCBzbyB3ZSBjYW4sIGluIG1lbW9yeSxcbiAqIGdldCB0aGUgZm9sZGVyIHdoZXJlIGEgcGFja2FnZS5qc29uIGV4aXN0cywgcmF0aGVyIHRoYW5cbiAqIGhpdCB0aGUgZmlsZSBzeXN0ZW0gZXZlcnkgdGltZS5cbiAqL1xuY29uc3QgU0VFTiA9IG5ldyBTZXQoKTtcblxuZnVuY3Rpb24gZ2V0U2Vlbihzb3VyY2VQYXRoKSB7XG4gIGlmIChTRUVOLmhhcyhzb3VyY2VQYXRoKSkgcmV0dXJuIHNvdXJjZVBhdGg7XG5cbiAgbGV0IHBhcnRzID0gc291cmNlUGF0aC5zcGxpdChwYXRoLnNlcCk7XG5cbiAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPiAxOyBpLS0pIHtcbiAgICBsZXQgdG9DaGVjayA9IHBhcnRzLnNsaWNlKDAsIGkpLmpvaW4ocGF0aC5zZXApO1xuXG4gICAgbGV0IHNlZW4gPSBTRUVOLmhhcyh0b0NoZWNrKTtcblxuICAgIGlmIChzZWVuKSB7XG4gICAgICByZXR1cm4gdG9DaGVjaztcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgsIG9wdGlvbnMpIHtcbiAgbGV0IGN3ZCA9IG9wdGlvbnM/LmN3ZCA/PyBDV0Q7XG5cbiAgaWYgKHNvdXJjZVBhdGguZW5kc1dpdGgocGF0aC5zZXApKSB7XG4gICAgc291cmNlUGF0aCA9IHNvdXJjZVBhdGgucmVwbGFjZShcbiAgICAgIG5ldyBSZWdFeHAoYCR7UmVnRXhwLmVzY2FwZShwYXRoLnNlcCl9JGApLFxuICAgICAgJycsXG4gICAgKTtcbiAgfVxuXG4gIGxldCBzZWVuID0gZ2V0U2Vlbihzb3VyY2VQYXRoKTtcblxuICBpZiAoc2Vlbikge1xuICAgIHJldHVybiBzZWVuO1xuICB9XG5cbiAgbGV0IGNhbmRpZGF0ZVBhdGggPSBwYXRoLmpvaW4oc291cmNlUGF0aCwgJ3BhY2thZ2UuanNvbicpO1xuXG4gIGNvbnN0IGlzV29ya3NwYWNlID0gZnNTeW5jLmV4aXN0c1N5bmMoY2FuZGlkYXRlUGF0aCk7XG5cbiAgaWYgKGlzV29ya3NwYWNlKSB7XG4gICAgcmV0dXJuIHNvdXJjZVBhdGg7XG4gIH1cblxuICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBmaW5kUGFja2FnZUpzb25VcChzb3VyY2VQYXRoLCB7IGN3ZCB9KTtcblxuICBpZiAoIXBhY2thZ2VKc29uUGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGRldGVybWluZSBwcm9qZWN0IGZvciAke3NvdXJjZVBhdGh9YCk7XG4gIH1cblxuICBjb25zdCB3b3Jrc3BhY2VQYXRoID0gcGF0aC5kaXJuYW1lKHBhY2thZ2VKc29uUGF0aCk7XG5cbiAgU0VFTi5hZGQod29ya3NwYWNlUGF0aCk7XG5cbiAgcmV0dXJuIHdvcmtzcGFjZVBhdGg7XG59XG5cbmZ1bmN0aW9uIGZpbmRQYWNrYWdlSnNvblVwKHN0YXJ0UGF0aCwgb3B0aW9ucykge1xuICBsZXQgY3dkID0gb3B0aW9ucz8uY3dkID8/IENXRDtcbiAgbGV0IHBhcnRzID0gc3RhcnRQYXRoLnNwbGl0KHBhdGguc2VwKTtcblxuICBmb3IgKGxldCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+IDE7IGktLSkge1xuICAgIGxldCB0b0NoZWNrID0gcGFydHMuc2xpY2UoMCwgaSkuam9pbihwYXRoLnNlcCk7XG5cbiAgICBsZXQgcGFja2FnZUpzb24gPSBwYXRoLmpvaW4odG9DaGVjaywgJ3BhY2thZ2UuanNvbicpO1xuICAgIGxldCBleGlzdHMgPSBmc1N5bmMuZXhpc3RzU3luYyhwYWNrYWdlSnNvbik7XG5cbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICByZXR1cm4gcGFja2FnZUpzb247XG4gICAgfVxuXG4gICAgLy8gRG9uJ3QgdHJhdmVyc2UgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3Qgb2YgdGhlIGZpbGUgc3lzdGVtLlxuICAgIGlmICh0b0NoZWNrID09PSBjd2QpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBNQU5JRkVTVF9DQUNIRSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiB0aGUgcGFja2FnZS5qc29uI25hbWUsIG9yIGNvbmZpZy9lbnZpcm9ubWVudCNtb3VkbGVQcmVmaXggKGlmIHYxIGFwcClcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kdWxlTmFtZShzb3VyY2VQYXRoKSB7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuICBjb25zdCBtYW5pZmVzdCA9IGdldE1hbmlmZXN0KHdvcmtzcGFjZSk7XG5cbiAgcmV0dXJuIG1hbmlmZXN0Lm5hbWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHdvcmtzcGFjZVxuICovXG5mdW5jdGlvbiBnZXRNYW5pZmVzdCh3b3Jrc3BhY2UpIHtcbiAgbGV0IGV4aXN0aW5nID0gTUFOSUZFU1RfQ0FDSEUuZ2V0KHdvcmtzcGFjZSk7XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG5cbiAgbGV0IGJ1ZmZlciA9IGZzU3luYy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHdvcmtzcGFjZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgbGV0IGNvbnRlbnQgPSBidWZmZXIudG9TdHJpbmcoKTtcbiAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gIE1BTklGRVNUX0NBQ0hFLnNldCh3b3Jrc3BhY2UsIGpzb24pO1xuXG4gIHJldHVybiBqc29uO1xufVxuIiwiLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvc3RmaXhcbiAqIEBwYXJhbSB7U2V0PHN0cmluZz59IFtjbGFzc2VzSW5Dc3NdXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lQ2xhc3MoY2xhc3NOYW1lLCBwb3N0Zml4LCBjbGFzc2VzSW5Dc3MpIHtcbiAgY29uc3QgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgvXFxzKy8pO1xuICBjb25zdCByZW5hbWVkQ2xhc3NlcyA9IGNsYXNzZXNcbiAgICAuZmlsdGVyKChjKSA9PiBjKVxuICAgIC5tYXAoKGMpID0+IGMudHJpbSgpKVxuICAgIC5tYXAoKGMpID0+IHtcbiAgICAgIGlmICghY2xhc3Nlc0luQ3NzIHx8IGNsYXNzZXNJbkNzcy5oYXMoYykpIHtcbiAgICAgICAgaWYgKGMuZW5kc1dpdGgocG9zdGZpeCkpIHJldHVybiBjO1xuXG4gICAgICAgIHJldHVybiBjICsgJ18nICsgcG9zdGZpeDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGM7XG4gICAgfSlcbiAgICAuam9pbignICcpO1xuXG4gIGNvbnN0IHJlbmFtZWRXaXRoUHJlc2VydmVkU3BhY2VzID0gY2xhc3NOYW1lLnJlcGxhY2UoXG4gICAgY2xhc3NOYW1lLnRyaW1TdGFydCgpLnRyaW1FbmQoKSxcbiAgICByZW5hbWVkQ2xhc3NlcyxcbiAgKTtcblxuICByZXR1cm4gcmVuYW1lZFdpdGhQcmVzZXJ2ZWRTcGFjZXM7XG59XG4iLCJpbXBvcnQge1xuICBhcHBQYXRoLFxuICBoYXNoRnJvbU1vZHVsZVBhdGgsXG4gIGlzUmVsZXZhbnRGaWxlLFxufSBmcm9tICcuLi9saWIvcGF0aC91dGlscy5qcyc7XG5pbXBvcnQgeyByZW5hbWVDbGFzcyB9IGZyb20gJy4uL2xpYi9yZW5hbWVDbGFzcy5qcyc7XG5cbmZ1bmN0aW9uIF9pc1JlbGV2YW50RmlsZShzdGF0ZSwgY3dkKSB7XG4gIGxldCBmaWxlTmFtZSA9IHN0YXRlLmZpbGUub3B0cy5maWxlbmFtZTtcbiAgbGV0IGFkZGl0aW9uYWxSb290cyA9IHN0YXRlLm9wdHM/LmFkZGl0aW9uYWxSb290cztcblxuICByZXR1cm4gaXNSZWxldmFudEZpbGUoZmlsZU5hbWUsIHtcbiAgICBhZGRpdGlvbmFsUm9vdHMsXG4gICAgY3dkLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gZW52IC0gYmFiZWwgcGx1Z2luIGVudiwgZW52LnR5cGVzIGlzIG1vc3QgY29tbW9ubHkgdXNlZCAoZXNwIGluIFRTKVxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSB0aGUgb3B0aW9ucyBmb3Igc2NvcGVkLWNzcyAtLSB0aGlzIGlzIGFsc28gYXZhaWxhYmxlIGluIGVhY2ggdmlzaXRvcidzIHN0YXRlLm9wdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB3b3JraW5nRGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBjb25zdCBzY29wZWRDU1MgPSAoY29uZmlnKSA9PiAoZW52LCBvcHRpb25zLCB3b3JraW5nRGlyZWN0b3J5KSA9PiB7XG4gIC8vIG5vdCByZWFsbHkgYSBkZWVwIG1lcmdlLCBidXQgdGhlIGlkZWEgaXMgdG8gdXNlIG9uZSBvciB0aGUgb3RoZXIgYW5kIG5vdCBtaXggdGhlIGNvbmZpZ3NcbiAgb3B0aW9ucyA9IHsgLi4uY29uZmlnLCAuLi5vcHRpb25zIH07XG5cbiAgLyoqXG4gICAqIFRoaXMgYmFiZWwgcGx1Z2luIGRvZXMgdHdvIHRoaW5nczpcbiAgICogLSByZW1vdmVzIHRoZSBpbXBvcnQgb2Ygc2NvcGVkQ2xhc3MsIGlmIGl0IGV4aXN0c1xuICAgKiAgIC0gaWYgc2NvcGVkQ2xhc3Mgd2FzIGltcG9ydGVkLCBpdCBpcyByZW1vdmVkIGZyb20gYW55IGNvbXBvbmVudCdzIFwic2NvcGUgYmFnXCJcbiAgICogICAgICh0aGUgc2NvcGUgYmFnIGJlaW5nIGEgbG93LWxldmVsIG9iamVjdCB1c2VkIGZvciBwYXNzaW5nIHdoYXQgaXMgXCJpbiBzY29wZVwiIGZvciBhIGNvbXBvbmVudClcbiAgICovXG4gIHJldHVybiB7XG4gICAgdmlzaXRvcjoge1xuICAgICAgUHJvZ3JhbToge1xuICAgICAgICBlbnRlcihwYXRoLCBzdGF0ZSkge1xuICAgICAgICAgIGlmICghX2lzUmVsZXZhbnRGaWxlKHN0YXRlLCB3b3JraW5nRGlyZWN0b3J5KSkge1xuICAgICAgICAgICAgc3RhdGUuY2FuU2tpcCA9IHRydWU7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgbW9kdWxlUGF0aCA9IGFwcFBhdGgoc3RhdGUuZmlsZW5hbWUpO1xuXG4gICAgICAgICAgc3RhdGUucG9zdGZpeCA9IGhhc2hGcm9tTW9kdWxlUGF0aChtb2R1bGVQYXRoKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBJbXBvcnREZWNsYXJhdGlvbihwYXRoLCBzdGF0ZSkge1xuICAgICAgICBpZiAoc3RhdGUuY2FuU2tpcCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXRoLm5vZGUuc291cmNlLnZhbHVlID09PSAnZW1iZXItc2NvcGVkLWNzcycpIHtcbiAgICAgICAgICBsZXQgc3BlY2lmaWVyID0gcGF0aC5ub2RlLnNwZWNpZmllcnMuZmluZChcbiAgICAgICAgICAgICh4KSA9PiB4LmltcG9ydGVkLm5hbWUgPT09ICdzY29wZWRDbGFzcycsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzcGVjaWZpZXIpIHtcbiAgICAgICAgICAgIHN0YXRlLmZpbGUub3B0cy5pbXBvcnRlZFNjb3BlZENsYXNzID0gc3BlY2lmaWVyLmxvY2FsLm5hbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNwZWNpZmllci5sb2NhbC5uYW1lICE9PSAnc2NvcGVkQ2xhc3MnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBUaGUgc2NvcGVkQ2xhc3MgaW1wb3J0IGlzIGEgcHN1ZWRvLWhlbHBlciwgYW5kIG1heSBub3QgYmUgcmVuYW1lZCBhcyBpdCBpcyByZW1vdmVkIGF0IGJ1aWxkIHRpbWUuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGF0aC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogUmVuYW1lIHVzYWdlcyBpbiBKUy9UUy9HSlMvR1RTXG4gICAgICAgKi9cbiAgICAgIENhbGxFeHByZXNzaW9uKHBhdGgsIHN0YXRlKSB7XG4gICAgICAgIGlmIChzdGF0ZS5jYW5Ta2lwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhdGgubm9kZS5jYWxsZWUudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgcGF0aC5ub2RlLmNhbGxlZS5uYW1lID09PSBzdGF0ZS5maWxlLm9wdHM/LmltcG9ydGVkU2NvcGVkQ2xhc3NcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGF0aC5ub2RlLmFyZ3VtZW50cy5sZW5ndGggIT09IDEgfHxcbiAgICAgICAgICAgIHBhdGgubm9kZS5hcmd1bWVudHNbMF0udHlwZSAhPT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBUaGUgc2NvcGVkQ2xhc3MgaGVscGVyIG9ubHkgYWNjZXB0cyBhIHNpbmdsZSwgbm9uLWR5bmFtaWMsIHN0cmluZyBsaXRlcmFsIGFyZ3VtZW50LmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gcGF0aC5ub2RlLmFyZ3VtZW50c1swXS52YWx1ZTtcbiAgICAgICAgICBjb25zdCByZW5hbWVkID0gcmVuYW1lQ2xhc3MoXG4gICAgICAgICAgICBvcmlnaW5hbCxcbiAgICAgICAgICAgIHN0YXRlLnBvc3RmaXgsXG4gICAgICAgICAgICBuZXcgU2V0KFtvcmlnaW5hbF0pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRTdHJpbmcgPSBlbnYudHlwZXMuc3RyaW5nTGl0ZXJhbChyZW5hbWVkKTtcblxuICAgICAgICAgIHBhdGgucmVwbGFjZVdpdGgodHJhbnNmb3JtZWRTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBPbmx5IGluIHN0cmljdCBtb2RlLCBkbyB3ZSBjYXJlIGFib3V0IHJlbW9uaW5nIHRoZSBzY29wZSBiYWcgcmVmZXJlbmNlXG4gICAgICAgKi9cbiAgICAgIE9iamVjdFByb3BlcnR5KHBhdGgsIHN0YXRlKSB7XG4gICAgICAgIGlmICghc3RhdGUuZmlsZS5vcHRzPy5pbXBvcnRlZFNjb3BlZENsYXNzKSByZXR1cm47XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhdGgubm9kZS52YWx1ZS50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICBwYXRoLm5vZGUudmFsdWUubmFtZSA9PT0gc3RhdGUuZmlsZS5vcHRzPy5pbXBvcnRlZFNjb3BlZENsYXNzXG4gICAgICAgICkge1xuICAgICAgICAgIHBhdGgucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn07XG4iLCJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgcG9zdGNzcyBmcm9tICdwb3N0Y3NzJztcbmltcG9ydCBzY3NzU3ludGF4IGZyb20gJ3Bvc3Rjc3Mtc2Nzcyc7XG5pbXBvcnQgcGFyc2VyIGZyb20gJ3Bvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyJztcblxuaW1wb3J0IHsgbWQ1IH0gZnJvbSAnLi4vcGF0aC9tZDUuanMnO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjc3NcbiAqIEByZXR1cm4ge3N0cmluZ30gaGFzaGVkIGRvd24gdmVyc2lvbiBvZiB0aGUgQ1NTIGZvciBkaXNhbWJpZ3VhdGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaChjc3MpIHtcbiAgcmV0dXJuIGBjc3MtJHttZDUoY3NzKX1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbnNpZGVHbG9iYWwobm9kZSwgZnVuYykge1xuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudDtcblxuICBpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuICBpZiAocGFyZW50LnR5cGUgPT09ICdwc2V1ZG8nICYmIHBhcmVudC52YWx1ZSA9PT0gJzpnbG9iYWwnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVHbG9iYWwocGFyZW50LCBmdW5jKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY3NzUGF0aCBwYXRoIHRvIGEgQ1NTIGZpbGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENTU0luZm8oY3NzUGF0aCkge1xuICBpZiAoIWV4aXN0c1N5bmMoY3NzUGF0aCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBjc3MgPSByZWFkRmlsZVN5bmMoY3NzUGF0aCwgJ3V0ZjgnKTtcblxuICByZXR1cm4gZ2V0Q1NTQ29udGVudEluZm8oY3NzKTtcbn1cblxuLyoqXG4gKiBXZSB1c2UgdGhpcyBmdW5jdGlvbiB0byBjaGVjayBlYWNoIGNsYXNzIHVzZWQgaW4gdGhlIHRlbXBsYXRlXG4gKiB0byBzZWUgaWYgd2UgbmVlZCB0byBsZWF2ZSBpdCBhbG9uZSBvciB0cmFuc2Zvcm0gaXRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY3NzIHRoZSBDU1MncyBjb250ZW50c1xuICogQHBhcmFtIHtzdHJpbmd9IFtsYW5nXSBvcHRpb25hbCBsYW5ndWFnZSBoaW50IChlLmcuICdzY3NzJywgJ3Nhc3MnLCAnbGVzcycpXG4gKiBAcmV0dXJuIHt7IGNsYXNzZXM6IFNldDxzdHJpbmc+LCB0YWdzOiBTZXQ8c3RyaW5nPiwgY3NzOiBzdHJpbmcsIGlkOiBzdHJpbmcgfX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENTU0NvbnRlbnRJbmZvKGNzcywgbGFuZykge1xuICBjb25zdCBjbGFzc2VzID0gbmV3IFNldCgpO1xuICBjb25zdCB0YWdzID0gbmV3IFNldCgpO1xuXG4gIGNvbnN0IHBhcnNlT3B0aW9ucyA9XG4gICAgbGFuZyA9PT0gJ3Njc3MnIHx8IGxhbmcgPT09ICdzYXNzJyA/IHsgc3ludGF4OiBzY3NzU3ludGF4IH0gOiB7fTtcblxuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcywgcGFyc2VPcHRpb25zKTtcblxuICBjb25zdCBpc1Njc3MgPSBsYW5nID09PSAnc2NzcycgfHwgbGFuZyA9PT0gJ3Nhc3MnO1xuXG4gIGFzdC53YWxrKChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gJ3J1bGUnKSB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IGlzU2NzcyA/IHJlc29sdmVOZXN0ZWRTYXNzU2VsZWN0b3Iobm9kZSkgOiBub2RlLnNlbGVjdG9yO1xuXG4gICAgICBnZXRDbGFzc2VzQW5kVGFncyhzZWxlY3RvciwgY2xhc3NlcywgdGFncyk7XG4gICAgfVxuICB9KTtcblxuICBsZXQgaWQgPSBoYXNoKGNzcyk7XG5cbiAgcmV0dXJuIHsgY2xhc3NlcywgdGFncywgY3NzLCBpZCB9O1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgbmVzdGVkIFNDU1Mgc2VsZWN0b3IgYnkgc3Vic3RpdHV0aW5nIGAmYCB3aXRoIHRoZSBmdWxseS1yZXNvbHZlZFxuICogcGFyZW50IHNlbGVjdG9yLCByZWN1cnNpdmVseS4gVGhpcyBjb252ZXJ0cyBlLmcuIGAmLS1tb2RpZmllcmAgKGNoaWxkIG9mXG4gKiBgLmJsb2NrYCkgaW50byBgLmJsb2NrLS1tb2RpZmllcmAsIGFuZCBoYW5kbGVzIGFyYml0cmFyeSBuZXN0aW5nIGRlcHRoIHNvXG4gKiB0aGF0IGAmLS1tb2RpZmllcmAgaW5zaWRlIGAmLS1tb2RpZmllcmAgaW5zaWRlIGAuYmxvY2tgIHlpZWxkc1xuICogYC5ibG9jay0tbW9kaWZpZXItLW1vZGlmaWVyYC5cbiAqXG4gKiBAcGFyYW0ge2ltcG9ydCgncG9zdGNzcycpLlJ1bGV9IG5vZGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU5lc3RlZFNhc3NTZWxlY3Rvcihub2RlKSB7XG4gIGNvbnN0IHsgc2VsZWN0b3IgfSA9IG5vZGU7XG5cbiAgaWYgKCFzZWxlY3Rvci5pbmNsdWRlcygnJicpKSB7XG4gICAgcmV0dXJuIHNlbGVjdG9yO1xuICB9XG5cbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgaWYgKCFwYXJlbnQgfHwgcGFyZW50LnR5cGUgIT09ICdydWxlJykge1xuICAgIC8vIE5vIHBhcmVudCBydWxlIOKAlCBgJmAgaGFzIG5vdGhpbmcgdG8gc3Vic3RpdHV0ZSwgcmV0dXJuIGFzLWlzXG4gICAgcmV0dXJuIHNlbGVjdG9yO1xuICB9XG5cbiAgLy8gUmVjdXJzaXZlbHkgcmVzb2x2ZSB0aGUgcGFyZW50IGZpcnN0LCB0aGVuIHN1YnN0aXR1dGUgaW50byB0aGlzIHNlbGVjdG9yXG4gIGNvbnN0IHJlc29sdmVkUGFyZW50ID0gcmVzb2x2ZU5lc3RlZFNhc3NTZWxlY3RvcihwYXJlbnQpO1xuXG4gIHJldHVybiBzZWxlY3Rvci5yZXBsYWNlKC8mL2csIHJlc29sdmVkUGFyZW50KTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xhc3Nlc0FuZFRhZ3Moc2VsLCBjbGFzc2VzLCB0YWdzKSB7XG4gIGNvbnN0IHRyYW5zZm9ybSA9IChzbHMpID0+IHtcbiAgICBzbHMud2Fsaygoc2VsZWN0b3IpID0+IHtcbiAgICAgIGlmIChzZWxlY3Rvci50eXBlID09PSAnY2xhc3MnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgY2xhc3Nlcy5hZGQoc2VsZWN0b3IudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci50eXBlID09PSAndGFnJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHRhZ3MuYWRkKHNlbGVjdG9yLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBwYXJzZXIodHJhbnNmb3JtKS5wcm9jZXNzU3luYyhzZWwpO1xufVxuXG5pZiAoaW1wb3J0Lm1ldGEudml0ZXN0KSB7XG4gIGNvbnN0IHsgaXQsIGV4cGVjdCB9ID0gaW1wb3J0Lm1ldGEudml0ZXN0O1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGNsYXNzZXMgYW5kIHRhZ3MgdGhhdCBhcmUgbm90IGluIDpnbG9iYWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY3NzID0gJy5iYXogOmdsb2JhbCguZm9vKSAuYmFyIGRpdiA6Z2xvYmFsKHApICB7IGNvbG9yOiByZWQ7IH0nO1xuICAgIGNvbnN0IHsgY2xhc3NlcywgdGFncyB9ID0gZ2V0Q1NTQ29udGVudEluZm8oY3NzKTtcblxuICAgIC8vIGNsYXNzZXMgc2hvdWxkIGJlIGJheiBhbmQgYmFyXG4gICAgZXhwZWN0KGNsYXNzZXMuc2l6ZSkudG8uZXF1YWwoMik7XG4gICAgZXhwZWN0KFsuLi5jbGFzc2VzXSkudG8uaGF2ZS5tZW1iZXJzKFsnYmF6JywgJ2JhciddKTtcbiAgICBleHBlY3QodGFncy5zaXplKS50by5lcXVhbCgxKTtcbiAgICBleHBlY3QoWy4uLnRhZ3NdKS50by5oYXZlLm1lbWJlcnMoWydkaXYnXSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFyc2UgU0NTUyBuZXN0aW5nIHN5bnRheCB3aXRob3V0IGNyYXNoaW5nIHdoZW4gbGFuZz1zY3NzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNjc3MgPSBgXG4gICAgICAkYmFzZS1jb2xvcjogI2M2NTM4YztcbiAgICAgICRib3JkZXItZGFyazogcmdiYSgkYmFzZS1jb2xvciwgMC44OCk7XG5cbiAgICAgIC5wYXJlbnQge1xuICAgICAgICAmOmhvdmVyIHsgY29sb3I6ICRiYXNlLWNvbG9yOyB9XG4gICAgICAgIC5jaGlsZCB7IGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXItZGFyazsgfVxuICAgICAgICBjb2xvcjogcmVkO1xuICAgICAgfVxuICAgIGA7XG4gICAgY29uc3QgeyBjbGFzc2VzIH0gPSBnZXRDU1NDb250ZW50SW5mbyhzY3NzLCAnc2NzcycpO1xuXG4gICAgZXhwZWN0KFsuLi5jbGFzc2VzXSkudG9NYXRjaElubGluZVNuYXBzaG90KGBcbiAgICAgIFtcbiAgICAgICAgXCJwYXJlbnRcIixcbiAgICAgICAgXCJjaGlsZFwiLFxuICAgICAgXVxuICAgIGApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhcnNlIFNDU1MgbmVzdGluZyBzeW50YXggd2l0aG91dCBjcmFzaGluZyB3aGVuIGxhbmc9c2FzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzY3NzID0gYFxuICAgICAgJGJhc2UtY29sb3I6IGdyZWVuO1xuICAgICAgLmJsb2NrIHtcbiAgICAgICAgJi0tbW9kaWZpZXIgeyBjb2xvcjogJGJhc2UtY29sb3I7IH1cbiAgICAgIH1cbiAgICBgO1xuICAgIGNvbnN0IHsgY2xhc3NlcyB9ID0gZ2V0Q1NTQ29udGVudEluZm8oc2NzcywgJ3Nhc3MnKTtcblxuICAgIGV4cGVjdChbLi4uY2xhc3Nlc10pLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChgXG4gICAgICBbXG4gICAgICAgIFwiYmxvY2tcIixcbiAgICAgICAgXCJibG9jay0tbW9kaWZpZXJcIixcbiAgICAgIF1cbiAgICBgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXJzZSBTQ1NTIGRlZXBseSBuZXN0ZWQgQkVNIHdoZW4gbGFuZz1zYXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNjc3MgPSBgXG4gICAgICAkYmFzZS1jb2xvcjogZ3JlZW47XG4gICAgICAuYmxvY2sge1xuICAgICAgICAmLS1tb2RpZmllciB7XG4gICAgICAgICAgY29sb3I6ICRiYXNlLWNvbG9yO1xuICAgICAgICAgICYtLW1vZGlmaWVyIHtcbiAgICAgICAgICAgIGNvbG9yOiAkYmFzZS1jb2xvcjtcbiAgICAgICAgICAgICYtLW1vZGlmaWVyIHtcbiAgICAgICAgICAgICAgY29sb3I6ICRiYXNlLWNvbG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIGA7XG4gICAgY29uc3QgeyBjbGFzc2VzIH0gPSBnZXRDU1NDb250ZW50SW5mbyhzY3NzLCAnc2FzcycpO1xuXG4gICAgZXhwZWN0KFsuLi5jbGFzc2VzXSkudG9NYXRjaElubGluZVNuYXBzaG90KGBcbiAgICAgIFtcbiAgICAgICAgXCJibG9ja1wiLFxuICAgICAgICBcImJsb2NrLS1tb2RpZmllclwiLFxuICAgICAgICBcImJsb2NrLS1tb2RpZmllci0tbW9kaWZpZXJcIixcbiAgICAgICAgXCJibG9jay0tbW9kaWZpZXItLW1vZGlmaWVyLS1tb2RpZmllclwiLFxuICAgICAgXVxuICAgIGApO1xuICB9KTtcbn1cbiIsIi8qKlxuICogSW1wb3J0YW50IGRvY3M6XG4gKiAtIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9cbiAqL1xuaW1wb3J0IHBvc3Rjc3MgZnJvbSAncG9zdGNzcyc7XG5pbXBvcnQgcGFyc2VyIGZyb20gJ3Bvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyJztcblxuaW1wb3J0IHsgaXNJbnNpZGVHbG9iYWwgfSBmcm9tICcuL3V0aWxzLmpzJztcblxuY29uc3QgU0VQID0gJ19fJztcblxuZnVuY3Rpb24gaXNSdWxlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ3J1bGUnO1xufVxuXG5mdW5jdGlvbiBpc0RlY2xhcmF0aW9uKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ2RlY2wnO1xufVxuXG4vKipcbiAqIE5PVEU6IFwia2V5ZnJhbWVzXCIgaXMgYSBzaW5ndWxhciBkZWZpbml0aW9uLCBpbiB0aGF0IGl0J3MgYSBibG9jayBjb250YWluaW5nIGtleWZyYW1lc1xuICogICAgICAgdXNpbmcgYEBrZXlmcmFtZXMge31gIHdpdGggb25seSBvbmUgdGhpbmcgb24gdGhlIGluc2lkZSBkb2Vzbid0IG1ha2Ugc2Vuc2UuXG4gKi9cbmZ1bmN0aW9uIHJld3JpdGVSZWZlcmVuY2VhYmxlKG5vZGUsIHBvc3RmaXgpIHtcbiAgbGV0IG9yaWdpbmFsTmFtZSA9IG5vZGUucGFyYW1zO1xuICBsZXQgcG9zdGZpeGVkTmFtZSA9IG5vZGUucGFyYW1zICsgU0VQICsgcG9zdGZpeDtcblxuICBub2RlLnBhcmFtcyA9IHBvc3RmaXhlZE5hbWU7XG5cbiAgcmV0dXJuIHtcbiAgICBvcmlnaW5hbE5hbWUsXG4gICAgcG9zdGZpeGVkTmFtZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmV3cml0ZVNlbGVjdG9yKHNlbCwgcG9zdGZpeCkge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2VsZWN0b3JzKSA9PiB7XG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSByZXR1cm47XG5cbiAgICAgIC8vIFdlIG5ldmVyIHdhbnQgdG8gdG91Y2ggcHN1ZWRvIHNlbGVjdG9ycyBzaW5jZSB3ZSBhbmQgdGhlIHVzZXIgZG9lc24ndCBvd24gdGhlbS5cbiAgICAgIGlmIChzZWxlY3Rvci50eXBlID09PSAncHN1ZWRvJykgcmV0dXJuO1xuXG4gICAgICAvLyA6bnRoLW9mLXR5cGUgaGFzIHNwZWNpYWwgc3ludGF4IHdoZXJlIHRoZSB2YWx1ZXMgcGFzc2VkIHRvIG50aC1vZi10eXBlKClcbiAgICAgIC8vIG11c3QgZWl0aGVyIGJlIGV4YWN0bHkgXCJvZGRcIiwgXCJldmVuXCIsIG9yIGEgc2ltcGxlIGZvcm11bGFcbiAgICAgIC8vXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvOm50aC1vZi10eXBlXG4gICAgICBpZiAoaXNOdGhPZlR5cGUoc2VsZWN0b3IpKSByZXR1cm47XG5cbiAgICAgIGlmIChzZWxlY3Rvci50eXBlID09PSAnY2xhc3MnKSB7XG4gICAgICAgIHNlbGVjdG9yLnZhbHVlICs9ICdfJyArIHBvc3RmaXg7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnKSB7XG4gICAgICAgIHNlbGVjdG9yLnJlcGxhY2VXaXRoKFxuICAgICAgICAgIHBhcnNlci50YWcoeyB2YWx1ZTogc2VsZWN0b3IudmFsdWUgfSksXG4gICAgICAgICAgcGFyc2VyLmNsYXNzTmFtZSh7IHZhbHVlOiBwb3N0Zml4IH0pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gcmVtb3ZlIDpnbG9iYWxcbiAgICBzZWxlY3RvcnMud2Fsaygoc2VsZWN0b3IpID0+IHtcbiAgICAgIGlmIChzZWxlY3Rvci50eXBlID09PSAncHNldWRvJyAmJiBzZWxlY3Rvci52YWx1ZSA9PT0gJzpnbG9iYWwnKSB7XG4gICAgICAgIHNlbGVjdG9yLnJlcGxhY2VXaXRoKC4uLnNlbGVjdG9yLm5vZGVzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgdHJhbnNmb3JtZWQgPSBwYXJzZXIodHJhbnNmb3JtKS5wcm9jZXNzU3luYyhzZWwpO1xuXG4gIHJldHVybiB0cmFuc2Zvcm1lZDtcbn1cblxuZnVuY3Rpb24gaXNOdGhPZlR5cGUobm9kZSkge1xuICBpZiAoIW5vZGUpIHJldHVybiBmYWxzZTtcblxuICByZXR1cm4gbm9kZS5wYXJlbnQ/LnZhbHVlID09PSAnOm50aC1vZi10eXBlJyB8fCBpc050aE9mVHlwZShub2RlLnBhcmVudCk7XG59XG5cbmZ1bmN0aW9uIGlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpIHtcbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHBhcmVudC50eXBlID09PSAnYXRydWxlJyAmJiBwYXJlbnQubmFtZSA9PT0gJ2tleWZyYW1lcycpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiBpc0luc2lkZUtleWZyYW1lcyhwYXJlbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUNzcyhjc3MsIHBvc3RmaXgsIGZpbGVOYW1lLCBsYXllck5hbWUpIHtcbiAgY29uc3QgYXN0ID0gcG9zdGNzcy5wYXJzZShjc3MpO1xuICAvKipcbiAgICoga2luZCA9PiBvcmlnaW5hbE5hbWUgPT4gcG9zdGZpeGVkTmFtZVxuICAgKiBAdHlwZSB7eyBba2luZDogc3RyaW5nXTogeyBbb3JpZ2luYWxOYW1lOiBzdHJpbmddOiBzdHJpbmcgfX19XG4gICAqL1xuICBjb25zdCByZWZlcmVuY2VhYmxlcyA9IHtcbiAgICBrZXlmcmFtZXM6IHt9LFxuICAgICdjb3VudGVyLXN0eWxlJzoge30sXG4gICAgJ3Bvc2l0aW9uLXRyeSc6IHt9LFxuICAgIHByb3BlcnR5OiB7fSxcbiAgfTtcblxuICBjb25zdCBhdmFpbGFibGVSZWZlcmVuY2VhYmxlcyA9IG5ldyBTZXQoT2JqZWN0LmtleXMocmVmZXJlbmNlYWJsZXMpKTtcblxuICBmdW5jdGlvbiBpc1JlZmVyZW5jZWFibGUobm9kZSkge1xuICAgIGlmIChub2RlLnR5cGUgIT09ICdhdHJ1bGUnKSByZXR1cm47XG5cbiAgICByZXR1cm4gYXZhaWxhYmxlUmVmZXJlbmNlYWJsZXMuaGFzKG5vZGUubmFtZSk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVEaXJlY3RSZWZlcmVuY2VzKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUudmFsdWUpIHJldHVybjtcblxuICAgIGZvciAobGV0IFssIG1hcF0gb2YgT2JqZWN0LmVudHJpZXMocmVmZXJlbmNlYWJsZXMpKSB7XG4gICAgICBpZiAobWFwW25vZGUudmFsdWVdKSB7XG4gICAgICAgIG5vZGUudmFsdWUgPSBtYXBbbm9kZS52YWx1ZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2hvcnRoYW5kQ29udGVudHMobm9kZSkge1xuICAgIGlmIChub2RlLnByb3AgPT09ICdhbmltYXRpb24nKSB7XG4gICAgICBsZXQgcGFydHMgPSBub2RlLnZhbHVlLnNwbGl0KCcgJyk7XG4gICAgICBsZXQgbWF0Y2ggPSBwYXJ0cy5maWx0ZXIoKHgpID0+IHJlZmVyZW5jZWFibGVzLmtleWZyYW1lc1t4XSk7XG5cbiAgICAgIGlmIChtYXRjaC5sZW5ndGgpIHtcbiAgICAgICAgbWF0Y2guZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgIGxldCByZXBsYWNlbWVudCA9IHJlZmVyZW5jZWFibGVzLmtleWZyYW1lc1t4XTtcblxuICAgICAgICAgIGlmICghcmVwbGFjZW1lbnQpIHJldHVybjtcblxuICAgICAgICAgIG5vZGUudmFsdWUgPSBub2RlLnZhbHVlLnJlcGxhY2UoeCwgcmVwbGFjZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBbbG9va0ZvciwgcmVwbGFjZVdpdGhdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgcmVmZXJlbmNlYWJsZXMucHJvcGVydHksXG4gICAgKSkge1xuICAgICAgbGV0IGxvb2tGb3JWYXIgPSBgdmFyKCR7bG9va0Zvcn0pYDtcbiAgICAgIGxldCByZXBsYWNlV2l0aFZhciA9IGB2YXIoJHtyZXBsYWNlV2l0aH0pYDtcblxuICAgICAgbm9kZS52YWx1ZSA9IG5vZGUudmFsdWUucmVwbGFjZShsb29rRm9yVmFyLCByZXBsYWNlV2l0aFZhcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdlIGhhdmUgdG8gZG8gdHdvIHBhc3NlczpcbiAgICogMS4gcG9zdGZpeCBhbGwgdGhlIHJlZmVyZW5jZWFibGUgc3ludGF4XG4gICAqIDIuIHBvc3RmaXggYXMgbm9ybWFsLCBidXQgYWxzbyBjaGVja2luZyB2YWx1ZXMgb2YgQ1NTIHByb3BlcnRpZXNcbiAgICogICAgdGhhdCBjb3VsZCBtYXRjaCBwb3N0Zml4ZWQgcmVmZXJlbmNlYWJsZXMgZnJvbSBzdGVwIDFcbiAgICovXG5cbiAgLy8gU3RlcCAxOiBmaW5kIHJlZmVyZW5jZWFibGVzXG4gIGFzdC53YWxrKChub2RlKSA9PiB7XG4gICAgLyoqXG4gICAgICogQGtleWZyYW1lcywgQGNvdW50ZXItc3R5bGUsIGV0Y1xuICAgICAqL1xuICAgIGlmIChpc1JlZmVyZW5jZWFibGUobm9kZSkpIHtcbiAgICAgIGxldCBuYW1lID0gbm9kZS5uYW1lO1xuICAgICAgbGV0IHsgb3JpZ2luYWxOYW1lLCBwb3N0Zml4ZWROYW1lIH0gPSByZXdyaXRlUmVmZXJlbmNlYWJsZShub2RlLCBwb3N0Zml4KTtcblxuICAgICAgcmVmZXJlbmNlYWJsZXNbbmFtZV1bb3JpZ2luYWxOYW1lXSA9IHBvc3RmaXhlZE5hbWU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFN0ZXAgMjogcG9zdGZpeCBhbmQgdXBkYXRlIHJlZmVyZW5jZWQgcmVmZXJlbmNlYWJsZXNcbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAoaXNEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgdXBkYXRlRGlyZWN0UmVmZXJlbmNlcyhub2RlKTtcbiAgICAgIHVwZGF0ZVNob3J0aGFuZENvbnRlbnRzKG5vZGUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzUnVsZShub2RlKSkge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgaW5uZXItY29udGVudHMgb2YgYSBrZXlmcmFtZSBhcmUgcGVyY2VudGFnZXMsIHJhdGhlciB0aGFuIHNlbGVjdG9yc1xuICAgICAgICovXG4gICAgICBpZiAoaXNJbnNpZGVLZXlmcmFtZXMobm9kZSkpIHJldHVybjtcblxuICAgICAgbm9kZS5zZWxlY3RvciA9IHJld3JpdGVTZWxlY3Rvcihub2RlLnNlbGVjdG9yLCBwb3N0Zml4KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcmV3cml0dGVuQ3NzID0gYXN0LnRvU3RyaW5nKCk7XG5cbiAgcmV0dXJuIChcbiAgICBbXG4gICAgICBgLyogJHtmaWxlTmFtZX0gKi9gLFxuICAgICAgbGF5ZXJOYW1lID8gYEBsYXllciAke2xheWVyTmFtZX0ge2AgOiAnJyxcbiAgICAgIHJld3JpdHRlbkNzcy50cmltRW5kKCksXG4gICAgICBsYXllck5hbWUgPyBgfWAgOiAnJyxcbiAgICBdXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAuam9pbignXFxuJykgKyAnXFxuJ1xuICApO1xufVxuIiwiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuY29uc3QgS0VZID0gJ2VtYmVyLXNjb3BlZC5jc3MnO1xuY29uc3QgU0VQID0gJ19fXyc7XG5cbmV4cG9ydCBjb25zdCByZXF1ZXN0ID0ge1xuICBpczoge1xuICAgIGlubGluZShyZXF1ZXN0KSB7XG4gICAgICByZXR1cm4gcmVxdWVzdC5pbmNsdWRlcyhLRVkpO1xuICAgIH0sXG4gICAgY29sb2NhdGVkKHJlcXVlc3QpIHtcbiAgICAgIHJldHVybiByZXF1ZXN0LmluY2x1ZGVzKCcuY3NzP3Njb3BlZD0nKTtcbiAgICB9LFxuICB9LFxuICBpbmxpbmU6IHtcbiAgICAvKipcbiAgICAgKiBNYWtlcyByZXF1ZXN0IFVSTCBmb3IgZW1iZWRkaW5nIGA8c3R5bGU+YCBhcyBgPGxpbms+YCBpbnRvIHRoZSBgPGhlYWQ+YFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNzc0hhc2ggdGhlIGhhc2ggb2YgdGhlIENTUyBjb250ZW50c1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwb3N0Zml4IHRoZSBoYXNoIG9mIHRoZSBmaWxlIHRoYXQgX2luY2x1ZGVzXyB0aGUgbGlua2VkIGZpbGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY3NzQ29udGVudHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBDU1MgZmlsZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbbGFuZ10gb3B0aW9uYWwgcHJlcHJvY2Vzc29yIGxhbmd1YWdlIChlLmcuICdzY3NzJywgJ3Nhc3MnLCAnbGVzcycpXG4gICAgICovXG4gICAgY3JlYXRlKGNzc0hhc2gsIHBvc3RmaXgsIGNzc0NvbnRlbnRzLCBsYW5nKSB7XG4gICAgICBsZXQgdXJsID0gYC4vJHtwb3N0Zml4fSR7U0VQfSR7Y3NzSGFzaH0uJHtLRVl9P2Nzcz0ke2VuY29kZVVSSUNvbXBvbmVudChjc3NDb250ZW50cyl9YDtcblxuICAgICAgaWYgKGxhbmcpIHtcbiAgICAgICAgdXJsICs9IGAmbGFuZz0ke2VuY29kZVVSSUNvbXBvbmVudChsYW5nKX1gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXJsO1xuICAgIH0sXG4gICAgZGVjb2RlKHJlcXVlc3QpIHtcbiAgICAgIGxldCBbbGVmdCwgcXBzXSA9IHJlcXVlc3Quc3BsaXQoJz8nKTtcblxuICAgICAgbGVmdCA9IGxlZnQuc2xpY2UoMikucmVwbGFjZShgLiR7S0VZfWAsICcnKTtcblxuICAgICAgbGV0IFtwb3N0Zml4LCBoYXNoXSA9IGxlZnQuc3BsaXQoU0VQKTtcblxuICAgICAgbGV0IHNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocXBzKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGFzaCxcbiAgICAgICAgcG9zdGZpeCxcbiAgICAgICAgY3NzOiBzZWFyY2guZ2V0KCdjc3MnKSxcbiAgICAgICAgZnJvbTogc2VhcmNoLmdldCgnZnJvbScpLFxuICAgICAgICBsYW5nOiBzZWFyY2guZ2V0KCdsYW5nJyksXG4gICAgICB9O1xuICAgIH0sXG4gIH0sXG4gIGNvbG9jYXRlZDoge1xuICAgIC8qKlxuICAgICAqIE1ha2VzIHJlcXVlc3QgVVJMIGZvciBlbWJlZGRpbmcgc2VwYXJhdGUgQ1NTIEZpbGUgYXMgYDxsaW5rPmAgaW50byB0aGUgYDxoZWFkPmBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjc3NIYXNoIHRoZSBoYXNoIG9mIHRoZSBDU1MgY29udGVudHNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcG9zdGZpeCB0aGUgaGFzaCBvZiB0aGUgZmlsZSB0aGF0IF9pbmNsdWRlc18gdGhlIGxpbmtlZCBmaWxlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoIHBhdGggdG8gdGhlIHNlcGFyYXRlIENTUyBGaWxlXG4gICAgICovXG4gICAgY3JlYXRlKGNzc0hhc2gsIHBvc3RmaXgsIGZpbGVQYXRoKSB7XG4gICAgICByZXR1cm4gYC4vJHtwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKX0/c2NvcGVkPSR7cG9zdGZpeH0mY3NzSGFzaD0ke2Nzc0hhc2h9YDtcbiAgICB9LFxuICAgIGRlY29kZShyZXF1ZXN0KSB7XG4gICAgICBjb25zdCBbZmlsZU5hbWUsIHFzXSA9IHJlcXVlc3Quc3BsaXQoJz8nKTtcbiAgICAgIGNvbnN0IHNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocXMpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgY3NzSGFzaDogc2VhcmNoLmdldCgnY3NzSGFzaCcpLFxuICAgICAgICBwb3N0Zml4OiBzZWFyY2guZ2V0KCdzY29wZWQnKSxcbiAgICAgIH07XG4gICAgfSxcbiAgfSxcbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgeyByZXdyaXRlQ3NzIH0gZnJvbSAnLi4vbGliL2Nzcy9yZXdyaXRlLmpzJztcbmltcG9ydCB7IHJlcXVlc3QgfSBmcm9tICcuLi9saWIvcmVxdWVzdC5qcyc7XG5cbmNvbnN0IE1FVEEgPSAnc2NvcGVkLWNzczpjb2xvY2F0ZWQnO1xuXG4vKiogRmlsZSBleHRlbnNpb25zIHRoYXQgVml0ZSBjYW4gcHJlcHJvY2VzcyB2aWEgaXRzIENTUyBwcmVwcm9jZXNzb3IgcGlwZWxpbmUgKi9cbmNvbnN0IFBSRVBST0NFU1NFRF9FWFRFTlNJT05TID0gbmV3IFNldChbXG4gICcuc2NzcycsXG4gICcuc2FzcycsXG4gICcubGVzcycsXG4gICcuc3R5bCcsXG4gICcuc3R5bHVzJyxcbl0pO1xuXG4vKipcbiAqIFBsdWdpbiBmb3Igc3VwcG9ydGluZyBjb2xvY2F0ZWQgc3R5bGVzXG4gKlxuICogZS5nLjpcbiAqICBzcmMvY29tcG9uZW50cy9teS1jb21wb25lbnQuanNcbiAqICBzcmMvY29tcG9uZW50cy9teS1jb21wb25lbnQuY3NzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xvY2F0ZWQob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IENXRCA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ3ZpdGUnKS5SZXNvbHZlZENvbmZpZyB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IHZpdGVDb25maWc7XG5cbiAgLyoqIEB0eXBlIHsoKGNvZGU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZywgY29uZmlnOiB1bmtub3duKSA9PiBQcm9taXNlPHsgY29kZTogc3RyaW5nIH0+KSB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IHByZXByb2Nlc3NDU1M7XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCB0aGUgcmVxdWVzdCBpZCAvIHdoYXQgd2FzIGltcG9ydGVkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCAgcGF0aCBvbiBkaXNrXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBmdW5jdGlvbiBidWlsZFJlc3BvbnNlKGlkLCBmaWxlUGF0aCkge1xuICAgIGNvbnN0IHBhcnNlZCA9IHJlcXVlc3QuY29sb2NhdGVkLmRlY29kZShpZCk7XG4gICAgY29uc3QgcmVsYXRpdmVGaWxlUGF0aCA9IHBhdGgucmVsYXRpdmUoQ1dELCBmaWxlUGF0aCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGZpbGVQYXRoLFxuICAgICAgbWV0YToge1xuICAgICAgICBbTUVUQV06IHtcbiAgICAgICAgICBwb3N0Zml4OiBwYXJzZWQucG9zdGZpeCxcbiAgICAgICAgICBmaWxlTmFtZTogcmVsYXRpdmVGaWxlUGF0aCxcbiAgICAgICAgICBmdWxsUGF0aDogZmlsZVBhdGgsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdlbWJlci1zY29wZWQtY3NzOmNvbG9jYXRlZCcsXG4gICAgcmVzb2x2ZUlkKGlkLCBpbXBvcnRlcikge1xuICAgICAgLy8gaGFuZGxlczogc29tZS1maWxlLmNzcz9zY29wZWQ9W3Bvc3RmaXhdXG4gICAgICAvLyB0aGlzIGlzIG9ubHkgcnVuIGluIHJvbGx1cCwgdml0ZSBoYW5kbGVzIGl0IGRpZmZlcmVudGx5XG4gICAgICBpZiAocmVxdWVzdC5pcy5jb2xvY2F0ZWQoaWQpKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHJlcXVlc3QuY29sb2NhdGVkLmRlY29kZShpZCk7XG5cbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnJlc29sdmUoXG4gICAgICAgICAgcGF0aC5kaXJuYW1lKGltcG9ydGVyKSxcbiAgICAgICAgICBwYXRoLmJhc2VuYW1lKHBhcnNlZC5maWxlTmFtZSksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGJ1aWxkUmVzcG9uc2UoaWQsIGZpbGVQYXRoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGxvYWQoaWQpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmdldE1vZHVsZUluZm8oaWQpPy5tZXRhPy5bTUVUQV07XG5cbiAgICAgIGlmIChtZXRhKSB7XG4gICAgICAgIHRoaXMuYWRkV2F0Y2hGaWxlKG1ldGEuZnVsbFBhdGgpO1xuXG4gICAgICAgIGxldCBjb2RlID0gcmVhZEZpbGVTeW5jKG1ldGEuZnVsbFBhdGgsICd1dGYtOCcpO1xuXG4gICAgICAgIGxldCBjc3MgPSByZXdyaXRlQ3NzKFxuICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgbWV0YS5wb3N0Zml4LFxuICAgICAgICAgIG1ldGEuZmlsZU5hbWUsXG4gICAgICAgICAgb3B0aW9ucy5sYXllck5hbWUsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGNzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHZpdGU6IHtcbiAgICAgIGFzeW5jIGNvbmZpZ1Jlc29sdmVkKGNvbmZpZykge1xuICAgICAgICB2aXRlQ29uZmlnID0gY29uZmlnO1xuXG4gICAgICAgIC8vIFJlc29sdmUgVml0ZSdzIHByZXByb2Nlc3NDU1MgZnJvbSB0aGUgYXBwIHJvb3QgdG8gZW5zdXJlIHdlIGZpbmRcbiAgICAgICAgLy8gdGhlIGNvcnJlY3QgVml0ZSBpbnN0YWxsYXRpb24gKG5vdCBhIHN0YWxlIG9yIG1pc3Npbmcgb25lKS5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShjb25maWcucm9vdCk7XG4gICAgICAgICAgY29uc3Qgdml0ZVBhdGggPSByZXF1aXJlLnJlc29sdmUoJ3ZpdGUnKTtcbiAgICAgICAgICBjb25zdCB2aXRlTW9kdWxlID0gYXdhaXQgaW1wb3J0KHZpdGVQYXRoKTtcblxuICAgICAgICAgIHByZXByb2Nlc3NDU1MgPSB2aXRlTW9kdWxlLnByZXByb2Nlc3NDU1M7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIFZpdGUgbWF5IG5vdCBiZSByZXNvbHZhYmxlIGZyb20gdGhlIGNvbmZpZyByb290IGluIHNvbWUgc2V0dXBzO1xuICAgICAgICAgIC8vIHByZXByb2Nlc3NvciBzdXBwb3J0IGZvciBjb2xvY2F0ZWQgLnNjc3MgZmlsZXMgd2lsbCB0aHJvdyBhIGNsZWFyXG4gICAgICAgICAgLy8gZXJyb3IgYXQgbG9hZCB0aW1lIGlmIHVzZWQuXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlcmUgbWF5IG5vdCBiZSBtZXRhIGZvciB0aGlzIHJlcXVlc3QgeWV0LlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7Kn0gaWRcbiAgICAgICAqL1xuICAgICAgYXN5bmMgbG9hZChpZCkge1xuICAgICAgICBpZiAocmVxdWVzdC5pcy5jb2xvY2F0ZWQoaWQpKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gcmVxdWVzdC5jb2xvY2F0ZWQuZGVjb2RlKGlkKTtcblxuICAgICAgICAgIGxldCBjb2RlID0gcmVhZEZpbGVTeW5jKHBhcnNlZC5maWxlTmFtZSwgJ3V0Zi04Jyk7XG4gICAgICAgICAgbGV0IHJlbGF0aXZlRmlsZVBhdGggPSBwYXRoLnJlbGF0aXZlKENXRCwgcGFyc2VkLmZpbGVOYW1lKTtcblxuICAgICAgICAgIGNvbnN0IGV4dCA9IHBhdGguZXh0bmFtZShwYXJzZWQuZmlsZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICBpZiAoUFJFUFJPQ0VTU0VEX0VYVEVOU0lPTlMuaGFzKGV4dCkpIHtcbiAgICAgICAgICAgIGlmICghdml0ZUNvbmZpZyB8fCAhcHJlcHJvY2Vzc0NTUykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYFtlbWJlci1zY29wZWQtY3NzXSBDb2xvY2F0ZWQgQ1NTIGZpbGUgd2l0aCBleHRlbnNpb24gJyR7ZXh0fScgcmVxdWlyZXMgVml0ZS4gYCArXG4gICAgICAgICAgICAgICAgICBgQ1NTIHByZXByb2Nlc3NpbmcgaXMgb25seSBzdXBwb3J0ZWQgaW4gVml0ZSBidWlsZHMuYCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJlcHJvY2Vzc0NTUyhcbiAgICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgICAgcGFyc2VkLmZpbGVOYW1lLFxuICAgICAgICAgICAgICB2aXRlQ29uZmlnLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29kZSA9IHJlc3VsdC5jb2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBjc3MgPSByZXdyaXRlQ3NzKFxuICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgIHBhcnNlZC5wb3N0Zml4LFxuICAgICAgICAgICAgcmVsYXRpdmVGaWxlUGF0aCxcbiAgICAgICAgICAgIG9wdGlvbnMubGF5ZXJOYW1lLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4gY3NzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbm9kZTptb2R1bGUnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgcmV3cml0ZUNzcyB9IGZyb20gJy4uL2xpYi9jc3MvcmV3cml0ZS5qcyc7XG5pbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSAnLi4vbGliL3JlcXVlc3QuanMnO1xuXG5jb25zdCBNRVRBID0gJ3Njb3BlZC1jc3M6aW5saW5lJztcblxuLyoqXG4gKiBQbHVnaW4gZm9yIHN1cHBvcnRpbmcgdGhlIHN0eWxlcyBmcm9tXG4gKlxuICogPHRlbXBsYXRlPlxuICogICA8c3R5bGU+Li4uPC9zdHlsZT5cbiAqIDwvdGVtcGxhdGU+XG4gKlxuICogVGhpcyBwbHVnaW4gY2FuJ3QgaGF2ZSBITVIgZm9yIENTUyBiZWNhdXNlIGNoYW5nZXMgdG8gdGhlIENTUyBjb250ZW50IGFsdGVycyB0aGUgdGVtcGxhdGUgY29udGVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5saW5lKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBDV0QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KCd2aXRlJykuUmVzb2x2ZWRDb25maWcgfCB1bmRlZmluZWR9ICovXG4gIGxldCB2aXRlQ29uZmlnO1xuXG4gIC8qKiBAdHlwZSB7KChjb2RlOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIGNvbmZpZzogdW5rbm93bikgPT4gUHJvbWlzZTx7IGNvZGU6IHN0cmluZyB9PikgfCB1bmRlZmluZWR9ICovXG4gIGxldCBwcmVwcm9jZXNzQ1NTO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgdGhlIHJlcXVlc3QgaWQgLyB3aGF0IHdhcyBpbXBvcnRlZFxuICAgKi9cbiAgZnVuY3Rpb24gYnVpbGRSZXNwb25zZShpZCwgZmlsZVBhdGgpIHtcbiAgICBjb25zdCBwYXJzZWQgPSByZXF1ZXN0LmlubGluZS5kZWNvZGUoaWQpO1xuXG4gICAgY29uc3QgcmVsYXRpdmVGaWxlUGF0aCA9IHBhdGgucmVsYXRpdmUoQ1dELCBmaWxlUGF0aCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGZpbGVQYXRoLnNwbGl0KCc/JylbMF0sXG4gICAgICBtZXRhOiB7XG4gICAgICAgIFtNRVRBXToge1xuICAgICAgICAgIHJhd0NzczogcGFyc2VkLmNzcyxcbiAgICAgICAgICBwb3N0Zml4OiBwYXJzZWQucG9zdGZpeCxcbiAgICAgICAgICBmaWxlTmFtZTogcmVsYXRpdmVGaWxlUGF0aCxcbiAgICAgICAgICBsYW5nOiBwYXJzZWQubGFuZyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2VtYmVyLXNjb3BlZC1jc3M6aW5saW5lJyxcbiAgICByZXNvbHZlSWQoaWQsIGltcG9ydGVyKSB7XG4gICAgICBpZiAocmVxdWVzdC5pcy5pbmxpbmUoaWQpKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHJlcXVlc3QuaW5saW5lLmRlY29kZShpZCk7XG5cbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnJlc29sdmUoXG4gICAgICAgICAgcGF0aC5kaXJuYW1lKGltcG9ydGVyKSxcbiAgICAgICAgICBgJHtwYXRoLmJhc2VuYW1lKGltcG9ydGVyLCBwYXRoLmV4dG5hbWUoaW1wb3J0ZXIpKX0tJHtwYXJzZWQuaGFzaH0uY3NzYCxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gYnVpbGRSZXNwb25zZShpZCwgZmlsZVBhdGgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgbG9hZChpZCkge1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuZ2V0TW9kdWxlSW5mbyhpZCk/Lm1ldGE/LltNRVRBXTtcblxuICAgICAgaWYgKG1ldGEpIHtcbiAgICAgICAgbGV0IHJhd0NzcyA9IG1ldGEucmF3Q3NzO1xuXG4gICAgICAgIGlmIChtZXRhLmxhbmcpIHtcbiAgICAgICAgICBpZiAoIXZpdGVDb25maWcgfHwgIXByZXByb2Nlc3NDU1MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFtlbWJlci1zY29wZWQtY3NzXSA8c3R5bGUgc2NvcGVkIGxhbmc9XCIke21ldGEubGFuZ31cIj4gcmVxdWlyZXMgVml0ZS4gYCArXG4gICAgICAgICAgICAgICAgYENTUyBwcmVwcm9jZXNzaW5nIHZpYSB0aGUgJ2xhbmcnIGF0dHJpYnV0ZSBpcyBvbmx5IHN1cHBvcnRlZCBpbiBWaXRlIGJ1aWxkcy5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmYWtlRmlsZW5hbWUgPSBgJHttZXRhLmZpbGVOYW1lfS4ke21ldGEubGFuZ31gO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByZXByb2Nlc3NDU1MocmF3Q3NzLCBmYWtlRmlsZW5hbWUsIHZpdGVDb25maWcpO1xuXG4gICAgICAgICAgcmF3Q3NzID0gcmVzdWx0LmNvZGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjc3MgPSByZXdyaXRlQ3NzKFxuICAgICAgICAgIHJhd0NzcyxcbiAgICAgICAgICBtZXRhLnBvc3RmaXgsXG4gICAgICAgICAgYDxpbmxpbmU+LyR7bWV0YS5maWxlTmFtZX1gLFxuICAgICAgICAgIG9wdGlvbnMubGF5ZXJOYW1lLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBjc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB2aXRlOiB7XG4gICAgICBhc3luYyBjb25maWdSZXNvbHZlZChjb25maWcpIHtcbiAgICAgICAgdml0ZUNvbmZpZyA9IGNvbmZpZztcblxuICAgICAgICAvLyBSZXNvbHZlIFZpdGUncyBwcmVwcm9jZXNzQ1NTIGZyb20gdGhlIGFwcCByb290IHRvIGVuc3VyZSB3ZSBmaW5kXG4gICAgICAgIC8vIHRoZSBjb3JyZWN0IFZpdGUgaW5zdGFsbGF0aW9uIChub3QgYSBzdGFsZSBvciBtaXNzaW5nIG9uZSkuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUocGF0aC5qb2luKGNvbmZpZy5yb290LCAncGFja2FnZS5qc29uJykpO1xuICAgICAgICAgIGNvbnN0IHZpdGVQYXRoID0gcmVxdWlyZS5yZXNvbHZlKCd2aXRlJyk7XG4gICAgICAgICAgY29uc3Qgdml0ZU1vZHVsZSA9IGF3YWl0IGltcG9ydCh2aXRlUGF0aCk7XG5cbiAgICAgICAgICBwcmVwcm9jZXNzQ1NTID0gdml0ZU1vZHVsZS5wcmVwcm9jZXNzQ1NTO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBWaXRlIG1heSBub3QgYmUgcmVzb2x2YWJsZSBmcm9tIHRoZSBjb25maWcgcm9vdCBpbiBzb21lIHNldHVwcztcbiAgICAgICAgICAvLyBsYW5nPSBzdXBwb3J0IHdpbGwgdGhyb3cgYSBjbGVhciBlcnJvciBhdCBsb2FkIHRpbWUgaWYgdXNlZC5cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSBmcm9tICd1bnBsdWdpbic7XG5cbmltcG9ydCB7IGNvbG9jYXRlZCB9IGZyb20gJy4vdW5wbHVnaW4tY29sb2NhdGVkLmpzJztcbmltcG9ydCB7IGlubGluZSB9IGZyb20gJy4vdW5wbHVnaW4taW5saW5lLmpzJztcblxuLyoqXG4gKiBUaGUgcGx1Z2luIHRoYXQgaGFuZGxlcyBDU1MgcmVxdWVzdHMgZm9yIGA8c3R5bGU+YCBlbGVtZW50cyBhbmQgdHJhbnNmb3Jtc1xuICogZm9yIGV4aXN0aW5nIGZpbGVzXG4gKlxuICogdml0ZTogQ1NTIGZpbGVzIGFyZSByZXNvbHZlZCBieSB2aXRlLiBXZSB1c2UgdGhlaXIgcmVzb2x2ZXIgdG8gYWxzbyBnZXRcbiAqICAgICAgIEhNUi4gVGhhdCBpcywgZm9yIGFsbCBub24tcGh5c2ljYWwgQ1NTIGZpbGVzLCB3ZSBleHRlbmQgdml0ZSBieSBvdXJcbiAqICAgICAgIHJlc29sdmVyIGFuZCBhbHNvIGNhbiBlbnJpY2ggbWV0YWRhdGEgdG8gaXQgKGZvciBiZXR0ZXIgZGVidWdnaW5nKVxuICovXG5leHBvcnQgY29uc3QgdW5wbHVnaW4gPSBjcmVhdGVVbnBsdWdpbigob3B0aW9ucyA9IHt9KSA9PiB7XG4gIHJldHVybiBbY29sb2NhdGVkKG9wdGlvbnMpLCBpbmxpbmUob3B0aW9ucyldO1xufSk7XG4iLCJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgeyBsZWFkaW5nU2xhc2hQYXRoIH0gZnJvbSAnLi9jb25zdC5qcyc7XG5pbXBvcnQgeyBmaW5kV29ya3NwYWNlUGF0aCB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG4vKipcbiAqIHRlbXBsYXRlIHBsdWdpbnMgZG8gbm90IGhhbmQgdXMgdGhlIGNvcnJlY3QgZmlsZSBwYXRoLlxuICogYWRkaXRpb25hbGx5LCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gcmVseSBvbiB0aGlzIGRhdGEgaW4gdGhlIGZ1dHVyZSxcbiAqIHNvIHRoaXMgZnVuY3Rpb25zIGFjdHMgYXMgYSBtZWFucyBvZiBub3JtYWxpemluZyBfd2hhdGV2ZXJfIHdlJ3JlIGdpdmVuXG4gKiBpbiB0aGUgZnV0dXJlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpeEZpbGVuYW1lKGZpbGVuYW1lKSB7XG4gIGxldCBmaWxlTmFtZSA9IGZpbGVuYW1lO1xuICBsZXQgd29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoZmlsZU5hbWUpO1xuXG4gIC8qKlxuICAgKiBlbWJlci1zb3VyY2UgNS44OlxuICAgKiAtIHRoZSBmaWxlbmFtZSBsb29rcyBsaWtlIGFuIGFic29sdXRlIHBhdGgsIGJ1dCBzd2FwcGVkIG91dCB0aGUgJ2FwcCcgcGFydCBvZiB0aGUgcGF0aFxuICAgKiAgIHdpdGggdGhlIG1vZHVsZSBuYW1lLCBzbyB0aGUgZmlsZSBwYXRocyBuZXZlciBleGlzdCBvbiBkaXNrXG4gICAqXG4gICAqIC0gaW4gdml0ZSBhcHBzOlxuICAgKiAgIHRoZSAnYXBwJyBwYXJ0IF9tYXlfIGJlIGBzcmNgLCBzbyB3ZSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgYHNyY2AgaXMgZXhjbHVkZWQgYXMgd2VsbFxuICAgKi9cbiAgbGV0IGhhc0FwcERpciA9IGZpbGVOYW1lLmluY2x1ZGVzKHBhdGguam9pbih3b3Jrc3BhY2UsICdhcHAnKSk7XG4gIGxldCBoYXNTcmNEaXIgPSBmaWxlTmFtZS5pbmNsdWRlcyhwYXRoLmpvaW4od29ya3NwYWNlLCAnc3JjJykpO1xuXG4gIGlmIChcbiAgICAhKGhhc0FwcERpciB8fCBoYXNTcmNEaXIpICYmXG4gICAgIWZpbGVOYW1lLmluY2x1ZGVzKGxlYWRpbmdTbGFzaFBhdGguZW1icm9pZGVyRGlyKVxuICApIHtcbiAgICBsZXQgbWF5YmVNb2R1bGUgPSBmaWxlTmFtZS5yZXBsYWNlKHdvcmtzcGFjZSwgJycpO1xuICAgIGxldCBbbWF5YmVTY29wZSwgLi4ucmVzdF0gPSBtYXliZU1vZHVsZS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGxldCBwYXJ0cyA9IHJlc3Q7XG5cbiAgICBpZiAobWF5YmVTY29wZS5zdGFydHNXaXRoKCdAJykpIHtcbiAgICAgIGxldCBbLCAuLi5yZXN0ZXJdID0gcmVzdDtcblxuICAgICAgcGFydHMgPSByZXN0ZXI7XG4gICAgfVxuXG4gICAgbGV0IHJlbGF0aXZlID0gcGF0aC5qb2luKC4uLnBhcnRzKTtcblxuICAgIC8qKlxuICAgICAqIFdlIGRvbid0IGFjdHVhbGx5IGtub3cgaWYgdGhpcyBmaWxlIGlzIGFuIGFwcC5cbiAgICAgKiBpdCBjb3VsZCBiZSBhbiBhZGRvbiAodjEgb3IgdjIpXG4gICAgICpcbiAgICAgKiBTbyBoZXJlIHdlIGxvZyB0byBzZWUgaWYgd2UgaGF2ZSB1bmhhbmRsZWQgc2l0dWF0aW9ucy5cbiAgICAgKi9cbiAgICBsZXQgY2FuZGlkYXRlUGF0aCA9IHBhdGguam9pbih3b3Jrc3BhY2UsICdhcHAnLCByZWxhdGl2ZSk7XG5cbiAgICByZXR1cm4gY2FuZGlkYXRlUGF0aDtcbiAgfVxuXG4gIC8vIFRPRE86IHdoeSBhcmUgd2UgcGFzc2VkIGZpbGVzIHRvIG90aGVyIHByb2plY3RzP1xuICBpZiAoIWZpbGVOYW1lLmluY2x1ZGVzKHdvcmtzcGFjZSkpIHtcbiAgICByZXR1cm4gZmlsZU5hbWU7XG4gIH1cblxuICAvLyBGYWxsYmFjayB0byB3aGF0IHRoZSBwbHVnaW4gc3lzdGVtIGdpdmVzIHVzLlxuICAvLyBUaGlzIG1heSBiZSB3cm9uZywgYW5kIGlmIHdyb25nLCByZXZlYWxzXG4gIC8vIHVuaGFuZGxlZCBzY2VuYXJpb3Mgd2l0aCB0aGUgZmlsZSBuYW1lcyBpbiB0aGUgcGx1Z2luIGluZnJhXG4gIHJldHVybiBmaWxlTmFtZTtcbn1cbiIsImltcG9ydCAqIGFzIHJlY2FzdCBmcm9tICdlbWJlci10ZW1wbGF0ZS1yZWNhc3QnO1xuXG5pbXBvcnQgeyByZW5hbWVDbGFzcyB9IGZyb20gJy4vcmVuYW1lQ2xhc3MuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGVQbHVnaW4oeyBjbGFzc2VzLCB0YWdzLCBwb3N0Zml4IH0pIHtcbiAgbGV0IHN0YWNrID0gW107XG4gIC8vIHNjb3BlZC1jbGFzcyBpcyBhIGdsb2JhbCB3ZSBhbGxvdyBpbiBoYnNcbiAgLy8gc2NvcGVkQ2xhc3MgaXMgaW1wb3J0YWJsZSwgYW5kIHdlJ2xsIGVycm9yIGlmIHNvbWVvbmUgdHJpZXMgdG8gcmVuYW1lIGl0XG4gIGxldCBzY29wZWRDbGFzc0NhbmRpZGF0ZXMgPSBbJ3Njb3BlZC1jbGFzcycsICdzY29wZWRDbGFzcyddO1xuXG4gIGZ1bmN0aW9uIGlzU2NvcGVkQ2xhc3Moc3RyKSB7XG4gICAgaWYgKCFzdHIpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBzY29wZWRDbGFzc0NhbmRpZGF0ZXMuc29tZSgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUgPT09IHN0cik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIEF0dHJOb2RlKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLm5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgICAgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ1RleHROb2RlJyAmJiBub2RlLnZhbHVlLmNoYXJzKSB7XG4gICAgICAgICAgY29uc3QgcmVuYW1lZENsYXNzID0gcmVuYW1lQ2xhc3Mobm9kZS52YWx1ZS5jaGFycywgcG9zdGZpeCwgY2xhc3Nlcyk7XG5cbiAgICAgICAgICBub2RlLnZhbHVlLmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ0NvbmNhdFN0YXRlbWVudCcpIHtcbiAgICAgICAgICBmb3IgKGxldCBwYXJ0IG9mIG5vZGUudmFsdWUucGFydHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0LnR5cGUgPT09ICdUZXh0Tm9kZScgJiYgcGFydC5jaGFycykge1xuICAgICAgICAgICAgICBjb25zdCByZW5hbWVkQ2xhc3MgPSByZW5hbWVDbGFzcyhwYXJ0LmNoYXJzLCBwb3N0Zml4LCBjbGFzc2VzKTtcblxuICAgICAgICAgICAgICBwYXJ0LmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0LnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgICAgICAgcmVjYXN0LnRyYXZlcnNlKHBhcnQsIHtcbiAgICAgICAgICAgICAgICBTdHJpbmdMaXRlcmFsKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbmFtZWRDbGFzcyA9IHJlbmFtZUNsYXNzKFxuICAgICAgICAgICAgICAgICAgICBub2RlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwb3N0Zml4LFxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgbm9kZS52YWx1ZSA9IHJlbmFtZWRDbGFzcztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgRWxlbWVudE5vZGUobm9kZSkge1xuICAgICAgaWYgKHRhZ3MuaGFzKG5vZGUudGFnKSkge1xuICAgICAgICAvLyBjaGVjayBpZiBjbGFzcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgY29uc3QgY2xhc3NBdHRyID0gbm9kZS5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIubmFtZSA9PT0gJ2NsYXNzJyk7XG5cbiAgICAgICAgaWYgKGNsYXNzQXR0cikge1xuICAgICAgICAgIGNsYXNzQXR0ci52YWx1ZS5jaGFycyArPSAnICcgKyBwb3N0Zml4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHB1c2ggY2xhc3MgYXR0cmlidXRlXG4gICAgICAgICAgbm9kZS5hdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICByZWNhc3QuYnVpbGRlcnMuYXR0cignY2xhc3MnLCByZWNhc3QuYnVpbGRlcnMudGV4dChwb3N0Zml4KSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBBbGw6IHtcbiAgICAgIGVudGVyKG5vZGUpIHtcbiAgICAgICAgc3RhY2sucHVzaChub2RlKTtcbiAgICAgIH0sXG4gICAgICBleGl0KCkge1xuICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIE11c3RhY2hlU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgIGxldCBjc3NDbGFzcztcblxuICAgICAgaWYgKFxuICAgICAgICBpc1Njb3BlZENsYXNzKGdldFZhbHVlKG5vZGUucGF0aCkpICYmXG4gICAgICAgIG5vZGUucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY3NzQ2xhc3MgPSBub2RlLnBhcmFtc1swXS52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBpc1Njb3BlZENsYXNzKGdldFZhbHVlKG5vZGUucGF0aD8ucGF0aCkpICYmXG4gICAgICAgIG5vZGUucGF0aD8ucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXRoPy5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY3NzQ2xhc3MgPSBub2RlLnBhdGgucGFyYW1zWzBdLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3NzQ2xhc3MpIHtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSByZWNhc3QuYnVpbGRlcnMudGV4dChyZW5hbWVDbGFzcyhjc3NDbGFzcywgcG9zdGZpeCkpO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgICBpZiAocGFyZW50Py50eXBlID09PSAnQXR0ck5vZGUnKSB7XG4gICAgICAgICAgcGFyZW50LnF1b3RlVHlwZSA9ICdcIic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGV4dE5vZGU7XG4gICAgICB9XG4gICAgfSxcblxuICAgIFN1YkV4cHJlc3Npb24obm9kZSkge1xuICAgICAgaWYgKFxuICAgICAgICBpc1Njb3BlZENsYXNzKGdldFZhbHVlKG5vZGUucGF0aCkpICYmXG4gICAgICAgIG5vZGUucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY3NzQ2xhc3MgPSBub2RlLnBhcmFtc1swXS52YWx1ZTtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSByZWNhc3QuYnVpbGRlcnMubGl0ZXJhbChcbiAgICAgICAgICAnU3RyaW5nTGl0ZXJhbCcsXG4gICAgICAgICAgcmVuYW1lQ2xhc3MoY3NzQ2xhc3MsIHBvc3RmaXgpLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0ZXh0Tm9kZTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZShwYXRoKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuO1xuXG4gIGlmICgndmFsdWUnIGluIHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXByZWNhdGVkIGluIGVtYmVyIDUuOStcbiAgICogKHNvIHdlIHVzZSB0aGUgYWJvdmUgZm9yIG5ld2VyIGVtYmVycylcbiAgICovXG4gIHJldHVybiBwYXRoLm9yaWdpbmFsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXdyaXRlSGJzKGhicywgY2xhc3NlcywgdGFncywgcG9zdGZpeCkge1xuICBsZXQgYXN0ID0gcmVjYXN0LnBhcnNlKGhicyk7XG5cbiAgcmVjYXN0LnRyYXZlcnNlKGFzdCwgdGVtcGxhdGVQbHVnaW4oeyBjbGFzc2VzLCB0YWdzLCBwb3N0Zml4IH0pKTtcblxuICBsZXQgcmVzdWx0ID0gcmVjYXN0LnByaW50KGFzdCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGdsaW1tZXIvc3ludGF4JykuQVNUUGx1Z2lufSBBU1RQbHVnaW5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BnbGltbWVyL3N5bnRheCcpLkFTVFBsdWdpbkVudmlyb25tZW50fSBBU1RQbHVnaW5FbnZpcm9ubWVudFxuICpcbiAqL1xuXG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHsgcmV3cml0ZUNzcyB9IGZyb20gJy4uL2xpYi9jc3MvcmV3cml0ZS5qcyc7XG5pbXBvcnQgeyBnZXRDU1NDb250ZW50SW5mbywgZ2V0Q1NTSW5mbyB9IGZyb20gJy4uL2xpYi9jc3MvdXRpbHMuanMnO1xuaW1wb3J0IHsgZml4RmlsZW5hbWUgfSBmcm9tICcuLi9saWIvcGF0aC90ZW1wbGF0ZS10cmFuc2Zvcm0tcGF0aHMuanMnO1xuaW1wb3J0IHtcbiAgYXBwUGF0aCxcbiAgY3NzUGF0aEZvcixcbiAgZm9yY2VQb3NpeCxcbiAgaGFzaEZyb21Nb2R1bGVQYXRoLFxuICBpc1JlbGV2YW50RmlsZSxcbn0gZnJvbSAnLi4vbGliL3BhdGgvdXRpbHMuanMnO1xuaW1wb3J0IHsgcmVxdWVzdCB9IGZyb20gJy4uL2xpYi9yZXF1ZXN0LmpzJztcbmltcG9ydCB7IHRlbXBsYXRlUGx1Z2luIH0gZnJvbSAnLi4vbGliL3Jld3JpdGVIYnMuanMnO1xuXG5jb25zdCBub29wUGx1Z2luID0ge1xuICBuYW1lOiAnZW1iZXItc2NvcGVkLWNzczpub29wJyxcbiAgdmlzaXRvcjoge30sXG59O1xuXG4vKipcbiAqIEByZXR1cm5zIHtBU1RQbHVnaW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQbHVnaW4oY29uZmlnKSB7XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0FTVFBsdWdpbkVudmlyb25tZW50fSBlbnZcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBzY29wZWRDc3MoZW52KSB7XG4gICAgbGV0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgICBsZXQgaXNSZWxldmFudCA9IGlzUmVsZXZhbnRGaWxlKGVudi5maWxlbmFtZSwge1xuICAgICAgYWRkaXRpb25hbFJvb3RzOiBjb25maWcuYWRkaXRpb25hbFJvb3RzLFxuICAgICAgY3dkLFxuICAgIH0pO1xuXG4gICAgaWYgKCFpc1JlbGV2YW50KSB7XG4gICAgICByZXR1cm4gbm9vcFBsdWdpbjtcbiAgICB9XG5cbiAgICBsZXQgYWJzb2x1dGVQYXRoID0gZml4RmlsZW5hbWUoZW52LmZpbGVuYW1lKTtcbiAgICBsZXQgbW9kdWxlUGF0aCA9IGFwcFBhdGgoYWJzb2x1dGVQYXRoKTtcbiAgICBsZXQgcG9zdGZpeCA9IGhhc2hGcm9tTW9kdWxlUGF0aChtb2R1bGVQYXRoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBsaXN0IG9mIG5ha2VkIHRhZyBzZWxlY3RvcnMgZm91bmQgaW4gdGhlIENTU1xuICAgICAqXG4gICAgICogQHR5cGUge1NldDxzdHJpbmc+fVxuICAgICAqL1xuICAgIGxldCBzY29wZWRUYWdzID0gbmV3IFNldCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxpc3Qgb2YgY2xhc3NlcyBmb3VuZCBpbiB0aGUgQ1NTXG4gICAgICpcbiAgICAgKiBAdHlwZSB7U2V0PHN0cmluZz59XG4gICAgICovXG4gICAgbGV0IHNjb3BlZENsYXNzZXMgPSBuZXcgU2V0KCk7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge3sgdGFnczogU2V0PHN0cmluZz47IGNsYXNzZXM6IFNldDxzdHJpbmc+IH19IGluZm9cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZGRJbmZvKGluZm8pIHtcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgaW5mby50YWdzKSB7XG4gICAgICAgIHNjb3BlZFRhZ3MuYWRkKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpdGVtIG9mIGluZm8uY2xhc3Nlcykge1xuICAgICAgICBzY29wZWRDbGFzc2VzLmFkZChpdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY3NzUGF0aCA9IGNzc1BhdGhGb3IoYWJzb2x1dGVQYXRoKTtcbiAgICBsZXQgaW5mbyA9IGdldENTU0luZm8oY3NzUGF0aCk7XG4gICAgbGV0IGxvY2FsQ3NzUGF0aCA9IGZvcmNlUG9zaXgoY3NzUGF0aC5yZXBsYWNlKGN3ZCArIHBhdGguc2VwLCAnJykpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGJlIGZhbHNleSBpZiB3ZSBkb24ndCBoYXZlIGEgY28tbG9jYXRlZCBDU1MgZmlsZS5cbiAgICAgKiBXZSdsbCBzdGlsbCB3YW50IHRvIGNoZWNrIGZvciBlbWJlZGRlZCA8c3R5bGUgc2NvcGVkPiB0YWdzIHRob3VnaC5cbiAgICAgKi9cbiAgICBpZiAoaW5mbykge1xuICAgICAgYWRkSW5mbyhpbmZvKTtcblxuICAgICAgbGV0IGNzc1JlcXVlc3QgPSByZXF1ZXN0LmNvbG9jYXRlZC5jcmVhdGUoaW5mby5pZCwgcG9zdGZpeCwgbG9jYWxDc3NQYXRoKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBXaXRoIHRoaXMgd2UgZG9uJ3QgbmVlZCBhIEpTIHBsdWdpblxuICAgICAgICovXG4gICAgICBlbnYubWV0YS5qc3V0aWxzLmltcG9ydEZvclNpZGVFZmZlY3QoY3NzUmVxdWVzdCk7XG4gICAgfVxuXG4gICAgbGV0IHZpc2l0b3JzID0gdGVtcGxhdGVQbHVnaW4oe1xuICAgICAgY2xhc3Nlczogc2NvcGVkQ2xhc3NlcyxcbiAgICAgIHRhZ3M6IHNjb3BlZFRhZ3MsXG4gICAgICBwb3N0Zml4LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdlbWJlci1zY29wZWQtY3NzOnRlbXBsYXRlLXBsdWdpbicsXG4gICAgICB2aXNpdG9yOiB7XG4gICAgICAgIC8vIFN0YWNrIE1hbmFnZXJcbiAgICAgICAgLi4udmlzaXRvcnMsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdlIGhhdmUgdG8gZWFnZXJseSBnZXQgdGhlIDxzdHlsZSBzY29wZWQ+IGNvbnRlbnRzLCBzbyB3ZSBjYW4gcHJlLXBhcnNlXG4gICAgICAgICAqIHRoZSB0YWdzIGFuZCBjbGFzc2VzIHRvIHRoZW4gcGFzcyB0byB0aGUgb3RoZXIgdmlzaXRvcnMgc28gdGhhdCB0aGV5IGNhblxuICAgICAgICAgKiBhcHByb3ByaWF0ZWx5IGNoYW5nZSBtYXRjaGluZyBjbGFzc2VzIC8gdGFncy5cbiAgICAgICAgICovXG4gICAgICAgIFRlbXBsYXRlKG5vZGUpIHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBXZSBvbmx5IGFsbG93IGEgc2NvcGVkIDxzdHlsZT4gYXQgdGhlIHJvb3RcbiAgICAgICAgICAgKi9cbiAgICAgICAgICBsZXQgc3R5bGVUYWcgPSBub2RlLmJvZHkuZmluZChcbiAgICAgICAgICAgIChuKSA9PiBuLnR5cGUgPT09ICdFbGVtZW50Tm9kZScgJiYgbi50YWcgPT09ICdzdHlsZScsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChoYXNTY29wZWRBdHRyaWJ1dGUoc3R5bGVUYWcpKSB7XG4gICAgICAgICAgICBsZXQgY3NzID0gdGV4dENvbnRlbnQoc3R5bGVUYWcpO1xuICAgICAgICAgICAgbGV0IGxhbmcgPSBnZXRMYW5nQXR0cmlidXRlKHN0eWxlVGFnKTtcbiAgICAgICAgICAgIGxldCBpbmZvID0gZ2V0Q1NTQ29udGVudEluZm8oY3NzLCBsYW5nKTtcblxuICAgICAgICAgICAgYWRkSW5mbyhpbmZvKTtcblxuICAgICAgICAgICAgaWYgKGhhc0lubGluZUF0dHJpYnV0ZVdpdGhvdXRMYW5nKHN0eWxlVGFnKSkge1xuICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICogVGhpcyB3aWxsIGJlIGhhbmRsZWQgaW4gRWxlbWVudE5vZGUgdHJhdmVyc2FsXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsYW5nKSB7XG4gICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgKiBGb3IgPHN0eWxlIHNjb3BlZCBpbmxpbmUgbGFuZz1cIi4uLlwiPiB3ZSBjYW5ub3QgcHJlcHJvY2VzcyBhdCBCYWJlbC10aW1lXG4gICAgICAgICAgICAgICAqIChwcmVwcm9jZXNzaW5nIGlzIGFzeW5jIGFuZCByZXF1aXJlcyBWaXRlJ3MgUmVzb2x2ZWRDb25maWcpLlxuICAgICAgICAgICAgICAgKiBSZW1vdmUgdGhlIHRhZyBhbmQgaW5qZWN0IHZpYSB2aXJ0dWFsIENTUyBtb2R1bGUgYW5kIHdhcm4gdXNlci5cbiAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICBgW2VtYmVyLXNjb3BlZC1jc3NdIDxzdHlsZSBzY29wZWQgaW5saW5lIGxhbmc9XCIke2xhbmd9XCI+IGlzIG5vdCBzdXBwb3J0ZWQgYCArXG4gICAgICAgICAgICAgICAgICBgKHByZXByb2Nlc3NpbmcgaXMgYXN5bmMgYW5kIGNhbm5vdCBydW4gYXQgQmFiZWwtdGltZSkuIGAgK1xuICAgICAgICAgICAgICAgICAgYERvd25ncmFkaW5nIHRvIG5vbi1pbmxpbmU6IHRoZSBzdHlsZSB0YWcgd2lsbCBiZSByZW1vdmVkIGFuZCBpbmplY3RlZCBhcyBhIHZpcnR1YWwgQ1NTIG1vZHVsZS5gLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgY3NzUmVxdWVzdCA9IHJlcXVlc3QuaW5saW5lLmNyZWF0ZShpbmZvLmlkLCBwb3N0Zml4LCBjc3MsIGxhbmcpO1xuXG4gICAgICAgICAgICBlbnYubWV0YS5qc3V0aWxzLmltcG9ydEZvclNpZGVFZmZlY3QoY3NzUmVxdWVzdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFZpc2l0b3JzIGJyb2tlbiBvdXQgbGlrZSB0aGlzIHNvIHdlIGNhbiBjb25kaXRpb25hbGx5XG4gICAgICAgIC8vIGRlYnVnIGJhc2VkIG9uIGZpbGUgcGF0aC5cbiAgICAgICAgQXR0ck5vZGUoLi4uYXJncykge1xuICAgICAgICAgIHJldHVybiB2aXNpdG9ycy5BdHRyTm9kZSguLi5hcmdzKTtcbiAgICAgICAgfSxcbiAgICAgICAgRWxlbWVudE5vZGUobm9kZSwgd2Fsa2VyKSB7XG4gICAgICAgICAgLy8gY2xhc3MgYXR0cmlidXRlIGhhbmRsaW5nXG4gICAgICAgICAgdmlzaXRvcnMuRWxlbWVudE5vZGUobm9kZSwgd2Fsa2VyKTtcblxuICAgICAgICAgIGlmIChoYXNTY29wZWRBdHRyaWJ1dGUobm9kZSkpIHtcbiAgICAgICAgICAgIGlmICh3YWxrZXIucGFyZW50Py5ub2RlLnR5cGUgIT09ICdUZW1wbGF0ZScpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICc8c3R5bGUgc2NvcGVkPiB0YWdzIG11c3QgYmUgYXQgdGhlIHJvb3Qgb2YgdGhlIHRlbXBsYXRlLCB0aGV5IGNhbm5vdCBiZSBuZXN0ZWQnLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzSW5saW5lQXR0cmlidXRlV2l0aG91dExhbmcobm9kZSkpIHtcbiAgICAgICAgICAgICAgbGV0IHRleHQgPSB0ZXh0Q29udGVudChub2RlKTtcbiAgICAgICAgICAgICAgbGV0IHNjb3BlZFRleHQgPSByZXdyaXRlQ3NzKFxuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgcG9zdGZpeCxcbiAgICAgICAgICAgICAgICBsb2NhbENzc1BhdGgsXG4gICAgICAgICAgICAgICAgY29uZmlnLmxheWVyTmFtZSxcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICogVHJhdmVyc2UgdGhpcyBhbmQgYWxsb3cgaW50ZXJwb2xhdGlvblxuICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbiA9IFtlbnYuc3ludGF4LmJ1aWxkZXJzLnRleHQoc2NvcGVkVGV4dCldO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUmV0dXJuaW5nIG51bGwgcmVtb3ZlcyB0aGUgbm9kZVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGhhc0lubGluZUF0dHJpYnV0ZVdpdGhvdXRMYW5nKG5vZGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGA8c3R5bGUgaW5saW5lPiBpcyBub3QgdmFsaWQuIFBsZWFzZSBhZGQgdGhlIHNjb3BlZCBhdHRyaWJ1dGU6IDxzdHlsZSBzY29wZWQgaW5saW5lPmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgTXVzdGFjaGVTdGF0ZW1lbnQoLi4uYXJncykge1xuICAgICAgICAgIHJldHVybiB2aXNpdG9ycy5NdXN0YWNoZVN0YXRlbWVudCguLi5hcmdzKTtcbiAgICAgICAgfSxcbiAgICAgICAgU3ViRXhwcmVzc2lvbiguLi5hcmdzKSB7XG4gICAgICAgICAgcmV0dXJuIHZpc2l0b3JzLlN1YkV4cHJlc3Npb24oLi4uYXJncyk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH07XG59XG5cbi8qKlxuICogVGhhbmtzLCBDYXJkU3RhY2sgYW5kIEBlZjQgZm9yIHRoaXMgY29kZS5cbiAqL1xuY29uc3QgU0NPUEVEX0FUVFJJQlVURV9OQU1FID0gJ3Njb3BlZCc7XG5jb25zdCBJTkxJTkVfQVRUUklCVVRFX05BTUUgPSAnaW5saW5lJztcbmNvbnN0IExBTkdfQVRUUklCVVRFX05BTUUgPSAnbGFuZyc7XG5cbmZ1bmN0aW9uIGhhc1Njb3BlZEF0dHJpYnV0ZShub2RlKSB7XG4gIGlmICghbm9kZSkgcmV0dXJuO1xuICBpZiAobm9kZS50YWcgIT09ICdzdHlsZScpIHJldHVybjtcbiAgaWYgKG5vZGUudHlwZSAhPT0gJ0VsZW1lbnROb2RlJykgcmV0dXJuO1xuXG4gIHJldHVybiBub2RlLmF0dHJpYnV0ZXMuc29tZShcbiAgICAoYXR0cmlidXRlKSA9PiBhdHRyaWJ1dGUubmFtZSA9PT0gU0NPUEVEX0FUVFJJQlVURV9OQU1FLFxuICApO1xufVxuXG5mdW5jdGlvbiBoYXNJbmxpbmVBdHRyaWJ1dGVXaXRob3V0TGFuZyhub2RlKSB7XG4gIGlmICghbm9kZSkgcmV0dXJuO1xuICBpZiAobm9kZS50YWcgIT09ICdzdHlsZScpIHJldHVybjtcbiAgaWYgKG5vZGUudHlwZSAhPT0gJ0VsZW1lbnROb2RlJykgcmV0dXJuO1xuXG4gIGlmIChnZXRMYW5nQXR0cmlidXRlKG5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIG5vZGUuYXR0cmlidXRlcy5zb21lKFxuICAgIChhdHRyaWJ1dGUpID0+IGF0dHJpYnV0ZS5uYW1lID09PSBJTkxJTkVfQVRUUklCVVRFX05BTUUsXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGBsYW5nYCBhdHRyaWJ1dGUgb24gYSBgPHN0eWxlPmAgbm9kZSwgb3IgbnVsbCBpZiBhYnNlbnQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5vZGVcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsfVxuICovXG5mdW5jdGlvbiBnZXRMYW5nQXR0cmlidXRlKG5vZGUpIHtcbiAgaWYgKCFub2RlKSByZXR1cm4gbnVsbDtcbiAgaWYgKG5vZGUudGFnICE9PSAnc3R5bGUnKSByZXR1cm4gbnVsbDtcbiAgaWYgKG5vZGUudHlwZSAhPT0gJ0VsZW1lbnROb2RlJykgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgYXR0ciA9IG5vZGUuYXR0cmlidXRlcy5maW5kKFxuICAgIChhdHRyaWJ1dGUpID0+IGF0dHJpYnV0ZS5uYW1lID09PSBMQU5HX0FUVFJJQlVURV9OQU1FLFxuICApO1xuXG4gIGlmICghYXR0cikgcmV0dXJuIG51bGw7XG5cbiAgLy8gVGhlIGF0dHJpYnV0ZSB2YWx1ZSBpcyBhIFRleHROb2RlIGNoaWxkIG9mIHRoZSBBdHRyTm9kZSdzIHZhbHVlXG4gIGNvbnN0IHZhbHVlID0gYXR0ci52YWx1ZTtcblxuICBpZiAodmFsdWU/LnR5cGUgPT09ICdUZXh0Tm9kZScpIHJldHVybiB2YWx1ZS5jaGFycyB8fCBudWxsO1xuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiB0ZXh0Q29udGVudChub2RlKSB7XG4gIGxldCB0ZXh0Q2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLmZpbHRlcigoYykgPT4gYy50eXBlID09PSAnVGV4dE5vZGUnKTtcblxuICByZXR1cm4gdGV4dENoaWxkcmVuLm1hcCgoYykgPT4gYy5jaGFycykuam9pbignJyk7XG59XG4iLCJpbXBvcnQgKiBhcyBiYWJlbCBmcm9tICcuLi9iYWJlbC1wbHVnaW4uanMnO1xuaW1wb3J0IHsgdW5wbHVnaW4gfSBmcm9tICcuLi9zY29wZWQtY3NzLXVucGx1Z2luLmpzJztcbmltcG9ydCAqIGFzIHRlbXBsYXRlIGZyb20gJy4uL3RlbXBsYXRlLXBsdWdpbi5qcyc7XG5cbmV4cG9ydCBjb25zdCBzY29wZWRDU1MgPSB7XG4gIHZpdGU6IHVucGx1Z2luLnZpdGUsXG4gIHJvbGx1cDogdW5wbHVnaW4ucm9sbHVwLFxuICBiYWJlbDogYmFiZWwuc2NvcGVkQ1NTLFxuICB0ZW1wbGF0ZTogdGVtcGxhdGUuY3JlYXRlUGx1Z2luLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLE1BQWEsbUJBQW1CO0NBQzlCLGNBQWMsYUFBSyxLQUFLLDRCQUE0QjtDQUNwRCxhQUFhLGFBQUssS0FBSyxjQUFjO0NBQ3JDLGVBQWUsYUFBSyxLQUFLLGVBQWU7Q0FDeEMsY0FBYyxhQUFLLEtBQUssY0FBYztDQUN0QyxXQUFXLGFBQUssS0FBSyxXQUFXO0NBQ2hDLFFBQVEsYUFBSyxLQUFLLFVBQVU7Q0FDNUIsS0FBSyxhQUFLLEtBQUssUUFBUTtDQUN2QixLQUFLLGFBQUssS0FBSyxRQUFRO0NBQ3hCO0FBRUQsTUFBYSxXQUFXLEVBQ3RCLFNBQVMsYUFBSyxLQUFLLHFCQUFxQixFQUN6Qzs7Ozs7Ozs7Ozs7O0FDV0QsU0FBUyxRQUFRLEdBQUcsR0FBRztDQUNyQixJQUFJLE9BQU8sSUFBSSxVQUFXLElBQUk7QUFHOUIsU0FGVyxLQUFLLE9BQU8sS0FBSyxPQUFPLE9BQU8sT0FFM0IsS0FBTyxNQUFNOzs7Ozs7Ozs7QUFVOUIsU0FBUyxjQUFjLEtBQUssS0FBSztBQUMvQixRQUFRLE9BQU8sTUFBUSxRQUFTLEtBQUs7Ozs7Ozs7Ozs7Ozs7QUFjdkMsU0FBUyxPQUFPLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO0FBQ2hDLFFBQU8sUUFBUSxjQUFjLFFBQVEsUUFBUSxHQUFHLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7Ozs7Ozs7Ozs7Ozs7O0FBZTVFLFNBQVMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO0FBQ2xDLFFBQU8sT0FBUSxJQUFJLElBQU0sQ0FBQyxJQUFJLEdBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFOzs7Ozs7Ozs7Ozs7OztBQWVsRCxTQUFTLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztBQUNsQyxRQUFPLE9BQVEsSUFBSSxJQUFNLElBQUksQ0FBQyxHQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRTs7Ozs7Ozs7Ozs7Ozs7QUFlbEQsU0FBUyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7QUFDbEMsUUFBTyxPQUFPLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRTs7Ozs7Ozs7Ozs7Ozs7QUFlekMsU0FBUyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7QUFDbEMsUUFBTyxPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFOzs7Ozs7Ozs7QUFVNUMsU0FBUyxRQUFRLEdBQUcsS0FBSztBQUV2QixHQUFFLE9BQU8sTUFBTSxPQUFRLE1BQU07QUFDN0IsSUFBSyxNQUFNLE9BQVEsS0FBTSxLQUFLLE1BQU07Q0FFcEMsSUFBSTtDQUNKLElBQUk7Q0FDSixJQUFJO0NBQ0osSUFBSTtDQUNKLElBQUk7Q0FDSixJQUFJLElBQUk7Q0FDUixJQUFJLElBQUk7Q0FDUixJQUFJLElBQUk7Q0FDUixJQUFJLElBQUk7QUFFUixNQUFLLElBQUksR0FBRyxJQUFJLEVBQUUsUUFBUSxLQUFLLElBQUk7QUFDakMsU0FBTztBQUNQLFNBQU87QUFDUCxTQUFPO0FBQ1AsU0FBTztBQUVQLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLFdBQVc7QUFDMUMsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxXQUFXO0FBQy9DLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksVUFBVTtBQUM5QyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLFlBQVk7QUFDaEQsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxXQUFXO0FBQzlDLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksV0FBVztBQUMvQyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLFlBQVk7QUFDaEQsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxVQUFVO0FBQzlDLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsV0FBVztBQUM5QyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLFlBQVk7QUFDaEQsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEtBQUssSUFBSSxPQUFPO0FBQzVDLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLElBQUksWUFBWTtBQUNqRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLFdBQVc7QUFDL0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEtBQUssSUFBSSxVQUFVO0FBQy9DLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLElBQUksWUFBWTtBQUNqRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxJQUFJLFdBQVc7QUFFaEQsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxXQUFXO0FBQzlDLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsWUFBWTtBQUMvQyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxJQUFJLFVBQVU7QUFDL0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksV0FBVztBQUMzQyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLFdBQVc7QUFDOUMsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEtBQUssR0FBRyxTQUFTO0FBQzdDLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLElBQUksV0FBVztBQUNoRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLFdBQVc7QUFDL0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxVQUFVO0FBQzdDLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsWUFBWTtBQUNoRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLFdBQVc7QUFDL0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxXQUFXO0FBQy9DLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsWUFBWTtBQUNoRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLFVBQVU7QUFDN0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxXQUFXO0FBQy9DLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLElBQUksWUFBWTtBQUVqRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLFFBQVE7QUFDM0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxZQUFZO0FBQ2hELE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLElBQUksV0FBVztBQUNoRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxJQUFJLFVBQVU7QUFDL0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxZQUFZO0FBQy9DLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksV0FBVztBQUMvQyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLFdBQVc7QUFDL0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEtBQUssSUFBSSxZQUFZO0FBQ2pELE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsVUFBVTtBQUM5QyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxXQUFXO0FBQzNDLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksV0FBVztBQUMvQyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLFNBQVM7QUFDN0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxXQUFXO0FBQzlDLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLElBQUksV0FBVztBQUNoRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxJQUFJLFVBQVU7QUFDL0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxXQUFXO0FBRS9DLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLFdBQVc7QUFDMUMsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxXQUFXO0FBQy9DLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLElBQUksWUFBWTtBQUNqRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLFVBQVU7QUFDOUMsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEtBQUssR0FBRyxXQUFXO0FBQy9DLE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksWUFBWTtBQUNoRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxJQUFJLFNBQVM7QUFDOUMsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxZQUFZO0FBQ2hELE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsV0FBVztBQUM5QyxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxJQUFJLFVBQVU7QUFDL0MsTUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxZQUFZO0FBQ2hELE1BQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLElBQUksV0FBVztBQUNoRCxNQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUks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
package/dist/cjs/all.cjs CHANGED
@@ -1,3 +1,3 @@
1
- const require_all = require('./all-CFsaG5pM.cjs');
1
+ const require_all = require('./all-DxINxtbp.cjs');
2
2
 
3
3
  exports.scopedCSS = require_all.scopedCSS;
@@ -1,4 +1,4 @@
1
- const require_all = require('./all-CFsaG5pM.cjs');
1
+ const require_all = require('./all-DxINxtbp.cjs');
2
2
 
3
3
  //#region src/build/public-exports/babel.js
4
4
  const scopedCSS = require_all.scopedCSS.babel;
@@ -1,4 +1,4 @@
1
- const require_all = require('./all-CFsaG5pM.cjs');
1
+ const require_all = require('./all-DxINxtbp.cjs');
2
2
 
3
3
  //#region src/build/public-exports/rollup.js
4
4
  const scopedCSS = require_all.scopedCSS.rollup;
package/dist/cjs/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const require_all = require('./all-CFsaG5pM.cjs');
1
+ const require_all = require('./all-DxINxtbp.cjs');
2
2
 
3
3
  //#region src/build/public-exports/vite.js
4
4
  const scopedCSS = require_all.scopedCSS.vite;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-scoped-css",
3
- "version": "2.2.0",
3
+ "version": "2.2.1",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "ember-addon"
@@ -96,7 +96,7 @@ export function inline(options = {}) {
96
96
  // Resolve Vite's preprocessCSS from the app root to ensure we find
97
97
  // the correct Vite installation (not a stale or missing one).
98
98
  try {
99
- const require = createRequire(config.root);
99
+ const require = createRequire(path.join(config.root, 'package.json'));
100
100
  const vitePath = require.resolve('vite');
101
101
  const viteModule = await import(vitePath);
102
102