webglimpse
Version:
Webglimpse is a data visualization library for the web.
168 lines • 19.6 kB
JavaScript
/*
* Copyright (c) 2014, Metron, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
import { newTimeseriesPainterFactory, newTimeseriesRowPaneFactory } from './timeline_timeseries_row';
import { newTimeseriesAnnotationPainterFactory } from './timeline_annotation_painter';
import { newTimeseriesCursorPainterFactory } from './timeline_cursor_painter';
import { newEventsRowPaneFactory, newEventLimitsPainterFactory, newEventBarsPainterFactory, newEventIconsPainterFactory, newEventLabelsPainterFactory, newEventStripedBarsPainterFactory, newEventDashedBordersPainterFactory, JointType, newCombinedEventPainterFactory } from './timeline_events_row';
import { Color } from '../color';
// Default
//
export let timeseriesRowPainterFactories_DEFAULT = [
newTimeseriesPainterFactory(),
newTimeseriesAnnotationPainterFactory(),
newTimeseriesCursorPainterFactory({
font: '16px verdana,sans-serif',
buffer_px: 6
})
];
export let eventsRowPaneFactory_DEFAULT = newEventsRowPaneFactory({
laneHeight: 40,
painterFactories: [
newEventLimitsPainterFactory(),
newEventBarsPainterFactory(),
newEventIconsPainterFactory(),
newEventLabelsPainterFactory({
iconsSizeFactor: 0.7
})
]
});
export let timeseriesRowPaneFactory_DEFAULT = newTimeseriesRowPaneFactory({
painterFactories: timeseriesRowPainterFactories_DEFAULT,
axisOptions: { tickSpacing: 34 }
});
export function rowPaneFactoryChooser_DEFAULT(row) {
if (!row.eventGuids.isEmpty) {
return eventsRowPaneFactory_DEFAULT;
}
else if (!row.timeseriesGuids.isEmpty) {
return timeseriesRowPaneFactory_DEFAULT;
}
else {
return null;
}
}
// Thin
//
export let eventsRowPaneFactory_THIN = newEventsRowPaneFactory({
rowTopPadding: 0,
rowBottomPadding: 0,
laneHeight: 23,
allowMultipleLanes: true,
painterFactories: [
newEventLimitsPainterFactory({
lineColor: new Color(1, 0, 0, 1),
lineThickness: 2
}),
newEventStripedBarsPainterFactory({
bottomMargin: 0,
topMargin: 13,
minimumVisibleWidth: 0,
stripeSlant: -1,
stripeSecondaryWidth: 10,
stripeWidth: 10
}),
newEventDashedBordersPainterFactory({
bottomMargin: 0,
topMargin: 13,
minimumVisibleWidth: 0,
cornerType: JointType.MITER,
dashLength: 5
}),
newEventIconsPainterFactory({
bottomMargin: 0,
topMargin: 13,
vAlign: 0.0
}),
newEventLabelsPainterFactory({
bottomMargin: 12,
topMargin: 0,
leftMargin: 2,
rightMargin: 2,
vAlign: 0.0,
spacing: 2,
extendBeyondBar: false,
textMode: 'truncate'
})
]
});
export function rowPaneFactoryChooser_THIN(row) {
if (!row.eventGuids.isEmpty) {
return eventsRowPaneFactory_THIN;
}
else if (!row.timeseriesGuids.isEmpty) {
return timeseriesRowPaneFactory_DEFAULT;
}
else {
return null;
}
}
export let eventsRowPaneFactory_SINGLE = newEventsRowPaneFactory({
rowTopPadding: 0,
rowBottomPadding: 0,
laneHeight: 23,
allowMultipleLanes: false,
painterFactories: [
newEventLimitsPainterFactory({
lineColor: new Color(1, 0, 0, 1),
lineThickness: 2
}),
newCombinedEventPainterFactory({
bottomMargin: 0,
topMargin: 13,
minimumVisibleWidth: 0,
cornerType: JointType.MITER
}, {
bottomMargin: 12,
topMargin: 0,
leftMargin: 2,
rightMargin: 2,
vAlign: 0.0,
spacing: 2,
extendBeyondBar: false,
textMode: 'show'
}, {
bottomMargin: 0,
topMargin: 13,
vAlign: 0.0
})
]
});
export function rowPaneFactoryChooser_SINGLE(row) {
if (!row.eventGuids.isEmpty) {
return eventsRowPaneFactory_SINGLE;
}
else if (!row.timeseriesGuids.isEmpty) {
return timeseriesRowPaneFactory_DEFAULT;
}
else {
return null;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmVfc3R5bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dlYmdsaW1wc2UvdGltZWxpbmUvdGltZWxpbmVfc3R5bGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsT0FBTyxFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFvQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZJLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTlFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSw0QkFBNEIsRUFBRSwwQkFBMEIsRUFBRSwyQkFBMkIsRUFBRSw0QkFBNEIsRUFBRSxpQ0FBaUMsRUFBRSxtQ0FBbUMsRUFBRSxTQUFTLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4UyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWpDLFVBQVU7QUFDVixFQUFFO0FBRUYsTUFBTSxDQUFDLElBQUkscUNBQXFDLEdBQXVDO0lBQ25GLDJCQUEyQixFQUFFO0lBQzdCLHFDQUFxQyxFQUFFO0lBQ3ZDLGlDQUFpQyxDQUFDO1FBQzlCLElBQUksRUFBRSx5QkFBeUI7UUFDL0IsU0FBUyxFQUFFLENBQUM7S0FDZixDQUFDO0NBQ0wsQ0FBQztBQUVGLE1BQU0sQ0FBQyxJQUFJLDRCQUE0QixHQUEyQix1QkFBdUIsQ0FBQztJQUN0RixVQUFVLEVBQUUsRUFBRTtJQUNkLGdCQUFnQixFQUFFO1FBQ2QsNEJBQTRCLEVBQUU7UUFDOUIsMEJBQTBCLEVBQUU7UUFDNUIsMkJBQTJCLEVBQUU7UUFDN0IsNEJBQTRCLENBQUM7WUFDekIsZUFBZSxFQUFFLEdBQUc7U0FDdkIsQ0FBQztLQUNMO0NBQ0osQ0FBQyxDQUFDO0FBRUgsTUFB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Q0FBQztZQUN0QixVQUFVLEVBQUUsU0FBUyxDQUFDLEtBQUs7U0FDOUIsRUFDRDtZQUNJLFlBQVksRUFBRSxFQUFFO1lBQ2hCLFNBQVMsRUFBRSxDQUFDO1lBQ1osVUFBVSxFQUFFLENBQUM7WUFDYixXQUFXLEVBQUUsQ0FBQztZQUNkLE1BQU0sRUFBRSxHQUFHO1lBQ1gsT0FBTyxFQUFFLENBQUM7WUFDVixlQUFlLEVBQUUsS0FBSztZQUN0QixRQUFRLEVBQUUsTUFBTTtTQUNuQixFQUNEO1lBQ0ksWUFBWSxFQUFFLENBQUM7WUFDZixTQUFTLEVBQUUsRUFBRTtZQUNiLE1BQU0sRUFBRSxHQUFHO1NBQ2QsQ0FDSjtLQUNKO0NBQ0osQ0FBQyxDQUFDO0FBRUgsTUFBTSxVQUFVLDRCQUE0QixDQUFDLEdBQXFCO0lBQzlELElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRTtRQUN6QixPQUFPLDJCQUEyQixDQUFDO0tBQ3RDO1NBQ0ksSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFO1FBQ25DLE9BQU8sZ0NBQWdDLENBQUM7S0FDM0M7U0FDSTtRQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDE0LCBNZXRyb24sIEluYy5cclxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICpcclxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG4gKlxyXG4gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcclxuICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAqXHJcbiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxyXG4gKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuICpcclxuICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnNcclxuICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXRcclxuICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxyXG4gKlxyXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcclxuICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcclxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxyXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxyXG4gKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcclxuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xyXG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cclxuICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcclxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcclxuICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXHJcbiAqL1xyXG5pbXBvcnQgeyBuZXdUaW1lc2VyaWVzUGFpbnRlckZhY3RvcnksIG5ld1RpbWVzZXJpZXNSb3dQYW5lRmFjdG9yeSwgVGltZWxpbmVUaW1lc2VyaWVzUGFpbnRlckZhY3RvcnkgfSBmcm9tICcuL3RpbWVsaW5lX3RpbWVzZXJpZXNfcm93JztcclxuaW1wb3J0IHsgbmV3VGltZXNlcmllc0Fubm90YXRpb25QYWludGVyRmFjdG9yeSB9IGZyb20gJy4vdGltZWxpbmVfYW5ub3RhdGlvbl9wYWludGVyJztcclxuaW1wb3J0IHsgbmV3VGltZXNlcmllc0N1cnNvclBhaW50ZXJGYWN0b3J5IH0gZnJvbSAnLi90aW1lbGluZV9jdXJzb3JfcGFpbnRlcic7XHJcbmltcG9ydCB7IFRpbWVsaW5lUm93UGFuZUZhY3RvcnkgfSBmcm9tICcuL3RpbWVsaW5lX3Jvdyc7XHJcbmltcG9ydCB7IG5ld0V2ZW50c1Jvd1BhbmVGYWN0b3J5LCBuZXdFdmVudExpbWl0c1BhaW50ZXJGYWN0b3J5LCBuZXdFdmVudEJhcnNQYWludGVyRmFjdG9yeSwgbmV3RXZlbnRJY29uc1BhaW50ZXJGYWN0b3J5LCBuZXdFdmVudExhYmVsc1BhaW50ZXJGYWN0b3J5LCBuZXdFdmVudFN0cmlwZWRCYXJzUGFpbnRlckZhY3RvcnksIG5ld0V2ZW50RGFzaGVkQm9yZGVyc1BhaW50ZXJGYWN0b3J5LCBKb2ludFR5cGUsIG5ld0NvbWJpbmVkRXZlbnRQYWludGVyRmFjdG9yeSB9IGZyb20gJy4vdGltZWxpbmVfZXZlbnRzX3Jvdyc7XHJcbmltcG9ydCB7IFRpbWVsaW5lUm93TW9kZWwgfSBmcm9tICcuL3RpbWVsaW5lX21vZGVsJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9jb2xvcic7XHJcblxyXG4vLyBEZWZhdWx0XHJcbi8vXHJcblxyXG5leHBvcnQgbGV0IHRpbWVzZXJpZXNSb3dQYWludGVyRmFjdG9yaWVzX0RFRkFVTFQ6IFRpbWVsaW5lVGltZXNlcmllc1BhaW50ZXJGYWN0b3J5W10gPSBbXHJcbiAgICBuZXdUaW1lc2VyaWVzUGFpbnRlckZhY3RvcnkoKSxcclxuICAgIG5ld1RpbWVzZXJpZXNBbm5vdGF0aW9uUGFpbnRlckZhY3RvcnkoKSxcclxuICAgIG5ld1RpbWVzZXJpZXNDdXJzb3JQYWludGVyRmFjdG9yeSh7XHJcbiAgICAgICAgZm9udDogJzE2cHggdmVyZGFuYSxzYW5zLXNlcmlmJyxcclxuICAgICAgICBidWZmZXJfcHg6IDZcclxuICAgIH0pXHJcbl07XHJcblxyXG5leHBvcnQgbGV0IGV2ZW50c1Jvd1BhbmVGYWN0b3J5X0RFRkFVTFQ6IFRpbWVsaW5lUm93UGFuZUZhY3RvcnkgPSBuZXdFdmVudHNSb3dQYW5lRmFjdG9yeSh7XHJcbiAgICBsYW5lSGVpZ2h0OiA0MCxcclxuICAgIHBhaW50ZXJGYWN0b3JpZXM6IFtcclxuICAgICAgICBuZXdFdmVudExpbWl0c1BhaW50ZXJGYWN0b3J5KCksXHJcbiAgICAgICAgbmV3RXZlbnRCYXJzUGFpbnRlckZhY3RvcnkoKSxcclxuICAgICAgICBuZXdFdmVudEljb25zUGFpbnRlckZhY3RvcnkoKSxcclxuICAgICAgICBuZXdFdmVudExhYmVsc1BhaW50ZXJGYWN0b3J5KHtcclxuICAgICAgICAgICAgaWNvbnNTaXplRmFjdG9yOiAwLjdcclxuICAgICAgICB9KVxyXG4gICAgXVxyXG59KTtcclxuXHJcbmV4cG9ydCBsZXQgdGltZXNlcmllc1Jvd1BhbmVGYWN0b3J5X0RFRkFVTFQ6IFRpbWVsaW5lUm93UGFuZUZhY3RvcnkgPSBuZXdUaW1lc2VyaWVzUm93UGFuZUZhY3Rvcnkoe1xyXG4gICAgcGFpbnRlckZhY3RvcmllczogdGltZXNlcmllc1Jvd1BhaW50ZXJGYWN0b3JpZXNfREVGQVVMVCxcclxuICAgIGF4aXNPcHRpb25zOiB7IHRpY2tTcGFjaW5nOiAzNCB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJvd1BhbmVGYWN0b3J5Q2hvb3Nlcl9ERUZBVUxUKHJvdzogVGltZWxpbmVSb3dNb2RlbCk6IFRpbWVsaW5lUm93UGFuZUZhY3Rvcnkge1xyXG4gICAgaWYgKCFyb3cuZXZlbnRHdWlkcy5pc0VtcHR5KSB7XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50c1Jvd1BhbmVGYWN0b3J5X0RFRkFVTFQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICghcm93LnRpbWVzZXJpZXNHdWlkcy5pc0VtcHR5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRpbWVzZXJpZXNSb3dQYW5lRmFjdG9yeV9ERUZBVUxUO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5cclxuLy8gVGhpblxyXG4vL1xyXG5cclxuZXhwb3J0IGxldCBldmVudHNSb3dQYW5lRmFjdG9yeV9USElOOiBUaW1lbGluZVJvd1BhbmVGYWN0b3J5ID0gbmV3RXZlbnRzUm93UGFuZUZhY3Rvcnkoe1xyXG4gICAgcm93VG9wUGFkZGluZzogMCxcclxuICAgIHJvd0JvdHRvbVBhZGRpbmc6IDAsXHJcbiAgICBsYW5lSGVpZ2h0OiAyMyxcclxuICAgIGFsbG93TXVsdGlwbGVMYW5lczogdHJ1ZSxcclxuICAgIHBhaW50ZXJGYWN0b3JpZXM6IFtcclxuICAgICAgICBuZXdFdmVudExpbWl0c1BhaW50ZXJGYWN0b3J5KHtcclxuICAgICAgICAgICAgbGluZUNvbG9yOiBuZXcgQ29sb3IoMSwgMCwgMCwgMSksXHJcbiAgICAgICAgICAgIGxpbmVUaGlja25lc3M6IDJcclxuICAgICAgICB9KSxcclxuICAgICAgICBuZXdFdmVudFN0cmlwZWRCYXJzUGFpbnRlckZhY3Rvcnkoe1xyXG4gICAgICAgICAgICBib3R0b21NYXJnaW46IDAsXHJcbiAgICAgICAgICAgIHRvcE1hcmdpbjogMTMsXHJcbiAgICAgICAgICAgIG1pbmltdW1WaXNpYmxlV2lkdGg6IDAsXHJcbiAgICAgICAgICAgIHN0cmlwZVNsYW50OiAtMSxcclxuICAgICAgICAgICAgc3RyaXBlU2Vjb25kYXJ5V2lkdGg6IDEwLFxyXG4gICAgICAgICAgICBzdHJpcGVXaWR0aDogMTBcclxuICAgICAgICB9KSxcclxuICAgICAgICBuZXdFdmVudERhc2hlZEJvcmRlcnNQYWludGVyRmFjdG9yeSh7XHJcbiAgICAgICAgICAgIGJvdHRvbU1hcmdpbjogMCxcclxuICAgICAgICAgICAgdG9wTWFyZ2luOiAxMyxcclxuICAgICAgICAgICAgbWluaW11bVZpc2libGVXaWR0aDogMCxcclxuICAgICAgICAgICAgY29ybmVyVHlwZTogSm9pbnRUeXBlLk1JVEVSLFxyXG4gICAgICAgICAgICBkYXNoTGVuZ3RoOiA1XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgbmV3RXZlbnRJY29uc1BhaW50ZXJGYWN0b3J5KHtcclxuICAgICAgICAgICAgYm90dG9tTWFyZ2luOiAwLFxyXG4gICAgICAgICAgICB0b3BNYXJnaW46IDEzLFxyXG4gICAgICAgICAgICB2QWxpZ246IDAuMFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIG5ld0V2ZW50TGFiZWxzUGFpbnRlckZhY3Rvcnkoe1xyXG4gICAgICAgICAgICBib3R0b21NYXJnaW46IDEyLFxyXG4gICAgICAgICAgICB0b3BNYXJnaW46IDAsXHJcbiAgICAgICAgICAgIGxlZnRNYXJnaW46IDIsXHJcbiAgICAgICAgICAgIHJpZ2h0TWFyZ2luOiAyLFxyXG4gICAgICAgICAgICB2QWxpZ246IDAuMCxcclxuICAgICAgICAgICAgc3BhY2luZzogMixcclxuICAgICAgICAgICAgZXh0ZW5kQmV5b25kQmFyOiBmYWxzZSxcclxuICAgICAgICAgICAgdGV4dE1vZGU6ICd0cnVuY2F0ZSdcclxuICAgICAgICB9KVxyXG4gICAgXVxyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByb3dQYW5lRmFjdG9yeUNob29zZXJfVEhJTihyb3c6IFRpbWVsaW5lUm93TW9kZWwpOiBUaW1lbGluZVJvd1BhbmVGYWN0b3J5IHtcclxuICAgIGlmICghcm93LmV2ZW50R3VpZHMuaXNFbXB0eSkge1xyXG4gICAgICAgIHJldHVybiBldmVudHNSb3dQYW5lRmFjdG9yeV9USElOO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoIXJvdy50aW1lc2VyaWVzR3VpZHMuaXNFbXB0eSkge1xyXG4gICAgICAgIHJldHVybiB0aW1lc2VyaWVzUm93UGFuZUZhY3RvcnlfREVGQVVMVDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgbGV0IGV2ZW50c1Jvd1BhbmVGYWN0b3J5X1NJTkdMRTogVGltZWxpbmVSb3dQYW5lRmFjdG9yeSA9IG5ld0V2ZW50c1Jvd1BhbmVGYWN0b3J5KHtcclxuICAgIHJvd1RvcFBhZGRpbmc6IDAsXHJcbiAgICByb3dCb3R0b21QYWRkaW5nOiAwLFxyXG4gICAgbGFuZUhlaWdodDogMjMsXHJcbiAgICBhbGxvd011bHRpcGxlTGFuZXM6IGZhbHNlLFxyXG4gICAgcGFpbnRlckZhY3RvcmllczogW1xyXG4gICAgICAgIG5ld0V2ZW50TGltaXRzUGFpbnRlckZhY3Rvcnkoe1xyXG4gICAgICAgICAgICBsaW5lQ29sb3I6IG5ldyBDb2xvcigxLCAwLCAwLCAxKSxcclxuICAgICAgICAgICAgbGluZVRoaWNrbmVzczogMlxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIG5ld0NvbWJpbmVkRXZlbnRQYWludGVyRmFjdG9yeShcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYm90dG9tTWFyZ2luOiAwLFxyXG4gICAgICAgICAgICAgICAgdG9wTWFyZ2luOiAxMyxcclxuICAgICAgICAgICAgICAgIG1pbmltdW1WaXNpYmxlV2lkdGg6IDAsXHJcbiAgICAgICAgICAgICAgICBjb3JuZXJUeXBlOiBKb2ludFR5cGUuTUlURVJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYm90dG9tTWFyZ2luOiAxMixcclxuICAgICAgICAgICAgICAgIHRvcE1hcmdpbjogMCxcclxuICAgICAgICAgICAgICAgIGxlZnRNYXJnaW46IDIsXHJcbiAgICAgICAgICAgICAgICByaWdodE1hcmdpbjogMixcclxuICAgICAgICAgICAgICAgIHZBbGlnbjogMC4wLFxyXG4gICAgICAgICAgICAgICAgc3BhY2luZzogMixcclxuICAgICAgICAgICAgICAgIGV4dGVuZEJleW9uZEJhcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0ZXh0TW9kZTogJ3Nob3cnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGJvdHRvbU1hcmdpbjogMCxcclxuICAgICAgICAgICAgICAgIHRvcE1hcmdpbjogMTMsXHJcbiAgICAgICAgICAgICAgICB2QWxpZ246IDAuMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgXVxyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByb3dQYW5lRmFjdG9yeUNob29zZXJfU0lOR0xFKHJvdzogVGltZWxpbmVSb3dNb2RlbCk6IFRpbWVsaW5lUm93UGFuZUZhY3Rvcnkge1xyXG4gICAgaWYgKCFyb3cuZXZlbnRHdWlkcy5pc0VtcHR5KSB7XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50c1Jvd1BhbmVGYWN0b3J5X1NJTkdMRTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCFyb3cudGltZXNlcmllc0d1aWRzLmlzRW1wdHkpIHtcclxuICAgICAgICByZXR1cm4gdGltZXNlcmllc1Jvd1BhbmVGYWN0b3J5X0RFRkFVTFQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuIl19