/**
 * This page and wiki was built with the help of igem-wikibrick, a tool created by Virginia iGEM 2018
 * @version v0.8.0
 * @version v0.8.0
 * @link https://github.com/Virginia-iGEM/igem-wikibrick
 * @license MIT
 */
var radius = 18;
var circumference = 2 * radius * Math.PI;
console.log(circumference);
function getOffsetTop(element) {
    var distfromtop = 0;
    while(element) {
        distfromtop += (element.offsetTop - element.scrollTop + element.clientTop);
        element = element.offsetParent;
    }

    return distfromtop;
}
function setProgressUnderstanding(percent) {
    if(percent>99.8) {
        percent = 100;
        $(".understanding-link").css({
            "font-family": "Arial Rounded MT Bold",
            "float": "left",
            "color": "white",
            "padding-top": "20px",
            "padding-bottom": "20px",
            "padding-right": "85px",
            "text-decoration": "none",
            "display": "block",
            "text-align": "left"
        })
    }
    else if(percent<-0.5) {
        $(".understanding-link").css({
            "font-family": "Arial Rounded MT Bold",
            "float": "left",
            "color": "white",
            "padding-top": "20px",
            "padding-bottom": "20px",
            "padding-right": "85px",
            "text-decoration": "none",
            "display": "block",
            "text-align": "left"
        })
        percent = 0;
    }
    else {

        $(".understanding-link").css({
            "font-family": "Arial Rounded MT Bold",
            "float": "left",
            "color": "#484EFF",
            "padding-top": "20px",
            "padding-bottom": "20px",
            "padding-right": "85px",
            "text-decoration": "none",
            "display": "block",
            "text-align": "left"
        }) 
    }
    var offset = circumference - percent / 100 * circumference;
    //console.log(offset);
    $(".progress-ring__circle-understanding").css({
        "transition": "0s stroke-dashoffset",
        // axis compensation
        "transform": "rotate(-90deg)",
        "transform-origin": "50% 50%",
        "stroke-dasharray": `${circumference} ${circumference}`,
        "stroke-dashoffset": `${offset}`
    });

}
function setProgressDesign(percent) {
    if(percent>99.8) {
        percent = 100;
        $(".design-link").css({
            "font-family": "Arial Rounded MT Bold",
            "float": "left",
            "color": "white",
            "padding-top": "20px",
            "padding-bottom": "20px",
            "padding-right": "68px",
            "text-decoration": "none",
            "display": "block",
            "text-align": "left"
        })
    }
    else if(percent<-0.5) {
        $(".design-link").css({
            "font-family": "Arial Rounded MT Bold",
            "float": "left",
            "color": "white",
            "padding-top": "20px",
            "padding-bottom": "20px",
            "padding-right": "68px",
            "text-decoration": "none",
            "display": "block",
            "text-align": "left"
        })
        percent = 0;
    }
    else {

        $(".design-link").css({
            "font-family": "Arial Rounded MT Bold",
            "float": "left",
            "color": "#484EFF",
            "padding-top": "20px",
            "padding-bottom": "20px",
            "padding-right": "68px",
            "text-decoration": "none",
            "display": "block",
            "text-align": "left"
        }) 
    }
    var offset = circumference - percent / 100 * circumference;
    //console.log(offset);
    $(".progress-ring__circle-design").css({
        "transition": "0s stroke-dashoffset",
        // axis compensation
        "transform": "rotate(-90deg)",
        "transform-origin": "50% 50%",
        "stroke-dasharray": `${circumference} ${circumference}`,
        "stroke-dashoffset": `${offset}`
    });

}
function setProgressImpact(percent) {
    if(percent>99.8) {
        percent = 100;
        $(".impact-link").css({
            "font-family": "Arial Rounded MT Bold",
            "float": "left",
            "color": "white",
            "padding-top": "20px",
            "padding-bottom": "20px",
            "padding-right": "70px",
            "text-decoration": "none",
            "display": "block",
            "text-align": "left"
        })
    }
    else if(percent<-0.5) {
        $(".impact-link").css({
            "font-family": "Arial Rounded MT Bold",
            "float": "left",
            "color": "white",
            "padding-top": "20px",
            "padding-bottom": "20px",
            "padding-right": "70px",
            "text-decoration": "none",
            "display": "block",
            "text-align": "left"
        })
        percent = 0;
    }
    else {

        $(".impact-link").css({
            "font-family": "Arial Rounded MT Bold",
            "float": "left",
            "color": "#484EFF",
            "padding-top": "20px",
            "padding-bottom": "20px",
            "padding-right": "70px",
            "text-decoration": "none",
            "display": "block",
            "text-align": "left"
        }) 
    }
    var offset = circumference - percent / 100 * circumference;
    //console.log(offset);
    $(".progress-ring__circle-impact").css({
        "transition": "0s stroke-dashoffset",
        // axis compensation
        "transform": "rotate(-90deg)",
        "transform-origin": "50% 50%",
        "stroke-dasharray": `${circumference} ${circumference}`,
        "stroke-dashoffset": `${offset}`
    });

}
var getMax = function(){
        return $(document).height() - $(window).height();
}
$(document).ready(function(){
    
    
    //console.log(getMax);
    var getValue = function(){
        return $(window).scrollTop();
    }
    
    if('max' in document.createElement('progress')){
        // Browser supports progress element
        var progressBar = $('progress');
        
        // Set the Max attr for the first time
        progressBar.attr({ max: getMax() });

        $(document).on('scroll', function(){
            // On scroll only Value attr needs to be calculated
            progressBar.attr({ value: getValue() });
        });
      
        $(window).resize(function(){
            // On resize, both Max/Value attr needs to be calculated
            progressBar.attr({ max: getMax(), value: getValue() });
        });   
    }
    else {
        var progressBar = $('.progress-bar'), 
            max = getMax(), 
            value, width;
        
        var getWidth = function(){
            // Calculate width in percentage
            value = getValue();            
            width = (value/max) * 100;
            width = width + '%';
            return width;
        }
        
        var setWidth = function(){
            progressBar.css({ width: getWidth() });
        }
        
        $(document).on('scroll', setWidth);
        $(window).on('resize', function(){
            // Need to reset the Max attr
            max = getMax();
            setWidth();
        });
    }
    $('a[href^="#"]').on('click',function (e) {
        e.preventDefault();
        var target = this.hash,
        $target = $(target);
        $('html, body').stop().animate({
            'scrollTop': $target.offset().top-90
        }, 1200)
    });
    $(".progress-ring__circle").css({
        "transition": "0.35s stroke-dashoffset",
        // axis compensation
        "transform": "rotate(-90deg)",
        "transform-origin": "50% 50%",
        "stroke-dasharray": `${circumference} ${circumference}`,
        "stroke-dashoffset": `${circumference}`
    });
    //console.log(document.getElementById("outreach-team").offsetTop); //this needs to be from TOP of page, but not working
});
//CIRCLE STUFF BELOW
$(document).scroll(function() {

    var understandingelement = document.querySelector('#understanding');

    var designelement = document.querySelector('#design');

    var impactelement = document.querySelector('#impact');

    var outerelement = document.querySelector('#outer');
    //detect when user scroll to top and set position to absolute else sets position to fixed
    $(".fixed-index").css({
        "top": $(this).scrollTop() > 700 ? $(this).scrollTop() > getOffsetTop(outerelement)-650 ? getOffsetTop(outerelement)-450 : "210px" : "900px", //THESE MUST BE 600px APART
        "left": "0",
        "position": $(this).scrollTop() > 700 ? $(this).scrollTop() > getOffsetTop(outerelement)-650 ? "absolute" : "fixed" : "absolute"
    });
    //console.log($(this).scrollTop()-getOffsetTop(element));
    //console.log(100*($(this).scrollTop()-getOffsetTop(understandingelement)+90)/(getOffsetTop(designelement)-getOffsetTop(understandingelement)));
    //console.log($(this).scrollTop()); 
    //console.log(getOffsetTop(referenceselement));
    //console.log("next is this top");
    //console.log($(this).scrollTop());
    setProgressUnderstanding(100*($(this).scrollTop()-getOffsetTop(understandingelement)+90)/(getOffsetTop(designelement)-getOffsetTop(understandingelement)));

    setProgressDesign(100*($(this).scrollTop()-getOffsetTop(designelement)+90)/(getOffsetTop(impactelement)-getOffsetTop(designelement)));

    setProgressImpact(100*($(this).scrollTop()-getOffsetTop(impactelement)+90)/(getOffsetTop(outerelement)-getOffsetTop(impactelement)));

    //setProgress(100*getOffsetTop($(this))/getMax()); //this doesn;t wrok
    //console.log("hi");
    //circle
    
});
$(window).on('resize', function(){
    var understandingelement = document.querySelector('#understanding');

    var designelement = document.querySelector('#design');

    var impactelement = document.querySelector('#impact');

    var outerelement = document.querySelector('#outer');
    var wind = $(this)
    if(wind.width()<=1000) {
        $(".fixed-index").css({
            "display": "none"
        });
        $("#content").css({
            "padding-left": "0px"
        });
    }
    else {
        $(".fixed-index").css({
            "display": "block",
            "top": $(this).scrollTop() > 700 ? $(this).scrollTop() > getOffsetTop(outerelement)-650 ? "2533px" : "300px" : "900px", //THESE MUST BE 600px APART
            "left": "0",
            "position": $(this).scrollTop() > 700 ? $(this).scrollTop() > getOffsetTop(outerelement)-650 ? "absolute" : "fixed" : "absolute",

            "padding-left": "7%"
        });
        $("#content").css({
            "padding-left": "30%"
        });
    }
});

