UNPKG

@wellwind/thanos-snap

Version:

Use [Thanos](https://www.google.com/search?q=Thanos) snap to destory your DOM elements.

101 lines 16.8 kB
// to fix error: Cannot call a namespace ('html2canvas') import * as html2canvas_ from 'html2canvas'; import { range } from 'ramda'; var html2canvas = html2canvas_; var LAYERS = 32; var TRANSITION_DURATION = 1.5; var TRANSITION_DELAY = 1.35; var sampler = function (layerImages, sourceImgData, width, height) { var layerCount = layerImages.length; var repeat = 2; range(0, width).forEach(function (x) { range(0, height).forEach(function (y) { range(0, repeat).forEach(function (n) { var pieceIndex = Math.floor((layerCount * (Math.random() + (2 * x) / width)) / 3); var pixelPos = 4 * (y * width + x); for (var rgbaIndex = 0; rgbaIndex < 4; rgbaIndex++) { var dataPos = pixelPos + rgbaIndex; layerImages[pieceIndex].data[dataPos] = sourceImgData.data[dataPos]; } }); }); }); }; var ɵ0 = sampler; var transformLayerCanvas = function (canvas) { var rotate1 = 15 * (Math.random() - 0.5); var rotate2 = 15 * (Math.random() - 0.5); var fac = 2 * Math.PI * (Math.random() - 0.5); var translateX = 60 * Math.cos(fac); var translateY = 30 * Math.sin(fac); canvas.style.transform = "rotate(" + rotate1 + "deg) translate(" + translateX + "px, " + translateY + "px) rotate(" + rotate2 + "deg)"; canvas.style.opacity = '0'; var removeDelay = 1e3 * (TRANSITION_DURATION + 1 + Math.random()); setTimeout(function () { return canvas.remove(); }, removeDelay); }; var ɵ1 = transformLayerCanvas; // fix retina problem // https://github.com/cburgmer/rasterizeHTML.js/blob/master/examples/retina.html var backingScale = function () { if (window.devicePixelRatio && window.devicePixelRatio > 1) { return window.devicePixelRatio; } return 1; }; var ɵ2 = backingScale; export var thanosRewind = function (target) { return new Promise(function (resolve) { target.style.opacity = '1'; target.style.visibility = 'visible'; resolve(); }); }; export var thanosSnap = function (target) { return new Promise(function (resolve) { var effect = document.createElement('div'); effect.classList.add('thanos'); target.parentNode.insertBefore(effect, target); var targetRect = target.getBoundingClientRect(); html2canvas(target).then(function (canvas) { var context = canvas.getContext('2d'); effect.style.position = 'absolute'; effect.style.left = targetRect.left + 'px'; effect.style.top = targetRect.top + 'px'; effect.style.width = targetRect.width + 'px'; effect.style.height = targetRect.height + 'px'; var width = canvas.width, height = canvas.height; // get element imageData var imgData = context.getImageData(0, 0, width, height); var layerImages = range(0, LAYERS).map(function (_) { return context.createImageData(width, height); }); sampler(layerImages, imgData, width, height); layerImages.forEach(function (effectImage, index) { var newCanvas = document.createElement('canvas'); newCanvas.style.position = 'absolute'; newCanvas.style.transition = "all " + TRANSITION_DURATION + "s"; newCanvas.width = targetRect.width * backingScale(); newCanvas.height = targetRect.height * backingScale(); newCanvas.style.width = newCanvas.width / backingScale() + "px"; newCanvas.style.height = newCanvas.height / backingScale() + "px"; var newContext = newCanvas.getContext('2d'); newContext.putImageData(effectImage, 0, 0); effect.appendChild(newCanvas); var transitionDelay = TRANSITION_DELAY * (index / layerImages.length); newCanvas.style.transitionDelay = transitionDelay + "s"; setTimeout(function () { return transformLayerCanvas(newCanvas); }, 0); }); target.style.transition = "opacity " + TRANSITION_DURATION + " ease"; target.style.opacity = '0'; setTimeout(function () { target.style.visibility = 'hidden'; effect.remove(); resolve({ rewind: function () { return thanosRewind(target); } }); }, 1e3 * TRANSITION_DURATION); }); }); }; export { ɵ0, ɵ1, ɵ2 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhhbm9zLXNuYXAuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ad2VsbHdpbmQvdGhhbm9zLXNuYXAvIiwic291cmNlcyI6WyJsaWIvdGhhbm9zLXNuYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBQ3hELE9BQU8sS0FBSyxZQUFZLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFOUIsSUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDO0FBRWpDLElBQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNsQixJQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQztBQUNoQyxJQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQztBQUU5QixJQUFNLE9BQU8sR0FBRyxVQUNkLFdBQXdCLEVBQ3hCLGFBQXdCLEVBQ3hCLEtBQWEsRUFDYixNQUFjO0lBRWQsSUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUN0QyxJQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDakIsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsQ0FBQztZQUN4QixLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLENBQUM7Z0JBQ3hCLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQzNCLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUNyRCxDQUFDO2dCQUNGLElBQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLEtBQUssSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLFNBQVMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUU7b0JBQ2xELElBQU0sT0FBTyxHQUFHLFFBQVEsR0FBRyxTQUFTLENBQUM7b0JBQ3JDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDckU7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7O0FBRUYsSUFBTSxvQkFBb0IsR0FBRyxVQUFDLE1BQXlCO0lBQ3JELElBQU0sT0FBTyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQyxJQUFNLE9BQU8sR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0MsSUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDaEQsSUFBTSxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsSUFBTSxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFdEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsWUFBVSxPQUFPLHVCQUFrQixVQUFVLFlBQU8sVUFBVSxtQkFBYyxPQUFPLFNBQU0sQ0FBQztJQUNuSCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFFM0IsSUFBTSxXQUFXLEdBQUcsR0FBRyxHQUFHLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLFVBQVUsQ0FBQyxjQUFNLE9BQUEsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFmLENBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNqRCxDQUFDLENBQUM7O0FBRUYscUJBQXFCO0FBQ3JCLGdGQUFnRjtBQUNoRixJQUFNLFlBQVksR0FBRztJQUNuQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFO1FBQzFELE9BQU8sTUFBTSxDQUFDLGdCQUFnQixDQUFDO0tBQ2hDO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUM7O0FBRUYsTUFBTSxDQUFDLElBQU0sWUFBWSxHQUFHLFVBQUMsTUFBbUI7SUFDOUMsT0FBQSxJQUFJLE9BQU8sQ0FBQyxVQUFBLE9BQU87UUFDakIsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUNwQyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUMsQ0FBQztBQUpGLENBSUUsQ0FBQztBQUVMLE1BQU0sQ0FBQyxJQUFNLFVBQVUsR0FBRyxVQUFDLE1BQW1CO0lBQzVDLE9BQUEsSUFBSSxPQUFPLENBQXVCLFVBQUEsT0FBTztRQUN2QyxJQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvQyxJQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUVsRCxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsTUFBeUI7WUFDakQsSUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7WUFDbkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDM0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7WUFDekMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDN0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFFdkMsSUFBQSxvQkFBSyxFQUFFLHNCQUFNLENBQVk7WUFFakMsd0JBQXdCO1lBQ3hCLElBQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFMUQsSUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBQSxDQUFDO2dCQUN4QyxPQUFBLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztZQUF0QyxDQUFzQyxDQUN2QyxDQUFDO1lBQ0YsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRTdDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBQyxXQUFXLEVBQUUsS0FBSztnQkFDckMsSUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFbkQsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO2dCQUN0QyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxTQUFPLG1CQUFtQixNQUFHLENBQUM7Z0JBRTNELFNBQVMsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssR0FBRyxZQUFZLEVBQUUsQ0FBQztnQkFDcEQsU0FBUyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLFlBQVksRUFBRSxDQUFDO2dCQUV0RCxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBTSxTQUFTLENBQUMsS0FBSyxHQUFHLFlBQVksRUFBRSxPQUFJLENBQUM7Z0JBQ2hFLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFNLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBWSxFQUFFLE9BQUksQ0FBQztnQkFFbEUsSUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUUzQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUU5QixJQUFNLGVBQWUsR0FBRyxnQkFBZ0IsR0FBRyxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3hFLFNBQVMsQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFNLGVBQWUsTUFBRyxDQUFDO2dCQUV4RCxVQUFVLENBQUMsY0FBTSxPQUFBLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxFQUEvQixDQUErQixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsYUFBVyxtQkFBbUIsVUFBTyxDQUFDO1lBQ2hFLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUUzQixVQUFVLENBQUM7Z0JBQ1QsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO2dCQUNuQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQztvQkFDTixNQUFNLEVBQUUsY0FBTSxPQUFBLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBcEIsQ0FBb0I7aUJBQ25DLENBQUMsQ0FBQztZQUNMLENBQUMsRUFBRSxHQUFHLEdBQUcsbUJBQW1CLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQTFERixDQTBERSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdG8gZml4IGVycm9yOiBDYW5ub3QgY2FsbCBhIG5hbWVzcGFjZSAoJ2h0bWwyY2FudmFzJylcclxuaW1wb3J0ICogYXMgaHRtbDJjYW52YXNfIGZyb20gJ2h0bWwyY2FudmFzJztcclxuaW1wb3J0IHsgcmFuZ2UgfSBmcm9tICdyYW1kYSc7XHJcblxyXG5jb25zdCBodG1sMmNhbnZhcyA9IGh0bWwyY2FudmFzXztcclxuXHJcbmNvbnN0IExBWUVSUyA9IDMyO1xyXG5jb25zdCBUUkFOU0lUSU9OX0RVUkFUSU9OID0gMS41O1xyXG5jb25zdCBUUkFOU0lUSU9OX0RFTEFZID0gMS4zNTtcclxuXHJcbmNvbnN0IHNhbXBsZXIgPSAoXHJcbiAgbGF5ZXJJbWFnZXM6IEltYWdlRGF0YVtdLFxyXG4gIHNvdXJjZUltZ0RhdGE6IEltYWdlRGF0YSxcclxuICB3aWR0aDogbnVtYmVyLFxyXG4gIGhlaWdodDogbnVtYmVyXHJcbikgPT4ge1xyXG4gIGNvbnN0IGxheWVyQ291bnQgPSBsYXllckltYWdlcy5sZW5ndGg7XHJcbiAgY29uc3QgcmVwZWF0ID0gMjtcclxuICByYW5nZSgwLCB3aWR0aCkuZm9yRWFjaCh4ID0+IHtcclxuICAgIHJhbmdlKDAsIGhlaWdodCkuZm9yRWFjaCh5ID0+IHtcclxuICAgICAgcmFuZ2UoMCwgcmVwZWF0KS5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHBpZWNlSW5kZXggPSBNYXRoLmZsb29yKFxyXG4gICAgICAgICAgKGxheWVyQ291bnQgKiAoTWF0aC5yYW5kb20oKSArICgyICogeCkgLyB3aWR0aCkpIC8gM1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcGl4ZWxQb3MgPSA0ICogKHkgKiB3aWR0aCArIHgpO1xyXG4gICAgICAgIGZvciAobGV0IHJnYmFJbmRleCA9IDA7IHJnYmFJbmRleCA8IDQ7IHJnYmFJbmRleCsrKSB7XHJcbiAgICAgICAgICBjb25zdCBkYXRhUG9zID0gcGl4ZWxQb3MgKyByZ2JhSW5kZXg7XHJcbiAgICAgICAgICBsYXllckltYWdlc1twaWVjZUluZGV4XS5kYXRhW2RhdGFQb3NdID0gc291cmNlSW1nRGF0YS5kYXRhW2RhdGFQb3NdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9KTtcclxufTtcclxuXHJcbmNvbnN0IHRyYW5zZm9ybUxheWVyQ2FudmFzID0gKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQpID0+IHtcclxuICBjb25zdCByb3RhdGUxID0gMTUgKiAoTWF0aC5yYW5kb20oKSAtIDAuNSk7XHJcbiAgY29uc3Qgcm90YXRlMiA9IDE1ICogKE1hdGgucmFuZG9tKCkgLSAwLjUpO1xyXG4gIGNvbnN0IGZhYyA9IDIgKiBNYXRoLlBJICogKE1hdGgucmFuZG9tKCkgLSAwLjUpO1xyXG4gIGNvbnN0IHRyYW5zbGF0ZVggPSA2MCAqIE1hdGguY29zKGZhYyk7XHJcbiAgY29uc3QgdHJhbnNsYXRlWSA9IDMwICogTWF0aC5zaW4oZmFjKTtcclxuXHJcbiAgY2FudmFzLnN0eWxlLnRyYW5zZm9ybSA9IGByb3RhdGUoJHtyb3RhdGUxfWRlZykgdHJhbnNsYXRlKCR7dHJhbnNsYXRlWH1weCwgJHt0cmFuc2xhdGVZfXB4KSByb3RhdGUoJHtyb3RhdGUyfWRlZylgO1xyXG4gIGNhbnZhcy5zdHlsZS5vcGFjaXR5ID0gJzAnO1xyXG5cclxuICBjb25zdCByZW1vdmVEZWxheSA9IDFlMyAqIChUUkFOU0lUSU9OX0RVUkFUSU9OICsgMSArIE1hdGgucmFuZG9tKCkpO1xyXG4gIHNldFRpbWVvdXQoKCkgPT4gY2FudmFzLnJlbW92ZSgpLCByZW1vdmVEZWxheSk7XHJcbn07XHJcblxyXG4vLyBmaXggcmV0aW5hIHByb2JsZW1cclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2NidXJnbWVyL3Jhc3Rlcml6ZUhUTUwuanMvYmxvYi9tYXN0ZXIvZXhhbXBsZXMvcmV0aW5hLmh0bWxcclxuY29uc3QgYmFja2luZ1NjYWxlID0gKCkgPT4ge1xyXG4gIGlmICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyAmJiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA+IDEpIHtcclxuICAgIHJldHVybiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcclxuICB9XHJcbiAgcmV0dXJuIDE7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgdGhhbm9zUmV3aW5kID0gKHRhcmdldDogSFRNTEVsZW1lbnQpID0+XHJcbiAgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICB0YXJnZXQuc3R5bGUub3BhY2l0eSA9ICcxJztcclxuICAgIHRhcmdldC5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xyXG4gICAgcmVzb2x2ZSgpO1xyXG4gIH0pO1xyXG5cclxuZXhwb3J0IGNvbnN0IHRoYW5vc1NuYXAgPSAodGFyZ2V0OiBIVE1MRWxlbWVudCkgPT5cclxuICBuZXcgUHJvbWlzZTx7IHJld2luZDogKCkgPT4ge30gfT4ocmVzb2x2ZSA9PiB7XHJcbiAgICBjb25zdCBlZmZlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIGVmZmVjdC5jbGFzc0xpc3QuYWRkKCd0aGFub3MnKTtcclxuICAgIHRhcmdldC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlZmZlY3QsIHRhcmdldCk7XHJcbiAgICBjb25zdCB0YXJnZXRSZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIGh0bWwyY2FudmFzKHRhcmdldCkudGhlbigoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCkgPT4ge1xyXG4gICAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgIGVmZmVjdC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICAgIGVmZmVjdC5zdHlsZS5sZWZ0ID0gdGFyZ2V0UmVjdC5sZWZ0ICsgJ3B4JztcclxuICAgICAgZWZmZWN0LnN0eWxlLnRvcCA9IHRhcmdldFJlY3QudG9wICsgJ3B4JztcclxuICAgICAgZWZmZWN0LnN0eWxlLndpZHRoID0gdGFyZ2V0UmVjdC53aWR0aCArICdweCc7XHJcbiAgICAgIGVmZmVjdC5zdHlsZS5oZWlnaHQgPSB0YXJnZXRSZWN0LmhlaWdodCArICdweCc7XHJcblxyXG4gICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGNhbnZhcztcclxuXHJcbiAgICAgIC8vIGdldCBlbGVtZW50IGltYWdlRGF0YVxyXG4gICAgICBjb25zdCBpbWdEYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICBjb25zdCBsYXllckltYWdlcyA9IHJhbmdlKDAsIExBWUVSUykubWFwKF8gPT5cclxuICAgICAgICBjb250ZXh0LmNyZWF0ZUltYWdlRGF0YSh3aWR0aCwgaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgICBzYW1wbGVyKGxheWVySW1hZ2VzLCBpbWdEYXRhLCB3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgIGxheWVySW1hZ2VzLmZvckVhY2goKGVmZmVjdEltYWdlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG5cclxuICAgICAgICBuZXdDYW52YXMuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgICAgIG5ld0NhbnZhcy5zdHlsZS50cmFuc2l0aW9uID0gYGFsbCAke1RSQU5TSVRJT05fRFVSQVRJT059c2A7XHJcblxyXG4gICAgICAgIG5ld0NhbnZhcy53aWR0aCA9IHRhcmdldFJlY3Qud2lkdGggKiBiYWNraW5nU2NhbGUoKTtcclxuICAgICAgICBuZXdDYW52YXMuaGVpZ2h0ID0gdGFyZ2V0UmVjdC5oZWlnaHQgKiBiYWNraW5nU2NhbGUoKTtcclxuXHJcbiAgICAgICAgbmV3Q2FudmFzLnN0eWxlLndpZHRoID0gYCR7bmV3Q2FudmFzLndpZHRoIC8gYmFja2luZ1NjYWxlKCl9cHhgO1xyXG4gICAgICAgIG5ld0NhbnZhcy5zdHlsZS5oZWlnaHQgPSBgJHtuZXdDYW52YXMuaGVpZ2h0IC8gYmFja2luZ1NjYWxlKCl9cHhgO1xyXG5cclxuICAgICAgICBjb25zdCBuZXdDb250ZXh0ID0gbmV3Q2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgbmV3Q29udGV4dC5wdXRJbWFnZURhdGEoZWZmZWN0SW1hZ2UsIDAsIDApO1xyXG5cclxuICAgICAgICBlZmZlY3QuYXBwZW5kQ2hpbGQobmV3Q2FudmFzKTtcclxuXHJcbiAgICAgICAgY29uc3QgdHJhbnNpdGlvbkRlbGF5ID0gVFJBTlNJVElPTl9ERUxBWSAqIChpbmRleCAvIGxheWVySW1hZ2VzLmxlbmd0aCk7XHJcbiAgICAgICAgbmV3Q2FudmFzLnN0eWxlLnRyYW5zaXRpb25EZWxheSA9IGAke3RyYW5zaXRpb25EZWxheX1zYDtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0cmFuc2Zvcm1MYXllckNhbnZhcyhuZXdDYW52YXMpLCAwKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0YXJnZXQuc3R5bGUudHJhbnNpdGlvbiA9IGBvcGFjaXR5ICR7VFJBTlNJVElPTl9EVVJBVElPTn0gZWFzZWA7XHJcbiAgICAgIHRhcmdldC5zdHlsZS5vcGFjaXR5ID0gJzAnO1xyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGFyZ2V0LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgICAgICBlZmZlY3QucmVtb3ZlKCk7XHJcbiAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICByZXdpbmQ6ICgpID0+IHRoYW5vc1Jld2luZCh0YXJnZXQpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sIDFlMyAqIFRSQU5TSVRJT05fRFVSQVRJT04pO1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcbiJdfQ==