atr-components 0.2.304 → 0.2.305

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.
@@ -36,7 +36,7 @@ export class ToolsUtil {
36
36
  return controlsConfig;
37
37
  }
38
38
  static httpSucces(res) {
39
- return ['200', '201'].some(v => res.status == v);
39
+ return ['200', '201', '204'].some(v => res.status == v);
40
40
  }
41
41
  /**
42
42
  *判断点是否在坐标区域内
@@ -244,6 +244,9 @@ export class ToolsUtil {
244
244
  if (url.startsWith("http")) {
245
245
  return url;
246
246
  }
247
+ if (!url.startsWith("/") && !atr_static_datas.OSS_URL.endsWith('/')) {
248
+ url = '/' + url;
249
+ }
247
250
  let result = atr_static_datas.OSS_URL + url;
248
251
  return result;
249
252
  }
@@ -367,6 +370,9 @@ export class ToolsUtil {
367
370
  static allEmpty(...arr) {
368
371
  return arr.every(item => !item);
369
372
  }
373
+ static isArray(obj) {
374
+ return obj instanceof Array;
375
+ }
370
376
  static isEmpty(obj) {
371
377
  if (obj === undefined) {
372
378
  return true;
@@ -380,7 +386,7 @@ export class ToolsUtil {
380
386
  if (obj === 0) {
381
387
  return false;
382
388
  }
383
- if (obj.trim() === '') {
389
+ if (typeof obj == "string" && obj.trim() === '') {
384
390
  return true;
385
391
  }
386
392
  return false;
@@ -439,6 +445,7 @@ export class ToolsUtil {
439
445
  };
440
446
  }
441
447
  }
448
+ ToolsUtil.ossPrefix = '';
442
449
  ToolsUtil.getOrgCode = function () {
443
450
  // var orgCode = '';
444
451
  // var hrefs = window.location.href.split('?')
@@ -474,4 +481,4 @@ ToolsUtil.allEqual = (...array) => array.every(item => item === array[0]);
474
481
  * @param array
475
482
  */
476
483
  ToolsUtil.satisfiedFn = (callback, ...array) => array.every(callback);