/*var circle = document.querySelector('cicle');
var radius = circle.r.baseVal.value;
var circumference = radius * 2 * Math.PI;*/
/*$(".progress-ring__circle").css({
    "transition": "0.35s stroke-dashoffset",
    // axis compensation
    "transform": "rotate(-90deg)",
    "transform-origin": "50% 50%",
    "stroke-dasharray": "${circumference} ${circumference}",
    "stroke-dashoffset": "${circumference}"
});*/


/*position:fixed;
  left:0;
  top: 500px;*/
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJpbnRlZ3JhdGVkLWhwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByYWRpdXMgPSAxODtcbnZhciBjaXJjdW1mZXJlbmNlID0gMiAqIHJhZGl1cyAqIE1hdGguUEk7XG5jb25zb2xlLmxvZyhjaXJjdW1mZXJlbmNlKTtcbmZ1bmN0aW9uIGdldE9mZnNldFRvcChlbGVtZW50KSB7XG4gICAgdmFyIGRpc3Rmcm9tdG9wID0gMDtcbiAgICB3aGlsZShlbGVtZW50KSB7XG4gICAgICAgIGRpc3Rmcm9tdG9wICs9IChlbGVtZW50Lm9mZnNldFRvcCAtIGVsZW1lbnQuc2Nyb2xsVG9wICsgZWxlbWVudC5jbGllbnRUb3ApO1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3Rmcm9tdG9wO1xufVxuZnVuY3Rpb24gc2V0UHJvZ3Jlc3NVbmRlcnN0YW5kaW5nKHBlcmNlbnQpIHtcbiAgICBpZihwZXJjZW50Pjk5LjgpIHtcbiAgICAgICAgcGVyY2VudCA9IDEwMDtcbiAgICAgICAgJChcIi51bmRlcnN0YW5kaW5nLWxpbmtcIikuY3NzKHtcbiAgICAgICAgICAgIFwiZm9udC1mYW1pbHlcIjogXCJBcmlhbCBSb3VuZGVkIE1UIEJvbGRcIixcbiAgICAgICAgICAgIFwiZmxvYXRcIjogXCJsZWZ0XCIsXG4gICAgICAgICAgICBcImNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgICAgICAgIFwicGFkZGluZy10b3BcIjogXCIyMHB4XCIsXG4gICAgICAgICAgICBcInBhZGRpbmctYm90dG9tXCI6IFwiMjBweFwiLFxuICAgICAgICAgICAgXCJwYWRkaW5nLXJpZ2h0XCI6IFwiODVweFwiLFxuICAgICAgICAgICAgXCJ0ZXh0LWRlY29yYXRpb25cIjogXCJub25lXCIsXG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJibG9ja1wiLFxuICAgICAgICAgICAgXCJ0ZXh0LWFsaWduXCI6IFwibGVmdFwiXG4gICAgICAgIH0pXG4gICAgfVxuICAgIGVsc2UgaWYocGVyY2VudDwtMC41KSB7XG4gICAgICAgICQoXCIudW5kZXJzdGFuZGluZy1saW5rXCIpLmNzcyh7XG4gICAgICAgICAgICBcImZvbnQtZmFtaWx5XCI6IFwiQXJpYWwgUm91bmRlZCBNVCBCb2xkXCIsXG4gICAgICAgICAgICBcImZsb2F0XCI6IFwibGVmdFwiLFxuICAgICAgICAgICAgXCJjb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICAgICAgICBcInBhZGRpbmctdG9wXCI6IFwiMjBweFwiLFxuICAgICAgICAgICAgXCJwYWRkaW5nLWJvdHRvbVwiOiBcIjIwcHhcIixcbiAgICAgICAgICAgIFwicGFkZGluZy1yaWdodFwiOiBcIjg1cHhcIixcbiAgICAgICAgICAgIFwidGV4dC1kZWNvcmF0aW9uXCI6IFwibm9uZVwiLFxuICAgICAgICAgICAgXCJkaXNwbGF5XCI6IFwiYmxvY2tcIixcbiAgICAgICAgICAgIFwidGV4dC1hbGlnblwiOiBcImxlZnRcIlxuICAgICAgICB9KVxuICAgICAgICBwZXJjZW50ID0gMDtcbiAgICB9XG4gICAgZWxzZSB7XG5cbiAgICAgICAgJChcIi51bmRlcnN0YW5kaW5nLWxpbmtcIikuY3NzKHtcbiAgICAgICAgICAgIFwiZm9udC1mYW1pbHlcIjogXCJBcmlhbCBSb3VuZGVkIE1UIEJvbGRcIixcbiAgICAgICAgICAgIFwiZmxvYXRcIjogXCJsZWZ0XCIsXG4gICAgICAgICAgICBcImNvbG9yXCI6IFwiIzQ4NEVGRlwiLFxuICAgICAgICAgICAgXCJwYWRkaW5nLXRvcFwiOiBcIjIwcHhcIixcbiAgICAgICAgICAgIFwicGFkZGluZy1ib3R0b21cIjogXCIyMHB4XCIsXG4gICAgICAgICAgICBcInBhZGRpbmctcmlnaHRcIjogXCI4NXB4XCIsXG4gICAgICAgICAgICBcInRleHQtZGVjb3JhdGlvblwiOiBcIm5vbmVcIixcbiAgICAgICAgICAgIFwiZGlzcGxheVwiOiBcImJsb2NrXCIsXG4gICAgICAgICAgICBcInRleHQtYWxpZ25cIjogXCJsZWZ0XCJcbiAgICAgICAgfSkgXG4gICAgfVxuICAgIHZhciBvZmZzZXQgPSBjaXJjdW1mZXJlbmNlIC0gcGVyY2VudCAvIDEwMCAqIGNpcmN1bWZlcmVuY2U7XG4gICAgLy9jb25zb2xlLmxvZyhvZmZzZXQpO1xuICAgICQoXCIucHJvZ3Jlc3MtcmluZ19fY2lyY2xlLXVuZGVyc3RhbmRpbmdcIikuY3NzKHtcbiAgICAgICAgXCJ0cmFuc2l0aW9uXCI6IFwiMHMgc3Ryb2tlLWRhc2hvZmZzZXRcIixcbiAgICAgICAgLy8gYXhpcyBjb21wZW5zYXRpb25cbiAgICAgICAgXCJ0cmFuc2Zvcm1cIjogXCJyb3RhdGUoLTkwZGVnKVwiLFxuICAgICAgICBcInRyYW5zZm9ybS1vcmlnaW5cIjogXCI1MCUgNTAlXCIsXG4gICAgICAgIFwic3Ryb2tlLWRhc2hhcnJheVwiOiBgJHtjaXJjdW1mZXJlbmNlfSAke2NpcmN1bWZlcmVuY2V9YCxcbiAgICAgICAgXCJzdHJva2UtZGFzaG9mZnNldFwiOiBgJHtvZmZzZXR9YFxuICAgIH0pO1xuXG59XG5mdW5jdGlvbiBzZXRQcm9ncmVzc0Rlc2lnbihwZXJjZW50KSB7XG4gICAgaWYocGVyY2VudD45OS44KSB7XG4gICAgICAgIHBlcmNlbnQgPSAxMDA7XG4gICAgICAgICQoXCIuZGVzaWduLWxpbmtcIikuY3NzKHtcbiAgICAgICAgICAgIFwiZm9udC1mYW1pbHlcIjogXCJBcmlhbCBSb3VuZGVkIE1UIEJvbGRcIixcbiAgICAgICAgICAgIFwiZmxvYXRcIjogXCJsZWZ0XCIsXG4gICAgICAgICAgICBcImNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgICAgICAgIFwicGFkZGluZy10b3BcIjogXCIyMHB4XCIsXG4gICAgICAgICAgICBcInBhZGRpbmctYm90dG9tXCI6IFwiMjBweFwiLFxuICAgICAgICAgICAgXCJwYWRkaW5nLXJpZ2h0XCI6IFwiNjhweFwiLFxuICAgICAgICAgICAgXCJ0ZXh0LWRlY29yYXRpb25cIjogXCJub25lXCIsXG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJibG9ja1wiLFxuICAgICAgICAgICAgXCJ0ZXh0LWFsaWduXCI6IFwibGVmdFwiXG4gICAgICAgIH0pXG4gICAgfVxuICAgIGVsc2UgaWYocGVyY2VudDwtMC41KSB7XG4gICAgICAgICQoXCIuZGVzaWduLWxpbmtcIikuY3NzKHtcbiAgICAgICAgICAgIFwiZm9udC1mYW1pbHlcIjogXCJBcmlhbCBSb3VuZGVkIE1UIEJvbGRcIixcbiAgICAgICAgICAgIFwiZmxvYXRcIjogXCJsZWZ0XCIsXG4gICAgICAgICAgICBcImNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgICAgICAgIFwicGFkZGluZy10b3BcIjogXCIyMHB4XCIsXG4gICAgICAgICAgICBcInBhZGRpbmctYm90dG9tXCI6IFwiMjBweFwiLFxuICAgICAgICAgICAgXCJwYWRkaW5nLXJpZ2h0XCI6IFwiNjhweFwiLFxuICAgICAgICAgICAgXCJ0ZXh0LWRlY29yYXRpb25cIjogXCJub25lXCIsXG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJibG9ja1wiLFxuICAgICAgICAgICAgXCJ0ZXh0LWFsaWduXCI6IFwibGVmdFwiXG4gICAgICAgIH0pXG4gICAgICAgIHBlcmNlbnQgPSAwO1xuICAgIH1cbiAgICBlbHNlIHtcblxuICAgICAgICAkKFwiLmRlc2lnbi1saW5rXCIpLmNzcyh7XG4gICAgICAgICAgICBcImZvbnQtZmFtaWx5XCI6IFwiQXJpYWwgUm91bmRlZCBNVCBCb2xkXCIsXG4gICAgICAgICAgICBcImZsb2F0XCI6IFwibGVmdFwiLFxuICAgICAgICAgICAgXCJjb2xvclwiOiBcIiM0ODRFRkZcIixcbiAgICAgICAgICAgIFwicGFkZGluZy10b3BcIjogXCIyMHB4XCIsXG4gICAgICAgICAgICBcInBhZGRpbmctYm90dG9tXCI6IFwiMjBweFwiLFxuICAgICAgICAgICAgXCJwYWRkaW5nLXJpZ2h0XCI6IFwiNjhweFwiLFxuICAgICAgICAgICAgXCJ0ZXh0LWRlY29yYXRpb25cIjogXCJub25lXCIsXG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJibG9ja1wiLFxuICAgICAgICAgICAgXCJ0ZXh0LWFsaWduXCI6IFwibGVmdFwiXG4gICAgICAgIH0pIFxuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gY2lyY3VtZmVyZW5jZSAtIHBlcmNlbnQgLyAxMDAgKiBjaXJjdW1mZXJlbmNlO1xuICAgIC8vY29uc29sZS5sb2cob2Zmc2V0KTtcbiAgICAkKFwiLnByb2dyZXNzLXJpbmdfX2NpcmNsZS1kZXNpZ25cIikuY3NzKHtcbiAgICAgICAgXCJ0cmFuc2l0aW9uXCI6IFwiMHMgc3Ryb2tlLWRhc2hvZmZzZXRcIixcbiAgICAgICAgLy8gYXhpcyBjb21wZW5zYXRpb25cbiAgICAgICAgXCJ0cmFuc2Zvcm1cIjogXCJyb3RhdGUoLTkwZGVnKVwiLFxuICAgICAgICBcInRyYW5zZm9ybS1vcmlnaW5cIjogXCI1MCUgNTAlXCIsXG4gICAgICAgIFwic3Ryb2tlLWRhc2hhcnJheVwiOiBgJHtjaXJjdW1mZXJlbmNlfSAke2NpcmN1bWZlcmVuY2V9YCxcbiAgICAgICAgXCJzdHJva2UtZGFzaG9mZnNldFwiOiBgJHtvZmZzZXR9YFxuICAgIH0pO1xuXG59XG5mdW5jdGlvbiBzZXRQcm9ncmVzc0ltcGFjdChwZXJjZW50KSB7XG4gICAgaWYocGVyY2VudD45OS44KSB7XG4gICAgICAgIHBlcmNlbnQgPSAxMDA7XG4gICAgICAgICQoXCIuaW1wYWN0LWxpbmtcIikuY3NzKHtcbiAgICAgICAgICAgIFwiZm9udC1mYW1pbHlcIjogXCJBcmlhbCBSb3VuZGVkIE1UIEJvbGRcIixcbiAgICAgICAgICAgIFwiZmxvYXRcIjogXCJsZWZ0XCIsXG4gICAgICAgICAgICBcImNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgICAgICAgIFwicGFkZGluZy10b3BcIjogXCIyMHB4XCIsXG4gICAgICAgICAgICBcInBhZGRpbmctYm90dG9tXCI6IFwiMjBweFwiLFxuICAgICAgICAgICAgXCJwYWRkaW5nLXJpZ2h0XCI6IFwiNzBweFwiLFxuICAgICAgICAgICAgXCJ0ZXh0LWRlY29yYXRpb25cIjogXCJub25lXCIsXG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJibG9ja1wiLFxuICAgICAgICAgICAgXCJ0ZXh0LWFsaWduXCI6IFwibGVmdFwiXG4gICAgICAgIH0pXG4gICAgfVxuICAgIGVsc2UgaWYocGVyY2VudDwtMC41KSB7XG4gICAgICAgICQoXCIuaW1wYWN0LWxpbmtcIikuY3NzKHtcbiAgICAgICAgICAgIFwiZm9udC1mYW1pbHlcIjogXCJBcmlhbCBSb3VuZGVkIE1UIEJvbGRcIixcbiAgICAgICAgICAgIFwiZmxvYXRcIjogXCJsZWZ0XCIsXG4gICAgICAgICAgICBcImNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgICAgICAgIFwicGFkZGluZy10b3BcIjogXCIyMHB4XCIsXG4gICAgICAgICAgICBcInBhZGRpbmctYm90dG9tXCI6IFwiMjBweFwiLFxuICAgICAgICAgICAgXCJwYWRkaW5nLXJpZ2h0XCI6IFwiNzBweFwiLFxuICAgICAgICAgICAgXCJ0ZXh0LWRlY29yYXRpb25cIjogXCJub25lXCIsXG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJibG9ja1wiLFxuICAgICAgICAgICAgXCJ0ZXh0LWFsaWduXCI6IFwibGVmdFwiXG4gICAgICAgIH0pXG4gICAgICAgIHBlcmNlbnQgPSAwO1xuICAgIH1cbiAgICBlbHNlIHtcblxuICAgICAgICAkKFwiLmltcGFjdC1saW5rXCIpLmNzcyh7XG4gICAgICAgICAgICBcImZvbnQtZmFtaWx5XCI6IFwiQXJpYWwgUm91bmRlZCBNVCBCb2xkXCIsXG4gICAgICAgICAgICBcImZsb2F0XCI6IFwibGVmdFwiLFxuICAgICAgICAgICAgXCJjb2xvclwiOiBcIiM0ODRFRkZcIixcbiAgICAgICAgICAgIFwicGFkZGluZy10b3BcIjogXCIyMHB4XCIsXG4gICAgICAgICAgICBcInBhZGRpbmctYm90dG9tXCI6IFwiMjBweFwiLFxuICAgICAgICAgICAgXCJwYWRkaW5nLXJpZ2h0XCI6IFwiNzBweFwiLFxuICAgICAgICAgICAgXCJ0ZXh0LWRlY29yYXRpb25cIjogXCJub25lXCIsXG4gICAgICAgICAgICBcImRpc3BsYXlcIjogXCJibG9ja1wiLFxuICAgICAgICAgICAgXCJ0ZXh0LWFsaWduXCI6IFwibGVmdFwiXG4gICAgICAgIH0pIFxuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gY2lyY3VtZmVyZW5jZSAtIHBlcmNlbnQgLyAxMDAgKiBjaXJjdW1mZXJlbmNlO1xuICAgIC8vY29uc29sZS5sb2cob2Zmc2V0KTtcbiAgICAkKFwiLnByb2dyZXNzLXJpbmdfX2NpcmNsZS1pbXBhY3RcIikuY3NzKHtcbiAgICAgICAgXCJ0cmFuc2l0aW9uXCI6IFwiMHMgc3Ryb2tlLWRhc2hvZmZzZXRcIixcbiAgICAgICAgLy8gYXhpcyBjb21wZW5zYXRpb25cbiAgICAgICAgXCJ0cmFuc2Zvcm1cIjogXCJyb3RhdGUoLTkwZGVnKVwiLFxuICAgICAgICBcInRyYW5zZm9ybS1vcmlnaW5cIjogXCI1MCUgNTAlXCIsXG4gICAgICAgIFwic3Ryb2tlLWRhc2hhcnJheVwiOiBgJHtjaXJjdW1mZXJlbmNlfSAke2NpcmN1bWZlcmVuY2V9YCxcbiAgICAgICAgXCJzdHJva2UtZGFzaG9mZnNldFwiOiBgJHtvZmZzZXR9YFxuICAgIH0pO1xuXG59XG52YXIgZ2V0TWF4ID0gZnVuY3Rpb24oKXtcbiAgICAgICAgcmV0dXJuICQoZG9jdW1lbnQpLmhlaWdodCgpIC0gJCh3aW5kb3cpLmhlaWdodCgpO1xufVxuJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtcbiAgICBcbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKGdldE1heCk7XG4gICAgdmFyIGdldFZhbHVlID0gZnVuY3Rpb24oKXtcbiAgICAgICAgcmV0dXJuICQod2luZG93KS5zY3JvbGxUb3AoKTtcbiAgICB9XG4gICAgXG4gICAgaWYoJ21heCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncHJvZ3Jlc3MnKSl7XG4gICAgICAgIC8vIEJyb3dzZXIgc3VwcG9ydHMgcHJvZ3Jlc3MgZWxlbWVudFxuICAgICAgICB2YXIgcHJvZ3Jlc3NCYXIgPSAkKCdwcm9ncmVzcycpO1xuICAgICAgICBcbiAgICAgICAgLy8gU2V0IHRoZSBNYXggYXR0ciBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICAgICAgcHJvZ3Jlc3NCYXIuYXR0cih7IG1heDogZ2V0TWF4KCkgfSk7XG5cbiAgICAgICAgJChkb2N1bWVudCkub24oJ3Njcm9sbCcsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAvLyBPbiBzY3JvbGwgb25seSBWYWx1ZSBhdHRyIG5lZWRzIHRvIGJlIGNhbGN1bGF0ZWRcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLmF0dHIoeyB2YWx1ZTogZ2V0VmFsdWUoKSB9KTtcbiAgICAgICAgfSk7XG4gICAgICBcbiAgICAgICAgJCh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbigpe1xuICAgICAgICAgICAgLy8gT24gcmVzaXplLCBib3RoIE1heC9WYWx1ZSBhdHRyIG5lZWRzIHRvIGJlIGNhbGN1bGF0ZWRcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLmF0dHIoeyBtYXg6IGdldE1heCgpLCB2YWx1ZTogZ2V0VmFsdWUoKSB9KTtcbiAgICAgICAgfSk7ICAgXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgcHJvZ3Jlc3NCYXIgPSAkKCcucHJvZ3Jlc3MtYmFyJyksIFxuICAgICAgICAgICAgbWF4ID0gZ2V0TWF4KCksIFxuICAgICAgICAgICAgdmFsdWUsIHdpZHRoO1xuICAgICAgICBcbiAgICAgICAgdmFyIGdldFdpZHRoID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB3aWR0aCBpbiBwZXJjZW50YWdlXG4gICAgICAgICAgICB2YWx1ZSA9IGdldFZhbHVlKCk7ICAgICAgICAgICAgXG4gICAgICAgICAgICB3aWR0aCA9ICh2YWx1ZS9tYXgpICogMTAwO1xuICAgICAgICAgICAgd2lkdGggPSB3aWR0aCArICclJztcbiAgICAgICAgICAgIHJldHVybiB3aWR0aDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdmFyIHNldFdpZHRoID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLmNzcyh7IHdpZHRoOiBnZXRXaWR0aCgpIH0pO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAkKGRvY3VtZW50KS5vbignc2Nyb2xsJywgc2V0V2lkdGgpO1xuICAgICAgICAkKHdpbmRvdykub24oJ3Jlc2l6ZScsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAvLyBOZWVkIHRvIHJlc2V0IHRoZSBNYXggYXR0clxuICAgICAgICAgICAgbWF4ID0gZ2V0TWF4KCk7XG4gICAgICAgICAgICBzZXRXaWR0aCgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgJCgnYVtocmVmXj1cIiNcIl0nKS5vbignY2xpY2snLGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMuaGFzaCxcbiAgICAgICAgJHRhcmdldCA9ICQodGFyZ2V0KTtcbiAgICAgICAgJCgnaHRtbCwgYm9keScpLnN0b3AoKS5hbmltYXRlKHtcbiAgICAgICAgICAgICdzY3JvbGxUb3AnOiAkdGFyZ2V0Lm9mZnNldCgpLnRvcC05MFxuICAgICAgICB9LCAxMjAwKVxuICAgIH0pO1xuICAgICQoXCIucHJvZ3Jlc3MtcmluZ19fY2lyY2xlXCIpLmNzcyh7XG4gICAgICAgIFwidHJhbnNpdGlvblwiOiBcIjAuMzVzIHN0cm9rZS1kYXNob2Zmc2V0XCIsXG4gICAgICAgIC8vIGF4aXMgY29tcGVuc2F0aW9uXG4gICAgICAgIFwidHJhbnNmb3JtXCI6IFwicm90YXRlKC05MGRlZylcIixcbiAgICAgICAgXCJ0cmFuc2Zvcm0tb3JpZ2luXCI6IFwiNTAlIDUwJVwiLFxuICAgICAgICBcInN0cm9rZS1kYXNoYXJyYXlcIjogYCR7Y2lyY3VtZmVyZW5jZX0gJHtjaXJjdW1mZXJlbmNlfWAsXG4gICAgICAgIFwic3Ryb2tlLWRhc2hvZmZzZXRcIjogYCR7Y2lyY3VtZmVyZW5jZX1gXG4gICAgfSk7XG4gICAgLy9jb25zb2xlLmxvZyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm91dHJlYWNoLXRlYW1cIikub2Zmc2V0VG9wKTsgLy90aGlzIG5lZWRzIHRvIGJlIGZyb20gVE9QIG9mIHBhZ2UsIGJ1dCBub3Qgd29ya2luZ1xufSk7XG4vL0NJUkNMRSBTVFVGRiBCRUxPV1xuJChkb2N1bWVudCkuc2Nyb2xsKGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIHVuZGVyc3RhbmRpbmdlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3VuZGVyc3RhbmRpbmcnKTtcblxuICAgIHZhciBkZXNpZ25lbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2Rlc2lnbicpO1xuXG4gICAgdmFyIGltcGFjdGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjaW1wYWN0Jyk7XG5cbiAgICB2YXIgb3V0ZXJlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI291dGVyJyk7XG4gICAgLy9kZXRlY3Qgd2hlbiB1c2VyIHNjcm9sbCB0byB0b3AgYW5kIHNldCBwb3NpdGlvbiB0byBhYnNvbHV0ZSBlbHNlIHNldHMgcG9zaXRpb24gdG8gZml4ZWRcbiAgICAkKFwiLmZpeGVkLWluZGV4XCIpLmNzcyh7XG4gICAgICAgIFwidG9wXCI6ICQodGhpcykuc2Nyb2xsVG9wKCkgPiA3MDAgPyAkKHRoaXMpLnNjcm9sbFRvcCgpID4gZ2V0T2Zmc2V0VG9wKG91dGVyZWxlbWVudCktNjUwID8gZ2V0T2Zmc2V0VG9wKG91dGVyZWxlbWVudCktNDUwIDogXCIyMTBweFwiIDogXCI5MDBweFwiLCAvL1RIRVNFIE1VU1QgQkUgNjAwcHggQVBBUlRcbiAgICAgICAgXCJsZWZ0XCI6IFwiMFwiLFxuICAgICAgICBcInBvc2l0aW9uXCI6ICQodGhpcykuc2Nyb2xsVG9wKCkgPiA3MDAgPyAkKHRoaXMpLnNjcm9sbFRvcCgpID4gZ2V0T2Zmc2V0VG9wKG91dGVyZWxlbWVudCktNjUwID8gXCJhYnNvbHV0ZVwiIDogXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiXG4gICAgfSk7XG4gICAgLy9jb25zb2xlLmxvZygkKHRoaXMpLnNjcm9sbFRvcCgpLWdldE9mZnNldFRvcChlbGVtZW50KSk7XG4gICAgLy9jb25zb2xlLmxvZygxMDAqKCQodGhpcykuc2Nyb2xsVG9wKCktZ2V0T2Zmc2V0VG9wKHVuZGVyc3RhbmRpbmdlbGVtZW50KSs5MCkvKGdldE9mZnNldFRvcChkZXNpZ25lbGVtZW50KS1nZXRPZmZzZXRUb3AodW5kZXJzdGFuZGluZ2VsZW1lbnQpKSk7XG4gICAgLy9jb25zb2xlLmxvZygkKHRoaXMpLnNjcm9sbFRvcCgpKTsgXG4gICAgLy9jb25zb2xlLmxvZyhnZXRPZmZzZXRUb3AocmVmZXJlbmNlc2VsZW1lbnQpKTtcbiAgICAvL2NvbnNvbGUubG9nKFwibmV4dCBpcyB0aGlzIHRvcFwiKTtcbiAgICAvL2NvbnNvbGUubG9nKCQodGhpcykuc2Nyb2xsVG9wKCkpO1xuICAgIHNldFByb2dyZXNzVW5kZXJzdGFuZGluZygxMDAqKCQodGhpcykuc2Nyb2xsVG9wKCktZ2V0T2Zmc2V0VG9wKHVuZGVyc3RhbmRpbmdlbGVtZW50KSs5MCkvKGdldE9mZnNldFRvcChkZXNpZ25lbGVtZW50KS1nZXRPZmZzZXRUb3AodW5kZXJzdGFuZGluZ2VsZW1lbnQpKSk7XG5cbiAgICBzZXRQcm9ncmVzc0Rlc2lnbigxMDAqKCQodGhpcykuc2Nyb2xsVG9wKCktZ2V0T2Zmc2V0VG9wKGRlc2lnbmVsZW1lbnQpKzkwKS8oZ2V0T2Zmc2V0VG9wKGltcGFjdGVsZW1lbnQpLWdldE9mZnNldFRvcChkZXNpZ25lbGVtZW50KSkpO1xuXG4gICAgc2V0UHJvZ3Jlc3NJbXBhY3QoMTAwKigkKHRoaXMpLnNjcm9sbFRvcCgpLWdldE9mZnNldFRvcChpbXBhY3RlbGVtZW50KSs5MCkvKGdldE9mZnNldFRvcChvdXRlcmVsZW1lbnQpLWdldE9mZnNldFRvcChpbXBhY3RlbGVtZW50KSkpO1xuXG4gICAgLy9zZXRQcm9ncmVzcygxMDAqZ2V0T2Zmc2V0VG9wKCQodGhpcykpL2dldE1heCgpKTsgLy90aGlzIGRvZXNuO3Qgd3Jva1xuICAgIC8vY29uc29sZS5sb2coXCJoaVwiKTtcbiAgICAvL2NpcmNsZVxuICAgIFxufSk7XG4kKHdpbmRvdykub24oJ3Jlc2l6ZScsIGZ1bmN0aW9uKCl7XG4gICAgdmFyIHVuZGVyc3RhbmRpbmdlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3VuZGVyc3RhbmRpbmcnKTtcblxuICAgIHZhciBkZXNpZ25lbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2Rlc2lnbicpO1xuXG4gICAgdmFyIGltcGFjdGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjaW1wYWN0Jyk7XG5cbiAgICB2YXIgb3V0ZXJlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI291dGVyJyk7XG4gICAgdmFyIHdpbmQgPSAkKHRoaXMpXG4gICAgaWYod2luZC53aWR0aCgpPD0xMDAwKSB7XG4gICAgICAgICQoXCIuZml4ZWQtaW5kZXhcIikuY3NzKHtcbiAgICAgICAgICAgIFwiZGlzcGxheVwiOiBcIm5vbmVcIlxuICAgICAgICB9KTtcbiAgICAgICAgJChcIiNjb250ZW50XCIpLmNzcyh7XG4gICAgICAgICAgICBcInBhZGRpbmctbGVmdFwiOiBcIjBweFwiXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgJChcIi5maXhlZC1pbmRleFwiKS5jc3Moe1xuICAgICAgICAgICAgXCJkaXNwbGF5XCI6IFwiYmxvY2tcIixcbiAgICAgICAgICAgIFwidG9wXCI6ICQodGhpcykuc2Nyb2xsVG9wKCkgPiA3MDAgPyAkKHRoaXMpLnNjcm9sbFRvcCgpID4gZ2V0T2Zmc2V0VG9wKG91dGVyZWxlbWVudCktNjUwID8gXCIyNTMzcHhcIiA6IFwiMzAwcHhcIiA6IFwiOTAwcHhcIiwgLy9USEVTRSBNVVNUIEJFIDYwMHB4IEFQQVJUXG4gICAgICAgICAgICBcImxlZnRcIjogXCIwXCIsXG4gICAgICAgICAgICBcInBvc2l0aW9uXCI6ICQodGhpcykuc2Nyb2xsVG9wKCkgPiA3MDAgPyAkKHRoaXMpLnNjcm9sbFRvcCgpID4gZ2V0T2Zmc2V0VG9wKG91dGVyZWxlbWVudCktNjUwID8gXCJhYnNvbHV0ZVwiIDogXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiLFxuXG4gICAgICAgICAgICBcInBhZGRpbmctbGVmdFwiOiBcIjclXCJcbiAgICAgICAgfSk7XG4gICAgICAgICQoXCIjY29udGVudFwiKS5jc3Moe1xuICAgICAgICAgICAgXCJwYWRkaW5nLWxlZnRcIjogXCIzMCVcIlxuICAgICAgICB9KTtcbiAgICB9XG59KTtcblxuLyp2YXIgY2lyY2xlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignY2ljbGUnKTtcbnZhciByYWRpdXMgPSBjaXJjbGUuci5iYXNlVmFsLnZhbHVlO1xudmFyIGNpcmN1bWZlcmVuY2UgPSByYWRpdXMgKiAyICogTWF0aC5QSTsqL1xuLyokKFwiLnByb2dyZXNzLXJpbmdfX2NpcmNsZVwiKS5jc3Moe1xuICAgIFwidHJhbnNpdGlvblwiOiBcIjAuMzVzIHN0cm9rZS1kYXNob2Zmc2V0XCIsXG4gICAgLy8gYXhpcyBjb21wZW5zYXRpb25cbiAgICBcInRyYW5zZm9ybVwiOiBcInJvdGF0ZSgtOTBkZWcpXCIsXG4gICAgXCJ0cmFuc2Zvcm0tb3JpZ2luXCI6IFwiNTAlIDUwJVwiLFxuICAgIFwic3Ryb2tlLWRhc2hhcnJheVwiOiBcIiR7Y2lyY3VtZmVyZW5jZX0gJHtjaXJjdW1mZXJlbmNlfVwiLFxuICAgIFwic3Ryb2tlLWRhc2hvZmZzZXRcIjogXCIke2NpcmN1bWZlcmVuY2V9XCJcbn0pOyovXG5cblxuLypwb3NpdGlvbjpmaXhlZDtcbiAgbGVmdDowO1xuICB0b3A6IDUwMHB4OyovIl0sImZpbGUiOiJpbnRlZ3JhdGVkLWhwLmpzIn0=