genassist-chat-react 1.0.39 → 1.0.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/components/BubbleDock.d.ts +19 -0
- package/dist/components/BubbleDock.js +129 -0
- package/dist/components/DynamicFormMessage.d.ts +8 -2
- package/dist/components/DynamicFormMessage.js +99 -55
- package/dist/components/GenAgentChat.js +427 -247
- package/dist/components/GenAgentConfigPanel.d.ts +2 -0
- package/dist/components/GenAgentConfigPanel.js +4 -2
- package/dist/hooks/useChat.d.ts +4 -1
- package/dist/hooks/useChat.js +81 -39
- package/dist/hooks/useViewportManager.d.ts +2 -0
- package/dist/hooks/useViewportManager.js +14 -1
- package/dist/services/chatService.d.ts +19 -2
- package/dist/services/chatService.js +46 -3
- package/dist/styles/genAgentChatStyles.d.ts +13 -7
- package/dist/styles/genAgentChatStyles.js +127 -43
- package/dist/types/index.d.ts +17 -0
- package/dist/types/index.js +1 -1
- package/package.json +6 -3
|
@@ -17,11 +17,14 @@ interface ContainerStyleParams {
|
|
|
17
17
|
}
|
|
18
18
|
export declare function getContainerStyle({ isFullscreen, isFloatingDocked, windowWidth, t }: ContainerStyleParams): React.CSSProperties;
|
|
19
19
|
export declare function getHeaderStyle(t: ThemeParams): React.CSSProperties;
|
|
20
|
-
export declare const
|
|
20
|
+
export declare const headerLeftContainerStyle: React.CSSProperties;
|
|
21
|
+
export declare const headerRightContainerStyle: React.CSSProperties;
|
|
22
|
+
export declare const headerPillStyle: React.CSSProperties;
|
|
21
23
|
export declare const logoStyle: React.CSSProperties;
|
|
22
|
-
export declare const
|
|
23
|
-
export declare function
|
|
24
|
-
export declare
|
|
24
|
+
export declare const brandLogoStyle: React.CSSProperties;
|
|
25
|
+
export declare function getHeaderPillTitleStyle(fontFamily: string): React.CSSProperties;
|
|
26
|
+
export declare const headerPillTextColumnStyle: React.CSSProperties;
|
|
27
|
+
export declare function getHeaderDescriptionTextStyle(fontFamily: string): React.CSSProperties;
|
|
25
28
|
export declare const menuButtonStyle: React.CSSProperties;
|
|
26
29
|
export declare function getMenuPopupStyle(backgroundColor: string): React.CSSProperties;
|
|
27
30
|
export declare function getMenuItemStyle(t: ThemeParams): React.CSSProperties;
|
|
@@ -60,14 +63,16 @@ export declare function getChatPositionStyles({ position, offsetX, offsetY }: Po
|
|
|
60
63
|
interface ResponsiveDimensionParams {
|
|
61
64
|
isFullscreen: boolean;
|
|
62
65
|
mode: string;
|
|
66
|
+
isExpanded?: boolean;
|
|
63
67
|
}
|
|
64
|
-
export declare function getResponsiveDimensions({ isFullscreen, mode }: ResponsiveDimensionParams): React.CSSProperties;
|
|
68
|
+
export declare function getResponsiveDimensions({ isFullscreen, mode, isExpanded }: ResponsiveDimensionParams): React.CSSProperties;
|
|
65
69
|
interface FloatingShellParams {
|
|
66
70
|
windowHeight: number;
|
|
67
71
|
offsetY: number;
|
|
68
72
|
position: string;
|
|
73
|
+
isExpanded?: boolean;
|
|
69
74
|
}
|
|
70
|
-
export declare function getFloatingShellStyle({ windowHeight, offsetY, position }: FloatingShellParams): React.CSSProperties;
|
|
75
|
+
export declare function getFloatingShellStyle({ windowHeight, offsetY, position, isExpanded }: FloatingShellParams): React.CSSProperties;
|
|
71
76
|
interface FloatingContainerParams {
|
|
72
77
|
mode: string;
|
|
73
78
|
isFullscreen: boolean;
|
|
@@ -76,7 +81,8 @@ interface FloatingContainerParams {
|
|
|
76
81
|
position: string;
|
|
77
82
|
offsetX: number;
|
|
78
83
|
offsetY: number;
|
|
84
|
+
isExpanded?: boolean;
|
|
79
85
|
}
|
|
80
86
|
export declare function getFloatingContainerStyle(p: FloatingContainerParams): React.CSSProperties;
|
|
81
|
-
export declare const CSS_KEYFRAMES = "\n @keyframes blink { 0% { opacity: 0.2; } 20% { opacity: 1; } 100% { opacity: 0.2; } }\n .ga-textarea-nosb {\n scrollbar-width: none;\n -ms-overflow-style: none;\n max-width: 100%;\n box-sizing: border-box;\n }\n .ga-textarea-nosb::-webkit-scrollbar { width: 0; height: 0; }\n .ga-input-disclaimer a {\n color: #9ca3af !important;\n text-decoration: underline;\n }\n .ga-input-disclaimer a:hover {\n color: #6b7280 !important;\n }\n @media (max-width: 768px) {\n .ga-textarea-nosb {\n font-size: 16px !important;\n }\n }\n @keyframes ga-backlight-sweep2 { 0% { transform: translateX(-35%); } 100% { transform: translateX(105%); } }\n @keyframes ga-backlight-pulse { 0%,100% { opacity: 0.7; } 50% { opacity: 1; } }\n @keyframes ga-think-change { 0% { opacity: 0; transform: translateY(4px); } 100% { opacity: 1; transform: translateY(0); } }\n .grecaptcha-badge {\n display: none !important;\n visibility: hidden !important;\n position: absolute !important;\n width: 0 !important;\n height: 0 !important;\n overflow: hidden !important;\n opacity: 0 !important;\n pointer-events: none !important;\n }\n";
|
|
87
|
+
export declare const CSS_KEYFRAMES = "\n @keyframes blink { 0% { opacity: 0.2; } 20% { opacity: 1; } 100% { opacity: 0.2; } }\n .ga-textarea-nosb {\n scrollbar-width: none;\n -ms-overflow-style: none;\n max-width: 100%;\n box-sizing: border-box;\n }\n .ga-textarea-nosb::-webkit-scrollbar { width: 0; height: 0; }\n .ga-input-disclaimer a {\n color: #9ca3af !important;\n text-decoration: underline;\n }\n .ga-input-disclaimer a:hover {\n color: #6b7280 !important;\n }\n @media (max-width: 768px) {\n .ga-textarea-nosb {\n font-size: 16px !important;\n }\n }\n @keyframes ga-backlight-sweep2 { 0% { transform: translateX(-35%); } 100% { transform: translateX(105%); } }\n @keyframes ga-backlight-pulse { 0%,100% { opacity: 0.7; } 50% { opacity: 1; } }\n @keyframes ga-think-change { 0% { opacity: 0; transform: translateY(4px); } 100% { opacity: 1; transform: translateY(0); } }\n @keyframes ga-widget-in {\n from { opacity: 0; transform: translateY(16px) scale(0.96); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n @keyframes ga-widget-out {\n from { opacity: 1; transform: translateY(0) scale(1); }\n to { opacity: 0; transform: translateY(16px) scale(0.96); }\n }\n /* fill backwards (not both): keep the entrance-from state, but drop the transform at rest so it\n does not become a containing block for the inner fixed-position fullscreen panel. */\n .ga-widget-in { animation: ga-widget-in 260ms cubic-bezier(0.16, 1, 0.3, 1) backwards; }\n .ga-widget-out { animation: ga-widget-out 200ms cubic-bezier(0.4, 0, 1, 1) both; }\n @keyframes ga-bubble-in {\n from { opacity: 0; transform: scale(0.8); }\n to { opacity: 1; transform: scale(1); }\n }\n @keyframes ga-quickinput-in {\n from { opacity: 0; transform: scale(0.94); }\n to { opacity: 1; transform: scale(1); }\n }\n .ga-quick .ga-quick-x {\n opacity: 0;\n transform: scale(0.8);\n pointer-events: none;\n transition: opacity 160ms ease, transform 160ms ease;\n }\n .ga-quick:hover .ga-quick-x {\n opacity: 1;\n transform: scale(1);\n pointer-events: auto;\n }\n .ga-header-btn { background-color: transparent; transition: background-color 0.15s ease; }\n .ga-header-btn:hover { background-color: rgba(0, 0, 0, 0.06); }\n /* Menu popover items: shadcn-style hover highlight (bg-accent). --ga-hover is the\n theme's secondary color, set on the widget root. */\n .ga-menu-item { transition: background-color 0.15s ease; }\n .ga-menu-item:hover { background-color: var(--ga-hover, #f4f4f5); }\n /* Reset dialog buttons: destructive hover (red-700) + outline-cancel hover (bg-accent). */\n .ga-confirm-btn--danger:hover { background-color: #b91c1c; }\n .ga-confirm-btn--cancel:hover { background-color: var(--ga-hover, #f4f4f5); }\n /* Hovering the left logo section reveals the expand button (collapsed to 0 width\n by default), which pushes the logo/name group to the right for a slide-in.\n Scoped to .ga-header-left so hovering the right-side buttons never triggers it. */\n .ga-header-expand-btn {\n width: 0;\n min-width: 0;\n overflow: hidden;\n opacity: 0;\n transform: scale(0.85);\n pointer-events: none;\n transition: width 260ms cubic-bezier(0.16, 1, 0.3, 1), opacity 200ms ease, transform 200ms ease;\n }\n .ga-header-left:hover .ga-header-expand-btn,\n .ga-header-left:focus-within .ga-header-expand-btn {\n width: 32px;\n opacity: 1;\n transform: scale(1);\n pointer-events: auto;\n }\n /* Hovering the left logo section reveals the agent description (collapsed by default). */\n .ga-header-desc {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 260ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n .ga-header-left:hover .ga-header-desc,\n .ga-header-left:focus-within .ga-header-desc {\n grid-template-rows: 1fr;\n }\n .ga-header-desc-inner { overflow: hidden; min-height: 0; }\n .ga-header-desc-text { opacity: 0; transition: opacity 200ms ease; }\n .ga-header-left:hover .ga-header-desc-text,\n .ga-header-left:focus-within .ga-header-desc-text { opacity: 1; }\n @media (prefers-reduced-motion: reduce) {\n .ga-header-expand-btn, .ga-header-desc, .ga-header-desc-text { transition: none !important; }\n }\n @media (prefers-reduced-motion: reduce) {\n .ga-widget-in, .ga-widget-out { animation: none !important; }\n .ga-quick { animation: none !important; }\n }\n .grecaptcha-badge {\n display: none !important;\n visibility: hidden !important;\n position: absolute !important;\n width: 0 !important;\n height: 0 !important;\n overflow: hidden !important;\n opacity: 0 !important;\n pointer-events: none !important;\n }\n";
|
|
82
88
|
export {};
|
|
@@ -39,8 +39,9 @@ export function getContainerStyle(_a) {
|
|
|
39
39
|
? '700px'
|
|
40
40
|
: '600px',
|
|
41
41
|
minHeight: isFloatingDocked ? 0 : undefined,
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
// When docked, fill the floating wrapper so its (possibly expanded) width drives the size.
|
|
43
|
+
width: isFullscreen ? '100vw' : isFloatingDocked ? '100%' : '380px',
|
|
44
|
+
maxWidth: isFullscreen ? '100vw' : isFloatingDocked ? '100%' : '400px',
|
|
44
45
|
border: isFullscreen ? 'none' : '1px solid #e0e0e0',
|
|
45
46
|
borderRadius: isFullscreen ? '0' : '32px',
|
|
46
47
|
overflow: 'hidden',
|
|
@@ -57,49 +58,102 @@ export function getContainerStyle(_a) {
|
|
|
57
58
|
}
|
|
58
59
|
export function getHeaderStyle(t) {
|
|
59
60
|
return {
|
|
60
|
-
padding: '
|
|
61
|
+
padding: '12px 14px',
|
|
61
62
|
backgroundColor: t.secondaryColor,
|
|
62
63
|
color: '#111111',
|
|
63
64
|
fontWeight: 'bold',
|
|
64
65
|
display: 'flex',
|
|
65
66
|
justifyContent: 'space-between',
|
|
66
67
|
alignItems: 'center',
|
|
68
|
+
gap: '8px',
|
|
67
69
|
position: 'relative',
|
|
68
70
|
};
|
|
69
71
|
}
|
|
70
|
-
|
|
72
|
+
// Left header zone grows to fill (flex: 1) and holds the logo/name group +
|
|
73
|
+
// hover-revealed expand button; the right zone shrinks to its buttons.
|
|
74
|
+
export var headerLeftContainerStyle = {
|
|
75
|
+
flex: 1,
|
|
71
76
|
display: 'flex',
|
|
72
77
|
alignItems: 'center',
|
|
73
|
-
|
|
78
|
+
justifyContent: 'flex-start',
|
|
79
|
+
gap: '4px',
|
|
74
80
|
position: 'relative',
|
|
75
|
-
zIndex:
|
|
81
|
+
zIndex: 2,
|
|
82
|
+
minWidth: 0,
|
|
76
83
|
};
|
|
77
|
-
export var
|
|
78
|
-
|
|
79
|
-
|
|
84
|
+
export var headerRightContainerStyle = {
|
|
85
|
+
flex: '0 0 auto',
|
|
86
|
+
display: 'flex',
|
|
87
|
+
alignItems: 'center',
|
|
88
|
+
justifyContent: 'flex-end',
|
|
89
|
+
gap: '4px',
|
|
90
|
+
position: 'relative',
|
|
91
|
+
zIndex: 2,
|
|
80
92
|
};
|
|
81
|
-
|
|
93
|
+
// Left-aligned logo + name group. Slides right on header hover (see .ga-header CSS).
|
|
94
|
+
export var headerPillStyle = {
|
|
82
95
|
display: 'flex',
|
|
83
|
-
|
|
96
|
+
alignItems: 'center',
|
|
97
|
+
gap: '8px',
|
|
98
|
+
padding: 0,
|
|
99
|
+
maxWidth: '70%',
|
|
100
|
+
flexShrink: 1,
|
|
101
|
+
minWidth: 0,
|
|
102
|
+
position: 'relative',
|
|
103
|
+
// Above the header color-sweep backlight (zIndex 1) so it can't cover the title.
|
|
104
|
+
zIndex: 2,
|
|
105
|
+
};
|
|
106
|
+
export var logoStyle = {
|
|
107
|
+
width: '26px',
|
|
108
|
+
height: '26px',
|
|
109
|
+
borderRadius: '50%',
|
|
110
|
+
objectFit: 'cover',
|
|
111
|
+
flexShrink: 0,
|
|
84
112
|
};
|
|
85
|
-
|
|
113
|
+
// Full brand logo/wordmark shown instead of the small logo + title + description.
|
|
114
|
+
// Fixed height fills the header; width stays auto and clamps to the group's maxWidth.
|
|
115
|
+
export var brandLogoStyle = {
|
|
116
|
+
height: '30px',
|
|
117
|
+
width: 'auto',
|
|
118
|
+
maxWidth: '100%',
|
|
119
|
+
objectFit: 'contain',
|
|
120
|
+
display: 'block',
|
|
121
|
+
flexShrink: 1,
|
|
122
|
+
minWidth: 0,
|
|
123
|
+
};
|
|
124
|
+
export function getHeaderPillTitleStyle(fontFamily) {
|
|
86
125
|
return {
|
|
87
|
-
fontSize: '
|
|
88
|
-
fontWeight:
|
|
126
|
+
fontSize: '15px',
|
|
127
|
+
fontWeight: 700,
|
|
128
|
+
color: '#111111',
|
|
89
129
|
margin: 0,
|
|
130
|
+
whiteSpace: 'nowrap',
|
|
131
|
+
overflow: 'hidden',
|
|
132
|
+
textOverflow: 'ellipsis',
|
|
90
133
|
fontFamily: fontFamily,
|
|
91
134
|
};
|
|
92
135
|
}
|
|
93
|
-
export
|
|
136
|
+
export var headerPillTextColumnStyle = {
|
|
137
|
+
display: 'flex',
|
|
138
|
+
flexDirection: 'column',
|
|
139
|
+
justifyContent: 'center',
|
|
140
|
+
minWidth: 0,
|
|
141
|
+
};
|
|
142
|
+
export function getHeaderDescriptionTextStyle(fontFamily) {
|
|
94
143
|
return {
|
|
95
|
-
fontSize: '
|
|
96
|
-
fontWeight:
|
|
144
|
+
fontSize: '12px',
|
|
145
|
+
fontWeight: 400,
|
|
146
|
+
color: '#6b7280',
|
|
97
147
|
margin: 0,
|
|
148
|
+
paddingTop: '1px',
|
|
149
|
+
whiteSpace: 'nowrap',
|
|
150
|
+
overflow: 'hidden',
|
|
151
|
+
textOverflow: 'ellipsis',
|
|
98
152
|
fontFamily: fontFamily,
|
|
99
153
|
};
|
|
100
154
|
}
|
|
101
155
|
export var menuButtonStyle = {
|
|
102
|
-
backgroundColor:
|
|
156
|
+
// No inline backgroundColor here: it would override the `.ga-header-btn:hover` fill.
|
|
103
157
|
color: '#111111',
|
|
104
158
|
border: 'none',
|
|
105
159
|
borderRadius: '50%',
|
|
@@ -113,30 +167,36 @@ export var menuButtonStyle = {
|
|
|
113
167
|
position: 'relative',
|
|
114
168
|
zIndex: 1,
|
|
115
169
|
};
|
|
170
|
+
// Popover styling mirrors the web app's shadcn dropdown-menu: rounded-md (10px),
|
|
171
|
+
// 1px border, shadow-md, p-1 (4px) padding around rounded, hover-highlighted items.
|
|
116
172
|
export function getMenuPopupStyle(backgroundColor) {
|
|
117
173
|
return {
|
|
118
174
|
position: 'absolute',
|
|
119
175
|
top: '50px',
|
|
120
176
|
right: '15px',
|
|
121
177
|
backgroundColor: backgroundColor,
|
|
122
|
-
borderRadius: '
|
|
123
|
-
|
|
178
|
+
borderRadius: '10px',
|
|
179
|
+
border: '1px solid #e4e4e7',
|
|
180
|
+
boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)',
|
|
181
|
+
padding: '4px',
|
|
124
182
|
zIndex: 1000,
|
|
125
|
-
minWidth: '
|
|
183
|
+
minWidth: '160px',
|
|
126
184
|
overflow: 'visible',
|
|
127
185
|
};
|
|
128
186
|
}
|
|
187
|
+
// Menu item mirrors shadcn DropdownMenuItem: rounded-sm (8px), px-2 py-1.5, text-sm,
|
|
188
|
+
// hover:bg-accent. Hover fill comes from the --ga-hover CSS var (see .ga-menu-item).
|
|
129
189
|
export function getMenuItemStyle(t) {
|
|
130
190
|
return {
|
|
131
191
|
display: 'flex',
|
|
132
192
|
alignItems: 'center',
|
|
133
193
|
gap: '8px',
|
|
134
|
-
padding: '
|
|
194
|
+
padding: '6px 8px',
|
|
195
|
+
borderRadius: '8px',
|
|
135
196
|
color: t.textColor,
|
|
136
197
|
cursor: 'pointer',
|
|
137
198
|
fontSize: t.fontSize,
|
|
138
199
|
fontFamily: t.fontFamily,
|
|
139
|
-
borderBottom: '1px solid #f0f0f0',
|
|
140
200
|
};
|
|
141
201
|
}
|
|
142
202
|
export var chatContainerStyle = {
|
|
@@ -288,39 +348,50 @@ export function getConfirmOverlayStyle(showResetConfirm) {
|
|
|
288
348
|
left: 0,
|
|
289
349
|
right: 0,
|
|
290
350
|
bottom: 0,
|
|
291
|
-
|
|
351
|
+
// Matches the web app's AlertDialog overlay (bg-black/80).
|
|
352
|
+
backgroundColor: 'rgba(0, 0, 0, 0.8)',
|
|
292
353
|
zIndex: 10,
|
|
293
354
|
justifyContent: 'center',
|
|
294
355
|
alignItems: 'center',
|
|
356
|
+
padding: '16px',
|
|
295
357
|
};
|
|
296
358
|
}
|
|
359
|
+
// Dialog mirrors shadcn AlertDialogContent: rounded-lg (12px), p-6 (24px),
|
|
360
|
+
// 1px border, shadow-lg, left-aligned text.
|
|
297
361
|
export function getConfirmDialogStyle(t) {
|
|
298
362
|
return {
|
|
299
363
|
backgroundColor: t.backgroundColor,
|
|
300
|
-
padding: '
|
|
301
|
-
borderRadius: '
|
|
302
|
-
|
|
303
|
-
|
|
364
|
+
padding: '24px',
|
|
365
|
+
borderRadius: '12px',
|
|
366
|
+
border: '1px solid #e4e4e7',
|
|
367
|
+
boxShadow: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)',
|
|
368
|
+
maxWidth: '320px',
|
|
369
|
+
width: '100%',
|
|
370
|
+
textAlign: 'left',
|
|
304
371
|
fontFamily: t.fontFamily,
|
|
305
372
|
color: t.textColor,
|
|
306
373
|
};
|
|
307
374
|
}
|
|
308
375
|
export var confirmButtonsStyle = {
|
|
309
376
|
display: 'flex',
|
|
310
|
-
justifyContent: '
|
|
311
|
-
marginTop: '
|
|
312
|
-
gap: '
|
|
377
|
+
justifyContent: 'flex-end',
|
|
378
|
+
marginTop: '20px',
|
|
379
|
+
gap: '8px',
|
|
313
380
|
};
|
|
381
|
+
// Buttons mirror shadcn Button: pill (rounded-full), text-sm font-medium.
|
|
382
|
+
// Confirm = destructive (red-600), Cancel = outline. Hover via .ga-confirm-btn CSS.
|
|
314
383
|
export function getConfirmButtonStyle(isConfirm, t) {
|
|
315
384
|
return {
|
|
316
385
|
padding: '8px 16px',
|
|
317
|
-
backgroundColor: isConfirm ? '#
|
|
386
|
+
backgroundColor: isConfirm ? '#dc2626' : 'transparent',
|
|
318
387
|
color: isConfirm ? '#ffffff' : t.textColor,
|
|
319
|
-
border: 'none',
|
|
320
|
-
borderRadius: '
|
|
388
|
+
border: isConfirm ? 'none' : '1px solid #e4e4e7',
|
|
389
|
+
borderRadius: '9999px',
|
|
321
390
|
cursor: 'pointer',
|
|
322
391
|
fontFamily: t.fontFamily,
|
|
323
392
|
fontSize: t.fontSize,
|
|
393
|
+
fontWeight: 500,
|
|
394
|
+
transition: 'background-color 0.15s ease',
|
|
324
395
|
};
|
|
325
396
|
}
|
|
326
397
|
export function getContentCardStyle(backgroundColor) {
|
|
@@ -387,7 +458,7 @@ export function getChatPositionStyles(_a) {
|
|
|
387
458
|
}
|
|
388
459
|
}
|
|
389
460
|
export function getResponsiveDimensions(_a) {
|
|
390
|
-
var isFullscreen = _a.isFullscreen, mode = _a.mode;
|
|
461
|
+
var isFullscreen = _a.isFullscreen, mode = _a.mode, _b = _a.isExpanded, isExpanded = _b === void 0 ? false : _b;
|
|
391
462
|
var screenWidth = typeof window !== 'undefined' ? window.innerWidth : 1024;
|
|
392
463
|
var fallbackHeight = isFullscreen ? '100vh' : '60vh';
|
|
393
464
|
if (isFullscreen) {
|
|
@@ -400,7 +471,7 @@ export function getResponsiveDimensions(_a) {
|
|
|
400
471
|
if (screenWidth <= 768) {
|
|
401
472
|
return { width: '350px' };
|
|
402
473
|
}
|
|
403
|
-
return { width: '380px' };
|
|
474
|
+
return { width: isExpanded ? '540px' : '380px' };
|
|
404
475
|
}
|
|
405
476
|
if (screenWidth <= 480) {
|
|
406
477
|
return { width: 'calc(100vw - 40px)', height: fallbackHeight };
|
|
@@ -411,21 +482,32 @@ export function getResponsiveDimensions(_a) {
|
|
|
411
482
|
return { width: '380px', height: fallbackHeight };
|
|
412
483
|
}
|
|
413
484
|
export function getFloatingShellStyle(_a) {
|
|
414
|
-
var windowHeight = _a.windowHeight, offsetY = _a.offsetY, position = _a.position;
|
|
485
|
+
var windowHeight = _a.windowHeight, offsetY = _a.offsetY, position = _a.position, _b = _a.isExpanded, isExpanded = _b === void 0 ? false : _b;
|
|
415
486
|
var screenWidth = typeof window !== 'undefined' ? window.innerWidth : 1024;
|
|
416
487
|
var screenHeight = typeof window !== 'undefined' ? window.innerHeight : 1080;
|
|
417
488
|
var margin = 10;
|
|
418
|
-
|
|
489
|
+
// Expansion is width-focused; expanded uses most of the available height.
|
|
490
|
+
var usableHeight = Math.max(280, windowHeight - offsetY - margin * (isExpanded ? 2 : 10));
|
|
419
491
|
var maxHeight = usableHeight;
|
|
420
492
|
if (screenWidth >= 765 && screenHeight >= 1070) {
|
|
421
|
-
maxHeight = '60vh';
|
|
493
|
+
maxHeight = isExpanded ? '86vh' : '60vh';
|
|
422
494
|
}
|
|
423
495
|
return __assign({ display: 'flex', flexDirection: 'column', maxHeight: maxHeight, height: usableHeight }, (position === 'top-right' || position === 'top-left'
|
|
424
496
|
? { top: offsetY, bottom: 'auto' }
|
|
425
497
|
: { top: 'auto', bottom: offsetY }));
|
|
426
498
|
}
|
|
499
|
+
// Anchor the open/close scale animation to the corner nearest the launcher bubble.
|
|
500
|
+
function getTransformOrigin(position) {
|
|
501
|
+
switch (position) {
|
|
502
|
+
case 'bottom-left': return 'bottom left';
|
|
503
|
+
case 'top-right': return 'top right';
|
|
504
|
+
case 'top-left': return 'top left';
|
|
505
|
+
case 'bottom-right':
|
|
506
|
+
default: return 'bottom right';
|
|
507
|
+
}
|
|
508
|
+
}
|
|
427
509
|
export function getFloatingContainerStyle(p) {
|
|
428
|
-
return __assign({}, ((p.mode === 'fullscreen' ||
|
|
510
|
+
return __assign({ transformOrigin: getTransformOrigin(p.position) }, ((p.mode === 'fullscreen' || p.isFullscreen)
|
|
429
511
|
? {
|
|
430
512
|
position: 'fixed',
|
|
431
513
|
top: 0,
|
|
@@ -435,7 +517,9 @@ export function getFloatingContainerStyle(p) {
|
|
|
435
517
|
borderRadius: '0',
|
|
436
518
|
zIndex: 9999,
|
|
437
519
|
}
|
|
438
|
-
: __assign(__assign(__assign({}, getChatPositionStyles({ position: p.position, offsetX: p.offsetX, offsetY: p.offsetY })), getResponsiveDimensions({ isFullscreen: p.isFullscreen, mode: p.mode })), (p.mode === 'floating' && !p.isFullscreen ? getFloatingShellStyle({ windowHeight: p.windowHeight, offsetY: p.offsetY, position: p.position }) : {}))
|
|
520
|
+
: __assign(__assign(__assign(__assign({}, getChatPositionStyles({ position: p.position, offsetX: p.offsetX, offsetY: p.offsetY })), getResponsiveDimensions({ isFullscreen: p.isFullscreen, mode: p.mode, isExpanded: p.isExpanded })), (p.mode === 'floating' && !p.isFullscreen ? getFloatingShellStyle({ windowHeight: p.windowHeight, offsetY: p.offsetY, position: p.position, isExpanded: p.isExpanded }) : {})), {
|
|
521
|
+
// Smooth, simple ease for the maximize/minimize (expand/collapse) resize.
|
|
522
|
+
transition: 'width 280ms cubic-bezier(0.16, 1, 0.3, 1), height 280ms cubic-bezier(0.16, 1, 0.3, 1), max-height 280ms cubic-bezier(0.16, 1, 0.3, 1)' })));
|
|
439
523
|
}
|
|
440
|
-
export var CSS_KEYFRAMES = "\n @keyframes blink { 0% { opacity: 0.2; } 20% { opacity: 1; } 100% { opacity: 0.2; } }\n .ga-textarea-nosb {\n scrollbar-width: none;\n -ms-overflow-style: none;\n max-width: 100%;\n box-sizing: border-box;\n }\n .ga-textarea-nosb::-webkit-scrollbar { width: 0; height: 0; }\n .ga-input-disclaimer a {\n color: #9ca3af !important;\n text-decoration: underline;\n }\n .ga-input-disclaimer a:hover {\n color: #6b7280 !important;\n }\n @media (max-width: 768px) {\n .ga-textarea-nosb {\n font-size: 16px !important;\n }\n }\n @keyframes ga-backlight-sweep2 { 0% { transform: translateX(-35%); } 100% { transform: translateX(105%); } }\n @keyframes ga-backlight-pulse { 0%,100% { opacity: 0.7; } 50% { opacity: 1; } }\n @keyframes ga-think-change { 0% { opacity: 0; transform: translateY(4px); } 100% { opacity: 1; transform: translateY(0); } }\n .grecaptcha-badge {\n display: none !important;\n visibility: hidden !important;\n position: absolute !important;\n width: 0 !important;\n height: 0 !important;\n overflow: hidden !important;\n opacity: 0 !important;\n pointer-events: none !important;\n }\n";
|
|
441
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuQWdlbnRDaGF0U3R5bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0eWxlcy9nZW5BZ2VudENoYXRTdHlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFXQSxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQTRCO0lBQ3ZELE9BQU87UUFDTCxZQUFZLEVBQUUsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsWUFBWSxLQUFJLFNBQVM7UUFDOUMsZUFBZSxFQUFFLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLGVBQWUsS0FBSSxTQUFTO1FBQ3BELFNBQVMsRUFBRSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxTQUFTLEtBQUksU0FBUztRQUN4QyxVQUFVLEVBQUUsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsVUFBVSxLQUFJLDJCQUEyQjtRQUM1RCxRQUFRLEVBQUUsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsUUFBUSxLQUFJLE1BQU07UUFDbkMsY0FBYyxFQUFFLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLGNBQWMsS0FBSSxTQUFTO0tBQ25ELENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFXLEVBQUUsS0FBYTtJQUNsRCxJQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEMsSUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLElBQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFD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QUksRUFBRSxDQUFDLEdBQ3ZFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ3ZKLENBQ0osRUFDRDtBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsSUFBTSxhQUFhLEdBQUcsc3BDQWtDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWVQYXJhbXMge1xuICBwcmltYXJ5Q29sb3I6IHN0cmluZztcbiAgc2Vjb25kYXJ5Q29sb3I6IHN0cmluZztcbiAgYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG4gIHRleHRDb2xvcjogc3RyaW5nO1xuICBmb250RmFtaWx5OiBzdHJpbmc7XG4gIGZvbnRTaXplOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVGhlbWUodGhlbWU/OiBQYXJ0aWFsPFRoZW1lUGFyYW1zPik6IFRoZW1lUGFyYW1zIHtcbiAgcmV0dXJuIHtcbiAgICBwcmltYXJ5Q29sb3I6IHRoZW1lPy5wcmltYXJ5Q29sb3IgfHwgJyMyOTYyRkYnLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWU/LmJhY2tncm91bmRDb2xvciB8fCAnI2ZmZmZmZicsXG4gICAgdGV4dENvbG9yOiB0aGVtZT8udGV4dENvbG9yIHx8ICcjMDAwMDAwJyxcbiAgICBmb250RmFtaWx5OiB0aGVtZT8uZm9udEZhbWlseSB8fCAnUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZicsXG4gICAgZm9udFNpemU6IHRoZW1lPy5mb250U2l6ZSB8fCAnMTRweCcsXG4gICAgc2Vjb25kYXJ5Q29sb3I6IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNScsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoZXhUb1JnYmEoaGV4OiBzdHJpbmcsIGFscGhhOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCByID0gcGFyc2VJbnQoaGV4LnNsaWNlKDEsIDMpLCAxNik7XG4gIGNvbnN0IGcgPSBwYXJzZUludChoZXguc2xpY2UoMywgNSksIDE2KTtcbiAgY29uc3QgYiA9IHBhcnNlSW50KGhleC5zbGljZSg1LCA3KSwgMTYpO1xuICByZXR1cm4gYHJnYmEoJHtyfSwgJHtnfSwgJHtifSwgJHthbHBoYX0pYDtcbn1cblxuaW50ZXJmYWNlIENvbnRhaW5lclN0eWxlUGFyYW1zIHtcbiAgaXNGdWxsc2NyZWVuOiBib29sZWFuO1xuICBpc0Zsb2F0aW5nRG9ja2VkOiBib29sZWFuO1xuICB3aW5kb3dXaWR0aDogbnVtYmVyO1xuICB0OiBUaGVtZVBhcmFtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRhaW5lclN0eWxlKHsgaXNGdWxsc2NyZWVuLCBpc0Zsb2F0aW5nRG9ja2VkLCB3aW5kb3dXaWR0aCwgdCB9OiBDb250YWluZXJTdHlsZVBhcmFtcyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBoZWlnaHQ6IGlzRnVsbHNjcmVlbiA/IHVuZGVmaW5lZCA6ICcxMDAlJyxcbiAgICBtYXhIZWlnaHQ6IGlzRnVsbHNjcmVlblxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogaXNGbG9hdGluZ0RvY2tlZFxuICAgICAgICA/ICcxMDAlJ1xuICAgICAgICA6IHdpbmRvd1dpZHRoID4gNzY4XG4gICAgICAgICAgPyAnNzAwcHgnXG4gICAgICAgICAgOiAnNjAwcHgnLFxuICAgIG1pbkhlaWdodDogaXNGbG9hdGluZ0RvY2tlZCA/IDAgOiB1bmRlZmluZWQsXG4gICAgd2lkdGg6IGlzRnVsbHNjcmVlbiA/ICcxMDB2dycgOiAnMzgwcHgnLFxuICAgIG1heFdpZHRoOiBpc0Z1bGxzY3JlZW4gPyAnMTAwdncnIDogJzQwMHB4JyxcbiAgICBib3JkZXI6IGlzRnVsbHNjcmVlbiA/ICdub25lJyA6ICcxcHggc29saWQgI2UwZTBlMCcsXG4gICAgYm9yZGVyUmFkaXVzOiBpc0Z1bGxzY3JlZW4gPyAnMCcgOiAnMzJweCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIGJhY2tncm91bmRDb2xvcjogdC5zZWNvbmRhcnlDb2xvcixcbiAgICBmb250RmFtaWx5OiB0LmZvbnRGYW1pbHksXG4gICAgYm94U2hhZG93OiBpc0Z1bGxzY3JlZW4gPyAnbm9uZScgOiBcIjAgNHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjIpXCIsXG4gICAgcG9zaXRpb246IGlzRnVsbHNjcmVlbiA/ICdmaXhlZCcgOiAncmVsYXRpdmUnLFxuICAgIHRvcDogaXNGdWxsc2NyZWVuID8gMCA6IHVuZGVmaW5lZCxcbiAgICBsZWZ0OiBpc0Z1bGxzY3JlZW4gPyAwIDogdW5kZWZpbmVkLFxuICAgIHJpZ2h0OiBpc0Z1bGxzY3JlZW4gPyAwIDogdW5kZWZpbmVkLFxuICAgIGJvdHRvbTogaXNGdWxsc2NyZWVuID8gJ2VudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tLCAwcHgpJyA6IHVuZGVmaW5lZCxcbiAgICB6SW5kZXg6IGlzRnVsbHNjcmVlbiA/IDk5OTkgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWFkZXJTdHlsZSh0OiBUaGVtZVBhcmFtcyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIHBhZGRpbmc6ICcxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHQuc2Vjb25kYXJ5Q29sb3IsXG4gICAgY29sb3I6ICcjMTExMTExJyxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBsb2dvQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIGdhcDogJzEwcHgnLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgekluZGV4OiAxLFxufTtcblxuZXhwb3J0IGNvbnN0IGxvZ29TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgd2lkdGg6ICcyOHB4JyxcbiAgaGVpZ2h0OiAnMjhweCcsXG59O1xuXG5leHBvcnQgY29uc3QgaGVhZGVyVGl0bGVDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWFkZXJUaXRsZVN0eWxlKGZvbnRGYW1pbHk6IHN0cmluZyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIG1hcmdpbjogMCxcbiAgICBmb250RmFtaWx5LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyU3VidGl0bGVTdHlsZShmb250RmFtaWx5OiBzdHJpbmcpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHtcbiAgcmV0dXJuIHtcbiAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxuICAgIG1hcmdpbjogMCxcbiAgICBmb250RmFtaWx5LFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgbWVudUJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIGNvbG9yOiAnIzExMTExMScsXG4gIGJvcmRlcjogJ25vbmUnLFxuICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICB3aWR0aDogJzMycHgnLFxuICBoZWlnaHQ6ICczMnB4JyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgb3V0bGluZTogJ25vbmUnLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgekluZGV4OiAxLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbnVQb3B1cFN0eWxlKGJhY2tncm91bmRDb2xvcjogc3RyaW5nKTogUmVhY3QuQ1NTUHJvcGVydGllcyB7XG4gIHJldHVybiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAnNTBweCcsXG4gICAgcmlnaHQ6ICcxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICBib3hTaGFkb3c6ICcwIDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKScsXG4gICAgekluZGV4OiAxMDAwLFxuICAgIG1pbldpZHRoOiAnMTUwcHgnLFxuICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW51SXRlbVN0eWxlKHQ6IFRoZW1lUGFyYW1zKTogUmVhY3QuQ1NTUHJvcGVydGllcyB7XG4gIHJldHVybiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogJzhweCcsXG4gICAgcGFkZGluZzogJzEwcHggMTVweCcsXG4gICAgY29sb3I6IHQudGV4dENvbG9yLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGZvbnRTaXplOiB0LmZvbnRTaXplLFxuICAgIGZvbnRGYW1pbHk6IHQuZm9udEZhbWlseSxcbiAgICBib3JkZXJCb3R0b206ICcxcHggc29saWQgI2YwZjBmMCcsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBjaGF0Q29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIGZsZXg6IDEsXG4gIG1pbkhlaWdodDogMCxcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gIHBhZGRpbmc6ICcxNXB4JyxcbiAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxufTtcblxuZXhwb3J0IGNvbnN0IGlucHV0Q29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgcGFkZGluZzogJzEycHggMTVweCcsXG4gIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgZ2FwOiAnOHB4JyxcbiAgZmxleFNocmluazogMCxcbiAgb3ZlcmZsb3dYOiAnaGlkZGVuJyxcbiAgbWluV2lkdGg6IDAsXG59O1xuXG5leHBvcnQgY29uc3QgaW5wdXRXcmFwcGVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleDogMSxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICBib3JkZXJSYWRpdXM6ICcyNHB4JyxcbiAgYm9yZGVyOiAnMXB4IHNvbGlkICNlNWU3ZWInLFxuICBwYWRkaW5nOiAnMCAxMnB4JyxcbiAgbWluSGVpZ2h0OiAnNTBweCcsXG4gIGJveFNoYWRvdzogJzAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDYpJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gIG1pbldpZHRoOiAwLFxufTtcblxuaW50ZXJmYWNlIFRleHRBcmVhU3R5bGVQYXJhbXMge1xuICB0ZXh0QXJlYUZvbnRTaXplOiBzdHJpbmc7XG4gIGZvbnRGYW1pbHk6IHN0cmluZztcbiAgdGV4dEFyZWFMaW5lSGVpZ2h0OiBudW1iZXI7XG4gIHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZDogbnVtYmVyO1xuICB0ZXh0Q29sb3I6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRBcmVhU3R5bGUocDogVGV4dEFyZWFTdHlsZVBhcmFtcyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIGZsZXg6IDEsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgZm9udFNpemU6IHAudGV4dEFyZWFGb250U2l6ZSxcbiAgICBmb250RmFtaWx5OiBwLmZvbnRGYW1pbHksXG4gICAgcGFkZGluZzogJzEwcHgnLFxuICAgIHBhZGRpbmdSaWdodDogJzQ2cHgnLFxuICAgIGNvbG9yOiBwLnRleHRDb2xvcixcbiAgICByZXNpemU6ICdub25lJyxcbiAgICBsaW5lSGVpZ2h0OiBgJHtwLnRleHRBcmVhTGluZUhlaWdodH1weGAsXG4gICAgbWF4SGVpZ2h0OiBgJHtwLnRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZH1weGAsXG4gICAgb3ZlcmZsb3dZOiAnaGlkZGVuJyxcbiAgICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAgIG1pbldpZHRoOiAwLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIH07XG59XG5cbi8qKiBQbGFjZWhvbGRlciBoaW50IHNob3duIGluIHRoZSB2b2ljZS1vbmx5IGZvb3RlciAoXCJUYXAgdG8gc3RhcnQgYSB2b2ljZSBjb252ZXJzYXRpb25cIikuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGl2ZVZvaWNlSGludFN0eWxlKGZvbnRTaXplOiBzdHJpbmcsIGZvbnRGYW1pbHk6IHN0cmluZyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIGZsZXg6IDEsXG4gICAgY29sb3I6ICcjOWNhM2FmJyxcbiAgICBmb250U2l6ZSxcbiAgICBmb250RmFtaWx5LFxuICAgIHBhZGRpbmdSaWdodDogNDQsXG4gICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBhdHRhY2hCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICBib3JkZXI6ICdub25lJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgb3V0bGluZTogJ25vbmUnLFxuICBjb2xvcjogJyM3NTc1NzUnLFxuICBwYWRkaW5nOiAwLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbmRCdXR0b25TdHlsZShwcmltYXJ5Q29sb3I6IHN0cmluZyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIGJhY2tncm91bmRDb2xvcjogcHJpbWFyeUNvbG9yLFxuICAgIGNvbG9yOiAnI2ZmZmZmZicsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICB3aWR0aDogJzM2cHgnLFxuICAgIGhlaWdodDogJzM2cHgnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgYm94U2hhZG93OiAnMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wOCknLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3Qgc2VuZEJ1dHRvbkRpc2FibGVkU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIGJhY2tncm91bmRDb2xvcjogJyNkMWQ1ZGInLFxuICBjdXJzb3I6ICdub3QtYWxsb3dlZCcsXG4gIG9wYWNpdHk6IDAuOCxcbn07XG5cbmV4cG9ydCBjb25zdCByaWdodEFjdGlvbkNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgcmlnaHQ6ICc0cHgnLFxuICB0b3A6ICc1MCUnLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBvc3NpYmxlUXVlcmllc0NvbnRhaW5lclN0eWxlKGZvbnRGYW1pbHk6IHN0cmluZyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBnYXA6ICc4cHgnLFxuICAgIHBhZGRpbmc6ICcwJyxcbiAgICBwYWRkaW5nTGVmdDogJzI4cHgnLFxuICAgIHBhZGRpbmdSaWdodDogJzI4cHgnLFxuICAgIG1hcmdpblRvcDogJzVweCcsXG4gICAgbWFyZ2luQm90dG9tOiAnMTVweCcsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBmb250RmFtaWx5LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UXVlcnlCdXR0b25TdHlsZSh0OiBUaGVtZVBhcmFtcyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIHBhZGRpbmc6ICcxMnB4IDE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogdC5zZWNvbmRhcnlDb2xvcixcbiAgICBjb2xvcjogdC50ZXh0Q29sb3IsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNnB4JyxcbiAgICBmb250U2l6ZTogdC5mb250U2l6ZSxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcbiAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIG1heFdpZHRoOiAnMjQwcHgnLFxuICAgIGZvbnRGYW1pbHk6IHQuZm9udEZhbWlseSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpcm1PdmVybGF5U3R5bGUoc2hvd1Jlc2V0Q29uZmlybTogYm9vbGVhbik6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIGRpc3BsYXk6IHNob3dSZXNldENvbmZpcm0gPyAnZmxleCcgOiAnbm9uZScsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC41KScsXG4gICAgekluZGV4OiAxMCxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maXJtRGlhbG9nU3R5bGUodDogVGhlbWVQYXJhbXMpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHtcbiAgcmV0dXJuIHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHQuYmFja2dyb3VuZENvbG9yLFxuICAgIHBhZGRpbmc6ICcyMHB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIG1heFdpZHRoOiAnMzAwcHgnLFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgZm9udEZhbWlseTogdC5mb250RmFtaWx5LFxuICAgIGNvbG9yOiB0LnRleHRDb2xvcixcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbmZpcm1CdXR0b25zU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICBtYXJnaW5Ub3A6ICcxNXB4JyxcbiAgZ2FwOiAnMTBweCcsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlybUJ1dHRvblN0eWxlKGlzQ29uZmlybTogYm9vbGVhbiwgdDogVGhlbWVQYXJhbXMpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHtcbiAgcmV0dXJuIHtcbiAgICBwYWRkaW5nOiAnOHB4IDE2cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogaXNDb25maXJtID8gJyNGNDQzMzYnIDogJyNlMGUwZTAnLFxuICAgIGNvbG9yOiBpc0NvbmZpcm0gPyAnI2ZmZmZmZicgOiB0LnRleHRDb2xvcixcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGZvbnRGYW1pbHk6IHQuZm9udEZhbWlseSxcbiAgICBmb250U2l6ZTogdC5mb250U2l6ZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRlbnRDYXJkU3R5bGUoYmFja2dyb3VuZENvbG9yOiBzdHJpbmcpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHtcbiAgcmV0dXJuIHtcbiAgICBmbGV4OiAxLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogMjQsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6IDI0LFxuICAgIGJveFNoYWRvdzogJzAgLTJweCA2cHggcmdiYSgwLDAsMCwwLjAzKScsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgekluZGV4OiAyLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBtaW5IZWlnaHQ6IDAsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNjbGFpbWVyU3R5bGUoZm9udEZhbWlseTogc3RyaW5nKTogUmVhY3QuQ1NTUHJvcGVydGllcyB7XG4gIHJldHVybiB7XG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICBjb2xvcjogJyM5Y2EzYWYnLFxuICAgIG1hcmdpbjogJzEycHggNHB4IDJweCA0cHgnLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG59XG5cbmludGVyZmFjZSBQb3NpdGlvblBhcmFtcyB7XG4gIHBvc2l0aW9uOiBzdHJpbmc7XG4gIG9mZnNldFg6IG51bWJlcjtcbiAgb2Zmc2V0WTogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9zaXRpb25TdHlsZXMoeyBwb3NpdGlvbiwgb2Zmc2V0WCwgb2Zmc2V0WSB9OiBQb3NpdGlvblBhcmFtcyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICBjb25zdCBiYXNlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgIHpJbmRleDogMTAwMCxcbiAgfTtcblxuICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogb2Zmc2V0WSwgcmlnaHQ6IG9mZnNldFggfTtcbiAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IG9mZnNldFksIGxlZnQ6IG9mZnNldFggfTtcbiAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdG9wOiBvZmZzZXRZLCByaWdodDogb2Zmc2V0WCB9O1xuICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogb2Zmc2V0WSwgbGVmdDogb2Zmc2V0WCB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IG9mZnNldFksIHJpZ2h0OiBvZmZzZXRYIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoYXRQb3NpdGlvblN0eWxlcyh7IHBvc2l0aW9uLCBvZmZzZXRYLCBvZmZzZXRZIH06IFBvc2l0aW9uUGFyYW1zKTogUmVhY3QuQ1NTUHJvcGVydGllcyB7XG4gIGNvbnN0IGJhc2U6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgYm9yZGVyUmFkaXVzOiAnMzJweCcsXG4gICAgekluZGV4OiAxMDA0LFxuICB9O1xuXG4gIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiBvZmZzZXRZLCByaWdodDogb2Zmc2V0WCB9O1xuICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogb2Zmc2V0WSwgbGVmdDogb2Zmc2V0WCB9O1xuICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCB0b3A6IG9mZnNldFksIHJpZ2h0OiBvZmZzZXRYIH07XG4gICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdG9wOiBvZmZzZXRZLCBsZWZ0OiBvZmZzZXRYIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogb2Zmc2V0WSwgcmlnaHQ6IG9mZnNldFggfTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgUmVzcG9uc2l2ZURpbWVuc2lvblBhcmFtcyB7XG4gIGlzRnVsbHNjcmVlbjogYm9vbGVhbjtcbiAgbW9kZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzcG9uc2l2ZURpbWVuc2lvbnMoeyBpc0Z1bGxzY3JlZW4sIG1vZGUgfTogUmVzcG9uc2l2ZURpbWVuc2lvblBhcmFtcyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICBjb25zdCBzY3JlZW5XaWR0aCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmlubmVyV2lkdGggOiAxMDI0O1xuICBjb25zdCBmYWxsYmFja0hlaWdodCA9IGlzRnVsbHNjcmVlbiA/ICcxMDB2aCcgOiAnNjB2aCc7XG5cbiAgaWYgKGlzRnVsbHNjcmVlbikge1xuICAgIHJldHVybiB7IHdpZHRoOiAnMTAwdncnLCBoZWlnaHQ6IGZhbGxiYWNrSGVpZ2h0LCBib3JkZXJSYWRpdXM6ICcwJyB9O1xuICB9XG5cbiAgaWYgKG1vZGUgPT09ICdmbG9hdGluZycpIHtcbiAgICBpZiAoc2NyZWVuV2lkdGggPD0gNDgwKSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogJ2NhbGMoMTAwdncgLSA0MHB4KScgfTtcbiAgICB9XG4gICAgaWYgKHNjcmVlbldpZHRoIDw9IDc2OCkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICczNTBweCcgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgd2lkdGg6ICczODBweCcgfTtcbiAgfVxuXG4gIGlmIChzY3JlZW5XaWR0aCA8PSA0ODApIHtcbiAgICByZXR1cm4geyB3aWR0aDogJ2NhbGMoMTAwdncgLSA0MHB4KScsIGhlaWdodDogZmFsbGJhY2tIZWlnaHQgfTtcbiAgfVxuICBpZiAoc2NyZWVuV2lkdGggPD0gNzY4KSB7XG4gICAgcmV0dXJuIHsgd2lkdGg6ICczNTBweCcsIGhlaWdodDogZmFsbGJhY2tIZWlnaHQgfTtcbiAgfVxuXG4gIHJldHVybiB7IHdpZHRoOiAnMzgwcHgnLCBoZWlnaHQ6IGZhbGxiYWNrSGVpZ2h0IH07XG59XG5cbmludGVyZmFjZSBGbG9hdGluZ1NoZWxsUGFyYW1zIHtcbiAgd2luZG93SGVpZ2h0OiBudW1iZXI7XG4gIG9mZnNldFk6IG51bWJlcjtcbiAgcG9zaXRpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZsb2F0aW5nU2hlbGxTdHlsZSh7IHdpbmRvd0hlaWdodCwgb2Zmc2V0WSwgcG9zaXRpb24gfTogRmxvYXRpbmdTaGVsbFBhcmFtcyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICBjb25zdCBzY3JlZW5XaWR0aCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmlubmVyV2lkdGggOiAxMDI0O1xuICBjb25zdCBzY3JlZW5IZWlnaHQgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lckhlaWdodCA6IDEwODA7XG4gIGNvbnN0IG1hcmdpbiA9IDEwO1xuICBjb25zdCB1c2FibGVIZWlnaHQgPSBNYXRoLm1heCgyODAsIHdpbmRvd0hlaWdodCAtIG9mZnNldFkgLSBtYXJnaW4gKiAxMCk7XG4gIGxldCBtYXhIZWlnaHQ6IG51bWJlciB8IHN0cmluZyA9IHVzYWJsZUhlaWdodDtcblxuICBpZiAoc2NyZWVuV2lkdGggPj0gNzY1ICYmIHNjcmVlbkhlaWdodCA+PSAxMDcwKSB7XG4gICAgbWF4SGVpZ2h0ID0gJzYwdmgnO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgbWF4SGVpZ2h0OiBtYXhIZWlnaHQsXG4gICAgaGVpZ2h0OiB1c2FibGVIZWlnaHQsXG4gICAgLi4uKHBvc2l0aW9uID09PSAndG9wLXJpZ2h0JyB8fCBwb3NpdGlvbiA9PT0gJ3RvcC1sZWZ0J1xuICAgICAgPyB7IHRvcDogb2Zmc2V0WSwgYm90dG9tOiAnYXV0bycgfVxuICAgICAgOiB7IHRvcDogJ2F1dG8nLCBib3R0b206IG9mZnNldFkgfSksXG4gIH07XG59XG5cbmludGVyZmFjZSBGbG9hdGluZ0NvbnRhaW5lclBhcmFtcyB7XG4gIG1vZGU6IHN0cmluZztcbiAgaXNGdWxsc2NyZWVuOiBib29sZWFuO1xuICB3aW5kb3dXaWR0aDogbnVtYmVyO1xuICB3aW5kb3dIZWlnaHQ6IG51bWJlcjtcbiAgcG9zaXRpb246IHN0cmluZztcbiAgb2Zmc2V0WDogbnVtYmVyO1xuICBvZmZzZXRZOiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbG9hdGluZ0NvbnRhaW5lclN0eWxlKHA6IEZsb2F0aW5nQ29udGFpbmVyUGFyYW1zKTogUmVhY3QuQ1NTUHJvcGVydGllcyB7XG4gIHJldHVybiB7XG4gICAgLi4uKChwLm1vZGUgPT09ICdmdWxsc2NyZWVuJyB8fCAocC5pc0Z1bGxzY3JlZW4gJiYgcC53aW5kb3dXaWR0aCA8PSA3NjgpKVxuICAgICAgPyB7XG4gICAgICAgICAgcG9zaXRpb246ICdmaXhlZCcgYXMgY29uc3QsXG4gICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgYm90dG9tOiAnZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20sIDBweCknLFxuICAgICAgICAgIGJvcmRlclJhZGl1czogJzAnLFxuICAgICAgICAgIHpJbmRleDogOTk5OSxcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgLi4uZ2V0Q2hhdFBvc2l0aW9uU3R5bGVzKHsgcG9zaXRpb246IHAucG9zaXRpb24sIG9mZnNldFg6IHAub2Zmc2V0WCwgb2Zmc2V0WTogcC5vZmZzZXRZIH0pLFxuICAgICAgICAgIC4uLmdldFJlc3BvbnNpdmVEaW1lbnNpb25zKHsgaXNGdWxsc2NyZWVuOiBwLmlzRnVsbHNjcmVlbiwgbW9kZTogcC5tb2RlIH0pLFxuICAgICAgICAgIC4uLihwLm1vZGUgPT09ICdmbG9hdGluZycgJiYgIXAuaXNGdWxsc2NyZWVuID8gZ2V0RmxvYXRpbmdTaGVsbFN0eWxlKHsgd2luZG93SGVpZ2h0OiBwLndpbmRvd0hlaWdodCwgb2Zmc2V0WTogcC5vZmZzZXRZLCBwb3NpdGlvbjogcC5wb3NpdGlvbiB9KSA6IHt9KSxcbiAgICAgICAgfVxuICAgICksXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBDU1NfS0VZRlJBTUVTID0gYFxuICBAa2V5ZnJhbWVzIGJsaW5rIHsgMCUgeyBvcGFjaXR5OiAwLjI7IH0gMjAlIHsgb3BhY2l0eTogMTsgfSAxMDAlIHsgb3BhY2l0eTogMC4yOyB9IH1cbiAgLmdhLXRleHRhcmVhLW5vc2Ige1xuICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTtcbiAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IG5vbmU7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIH1cbiAgLmdhLXRleHRhcmVhLW5vc2I6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgd2lkdGg6IDA7IGhlaWdodDogMDsgfVxuICAuZ2EtaW5wdXQtZGlzY2xhaW1lciBhIHtcbiAgICBjb2xvcjogIzljYTNhZiAhaW1wb3J0YW50O1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB9XG4gIC5nYS1pbnB1dC1kaXNjbGFpbWVyIGE6aG92ZXIge1xuICAgIGNvbG9yOiAjNmI3MjgwICFpbXBvcnRhbnQ7XG4gIH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLmdhLXRleHRhcmVhLW5vc2Ige1xuICAgICAgZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG4gIEBrZXlmcmFtZXMgZ2EtYmFja2xpZ2h0LXN3ZWVwMiB7IDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0zNSUpOyB9IDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTA1JSk7IH0gfVxuICBAa2V5ZnJhbWVzIGdhLWJhY2tsaWdodC1wdWxzZSB7IDAlLDEwMCUgeyBvcGFjaXR5OiAwLjc7IH0gNTAlIHsgb3BhY2l0eTogMTsgfSB9XG4gIEBrZXlmcmFtZXMgZ2EtdGhpbmstY2hhbmdlIHsgMCUgeyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNHB4KTsgfSAxMDAlIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9IH1cbiAgLmdyZWNhcHRjaGEtYmFkZ2Uge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDtcbiAgICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogMCAhaW1wb3J0YW50O1xuICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICBvcGFjaXR5OiAwICFpbXBvcnRhbnQ7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxuYDtcbiJdfQ==
|
|
524
|
+
export var CSS_KEYFRAMES = "\n @keyframes blink { 0% { opacity: 0.2; } 20% { opacity: 1; } 100% { opacity: 0.2; } }\n .ga-textarea-nosb {\n scrollbar-width: none;\n -ms-overflow-style: none;\n max-width: 100%;\n box-sizing: border-box;\n }\n .ga-textarea-nosb::-webkit-scrollbar { width: 0; height: 0; }\n .ga-input-disclaimer a {\n color: #9ca3af !important;\n text-decoration: underline;\n }\n .ga-input-disclaimer a:hover {\n color: #6b7280 !important;\n }\n @media (max-width: 768px) {\n .ga-textarea-nosb {\n font-size: 16px !important;\n }\n }\n @keyframes ga-backlight-sweep2 { 0% { transform: translateX(-35%); } 100% { transform: translateX(105%); } }\n @keyframes ga-backlight-pulse { 0%,100% { opacity: 0.7; } 50% { opacity: 1; } }\n @keyframes ga-think-change { 0% { opacity: 0; transform: translateY(4px); } 100% { opacity: 1; transform: translateY(0); } }\n @keyframes ga-widget-in {\n from { opacity: 0; transform: translateY(16px) scale(0.96); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n @keyframes ga-widget-out {\n from { opacity: 1; transform: translateY(0) scale(1); }\n to { opacity: 0; transform: translateY(16px) scale(0.96); }\n }\n /* fill backwards (not both): keep the entrance-from state, but drop the transform at rest so it\n does not become a containing block for the inner fixed-position fullscreen panel. */\n .ga-widget-in { animation: ga-widget-in 260ms cubic-bezier(0.16, 1, 0.3, 1) backwards; }\n .ga-widget-out { animation: ga-widget-out 200ms cubic-bezier(0.4, 0, 1, 1) both; }\n @keyframes ga-bubble-in {\n from { opacity: 0; transform: scale(0.8); }\n to { opacity: 1; transform: scale(1); }\n }\n @keyframes ga-quickinput-in {\n from { opacity: 0; transform: scale(0.94); }\n to { opacity: 1; transform: scale(1); }\n }\n .ga-quick .ga-quick-x {\n opacity: 0;\n transform: scale(0.8);\n pointer-events: none;\n transition: opacity 160ms ease, transform 160ms ease;\n }\n .ga-quick:hover .ga-quick-x {\n opacity: 1;\n transform: scale(1);\n pointer-events: auto;\n }\n .ga-header-btn { background-color: transparent; transition: background-color 0.15s ease; }\n .ga-header-btn:hover { background-color: rgba(0, 0, 0, 0.06); }\n /* Menu popover items: shadcn-style hover highlight (bg-accent). --ga-hover is the\n theme's secondary color, set on the widget root. */\n .ga-menu-item { transition: background-color 0.15s ease; }\n .ga-menu-item:hover { background-color: var(--ga-hover, #f4f4f5); }\n /* Reset dialog buttons: destructive hover (red-700) + outline-cancel hover (bg-accent). */\n .ga-confirm-btn--danger:hover { background-color: #b91c1c; }\n .ga-confirm-btn--cancel:hover { background-color: var(--ga-hover, #f4f4f5); }\n /* Hovering the left logo section reveals the expand button (collapsed to 0 width\n by default), which pushes the logo/name group to the right for a slide-in.\n Scoped to .ga-header-left so hovering the right-side buttons never triggers it. */\n .ga-header-expand-btn {\n width: 0;\n min-width: 0;\n overflow: hidden;\n opacity: 0;\n transform: scale(0.85);\n pointer-events: none;\n transition: width 260ms cubic-bezier(0.16, 1, 0.3, 1), opacity 200ms ease, transform 200ms ease;\n }\n .ga-header-left:hover .ga-header-expand-btn,\n .ga-header-left:focus-within .ga-header-expand-btn {\n width: 32px;\n opacity: 1;\n transform: scale(1);\n pointer-events: auto;\n }\n /* Hovering the left logo section reveals the agent description (collapsed by default). */\n .ga-header-desc {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 260ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n .ga-header-left:hover .ga-header-desc,\n .ga-header-left:focus-within .ga-header-desc {\n grid-template-rows: 1fr;\n }\n .ga-header-desc-inner { overflow: hidden; min-height: 0; }\n .ga-header-desc-text { opacity: 0; transition: opacity 200ms ease; }\n .ga-header-left:hover .ga-header-desc-text,\n .ga-header-left:focus-within .ga-header-desc-text { opacity: 1; }\n @media (prefers-reduced-motion: reduce) {\n .ga-header-expand-btn, .ga-header-desc, .ga-header-desc-text { transition: none !important; }\n }\n @media (prefers-reduced-motion: reduce) {\n .ga-widget-in, .ga-widget-out { animation: none !important; }\n .ga-quick { animation: none !important; }\n }\n .grecaptcha-badge {\n display: none !important;\n visibility: hidden !important;\n position: absolute !important;\n width: 0 !important;\n height: 0 !important;\n overflow: hidden !important;\n opacity: 0 !important;\n pointer-events: none !important;\n }\n";
|
|
525
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuQWdlbnRDaGF0U3R5bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0eWxlcy9nZW5BZ2VudENoYXRTdHlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFXQSxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQTRCO0lBQ3ZELE9BQU87UUFDTCxZQUFZLEVBQUUsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsWUFBWSxLQUFJLFNBQVM7UUFDOUMsZUFBZSxFQUFFLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLGVBQWUsS0FBSSxTQUFTO1FBQ3BELFNBQVMsRUFBRSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxTQUFTLEtBQUksU0FBUztRQUN4QyxVQUFVLEVBQUUsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsVUFBVSxLQUFJLDJCQUEyQjtRQUM1RCxRQUFRLEVBQUUsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsUUFBUSxLQUFJLE1BQU07UUFDbkMsY0FBYyxFQUFFLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLGNBQWMsS0FBSSxTQUFTO0tBQ25ELENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFXLEVBQUUsS0FBYTtJQUNsRCxJQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEMsSUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLElBQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4QyxPQUFPLGVBQVEsQ0FBQyxlQUFLLENBQUMsZUFBSyxDQUFDLGVBQUssS0FBSyxNQUFHLENBQUM7QUFDNUMsQ0FBQztBQVNELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxFQUF3RTtRQUF0RSxZQUFZLGtCQUFBLEVBQUUsZ0JBQWdCLHNCQUFBLEVBQUUsV0FBVyxpQkFBQSxFQUFFLENBQUMsT0FBQTtJQUNoRixPQUFPO1FBQ0wsT0FBTyxFQUFFLE1BQU07UUFDZixhQUFhLEVBQUUsUUFBUTtRQUN2QixNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDekMsU0FBUyxFQUFFLFlBQVk7WUFDckIsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsZ0JBQWdCO2dCQUNoQixDQUFDLENBQUMsTUFBTTtnQkFDUixDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUc7b0JBQ2pCLENBQUMsQ0FBQyxPQUFPO29CQUNULENBQUMsQ0FBQyxPQUFPO1FBQ2YsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDM0MsMkZBQTJGO1FBQzNGLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTztRQUNuRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU87UUFDdEUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7UUFDbkQsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNO1FBQ3pDLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLGVBQWUsRUFBRSxDQUFDLENBQUMsY0FBYztRQUNqQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVU7UUFDeEIsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQywrQkFBK0I7UUFDbEUsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVO1FBQzdDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNqQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDbEMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ25DLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ3JFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUztLQUN4QyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsQ0FBYztJQUMzQyxPQUFPO1FBQ0wsT0FBTyxFQUFFLFdBQVc7UUFDcEIsZUFBZSxFQUFFLENBQUMsQ0FBQyxjQUFjO1FBQ2pDLEtBQUssRUFBRSxTQUFTO1FBQ2hCLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE9BQU8sRUFBRSxNQUFNO1FBQ2YsY0FBYyxFQUFFLGVBQWU7UUFDL0IsVUFBVSxFQUFFLFFBQVE7UUFDcEIsR0FBRyxFQUFFLEtBQUs7UUFDVixRQUFRLEVBQUUsVUFBVTtLQUNyQixDQUFDO0FBQ0osQ0FBQztBQUVELDJFQUEyRTtBQUMzRSx1RUFBdUU7QUFDdkUsTUFBTSxDQUFDLElBQU0sd0JBQXdCLEdBQXdCO0lBQzNELElBQUksRUFBRSxDQUFDO0lBQ1AsT0FBTyxFQUFFLE1BQU07SUFDZixVQUFVLEVBQUUsUUFBUTtJQUNwQixjQUFjLEVBQUUsWUFBWTtJQUM1QixHQUFHLEVBQUUsS0FBSztJQUNWLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLE1BQU0sRUFBRSxDQUFDO0lBQ1QsUUFBUSxFQUFFLENBQUM7Q0FDWixDQUFDO0FBRUYsTUFBTSxDQUFDLElBQU0seUJBQXlCLEdBQXdCO0lBQzVELElBQUksRUFBRSxVQUFVO0lBQ2hCLE9BQU8sRUFBRSxNQUFNO0lBQ2YsVUFBVSxFQUFFLFFBQVE7SUFDcEIsY0FBYyxFQUFFLFVBQVU7SUFDMUIsR0FBRyxFQUFFLEtBQUs7SUFDVixRQUFRLEVBQUUsVUFBVTtJQUNwQixNQUFNLEVBQUUsQ0FBQztDQUNWLENBQUM7QUFFRixxRkFBcUY7QUFDckYsTUFBTSxDQUFDLElBQU0sZUFBZSxHQUF3QjtJQUNsRCxPQUFPLEVBQUUsTUFBTTtJQUNmLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLEdBQUcsRUFBRSxLQUFLO0lBQ1YsT0FBTyxFQUFFLENBQUM7SUFDVixRQUFRLEVBQUUsS0FBSztJQUNmLFVBQVUsRUFBRSxDQUFDO0lBQ2IsUUFBUSxFQUFFLENBQUM7SUFDWCxRQUFRLEVBQUUsVUFBVTtJQUNwQixpRkFBaUY7SUFDakYsTUFBTSxFQUFFLENBQUM7Q0FDVixDQUFDO0FBRUYsTUFBTSxDQUFDLElBQU0sU0FBUyxHQUF3QjtJQUM1QyxLQUFLLEVBQUUsTUFBTTtJQUNiLE1BQU0sRUFBRSxNQUFNO0lBQ2QsWUFBWSxFQUFFLEtBQUs7SUFDbkIsU0FBUyxFQUFFLE9BQU87SUFDbEIsVUFBVSxFQUFFLENBQUM7Q0FDZCxDQUFDO0FBRUYsa0ZBQWtGO0FBQ2xGLHNGQUFzRjtBQUN0RixNQUFNLENBQUMsSUFBTSxjQUFjLEdBQXdCO0lBQ2pELE1BQU0sRUFBRSxNQUFNO0lBQ2QsS0FBSyxFQUFFLE1BQU07SUFDYixRQUFRLEVBQUUsTUFBTTtJQUNoQixTQUFTLEVBQUUsU0FBUztJQUNwQixPQUFPLEVBQUUsT0FBTztJQUNoQixVQUFVLEVBQUUsQ0FBQztJQUNiLFFBQVEsRUFBRSxDQUFDO0NBQ1osQ0FBQztBQUVGLE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxVQUFrQjtJQUN4RCxPQUFPO1FBQ0wsUUFBUSxFQUFFLE1BQU07UUFDaEIsVUFBVSxFQUFFLEdBQUc7UUFDZixLQUFLLEVBQUUsU0FBUztRQUNoQixNQUFNLEVBQUUsQ0FBQztRQUNULFVBQVUsRUFBRSxRQUFRO1FBQ3BCLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLFlBQVksRUFBRSxVQUFVO1FBQ3hCLFVBQVUsWUFBQTtLQUNYLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLElBQU0seUJBQXlCLEdBQXdCO0lBQzVELE9BQU8sRUFBRSxNQUFNO0lBQ2YsYUFBYSxFQUFFLFFBQVE7SUFDdkIsY0FBYyxFQUFFLFFBQVE7SUFDeEIsUUFBUSxFQUFFLENBQUM7Q0FDWixDQUFDO0FBRUYsTUFBTSxVQUFVLDZCQUE2QixDQUFDLFVBQWtCO0lBQzlELE9BQU87UUFDTCxRQUFRLEVBQUUsTUFBTTtRQUNoQixVQUFVLEVBQUUsR0FBRztRQUNmLEtBQUssRUFBRSxTQUFTO1FBQ2hCLE1BQU0sRUFBRSxDQUFDO1FBQ1QsVUFBVSxFQUFFLEtBQUs7UUFDakIsVUFBVSxFQUFFLFFBQVE7UUFDcEIsUUFBUSxFQUFFLFFBQVE7UUFDbEIsWUFBWSxFQUFFLFVBQVU7UUFDeEIsVUFBVSxZQUFBO0tBQ1gsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsSUFBTSxlQUFlLEdBQXdCO0lBQ2xELHFGQUFxRjtJQUNyRixLQUFLLEVBQUUsU0FBUztJQUNoQixNQUFNLEVBQUUsTUFBTTtJQUNkLFlBQVksRUFBRSxLQUFLO0lBQ25CLEtBQUssRUFBRSxNQUFNO0lBQ2IsTUFBTSxFQUFFLE1BQU07SUFDZCxPQUFPLEVBQUUsTUFBTTtJQUNmLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLGNBQWMsRUFBRSxRQUFRO0lBQ3hCLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE9BQU8sRUFBRSxNQUFNO0lBQ2YsUUFBUSxFQUFFLFVBQVU7SUFDcEIsTUFBTSxFQUFFLENBQUM7Q0FDVixDQUFDO0FBRUYsaUZBQWlGO0FBQ2pGLG9GQUFvRjtBQUNwRixNQUFNLFVBQVUsaUJBQWlCLENBQUMsZUFBdUI7SUFDdkQsT0FBTztRQUNMLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLEdBQUcsRUFBRSxNQUFNO1FBQ1gsS0FBSyxFQUFFLE1BQU07UUFDYixlQUFlLGlCQUFBO1FBQ2YsWUFBWSxFQUFFLE1BQU07UUFDcEIsTUFBTSxFQUFFLG1CQUFtQjtRQUMzQixTQUFTLEVBQUUsc0VBQXNFO1FBQ2pGLE9BQU8sRUFBRSxLQUFLO1FBQ2QsTUFBTSxFQUFFLElBQUk7UUFDWixRQUFRLEVBQUUsT0FBTztRQUNqQixRQUFRLEVBQUUsU0FBUztLQUNwQixDQUFDO0FBQ0osQ0FBQztBQUVELHFGQUFxRjtBQUNyRixxRkFBcUY7QUFDckYsTUFBTSxVQUFVLGdCQUFnQixDQUFDLENBQWM7SUFDN0MsT0FBTztRQUNMLE9BQU8sRUFBRSxNQUFNO1FBQ2YsVUFBVSxFQUFFLFFBQVE7UUFDcEIsR0FBRyxFQUFFLEtBQUs7UUFDVixPQUFPLEVBQUUsU0FBUztRQUNsQixZQUFZLEVBQUUsS0FBSztRQUNuQixLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVM7UUFDbEIsTUFBTSxFQUFFLFNBQVM7UUFDakIsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO1FBQ3BCLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVTtLQUN6QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxJQUFNLGtCQUFrQixHQUF3QjtJQUNyRCxJQUFJLEVBQUUsQ0FBQztJQUNQLFNBQVMsRUFBRSxDQUFDO0lBQ1osU0FBUyxFQUFFLE1BQU07SUFDakIsT0FBTyxFQUFFLE1BQU07SUFDZixlQUFlLEVBQUUsYUFBYTtJQUM5QixPQUFPLEVBQUUsTUFBTTtJQUNmLGFBQWEsRUFBRSxRQUFRO0NBQ3hCLENBQUM7QUFFRixNQUFNLENBQUMsSUFBTSxtQkFBbUIsR0FBd0I7SUFDdEQsT0FBTyxFQUFFLE1BQU07SUFDZixPQUFPLEVBQUUsV0FBVztJQUNwQixlQUFlLEVBQUUsU0FBUztJQUMxQixVQUFVLEVBQUUsUUFBUTtJQUNwQixHQUFHLEVBQUUsS0FBSztJQUNWLFVBQVUsRUFBRSxDQUFDO0lBQ2IsU0FBUyxFQUFFLFFBQVE7SUFDbkIsUUFBUSxFQUFFLENBQUM7Q0FDWixDQUFDO0FBRUYsTUFBTSxDQUFDLElBQU0saUJBQWlCLEdBQXdCO0lBQ3BELE9BQU8sRUFBRSxNQUFNO0lBQ2YsSUFBSSxFQUFFLENBQUM7SUFDUCxVQUFVLEVBQUUsUUFBUTtJQUNwQixlQUFlLEVBQUUsU0FBUztJQUMxQixZQUFZLEVBQUUsTUFBTTtJQUNwQixNQUFNLEVBQUUsbUJBQW1CO0lBQzNCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFNBQVMsRUFBRSxNQUFNO0lBQ2pCLFNBQVMsRUFBRSwrQkFBK0I7SUFDMUMsUUFBUSxFQUFFLFVBQVU7SUFDcEIsU0FBUyxFQUFFLFFBQVE7SUFDbkIsUUFBUSxFQUFFLENBQUM7Q0FDWixDQUFDO0FBVUYsTUFBTSxVQUFVLGdCQUFnQixDQUFDLENBQXNCO0lBQ3JELE9BQU87UUFDTCxJQUFJLEVBQUUsQ0FBQztRQUNQLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLE1BQU07UUFDZixVQUFVLEVBQUUsYUFBYTtRQUN6QixRQUFRLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQjtRQUM1QixVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVU7UUFDeEIsT0FBTyxFQUFFLE1BQU07UUFDZixZQUFZLEVBQUUsTUFBTTtRQUNwQixLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVM7UUFDbEIsTUFBTSxFQUFFLE1BQU07UUFDZCxVQUFVLEVBQUUsVUFBRyxDQUFDLENBQUMsa0JBQWtCLE9BQUk7UUFDdkMsU0FBUyxFQUFFLFVBQUcsQ0FBQyxDQUFDLDJCQUEyQixPQUFJO1FBQy9DLFNBQVMsRUFBRSxRQUFRO1FBQ25CLFNBQVMsRUFBRSxRQUFRO1FBQ25CLFFBQVEsRUFBRSxDQUFDO1FBQ1gsS0FBSyxFQUFFLE1BQU07UUFDYixTQUFTLEVBQUUsWUFBWTtLQUN4QixDQUFDO0FBQ0osQ0FBQztBQUVELDZGQUE2RjtBQUM3RixNQUFNLFVBQVUscUJBQXFCLENBQUMsUUFBZ0IsRUFBRSxVQUFrQjtJQUN4RSxPQUFPO1FBQ0wsSUFBSSxFQUFFLENBQUM7UUFDUCxLQUFLLEVBQUUsU0FBUztRQUNoQixRQUFRLFVBQUE7UUFDUixVQUFVLFlBQUE7UUFDVixZQUFZLEVBQUUsRUFBRTtRQUNoQixVQUFVLEVBQUUsTUFBTTtRQUNsQixVQUFVLEVBQUUsUUFBUTtRQUNwQixRQUFRLEVBQUUsUUFBUTtRQUNsQixZQUFZLEVBQUUsVUFBVTtLQUN6QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxJQUFNLGlCQUFpQixHQUF3QjtJQUNwRCxlQUFlLEVBQUUsYUFBYTtJQUM5QixNQUFNLEVBQUUsTUFBTTtJQUNkLE9BQU8sRUFBRSxNQUFNO0lBQ2YsVUFBVSxFQUFFLFFBQVE7SUFDcEIsY0FBYyxFQUFFLFFBQVE7SUFDeEIsTUFBTSxFQUFFLFNBQVM7SUFDakIsT0FBTyxFQUFFLE1BQU07SUFDZixLQUFLLEVBQUUsU0FBUztJQUNoQixPQUFPLEVBQUUsQ0FBQztDQUNYLENBQUM7QUFFRixNQUFNLFVBQVUsa0JBQWtCLENBQUMsWUFBb0I7SUFDckQsT0FBTztRQUNMLGVBQWUsRUFBRSxZQUFZO1FBQzdCLEtBQUssRUFBRSxTQUFTO1FBQ2hCLE1BQU0sRUFBRSxNQUFNO1FBQ2QsWUFBWSxFQUFFLEtBQUs7UUFDbkIsS0FBSyxFQUFFLE1BQU07UUFDYixNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRSxNQUFNO1FBQ2YsVUFBVSxFQUFFLFFBQVE7UUFDcEIsY0FBYyxFQUFFLFFBQVE7UUFDeEIsTUFBTSxFQUFFLFNBQVM7UUFDakIsT0FBTyxFQUFFLE1BQU07UUFDZixVQUFVLEVBQUUsQ0FBQztRQUNiLFNBQVMsRUFBRSwrQkFBK0I7S0FDM0MsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsSUFBTSx1QkFBdUIsR0FBd0I7SUFDMUQsZUFBZSxFQUFFLFNBQVM7SUFDMUIsTUFBTSxFQUFFLGFBQWE7SUFDckIsT0FBTyxFQUFFLEdBQUc7Q0FDYixDQUFDO0FBRUYsTUFBTSxDQUFDLElBQU0seUJBQXlCLEdBQXdCO0lBQzVELFFBQVEsRUFBRSxVQUFVO0lBQ3BCLEtBQUssRUFBRSxLQUFLO0lBQ1osR0FBRyxFQUFFLEtBQUs7SUFDVixTQUFTLEVBQUUsa0JBQWtCO0lBQzdCLE9BQU8sRUFBRSxNQUFNO0lBQ2YsVUFBVSxFQUFFLFFBQVE7SUFDcEIsY0FBYyxFQUFFLFFBQVE7Q0FDekIsQ0FBQztBQUVGLE1BQU0sVUFBVSxnQ0FBZ0MsQ0FBQyxVQUFrQjtJQUNqRSxPQUFPO1FBQ0wsT0FBTyxFQUFFLE1BQU07UUFDZixhQUFhLEVBQUUsUUFBUTtRQUN2QixHQUFHLEVBQUUsS0FBSztRQUNWLE9BQU8sRUFBRSxHQUFHO1FBQ1osV0FBVyxFQUFFLE1BQU07UUFDbkIsWUFBWSxFQUFFLE1BQU07UUFDcEIsU0FBUyxFQUFFLEtBQUs7UUFDaEIsWUFBWSxFQUFFLE1BQU07UUFDcEIsS0FBSyxFQUFFLE1BQU07UUFDYixVQUFVLFlBQUE7S0FDWCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxDQUFjO0lBQ2hELE9BQU87UUFDTCxPQUFPLEVBQUUsV0FBVztRQUNwQixlQUFlLEVBQUUsQ0FBQyxDQUFDLGNBQWM7UUFDakMsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTO1FBQ2xCLE1BQU0sRUFBRSxNQUFNO1FBQ2QsWUFBWSxFQUFFLEtBQUs7UUFDbkIsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO1FBQ3BCLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLFNBQVMsRUFBRSxNQUFNO1FBQ2pCLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLFNBQVMsRUFBRSxNQUFNO1FBQ2pCLEtBQUssRUFBRSxNQUFNO1FBQ2IsUUFBUSxFQUFFLE9BQU87UUFDakIsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO0tBQ3pCLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLGdCQUF5QjtJQUM5RCxPQUFPO1FBQ0wsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDM0MsUUFBUSxFQUFFLFVBQVU7UUFDcEIsR0FBRyxFQUFFLENBQUM7UUFDTixJQUFJLEVBQUUsQ0FBQztRQUNQLEtBQUssRUFBRSxDQUFDO1FBQ1IsTUFBTSxFQUFFLENBQUM7UUFDVCwyREFBMkQ7UUFDM0QsZUFBZSxFQUFFLG9CQUFvQjtRQUNyQyxNQUFNLEVBQUUsRUFBRTtRQUNWLGNBQWMsRUFBRSxRQUFRO1FBQ3hCLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLE9BQU8sRUFBRSxNQUFNO0tBQ2hCLENBQUM7QUFDSixDQUFDO0FBRUQsMkVBQTJFO0FBQzNFLDRDQUE0QztBQUM1QyxNQUFNLFVBQVUscUJBQXFCLENBQUMsQ0FBYztJQUNsRCxPQUFPO1FBQ0wsZUFBZSxFQUFFLENBQUMsQ0FBQyxlQUFlO1FBQ2xDLE9BQU8sRUFBRSxNQUFNO1FBQ2YsWUFBWSxFQUFFLE1BQU07UUFDcEIsTUFBTSxFQUFFLG1CQUFtQjtRQUMzQixTQUFTLEVBQUUsd0VBQXdFO1FBQ25GLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLEtBQUssRUFBRSxNQUFNO1FBQ2IsU0FBUyxFQUFFLE1BQU07UUFDakIsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO1FBQ3hCLEtBQUssRUFBRSxDQUFDLENBQUMsU0FBUztLQUNuQixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxJQUFNLG1CQUFtQixHQUF3QjtJQUN0RCxPQUFPLEVBQUUsTUFBTTtJQUNmLGNBQWMsRUFBRSxVQUFVO0lBQzFCLFNBQVMsRUFBRSxNQUFNO0lBQ2pCLEdBQUcsRUFBRSxLQUFLO0NBQ1gsQ0FBQztBQUVGLDBFQUEwRTtBQUMxRSxvRkFBb0Y7QUFDcEYsTUFBTSxVQUFVLHFCQUFxQixDQUFDLFNBQWtCLEVBQUUsQ0FBYztJQUN0RSxPQUFPO1FBQ0wsT0FBTyxFQUFFLFVBQVU7UUFDbkIsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQ3RELEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDMUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7UUFDaEQsWUFBWSxFQUFFLFFBQVE7UUFDdEIsTUFBTSxFQUFFLFNBQVM7UUFDakIsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO1FBQ3hCLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtRQUNwQixVQUFVLEVBQUUsR0FBRztRQUNmLFVBQVUsRUFBRSw2QkFBNkI7S0FDMUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsZUFBdUI7SUFDekQsT0FBTztRQUNMLElBQUksRUFBRSxDQUFDO1FBQ1AsT0FBTyxFQUFFLE1BQU07UUFDZixhQUFhLEVBQUUsUUFBUTtRQUN2QixlQUFlLGlCQUFBO1FBQ2YsbUJBQW1CLEVBQUUsRUFBRTtRQUN2QixvQkFBb0IsRUFBRSxFQUFFO1FBQ3hCLFNBQVMsRUFBRSw2QkFBNkI7UUFDeEMsUUFBUSxFQUFFLFVBQVU7UUFDcEIsTUFBTSxFQUFFLENBQUM7UUFDVCxRQUFRLEVBQUUsUUFBUTtRQUNsQixTQUFTLEVBQUUsQ0FBQztLQUNiLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFVBQWtCO0lBQ25ELE9BQU87UUFDTCxTQUFTLEVBQUUsTUFBTTtRQUNqQixRQUFRLEVBQUUsTUFBTTtRQUNoQixLQUFLLEVBQUUsU0FBUztRQUNoQixNQUFNLEVBQUUsa0JBQWtCO1FBQzFCLFVBQVUsWUFBQTtLQUNYLENBQUM7QUFDSixDQUFDO0FBUUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEVBQThDO1FBQTVDLFFBQVEsY0FBQSxFQUFFLE9BQU8sYUFBQSxFQUFFLE9BQU8sYUFBQTtJQUM1RCxJQUFNLElBQUksR0FBd0I7UUFDaEMsUUFBUSxFQUFFLE9BQU87UUFDakIsTUFBTSxFQUFFLElBQUk7S0FDYixDQUFDO0lBRUYsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLGNBQWM7WUFDakIsNkJBQVksSUFBSSxLQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBRztRQUN0RCxLQUFLLGFBQWE7WUFDaEIsNkJBQVksSUFBSSxLQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sSUFBRztRQUNyRCxLQUFLLFdBQVc7WUFDZCw2QkFBWSxJQUFJLEtBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFHO1FBQ25ELEtBQUssVUFBVTtZQUNiLDZCQUFZLElBQUksS0FBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLElBQUc7UUFDbEQ7WUFDRSw2QkFBWSxJQUFJLEtBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFHO0lBQ3hELENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEVBQThDO1FBQTVDLFFBQVEsY0FBQSxFQUFFLE9BQU8sYUFBQSxFQUFFLE9BQU8sYUFBQTtJQUNoRSxJQUFNLElBQUksR0FBd0I7UUFDaEMsUUFBUSxFQUFFLE9BQU87UUFDakIsWUFBWSxFQUFFLE1BQU07UUFDcEIsTUFBTSxFQUFFLElBQUk7S0FDYixDQUFDO0lBRUYsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLGNBQWM7WUFDakIsNkJBQVksSUFBSSxLQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBRztRQUN0RCxLQUFLLGFBQWE7WUFDaEIsNkJBQVksSUFBSSxLQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sSUFBRztRQUNyRCxLQUFLLFdBQVc7WUFDZCw2QkFBWSxJQUFJLEtBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFHO1FBQ25ELEtBQUssVUFBVTtZQUNiLDZCQUFZLElBQUksS0FBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLElBQUc7UUFDbEQ7WUFDRSw2QkFBWSxJQUFJLEtBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFHO0lBQ3hELENBQUM7QUFDSCxDQUFDO0FBUUQsTUFBTSxVQUFVLHVCQUF1QixDQUFDLEVBQXFFO1FBQW5FLFlBQVksa0JBQUEsRUFBRSxJQUFJLFVBQUEsRUFBRSxrQkFBa0IsRUFBbEIsVUFBVSxtQkFBRyxLQUFLLEtBQUE7SUFDOUUsSUFBTSxXQUFXLEdBQUcsT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDN0UsSUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUV2RCxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxJQUFJLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUN4QixJQUFJLFdBQVcsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLENBQUM7UUFDekMsQ0FBQztRQUNELElBQUksV0FBVyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLFdBQVcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsSUFBSSxXQUFXLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUM7QUFDcEQsQ0FBQztBQVNELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxFQUE0RTtRQUExRSxZQUFZLGtCQUFBLEVBQUUsT0FBTyxhQUFBLEVBQUUsUUFBUSxjQUFBLEVBQUUsa0JBQWtCLEVBQWxCLFVBQVUsbUJBQUcsS0FBSyxLQUFBO0lBQ3pGLElBQU0sV0FBVyxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzdFLElBQU0sWUFBWSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQy9FLElBQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNsQiwwRUFBMEU7SUFDMUUsSUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsWUFBWSxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RixJQUFJLFNBQVMsR0FBb0IsWUFBWSxDQUFDO0lBRTlDLElBQUksV0FBVyxJQUFJLEdBQUcsSUFBSSxZQUFZLElBQUksSUFBSSxFQUFFLENBQUM7UUFDL0MsU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDM0MsQ0FBQztJQUVELGtCQUNFLE9BQU8sRUFBRSxNQUFNLEVBQ2YsYUFBYSxFQUFFLFFBQVEsRUFDdkIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsTUFBTSxFQUFFLFlBQVksSUFDakIsQ0FBQyxRQUFRLEtBQUssV0FBVyxJQUFJLFFBQVEsS0FBSyxVQUFVO1FBQ3JELENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTtRQUNsQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUNyQztBQUNKLENBQUM7QUFhRCxtRkFBbUY7QUFDbkYsU0FBUyxrQkFBa0IsQ0FBQyxRQUFnQjtJQUMxQyxRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssYUFBYSxDQUFDLENBQUMsT0FBTyxhQUFhLENBQUM7UUFDekMsS0FBSyxXQUFXLENBQUMsQ0FBQyxPQUFPLFdBQVcsQ0FBQztRQUNyQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLE9BQU8sVUFBVSxDQUFDO1FBQ25DLEtBQUssY0FBYyxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sY0FBYyxDQUFDO0lBQ2pDLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLENBQTBCO0lBQ2xFLGtCQUNFLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQzVDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQzdDLENBQUMsQ0FBQztZQUNFLFFBQVEsRUFBRSxPQUFnQjtZQUMxQixHQUFHLEVBQUUsQ0FBQztZQUNOLElBQUksRUFBRSxDQUFDO1lBQ1AsS0FBSyxFQUFFLENBQUM7WUFDUixNQUFNLEVBQUUsa0NBQWtDO1lBQzFDLFlBQVksRUFBRSxHQUFHO1lBQ2pCLE1BQU0sRUFBRSxJQUFJO1NBQ2I7UUFDSCxDQUFDLHlDQUNNLHFCQUFxQixDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUN2Rix1QkFBdUIsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsR0FDakcsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDaEwsMEVBQTBFO1lBQzFFLFVBQVUsRUFBRSx1SUFBdUksR0FDcEosQ0FDSixFQUNEO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxJQUFNLGFBQWEsR0FBRyw0bkpBa0g1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBUaGVtZVBhcmFtcyB7XG4gIHByaW1hcnlDb2xvcjogc3RyaW5nO1xuICBzZWNvbmRhcnlDb2xvcjogc3RyaW5nO1xuICBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgdGV4dENvbG9yOiBzdHJpbmc7XG4gIGZvbnRGYW1pbHk6IHN0cmluZztcbiAgZm9udFNpemU6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVUaGVtZSh0aGVtZT86IFBhcnRpYWw8VGhlbWVQYXJhbXM+KTogVGhlbWVQYXJhbXMge1xuICByZXR1cm4ge1xuICAgIHByaW1hcnlDb2xvcjogdGhlbWU/LnByaW1hcnlDb2xvciB8fCAnIzI5NjJGRicsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZT8uYmFja2dyb3VuZENvbG9yIHx8ICcjZmZmZmZmJyxcbiAgICB0ZXh0Q29sb3I6IHRoZW1lPy50ZXh0Q29sb3IgfHwgJyMwMDAwMDAnLFxuICAgIGZvbnRGYW1pbHk6IHRoZW1lPy5mb250RmFtaWx5IHx8ICdSb2JvdG8sIEFyaWFsLCBzYW5zLXNlcmlmJyxcbiAgICBmb250U2l6ZTogdGhlbWU/LmZvbnRTaXplIHx8ICcxNHB4JyxcbiAgICBzZWNvbmRhcnlDb2xvcjogdGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhleFRvUmdiYShoZXg6IHN0cmluZywgYWxwaGE6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IHIgPSBwYXJzZUludChoZXguc2xpY2UoMSwgMyksIDE2KTtcbiAgY29uc3QgZyA9IHBhcnNlSW50KGhleC5zbGljZSgzLCA1KSwgMTYpO1xuICBjb25zdCBiID0gcGFyc2VJbnQoaGV4LnNsaWNlKDUsIDcpLCAxNik7XG4gIHJldHVybiBgcmdiYSgke3J9LCAke2d9LCAke2J9LCAke2FscGhhfSlgO1xufVxuXG5pbnRlcmZhY2UgQ29udGFpbmVyU3R5bGVQYXJhbXMge1xuICBpc0Z1bGxzY3JlZW46IGJvb2xlYW47XG4gIGlzRmxvYXRpbmdEb2NrZWQ6IGJvb2xlYW47XG4gIHdpbmRvd1dpZHRoOiBudW1iZXI7XG4gIHQ6IFRoZW1lUGFyYW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udGFpbmVyU3R5bGUoeyBpc0Z1bGxzY3JlZW4sIGlzRmxvYXRpbmdEb2NrZWQsIHdpbmRvd1dpZHRoLCB0IH06IENvbnRhaW5lclN0eWxlUGFyYW1zKTogUmVhY3QuQ1NTUHJvcGVydGllcyB7XG4gIHJldHVybiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGhlaWdodDogaXNGdWxsc2NyZWVuID8gdW5kZWZpbmVkIDogJzEwMCUnLFxuICAgIG1heEhlaWdodDogaXNGdWxsc2NyZWVuXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBpc0Zsb2F0aW5nRG9ja2VkXG4gICAgICAgID8gJzEwMCUnXG4gICAgICAgIDogd2luZG93V2lkdGggPiA3NjhcbiAgICAgICAgICA/ICc3MDBweCdcbiAgICAgICAgICA6ICc2MDBweCcsXG4gICAgbWluSGVpZ2h0OiBpc0Zsb2F0aW5nRG9ja2VkID8gMCA6IHVuZGVmaW5lZCxcbiAgICAvLyBXaGVuIGRvY2tlZCwgZmlsbCB0aGUgZmxvYXRpbmcgd3JhcHBlciBzbyBpdHMgKHBvc3NpYmx5IGV4cGFuZGVkKSB3aWR0aCBkcml2ZXMgdGhlIHNpemUuXG4gICAgd2lkdGg6IGlzRnVsbHNjcmVlbiA/ICcxMDB2dycgOiBpc0Zsb2F0aW5nRG9ja2VkID8gJzEwMCUnIDogJzM4MHB4JyxcbiAgICBtYXhXaWR0aDogaXNGdWxsc2NyZWVuID8gJzEwMHZ3JyA6IGlzRmxvYXRpbmdEb2NrZWQgPyAnMTAwJScgOiAnNDAwcHgnLFxuICAgIGJvcmRlcjogaXNGdWxsc2NyZWVuID8gJ25vbmUnIDogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgICBib3JkZXJSYWRpdXM6IGlzRnVsbHNjcmVlbiA/ICcwJyA6ICczMnB4JyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0LnNlY29uZGFyeUNvbG9yLFxuICAgIGZvbnRGYW1pbHk6IHQuZm9udEZhbWlseSxcbiAgICBib3hTaGFkb3c6IGlzRnVsbHNjcmVlbiA/ICdub25lJyA6IFwiMCA0cHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMilcIixcbiAgICBwb3NpdGlvbjogaXNGdWxsc2NyZWVuID8gJ2ZpeGVkJyA6ICdyZWxhdGl2ZScsXG4gICAgdG9wOiBpc0Z1bGxzY3JlZW4gPyAwIDogdW5kZWZpbmVkLFxuICAgIGxlZnQ6IGlzRnVsbHNjcmVlbiA/IDAgOiB1bmRlZmluZWQsXG4gICAgcmlnaHQ6IGlzRnVsbHNjcmVlbiA/IDAgOiB1bmRlZmluZWQsXG4gICAgYm90dG9tOiBpc0Z1bGxzY3JlZW4gPyAnZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20sIDBweCknIDogdW5kZWZpbmVkLFxuICAgIHpJbmRleDogaXNGdWxsc2NyZWVuID8gOTk5OSA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlclN0eWxlKHQ6IFRoZW1lUGFyYW1zKTogUmVhY3QuQ1NTUHJvcGVydGllcyB7XG4gIHJldHVybiB7XG4gICAgcGFkZGluZzogJzEycHggMTRweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0LnNlY29uZGFyeUNvbG9yLFxuICAgIGNvbG9yOiAnIzExMTExMScsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogJzhweCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIH07XG59XG5cbi8vIExlZnQgaGVhZGVyIHpvbmUgZ3Jvd3MgdG8gZmlsbCAoZmxleDogMSkgYW5kIGhvbGRzIHRoZSBsb2dvL25hbWUgZ3JvdXAgK1xuLy8gaG92ZXItcmV2ZWFsZWQgZXhwYW5kIGJ1dHRvbjsgdGhlIHJpZ2h0IHpvbmUgc2hyaW5rcyB0byBpdHMgYnV0dG9ucy5cbmV4cG9ydCBjb25zdCBoZWFkZXJMZWZ0Q29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIGZsZXg6IDEsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIGp1c3RpZnlDb250ZW50OiAnZmxleC1zdGFydCcsXG4gIGdhcDogJzRweCcsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICB6SW5kZXg6IDIsXG4gIG1pbldpZHRoOiAwLFxufTtcblxuZXhwb3J0IGNvbnN0IGhlYWRlclJpZ2h0Q29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIGZsZXg6ICcwIDAgYXV0bycsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnLFxuICBnYXA6ICc0cHgnLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgekluZGV4OiAyLFxufTtcblxuLy8gTGVmdC1hbGlnbmVkIGxvZ28gKyBuYW1lIGdyb3VwLiBTbGlkZXMgcmlnaHQgb24gaGVhZGVyIGhvdmVyIChzZWUgLmdhLWhlYWRlciBDU1MpLlxuZXhwb3J0IGNvbnN0IGhlYWRlclBpbGxTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgZ2FwOiAnOHB4JyxcbiAgcGFkZGluZzogMCxcbiAgbWF4V2lkdGg6ICc3MCUnLFxuICBmbGV4U2hyaW5rOiAxLFxuICBtaW5XaWR0aDogMCxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIC8vIEFib3ZlIHRoZSBoZWFkZXIgY29sb3Itc3dlZXAgYmFja2xpZ2h0ICh6SW5kZXggMSkgc28gaXQgY2FuJ3QgY292ZXIgdGhlIHRpdGxlLlxuICB6SW5kZXg6IDIsXG59O1xuXG5leHBvcnQgY29uc3QgbG9nb1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICB3aWR0aDogJzI2cHgnLFxuICBoZWlnaHQ6ICcyNnB4JyxcbiAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgb2JqZWN0Rml0OiAnY292ZXInLFxuICBmbGV4U2hyaW5rOiAwLFxufTtcblxuLy8gRnVsbCBicmFuZCBsb2dvL3dvcmRtYXJrIHNob3duIGluc3RlYWQgb2YgdGhlIHNtYWxsIGxvZ28gKyB0aXRsZSArIGRlc2NyaXB0aW9uLlxuLy8gRml4ZWQgaGVpZ2h0IGZpbGxzIHRoZSBoZWFkZXI7IHdpZHRoIHN0YXlzIGF1dG8gYW5kIGNsYW1wcyB0byB0aGUgZ3JvdXAncyBtYXhXaWR0aC5cbmV4cG9ydCBjb25zdCBicmFuZExvZ29TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgaGVpZ2h0OiAnMzBweCcsXG4gIHdpZHRoOiAnYXV0bycsXG4gIG1heFdpZHRoOiAnMTAwJScsXG4gIG9iamVjdEZpdDogJ2NvbnRhaW4nLFxuICBkaXNwbGF5OiAnYmxvY2snLFxuICBmbGV4U2hyaW5rOiAxLFxuICBtaW5XaWR0aDogMCxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWFkZXJQaWxsVGl0bGVTdHlsZShmb250RmFtaWx5OiBzdHJpbmcpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHtcbiAgcmV0dXJuIHtcbiAgICBmb250U2l6ZTogJzE1cHgnLFxuICAgIGZvbnRXZWlnaHQ6IDcwMCxcbiAgICBjb2xvcjogJyMxMTExMTEnLFxuICAgIG1hcmdpbjogMCxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBoZWFkZXJQaWxsVGV4dENvbHVtblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIG1pbldpZHRoOiAwLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlckRlc2NyaXB0aW9uVGV4dFN0eWxlKGZvbnRGYW1pbHk6IHN0cmluZyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIGZvbnRTaXplOiAnMTJweCcsXG4gICAgZm9udFdlaWdodDogNDAwLFxuICAgIGNvbG9yOiAnIzZiNzI4MCcsXG4gICAgbWFyZ2luOiAwLFxuICAgIHBhZGRpbmdUb3A6ICcxcHgnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IG1lbnVCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgLy8gTm8gaW5saW5lIGJhY2tncm91bmRDb2xvciBoZXJlOiBpdCB3b3VsZCBvdmVycmlkZSB0aGUgYC5nYS1oZWFkZXItYnRuOmhvdmVyYCBmaWxsLlxuICBjb2xvcjogJyMxMTExMTEnLFxuICBib3JkZXI6ICdub25lJyxcbiAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgd2lkdGg6ICczMnB4JyxcbiAgaGVpZ2h0OiAnMzJweCcsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgY3Vyc29yOiAncG9pbnRlcicsXG4gIG91dGxpbmU6ICdub25lJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIHpJbmRleDogMSxcbn07XG5cbi8vIFBvcG92ZXIgc3R5bGluZyBtaXJyb3JzIHRoZSB3ZWIgYXBwJ3Mgc2hhZGNuIGRyb3Bkb3duLW1lbnU6IHJvdW5kZWQtbWQgKDEwcHgpLFxuLy8gMXB4IGJvcmRlciwgc2hhZG93LW1kLCBwLTEgKDRweCkgcGFkZGluZyBhcm91bmQgcm91bmRlZCwgaG92ZXItaGlnaGxpZ2h0ZWQgaXRlbXMuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVudVBvcHVwU3R5bGUoYmFja2dyb3VuZENvbG9yOiBzdHJpbmcpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHtcbiAgcmV0dXJuIHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6ICc1MHB4JyxcbiAgICByaWdodDogJzE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcixcbiAgICBib3JkZXJSYWRpdXM6ICcxMHB4JyxcbiAgICBib3JkZXI6ICcxcHggc29saWQgI2U0ZTRlNycsXG4gICAgYm94U2hhZG93OiAnMCA0cHggNnB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDJweCA0cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMSknLFxuICAgIHBhZGRpbmc6ICc0cHgnLFxuICAgIHpJbmRleDogMTAwMCxcbiAgICBtaW5XaWR0aDogJzE2MHB4JyxcbiAgICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICB9O1xufVxuXG4vLyBNZW51IGl0ZW0gbWlycm9ycyBzaGFkY24gRHJvcGRvd25NZW51SXRlbTogcm91bmRlZC1zbSAoOHB4KSwgcHgtMiBweS0xLjUsIHRleHQtc20sXG4vLyBob3ZlcjpiZy1hY2NlbnQuIEhvdmVyIGZpbGwgY29tZXMgZnJvbSB0aGUgLS1nYS1ob3ZlciBDU1MgdmFyIChzZWUgLmdhLW1lbnUtaXRlbSkuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVudUl0ZW1TdHlsZSh0OiBUaGVtZVBhcmFtcyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBnYXA6ICc4cHgnLFxuICAgIHBhZGRpbmc6ICc2cHggOHB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIGNvbG9yOiB0LnRleHRDb2xvcixcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBmb250U2l6ZTogdC5mb250U2l6ZSxcbiAgICBmb250RmFtaWx5OiB0LmZvbnRGYW1pbHksXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBjaGF0Q29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIGZsZXg6IDEsXG4gIG1pbkhlaWdodDogMCxcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gIHBhZGRpbmc6ICcxNXB4JyxcbiAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxufTtcblxuZXhwb3J0IGNvbnN0IGlucHV0Q29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgcGFkZGluZzogJzEycHggMTVweCcsXG4gIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgZ2FwOiAnOHB4JyxcbiAgZmxleFNocmluazogMCxcbiAgb3ZlcmZsb3dYOiAnaGlkZGVuJyxcbiAgbWluV2lkdGg6IDAsXG59O1xuXG5leHBvcnQgY29uc3QgaW5wdXRXcmFwcGVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleDogMSxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICBib3JkZXJSYWRpdXM6ICcyNHB4JyxcbiAgYm9yZGVyOiAnMXB4IHNvbGlkICNlNWU3ZWInLFxuICBwYWRkaW5nOiAnMCAxMnB4JyxcbiAgbWluSGVpZ2h0OiAnNTBweCcsXG4gIGJveFNoYWRvdzogJzAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDYpJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gIG1pbldpZHRoOiAwLFxufTtcblxuaW50ZXJmYWNlIFRleHRBcmVhU3R5bGVQYXJhbXMge1xuICB0ZXh0QXJlYUZvbnRTaXplOiBzdHJpbmc7XG4gIGZvbnRGYW1pbHk6IHN0cmluZztcbiAgdGV4dEFyZWFMaW5lSGVpZ2h0OiBudW1iZXI7XG4gIHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZDogbnVtYmVyO1xuICB0ZXh0Q29sb3I6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRBcmVhU3R5bGUocDogVGV4dEFyZWFTdHlsZVBhcmFtcyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIGZsZXg6IDEsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgZm9udFNpemU6IHAudGV4dEFyZWFGb250U2l6ZSxcbiAgICBmb250RmFtaWx5OiBwLmZvbnRGYW1pbHksXG4gICAgcGFkZGluZzogJzEwcHgnLFxuICAgIHBhZGRpbmdSaWdodDogJzQ2cHgnLFxuICAgIGNvbG9yOiBwLnRleHRDb2xvcixcbiAgICByZXNpemU6ICdub25lJyxcbiAgICBsaW5lSGVpZ2h0OiBgJHtwLnRleHRBcmVhTGluZUhlaWdodH1weGAsXG4gICAgbWF4SGVpZ2h0OiBgJHtwLnRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZH1weGAsXG4gICAgb3ZlcmZsb3dZOiAnaGlkZGVuJyxcbiAgICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAgIG1pbldpZHRoOiAwLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIH07XG59XG5cbi8qKiBQbGFjZWhvbGRlciBoaW50IHNob3duIGluIHRoZSB2b2ljZS1vbmx5IGZvb3RlciAoXCJUYXAgdG8gc3RhcnQgYSB2b2ljZSBjb252ZXJzYXRpb25cIikuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGl2ZVZvaWNlSGludFN0eWxlKGZvbnRTaXplOiBzdHJpbmcsIGZvbnRGYW1pbHk6IHN0cmluZyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIGZsZXg6IDEsXG4gICAgY29sb3I6ICcjOWNhM2FmJyxcbiAgICBmb250U2l6ZSxcbiAgICBmb250RmFtaWx5LFxuICAgIHBhZGRpbmdSaWdodDogNDQsXG4gICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBhdHRhY2hCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICBib3JkZXI6ICdub25lJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgb3V0bGluZTogJ25vbmUnLFxuICBjb2xvcjogJyM3NTc1NzUnLFxuICBwYWRkaW5nOiAwLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbmRCdXR0b25TdHlsZShwcmltYXJ5Q29sb3I6IHN0cmluZyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIGJhY2tncm91bmRDb2xvcjogcHJpbWFyeUNvbG9yLFxuICAgIGNvbG9yOiAnI2ZmZmZmZicsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICB3aWR0aDogJzM2cHgnLFxuICAgIGhlaWdodDogJzM2cHgnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgYm94U2hhZG93OiAnMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wOCknLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3Qgc2VuZEJ1dHRvbkRpc2FibGVkU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIGJhY2tncm91bmRDb2xvcjogJyNkMWQ1ZGInLFxuICBjdXJzb3I6ICdub3QtYWxsb3dlZCcsXG4gIG9wYWNpdHk6IDAuOCxcbn07XG5cbmV4cG9ydCBjb25zdCByaWdodEFjdGlvbkNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgcmlnaHQ6ICc0cHgnLFxuICB0b3A6ICc1MCUnLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBvc3NpYmxlUXVlcmllc0NvbnRhaW5lclN0eWxlKGZvbnRGYW1pbHk6IHN0cmluZyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBnYXA6ICc4cHgnLFxuICAgIHBhZGRpbmc6ICcwJyxcbiAgICBwYWRkaW5nTGVmdDogJzI4cHgnLFxuICAgIHBhZGRpbmdSaWdodDogJzI4cHgnLFxuICAgIG1hcmdpblRvcDogJzVweCcsXG4gICAgbWFyZ2luQm90dG9tOiAnMTVweCcsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBmb250RmFtaWx5LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UXVlcnlCdXR0b25TdHlsZSh0OiBUaGVtZVBhcmFtcyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIHBhZGRpbmc6ICcxMnB4IDE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogdC5zZWNvbmRhcnlDb2xvcixcbiAgICBjb2xvcjogdC50ZXh0Q29sb3IsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNnB4JyxcbiAgICBmb250U2l6ZTogdC5mb250U2l6ZSxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcbiAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIG1heFdpZHRoOiAnMjQwcHgnLFxuICAgIGZvbnRGYW1pbHk6IHQuZm9udEZhbWlseSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpcm1PdmVybGF5U3R5bGUoc2hvd1Jlc2V0Q29uZmlybTogYm9vbGVhbik6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIGRpc3BsYXk6IHNob3dSZXNldENvbmZpcm0gPyAnZmxleCcgOiAnbm9uZScsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIC8vIE1hdGNoZXMgdGhlIHdlYiBhcHAncyBBbGVydERpYWxvZyBvdmVybGF5IChiZy1ibGFjay84MCkuXG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjgpJyxcbiAgICB6SW5kZXg6IDEwLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwYWRkaW5nOiAnMTZweCcsXG4gIH07XG59XG5cbi8vIERpYWxvZyBtaXJyb3JzIHNoYWRjbiBBbGVydERpYWxvZ0NvbnRlbnQ6IHJvdW5kZWQtbGcgKDEycHgpLCBwLTYgKDI0cHgpLFxuLy8gMXB4IGJvcmRlciwgc2hhZG93LWxnLCBsZWZ0LWFsaWduZWQgdGV4dC5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maXJtRGlhbG9nU3R5bGUodDogVGhlbWVQYXJhbXMpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHtcbiAgcmV0dXJuIHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHQuYmFja2dyb3VuZENvbG9yLFxuICAgIHBhZGRpbmc6ICcyNHB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICcxMnB4JyxcbiAgICBib3JkZXI6ICcxcHggc29saWQgI2U0ZTRlNycsXG4gICAgYm94U2hhZG93OiAnMCAxMHB4IDE1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgNHB4IDZweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4xKScsXG4gICAgbWF4V2lkdGg6ICczMjBweCcsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICBmb250RmFtaWx5OiB0LmZvbnRGYW1pbHksXG4gICAgY29sb3I6IHQudGV4dENvbG9yLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgY29uZmlybUJ1dHRvbnNTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyxcbiAgbWFyZ2luVG9wOiAnMjBweCcsXG4gIGdhcDogJzhweCcsXG59O1xuXG4vLyBCdXR0b25zIG1pcnJvciBzaGFkY24gQnV0dG9uOiBwaWxsIChyb3VuZGVkLWZ1bGwpLCB0ZXh0LXNtIGZvbnQtbWVkaXVtLlxuLy8gQ29uZmlybSA9IGRlc3RydWN0aXZlIChyZWQtNjAwKSwgQ2FuY2VsID0gb3V0bGluZS4gSG92ZXIgdmlhIC5nYS1jb25maXJtLWJ0biBDU1MuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlybUJ1dHRvblN0eWxlKGlzQ29uZmlybTogYm9vbGVhbiwgdDogVGhlbWVQYXJhbXMpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHtcbiAgcmV0dXJuIHtcbiAgICBwYWRkaW5nOiAnOHB4IDE2cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogaXNDb25maXJtID8gJyNkYzI2MjYnIDogJ3RyYW5zcGFyZW50JyxcbiAgICBjb2xvcjogaXNDb25maXJtID8gJyNmZmZmZmYnIDogdC50ZXh0Q29sb3IsXG4gICAgYm9yZGVyOiBpc0NvbmZpcm0gPyAnbm9uZScgOiAnMXB4IHNvbGlkICNlNGU0ZTcnLFxuICAgIGJvcmRlclJhZGl1czogJzk5OTlweCcsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgZm9udEZhbWlseTogdC5mb250RmFtaWx5LFxuICAgIGZvbnRTaXplOiB0LmZvbnRTaXplLFxuICAgIGZvbnRXZWlnaHQ6IDUwMCxcbiAgICB0cmFuc2l0aW9uOiAnYmFja2dyb3VuZC1jb2xvciAwLjE1cyBlYXNlJyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRlbnRDYXJkU3R5bGUoYmFja2dyb3VuZENvbG9yOiBzdHJpbmcpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHtcbiAgcmV0dXJuIHtcbiAgICBmbGV4OiAxLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogMjQsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6IDI0LFxuICAgIGJveFNoYWRvdzogJzAgLTJweCA2cHggcmdiYSgwLDAsMCwwLjAzKScsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgekluZGV4OiAyLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBtaW5IZWlnaHQ6IDAsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNjbGFpbWVyU3R5bGUoZm9udEZhbWlseTogc3RyaW5nKTogUmVhY3QuQ1NTUHJvcGVydGllcyB7XG4gIHJldHVybiB7XG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICBjb2xvcjogJyM5Y2EzYWYnLFxuICAgIG1hcmdpbjogJzEycHggNHB4IDJweCA0cHgnLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG59XG5cbmludGVyZmFjZSBQb3NpdGlvblBhcmFtcyB7XG4gIHBvc2l0aW9uOiBzdHJpbmc7XG4gIG9mZnNldFg6IG51bWJlcjtcbiAgb2Zmc2V0WTogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9zaXRpb25TdHlsZXMoeyBwb3NpdGlvbiwgb2Zmc2V0WCwgb2Zmc2V0WSB9OiBQb3NpdGlvblBhcmFtcyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICBjb25zdCBiYXNlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgIHpJbmRleDogMTAwMCxcbiAgfTtcblxuICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogb2Zmc2V0WSwgcmlnaHQ6IG9mZnNldFggfTtcbiAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IG9mZnNldFksIGxlZnQ6IG9mZnNldFggfTtcbiAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdG9wOiBvZmZzZXRZLCByaWdodDogb2Zmc2V0WCB9O1xuICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogb2Zmc2V0WSwgbGVmdDogb2Zmc2V0WCB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IG9mZnNldFksIHJpZ2h0OiBvZmZzZXRYIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoYXRQb3NpdGlvblN0eWxlcyh7IHBvc2l0aW9uLCBvZmZzZXRYLCBvZmZzZXRZIH06IFBvc2l0aW9uUGFyYW1zKTogUmVhY3QuQ1NTUHJvcGVydGllcyB7XG4gIGNvbnN0IGJhc2U6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgYm9yZGVyUmFkaXVzOiAnMzJweCcsXG4gICAgekluZGV4OiAxMDA0LFxuICB9O1xuXG4gIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiBvZmZzZXRZLCByaWdodDogb2Zmc2V0WCB9O1xuICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogb2Zmc2V0WSwgbGVmdDogb2Zmc2V0WCB9O1xuICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCB0b3A6IG9mZnNldFksIHJpZ2h0OiBvZmZzZXRYIH07XG4gICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdG9wOiBvZmZzZXRZLCBsZWZ0OiBvZmZzZXRYIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogb2Zmc2V0WSwgcmlnaHQ6IG9mZnNldFggfTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgUmVzcG9uc2l2ZURpbWVuc2lvblBhcmFtcyB7XG4gIGlzRnVsbHNjcmVlbjogYm9vbGVhbjtcbiAgbW9kZTogc3RyaW5nO1xuICBpc0V4cGFuZGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3BvbnNpdmVEaW1lbnNpb25zKHsgaXNGdWxsc2NyZWVuLCBtb2RlLCBpc0V4cGFuZGVkID0gZmFsc2UgfTogUmVzcG9uc2l2ZURpbWVuc2lvblBhcmFtcyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICBjb25zdCBzY3JlZW5XaWR0aCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmlubmVyV2lkdGggOiAxMDI0O1xuICBjb25zdCBmYWxsYmFja0hlaWdodCA9IGlzRnVsbHNjcmVlbiA/ICcxMDB2aCcgOiAnNjB2aCc7XG5cbiAgaWYgKGlzRnVsbHNjcmVlbikge1xuICAgIHJldHVybiB7IHdpZHRoOiAnMTAwdncnLCBoZWlnaHQ6IGZhbGxiYWNrSGVpZ2h0LCBib3JkZXJSYWRpdXM6ICcwJyB9O1xuICB9XG5cbiAgaWYgKG1vZGUgPT09ICdmbG9hdGluZycpIHtcbiAgICBpZiAoc2NyZWVuV2lkdGggPD0gNDgwKSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogJ2NhbGMoMTAwdncgLSA0MHB4KScgfTtcbiAgICB9XG4gICAgaWYgKHNjcmVlbldpZHRoIDw9IDc2OCkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICczNTBweCcgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgd2lkdGg6IGlzRXhwYW5kZWQgPyAnNTQwcHgnIDogJzM4MHB4JyB9O1xuICB9XG5cbiAgaWYgKHNjcmVlbldpZHRoIDw9IDQ4MCkge1xuICAgIHJldHVybiB7IHdpZHRoOiAnY2FsYygxMDB2dyAtIDQwcHgpJywgaGVpZ2h0OiBmYWxsYmFja0hlaWdodCB9O1xuICB9XG4gIGlmIChzY3JlZW5XaWR0aCA8PSA3NjgpIHtcbiAgICByZXR1cm4geyB3aWR0aDogJzM1MHB4JywgaGVpZ2h0OiBmYWxsYmFja0hlaWdodCB9O1xuICB9XG5cbiAgcmV0dXJuIHsgd2lkdGg6ICczODBweCcsIGhlaWdodDogZmFsbGJhY2tIZWlnaHQgfTtcbn1cblxuaW50ZXJmYWNlIEZsb2F0aW5nU2hlbGxQYXJhbXMge1xuICB3aW5kb3dIZWlnaHQ6IG51bWJlcjtcbiAgb2Zmc2V0WTogbnVtYmVyO1xuICBwb3NpdGlvbjogc3RyaW5nO1xuICBpc0V4cGFuZGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZsb2F0aW5nU2hlbGxTdHlsZSh7IHdpbmRvd0hlaWdodCwgb2Zmc2V0WSwgcG9zaXRpb24sIGlzRXhwYW5kZWQgPSBmYWxzZSB9OiBGbG9hdGluZ1NoZWxsUGFyYW1zKTogUmVhY3QuQ1NTUHJvcGVydGllcyB7XG4gIGNvbnN0IHNjcmVlbldpZHRoID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IDEwMjQ7XG4gIGNvbnN0IHNjcmVlbkhlaWdodCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmlubmVySGVpZ2h0IDogMTA4MDtcbiAgY29uc3QgbWFyZ2luID0gMTA7XG4gIC8vIEV4cGFuc2lvbiBpcyB3aWR0aC1mb2N1c2VkOyBleHBhbmRlZCB1c2VzIG1vc3Qgb2YgdGhlIGF2YWlsYWJsZSBoZWlnaHQuXG4gIGNvbnN0IHVzYWJsZUhlaWdodCA9IE1hdGgubWF4KDI4MCwgd2luZG93SGVpZ2h0IC0gb2Zmc2V0WSAtIG1hcmdpbiAqIChpc0V4cGFuZGVkID8gMiA6IDEwKSk7XG4gIGxldCBtYXhIZWlnaHQ6IG51bWJlciB8IHN0cmluZyA9IHVzYWJsZUhlaWdodDtcblxuICBpZiAoc2NyZWVuV2lkdGggPj0gNzY1ICYmIHNjcmVlbkhlaWdodCA+PSAxMDcwKSB7XG4gICAgbWF4SGVpZ2h0ID0gaXNFeHBhbmRlZCA/ICc4NnZoJyA6ICc2MHZoJztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIG1heEhlaWdodDogbWF4SGVpZ2h0LFxuICAgIGhlaWdodDogdXNhYmxlSGVpZ2h0LFxuICAgIC4uLihwb3NpdGlvbiA9PT0gJ3RvcC1yaWdodCcgfHwgcG9zaXRpb24gPT09ICd0b3AtbGVmdCdcbiAgICAgID8geyB0b3A6IG9mZnNldFksIGJvdHRvbTogJ2F1dG8nIH1cbiAgICAgIDogeyB0b3A6ICdhdXRvJywgYm90dG9tOiBvZmZzZXRZIH0pLFxuICB9O1xufVxuXG5pbnRlcmZhY2UgRmxvYXRpbmdDb250YWluZXJQYXJhbXMge1xuICBtb2RlOiBzdHJpbmc7XG4gIGlzRnVsbHNjcmVlbjogYm9vbGVhbjtcbiAgd2luZG93V2lkdGg6IG51bWJlcjtcbiAgd2luZG93SGVpZ2h0OiBudW1iZXI7XG4gIHBvc2l0aW9uOiBzdHJpbmc7XG4gIG9mZnNldFg6IG51bWJlcjtcbiAgb2Zmc2V0WTogbnVtYmVyO1xuICBpc0V4cGFuZGVkPzogYm9vbGVhbjtcbn1cblxuLy8gQW5jaG9yIHRoZSBvcGVuL2Nsb3NlIHNjYWxlIGFuaW1hdGlvbiB0byB0aGUgY29ybmVyIG5lYXJlc3QgdGhlIGxhdW5jaGVyIGJ1YmJsZS5cbmZ1bmN0aW9uIGdldFRyYW5zZm9ybU9yaWdpbihwb3NpdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzogcmV0dXJuICdib3R0b20gbGVmdCc7XG4gICAgY2FzZSAndG9wLXJpZ2h0JzogcmV0dXJuICd0b3AgcmlnaHQnO1xuICAgIGNhc2UgJ3RvcC1sZWZ0JzogcmV0dXJuICd0b3AgbGVmdCc7XG4gICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICBkZWZhdWx0OiByZXR1cm4gJ2JvdHRvbSByaWdodCc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZsb2F0aW5nQ29udGFpbmVyU3R5bGUocDogRmxvYXRpbmdDb250YWluZXJQYXJhbXMpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2Zvcm1PcmlnaW46IGdldFRyYW5zZm9ybU9yaWdpbihwLnBvc2l0aW9uKSxcbiAgICAuLi4oKHAubW9kZSA9PT0gJ2Z1bGxzY3JlZW4nIHx8IHAuaXNGdWxsc2NyZWVuKVxuICAgICAgPyB7XG4gICAgICAgICAgcG9zaXRpb246ICdmaXhlZCcgYXMgY29uc3QsXG4gICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgYm90dG9tOiAnZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20sIDBweCknLFxuICAgICAgICAgIGJvcmRlclJhZGl1czogJzAnLFxuICAgICAgICAgIHpJbmRleDogOTk5OSxcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgLi4uZ2V0Q2hhdFBvc2l0aW9uU3R5bGVzKHsgcG9zaXRpb246IHAucG9zaXRpb24sIG9mZnNldFg6IHAub2Zmc2V0WCwgb2Zmc2V0WTogcC5vZmZzZXRZIH0pLFxuICAgICAgICAgIC4uLmdldFJlc3BvbnNpdmVEaW1lbnNpb25zKHsgaXNGdWxsc2NyZWVuOiBwLmlzRnVsbHNjcmVlbiwgbW9kZTogcC5tb2RlLCBpc0V4cGFuZGVkOiBwLmlzRXhwYW5kZWQgfSksXG4gICAgICAgICAgLi4uKHAubW9kZSA9PT0gJ2Zsb2F0aW5nJyAmJiAhcC5pc0Z1bGxzY3JlZW4gPyBnZXRGbG9hdGluZ1NoZWxsU3R5bGUoeyB3aW5kb3dIZWlnaHQ6IHAud2luZG93SGVpZ2h0LCBvZmZzZXRZOiBwLm9mZnNldFksIHBvc2l0aW9uOiBwLnBvc2l0aW9uLCBpc0V4cGFuZGVkOiBwLmlzRXhwYW5kZWQgfSkgOiB7fSksXG4gICAgICAgICAgLy8gU21vb3RoLCBzaW1wbGUgZWFzZSBmb3IgdGhlIG1heGltaXplL21pbmltaXplIChleHBhbmQvY29sbGFwc2UpIHJlc2l6ZS5cbiAgICAgICAgICB0cmFuc2l0aW9uOiAnd2lkdGggMjgwbXMgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSksIGhlaWdodCAyODBtcyBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKSwgbWF4LWhlaWdodCAyODBtcyBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKScsXG4gICAgICAgIH1cbiAgICApLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgQ1NTX0tFWUZSQU1FUyA9IGBcbiAgQGtleWZyYW1lcyBibGluayB7IDAlIHsgb3BhY2l0eTogMC4yOyB9IDIwJSB7IG9wYWNpdHk6IDE7IH0gMTAwJSB7IG9wYWNpdHk6IDAuMjsgfSB9XG4gIC5nYS10ZXh0YXJlYS1ub3NiIHtcbiAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7XG4gICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB9XG4gIC5nYS10ZXh0YXJlYS1ub3NiOjotd2Via2l0LXNjcm9sbGJhciB7IHdpZHRoOiAwOyBoZWlnaHQ6IDA7IH1cbiAgLmdhLWlucHV0LWRpc2NsYWltZXIgYSB7XG4gICAgY29sb3I6ICM5Y2EzYWYgIWltcG9ydGFudDtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgfVxuICAuZ2EtaW5wdXQtZGlzY2xhaW1lciBhOmhvdmVyIHtcbiAgICBjb2xvcjogIzZiNzI4MCAhaW1wb3J0YW50O1xuICB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5nYS10ZXh0YXJlYS1ub3NiIHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxuICBAa2V5ZnJhbWVzIGdhLWJhY2tsaWdodC1zd2VlcDIgeyAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzUlKTsgfSAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwNSUpOyB9IH1cbiAgQGtleWZyYW1lcyBnYS1iYWNrbGlnaHQtcHVsc2UgeyAwJSwxMDAlIHsgb3BhY2l0eTogMC43OyB9IDUwJSB7IG9wYWNpdHk6IDE7IH0gfVxuICBAa2V5ZnJhbWVzIGdhLXRoaW5rLWNoYW5nZSB7IDAlIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCk7IH0gMTAwJSB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfSB9XG4gIEBrZXlmcmFtZXMgZ2Etd2lkZ2V0LWluIHtcbiAgICBmcm9tIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDE2cHgpIHNjYWxlKDAuOTYpOyB9XG4gICAgdG8gICB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSBzY2FsZSgxKTsgfVxuICB9XG4gIEBrZXlmcmFtZXMgZ2Etd2lkZ2V0LW91dCB7XG4gICAgZnJvbSB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSBzY2FsZSgxKTsgfVxuICAgIHRvICAgeyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTZweCkgc2NhbGUoMC45Nik7IH1cbiAgfVxuICAvKiBmaWxsIGJhY2t3YXJkcyAobm90IGJvdGgpOiBrZWVwIHRoZSBlbnRyYW5jZS1mcm9tIHN0YXRlLCBidXQgZHJvcCB0aGUgdHJhbnNmb3JtIGF0IHJlc3Qgc28gaXRcbiAgICAgZG9lcyBub3QgYmVjb21lIGEgY29udGFpbmluZyBibG9jayBmb3IgdGhlIGlubmVyIGZpeGVkLXBvc2l0aW9uIGZ1bGxzY3JlZW4gcGFuZWwuICovXG4gIC5nYS13aWRnZXQtaW4gIHsgYW5pbWF0aW9uOiBnYS13aWRnZXQtaW4gMjYwbXMgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSkgYmFja3dhcmRzOyB9XG4gIC5nYS13aWRnZXQtb3V0IHsgYW5pbWF0aW9uOiBnYS13aWRnZXQtb3V0IDIwMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDEsIDEpIGJvdGg7IH1cbiAgQGtleWZyYW1lcyBnYS1idWJibGUtaW4ge1xuICAgIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHNjYWxlKDAuOCk7IH1cbiAgICB0byAgIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfVxuICB9XG4gIEBrZXlmcmFtZXMgZ2EtcXVpY2tpbnB1dC1pbiB7XG4gICAgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogc2NhbGUoMC45NCk7IH1cbiAgICB0byAgIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfVxuICB9XG4gIC5nYS1xdWljayAuZ2EtcXVpY2steCB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOCk7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAxNjBtcyBlYXNlLCB0cmFuc2Zvcm0gMTYwbXMgZWFzZTtcbiAgfVxuICAuZ2EtcXVpY2s6aG92ZXIgLmdhLXF1aWNrLXgge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgfVxuICAuZ2EtaGVhZGVyLWJ0biB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2U7IH1cbiAgLmdhLWhlYWRlci1idG46aG92ZXIgeyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDYpOyB9XG4gIC8qIE1lbnUgcG9wb3ZlciBpdGVtczogc2hhZGNuLXN0eWxlIGhvdmVyIGhpZ2hsaWdodCAoYmctYWNjZW50KS4gLS1nYS1ob3ZlciBpcyB0aGVcbiAgICAgdGhlbWUncyBzZWNvbmRhcnkgY29sb3IsIHNldCBvbiB0aGUgd2lkZ2V0IHJvb3QuICovXG4gIC5nYS1tZW51LWl0ZW0geyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2U7IH1cbiAgLmdhLW1lbnUtaXRlbTpob3ZlciB7IGJhY2tncm91bmQtY29sb3I6IHZhcigtLWdhLWhvdmVyLCAjZjRmNGY1KTsgfVxuICAvKiBSZXNldCBkaWFsb2cgYnV0dG9uczogZGVzdHJ1Y3RpdmUgaG92ZXIgKHJlZC03MDApICsgb3V0bGluZS1jYW5jZWwgaG92ZXIgKGJnLWFjY2VudCkuICovXG4gIC5nYS1jb25maXJtLWJ0bi0tZGFuZ2VyOmhvdmVyIHsgYmFja2dyb3VuZC1jb2xvcjogI2I5MWMxYzsgfVxuICAuZ2EtY29uZmlybS1idG4tLWNhbmNlbDpob3ZlciB7IGJhY2tncm91bmQtY29sb3I6IHZhcigtLWdhLWhvdmVyLCAjZjRmNGY1KTsgfVxuICAvKiBIb3ZlcmluZyB0aGUgbGVmdCBsb2dvIHNlY3Rpb24gcmV2ZWFscyB0aGUgZXhwYW5kIGJ1dHRvbiAoY29sbGFwc2VkIHRvIDAgd2lkdGhcbiAgICAgYnkgZGVmYXVsdCksIHdoaWNoIHB1c2hlcyB0aGUgbG9nby9uYW1lIGdyb3VwIHRvIHRoZSByaWdodCBmb3IgYSBzbGlkZS1pbi5cbiAgICAgU2NvcGVkIHRvIC5nYS1oZWFkZXItbGVmdCBzbyBob3ZlcmluZyB0aGUgcmlnaHQtc2lkZSBidXR0b25zIG5ldmVyIHRyaWdnZXJzIGl0LiAqL1xuICAuZ2EtaGVhZGVyLWV4cGFuZC1idG4ge1xuICAgIHdpZHRoOiAwO1xuICAgIG1pbi13aWR0aDogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjg1KTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAyNjBtcyBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKSwgb3BhY2l0eSAyMDBtcyBlYXNlLCB0cmFuc2Zvcm0gMjAwbXMgZWFzZTtcbiAgfVxuICAuZ2EtaGVhZGVyLWxlZnQ6aG92ZXIgLmdhLWhlYWRlci1leHBhbmQtYnRuLFxuICAuZ2EtaGVhZGVyLWxlZnQ6Zm9jdXMtd2l0aGluIC5nYS1oZWFkZXItZXhwYW5kLWJ0biB7XG4gICAgd2lkdGg6IDMycHg7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICB9XG4gIC8qIEhvdmVyaW5nIHRoZSBsZWZ0IGxvZ28gc2VjdGlvbiByZXZlYWxzIHRoZSBhZ2VudCBkZXNjcmlwdGlvbiAoY29sbGFwc2VkIGJ5IGRlZmF1bHQpLiAqL1xuICAuZ2EtaGVhZGVyLWRlc2Mge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAwZnI7XG4gICAgdHJhbnNpdGlvbjogZ3JpZC10ZW1wbGF0ZS1yb3dzIDI2MG1zIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICB9XG4gIC5nYS1oZWFkZXItbGVmdDpob3ZlciAuZ2EtaGVhZGVyLWRlc2MsXG4gIC5nYS1oZWFkZXItbGVmdDpmb2N1cy13aXRoaW4gLmdhLWhlYWRlci1kZXNjIHtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjtcbiAgfVxuICAuZ2EtaGVhZGVyLWRlc2MtaW5uZXIgeyBvdmVyZmxvdzogaGlkZGVuOyBtaW4taGVpZ2h0OiAwOyB9XG4gIC5nYS1oZWFkZXItZGVzYy10ZXh0IHsgb3BhY2l0eTogMDsgdHJhbnNpdGlvbjogb3BhY2l0eSAyMDBtcyBlYXNlOyB9XG4gIC5nYS1oZWFkZXItbGVmdDpob3ZlciAuZ2EtaGVhZGVyLWRlc2MtdGV4dCxcbiAgLmdhLWhlYWRlci1sZWZ0OmZvY3VzLXdpdGhpbiAuZ2EtaGVhZGVyLWRlc2MtdGV4dCB7IG9wYWNpdHk6IDE7IH1cbiAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgICAuZ2EtaGVhZGVyLWV4cGFuZC1idG4sIC5nYS1oZWFkZXItZGVzYywgLmdhLWhlYWRlci1kZXNjLXRleHQgeyB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7IH1cbiAgfVxuICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAgIC5nYS13aWRnZXQtaW4sIC5nYS13aWRnZXQtb3V0IHsgYW5pbWF0aW9uOiBub25lICFpbXBvcnRhbnQ7IH1cbiAgICAuZ2EtcXVpY2sgeyBhbmltYXRpb246IG5vbmUgIWltcG9ydGFudDsgfVxuICB9XG4gIC5ncmVjYXB0Y2hhLWJhZGdlIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gICAgd2lkdGg6IDAgIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IDAgIWltcG9ydGFudDtcbiAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgb3BhY2l0eTogMCAhaW1wb3J0YW50O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbmA7XG4iXX0=
|
package/dist/types/index.d.ts
CHANGED
|
@@ -43,6 +43,7 @@ export interface StartConversationResponse {
|
|
|
43
43
|
agent_thinking_phrases?: string[];
|
|
44
44
|
agent_thinking_phrase_delay?: number;
|
|
45
45
|
agent_chat_input_metadata?: Record<string, unknown>;
|
|
46
|
+
agent_trigger_start_form?: boolean;
|
|
46
47
|
agent_input_disclaimer_html?: string;
|
|
47
48
|
create_time?: number;
|
|
48
49
|
guest_token?: string;
|
|
@@ -55,6 +56,18 @@ export interface AgentInfoResponse {
|
|
|
55
56
|
/** True when live voice is usable (a Gemini provider with an API key is configured). */
|
|
56
57
|
live_voice_ready?: boolean;
|
|
57
58
|
}
|
|
59
|
+
/** HITL form field strings for one locale; `options` maps option value -> label. */
|
|
60
|
+
export interface FormFieldLocale {
|
|
61
|
+
label?: string;
|
|
62
|
+
placeholder?: string;
|
|
63
|
+
description?: string;
|
|
64
|
+
options?: Record<string, string>;
|
|
65
|
+
}
|
|
66
|
+
/** One HITL node's form strings for a locale, keyed by field name. */
|
|
67
|
+
export interface FormNodeLocale {
|
|
68
|
+
message?: string;
|
|
69
|
+
fields?: Record<string, FormFieldLocale>;
|
|
70
|
+
}
|
|
58
71
|
/** Per-locale agent strings (welcome, quick queries, thinking) from GET .../agent-chat-locales */
|
|
59
72
|
export interface AgentChatLocaleContent {
|
|
60
73
|
welcome_message?: string | null;
|
|
@@ -62,6 +75,8 @@ export interface AgentChatLocaleContent {
|
|
|
62
75
|
input_disclaimer_html?: string | null;
|
|
63
76
|
possible_queries?: string[];
|
|
64
77
|
thinking_phrases?: string[];
|
|
78
|
+
/** HITL form strings, keyed by node id. */
|
|
79
|
+
nodes?: Record<string, FormNodeLocale>;
|
|
65
80
|
}
|
|
66
81
|
export interface AgentChatLocalesResponse {
|
|
67
82
|
agent_id?: string;
|
|
@@ -145,6 +160,7 @@ export interface GenAgentChatProps {
|
|
|
145
160
|
placeholder?: string;
|
|
146
161
|
agentName?: string;
|
|
147
162
|
logoUrl?: string;
|
|
163
|
+
brandLogoUrl?: string;
|
|
148
164
|
mode?: "embedded" | "floating" | "fullscreen";
|
|
149
165
|
/** Called when the user presses Escape in `mode="fullscreen"`. Use this to switch the parent back to floating/embedded. */
|
|
150
166
|
onExitFullscreen?: () => void;
|
|
@@ -161,6 +177,7 @@ export interface GenAgentChatProps {
|
|
|
161
177
|
translations?: Partial<Translations>;
|
|
162
178
|
reCaptchaKey?: string;
|
|
163
179
|
widget?: boolean;
|
|
180
|
+
quickInput?: boolean;
|
|
164
181
|
useAudio?: boolean;
|
|
165
182
|
useFile?: boolean;
|
|
166
183
|
noColorAnimation?: boolean;
|