@esotericsoftware/spine-core 4.2.115 → 4.3.0

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.
Files changed (129) hide show
  1. package/dist/Animation.d.ts +426 -274
  2. package/dist/Animation.js +1174 -1210
  3. package/dist/AnimationState.d.ts +246 -201
  4. package/dist/AnimationState.js +508 -471
  5. package/dist/AnimationStateData.d.ts +12 -10
  6. package/dist/AnimationStateData.js +19 -20
  7. package/dist/AssetManagerBase.d.ts +29 -23
  8. package/dist/AssetManagerBase.js +67 -43
  9. package/dist/AtlasAttachmentLoader.d.ts +18 -12
  10. package/dist/AtlasAttachmentLoader.js +28 -39
  11. package/dist/Bone.d.ts +15 -109
  12. package/dist/Bone.js +22 -362
  13. package/dist/BoneData.d.ts +13 -28
  14. package/dist/BoneData.js +20 -29
  15. package/dist/BonePose.d.ts +130 -0
  16. package/dist/BonePose.js +426 -0
  17. package/dist/Constraint.d.ts +41 -0
  18. package/dist/Constraint.js +38 -0
  19. package/dist/ConstraintData.d.ts +7 -5
  20. package/dist/ConstraintData.js +5 -9
  21. package/dist/DrawOrder.d.ts +48 -0
  22. package/dist/DrawOrder.js +64 -0
  23. package/dist/Event.d.ts +11 -6
  24. package/dist/Event.js +10 -5
  25. package/dist/EventData.d.ts +10 -6
  26. package/dist/EventData.js +18 -7
  27. package/dist/IkConstraint.d.ts +22 -28
  28. package/dist/IkConstraint.js +115 -117
  29. package/dist/IkConstraintData.d.ts +23 -18
  30. package/dist/IkConstraintData.js +32 -22
  31. package/dist/IkConstraintPose.d.ts +49 -0
  32. package/dist/IkConstraintPose.js +55 -0
  33. package/dist/PathConstraint.d.ts +18 -22
  34. package/dist/PathConstraint.js +160 -136
  35. package/dist/PathConstraintData.d.ts +11 -14
  36. package/dist/PathConstraintData.js +14 -16
  37. package/dist/PathConstraintPose.d.ts +43 -0
  38. package/dist/PathConstraintPose.js +49 -0
  39. package/dist/Physics.d.ts +39 -0
  40. package/dist/Physics.js +41 -0
  41. package/dist/PhysicsConstraint.d.ts +26 -30
  42. package/dist/PhysicsConstraint.js +102 -94
  43. package/dist/PhysicsConstraintData.d.ts +22 -12
  44. package/dist/PhysicsConstraintData.js +23 -12
  45. package/dist/PhysicsConstraintPose.d.ts +47 -0
  46. package/dist/PhysicsConstraintPose.js +55 -0
  47. package/dist/Pose.d.ts +33 -0
  48. package/dist/Pose.js +30 -0
  49. package/dist/Posed.d.ts +58 -0
  50. package/dist/Posed.js +78 -0
  51. package/dist/PosedActive.d.ts +41 -0
  52. package/dist/{attachments/HasTextureRegion.js → PosedActive.js} +17 -2
  53. package/dist/PosedData.d.ts +40 -0
  54. package/dist/PosedData.js +45 -0
  55. package/dist/Skeleton.d.ts +110 -99
  56. package/dist/Skeleton.js +271 -449
  57. package/dist/SkeletonBinary.d.ts +2 -2
  58. package/dist/SkeletonBinary.js +644 -466
  59. package/dist/SkeletonBounds.d.ts +4 -4
  60. package/dist/SkeletonBounds.js +45 -46
  61. package/dist/SkeletonClipping.d.ts +26 -22
  62. package/dist/SkeletonClipping.js +654 -340
  63. package/dist/SkeletonData.d.ts +18 -35
  64. package/dist/SkeletonData.js +57 -97
  65. package/dist/SkeletonJson.d.ts +8 -6
  66. package/dist/SkeletonJson.js +892 -641
  67. package/dist/SkeletonRendererCore.d.ts +58 -0
  68. package/dist/SkeletonRendererCore.js +310 -0
  69. package/dist/Skin.d.ts +20 -16
  70. package/dist/Skin.js +58 -53
  71. package/dist/Slider.d.ts +46 -0
  72. package/dist/Slider.js +115 -0
  73. package/dist/SliderData.d.ts +58 -0
  74. package/dist/SliderData.js +59 -0
  75. package/dist/SliderPose.d.ts +37 -0
  76. package/dist/SliderPose.js +40 -0
  77. package/dist/Slot.d.ts +16 -38
  78. package/dist/Slot.js +37 -60
  79. package/dist/SlotData.d.ts +5 -12
  80. package/dist/SlotData.js +7 -15
  81. package/dist/SlotPose.d.ts +59 -0
  82. package/dist/SlotPose.js +81 -0
  83. package/dist/Texture.d.ts +1 -0
  84. package/dist/Texture.js +2 -1
  85. package/dist/TextureAtlas.d.ts +3 -3
  86. package/dist/TextureAtlas.js +49 -49
  87. package/dist/TransformConstraint.d.ts +16 -28
  88. package/dist/TransformConstraint.js +72 -209
  89. package/dist/TransformConstraintData.d.ts +108 -20
  90. package/dist/TransformConstraintData.js +274 -24
  91. package/dist/TransformConstraintPose.d.ts +45 -0
  92. package/dist/TransformConstraintPose.js +52 -0
  93. package/dist/Triangulator.d.ts +1 -1
  94. package/dist/Triangulator.js +91 -107
  95. package/dist/{Updatable.d.ts → Update.d.ts} +5 -12
  96. package/dist/Update.js +30 -0
  97. package/dist/Utils.d.ts +13 -4
  98. package/dist/Utils.js +78 -37
  99. package/dist/attachments/Attachment.d.ts +27 -19
  100. package/dist/attachments/Attachment.js +59 -35
  101. package/dist/attachments/AttachmentLoader.d.ts +14 -14
  102. package/dist/attachments/AttachmentLoader.js +1 -1
  103. package/dist/attachments/BoundingBoxAttachment.d.ts +1 -1
  104. package/dist/attachments/BoundingBoxAttachment.js +2 -2
  105. package/dist/attachments/ClippingAttachment.d.ts +10 -3
  106. package/dist/attachments/ClippingAttachment.js +12 -3
  107. package/dist/attachments/{HasTextureRegion.d.ts → HasSequence.d.ts} +11 -14
  108. package/dist/attachments/HasSequence.js +30 -0
  109. package/dist/attachments/MeshAttachment.d.ts +28 -35
  110. package/dist/attachments/MeshAttachment.js +85 -97
  111. package/dist/attachments/PathAttachment.d.ts +3 -3
  112. package/dist/attachments/PathAttachment.js +6 -6
  113. package/dist/attachments/PointAttachment.d.ts +11 -6
  114. package/dist/attachments/PointAttachment.js +8 -3
  115. package/dist/attachments/RegionAttachment.d.ts +25 -27
  116. package/dist/attachments/RegionAttachment.js +101 -113
  117. package/dist/attachments/Sequence.d.ts +31 -6
  118. package/dist/attachments/Sequence.js +79 -13
  119. package/dist/esm/spine-core.min.mjs +2 -2
  120. package/dist/esm/spine-core.mjs +7651 -6090
  121. package/dist/esm/spine-core.mjs.map +4 -4
  122. package/dist/iife/spine-core.js +7651 -6090
  123. package/dist/iife/spine-core.js.map +4 -4
  124. package/dist/iife/spine-core.min.js +2 -2
  125. package/dist/index.d.ts +32 -11
  126. package/dist/index.js +33 -12
  127. package/dist/polyfills.js +4 -5
  128. package/package.json +1 -1
  129. package/dist/Updatable.js +0 -30
@@ -28,13 +28,14 @@
28
28
  *****************************************************************************/
29
29
  import { TextureAtlas } from "./TextureAtlas.js";
