atr-components 0.2.228 → 0.2.229

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.
@@ -7,6 +7,18 @@ export declare class ToolsUtil {
7
7
  static isNull(val: any): boolean;
8
8
  static getControlsConfig(dataFrom: any, requiredRule: string[]): any;
9
9
  static httpSucces(res: any): boolean;
10
+ /**
11
+ *判断点是否在坐标区域内
12
+ * @param p 判定的点
13
+ * @param pointsArr
14
+ */
15
+ static judgeInRec(p: {
16
+ x1: any;
17
+ y1: any;
18
+ }, pointsArr: {
19
+ x1: any;
20
+ y1: any;
21
+ }[]): boolean;
10
22
  static diffInput(chng: SimpleChange, action: () => void): void;
11
23
  static diffInputs(chng: SimpleChange[], action: () => void): void;
12
24
  static getYesterday(day: Date): Date;
@@ -37,6 +37,57 @@ export class ToolsUtil {
37
37
  static httpSucces(res) {
38
38
  return ['200', '201'].some(v => res.status == v);
39
39
  }
40
+ /**
41
+ *判断点是否在坐标区域内
42
+ * @param p 判定的点
43
+ * @param pointsArr
44
+ */
45
+ static judgeInRec(p, pointsArr) {
46
+ let px = p.x1, py = p.y1, flag = false, //穿越边框
47
+ inRect = false; //是否在多边形的边或者端点上
48
+ let start = pointsArr[0];
49
+ let end = pointsArr[pointsArr.length - 1];
50
+ //如果数组首尾没有相连,手动添加
51
+ pointsArr = start.x1 != end.x1 || start.y1 != start.y1 ? pointsArr.concat(start) : pointsArr;
52
+ //射线选取Y坐标不变,x正方向
53
+ pointsArr.forEach((item, index) => {
54
+ if (index == pointsArr.length - 1
55
+ || inRect //在多边形的边或者端点上视为在区域内
56
+ ) {
57
+ return;
58
+ }
59
+ let endPoint = pointsArr[index + 1];
60
+ const startX = item.x1, startY = item.y1, endX = endPoint.x1, endY = endPoint.y1;
61
+ //判断点是否在端点上
62
+ if ((px == startX && py == startY)
63
+ || (px == endX && px == endY)) {
64
+ inRect = true;
65
+ return;
66
+ }
67
+ //判断射线重合并且点在边上
68
+ if ((startY == endY)
69
+ && ((px > endX && px < startX
70
+ || (px < endX && px > startX)))) {
71
+ inRect = true;
72
+ return;
73
+ }
74
+ if ((startY < py && endY >= py)
75
+ || (startY >= py && endY < py)) {
76
+ //求射线与线段交点的x坐标,y坐标还是py
77
+ let x = startX + (py - startY) * (endX - startX) / (endY - startY);
78
+ //点在边上
79
+ if (x == px) {
80
+ inRect = true;
81
+ return;
82
+ }
83
+ //x大于px来保证射线朝右
84
+ if (x > px) {
85
+ flag = !flag;
86
+ }
87
+ }
88
+ });
89
+ return inRect || flag;
90
+ }
40
91
  static diffInput(chng, action) {
41
92
  if (chng === undefined)
42
93
  return;
@@ -299,4 +350,4 @@ ToolsUtil.allEqual = (...array) => array.every(item => item === array[0]);
299
350
  * @param array
300
351
  */
301
352
  ToolsUtil.satisfiedFn = (callback, ...array) => array.every(callback);
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9vbHNVdGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvY29yZS91dGlscy9Ub29sc1V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixnQkFBZ0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBSXRFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxNQUFNLE9BQU8sU0FBUztJQWlCcEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFXO1FBQ3pCLElBQUksR0FBRyxHQUFHLDRHQUE0RyxDQUFDO1FBQ3ZILE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFTO1FBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDN0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNsQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuQztRQUNELE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMs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Q3RDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQTtBQW1MTSxrQkFBUSxHQUFHLENBQUMsR0FBRyxLQUFZLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFOUU7Ozs7O0dBS0c7QUFDSSxxQkFBVyxHQUFHLENBQUMsUUFBcUMsRUFBRSxHQUFHLEtBQVksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7anNvbiwgQXRyRm9ybU9wdCwgYXRyX3N0YXRpY19kYXRhc30gZnJvbSAnLi4vYmFzZS9hdHItY29tbW9uJztcclxuaW1wb3J0IHtmb3JtYXREYXRlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0h0dHBIZWFkZXJzfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHtTaW1wbGVDaGFuZ2V9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1ZhbGlkYXRvcnN9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRvb2xzVXRpbCB7XHJcbiAgc3RhdGljIGdldE9yZ0NvZGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyB2YXIgb3JnQ29kZSA9ICcnO1xyXG4gICAgLy8gdmFyIGhyZWZzID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJz8nKVxyXG4gICAgLy8gaWYgKGhyZWZzLmxlbmd0aCA+PSAyKSB7XHJcbiAgICAvLyAgIHZhciBwYXJhbVN0ciA9IGhyZWZzWzFdO1xyXG4gICAgLy8gICAvL+WPguaVsOWtl+espuS4sumHjOacieayoeW4piA9Py8jXHJcbiAgICAvLyAgIG9yZ0NvZGUgPSBwYXJhbVN0ci5zcGxpdCgnPScpWzBdO1xyXG4gICAgLy8gICBvcmdDb2RlID0gb3JnQ29kZS5zcGxpdCgnPycpWzBdO1xyXG4gICAgLy8gICBvcmdDb2RlID0gb3JnQ29kZS5zcGxpdCgnLycpWzBdO1xyXG4gICAgLy8gICBvcmdDb2RlID0gb3JnQ29kZS5zcGxpdCgnIycpWzBdO1xyXG4gICAgLy8gICBvcmdDb2RlID0gb3JnQ29kZS5zcGxpdCgnLycpWzBdO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBpc0Jhc2U2NChzdHJpbmc6IGFueSkge1xyXG4gICAgbGV0IHJlZyA9IC9eXFxzKmRhdGE6KFthLXpdK1xcL1thLXowLTktKy5dKyg7W2Etei1dKz1bYS16MC05LV0rKT8pPyg7YmFzZTY0KT8sKFthLXowLTkhJCYnLCgpKis7PVxcLS5ffjpAXFwvPyVcXHNdKj8pXFxzKiQvaTtcclxuICAgIHJldHVybiByZWcudGVzdChzdHJpbmcpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZGF0YVVSSXRvQmxvYihjb2RlOiBhbnkpIHtcclxuICAgIGNvbnN0IHBhcnRzID0gY29kZS5zcGxpdCgnO2Jhc2U2NCwnKTtcclxuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFydHNbMF0uc3BsaXQoJzonKVsxXTtcclxuICAgIGNvbnN0IHJhdyA9IHdpbmRvdy5hdG9iKHBhcnRzWzFdKTtcclxuICAgIGNvbnN0IHJhd0xlbmd0aCA9IHJhdy5sZW5ndGg7XHJcbiAgICBjb25zdCB1SW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkocmF3TGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmF3TGVuZ3RoOyArK2kpIHtcclxuICAgICAgdUludDhBcnJheVtpXSA9IHJhdy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBCbG9iKFt1SW50OEFycmF5XSwge3R5cGU6IGNvbnRlbnRUeXBlfSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNOdWxsKHZhbDogYW55KSB7XHJcbiAgICBpZiAodmFsIHx8IFsnYm9vbGVhbicsICdzdHJpbmcnLCAnbnVtYmVyJ10uc29tZSh2ID0+IHR5cGVvZiB2YWwgPT0gdikpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldENvbnRyb2xzQ29uZmlnKGRhdGFGcm9tOiBhbnksIHJlcXVpcmVkUnVsZTogc3RyaW5nW10pIHtcclxuICAgIGxldCBjb250cm9sc0NvbmZpZzogYW55ID0ge31cclxuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGFGcm9tKSB7XHJcbiAgICAgIGlmIChyZXF1aXJlZFJ1bGUuc29tZShpdGVtID0+IGl0ZW0gPT0ga2V5KSkge1xyXG4gICAgICAgIGNvbnRyb2xzQ29uZmlnW2tleV0gPSBbZGF0YUZyb21ba2V5XSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnRyb2xzQ29uZmlnW2tleV0gPSBbZGF0YUZyb21ba2V5XV1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRyb2xzQ29uZmlnO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGh0dHBTdWNjZXMocmVzOiBhbnkpIHtcclxuICAgIHJldHVybiBbJzIwMCcsICcyMDEnXS5zb21lKHYgPT4gcmVzLnN0YXR1cyA9PSB2KVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRpZmZJbnB1dChjaG5nOiBTaW1wbGVDaGFuZ2UsIGFjdGlvbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgaWYgKGNobmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBjdXIgPSBKU09OLnN0cmluZ2lmeShjaG5nLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICBsZXQgcHJldiA9IEpTT04uc3RyaW5naWZ5KGNobmcucHJldmlvdXNWYWx1ZSk7XHJcbiAgICBpZiAoY3VyICE9PSBwcmV2KSB7XHJcbiAgICAgIGFjdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRpZmZJbnB1dHMoY2huZzogU2ltcGxlQ2hhbmdlW10sIGFjdGlvbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgaWYgKGNobmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgaWYgKGNobmcubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2huZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgaXRlbSA9IGNobmdbaV07XHJcbiAgICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xyXG4gICAgICBsZXQgY3VyID0gSlNPTi5zdHJpbmdpZnkoaXRlbS5jdXJyZW50VmFsdWUpO1xyXG4gICAgICBsZXQgcHJldiA9IEpTT04uc3RyaW5naWZ5KGl0ZW0ucHJldmlvdXNWYWx1ZSk7XHJcbiAgICAgIGlmIChjdXIgIT09IHByZXYpIHtcclxuICAgICAgICBhY3Rpb24oKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldFllc3RlcmRheShkYXk6IERhdGUpOiBEYXRlIHtcclxuXHJcbiAgICBsZXQgdGltZSA9IGRheS5nZXRUaW1lKCkgLSAxMDAwICogNjAgKiA2MCAqIDI0O1xyXG4gICAgZGF5ID0gbmV3IERhdGUodGltZSk7XHJcblxyXG4gICAgcmV0dXJuIGRheTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRUb21vcnJvd2RheShkYXk6IERhdGUpOiBEYXRlIHtcclxuICAgIGxldCB0aW1lID0gZGF5LmdldFRpbWUoKSArIDEwMDAgKiA2MCAqIDYwICogMjQ7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHRpbWUpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldE5leHRNb250aChkYXk6IERhdGUpIHtcclxuICAgIGxldCBkcyA9IG5ldyBEYXRlKGRheSkuc2V0TW9udGgoZGF5LmdldE1vbnRoKCkgKyAxKTtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkcyk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0VmlkZW9Db3Zlcih1cmw6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIFRvb2xzVXRpbC5nZXRPc3NVcmwodXJsKSArIFwiP3gtb3NzLXByb2Nlc3M9dmlkZW8vc25hcHNob3QsdF8xMDAwMCxtX2Zhc3RcIjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmaXN0RGF5T2ZNb250aChkYXk6IERhdGUpIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShuZXcgRGF0ZShkYXkpLnNldERhdGUoMSkpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGxhc3REYXlPZk1vbnRoKGRheTogRGF0ZSkge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKFRvb2xzVXRpbC5nZXROZXh0TW9udGgoZGF5KS5zZXREYXRlKDApKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRSYW5kb21GaWxlTmFtZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGNvbnN0IGV4cGVjdCA9IDE2O1xyXG4gICAgbGV0IHN0ciA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKTtcclxuICAgIHdoaWxlIChzdHIubGVuZ3RoIDwgZXhwZWN0KSB7XHJcbiAgICAgIHN0ciArPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyLnN1YnN0cmluZygwLCBleHBlY3QpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldEZpbGVFeHQgPSBmdW5jdGlvbiAoZmlsZU5hbWU6IHN0cmluZykge1xyXG4gICAgdmFyIGluZGV4ID0gZmlsZU5hbWUubGFzdEluZGV4T2YoXCIuXCIpO1xyXG4gICAgdmFyIHN1ZmZpeCA9IGZpbGVOYW1lLnN1YnN0cihpbmRleCArIDEpO1xyXG4gICAgcmV0dXJuIHN1ZmZpeDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRIdHRwT3B0aW9ucygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtpc0NvbW1vbkh0dHBIZWFkZXI6IHRydWV9XHJcbiAgfVxyXG5cclxuXHJcbiAgc3RhdGljIHJlc2V0Rm9ybVZhbHVlKG9wdDogQXRyRm9ybU9wdCwganNvbjoganNvbik6IEF0ckZvcm1PcHQge1xyXG4gICAgZm9yIChsZXQgaXRlbSBvZiBvcHQuaXRlbXMpIHtcclxuICAgICAgaXRlbS52YWx1ZSA9IFwiXCI7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0udmFsdWUpO1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhqc29uKSkge1xyXG4gICAgICAgIGlmIChqc29uLmhhc093blByb3BlcnR5KGtleSkgJiYganNvbltrZXldICE9IG51bGwgJiYganNvbltrZXldICE9IHVuZGVmaW5lZCAmJiBrZXkgPT0gaXRlbS5rZXkpIHtcclxuICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT0gJ2RhdGUnKVxyXG4gICAgICAgICAgICBpdGVtLnZhbHVlID0gbmV3IERhdGUoanNvbltrZXldKTtcclxuICAgICAgICAgIGVsc2UgaWYgKGl0ZW0udHlwZSA9PSAnZGF0ZVRpbWUnKSB7XHJcbiAgICAgICAgICAgIGl0ZW0udmFsdWUgPSBuZXcgRGF0ZShqc29uW2tleV0pO1xyXG4gICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIGl0ZW0udmFsdWUgPSBqc29uW2tleV1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvcHQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0Rm9ybWF0RGF0ZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIGxldCBtb250aDogc3RyaW5nIHwgbnVtYmVyID0gZGF0ZS5nZXRNb250aCgpICsgMTtcclxuICAgIGxldCBzdHJEYXRlOiBzdHJpbmcgfCBudW1iZXIgPSBkYXRlLmdldERhdGUoKTtcclxuXHJcbiAgICBpZiAobW9udGggPD0gOSkge1xyXG4gICAgICBtb250aCA9IFwiMFwiICsgbW9udGg7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0ckRhdGUgPD0gOSkge1xyXG4gICAgICBzdHJEYXRlID0gXCIwXCIgKyBzdHJEYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCkgKyBcIi1cIiArIG1vbnRoICsgXCItXCIgKyBzdHJEYXRlXHJcbiAgICAvLyArIFwiIFwiXHJcbiAgICAvLyArIGRhdGUuZ2V0SG91cnMoKSArIFwiOlwiICsgZGF0ZS5nZXRNaW51dGVzKCkgKyBcIjpcIiArIGRhdGUuZ2V0U2Vjb25kcygpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldEZvcm1hdERhdGVGdWxsKGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgbGV0IG1vbnRoOiBzdHJpbmcgfCBudW1iZXIgPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xyXG4gICAgbGV0IHN0ckRhdGU6IHN0cmluZyB8IG51bWJlciA9IGRhdGUuZ2V0RGF0ZSgpO1xyXG5cclxuICAgIGlmIChtb250aCA8PSA5KSB7XHJcbiAgICAgIG1vbnRoID0gXCIwXCIgKyBtb250aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RyRGF0ZSA8PSA5KSB7XHJcbiAgICAgIHN0ckRhdGUgPSBcIjBcIiArIHN0ckRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKSArIFwiLVwiICsgbW9udGggKyBcIi1cIiArIHN0ckRhdGUgKyBcIiBcIiArIChkYXRlLmdldEhvdXJzKCkgPCAxMCA/ICcwJyArIGRhdGUuZ2V0SG91cnMoKSA6IGRhdGUuZ2V0SG91cnMoKSkgKyBcIjpcIiArIChkYXRlLmdldE1pbnV0ZXMoKSA8IDEwID8gJzAnICsgZGF0ZS5nZXRNaW51dGVzKCkgOiBkYXRlLmdldE1pbnV0ZXMoKSkgKyBcIjpcIiArIChkYXRlLmdldFNlY29uZHMoKSA8IDEwID8gJzAnICsgZGF0ZS5nZXRTZWNvbmRzKCkgOiBkYXRlLmdldFNlY29uZHMoKSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0Rm9ybWF0RGF0ZVdpdGhvdXRTKGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgbGV0IG1vbnRoOiBzdHJpbmcgfCBudW1iZXIgPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xyXG4gICAgbGV0IHN0ckRhdGU6IHN0cmluZyB8IG51bWJlciA9IGRhdGUuZ2V0RGF0ZSgpO1xyXG4gICAgbGV0IGhvdXJzOiBzdHJpbmcgfCBudW1iZXIgPSBkYXRlLmdldEhvdXJzKCk7XHJcbiAgICBsZXQgc2Vjb25kczogc3RyaW5nIHwgbnVtYmVyID0gZGF0ZS5nZXRNaW51dGVzKCk7XHJcbiAgICBpZiAobW9udGggPD0gOSkge1xyXG4gICAgICBtb250aCA9IFwiMFwiICsgbW9udGg7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0ckRhdGUgPD0gOSkge1xyXG4gICAgICBzdHJEYXRlID0gXCIwXCIgKyBzdHJEYXRlO1xyXG4gICAgfVxyXG4gICAgaWYgKGhvdXJzIDw9IDkpIHtcclxuICAgICAgaG91cnMgPSBcIjBcIiArIGhvdXJzO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlY29uZHMgPD0gOSkge1xyXG4gICAgICBzZWNvbmRzID0gXCIwXCIgKyBzZWNvbmRzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKSArIFwiLVwiICsgbW9udGggKyBcIi1cIiArIHN0ckRhdGUgKyBcIiBcIiArIGhvdXJzICsgXCI6XCIgKyBzZWNvbmRzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldE9zc1VybCh1cmw6IHN0cmluZykge1xyXG4gICAgaWYgKCF1cmwpIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XHJcbiAgICAgIHJldHVybiB1cmxcclxuICAgIH1cclxuICAgIHJldHVybiBhdHJfc3RhdGljX2RhdGFzLk9TU19VUkwgKyB1cmw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0U3RhdGljT3NzVXJsKHVybDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXVybCkge1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIGlmICh1cmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcclxuICAgICAgcmV0dXJuIHVybFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF0cl9zdGF0aWNfZGF0YXMuU1RBVElDX09TU19VUkwgKyB1cmw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVtb3ZlSHRtbCh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC88W148Pl0rPi9nLCAnJykucmVwbGFjZSgvJm5ic3A7L2lnLCAnJylcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtdWwoLi4ubnVtYmVyczogYW55KSB7XHJcbiAgICBpZiAobnVtYmVycy5sZW5ndGggPCAyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBtID0gdGhpcy5nZXREaWdpdChudW1iZXJzKTtcclxuICAgIGxldCByZXN1bHQgPSAxO1xyXG4gICAgbnVtYmVycy5mb3JFYWNoKFxyXG4gICAgICAobnVtOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgcyA9IG51bS50b1N0cmluZygpO1xyXG4gICAgICAgIHJlc3VsdCAqPSBOdW1iZXIocy5yZXBsYWNlKFwiLlwiLCBcIlwiKSk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICByZXR1cm4gcmVzdWx0IC8gTWF0aC5wb3coMTAsIG0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldERpZ2l0KC4uLm51bWJlcnM6IGFueVtdKSB7XHJcbiAgICBsZXQgbSA9IDA7XHJcbiAgICBudW1iZXJzLmZvckVhY2goXHJcbiAgICAgIG51bSA9PiB7XHJcbiAgICAgICAgbGV0IHMgPSBudW0udG9TdHJpbmcoKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgbSArPSBzLnNwbGl0KFwiLlwiKVsxXS5sZW5ndGhcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIG07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZG93bmxvYWRJbWcoZGF0YTogYW55LCBmaWxlTmFtZT86IHN0cmluZywgZW5kcG9pbnQ/OiBzdHJpbmcpIHtcclxuICAgIC8vIC8vIOS4i+i9veexu+WeiyB4bHNcclxuICAgIC8vIGNvbnN0IGNvbnRlbnRUeXBlID0gJ2ltYWdlL2pwZWcnO1xyXG4gICAgLy8gLy8gY29uc3QgY29udGVudFR5cGUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnO1xyXG4gICAgLy8gLy8g5LiL6L2957G75Z6L77yaY3N2XHJcbiAgICAvLyBjb25zdCBkZWJ1ZyA9IHtoZWxsbzogXCJ3b3JsZFwifTtcclxuICAgIC8vIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbXSx7dHlwZSA6ICdpbWFnZS9qcGVnJ30pO1xyXG4gICAgLy8gY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAvL1xyXG4gICAgLy8gLy8g5omT5byA5paw56qX5Y+j5pa55byP6L+b6KGM5LiL6L29XHJcbiAgICAvLyAvLyB3aW5kb3cub3Blbih1cmwpO1xyXG4gICAgLy9cclxuICAgIC8vIC8vIOS7peWKqOaAgeWIm+W7umHmoIfnrb7ov5vooYzkuIvovb1cclxuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBhLmhyZWYgPSBkYXRhO1xyXG4gICAgLy8gYS5kb3dubG9hZCA9IGZpbGVOYW1lO1xyXG4gICAgYS5kb3dubG9hZCA9IGZpbGVOYW1lID8gZmlsZU5hbWUgOiBcIlwiICsgZW5kcG9pbnQ7XHJcbiAgICBhLmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZG93bmxvYWRYbHModXJsOiBzdHJpbmcsIHBhcmFtcz86IGFueSwpIHtcclxuICAgIGNvbnNvbGUubG9nKHBhcmFtcyk7XHJcbiAgICBpZiAocGFyYW1zKSB7XHJcbiAgICAgIHVybCArPSBcIj9cIjtcclxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGFyYW1zKSkge1xyXG4gICAgICAgIGlmIChwYXJhbXNba2V5XSkge1xyXG4gICAgICAgICAgdXJsICs9IGtleSArIFwiPVwiICsgcGFyYW1zW2tleV0gKyBcIiYmXCJcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHVybCk7XHJcbiAgICAvLyB3aW5kb3cub3Blbih1cmwpO1xyXG4gICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGEuaHJlZiA9IHVybDtcclxuICAgIC8vIC8vIGEuZG93bmxvYWQgPSBmaWxlTmFtZTtcclxuICAgIC8vIGEuZG93bmxvYWQgPSBcIjMzMjEueGxzXCI7XHJcbiAgICBhLmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcGl4ZWxUb051bSh3aWR0aDogYW55KSB7XHJcbiAgICBjb25zdCByZSA9IC9weC9naTtcclxuICAgIGxldCB3aWR0aFN0ciA9IHdpZHRoLnJlcGxhY2UocmUsIFwiXCIpO1xyXG4gICAgcmV0dXJuIE51bWJlcih3aWR0aFN0cik7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYWxsRXF1YWwgPSAoLi4uYXJyYXk6IGFueVtdKSA9PiBhcnJheS5ldmVyeShpdGVtID0+IGl0ZW0gPT09IGFycmF5WzBdKTtcclxuXHJcbiAgLyoqXHJcbiAgICogYXJyYXnmiYDmnInlj4LmlbDmu6HotrNmbuWHveaVsOi/lOWbnnRydWVcclxuICAgKiBhbGwoeCA9PiB4ID4gMSwxLDIsMyk7IC8vIHRydWVcclxuICAgKiBAcGFyYW0gY2FsbGJhY2tcclxuICAgKiBAcGFyYW0gYXJyYXlcclxuICAgKi9cclxuICBzdGF0aWMgc2F0aXNmaWVkRm4gPSAoY2FsbGJhY2s6ICguLi5hcmdzOiBhbnlbXSkgPT4gYm9vbGVhbiwgLi4uYXJyYXk6IGFueVtdKSA9PiBhcnJheS5ldmVyeShjYWxsYmFjayk7XHJcblxyXG4gIC8v5YWo6YOo5LiN56m65Li6dHJ1ZVxyXG4gIHN0YXRpYyBub3RFbXB0eSguLi5hcnI6IGFueVtdKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gYXJyLmV2ZXJ5KGl0ZW0gPT4gISFpdGVtKVxyXG4gIH1cclxuXHJcbiAgLy/ljIXlkKvnqbrkuLp0cnVlXHJcbiAgc3RhdGljIGhhc0VtcHR5KC4uLmFycjogYW55W10pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBhcnIuc29tZShpdGVtID0+ICFpdGVtKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBhbGxFbXB0eSguLi5hcnI6IGFueVtdKSB7XHJcbiAgICByZXR1cm4gYXJyLmV2ZXJ5KGl0ZW0gPT4gIWl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGVuY29kZVZhbHVlKHBhcmFtczogYW55KSB7XHJcbiAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goa2V5ID0+IHBhcmFtc1trZXldID0gZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtc1trZXldKSk7XHJcbiAgICByZXR1cm4gcGFyYW1zO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHdpbmRvd0hlaWdodCgpIHtcclxuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHdpbmRvd1dpZHRoKCkge1xyXG5cclxuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbW9kYWxlU3R5bGUoKSB7XHJcbiAgICByZXR1cm4geydtYXhIZWlnaHQnOiBUb29sc1V0aWwud2luZG93SGVpZ2h0KCkgLSAyMDAgKyAncHgnLCAnb3ZlcmZsb3cteSc6ICdhdXRvJ307XHJcbiAgfVxyXG59XHJcbiJdfQ==
353
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9vbHNVdGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvY29yZS91dGlscy9Ub29sc1V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixnQkFBZ0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBSXRFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxNQUFNLE9BQU8sU0FBUztJQWlCcEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFXO1FBQ3pCLElBQUksR0FBRyxHQUFHLDRHQUE0RyxDQUFDO1FBQ3ZILE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFTO1FBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDN0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNsQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuQztRQUNELE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMs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LEtBQVksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUU5RTs7Ozs7R0FLRztBQUNJLHFCQUFXLEdBQUcsQ0FBQyxRQUFxQyxFQUFFLEdBQUcsS0FBWSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtqc29uLCBBdHJGb3JtT3B0LCBhdHJfc3RhdGljX2RhdGFzfSBmcm9tICcuLi9iYXNlL2F0ci1jb21tb24nO1xyXG5pbXBvcnQge2Zvcm1hdERhdGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7SHR0cEhlYWRlcnN9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge1NpbXBsZUNoYW5nZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7VmFsaWRhdG9yc30gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVG9vbHNVdGlsIHtcclxuICBzdGF0aWMgZ2V0T3JnQ29kZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIHZhciBvcmdDb2RlID0gJyc7XHJcbiAgICAvLyB2YXIgaHJlZnMgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgnPycpXHJcbiAgICAvLyBpZiAoaHJlZnMubGVuZ3RoID49IDIpIHtcclxuICAgIC8vICAgdmFyIHBhcmFtU3RyID0gaHJlZnNbMV07XHJcbiAgICAvLyAgIC8v5Y+C5pWw5a2X56ym5Liy6YeM5pyJ5rKh5bimID0/LyNcclxuICAgIC8vICAgb3JnQ29kZSA9IHBhcmFtU3RyLnNwbGl0KCc9JylbMF07XHJcbiAgICAvLyAgIG9yZ0NvZGUgPSBvcmdDb2RlLnNwbGl0KCc/JylbMF07XHJcbiAgICAvLyAgIG9yZ0NvZGUgPSBvcmdDb2RlLnNwbGl0KCcvJylbMF07XHJcbiAgICAvLyAgIG9yZ0NvZGUgPSBvcmdDb2RlLnNwbGl0KCcjJylbMF07XHJcbiAgICAvLyAgIG9yZ0NvZGUgPSBvcmdDb2RlLnNwbGl0KCcvJylbMF07XHJcbiAgICAvLyB9XHJcblxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzQmFzZTY0KHN0cmluZzogYW55KSB7XHJcbiAgICBsZXQgcmVnID0gL15cXHMqZGF0YTooW2Etel0rXFwvW2EtejAtOS0rLl0rKDtbYS16LV0rPVthLXowLTktXSspPyk/KDtiYXNlNjQpPywoW2EtejAtOSEkJicsKCkqKzs9XFwtLl9+OkBcXC8/JVxcc10qPylcXHMqJC9pO1xyXG4gICAgcmV0dXJuIHJlZy50ZXN0KHN0cmluZylcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkYXRhVVJJdG9CbG9iKGNvZGU6IGFueSkge1xyXG4gICAgY29uc3QgcGFydHMgPSBjb2RlLnNwbGl0KCc7YmFzZTY0LCcpO1xyXG4gICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJ0c1swXS5zcGxpdCgnOicpWzFdO1xyXG4gICAgY29uc3QgcmF3ID0gd2luZG93LmF0b2IocGFydHNbMV0pO1xyXG4gICAgY29uc3QgcmF3TGVuZ3RoID0gcmF3Lmxlbmd0aDtcclxuICAgIGNvbnN0IHVJbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShyYXdMZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdMZW5ndGg7ICsraSkge1xyXG4gICAgICB1SW50OEFycmF5W2ldID0gcmF3LmNoYXJDb2RlQXQoaSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IEJsb2IoW3VJbnQ4QXJyYXldLCB7dHlwZTogY29udGVudFR5cGV9KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBpc051bGwodmFsOiBhbnkpIHtcclxuICAgIGlmICh2YWwgfHwgWydib29sZWFuJywgJ3N0cmluZycsICdudW1iZXInXS5zb21lKHYgPT4gdHlwZW9mIHZhbCA9PSB2KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0Q29udHJvbHNDb25maWcoZGF0YUZyb206IGFueSwgcmVxdWlyZWRSdWxlOiBzdHJpbmdbXSkge1xyXG4gICAgbGV0IGNvbnRyb2xzQ29uZmlnOiBhbnkgPSB7fVxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YUZyb20pIHtcclxuICAgICAgaWYgKHJlcXVpcmVkUnVsZS5zb21lKGl0ZW0gPT4gaXRlbSA9PSBrZXkpKSB7XHJcbiAgICAgICAgY29udHJvbHNDb25maWdba2V5XSA9IFtkYXRhRnJvbVtrZXldLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29udHJvbHNDb25maWdba2V5XSA9IFtkYXRhRnJvbVtrZXldXVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udHJvbHNDb25maWc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaHR0cFN1Y2NlcyhyZXM6IGFueSkge1xyXG4gICAgcmV0dXJuIFsnMjAwJywgJzIwMSddLnNvbWUodiA9PiByZXMuc3RhdHVzID09IHYpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKuWIpOaWreeCueaYr+WQpuWcqOWdkOagh+WMuuWfn+WGhVxyXG4gICAqIEBwYXJhbSBwIOWIpOWumueahOeCuVxyXG4gICAqIEBwYXJhbSBwb2ludHNBcnJcclxuICAgKi9cclxuICBzdGF0aWMganVkZ2VJblJlYyhwOiB7IHgxOiBhbnksIHkxOiBhbnkgfSwgcG9pbnRzQXJyOiB7IHgxOiBhbnksIHkxOiBhbnkgfVtdKSB7XHJcbiAgICBsZXQgcHggPSBwLngxLCBweSA9IHAueTEsXHJcbiAgICAgIGZsYWcgPSBmYWxzZSwvL+epv+i2iui+ueahhlxyXG4gICAgICBpblJlY3QgPSBmYWxzZTsvL+aYr+WQpuWcqOWkmui+ueW9oueahOi+ueaIluiAheerr+eCueS4ilxyXG4gICAgbGV0IHN0YXJ0ID0gcG9pbnRzQXJyWzBdO1xyXG4gICAgbGV0IGVuZCA9IHBvaW50c0Fycltwb2ludHNBcnIubGVuZ3RoIC0gMV07XHJcbiAgICAvL+WmguaenOaVsOe7hOmmluWwvuayoeacieebuOi/nizmiYvliqjmt7vliqBcclxuICAgIHBvaW50c0FyciA9IHN0YXJ0LngxICE9IGVuZC54MSB8fCBzdGFydC55MSAhPSBzdGFydC55MSA/IHBvaW50c0Fyci5jb25jYXQoc3RhcnQpIDogcG9pbnRzQXJyO1xyXG4gICAgLy/lsITnur/pgInlj5ZZ5Z2Q5qCH5LiN5Y+YLHjmraPmlrnlkJFcclxuICAgIHBvaW50c0Fyci5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAoaW5kZXggPT0gcG9pbnRzQXJyLmxlbmd0aCAtIDFcclxuICAgICAgICB8fCBpblJlY3QvL+WcqOWkmui+ueW9oueahOi+ueaIluiAheerr+eCueS4iuinhuS4uuWcqOWMuuWfn+WGhVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBsZXQgZW5kUG9pbnQgPSBwb2ludHNBcnJbaW5kZXggKyAxXVxyXG4gICAgICBjb25zdCBzdGFydFggPSBpdGVtLngxLCBzdGFydFkgPSBpdGVtLnkxLFxyXG4gICAgICAgIGVuZFggPSBlbmRQb2ludC54MSwgZW5kWSA9IGVuZFBvaW50LnkxO1xyXG4gICAgICAvL+WIpOaWreeCueaYr+WQpuWcqOerr+eCueS4ilxyXG4gICAgICBpZiAoKHB4ID09IHN0YXJ0WCAmJiBweSA9PSBzdGFydFkpXHJcbiAgICAgICAgfHwgKHB4ID09IGVuZFggJiYgcHggPT0gZW5kWSkpIHtcclxuICAgICAgICBpblJlY3QgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy/liKTmlq3lsITnur/ph43lkIjlubbkuJTngrnlnKjovrnkuIpcclxuICAgICAgaWYgKChzdGFydFkgPT0gZW5kWSlcclxuICAgICAgICAmJiAoKHB4ID4gZW5kWCAmJiBweCA8IHN0YXJ0WFxyXG4gICAgICAgICAgfHwgKHB4IDwgZW5kWCAmJiBweCA+IHN0YXJ0WCkpKSkge1xyXG4gICAgICAgIGluUmVjdCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoKHN0YXJ0WSA8IHB5ICYmIGVuZFkgPj0gcHkpXHJcbiAgICAgICAgfHwgKHN0YXJ0WSA+PSBweSAmJiBlbmRZIDwgcHkpKSB7XHJcblxyXG4gICAgICAgIC8v5rGC5bCE57q/5LiO57q/5q615Lqk54K555qEeOWdkOaghyx55Z2Q5qCH6L+Y5pivcHlcclxuICAgICAgICBsZXQgeCA9IHN0YXJ0WCArIChweSAtIHN0YXJ0WSkgKiAoZW5kWCAtIHN0YXJ0WCkgLyAoZW5kWSAtIHN0YXJ0WSk7XHJcbiAgICAgICAgLy/ngrnlnKjovrnkuIpcclxuICAgICAgICBpZiAoeCA9PSBweCkge1xyXG4gICAgICAgICAgaW5SZWN0ID0gdHJ1ZVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL3jlpKfkuo5weOadpeS/neivgeWwhOe6v+acneWPs1xyXG4gICAgICAgIGlmICh4ID4gcHgpIHtcclxuICAgICAgICAgIGZsYWcgPSAhZmxhZ1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHJldHVybiBpblJlY3QgfHwgZmxhZztcclxuXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZGlmZklucHV0KGNobmc6IFNpbXBsZUNoYW5nZSwgYWN0aW9uOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICBpZiAoY2huZyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGN1ciA9IEpTT04uc3RyaW5naWZ5KGNobmcuY3VycmVudFZhbHVlKTtcclxuICAgIGxldCBwcmV2ID0gSlNPTi5zdHJpbmdpZnkoY2huZy5wcmV2aW91c1ZhbHVlKTtcclxuICAgIGlmIChjdXIgIT09IHByZXYpIHtcclxuICAgICAgYWN0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZGlmZklucHV0cyhjaG5nOiBTaW1wbGVDaGFuZ2VbXSwgYWN0aW9uOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICBpZiAoY2huZyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICBpZiAoY2huZy5sZW5ndGggPT0gMCkgcmV0dXJuO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaG5nLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBpdGVtID0gY2huZ1tpXTtcclxuICAgICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCkgY29udGludWU7XHJcbiAgICAgIGxldCBjdXIgPSBKU09OLnN0cmluZ2lmeShpdGVtLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgIGxldCBwcmV2ID0gSlNPTi5zdHJpbmdpZnkoaXRlbS5wcmV2aW91c1ZhbHVlKTtcclxuICAgICAgaWYgKGN1ciAhPT0gcHJldikge1xyXG4gICAgICAgIGFjdGlvbigpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0WWVzdGVyZGF5KGRheTogRGF0ZSk6IERhdGUge1xyXG5cclxuICAgIGxldCB0aW1lID0gZGF5LmdldFRpbWUoKSAtIDEwMDAgKiA2MCAqIDYwICogMjQ7XHJcbiAgICBkYXkgPSBuZXcgRGF0ZSh0aW1lKTtcclxuXHJcbiAgICByZXR1cm4gZGF5O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldFRvbW9ycm93ZGF5KGRheTogRGF0ZSk6IERhdGUge1xyXG4gICAgbGV0IHRpbWUgPSBkYXkuZ2V0VGltZSgpICsgMTAwMCAqIDYwICogNjAgKiAyNDtcclxuXHJcbiAgICByZXR1cm4gbmV3IERhdGUodGltZSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0TmV4dE1vbnRoKGRheTogRGF0ZSkge1xyXG4gICAgbGV0IGRzID0gbmV3IERhdGUoZGF5KS5zZXRNb250aChkYXkuZ2V0TW9udGgoKSArIDEpO1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRzKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRWaWRlb0NvdmVyKHVybDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gVG9vbHNVdGlsLmdldE9zc1VybCh1cmwpICsgXCI/eC1vc3MtcHJvY2Vzcz12aWRlby9zbmFwc2hvdCx0XzEwMDAwLG1fZmFzdFwiO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZpc3REYXlPZk1vbnRoKGRheTogRGF0ZSkge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKG5ldyBEYXRlKGRheSkuc2V0RGF0ZSgxKSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbGFzdERheU9mTW9udGgoZGF5OiBEYXRlKSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoVG9vbHNVdGlsLmdldE5leHRNb250aChkYXkpLnNldERhdGUoMCkpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldFJhbmRvbUZpbGVOYW1lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc3QgZXhwZWN0ID0gMTY7XHJcbiAgICBsZXQgc3RyID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIpO1xyXG4gICAgd2hpbGUgKHN0ci5sZW5ndGggPCBleHBlY3QpIHtcclxuICAgICAgc3RyICs9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIGV4cGVjdCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0RmlsZUV4dCA9IGZ1bmN0aW9uIChmaWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICB2YXIgaW5kZXggPSBmaWxlTmFtZS5sYXN0SW5kZXhPZihcIi5cIik7XHJcbiAgICB2YXIgc3VmZml4ID0gZmlsZU5hbWUuc3Vic3RyKGluZGV4ICsgMSk7XHJcbiAgICByZXR1cm4gc3VmZml4O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldEh0dHBPcHRpb25zKCk6IGFueSB7XHJcbiAgICByZXR1cm4ge2lzQ29tbW9uSHR0cEhlYWRlcjogdHJ1ZX1cclxuICB9XHJcblxyXG5cclxuICBzdGF0aWMgcmVzZXRGb3JtVmFsdWUob3B0OiBBdHJGb3JtT3B0LCBqc29uOiBqc29uKTogQXRyRm9ybU9wdCB7XHJcbiAgICBmb3IgKGxldCBpdGVtIG9mIG9wdC5pdGVtcykge1xyXG4gICAgICBpdGVtLnZhbHVlID0gXCJcIjtcclxuICAgICAgLy8gY29uc29sZS5sb2coaXRlbS52YWx1ZSk7XHJcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGpzb24pKSB7XHJcbiAgICAgICAgaWYgKGpzb24uaGFzT3duUHJvcGVydHkoa2V5KSAmJiBqc29uW2tleV0gIT0gbnVsbCAmJiBqc29uW2tleV0gIT0gdW5kZWZpbmVkICYmIGtleSA9PSBpdGVtLmtleSkge1xyXG4gICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSAnZGF0ZScpXHJcbiAgICAgICAgICAgIGl0ZW0udmFsdWUgPSBuZXcgRGF0ZShqc29uW2tleV0pO1xyXG4gICAgICAgICAgZWxzZSBpZiAoaXRlbS50eXBlID09ICdkYXRlVGltZScpIHtcclxuICAgICAgICAgICAgaXRlbS52YWx1ZSA9IG5ldyBEYXRlKGpzb25ba2V5XSk7XHJcbiAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgaXRlbS52YWx1ZSA9IGpzb25ba2V5XVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9wdDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRGb3JtYXREYXRlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgbGV0IG1vbnRoOiBzdHJpbmcgfCBudW1iZXIgPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xyXG4gICAgbGV0IHN0ckRhdGU6IHN0cmluZyB8IG51bWJlciA9IGRhdGUuZ2V0RGF0ZSgpO1xyXG5cclxuICAgIGlmIChtb250aCA8PSA5KSB7XHJcbiAgICAgIG1vbnRoID0gXCIwXCIgKyBtb250aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RyRGF0ZSA8PSA5KSB7XHJcbiAgICAgIHN0ckRhdGUgPSBcIjBcIiArIHN0ckRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKSArIFwiLVwiICsgbW9udGggKyBcIi1cIiArIHN0ckRhdGVcclxuICAgIC8vICsgXCIgXCJcclxuICAgIC8vICsgZGF0ZS5nZXRIb3VycygpICsgXCI6XCIgKyBkYXRlLmdldE1pbnV0ZXMoKSArIFwiOlwiICsgZGF0ZS5nZXRTZWNvbmRzKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0Rm9ybWF0RGF0ZUZ1bGwoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgbW9udGg6IHN0cmluZyB8IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICBsZXQgc3RyRGF0ZTogc3RyaW5nIHwgbnVtYmVyID0gZGF0ZS5nZXREYXRlKCk7XHJcblxyXG4gICAgaWYgKG1vbnRoIDw9IDkpIHtcclxuICAgICAgbW9udGggPSBcIjBcIiArIG1vbnRoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdHJEYXRlIDw9IDkpIHtcclxuICAgICAgc3RyRGF0ZSA9IFwiMFwiICsgc3RyRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpICsgXCItXCIgKyBtb250aCArIFwiLVwiICsgc3RyRGF0ZSArIFwiIFwiICsgKGRhdGUuZ2V0SG91cnMoKSA8IDEwID8gJzAnICsgZGF0ZS5nZXRIb3VycygpIDogZGF0ZS5nZXRIb3VycygpKSArIFwiOlwiICsgKGRhdGUuZ2V0TWludXRlcygpIDwgMTAgPyAnMCcgKyBkYXRlLmdldE1pbnV0ZXMoKSA6IGRhdGUuZ2V0TWludXRlcygpKSArIFwiOlwiICsgKGRhdGUuZ2V0U2Vjb25kcygpIDwgMTAgPyAnMCcgKyBkYXRlLmdldFNlY29uZHMoKSA6IGRhdGUuZ2V0U2Vjb25kcygpKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRGb3JtYXREYXRlV2l0aG91dFMoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgbW9udGg6IHN0cmluZyB8IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICBsZXQgc3RyRGF0ZTogc3RyaW5nIHwgbnVtYmVyID0gZGF0ZS5nZXREYXRlKCk7XHJcbiAgICBsZXQgaG91cnM6IHN0cmluZyB8IG51bWJlciA9IGRhdGUuZ2V0SG91cnMoKTtcclxuICAgIGxldCBzZWNvbmRzOiBzdHJpbmcgfCBudW1iZXIgPSBkYXRlLmdldE1pbnV0ZXMoKTtcclxuICAgIGlmIChtb250aCA8PSA5KSB7XHJcbiAgICAgIG1vbnRoID0gXCIwXCIgKyBtb250aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RyRGF0ZSA8PSA5KSB7XHJcbiAgICAgIHN0ckRhdGUgPSBcIjBcIiArIHN0ckRhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAoaG91cnMgPD0gOSkge1xyXG4gICAgICBob3VycyA9IFwiMFwiICsgaG91cnM7XHJcbiAgICB9XHJcbiAgICBpZiAoc2Vjb25kcyA8PSA5KSB7XHJcbiAgICAgIHNlY29uZHMgPSBcIjBcIiArIHNlY29uZHM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpICsgXCItXCIgKyBtb250aCArIFwiLVwiICsgc3RyRGF0ZSArIFwiIFwiICsgaG91cnMgKyBcIjpcIiArIHNlY29uZHM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0T3NzVXJsKHVybDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXVybCkge1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIGlmICh1cmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcclxuICAgICAgcmV0dXJuIHVybFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF0cl9zdGF0aWNfZGF0YXMuT1NTX1VSTCArIHVybDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRTdGF0aWNPc3NVcmwodXJsOiBzdHJpbmcpIHtcclxuICAgIGlmICghdXJsKSB7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xyXG4gICAgICByZXR1cm4gdXJsXHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXRyX3N0YXRpY19kYXRhcy5TVEFUSUNfT1NTX1VSTCArIHVybDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyByZW1vdmVIdG1sKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoLzxbXjw+XSs+L2csICcnKS5yZXBsYWNlKC8mbmJzcDsvaWcsICcnKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIG11bCguLi5udW1iZXJzOiBhbnkpIHtcclxuICAgIGlmIChudW1iZXJzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IG0gPSB0aGlzLmdldERpZ2l0KG51bWJlcnMpO1xyXG4gICAgbGV0IHJlc3VsdCA9IDE7XHJcbiAgICBudW1iZXJzLmZvckVhY2goXHJcbiAgICAgIChudW06IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBzID0gbnVtLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmVzdWx0ICo9IE51bWJlcihzLnJlcGxhY2UoXCIuXCIsIFwiXCIpKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHJldHVybiByZXN1bHQgLyBNYXRoLnBvdygxMCwgbSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0RGlnaXQoLi4ubnVtYmVyczogYW55W10pIHtcclxuICAgIGxldCBtID0gMDtcclxuICAgIG51bWJlcnMuZm9yRWFjaChcclxuICAgICAgbnVtID0+IHtcclxuICAgICAgICBsZXQgcyA9IG51bS50b1N0cmluZygpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBtICs9IHMuc3BsaXQoXCIuXCIpWzFdLmxlbmd0aFxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICByZXR1cm4gbTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkb3dubG9hZEltZyhkYXRhOiBhbnksIGZpbGVOYW1lPzogc3RyaW5nLCBlbmRwb2ludD86IHN0cmluZykge1xyXG4gICAgLy8gLy8g5LiL6L2957G75Z6LIHhsc1xyXG4gICAgLy8gY29uc3QgY29udGVudFR5cGUgPSAnaW1hZ2UvanBlZyc7XHJcbiAgICAvLyAvLyBjb25zdCBjb250ZW50VHlwZSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCc7XHJcbiAgICAvLyAvLyDkuIvovb3nsbvlnovvvJpjc3ZcclxuICAgIC8vIGNvbnN0IGRlYnVnID0ge2hlbGxvOiBcIndvcmxkXCJ9O1xyXG4gICAgLy8gY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtdLHt0eXBlIDogJ2ltYWdlL2pwZWcnfSk7XHJcbiAgICAvLyBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgIC8vXHJcbiAgICAvLyAvLyDmiZPlvIDmlrDnqpflj6PmlrnlvI/ov5vooYzkuIvovb1cclxuICAgIC8vIC8vIHdpbmRvdy5vcGVuKHVybCk7XHJcbiAgICAvL1xyXG4gICAgLy8gLy8g5Lul5Yqo5oCB5Yib5bu6Yeagh+etvui/m+ihjOS4i+i9vVxyXG4gICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGEuaHJlZiA9IGRhdGE7XHJcbiAgICAvLyBhLmRvd25sb2FkID0gZmlsZU5hbWU7XHJcbiAgICBhLmRvd25sb2FkID0gZmlsZU5hbWUgPyBmaWxlTmFtZSA6IFwiXCIgKyBlbmRwb2ludDtcclxuICAgIGEuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkb3dubG9hZFhscyh1cmw6IHN0cmluZywgcGFyYW1zPzogYW55LCkge1xyXG4gICAgY29uc29sZS5sb2cocGFyYW1zKTtcclxuICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgdXJsICs9IFwiP1wiO1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XHJcbiAgICAgICAgaWYgKHBhcmFtc1trZXldKSB7XHJcbiAgICAgICAgICB1cmwgKz0ga2V5ICsgXCI9XCIgKyBwYXJhbXNba2V5XSArIFwiJiZcIlxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2codXJsKTtcclxuICAgIC8vIHdpbmRvdy5vcGVuKHVybCk7XHJcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgYS5ocmVmID0gdXJsO1xyXG4gICAgLy8gLy8gYS5kb3dubG9hZCA9IGZpbGVOYW1lO1xyXG4gICAgLy8gYS5kb3dubG9hZCA9IFwiMzMyMS54bHNcIjtcclxuICAgIGEuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBwaXhlbFRvTnVtKHdpZHRoOiBhbnkpIHtcclxuICAgIGNvbnN0IHJlID0gL3B4L2dpO1xyXG4gICAgbGV0IHdpZHRoU3RyID0gd2lkdGgucmVwbGFjZShyZSwgXCJcIik7XHJcbiAgICByZXR1cm4gTnVtYmVyKHdpZHRoU3RyKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBhbGxFcXVhbCA9ICguLi5hcnJheTogYW55W10pID0+IGFycmF5LmV2ZXJ5KGl0ZW0gPT4gaXRlbSA9PT0gYXJyYXlbMF0pO1xyXG5cclxuICAvKipcclxuICAgKiBhcnJheeaJgOacieWPguaVsOa7oei2s2Zu5Ye95pWw6L+U5ZuedHJ1ZVxyXG4gICAqIGFsbCh4ID0+IHggPiAxLDEsMiwzKTsgLy8gdHJ1ZVxyXG4gICAqIEBwYXJhbSBjYWxsYmFja1xyXG4gICAqIEBwYXJhbSBhcnJheVxyXG4gICAqL1xyXG4gIHN0YXRpYyBzYXRpc2ZpZWRGbiA9IChjYWxsYmFjazogKC4uLmFyZ3M6IGFueVtdKSA9PiBib29sZWFuLCAuLi5hcnJheTogYW55W10pID0+IGFycmF5LmV2ZXJ5KGNhbGxiYWNrKTtcclxuXHJcbiAgLy/lhajpg6jkuI3nqbrkuLp0cnVlXHJcbiAgc3RhdGljIG5vdEVtcHR5KC4uLmFycjogYW55W10pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBhcnIuZXZlcnkoaXRlbSA9PiAhIWl0ZW0pXHJcbiAgfVxyXG5cclxuICAvL+WMheWQq+epuuS4unRydWVcclxuICBzdGF0aWMgaGFzRW1wdHkoLi4uYXJyOiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGFyci5zb21lKGl0ZW0gPT4gIWl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFsbEVtcHR5KC4uLmFycjogYW55W10pIHtcclxuICAgIHJldHVybiBhcnIuZXZlcnkoaXRlbSA9PiAhaXRlbSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZW5jb2RlVmFsdWUocGFyYW1zOiBhbnkpIHtcclxuICAgIE9iamVjdC5rZXlzKHBhcmFtcykuZm9yRWFjaChrZXkgPT4gcGFyYW1zW2tleV0gPSBlbmNvZGVVUklDb21wb25lbnQocGFyYW1zW2tleV0pKTtcclxuICAgIHJldHVybiBwYXJhbXM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgd2luZG93SGVpZ2h0KCkge1xyXG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgd2luZG93V2lkdGgoKSB7XHJcblxyXG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtb2RhbGVTdHlsZSgpIHtcclxuICAgIHJldHVybiB7J21heEhlaWdodCc6IFRvb2xzVXRpbC53aW5kb3dIZWlnaHQoKSAtIDIwMCArICdweCcsICdvdmVyZmxvdy15JzogJ2F1dG8nfTtcclxuICB9XHJcbn1cclxuIl19
@@ -211,6 +211,57 @@ class ToolsUtil {
211
211
  static httpSucces(res) {
212
212
  return ['200', '201'].some(v => res.status == v);
213
213
  }
214
+ /**
215
+ *判断点是否在坐标区域内
216
+ * @param p 判定的点
217
+ * @param pointsArr
218
+ */
219
+ static judgeInRec(p, pointsArr) {
220
+ let px = p.x1, py = p.y1, flag = false, //穿越边框
221
+ inRect = false; //是否在多边形的边或者端点上
222
+ let start = pointsArr[0];
223
+ let end = pointsArr[pointsArr.length - 1];
224
+ //如果数组首尾没有相连,手动添加
225
+ pointsArr = start.x1 != end.x1 || start.y1 != start.y1 ? pointsArr.concat(start) : pointsArr;
226
+ //射线选取Y坐标不变,x正方向
227
+ pointsArr.forEach((item, index) => {
228
+ if (index == pointsArr.length - 1
229
+ || inRect //在多边形的边或者端点上视为在区域内
230
+ ) {
231
+ return;
232
+ }
233
+ let endPoint = pointsArr[index + 1];
234
+ const startX = item.x1, startY = item.y1, endX = endPoint.x1, endY = endPoint.y1;
235
+ //判断点是否在端点上
236
+ if ((px == startX && py == startY)
237
+ || (px == endX && px == endY)) {
238
+ inRect = true;
239
+ return;
240
+ }
241
+ //判断射线重合并且点在边上
242
+ if ((startY == endY)
243
+ && ((px > endX && px < startX
244
+ || (px < endX && px > startX)))) {
245
+ inRect = true;
246
+ return;
247
+ }
248
+ if ((startY < py && endY >= py)
249
+ || (startY >= py && endY < py)) {
250
+ //求射线与线段交点的x坐标,y坐标还是py
251
+ let x = startX + (py - startY) * (endX - startX) / (endY - startY);
252
+ //点在边上
253
+ if (x == px) {
254
+ inRect = true;
255
+ return;
256
+ }
257
+ //x大于px来保证射线朝右
258
+ if (x > px) {
259
+ flag = !flag;
260
+ }
261
+ }
262
+ });
263
+ return inRect || flag;
264
+ }
214
265
  static diffInput(chng, action) {
215
266
  if (chng === undefined)
216
267
  return;