477
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9vbHNVdGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvY29yZS91dGlscy9Ub29sc1V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixnQkFBZ0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBSXRFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RCxNQUFNLE9BQU8sU0FBUztJQWlCcEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFXO1FBQ3pCLElBQUksR0FBRyxHQUFHLDRHQUE0RyxDQUFDO1FBQ3ZILE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFTO1FBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDN0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNsQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuQztRQUNELE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQVE7UUFDcEIsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ3JFLE9BQU8sS0FBSyxDQUFBO1NBQ2I7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsUUFBYSxFQUFFLFlBQXNCO1FBQzVELElBQUksY0FBYyxHQUFRLEVBQUUsQ0FBQTtRQUM1QixLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRTtZQUMxQixJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7Z0JBQzFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO2FBQzdEO2lCQUFNO2dCQUNMLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO2FBQ3RDO1NBQ0Y7UUFDRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFRO1FBQ3hCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBdUIsRUFBRSxTQUFpQztRQUMxRSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUN0QyxJQUFJLEdBQUcsS0FBSyxFQUFDLE1BQU07UUFDbkIsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFBLGVBQWU7UUFDaEMsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFDLGlCQUFpQjtRQUNqQixTQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQzNGLGdCQUFnQjtRQUNoQixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2hDLElBQUksS0FBSyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQzttQkFDNUIsTUFBTSxDQUFBLG1CQUFtQjtjQUM1QjtnQkFDQSxPQUFNO2FBQ1A7WUFDRCxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQ25DLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQ3RELElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELFdBQVc7WUFDWCxJQUFJLENBQUMsRUFBRSxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksTUFBTSxDQUFDO21CQUM3QixDQUFDLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFO2dCQUMvQixNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNkLE9BQU87YUFDUjtZQUVELGNBQWM7WUFDZCxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO21CQUM3QixDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLEdBQUcsTUFBTTt1QkFDeEIsQ0FBQyxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25DLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ2QsT0FBTzthQUNSO1lBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQzttQkFDMUIsQ0FBQyxNQUFNLElBQUksRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRTtnQkFFaEMsc0JBQXNCO2dCQUN0QixJQUFJLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUM7Z0JBQ25FLE1BQU07Z0JBQ04sSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNYLE1BQU0sR0FBRyxJQUFJLENBQUE7b0JBQ2IsT0FBTztpQkFDUjtnQkFDRCxjQUFjO2dCQUNkLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDVixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUE7aUJBQ2I7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxNQUFNLElBQUksSUFBSSxDQUFDO0lBRXhCLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLElBQWtCLEVBQUUsTUFBa0I7UUFDckQsSUFBSSxJQUFJLEtBQUssU0FBUztZQUFFLE9BQU87UUFFL0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUMsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQ2hCLE1BQU0sRUFBRSxDQUFDO1NBQ1Y7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFvQixFQUFFLE1BQWtCO1FBQ3hELElBQUksSUFBSSxLQUFLLFNBQVM7WUFBRSxPQUFPO1FBQy9CLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQUUsT0FBTztRQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsSUFBSSxJQUFJLEtBQUssU0FBUztnQkFBRSxTQUFTO1lBQ2pDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzlDLElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtnQkFDaEIsTUFBTSxFQUFFLENBQUM7Z0JBQ1QsT0FBTzthQUNSO1NBR0Y7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFZO1FBQy9CLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzdELElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDVixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvQjtRQUNELE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQVksRUFBRSxRQUFpQjtRQUNsRCxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUM3RCxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRSxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ1YsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDL0I7UUFDRCxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUMsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVM7UUFFM0IsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUMvQyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFckIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFTO1FBQzdCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFFL0MsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFTO1FBQzNCLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEQsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFXO1FBQzlCLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyw4Q0FBOEMsQ0FBQztJQUNuRixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFTO1FBQzdCLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBUztRQUM3QixPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQWlCRCxNQUFNLENBQUMsY0FBYztRQUNuQixPQUFPLEVBQUMsa0JBQWtCLEVBQUUsSUFBSSxFQUFDLENBQUE7SUFDbkMsQ0FBQztJQUdELE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBZSxFQUFFLElBQVU7UUFDL0MsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFO1lBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbkMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFNBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDOUYsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU07d0JBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7eUJBQzlCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUU7d0JBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7cUJBQ2xDOzt3QkFDQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtpQkFDekI7YUFDRjtTQUNGO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFVO1FBQzdCLElBQUksS0FBSyxHQUFvQixJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELElBQUksT0FBTyxHQUFvQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFOUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ2QsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7U0FDckI7UUFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUU7WUFDaEIsT0FBTyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUM7U0FDekI7UUFFRCxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUE7UUFDdkQsUUFBUTtRQUNSLHlFQUF5RTtJQUMzRSxDQUFDO0lBRUQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQVU7UUFDakMsSUFBSSxLQUFLLEdBQW9CLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakQsSUFBSSxPQUFPLEdBQW9CLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUU5QyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDZCxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztTQUNyQjtRQUVELElBQUksT0FBTyxJQUFJLENBQUMsRUFBRTtZQUNoQixPQUFPLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQztTQUN6QjtRQUVELE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLE9BQU8sR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNqUyxDQUFDO0lBRUQsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQVU7UUFDckMsSUFBSSxLQUFLLEdBQW9CLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakQsSUFBSSxPQUFPLEdBQW9CLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5QyxJQUFJLEtBQUssR0FBb0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdDLElBQUksT0FBTyxHQUFvQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDakQsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ2QsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7U0FDckI7UUFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUU7WUFDaEIsT0FBTyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUM7U0FDekI7UUFDRCxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDZCxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztTQUNyQjtRQUNELElBQUksT0FBTyxJQUFJLENBQUMsRUFBRTtZQUNoQixPQUFPLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQztTQUN6QjtRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLE9BQU8sR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUM7SUFDeEYsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFVO1FBQ2pDLElBQUksS0FBSyxHQUFvQixJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELElBQUksT0FBTyxHQUFvQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUMsSUFBSSxLQUFLLEdBQW9CLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QyxJQUFJLE9BQU8sR0FBb0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2pELElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtZQUNkLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxPQUFPLElBQUksQ0FBQyxFQUFFO1lBQ2hCLE9BQU8sR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ2QsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7U0FDckI7UUFDRCxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUU7WUFDaEIsT0FBTyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUM7U0FDekI7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDM0QsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBVyxFQUFFLFFBQVEsR0FBRyxLQUFLO1FBQzVDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsSUFBSSxRQUFRLEVBQUU7WUFDWiwrREFBK0Q7WUFDL0QsR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtTQUN6QztRQUNELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMxQixPQUFPLEdBQUcsQ0FBQTtTQUNYO1FBQ0QsSUFBSSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQTtRQUUzQyxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQVc7UUFDaEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDMUIsT0FBTyxHQUFHLENBQUE7U0FDWDtRQUNELE9BQU8sZ0JBQWdCLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQztJQUMvQyxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFVO1FBQzFCLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQy9ELENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBWTtRQUN4QixJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FDYixDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQ0YsQ0FBQztRQUNGLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBYztRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVixPQUFPLENBQUMsT0FBTyxDQUNiLEdBQUcsQ0FBQyxFQUFFO1lBQ0osSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZCLElBQUk7Z0JBQ0YsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO2FBQzVCO1lBQUMsT0FBTyxDQUFDLEVBQUU7YUFDWDtRQUNILENBQUMsQ0FDRixDQUFDO1FBQ0YsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFTLEVBQUUsUUFBaUIsRUFBRSxRQUFpQjtRQUNoRSxjQUFjO1FBQ2Qsb0NBQW9DO1FBQ3BDLDhGQUE4RjtRQUM5RixjQUFjO1FBQ2Qsa0NBQWtDO1FBQ2xDLG1EQUFtRDtRQUNuRCxnREFBZ0Q7UUFDaEQsRUFBRTtRQUNGLGlCQUFpQjtRQUNqQix1QkFBdUI7UUFDdkIsRUFBRTtRQUNGLGtCQUFrQjtRQUNsQixNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2QseUJBQXlCO1FBQ3pCLENBQUMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFDakQsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBVyxFQUFFLE1BQVk7UUFDMUMsSUFBSSxNQUFNLEVBQUU7WUFDVixHQUFHLElBQUksR0FBRyxDQUFDO1lBQ1gsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDZixHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFBO2lCQUN0QzthQUNGO1NBQ0Y7UUFDRCxvQkFBb0I7UUFDcEIsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNiLDRCQUE0QjtRQUM1QiwyQkFBMkI7UUFDM0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBVyxFQUFFLFFBQWE7UUFDdEMsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNoQixRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLO0tBQ2xDO1FBQ0MsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJLE9BQU8sR0FBUSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDakQsSUFBSSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQTtZQUNyQixHQUFHLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQTtZQUM1QyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNaLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7YUFDM0U7aUJBQU07Z0JBQ0wsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ3BDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN2RDtZQUVELEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO2dCQUNoQixJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO2dCQUN4QyxJQUFJLFFBQVEsR0FBUSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN0QyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUE7Z0JBQ25DLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQ2hELElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtnQkFDM0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUE7Z0JBQ3hDLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTtnQkFDaEUsS0FBSztnQkFDTCxrREFBa0Q7Z0JBRTFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNkLENBQUMsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFBO0lBRUosQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBVTtRQUMxQixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDbEIsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckMsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQVlELFdBQVc7SUFDWCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBVTtRQUMzQixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVELFVBQVU7SUFDVixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBVTtRQUMzQixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBVTtRQUMzQixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQVE7UUFDckIsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxDQUFBO1NBQ1o7UUFDRCxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUNELElBQUksT0FBTyxHQUFHLElBQUksU0FBUyxFQUFFO1lBQzNCLE9BQU8sS0FBSyxDQUFBO1NBQ2I7UUFDRCxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7WUFDYixPQUFPLEtBQUssQ0FBQTtTQUNiO1FBQ0QsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxDQUFBO1NBQ1o7UUFDRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQVc7UUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVk7UUFDakIsT0FBTyxRQUFRLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQztJQUMvQyxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVc7UUFFaEIsT0FBTyxRQUFRLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQztJQUM5QyxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVc7UUFDaEIsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUUsTUFBNEIsRUFBQyxNQUE0QjtRQUN6RSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3JDLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQTRCLEVBQUUsTUFBNEIsRUFBRSxNQUE0QjtRQUMxRyxlQUFlO1FBQ2YsSUFBSSxFQUFFLEdBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksRUFBRSxHQUFRLEVBQUUsQ0FBQztRQUNqQixFQUFFLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQTtRQUM3QixFQUFFLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQTtRQUM3QixFQUFFLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQTtRQUM3QixFQUFFLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQTtRQUM3QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFBO1FBQzFDLElBQUksUUFBUSxHQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzNDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzVDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzVDLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFBO1FBQ3BELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3hELElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNkLE9BQU8sQ0FBQyxNQUFNLENBQUE7U0FDZjthQUFNO1lBQ0wsT0FBTyxNQUFNLENBQUE7U0FDZDtJQUVILENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUF1QixFQUFFLE1BQTRCLEVBQUUsTUFBVztRQUN0RixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ2pCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDakIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQTtRQUNqQixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFBO1FBQ2pCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUE7UUFDOUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQTtRQUM5RyxPQUFPO1lBQ0wsRUFBRSxFQUFFLEVBQUU7WUFDTixFQUFFLEVBQUUsRUFBRTtTQUNQLENBQUE7SUFDSCxDQUFDOztBQTdoQk0sb0JBQVUsR0FBRztJQUNsQixvQkFBb0I7SUFDcEIsOENBQThDO0lBQzlDLDJCQUEyQjtJQUMzQiw2QkFBNkI7SUFDN0IscUJBQXFCO0lBQ3JCLHNDQUFzQztJQUN0QyxxQ0FBcUM7SUFDckMscUNBQXFDO0lBQ3JDLHFDQUFxQztJQUNyQyxxQ0FBcUM7SUFDckMsSUFBSTtJQUVKLE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQyxDQUFBO0FBZ0xNLDJCQUFpQixHQUFHO0lBQ3pCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNsQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFO1FBQzFCLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNoRDtJQUNELE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEMsQ0FBQyxDQUFBO0FBRU0sb0JBQVUsR0FBRyxVQUFVLFFBQWdCO0lBQzVDLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEMsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFBO0FBNE9NLGtCQUFRLEdBQUcsQ0FBQyxHQUFHLEtBQVksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUU5RTs7Ozs7R0FLRztBQUNJLHFCQUFXLEdBQUcsQ0FBQyxRQUFxQyxFQUFFLEdBQUcsS0FBWSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtqc29uLCBBdHJGb3JtT3B0LCBhdHJfc3RhdGljX2RhdGFzfSBmcm9tICcuLi9iYXNlL2F0ci1jb21tb24nO1xyXG5pbXBvcnQge2Zvcm1hdERhdGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7SHR0cEhlYWRlcnN9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge1NpbXBsZUNoYW5nZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7VmFsaWRhdG9yc30gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7U2Vzc2lvblN0b3JhZ2VVdGlsfSBmcm9tICcuL3Nlc3Npb25zdG9yYWdlLnV0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRvb2xzVXRpbCB7XHJcbiAgc3RhdGljIGdldE9yZ0NvZGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyB2YXIgb3JnQ29kZSA9ICcnO1xyXG4gICAgLy8gdmFyIGhyZWZzID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJz8nKVxyXG4gICAgLy8gaWYgKGhyZWZzLmxlbmd0aCA+PSAyKSB7XHJcbiAgICAvLyAgIHZhciBwYXJhbVN0ciA9IGhyZWZzWzFdO1xyXG4gICAgLy8gICAvL+WPguaVsOWtl+espuS4sumHjOacieayoeW4piA9Py8jXHJcbiAgICAvLyAgIG9yZ0NvZGUgPSBwYXJhbVN0ci5zcGxpdCgnPScpWzBdO1xyXG4gICAgLy8gICBvcmdDb2RlID0gb3JnQ29kZS5zcGxpdCgnPycpWzBdO1xyXG4gICAgLy8gICBvcmdDb2RlID0gb3JnQ29kZS5zcGxpdCgnLycpWzBdO1xyXG4gICAgLy8gICBvcmdDb2RlID0gb3JnQ29kZS5zcGxpdCgnIycpWzBdO1xyXG4gICAgLy8gICBvcmdDb2RlID0gb3JnQ29kZS5zcGxpdCgnLycpWzBdO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBpc0Jhc2U2NChzdHJpbmc6IGFueSkge1xyXG4gICAgbGV0IHJlZyA9IC9eXFxzKmRhdGE6KFthLXpdK1xcL1thLXowLTktKy5dKyg7W2Etei1dKz1bYS16MC05LV0rKT8pPyg7YmFzZTY0KT8sKFthLXowLTkhJCYnLCgpKis7PVxcLS5ffjpAXFwvPyVcXHNdKj8pXFxzKiQvaTtcclxuICAgIHJldHVybiByZWcudGVzdChzdHJpbmcpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZGF0YVVSSXRvQmxvYihjb2RlOiBhbnkpIHtcclxuICAgIGNvbnN0IHBhcnRzID0gY29kZS5zcGxpdCgnO2Jhc2U2NCwnKTtcclxuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFydHNbMF0uc3BsaXQoJzonKVsxXTtcclxuICAgIGNvbnN0IHJhdyA9IHdpbmRvdy5hdG9iKHBhcnRzWzFdKTtcclxuICAgIGNvbnN0IHJhd0xlbmd0aCA9IHJhdy5sZW5ndGg7XHJcbiAgICBjb25zdCB1SW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkocmF3TGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmF3TGVuZ3RoOyArK2kpIHtcclxuICAgICAgdUludDhBcnJheVtpXSA9IHJhdy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBCbG9iKFt1SW50OEFycmF5XSwge3R5cGU6IGNvbnRlbnRUeXBlfSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNOdWxsKHZhbDogYW55KSB7XHJcbiAgICBpZiAodmFsIHx8IFsnYm9vbGVhbicsICdzdHJpbmcnLCAnbnVtYmVyJ10uc29tZSh2ID0+IHR5cGVvZiB2YWwgPT0gdikpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldENvbnRyb2xzQ29uZmlnKGRhdGFGcm9tOiBhbnksIHJlcXVpcmVkUnVsZTogc3RyaW5nW10pIHtcclxuICAgIGxldCBjb250cm9sc0NvbmZpZzogYW55ID0ge31cclxuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGFGcm9tKSB7XHJcbiAgICAgIGlmIChyZXF1aXJlZFJ1bGUuc29tZShpdGVtID0+IGl0ZW0gPT0ga2V5KSkge1xyXG4gICAgICAgIGNvbnRyb2xzQ29uZmlnW2tleV0gPSBbZGF0YUZyb21ba2V5XSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnRyb2xzQ29uZmlnW2tleV0gPSBbZGF0YUZyb21ba2V5XV1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRyb2xzQ29uZmlnO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGh0dHBTdWNjZXMocmVzOiBhbnkpIHtcclxuICAgIHJldHVybiBbJzIwMCcsICcyMDEnXS5zb21lKHYgPT4gcmVzLnN0YXR1cyA9PSB2KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICrliKTmlq3ngrnmmK/lkKblnKjlnZDmoIfljLrln5/lhoVcclxuICAgKiBAcGFyYW0gcCDliKTlrprnmoTngrlcclxuICAgKiBAcGFyYW0gcG9pbnRzQXJyXHJcbiAgICovXHJcbiAgc3RhdGljIGp1ZGdlSW5SZWMocDogeyB4MTogYW55LCB5MTogYW55IH0sIHBvaW50c0FycjogeyB4MTogYW55LCB5MTogYW55IH1bXSkge1xyXG4gICAgbGV0IHB4ID0gTnVtYmVyKHAueDEpLCBweSA9IE51bWJlcihwLnkxKSxcclxuICAgICAgZmxhZyA9IGZhbHNlLC8v56m/6LaK6L655qGGXHJcbiAgICAgIGluUmVjdCA9IGZhbHNlOy8v5piv5ZCm5Zyo5aSa6L655b2i55qE6L655oiW6ICF56uv54K55LiKXHJcbiAgICBsZXQgc3RhcnQgPSBwb2ludHNBcnJbMF07XHJcbiAgICBsZXQgZW5kID0gcG9pbnRzQXJyW3BvaW50c0Fyci5sZW5ndGggLSAxXTtcclxuICAgIC8v5aaC5p6c5pWw57uE6aaW5bC+5rKh5pyJ55u46L+eLOaJi+WKqOa3u+WKoFxyXG4gICAgcG9pbnRzQXJyID0gc3RhcnQueDEgIT0gZW5kLngxIHx8IHN0YXJ0LnkxICE9IGVuZC55MSA/IHBvaW50c0Fyci5jb25jYXQoc3RhcnQpIDogcG9pbnRzQXJyO1xyXG4gICAgLy/lsITnur/pgInlj5ZZ5Z2Q5qCH5LiN5Y+YLHjmraPmlrnlkJFcclxuICAgIHBvaW50c0Fyci5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAoaW5kZXggPT0gcG9pbnRzQXJyLmxlbmd0aCAtIDFcclxuICAgICAgICB8fCBpblJlY3QvL+WcqOWkmui+ueW9oueahOi+ueaIluiAheerr+eCueS4iuinhuS4uuWcqOWMuuWfn+WGhVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBsZXQgZW5kUG9pbnQgPSBwb2ludHNBcnJbaW5kZXggKyAxXVxyXG4gICAgICBjb25zdCBzdGFydFggPSBOdW1iZXIoaXRlbS54MSksIHN0YXJ0WSA9IE51bWJlcihpdGVtLnkxKSxcclxuICAgICAgICBlbmRYID0gTnVtYmVyKGVuZFBvaW50LngxKSwgZW5kWSA9IE51bWJlcihlbmRQb2ludC55MSk7XHJcbiAgICAgIC8v5Yik5pat54K55piv5ZCm5Zyo56uv54K55LiKXHJcbiAgICAgIGlmICgocHggPT0gc3RhcnRYICYmIHB5ID09IHN0YXJ0WSlcclxuICAgICAgICB8fCAocHggPT0gZW5kWCAmJiBweCA9PSBlbmRZKSkge1xyXG4gICAgICAgIGluUmVjdCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL+WIpOaWreWwhOe6v+mHjeWQiOW5tuS4lOeCueWcqOi+ueS4ilxyXG4gICAgICBpZiAoKHN0YXJ0WSA9PSBlbmRZICYmIGVuZFkgPT0gcHkpXHJcbiAgICAgICAgJiYgKChweCA+IGVuZFggJiYgcHggPCBzdGFydFhcclxuICAgICAgICAgIHx8IChweCA8IGVuZFggJiYgcHggPiBzdGFydFgpKSkpIHtcclxuICAgICAgICBpblJlY3QgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKChzdGFydFkgPCBweSAmJiBlbmRZID49IHB5KVxyXG4gICAgICAgIHx8IChzdGFydFkgPj0gcHkgJiYgZW5kWSA8IHB5KSkge1xyXG5cclxuICAgICAgICAvL+axguWwhOe6v+S4jue6v+auteS6pOeCueeahHjlnZDmoIcseeWdkOagh+i/mOaYr3B5XHJcbiAgICAgICAgbGV0IHggPSBzdGFydFggKyAocHkgLSBzdGFydFkpICogKGVuZFggLSBzdGFydFgpIC8gKGVuZFkgLSBzdGFydFkpO1xyXG4gICAgICAgIC8v54K55Zyo6L655LiKXHJcbiAgICAgICAgaWYgKHggPT0gcHgpIHtcclxuICAgICAgICAgIGluUmVjdCA9IHRydWVcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy945aSn5LqOcHjmnaXkv53or4HlsITnur/mnJ3lj7NcclxuICAgICAgICBpZiAoeCA+IHB4KSB7XHJcbiAgICAgICAgICBmbGFnID0gIWZsYWdcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICByZXR1cm4gaW5SZWN0IHx8IGZsYWc7XHJcblxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRpZmZJbnB1dChjaG5nOiBTaW1wbGVDaGFuZ2UsIGFjdGlvbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgaWYgKGNobmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBjdXIgPSBKU09OLnN0cmluZ2lmeShjaG5nLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICBsZXQgcHJldiA9IEpTT04uc3RyaW5naWZ5KGNobmcucHJldmlvdXNWYWx1ZSk7XHJcbiAgICBpZiAoY3VyICE9PSBwcmV2KSB7XHJcbiAgICAgIGFjdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRpZmZJbnB1dHMoY2huZzogU2ltcGxlQ2hhbmdlW10sIGFjdGlvbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgaWYgKGNobmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgaWYgKGNobmcubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2huZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgaXRlbSA9IGNobmdbaV07XHJcbiAgICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xyXG4gICAgICBsZXQgY3VyID0gSlNPTi5zdHJpbmdpZnkoaXRlbS5jdXJyZW50VmFsdWUpO1xyXG4gICAgICBsZXQgcHJldiA9IEpTT04uc3RyaW5naWZ5KGl0ZW0ucHJldmlvdXNWYWx1ZSk7XHJcbiAgICAgIGlmIChjdXIgIT09IHByZXYpIHtcclxuICAgICAgICBhY3Rpb24oKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRhdGFVUkx0b0Jsb2IoZGF0YXVybDogYW55KSB7XHJcbiAgICB2YXIgYXJyID0gZGF0YXVybC5zcGxpdCgnLCcpLCBtaW1lID0gYXJyWzBdLm1hdGNoKC86KC4qPyk7LylbMV0sXHJcbiAgICAgIGJzdHIgPSBhdG9iKGFyclsxXSksIG4gPSBic3RyLmxlbmd0aCwgdThhcnIgPSBuZXcgVWludDhBcnJheShuKTtcclxuICAgIHdoaWxlIChuLS0pIHtcclxuICAgICAgdThhcnJbbl0gPSBic3RyLmNoYXJDb2RlQXQobik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IEJsb2IoW3U4YXJyXSwge3R5cGU6IG1pbWV9KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkYXRhVVJMdG9GaWxlKGRhdGF1cmw6IGFueSwgZmlsZW5hbWU/OiBzdHJpbmcpIHtcclxuICAgIHZhciBhcnIgPSBkYXRhdXJsLnNwbGl0KCcsJyksIG1pbWUgPSBhcnJbMF0ubWF0Y2goLzooLio/KTsvKVsxXSxcclxuICAgICAgYnN0ciA9IGF0b2IoYXJyWzFdKSwgbiA9IGJzdHIubGVuZ3RoLCB1OGFyciA9IG5ldyBVaW50OEFycmF5KG4pO1xyXG4gICAgd2hpbGUgKG4tLSkge1xyXG4gICAgICB1OGFycltuXSA9IGJzdHIuY2hhckNvZGVBdChuKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgRmlsZShbdThhcnJdLCAoZmlsZW5hbWUgfHwgVG9vbHNVdGlsLmdldFJhbmRvbUZpbGVOYW1lKCkpLCB7dHlwZTogbWltZX0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldFllc3RlcmRheShkYXk6IERhdGUpOiBEYXRlIHtcclxuXHJcbiAgICBsZXQgdGltZSA9IGRheS5nZXRUaW1lKCkgLSAxMDAwICogNjAgKiA2MCAqIDI0O1xyXG4gICAgZGF5ID0gbmV3IERhdGUodGltZSk7XHJcblxyXG4gICAgcmV0dXJuIGRheTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRUb21vcnJvd2RheShkYXk6IERhdGUpOiBEYXRlIHtcclxuICAgIGxldCB0aW1lID0gZGF5LmdldFRpbWUoKSArIDEwMDAgKiA2MCAqIDYwICogMjQ7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHRpbWUpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldE5leHRNb250aChkYXk6IERhdGUpIHtcclxuICAgIGxldCBkcyA9IG5ldyBEYXRlKGRheSkuc2V0TW9udGgoZGF5LmdldE1vbnRoKCkgKyAxKTtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkcyk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0VmlkZW9Db3Zlcih1cmw6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIFRvb2xzVXRpbC5nZXRPc3NVcmwodXJsKSArIFwiP3gtb3NzLXByb2Nlc3M9dmlkZW8vc25hcHNob3QsdF8xMDAwMCxtX2Zhc3RcIjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmaXN0RGF5T2ZNb250aChkYXk6IERhdGUpIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShuZXcgRGF0ZShkYXkpLnNldERhdGUoMSkpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGxhc3REYXlPZk1vbnRoKGRheTogRGF0ZSkge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKFRvb2xzVXRpbC5nZXROZXh0TW9udGgoZGF5KS5zZXREYXRlKDApKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRSYW5kb21GaWxlTmFtZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGNvbnN0IGV4cGVjdCA9IDE2O1xyXG4gICAgbGV0IHN0ciA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKTtcclxuICAgIHdoaWxlIChzdHIubGVuZ3RoIDwgZXhwZWN0KSB7XHJcbiAgICAgIHN0ciArPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyLnN1YnN0cmluZygwLCBleHBlY3QpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldEZpbGVFeHQgPSBmdW5jdGlvbiAoZmlsZU5hbWU6IHN0cmluZykge1xyXG4gICAgdmFyIGluZGV4ID0gZmlsZU5hbWUubGFzdEluZGV4T2YoXCIuXCIpO1xyXG4gICAgdmFyIHN1ZmZpeCA9IGZpbGVOYW1lLnN1YnN0cihpbmRleCArIDEpO1xyXG4gICAgcmV0dXJuIHN1ZmZpeDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRIdHRwT3B0aW9ucygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtpc0NvbW1vbkh0dHBIZWFkZXI6IHRydWV9XHJcbiAgfVxyXG5cclxuXHJcbiAgc3RhdGljIHJlc2V0Rm9ybVZhbHVlKG9wdDogQXRyRm9ybU9wdCwganNvbjoganNvbik6IEF0ckZvcm1PcHQge1xyXG4gICAgZm9yIChsZXQgaXRlbSBvZiBvcHQuaXRlbXMpIHtcclxuICAgICAgaXRlbS52YWx1ZSA9IFwiXCI7XHJcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGpzb24pKSB7XHJcbiAgICAgICAgaWYgKGpzb24uaGFzT3duUHJvcGVydHkoa2V5KSAmJiBqc29uW2tleV0gIT0gbnVsbCAmJiBqc29uW2tleV0gIT0gdW5kZWZpbmVkICYmIGtleSA9PSBpdGVtLmtleSkge1xyXG4gICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSAnZGF0ZScpXHJcbiAgICAgICAgICAgIGl0ZW0udmFsdWUgPSBuZXcgRGF0ZShqc29uW2tleV0pO1xyXG4gICAgICAgICAgZWxzZSBpZiAoaXRlbS50eXBlID09ICdkYXRlVGltZScpIHtcclxuICAgICAgICAgICAgaXRlbS52YWx1ZSA9IG5ldyBEYXRlKGpzb25ba2V5XSk7XHJcbiAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgaXRlbS52YWx1ZSA9IGpzb25ba2V5XVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9wdDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRGb3JtYXREYXRlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgbGV0IG1vbnRoOiBzdHJpbmcgfCBudW1iZXIgPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xyXG4gICAgbGV0IHN0ckRhdGU6IHN0cmluZyB8IG51bWJlciA9IGRhdGUuZ2V0RGF0ZSgpO1xyXG5cclxuICAgIGlmIChtb250aCA8PSA5KSB7XHJcbiAgICAgIG1vbnRoID0gXCIwXCIgKyBtb250aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RyRGF0ZSA8PSA5KSB7XHJcbiAgICAgIHN0ckRhdGUgPSBcIjBcIiArIHN0ckRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKSArIFwiLVwiICsgbW9udGggKyBcIi1cIiArIHN0ckRhdGVcclxuICAgIC8vICsgXCIgXCJcclxuICAgIC8vICsgZGF0ZS5nZXRIb3VycygpICsgXCI6XCIgKyBkYXRlLmdldE1pbnV0ZXMoKSArIFwiOlwiICsgZGF0ZS5nZXRTZWNvbmRzKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0Rm9ybWF0RGF0ZUZ1bGwoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgbW9udGg6IHN0cmluZyB8IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICBsZXQgc3RyRGF0ZTogc3RyaW5nIHwgbnVtYmVyID0gZGF0ZS5nZXREYXRlKCk7XHJcblxyXG4gICAgaWYgKG1vbnRoIDw9IDkpIHtcclxuICAgICAgbW9udGggPSBcIjBcIiArIG1vbnRoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdHJEYXRlIDw9IDkpIHtcclxuICAgICAgc3RyRGF0ZSA9IFwiMFwiICsgc3RyRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpICsgXCItXCIgKyBtb250aCArIFwiLVwiICsgc3RyRGF0ZSArIFwiIFwiICsgKGRhdGUuZ2V0SG91cnMoKSA8IDEwID8gJzAnICsgZGF0ZS5nZXRIb3VycygpIDogZGF0ZS5nZXRIb3VycygpKSArIFwiOlwiICsgKGRhdGUuZ2V0TWludXRlcygpIDwgMTAgPyAnMCcgKyBkYXRlLmdldE1pbnV0ZXMoKSA6IGRhdGUuZ2V0TWludXRlcygpKSArIFwiOlwiICsgKGRhdGUuZ2V0U2Vjb25kcygpIDwgMTAgPyAnMCcgKyBkYXRlLmdldFNlY29uZHMoKSA6IGRhdGUuZ2V0U2Vjb25kcygpKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRGb3JtYXREYXRlV2l0aG91dFMoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgbW9udGg6IHN0cmluZyB8IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICBsZXQgc3RyRGF0ZTogc3RyaW5nIHwgbnVtYmVyID0gZGF0ZS5nZXREYXRlKCk7XHJcbiAgICBsZXQgaG91cnM6IHN0cmluZyB8IG51bWJlciA9IGRhdGUuZ2V0SG91cnMoKTtcclxuICAgIGxldCBzZWNvbmRzOiBzdHJpbmcgfCBudW1iZXIgPSBkYXRlLmdldE1pbnV0ZXMoKTtcclxuICAgIGlmIChtb250aCA8PSA5KSB7XHJcbiAgICAgIG1vbnRoID0gXCIwXCIgKyBtb250aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RyRGF0ZSA8PSA5KSB7XHJcbiAgICAgIHN0ckRhdGUgPSBcIjBcIiArIHN0ckRhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAoaG91cnMgPD0gOSkge1xyXG4gICAgICBob3VycyA9IFwiMFwiICsgaG91cnM7XHJcbiAgICB9XHJcbiAgICBpZiAoc2Vjb25kcyA8PSA5KSB7XHJcbiAgICAgIHNlY29uZHMgPSBcIjBcIiArIHNlY29uZHM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpICsgXCItXCIgKyBtb250aCArIFwiLVwiICsgc3RyRGF0ZSArIFwiIFwiICsgaG91cnMgKyBcIjpcIiArIHNlY29uZHM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0Rm9ybWF0RGF0ZUhvdXIoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgbW9udGg6IHN0cmluZyB8IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICBsZXQgc3RyRGF0ZTogc3RyaW5nIHwgbnVtYmVyID0gZGF0ZS5nZXREYXRlKCk7XHJcbiAgICBsZXQgaG91cnM6IHN0cmluZyB8IG51bWJlciA9IGRhdGUuZ2V0SG91cnMoKTtcclxuICAgIGxldCBzZWNvbmRzOiBzdHJpbmcgfCBudW1iZXIgPSBkYXRlLmdldE1pbnV0ZXMoKTtcclxuICAgIGlmIChtb250aCA8PSA5KSB7XHJcbiAgICAgIG1vbnRoID0gXCIwXCIgKyBtb250aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RyRGF0ZSA8PSA5KSB7XHJcbiAgICAgIHN0ckRhdGUgPSBcIjBcIiArIHN0ckRhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAoaG91cnMgPD0gOSkge1xyXG4gICAgICBob3VycyA9IFwiMFwiICsgaG91cnM7XHJcbiAgICB9XHJcbiAgICBpZiAoc2Vjb25kcyA8PSA5KSB7XHJcbiAgICAgIHNlY29uZHMgPSBcIjBcIiArIHNlY29uZHM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpICsgXCJcIiArIG1vbnRoICsgc3RyRGF0ZSArIGhvdXJzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldE9zc1VybCh1cmw6IHN0cmluZywgbmVlZFRpbWUgPSBmYWxzZSkge1xyXG4gICAgaWYgKCF1cmwpIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBpZiAobmVlZFRpbWUpIHtcclxuICAgICAgLy8gdXJsID0gdXJsICsgXCI/dj1cIiArIFRvb2xzVXRpbC5nZXRGb3JtYXREYXRlSG91cihuZXcgRGF0ZSgpKTtcclxuICAgICAgdXJsID0gdXJsICsgXCI/dj1cIiArIG5ldyBEYXRlKCkuZ2V0VGltZSgpXHJcbiAgICB9XHJcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XHJcbiAgICAgIHJldHVybiB1cmxcclxuICAgIH1cclxuICAgIGxldCByZXN1bHQgPSBhdHJfc3RhdGljX2RhdGFzLk9TU19VUkwgKyB1cmxcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0U3RhdGljT3NzVXJsKHVybDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXVybCkge1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIGlmICh1cmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcclxuICAgICAgcmV0dXJuIHVybFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF0cl9zdGF0aWNfZGF0YXMuU1RBVElDX09TU19VUkwgKyB1cmw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVtb3ZlSHRtbCh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC88W148Pl0rPi9nLCAnJykucmVwbGFjZSgvJm5ic3A7L2lnLCAnJylcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtdWwoLi4ubnVtYmVyczogYW55KSB7XHJcbiAgICBpZiAobnVtYmVycy5sZW5ndGggPCAyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBtID0gdGhpcy5nZXREaWdpdChudW1iZXJzKTtcclxuICAgIGxldCByZXN1bHQgPSAxO1xyXG4gICAgbnVtYmVycy5mb3JFYWNoKFxyXG4gICAgICAobnVtOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgcyA9IG51bS50b1N0cmluZygpO1xyXG4gICAgICAgIHJlc3VsdCAqPSBOdW1iZXIocy5yZXBsYWNlKFwiLlwiLCBcIlwiKSk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICByZXR1cm4gcmVzdWx0IC8gTWF0aC5wb3coMTAsIG0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldERpZ2l0KC4uLm51bWJlcnM6IGFueVtdKSB7XHJcbiAgICBsZXQgbSA9IDA7XHJcbiAgICBudW1iZXJzLmZvckVhY2goXHJcbiAgICAgIG51bSA9PiB7XHJcbiAgICAgICAgbGV0IHMgPSBudW0udG9TdHJpbmcoKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgbSArPSBzLnNwbGl0KFwiLlwiKVsxXS5sZW5ndGhcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIG07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZG93bmxvYWRJbWcoZGF0YTogYW55LCBmaWxlTmFtZT86IHN0cmluZywgZW5kcG9pbnQ/OiBzdHJpbmcpIHtcclxuICAgIC8vIC8vIOS4i+i9veexu+WeiyB4bHNcclxuICAgIC8vIGNvbnN0IGNvbnRlbnRUeXBlID0gJ2ltYWdlL2pwZWcnO1xyXG4gICAgLy8gLy8gY29uc3QgY29udGVudFR5cGUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnO1xyXG4gICAgLy8gLy8g5LiL6L2957G75Z6L77yaY3N2XHJcbiAgICAvLyBjb25zdCBkZWJ1ZyA9IHtoZWxsbzogXCJ3b3JsZFwifTtcclxuICAgIC8vIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbXSx7dHlwZSA6ICdpbWFnZS9qcGVnJ30pO1xyXG4gICAgLy8gY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAvL1xyXG4gICAgLy8gLy8g5omT5byA5paw56qX5Y+j5pa55byP6L+b6KGM5LiL6L29XHJcbiAgICAvLyAvLyB3aW5kb3cub3Blbih1cmwpO1xyXG4gICAgLy9cclxuICAgIC8vIC8vIOS7peWKqOaAgeWIm+W7umHmoIfnrb7ov5vooYzkuIvovb1cclxuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBhLmhyZWYgPSBkYXRhO1xyXG4gICAgLy8gYS5kb3dubG9hZCA9IGZpbGVOYW1lO1xyXG4gICAgYS5kb3dubG9hZCA9IGZpbGVOYW1lID8gZmlsZU5hbWUgOiBcIlwiICsgZW5kcG9pbnQ7XHJcbiAgICBhLmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZG93bmxvYWRYbHModXJsOiBzdHJpbmcsIHBhcmFtcz86IGFueSwpIHtcclxuICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgdXJsICs9IFwiP1wiO1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XHJcbiAgICAgICAgaWYgKHBhcmFtc1trZXldKSB7XHJcbiAgICAgICAgICB1cmwgKz0ga2V5ICsgXCI9XCIgKyBwYXJhbXNba2V5XSArIFwiJiZcIlxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gd2luZG93Lm9wZW4odXJsKTtcclxuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICAvLyAvLyBhLmRvd25sb2FkID0gZmlsZU5hbWU7XHJcbiAgICAvLyBhLmRvd25sb2FkID0gXCIzMzIxLnhsc1wiO1xyXG4gICAgYS5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldEltZyh1cmw6IHN0cmluZywgcGFyYW06IGFueSA9IHtcclxuICAgIGltZ1c6IDAsIGltZ0g6IDAsXHJcbiAgICBuZWVkVGltZTogZmFsc2UsIGlzRnVsbFVybDogZmFsc2VcclxuICB9KSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBsZXQgZGF0YVVybDogYW55ID0gU2Vzc2lvblN0b3JhZ2VVdGlsLmdldEltZyh1cmwpXHJcbiAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICBpbWcuc2V0QXR0cmlidXRlKCdjcm9zc09yaWdpbicsICdhbm9ueW1vdXMnKVxyXG4gICAgICBpZiAoIWRhdGFVcmwpIHtcclxuICAgICAgICBpbWcuc3JjID0gcGFyYW0uaXNGdWxsVXJsID8gdXJsIDogVG9vbHNVdGlsLmdldE9zc1VybCh1cmwsIHBhcmFtLm5lZWRUaW1lKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpbmRleCA9IGRhdGFVcmwuaW5kZXhPZihcIn1cIikgKyAxXHJcbiAgICAgICAgaW1nLnNyYyA9IGRhdGFVcmwuc2xpY2UoMCwgNTApICsgZGF0YVVybC5zbGljZShpbmRleCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgbGV0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgIGxldCBjb250ZXh0MjogYW55ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjLndpZHRoID0gcGFyYW0uaW1nVyB8fCBpbWcud2lkdGg7XHJcbiAgICAgICAgYy5oZWlnaHQgPSBwYXJhbS5pbWdIIHx8IGltZy5oZWlnaHRcclxuICAgICAgICBjb250ZXh0Mi5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBjLndpZHRoLCBjLmhlaWdodClcclxuICAgICAgICBsZXQgZGF0YVVybCA9IGMudG9EYXRhVVJMKClcclxuICAgICAgICBsZXQgc3RyID0gYy53aWR0aCArIFwiLFwiICsgYy5oZWlnaHQgKyBcIn1cIlxyXG4gICAgICAgIGRhdGFVcmwgPSBkYXRhVXJsLnNsaWNlKDAsIDUwKSArIHN0ciArIGRhdGFVcmwuc2xpY2UoNTApXHJcbi8v5LiN5L+d5a2YXHJcbi8vICAgICAgICAgU2Vzc2lvblN0b3JhZ2VVdGlsLnNldEltZyh1cmwsIGRhdGFVcmwpXHJcblxyXG4gICAgICAgIHJlc29sdmUoaW1nKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIHN0YXRpYyBwaXhlbFRvTnVtKHdpZHRoOiBhbnkpIHtcclxuICAgIGNvbnN0IHJlID0gL3B4L2dpO1xyXG4gICAgbGV0IHdpZHRoU3RyID0gd2lkdGgucmVwbGFjZShyZSwgXCJcIik7XHJcbiAgICByZXR1cm4gTnVtYmVyKHdpZHRoU3RyKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBhbGxFcXVhbCA9ICguLi5hcnJheTogYW55W10pID0+IGFycmF5LmV2ZXJ5KGl0ZW0gPT4gaXRlbSA9PT0gYXJyYXlbMF0pO1xyXG5cclxuICAvKipcclxuICAgKiBhcnJheeaJgOacieWPguaVsOa7oei2s2Zu5Ye95pWw6L+U5ZuedHJ1ZVxyXG4gICAqIGFsbCh4ID0+IHggPiAxLDEsMiwzKTsgLy8gdHJ1ZVxyXG4gICAqIEBwYXJhbSBjYWxsYmFja1xyXG4gICAqIEBwYXJhbSBhcnJheVxyXG4gICAqL1xyXG4gIHN0YXRpYyBzYXRpc2ZpZWRGbiA9IChjYWxsYmFjazogKC4uLmFyZ3M6IGFueVtdKSA9PiBib29sZWFuLCAuLi5hcnJheTogYW55W10pID0+IGFycmF5LmV2ZXJ5KGNhbGxiYWNrKTtcclxuXHJcbiAgLy/lhajpg6jkuI3nqbrkuLp0cnVlXHJcbiAgc3RhdGljIG5vdEVtcHR5KC4uLmFycjogYW55W10pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBhcnIuZXZlcnkoaXRlbSA9PiAhIWl0ZW0pXHJcbiAgfVxyXG5cclxuICAvL+WMheWQq+epuuS4unRydWVcclxuICBzdGF0aWMgaGFzRW1wdHkoLi4uYXJyOiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGFyci5zb21lKGl0ZW0gPT4gIWl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFsbEVtcHR5KC4uLmFycjogYW55W10pIHtcclxuICAgIHJldHVybiBhcnIuZXZlcnkoaXRlbSA9PiAhaXRlbSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNFbXB0eShvYmo6IGFueSkge1xyXG4gICAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAob2JqID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIG9iaiA9PSAnYm9vbGVhbicpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICBpZiAob2JqID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgaWYgKG9iai50cmltKCkgPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIHN0YXRpYyBlbmNvZGVWYWx1ZShwYXJhbXM6IGFueSkge1xyXG4gICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKGtleSA9PiBwYXJhbXNba2V5XSA9IGVuY29kZVVSSUNvbXBvbmVudChwYXJhbXNba2V5XSkpO1xyXG4gICAgcmV0dXJuIHBhcmFtcztcclxuICB9XHJcblxyXG4gIHN0YXRpYyB3aW5kb3dIZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB3aW5kb3dXaWR0aCgpIHtcclxuXHJcbiAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG1vZGFsZVN0eWxlKCkge1xyXG4gICAgcmV0dXJuIHsnbWF4SGVpZ2h0JzogVG9vbHNVdGlsLndpbmRvd0hlaWdodCgpIC0gMjAwICsgJ3B4JywgJ292ZXJmbG93LXknOiAnYXV0byd9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldExlbmd0aCggcG9pbnRBOiB7IHgxOiBhbnksIHkxOiBhbnkgfSxwb2ludEI6IHsgeDE6IGFueSwgeTE6IGFueSB9KXtcclxuICAgIHZhciBsZW5ndGhBQiA9IE1hdGguc3FydChNYXRoLnBvdyhwb2ludEEueDEgLSBwb2ludEIueDEsIDIpICtcclxuICAgICAgTWF0aC5wb3cocG9pbnRBLnkxIC0gcG9pbnRCLnkxLCAyKSlcclxuICAgIHJldHVybiBsZW5ndGhBQjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRSb3RhdGVOdW0ocG9pbnRCOiB7IHgxOiBhbnksIHkxOiBhbnkgfSwgcG9pbnRDOiB7IHgxOiBhbnksIHkxOiBhbnkgfSwgcG9pbnRBOiB7IHgxOiBhbnksIHkxOiBhbnkgfSkge1xyXG4gICAgLy9BQkPkuK3lv4Pngrks6LW35aeL54K5LOe7iOeCuVxyXG4gICAgbGV0IEFCOiBhbnkgPSB7fTtcclxuICAgIGxldCBBQzogYW55ID0ge307XHJcbiAgICBBQi54MSA9IHBvaW50Qi54MSAtIHBvaW50QS54MVxyXG4gICAgQUIueTEgPSBwb2ludEIueTEgLSBwb2ludEEueTFcclxuICAgIEFDLngxID0gcG9pbnRDLngxIC0gcG9pbnRBLngxXHJcbiAgICBBQy55MSA9IHBvaW50Qy55MSAtIHBvaW50QS55MVxyXG4gICAgdmFyIGRpcmVjdCA9IEFCLngxICogQUMueTEgLSBBQi55MSAqIEFDLnkxXHJcbiAgICB2YXIgbGVuZ3RoQUIgPXRoaXMuZ2V0TGVuZ3RoKHBvaW50Qixwb2ludEEpXHJcbiAgICB2YXIgbGVuZ3RoQUMgPSB0aGlzLmdldExlbmd0aChwb2ludEMscG9pbnRBKVxyXG4gICAgdmFyIGxlbmd0aEJDID0gdGhpcy5nZXRMZW5ndGgocG9pbnRCLHBvaW50QylcclxuICAgIHZhciBjb3NBID0gKE1hdGgucG93KGxlbmd0aEFCLCAyKSArIE1hdGgucG93KGxlbmd0aEFDLCAyKSAtXHJcbiAgICAgIE1hdGgucG93KGxlbmd0aEJDLCAyKSkgLyAoMiAqIGxlbmd0aEFCICogbGVuZ3RoQUMpXHJcbiAgICB2YXIgYW5nbGVBID0gTWF0aC5yb3VuZChNYXRoLmFjb3MoY29zQSkgKiAxODAgLyBNYXRoLlBJKVxyXG4gICAgaWYgKGRpcmVjdCA8IDApIHtcclxuICAgICAgcmV0dXJuIC1hbmdsZUFcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBhbmdsZUFcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICAvL+e7lWNlbnRlcueCueaXi+i9rHJvdGF0ZeinkuW6plxyXG4gIHN0YXRpYyBnZXRSb3RhdGVQb2ludChwOiB7IHgxOiBhbnksIHkxOiBhbnkgfSwgY2VudGVyOiB7IHgxOiBhbnksIHkxOiBhbnkgfSwgcm90YXRlOiBhbnkpIHtcclxuICAgIGxldCBzdGFydFggPSBwLngxXHJcbiAgICBsZXQgc3RhcnRZID0gcC55MVxyXG4gICAgbGV0IGEgPSBjZW50ZXIueDFcclxuICAgIGxldCBiID0gY2VudGVyLnkxXHJcbiAgICBsZXQgeDEgPSBhIC0gTWF0aC5jb3Mocm90YXRlICogTWF0aC5QSSAvIDE4MCkgKiAoYSAtIHN0YXJ0WCkgKyBNYXRoLnNpbihyb3RhdGUgKiBNYXRoLlBJIC8gMTgwKSAqIChiIC0gc3RhcnRZKVxyXG4gICAgbGV0IHkxID0gYiAtIE1hdGguY29zKHJvdGF0ZSAqIE1hdGguUEkgLyAxODApICogKGIgLSBzdGFydFkpIC0gTWF0aC5zaW4ocm90YXRlICogTWF0aC5QSSAvIDE4MCkgKiAoYSAtIHN0YXJ0WClcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHgxOiB4MSxcclxuICAgICAgeTE6IHkxXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
484
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9vbHNVdGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvY29yZS91dGlscy9Ub29sc1V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixnQkFBZ0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBSXRFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RCxNQUFNLE9BQU8sU0FBUztJQWtCcEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFXO1FBQ3pCLElBQUksR0FBRyxHQUFHLDRHQUE0RyxDQUFDO1FBQ3ZILE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFTO1FBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDN0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNsQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztT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QUM7QUFDWixDQUFDLENBQUE7QUFnTE0sMkJBQWlCLEdBQUc7SUFDekIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLEVBQUU7UUFDMUIsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2hEO0lBQ0QsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUE7QUFFTSxvQkFBVSxHQUFHLFVBQVUsUUFBZ0I7SUFDNUMsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4QyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUE7QUErT00sa0JBQVEsR0FBRyxDQUFDLEdBQUcsS0FBWSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRTlFOzs7OztHQUtHO0FBQ0kscUJBQVcsR0FBRyxDQUFDLFFBQXFDLEVBQUUsR0FBRyxLQUFZLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2pzb24sIEF0ckZvcm1PcHQsIGF0cl9zdGF0aWNfZGF0YXN9IGZyb20gJy4uL2Jhc2UvYXRyLWNvbW1vbic7XHJcbmltcG9ydCB7Zm9ybWF0RGF0ZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtIdHRwSGVhZGVyc30gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7U2ltcGxlQ2hhbmdlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtWYWxpZGF0b3JzfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHtTZXNzaW9uU3RvcmFnZVV0aWx9IGZyb20gJy4vc2Vzc2lvbnN0b3JhZ2UudXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgVG9vbHNVdGlsIHtcclxuICBzdGF0aWMgb3NzUHJlZml4OiBzdHJpbmcgPSAnJztcclxuICBzdGF0aWMgZ2V0T3JnQ29kZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIHZhciBvcmdDb2RlID0gJyc7XHJcbiAgICAvLyB2YXIgaHJlZnMgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgnPycpXHJcbiAgICAvLyBpZiAoaHJlZnMubGVuZ3RoID49IDIpIHtcclxuICAgIC8vICAgdmFyIHBhcmFtU3RyID0gaHJlZnNbMV07XHJcbiAgICAvLyAgIC8v5Y+C5pWw5a2X56ym5Liy6YeM5pyJ5rKh5bimID0/LyNcclxuICAgIC8vICAgb3JnQ29kZSA9IHBhcmFtU3RyLnNwbGl0KCc9JylbMF07XHJcbiAgICAvLyAgIG9yZ0NvZGUgPSBvcmdDb2RlLnNwbGl0KCc/JylbMF07XHJcbiAgICAvLyAgIG9yZ0NvZGUgPSBvcmdDb2RlLnNwbGl0KCcvJylbMF07XHJcbiAgICAvLyAgIG9yZ0NvZGUgPSBvcmdDb2RlLnNwbGl0KCcjJylbMF07XHJcbiAgICAvLyAgIG9yZ0NvZGUgPSBvcmdDb2RlLnNwbGl0KCcvJylbMF07XHJcbiAgICAvLyB9XHJcblxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzQmFzZTY0KHN0cmluZzogYW55KSB7XHJcbiAgICBsZXQgcmVnID0gL15cXHMqZGF0YTooW2Etel0rXFwvW2EtejAtOS0rLl0rKDtbYS16LV0rPVthLXowLTktXSspPyk/KDtiYXNlNjQpPywoW2EtejAtOSEkJicsKCkqKzs9XFwtLl9+OkBcXC8/JVxcc10qPylcXHMqJC9pO1xyXG4gICAgcmV0dXJuIHJlZy50ZXN0KHN0cmluZylcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkYXRhVVJJdG9CbG9iKGNvZGU6IGFueSkge1xyXG4gICAgY29uc3QgcGFydHMgPSBjb2RlLnNwbGl0KCc7YmFzZTY0LCcpO1xyXG4gICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJ0c1swXS5zcGxpdCgnOicpWzFdO1xyXG4gICAgY29uc3QgcmF3ID0gd2luZG93LmF0b2IocGFydHNbMV0pO1xyXG4gICAgY29uc3QgcmF3TGVuZ3RoID0gcmF3Lmxlbmd0aDtcclxuICAgIGNvbnN0IHVJbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShyYXdMZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdMZW5ndGg7ICsraSkge1xyXG4gICAgICB1SW50OEFycmF5W2ldID0gcmF3LmNoYXJDb2RlQXQoaSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IEJsb2IoW3VJbnQ4QXJyYXldLCB7dHlwZTogY29udGVudFR5cGV9KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBpc051bGwodmFsOiBhbnkpIHtcclxuICAgIGlmICh2YWwgfHwgWydib29sZWFuJywgJ3N0cmluZycsICdudW1iZXInXS5zb21lKHYgPT4gdHlwZW9mIHZhbCA9PSB2KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0Q29udHJvbHNDb25maWcoZGF0YUZyb206IGFueSwgcmVxdWlyZWRSdWxlOiBzdHJpbmdbXSkge1xyXG4gICAgbGV0IGNvbnRyb2xzQ29uZmlnOiBhbnkgPSB7fVxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YUZyb20pIHtcclxuICAgICAgaWYgKHJlcXVpcmVkUnVsZS5zb21lKGl0ZW0gPT4gaXRlbSA9PSBrZXkpKSB7XHJcbiAgICAgICAgY29udHJvbHNDb25maWdba2V5XSA9IFtkYXRhRnJvbVtrZXldLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29udHJvbHNDb25maWdba2V5XSA9IFtkYXRhRnJvbVtrZXldXVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udHJvbHNDb25maWc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaHR0cFN1Y2NlcyhyZXM6IGFueSkge1xyXG4gICAgcmV0dXJuIFsnMjAwJywgJzIwMScsICcyMDQnXS5zb21lKHYgPT4gcmVzLnN0YXR1cyA9PSB2KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICrliKTmlq3ngrnmmK/lkKblnKjlnZDmoIfljLrln5/lhoVcclxuICAgKiBAcGFyYW0gcCDliKTlrprnmoTngrlcclxuICAgKiBAcGFyYW0gcG9pbnRzQXJyXHJcbiAgICovXHJcbiAgc3RhdGljIGp1ZGdlSW5SZWMocDogeyB4MTogYW55LCB5MTogYW55IH0sIHBvaW50c0FycjogeyB4MTogYW55LCB5MTogYW55IH1bXSkge1xyXG4gICAgbGV0IHB4ID0gTnVtYmVyKHAueDEpLCBweSA9IE51bWJlcihwLnkxKSxcclxuICAgICAgZmxhZyA9IGZhbHNlLC8v56m/6LaK6L655qGGXHJcbiAgICAgIGluUmVjdCA9IGZhbHNlOy8v5piv5ZCm5Zyo5aSa6L655b2i55qE6L655oiW6ICF56uv54K55LiKXHJcbiAgICBsZXQgc3RhcnQgPSBwb2ludHNBcnJbMF07XHJcbiAgICBsZXQgZW5kID0gcG9pbnRzQXJyW3BvaW50c0Fyci5sZW5ndGggLSAxXTtcclxuICAgIC8v5aaC5p6c5pWw57uE6aaW5bC+5rKh5pyJ55u46L+eLOaJi+WKqOa3u+WKoFxyXG4gICAgcG9pbnRzQXJyID0gc3RhcnQueDEgIT0gZW5kLngxIHx8IHN0YXJ0LnkxICE9IGVuZC55MSA/IHBvaW50c0Fyci5jb25jYXQoc3RhcnQpIDogcG9pbnRzQXJyO1xyXG4gICAgLy/lsITnur/pgInlj5ZZ5Z2Q5qCH5LiN5Y+YLHjmraPmlrnlkJFcclxuICAgIHBvaW50c0Fyci5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAoaW5kZXggPT0gcG9pbnRzQXJyLmxlbmd0aCAtIDFcclxuICAgICAgICB8fCBpblJlY3QvL+WcqOWkmui+ueW9oueahOi+ueaIluiAheerr+eCueS4iuinhuS4uuWcqOWMuuWfn+WGhVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBsZXQgZW5kUG9pbnQgPSBwb2ludHNBcnJbaW5kZXggKyAxXVxyXG4gICAgICBjb25zdCBzdGFydFggPSBOdW1iZXIoaXRlbS54MSksIHN0YXJ0WSA9IE51bWJlcihpdGVtLnkxKSxcclxuICAgICAgICBlbmRYID0gTnVtYmVyKGVuZFBvaW50LngxKSwgZW5kWSA9IE51bWJlcihlbmRQb2ludC55MSk7XHJcbiAgICAgIC8v5Yik5pat54K55piv5ZCm5Zyo56uv54K55LiKXHJcbiAgICAgIGlmICgocHggPT0gc3RhcnRYICYmIHB5ID09IHN0YXJ0WSlcclxuICAgICAgICB8fCAocHggPT0gZW5kWCAmJiBweCA9PSBlbmRZKSkge1xyXG4gICAgICAgIGluUmVjdCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL+WIpOaWreWwhOe6v+mHjeWQiOW5tuS4lOeCueWcqOi+ueS4ilxyXG4gICAgICBpZiAoKHN0YXJ0WSA9PSBlbmRZICYmIGVuZFkgPT0gcHkpXHJcbiAgICAgICAgJiYgKChweCA+IGVuZFggJiYgcHggPCBzdGFydFhcclxuICAgICAgICAgIHx8IChweCA8IGVuZFggJiYgcHggPiBzdGFydFgpKSkpIHtcclxuICAgICAgICBpblJlY3QgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKChzdGFydFkgPCBweSAmJiBlbmRZID49IHB5KVxyXG4gICAgICAgIHx8IChzdGFydFkgPj0gcHkgJiYgZW5kWSA8IHB5KSkge1xyXG5cclxuICAgICAgICAvL+axguWwhOe6v+S4jue6v+auteS6pOeCueeahHjlnZDmoIcseeWdkOagh+i/mOaYr3B5XHJcbiAgICAgICAgbGV0IHggPSBzdGFydFggKyAocHkgLSBzdGFydFkpICogKGVuZFggLSBzdGFydFgpIC8gKGVuZFkgLSBzdGFydFkpO1xyXG4gICAgICAgIC8v54K55Zyo6L655LiKXHJcbiAgICAgICAgaWYgKHggPT0gcHgpIHtcclxuICAgICAgICAgIGluUmVjdCA9IHRydWVcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy945aSn5LqOcHjmnaXkv53or4HlsITnur/mnJ3lj7NcclxuICAgICAgICBpZiAoeCA+IHB4KSB7XHJcbiAgICAgICAgICBmbGFnID0gIWZsYWdcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICByZXR1cm4gaW5SZWN0IHx8IGZsYWc7XHJcblxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRpZmZJbnB1dChjaG5nOiBTaW1wbGVDaGFuZ2UsIGFjdGlvbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgaWYgKGNobmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBjdXIgPSBKU09OLnN0cmluZ2lmeShjaG5nLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICBsZXQgcHJldiA9IEpTT04uc3RyaW5naWZ5KGNobmcucHJldmlvdXNWYWx1ZSk7XHJcbiAgICBpZiAoY3VyICE9PSBwcmV2KSB7XHJcbiAgICAgIGFjdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRpZmZJbnB1dHMoY2huZzogU2ltcGxlQ2hhbmdlW10sIGFjdGlvbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgaWYgKGNobmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgaWYgKGNobmcubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2huZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgaXRlbSA9IGNobmdbaV07XHJcbiAgICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xyXG4gICAgICBsZXQgY3VyID0gSlNPTi5zdHJpbmdpZnkoaXRlbS5jdXJyZW50VmFsdWUpO1xyXG4gICAgICBsZXQgcHJldiA9IEpTT04uc3RyaW5naWZ5KGl0ZW0ucHJldmlvdXNWYWx1ZSk7XHJcbiAgICAgIGlmIChjdXIgIT09IHByZXYpIHtcclxuICAgICAgICBhY3Rpb24oKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRhdGFVUkx0b0Jsb2IoZGF0YXVybDogYW55KSB7XHJcbiAgICB2YXIgYXJyID0gZGF0YXVybC5zcGxpdCgnLCcpLCBtaW1lID0gYXJyWzBdLm1hdGNoKC86KC4qPyk7LylbMV0sXHJcbiAgICAgIGJzdHIgPSBhdG9iKGFyclsxXSksIG4gPSBic3RyLmxlbmd0aCwgdThhcnIgPSBuZXcgVWludDhBcnJheShuKTtcclxuICAgIHdoaWxlIChuLS0pIHtcclxuICAgICAgdThhcnJbbl0gPSBic3RyLmNoYXJDb2RlQXQobik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IEJsb2IoW3U4YXJyXSwge3R5cGU6IG1pbWV9KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkYXRhVVJMdG9GaWxlKGRhdGF1cmw6IGFueSwgZmlsZW5hbWU/OiBzdHJpbmcpIHtcclxuICAgIHZhciBhcnIgPSBkYXRhdXJsLnNwbGl0KCcsJyksIG1pbWUgPSBhcnJbMF0ubWF0Y2goLzooLio/KTsvKVsxXSxcclxuICAgICAgYnN0ciA9IGF0b2IoYXJyWzFdKSwgbiA9IGJzdHIubGVuZ3RoLCB1OGFyciA9IG5ldyBVaW50OEFycmF5KG4pO1xyXG4gICAgd2hpbGUgKG4tLSkge1xyXG4gICAgICB1OGFycltuXSA9IGJzdHIuY2hhckNvZGVBdChuKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgRmlsZShbdThhcnJdLCAoZmlsZW5hbWUgfHwgVG9vbHNVdGlsLmdldFJhbmRvbUZpbGVOYW1lKCkpLCB7dHlwZTogbWltZX0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldFllc3RlcmRheShkYXk6IERhdGUpOiBEYXRlIHtcclxuXHJcbiAgICBsZXQgdGltZSA9IGRheS5nZXRUaW1lKCkgLSAxMDAwICogNjAgKiA2MCAqIDI0O1xyXG4gICAgZGF5ID0gbmV3IERhdGUodGltZSk7XHJcblxyXG4gICAgcmV0dXJuIGRheTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRUb21vcnJvd2RheShkYXk6IERhdGUpOiBEYXRlIHtcclxuICAgIGxldCB0aW1lID0gZGF5LmdldFRpbWUoKSArIDEwMDAgKiA2MCAqIDYwICogMjQ7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHRpbWUpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldE5leHRNb250aChkYXk6IERhdGUpIHtcclxuICAgIGxldCBkcyA9IG5ldyBEYXRlKGRheSkuc2V0TW9udGgoZGF5LmdldE1vbnRoKCkgKyAxKTtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkcyk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0VmlkZW9Db3Zlcih1cmw6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIFRvb2xzVXRpbC5nZXRPc3NVcmwodXJsKSArIFwiP3gtb3NzLXByb2Nlc3M9dmlkZW8vc25hcHNob3QsdF8xMDAwMCxtX2Zhc3RcIjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmaXN0RGF5T2ZNb250aChkYXk6IERhdGUpIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShuZXcgRGF0ZShkYXkpLnNldERhdGUoMSkpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGxhc3REYXlPZk1vbnRoKGRheTogRGF0ZSkge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKFRvb2xzVXRpbC5nZXROZXh0TW9udGgoZGF5KS5zZXREYXRlKDApKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRSYW5kb21GaWxlTmFtZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGNvbnN0IGV4cGVjdCA9IDE2O1xyXG4gICAgbGV0IHN0ciA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKTtcclxuICAgIHdoaWxlIChzdHIubGVuZ3RoIDwgZXhwZWN0KSB7XHJcbiAgICAgIHN0ciArPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyLnN1YnN0cmluZygwLCBleHBlY3QpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldEZpbGVFeHQgPSBmdW5jdGlvbiAoZmlsZU5hbWU6IHN0cmluZykge1xyXG4gICAgdmFyIGluZGV4ID0gZmlsZU5hbWUubGFzdEluZGV4T2YoXCIuXCIpO1xyXG4gICAgdmFyIHN1ZmZpeCA9IGZpbGVOYW1lLnN1YnN0cihpbmRleCArIDEpO1xyXG4gICAgcmV0dXJuIHN1ZmZpeDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRIdHRwT3B0aW9ucygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtpc0NvbW1vbkh0dHBIZWFkZXI6IHRydWV9XHJcbiAgfVxyXG5cclxuXHJcbiAgc3RhdGljIHJlc2V0Rm9ybVZhbHVlKG9wdDogQXRyRm9ybU9wdCwganNvbjoganNvbik6IEF0ckZvcm1PcHQge1xyXG4gICAgZm9yIChsZXQgaXRlbSBvZiBvcHQuaXRlbXMpIHtcclxuICAgICAgaXRlbS52YWx1ZSA9IFwiXCI7XHJcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGpzb24pKSB7XHJcbiAgICAgICAgaWYgKGpzb24uaGFzT3duUHJvcGVydHkoa2V5KSAmJiBqc29uW2tleV0gIT0gbnVsbCAmJiBqc29uW2tleV0gIT0gdW5kZWZpbmVkICYmIGtleSA9PSBpdGVtLmtleSkge1xyXG4gICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSAnZGF0ZScpXHJcbiAgICAgICAgICAgIGl0ZW0udmFsdWUgPSBuZXcgRGF0ZShqc29uW2tleV0pO1xyXG4gICAgICAgICAgZWxzZSBpZiAoaXRlbS50eXBlID09ICdkYXRlVGltZScpIHtcclxuICAgICAgICAgICAgaXRlbS52YWx1ZSA9IG5ldyBEYXRlKGpzb25ba2V5XSk7XHJcbiAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgaXRlbS52YWx1ZSA9IGpzb25ba2V5XVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9wdDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRGb3JtYXREYXRlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgbGV0IG1vbnRoOiBzdHJpbmcgfCBudW1iZXIgPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xyXG4gICAgbGV0IHN0ckRhdGU6IHN0cmluZyB8IG51bWJlciA9IGRhdGUuZ2V0RGF0ZSgpO1xyXG5cclxuICAgIGlmIChtb250aCA8PSA5KSB7XHJcbiAgICAgIG1vbnRoID0gXCIwXCIgKyBtb250aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RyRGF0ZSA8PSA5KSB7XHJcbiAgICAgIHN0ckRhdGUgPSBcIjBcIiArIHN0ckRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKSArIFwiLVwiICsgbW9udGggKyBcIi1cIiArIHN0ckRhdGVcclxuICAgIC8vICsgXCIgXCJcclxuICAgIC8vICsgZGF0ZS5nZXRIb3VycygpICsgXCI6XCIgKyBkYXRlLmdldE1pbnV0ZXMoKSArIFwiOlwiICsgZGF0ZS5nZXRTZWNvbmRzKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0Rm9ybWF0RGF0ZUZ1bGwoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgbW9udGg6IHN0cmluZyB8IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICBsZXQgc3RyRGF0ZTogc3RyaW5nIHwgbnVtYmVyID0gZGF0ZS5nZXREYXRlKCk7XHJcblxyXG4gICAgaWYgKG1vbnRoIDw9IDkpIHtcclxuICAgICAgbW9udGggPSBcIjBcIiArIG1vbnRoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdHJEYXRlIDw9IDkpIHtcclxuICAgICAgc3RyRGF0ZSA9IFwiMFwiICsgc3RyRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpICsgXCItXCIgKyBtb250aCArIFwiLVwiICsgc3RyRGF0ZSArIFwiIFwiICsgKGRhdGUuZ2V0SG91cnMoKSA8IDEwID8gJzAnICsgZGF0ZS5nZXRIb3VycygpIDogZGF0ZS5nZXRIb3VycygpKSArIFwiOlwiICsgKGRhdGUuZ2V0TWludXRlcygpIDwgMTAgPyAnMCcgKyBkYXRlLmdldE1pbnV0ZXMoKSA6IGRhdGUuZ2V0TWludXRlcygpKSArIFwiOlwiICsgKGRhdGUuZ2V0U2Vjb25kcygpIDwgMTAgPyAnMCcgKyBkYXRlLmdldFNlY29uZHMoKSA6IGRhdGUuZ2V0U2Vjb25kcygpKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRGb3JtYXREYXRlV2l0aG91dFMoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgbW9udGg6IHN0cmluZyB8IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICBsZXQgc3RyRGF0ZTogc3RyaW5nIHwgbnVtYmVyID0gZGF0ZS5nZXREYXRlKCk7XHJcbiAgICBsZXQgaG91cnM6IHN0cmluZyB8IG51bWJlciA9IGRhdGUuZ2V0SG91cnMoKTtcclxuICAgIGxldCBzZWNvbmRzOiBzdHJpbmcgfCBudW1iZXIgPSBkYXRlLmdldE1pbnV0ZXMoKTtcclxuICAgIGlmIChtb250aCA8PSA5KSB7XHJcbiAgICAgIG1vbnRoID0gXCIwXCIgKyBtb250aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RyRGF0ZSA8PSA5KSB7XHJcbiAgICAgIHN0ckRhdGUgPSBcIjBcIiArIHN0ckRhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAoaG91cnMgPD0gOSkge1xyXG4gICAgICBob3VycyA9IFwiMFwiICsgaG91cnM7XHJcbiAgICB9XHJcbiAgICBpZiAoc2Vjb25kcyA8PSA5KSB7XHJcbiAgICAgIHNlY29uZHMgPSBcIjBcIiArIHNlY29uZHM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpICsgXCItXCIgKyBtb250aCArIFwiLVwiICsgc3RyRGF0ZSArIFwiIFwiICsgaG91cnMgKyBcIjpcIiArIHNlY29uZHM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0Rm9ybWF0RGF0ZUhvdXIoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgbW9udGg6IHN0cmluZyB8IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICBsZXQgc3RyRGF0ZTogc3RyaW5nIHwgbnVtYmVyID0gZGF0ZS5nZXREYXRlKCk7XHJcbiAgICBsZXQgaG91cnM6IHN0cmluZyB8IG51bWJlciA9IGRhdGUuZ2V0SG91cnMoKTtcclxuICAgIGxldCBzZWNvbmRzOiBzdHJpbmcgfCBudW1iZXIgPSBkYXRlLmdldE1pbnV0ZXMoKTtcclxuICAgIGlmIChtb250aCA8PSA5KSB7XHJcbiAgICAgIG1vbnRoID0gXCIwXCIgKyBtb250aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RyRGF0ZSA8PSA5KSB7XHJcbiAgICAgIHN0ckRhdGUgPSBcIjBcIiArIHN0ckRhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAoaG91cnMgPD0gOSkge1xyXG4gICAgICBob3VycyA9IFwiMFwiICsgaG91cnM7XHJcbiAgICB9XHJcbiAgICBpZiAoc2Vjb25kcyA8PSA5KSB7XHJcbiAgICAgIHNlY29uZHMgPSBcIjBcIiArIHNlY29uZHM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpICsgXCJcIiArIG1vbnRoICsgc3RyRGF0ZSArIGhvdXJzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldE9zc1VybCh1cmw6IHN0cmluZywgbmVlZFRpbWUgPSBmYWxzZSkge1xyXG4gICAgaWYgKCF1cmwpIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBpZiAobmVlZFRpbWUpIHtcclxuICAgICAgLy8gdXJsID0gdXJsICsgXCI/dj1cIiArIFRvb2xzVXRpbC5nZXRGb3JtYXREYXRlSG91cihuZXcgRGF0ZSgpKTtcclxuICAgICAgdXJsID0gdXJsICsgXCI/dj1cIiArIG5ldyBEYXRlKCkuZ2V0VGltZSgpXHJcbiAgICB9XHJcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XHJcbiAgICAgIHJldHVybiB1cmxcclxuICAgIH1cclxuICAgIGlmICghdXJsLnN0YXJ0c1dpdGgoXCIvXCIpICYmICFhdHJfc3RhdGljX2RhdGFzLk9TU19VUkwuZW5kc1dpdGgoJy8nKSkge1xyXG4gICAgICB1cmwgPSAnLycgKyB1cmxcclxuICAgIH1cclxuICAgIGxldCByZXN1bHQgPSBhdHJfc3RhdGljX2RhdGFzLk9TU19VUkwgKyB1cmxcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0U3RhdGljT3NzVXJsKHVybDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXVybCkge1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIGlmICh1cmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcclxuICAgICAgcmV0dXJuIHVybFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF0cl9zdGF0aWNfZGF0YXMuU1RBVElDX09TU19VUkwgKyB1cmw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVtb3ZlSHRtbCh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC88W148Pl0rPi9nLCAnJykucmVwbGFjZSgvJm5ic3A7L2lnLCAnJylcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtdWwoLi4ubnVtYmVyczogYW55KSB7XHJcbiAgICBpZiAobnVtYmVycy5sZW5ndGggPCAyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBtID0gdGhpcy5nZXREaWdpdChudW1iZXJzKTtcclxuICAgIGxldCByZXN1bHQgPSAxO1xyXG4gICAgbnVtYmVycy5mb3JFYWNoKFxyXG4gICAgICAobnVtOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgcyA9IG51bS50b1N0cmluZygpO1xyXG4gICAgICAgIHJlc3VsdCAqPSBOdW1iZXIocy5yZXBsYWNlKFwiLlwiLCBcIlwiKSk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICByZXR1cm4gcmVzdWx0IC8gTWF0aC5wb3coMTAsIG0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldERpZ2l0KC4uLm51bWJlcnM6IGFueVtdKSB7XHJcbiAgICBsZXQgbSA9IDA7XHJcbiAgICBudW1iZXJzLmZvckVhY2goXHJcbiAgICAgIG51bSA9PiB7XHJcbiAgICAgICAgbGV0IHMgPSBudW0udG9TdHJpbmcoKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgbSArPSBzLnNwbGl0KFwiLlwiKVsxXS5sZW5ndGhcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIG07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZG93bmxvYWRJbWcoZGF0YTogYW55LCBmaWxlTmFtZT86IHN0cmluZywgZW5kcG9pbnQ/OiBzdHJpbmcpIHtcclxuICAgIC8vIC8vIOS4i+i9veexu+WeiyB4bHNcclxuICAgIC8vIGNvbnN0IGNvbnRlbnRUeXBlID0gJ2ltYWdlL2pwZWcnO1xyXG4gICAgLy8gLy8gY29uc3QgY29udGVudFR5cGUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnO1xyXG4gICAgLy8gLy8g5LiL6L2957G75Z6L77yaY3N2XHJcbiAgICAvLyBjb25zdCBkZWJ1ZyA9IHtoZWxsbzogXCJ3b3JsZFwifTtcclxuICAgIC8vIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbXSx7dHlwZSA6ICdpbWFnZS9qcGVnJ30pO1xyXG4gICAgLy8gY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAvL1xyXG4gICAgLy8gLy8g5omT5byA5paw56qX5Y+j5pa55byP6L+b6KGM5LiL6L29XHJcbiAgICAvLyAvLyB3aW5kb3cub3Blbih1cmwpO1xyXG4gICAgLy9cclxuICAgIC8vIC8vIOS7peWKqOaAgeWIm+W7umHmoIfnrb7ov5vooYzkuIvovb1cclxuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBhLmhyZWYgPSBkYXRhO1xyXG4gICAgLy8gYS5kb3dubG9hZCA9IGZpbGVOYW1lO1xyXG4gICAgYS5kb3dubG9hZCA9IGZpbGVOYW1lID8gZmlsZU5hbWUgOiBcIlwiICsgZW5kcG9pbnQ7XHJcbiAgICBhLmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZG93bmxvYWRYbHModXJsOiBzdHJpbmcsIHBhcmFtcz86IGFueSwpIHtcclxuICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgdXJsICs9IFwiP1wiO1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XHJcbiAgICAgICAgaWYgKHBhcmFtc1trZXldKSB7XHJcbiAgICAgICAgICB1cmwgKz0ga2V5ICsgXCI9XCIgKyBwYXJhbXNba2V5XSArIFwiJiZcIlxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gd2luZG93Lm9wZW4odXJsKTtcclxuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICAvLyAvLyBhLmRvd25sb2FkID0gZmlsZU5hbWU7XHJcbiAgICAvLyBhLmRvd25sb2FkID0gXCIzMzIxLnhsc1wiO1xyXG4gICAgYS5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldEltZyh1cmw6IHN0cmluZywgcGFyYW06IGFueSA9IHtcclxuICAgIGltZ1c6IDAsIGltZ0g6IDAsXHJcbiAgICBuZWVkVGltZTogZmFsc2UsIGlzRnVsbFVybDogZmFsc2VcclxuICB9KSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBsZXQgZGF0YVVybDogYW55ID0gU2Vzc2lvblN0b3JhZ2VVdGlsLmdldEltZyh1cmwpXHJcbiAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICBpbWcuc2V0QXR0cmlidXRlKCdjcm9zc09yaWdpbicsICdhbm9ueW1vdXMnKVxyXG4gICAgICBpZiAoIWRhdGFVcmwpIHtcclxuICAgICAgICBpbWcuc3JjID0gcGFyYW0uaXNGdWxsVXJsID8gdXJsIDogVG9vbHNVdGlsLmdldE9zc1VybCh1cmwsIHBhcmFtLm5lZWRUaW1lKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpbmRleCA9IGRhdGFVcmwuaW5kZXhPZihcIn1cIikgKyAxXHJcbiAgICAgICAgaW1nLnNyYyA9IGRhdGFVcmwuc2xpY2UoMCwgNTApICsgZGF0YVVybC5zbGljZShpbmRleCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgbGV0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgIGxldCBjb250ZXh0MjogYW55ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjLndpZHRoID0gcGFyYW0uaW1nVyB8fCBpbWcud2lkdGg7XHJcbiAgICAgICAgYy5oZWlnaHQgPSBwYXJhbS5pbWdIIHx8IGltZy5oZWlnaHRcclxuICAgICAgICBjb250ZXh0Mi5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBjLndpZHRoLCBjLmhlaWdodClcclxuICAgICAgICBsZXQgZGF0YVVybCA9IGMudG9EYXRhVVJMKClcclxuICAgICAgICBsZXQgc3RyID0gYy53aWR0aCArIFwiLFwiICsgYy5oZWlnaHQgKyBcIn1cIlxyXG4gICAgICAgIGRhdGFVcmwgPSBkYXRhVXJsLnNsaWNlKDAsIDUwKSArIHN0ciArIGRhdGFVcmwuc2xpY2UoNTApXHJcbi8v5LiN5L+d5a2YXHJcbi8vICAgICAgICAgU2Vzc2lvblN0b3JhZ2VVdGlsLnNldEltZyh1cmwsIGRhdGFVcmwpXHJcblxyXG4gICAgICAgIHJlc29sdmUoaW1nKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIHN0YXRpYyBwaXhlbFRvTnVtKHdpZHRoOiBhbnkpIHtcclxuICAgIGNvbnN0IHJlID0gL3B4L2dpO1xyXG4gICAgbGV0IHdpZHRoU3RyID0gd2lkdGgucmVwbGFjZShyZSwgXCJcIik7XHJcbiAgICByZXR1cm4gTnVtYmVyKHdpZHRoU3RyKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBhbGxFcXVhbCA9ICguLi5hcnJheTogYW55W10pID0+IGFycmF5LmV2ZXJ5KGl0ZW0gPT4gaXRlbSA9PT0gYXJyYXlbMF0pO1xyXG5cclxuICAvKipcclxuICAgKiBhcnJheeaJgOacieWPguaVsOa7oei2s2Zu5Ye95pWw6L+U5ZuedHJ1ZVxyXG4gICAqIGFsbCh4ID0+IHggPiAxLDEsMiwzKTsgLy8gdHJ1ZVxyXG4gICAqIEBwYXJhbSBjYWxsYmFja1xyXG4gICAqIEBwYXJhbSBhcnJheVxyXG4gICAqL1xyXG4gIHN0YXRpYyBzYXRpc2ZpZWRGbiA9IChjYWxsYmFjazogKC4uLmFyZ3M6IGFueVtdKSA9PiBib29sZWFuLCAuLi5hcnJheTogYW55W10pID0+IGFycmF5LmV2ZXJ5KGNhbGxiYWNrKTtcclxuXHJcbiAgLy/lhajpg6jkuI3nqbrkuLp0cnVlXHJcbiAgc3RhdGljIG5vdEVtcHR5KC4uLmFycjogYW55W10pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBhcnIuZXZlcnkoaXRlbSA9PiAhIWl0ZW0pXHJcbiAgfVxyXG5cclxuICAvL+WMheWQq+epuuS4unRydWVcclxuICBzdGF0aWMgaGFzRW1wdHkoLi4uYXJyOiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGFyci5zb21lKGl0ZW0gPT4gIWl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFsbEVtcHR5KC4uLmFycjogYW55W10pIHtcclxuICAgIHJldHVybiBhcnIuZXZlcnkoaXRlbSA9PiAhaXRlbSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNBcnJheShvYmo6IGFueSkge1xyXG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEFycmF5XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNFbXB0eShvYmo6IGFueSkge1xyXG4gICAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAob2JqID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIG9iaiA9PSAnYm9vbGVhbicpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICBpZiAob2JqID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBvYmogPT0gXCJzdHJpbmdcIiAmJiBvYmoudHJpbSgpID09PSAnJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZW5jb2RlVmFsdWUocGFyYW1zOiBhbnkpIHtcclxuICAgIE9iamVjdC5rZXlzKHBhcmFtcykuZm9yRWFjaChrZXkgPT4gcGFyYW1zW2tleV0gPSBlbmNvZGVVUklDb21wb25lbnQocGFyYW1zW2tleV0pKTtcclxuICAgIHJldHVybiBwYXJhbXM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgd2luZG93SGVpZ2h0KCkge1xyXG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgd2luZG93V2lkdGgoKSB7XHJcblxyXG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtb2RhbGVTdHlsZSgpIHtcclxuICAgIHJldHVybiB7J21heEhlaWdodCc6IFRvb2xzVXRpbC53aW5kb3dIZWlnaHQoKSAtIDIwMCArICdweCcsICdvdmVyZmxvdy15JzogJ2F1dG8nfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRMZW5ndGgocG9pbnRBOiB7IHgxOiBhbnksIHkxOiBhbnkgfSwgcG9pbnRCOiB7IHgxOiBhbnksIHkxOiBhbnkgfSkge1xyXG4gICAgdmFyIGxlbmd0aEFCID0gTWF0aC5zcXJ0KE1hdGgucG93KHBvaW50QS54MSAtIHBvaW50Qi54MSwgMikgK1xyXG4gICAgICBNYXRoLnBvdyhwb2ludEEueTEgLSBwb2ludEIueTEsIDIpKVxyXG4gICAgcmV0dXJuIGxlbmd0aEFCO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldFJvdGF0ZU51bShwb2ludEI6IHsgeDE6IGFueSwgeTE6IGFueSB9LCBwb2ludEM6IHsgeDE6IGFueSwgeTE6IGFueSB9LCBwb2ludEE6IHsgeDE6IGFueSwgeTE6IGFueSB9KSB7XHJcbiAgICAvL0FCQ+S4reW/g+eCuSzotbflp4vngrks57uI54K5XHJcbiAgICBsZXQgQUI6IGFueSA9IHt9O1xyXG4gICAgbGV0IEFDOiBhbnkgPSB7fTtcclxuICAgIEFCLngxID0gcG9pbnRCLngxIC0gcG9pbnRBLngxXHJcbiAgICBBQi55MSA9IHBvaW50Qi55MSAtIHBvaW50QS55MVxyXG4gICAgQUMueDEgPSBwb2ludEMueDEgLSBwb2ludEEueDFcclxuICAgIEFDLnkxID0gcG9pbnRDLnkxIC0gcG9pbnRBLnkxXHJcbiAgICB2YXIgZGlyZWN0ID0gQUIueDEgKiBBQy55MSAtIEFCLnkxICogQUMueTFcclxuICAgIHZhciBsZW5ndGhBQiA9IHRoaXMuZ2V0TGVuZ3RoKHBvaW50QiwgcG9pbnRBKVxyXG4gICAgdmFyIGxlbmd0aEFDID0gdGhpcy5nZXRMZW5ndGgocG9pbnRDLCBwb2ludEEpXHJcbiAgICB2YXIgbGVuZ3RoQkMgPSB0aGlzLmdldExlbmd0aChwb2ludEIsIHBvaW50QylcclxuICAgIHZhciBjb3NBID0gKE1hdGgucG93KGxlbmd0aEFCLCAyKSArIE1hdGgucG93KGxlbmd0aEFDLCAyKSAtXHJcbiAgICAgIE1hdGgucG93KGxlbmd0aEJDLCAyKSkgLyAoMiAqIGxlbmd0aEFCICogbGVuZ3RoQUMpXHJcbiAgICB2YXIgYW5nbGVBID0gTWF0aC5yb3VuZChNYXRoLmFjb3MoY29zQSkgKiAxODAgLyBNYXRoLlBJKVxyXG4gICAgaWYgKGRpcmVjdCA8IDApIHtcclxuICAgICAgcmV0dXJuIC1hbmdsZUFcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBhbmdsZUFcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICAvL+e7lWNlbnRlcueCueaXi+i9rHJvdGF0ZeinkuW6plxyXG4gIHN0YXRpYyBnZXRSb3RhdGVQb2ludChwOiB7IHgxOiBhbnksIHkxOiBhbnkgfSwgY2VudGVyOiB7IHgxOiBhbnksIHkxOiBhbnkgfSwgcm90YXRlOiBhbnkpIHtcclxuICAgIGxldCBzdGFydFggPSBwLngxXHJcbiAgICBsZXQgc3RhcnRZID0gcC55MVxyXG4gICAgbGV0IGEgPSBjZW50ZXIueDFcclxuICAgIGxldCBiID0gY2VudGVyLnkxXHJcbiAgICBsZXQgeDEgPSBhIC0gTWF0aC5jb3Mocm90YXRlICogTWF0aC5QSSAvIDE4MCkgKiAoYSAtIHN0YXJ0WCkgKyBNYXRoLnNpbihyb3RhdGUgKiBNYXRoLlBJIC8gMTgwKSAqIChiIC0gc3RhcnRZKVxyXG4gICAgbGV0IHkxID0gYiAtIE1hdGguY29zKHJvdGF0ZSAqIE1hdGguUEkgLyAxODApICogKGIgLSBzdGFydFkpIC0gTWF0aC5zaW4ocm90YXRlICogTWF0aC5QSSAvIDE4MCkgKiAoYSAtIHN0YXJ0WClcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHgxOiB4MSxcclxuICAgICAgeTE6IHkxXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -536,7 +536,7 @@ export class AtrFormComponent {
536
536
  }