30
30
  export class AssetManagerBase {
31
- pathPrefix = "";
32
31
  textureLoader;
32
+ pathPrefix;
33
33
  downloader;
34
34
  cache;
35
35
  errors = {};
36
36
  toLoad = 0;
37
37
  loaded = 0;
38
+ texturePmaInfo = {};
38
39
  constructor(textureLoader, pathPrefix = "", downloader = new Downloader(), cache = new AssetCache()) {
39
40
  this.textureLoader = textureLoader;
40
41
  this.pathPrefix = pathPrefix;
@@ -61,8 +62,8 @@ export class AssetManagerBase {
61
62
  callback(path, message);
62
63
  }
63
64
  loadAll() {
64
- let promise = new Promise((resolve, reject) => {
65
- let check = () => {
65
+ const promise = new Promise((resolve, reject) => {
66
+ const check = () => {
66
67
  if (this.isLoadingComplete()) {
67
68
  if (this.hasErrors())
68
69
  reject(this.errors);
@@ -118,7 +119,7 @@ export class AssetManagerBase {
118
119
  });
119
120
  }
120
121
  reuseAssets(path, success = () => { }, error = () => { }) {
121
- const loadedStatus = this.cache.assetsLoaded[path];
122
+ const loadedStatus = this.cache.getAsset(path);
122
123
  const alreadyExistsOrLoading = loadedStatus !== undefined;
123
124
  if (alreadyExistsOrLoading) {
124
125
  this.cache.assetsLoaded[path] = loadedStatus
@@ -129,7 +130,10 @@ export class AssetManagerBase {
129
130
  this.success(success, path, data);
130
131
  return data;
131
132
  })
132
- .catch(errorMsg => this.error(error, path, errorMsg));
133
+ .catch(errorMsg => {
134
+ this.error(error, path, errorMsg);
135
+ return undefined;
136
+ });
133
137
  }
134
138
  return alreadyExistsOrLoading;
135
139
  }
@@ -137,9 +141,10 @@ export class AssetManagerBase {
137
141
  path = this.start(path);
138
142
  if (this.reuseAssets(path, success, error))
139
143
  return;
144
+ const pma = this.texturePmaInfo[path];
140
145
  this.cache.assetsLoaded[path] = new Promise((resolve, reject) => {
141
- let isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document);
142
- let isWebWorker = !isBrowser; // && typeof importScripts !== 'undefined';
146
+ const isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document);
147
+ const isWebWorker = !isBrowser; // && typeof importScripts !== 'undefined';
143
148
  if (isWebWorker) {
144
149
  fetch(path, { mode: "cors" }).then((response) => {
145
150
  if (response.ok)
@@ -151,7 +156,7 @@ export class AssetManagerBase {
151
156
  return blob ? createImageBitmap(blob, { premultiplyAlpha: "none", colorSpaceConversion: "none" }) : null;
152
157
  }).then((bitmap) => {
153
158
  if (bitmap) {
154
- const texture = this.createTexture(path, bitmap);
159
+ const texture = this.createTexture(path, pma, bitmap);
155
160
  this.success(success, path, texture);
156
161
  resolve(texture);
157
162
  }
@@ -159,10 +164,10 @@ export class AssetManagerBase {
159
164
  });
160
165
  }
161
166
  else {
162
- let image = new Image();
167
+ const image = new Image();
163
168
  image.crossOrigin = "anonymous";
164
169
  image.onload = () => {
165
- const texture = this.createTexture(path, image);
170
+ const texture = this.createTexture(path, pma, image);
166
171
  this.success(success, path, texture);
167
172
  resolve(texture);
168
173
  };
@@ -178,26 +183,26 @@ export class AssetManagerBase {
178
183
  });
179
184
  }
180
185
  loadTextureAtlas(path, success = () => { }, error = () => { }, fileAlias) {
181
- let index = path.lastIndexOf("/");
182
- let parent = index >= 0 ? path.substring(0, index + 1) : "";
186
+ const index = path.lastIndexOf("/");
187
+ const parent = index >= 0 ? path.substring(0, index + 1) : "";
183
188
  path = this.start(path);
184
189
  if (this.reuseAssets(path, success, error))
185
190
  return;
186
191
  this.cache.assetsLoaded[path] = new Promise((resolve, reject) => {
187
192
  this.downloader.downloadText(path, (atlasText) => {
188
193
  try {
189
- const atlas = this.createTextureAtlas(path, atlasText);
194
+ const atlas = this.createTextureAtlas(atlasText, parent, path, fileAlias);
190
195
  let toLoad = atlas.pages.length, abort = false;
191
196
  if (toLoad === 0) {
192
197
  this.success(success, path, atlas);
193
198
  resolve(atlas);
194
199
  return;
195
200
  }
196
- for (let page of atlas.pages) {
197
- this.loadTexture(!fileAlias ? parent + page.name : fileAlias[page.name], (imagePath, texture) => {
201
+ for (const page of atlas.pages) {
202
+ this.loadTexture(this.texturePath(parent, page.name, fileAlias), (imagePath, texture) => {
198
203
  if (!abort) {
199
204
  page.setTexture(texture);
200
- if (--toLoad == 0) {
205
+ if (--toLoad === 0) {
201
206
  this.success(success, path, atlas);
202
207
  resolve(atlas);
203
208
  }
@@ -224,14 +229,16 @@ export class AssetManagerBase {
224
229
  });
225
230
  });
226
231
  }
227
- loadTextureAtlasButNoTextures(path, success = () => { }, error = () => { }, fileAlias) {
232
+ loadTextureAtlasButNoTextures(path, success = () => { }, error = () => { }) {
233
+ const index = path.lastIndexOf("/");
234
+ const parent = index >= 0 ? path.substring(0, index + 1) : "";
228
235
  path = this.start(path);
229
236
  if (this.reuseAssets(path, success, error))
230
237
  return;
231
238
  this.cache.assetsLoaded[path] = new Promise((resolve, reject) => {
232
239
  this.downloader.downloadText(path, (atlasText) => {
233
240
  try {
234
- const atlas = this.createTextureAtlas(path, atlasText);
241
+ const atlas = this.createTextureAtlas(atlasText, parent, path);
235
242
  this.success(success, path, atlas);
236
243
  resolve(atlas);
237
244
  }
@@ -247,7 +254,6 @@ export class AssetManagerBase {
247
254
  });
248
255
  });
249
256
  }
250
- // Promisified versions of load function
251
257
  async loadBinaryAsync(path) {
252
258
  return new Promise((resolve, reject) => {
253
259
  this.loadBinary(path, (_, binary) => resolve(binary), (_, message) => reject(message));
@@ -281,15 +287,15 @@ export class AssetManagerBase {
281
287
  }
282
288
  require(path) {
283
289
  path = this.pathPrefix + path;
284
- let asset = this.cache.assets[path];
290
+ const asset = this.cache.assets[path];
285
291
  if (asset)
286
292
  return asset;
287
- let error = this.errors[path];
288
- throw Error("Asset not found: " + path + (error ? "\n" + error : ""));
293
+ const error = this.errors[path];
294
+ throw Error(`Asset not found: ${path}${error ? `\n${error}` : ""}`);
289
295
  }
290
296
  remove(path) {
291
297
  path = this.pathPrefix + path;
292
- let asset = this.cache.assets[path];
298
+ const asset = this.cache.assets[path];
293
299
  if (asset.dispose)
294
300
  asset.dispose();
295
301
  delete this.cache.assets[path];
@@ -298,8 +304,8 @@ export class AssetManagerBase {
298
304
  return asset;
299
305
  }
300
306
  removeAll() {
301
- for (let path in this.cache.assets) {
302
- let asset = this.cache.assets[path];
307
+ for (const path in this.cache.assets) {
308
+ const asset = this.cache.assets[path];
303
309
  if (asset.dispose)
304
310
  asset.dispose();
305
311
  }
@@ -308,7 +314,7 @@ export class AssetManagerBase {
308
314
  this.cache.assetsRefCount = {};
309
315
  }
310
316
  isLoadingComplete() {
311
- return this.toLoad == 0;
317
+ return this.toLoad === 0;
312
318
  }
313
319
  getToLoad() {
314
320
  return this.toLoad;
@@ -339,7 +345,7 @@ export class AssetManagerBase {
339
345
  return this.remove(path);
340
346
  }
341
347
  }
342
- createTextureAtlas(path, atlasText) {
348
+ createTextureAtlas(atlasText, parentPath, path, fileAlias) {
343
349
  const atlas = new TextureAtlas(atlasText);
344
350
  atlas.dispose = () => {
345
351
  if (this.cache.assetsRefCount[path] <= 0)
@@ -349,10 +355,14 @@ export class AssetManagerBase {
349
355
  page.texture?.dispose();
350
356
  }
351
357
  };
358
+ for (const page of atlas.pages) {
359
+ const texturePath = this.texturePath(parentPath, page.name, fileAlias);
360
+ this.texturePmaInfo[this.pathPrefix + texturePath] = page.pma;
361
+ }
352
362
  return atlas;
353
363
  }
354
- createTexture(path, image) {
355
- const texture = this.textureLoader(image);
364
+ createTexture(path, pma, image) {
365
+ const texture = this.textureLoader(image, pma);
356
366
  const textureDispose = texture.dispose.bind(texture);
357
367
  texture.dispose = () => {
358
368
  if (this.disposeAssetInternal(path))
@@ -360,6 +370,11 @@ export class AssetManagerBase {
360
370
  };
361
371
  return texture;
362
372
  }
373
+ texturePath(parentPath, pageName, fileAlias) {
374
+ if (!fileAlias)
375
+ return parentPath + pageName;
376
+ return fileAlias[pageName];
377
+ }
363
378
  }
364
379
  export class AssetCache {
365
380
  assets = {};
@@ -376,7 +391,11 @@ export class AssetCache {
376
391
  }
377
392
  async addAsset(path, asset) {
378
393
  this.assetsLoaded[path] = Promise.resolve(asset);
379
- this.assets[path] = await asset;
394
+ this.assets[path] = asset;
395
+ return asset;
396
+ }
397
+ getAsset(path) {
398
+ return this.assetsLoaded[path];
380
399
  }
381
400
  }
382
401
  export class Downloader {
@@ -387,7 +406,7 @@ export class Downloader {
387
406
  throw new Error("Not a data URI.");
388
407
  }
389
408
  let base64Idx = dataUri.indexOf("base64,");
390
- if (base64Idx != -1) {
409
+ if (base64Idx !== -1) {
391
410
  base64Idx += "base64,".length;
392
411
  return atob(dataUri.substr(base64Idx));
393
412
  }
@@ -399,7 +418,7 @@ export class Downloader {
399
418
  var binary_string = window.atob(base64);
400
419
  var len = binary_string.length;
401
420
  var bytes = new Uint8Array(len);
402
- for (var i = 0; i < len; i++) {
421
+ for (let i = 0; i < len; i++) {
403
422
  bytes[i] = binary_string.charCodeAt(i);
404
423
  }
405
424
  return bytes;
@@ -409,7 +428,7 @@ export class Downloader {
409
428
  throw new Error("Not a data URI.");
410
429
  }
411
430
  let base64Idx = dataUri.indexOf("base64,");
412
- if (base64Idx == -1)
431
+ if (base64Idx === -1)
413
432
  throw new Error("Not a binary data URI.");
414
433
  base64Idx += "base64,".length;
415
434
  return this.base64ToUint8Array(dataUri.substr(base64Idx));
@@ -428,10 +447,10 @@ export class Downloader {
428
447
  }
429
448
  return;
430
449
  }
431
- let request = new XMLHttpRequest();
450
+ const request = new XMLHttpRequest();
432
451
  request.overrideMimeType("text/html");
433
452
  request.open("GET", rawDataUri ? rawDataUri : url, true);
434
- let done = () => {
453
+ const done = () => {
435
454
  this.finish(url, request.status, request.responseText);
436
455
  };
437
456
  request.onload = done;
@@ -457,14 +476,14 @@ export class Downloader {
457
476
  }
458
477
  return;
459
478
  }
460
- let request = new XMLHttpRequest();
479
+ const request = new XMLHttpRequest();
461
480
  request.open("GET", rawDataUri ? rawDataUri : url, true);
462
481
  request.responseType = "arraybuffer";
463
- let onerror = () => {
482
+ const onerror = () => {
464
483
  this.finish(url, request.status, request.response);
465
484
  };
466
485
  request.onload = () => {
467
- if (request.status == 200 || request.status == 0)
486
+ if (request.status === 200 || request.status === 0)
468
487
  this.finish(url, 200, new Uint8Array(request.response));
469
488
  else
470
489
  onerror();
@@ -484,11 +503,16 @@ export class Downloader {
484
503
  }
485
504
  }
486
505
  finish(url, status, data) {
487
- let callbacks = this.callbacks[url];
506
+ const callbacks = this.callbacks[url];
488
507
  delete this.callbacks[url];
489
- let args = status == 200 || status == 0 ? [data] : [status, data];
490
- for (let i = args.length - 1, n = callbacks.length; i < n; i += 2)
491
- callbacks[i].apply(null, args);
508
+ if (status === 200 || status === 0) {
509
+ for (let i = 0, n = callbacks.length; i < n; i += 2)
510
+ callbacks[i](data);
511
+ }
512
+ else {
513
+ for (let i = 1, n = callbacks.length; i < n; i += 2)
514
+ callbacks[i](status, data);
515
+ }
492
516
  }
493
517
  }
494
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNzZXRNYW5hZ2VyQmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Bc3NldE1hbmFnZXJCYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUcvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHakQsTUFBTSxPQUFPLGdCQUFnQjtJQUNwQixVQUFVLEdBQVcsRUFBRSxDQUFDO0lBQ3hCLGFBQWEsQ0FBcUQ7SUFDbEUsVUFBVSxDQUFhO0lBQ3ZCLEtBQUssQ0FBYTtJQUNsQixNQUFNLEdBQXNCLEVBQUUsQ0FBQztJQUMvQixNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVuQixZQUFhLGFBQWlFLEVBQUUsYUFBcUIsRUFBRSxFQUFFLFVBQVUsR0FBRyxJQUFJLFVBQVUsRUFBRSxFQUFFLEtBQUssR0FBRyxJQUFJLFVBQVUsRUFBRTtRQUMvSixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRU8sS0FBSyxDQUFFLElBQVk7UUFDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsT0FBTyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRU8sT0FBTyxDQUFFLFFBQTJDLEVBQUUsSUFBWSxFQUFFLEtBQVU7UUFDckYsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElB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QztZQUNWLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDRixDQUFDO0lBRU8sTUFBTSxDQUFFLEdBQVcsRUFBRSxNQUFjLEVBQUUsSUFBUztRQUNyRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLElBQUksR0FBRyxNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xFLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQztZQUNoRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxuICogTGFzdCB1cGRhdGVkIEFwcmlsIDUsIDIwMjUuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAyNSwgRXNvdGVyaWMgU29mdHdhcmUgTExDXG4gKlxuICogSW50ZWdyYXRpb24gb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3Igb3RoZXJ3aXNlIGNyZWF0aW5nXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcbiAqIGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1lZGl0b3ItbGljZW5zZVxuICpcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZVxuICogb3Igb3RoZXJ3aXNlIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyAoY29sbGVjdGl2ZWx5LFxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XG4gKiBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgY29weXJpZ2h0IG5vdGljZS5cbiAqXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMgQVJFIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLFxuICogQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmltcG9ydCB7IFRleHR1cmUgfSBmcm9tIFwiLi9UZXh0dXJlLmpzXCI7XG5pbXBvcnQgeyBUZXh0dXJlQXRsYXMgfSBmcm9tIFwiLi9UZXh0dXJlQXRsYXMuanNcIjtcbmltcG9ydCB7IERpc3Bvc2FibGUsIFN0cmluZ01hcCB9IGZyb20gXCIuL1V0aWxzLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBBc3NldE1hbmFnZXJCYXNlIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG5cdHByaXZhdGUgcGF0aFByZWZpeDogc3RyaW5nID0gXCJcIjtcblx0cHJpdmF0ZSB0ZXh0dXJlTG9hZGVyOiAoaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQgfCBJbWFnZUJpdG1hcCkgPT4gVGV4dHVyZTtcblx0cHJpdmF0ZSBkb3dubG9hZGVyOiBEb3dubG9hZGVyO1xuXHRwcml2YXRlIGNhY2hlOiBBc3NldENhY2hlO1xuXHRwcml2YXRlIGVycm9yczogU3RyaW5nTWFwPHN0cmluZz4gPSB7fTtcblx0cHJpdmF0ZSB0b0xvYWQgPSAwO1xuXHRwcml2YXRlIGxvYWRlZCA9IDA7XG5cblx0Y29uc3RydWN0b3IgKHRleHR1cmVMb2FkZXI6IChpbWFnZTogSFRNTEltYWdlRWxlbWVudCB8IEltYWdlQml0bWFwKSA9PiBUZXh0dXJlLCBwYXRoUHJlZml4OiBzdHJpbmcgPSBcIlwiLCBkb3dubG9hZGVyID0gbmV3IERvd25sb2FkZXIoKSwgY2FjaGUgPSBuZXcgQXNzZXRDYWNoZSgpKSB7XG5cdFx0dGhpcy50ZXh0dXJlTG9hZGVyID0gdGV4dHVyZUxvYWRlcjtcblx0XHR0aGlzLnBhdGhQcmVmaXggPSBwYXRoUHJlZml4O1xuXHRcdHRoaXMuZG93bmxvYWRlciA9IGRvd25sb2FkZXI7XG5cdFx0dGhpcy5jYWNoZSA9IGNhY2hlO1xuXHR9XG5cblx0cHJpdmF0ZSBzdGFydCAocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHR0aGlzLnRvTG9hZCsrO1xuXHRcdHJldHVybiB0aGlzLnBhdGhQcmVmaXggKyBwYXRoO1xuXHR9XG5cblx0cHJpdmF0ZSBzdWNjZXNzIChjYWxsYmFjazogKHBhdGg6IHN0cmluZywgZGF0YTogYW55KSA9PiB2b2lkLCBwYXRoOiBzdHJpbmcsIGFzc2V0OiBhbnkpIHtcblx0XHR0aGlzLnRvTG9hZC0tO1xuXHRcdHRoaXMubG9hZGVkKys7XG5cdFx0dGhpcy5jYWNoZS5hc3NldHNbcGF0aF0gPSBhc3NldDtcblx0XHR0aGlzLmNhY2hlLmFzc2V0c1JlZkNvdW50W3BhdGhdID0gKHRoaXMuY2FjaGUuYXNzZXRzUmVmQ291bnRbcGF0aF0gfHwgMCkgKyAxO1xuXHRcdGlmIChjYWxsYmFjaykgY2FsbGJhY2socGF0aCwgYXNzZXQpO1xuXHR9XG5cblx0cHJpdmF0ZSBlcnJvciAoY2FsbGJhY2s6IChwYXRoOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCwgcGF0aDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcblx0XHR0aGlzLnRvTG9hZC0tO1xuXHRcdHRoaXMubG9hZGVkKys7XG5cdFx0dGhpcy5lcnJvcnNbcGF0aF0gPSBtZXNzYWdlO1xuXHRcdGlmIChjYWxsYmFjaykgY2FsbGJhY2socGF0aCwgbWVzc2FnZSk7XG5cdH1cblxuXHRsb2FkQWxsICgpIHtcblx0XHRsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlOiAoYXNzZXRNYW5hZ2VyOiBBc3NldE1hbmFnZXJCYXNlKSA9PiB2b2lkLCByZWplY3Q6IChlcnJvcnM6IFN0cmluZ01hcDxzdHJpbmc+KSA9PiB2b2lkKSA9PiB7XG5cdFx0XHRsZXQgY2hlY2sgPSAoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmlzTG9hZGluZ0NvbXBsZXRlKCkpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5oYXNFcnJvcnMoKSkgcmVqZWN0KHRoaXMuZXJyb3JzKTtcblx0XHRcdFx0XHRlbHNlIHJlc29sdmUodGhpcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZShjaGVjayk7XG5cdFx0XHR9XG5cdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2hlY2spO1xuXHRcdH0pO1xuXHRcdHJldHVybiBwcm9taXNlO1xuXHR9XG5cblx0c2V0UmF3RGF0YVVSSSAocGF0aDogc3RyaW5nLCBkYXRhOiBzdHJpbmcpIHtcblx0XHR0aGlzLmRvd25sb2FkZXIucmF3RGF0YVVyaXNbdGhpcy5wYXRoUHJlZml4ICsgcGF0aF0gPSBkYXRhO1xuXHR9XG5cblx0bG9hZEJpbmFyeSAocGF0aDogc3RyaW5nLFxuXHRcdHN1Y2Nlc3M6IChwYXRoOiBzdHJpbmcsIGJpbmFyeTogVWludDhBcnJheSkgPT4gdm9pZCA9ICgpID0+IHsgfSxcblx0XHRlcnJvcjogKHBhdGg6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkID0gKCkgPT4geyB9KSB7XG5cdFx0cGF0aCA9IHRoaXMuc3RhcnQocGF0aCk7XG5cblx0XHRpZiAodGhpcy5yZXVzZUFzc2V0cyhwYXRoLCBzdWNjZXNzLCBlcnJvcikpIHJldHVybjtcblxuXHRcdHRoaXMuY2FjaGUuYXNzZXRzTG9hZGVkW3BhdGhdID0gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLmRvd25sb2FkZXIuZG93bmxvYWRCaW5hcnkocGF0aCwgKGRhdGE6IFVpbnQ4QXJyYXkpOiB2b2lkID0+IHtcblx0XHRcdFx0dGhpcy5zdWNjZXNzKHN1Y2Nlc3MsIHBhdGgsIGRhdGEpO1xuXHRcdFx0XHRyZXNvbHZlKGRhdGEpO1xuXHRcdFx0fSwgKHN0YXR1czogbnVtYmVyLCByZXNwb25zZVRleHQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBlcnJvck1zZyA9IGBDb3VsZG4ndCBsb2FkIGJpbmFyeSAke3BhdGh9OiBzdGF0dXMgJHtzdGF0dXN9LCAke3Jlc3BvbnNlVGV4dH1gO1xuXHRcdFx0XHR0aGlzLmVycm9yKGVycm9yLCBwYXRoLCBlcnJvck1zZyk7XG5cdFx0XHRcdHJlamVjdChlcnJvck1zZyk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdGxvYWRUZXh0IChwYXRoOiBzdHJpbmcsXG5cdFx0c3VjY2VzczogKHBhdGg6IHN0cmluZywgdGV4dDogc3RyaW5nKSA9PiB2b2lkID0gKCkgPT4geyB9LFxuXHRcdGVycm9yOiAocGF0aDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7IH0pIHtcblx0XHRwYXRoID0gdGhpcy5zdGFydChwYXRoKTtcblxuXHRcdHRoaXMuZG93bmxvYWRlci5kb3dubG9hZFRleHQocGF0aCwgKGRhdGE6IHN0cmluZyk6IHZvaWQgPT4ge1xuXHRcdFx0dGhpcy5zdWNjZXNzKHN1Y2Nlc3MsIHBhdGgsIGRhdGEpO1xuXHRcdH0sIChzdGF0dXM6IG51bWJlciwgcmVzcG9uc2VUZXh0OiBzdHJpbmcpOiB2b2lkID0+IHtcblx0XHRcdHRoaXMuZXJyb3IoZXJyb3IsIHBhdGgsIGBDb3VsZG4ndCBsb2FkIHRleHQgJHtwYXRofTogc3RhdHVzICR7c3RhdHVzfSwgJHtyZXNwb25zZVRleHR9YCk7XG5cdFx0fSk7XG5cdH1cblxuXHRsb2FkSnNvbiAocGF0aDogc3RyaW5nLFxuXHRcdHN1Y2Nlc3M6IChwYXRoOiBzdHJpbmcsIG9iamVjdDogb2JqZWN0KSA9PiB2b2lkID0gKCkgPT4geyB9LFxuXHRcdGVycm9yOiAocGF0aDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7IH0pIHtcblx0XHRwYXRoID0gdGhpcy5zdGFydChwYXRoKTtcblxuXHRcdGlmICh0aGlzLnJldXNlQXNzZXRzKHBhdGgsIHN1Y2Nlc3MsIGVycm9yKSkgcmV0dXJuO1xuXG5cdFx0dGhpcy5jYWNoZS5hc3NldHNMb2FkZWRbcGF0aF0gPSBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMuZG93bmxvYWRlci5kb3dubG9hZEpzb24ocGF0aCwgKGRhdGE6IG9iamVjdCk6IHZvaWQgPT4ge1xuXHRcdFx0XHR0aGlzLnN1Y2Nlc3Moc3VjY2VzcywgcGF0aCwgZGF0YSk7XG5cdFx0XHRcdHJlc29sdmUoZGF0YSk7XG5cdFx0XHR9LCAoc3RhdHVzOiBudW1iZXIsIHJlc3BvbnNlVGV4dDogc3RyaW5nKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGVycm9yTXNnID0gYENvdWxkbid0IGxvYWQgSlNPTiAke3BhdGh9OiBzdGF0dXMgJHtzdGF0dXN9LCAke3Jlc3BvbnNlVGV4dH1gO1xuXHRcdFx0XHR0aGlzLmVycm9yKGVycm9yLCBwYXRoLCBlcnJvck1zZyk7XG5cdFx0XHRcdHJlamVjdChlcnJvck1zZyk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdHJldXNlQXNzZXRzIChwYXRoOiBzdHJpbmcsXG5cdFx0c3VjY2VzczogKHBhdGg6IHN0cmluZywgZGF0YTogYW55KSA9PiB2b2lkID0gKCkgPT4geyB9LFxuXHRcdGVycm9yOiAocGF0aDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7IH0pIHtcblx0XHRjb25zdCBsb2FkZWRTdGF0dXMgPSB0aGlzLmNhY2hlLmFzc2V0c0xvYWRlZFtwYXRoXTtcblx0XHRjb25zdCBhbHJlYWR5RXhpc3RzT3JMb2FkaW5nID0gbG9hZGVkU3RhdHVzICE9PSB1bmRlZmluZWQ7XG5cdFx0aWYgKGFscmVhZHlFeGlzdHNPckxvYWRpbmcpIHtcblx0XHRcdHRoaXMuY2FjaGUuYXNzZXRzTG9hZGVkW3BhdGhdID0gbG9hZGVkU3RhdHVzXG5cdFx0XHRcdC50aGVuKGRhdGEgPT4ge1xuXHRcdFx0XHRcdC8vIG5lY2Vzc2FyeSB3aGVuIHVzZXIgcHJlbG9hZHMgYW4gaW1hZ2UgaW50byB0aGUgY2FjaGUuXG5cdFx0XHRcdFx0Ly8gdGV4dHVyZSBsb2FkZXIgaXMgbm90IGF2YWlhYmxlIGluIHRoZSBjYWNoZSwgc28gd2UgdHJhbnNmb3JtIGluIEdMVGV4dHVyZSBhdCBmaXJzdCB1c2Vcblx0XHRcdFx0XHRkYXRhID0gKGRhdGEgaW5zdGFuY2VvZiBJbWFnZSB8fCBkYXRhIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApID8gdGhpcy50ZXh0dXJlTG9hZGVyKGRhdGEpIDogZGF0YTtcblx0XHRcdFx0XHR0aGlzLnN1Y2Nlc3Moc3VjY2VzcywgcGF0aCwgZGF0YSk7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChlcnJvck1zZyA9PiB0aGlzLmVycm9yKGVycm9yLCBwYXRoLCBlcnJvck1zZykpO1xuXHRcdH1cblx0XHRyZXR1cm4gYWxyZWFkeUV4aXN0c09yTG9hZGluZztcblx0fVxuXG5cdGxvYWRUZXh0dXJlIChwYXRoOiBzdHJpbmcsXG5cdFx0c3VjY2VzczogKHBhdGg6IHN0cmluZywgdGV4dHVyZTogVGV4dHVyZSkgPT4gdm9pZCA9ICgpID0+IHsgfSxcblx0XHRlcnJvcjogKHBhdGg6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkID0gKCkgPT4geyB9KSB7XG5cblx0XHRwYXRoID0gdGhpcy5zdGFydChwYXRoKTtcblxuXHRcdGlmICh0aGlzLnJldXNlQXNzZXRzKHBhdGgsIHN1Y2Nlc3MsIGVycm9yKSkgcmV0dXJuO1xuXG5cdFx0dGhpcy5jYWNoZS5hc3NldHNMb2FkZWRbcGF0aF0gPSBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGxldCBpc0Jyb3dzZXIgPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQpO1xuXHRcdFx0bGV0IGlzV2ViV29ya2VyID0gIWlzQnJvd3NlcjsgLy8gJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1bmRlZmluZWQnO1xuXHRcdFx0aWYgKGlzV2ViV29ya2VyKSB7XG5cdFx0XHRcdGZldGNoKHBhdGgsIHsgbW9kZTogPFJlcXVlc3RNb2RlPlwiY29yc1wiIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlLm9rKSByZXR1cm4gcmVzcG9uc2UuYmxvYigpO1xuXHRcdFx0XHRcdGNvbnN0IGVycm9yTXNnID0gYENvdWxkbid0IGxvYWQgaW1hZ2U6ICR7cGF0aH1gO1xuXHRcdFx0XHRcdHRoaXMuZXJyb3IoZXJyb3IsIHBhdGgsIGBDb3VsZG4ndCBsb2FkIGltYWdlOiAke3BhdGh9YCk7XG5cdFx0XHRcdFx0cmVqZWN0KGVycm9yTXNnKTtcblx0XHRcdFx0fSkudGhlbigoYmxvYikgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBibG9iID8gY3JlYXRlSW1hZ2VCaXRtYXAoYmxvYiwgeyBwcmVtdWx0aXBseUFscGhhOiBcIm5vbmVcIiwgY29sb3JTcGFjZUNvbnZlcnNpb246IFwibm9uZVwiIH0pIDogbnVsbDtcblx0XHRcdFx0fSkudGhlbigoYml0bWFwKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGJpdG1hcCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdGV4dHVyZSA9IHRoaXMuY3JlYXRlVGV4dHVyZShwYXRoLCBiaXRtYXApO1xuXHRcdFx0XHRcdFx0dGhpcy5zdWNjZXNzKHN1Y2Nlc3MsIHBhdGgsIHRleHR1cmUpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSh0ZXh0dXJlKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxldCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuXHRcdFx0XHRpbWFnZS5jcm9zc09yaWdpbiA9IFwiYW5vbnltb3VzXCI7XG5cdFx0XHRcdGltYWdlLm9ubG9hZCA9ICgpID0+IHtcblx0XHRcdFx0XHRjb25zdCB0ZXh0dXJlID0gdGhpcy5jcmVhdGVUZXh0dXJlKHBhdGgsIGltYWdlKTtcblx0XHRcdFx0XHR0aGlzLnN1Y2Nlc3Moc3VjY2VzcywgcGF0aCwgdGV4dHVyZSk7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0ZXh0dXJlKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0aW1hZ2Uub25lcnJvciA9ICgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBlcnJvck1zZyA9IGBDb3VsZG4ndCBsb2FkIGltYWdlOiAke3BhdGh9YDtcblx0XHRcdFx0XHR0aGlzLmVycm9yKGVycm9yLCBwYXRoLCBlcnJvck1zZyk7XG5cdFx0XHRcdFx0cmVqZWN0KGVycm9yTXNnKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKHRoaXMuZG93bmxvYWRlci5yYXdEYXRhVXJpc1twYXRoXSkgcGF0aCA9IHRoaXMuZG93bmxvYWRlci5yYXdEYXRhVXJpc1twYXRoXTtcblx0XHRcdFx0aW1hZ2Uuc3JjID0gcGF0aDtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGxvYWRUZXh0dXJlQXRsYXMgKHBhdGg6IHN0cmluZyxcblx0XHRzdWNjZXNzOiAocGF0aDogc3RyaW5nLCBhdGxhczogVGV4dHVyZUF0bGFzKSA9PiB2b2lkID0gKCkgPT4geyB9LFxuXHRcdGVycm9yOiAocGF0aDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7IH0sXG5cdFx0ZmlsZUFsaWFzPzogeyBba2V5d29yZDogc3RyaW5nXTogc3RyaW5nIH1cblx0KSB7XG5cdFx0bGV0IGluZGV4ID0gcGF0aC5sYXN0SW5kZXhPZihcIi9cIik7XG5cdFx0bGV0IHBhcmVudCA9IGluZGV4ID49IDAgPyBwYXRoLnN1YnN0cmluZygwLCBpbmRleCArIDEpIDogXCJcIjtcblx0XHRwYXRoID0gdGhpcy5zdGFydChwYXRoKTtcblxuXHRcdGlmICh0aGlzLnJldXNlQXNzZXRzKHBhdGgsIHN1Y2Nlc3MsIGVycm9yKSkgcmV0dXJuO1xuXG5cdFx0dGhpcy5jYWNoZS5hc3NldHNMb2FkZWRbcGF0aF0gPSBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMuZG93bmxvYWRlci5kb3dubG9hZFRleHQocGF0aCwgKGF0bGFzVGV4dDogc3RyaW5nKTogdm9pZCA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgYXRsYXMgPSB0aGlzLmNyZWF0ZVRleHR1cmVBdGxhcyhwYXRoLCBhdGxhc1RleHQpO1xuXHRcdFx0XHRcdGxldCB0b0xvYWQgPSBhdGxhcy5wYWdlcy5sZW5ndGgsIGFib3J0ID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAodG9Mb2FkID09PSAwKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnN1Y2Nlc3Moc3VjY2VzcywgcGF0aCwgYXRsYXMpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShhdGxhcyk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Zm9yIChsZXQgcGFnZSBvZiBhdGxhcy5wYWdlcykge1xuXHRcdFx0XHRcdFx0dGhpcy5sb2FkVGV4dHVyZSghZmlsZUFsaWFzID8gcGFyZW50ICsgcGFnZS5uYW1lIDogZmlsZUFsaWFzW3BhZ2UubmFtZSFdLFxuXHRcdFx0XHRcdFx0XHQoaW1hZ2VQYXRoOiBzdHJpbmcsIHRleHR1cmU6IFRleHR1cmUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWFib3J0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYWdlLnNldFRleHR1cmUodGV4dHVyZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoLS10b0xvYWQgPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnN1Y2Nlc3Moc3VjY2VzcywgcGF0aCwgYXRsYXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKGF0bGFzKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdChpbWFnZVBhdGg6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFhYm9ydCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZXJyb3JNc2cgPSBgQ291bGRuJ3QgbG9hZCB0ZXh0dXJlICR7cGF0aH0gcGFnZSBpbWFnZTogJHtpbWFnZVBhdGh9YDtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZXJyb3IoZXJyb3IsIHBhdGgsIGVycm9yTXNnKTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlamVjdChlcnJvck1zZyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGFib3J0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRjb25zdCBlcnJvck1zZyA9IGBDb3VsZG4ndCBwYXJzZSB0ZXh0dXJlIGF0bGFzICR7cGF0aH06ICR7KGUgYXMgYW55KS5tZXNzYWdlfWA7XG5cdFx0XHRcdFx0dGhpcy5lcnJvcihlcnJvciwgcGF0aCwgZXJyb3JNc2cpO1xuXHRcdFx0XHRcdHJlamVjdChlcnJvck1zZyk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIChzdGF0dXM6IG51bWJlciwgcmVzcG9uc2VUZXh0OiBzdHJpbmcpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3QgZXJyb3JNc2cgPSBgQ291bGRuJ3QgbG9hZCB0ZXh0dXJlIGF0bGFzICR7cGF0aH06IHN0YXR1cyAke3N0YXR1c30sICR7cmVzcG9uc2VUZXh0fWA7XG5cdFx0XHRcdHRoaXMuZXJyb3IoZXJyb3IsIHBhdGgsIGVycm9yTXNnKTtcblx0XHRcdFx0cmVqZWN0KGVycm9yTXNnKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0bG9hZFRleHR1cmVBdGxhc0J1dE5vVGV4dHVyZXMgKHBhdGg6IHN0cmluZyxcblx0XHRzdWNjZXNzOiAocGF0aDogc3RyaW5nLCBhdGxhczogVGV4dHVyZUF0bGFzKSA9PiB2b2lkID0gKCkgPT4geyB9LFxuXHRcdGVycm9yOiAocGF0aDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7IH0sXG5cdFx0ZmlsZUFsaWFzPzogeyBba2V5d29yZDogc3RyaW5nXTogc3RyaW5nIH1cblx0KSB7XG5cdFx0cGF0aCA9IHRoaXMuc3RhcnQocGF0aCk7XG5cblx0XHRpZiAodGhpcy5yZXVzZUFzc2V0cyhwYXRoLCBzdWNjZXNzLCBlcnJvcikpIHJldHVybjtcblxuXHRcdHRoaXMuY2FjaGUuYXNzZXRzTG9hZGVkW3BhdGhdID0gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLmRvd25sb2FkZXIuZG93bmxvYWRUZXh0KHBhdGgsIChhdGxhc1RleHQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IGF0bGFzID0gdGhpcy5jcmVhdGVUZXh0dXJlQXRsYXMocGF0aCwgYXRsYXNUZXh0KTtcblx0XHRcdFx0XHR0aGlzLnN1Y2Nlc3Moc3VjY2VzcywgcGF0aCwgYXRsYXMpO1xuXHRcdFx0XHRcdHJlc29sdmUoYXRsYXMpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNc2cgPSBgQ291bGRuJ3QgcGFyc2UgdGV4dHVyZSBhdGxhcyAke3BhdGh9OiAkeyhlIGFzIGFueSkubWVzc2FnZX1gO1xuXHRcdFx0XHRcdHRoaXMuZXJyb3IoZXJyb3IsIHBhdGgsIGVycm9yTXNnKTtcblx0XHRcdFx0XHRyZWplY3QoZXJyb3JNc2cpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAoc3RhdHVzOiBudW1iZXIsIHJlc3BvbnNlVGV4dDogc3RyaW5nKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGVycm9yTXNnID0gYENvdWxkbid0IGxvYWQgdGV4dHVyZSBhdGxhcyAke3BhdGh9OiBzdGF0dXMgJHtzdGF0dXN9LCAke3Jlc3BvbnNlVGV4dH1gO1xuXHRcdFx0XHR0aGlzLmVycm9yKGVycm9yLCBwYXRoLCBlcnJvck1zZyk7XG5cdFx0XHRcdHJlamVjdChlcnJvck1zZyk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8vIFByb21pc2lmaWVkIHZlcnNpb25zIG9mIGxvYWQgZnVuY3Rpb25cblx0YXN5bmMgbG9hZEJpbmFyeUFzeW5jIChwYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5sb2FkQmluYXJ5KHBhdGgsXG5cdFx0XHRcdChfLCBiaW5hcnkpID0+IHJlc29sdmUoYmluYXJ5KSxcblx0XHRcdFx0KF8sIG1lc3NhZ2UpID0+IHJlamVjdChtZXNzYWdlKSxcblx0XHRcdCk7XG5cdFx0fSk7XG5cdH1cblxuXHRhc3luYyBsb2FkSnNvbkFzeW5jIChwYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5sb2FkSnNvbihwYXRoLFxuXHRcdFx0XHQoXywgb2JqZWN0KSA9PiByZXNvbHZlKG9iamVjdCksXG5cdFx0XHRcdChfLCBtZXNzYWdlKSA9PiByZWplY3QobWVzc2FnZSksXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgbG9hZFRleHR1cmVBc3luYyAocGF0aDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPFRleHR1cmU+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMubG9hZFRleHR1cmUocGF0aCxcblx0XHRcdFx0KF8sIHRleHR1cmUpID0+IHJlc29sdmUodGV4dHVyZSksXG5cdFx0XHRcdChfLCBtZXNzYWdlKSA9PiByZWplY3QobWVzc2FnZSksXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgbG9hZFRleHR1cmVBdGxhc0FzeW5jIChwYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5sb2FkVGV4dHVyZUF0bGFzKHBhdGgsXG5cdFx0XHRcdChfLCBhdGxhcykgPT4gcmVzb2x2ZShhdGxhcyksXG5cdFx0XHRcdChfLCBtZXNzYWdlKSA9PiByZWplY3QobWVzc2FnZSksXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgbG9hZFRleHR1cmVBdGxhc0J1dE5vVGV4dHVyZXNBc3luYyAocGF0aDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPFRleHR1cmVBdGxhcz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5sb2FkVGV4dHVyZUF0bGFzQnV0Tm9UZXh0dXJlcyhwYXRoLFxuXHRcdFx0XHQoXywgYXRsYXMpID0+IHJlc29sdmUoYXRsYXMpLFxuXHRcdFx0XHQoXywgbWVzc2FnZSkgPT4gcmVqZWN0KG1lc3NhZ2UpLFxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxuXG5cdHNldENhY2hlIChjYWNoZTogQXNzZXRDYWNoZSkge1xuXHRcdHRoaXMuY2FjaGUgPSBjYWNoZTtcblx0fVxuXG5cdGdldCAocGF0aDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2FjaGUuYXNzZXRzW3RoaXMucGF0aFByZWZpeCArIHBhdGhdO1xuXHR9XG5cblx0cmVxdWlyZSAocGF0aDogc3RyaW5nKSB7XG5cdFx0cGF0aCA9IHRoaXMucGF0aFByZWZpeCArIHBhdGg7XG5cdFx0bGV0IGFzc2V0ID0gdGhpcy5jYWNoZS5hc3NldHNbcGF0aF07XG5cdFx0aWYgKGFzc2V0KSByZXR1cm4gYXNzZXQ7XG5cdFx0bGV0IGVycm9yID0gdGhpcy5lcnJvcnNbcGF0aF07XG5cdFx0dGhyb3cgRXJyb3IoXCJBc3NldCBub3QgZm91bmQ6IFwiICsgcGF0aCArIChlcnJvciA/IFwiXFxuXCIgKyBlcnJvciA6IFwiXCIpKTtcblx0fVxuXG5cdHJlbW92ZSAocGF0aDogc3RyaW5nKSB7XG5cdFx0cGF0aCA9IHRoaXMucGF0aFByZWZpeCArIHBhdGg7XG5cdFx0bGV0IGFzc2V0ID0gdGhpcy5jYWNoZS5hc3NldHNbcGF0aF07XG5cdFx0aWYgKGFzc2V0LmRpc3Bvc2UpIGFzc2V0LmRpc3Bvc2UoKTtcblx0XHRkZWxldGUgdGhpcy5jYWNoZS5hc3NldHNbcGF0aF07XG5cdFx0ZGVsZXRlIHRoaXMuY2FjaGUuYXNzZXRzUmVmQ291bnRbcGF0aF07XG5cdFx0ZGVsZXRlIHRoaXMuY2FjaGUuYXNzZXRzTG9hZGVkW3BhdGhdO1xuXHRcdHJldHVybiBhc3NldDtcblx0fVxuXG5cdHJlbW92ZUFsbCAoKSB7XG5cdFx0Zm9yIChsZXQgcGF0aCBpbiB0aGlzLmNhY2hlLmFzc2V0cykge1xuXHRcdFx0bGV0IGFzc2V0ID0gdGhpcy5jYWNoZS5hc3NldHNbcGF0aF07XG5cdFx0XHRpZiAoYXNzZXQuZGlzcG9zZSkgYXNzZXQuZGlzcG9zZSgpO1xuXHRcdH1cblx0XHR0aGlzLmNhY2hlLmFzc2V0cyA9IHt9O1xuXHRcdHRoaXMuY2FjaGUuYXNzZXRzTG9hZGVkID0ge307XG5cdFx0dGhpcy5jYWNoZS5hc3NldHNSZWZDb3VudCA9IHt9O1xuXHR9XG5cblx0aXNMb2FkaW5nQ29tcGxldGUgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnRvTG9hZCA9PSAwO1xuXHR9XG5cblx0Z2V0VG9Mb2FkICgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLnRvTG9hZDtcblx0fVxuXG5cdGdldExvYWRlZCAoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5sb2FkZWQ7XG5cdH1cblxuXHRkaXNwb3NlICgpIHtcblx0XHR0aGlzLnJlbW92ZUFsbCgpO1xuXHR9XG5cblx0Ly8gZGlzcG9zZSBhc3NldCBvbmx5IGlmIGl0J3Mgbm90IHVzZWQgYnkgb3RoZXJzXG5cdGRpc3Bvc2VBc3NldCAocGF0aDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgYXNzZXQgPSB0aGlzLmNhY2hlLmFzc2V0c1twYXRoXTtcblx0XHRpZiAoYXNzZXQgaW5zdGFuY2VvZiBUZXh0dXJlQXRsYXMpIHtcblx0XHRcdGFzc2V0LmRpc3Bvc2UoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5kaXNwb3NlQXNzZXRJbnRlcm5hbChwYXRoKTtcblx0fVxuXG5cdGhhc0Vycm9ycyAoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZXJyb3JzKS5sZW5ndGggPiAwO1xuXHR9XG5cblx0Z2V0RXJyb3JzICgpIHtcblx0XHRyZXR1cm4gdGhpcy5lcnJvcnM7XG5cdH1cblxuXHRwcml2YXRlIGRpc3Bvc2VBc3NldEludGVybmFsIChwYXRoOiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5jYWNoZS5hc3NldHNSZWZDb3VudFtwYXRoXSA+IDAgJiYgLS10aGlzLmNhY2hlLmFzc2V0c1JlZkNvdW50W3BhdGhdID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZW1vdmUocGF0aCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVUZXh0dXJlQXRsYXMgKHBhdGg6IHN0cmluZywgYXRsYXNUZXh0OiBzdHJpbmcpOiBUZXh0dXJlQXRsYXMge1xuXHRcdGNvbnN0IGF0bGFzID0gbmV3IFRleHR1cmVBdGxhcyhhdGxhc1RleHQpO1xuXHRcdGF0bGFzLmRpc3Bvc2UgPSAoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5jYWNoZS5hc3NldHNSZWZDb3VudFtwYXRoXSA8PSAwKSByZXR1cm47XG5cdFx0XHR0aGlzLmRpc3Bvc2VBc3NldEludGVybmFsKHBhdGgpO1xuXHRcdFx0Zm9yIChjb25zdCBwYWdlIG9mIGF0bGFzLnBhZ2VzKSB7XG5cdFx0XHRcdHBhZ2UudGV4dHVyZT8uZGlzcG9zZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYXRsYXM7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVRleHR1cmUgKHBhdGg6IHN0cmluZywgaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQgfCBJbWFnZUJpdG1hcCk6IFRleHR1cmUge1xuXHRcdGNvbnN0IHRleHR1cmUgPSB0aGlzLnRleHR1cmVMb2FkZXIoaW1hZ2UpO1xuXHRcdGNvbnN0IHRleHR1cmVEaXNwb3NlID0gdGV4dHVyZS5kaXNwb3NlLmJpbmQodGV4dHVyZSk7XG5cdFx0dGV4dHVyZS5kaXNwb3NlID0gKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZGlzcG9zZUFzc2V0SW50ZXJuYWwocGF0aCkpIHRleHR1cmVEaXNwb3NlKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0ZXh0dXJlO1xuXHR9XG59XG5cbmV4cG9ydCBjbGFzcyBBc3NldENhY2hlIHtcblx0cHVibGljIGFzc2V0czogU3RyaW5nTWFwPGFueT4gPSB7fTtcblx0cHVibGljIGFzc2V0c1JlZkNvdW50OiBTdHJpbmdNYXA8bnVtYmVyPiA9IHt9O1xuXHRwdWJsaWMgYXNzZXRzTG9hZGVkOiBTdHJpbmdNYXA8UHJvbWlzZTxhbnk+PiA9IHt9O1xuXG5cdHN0YXRpYyBBVkFJTEFCTEVfQ0FDSEVTID0gbmV3IE1hcDxzdHJpbmcsIEFzc2V0Q2FjaGU+KCk7XG5cdHN0YXRpYyBnZXRDYWNoZSAoaWQ6IHN0cmluZykge1xuXHRcdGNvbnN0IGNhY2hlID0gQXNzZXRDYWNoZS5BVkFJTEFCTEVfQ0FDSEVTLmdldChpZCk7XG5cdFx0aWYgKGNhY2hlKSByZXR1cm4gY2FjaGU7XG5cblx0XHRjb25zdCBuZXdDYWNoZSA9IG5ldyBBc3NldENhY2hlKCk7XG5cdFx0QXNzZXRDYWNoZS5BVkFJTEFCTEVfQ0FDSEVTLnNldChpZCwgbmV3Q2FjaGUpO1xuXHRcdHJldHVybiBuZXdDYWNoZTtcblx0fVxuXG5cdGFzeW5jIGFkZEFzc2V0IChwYXRoOiBzdHJpbmcsIGFzc2V0OiBhbnkpIHtcblx0XHR0aGlzLmFzc2V0c0xvYWRlZFtwYXRoXSA9IFByb21pc2UucmVzb2x2ZShhc3NldCk7XG5cdFx0dGhpcy5hc3NldHNbcGF0aF0gPSBhd2FpdCBhc3NldDtcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgRG93bmxvYWRlciB7XG5cdHByaXZhdGUgY2FsbGJhY2tzOiBTdHJpbmdNYXA8QXJyYXk8RnVuY3Rpb24+PiA9IHt9O1xuXHRyYXdEYXRhVXJpczogU3RyaW5nTWFwPHN0cmluZz4gPSB7fTtcblxuXHRkYXRhVXJpVG9TdHJpbmcgKGRhdGFVcmk6IHN0cmluZykge1xuXHRcdGlmICghZGF0YVVyaS5zdGFydHNXaXRoKFwiZGF0YTpcIikpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIk5vdCBhIGRhdGEgVVJJLlwiKTtcblx0XHR9XG5cblx0XHRsZXQgYmFzZTY0SWR4ID0gZGF0YVVyaS5pbmRleE9mKFwiYmFzZTY0LFwiKTtcblx0XHRpZiAoYmFzZTY0SWR4ICE9IC0xKSB7XG5cdFx0XHRiYXNlNjRJZHggKz0gXCJiYXNlNjQsXCIubGVuZ3RoO1xuXHRcdFx0cmV0dXJuIGF0b2IoZGF0YVVyaS5zdWJzdHIoYmFzZTY0SWR4KSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBkYXRhVXJpLnN1YnN0cihkYXRhVXJpLmluZGV4T2YoXCIsXCIpICsgMSk7XG5cdFx0fVxuXHR9XG5cblx0YmFzZTY0VG9VaW50OEFycmF5IChiYXNlNjQ6IHN0cmluZykge1xuXHRcdHZhciBiaW5hcnlfc3RyaW5nID0gd2luZG93LmF0b2IoYmFzZTY0KTtcblx0XHR2YXIgbGVuID0gYmluYXJ5X3N0cmluZy5sZW5ndGg7XG5cdFx0dmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRieXRlc1tpXSA9IGJpbmFyeV9zdHJpbmcuY2hhckNvZGVBdChpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGJ5dGVzO1xuXHR9XG5cblx0ZGF0YVVyaVRvVWludDhBcnJheSAoZGF0YVVyaTogc3RyaW5nKSB7XG5cdFx0aWYgKCFkYXRhVXJpLnN0YXJ0c1dpdGgoXCJkYXRhOlwiKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiTm90IGEgZGF0YSBVUkkuXCIpO1xuXHRcdH1cblxuXHRcdGxldCBiYXNlNjRJZHggPSBkYXRhVXJpLmluZGV4T2YoXCJiYXNlNjQsXCIpO1xuXHRcdGlmIChiYXNlNjRJZHggPT0gLTEpIHRocm93IG5ldyBFcnJvcihcIk5vdCBhIGJpbmFyeSBkYXRhIFVSSS5cIik7XG5cdFx0YmFzZTY0SWR4ICs9IFwiYmFzZTY0LFwiLmxlbmd0aDtcblx0XHRyZXR1cm4gdGhpcy5iYXNlNjRUb1VpbnQ4QXJyYXkoZGF0YVVyaS5zdWJzdHIoYmFzZTY0SWR4KSk7XG5cdH1cblxuXHRkb3dubG9hZFRleHQgKHVybDogc3RyaW5nLCBzdWNjZXNzOiAoZGF0YTogc3RyaW5nKSA9PiB2b2lkLCBlcnJvcjogKHN0YXR1czogbnVtYmVyLCByZXNwb25zZVRleHQ6IHN0cmluZykgPT4gdm9pZCkge1xuXHRcdGlmICh0aGlzLnN0YXJ0KHVybCwgc3VjY2VzcywgZXJyb3IpKSByZXR1cm47XG5cblx0XHRjb25zdCByYXdEYXRhVXJpID0gdGhpcy5yYXdEYXRhVXJpc1t1cmxdO1xuXHRcdC8vIHdlIGFzc3VtZSBpZiBhIFwiLlwiIGlzIGluY2x1ZGVkIGluIGEgcmF3IGRhdGEgdXJpLCBpdCBpcyB1c2VkIHRvIHJld3JpdGUgYW4gYXNzZXQgVVJMXG5cdFx0aWYgKHJhd0RhdGFVcmkgJiYgIXJhd0RhdGFVcmkuaW5jbHVkZXMoXCIuXCIpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmZpbmlzaCh1cmwsIDIwMCwgdGhpcy5kYXRhVXJpVG9TdHJpbmcocmF3RGF0YVVyaSkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aGlzLmZpbmlzaCh1cmwsIDQwMCwgSlNPTi5zdHJpbmdpZnkoZSkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdFx0cmVxdWVzdC5vdmVycmlkZU1pbWVUeXBlKFwidGV4dC9odG1sXCIpO1xuXHRcdHJlcXVlc3Qub3BlbihcIkdFVFwiLCByYXdEYXRhVXJpID8gcmF3RGF0YVVyaSA6IHVybCwgdHJ1ZSk7XG5cdFx0bGV0IGRvbmUgPSAoKSA9PiB7XG5cdFx0XHR0aGlzLmZpbmlzaCh1cmwsIHJlcXVlc3Quc3RhdHVzLCByZXF1ZXN0LnJlc3BvbnNlVGV4dCk7XG5cdFx0fTtcblx0XHRyZXF1ZXN0Lm9ubG9hZCA9IGRvbmU7XG5cdFx0cmVxdWVzdC5vbmVycm9yID0gZG9uZTtcblx0XHRyZXF1ZXN0LnNlbmQoKTtcblx0fVxuXG5cdGRvd25sb2FkSnNvbiAodXJsOiBzdHJpbmcsIHN1Y2Nlc3M6IChkYXRhOiBvYmplY3QpID0+IHZvaWQsIGVycm9yOiAoc3RhdHVzOiBudW1iZXIsIHJlc3BvbnNlVGV4dDogc3RyaW5nKSA9PiB2b2lkKSB7XG5cdFx0dGhpcy5kb3dubG9hZFRleHQodXJsLCAoZGF0YTogc3RyaW5nKTogdm9pZCA9PiB7XG5cdFx0XHRzdWNjZXNzKEpTT04ucGFyc2UoZGF0YSkpO1xuXHRcdH0sIGVycm9yKTtcblx0fVxuXG5cdGRvd25sb2FkQmluYXJ5ICh1cmw6IHN0cmluZywgc3VjY2VzczogKGRhdGE6IFVpbnQ4QXJyYXkpID0+IHZvaWQsIGVycm9yOiAoc3RhdHVzOiBudW1iZXIsIHJlc3BvbnNlVGV4dDogc3RyaW5nKSA9PiB2b2lkKSB7XG5cdFx0aWYgKHRoaXMuc3RhcnQodXJsLCBzdWNjZXNzLCBlcnJvcikpIHJldHVybjtcblxuXHRcdGNvbnN0IHJhd0RhdGFVcmkgPSB0aGlzLnJhd0RhdGFVcmlzW3VybF07XG5cdFx0Ly8gd2UgYXNzdW1lIGlmIGEgXCIuXCIgaXMgaW5jbHVkZWQgaW4gYSByYXcgZGF0YSB1cmksIGl0IGlzIHVzZWQgdG8gcmV3cml0ZSBhbiBhc3NldCBVUkxcblx0XHRpZiAocmF3RGF0YVVyaSAmJiAhcmF3RGF0YVVyaS5pbmNsdWRlcyhcIi5cIikpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMuZmluaXNoKHVybCwgMjAwLCB0aGlzLmRhdGFVcmlUb1VpbnQ4QXJyYXkocmF3RGF0YVVyaSkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aGlzLmZpbmlzaCh1cmwsIDQwMCwgSlNPTi5zdHJpbmdpZnkoZSkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdFx0cmVxdWVzdC5vcGVuKFwiR0VUXCIsIHJhd0RhdGFVcmkgPyByYXdEYXRhVXJpIDogdXJsLCB0cnVlKTtcblx0XHRyZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IFwiYXJyYXlidWZmZXJcIjtcblx0XHRsZXQgb25lcnJvciA9ICgpID0+IHtcblx0XHRcdHRoaXMuZmluaXNoKHVybCwgcmVxdWVzdC5zdGF0dXMsIHJlcXVlc3QucmVzcG9uc2UpO1xuXHRcdH07XG5cdFx0cmVxdWVzdC5vbmxvYWQgPSAoKSA9PiB7XG5cdFx0XHRpZiAocmVxdWVzdC5zdGF0dXMgPT0gMjAwIHx8IHJlcXVlc3Quc3RhdHVzID09IDApXG5cdFx0XHRcdHRoaXMuZmluaXNoKHVybCwgMjAwLCBuZXcgVWludDhBcnJheShyZXF1ZXN0LnJlc3BvbnNlIGFzIEFycmF5QnVmZmVyKSk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdG9uZXJyb3IoKTtcblx0XHR9O1xuXHRcdHJlcXVlc3Qub25lcnJvciA9IG9uZXJyb3I7XG5cdFx0cmVxdWVzdC5zZW5kKCk7XG5cdH1cblxuXHRwcml2YXRlIHN0YXJ0ICh1cmw6IHN0cmluZywgc3VjY2VzczogYW55LCBlcnJvcjogYW55KSB7XG5cdFx0bGV0IGNhbGxiYWNrcyA9IHRoaXMuY2FsbGJhY2tzW3VybF07XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChjYWxsYmFja3MpIHJldHVybiB0cnVlO1xuXHRcdFx0dGhpcy5jYWxsYmFja3NbdXJsXSA9IGNhbGxiYWNrcyA9IFtdO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRjYWxsYmFja3MucHVzaChzdWNjZXNzLCBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBmaW5pc2ggKHVybDogc3RyaW5nLCBzdGF0dXM6IG51bWJlciwgZGF0YTogYW55KSB7XG5cdFx0bGV0IGNhbGxiYWNrcyA9IHRoaXMuY2FsbGJhY2tzW3VybF07XG5cdFx0ZGVsZXRlIHRoaXMuY2FsbGJhY2tzW3VybF07XG5cdFx0bGV0IGFyZ3MgPSBzdGF0dXMgPT0gMjAwIHx8IHN0YXR1cyA9PSAwID8gW2RhdGFdIDogW3N0YXR1cywgZGF0YV07XG5cdFx0Zm9yIChsZXQgaSA9IGFyZ3MubGVuZ3RoIC0gMSwgbiA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBuOyBpICs9IDIpXG5cdFx0XHRjYWxsYmFja3NbaV0uYXBwbHkobnVsbCwgYXJncyk7XG5cdH1cbn1cbiJdfQ==
518
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNzZXRNYW5hZ2VyQmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Bc3NldE1hbmFnZXJCYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUcvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFTakQsTUFBTSxPQUFPLGdCQUFnQjtJQU9uQjtJQUNBO0lBQ0E7SUFDQTtJQVRELE1BQU0sR0FBc0IsRUFBRSxDQUFDO0lBQy9CLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDWCxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsY0FBYyxHQUE0QixFQUFFLENBQUM7SUFFckQsWUFDUyxhQUE0QixFQUM1QixhQUFxQixFQUFFLEVBQ3ZCLGFBQWEsSUFBSSxVQUFVLEVBQUUsRUFDN0IsUUFBUSxJQUFJLFVBQVUsRUFBRTtRQUh4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixlQUFVLEdBQVYsVUFBVSxDQUFhO1FBQ3ZCLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQzdCLFVBQUssR0FBTCxLQUFLLENBQW1CO0lBQ2pDLENBQUM7SUFFTyxLQUFLLENBQUUsSUFBWTtRQUMxQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFTyxPQUFPLENBQXVCLFFBQTBCLEVBQUUsSUFBWSxFQUFFLEtBQVE7UUFDdkYsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFj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QUFDLENBQUM7UUFDM0IsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO2dCQUNqRCxTQUFTLENBQUMsQ0FBQyxDQUErQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELENBQUM7YUFBTSxDQUFDO1lBQ1AsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDakQsU0FBUyxDQUFDLENBQUMsQ0FBNkIsQ0FBQyxNQUFNLEVBQUUsSUFBYyxDQUFDLENBQUM7UUFDcEUsQ0FBQztJQUNGLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHR5cGUgeyBUZXh0dXJlIH0gZnJvbSBcIi4vVGV4dHVyZS5qc1wiO1xuaW1wb3J0IHsgVGV4dHVyZUF0bGFzIH0gZnJvbSBcIi4vVGV4dHVyZUF0bGFzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IERpc3Bvc2FibGUsIFN0cmluZ01hcCB9IGZyb20gXCIuL1V0aWxzLmpzXCI7XG5cbnR5cGUgQXNzZXREYXRhID0gKFVpbnQ4QXJyYXkgfCBzdHJpbmcgfCBUZXh0dXJlIHwgVGV4dHVyZUF0bGFzIHwgb2JqZWN0KSAmIFBhcnRpYWw8RGlzcG9zYWJsZT47XG50eXBlIEFzc2V0Q2FsbGJhY2s8VCBleHRlbmRzIEFzc2V0RGF0YT4gPSAocGF0aDogc3RyaW5nLCBkYXRhOiBUKSA9PiB2b2lkO1xudHlwZSBFcnJvckNhbGxiYWNrID0gKHBhdGg6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBUZXh0dXJlTG9hZGVyID0gKGltYWdlOiBIVE1MSW1hZ2VFbGVtZW50IHwgSW1hZ2VCaXRtYXAsIHBtYT86IGJvb2xlYW4pID0+IFRleHR1cmU7XG5cbmV4cG9ydCBjbGFzcyBBc3NldE1hbmFnZXJCYXNlIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG5cdHByaXZhdGUgZXJyb3JzOiBTdHJpbmdNYXA8c3RyaW5nPiA9IHt9O1xuXHRwcml2YXRlIHRvTG9hZCA9IDA7XG5cdHByaXZhdGUgbG9hZGVkID0gMDtcblx0cHJpdmF0ZSB0ZXh0dXJlUG1hSW5mbzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSB0ZXh0dXJlTG9hZGVyOiBUZXh0dXJlTG9hZGVyLFxuXHRcdHByaXZhdGUgcGF0aFByZWZpeDogc3RyaW5nID0gXCJcIixcblx0XHRwcml2YXRlIGRvd25sb2FkZXIgPSBuZXcgRG93bmxvYWRlcigpLFxuXHRcdHByaXZhdGUgY2FjaGUgPSBuZXcgQXNzZXRDYWNoZSgpKSB7XG5cdH1cblxuXHRwcml2YXRlIHN0YXJ0IChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHRoaXMudG9Mb2FkKys7XG5cdFx0cmV0dXJuIHRoaXMucGF0aFByZWZpeCArIHBhdGg7XG5cdH1cblxuXHRwcml2YXRlIHN1Y2Nlc3M8VCBleHRlbmRzIEFzc2V0RGF0YT4gKGNhbGxiYWNrOiBBc3NldENhbGxiYWNrPFQ+LCBwYXRoOiBzdHJpbmcsIGFzc2V0OiBUKSB7XG5cdFx0dGhpcy50b0xvYWQtLTtcblx0XHR0aGlzLmxvYWRlZCsrO1xuXHRcdHRoaXMuY2FjaGUuYXNzZXRzW3BhdGhdID0gYXNzZXQ7XG5cdFx0dGhpcy5jYWNoZS5hc3NldHNSZWZDb3VudFtwYXRoXSA9ICh0aGlzLmNhY2hlLmFzc2V0c1JlZkNvdW50W3BhdGhdIHx8IDApICsgMTtcblx0XHRpZiAoY2FsbGJhY2spIGNhbGxiYWNrKHBhdGgsIGFzc2V0KTtcblx0fVxuXG5cdHByaXZhdGUgZXJyb3IgKGNhbGxiYWNrOiAocGF0aDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQsIHBhdGg6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG5cdFx0dGhpcy50b0xvYWQtLTtcblx0XHR0aGlzLmxvYWRlZCsrO1xuXHRcdHRoaXMuZXJyb3JzW3BhdGhdID0gbWVzc2FnZTtcblx0XHRpZiAoY2FsbGJhY2spIGNhbGxiYWNrKHBhdGgsIG1lc3NhZ2UpO1xuXHR9XG5cblx0bG9hZEFsbCAoKSB7XG5cdFx0Y29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlOiAoYXNzZXRNYW5hZ2VyOiBBc3NldE1hbmFnZXJCYXNlKSA9PiB2b2lkLCByZWplY3Q6IChlcnJvcnM6IFN0cmluZ01hcDxzdHJpbmc+KSA9PiB2b2lkKSA9PiB7XG5cdFx0XHRjb25zdCBjaGVjayA9ICgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuaXNMb2FkaW5nQ29tcGxldGUoKSkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmhhc0Vycm9ycygpKSByZWplY3QodGhpcy5lcnJvcnMpO1xuXHRcdFx0XHRcdGVsc2UgcmVzb2x2ZSh0aGlzKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNoZWNrKTtcblx0XHRcdH1cblx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZShjaGVjayk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHByb21pc2U7XG5cdH1cblxuXHRzZXRSYXdEYXRhVVJJIChwYXRoOiBzdHJpbmcsIGRhdGE6IHN0cmluZykge1xuXHRcdHRoaXMuZG93bmxvYWRlci5yYXdEYXRhVXJpc1t0aGlzLnBhdGhQcmVmaXggKyBwYXRoXSA9IGRhdGE7XG5cdH1cblxuXHRsb2FkQmluYXJ5IChwYXRoOiBzdHJpbmcsXG5cdFx0c3VjY2VzczogKHBhdGg6IHN0cmluZywgYmluYXJ5OiBVaW50OEFycmF5KSA9PiB2b2lkID0gKCkgPT4geyB9LFxuXHRcdGVycm9yOiAocGF0aDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7IH0pIHtcblx0XHRwYXRoID0gdGhpcy5zdGFydChwYXRoKTtcblxuXHRcdGlmICh0aGlzLnJldXNlQXNzZXRzKHBhdGgsIHN1Y2Nlc3MsIGVycm9yKSkgcmV0dXJuO1xuXG5cdFx0dGhpcy5jYWNoZS5hc3NldHNMb2FkZWRbcGF0aF0gPSBuZXcgUHJvbWlzZTxVaW50OEFycmF5PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLmRvd25sb2FkZXIuZG93bmxvYWRCaW5hcnkocGF0aCwgKGRhdGE6IFVpbnQ4QXJyYXkpOiB2b2lkID0+IHtcblx0XHRcdFx0dGhpcy5zdWNjZXNzKHN1Y2Nlc3MsIHBhdGgsIGRhdGEpO1xuXHRcdFx0XHRyZXNvbHZlKGRhdGEpO1xuXHRcdFx0fSwgKHN0YXR1czogbnVtYmVyLCByZXNwb25zZVRleHQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBlcnJvck1zZyA9IGBDb3VsZG4ndCBsb2FkIGJpbmFyeSAke3BhdGh9OiBzdGF0dXMgJHtzdGF0dXN9LCAke3Jlc3BvbnNlVGV4dH1gO1xuXHRcdFx0XHR0aGlzLmVycm9yKGVycm9yLCBwYXRoLCBlcnJvck1zZyk7XG5cdFx0XHRcdHJlamVjdChlcnJvck1zZyk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdGxvYWRUZXh0IChwYXRoOiBzdHJpbmcsXG5cdFx0c3VjY2VzczogKHBhdGg6IHN0cmluZywgdGV4dDogc3RyaW5nKSA9PiB2b2lkID0gKCkgPT4geyB9LFxuXHRcdGVycm9yOiAocGF0aDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7IH0pIHtcblx0XHRwYXRoID0gdGhpcy5zdGFydChwYXRoKTtcblxuXHRcdHRoaXMuZG93bmxvYWRlci5kb3dubG9hZFRleHQocGF0aCwgKGRhdGE6IHN0cmluZyk6IHZvaWQgPT4ge1xuXHRcdFx0dGhpcy5zdWNjZXNzKHN1Y2Nlc3MsIHBhdGgsIGRhdGEpO1xuXHRcdH0sIChzdGF0dXM6IG51bWJlciwgcmVzcG9uc2VUZXh0OiBzdHJpbmcpOiB2b2lkID0+IHtcblx0XHRcdHRoaXMuZXJyb3IoZXJyb3IsIHBhdGgsIGBDb3VsZG4ndCBsb2FkIHRleHQgJHtwYXRofTogc3RhdHVzICR7c3RhdHVzfSwgJHtyZXNwb25zZVRleHR9YCk7XG5cdFx0fSk7XG5cdH1cblxuXHRsb2FkSnNvbiAocGF0aDogc3RyaW5nLFxuXHRcdHN1Y2Nlc3M6IChwYXRoOiBzdHJpbmcsIG9iamVjdDogb2JqZWN0KSA9PiB2b2lkID0gKCkgPT4geyB9LFxuXHRcdGVycm9yOiAocGF0aDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7IH0pIHtcblx0XHRwYXRoID0gdGhpcy5zdGFydChwYXRoKTtcblxuXHRcdGlmICh0aGlzLnJldXNlQXNzZXRzKHBhdGgsIHN1Y2Nlc3MsIGVycm9yKSkgcmV0dXJuO1xuXG5cdFx0dGhpcy5jYWNoZS5hc3NldHNMb2FkZWRbcGF0aF0gPSBuZXcgUHJvbWlzZTxvYmplY3Q+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMuZG93bmxvYWRlci5kb3dubG9hZEpzb24ocGF0aCwgKGRhdGE6IG9iamVjdCk6IHZvaWQgPT4ge1xuXHRcdFx0XHR0aGlzLnN1Y2Nlc3Moc3VjY2VzcywgcGF0aCwgZGF0YSk7XG5cdFx0XHRcdHJlc29sdmUoZGF0YSk7XG5cdFx0XHR9LCAoc3RhdHVzOiBudW1iZXIsIHJlc3BvbnNlVGV4dDogc3RyaW5nKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGVycm9yTXNnID0gYENvdWxkbid0IGxvYWQgSlNPTiAke3BhdGh9OiBzdGF0dXMgJHtzdGF0dXN9LCAke3Jlc3BvbnNlVGV4dH1gO1xuXHRcdFx0XHR0aGlzLmVycm9yKGVycm9yLCBwYXRoLCBlcnJvck1zZyk7XG5cdFx0XHRcdHJlamVjdChlcnJvck1zZyk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cblx0cmV1c2VBc3NldHM8VCBleHRlbmRzIEFzc2V0RGF0YT4gKFxuXHRcdHBhdGg6IHN0cmluZyxcblx0XHRzdWNjZXNzOiBBc3NldENhbGxiYWNrPFQ+ID0gKCkgPT4geyB9LFxuXHRcdGVycm9yOiBFcnJvckNhbGxiYWNrID0gKCkgPT4geyB9XG5cdCkge1xuXHRcdGNvbnN0IGxvYWRlZFN0YXR1cyA9IHRoaXMuY2FjaGUuZ2V0QXNzZXQocGF0aCk7XG5cdFx0Y29uc3QgYWxyZWFkeUV4aXN0c09yTG9hZGluZyA9IGxvYWRlZFN0YXR1cyAhPT0gdW5kZWZpbmVkO1xuXHRcdGlmIChhbHJlYWR5RXhpc3RzT3JMb2FkaW5nKSB7XG5cdFx0XHR0aGlzLmNhY2hlLmFzc2V0c0xvYWRlZFtwYXRoXSA9IGxvYWRlZFN0YXR1c1xuXHRcdFx0XHQudGhlbihkYXRhID0+IHtcblx0XHRcdFx0XHQvLyBuZWNlc3Nhcnkgd2hlbiB1c2VyIHByZWxvYWRzIGFuIGltYWdlIGludG8gdGhlIGNhY2hlLlxuXHRcdFx0XHRcdC8vIHRleHR1cmUgbG9hZGVyIGlzIG5vdCBhdmFpYWJsZSBpbiB0aGUgY2FjaGUsIHNvIHdlIHRyYW5zZm9ybSBpbiBHTFRleHR1cmUgYXQgZmlyc3QgdXNlXG5cdFx0XHRcdFx0ZGF0YSA9IChkYXRhIGluc3RhbmNlb2YgSW1hZ2UgfHwgZGF0YSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKSA/IHRoaXMudGV4dHVyZUxvYWRlcihkYXRhKSBhcyBUIDogZGF0YTtcblx0XHRcdFx0XHR0aGlzLnN1Y2Nlc3Moc3VjY2VzcywgcGF0aCwgZGF0YSBhcyBUKTtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGVycm9yTXNnID0+IHtcblx0XHRcdFx0XHR0aGlzLmVycm9yKGVycm9yLCBwYXRoLCBlcnJvck1zZyk7XG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBhbHJlYWR5RXhpc3RzT3JMb2FkaW5nO1xuXHR9XG5cblx0bG9hZFRleHR1cmUgKFxuXHRcdHBhdGg6IHN0cmluZyxcblx0XHRzdWNjZXNzOiBBc3NldENhbGxiYWNrPFRleHR1cmU+ID0gKCkgPT4geyB9LFxuXHRcdGVycm9yOiBFcnJvckNhbGxiYWNrID0gKCkgPT4geyB9XG5cdCkge1xuXG5cdFx0cGF0aCA9IHRoaXMuc3RhcnQocGF0aCk7XG5cblx0XHRpZiAodGhpcy5yZXVzZUFzc2V0cyhwYXRoLCBzdWNjZXNzLCBlcnJvcikpIHJldHVybjtcblxuXHRcdGNvbnN0IHBtYSA9IHRoaXMudGV4dHVyZVBtYUluZm9bcGF0aF07XG5cdFx0dGhpcy5jYWNoZS5hc3NldHNMb2FkZWRbcGF0aF0gPSBuZXcgUHJvbWlzZTxUZXh0dXJlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBpc0Jyb3dzZXIgPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQpO1xuXHRcdFx0Y29uc3QgaXNXZWJXb3JrZXIgPSAhaXNCcm93c2VyOyAvLyAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCc7XG5cdFx0XHRpZiAoaXNXZWJXb3JrZXIpIHtcblx0XHRcdFx0ZmV0Y2gocGF0aCwgeyBtb2RlOiA8UmVxdWVzdE1vZGU+XCJjb3JzXCIgfSkudGhlbigocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0XHRpZiAocmVzcG9uc2Uub2spIHJldHVybiByZXNwb25zZS5ibG9iKCk7XG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNc2cgPSBgQ291bGRuJ3QgbG9hZCBpbWFnZTogJHtwYXRofWA7XG5cdFx0XHRcdFx0dGhpcy5lcnJvcihlcnJvciwgcGF0aCwgYENvdWxkbid0IGxvYWQgaW1hZ2U6ICR7cGF0aH1gKTtcblx0XHRcdFx0XHRyZWplY3QoZXJyb3JNc2cpO1xuXHRcdFx0XHR9KS50aGVuKChibG9iKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGJsb2IgPyBjcmVhdGVJbWFnZUJpdG1hcChibG9iLCB7IHByZW11bHRpcGx5QWxwaGE6IFwibm9uZVwiLCBjb2xvclNwYWNlQ29udmVyc2lvbjogXCJub25lXCIgfSkgOiBudWxsO1xuXHRcdFx0XHR9KS50aGVuKChiaXRtYXApID0+IHtcblx0XHRcdFx0XHRpZiAoYml0bWFwKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB0ZXh0dXJlID0gdGhpcy5jcmVhdGVUZXh0dXJlKHBhdGgsIHBtYSwgYml0bWFwKTtcblx0XHRcdFx0XHRcdHRoaXMuc3VjY2VzcyhzdWNjZXNzLCBwYXRoLCB0ZXh0dXJlKTtcblx0XHRcdFx0XHRcdHJlc29sdmUodGV4dHVyZSk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuXHRcdFx0XHRpbWFnZS5jcm9zc09yaWdpbiA9IFwiYW5vbnltb3VzXCI7XG5cdFx0XHRcdGltYWdlLm9ubG9hZCA9ICgpID0+IHtcblx0XHRcdFx0XHRjb25zdCB0ZXh0dXJlID0gdGhpcy5jcmVhdGVUZXh0dXJlKHBhdGgsIHBtYSwgaW1hZ2UpO1xuXHRcdFx0XHRcdHRoaXMuc3VjY2VzcyhzdWNjZXNzLCBwYXRoLCB0ZXh0dXJlKTtcblx0XHRcdFx0XHRyZXNvbHZlKHRleHR1cmUpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRpbWFnZS5vbmVycm9yID0gKCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGVycm9yTXNnID0gYENvdWxkbid0IGxvYWQgaW1hZ2U6ICR7cGF0aH1gO1xuXHRcdFx0XHRcdHRoaXMuZXJyb3IoZXJyb3IsIHBhdGgsIGVycm9yTXNnKTtcblx0XHRcdFx0XHRyZWplY3QoZXJyb3JNc2cpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAodGhpcy5kb3dubG9hZGVyLnJhd0RhdGFVcmlzW3BhdGhdKSBwYXRoID0gdGhpcy5kb3dubG9hZGVyLnJhd0RhdGFVcmlzW3BhdGhdO1xuXHRcdFx0XHRpbWFnZS5zcmMgPSBwYXRoO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0bG9hZFRleHR1cmVBdGxhcyAoXG5cdFx0cGF0aDogc3RyaW5nLFxuXHRcdHN1Y2Nlc3M6IEFzc2V0Q2FsbGJhY2s8VGV4dHVyZUF0bGFzPiA9ICgpID0+IHsgfSxcblx0XHRlcnJvcjogRXJyb3JDYWxsYmFjayA9ICgpID0+IHsgfSxcblx0XHRmaWxlQWxpYXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG5cdCkge1xuXHRcdGNvbnN0IGluZGV4ID0gcGF0aC5sYXN0SW5kZXhPZihcIi9cIik7XG5cdFx0Y29uc3QgcGFyZW50ID0gaW5kZXggPj0gMCA/IHBhdGguc3Vic3RyaW5nKDAsIGluZGV4ICsgMSkgOiBcIlwiO1xuXHRcdHBhdGggPSB0aGlzLnN0YXJ0KHBhdGgpO1xuXG5cdFx0aWYgKHRoaXMucmV1c2VBc3NldHMocGF0aCwgc3VjY2VzcywgZXJyb3IpKSByZXR1cm47XG5cblx0XHR0aGlzLmNhY2hlLmFzc2V0c0xvYWRlZFtwYXRoXSA9IG5ldyBQcm9taXNlPFRleHR1cmVBdGxhcz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5kb3dubG9hZGVyLmRvd25sb2FkVGV4dChwYXRoLCAoYXRsYXNUZXh0OiBzdHJpbmcpOiB2b2lkID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCBhdGxhcyA9IHRoaXMuY3JlYXRlVGV4dHVyZUF0bGFzKGF0bGFzVGV4dCwgcGFyZW50LCBwYXRoLCBmaWxlQWxpYXMpO1xuXHRcdFx0XHRcdGxldCB0b0xvYWQgPSBhdGxhcy5wYWdlcy5sZW5ndGgsIGFib3J0ID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAodG9Mb2FkID09PSAwKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnN1Y2Nlc3Moc3VjY2VzcywgcGF0aCwgYXRsYXMpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShhdGxhcyk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBwYWdlIG9mIGF0bGFzLnBhZ2VzKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmxvYWRUZXh0dXJlKFxuXHRcdFx0XHRcdFx0XHR0aGlzLnRleHR1cmVQYXRoKHBhcmVudCwgcGFnZS5uYW1lLCBmaWxlQWxpYXMpLFxuXHRcdFx0XHRcdFx0XHQoaW1hZ2VQYXRoOiBzdHJpbmcsIHRleHR1cmU6IFRleHR1cmUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWFib3J0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYWdlLnNldFRleHR1cmUodGV4dHVyZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoLS10b0xvYWQgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zdWNjZXNzKHN1Y2Nlc3MsIHBhdGgsIGF0bGFzKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZShhdGxhcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHQoaW1hZ2VQYXRoOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmICghYWJvcnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGVycm9yTXNnID0gYENvdWxkbid0IGxvYWQgdGV4dHVyZSAke3BhdGh9IHBhZ2UgaW1hZ2U6ICR7aW1hZ2VQYXRofWA7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmVycm9yKGVycm9yLCBwYXRoLCBlcnJvck1zZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3QoZXJyb3JNc2cpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRhYm9ydCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNc2cgPSBgQ291bGRuJ3QgcGFyc2UgdGV4dHVyZSBhdGxhcyAke3BhdGh9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWA7XG5cdFx0XHRcdFx0dGhpcy5lcnJvcihlcnJvciwgcGF0aCwgZXJyb3JNc2cpO1xuXHRcdFx0XHRcdHJlamVjdChlcnJvck1zZyk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIChzdGF0dXM6IG51bWJlciwgcmVzcG9uc2VUZXh0OiBzdHJpbmcpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3QgZXJyb3JNc2cgPSBgQ291bGRuJ3QgbG9hZCB0ZXh0dXJlIGF0bGFzICR7cGF0aH06IHN0YXR1cyAke3N0YXR1c30sICR7cmVzcG9uc2VUZXh0fWA7XG5cdFx0XHRcdHRoaXMuZXJyb3IoZXJyb3IsIHBhdGgsIGVycm9yTXNnKTtcblx0XHRcdFx0cmVqZWN0KGVycm9yTXNnKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0bG9hZFRleHR1cmVBdGxhc0J1dE5vVGV4dHVyZXMgKFxuXHRcdHBhdGg6IHN0cmluZyxcblx0XHRzdWNjZXNzOiBBc3NldENhbGxiYWNrPFRleHR1cmVBdGxhcz4gPSAoKSA9PiB7IH0sXG5cdFx0ZXJyb3I6IEVycm9yQ2FsbGJhY2sgPSAoKSA9PiB7IH0sXG5cdCkge1xuXHRcdGNvbnN0IGluZGV4ID0gcGF0aC5sYXN0SW5kZXhPZihcIi9cIik7XG5cdFx0Y29uc3QgcGFyZW50ID0gaW5kZXggPj0gMCA/IHBhdGguc3Vic3RyaW5nKDAsIGluZGV4ICsgMSkgOiBcIlwiO1xuXHRcdHBhdGggPSB0aGlzLnN0YXJ0KHBhdGgpO1xuXG5cdFx0aWYgKHRoaXMucmV1c2VBc3NldHMocGF0aCwgc3VjY2VzcywgZXJyb3IpKSByZXR1cm47XG5cblx0XHR0aGlzLmNhY2hlLmFzc2V0c0xvYWRlZFtwYXRoXSA9IG5ldyBQcm9taXNlPFRleHR1cmVBdGxhcz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5kb3dubG9hZGVyLmRvd25sb2FkVGV4dChwYXRoLCAoYXRsYXNUZXh0OiBzdHJpbmcpOiB2b2lkID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCBhdGxhcyA9IHRoaXMuY3JlYXRlVGV4dHVyZUF0bGFzKGF0bGFzVGV4dCwgcGFyZW50LCBwYXRoKTtcblx0XHRcdFx0XHR0aGlzLnN1Y2Nlc3Moc3VjY2VzcywgcGF0aCwgYXRsYXMpO1xuXHRcdFx0XHRcdHJlc29sdmUoYXRsYXMpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNc2cgPSBgQ291bGRuJ3QgcGFyc2UgdGV4dHVyZSBhdGxhcyAke3BhdGh9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWA7XG5cdFx0XHRcdFx0dGhpcy5lcnJvcihlcnJvciwgcGF0aCwgZXJyb3JNc2cpO1xuXHRcdFx0XHRcdHJlamVjdChlcnJvck1zZyk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIChzdGF0dXM6IG51bWJlciwgcmVzcG9uc2VUZXh0OiBzdHJpbmcpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3QgZXJyb3JNc2cgPSBgQ291bGRuJ3QgbG9hZCB0ZXh0dXJlIGF0bGFzICR7cGF0aH06IHN0YXR1cyAke3N0YXR1c30sICR7cmVzcG9uc2VUZXh0fWA7XG5cdFx0XHRcdHRoaXMuZXJyb3IoZXJyb3IsIHBhdGgsIGVycm9yTXNnKTtcblx0XHRcdFx0cmVqZWN0KGVycm9yTXNnKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgbG9hZEJpbmFyeUFzeW5jIChwYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5sb2FkQmluYXJ5KHBhdGgsXG5cdFx0XHRcdChfLCBiaW5hcnkpID0+IHJlc29sdmUoYmluYXJ5KSxcblx0XHRcdFx0KF8sIG1lc3NhZ2UpID0+IHJlamVjdChtZXNzYWdlKSxcblx0XHRcdCk7XG5cdFx0fSk7XG5cdH1cblxuXHRhc3luYyBsb2FkSnNvbkFzeW5jIChwYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5sb2FkSnNvbihwYXRoLFxuXHRcdFx0XHQoXywgb2JqZWN0KSA9PiByZXNvbHZlKG9iamVjdCksXG5cdFx0XHRcdChfLCBtZXNzYWdlKSA9PiByZWplY3QobWVzc2FnZSksXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgbG9hZFRleHR1cmVBc3luYyAocGF0aDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPFRleHR1cmU+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMubG9hZFRleHR1cmUocGF0aCxcblx0XHRcdFx0KF8sIHRleHR1cmUpID0+IHJlc29sdmUodGV4dHVyZSksXG5cdFx0XHRcdChfLCBtZXNzYWdlKSA9PiByZWplY3QobWVzc2FnZSksXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgbG9hZFRleHR1cmVBdGxhc0FzeW5jIChwYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5sb2FkVGV4dHVyZUF0bGFzKHBhdGgsXG5cdFx0XHRcdChfLCBhdGxhcykgPT4gcmVzb2x2ZShhdGxhcyksXG5cdFx0XHRcdChfLCBtZXNzYWdlKSA9PiByZWplY3QobWVzc2FnZSksXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgbG9hZFRleHR1cmVBdGxhc0J1dE5vVGV4dHVyZXNBc3luYyAocGF0aDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPFRleHR1cmVBdGxhcz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5sb2FkVGV4dHVyZUF0bGFzQnV0Tm9UZXh0dXJlcyhwYXRoLFxuXHRcdFx0XHQoXywgYXRsYXMpID0+IHJlc29sdmUoYXRsYXMpLFxuXHRcdFx0XHQoXywgbWVzc2FnZSkgPT4gcmVqZWN0KG1lc3NhZ2UpLFxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxuXG5cdHNldENhY2hlIChjYWNoZTogQXNzZXRDYWNoZSkge1xuXHRcdHRoaXMuY2FjaGUgPSBjYWNoZTtcblx0fVxuXG5cdGdldCAocGF0aDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2FjaGUuYXNzZXRzW3RoaXMucGF0aFByZWZpeCArIHBhdGhdO1xuXHR9XG5cblx0cmVxdWlyZSAocGF0aDogc3RyaW5nKSB7XG5cdFx0cGF0aCA9IHRoaXMucGF0aFByZWZpeCArIHBhdGg7XG5cdFx0Y29uc3QgYXNzZXQgPSB0aGlzLmNhY2hlLmFzc2V0c1twYXRoXTtcblx0XHRpZiAoYXNzZXQpIHJldHVybiBhc3NldDtcblx0XHRjb25zdCBlcnJvciA9IHRoaXMuZXJyb3JzW3BhdGhdO1xuXHRcdHRocm93IEVycm9yKGBBc3NldCBub3QgZm91bmQ6ICR7cGF0aH0ke2Vycm9yID8gYFxcbiR7ZXJyb3J9YCA6IFwiXCJ9YCk7XG5cdH1cblxuXHRyZW1vdmUgKHBhdGg6IHN0cmluZykge1xuXHRcdHBhdGggPSB0aGlzLnBhdGhQcmVmaXggKyBwYXRoO1xuXHRcdGNvbnN0IGFzc2V0ID0gdGhpcy5jYWNoZS5hc3NldHNbcGF0aF07XG5cdFx0aWYgKGFzc2V0LmRpc3Bvc2UpIGFzc2V0LmRpc3Bvc2UoKTtcblx0XHRkZWxldGUgdGhpcy5jYWNoZS5hc3NldHNbcGF0aF07XG5cdFx0ZGVsZXRlIHRoaXMuY2FjaGUuYXNzZXRzUmVmQ291bnRbcGF0aF07XG5cdFx0ZGVsZXRlIHRoaXMuY2FjaGUuYXNzZXRzTG9hZGVkW3BhdGhdO1xuXHRcdHJldHVybiBhc3NldDtcblx0fVxuXG5cdHJlbW92ZUFsbCAoKSB7XG5cdFx0Zm9yIChjb25zdCBwYXRoIGluIHRoaXMuY2FjaGUuYXNzZXRzKSB7XG5cdFx0XHRjb25zdCBhc3NldCA9IHRoaXMuY2FjaGUuYXNzZXRzW3BhdGhdO1xuXHRcdFx0aWYgKGFzc2V0LmRpc3Bvc2UpIGFzc2V0LmRpc3Bvc2UoKTtcblx0XHR9XG5cdFx0dGhpcy5jYWNoZS5hc3NldHMgPSB7fTtcblx0XHR0aGlzLmNhY2hlLmFzc2V0c0xvYWRlZCA9IHt9O1xuXHRcdHRoaXMuY2FjaGUuYXNzZXRzUmVmQ291bnQgPSB7fTtcblx0fVxuXG5cdGlzTG9hZGluZ0NvbXBsZXRlICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy50b0xvYWQgPT09IDA7XG5cdH1cblxuXHRnZXRUb0xvYWQgKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMudG9Mb2FkO1xuXHR9XG5cblx0Z2V0TG9hZGVkICgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLmxvYWRlZDtcblx0fVxuXG5cdGRpc3Bvc2UgKCkge1xuXHRcdHRoaXMucmVtb3ZlQWxsKCk7XG5cdH1cblxuXHQvLyBkaXNwb3NlIGFzc2V0IG9ubHkgaWYgaXQncyBub3QgdXNlZCBieSBvdGhlcnNcblx0ZGlzcG9zZUFzc2V0IChwYXRoOiBzdHJpbmcpIHtcblx0XHRjb25zdCBhc3NldCA9IHRoaXMuY2FjaGUuYXNzZXRzW3BhdGhdO1xuXHRcdGlmIChhc3NldCBpbnN0YW5jZW9mIFRleHR1cmVBdGxhcykge1xuXHRcdFx0YXNzZXQuZGlzcG9zZSgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmRpc3Bvc2VBc3NldEludGVybmFsKHBhdGgpO1xuXHR9XG5cblx0aGFzRXJyb3JzICgpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXModGhpcy5lcnJvcnMpLmxlbmd0aCA+IDA7XG5cdH1cblxuXHRnZXRFcnJvcnMgKCkge1xuXHRcdHJldHVybiB0aGlzLmVycm9ycztcblx0fVxuXG5cdHByaXZhdGUgZGlzcG9zZUFzc2V0SW50ZXJuYWwgKHBhdGg6IHN0cmluZykge1xuXHRcdGlmICh0aGlzLmNhY2hlLmFzc2V0c1JlZkNvdW50W3BhdGhdID4gMCAmJiAtLXRoaXMuY2FjaGUuYXNzZXRzUmVmQ291bnRbcGF0aF0gPT09IDApIHtcblx0XHRcdHJldHVybiB0aGlzLnJlbW92ZShwYXRoKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVRleHR1cmVBdGxhcyAoYXRsYXNUZXh0OiBzdHJpbmcsIHBhcmVudFBhdGg6IHN0cmluZywgcGF0aDogc3RyaW5nLCBmaWxlQWxpYXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogVGV4dHVyZUF0bGFzIHtcblx0XHRjb25zdCBhdGxhcyA9IG5ldyBUZXh0dXJlQXRsYXMoYXRsYXNUZXh0KTtcblx0XHRhdGxhcy5kaXNwb3NlID0gKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuY2FjaGUuYXNzZXRzUmVmQ291bnRbcGF0aF0gPD0gMCkgcmV0dXJuO1xuXHRcdFx0dGhpcy5kaXNwb3NlQXNzZXRJbnRlcm5hbChwYXRoKTtcblx0XHRcdGZvciAoY29uc3QgcGFnZSBvZiBhdGxhcy5wYWdlcykge1xuXHRcdFx0XHRwYWdlLnRleHR1cmU/LmRpc3Bvc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Zm9yIChjb25zdCBwYWdlIG9mIGF0bGFzLnBhZ2VzKSB7XG5cdFx0XHRjb25zdCB0ZXh0dXJlUGF0aCA9IHRoaXMudGV4dHVyZVBhdGgocGFyZW50UGF0aCwgcGFnZS5uYW1lLCBmaWxlQWxpYXMpO1xuXHRcdFx0dGhpcy50ZXh0dXJlUG1hSW5mb1t0aGlzLnBhdGhQcmVmaXggKyB0ZXh0dXJlUGF0aF0gPSBwYWdlLnBtYTtcblx0XHR9XG5cdFx0cmV0dXJuIGF0bGFzO1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVUZXh0dXJlIChwYXRoOiBzdHJpbmcsIHBtYTogYm9vbGVhbiwgaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQgfCBJbWFnZUJpdG1hcCk6IFRleHR1cmUge1xuXHRcdGNvbnN0IHRleHR1cmUgPSB0aGlzLnRleHR1cmVMb2FkZXIoaW1hZ2UsIHBtYSk7XG5cdFx0Y29uc3QgdGV4dHVyZURpc3Bvc2UgPSB0ZXh0dXJlLmRpc3Bvc2UuYmluZCh0ZXh0dXJlKTtcblx0XHR0ZXh0dXJlLmRpc3Bvc2UgPSAoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5kaXNwb3NlQXNzZXRJbnRlcm5hbChwYXRoKSkgdGV4dHVyZURpc3Bvc2UoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRleHR1cmU7XG5cdH1cblxuXHRwcml2YXRlIHRleHR1cmVQYXRoIChwYXJlbnRQYXRoOiBzdHJpbmcsIHBhZ2VOYW1lOiBzdHJpbmcsIGZpbGVBbGlhcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcblx0XHRpZiAoIWZpbGVBbGlhcykgcmV0dXJuIHBhcmVudFBhdGggKyBwYWdlTmFtZTtcblx0XHRyZXR1cm4gZmlsZUFsaWFzW3BhZ2VOYW1lXTtcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgQXNzZXRDYWNoZSB7XG5cdHB1YmxpYyBhc3NldHM6IFN0cmluZ01hcDxBc3NldERhdGE+ID0ge307XG5cdHB1YmxpYyBhc3NldHNSZWZDb3VudDogU3RyaW5nTWFwPG51bWJlcj4gPSB7fTtcblx0cHVibGljIGFzc2V0c0xvYWRlZDogU3RyaW5nTWFwPFByb21pc2U8QXNzZXREYXRhIHwgdW5kZWZpbmVkPj4gPSB7fTtcblxuXHRzdGF0aWMgQVZBSUxBQkxFX0NBQ0hFUyA9IG5ldyBNYXA8c3RyaW5nLCBBc3NldENhY2hlPigpO1xuXHRzdGF0aWMgZ2V0Q2FjaGUgKGlkOiBzdHJpbmcpIHtcblx0XHRjb25zdCBjYWNoZSA9IEFzc2V0Q2FjaGUuQVZBSUxBQkxFX0NBQ0hFUy5nZXQoaWQpO1xuXHRcdGlmIChjYWNoZSkgcmV0dXJuIGNhY2hlO1xuXG5cdFx0Y29uc3QgbmV3Q2FjaGUgPSBuZXcgQXNzZXRDYWNoZSgpO1xuXHRcdEFzc2V0Q2FjaGUuQVZBSUxBQkxFX0NBQ0hFUy5zZXQoaWQsIG5ld0NhY2hlKTtcblx0XHRyZXR1cm4gbmV3Q2FjaGU7XG5cdH1cblxuXHRhc3luYyBhZGRBc3NldDxUIGV4dGVuZHMgQXNzZXREYXRhPiAocGF0aDogc3RyaW5nLCBhc3NldDogVCk6IFByb21pc2U8VD4ge1xuXHRcdHRoaXMuYXNzZXRzTG9hZGVkW3BhdGhdID0gUHJvbWlzZS5yZXNvbHZlKGFzc2V0KTtcblx0XHR0aGlzLmFzc2V0c1twYXRoXSA9IGFzc2V0O1xuXHRcdHJldHVybiBhc3NldDtcblx0fVxuXG5cdGdldEFzc2V0PFQgZXh0ZW5kcyBBc3NldERhdGE+IChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5hc3NldHNMb2FkZWRbcGF0aF0gYXMgUHJvbWlzZTxUPiB8IHVuZGVmaW5lZDtcblx0fVxufVxuXG50eXBlIERvd25sb2FkZXJTdWNjZXNzQ2FsbGJhY2s8VCBleHRlbmRzIEFzc2V0RGF0YSA9IEFzc2V0RGF0YT4gPSAoZGF0YTogVCkgPT4gdm9pZDtcbnR5cGUgRG93bmxvYWRlckVycm9yQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIsIHJlc3BvbnNlVGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuXG5leHBvcnQgY2xhc3MgRG93bmxvYWRlciB7XG5cdHByaXZhdGUgY2FsbGJhY2tzOiBTdHJpbmdNYXA8QXJyYXk8RG93bmxvYWRlclN1Y2Nlc3NDYWxsYmFjayB8IERvd25sb2FkZXJFcnJvckNhbGxiYWNrPj4gPSB7fTtcblx0cmF3RGF0YVVyaXM6IFN0cmluZ01hcDxzdHJpbmc+ID0ge307XG5cblx0ZGF0YVVyaVRvU3RyaW5nIChkYXRhVXJpOiBzdHJpbmcpIHtcblx0XHRpZiAoIWRhdGFVcmkuc3RhcnRzV2l0aChcImRhdGE6XCIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJOb3QgYSBkYXRhIFVSSS5cIik7XG5cdFx0fVxuXG5cdFx0bGV0IGJhc2U2NElkeCA9IGRhdGFVcmkuaW5kZXhPZihcImJhc2U2NCxcIik7XG5cdFx0aWYgKGJhc2U2NElkeCAhPT0gLTEpIHtcblx0XHRcdGJhc2U2NElkeCArPSBcImJhc2U2NCxcIi5sZW5ndGg7XG5cdFx0XHRyZXR1cm4gYXRvYihkYXRhVXJpLnN1YnN0cihiYXNlNjRJZHgpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGRhdGFVcmkuc3Vic3RyKGRhdGFVcmkuaW5kZXhPZihcIixcIikgKyAxKTtcblx0XHR9XG5cdH1cblxuXHRiYXNlNjRUb1VpbnQ4QXJyYXkgKGJhc2U2NDogc3RyaW5nKTogVWludDhBcnJheSB7XG5cdFx0dmFyIGJpbmFyeV9zdHJpbmcgPSB3aW5kb3cuYXRvYihiYXNlNjQpO1xuXHRcdHZhciBsZW4gPSBiaW5hcnlfc3RyaW5nLmxlbmd0aDtcblx0XHR2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheShsZW4pO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGJ5dGVzW2ldID0gYmluYXJ5X3N0cmluZy5jaGFyQ29kZUF0KGkpO1xuXHRcdH1cblx0XHRyZXR1cm4gYnl0ZXM7XG5cdH1cblxuXHRkYXRhVXJpVG9VaW50OEFycmF5IChkYXRhVXJpOiBzdHJpbmcpOiBVaW50OEFycmF5IHtcblx0XHRpZiAoIWRhdGFVcmkuc3RhcnRzV2l0aChcImRhdGE6XCIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJOb3QgYSBkYXRhIFVSSS5cIik7XG5cdFx0fVxuXG5cdFx0bGV0IGJhc2U2NElkeCA9IGRhdGFVcmkuaW5kZXhPZihcImJhc2U2NCxcIik7XG5cdFx0aWYgKGJhc2U2NElkeCA9PT0gLTEpIHRocm93IG5ldyBFcnJvcihcIk5vdCBhIGJpbmFyeSBkYXRhIFVSSS5cIik7XG5cdFx0YmFzZTY0SWR4ICs9IFwiYmFzZTY0LFwiLmxlbmd0aDtcblx0XHRyZXR1cm4gdGhpcy5iYXNlNjRUb1VpbnQ4QXJyYXkoZGF0YVVyaS5zdWJzdHIoYmFzZTY0SWR4KSk7XG5cdH1cblxuXHRkb3dubG9hZFRleHQgKHVybDogc3RyaW5nLCBzdWNjZXNzOiBEb3dubG9hZGVyU3VjY2Vzc0NhbGxiYWNrPHN0cmluZz4sIGVycm9yOiBEb3dubG9hZGVyRXJyb3JDYWxsYmFjaykge1xuXHRcdGlmICh0aGlzLnN0YXJ0KHVybCwgc3VjY2VzcywgZXJyb3IpKSByZXR1cm47XG5cblx0XHRjb25zdCByYXdEYXRhVXJpID0gdGhpcy5yYXdEYXRhVXJpc1t1cmxdO1xuXHRcdC8vIHdlIGFzc3VtZSBpZiBhIFwiLlwiIGlzIGluY2x1ZGVkIGluIGEgcmF3IGRhdGEgdXJpLCBpdCBpcyB1c2VkIHRvIHJld3JpdGUgYW4gYXNzZXQgVVJMXG5cdFx0aWYgKHJhd0RhdGFVcmkgJiYgIXJhd0RhdGFVcmkuaW5jbHVkZXMoXCIuXCIpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmZpbmlzaCh1cmwsIDIwMCwgdGhpcy5kYXRhVXJpVG9TdHJpbmcocmF3RGF0YVVyaSkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aGlzLmZpbmlzaCh1cmwsIDQwMCwgSlNPTi5zdHJpbmdpZnkoZSkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0XHRyZXF1ZXN0Lm92ZXJyaWRlTWltZVR5cGUoXCJ0ZXh0L2h0bWxcIik7XG5cdFx0cmVxdWVzdC5vcGVuKFwiR0VUXCIsIHJhd0RhdGFVcmkgPyByYXdEYXRhVXJpIDogdXJsLCB0cnVlKTtcblx0XHRjb25zdCBkb25lID0gKCkgPT4ge1xuXHRcdFx0dGhpcy5maW5pc2godXJsLCByZXF1ZXN0LnN0YXR1cywgcmVxdWVzdC5yZXNwb25zZVRleHQpO1xuXHRcdH07XG5cdFx0cmVxdWVzdC5vbmxvYWQgPSBkb25lO1xuXHRcdHJlcXVlc3Qub25lcnJvciA9IGRvbmU7XG5cdFx0cmVxdWVzdC5zZW5kKCk7XG5cdH1cblxuXHRkb3dubG9hZEpzb24gKHVybDogc3RyaW5nLCBzdWNjZXNzOiBEb3dubG9hZGVyU3VjY2Vzc0NhbGxiYWNrPG9iamVjdD4sIGVycm9yOiBEb3dubG9hZGVyRXJyb3JDYWxsYmFjaykge1xuXHRcdHRoaXMuZG93bmxvYWRUZXh0KHVybCwgKGRhdGE6IHN0cmluZyk6IHZvaWQgPT4ge1xuXHRcdFx0c3VjY2VzcyhKU09OLnBhcnNlKGRhdGEpKTtcblx0XHR9LCBlcnJvcik7XG5cdH1cblxuXHRkb3dubG9hZEJpbmFyeSAodXJsOiBzdHJpbmcsIHN1Y2Nlc3M6IChkYXRhOiBVaW50OEFycmF5KSA9PiB2b2lkLCBlcnJvcjogRG93bmxvYWRlckVycm9yQ2FsbGJhY2spIHtcblx0XHRpZiAodGhpcy5zdGFydCh1cmwsIHN1Y2Nlc3MsIGVycm9yKSkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgcmF3RGF0YVVyaSA9IHRoaXMucmF3RGF0YVVyaXNbdXJsXTtcblx0XHQvLyB3ZSBhc3N1bWUgaWYgYSBcIi5cIiBpcyBpbmNsdWRlZCBpbiBhIHJhdyBkYXRhIHVyaSwgaXQgaXMgdXNlZCB0byByZXdyaXRlIGFuIGFzc2V0IFVSTFxuXHRcdGlmIChyYXdEYXRhVXJpICYmICFyYXdEYXRhVXJpLmluY2x1ZGVzKFwiLlwiKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5maW5pc2godXJsLCAyMDAsIHRoaXMuZGF0YVVyaVRvVWludDhBcnJheShyYXdEYXRhVXJpKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRoaXMuZmluaXNoKHVybCwgNDAwLCBKU09OLnN0cmluZ2lmeShlKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXHRcdHJlcXVlc3Qub3BlbihcIkdFVFwiLCByYXdEYXRhVXJpID8gcmF3RGF0YVVyaSA6IHVybCwgdHJ1ZSk7XG5cdFx0cmVxdWVzdC5yZXNwb25zZVR5cGUgPSBcImFycmF5YnVmZmVyXCI7XG5cdFx0Y29uc3Qgb25lcnJvciA9ICgpID0+IHtcblx0XHRcdHRoaXMuZmluaXNoKHVybCwgcmVxdWVzdC5zdGF0dXMsIHJlcXVlc3QucmVzcG9uc2UpO1xuXHRcdH07XG5cdFx0cmVxdWVzdC5vbmxvYWQgPSAoKSA9PiB7XG5cdFx0XHRpZiAocmVxdWVzdC5zdGF0dXMgPT09IDIwMCB8fCByZXF1ZXN0LnN0YXR1cyA9PT0gMClcblx0XHRcdFx0dGhpcy5maW5pc2godXJsLCAyMDAsIG5ldyBVaW50OEFycmF5KHJlcXVlc3QucmVzcG9uc2UgYXMgQXJyYXlCdWZmZXIpKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0b25lcnJvcigpO1xuXHRcdH07XG5cdFx0cmVxdWVzdC5vbmVycm9yID0gb25lcnJvcjtcblx0XHRyZXF1ZXN0LnNlbmQoKTtcblx0fVxuXG5cdHByaXZhdGUgc3RhcnQ8VCBleHRlbmRzIEFzc2V0RGF0YT4gKHVybDogc3RyaW5nLCBzdWNjZXNzOiBEb3dubG9hZGVyU3VjY2Vzc0NhbGxiYWNrPFQ+LCBlcnJvcjogRG93bmxvYWRlckVycm9yQ2FsbGJhY2spIHtcblx0XHRsZXQgY2FsbGJhY2tzID0gdGhpcy5jYWxsYmFja3NbdXJsXTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKGNhbGxiYWNrcykgcmV0dXJuIHRydWU7XG5cdFx0XHR0aGlzLmNhbGxiYWNrc1t1cmxdID0gY2FsbGJhY2tzID0gW107XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGNhbGxiYWNrcy5wdXNoKHN1Y2Nlc3MgYXMgRG93bmxvYWRlclN1Y2Nlc3NDYWxsYmFjazxBc3NldERhdGE+LCBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBmaW5pc2ggKHVybDogc3RyaW5nLCBzdGF0dXM6IG51bWJlciwgZGF0YTogQXNzZXREYXRhKSB7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5jYWxsYmFja3NbdXJsXTtcblx0XHRkZWxldGUgdGhpcy5jYWxsYmFja3NbdXJsXTtcblx0XHRpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAwKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBuOyBpICs9IDIpXG5cdFx0XHRcdChjYWxsYmFja3NbaV0gYXMgRG93bmxvYWRlclN1Y2Nlc3NDYWxsYmFjaykoZGF0YSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAobGV0IGkgPSAxLCBuID0gY2FsbGJhY2tzLmxlbmd0aDsgaSA8IG47IGkgKz0gMilcblx0XHRcdFx0KGNhbGxiYWNrc1tpXSBhcyBEb3dubG9hZGVyRXJyb3JDYWxsYmFjaykoc3RhdHVzLCBkYXRhIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG59XG4iXX0=
@@ -26,28 +26,34 @@
26
26
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
27
  * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  *****************************************************************************/
29
- import { AttachmentLoader } from "./attachments/AttachmentLoader.js";
29
+ import type { AttachmentLoader } from "./attachments/AttachmentLoader.js";
30
30
  import { BoundingBoxAttachment } from "./attachments/BoundingBoxAttachment.js";
31
31
  import { ClippingAttachment } from "./attachments/ClippingAttachment.js";
32
32
  import { MeshAttachment } from "./attachments/MeshAttachment.js";
33
33
  import { PathAttachment } from "./attachments/PathAttachment.js";
34
34
  import { PointAttachment } from "./attachments/PointAttachment.js";
35
35
  import { RegionAttachment } from "./attachments/RegionAttachment.js";
36
- import { Skin } from "./Skin.js";
37
- import { TextureAtlas } from "./TextureAtlas.js";
38
- import { Sequence } from "./attachments/Sequence.js";
36
+ import type { Sequence } from "./attachments/Sequence.js";
37
+ import type { Skin } from "./Skin.js";
38
+ import type { TextureAtlas } from "./TextureAtlas.js";
39
39
  /** An {@link AttachmentLoader} that configures attachments using texture regions from an {@link TextureAtlas}.
40
40
  *
41
41
  * See [Loading skeleton data](http://esotericsoftware.com/spine-loading-skeleton-data#JSON-and-binary-data) in the
42
42
  * Spine Runtimes Guide. */
43
43
  export declare class AtlasAttachmentLoader implements AttachmentLoader {
44
44
  atlas: TextureAtlas;
45
- constructor(atlas: TextureAtlas);
46
- loadSequence(name: string, basePath: string, sequence: Sequence): void;
47
- newRegionAttachment(skin: Skin, name: string, path: string, sequence: Sequence): RegionAttachment;
48
- newMeshAttachment(skin: Skin, name: string, path: string, sequence: Sequence): MeshAttachment;
49
- newBoundingBoxAttachment(skin: Skin, name: string): BoundingBoxAttachment;
50
- newPathAttachment(skin: Skin, name: string): PathAttachment;
51
- newPointAttachment(skin: Skin, name: string): PointAttachment;
52
- newClippingAttachment(skin: Skin, name: string): ClippingAttachment;
45
+ allowMissingRegions: boolean;
46
+ constructor(atlas: TextureAtlas, allowMissingRegions?: boolean);
47
+ /** Sets each {@link Sequence.regions} by calling {@link findRegion} for each texture region using
48
+ * {@link Sequence.getPath}. */
49
+ protected findRegions(name: string, basePath: string, sequence: Sequence): void;
50
+ /** Looks for the region with the specified path. If not found and {@link allowMissingRegions} is false, an error is
51
+ * raised. */
52
+ protected findRegion(name: string, path: string): import("./TextureAtlas.js").TextureAtlasRegion | null;
53
+ newRegionAttachment(skin: Skin, placeholder: string, name: string, path: string, sequence: Sequence): RegionAttachment;
54
+ newMeshAttachment(skin: Skin, placeholder: string, name: string, path: string, sequence: Sequence): MeshAttachment;
55
+ newBoundingBoxAttachment(skin: Skin, placeholder: string, name: string): BoundingBoxAttachment;
56
+ newPathAttachment(skin: Skin, placeholder: string, name: string): PathAttachment;
57
+ newPointAttachment(skin: Skin, placeholder: string, name: string): PointAttachment;
58
+ newClippingAttachment(skin: Skin, placeholder: string, name: string): ClippingAttachment;
53
59
  }