Exploring CRAN claims of the "security" of CRAN mirrors
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2532 lines
2.5 MiB

5 years ago
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="pandoc" />
<meta name="author" content />
<title>CRAN HTTPS Mirrors</title>
<script>/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each(
return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</tex
return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Za.propHooks[this.prop];return a&&a.get?a.get(this):Za.propHooks._default.get(this)},run:function(a){var b,c=Za.propHooks[this.prop];return this.options.duration?this.pos=b=m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Za.propHooks._default.set(this),this}},Za.prototype.init.prototype=Za.prototype,Za.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Za.propHooks.scrollTop=Za.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Za.prototype.init,m.fx.step={};var $a,_a,ab=/^(?:toggle|show|hide)$/,bb=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cb=/queueHooks$/,db=[ib],eb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bb.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bb.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fb(){return setTimeout(function(){$a=void 0}),$a=m.now()}function gb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hb(a,b,c){for(var d,e=(eb[b]||[]).concat(eb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fa(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fa(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ab.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fa(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hb(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=db.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$a||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type="text/css">@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
src: url(data:application/x-font-truetype;base64,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
}
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 700;
src: url(data:application/x-font-truetype;base64,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
}
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url(data:application/vnd.ms-fontobject;base64,n04AAEFNAAACAAIABAAAAAAABQAAAAAAAAABAJABAAAEAExQAAAAAAAAAAIAAAAAAAAAAAEAAAAAAAAAJxJ/LAAAAAAAAAAAAAAAAAAAAAAAACgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzAAAADgBSAGUAZwB1AGwAYQByAAAAeABWAGUAcgBzAGkAbwBuACAAMQAuADAAMAA5ADsAUABTACAAMAAwADEALgAwADAAOQA7AGgAbwB0AGMAbwBuAHYAIAAxAC4AMAAuADcAMAA7AG0AYQBrAGUAbwB0AGYALgBsAGkAYgAyAC4ANQAuADUAOAAzADIAOQAAADgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzACAAUgBlAGcAdQBsAGEAcgAAAAAAQlNHUAAAAAAAAAAAAAAAAAAAAAADAKncAE0TAE0ZAEbuFM3pjM/SEdmjKHUbyow8ATBE40IvWA3vTu8LiABDQ+pexwUMcm1SMnNryctQSiI1K5ZnbOlXKmnVV5YvRe6RnNMFNCOs1KNVpn6yZhCJkRtVRNzEufeIq7HgSrcx4S8h/v4vnrrKc6oCNxmSk2uKlZQHBii6iKFoH0746ThvkO1kJHlxjrkxs+LWORaDQBEtiYJIR5IB9Bi1UyL4Rmr0BNigNkMzlKQmnofBHviqVzUxwdMb3NdCn69hy+pRYVKGVS/1tnsqv4LL7wCCPZZAZPT4aCShHjHJVNuXbmMrY5LeQaGnvAkXlVrJgKRAUdFjrWEah9XebPeQMj7KS7DIBAFt8ycgC5PLGUOHSE3ErGZCiViNLL5ZARfywnCoZaKQCu6NuFX42AEeKtKUGnr/Cm2Cy8tpFhBPMW5Fxi4Qm4TkDWh4IWFDClhU2hRWosUWqcKLlgyXB+lSHaWaHiWlBAR8SeSgSPCQxdVQgzUixWKSTrIQEbU94viDctkvX+VSjJuUmV8L4CXShI11esnp0pjWNZIyxKHS4wVQ2ime1P4RnhvGw0aDN1OLAXGERsB7buFpFGGBAre4QEQR0HOIO5oYH305G+KspT/FupEGGa
</style>
<script>/*!
* Bootstrap v3.3.5 (http://getbootstrap.com)
* Copyright 2011-2015 Twitter, Inc.
* Licensed under the MIT license
*/
if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.5",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.5",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==type
d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.5",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affi
<script>/**
* @preserve HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
// Only run this code in IE 8
if (!!window.navigator.userAgent.match("MSIE 8")) {
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.2",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b)}(this,document);
};
</script>
<script>/*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl
* Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT
* */
// Only run this code in IE 8
if (!!window.navigator.userAgent.match("MSIE 8")) {
!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='&shy;<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeChild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;b<s.length;b++){var c=s[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!o[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(v(c.styleSheet.rawCssText,e,f),o[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!r||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("//"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}w()};x(),c.update=x,c.getEmVal
};
</script>
<script>
/**
* jQuery Plugin: Sticky Tabs
*
* @author Aidan Lister <aidan@php.net>
* adapted by Ruben Arslan to activate parent tabs too
* http://www.aidanlister.com/2014/03/persisting-the-tab-state-in-bootstrap/
*/
(function($) {
"use strict";
$.fn.rmarkdownStickyTabs = function() {
var context = this;
// Show the tab corresponding with the hash in the URL, or the first tab
var showStuffFromHash = function() {
var hash = window.location.hash;
var selector = hash ? 'a[href="' + hash + '"]' : 'li.active > a';
var $selector = $(selector, context);
if($selector.data('toggle') === "tab") {
$selector.tab('show');
// walk up the ancestors of this element, show any hidden tabs
$selector.parents('.section.tabset').each(function(i, elm) {
var link = $('a[href="#' + $(elm).attr('id') + '"]');
if(link.data('toggle') === "tab") {
link.tab("show");
}
});
}
};
// Set the correct tab when the page loads
showStuffFromHash(context);
// Set the correct tab when a user uses their back/forward button
$(window).on('hashchange', function() {
showStuffFromHash(context);
});
// Change the URL when tabs are clicked
$('a', context).on('click', function(e) {
history.pushState(null, null, this.href);
showStuffFromHash(context);
});
return this;
};
}(jQuery));
window.buildTabsets = function(tocID) {
// build a tabset from a section div with the .tabset class
function buildTabset(tabset) {
// check for fade and pills options
var fade = tabset.hasClass("tabset-fade");
var pills = tabset.hasClass("tabset-pills");
var navClass = pills ? "nav-pills" : "nav-tabs";
// determine the heading level of the tabset and tabs
var match = tabset.attr('class').match(/level(\d) /);
if (match === null)
return;
var tabsetLevel = Number(match[1]);
var tabLevel = tabsetLevel + 1;
// find all subheadings immediately below
var tabs = tabset.find("div.section.level" + tabLevel);
if (!tabs.length)
return;
// create tablist and tab-content elements
var tabList = $('<ul class="nav ' + navClass + '" role="tablist"></ul>');
$(tabs[0]).before(tabList);
var tabContent = $('<div class="tab-content"></div>');
$(tabs[0]).before(tabContent);
// build the tabset
var activeTab = 0;
tabs.each(function(i) {
// get the tab div
var tab = $(tabs[i]);
// get the id then sanitize it for use with bootstrap tabs
var id = tab.attr('id');
// see if this is marked as the active tab
if (tab.hasClass('active'))
activeTab = i;
// remove any table of contents entries associated with
// this ID (since we'll be removing the heading element)
$("div#" + tocID + " li a[href='#" + id + "']").parent().remove();
// sanitize the id for use with bootstrap tabs
id = id.replace(/[.\/?&!#<>]/g, '').replace(/\s/g, '_');
tab.attr('id', id);
// get the heading element within it, grab it's text, then remove it
var heading = tab.find('h' + tabLevel + ':first');
var headingText = heading.html();
heading.remove();
// build and append the tab list item
var a = $('<a role="tab" data-toggle="tab">' + headingText + '</a>');
a.attr('href', '#' + id);
a.attr('aria-controls', id);
var li = $('<li role="presentation"></li>');
li.append(a);
tabList.append(li);
// set it's attributes
tab.attr('role', 'tabpanel');
tab.addClass('tab-pane');
tab.addClass('tabbed-pane');
if (fade)
tab.addClass('fade');
// move it into the tab content div
tab.detach().appendTo(tabContent);
});
// set active tab
$(tabList.children('li')[activeTab]).addClass('active');
var active = $(tabContent.children('div.section')[activeTab]);
active.addClass('active');
if (fade)
active.addClass('in');
if (tabset.hasClass("tabset-sticky"))
tabset.rmarkdownStickyTabs();
}
// convert section divs with the .tabset class to tabsets
var tabsets = $("div.section.tabset");
tabsets.each(function(i) {
buildTabset($(tabsets[i]));
});
};
</script>
<style type="text/css">code{white-space: pre;}</style>
<style type="text/css" data-origin="pandoc">
a.sourceLine { display: inline-block; line-height: 1.25; }
a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }
a.sourceLine:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode { white-space: pre; position: relative; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
code.sourceCode { white-space: pre-wrap; }
a.sourceLine { text-indent: -1em; padding-left: 1em; }
}
pre.numberSource a.sourceLine
{ position: relative; left: -4em; }
pre.numberSource a.sourceLine::before
{ content: attr(title);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; pointer-events: all; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
}
pre.numberSource { margin-left: 3em; padding-left: 4px; }
div.sourceCode
{ }
@media screen {
a.sourceLine::before { text-decoration: underline; }
}
code span.al { font-weight: bold; } /* Alert */
code span.an { font-style: italic; } /* Annotation */
code span.cf { font-weight: bold; } /* ControlFlow */
code span.co { font-style: italic; } /* Comment */
code span.cv { font-style: italic; } /* CommentVar */
code span.do { font-style: italic; } /* Documentation */
code span.dt { text-decoration: underline; } /* DataType */
code span.er { font-weight: bold; } /* Error */
code span.in { font-style: italic; } /* Information */
code span.kw { font-weight: bold; } /* Keyword */
code span.pp { font-weight: bold; } /* Preprocessor */
code span.wa { font-style: italic; } /* Warning */
</style>
<script>
// apply pandoc div.sourceCode style to pre.sourceCode instead
(function() {
var sheets = document.styleSheets;
for (var i = 0; i < sheets.length; i++) {
if (sheets[i].ownerNode.dataset["origin"] !== "pandoc") continue;
try { var rules = sheets[i].cssRules; } catch (e) { continue; }
for (var j = 0; j < rules.length; j++) {
var rule = rules[j];
// check if there is a div.sourceCode rule
if (rule.type !== rule.STYLE_RULE || rule.selectorText !== "div.sourceCode") continue;
var style = rule.style.cssText;
// check if color or background-color is set
if (rule.style.color === '' || rule.style.backgroundColor === '') continue;
// replace div.sourceCode by a pre.sourceCode rule
sheets[i].deleteRule(j);
sheets[i].insertRule('pre.sourceCode{' + style + '}', j);
}
}
})();
</script>
<style type="text/css">
pre:not([class]) {
background-color: white;
}
</style>
<style type="text/css">
h1 {
font-size: 34px;
}
h1.title {
font-size: 38px;
}
h2 {
font-size: 30px;
}
h3 {
font-size: 24px;
}
h4 {
font-size: 18px;
}
h5 {
font-size: 16px;
}
h6 {
font-size: 12px;
}
.table th:not([align]) {
text-align: left;
}
</style>
</head>
<body>
<style type="text/css">
.main-container {
max-width: 940px;
margin-left: auto;
margin-right: auto;
}
code {
color: inherit;
background-color: rgba(0, 0, 0, 0.04);
}
img {
max-width:100%;
height: auto;
}
.tabbed-pane {
padding-top: 12px;
}
.html-widget {
margin-bottom: 20px;
}
button.code-folding-btn:focus {
outline: none;
}
summary {
display: list-item;
}
</style>
<div class="container-fluid main-container">
<!-- tabsets -->
<style type="text/css">
.tabset-dropdown > .nav-tabs {
display: inline-table;
max-height: 500px;
min-height: 44px;
overflow-y: auto;
background: white;
border: 1px solid #ddd;
border-radius: 4px;
}
.tabset-dropdown > .nav-tabs > li.active:before {
content: "";
font-family: 'Glyphicons Halflings';
display: inline-block;
padding: 10px;
border-right: 1px solid #ddd;
}
.tabset-dropdown > .nav-tabs.nav-tabs-open > li.active:before {
content: "";
border: none;
}
.tabset-dropdown > .nav-tabs.nav-tabs-open:before {
content: "";
font-family: 'Glyphicons Halflings';
display: inline-block;
padding: 10px;
border-right: 1px solid #ddd;
}
.tabset-dropdown > .nav-tabs > li.active {
display: block;
}
.tabset-dropdown > .nav-tabs > li > a,
.tabset-dropdown > .nav-tabs > li > a:focus,
.tabset-dropdown > .nav-tabs > li > a:hover {
border: none;
display: inline-block;
border-radius: 4px;
}
.tabset-dropdown > .nav-tabs.nav-tabs-open > li {
display: block;
float: none;
}
.tabset-dropdown > .nav-tabs > li {
display: none;
}
</style>
<script>
$(document).ready(function () {
window.buildTabsets("TOC");
});
$(document).ready(function () {
$('.tabset-dropdown > .nav-tabs > li').click(function () {
$(this).parent().toggleClass('nav-tabs-open')
});
});
</script>
<!-- code folding -->
<div class="fluid-row" id="header">
<h1 class="title toc-ignore">CRAN HTTPS Mirrors</h1>
</div>
<div class="sourceCode" id="cb1"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb1-1" title="1"><span class="kw">library</span>(xml2)</a>
<a class="sourceLine" id="cb1-2" title="2"><span class="kw">library</span>(httr)</a>
<a class="sourceLine" id="cb1-3" title="3"><span class="kw">library</span>(curl)</a>
<a class="sourceLine" id="cb1-4" title="4"><span class="kw">library</span>(stringi)</a>
<a class="sourceLine" id="cb1-5" title="5"><span class="kw">library</span>(urltools)</a>
<a class="sourceLine" id="cb1-6" title="6"><span class="kw">library</span>(ipinfo)</a>
<a class="sourceLine" id="cb1-7" title="7"><span class="kw">library</span>(openssl)</a>
<a class="sourceLine" id="cb1-8" title="8"><span class="kw">library</span>(furrr)</a>
<a class="sourceLine" id="cb1-9" title="9"><span class="kw">library</span>(vershist) <span class="co"># install.packages(&quot;vershist&quot;, repos = &quot;https://cinc.rud.is/&quot;)</span></a>
<a class="sourceLine" id="cb1-10" title="10"><span class="kw">library</span>(ggalt)</a>
<a class="sourceLine" id="cb1-11" title="11"><span class="kw">library</span>(ggbeeswarm)</a>
<a class="sourceLine" id="cb1-12" title="12"><span class="kw">library</span>(hrbrthemes)</a>
<a class="sourceLine" id="cb1-13" title="13"><span class="kw">library</span>(tidyverse)</a></code></pre></div>
<div id="collect-cran-mirrors-metadata" class="section level2">
<h2>Collect CRAN mirrors’ metadata</h2>
<div class="sourceCode" id="cb2"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb2-1" title="1"><span class="cf">if</span> (<span class="op">!</span><span class="kw">file.exists</span>(here<span class="op">::</span><span class="kw">here</span>(<span class="st">&quot;data/mir-dat.rds&quot;</span>))) {</a>
<a class="sourceLine" id="cb2-2" title="2"> mdoc &lt;-<span class="st"> </span>xml2<span class="op">::</span><span class="kw">read_xml</span>(<span class="st">&quot;~/data/mirrors.html&quot;</span>, <span class="dt">as_html =</span> <span class="ot">TRUE</span>)</a>
<a class="sourceLine" id="cb2-3" title="3"></a>
<a class="sourceLine" id="cb2-4" title="4"> <span class="kw">xml_find_all</span>(mdoc, <span class="st">&quot;.//td/a[contains(@href, &#39;https&#39;)]&quot;</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb2-5" title="5"><span class="st"> </span><span class="kw">xml_attr</span>(<span class="st">&quot;href&quot;</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb2-6" title="6"><span class="st"> </span><span class="kw">unique</span>() -&gt;<span class="st"> </span>ssl_mirrors</a>
<a class="sourceLine" id="cb2-7" title="7"></a>
<a class="sourceLine" id="cb2-8" title="8"> <span class="kw">plan</span>(multiprocess)</a>
<a class="sourceLine" id="cb2-9" title="9"></a>
<a class="sourceLine" id="cb2-10" title="10"> dl_cert &lt;-<span class="st"> </span><span class="kw">possibly</span>(openssl<span class="op">::</span>download_ssl_cert, <span class="ot">NULL</span>)</a>
<a class="sourceLine" id="cb2-11" title="11"> HEAD_ &lt;-<span class="st"> </span><span class="kw">possibly</span>(httr<span class="op">::</span>HEAD, <span class="ot">NULL</span>)</a>
<a class="sourceLine" id="cb2-12" title="12"> dig &lt;-<span class="st"> </span><span class="kw">possibly</span>(curl<span class="op">::</span>nslookup, <span class="ot">NULL</span>)</a>
<a class="sourceLine" id="cb2-13" title="13"> query_ip_ &lt;-<span class="st"> </span><span class="kw">possibly</span>(ipinfo<span class="op">::</span>query_ip, <span class="ot">NULL</span>)</a>
<a class="sourceLine" id="cb2-14" title="14"></a>
<a class="sourceLine" id="cb2-15" title="15"> ssl_mirrors <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb2-16" title="16"><span class="st"> </span><span class="kw">future_map</span>(<span class="op">~</span>{</a>
<a class="sourceLine" id="cb2-17" title="17"> host &lt;-<span class="st"> </span><span class="kw">domain</span>(.x)</a>
<a class="sourceLine" id="cb2-18" title="18"> ip &lt;-<span class="st"> </span><span class="kw">dig</span>(host, <span class="ot">TRUE</span>)</a>
<a class="sourceLine" id="cb2-19" title="19"> ip_info &lt;-<span class="st"> </span><span class="cf">if</span> (<span class="kw">length</span>(ip)) <span class="kw">query_ip_</span>(ip) <span class="cf">else</span> <span class="ot">NULL</span></a>
<a class="sourceLine" id="cb2-20" title="20"> <span class="kw">list</span>(</a>
<a class="sourceLine" id="cb2-21" title="21"> <span class="dt">host =</span> host,</a>
<a class="sourceLine" id="cb2-22" title="22"> <span class="dt">cert =</span> <span class="kw">dl_cert</span>(host),</a>
<a class="sourceLine" id="cb2-23" title="23"> <span class="dt">head =</span> <span class="kw">HEAD_</span>(.x),</a>
<a class="sourceLine" id="cb2-24" title="24"> <span class="dt">ip =</span> ip,</a>
<a class="sourceLine" id="cb2-25" title="25"> <span class="dt">ip_info =</span> ip_info</a>
<a class="sourceLine" id="cb2-26" title="26"> )</a>
<a class="sourceLine" id="cb2-27" title="27"> }) -&gt;<span class="st"> </span>mir_dat</a>
<a class="sourceLine" id="cb2-28" title="28"></a>
<a class="sourceLine" id="cb2-29" title="29"> <span class="kw">saveRDS</span>(mir_dat, here<span class="op">::</span><span class="kw">here</span>(<span class="st">&quot;data/mir-dat.rds&quot;</span>))</a>
<a class="sourceLine" id="cb2-30" title="30">} <span class="cf">else</span> {</a>
<a class="sourceLine" id="cb2-31" title="31"> mir_dat &lt;-<span class="st"> </span><span class="kw">readRDS</span>(here<span class="op">::</span><span class="kw">here</span>(<span class="st">&quot;data/mir-dat.rds&quot;</span>))</a>
<a class="sourceLine" id="cb2-32" title="32">}</a>
<a class="sourceLine" id="cb2-33" title="33"></a>
<a class="sourceLine" id="cb2-34" title="34"><span class="kw">str</span>(mir_dat[<span class="dv">1</span>], <span class="dv">3</span>)</a></code></pre></div>
<pre><code>## List of 1
## $ :List of 5
## ..$ host : chr &quot;cloud.r-project.org&quot;
## ..$ cert :List of 4
## .. ..$ :List of 8
## .. ..$ :List of 8
## .. ..$ :List of 8
## .. ..$ :List of 8
## ..$ head :List of 10
## .. ..$ url : chr &quot;https://cloud.r-project.org/&quot;
## .. ..$ status_code: int 200
## .. ..$ headers :List of 13
## .. .. ..- attr(*, &quot;class&quot;)= chr [1:2] &quot;insensitive&quot; &quot;list&quot;
## .. ..$ all_headers:List of 1
## .. ..$ cookies :&#39;data.frame&#39;: 0 obs. of 7 variables:
## .. ..$ content : raw(0)
## .. ..$ date : POSIXct[1:1], format: &quot;2018-11-29 09:41:27&quot;
## .. ..$ times : Named num [1:6] 0 0.0507 0.0512 0.0666 0.0796 ...
## .. .. ..- attr(*, &quot;names&quot;)= chr [1:6] &quot;redirect&quot; &quot;namelookup&quot; &quot;connect&quot; &quot;pretransfer&quot; ...
## .. ..$ request :List of 7
## .. .. ..- attr(*, &quot;class&quot;)= chr &quot;request&quot;
## .. ..$ handle :Class &#39;curl_handle&#39; &lt;externalptr&gt;
## .. ..- attr(*, &quot;class&quot;)= chr &quot;response&quot;
## ..$ ip : chr &quot;52.85.89.62&quot;
## ..$ ip_info:List of 8
## .. ..$ ip : chr &quot;52.85.89.62&quot;
## .. ..$ hostname: chr &quot;server-52-85-89-62.jfk6.r.cloudfront.net&quot;
## .. ..$ city : chr &quot;Seattle&quot;
## .. ..$ region : chr &quot;Washington&quot;
## .. ..$ country : chr &quot;US&quot;
## .. ..$ loc : chr &quot;47.6348,-122.3450&quot;
## .. ..$ postal : chr &quot;98109&quot;
## .. ..$ org : chr &quot;AS16509 Amazon.com, Inc.&quot;</code></pre>
<p>Gratuitous map of CRAN mirror locations</p>
<div class="sourceCode" id="cb4"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb4-1" title="1">maps<span class="op">::</span><span class="kw">map</span>(<span class="st">&quot;world&quot;</span>, <span class="st">&quot;.&quot;</span>, <span class="dt">exact =</span> <span class="ot">FALSE</span>, <span class="dt">plot =</span> <span class="ot">FALSE</span>, <span class="dt">fill =</span> <span class="ot">TRUE</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb4-2" title="2"><span class="st"> </span><span class="kw">fortify</span>() <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb4-3" title="3"><span class="st"> </span><span class="kw">filter</span>(region <span class="op">!=</span><span class="st"> &quot;Antarctica&quot;</span>) -&gt;<span class="st"> </span>world</a>
<a class="sourceLine" id="cb4-4" title="4"></a>
<a class="sourceLine" id="cb4-5" title="5"><span class="kw">map_chr</span>(mir_dat, <span class="op">~</span>.x<span class="op">$</span>ip_info<span class="op">$</span>loc) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb4-6" title="6"><span class="st"> </span><span class="kw">stri_split_fixed</span>(<span class="dt">pattern =</span> <span class="st">&quot;,&quot;</span>, <span class="dt">n =</span> <span class="dv">2</span>, <span class="dt">simplify =</span> <span class="ot">TRUE</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb4-7" title="7"><span class="st"> </span><span class="kw">as.data.frame</span>(<span class="dt">stringsAsFactors =</span> <span class="ot">FALSE</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb4-8" title="8"><span class="st"> </span><span class="kw">as_tibble</span>() <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb4-9" title="9"><span class="st"> </span><span class="kw">mutate_all</span>(<span class="kw">list</span>(as.numeric)) -&gt;<span class="st"> </span>wheres_cran</a></code></pre></div>
<div class="sourceCode" id="cb5"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb5-1" title="1"><span class="kw">ggplot</span>() <span class="op">+</span></a>
<a class="sourceLine" id="cb5-2" title="2"><span class="st"> </span>ggalt<span class="op">::</span><span class="kw">geom_cartogram</span>(</a>
<a class="sourceLine" id="cb5-3" title="3"> <span class="dt">data =</span> world, <span class="dt">map =</span> world, <span class="kw">aes</span>(long, lat, <span class="dt">map_id=</span>region),</a>
<a class="sourceLine" id="cb5-4" title="4"> <span class="dt">color =</span> ft_cols<span class="op">$</span>gray, <span class="dt">size =</span> <span class="fl">0.125</span></a>
<a class="sourceLine" id="cb5-5" title="5"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb5-6" title="6"><span class="st"> </span><span class="kw">geom_point</span>(</a>
<a class="sourceLine" id="cb5-7" title="7"> <span class="dt">data =</span> wheres_cran, <span class="kw">aes</span>(V2, V1), <span class="dt">size =</span> <span class="dv">2</span>,</a>
<a class="sourceLine" id="cb5-8" title="8"> <span class="dt">color =</span> ft_cols<span class="op">$</span>slate, <span class="dt">fill =</span> <span class="kw">alpha</span>(ft_cols<span class="op">$</span>yellow, <span class="dv">3</span><span class="op">/</span><span class="dv">4</span>), <span class="dt">shape =</span> <span class="dv">21</span></a>
<a class="sourceLine" id="cb5-9" title="9"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb5-10" title="10"><span class="st"> </span>ggalt<span class="op">::</span><span class="kw">coord_proj</span>(<span class="st">&quot;+proj=wintri&quot;</span>) <span class="op">+</span></a>
<a class="sourceLine" id="cb5-11" title="11"><span class="st"> </span><span class="kw">labs</span>(</a>
<a class="sourceLine" id="cb5-12" title="12"> <span class="dt">x =</span> <span class="ot">NULL</span>, <span class="dt">y =</span> <span class="ot">NULL</span>,</a>
<a class="sourceLine" id="cb5-13" title="13"> <span class="dt">title =</span> <span class="st">&quot;Geolocation of HTTPS-&#39;enabled&#39; CRAN Mirrors&quot;</span></a>
<a class="sourceLine" id="cb5-14" title="14"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb5-15" title="15"><span class="st"> </span><span class="kw">theme_ft_rc</span>(<span class="dt">grid=</span><span class="st">&quot;&quot;</span>) <span class="op">+</span></a>
<a class="sourceLine" id="cb5-16" title="16"><span class="st"> </span><span class="kw">theme</span>(<span class="dt">axis.text =</span> <span class="kw">element_blank</span>())</a></code></pre></div>
<p><img src="data:image/png;base64,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
</div>
<div id="look-at-certificate-info" class="section level2">
<h2>Look at certificate info</h2>
<div class="sourceCode" id="cb6"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb6-1" title="1"><span class="kw">map_df</span>(mir_dat, <span class="op">~</span>{</a>
<a class="sourceLine" id="cb6-2" title="2"> <span class="kw">tibble</span>(</a>
<a class="sourceLine" id="cb6-3" title="3"> <span class="dt">host =</span> .x<span class="op">$</span>host,</a>
<a class="sourceLine" id="cb6-4" title="4"> <span class="dt">s_issuer =</span> .x<span class="op">$</span>cert[[<span class="dv">1</span>]]<span class="op">$</span>issuer <span class="op">%||%</span><span class="st"> </span><span class="ot">NA_character_</span>,</a>
<a class="sourceLine" id="cb6-5" title="5"> <span class="dt">i_issuer =</span> .x<span class="op">$</span>cert[[<span class="dv">2</span>]]<span class="op">$</span>issuer <span class="op">%||%</span><span class="st"> </span><span class="ot">NA_character_</span>,</a>
<a class="sourceLine" id="cb6-6" title="6"> <span class="dt">algo =</span> .x<span class="op">$</span>cert[[<span class="dv">1</span>]]<span class="op">$</span>algorithm <span class="op">%||%</span><span class="st"> </span><span class="ot">NA_character_</span>,</a>
<a class="sourceLine" id="cb6-7" title="7"> <span class="dt">names =</span> .x<span class="op">$</span>cert[[<span class="dv">1</span>]]<span class="op">$</span>alt_names <span class="op">%||%</span><span class="st"> </span><span class="ot">NA_character_</span>,</a>
<a class="sourceLine" id="cb6-8" title="8"> <span class="dt">nm_ct =</span> <span class="kw">length</span>(.x<span class="op">$</span>cert[[<span class="dv">1</span>]]<span class="op">$</span>alt_names),</a>
<a class="sourceLine" id="cb6-9" title="9"> <span class="dt">key_size =</span> .x<span class="op">$</span>cert[[<span class="dv">1</span>]]<span class="op">$</span>pubkey<span class="op">$</span>size <span class="op">%||%</span><span class="st"> </span><span class="ot">NA_integer_</span></a>
<a class="sourceLine" id="cb6-10" title="10"> )</a>
<a class="sourceLine" id="cb6-11" title="11">}) -&gt;<span class="st"> </span>certs</a></code></pre></div>
<div id="how-many-either-blocked-the-connection-or-dont-exist" class="section level3">
<h3>How many either blocked the connection or don’t exist</h3>
<div class="sourceCode" id="cb7"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb7-1" title="1">certs[<span class="op">!</span><span class="kw">complete.cases</span>(certs),]</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="left">host</th>
<th align="left">s_issuer</th>
<th align="left">i_issuer</th>
<th align="left">algo</th>
<th align="left">names</th>
<th align="right">nm_ct</th>
<th align="right">key_size</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">mirrors.shu.edu.cn</td>
<td align="left">NA</td>
<td align="left">NA</td>
<td align="left">NA</td>
<td align="left">NA</td>
<td align="right">0</td>
<td align="right">NA</td>
</tr>
<tr class="even">
<td align="left">ftp.heanet.ie</td>
<td align="left">NA</td>
<td align="left">NA</td>
<td align="left">NA</td>
<td align="left">NA</td>
<td align="right">0</td>
<td align="right">NA</td>
</tr>
</tbody>
</table>
</div>
<div class="sourceCode" id="cb8"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb8-1" title="1">certs &lt;-<span class="st"> </span><span class="kw">filter</span>(certs, <span class="kw">complete.cases</span>(certs))</a></code></pre></div>
</div>
<div id="how-many-domains-do-these-certs-serve" class="section level3">
<h3>How many domains do these certs serve?</h3>
<div class="sourceCode" id="cb9"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb9-1" title="1"><span class="kw">count</span>(certs, host, <span class="dt">sort=</span><span class="ot">TRUE</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb9-2" title="2"><span class="st"> </span><span class="kw">ggplot</span>() <span class="op">+</span></a>
<a class="sourceLine" id="cb9-3" title="3"><span class="st"> </span><span class="kw">geom_quasirandom</span>(</a>
<a class="sourceLine" id="cb9-4" title="4"> <span class="kw">aes</span>(<span class="st">&quot;&quot;</span>, n), <span class="dt">size =</span> <span class="dv">2</span>,</a>
<a class="sourceLine" id="cb9-5" title="5"> <span class="dt">color =</span> ft_cols<span class="op">$</span>slate, <span class="dt">fill =</span> <span class="kw">alpha</span>(ft_cols<span class="op">$</span>yellow, <span class="dv">3</span><span class="op">/</span><span class="dv">4</span>), <span class="dt">shape =</span> <span class="dv">21</span></a>
<a class="sourceLine" id="cb9-6" title="6"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb9-7" title="7"><span class="st"> </span><span class="kw">scale_y_comma</span>() <span class="op">+</span></a>
<a class="sourceLine" id="cb9-8" title="8"><span class="st"> </span><span class="kw">labs</span>(</a>
<a class="sourceLine" id="cb9-9" title="9"> <span class="dt">x =</span> <span class="ot">NULL</span>, <span class="dt">y =</span> <span class="st">&quot;# Servers&quot;</span>,</a>
<a class="sourceLine" id="cb9-10" title="10"> <span class="dt">title =</span> <span class="st">&quot;Distribution of the number of alt-names in CRAN mirror certificates&quot;</span></a>
<a class="sourceLine" id="cb9-11" title="11"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb9-12" title="12"><span class="st"> </span><span class="kw">theme_ft_rc</span>(<span class="dt">grid=</span><span class="st">&quot;Y&quot;</span>)</a></code></pre></div>
<p><img src="data:image/png;base64,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BBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAGAfQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAGAfQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAGAfQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAGAfQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAGAfQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAGAfQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAGAfQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAGAfQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAGAfQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAGAfQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAGAfQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAGAfQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAGAfQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAGAfQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAGAfQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAGAfQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAGAfQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAGAfQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAR8K0ADgw41KlRBAAAEEEEAAAQQQQAABBBBAAAEEEEAA
<p>Take a look at some of them</p>
<div class="sourceCode" id="cb10"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb10-1" title="1"><span class="kw">filter</span>(certs, host <span class="op">==</span><span class="st"> &quot;cran.cnr.berkeley.edu&quot;</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb10-2" title="2"><span class="st"> </span><span class="kw">select</span>(names) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb10-3" title="3"><span class="st"> </span><span class="kw">head</span>(<span class="dv">20</span>)</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="left">names</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">nature.berkeley.edu</td>
</tr>
<tr class="even">
<td align="left">ag-labor.cnr.berkeley.edu</td>
</tr>
<tr class="odd">
<td align="left">agro-laboral.cnr.berkeley.edu</td>
</tr>
<tr class="even">
<td align="left">agroecology.berkeley.edu</td>
</tr>
<tr class="odd">
<td align="left">anthoff.erg.berkeley.edu</td>
</tr>
<tr class="even">
<td align="left">are-dev.cnr.berkeley.edu</td>
</tr>
<tr class="odd">
<td align="left">are-prod.cnr.berkeley.edu</td>
</tr>
<tr class="even">
<td align="left">are-qa.cnr.berkeley.edu</td>
</tr>
<tr class="odd">
<td align="left">are.berkeley.edu</td>
</tr>
<tr class="even">
<td align="left">arebeta.berkeley.edu</td>
</tr>
<tr class="odd">
<td align="left">areweb.berkeley.edu</td>
</tr>
<tr class="even">
<td align="left">atkins-dev.cnr.berkeley.edu</td>
</tr>
<tr class="odd">
<td align="left">atkins-prod.cnr.berkeley.edu</td>
</tr>
<tr class="even">
<td align="left">atkins-qa.cnr.berkeley.edu</td>
</tr>
<tr class="odd">
<td align="left">atkins.berkeley.edu</td>
</tr>
<tr class="even">
<td align="left">bakerlab-dev.cnr.berkeley.edu</td>
</tr>
<tr class="odd">
<td align="left">bakerlab-prod.cnr.berkeley.edu</td>
</tr>
<tr class="even">
<td align="left">bakerlab-qa.cnr.berkeley.edu</td>
</tr>
<tr class="odd">
<td align="left">bamg.cnr.berkeley.edu</td>
</tr>
<tr class="even">
<td align="left">beahrselp-dev.cnr.berkeley.edu</td>
</tr>
</tbody>
</table>
</div>
<div class="sourceCode" id="cb11"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb11-1" title="1"><span class="kw">filter</span>(certs, host <span class="op">==</span><span class="st"> &quot;cran.rapporter.net&quot;</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb11-2" title="2"><span class="st"> </span><span class="kw">select</span>(names) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb11-3" title="3"><span class="st"> </span><span class="kw">head</span>(<span class="dv">20</span>)</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="left">names</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">sni45256.cloudflaressl.com</td>
</tr>
<tr class="even">
<td align="left">*.aplusacademicresources.org</td>
</tr>
<tr class="odd">
<td align="left">*.bjjandfitness.com</td>
</tr>
<tr class="even">
<td align="left">*.bytheyard.com</td>
</tr>
<tr class="odd">
<td align="left">*.ces-nc.com</td>
</tr>
<tr class="even">
<td align="left">*.ddgalesinc.com</td>
</tr>
<tr class="odd">
<td align="left">*.doa-ncgov.com</td>
</tr>
<tr class="even">
<td align="left">*.emmabhairextensions.com</td>
</tr>
<tr class="odd">
<td align="left">*.enovateih.com</td>
</tr>
<tr class="even">
<td align="left">*.enuerto.media</td>
</tr>
<tr class="odd">
<td align="left">*.erp-mc.com</td>
</tr>
<tr class="even">
<td align="left">*.gaylejohnsonmassage.com</td>
</tr>
<tr class="odd">
<td align="left">*.gobl.eu</td>
</tr>
<tr class="even">
<td align="left">*.greaterny-realestate.com</td>
</tr>
<tr class="odd">
<td align="left">*.guidinglightseniorresources.com</td>
</tr>
<tr class="even">
<td align="left">*.hightech-store.net</td>
</tr>
<tr class="odd">
<td align="left">*.holandacontabil.com.br</td>
</tr>
<tr class="even">
<td align="left">*.iabg-consulting.com</td>
</tr>
<tr class="odd">
<td align="left">*.iltempiodellenergiafemminile.eu</td>
</tr>
<tr class="even">
<td align="left">*.jnt-woodworks.com</td>
</tr>
</tbody>
</table>
</div>
<div class="sourceCode" id="cb12"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb12-1" title="1"><span class="kw">filter</span>(certs, host <span class="op">==</span><span class="st"> &quot;cran-r.c3sl.ufpr.br&quot;</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb12-2" title="2"><span class="st"> </span><span class="kw">select</span>(names) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb12-3" title="3"><span class="st"> </span><span class="kw">head</span>(<span class="dv">20</span>)</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="left">names</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">alpinelinux.c3sl.ufpr.br</td>
</tr>
<tr class="even">
<td align="left">aptosid.c3sl.ufpr.br</td>
</tr>
<tr class="odd">
<td align="left">archlinux.c3sl.ufpr.br</td>
</tr>
<tr class="even">
<td align="left">biglinux.c3sl.ufpr.br</td>
</tr>
<tr class="odd">
<td align="left">chakra.c3sl.ufpr.br</td>
</tr>
<tr class="even">
<td align="left">clamavdb.c3sl.ufpr.br</td>
</tr>
<tr class="odd">
<td align="left">cran-r.c3sl.ufpr.br</td>
</tr>
<tr class="even">
<td align="left">dadosabertos.c3sl.ufpr.br</td>
</tr>
<tr class="odd">
<td align="left">debian.c3sl.ufpr.br</td>
</tr>
<tr class="even">
<td align="left">demoiselle.c3sl.ufpr.br</td>
</tr>
<tr class="odd">
<td align="left">devuan.c3sl.ufpr.br</td>
</tr>
<tr class="even">
<td align="left">eclipse.c3sl.ufpr.br</td>
</tr>
<tr class="odd">
<td align="left">f123.c3sl.ufpr.br</td>
</tr>
<tr class="even">
<td align="left">fedora-alt.c3sl.ufpr.br</td>
</tr>
<tr class="odd">
<td align="left">fedora.c3sl.ufpr.br</td>
</tr>
<tr class="even">
<td align="left">gentoo.c3sl.ufpr.br</td>
</tr>
<tr class="odd">
<td align="left">gnu.c3sl.ufpr.br</td>
</tr>
<tr class="even">
<td align="left">grml.c3sl.ufpr.br</td>
</tr>
<tr class="odd">
<td align="left">kde-applicationdata.c3sl.ufpr.br</td>
</tr>
<tr class="even">
<td align="left">kde.c3sl.ufpr.br</td>
</tr>
</tbody>
</table>
</div>
<div class="sourceCode" id="cb13"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb13-1" title="1"><span class="kw">filter</span>(certs, host <span class="op">==</span><span class="st"> &quot;fourdots.com&quot;</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb13-2" title="2"><span class="st"> </span><span class="kw">select</span>(names) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb13-3" title="3"><span class="st"> </span><span class="kw">head</span>(<span class="dv">20</span>)</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="left">names</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">ssl390890.cloudflaressl.com</td>
</tr>
<tr class="even">
<td align="left">*.alghuraircentre.com</td>
</tr>
<tr class="odd">
<td align="left">*.cachealumni.org.uk</td>
</tr>
<tr class="even">
<td align="left">*.chla.com</td>
</tr>
<tr class="odd">
<td align="left">*.djborhan.com</td>
</tr>
<tr class="even">
<td align="left">*.easypay.am</td>
</tr>
<tr class="odd">
<td align="left">*.fourdots.com</td>
</tr>
<tr class="even">
<td align="left">*.isteadrise.org.uk</td>
</tr>
<tr class="odd">
<td align="left">*.japand.biz</td>
</tr>
<tr class="even">
<td align="left">*.lunaimani.com</td>
</tr>
<tr class="odd">
<td align="left">*.qualhub.co.uk</td>
</tr>
<tr class="even">
<td align="left">*.qvest.io</td>
</tr>
<tr class="odd">
<td align="left">*.samuelbernstein.com</td>
</tr>
<tr class="even">
<td align="left">*.soulsplit.net</td>
</tr>
<tr class="odd">
<td align="left">*.southbeachavenue.com</td>
</tr>
<tr class="even">
<td align="left">*.urbanbellemag.com</td>
</tr>
<tr class="odd">
<td align="left">alghuraircentre.com</td>
</tr>
<tr class="even">
<td align="left">cachealumni.org.uk</td>
</tr>
<tr class="odd">
<td align="left">chla.com</td>
</tr>
<tr class="even">
<td align="left">djborhan.com</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="certificate-algokey" class="section level3">
<h3>Certificate algo/key</h3>
<div class="sourceCode" id="cb14"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb14-1" title="1"><span class="kw">distinct</span>(certs, host, algo, key_size) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb14-2" title="2"><span class="st"> </span><span class="kw">count</span>(algo, key_size, <span class="dt">sort=</span><span class="ot">TRUE</span>)</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="left">algo</th>
<th align="right">key_size</th>
<th align="right">n</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">sha256WithRSAEncryption</td>
<td align="right">2048</td>
<td align="right">59</td>
</tr>
<tr class="even">
<td align="left">sha256WithRSAEncryption</td>
<td align="right">4096</td>
<td align="right">13</td>
</tr>
<tr class="odd">
<td align="left">ecdsa-with-SHA256</td>
<td align="right">256</td>
<td align="right">2</td>
</tr>
<tr class="even">
<td align="left">sha256WithRSAEncryption</td>
<td align="right">256</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">sha256WithRSAEncryption</td>
<td align="right">384</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">sha512WithRSAEncryption</td>
<td align="right">2048</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">sha512WithRSAEncryption</td>
<td align="right">4096</td>
<td align="right">1</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="certificate-issuers" class="section level3">
<h3>Certificate issuers</h3>
<div class="sourceCode" id="cb15"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb15-1" title="1"><span class="kw">distinct</span>(certs, host, i_issuer) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb15-2" title="2"><span class="st"> </span><span class="kw">count</span>(i_issuer, <span class="dt">sort =</span> <span class="ot">TRUE</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb15-3" title="3"><span class="st"> </span><span class="kw">head</span>(<span class="dv">28</span>)</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="left">i_issuer</th>
<th align="right">n</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">CN=DST Root CA X3,O=Digital Signature Trust Co.</td>
<td align="right">20</td>
</tr>
<tr class="even">
<td align="left">CN=COMODO RSA Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB</td>
<td align="right">7</td>
</tr>
<tr class="odd">
<td align="left">CN=DigiCert Assured ID Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US</td>
<td align="right">7</td>
</tr>
<tr class="even">
<td align="left">CN=DigiCert Global Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US</td>
<td align="right">6</td>
</tr>
<tr class="odd">
<td align="left">CN=DigiCert High Assurance EV Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US</td>
<td align="right">6</td>
</tr>
<tr class="even">
<td align="left">CN=QuoVadis Root CA 2 G3,O=QuoVadis Limited,C=BM</td>
<td align="right">5</td>
</tr>
<tr class="odd">
<td align="left">CN=USERTrust RSA Certification Authority,O=The USERTRUST Network,L=Jersey City,ST=New Jersey,C=US</td>
<td align="right">5</td>
</tr>
<tr class="even">
<td align="left">CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE</td>
<td align="right">4</td>
</tr>
<tr class="odd">
<td align="left">CN=Trusted Root CA SHA256 G2,O=GlobalSign nv-sa,OU=Trusted Root,C=BE</td>
<td align="right">3</td>
</tr>
<tr class="even">
<td align="left">CN=COMODO ECC Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB</td>
<td align="right">2</td>
</tr>
<tr class="odd">
<td align="left">CN=DFN-Verein PCA Global - G01,OU=DFN-PKI,O=DFN-Verein,C=DE</td>
<td align="right">2</td>
</tr>
<tr class="even">
<td align="left">OU=Security Communication RootCA2,O=SECOM Trust Systems CO.,LTD.,C=JP</td>
<td align="right">2</td>
</tr>
<tr class="odd">
<td align="left">CN=AddTrust External CA Root,OU=AddTrust External TTP Network,O=AddTrust AB,C=SE</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">CN=Amazon Root CA 1,O=Amazon,C=US</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">CN=Baltimore CyberTrust Root,OU=CyberTrust,O=Baltimore,C=IE</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">CN=Certum Trusted Network CA,OU=Certum Certification Authority,O=Unizeto Technologies S.A.,C=PL</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">CN=DFN-Verein Certification Authority 2,OU=DFN-PKI,O=Verein zur Foerderung eines Deutschen Forschungsnetzes e. V.,C=DE</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">CN=Go Daddy Root Certificate Authority - G2,O=GoDaddy.com, Inc.,L=Scottsdale,ST=Arizona,C=US</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">CN=InCommon RSA Server CA,OU=InCommon,O=Internet2,L=Ann Arbor,ST=MI,C=US</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">CN=QuoVadis Root CA 2,O=QuoVadis Limited,C=BM</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">CN=QuoVadis Root Certification Authority,OU=Root Certification Authority,O=QuoVadis Limited,C=BM</td>
<td align="right">1</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="interactive-ssl-tests" class="section level2">
<h2>Interactive SSL tests</h2>
<p>Using <a href="https://github.com/drwetter/testssl.sh"><code>testssl.sh</code></a>.</p>
<div class="sourceCode" id="cb16"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb16-1" title="1"><span class="kw">list.files</span>(here<span class="op">::</span><span class="kw">here</span>(<span class="st">&quot;data/ssl&quot;</span>), <span class="st">&quot;json$&quot;</span>, <span class="dt">full.names =</span> <span class="ot">TRUE</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb16-2" title="2"><span class="st"> </span><span class="kw">map_df</span>(jsonlite<span class="op">::</span>fromJSON) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb16-3" title="3"><span class="st"> </span><span class="kw">as_tibble</span>() -&gt;<span class="st"> </span>ssl_tests</a>
<a class="sourceLine" id="cb16-4" title="4"></a>
<a class="sourceLine" id="cb16-5" title="5">sev &lt;-<span class="st"> </span><span class="kw">c</span>(<span class="st">&quot;OK&quot;</span>, <span class="st">&quot;LOW&quot;</span>, <span class="st">&quot;MEDIUM&quot;</span>, <span class="st">&quot;HIGH&quot;</span>, <span class="st">&quot;WARN&quot;</span>, <span class="st">&quot;CRITICAL&quot;</span>)</a></code></pre></div>
<div class="sourceCode" id="cb17"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb17-1" title="1"><span class="kw">filter</span>(ssl_tests, severity <span class="op">%in%</span><span class="st"> </span>sev) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb17-2" title="2"><span class="st"> </span><span class="kw">group_by</span>(ip) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb17-3" title="3"><span class="st"> </span><span class="kw">count</span>(severity) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb17-4" title="4"><span class="st"> </span><span class="kw">ungroup</span>() <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb17-5" title="5"><span class="st"> </span><span class="kw">complete</span>(<span class="dt">ip =</span> <span class="kw">unique</span>(ip), <span class="dt">severity =</span> sev) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb17-6" title="6"><span class="st"> </span><span class="kw">mutate</span>(<span class="dt">severity =</span> <span class="kw">factor</span>(severity, <span class="dt">levels =</span> sev)) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb17-7" title="7"><span class="st"> </span><span class="kw">arrange</span>(ip) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb17-8" title="8"><span class="st"> </span><span class="kw">mutate</span>(<span class="dt">ip =</span> <span class="kw">factor</span>(ip, <span class="dt">levels =</span> <span class="kw">rev</span>(<span class="kw">unique</span>(ip)))) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb17-9" title="9"><span class="st"> </span><span class="kw">ggplot</span>(<span class="kw">aes</span>(severity, ip, <span class="dt">fill=</span>n)) <span class="op">+</span></a>
<a class="sourceLine" id="cb17-10" title="10"><span class="st"> </span><span class="kw">geom_tile</span>(<span class="dt">color =</span> <span class="st">&quot;#b2b2b2&quot;</span>, <span class="dt">size =</span> <span class="fl">0.125</span>) <span class="op">+</span></a>
<a class="sourceLine" id="cb17-11" title="11"><span class="st"> </span><span class="kw">scale_x_discrete</span>(<span class="dt">name =</span> <span class="ot">NULL</span>, <span class="dt">expand =</span> <span class="kw">c</span>(<span class="dv">0</span>,<span class="fl">0.1</span>), <span class="dt">position =</span> <span class="st">&quot;top&quot;</span>) <span class="op">+</span></a>
<a class="sourceLine" id="cb17-12" title="12"><span class="st"> </span><span class="kw">scale_y_discrete</span>(<span class="dt">name =</span> <span class="ot">NULL</span>, <span class="dt">expand =</span> <span class="kw">c</span>(<span class="dv">0</span>,<span class="dv">0</span>)) <span class="op">+</span></a>
<a class="sourceLine" id="cb17-13" title="13"><span class="st"> </span>viridis<span class="op">::</span><span class="kw">scale_fill_viridis</span>(</a>
<a class="sourceLine" id="cb17-14" title="14"> <span class="dt">name =</span> <span class="st">&quot;# Tests&quot;</span>, <span class="dt">option =</span> <span class="st">&quot;cividis&quot;</span>, <span class="dt">na.value =</span> ft_cols<span class="op">$</span>gray</a>
<a class="sourceLine" id="cb17-15" title="15"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb17-16" title="16"><span class="st"> </span><span class="kw">labs</span>(</a>
<a class="sourceLine" id="cb17-17" title="17"> <span class="dt">title =</span> <span class="st">&quot;CRAN Mirror SSL Test Summary Findings by Severity&quot;</span></a>
<a class="sourceLine" id="cb17-18" title="18"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb17-19" title="19"><span class="st"> </span><span class="kw">theme_ft_rc</span>(<span class="dt">grid=</span><span class="st">&quot;&quot;</span>) <span class="op">+</span></a>
<a class="sourceLine" id="cb17-20" title="20"><span class="st"> </span><span class="kw">theme</span>(<span class="dt">axis.text.y =</span> <span class="kw">element_text</span>(<span class="dt">size =</span> <span class="dv">8</span>, <span class="dt">family =</span> <span class="st">&quot;mono&quot;</span>)) -&gt;<span class="st"> </span>gg</a>
<a class="sourceLine" id="cb17-21" title="21"></a>
<a class="sourceLine" id="cb17-22" title="22"><span class="co"># We&#39;re going to move the title vs have too wide of a plot</span></a>
<a class="sourceLine" id="cb17-23" title="23"></a>
<a class="sourceLine" id="cb17-24" title="24">gb &lt;-<span class="st"> </span>ggplot2<span class="op">::</span><span class="kw">ggplotGrob</span>(gg)</a>
<a class="sourceLine" id="cb17-25" title="25">gb<span class="op">$</span>layout<span class="op">$</span>l[gb<span class="op">$</span>layout<span class="op">$</span>name <span class="op">%in%</span><span class="st"> &quot;title&quot;</span>] &lt;-<span class="st"> </span><span class="dv">2</span></a>
<a class="sourceLine" id="cb17-26" title="26"></a>
<a class="sourceLine" id="cb17-27" title="27">grid<span class="op">::</span><span class="kw">grid.newpage</span>()</a>
<a class="sourceLine" id="cb17-28" title="28">grid<span class="op">::</span><span class="kw">grid.draw</span>(gb)</a></code></pre></div>
<p><img src="data:image/png;base64,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pUsQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQwAjAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAQB4SwACQhyeVLkEAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEMAAwBiAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACeUgAA0AenlS6BAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhDAAMAYgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQjkIQEMAHl4UukSBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAADAGMAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIJCHBDAA5OFJpUsQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQwAjAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAQB4SwACQhyeVLkEAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEMAAwBiAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACeUgAA0AenlS6BAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhDAAMAYgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQjkIQEMAHl4UukSBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAADAGMAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIJCHBDAA5OFJpUsQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQwAjAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAQB4SwACQhyeVLkEAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEMAAwBiAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACeUgAA0AenlS6BAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhDAAMAYgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQjkIQEMAHl4UukSBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAADAGMAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIJCHBDAA5OFJpUsQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQwAjAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAQB4SwACQhyeVLkEAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEMAAwBiAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACeUgAA0AenlS6BAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhDAAMAYgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQjkIQEMAHl4UukSBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAADAGMAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIJCHBDAA5OFJpUsQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQwAjAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAQB4SwACQhyeVLkEAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEMAAw
</div>
<div id="web-server-headers" class="section level2">
<h2>Web server headers</h2>
<div class="sourceCode" id="cb18"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb18-1" title="1"><span class="kw">map_df</span>(mir_dat, <span class="op">~</span>{</a>
<a class="sourceLine" id="cb18-2" title="2"></a>
<a class="sourceLine" id="cb18-3" title="3"> <span class="cf">if</span> (<span class="kw">length</span>(.x<span class="op">$</span>head<span class="op">$</span>headers) <span class="op">==</span><span class="st"> </span><span class="dv">0</span>) <span class="kw">return</span>(<span class="ot">NULL</span>)</a>
<a class="sourceLine" id="cb18-4" title="4"></a>
<a class="sourceLine" id="cb18-5" title="5"> host &lt;-<span class="st"> </span>.x<span class="op">$</span>host</a>
<a class="sourceLine" id="cb18-6" title="6"></a>
<a class="sourceLine" id="cb18-7" title="7"> <span class="kw">flatten_df</span>(.x<span class="op">$</span>head<span class="op">$</span>headers) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb18-8" title="8"><span class="st"> </span><span class="kw">gather</span>(name, value) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb18-9" title="9"><span class="st"> </span><span class="kw">mutate</span>(<span class="dt">host =</span> host)</a>
<a class="sourceLine" id="cb18-10" title="10"></a>
<a class="sourceLine" id="cb18-11" title="11">}) -&gt;<span class="st"> </span>hdrs</a>
<a class="sourceLine" id="cb18-12" title="12"></a>
<a class="sourceLine" id="cb18-13" title="13"><span class="kw">count</span>(hdrs, name, <span class="dt">sort=</span><span class="ot">TRUE</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb18-14" title="14"><span class="st"> </span><span class="kw">head</span>(<span class="kw">nrow</span>(.))</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="left">name</th>
<th align="right">n</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">content-type</td>
<td align="right">79</td>
</tr>
<tr class="even">
<td align="left">date</td>
<td align="right">79</td>
</tr>
<tr class="odd">
<td align="left">server</td>
<td align="right">79</td>
</tr>
<tr class="even">
<td align="left">last-modified</td>
<td align="right">72</td>
</tr>
<tr class="odd">
<td align="left">content-length</td>
<td align="right">67</td>
</tr>
<tr class="even">
<td align="left">accept-ranges</td>
<td align="right">65</td>
</tr>
<tr class="odd">
<td align="left">etag</td>
<td align="right">65</td>
</tr>
<tr class="even">
<td align="left">content-encoding</td>
<td align="right">38</td>
</tr>
<tr class="odd">
<td align="left">connection</td>
<td align="right">28</td>
</tr>
<tr class="even">
<td align="left">vary</td>
<td align="right">28</td>
</tr>
<tr class="odd">
<td align="left">strict-transport-security</td>
<td align="right">13</td>
</tr>
<tr class="even">
<td align="left">x-frame-options</td>
<td align="right">8</td>
</tr>
<tr class="odd">
<td align="left">x-content-type-options</td>
<td align="right">7</td>
</tr>
<tr class="even">
<td align="left">cache-control</td>
<td align="right">4</td>
</tr>
<tr class="odd">
<td align="left">expires</td>
<td align="right">3</td>
</tr>
<tr class="even">
<td align="left">x-xss-protection</td>
<td align="right">3</td>
</tr>
<tr class="odd">
<td align="left">cf-ray</td>
<td align="right">2</td>
</tr>
<tr class="even">
<td align="left">expect-ct</td>
<td align="right">2</td>
</tr>
<tr class="odd">
<td align="left">set-cookie</td>
<td align="right">2</td>
</tr>
<tr class="even">
<td align="left">via</td>
<td align="right">2</td>
</tr>
<tr class="odd">
<td align="left">ms-author-via</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">pragma</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">referrer-policy</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">upgrade</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">x-amz-cf-id</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">x-cache</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">x-permitted-cross-domain</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">x-powered-by</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">x-robots-tag</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">x-tuna-mirror-id</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">x-ua-compatible</td>
<td align="right">1</td>
</tr>
</tbody>
</table>
</div>
<div id="security-headers" class="section level3">
<h3>‘Security’ Headers</h3>
<div class="sourceCode" id="cb19"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb19-1" title="1"><span class="kw">c</span>(</a>
<a class="sourceLine" id="cb19-2" title="2"> <span class="st">&quot;content-security-policy&quot;</span>, <span class="st">&quot;x-frame-options&quot;</span>, <span class="st">&quot;x-xss-protection&quot;</span>,</a>
<a class="sourceLine" id="cb19-3" title="3"> <span class="st">&quot;x-content-type-options&quot;</span>, <span class="st">&quot;strict-transport-security&quot;</span>, <span class="st">&quot;referrer-policy&quot;</span></a>
<a class="sourceLine" id="cb19-4" title="4">) -&gt;<span class="st"> </span>secure_headers</a>
<a class="sourceLine" id="cb19-5" title="5"></a>
<a class="sourceLine" id="cb19-6" title="6"><span class="kw">count</span>(hdrs, name, <span class="dt">sort=</span><span class="ot">TRUE</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb19-7" title="7"><span class="st"> </span><span class="kw">filter</span>(name <span class="op">%in%</span><span class="st"> </span>secure_headers)</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="left">name</th>
<th align="right">n</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">strict-transport-security</td>
<td align="right">13</td>
</tr>
<tr class="even">
<td align="left">x-frame-options</td>
<td align="right">8</td>
</tr>
<tr class="odd">
<td align="left">x-content-type-options</td>
<td align="right">7</td>
</tr>
<tr class="even">
<td align="left">x-xss-protection</td>
<td align="right">3</td>
</tr>
<tr class="odd">
<td align="left">referrer-policy</td>
<td align="right">1</td>
</tr>
</tbody>
</table>
</div>
<div class="sourceCode" id="cb20"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb20-1" title="1"><span class="kw">filter</span>(hdrs, name <span class="op">%in%</span><span class="st"> </span>secure_headers) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb20-2" title="2"><span class="st"> </span><span class="kw">count</span>(host, <span class="dt">sort =</span> <span class="ot">TRUE</span>)</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="left">host</th>
<th align="right">n</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">cran.csiro.au</td>
<td align="right">5</td>
</tr>
<tr class="even">
<td align="left">fourdots.com</td>
<td align="right">3</td>
</tr>
<tr class="odd">
<td align="left">ftp.gwdg.de</td>
<td align="right">3</td>
</tr>
<tr class="even">
<td align="left">ftp.uni-sofia.bg</td>
<td align="right">3</td>
</tr>
<tr class="odd">
<td align="left">ftp.yzu.edu.tw</td>
<td align="right">3</td>
</tr>
<tr class="even">
<td align="left">www.freestatistics.org</td>
<td align="right">3</td>
</tr>
<tr class="odd">
<td align="left">mirrors.nics.utk.edu</td>
<td align="right">2</td>
</tr>
<tr class="even">
<td align="left">vps.fmvz.usp.br</td>
<td align="right">2</td>
</tr>
<tr class="odd">
<td align="left">cran.case.edu</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">cran.cnr.berkeley.edu</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">cran.hafro.is</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">cran.ncc.metu.edu.tr</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">cran.stat.upd.edu.ph</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">mirror.cedia.org.ec</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">mirrors.tongji.edu.cn</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">mirrors.tuna.tsinghua.edu.cn</td>
<td align="right">1</td>
</tr>
</tbody>
</table>
</div>
<div class="sourceCode" id="cb21"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb21-1" title="1"><span class="kw">filter</span>(hdrs, host <span class="op">==</span><span class="st"> &quot;cran.csiro.au&quot;</span>, name <span class="op">%in%</span><span class="st"> </span>secure_headers)</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="left">name</th>
<th align="left">value</th>
<th align="left">host</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">x-content-type-options</td>
<td align="left">nosniff</td>
<td align="left">cran.csiro.au</td>
</tr>
<tr class="even">
<td align="left">x-frame-options</td>
<td align="left">SAMEORIGIN</td>
<td align="left">cran.csiro.au</td>
</tr>
<tr class="odd">
<td align="left">x-xss-protection</td>
<td align="left">1; mode=block</td>
<td align="left">cran.csiro.au</td>
</tr>
<tr class="even">
<td align="left">referrer-policy</td>
<td align="left">strict-origin-when-cross-origin</td>
<td align="left">cran.csiro.au</td>
</tr>
<tr class="odd">
<td align="left">strict-transport-security</td>
<td align="left">max-age=15768000; includeSubdomains;</td>
<td align="left">cran.csiro.au</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="server-types" class="section level3">
<h3>‘Server’ Types</h3>
<div class="sourceCode" id="cb22"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb22-1" title="1"><span class="kw">filter</span>(hdrs, name <span class="op">==</span><span class="st"> &quot;server&quot;</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb22-2" title="2"><span class="st"> </span><span class="kw">separate</span>(</a>
<a class="sourceLine" id="cb22-3" title="3"> value, <span class="kw">c</span>(<span class="st">&quot;kind&quot;</span>, <span class="st">&quot;version&quot;</span>), <span class="dt">sep=</span><span class="st">&quot;/&quot;</span>, <span class="dt">fill=</span><span class="st">&quot;right&quot;</span>, <span class="dt">extra=</span><span class="st">&quot;merge&quot;</span></a>
<a class="sourceLine" id="cb22-4" title="4"> ) -&gt;<span class="st"> </span>svr</a>
<a class="sourceLine" id="cb22-5" title="5"></a>
<a class="sourceLine" id="cb22-6" title="6"><span class="kw">count</span>(svr, kind, <span class="dt">sort=</span><span class="ot">TRUE</span>)</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="left">kind</th>
<th align="right">n</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">Apache</td>
<td align="right">57</td>
</tr>
<tr class="even">
<td align="left">nginx</td>
<td align="right">15</td>
</tr>
<tr class="odd">
<td align="left">cloudflare</td>
<td align="right">2</td>
</tr>
<tr class="even">
<td align="left">CSIRO</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">Hiawatha v10.8.4</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">High Performance 8bit Web Server</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">none</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">openresty</td>
<td align="right">1</td>
</tr>
</tbody>
</table>
</div>
<div id="apache" class="section level4">
<h4>apache</h4>
<div class="sourceCode" id="cb23"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb23-1" title="1"><span class="kw">apache_httpd_version_history</span>() <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb23-2" title="2"><span class="st"> </span><span class="kw">arrange</span>(rls_date) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb23-3" title="3"><span class="st"> </span><span class="kw">mutate</span>(</a>
<a class="sourceLine" id="cb23-4" title="4"> <span class="dt">vers =</span> <span class="kw">factor</span>(<span class="kw">as.character</span>(vers), <span class="dt">levels =</span> <span class="kw">as.character</span>(vers))</a>
<a class="sourceLine" id="cb23-5" title="5"> ) -&gt;<span class="st"> </span>apa_all</a>
<a class="sourceLine" id="cb23-6" title="6"></a>
<a class="sourceLine" id="cb23-7" title="7"><span class="kw">filter</span>(svr, kind <span class="op">==</span><span class="st"> &quot;Apache&quot;</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb23-8" title="8"><span class="st"> </span><span class="kw">filter</span>(<span class="op">!</span><span class="kw">is.na</span>(version)) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb23-9" title="9"><span class="st"> </span><span class="kw">mutate</span>(<span class="dt">version =</span> <span class="kw">stri_replace_all_regex</span>(version, <span class="st">&quot; .*$&quot;</span>, <span class="st">&quot;&quot;</span>)) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb23-10" title="10"><span class="st"> </span><span class="kw">count</span>(version) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb23-11" title="11"><span class="st"> </span><span class="kw">separate</span>(version, <span class="kw">c</span>(<span class="st">&quot;maj&quot;</span>, <span class="st">&quot;min&quot;</span>, <span class="st">&quot;pat&quot;</span>), <span class="dt">sep=</span><span class="st">&quot;</span><span class="ch">\\</span><span class="st">.&quot;</span>, <span class="dt">convert =</span> <span class="ot">TRUE</span>, <span class="dt">fill =</span> <span class="st">&quot;right&quot;</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb23-12" title="12"><span class="st"> </span><span class="kw">mutate</span>(<span class="dt">pat =</span> <span class="kw">ifelse</span>(<span class="kw">is.na</span>(pat), <span class="dv">1</span>, pat)) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb23-13" title="13"><span class="st"> </span><span class="kw">mutate</span>(<span class="dt">v =</span> <span class="kw">sprintf</span>(<span class="st">&quot;%s.%s.%s&quot;</span>, maj, min, pat)) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb23-14" title="14"><span class="st"> </span><span class="kw">mutate</span>(<span class="dt">v =</span> <span class="kw">factor</span>(v, <span class="dt">levels =</span> apa_all<span class="op">$</span>vers)) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb23-15" title="15"><span class="st"> </span><span class="kw">arrange</span>(v) -&gt;<span class="st"> </span>apa_vers</a>
<a class="sourceLine" id="cb23-16" title="16"></a>
<a class="sourceLine" id="cb23-17" title="17"><span class="kw">filter</span>(apa_all, vers <span class="op">%in%</span><span class="st"> </span>apa_vers<span class="op">$</span>v) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb23-18" title="18"><span class="st"> </span><span class="kw">arrange</span>(rls_date) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb23-19" title="19"><span class="st"> </span><span class="kw">group_by</span>(rls_year) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb23-20" title="20"><span class="st"> </span><span class="kw">slice</span>(<span class="dv">1</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb23-21" title="21"><span class="st"> </span><span class="kw">ungroup</span>() <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb23-22" title="22"><span class="st"> </span><span class="kw">arrange</span>(rls_date) -&gt;<span class="st"> </span>apa_yrs</a></code></pre></div>
<div class="sourceCode" id="cb24"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb24-1" title="1"><span class="kw">ggplot</span>() <span class="op">+</span></a>
<a class="sourceLine" id="cb24-2" title="2"><span class="st"> </span><span class="kw">geom_blank</span>(</a>
<a class="sourceLine" id="cb24-3" title="3"> <span class="dt">data =</span> apa_vers, <span class="kw">aes</span>(v, n)</a>
<a class="sourceLine" id="cb24-4" title="4"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb24-5" title="5"><span class="st"> </span><span class="kw">geom_segment</span>(</a>
<a class="sourceLine" id="cb24-6" title="6"> <span class="dt">data =</span> apa_yrs, <span class="kw">aes</span>(vers, <span class="dv">0</span>, <span class="dt">xend=</span>vers, <span class="dt">yend=</span><span class="ot">Inf</span>),</a>
<a class="sourceLine" id="cb24-7" title="7"> <span class="dt">linetype =</span> <span class="st">&quot;dotted&quot;</span>, <span class="dt">size =</span> <span class="fl">0.25</span>, <span class="dt">color =</span> <span class="st">&quot;white&quot;</span></a>
<a class="sourceLine" id="cb24-8" title="8"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb24-9" title="9"><span class="st"> </span><span class="kw">geom_segment</span>(</a>
<a class="sourceLine" id="cb24-10" title="10"> <span class="dt">data =</span> apa_vers, <span class="kw">aes</span>(v, n, <span class="dt">xend=</span>v, <span class="dt">yend=</span><span class="dv">0</span>),</a>
<a class="sourceLine" id="cb24-11" title="11"> <span class="dt">color =</span> ft_cols<span class="op">$</span>gray, <span class="dt">size =</span> <span class="dv">8</span></a>
<a class="sourceLine" id="cb24-12" title="12"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb24-13" title="13"><span class="st"> </span><span class="kw">geom_label</span>(</a>
<a class="sourceLine" id="cb24-14" title="14"> <span class="dt">data =</span> apa_yrs, <span class="kw">aes</span>(vers, <span class="ot">Inf</span>, <span class="dt">label =</span> rls_year),</a>
<a class="sourceLine" id="cb24-15" title="15"> <span class="dt">family =</span> font_rc, <span class="dt">color =</span> <span class="st">&quot;white&quot;</span>, <span class="dt">fill =</span> <span class="st">&quot;#262a31&quot;</span>, <span class="dt">size =</span> <span class="dv">4</span>,</a>
<a class="sourceLine" id="cb24-16" title="16"> <span class="dt">vjust =</span> <span class="dv">1</span>, <span class="dt">hjust =</span> <span class="dv">0</span>, <span class="dt">nudge_x =</span> <span class="fl">0.01</span>, <span class="dt">label.size =</span> <span class="dv">0</span></a>
<a class="sourceLine" id="cb24-17" title="17"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb24-18" title="18"><span class="st"> </span><span class="kw">scale_y_comma</span>(<span class="dt">limits =</span> <span class="kw">c</span>(<span class="dv">0</span>, <span class="dv">15</span>)) <span class="op">+</span></a>
<a class="sourceLine" id="cb24-19" title="19"><span class="st"> </span><span class="kw">labs</span>(</a>
<a class="sourceLine" id="cb24-20" title="20"> <span class="dt">x =</span> <span class="st">&quot;Apache Version #&quot;</span>, <span class="dt">y =</span> <span class="st">&quot;# Servers&quot;</span>,</a>
<a class="sourceLine" id="cb24-21" title="21"> <span class="dt">title =</span> <span class="st">&quot;CRAN Mirrors Apache Version History&quot;</span></a>
<a class="sourceLine" id="cb24-22" title="22"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb24-23" title="23"><span class="st"> </span><span class="kw">theme_ft_rc</span>(<span class="dt">grid=</span><span class="st">&quot;Y&quot;</span>) <span class="op">+</span></a>
<a class="sourceLine" id="cb24-24" title="24"><span class="st"> </span><span class="kw">theme</span>(<span class="dt">axis.text.x =</span> <span class="kw">element_text</span>(<span class="dt">family =</span> <span class="st">&quot;mono&quot;</span>, <span class="dt">size =</span> <span class="dv">8</span>, <span class="dt">color =</span> <span class="st">&quot;white&quot;</span>))</a></code></pre></div>
<p><img src="data:image/png;base64,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AQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQMClAAFYLuFohgACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggQgMU1gAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgi4FCAAyyUczRBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABArC4BhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABlwIEYLmEoxkCCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggQAAW1wACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg4FKAACyXcDRDAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBAjA4hpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBFwKEIDlEo5mCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAABWFwDCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggIBLAQKwXMLRDAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBAgAItrAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBwKUAAlks4miGAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACBGBxDSCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACLgUIwHIJRzMEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAgAAsrgEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAwKUAAVgu4WiGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCBCAxTWAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCLgUIADLJRzNEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAECsLgGEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGXAgRguYSjGQIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBAABbXAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCDgUoAALJdwNEMAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEECMDiGkAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEXAoQgOUSjmYIIIAAAggg
</div>
<div id="nginx" class="section level4">
<h4>nginx</h4>
<div class="sourceCode" id="cb25"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb25-1" title="1"><span class="kw">nginx_version_history</span>() <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb25-2" title="2"><span class="st"> </span><span class="kw">arrange</span>(rls_date) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb25-3" title="3"><span class="st"> </span><span class="kw">mutate</span>(</a>
<a class="sourceLine" id="cb25-4" title="4"> <span class="dt">vers =</span> <span class="kw">factor</span>(<span class="kw">as.character</span>(vers), <span class="dt">levels =</span> <span class="kw">as.character</span>(vers))</a>
<a class="sourceLine" id="cb25-5" title="5"> ) -&gt;<span class="st"> </span>ngx_all</a>
<a class="sourceLine" id="cb25-6" title="6"></a>
<a class="sourceLine" id="cb25-7" title="7"><span class="kw">filter</span>(svr, kind <span class="op">==</span><span class="st"> &quot;nginx&quot;</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb25-8" title="8"><span class="st"> </span><span class="kw">filter</span>(<span class="op">!</span><span class="kw">is.na</span>(version)) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb25-9" title="9"><span class="st"> </span><span class="kw">mutate</span>(<span class="dt">version =</span> <span class="kw">stri_replace_all_regex</span>(version, <span class="st">&quot; .*$&quot;</span>, <span class="st">&quot;&quot;</span>)) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb25-10" title="10"><span class="st"> </span><span class="kw">count</span>(version) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb25-11" title="11"><span class="st"> </span><span class="kw">separate</span>(version, <span class="kw">c</span>(<span class="st">&quot;maj&quot;</span>, <span class="st">&quot;min&quot;</span>, <span class="st">&quot;pat&quot;</span>), <span class="dt">sep=</span><span class="st">&quot;</span><span class="ch">\\</span><span class="st">.&quot;</span>, <span class="dt">convert =</span> <span class="ot">TRUE</span>, <span class="dt">fill =</span> <span class="st">&quot;right&quot;</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb25-12" title="12"><span class="st"> </span><span class="kw">mutate</span>(<span class="dt">v =</span> <span class="kw">sprintf</span>(<span class="st">&quot;%s.%s.%s&quot;</span>, maj, min, pat)) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb25-13" title="13"><span class="st"> </span><span class="kw">mutate</span>(<span class="dt">v =</span> <span class="kw">factor</span>(v, <span class="dt">levels =</span> ngx_all<span class="op">$</span>vers)) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb25-14" title="14"><span class="st"> </span><span class="kw">arrange</span>(v) -&gt;<span class="st"> </span>ngx_vers</a>
<a class="sourceLine" id="cb25-15" title="15"></a>
<a class="sourceLine" id="cb25-16" title="16"><span class="kw">filter</span>(ngx_all, vers <span class="op">%in%</span><span class="st"> </span>ngx_vers<span class="op">$</span>v) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb25-17" title="17"><span class="st"> </span><span class="kw">arrange</span>(rls_date) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb25-18" title="18"><span class="st"> </span><span class="kw">group_by</span>(rls_year) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb25-19" title="19"><span class="st"> </span><span class="kw">slice</span>(<span class="dv">1</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb25-20" title="20"><span class="st"> </span><span class="kw">ungroup</span>() <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb25-21" title="21"><span class="st"> </span><span class="kw">arrange</span>(rls_date) -&gt;<span class="st"> </span>ngx_yrs</a></code></pre></div>
<div class="sourceCode" id="cb26"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb26-1" title="1"><span class="kw">ggplot</span>() <span class="op">+</span></a>
<a class="sourceLine" id="cb26-2" title="2"><span class="st"> </span><span class="kw">geom_blank</span>(</a>
<a class="sourceLine" id="cb26-3" title="3"> <span class="dt">data =</span> ngx_vers, <span class="kw">aes</span>(v, n)</a>
<a class="sourceLine" id="cb26-4" title="4"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb26-5" title="5"><span class="st"> </span><span class="kw">geom_segment</span>(</a>
<a class="sourceLine" id="cb26-6" title="6"> <span class="dt">data =</span> ngx_yrs, <span class="kw">aes</span>(vers, <span class="dv">0</span>, <span class="dt">xend=</span>vers, <span class="dt">yend=</span><span class="ot">Inf</span>),</a>
<a class="sourceLine" id="cb26-7" title="7"> <span class="dt">linetype =</span> <span class="st">&quot;dotted&quot;</span>, <span class="dt">size =</span> <span class="fl">0.25</span>, <span class="dt">color =</span> <span class="st">&quot;white&quot;</span></a>
<a class="sourceLine" id="cb26-8" title="8"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb26-9" title="9"><span class="st"> </span><span class="kw">geom_segment</span>(</a>
<a class="sourceLine" id="cb26-10" title="10"> <span class="dt">data =</span> ngx_vers, <span class="kw">aes</span>(v, n, <span class="dt">xend=</span>v, <span class="dt">yend=</span><span class="dv">0</span>),</a>
<a class="sourceLine" id="cb26-11" title="11"> <span class="dt">color =</span> ft_cols<span class="op">$</span>gray, <span class="dt">size =</span> <span class="dv">8</span></a>
<a class="sourceLine" id="cb26-12" title="12"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb26-13" title="13"><span class="st"> </span><span class="kw">geom_label</span>(</a>
<a class="sourceLine" id="cb26-14" title="14"> <span class="dt">data =</span> ngx_yrs, <span class="kw">aes</span>(vers, <span class="ot">Inf</span>, <span class="dt">label =</span> rls_year),</a>
<a class="sourceLine" id="cb26-15" title="15"> <span class="dt">family =</span> font_rc, <span class="dt">color =</span> <span class="st">&quot;white&quot;</span>, <span class="dt">fill =</span> <span class="st">&quot;#262a31&quot;</span>, <span class="dt">size =</span> <span class="dv">4</span>,</a>
<a class="sourceLine" id="cb26-16" title="16"> <span class="dt">vjust =</span> <span class="dv">1</span>, <span class="dt">hjust =</span> <span class="dv">0</span>, <span class="dt">nudge_x =</span> <span class="fl">0.01</span>, <span class="dt">label.size =</span> <span class="dv">0</span></a>
<a class="sourceLine" id="cb26-17" title="17"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb26-18" title="18"><span class="st"> </span><span class="kw">scale_y_comma</span>(<span class="dt">limits =</span> <span class="kw">c</span>(<span class="dv">0</span>, <span class="dv">15</span>)) <span class="op">+</span></a>
<a class="sourceLine" id="cb26-19" title="19"><span class="st"> </span><span class="kw">labs</span>(</a>
<a class="sourceLine" id="cb26-20" title="20"> <span class="dt">x =</span> <span class="st">&quot;nginx Version #&quot;</span>, <span class="dt">y =</span> <span class="st">&quot;# Servers&quot;</span>,</a>
<a class="sourceLine" id="cb26-21" title="21"> <span class="dt">title =</span> <span class="st">&quot;CRAN Mirrors nginx Version History&quot;</span></a>
<a class="sourceLine" id="cb26-22" title="22"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb26-23" title="23"><span class="st"> </span><span class="kw">theme_ft_rc</span>(<span class="dt">grid=</span><span class="st">&quot;Y&quot;</span>) <span class="op">+</span></a>
<a class="sourceLine" id="cb26-24" title="24"><span class="st"> </span><span class="kw">theme</span>(<span class="dt">axis.text.x =</span> <span class="kw">element_text</span>(<span class="dt">family =</span> <span class="st">&quot;mono&quot;</span>, <span class="dt">color =</span> <span class="st">&quot;white&quot;</span>))</a></code></pre></div>
<p><img src="data:image/png;base64,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QAABBBBAAAEEEEAAAQQQcKEAFQAuvKicEgIIIIAAAggggAACCCCAAAIIIIAAAggggAACVABwDyCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg4EIBKgBceFE5JQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEqADgHkAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAwIUCVAC48KJySggggAACCCCAAAIIIIAAAggggAACCCCAAAIIUAHAPYAAAggggAACCCCAAAIIIIAAAggggAACCCCAgAsFqABw4UXllBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQoAKAewABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAARcKUAHgwovKKSGAAAIIIIAAAggggAACCCCAAAIIIIAAAgggQAUA9wACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAi4UoALAhReVU0IAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAgAoA7gEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBFwoQAWACy8qp4QAAggggAACCCCAAAIIIIAAAggggAACCCCAABUA3AMIIIAAAggggAACCCCAAAIIIIAAAggggAACCLhQgAoAF15UTgkBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAASoAuAcQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEHChABUALryonBICCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAlQAcA8ggAACCCCAAAIIIIAAAggggAACCCCAAAIIIOBCASoAXHhROSUEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBKgA4B5AAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQMCFAlQAuPCickoIIIAAAggggAACCCCAAAIIIIAAAggggAACCFABwD2AAAIIIIAAAggggAACCCCAAAIIIIAAAggggIALBagAcOFF5ZQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEKACgHsAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEXClAB4MKLyikhgAACCCCAAAIIIIAAAggggAACCCCAAAIIIEAFAPcAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIuFKACwIUXlVNCAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQIAKAO4BBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQRcKEAFgAsvKqeEAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAVANwDCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgi4UIAKABdeVE4JAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEqALgHEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBwoQAVAC68qJwSAggggAACCCCAAAIIIIAAAggggAACCCCAAAJUAHAPIIAAAggggAACCCCAAAIIIIAAAggggAACCCDgQgEqAFx4UTklBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQSoAOAeQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEDAhQJUALjwonJKCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghQAcA9
</div>
</div>
<div id="what-else-do-cran-mirrors-run" class="section level3">
<h3>What else do CRAN mirrors run?</h3>
<div class="sourceCode" id="cb27"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb27-1" title="1">cran_mirror_other_things &lt;-<span class="st"> </span><span class="kw">readRDS</span>(here<span class="op">::</span><span class="kw">here</span>(<span class="st">&quot;data/cran-mirror-other-things.rds&quot;</span>))</a></code></pre></div>
<div id="a-look-by-port" class="section level4">
<h4>A look by port</h4>
<div class="sourceCode" id="cb28"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb28-1" title="1"><span class="kw">distinct</span>(cran_mirror_other_things, ip, port) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb28-2" title="2"><span class="st"> </span><span class="kw">count</span>(ip, <span class="dt">sort =</span> <span class="ot">TRUE</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb28-3" title="3"><span class="st"> </span><span class="kw">head</span>(<span class="dv">20</span>)</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="left">ip</th>
<th align="right">n</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">104.25.94.23</td>
<td align="right">8</td>
</tr>
<tr class="even">
<td align="left">143.107.10.17</td>
<td align="right">7</td>
</tr>
<tr class="odd">
<td align="left">104.27.133.206</td>
<td align="right">5</td>
</tr>
<tr class="even">
<td align="left">137.208.57.37</td>
<td align="right">5</td>
</tr>
<tr class="odd">
<td align="left">192.75.96.254</td>
<td align="right">5</td>
</tr>
<tr class="even">
<td align="left">208.81.1.244</td>
<td align="right">5</td>
</tr>
<tr class="odd">
<td align="left">119.40.117.175</td>
<td align="right">4</td>
</tr>
<tr class="even">
<td align="left">130.225.254.116</td>
<td align="right">4</td>
</tr>
<tr class="odd">
<td align="left">133.24.248.17</td>
<td align="right">4</td>
</tr>
<tr class="even">
<td align="left">14.49.99.238</td>
<td align="right">4</td>
</tr>
<tr class="odd">
<td align="left">148.205.148.16</td>
<td align="right">4</td>
</tr>
<tr class="even">
<td align="left">190.64.49.124</td>
<td align="right">4</td>
</tr>
<tr class="odd">
<td align="left">194.214.26.146</td>
<td align="right">4</td>
</tr>
<tr class="even">
<td align="left">200.236.31.1</td>
<td align="right">4</td>
</tr>
<tr class="odd">
<td align="left">201.159.221.67</td>
<td align="right">4</td>
</tr>
<tr class="even">
<td align="left">202.90.159.172</td>
<td align="right">4</td>
</tr>
<tr class="odd">
<td align="left">217.31.202.63</td>
<td align="right">4</td>
</tr>
<tr class="even">
<td align="left">222.66.109.32</td>
<td align="right">4</td>
</tr>
<tr class="odd">
<td align="left">45.63.11.93</td>
<td align="right">4</td>
</tr>
<tr class="even">
<td align="left">62.44.96.11</td>
<td align="right">4</td>
</tr>
</tbody>
</table>
</div>
<div class="sourceCode" id="cb29"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb29-1" title="1"><span class="kw">distinct</span>(cran_mirror_other_things, ip, port) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb29-2" title="2"><span class="st"> </span><span class="kw">filter</span>(<span class="op">!</span>(port <span class="op">%in%</span><span class="st"> </span><span class="kw">c</span>(<span class="dv">21</span>, <span class="dv">80</span>, <span class="dv">443</span>))) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb29-3" title="3"><span class="st"> </span><span class="kw">count</span>(ip) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb29-4" title="4"><span class="st"> </span><span class="kw">count</span>(n) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb29-5" title="5"><span class="st"> </span><span class="kw">mutate</span>(<span class="dt">n =</span> <span class="kw">factor</span>(n)) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb29-6" title="6"><span class="st"> </span><span class="kw">ggplot</span>() <span class="op">+</span></a>
<a class="sourceLine" id="cb29-7" title="7"><span class="st"> </span><span class="kw">geom_segment</span>(</a>
<a class="sourceLine" id="cb29-8" title="8"> <span class="kw">aes</span>(n, nn, <span class="dt">xend =</span> n, <span class="dt">yend =</span> <span class="dv">0</span>), <span class="dt">size =</span> <span class="dv">10</span>, <span class="dt">color =</span> ft_cols<span class="op">$</span>gray</a>
<a class="sourceLine" id="cb29-9" title="9"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb29-10" title="10"><span class="st"> </span><span class="kw">scale_y_comma</span>() <span class="op">+</span></a>
<a class="sourceLine" id="cb29-11" title="11"><span class="st"> </span><span class="kw">labs</span>(</a>
<a class="sourceLine" id="cb29-12" title="12"> <span class="dt">x =</span> <span class="st">&quot;Total number of running services&quot;</span>, <span class="dt">y =</span> <span class="st">&quot;# hosts&quot;</span>,</a>
<a class="sourceLine" id="cb29-13" title="13"> <span class="dt">title =</span> <span class="st">&quot;How many other services do CRAN mirrors run?&quot;</span>,</a>
<a class="sourceLine" id="cb29-14" title="14"> <span class="dt">subtitle =</span> <span class="st">&quot;NOTE: Not counting 80/443/21&quot;</span></a>
<a class="sourceLine" id="cb29-15" title="15"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb29-16" title="16"><span class="st"> </span><span class="kw">theme_ft_rc</span>(<span class="dt">grid=</span><span class="st">&quot;Y&quot;</span>)</a></code></pre></div>
<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABIAAAAMACAYAAABcvxwMAAAEGWlDQ1BrQ0dDb2xvclNwYWNlR2VuZXJpY1JHQgAAOI2NVV1oHFUUPrtzZyMkzlNsNIV0qD8NJQ2TVjShtLp/3d02bpZJNtoi6GT27s6Yyc44M7v9oU9FUHwx6psUxL+3gCAo9Q/bPrQvlQol2tQgKD60+INQ6Ium65k7M5lpurHeZe58853vnnvuuWfvBei5qliWkRQBFpquLRcy4nOHj4g9K5CEh6AXBqFXUR0rXalMAjZPC3e1W99Dwntf2dXd/p+tt0YdFSBxH2Kz5qgLiI8B8KdVy3YBevqRHz/qWh72Yui3MUDEL3q44WPXw3M+fo1pZuQs4tOIBVVTaoiXEI/MxfhGDPsxsNZfoE1q66ro5aJim3XdoLFw72H+n23BaIXzbcOnz5mfPoTvYVz7KzUl5+FRxEuqkp9G/Ajia219thzg25abkRE/BpDc3pqvphHvRFys2weqvp+krbWKIX7nhDbzLOItiM8358pTwdirqpPFnMF2xLc1WvLyOwTAibpbmvHHcvttU57y5+XqNZrLe3lE/Pq8eUj2fXKfOe3pfOjzhJYtB/yll5SDFcSDiH+hRkH25+L+sdxKEAMZahrlSX8ukqMOWy/jXW2m6M9LDBc31B9LFuv6gVKg/0Szi3KAr1kGq1GMjU/aLbnq6/lRxc4XfJ98hTargX++DbMJBSiYMIe9Ck1YAxFkKEAG3xbYaKmDDgYyFK0UGYpfoWYXG+fAPPI6tJnNwb7ClP7IyF+D+bjOtCpkhz6CFrIa/I6sFtNl8auFXGMTP34sNwI/JhkgEtmDz14ySfaRcTIBInmKPE32kxyyE2Tv+thKbEVePDfW/byMM1Kmm0XdObS7oGD/MypMXFPXrCwOtoYjyyn7BV29/MZfsVzpLDdRtuIZnbpXzvlf+ev8MvYr/Gqk4H/kV/G3csdazLuyTMPsbFhzd1UabQbjFvDRmcWJxR3zcfHkVw9GfpbJmeev9F08WW8uDkaslwX6avlWGU6NRKz0g/SHtCy9J30o/ca9zX3Kfc19zn3BXQKRO8ud477hLnAfc1/G9mrzGlrfexZ5GLdn6ZZrrEohI2wVHhZywjbhUWEy8icMCGNCUdiBlq3r+xafL549HQ5jH+an+1y+LlYBifuxAvRN/lVVVOlwlCkdVm9NOL5BE4wkQ2SMlDZU97hX86EilU/lUmkQUztTE6mx1EEPh7OmdqBtAvv8HdWpbrJS6tJj3n0CWdM6busNzRV3S9KTYhqvNiqWmuroiKgYhshMjmhTh9ptWhsF7970j/SbMrsPE1suR5z7DMC+P/Hs+y7ijrQAlhyAgccjbhjPygfeBTjzhNqy28EdkUh8C+DU9+z2v/oyeH791OncxHOs5y2AtTc7nb/f73TWPkD/qwBnjX8BoJ98VQNcC+8AAEAASURBVHgB7J0FvBzV9ccvxD0h7kqMEIgrkODQYqVIcXcoUKGl/ddLKcWKFSjQAsWKF/cYMSQhQtwgnhAjCZCQ8L+/CfOYnZ2ZnbX39u1+z+ezb2euzb3fuTtv5sw55+7Wpn3XbwwCAQhAAAIQgAAEIAABCEAAAhCAAAQgULQEdi/akTEwCEAAAhCAAAQgAAEIQAACEIAABCAAAYcACiAmAgQgAAEIQAACEIAABCAAAQhAAAIQKHICKICK/AQzPAhAAAIQgAAEIAABCEAAAhCAAAQggAKIOQABCEAAAhCAAAQgAAEIQAACEIAABIqcAAqgIj/BDA8CEIAABCAAAQhAAAIQgAAEIAABCKAAYg5AAAIQgAAEIAABCEAAAhCAAAQgAIEiJ4ACqMhPMMODAAQgAAEIQAACEIAABCAAAQhAAAIogJgDEIAABCAAAQhAAAIQgAAEIAABCECgyAmgACryE8zwIAABCEAAAhCAAAQgAAEIQAACEIAACiDmAAQgAAEIQAACEIAABCAAAQhAAAIQKHICKICK/AQzPAhAAAIQgAAEIAABCEAAAhCAAAQggAKIOQABCEAAAhCAAAQgAAEIQAACEIAABIqcAAqgIj/BDA8CEIAABCAAAQhAAAIQgAAEIAABCKAAYg5AAAIQgAAEIAABCEAAAhCAAAQgAIEiJ4ACqMhPMMODAAQgAAEIQAACEIAABCAAAQhAAAIogJgDEIAABCAAAQhAAAIQgAAEIAABCECgyAmgACryE8zwIAABCEAAAhCAAAQgAAEIQAACEIAACiDmAAQgAAEIQAACEIAABCAAAQhAAAIQKHICKICK/AQzPAhAAAIQgAAEIAABCEAAAhCAAAQggAKIOQABCEAAAhCAAAQgAAEIQAACEIAABIqcAAqgIj/BDA8CEIAABCAAAQhAAAIQgAAEIAABCKAAYg5AAAIQgAAEIAABCEAAAhCAAAQgAIEiJ4ACqMhPMMODAAQgAAEIQAACEIAABCAAAQhAAAIogJgDEIAABCAAAQhAAAIQgAAEIAABCECgyAmgACryE8zwIAABCEAAAhCAAAQgAAEIQAACEIAACiDmAAQgAAEIQAACEIAABCAAAQhAAAIQKHICKICK/AQzPAhAAAIQgAAEIAABCEAAAhCAAAQggAKIOQABCEAAAhCAAAQgAAEIQAACEIAABIqcAAqgIj/BDA8CEIAABCAAAQhAAAIQgAAEIAABCKAAYg5AAAIQgAAEIAABCEAAAhCAAAQgAIEiJ4ACqMhPMMODAAQgAAEIQAACEIAABCAAAQhAAAIogJgDEIAABCAAAQhAAAIQgAAEIAABCECgyAmgACryE8zwIAABCEAAAhCAAAQgAAEIQAACEIAACiDmAAQgAAEIQAACEIAABCAAAQhAAAIQKHICKICK/AQzPAhAAAIQgAAEIAABCEAAAhCAAAQggAKIOQABCEAAAhCAAAQgAAEIQAACEIAABIqcAAqgIj/BDA8CEIAABCAAAQhAAAIQgAAEIAABCKAAYg5AAAIQgAAEIAABCEAAAhCAAAQgAIEiJ4ACqMhPMMODAAQgAAEIQAACEIAABCAAAQhAAAIogJgDEIAABCAAAQhAAAIQgAAEIAABCECgyAmgACryE8zwIAABCEAAAhCAAAQgAAEIQAACEIAACiDmAAQgAAEIQAACEIAABCAAAQhAAAIQKHICKICK/AQzPAhAAAIQgAAEIAABCEAAAhCAAAQggAKIOQABCEAAAhCAAAQgAAEIQAACEIAABIqcAAqgIj/BDA8CEIAABCAAAQhAAAIQgAAEIAABCKAAYg5AAAIQgAAEIAABCEAAAhCAAAQgAIEiJ4ACqMhPMMODAAQgAAEIQAACEIAABCAAAQhAAAIogJgDEIAABCAAAQhAAAIQgAAEIAABCECgyAmgACryE8zwIAABCEAAAhCAAAQgAAEIQAACEIAACiDmAAQgAAEIQAACEIAABCAAAQhAAAIQKHICKICK/AQzPAhAAAIQgAAEIAABCEAAAhCAAAQggAKIOQABCEAAAhCAAAQgAAEIQAACEIAABIqcAAqgIj/BDA8CEIAABCAAAQhAAAIQgAAEIAABCKAAYg5AAAIQgAAEIAABCEAAAhCAAAQgAIEiJ4ACqMhPMMODAAQgAAEIQAACEIAABCAAAQhAAAIogJgDEIAABCAAAQhAAAIQgAAEIAABCECgyAmgACryE8zwIAABCEAAAhCAAAQgAAEIQAACEIAACiDmAAQgAAEIQAACEIAABCAAAQhAAAIQKHICKICK/AQzPAhAAAIQgAAEIAABCEAAAhCAAAQggAKIOQABCEAAAhCAAAQgAAEIQAACEIAABIqcAAqgIj/BDA8CEIAABCAAAQhAAAIQgAAEIAABCKAAYg5AAAIQgAAEIAABCEAAAhCAAAQgAIEiJ4ACqMhPMMODAAQgAAEIQAACEIAABCAAAQhAAAIogJgDEIAABCAAAQhAAAIQgAAEIAABCECgyAmgACryE8zwIAABCEAAAhCAAAQgAAEIQAACEIAACiDmAAQgAAEIQAACEIAABCAAAQhAAAIQKHICKICK/AQzPAhAAAIQ
<p>Take a look at a few of them</p>
<div class="sourceCode" id="cb30"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb30-1" title="1"><span class="kw">distinct</span>(cran_mirror_other_things, ip, port) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb30-2" title="2"><span class="st"> </span><span class="kw">count</span>(port, <span class="dt">sort=</span><span class="ot">TRUE</span>)</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="right">port</th>
<th align="right">n</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="right">80</td>
<td align="right">75</td>
</tr>
<tr class="even">
<td align="right">443</td>
<td align="right">75</td>
</tr>
<tr class="odd">
<td align="right">21</td>
<td align="right">29</td>
</tr>
<tr class="even">
<td align="right">22</td>
<td align="right">18</td>
</tr>
<tr class="odd">
<td align="right">8080</td>
<td align="right">6</td>
</tr>
<tr class="even">
<td align="right">25</td>
<td align="right">5</td>
</tr>
<tr class="odd">
<td align="right">53</td>
<td align="right">2</td>
</tr>
<tr class="even">
<td align="right">2082</td>
<td align="right">2</td>
</tr>
<tr class="odd">
<td align="right">2086</td>
<td align="right">2</td>
</tr>
<tr class="even">
<td align="right">8000</td>
<td align="right">2</td>
</tr>
<tr class="odd">
<td align="right">8008</td>
<td align="right">2</td>
</tr>
<tr class="even">
<td align="right">8443</td>
<td align="right">2</td>
</tr>
<tr class="odd">
<td align="right">111</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="right">465</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="right">587</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="right">993</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="right">995</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="right">2083</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="right">2087</td>
<td align="right">1</td>
</tr>
</tbody>
</table>
</div>
<div class="sourceCode" id="cb31"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb31-1" title="1"><span class="kw">distinct</span>(cran_mirror_other_things, ip, port) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb31-2" title="2"><span class="st"> </span><span class="kw">filter</span>(ip <span class="op">==</span><span class="st"> &quot;104.25.94.23&quot;</span>)</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="left">ip</th>
<th align="right">port</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">104.25.94.23</td>
<td align="right">8443</td>
</tr>
<tr class="even">
<td align="left">104.25.94.23</td>
<td align="right">2082</td>
</tr>
<tr class="odd">
<td align="left">104.25.94.23</td>
<td align="right">2087</td>
</tr>
<tr class="even">
<td align="left">104.25.94.23</td>
<td align="right">8080</td>
</tr>
<tr class="odd">
<td align="left">104.25.94.23</td>
<td align="right">80</td>
</tr>
<tr class="even">
<td align="left">104.25.94.23</td>
<td align="right">2083</td>
</tr>
<tr class="odd">
<td align="left">104.25.94.23</td>
<td align="right">443</td>
</tr>
<tr class="even">
<td align="left">104.25.94.23</td>
<td align="right">2086</td>
</tr>
</tbody>
</table>
</div>
<div class="sourceCode" id="cb32"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb32-1" title="1"><span class="kw">distinct</span>(cran_mirror_other_things, ip, port) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb32-2" title="2"><span class="st"> </span><span class="kw">filter</span>(ip <span class="op">==</span><span class="st"> &quot;143.107.10.17&quot;</span>)</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="left">ip</th>
<th align="right">port</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">143.107.10.17</td>
<td align="right">993</td>
</tr>
<tr class="even">
<td align="left">143.107.10.17</td>
<td align="right">587</td>
</tr>
<tr class="odd">
<td align="left">143.107.10.17</td>
<td align="right">80</td>
</tr>
<tr class="even">
<td align="left">143.107.10.17</td>
<td align="right">443</td>
</tr>
<tr class="odd">
<td align="left">143.107.10.17</td>
<td align="right">465</td>
</tr>
<tr class="even">
<td align="left">143.107.10.17</td>
<td align="right">25</td>
</tr>
<tr class="odd">
<td align="left">143.107.10.17</td>
<td align="right">995</td>
</tr>
</tbody>
</table>
</div>
<div class="sourceCode" id="cb33"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb33-1" title="1"><span class="kw">distinct</span>(cran_mirror_other_things, ip, port) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb33-2" title="2"><span class="st"> </span><span class="kw">filter</span>(ip <span class="op">==</span><span class="st"> &quot;137.208.57.37&quot;</span>)</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="left">ip</th>
<th align="right">port</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">137.208.57.37</td>
<td align="right">443</td>
</tr>
<tr class="even">
<td align="left">137.208.57.37</td>
<td align="right">22</td>
</tr>
<tr class="odd">
<td align="left">137.208.57.37</td>
<td align="right">80</td>
</tr>
<tr class="even">
<td align="left">137.208.57.37</td>
<td align="right">21</td>
</tr>
<tr class="odd">
<td align="left">137.208.57.37</td>
<td align="right">8080</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="what-kinds-of-services-were-detected" class="section level4">
<h4>What kinds of services were detected?</h4>
<div class="sourceCode" id="cb34"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb34-1" title="1">cran_recog &lt;-<span class="st"> </span><span class="kw">readRDS</span>(here<span class="op">::</span><span class="kw">here</span>(<span class="st">&quot;data/cran-recog.rds&quot;</span>))</a>
<a class="sourceLine" id="cb34-2" title="2"></a>
<a class="sourceLine" id="cb34-3" title="3"><span class="kw">distinct</span>(cran_recog, ip, cpe) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb34-4" title="4"><span class="st"> </span><span class="kw">count</span>(cpe, <span class="dt">sort =</span> <span class="ot">TRUE</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb34-5" title="5"><span class="st"> </span><span class="kw">head</span>(<span class="dv">50</span>)</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="left">cpe</th>
<th align="right">n</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">cpe:/a:apache:http_server:-</td>
<td align="right">13</td>
</tr>
<tr class="even">
<td align="left">cpe:/o:debian:debian_linux:-</td>
<td align="right">13</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:apache:http_server:2.4.6</td>
<td align="right">11</td>
</tr>
<tr class="even">
<td align="left">cpe:/o:canonical:ubuntu_linux:-</td>
<td align="right">11</td>
</tr>
<tr class="odd">
<td align="left">cpe:/o:centos:centos:-</td>
<td align="right">9</td>
</tr>
<tr class="even">
<td align="left">cpe:/a:apache:http_server:2.4.25</td>
<td align="right">6</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:nginx:nginx:-</td>
<td align="right">6</td>
</tr>
<tr class="even">
<td align="left">cpe:/a:nginx:nginx:1.10.3</td>
<td align="right">6</td>
</tr>
<tr class="odd">
<td align="left">cpe:/o:redhat:linux:-</td>
<td align="right">5</td>
</tr>
<tr class="even">
<td align="left">cpe:/a:apache:http_server:2.2.15</td>
<td align="right">4</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:openbsd:openssh:7.4p1</td>
<td align="right">4</td>
</tr>
<tr class="even">
<td align="left">cpe:/o:debian:debian_linux:9.0</td>
<td align="right">4</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:apache:http_server:2.4.7</td>
<td align="right">3</td>
</tr>
<tr class="even">
<td align="left">cpe:/a:openbsd:openssh:6.7p1</td>
<td align="right">3</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:openbsd:openssh:7.4</td>
<td align="right">3</td>
</tr>
<tr class="even">
<td align="left">cpe:/a:apache:http_server:2.4.10</td>
<td align="right">2</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:apache:http_server:2.4.18</td>
<td align="right">2</td>
</tr>
<tr class="even">
<td align="left">cpe:/a:apache:http_server:2.4.29</td>
<td align="right">2</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:openbsd:openssh:7.6p1</td>
<td align="right">2</td>
</tr>
<tr class="even">
<td align="left">cpe:/o:debian:debian_linux:8.0</td>
<td align="right">2</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:apache:http_server:2.2.16</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">cpe:/a:apache:http_server:2.2.22</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:apache:http_server:2.2.3</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">cpe:/a:apache:http_server:2.2.32</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:apache:http_server:2.2.34</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">cpe:/a:apache:http_server:2.4</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:apache:http_server:2.4.16</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">cpe:/a:apache:http_server:2.4.34</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:apache:http_server:2.4.37</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">cpe:/a:apache:http_server:2.4.38</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:apache:tomcat:-</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">cpe:/a:cherrypy:cherrypy:6.0.2</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:isc:bind:9.11.2</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">cpe:/a:isc:bind:9.11.5-P1</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:nginx:nginx:1.14.0</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">cpe:/a:nginx:nginx:1.15.8</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:nginx:nginx:1.15.9</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">cpe:/a:nginx:nginx:1.9.4</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:openbsd:openssh:5.5p1</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">cpe:/a:openbsd:openssh:6.6.1</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:openbsd:openssh:6.6.1p1</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">cpe:/a:openbsd:openssh:7.2p2</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:openbsd:openssh:7.6</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">cpe:/a:proftpd:proftpd:1.3.5b</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">cpe:/a:proftpd:proftpd:1.3.5rc3</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">cpe:/o:canonical:ubuntu_linux:14.04</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">cpe:/o:debian:debian_linux:6.0</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">cpe:/o:freebsd:freebsd:-</td>
<td align="right">1</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="what-other-dns-entries-use-cran-ips" class="section level3">
<h3>What other DNS entries use CRAN IPs?</h3>
<div class="sourceCode" id="cb35"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb35-1" title="1">cran_dns &lt;-<span class="st"> </span><span class="kw">readRDS</span>(here<span class="op">::</span><span class="kw">here</span>(<span class="st">&quot;data/cran-dns.rds&quot;</span>))</a>
<a class="sourceLine" id="cb35-2" title="2"></a>
<a class="sourceLine" id="cb35-3" title="3"><span class="kw">filter</span>(cran_dns, <span class="op">!</span><span class="kw">grepl</span>(<span class="st">&quot;CLOUDFLARENET|AMAZON&quot;</span>, as_name)) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb35-4" title="4"><span class="st"> </span><span class="kw">count</span>(value, as_name, <span class="dt">sort =</span> <span class="ot">TRUE</span>)</a></code></pre></div>
<div class="kable-table">
<table>
<thead>
<tr class="header">
<th align="left">value</th>
<th align="left">as_name</th>
<th align="right">n</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">222.66.109.32</td>
<td align="left">CHINANET-SH-AP China Telecom (Group), CN</td>
<td align="right">243</td>
</tr>
<tr class="even">
<td align="left">200.3.192.46</td>
<td align="left">EMPRESAS MUNICIPALES DE CALI E.I.C.E. E.S.P., CO</td>
<td align="right">30</td>
</tr>
<tr class="odd">
<td align="left">176.9.40.200</td>
<td align="left">HETZNER-AS, DE</td>
<td align="right">18</td>
</tr>
<tr class="even">
<td align="left">137.208.57.37</td>
<td align="left">Wirtschaftsuniversitaet Wien, AT</td>
<td align="right">10</td>
</tr>
<tr class="odd">
<td align="left">169.229.19.202</td>
<td align="left">UCB - University of California at Berkeley, US</td>
<td align="right">10</td>
</tr>
<tr class="even">
<td align="left">202.121.199.235</td>
<td align="left">ERX-CERNET-BKB China Education and Research Network Center, CN</td>
<td align="right">10</td>
</tr>
<tr class="odd">
<td align="left">150.229.0.204</td>
<td align="left">CSIRO Commonwealth Scientific and Industrial, AU</td>
<td align="right">8</td>
</tr>
<tr class="even">
<td align="left">130.206.13.2</td>
<td align="left">REDIRIS RedIRIS Autonomous System, ES</td>
<td align="right">6</td>
</tr>
<tr class="odd">
<td align="left">192.80.24.196</td>
<td align="left">Universidad de Chile, CL</td>
<td align="right">6</td>
</tr>
<tr class="even">
<td align="left">202.141.176.110</td>
<td align="left">CMNET-GD Guangdong Mobile Communication Co.Ltd., CN</td>
<td align="right">6</td>
</tr>
<tr class="odd">
<td align="left">45.63.11.93</td>
<td align="left">AS-CHOOPA - Choopa, LLC, US</td>
<td align="right">6</td>
</tr>
<tr class="even">
<td align="left">64.50.233.100</td>
<td align="left">TDS-AS - TDS TELECOM, US</td>
<td align="right">5</td>
</tr>
<tr class="odd">
<td align="left">119.29.56.102</td>
<td align="left">CNNIC-TENCENT-NET-AP Shenzhen Tencent Computer Systems Company Limited, CN</td>
<td align="right">4</td>
</tr>
<tr class="even">
<td align="left">13.66.202.75</td>
<td align="left">MICROSOFT-CORP-MSN-AS-BLOCK - Microsoft Corporation, US</td>
<td align="right">4</td>
</tr>
<tr class="odd">
<td align="left">131.188.12.211</td>
<td align="left">DFN Verein zur Foerderung eines Deutschen Forschungsnetzes e.V., DE</td>
<td align="right">4</td>
</tr>
<tr class="even">
<td align="left">194.214.26.146</td>
<td align="left">FR-RENATER Reseau National de telecommunications pour la Technologie, FR</td>
<td align="right">4</td>
</tr>
<tr class="odd">
<td align="left">200.236.31.1</td>
<td align="left">FUNPAR - Fundacao da UFPR para o DCTC, BR</td>
<td align="right">4</td>
</tr>
<tr class="even">
<td align="left">130.225.254.116</td>
<td align="left">FSKNET-DK Forskningsnettet - Danish network for Research and Education, DK</td>
<td align="right">3</td>
</tr>
<tr class="odd">
<td align="left">133.58.120.95</td>
<td align="left">SINET-AS Research Organization of Information and Systems, National Institute of Informatics, JP</td>
<td align="right">3</td>
</tr>
<tr class="even">
<td align="left">142.58.101.156</td>
<td align="left">SFU-AS - Simon Fraser University, CA</td>
<td align="right">3</td>
</tr>
<tr class="odd">
<td align="left">148.205.148.16</td>
<td align="left">Instituto Tecnologico Autonomo de Mexico(ITAM), MX</td>
<td align="right">3</td>
</tr>
<tr class="even">
<td align="left">155.198.195.11</td>
<td align="left">JANET Jisc Services Limited, GB</td>
<td align="right">3</td>
</tr>
<tr class="odd">
<td align="left">157.193.230.39</td>
<td align="left">BELNET, BE</td>
<td align="right">3</td>
</tr>
<tr class="even">
<td align="left">193.1.193.64</td>
<td align="left">HEANET, IE</td>
<td align="right">3</td>
</tr>
<tr class="odd">
<td align="left">193.40.0.5</td>
<td align="left">EENET-AS, EE</td>
<td align="right">3</td>
</tr>
<tr class="even">
<td align="left">194.71.11.165</td>
<td align="left">SUNET SUNET Swedish University Network, SE</td>
<td align="right">3</td>
</tr>
<tr class="odd">
<td align="left">202.90.159.172</td>
<td align="left">DOST-PH-AP Department of Science and Technology, PH</td>
<td align="right">3</td>
</tr>
<tr class="even">
<td align="left">46.143.212.45</td>
<td align="left">IR-FUM, IR</td>
<td align="right">3</td>
</tr>
<tr class="odd">
<td align="left">101.6.8.193</td>
<td align="left">ERX-CERNET-BKB China Education and Research Network Center, CN</td>
<td align="right">2</td>
</tr>
<tr class="even">
<td align="left">128.176.148.9</td>
<td align="left">DFN Verein zur Foerderung eines Deutschen Forschungsnetzes e.V., DE</td>
<td align="right">2</td>
</tr>
<tr class="odd">
<td align="left">129.237.125.92</td>
<td align="left">UKANS - University of Kansas, US</td>
<td align="right">2</td>
</tr>
<tr class="even">
<td align="left">14.49.99.238</td>
<td align="left">KIXS-AS-KR Korea Telecom, KR</td>
<td align="right">2</td>
</tr>
<tr class="odd">
<td align="left">143.107.10.17</td>
<td align="left">UNIVERSIDADE DE SAO PAULO, BR</td>
<td align="right">2</td>
</tr>
<tr class="even">
<td align="left">144.122.156.22</td>
<td align="left">METU-NET Middle East Technical University / Orta Dogu Teknik Universitesi, TR</td>
<td align="right">2</td>
</tr>
<tr class="odd">
<td align="left">190.96.111.43</td>
<td align="left">Escuela Politecnica Nacional, EC</td>
<td align="right">2</td>
</tr>
<tr class="even">
<td align="left">192.75.96.254</td>
<td align="left">DALUNIV - Dalhousie University, CA</td>
<td align="right">2</td>
</tr>
<tr class="odd">
<td align="left">194.254.245.138</td>
<td align="left">FR-RENATER Reseau National de telecommunications pour la Technologie, FR</td>
<td align="right">2</td>
</tr>
<tr class="even">
<td align="left">200.144.254.65</td>
<td align="left">UNIVERSIDADE DE SAO PAULO, BR</td>
<td align="right">2</td>
</tr>
<tr class="odd">
<td align="left">201.159.221.67</td>
<td align="left">CEDIA, EC</td>
<td align="right">2</td>
</tr>
<tr class="even">
<td align="left">210.218.217.24</td>
<td align="left">KREONET-AS-KR KISTI, KR</td>
<td align="right">2</td>
</tr>
<tr class="odd">
<td align="left">62.44.96.11</td>
<td align="left">SU-NET-AS, BG</td>
<td align="right">2</td>
</tr>
<tr class="even">
<td align="left">103.109.101.20</td>
<td align="left">AMARUTU-TECHNOLOGY, NL</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">103.224.137.193</td>
<td align="left">IDNIC-PDISBPPT-AS-ID PDIS - BADAN PENGKAJIAN DAN PENERAPAN TEKNOLOGI, ID</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">119.40.117.175</td>
<td align="left">UPM-AS-AP Universiti Putra Malaysia AS, MY</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">128.250.213.6</td>
<td align="left">UNIMELB-AS-AP The University of Melbourne, Melbourne, Victoria, AU</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">129.132.119.195</td>
<td align="left">SWITCH Peering requests: (<a href="mailto:peering@switch.ch" class="email">peering@switch.ch</a>), CH</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">129.177.13.120</td>
<td align="left">UNINETT UNINETT, The Norwegian University &amp; Research Network, NO</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">129.186.138.51</td>
<td align="left">IASTATE-AS - Iowa State University, US</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">129.22.208.161</td>
<td align="left">CWRU-AS-1 - Case Western Reserve University, US</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">130.208.58.81</td>
<td align="left">RHNET SURIS/RHnet, IS</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">130.216.2.235</td>
<td align="left">AKUNI-NZ The University of Auckland, NZ</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">133.24.248.17</td>
<td align="left">AS-YAMAGATAU Yamagata University, JP</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">134.214.32.76</td>
<td align="left">FR-RENATER RENATER_ASNBLOCK1, FR</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">134.76.12.6</td>
<td align="left">DFN Verein zur Foerderung eines Deutschen Forschungsnetzes e.V., DE</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">137.132.33.20</td>
<td align="left">NUS-AS-AP NUS Information Technology, SG</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">137.222.10.189</td>
<td align="left">JANET Jisc Services Limited, GB</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">140.138.144.169</td>
<td align="left">ERX-TANET-ASN1 Taiwan Academic Network (TANet) Information Center, TW</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">141.219.191.249</td>
<td align="left">MICHIGANTECH - Michigan Technological University, US</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">146.155.23.20</td>
<td align="left">Pontificia Universidad Catolica de Chile, CL</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">147.162.35.231</td>
<td align="left">ASGARR Consortium GARR, IT</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">147.52.159.12</td>
<td align="left">UCNET, GR</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">156.56.247.193</td>
<td align="left">INDIANA-AS - Indiana University, US</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">157.86.96.98</td>
<td align="left">FUNDACAO INSTITUTO OSWALDO CRUZ, BR</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">165.229.11.55</td>
<td align="left">YU-AS-KR Yeungnam University, KR</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">190.64.49.124</td>
<td align="left">Administracion Nacional de Telecomunicaciones, UY</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">192.249.6.222</td>
<td align="left">UTK - University of Tennessee, Knoxville, US</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">193.144.61.75</td>
<td align="left">REDIRIS RedIRIS Autonomous System, ES</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">193.194.89.173</td>
<td align="left">ARN, DZ</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">193.255.52.152</td>
<td align="left">ULAKNET, TR</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">193.50.6.155</td>
<td align="left">FR-RENATER Reseau National de telecommunications pour la Technologie, FR</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">202.158.214.106</td>
<td align="left">AARNET-AS-AP Australian Academic and Reasearch Network (AARNet), AU</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">202.201.0.160</td>
<td align="left">ERX-CERNET-BKB China Education and Research Network Center, CN</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">208.81.1.244</td>
<td align="left">LESNET - LES.NET, CA</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td align="left">217.31.202.63</td>
<td align="left">CZNIC-AS, CZ</td>
<td align="right">1</td>
</tr>
<tr class="odd">
<td align="left">87.98.155.219</td>
<td align="left">OVH, FR</td>
<td align="right">1</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<script>
// add bootstrap table styles to pandoc tables
function bootstrapStylePandocTables() {
$('tr.header').parent('thead').parent('table').addClass('table table-condensed');
}
$(document).ready(function () {
bootstrapStylePandocTables();
});
</script>
<!-- dynamically load mathjax for compatibility with self-contained -->
<script>
(function () {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
document.getElementsByTagName("head")[0].appendChild(script);
})();
</script>
</body>
</html>