537
537
  }
538
538
  AtrFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AtrFormComponent, deps: [{ token: i1.ShareService }, { token: i2.HttpService }, { token: i3.FormBuilder }, { token: i4.DictService }, { token: i0.Injector }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Component });
539
- AtrFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AtrFormComponent, selector: "atr-form", inputs: { formOpts: "formOpts" }, outputs: { formAction: "formAction", uploadAction: "uploadAction", quillChange: "quillChange" }, ngImport: i0, template: "<atr-view-form *ngIf=\"formOpts.type == 'view'\" [dicts]=\"dicts\" [atrForm]=\"atrForm\"\r\n [formOpts]=\"formOpts\"></atr-view-form>\r\n\r\n<form nz-form [formGroup]=\"atrForm\" *ngIf=\"formOpts.type != 'view'\">\r\n <div nz-row nzGutter=\"8\" nzType=\"flex\" nzAlign=\"top\">\r\n <ng-container *ngFor=\"let item of formOpts.items\">\r\n <div nz-col nzSpan=\"24\" class=\"form-title\" *ngIf=\"item.type == 'title'\">\r\n {{item.label}}\r\n </div>\r\n <div nz-col [nzSpan]=\"item.span\" *ngIf=\"isShow(item.isHidden,item.operator)\">\r\n <ng-content *ngTemplateOutlet=\"item.firstTemp\"></ng-content>\r\n <nz-form-item *ngIf=\"item.type != 'title'\">\r\n <nz-form-label [nzSm]=\"item.lspan\" [nzXs]=\"24\" [nzRequired]=\"isRequired(item)\">{{item.label}}</nz-form-label>\r\n <nz-form-control [nzSm]=\"item.cspan\" [nzXs]=\"24\">\r\n <div style=\"display: flex;width: 100%\">\r\n <nz-tree-select *ngIf=\"item.type == 'treeSelect'\"\r\n [nzNodes]=\"item.treeList\"\r\n nzShowSearch=\"true\"\r\n nzHideUnMatched=\"true\"\r\n nzPlaceHolder=\"{{item.placeholder}}\"\r\n [nzShowSearch]=\"true\"\r\n [formControlName]=\"item.key\"\r\n [nzAllowClear]=\"!item.notNull\"\r\n [nzMultiple]=\"item.selectUrl.isMultiple\"\r\n [nzDisabled]=\"item.readonly\"\r\n style=\"flex: 1\"\r\n >\r\n </nz-tree-select>\r\n <nz-tree-select *ngIf=\"item.type == 'treeSelect'\"\r\n [nzAllowClear]=\"!item.notNull\"\r\n [nzNodes]=\"item.treeList\"\r\n nzShowSearch=\"true\"\r\n nzHideUnMatched=\"true\"\r\n nzPlaceHolder=\"{{item.placeholder}}\"\r\n [nzShowSearch]=\"true\"\r\n [formControlName]=\"item.key\"\r\n [nzMultiple]=\"item.selectUrl.isMultiple\"\r\n [nzDisabled]=\"item.readonly\" style=\"flex: 1\"\r\n >\r\n </nz-tree-select>\r\n <app-select-icons *ngIf=\"item.type == 'selectIcon'\" nz-input placeholder=\"{{item.placeholder}}\"\r\n [readonly]=\"item.readonly \"\r\n style=\"flex: 1\"\r\n [formControlName]=\"item.key\">\r\n </app-select-icons>\r\n <input *ngIf=\"item.type == 'text'\" nz-input placeholder=\"{{item.placeholder}}\"\r\n [readonly]=\"item.readonly || formOpts.type == 'view'\"\r\n [formControlName]=\"item.key\"/>\r\n <textarea *ngIf=\"item.type == 'textarea'\" nz-input [rows]=\"item.rows\" placeholder=\"{{item.placeholder}}\"\r\n [formControlName]=\"item.key\" [readonly]=\"item.readonly|| formOpts.type == 'view'\"></textarea>\r\n <nz-input-number *ngIf=\"item.type == 'number'\" nzPlaceHolder=\"{{item.placeholder}}\"\r\n [nzMin]=\"item.minNumber\" [nzMax]=\"item.maxNumber\"\r\n [formControlName]=\"item.key\"></nz-input-number>\r\n <nz-radio-group *ngIf=\"item.type == 'radio'\" [formControlName]=\"item.key\">\r\n <label nz-radio *ngFor=\"let o of item.dictList\" [nzValue]=\"o.value\">{{o.label}}</label>\r\n </nz-radio-group>\r\n <nz-checkbox-wrapper *ngIf=\"item.type == 'checkbox'\" [formControlName]=\"item.key\">\r\n <div nz-row>\r\n <div *ngFor=\"let o of item.dictList\" nz-col>\r\n <label nz-checkbox [nzValue]=\"o.value\">{{o.label}}</label></div>\r\n </div>\r\n </nz-checkbox-wrapper>\r\n <nz-select\r\n [nzShowSearch]=\"true\"\r\n *ngIf=\"item.type == 'select'\"\r\n nzPlaceHolder=\"{{item.placeholder}}\"\r\n nzAllowClear=\"true\"\r\n [formControlName]=\"item.key\"\r\n nzServerSearch\r\n [nzMode]=\"item.nzMode || 'default'\"\r\n nzDisabled=\"{{item.readonly|| formOpts.type == 'view'}}\"\r\n >\r\n <nz-option *ngFor=\"let o of dicts[item.dictCode]\" [nzLabel]=\"o.typeName\" [nzValue]=\"o.id\"></nz-option>\r\n </nz-select>\r\n <nz-select\r\n [nzShowSearch]=\"true\"\r\n *ngIf=\"item.type == 'selectc'\"\r\n nzPlaceHolder=\"{{item.placeholder}}\"\r\n nzAllowClear=\"true\"\r\n [formControlName]=\"item.key\"\r\n nzServerSearch\r\n [nzMode]=\"item.nzMode || 'default'\"\r\n nzDisabled=\"{{item.readonly|| formOpts.type == 'view'}}\"\r\n >\r\n <nz-option *ngFor=\"let o of item.dictList\" [nzLabel]=\"o.label\" [nzValue]=\"o.value\"></nz-option>\r\n </nz-select>\r\n <nz-cascader [nzDisabled]=\"item.readonly\" style=\"flex: 1\" [nzAllowClear]=\"!item.notNull\"\r\n [nzValueProperty]=\"'nzValueProperty'\"\r\n [nzShowSearch]=\"true\" *ngIf=\"item.type == 'cascader'\"\r\n [nzOptions]=\"item.dictList\" [formControlName]=\"item.key\"></nz-cascader>\r\n <nz-date-picker *ngIf=\"item.type == 'date'\" [nzFormat]=\"item.dateFormat ? item.dateFormat : 'yyyy-MM-dd'\"\r\n [nzShowTime]=\"showTime(item)\" style=\"flex: 1\"\r\n [nzDisabled]=\"formOpts.type == 'view' || item.readonly \"\r\n [formControlName]=\"item.key\"></nz-date-picker>\r\n <nz-range-picker *ngIf=\"item.type == 'dateRange'\" style=\"flex: 1\"\r\n [nzShowTime]=\"item.nzShowTime? item.nzShowTime : false\"\r\n [formControlName]=\"item.key\"\r\n [nzFormat]=\"item.nzShowTime && item.nzShowTime.nzFormat ? ('yyyy-MM-dd '+ item.nzShowTime.nzFormat) : 'yyyy-MM-dd'\"\r\n [nzPlaceHolder]=\"['\u5F00\u59CB\u65F6\u95F4', '\u7ED3\u675F\u65F6\u95F4']\"></nz-range-picker>\r\n\r\n <input *ngIf=\"item.type == 'image'\" nz-input [formControlName]=\"item.key\" [hidden]=\"true\"/>\r\n <atr-img-upload *ngIf=\"item.type == 'image'\" [(opts)]=\"item.imageOpts\"\r\n (onBeforeUpload)=\"onBeforeUpload($event,item)\"\r\n (afterChange)=\"imageUploadChange($event)\"></atr-img-upload>\r\n\r\n <!-- <editor *ngIf=\"item.type == 'editor'\" [formControlName]=\"item.key\" [config]=\"{initialFrameHeight:item.height}\" ></editor>-->\r\n <app-quill-editor *ngIf=\"item.type == 'editor'\" [formControlName]=\"item.key\" (ngModelChange)=\"editChange($event,item)\"\r\n [styles]=\"{height:item.height > 0 ? item.height + 'px' : '250px'}\"></app-quill-editor>\r\n <div *ngIf=\"item.type == 'word'\" [innerHTML]=\"item.value |defVal:item.defaultValue |safeHtml\">\r\n </div>\r\n <div *ngIf=\"item.type == 'buttons'\">\r\n <ng-container *ngFor=\"let btn of item.buttons\">\r\n <button nz-button type=\"button\" [nzType]=\"btn.btnType |defVal: 'default'\"\r\n class=\"ant-btn ant-btn-primary\"\r\n style=\"margin-right: 5px\" *ngIf=\"btn.isShow || isShow(false,btn.operator)\"\r\n (click)=\"doAction(btn,$event)\">\r\n <span>{{btn.name}}</span></button>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngFor=\"let valid of item.validators\">\r\n <ng-container *ngIf=\"atrForm.get(item.key).hasError(valid.type) && (atrForm.get(item.key).dirty )\">\r\n <div style=\"color:red; height: 15px;margin: 0;line-height: 15px;\">{{valid.errorLabel}}</div>\r\n </ng-container>\r\n </ng-container>\r\n <button nz-button nzType=\"default\" style=\"cursor: default;background-color: #fafafa;color: black\"\r\n *ngIf=\"item.ends\" disabled>\r\n {{item.ends}}\r\n </button>\r\n <button *ngIf=\"item.button?.isShow\" type=\"button\" class=\"ant-btn ant-btn-primary\"\r\n (click)=\"doAction(item.button,$event)\">\r\n <span>{{item.button.name}}</span></button>\r\n </div>\r\n <div *ngIf=\"item.proposal\" style=\"color: red;width: 100%\">{{item.proposal}}</div>\r\n </nz-form-control>\r\n </nz-form-item>\r\n <ng-content *ngTemplateOutlet=\"item.temp\"></ng-content>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n</form>\r\n", styles: [":host ::ng-deep .ant-form-item{margin:0 0 10px}:host ::ng-deep .ant-form-item-label{text-align:left}:host ::ng-deep nz-input-number{width:100%}:host .form-title{height:50px;line-height:50px;font-weight:500;font-size:20px;border-bottom:1px solid #e8e8e8;border-radius:4px 4px 0 0;margin-bottom:14px;margin-top:11px}\n"], components: [{ type: i5.ViewFormComponent, selector: "atr-view-form", inputs: ["formOpts", "atrForm", "dicts", "items"] }, { type: i6.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { type: i6.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon"], exportAs: ["nzFormLabel"] }, { type: i6.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { type: i7.NzTreeSelectComponent, selector: "nz-tree-select", inputs: ["nzId", "nzAllowClear", "nzShowExpand", "nzShowLine", "nzDropdownMatchSelectWidth", "nzCheckable", "nzHideUnMatched", "nzShowIcon", "nzShowSearch", "nzDisabled", "nzAsyncData", "nzMultiple", "nzDefaultExpandAll", "nzCheckStrictly", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzExpandedIcon", "nzNotFoundContent", "nzNodes", "nzOpen", "nzSize", "nzPlaceHolder", "nzDropdownStyle", "nzDropdownClassName", "nzBackdrop", "nzStatus", "nzExpandedKeys", "nzDisplayWith", "nzMaxTagCount", "nzMaxTagPlaceholder", "nzTreeTemplate"], outputs: ["nzOpenChange", "nzCleared", "nzRemoved", "nzExpandChange", "nzTreeClick", "nzTreeCheckBoxChange"], exportAs: ["nzTreeSelect"] }, { type: i8.SelectIconsComponent, selector: "app-select-icons", inputs: ["readonly", "placeholder"] }, { type: i9.NzInputNumberComponent, selector: "nz-input-number", inputs: ["nzSize", "nzMin", "nzMax", "nzParser", "nzPrecision", "nzPrecisionMode", "nzPlaceHolder", "nzStatus", "nzStep", "nzInputMode", "nzId", "nzDisabled", "nzReadOnly", "nzAutoFocus", "nzBorderless", "nzFormatter"], outputs: ["nzBlur", "nzFocus"], exportAs: ["nzInputNumber"] }, { type: i10.NzRadioGroupComponent, selector: "nz-radio-group", inputs: ["nzDisabled", "nzButtonStyle", "nzSize", "nzName"], exportAs: ["nzRadioGroup"] }, { type: i10.NzRadioComponent, selector: "[nz-radio],[nz-radio-button]", inputs: ["nzValue", "nzDisabled", "nzAutoFocus"], exportAs: ["nzRadio"] }, { type: i11.NzCheckboxWrapperComponent, selector: "nz-checkbox-wrapper", outputs: ["nzOnChange"], exportAs: ["nzCheckboxWrapper"] }, { type: i11.NzCheckboxComponent, selector: "[nz-checkbox]", inputs: ["nzValue", "nzAutoFocus", "nzDisabled", "nzIndeterminate", "nzChecked", "nzId"], outputs: ["nzCheckedChange"], exportAs: ["nzCheckbox"] }, { type: i12.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }, { type: i12.NzOptionComponent, selector: "nz-option", inputs: ["nzLabel", "nzValue", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { type: i13.NzCascaderComponent, selector: "nz-cascader, [nz-cascader]", inputs: ["nzOptionRender", "nzShowInput", "nzShowArrow", "nzAllowClear", "nzAutoFocus", "nzChangeOnSelect", "nzDisabled", "nzColumnClassName", "nzExpandTrigger", "nzValueProperty", "nzLabelRender", "nzLabelProperty", "nzNotFoundContent", "nzSize", "nzBackdrop", "nzShowSearch", "nzPlaceHolder", "nzMenuClassName", "nzMenuStyle", "nzMouseEnterDelay", "nzMouseLeaveDelay", "nzStatus", "nzTriggerAction", "nzChangeOn", "nzLoadData", "nzSuffixIcon", "nzExpandIcon", "nzOptions"], outputs: ["nzVisibleChange", "nzSelectionChange", "nzSelect", "nzClear"], exportAs: ["nzCascader"] }, { type: i14.NzDatePickerComponent, selector: "nz-date-picker,nz-week-picker,nz-month-picker,nz-year-picker,nz-range-picker", inputs: ["nzAllowClear", "nzAutoFocus", "nzDisabled", "nzBorderless", "nzInputReadOnly", "nzInline", "nzOpen", "nzDisabledDate", "nzLocale", "nzPlaceHolder", "nzPopupStyle", "nzDropdownClassName", "nzSize", "nzStatus", "nzFormat", "nzDateRender", "nzDisabledTime", "nzRenderExtraFooter", "nzShowToday", "nzMode", "nzShowNow", "nzRanges", "nzDefaultPickerValue", "nzSeparator", "nzSuffixIcon", "nzBackdrop", "nzId", "nzPlacement", "nzShowTime"], outputs: ["nzOnPanelChange", "nzOnCalendarChange", "nzOnOk", "nzOnOpenChange"], exportAs: ["nzDatePicker"] }, { type: i15.UploadComponent, selector: "atr-img-upload", inputs: ["opts", "isEdit", "allowChangSeq"], outputs: ["afterChange", "optsChange", "onBeforeUpload"] }, { type: i16.QuillEditorComponent, selector: "app-quill-editor", inputs: ["placeholder", "styles", "value", "readOnly", "needImgSeq"] }, { type: i17.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }], directives: [{ type: i18.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.NzFormDirective, selector: "[nz-form]", inputs: ["nzLayout", "nzNoColon", "nzAutoTips", "nzDisableAutoTips", "nzTooltipIcon"], exportAs: ["nzForm"] }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i19.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { type: i18.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i19.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { type: i18.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i20.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i14.NzRangePickerComponent, selector: "nz-range-picker", exportAs: ["nzRangePicker"] }, { type: i21.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { type: i22.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }], pipes: { "safeHtml": i23.SafeHtmlPipe, "defVal": i24.DefaultValPipe } });
539
+ AtrFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AtrFormComponent, selector: "atr-form", inputs: { formOpts: "formOpts" }, outputs: { formAction: "formAction", uploadAction: "uploadAction", quillChange: "quillChange" }, ngImport: i0, template: "<atr-view-form *ngIf=\"formOpts.type == 'view'\" [dicts]=\"dicts\" [atrForm]=\"atrForm\"\r\n [formOpts]=\"formOpts\"></atr-view-form>\r\n\r\n<form nz-form [formGroup]=\"atrForm\" *ngIf=\"formOpts.type != 'view'\">\r\n <div nz-row nzGutter=\"8\" nzType=\"flex\" nzAlign=\"top\">\r\n <ng-container *ngFor=\"let item of formOpts.items\">\r\n <div nz-col nzSpan=\"24\" class=\"form-title\" *ngIf=\"item.type == 'title'\">\r\n {{item.label}}\r\n </div>\r\n <div nz-col [nzSpan]=\"item.span\" *ngIf=\"isShow(item.isHidden,item.operator)\">\r\n <ng-content *ngTemplateOutlet=\"item.firstTemp\"></ng-content>\r\n <nz-form-item *ngIf=\"item.type != 'title'\">\r\n <nz-form-label [nzSm]=\"item.lspan\" [nzXs]=\"24\" [nzRequired]=\"isRequired(item)\">{{item.label}}</nz-form-label>\r\n <nz-form-control [nzSm]=\"item.cspan\" [nzXs]=\"24\">\r\n <div style=\"display: flex;width: 100%\">\r\n <nz-tree-select *ngIf=\"item.type == 'treeSelect'\"\r\n [nzNodes]=\"item.treeList\"\r\n nzShowSearch=\"true\"\r\n nzHideUnMatched=\"true\"\r\n nzPlaceHolder=\"{{item.placeholder}}\"\r\n [nzShowSearch]=\"true\"\r\n [formControlName]=\"item.key\"\r\n [nzAllowClear]=\"!item.notNull\"\r\n [nzMultiple]=\"item.selectUrl.isMultiple\"\r\n [nzDisabled]=\"item.readonly\"\r\n style=\"flex: 1\"\r\n >\r\n </nz-tree-select>\r\n <nz-tree-select *ngIf=\"item.type == 'treeSelect'\"\r\n [nzAllowClear]=\"!item.notNull\"\r\n [nzNodes]=\"item.treeList\"\r\n nzShowSearch=\"true\"\r\n nzHideUnMatched=\"true\"\r\n nzPlaceHolder=\"{{item.placeholder}}\"\r\n [nzShowSearch]=\"true\"\r\n [formControlName]=\"item.key\"\r\n [nzMultiple]=\"item.selectUrl.isMultiple\"\r\n [nzDisabled]=\"item.readonly\" style=\"flex: 1\"\r\n >\r\n </nz-tree-select>\r\n <app-select-icons *ngIf=\"item.type == 'selectIcon'\" nz-input placeholder=\"{{item.placeholder}}\"\r\n [readonly]=\"item.readonly \"\r\n style=\"flex: 1\"\r\n [formControlName]=\"item.key\">\r\n </app-select-icons>\r\n <input *ngIf=\"item.type == 'text'\" nz-input placeholder=\"{{item.placeholder}}\"\r\n [readonly]=\"item.readonly || formOpts.type == 'view'\"\r\n [formControlName]=\"item.key\"/>\r\n <textarea *ngIf=\"item.type == 'textarea'\" nz-input [rows]=\"item.rows\" placeholder=\"{{item.placeholder}}\"\r\n [formControlName]=\"item.key\" [readonly]=\"item.readonly|| formOpts.type == 'view'\"></textarea>\r\n <nz-input-number *ngIf=\"item.type == 'number'\" nzPlaceHolder=\"{{item.placeholder}}\"\r\n [nzMin]=\"item.minNumber\" [nzMax]=\"item.maxNumber\"\r\n [formControlName]=\"item.key\"></nz-input-number>\r\n <nz-radio-group *ngIf=\"item.type == 'radio'\" [formControlName]=\"item.key\">\r\n <label nz-radio *ngFor=\"let o of item.dictList\" [nzValue]=\"o.value\">{{o.label}}</label>\r\n </nz-radio-group>\r\n <nz-checkbox-wrapper *ngIf=\"item.type == 'checkbox'\" [formControlName]=\"item.key\">\r\n <div nz-row>\r\n <div *ngFor=\"let o of item.dictList\" nz-col>\r\n <label nz-checkbox [nzValue]=\"o.value\">{{o.label}}</label></div>\r\n </div>\r\n </nz-checkbox-wrapper>\r\n <nz-select\r\n [nzShowSearch]=\"true\"\r\n *ngIf=\"item.type == 'select'\"\r\n nzPlaceHolder=\"{{item.placeholder}}\"\r\n nzAllowClear=\"true\"\r\n [formControlName]=\"item.key\"\r\n nzServerSearch\r\n [nzMode]=\"item.nzMode || 'default'\"\r\n nzDisabled=\"{{item.readonly|| formOpts.type == 'view'}}\"\r\n >\r\n <nz-option *ngFor=\"let o of dicts[item.dictCode]\" [nzLabel]=\"o.typeName\" [nzValue]=\"o.id\"></nz-option>\r\n </nz-select>\r\n <nz-select\r\n [nzShowSearch]=\"true\"\r\n *ngIf=\"item.type == 'selectc'\"\r\n nzPlaceHolder=\"{{item.placeholder}}\"\r\n nzAllowClear=\"true\"\r\n [formControlName]=\"item.key\"\r\n nzServerSearch\r\n [nzMode]=\"item.nzMode || 'default'\"\r\n nzDisabled=\"{{item.readonly|| formOpts.type == 'view'}}\"\r\n >\r\n <nz-option *ngFor=\"let o of item.dictList\" [nzLabel]=\"o.label\" [nzValue]=\"o.value\"></nz-option>\r\n </nz-select>\r\n <nz-cascader [nzDisabled]=\"item.readonly\" style=\"flex: 1\" [nzAllowClear]=\"!item.notNull\"\r\n [nzValueProperty]=\"'nzValueProperty'\"\r\n [nzShowSearch]=\"true\" *ngIf=\"item.type == 'cascader'\"\r\n [nzOptions]=\"item.dictList\" [formControlName]=\"item.key\"></nz-cascader>\r\n <nz-date-picker *ngIf=\"item.type == 'date'\" [nzFormat]=\"item.dateFormat ? item.dateFormat : 'yyyy-MM-dd'\"\r\n [nzShowTime]=\"showTime(item)\" style=\"flex: 1\"\r\n [nzDisabled]=\"formOpts.type == 'view' || item.readonly \"\r\n [formControlName]=\"item.key\"></nz-date-picker>\r\n <nz-range-picker *ngIf=\"item.type == 'dateRange'\" style=\"flex: 1\"\r\n [nzShowTime]=\"item.nzShowTime? item.nzShowTime : false\"\r\n [formControlName]=\"item.key\"\r\n [nzFormat]=\"item.nzShowTime && item.nzShowTime.nzFormat ? ('yyyy-MM-dd '+ item.nzShowTime.nzFormat) : 'yyyy-MM-dd'\"\r\n [nzPlaceHolder]=\"['\u5F00\u59CB\u65F6\u95F4', '\u7ED3\u675F\u65F6\u95F4']\"></nz-range-picker>\r\n\r\n <input *ngIf=\"item.type == 'image'\" nz-input [formControlName]=\"item.key\" [hidden]=\"true\"/>\r\n <atr-img-upload *ngIf=\"item.type == 'image'\" [(opts)]=\"item.imageOpts\"\r\n (onBeforeUpload)=\"onBeforeUpload($event,item)\"\r\n (afterChange)=\"imageUploadChange($event)\"></atr-img-upload>\r\n\r\n <!-- <editor *ngIf=\"item.type == 'editor'\" [formControlName]=\"item.key\" [config]=\"{initialFrameHeight:item.height}\" ></editor>-->\r\n <app-quill-editor *ngIf=\"item.type == 'editor'\" [formControlName]=\"item.key\" (ngModelChange)=\"editChange($event,item)\"\r\n [styles]=\"{height:item.height > 0 ? item.height + 'px' : '250px'}\"></app-quill-editor>\r\n <div *ngIf=\"item.type == 'word'\" [innerHTML]=\"item.value |defVal:item.defaultValue |safeHtml\">\r\n </div>\r\n <div *ngIf=\"item.type == 'buttons'\">\r\n <ng-container *ngFor=\"let btn of item.buttons\">\r\n <button nz-button type=\"button\" [nzType]=\"btn.btnType |defVal: 'default'\"\r\n class=\"ant-btn ant-btn-primary\"\r\n style=\"margin-right: 5px\" *ngIf=\"btn.isShow || isShow(false,btn.operator)\"\r\n (click)=\"doAction(btn,$event)\">\r\n <span>{{btn.name}}</span></button>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngFor=\"let valid of item.validators\">\r\n <ng-container *ngIf=\"atrForm.get(item.key).hasError(valid.type) && (atrForm.get(item.key).dirty )\">\r\n <div style=\"color:red; height: 15px;margin: 0;line-height: 15px;\">{{valid.errorLabel}}</div>\r\n </ng-container>\r\n </ng-container>\r\n <button nz-button nzType=\"default\" style=\"cursor: default;background-color: #fafafa;color: black\"\r\n *ngIf=\"item.ends\" disabled>\r\n {{item.ends}}\r\n </button>\r\n <button *ngIf=\"item.button?.isShow\" type=\"button\" class=\"ant-btn ant-btn-primary\"\r\n (click)=\"doAction(item.button,$event)\">\r\n <span>{{item.button.name}}</span></button>\r\n </div>\r\n <div *ngIf=\"item.proposal\" style=\"color: red;width: 100%\">{{item.proposal}}</div>\r\n </nz-form-control>\r\n </nz-form-item>\r\n <ng-content *ngTemplateOutlet=\"item.temp\"></ng-content>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n</form>\r\n", styles: [":host ::ng-deep .ant-form-item{margin:0 0 10px}:host ::ng-deep .ant-form-item-label{text-align:left}:host ::ng-deep nz-input-number{width:100%}:host .form-title{height:50px;line-height:50px;font-weight:500;font-size:20px;border-bottom:1px solid #e8e8e8;border-radius:4px 4px 0 0;margin-bottom:14px;margin-top:11px}\n"], components: [{ type: i5.ViewFormComponent, selector: "atr-view-form", inputs: ["formOpts", "atrForm", "dicts", "items"] }, { type: i6.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { type: i6.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon"], exportAs: ["nzFormLabel"] }, { type: i6.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { type: i7.NzTreeSelectComponent, selector: "nz-tree-select", inputs: ["nzId", "nzAllowClear", "nzShowExpand", "nzShowLine", "nzDropdownMatchSelectWidth", "nzCheckable", "nzHideUnMatched", "nzShowIcon", "nzShowSearch", "nzDisabled", "nzAsyncData", "nzMultiple", "nzDefaultExpandAll", "nzCheckStrictly", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzExpandedIcon", "nzNotFoundContent", "nzNodes", "nzOpen", "nzSize", "nzPlaceHolder", "nzDropdownStyle", "nzDropdownClassName", "nzBackdrop", "nzStatus", "nzExpandedKeys", "nzDisplayWith", "nzMaxTagCount", "nzMaxTagPlaceholder", "nzTreeTemplate"], outputs: ["nzOpenChange", "nzCleared", "nzRemoved", "nzExpandChange", "nzTreeClick", "nzTreeCheckBoxChange"], exportAs: ["nzTreeSelect"] }, { type: i8.SelectIconsComponent, selector: "app-select-icons", inputs: ["readonly", "placeholder"] }, { type: i9.NzInputNumberComponent, selector: "nz-input-number", inputs: ["nzSize", "nzMin", "nzMax", "nzParser", "nzPrecision", "nzPrecisionMode", "nzPlaceHolder", "nzStatus", "nzStep", "nzInputMode", "nzId", "nzDisabled", "nzReadOnly", "nzAutoFocus", "nzBorderless", "nzFormatter"], outputs: ["nzBlur", "nzFocus"], exportAs: ["nzInputNumber"] }, { type: i10.NzRadioGroupComponent, selector: "nz-radio-group", inputs: ["nzDisabled", "nzButtonStyle", "nzSize", "nzName"], exportAs: ["nzRadioGroup"] }, { type: i10.NzRadioComponent, selector: "[nz-radio],[nz-radio-button]", inputs: ["nzValue", "nzDisabled", "nzAutoFocus"], exportAs: ["nzRadio"] }, { type: i11.NzCheckboxWrapperComponent, selector: "nz-checkbox-wrapper", outputs: ["nzOnChange"], exportAs: ["nzCheckboxWrapper"] }, { type: i11.NzCheckboxComponent, selector: "[nz-checkbox]", inputs: ["nzValue", "nzAutoFocus", "nzDisabled", "nzIndeterminate", "nzChecked", "nzId"], outputs: ["nzCheckedChange"], exportAs: ["nzCheckbox"] }, { type: i12.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }, { type: i12.NzOptionComponent, selector: "nz-option", inputs: ["nzLabel", "nzValue", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { type: i13.NzCascaderComponent, selector: "nz-cascader, [nz-cascader]", inputs: ["nzOptionRender", "nzShowInput", "nzShowArrow", "nzAllowClear", "nzAutoFocus", "nzChangeOnSelect", "nzDisabled", "nzColumnClassName", "nzExpandTrigger", "nzValueProperty", "nzLabelRender", "nzLabelProperty", "nzNotFoundContent", "nzSize", "nzBackdrop", "nzShowSearch", "nzPlaceHolder", "nzMenuClassName", "nzMenuStyle", "nzMouseEnterDelay", "nzMouseLeaveDelay", "nzStatus", "nzTriggerAction", "nzChangeOn", "nzLoadData", "nzSuffixIcon", "nzExpandIcon", "nzOptions"], outputs: ["nzVisibleChange", "nzSelectionChange", "nzSelect", "nzClear"], exportAs: ["nzCascader"] }, { type: i14.NzDatePickerComponent, selector: "nz-date-picker,nz-week-picker,nz-month-picker,nz-year-picker,nz-range-picker", inputs: ["nzAllowClear", "nzAutoFocus", "nzDisabled", "nzBorderless", "nzInputReadOnly", "nzInline", "nzOpen", "nzDisabledDate", "nzLocale", "nzPlaceHolder", "nzPopupStyle", "nzDropdownClassName", "nzSize", "nzStatus", "nzFormat", "nzDateRender", "nzDisabledTime", "nzRenderExtraFooter", "nzShowToday", "nzMode", "nzShowNow", "nzRanges", "nzDefaultPickerValue", "nzSeparator", "nzSuffixIcon", "nzBackdrop", "nzId", "nzPlacement", "nzShowTime"], outputs: ["nzOnPanelChange", "nzOnCalendarChange", "nzOnOk", "nzOnOpenChange"], exportAs: ["nzDatePicker"] }, { type: i15.UploadComponent, selector: "atr-img-upload", inputs: ["opts", "isEdit", "allowChangSeq", "showUploadList"], outputs: ["afterChange", "optsChange", "onBeforeUpload"] }, { type: i16.QuillEditorComponent, selector: "app-quill-editor", inputs: ["placeholder", "styles", "value", "readOnly", "needImgSeq"] }, { type: i17.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }], directives: [{ type: i18.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.NzFormDirective, selector: "[nz-form]", inputs: ["nzLayout", "nzNoColon", "nzAutoTips", "nzDisableAutoTips", "nzTooltipIcon"], exportAs: ["nzForm"] }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i19.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { type: i18.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i19.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { type: i18.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i20.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i14.NzRangePickerComponent, selector: "nz-range-picker", exportAs: ["nzRangePicker"] }, { type: i21.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { type: i22.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }], pipes: { "safeHtml": i23.SafeHtmlPipe, "defVal": i24.DefaultValPipe } });
540
540
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AtrFormComponent, decorators: [{
541
541
  type: Component,
542
542
  args: [{ selector: 'atr-form', template: "<atr-view-form *ngIf=\"formOpts.type == 'view'\" [dicts]=\"dicts\" [atrForm]=\"atrForm\"\r\n [formOpts]=\"formOpts\"></atr-view-form>\r\n\r\n<form nz-form [formGroup]=\"atrForm\" *ngIf=\"formOpts.type != 'view'\">\r\n <div nz-row nzGutter=\"8\" nzType=\"flex\" nzAlign=\"top\">\r\n <ng-container *ngFor=\"let item of formOpts.items\">\r\n <div nz-col nzSpan=\"24\" class=\"form-title\" *ngIf=\"item.type == 'title'\">\r\n {{item.label}}\r\n </div>\r\n <div nz-col [nzSpan]=\"item.span\" *ngIf=\"isShow(item.isHidden,item.operator)\">\r\n <ng-content *ngTemplateOutlet=\"item.firstTemp\"></ng-content>\r\n <nz-form-item *ngIf=\"item.type != 'title'\">\r\n <nz-form-label [nzSm]=\"item.lspan\" [nzXs]=\"24\" [nzRequired]=\"isRequired(item)\">{{item.label}}</nz-form-label>\r\n <nz-form-control [nzSm]=\"item.cspan\" [nzXs]=\"24\">\r\n <div style=\"display: flex;width: 100%\">\r\n <nz-tree-select *ngIf=\"item.type == 'treeSelect'\"\r\n [nzNodes]=\"item.treeList\"\r\n nzShowSearch=\"true\"\r\n nzHideUnMatched=\"true\"\r\n nzPlaceHolder=\"{{item.placeholder}}\"\r\n [nzShowSearch]=\"true\"\r\n [formControlName]=\"item.key\"\r\n [nzAllowClear]=\"!item.notNull\"\r\n [nzMultiple]=\"item.selectUrl.isMultiple\"\r\n [nzDisabled]=\"item.readonly\"\r\n style=\"flex: 1\"\r\n >\r\n </nz-tree-select>\r\n <nz-tree-select *ngIf=\"item.type == 'treeSelect'\"\r\n [nzAllowClear]=\"!item.notNull\"\r\n [nzNodes]=\"item.treeList\"\r\n nzShowSearch=\"true\"\r\n nzHideUnMatched=\"true\"\r\n nzPlaceHolder=\"{{item.placeholder}}\"\r\n [nzShowSearch]=\"true\"\r\n [formControlName]=\"item.key\"\r\n [nzMultiple]=\"item.selectUrl.isMultiple\"\r\n [nzDisabled]=\"item.readonly\" style=\"flex: 1\"\r\n >\r\n </nz-tree-select>\r\n <app-select-icons *ngIf=\"item.type == 'selectIcon'\" nz-input placeholder=\"{{item.placeholder}}\"\r\n [readonly]=\"item.readonly \"\r\n style=\"flex: 1\"\r\n [formControlName]=\"item.key\">\r\n </app-select-icons>\r\n <input *ngIf=\"item.type == 'text'\" nz-input placeholder=\"{{item.placeholder}}\"\r\n [readonly]=\"item.readonly || formOpts.type == 'view'\"\r\n [formControlName]=\"item.key\"/>\r\n <textarea *ngIf=\"item.type == 'textarea'\" nz-input [rows]=\"item.rows\" placeholder=\"{{item.placeholder}}\"\r\n [formControlName]=\"item.key\" [readonly]=\"item.readonly|| formOpts.type == 'view'\"></textarea>\r\n <nz-input-number *ngIf=\"item.type == 'number'\" nzPlaceHolder=\"{{item.placeholder}}\"\r\n [nzMin]=\"item.minNumber\" [nzMax]=\"item.maxNumber\"\r\n [formControlName]=\"item.key\"></nz-input-number>\r\n <nz-radio-group *ngIf=\"item.type == 'radio'\" [formControlName]=\"item.key\">\r\n <label nz-radio *ngFor=\"let o of item.dictList\" [nzValue]=\"o.value\">{{o.label}}</label>\r\n </nz-radio-group>\r\n <nz-checkbox-wrapper *ngIf=\"item.type == 'checkbox'\" [formControlName]=\"item.key\">\r\n <div nz-row>\r\n <div *ngFor=\"let o of item.dictList\" nz-col>\r\n <label nz-checkbox [nzValue]=\"o.value\">{{o.label}}</label></div>\r\n </div>\r\n </nz-checkbox-wrapper>\r\n <nz-select\r\n [nzShowSearch]=\"true\"\r\n *ngIf=\"item.type == 'select'\"\r\n nzPlaceHolder=\"{{item.placeholder}}\"\r\n nzAllowClear=\"true\"\r\n [formControlName]=\"item.key\"\r\n nzServerSearch\r\n [nzMode]=\"item.nzMode || 'default'\"\r\n nzDisabled=\"{{item.readonly|| formOpts.type == 'view'}}\"\r\n >\r\n <nz-option *ngFor=\"let o of dicts[item.dictCode]\" [nzLabel]=\"o.typeName\" [nzValue]=\"o.id\"></nz-option>\r\n </nz-select>\r\n <nz-select\r\n [nzShowSearch]=\"true\"\r\n *ngIf=\"item.type == 'selectc'\"\r\n nzPlaceHolder=\"{{item.placeholder}}\"\r\n nzAllowClear=\"true\"\r\n [formControlName]=\"item.key\"\r\n nzServerSearch\r\n [nzMode]=\"item.nzMode || 'default'\"\r\n nzDisabled=\"{{item.readonly|| formOpts.type == 'view'}}\"\r\n >\r\n <nz-option *ngFor=\"let o of item.dictList\" [nzLabel]=\"o.label\" [nzValue]=\"o.value\"></nz-option>\r\n </nz-select>\r\n <nz-cascader [nzDisabled]=\"item.readonly\" style=\"flex: 1\" [nzAllowClear]=\"!item.notNull\"\r\n [nzValueProperty]=\"'nzValueProperty'\"\r\n [nzShowSearch]=\"true\" *ngIf=\"item.type == 'cascader'\"\r\n [nzOptions]=\"item.dictList\" [formControlName]=\"item.key\"></nz-cascader>\r\n <nz-date-picker *ngIf=\"item.type == 'date'\" [nzFormat]=\"item.dateFormat ? item.dateFormat : 'yyyy-MM-dd'\"\r\n [nzShowTime]=\"showTime(item)\" style=\"flex: 1\"\r\n [nzDisabled]=\"formOpts.type == 'view' || item.readonly \"\r\n [formControlName]=\"item.key\"></nz-date-picker>\r\n <nz-range-picker *ngIf=\"item.type == 'dateRange'\" style=\"flex: 1\"\r\n [nzShowTime]=\"item.nzShowTime? item.nzShowTime : false\"\r\n [formControlName]=\"item.key\"\r\n [nzFormat]=\"item.nzShowTime && item.nzShowTime.nzFormat ? ('yyyy-MM-dd '+ item.nzShowTime.nzFormat) : 'yyyy-MM-dd'\"\r\n [nzPlaceHolder]=\"['\u5F00\u59CB\u65F6\u95F4', '\u7ED3\u675F\u65F6\u95F4']\"></nz-range-picker>\r\n\r\n <input *ngIf=\"item.type == 'image'\" nz-input [formControlName]=\"item.key\" [hidden]=\"true\"/>\r\n <atr-img-upload *ngIf=\"item.type == 'image'\" [(opts)]=\"item.imageOpts\"\r\n (onBeforeUpload)=\"onBeforeUpload($event,item)\"\r\n (afterChange)=\"imageUploadChange($event)\"></atr-img-upload>\r\n\r\n <!-- <editor *ngIf=\"item.type == 'editor'\" [formControlName]=\"item.key\" [config]=\"{initialFrameHeight:item.height}\" ></editor>-->\r\n <app-quill-editor *ngIf=\"item.type == 'editor'\" [formControlName]=\"item.key\" (ngModelChange)=\"editChange($event,item)\"\r\n [styles]=\"{height:item.height > 0 ? item.height + 'px' : '250px'}\"></app-quill-editor>\r\n <div *ngIf=\"item.type == 'word'\" [innerHTML]=\"item.value |defVal:item.defaultValue |safeHtml\">\r\n </div>\r\n <div *ngIf=\"item.type == 'buttons'\">\r\n <ng-container *ngFor=\"let btn of item.buttons\">\r\n <button nz-button type=\"button\" [nzType]=\"btn.btnType |defVal: 'default'\"\r\n class=\"ant-btn ant-btn-primary\"\r\n style=\"margin-right: 5px\" *ngIf=\"btn.isShow || isShow(false,btn.operator)\"\r\n (click)=\"doAction(btn,$event)\">\r\n <span>{{btn.name}}</span></button>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngFor=\"let valid of item.validators\">\r\n <ng-container *ngIf=\"atrForm.get(item.key).hasError(valid.type) && (atrForm.get(item.key).dirty )\">\r\n <div style=\"color:red; height: 15px;margin: 0;line-height: 15px;\">{{valid.errorLabel}}</div>\r\n </ng-container>\r\n </ng-container>\r\n <button nz-button nzType=\"default\" style=\"cursor: default;background-color: #fafafa;color: black\"\r\n *ngIf=\"item.ends\" disabled>\r\n {{item.ends}}\r\n </button>\r\n <button *ngIf=\"item.button?.isShow\" type=\"button\" class=\"ant-btn ant-btn-primary\"\r\n (click)=\"doAction(item.button,$event)\">\r\n <span>{{item.button.name}}</span></button>\r\n </div>\r\n <div *ngIf=\"item.proposal\" style=\"color: red;width: 100%\">{{item.proposal}}</div>\r\n </nz-form-control>\r\n </nz-form-item>\r\n <ng-content *ngTemplateOutlet=\"item.temp\"></ng-content>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n</form>\r\n", styles: [":host ::ng-deep .ant-form-item{margin:0 0 10px}:host ::ng-deep .ant-form-item-label{text-align:left}:host ::ng-deep nz-input-number{width:100%}:host .form-title{height:50px;line-height:50px;font-weight:500;font-size:20px;border-bottom:1px solid #e8e8e8;border-radius:4px 4px 0 0;margin-bottom:14px;margin-top:11px}\n"] }]
@@ -46,11 +46,13 @@ export class LocalUploadComponent {
46
46
  }
47
47
  }
48
48
  LocalUploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: LocalUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
49
- LocalUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: LocalUploadComponent, selector: "atr-local-upload", inputs: { url: "url", nzAccept: "nzAccept", name: "name", code: "code", withoutRole: "withoutRole" }, outputs: { afterChange: "afterChange" }, ngImport: i0, template: "<ng-container *ngIf=\"!withoutRole\">\r\n <nz-upload [nzAction]=\"url\" [nzAccept]=\"nzAccept\" [nzHeaders]=\"header\" [nzShowUploadList]=\"showList\"\r\n (nzChange)=\"onChange($event)\"\r\n *atrRole=\"code\" [nzLimit]='1'>\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\"></i><span> {{name}}</span></button>\r\n </nz-upload>\r\n</ng-container>\r\n<ng-container *ngIf=\"withoutRole\">\r\n <nz-upload [nzAction]=\"url\" [nzAccept]=\"nzAccept\" [nzHeaders]=\"header\" [nzShowUploadList]=\"showList\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzLimit]='1'>\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\"></i><span> {{name}}</span></button>\r\n </nz-upload>\r\n</ng-container>\r\n", styles: [""], components: [{ type: i1.NzUploadComponent, selector: "nz-upload", inputs: ["nzType", "nzLimit", "nzSize", "nzFileType", "nzAccept", "nzAction", "nzDirectory", "nzOpenFileDialogOnClick", "nzBeforeUpload", "nzCustomRequest", "nzData", "nzFilter", "nzFileList", "nzDisabled", "nzHeaders", "nzListType", "nzMultiple", "nzName", "nzShowUploadList", "nzShowButton", "nzWithCredentials", "nzRemove", "nzPreview", "nzPreviewFile", "nzPreviewIsImage", "nzTransformFile", "nzDownload", "nzIconRender", "nzFileListRender"], outputs: ["nzChange", "nzFileListChange"], exportAs: ["nzUpload"] }, { type: i2.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.AtrRoleDirective, selector: "[atrRole]", inputs: ["atrRole"] }, { type: i5.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { type: i6.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { type: i7.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
49
+ LocalUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: LocalUploadComponent, selector: "atr-local-upload", inputs: { beforeUpload: "beforeUpload", url: "url", nzAccept: "nzAccept", name: "name", code: "code", withoutRole: "withoutRole" }, outputs: { afterChange: "afterChange" }, ngImport: i0, template: "<ng-container *ngIf=\"!withoutRole\">\r\n <nz-upload [nzAction]=\"url\" [nzAccept]=\"nzAccept\" [nzHeaders]=\"header\" [nzShowUploadList]=\"showList\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n (nzChange)=\"onChange($event)\"\r\n *atrRole=\"code\" [nzLimit]='1'>\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\"></i><span> {{name}}</span></button>\r\n </nz-upload>\r\n</ng-container>\r\n<ng-container *ngIf=\"withoutRole\">\r\n <nz-upload [nzAction]=\"url\" [nzAccept]=\"nzAccept\" [nzHeaders]=\"header\" [nzShowUploadList]=\"showList\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzLimit]='1'>\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\"></i><span> {{name}}</span></button>\r\n </nz-upload>\r\n</ng-container>\r\n", styles: [""], components: [{ type: i1.NzUploadComponent, selector: "nz-upload", inputs: ["nzType", "nzLimit", "nzSize", "nzFileType", "nzAccept", "nzAction", "nzDirectory", "nzOpenFileDialogOnClick", "nzBeforeUpload", "nzCustomRequest", "nzData", "nzFilter", "nzFileList", "nzDisabled", "nzHeaders", "nzListType", "nzMultiple", "nzName", "nzShowUploadList", "nzShowButton", "nzWithCredentials", "nzRemove", "nzPreview", "nzPreviewFile", "nzPreviewIsImage", "nzTransformFile", "nzDownload", "nzIconRender", "nzFileListRender"], outputs: ["nzChange", "nzFileListChange"], exportAs: ["nzUpload"] }, { type: i2.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.AtrRoleDirective, selector: "[atrRole]", inputs: ["atrRole"] }, { type: i5.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { type: i6.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { type: i7.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
50
50
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: LocalUploadComponent, decorators: [{
51
51
  type: Component,
52
- args: [{ selector: 'atr-local-upload', template: "<ng-container *ngIf=\"!withoutRole\">\r\n <nz-upload [nzAction]=\"url\" [nzAccept]=\"nzAccept\" [nzHeaders]=\"header\" [nzShowUploadList]=\"showList\"\r\n (nzChange)=\"onChange($event)\"\r\n *atrRole=\"code\" [nzLimit]='1'>\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\"></i><span> {{name}}</span></button>\r\n </nz-upload>\r\n</ng-container>\r\n<ng-container *ngIf=\"withoutRole\">\r\n <nz-upload [nzAction]=\"url\" [nzAccept]=\"nzAccept\" [nzHeaders]=\"header\" [nzShowUploadList]=\"showList\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzLimit]='1'>\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\"></i><span> {{name}}</span></button>\r\n </nz-upload>\r\n</ng-container>\r\n", styles: [""] }]
53
- }], ctorParameters: function () { return []; }, propDecorators: { url: [{
52
+ args: [{ selector: 'atr-local-upload', template: "<ng-container *ngIf=\"!withoutRole\">\r\n <nz-upload [nzAction]=\"url\" [nzAccept]=\"nzAccept\" [nzHeaders]=\"header\" [nzShowUploadList]=\"showList\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n (nzChange)=\"onChange($event)\"\r\n *atrRole=\"code\" [nzLimit]='1'>\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\"></i><span> {{name}}</span></button>\r\n </nz-upload>\r\n</ng-container>\r\n<ng-container *ngIf=\"withoutRole\">\r\n <nz-upload [nzAction]=\"url\" [nzAccept]=\"nzAccept\" [nzHeaders]=\"header\" [nzShowUploadList]=\"showList\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzLimit]='1'>\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\"></i><span> {{name}}</span></button>\r\n </nz-upload>\r\n</ng-container>\r\n", styles: [""] }]
53
+ }], ctorParameters: function () { return []; }, propDecorators: { beforeUpload: [{
54
+ type: Input
55
+ }], url: [{
54
56
  type: Input
55
57
  }], nzAccept: [{
56
58
  type: Input
@@ -63,4 +65,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
63
65
  }], afterChange: [{
64
66
  type: Output
65
67
  }] } });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvbG9jYWwtdXBsb2FkL2xvY2FsLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL2xvY2FsLXVwbG9hZC9sb2NhbC11cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU3RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQzs7Ozs7Ozs7O0FBU3ZFLE1BQU0sT0FBTyxvQkFBb0I7SUFXL0I7UUFSUyxhQUFRLEdBQUcsMEJBQTBCLENBQUM7UUFLL0MsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVwRCxhQUFRLEdBQVEsS0FBSyxDQUFDO1FBTXRCLFdBQU0sR0FBSSxDQUFDLElBQWtCLEVBQUUsRUFBRTtZQUMvQixJQUFJLEdBQUcsR0FBRztnQkFDUixjQUFjLEVBQUMsS0FBSztnQkFDcEIsT0FBTyxFQUFHLGdCQUFnQixDQUFDLFlBQVksRUFBRTtnQkFDekMscUNBQXFDO2FBQ3RDLENBQUE7WUFFRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQztJQWJjLENBQUM7SUFFakIsUUFBUTtRQUNOLDBEQUEwRDtJQUM1RCxDQUFDO0lBVUQsUUFBUSxDQUFDLE1BQTJCO1FBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEIsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRTtZQUN4RCxJQUFJLFFBQVEsR0FBVSxFQUFFLENBQUM7WUFDekIsS0FBSyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUNoQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLEVBQUU7b0JBQzVCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQzNCLFNBQVM7aUJBQ1Y7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUN0QixJQUFJLGFBQWEsR0FBUSxJQUFJLENBQUMsYUFBYSxDQUFBO29CQUMzQyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLEVBQUU7d0JBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7cUJBQ3BDO2lCQUNGO2FBQ0Y7WUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQjtJQUNILENBQUM7O2tIQTVDVSxvQkFBb0I7c0dBQXBCLG9CQUFvQix1TUNYakMsdXdCQWNBOzRGREhhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0I7MEVBTW5CLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFTixXQUFXO3NCQURWLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge056VXBsb2FkQ2hhbmdlUGFyYW0sIE56VXBsb2FkRmlsZX0gZnJvbSAnbmctem9ycm8tYW50ZC91cGxvYWQvbmctem9ycm8tYW50ZC11cGxvYWQnO1xyXG5pbXBvcnQge0xvY2FsU3RvcmFnZVV0aWx9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3V0aWxzL2xvY2Fsc3RvcmFnZS51dGlsXCI7XHJcbmltcG9ydCB7VG9vbHNVdGlsfSBmcm9tIFwiLi4vLi4vLi4vY29yZS91dGlscy9Ub29sc1V0aWxcIjtcclxuaW1wb3J0IHthdHJfc3RhdGljX2RhdGFzfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9iYXNlL2F0ci1jb21tb25cIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXRyLWxvY2FsLXVwbG9hZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xvY2FsLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbG9jYWwtdXBsb2FkLmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExvY2FsVXBsb2FkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgdXJsOmFueTtcclxuICBASW5wdXQoKSBuekFjY2VwdCA9ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnO1xyXG4gIEBJbnB1dCgpIG5hbWU6YW55O1xyXG4gIEBJbnB1dCgpIGNvZGU6YW55O1xyXG4gIEBJbnB1dCgpIHdpdGhvdXRSb2xlOmFueTtcclxuICBAT3V0cHV0KClcclxuICBhZnRlckNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHNob3dMaXN0IDphbnkgPSBmYWxzZTtcclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIHRoaXMuaGVhZGVyID0gdGhpcy5nZXREZWZhdWx0SGVhZGVyKG5ldyBIdHRwSGVhZGVycygpKTtcclxuICB9XHJcbiAgaGVhZGVyICA9IChmaWxlOiBOelVwbG9hZEZpbGUpID0+IHtcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwieC1oZWFkZXItYXRyXCI6XCJ3ZWJcIixcclxuICAgICAgXCJ0b2tlblwiIDogTG9jYWxTdG9yYWdlVXRpbC5nZXRVc2VyVG9rZW4oKSxcclxuICAgICAgLy8gXCJvcmdDb2RlXCIgOiBUb29sc1V0aWwuZ2V0T3JnQ29kZSgpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxuICB9O1xyXG4gIG9uQ2hhbmdlKHBhcmFtczogTnpVcGxvYWRDaGFuZ2VQYXJhbSkge1xyXG4gICAgY29uc29sZS5sb2cocGFyYW1zKTtcclxuICAgIGlmIChwYXJhbXMudHlwZSA9PSBcInN1Y2Nlc3NcIiB8fCBwYXJhbXMudHlwZSA9PSBcInJlbW92ZWRcIikge1xyXG4gICAgICBsZXQgZmlsZVVybHM6IGFueVtdID0gW107XHJcbiAgICAgIGZvciAobGV0IGZpbGUgb2YgcGFyYW1zLmZpbGVMaXN0KSB7XHJcbiAgICAgICAgaWYgKGZpbGVbXCJrZXlcIl0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBmaWxlVXJscy5wdXNoKGZpbGVbXCJrZXlcIl0pO1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWxlLm9yaWdpbkZpbGVPYmopIHtcclxuICAgICAgICAgIGxldCBvcmlnaW5GaWxlT2JqOiBhbnkgPSBmaWxlLm9yaWdpbkZpbGVPYmpcclxuICAgICAgICAgIGlmIChvcmlnaW5GaWxlT2JqW1wia2V5XCJdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBmaWxlVXJscy5wdXNoKG9yaWdpbkZpbGVPYmpbXCJrZXlcIl0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmFmdGVyQ2hhbmdlLmVtaXQocGFyYW1zKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gZ2V0RGVmYXVsdEhlYWRlcihfaGVhZGVyczpIdHRwSGVhZGVycyk6SHR0cEhlYWRlcnN7XHJcbiAgLy8gICBfaGVhZGVycyA9IF9oZWFkZXJzLnNldChcIngtaGVhZGVyLWF0clwiLFwibWFuYWdlXCIpO1xyXG4gIC8vICAgX2hlYWRlcnMgPSBfaGVhZGVycy5zZXQoXCJ0b2tlblwiLExvY2FsU3RvcmFnZVV0aWwuZ2V0VXNlclRva2VuKCkpO1xyXG4gIC8vICAgX2hlYWRlcnMgPSBfaGVhZGVycy5zZXQoXCJ1c2VySWRcIixMb2NhbFN0b3JhZ2VVdGlsLmdldFVzZXJJZCgpKTtcclxuICAvLyAgIF9oZWFkZXJzID0gX2hlYWRlcnMuc2V0KFwib3JnQ29kZVwiLFRvb2xzVXRpbC5nZXRPcmdDb2RlKCkpO1xyXG4gIC8vICAgcmV0dXJuIF9oZWFkZXJzO1xyXG4gIC8vIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIXdpdGhvdXRSb2xlXCI+XHJcbiAgPG56LXVwbG9hZCBbbnpBY3Rpb25dPVwidXJsXCIgW256QWNjZXB0XT1cIm56QWNjZXB0XCIgW256SGVhZGVyc109XCJoZWFkZXJcIiBbbnpTaG93VXBsb2FkTGlzdF09XCJzaG93TGlzdFwiXHJcbiAgICAgICAgICAgICAobnpDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAqYXRyUm9sZT1cImNvZGVcIiBbbnpMaW1pdF09JzEnPlxyXG4gICAgPGJ1dHRvbiBuei1idXR0b24gbnpTaXplPVwic21hbGxcIj48aSBuei1pY29uIG56VHlwZT1cInVwbG9hZFwiPjwvaT48c3Bhbj4ge3tuYW1lfX08L3NwYW4+PC9idXR0b24+XHJcbiAgPC9uei11cGxvYWQ+XHJcbjwvbmctY29udGFpbmVyPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwid2l0aG91dFJvbGVcIj5cclxuICA8bnotdXBsb2FkIFtuekFjdGlvbl09XCJ1cmxcIiBbbnpBY2NlcHRdPVwibnpBY2NlcHRcIiBbbnpIZWFkZXJzXT1cImhlYWRlclwiIFtuelNob3dVcGxvYWRMaXN0XT1cInNob3dMaXN0XCJcclxuICAgICAgICAgICAgIChuekNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgIFtuekxpbWl0XT0nMSc+XHJcbiAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelNpemU9XCJzbWFsbFwiPjxpIG56LWljb24gbnpUeXBlPVwidXBsb2FkXCI+PC9pPjxzcGFuPiB7e25hbWV9fTwvc3Bhbj48L2J1dHRvbj5cclxuICA8L256LXVwbG9hZD5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvbG9jYWwtdXBsb2FkL2xvY2FsLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL2xvY2FsLXVwbG9hZC9sb2NhbC11cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU3RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQzs7Ozs7Ozs7O0FBVXZFLE1BQU0sT0FBTyxvQkFBb0I7SUFXL0I7UUFSUyxhQUFRLEdBQUcsMEJBQTBCLENBQUM7UUFLL0MsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVwRCxhQUFRLEdBQVEsS0FBSyxDQUFDO1FBTXRCLFdBQU0sR0FBSSxDQUFDLElBQWtCLEVBQUUsRUFBRTtZQUMvQixJQUFJLEdBQUcsR0FBRztnQkFDUixjQUFjLEVBQUMsS0FBSztnQkFDcEIsT0FBTyxFQUFHLGdCQUFnQixDQUFDLFlBQVksRUFBRTtnQkFDekMscUNBQXFDO2FBQ3RDLENBQUE7WUFFRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQztJQWJjLENBQUM7SUFFakIsUUFBUTtRQUNOLDBEQUEwRDtJQUM1RCxDQUFDO0lBVUQsUUFBUSxDQUFDLE1BQTJCO1FBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEIsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRTtZQUN4RCxJQUFJLFFBQVEsR0FBVSxFQUFFLENBQUM7WUFDekIsS0FBSyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUNoQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLEVBQUU7b0JBQzVCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQzNCLFNBQVM7aUJBQ1Y7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUN0QixJQUFJLGFBQWEsR0FBUSxJQUFJLENBQUMsYUFBYSxDQUFBO29CQUMzQyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLEVBQUU7d0JBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7cUJBQ3BDO2lCQUNGO2FBQ0Y7WUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQjtJQUNILENBQUM7O2tIQTVDVSxvQkFBb0I7c0dBQXBCLG9CQUFvQixxT0NaakMsMjJCQWdCQTs0RkRKYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usa0JBQWtCOzBFQUtuQixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFTixXQUFXO3NCQURWLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge056VXBsb2FkQ2hhbmdlUGFyYW0sIE56VXBsb2FkRmlsZX0gZnJvbSAnbmctem9ycm8tYW50ZC91cGxvYWQvbmctem9ycm8tYW50ZC11cGxvYWQnO1xyXG5pbXBvcnQge0xvY2FsU3RvcmFnZVV0aWx9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3V0aWxzL2xvY2Fsc3RvcmFnZS51dGlsXCI7XHJcbmltcG9ydCB7VG9vbHNVdGlsfSBmcm9tIFwiLi4vLi4vLi4vY29yZS91dGlscy9Ub29sc1V0aWxcIjtcclxuaW1wb3J0IHthdHJfc3RhdGljX2RhdGFzfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9iYXNlL2F0ci1jb21tb25cIjtcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhdHItbG9jYWwtdXBsb2FkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbG9jYWwtdXBsb2FkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9sb2NhbC11cGxvYWQuY29tcG9uZW50Lmxlc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9jYWxVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGJlZm9yZVVwbG9hZDogYW55O1xyXG4gIEBJbnB1dCgpIHVybDphbnk7XHJcbiAgQElucHV0KCkgbnpBY2NlcHQgPSAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJztcclxuICBASW5wdXQoKSBuYW1lOmFueTtcclxuICBASW5wdXQoKSBjb2RlOmFueTtcclxuICBASW5wdXQoKSB3aXRob3V0Um9sZTphbnk7XHJcbiAgQE91dHB1dCgpXHJcbiAgYWZ0ZXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBzaG93TGlzdCA6YW55ID0gZmFsc2U7XHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyB0aGlzLmhlYWRlciA9IHRoaXMuZ2V0RGVmYXVsdEhlYWRlcihuZXcgSHR0cEhlYWRlcnMoKSk7XHJcbiAgfVxyXG4gIGhlYWRlciAgPSAoZmlsZTogTnpVcGxvYWRGaWxlKSA9PiB7XHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBcIngtaGVhZGVyLWF0clwiOlwid2ViXCIsXHJcbiAgICAgIFwidG9rZW5cIiA6IExvY2FsU3RvcmFnZVV0aWwuZ2V0VXNlclRva2VuKCksXHJcbiAgICAgIC8vIFwib3JnQ29kZVwiIDogVG9vbHNVdGlsLmdldE9yZ0NvZGUoKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvYmo7XHJcbiAgfTtcclxuICBvbkNoYW5nZShwYXJhbXM6IE56VXBsb2FkQ2hhbmdlUGFyYW0pIHtcclxuICAgIGNvbnNvbGUubG9nKHBhcmFtcyk7XHJcbiAgICBpZiAocGFyYW1zLnR5cGUgPT0gXCJzdWNjZXNzXCIgfHwgcGFyYW1zLnR5cGUgPT0gXCJyZW1vdmVkXCIpIHtcclxuICAgICAgbGV0IGZpbGVVcmxzOiBhbnlbXSA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBmaWxlIG9mIHBhcmFtcy5maWxlTGlzdCkge1xyXG4gICAgICAgIGlmIChmaWxlW1wia2V5XCJdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgZmlsZVVybHMucHVzaChmaWxlW1wia2V5XCJdKTtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsZS5vcmlnaW5GaWxlT2JqKSB7XHJcbiAgICAgICAgICBsZXQgb3JpZ2luRmlsZU9iajogYW55ID0gZmlsZS5vcmlnaW5GaWxlT2JqXHJcbiAgICAgICAgICBpZiAob3JpZ2luRmlsZU9ialtcImtleVwiXSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZmlsZVVybHMucHVzaChvcmlnaW5GaWxlT2JqW1wia2V5XCJdKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5hZnRlckNoYW5nZS5lbWl0KHBhcmFtcyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIGdldERlZmF1bHRIZWFkZXIoX2hlYWRlcnM6SHR0cEhlYWRlcnMpOkh0dHBIZWFkZXJze1xyXG4gIC8vICAgX2hlYWRlcnMgPSBfaGVhZGVycy5zZXQoXCJ4LWhlYWRlci1hdHJcIixcIm1hbmFnZVwiKTtcclxuICAvLyAgIF9oZWFkZXJzID0gX2hlYWRlcnMuc2V0KFwidG9rZW5cIixMb2NhbFN0b3JhZ2VVdGlsLmdldFVzZXJUb2tlbigpKTtcclxuICAvLyAgIF9oZWFkZXJzID0gX2hlYWRlcnMuc2V0KFwidXNlcklkXCIsTG9jYWxTdG9yYWdlVXRpbC5nZXRVc2VySWQoKSk7XHJcbiAgLy8gICBfaGVhZGVycyA9IF9oZWFkZXJzLnNldChcIm9yZ0NvZGVcIixUb29sc1V0aWwuZ2V0T3JnQ29kZSgpKTtcclxuICAvLyAgIHJldHVybiBfaGVhZGVycztcclxuICAvLyB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF3aXRob3V0Um9sZVwiPlxyXG4gIDxuei11cGxvYWQgW256QWN0aW9uXT1cInVybFwiIFtuekFjY2VwdF09XCJuekFjY2VwdFwiIFtuekhlYWRlcnNdPVwiaGVhZGVyXCIgW256U2hvd1VwbG9hZExpc3RdPVwic2hvd0xpc3RcIlxyXG4gICAgICAgICAgICAgW256QmVmb3JlVXBsb2FkXT1cImJlZm9yZVVwbG9hZFwiXHJcbiAgICAgICAgICAgICAobnpDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAqYXRyUm9sZT1cImNvZGVcIiBbbnpMaW1pdF09JzEnPlxyXG4gICAgPGJ1dHRvbiBuei1idXR0b24gbnpTaXplPVwic21hbGxcIj48aSBuei1pY29uIG56VHlwZT1cInVwbG9hZFwiPjwvaT48c3Bhbj4ge3tuYW1lfX08L3NwYW4+PC9idXR0b24+XHJcbiAgPC9uei11cGxvYWQ+XHJcbjwvbmctY29udGFpbmVyPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwid2l0aG91dFJvbGVcIj5cclxuICA8bnotdXBsb2FkIFtuekFjdGlvbl09XCJ1cmxcIiBbbnpBY2NlcHRdPVwibnpBY2NlcHRcIiBbbnpIZWFkZXJzXT1cImhlYWRlclwiIFtuelNob3dVcGxvYWRMaXN0XT1cInNob3dMaXN0XCJcclxuICAgICAgICAgICAgIFtuekJlZm9yZVVwbG9hZF09XCJiZWZvcmVVcGxvYWRcIlxyXG4gICAgICAgICAgICAgKG56Q2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgW256TGltaXRdPScxJz5cclxuICAgIDxidXR0b24gbnotYnV0dG9uIG56U2l6ZT1cInNtYWxsXCI+PGkgbnotaWNvbiBuelR5cGU9XCJ1cGxvYWRcIj48L2k+PHNwYW4+IHt7bmFtZX19PC9zcGFuPjwvYnV0dG9uPlxyXG4gIDwvbnotdXBsb2FkPlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19