@hmcts/media-viewer
Version:
158 lines • 21.3 kB
JavaScript
import * as fromActions from '../actions/document.actions';
export const initialDocumentState = {
convertedDocument: undefined,
documentId: undefined,
pdfPosition: undefined,
pages: {},
hasDifferentPageSize: false,
rotation: undefined,
rotationLoaded: false,
loading: false,
loaded: false
};
export function docReducer(state = initialDocumentState, action) {
switch (action.type) {
case fromActions.CONVERT_SUCCESS: {
const convertedDocument = {
url: action.payload,
error: undefined
};
return {
...state,
convertedDocument
};
}
case fromActions.CONVERT_FAIL: {
const convertedDocument = {
url: undefined,
error: action.payload
};
return {
...state,
convertedDocument
};
}
case fromActions.CLEAR_CONVERT_DOC_URL: {
const convertedDocument = undefined;
return {
...state,
convertedDocument
};
}
case fromActions.LOAD_ROTATION: {
return {
...state,
rotationLoaded: false
};
}
case fromActions.LOAD_ROTATION_SUCCESS: {
const metadata = action.payload;
const rotation = metadata ? metadata.rotationAngle : 0;
return {
...state,
rotation,
rotationLoaded: true
};
}
case fromActions.LOAD_ROTATION_FAIL: {
return {
...state,
rotation: 0,
rotationLoaded: true
};
}
case fromActions.SAVE_ROTATION_SUCCESS: {
const metadata = action.payload;
const rotation = metadata.rotationAngle;
return {
...state,
rotation
};
}
case fromActions.SET_DOCUMENT_ID: {
return {
...state,
documentId: action.payload
};
}
case fromActions.ADD_PAGES: {
const payload = action.payload;
let pages = {};
let pageHeight;
let pageWidth;
let hasDifferentPageSize = state.hasDifferentPageSize;
const pageNumberInput = document.getElementById('pageNumber');
const pageIndex = pageNumberInput?.value ? parseInt(pageNumberInput.value, 10) - 1 : 0;
const loadedPage = payload[pageIndex]?.div['attributes']?.style?.value ?? '';
payload.forEach(page => {
const sizingValue = page.div?.['attributes']?.style?.value ?? '';
const widthMatch = sizingValue.match(/width:\s*round\(down,\s*var\(--scale-factor\)\s*\*\s*([\d.]+)([a-z%]+)?,.*var\(--scale-round-x, ([\d.]+)([a-z%]+)?\)\)/);
const heightMatch = sizingValue.match(/height:\s*round\(down,\s*var\(--scale-factor\)\s*\*\s*([\d.]+)([a-z%]+)?,.*var\(--scale-round-y, ([\d.]+)([a-z%]+)?\)\)/);
const scaleRoundXMatch = loadedPage.match(/--scale-round-x:\s*([\d.]+)([a-z%]+)?/);
const scaleRoundYMatch = loadedPage.match(/--scale-round-y:\s*([\d.]+)([a-z%]+)?/);
// You can now use widthUnit, heightUnit, scaleRoundXUnit, scaleRoundYUnit as needed
const scaleFactor = page.viewportScale ?? 1;
const scaleRoundX = scaleRoundXMatch ? parseFloat(scaleRoundXMatch[1]) : 1;
const scaleRoundY = scaleRoundYMatch ? parseFloat(scaleRoundYMatch[1]) : 1;
const baseWidth = widthMatch ? parseFloat(widthMatch[1]) : undefined;
const baseHeight = heightMatch ? parseFloat(heightMatch[1]) : undefined;
function roundDown(value, step) {
return Math.floor(value / step) * step;
}
const computedWidth = baseWidth !== undefined
? roundDown(scaleFactor * baseWidth, scaleRoundX)
: page.div['clientWidth'];
const computedHeight = baseHeight !== undefined
? roundDown(scaleFactor * baseHeight, scaleRoundY)
: page.div['clientHeight'];
if (!hasDifferentPageSize && pageHeight && pageWidth &&
(pageHeight !== computedHeight || pageWidth !== computedWidth)) {
hasDifferentPageSize = true;
}
else {
pageHeight = computedHeight;
pageWidth = computedWidth;
}
const styles = {
left: page.div['offsetLeft'],
height: computedHeight,
width: computedWidth
};
const scaleRotation = {
scale: page.scale,
rotation: page.rotation
};
const p = {
styles,
scaleRotation,
viewportScale: page.viewportScale
};
pages = {
...pages,
[page.id]: p
};
});
return {
...state,
pages,
hasDifferentPageSize
};
}
case fromActions.POSITION_UPDATED: {
const pdfPosition = action.payload;
return {
...state,
pdfPosition
};
}
}
return state;
}
export const getDocPages = (state) => state.pages;
export const getDocId = (state) => state.documentId;
export const getPdfPos = (state) => state.pdfPosition;
export const getHasDifferentPageSizes = (state) => state.hasDifferentPageSize;
export const getRotation = (state) => state.rotation;
export const rotationLoaded = (state) => state.rotationLoaded;
export const getConvertedDocument = (state) => state.convertedDocument;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQucmVkdWNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhLXZpZXdlci9zcmMvbGliL3N0b3JlL3JlZHVjZXJzL2RvY3VtZW50LnJlZHVjZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLFdBQVcsTUFBTSw2QkFBNkIsQ0FBQztBQWdDM0QsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQWtCO0lBQ2pELGlCQUFpQixFQUFFLFNBQVM7SUFDNUIsVUFBVSxFQUFFLFNBQVM7SUFDckIsV0FBVyxFQUFFLFNBQVM7SUFDdEIsS0FBSyxFQUFFLEVBQUU7SUFDVCxvQkFBb0IsRUFBRSxLQUFLO0lBQzNCLFFBQVEsRUFBRSxTQUFTO0lBQ25CLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLE9BQU8sRUFBRSxLQUFLO0lBQ2QsTUFBTSxFQUFFLEtBQUs7Q0FDZCxDQUFDO0FBRUYsTUFBTSxVQUFVLFVBQVUsQ0FBRSxLQUFLLEdBQUcsb0JBQW9CLEVBQzVCLE1BQW1DO0lBRTdELFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRXBCLEtBQUssV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDakMsTUFBTSxpQkFBaUIsR0FBRztnQkFDeEIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxPQUFPO2dCQUNuQixLQUFLLEVBQUUsU0FBUzthQUNqQixDQUFDO1lBQ0YsT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsaUJBQWlCO2FBQ2xCLENBQUM7UUFDSixDQUFDO1FBRUQsS0FBSyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUM5QixNQUFNLGlCQUFpQixHQUFHO2dCQUN4QixHQUFHLEVBQUUsU0FBUztnQkFDZCxLQUFLLEVBQUUsTUFBTSxDQUFDLE9BQU87YUFDdEIsQ0FBQztZQUNGLE9BQU87Z0JBQ0wsR0FBRyxLQUFLO2dCQUNSLGlCQUFpQjthQUNs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QyxLQUFvQixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQ2pFLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDbkUsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUNyRSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztBQUM3RixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFvQixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7QUFDN0UsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFvQixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcm9tQWN0aW9ucyBmcm9tICcuLi9hY3Rpb25zL2RvY3VtZW50LmFjdGlvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERvY3VtZW50U3RhdGUge1xuICBjb252ZXJ0ZWREb2N1bWVudDoge1xuICAgIHVybDogc3RyaW5nO1xuICAgIGVycm9yOiBzdHJpbmc7XG4gIH07XG4gIGRvY3VtZW50SWQ6IHN0cmluZztcbiAgcGRmUG9zaXRpb246IFBkZlBvc2l0aW9uO1xuICBwYWdlczoge1tpZDogc3RyaW5nXTogRG9jdW1lbnRQYWdlc307XG4gIGhhc0RpZmZlcmVudFBhZ2VTaXplOiBib29sZWFuO1xuICByb3RhdGlvbjogbnVtYmVyO1xuICByb3RhdGlvbkxvYWRlZDogYm9vbGVhbjtcbiAgbG9hZGVkOiBib29sZWFuO1xuICBsb2FkaW5nOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvY3VtZW50UGFnZXMge1xuIG51bWJlck9mUGFnZXM6IG51bWJlcjtcbiBzdHlsZXM6IHsgbGVmdDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgd2lkdGg6IG51bWJlciB9O1xuIHNjYWxlUm90YXRpb246IHsgc2NhbGU6IHN0cmluZzsgcm90YXRpb246IHN0cmluZyB9O1xuIHZpZXdwb3J0U2NhbGU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZGZQb3NpdGlvbiB7XG4gIHBhZ2VOdW1iZXI6IG51bWJlcjtcbiAgc2NhbGU6IG51bWJlcjtcbiAgdG9wOiBudW1iZXI7XG4gIGxlZnQ6IG51bWJlcjtcbiAgcm90YXRpb246IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IGluaXRpYWxEb2N1bWVudFN0YXRlOiBEb2N1bWVudFN0YXRlID0ge1xuICBjb252ZXJ0ZWREb2N1bWVudDogdW5kZWZpbmVkLFxuICBkb2N1bWVudElkOiB1bmRlZmluZWQsXG4gIHBkZlBvc2l0aW9uOiB1bmRlZmluZWQsXG4gIHBhZ2VzOiB7fSxcbiAgaGFzRGlmZmVyZW50UGFnZVNpemU6IGZhbHNlLFxuICByb3RhdGlvbjogdW5kZWZpbmVkLFxuICByb3RhdGlvbkxvYWRlZDogZmFsc2UsXG4gIGxvYWRpbmc6IGZhbHNlLFxuICBsb2FkZWQ6IGZhbHNlXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZG9jUmVkdWNlciAoc3RhdGUgPSBpbml0aWFsRG9jdW1lbnRTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZyb21BY3Rpb25zLkRvY3VtZW50QWN0aW9ucyk6IERvY3VtZW50U3RhdGUge1xuXG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblxuICAgIGNhc2UgZnJvbUFjdGlvbnMuQ09OVkVSVF9TVUNDRVNTOiB7XG4gICAgICBjb25zdCBjb252ZXJ0ZWREb2N1bWVudCA9IHtcbiAgICAgICAgdXJsOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgZXJyb3I6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBjb252ZXJ0ZWREb2N1bWVudFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjYXNlIGZyb21BY3Rpb25zLkNPTlZFUlRfRkFJTDoge1xuICAgICAgY29uc3QgY29udmVydGVkRG9jdW1lbnQgPSB7XG4gICAgICAgIHVybDogdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogYWN0aW9uLnBheWxvYWRcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgY29udmVydGVkRG9jdW1lbnRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSBmcm9tQWN0aW9ucy5DTEVBUl9DT05WRVJUX0RPQ19VUkw6IHtcbiAgICAgIGNvbnN0IGNvbnZlcnRlZERvY3VtZW50ID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGNvbnZlcnRlZERvY3VtZW50XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNhc2UgZnJvbUFjdGlvbnMuTE9BRF9ST1RBVElPTjoge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJvdGF0aW9uTG9hZGVkOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjYXNlIGZyb21BY3Rpb25zLkxPQURfUk9UQVRJT05fU1VDQ0VTUzoge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIGNvbnN0IHJvdGF0aW9uID0gbWV0YWRhdGEgPyBtZXRhZGF0YS5yb3RhdGlvbkFuZ2xlIDogMDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICByb3RhdGlvbixcbiAgICAgICAgcm90YXRpb25Mb2FkZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSBmcm9tQWN0aW9ucy5MT0FEX1JPVEFUSU9OX0ZBSUw6IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICByb3RhdGlvbjogMCxcbiAgICAgICAgcm90YXRpb25Mb2FkZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSBmcm9tQWN0aW9ucy5TQVZFX1JPVEFUSU9OX1NVQ0NFU1M6IHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICBjb25zdCByb3RhdGlvbiA9IG1ldGFkYXRhLnJvdGF0aW9uQW5nbGU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgcm90YXRpb25cbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSBmcm9tQWN0aW9ucy5TRVRfRE9DVU1FTlRfSUQgOiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZG9jdW1lbnRJZDogYWN0aW9uLnBheWxvYWRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSBmcm9tQWN0aW9ucy5BRERfUEFHRVM6IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIGxldCBwYWdlcyA9IHt9O1xuICAgICAgbGV0IHBhZ2VIZWlnaHQ7XG4gICAgICBsZXQgcGFnZVdpZHRoO1xuICAgICAgbGV0IGhhc0RpZmZlcmVudFBhZ2VTaXplID0gc3RhdGUuaGFzRGlmZmVyZW50UGFnZVNpemU7XG4gICAgICBjb25zdCBwYWdlTnVtYmVySW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZU51bWJlcicpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICBjb25zdCBwYWdlSW5kZXggPSBwYWdlTnVtYmVySW5wdXQ/LnZhbHVlID8gcGFyc2VJbnQocGFnZU51bWJlcklucHV0LnZhbHVlLCAxMCkgLSAxIDogMDtcbiAgICAgIGNvbnN0IGxvYWRlZFBhZ2UgPSBwYXlsb2FkW3BhZ2VJbmRleF0/LmRpdlsnYXR0cmlidXRlcyddPy5zdHlsZT8udmFsdWUgPz8gJyc7XG4gICAgICBwYXlsb2FkLmZvckVhY2gocGFnZSA9PiB7XG4gICAgICAgIGNvbnN0IHNpemluZ1ZhbHVlID0gcGFnZS5kaXY/LlsnYXR0cmlidXRlcyddPy5zdHlsZT8udmFsdWUgPz8gJyc7XG4gICAgICAgIGNvbnN0IHdpZHRoTWF0Y2ggID0gc2l6aW5nVmFsdWUubWF0Y2goL3dpZHRoOlxccypyb3VuZFxcKGRvd24sXFxzKnZhclxcKC0tc2NhbGUtZmFjdG9yXFwpXFxzKlxcKlxccyooW1xcZC5dKykoW2EteiVdKyk/LC4qdmFyXFwoLS1zY2FsZS1yb3VuZC14LCAoW1xcZC5dKykoW2EteiVdKyk/XFwpXFwpLyk7XG4gICAgICAgIGNvbnN0IGhlaWdodE1hdGNoID0gc2l6aW5nVmFsdWUubWF0Y2goL2hlaWdodDpcXHMqcm91bmRcXChkb3duLFxccyp2YXJcXCgtLXNjYWxlLWZhY3RvclxcKVxccypcXCpcXHMqKFtcXGQuXSspKFthLXolXSspPywuKnZhclxcKC0tc2NhbGUtcm91bmQteSwgKFtcXGQuXSspKFthLXolXSspP1xcKVxcKS8pO1xuICAgICAgICBjb25zdCBzY2FsZVJvdW5kWE1hdGNoID0gbG9hZGVkUGFnZS5tYXRjaCgvLS1zY2FsZS1yb3VuZC14OlxccyooW1xcZC5dKykoW2EteiVdKyk/Lyk7XG4gICAgICAgIGNvbnN0IHNjYWxlUm91bmRZTWF0Y2ggPSBsb2FkZWRQYWdlLm1hdGNoKC8tLXNjYWxlLXJvdW5kLXk6XFxzKihbXFxkLl0rKShbYS16JV0rKT8vKTtcbiAgICAgICAgLy8gWW91IGNhbiBub3cgdXNlIHdpZHRoVW5pdCwgaGVpZ2h0VW5pdCwgc2NhbGVSb3VuZFhVbml0LCBzY2FsZVJvdW5kWVVuaXQgYXMgbmVlZGVkXG4gICAgICAgIGNvbnN0IHNjYWxlRmFjdG9yID0gcGFnZS52aWV3cG9ydFNjYWxlID8/IDE7XG4gICAgICAgIGNvbnN0IHNjYWxlUm91bmRYID0gc2NhbGVSb3VuZFhNYXRjaCA/IHBhcnNlRmxvYXQoc2NhbGVSb3VuZFhNYXRjaFsxXSkgOiAxO1xuICAgICAgICBjb25zdCBzY2FsZVJvdW5kWSA9IHNjYWxlUm91bmRZTWF0Y2ggPyBwYXJzZUZsb2F0KHNjYWxlUm91bmRZTWF0Y2hbMV0pIDogMTtcbiAgICAgICAgY29uc3QgYmFzZVdpZHRoID0gd2lkdGhNYXRjaCA/IHBhcnNlRmxvYXQod2lkdGhNYXRjaFsxXSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGJhc2VIZWlnaHQgPSBoZWlnaHRNYXRjaCA/IHBhcnNlRmxvYXQoaGVpZ2h0TWF0Y2hbMV0pIDogdW5kZWZpbmVkO1xuICAgICAgICBmdW5jdGlvbiByb3VuZERvd24odmFsdWU6IG51bWJlciwgc3RlcDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih2YWx1ZSAvIHN0ZXApICogc3RlcDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wdXRlZFdpZHRoID0gYmFzZVdpZHRoICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHJvdW5kRG93bihzY2FsZUZhY3RvciAqIGJhc2VXaWR0aCwgc2NhbGVSb3VuZFgpXG4gICAgICAgICAgOiBwYWdlLmRpdlsnY2xpZW50V2lkdGgnXTtcbiAgICAgICAgY29uc3QgY29tcHV0ZWRIZWlnaHQgPSBiYXNlSGVpZ2h0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHJvdW5kRG93bihzY2FsZUZhY3RvciAqIGJhc2VIZWlnaHQsIHNjYWxlUm91bmRZKVxuICAgICAgICAgIDogcGFnZS5kaXZbJ2NsaWVudEhlaWdodCddO1xuXG4gICAgICAgIGlmICghaGFzRGlmZmVyZW50UGFnZVNpemUgJiYgcGFnZUhlaWdodCAmJiBwYWdlV2lkdGggJiZcbiAgICAgICAgICAocGFnZUhlaWdodCAhPT0gY29tcHV0ZWRIZWlnaHQgfHwgcGFnZVdpZHRoICE9PSBjb21wdXRlZFdpZHRoKSkge1xuICAgICAgICAgIGhhc0RpZmZlcmVudFBhZ2VTaXplID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYWdlSGVpZ2h0ID0gY29tcHV0ZWRIZWlnaHQ7XG4gICAgICAgICAgcGFnZVdpZHRoID0gY29tcHV0ZWRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdHlsZXMgPSB7XG4gICAgICAgICAgbGVmdDogcGFnZS5kaXZbJ29mZnNldExlZnQnXSxcbiAgICAgICAgICBoZWlnaHQ6IGNvbXB1dGVkSGVpZ2h0LFxuICAgICAgICAgIHdpZHRoOiBjb21wdXRlZFdpZHRoXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc2NhbGVSb3RhdGlvbiA9IHtcbiAgICAgICAgICBzY2FsZTogcGFnZS5zY2FsZSxcbiAgICAgICAgICByb3RhdGlvbjogcGFnZS5yb3RhdGlvblxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHAgPSB7XG4gICAgICAgICAgc3R5bGVzLFxuICAgICAgICAgIHNjYWxlUm90YXRpb24sXG4gICAgICAgICAgdmlld3BvcnRTY2FsZTogcGFnZS52aWV3cG9ydFNjYWxlXG4gICAgICAgIH07XG5cbiAgICAgICAgcGFnZXMgPSB7XG4gICAgICAgICAgLi4ucGFnZXMsXG4gICAgICAgICAgW3BhZ2UuaWRdOiBwXG4gICAgICAgIH07XG5cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHBhZ2VzLFxuICAgICAgICBoYXNEaWZmZXJlbnRQYWdlU2l6ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjYXNlIGZyb21BY3Rpb25zLlBPU0lUSU9OX1VQREFURUQ6IHtcbiAgICAgIGNvbnN0IHBkZlBvc2l0aW9uID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgcGRmUG9zaXRpb25cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cbmV4cG9ydCBjb25zdCBnZXREb2NQYWdlcyA9IChzdGF0ZTogRG9jdW1lbnRTdGF0ZSkgPT4gc3RhdGUucGFnZXM7XG5leHBvcnQgY29uc3QgZ2V0RG9jSWQgPSAoc3RhdGU6IERvY3VtZW50U3RhdGUpID0+IHN0YXRlLmRvY3VtZW50SWQ7XG5leHBvcnQgY29uc3QgZ2V0UGRmUG9zID0gKHN0YXRlOiBEb2N1bWVudFN0YXRlKSA9PiBzdGF0ZS5wZGZQb3NpdGlvbjtcbmV4cG9ydCBjb25zdCBnZXRIYXNEaWZmZXJlbnRQYWdlU2l6ZXMgPSAoc3RhdGU6IERvY3VtZW50U3RhdGUpID0+IHN0YXRlLmhhc0RpZmZlcmVudFBhZ2VTaXplO1xuZXhwb3J0IGNvbnN0IGdldFJvdGF0aW9uID0gKHN0YXRlOiBEb2N1bWVudFN0YXRlKSA9PiBzdGF0ZS5yb3RhdGlvbjtcbmV4cG9ydCBjb25zdCByb3RhdGlvbkxvYWRlZCA9IChzdGF0ZTogRG9jdW1lbnRTdGF0ZSkgPT4gc3RhdGUucm90YXRpb25Mb2FkZWQ7XG5leHBvcnQgY29uc3QgZ2V0Q29udmVydGVkRG9jdW1lbnQgPSAoc3RhdGU6IERvY3VtZW50U3RhdGUpID0+IHN0YXRlLmNvbnZlcnRlZERvY3VtZW50O1xuIl19