1(()=>{var __webpack_modules__={88(){eval("{/**\n * jQuery.marquee - scrolling text like old marquee element\n * @author Aamir Afridi - aamirafridi(at)gmail(dot)com / http://aamirafridi.com/jquery/jquery-marquee-plugin\n */ ;\n(function($) {\n $.fn.marquee = function(options) {\n return this.each(function() {\n // Extend the options if any provided\n var o = $.extend({}, $.fn.marquee.defaults, options), $this = $(this), $marqueeWrapper, containerWidth, animationCss, verticalDir, elWidth, loopCount = 3, playState = 'animation-play-state', css3AnimationIsSupported = false, // Private methods\n _prefixedEvent = function _prefixedEvent(element, type, callback) {\n var pfx = [\n \"webkit\",\n \"moz\",\n \"MS\",\n \"o\",\n \"\"\n ];\n for(var p = 0; p < pfx.length; p++){\n if (!pfx[p]) type = type.toLowerCase();\n element.addEventListener(pfx[p] + type, callback, false);\n }\n }, _objToString = function _objToString(obj) {\n var tabjson = [];\n for(var p in obj){\n if (obj.hasOwnProperty(p)) {\n tabjson.push(p + ':' + obj[p]);\n }\n }\n tabjson.push();\n return '{' + tabjson.join(',') + '}';\n }, _startAnimationWithDelay = function _startAnimationWithDelay() {\n $this.timer = setTimeout(animate, o.delayBeforeStart);\n }, // Public methods\n methods = {\n pause: function pause() {\n if (css3AnimationIsSupported && o.allowCss3Support) {\n $marqueeWrapper.css(playState, 'paused');\n } else {\n // pause using pause plugin\n if ($.fn.pause) {\n $marqueeWrapper.pause();\n }\n }\n // save the status\n $this.data('runningStatus', 'paused');\n // fire event\n $this.trigger('paused');\n },\n resume: function resume() {\n // resume using css3\n if (css3AnimationIsSupported && o.allowCss3Support) {\n $marqueeWrapper.css(playState, 'running');\n } else {\n // resume using pause plugin\n if ($.fn.resume) {\n $marqueeWrapper.resume();\n }\n }\n // save the status\n $this.data('runningStatus', 'resumed');\n // fire event\n $this.trigger('resumed');\n },\n toggle: function toggle() {\n methods[$this.data('runningStatus') == 'resumed' ? 'pause' : 'resume']();\n },\n destroy: function destroy() {\n // Clear timer\n clearTimeout($this.timer);\n // Unbind all events\n $this.find(\"*\").addBack().unbind();\n // Just unwrap the elements that has been added using this plugin\n $this.html($this.find('.js-marquee:first').html());\n }\n };\n // Check for methods\n if (typeof options === 'string') {\n if ($.isFunction(methods[options])) {\n // Following two IF statements to support public methods\n if (!$marqueeWrapper) {\n $marqueeWrapper = $this.find('.js-marquee-wrapper');\n }\n if ($this.data('css3AnimationIsSupported') === true) {\n css3AnimationIsSupported = true;\n }\n methods[options]();\n }\n return;\n }\n /* Check if element has data attributes. They have top priority\n For details https://twitter.com/aamirafridi/status/403848
1044069679104 - Can't find a better solution :/\n jQuery 1.3.2 doesn't support $.data().KEY hence writting the following */ var dataAttributes = {}, attr;\n $.each(o, function(key, value) {\n // Check if element has this data attribute\n attr = $this.attr('data-' + key);\n if (typeof attr !== 'undefined') {\n // Now check if value is boolean or not\n switch(attr){\n case 'true':\n attr = true;\n break;\n case 'false':\n attr = false;\n break;\n }\n o[key] = attr;\n }\n });\n // since speed option is changed to duration, to support speed for those who are already using it\n o.duration = o.speed || o.duration;\n // Shortcut to see if direction is upward or downward\n verticalDir = o.direction == 'up' || o.direction == 'down';\n // no gap if not duplicated\n o.gap = o.duplicated ? parseInt(o.gap) : 0;\n // wrap inner content into a div\n $this.wrapInner('<div class=\"js-marquee\"></div>');\n // Make copy of the element\n var $el = $this.find('.js-marquee').css({\n 'margin-right': o.gap,\n 'float': 'left'\n });\n if (o.duplicated) {\n $el.clone(true).appendTo($this);\n }\n // wrap both inner elements into one div\n $this.wrapInner('<div style=\"width:100000px\" class=\"js-marquee-wrapper\"></div>');\n // Save the reference of the wrapper\n $marqueeWrapper = $this.find('.js-marquee-wrapper');\n // If direction is up or down, get the height of main element\n if (verticalDir) {\n var containerHeight = $this.height();\n $marqueeWrapper.removeAttr('style');\n $this.height(containerHeight);\n // Change the CSS for js-marquee element\n $this.find('.js-marquee').css({\n 'float': 'none',\n 'margin-bottom': o.gap,\n 'margin-right': 0\n });\n // Remove bottom margin from 2nd element if duplicated\n if (o.duplicated) $this.find('.js-marquee:last').css({\n 'margin-bottom': 0\n });\n var elHeight = $this.find('.js-marquee:first').height() + o.gap;\n // adjust the animation speed according to the text length\n if (o.startVisible && !o.duplicated) {\n // Compute the complete animation duration and save it for later reference\n // formula is to: (Height of the text node + height of the main container / Height of the main container) * speed;\n o._completeDuration = (parseInt(elHeight, 10) + parseInt(containerHeight, 10)) / parseInt(containerHeight, 10) * o.duration;\n // formula is to: (Height of the text node / height of the main container) * speed\n o.duration = parseInt(elHeight, 10) / parseInt(containerHeight, 10) * o.duration;\n } else {\n // formula is to: (Height of the text node + height of the main container / Height of the main container) * speed;\n o.duration = (parseInt(elHeight, 10) + parseInt(containerHeight, 10)) / parseInt(containerHeight, 10) * o.duration;\n }\n } else {\n // Save the width of the each element so we can use it in animation\n elWidth = $this.find('.js-marquee:first').width() + o.gap;\n // container width\n containerWidth = $this.width();\n // adjust the animation speed according to the text length\n if (o.startVisible && !o.duplicated) {\n // Compute the complete animation duration and save it for later reference\n // formula
1is to: (Width of the text node + width of the main container / Width of the main container) * speed;\n o._completeDuration = (parseInt(elWidth, 10) + parseInt(containerWidth, 10)) / parseInt(containerWidth, 10) * o.duration;\n // (Width of the text node / width of the main container) * speed\n o.duration = parseInt(elWidth, 10) / parseInt(containerWidth, 10) * o.duration;\n } else {\n // formula is to: (Width of the text node + width of the main container / Width of the main container) * speed;\n o.duration = (parseInt(elWidth, 10) + parseInt(containerWidth, 10)) / parseInt(containerWidth, 10) * o.duration;\n }\n }\n // if duplicated then reduce the speed\n if (o.duplicated) {\n o.duration = o.duration / 2;\n }\n if (o.allowCss3Support) {\n var elm = document.body || document.createElement('div'), animationName = 'marqueeAnimation-' + Math.floor(Math.random() * 10000000), domPrefixes = 'Webkit Moz O ms Khtml'.split(' '), animationString = 'animation', animationCss3Str = '', keyframeString = '';\n // Check css3 support\n if (elm.style.animation) {\n keyframeString = '@keyframes ' + animationName + ' ';\n css3AnimationIsSupported = true;\n }\n if (css3AnimationIsSupported === false) {\n for(var i = 0; i < domPrefixes.length; i++){\n if (elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) {\n var prefix = '-' + domPrefixes[i].toLowerCase() + '-';\n animationString = prefix + animationString;\n playState = prefix + playState;\n keyframeString = '@' + prefix + 'keyframes ' + animationName + ' ';\n css3AnimationIsSupported = true;\n break;\n }\n }\n }\n if (css3AnimationIsSupported) {\n animationCss3Str = animationName + ' ' + o.duration / 1000 + 's ' + o.delayBeforeStart / 1000 + 's infinite ' + o.css3easing;\n $this.data('css3AnimationIsSupported', true);\n }\n }\n var _rePositionVertically = function _rePositionVertically() {\n $marqueeWrapper.css('margin-top', o.direction == 'up' ? containerHeight + 'px' : '-' + elHeight + 'px');\n }, _rePositionHorizontally = function _rePositionHorizontally() {\n $marqueeWrapper.css('margin-left', o.direction == 'left' ? containerWidth + 'px' : '-' + elWidth + 'px');\n };\n // if duplicated option is set to true than position the wrapper\n if (o.duplicated) {\n if (verticalDir) {\n if (o.startVisible) {\n $marqueeWrapper.css('margin-top', 0);\n } else {\n $marqueeWrapper.css('margin-top', o.direction == 'up' ? containerHeight + 'px' : '-' + (elHeight * 2 - o.gap) + 'px');\n }\n } else {\n if (o.startVisible) {\n $marqueeWrapper.css('margin-left', 0);\n } else {\n $marqueeWrapper.css('margin-left', o.direction == 'left' ? containerWidth + 'px' : '-' + (elWidth * 2 - o.gap) + 'px');\n }\n }\n // If the text starts out visible we can skip the two initial loops\n if (!o.startVisible) {\n loopCount = 1;\n }\n } else if (o.startVisible) {\n // We only have two different loops if marquee is duplicated and starts visible \n loopCount = 2;\n } else {\n if (verticalDir) {\n _rePositionVertically();\n } else {\n _rePositionHorizontally();\n }\n }\n // Animate recursive method\n var animate = function animate1() {\n if (o.duplicated) {\n // When duplicated, the first loop will be scroll longer so double the duration\n if (loopCount === 1) {\n o._originalDuration = o.duration;\n if (verticalDir) {\n o.duration = o.direction == 'up' ? o.duration + containerHeight / (elHeight / o.duration) : o.duration * 2;\n } else {\n o.duration = o.direction == 'left' ? o.duration + containerWidth / (elWidth / o.duration) : o.duration * 2;\n }\n // Adjust the css3 animation as well\n if (animationCss3Str) {\n animationCss3Str = animationName + ' ' + o.duration / 1000 + 's ' + o.delayBeforeStart / 1000 + 's ' + o.css3easing;\n }\n loopCount++;\n } else if (loopCount === 2) {\n o.duration = o._originalDuration;\n // Adjust the css3 animation as well\n if (animationCss3Str) {\n animationName = animationName + '0';\n keyframeString = $.trim(keyframeString) + '0 ';\n animationCss3Str = animationName + ' ' + o.duration / 1000 + 's 0s infinite ' + o.css3easing;\n }\n loopCount++;\n }\n }\n if (verticalDir) {\n if (o.duplicated) {\n // Adjust the starting point of animation only when first loops finishes\n if (loopCount > 2) {\n $marqueeWrapper.css('margin-top', o.direction == 'up' ? 0 : '-' + elHeight + 'px');\n }\n animationCss = {\n 'margin-top': o.direction == 'up' ? '-' + elHeight + 'px' : 0\n };\n } else if (o.startVisible) {\n // This loop moves the marquee out of the container\n if (loopCount === 2) {\n // Adjust the css3 animation as well\n if (animationCss3Str) {\n animationCss3Str = animationName + ' ' + o.duration / 1000 + 's ' + o.delayBeforeStart / 1000 + 's ' + o.css3easing;\n }\n animationCss = {\n 'margin-top': o.direction == 'up' ? '-' + elHeight + 'px' : containerHeight + 'px'\n };\n loopCount++;\n } else if (loopCount === 3) {\n // Set the duration for the animation that will run forever\n o.duration = o._completeDuration;\n // Adjust the css3 animation as well\n if (animationCss3Str) {\n animationName = animationName + '0';\n keyframeString = $.trim(keyframeString) + '0 ';\n animationCss3Str = animationName + ' ' + o.duration / 1000 + 's 0s infinite ' + o.css3easing;\n }\n _rePositionVertically();\n }\n } else {\n _rePositionVertically();\n animationCss = {\n 'margin-top': o.direction == 'up' ? '-' + $marqueeWrapper.height() + 'px' : containerHeight + 'px'\n };\n }\n } else {\n if (o.duplicated) {\n // Adjust the starting point of animation only when first loops finishes\n if (loopCount > 2) {\n $marqueeWrapper.css('margin-left', o.direction == 'left' ? 0 : '-' + elWidth + 'px');\n }\n animationCss = {\n 'margin-left': o.direction == 'left' ? '-' + elWidth + 'px' : 0\n };\n } else if (o.startVisible) {\n // This loop moves the marquee out of the container\n if (loopCount === 2) {\n // Adjust the css3 animation as well\n if (animationCss3Str) {\n animationCss3Str = animationName + ' ' + o.duration / 1000 + 's ' + o.delayBeforeStart / 1000 + 's ' + o.css3easing;\n }\n animationCss = {\n 'margin-left': o.direction == 'left' ? '-' + elWidth + 'px' : containerWidth + 'px'\n };\n loopCount++;\n } else if (loopCount === 3) {\n // Set the duration for the animation that will run forever\n o.duration = o._completeDuration;\n // Adjust the css3 animation as well\n if (animationCss3Str) {\n animationName = animationName + '0';\n keyframeString = $.trim(keyframeString) + '0 ';\n animationCss3Str = animationName + ' ' + o.duration / 1000 + 's 0s infinite ' + o.css3easing;\n }\n _rePositionHorizontally();\n }\n } else {\n _rePositionHorizontally();\n animationCss = {\n 'margin-left': o.direction == 'left' ? '-' + elWidth + 'px' : containerWidth + 'px'\n };\n }\n }\n // fire event\n $this.trigger('beforeStarting');\n // If css3 support is available than do it with css3, otherwise use jQuery as fallback\n if (css3AnimationIsSupported) {\n // Add css3 animation to the element\n $marqueeWrapper.css(animationString, animationCss3Str);\n var keyframeCss = keyframeString + ' { 100% ' + _objToString(animationCss) + '}', $styles = $marqueeWrapper.find('style');\n // Now add the keyframe animation to the marquee element\n if ($styles.length !== 0) {\n // Bug fixed for jQuery 1.3.x - Instead of using .last(), use following\n $styles.filter(\":last\").html(keyframeCss);\n } else {\n $('head').append('<style>' + keyframeCss + '</style>');\n }\n // Animation iteration event\n _prefixedEvent($marqueeWrapper[0], \"AnimationIteration\", function() {\
1n $this.trigger('finished');\n });\n // Animation stopped\n _prefixedEvent($marqueeWrapper[0], \"AnimationEnd\", function() {\n animate();\n $this.trigger('finished');\n });\n } else {\n // Start animating\n $marqueeWrapper.animate(animationCss, o.duration, o.easing, function() {\n // fire event\n $this.trigger('finished');\n // animate again\n if (o.pauseOnCycle) {\n _startAnimationWithDelay();\n } else {\n animate();\n }\n });\n }\n // save the status\n $this.data('runningStatus', 'resumed');\n };\n // bind pause and resume events\n $this.bind('pause', methods.pause);\n $this.bind('resume', methods.resume);\n if (o.pauseOnHover) {\n $this.bind('mouseenter mouseleave', methods.toggle);\n }\n // If css3 animation is supported than call animate method at once\n if (css3AnimationIsSupported && o.allowCss3Support) {\n animate();\n } else {\n // Starts the recursive method\n _startAnimationWithDelay();\n }\n });\n }; // End of Plugin\n // Public: plugin defaults options\n $.fn.marquee.defaults = {\n // If you wish to always animate using jQuery\n allowCss3Support: true,\n // works when allowCss3Support is set to true - for full list see http://www.w3.org/TR/2013/WD-css3-transitions-20131119/#transition-timing-function\n css3easing: 'linear',\n // requires jQuery easing plugin. Default is 'linear'\n easing: 'linear',\n // pause time before the next animation turn in milliseconds\n delayBeforeStart: 1000,\n // 'left', 'right', 'up' or 'down'\n direction: 'left',\n // true or false - should the marquee be duplicated to show an effect of continues flow\n duplicated: false,\n // speed in milliseconds of the marquee in milliseconds\n duration: 5000,\n // gap in pixels between the tickers\n gap: 20,\n // on cycle pause the marquee\n pauseOnCycle: false,\n // on hover pause the marquee - using jQuery plugin https://github.com/tobia/Pause\n pauseOnHover: false,\n // the marquee is visible initially positioned next to the border towards it will be moving\n startVisible: false\n };\n})(jQuery);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9hZl90aGVtZV9kYXNoYm9hcmQvLi9hc3NldHMvbWFycXVlZS9qcXVlcnkubWFycXVlZS5qcz83MzY2Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogalF1ZXJ5Lm1hcnF1ZWUgLSBzY3JvbGxpbmcgdGV4dCBsaWtlIG9sZCBtYXJxdWVlIGVsZW1lbnRcbiAqIEBhdXRob3IgQWFtaXIgQWZyaWRpIC0gYWFtaXJhZnJpZGkoYXQpZ21haWwoZG90KWNvbSAvIGh0dHA6Ly9hYW1pcmFmcmlkaS5jb20vanF1ZXJ5L2pxdWVyeS1tYXJxdWVlLXBsdWdpblxuICovO1xuKGZ1bmN0aW9uKCQpIHtcbiAgICAkLmZuLm1hcnF1ZWUgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAvLyBFeHRlbmQgdGhlIG9wdGlvbnMgaWYgYW55IHByb3ZpZGVkXG4gICAgICAgICAgICB2Y
1XIgbyA9ICQuZXh0ZW5kKHt9LCAkLmZuLm1hcnF1ZWUuZGVmYXVsdHMsIG9wdGlvbnMpLFxuICAgICAgICAgICAgICAgICR0aGlzID0gJCh0aGlzKSxcbiAgICAgICAgICAgICAgICAkbWFycXVlZVdyYXBwZXIsIGNvbnRhaW5lcldpZHRoLCBhbmltYXRpb25Dc3MsIHZlcnRpY2FsRGlyLCBlbFdpZHRoLFxuICAgICAgICAgICAgICAgIGxvb3BDb3VudCA9IDMsXG4gICAgICAgICAgICAgICAgcGxheVN0YXRlID0gJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJyxcbiAgICAgICAgICAgICAgICBjc3MzQW5pbWF0aW9uSXNTdXBwb3J0ZWQgPSBmYWxzZSxcblxuICAgICAgICAgICAgICAgIC8vIFByaXZhdGUgbWV0aG9kc1xuICAgICAgICAgICAgICAgIF9wcmVmaXhlZEV2ZW50ID0gZnVuY3Rpb24oZWxlbWVudCwgdHlwZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBmeCA9IFtcIndlYmtpdFwiLCBcIm1velwiLCBcIk1TXCIsIFwib1wiLCBcIlwiXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcCA9IDA7IHAgPCBwZngubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGZ4W3BdKSB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHBmeFtwXSArIHR5cGUsIGNhbGxiYWNrLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgX29ialRvU3RyaW5nID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YWJqc29uID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHAgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFianNvbi5wdXNoKHAgKyAnOicgKyBvYmpbcF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRhYmpzb24ucHVzaCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3snICsgdGFianNvbi5qb2luKCcsJykgKyAnfSc7XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIF9zdGFydEFuaW1hdGlvbldpdGhEZWxheSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy50aW1lciA9IHNldFRpbWVvdXQoYW5pbWF0ZSwgby5kZWxheUJlZm9yZVN0YXJ0KTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgLy8gUHVibGljIG1ldGhvZHNcbiAgICAgICAgICAgICAgICBtZXRob2RzID0ge1xuICAgICAgICAgICAgICAgICAgICBwYXVzZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3NzM0FuaW1hdGlvbklzU3VwcG9ydGVkICYmIG8uYWxsb3dDc3MzU3VwcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYXJxdWVlV3JhcHBlci5jc3MocGxheVN0YXRlLCAncGF1c2VkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhdXNlIHVzaW5nIHBhdXNlIHBsdWdpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkLmZuLnBhdXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYXJxdWVlV3JhcHBlci5wYXVzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhdmUgdGhlIHN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuZGF0YSgncnVubmluZ1N0YXR1cycsICdwYXVzZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpcmUgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLnRyaWdnZXIoJ3BhdXNlZCcpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZXN1bWUgdXNpbmcgY3NzM1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNzczNBbmltYXRpb25Jc1N1cHBvcnRlZCAmJiBvLmFsbG93Q3NzM1N1cHBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWFycXVlZVdyYXBwZXIuY3NzKHBsYXlTdGF0ZSwgJ3J1bm5pbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzdW1lIHVzaW5nIHBhdXNlIHBsdWdpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkLmZuLnJlc3VtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWFycXVlZVdyYXBwZXIucmVzdW1lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2F2ZSB0aGUgc3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5kYXRhKCdydW5uaW5nU3RhdHVzJywgJ3Jlc3VtZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpcmUgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLnRyaWdnZXIoJ3Jlc3VtZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICB0b2dnbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kc1skdGhpcy5kYXRhKCdydW5uaW5nU3RhdHVzJykgPT0gJ3Jlc3VtZWQnID8gJ3BhdXNlJyA6ICdyZXN1bWUnXSgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgdGltZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCgkdGhpcy50aW1lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmJpbmQgYWxsIGV2ZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuZmluZChcIipcIikuYWRkQmFjaygpLnVuYmluZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCB1bndyYXAgdGhlIGVsZW1lbnRzIHRoYXQgaGFzIGJlZW4gYWRkZWQgdXNpbmcgdGhpcyBwbHVnaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLmh0bWwoJHRoaXMuZmluZCgnLmpzLW1hcnF1ZWU6Zmlyc3QnKS5odG1sKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG1ldGhvZHNcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKG1ldGhvZHNbb3B0aW9uc10pKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvbGxvd2luZyB0d28gSUYgc3RhdGVtZW50cyB0byBzdXBwb3J0IHB1YmxpYyBtZXRob2RzXG4gICAgICAgICAgICAgICAgICAgIGlmICghJG1hcnF1ZWVXcmFwcGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkbWFycXVlZVdyYXBwZXIgPSAkdGhpcy5maW5kKCcuanMtbWFycXVlZS13cmFwcGVyJyk7XG4gICAgICAgICAgICAgICAgICAgI
1H1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLmRhdGEoJ2NzczNBbmltYXRpb25Jc1N1cHBvcnRlZCcpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjc3MzQW5pbWF0aW9uSXNTdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZHNbb3B0aW9uc10oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKiBDaGVjayBpZiBlbGVtZW50IGhhcyBkYXRhIGF0dHJpYnV0ZXMuIFRoZXkgaGF2ZSB0b3AgcHJpb3JpdHlcbiAgICAgICAgICAgICAgIEZvciBkZXRhaWxzIGh0dHBzOi8vdHdpdHRlci5jb20vYWFtaXJhZnJpZGkvc3RhdHVzLzQwMzg0ODA0NDA2OTY3OTEwNCAtIENhbid0IGZpbmQgYSBiZXR0ZXIgc29sdXRpb24gOi9cbiAgICAgICAgICAgICAgIGpRdWVyeSAxLjMuMiBkb2Vzbid0IHN1cHBvcnQgJC5kYXRhKCkuS0VZIGhlbmNlIHdyaXR0aW5nIHRoZSBmb2xsb3dpbmcgKi9cbiAgICAgICAgICAgIHZhciBkYXRhQXR0cmlidXRlcyA9IHt9LFxuICAgICAgICAgICAgYXR0cjtcbiAgICAgICAgICAgICQuZWFjaChvLCBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZWxlbWVudCBoYXMgdGhpcyBkYXRhIGF0dHJpYnV0ZVxuICAgICAgICAgICAgICAgIGF0dHIgPSAkdGhpcy5hdHRyKCdkYXRhLScgKyBrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXR0ciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTm93IGNoZWNrIGlmIHZhbHVlIGlzIGJvb2xlYW4gb3Igbm90XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0cikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndHJ1ZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmYWxzZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IGF0dHI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIHNpbmNlIHNwZWVkIG9wdGlvbiBpcyBjaGFuZ2VkIHRvIGR1cmF0aW9uLCB0byBzdXBwb3J0IHNwZWVkIGZvciB0aG9zZSB3aG8gYXJlIGFscmVhZHkgdXNpbmcgaXRcbiAgICAgICAgICAgIG8uZHVyYXRpb24gPSBvLnNwZWVkIHx8IG8uZHVyYXRpb247XG5cbiAgICAgICAgICAgIC8vIFNob3J0Y3V0IHRvIHNlZSBpZiBkaXJlY3Rpb24gaXMgdXB3YXJkIG9yIGRvd253YXJkXG4gICAgICAgICAgICB2ZXJ0aWNhbERpciA9IG8uZGlyZWN0aW9uID09ICd1cCcgfHwgby5kaXJlY3Rpb24gPT0gJ2Rvd24nO1xuXG4gICAgICAgICAgICAvLyBubyBnYXAgaWYgbm90IGR1cGxpY2F0ZWRcbiAgICAgICAgICAgIG8uZ2FwID0gby5kdXBsaWNhdGVkID8gcGFyc2VJbnQoby5nYXApIDogMDtcblxuICAgICAgICAgICAgLy8gd3JhcCBpbm5lciBjb250ZW50IGludG8gYSBkaXZcbiAgICAgICAgICAgICR0aGlzLndyYXBJbm5lcignPGRpdiBjbGFzcz1cImpzLW1hcnF1ZWVcIj48L2Rpdj4nKTtcblxuICAgICAgICAgICAgLy8gTWFrZSBjb3B5IG9mIHRoZSBlbGVtZW50XG4gICAgICAgICAgICB2Y
1XIgJGVsID0gJHRoaXMuZmluZCgnLmpzLW1hcnF1ZWUnKS5jc3Moe1xuICAgICAgICAgICAgICAgICdtYXJnaW4tcmlnaHQnOiBvLmdhcCxcbiAgICAgICAgICAgICAgICAnZmxvYXQnOiAnbGVmdCdcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoby5kdXBsaWNhdGVkKSB7XG4gICAgICAgICAgICAgICAgJGVsLmNsb25lKHRydWUpLmFwcGVuZFRvKCR0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gd3JhcCBib3RoIGlubmVyIGVsZW1lbnRzIGludG8gb25lIGRpdlxuICAgICAgICAgICAgJHRoaXMud3JhcElubmVyKCc8ZGl2IHN0eWxlPVwid2lkdGg6MTAwMDAwcHhcIiBjbGFzcz1cImpzLW1hcnF1ZWUtd3JhcHBlclwiPjwvZGl2PicpO1xuXG4gICAgICAgICAgICAvLyBTYXZlIHRoZSByZWZlcmVuY2Ugb2YgdGhlIHdyYXBwZXJcbiAgICAgICAgICAgICRtYXJxdWVlV3JhcHBlciA9ICR0aGlzLmZpbmQoJy5qcy1tYXJxdWVlLXdyYXBwZXInKTtcblxuICAgICAgICAgICAgLy8gSWYgZGlyZWN0aW9uIGlzIHVwIG9yIGRvd24sIGdldCB0aGUgaGVpZ2h0IG9mIG1haW4gZWxlbWVudFxuICAgICAgICAgICAgaWYgKHZlcnRpY2FsRGlyKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lckhlaWdodCA9ICR0aGlzLmhlaWdodCgpO1xuICAgICAgICAgICAgICAgICRtYXJxdWVlV3JhcHBlci5yZW1vdmVBdHRyKCdzdHlsZScpO1xuICAgICAgICAgICAgICAgICR0aGlzLmhlaWdodChjb250YWluZXJIZWlnaHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ2hhbmdlIHRoZSBDU1MgZm9yIGpzLW1hcnF1ZWUgZWxlbWVudFxuICAgICAgICAgICAgICAgICR0aGlzLmZpbmQoJy5qcy1tYXJxdWVlJykuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgJ2Zsb2F0JzogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbSc6IG8uZ2FwLFxuICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXJpZ2h0JzogMFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGJvdHRvbSBtYXJnaW4gZnJvbSAybmQgZWxlbWVudCBpZiBkdXBsaWNhdGVkXG4gICAgICAgICAgICAgICAgaWYgKG8uZHVwbGljYXRlZCkgJHRoaXMuZmluZCgnLmpzLW1hcnF1ZWU6bGFzdCcpLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tJzogMFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdmFyIGVsSGVpZ2h0ID0gJHRoaXMuZmluZCgnLmpzLW1hcnF1ZWU6Zmlyc3QnKS5oZWlnaHQoKSArIG8uZ2FwO1xuXG4gICAgICAgICAgICAgICAgLy8gYWRqdXN0IHRoZSBhbmltYXRpb24gc3BlZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXh0IGxlbmd0aFxuICAgICAgICAgICAgICAgIGlmIChvLnN0YXJ0VmlzaWJsZSAmJiAhby5kdXBsaWNhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIGNvbXBsZXRlIGFuaW1hdGlvbiBkdXJhdGlvbiBhbmQgc2F2ZSBpdCBmb3IgbGF0ZXIgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICAgIC8vIGZvcm11bGEgaXMgdG86IChIZWlnaHQgb2YgdGhlIHRleHQgbm9kZSArIGhlaWdodCBvZiB0aGUgbWFpbiBjb250YWluZXIgLyBIZWlnaHQgb2YgdGhlIG1haW4gY29udGFpbmVyKSAqIHNwZWVkO1xuICAgICAgICAgICAgICAgICAgICBvLl9jb21wbGV0ZUR1cmF0aW9uID0gKChwYXJzZUludChlbEhlaWdodCwgMTApICsgcGFyc2VJbnQoY29udGFpbmVySGVpZ2h0LCAxMCkpIC8gcGFyc2VJbnQoY29udGFpbmVySGVpZ2h0LCAxMCkpICogby5kdXJhdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAvLyBmb3JtdWxhIGlzIHRvOiAoSGVpZ2h0IG9mIHRoZSB0ZXh0IG5vZGUgLyBoZWlnaHQgb2YgdGhlIG1haW4gY29udGFpbmVyKSAqIHNwZWVkXG4gICAgICAgICAgICAgICAgICAgIG8uZHVyYXRpb24gPSAocGFyc2VJbnQoZWxIZWlnaHQsIDEwKSAvIHBhcnNlSW50KGNvbnRhaW5lckhlaWdodCwgMTApKSAqIG8uZHVyYXRpb247XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9ybXVsYSBpcyB0bzogKEhlaWdodCBvZiB0aGUgdGV4dCBub2RlICsgaGVpZ2h0IG9mIHRoZSBtYWluIGNvbnRhaW5lciAvIEhlaWdodCBvZiB0aGUgbWFpbiBjb250YWluZXIpICogc3BlZWQ7XG4gICAgICAgICAgICAgICAgICAgIG8uZHVyYXRpb24gPSAoKHBhcnNlSW50KGVsSGVpZ2h0LCAxMCkgKyBwYXJzZUludChjb250YWluZXJIZWlnaHQsIDEwKSkgLyBwYXJzZUludChjb250YWluZXJIZWlnaHQsIDEwKSkgKiBvLmR1cmF0aW9uO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBTYXZlIHRoZSB3aWR0aCBvZiB0aGUgZWFjaCBlbGVtZW50IHNvIHdlIGNhbiB1c2UgaXQgaW4gYW5pbWF0aW9uXG4gICAgICAgICAgICAgICAgZWxXaWR0aCA9ICR0aGlzLmZpbmQoJy5qcy1tYXJxdWVlOmZpcnN0Jykud2lkdGgoKSArIG8uZ2FwO1xuXG4gICAgICAgICAgICAgICAgLy8gY29udGFpbmVyIHdpZHRoXG4gICAgICAgICAgICAgICAgY29udGFpbmVyV2lkdGggPSAkdGhpcy53aWR0aCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gYWRqdXN0IHRoZSBhbmltYXRpb24gc3BlZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXh0IGxlbmd0aFxuICAgICAgICAgICAgICAgIGlmIChvLnN0YXJ0VmlzaWJsZSAmJiAhby5kdXBsaWNhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIGNvbXBsZXRlIGFuaW1hdGlvbiBkdXJhdGlvbiBhbmQgc2F2ZSBpdCBmb3IgbGF0ZXIgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICAgIC8vIGZvcm11bGEgaXMgdG86IChXaWR0aCBvZiB0aGUgdGV4dCBub2RlICsgd2lkdGggb2YgdGhlIG1haW4gY29udGFpbmVyIC8gV2lkdGggb2YgdGhlIG1haW4gY29udGFpbmVyKSAqIHNwZWVkO1xuICAgICAgICAgICAgICAgICAgICBvLl9jb21wbGV0ZUR1cmF0aW9uID0gKChwYXJzZUludChlbFdpZHRoLCAxMCkgKyBwYXJzZUludChjb250YWluZXJXaWR0aCwgMTApKSAvIHBhcnNlSW50KGNvbnRhaW5lcldpZHRoLCAxMCkpICogby5kdXJhdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAvLyAoV2lkdGggb2YgdGhlIHRleHQgbm9kZSAvIHdpZHRoIG9mIHRoZSBtYWluIGNvbnRhaW5lcikgKiBzcGVlZFxuICAgICAgICAgICAgICAgICAgICBvLmR1cmF0aW9uID0gKHBhcnNlSW50KGVsV2lkdGgsIDEwKSAvIHBhcnNlSW50KGNvbnRhaW5lcldpZHRoLCAxMCkpICogby5kdXJhdGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBmb3JtdWxhIGlzIHRvOiAoV2lkdGggb2YgdGhlIHRleHQgbm9kZSArIH
1dpZHRoIG9mIHRoZSBtYWluIGNvbnRhaW5lciAvIFdpZHRoIG9mIHRoZSBtYWluIGNvbnRhaW5lcikgKiBzcGVlZDtcbiAgICAgICAgICAgICAgICAgICAgby5kdXJhdGlvbiA9ICgocGFyc2VJbnQoZWxXaWR0aCwgMTApICsgcGFyc2VJbnQoY29udGFpbmVyV2lkdGgsIDEwKSkgLyBwYXJzZUludChjb250YWluZXJXaWR0aCwgMTApKSAqIG8uZHVyYXRpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBkdXBsaWNhdGVkIHRoZW4gcmVkdWNlIHRoZSBzcGVlZFxuICAgICAgICAgICAgaWYgKG8uZHVwbGljYXRlZCkge1xuICAgICAgICAgICAgICAgIG8uZHVyYXRpb24gPSBvLmR1cmF0aW9uIC8gMjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG8uYWxsb3dDc3MzU3VwcG9ydCkge1xuICAgICAgICAgICAgICAgIHZhclxuICAgICAgICAgICAgICAgIGVsbSA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbk5hbWUgPSAnbWFycXVlZUFuaW1hdGlvbi0nICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMDApLFxuICAgICAgICAgICAgICAgICAgICBkb21QcmVmaXhlcyA9ICdXZWJraXQgTW96IE8gbXMgS2h0bWwnLnNwbGl0KCcgJyksXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblN0cmluZyA9ICdhbmltYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25Dc3MzU3RyID0gJycsXG4gICAgICAgICAgICAgICAgICAgIGtleWZyYW1lU3RyaW5nID0gJyc7XG5cbiAgICAgICAgICAgICAgICAvLyBDaGVjayBjc3MzIHN1cHBvcnRcbiAgICAgICAgICAgICAgICBpZiAoZWxtLnN0eWxlLmFuaW1hdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBrZXlmcmFtZVN0cmluZyA9ICdAa2V5ZnJhbWVzICcgKyBhbmltYXRpb25OYW1lICsgJyAnO1xuICAgICAgICAgICAgICAgICAgICBjc3MzQW5pbWF0aW9uSXNTdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjc3MzQW5pbWF0aW9uSXNTdXBwb3J0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9tUHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbG0uc3R5bGVbZG9tUHJlZml4ZXNbaV0gKyAnQW5pbWF0aW9uTmFtZSddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgcHJlZml4ID0gJy0nICsgZG9tUHJlZml4ZXNbaV0udG9Mb3dlckNhc2UoKSArICctJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25TdHJpbmcgPSBwcmVmaXggKyBhbmltYXRpb25TdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheVN0YXRlID0gcHJlZml4ICsgcGxheVN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZyYW1lU3RyaW5nID0gJ0AnICsgcHJlZml4ICsgJ2tleWZyYW1lcyAnICsgYW5pbWF0aW9uTmFtZSArICcgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3MzQW5pbWF0aW9uSXNTdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNzczNBbmltYXRpb25Jc1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25Dc3MzU3RyID0gYW5pbWF0aW9uTmFtZSArICcgJyArIG8uZHVyYXRpb24gLyAxMDAwICsgJ3MgJyArIG8uZGVsYXlCZWZvcmVTdGFydCAvIDEwMDAgKyAncyBpbmZpbml0ZSAnICsgby5jc3MzZWFzaW5nO1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy5kYXRhKCdjc3MzQW5pbWF0aW9uSXNTdXBwb3J0ZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBfcmVQb3NpdGlvblZlcnRpY2FsbHkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAkbWFycXVlZVdyYXBwZXIuY3NzKCdtYXJnaW4tdG9wJywgby5kaXJlY3Rpb24gPT0gJ3VwJyA/IGNvbnRhaW5lckhlaWdodCArICdweCcgOiAnLScgKyBlbEhlaWdodCArICdweCcpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9yZVBvc2l0aW9uSG9yaXpvbnRhbGx5ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgJG1hcnF1ZWVXcmFwcGVyLmNzcygnbWFyZ2luLWxlZnQnLCBvLmRpcmVjdGlvbiA9PSAnbGVmdCcgPyBjb250YWluZXJXaWR0aCArICdweCcgOiAnLScgKyBlbFdpZHRoICsgJ3B4Jyk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBpZiBkdXBsaWNhdGVkIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZSB0aGFuIHBvc2l0aW9uIHRoZSB3cmFwcGVyXG4gICAgICAgICAgICBpZiAoby5kdXBsaWNhdGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZlcnRpY2FsRGlyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvLnN0YXJ0VmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJG1hcnF1ZWVXcmFwcGVyLmNzcygnbWFyZ2luLXRvcCcsIDApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgJG1hcnF1ZWVXcmFwcGVyLmNzcygnbWFyZ2luLXRvcCcsIG8uZGlyZWN0aW9uID09ICd1cCcgPyBjb250YWluZXJIZWlnaHQgKyAncHgnIDogJy0nICsgKChlbEhlaWdodCAqIDIpIC0gby5nYXApICsgJ3B4Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoby5zdGFydFZpc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRtYXJxdWVlV3JhcHBlci5jc3MoJ21hcmdpbi1sZWZ0JywgMCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkbWFycXVlZVdyYXBwZXIuY3NzKCdtYXJnaW4tbGVmdCcsIG8uZGlyZWN0aW9uID09ICdsZWZ0JyA/IGNvbnRhaW5lcldpZHRoICsgJ3B4JyA6ICctJyArICgoZWxXaWR0aCAqIDIpIC0gby5nYXApICsgJ3B4Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdGV4dCBzdGFydHMgb3V0IHZpc2libGUgd2UgY2FuIHNraXAgdGhlIHR3byBpbml0aWFsIGxvb3BzXG4gICAgICAgICAgICAgICAgaWYgKCFvLnN0YXJ0VmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgbG9vcENvdW50ID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG8uc3RhcnRWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgLy8gV2Ugb25seSBoYXZlIHR3byBkaWZmZXJlbnQgbG9vcHMgaWYgbWFycXVlZSBpcyBkdXBsaWNhdGVkIGFuZCBzdGFydHMgdmlzaWJsZSBcbiAgICAgICAgICAgICAgICBsb29wQ291bnQgPSAyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodmVydGljYWxEaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgX3JlUG9zaXRpb25WZXJ0aWNhbGx5KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3JlUG9zaXRpb25Ib3Jpem9udGFsbHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFuaW1hdGUgcmVjdXJzaXZlIG1ldGhvZFxuICAgICAgICAgICAgdmFyIGFuaW1hdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoby5kdXBsaWNhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gZHVwbGljYXRlZCwgdGhlIGZpcnN0IGxvb3Agd2lsbCBiZSBzY3JvbGwgbG9uZ2VyIHNvIGRvdWJsZSB0aGUgZHVyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvb3BDb3VudCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgby5fb3JpZ2luYWxEdXJhdGlvbiA9IG8uZHVyYXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVydGljYWxEaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvLmR1cmF0aW9uID0gby5kaXJlY3Rpb24gPT0gJ3VwJyA/IG8uZHVyYXRpb24gKyAoY29udGFpbmVySGVpZ2h0IC8gKChlbEhlaWdodCkgLyBvLmR1cmF0aW9uKSkgOiBvLmR1cmF0aW9uICogMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgby5kdXJhdGlvbiA9IG8uZGlyZWN0aW9uID09ICdsZWZ0JyA/IG8uZHVyYXRpb24gKyAoY29udGFpbmVyV2lkdGggLyAoKGVsV2lkdGgpIC8gby5kdXJhdGlvbikpIDogby5kdXJhdGlvbiAqIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGp1c3QgdGhlIGNzczMgYW5pbWF0aW9uIGFzIHdlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmltYXRpb25Dc3MzU3RyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uQ3NzM1N0ciA9IGFuaW1hdGlvbk5hbWUgKyAnICcgKyBvLmR1cmF0aW9uIC8gMTAwMCArICdzICcgKyBvLmRlbGF5QmVmb3JlU3RhcnQgLyAxMDAwICsgJ3MgJyArIG8uY3NzM2Vhc2luZztcbiAgICAgICAgICAgICAgICAgICAgICAgI
1H1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIE9uIDJuZCBsb29wIHRoaW5ncyBiYWNrIHRvIG5vcm1hbCwgbm9ybWFsIGR1cmF0aW9uIGZvciB0aGUgcmVzdCBvZiBhbmltYXRpb25zXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvb3BDb3VudCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgby5kdXJhdGlvbiA9IG8uX29yaWdpbmFsRHVyYXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGp1c3QgdGhlIGNzczMgYW5pbWF0aW9uIGFzIHdlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmltYXRpb25Dc3MzU3RyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uTmFtZSA9IGFuaW1hdGlvbk5hbWUgKyAnMCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZnJhbWVTdHJpbmcgPSAkLnRyaW0oa2V5ZnJhbWVTdHJpbmcpICsgJzAgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25Dc3MzU3RyID0gYW5pbWF0aW9uTmFtZSArICcgJyArIG8uZHVyYXRpb24gLyAxMDAwICsgJ3MgMHMgaW5maW5pdGUgJyArIG8uY3NzM2Vhc2luZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRpY2FsRGlyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvLmR1cGxpY2F0ZWQpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSBzdGFydGluZyBwb2ludCBvZiBhbmltYXRpb24gb25seSB3aGVuIGZpcnN0IGxvb3BzIGZpbmlzaGVzXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9vcENvdW50ID4gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYXJxdWVlV3JhcHBlci5jc3MoJ21hcmdpbi10b3AnLCBvLmRpcmVjdGlvbiA9PSAndXAnID8gMCA6ICctJyArIGVsSGVpZ2h0ICsgJ3B4Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNzcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcCc6IG8uZGlyZWN0aW9uID09ICd1cCcgPyAnLScgKyBlbEhlaWdodCArICdweCcgOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG8uc3RhcnRWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGxvb3AgbW92ZXMgdGhlIG1hcnF1ZWUgb3V0IG9mIHRoZSBjb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb29wQ291bnQgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGp1c3QgdGhlIGNzczMgYW5pbWF0aW9uIGFzIHdlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5pbWF0aW9uQ3NzM1N0cikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25Dc3MzU3RyID0gYW5pbWF0aW9uTmFtZSArICcgJyArIG8uZHVyYXRpb24gLyAxMDAwICsgJ3MgJyArIG8uZGVsYXlCZWZvcmVTdGFydCAvIDEwMDAgKyAncyAnICsgby5jc3MzZWFzaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25Dc3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wJzogby5kaXJlY3Rpb24gPT0gJ3VwJyA/ICctJyArIGVsSGVpZ2h0ICsgJ3B4JyA6IGNvbnRhaW5lckhlaWdodCArICdweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb29wQ291bnQgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGR1cmF0aW9uIGZvciB0aGUgYW5pbWF0aW9uIHRoYXQgd2lsbCBydW4gZm9yZXZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8uZHVyYXRpb24gPSBvLl9jb21wbGV0ZUR1cmF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkanVzdCB0aGUgY3NzMyBhbmltYXRpb24gYXMgd2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmltYXRpb25Dc3MzU3RyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25OYW1lID0gYW5pbWF0aW9uTmFtZSArICcwJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZyYW1lU3RyaW5nID0gJC50cmltKGtleWZyYW1lU3RyaW5nKSArICcwICc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25Dc3MzU3RyID0gYW5pbWF0aW9uTmFtZSArICcgJyArIG8uZHVyYXRpb24gLyAxMDAwICsgJ3MgMHMgaW5maW5pdGUgJyArIG8uY3NzM2Vhc2luZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlUG9zaXRpb25WZXJ0aWNhbGx5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfcmVQb3NpdGlvblZlcnRpY2FsbHkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNzcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcCc6IG8uZGlyZWN0aW9uID09ICd1cCcgPyAnLScgKyAoJG1hcnF1ZWVXcmFwcGVyLmhlaWdodCgpKSArICdweCcgOiBjb250YWluZXJIZWlnaHQgKyAncHgnXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG8uZHVwbGljYXRlZCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGp1c3QgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIGFuaW1hdGlvbiBvbmx5IHdoZW4gZmlyc3QgbG9vcHMgZmluaXNoZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb29wQ291bnQgPiAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1hcnF1ZWVXcmFwcGVyLmNzcygnbWFyZ2luLWxlZnQnLCBvLmRpcmVjdGlvbiA9PSAnbGVmdCcgPyAwIDogJy0nICsgZWxXaWR0aCArICdweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25Dc3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1sZWZ0Jzogby5kaXJlY3Rpb24gPT0gJ2xlZnQnID8gJy0nICsgZWxXaWR0aCArICdweCcgOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgI
1H0gZWxzZSBpZiAoby5zdGFydFZpc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbG9vcCBtb3ZlcyB0aGUgbWFycXVlZSBvdXQgb2YgdGhlIGNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvb3BDb3VudCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkanVzdCB0aGUgY3NzMyBhbmltYXRpb24gYXMgd2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmltYXRpb25Dc3MzU3RyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNzczNTdHIgPSBhbmltYXRpb25OYW1lICsgJyAnICsgby5kdXJhdGlvbiAvIDEwMDAgKyAncyAnICsgby5kZWxheUJlZm9yZVN0YXJ0IC8gMTAwMCArICdzICcgKyBvLmNzczNlYXNpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNzcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1sZWZ0Jzogby5kaXJlY3Rpb24gPT0gJ2xlZnQnID8gJy0nICsgZWxXaWR0aCArICdweCcgOiBjb250YWluZXJXaWR0aCArICdweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb29wQ291bnQgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGR1cmF0aW9uIGZvciB0aGUgYW5pbWF0aW9uIHRoYXQgd2lsbCBydW4gZm9yZXZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8uZHVyYXRpb24gPSBvLl9jb21wbGV0ZUR1cmF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkanVzdCB0aGUgY3NzMyBhbmltYXRpb24gYXMgd2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmltYXRpb25Dc3MzU3RyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbk5hbWUgPSBhbmltYXRpb25OYW1lICsgJzAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmcmFtZVN0cmluZyA9ICQudHJpbShrZXlmcmFtZVN0cmluZykgKyAnMCAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25Dc3MzU3RyID0gYW5pbWF0aW9uTmFtZSArICcgJyArIG8uZHVyYXRpb24gLyAxMDAwICsgJ3MgMHMgaW5maW5pdGUgJyArIG8uY3NzM2Vhc2luZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlUG9zaXRpb25Ib3Jpem9udGFsbHkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9yZVBvc2l0aW9uSG9yaXpvbnRhbGx5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25Dc3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1sZWZ0Jzogby5kaXJlY3Rpb24gPT0gJ2xlZnQnID8gJy0nICsgZWxXaWR0aCArICdweCcgOiBjb250YWluZXJXaWR0aCArICdweCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBmaXJlIGV2ZW50XG4gICAgICAgICAgICAgICAgJHRoaXMudHJpZ2dlcignYmVmb3JlU3RhcnRpbmcnKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGNzczMgc3VwcG9ydCBpcyBhdmFpbGFibGUgdGhhbiBkbyBpdCB3aXRoIGNzczMsIG90aGVyd2lzZSB1c2UgalF1ZXJ5IGFzIGZhbGxiYWNrXG4gICAgICAgICAgICAgICAgaWYgKGNzczNBbmltYXRpb25Jc1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgY3NzMyBhbmltYXRpb24gdG8gdGhlIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgJG1hcnF1ZWVXcmFwcGVyLmNzcyhhbmltYXRpb25TdHJpbmcsIGFuaW1hdGlvbkNzczNTdHIpO1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIga2V5ZnJhbWVDc3MgPSBrZXlmcmFtZVN0cmluZyArICcgeyAxMDAlICAnICsgX29ialRvU3RyaW5nKGFuaW1hdGlvbkNzcykgKyAnfScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgJHN0eWxlcyA9ICRtYXJxdWVlV3JhcHBlci5maW5kKCdzdHlsZScpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIE5vdyBhZGQgdGhlIGtleWZyYW1lIGFuaW1hdGlvbiB0byB0aGUgbWFycXVlZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIGlmICgkc3R5bGVzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVnIGZpeGVkIGZvciBqUXVlcnkgMS4zLnggLSBJbnN0ZWFkIG9mIHVzaW5nIC5sYXN0KCksIHVzZSBmb2xsb3dpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICRzdHlsZXMuZmlsdGVyKFwiOmxhc3RcIikuaHRtbChrZXlmcmFtZUNzcyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKCdoZWFkJykuYXBwZW5kKCc8c3R5bGU+JyArIGtleWZyYW1lQ3NzICsgJzwvc3R5bGU+Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBBbmltYXRpb24gaXRlcmF0aW9uIGV2ZW50XG4gICAgICAgICAgICAgICAgICAgIF9wcmVmaXhlZEV2ZW50KCRtYXJxdWVlV3JhcHBlclswXSwgXCJBbmltYXRpb25JdGVyYXRpb25cIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy50cmlnZ2VyKCdmaW5pc2hlZCcpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQW5pbWF0aW9uIHN0b3BwZWRcbiAgICAgICAgICAgICAgICAgICAgX3ByZWZpeGVkRXZlbnQoJG1hcnF1ZWVXcmFwcGVyWzBdLCBcIkFuaW1hdGlvbkVuZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLnRyaWdnZXIoJ2ZpbmlzaGVkJyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgYW5pbWF0aW5nXG4gICAgICAgICAgICAgICAgICAgICRtYXJxdWVlV3JhcHBlci5hbmltYXRlKGFuaW1hdGlvbkNzcywgby5kdXJhdGlvbiwgby5lYXNpbmcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlyZSBldmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMudHJpZ2dlcignZmluaXNoZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuaW1hdGUgYWdhaW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvLnBhdXNlT25DeWNsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zdGFydEFuaW1hdGlvbldpdGhEZWxheSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzYXZlIHRoZSBzdGF0dXNcbiAgICAgICAgICAgICAgICAkdGhpcy5kYXRhKCdydW5uaW5nU3RhdHVzJywgJ3Jlc3VtZWQnKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIGJpbmQgcGF1c2UgYW5kIHJlc3VtZSBldmVudHNcbiAgICAgICAgICAgICR0aGlzLmJpbmQoJ3BhdXNlJywgbWV0aG9kcy5wYXVzZSk7XG4gICAgICAgICAgICAkdGhpcy5iaW5kKCdyZXN1bWUnLCBtZXRob2RzLnJlc3VtZSk7XG5cbiAgICAgICAgICAgIGlmIChvLnBhdXNlT25Ib3Zlcikge1xuICAgICAgICAgICAgICAgICR0aGlzLmJpbmQoJ21vdXNlZW50ZXIgbW91c2VsZWF2ZScsIG1ldGhvZHMudG9nZ2xlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgY3NzMyBhbmltYXRpb24gaXMgc3VwcG9ydGVkIHRoYW4gY2FsbCBhbmltYXRlIG1ldGhvZCBhdCBvbmNlXG4gICAgICAgICAgICBpZiAoY3NzM0FuaW1hdGlvbklzU3VwcG9ydGVkICYmIG8uYWxsb3dDc3MzU3VwcG9ydCkge1xuICAgICAgICAgICAgICAgIGFuaW1hdGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gU3RhcnRzIHRoZSByZWN1cnNpdmUgbWV0aG9kXG4gICAgICAgICAgICAgICAgX3N0YXJ0QW5pbWF0aW9uV2l0aERlbGF5KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgfTsgLy8gRW5kIG9mIFBsdWdpblxuICAgIC8vIFB1YmxpYzogcGx1Z2luIGRlZmF1bHRzIG9wdGlvbnNcbiAgICAkLmZuLm1hcnF1ZWUuZGVmYXVsdHMgPSB7XG4gICAgICAgIC8vIElmIHlvdSB3aXNoIHRvIGFsd2F5cyBhbmltYXRlIHVzaW5nIGpRdWVyeVxuICAgICAgICBhbGxvd0NzczNTdXBwb3J0OiB0cnVlLFxuICAgICAgICAvLyB3b3JrcyB3aGVuIGFsbG93Q3NzM1N1cHBvcnQgaXMgc2V0IHRvIHRydWUgLSBmb3IgZnVsbCBsaXN0IHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELWNzczMtdHJhbnNpdGlvbnMtMjAxMzExMTkvI3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uXG4gICAgICAgIGNzczNlYXNpbmc6ICdsaW5lYXInLFxuICAgICAgICAvLyByZXF1aXJlcyBqUXVlcnkgZWFzaW5nIHBsdWdpbi4gRGVmYXVsdCBpcyAnbGluZWFyJ1xuICAgICAgICBlYXNpbmc6ICdsaW5lYXInLFxuICAgICAgICAvLyBwYXVzZSB0aW1lIGJlZm9yZSB0aGUgbmV4dCBhbmltYXRpb24gdHVybiBpbiBtaWxsaXNlY29uZHNcbiAgICAgICAgZGVsYXlCZWZvcmVTdGFydDogMTAwMCxcbiAgICAgICAgLy8gJ2xlZnQnLCAncmlnaHQnLCAndXAnIG9yICdkb3duJ1xuICAgICAgICBkaXJlY3Rpb246ICdsZWZ0JyxcbiAgICAgICAgLy8gdHJ1ZSBvciBmYWxzZSAtIHNob3VsZCB0aGUgbWFycXVlZSBiZSBkdXBsaWNhdGVkIHRvIHNob3cgYW4gZWZmZWN0IG9mIGNvbnRpbnVlcyBmbG93XG4gICAgICAgIGR1cGxpY2F0ZWQ6IGZhbHNlLFxuICAgICAgICAvLyBzcGVlZCBpbiBtaWxsaXNlY29uZHMgb2YgdGhlIG1hcnF1ZWUgaW4gbWlsbGlzZWNvbmRzXG4gICAgICAgIGR1cmF0aW9uOiA1MDAwLFxuICAgICAgICAvLyBnYXAgaW4gcGl4ZWxzIGJldHdlZW4gdGhlIHRpY2tlcnNcbiAgICAgICAgZ2FwOiAyMCxcbiAgICAgICAgLy8gb24gY3ljbGUgcGF1c2UgdGhlIG1hcnF1ZWVcbiAgICAgICAgcGF1c2VPbkN5Y2xlOiBmYWxzZSxcbiAgICAgICAgLy8gb24gaG92ZXIgcGF1c2UgdGhlIG1hcnF1ZWUgLSB1c2luZyBqUXVlcnkgcGx1Z2luIGh0dHBzOi8vZ2l0aHViLmNvbS90b2JpYS9QYXVzZVxuICAgICAgICBwYXVzZU9uSG92ZXI6IGZhbHNlLFxuICAgICAgICAvLyB0aGUgbWFycXVlZSBpcyB2aXNpYmxlIGluaXRpYWxseSBwb3NpdGlvbmVkIG5leHQgdG8gdGhlIGJvcmRlciB0b3dhcmRzIGl0IHdpbGwgYmUgbW92aW5nXG4gICAgICAgI
1HN0YXJ0VmlzaWJsZTogZmFsc2VcbiAgICB9O1xufSkoalF1ZXJ5KTtcbiJdLCJuYW1lcyI6WyIkIiwiZm4iLCJtYXJxdWVlIiwib3B0aW9ucyIsImVhY2giLCJvIiwiZXh0ZW5kIiwiZGVmYXVsdHMiLCIkdGhpcyIsIiRtYXJxdWVlV3JhcHBlciIsImNvbnRhaW5lcldpZHRoIiwiYW5pbWF0aW9uQ3NzIiwidmVydGljYWxEaXIiLCJlbFdpZHRoIiwibG9vcENvdW50IiwicGxheVN0YXRlIiwiY3NzM0FuaW1hdGlvbklzU3VwcG9ydGVkIiwiX3ByZWZpeGVkRXZlbnQiLCJlbGVtZW50IiwidHlwZSIsImNhbGxiYWNrIiwicGZ4IiwicCIsImxlbmd0aCIsInRvTG93ZXJDYXNlIiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9vYmpUb1N0cmluZyIsIm9iaiIsInRhYmpzb24iLCJoYXNPd25Qcm9wZXJ0eSIsInB1c2giLCJqb2luIiwiX3N0YXJ0QW5pbWF0aW9uV2l0aERlbGF5IiwidGltZXIiLCJzZXRUaW1lb3V0IiwiYW5pbWF0ZSIsImRlbGF5QmVmb3JlU3RhcnQiLCJtZXRob2RzIiwicGF1c2UiLCJhbGxvd0NzczNTdXBwb3J0IiwiY3NzIiwiZGF0YSIsInRyaWdnZXIiLCJyZXN1bWUiLCJ0b2dnbGUiLCJkZXN0cm95IiwiY2xlYXJUaW1lb3V0IiwiZmluZCIsImFkZEJhY2siLCJ1bmJpbmQiLCJodG1sIiwiaXNGdW5jdGlvbiIsImRhdGFBdHRyaWJ1dGVzIiwiYXR0ciIsImtleSIsInZhbHVlIiwiZHVyYXRpb24iLCJzcGVlZCIsImRpcmVjdGlvbiIsImdhcCIsImR1cGxpY2F0ZWQiLCJwYXJzZUludCIsIndyYXBJbm5lciIsIiRlbCIsImNsb25lIiwiYXBwZW5kVG8iLCJjb250YWluZXJIZWlnaHQiLCJoZWlnaHQiLCJyZW1vdmVBdHRyIiwiZWxIZWlnaHQiLCJzdGFydFZpc2libGUiLCJfY29tcGxldGVEdXJhdGlvbiIsIndpZHRoIiwiZWxtIiwiZG9jdW1lbnQiLCJib2R5IiwiY3JlYXRlRWxlbWVudCIsImFuaW1hdGlvbk5hbWUiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJkb21QcmVmaXhlcyIsInNwbGl0IiwiYW5pbWF0aW9uU3RyaW5nIiwiYW5pbWF0aW9uQ3NzM1N0ciIsImtleWZyYW1lU3RyaW5nIiwic3R5bGUiLCJhbmltYXRpb24iLCJpIiwidW5kZWZpbmVkIiwicHJlZml4IiwiY3NzM2Vhc2luZyIsIl9yZVBvc2l0aW9uVmVydGljYWxseSIsIl9yZVBvc2l0aW9uSG9yaXpvbnRhbGx5IiwiX29yaWdpbmFsRHVyYXRpb24iLCJ0cmltIiwia2V5ZnJhbWVDc3MiLCIkc3R5bGVzIiwiZmlsdGVyIiwiYXBwZW5kIiwiZWFzaW5nIiwicGF1c2VPbkN5Y2xlIiwiYmluZCIsInBhdXNlT25Ib3ZlciIsImpRdWVyeSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDO0FBQ0EsQ0FBQSxTQUFTQSxDQUFDO0lBQ1BBLEVBQUVDLEVBQUUsQ0FBQ0MsT0FBTyxHQUFHLFNBQVNDLE9BQU87UUFDM0IsT0FBTyxJQUFJLENBQUNDLElBQUksQ0FBQztZQUNiLHFDQUFxQztZQUNyQyxJQUFJQyxJQUFJTCxFQUFFTSxNQUFNLENBQUMsQ0FBQyxHQUFHTixFQUFFQyxFQUFFLENBQUNDLE9BQU8sQ0FBQ0ssUUFBUSxFQUFFSixVQUN4Q0ssUUFBUVIsRUFBRSxJQUFJLEdBQ2RTLGlCQUFpQkMsZ0JBQWdCQyxjQUFjQyxhQUFhQyxTQUM1REMsWUFBWSxHQUNaQyxZQUFZLHdCQUNaQywyQkFBMkIsT0FFM0Isa0JBQWtCO1lBQ2xCQyxpQkFBaUIsd0JBQVNDLE9BQU8sRUFBRUMsSUFBSSxFQUFFQyxRQUFRO2dCQUM3QyxJQUFJQyxNQUFNO29CQUFDO29CQUFVO29CQUFPO29CQUFNO29CQUFLO2lCQUFHO2dCQUMxQyxJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSUQsSUFBSUUsTUFBTSxFQUFFRCxJQUFLO29CQUNqQyxJQUFJLENBQUNELEdBQUcsQ0FBQ0MsRUFBRSxFQUFFSCxPQUFPQSxLQUFLSyxXQUFXO29CQUNwQ04sUUFBUU8sZ0JBQWdCLENBQUNKLEdBQUcsQ0FBQ0MsRUFBRSxHQU
1FHSCxNQUFNQyxVQUFVO2dCQUN0RDtZQUNKLEdBRUFNLGVBQWUsc0JBQVNDLEdBQUc7Z0JBQ3ZCLElBQUlDLFVBQVUsRUFBRTtnQkFDaEIsSUFBSyxJQUFJTixLQUFLSyxJQUFLO29CQUNmLElBQUlBLElBQUlFLGNBQWMsQ0FBQ1AsSUFBSTt3QkFDdkJNLFFBQVFFLElBQUksQ0FBQ1IsSUFBSSxNQUFNSyxHQUFHLENBQUNMLEVBQUU7b0JBQ2pDO2dCQUNKO2dCQUNBTSxRQUFRRSxJQUFJO2dCQUNaLE9BQU8sTUFBTUYsUUFBUUcsSUFBSSxDQUFDLE9BQU87WUFDckMsR0FFQUMsMkJBQTJCO2dCQUN2QnhCLE1BQU15QixLQUFLLEdBQUdDLFdBQVdDLFNBQVM5QixFQUFFK0IsZ0JBQWdCO1lBQ3hELEdBRUEsaUJBQWlCO1lBQ2pCQyxVQUFVO2dCQUNOQyxPQUFPLFNBQVBBO29CQUNJLElBQUl0Qiw0QkFBNEJYLEVBQUVrQyxnQkFBZ0IsRUFBRTt3QkFDaEQ5QixnQkFBZ0IrQixHQUFHLENBQUN6QixXQUFXO29CQUNuQyxPQUFPO3dCQUNILDJCQUEyQjt3QkFDM0IsSUFBSWYsRUFBRUMsRUFBRSxDQUFDcUMsS0FBSyxFQUFFOzRCQUNaN0IsZ0JBQWdCNkIsS0FBSzt3QkFDekI7b0JBQ0o7b0JBQ0Esa0JBQWtCO29CQUNsQjlCLE1BQU1pQyxJQUFJLENBQUMsaUJBQWlCO29CQUM1QixhQUFhO29CQUNiakMsTUFBTWtDLE9BQU8sQ0FBQztnQkFDbEI7Z0JBRUFDLFFBQVEsU0FBUkE7b0JBQ0ksb0JBQW9CO29CQUNwQixJQUFJM0IsNEJBQTRCWCxFQUFFa0MsZ0JBQWdCLEVBQUU7d0JBQ2hEOUIsZ0JBQWdCK0IsR0FBRyxDQUFDekIsV0FBVztvQkFDbkMsT0FBTzt3QkFDSCw0QkFBNEI7d0JBQzVCLElBQUlmLEVBQUVDLEVBQUUsQ0FBQzBDLE1BQU0sRUFBRTs0QkFDYmxDLGdCQUFnQmtDLE1BQU07d0JBQzFCO29CQUNKO29CQUNBLGtCQUFrQjtvQkFDbEJuQyxNQUFNaUMsSUFBSSxDQUFDLGlCQUFpQjtvQkFDNUIsYUFBYTtvQkFDYmpDLE1BQU1rQyxPQUFPLENBQUM7Z0JBQ2xCO2dCQUVBRSxRQUFRLFNBQVJBO29CQUNJUCxPQUFPLENBQUM3QixNQUFNaUMsSUFBSSxDQUFDLG9CQUFvQixZQUFZLFVBQVUsU0FBUztnQkFDMUU7Z0JBRUFJLFNBQVMsU0FBVEE7b0JBQ0ksY0FBYztvQkFDZEMsYUFBYXRDLE1BQU15QixLQUFLO29CQUN4QixvQkFBb0I7b0JBQ3BCekIsTUFBTXVDLElBQUksQ0FBQyxLQUFLQyxPQUFPLEdBQUdDLE1BQU07b0JBQ2hDLGlFQUFpRTtvQkFDakV6QyxNQUFNMEMsSUFBSSxDQUFDMUMsTUFBTXVDLElBQUksQ0FBQyxxQkFBcUJHLElBQUk7Z0JBQ25EO1lBQ0o7WUFFSixvQkFBb0I7WUFDcEIsSUFBSSxPQUFPL0MsWUFBWSxVQUFVO2dCQUM3QixJQUFJSCxFQUFFbUQsVUFBVSxDQUFDZCxPQUFPLENBQUNsQyxRQUFRLEdBQUc7b0JBQ2hDLHdEQUF3RDtvQkFDeEQsSUFBSSxDQUFDTSxpQkFBaUI7d0JBQ2xCQSxrQkFBa0JELE1BQU11QyxJQUFJLENBQUM7b0JBQ2pDO29CQUNBLElBQUl2QyxNQUFNaUMsSUFBSSxDQUFDLGdDQUFnQyxNQUFNO3dCQUNqRHpCLDJCQUEyQjtvQkFDL0I7b0JBQ0FxQixPQUFPLENBQUNsQyxRQUFRO2dCQUNwQjtnQkFDQTtZQUNKO1lBRUE7O3NGQUUwRSxHQUMxRSxJQUFJaUQsaUJBQWlCLENBQUMsR0FDdEJDO1lBQ0FyRCxFQUFFSSxJQUFJLENBQUNDLEdBQUcsU0FBU2lELEdBQUcsRUFBRUMsS0FBSztnQkFDekIsMkNBQTJDO2dCQUMzQ0YsT0FBTzdDLE1BQU02QyxJQUFJLENBQUMsVUFBVUM7Z0JBQzVCLElBQUksT0FBT0QsU0FBUyxhQUFhO29CQUM3Qix1Q0FBdUM7b0JBQ3ZDLE9BQVFBO3dCQUNKLEtBQUs7NEJBQ0RBLE9BQU87NEJBQ1A7d0JBQ0osS0FBSzs0QkFDREEsT0FBTzs0QkFDUDtvQkFDUjtvQkFDQWhELENBQUMsQ0FBQ2lELElBQUksR0FBR0Q7Z0JBQ2I7WUFDSjtZQUVBLGlHQUFpRztZQUNqR2hELEVBQUVtRCxRQUFRLEdBQUduRCxFQUFFb0QsS0FBSyxJQUFJcEQsRUFBRW1ELFFBQVE7WUFFbEMscURBQXFEO1lBQ3JENUMsY0FBY1AsRUFBRXFELFNBQVMsSUFBSSxRQUFRckQsRUFBRXFELFNBQVMsSUFBSTtZQUVwRCwyQkFBMkI7WUFDM0JyRCxFQUFFc0QsR0FBRyxHQUFHdEQsRUFBRXVELFVBQVUsR0FBR0MsU0FBU3hELEVBQUVzRCxHQUFHLElBQUk7WUFFekMsZ0NBQWdDO1lBQ2hDbkQsTUFBTXNELFNBQVMsQ0FBQztZQUVoQiwyQkFBMkI7WUFDM0IsSUFBSUMsTUFBTXZELE1BQU11QyxJQUFJLENBQUMsZUFBZVAsR0FBRyxDQUFDO2dCQUNwQyxnQkFBZ0JuQyxFQUFFc0QsR0FBRztnQkFDckIsU0FBUztZQUNiO1lBRUEsSUFBSXRELEVBQUV1RCxVQUFVLEVBQUU7Z0JBQ2RHLElBQUlDLEtBQUssQ0FBQyxNQUFNQyxRQUFRLENBQUN6RDtZQUM3QjtZQUVBLHdDQUF3QztZQUN4Q0EsTUFBTXNELFNBQVMsQ0FBQztZQUVoQixvQ0FBb0M7WUFDcENyRCxrQkFBa0JELE1BQU11QyxJQUFJLENBQUM7WUFFN0IsNkRBQTZEO1lBQzdELElBQUluQyxhQUFhO2dCQUNiLElBQUlzRCxrQkFBa0IxRCxNQUFNMkQsTUFBTTtnQkFDbEMxRCxnQkFBZ0IyRCxVQUFVLENBQUM7Z0JBQzNCNUQsTUFBTTJELE1BQU0sQ0FBQ0Q7Z0JBRWIsd0NBQXdDO2dCQUN4QzFELE1BQU11QyxJQUFJLENBQUMsZUFBZVAsR0FBRyxDQUFDO29CQUMxQixTQUFTO29CQUNULGlCQUFpQm5DLEVBQUVzRCxHQUFHO29CQUN0QixnQkFBZ0I7Z0JBQ3BCO2dCQUVBLHNEQUFzRDtnQkFDdEQsSUFBSXRELEVBQUV1RCxVQUFVLEVBQUVwRCxNQUFNdUMsSUFBSSxDQUFDLG9CQUFvQlAsR0FBRyxDQUFDO29CQUNqRCxpQkFBaUI7Z0JBQ3JCO2dCQUVBLElBQUk2QixXQUFXN0QsTUFBTXVDLElBQUksQ0FBQyxxQkFBcUJvQixNQUFNLEtBQUs5RCxFQUFFc0QsR0FBRztnQkFFL0QsMERBQTBEO2dCQUMxRCxJQUFJdEQsRUFBRWlFLFlBQVksSUFBSSxDQUFDakUsRUFBRXVELFVBQVUsRUFBRTtvQkFDakMsMEVBQTBFO29CQUMxRSxrSEFBa0g7b0JBQ2xIdkQsRUFBRWtFLGlCQUFpQixHQUFHLEFBQUVWLENBQUFBLFNBQVNRLFVBQVUsTUFBTVIsU0FBU0ssaUJBQWlCLEdBQUUsSUFBS0wsU0FBU0ssaUJBQWlCLE1BQU83RCxFQUFFbUQsUUFBUTtvQkFFN0gsa0ZBQWtGO29CQUNsRm5ELEVBQUVtRCxRQUFRLEdBQUcsQUFBQ0ssU0FBU1EsVUFBVSxNQUFNUixTQUFTSyxpQkFBaUIsTUFBTzdELEVBQUVtRCxRQUFRO2dCQUN0RixPQUFPO29CQUNILGtIQUFrSDtvQkFDbEhuRCxFQUFFbUQsUUFBUSxHQUFHLEFBQUVLLENBQUFBLFNBQVNRLFVBQVUsTUFBTVIsU0FBU0ssaUJBQWlCLEdBQUUsSUFBS0wsU0FBU0ssaUJBQWlCLE1BQU83RCxFQUFFbUQsUUFBUTtnQkFDeEg7WUFFSixPQUFPO2dCQUNILG1FQUFtRTtnQkFDbkUzQyxVQUFVTCxNQUFNdUMsSUFBSSxDQUFDLHFCQUFxQnlCLEtB
1QUssS0FBS25FLEVBQUVzRCxHQUFHO2dCQUV6RCxrQkFBa0I7Z0JBQ2xCakQsaUJBQWlCRixNQUFNZ0UsS0FBSztnQkFFNUIsMERBQTBEO2dCQUMxRCxJQUFJbkUsRUFBRWlFLFlBQVksSUFBSSxDQUFDakUsRUFBRXVELFVBQVUsRUFBRTtvQkFDakMsMEVBQTBFO29CQUMxRSwrR0FBK0c7b0JBQy9HdkQsRUFBRWtFLGlCQUFpQixHQUFHLEFBQUVWLENBQUFBLFNBQVNoRCxTQUFTLE1BQU1nRCxTQUFTbkQsZ0JBQWdCLEdBQUUsSUFBS21ELFNBQVNuRCxnQkFBZ0IsTUFBT0wsRUFBRW1ELFFBQVE7b0JBRTFILGlFQUFpRTtvQkFDakVuRCxFQUFFbUQsUUFBUSxHQUFHLEFBQUNLLFNBQVNoRCxTQUFTLE1BQU1nRCxTQUFTbkQsZ0JBQWdCLE1BQU9MLEVBQUVtRCxRQUFRO2dCQUNwRixPQUFPO29CQUNILCtHQUErRztvQkFDL0duRCxFQUFFbUQsUUFBUSxHQUFHLEFBQUVLLENBQUFBLFNBQVNoRCxTQUFTLE1BQU1nRCxTQUFTbkQsZ0JBQWdCLEdBQUUsSUFBS21ELFNBQVNuRCxnQkFBZ0IsTUFBT0wsRUFBRW1ELFFBQVE7Z0JBQ3JIO1lBQ0o7WUFFQSxzQ0FBc0M7WUFDdEMsSUFBSW5ELEVBQUV1RCxVQUFVLEVBQUU7Z0JBQ2R2RCxFQUFFbUQsUUFBUSxHQUFHbkQsRUFBRW1ELFFBQVEsR0FBRztZQUM5QjtZQUVBLElBQUluRCxFQUFFa0MsZ0JBQWdCLEVBQUU7Z0JBQ3BCLElBQ0FrQyxNQUFNQyxTQUFTQyxJQUFJLElBQUlELFNBQVNFLGFBQWEsQ0FBQyxRQUMxQ0MsZ0JBQWdCLHNCQUFzQkMsS0FBS0MsS0FBSyxDQUFDRCxLQUFLRSxNQUFNLEtBQUssV0FDakVDLGNBQWMsd0JBQXdCQyxLQUFLLENBQUMsTUFDNUNDLGtCQUFrQixhQUNsQkMsbUJBQW1CLElBQ25CQyxpQkFBaUI7Z0JBRXJCLHFCQUFxQjtnQkFDckIsSUFBSVosSUFBSWEsS0FBSyxDQUFDQyxTQUFTLEVBQUU7b0JBQ3JCRixpQkFBaUIsZ0JBQWdCUixnQkFBZ0I7b0JBQ2pEN0QsMkJBQTJCO2dCQUMvQjtnQkFFQSxJQUFJQSw2QkFBNkIsT0FBTztvQkFDcEMsSUFBSyxJQUFJd0UsSUFBSSxHQUFHQSxJQUFJUCxZQUFZMUQsTUFBTSxFQUFFaUUsSUFBSzt3QkFDekMsSUFBSWYsSUFBSWEsS0FBSyxDQUFDTCxXQUFXLENBQUNPLEVBQUUsR0FBRyxnQkFBZ0IsS0FBS0MsV0FBVzs0QkFDM0QsSUFBSUMsU0FBUyxNQUFNVCxXQUFXLENBQUNPLEVBQUUsQ0FBQ2hFLFdBQVcsS0FBSzs0QkFDbEQyRCxrQkFBa0JPLFNBQVNQOzRCQUMzQnBFLFlBQVkyRSxTQUFTM0U7NEJBQ3JCc0UsaUJBQWlCLE1BQU1LLFNBQVMsZUFBZWIsZ0JBQWdCOzRCQUMvRDdELDJCQUEyQjs0QkFDM0I7d0JBQ0o7b0JBQ0o7Z0JBQ0o7Z0JBRUEsSUFBSUEsMEJBQTBCO29CQUMxQm9FLG1CQUFtQlAsZ0JBQWdCLE1BQU14RSxFQUFFbUQsUUFBUSxHQUFHLE9BQU8sT0FBT25ELEVBQUUrQixnQkFBZ0IsR0FBRyxPQUFPLGdCQUFnQi9CLEVBQUVzRixVQUFVO29CQUM1SG5GLE1BQU1pQyxJQUFJLENBQUMsNEJBQTRCO2dCQUMzQztZQUNKO1lBRUEsSUFBSW1ELHdCQUF3QjtnQkFDeEJuRixnQkFBZ0IrQixHQUFHLENBQUMsY0FBY25DLEVBQUVxRCxTQUFTLElBQUksT0FBT1Esa0JBQWtCLE9BQU8sTUFBTUcsV0FBVztZQUN0RyxHQUNBd0IsMEJBQTBCO2dCQUN0QnBGLGdCQUFnQitCLEdBQUcsQ0FBQyxlQUFlbkMsRUFBRXFELFNBQVMsSUFBSSxTQUFTaEQsaUJBQWlCLE9BQU8sTUFBTUcsVUFBVTtZQUN2RztZQUVBLGdFQUFnRTtZQUNoRSxJQUFJUixFQUFFdUQsVUFBVSxFQUFFO2dCQUNkLElBQUloRCxhQUFhO29CQUNiLElBQUlQLEVBQUVpRSxZQUFZLEVBQUU7d0JBQ2hCN0QsZ0JBQWdCK0IsR0FBRyxDQUFDLGNBQWM7b0JBQ3RDLE9BQU87d0JBQ0gvQixnQkFBZ0IrQixHQUFHLENBQUMsY0FBY25DLEVBQUVxRCxTQUFTLElBQUksT0FBT1Esa0JBQWtCLE9BQU8sTUFBTyxDQUFBLEFBQUNHLFdBQVcsSUFBS2hFLEVBQUVzRCxHQUFHLEFBQUQsSUFBSztvQkFDdEg7Z0JBQ0osT0FBTztvQkFDSCxJQUFJdEQsRUFBRWlFLFlBQVksRUFBRTt3QkFDaEI3RCxnQkFBZ0IrQixHQUFHLENBQUMsZUFBZTtvQkFDdkMsT0FBTzt3QkFDSC9CLGdCQUFnQitCLEdBQUcsQ0FBQyxlQUFlbkMsRUFBRXFELFNBQVMsSUFBSSxTQUFTaEQsaUJBQWlCLE9BQU8sTUFBTyxDQUFBLEFBQUNHLFVBQVUsSUFBS1IsRUFBRXNELEdBQUcsQUFBRCxJQUFLO29CQUN2SDtnQkFDSjtnQkFFQSxtRUFBbUU7Z0JBQ25FLElBQUksQ0FBQ3RELEVBQUVpRSxZQUFZLEVBQUU7b0JBQ25CeEQsWUFBWTtnQkFDZDtZQUNKLE9BQU8sSUFBSVQsRUFBRWlFLFlBQVksRUFBRTtnQkFDdkIsZ0ZBQWdGO2dCQUNoRnhELFlBQVk7WUFDaEIsT0FBTztnQkFDSCxJQUFJRixhQUFhO29CQUNiZ0Y7Z0JBQ0osT0FBTztvQkFDSEM7Z0JBQ0o7WUFDSjtZQUVBLDJCQUEyQjtZQUMzQixJQUFJMUQsVUFBVTtnQkFDVixJQUFJOUIsRUFBRXVELFVBQVUsRUFBRTtvQkFDZCwrRUFBK0U7b0JBQy9FLElBQUk5QyxjQUFjLEdBQUc7d0JBQ2pCVCxFQUFFeUYsaUJBQWlCLEdBQUd6RixFQUFFbUQsUUFBUTt3QkFDaEMsSUFBSTVDLGFBQWE7NEJBQ2JQLEVBQUVtRCxRQUFRLEdBQUduRCxFQUFFcUQsU0FBUyxJQUFJLE9BQU9yRCxFQUFFbUQsUUFBUSxHQUFJVSxrQkFBbUIsQ0FBQSxBQUFDRyxXQUFZaEUsRUFBRW1ELFFBQVEsQUFBRCxJQUFNbkQsRUFBRW1ELFFBQVEsR0FBRzt3QkFDakgsT0FBTzs0QkFDSG5ELEVBQUVtRCxRQUFRLEdBQUduRCxFQUFFcUQsU0FBUyxJQUFJLFNBQVNyRCxFQUFFbUQsUUFBUSxHQUFJOUMsaUJBQWtCLENBQUEsQUFBQ0csVUFBV1IsRUFBRW1ELFFBQVEsQUFBRCxJQUFNbkQsRUFBRW1ELFFBQVEsR0FBRzt3QkFDakg7d0JBQ0Esb0NBQW9DO3dCQUNwQyxJQUFJNEIsa0JBQWtCOzRCQUNsQkEsbUJBQW1CUCxnQkFBZ0IsTUFBTXhFLEVBQUVtRCxRQUFRLEdBQUcsT0FBTyxPQUFPbkQsRUFBRStCLGdCQUFnQixHQUFHLE9BQU8sT0FBTy9CLEVBQUVzRixVQUFVO3dCQUN2SDt3QkFDQTdFO29CQUNKLE9BRUssSUFBSUEsY0FBYyxHQUFHO3dCQUN0QlQsRUFBRW1ELFFBQVEsR0FBR25ELEVBQUV5RixpQkFBaUI7d0JBQ2hDLG9DQUFvQzt3QkFDcEMsSUFBSVYsa0JBQWtCOzRCQUNsQlAsZ0JBQWdCQSxnQkFBZ0I7NEJBQ2hDUSxpQkFBaUJyRixFQUFFK0YsSUFBSSxDQUFDVixrQkFBa0I7NEJBQzFDRCxtQkFBbUJQLGdCQUFnQixNQUFNeEUsRUFBRW1ELFFBQVEsR0FBRyxPQUFPLG1CQUFtQm5ELEVBQUVzRixVQUFVO3dCQUNoRzt3QkFDQTdFO29CQUNKO2dCQUNKO2dCQUVBLElBQUlGLGFBQWE7b0JBQ2IsSUFBSVAsRUFBRXVELFVBQVUsRUFBRTt3QkFFZCx3RUFBd0U7d0JBQ3hFLElBQUk5QyxZQUFZLEd
1BQUc7NEJBQ2ZMLGdCQUFnQitCLEdBQUcsQ0FBQyxjQUFjbkMsRUFBRXFELFNBQVMsSUFBSSxPQUFPLElBQUksTUFBTVcsV0FBVzt3QkFDakY7d0JBRUExRCxlQUFlOzRCQUNYLGNBQWNOLEVBQUVxRCxTQUFTLElBQUksT0FBTyxNQUFNVyxXQUFXLE9BQU87d0JBQ2hFO29CQUNKLE9BQU8sSUFBSWhFLEVBQUVpRSxZQUFZLEVBQUU7d0JBQ3ZCLG1EQUFtRDt3QkFDbkQsSUFBSXhELGNBQWMsR0FBRzs0QkFDakIsb0NBQW9DOzRCQUNwQyxJQUFJc0Usa0JBQWtCO2dDQUNsQkEsbUJBQW1CUCxnQkFBZ0IsTUFBTXhFLEVBQUVtRCxRQUFRLEdBQUcsT0FBTyxPQUFPbkQsRUFBRStCLGdCQUFnQixHQUFHLE9BQU8sT0FBTy9CLEVBQUVzRixVQUFVOzRCQUN2SDs0QkFDQWhGLGVBQWU7Z0NBQ1gsY0FBY04sRUFBRXFELFNBQVMsSUFBSSxPQUFPLE1BQU1XLFdBQVcsT0FBT0gsa0JBQWtCOzRCQUNsRjs0QkFDQXBEO3dCQUNKLE9BQU8sSUFBSUEsY0FBYyxHQUFHOzRCQUN4QiwyREFBMkQ7NEJBQzNEVCxFQUFFbUQsUUFBUSxHQUFHbkQsRUFBRWtFLGlCQUFpQjs0QkFDaEMsb0NBQW9DOzRCQUNwQyxJQUFJYSxrQkFBa0I7Z0NBQ2RQLGdCQUFnQkEsZ0JBQWdCO2dDQUNoQ1EsaUJBQWlCckYsRUFBRStGLElBQUksQ0FBQ1Ysa0JBQWtCO2dDQUMxQ0QsbUJBQW1CUCxnQkFBZ0IsTUFBTXhFLEVBQUVtRCxRQUFRLEdBQUcsT0FBTyxtQkFBbUJuRCxFQUFFc0YsVUFBVTs0QkFDcEc7NEJBQ0FDO3dCQUNKO29CQUNKLE9BQU87d0JBQ0hBO3dCQUNBakYsZUFBZTs0QkFDWCxjQUFjTixFQUFFcUQsU0FBUyxJQUFJLE9BQU8sTUFBT2pELGdCQUFnQjBELE1BQU0sS0FBTSxPQUFPRCxrQkFBa0I7d0JBQ3BHO29CQUNKO2dCQUNKLE9BQU87b0JBQ0gsSUFBSTdELEVBQUV1RCxVQUFVLEVBQUU7d0JBRWQsd0VBQXdFO3dCQUN4RSxJQUFJOUMsWUFBWSxHQUFHOzRCQUNmTCxnQkFBZ0IrQixHQUFHLENBQUMsZUFBZW5DLEVBQUVxRCxTQUFTLElBQUksU0FBUyxJQUFJLE1BQU03QyxVQUFVO3dCQUNuRjt3QkFFQUYsZUFBZTs0QkFDWCxlQUFlTixFQUFFcUQsU0FBUyxJQUFJLFNBQVMsTUFBTTdDLFVBQVUsT0FBTzt3QkFDbEU7b0JBRUosT0FBTyxJQUFJUixFQUFFaUUsWUFBWSxFQUFFO3dCQUN2QixtREFBbUQ7d0JBQ25ELElBQUl4RCxjQUFjLEdBQUc7NEJBQ2pCLG9DQUFvQzs0QkFDcEMsSUFBSXNFLGtCQUFrQjtnQ0FDbEJBLG1CQUFtQlAsZ0JBQWdCLE1BQU14RSxFQUFFbUQsUUFBUSxHQUFHLE9BQU8sT0FBT25ELEVBQUUrQixnQkFBZ0IsR0FBRyxPQUFPLE9BQU8vQixFQUFFc0YsVUFBVTs0QkFDdkg7NEJBQ0FoRixlQUFlO2dDQUNYLGVBQWVOLEVBQUVxRCxTQUFTLElBQUksU0FBUyxNQUFNN0MsVUFBVSxPQUFPSCxpQkFBaUI7NEJBQ25GOzRCQUNBSTt3QkFDSixPQUFPLElBQUlBLGNBQWMsR0FBRzs0QkFDeEIsMkRBQTJEOzRCQUMzRFQsRUFBRW1ELFFBQVEsR0FBR25ELEVBQUVrRSxpQkFBaUI7NEJBQ2hDLG9DQUFvQzs0QkFDcEMsSUFBSWEsa0JBQWtCO2dDQUNsQlAsZ0JBQWdCQSxnQkFBZ0I7Z0NBQ2hDUSxpQkFBaUJyRixFQUFFK0YsSUFBSSxDQUFDVixrQkFBa0I7Z0NBQzFDRCxtQkFBbUJQLGdCQUFnQixNQUFNeEUsRUFBRW1ELFFBQVEsR0FBRyxPQUFPLG1CQUFtQm5ELEVBQUVzRixVQUFVOzRCQUNoRzs0QkFDQUU7d0JBQ0o7b0JBQ0osT0FBTzt3QkFDSEE7d0JBQ0FsRixlQUFlOzRCQUNYLGVBQWVOLEVBQUVxRCxTQUFTLElBQUksU0FBUyxNQUFNN0MsVUFBVSxPQUFPSCxpQkFBaUI7d0JBQ25GO29CQUNKO2dCQUNKO2dCQUVBLGFBQWE7Z0JBQ2JGLE1BQU1rQyxPQUFPLENBQUM7Z0JBRWQsc0ZBQXNGO2dCQUN0RixJQUFJMUIsMEJBQTBCO29CQUMxQixvQ0FBb0M7b0JBQ3BDUCxnQkFBZ0IrQixHQUFHLENBQUMyQyxpQkFBaUJDO29CQUNyQyxJQUFJWSxjQUFjWCxpQkFBaUIsY0FBYzNELGFBQWFmLGdCQUFnQixLQUN6RXNGLFVBQVV4RixnQkFBZ0JzQyxJQUFJLENBQUM7b0JBRXBDLHdEQUF3RDtvQkFDeEQsSUFBSWtELFFBQVExRSxNQUFNLEtBQUssR0FBRzt3QkFDdEIsdUVBQXVFO3dCQUN2RTBFLFFBQVFDLE1BQU0sQ0FBQyxTQUFTaEQsSUFBSSxDQUFDOEM7b0JBQ2pDLE9BQU87d0JBQ0hoRyxFQUFFLFFBQVFtRyxNQUFNLENBQUMsWUFBWUgsY0FBYztvQkFDL0M7b0JBRUEsNEJBQTRCO29CQUM1Qi9FLGVBQWVSLGVBQWUsQ0FBQyxFQUFFLEVBQUUsc0JBQXNCO3dCQUNyREQsTUFBTWtDLE9BQU8sQ0FBQztvQkFDbEI7b0JBQ0Esb0JBQW9CO29CQUNwQnpCLGVBQWVSLGVBQWUsQ0FBQyxFQUFFLEVBQUUsZ0JBQWdCO3dCQUMvQzBCO3dCQUNBM0IsTUFBTWtDLE9BQU8sQ0FBQztvQkFDbEI7Z0JBRUosT0FBTztvQkFDSCxrQkFBa0I7b0JBQ2xCakMsZ0JBQWdCMEIsT0FBTyxDQUFDeEIsY0FBY04sRUFBRW1ELFFBQVEsRUFBRW5ELEVBQUUrRixNQUFNLEVBQUU7d0JBQ3hELGFBQWE7d0JBQ2I1RixNQUFNa0MsT0FBTyxDQUFDO3dCQUNkLGdCQUFnQjt3QkFDaEIsSUFBSXJDLEVBQUVnRyxZQUFZLEVBQUU7NEJBQ2hCckU7d0JBQ0osT0FBTzs0QkFDSEc7d0JBQ0o7b0JBQ0o7Z0JBQ0o7Z0JBQ0Esa0JBQWtCO2dCQUNsQjNCLE1BQU1pQyxJQUFJLENBQUMsaUJBQWlCO1lBQ2hDO1lBRUEsK0JBQStCO1lBQy9CakMsTUFBTThGLElBQUksQ0FBQyxTQUFTakUsUUFBUUMsS0FBSztZQUNqQzlCLE1BQU04RixJQUFJLENBQUMsVUFBVWpFLFFBQVFNLE1BQU07WUFFbkMsSUFBSXRDLEVBQUVrRyxZQUFZLEVBQUU7Z0JBQ2hCL0YsTUFBTThGLElBQUksQ0FBQyx5QkFBeUJqRSxRQUFRTyxNQUFNO1lBQ3REO1lBRUEsa0VBQWtFO1lBQ2xFLElBQUk1Qiw0QkFBNEJYLEVBQUVrQyxnQkFBZ0IsRUFBRTtnQkFDaERKO1lBQ0osT0FBTztnQkFDSCw4QkFBOEI7Z0JBQzlCSDtZQUNKO1FBRUo7SUFDSixHQUFHLGdCQUFnQjtJQUNuQixrQ0FBa0M7SUFDbENoQyxFQUFFQyxFQUFFLENBQUNDLE9BQU8sQ0FBQ0ssUUFBUSxHQUFHO1FBQ3BCLDZDQUE2QztRQUM3Q2dDLGtCQUFrQjtRQUNsQixvSkFBb0o7UUFDcEpvRCxZQUFZO1FBQ1oscURBQXFEO1FBQ3JEUyxRQUFRO1FBQ1IsNERBQTREO1FBQzVEaEUsa0JBQWtCO1FBQ2xCLGtDQUFrQztRQUNsQ3NCLFdBQVc7UUFDWCx1RkFBdUY7UUFDdkZFLFlBQVk7UUFDWix1REFBdUQ7UUFDdkRKLFVBQVU7UUFDVixvQ0FBb0M7UUFDcENHLEtBQUs7UUFDTCw2QkFBNkI7UUFDN0IwQyxjQUFjO1FBQ2Qsa0ZBQWtGO1FBQ2xGRSxjQUFjO1FBQ2QsMkZBQTJGO1FBQzNGakMsY0FBYztJQUNsQjtBQUNKLENBQUEsRUFBR2tDIiwic291cmNlUm9vdCI6IiIsImZpbGUiOiI4OC5qcyJ9\n//# sourceURL=webpack-internal:///88\n\n}")}},__webpack_exports__={};__webpack_modules__[88]()})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.