1 | ;
|
2 | var _a, _b, _c, _d, _e;
|
3 | Object.defineProperty(exports, "__esModule", { value: true });
|
4 | exports.LegendPosition = exports.Color = exports.Shading = exports.CustomWidget = exports.SingleValueWidget = exports.GraphWidget = exports.GraphWidgetView = exports.AlarmWidget = void 0;
|
5 | const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
|
6 | const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
7 | const cdk = require("@aws-cdk/core");
|
8 | const rendering_1 = require("./private/rendering");
|
9 | const widget_1 = require("./widget");
|
10 | /**
|
11 | * Display the metric associated with an alarm, including the alarm line
|
12 | */
|
13 | class AlarmWidget extends widget_1.ConcreteWidget {
|
14 | constructor(props) {
|
15 | super(props.width || 6, props.height || 6);
|
16 | try {
|
17 | jsiiDeprecationWarnings._aws_cdk_aws_cloudwatch_AlarmWidgetProps(props);
|
18 | }
|
19 | catch (error) {
|
20 | if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
21 | Error.captureStackTrace(error, AlarmWidget);
|
22 | }
|
23 | throw error;
|
24 | }
|
25 | this.props = props;
|
26 | }
|
27 | toJson() {
|
28 | return [{
|
29 | type: 'metric',
|
30 | width: this.width,
|
31 | height: this.height,
|
32 | x: this.x,
|
33 | y: this.y,
|
34 | properties: {
|
35 | view: 'timeSeries',
|
36 | title: this.props.title,
|
37 | region: this.props.region || cdk.Aws.REGION,
|
38 | annotations: {
|
39 | alarms: [this.props.alarm.alarmArn],
|
40 | },
|
41 | yAxis: {
|
42 | left: this.props.leftYAxis ?? undefined,
|
43 | },
|
44 | },
|
45 | }];
|
46 | }
|
47 | }
|
48 | exports.AlarmWidget = AlarmWidget;
|
49 | _a = JSII_RTTI_SYMBOL_1;
|
50 | AlarmWidget[_a] = { fqn: "@aws-cdk/aws-cloudwatch.AlarmWidget", version: "1.198.0" };
|
51 | /**
|
52 | * Types of view
|
53 | */
|
54 | var GraphWidgetView;
|
55 | (function (GraphWidgetView) {
|
56 | /**
|
57 | * Display as a line graph.
|
58 | */
|
59 | GraphWidgetView["TIME_SERIES"] = "timeSeries";
|
60 | /**
|
61 | * Display as a bar graph.
|
62 | */
|
63 | GraphWidgetView["BAR"] = "bar";
|
64 | /**
|
65 | * Display as a pie graph.
|
66 | */
|
67 | GraphWidgetView["PIE"] = "pie";
|
68 | })(GraphWidgetView = exports.GraphWidgetView || (exports.GraphWidgetView = {}));
|
69 | /**
|
70 | * A dashboard widget that displays metrics
|
71 | */
|
72 | class GraphWidget extends widget_1.ConcreteWidget {
|
73 | constructor(props) {
|
74 | super(props.width || 6, props.height || 6);
|
75 | try {
|
76 | jsiiDeprecationWarnings._aws_cdk_aws_cloudwatch_GraphWidgetProps(props);
|
77 | }
|
78 | catch (error) {
|
79 | if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
80 | Error.captureStackTrace(error, GraphWidget);
|
81 | }
|
82 | throw error;
|
83 | }
|
84 | this.props = props;
|
85 | this.leftMetrics = props.left ?? [];
|
86 | this.rightMetrics = props.right ?? [];
|
87 | this.copyMetricWarnings(...this.leftMetrics, ...this.rightMetrics);
|
88 | }
|
89 | /**
|
90 | * Add another metric to the left Y axis of the GraphWidget
|
91 | *
|
92 | * @param metric the metric to add
|
93 | */
|
94 | addLeftMetric(metric) {
|
95 | try {
|
96 | jsiiDeprecationWarnings._aws_cdk_aws_cloudwatch_IMetric(metric);
|
97 | }
|
98 | catch (error) {
|
99 | if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
100 | Error.captureStackTrace(error, this.addLeftMetric);
|
101 | }
|
102 | throw error;
|
103 | }
|
104 | this.leftMetrics.push(metric);
|
105 | this.copyMetricWarnings(metric);
|
106 | }
|
107 | /**
|
108 | * Add another metric to the right Y axis of the GraphWidget
|
109 | *
|
110 | * @param metric the metric to add
|
111 | */
|
112 | addRightMetric(metric) {
|
113 | try {
|
114 | jsiiDeprecationWarnings._aws_cdk_aws_cloudwatch_IMetric(metric);
|
115 | }
|
116 | catch (error) {
|
117 | if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
118 | Error.captureStackTrace(error, this.addRightMetric);
|
119 | }
|
120 | throw error;
|
121 | }
|
122 | this.rightMetrics.push(metric);
|
123 | this.copyMetricWarnings(metric);
|
124 | }
|
125 | toJson() {
|
126 | const horizontalAnnotations = [
|
127 | ...(this.props.leftAnnotations || []).map(mapAnnotation('left')),
|
128 | ...(this.props.rightAnnotations || []).map(mapAnnotation('right')),
|
129 | ];
|
130 | const metrics = rendering_1.allMetricsGraphJson(this.leftMetrics, this.rightMetrics);
|
131 | return [{
|
132 | type: 'metric',
|
133 | width: this.width,
|
134 | height: this.height,
|
135 | x: this.x,
|
136 | y: this.y,
|
137 | properties: {
|
138 | view: this.props.view ?? GraphWidgetView.TIME_SERIES,
|
139 | title: this.props.title,
|
140 | region: this.props.region || cdk.Aws.REGION,
|
141 | stacked: this.props.stacked,
|
142 | metrics: metrics.length > 0 ? metrics : undefined,
|
143 | annotations: horizontalAnnotations.length > 0 ? { horizontal: horizontalAnnotations } : undefined,
|
144 | yAxis: {
|
145 | left: this.props.leftYAxis ?? undefined,
|
146 | right: this.props.rightYAxis ?? undefined,
|
147 | },
|
148 | legend: this.props.legendPosition !== undefined ? { position: this.props.legendPosition } : undefined,
|
149 | liveData: this.props.liveData,
|
150 | setPeriodToTimeRange: this.props.setPeriodToTimeRange,
|
151 | period: this.props.period?.toSeconds(),
|
152 | stat: this.props.statistic,
|
153 | },
|
154 | }];
|
155 | }
|
156 | }
|
157 | exports.GraphWidget = GraphWidget;
|
158 | _b = JSII_RTTI_SYMBOL_1;
|
159 | GraphWidget[_b] = { fqn: "@aws-cdk/aws-cloudwatch.GraphWidget", version: "1.198.0" };
|
160 | /**
|
161 | * A dashboard widget that displays the most recent value for every metric
|
162 | */
|
163 | class SingleValueWidget extends widget_1.ConcreteWidget {
|
164 | constructor(props) {
|
165 | super(props.width || 6, props.height || 3);
|
166 | try {
|
167 | jsiiDeprecationWarnings._aws_cdk_aws_cloudwatch_SingleValueWidgetProps(props);
|
168 | }
|
169 | catch (error) {
|
170 | if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
171 | Error.captureStackTrace(error, SingleValueWidget);
|
172 | }
|
173 | throw error;
|
174 | }
|
175 | this.props = props;
|
176 | this.copyMetricWarnings(...props.metrics);
|
177 | }
|
178 | toJson() {
|
179 | return [{
|
180 | type: 'metric',
|
181 | width: this.width,
|
182 | height: this.height,
|
183 | x: this.x,
|
184 | y: this.y,
|
185 | properties: {
|
186 | view: 'singleValue',
|
187 | title: this.props.title,
|
188 | region: this.props.region || cdk.Aws.REGION,
|
189 | metrics: rendering_1.allMetricsGraphJson(this.props.metrics, []),
|
190 | setPeriodToTimeRange: this.props.setPeriodToTimeRange,
|
191 | singleValueFullPrecision: this.props.fullPrecision,
|
192 | },
|
193 | }];
|
194 | }
|
195 | }
|
196 | exports.SingleValueWidget = SingleValueWidget;
|
197 | _c = JSII_RTTI_SYMBOL_1;
|
198 | SingleValueWidget[_c] = { fqn: "@aws-cdk/aws-cloudwatch.SingleValueWidget", version: "1.198.0" };
|
199 | /**
|
200 | * A CustomWidget shows the result of a AWS lambda function
|
201 | */
|
202 | class CustomWidget extends widget_1.ConcreteWidget {
|
203 | constructor(props) {
|
204 | super(props.width ?? 6, props.height ?? 6);
|
205 | try {
|
206 | jsiiDeprecationWarnings._aws_cdk_aws_cloudwatch_CustomWidgetProps(props);
|
207 | }
|
208 | catch (error) {
|
209 | if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
210 | Error.captureStackTrace(error, CustomWidget);
|
211 | }
|
212 | throw error;
|
213 | }
|
214 | this.props = props;
|
215 | }
|
216 | toJson() {
|
217 | return [{
|
218 | type: 'custom',
|
219 | width: this.width,
|
220 | height: this.height,
|
221 | x: this.x,
|
222 | y: this.y,
|
223 | properties: {
|
224 | endpoint: this.props.functionArn,
|
225 | params: this.props.params,
|
226 | title: this.props.title,
|
227 | updateOn: {
|
228 | refresh: this.props.updateOnRefresh ?? true,
|
229 | resize: this.props.updateOnResize ?? true,
|
230 | timeRange: this.props.updateOnTimeRangeChange ?? true,
|
231 | },
|
232 | },
|
233 | }];
|
234 | }
|
235 | }
|
236 | exports.CustomWidget = CustomWidget;
|
237 | _d = JSII_RTTI_SYMBOL_1;
|
238 | CustomWidget[_d] = { fqn: "@aws-cdk/aws-cloudwatch.CustomWidget", version: "1.198.0" };
|
239 | /**
|
240 | * Fill shading options that will be used with an annotation
|
241 | */
|
242 | var Shading;
|
243 | (function (Shading) {
|
244 | /**
|
245 | * Don't add shading
|
246 | */
|
247 | Shading["NONE"] = "none";
|
248 | /**
|
249 | * Add shading above the annotation
|
250 | */
|
251 | Shading["ABOVE"] = "above";
|
252 | /**
|
253 | * Add shading below the annotation
|
254 | */
|
255 | Shading["BELOW"] = "below";
|
256 | })(Shading = exports.Shading || (exports.Shading = {}));
|
257 | /**
|
258 | * A set of standard colours that can be used in annotations in a GraphWidget.
|
259 | */
|
260 | class Color {
|
261 | constructor() { }
|
262 | }
|
263 | exports.Color = Color;
|
264 | _e = JSII_RTTI_SYMBOL_1;
|
265 | Color[_e] = { fqn: "@aws-cdk/aws-cloudwatch.Color", version: "1.198.0" };
|
266 | /** blue - hex #1f77b4 */
|
267 | Color.BLUE = '#1f77b4';
|
268 | /** brown - hex #8c564b */
|
269 | Color.BROWN = '#8c564b';
|
270 | /** green - hex #2ca02c */
|
271 | Color.GREEN = '#2ca02c';
|
272 | /** grey - hex #7f7f7f */
|
273 | Color.GREY = '#7f7f7f';
|
274 | /** orange - hex #ff7f0e */
|
275 | Color.ORANGE = '#ff7f0e';
|
276 | /** pink - hex #e377c2 */
|
277 | Color.PINK = '#e377c2';
|
278 | /** purple - hex #9467bd */
|
279 | Color.PURPLE = '#9467bd';
|
280 | /** red - hex #d62728 */
|
281 | Color.RED = '#d62728';
|
282 | /**
|
283 | * The position of the legend on a GraphWidget.
|
284 | */
|
285 | var LegendPosition;
|
286 | (function (LegendPosition) {
|
287 | /**
|
288 | * Legend appears below the graph (default).
|
289 | */
|
290 | LegendPosition["BOTTOM"] = "bottom";
|
291 | /**
|
292 | * Add shading above the annotation
|
293 | */
|
294 | LegendPosition["RIGHT"] = "right";
|
295 | /**
|
296 | * Add shading below the annotation
|
297 | */
|
298 | LegendPosition["HIDDEN"] = "hidden";
|
299 | })(LegendPosition = exports.LegendPosition || (exports.LegendPosition = {}));
|
300 | function mapAnnotation(yAxis) {
|
301 | return (a) => {
|
302 | return { ...a, yAxis };
|
303 | };
|
304 | }
|
305 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJncmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxQ0FBcUM7QUFHckMsbURBQTBEO0FBQzFELHFDQUEwQztBQXNGMUM7O0dBRUc7QUFDSCxNQUFhLFdBQVksU0FBUSx1QkFBYztJQUc3QyxZQUFZLEtBQXVCO1FBQ2pDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDOzs7Ozs7K0NBSmxDLFdBQVc7Ozs7UUFLcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7S0FDcEI7SUFFTSxNQUFNO1FBQ1gsT0FBTyxDQUFDO2dCQUNOLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ1QsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNULFVBQVUsRUFBRTtvQkFDVixJQUFJLEVBQUUsWUFBWTtvQkFDbEIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSztvQkFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTTtvQkFDM0MsV0FBVyxFQUFFO3dCQUNYLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztxQkFDcEM7b0JBQ0QsS0FBSyxFQUFFO3dCQUNMLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxTQUFTO3FCQUN4QztpQkFDRjthQUNGLENBQUMsQ0FBQztLQUNKOztBQTNCSCxrQ0E0QkM7OztBQUVEOztHQUVHO0FBQ0gsSUFBWSxlQWFYO0FBYkQsV0FBWSxlQUFl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RyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdAYXdzLWNkay9jb3JlJztcbmltcG9ydCB7IElBbGFybSB9IGZyb20gJy4vYWxhcm0tYmFzZSc7XG5pbXBvcnQgeyBJTWV0cmljIH0gZnJvbSAnLi9tZXRyaWMtdHlwZXMnO1xuaW1wb3J0IHsgYWxsTWV0cmljc0dyYXBoSnNvbiB9IGZyb20gJy4vcHJpdmF0ZS9yZW5kZXJpbmcnO1xuaW1wb3J0IHsgQ29uY3JldGVXaWRnZXQgfSBmcm9tICcuL3dpZGdldCc7XG5cbi8qKlxuICogQmFzaWMgcHJvcGVydGllcyBmb3Igd2lkZ2V0cyB0aGF0IGRpc3BsYXkgbWV0cmljc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE1ldHJpY1dpZGdldFByb3BzIHtcbiAgLyoqXG4gICAqIFRpdGxlIGZvciB0aGUgZ3JhcGhcbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlZ2lvbiB0aGUgbWV0cmljcyBvZiB0aGlzIGdyYXBoIHNob3VsZCBiZSB0YWtlbiBmcm9tXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ3VycmVudCByZWdpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogV2lkdGggb2YgdGhlIHdpZGdldCwgaW4gYSBncmlkIG9mIDI0IHVuaXRzIHdpZGVcbiAgICpcbiAgICogQGRlZmF1bHQgNlxuICAgKi9cbiAgcmVhZG9ubHkgd2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhlaWdodCBvZiB0aGUgd2lkZ2V0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gNiBmb3IgQWxhcm0gYW5kIEdyYXBoIHdpZGdldHMuXG4gICAqICAgMyBmb3Igc2luZ2xlIHZhbHVlIHdpZGdldHMgd2hlcmUgbW9zdCByZWNlbnQgdmFsdWUgb2YgYSBtZXRyaWMgaXMgZGlzcGxheWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaGVpZ2h0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGEgWS1BeGlzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWUF4aXNQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbWluIHZhbHVlXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHJlYWRvbmx5IG1pbj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1heCB2YWx1ZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIG1heGltdW0gdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IG1heD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGxhYmVsXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gbGFiZWxcbiAgICovXG4gIHJlYWRvbmx5IGxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3cgdW5pdHNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd1VuaXRzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhbiBBbGFybVdpZGdldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFsYXJtV2lkZ2V0UHJvcHMgZXh0ZW5kcyBNZXRyaWNXaWRnZXRQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgYWxhcm0gdG8gc2hvd1xuICAgKi9cbiAgcmVhZG9ubHkgYWxhcm06IElBbGFybTtcblxuICAvKipcbiAgICogTGVmdCBZIGF4aXNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBtaW5pbXVtIG9yIG1heGltdW0gdmFsdWVzIGZvciB0aGUgbGVmdCBZLWF4aXNcbiAgICovXG4gIHJlYWRvbmx5IGxlZnRZQXhpcz86IFlBeGlzUHJvcHM7XG59XG5cbi8qKlxuICogRGlzcGxheSB0aGUgbWV0cmljIGFzc29jaWF0ZWQgd2l0aCBhbiBhbGFybSwgaW5jbHVkaW5nIHRoZSBhbGFybSBsaW5lXG4gKi9cbmV4cG9ydCBjbGFzcyBBbGFybVdpZGdldCBleHRlbmRzIENvbmNyZXRlV2lkZ2V0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogQWxhcm1XaWRnZXRQcm9wcztcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQWxhcm1XaWRnZXRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzLndpZHRoIHx8IDYsIHByb3BzLmhlaWdodCB8fCA2KTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIH1cblxuICBwdWJsaWMgdG9Kc29uKCk6IGFueVtdIHtcbiAgICByZXR1cm4gW3tcbiAgICAgIHR5cGU6ICdtZXRyaWMnLFxuICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxuICAgICAgeDogdGhpcy54LFxuICAgICAgeTogdGhpcy55LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB2aWV3OiAndGltZVNlcmllcycsXG4gICAgICAgIHRpdGxlOiB0aGlzLnByb3BzLnRpdGxlLFxuICAgICAgICByZWdpb246IHRoaXMucHJvcHMucmVnaW9uIHx8IGNkay5Bd3MuUkVHSU9OLFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgIGFsYXJtczogW3RoaXMucHJvcHMuYWxhcm0uYWxhcm1Bcm5dLFxuICAgICAgICB9LFxuICAgICAgICB5QXhpczoge1xuICAgICAgICAgIGxlZnQ6IHRoaXMucHJvcHMubGVmdFlBeGlzID8/IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfV07XG4gIH1cbn1cblxuLyoqXG4gKiBUeXBlcyBvZiB2aWV3XG4gKi9cbmV4cG9ydCBlbnVtIEdyYXBoV2lkZ2V0VmlldyB7XG4gIC8qKlxuICAgKiBEaXNwbGF5IGFzIGEgbGluZSBncmFwaC5cbiAgICovXG4gIFRJTUVfU0VSSUVTID0gJ3RpbWVTZXJpZXMnLFxuICAvKipcbiAgICogRGlzcGxheSBhcyBhIGJhciBncmFwaC5cbiAgICovXG4gIEJBUiA9ICdiYXInLFxuICAvKipcbiAgICogRGlzcGxheSBhcyBhIHBpZSBncmFwaC5cbiAgICovXG4gIFBJRSA9ICdwaWUnLFxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGEgR3JhcGhXaWRnZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaFdpZGdldFByb3BzIGV4dGVuZHMgTWV0cmljV2lkZ2V0UHJvcHMge1xuICAvKipcbiAgICogTWV0cmljcyB0byBkaXNwbGF5IG9uIGxlZnQgWSBheGlzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gbWV0cmljc1xuICAgKi9cbiAgcmVhZG9ubHkgbGVmdD86IElNZXRyaWNbXTtcblxuICAvKipcbiAgICogTWV0cmljcyB0byBkaXNwbGF5IG9uIHJpZ2h0IFkgYXhpc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIG1ldHJpY3NcbiAgICovXG4gIHJlYWRvbmx5IHJpZ2h0PzogSU1ldHJpY1tdO1xuXG4gIC8qKlxuICAgKiBBbm5vdGF0aW9ucyBmb3IgdGhlIGxlZnQgWSBheGlzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gYW5ub3RhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGxlZnRBbm5vdGF0aW9ucz86IEhvcml6b250YWxBbm5vdGF0aW9uW107XG5cbiAgLyoqXG4gICAqIEFubm90YXRpb25zIGZvciB0aGUgcmlnaHQgWSBheGlzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gYW5ub3RhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHJpZ2h0QW5ub3RhdGlvbnM/OiBIb3Jpem9udGFsQW5ub3RhdGlvbltdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBncmFwaCBzaG91bGQgYmUgc2hvd24gYXMgc3RhY2tlZCBsaW5lc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExlZnQgWSBheGlzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbGVmdFlBeGlzPzogWUF4aXNQcm9wcztcblxuICAvKipcbiAgICogUmlnaHQgWSBheGlzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgcmlnaHRZQXhpcz86IFlBeGlzUHJvcHM7XG5cbiAgLyoqXG4gICAqIFBvc2l0aW9uIG9mIHRoZSBsZWdlbmRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBib3R0b21cbiAgICovXG4gIHJlYWRvbmx5IGxlZ2VuZFBvc2l0aW9uPzogTGVnZW5kUG9zaXRpb247XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGdyYXBoIHNob3VsZCBzaG93IGxpdmUgZGF0YVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbGl2ZURhdGE/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoaXMgbWV0cmljXG4gICAqXG4gICAqIEBkZWZhdWx0IFRpbWVTZXJpZXNcbiAgICovXG4gIHJlYWRvbmx5IHZpZXc/OiBHcmFwaFdpZGdldFZpZXc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyB0aGUgdmFsdWUgZnJvbSB0aGUgZW50aXJlIHRpbWUgcmFuZ2UuIE9ubHkgYXBwbGljYWJsZSBmb3IgQmFyIGFuZCBQaWUgY2hhcnRzLlxuICAgKlxuICAgKiBJZiBmYWxzZSwgdmFsdWVzIHdpbGwgYmUgZnJvbSB0aGUgbW9zdCByZWNlbnQgcGVyaW9kIG9mIHlvdXIgY2hvc2VuIHRpbWUgcmFuZ2U7XG4gICAqIGlmIHRydWUsIHNob3dzIHRoZSB2YWx1ZSBmcm9tIHRoZSBlbnRpcmUgdGltZSByYW5nZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNldFBlcmlvZFRvVGltZVJhbmdlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgcGVyaW9kIGZvciBhbGwgbWV0cmljcyBpbiB0aGlzIHdpZGdldC5cbiAgICogVGhlIHBlcmlvZCBpcyB0aGUgbGVuZ3RoIG9mIHRpbWUgcmVwcmVzZW50ZWQgYnkgb25lIGRhdGEgcG9pbnQgb24gdGhlIGdyYXBoLlxuICAgKiBUaGlzIGRlZmF1bHQgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aGluIGVhY2ggbWV0cmljIGRlZmluaXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGNkay5EdXJhdGlvbi5zZWNvbmRzKDMwMClcbiAgICovXG4gIHJlYWRvbmx5IHBlcmlvZD86IGNkay5EdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgc3RhdGlzdGljIHRvIGJlIGRpc3BsYXllZCBmb3IgZWFjaCBtZXRyaWMuXG4gICAqIFRoaXMgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoaW4gdGhlIGRlZmluaXRpb24gb2YgZWFjaCBpbmRpdmlkdWFsIG1ldHJpY1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIFRoZSBzdGF0aXN0aWMgZm9yIGVhY2ggbWV0cmljIGlzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0YXRpc3RpYz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGRhc2hib2FyZCB3aWRnZXQgdGhhdCBkaXNwbGF5cyBtZXRyaWNzXG4gKi9cbmV4cG9ydCBjbGFzcyBHcmFwaFdpZGdldCBleHRlbmRzIENvbmNyZXRlV2lkZ2V0IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBHcmFwaFdpZGdldFByb3BzO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbGVmdE1ldHJpY3M6IElNZXRyaWNbXTtcbiAgcHJpdmF0ZSByZWFkb25seSByaWdodE1ldHJpY3M6IElNZXRyaWNbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogR3JhcGhXaWRnZXRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzLndpZHRoIHx8IDYsIHByb3BzLmhlaWdodCB8fCA2KTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5sZWZ0TWV0cmljcyA9IHByb3BzLmxlZnQgPz8gW107XG4gICAgdGhpcy5yaWdodE1ldHJpY3MgPSBwcm9wcy5yaWdodCA/PyBbXTtcbiAgICB0aGlzLmNvcHlNZXRyaWNXYXJuaW5ncyguLi50aGlzLmxlZnRNZXRyaWNzLCAuLi50aGlzLnJpZ2h0TWV0cmljcyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFub3RoZXIgbWV0cmljIHRvIHRoZSBsZWZ0IFkgYXhpcyBvZiB0aGUgR3JhcGhXaWRnZXRcbiAgICpcbiAgICogQHBhcmFtIG1ldHJpYyB0aGUgbWV0cmljIHRvIGFkZFxuICAgKi9cbiAgcHVibGljIGFkZExlZnRNZXRyaWMobWV0cmljOiBJTWV0cmljKSB7XG4gICAgdGhpcy5sZWZ0TWV0cmljcy5wdXNoKG1ldHJpYyk7XG4gICAgdGhpcy5jb3B5TWV0cmljV2FybmluZ3MobWV0cmljKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW5vdGhlciBtZXRyaWMgdG8gdGhlIHJpZ2h0IFkgYXhpcyBvZiB0aGUgR3JhcGhXaWRnZXRcbiAgICpcbiAgICogQHBhcmFtIG1ldHJpYyB0aGUgbWV0cmljIHRvIGFkZFxuICAgKi9cbiAgcHVibGljIGFkZFJpZ2h0TWV0cmljKG1ldHJpYzogSU1ldHJpYykge1xuICAgIHRoaXMucmlnaHRNZXRyaWNzLnB1c2gobWV0cmljKTtcbiAgICB0aGlzLmNvcHlNZXRyaWNXYXJuaW5ncyhtZXRyaWMpO1xuICB9XG5cbiAgcHVibGljIHRvSnNvbigpOiBhbnlbXSB7XG4gICAgY29uc3QgaG9yaXpvbnRhbEFubm90YXRpb25zID0gW1xuICAgICAgLi4uKHRoaXMucHJvcHMubGVmdEFubm90YXRpb25zIHx8IFtdKS5tYXAobWFwQW5ub3RhdGlvbignbGVmdCcpKSxcbiAgICAgIC4uLih0aGlzLnByb3BzLnJpZ2h0QW5ub3RhdGlvbnMgfHwgW10pLm1hcChtYXBBbm5vdGF0aW9uKCdyaWdodCcpKSxcbiAgICBdO1xuXG4gICAgY29uc3QgbWV0cmljcyA9IGFsbE1ldHJpY3NHcmFwaEpzb24odGhpcy5sZWZ0TWV0cmljcywgdGhpcy5yaWdodE1ldHJpY3MpO1xuICAgIHJldHVybiBbe1xuICAgICAgdHlwZTogJ21ldHJpYycsXG4gICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgICB4OiB0aGlzLngsXG4gICAgICB5OiB0aGlzLnksXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHZpZXc6IHRoaXMucHJvcHMudmlldyA/PyBHcmFwaFdpZGdldFZpZXcuVElNRV9TRVJJRVMsXG4gICAgICAgIHRpdGxlOiB0aGlzLnByb3BzLnRpdGxlLFxuICAgICAgICByZWdpb246IHRoaXMucHJvcHMucmVnaW9uIHx8IGNkay5Bd3MuUkVHSU9OLFxuICAgICAgICBzdGFja2VkOiB0aGlzLnByb3BzLnN0YWNrZWQsXG4gICAgICAgIG1ldHJpY3M6IG1ldHJpY3MubGVuZ3RoID4gMCA/IG1ldHJpY3MgOiB1bmRlZmluZWQsXG4gICAgICAgIGFubm90YXRpb25zOiBob3Jpem9udGFsQW5ub3RhdGlvbnMubGVuZ3RoID4gMCA/IHsgaG9yaXpvbnRhbDogaG9yaXpvbnRhbEFubm90YXRpb25zIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIHlBeGlzOiB7XG4gICAgICAgICAgbGVmdDogdGhpcy5wcm9wcy5sZWZ0WUF4aXMgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIHJpZ2h0OiB0aGlzLnByb3BzLnJpZ2h0WUF4aXMgPz8gdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICBsZWdlbmQ6IHRoaXMucHJvcHMubGVnZW5kUG9zaXRpb24gIT09IHVuZGVmaW5lZCA/IHsgcG9zaXRpb246IHRoaXMucHJvcHMubGVnZW5kUG9zaXRpb24gfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgbGl2ZURhdGE6IHRoaXMucHJvcHMubGl2ZURhdGEsXG4gICAgICAgIHNldFBlcmlvZFRvVGltZVJhbmdlOiB0aGlzLnByb3BzLnNldFBlcmlvZFRvVGltZVJhbmdlLFxuICAgICAgICBwZXJpb2Q6IHRoaXMucHJvcHMucGVyaW9kPy50b1NlY29uZHMoKSxcbiAgICAgICAgc3RhdDogdGhpcy5wcm9wcy5zdGF0aXN0aWMsXG4gICAgICB9LFxuICAgIH1dO1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBTaW5nbGVWYWx1ZVdpZGdldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpbmdsZVZhbHVlV2lkZ2V0UHJvcHMgZXh0ZW5kcyBNZXRyaWNXaWRnZXRQcm9wcyB7XG4gIC8qKlxuICAgKiBNZXRyaWNzIHRvIGRpc3BsYXlcbiAgICovXG4gIHJlYWRvbmx5IG1ldHJpY3M6IElNZXRyaWNbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBzaG93IHRoZSB2YWx1ZSBmcm9tIHRoZSBlbnRpcmUgdGltZSByYW5nZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNldFBlcmlvZFRvVGltZVJhbmdlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBzaG93IGFzIG1hbnkgZGlnaXRzIGFzIGNhbiBmaXQsIGJlZm9yZSByb3VuZGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGZ1bGxQcmVjaXNpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgZGFzaGJvYXJkIHdpZGdldCB0aGF0IGRpc3BsYXlzIHRoZSBtb3N0IHJlY2VudCB2YWx1ZSBmb3IgZXZlcnkgbWV0cmljXG4gKi9cbmV4cG9ydCBjbGFzcyBTaW5nbGVWYWx1ZVdpZGdldCBleHRlbmRzIENvbmNyZXRlV2lkZ2V0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogU2luZ2xlVmFsdWVXaWRnZXRQcm9wcztcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogU2luZ2xlVmFsdWVXaWRnZXRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzLndpZHRoIHx8IDYsIHByb3BzLmhlaWdodCB8fCAzKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5jb3B5TWV0cmljV2FybmluZ3MoLi4ucHJvcHMubWV0cmljcyk7XG4gIH1cblxuICBwdWJsaWMgdG9Kc29uKCk6IGFueVtdIHtcbiAgICByZXR1cm4gW3tcbiAgICAgIHR5cGU6ICdtZXRyaWMnLFxuICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxuICAgICAgeDogdGhpcy54LFxuICAgICAgeTogdGhpcy55LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB2aWV3OiAnc2luZ2xlVmFsdWUnLFxuICAgICAgICB0aXRsZTogdGhpcy5wcm9wcy50aXRsZSxcbiAgICAgICAgcmVnaW9uOiB0aGlzLnByb3BzLnJlZ2lvbiB8fCBjZGsuQXdzLlJFR0lPTixcbiAgICAgICAgbWV0cmljczogYWxsTWV0cmljc0dyYXBoSnNvbih0aGlzLnByb3BzLm1ldHJpY3MsIFtdKSxcbiAgICAgICAgc2V0UGVyaW9kVG9UaW1lUmFuZ2U6IHRoaXMucHJvcHMuc2V0UGVyaW9kVG9UaW1lUmFuZ2UsXG4gICAgICAgIHNpbmdsZVZhbHVlRnVsbFByZWNpc2lvbjogdGhpcy5wcm9wcy5mdWxsUHJlY2lzaW9uLFxuICAgICAgfSxcbiAgICB9XTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBwcm9wZXJ0aWVzIGZvciBhIEN1c3RvbVdpZGdldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbVdpZGdldFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBBcm4gb2YgdGhlIEFXUyBMYW1iZGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIEhUTUwgb3IgSlNPTiB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSB3aWRnZXRcbiAgICovXG4gIHJlYWRvbmx5IGZ1bmN0aW9uQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdpZHRoIG9mIHRoZSB3aWRnZXQsIGluIGEgZ3JpZCBvZiAyNCB1bml0cyB3aWRlXG4gICAqXG4gICAqIEBkZWZhdWx0IDZcbiAgICovXG4gIHJlYWRvbmx5IHdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIZWlnaHQgb2YgdGhlIHdpZGdldFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIDYgZm9yIEFsYXJtIGFuZCBHcmFwaCB3aWRnZXRzLlxuICAgKiAgIDMgZm9yIHNpbmdsZSB2YWx1ZSB3aWRnZXRzIHdoZXJlIG1vc3QgcmVjZW50IHZhbHVlIG9mIGEgbWV0cmljIGlzIGRpc3BsYXllZC5cbiAgICovXG4gIHJlYWRvbmx5IGhlaWdodD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRpdGxlIG9mIHRoZSB3aWRnZXRcbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgd2lkZ2V0IG9uIHJlZnJlc2hcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlT25SZWZyZXNoPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB3aWRnZXQgb24gcmVzaXplXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZU9uUmVzaXplPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB3aWRnZXQgb24gdGltZSByYW5nZSBjaGFuZ2VcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlT25UaW1lUmFuZ2VDaGFuZ2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgbGFtYmRhIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIHRoZSBsYW1iZGEgZnVuY3Rpb25cbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtcz86IGFueTtcbn1cblxuLyoqXG4gKiBBIEN1c3RvbVdpZGdldCBzaG93cyB0aGUgcmVzdWx0IG9mIGEgQVdTIGxhbWJkYSBmdW5jdGlvblxuICovXG5leHBvcnQgY2xhc3MgQ3VzdG9tV2lkZ2V0IGV4dGVuZHMgQ29uY3JldGVXaWRnZXQge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IEN1c3RvbVdpZGdldFByb3BzO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9wczogQ3VzdG9tV2lkZ2V0UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcy53aWR0aCA/PyA2LCBwcm9wcy5oZWlnaHQgPz8gNik7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB9XG5cbiAgcHVibGljIHRvSnNvbigpOiBhbnlbXSB7XG4gICAgcmV0dXJuIFt7XG4gICAgICB0eXBlOiAnY3VzdG9tJyxcbiAgICAgIHdpZHRoOiB0aGlzLndpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCxcbiAgICAgIHg6IHRoaXMueCxcbiAgICAgIHk6IHRoaXMueSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgZW5kcG9pbnQ6IHRoaXMucHJvcHMuZnVuY3Rpb25Bcm4sXG4gICAgICAgIHBhcmFtczogdGhpcy5wcm9wcy5wYXJhbXMsXG4gICAgICAgIHRpdGxlOiB0aGlzLnByb3BzLnRpdGxlLFxuICAgICAgICB1cGRhdGVPbjoge1xuICAgICAgICAgIHJlZnJlc2g6IHRoaXMucHJvcHMudXBkYXRlT25SZWZyZXNoID8/IHRydWUsXG4gICAgICAgICAgcmVzaXplOiB0aGlzLnByb3BzLnVwZGF0ZU9uUmVzaXplID8/IHRydWUsXG4gICAgICAgICAgdGltZVJhbmdlOiB0aGlzLnByb3BzLnVwZGF0ZU9uVGltZVJhbmdlQ2hhbmdlID8/IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1dO1xuICB9XG59XG5cbi8qKlxuICogSG9yaXpvbnRhbCBhbm5vdGF0aW9uIHRvIGJlIGFkZGVkIHRvIGEgZ3JhcGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3Jpem9udGFsQW5ub3RhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGFubm90YXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIExhYmVsIGZvciB0aGUgYW5ub3RhdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGxhYmVsXG4gICAqL1xuICByZWFkb25seSBsYWJlbD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGhleCBjb2xvciBjb2RlLCBwcmVmaXhlZCB3aXRoICcjJyAoZS5nLiAnIzAwZmYwMCcpLCB0byBiZSB1c2VkIGZvciB0aGUgYW5ub3RhdGlvbi5cbiAgICogVGhlIGBDb2xvcmAgY2xhc3MgaGFzIGEgc2V0IG9mIHN0YW5kYXJkIGNvbG9ycyB0aGF0IGNhbiBiZSB1c2VkIGhlcmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQXV0b21hdGljIGNvbG9yXG4gICAqL1xuICByZWFkb25seSBjb2xvcj86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkIHNoYWRpbmcgYWJvdmUgb3IgYmVsb3cgdGhlIGFubm90YXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgTm8gc2hhZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsbD86IFNoYWRpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGFubm90YXRpb24gaXMgdmlzaWJsZVxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB2aXNpYmxlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBGaWxsIHNoYWRpbmcgb3B0aW9ucyB0aGF0IHdpbGwgYmUgdXNlZCB3aXRoIGFuIGFubm90YXRpb25cbiAqL1xuZXhwb3J0IGVudW0gU2hhZGluZyB7XG4gIC8qKlxuICAgKiBEb24ndCBhZGQgc2hhZGluZ1xuICAgKi9cbiAgTk9ORSA9ICdub25lJyxcblxuICAvKipcbiAgICogQWRkIHNoYWRpbmcgYWJvdmUgdGhlIGFubm90YXRpb25cbiAgICovXG4gIEFCT1ZFID0gJ2Fib3ZlJyxcblxuICAvKipcbiAgICogQWRkIHNoYWRpbmcgYmVsb3cgdGhlIGFubm90YXRpb25cbiAgICovXG4gIEJFTE9XID0gJ2JlbG93J1xufVxuXG4vKipcbiAqIEEgc2V0IG9mIHN0YW5kYXJkIGNvbG91cnMgdGhhdCBjYW4gYmUgdXNlZCBpbiBhbm5vdGF0aW9ucyBpbiBhIEdyYXBoV2lkZ2V0LlxuICovXG5leHBvcnQgY2xhc3MgQ29sb3Ige1xuICAvKiogYmx1ZSAtIGhleCAjMWY3N2I0ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQkxVRSA9ICcjMWY3N2I0JztcblxuICAvKiogYnJvd24gLSBoZXggIzhjNTY0YiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJST1dOID0gJyM4YzU2NGInO1xuXG4gIC8qKiBncmVlbiAtIGhleCAjMmNhMDJjICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1JFRU4gPSAnIzJjYTAyYyc7XG5cbiAgLyoqIGdyZXkgLSBoZXggIzdmN2Y3ZiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdSRVkgPSAnIzdmN2Y3Zic7XG5cbiAgLyoqIG9yYW5nZSAtIGhleCAjZmY3ZjBlICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT1JBTkdFID0gJyNmZjdmMGUnO1xuXG4gIC8qKiBwaW5rIC0gaGV4ICNlMzc3YzIgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQSU5LID0gJyNlMzc3YzInO1xuXG4gIC8qKiBwdXJwbGUgLSBoZXggIzk0NjdiZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBVUlBMRSA9ICcjOTQ2N2JkJztcblxuICAvKiogcmVkIC0gaGV4ICNkNjI3MjggKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSRUQgPSAnI2Q2MjcyOCc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG59XG5cbi8qKlxuICogVGhlIHBvc2l0aW9uIG9mIHRoZSBsZWdlbmQgb24gYSBHcmFwaFdpZGdldC5cbiAqL1xuZXhwb3J0IGVudW0gTGVnZW5kUG9zaXRpb24ge1xuICAvKipcbiAgICogTGVnZW5kIGFwcGVhcnMgYmVsb3cgdGhlIGdyYXBoIChkZWZhdWx0KS5cbiAgICovXG4gIEJPVFRPTSA9ICdib3R0b20nLFxuXG4gIC8qKlxuICAgKiBBZGQgc2hhZGluZyBhYm92ZSB0aGUgYW5ub3RhdGlvblxuICAgKi9cbiAgUklHSFQgPSAncmlnaHQnLFxuXG4gIC8qKlxuICAgKiBBZGQgc2hhZGluZyBiZWxvdyB0aGUgYW5ub3RhdGlvblxuICAgKi9cbiAgSElEREVOID0gJ2hpZGRlbidcbn1cblxuZnVuY3Rpb24gbWFwQW5ub3RhdGlvbih5QXhpczogc3RyaW5nKTogKCh4OiBIb3Jpem9udGFsQW5ub3RhdGlvbikgPT4gYW55KSB7XG4gIHJldHVybiAoYTogSG9yaXpvbnRhbEFubm90YXRpb24pID0+IHtcbiAgICByZXR1cm4geyAuLi5hLCB5QXhpcyB9O1xuICB9O1xufVxuIl19 |
\ | No newline at end of file |