UNPKG

webglimpse

Version:

Webglimpse is a data visualization library for the web.

168 lines 19.6 kB
/* * 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