mxcad-app 1.0.63 → 1.0.65

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.
Binary file
Binary file
Binary file
Binary file
Binary file
package/dist/index.cjs.gz CHANGED
Binary file
package/dist/index.d.ts CHANGED
@@ -224,16 +224,16 @@ declare module '@howdyjs/to-drag' {
224
224
 
225
225
  declare module '@tiptap/core' {
226
226
  interface Commands<ReturnType> {
227
- Overline: {
227
+ Strike: {
228
228
  /**
229
229
  * Set the font size attribute
230
230
  */
231
- setOverline: () => ReturnType;
231
+ setStrike: () => ReturnType;
232
232
  /**
233
233
  * Unset the font size attribute
234
234
  */
235
- unsetOverline: () => ReturnType;
236
- toggleOverline: () => ReturnType;
235
+ unsetStrike: () => ReturnType;
236
+ toggleStrike: () => ReturnType;
237
237
  };
238
238
  }
239
239
  }
@@ -257,16 +257,25 @@ declare module '@tiptap/core' {
257
257
 
258
258
  declare module '@tiptap/core' {
259
259
  interface Commands<ReturnType> {
260
- Strike: {
260
+ TextDecoration: {
261
261
  /**
262
262
  * Set the font size attribute
263
263
  */
264
- setStrike: () => ReturnType;
264
+ setTextDecoration: (textDecoration: string) => ReturnType;
265
265
  /**
266
266
  * Unset the font size attribute
267
267
  */
268
- unsetStrike: () => ReturnType;
269
- toggleStrike: () => ReturnType;
268
+ unsetTextDecoration: () => ReturnType;
269
+ };
270
+ }
271
+ }
272
+
273
+
274
+ declare module "@tiptap/core" {
275
+ interface Commands<ReturnType> {
276
+ selectedText: {
277
+ setSelectedText: (from: number, to: number) => ReturnType;
278
+ unsetSelectedText: (from: number, to: number) => ReturnType;
270
279
  };
271
280
  }
272
281
  }
@@ -285,25 +294,16 @@ declare module '@tiptap/core' {
285
294
 
286
295
  declare module '@tiptap/core' {
287
296
  interface Commands<ReturnType> {
288
- TextDecoration: {
297
+ Overline: {
289
298
  /**
290
299
  * Set the font size attribute
291
300
  */
292
- setTextDecoration: (textDecoration: string) => ReturnType;
301
+ setOverline: () => ReturnType;
293
302
  /**
294
303
  * Unset the font size attribute
295
304
  */
296
- unsetTextDecoration: () => ReturnType;
297
- };
298
- }
299
- }
300
-
301
-
302
- declare module "@tiptap/core" {
303
- interface Commands<ReturnType> {
304
- selectedText: {
305
- setSelectedText: (from: number, to: number) => ReturnType;
306
- unsetSelectedText: (from: number, to: number) => ReturnType;
305
+ unsetOverline: () => ReturnType;
306
+ toggleOverline: () => ReturnType;
307
307
  };
308
308
  }
309
309
  }
Binary file
package/dist/mxcad.d.ts CHANGED
@@ -8962,6 +8962,131 @@ declare module "mxcad" {
8962
8962
  */
8963
8963
  copyData(fromRegion: McDbMxRegion): boolean;
8964
8964
  }
8965
+ /**
8966
+ * 视口对象
8967
+ * @example
8968
+ * ```ts
8969
+ * ```
8970
+ */
8971
+ export class McDbViewport extends McDbEntity {
8972
+ /**
8973
+ * 构造函数。
8974
+ * @param imp 内部对象。
8975
+ */
8976
+ constructor(x?: object);
8977
+ /**
8978
+ * 设置高度
8979
+ * @example
8980
+ * ```ts
8981
+ * ```
8982
+ */
8983
+ set height(val: number);
8984
+ /**
8985
+ * 获取宽度
8986
+ * @example
8987
+ * ```ts
8988
+ * ```
8989
+ */
8990
+ get height(): number;
8991
+ /**
8992
+ * 设置宽度
8993
+ * @example
8994
+ * ```ts
8995
+ * ```
8996
+ */
8997
+ set width(val: number);
8998
+ /**
8999
+ * 获取高度
9000
+ * @example
9001
+ * ```ts
9002
+ * ```
9003
+ */
9004
+ get width(): number;
9005
+ /**
9006
+ * 设置视口中心位置
9007
+ * @example
9008
+ * ```ts
9009
+ * ```
9010
+ */
9011
+ set centerPoint(vec: McGePoint3d);
9012
+ /**
9013
+ * 获取视口中心位置
9014
+ * @example
9015
+ * ```ts
9016
+ * ```
9017
+ */
9018
+ get centerPoint(): McGePoint3d;
9019
+ /**
9020
+ * 设置视口目标位置
9021
+ * @example
9022
+ * ```ts
9023
+ * ```
9024
+ */
9025
+ set viewTarget(vec: McGePoint3d);
9026
+ /**
9027
+ * 获取视口目标位置
9028
+ * @example
9029
+ * ```ts
9030
+ * ```
9031
+ */
9032
+ get viewTarget(): McGePoint3d;
9033
+ /**
9034
+ * 设置视口方向
9035
+ * @example
9036
+ * ```ts
9037
+ * ```
9038
+ */
9039
+ set viewDirection(vec: McGeVector3d);
9040
+ /**
9041
+ * 获取视口方向
9042
+ * @example
9043
+ * ```ts
9044
+ * ```
9045
+ */
9046
+ get viewDirection(): McGeVector3d;
9047
+ /**
9048
+ * 设置可视高度
9049
+ * @example
9050
+ * ```ts
9051
+ * ```
9052
+ */
9053
+ set viewHeight(val: number);
9054
+ /**
9055
+ * 获取可视高度
9056
+ * @example
9057
+ * ```ts
9058
+ * ```
9059
+ */
9060
+ get viewHeight(): number;
9061
+ /**
9062
+ * 设置视口可视位置
9063
+ * @example
9064
+ * ```ts
9065
+ * ```
9066
+ */
9067
+ set viewCenter(vec: McGePoint3d);
9068
+ /**
9069
+ * 获取视口可视位置
9070
+ * @example
9071
+ * ```ts
9072
+ * ```
9073
+ */
9074
+ get viewCenter(): McGePoint3d;
9075
+ /**
9076
+ * 设置可视区域旋转角度
9077
+ * @example
9078
+ * ```ts
9079
+ * ```
9080
+ */
9081
+ set twistAngle(val: number);
9082
+ /**
9083
+ * 获取可视区域旋转角度
9084
+ * @example
9085
+ * ```ts
9086
+ * ```
9087
+ */
9088
+ get twistAngle(): number;
9089
+ }
8965
9090
  /**
8966
9091
  * Dxf组码
8967
9092
  * @public
@@ -12428,6 +12553,18 @@ declare module "mxcad" {
12428
12553
  */
12429
12554
  isBlockEditing(): boolean;
12430
12555
  /**
12556
+ * 开始进入视口编辑状态
12557
+ */
12558
+ startViewPortEdit(idBlockRecord: McObjectId): boolean;
12559
+ /**
12560
+ * 退出视口编辑状态
12561
+ */
12562
+ endViewPortEdit(): boolean;
12563
+ /**
12564
+ * 当前是否正视口编辑
12565
+ */
12566
+ isViewPortEditing(): boolean;
12567
+ /**
12431
12568
  * 获取系统变量的点数值
12432
12569
  * @param varName 变量名称
12433
12570
  * @returns 变量的点数值
@@ -12708,7 +12845,7 @@ declare module "mxcad" {
12708
12845
  * | dimtfac | 146 | 与通过 DIMTXT 系统变量设置一样,指定分数和公差值的文字高度相对于标注文字高度的比例因子。|
12709
12846
  * | dimtm | 48 | 为标注文字设置最小(即最低)公差限制。|
12710
12847
  * | dimtp | 47 | 为标注文字设置最大(即最高)公差限制。|
12711
- * | dimtsz | 142 | 指定线性标注、半径标注以及直径标注中绘制的代替箭头的小斜线的尺寸。|
12848
+ * | dimtsz | 142 | DIMTSZ = 0使用标准的实心箭头,DIMTSZ > 0 标注的箭头被替换为倾斜线(建筑标记),而 DIMTSZ 的数值就是这条倾斜线的长度|
12712
12849
  * | dimtvp | 145 | 控制标注文字在尺寸线上方或下方的垂直位置。|
12713
12850
  * | dimtxt | 140 | 指定标注文字的高度(除非当前文字样式具有固定的高度)。|
12714
12851
  * | dimaltrnd | 148 | 舍入换算标注单位。|
@@ -15254,6 +15391,7 @@ declare module "mxcad" {
15254
15391
  export interface ITableStyle {
15255
15392
  name: string;
15256
15393
  textHeight: number;
15394
+ outerBorderColor?: number;
15257
15395
  borderColor: number;
15258
15396
  textColor: number;
15259
15397
  backgroundColor?: number | null;
@@ -15287,6 +15425,7 @@ declare module "mxcad" {
15287
15425
  */
15288
15426
  borderLineType?: string;
15289
15427
  }
15428
+ export type ITableStyleInfo = Partial<Omit<ITableStyle, "name">>;
15290
15429
  /**
15291
15430
  * 表格尺寸接口
15292
15431
  */
@@ -15359,6 +15498,10 @@ declare module "mxcad" {
15359
15498
  * */
15360
15499
  get colWidth(): number;
15361
15500
  set colWidth(val: number);
15501
+ private _style;
15502
+ get style(): Partial<Omit<ITableStyle, "name">> | null;
15503
+ /** 设置该表格样式 */
15504
+ setStyle(style: ITableStyleInfo): void;
15362
15505
  private _position;
15363
15506
  /** 表格位置和尺寸 - 渲染必需 */
15364
15507
  get position(): McGePoint3d;
@@ -28,6 +28,7 @@ declare const _default: {
28
28
  "ITableDimensions",
29
29
  "ITablePosition",
30
30
  "ITableStyle",
31
+ "ITableStyleInfo",
31
32
  "IXlsxTableData",
32
33
  "IsZero",
33
34
  "LineInfo",
@@ -85,6 +86,7 @@ declare const _default: {
85
86
  "McDbText",
86
87
  "McDbTextStyleTable",
87
88
  "McDbTextStyleTableRecord",
89
+ "McDbViewport",
88
90
  "McDbWipeout",
89
91
  "McDbXline",
90
92
  "McDbXlsxTable",
@@ -31,6 +31,7 @@ const mxcad = [
31
31
  "ITableDimensions",
32
32
  "ITablePosition",
33
33
  "ITableStyle",
34
+ "ITableStyleInfo",
34
35
  "IXlsxTableData",
35
36
  "IsZero",
36
37
  "LineInfo",
@@ -88,6 +89,7 @@ const mxcad = [
88
89
  "McDbText",
89
90
  "McDbTextStyleTable",
90
91
  "McDbTextStyleTableRecord",
92
+ "McDbViewport",
91
93
  "McDbWipeout",
92
94
  "McDbXline",
93
95
  "McDbXlsxTable",
@@ -1520,4 +1522,4 @@ export {
1520
1522
  getContentType as h,
1521
1523
  resolveOptions as r
1522
1524
  };
1523
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtRGJwZ0hMV0YubWpzIiwic291cmNlcyI6WyIuLi8uLi9wYWNrVG9vbFBsdWdpblNyYy9zaGFyZWQvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiXHJcbi8vIHBsdWdpbnMvc2hhcmVkL2luZGV4LnRzXHJcbmltcG9ydCB7IGJhc2VuYW1lLCBqb2luLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgZnMsIHsgTm9QYXJhbUNhbGxiYWNrIH0gZnJvbSAnZnMnO1xyXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAndXJsJztcclxuaW1wb3J0IHsgbmFtZSB9IGZyb20gXCIuLi8uLi9saWIvcGFja2FnZS5qc29uXCJcclxuXHJcbmltcG9ydCB7IE14UXVpY2tDb21tYW5kIH0gZnJvbSBcIi4vdHlwZXMvbXhRdWlja0NvbW1hbmQuZFwiXHJcbmltcG9ydCB7IE14U2VydmVyQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXMvbXhTZXJ2ZXJDb25maWcuZFwiXHJcbmltcG9ydCB7IE14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXMvbXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcuZFwiXHJcbmltcG9ydCB7IE14VWlDb25maWcgfSBmcm9tIFwiLi90eXBlcy9teFVpQ29uZmlnLmRcIlxyXG5pbXBvcnQgeyBNeGNhZFVpQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXMvbXhjYWRVaUNvbmZpZy5kXCJcclxuaW1wb3J0IHsgVnVldGlmeVRoZW1lQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXMvdnVldGlmeVRoZW1lQ29uZmlnLmRcIlxyXG5pbXBvcnQgYXBpTWFwIGZyb20gJy4uL2FwaS1tYXAuanNvbidcclxuZXhwb3J0IGNvbnN0IGdldEFwaU1hcCA9ICgpID0+IGFwaU1hcFxyXG5leHBvcnQgaW50ZXJmYWNlIE14UGx1Z2luQ29uZmlnIHtcclxuICBwbHVnaW5zOiAoc3RyaW5nIHwge1xyXG4gICAgbmFtZT86IHN0cmluZyxcclxuICAgIGlzQWZ0ZXJMb2FkPzogYm9vbGVhbixcclxuICAgIGRpcj86IGJvb2xlYW4sXHJcbiAgICB2ZXJzaW9uPzogc3RyaW5nXHJcbiAgfSlbXVxyXG59XHJcbi8vID09PSDmlrDlop7vvJrphY3nva7mlofku7blkI3luLjph48gPT09XHJcbmV4cG9ydCBjb25zdCBDT05GSUdfRklMRU5BTUVTID0gW1xyXG4gIC8vICdteGNhZFVpQ29uZmlnLmpzb24nLFxyXG4gICdteFF1aWNrQ29tbWFuZC5qc29uJyxcclxuICAnbXhTZXJ2ZXJDb25maWcuanNvbicsXHJcbiAgJ214U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnLmpzb24nLFxyXG4gICdteFVpQ29uZmlnLmpzb24nLFxyXG4gICd2dWV0aWZ5VGhlbWVDb25maWcuanNvbicsXHJcbiAgLy8gJ3BsdWdpbnMvY29uZmlnLmpzb24nXHJcbl0gYXMgY29uc3Q7XHJcbi8qKlxyXG4gKiDphY3nva7mlofku7blpITnkIblmahcclxuICog5Y+v6YCJ77ya5a+554m55a6a6YWN572u5paH5Lu26L+b6KGM6L+Q6KGM5pe25L+u5pS5XHJcbiAqIOWHveaVsOaOpeaUtuWOn+WniyBKU09OIOaVsOaNru+8jOi/lOWbnuS/ruaUueWQjueahCBKU09OIOaVsOaNru+8iOWPr+W8guatpe+8iVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2Zvcm1GdW5jdGlvbnMge1xyXG4gIC8vIHRyYW5zZm9ybU14Y2FkVWlDb25maWcoZGF0YTogTXhjYWRVaUNvbmZpZyk6IFByb21pc2U8TXhjYWRVaUNvbmZpZz4gfCBNeGNhZFVpQ29uZmlnO1xyXG4gIHRyYW5zZm9ybU14UXVpY2tDb21tYW5kKGRhdGE6IE14UXVpY2tDb21tYW5kKTogUHJvbWlzZTxNeFF1aWNrQ29tbWFuZD4gfCBNeFF1aWNrQ29tbWFuZDtcclxuICB0cmFuc2Zvcm1NeFNlcnZlckNvbmZpZyhkYXRhOiBNeFNlcnZlckNvbmZpZyk6IFByb21pc2U8TXhTZXJ2ZXJDb25maWc+IHwgTXhTZXJ2ZXJDb25maWc7XHJcbiAgdHJhbnNmb3JtTXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcoZGF0YTogTXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcpOiBQcm9taXNlPE14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnPiB8IE14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnO1xyXG4gIHRyYW5zZm9ybU14VWlDb25maWcoZGF0YTogTXhVaUNvbmZpZyk6IFByb21pc2U8TXhVaUNvbmZpZz4gfCBNeFVpQ29uZmlnO1xyXG4gIHRyYW5zZm9ybVZ1ZXRpZnlUaGVtZUNvbmZpZyhkYXRhOiBWdWV0aWZ5VGhlbWVDb25maWcpOiBQcm9taXNlPFZ1ZXRpZnlUaGVtZUNvbmZpZz4gfCBWdWV0aWZ5VGhlbWVDb25maWc7XHJcbiAgLy8gdHJhbnNmb3JtTXhQbHVnaW5zQ29uZmlnKGRhdGE6IE14UGx1Z2luQ29uZmlnW10pOiBQcm9taXNlPE14UGx1Z2luQ29uZmlnW10+IHwgTXhQbHVnaW5Db25maWdbXTtcclxufVxyXG4vLyDmianlsZXmj5Lku7bpgInpobnmjqXlj6MgPT09XHJcbmV4cG9ydCBpbnRlcmZhY2UgTXhDYWRBc3NldHNQbHVnaW5PcHRpb25zIGV4dGVuZHMgUGFydGlhbDxUcmFuc2Zvcm1GdW5jdGlvbnM+IHtcclxuICAvKipcclxuICAgKiDmnoTlu7rlkI7vvIxteGNhZEFwcEFzc2V0cyDotYTmupDlrZjmlL7nmoTlrZDnm67lvZXlkI3jgIJcclxuICAgKiBAZGVmYXVsdCAnbXhjYWRBcHBBc3NldHMnXHJcbiAgICovXHJcbiAgb3V0cHV0RGlyPzogc3RyaW5nO1xyXG4gIC8qKiDnrKzkuInmlrnkvp3otZYqL1xyXG4gIGxpYnJhcnlOYW1lcz86IChrZXlvZiB0eXBlb2YgZXh0ZXJuYWxzKVtdO1xyXG4gIC8qKiDmmK/lkKbljZXnur/nqIvliqDovb13YXNtICjpu5jorqTkvb/nlKjlpJrnur/nqIvlj4rliqDovb0pICovXHJcbiAgaXNXYXNtU3Q/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICog5piv5ZCm5ZCv55So6aKE5Y6L57yp6LWE5rqQ77yI5aaCIC5neiDmlofku7bvvInnmoTmi7fotJ0g6buY6K6k5pivdHJ1ZVxyXG4gICog6K6+572u5Li6IGZhbHNlIOaXtu+8jC5neiDljovnvKnmlofku7blsIbkuI3kvJrooqvlpI3liLbliLDovpPlh7rnm67lvZVcclxuICAqIEBkZWZhdWx0IHRydWVcclxuICAqL1xyXG4gIGVuYWJsZUNvbXByZXNzZWRBc3NldHM/OiBib29sZWFuO1xyXG59XHJcblxyXG5cclxuLy8gPT09IOWinuW8uu+8mnJlc29sdmVPcHRpb25zIOm7mOiupOWAvCA9PT1cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVPcHRpb25zKG9wdGlvbnM6IE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucyA9IHt9KTogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPiB7XHJcbiAgY29uc3QgcmVzb2x2ZWQ6IFJlcXVpcmVkPE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucz4gPSB7XHJcbiAgICBvdXRwdXREaXI6IG9wdGlvbnMub3V0cHV0RGlyIHx8ICdteGNhZEFwcEFzc2V0cycsXHJcbiAgICBsaWJyYXJ5TmFtZXM6IG9wdGlvbnMubGlicmFyeU5hbWVzIHx8IFtdLFxyXG4gICAgaXNXYXNtU3Q6IG9wdGlvbnMuaXNXYXNtU3QgfHwgZmFsc2UsXHJcbiAgICBlbmFibGVDb21wcmVzc2VkQXNzZXRzOiBvcHRpb25zLmVuYWJsZUNvbXByZXNzZWRBc3NldHMgfHwgdHJ1ZSxcclxuICAgIC8vIHRyYW5zZm9ybU14Y2FkVWlDb25maWc6IG9wdGlvbnMudHJhbnNmb3JtTXhjYWRVaUNvbmZpZyB8fCAoKGQpID0+IGQpLFxyXG4gICAgdHJhbnNmb3JtTXhRdWlja0NvbW1hbmQ6IG9wdGlvbnMudHJhbnNmb3JtTXhRdWlja0NvbW1hbmQgfHwgKChkKSA9PiBkKSxcclxuICAgIHRyYW5zZm9ybU14U2VydmVyQ29uZmlnOiBvcHRpb25zLnRyYW5zZm9ybU14U2VydmVyQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICB0cmFuc2Zvcm1NeFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1NeFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZyB8fCAoKGQpID0+IGQpLFxyXG4gICAgdHJhbnNmb3JtTXhVaUNvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1NeFVpQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICB0cmFuc2Zvcm1WdWV0aWZ5VGhlbWVDb25maWc6IG9wdGlvbnMudHJhbnNmb3JtVnVldGlmeVRoZW1lQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICAvLyB0cmFuc2Zvcm1NeFBsdWdpbnNDb25maWc6IG9wdGlvbnMudHJhbnNmb3JtTXhQbHVnaW5zQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgfTtcclxuICByZXR1cm4gcmVzb2x2ZWQ7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFBhdGhSZXN1bHQge1xyXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XHJcbiAgZmlsZVBhdGg/OiBzdHJpbmc7ICAgICAgICAgLy8g5beyIHJlc29sdmUg55qE5a6J5YWo5paH5Lu26Lev5b6EXHJcbiAgdXJsUGF0aD86IHN0cmluZzsgICAgICAgICAgLy8g6Kej56CB5ZCO55qEIFVSTCDot6/lvoTvvIjkuI3lkKsgcXVlcnnvvIlcclxuICBmaWxlTmFtZT86IHN0cmluZzsgICAgICAgICAvLyDmlofku7blkI3vvIhiYXNlbmFtZe+8iVxyXG4gIHN0YXR1c0NvZGU/OiBudW1iZXI7XHJcbiAgbWVzc2FnZT86IHN0cmluZztcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiDlronlhajop6PmnpDlubbpqozor4Hor7fmsYLot6/lvoRcclxuICogQHBhcmFtIHJlcVVybCDor7fmsYLnmoQgVVJM77yI5aaCICcvYXNzZXRzL214U2VydmVyQ29uZmlnLmpzb24/dj0xJ++8iVxyXG4gKiBAcGFyYW0gcm9vdCDmnKzlnLDmoLnnm67lvZXvvIjlpoIgJ0Q6L3Byb2plY3QvZGlzdC9teGNhZCfvvIlcclxuICogQHBhcmFtIGJhc2VQYXRoIOWPr+mAieeahOWfuuehgOi3r+W+hOWJjee8gO+8iOWmgiAnL214Y2FkLyfvvIznlKjkuo4gVml0Ze+8iVxyXG4gKiBAcmV0dXJucyDop6PmnpDnu5PmnpzmiJbplJnor69cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2FmZVBhdGgoXHJcbiAgcmVxVXJsOiBzdHJpbmcsXHJcbiAgcm9vdDogc3RyaW5nLFxyXG4gIGJhc2VQYXRoPzogc3RyaW5nXHJcbik6IFBhcnNlZFBhdGhSZXN1bHQge1xyXG4gIC8vIDEuIOWfuuacrOagoemqjFxyXG4gIGlmICghcmVxVXJsIHx8IHR5cGVvZiByZXFVcmwgIT09ICdzdHJpbmcnKSB7XHJcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNDAwLCBtZXNzYWdlOiAnQmFkIFJlcXVlc3QnIH07XHJcbiAgfVxyXG5cclxuICAvLyAyLiDmj5Dlj5bot6/lvoTvvIjljrsgcXVlcnkg5ZKMIGhhc2jvvIlcclxuICBsZXQgdXJsUGF0aCA9IHJlcVVybC5zcGxpdCgnPycpWzBdLnNwbGl0KCcjJylbMF07XHJcblxyXG4gIC8vIDMuIOino+eggSBVUkxcclxuICBsZXQgZGVjb2RlZFBhdGg6IHN0cmluZztcclxuICB0cnkge1xyXG4gICAgZGVjb2RlZFBhdGggPSBkZWNvZGVVUklDb21wb25lbnQodXJsUGF0aCk7XHJcbiAgICAvLyDpmLLmraIgbnVsbCDlrZfoioLmlLvlh7tcclxuICAgIGlmIChkZWNvZGVkUGF0aC5pbmNsdWRlcygnXFwwJykpIHtcclxuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIHN0YXR1c0NvZGU6IDQwMCwgbWVzc2FnZTogJ0ludmFsaWQgVVJMJyB9O1xyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIHN0YXR1c0NvZGU6IDQwMCwgbWVzc2FnZTogJ0ludmFsaWQgVVJMIGVuY29kaW5nJyB9O1xyXG4gIH1cclxuXHJcbiAgLy8gNC4g5aSE55CGIGJhc2VQYXRo77yI5aaCIFZpdGUg55qEIGJhc2XvvIlcclxuICBpZiAoYmFzZVBhdGggJiYgZGVjb2RlZFBhdGguc3RhcnRzV2l0aChiYXNlUGF0aCkpIHtcclxuICAgIGRlY29kZWRQYXRoID0gZGVjb2RlZFBhdGguc2xpY2UoYmFzZVBhdGgubGVuZ3RoKTtcclxuICB9XHJcblxyXG4gIC8vIDUuIOa4heeQhui3r+W+hO+8muWOu+mZpOW8gOWktOWkmuS9meeahCAvXHJcbiAgLy8g5L6L5aaC77yaLy9hc3NldHMvZmlsZS5qc29uIC0+IGFzc2V0cy9maWxlLmpzb25cclxuICBjb25zdCBjbGVhbmVkUGF0aCA9IGRlY29kZWRQYXRoLnJlcGxhY2UoL15cXC8rLywgJycpO1xyXG5cclxuICAvLyA2LiDmi7zmjqXmlofku7bot6/lvoRcclxuICBjb25zdCBmaWxlUGF0aCA9IGpvaW4ocm9vdCwgY2xlYW5lZFBhdGggfHwgJy4nKTtcclxuXHJcbiAgLy8gNy4g5a6J5YWo5qOA5p+l77ya6Ziy5q2i6Lev5b6E56m/6LaKXHJcbiAgbGV0IG5vcm1hbGl6ZWRGaWxlOiBzdHJpbmc7XHJcbiAgbGV0IG5vcm1hbGl6ZWRSb290OiBzdHJpbmc7XHJcbiAgdHJ5IHtcclxuICAgIG5vcm1hbGl6ZWRGaWxlID0gcmVzb2x2ZShmaWxlUGF0aCk7XHJcbiAgICBub3JtYWxpemVkUm9vdCA9IHJlc29sdmUocm9vdCk7XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNTAwLCBtZXNzYWdlOiAnUGF0aCByZXNvbHV0aW9uIGZhaWxlZCcgfTtcclxuICB9XHJcblxyXG4gIC8vIOKchSDlhbPplK7vvJrnoa7kv50gbm9ybWFsaXplZEZpbGUg5ZyoIG5vcm1hbGl6ZWRSb290IOebruW9leS4i1xyXG4gIGNvbnN0IG5vcm1hbGl6ZWRGaWxlU3RyID0gbm9ybWFsaXplZEZpbGUucmVwbGFjZSgvXFxcXC9nLCAnLycpICsgJy8nO1xyXG4gIGNvbnN0IG5vcm1hbGl6ZWRSb290U3RyID0gbm9ybWFsaXplZFJvb3QucmVwbGFjZSgvXFxcXC9nLCAnLycpICsgJy8nO1xyXG5cclxuICBpZiAoIW5vcm1hbGl6ZWRGaWxlU3RyLnN0YXJ0c1dpdGgobm9ybWFsaXplZFJvb3RTdHIpKSB7XHJcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNDAzLCBtZXNzYWdlOiAnRm9yYmlkZGVuOiBQYXRoIHRyYXZlcnNhbCBkZXRlY3RlZCcgfTtcclxuICB9XHJcblxyXG4gIC8vIDguIOaPkOWPliBmaWxlTmFtZVxyXG4gIGNvbnN0IHBhdGhTZWdtZW50cyA9IGNsZWFuZWRQYXRoLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pO1xyXG4gIGNvbnN0IGZpbGVOYW1lID0gcGF0aFNlZ21lbnRzLmxlbmd0aCA+IDAgPyBiYXNlbmFtZShwYXRoU2VnbWVudHNbcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDFdKSA6ICcnO1xyXG5cclxuICAvLyDinIUg5oiQ5YqfXHJcbiAgcmV0dXJuIHtcclxuICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICBmaWxlUGF0aDogbm9ybWFsaXplZEZpbGUsXHJcbiAgICB1cmxQYXRoOiBkZWNvZGVkUGF0aCxcclxuICAgIGZpbGVOYW1lLFxyXG4gIH07XHJcbn1cclxuXHJcblxyXG50eXBlIENvbmZpZ0ZpbGVuYW1lID0gKHR5cGVvZiBDT05GSUdfRklMRU5BTUVTKVtudW1iZXJdO1xyXG5mdW5jdGlvbiBoYW5kbGVDb25maWdGaWxlKFxyXG4gIHNyY1BhdGg6IHN0cmluZyxcclxuICBkZXN0UGF0aDogc3RyaW5nLFxyXG4gIGZpbGVuYW1lOiBDb25maWdGaWxlbmFtZSxcclxuICBvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+LFxyXG4gIGNhbGxiYWNrOiBOb1BhcmFtQ2FsbGJhY2tcclxuKSB7XHJcbiAgZnMucmVhZEZpbGUoc3JjUGF0aCwgJ3V0Zi04JywgYXN5bmMgKGVyciwgY29udGVudCkgPT4ge1xyXG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGRhdGEgPSBjb250ZW50LnRyaW0oKSA/IEpTT04ucGFyc2UoY29udGVudCkgOiB7fTtcclxuXHJcbiAgICAgIC8vIOKchSDmraPnoa7nlJ/miJAgdHJhbnNmb3JtIOWHveaVsOWQjVxyXG4gICAgICBjb25zdCBiYXNlTmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kL2ksICcnKTtcclxuICAgICAgY29uc3QgdHJhbnNmb3JtS2V5ID0gYHRyYW5zZm9ybSR7cGFzY2FsQ2FzZShiYXNlTmFtZSl9YDsgLy8g5L6L5aaCOiB0cmFuc2Zvcm1QbHVnaW5zQ29uZmlnIOaIliB0cmFuc2Zvcm1NeFBsdWdpbnNDb25maWdcclxuXHJcbiAgICAgIGNvbnN0IHRyYW5zZm9ybUZuID0gKG9wdGlvbnMgYXMgYW55KVt0cmFuc2Zvcm1LZXldO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1GbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGRhdGEgPSBhd2FpdCB0cmFuc2Zvcm1GbihkYXRhKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xyXG4gICAgICBmcy53cml0ZUZpbGUoZGVzdFBhdGgsIGpzb24sICd1dGYtOCcsIGNhbGxiYWNrKTtcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcbi8qKlxyXG4gKiDlpITnkIbphY3nva7mlofku7bor7fmsYLvvJror7vlj5Yg4oaSIOi9rOaNoiDihpIg6L+U5Zue5ZON5bqUXHJcbiAqIOeUqOS6jiBWaXRlL1dlYnBhY2sgZGV2IHNlcnZlciDkuK3pl7Tku7ZcclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVDb25maWdSZXF1ZXN0KFxyXG4gIGZpbGVQYXRoOiBzdHJpbmcsICAgICAgICAgICAvLyDlt7Lnu4/pqozor4Hov4fnmoTlronlhajot6/lvoRcclxuICBmaWxlTmFtZTogc3RyaW5nLCAgICAgICAgICAgLy8g5paH5Lu25ZCN77yM5aaCICdteFNlcnZlckNvbmZpZy5qc29uJ1xyXG4gIG9wdGlvbnM6IFJlcXVpcmVkPE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucz4sXHJcbiAgcmVzOiBhbnksXHJcbiAgbG9nZ2VyPzogeyBpbmZvPzogKG1zZzogc3RyaW5nKSA9PiB2b2lkOyBlcnJvcj86IChtc2c6IHN0cmluZykgPT4gdm9pZCB9XHJcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gIC8vIOS7heWkhOeQhueZveWQjeWNleWGheeahOaWh+S7tlxyXG4gIGlmICghKENPTkZJR19GSUxFTkFNRVMgYXMgdW5rbm93biBhcyBzdHJpbmcpLmluY2x1ZGVzKGZpbGVOYW1lKSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XHJcbiAgICBsZXQgZGF0YSA9IGNvbnRlbnQudHJpbSgpID8gSlNPTi5wYXJzZShjb250ZW50KSA6IHt9O1xyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybUtleSA9IGB0cmFuc2Zvcm0ke3Bhc2NhbENhc2UoZmlsZU5hbWUucmVwbGFjZSgvXFwuanNvbiQvaSwgJycpKX1gO1xyXG4gICAgY29uc3QgdHJhbnNmb3JtRm4gPSAob3B0aW9ucyBhcyBhbnkpW3RyYW5zZm9ybUtleV07XHJcblxyXG4gICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1GbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBkYXRhID0gYXdhaXQgdHJhbnNmb3JtRm4oZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuICAgIHJlcy5zZXRIZWFkZXIoJ0NhY2hlLUNvbnRyb2wnLCAnbm8tY2FjaGUnKTtcclxuICAgIHJlcy5lbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMikpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGxvZ2dlcj8uZXJyb3I/LihgW214Y2FkLWFzc2V0c10g4p2MIEZhaWxlZCB0byBzZXJ2ZSAke2ZpbGVOYW1lfTogJHtlcnIubWVzc2FnZX1gKTtcclxuICAgIGlmICghcmVzLmhlYWRlcnNTZW50KSB7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XHJcbiAgICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xyXG4gICAgICByZXMuZW5kKCdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlOyAvLyDlt7LlpITnkIbplJnor69cclxuICB9XHJcbn1cclxuXHJcbi8qKiDliJvlu7rpgJrnlKjlhajlsYDkuK3pl7Tku7YgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUdsb2JhbFVuaXZlcnNhbE1pZGRsZXdhcmUob3B0aW9uczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPikge1xyXG4gIHJldHVybiBhc3luYyAocmVxOiBhbnksIHJlczogYW55LCBuZXh0OiBhbnkpID0+IHtcclxuICAgIGlmICghb3B0aW9ucy5pc1dhc21TdCkge1xyXG4gICAgICByZXMuc2V0SGVhZGVyKCdDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeScsICdzYW1lLW9yaWdpbicpO1xyXG4gICAgICByZXMuc2V0SGVhZGVyKCdDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5JywgJ3JlcXVpcmUtY29ycCcpO1xyXG4gICAgfVxyXG4gICAgbmV4dCgpO1xyXG4gIH1cclxufVxyXG4vLyA9PT0g6L6F5Yqp5Ye95pWw77ya5a2X56ym5Liy6L2sIFBhc2NhbENhc2UgPT09XHJcbmV4cG9ydCBmdW5jdGlvbiBwYXNjYWxDYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gc3RyXHJcbiAgICAucmVwbGFjZSgvW15hLXpBLVowLTldKyguKS9nLCAobSwgY2hyKSA9PiBjaHIudG9VcHBlckNhc2UoKSlcclxuICAgIC5yZXBsYWNlKC9eLi8sIGMgPT4gYy50b1VwcGVyQ2FzZSgpKTtcclxufVxyXG5cclxuLy8gPT09IOWFtuS7luWOn+acieWvvOWHuuS/neaMgeS4jeWPmCA9PT1cclxuZXhwb3J0IGNvbnN0IGV4dGVybmFscyA9IHtcclxuICAndnVlJzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLlZ1ZScsXHJcbiAgJ2F4aW9zJzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLmF4aW9zJyxcclxuICAndnVldGlmeSc6ICdNWENBREFQUF9FWFRFUk5BTExJQlJBUklFUy52dWV0aWZ5JyxcclxuICAndnVldGlmeS9jb21wb25lbnRzJzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLnZ1ZXRpZnlDb21wb25lbnRzJyxcclxuICAnbWFwYm94LWdsJzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLm1hcGJveGdsJyxcclxuICAncGluaWEnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMucGluaWEnXHJcbn07XHJcbi8vIOWni+e7iOS/neeVmeeahOaooeWdl1xyXG5jb25zdCBBTFdBWVNfS0VFUCA9IG5ldyBTZXQoWydteGNhZCcsICdteGRyYXcnXSk7XHJcblxyXG4vKipcclxuICog5riF55CG5bm25YaZ5YWl5q2j56Gu55qE57G75Z6L5byV55SoXHJcbiAqL1xyXG5mdW5jdGlvbiBzeW5jVHlwZVJlZmVyZW5jZXMobGlicmFyeU5hbWVzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gIGNvbnN0IHJvb3REaXIgPSBwcm9jZXNzLmN3ZCgpO1xyXG4gIGNvbnN0IGRpc3REaXIgPSByZXNvbHZlKHJvb3REaXIsICdub2RlX21vZHVsZXMnLCAnbXhjYWQtYXBwJywgJ2Rpc3QnKTtcclxuICBjb25zdCBpbmRleFBhdGggPSByZXNvbHZlKGRpc3REaXIsICdpbmRleC5kLnRzJyk7XHJcblxyXG4gIHRyeSB7XHJcbiAgICAvLyDinIUgMS4g5qOA5p+lIGRpc3Qg55uu5b2VXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZGlzdERpcikpIHtcclxuICAgICAgY29uc29sZS53YXJuKGDimqDvuI8gbXhjYWQtYXBwL2Rpc3Qg55uu5b2V5LiN5a2Y5Zyo77yM6Lez6L+H57G75Z6L5ZCM5q2lOiAke2Rpc3REaXJ9YCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDinIUgMi4g56Gu5L+dIGluZGV4LmQudHMg5a2Y5ZyoXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoaW5kZXhQYXRoKSkge1xyXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGluZGV4UGF0aCwgJycsICd1dGYtOCcpO1xyXG4gICAgICBjb25zb2xlLmxvZyhg4pyFIOW3suWIm+W7uuepuuexu+Wei+aWh+S7tjogJHtpbmRleFBhdGh9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoaW5kZXhQYXRoLCAndXRmLTgnKTtcclxuICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgvXFxyP1xcbi8pO1xyXG5cclxuICAgIC8vIOKchSAzLiDmj5Dlj5bmiYDmnInnjrDmnInnmoQgLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4veHh4LmQudHNcIiAvPiDooYxcclxuICAgIGNvbnN0IHJlZmVyZW5jZVJlZ2V4ID0gL1xcL1xcL1xcL1xccyo8cmVmZXJlbmNlXFxzK3BhdGg9XCJcXC5cXC8oW15cIl0rXFwuZFxcLnRzKVwiXFxzKlxcLz4vO1xyXG4gICAgY29uc3QgZXhpc3RpbmdSZWZzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgY29uc3Qgbm9uUmVmTGluZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgbGluZXMuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgY29uc3QgbWF0Y2ggPSBsaW5lLnRyaW0oKS5tYXRjaChyZWZlcmVuY2VSZWdleCk7XHJcbiAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gbWF0Y2hbMV07IC8vIOWmgiBcInZ1ZS5kLnRzXCJcclxuICAgICAgICBjb25zdCBtb2R1bGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvXFwuZFxcLnRzJC8sICcnKTsgLy8g5o+Q5Y+W5qih5Z2X5ZCNXHJcbiAgICAgICAgZXhpc3RpbmdSZWZzLnB1c2gobW9kdWxlTmFtZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbm9uUmVmTGluZXMucHVzaChsaW5lKTsgLy8g5L+d55WZ6Z2eIHJlZmVyZW5jZSDooYxcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g4pyFIDQuIOiuoeeul+acgOe7iOW6lOivpeS/neeVmeeahOaooeWdl1xyXG4gICAgY29uc3QgdmFsaWRNb2R1bGVzID0gbmV3IFNldDxzdHJpbmc+KEFMV0FZU19LRUVQKTtcclxuXHJcbiAgICBsaWJyYXJ5TmFtZXMuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgLy8g5b+F6aG75ZyoIGV4dGVybmFscyDkuK3lrprkuYnvvIzkuJTnsbvlnovmlofku7blrZjlnKhcclxuICAgICAgaWYgKG5hbWUgaW4gZXh0ZXJuYWxzKSB7XHJcbiAgICAgICAgY29uc3QgZHRzUGF0aCA9IHJlc29sdmUoZGlzdERpciwgYCR7bmFtZX0uZC50c2ApO1xyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGR0c1BhdGgpKSB7XHJcbiAgICAgICAgICB2YWxpZE1vZHVsZXMuYWRkKG5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g4pyFIDUuIOeUn+aIkOacgOe7iOeahCByZWZlcmVuY2Ug6KGM77yI5L+d5oyBIG14Y2FkIOWSjCBteGRyYXcg5Zyo5pyA5YmN77yJXHJcbiAgICBjb25zdCBmaW5hbFJlZnMgPSBbJ214Y2FkJywgJ214ZHJhdyddXHJcbiAgICAgIC5maWx0ZXIobmFtZSA9PiB2YWxpZE1vZHVsZXMuaGFzKG5hbWUpKVxyXG4gICAgICAubWFwKG5hbWUgPT4gYC8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLyR7bmFtZX0uZC50c1wiIC8+YCk7XHJcblxyXG4gICAgLy8g5re75Yqg5YW25LuWIHZhbGlkTW9kdWxlcyDkuK3nmoTvvIjljrvph43vvIlcclxuICAgIEFycmF5LmZyb20odmFsaWRNb2R1bGVzKVxyXG4gICAgICAuZmlsdGVyKG5hbWUgPT4gIUFMV0FZU19LRUVQLmhhcyhuYW1lKSlcclxuICAgICAgLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgZmluYWxSZWZzLnB1c2goYC8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLyR7bmFtZX0uZC50c1wiIC8+YCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIOKchSA2LiDlkIjlubbvvJrmnIDnu4jlvJXnlKggKyDljp/lp4vpnZ7lvJXnlKjooYxcclxuICAgIGNvbnN0IHJlc3VsdExpbmVzID0gWy4uLmZpbmFsUmVmcywgJycsIC4uLm5vblJlZkxpbmVzLmZpbHRlcihsID0+IGwudHJpbSgpLmxlbmd0aCA+IDApXTtcclxuXHJcbiAgICAvLyDnp7vpmaTov57nu63nqbrooYzvvIzkv53nlZnkuIDkuKrliIbpmpRcclxuICAgIGNvbnN0IGNsZWFuZWRMaW5lcyA9IHJlc3VsdExpbmVzLmZpbHRlcigobGluZSwgaSwgYXJyKSA9PlxyXG4gICAgICAhKGxpbmUudHJpbSgpID09PSAnJyAmJiBpID4gMCAmJiBhcnJbaSAtIDFdLnRyaW0oKSA9PT0gJycpXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBjbGVhbmVkTGluZXMuam9pbignXFxuJykudHJpbSgpICsgJ1xcbic7XHJcblxyXG4gICAgLy8g4pyFIDcuIOWGmeWbnuaWh+S7tu+8iOS7heW9k+WGheWuueWPmOWMluaXtu+8iVxyXG4gICAgaWYgKGNvbnRlbnQudHJpbSgpICE9PSBuZXdDb250ZW50LnRyaW0oKSkge1xyXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGluZGV4UGF0aCwgbmV3Q29udGVudCwgJ3V0Zi04Jyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKGDinIUg5bey5ZCM5q2lIG14Y2FkLWFwcC9kaXN0L2luZGV4LmQudHMg57G75Z6L5byV55SoYCk7XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKGDinYwg5ZCM5q2l57G75Z6L5byV55So5aSx6LSlOmAsIGVycik7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICog6aKE5a6a5LmJ5bqT5ZCN5Yiw5YWo5bGA5Y+Y6YeP55qE5pig5bCEXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgREVGQVVMVF9MSUJSQVJZX01BUDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICBteGNhZDogJ014Q0FEJyxcclxuICBteGRyYXc6ICdNeCdcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZXJuYWxzKFxyXG4gIGxpYnJhcnlOYW1lczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPlsnbGlicmFyeU5hbWVzJ11cclxuKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XHJcbiAgc3luY1R5cGVSZWZlcmVuY2VzKGxpYnJhcnlOYW1lcyk7XHJcbiAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0geyAuLi5ERUZBVUxUX0xJQlJBUllfTUFQIH1cclxuICBpZiAoIUFycmF5LmlzQXJyYXkobGlicmFyeU5hbWVzKSkgcmV0dXJuIHJlc3VsdDtcclxuICBsaWJyYXJ5TmFtZXMuZm9yRWFjaChuYW1lID0+IHtcclxuICAgIGlmIChuYW1lIGluIGV4dGVybmFscykge1xyXG4gICAgICByZXN1bHRbbmFtZV0gPSBleHRlcm5hbHNbbmFtZSBhcyBrZXlvZiB0eXBlb2YgZXh0ZXJuYWxzXTtcclxuICAgIH1cclxuICB9KTtcclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlQXNzZXRzUGF0aCgpOiBzdHJpbmcge1xyXG4gIGxldCBjdXJyZW50RmlsZTogc3RyaW5nO1xyXG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIGN1cnJlbnRGaWxlID0gX19maWxlbmFtZTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgY3VycmVudEZpbGUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCk7XHJcbiAgfVxyXG4gIGNvbnN0IHBhY2thZ2VSb290ID0gcmVzb2x2ZShjdXJyZW50RmlsZSwgJy4uJywgJy4uJywgJy4uJyk7XHJcbiAgY29uc3QgYXNzZXRzUGF0aCA9IHJlc29sdmUocGFja2FnZVJvb3QsIG5hbWUsICdkaXN0JywgJ214Y2FkQXBwQXNzZXRzJyk7XHJcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGFzc2V0c1BhdGgpKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG14LWNhZC1hcHAgYXNzZXRzIG5vdCBmb3VuZCBhdDogJHthc3NldHNQYXRofWApO1xyXG4gIH1cclxuICByZXR1cm4gYXNzZXRzUGF0aDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrU291cmNlQXNzZXRzRXhpc3QoKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgcGF0aCA9IGdldFNvdXJjZUFzc2V0c1BhdGgoKTtcclxuICByZXR1cm4gZnMuZXhpc3RzU3luYyhwYXRoKSAmJiBmcy5sc3RhdFN5bmMocGF0aCkuaXNEaXJlY3RvcnkoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUnVudGltZUNvbmZpZ1NjcmlwdChwdWJsaWNQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBgXHJcbiAgICA8c2NyaXB0PlxyXG4gICAgICB3aW5kb3cuX19NWF9DQURfQVBQX0FTU0VUX1BBVEhfXyA9ICcke3B1YmxpY1BhdGh9JztcclxuICAgIDwvc2NyaXB0PlxyXG4gIGAudHJpbSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29weURpcihcclxuICBzcmM6IHN0cmluZyxcclxuICBkZXN0OiBzdHJpbmcsXHJcbiAgcHVibGljRGlyOiBzdHJpbmcsXHJcbiAgb3B0aW9uczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPixcclxuICBjYWxsYmFjazogKGVycj86IEVycm9yKSA9PiB2b2lkXHJcbik6IHZvaWQge1xyXG4gIC8vIOKchSDmlrDlop7vvJrmo4Dmn6UgcHVibGljRGlyIOaYr+WQpuWtmOWcqFxyXG4gIGlmICghZnMuZXhpc3RzU3luYyhwdWJsaWNEaXIpKSB7XHJcbiAgICAvLyDkuI3lrZjlnKjliJnot7Pov4fmiavmj4/vvIznm7TmjqXlpI3liLZcclxuICAgIGRvQ29weShzcmMsIGRlc3QsIHB1YmxpY0RpciwgbmV3IFNldCgpLCBvcHRpb25zLCBjYWxsYmFjayk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG4gIC8vIOesrOS4gOatpe+8muaJq+aPjyBwdWJsaWNEaXIg5LiL5omA5pyJ5paH5Lu277yI55u45a+55LqOIHB1YmxpY0RpciDnmoTot6/lvoTvvIlcclxuICBzY2FuUHVibGljRGlyKHB1YmxpY0RpciwgKGVyciwgcHVibGljRmlsZXMpID0+IHtcclxuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG5cclxuICAgIC8vIOesrOS6jOatpe+8muW8gOWni+WkjeWItu+8jOS8oOWFpSBwdWJsaWNGaWxlcyDnvJPlrZhcclxuICAgIGRvQ29weShzcmMsIGRlc3QsIHB1YmxpY0RpciwgcHVibGljRmlsZXMhLCBvcHRpb25zLCBjYWxsYmFjayk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbi8vIOWunumZheaJp+ihjOWkjeWItueahOWHveaVsFxyXG5mdW5jdGlvbiBkb0NvcHkoXHJcbiAgc3JjOiBzdHJpbmcsXHJcbiAgZGVzdDogc3RyaW5nLFxyXG4gIHB1YmxpY0Rpcjogc3RyaW5nLFxyXG4gIHB1YmxpY0ZpbGVzOiBTZXQ8c3RyaW5nPixcclxuICBvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+LCAvLyDms6jmhI/vvJrov5nph4zpnIDopoHnoa7kv50gZW5hYmxlQ29tcHJlc3NlZEFzc2V0cyDmmK/lv4XpgInnmoRcclxuICBjYWxsYmFjazogKGVycj86IEVycm9yKSA9PiB2b2lkXHJcbikge1xyXG4gIGZzLm1rZGlyKGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlIH0sIChlcnIpID0+IHtcclxuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG5cclxuICAgIGZzLnJlYWRkaXIoc3JjLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSwgKGVyciwgZGlyZW50cykgPT4ge1xyXG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuXHJcbiAgICAgIGxldCBwZW5kaW5nID0gZGlyZW50cy5sZW5ndGg7XHJcbiAgICAgIGlmIChwZW5kaW5nID09PSAwKSByZXR1cm4gY2FsbGJhY2soKTtcclxuXHJcbiAgICAgIC8vIOaPkOWJjeWumuS5ieWOi+e8qeaWh+S7tuaJqeWxleWQjVxyXG4gICAgICBjb25zdCBjb21wcmVzc2VkRXh0cyA9IFsnLmd6J107IC8vIOWPr+aMiemcgOaJqeWxlVxyXG5cclxuICAgICAgZGlyZW50cy5mb3JFYWNoKChkaXJlbnQpID0+IHtcclxuICAgICAgICBjb25zdCBzcmNQYXRoID0gcmVzb2x2ZShzcmMsIGRpcmVudC5uYW1lKTtcclxuICAgICAgICBjb25zdCBkZXN0UGF0aCA9IHJlc29sdmUoZGVzdCwgZGlyZW50Lm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKHNyYywgc3JjUGF0aCkucmVwbGFjZSgvXFxcXC9nLCAnLycpIGFzIENvbmZpZ0ZpbGVuYW1lO1xyXG5cclxuICAgICAgICAvLyDmlrDlop7vvJrlpoLmnpznpoHnlKjljovnvKnotYTmupDkuJTmmK/ljovnvKnmlofku7bvvIzliJnot7Pov4dcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhb3B0aW9ucy5lbmFibGVDb21wcmVzc2VkQXNzZXRzICYmXHJcbiAgICAgICAgICBjb21wcmVzc2VkRXh0cy5zb21lKGV4dCA9PiByZWxhdGl2ZVBhdGguZW5kc1dpdGgoZXh0KSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcclxuICAgICAgICAgIGRvQ29weShzcmNQYXRoLCBkZXN0UGF0aCwgcHVibGljRGlyLCBwdWJsaWNGaWxlcywgb3B0aW9ucywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaXJlbnQuaXNGaWxlKCkpIHtcclxuICAgICAgICAgIGlmIChwdWJsaWNGaWxlcy5oYXMocmVsYXRpdmVQYXRoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBwdWJsaWNGaWxlUGF0aCA9IHJlc29sdmUocHVibGljRGlyLCByZWxhdGl2ZVBhdGgpO1xyXG4gICAgICAgICAgICBmcy5jb3B5RmlsZShwdWJsaWNGaWxlUGF0aCwgZGVzdFBhdGgsIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuICAgICAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoQ09ORklHX0ZJTEVOQU1FUy5pbmNsdWRlcyhyZWxhdGl2ZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNvbmZpZ0ZpbGUoc3JjUGF0aCwgZGVzdFBhdGgsIHJlbGF0aXZlUGF0aCwgb3B0aW9ucywgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG4gICAgICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZnMuY29weUZpbGUoc3JjUGF0aCwgZGVzdFBhdGgsIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuICAgICAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKC0tcGVuZGluZyA9PT0gMCkgY2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn1cclxuLy8g5omr5o+PIHB1YmxpY0RpciDkuIvmiYDmnInmlofku7bvvIzov5Tlm57nm7jlr7nkuo4gcHVibGljRGlyIOeahOi3r+W+hOmbhuWQiFxyXG5mdW5jdGlvbiBzY2FuUHVibGljRGlyKFxyXG4gIHB1YmxpY0Rpcjogc3RyaW5nLFxyXG4gIGNhbGxiYWNrOiAoZXJyOiBOb2RlSlMuRXJybm9FeGNlcHRpb24gfCBudWxsLCBmaWxlcz86IFNldDxzdHJpbmc+KSA9PiB2b2lkXHJcbikge1xyXG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG5cclxuICBmdW5jdGlvbiB3YWxrKGRpcjogc3RyaW5nKSB7XHJcbiAgICBmcy5yZWFkZGlyKGRpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0sIChlcnIsIGRpcmVudHMpID0+IHtcclxuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcblxyXG4gICAgICBsZXQgcGVuZGluZyA9IGRpcmVudHMubGVuZ3RoO1xyXG4gICAgICBpZiAocGVuZGluZyA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkaXJlbnRzLmZvckVhY2goKGRpcmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVzb2x2ZShkaXIsIGRpcmVudC5uYW1lKTtcclxuICAgICAgICBjb25zdCByZWxQYXRoID0gcmVsYXRpdmUocHVibGljRGlyLCBmdWxsUGF0aCkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xyXG5cclxuICAgICAgICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcclxuICAgICAgICAgIHdhbGsoZnVsbFBhdGgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGlyZW50LmlzRmlsZSgpKSB7XHJcbiAgICAgICAgICByZXN1bHQuYWRkKHJlbFBhdGgpO1xyXG4gICAgICAgICAgaWYgKC0tcGVuZGluZyA9PT0gMCkge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgd2FsayhwdWJsaWNEaXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udGVudFR5cGUoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgY29uc3QgZXh0ID0gZmlsZVBhdGguc3BsaXQoJy4nKS5wb3AoKT8udG9Mb3dlckNhc2UoKSB8fCAnJztcclxuICBjb25zdCB0eXBlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICdjc3MnOiAndGV4dC9jc3MnLFxyXG4gICAgJ2pzJzogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnLFxyXG4gICAgJ2pzb24nOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAncG5nJzogJ2ltYWdlL3BuZycsXHJcbiAgICAnanBnJzogJ2ltYWdlL2pwZWcnLFxyXG4gICAgJ2pwZWcnOiAnaW1hZ2UvanBlZycsXHJcbiAgICAnZ2lmJzogJ2ltYWdlL2dpZicsXHJcbiAgICAnc3ZnJzogJ2ltYWdlL3N2Zyt4bWwnLFxyXG4gICAgJ3dvZmYnOiAnZm9udC93b2ZmJyxcclxuICAgICd3b2ZmMic6ICdmb250L3dvZmYyJyxcclxuICAgICd0dGYnOiAnZm9udC90dGYnLFxyXG4gICAgJ2VvdCc6ICdhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdCcsXHJcbiAgICAnaWNvJzogJ2ltYWdlL3gtaWNvbicsXHJcbiAgICAnd2FzbSc6ICdhcHBsaWNhdGlvbi93YXNtJyxcclxuICAgICd6aXAnOiAnYXBwbGljYXRpb24vemlwJyxcclxuICAgICdyYXInOiAnYXBwbGljYXRpb24veC1yYXItY29tcHJlc3NlZCcsXHJcbiAgICAnN3onOiAnYXBwbGljYXRpb24veC03ei1jb21wcmVzc2VkJyxcclxuICAgICd0YXInOiAnYXBwbGljYXRpb24veC10YXInLFxyXG4gICAgJ2d6JzogJ2FwcGxpY2F0aW9uL2d6aXAnLFxyXG4gICAgJ2J6Mic6ICdhcHBsaWNhdGlvbi94LWJ6aXAyJyxcclxuICAgICd4eic6ICdhcHBsaWNhdGlvbi94LXh6J1xyXG4gIH07XHJcbiAgcmV0dXJuIHR5cGVzW2V4dF0gfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICog5qCH5YeG5YyW6Lev5b6E77yM56Gu5L+d5LulICcvJyDnu5PlsL5cclxuICovXHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocDogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gcmVzb2x2ZShwKS5yZXBsYWNlKC9cXFxcL2csICcvJykgKyAnLyc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDliJvlu7rpgJrnlKjkuK3pl7Tku7bvvJrkvJjlhYjkvb/nlKggcHVibGljIOi1hOa6kO+8jOWbnumAgOWIsCBzb3VyY2VBc3NldHNQYXRoXHJcbiAqIOWvueaghyBjcmVhdGVTdGF0aWNNaWRkbGV3YXJlIOmjjuagvFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU14Q2FkQXNzZXRzTWlkZGxld2FyZShcclxuICByb290OiBzdHJpbmcsXHJcbiAgb3B0aW9uczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPixcclxuICBwdWJsaWNEaXI6IHN0cmluZyxcclxuICBsb2dnZXI/OiBhbnlcclxuKSB7XHJcbiAgY29uc3QgeyBvdXRwdXREaXIsIGlzV2FzbVN0ID0gZmFsc2UgfSA9IG9wdGlvbnM7XHJcbiAgLy8g4pyFIDEuIOinhOiMg+WMlui3r+W+hFxyXG4gIGNvbnN0IGJhc2VQYXRoID0gYC8ke291dHB1dERpci5yZXBsYWNlKC9eXFwvKy8sICcnKX1gOyAvLyAnL214Y2FkQXBwQXNzZXRzJ1xyXG4gIGNvbnN0IHNvdXJjZUFzc2V0c1Jvb3QgPSBub3JtYWxpemVQYXRoKHJvb3QpO1xyXG5cclxuICByZXR1cm4gYXN5bmMgKHJlcTogYW55LCByZXM6IGFueSwgbmV4dDogKCkgPT4gdm9pZCkgPT4ge1xyXG4gICAgLy8g4pyFIDIuIOWfuuacrOagoemqjFxyXG4gICAgaWYgKCFyZXEudXJsIHx8IHR5cGVvZiByZXEudXJsICE9PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gbmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKchSAzLiDorr7nva7lronlhajlpLTvvIjpnZ4gaXNXYXNtU3Qg5qih5byP77yJXHJcbiAgICBpZiAoIWlzV2FzbVN0KSB7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0Nyb3NzLU9yaWdpbi1PcGVuZXItUG9saWN5JywgJ3NhbWUtb3JpZ2luJyk7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0Nyb3NzLU9yaWdpbi1FbWJlZGRlci1Qb2xpY3knLCAncmVxdWlyZS1jb3JwJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g4pyFIDQuIOino+aekCBVUkwg6Lev5b6E77yI5Y67IHF1ZXJ577yM6Kej56CB77yJXHJcbiAgICBjb25zdCB1cmxQYXRoID0gcmVxLnVybC5zcGxpdCgnPycpWzBdO1xyXG4gICAgbGV0IGZpbGVQYXRoITogc3RyaW5nO1xyXG4gICAgbGV0IGZpbGVOYW1lITogc3RyaW5nO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGRlY29kZWRQYXRoID0gZGVjb2RlVVJJQ29tcG9uZW50KHVybFBhdGgpO1xyXG4gICAgICAvLyDop4TojIPljJbot6/lvoTvvIzpmLLmraIgLi4vLi4vIOi2iuadg1xyXG4gICAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGRlY29kZWRQYXRoLnJlcGxhY2UoL15bL1xcXFxdKy8sICcnKTtcclxuXHJcbiAgICAgIC8vIOKchSA1LiDkvJjlhYjvvJrmo4Dmn6UgcHVibGljLyR7b3V0cHV0RGlyfSDnm67lvZVcclxuICAgICAgY29uc3QgcHVibGljRmlsZVBhdGggPSBqb2luKHB1YmxpY0Rpciwgbm9ybWFsaXplZFBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdCA9IGF3YWl0IGZzLnByb21pc2VzLnN0YXQocHVibGljRmlsZVBhdGgpO1xyXG4gICAgICAgIGlmIChzdGF0LmlzRmlsZSgpKSB7XHJcbiAgICAgICAgICBmaWxlUGF0aCA9IHB1YmxpY0ZpbGVQYXRoO1xyXG4gICAgICAgICAgZmlsZU5hbWUgPSBiYXNlbmFtZShub3JtYWxpemVkUGF0aCk7XHJcbiAgICAgICAgICByZXR1cm4gc2VydmVGaWxlKGZpbGVQYXRoLCBmaWxlTmFtZSwgcmVzLCBsb2dnZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgLy8gcHVibGljIOS4reayoeacie+8jOe7p+e7reafpeaJviBzb3VyY2VBc3NldHNQYXRoXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOKchSA2LiBmYWxsYmFja++8muafpeaJviBzb3VyY2VBc3NldHNQYXRoXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVTYWZlUGF0aChkZWNvZGVkUGF0aCwgc291cmNlQXNzZXRzUm9vdCwgYmFzZVBhdGgpO1xyXG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSByZXN1bHQuc3RhdHVzQ29kZSB8fCA0MDA7XHJcbiAgICAgICAgcmV0dXJuIHJlcy5lbmQocmVzdWx0Lm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVzdWx0LmZpbGVQYXRoKSBmaWxlUGF0aCA9IHJlc3VsdC5maWxlUGF0aDtcclxuICAgICAgaWYgKHJlc3VsdC5maWxlTmFtZSkgZmlsZU5hbWUgPSByZXN1bHQuZmlsZU5hbWU7XHJcblxyXG4gICAgICAvLyDinIUgNy4g5bCd6K+V55SxIGhhbmRsZUNvbmZpZ1JlcXVlc3Qg5aSE55CG77yI5aaC5rOo5YWl6YWN572u77yJXHJcbiAgICAgIGNvbnN0IGhhbmRsZWQgPSBhd2FpdCBoYW5kbGVDb25maWdSZXF1ZXN0KFxyXG4gICAgICAgIGZpbGVQYXRoLFxyXG4gICAgICAgIGZpbGVOYW1lLFxyXG4gICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgcmVzLFxyXG4gICAgICAgIGxvZ2dlclxyXG4gICAgICApO1xyXG4gICAgICBpZiAoaGFuZGxlZCkgcmV0dXJuO1xyXG5cclxuICAgICAgLy8g4pyFIDguIOehruS/neaYr+aWh+S7tlxyXG4gICAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMucHJvbWlzZXMuc3RhdChmaWxlUGF0aCk7XHJcbiAgICAgIGlmICghc3RhdC5pc0ZpbGUoKSkge1xyXG4gICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xyXG4gICAgICAgIHJldHVybiByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZCcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gc2VydmVGaWxlKGZpbGVQYXRoLCBmaWxlTmFtZSwgcmVzLCBsb2dnZXIpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGxvZ2dlcj8ud2Fybj8uKGBbTXhDYWRBc3NldHNdIFNlcnZlIGZhaWxlZCBmb3IgJHtyZXEudXJsfTogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWApO1xyXG4gICAgICBpZiAocmVzLmhlYWRlcnNTZW50KSByZXR1cm47XHJcbiAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xyXG4gICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZCcpO1xyXG4gICAgfVxyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDlsIHoo4Xmlofku7blk43lupTpgLvovpHvvIjmtYHlvI/kvKDovpPvvIlcclxuICovXHJcbmZ1bmN0aW9uIHNlcnZlRmlsZShmaWxlUGF0aDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nLCByZXM6IGFueSwgbG9nZ2VyPzogYW55KSB7XHJcbiAgY29uc3Qgc3RyZWFtID0gZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlUGF0aCk7XHJcblxyXG4gIHN0cmVhbS5vbignZXJyb3InLCAoZXJyOiBOb2RlSlMuRXJybm9FeGNlcHRpb24pID0+IHtcclxuICAgIGlmIChyZXMuaGVhZGVyc1NlbnQpIHJldHVybjtcclxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcgfHwgZXJyLmNvZGUgPT09ICdFQUNDRVMnKSB7XHJcbiAgICAgIHJldHVybiByZXMuc3RhdHVzQ29kZSA9PT0gMjAwID8gcmVzLmVuZCgpIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgbG9nZ2VyPy5lcnJvcj8uKGBbTXhDYWRBc3NldHNdIFJlYWQgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCwgZXJyKTtcclxuICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xyXG4gICAgcmVzLmVuZCgnSW50ZXJuYWwgU2VydmVyIEVycm9yJyk7XHJcbiAgfSk7XHJcblxyXG4gIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsIGdldENvbnRlbnRUeXBlKGZpbGVOYW1lKSk7XHJcbiAgcmVzLnNldEhlYWRlcignWC1Db250ZW50LVR5cGUtT3B0aW9ucycsICdub3NuaWZmJyk7XHJcblxyXG4gIHN0cmVhbS5waXBlKHJlcyk7XHJcbn0iXSwibmFtZXMiOlsiZnMiLCJlcnIiLCJuYW1lIiwic3RhdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
1525
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtQ1hubkNiakgubWpzIiwic291cmNlcyI6WyIuLi8uLi9wYWNrVG9vbFBsdWdpblNyYy9zaGFyZWQvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiXHJcbi8vIHBsdWdpbnMvc2hhcmVkL2luZGV4LnRzXHJcbmltcG9ydCB7IGJhc2VuYW1lLCBqb2luLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgZnMsIHsgTm9QYXJhbUNhbGxiYWNrIH0gZnJvbSAnZnMnO1xyXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAndXJsJztcclxuaW1wb3J0IHsgbmFtZSB9IGZyb20gXCIuLi8uLi9saWIvcGFja2FnZS5qc29uXCJcclxuXHJcbmltcG9ydCB7IE14UXVpY2tDb21tYW5kIH0gZnJvbSBcIi4vdHlwZXMvbXhRdWlja0NvbW1hbmQuZFwiXHJcbmltcG9ydCB7IE14U2VydmVyQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXMvbXhTZXJ2ZXJDb25maWcuZFwiXHJcbmltcG9ydCB7IE14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXMvbXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcuZFwiXHJcbmltcG9ydCB7IE14VWlDb25maWcgfSBmcm9tIFwiLi90eXBlcy9teFVpQ29uZmlnLmRcIlxyXG5pbXBvcnQgeyBNeGNhZFVpQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXMvbXhjYWRVaUNvbmZpZy5kXCJcclxuaW1wb3J0IHsgVnVldGlmeVRoZW1lQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXMvdnVldGlmeVRoZW1lQ29uZmlnLmRcIlxyXG5pbXBvcnQgYXBpTWFwIGZyb20gJy4uL2FwaS1tYXAuanNvbidcclxuZXhwb3J0IGNvbnN0IGdldEFwaU1hcCA9ICgpID0+IGFwaU1hcFxyXG5leHBvcnQgaW50ZXJmYWNlIE14UGx1Z2luQ29uZmlnIHtcclxuICBwbHVnaW5zOiAoc3RyaW5nIHwge1xyXG4gICAgbmFtZT86IHN0cmluZyxcclxuICAgIGlzQWZ0ZXJMb2FkPzogYm9vbGVhbixcclxuICAgIGRpcj86IGJvb2xlYW4sXHJcbiAgICB2ZXJzaW9uPzogc3RyaW5nXHJcbiAgfSlbXVxyXG59XHJcbi8vID09PSDmlrDlop7vvJrphY3nva7mlofku7blkI3luLjph48gPT09XHJcbmV4cG9ydCBjb25zdCBDT05GSUdfRklMRU5BTUVTID0gW1xyXG4gIC8vICdteGNhZFVpQ29uZmlnLmpzb24nLFxyXG4gICdteFF1aWNrQ29tbWFuZC5qc29uJyxcclxuICAnbXhTZXJ2ZXJDb25maWcuanNvbicsXHJcbiAgJ214U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnLmpzb24nLFxyXG4gICdteFVpQ29uZmlnLmpzb24nLFxyXG4gICd2dWV0aWZ5VGhlbWVDb25maWcuanNvbicsXHJcbiAgLy8gJ3BsdWdpbnMvY29uZmlnLmpzb24nXHJcbl0gYXMgY29uc3Q7XHJcbi8qKlxyXG4gKiDphY3nva7mlofku7blpITnkIblmahcclxuICog5Y+v6YCJ77ya5a+554m55a6a6YWN572u5paH5Lu26L+b6KGM6L+Q6KGM5pe25L+u5pS5XHJcbiAqIOWHveaVsOaOpeaUtuWOn+WniyBKU09OIOaVsOaNru+8jOi/lOWbnuS/ruaUueWQjueahCBKU09OIOaVsOaNru+8iOWPr+W8guatpe+8iVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2Zvcm1GdW5jdGlvbnMge1xyXG4gIC8vIHRyYW5zZm9ybU14Y2FkVWlDb25maWcoZGF0YTogTXhjYWRVaUNvbmZpZyk6IFByb21pc2U8TXhjYWRVaUNvbmZpZz4gfCBNeGNhZFVpQ29uZmlnO1xyXG4gIHRyYW5zZm9ybU14UXVpY2tDb21tYW5kKGRhdGE6IE14UXVpY2tDb21tYW5kKTogUHJvbWlzZTxNeFF1aWNrQ29tbWFuZD4gfCBNeFF1aWNrQ29tbWFuZDtcclxuICB0cmFuc2Zvcm1NeFNlcnZlckNvbmZpZyhkYXRhOiBNeFNlcnZlckNvbmZpZyk6IFByb21pc2U8TXhTZXJ2ZXJDb25maWc+IHwgTXhTZXJ2ZXJDb25maWc7XHJcbiAgdHJhbnNmb3JtTXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcoZGF0YTogTXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcpOiBQcm9taXNlPE14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnPiB8IE14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnO1xyXG4gIHRyYW5zZm9ybU14VWlDb25maWcoZGF0YTogTXhVaUNvbmZpZyk6IFByb21pc2U8TXhVaUNvbmZpZz4gfCBNeFVpQ29uZmlnO1xyXG4gIHRyYW5zZm9ybVZ1ZXRpZnlUaGVtZUNvbmZpZyhkYXRhOiBWdWV0aWZ5VGhlbWVDb25maWcpOiBQcm9taXNlPFZ1ZXRpZnlUaGVtZUNvbmZpZz4gfCBWdWV0aWZ5VGhlbWVDb25maWc7XHJcbiAgLy8gdHJhbnNmb3JtTXhQbHVnaW5zQ29uZmlnKGRhdGE6IE14UGx1Z2luQ29uZmlnW10pOiBQcm9taXNlPE14UGx1Z2luQ29uZmlnW10+IHwgTXhQbHVnaW5Db25maWdbXTtcclxufVxyXG4vLyDmianlsZXmj5Lku7bpgInpobnmjqXlj6MgPT09XHJcbmV4cG9ydCBpbnRlcmZhY2UgTXhDYWRBc3NldHNQbHVnaW5PcHRpb25zIGV4dGVuZHMgUGFydGlhbDxUcmFuc2Zvcm1GdW5jdGlvbnM+IHtcclxuICAvKipcclxuICAgKiDmnoTlu7rlkI7vvIxteGNhZEFwcEFzc2V0cyDotYTmupDlrZjmlL7nmoTlrZDnm67lvZXlkI3jgIJcclxuICAgKiBAZGVmYXVsdCAnbXhjYWRBcHBBc3NldHMnXHJcbiAgICovXHJcbiAgb3V0cHV0RGlyPzogc3RyaW5nO1xyXG4gIC8qKiDnrKzkuInmlrnkvp3otZYqL1xyXG4gIGxpYnJhcnlOYW1lcz86IChrZXlvZiB0eXBlb2YgZXh0ZXJuYWxzKVtdO1xyXG4gIC8qKiDmmK/lkKbljZXnur/nqIvliqDovb13YXNtICjpu5jorqTkvb/nlKjlpJrnur/nqIvlj4rliqDovb0pICovXHJcbiAgaXNXYXNtU3Q/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICog5piv5ZCm5ZCv55So6aKE5Y6L57yp6LWE5rqQ77yI5aaCIC5neiDmlofku7bvvInnmoTmi7fotJ0g6buY6K6k5pivdHJ1ZVxyXG4gICog6K6+572u5Li6IGZhbHNlIOaXtu+8jC5neiDljovnvKnmlofku7blsIbkuI3kvJrooqvlpI3liLbliLDovpPlh7rnm67lvZVcclxuICAqIEBkZWZhdWx0IHRydWVcclxuICAqL1xyXG4gIGVuYWJsZUNvbXByZXNzZWRBc3NldHM/OiBib29sZWFuO1xyXG59XHJcblxyXG5cclxuLy8gPT09IOWinuW8uu+8mnJlc29sdmVPcHRpb25zIOm7mOiupOWAvCA9PT1cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVPcHRpb25zKG9wdGlvbnM6IE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucyA9IHt9KTogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPiB7XHJcbiAgY29uc3QgcmVzb2x2ZWQ6IFJlcXVpcmVkPE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucz4gPSB7XHJcbiAgICBvdXRwdXREaXI6IG9wdGlvbnMub3V0cHV0RGlyIHx8ICdteGNhZEFwcEFzc2V0cycsXHJcbiAgICBsaWJyYXJ5TmFtZXM6IG9wdGlvbnMubGlicmFyeU5hbWVzIHx8IFtdLFxyXG4gICAgaXNXYXNtU3Q6IG9wdGlvbnMuaXNXYXNtU3QgfHwgZmFsc2UsXHJcbiAgICBlbmFibGVDb21wcmVzc2VkQXNzZXRzOiBvcHRpb25zLmVuYWJsZUNvbXByZXNzZWRBc3NldHMgfHwgdHJ1ZSxcclxuICAgIC8vIHRyYW5zZm9ybU14Y2FkVWlDb25maWc6IG9wdGlvbnMudHJhbnNmb3JtTXhjYWRVaUNvbmZpZyB8fCAoKGQpID0+IGQpLFxyXG4gICAgdHJhbnNmb3JtTXhRdWlja0NvbW1hbmQ6IG9wdGlvbnMudHJhbnNmb3JtTXhRdWlja0NvbW1hbmQgfHwgKChkKSA9PiBkKSxcclxuICAgIHRyYW5zZm9ybU14U2VydmVyQ29uZmlnOiBvcHRpb25zLnRyYW5zZm9ybU14U2VydmVyQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICB0cmFuc2Zvcm1NeFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1NeFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZyB8fCAoKGQpID0+IGQpLFxyXG4gICAgdHJhbnNmb3JtTXhVaUNvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1NeFVpQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICB0cmFuc2Zvcm1WdWV0aWZ5VGhlbWVDb25maWc6IG9wdGlvbnMudHJhbnNmb3JtVnVldGlmeVRoZW1lQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICAvLyB0cmFuc2Zvcm1NeFBsdWdpbnNDb25maWc6IG9wdGlvbnMudHJhbnNmb3JtTXhQbHVnaW5zQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgfTtcclxuICByZXR1cm4gcmVzb2x2ZWQ7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFBhdGhSZXN1bHQge1xyXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XHJcbiAgZmlsZVBhdGg/OiBzdHJpbmc7ICAgICAgICAgLy8g5beyIHJlc29sdmUg55qE5a6J5YWo5paH5Lu26Lev5b6EXHJcbiAgdXJsUGF0aD86IHN0cmluZzsgICAgICAgICAgLy8g6Kej56CB5ZCO55qEIFVSTCDot6/lvoTvvIjkuI3lkKsgcXVlcnnvvIlcclxuICBmaWxlTmFtZT86IHN0cmluZzsgICAgICAgICAvLyDmlofku7blkI3vvIhiYXNlbmFtZe+8iVxyXG4gIHN0YXR1c0NvZGU/OiBudW1iZXI7XHJcbiAgbWVzc2FnZT86IHN0cmluZztcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiDlronlhajop6PmnpDlubbpqozor4Hor7fmsYLot6/lvoRcclxuICogQHBhcmFtIHJlcVVybCDor7fmsYLnmoQgVVJM77yI5aaCICcvYXNzZXRzL214U2VydmVyQ29uZmlnLmpzb24/dj0xJ++8iVxyXG4gKiBAcGFyYW0gcm9vdCDmnKzlnLDmoLnnm67lvZXvvIjlpoIgJ0Q6L3Byb2plY3QvZGlzdC9teGNhZCfvvIlcclxuICogQHBhcmFtIGJhc2VQYXRoIOWPr+mAieeahOWfuuehgOi3r+W+hOWJjee8gO+8iOWmgiAnL214Y2FkLyfvvIznlKjkuo4gVml0Ze+8iVxyXG4gKiBAcmV0dXJucyDop6PmnpDnu5PmnpzmiJbplJnor69cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2FmZVBhdGgoXHJcbiAgcmVxVXJsOiBzdHJpbmcsXHJcbiAgcm9vdDogc3RyaW5nLFxyXG4gIGJhc2VQYXRoPzogc3RyaW5nXHJcbik6IFBhcnNlZFBhdGhSZXN1bHQge1xyXG4gIC8vIDEuIOWfuuacrOagoemqjFxyXG4gIGlmICghcmVxVXJsIHx8IHR5cGVvZiByZXFVcmwgIT09ICdzdHJpbmcnKSB7XHJcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNDAwLCBtZXNzYWdlOiAnQmFkIFJlcXVlc3QnIH07XHJcbiAgfVxyXG5cclxuICAvLyAyLiDmj5Dlj5bot6/lvoTvvIjljrsgcXVlcnkg5ZKMIGhhc2jvvIlcclxuICBsZXQgdXJsUGF0aCA9IHJlcVVybC5zcGxpdCgnPycpWzBdLnNwbGl0KCcjJylbMF07XHJcblxyXG4gIC8vIDMuIOino+eggSBVUkxcclxuICBsZXQgZGVjb2RlZFBhdGg6IHN0cmluZztcclxuICB0cnkge1xyXG4gICAgZGVjb2RlZFBhdGggPSBkZWNvZGVVUklDb21wb25lbnQodXJsUGF0aCk7XHJcbiAgICAvLyDpmLLmraIgbnVsbCDlrZfoioLmlLvlh7tcclxuICAgIGlmIChkZWNvZGVkUGF0aC5pbmNsdWRlcygnXFwwJykpIHtcclxuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIHN0YXR1c0NvZGU6IDQwMCwgbWVzc2FnZTogJ0ludmFsaWQgVVJMJyB9O1xyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIHN0YXR1c0NvZGU6IDQwMCwgbWVzc2FnZTogJ0ludmFsaWQgVVJMIGVuY29kaW5nJyB9O1xyXG4gIH1cclxuXHJcbiAgLy8gNC4g5aSE55CGIGJhc2VQYXRo77yI5aaCIFZpdGUg55qEIGJhc2XvvIlcclxuICBpZiAoYmFzZVBhdGggJiYgZGVjb2RlZFBhdGguc3RhcnRzV2l0aChiYXNlUGF0aCkpIHtcclxuICAgIGRlY29kZWRQYXRoID0gZGVjb2RlZFBhdGguc2xpY2UoYmFzZVBhdGgubGVuZ3RoKTtcclxuICB9XHJcblxyXG4gIC8vIDUuIOa4heeQhui3r+W+hO+8muWOu+mZpOW8gOWktOWkmuS9meeahCAvXHJcbiAgLy8g5L6L5aaC77yaLy9hc3NldHMvZmlsZS5qc29uIC0+IGFzc2V0cy9maWxlLmpzb25cclxuICBjb25zdCBjbGVhbmVkUGF0aCA9IGRlY29kZWRQYXRoLnJlcGxhY2UoL15cXC8rLywgJycpO1xyXG5cclxuICAvLyA2LiDmi7zmjqXmlofku7bot6/lvoRcclxuICBjb25zdCBmaWxlUGF0aCA9IGpvaW4ocm9vdCwgY2xlYW5lZFBhdGggfHwgJy4nKTtcclxuXHJcbiAgLy8gNy4g5a6J5YWo5qOA5p+l77ya6Ziy5q2i6Lev5b6E56m/6LaKXHJcbiAgbGV0IG5vcm1hbGl6ZWRGaWxlOiBzdHJpbmc7XHJcbiAgbGV0IG5vcm1hbGl6ZWRSb290OiBzdHJpbmc7XHJcbiAgdHJ5IHtcclxuICAgIG5vcm1hbGl6ZWRGaWxlID0gcmVzb2x2ZShmaWxlUGF0aCk7XHJcbiAgICBub3JtYWxpemVkUm9vdCA9IHJlc29sdmUocm9vdCk7XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNTAwLCBtZXNzYWdlOiAnUGF0aCByZXNvbHV0aW9uIGZhaWxlZCcgfTtcclxuICB9XHJcblxyXG4gIC8vIOKchSDlhbPplK7vvJrnoa7kv50gbm9ybWFsaXplZEZpbGUg5ZyoIG5vcm1hbGl6ZWRSb290IOebruW9leS4i1xyXG4gIGNvbnN0IG5vcm1hbGl6ZWRGaWxlU3RyID0gbm9ybWFsaXplZEZpbGUucmVwbGFjZSgvXFxcXC9nLCAnLycpICsgJy8nO1xyXG4gIGNvbnN0IG5vcm1hbGl6ZWRSb290U3RyID0gbm9ybWFsaXplZFJvb3QucmVwbGFjZSgvXFxcXC9nLCAnLycpICsgJy8nO1xyXG5cclxuICBpZiAoIW5vcm1hbGl6ZWRGaWxlU3RyLnN0YXJ0c1dpdGgobm9ybWFsaXplZFJvb3RTdHIpKSB7XHJcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNDAzLCBtZXNzYWdlOiAnRm9yYmlkZGVuOiBQYXRoIHRyYXZlcnNhbCBkZXRlY3RlZCcgfTtcclxuICB9XHJcblxyXG4gIC8vIDguIOaPkOWPliBmaWxlTmFtZVxyXG4gIGNvbnN0IHBhdGhTZWdtZW50cyA9IGNsZWFuZWRQYXRoLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pO1xyXG4gIGNvbnN0IGZpbGVOYW1lID0gcGF0aFNlZ21lbnRzLmxlbmd0aCA+IDAgPyBiYXNlbmFtZShwYXRoU2VnbWVudHNbcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDFdKSA6ICcnO1xyXG5cclxuICAvLyDinIUg5oiQ5YqfXHJcbiAgcmV0dXJuIHtcclxuICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICBmaWxlUGF0aDogbm9ybWFsaXplZEZpbGUsXHJcbiAgICB1cmxQYXRoOiBkZWNvZGVkUGF0aCxcclxuICAgIGZpbGVOYW1lLFxyXG4gIH07XHJcbn1cclxuXHJcblxyXG50eXBlIENvbmZpZ0ZpbGVuYW1lID0gKHR5cGVvZiBDT05GSUdfRklMRU5BTUVTKVtudW1iZXJdO1xyXG5mdW5jdGlvbiBoYW5kbGVDb25maWdGaWxlKFxyXG4gIHNyY1BhdGg6IHN0cmluZyxcclxuICBkZXN0UGF0aDogc3RyaW5nLFxyXG4gIGZpbGVuYW1lOiBDb25maWdGaWxlbmFtZSxcclxuICBvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+LFxyXG4gIGNhbGxiYWNrOiBOb1BhcmFtQ2FsbGJhY2tcclxuKSB7XHJcbiAgZnMucmVhZEZpbGUoc3JjUGF0aCwgJ3V0Zi04JywgYXN5bmMgKGVyciwgY29udGVudCkgPT4ge1xyXG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGRhdGEgPSBjb250ZW50LnRyaW0oKSA/IEpTT04ucGFyc2UoY29udGVudCkgOiB7fTtcclxuXHJcbiAgICAgIC8vIOKchSDmraPnoa7nlJ/miJAgdHJhbnNmb3JtIOWHveaVsOWQjVxyXG4gICAgICBjb25zdCBiYXNlTmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kL2ksICcnKTtcclxuICAgICAgY29uc3QgdHJhbnNmb3JtS2V5ID0gYHRyYW5zZm9ybSR7cGFzY2FsQ2FzZShiYXNlTmFtZSl9YDsgLy8g5L6L5aaCOiB0cmFuc2Zvcm1QbHVnaW5zQ29uZmlnIOaIliB0cmFuc2Zvcm1NeFBsdWdpbnNDb25maWdcclxuXHJcbiAgICAgIGNvbnN0IHRyYW5zZm9ybUZuID0gKG9wdGlvbnMgYXMgYW55KVt0cmFuc2Zvcm1LZXldO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1GbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGRhdGEgPSBhd2FpdCB0cmFuc2Zvcm1GbihkYXRhKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xyXG4gICAgICBmcy53cml0ZUZpbGUoZGVzdFBhdGgsIGpzb24sICd1dGYtOCcsIGNhbGxiYWNrKTtcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcbi8qKlxyXG4gKiDlpITnkIbphY3nva7mlofku7bor7fmsYLvvJror7vlj5Yg4oaSIOi9rOaNoiDihpIg6L+U5Zue5ZON5bqUXHJcbiAqIOeUqOS6jiBWaXRlL1dlYnBhY2sgZGV2IHNlcnZlciDkuK3pl7Tku7ZcclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVDb25maWdSZXF1ZXN0KFxyXG4gIGZpbGVQYXRoOiBzdHJpbmcsICAgICAgICAgICAvLyDlt7Lnu4/pqozor4Hov4fnmoTlronlhajot6/lvoRcclxuICBmaWxlTmFtZTogc3RyaW5nLCAgICAgICAgICAgLy8g5paH5Lu25ZCN77yM5aaCICdteFNlcnZlckNvbmZpZy5qc29uJ1xyXG4gIG9wdGlvbnM6IFJlcXVpcmVkPE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucz4sXHJcbiAgcmVzOiBhbnksXHJcbiAgbG9nZ2VyPzogeyBpbmZvPzogKG1zZzogc3RyaW5nKSA9PiB2b2lkOyBlcnJvcj86IChtc2c6IHN0cmluZykgPT4gdm9pZCB9XHJcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gIC8vIOS7heWkhOeQhueZveWQjeWNleWGheeahOaWh+S7tlxyXG4gIGlmICghKENPTkZJR19GSUxFTkFNRVMgYXMgdW5rbm93biBhcyBzdHJpbmcpLmluY2x1ZGVzKGZpbGVOYW1lKSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XHJcbiAgICBsZXQgZGF0YSA9IGNvbnRlbnQudHJpbSgpID8gSlNPTi5wYXJzZShjb250ZW50KSA6IHt9O1xyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybUtleSA9IGB0cmFuc2Zvcm0ke3Bhc2NhbENhc2UoZmlsZU5hbWUucmVwbGFjZSgvXFwuanNvbiQvaSwgJycpKX1gO1xyXG4gICAgY29uc3QgdHJhbnNmb3JtRm4gPSAob3B0aW9ucyBhcyBhbnkpW3RyYW5zZm9ybUtleV07XHJcblxyXG4gICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1GbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBkYXRhID0gYXdhaXQgdHJhbnNmb3JtRm4oZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuICAgIHJlcy5zZXRIZWFkZXIoJ0NhY2hlLUNvbnRyb2wnLCAnbm8tY2FjaGUnKTtcclxuICAgIHJlcy5lbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMikpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGxvZ2dlcj8uZXJyb3I/LihgW214Y2FkLWFzc2V0c10g4p2MIEZhaWxlZCB0byBzZXJ2ZSAke2ZpbGVOYW1lfTogJHtlcnIubWVzc2FnZX1gKTtcclxuICAgIGlmICghcmVzLmhlYWRlcnNTZW50KSB7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XHJcbiAgICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xyXG4gICAgICByZXMuZW5kKCdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlOyAvLyDlt7LlpITnkIbplJnor69cclxuICB9XHJcbn1cclxuXHJcbi8qKiDliJvlu7rpgJrnlKjlhajlsYDkuK3pl7Tku7YgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUdsb2JhbFVuaXZlcnNhbE1pZGRsZXdhcmUob3B0aW9uczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPikge1xyXG4gIHJldHVybiBhc3luYyAocmVxOiBhbnksIHJlczogYW55LCBuZXh0OiBhbnkpID0+IHtcclxuICAgIGlmICghb3B0aW9ucy5pc1dhc21TdCkge1xyXG4gICAgICByZXMuc2V0SGVhZGVyKCdDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeScsICdzYW1lLW9yaWdpbicpO1xyXG4gICAgICByZXMuc2V0SGVhZGVyKCdDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5JywgJ3JlcXVpcmUtY29ycCcpO1xyXG4gICAgfVxyXG4gICAgbmV4dCgpO1xyXG4gIH1cclxufVxyXG4vLyA9PT0g6L6F5Yqp5Ye95pWw77ya5a2X56ym5Liy6L2sIFBhc2NhbENhc2UgPT09XHJcbmV4cG9ydCBmdW5jdGlvbiBwYXNjYWxDYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gc3RyXHJcbiAgICAucmVwbGFjZSgvW15hLXpBLVowLTldKyguKS9nLCAobSwgY2hyKSA9PiBjaHIudG9VcHBlckNhc2UoKSlcclxuICAgIC5yZXBsYWNlKC9eLi8sIGMgPT4gYy50b1VwcGVyQ2FzZSgpKTtcclxufVxyXG5cclxuLy8gPT09IOWFtuS7luWOn+acieWvvOWHuuS/neaMgeS4jeWPmCA9PT1cclxuZXhwb3J0IGNvbnN0IGV4dGVybmFscyA9IHtcclxuICAndnVlJzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLlZ1ZScsXHJcbiAgJ2F4aW9zJzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLmF4aW9zJyxcclxuICAndnVldGlmeSc6ICdNWENBREFQUF9FWFRFUk5BTExJQlJBUklFUy52dWV0aWZ5JyxcclxuICAndnVldGlmeS9jb21wb25lbnRzJzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLnZ1ZXRpZnlDb21wb25lbnRzJyxcclxuICAnbWFwYm94LWdsJzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLm1hcGJveGdsJyxcclxuICAncGluaWEnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMucGluaWEnXHJcbn07XHJcbi8vIOWni+e7iOS/neeVmeeahOaooeWdl1xyXG5jb25zdCBBTFdBWVNfS0VFUCA9IG5ldyBTZXQoWydteGNhZCcsICdteGRyYXcnXSk7XHJcblxyXG4vKipcclxuICog5riF55CG5bm25YaZ5YWl5q2j56Gu55qE57G75Z6L5byV55SoXHJcbiAqL1xyXG5mdW5jdGlvbiBzeW5jVHlwZVJlZmVyZW5jZXMobGlicmFyeU5hbWVzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gIGNvbnN0IHJvb3REaXIgPSBwcm9jZXNzLmN3ZCgpO1xyXG4gIGNvbnN0IGRpc3REaXIgPSByZXNvbHZlKHJvb3REaXIsICdub2RlX21vZHVsZXMnLCAnbXhjYWQtYXBwJywgJ2Rpc3QnKTtcclxuICBjb25zdCBpbmRleFBhdGggPSByZXNvbHZlKGRpc3REaXIsICdpbmRleC5kLnRzJyk7XHJcblxyXG4gIHRyeSB7XHJcbiAgICAvLyDinIUgMS4g5qOA5p+lIGRpc3Qg55uu5b2VXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZGlzdERpcikpIHtcclxuICAgICAgY29uc29sZS53YXJuKGDimqDvuI8gbXhjYWQtYXBwL2Rpc3Qg55uu5b2V5LiN5a2Y5Zyo77yM6Lez6L+H57G75Z6L5ZCM5q2lOiAke2Rpc3REaXJ9YCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDinIUgMi4g56Gu5L+dIGluZGV4LmQudHMg5a2Y5ZyoXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoaW5kZXhQYXRoKSkge1xyXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGluZGV4UGF0aCwgJycsICd1dGYtOCcpO1xyXG4gICAgICBjb25zb2xlLmxvZyhg4pyFIOW3suWIm+W7uuepuuexu+Wei+aWh+S7tjogJHtpbmRleFBhdGh9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoaW5kZXhQYXRoLCAndXRmLTgnKTtcclxuICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgvXFxyP1xcbi8pO1xyXG5cclxuICAgIC8vIOKchSAzLiDmj5Dlj5bmiYDmnInnjrDmnInnmoQgLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4veHh4LmQudHNcIiAvPiDooYxcclxuICAgIGNvbnN0IHJlZmVyZW5jZVJlZ2V4ID0gL1xcL1xcL1xcL1xccyo8cmVmZXJlbmNlXFxzK3BhdGg9XCJcXC5cXC8oW15cIl0rXFwuZFxcLnRzKVwiXFxzKlxcLz4vO1xyXG4gICAgY29uc3QgZXhpc3RpbmdSZWZzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgY29uc3Qgbm9uUmVmTGluZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgbGluZXMuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgY29uc3QgbWF0Y2ggPSBsaW5lLnRyaW0oKS5tYXRjaChyZWZlcmVuY2VSZWdleCk7XHJcbiAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gbWF0Y2hbMV07IC8vIOWmgiBcInZ1ZS5kLnRzXCJcclxuICAgICAgICBjb25zdCBtb2R1bGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvXFwuZFxcLnRzJC8sICcnKTsgLy8g5o+Q5Y+W5qih5Z2X5ZCNXHJcbiAgICAgICAgZXhpc3RpbmdSZWZzLnB1c2gobW9kdWxlTmFtZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbm9uUmVmTGluZXMucHVzaChsaW5lKTsgLy8g5L+d55WZ6Z2eIHJlZmVyZW5jZSDooYxcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g4pyFIDQuIOiuoeeul+acgOe7iOW6lOivpeS/neeVmeeahOaooeWdl1xyXG4gICAgY29uc3QgdmFsaWRNb2R1bGVzID0gbmV3IFNldDxzdHJpbmc+KEFMV0FZU19LRUVQKTtcclxuXHJcbiAgICBsaWJyYXJ5TmFtZXMuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgLy8g5b+F6aG75ZyoIGV4dGVybmFscyDkuK3lrprkuYnvvIzkuJTnsbvlnovmlofku7blrZjlnKhcclxuICAgICAgaWYgKG5hbWUgaW4gZXh0ZXJuYWxzKSB7XHJcbiAgICAgICAgY29uc3QgZHRzUGF0aCA9IHJlc29sdmUoZGlzdERpciwgYCR7bmFtZX0uZC50c2ApO1xyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGR0c1BhdGgpKSB7XHJcbiAgICAgICAgICB2YWxpZE1vZHVsZXMuYWRkKG5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g4pyFIDUuIOeUn+aIkOacgOe7iOeahCByZWZlcmVuY2Ug6KGM77yI5L+d5oyBIG14Y2FkIOWSjCBteGRyYXcg5Zyo5pyA5YmN77yJXHJcbiAgICBjb25zdCBmaW5hbFJlZnMgPSBbJ214Y2FkJywgJ214ZHJhdyddXHJcbiAgICAgIC5maWx0ZXIobmFtZSA9PiB2YWxpZE1vZHVsZXMuaGFzKG5hbWUpKVxyXG4gICAgICAubWFwKG5hbWUgPT4gYC8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLyR7bmFtZX0uZC50c1wiIC8+YCk7XHJcblxyXG4gICAgLy8g5re75Yqg5YW25LuWIHZhbGlkTW9kdWxlcyDkuK3nmoTvvIjljrvph43vvIlcclxuICAgIEFycmF5LmZyb20odmFsaWRNb2R1bGVzKVxyXG4gICAgICAuZmlsdGVyKG5hbWUgPT4gIUFMV0FZU19LRUVQLmhhcyhuYW1lKSlcclxuICAgICAgLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgZmluYWxSZWZzLnB1c2goYC8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLyR7bmFtZX0uZC50c1wiIC8+YCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIOKchSA2LiDlkIjlubbvvJrmnIDnu4jlvJXnlKggKyDljp/lp4vpnZ7lvJXnlKjooYxcclxuICAgIGNvbnN0IHJlc3VsdExpbmVzID0gWy4uLmZpbmFsUmVmcywgJycsIC4uLm5vblJlZkxpbmVzLmZpbHRlcihsID0+IGwudHJpbSgpLmxlbmd0aCA+IDApXTtcclxuXHJcbiAgICAvLyDnp7vpmaTov57nu63nqbrooYzvvIzkv53nlZnkuIDkuKrliIbpmpRcclxuICAgIGNvbnN0IGNsZWFuZWRMaW5lcyA9IHJlc3VsdExpbmVzLmZpbHRlcigobGluZSwgaSwgYXJyKSA9PlxyXG4gICAgICAhKGxpbmUudHJpbSgpID09PSAnJyAmJiBpID4gMCAmJiBhcnJbaSAtIDFdLnRyaW0oKSA9PT0gJycpXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBjbGVhbmVkTGluZXMuam9pbignXFxuJykudHJpbSgpICsgJ1xcbic7XHJcblxyXG4gICAgLy8g4pyFIDcuIOWGmeWbnuaWh+S7tu+8iOS7heW9k+WGheWuueWPmOWMluaXtu+8iVxyXG4gICAgaWYgKGNvbnRlbnQudHJpbSgpICE9PSBuZXdDb250ZW50LnRyaW0oKSkge1xyXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGluZGV4UGF0aCwgbmV3Q29udGVudCwgJ3V0Zi04Jyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKGDinIUg5bey5ZCM5q2lIG14Y2FkLWFwcC9kaXN0L2luZGV4LmQudHMg57G75Z6L5byV55SoYCk7XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKGDinYwg5ZCM5q2l57G75Z6L5byV55So5aSx6LSlOmAsIGVycik7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICog6aKE5a6a5LmJ5bqT5ZCN5Yiw5YWo5bGA5Y+Y6YeP55qE5pig5bCEXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgREVGQVVMVF9MSUJSQVJZX01BUDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICBteGNhZDogJ014Q0FEJyxcclxuICBteGRyYXc6ICdNeCdcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZXJuYWxzKFxyXG4gIGxpYnJhcnlOYW1lczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPlsnbGlicmFyeU5hbWVzJ11cclxuKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XHJcbiAgc3luY1R5cGVSZWZlcmVuY2VzKGxpYnJhcnlOYW1lcyk7XHJcbiAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0geyAuLi5ERUZBVUxUX0xJQlJBUllfTUFQIH1cclxuICBpZiAoIUFycmF5LmlzQXJyYXkobGlicmFyeU5hbWVzKSkgcmV0dXJuIHJlc3VsdDtcclxuICBsaWJyYXJ5TmFtZXMuZm9yRWFjaChuYW1lID0+IHtcclxuICAgIGlmIChuYW1lIGluIGV4dGVybmFscykge1xyXG4gICAgICByZXN1bHRbbmFtZV0gPSBleHRlcm5hbHNbbmFtZSBhcyBrZXlvZiB0eXBlb2YgZXh0ZXJuYWxzXTtcclxuICAgIH1cclxuICB9KTtcclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlQXNzZXRzUGF0aCgpOiBzdHJpbmcge1xyXG4gIGxldCBjdXJyZW50RmlsZTogc3RyaW5nO1xyXG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIGN1cnJlbnRGaWxlID0gX19maWxlbmFtZTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgY3VycmVudEZpbGUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCk7XHJcbiAgfVxyXG4gIGNvbnN0IHBhY2thZ2VSb290ID0gcmVzb2x2ZShjdXJyZW50RmlsZSwgJy4uJywgJy4uJywgJy4uJyk7XHJcbiAgY29uc3QgYXNzZXRzUGF0aCA9IHJlc29sdmUocGFja2FnZVJvb3QsIG5hbWUsICdkaXN0JywgJ214Y2FkQXBwQXNzZXRzJyk7XHJcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGFzc2V0c1BhdGgpKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG14LWNhZC1hcHAgYXNzZXRzIG5vdCBmb3VuZCBhdDogJHthc3NldHNQYXRofWApO1xyXG4gIH1cclxuICByZXR1cm4gYXNzZXRzUGF0aDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrU291cmNlQXNzZXRzRXhpc3QoKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgcGF0aCA9IGdldFNvdXJjZUFzc2V0c1BhdGgoKTtcclxuICByZXR1cm4gZnMuZXhpc3RzU3luYyhwYXRoKSAmJiBmcy5sc3RhdFN5bmMocGF0aCkuaXNEaXJlY3RvcnkoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUnVudGltZUNvbmZpZ1NjcmlwdChwdWJsaWNQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBgXHJcbiAgICA8c2NyaXB0PlxyXG4gICAgICB3aW5kb3cuX19NWF9DQURfQVBQX0FTU0VUX1BBVEhfXyA9ICcke3B1YmxpY1BhdGh9JztcclxuICAgIDwvc2NyaXB0PlxyXG4gIGAudHJpbSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29weURpcihcclxuICBzcmM6IHN0cmluZyxcclxuICBkZXN0OiBzdHJpbmcsXHJcbiAgcHVibGljRGlyOiBzdHJpbmcsXHJcbiAgb3B0aW9uczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPixcclxuICBjYWxsYmFjazogKGVycj86IEVycm9yKSA9PiB2b2lkXHJcbik6IHZvaWQge1xyXG4gIC8vIOKchSDmlrDlop7vvJrmo4Dmn6UgcHVibGljRGlyIOaYr+WQpuWtmOWcqFxyXG4gIGlmICghZnMuZXhpc3RzU3luYyhwdWJsaWNEaXIpKSB7XHJcbiAgICAvLyDkuI3lrZjlnKjliJnot7Pov4fmiavmj4/vvIznm7TmjqXlpI3liLZcclxuICAgIGRvQ29weShzcmMsIGRlc3QsIHB1YmxpY0RpciwgbmV3IFNldCgpLCBvcHRpb25zLCBjYWxsYmFjayk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG4gIC8vIOesrOS4gOatpe+8muaJq+aPjyBwdWJsaWNEaXIg5LiL5omA5pyJ5paH5Lu277yI55u45a+55LqOIHB1YmxpY0RpciDnmoTot6/lvoTvvIlcclxuICBzY2FuUHVibGljRGlyKHB1YmxpY0RpciwgKGVyciwgcHVibGljRmlsZXMpID0+IHtcclxuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG5cclxuICAgIC8vIOesrOS6jOatpe+8muW8gOWni+WkjeWItu+8jOS8oOWFpSBwdWJsaWNGaWxlcyDnvJPlrZhcclxuICAgIGRvQ29weShzcmMsIGRlc3QsIHB1YmxpY0RpciwgcHVibGljRmlsZXMhLCBvcHRpb25zLCBjYWxsYmFjayk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbi8vIOWunumZheaJp+ihjOWkjeWItueahOWHveaVsFxyXG5mdW5jdGlvbiBkb0NvcHkoXHJcbiAgc3JjOiBzdHJpbmcsXHJcbiAgZGVzdDogc3RyaW5nLFxyXG4gIHB1YmxpY0Rpcjogc3RyaW5nLFxyXG4gIHB1YmxpY0ZpbGVzOiBTZXQ8c3RyaW5nPixcclxuICBvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+LCAvLyDms6jmhI/vvJrov5nph4zpnIDopoHnoa7kv50gZW5hYmxlQ29tcHJlc3NlZEFzc2V0cyDmmK/lv4XpgInnmoRcclxuICBjYWxsYmFjazogKGVycj86IEVycm9yKSA9PiB2b2lkXHJcbikge1xyXG4gIGZzLm1rZGlyKGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlIH0sIChlcnIpID0+IHtcclxuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG5cclxuICAgIGZzLnJlYWRkaXIoc3JjLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSwgKGVyciwgZGlyZW50cykgPT4ge1xyXG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuXHJcbiAgICAgIGxldCBwZW5kaW5nID0gZGlyZW50cy5sZW5ndGg7XHJcbiAgICAgIGlmIChwZW5kaW5nID09PSAwKSByZXR1cm4gY2FsbGJhY2soKTtcclxuXHJcbiAgICAgIC8vIOaPkOWJjeWumuS5ieWOi+e8qeaWh+S7tuaJqeWxleWQjVxyXG4gICAgICBjb25zdCBjb21wcmVzc2VkRXh0cyA9IFsnLmd6J107IC8vIOWPr+aMiemcgOaJqeWxlVxyXG5cclxuICAgICAgZGlyZW50cy5mb3JFYWNoKChkaXJlbnQpID0+IHtcclxuICAgICAgICBjb25zdCBzcmNQYXRoID0gcmVzb2x2ZShzcmMsIGRpcmVudC5uYW1lKTtcclxuICAgICAgICBjb25zdCBkZXN0UGF0aCA9IHJlc29sdmUoZGVzdCwgZGlyZW50Lm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKHNyYywgc3JjUGF0aCkucmVwbGFjZSgvXFxcXC9nLCAnLycpIGFzIENvbmZpZ0ZpbGVuYW1lO1xyXG5cclxuICAgICAgICAvLyDmlrDlop7vvJrlpoLmnpznpoHnlKjljovnvKnotYTmupDkuJTmmK/ljovnvKnmlofku7bvvIzliJnot7Pov4dcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhb3B0aW9ucy5lbmFibGVDb21wcmVzc2VkQXNzZXRzICYmXHJcbiAgICAgICAgICBjb21wcmVzc2VkRXh0cy5zb21lKGV4dCA9PiByZWxhdGl2ZVBhdGguZW5kc1dpdGgoZXh0KSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcclxuICAgICAgICAgIGRvQ29weShzcmNQYXRoLCBkZXN0UGF0aCwgcHVibGljRGlyLCBwdWJsaWNGaWxlcywgb3B0aW9ucywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaXJlbnQuaXNGaWxlKCkpIHtcclxuICAgICAgICAgIGlmIChwdWJsaWNGaWxlcy5oYXMocmVsYXRpdmVQYXRoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBwdWJsaWNGaWxlUGF0aCA9IHJlc29sdmUocHVibGljRGlyLCByZWxhdGl2ZVBhdGgpO1xyXG4gICAgICAgICAgICBmcy5jb3B5RmlsZShwdWJsaWNGaWxlUGF0aCwgZGVzdFBhdGgsIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuICAgICAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoQ09ORklHX0ZJTEVOQU1FUy5pbmNsdWRlcyhyZWxhdGl2ZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNvbmZpZ0ZpbGUoc3JjUGF0aCwgZGVzdFBhdGgsIHJlbGF0aXZlUGF0aCwgb3B0aW9ucywgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG4gICAgICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZnMuY29weUZpbGUoc3JjUGF0aCwgZGVzdFBhdGgsIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuICAgICAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKC0tcGVuZGluZyA9PT0gMCkgY2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn1cclxuLy8g5omr5o+PIHB1YmxpY0RpciDkuIvmiYDmnInmlofku7bvvIzov5Tlm57nm7jlr7nkuo4gcHVibGljRGlyIOeahOi3r+W+hOmbhuWQiFxyXG5mdW5jdGlvbiBzY2FuUHVibGljRGlyKFxyXG4gIHB1YmxpY0Rpcjogc3RyaW5nLFxyXG4gIGNhbGxiYWNrOiAoZXJyOiBOb2RlSlMuRXJybm9FeGNlcHRpb24gfCBudWxsLCBmaWxlcz86IFNldDxzdHJpbmc+KSA9PiB2b2lkXHJcbikge1xyXG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG5cclxuICBmdW5jdGlvbiB3YWxrKGRpcjogc3RyaW5nKSB7XHJcbiAgICBmcy5yZWFkZGlyKGRpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0sIChlcnIsIGRpcmVudHMpID0+IHtcclxuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcblxyXG4gICAgICBsZXQgcGVuZGluZyA9IGRpcmVudHMubGVuZ3RoO1xyXG4gICAgICBpZiAocGVuZGluZyA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkaXJlbnRzLmZvckVhY2goKGRpcmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVzb2x2ZShkaXIsIGRpcmVudC5uYW1lKTtcclxuICAgICAgICBjb25zdCByZWxQYXRoID0gcmVsYXRpdmUocHVibGljRGlyLCBmdWxsUGF0aCkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xyXG5cclxuICAgICAgICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcclxuICAgICAgICAgIHdhbGsoZnVsbFBhdGgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGlyZW50LmlzRmlsZSgpKSB7XHJcbiAgICAgICAgICByZXN1bHQuYWRkKHJlbFBhdGgpO1xyXG4gICAgICAgICAgaWYgKC0tcGVuZGluZyA9PT0gMCkge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgd2FsayhwdWJsaWNEaXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udGVudFR5cGUoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgY29uc3QgZXh0ID0gZmlsZVBhdGguc3BsaXQoJy4nKS5wb3AoKT8udG9Mb3dlckNhc2UoKSB8fCAnJztcclxuICBjb25zdCB0eXBlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICdjc3MnOiAndGV4dC9jc3MnLFxyXG4gICAgJ2pzJzogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnLFxyXG4gICAgJ2pzb24nOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAncG5nJzogJ2ltYWdlL3BuZycsXHJcbiAgICAnanBnJzogJ2ltYWdlL2pwZWcnLFxyXG4gICAgJ2pwZWcnOiAnaW1hZ2UvanBlZycsXHJcbiAgICAnZ2lmJzogJ2ltYWdlL2dpZicsXHJcbiAgICAnc3ZnJzogJ2ltYWdlL3N2Zyt4bWwnLFxyXG4gICAgJ3dvZmYnOiAnZm9udC93b2ZmJyxcclxuICAgICd3b2ZmMic6ICdmb250L3dvZmYyJyxcclxuICAgICd0dGYnOiAnZm9udC90dGYnLFxyXG4gICAgJ2VvdCc6ICdhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdCcsXHJcbiAgICAnaWNvJzogJ2ltYWdlL3gtaWNvbicsXHJcbiAgICAnd2FzbSc6ICdhcHBsaWNhdGlvbi93YXNtJyxcclxuICAgICd6aXAnOiAnYXBwbGljYXRpb24vemlwJyxcclxuICAgICdyYXInOiAnYXBwbGljYXRpb24veC1yYXItY29tcHJlc3NlZCcsXHJcbiAgICAnN3onOiAnYXBwbGljYXRpb24veC03ei1jb21wcmVzc2VkJyxcclxuICAgICd0YXInOiAnYXBwbGljYXRpb24veC10YXInLFxyXG4gICAgJ2d6JzogJ2FwcGxpY2F0aW9uL2d6aXAnLFxyXG4gICAgJ2J6Mic6ICdhcHBsaWNhdGlvbi94LWJ6aXAyJyxcclxuICAgICd4eic6ICdhcHBsaWNhdGlvbi94LXh6J1xyXG4gIH07XHJcbiAgcmV0dXJuIHR5cGVzW2V4dF0gfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICog5qCH5YeG5YyW6Lev5b6E77yM56Gu5L+d5LulICcvJyDnu5PlsL5cclxuICovXHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocDogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gcmVzb2x2ZShwKS5yZXBsYWNlKC9cXFxcL2csICcvJykgKyAnLyc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDliJvlu7rpgJrnlKjkuK3pl7Tku7bvvJrkvJjlhYjkvb/nlKggcHVibGljIOi1hOa6kO+8jOWbnumAgOWIsCBzb3VyY2VBc3NldHNQYXRoXHJcbiAqIOWvueaghyBjcmVhdGVTdGF0aWNNaWRkbGV3YXJlIOmjjuagvFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU14Q2FkQXNzZXRzTWlkZGxld2FyZShcclxuICByb290OiBzdHJpbmcsXHJcbiAgb3B0aW9uczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPixcclxuICBwdWJsaWNEaXI6IHN0cmluZyxcclxuICBsb2dnZXI/OiBhbnlcclxuKSB7XHJcbiAgY29uc3QgeyBvdXRwdXREaXIsIGlzV2FzbVN0ID0gZmFsc2UgfSA9IG9wdGlvbnM7XHJcbiAgLy8g4pyFIDEuIOinhOiMg+WMlui3r+W+hFxyXG4gIGNvbnN0IGJhc2VQYXRoID0gYC8ke291dHB1dERpci5yZXBsYWNlKC9eXFwvKy8sICcnKX1gOyAvLyAnL214Y2FkQXBwQXNzZXRzJ1xyXG4gIGNvbnN0IHNvdXJjZUFzc2V0c1Jvb3QgPSBub3JtYWxpemVQYXRoKHJvb3QpO1xyXG5cclxuICByZXR1cm4gYXN5bmMgKHJlcTogYW55LCByZXM6IGFueSwgbmV4dDogKCkgPT4gdm9pZCkgPT4ge1xyXG4gICAgLy8g4pyFIDIuIOWfuuacrOagoemqjFxyXG4gICAgaWYgKCFyZXEudXJsIHx8IHR5cGVvZiByZXEudXJsICE9PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gbmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKchSAzLiDorr7nva7lronlhajlpLTvvIjpnZ4gaXNXYXNtU3Qg5qih5byP77yJXHJcbiAgICBpZiAoIWlzV2FzbVN0KSB7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0Nyb3NzLU9yaWdpbi1PcGVuZXItUG9saWN5JywgJ3NhbWUtb3JpZ2luJyk7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0Nyb3NzLU9yaWdpbi1FbWJlZGRlci1Qb2xpY3knLCAncmVxdWlyZS1jb3JwJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g4pyFIDQuIOino+aekCBVUkwg6Lev5b6E77yI5Y67IHF1ZXJ577yM6Kej56CB77yJXHJcbiAgICBjb25zdCB1cmxQYXRoID0gcmVxLnVybC5zcGxpdCgnPycpWzBdO1xyXG4gICAgbGV0IGZpbGVQYXRoITogc3RyaW5nO1xyXG4gICAgbGV0IGZpbGVOYW1lITogc3RyaW5nO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGRlY29kZWRQYXRoID0gZGVjb2RlVVJJQ29tcG9uZW50KHVybFBhdGgpO1xyXG4gICAgICAvLyDop4TojIPljJbot6/lvoTvvIzpmLLmraIgLi4vLi4vIOi2iuadg1xyXG4gICAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGRlY29kZWRQYXRoLnJlcGxhY2UoL15bL1xcXFxdKy8sICcnKTtcclxuXHJcbiAgICAgIC8vIOKchSA1LiDkvJjlhYjvvJrmo4Dmn6UgcHVibGljLyR7b3V0cHV0RGlyfSDnm67lvZVcclxuICAgICAgY29uc3QgcHVibGljRmlsZVBhdGggPSBqb2luKHB1YmxpY0Rpciwgbm9ybWFsaXplZFBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdCA9IGF3YWl0IGZzLnByb21pc2VzLnN0YXQocHVibGljRmlsZVBhdGgpO1xyXG4gICAgICAgIGlmIChzdGF0LmlzRmlsZSgpKSB7XHJcbiAgICAgICAgICBmaWxlUGF0aCA9IHB1YmxpY0ZpbGVQYXRoO1xyXG4gICAgICAgICAgZmlsZU5hbWUgPSBiYXNlbmFtZShub3JtYWxpemVkUGF0aCk7XHJcbiAgICAgICAgICByZXR1cm4gc2VydmVGaWxlKGZpbGVQYXRoLCBmaWxlTmFtZSwgcmVzLCBsb2dnZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgLy8gcHVibGljIOS4reayoeacie+8jOe7p+e7reafpeaJviBzb3VyY2VBc3NldHNQYXRoXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOKchSA2LiBmYWxsYmFja++8muafpeaJviBzb3VyY2VBc3NldHNQYXRoXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVTYWZlUGF0aChkZWNvZGVkUGF0aCwgc291cmNlQXNzZXRzUm9vdCwgYmFzZVBhdGgpO1xyXG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSByZXN1bHQuc3RhdHVzQ29kZSB8fCA0MDA7XHJcbiAgICAgICAgcmV0dXJuIHJlcy5lbmQocmVzdWx0Lm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVzdWx0LmZpbGVQYXRoKSBmaWxlUGF0aCA9IHJlc3VsdC5maWxlUGF0aDtcclxuICAgICAgaWYgKHJlc3VsdC5maWxlTmFtZSkgZmlsZU5hbWUgPSByZXN1bHQuZmlsZU5hbWU7XHJcblxyXG4gICAgICAvLyDinIUgNy4g5bCd6K+V55SxIGhhbmRsZUNvbmZpZ1JlcXVlc3Qg5aSE55CG77yI5aaC5rOo5YWl6YWN572u77yJXHJcbiAgICAgIGNvbnN0IGhhbmRsZWQgPSBhd2FpdCBoYW5kbGVDb25maWdSZXF1ZXN0KFxyXG4gICAgICAgIGZpbGVQYXRoLFxyXG4gICAgICAgIGZpbGVOYW1lLFxyXG4gICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgcmVzLFxyXG4gICAgICAgIGxvZ2dlclxyXG4gICAgICApO1xyXG4gICAgICBpZiAoaGFuZGxlZCkgcmV0dXJuO1xyXG5cclxuICAgICAgLy8g4pyFIDguIOehruS/neaYr+aWh+S7tlxyXG4gICAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMucHJvbWlzZXMuc3RhdChmaWxlUGF0aCk7XHJcbiAgICAgIGlmICghc3RhdC5pc0ZpbGUoKSkge1xyXG4gICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xyXG4gICAgICAgIHJldHVybiByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZCcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gc2VydmVGaWxlKGZpbGVQYXRoLCBmaWxlTmFtZSwgcmVzLCBsb2dnZXIpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGxvZ2dlcj8ud2Fybj8uKGBbTXhDYWRBc3NldHNdIFNlcnZlIGZhaWxlZCBmb3IgJHtyZXEudXJsfTogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWApO1xyXG4gICAgICBpZiAocmVzLmhlYWRlcnNTZW50KSByZXR1cm47XHJcbiAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xyXG4gICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZCcpO1xyXG4gICAgfVxyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDlsIHoo4Xmlofku7blk43lupTpgLvovpHvvIjmtYHlvI/kvKDovpPvvIlcclxuICovXHJcbmZ1bmN0aW9uIHNlcnZlRmlsZShmaWxlUGF0aDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nLCByZXM6IGFueSwgbG9nZ2VyPzogYW55KSB7XHJcbiAgY29uc3Qgc3RyZWFtID0gZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlUGF0aCk7XHJcblxyXG4gIHN0cmVhbS5vbignZXJyb3InLCAoZXJyOiBOb2RlSlMuRXJybm9FeGNlcHRpb24pID0+IHtcclxuICAgIGlmIChyZXMuaGVhZGVyc1NlbnQpIHJldHVybjtcclxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcgfHwgZXJyLmNvZGUgPT09ICdFQUNDRVMnKSB7XHJcbiAgICAgIHJldHVybiByZXMuc3RhdHVzQ29kZSA9PT0gMjAwID8gcmVzLmVuZCgpIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgbG9nZ2VyPy5lcnJvcj8uKGBbTXhDYWRBc3NldHNdIFJlYWQgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCwgZXJyKTtcclxuICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xyXG4gICAgcmVzLmVuZCgnSW50ZXJuYWwgU2VydmVyIEVycm9yJyk7XHJcbiAgfSk7XHJcblxyXG4gIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsIGdldENvbnRlbnRUeXBlKGZpbGVOYW1lKSk7XHJcbiAgcmVzLnNldEhlYWRlcignWC1Db250ZW50LVR5cGUtT3B0aW9ucycsICdub3NuaWZmJyk7XHJcblxyXG4gIHN0cmVhbS5waXBlKHJlcyk7XHJcbn0iXSwibmFtZXMiOlsiZnMiLCJlcnIiLCJuYW1lIiwic3RhdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -33,6 +33,7 @@ const mxcad = [
33
33
  "ITableDimensions",
34
34
  "ITablePosition",
35
35
  "ITableStyle",
36
+ "ITableStyleInfo",
36
37
  "IXlsxTableData",
37
38
  "IsZero",
38
39
  "LineInfo",
@@ -90,6 +91,7 @@ const mxcad = [
90
91
  "McDbText",
91
92
  "McDbTextStyleTable",
92
93
  "McDbTextStyleTableRecord",
94
+ "McDbViewport",
93
95
  "McDbWipeout",
94
96
  "McDbXline",
95
97
  "McDbXlsxTable",
@@ -1306,7 +1308,7 @@ function getSourceAssetsPath() {
1306
1308
  if (typeof __filename !== "undefined") {
1307
1309
  currentFile = __filename;
1308
1310
  } else {
1309
- currentFile = url.fileURLToPath(typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("index-DEvHdVxU.js", document.baseURI).href);
1311
+ currentFile = url.fileURLToPath(typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("index-DubbRmDj.js", document.baseURI).href);
1310
1312
  }
1311
1313
  const packageRoot = path.resolve(currentFile, "..", "..", "..");
1312
1314
  const assetsPath = path.resolve(packageRoot, name, "dist", "mxcadAppAssets");
@@ -1520,4 +1522,4 @@ exports.getContentType = getContentType;
1520
1522
  exports.getExternals = getExternals;
1521
1523
  exports.getSourceAssetsPath = getSourceAssetsPath;
1522
1524
  exports.resolveOptions = resolveOptions;
1523
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtREV2SGRWeFUuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3BhY2tUb29sUGx1Z2luU3JjL3NoYXJlZC9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJcclxuLy8gcGx1Z2lucy9zaGFyZWQvaW5kZXgudHNcclxuaW1wb3J0IHsgYmFzZW5hbWUsIGpvaW4sIHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XHJcbmltcG9ydCBmcywgeyBOb1BhcmFtQ2FsbGJhY2sgfSBmcm9tICdmcyc7XHJcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICd1cmwnO1xyXG5pbXBvcnQgeyBuYW1lIH0gZnJvbSBcIi4uLy4uL2xpYi9wYWNrYWdlLmpzb25cIlxyXG5cclxuaW1wb3J0IHsgTXhRdWlja0NvbW1hbmQgfSBmcm9tIFwiLi90eXBlcy9teFF1aWNrQ29tbWFuZC5kXCJcclxuaW1wb3J0IHsgTXhTZXJ2ZXJDb25maWcgfSBmcm9tIFwiLi90eXBlcy9teFNlcnZlckNvbmZpZy5kXCJcclxuaW1wb3J0IHsgTXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcgfSBmcm9tIFwiLi90eXBlcy9teFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZy5kXCJcclxuaW1wb3J0IHsgTXhVaUNvbmZpZyB9IGZyb20gXCIuL3R5cGVzL214VWlDb25maWcuZFwiXHJcbmltcG9ydCB7IE14Y2FkVWlDb25maWcgfSBmcm9tIFwiLi90eXBlcy9teGNhZFVpQ29uZmlnLmRcIlxyXG5pbXBvcnQgeyBWdWV0aWZ5VGhlbWVDb25maWcgfSBmcm9tIFwiLi90eXBlcy92dWV0aWZ5VGhlbWVDb25maWcuZFwiXHJcbmltcG9ydCBhcGlNYXAgZnJvbSAnLi4vYXBpLW1hcC5qc29uJ1xyXG5leHBvcnQgY29uc3QgZ2V0QXBpTWFwID0gKCkgPT4gYXBpTWFwXHJcbmV4cG9ydCBpbnRlcmZhY2UgTXhQbHVnaW5Db25maWcge1xyXG4gIHBsdWdpbnM6IChzdHJpbmcgfCB7XHJcbiAgICBuYW1lPzogc3RyaW5nLFxyXG4gICAgaXNBZnRlckxvYWQ/OiBib29sZWFuLFxyXG4gICAgZGlyPzogYm9vbGVhbixcclxuICAgIHZlcnNpb24/OiBzdHJpbmdcclxuICB9KVtdXHJcbn1cclxuLy8gPT09IOaWsOWinu+8mumFjee9ruaWh+S7tuWQjeW4uOmHjyA9PT1cclxuZXhwb3J0IGNvbnN0IENPTkZJR19GSUxFTkFNRVMgPSBbXHJcbiAgLy8gJ214Y2FkVWlDb25maWcuanNvbicsXHJcbiAgJ214UXVpY2tDb21tYW5kLmpzb24nLFxyXG4gICdteFNlcnZlckNvbmZpZy5qc29uJyxcclxuICAnbXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcuanNvbicsXHJcbiAgJ214VWlDb25maWcuanNvbicsXHJcbiAgJ3Z1ZXRpZnlUaGVtZUNvbmZpZy5qc29uJyxcclxuICAvLyAncGx1Z2lucy9jb25maWcuanNvbidcclxuXSBhcyBjb25zdDtcclxuLyoqXHJcbiAqIOmFjee9ruaWh+S7tuWkhOeQhuWZqFxyXG4gKiDlj6/pgInvvJrlr7nnibnlrprphY3nva7mlofku7bov5vooYzov5DooYzml7bkv67mlLlcclxuICog5Ye95pWw5o6l5pS25Y6f5aeLIEpTT04g5pWw5o2u77yM6L+U5Zue5L+u5pS55ZCO55qEIEpTT04g5pWw5o2u77yI5Y+v5byC5q2l77yJXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZm9ybUZ1bmN0aW9ucyB7XHJcbiAgLy8gdHJhbnNmb3JtTXhjYWRVaUNvbmZpZyhkYXRhOiBNeGNhZFVpQ29uZmlnKTogUHJvbWlzZTxNeGNhZFVpQ29uZmlnPiB8IE14Y2FkVWlDb25maWc7XHJcbiAgdHJhbnNmb3JtTXhRdWlja0NvbW1hbmQoZGF0YTogTXhRdWlja0NvbW1hbmQpOiBQcm9taXNlPE14UXVpY2tDb21tYW5kPiB8IE14UXVpY2tDb21tYW5kO1xyXG4gIHRyYW5zZm9ybU14U2VydmVyQ29uZmlnKGRhdGE6IE14U2VydmVyQ29uZmlnKTogUHJvbWlzZTxNeFNlcnZlckNvbmZpZz4gfCBNeFNlcnZlckNvbmZpZztcclxuICB0cmFuc2Zvcm1NeFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZyhkYXRhOiBNeFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZyk6IFByb21pc2U8TXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWc+IHwgTXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWc7XHJcbiAgdHJhbnNmb3JtTXhVaUNvbmZpZyhkYXRhOiBNeFVpQ29uZmlnKTogUHJvbWlzZTxNeFVpQ29uZmlnPiB8IE14VWlDb25maWc7XHJcbiAgdHJhbnNmb3JtVnVldGlmeVRoZW1lQ29uZmlnKGRhdGE6IFZ1ZXRpZnlUaGVtZUNvbmZpZyk6IFByb21pc2U8VnVldGlmeVRoZW1lQ29uZmlnPiB8IFZ1ZXRpZnlUaGVtZUNvbmZpZztcclxuICAvLyB0cmFuc2Zvcm1NeFBsdWdpbnNDb25maWcoZGF0YTogTXhQbHVnaW5Db25maWdbXSk6IFByb21pc2U8TXhQbHVnaW5Db25maWdbXT4gfCBNeFBsdWdpbkNvbmZpZ1tdO1xyXG59XHJcbi8vIOaJqeWxleaPkuS7tumAiemhueaOpeWPoyA9PT1cclxuZXhwb3J0IGludGVyZmFjZSBNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPFRyYW5zZm9ybUZ1bmN0aW9ucz4ge1xyXG4gIC8qKlxyXG4gICAqIOaehOW7uuWQju+8jG14Y2FkQXBwQXNzZXRzIOi1hOa6kOWtmOaUvueahOWtkOebruW9leWQjeOAglxyXG4gICAqIEBkZWZhdWx0ICdteGNhZEFwcEFzc2V0cydcclxuICAgKi9cclxuICBvdXRwdXREaXI/OiBzdHJpbmc7XHJcbiAgLyoqIOesrOS4ieaWueS+nei1liovXHJcbiAgbGlicmFyeU5hbWVzPzogKGtleW9mIHR5cGVvZiBleHRlcm5hbHMpW107XHJcbiAgLyoqIOaYr+WQpuWNlee6v+eoi+WKoOi9vXdhc20gKOm7mOiupOS9v+eUqOWkmue6v+eoi+WPiuWKoOi9vSkgKi9cclxuICBpc1dhc21TdD86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgKiDmmK/lkKblkK/nlKjpooTljovnvKnotYTmupDvvIjlpoIgLmd6IOaWh+S7tu+8ieeahOaLt+i0nSDpu5jorqTmmK90cnVlXHJcbiAgKiDorr7nva7kuLogZmFsc2Ug5pe277yMLmd6IOWOi+e8qeaWh+S7tuWwhuS4jeS8muiiq+WkjeWItuWIsOi+k+WHuuebruW9lVxyXG4gICogQGRlZmF1bHQgdHJ1ZVxyXG4gICovXHJcbiAgZW5hYmxlQ29tcHJlc3NlZEFzc2V0cz86IGJvb2xlYW47XHJcbn1cclxuXHJcblxyXG4vLyA9PT0g5aKe5by677yacmVzb2x2ZU9wdGlvbnMg6buY6K6k5YC8ID09PVxyXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU9wdGlvbnMob3B0aW9uczogTXhDYWRBc3NldHNQbHVnaW5PcHRpb25zID0ge30pOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+IHtcclxuICBjb25zdCByZXNvbHZlZDogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPiA9IHtcclxuICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXREaXIgfHwgJ214Y2FkQXBwQXNzZXRzJyxcclxuICAgIGxpYnJhcnlOYW1lczogb3B0aW9ucy5saWJyYXJ5TmFtZXMgfHwgW10sXHJcbiAgICBpc1dhc21TdDogb3B0aW9ucy5pc1dhc21TdCB8fCBmYWxzZSxcclxuICAgIGVuYWJsZUNvbXByZXNzZWRBc3NldHM6IG9wdGlvbnMuZW5hYmxlQ29tcHJlc3NlZEFzc2V0cyB8fCB0cnVlLFxyXG4gICAgLy8gdHJhbnNmb3JtTXhjYWRVaUNvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1NeGNhZFVpQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICB0cmFuc2Zvcm1NeFF1aWNrQ29tbWFuZDogb3B0aW9ucy50cmFuc2Zvcm1NeFF1aWNrQ29tbWFuZCB8fCAoKGQpID0+IGQpLFxyXG4gICAgdHJhbnNmb3JtTXhTZXJ2ZXJDb25maWc6IG9wdGlvbnMudHJhbnNmb3JtTXhTZXJ2ZXJDb25maWcgfHwgKChkKSA9PiBkKSxcclxuICAgIHRyYW5zZm9ybU14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnOiBvcHRpb25zLnRyYW5zZm9ybU14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICB0cmFuc2Zvcm1NeFVpQ29uZmlnOiBvcHRpb25zLnRyYW5zZm9ybU14VWlDb25maWcgfHwgKChkKSA9PiBkKSxcclxuICAgIHRyYW5zZm9ybVZ1ZXRpZnlUaGVtZUNvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1WdWV0aWZ5VGhlbWVDb25maWcgfHwgKChkKSA9PiBkKSxcclxuICAgIC8vIHRyYW5zZm9ybU14UGx1Z2luc0NvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1NeFBsdWdpbnNDb25maWcgfHwgKChkKSA9PiBkKSxcclxuICB9O1xyXG4gIHJldHVybiByZXNvbHZlZDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUGF0aFJlc3VsdCB7XHJcbiAgc3VjY2VzczogYm9vbGVhbjtcclxuICBmaWxlUGF0aD86IHN0cmluZzsgICAgICAgICAvLyDlt7IgcmVzb2x2ZSDnmoTlronlhajmlofku7bot6/lvoRcclxuICB1cmxQYXRoPzogc3RyaW5nOyAgICAgICAgICAvLyDop6PnoIHlkI7nmoQgVVJMIOi3r+W+hO+8iOS4jeWQqyBxdWVyee+8iVxyXG4gIGZpbGVOYW1lPzogc3RyaW5nOyAgICAgICAgIC8vIOaWh+S7tuWQje+8iGJhc2VuYW1l77yJXHJcbiAgc3RhdHVzQ29kZT86IG51bWJlcjtcclxuICBtZXNzYWdlPzogc3RyaW5nO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIOWuieWFqOino+aekOW5tumqjOivgeivt+axgui3r+W+hFxyXG4gKiBAcGFyYW0gcmVxVXJsIOivt+axgueahCBVUkzvvIjlpoIgJy9hc3NldHMvbXhTZXJ2ZXJDb25maWcuanNvbj92PTEn77yJXHJcbiAqIEBwYXJhbSByb290IOacrOWcsOagueebruW9le+8iOWmgiAnRDovcHJvamVjdC9kaXN0L214Y2FkJ++8iVxyXG4gKiBAcGFyYW0gYmFzZVBhdGgg5Y+v6YCJ55qE5Z+656GA6Lev5b6E5YmN57yA77yI5aaCICcvbXhjYWQvJ++8jOeUqOS6jiBWaXRl77yJXHJcbiAqIEByZXR1cm5zIOino+aekOe7k+aenOaIlumUmeivr1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTYWZlUGF0aChcclxuICByZXFVcmw6IHN0cmluZyxcclxuICByb290OiBzdHJpbmcsXHJcbiAgYmFzZVBhdGg/OiBzdHJpbmdcclxuKTogUGFyc2VkUGF0aFJlc3VsdCB7XHJcbiAgLy8gMS4g5Z+65pys5qCh6aqMXHJcbiAgaWYgKCFyZXFVcmwgfHwgdHlwZW9mIHJlcVVybCAhPT0gJ3N0cmluZycpIHtcclxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBzdGF0dXNDb2RlOiA0MDAsIG1lc3NhZ2U6ICdCYWQgUmVxdWVzdCcgfTtcclxuICB9XHJcblxyXG4gIC8vIDIuIOaPkOWPlui3r+W+hO+8iOWOuyBxdWVyeSDlkowgaGFzaO+8iVxyXG4gIGxldCB1cmxQYXRoID0gcmVxVXJsLnNwbGl0KCc/JylbMF0uc3BsaXQoJyMnKVswXTtcclxuXHJcbiAgLy8gMy4g6Kej56CBIFVSTFxyXG4gIGxldCBkZWNvZGVkUGF0aDogc3RyaW5nO1xyXG4gIHRyeSB7XHJcbiAgICBkZWNvZGVkUGF0aCA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmxQYXRoKTtcclxuICAgIC8vIOmYsuatoiBudWxsIOWtl+iKguaUu+WHu1xyXG4gICAgaWYgKGRlY29kZWRQYXRoLmluY2x1ZGVzKCdcXDAnKSkge1xyXG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNDAwLCBtZXNzYWdlOiAnSW52YWxpZCBVUkwnIH07XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNDAwLCBtZXNzYWdlOiAnSW52YWxpZCBVUkwgZW5jb2RpbmcnIH07XHJcbiAgfVxyXG5cclxuICAvLyA0LiDlpITnkIYgYmFzZVBhdGjvvIjlpoIgVml0ZSDnmoQgYmFzZe+8iVxyXG4gIGlmIChiYXNlUGF0aCAmJiBkZWNvZGVkUGF0aC5zdGFydHNXaXRoKGJhc2VQYXRoKSkge1xyXG4gICAgZGVjb2RlZFBhdGggPSBkZWNvZGVkUGF0aC5zbGljZShiYXNlUGF0aC5sZW5ndGgpO1xyXG4gIH1cclxuXHJcbiAgLy8gNS4g5riF55CG6Lev5b6E77ya5Y676Zmk5byA5aS05aSa5L2Z55qEIC9cclxuICAvLyDkvovlpoLvvJovL2Fzc2V0cy9maWxlLmpzb24gLT4gYXNzZXRzL2ZpbGUuanNvblxyXG4gIGNvbnN0IGNsZWFuZWRQYXRoID0gZGVjb2RlZFBhdGgucmVwbGFjZSgvXlxcLysvLCAnJyk7XHJcblxyXG4gIC8vIDYuIOaLvOaOpeaWh+S7tui3r+W+hFxyXG4gIGNvbnN0IGZpbGVQYXRoID0gam9pbihyb290LCBjbGVhbmVkUGF0aCB8fCAnLicpO1xyXG5cclxuICAvLyA3LiDlronlhajmo4Dmn6XvvJrpmLLmraLot6/lvoTnqb/otopcclxuICBsZXQgbm9ybWFsaXplZEZpbGU6IHN0cmluZztcclxuICBsZXQgbm9ybWFsaXplZFJvb3Q6IHN0cmluZztcclxuICB0cnkge1xyXG4gICAgbm9ybWFsaXplZEZpbGUgPSByZXNvbHZlKGZpbGVQYXRoKTtcclxuICAgIG5vcm1hbGl6ZWRSb290ID0gcmVzb2x2ZShyb290KTtcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBzdGF0dXNDb2RlOiA1MDAsIG1lc3NhZ2U6ICdQYXRoIHJlc29sdXRpb24gZmFpbGVkJyB9O1xyXG4gIH1cclxuXHJcbiAgLy8g4pyFIOWFs+mUru+8muehruS/nSBub3JtYWxpemVkRmlsZSDlnKggbm9ybWFsaXplZFJvb3Qg55uu5b2V5LiLXHJcbiAgY29uc3Qgbm9ybWFsaXplZEZpbGVTdHIgPSBub3JtYWxpemVkRmlsZS5yZXBsYWNlKC9cXFxcL2csICcvJykgKyAnLyc7XHJcbiAgY29uc3Qgbm9ybWFsaXplZFJvb3RTdHIgPSBub3JtYWxpemVkUm9vdC5yZXBsYWNlKC9cXFxcL2csICcvJykgKyAnLyc7XHJcblxyXG4gIGlmICghbm9ybWFsaXplZEZpbGVTdHIuc3RhcnRzV2l0aChub3JtYWxpemVkUm9vdFN0cikpIHtcclxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBzdGF0dXNDb2RlOiA0MDMsIG1lc3NhZ2U6ICdGb3JiaWRkZW46IFBhdGggdHJhdmVyc2FsIGRldGVjdGVkJyB9O1xyXG4gIH1cclxuXHJcbiAgLy8gOC4g5o+Q5Y+WIGZpbGVOYW1lXHJcbiAgY29uc3QgcGF0aFNlZ21lbnRzID0gY2xlYW5lZFBhdGguc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XHJcbiAgY29uc3QgZmlsZU5hbWUgPSBwYXRoU2VnbWVudHMubGVuZ3RoID4gMCA/IGJhc2VuYW1lKHBhdGhTZWdtZW50c1twYXRoU2VnbWVudHMubGVuZ3RoIC0gMV0pIDogJyc7XHJcblxyXG4gIC8vIOKchSDmiJDlip9cclxuICByZXR1cm4ge1xyXG4gICAgc3VjY2VzczogdHJ1ZSxcclxuICAgIGZpbGVQYXRoOiBub3JtYWxpemVkRmlsZSxcclxuICAgIHVybFBhdGg6IGRlY29kZWRQYXRoLFxyXG4gICAgZmlsZU5hbWUsXHJcbiAgfTtcclxufVxyXG5cclxuXHJcbnR5cGUgQ29uZmlnRmlsZW5hbWUgPSAodHlwZW9mIENPTkZJR19GSUxFTkFNRVMpW251bWJlcl07XHJcbmZ1bmN0aW9uIGhhbmRsZUNvbmZpZ0ZpbGUoXHJcbiAgc3JjUGF0aDogc3RyaW5nLFxyXG4gIGRlc3RQYXRoOiBzdHJpbmcsXHJcbiAgZmlsZW5hbWU6IENvbmZpZ0ZpbGVuYW1lLFxyXG4gIG9wdGlvbnM6IFJlcXVpcmVkPE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucz4sXHJcbiAgY2FsbGJhY2s6IE5vUGFyYW1DYWxsYmFja1xyXG4pIHtcclxuICBmcy5yZWFkRmlsZShzcmNQYXRoLCAndXRmLTgnLCBhc3luYyAoZXJyLCBjb250ZW50KSA9PiB7XHJcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgZGF0YSA9IGNvbnRlbnQudHJpbSgpID8gSlNPTi5wYXJzZShjb250ZW50KSA6IHt9O1xyXG5cclxuICAgICAgLy8g4pyFIOato+ehrueUn+aIkCB0cmFuc2Zvcm0g5Ye95pWw5ZCNXHJcbiAgICAgIGNvbnN0IGJhc2VOYW1lID0gZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvaSwgJycpO1xyXG4gICAgICBjb25zdCB0cmFuc2Zvcm1LZXkgPSBgdHJhbnNmb3JtJHtwYXNjYWxDYXNlKGJhc2VOYW1lKX1gOyAvLyDkvovlpoI6IHRyYW5zZm9ybVBsdWdpbnNDb25maWcg5oiWIHRyYW5zZm9ybU14UGx1Z2luc0NvbmZpZ1xyXG5cclxuICAgICAgY29uc3QgdHJhbnNmb3JtRm4gPSAob3B0aW9ucyBhcyBhbnkpW3RyYW5zZm9ybUtleV07XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHRyYW5zZm9ybUZuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgZGF0YSA9IGF3YWl0IHRyYW5zZm9ybUZuKGRhdGEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMik7XHJcbiAgICAgIGZzLndyaXRlRmlsZShkZXN0UGF0aCwganNvbiwgJ3V0Zi04JywgY2FsbGJhY2spO1xyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuLyoqXHJcbiAqIOWkhOeQhumFjee9ruaWh+S7tuivt+axgu+8muivu+WPliDihpIg6L2s5o2iIOKGkiDov5Tlm57lk43lupRcclxuICog55So5LqOIFZpdGUvV2VicGFjayBkZXYgc2VydmVyIOS4remXtOS7tlxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUNvbmZpZ1JlcXVlc3QoXHJcbiAgZmlsZVBhdGg6IHN0cmluZywgICAgICAgICAgIC8vIOW3sue7j+mqjOivgei/h+eahOWuieWFqOi3r+W+hFxyXG4gIGZpbGVOYW1lOiBzdHJpbmcsICAgICAgICAgICAvLyDmlofku7blkI3vvIzlpoIgJ214U2VydmVyQ29uZmlnLmpzb24nXHJcbiAgb3B0aW9uczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPixcclxuICByZXM6IGFueSxcclxuICBsb2dnZXI/OiB7IGluZm8/OiAobXNnOiBzdHJpbmcpID0+IHZvaWQ7IGVycm9yPzogKG1zZzogc3RyaW5nKSA9PiB2b2lkIH1cclxuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgLy8g5LuF5aSE55CG55m95ZCN5Y2V5YaF55qE5paH5Lu2XHJcbiAgaWYgKCEoQ09ORklHX0ZJTEVOQU1FUyBhcyB1bmtub3duIGFzIHN0cmluZykuaW5jbHVkZXMoZmlsZU5hbWUpKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0cnkge1xyXG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKGZpbGVQYXRoLCAndXRmLTgnKTtcclxuICAgIGxldCBkYXRhID0gY29udGVudC50cmltKCkgPyBKU09OLnBhcnNlKGNvbnRlbnQpIDoge307XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtS2V5ID0gYHRyYW5zZm9ybSR7cGFzY2FsQ2FzZShmaWxlTmFtZS5yZXBsYWNlKC9cXC5qc29uJC9pLCAnJykpfWA7XHJcbiAgICBjb25zdCB0cmFuc2Zvcm1GbiA9IChvcHRpb25zIGFzIGFueSlbdHJhbnNmb3JtS2V5XTtcclxuXHJcbiAgICBpZiAodHlwZW9mIHRyYW5zZm9ybUZuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGRhdGEgPSBhd2FpdCB0cmFuc2Zvcm1GbihkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xyXG4gICAgcmVzLnNldEhlYWRlcignQ2FjaGUtQ29udHJvbCcsICduby1jYWNoZScpO1xyXG4gICAgcmVzLmVuZChKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgbG9nZ2VyPy5lcnJvcj8uKGBbbXhjYWQtYXNzZXRzXSDinYwgRmFpbGVkIHRvIHNlcnZlICR7ZmlsZU5hbWV9OiAke2Vyci5tZXNzYWdlfWApO1xyXG4gICAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHtcclxuICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcclxuICAgICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XHJcbiAgICAgIHJlcy5lbmQoJ0ludGVybmFsIFNlcnZlciBFcnJvcicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7IC8vIOW3suWkhOeQhumUmeivr1xyXG4gIH1cclxufVxyXG5cclxuLyoqIOWIm+W7uumAmueUqOWFqOWxgOS4remXtOS7tiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2xvYmFsVW5pdmVyc2FsTWlkZGxld2FyZShvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+KSB7XHJcbiAgcmV0dXJuIGFzeW5jIChyZXE6IGFueSwgcmVzOiBhbnksIG5leHQ6IGFueSkgPT4ge1xyXG4gICAgaWYgKCFvcHRpb25zLmlzV2FzbVN0KSB7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0Nyb3NzLU9yaWdpbi1PcGVuZXItUG9saWN5JywgJ3NhbWUtb3JpZ2luJyk7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0Nyb3NzLU9yaWdpbi1FbWJlZGRlci1Qb2xpY3knLCAncmVxdWlyZS1jb3JwJyk7XHJcbiAgICB9XHJcbiAgICBuZXh0KCk7XHJcbiAgfVxyXG59XHJcbi8vID09PSDovoXliqnlh73mlbDvvJrlrZfnrKbkuLLovawgUGFzY2FsQ2FzZSA9PT1cclxuZXhwb3J0IGZ1bmN0aW9uIHBhc2NhbENhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBzdHJcclxuICAgIC5yZXBsYWNlKC9bXmEtekEtWjAtOV0rKC4pL2csIChtLCBjaHIpID0+IGNoci50b1VwcGVyQ2FzZSgpKVxyXG4gICAgLnJlcGxhY2UoL14uLywgYyA9PiBjLnRvVXBwZXJDYXNlKCkpO1xyXG59XHJcblxyXG4vLyA9PT0g5YW25LuW5Y6f5pyJ5a+85Ye65L+d5oyB5LiN5Y+YID09PVxyXG5leHBvcnQgY29uc3QgZXh0ZXJuYWxzID0ge1xyXG4gICd2dWUnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMuVnVlJyxcclxuICAnYXhpb3MnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMuYXhpb3MnLFxyXG4gICd2dWV0aWZ5JzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLnZ1ZXRpZnknLFxyXG4gICd2dWV0aWZ5L2NvbXBvbmVudHMnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMudnVldGlmeUNvbXBvbmVudHMnLFxyXG4gICdtYXBib3gtZ2wnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMubWFwYm94Z2wnLFxyXG4gICdwaW5pYSc6ICdNWENBREFQUF9FWFRFUk5BTExJQlJBUklFUy5waW5pYSdcclxufTtcclxuLy8g5aeL57uI5L+d55WZ55qE5qih5Z2XXHJcbmNvbnN0IEFMV0FZU19LRUVQID0gbmV3IFNldChbJ214Y2FkJywgJ214ZHJhdyddKTtcclxuXHJcbi8qKlxyXG4gKiDmuIXnkIblubblhpnlhaXmraPnoa7nmoTnsbvlnovlvJXnlKhcclxuICovXHJcbmZ1bmN0aW9uIHN5bmNUeXBlUmVmZXJlbmNlcyhsaWJyYXJ5TmFtZXM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgY29uc3Qgcm9vdERpciA9IHByb2Nlc3MuY3dkKCk7XHJcbiAgY29uc3QgZGlzdERpciA9IHJlc29sdmUocm9vdERpciwgJ25vZGVfbW9kdWxlcycsICdteGNhZC1hcHAnLCAnZGlzdCcpO1xyXG4gIGNvbnN0IGluZGV4UGF0aCA9IHJlc29sdmUoZGlzdERpciwgJ2luZGV4LmQudHMnKTtcclxuXHJcbiAgdHJ5IHtcclxuICAgIC8vIOKchSAxLiDmo4Dmn6UgZGlzdCDnm67lvZVcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhkaXN0RGlyKSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oYOKaoO+4jyBteGNhZC1hcHAvZGlzdCDnm67lvZXkuI3lrZjlnKjvvIzot7Pov4fnsbvlnovlkIzmraU6ICR7ZGlzdERpcn1gKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKchSAyLiDnoa7kv50gaW5kZXguZC50cyDlrZjlnKhcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhpbmRleFBhdGgpKSB7XHJcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoaW5kZXhQYXRoLCAnJywgJ3V0Zi04Jyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKGDinIUg5bey5Yib5bu656m657G75Z6L5paH5Lu2OiAke2luZGV4UGF0aH1gKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhpbmRleFBhdGgsICd1dGYtOCcpO1xyXG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KC9cXHI/XFxuLyk7XHJcblxyXG4gICAgLy8g4pyFIDMuIOaPkOWPluaJgOacieeOsOacieeahCAvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi94eHguZC50c1wiIC8+IOihjFxyXG4gICAgY29uc3QgcmVmZXJlbmNlUmVnZXggPSAvXFwvXFwvXFwvXFxzKjxyZWZlcmVuY2VcXHMrcGF0aD1cIlxcLlxcLyhbXlwiXStcXC5kXFwudHMpXCJcXHMqXFwvPi87XHJcbiAgICBjb25zdCBleGlzdGluZ1JlZnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBjb25zdCBub25SZWZMaW5lczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBsaW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICBjb25zdCBtYXRjaCA9IGxpbmUudHJpbSgpLm1hdGNoKHJlZmVyZW5jZVJlZ2V4KTtcclxuICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBtYXRjaFsxXTsgLy8g5aaCIFwidnVlLmQudHNcIlxyXG4gICAgICAgIGNvbnN0IG1vZHVsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9cXC5kXFwudHMkLywgJycpOyAvLyDmj5Dlj5bmqKHlnZflkI1cclxuICAgICAgICBleGlzdGluZ1JlZnMucHVzaChtb2R1bGVOYW1lKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBub25SZWZMaW5lcy5wdXNoKGxpbmUpOyAvLyDkv53nlZnpnZ4gcmVmZXJlbmNlIOihjFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDinIUgNC4g6K6h566X5pyA57uI5bqU6K+l5L+d55WZ55qE5qih5Z2XXHJcbiAgICBjb25zdCB2YWxpZE1vZHVsZXMgPSBuZXcgU2V0PHN0cmluZz4oQUxXQVlTX0tFRVApO1xyXG5cclxuICAgIGxpYnJhcnlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICAvLyDlv4XpobvlnKggZXh0ZXJuYWxzIOS4reWumuS5ie+8jOS4lOexu+Wei+aWh+S7tuWtmOWcqFxyXG4gICAgICBpZiAobmFtZSBpbiBleHRlcm5hbHMpIHtcclxuICAgICAgICBjb25zdCBkdHNQYXRoID0gcmVzb2x2ZShkaXN0RGlyLCBgJHtuYW1lfS5kLnRzYCk7XHJcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZHRzUGF0aCkpIHtcclxuICAgICAgICAgIHZhbGlkTW9kdWxlcy5hZGQobmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDinIUgNS4g55Sf5oiQ5pyA57uI55qEIHJlZmVyZW5jZSDooYzvvIjkv53mjIEgbXhjYWQg5ZKMIG14ZHJhdyDlnKjmnIDliY3vvIlcclxuICAgIGNvbnN0IGZpbmFsUmVmcyA9IFsnbXhjYWQnLCAnbXhkcmF3J11cclxuICAgICAgLmZpbHRlcihuYW1lID0+IHZhbGlkTW9kdWxlcy5oYXMobmFtZSkpXHJcbiAgICAgIC5tYXAobmFtZSA9PiBgLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vJHtuYW1lfS5kLnRzXCIgLz5gKTtcclxuXHJcbiAgICAvLyDmt7vliqDlhbbku5YgdmFsaWRNb2R1bGVzIOS4reeahO+8iOWOu+mHje+8iVxyXG4gICAgQXJyYXkuZnJvbSh2YWxpZE1vZHVsZXMpXHJcbiAgICAgIC5maWx0ZXIobmFtZSA9PiAhQUxXQVlTX0tFRVAuaGFzKG5hbWUpKVxyXG4gICAgICAuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgICBmaW5hbFJlZnMucHVzaChgLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vJHtuYW1lfS5kLnRzXCIgLz5gKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8g4pyFIDYuIOWQiOW5tu+8muacgOe7iOW8leeUqCArIOWOn+Wni+mdnuW8leeUqOihjFxyXG4gICAgY29uc3QgcmVzdWx0TGluZXMgPSBbLi4uZmluYWxSZWZzLCAnJywgLi4ubm9uUmVmTGluZXMuZmlsdGVyKGwgPT4gbC50cmltKCkubGVuZ3RoID4gMCldO1xyXG5cclxuICAgIC8vIOenu+mZpOi/nue7reepuuihjO+8jOS/neeVmeS4gOS4quWIhumalFxyXG4gICAgY29uc3QgY2xlYW5lZExpbmVzID0gcmVzdWx0TGluZXMuZmlsdGVyKChsaW5lLCBpLCBhcnIpID0+XHJcbiAgICAgICEobGluZS50cmltKCkgPT09ICcnICYmIGkgPiAwICYmIGFycltpIC0gMV0udHJpbSgpID09PSAnJylcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbmV3Q29udGVudCA9IGNsZWFuZWRMaW5lcy5qb2luKCdcXG4nKS50cmltKCkgKyAnXFxuJztcclxuXHJcbiAgICAvLyDinIUgNy4g5YaZ5Zue5paH5Lu277yI5LuF5b2T5YaF5a655Y+Y5YyW5pe277yJXHJcbiAgICBpZiAoY29udGVudC50cmltKCkgIT09IG5ld0NvbnRlbnQudHJpbSgpKSB7XHJcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoaW5kZXhQYXRoLCBuZXdDb250ZW50LCAndXRmLTgnKTtcclxuICAgICAgY29uc29sZS5sb2coYOKchSDlt7LlkIzmraUgbXhjYWQtYXBwL2Rpc3QvaW5kZXguZC50cyDnsbvlnovlvJXnlKhgKTtcclxuICAgIH1cclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoYOKdjCDlkIzmraXnsbvlnovlvJXnlKjlpLHotKU6YCwgZXJyKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDpooTlrprkuYnlupPlkI3liLDlhajlsYDlj5jph4/nmoTmmKDlsIRcclxuICovXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0xJQlJBUllfTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gIG14Y2FkOiAnTXhDQUQnLFxyXG4gIG14ZHJhdzogJ014J1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlcm5hbHMoXHJcbiAgbGlicmFyeU5hbWVzOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+WydsaWJyYXJ5TmFtZXMnXVxyXG4pOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcclxuICBzeW5jVHlwZVJlZmVyZW5jZXMobGlicmFyeU5hbWVzKTtcclxuICBjb25zdCByZXN1bHQ6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7IC4uLkRFRkFVTFRfTElCUkFSWV9NQVAgfVxyXG4gIGlmICghQXJyYXkuaXNBcnJheShsaWJyYXJ5TmFtZXMpKSByZXR1cm4gcmVzdWx0O1xyXG4gIGxpYnJhcnlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgaWYgKG5hbWUgaW4gZXh0ZXJuYWxzKSB7XHJcbiAgICAgIHJlc3VsdFtuYW1lXSA9IGV4dGVybmFsc1tuYW1lIGFzIGtleW9mIHR5cGVvZiBleHRlcm5hbHNdO1xyXG4gICAgfVxyXG4gIH0pO1xyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3VyY2VBc3NldHNQYXRoKCk6IHN0cmluZyB7XHJcbiAgbGV0IGN1cnJlbnRGaWxlOiBzdHJpbmc7XHJcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgY3VycmVudEZpbGUgPSBfX2ZpbGVuYW1lO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICBjdXJyZW50RmlsZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcclxuICB9XHJcbiAgY29uc3QgcGFja2FnZVJvb3QgPSByZXNvbHZlKGN1cnJlbnRGaWxlLCAnLi4nLCAnLi4nLCAnLi4nKTtcclxuICBjb25zdCBhc3NldHNQYXRoID0gcmVzb2x2ZShwYWNrYWdlUm9vdCwgbmFtZSwgJ2Rpc3QnLCAnbXhjYWRBcHBBc3NldHMnKTtcclxuICBpZiAoIWZzLmV4aXN0c1N5bmMoYXNzZXRzUGF0aCkpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihgbXgtY2FkLWFwcCBhc3NldHMgbm90IGZvdW5kIGF0OiAke2Fzc2V0c1BhdGh9YCk7XHJcbiAgfVxyXG4gIHJldHVybiBhc3NldHNQYXRoO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tTb3VyY2VBc3NldHNFeGlzdCgpOiBib29sZWFuIHtcclxuICBjb25zdCBwYXRoID0gZ2V0U291cmNlQXNzZXRzUGF0aCgpO1xyXG4gIHJldHVybiBmcy5leGlzdHNTeW5jKHBhdGgpICYmIGZzLmxzdGF0U3luYyhwYXRoKS5pc0RpcmVjdG9yeSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSdW50aW1lQ29uZmlnU2NyaXB0KHB1YmxpY1BhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGBcclxuICAgIDxzY3JpcHQ+XHJcbiAgICAgIHdpbmRvdy5fX01YX0NBRF9BUFBfQVNTRVRfUEFUSF9fID0gJyR7cHVibGljUGF0aH0nO1xyXG4gICAgPC9zY3JpcHQ+XHJcbiAgYC50cmltKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3B5RGlyKFxyXG4gIHNyYzogc3RyaW5nLFxyXG4gIGRlc3Q6IHN0cmluZyxcclxuICBwdWJsaWNEaXI6IHN0cmluZyxcclxuICBvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+LFxyXG4gIGNhbGxiYWNrOiAoZXJyPzogRXJyb3IpID0+IHZvaWRcclxuKTogdm9pZCB7XHJcbiAgLy8g4pyFIOaWsOWinu+8muajgOafpSBwdWJsaWNEaXIg5piv5ZCm5a2Y5ZyoXHJcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHB1YmxpY0RpcikpIHtcclxuICAgIC8vIOS4jeWtmOWcqOWImei3s+i/h+aJq+aPj++8jOebtOaOpeWkjeWItlxyXG4gICAgZG9Db3B5KHNyYywgZGVzdCwgcHVibGljRGlyLCBuZXcgU2V0KCksIG9wdGlvbnMsIGNhbGxiYWNrKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgLy8g56ys5LiA5q2l77ya5omr5o+PIHB1YmxpY0RpciDkuIvmiYDmnInmlofku7bvvIjnm7jlr7nkuo4gcHVibGljRGlyIOeahOi3r+W+hO+8iVxyXG4gIHNjYW5QdWJsaWNEaXIocHVibGljRGlyLCAoZXJyLCBwdWJsaWNGaWxlcykgPT4ge1xyXG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcblxyXG4gICAgLy8g56ys5LqM5q2l77ya5byA5aeL5aSN5Yi277yM5Lyg5YWlIHB1YmxpY0ZpbGVzIOe8k+WtmFxyXG4gICAgZG9Db3B5KHNyYywgZGVzdCwgcHVibGljRGlyLCBwdWJsaWNGaWxlcyEsIG9wdGlvbnMsIGNhbGxiYWNrKTtcclxuICB9KTtcclxufVxyXG5cclxuLy8g5a6e6ZmF5omn6KGM5aSN5Yi255qE5Ye95pWwXHJcbmZ1bmN0aW9uIGRvQ29weShcclxuICBzcmM6IHN0cmluZyxcclxuICBkZXN0OiBzdHJpbmcsXHJcbiAgcHVibGljRGlyOiBzdHJpbmcsXHJcbiAgcHVibGljRmlsZXM6IFNldDxzdHJpbmc+LFxyXG4gIG9wdGlvbnM6IFJlcXVpcmVkPE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucz4sIC8vIOazqOaEj++8mui/memHjOmcgOimgeehruS/nSBlbmFibGVDb21wcmVzc2VkQXNzZXRzIOaYr+W/hemAieeahFxyXG4gIGNhbGxiYWNrOiAoZXJyPzogRXJyb3IpID0+IHZvaWRcclxuKSB7XHJcbiAgZnMubWtkaXIoZGVzdCwgeyByZWN1cnNpdmU6IHRydWUgfSwgKGVycikgPT4ge1xyXG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcblxyXG4gICAgZnMucmVhZGRpcihzcmMsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9LCAoZXJyLCBkaXJlbnRzKSA9PiB7XHJcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG5cclxuICAgICAgbGV0IHBlbmRpbmcgPSBkaXJlbnRzLmxlbmd0aDtcclxuICAgICAgaWYgKHBlbmRpbmcgPT09IDApIHJldHVybiBjYWxsYmFjaygpO1xyXG5cclxuICAgICAgLy8g5o+Q5YmN5a6a5LmJ5Y6L57yp5paH5Lu25omp5bGV5ZCNXHJcbiAgICAgIGNvbnN0IGNvbXByZXNzZWRFeHRzID0gWycuZ3onXTsgLy8g5Y+v5oyJ6ZyA5omp5bGVXHJcblxyXG4gICAgICBkaXJlbnRzLmZvckVhY2goKGRpcmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNyY1BhdGggPSByZXNvbHZlKHNyYywgZGlyZW50Lm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGRlc3RQYXRoID0gcmVzb2x2ZShkZXN0LCBkaXJlbnQubmFtZSk7XHJcbiAgICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUoc3JjLCBzcmNQYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJykgYXMgQ29uZmlnRmlsZW5hbWU7XHJcblxyXG4gICAgICAgIC8vIOaWsOWinu+8muWmguaenOemgeeUqOWOi+e8qei1hOa6kOS4lOaYr+WOi+e8qeaWh+S7tu+8jOWImei3s+i/h1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICFvcHRpb25zLmVuYWJsZUNvbXByZXNzZWRBc3NldHMgJiZcclxuICAgICAgICAgIGNvbXByZXNzZWRFeHRzLnNvbWUoZXh0ID0+IHJlbGF0aXZlUGF0aC5lbmRzV2l0aChleHQpKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKC0tcGVuZGluZyA9PT0gMCkgY2FsbGJhY2soKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkaXJlbnQuaXNEaXJlY3RvcnkoKSkge1xyXG4gICAgICAgICAgZG9Db3B5KHNyY1BhdGgsIGRlc3RQYXRoLCBwdWJsaWNEaXIsIHB1YmxpY0ZpbGVzLCBvcHRpb25zLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRpcmVudC5pc0ZpbGUoKSkge1xyXG4gICAgICAgICAgaWYgKHB1YmxpY0ZpbGVzLmhhcyhyZWxhdGl2ZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0ZpbGVQYXRoID0gcmVzb2x2ZShwdWJsaWNEaXIsIHJlbGF0aXZlUGF0aCk7XHJcbiAgICAgICAgICAgIGZzLmNvcHlGaWxlKHB1YmxpY0ZpbGVQYXRoLCBkZXN0UGF0aCwgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG4gICAgICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChDT05GSUdfRklMRU5BTUVTLmluY2x1ZGVzKHJlbGF0aXZlUGF0aCkpIHtcclxuICAgICAgICAgICAgaGFuZGxlQ29uZmlnRmlsZShzcmNQYXRoLCBkZXN0UGF0aCwgcmVsYXRpdmVQYXRoLCBvcHRpb25zLCAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcbiAgICAgICAgICAgICAgaWYgKC0tcGVuZGluZyA9PT0gMCkgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmcy5jb3B5RmlsZShzcmNQYXRoLCBkZXN0UGF0aCwgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG4gICAgICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSBjYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9KTtcclxufVxyXG4vLyDmiavmj48gcHVibGljRGlyIOS4i+aJgOacieaWh+S7tu+8jOi/lOWbnuebuOWvueS6jiBwdWJsaWNEaXIg55qE6Lev5b6E6ZuG5ZCIXHJcbmZ1bmN0aW9uIHNjYW5QdWJsaWNEaXIoXHJcbiAgcHVibGljRGlyOiBzdHJpbmcsXHJcbiAgY2FsbGJhY2s6IChlcnI6IE5vZGVKUy5FcnJub0V4Y2VwdGlvbiB8IG51bGwsIGZpbGVzPzogU2V0PHN0cmluZz4pID0+IHZvaWRcclxuKSB7XHJcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcblxyXG4gIGZ1bmN0aW9uIHdhbGsoZGlyOiBzdHJpbmcpIHtcclxuICAgIGZzLnJlYWRkaXIoZGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSwgKGVyciwgZGlyZW50cykgPT4ge1xyXG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuXHJcbiAgICAgIGxldCBwZW5kaW5nID0gZGlyZW50cy5sZW5ndGg7XHJcbiAgICAgIGlmIChwZW5kaW5nID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRpcmVudHMuZm9yRWFjaCgoZGlyZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSByZXNvbHZlKGRpciwgZGlyZW50Lm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHJlbFBhdGggPSByZWxhdGl2ZShwdWJsaWNEaXIsIGZ1bGxQYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XHJcblxyXG4gICAgICAgIGlmIChkaXJlbnQuaXNEaXJlY3RvcnkoKSkge1xyXG4gICAgICAgICAgd2FsayhmdWxsUGF0aCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaXJlbnQuaXNGaWxlKCkpIHtcclxuICAgICAgICAgIHJlc3VsdC5hZGQocmVsUGF0aCk7XHJcbiAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIHtcclxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB3YWxrKHB1YmxpY0Rpcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250ZW50VHlwZShmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICBjb25zdCBleHQgPSBmaWxlUGF0aC5zcGxpdCgnLicpLnBvcCgpPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xyXG4gIGNvbnN0IHR5cGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgJ2Nzcyc6ICd0ZXh0L2NzcycsXHJcbiAgICAnanMnOiAnYXBwbGljYXRpb24vamF2YXNjcmlwdCcsXHJcbiAgICAnanNvbic6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICdwbmcnOiAnaW1hZ2UvcG5nJyxcclxuICAgICdqcGcnOiAnaW1hZ2UvanBlZycsXHJcbiAgICAnanBlZyc6ICdpbWFnZS9qcGVnJyxcclxuICAgICdnaWYnOiAnaW1hZ2UvZ2lmJyxcclxuICAgICdzdmcnOiAnaW1hZ2Uvc3ZnK3htbCcsXHJcbiAgICAnd29mZic6ICdmb250L3dvZmYnLFxyXG4gICAgJ3dvZmYyJzogJ2ZvbnQvd29mZjInLFxyXG4gICAgJ3R0Zic6ICdmb250L3R0ZicsXHJcbiAgICAnZW90JzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0JyxcclxuICAgICdpY28nOiAnaW1hZ2UveC1pY29uJyxcclxuICAgICd3YXNtJzogJ2FwcGxpY2F0aW9uL3dhc20nLFxyXG4gICAgJ3ppcCc6ICdhcHBsaWNhdGlvbi96aXAnLFxyXG4gICAgJ3Jhcic6ICdhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkJyxcclxuICAgICc3eic6ICdhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWQnLFxyXG4gICAgJ3Rhcic6ICdhcHBsaWNhdGlvbi94LXRhcicsXHJcbiAgICAnZ3onOiAnYXBwbGljYXRpb24vZ3ppcCcsXHJcbiAgICAnYnoyJzogJ2FwcGxpY2F0aW9uL3gtYnppcDInLFxyXG4gICAgJ3h6JzogJ2FwcGxpY2F0aW9uL3gteHonXHJcbiAgfTtcclxuICByZXR1cm4gdHlwZXNbZXh0XSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiDmoIflh4bljJbot6/lvoTvvIznoa7kv53ku6UgJy8nIOe7k+WwvlxyXG4gKi9cclxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiByZXNvbHZlKHApLnJlcGxhY2UoL1xcXFwvZywgJy8nKSArICcvJztcclxufVxyXG5cclxuLyoqXHJcbiAqIOWIm+W7uumAmueUqOS4remXtOS7tu+8muS8mOWFiOS9v+eUqCBwdWJsaWMg6LWE5rqQ77yM5Zue6YCA5YiwIHNvdXJjZUFzc2V0c1BhdGhcclxuICog5a+55qCHIGNyZWF0ZVN0YXRpY01pZGRsZXdhcmUg6aOO5qC8XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXhDYWRBc3NldHNNaWRkbGV3YXJlKFxyXG4gIHJvb3Q6IHN0cmluZyxcclxuICBvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+LFxyXG4gIHB1YmxpY0Rpcjogc3RyaW5nLFxyXG4gIGxvZ2dlcj86IGFueVxyXG4pIHtcclxuICBjb25zdCB7IG91dHB1dERpciwgaXNXYXNtU3QgPSBmYWxzZSB9ID0gb3B0aW9ucztcclxuICAvLyDinIUgMS4g6KeE6IyD5YyW6Lev5b6EXHJcbiAgY29uc3QgYmFzZVBhdGggPSBgLyR7b3V0cHV0RGlyLnJlcGxhY2UoL15cXC8rLywgJycpfWA7IC8vICcvbXhjYWRBcHBBc3NldHMnXHJcbiAgY29uc3Qgc291cmNlQXNzZXRzUm9vdCA9IG5vcm1hbGl6ZVBhdGgocm9vdCk7XHJcblxyXG4gIHJldHVybiBhc3luYyAocmVxOiBhbnksIHJlczogYW55LCBuZXh0OiAoKSA9PiB2b2lkKSA9PiB7XHJcbiAgICAvLyDinIUgMi4g5Z+65pys5qCh6aqMXHJcbiAgICBpZiAoIXJlcS51cmwgfHwgdHlwZW9mIHJlcS51cmwgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBuZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g4pyFIDMuIOiuvue9ruWuieWFqOWktO+8iOmdniBpc1dhc21TdCDmqKHlvI/vvIlcclxuICAgIGlmICghaXNXYXNtU3QpIHtcclxuICAgICAgcmVzLnNldEhlYWRlcignQ3Jvc3MtT3JpZ2luLU9wZW5lci1Qb2xpY3knLCAnc2FtZS1vcmlnaW4nKTtcclxuICAgICAgcmVzLnNldEhlYWRlcignQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeScsICdyZXF1aXJlLWNvcnAnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDinIUgNC4g6Kej5p6QIFVSTCDot6/lvoTvvIjljrsgcXVlcnnvvIzop6PnoIHvvIlcclxuICAgIGNvbnN0IHVybFBhdGggPSByZXEudXJsLnNwbGl0KCc/JylbMF07XHJcbiAgICBsZXQgZmlsZVBhdGghOiBzdHJpbmc7XHJcbiAgICBsZXQgZmlsZU5hbWUhOiBzdHJpbmc7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZGVjb2RlZFBhdGggPSBkZWNvZGVVUklDb21wb25lbnQodXJsUGF0aCk7XHJcbiAgICAgIC8vIOinhOiMg+WMlui3r+W+hO+8jOmYsuatoiAuLi8uLi8g6LaK5p2DXHJcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gZGVjb2RlZFBhdGgucmVwbGFjZSgvXlsvXFxcXF0rLywgJycpO1xyXG5cclxuICAgICAgLy8g4pyFIDUuIOS8mOWFiO+8muajgOafpSBwdWJsaWMvJHtvdXRwdXREaXJ9IOebruW9lVxyXG4gICAgICBjb25zdCBwdWJsaWNGaWxlUGF0aCA9IGpvaW4ocHVibGljRGlyLCBub3JtYWxpemVkUGF0aCkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMucHJvbWlzZXMuc3RhdChwdWJsaWNGaWxlUGF0aCk7XHJcbiAgICAgICAgaWYgKHN0YXQuaXNGaWxlKCkpIHtcclxuICAgICAgICAgIGZpbGVQYXRoID0gcHVibGljRmlsZVBhdGg7XHJcbiAgICAgICAgICBmaWxlTmFtZSA9IGJhc2VuYW1lKG5vcm1hbGl6ZWRQYXRoKTtcclxuICAgICAgICAgIHJldHVybiBzZXJ2ZUZpbGUoZmlsZVBhdGgsIGZpbGVOYW1lLCByZXMsIGxvZ2dlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAvLyBwdWJsaWMg5Lit5rKh5pyJ77yM57un57ut5p+l5om+IHNvdXJjZUFzc2V0c1BhdGhcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g4pyFIDYuIGZhbGxiYWNr77ya5p+l5om+IHNvdXJjZUFzc2V0c1BhdGhcclxuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZVNhZmVQYXRoKGRlY29kZWRQYXRoLCBzb3VyY2VBc3NldHNSb290LCBiYXNlUGF0aCk7XHJcbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICByZXMuc3RhdHVzQ29kZSA9IHJlc3VsdC5zdGF0dXNDb2RlIHx8IDQwMDtcclxuICAgICAgICByZXR1cm4gcmVzLmVuZChyZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChyZXN1bHQuZmlsZVBhdGgpIGZpbGVQYXRoID0gcmVzdWx0LmZpbGVQYXRoO1xyXG4gICAgICBpZiAocmVzdWx0LmZpbGVOYW1lKSBmaWxlTmFtZSA9IHJlc3VsdC5maWxlTmFtZTtcclxuXHJcbiAgICAgIC8vIOKchSA3LiDlsJ3or5XnlLEgaGFuZGxlQ29uZmlnUmVxdWVzdCDlpITnkIbvvIjlpoLms6jlhaXphY3nva7vvIlcclxuICAgICAgY29uc3QgaGFuZGxlZCA9IGF3YWl0IGhhbmRsZUNvbmZpZ1JlcXVlc3QoXHJcbiAgICAgICAgZmlsZVBhdGgsXHJcbiAgICAgICAgZmlsZU5hbWUsXHJcbiAgICAgICAgb3B0aW9ucyxcclxuICAgICAgICByZXMsXHJcbiAgICAgICAgbG9nZ2VyXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChoYW5kbGVkKSByZXR1cm47XHJcblxyXG4gICAgICAvLyDinIUgOC4g56Gu5L+d5piv5paH5Lu2XHJcbiAgICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBmcy5wcm9taXNlcy5zdGF0KGZpbGVQYXRoKTtcclxuICAgICAgaWYgKCFzdGF0LmlzRmlsZSgpKSB7XHJcbiAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDQ7XHJcbiAgICAgICAgcmV0dXJuIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBzZXJ2ZUZpbGUoZmlsZVBhdGgsIGZpbGVOYW1lLCByZXMsIGxvZ2dlcik7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgbG9nZ2VyPy53YXJuPy4oYFtNeENhZEFzc2V0c10gU2VydmUgZmFpbGVkIGZvciAke3JlcS51cmx9OiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XHJcbiAgICAgIGlmIChyZXMuaGVhZGVyc1NlbnQpIHJldHVybjtcclxuICAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDQ7XHJcbiAgICAgIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kJyk7XHJcbiAgICB9XHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOWwgeijheaWh+S7tuWTjeW6lOmAu+i+ke+8iOa1geW8j+S8oOi+k++8iVxyXG4gKi9cclxuZnVuY3Rpb24gc2VydmVGaWxlKGZpbGVQYXRoOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIHJlczogYW55LCBsb2dnZXI/OiBhbnkpIHtcclxuICBjb25zdCBzdHJlYW0gPSBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoKTtcclxuXHJcbiAgc3RyZWFtLm9uKCdlcnJvcicsIChlcnI6IE5vZGVKUy5FcnJub0V4Y2VwdGlvbikgPT4ge1xyXG4gICAgaWYgKHJlcy5oZWFkZXJzU2VudCkgcmV0dXJuO1xyXG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJyB8fCBlcnIuY29kZSA9PT0gJ0VBQ0NFUycpIHtcclxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXNDb2RlID09PSAyMDAgPyByZXMuZW5kKCkgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBsb2dnZXI/LmVycm9yPy4oYFtNeENhZEFzc2V0c10gUmVhZCBlcnJvcjogJHtlcnIubWVzc2FnZX1gLCBlcnIpO1xyXG4gICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XHJcbiAgICByZXMuZW5kKCdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InKTtcclxuICB9KTtcclxuXHJcbiAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgZ2V0Q29udGVudFR5cGUoZmlsZU5hbWUpKTtcclxuICByZXMuc2V0SGVhZGVyKCdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJywgJ25vc25pZmYnKTtcclxuXHJcbiAgc3RyZWFtLnBpcGUocmVzKTtcclxufSJdLCJuYW1lcyI6WyJqb2luIiwicmVzb2x2ZSIsImJhc2VuYW1lIiwiZXJyIiwibmFtZSIsImZpbGVVUkxUb1BhdGgiLCJyZWxhdGl2ZSIsInN0YXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
1525
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtRHViYlJtRGouanMiLCJzb3VyY2VzIjpbIi4uLy4uL3BhY2tUb29sUGx1Z2luU3JjL3NoYXJlZC9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJcclxuLy8gcGx1Z2lucy9zaGFyZWQvaW5kZXgudHNcclxuaW1wb3J0IHsgYmFzZW5hbWUsIGpvaW4sIHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XHJcbmltcG9ydCBmcywgeyBOb1BhcmFtQ2FsbGJhY2sgfSBmcm9tICdmcyc7XHJcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICd1cmwnO1xyXG5pbXBvcnQgeyBuYW1lIH0gZnJvbSBcIi4uLy4uL2xpYi9wYWNrYWdlLmpzb25cIlxyXG5cclxuaW1wb3J0IHsgTXhRdWlja0NvbW1hbmQgfSBmcm9tIFwiLi90eXBlcy9teFF1aWNrQ29tbWFuZC5kXCJcclxuaW1wb3J0IHsgTXhTZXJ2ZXJDb25maWcgfSBmcm9tIFwiLi90eXBlcy9teFNlcnZlckNvbmZpZy5kXCJcclxuaW1wb3J0IHsgTXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcgfSBmcm9tIFwiLi90eXBlcy9teFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZy5kXCJcclxuaW1wb3J0IHsgTXhVaUNvbmZpZyB9IGZyb20gXCIuL3R5cGVzL214VWlDb25maWcuZFwiXHJcbmltcG9ydCB7IE14Y2FkVWlDb25maWcgfSBmcm9tIFwiLi90eXBlcy9teGNhZFVpQ29uZmlnLmRcIlxyXG5pbXBvcnQgeyBWdWV0aWZ5VGhlbWVDb25maWcgfSBmcm9tIFwiLi90eXBlcy92dWV0aWZ5VGhlbWVDb25maWcuZFwiXHJcbmltcG9ydCBhcGlNYXAgZnJvbSAnLi4vYXBpLW1hcC5qc29uJ1xyXG5leHBvcnQgY29uc3QgZ2V0QXBpTWFwID0gKCkgPT4gYXBpTWFwXHJcbmV4cG9ydCBpbnRlcmZhY2UgTXhQbHVnaW5Db25maWcge1xyXG4gIHBsdWdpbnM6IChzdHJpbmcgfCB7XHJcbiAgICBuYW1lPzogc3RyaW5nLFxyXG4gICAgaXNBZnRlckxvYWQ/OiBib29sZWFuLFxyXG4gICAgZGlyPzogYm9vbGVhbixcclxuICAgIHZlcnNpb24/OiBzdHJpbmdcclxuICB9KVtdXHJcbn1cclxuLy8gPT09IOaWsOWinu+8mumFjee9ruaWh+S7tuWQjeW4uOmHjyA9PT1cclxuZXhwb3J0IGNvbnN0IENPTkZJR19GSUxFTkFNRVMgPSBbXHJcbiAgLy8gJ214Y2FkVWlDb25maWcuanNvbicsXHJcbiAgJ214UXVpY2tDb21tYW5kLmpzb24nLFxyXG4gICdteFNlcnZlckNvbmZpZy5qc29uJyxcclxuICAnbXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcuanNvbicsXHJcbiAgJ214VWlDb25maWcuanNvbicsXHJcbiAgJ3Z1ZXRpZnlUaGVtZUNvbmZpZy5qc29uJyxcclxuICAvLyAncGx1Z2lucy9jb25maWcuanNvbidcclxuXSBhcyBjb25zdDtcclxuLyoqXHJcbiAqIOmFjee9ruaWh+S7tuWkhOeQhuWZqFxyXG4gKiDlj6/pgInvvJrlr7nnibnlrprphY3nva7mlofku7bov5vooYzov5DooYzml7bkv67mlLlcclxuICog5Ye95pWw5o6l5pS25Y6f5aeLIEpTT04g5pWw5o2u77yM6L+U5Zue5L+u5pS55ZCO55qEIEpTT04g5pWw5o2u77yI5Y+v5byC5q2l77yJXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZm9ybUZ1bmN0aW9ucyB7XHJcbiAgLy8gdHJhbnNmb3JtTXhjYWRVaUNvbmZpZyhkYXRhOiBNeGNhZFVpQ29uZmlnKTogUHJvbWlzZTxNeGNhZFVpQ29uZmlnPiB8IE14Y2FkVWlDb25maWc7XHJcbiAgdHJhbnNmb3JtTXhRdWlja0NvbW1hbmQoZGF0YTogTXhRdWlja0NvbW1hbmQpOiBQcm9taXNlPE14UXVpY2tDb21tYW5kPiB8IE14UXVpY2tDb21tYW5kO1xyXG4gIHRyYW5zZm9ybU14U2VydmVyQ29uZmlnKGRhdGE6IE14U2VydmVyQ29uZmlnKTogUHJvbWlzZTxNeFNlcnZlckNvbmZpZz4gfCBNeFNlcnZlckNvbmZpZztcclxuICB0cmFuc2Zvcm1NeFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZyhkYXRhOiBNeFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZyk6IFByb21pc2U8TXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWc+IHwgTXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWc7XHJcbiAgdHJhbnNmb3JtTXhVaUNvbmZpZyhkYXRhOiBNeFVpQ29uZmlnKTogUHJvbWlzZTxNeFVpQ29uZmlnPiB8IE14VWlDb25maWc7XHJcbiAgdHJhbnNmb3JtVnVldGlmeVRoZW1lQ29uZmlnKGRhdGE6IFZ1ZXRpZnlUaGVtZUNvbmZpZyk6IFByb21pc2U8VnVldGlmeVRoZW1lQ29uZmlnPiB8IFZ1ZXRpZnlUaGVtZUNvbmZpZztcclxuICAvLyB0cmFuc2Zvcm1NeFBsdWdpbnNDb25maWcoZGF0YTogTXhQbHVnaW5Db25maWdbXSk6IFByb21pc2U8TXhQbHVnaW5Db25maWdbXT4gfCBNeFBsdWdpbkNvbmZpZ1tdO1xyXG59XHJcbi8vIOaJqeWxleaPkuS7tumAiemhueaOpeWPoyA9PT1cclxuZXhwb3J0IGludGVyZmFjZSBNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPFRyYW5zZm9ybUZ1bmN0aW9ucz4ge1xyXG4gIC8qKlxyXG4gICAqIOaehOW7uuWQju+8jG14Y2FkQXBwQXNzZXRzIOi1hOa6kOWtmOaUvueahOWtkOebruW9leWQjeOAglxyXG4gICAqIEBkZWZhdWx0ICdteGNhZEFwcEFzc2V0cydcclxuICAgKi9cclxuICBvdXRwdXREaXI/OiBzdHJpbmc7XHJcbiAgLyoqIOesrOS4ieaWueS+nei1liovXHJcbiAgbGlicmFyeU5hbWVzPzogKGtleW9mIHR5cGVvZiBleHRlcm5hbHMpW107XHJcbiAgLyoqIOaYr+WQpuWNlee6v+eoi+WKoOi9vXdhc20gKOm7mOiupOS9v+eUqOWkmue6v+eoi+WPiuWKoOi9vSkgKi9cclxuICBpc1dhc21TdD86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgKiDmmK/lkKblkK/nlKjpooTljovnvKnotYTmupDvvIjlpoIgLmd6IOaWh+S7tu+8ieeahOaLt+i0nSDpu5jorqTmmK90cnVlXHJcbiAgKiDorr7nva7kuLogZmFsc2Ug5pe277yMLmd6IOWOi+e8qeaWh+S7tuWwhuS4jeS8muiiq+WkjeWItuWIsOi+k+WHuuebruW9lVxyXG4gICogQGRlZmF1bHQgdHJ1ZVxyXG4gICovXHJcbiAgZW5hYmxlQ29tcHJlc3NlZEFzc2V0cz86IGJvb2xlYW47XHJcbn1cclxuXHJcblxyXG4vLyA9PT0g5aKe5by677yacmVzb2x2ZU9wdGlvbnMg6buY6K6k5YC8ID09PVxyXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU9wdGlvbnMob3B0aW9uczogTXhDYWRBc3NldHNQbHVnaW5PcHRpb25zID0ge30pOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+IHtcclxuICBjb25zdCByZXNvbHZlZDogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPiA9IHtcclxuICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXREaXIgfHwgJ214Y2FkQXBwQXNzZXRzJyxcclxuICAgIGxpYnJhcnlOYW1lczogb3B0aW9ucy5saWJyYXJ5TmFtZXMgfHwgW10sXHJcbiAgICBpc1dhc21TdDogb3B0aW9ucy5pc1dhc21TdCB8fCBmYWxzZSxcclxuICAgIGVuYWJsZUNvbXByZXNzZWRBc3NldHM6IG9wdGlvbnMuZW5hYmxlQ29tcHJlc3NlZEFzc2V0cyB8fCB0cnVlLFxyXG4gICAgLy8gdHJhbnNmb3JtTXhjYWRVaUNvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1NeGNhZFVpQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICB0cmFuc2Zvcm1NeFF1aWNrQ29tbWFuZDogb3B0aW9ucy50cmFuc2Zvcm1NeFF1aWNrQ29tbWFuZCB8fCAoKGQpID0+IGQpLFxyXG4gICAgdHJhbnNmb3JtTXhTZXJ2ZXJDb25maWc6IG9wdGlvbnMudHJhbnNmb3JtTXhTZXJ2ZXJDb25maWcgfHwgKChkKSA9PiBkKSxcclxuICAgIHRyYW5zZm9ybU14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnOiBvcHRpb25zLnRyYW5zZm9ybU14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICB0cmFuc2Zvcm1NeFVpQ29uZmlnOiBvcHRpb25zLnRyYW5zZm9ybU14VWlDb25maWcgfHwgKChkKSA9PiBkKSxcclxuICAgIHRyYW5zZm9ybVZ1ZXRpZnlUaGVtZUNvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1WdWV0aWZ5VGhlbWVDb25maWcgfHwgKChkKSA9PiBkKSxcclxuICAgIC8vIHRyYW5zZm9ybU14UGx1Z2luc0NvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1NeFBsdWdpbnNDb25maWcgfHwgKChkKSA9PiBkKSxcclxuICB9O1xyXG4gIHJldHVybiByZXNvbHZlZDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUGF0aFJlc3VsdCB7XHJcbiAgc3VjY2VzczogYm9vbGVhbjtcclxuICBmaWxlUGF0aD86IHN0cmluZzsgICAgICAgICAvLyDlt7IgcmVzb2x2ZSDnmoTlronlhajmlofku7bot6/lvoRcclxuICB1cmxQYXRoPzogc3RyaW5nOyAgICAgICAgICAvLyDop6PnoIHlkI7nmoQgVVJMIOi3r+W+hO+8iOS4jeWQqyBxdWVyee+8iVxyXG4gIGZpbGVOYW1lPzogc3RyaW5nOyAgICAgICAgIC8vIOaWh+S7tuWQje+8iGJhc2VuYW1l77yJXHJcbiAgc3RhdHVzQ29kZT86IG51bWJlcjtcclxuICBtZXNzYWdlPzogc3RyaW5nO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIOWuieWFqOino+aekOW5tumqjOivgeivt+axgui3r+W+hFxyXG4gKiBAcGFyYW0gcmVxVXJsIOivt+axgueahCBVUkzvvIjlpoIgJy9hc3NldHMvbXhTZXJ2ZXJDb25maWcuanNvbj92PTEn77yJXHJcbiAqIEBwYXJhbSByb290IOacrOWcsOagueebruW9le+8iOWmgiAnRDovcHJvamVjdC9kaXN0L214Y2FkJ++8iVxyXG4gKiBAcGFyYW0gYmFzZVBhdGgg5Y+v6YCJ55qE5Z+656GA6Lev5b6E5YmN57yA77yI5aaCICcvbXhjYWQvJ++8jOeUqOS6jiBWaXRl77yJXHJcbiAqIEByZXR1cm5zIOino+aekOe7k+aenOaIlumUmeivr1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTYWZlUGF0aChcclxuICByZXFVcmw6IHN0cmluZyxcclxuICByb290OiBzdHJpbmcsXHJcbiAgYmFzZVBhdGg/OiBzdHJpbmdcclxuKTogUGFyc2VkUGF0aFJlc3VsdCB7XHJcbiAgLy8gMS4g5Z+65pys5qCh6aqMXHJcbiAgaWYgKCFyZXFVcmwgfHwgdHlwZW9mIHJlcVVybCAhPT0gJ3N0cmluZycpIHtcclxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBzdGF0dXNDb2RlOiA0MDAsIG1lc3NhZ2U6ICdCYWQgUmVxdWVzdCcgfTtcclxuICB9XHJcblxyXG4gIC8vIDIuIOaPkOWPlui3r+W+hO+8iOWOuyBxdWVyeSDlkowgaGFzaO+8iVxyXG4gIGxldCB1cmxQYXRoID0gcmVxVXJsLnNwbGl0KCc/JylbMF0uc3BsaXQoJyMnKVswXTtcclxuXHJcbiAgLy8gMy4g6Kej56CBIFVSTFxyXG4gIGxldCBkZWNvZGVkUGF0aDogc3RyaW5nO1xyXG4gIHRyeSB7XHJcbiAgICBkZWNvZGVkUGF0aCA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmxQYXRoKTtcclxuICAgIC8vIOmYsuatoiBudWxsIOWtl+iKguaUu+WHu1xyXG4gICAgaWYgKGRlY29kZWRQYXRoLmluY2x1ZGVzKCdcXDAnKSkge1xyXG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNDAwLCBtZXNzYWdlOiAnSW52YWxpZCBVUkwnIH07XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNDAwLCBtZXNzYWdlOiAnSW52YWxpZCBVUkwgZW5jb2RpbmcnIH07XHJcbiAgfVxyXG5cclxuICAvLyA0LiDlpITnkIYgYmFzZVBhdGjvvIjlpoIgVml0ZSDnmoQgYmFzZe+8iVxyXG4gIGlmIChiYXNlUGF0aCAmJiBkZWNvZGVkUGF0aC5zdGFydHNXaXRoKGJhc2VQYXRoKSkge1xyXG4gICAgZGVjb2RlZFBhdGggPSBkZWNvZGVkUGF0aC5zbGljZShiYXNlUGF0aC5sZW5ndGgpO1xyXG4gIH1cclxuXHJcbiAgLy8gNS4g5riF55CG6Lev5b6E77ya5Y676Zmk5byA5aS05aSa5L2Z55qEIC9cclxuICAvLyDkvovlpoLvvJovL2Fzc2V0cy9maWxlLmpzb24gLT4gYXNzZXRzL2ZpbGUuanNvblxyXG4gIGNvbnN0IGNsZWFuZWRQYXRoID0gZGVjb2RlZFBhdGgucmVwbGFjZSgvXlxcLysvLCAnJyk7XHJcblxyXG4gIC8vIDYuIOaLvOaOpeaWh+S7tui3r+W+hFxyXG4gIGNvbnN0IGZpbGVQYXRoID0gam9pbihyb290LCBjbGVhbmVkUGF0aCB8fCAnLicpO1xyXG5cclxuICAvLyA3LiDlronlhajmo4Dmn6XvvJrpmLLmraLot6/lvoTnqb/otopcclxuICBsZXQgbm9ybWFsaXplZEZpbGU6IHN0cmluZztcclxuICBsZXQgbm9ybWFsaXplZFJvb3Q6IHN0cmluZztcclxuICB0cnkge1xyXG4gICAgbm9ybWFsaXplZEZpbGUgPSByZXNvbHZlKGZpbGVQYXRoKTtcclxuICAgIG5vcm1hbGl6ZWRSb290ID0gcmVzb2x2ZShyb290KTtcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBzdGF0dXNDb2RlOiA1MDAsIG1lc3NhZ2U6ICdQYXRoIHJlc29sdXRpb24gZmFpbGVkJyB9O1xyXG4gIH1cclxuXHJcbiAgLy8g4pyFIOWFs+mUru+8muehruS/nSBub3JtYWxpemVkRmlsZSDlnKggbm9ybWFsaXplZFJvb3Qg55uu5b2V5LiLXHJcbiAgY29uc3Qgbm9ybWFsaXplZEZpbGVTdHIgPSBub3JtYWxpemVkRmlsZS5yZXBsYWNlKC9cXFxcL2csICcvJykgKyAnLyc7XHJcbiAgY29uc3Qgbm9ybWFsaXplZFJvb3RTdHIgPSBub3JtYWxpemVkUm9vdC5yZXBsYWNlKC9cXFxcL2csICcvJykgKyAnLyc7XHJcblxyXG4gIGlmICghbm9ybWFsaXplZEZpbGVTdHIuc3RhcnRzV2l0aChub3JtYWxpemVkUm9vdFN0cikpIHtcclxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBzdGF0dXNDb2RlOiA0MDMsIG1lc3NhZ2U6ICdGb3JiaWRkZW46IFBhdGggdHJhdmVyc2FsIGRldGVjdGVkJyB9O1xyXG4gIH1cclxuXHJcbiAgLy8gOC4g5o+Q5Y+WIGZpbGVOYW1lXHJcbiAgY29uc3QgcGF0aFNlZ21lbnRzID0gY2xlYW5lZFBhdGguc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XHJcbiAgY29uc3QgZmlsZU5hbWUgPSBwYXRoU2VnbWVudHMubGVuZ3RoID4gMCA/IGJhc2VuYW1lKHBhdGhTZWdtZW50c1twYXRoU2VnbWVudHMubGVuZ3RoIC0gMV0pIDogJyc7XHJcblxyXG4gIC8vIOKchSDmiJDlip9cclxuICByZXR1cm4ge1xyXG4gICAgc3VjY2VzczogdHJ1ZSxcclxuICAgIGZpbGVQYXRoOiBub3JtYWxpemVkRmlsZSxcclxuICAgIHVybFBhdGg6IGRlY29kZWRQYXRoLFxyXG4gICAgZmlsZU5hbWUsXHJcbiAgfTtcclxufVxyXG5cclxuXHJcbnR5cGUgQ29uZmlnRmlsZW5hbWUgPSAodHlwZW9mIENPTkZJR19GSUxFTkFNRVMpW251bWJlcl07XHJcbmZ1bmN0aW9uIGhhbmRsZUNvbmZpZ0ZpbGUoXHJcbiAgc3JjUGF0aDogc3RyaW5nLFxyXG4gIGRlc3RQYXRoOiBzdHJpbmcsXHJcbiAgZmlsZW5hbWU6IENvbmZpZ0ZpbGVuYW1lLFxyXG4gIG9wdGlvbnM6IFJlcXVpcmVkPE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucz4sXHJcbiAgY2FsbGJhY2s6IE5vUGFyYW1DYWxsYmFja1xyXG4pIHtcclxuICBmcy5yZWFkRmlsZShzcmNQYXRoLCAndXRmLTgnLCBhc3luYyAoZXJyLCBjb250ZW50KSA9PiB7XHJcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgZGF0YSA9IGNvbnRlbnQudHJpbSgpID8gSlNPTi5wYXJzZShjb250ZW50KSA6IHt9O1xyXG5cclxuICAgICAgLy8g4pyFIOato+ehrueUn+aIkCB0cmFuc2Zvcm0g5Ye95pWw5ZCNXHJcbiAgICAgIGNvbnN0IGJhc2VOYW1lID0gZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvaSwgJycpO1xyXG4gICAgICBjb25zdCB0cmFuc2Zvcm1LZXkgPSBgdHJhbnNmb3JtJHtwYXNjYWxDYXNlKGJhc2VOYW1lKX1gOyAvLyDkvovlpoI6IHRyYW5zZm9ybVBsdWdpbnNDb25maWcg5oiWIHRyYW5zZm9ybU14UGx1Z2luc0NvbmZpZ1xyXG5cclxuICAgICAgY29uc3QgdHJhbnNmb3JtRm4gPSAob3B0aW9ucyBhcyBhbnkpW3RyYW5zZm9ybUtleV07XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHRyYW5zZm9ybUZuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgZGF0YSA9IGF3YWl0IHRyYW5zZm9ybUZuKGRhdGEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMik7XHJcbiAgICAgIGZzLndyaXRlRmlsZShkZXN0UGF0aCwganNvbiwgJ3V0Zi04JywgY2FsbGJhY2spO1xyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuLyoqXHJcbiAqIOWkhOeQhumFjee9ruaWh+S7tuivt+axgu+8muivu+WPliDihpIg6L2s5o2iIOKGkiDov5Tlm57lk43lupRcclxuICog55So5LqOIFZpdGUvV2VicGFjayBkZXYgc2VydmVyIOS4remXtOS7tlxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUNvbmZpZ1JlcXVlc3QoXHJcbiAgZmlsZVBhdGg6IHN0cmluZywgICAgICAgICAgIC8vIOW3sue7j+mqjOivgei/h+eahOWuieWFqOi3r+W+hFxyXG4gIGZpbGVOYW1lOiBzdHJpbmcsICAgICAgICAgICAvLyDmlofku7blkI3vvIzlpoIgJ214U2VydmVyQ29uZmlnLmpzb24nXHJcbiAgb3B0aW9uczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPixcclxuICByZXM6IGFueSxcclxuICBsb2dnZXI/OiB7IGluZm8/OiAobXNnOiBzdHJpbmcpID0+IHZvaWQ7IGVycm9yPzogKG1zZzogc3RyaW5nKSA9PiB2b2lkIH1cclxuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgLy8g5LuF5aSE55CG55m95ZCN5Y2V5YaF55qE5paH5Lu2XHJcbiAgaWYgKCEoQ09ORklHX0ZJTEVOQU1FUyBhcyB1bmtub3duIGFzIHN0cmluZykuaW5jbHVkZXMoZmlsZU5hbWUpKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0cnkge1xyXG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKGZpbGVQYXRoLCAndXRmLTgnKTtcclxuICAgIGxldCBkYXRhID0gY29udGVudC50cmltKCkgPyBKU09OLnBhcnNlKGNvbnRlbnQpIDoge307XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtS2V5ID0gYHRyYW5zZm9ybSR7cGFzY2FsQ2FzZShmaWxlTmFtZS5yZXBsYWNlKC9cXC5qc29uJC9pLCAnJykpfWA7XHJcbiAgICBjb25zdCB0cmFuc2Zvcm1GbiA9IChvcHRpb25zIGFzIGFueSlbdHJhbnNmb3JtS2V5XTtcclxuXHJcbiAgICBpZiAodHlwZW9mIHRyYW5zZm9ybUZuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGRhdGEgPSBhd2FpdCB0cmFuc2Zvcm1GbihkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xyXG4gICAgcmVzLnNldEhlYWRlcignQ2FjaGUtQ29udHJvbCcsICduby1jYWNoZScpO1xyXG4gICAgcmVzLmVuZChKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgbG9nZ2VyPy5lcnJvcj8uKGBbbXhjYWQtYXNzZXRzXSDinYwgRmFpbGVkIHRvIHNlcnZlICR7ZmlsZU5hbWV9OiAke2Vyci5tZXNzYWdlfWApO1xyXG4gICAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHtcclxuICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcclxuICAgICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XHJcbiAgICAgIHJlcy5lbmQoJ0ludGVybmFsIFNlcnZlciBFcnJvcicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7IC8vIOW3suWkhOeQhumUmeivr1xyXG4gIH1cclxufVxyXG5cclxuLyoqIOWIm+W7uumAmueUqOWFqOWxgOS4remXtOS7tiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2xvYmFsVW5pdmVyc2FsTWlkZGxld2FyZShvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+KSB7XHJcbiAgcmV0dXJuIGFzeW5jIChyZXE6IGFueSwgcmVzOiBhbnksIG5leHQ6IGFueSkgPT4ge1xyXG4gICAgaWYgKCFvcHRpb25zLmlzV2FzbVN0KSB7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0Nyb3NzLU9yaWdpbi1PcGVuZXItUG9saWN5JywgJ3NhbWUtb3JpZ2luJyk7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0Nyb3NzLU9yaWdpbi1FbWJlZGRlci1Qb2xpY3knLCAncmVxdWlyZS1jb3JwJyk7XHJcbiAgICB9XHJcbiAgICBuZXh0KCk7XHJcbiAgfVxyXG59XHJcbi8vID09PSDovoXliqnlh73mlbDvvJrlrZfnrKbkuLLovawgUGFzY2FsQ2FzZSA9PT1cclxuZXhwb3J0IGZ1bmN0aW9uIHBhc2NhbENhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBzdHJcclxuICAgIC5yZXBsYWNlKC9bXmEtekEtWjAtOV0rKC4pL2csIChtLCBjaHIpID0+IGNoci50b1VwcGVyQ2FzZSgpKVxyXG4gICAgLnJlcGxhY2UoL14uLywgYyA9PiBjLnRvVXBwZXJDYXNlKCkpO1xyXG59XHJcblxyXG4vLyA9PT0g5YW25LuW5Y6f5pyJ5a+85Ye65L+d5oyB5LiN5Y+YID09PVxyXG5leHBvcnQgY29uc3QgZXh0ZXJuYWxzID0ge1xyXG4gICd2dWUnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMuVnVlJyxcclxuICAnYXhpb3MnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMuYXhpb3MnLFxyXG4gICd2dWV0aWZ5JzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLnZ1ZXRpZnknLFxyXG4gICd2dWV0aWZ5L2NvbXBvbmVudHMnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMudnVldGlmeUNvbXBvbmVudHMnLFxyXG4gICdtYXBib3gtZ2wnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMubWFwYm94Z2wnLFxyXG4gICdwaW5pYSc6ICdNWENBREFQUF9FWFRFUk5BTExJQlJBUklFUy5waW5pYSdcclxufTtcclxuLy8g5aeL57uI5L+d55WZ55qE5qih5Z2XXHJcbmNvbnN0IEFMV0FZU19LRUVQID0gbmV3IFNldChbJ214Y2FkJywgJ214ZHJhdyddKTtcclxuXHJcbi8qKlxyXG4gKiDmuIXnkIblubblhpnlhaXmraPnoa7nmoTnsbvlnovlvJXnlKhcclxuICovXHJcbmZ1bmN0aW9uIHN5bmNUeXBlUmVmZXJlbmNlcyhsaWJyYXJ5TmFtZXM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgY29uc3Qgcm9vdERpciA9IHByb2Nlc3MuY3dkKCk7XHJcbiAgY29uc3QgZGlzdERpciA9IHJlc29sdmUocm9vdERpciwgJ25vZGVfbW9kdWxlcycsICdteGNhZC1hcHAnLCAnZGlzdCcpO1xyXG4gIGNvbnN0IGluZGV4UGF0aCA9IHJlc29sdmUoZGlzdERpciwgJ2luZGV4LmQudHMnKTtcclxuXHJcbiAgdHJ5IHtcclxuICAgIC8vIOKchSAxLiDmo4Dmn6UgZGlzdCDnm67lvZVcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhkaXN0RGlyKSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oYOKaoO+4jyBteGNhZC1hcHAvZGlzdCDnm67lvZXkuI3lrZjlnKjvvIzot7Pov4fnsbvlnovlkIzmraU6ICR7ZGlzdERpcn1gKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKchSAyLiDnoa7kv50gaW5kZXguZC50cyDlrZjlnKhcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhpbmRleFBhdGgpKSB7XHJcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoaW5kZXhQYXRoLCAnJywgJ3V0Zi04Jyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKGDinIUg5bey5Yib5bu656m657G75Z6L5paH5Lu2OiAke2luZGV4UGF0aH1gKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhpbmRleFBhdGgsICd1dGYtOCcpO1xyXG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KC9cXHI/XFxuLyk7XHJcblxyXG4gICAgLy8g4pyFIDMuIOaPkOWPluaJgOacieeOsOacieeahCAvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi94eHguZC50c1wiIC8+IOihjFxyXG4gICAgY29uc3QgcmVmZXJlbmNlUmVnZXggPSAvXFwvXFwvXFwvXFxzKjxyZWZlcmVuY2VcXHMrcGF0aD1cIlxcLlxcLyhbXlwiXStcXC5kXFwudHMpXCJcXHMqXFwvPi87XHJcbiAgICBjb25zdCBleGlzdGluZ1JlZnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBjb25zdCBub25SZWZMaW5lczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBsaW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICBjb25zdCBtYXRjaCA9IGxpbmUudHJpbSgpLm1hdGNoKHJlZmVyZW5jZVJlZ2V4KTtcclxuICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBtYXRjaFsxXTsgLy8g5aaCIFwidnVlLmQudHNcIlxyXG4gICAgICAgIGNvbnN0IG1vZHVsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9cXC5kXFwudHMkLywgJycpOyAvLyDmj5Dlj5bmqKHlnZflkI1cclxuICAgICAgICBleGlzdGluZ1JlZnMucHVzaChtb2R1bGVOYW1lKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBub25SZWZMaW5lcy5wdXNoKGxpbmUpOyAvLyDkv53nlZnpnZ4gcmVmZXJlbmNlIOihjFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDinIUgNC4g6K6h566X5pyA57uI5bqU6K+l5L+d55WZ55qE5qih5Z2XXHJcbiAgICBjb25zdCB2YWxpZE1vZHVsZXMgPSBuZXcgU2V0PHN0cmluZz4oQUxXQVlTX0tFRVApO1xyXG5cclxuICAgIGxpYnJhcnlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICAvLyDlv4XpobvlnKggZXh0ZXJuYWxzIOS4reWumuS5ie+8jOS4lOexu+Wei+aWh+S7tuWtmOWcqFxyXG4gICAgICBpZiAobmFtZSBpbiBleHRlcm5hbHMpIHtcclxuICAgICAgICBjb25zdCBkdHNQYXRoID0gcmVzb2x2ZShkaXN0RGlyLCBgJHtuYW1lfS5kLnRzYCk7XHJcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZHRzUGF0aCkpIHtcclxuICAgICAgICAgIHZhbGlkTW9kdWxlcy5hZGQobmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDinIUgNS4g55Sf5oiQ5pyA57uI55qEIHJlZmVyZW5jZSDooYzvvIjkv53mjIEgbXhjYWQg5ZKMIG14ZHJhdyDlnKjmnIDliY3vvIlcclxuICAgIGNvbnN0IGZpbmFsUmVmcyA9IFsnbXhjYWQnLCAnbXhkcmF3J11cclxuICAgICAgLmZpbHRlcihuYW1lID0+IHZhbGlkTW9kdWxlcy5oYXMobmFtZSkpXHJcbiAgICAgIC5tYXAobmFtZSA9PiBgLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vJHtuYW1lfS5kLnRzXCIgLz5gKTtcclxuXHJcbiAgICAvLyDmt7vliqDlhbbku5YgdmFsaWRNb2R1bGVzIOS4reeahO+8iOWOu+mHje+8iVxyXG4gICAgQXJyYXkuZnJvbSh2YWxpZE1vZHVsZXMpXHJcbiAgICAgIC5maWx0ZXIobmFtZSA9PiAhQUxXQVlTX0tFRVAuaGFzKG5hbWUpKVxyXG4gICAgICAuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgICBmaW5hbFJlZnMucHVzaChgLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vJHtuYW1lfS5kLnRzXCIgLz5gKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8g4pyFIDYuIOWQiOW5tu+8muacgOe7iOW8leeUqCArIOWOn+Wni+mdnuW8leeUqOihjFxyXG4gICAgY29uc3QgcmVzdWx0TGluZXMgPSBbLi4uZmluYWxSZWZzLCAnJywgLi4ubm9uUmVmTGluZXMuZmlsdGVyKGwgPT4gbC50cmltKCkubGVuZ3RoID4gMCldO1xyXG5cclxuICAgIC8vIOenu+mZpOi/nue7reepuuihjO+8jOS/neeVmeS4gOS4quWIhumalFxyXG4gICAgY29uc3QgY2xlYW5lZExpbmVzID0gcmVzdWx0TGluZXMuZmlsdGVyKChsaW5lLCBpLCBhcnIpID0+XHJcbiAgICAgICEobGluZS50cmltKCkgPT09ICcnICYmIGkgPiAwICYmIGFycltpIC0gMV0udHJpbSgpID09PSAnJylcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbmV3Q29udGVudCA9IGNsZWFuZWRMaW5lcy5qb2luKCdcXG4nKS50cmltKCkgKyAnXFxuJztcclxuXHJcbiAgICAvLyDinIUgNy4g5YaZ5Zue5paH5Lu277yI5LuF5b2T5YaF5a655Y+Y5YyW5pe277yJXHJcbiAgICBpZiAoY29udGVudC50cmltKCkgIT09IG5ld0NvbnRlbnQudHJpbSgpKSB7XHJcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoaW5kZXhQYXRoLCBuZXdDb250ZW50LCAndXRmLTgnKTtcclxuICAgICAgY29uc29sZS5sb2coYOKchSDlt7LlkIzmraUgbXhjYWQtYXBwL2Rpc3QvaW5kZXguZC50cyDnsbvlnovlvJXnlKhgKTtcclxuICAgIH1cclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoYOKdjCDlkIzmraXnsbvlnovlvJXnlKjlpLHotKU6YCwgZXJyKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDpooTlrprkuYnlupPlkI3liLDlhajlsYDlj5jph4/nmoTmmKDlsIRcclxuICovXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0xJQlJBUllfTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gIG14Y2FkOiAnTXhDQUQnLFxyXG4gIG14ZHJhdzogJ014J1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlcm5hbHMoXHJcbiAgbGlicmFyeU5hbWVzOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+WydsaWJyYXJ5TmFtZXMnXVxyXG4pOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcclxuICBzeW5jVHlwZVJlZmVyZW5jZXMobGlicmFyeU5hbWVzKTtcclxuICBjb25zdCByZXN1bHQ6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7IC4uLkRFRkFVTFRfTElCUkFSWV9NQVAgfVxyXG4gIGlmICghQXJyYXkuaXNBcnJheShsaWJyYXJ5TmFtZXMpKSByZXR1cm4gcmVzdWx0O1xyXG4gIGxpYnJhcnlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgaWYgKG5hbWUgaW4gZXh0ZXJuYWxzKSB7XHJcbiAgICAgIHJlc3VsdFtuYW1lXSA9IGV4dGVybmFsc1tuYW1lIGFzIGtleW9mIHR5cGVvZiBleHRlcm5hbHNdO1xyXG4gICAgfVxyXG4gIH0pO1xyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3VyY2VBc3NldHNQYXRoKCk6IHN0cmluZyB7XHJcbiAgbGV0IGN1cnJlbnRGaWxlOiBzdHJpbmc7XHJcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgY3VycmVudEZpbGUgPSBfX2ZpbGVuYW1lO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICBjdXJyZW50RmlsZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcclxuICB9XHJcbiAgY29uc3QgcGFja2FnZVJvb3QgPSByZXNvbHZlKGN1cnJlbnRGaWxlLCAnLi4nLCAnLi4nLCAnLi4nKTtcclxuICBjb25zdCBhc3NldHNQYXRoID0gcmVzb2x2ZShwYWNrYWdlUm9vdCwgbmFtZSwgJ2Rpc3QnLCAnbXhjYWRBcHBBc3NldHMnKTtcclxuICBpZiAoIWZzLmV4aXN0c1N5bmMoYXNzZXRzUGF0aCkpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihgbXgtY2FkLWFwcCBhc3NldHMgbm90IGZvdW5kIGF0OiAke2Fzc2V0c1BhdGh9YCk7XHJcbiAgfVxyXG4gIHJldHVybiBhc3NldHNQYXRoO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tTb3VyY2VBc3NldHNFeGlzdCgpOiBib29sZWFuIHtcclxuICBjb25zdCBwYXRoID0gZ2V0U291cmNlQXNzZXRzUGF0aCgpO1xyXG4gIHJldHVybiBmcy5leGlzdHNTeW5jKHBhdGgpICYmIGZzLmxzdGF0U3luYyhwYXRoKS5pc0RpcmVjdG9yeSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSdW50aW1lQ29uZmlnU2NyaXB0KHB1YmxpY1BhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGBcclxuICAgIDxzY3JpcHQ+XHJcbiAgICAgIHdpbmRvdy5fX01YX0NBRF9BUFBfQVNTRVRfUEFUSF9fID0gJyR7cHVibGljUGF0aH0nO1xyXG4gICAgPC9zY3JpcHQ+XHJcbiAgYC50cmltKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3B5RGlyKFxyXG4gIHNyYzogc3RyaW5nLFxyXG4gIGRlc3Q6IHN0cmluZyxcclxuICBwdWJsaWNEaXI6IHN0cmluZyxcclxuICBvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+LFxyXG4gIGNhbGxiYWNrOiAoZXJyPzogRXJyb3IpID0+IHZvaWRcclxuKTogdm9pZCB7XHJcbiAgLy8g4pyFIOaWsOWinu+8muajgOafpSBwdWJsaWNEaXIg5piv5ZCm5a2Y5ZyoXHJcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHB1YmxpY0RpcikpIHtcclxuICAgIC8vIOS4jeWtmOWcqOWImei3s+i/h+aJq+aPj++8jOebtOaOpeWkjeWItlxyXG4gICAgZG9Db3B5KHNyYywgZGVzdCwgcHVibGljRGlyLCBuZXcgU2V0KCksIG9wdGlvbnMsIGNhbGxiYWNrKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgLy8g56ys5LiA5q2l77ya5omr5o+PIHB1YmxpY0RpciDkuIvmiYDmnInmlofku7bvvIjnm7jlr7nkuo4gcHVibGljRGlyIOeahOi3r+W+hO+8iVxyXG4gIHNjYW5QdWJsaWNEaXIocHVibGljRGlyLCAoZXJyLCBwdWJsaWNGaWxlcykgPT4ge1xyXG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcblxyXG4gICAgLy8g56ys5LqM5q2l77ya5byA5aeL5aSN5Yi277yM5Lyg5YWlIHB1YmxpY0ZpbGVzIOe8k+WtmFxyXG4gICAgZG9Db3B5KHNyYywgZGVzdCwgcHVibGljRGlyLCBwdWJsaWNGaWxlcyEsIG9wdGlvbnMsIGNhbGxiYWNrKTtcclxuICB9KTtcclxufVxyXG5cclxuLy8g5a6e6ZmF5omn6KGM5aSN5Yi255qE5Ye95pWwXHJcbmZ1bmN0aW9uIGRvQ29weShcclxuICBzcmM6IHN0cmluZyxcclxuICBkZXN0OiBzdHJpbmcsXHJcbiAgcHVibGljRGlyOiBzdHJpbmcsXHJcbiAgcHVibGljRmlsZXM6IFNldDxzdHJpbmc+LFxyXG4gIG9wdGlvbnM6IFJlcXVpcmVkPE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucz4sIC8vIOazqOaEj++8mui/memHjOmcgOimgeehruS/nSBlbmFibGVDb21wcmVzc2VkQXNzZXRzIOaYr+W/hemAieeahFxyXG4gIGNhbGxiYWNrOiAoZXJyPzogRXJyb3IpID0+IHZvaWRcclxuKSB7XHJcbiAgZnMubWtkaXIoZGVzdCwgeyByZWN1cnNpdmU6IHRydWUgfSwgKGVycikgPT4ge1xyXG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcblxyXG4gICAgZnMucmVhZGRpcihzcmMsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9LCAoZXJyLCBkaXJlbnRzKSA9PiB7XHJcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG5cclxuICAgICAgbGV0IHBlbmRpbmcgPSBkaXJlbnRzLmxlbmd0aDtcclxuICAgICAgaWYgKHBlbmRpbmcgPT09IDApIHJldHVybiBjYWxsYmFjaygpO1xyXG5cclxuICAgICAgLy8g5o+Q5YmN5a6a5LmJ5Y6L57yp5paH5Lu25omp5bGV5ZCNXHJcbiAgICAgIGNvbnN0IGNvbXByZXNzZWRFeHRzID0gWycuZ3onXTsgLy8g5Y+v5oyJ6ZyA5omp5bGVXHJcblxyXG4gICAgICBkaXJlbnRzLmZvckVhY2goKGRpcmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNyY1BhdGggPSByZXNvbHZlKHNyYywgZGlyZW50Lm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGRlc3RQYXRoID0gcmVzb2x2ZShkZXN0LCBkaXJlbnQubmFtZSk7XHJcbiAgICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUoc3JjLCBzcmNQYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJykgYXMgQ29uZmlnRmlsZW5hbWU7XHJcblxyXG4gICAgICAgIC8vIOaWsOWinu+8muWmguaenOemgeeUqOWOi+e8qei1hOa6kOS4lOaYr+WOi+e8qeaWh+S7tu+8jOWImei3s+i/h1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICFvcHRpb25zLmVuYWJsZUNvbXByZXNzZWRBc3NldHMgJiZcclxuICAgICAgICAgIGNvbXByZXNzZWRFeHRzLnNvbWUoZXh0ID0+IHJlbGF0aXZlUGF0aC5lbmRzV2l0aChleHQpKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKC0tcGVuZGluZyA9PT0gMCkgY2FsbGJhY2soKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkaXJlbnQuaXNEaXJlY3RvcnkoKSkge1xyXG4gICAgICAgICAgZG9Db3B5KHNyY1BhdGgsIGRlc3RQYXRoLCBwdWJsaWNEaXIsIHB1YmxpY0ZpbGVzLCBvcHRpb25zLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRpcmVudC5pc0ZpbGUoKSkge1xyXG4gICAgICAgICAgaWYgKHB1YmxpY0ZpbGVzLmhhcyhyZWxhdGl2ZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0ZpbGVQYXRoID0gcmVzb2x2ZShwdWJsaWNEaXIsIHJlbGF0aXZlUGF0aCk7XHJcbiAgICAgICAgICAgIGZzLmNvcHlGaWxlKHB1YmxpY0ZpbGVQYXRoLCBkZXN0UGF0aCwgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG4gICAgICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChDT05GSUdfRklMRU5BTUVTLmluY2x1ZGVzKHJlbGF0aXZlUGF0aCkpIHtcclxuICAgICAgICAgICAgaGFuZGxlQ29uZmlnRmlsZShzcmNQYXRoLCBkZXN0UGF0aCwgcmVsYXRpdmVQYXRoLCBvcHRpb25zLCAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcbiAgICAgICAgICAgICAgaWYgKC0tcGVuZGluZyA9PT0gMCkgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmcy5jb3B5RmlsZShzcmNQYXRoLCBkZXN0UGF0aCwgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG4gICAgICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSBjYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9KTtcclxufVxyXG4vLyDmiavmj48gcHVibGljRGlyIOS4i+aJgOacieaWh+S7tu+8jOi/lOWbnuebuOWvueS6jiBwdWJsaWNEaXIg55qE6Lev5b6E6ZuG5ZCIXHJcbmZ1bmN0aW9uIHNjYW5QdWJsaWNEaXIoXHJcbiAgcHVibGljRGlyOiBzdHJpbmcsXHJcbiAgY2FsbGJhY2s6IChlcnI6IE5vZGVKUy5FcnJub0V4Y2VwdGlvbiB8IG51bGwsIGZpbGVzPzogU2V0PHN0cmluZz4pID0+IHZvaWRcclxuKSB7XHJcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcblxyXG4gIGZ1bmN0aW9uIHdhbGsoZGlyOiBzdHJpbmcpIHtcclxuICAgIGZzLnJlYWRkaXIoZGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSwgKGVyciwgZGlyZW50cykgPT4ge1xyXG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuXHJcbiAgICAgIGxldCBwZW5kaW5nID0gZGlyZW50cy5sZW5ndGg7XHJcbiAgICAgIGlmIChwZW5kaW5nID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRpcmVudHMuZm9yRWFjaCgoZGlyZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSByZXNvbHZlKGRpciwgZGlyZW50Lm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHJlbFBhdGggPSByZWxhdGl2ZShwdWJsaWNEaXIsIGZ1bGxQYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XHJcblxyXG4gICAgICAgIGlmIChkaXJlbnQuaXNEaXJlY3RvcnkoKSkge1xyXG4gICAgICAgICAgd2FsayhmdWxsUGF0aCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaXJlbnQuaXNGaWxlKCkpIHtcclxuICAgICAgICAgIHJlc3VsdC5hZGQocmVsUGF0aCk7XHJcbiAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIHtcclxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB3YWxrKHB1YmxpY0Rpcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250ZW50VHlwZShmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICBjb25zdCBleHQgPSBmaWxlUGF0aC5zcGxpdCgnLicpLnBvcCgpPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xyXG4gIGNvbnN0IHR5cGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgJ2Nzcyc6ICd0ZXh0L2NzcycsXHJcbiAgICAnanMnOiAnYXBwbGljYXRpb24vamF2YXNjcmlwdCcsXHJcbiAgICAnanNvbic6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICdwbmcnOiAnaW1hZ2UvcG5nJyxcclxuICAgICdqcGcnOiAnaW1hZ2UvanBlZycsXHJcbiAgICAnanBlZyc6ICdpbWFnZS9qcGVnJyxcclxuICAgICdnaWYnOiAnaW1hZ2UvZ2lmJyxcclxuICAgICdzdmcnOiAnaW1hZ2Uvc3ZnK3htbCcsXHJcbiAgICAnd29mZic6ICdmb250L3dvZmYnLFxyXG4gICAgJ3dvZmYyJzogJ2ZvbnQvd29mZjInLFxyXG4gICAgJ3R0Zic6ICdmb250L3R0ZicsXHJcbiAgICAnZW90JzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0JyxcclxuICAgICdpY28nOiAnaW1hZ2UveC1pY29uJyxcclxuICAgICd3YXNtJzogJ2FwcGxpY2F0aW9uL3dhc20nLFxyXG4gICAgJ3ppcCc6ICdhcHBsaWNhdGlvbi96aXAnLFxyXG4gICAgJ3Jhcic6ICdhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkJyxcclxuICAgICc3eic6ICdhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWQnLFxyXG4gICAgJ3Rhcic6ICdhcHBsaWNhdGlvbi94LXRhcicsXHJcbiAgICAnZ3onOiAnYXBwbGljYXRpb24vZ3ppcCcsXHJcbiAgICAnYnoyJzogJ2FwcGxpY2F0aW9uL3gtYnppcDInLFxyXG4gICAgJ3h6JzogJ2FwcGxpY2F0aW9uL3gteHonXHJcbiAgfTtcclxuICByZXR1cm4gdHlwZXNbZXh0XSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiDmoIflh4bljJbot6/lvoTvvIznoa7kv53ku6UgJy8nIOe7k+WwvlxyXG4gKi9cclxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiByZXNvbHZlKHApLnJlcGxhY2UoL1xcXFwvZywgJy8nKSArICcvJztcclxufVxyXG5cclxuLyoqXHJcbiAqIOWIm+W7uumAmueUqOS4remXtOS7tu+8muS8mOWFiOS9v+eUqCBwdWJsaWMg6LWE5rqQ77yM5Zue6YCA5YiwIHNvdXJjZUFzc2V0c1BhdGhcclxuICog5a+55qCHIGNyZWF0ZVN0YXRpY01pZGRsZXdhcmUg6aOO5qC8XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXhDYWRBc3NldHNNaWRkbGV3YXJlKFxyXG4gIHJvb3Q6IHN0cmluZyxcclxuICBvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+LFxyXG4gIHB1YmxpY0Rpcjogc3RyaW5nLFxyXG4gIGxvZ2dlcj86IGFueVxyXG4pIHtcclxuICBjb25zdCB7IG91dHB1dERpciwgaXNXYXNtU3QgPSBmYWxzZSB9ID0gb3B0aW9ucztcclxuICAvLyDinIUgMS4g6KeE6IyD5YyW6Lev5b6EXHJcbiAgY29uc3QgYmFzZVBhdGggPSBgLyR7b3V0cHV0RGlyLnJlcGxhY2UoL15cXC8rLywgJycpfWA7IC8vICcvbXhjYWRBcHBBc3NldHMnXHJcbiAgY29uc3Qgc291cmNlQXNzZXRzUm9vdCA9IG5vcm1hbGl6ZVBhdGgocm9vdCk7XHJcblxyXG4gIHJldHVybiBhc3luYyAocmVxOiBhbnksIHJlczogYW55LCBuZXh0OiAoKSA9PiB2b2lkKSA9PiB7XHJcbiAgICAvLyDinIUgMi4g5Z+65pys5qCh6aqMXHJcbiAgICBpZiAoIXJlcS51cmwgfHwgdHlwZW9mIHJlcS51cmwgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBuZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g4pyFIDMuIOiuvue9ruWuieWFqOWktO+8iOmdniBpc1dhc21TdCDmqKHlvI/vvIlcclxuICAgIGlmICghaXNXYXNtU3QpIHtcclxuICAgICAgcmVzLnNldEhlYWRlcignQ3Jvc3MtT3JpZ2luLU9wZW5lci1Qb2xpY3knLCAnc2FtZS1vcmlnaW4nKTtcclxuICAgICAgcmVzLnNldEhlYWRlcignQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeScsICdyZXF1aXJlLWNvcnAnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDinIUgNC4g6Kej5p6QIFVSTCDot6/lvoTvvIjljrsgcXVlcnnvvIzop6PnoIHvvIlcclxuICAgIGNvbnN0IHVybFBhdGggPSByZXEudXJsLnNwbGl0KCc/JylbMF07XHJcbiAgICBsZXQgZmlsZVBhdGghOiBzdHJpbmc7XHJcbiAgICBsZXQgZmlsZU5hbWUhOiBzdHJpbmc7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZGVjb2RlZFBhdGggPSBkZWNvZGVVUklDb21wb25lbnQodXJsUGF0aCk7XHJcbiAgICAgIC8vIOinhOiMg+WMlui3r+W+hO+8jOmYsuatoiAuLi8uLi8g6LaK5p2DXHJcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gZGVjb2RlZFBhdGgucmVwbGFjZSgvXlsvXFxcXF0rLywgJycpO1xyXG5cclxuICAgICAgLy8g4pyFIDUuIOS8mOWFiO+8muajgOafpSBwdWJsaWMvJHtvdXRwdXREaXJ9IOebruW9lVxyXG4gICAgICBjb25zdCBwdWJsaWNGaWxlUGF0aCA9IGpvaW4ocHVibGljRGlyLCBub3JtYWxpemVkUGF0aCkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMucHJvbWlzZXMuc3RhdChwdWJsaWNGaWxlUGF0aCk7XHJcbiAgICAgICAgaWYgKHN0YXQuaXNGaWxlKCkpIHtcclxuICAgICAgICAgIGZpbGVQYXRoID0gcHVibGljRmlsZVBhdGg7XHJcbiAgICAgICAgICBmaWxlTmFtZSA9IGJhc2VuYW1lKG5vcm1hbGl6ZWRQYXRoKTtcclxuICAgICAgICAgIHJldHVybiBzZXJ2ZUZpbGUoZmlsZVBhdGgsIGZpbGVOYW1lLCByZXMsIGxvZ2dlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAvLyBwdWJsaWMg5Lit5rKh5pyJ77yM57un57ut5p+l5om+IHNvdXJjZUFzc2V0c1BhdGhcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g4pyFIDYuIGZhbGxiYWNr77ya5p+l5om+IHNvdXJjZUFzc2V0c1BhdGhcclxuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZVNhZmVQYXRoKGRlY29kZWRQYXRoLCBzb3VyY2VBc3NldHNSb290LCBiYXNlUGF0aCk7XHJcbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICByZXMuc3RhdHVzQ29kZSA9IHJlc3VsdC5zdGF0dXNDb2RlIHx8IDQwMDtcclxuICAgICAgICByZXR1cm4gcmVzLmVuZChyZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChyZXN1bHQuZmlsZVBhdGgpIGZpbGVQYXRoID0gcmVzdWx0LmZpbGVQYXRoO1xyXG4gICAgICBpZiAocmVzdWx0LmZpbGVOYW1lKSBmaWxlTmFtZSA9IHJlc3VsdC5maWxlTmFtZTtcclxuXHJcbiAgICAgIC8vIOKchSA3LiDlsJ3or5XnlLEgaGFuZGxlQ29uZmlnUmVxdWVzdCDlpITnkIbvvIjlpoLms6jlhaXphY3nva7vvIlcclxuICAgICAgY29uc3QgaGFuZGxlZCA9IGF3YWl0IGhhbmRsZUNvbmZpZ1JlcXVlc3QoXHJcbiAgICAgICAgZmlsZVBhdGgsXHJcbiAgICAgICAgZmlsZU5hbWUsXHJcbiAgICAgICAgb3B0aW9ucyxcclxuICAgICAgICByZXMsXHJcbiAgICAgICAgbG9nZ2VyXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChoYW5kbGVkKSByZXR1cm47XHJcblxyXG4gICAgICAvLyDinIUgOC4g56Gu5L+d5piv5paH5Lu2XHJcbiAgICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBmcy5wcm9taXNlcy5zdGF0KGZpbGVQYXRoKTtcclxuICAgICAgaWYgKCFzdGF0LmlzRmlsZSgpKSB7XHJcbiAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDQ7XHJcbiAgICAgICAgcmV0dXJuIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBzZXJ2ZUZpbGUoZmlsZVBhdGgsIGZpbGVOYW1lLCByZXMsIGxvZ2dlcik7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgbG9nZ2VyPy53YXJuPy4oYFtNeENhZEFzc2V0c10gU2VydmUgZmFpbGVkIGZvciAke3JlcS51cmx9OiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XHJcbiAgICAgIGlmIChyZXMuaGVhZGVyc1NlbnQpIHJldHVybjtcclxuICAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDQ7XHJcbiAgICAgIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kJyk7XHJcbiAgICB9XHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOWwgeijheaWh+S7tuWTjeW6lOmAu+i+ke+8iOa1geW8j+S8oOi+k++8iVxyXG4gKi9cclxuZnVuY3Rpb24gc2VydmVGaWxlKGZpbGVQYXRoOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIHJlczogYW55LCBsb2dnZXI/OiBhbnkpIHtcclxuICBjb25zdCBzdHJlYW0gPSBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoKTtcclxuXHJcbiAgc3RyZWFtLm9uKCdlcnJvcicsIChlcnI6IE5vZGVKUy5FcnJub0V4Y2VwdGlvbikgPT4ge1xyXG4gICAgaWYgKHJlcy5oZWFkZXJzU2VudCkgcmV0dXJuO1xyXG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJyB8fCBlcnIuY29kZSA9PT0gJ0VBQ0NFUycpIHtcclxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXNDb2RlID09PSAyMDAgPyByZXMuZW5kKCkgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBsb2dnZXI/LmVycm9yPy4oYFtNeENhZEFzc2V0c10gUmVhZCBlcnJvcjogJHtlcnIubWVzc2FnZX1gLCBlcnIpO1xyXG4gICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XHJcbiAgICByZXMuZW5kKCdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InKTtcclxuICB9KTtcclxuXHJcbiAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgZ2V0Q29udGVudFR5cGUoZmlsZU5hbWUpKTtcclxuICByZXMuc2V0SGVhZGVyKCdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJywgJ25vc25pZmYnKTtcclxuXHJcbiAgc3RyZWFtLnBpcGUocmVzKTtcclxufSJdLCJuYW1lcyI6WyJqb2luIiwicmVzb2x2ZSIsImJhc2VuYW1lIiwiZXJyIiwibmFtZSIsImZpbGVVUkxUb1BhdGgiLCJyZWxhdGl2ZSIsInN0YXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -2,7 +2,7 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const path = require("path");
4
4
  const fs = require("fs");
5
- const index = require("../index-DEvHdVxU.js");
5
+ const index = require("../index-DubbRmDj.js");
6
6
  function _interopNamespaceDefault(e) {
7
7
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
8
8
  if (e) {
@@ -1,6 +1,6 @@
1
1
  import { resolve } from "path";
2
2
  import * as fs from "fs";
3
- import { r as resolveOptions, g as getSourceAssetsPath, a as getExternals, f as generateRuntimeConfigScript, c as copyDir, h as getContentType, b as createGlobalUniversalMiddleware, e as getApiMap } from "../index-DbpgHLWF.mjs";
3
+ import { r as resolveOptions, g as getSourceAssetsPath, a as getExternals, f as generateRuntimeConfigScript, c as copyDir, h as getContentType, b as createGlobalUniversalMiddleware, e as getApiMap } from "../index-CXnnCbjH.mjs";
4
4
  function mxcadAssetsPlugin(options = {}) {
5
5
  const resolvedOptions = resolveOptions(options);
6
6
  const sourceAssetsPath = getSourceAssetsPath();
@@ -2,7 +2,7 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const path = require("path");
4
4
  const fs = require("fs");
5
- const index = require("../index-DEvHdVxU.js");
5
+ const index = require("../index-DubbRmDj.js");
6
6
  function _interopNamespaceDefault(e) {
7
7
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
8
8
  if (e) {
@@ -1,6 +1,6 @@
1
1
  import { resolve } from "path";
2
2
  import * as fs from "fs";
3
- import { r as resolveOptions, g as getSourceAssetsPath, a as getExternals, c as copyDir, b as createGlobalUniversalMiddleware, d as createMxCadAssetsMiddleware, e as getApiMap, f as generateRuntimeConfigScript } from "../index-DbpgHLWF.mjs";
3
+ import { r as resolveOptions, g as getSourceAssetsPath, a as getExternals, c as copyDir, b as createGlobalUniversalMiddleware, d as createMxCadAssetsMiddleware, e as getApiMap, f as generateRuntimeConfigScript } from "../index-CXnnCbjH.mjs";
4
4
  function mxcadAssetsPlugin(options = {}) {
5
5
  let config;
6
6
  const resolvedOptions = resolveOptions(options);
@@ -3,7 +3,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
3
3
  const webpack = require("webpack");
4
4
  const fs = require("fs");
5
5
  const path = require("path");
6
- const index = require("../index-DEvHdVxU.js");
6
+ const index = require("../index-DubbRmDj.js");
7
7
  function _interopNamespaceDefault(e) {
8
8
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
9
9
  if (e) {
@@ -1,7 +1,7 @@
1
1
  import { Compilation } from "webpack";
2
2
  import * as fs from "fs";
3
3
  import * as path from "path";
4
- import { r as resolveOptions, g as getSourceAssetsPath, a as getExternals, b as createGlobalUniversalMiddleware, d as createMxCadAssetsMiddleware, c as copyDir, f as generateRuntimeConfigScript } from "../index-DbpgHLWF.mjs";
4
+ import { r as resolveOptions, g as getSourceAssetsPath, a as getExternals, b as createGlobalUniversalMiddleware, d as createMxCadAssetsMiddleware, c as copyDir, f as generateRuntimeConfigScript } from "../index-CXnnCbjH.mjs";
5
5
  class MxCadAssetsWebpackPlugin {
6
6
  options;
7
7
  sourceAssetsPath;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mxcad-app",
3
- "version": "1.0.63",
3
+ "version": "1.0.65",
4
4
  "main": "./dist/index.cjs",
5
5
  "module": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -33,7 +33,8 @@
33
33
  "./style": {
34
34
  "import": "./dist/styles/style.css",
35
35
  "browser": "./dist/styles/style.css",
36
- "require": "./dist/styles/style.css"
36
+ "require": "./dist/styles/style.css",
37
+ "types": "./style.d.ts"
37
38
  },
38
39
  "./vite": {
39
40
  "import": "./packToolPlugin/vite/index.mjs",
@@ -59,6 +60,7 @@
59
60
  "README.md",
60
61
  "packToolPlugin",
61
62
  "package.json",
62
- "postinstall.js"
63
+ "postinstall.js",
64
+ "style.d.ts"
63
65
  ]
64
66
  }
package/style.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ // style.d.ts
2
+ declare module "mxcad-app/style" {
3
+ const css: string;
4
+ export default css;
5
+ }