diff --git a/404.html b/404.html new file mode 100644 index 0000000..e46def6 --- /dev/null +++ b/404.html @@ -0,0 +1,11 @@ +404 Page not found +
Page Not Found

404

The page you are looking for is not there yet.

\ No newline at end of file diff --git a/CNAME b/CNAME deleted file mode 100644 index 1329dda..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -rahmatawe.com diff --git a/android-chrome-192x192.png b/android-chrome-192x192.png deleted file mode 100644 index 3748bc9..0000000 Binary files a/android-chrome-192x192.png and /dev/null differ diff --git a/android-chrome-512x512.png b/android-chrome-512x512.png deleted file mode 100644 index 7211aad..0000000 Binary files a/android-chrome-512x512.png and /dev/null differ diff --git a/apple-touch-icon.png b/apple-touch-icon.png deleted file mode 100644 index 6fdade6..0000000 Binary files a/apple-touch-icon.png and /dev/null differ diff --git a/application.4785df1e2116a10eb5fd00831c92608aa230f4fe81f7ccb9009aca0d7ec197a6.js b/application.4785df1e2116a10eb5fd00831c92608aa230f4fe81f7ccb9009aca0d7ec197a6.js new file mode 100644 index 0000000..f5b0e49 --- /dev/null +++ b/application.4785df1e2116a10eb5fd00831c92608aa230f4fe81f7ccb9009aca0d7ec197a6.js @@ -0,0 +1,363 @@ +(()=>{var lu=Object.create;var sn=Object.defineProperty;var uu=Object.getOwnPropertyDescriptor;var du=Object.getOwnPropertyNames;var mu=Object.getPrototypeOf,pu=Object.prototype.hasOwnProperty;var Z3=(e,t)=>()=>(e&&(t=e(e=0)),t);var _1=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var hu=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of du(t))!pu.call(e,n)&&n!==r&&sn(e,n,{get:()=>t[n],enumerable:!(a=uu(t,n))||a.enumerable});return e};var J3=(e,t,r)=>(r=e!=null?lu(mu(e)):{},hu(t||!e||!e.__esModule?sn(r,"default",{value:e,enumerable:!0}):r,e));var R=Z3(()=>{});var on=_1((_6,g6)=>{R();(function(e,t){typeof _6=="object"&&typeof g6<"u"?g6.exports=t():typeof define=="function"&&define.amd?define(t):e.Popper=t()})(_6,function(){"use strict";var e=typeof window<"u"&&typeof document<"u"&&typeof navigator<"u",t=function(){for(var S=["Edge","Trident","Firefox"],P=0;P=0)return 1;return 0}();function r(S){var P=!1;return function(){P||(P=!0,window.Promise.resolve().then(function(){P=!1,S()}))}}function a(S){var P=!1;return function(){P||(P=!0,setTimeout(function(){P=!1,S()},t))}}var n=e&&window.Promise,c=n?r:a;function s(S){var P={};return S&&P.toString.call(S)==="[object Function]"}function o(S,P){if(S.nodeType!==1)return[];var p1=S.ownerDocument.defaultView,M1=p1.getComputedStyle(S,null);return P?M1[P]:M1}function d(S){return S.nodeName==="HTML"?S:S.parentNode||S.host}function u(S){if(!S)return document.body;switch(S.nodeName){case"HTML":case"BODY":return S.ownerDocument.body;case"#document":return S.body}var P=o(S),p1=P.overflow,M1=P.overflowX,N1=P.overflowY;return/(auto|scroll|overlay)/.test(p1+N1+M1)?S:u(d(S))}function p(S){return S&&S.referenceNode?S.referenceNode:S}var g=e&&!!(window.MSInputMethodContext&&document.documentMode),E=e&&/MSIE 10/.test(navigator.userAgent);function b(S){return S===11?g:S===10?E:g||E}function L(S){if(!S)return document.documentElement;for(var P=b(10)?document.body:null,p1=S.offsetParent||null;p1===P&&S.nextElementSibling;)p1=(S=S.nextElementSibling).offsetParent;var M1=p1&&p1.nodeName;return!M1||M1==="BODY"||M1==="HTML"?S?S.ownerDocument.documentElement:document.documentElement:["TH","TD","TABLE"].indexOf(p1.nodeName)!==-1&&o(p1,"position")==="static"?L(p1):p1}function D(S){var P=S.nodeName;return P==="BODY"?!1:P==="HTML"||L(S.firstElementChild)===S}function k(S){return S.parentNode!==null?k(S.parentNode):S}function Z(S,P){if(!S||!S.nodeType||!P||!P.nodeType)return document.documentElement;var p1=S.compareDocumentPosition(P)&Node.DOCUMENT_POSITION_FOLLOWING,M1=p1?S:P,N1=p1?P:S,V1=document.createRange();V1.setStart(M1,0),V1.setEnd(N1,0);var Y1=V1.commonAncestorContainer;if(S!==Y1&&P!==Y1||M1.contains(N1))return D(Y1)?Y1:L(Y1);var i2=k(S);return i2.host?Z(i2.host,P):Z(S,k(P).host)}function Q(S){var P=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"top",p1=P==="top"?"scrollTop":"scrollLeft",M1=S.nodeName;if(M1==="BODY"||M1==="HTML"){var N1=S.ownerDocument.documentElement,V1=S.ownerDocument.scrollingElement||N1;return V1[p1]}return S[p1]}function r1(S,P){var p1=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,M1=Q(P,"top"),N1=Q(P,"left"),V1=p1?-1:1;return S.top+=M1*V1,S.bottom+=M1*V1,S.left+=N1*V1,S.right+=N1*V1,S}function f1(S,P){var p1=P==="x"?"Left":"Top",M1=p1==="Left"?"Right":"Bottom";return parseFloat(S["border"+p1+"Width"])+parseFloat(S["border"+M1+"Width"])}function g1(S,P,p1,M1){return Math.max(P["offset"+S],P["scroll"+S],p1["client"+S],p1["offset"+S],p1["scroll"+S],b(10)?parseInt(p1["offset"+S])+parseInt(M1["margin"+(S==="Height"?"Top":"Left")])+parseInt(M1["margin"+(S==="Height"?"Bottom":"Right")]):0)}function f(S){var P=S.body,p1=S.documentElement,M1=b(10)&&getComputedStyle(p1);return{height:g1("Height",P,p1,M1),width:g1("Width",P,p1,M1)}}var D1=function(S,P){if(!(S instanceof P))throw new TypeError("Cannot call a class as a function")},H1=function(){function S(P,p1){for(var M1=0;M12&&arguments[2]!==void 0?arguments[2]:!1,M1=b(10),N1=P.nodeName==="HTML",V1=G1(S),Y1=G1(P),i2=u(S),m2=o(P),N2=parseFloat(m2.borderTopWidth),H2=parseFloat(m2.borderLeftWidth);p1&&N1&&(Y1.top=Math.max(Y1.top,0),Y1.left=Math.max(Y1.left,0));var M2=l2({top:V1.top-Y1.top-N2,left:V1.left-Y1.left-H2,width:V1.width,height:V1.height});if(M2.marginTop=0,M2.marginLeft=0,!M1&&N1){var Z2=parseFloat(m2.marginTop),k2=parseFloat(m2.marginLeft);M2.top-=N2-Z2,M2.bottom-=N2-Z2,M2.left-=H2-k2,M2.right-=H2-k2,M2.marginTop=Z2,M2.marginLeft=k2}return(M1&&!p1?P.contains(i2):P===i2&&i2.nodeName!=="BODY")&&(M2=r1(M2,P)),M2}function u2(S){var P=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,p1=S.ownerDocument.documentElement,M1=c2(S,p1),N1=Math.max(p1.clientWidth,window.innerWidth||0),V1=Math.max(p1.clientHeight,window.innerHeight||0),Y1=P?0:Q(p1),i2=P?0:Q(p1,"left"),m2={top:Y1-M1.top+M1.marginTop,left:i2-M1.left+M1.marginLeft,width:N1,height:V1};return l2(m2)}function C2(S){var P=S.nodeName;if(P==="BODY"||P==="HTML")return!1;if(o(S,"position")==="fixed")return!0;var p1=d(S);return p1?C2(p1):!1}function I2(S){if(!S||!S.parentElement||b())return document.documentElement;for(var P=S.parentElement;P&&o(P,"transform")==="none";)P=P.parentElement;return P||document.documentElement}function S1(S,P,p1,M1){var N1=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1,V1={top:0,left:0},Y1=N1?I2(S):Z(S,p(P));if(M1==="viewport")V1=u2(Y1,N1);else{var i2=void 0;M1==="scrollParent"?(i2=u(d(P)),i2.nodeName==="BODY"&&(i2=S.ownerDocument.documentElement)):M1==="window"?i2=S.ownerDocument.documentElement:i2=M1;var m2=c2(i2,Y1,N1);if(i2.nodeName==="HTML"&&!C2(Y1)){var N2=f(S.ownerDocument),H2=N2.height,M2=N2.width;V1.top+=m2.top-m2.marginTop,V1.bottom=H2+m2.top,V1.left+=m2.left-m2.marginLeft,V1.right=M2+m2.left}else V1=m2}p1=p1||0;var Z2=typeof p1=="number";return V1.left+=Z2?p1:p1.left||0,V1.top+=Z2?p1:p1.top||0,V1.right-=Z2?p1:p1.right||0,V1.bottom-=Z2?p1:p1.bottom||0,V1}function K1(S){var P=S.width,p1=S.height;return P*p1}function j1(S,P,p1,M1,N1){var V1=arguments.length>5&&arguments[5]!==void 0?arguments[5]:0;if(S.indexOf("auto")===-1)return S;var Y1=S1(p1,M1,V1,N1),i2={top:{width:Y1.width,height:P.top-Y1.top},right:{width:Y1.right-P.right,height:Y1.height},bottom:{width:Y1.width,height:Y1.bottom-P.bottom},left:{width:P.left-Y1.left,height:Y1.height}},m2=Object.keys(i2).map(function(Z2){return Q1({key:Z2},i2[Z2],{area:K1(i2[Z2])})}).sort(function(Z2,k2){return k2.area-Z2.area}),N2=m2.filter(function(Z2){var k2=Z2.width,W2=Z2.height;return k2>=p1.clientWidth&&W2>=p1.clientHeight}),H2=N2.length>0?N2[0].key:m2[0].key,M2=S.split("-")[1];return H2+(M2?"-"+M2:"")}function h2(S,P,p1){var M1=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null,N1=M1?I2(P):Z(P,p(p1));return c2(p1,N1,M1)}function d2(S){var P=S.ownerDocument.defaultView,p1=P.getComputedStyle(S),M1=parseFloat(p1.marginTop||0)+parseFloat(p1.marginBottom||0),N1=parseFloat(p1.marginLeft||0)+parseFloat(p1.marginRight||0),V1={width:S.offsetWidth+N1,height:S.offsetHeight+M1};return V1}function e2(S){var P={left:"right",right:"left",bottom:"top",top:"bottom"};return S.replace(/left|right|bottom|top/g,function(p1){return P[p1]})}function x2(S,P,p1){p1=p1.split("-")[0];var M1=d2(S),N1={width:M1.width,height:M1.height},V1=["right","left"].indexOf(p1)!==-1,Y1=V1?"top":"left",i2=V1?"left":"top",m2=V1?"height":"width",N2=V1?"width":"height";return N1[Y1]=P[Y1]+P[m2]/2-M1[m2]/2,p1===i2?N1[i2]=P[i2]-M1[N2]:N1[i2]=P[e2(i2)],N1}function b2(S,P){return Array.prototype.find?S.find(P):S.filter(P)[0]}function y2(S,P,p1){if(Array.prototype.findIndex)return S.findIndex(function(N1){return N1[P]===p1});var M1=b2(S,function(N1){return N1[P]===p1});return S.indexOf(M1)}function Y2(S,P,p1){var M1=p1===void 0?S:S.slice(0,y2(S,"name",p1));return M1.forEach(function(N1){N1.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var V1=N1.function||N1.fn;N1.enabled&&s(V1)&&(P.offsets.popper=l2(P.offsets.popper),P.offsets.reference=l2(P.offsets.reference),P=V1(P,N1))}),P}function ue(){if(!this.state.isDestroyed){var S={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};S.offsets.reference=h2(this.state,this.popper,this.reference,this.options.positionFixed),S.placement=j1(this.options.placement,S.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),S.originalPlacement=S.placement,S.positionFixed=this.options.positionFixed,S.offsets.popper=x2(this.popper,S.offsets.reference,S.placement),S.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",S=Y2(this.modifiers,S),this.state.isCreated?this.options.onUpdate(S):(this.state.isCreated=!0,this.options.onCreate(S))}}function z2(S,P){return S.some(function(p1){var M1=p1.name,N1=p1.enabled;return N1&&M1===P})}function X2(S){for(var P=[!1,"ms","Webkit","Moz","O"],p1=S.charAt(0).toUpperCase()+S.slice(1),M1=0;M1Y1[k2]&&(S.offsets.popper[M2]+=i2[M2]+W2-Y1[k2]),S.offsets.popper=l2(S.offsets.popper);var F2=i2[M2]+i2[N2]/2-W2/2,qe=o(S.instance.popper),t3=parseFloat(qe["margin"+H2]),xe=parseFloat(qe["border"+H2+"Width"]),Me=F2-S.offsets.popper[M2]-t3-xe;return Me=Math.max(Math.min(Y1[N2]-W2,Me),0),S.arrowElement=M1,S.offsets.arrow=(p1={},G(p1,M2,Math.round(Me)),G(p1,Z2,""),p1),S}function f2(S){return S==="end"?"start":S==="start"?"end":S}var g2=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],U2=g2.slice(3);function q2(S){var P=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,p1=U2.indexOf(S),M1=U2.slice(p1+1).concat(U2.slice(0,p1));return P?M1.reverse():M1}var ge={FLIP:"flip",CLOCKWISE:"clockwise",COUNTERCLOCKWISE:"counterclockwise"};function pe(S,P){if(z2(S.instance.modifiers,"inner")||S.flipped&&S.placement===S.originalPlacement)return S;var p1=S1(S.instance.popper,S.instance.reference,P.padding,P.boundariesElement,S.positionFixed),M1=S.placement.split("-")[0],N1=e2(M1),V1=S.placement.split("-")[1]||"",Y1=[];switch(P.behavior){case ge.FLIP:Y1=[M1,N1];break;case ge.CLOCKWISE:Y1=q2(M1);break;case ge.COUNTERCLOCKWISE:Y1=q2(M1,!0);break;default:Y1=P.behavior}return Y1.forEach(function(i2,m2){if(M1!==i2||Y1.length===m2+1)return S;M1=S.placement.split("-")[0],N1=e2(M1);var N2=S.offsets.popper,H2=S.offsets.reference,M2=Math.floor,Z2=M1==="left"&&M2(N2.right)>M2(H2.left)||M1==="right"&&M2(N2.left)M2(H2.top)||M1==="bottom"&&M2(N2.top)M2(p1.right),F2=M2(N2.top)M2(p1.bottom),t3=M1==="left"&&k2||M1==="right"&&W2||M1==="top"&&F2||M1==="bottom"&&qe,xe=["top","bottom"].indexOf(M1)!==-1,Me=!!P.flipVariations&&(xe&&V1==="start"&&k2||xe&&V1==="end"&&W2||!xe&&V1==="start"&&F2||!xe&&V1==="end"&&qe),Te=!!P.flipVariationsByContent&&(xe&&V1==="start"&&W2||xe&&V1==="end"&&k2||!xe&&V1==="start"&&qe||!xe&&V1==="end"&&F2),s3=Me||Te;(Z2||t3||s3)&&(S.flipped=!0,(Z2||t3)&&(M1=Y1[m2+1]),s3&&(V1=f2(V1)),S.placement=M1+(V1?"-"+V1:""),S.offsets.popper=Q1({},S.offsets.popper,x2(S.instance.popper,S.offsets.reference,S.placement)),S=Y2(S.instance.modifiers,S,"flip"))}),S}function Pe(S){var P=S.offsets,p1=P.popper,M1=P.reference,N1=S.placement.split("-")[0],V1=Math.floor,Y1=["top","bottom"].indexOf(N1)!==-1,i2=Y1?"right":"bottom",m2=Y1?"left":"top",N2=Y1?"width":"height";return p1[i2]V1(M1[i2])&&(S.offsets.popper[m2]=V1(M1[i2])),S}function c1(S,P,p1,M1){var N1=S.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),V1=+N1[1],Y1=N1[2];if(!V1)return S;if(Y1.indexOf("%")===0){var i2=void 0;switch(Y1){case"%p":i2=p1;break;case"%":case"%r":default:i2=M1}var m2=l2(i2);return m2[P]/100*V1}else if(Y1==="vh"||Y1==="vw"){var N2=void 0;return Y1==="vh"?N2=Math.max(document.documentElement.clientHeight,window.innerHeight||0):N2=Math.max(document.documentElement.clientWidth,window.innerWidth||0),N2/100*V1}else return V1}function x(S,P,p1,M1){var N1=[0,0],V1=["right","left"].indexOf(M1)!==-1,Y1=S.split(/(\+|\-)/).map(function(H2){return H2.trim()}),i2=Y1.indexOf(b2(Y1,function(H2){return H2.search(/,|\s/)!==-1}));Y1[i2]&&Y1[i2].indexOf(",")===-1&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var m2=/\s*,\s*|\s+/,N2=i2!==-1?[Y1.slice(0,i2).concat([Y1[i2].split(m2)[0]]),[Y1[i2].split(m2)[1]].concat(Y1.slice(i2+1))]:[Y1];return N2=N2.map(function(H2,M2){var Z2=(M2===1?!V1:V1)?"height":"width",k2=!1;return H2.reduce(function(W2,F2){return W2[W2.length-1]===""&&["+","-"].indexOf(F2)!==-1?(W2[W2.length-1]=F2,k2=!0,W2):k2?(W2[W2.length-1]+=F2,k2=!1,W2):W2.concat(F2)},[]).map(function(W2){return c1(W2,Z2,P,p1)})}),N2.forEach(function(H2,M2){H2.forEach(function(Z2,k2){J1(Z2)&&(N1[M2]+=Z2*(H2[k2-1]==="-"?-1:1))})}),N1}function V(S,P){var p1=P.offset,M1=S.placement,N1=S.offsets,V1=N1.popper,Y1=N1.reference,i2=M1.split("-")[0],m2=void 0;return J1(+p1)?m2=[+p1,0]:m2=x(p1,V1,Y1,i2),i2==="left"?(V1.top+=m2[0],V1.left-=m2[1]):i2==="right"?(V1.top+=m2[0],V1.left+=m2[1]):i2==="top"?(V1.left+=m2[0],V1.top-=m2[1]):i2==="bottom"&&(V1.left+=m2[0],V1.top+=m2[1]),S.popper=V1,S}function $(S,P){var p1=P.boundariesElement||L(S.instance.popper);S.instance.reference===p1&&(p1=L(p1));var M1=X2("transform"),N1=S.instance.popper.style,V1=N1.top,Y1=N1.left,i2=N1[M1];N1.top="",N1.left="",N1[M1]="";var m2=S1(S.instance.popper,S.instance.reference,P.padding,p1,S.positionFixed);N1.top=V1,N1.left=Y1,N1[M1]=i2,P.boundaries=m2;var N2=P.priority,H2=S.offsets.popper,M2={primary:function(k2){var W2=H2[k2];return H2[k2]m2[k2]&&!P.escapeWithReference&&(F2=Math.min(H2[W2],m2[k2]-(k2==="right"?H2.width:H2.height))),G({},W2,F2)}};return N2.forEach(function(Z2){var k2=["left","top"].indexOf(Z2)!==-1?"primary":"secondary";H2=Q1({},H2,M2[k2](Z2))}),S.offsets.popper=H2,S}function w(S){var P=S.placement,p1=P.split("-")[0],M1=P.split("-")[1];if(M1){var N1=S.offsets,V1=N1.reference,Y1=N1.popper,i2=["bottom","top"].indexOf(p1)!==-1,m2=i2?"left":"top",N2=i2?"width":"height",H2={start:G({},m2,V1[m2]),end:G({},m2,V1[m2]+V1[N2]-Y1[N2])};S.offsets.popper=Q1({},Y1,H2[M1])}return S}function C1(S){if(!Re(S.instance.modifiers,"hide","preventOverflow"))return S;var P=S.offsets.reference,p1=b2(S.instance.modifiers,function(M1){return M1.name==="preventOverflow"}).boundaries;if(P.bottomp1.right||P.top>p1.bottom||P.right2&&arguments[2]!==void 0?arguments[2]:{};D1(this,S),this.scheduleUpdate=function(){return requestAnimationFrame(M1.update)},this.update=c(this.update.bind(this)),this.options=Q1({},S.Defaults,N1),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=P&&P.jquery?P[0]:P,this.popper=p1&&p1.jquery?p1[0]:p1,this.options.modifiers={},Object.keys(Q1({},S.Defaults.modifiers,N1.modifiers)).forEach(function(Y1){M1.options.modifiers[Y1]=Q1({},S.Defaults.modifiers[Y1]||{},N1.modifiers?N1.modifiers[Y1]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(Y1){return Q1({name:Y1},M1.options.modifiers[Y1])}).sort(function(Y1,i2){return Y1.order-i2.order}),this.modifiers.forEach(function(Y1){Y1.enabled&&s(Y1.onLoad)&&Y1.onLoad(M1.reference,M1.popper,M1.options,Y1,M1.state)}),this.update();var V1=this.options.eventsEnabled;V1&&this.enableEventListeners(),this.state.eventsEnabled=V1}return H1(S,[{key:"update",value:function(){return ue.call(this)}},{key:"destroy",value:function(){return b1.call(this)}},{key:"enableEventListeners",value:function(){return _2.call(this)}},{key:"disableEventListeners",value:function(){return _e.call(this)}}]),S}();return X1.Utils=(typeof window<"u"?window:global).PopperUtils,X1.placements=g2,X1.Defaults=a2,X1})});var un=_1((ln,g0)=>{R();(function(e,t){"use strict";typeof g0=="object"&&typeof g0.exports=="object"?g0.exports=e.document?t(e,!0):function(r){if(!r.document)throw new Error("jQuery requires a window with a document");return t(r)}:t(e)})(typeof window<"u"?window:ln,function(e,t){"use strict";var r=[],a=Object.getPrototypeOf,n=r.slice,c=r.flat?function(i){return r.flat.call(i)}:function(i){return r.concat.apply([],i)},s=r.push,o=r.indexOf,d={},u=d.toString,p=d.hasOwnProperty,g=p.toString,E=g.call(Object),b={},L=function(l){return typeof l=="function"&&typeof l.nodeType!="number"&&typeof l.item!="function"},D=function(l){return l!=null&&l===l.window},k=e.document,Z={type:!0,src:!0,nonce:!0,noModule:!0};function Q(i,l,_){_=_||k;var C,O,I=_.createElement("script");if(I.text=i,l)for(C in Z)O=l[C]||l.getAttribute&&l.getAttribute(C),O&&I.setAttribute(C,O);_.head.appendChild(I).parentNode.removeChild(I)}function r1(i){return i==null?i+"":typeof i=="object"||typeof i=="function"?d[u.call(i)]||"object":typeof i}var f1="3.7.1",g1=/HTML$/i,f=function(i,l){return new f.fn.init(i,l)};f.fn=f.prototype={jquery:f1,constructor:f,length:0,toArray:function(){return n.call(this)},get:function(i){return i==null?n.call(this):i<0?this[i+this.length]:this[i]},pushStack:function(i){var l=f.merge(this.constructor(),i);return l.prevObject=this,l},each:function(i){return f.each(this,i)},map:function(i){return this.pushStack(f.map(this,function(l,_){return i.call(l,_,l)}))},slice:function(){return this.pushStack(n.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(f.grep(this,function(i,l){return(l+1)%2}))},odd:function(){return this.pushStack(f.grep(this,function(i,l){return l%2}))},eq:function(i){var l=this.length,_=+i+(i<0?l:0);return this.pushStack(_>=0&&_0&&l-1 in i}function H1(i,l){return i.nodeName&&i.nodeName.toLowerCase()===l.toLowerCase()}var G=r.pop,Q1=r.sort,l2=r.splice,G1="[\\x20\\t\\r\\n\\f]",c2=new RegExp("^"+G1+"+|((?:^|[^\\\\])(?:\\\\.)*)"+G1+"+$","g");f.contains=function(i,l){var _=l&&l.parentNode;return i===_||!!(_&&_.nodeType===1&&(i.contains?i.contains(_):i.compareDocumentPosition&&i.compareDocumentPosition(_)&16))};var u2=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function C2(i,l){return l?i==="\0"?"\uFFFD":i.slice(0,-1)+"\\"+i.charCodeAt(i.length-1).toString(16)+" ":"\\"+i}f.escapeSelector=function(i){return(i+"").replace(u2,C2)};var I2=k,S1=s;(function(){var i,l,_,C,O,I=S1,F,m1,n1,y1,F1,q1=f.expando,L1=0,t2=0,K2=H4(),Ee=H4(),se=H4(),We=H4(),Ge=function(A,U){return A===U&&(O=!0),0},_3="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",y3="(?:\\\\[\\da-fA-F]{1,6}"+G1+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",ve="\\["+G1+"*("+y3+")(?:"+G1+"*([*^$|!~]?=)"+G1+`*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(`+y3+"))|)"+G1+"*\\]",s4=":("+y3+`)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|`+ve+")*)|.*)\\)|)",ye=new RegExp(G1+"+","g"),Fe=new RegExp("^"+G1+"*,"+G1+"*"),o4=new RegExp("^"+G1+"*([>+~]|"+G1+")"+G1+"*"),Z4=new RegExp(G1+"|>"),p3=new RegExp(s4),_4=new RegExp("^"+y3+"$"),Ze={ID:new RegExp("^#("+y3+")"),CLASS:new RegExp("^\\.("+y3+")"),TAG:new RegExp("^("+y3+"|[*])"),ATTR:new RegExp("^"+ve),PSEUDO:new RegExp("^"+s4),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+G1+"*(even|odd|(([+-]|)(\\d*)n|)"+G1+"*(?:([+-]|)"+G1+"*(\\d+)|))"+G1+"*\\)|)","i"),bool:new RegExp("^(?:"+_3+")$","i"),needsContext:new RegExp("^"+G1+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+G1+"*((?:-\\d)?\\d*)"+G1+"*\\)|)(?=[^-]|$)","i")},B3=/^(?:input|select|textarea|button)$/i,X3=/^h\d$/i,E3=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ut=/[+~]/,z3=new RegExp("\\\\[\\da-fA-F]{1,6}"+G1+"?|\\\\([^\\r\\n\\f])","g"),l3=function(A,U){var j="0x"+A.slice(1)-65536;return U||(j<0?String.fromCharCode(j+65536):String.fromCharCode(j>>10|55296,j&1023|56320))},Gt=function(){G3()},J4=et(function(A){return A.disabled===!0&&H1(A,"fieldset")},{dir:"parentNode",next:"legend"});function T3(){try{return F.activeElement}catch{}}try{I.apply(r=n.call(I2.childNodes),I2.childNodes),r[I2.childNodes.length].nodeType}catch{I={apply:function(U,j){S1.apply(U,n.call(j))},call:function(U){S1.apply(U,n.call(arguments,1))}}}function Le(A,U,j,e1){var d1,z1,k1,$1,Z1,L2,w2,P2=U&&U.ownerDocument,G2=U?U.nodeType:9;if(j=j||[],typeof A!="string"||!A||G2!==1&&G2!==9&&G2!==11)return j;if(!e1&&(G3(U),U=U||F,n1)){if(G2!==11&&(Z1=E3.exec(A)))if(d1=Z1[1]){if(G2===9)if(k1=U.getElementById(d1)){if(k1.id===d1)return I.call(j,k1),j}else return j;else if(P2&&(k1=P2.getElementById(d1))&&Le.contains(U,k1)&&k1.id===d1)return I.call(j,k1),j}else{if(Z1[2])return I.apply(j,U.getElementsByTagName(A)),j;if((d1=Z1[3])&&U.getElementsByClassName)return I.apply(j,U.getElementsByClassName(d1)),j}if(!We[A+" "]&&(!y1||!y1.test(A))){if(w2=A,P2=U,G2===1&&(Z4.test(A)||o4.test(A))){for(P2=ut.test(A)&&dt(U.parentNode)||U,(P2!=U||!b.scope)&&(($1=U.getAttribute("id"))?$1=f.escapeSelector($1):U.setAttribute("id",$1=q1)),L2=Y3(A),z1=L2.length;z1--;)L2[z1]=($1?"#"+$1:":scope")+" "+V4(L2[z1]);w2=L2.join(",")}try{return I.apply(j,P2.querySelectorAll(w2)),j}catch{We(A,!0)}finally{$1===q1&&U.removeAttribute("id")}}}return J(A.replace(c2,"$1"),U,j,e1)}function H4(){var A=[];function U(j,e1){return A.push(j+" ")>l.cacheLength&&delete U[A.shift()],U[j+" "]=e1}return U}function v3(A){return A[q1]=!0,A}function g4(A){var U=F.createElement("fieldset");try{return!!A(U)}catch{return!1}finally{U.parentNode&&U.parentNode.removeChild(U),U=null}}function D4(A){return function(U){return H1(U,"input")&&U.type===A}}function E4(A){return function(U){return(H1(U,"input")||H1(U,"button"))&&U.type===A}}function v4(A){return function(U){return"form"in U?U.parentNode&&U.disabled===!1?"label"in U?"label"in U.parentNode?U.parentNode.disabled===A:U.disabled===A:U.isDisabled===A||U.isDisabled!==!A&&J4(U)===A:U.disabled===A:"label"in U?U.disabled===A:!1}}function x3(A){return v3(function(U){return U=+U,v3(function(j,e1){for(var d1,z1=A([],j.length,U),k1=z1.length;k1--;)j[d1=z1[k1]]&&(j[d1]=!(e1[d1]=j[d1]))})})}function dt(A){return A&&typeof A.getElementsByTagName<"u"&&A}function G3(A){var U,j=A?A.ownerDocument||A:I2;return j==F||j.nodeType!==9||!j.documentElement||(F=j,m1=F.documentElement,n1=!f.isXMLDoc(F),F1=m1.matches||m1.webkitMatchesSelector||m1.msMatchesSelector,m1.msMatchesSelector&&I2!=F&&(U=F.defaultView)&&U.top!==U&&U.addEventListener("unload",Gt),b.getById=g4(function(e1){return m1.appendChild(e1).id=f.expando,!F.getElementsByName||!F.getElementsByName(f.expando).length}),b.disconnectedMatch=g4(function(e1){return F1.call(e1,"*")}),b.scope=g4(function(){return F.querySelectorAll(":scope")}),b.cssHas=g4(function(){try{return F.querySelector(":has(*,:jqfake)"),!1}catch{return!0}}),b.getById?(l.filter.ID=function(e1){var d1=e1.replace(z3,l3);return function(z1){return z1.getAttribute("id")===d1}},l.find.ID=function(e1,d1){if(typeof d1.getElementById<"u"&&n1){var z1=d1.getElementById(e1);return z1?[z1]:[]}}):(l.filter.ID=function(e1){var d1=e1.replace(z3,l3);return function(z1){var k1=typeof z1.getAttributeNode<"u"&&z1.getAttributeNode("id");return k1&&k1.value===d1}},l.find.ID=function(e1,d1){if(typeof d1.getElementById<"u"&&n1){var z1,k1,$1,Z1=d1.getElementById(e1);if(Z1){if(z1=Z1.getAttributeNode("id"),z1&&z1.value===e1)return[Z1];for($1=d1.getElementsByName(e1),k1=0;Z1=$1[k1++];)if(z1=Z1.getAttributeNode("id"),z1&&z1.value===e1)return[Z1]}return[]}}),l.find.TAG=function(e1,d1){return typeof d1.getElementsByTagName<"u"?d1.getElementsByTagName(e1):d1.querySelectorAll(e1)},l.find.CLASS=function(e1,d1){if(typeof d1.getElementsByClassName<"u"&&n1)return d1.getElementsByClassName(e1)},y1=[],g4(function(e1){var d1;m1.appendChild(e1).innerHTML="",e1.querySelectorAll("[selected]").length||y1.push("\\["+G1+"*(?:value|"+_3+")"),e1.querySelectorAll("[id~="+q1+"-]").length||y1.push("~="),e1.querySelectorAll("a#"+q1+"+*").length||y1.push(".#.+[+~]"),e1.querySelectorAll(":checked").length||y1.push(":checked"),d1=F.createElement("input"),d1.setAttribute("type","hidden"),e1.appendChild(d1).setAttribute("name","D"),m1.appendChild(e1).disabled=!0,e1.querySelectorAll(":disabled").length!==2&&y1.push(":enabled",":disabled"),d1=F.createElement("input"),d1.setAttribute("name",""),e1.appendChild(d1),e1.querySelectorAll("[name='']").length||y1.push("\\["+G1+"*name"+G1+"*="+G1+`*(?:''|"")`)}),b.cssHas||y1.push(":has"),y1=y1.length&&new RegExp(y1.join("|")),Ge=function(e1,d1){if(e1===d1)return O=!0,0;var z1=!e1.compareDocumentPosition-!d1.compareDocumentPosition;return z1||(z1=(e1.ownerDocument||e1)==(d1.ownerDocument||d1)?e1.compareDocumentPosition(d1):1,z1&1||!b.sortDetached&&d1.compareDocumentPosition(e1)===z1?e1===F||e1.ownerDocument==I2&&Le.contains(I2,e1)?-1:d1===F||d1.ownerDocument==I2&&Le.contains(I2,d1)?1:C?o.call(C,e1)-o.call(C,d1):0:z1&4?-1:1)}),F}Le.matches=function(A,U){return Le(A,null,null,U)},Le.matchesSelector=function(A,U){if(G3(A),n1&&!We[U+" "]&&(!y1||!y1.test(U)))try{var j=F1.call(A,U);if(j||b.disconnectedMatch||A.document&&A.document.nodeType!==11)return j}catch{We(U,!0)}return Le(U,F,null,[A]).length>0},Le.contains=function(A,U){return(A.ownerDocument||A)!=F&&G3(A),f.contains(A,U)},Le.attr=function(A,U){(A.ownerDocument||A)!=F&&G3(A);var j=l.attrHandle[U.toLowerCase()],e1=j&&p.call(l.attrHandle,U.toLowerCase())?j(A,U,!n1):void 0;return e1!==void 0?e1:A.getAttribute(U)},Le.error=function(A){throw new Error("Syntax error, unrecognized expression: "+A)},f.uniqueSort=function(A){var U,j=[],e1=0,d1=0;if(O=!b.sortStable,C=!b.sortStable&&n.call(A,0),Q1.call(A,Ge),O){for(;U=A[d1++];)U===A[d1]&&(e1=j.push(d1));for(;e1--;)l2.call(A,j[e1],1)}return C=null,A},f.fn.uniqueSort=function(){return this.pushStack(f.uniqueSort(n.apply(this)))},l=f.expr={cacheLength:50,createPseudo:v3,match:Ze,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(A){return A[1]=A[1].replace(z3,l3),A[3]=(A[3]||A[4]||A[5]||"").replace(z3,l3),A[2]==="~="&&(A[3]=" "+A[3]+" "),A.slice(0,4)},CHILD:function(A){return A[1]=A[1].toLowerCase(),A[1].slice(0,3)==="nth"?(A[3]||Le.error(A[0]),A[4]=+(A[4]?A[5]+(A[6]||1):2*(A[3]==="even"||A[3]==="odd")),A[5]=+(A[7]+A[8]||A[3]==="odd")):A[3]&&Le.error(A[0]),A},PSEUDO:function(A){var U,j=!A[6]&&A[2];return Ze.CHILD.test(A[0])?null:(A[3]?A[2]=A[4]||A[5]||"":j&&p3.test(j)&&(U=Y3(j,!0))&&(U=j.indexOf(")",j.length-U)-j.length)&&(A[0]=A[0].slice(0,U),A[2]=j.slice(0,U)),A.slice(0,3))}},filter:{TAG:function(A){var U=A.replace(z3,l3).toLowerCase();return A==="*"?function(){return!0}:function(j){return H1(j,U)}},CLASS:function(A){var U=K2[A+" "];return U||(U=new RegExp("(^|"+G1+")"+A+"("+G1+"|$)"))&&K2(A,function(j){return U.test(typeof j.className=="string"&&j.className||typeof j.getAttribute<"u"&&j.getAttribute("class")||"")})},ATTR:function(A,U,j){return function(e1){var d1=Le.attr(e1,A);return d1==null?U==="!=":U?(d1+="",U==="="?d1===j:U==="!="?d1!==j:U==="^="?j&&d1.indexOf(j)===0:U==="*="?j&&d1.indexOf(j)>-1:U==="$="?j&&d1.slice(-j.length)===j:U==="~="?(" "+d1.replace(ye," ")+" ").indexOf(j)>-1:U==="|="?d1===j||d1.slice(0,j.length+1)===j+"-":!1):!0}},CHILD:function(A,U,j,e1,d1){var z1=A.slice(0,3)!=="nth",k1=A.slice(-4)!=="last",$1=U==="of-type";return e1===1&&d1===0?function(Z1){return!!Z1.parentNode}:function(Z1,L2,w2){var P2,G2,V2,re,Ae,He=z1!==k1?"nextSibling":"previousSibling",De=Z1.parentNode,i3=$1&&Z1.nodeName.toLowerCase(),Xe=!w2&&!$1,Je=!1;if(De){if(z1){for(;He;){for(V2=Z1;V2=V2[He];)if($1?H1(V2,i3):V2.nodeType===1)return!1;Ae=He=A==="only"&&!Ae&&"nextSibling"}return!0}if(Ae=[k1?De.firstChild:De.lastChild],k1&&Xe){for(G2=De[q1]||(De[q1]={}),P2=G2[A]||[],re=P2[0]===L1&&P2[1],Je=re&&P2[2],V2=re&&De.childNodes[re];V2=++re&&V2&&V2[He]||(Je=re=0)||Ae.pop();)if(V2.nodeType===1&&++Je&&V2===Z1){G2[A]=[L1,re,Je];break}}else if(Xe&&(G2=Z1[q1]||(Z1[q1]={}),P2=G2[A]||[],re=P2[0]===L1&&P2[1],Je=re),Je===!1)for(;(V2=++re&&V2&&V2[He]||(Je=re=0)||Ae.pop())&&!(($1?H1(V2,i3):V2.nodeType===1)&&++Je&&(Xe&&(G2=V2[q1]||(V2[q1]={}),G2[A]=[L1,Je]),V2===Z1)););return Je-=d1,Je===e1||Je%e1===0&&Je/e1>=0}}},PSEUDO:function(A,U){var j,e1=l.pseudos[A]||l.setFilters[A.toLowerCase()]||Le.error("unsupported pseudo: "+A);return e1[q1]?e1(U):e1.length>1?(j=[A,A,"",U],l.setFilters.hasOwnProperty(A.toLowerCase())?v3(function(d1,z1){for(var k1,$1=e1(d1,U),Z1=$1.length;Z1--;)k1=o.call(d1,$1[Z1]),d1[k1]=!(z1[k1]=$1[Z1])}):function(d1){return e1(d1,0,j)}):e1}},pseudos:{not:v3(function(A){var U=[],j=[],e1=X(A.replace(c2,"$1"));return e1[q1]?v3(function(d1,z1,k1,$1){for(var Z1,L2=e1(d1,null,$1,[]),w2=d1.length;w2--;)(Z1=L2[w2])&&(d1[w2]=!(z1[w2]=Z1))}):function(d1,z1,k1){return U[0]=d1,e1(U,null,k1,j),U[0]=null,!j.pop()}}),has:v3(function(A){return function(U){return Le(A,U).length>0}}),contains:v3(function(A){return A=A.replace(z3,l3),function(U){return(U.textContent||f.text(U)).indexOf(A)>-1}}),lang:v3(function(A){return _4.test(A||"")||Le.error("unsupported lang: "+A),A=A.replace(z3,l3).toLowerCase(),function(U){var j;do if(j=n1?U.lang:U.getAttribute("xml:lang")||U.getAttribute("lang"))return j=j.toLowerCase(),j===A||j.indexOf(A+"-")===0;while((U=U.parentNode)&&U.nodeType===1);return!1}}),target:function(A){var U=e.location&&e.location.hash;return U&&U.slice(1)===A.id},root:function(A){return A===m1},focus:function(A){return A===T3()&&F.hasFocus()&&!!(A.type||A.href||~A.tabIndex)},enabled:v4(!1),disabled:v4(!0),checked:function(A){return H1(A,"input")&&!!A.checked||H1(A,"option")&&!!A.selected},selected:function(A){return A.parentNode&&A.parentNode.selectedIndex,A.selected===!0},empty:function(A){for(A=A.firstChild;A;A=A.nextSibling)if(A.nodeType<6)return!1;return!0},parent:function(A){return!l.pseudos.empty(A)},header:function(A){return X3.test(A.nodeName)},input:function(A){return B3.test(A.nodeName)},button:function(A){return H1(A,"input")&&A.type==="button"||H1(A,"button")},text:function(A){var U;return H1(A,"input")&&A.type==="text"&&((U=A.getAttribute("type"))==null||U.toLowerCase()==="text")},first:x3(function(){return[0]}),last:x3(function(A,U){return[U-1]}),eq:x3(function(A,U,j){return[j<0?j+U:j]}),even:x3(function(A,U){for(var j=0;jU?e1=U:e1=j;--e1>=0;)A.push(e1);return A}),gt:x3(function(A,U,j){for(var e1=j<0?j+U:j;++e11?function(U,j,e1){for(var d1=A.length;d1--;)if(!A[d1](U,j,e1))return!1;return!0}:A[0]}function Yt(A,U,j){for(var e1=0,d1=U.length;e1-1&&(k1[w2]=!($1[w2]=G2))}}else V2=tt(V2===$1?V2.splice(He,V2.length):V2),d1?d1(null,$1,V2,L2):I.apply($1,V2)})}function z(A){for(var U,j,e1,d1=A.length,z1=l.relative[A[0].type],k1=z1||l.relative[" "],$1=z1?1:0,Z1=et(function(P2){return P2===U},k1,!0),L2=et(function(P2){return o.call(U,P2)>-1},k1,!0),w2=[function(P2,G2,V2){var re=!z1&&(V2||G2!=_)||((U=G2).nodeType?Z1(P2,G2,V2):L2(P2,G2,V2));return U=null,re}];$11&&mt(w2),$1>1&&V4(A.slice(0,$1-1).concat({value:A[$1-2].type===" "?"*":""})).replace(c2,"$1"),j,$10,e1=A.length>0,d1=function(z1,k1,$1,Z1,L2){var w2,P2,G2,V2=0,re="0",Ae=z1&&[],He=[],De=_,i3=z1||e1&&l.find.TAG("*",L2),Xe=L1+=De==null?1:Math.random()||.1,Je=i3.length;for(L2&&(_=k1==F||k1||L2);re!==Je&&(w2=i3[re])!=null;re++){if(e1&&w2){for(P2=0,!k1&&w2.ownerDocument!=F&&(G3(w2),$1=!n1);G2=A[P2++];)if(G2(w2,k1||F,$1)){I.call(Z1,w2);break}L2&&(L1=Xe)}j&&((w2=!G2&&w2)&&V2--,z1&&Ae.push(w2))}if(V2+=re,j&&re!==V2){for(P2=0;G2=U[P2++];)G2(Ae,He,k1,$1);if(z1){if(V2>0)for(;re--;)Ae[re]||He[re]||(He[re]=G.call(Z1));He=tt(He)}I.apply(Z1,He),L2&&!z1&&He.length>0&&V2+U.length>1&&f.uniqueSort(Z1)}return L2&&(L1=Xe,_=De),Ae};return j?v3(d1):d1}function X(A,U){var j,e1=[],d1=[],z1=se[A+" "];if(!z1){for(U||(U=Y3(A)),j=U.length;j--;)z1=z(U[j]),z1[q1]?e1.push(z1):d1.push(z1);z1=se(A,Y(d1,e1)),z1.selector=A}return z1}function J(A,U,j,e1){var d1,z1,k1,$1,Z1,L2=typeof A=="function"&&A,w2=!e1&&Y3(A=L2.selector||A);if(j=j||[],w2.length===1){if(z1=w2[0]=w2[0].slice(0),z1.length>2&&(k1=z1[0]).type==="ID"&&U.nodeType===9&&n1&&l.relative[z1[1].type]){if(U=(l.find.ID(k1.matches[0].replace(z3,l3),U)||[])[0],U)L2&&(U=U.parentNode);else return j;A=A.slice(z1.shift().value.length)}for(d1=Ze.needsContext.test(A)?0:z1.length;d1--&&(k1=z1[d1],!l.relative[$1=k1.type]);)if((Z1=l.find[$1])&&(e1=Z1(k1.matches[0].replace(z3,l3),ut.test(z1[0].type)&&dt(U.parentNode)||U))){if(z1.splice(d1,1),A=e1.length&&V4(z1),!A)return I.apply(j,e1),j;break}}return(L2||X(A,w2))(e1,U,!n1,j,!U||ut.test(A)&&dt(U.parentNode)||U),j}b.sortStable=q1.split("").sort(Ge).join("")===q1,G3(),b.sortDetached=g4(function(A){return A.compareDocumentPosition(F.createElement("fieldset"))&1}),f.find=Le,f.expr[":"]=f.expr.pseudos,f.unique=f.uniqueSort,Le.compile=X,Le.select=J,Le.setDocument=G3,Le.tokenize=Y3,Le.escape=f.escapeSelector,Le.getText=f.text,Le.isXML=f.isXMLDoc,Le.selectors=f.expr,Le.support=f.support,Le.uniqueSort=f.uniqueSort})();var K1=function(i,l,_){for(var C=[],O=_!==void 0;(i=i[l])&&i.nodeType!==9;)if(i.nodeType===1){if(O&&f(i).is(_))break;C.push(i)}return C},j1=function(i,l){for(var _=[];i;i=i.nextSibling)i.nodeType===1&&i!==l&&_.push(i);return _},h2=f.expr.match.needsContext,d2=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function e2(i,l,_){return L(l)?f.grep(i,function(C,O){return!!l.call(C,O,C)!==_}):l.nodeType?f.grep(i,function(C){return C===l!==_}):typeof l!="string"?f.grep(i,function(C){return o.call(l,C)>-1!==_}):f.filter(l,i,_)}f.filter=function(i,l,_){var C=l[0];return _&&(i=":not("+i+")"),l.length===1&&C.nodeType===1?f.find.matchesSelector(C,i)?[C]:[]:f.find.matches(i,f.grep(l,function(O){return O.nodeType===1}))},f.fn.extend({find:function(i){var l,_,C=this.length,O=this;if(typeof i!="string")return this.pushStack(f(i).filter(function(){for(l=0;l1?f.uniqueSort(_):_},filter:function(i){return this.pushStack(e2(this,i||[],!1))},not:function(i){return this.pushStack(e2(this,i||[],!0))},is:function(i){return!!e2(this,typeof i=="string"&&h2.test(i)?f(i):i||[],!1).length}});var x2,b2=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,y2=f.fn.init=function(i,l,_){var C,O;if(!i)return this;if(_=_||x2,typeof i=="string")if(i[0]==="<"&&i[i.length-1]===">"&&i.length>=3?C=[null,i,null]:C=b2.exec(i),C&&(C[1]||!l))if(C[1]){if(l=l instanceof f?l[0]:l,f.merge(this,f.parseHTML(C[1],l&&l.nodeType?l.ownerDocument||l:k,!0)),d2.test(C[1])&&f.isPlainObject(l))for(C in l)L(this[C])?this[C](l[C]):this.attr(C,l[C]);return this}else return O=k.getElementById(C[2]),O&&(this[0]=O,this.length=1),this;else return!l||l.jquery?(l||_).find(i):this.constructor(l).find(i);else{if(i.nodeType)return this[0]=i,this.length=1,this;if(L(i))return _.ready!==void 0?_.ready(i):i(f)}return f.makeArray(i,this)};y2.prototype=f.fn,x2=f(k);var Y2=/^(?:parents|prev(?:Until|All))/,ue={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({has:function(i){var l=f(i,this),_=l.length;return this.filter(function(){for(var C=0;C<_;C++)if(f.contains(this,l[C]))return!0})},closest:function(i,l){var _,C=0,O=this.length,I=[],F=typeof i!="string"&&f(i);if(!h2.test(i)){for(;C-1:_.nodeType===1&&f.find.matchesSelector(_,i))){I.push(_);break}}return this.pushStack(I.length>1?f.uniqueSort(I):I)},index:function(i){return i?typeof i=="string"?o.call(f(i),this[0]):o.call(this,i.jquery?i[0]:i):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(i,l){return this.pushStack(f.uniqueSort(f.merge(this.get(),f(i,l))))},addBack:function(i){return this.add(i==null?this.prevObject:this.prevObject.filter(i))}});function z2(i,l){for(;(i=i[l])&&i.nodeType!==1;);return i}f.each({parent:function(i){var l=i.parentNode;return l&&l.nodeType!==11?l:null},parents:function(i){return K1(i,"parentNode")},parentsUntil:function(i,l,_){return K1(i,"parentNode",_)},next:function(i){return z2(i,"nextSibling")},prev:function(i){return z2(i,"previousSibling")},nextAll:function(i){return K1(i,"nextSibling")},prevAll:function(i){return K1(i,"previousSibling")},nextUntil:function(i,l,_){return K1(i,"nextSibling",_)},prevUntil:function(i,l,_){return K1(i,"previousSibling",_)},siblings:function(i){return j1((i.parentNode||{}).firstChild,i)},children:function(i){return j1(i.firstChild)},contents:function(i){return i.contentDocument!=null&&a(i.contentDocument)?i.contentDocument:(H1(i,"template")&&(i=i.content||i),f.merge([],i.childNodes))}},function(i,l){f.fn[i]=function(_,C){var O=f.map(this,l,_);return i.slice(-5)!=="Until"&&(C=_),C&&typeof C=="string"&&(O=f.filter(C,O)),this.length>1&&(ue[i]||f.uniqueSort(O),Y2.test(i)&&O.reverse()),this.pushStack(O)}});var X2=/[^\x20\t\r\n\f]+/g;function b1(i){var l={};return f.each(i.match(X2)||[],function(_,C){l[C]=!0}),l}f.Callbacks=function(i){i=typeof i=="string"?b1(i):f.extend({},i);var l,_,C,O,I=[],F=[],m1=-1,n1=function(){for(O=O||i.once,C=l=!0;F.length;m1=-1)for(_=F.shift();++m1-1;)I.splice(L1,1),L1<=m1&&m1--}),this},has:function(F1){return F1?f.inArray(F1,I)>-1:I.length>0},empty:function(){return I&&(I=[]),this},disable:function(){return O=F=[],I=_="",this},disabled:function(){return!I},lock:function(){return O=F=[],!_&&!l&&(I=_=""),this},locked:function(){return!!O},fireWith:function(F1,q1){return O||(q1=q1||[],q1=[F1,q1.slice?q1.slice():q1],F.push(q1),l||n1()),this},fire:function(){return y1.fireWith(this,arguments),this},fired:function(){return!!C}};return y1};function x1(i){return i}function U1(i){throw i}function P1(i,l,_,C){var O;try{i&&L(O=i.promise)?O.call(i).done(l).fail(_):i&&L(O=i.then)?O.call(i,l,_):l.apply(void 0,[i].slice(C))}catch(I){_.apply(void 0,[I])}}f.extend({Deferred:function(i){var l=[["notify","progress",f.Callbacks("memory"),f.Callbacks("memory"),2],["resolve","done",f.Callbacks("once memory"),f.Callbacks("once memory"),0,"resolved"],["reject","fail",f.Callbacks("once memory"),f.Callbacks("once memory"),1,"rejected"]],_="pending",C={state:function(){return _},always:function(){return O.done(arguments).fail(arguments),this},catch:function(I){return C.then(null,I)},pipe:function(){var I=arguments;return f.Deferred(function(F){f.each(l,function(m1,n1){var y1=L(I[n1[4]])&&I[n1[4]];O[n1[1]](function(){var F1=y1&&y1.apply(this,arguments);F1&&L(F1.promise)?F1.promise().progress(F.notify).done(F.resolve).fail(F.reject):F[n1[0]+"With"](this,y1?[F1]:arguments)})}),I=null}).promise()},then:function(I,F,m1){var n1=0;function y1(F1,q1,L1,t2){return function(){var K2=this,Ee=arguments,se=function(){var Ge,_3;if(!(F1=n1&&(L1!==U1&&(K2=void 0,Ee=[Ge]),q1.rejectWith(K2,Ee))}};F1?We():(f.Deferred.getErrorHook?We.error=f.Deferred.getErrorHook():f.Deferred.getStackHook&&(We.error=f.Deferred.getStackHook()),e.setTimeout(We))}}return f.Deferred(function(F1){l[0][3].add(y1(0,F1,L(m1)?m1:x1,F1.notifyWith)),l[1][3].add(y1(0,F1,L(I)?I:x1)),l[2][3].add(y1(0,F1,L(F)?F:U1))}).promise()},promise:function(I){return I!=null?f.extend(I,C):C}},O={};return f.each(l,function(I,F){var m1=F[2],n1=F[5];C[F[1]]=m1.add,n1&&m1.add(function(){_=n1},l[3-I][2].disable,l[3-I][3].disable,l[0][2].lock,l[0][3].lock),m1.add(F[3].fire),O[F[0]]=function(){return O[F[0]+"With"](this===O?void 0:this,arguments),this},O[F[0]+"With"]=m1.fireWith}),C.promise(O),i&&i.call(O,O),O},when:function(i){var l=arguments.length,_=l,C=Array(_),O=n.call(arguments),I=f.Deferred(),F=function(m1){return function(n1){C[m1]=this,O[m1]=arguments.length>1?n.call(arguments):n1,--l||I.resolveWith(C,O)}};if(l<=1&&(P1(i,I.done(F(_)).resolve,I.reject,!l),I.state()==="pending"||L(O[_]&&O[_].then)))return I.then();for(;_--;)P1(O[_],F(_),I.reject);return I.promise()}});var _2=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;f.Deferred.exceptionHook=function(i,l){e.console&&e.console.warn&&i&&_2.test(i.name)&&e.console.warn("jQuery.Deferred exception: "+i.message,i.stack,l)},f.readyException=function(i){e.setTimeout(function(){throw i})};var be=f.Deferred();f.fn.ready=function(i){return be.then(i).catch(function(l){f.readyException(l)}),this},f.extend({isReady:!1,readyWait:1,ready:function(i){(i===!0?--f.readyWait:f.isReady)||(f.isReady=!0,!(i!==!0&&--f.readyWait>0)&&be.resolveWith(k,[f]))}}),f.ready.then=be.then;function _e(){k.removeEventListener("DOMContentLoaded",_e),e.removeEventListener("load",_e),f.ready()}k.readyState==="complete"||k.readyState!=="loading"&&!k.documentElement.doScroll?e.setTimeout(f.ready):(k.addEventListener("DOMContentLoaded",_e),e.addEventListener("load",_e));var J1=function(i,l,_,C,O,I,F){var m1=0,n1=i.length,y1=_==null;if(r1(_)==="object"){O=!0;for(m1 in _)J1(i,l,m1,_[m1],!0,I,F)}else if(C!==void 0&&(O=!0,L(C)||(F=!0),y1&&(F?(l.call(i,C),l=null):(y1=l,l=function(F1,q1,L1){return y1.call(f(F1),L1)})),l))for(;m11,null,!0)},removeData:function(i){return this.each(function(){Re.remove(this,i)})}}),f.extend({queue:function(i,l,_){var C;if(i)return l=(l||"fx")+"queue",C=S2.get(i,l),_&&(!C||Array.isArray(_)?C=S2.access(i,l,f.makeArray(_)):C.push(_)),C||[]},dequeue:function(i,l){l=l||"fx";var _=f.queue(i,l),C=_.length,O=_.shift(),I=f._queueHooks(i,l),F=function(){f.dequeue(i,l)};O==="inprogress"&&(O=_.shift(),C--),O&&(l==="fx"&&_.unshift("inprogress"),delete I.stop,O.call(i,F,I)),!C&&I&&I.empty.fire()},_queueHooks:function(i,l){var _=l+"queueHooks";return S2.get(i,_)||S2.access(i,_,{empty:f.Callbacks("once memory").add(function(){S2.remove(i,[l+"queue",_])})})}}),f.fn.extend({queue:function(i,l){var _=2;return typeof i!="string"&&(l=i,i="fx",_--),arguments.length<_?f.queue(this[0],i):l===void 0?this:this.each(function(){var C=f.queue(this,i,l);f._queueHooks(this,i),i==="fx"&&C[0]!=="inprogress"&&f.dequeue(this,i)})},dequeue:function(i){return this.each(function(){f.dequeue(this,i)})},clearQueue:function(i){return this.queue(i||"fx",[])},promise:function(i,l){var _,C=1,O=f.Deferred(),I=this,F=this.length,m1=function(){--C||O.resolveWith(I,[I])};for(typeof i!="string"&&(l=i,i=void 0),i=i||"fx";F--;)_=S2.get(I[F],i+"queueHooks"),_&&_.empty&&(C++,_.empty.add(m1));return m1(),O.promise(l)}});var q2=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ge=new RegExp("^(?:([+-])=|)("+q2+")([a-z%]*)$","i"),pe=["Top","Right","Bottom","Left"],Pe=k.documentElement,c1=function(i){return f.contains(i.ownerDocument,i)},x={composed:!0};Pe.getRootNode&&(c1=function(i){return f.contains(i.ownerDocument,i)||i.getRootNode(x)===i.ownerDocument});var V=function(i,l){return i=l||i,i.style.display==="none"||i.style.display===""&&c1(i)&&f.css(i,"display")==="none"};function $(i,l,_,C){var O,I,F=20,m1=C?function(){return C.cur()}:function(){return f.css(i,l,"")},n1=m1(),y1=_&&_[3]||(f.cssNumber[l]?"":"px"),F1=i.nodeType&&(f.cssNumber[l]||y1!=="px"&&+n1)&&ge.exec(f.css(i,l));if(F1&&F1[3]!==y1){for(n1=n1/2,y1=y1||F1[3],F1=+n1||1;F--;)f.style(i,l,F1+y1),(1-I)*(1-(I=m1()/n1||.5))<=0&&(F=0),F1=F1/I;F1=F1*2,f.style(i,l,F1+y1),_=_||[]}return _&&(F1=+F1||+n1||0,O=_[1]?F1+(_[1]+1)*_[2]:+_[2],C&&(C.unit=y1,C.start=F1,C.end=O)),O}var w={};function C1(i){var l,_=i.ownerDocument,C=i.nodeName,O=w[C];return O||(l=_.body.appendChild(_.createElement(C)),O=f.css(l,"display"),l.parentNode.removeChild(l),O==="none"&&(O="block"),w[C]=O,O)}function o1(i,l){for(var _,C,O=[],I=0,F=i.length;I\x20\t\r\n\f]*)/i,X1=/^$|^module$|\/(?:java|ecma)script/i;(function(){var i=k.createDocumentFragment(),l=i.appendChild(k.createElement("div")),_=k.createElement("input");_.setAttribute("type","radio"),_.setAttribute("checked","checked"),_.setAttribute("name","t"),l.appendChild(_),b.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,l.innerHTML="",b.noCloneChecked=!!l.cloneNode(!0).lastChild.defaultValue,l.innerHTML="",b.option=!!l.lastChild})();var S={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};S.tbody=S.tfoot=S.colgroup=S.caption=S.thead,S.th=S.td,b.option||(S.optgroup=S.option=[1,""]);function P(i,l){var _;return typeof i.getElementsByTagName<"u"?_=i.getElementsByTagName(l||"*"):typeof i.querySelectorAll<"u"?_=i.querySelectorAll(l||"*"):_=[],l===void 0||l&&H1(i,l)?f.merge([i],_):_}function p1(i,l){for(var _=0,C=i.length;_-1){O&&O.push(I);continue}if(y1=c1(I),F=P(q1.appendChild(I),"script"),y1&&p1(F),_)for(F1=0;I=F[F1++];)X1.test(I.type||"")&&_.push(I)}return q1}var V1=/^([^.]*)(?:\.(.+)|)/;function Y1(){return!0}function i2(){return!1}function m2(i,l,_,C,O,I){var F,m1;if(typeof l=="object"){typeof _!="string"&&(C=C||_,_=void 0);for(m1 in l)m2(i,m1,_,C,l[m1],I);return i}if(C==null&&O==null?(O=_,C=_=void 0):O==null&&(typeof _=="string"?(O=C,C=void 0):(O=C,C=_,_=void 0)),O===!1)O=i2;else if(!O)return i;return I===1&&(F=O,O=function(n1){return f().off(n1),F.apply(this,arguments)},O.guid=F.guid||(F.guid=f.guid++)),i.each(function(){f.event.add(this,l,O,C,_)})}f.event={global:{},add:function(i,l,_,C,O){var I,F,m1,n1,y1,F1,q1,L1,t2,K2,Ee,se=S2.get(i);if(te(i))for(_.handler&&(I=_,_=I.handler,O=I.selector),O&&f.find.matchesSelector(Pe,O),_.guid||(_.guid=f.guid++),(n1=se.events)||(n1=se.events=Object.create(null)),(F=se.handle)||(F=se.handle=function(We){return typeof f<"u"&&f.event.triggered!==We.type?f.event.dispatch.apply(i,arguments):void 0}),l=(l||"").match(X2)||[""],y1=l.length;y1--;)m1=V1.exec(l[y1])||[],t2=Ee=m1[1],K2=(m1[2]||"").split(".").sort(),t2&&(q1=f.event.special[t2]||{},t2=(O?q1.delegateType:q1.bindType)||t2,q1=f.event.special[t2]||{},F1=f.extend({type:t2,origType:Ee,data:C,handler:_,guid:_.guid,selector:O,needsContext:O&&f.expr.match.needsContext.test(O),namespace:K2.join(".")},I),(L1=n1[t2])||(L1=n1[t2]=[],L1.delegateCount=0,(!q1.setup||q1.setup.call(i,C,K2,F)===!1)&&i.addEventListener&&i.addEventListener(t2,F)),q1.add&&(q1.add.call(i,F1),F1.handler.guid||(F1.handler.guid=_.guid)),O?L1.splice(L1.delegateCount++,0,F1):L1.push(F1),f.event.global[t2]=!0)},remove:function(i,l,_,C,O){var I,F,m1,n1,y1,F1,q1,L1,t2,K2,Ee,se=S2.hasData(i)&&S2.get(i);if(!(!se||!(n1=se.events))){for(l=(l||"").match(X2)||[""],y1=l.length;y1--;){if(m1=V1.exec(l[y1])||[],t2=Ee=m1[1],K2=(m1[2]||"").split(".").sort(),!t2){for(t2 in n1)f.event.remove(i,t2+l[y1],_,C,!0);continue}for(q1=f.event.special[t2]||{},t2=(C?q1.delegateType:q1.bindType)||t2,L1=n1[t2]||[],m1=m1[2]&&new RegExp("(^|\\.)"+K2.join("\\.(?:.*\\.|)")+"(\\.|$)"),F=I=L1.length;I--;)F1=L1[I],(O||Ee===F1.origType)&&(!_||_.guid===F1.guid)&&(!m1||m1.test(F1.namespace))&&(!C||C===F1.selector||C==="**"&&F1.selector)&&(L1.splice(I,1),F1.selector&&L1.delegateCount--,q1.remove&&q1.remove.call(i,F1));F&&!L1.length&&((!q1.teardown||q1.teardown.call(i,K2,se.handle)===!1)&&f.removeEvent(i,t2,se.handle),delete n1[t2])}f.isEmptyObject(n1)&&S2.remove(i,"handle events")}},dispatch:function(i){var l,_,C,O,I,F,m1=new Array(arguments.length),n1=f.event.fix(i),y1=(S2.get(this,"events")||Object.create(null))[n1.type]||[],F1=f.event.special[n1.type]||{};for(m1[0]=n1,l=1;l=1)){for(;y1!==this;y1=y1.parentNode||this)if(y1.nodeType===1&&!(i.type==="click"&&y1.disabled===!0)){for(I=[],F={},_=0;_-1:f.find(O,this,null,[y1]).length),F[O]&&I.push(C);I.length&&m1.push({elem:y1,handlers:I})}}return y1=this,n1\s*$/g;function k2(i,l){return H1(i,"table")&&H1(l.nodeType!==11?l:l.firstChild,"tr")&&f(i).children("tbody")[0]||i}function W2(i){return i.type=(i.getAttribute("type")!==null)+"/"+i.type,i}function F2(i){return(i.type||"").slice(0,5)==="true/"?i.type=i.type.slice(5):i.removeAttribute("type"),i}function qe(i,l){var _,C,O,I,F,m1,n1;if(l.nodeType===1){if(S2.hasData(i)&&(I=S2.get(i),n1=I.events,n1)){S2.remove(l,"handle events");for(O in n1)for(_=0,C=n1[O].length;_1&&typeof t2=="string"&&!b.checkClone&&M2.test(t2))return i.each(function(Ee){var se=i.eq(Ee);K2&&(l[0]=t2.call(this,Ee,se.html())),xe(se,l,_,C)});if(q1&&(O=N1(l,i[0].ownerDocument,!1,i,C),I=O.firstChild,O.childNodes.length===1&&(O=I),I||C)){for(F=f.map(P(O,"script"),W2),m1=F.length;F10&&p1(F,!n1&&P(i,"script")),m1},cleanData:function(i){for(var l,_,C,O=f.event.special,I=0;(_=i[I])!==void 0;I++)if(te(_)){if(l=_[S2.expando]){if(l.events)for(C in l.events)O[C]?f.event.remove(_,C):f.removeEvent(_,C,l.handle);_[S2.expando]=void 0}_[Re.expando]&&(_[Re.expando]=void 0)}}}),f.fn.extend({detach:function(i){return Me(this,i,!0)},remove:function(i){return Me(this,i)},text:function(i){return J1(this,function(l){return l===void 0?f.text(this):this.empty().each(function(){(this.nodeType===1||this.nodeType===11||this.nodeType===9)&&(this.textContent=l)})},null,i,arguments.length)},append:function(){return xe(this,arguments,function(i){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var l=k2(this,i);l.appendChild(i)}})},prepend:function(){return xe(this,arguments,function(i){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var l=k2(this,i);l.insertBefore(i,l.firstChild)}})},before:function(){return xe(this,arguments,function(i){this.parentNode&&this.parentNode.insertBefore(i,this)})},after:function(){return xe(this,arguments,function(i){this.parentNode&&this.parentNode.insertBefore(i,this.nextSibling)})},empty:function(){for(var i,l=0;(i=this[l])!=null;l++)i.nodeType===1&&(f.cleanData(P(i,!1)),i.textContent="");return this},clone:function(i,l){return i=i??!1,l=l??i,this.map(function(){return f.clone(this,i,l)})},html:function(i){return J1(this,function(l){var _=this[0]||{},C=0,O=this.length;if(l===void 0&&_.nodeType===1)return _.innerHTML;if(typeof l=="string"&&!H2.test(l)&&!S[(a2.exec(l)||["",""])[1].toLowerCase()]){l=f.htmlPrefilter(l);try{for(;C=0&&(n1+=Math.max(0,Math.ceil(i["offset"+l[0].toUpperCase()+l.slice(1)]-I-n1-m1-.5))||0),n1+y1}function q(i,l,_){var C=d3(i),O=!b.boxSizingReliable()||_,I=O&&f.css(i,"boxSizing",!1,C)==="border-box",F=I,m1=f3(i,l,C),n1="offset"+l[0].toUpperCase()+l.slice(1);if(Te.test(m1)){if(!_)return m1;m1="auto"}return(!b.boxSizingReliable()&&I||!b.reliableTrDimensions()&&H1(i,"tr")||m1==="auto"||!parseFloat(m1)&&f.css(i,"display",!1,C)==="inline")&&i.getClientRects().length&&(I=f.css(i,"boxSizing",!1,C)==="border-box",F=n1 in i,F&&(m1=i[n1])),m1=parseFloat(m1)||0,m1+N(i,l,_||(I?"border":"content"),F,C,m1)+"px"}f.extend({cssHooks:{opacity:{get:function(i,l){if(l){var _=f3(i,"opacity");return _===""?"1":_}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(i,l,_,C){if(!(!i||i.nodeType===3||i.nodeType===8||!i.style)){var O,I,F,m1=ie(l),n1=s3.test(l),y1=i.style;if(n1||(l=b3(m1)),F=f.cssHooks[l]||f.cssHooks[m1],_!==void 0){if(I=typeof _,I==="string"&&(O=ge.exec(_))&&O[1]&&(_=$(i,l,O),I="number"),_==null||_!==_)return;I==="number"&&!n1&&(_+=O&&O[3]||(f.cssNumber[m1]?"":"px")),!b.clearCloneStyle&&_===""&&l.indexOf("background")===0&&(y1[l]="inherit"),(!F||!("set"in F)||(_=F.set(i,_,C))!==void 0)&&(n1?y1.setProperty(l,_):y1[l]=_)}else return F&&"get"in F&&(O=F.get(i,!1,C))!==void 0?O:y1[l]}},css:function(i,l,_,C){var O,I,F,m1=ie(l),n1=s3.test(l);return n1||(l=b3(m1)),F=f.cssHooks[l]||f.cssHooks[m1],F&&"get"in F&&(O=F.get(i,!0,_)),O===void 0&&(O=f3(i,l,C)),O==="normal"&&l in M&&(O=M[l]),_===""||_?(I=parseFloat(O),_===!0||isFinite(I)?I||0:O):O}}),f.each(["height","width"],function(i,l){f.cssHooks[l]={get:function(_,C,O){if(C)return n4.test(f.css(_,"display"))&&(!_.getClientRects().length||!_.getBoundingClientRect().width)?r3(_,m,function(){return q(_,l,O)}):q(_,l,O)},set:function(_,C,O){var I,F=d3(_),m1=!b.scrollboxSize()&&F.position==="absolute",n1=m1||O,y1=n1&&f.css(_,"boxSizing",!1,F)==="border-box",F1=O?N(_,l,O,y1,F):0;return y1&&m1&&(F1-=Math.ceil(_["offset"+l[0].toUpperCase()+l.slice(1)]-parseFloat(F[l])-N(_,l,"border",!1,F)-.5)),F1&&(I=ge.exec(C))&&(I[3]||"px")!=="px"&&(_.style[l]=C,C=f.css(_,l)),h(_,C,F1)}}}),f.cssHooks.marginLeft=m3(b.reliableMarginLeft,function(i,l){if(l)return(parseFloat(f3(i,"marginLeft"))||i.getBoundingClientRect().left-r3(i,{marginLeft:0},function(){return i.getBoundingClientRect().left}))+"px"}),f.each({margin:"",padding:"",border:"Width"},function(i,l){f.cssHooks[i+l]={expand:function(_){for(var C=0,O={},I=typeof _=="string"?_.split(" "):[_];C<4;C++)O[i+pe[C]+l]=I[C]||I[C-2]||I[0];return O}},i!=="margin"&&(f.cssHooks[i+l].set=h)}),f.fn.extend({css:function(i,l){return J1(this,function(_,C,O){var I,F,m1={},n1=0;if(Array.isArray(C)){for(I=d3(_),F=C.length;n11)}});function B(i,l,_,C,O){return new B.prototype.init(i,l,_,C,O)}f.Tween=B,B.prototype={constructor:B,init:function(i,l,_,C,O,I){this.elem=i,this.prop=_,this.easing=O||f.easing._default,this.options=l,this.start=this.now=this.cur(),this.end=C,this.unit=I||(f.cssNumber[_]?"":"px")},cur:function(){var i=B.propHooks[this.prop];return i&&i.get?i.get(this):B.propHooks._default.get(this)},run:function(i){var l,_=B.propHooks[this.prop];return this.options.duration?this.pos=l=f.easing[this.easing](i,this.options.duration*i,0,1,this.options.duration):this.pos=l=i,this.now=(this.end-this.start)*l+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),_&&_.set?_.set(this):B.propHooks._default.set(this),this}},B.prototype.init.prototype=B.prototype,B.propHooks={_default:{get:function(i){var l;return i.elem.nodeType!==1||i.elem[i.prop]!=null&&i.elem.style[i.prop]==null?i.elem[i.prop]:(l=f.css(i.elem,i.prop,""),!l||l==="auto"?0:l)},set:function(i){f.fx.step[i.prop]?f.fx.step[i.prop](i):i.elem.nodeType===1&&(f.cssHooks[i.prop]||i.elem.style[b3(i.prop)]!=null)?f.style(i.elem,i.prop,i.now+i.unit):i.elem[i.prop]=i.now}}},B.propHooks.scrollTop=B.propHooks.scrollLeft={set:function(i){i.elem.nodeType&&i.elem.parentNode&&(i.elem[i.prop]=i.now)}},f.easing={linear:function(i){return i},swing:function(i){return .5-Math.cos(i*Math.PI)/2},_default:"swing"},f.fx=B.prototype.init,f.fx.step={};var s1,T1,I1=/^(?:toggle|show|hide)$/,W1=/queueHooks$/;function v2(){T1&&(k.hidden===!1&&e.requestAnimationFrame?e.requestAnimationFrame(v2):e.setTimeout(v2,f.fx.interval),f.fx.tick())}function D2(){return e.setTimeout(function(){s1=void 0}),s1=Date.now()}function r2(i,l){var _,C=0,O={height:i};for(l=l?1:0;C<4;C+=2-l)_=pe[C],O["margin"+_]=O["padding"+_]=i;return l&&(O.opacity=O.width=i),O}function B2(i,l,_){for(var C,O=(he.tweeners[l]||[]).concat(he.tweeners["*"]),I=0,F=O.length;I1)},removeAttr:function(i){return this.each(function(){f.removeAttr(this,i)})}}),f.extend({attr:function(i,l,_){var C,O,I=i.nodeType;if(!(I===3||I===8||I===2)){if(typeof i.getAttribute>"u")return f.prop(i,l,_);if((I!==1||!f.isXMLDoc(i))&&(O=f.attrHooks[l.toLowerCase()]||(f.expr.match.bool.test(l)?$2:void 0)),_!==void 0){if(_===null){f.removeAttr(i,l);return}return O&&"set"in O&&(C=O.set(i,_,l))!==void 0?C:(i.setAttribute(l,_+""),_)}return O&&"get"in O&&(C=O.get(i,l))!==null?C:(C=f.find.attr(i,l),C??void 0)}},attrHooks:{type:{set:function(i,l){if(!b.radioValue&&l==="radio"&&H1(i,"input")){var _=i.value;return i.setAttribute("type",l),_&&(i.value=_),l}}}},removeAttr:function(i,l){var _,C=0,O=l&&l.match(X2);if(O&&i.nodeType===1)for(;_=O[C++];)i.removeAttribute(_)}}),$2={set:function(i,l,_){return l===!1?f.removeAttr(i,_):i.setAttribute(_,_),_}},f.each(f.expr.match.bool.source.match(/\w+/g),function(i,l){var _=Ce[l]||f.find.attr;Ce[l]=function(C,O,I){var F,m1,n1=O.toLowerCase();return I||(m1=Ce[n1],Ce[n1]=F,F=_(C,O,I)!=null?n1:null,Ce[n1]=m1),F}});var T2=/^(?:input|select|textarea|button)$/i,J2=/^(?:a|area)$/i;f.fn.extend({prop:function(i,l){return J1(this,f.prop,i,l,arguments.length>1)},removeProp:function(i){return this.each(function(){delete this[f.propFix[i]||i]})}}),f.extend({prop:function(i,l,_){var C,O,I=i.nodeType;if(!(I===3||I===8||I===2))return(I!==1||!f.isXMLDoc(i))&&(l=f.propFix[l]||l,O=f.propHooks[l]),_!==void 0?O&&"set"in O&&(C=O.set(i,_,l))!==void 0?C:i[l]=_:O&&"get"in O&&(C=O.get(i,l))!==null?C:i[l]},propHooks:{tabIndex:{get:function(i){var l=f.find.attr(i,"tabindex");return l?parseInt(l,10):T2.test(i.nodeName)||J2.test(i.nodeName)&&i.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),b.optSelected||(f.propHooks.selected={get:function(i){var l=i.parentNode;return l&&l.parentNode&&l.parentNode.selectedIndex,null},set:function(i){var l=i.parentNode;l&&(l.selectedIndex,l.parentNode&&l.parentNode.selectedIndex)}}),f.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){f.propFix[this.toLowerCase()]=this});function Ne(i){var l=i.match(X2)||[];return l.join(" ")}function we(i){return i.getAttribute&&i.getAttribute("class")||""}function Se(i){return Array.isArray(i)?i:typeof i=="string"?i.match(X2)||[]:[]}f.fn.extend({addClass:function(i){var l,_,C,O,I,F;return L(i)?this.each(function(m1){f(this).addClass(i.call(this,m1,we(this)))}):(l=Se(i),l.length?this.each(function(){if(C=we(this),_=this.nodeType===1&&" "+Ne(C)+" ",_){for(I=0;I-1;)_=_.replace(" "+O+" "," ");F=Ne(_),C!==F&&this.setAttribute("class",F)}}):this):this.attr("class","")},toggleClass:function(i,l){var _,C,O,I,F=typeof i,m1=F==="string"||Array.isArray(i);return L(i)?this.each(function(n1){f(this).toggleClass(i.call(this,n1,we(this),l),l)}):typeof l=="boolean"&&m1?l?this.addClass(i):this.removeClass(i):(_=Se(i),this.each(function(){if(m1)for(I=f(this),O=0;O<_.length;O++)C=_[O],I.hasClass(C)?I.removeClass(C):I.addClass(C);else(i===void 0||F==="boolean")&&(C=we(this),C&&S2.set(this,"__className__",C),this.setAttribute&&this.setAttribute("class",C||i===!1?"":S2.get(this,"__className__")||""))}))},hasClass:function(i){var l,_,C=0;for(l=" "+i+" ";_=this[C++];)if(_.nodeType===1&&(" "+Ne(we(_))+" ").indexOf(l)>-1)return!0;return!1}});var n3=/\r/g;f.fn.extend({val:function(i){var l,_,C,O=this[0];return arguments.length?(C=L(i),this.each(function(I){var F;this.nodeType===1&&(C?F=i.call(this,I,f(this).val()):F=i,F==null?F="":typeof F=="number"?F+="":Array.isArray(F)&&(F=f.map(F,function(m1){return m1==null?"":m1+""})),l=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()],(!l||!("set"in l)||l.set(this,F,"value")===void 0)&&(this.value=F))})):O?(l=f.valHooks[O.type]||f.valHooks[O.nodeName.toLowerCase()],l&&"get"in l&&(_=l.get(O,"value"))!==void 0?_:(_=O.value,typeof _=="string"?_.replace(n3,""):_??"")):void 0}}),f.extend({valHooks:{option:{get:function(i){var l=f.find.attr(i,"value");return l??Ne(f.text(i))}},select:{get:function(i){var l,_,C,O=i.options,I=i.selectedIndex,F=i.type==="select-one",m1=F?null:[],n1=F?I+1:O.length;for(I<0?C=n1:C=F?I:0;C-1)&&(_=!0);return _||(i.selectedIndex=-1),I}}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]={set:function(i,l){if(Array.isArray(l))return i.checked=f.inArray(f(i).val(),l)>-1}},b.checkOn||(f.valHooks[this].get=function(i){return i.getAttribute("value")===null?"on":i.value})});var a3=e.location,a4={guid:Date.now()},P3=/\?/;f.parseXML=function(i){var l,_;if(!i||typeof i!="string")return null;try{l=new e.DOMParser().parseFromString(i,"text/xml")}catch{}return _=l&&l.getElementsByTagName("parsererror")[0],(!l||_)&&f.error("Invalid XML: "+(_?f.map(_.childNodes,function(C){return C.textContent}).join(` +`):i)),l};var x4=/^(?:focusinfocus|focusoutblur)$/,F3=function(i){i.stopPropagation()};f.extend(f.event,{trigger:function(i,l,_,C){var O,I,F,m1,n1,y1,F1,q1,L1=[_||k],t2=p.call(i,"type")?i.type:i,K2=p.call(i,"namespace")?i.namespace.split("."):[];if(I=q1=F=_=_||k,!(_.nodeType===3||_.nodeType===8)&&!x4.test(t2+f.event.triggered)&&(t2.indexOf(".")>-1&&(K2=t2.split("."),t2=K2.shift(),K2.sort()),n1=t2.indexOf(":")<0&&"on"+t2,i=i[f.expando]?i:new f.Event(t2,typeof i=="object"&&i),i.isTrigger=C?2:3,i.namespace=K2.join("."),i.rnamespace=i.namespace?new RegExp("(^|\\.)"+K2.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,i.result=void 0,i.target||(i.target=_),l=l==null?[i]:f.makeArray(l,[i]),F1=f.event.special[t2]||{},!(!C&&F1.trigger&&F1.trigger.apply(_,l)===!1))){if(!C&&!F1.noBubble&&!D(_)){for(m1=F1.delegateType||t2,x4.test(m1+t2)||(I=I.parentNode);I;I=I.parentNode)L1.push(I),F=I;F===(_.ownerDocument||k)&&L1.push(F.defaultView||F.parentWindow||e)}for(O=0;(I=L1[O++])&&!i.isPropagationStopped();)q1=I,i.type=O>1?m1:F1.bindType||t2,y1=(S2.get(I,"events")||Object.create(null))[i.type]&&S2.get(I,"handle"),y1&&y1.apply(I,l),y1=n1&&I[n1],y1&&y1.apply&&te(I)&&(i.result=y1.apply(I,l),i.result===!1&&i.preventDefault());return i.type=t2,!C&&!i.isDefaultPrevented()&&(!F1._default||F1._default.apply(L1.pop(),l)===!1)&&te(_)&&n1&&L(_[t2])&&!D(_)&&(F=_[n1],F&&(_[n1]=null),f.event.triggered=t2,i.isPropagationStopped()&&q1.addEventListener(t2,F3),_[t2](),i.isPropagationStopped()&&q1.removeEventListener(t2,F3),f.event.triggered=void 0,F&&(_[n1]=F)),i.result}},simulate:function(i,l,_){var C=f.extend(new f.Event,_,{type:i,isSimulated:!0});f.event.trigger(C,null,l)}}),f.fn.extend({trigger:function(i,l){return this.each(function(){f.event.trigger(i,l,this)})},triggerHandler:function(i,l){var _=this[0];if(_)return f.event.trigger(i,l,_,!0)}});var C3=/\[\]$/,O3=/\r?\n/g,K4=/^(?:submit|button|image|reset|file)$/i,Q4=/^(?:input|select|textarea|keygen)/i;function K3(i,l,_,C){var O;if(Array.isArray(l))f.each(l,function(I,F){_||C3.test(i)?C(i,F):K3(i+"["+(typeof F=="object"&&F!=null?I:"")+"]",F,_,C)});else if(!_&&r1(l)==="object")for(O in l)K3(i+"["+O+"]",l[O],_,C);else C(i,l)}f.param=function(i,l){var _,C=[],O=function(I,F){var m1=L(F)?F():F;C[C.length]=encodeURIComponent(I)+"="+encodeURIComponent(m1??"")};if(i==null)return"";if(Array.isArray(i)||i.jquery&&!f.isPlainObject(i))f.each(i,function(){O(this.name,this.value)});else for(_ in i)K3(_,i[_],l,O);return C.join("&")},f.fn.extend({serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var i=f.prop(this,"elements");return i?f.makeArray(i):this}).filter(function(){var i=this.type;return this.name&&!f(this).is(":disabled")&&Q4.test(this.nodeName)&&!K4.test(i)&&(this.checked||!A1.test(i))}).map(function(i,l){var _=f(this).val();return _==null?null:Array.isArray(_)?f.map(_,function(C){return{name:l.name,value:C.replace(O3,`\r +`)}}):{name:l.name,value:_.replace(O3,`\r +`)}}).get()}});var I3=/%20/g,U3=/#.*$/,p4=/([?&])_=[^&]*/,Tt=/^(.*?):[ \t]*([^\r\n]*)$/mg,ot=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ut=/^(?:GET|HEAD)$/,Bt=/^\/\//,j4={},i4={},Mt="*/".concat("*"),h4=k.createElement("a");h4.href=a3.href;function At(i){return function(l,_){typeof l!="string"&&(_=l,l="*");var C,O=0,I=l.toLowerCase().match(X2)||[];if(L(_))for(;C=I[O++];)C[0]==="+"?(C=C.slice(1)||"*",(i[C]=i[C]||[]).unshift(_)):(i[C]=i[C]||[]).push(_)}}function Nt(i,l,_,C){var O={},I=i===i4;function F(m1){var n1;return O[m1]=!0,f.each(i[m1]||[],function(y1,F1){var q1=F1(l,_,C);if(typeof q1=="string"&&!I&&!O[q1])return l.dataTypes.unshift(q1),F(q1),!1;if(I)return!(n1=q1)}),n1}return F(l.dataTypes[0])||!O["*"]&&F("*")}function w4(i,l){var _,C,O=f.ajaxSettings.flatOptions||{};for(_ in l)l[_]!==void 0&&((O[_]?i:C||(C={}))[_]=l[_]);return C&&f.extend(!0,i,C),i}function Lt(i,l,_){for(var C,O,I,F,m1=i.contents,n1=i.dataTypes;n1[0]==="*";)n1.shift(),C===void 0&&(C=i.mimeType||l.getResponseHeader("Content-Type"));if(C){for(O in m1)if(m1[O]&&m1[O].test(C)){n1.unshift(O);break}}if(n1[0]in _)I=n1[0];else{for(O in _){if(!n1[0]||i.converters[O+" "+n1[0]]){I=O;break}F||(F=O)}I=I||F}if(I)return I!==n1[0]&&n1.unshift(I),_[I]}function Q3(i,l,_,C){var O,I,F,m1,n1,y1={},F1=i.dataTypes.slice();if(F1[1])for(F in i.converters)y1[F.toLowerCase()]=i.converters[F];for(I=F1.shift();I;)if(i.responseFields[I]&&(_[i.responseFields[I]]=l),!n1&&C&&i.dataFilter&&(l=i.dataFilter(l,i.dataType)),n1=I,I=F1.shift(),I){if(I==="*")I=n1;else if(n1!=="*"&&n1!==I){if(F=y1[n1+" "+I]||y1["* "+I],!F){for(O in y1)if(m1=O.split(" "),m1[1]===I&&(F=y1[n1+" "+m1[0]]||y1["* "+m1[0]],F)){F===!0?F=y1[O]:y1[O]!==!0&&(I=m1[0],F1.unshift(m1[1]));break}}if(F!==!0)if(F&&i.throws)l=F(l);else try{l=F(l)}catch(q1){return{state:"parsererror",error:F?q1:"No conversion from "+n1+" to "+I}}}}return{state:"success",data:l}}f.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:a3.href,type:"GET",isLocal:ot.test(a3.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Mt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":f.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(i,l){return l?w4(w4(i,f.ajaxSettings),l):w4(f.ajaxSettings,i)},ajaxPrefilter:At(j4),ajaxTransport:At(i4),ajax:function(i,l){typeof i=="object"&&(l=i,i=void 0),l=l||{};var _,C,O,I,F,m1,n1,y1,F1,q1,L1=f.ajaxSetup({},l),t2=L1.context||L1,K2=L1.context&&(t2.nodeType||t2.jquery)?f(t2):f.event,Ee=f.Deferred(),se=f.Callbacks("once memory"),We=L1.statusCode||{},Ge={},_3={},y3="canceled",ve={readyState:0,getResponseHeader:function(ye){var Fe;if(n1){if(!I)for(I={};Fe=Tt.exec(O);)I[Fe[1].toLowerCase()+" "]=(I[Fe[1].toLowerCase()+" "]||[]).concat(Fe[2]);Fe=I[ye.toLowerCase()+" "]}return Fe==null?null:Fe.join(", ")},getAllResponseHeaders:function(){return n1?O:null},setRequestHeader:function(ye,Fe){return n1==null&&(ye=_3[ye.toLowerCase()]=_3[ye.toLowerCase()]||ye,Ge[ye]=Fe),this},overrideMimeType:function(ye){return n1==null&&(L1.mimeType=ye),this},statusCode:function(ye){var Fe;if(ye)if(n1)ve.always(ye[ve.status]);else for(Fe in ye)We[Fe]=[We[Fe],ye[Fe]];return this},abort:function(ye){var Fe=ye||y3;return _&&_.abort(Fe),s4(0,Fe),this}};if(Ee.promise(ve),L1.url=((i||L1.url||a3.href)+"").replace(Bt,a3.protocol+"//"),L1.type=l.method||l.type||L1.method||L1.type,L1.dataTypes=(L1.dataType||"*").toLowerCase().match(X2)||[""],L1.crossDomain==null){m1=k.createElement("a");try{m1.href=L1.url,m1.href=m1.href,L1.crossDomain=h4.protocol+"//"+h4.host!=m1.protocol+"//"+m1.host}catch{L1.crossDomain=!0}}if(L1.data&&L1.processData&&typeof L1.data!="string"&&(L1.data=f.param(L1.data,L1.traditional)),Nt(j4,L1,l,ve),n1)return ve;y1=f.event&&L1.global,y1&&f.active++===0&&f.event.trigger("ajaxStart"),L1.type=L1.type.toUpperCase(),L1.hasContent=!Ut.test(L1.type),C=L1.url.replace(U3,""),L1.hasContent?L1.data&&L1.processData&&(L1.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&(L1.data=L1.data.replace(I3,"+")):(q1=L1.url.slice(C.length),L1.data&&(L1.processData||typeof L1.data=="string")&&(C+=(P3.test(C)?"&":"?")+L1.data,delete L1.data),L1.cache===!1&&(C=C.replace(p4,"$1"),q1=(P3.test(C)?"&":"?")+"_="+a4.guid+++q1),L1.url=C+q1),L1.ifModified&&(f.lastModified[C]&&ve.setRequestHeader("If-Modified-Since",f.lastModified[C]),f.etag[C]&&ve.setRequestHeader("If-None-Match",f.etag[C])),(L1.data&&L1.hasContent&&L1.contentType!==!1||l.contentType)&&ve.setRequestHeader("Content-Type",L1.contentType),ve.setRequestHeader("Accept",L1.dataTypes[0]&&L1.accepts[L1.dataTypes[0]]?L1.accepts[L1.dataTypes[0]]+(L1.dataTypes[0]!=="*"?", "+Mt+"; q=0.01":""):L1.accepts["*"]);for(F1 in L1.headers)ve.setRequestHeader(F1,L1.headers[F1]);if(L1.beforeSend&&(L1.beforeSend.call(t2,ve,L1)===!1||n1))return ve.abort();if(y3="abort",se.add(L1.complete),ve.done(L1.success),ve.fail(L1.error),_=Nt(i4,L1,l,ve),!_)s4(-1,"No Transport");else{if(ve.readyState=1,y1&&K2.trigger("ajaxSend",[ve,L1]),n1)return ve;L1.async&&L1.timeout>0&&(F=e.setTimeout(function(){ve.abort("timeout")},L1.timeout));try{n1=!1,_.send(Ge,s4)}catch(ye){if(n1)throw ye;s4(-1,ye)}}function s4(ye,Fe,o4,Z4){var p3,_4,Ze,B3,X3,E3=Fe;n1||(n1=!0,F&&e.clearTimeout(F),_=void 0,O=Z4||"",ve.readyState=ye>0?4:0,p3=ye>=200&&ye<300||ye===304,o4&&(B3=Lt(L1,ve,o4)),!p3&&f.inArray("script",L1.dataTypes)>-1&&f.inArray("json",L1.dataTypes)<0&&(L1.converters["text script"]=function(){}),B3=Q3(L1,B3,ve,p3),p3?(L1.ifModified&&(X3=ve.getResponseHeader("Last-Modified"),X3&&(f.lastModified[C]=X3),X3=ve.getResponseHeader("etag"),X3&&(f.etag[C]=X3)),ye===204||L1.type==="HEAD"?E3="nocontent":ye===304?E3="notmodified":(E3=B3.state,_4=B3.data,Ze=B3.error,p3=!Ze)):(Ze=E3,(ye||!E3)&&(E3="error",ye<0&&(ye=0))),ve.status=ye,ve.statusText=(Fe||E3)+"",p3?Ee.resolveWith(t2,[_4,E3,ve]):Ee.rejectWith(t2,[ve,E3,Ze]),ve.statusCode(We),We=void 0,y1&&K2.trigger(p3?"ajaxSuccess":"ajaxError",[ve,L1,p3?_4:Ze]),se.fireWith(t2,[ve,E3]),y1&&(K2.trigger("ajaxComplete",[ve,L1]),--f.active||f.event.trigger("ajaxStop")))}return ve},getJSON:function(i,l,_){return f.get(i,l,_,"json")},getScript:function(i,l){return f.get(i,void 0,l,"script")}}),f.each(["get","post"],function(i,l){f[l]=function(_,C,O,I){return L(C)&&(I=I||O,O=C,C=void 0),f.ajax(f.extend({url:_,type:l,dataType:I,data:C,success:O},f.isPlainObject(_)&&_))}}),f.ajaxPrefilter(function(i){var l;for(l in i.headers)l.toLowerCase()==="content-type"&&(i.contentType=i.headers[l]||"")}),f._evalUrl=function(i,l,_){return f.ajax({url:i,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(C){f.globalEval(C,l,_)}})},f.fn.extend({wrapAll:function(i){var l;return this[0]&&(L(i)&&(i=i.call(this[0])),l=f(i,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&l.insertBefore(this[0]),l.map(function(){for(var _=this;_.firstElementChild;)_=_.firstElementChild;return _}).append(this)),this},wrapInner:function(i){return L(i)?this.each(function(l){f(this).wrapInner(i.call(this,l))}):this.each(function(){var l=f(this),_=l.contents();_.length?_.wrapAll(i):l.append(i)})},wrap:function(i){var l=L(i);return this.each(function(_){f(this).wrapAll(l?i.call(this,_):i)})},unwrap:function(i){return this.parent(i).not("body").each(function(){f(this).replaceWith(this.childNodes)}),this}}),f.expr.pseudos.hidden=function(i){return!f.expr.pseudos.visible(i)},f.expr.pseudos.visible=function(i){return!!(i.offsetWidth||i.offsetHeight||i.getClientRects().length)},f.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch{}};var j3={0:200,1223:204},c4=f.ajaxSettings.xhr();b.cors=!!c4&&"withCredentials"in c4,b.ajax=c4=!!c4,f.ajaxTransport(function(i){var l,_;if(b.cors||c4&&!i.crossDomain)return{send:function(C,O){var I,F=i.xhr();if(F.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(I in i.xhrFields)F[I]=i.xhrFields[I];i.mimeType&&F.overrideMimeType&&F.overrideMimeType(i.mimeType),!i.crossDomain&&!C["X-Requested-With"]&&(C["X-Requested-With"]="XMLHttpRequest");for(I in C)F.setRequestHeader(I,C[I]);l=function(m1){return function(){l&&(l=_=F.onload=F.onerror=F.onabort=F.ontimeout=F.onreadystatechange=null,m1==="abort"?F.abort():m1==="error"?typeof F.status!="number"?O(0,"error"):O(F.status,F.statusText):O(j3[F.status]||F.status,F.statusText,(F.responseType||"text")!=="text"||typeof F.responseText!="string"?{binary:F.response}:{text:F.responseText},F.getAllResponseHeaders()))}},F.onload=l(),_=F.onerror=F.ontimeout=l("error"),F.onabort!==void 0?F.onabort=_:F.onreadystatechange=function(){F.readyState===4&&e.setTimeout(function(){l&&_()})},l=l("abort");try{F.send(i.hasContent&&i.data||null)}catch(m1){if(l)throw m1}},abort:function(){l&&l()}}}),f.ajaxPrefilter(function(i){i.crossDomain&&(i.contents.script=!1)}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(i){return f.globalEval(i),i}}}),f.ajaxPrefilter("script",function(i){i.cache===void 0&&(i.cache=!1),i.crossDomain&&(i.type="GET")}),f.ajaxTransport("script",function(i){if(i.crossDomain||i.scriptAttrs){var l,_;return{send:function(C,O){l=f("

cheatsheet

March 1, 2021

Running short-lived container to compile source code
$ sudo docker run --rm -it -v ${PWD}:/app -w /app openjdk:11-jdk-slim /bin/sh -c ./gradlew buildRun
-
Rsync over SSH on Spesific Port
$ rsync -avzhe 'ssh -p [port_number]' -P [user@remote_ip]:/path/to/file/source /path/to/file/destination
-
Scan IP on Network
$ nmap -sP [ip_address/prefix]
-
Search Available Version of Spesific Package on Debian Based OS
$ apt list -a <package_name>
-
Install Spesific Kubernetes Version
#example version 1.15.x#
-$ sudo apt update;sudo apt install -qy kubelet=1.15.5-00 kubectl=1.15.5-00 kubeadm=1.15.5-00
-
Open Spesific Port on Centos 7
iptables -I INPUT 5 -p tcp -m state --state NEW -m tcp --dport 9100 -j ACCEPT
-
Replace String Using Sed
sed -i 's/old-string/new-string/g'
-
Find and copy files
find /var/cache/dnf -iname "*.rpm" -exec cp {} packages/ \;
-
Encrypt secret envar value using Google KMS
echo -n "This is my secret" | gcloud kms encrypt --plaintext-file=- --ciphertext-file=- --location=global --keyring=mykeyring --key=myappkey | base64 -w 0
-
Encrypt file using Google KMS
gcloud kms encrypt \
-    --key myappkey \
-    --keyring mykeyring \
-    --location global  \
-    --plaintext-file application.properties \
-    --ciphertext-file application.properties.enc
-
Check DNS record
$ dig +noall +answer google.com
-
-google.com.		204	IN	A	74.125.24.102
-google.com.		204	IN	A	74.125.24.138
-google.com.		204	IN	A	74.125.24.139
-google.com.		204	IN	A	74.125.24.101
-google.com.		204	IN	A	74.125.24.100
-google.com.		204	IN	A	74.125.24.113
-
Check service port
$ getent services 53
-
-domain                53/tcp
-
Reset Docker Environment
docker container stop $(docker container ls -aq) && docker system prune -af --volumes
-
Troubleshoot SELinux Issue on RHEL/CentOS
1. Find your error from journalctl or audit.log then get the audit ID.
-2. grep 1624284378.419:2066 /var/log/audit/audit.log |audit2why
-
Replace multiple file on OSX
find /to/my/path -type f -name "*.yaml" -exec sed -i '' -e 's/halo.com/hai.id/g' {} \;
-
Generate Kubernetes secret and configmap YAML manifest
# Secret
-kubectl create secret generic my-config --from-file=configuration/ -o yaml --dry-run
-
-# Configmap
-kubectl create configmap my-config --from-file=configuration/ -o yaml --dry-run
-
Generate docker credential secret for Kubernetes
kubectl create -n registry secret docker-registry registry-auth-dockerconfig-secret --docker-server=registry.rahmatawe.com --docker-username=[YOUR_USERNAME] --docker-password=[YOUR_REGISTRY_PASSWORD] --dry-run=client -oyaml
-

\ No newline at end of file diff --git a/blog/config.yaml b/blog/config.yaml deleted file mode 100644 index f40b2df..0000000 --- a/blog/config.yaml +++ /dev/null @@ -1,3 +0,0 @@ -title: New Site Title -baseURL: 'http://newsite.com' -theme: some-theme diff --git a/blog/deploying-openstack-hci/imgs/2020-os_topology.png b/blog/deploying-openstack-hci/imgs/2020-os_topology.png deleted file mode 100644 index 7451771..0000000 Binary files a/blog/deploying-openstack-hci/imgs/2020-os_topology.png and /dev/null differ diff --git a/blog/deploying-openstack-hci/index.html b/blog/deploying-openstack-hci/index.html deleted file mode 100644 index 42e1a1d..0000000 --- a/blog/deploying-openstack-hci/index.html +++ /dev/null @@ -1,285 +0,0 @@ -RahmatAwe -

Deploying HCI Openstack using Kolla Ansible

October 17, 2020

IP Information

HostnameStorage Interface (enp1s0)Openstack Interface (enp7s0)
server010.50.50.1010.51.51.10
server110.50.50.1110.51.51.11
server210.50.50.1210.51.51.12

A. Deploy Ceph Cluster

In this first stage, I will deploy Ceph Cluster using Ceph Ansible. Ceph Ansible has two different approach when deploy Ceph Cluster: 1) Systemd based and 2) Container based. In here, I will use container based deployment which is use Podman as container runtime.

1. Install required packages

yum install git python3-pip vim -y
-pip3 install ansible
-

2. Clone Ceph Ansible

git clone https://github.com/ceph/ceph-ansible
-cd ceph-ansible
-git checkout stable-5.0
-

3. Copy required files

cp site-container.yml.sample site-container.yml
-cp group_vars/all.yml.sample group_vars/all.yml
-cp group_vars/osds.yml.sample group_vars/osds.yml
-

4. Create inventory

vim inventory 
-
[mons]
-10.50.50.1[0:2]
-
-[mgrs]
-10.50.50.1[0:2]
-
-[grafana-server]
-10.50.50.10
-
-[osds]
-10.50.50.1[0:2]
-
-[mdss]
-10.50.50.10
-
-[clients]
-10.50.50.10
-

5. Configure ceph ansible variable

vim group_vars/all.yml
-
ceph_origin: repository
-ceph_repository: community
-ceph_repository_type: cdn
-ceph_stable_release: octopus
-containerized_deployment: true
-ceph_docker_image: ceph/daemon
-ceph_docker_image_tag: latest-octopus
-ceph_docker_registry: docker.io
-
-copy_admin_key: True
-cephx: true
-
-public_network: 10.50.50.0/24
-cluster_network: 10.50.50.0/24
-monitor_interface: enp1s0
-dashboard_admin_password: yasmin88
-grafana_admin_password: yasmin88
-
vim group_vars/osds.yml
-
osd_objectstore: bluestore
-devices:
-  - /dev/vdb
-  - /dev/vdc
-
vim site-container.yml
-
...
-- hosts:
-  - mons
-  - osds
-  - mdss
-  - clients
-  - mgrs
-  - grafana-server
-...
-

6. Deploy containerized ceph cluster

ansible-playbook -i inventory site-container.yml
-

7. Install epel-release and ceph client on each node

yum install epel-release -y
-rpm -ivh https://download.ceph.com/rpm-octopus/el8/noarch/ceph-release-1-1.el8.noarch.rpm
-yum install ceph-common -y
-

8. Verify Ceph Cluster

$ ceph -s
-
-  cluster:
-    id:     b9a5eeab-b69a-4779-a990-fd76d7856205
-    health: HEALTH_OK
- 
-  services:
-    mon: 3 daemons, quorum server0,server1,server2 (age 27h)
-    mgr: server1(active, since 8d), standbys: server2, server0
-    mds: cephfs:1 {0=server0=up:active}
-    osd: 6 osds: 6 up (since 8d), 6 in (since 8d)
- 
-  task status:
-    scrub status:
-        mds.server0: idle
- 
-  data:
-    pools:   7 pools, 145 pgs
-    objects: 972 objects, 3.1 GiB
-    usage:   134 GiB used, 226 GiB / 360 GiB avail
-    pgs:     145 active+clean
-

B. Create Ceph Pool and Client for Openstack

1. Create Openstack pool

ceph osd pool create volumes
-ceph osd pool create images
-ceph osd pool create backups
-ceph osd pool create vms
-
-rbd pool init volumes
-rbd pool init images
-rbd pool init backups
-rbd pool init vms
-

2. Share ceph config to each server

ssh 10.50.50.11 sudo tee /etc/ceph/ceph.conf </etc/ceph/ceph.conf
-ssh 10.50.50.12 sudo tee /etc/ceph/ceph.conf </etc/ceph/ceph.conf
-

3. Setup Client Configuration

ceph auth get-or-create client.glance mon 'profile rbd' osd 'profile rbd pool=images' mgr 'profile rbd pool=images'
-ceph auth get-or-create client.cinder mon 'profile rbd' osd 'profile rbd pool=volumes, profile rbd pool=vms, profile rbd-read-only pool=images' mgr 'profile rbd pool=volumes, profile rbd pool=vms'
-ceph auth get-or-create client.cinder-backup mon 'profile rbd' osd 'profile rbd pool=backups' mgr 'profile rbd pool=backups'
-

4. Setup Ceph Client

ceph auth get-or-create client.glance | ssh 10.50.50.10 sudo tee /etc/ceph/ceph.client.glance.keyring
-ceph auth get-or-create client.cinder | ssh 10.50.50.10 sudo tee /etc/ceph/ceph.client.cinder.keyring
-ceph auth get-or-create client.cinder-backup | ssh 10.50.50.10 sudo tee /etc/ceph/ceph.client.cinder-backup.keyring
-
-ceph auth get-or-create client.glance | ssh 10.50.50.11 sudo tee /etc/ceph/ceph.client.glance.keyring
-ceph auth get-or-create client.cinder | ssh 10.50.50.11 sudo tee /etc/ceph/ceph.client.cinder.keyring
-ceph auth get-or-create client.cinder-backup | ssh 10.50.50.11 sudo tee /etc/ceph/ceph.client.cinder-backup.keyring
-
-ceph auth get-or-create client.glance | ssh 10.50.50.12 sudo tee /etc/ceph/ceph.client.glance.keyring
-ceph auth get-or-create client.cinder | ssh 10.50.50.12 sudo tee /etc/ceph/ceph.client.cinder.keyring
-ceph auth get-or-create client.cinder-backup | ssh 10.50.50.12 sudo tee /etc/ceph/ceph.client.cinder-backup.keyring
-

5. Verify Ceph Pool List

$ ceph osd lspools
-
-1 device_health_metrics
-2 cephfs_data
-3 cephfs_metadata
-6 volumes
-7 images
-8 backups
-9 vms
-

Openstack Cluster Deployment

0. Preflight

Ensure each server could be accessed without password. If not, create ssh keypair then share its public key to each servers. I do this from server0.

ssh-keygen
-

After keypair is generated, copy its public key to server0,server1 and server2.

ssh-copy-id root@server0
-ssh-copy-id root@server1
-ssh-copy-id root@server2
-

1. Install kolla ansible

pip3 install kolla-ansible==10.0
-

2. Create kolla directory

mkdir /etc/kolla
-

3. Copy configuration to kolla directory

cp -r /usr/local/share/kolla-ansible/etc_examples/kolla/* /etc/kolla/
-

4. Setup ansible.cfg

mkdir /etc/ansible
-vim /etc/ansible/ansible.cfg
-
[defaults]
-host_key_checking=False
-pipelining=True
-forks=100
-

5. Setup inventory

cd
-/usr/local/share/kolla-ansible/ansible/inventory/multinode .
-vim multinode
-
[control]
-server[0]
-
-[network]
-server[0]
-
-[compute]
-server[1:2]
-
-[monitoring]
-server[0:2]
-
-[storage]
-server[0:2]
-

6. Generate Openstack Services Password

kolla-genpwd
-

7. Setup Global Variables

In here, I use 2 VIP address for internal services access (10.51.51.100) and public access (10.51.51.101). Both of them should be on the same subnet. Parameter neutron_external_interface is used to define interface that will be used as provider network (for floating IP).

vim /etc/kolla/globals.yml
-
---
-kolla_base_distro: "centos"
-kolla_install_type: "binary"
-openstack_release: "ussury"
-kolla_internal_vip_address: "10.51.51.100"
-kolla_external_vip_address: "10.51.51.101"
-kolla_enable_tls_external: "yes"
-storage_interface: "enp1s0"
-network_interface: "enp7s0"
-neutron_external_interface: "enp8s0"
-neutron_plugin_agent: "ovn"
-enable_openstack_core: "yes"
-enable_cinder: "yes"
-enable_haproxy: "yes"
-enable_neutron_provider_networks: "yes"
-nova_compute_virt_type: "kvm"
-
-
-enable_ceph: "no"
-glance_backend_ceph: "yes"
-cinder_backend_ceph: "yes"
-nova_backend_ceph: "yes"
-

Openstack Services Configuration

1. Create Glance Configuration Directory

mkdir -p /etc/kolla/config/glance/
-

2. Copy ceph configuration for glance to kolla

cp /etc/ceph/ceph.conf /etc/kolla/config/glance/
-cp /etc/ceph/ceph.client.glance.keyring /etc/kolla/config/glance/
-

3. Create Cinder Configuration Directory

mkdir -p /etc/kolla/config/cinder/cinder-volume
-mkdir /etc/kolla/config/cinder/cinder-backup
-

4. Copy ceph configuration for cinder to kolla

cp /etc/ceph/ceph.client.cinder.keyring /etc/kolla/config/cinder/cinder-volume/
-cp /etc/ceph/ceph.client.cinder.keyring /etc/kolla/config/cinder/cinder-backup/
-cp /etc/ceph/ceph.client.cinder-backup.keyring /etc/kolla/config/cinder/cinder-backup/
-

5. Create Nova Configuration Directory

mkdir /etc/kolla/config/nova
-

6. Copy ceph configuration for nova to kolla

cp /etc/ceph/ceph.conf /etc/kolla/config/nova/
-cp /etc/ceph/ceph.client.cinder.keyring /etc/kolla/config/nova/
-cp /etc/ceph/ceph.client.cinder.keyring /etc/kolla/config/nova/ceph.client.nova.keyring
-

7. Add Glance Configuration

vim /etc/kolla/config/glance/glance-api.conf
-
[glance_store]
-stores = rbd
-default_store = rbd
-rbd_store_pool = images
-rbd_store_user = glance
-rbd_store_ceph_conf = /etc/ceph/ceph.conf
-

8. Add Cinder Configuration

cat /etc/kolla/passwords.yml |grep cinder_rbd_secret_uuid
-vim /etc/kolla/config/cinder.conf
-
[DEFAULT]
-enabled_backends=rbd-1
-backup_ceph_conf=/etc/ceph/ceph.conf
-backup_ceph_user=cinder-backup
-backup_ceph_chunk_size = 134217728
-backup_ceph_pool=backups
-backup_driver = cinder.backup.drivers.ceph.CephBackupDriver
-backup_ceph_stripe_unit = 0
-backup_ceph_stripe_count = 0
-restore_discard_excess_bytes = true
-
-[rbd-1]
-rbd_ceph_conf=/etc/ceph/ceph.conf
-rbd_user=cinder
-backend_host=rbd:volumes
-rbd_pool=volumes
-volume_backend_name=rbd-1
-volume_driver=cinder.volume.drivers.rbd.RBDDriver
-rbd_secret_uuid = 3f2ee568-97a8-4416-9865-a4567aa69b53 #add here
-

9. Add nova configuration

vim /etc/kolla/config/nova.conf
-
[libvirt]
-images_rbd_pool=vms
-images_type=rbd
-images_rbd_ceph_conf=/etc/ceph/ceph.conf
-rbd_user=cinder
-

10. Add Heat Configuration

vim /etc/kolla/config/heat.conf
-
[DEFAULT]
-heat_metadata_server_url = http://10.51.51.100:8000
-heat_waitcondition_server_url = http://10.51.51.100:8000/v1/waitcondition
-server_keystone_endpoint_type = internal
-
-[clients]
-insecure = true
-
-[clients_cinder]
-endpoint_type = internalURL
-insecure = true
-
-[clients_glance]
-endpoint_type = internalURL
-insecure = true
-
-[clients_heat]
-endpoint_type = internalURL
-insecure = true
-url = http://10.51.51.100:8004/v1/%(tenant_id)s
-
-[clients_keystone]
-endpoint_type = internalURL
-insecure = true
-auth_uri = http://10.51.51.100:5000
-
-[clients_neutron]
-endpoint_type = internalURL
-insecure = true
-
-[clients_nova]
-endpoint_type = internalURL
-insecure = true
-
-[clients_octavia]
-endpoint_type = internalURL
-insecure = true
-

11. Add neutron configuration

vim /etc/kolla/config/neutron.conf
-
[DEFAULT]
-core_plugin = neutron.plugins.ml2.plugin.Ml2Plugin
-service_plugins=trunk,ovn-router
-router_scheduler_driver=neutron.scheduler.l3_agent_scheduler.ChanceScheduler
-notify_nova_on_port_status_changes=True
-notify_nova_on_port_data_changes=True
-
mkdir /etc/kolla/config/neutron
-vim /etc/kolla/config/neutron/ml2_conf.ini
-
[ml2]
-mechanism_drivers = ovn
-
-[securitygroup]
-enable_security_group=True
-firewall_driver=neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
-

12. Generate Self Signed Certificate for Openstack

kolla-ansible -i multinode certificates
-

13. Deployment OpenStack

kolla-ansible -i multinode bootstrap-servers
-kolla-ansible -i multinode prechecks
-kolla-ansible -i multinode deploy
-kolla-ansible -i multinode post-deploy
-

18. Testing Fungsional

It is a script that will create private network,public network, cirros image, and flavors. You can download it in here.

./init-runonce
-

\ No newline at end of file diff --git a/blog/deploying-upi-okd/imgs/okd-dashboard.png b/blog/deploying-upi-okd/imgs/okd-dashboard.png deleted file mode 100644 index d55c5b1..0000000 Binary files a/blog/deploying-upi-okd/imgs/okd-dashboard.png and /dev/null differ diff --git a/blog/deploying-upi-okd/imgs/okd-topology.png b/blog/deploying-upi-okd/imgs/okd-topology.png deleted file mode 100644 index 262ec0a..0000000 Binary files a/blog/deploying-upi-okd/imgs/okd-topology.png and /dev/null differ diff --git a/blog/deploying-upi-okd/imgs/okdtopology.png b/blog/deploying-upi-okd/imgs/okdtopology.png deleted file mode 100644 index 0a3a28b..0000000 Binary files a/blog/deploying-upi-okd/imgs/okdtopology.png and /dev/null differ diff --git a/blog/deploying-upi-okd/index.html b/blog/deploying-upi-okd/index.html deleted file mode 100644 index 1fe5b68..0000000 --- a/blog/deploying-upi-okd/index.html +++ /dev/null @@ -1,882 +0,0 @@ -RahmatAwe -

Deploying UPI OKD 4.5 Cluster

October 17, 2020

Environment

Design Topology OKD

IP AddressHostnameOSDescription
10.10.51.9okd-bastionCentOS 8DNS Server, DHCP Server, NTP Server, PXE Server, LDAP Server
10.10.51.10okd-bootstrapFedora COreOSBootstrap Server. Temporary only, could be delete after bootstrapping done.
10.10.51.11okd-master01Fedora CoreOSMaster
10.10.51.12okd-master02Fedora CoreOSMaster
10.10.51.13okd-master03Fedora CoreOSMaster
10.10.51.21okd-worker01Fedora CoreOSWorker
10.10.51.22okd-worker02Fedora CoreOSWorker
10.10.51.31okd-lb1CentOS 8Load Balancer
10.10.51.32okd-lb2CentOS 8Load Balancer

Part 1: Bastion/Helper Server

1. Setup DNS Server

1.1. Install Bind Packages

yum install -y vim bind bind-utils
-

1.2. Define Zone in the end of file

vim /etc/named.conf
-

-options {
-	directory 	"/var/named";
-	dump-file 	"/var/named/data/cache_dump.db";
-	statistics-file "/var/named/data/named_stats.txt";
-	memstatistics-file "/var/named/data/named_mem_stats.txt";
-	secroots-file	"/var/named/data/named.secroots";
-	recursing-file	"/var/named/data/named.recursing";
-	allow-query     { localhost;10.10.51.0/24; };
-    listen-on port 53 { any; };
-
-	recursion yes;
-        forwarders {
-                8.8.8.8;
-                8.8.4.4;
-        };
-	dnssec-enable yes;
-	dnssec-validation yes;
-
-	managed-keys-directory "/var/named/dynamic";
-
-	pid-file "/run/named/named.pid";
-	session-keyfile "/run/named/session.key";
-
-	/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
-	include "/etc/crypto-policies/back-ends/bind.config";
-};
-
-logging {
-        channel default_debug {
-                file "data/named.run";
-                severity dynamic;
-        };
-};
-
-zone "." IN {
-	type hint;
-	file "named.ca";
-};
-
-zone "openshift.riupie.io" {
-        type master;
-        file "dynamic/forward.db";
-};
-
-zone "51.10.10.in-addr.arpa" {
-        type master;
-        file "dynamic/reverse.db";
-};
-
-include "/etc/named.rfc1912.zones";
-include "/etc/named.root.key";
-

1.3. Create zone files

vim /var/named/dynamic/forward.db
-
$TTL 1W
-@	IN	SOA	ns1.openshift.riupie.io.	root (
-			2020092301	; serial
-			3H		    ; refresh (3 hours)
-			30M		    ; retry (30 minutes)
-			2W	    	; expiry (2 weeks)
-			1W )		; minimum (1 week)
-	IN	NS	ns1.openshift.riupie.io.
-	IN	MX 10	smtp.openshift.riupie.io.
-;
-; 
-ns1	  IN	A	10.10.51.9
-smtp	IN	A	10.10.51.9
-;
-bastion	IN	A	10.10.51.9
-;
-; The api points to the IP of your load balancer
-api		IN	A	10.10.51.100
-api-int		IN	A	10.10.51.100
-;
-; The wildcard also points to the load balancer
-*.apps		IN	A	10.10.51.100
-;
-; Create entry for the bootstrap host
-bootstrap	IN	A	10.10.51.10
-;
-; Create entries for the master hosts
-master01		IN	A	10.10.51.11
-master02		IN	A	10.10.51.12
-master03		IN	A	10.10.51.13
-;
-; Create entries for the worker hosts
-worker01		IN	A	10.10.51.21
-worker02		IN	A	10.10.51.22
-;
-; The ETCd cluster lives on the masters...so point these to the IP of the masters
-etcd-0	IN	A	10.10.51.11
-etcd-1	IN	A	10.10.51.12
-etcd-2	IN	A	10.10.51.13
-;
-; The SRV records are IMPORTANT....make sure you get these right...note the trailing dot at the end...
-_etcd-server-ssl._tcp	IN	SRV	0 10 2380 etcd-0.openshift.riupie.io.
-_etcd-server-ssl._tcp	IN	SRV	0 10 2380 etcd-1.openshift.riupie.io.
-_etcd-server-ssl._tcp	IN	SRV	0 10 2380 etcd-2.openshift.riupie.io.
-;
-

1.4. Create Reverse Zone File

vim /var/named/dynamic/reverse.db
-
$TTL 1W
-@	IN	SOA	ns1.openshift.riupie.io.	root (
-			2020092301	; serial
-			3H		    ; refresh (3 hours)
-			30M		    ; retry (30 minutes)
-			2W		    ; expiry (2 weeks)
-			1W )		; minimum (1 week)
-	IN	NS	ns1.openshift.riupie.io.
-;
-; syntax is "last octet" and the host must have fqdn with trailing dot
-
-9   IN  PTR bastion.openshift.riupie.io.
-
-11	IN	PTR	master01.openshift.riupie.io.
-12	IN	PTR	master02.openshift.riupie.io.
-13	IN	PTR	master03.openshift.riupie.io.
-;
-10	IN	PTR	bootstrap.openshift.riupie.io.
-;
-100	IN	PTR	api.openshift.riupie.io.
-100	IN	PTR	api-int.openshift.riupie.io.
-;
-21	IN	PTR	worker01.openshift.riupie.io.
-22	IN	PTR	worker02.openshift.riupie.io.
-;
-

1.5. Enable and start bind service

systemctl enable named
-systemctl restart named
-systemctl status named
-

1.6. Allow firewall

firewall-cmd   --permanent --add-service=dns --zone=public  --permanent
-firewall-cmd --reload
-

1.7. Change DNS Server on Bastion

#Change DNS Server
-nmtui
-
-#Restart interface
-ifdown ens3;ifup en3
-

1.8. Verify DNS Server works

nslookup api.openshift.riupie.io
-

2. Setup DHCP Server

2.1. Install dhcp-server package

yum install dhcp-server -y
-

2.2. Configure DHCP Leases

vim /etc/dhcp/dhcpd.conf
-
ddns-update-style interim;
-ignore client-updates;
-authoritative;
-allow booting;
-allow bootp;
-allow unknown-clients;
-
-# internal subnet for my DHCP Server
-subnet 10.10.51.0 netmask 255.255.255.0 {
-range 10.10.51.200 10.10.51.210;
-option domain-name-servers 10.10.51.9;
-option routers 10.10.51.1;
-option broadcast-address 10.10.51.255;
-default-lease-time 600;
-max-lease-time 7200;
-
-host bootstrap.openshift.riupie.io { hardware ethernet 52:54:00:19:24:45; fixed-address 10.10.51.10; }
-
-host master01.openshift.riupie.io { hardware ethernet 52:54:00:63:9b:49; fixed-address 10.10.51.11; }
-host master02.openshift.riupie.io { hardware ethernet 52:54:00:06:2c:9b; fixed-address 10.10.51.12; }
-host master03.openshift.riupie.io { hardware ethernet 52:54:00:93:87:91; fixed-address 10.10.51.13; }
-
-host worker01.openshift.riupie.io { hardware ethernet 52:54:00:10:d4:f3; fixed-address 10.10.51.21; }
-host worker02.openshift.riupie.io { hardware ethernet 52:54:00:18:59:d2; fixed-address 10.10.51.22; }
-
-deny unknown-clients;
-
-
-# IP of PXE Server
-next-server 10.10.51.9;
-if exists user-class and option user-class = "iPXE" {
-
-filename "http://bastion.openshift.riupie.io:8080/boot.ipxe";
-
-} else {
-
-filename "undionly.kpxe";
-
-}
-}
-

2.3. Restart and enable dhcp service

systemctl enable dhcpd
-systemctl restart dhcpd
-systemctl status dhcpd
-

2.4. Set firewall

sudo firewall-cmd --add-service=dhcp --permanent
-sudo firewall-cmd --reload
-

3. Setup PXE Boot Server

3.1. Install tftp-server package

yum install tftp-server ipxe-bootimgs -y
-
-ln -s /usr/share/ipxe/undionly.kpxe /var/lib/tftpboot
-

3.2. Download and Extract Matchbox

curl -LO https://github.com/poseidon/matchbox/releases/download/v0.8.3/matchbox-v0.8.3-linux-amd64.tar.gz
-tar xvzf matchbox-v0.8.3-linux-amd64.tar.gz 
-

3.3. Move matchbox binary

cd matchbox-v0.8.3-linux-amd64
-cp matchbox /usr/local/bin/
-

3.4. Create matchbox user for matchbox service

useradd -U matchbox
-

3.5. Create configuration directory for matchbox

mkdir -p /var/lib/matchbox/{assets,groups,ignition,profiles}
-
-chown -R matchbox:matchbox /var/lib/matchbox
-

3.6. Start and enable TFTP Service

systemctl enable tftp
-systemctl restart tftp
-

3.7. Set firewalld for TFTP

firewall-cmd --permanent --add-service=tftp
-firewall-cmd --reload
-

3.8. Create, enable and start matchbox systemd service

cp contrib/systemd/matchbox-local.service /etc/systemd/system/matchbox.service
-
-systemctl daemon-reload
-systemctl enable matchbox
-systemctl restart matchbox
-

3.9. Download Fedora CoreOS assets

cd /var/lib/matchbox/assets
-
-wget https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/32.20200907.3.0/x86_64/fedora-coreos-32.20200907.3.0-live-kernel-x86_64 -O fcos-32-kernel
-wget https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/32.20200907.3.0/x86_64/fedora-coreos-32.20200907.3.0-live-kernel-x86_64.sig -O fcos-32-kernel.sig
-
-wget https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/32.20200907.3.0/x86_64/fedora-coreos-32.20200907.3.0-live-initramfs.x86_64.img -O fcos-32-initramfs.img
-wget https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/32.20200907.3.0/x86_64/fedora-coreos-32.20200907.3.0-live-initramfs.x86_64.img.sig -O fcos-32-initramfs.img.sig 
-
-wget https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/32.20200907.3.0/x86_64/fedora-coreos-32.20200907.3.0-metal.x86_64.raw.xz -O fcos-32-metal.raw.xz
-wget https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/32.20200907.3.0/x86_64/fedora-coreos-32.20200907.3.0-metal.x86_64.raw.xz.sig -O fcos-32-metal.raw.xz.sig
-

3.10. Create matchbox profile for bootstrap, master and worker nodes

vim /var/lib/matchbox/profiles/bootstrap.json
-
{
-"id": "bootstrap",
-
-"name": "OKD 4.5 - Bootstrap",
-
-"ignition_id": "bootstrap.ign",
-
-"boot": {
-
-"kernel": "/assets/fcos-32-kernel",
-
-"initrd": ["/assets/fcos-32-initramfs.img"],
-
-"args": [
-
-"ip=dhcp",
-
-"rd.neednet=1",
-
-"console=tty0",
-
-"console=ttyS0",
-
-"coreos.inst=yes",
-
-"coreos.inst.install_dev=vda",
-
-"coreos.inst.image_url=http://helper.openshift.riupie.io:8080/assets/fcos-32-metal.raw.xz",
-
-"coreos.inst.ignition_url=http://helper.openshift.riupie.io:8080/ignition?mac=${mac:hexhyp}"
-]
-
-}
-}
-
vim /var/lib/matchbox/profiles/master.json
-
{
-"id": "master",
-
-"name": "OKD 4.5 - Master",
-
-"ignition_id": "master.ign",
-
-"boot": {
-
-"kernel": "/assets/fcos-32-kernel",
-
-"initrd": ["/assets/fcos-32-initramfs.img"],
-
-"args": [
-
-"ip=dhcp",
-
-"rd.neednet=1",
-
-"console=tty0",
-
-"console=ttyS0",
-
-"coreos.inst=yes",
-
-"coreos.inst.install_dev=vda",
-
-"coreos.inst.image_url=http://helper.openshift.riupie.io:8080/assets/fcos-32-metal.raw.xz",
-
-"coreos.inst.ignition_url=http://helper.openshift.riupie.io:8080/ignition?mac=${mac:hexhyp}"
-
-]
-
-}
-
-}
-
vim /var/lib/matchbox/profiles/worker.json
-
{
-"id": "worker",
-
-"name": "OKD 4.5 - Worker",
-
-"ignition_id": "worker.ign",
-
-"boot": {
-
-"kernel": "/assets/fcos-32-kernel",
-
-"initrd": [
-
-"/assets/fcos-32-initramfs.img"
-
-],
-
-"args": [
-
-"ip=dhcp",
-
-"rd.neednet=1",
-
-"console=tty0",
-
-"console=ttyS0",
-
-"coreos.inst=yes",
-
-"coreos.inst.install_dev=vda",
-
-"coreos.inst.image_url=http://helper.openshift.riupie.io:8080/assets/fcos-32-metal.raw.xz",
-
-"coreos.inst.ignition_url=http://helper.openshift.riupie.io:8080/ignition?mac=${mac:hexhyp}"
-
-]
-
-}
-
-}
-

3.11. Create groups for each nodes (changes MAC ADDRESS)

vim /var/lib/matchbox/groups/bootstrap.json
-
{
-"id": "bootstrap01",
-
-"name": "OCP 4.5 - Bootstrap server",
-
-"profile": "bootstrap",
-
-"selector": {
-
-"mac": "52:54:00:7a:55:a1"
-
-}
-
-}
-
vim /var/lib/matchbox/groups/master01.json 
-
{
-"id": "master01",
-
-"name": "OCP 4.5 - Master 1",
-
-"profile": "master",
-
-"selector": {
-
-"mac": "52:54:00:58:b0:a9"
-
-}
-
-}
-
vim /var/lib/matchbox/groups/master02.json 
-
{
-"id": "master02",
-
-"name": "OCP 4.5 - Master 2",
-
-"profile": "master",
-
-"selector": {
-
-"mac": "52:54:00:79:70:08"
-
-}
-
-}
-
vim /var/lib/matchbox/groups/master03.json 
-
{
-"id": "master03",
-
-"name": "OCP 4.5 - Master 3",
-
-"profile": "master",
-
-"selector": {
-
-"mac": "52:54:00:de:92:a2"
-
-}
-
-}
-
vim /var/lib/matchbox/groups/worker01.json 
-
{
-"id": "worker01",
-
-"name": "OCP 4.5 - Worker 1",
-
-"profile": "worker",
-
-"selector": {
-
-"mac": "52:54:00:6f:4b:1f"
-
-}
-
-}
-
vim /var/lib/matchbox/groups/worker02.json 
-
{
-"id": "worker02",
-
-"name": "OCP 4.5 - Worker 2",
-
-"profile": "worker",
-
-"selector": {
-
-"mac": "52:54:00:c7:f4:21"
-
-}
-
-}
-

3.12. Set permission for group and profile file

chown -R matchbox:matchbox /var/lib/matchbox
-

3.13. Set firewalld for matchbox

firewall-cmd --permanent --add-port 8080/tcp
-firewall-cmd --reload
-

3.14. Restart matchbox

systemctl restart matchbox
-

4. Setup NTP Server

4.1. Install chrony package

yum install -y chrony
-

4.2. Configure chrony

vim /etc/chrony.conf
-
#comment below line
-#pool 2.centos.pool.ntp.org iburst
-
-#add below lines
-server 0.id.pool.ntp.org
-server 1.id.pool.ntp.org
-server 2.id.pool.ntp.org
-server 3.id.pool.ntp.org
-
-#Modify below line
-# Allow NTP client access from local network.
-allow 10.10.51.0/24
-

4.3. Enable and restart service

systemctl enable chronyd
-systemctl restart chronyd
-systemctl status chronyd
-

4.4. Verify NTP Server

chronyc sources
-

4.5. Set timezone to Asia/Jakarta

timedatectl set-timezone Asia/Jakarta
-

4.6. Allow remote access to NTP Server

firewall-cmd --permanent --add-service=ntp
-firewall-cmd --reload
-

Part 2: Load Balancer Server

1. Setup DNS and NTP

1.1. Configure DNS Server

#Change DNS Server
-nmtui
-
-#Restart interface
-ifdown ens3;ifup en3
-

1.2. Configure NTP Server

# Install chrony
-yum install chrony -y
-
# Set NTP Server
-vim /etc/chrony.conf
-
#Add this line
-server 10.10.50.9 iburst
-
# Restart chrony
-systemctl restart chronyd
-
[root@okd-lb1 ~]# timedatectl
-               Local time: Mon 2020-10-26 19:28:16 WIB
-           Universal time: Mon 2020-10-26 12:28:16 UTC
-                 RTC time: Mon 2020-10-26 12:28:16
-                Time zone: Asia/Jakarta (WIB, +0700)
-System clock synchronized: yes
-              NTP service: active
-          RTC in local TZ: no
-

2. Setup VIP Address using Keepalived

2.1. Install keepalived packages

yum update -y
-yum install -y keepalived
-

2.2. Configure keepalived

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bk
-vim /etc/keepalived/keepalived.conf
-
# ON MASTER LB
-vrrp_script haproxy_check {
-        script "killall -0 haproxy" #check haproxy process
-        interval 2                                      # every 2 seconds       
-        weight 2                                        # add 2 points if OK
-}
-
-vrrp_instance OCP_EXT {
-        interface enp1s0                        # set interface
-        virtual_router_id 51
-        priority 100                            # set to lower value (ex: 98)for BACKUP LB
-        state MASTER                            # set to BACKUP for second LB
-        virtual_ipaddress {
-                10.10.51.100 dev enp1s0         # set interface and VIP
-
-}
-        track_script {
-                haproxy_check
-        }
-}
-
# ON BACKUP LB
-vrrp_script haproxy_check {
-	script "killall -0 haproxy" #check haproxy process
-	interval 2 					# every 2 seconds
-	weight 2					# add 2 points if OK
-}
-
-vrrp_instance OCP_EXT {
-	interface ens3       # set interface
-	virtual_router_id 51
-	priority 98				# set to lower value (ex: 98)for BACKUP LB
-	state BACKUP				# set to BACKUP for second LB
-	virtual_ipaddress {
-		10.10.51.100 dev ens3    # set interface
-
-}
-	track_script {
-		haproxy_check
-	}
-}
-

2.3. Enable and start service

systemctl enable keepalived
-systemctl start keepalived
-systemctl status keepalived
-

3. Setup Haproxy

3.1. Install haproxy packages

yum install -y haproxy rsyslog
-

3.2. Configure haproxy

vim /etc/haproxy/haproxy.cfg
-
#---------------------------------------------------------------------
-# Global settings
-#---------------------------------------------------------------------
-global
-    log         127.0.0.1 local2
-
-    chroot      /var/lib/haproxy
-    pidfile     /var/run/haproxy.pid
-    maxconn     4000
-    user        haproxy
-    group       haproxy
-    daemon
-
-    # turn on stats unix socket
-    stats socket /var/lib/haproxy/stats
-
-    # utilize system-wide crypto-policies
-    ssl-default-bind-ciphers PROFILE=SYSTEM
-    ssl-default-server-ciphers PROFILE=SYSTEM
-
-#---------------------------------------------------------------------
-# common defaults that all the 'listen' and 'backend' sections will
-# use if not designated in their block
-#---------------------------------------------------------------------
-defaults
-    mode                    http
-    log                     global
-    option                  httplog
-    option                  dontlognull
-    option http-server-close
-    option forwardfor       except 127.0.0.0/8
-    option                  redispatch
-    retries                 3
-    timeout http-request    10s
-    timeout queue           1m
-    timeout connect         10s
-    timeout client          1m
-    timeout server          1m
-    timeout http-keep-alive 10s
-    timeout check           10s
-    maxconn                 3000
-
-#---------------------------------------------------------------------
-# main frontend which proxys to the backends
-#---------------------------------------------------------------------
-frontend openshift-api-server
-    bind api.openshift.riupie.io:6443
-    default_backend openshift-api-server
-    mode tcp
-    option tcplog
-frontend machine-config-server
-    bind api-int.openshift.riupie.io:22623
-    default_backend machine-config-server
-    mode tcp
-    option tcplog
-frontend ingress-http
-    bind *:80
-    default_backend ingress-http
-    mode tcp
-    option tcplog
-frontend ingress-https
-    bind *:443
-    default_backend ingress-https
-    mode tcp
-    option tcplog
-
-#---------------------------------------------------------------------
-# static backend for serving up API, MSC, HTTP and HTTPS
-#---------------------------------------------------------------------
-backend openshift-api-server
-    balance source
-    mode tcp
-    server bootstrap.openshift.riupie.io 10.10.51.10:6443 check
-    server master01.openshift.riupie.io 10.10.51.11:6443 check
-    server master02.openshift.riupie.io 10.10.51.12:6443 check
-    server master03.openshift.riupie.io 10.10.51.13:6443 check
-backend machine-config-server
-    balance source
-    mode tcp
-    server bootstrap.openshift.riupie.io 10.10.51.10:22623 check
-    server master01.openshift.riupie.io 10.10.51.11:22623 check
-    server master02.openshift.riupie.io 10.10.51.12:22623 check
-    server master03.openshift.riupie.io 10.10.51.13:22623 check
-backend ingress-http
-    balance source
-    mode tcp
-    server worker01.openshift.riupie.io 10.10.51.21:80 check
-    server worker02.openshift.riupie.io 10.10.51.22:80 check
-backend ingress-https
-    balance source
-    mode tcp
-    server worker01.openshift.riupie.io 10.10.51.21:443 check
-    server worker02.openshift.riupie.io 10.10.51.22:443 check
-

3.3. Enable haproxy log. Comment out below line

vim /etc/rsyslog.conf
-
module(load="imudp") # needs to be done just once
-input(type="imudp" port="514")
-
vim /etc/rsyslog.d/haproxy.conf
-
#Add this line
-local2.*    /var/log/haproxy.log
-

3.4. Setsebool to allow haproxy socket to open on any port

setsebool -P haproxy_connect_any=1
-

3.5. Allow haproxy to connect to unbind IP Address

sysctl -w net.ipv4.ip_nonlocal_bind=1
-

3.6. Enable and restart haproxy

systemctl enable haproxy
-systemctl restart haproxy
-systemctl status haproxy
-

3.7. Enable and restart rsyslog

systemctl enable rsyslog
-systemctl restart rsyslog
-systemctl status rsyslog
-

3.8. Set firewalld for haproxy

firewall-cmd --permanent --add-service http
-firewall-cmd --permanent --add-service https
-firewall-cmd --permanent --add-port 6443/tcp
-firewall-cmd --permanent --add-port 22623/tcp
-firewall-cmd --reload
-

4. Setup NFS Server on Bastion Server

4.1. Install packages

yum install -y nfs-utils
-

4.2. Enable nfs service

systemctl start nfs-server.service
-systemctl enable nfs-server.service
-systemctl status nfs-server.service
-

4.3. Create NFS directory

mkdir -p  /mnt/nfs_shares/okd
-chmod -R 777 /mnt/nfs_shares/okd/
-

4.4. Export filesystem share

vim /etc/exports
-
/mnt/nfs_shares/okd		*(rw,root_squash)    
-
exportfs -arv
-

4.5. Verify export list

exportfs  -s
-

4.6. Set firewalld for NFS Server

firewall-cmd --permanent --add-service=nfs
-firewall-cmd --permanent --add-service=nfs3
-firewall-cmd --permanent --add-service=rpc-bind
-firewall-cmd --permanent --add-service=mountd
-firewall-cmd --reload
-

4.7. Get disk /dev/vdb UUID

blkid
-

4.8. Format disk /dev/vdb to XFS

mkfs.xfs /dev/vdb
-

4.9. Mount /dev/vdb to /mnt/nfs_shares/okd/

vi /etc/fstab
-
...
-UUID=025fbf3a-89df-4903-a75c-6c92f3210958 /mnt/nfs_shares/okd/        xfs     defaults        0 0
-...
-
mount -a
-

4.10. Verify mountpoint

df -hT
-

Part 3: Deploy OKD 4.5 Cluster from Bastion Server

1. Initial Setup

1.1. Generate SSH Keypair

#Generate SSH keypair
-ssh-keygen
-
-#Optional: Save ssh private key using ssh-agent if you use passphrase.
-eval "$(ssh-agent -s)"
-ssh-add /root/.ssh/id_rsa
-

1.2. Obtaining the installation program

#Download openshift client
-wget https://mirror.openshift.com/pub/openshift-v4/clients/oc/latest/linux/oc.tar.gz
-
-#Extract package
-tar xvzf /root/oc.tar.gz
-
-#Move oc binary to /usr/bin/
-mv /root/oc /usr/bin/
-
-#Download openshift-installer
-wget https://github.com/openshift/okd/releases/download/4.5.0-0.okd-2020-09-18-202631/openshift-install-linux-4.5.0-0.okd-2020-09-18-202631.tar.gz
-
-#Extract openshift-installer package
-tar xvzf /root/openshift-install-linux-4.5.0-0.okd-2020-09-18-202631.tar.gz
-
-#Create a directory to save openshift configuration
-mkdir /root/okd-config
-mv /root/openshift-install /root/okd-config/
-cd /root/okd-config
-

1.3. Get pullSecret

You can get pull secret from https://cloud.redhat.com/openshift/install/pull-secret or use fake pull secret. If you use Openshift pull secret, you will get 60 days trial of Openshift and access to Openshift Registry Marketplace from OperatorHub. If you use fake pull secret, you can only access Community OperatorHub.

1.4. Create installation configuration file

vim /root/okd-config/install-config.yaml
-
apiVersion: v1
-baseDomain: riupie.io
-compute:
-- hyperthreading: Enabled
-  name: worker
-  replicas: 0
-controlPlane:
-  hyperthreading: Enabled
-  name: master 
-  replicas: 3
-metadata:
-  name: openshift 
-networking:
-  clusterNetwork:
-  - cidr: 10.128.0.0/14 
-    hostPrefix: 23 
-  networkType: OpenShiftSDN
-  serviceNetwork: 
-  - 172.30.0.0/16
-platform:
-  none: {} 
-pullSecret: '{"auths":{"fake":{"auth": "bar"}}}' 
-sshKey: 'your_bastion_server_ssh_pub_key'
-

1.5. Backup installation configuration file

cp /root/okd-config/install-config.yaml /root/okd-config/install-config.yaml.bk
-

1.6. Generate manifests files

cd /root/okd-config/
-./openshift-install create manifests --dir=/root/okd-config/
-

1.7. Prevent Pods from being scheduled on the control plane machines. Set mastersSchedulable to false.

vim /root/okd-config/manifests/cluster-scheduler-02-config.yml
-
apiVersion: config.openshift.io/v1
-kind: Scheduler
-metadata:
-  creationTimestamp: null
-  name: cluster
-spec:
-  mastersSchedulable: false
-  policy:
-    name: ""
-status: {}
-

1.8. Generate Ignition Files

./openshift-install create ignition-configs --dir=/root/okd-config/
-

1.9. Directory tree

/root/okd-config/
-├── auth
-│   ├── kubeadmin-password
-│   └── kubeconfig
-├── bootstrap.ign
-├── master.ign
-├── openshift-install
-└── worker.ign
-

1.10. Copy ignition files to matchbox directory

cp /root/okd-config/*.ign /var/lib/matchbox/ignition/
-

1.11. Set ownership of directory /var/lib/matchbox

chown -R matchbox:matchbox /var/lib/matchbox
-

1.12. Restart matchbox

systemctl restart matchbox
-

1.12. Power On bootstrap,master and worker nodes.

1.13. Check bootstrapping progress

[root@okd02-bastion okd-config]# ./openshift-install --dir=/root/okd-config/ wait-for bootstrap-complete --log-level=info
-INFO Waiting up to 20m0s for the Kubernetes API at https://api.openshift.riupie.io:6443... 
-INFO API v1.18.3 up                               
-INFO Waiting up to 40m0s for bootstrapping to complete... 
-INFO It is now safe to remove the bootstrap resources 
-INFO Time elapsed: 0s
-

1.14. Remove bootstrap server from loadbalancer

vim /etc/haproxy/haproxy.cfg
-

1.15. After bootstrapping complete, check installation progress.

./openshift-install --dir=/root/okd-config/ wait-for install-complete --log-level=debug
-
-
-DEBUG Still waiting for the cluster to initialize: Working towards 4.5.0-0.okd-2020-09-18-202631: 87% complete, waiting on authentication, monitoring
-DEBUG Cluster is initialized
-INFO Waiting up to 10m0s for the openshift-console route to be created...
-DEBUG Route found in openshift-console namespace: console
-DEBUG Route found in openshift-console namespace: downloads
-DEBUG OpenShift console route is created
-INFO Install complete!
-INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/root/okd-config/auth/kubeconfig'
-INFO Access the OpenShift web-console here: https://console-openshift-console.apps.openshift.riupie.io
-INFO Login to the console with user: "kubeadmin", and password: "KjV4r-eg3Uq-qEtU5-AxPS6"
-DEBUG Time elapsed per stage:
-DEBUG Cluster Operators: 9m8s
-INFO Time elapsed: 9m8s
-

1.16. Logging in to the cluster

export KUBECONFIG=/root/okd-config/auth/kubeconfig
-
-#Check user
-oc whoami
-

1.17. Verify cluster nodes

oc get nodes
-

1.18. Approving CSR

oc get csr
-oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs oc adm certificate approve
-

1.19. Check node

oc get nodes
-

1.20. Check Pods

oc get pods --all-namespaces
-

1.20. Copy kubeconfig to /root/.kube

cp /root/okd-config/auth/kubeconfig /root/.kube/config
-

1.21. Access to dashboard

If needed, mapping your domain to /etc/hosts on your client.

vim /etc/hosts
-
10.10.51.100 console-openshift-console.apps.openshift.riupie.io oauth-openshift.apps.openshift.riupie.io alertmanager-main-openshift-monitoring.apps.openshift.riupie.io
-

Then, access to dashboard from browser: https://console-openshift-console.apps.openshift.riupie.io

Dashboard OKD

2. Setup Persistent Storage

2.1. Clone external storage repository

yum install git -y
-git clone https://github.com/kubernetes-incubator/external-storage.git kubernetes-incubator
-

2.2. Create namespaces for NFS Storage provisioner

oc create namespace openshift-nfs-storage
-

2.3. Add monitoring label to namespace

oc label namespace openshift-nfs-storage "openshift.io/cluster-monitoring=true"
-

2.4. Configure deployment and RBAC for NFS

# Switch project
-oc project openshift-nfs-storage
-
-# Change namespace on deployment and rbac YAML file
-cd /root/kubernetes-incubator/nfs-client/
-
-NAMESPACE=`oc project -q`
-
-sed -i'' "s/namespace:.*/namespace: $NAMESPACE/g" ./deploy/rbac.yaml 
-sed -i'' "s/namespace:.*/namespace: $NAMESPACE/g" ./deploy/deployment.yaml
-

2.5. Create RBAC

oc create -f deploy/rbac.yaml
-oc adm policy add-scc-to-user hostmount-anyuid system:serviceaccount:$NAMESPACE:nfs-client-provisioner
-

2.6. Configure deployment

vim /root/kubernetes-incubator/nfs-client/deploy/deployment.yaml
-
apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: nfs-client-provisioner
-  labels:
-    app: nfs-client-provisioner
-  # replace with namespace where provisioner is deployed
-  namespace: openshift-nfs-storage
-spec:
-  replicas: 1
-  strategy:
-    type: Recreate
-  selector:
-    matchLabels:
-      app: nfs-client-provisioner
-  template:
-    metadata:
-      labels:
-        app: nfs-client-provisioner
-    spec:
-      serviceAccountName: nfs-client-provisioner
-      containers:
-        - name: nfs-client-provisioner
-          image: quay.io/external_storage/nfs-client-provisioner:latest
-          volumeMounts:
-            - name: nfs-client-root
-              mountPath: /persistentvolumes
-          env:
-            - name: PROVISIONER_NAME
-              value: storage.io/nfs
-            - name: NFS_SERVER
-              value: 10.10.51.9           # Change this
-            - name: NFS_PATH
-              value: /mnt/nfs_shares/okd  # Change this
-      volumes:
-        - name: nfs-client-root
-          nfs:
-            server: 10.10.51.9            # Change this
-            path: /mnt/nfs_shares/okd     # Change this
-

2.7. Configure storageclass

vim /root/kubernetes-incubator/nfs-client/deploy/class.yaml
-
apiVersion: storage.k8s.io/v1
-kind: StorageClass
-metadata:
-  name: managed-nfs-storage
-provisioner: storage.io/nfs # or choose another name, must match deployment's env PROVISIONER_NAME'
-parameters:
-  archiveOnDelete: "false"
-

2.8. Deploy Deployment and StorageClass

oc create -f deploy/class.yaml 
-oc create -f deploy/deployment.yaml
-

2.9. Verify deployment

oc get pods -n openshift-nfs-storage
-

3. Setup Image Registry Persistent Storage

3.1. Set default storageclass

oc patch storageclass managed-nfs-storage -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'
-

3.2. Change image registry management state

oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"managementState":"Managed"}}'
-

3.3. Verify registry pods

oc get pod -n openshift-image-registry
-

3.4. Configure storage.

oc edit configs.imageregistry.operator.openshift.io
-
...
-spec:
-.
-.
-.
-  storage:
-    pvc:
-      claim:
-...
-

3.5. Check clusteroperator status. Wait until Availability become True.

oc get clusteroperator image-registry
-

3.6. Check if PVC status bounded

oc get pvc --all-namespaces
-
NAMESPACE                  NAME                     STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
-openshift-image-registry   image-registry-storage   Bound    pvc-bf06735c-df5e-4b3c-9aba-f0e3bf598d80   100Gi      RWX            managed-nfs-storage   96s
-

3.7. Confirm that all the cluster components are online

watch -n5 oc get clusteroperators
-
NAME                                       VERSION                         AVAILABLE   PROGRESSING   DEGRADED   SINCE
-authentication                             4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-cloud-credential                           4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-cluster-autoscaler                         4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-config-operator                            4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-console                                    4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-csi-snapshot-controller                    4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-dns                                        4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-etcd                                       4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-image-registry                             4.5.0-0.okd-2020-09-18-202631   True        False         False	3m5s
-ingress                                    4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-insights                                   4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-kube-apiserver                             4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-kube-controller-manager                    4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-kube-scheduler                             4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-kube-storage-version-migrator              4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-machine-api                                4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-machine-approver                           4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-machine-config                             4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-marketplace                                4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-monitoring                                 4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-network                                    4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-node-tuning                                4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-openshift-apiserver                        4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-openshift-controller-manager               4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-openshift-samples                          4.5.0-0.okd-2020-09-18-202631   True        True          True	11d
-operator-lifecycle-manager                 4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-operator-lifecycle-manager-catalog         4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-operator-lifecycle-manager-packageserver   4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-service-ca                                 4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-storage                                    4.5.0-0.okd-2020-09-18-202631   True        False         False	11d
-

\ No newline at end of file diff --git a/blog/hokus.yaml b/blog/hokus.yaml deleted file mode 100644 index 0ca8077..0000000 --- a/blog/hokus.yaml +++ /dev/null @@ -1,83 +0,0 @@ -hugover: 0.69.0 -serve: - - key: default - config: config.yaml -build: - - key: default - config: config.yaml -collections: - - key: posts - title: Posts - folder: content/posts/ - extension: md - dataformat: yaml - itemtitle: Post - fields: - - key: info - type: info - size: small - content: |- - # Info - You can write custom instructions here. - theme: gray - - key: title - title: Title - type: string - - key: mainContent - title: Content - type: markdown - - key: pubdate - title: Pub Date - type: date - default: now - - key: draft - title: Draft - type: boolean - - key: bundle-manager - title: Images - type: bundle-manager - path: imgs - extensions: - - png - - jpg - - gif - fields: - - key: title - title: Title - type: string - - key: description - title: Description - type: string - multiLine: true - - key: bundle-image-thumbnail - type: bundle-image-thumbnail -singles: - - key: mainConfig - title: Main Config - file: config.yaml - dataformat: yaml - fields: - - key: title - title: Site Title - type: string - tip: Your page title. - - key: baseURL - title: Base URL - type: string - tip: Your site URL. - - key: theme - title: Theme - type: readonly - tip: The current theme. - - key: languageCode - title: Language Code - type: readonly - - key: googleAnalytics - title: Google Analytics - type: string - tip: Provide a Google Analitics Tracking Code to enable analytics. - - key: enableRobotsTXT - title: Enable Robots - type: boolean - default: true - tip: 'If you want your page to be indexed, keep this enabled.' diff --git a/blog/index.html b/blog/index.html deleted file mode 100644 index bd6f2a8..0000000 --- a/blog/index.html +++ /dev/null @@ -1,24 +0,0 @@ -RahmatAwe -

Blogs

Tidy up our Prometheus metrics!

Reading Time: 2 minutes

November 26, 2023

Send Log from Event Viewer on Windows Server 2019 to Grafana Loki

Reading Time: 4 minutes

April 15, 2022

cheatsheet

Reading Time: 2 minutes

March 1, 2021

Deploying HCI Openstack using Kolla Ansible

Reading Time: 5 minutes

October 17, 2020

Deploying UPI OKD 4.5 Cluster

Reading Time: 15 minutes

October 17, 2020

\ No newline at end of file diff --git a/blog/index.xml b/blog/index.xml deleted file mode 100644 index daf5006..0000000 --- a/blog/index.xml +++ /dev/null @@ -1,4 +0,0 @@ -Blogs onhttps://www.rahmatawe.com/blog/Recent content in Blogs onHugo -- gohugo.ioen-usSun, 26 Nov 2023 00:00:00 +0000Tidy up our Prometheus metrics!https://www.rahmatawe.com/blog/tidy-up-prometheus-metrics/Sun, 26 Nov 2023 00:00:00 +0000https://www.rahmatawe.com/blog/tidy-up-prometheus-metrics/In this article I&rsquo;ll explain my process of analyzing and setting up Prometheus, where I maybe effectively increase query performance and addressed challenges related to cardinality. FYI, I use this stack on my monitoring system: Grafana, Promethues, Thanos. The metrics itself gethered from several source: node exporter, kube-state-metrics, etc. -1. List unused metrics Firs, we need to list metrcis that used in our Grafana. To do this task, we can use mimirtool.Send Log from Event Viewer on Windows Server 2019 to Grafana Lokihttps://www.rahmatawe.com/blog/send-event-viewer-log-to-grafana-loki/Fri, 15 Apr 2022 00:00:00 +0000https://www.rahmatawe.com/blog/send-event-viewer-log-to-grafana-loki/Environment # Servers ag-rh2 : 10.54.54.6 (Grafana + Loki) win2k19 : 10.54.54.219 (Promtail) # OS Packages Release RHEL 8.4 Windows Server 2019 Loki 2.5 Grafana 8.4.6 Setup Loki 1. Download package Loki curl -O -L &#34;https://github.com/grafana/loki/releases/download/v2.5.0/loki-linux-amd64.zip&#34; 2. Setup loki binary # Unzip package unzip loki-linux-amd64.zip # Grant execute permission chmod +x loki-linux-amd64 # Create directory for loki installation sudo mkdir -p /opt/loki/{bin,conf,data} # Move loki binary mv loki-linux-amd64 /opt/loki/bin/loki 3. Setup loki configuration Default configuration can be retrieved from here.cheatsheethttps://www.rahmatawe.com/blog/cheatsheet/Mon, 01 Mar 2021 00:00:00 +0000https://www.rahmatawe.com/blog/cheatsheet/Running short-lived container to compile source code $ sudo docker run --rm -it -v ${PWD}:/app -w /app openjdk:11-jdk-slim /bin/sh -c ./gradlew buildRun Rsync over SSH on Spesific Port $ rsync -avzhe &#39;ssh -p [port_number]&#39; -P [user@remote_ip]:/path/to/file/source /path/to/file/destination Scan IP on Network $ nmap -sP [ip_address/prefix] Search Available Version of Spesific Package on Debian Based OS $ apt list -a &lt;package_name&gt; Install Spesific Kubernetes Version #example version 1.15.x# $ sudo apt update;sudo apt install -qy kubelet=1.Implementing LDAP Authentication for Kubernetes using Dex on Ubuntu 18.04https://www.rahmatawe.com/blog/ldap-kubernetes-integration/Fri, 06 Nov 2020 00:00:00 +0000https://www.rahmatawe.com/blog/ldap-kubernetes-integration/Environment # Servers ag-k8s-master0 : 10.54.54.10/24 (Kubernetes Master) ag-k8s-worker0 : 10.54.54.20/24 (Kubernetes Worker) ag-k8s-worker1 : 10.54.54.21/24 (Kubernetes Worker) ag-k8s-ldap : 10.54.54.30/24 (LDAP Server, DNS Server) # Packages Release Ubuntu 18.04 Kubernetes 1.19 OpenLDAP 2.4 Part 1: Pre-Flight 1. Setup DNS Server For simplicity, I used dnsmasq with minimal configuration. You can use your prefered DNS Server (ex: bind9). -1.1. Install DNSMASQ root@ag-k8s-ldap:~# apt -y install dnsmasq 1.2. Configure Dnsmasq. Uncomment line below.Deploying HCI Openstack using Kolla Ansiblehttps://www.rahmatawe.com/blog/deploying-openstack-hci/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/blog/deploying-openstack-hci/IP Information Hostname Storage Interface (enp1s0) Openstack Interface (enp7s0) server0 10.50.50.10 10.51.51.10 server1 10.50.50.11 10.51.51.11 server2 10.50.50.12 10.51.51.12 A. Deploy Ceph Cluster In this first stage, I will deploy Ceph Cluster using Ceph Ansible. Ceph Ansible has two different approach when deploy Ceph Cluster: 1) Systemd based and 2) Container based. In here, I will use container based deployment which is use Podman as container runtime. -1. Install required packages yum install git python3-pip vim -y pip3 install ansible 2.Deploying UPI OKD 4.5 Clusterhttps://www.rahmatawe.com/blog/deploying-upi-okd/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/blog/deploying-upi-okd/Environment IP Address Hostname OS Description 10.10.51.9 okd-bastion CentOS 8 DNS Server, DHCP Server, NTP Server, PXE Server, LDAP Server 10.10.51.10 okd-bootstrap Fedora COreOS Bootstrap Server. Temporary only, could be delete after bootstrapping done. 10.10.51.11 okd-master01 Fedora CoreOS Master 10.10.51.12 okd-master02 Fedora CoreOS Master 10.10.51.13 okd-master03 Fedora CoreOS Master 10.10.51.21 okd-worker01 Fedora CoreOS Worker 10.10.51.22 okd-worker02 Fedora CoreOS Worker 10.10.51.31 okd-lb1 CentOS 8 Load Balancer 10.10.51.32 okd-lb2 CentOS 8 Load Balancer Part 1: Bastion/Helper Server 1. \ No newline at end of file diff --git a/blog/ldap-kubernetes-integration/imgs/gangway-1.png b/blog/ldap-kubernetes-integration/imgs/gangway-1.png deleted file mode 100644 index 9ab20a6..0000000 Binary files a/blog/ldap-kubernetes-integration/imgs/gangway-1.png and /dev/null differ diff --git a/blog/ldap-kubernetes-integration/imgs/gangway-2.png b/blog/ldap-kubernetes-integration/imgs/gangway-2.png deleted file mode 100644 index fdcd8f1..0000000 Binary files a/blog/ldap-kubernetes-integration/imgs/gangway-2.png and /dev/null differ diff --git a/blog/ldap-kubernetes-integration/imgs/gangway-3.png b/blog/ldap-kubernetes-integration/imgs/gangway-3.png deleted file mode 100644 index c97346e..0000000 Binary files a/blog/ldap-kubernetes-integration/imgs/gangway-3.png and /dev/null differ diff --git a/blog/ldap-kubernetes-integration/index.html b/blog/ldap-kubernetes-integration/index.html deleted file mode 100644 index 6c78484..0000000 --- a/blog/ldap-kubernetes-integration/index.html +++ /dev/null @@ -1,626 +0,0 @@ -RahmatAwe -

Implementing LDAP Authentication for Kubernetes using Dex on Ubuntu 18.04

November 6, 2020

Environment

# Servers
-ag-k8s-master0 : 10.54.54.10/24  (Kubernetes Master)
-ag-k8s-worker0 : 10.54.54.20/24  (Kubernetes Worker)
-ag-k8s-worker1 : 10.54.54.21/24  (Kubernetes Worker)
-ag-k8s-ldap    : 10.54.54.30/24  (LDAP Server, DNS Server)
-
-# Packages Release
-Ubuntu 18.04
-Kubernetes 1.19
-OpenLDAP 2.4
-

Part 1: Pre-Flight

1. Setup DNS Server

For simplicity, I used dnsmasq with minimal configuration. You can use your prefered DNS Server (ex: bind9).

1.1. Install DNSMASQ

root@ag-k8s-ldap:~# apt -y install dnsmasq
-

1.2. Configure Dnsmasq. Uncomment line below.

root@ag-k8s-ldap:~# vim /etc/dnsmasq.conf
-
-domain-needed
-bogus-priv
-strict-order
-
-root@ag-k8s-ldap:~# systemctl restart dnsmasq
-

1.3. Add DNS Records on /etc/hosts.

10.54.54.10 dex.kubernetes.riupie.com kubectl.kubernetes.riupie.com dashboard.kubernetes.riupie.com
-10.54.54.30 ldap.riupie.com
-

1.4. Add DNS Server to each Kubernetes nodes.

ubuntu@ag-k8s-master0:~$ sudo vim /etc/netplan/50-cloud-init.yaml
-
network:
-    ethernets:
-        ens3:
-            addresses:
-            - 10.54.54.10/24
-            gateway4: 10.54.54.1
-            nameservers:
-                addresses:
-                - 10.54.54.30
-    version: 2
-
ubuntu@ag-k8s-master0:~$ sudo netplan apply
-

1.5. Verify DNS Server

ubuntu@ag-k8s-master0:~$ nslookup ldap.riupie.com
-
-Server:		127.0.0.53
-Address:	127.0.0.53#53
-
-Non-authoritative answer:
-Name:	ldap.riupie.com
-Address: 10.54.54.30
-

2. Setup LDAP Server

2.1. Install OpenLDAP

root@ag-k8s-ldap:~# apt -y install slapd ldap-utils -y
-
- +--------------------------| Configuring slapd |-------------------------+
- | Please enter the password for the admin entry in your LDAP directory.  |
- |                                                                        |
- | Administrator password:                                                |
- |                                                                        |
- | ********______________________________________________________________ |
- |                                                                        |
- |                                 <Ok>                                   |
- |                                                                        |
- +------------------------------------------------------------------------+
-

2.2. Configure LDAP Server

root@ag-k8s-ldap:~# dpkg-reconfigure slapd
-

2.3. Verify configuration

root@ag-k8s-ldap:~# slapcat
-
-dn: dc=riupie,dc=com
-objectClass: top
-objectClass: dcObject
-objectClass: organization
-o: Riupie
-dc: riupie
-structuralObjectClass: organization
-entryUUID: d89b3fe8-8c51-103a-8b49-d95647de1143
-creatorsName: cn=admin,dc=riupie,dc=com
-createTimestamp: 20200916101927Z
-entryCSN: 20200916101927.851031Z#000000#000#000000
-modifiersName: cn=admin,dc=riupie,dc=com
-modifyTimestamp: 20200916101927Z
-
-dn: cn=admin,dc=riupie,dc=com
-objectClass: simpleSecurityObject
-objectClass: organizationalRole
-cn: admin
-description: LDAP administrator
-userPassword:: e1NTSEF9UGM2NjNPT0M3MXhwMVMvRGZyVCszSFNBeEpzM1ZBdXA=
-structuralObjectClass: organizationalRole
-entryUUID: d89b72ba-8c51-103a-8b4a-d95647de1143
-creatorsName: cn=admin,dc=riupie,dc=com
-createTimestamp: 20200916101927Z
-entryCSN: 20200916101927.852372Z#000000#000#000000
-modifiersName: cn=admin,dc=riupie,dc=com
-modifyTimestamp: 20200916101927Z
-

2.4. Add initial data for Kubernetes User

ubuntu@ag-k8s-ldap:~$ vim k8s.ldif
-
-dn: ou=People,dc=riupie,dc=com
-objectClass: organizationalUnit
-ou: People
-
-dn: cn=jane,ou=People,dc=riupie,dc=com
-objectClass: person
-objectClass: inetOrgPerson
-sn: doe
-cn: jane
-mail: janedoe@riupie.com
-uid: jane
-userPassword: jane@123
-
-dn: cn=john,ou=People,dc=riupie,dc=com
-objectClass: person
-objectClass: inetOrgPerson
-sn: doe
-cn: john
-mail: johndoe@riupie.com
-uid: john
-userPassword: john@123
-
-dn: ou=Groups,dc=riupie,dc=com
-objectClass: organizationalUnit
-ou: Groups
-
-dn: cn=admins,ou=Groups,dc=riupie,dc=com
-objectClass: groupOfNames
-cn: admins
-member: cn=john,ou=People,dc=riupie,dc=com
-
-dn: cn=developers,ou=Groups,dc=riupie,dc=com
-objectClass: groupOfNames
-cn: developers
-member: cn=jane,ou=People,dc=riupie,dc=com
-
-#Insert into LDAP database
-ubuntu@ag-k8s-ldap:~$ ldapadd -cx -D cn=admin,dc=riupie,dc=com -W -f k8s.ldif
-

Part 2: Bootstrapping Kubernetes Cluster

3. Deploy Kubernetes Cluster (run as regular user)

3.1. Install Docker on all Kubernetes nodes

sudo apt-get update
-sudo apt install docker.io -y
-
-sudo systemctl enable docker
-sudo systemctl start docker
-sudo systemctl status docker
-

3.2. Add kubernetes repository on all Kubernetes nodes

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
-sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
-

3.3. Install Kubernetes Installation Tools on all Kubernetes nodes

sudo apt install kubeadm kubelet kubectl -y
-sudo apt-mark hold kubeadm kubelet kubectl
-kubeadm version
-

3.4. Disable Swap Memory on all Kubernetes nodes

sudo swapoff –a
-

3.5. Initialize Kubernetes on Master Node

ubuntu@ag-k8s-master0:~$ sudo kubeadm init --pod-network-cidr=192.168.0.0/16
-

3.6. Create cluster directory on Master Node

ubuntu@ag-k8s-master0:~$ mkdir -p $HOME/.kube
-ubuntu@ag-k8s-master0:~$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
-ubuntu@ag-k8s-master0:~$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
-

3.7. Install Calico CNI from Master Node

ubuntu@ag-k8s-master0:~$ curl https://docs.projectcalico.org/manifests/calico.yaml -O
-ubuntu@ag-k8s-master0:~$ kubectl apply -f calico.yaml
-

3.8. Print join command from Master Node

ubuntu@ag-k8s-master0:~$ sudo kubeadm token create --print-join-command
-
-kubeadm join 10.54.54.10:6443 --token 2a80cg.tatnw7n3jaqsio5c     --discovery-token-ca-cert-hash sha256:70c6d0e5c2c9d3bfab4797dc9177b61136e5e690035042b8bdac58776f55818a
-

3.9. Join nodes. Execute on each worker nodes

kubeadm join 10.54.54.10:6443 --token ksgb87.m58b7ov99tc6p47p --discovery-token-ca-cert-hash sha256:70c6d0e5c2c9d3bfab4797dc9177b61136e5e690035042b8bdac58776f55818a
-

3.10. Verify cluster

ubuntu@ag-k8s-master0:~$ kubectl get nodes
-ubuntu@ag-k8s-master0:~$ kubectl cluster-info
-

3.11. Install Helm 3 from Master Node

ubuntu@ag-k8s-master0:~$ sudo apt-get install apt-transport-https -y
-
-ubuntu@ag-k8s-master0:~$ echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
-
-ubuntu@ag-k8s-master0:~$ sudo apt-get update
-ubuntu@ag-k8s-master0:~$ sudo apt-get install helm
-

Part 3: Deploy Cert Manager

4. Install NGINX Controller Community

4.1. Add NGINX Controller Community helm repo

ubuntu@ag-k8s-master0:~$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
-ubuntu@ag-k8s-master0:~$ helm install nginx-controller-community ingress-nginx/ingress-nginx
-

4.2. Expose NGINX Controller as externalIPs (only needed if you have no Service Type LoadBalancer support)

ubuntu@ag-k8s-master0:~$ kubectl edit svc nginx-controller-community-ingress-nginx-controller
-
-* add externalIP on thi section
-...
-  selector:
-    app: ingress-nginx
-  externalIPs:
-  - IP-MASTER-NODE
-...
-

5. Install cert-manager

5.1. Generate Self Signed cert for *.kubernetes.riupie.com domain

ubuntu@ag-k8s-master0:~$ openssl req -newkey rsa:4096 \
--x509 \
--sha256 \
--days 3650 \
--nodes \
--out riupie.com.crt \
--keyout riupie.com.key
-
-ubuntu@ag-k8s-master0:~$ mkdir .cert
-ubuntu@ag-k8s-master0:~$ mv riupie.com.* .cert
-
-#Share root CA file (riupie.com.crt) to each Kubernetes nodes. For example I do this on master nodes
-ubuntu@ag-k8s-master0:~$ sudo cp .cert/riupie.crt /etc/ssl/certs/riupie.com.pem
-ubuntu@ag-k8s-master0:~$ sudo update-ca-certificates
-

5.2. Create namespaces

ubuntu@ag-k8s-master0:~$ kubectl create namespace cert-manager
-

5.3 Add helm repo

ubuntu@ag-k8s-master0:~$ helm repo add jetstack https://charts.jetstack.io
-ubuntu@ag-k8s-master0:~$ helm repo update
-

5.4. Install cert-manager+CRD

ubuntu@ag-k8s-master0:~$ helm install cert-manager jetstack/cert-manager --namespace cert-manager --version v1.0.1 --set installCRDs=true
-

5.5. Check pods

ubuntu@ag-k8s-master0:~$ kubectl get pods --namespace cert-manager
-

5.6 Create secret for CA Root

ubuntu@ag-k8s-master0:~$ kubectl -n cert-manager create secret tls ssc-tls-secret --key=/home/ubuntu/.cert/riupie.com.key --cert=/home/ubuntu/.cert/riupie.com.crt
-

5.7. Create Issuer

ubuntu@ag-k8s-master0:~$ mkdir cert-manager
-ubuntu@ag-k8s-master0:~$ cd cert-manager
-ubuntu@ag-k8s-master0:~/cert-manager$ vim cluster-issuer.yml
-
---
-apiVersion: cert-manager.io/v1alpha2
-kind: ClusterIssuer
-metadata:
-  name: tls-ca-issuer
-  namespace: cert-manager
-spec:
-  ca:
-    secretName: ssc-tls-secret
-
ubuntu@ag-k8s-master0:~/cert-manager$ kubectl create -f cluster-issuer.yml
-

Part 4: Deploy Dex

6. Deploy Dex Deployment and Resource

6.1. Create auth-system namespace

kubectl create ns auth-system
-

6.2. Create YAML File for Dex Deployment

cd
-mkdir auth-system
-cd auth-system
-
-vim dex-system.yml
-
---
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  labels:
-    app: dex
-  name: dex
-  namespace: auth-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  name: dex
-  namespace: auth-system
-rules:
-- apiGroups: ["dex.coreos.com"]
-  resources: ["*"]
-  verbs: ["*"]
-- apiGroups: ["apiextensions.k8s.io"]
-  resources: ["customresourcedefinitions"]
-  verbs: ["create"]
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: dex
-  namespace: auth-system
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: dex
-subjects:
-- kind: ServiceAccount
-  name: dex
-  namespace: auth-system
-
----
-apiVersion: v1
-kind: ConfigMap
-metadata:
-  name: dex
-  namespace: auth-system
-data:
-  config.yaml: |
-    issuer: https://dex.kubernetes.riupie.com
-    web:
-      http: 0.0.0.0:5556
-    frontend:
-      theme: custom
-    telemetry:
-      http: 0.0.0.0:5558
-    staticClients:
-    - id: oidc-auth-client
-      redirectURIs:
-      - 'https://kubectl.kubernetes.riupie.com/callback'
-      - 'http://dashboard.kubernetes.riupie.com/oauth2/callback'
-      name: 'oidc-auth-client'
-      secret: XmT7EHo27skGchX0yLQNTYXibm3aNkx5
-    connectors:
-    - type: ldap
-      id: ldap
-      name: LDAP
-      config:
-        host: ldap.riupie.com:389
-        insecureNoSSL: true
-        insecureSkipVerify: true
-        bindDN: CN=admin,DC=riupie,DC=com
-        bindPW: mysecret #Add Administrator password
-        usernamePrompt: SSO Username
-        userSearch:
-          baseDN: OU=People,DC=riupie,DC=com
-          filter: "(objectClass=person)"
-          username: mail
-          idAttr: uid
-          emailAttr: mail
-          nameAttr: cn
-        groupSearch:
-          baseDN: OU=Groups,DC=riupie,DC=com
-          filter: "(objectClass=groupOfNames)"
-          userAttr: DN
-          groupAttr: member
-          nameAttr: cn
-    oauth2:
-      skipApprovalScreen: true
-    storage:
-      type: kubernetes
-      config:
-        inCluster: true    
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  labels:
-    app: dex
-  name: dex
-  namespace: auth-system
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: dex
-  strategy:
-    rollingUpdate:
-      maxSurge: 1
-      maxUnavailable: 1
-    type: RollingUpdate
-  template:
-    metadata:
-      labels:
-        app: dex
-        revision: "1"
-    spec:
-      initContainers:
-      - name: dl-theme
-        image: alpine/git
-        command:
-         - git
-         - clone
-         - "https://github.com/sguyennet/dex-inkubate-branding.git"
-         - /theme
-        volumeMounts:
-        - name: theme
-          mountPath: /theme/
-      containers:
-      - command:
-        - /usr/local/bin/dex
-        - serve
-        - /etc/dex/cfg/config.yaml
-        image: quay.io/dexidp/dex:v2.24.0
-        imagePullPolicy: IfNotPresent
-        name: dex
-        ports:
-        - containerPort: 5556
-          name: http
-          protocol: TCP
-        resources: {}
-        terminationMessagePath: /dev/termination-log
-        terminationMessagePolicy: File
-        volumeMounts:
-        - mountPath: /etc/dex/cfg
-          name: config
-        - mountPath: /web/themes/custom/
-          name: theme
-      dnsPolicy: ClusterFirst
-      serviceAccountName: dex
-      restartPolicy: Always
-      schedulerName: default-scheduler
-      securityContext: {}
-      terminationGracePeriodSeconds: 30
-      volumes:
-      - configMap:
-          defaultMode: 420
-          items:
-          - key: config.yaml
-            path: config.yaml
-          name: dex
-        name: config
-      - name: theme
-        emptyDir: {}
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: dex
-  namespace: auth-system
-spec:
-  selector:
-    app: dex
-  ports:
-  - name: dex
-    port: 5556
-    protocol: TCP
-    targetPort: 5556
----
-apiVersion: networking.k8s.io/v1beta1
-kind: Ingress
-metadata:
-  name: dex-ingress
-  namespace: auth-system
-  annotations:
-    kubernetes.io/ingress.class: "nginx"
-    cert-manager.io/cluster-issuer: "tls-ca-issuer"
-#    nginx.ingress.kubernetes.io/ssl-redirect: "false"
-    ingress.kubernetes.io/force-ssl-redirect: "true"
-spec:
-  tls:
-  - hosts:
-    - dex.kubernetes.riupie.com
-    secretName: dex
-  rules:
-  - host: dex.kubernetes.riupie.com
-    http:
-      paths:
-      - backend:
-          serviceName: dex
-          servicePort: 5556
-
kubectl create -f dex-system.yml
-

6.3. Verify dex deployment.

ubuntu@ag-k8s-master0:~/auth-system$ curl https://dex.kubernetes.riupie.com/.well-known/openid-configuration
-{
-  "issuer": "https://dex.kubernetes.riupie.com",
-  "authorization_endpoint": "https://dex.kubernetes.riupie.com/auth",
-  "token_endpoint": "https://dex.kubernetes.riupie.com/token",
-  "jwks_uri": "https://dex.kubernetes.riupie.com/keys",
-  "userinfo_endpoint": "https://dex.kubernetes.riupie.com/userinfo",
-  "response_types_supported": [
-    "code"
-  ],
-  "subject_types_supported": [
-    "public"
-  ],
-  "id_token_signing_alg_values_supported": [
-    "RS256"
-  ],
-  "scopes_supported": [
-    "openid",
-    "email",
-    "groups",
-    "profile",
-    "offline_access"
-  ],
-  "token_endpoint_auth_methods_supported": [
-    "client_secret_basic"
-  ],
-  "claims_supported": [
-    "aud",
-    "email",
-    "email_verified",
-    "exp",
-    "iat",
-    "iss",
-    "locale",
-    "name",
-    "sub"
-  ]
-}
-

6.4. Configure Kubernetes API

vim /etc/kubernetes/manifests/kube-apiserver.yaml
-
...
-spec:
-  containers:
-  - command:
-    - kube-apiserver
-    ....
-    - --oidc-issuer-url=https://dex.kubernetes.riupie.com
-    - --oidc-client-id=oidc-auth-client
-    - --oidc-username-claim=email
-    - --oidc-groups-claim=groups
-...
-

6.5. Wait for kube-api pods to restart

7. Deploy Gangway

7.1. Create secret key for Gangway

kubectl -n auth-system create secret generic gangway-key --from-literal=sesssionkey=$(openssl rand -base64 32)
-

7.2. Create Gangway YAML deployment

cd
-cd auth-system
-
-vim gangway-system.yml
-
---
-apiVersion: v1
-kind: ConfigMap
-metadata:
-  name: gangway
-  namespace: auth-system
-data:
-  gangway.yaml: |
-    clusterName: "kubernetes"
-    apiServerURL: "https://10.54.54.10:6443"
-    authorizeURL: "https://dex.kubernetes.riupie.com/auth"
-    tokenURL: "https://dex.kubernetes.riupie.com/token"
-    clientID: "oidc-auth-client"
-    clientSecret: "XmT7EHo27skGchX0yLQNTYXibm3aNkx5"
-    redirectURL: "https://kubectl.kubernetes.riupie.com/callback"
-    scopes: ["openid", "profile", "email","groups", "offline_access"]
-    usernameClaim: "email"
-    emailClaim: "email"
-    trustedCAPath: "/cacerts/tls.crt"    
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: gangway
-  namespace: auth-system
-  labels:
-    app: gangway
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: gangway
-  strategy:
-  template:
-    metadata:
-      labels:
-        app: gangway
-        revision: "1"
-    spec:
-      containers:
-        - name: gangway
-          image: gcr.io/heptio-images/gangway:v3.2.0
-          imagePullPolicy: Always
-          command: ["gangway", "-config", "/gangway/gangway.yaml"]
-          env:
-            - name: GANGWAY_SESSION_SECURITY_KEY
-              valueFrom:
-                secretKeyRef:
-                  name: gangway-key
-                  key: sesssionkey
-          ports:
-            - name: http
-              containerPort: 8080
-              protocol: TCP
-          resources:
-            requests:
-              cpu: "100m"
-              memory: "100Mi"
-            limits:
-              cpu: "100m"
-              memory: "100Mi"
-          volumeMounts:
-            - name: gangway
-              mountPath: /gangway/
-            - name: ca
-              mountPath: /cacerts/
-          livenessProbe:
-            httpGet:
-              path: /
-              port: 8080
-            initialDelaySeconds: 20
-            timeoutSeconds: 1
-            periodSeconds: 60
-            failureThreshold: 3
-          readinessProbe:
-            httpGet:
-              path: /
-              port: 8080
-            timeoutSeconds: 1
-            periodSeconds: 10
-            failureThreshold: 3
-      volumes:
-        - name: gangway
-          configMap:
-            name: gangway
-        - name: ca
-          secret:
-            secretName: dex
----
-kind: Service
-apiVersion: v1
-metadata:
-  name: gangway-svc
-  namespace: auth-system
-  labels:
-    app: gangway
-spec:
-  type: ClusterIP
-  ports:
-    - name: "http"
-      protocol: TCP
-      port: 80
-      targetPort: "http"
-  selector:
-    app: gangway
----
-apiVersion: networking.k8s.io/v1beta1
-kind: Ingress
-metadata:
-  name: gangway
-  namespace: auth-system
-  annotations:
-    kubernetes.io/ingress.class: "nginx"
-    cert-manager.io/cluster-issuer: "tls-ca-issuer"
-#    nginx.ingress.kubernetes.io/ssl-redirect: "true"
-    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
-spec:
-  tls:
-  - hosts:
-    - kubectl.kubernetes.riupie.com
-    secretName: gangway
-  rules:
-  - host: kubectl.kubernetes.riupie.com
-    http:
-      paths:
-      - backend:
-          serviceName: gangway-svc
-          servicePort: http
-
kubectl create -f gangway-system.yml
-

7.4. Verify dex and gangway pods

ubuntu@ag-k8s-master0:~$ kubectl get pods -n auth-system
-NAME                            READY   STATUS    RESTARTS   AGE
-dex-74fb858546-5jccf            1/1     Running   0          5d15h
-gangway-64b4788d5c-7tdcr        1/1     Running   0          5d15h
-

7.5 Create RBAC for admins Group

vim rbac-admin.yml
-
---
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: admin-user
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: cluster-admin
-subjects:
-- kind: Group
-  name: admins
-
kubectl create -f rbac-admins.yml
-

7.6. Create RBAC for developers Group

LDAP users in group developers only have read access.

vim rbac-dev.yml
-
---
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: dev-user
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: view
-subjects:
-- kind: Group
-  name: developers
-
kubectl create -f rbac-dev.yml
-

7.7. Accesing Gangway

Access to https://kubectl.kubernetes.riupie.com then login using johndoe user. -gangway-1 -gangway-2 -gangway-3

\ No newline at end of file diff --git a/blog/page/1/index.html b/blog/page/1/index.html deleted file mode 100644 index 694831f..0000000 --- a/blog/page/1/index.html +++ /dev/null @@ -1,2 +0,0 @@ -https://www.rahmatawe.com/blog/ - \ No newline at end of file diff --git a/blog/tidy-up-prometheus-metrics/index.html b/blog/tidy-up-prometheus-metrics/index.html deleted file mode 100644 index 6ff72c3..0000000 --- a/blog/tidy-up-prometheus-metrics/index.html +++ /dev/null @@ -1,43 +0,0 @@ -RahmatAwe -

Tidy up our Prometheus metrics!

November 26, 2023

In this article I’ll explain my process of analyzing and setting up Prometheus, where I maybe effectively increase query performance and addressed challenges related to cardinality. FYI, I use this stack on my monitoring system: Grafana, Promethues, Thanos. The metrics itself gethered from several source: node exporter, kube-state-metrics, etc.

1. List unused metrics

Firs, we need to list metrcis that used in our Grafana. To do this task, we can use mimirtool.

$ mimirtool analyze grafana --address=${GRAFANA_URL} --key="${GRAFANA_API_TOKEN}"
-

In my case, I execute this command:

$ mimirtool analyze grafana --address=https://grafana.rahmatawe.com --key="glsa_jLKvTx6RLkGXXXX6XKS6DXlrulepsy_xxxxx"
-

Anw, you can get GRAFANA_API_TOKEN by creating service account on Grafana dashboard. -image

Above command will generate file named metrics-in-grafana.json. Using this file, we will compare it to metrics stored in Prometheus.

#port forward to prometheus
-$ kubectl port-forward prometheus-prometheus-0 9090:9090 -n monitoring
-
-# Compare grafana metrics and prometheus
-$ mimirtool analyze prometheus --grafana-metrics-file="metrics-in-grafana.json" --address=http://localhost:9090
-
-INFO[0002] 73815 active series are being used in dashboards
-INFO[0002] Found 2495 metric names
-INFO[0017] 434700 active series are NOT being used in dashboards
-INFO[0017] 467 in use active series metric count
-INFO[0017] 2028 not in use active series metric count
-

NOTE: Adjust prometheus-prometheus-0 with your prometheus pod name and monitoring with namespace where your prometheus pod deployed.

It will generate file prometheus-metrics.json. Sort it.

$ jq -r ".in_use_metric_counts[].metric" prometheus-metrics.json | sort > used_metrics.txt
-$ jq -r ".additional_metric_counts[].metric" prometheus-metrics.json | sort > unused_metrics.txt
-
  1. Drop unused metrics -On step 1, we have been list used metrics and unused metrics. Next step, we will check metrics which have high cardinality via Prometheus dashboard http://localhost:9090/tsdb-status. -image

Hmm, let us check metrics apiserver_request_duration_seconds_bucket.

$ grep apiserver_request_duration_seconds_bucket u*_metrics.txt
-unused_metrics.txt:apiserver_request_duration_seconds_bucket
-

We can drop this metrics since it’s not used by Grafana. I will drop it via its ServiceMonitor. You can drop it other method (ex: prometheus config directly) depend on your setup.

---
-apiVersion: monitoring.coreos.com/v1
-kind: ServiceMonitor
-metadata:
-  name: kube-apiserver
-  namespace: monitoring
-  labels:
-    prometheus: main
-    release: prometheus-operator
-
-...
-
-      metricRelabelings:
-      - sourceLabels: ["__name__"]
-        regex: 'apiserver_request_duration_seconds_bucket'
-        action: drop
-

That’s it. Simple task to drop your bloated Prometheus metrics. Bye!

Ref:

\ No newline at end of file diff --git a/browserconfig.xml b/browserconfig.xml deleted file mode 100644 index 6e75965..0000000 --- a/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #da532c - - - diff --git a/categories/cheatsheet/index.html b/categories/cheatsheet/index.html deleted file mode 100644 index 39a198c..0000000 --- a/categories/cheatsheet/index.html +++ /dev/null @@ -1,6 +0,0 @@ -RahmatAwe -

cheatsheet

cheatsheet

Reading Time: 2 minutes

March 1, 2021

\ No newline at end of file diff --git a/categories/cheatsheet/index.xml b/categories/cheatsheet/index.xml deleted file mode 100644 index fe98224..0000000 --- a/categories/cheatsheet/index.xml +++ /dev/null @@ -1 +0,0 @@ -cheatsheet onhttps://www.rahmatawe.com/categories/cheatsheet/Recent content in cheatsheet onHugo -- gohugo.ioen-usMon, 01 Mar 2021 00:00:00 +0000cheatsheethttps://www.rahmatawe.com/blog/cheatsheet/Mon, 01 Mar 2021 00:00:00 +0000https://www.rahmatawe.com/blog/cheatsheet/Running short-lived container to compile source code $ sudo docker run --rm -it -v ${PWD}:/app -w /app openjdk:11-jdk-slim /bin/sh -c ./gradlew buildRun Rsync over SSH on Spesific Port $ rsync -avzhe &#39;ssh -p [port_number]&#39; -P [user@remote_ip]:/path/to/file/source /path/to/file/destination Scan IP on Network $ nmap -sP [ip_address/prefix] Search Available Version of Spesific Package on Debian Based OS $ apt list -a &lt;package_name&gt; Install Spesific Kubernetes Version #example version 1.15.x# $ sudo apt update;sudo apt install -qy kubelet=1. \ No newline at end of file diff --git a/categories/cheatsheet/page/1/index.html b/categories/cheatsheet/page/1/index.html deleted file mode 100644 index ec1607e..0000000 --- a/categories/cheatsheet/page/1/index.html +++ /dev/null @@ -1,2 +0,0 @@ -https://www.rahmatawe.com/categories/cheatsheet/ - \ No newline at end of file diff --git a/categories/cloud/index.html b/categories/cloud/index.html deleted file mode 100644 index 764b68a..0000000 --- a/categories/cloud/index.html +++ /dev/null @@ -1,13 +0,0 @@ -RahmatAwe -

cloud

Deploying HCI Openstack using Kolla Ansible

Reading Time: 5 minutes

October 17, 2020

Deploying UPI OKD 4.5 Cluster

Reading Time: 15 minutes

October 17, 2020

\ No newline at end of file diff --git a/categories/cloud/index.xml b/categories/cloud/index.xml deleted file mode 100644 index 5b48d79..0000000 --- a/categories/cloud/index.xml +++ /dev/null @@ -1,2 +0,0 @@ -cloud onhttps://www.rahmatawe.com/categories/cloud/Recent content in cloud onHugo -- gohugo.ioen-usSat, 17 Oct 2020 00:00:00 +0000Deploying HCI Openstack using Kolla Ansiblehttps://www.rahmatawe.com/blog/deploying-openstack-hci/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/blog/deploying-openstack-hci/IP Information Hostname Storage Interface (enp1s0) Openstack Interface (enp7s0) server0 10.50.50.10 10.51.51.10 server1 10.50.50.11 10.51.51.11 server2 10.50.50.12 10.51.51.12 A. Deploy Ceph Cluster In this first stage, I will deploy Ceph Cluster using Ceph Ansible. Ceph Ansible has two different approach when deploy Ceph Cluster: 1) Systemd based and 2) Container based. In here, I will use container based deployment which is use Podman as container runtime. -1. Install required packages yum install git python3-pip vim -y pip3 install ansible 2.Deploying UPI OKD 4.5 Clusterhttps://www.rahmatawe.com/blog/deploying-upi-okd/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/blog/deploying-upi-okd/Environment IP Address Hostname OS Description 10.10.51.9 okd-bastion CentOS 8 DNS Server, DHCP Server, NTP Server, PXE Server, LDAP Server 10.10.51.10 okd-bootstrap Fedora COreOS Bootstrap Server. Temporary only, could be delete after bootstrapping done. 10.10.51.11 okd-master01 Fedora CoreOS Master 10.10.51.12 okd-master02 Fedora CoreOS Master 10.10.51.13 okd-master03 Fedora CoreOS Master 10.10.51.21 okd-worker01 Fedora CoreOS Worker 10.10.51.22 okd-worker02 Fedora CoreOS Worker 10.10.51.31 okd-lb1 CentOS 8 Load Balancer 10.10.51.32 okd-lb2 CentOS 8 Load Balancer Part 1: Bastion/Helper Server 1. \ No newline at end of file diff --git a/categories/cloud/page/1/index.html b/categories/cloud/page/1/index.html deleted file mode 100644 index 0c3e2d2..0000000 --- a/categories/cloud/page/1/index.html +++ /dev/null @@ -1,2 +0,0 @@ -https://www.rahmatawe.com/categories/cloud/ - \ No newline at end of file diff --git a/categories/devops/index.html b/categories/devops/index.html index 1b24704..5bfec4e 100644 --- a/categories/devops/index.html +++ b/categories/devops/index.html @@ -1,13 +1,15 @@ -RahmatAwe -

devops

Tidy up our Prometheus metrics!

Reading Time: 2 minutes

November 26, 2023

Send Log from Event Viewer on Windows Server 2019 to Grafana Loki

Reading Time: 4 minutes

April 15, 2022

\ No newline at end of file +devops + \ No newline at end of file diff --git a/categories/devops/index.xml b/categories/devops/index.xml index 341e248..3228f14 100644 --- a/categories/devops/index.xml +++ b/categories/devops/index.xml @@ -1,3 +1,3 @@ -devops onhttps://www.rahmatawe.com/categories/devops/Recent content in devops onHugo -- gohugo.ioen-usSun, 26 Nov 2023 00:00:00 +0000Tidy up our Prometheus metrics!https://www.rahmatawe.com/blog/tidy-up-prometheus-metrics/Sun, 26 Nov 2023 00:00:00 +0000https://www.rahmatawe.com/blog/tidy-up-prometheus-metrics/In this article I&rsquo;ll explain my process of analyzing and setting up Prometheus, where I maybe effectively increase query performance and addressed challenges related to cardinality. FYI, I use this stack on my monitoring system: Grafana, Promethues, Thanos. The metrics itself gethered from several source: node exporter, kube-state-metrics, etc. -1. List unused metrics Firs, we need to list metrcis that used in our Grafana. To do this task, we can use mimirtool.Send Log from Event Viewer on Windows Server 2019 to Grafana Lokihttps://www.rahmatawe.com/blog/send-event-viewer-log-to-grafana-loki/Fri, 15 Apr 2022 00:00:00 +0000https://www.rahmatawe.com/blog/send-event-viewer-log-to-grafana-loki/Environment # Servers ag-rh2 : 10.54.54.6 (Grafana + Loki) win2k19 : 10.54.54.219 (Promtail) # OS Packages Release RHEL 8.4 Windows Server 2019 Loki 2.5 Grafana 8.4.6 Setup Loki 1. Download package Loki curl -O -L &#34;https://github.com/grafana/loki/releases/download/v2.5.0/loki-linux-amd64.zip&#34; 2. Setup loki binary # Unzip package unzip loki-linux-amd64.zip # Grant execute permission chmod +x loki-linux-amd64 # Create directory for loki installation sudo mkdir -p /opt/loki/{bin,conf,data} # Move loki binary mv loki-linux-amd64 /opt/loki/bin/loki 3. Setup loki configuration Default configuration can be retrieved from here.Implementing LDAP Authentication for Kubernetes using Dex on Ubuntu 18.04https://www.rahmatawe.com/blog/ldap-kubernetes-integration/Fri, 06 Nov 2020 00:00:00 +0000https://www.rahmatawe.com/blog/ldap-kubernetes-integration/Environment # Servers ag-k8s-master0 : 10.54.54.10/24 (Kubernetes Master) ag-k8s-worker0 : 10.54.54.20/24 (Kubernetes Worker) ag-k8s-worker1 : 10.54.54.21/24 (Kubernetes Worker) ag-k8s-ldap : 10.54.54.30/24 (LDAP Server, DNS Server) # Packages Release Ubuntu 18.04 Kubernetes 1.19 OpenLDAP 2.4 Part 1: Pre-Flight 1. Setup DNS Server For simplicity, I used dnsmasq with minimal configuration. You can use your prefered DNS Server (ex: bind9). -1.1. Install DNSMASQ root@ag-k8s-ldap:~# apt -y install dnsmasq 1.2. Configure Dnsmasq. Uncomment line below. \ No newline at end of file +devops on RahmatAwehttps://www.rahmatawe.com/categories/devops/Recent content in devops on RahmatAweHugo -- gohugo.ioenThu, 01 Dec 2022 08:06:25 +0600Tidy up our Prometheus metrics!https://www.rahmatawe.com/posts/tidy-up-prometheus/Thu, 01 Dec 2022 08:06:25 +0600https://www.rahmatawe.com/posts/tidy-up-prometheus/In this article I&rsquo;ll explain my process of analyzing and setting up Prometheus, where I maybe effectively increase query performance and addressed challenges related to cardinality. FYI, I use this stack on my monitoring system: Grafana, Promethues, Thanos. The metrics itself gethered from several source: node exporter, kube-state-metrics, etc. +1. List unused metrics Firs, we need to list metrcis that used in our Grafana. To do this task, we can use mimirtool.Send Log from Event Viewer on Windows Server 2019 to Grafana Lokihttps://www.rahmatawe.com/posts/send-event-viewer-log-to-grafana-loki/Fri, 15 Apr 2022 08:06:25 +0600https://www.rahmatawe.com/posts/send-event-viewer-log-to-grafana-loki/It&rsquo;s just PoC of collecting Windows logs using open source project such as Promtail, Loki and Grafana. +Environment # Servers ag-rh2 : 10.54.54.6 (Grafana + Loki) win2k19 : 10.54.54.219 (Promtail) # OS Packages Release RHEL 8.4 Windows Server 2019 Loki 2.5 Grafana 8.4.6 Setup Loki 1. Download package Loki curl -O -L &#34;https://github.com/grafana/loki/releases/download/v2.5.0/loki-linux-amd64.zip&#34; 2. Setup loki binary # Unzip package unzip loki-linux-amd64.zip # Grant execute permission chmod +x loki-linux-amd64 # Create directory for loki installation sudo mkdir -p /opt/loki/{bin,conf,data} # Move loki binary mv loki-linux-amd64 /opt/loki/bin/loki 3. \ No newline at end of file diff --git a/categories/devops/page/1/index.html b/categories/devops/page/1/index.html index 1a93726..43eaf18 100644 --- a/categories/devops/page/1/index.html +++ b/categories/devops/page/1/index.html @@ -1,2 +1,2 @@ -https://www.rahmatawe.com/categories/devops/ +https://www.rahmatawe.com/categories/devops/ \ No newline at end of file diff --git a/categories/index.html b/categories/index.html index eec2e62..1082aa0 100644 --- a/categories/index.html +++ b/categories/index.html @@ -1,4 +1,15 @@ -RahmatAwe -

Categories

devops

Reading Time: 0 minutes

November 26, 2023

cheatsheet

Reading Time: 0 minutes

March 1, 2021

cloud

Reading Time: 0 minutes

October 17, 2020

\ No newline at end of file +Categories + \ No newline at end of file diff --git a/categories/index.xml b/categories/index.xml index 7f5cc88..429c617 100644 --- a/categories/index.xml +++ b/categories/index.xml @@ -1 +1 @@ -Categories onhttps://www.rahmatawe.com/categories/Recent content in Categories onHugo -- gohugo.ioen-usSun, 26 Nov 2023 00:00:00 +0000devopshttps://www.rahmatawe.com/categories/devops/Sun, 26 Nov 2023 00:00:00 +0000https://www.rahmatawe.com/categories/devops/cheatsheethttps://www.rahmatawe.com/categories/cheatsheet/Mon, 01 Mar 2021 00:00:00 +0000https://www.rahmatawe.com/categories/cheatsheet/cloudhttps://www.rahmatawe.com/categories/cloud/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/categories/cloud/ \ No newline at end of file +Categories on RahmatAwehttps://www.rahmatawe.com/categories/Recent content in Categories on RahmatAweHugo -- gohugo.ioenThu, 01 Dec 2022 08:06:25 +0600 \ No newline at end of file diff --git a/categories/page/1/index.html b/categories/page/1/index.html index b955daf..c3351f8 100644 --- a/categories/page/1/index.html +++ b/categories/page/1/index.html @@ -1,2 +1,2 @@ -https://www.rahmatawe.com/categories/ +https://www.rahmatawe.com/categories/ \ No newline at end of file diff --git a/css/aafu.css b/css/aafu.css deleted file mode 100644 index 7532609..0000000 --- a/css/aafu.css +++ /dev/null @@ -1,102 +0,0 @@ -body { - font-family: "Roboto", sans-serif; - overflow-y: scroll; - transition: all 0.15s; - background-color: var(--primaryBg); - color: var(--primaryText); -} -.content img { - width: 60%; - display: block; - margin: 50px auto; -} -pre { - background-color: var(--secondaryBg); - color: var(--secondaryText); - padding: 6px 12px; - border-radius: 5px; - box-shadow: 0px 0px 3px 1px var(--shadow) !important; -} -code { - font-family: "Roboto Mono", monospace !important; - font-size: 1em !important; -} -footer { - font-size: 0.9em !important; -} -dt { - font-weight: 400; -} -h1, -h2, -h3, -h4 { - font-family: "Didact Gothic", sans-serif; -} -a, -a:hover, -.accordion, -.accordion:hover { - color: var(--primaryLinks); -} -.profile-area a, -.profile-area .accordion:hover, -.social-icons * { - color: var(--secondaryLinks); -} -.fa-toggle-on, -.fa-toggle-off { - color: var(--primaryLinks); -} -.skillbar { - background-color: var(--primaryBg); - border: solid 1px var(--primaryText); -} -#skill-percent { - background-color: var(--primaryLinks); -} -.profile-area { - background-color: var(--secondaryBg); - color: var(--secondaryText); -} -.shadow { - box-shadow: -4px -4px 5px 2px var(--shadow) !important; -} -.top-h1 { - font-size: 2.5em; -} -.zoomlink { - font-size: 2em; -} -.zoomlink:hover { - font-size: 1.9em; - cursor: pointer; -} -.panel { - max-height: 0; - transition: 0.3s ease-out; -} -.skillbar { - border-radius: 3px; -} -#skill-percent { - height: 15px; - transition: all 0.7s; -} -.pagination * { - background-color: var(--primaryBg) !important; - color: var(--primaryLinks) !important; -} -.page-item { - border: solid 1px var(--primaryLinks) !important; -} -.page-item.disabled * { - color: var(--primaryText) !important; -} -.page-item.active * { - color: var(--secondaryText) !important; - background-color: var(--secondaryBg) !important; -} -.aafu-border { - border-color: var(--primaryLinks) !important; -} diff --git a/css/aafu_dark.css b/css/aafu_dark.css deleted file mode 100644 index 5ae1087..0000000 --- a/css/aafu_dark.css +++ /dev/null @@ -1,9 +0,0 @@ -:root { - --primaryBg: #2c2b2b; - --primaryText: white; - --primaryLinks: #ffc107; - --secondaryBg: #373737; - --secondaryText: white; - --secondaryLinks: #ffc107; - --shadow: black; -} diff --git a/css/aafu_light.css b/css/aafu_light.css deleted file mode 100644 index fe7d589..0000000 --- a/css/aafu_light.css +++ /dev/null @@ -1,9 +0,0 @@ -:root { - --primaryBg: #f8f9fa; - --primaryText: black; - --primaryLinks: #007bff; - --secondaryBg: #fff; - --secondaryText: black; - --secondaryLinks: #007bff; - --shadow: #595659; -} diff --git a/css/aafu_pinkish.css b/css/aafu_pinkish.css deleted file mode 100644 index d219c10..0000000 --- a/css/aafu_pinkish.css +++ /dev/null @@ -1,9 +0,0 @@ -:root { - --primaryBg: #f8f9fa; - --primaryText: black; - --primaryLinks: #81415f; - --secondaryBg: #81415f; - --secondaryText: white; - --secondaryLinks: #ffc107; - --shadow: #595659; -} diff --git a/css/bootstrap/bootstrap.min.css b/css/bootstrap/bootstrap.min.css deleted file mode 100644 index 8c08e0b..0000000 --- a/css/bootstrap/bootstrap.min.css +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v4.3.1 (https://getbootstrap.com/) - * Copyright 2011-2019 The Bootstrap Authors - * Copyright 2011-2019 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:0s .6s opacity}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} -/* sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/en/index.html b/en/index.html new file mode 100644 index 0000000..e7b4b63 --- /dev/null +++ b/en/index.html @@ -0,0 +1,2 @@ +https://www.rahmatawe.com + \ No newline at end of file diff --git a/en/sitemap.xml b/en/sitemap.xml new file mode 100644 index 0000000..4924095 --- /dev/null +++ b/en/sitemap.xml @@ -0,0 +1 @@ +https://www.rahmatawe.com/notes/sysadmin/bash/https://www.rahmatawe.com/notes/sysadmin/container/https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/categories/2022-12-01T08:06:25+06:00https://www.rahmatawe.com/categories/devops/2022-12-01T08:06:25+06:00https://www.rahmatawe.com/tags/linux/2022-12-01T08:06:25+06:00https://www.rahmatawe.com/tags/monitoring/2022-12-01T08:06:25+06:00https://www.rahmatawe.com/posts/2022-12-01T08:06:25+06:00https://www.rahmatawe.com/2022-12-01T08:06:25+06:00https://www.rahmatawe.com/tags/2022-12-01T08:06:25+06:00https://www.rahmatawe.com/posts/tidy-up-prometheus/2022-12-01T08:06:25+06:00https://www.rahmatawe.com/posts/send-event-viewer-log-to-grafana-loki/2022-04-15T08:06:25+06:00https://www.rahmatawe.com/notes/2010-06-08T08:06:25+06:00https://www.rahmatawe.com/search/2010-06-08T08:06:25+06:00https://www.rahmatawe.com/notes/sysadmin/https://www.rahmatawe.com/search/0.1 \ No newline at end of file diff --git a/favicon-16x16.png b/favicon-16x16.png deleted file mode 100644 index a867e76..0000000 Binary files a/favicon-16x16.png and /dev/null differ diff --git a/favicon-32x32.png b/favicon-32x32.png deleted file mode 100644 index 2948ea9..0000000 Binary files a/favicon-32x32.png and /dev/null differ diff --git a/favicon.ico b/favicon.ico deleted file mode 100644 index 84fda20..0000000 Binary files a/favicon.ico and /dev/null differ diff --git a/files/file-list.json b/files/file-list.json new file mode 100644 index 0000000..34fbc97 --- /dev/null +++ b/files/file-list.json @@ -0,0 +1,188 @@ +[ + "./fonts/google/mulish/files/mulish-cyrillic-200-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-ext-200-italic.woff", + "./fonts/google/mulish/files/mulish-latin-200-italic.woff", + "./fonts/google/mulish/files/mulish-latin-ext-200-italic.woff", + "./fonts/google/mulish/files/mulish-vietnamese-200-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-200-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-ext-200-normal.woff", + "./fonts/google/mulish/files/mulish-latin-200-normal.woff", + "./fonts/google/mulish/files/mulish-latin-ext-200-normal.woff", + "./fonts/google/mulish/files/mulish-vietnamese-200-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-300-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-ext-300-italic.woff", + "./fonts/google/mulish/files/mulish-latin-300-italic.woff", + "./fonts/google/mulish/files/mulish-latin-ext-300-italic.woff", + "./fonts/google/mulish/files/mulish-vietnamese-300-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-300-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-ext-300-normal.woff", + "./fonts/google/mulish/files/mulish-latin-300-normal.woff", + "./fonts/google/mulish/files/mulish-latin-ext-300-normal.woff", + "./fonts/google/mulish/files/mulish-vietnamese-300-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-400-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-ext-400-italic.woff", + "./fonts/google/mulish/files/mulish-latin-400-italic.woff", + "./fonts/google/mulish/files/mulish-latin-ext-400-italic.woff", + "./fonts/google/mulish/files/mulish-vietnamese-400-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-400-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-ext-400-normal.woff", + "./fonts/google/mulish/files/mulish-latin-400-normal.woff", + "./fonts/google/mulish/files/mulish-latin-ext-400-normal.woff", + "./fonts/google/mulish/files/mulish-vietnamese-400-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-500-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-ext-500-italic.woff", + "./fonts/google/mulish/files/mulish-latin-500-italic.woff", + "./fonts/google/mulish/files/mulish-latin-ext-500-italic.woff", + "./fonts/google/mulish/files/mulish-vietnamese-500-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-500-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-ext-500-normal.woff", + "./fonts/google/mulish/files/mulish-latin-500-normal.woff", + "./fonts/google/mulish/files/mulish-latin-ext-500-normal.woff", + "./fonts/google/mulish/files/mulish-vietnamese-500-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-600-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-ext-600-italic.woff", + "./fonts/google/mulish/files/mulish-latin-600-italic.woff", + "./fonts/google/mulish/files/mulish-latin-ext-600-italic.woff", + "./fonts/google/mulish/files/mulish-vietnamese-600-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-600-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-ext-600-normal.woff", + "./fonts/google/mulish/files/mulish-latin-600-normal.woff", + "./fonts/google/mulish/files/mulish-latin-ext-600-normal.woff", + "./fonts/google/mulish/files/mulish-vietnamese-600-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-700-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-ext-700-italic.woff", + "./fonts/google/mulish/files/mulish-latin-700-italic.woff", + "./fonts/google/mulish/files/mulish-latin-ext-700-italic.woff", + "./fonts/google/mulish/files/mulish-vietnamese-700-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-700-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-ext-700-normal.woff", + "./fonts/google/mulish/files/mulish-latin-700-normal.woff", + "./fonts/google/mulish/files/mulish-latin-ext-700-normal.woff", + "./fonts/google/mulish/files/mulish-vietnamese-700-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-800-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-ext-800-italic.woff", + "./fonts/google/mulish/files/mulish-latin-800-italic.woff", + "./fonts/google/mulish/files/mulish-latin-ext-800-italic.woff", + "./fonts/google/mulish/files/mulish-vietnamese-800-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-800-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-ext-800-normal.woff", + "./fonts/google/mulish/files/mulish-latin-800-normal.woff", + "./fonts/google/mulish/files/mulish-latin-ext-800-normal.woff", + "./fonts/google/mulish/files/mulish-vietnamese-800-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-900-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-ext-900-italic.woff", + "./fonts/google/mulish/files/mulish-latin-900-italic.woff", + "./fonts/google/mulish/files/mulish-latin-ext-900-italic.woff", + "./fonts/google/mulish/files/mulish-vietnamese-900-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-900-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-ext-900-normal.woff", + "./fonts/google/mulish/files/mulish-latin-900-normal.woff", + "./fonts/google/mulish/files/mulish-latin-ext-900-normal.woff", + "./fonts/google/mulish/files/mulish-vietnamese-900-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-ext-200-italic.woff2", + "./fonts/google/mulish/files/mulish-all-200-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-200-italic.woff2", + "./fonts/google/mulish/files/mulish-vietnamese-200-italic.woff2", + "./fonts/google/mulish/files/mulish-latin-ext-200-italic.woff2", + "./fonts/google/mulish/files/mulish-latin-200-italic.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-ext-200-normal.woff2", + "./fonts/google/mulish/files/mulish-all-200-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-200-normal.woff2", + "./fonts/google/mulish/files/mulish-vietnamese-200-normal.woff2", + "./fonts/google/mulish/files/mulish-latin-ext-200-normal.woff2", + "./fonts/google/mulish/files/mulish-latin-200-normal.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-ext-300-italic.woff2", + "./fonts/google/mulish/files/mulish-all-300-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-300-italic.woff2", + "./fonts/google/mulish/files/mulish-vietnamese-300-italic.woff2", + "./fonts/google/mulish/files/mulish-latin-ext-300-italic.woff2", + "./fonts/google/mulish/files/mulish-latin-300-italic.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-ext-300-normal.woff2", + "./fonts/google/mulish/files/mulish-all-300-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-300-normal.woff2", + "./fonts/google/mulish/files/mulish-vietnamese-300-normal.woff2", + "./fonts/google/mulish/files/mulish-latin-ext-300-normal.woff2", + "./fonts/google/mulish/files/mulish-latin-300-normal.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-ext-400-italic.woff2", + "./fonts/google/mulish/files/mulish-all-400-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-400-italic.woff2", + "./fonts/google/mulish/files/mulish-vietnamese-400-italic.woff2", + "./fonts/google/mulish/files/mulish-latin-ext-400-italic.woff2", + "./fonts/google/mulish/files/mulish-latin-400-italic.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-ext-400-normal.woff2", + "./fonts/google/mulish/files/mulish-all-400-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-400-normal.woff2", + "./fonts/google/mulish/files/mulish-vietnamese-400-normal.woff2", + "./fonts/google/mulish/files/mulish-latin-ext-400-normal.woff2", + "./fonts/google/mulish/files/mulish-latin-400-normal.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-ext-500-italic.woff2", + "./fonts/google/mulish/files/mulish-all-500-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-500-italic.woff2", + "./fonts/google/mulish/files/mulish-vietnamese-500-italic.woff2", + "./fonts/google/mulish/files/mulish-latin-ext-500-italic.woff2", + "./fonts/google/mulish/files/mulish-latin-500-italic.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-ext-500-normal.woff2", + "./fonts/google/mulish/files/mulish-all-500-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-500-normal.woff2", + "./fonts/google/mulish/files/mulish-vietnamese-500-normal.woff2", + "./fonts/google/mulish/files/mulish-latin-ext-500-normal.woff2", + "./fonts/google/mulish/files/mulish-latin-500-normal.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-ext-600-italic.woff2", + "./fonts/google/mulish/files/mulish-all-600-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-600-italic.woff2", + "./fonts/google/mulish/files/mulish-vietnamese-600-italic.woff2", + "./fonts/google/mulish/files/mulish-latin-ext-600-italic.woff2", + "./fonts/google/mulish/files/mulish-latin-600-italic.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-ext-600-normal.woff2", + "./fonts/google/mulish/files/mulish-all-600-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-600-normal.woff2", + "./fonts/google/mulish/files/mulish-vietnamese-600-normal.woff2", + "./fonts/google/mulish/files/mulish-latin-ext-600-normal.woff2", + "./fonts/google/mulish/files/mulish-latin-600-normal.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-ext-700-italic.woff2", + "./fonts/google/mulish/files/mulish-all-700-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-700-italic.woff2", + "./fonts/google/mulish/files/mulish-vietnamese-700-italic.woff2", + "./fonts/google/mulish/files/mulish-latin-ext-700-italic.woff2", + "./fonts/google/mulish/files/mulish-latin-700-italic.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-ext-700-normal.woff2", + "./fonts/google/mulish/files/mulish-all-700-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-700-normal.woff2", + "./fonts/google/mulish/files/mulish-vietnamese-700-normal.woff2", + "./fonts/google/mulish/files/mulish-latin-ext-700-normal.woff2", + "./fonts/google/mulish/files/mulish-latin-700-normal.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-ext-800-italic.woff2", + "./fonts/google/mulish/files/mulish-all-800-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-800-italic.woff2", + "./fonts/google/mulish/files/mulish-vietnamese-800-italic.woff2", + "./fonts/google/mulish/files/mulish-latin-ext-800-italic.woff2", + "./fonts/google/mulish/files/mulish-latin-800-italic.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-ext-800-normal.woff2", + "./fonts/google/mulish/files/mulish-all-800-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-800-normal.woff2", + "./fonts/google/mulish/files/mulish-vietnamese-800-normal.woff2", + "./fonts/google/mulish/files/mulish-latin-ext-800-normal.woff2", + "./fonts/google/mulish/files/mulish-latin-800-normal.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-ext-900-italic.woff2", + "./fonts/google/mulish/files/mulish-all-900-italic.woff", + "./fonts/google/mulish/files/mulish-cyrillic-900-italic.woff2", + "./fonts/google/mulish/files/mulish-vietnamese-900-italic.woff2", + "./fonts/google/mulish/files/mulish-latin-ext-900-italic.woff2", + "./fonts/google/mulish/files/mulish-latin-900-italic.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-ext-900-normal.woff2", + "./fonts/google/mulish/files/mulish-all-900-normal.woff", + "./fonts/google/mulish/files/mulish-cyrillic-900-normal.woff2", + "./fonts/google/mulish/files/mulish-vietnamese-900-normal.woff2", + "./fonts/google/mulish/files/mulish-latin-ext-900-normal.woff2", + "./fonts/google/mulish/files/mulish-latin-900-normal.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-ext-variable-wghtOnly-normal.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-variable-wghtOnly-normal.woff2", + "./fonts/google/mulish/files/mulish-vietnamese-variable-wghtOnly-normal.woff2", + "./fonts/google/mulish/files/mulish-latin-ext-variable-wghtOnly-normal.woff2", + "./fonts/google/mulish/files/mulish-latin-variable-wghtOnly-normal.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-ext-variable-wghtOnly-italic.woff2", + "./fonts/google/mulish/files/mulish-cyrillic-variable-wghtOnly-italic.woff2", + "./fonts/google/mulish/files/mulish-vietnamese-variable-wghtOnly-italic.woff2", + "./fonts/google/mulish/files/mulish-latin-ext-variable-wghtOnly-italic.woff2", + "./fonts/google/mulish/files/mulish-latin-variable-wghtOnly-italic.woff2" +] diff --git a/files/mulish-all-200-italic.woff b/files/mulish-all-200-italic.woff new file mode 100644 index 0000000..6e2dcbf Binary files /dev/null and b/files/mulish-all-200-italic.woff differ diff --git a/files/mulish-all-200-normal.woff b/files/mulish-all-200-normal.woff new file mode 100644 index 0000000..bc51ae9 Binary files /dev/null and b/files/mulish-all-200-normal.woff differ diff --git a/files/mulish-all-300-italic.woff b/files/mulish-all-300-italic.woff new file mode 100644 index 0000000..86ac735 Binary files /dev/null and b/files/mulish-all-300-italic.woff differ diff --git a/files/mulish-all-300-normal.woff b/files/mulish-all-300-normal.woff new file mode 100644 index 0000000..f3129fb Binary files /dev/null and b/files/mulish-all-300-normal.woff differ diff --git a/files/mulish-all-400-italic.woff b/files/mulish-all-400-italic.woff new file mode 100644 index 0000000..c4dfd89 Binary files /dev/null and b/files/mulish-all-400-italic.woff differ diff --git a/files/mulish-all-400-normal.woff b/files/mulish-all-400-normal.woff new file mode 100644 index 0000000..4b69054 Binary files /dev/null and b/files/mulish-all-400-normal.woff differ diff --git a/files/mulish-all-500-italic.woff b/files/mulish-all-500-italic.woff new file mode 100644 index 0000000..f7fead3 Binary files /dev/null and b/files/mulish-all-500-italic.woff differ diff --git a/files/mulish-all-500-normal.woff b/files/mulish-all-500-normal.woff new file mode 100644 index 0000000..0f39ec0 Binary files /dev/null and b/files/mulish-all-500-normal.woff differ diff --git a/files/mulish-all-600-italic.woff b/files/mulish-all-600-italic.woff new file mode 100644 index 0000000..dae6853 Binary files /dev/null and b/files/mulish-all-600-italic.woff differ diff --git a/files/mulish-all-600-normal.woff b/files/mulish-all-600-normal.woff new file mode 100644 index 0000000..fd63f88 Binary files /dev/null and b/files/mulish-all-600-normal.woff differ diff --git a/files/mulish-all-700-italic.woff b/files/mulish-all-700-italic.woff new file mode 100644 index 0000000..99e8692 Binary files /dev/null and b/files/mulish-all-700-italic.woff differ diff --git a/files/mulish-all-700-normal.woff b/files/mulish-all-700-normal.woff new file mode 100644 index 0000000..3180440 Binary files /dev/null and b/files/mulish-all-700-normal.woff differ diff --git a/files/mulish-all-800-italic.woff b/files/mulish-all-800-italic.woff new file mode 100644 index 0000000..eeea069 Binary files /dev/null and b/files/mulish-all-800-italic.woff differ diff --git a/files/mulish-all-800-normal.woff b/files/mulish-all-800-normal.woff new file mode 100644 index 0000000..37a98e6 Binary files /dev/null and b/files/mulish-all-800-normal.woff differ diff --git a/files/mulish-all-900-italic.woff b/files/mulish-all-900-italic.woff new file mode 100644 index 0000000..efb8a67 Binary files /dev/null and b/files/mulish-all-900-italic.woff differ diff --git a/files/mulish-all-900-normal.woff b/files/mulish-all-900-normal.woff new file mode 100644 index 0000000..6420a18 Binary files /dev/null and b/files/mulish-all-900-normal.woff differ diff --git a/files/mulish-cyrillic-200-italic.woff b/files/mulish-cyrillic-200-italic.woff new file mode 100644 index 0000000..22a2247 Binary files /dev/null and b/files/mulish-cyrillic-200-italic.woff differ diff --git a/files/mulish-cyrillic-200-italic.woff2 b/files/mulish-cyrillic-200-italic.woff2 new file mode 100644 index 0000000..d1b9d73 Binary files /dev/null and b/files/mulish-cyrillic-200-italic.woff2 differ diff --git a/files/mulish-cyrillic-200-normal.woff b/files/mulish-cyrillic-200-normal.woff new file mode 100644 index 0000000..1548159 Binary files /dev/null and b/files/mulish-cyrillic-200-normal.woff differ diff --git a/files/mulish-cyrillic-200-normal.woff2 b/files/mulish-cyrillic-200-normal.woff2 new file mode 100644 index 0000000..e02e645 Binary files /dev/null and b/files/mulish-cyrillic-200-normal.woff2 differ diff --git a/files/mulish-cyrillic-300-italic.woff b/files/mulish-cyrillic-300-italic.woff new file mode 100644 index 0000000..0d37144 Binary files /dev/null and b/files/mulish-cyrillic-300-italic.woff differ diff --git a/files/mulish-cyrillic-300-italic.woff2 b/files/mulish-cyrillic-300-italic.woff2 new file mode 100644 index 0000000..4104f43 Binary files /dev/null and b/files/mulish-cyrillic-300-italic.woff2 differ diff --git a/files/mulish-cyrillic-300-normal.woff b/files/mulish-cyrillic-300-normal.woff new file mode 100644 index 0000000..0c3ca90 Binary files /dev/null and b/files/mulish-cyrillic-300-normal.woff differ diff --git a/files/mulish-cyrillic-300-normal.woff2 b/files/mulish-cyrillic-300-normal.woff2 new file mode 100644 index 0000000..99edfc8 Binary files /dev/null and b/files/mulish-cyrillic-300-normal.woff2 differ diff --git a/files/mulish-cyrillic-400-italic.woff b/files/mulish-cyrillic-400-italic.woff new file mode 100644 index 0000000..7884810 Binary files /dev/null and b/files/mulish-cyrillic-400-italic.woff differ diff --git a/files/mulish-cyrillic-400-italic.woff2 b/files/mulish-cyrillic-400-italic.woff2 new file mode 100644 index 0000000..27ce9ac Binary files /dev/null and b/files/mulish-cyrillic-400-italic.woff2 differ diff --git a/files/mulish-cyrillic-400-normal.woff b/files/mulish-cyrillic-400-normal.woff new file mode 100644 index 0000000..b54d9ea Binary files /dev/null and b/files/mulish-cyrillic-400-normal.woff differ diff --git a/files/mulish-cyrillic-400-normal.woff2 b/files/mulish-cyrillic-400-normal.woff2 new file mode 100644 index 0000000..1e1a8b9 Binary files /dev/null and b/files/mulish-cyrillic-400-normal.woff2 differ diff --git a/files/mulish-cyrillic-500-italic.woff b/files/mulish-cyrillic-500-italic.woff new file mode 100644 index 0000000..7be1c7f Binary files /dev/null and b/files/mulish-cyrillic-500-italic.woff differ diff --git a/files/mulish-cyrillic-500-italic.woff2 b/files/mulish-cyrillic-500-italic.woff2 new file mode 100644 index 0000000..c0cc98b Binary files /dev/null and b/files/mulish-cyrillic-500-italic.woff2 differ diff --git a/files/mulish-cyrillic-500-normal.woff b/files/mulish-cyrillic-500-normal.woff new file mode 100644 index 0000000..9d1fe7e Binary files /dev/null and b/files/mulish-cyrillic-500-normal.woff differ diff --git a/files/mulish-cyrillic-500-normal.woff2 b/files/mulish-cyrillic-500-normal.woff2 new file mode 100644 index 0000000..02e8dc2 Binary files /dev/null and b/files/mulish-cyrillic-500-normal.woff2 differ diff --git a/files/mulish-cyrillic-600-italic.woff b/files/mulish-cyrillic-600-italic.woff new file mode 100644 index 0000000..edfe540 Binary files /dev/null and b/files/mulish-cyrillic-600-italic.woff differ diff --git a/files/mulish-cyrillic-600-italic.woff2 b/files/mulish-cyrillic-600-italic.woff2 new file mode 100644 index 0000000..99d59cc Binary files /dev/null and b/files/mulish-cyrillic-600-italic.woff2 differ diff --git a/files/mulish-cyrillic-600-normal.woff b/files/mulish-cyrillic-600-normal.woff new file mode 100644 index 0000000..2690670 Binary files /dev/null and b/files/mulish-cyrillic-600-normal.woff differ diff --git a/files/mulish-cyrillic-600-normal.woff2 b/files/mulish-cyrillic-600-normal.woff2 new file mode 100644 index 0000000..967741d Binary files /dev/null and b/files/mulish-cyrillic-600-normal.woff2 differ diff --git a/files/mulish-cyrillic-700-italic.woff b/files/mulish-cyrillic-700-italic.woff new file mode 100644 index 0000000..15f3b58 Binary files /dev/null and b/files/mulish-cyrillic-700-italic.woff differ diff --git a/files/mulish-cyrillic-700-italic.woff2 b/files/mulish-cyrillic-700-italic.woff2 new file mode 100644 index 0000000..fb072d2 Binary files /dev/null and b/files/mulish-cyrillic-700-italic.woff2 differ diff --git a/files/mulish-cyrillic-700-normal.woff b/files/mulish-cyrillic-700-normal.woff new file mode 100644 index 0000000..4b5c430 Binary files /dev/null and b/files/mulish-cyrillic-700-normal.woff differ diff --git a/files/mulish-cyrillic-700-normal.woff2 b/files/mulish-cyrillic-700-normal.woff2 new file mode 100644 index 0000000..983fe95 Binary files /dev/null and b/files/mulish-cyrillic-700-normal.woff2 differ diff --git a/files/mulish-cyrillic-800-italic.woff b/files/mulish-cyrillic-800-italic.woff new file mode 100644 index 0000000..0863743 Binary files /dev/null and b/files/mulish-cyrillic-800-italic.woff differ diff --git a/files/mulish-cyrillic-800-italic.woff2 b/files/mulish-cyrillic-800-italic.woff2 new file mode 100644 index 0000000..4568b96 Binary files /dev/null and b/files/mulish-cyrillic-800-italic.woff2 differ diff --git a/files/mulish-cyrillic-800-normal.woff b/files/mulish-cyrillic-800-normal.woff new file mode 100644 index 0000000..574209f Binary files /dev/null and b/files/mulish-cyrillic-800-normal.woff differ diff --git a/files/mulish-cyrillic-800-normal.woff2 b/files/mulish-cyrillic-800-normal.woff2 new file mode 100644 index 0000000..825600a Binary files /dev/null and b/files/mulish-cyrillic-800-normal.woff2 differ diff --git a/files/mulish-cyrillic-900-italic.woff b/files/mulish-cyrillic-900-italic.woff new file mode 100644 index 0000000..a6fc399 Binary files /dev/null and b/files/mulish-cyrillic-900-italic.woff differ diff --git a/files/mulish-cyrillic-900-italic.woff2 b/files/mulish-cyrillic-900-italic.woff2 new file mode 100644 index 0000000..5ac4f3c Binary files /dev/null and b/files/mulish-cyrillic-900-italic.woff2 differ diff --git a/files/mulish-cyrillic-900-normal.woff b/files/mulish-cyrillic-900-normal.woff new file mode 100644 index 0000000..1d18e35 Binary files /dev/null and b/files/mulish-cyrillic-900-normal.woff differ diff --git a/files/mulish-cyrillic-900-normal.woff2 b/files/mulish-cyrillic-900-normal.woff2 new file mode 100644 index 0000000..36efa68 Binary files /dev/null and b/files/mulish-cyrillic-900-normal.woff2 differ diff --git a/files/mulish-cyrillic-ext-200-italic.woff b/files/mulish-cyrillic-ext-200-italic.woff new file mode 100644 index 0000000..f0a0b90 Binary files /dev/null and b/files/mulish-cyrillic-ext-200-italic.woff differ diff --git a/files/mulish-cyrillic-ext-200-italic.woff2 b/files/mulish-cyrillic-ext-200-italic.woff2 new file mode 100644 index 0000000..fbf2607 Binary files /dev/null and b/files/mulish-cyrillic-ext-200-italic.woff2 differ diff --git a/files/mulish-cyrillic-ext-200-normal.woff b/files/mulish-cyrillic-ext-200-normal.woff new file mode 100644 index 0000000..f98640a Binary files /dev/null and b/files/mulish-cyrillic-ext-200-normal.woff differ diff --git a/files/mulish-cyrillic-ext-200-normal.woff2 b/files/mulish-cyrillic-ext-200-normal.woff2 new file mode 100644 index 0000000..b4b3917 Binary files /dev/null and b/files/mulish-cyrillic-ext-200-normal.woff2 differ diff --git a/files/mulish-cyrillic-ext-300-italic.woff b/files/mulish-cyrillic-ext-300-italic.woff new file mode 100644 index 0000000..41fa2cc Binary files /dev/null and b/files/mulish-cyrillic-ext-300-italic.woff differ diff --git a/files/mulish-cyrillic-ext-300-italic.woff2 b/files/mulish-cyrillic-ext-300-italic.woff2 new file mode 100644 index 0000000..58b046a Binary files /dev/null and b/files/mulish-cyrillic-ext-300-italic.woff2 differ diff --git a/files/mulish-cyrillic-ext-300-normal.woff b/files/mulish-cyrillic-ext-300-normal.woff new file mode 100644 index 0000000..31c7ff2 Binary files /dev/null and b/files/mulish-cyrillic-ext-300-normal.woff differ diff --git a/files/mulish-cyrillic-ext-300-normal.woff2 b/files/mulish-cyrillic-ext-300-normal.woff2 new file mode 100644 index 0000000..f6afd8f Binary files /dev/null and b/files/mulish-cyrillic-ext-300-normal.woff2 differ diff --git a/files/mulish-cyrillic-ext-400-italic.woff b/files/mulish-cyrillic-ext-400-italic.woff new file mode 100644 index 0000000..c6ea818 Binary files /dev/null and b/files/mulish-cyrillic-ext-400-italic.woff differ diff --git a/files/mulish-cyrillic-ext-400-italic.woff2 b/files/mulish-cyrillic-ext-400-italic.woff2 new file mode 100644 index 0000000..69dd02b Binary files /dev/null and b/files/mulish-cyrillic-ext-400-italic.woff2 differ diff --git a/files/mulish-cyrillic-ext-400-normal.woff b/files/mulish-cyrillic-ext-400-normal.woff new file mode 100644 index 0000000..f7635de Binary files /dev/null and b/files/mulish-cyrillic-ext-400-normal.woff differ diff --git a/files/mulish-cyrillic-ext-400-normal.woff2 b/files/mulish-cyrillic-ext-400-normal.woff2 new file mode 100644 index 0000000..bb84eff Binary files /dev/null and b/files/mulish-cyrillic-ext-400-normal.woff2 differ diff --git a/files/mulish-cyrillic-ext-500-italic.woff b/files/mulish-cyrillic-ext-500-italic.woff new file mode 100644 index 0000000..66232d6 Binary files /dev/null and b/files/mulish-cyrillic-ext-500-italic.woff differ diff --git a/files/mulish-cyrillic-ext-500-italic.woff2 b/files/mulish-cyrillic-ext-500-italic.woff2 new file mode 100644 index 0000000..8c34e4c Binary files /dev/null and b/files/mulish-cyrillic-ext-500-italic.woff2 differ diff --git a/files/mulish-cyrillic-ext-500-normal.woff b/files/mulish-cyrillic-ext-500-normal.woff new file mode 100644 index 0000000..6640e40 Binary files /dev/null and b/files/mulish-cyrillic-ext-500-normal.woff differ diff --git a/files/mulish-cyrillic-ext-500-normal.woff2 b/files/mulish-cyrillic-ext-500-normal.woff2 new file mode 100644 index 0000000..c714357 Binary files /dev/null and b/files/mulish-cyrillic-ext-500-normal.woff2 differ diff --git a/files/mulish-cyrillic-ext-600-italic.woff b/files/mulish-cyrillic-ext-600-italic.woff new file mode 100644 index 0000000..fb90086 Binary files /dev/null and b/files/mulish-cyrillic-ext-600-italic.woff differ diff --git a/files/mulish-cyrillic-ext-600-italic.woff2 b/files/mulish-cyrillic-ext-600-italic.woff2 new file mode 100644 index 0000000..d137182 Binary files /dev/null and b/files/mulish-cyrillic-ext-600-italic.woff2 differ diff --git a/files/mulish-cyrillic-ext-600-normal.woff b/files/mulish-cyrillic-ext-600-normal.woff new file mode 100644 index 0000000..6e15a87 Binary files /dev/null and b/files/mulish-cyrillic-ext-600-normal.woff differ diff --git a/files/mulish-cyrillic-ext-600-normal.woff2 b/files/mulish-cyrillic-ext-600-normal.woff2 new file mode 100644 index 0000000..8499807 Binary files /dev/null and b/files/mulish-cyrillic-ext-600-normal.woff2 differ diff --git a/files/mulish-cyrillic-ext-700-italic.woff b/files/mulish-cyrillic-ext-700-italic.woff new file mode 100644 index 0000000..8a5fe92 Binary files /dev/null and b/files/mulish-cyrillic-ext-700-italic.woff differ diff --git a/files/mulish-cyrillic-ext-700-italic.woff2 b/files/mulish-cyrillic-ext-700-italic.woff2 new file mode 100644 index 0000000..5d27301 Binary files /dev/null and b/files/mulish-cyrillic-ext-700-italic.woff2 differ diff --git a/files/mulish-cyrillic-ext-700-normal.woff b/files/mulish-cyrillic-ext-700-normal.woff new file mode 100644 index 0000000..0120363 Binary files /dev/null and b/files/mulish-cyrillic-ext-700-normal.woff differ diff --git a/files/mulish-cyrillic-ext-700-normal.woff2 b/files/mulish-cyrillic-ext-700-normal.woff2 new file mode 100644 index 0000000..4209df4 Binary files /dev/null and b/files/mulish-cyrillic-ext-700-normal.woff2 differ diff --git a/files/mulish-cyrillic-ext-800-italic.woff b/files/mulish-cyrillic-ext-800-italic.woff new file mode 100644 index 0000000..4beb290 Binary files /dev/null and b/files/mulish-cyrillic-ext-800-italic.woff differ diff --git a/files/mulish-cyrillic-ext-800-italic.woff2 b/files/mulish-cyrillic-ext-800-italic.woff2 new file mode 100644 index 0000000..1b2a409 Binary files /dev/null and b/files/mulish-cyrillic-ext-800-italic.woff2 differ diff --git a/files/mulish-cyrillic-ext-800-normal.woff b/files/mulish-cyrillic-ext-800-normal.woff new file mode 100644 index 0000000..1bafd25 Binary files /dev/null and b/files/mulish-cyrillic-ext-800-normal.woff differ diff --git a/files/mulish-cyrillic-ext-800-normal.woff2 b/files/mulish-cyrillic-ext-800-normal.woff2 new file mode 100644 index 0000000..9dcdcd4 Binary files /dev/null and b/files/mulish-cyrillic-ext-800-normal.woff2 differ diff --git a/files/mulish-cyrillic-ext-900-italic.woff b/files/mulish-cyrillic-ext-900-italic.woff new file mode 100644 index 0000000..8a1ddf8 Binary files /dev/null and b/files/mulish-cyrillic-ext-900-italic.woff differ diff --git a/files/mulish-cyrillic-ext-900-italic.woff2 b/files/mulish-cyrillic-ext-900-italic.woff2 new file mode 100644 index 0000000..349cf35 Binary files /dev/null and b/files/mulish-cyrillic-ext-900-italic.woff2 differ diff --git a/files/mulish-cyrillic-ext-900-normal.woff b/files/mulish-cyrillic-ext-900-normal.woff new file mode 100644 index 0000000..97525eb Binary files /dev/null and b/files/mulish-cyrillic-ext-900-normal.woff differ diff --git a/files/mulish-cyrillic-ext-900-normal.woff2 b/files/mulish-cyrillic-ext-900-normal.woff2 new file mode 100644 index 0000000..2fccf26 Binary files /dev/null and b/files/mulish-cyrillic-ext-900-normal.woff2 differ diff --git a/files/mulish-cyrillic-ext-variable-wghtOnly-italic.woff2 b/files/mulish-cyrillic-ext-variable-wghtOnly-italic.woff2 new file mode 100644 index 0000000..2759f7b Binary files /dev/null and b/files/mulish-cyrillic-ext-variable-wghtOnly-italic.woff2 differ diff --git a/files/mulish-cyrillic-ext-variable-wghtOnly-normal.woff2 b/files/mulish-cyrillic-ext-variable-wghtOnly-normal.woff2 new file mode 100644 index 0000000..a57b851 Binary files /dev/null and b/files/mulish-cyrillic-ext-variable-wghtOnly-normal.woff2 differ diff --git a/files/mulish-cyrillic-variable-wghtOnly-italic.woff2 b/files/mulish-cyrillic-variable-wghtOnly-italic.woff2 new file mode 100644 index 0000000..d8fe44a Binary files /dev/null and b/files/mulish-cyrillic-variable-wghtOnly-italic.woff2 differ diff --git a/files/mulish-cyrillic-variable-wghtOnly-normal.woff2 b/files/mulish-cyrillic-variable-wghtOnly-normal.woff2 new file mode 100644 index 0000000..f5999b2 Binary files /dev/null and b/files/mulish-cyrillic-variable-wghtOnly-normal.woff2 differ diff --git a/files/mulish-latin-200-italic.woff b/files/mulish-latin-200-italic.woff new file mode 100644 index 0000000..16f37eb Binary files /dev/null and b/files/mulish-latin-200-italic.woff differ diff --git a/files/mulish-latin-200-italic.woff2 b/files/mulish-latin-200-italic.woff2 new file mode 100644 index 0000000..3b61884 Binary files /dev/null and b/files/mulish-latin-200-italic.woff2 differ diff --git a/files/mulish-latin-200-normal.woff b/files/mulish-latin-200-normal.woff new file mode 100644 index 0000000..9b955e7 Binary files /dev/null and b/files/mulish-latin-200-normal.woff differ diff --git a/files/mulish-latin-200-normal.woff2 b/files/mulish-latin-200-normal.woff2 new file mode 100644 index 0000000..13d93a3 Binary files /dev/null and b/files/mulish-latin-200-normal.woff2 differ diff --git a/files/mulish-latin-300-italic.woff b/files/mulish-latin-300-italic.woff new file mode 100644 index 0000000..d9fdb82 Binary files /dev/null and b/files/mulish-latin-300-italic.woff differ diff --git a/files/mulish-latin-300-italic.woff2 b/files/mulish-latin-300-italic.woff2 new file mode 100644 index 0000000..24527f2 Binary files /dev/null and b/files/mulish-latin-300-italic.woff2 differ diff --git a/files/mulish-latin-300-normal.woff b/files/mulish-latin-300-normal.woff new file mode 100644 index 0000000..321dafd Binary files /dev/null and b/files/mulish-latin-300-normal.woff differ diff --git a/files/mulish-latin-300-normal.woff2 b/files/mulish-latin-300-normal.woff2 new file mode 100644 index 0000000..8bccd14 Binary files /dev/null and b/files/mulish-latin-300-normal.woff2 differ diff --git a/files/mulish-latin-400-italic.woff b/files/mulish-latin-400-italic.woff new file mode 100644 index 0000000..ae3d54c Binary files /dev/null and b/files/mulish-latin-400-italic.woff differ diff --git a/files/mulish-latin-400-italic.woff2 b/files/mulish-latin-400-italic.woff2 new file mode 100644 index 0000000..7f41ab7 Binary files /dev/null and b/files/mulish-latin-400-italic.woff2 differ diff --git a/files/mulish-latin-400-normal.woff b/files/mulish-latin-400-normal.woff new file mode 100644 index 0000000..9130c18 Binary files /dev/null and b/files/mulish-latin-400-normal.woff differ diff --git a/files/mulish-latin-400-normal.woff2 b/files/mulish-latin-400-normal.woff2 new file mode 100644 index 0000000..8f02533 Binary files /dev/null and b/files/mulish-latin-400-normal.woff2 differ diff --git a/files/mulish-latin-500-italic.woff b/files/mulish-latin-500-italic.woff new file mode 100644 index 0000000..a7ecb18 Binary files /dev/null and b/files/mulish-latin-500-italic.woff differ diff --git a/files/mulish-latin-500-italic.woff2 b/files/mulish-latin-500-italic.woff2 new file mode 100644 index 0000000..39a7f5a Binary files /dev/null and b/files/mulish-latin-500-italic.woff2 differ diff --git a/files/mulish-latin-500-normal.woff b/files/mulish-latin-500-normal.woff new file mode 100644 index 0000000..019594e Binary files /dev/null and b/files/mulish-latin-500-normal.woff differ diff --git a/files/mulish-latin-500-normal.woff2 b/files/mulish-latin-500-normal.woff2 new file mode 100644 index 0000000..425747b Binary files /dev/null and b/files/mulish-latin-500-normal.woff2 differ diff --git a/files/mulish-latin-600-italic.woff b/files/mulish-latin-600-italic.woff new file mode 100644 index 0000000..0b07b9c Binary files /dev/null and b/files/mulish-latin-600-italic.woff differ diff --git a/files/mulish-latin-600-italic.woff2 b/files/mulish-latin-600-italic.woff2 new file mode 100644 index 0000000..1edae1a Binary files /dev/null and b/files/mulish-latin-600-italic.woff2 differ diff --git a/files/mulish-latin-600-normal.woff b/files/mulish-latin-600-normal.woff new file mode 100644 index 0000000..6fd4271 Binary files /dev/null and b/files/mulish-latin-600-normal.woff differ diff --git a/files/mulish-latin-600-normal.woff2 b/files/mulish-latin-600-normal.woff2 new file mode 100644 index 0000000..b1cce2b Binary files /dev/null and b/files/mulish-latin-600-normal.woff2 differ diff --git a/files/mulish-latin-700-italic.woff b/files/mulish-latin-700-italic.woff new file mode 100644 index 0000000..1d53369 Binary files /dev/null and b/files/mulish-latin-700-italic.woff differ diff --git a/files/mulish-latin-700-italic.woff2 b/files/mulish-latin-700-italic.woff2 new file mode 100644 index 0000000..233f58c Binary files /dev/null and b/files/mulish-latin-700-italic.woff2 differ diff --git a/files/mulish-latin-700-normal.woff b/files/mulish-latin-700-normal.woff new file mode 100644 index 0000000..1958583 Binary files /dev/null and b/files/mulish-latin-700-normal.woff differ diff --git a/files/mulish-latin-700-normal.woff2 b/files/mulish-latin-700-normal.woff2 new file mode 100644 index 0000000..612738b Binary files /dev/null and b/files/mulish-latin-700-normal.woff2 differ diff --git a/files/mulish-latin-800-italic.woff b/files/mulish-latin-800-italic.woff new file mode 100644 index 0000000..90bec94 Binary files /dev/null and b/files/mulish-latin-800-italic.woff differ diff --git a/files/mulish-latin-800-italic.woff2 b/files/mulish-latin-800-italic.woff2 new file mode 100644 index 0000000..9a9d2f2 Binary files /dev/null and b/files/mulish-latin-800-italic.woff2 differ diff --git a/files/mulish-latin-800-normal.woff b/files/mulish-latin-800-normal.woff new file mode 100644 index 0000000..4f02d20 Binary files /dev/null and b/files/mulish-latin-800-normal.woff differ diff --git a/files/mulish-latin-800-normal.woff2 b/files/mulish-latin-800-normal.woff2 new file mode 100644 index 0000000..9df4298 Binary files /dev/null and b/files/mulish-latin-800-normal.woff2 differ diff --git a/files/mulish-latin-900-italic.woff b/files/mulish-latin-900-italic.woff new file mode 100644 index 0000000..8148cc0 Binary files /dev/null and b/files/mulish-latin-900-italic.woff differ diff --git a/files/mulish-latin-900-italic.woff2 b/files/mulish-latin-900-italic.woff2 new file mode 100644 index 0000000..8458e81 Binary files /dev/null and b/files/mulish-latin-900-italic.woff2 differ diff --git a/files/mulish-latin-900-normal.woff b/files/mulish-latin-900-normal.woff new file mode 100644 index 0000000..c2657ff Binary files /dev/null and b/files/mulish-latin-900-normal.woff differ diff --git a/files/mulish-latin-900-normal.woff2 b/files/mulish-latin-900-normal.woff2 new file mode 100644 index 0000000..be3e83e Binary files /dev/null and b/files/mulish-latin-900-normal.woff2 differ diff --git a/files/mulish-latin-ext-200-italic.woff b/files/mulish-latin-ext-200-italic.woff new file mode 100644 index 0000000..7100221 Binary files /dev/null and b/files/mulish-latin-ext-200-italic.woff differ diff --git a/files/mulish-latin-ext-200-italic.woff2 b/files/mulish-latin-ext-200-italic.woff2 new file mode 100644 index 0000000..754afb1 Binary files /dev/null and b/files/mulish-latin-ext-200-italic.woff2 differ diff --git a/files/mulish-latin-ext-200-normal.woff b/files/mulish-latin-ext-200-normal.woff new file mode 100644 index 0000000..a143396 Binary files /dev/null and b/files/mulish-latin-ext-200-normal.woff differ diff --git a/files/mulish-latin-ext-200-normal.woff2 b/files/mulish-latin-ext-200-normal.woff2 new file mode 100644 index 0000000..87654cd Binary files /dev/null and b/files/mulish-latin-ext-200-normal.woff2 differ diff --git a/files/mulish-latin-ext-300-italic.woff b/files/mulish-latin-ext-300-italic.woff new file mode 100644 index 0000000..e5a1d1b Binary files /dev/null and b/files/mulish-latin-ext-300-italic.woff differ diff --git a/files/mulish-latin-ext-300-italic.woff2 b/files/mulish-latin-ext-300-italic.woff2 new file mode 100644 index 0000000..1f5555c Binary files /dev/null and b/files/mulish-latin-ext-300-italic.woff2 differ diff --git a/files/mulish-latin-ext-300-normal.woff b/files/mulish-latin-ext-300-normal.woff new file mode 100644 index 0000000..d00cd05 Binary files /dev/null and b/files/mulish-latin-ext-300-normal.woff differ diff --git a/files/mulish-latin-ext-300-normal.woff2 b/files/mulish-latin-ext-300-normal.woff2 new file mode 100644 index 0000000..aca6e2d Binary files /dev/null and b/files/mulish-latin-ext-300-normal.woff2 differ diff --git a/files/mulish-latin-ext-400-italic.woff b/files/mulish-latin-ext-400-italic.woff new file mode 100644 index 0000000..0b8d7b1 Binary files /dev/null and b/files/mulish-latin-ext-400-italic.woff differ diff --git a/files/mulish-latin-ext-400-italic.woff2 b/files/mulish-latin-ext-400-italic.woff2 new file mode 100644 index 0000000..c4094ae Binary files /dev/null and b/files/mulish-latin-ext-400-italic.woff2 differ diff --git a/files/mulish-latin-ext-400-normal.woff b/files/mulish-latin-ext-400-normal.woff new file mode 100644 index 0000000..0b74c13 Binary files /dev/null and b/files/mulish-latin-ext-400-normal.woff differ diff --git a/files/mulish-latin-ext-400-normal.woff2 b/files/mulish-latin-ext-400-normal.woff2 new file mode 100644 index 0000000..1bbd263 Binary files /dev/null and b/files/mulish-latin-ext-400-normal.woff2 differ diff --git a/files/mulish-latin-ext-500-italic.woff b/files/mulish-latin-ext-500-italic.woff new file mode 100644 index 0000000..90c0aaf Binary files /dev/null and b/files/mulish-latin-ext-500-italic.woff differ diff --git a/files/mulish-latin-ext-500-italic.woff2 b/files/mulish-latin-ext-500-italic.woff2 new file mode 100644 index 0000000..05d4e77 Binary files /dev/null and b/files/mulish-latin-ext-500-italic.woff2 differ diff --git a/files/mulish-latin-ext-500-normal.woff b/files/mulish-latin-ext-500-normal.woff new file mode 100644 index 0000000..e5ec6a4 Binary files /dev/null and b/files/mulish-latin-ext-500-normal.woff differ diff --git a/files/mulish-latin-ext-500-normal.woff2 b/files/mulish-latin-ext-500-normal.woff2 new file mode 100644 index 0000000..05997d1 Binary files /dev/null and b/files/mulish-latin-ext-500-normal.woff2 differ diff --git a/files/mulish-latin-ext-600-italic.woff b/files/mulish-latin-ext-600-italic.woff new file mode 100644 index 0000000..0a1c71c Binary files /dev/null and b/files/mulish-latin-ext-600-italic.woff differ diff --git a/files/mulish-latin-ext-600-italic.woff2 b/files/mulish-latin-ext-600-italic.woff2 new file mode 100644 index 0000000..4c81bdd Binary files /dev/null and b/files/mulish-latin-ext-600-italic.woff2 differ diff --git a/files/mulish-latin-ext-600-normal.woff b/files/mulish-latin-ext-600-normal.woff new file mode 100644 index 0000000..d94e5c8 Binary files /dev/null and b/files/mulish-latin-ext-600-normal.woff differ diff --git a/files/mulish-latin-ext-600-normal.woff2 b/files/mulish-latin-ext-600-normal.woff2 new file mode 100644 index 0000000..d56193c Binary files /dev/null and b/files/mulish-latin-ext-600-normal.woff2 differ diff --git a/files/mulish-latin-ext-700-italic.woff b/files/mulish-latin-ext-700-italic.woff new file mode 100644 index 0000000..02e1eab Binary files /dev/null and b/files/mulish-latin-ext-700-italic.woff differ diff --git a/files/mulish-latin-ext-700-italic.woff2 b/files/mulish-latin-ext-700-italic.woff2 new file mode 100644 index 0000000..2e10abc Binary files /dev/null and b/files/mulish-latin-ext-700-italic.woff2 differ diff --git a/files/mulish-latin-ext-700-normal.woff b/files/mulish-latin-ext-700-normal.woff new file mode 100644 index 0000000..06747e4 Binary files /dev/null and b/files/mulish-latin-ext-700-normal.woff differ diff --git a/files/mulish-latin-ext-700-normal.woff2 b/files/mulish-latin-ext-700-normal.woff2 new file mode 100644 index 0000000..b30ba95 Binary files /dev/null and b/files/mulish-latin-ext-700-normal.woff2 differ diff --git a/files/mulish-latin-ext-800-italic.woff b/files/mulish-latin-ext-800-italic.woff new file mode 100644 index 0000000..f06289c Binary files /dev/null and b/files/mulish-latin-ext-800-italic.woff differ diff --git a/files/mulish-latin-ext-800-italic.woff2 b/files/mulish-latin-ext-800-italic.woff2 new file mode 100644 index 0000000..85d711f Binary files /dev/null and b/files/mulish-latin-ext-800-italic.woff2 differ diff --git a/files/mulish-latin-ext-800-normal.woff b/files/mulish-latin-ext-800-normal.woff new file mode 100644 index 0000000..dd3db75 Binary files /dev/null and b/files/mulish-latin-ext-800-normal.woff differ diff --git a/files/mulish-latin-ext-800-normal.woff2 b/files/mulish-latin-ext-800-normal.woff2 new file mode 100644 index 0000000..0f29ead Binary files /dev/null and b/files/mulish-latin-ext-800-normal.woff2 differ diff --git a/files/mulish-latin-ext-900-italic.woff b/files/mulish-latin-ext-900-italic.woff new file mode 100644 index 0000000..86edc9a Binary files /dev/null and b/files/mulish-latin-ext-900-italic.woff differ diff --git a/files/mulish-latin-ext-900-italic.woff2 b/files/mulish-latin-ext-900-italic.woff2 new file mode 100644 index 0000000..9e79650 Binary files /dev/null and b/files/mulish-latin-ext-900-italic.woff2 differ diff --git a/files/mulish-latin-ext-900-normal.woff b/files/mulish-latin-ext-900-normal.woff new file mode 100644 index 0000000..4ab5280 Binary files /dev/null and b/files/mulish-latin-ext-900-normal.woff differ diff --git a/files/mulish-latin-ext-900-normal.woff2 b/files/mulish-latin-ext-900-normal.woff2 new file mode 100644 index 0000000..c9f16d2 Binary files /dev/null and b/files/mulish-latin-ext-900-normal.woff2 differ diff --git a/files/mulish-latin-ext-variable-wghtOnly-italic.woff2 b/files/mulish-latin-ext-variable-wghtOnly-italic.woff2 new file mode 100644 index 0000000..12cc6f2 Binary files /dev/null and b/files/mulish-latin-ext-variable-wghtOnly-italic.woff2 differ diff --git a/files/mulish-latin-ext-variable-wghtOnly-normal.woff2 b/files/mulish-latin-ext-variable-wghtOnly-normal.woff2 new file mode 100644 index 0000000..f64fde9 Binary files /dev/null and b/files/mulish-latin-ext-variable-wghtOnly-normal.woff2 differ diff --git a/files/mulish-latin-variable-wghtOnly-italic.woff2 b/files/mulish-latin-variable-wghtOnly-italic.woff2 new file mode 100644 index 0000000..c940811 Binary files /dev/null and b/files/mulish-latin-variable-wghtOnly-italic.woff2 differ diff --git a/files/mulish-latin-variable-wghtOnly-normal.woff2 b/files/mulish-latin-variable-wghtOnly-normal.woff2 new file mode 100644 index 0000000..e717e36 Binary files /dev/null and b/files/mulish-latin-variable-wghtOnly-normal.woff2 differ diff --git a/files/mulish-vietnamese-200-italic.woff b/files/mulish-vietnamese-200-italic.woff new file mode 100644 index 0000000..58c29f9 Binary files /dev/null and b/files/mulish-vietnamese-200-italic.woff differ diff --git a/files/mulish-vietnamese-200-italic.woff2 b/files/mulish-vietnamese-200-italic.woff2 new file mode 100644 index 0000000..9c89c11 Binary files /dev/null and b/files/mulish-vietnamese-200-italic.woff2 differ diff --git a/files/mulish-vietnamese-200-normal.woff b/files/mulish-vietnamese-200-normal.woff new file mode 100644 index 0000000..e23fbb9 Binary files /dev/null and b/files/mulish-vietnamese-200-normal.woff differ diff --git a/files/mulish-vietnamese-200-normal.woff2 b/files/mulish-vietnamese-200-normal.woff2 new file mode 100644 index 0000000..c70038e Binary files /dev/null and b/files/mulish-vietnamese-200-normal.woff2 differ diff --git a/files/mulish-vietnamese-300-italic.woff b/files/mulish-vietnamese-300-italic.woff new file mode 100644 index 0000000..3f00c8f Binary files /dev/null and b/files/mulish-vietnamese-300-italic.woff differ diff --git a/files/mulish-vietnamese-300-italic.woff2 b/files/mulish-vietnamese-300-italic.woff2 new file mode 100644 index 0000000..5deda67 Binary files /dev/null and b/files/mulish-vietnamese-300-italic.woff2 differ diff --git a/files/mulish-vietnamese-300-normal.woff b/files/mulish-vietnamese-300-normal.woff new file mode 100644 index 0000000..4365554 Binary files /dev/null and b/files/mulish-vietnamese-300-normal.woff differ diff --git a/files/mulish-vietnamese-300-normal.woff2 b/files/mulish-vietnamese-300-normal.woff2 new file mode 100644 index 0000000..66818d2 Binary files /dev/null and b/files/mulish-vietnamese-300-normal.woff2 differ diff --git a/files/mulish-vietnamese-400-italic.woff b/files/mulish-vietnamese-400-italic.woff new file mode 100644 index 0000000..c85e024 Binary files /dev/null and b/files/mulish-vietnamese-400-italic.woff differ diff --git a/files/mulish-vietnamese-400-italic.woff2 b/files/mulish-vietnamese-400-italic.woff2 new file mode 100644 index 0000000..08b89d5 Binary files /dev/null and b/files/mulish-vietnamese-400-italic.woff2 differ diff --git a/files/mulish-vietnamese-400-normal.woff b/files/mulish-vietnamese-400-normal.woff new file mode 100644 index 0000000..24cfa2d Binary files /dev/null and b/files/mulish-vietnamese-400-normal.woff differ diff --git a/files/mulish-vietnamese-400-normal.woff2 b/files/mulish-vietnamese-400-normal.woff2 new file mode 100644 index 0000000..fba57a0 Binary files /dev/null and b/files/mulish-vietnamese-400-normal.woff2 differ diff --git a/files/mulish-vietnamese-500-italic.woff b/files/mulish-vietnamese-500-italic.woff new file mode 100644 index 0000000..07a4099 Binary files /dev/null and b/files/mulish-vietnamese-500-italic.woff differ diff --git a/files/mulish-vietnamese-500-italic.woff2 b/files/mulish-vietnamese-500-italic.woff2 new file mode 100644 index 0000000..c04d3d8 Binary files /dev/null and b/files/mulish-vietnamese-500-italic.woff2 differ diff --git a/files/mulish-vietnamese-500-normal.woff b/files/mulish-vietnamese-500-normal.woff new file mode 100644 index 0000000..ee8abb2 Binary files /dev/null and b/files/mulish-vietnamese-500-normal.woff differ diff --git a/files/mulish-vietnamese-500-normal.woff2 b/files/mulish-vietnamese-500-normal.woff2 new file mode 100644 index 0000000..0233c8b Binary files /dev/null and b/files/mulish-vietnamese-500-normal.woff2 differ diff --git a/files/mulish-vietnamese-600-italic.woff b/files/mulish-vietnamese-600-italic.woff new file mode 100644 index 0000000..80db888 Binary files /dev/null and b/files/mulish-vietnamese-600-italic.woff differ diff --git a/files/mulish-vietnamese-600-italic.woff2 b/files/mulish-vietnamese-600-italic.woff2 new file mode 100644 index 0000000..b1b2ba1 Binary files /dev/null and b/files/mulish-vietnamese-600-italic.woff2 differ diff --git a/files/mulish-vietnamese-600-normal.woff b/files/mulish-vietnamese-600-normal.woff new file mode 100644 index 0000000..cde6152 Binary files /dev/null and b/files/mulish-vietnamese-600-normal.woff differ diff --git a/files/mulish-vietnamese-600-normal.woff2 b/files/mulish-vietnamese-600-normal.woff2 new file mode 100644 index 0000000..82040c2 Binary files /dev/null and b/files/mulish-vietnamese-600-normal.woff2 differ diff --git a/files/mulish-vietnamese-700-italic.woff b/files/mulish-vietnamese-700-italic.woff new file mode 100644 index 0000000..ff08677 Binary files /dev/null and b/files/mulish-vietnamese-700-italic.woff differ diff --git a/files/mulish-vietnamese-700-italic.woff2 b/files/mulish-vietnamese-700-italic.woff2 new file mode 100644 index 0000000..2e941a7 Binary files /dev/null and b/files/mulish-vietnamese-700-italic.woff2 differ diff --git a/files/mulish-vietnamese-700-normal.woff b/files/mulish-vietnamese-700-normal.woff new file mode 100644 index 0000000..f05a902 Binary files /dev/null and b/files/mulish-vietnamese-700-normal.woff differ diff --git a/files/mulish-vietnamese-700-normal.woff2 b/files/mulish-vietnamese-700-normal.woff2 new file mode 100644 index 0000000..a608a5d Binary files /dev/null and b/files/mulish-vietnamese-700-normal.woff2 differ diff --git a/files/mulish-vietnamese-800-italic.woff b/files/mulish-vietnamese-800-italic.woff new file mode 100644 index 0000000..9d46cc4 Binary files /dev/null and b/files/mulish-vietnamese-800-italic.woff differ diff --git a/files/mulish-vietnamese-800-italic.woff2 b/files/mulish-vietnamese-800-italic.woff2 new file mode 100644 index 0000000..eee242b Binary files /dev/null and b/files/mulish-vietnamese-800-italic.woff2 differ diff --git a/files/mulish-vietnamese-800-normal.woff b/files/mulish-vietnamese-800-normal.woff new file mode 100644 index 0000000..ed8398b Binary files /dev/null and b/files/mulish-vietnamese-800-normal.woff differ diff --git a/files/mulish-vietnamese-800-normal.woff2 b/files/mulish-vietnamese-800-normal.woff2 new file mode 100644 index 0000000..44655ae Binary files /dev/null and b/files/mulish-vietnamese-800-normal.woff2 differ diff --git a/files/mulish-vietnamese-900-italic.woff b/files/mulish-vietnamese-900-italic.woff new file mode 100644 index 0000000..1cf0777 Binary files /dev/null and b/files/mulish-vietnamese-900-italic.woff differ diff --git a/files/mulish-vietnamese-900-italic.woff2 b/files/mulish-vietnamese-900-italic.woff2 new file mode 100644 index 0000000..737a622 Binary files /dev/null and b/files/mulish-vietnamese-900-italic.woff2 differ diff --git a/files/mulish-vietnamese-900-normal.woff b/files/mulish-vietnamese-900-normal.woff new file mode 100644 index 0000000..060d256 Binary files /dev/null and b/files/mulish-vietnamese-900-normal.woff differ diff --git a/files/mulish-vietnamese-900-normal.woff2 b/files/mulish-vietnamese-900-normal.woff2 new file mode 100644 index 0000000..e343a6e Binary files /dev/null and b/files/mulish-vietnamese-900-normal.woff2 differ diff --git a/files/mulish-vietnamese-variable-wghtOnly-italic.woff2 b/files/mulish-vietnamese-variable-wghtOnly-italic.woff2 new file mode 100644 index 0000000..59ea52c Binary files /dev/null and b/files/mulish-vietnamese-variable-wghtOnly-italic.woff2 differ diff --git a/files/mulish-vietnamese-variable-wghtOnly-normal.woff2 b/files/mulish-vietnamese-variable-wghtOnly-normal.woff2 new file mode 100644 index 0000000..f40d6e0 Binary files /dev/null and b/files/mulish-vietnamese-variable-wghtOnly-normal.woff2 differ diff --git a/flags/1x1/ac.svg b/flags/1x1/ac.svg new file mode 100644 index 0000000..28c594f --- /dev/null +++ b/flags/1x1/ac.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/ad.svg b/flags/1x1/ad.svg new file mode 100644 index 0000000..f1d7fde --- /dev/null +++ b/flags/1x1/ad.svg @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/ae.svg b/flags/1x1/ae.svg new file mode 100644 index 0000000..058c16e --- /dev/null +++ b/flags/1x1/ae.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/1x1/af.svg b/flags/1x1/af.svg new file mode 100644 index 0000000..04d064a --- /dev/null +++ b/flags/1x1/af.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/ag.svg b/flags/1x1/ag.svg new file mode 100644 index 0000000..c705f87 --- /dev/null +++ b/flags/1x1/ag.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/1x1/ai.svg b/flags/1x1/ai.svg new file mode 100644 index 0000000..a9e686e --- /dev/null +++ b/flags/1x1/ai.svg @@ -0,0 +1,763 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/al.svg b/flags/1x1/al.svg new file mode 100644 index 0000000..51ae9ab --- /dev/null +++ b/flags/1x1/al.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/1x1/am.svg b/flags/1x1/am.svg new file mode 100644 index 0000000..09204dc --- /dev/null +++ b/flags/1x1/am.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/1x1/ao.svg b/flags/1x1/ao.svg new file mode 100644 index 0000000..ba77036 --- /dev/null +++ b/flags/1x1/ao.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/aq.svg b/flags/1x1/aq.svg new file mode 100644 index 0000000..a4d9a20 --- /dev/null +++ b/flags/1x1/aq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/1x1/ar.svg b/flags/1x1/ar.svg new file mode 100644 index 0000000..9eb9e06 --- /dev/null +++ b/flags/1x1/ar.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/as.svg b/flags/1x1/as.svg new file mode 100644 index 0000000..355b9f1 --- /dev/null +++ b/flags/1x1/as.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/at.svg b/flags/1x1/at.svg new file mode 100644 index 0000000..4736319 --- /dev/null +++ b/flags/1x1/at.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/1x1/au.svg b/flags/1x1/au.svg new file mode 100644 index 0000000..d7d85b0 --- /dev/null +++ b/flags/1x1/au.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/flags/1x1/aw.svg b/flags/1x1/aw.svg new file mode 100644 index 0000000..6da63db --- /dev/null +++ b/flags/1x1/aw.svg @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/ax.svg b/flags/1x1/ax.svg new file mode 100644 index 0000000..66f5ae7 --- /dev/null +++ b/flags/1x1/ax.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/az.svg b/flags/1x1/az.svg new file mode 100644 index 0000000..eedd9e6 --- /dev/null +++ b/flags/1x1/az.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/1x1/ba.svg b/flags/1x1/ba.svg new file mode 100644 index 0000000..66be6b1 --- /dev/null +++ b/flags/1x1/ba.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/flags/1x1/bb.svg b/flags/1x1/bb.svg new file mode 100644 index 0000000..026bb0a --- /dev/null +++ b/flags/1x1/bb.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/1x1/bd.svg b/flags/1x1/bd.svg new file mode 100644 index 0000000..86fcfba --- /dev/null +++ b/flags/1x1/bd.svg @@ -0,0 +1,4 @@ + + + + diff --git a/flags/1x1/be.svg b/flags/1x1/be.svg new file mode 100644 index 0000000..31b9723 --- /dev/null +++ b/flags/1x1/be.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/bf.svg b/flags/1x1/bf.svg new file mode 100644 index 0000000..a5078df --- /dev/null +++ b/flags/1x1/bf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/bg.svg b/flags/1x1/bg.svg new file mode 100644 index 0000000..16fe7e0 --- /dev/null +++ b/flags/1x1/bg.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/bh.svg b/flags/1x1/bh.svg new file mode 100644 index 0000000..25ce7b2 --- /dev/null +++ b/flags/1x1/bh.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/1x1/bi.svg b/flags/1x1/bi.svg new file mode 100644 index 0000000..de460c8 --- /dev/null +++ b/flags/1x1/bi.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/1x1/bj.svg b/flags/1x1/bj.svg new file mode 100644 index 0000000..e63ab20 --- /dev/null +++ b/flags/1x1/bj.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/1x1/bl.svg b/flags/1x1/bl.svg new file mode 100644 index 0000000..65550d9 --- /dev/null +++ b/flags/1x1/bl.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/bm.svg b/flags/1x1/bm.svg new file mode 100644 index 0000000..8b66486 --- /dev/null +++ b/flags/1x1/bm.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/bn.svg b/flags/1x1/bn.svg new file mode 100644 index 0000000..afad727 --- /dev/null +++ b/flags/1x1/bn.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/bo.svg b/flags/1x1/bo.svg new file mode 100644 index 0000000..405d687 --- /dev/null +++ b/flags/1x1/bo.svg @@ -0,0 +1,678 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/bq.svg b/flags/1x1/bq.svg new file mode 100644 index 0000000..4b9168e --- /dev/null +++ b/flags/1x1/bq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/1x1/br.svg b/flags/1x1/br.svg new file mode 100644 index 0000000..6c854ac --- /dev/null +++ b/flags/1x1/br.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/bs.svg b/flags/1x1/bs.svg new file mode 100644 index 0000000..ddf5330 --- /dev/null +++ b/flags/1x1/bs.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/bt.svg b/flags/1x1/bt.svg new file mode 100644 index 0000000..0a9dfeb --- /dev/null +++ b/flags/1x1/bt.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/bv.svg b/flags/1x1/bv.svg new file mode 100644 index 0000000..dcc6ad1 --- /dev/null +++ b/flags/1x1/bv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/bw.svg b/flags/1x1/bw.svg new file mode 100644 index 0000000..d276018 --- /dev/null +++ b/flags/1x1/bw.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/by.svg b/flags/1x1/by.svg new file mode 100644 index 0000000..16730e0 --- /dev/null +++ b/flags/1x1/by.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/bz.svg b/flags/1x1/bz.svg new file mode 100644 index 0000000..48bd0b0 --- /dev/null +++ b/flags/1x1/bz.svg @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/ca.svg b/flags/1x1/ca.svg new file mode 100644 index 0000000..6b8e344 --- /dev/null +++ b/flags/1x1/ca.svg @@ -0,0 +1,4 @@ + + + + diff --git a/flags/1x1/cc.svg b/flags/1x1/cc.svg new file mode 100644 index 0000000..d107bdc --- /dev/null +++ b/flags/1x1/cc.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/cd.svg b/flags/1x1/cd.svg new file mode 100644 index 0000000..5663b0a --- /dev/null +++ b/flags/1x1/cd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/flags/1x1/cf.svg b/flags/1x1/cf.svg new file mode 100644 index 0000000..b0625db --- /dev/null +++ b/flags/1x1/cf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/1x1/cg.svg b/flags/1x1/cg.svg new file mode 100644 index 0000000..45599e0 --- /dev/null +++ b/flags/1x1/cg.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/flags/1x1/ch.svg b/flags/1x1/ch.svg new file mode 100644 index 0000000..123e067 --- /dev/null +++ b/flags/1x1/ch.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/1x1/ci.svg b/flags/1x1/ci.svg new file mode 100644 index 0000000..2abf641 --- /dev/null +++ b/flags/1x1/ci.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/ck.svg b/flags/1x1/ck.svg new file mode 100644 index 0000000..9050d54 --- /dev/null +++ b/flags/1x1/ck.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/flags/1x1/cl.svg b/flags/1x1/cl.svg new file mode 100644 index 0000000..e531e23 --- /dev/null +++ b/flags/1x1/cl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/cm.svg b/flags/1x1/cm.svg new file mode 100644 index 0000000..9233b92 --- /dev/null +++ b/flags/1x1/cm.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/1x1/cn.svg b/flags/1x1/cn.svg new file mode 100644 index 0000000..0c2ff9f --- /dev/null +++ b/flags/1x1/cn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/flags/1x1/co.svg b/flags/1x1/co.svg new file mode 100644 index 0000000..5804bfe --- /dev/null +++ b/flags/1x1/co.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/cp.svg b/flags/1x1/cp.svg new file mode 100644 index 0000000..a27c39d --- /dev/null +++ b/flags/1x1/cp.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/cr.svg b/flags/1x1/cr.svg new file mode 100644 index 0000000..4e7889e --- /dev/null +++ b/flags/1x1/cr.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/cu.svg b/flags/1x1/cu.svg new file mode 100644 index 0000000..3bffbe1 --- /dev/null +++ b/flags/1x1/cu.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/cv.svg b/flags/1x1/cv.svg new file mode 100644 index 0000000..1170cd7 --- /dev/null +++ b/flags/1x1/cv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/cw.svg b/flags/1x1/cw.svg new file mode 100644 index 0000000..f4e9756 --- /dev/null +++ b/flags/1x1/cw.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/1x1/cx.svg b/flags/1x1/cx.svg new file mode 100644 index 0000000..44d3757 --- /dev/null +++ b/flags/1x1/cx.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/1x1/cy.svg b/flags/1x1/cy.svg new file mode 100644 index 0000000..58d87e7 --- /dev/null +++ b/flags/1x1/cy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/1x1/cz.svg b/flags/1x1/cz.svg new file mode 100644 index 0000000..dcd0a6b --- /dev/null +++ b/flags/1x1/cz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/1x1/de.svg b/flags/1x1/de.svg new file mode 100644 index 0000000..ccb5ff1 --- /dev/null +++ b/flags/1x1/de.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/1x1/dg.svg b/flags/1x1/dg.svg new file mode 100644 index 0000000..58f1e01 --- /dev/null +++ b/flags/1x1/dg.svg @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/dj.svg b/flags/1x1/dj.svg new file mode 100644 index 0000000..281d738 --- /dev/null +++ b/flags/1x1/dj.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/dk.svg b/flags/1x1/dk.svg new file mode 100644 index 0000000..5aaaa19 --- /dev/null +++ b/flags/1x1/dk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/1x1/dm.svg b/flags/1x1/dm.svg new file mode 100644 index 0000000..0299f9f --- /dev/null +++ b/flags/1x1/dm.svg @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/do.svg b/flags/1x1/do.svg new file mode 100644 index 0000000..0ae03b7 --- /dev/null +++ b/flags/1x1/do.svg @@ -0,0 +1,6745 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/dz.svg b/flags/1x1/dz.svg new file mode 100644 index 0000000..8abcd25 --- /dev/null +++ b/flags/1x1/dz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/1x1/ea.svg b/flags/1x1/ea.svg new file mode 100644 index 0000000..ad2ec34 --- /dev/null +++ b/flags/1x1/ea.svg @@ -0,0 +1,547 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/ec.svg b/flags/1x1/ec.svg new file mode 100644 index 0000000..06495b9 --- /dev/null +++ b/flags/1x1/ec.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/ee.svg b/flags/1x1/ee.svg new file mode 100644 index 0000000..b94dc75 --- /dev/null +++ b/flags/1x1/ee.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/eg.svg b/flags/1x1/eg.svg new file mode 100644 index 0000000..900abc6 --- /dev/null +++ b/flags/1x1/eg.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/eh.svg b/flags/1x1/eh.svg new file mode 100644 index 0000000..667d5f6 --- /dev/null +++ b/flags/1x1/eh.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/1x1/er.svg b/flags/1x1/er.svg new file mode 100644 index 0000000..c4f9d7b --- /dev/null +++ b/flags/1x1/er.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/es-ct.svg b/flags/1x1/es-ct.svg new file mode 100644 index 0000000..a06a2e3 --- /dev/null +++ b/flags/1x1/es-ct.svg @@ -0,0 +1,4 @@ + + + + diff --git a/flags/1x1/es-ga.svg b/flags/1x1/es-ga.svg new file mode 100644 index 0000000..6d8c64f --- /dev/null +++ b/flags/1x1/es-ga.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/es.svg b/flags/1x1/es.svg new file mode 100644 index 0000000..39ce18a --- /dev/null +++ b/flags/1x1/es.svg @@ -0,0 +1,547 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/et.svg b/flags/1x1/et.svg new file mode 100644 index 0000000..046399b --- /dev/null +++ b/flags/1x1/et.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/1x1/eu.svg b/flags/1x1/eu.svg new file mode 100644 index 0000000..f992981 --- /dev/null +++ b/flags/1x1/eu.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/fi.svg b/flags/1x1/fi.svg new file mode 100644 index 0000000..925245e --- /dev/null +++ b/flags/1x1/fi.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/1x1/fj.svg b/flags/1x1/fj.svg new file mode 100644 index 0000000..533a70c --- /dev/null +++ b/flags/1x1/fj.svg @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/fk.svg b/flags/1x1/fk.svg new file mode 100644 index 0000000..3114890 --- /dev/null +++ b/flags/1x1/fk.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/fm.svg b/flags/1x1/fm.svg new file mode 100644 index 0000000..44532c5 --- /dev/null +++ b/flags/1x1/fm.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/flags/1x1/fo.svg b/flags/1x1/fo.svg new file mode 100644 index 0000000..33fbdce --- /dev/null +++ b/flags/1x1/fo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/flags/1x1/fr.svg b/flags/1x1/fr.svg new file mode 100644 index 0000000..3c76058 --- /dev/null +++ b/flags/1x1/fr.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/ga.svg b/flags/1x1/ga.svg new file mode 100644 index 0000000..113a5b5 --- /dev/null +++ b/flags/1x1/ga.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/gb-eng.svg b/flags/1x1/gb-eng.svg new file mode 100644 index 0000000..ee48fed --- /dev/null +++ b/flags/1x1/gb-eng.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/1x1/gb-nir.svg b/flags/1x1/gb-nir.svg new file mode 100644 index 0000000..91c9659 --- /dev/null +++ b/flags/1x1/gb-nir.svg @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/gb-sct.svg b/flags/1x1/gb-sct.svg new file mode 100644 index 0000000..44d38cc --- /dev/null +++ b/flags/1x1/gb-sct.svg @@ -0,0 +1,4 @@ + + + + diff --git a/flags/1x1/gb-wls.svg b/flags/1x1/gb-wls.svg new file mode 100644 index 0000000..3126882 --- /dev/null +++ b/flags/1x1/gb-wls.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/1x1/gb.svg b/flags/1x1/gb.svg new file mode 100644 index 0000000..b261273 --- /dev/null +++ b/flags/1x1/gb.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/gd.svg b/flags/1x1/gd.svg new file mode 100644 index 0000000..97d87f4 --- /dev/null +++ b/flags/1x1/gd.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/ge.svg b/flags/1x1/ge.svg new file mode 100644 index 0000000..f0af103 --- /dev/null +++ b/flags/1x1/ge.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/1x1/gf.svg b/flags/1x1/gf.svg new file mode 100644 index 0000000..069a585 --- /dev/null +++ b/flags/1x1/gf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/gg.svg b/flags/1x1/gg.svg new file mode 100644 index 0000000..23aca9e --- /dev/null +++ b/flags/1x1/gg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/1x1/gh.svg b/flags/1x1/gh.svg new file mode 100644 index 0000000..84f4bab --- /dev/null +++ b/flags/1x1/gh.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/1x1/gi.svg b/flags/1x1/gi.svg new file mode 100644 index 0000000..ded225d --- /dev/null +++ b/flags/1x1/gi.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/gl.svg b/flags/1x1/gl.svg new file mode 100644 index 0000000..eaa817b --- /dev/null +++ b/flags/1x1/gl.svg @@ -0,0 +1,4 @@ + + + + diff --git a/flags/1x1/gm.svg b/flags/1x1/gm.svg new file mode 100644 index 0000000..2a8f724 --- /dev/null +++ b/flags/1x1/gm.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/1x1/gn.svg b/flags/1x1/gn.svg new file mode 100644 index 0000000..ae81f9d --- /dev/null +++ b/flags/1x1/gn.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/gp.svg b/flags/1x1/gp.svg new file mode 100644 index 0000000..d170120 --- /dev/null +++ b/flags/1x1/gp.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/gq.svg b/flags/1x1/gq.svg new file mode 100644 index 0000000..3fb086e --- /dev/null +++ b/flags/1x1/gq.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/gr.svg b/flags/1x1/gr.svg new file mode 100644 index 0000000..07e56a1 --- /dev/null +++ b/flags/1x1/gr.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/1x1/gs.svg b/flags/1x1/gs.svg new file mode 100644 index 0000000..1687c11 --- /dev/null +++ b/flags/1x1/gs.svg @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/gt.svg b/flags/1x1/gt.svg new file mode 100644 index 0000000..853f4e7 --- /dev/null +++ b/flags/1x1/gt.svg @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/gu.svg b/flags/1x1/gu.svg new file mode 100644 index 0000000..36783b0 --- /dev/null +++ b/flags/1x1/gu.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + G + + + U + + + A + + + M + + + + + + + + G + + + U + + + A + + + M + + diff --git a/flags/1x1/gw.svg b/flags/1x1/gw.svg new file mode 100644 index 0000000..cae163d --- /dev/null +++ b/flags/1x1/gw.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/1x1/gy.svg b/flags/1x1/gy.svg new file mode 100644 index 0000000..8188c44 --- /dev/null +++ b/flags/1x1/gy.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/1x1/hk.svg b/flags/1x1/hk.svg new file mode 100644 index 0000000..e04146a --- /dev/null +++ b/flags/1x1/hk.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/hm.svg b/flags/1x1/hm.svg new file mode 100644 index 0000000..d386a2b --- /dev/null +++ b/flags/1x1/hm.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/flags/1x1/hn.svg b/flags/1x1/hn.svg new file mode 100644 index 0000000..01bf251 --- /dev/null +++ b/flags/1x1/hn.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/hr.svg b/flags/1x1/hr.svg new file mode 100644 index 0000000..8e98781 --- /dev/null +++ b/flags/1x1/hr.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/ht.svg b/flags/1x1/ht.svg new file mode 100644 index 0000000..965dd03 --- /dev/null +++ b/flags/1x1/ht.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/hu.svg b/flags/1x1/hu.svg new file mode 100644 index 0000000..088242d --- /dev/null +++ b/flags/1x1/hu.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/ic.svg b/flags/1x1/ic.svg new file mode 100644 index 0000000..096603d --- /dev/null +++ b/flags/1x1/ic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/id.svg b/flags/1x1/id.svg new file mode 100644 index 0000000..ddad7cb --- /dev/null +++ b/flags/1x1/id.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/1x1/ie.svg b/flags/1x1/ie.svg new file mode 100644 index 0000000..e13de22 --- /dev/null +++ b/flags/1x1/ie.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/il.svg b/flags/1x1/il.svg new file mode 100644 index 0000000..ec762f8 --- /dev/null +++ b/flags/1x1/il.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/1x1/im.svg b/flags/1x1/im.svg new file mode 100644 index 0000000..5f1c3b7 --- /dev/null +++ b/flags/1x1/im.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/in.svg b/flags/1x1/in.svg new file mode 100644 index 0000000..7b79eeb --- /dev/null +++ b/flags/1x1/in.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/io.svg b/flags/1x1/io.svg new file mode 100644 index 0000000..d4e878f --- /dev/null +++ b/flags/1x1/io.svg @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/iq.svg b/flags/1x1/iq.svg new file mode 100644 index 0000000..f009ae2 --- /dev/null +++ b/flags/1x1/iq.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/flags/1x1/ir.svg b/flags/1x1/ir.svg new file mode 100644 index 0000000..418da77 --- /dev/null +++ b/flags/1x1/ir.svg @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/is.svg b/flags/1x1/is.svg new file mode 100644 index 0000000..c3a9225 --- /dev/null +++ b/flags/1x1/is.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/flags/1x1/it.svg b/flags/1x1/it.svg new file mode 100644 index 0000000..b9596d0 --- /dev/null +++ b/flags/1x1/it.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/je.svg b/flags/1x1/je.svg new file mode 100644 index 0000000..ba16c34 --- /dev/null +++ b/flags/1x1/je.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/jm.svg b/flags/1x1/jm.svg new file mode 100644 index 0000000..e2c0e54 --- /dev/null +++ b/flags/1x1/jm.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/1x1/jo.svg b/flags/1x1/jo.svg new file mode 100644 index 0000000..5fdb276 --- /dev/null +++ b/flags/1x1/jo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/1x1/jp.svg b/flags/1x1/jp.svg new file mode 100644 index 0000000..5a52afd --- /dev/null +++ b/flags/1x1/jp.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/flags/1x1/ke.svg b/flags/1x1/ke.svg new file mode 100644 index 0000000..ad76b35 --- /dev/null +++ b/flags/1x1/ke.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/kg.svg b/flags/1x1/kg.svg new file mode 100644 index 0000000..4375490 --- /dev/null +++ b/flags/1x1/kg.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/1x1/kh.svg b/flags/1x1/kh.svg new file mode 100644 index 0000000..adda387 --- /dev/null +++ b/flags/1x1/kh.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/ki.svg b/flags/1x1/ki.svg new file mode 100644 index 0000000..27be8be --- /dev/null +++ b/flags/1x1/ki.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/km.svg b/flags/1x1/km.svg new file mode 100644 index 0000000..c5b89cb --- /dev/null +++ b/flags/1x1/km.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/1x1/kn.svg b/flags/1x1/kn.svg new file mode 100644 index 0000000..39bd32a --- /dev/null +++ b/flags/1x1/kn.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/1x1/kp.svg b/flags/1x1/kp.svg new file mode 100644 index 0000000..a420928 --- /dev/null +++ b/flags/1x1/kp.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/1x1/kr.svg b/flags/1x1/kr.svg new file mode 100644 index 0000000..1f497d9 --- /dev/null +++ b/flags/1x1/kr.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/kw.svg b/flags/1x1/kw.svg new file mode 100644 index 0000000..6a49b7f --- /dev/null +++ b/flags/1x1/kw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/ky.svg b/flags/1x1/ky.svg new file mode 100644 index 0000000..f843041 --- /dev/null +++ b/flags/1x1/ky.svg @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/kz.svg b/flags/1x1/kz.svg new file mode 100644 index 0000000..ec1929b --- /dev/null +++ b/flags/1x1/kz.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/la.svg b/flags/1x1/la.svg new file mode 100644 index 0000000..fdda432 --- /dev/null +++ b/flags/1x1/la.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/flags/1x1/lb.svg b/flags/1x1/lb.svg new file mode 100644 index 0000000..2d05721 --- /dev/null +++ b/flags/1x1/lb.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/1x1/lc.svg b/flags/1x1/lc.svg new file mode 100644 index 0000000..d39c7f6 --- /dev/null +++ b/flags/1x1/lc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/1x1/li.svg b/flags/1x1/li.svg new file mode 100644 index 0000000..260c8f6 --- /dev/null +++ b/flags/1x1/li.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/lk.svg b/flags/1x1/lk.svg new file mode 100644 index 0000000..3fc4f4d --- /dev/null +++ b/flags/1x1/lk.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/lr.svg b/flags/1x1/lr.svg new file mode 100644 index 0000000..cb25112 --- /dev/null +++ b/flags/1x1/lr.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/1x1/ls.svg b/flags/1x1/ls.svg new file mode 100644 index 0000000..aa8810b --- /dev/null +++ b/flags/1x1/ls.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/1x1/lt.svg b/flags/1x1/lt.svg new file mode 100644 index 0000000..52ada94 --- /dev/null +++ b/flags/1x1/lt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/lu.svg b/flags/1x1/lu.svg new file mode 100644 index 0000000..5c0d6da --- /dev/null +++ b/flags/1x1/lu.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/1x1/lv.svg b/flags/1x1/lv.svg new file mode 100644 index 0000000..5af883c --- /dev/null +++ b/flags/1x1/lv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/1x1/ly.svg b/flags/1x1/ly.svg new file mode 100644 index 0000000..ffa93fb --- /dev/null +++ b/flags/1x1/ly.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/ma.svg b/flags/1x1/ma.svg new file mode 100644 index 0000000..8041667 --- /dev/null +++ b/flags/1x1/ma.svg @@ -0,0 +1,4 @@ + + + + diff --git a/flags/1x1/mc.svg b/flags/1x1/mc.svg new file mode 100644 index 0000000..04173a4 --- /dev/null +++ b/flags/1x1/mc.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/1x1/md.svg b/flags/1x1/md.svg new file mode 100644 index 0000000..8720921 --- /dev/null +++ b/flags/1x1/md.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/me.svg b/flags/1x1/me.svg new file mode 100644 index 0000000..fbd8b86 --- /dev/null +++ b/flags/1x1/me.svg @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/mf.svg b/flags/1x1/mf.svg new file mode 100644 index 0000000..b4aa3c0 --- /dev/null +++ b/flags/1x1/mf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/mg.svg b/flags/1x1/mg.svg new file mode 100644 index 0000000..df9a25c --- /dev/null +++ b/flags/1x1/mg.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/mh.svg b/flags/1x1/mh.svg new file mode 100644 index 0000000..8ff2256 --- /dev/null +++ b/flags/1x1/mh.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/1x1/mk.svg b/flags/1x1/mk.svg new file mode 100644 index 0000000..0ee923a --- /dev/null +++ b/flags/1x1/mk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/1x1/ml.svg b/flags/1x1/ml.svg new file mode 100644 index 0000000..665d6b2 --- /dev/null +++ b/flags/1x1/ml.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/mm.svg b/flags/1x1/mm.svg new file mode 100644 index 0000000..9af57ea --- /dev/null +++ b/flags/1x1/mm.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/1x1/mn.svg b/flags/1x1/mn.svg new file mode 100644 index 0000000..fbe2106 --- /dev/null +++ b/flags/1x1/mn.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/mo.svg b/flags/1x1/mo.svg new file mode 100644 index 0000000..35c3db7 --- /dev/null +++ b/flags/1x1/mo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/1x1/mp.svg b/flags/1x1/mp.svg new file mode 100644 index 0000000..6cbe9b7 --- /dev/null +++ b/flags/1x1/mp.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/mq.svg b/flags/1x1/mq.svg new file mode 100644 index 0000000..3a1e55b --- /dev/null +++ b/flags/1x1/mq.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/mr.svg b/flags/1x1/mr.svg new file mode 100644 index 0000000..a98ec2a --- /dev/null +++ b/flags/1x1/mr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/1x1/ms.svg b/flags/1x1/ms.svg new file mode 100644 index 0000000..d0fa435 --- /dev/null +++ b/flags/1x1/ms.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/mt.svg b/flags/1x1/mt.svg new file mode 100644 index 0000000..a9f58e1 --- /dev/null +++ b/flags/1x1/mt.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/mu.svg b/flags/1x1/mu.svg new file mode 100644 index 0000000..2afe1d3 --- /dev/null +++ b/flags/1x1/mu.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/1x1/mv.svg b/flags/1x1/mv.svg new file mode 100644 index 0000000..c9a6c5b --- /dev/null +++ b/flags/1x1/mv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/1x1/mw.svg b/flags/1x1/mw.svg new file mode 100644 index 0000000..84c77b4 --- /dev/null +++ b/flags/1x1/mw.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/1x1/mx.svg b/flags/1x1/mx.svg new file mode 100644 index 0000000..43375fc --- /dev/null +++ b/flags/1x1/mx.svg @@ -0,0 +1,378 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/my.svg b/flags/1x1/my.svg new file mode 100644 index 0000000..6ad7d0a --- /dev/null +++ b/flags/1x1/my.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/flags/1x1/mz.svg b/flags/1x1/mz.svg new file mode 100644 index 0000000..279f639 --- /dev/null +++ b/flags/1x1/mz.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/na.svg b/flags/1x1/na.svg new file mode 100644 index 0000000..9b3090f --- /dev/null +++ b/flags/1x1/na.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/1x1/nc.svg b/flags/1x1/nc.svg new file mode 100644 index 0000000..50065c4 --- /dev/null +++ b/flags/1x1/nc.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/1x1/ne.svg b/flags/1x1/ne.svg new file mode 100644 index 0000000..a96b027 --- /dev/null +++ b/flags/1x1/ne.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/1x1/nf.svg b/flags/1x1/nf.svg new file mode 100644 index 0000000..e47b4cd --- /dev/null +++ b/flags/1x1/nf.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/flags/1x1/ng.svg b/flags/1x1/ng.svg new file mode 100644 index 0000000..62813e8 --- /dev/null +++ b/flags/1x1/ng.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/1x1/ni.svg b/flags/1x1/ni.svg new file mode 100644 index 0000000..208e4d2 --- /dev/null +++ b/flags/1x1/ni.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/nl.svg b/flags/1x1/nl.svg new file mode 100644 index 0000000..eb0e360 --- /dev/null +++ b/flags/1x1/nl.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/1x1/no.svg b/flags/1x1/no.svg new file mode 100644 index 0000000..939920d --- /dev/null +++ b/flags/1x1/no.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/np.svg b/flags/1x1/np.svg new file mode 100644 index 0000000..ee59b83 --- /dev/null +++ b/flags/1x1/np.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/nr.svg b/flags/1x1/nr.svg new file mode 100644 index 0000000..44a2fa8 --- /dev/null +++ b/flags/1x1/nr.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/flags/1x1/nu.svg b/flags/1x1/nu.svg new file mode 100644 index 0000000..fe50f1c --- /dev/null +++ b/flags/1x1/nu.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/nz.svg b/flags/1x1/nz.svg new file mode 100644 index 0000000..1b62d1e --- /dev/null +++ b/flags/1x1/nz.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/om.svg b/flags/1x1/om.svg new file mode 100644 index 0000000..9070726 --- /dev/null +++ b/flags/1x1/om.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/pa.svg b/flags/1x1/pa.svg new file mode 100644 index 0000000..78b6dba --- /dev/null +++ b/flags/1x1/pa.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/pe.svg b/flags/1x1/pe.svg new file mode 100644 index 0000000..bbb8f78 --- /dev/null +++ b/flags/1x1/pe.svg @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/pf.svg b/flags/1x1/pf.svg new file mode 100644 index 0000000..44964cf --- /dev/null +++ b/flags/1x1/pf.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/pg.svg b/flags/1x1/pg.svg new file mode 100644 index 0000000..6a86bbe --- /dev/null +++ b/flags/1x1/pg.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/1x1/ph.svg b/flags/1x1/ph.svg new file mode 100644 index 0000000..eee8d71 --- /dev/null +++ b/flags/1x1/ph.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/1x1/pk.svg b/flags/1x1/pk.svg new file mode 100644 index 0000000..e71cd92 --- /dev/null +++ b/flags/1x1/pk.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/1x1/pl.svg b/flags/1x1/pl.svg new file mode 100644 index 0000000..8c43577 --- /dev/null +++ b/flags/1x1/pl.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/1x1/pm.svg b/flags/1x1/pm.svg new file mode 100644 index 0000000..5aa6ccf --- /dev/null +++ b/flags/1x1/pm.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/pn.svg b/flags/1x1/pn.svg new file mode 100644 index 0000000..f0977b5 --- /dev/null +++ b/flags/1x1/pn.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/pr.svg b/flags/1x1/pr.svg new file mode 100644 index 0000000..9526568 --- /dev/null +++ b/flags/1x1/pr.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/ps.svg b/flags/1x1/ps.svg new file mode 100644 index 0000000..d9b8cff --- /dev/null +++ b/flags/1x1/ps.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/1x1/pt.svg b/flags/1x1/pt.svg new file mode 100644 index 0000000..43cdb97 --- /dev/null +++ b/flags/1x1/pt.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/pw.svg b/flags/1x1/pw.svg new file mode 100644 index 0000000..fcb757e --- /dev/null +++ b/flags/1x1/pw.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/flags/1x1/py.svg b/flags/1x1/py.svg new file mode 100644 index 0000000..86ec718 --- /dev/null +++ b/flags/1x1/py.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/qa.svg b/flags/1x1/qa.svg new file mode 100644 index 0000000..4edb827 --- /dev/null +++ b/flags/1x1/qa.svg @@ -0,0 +1,4 @@ + + + + diff --git a/flags/1x1/re.svg b/flags/1x1/re.svg new file mode 100644 index 0000000..41d87d9 --- /dev/null +++ b/flags/1x1/re.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/ro.svg b/flags/1x1/ro.svg new file mode 100644 index 0000000..e6cf0f6 --- /dev/null +++ b/flags/1x1/ro.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/rs.svg b/flags/1x1/rs.svg new file mode 100644 index 0000000..d65559a --- /dev/null +++ b/flags/1x1/rs.svg @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/ru.svg b/flags/1x1/ru.svg new file mode 100644 index 0000000..485c24e --- /dev/null +++ b/flags/1x1/ru.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/rw.svg b/flags/1x1/rw.svg new file mode 100644 index 0000000..55c48e6 --- /dev/null +++ b/flags/1x1/rw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/sa.svg b/flags/1x1/sa.svg new file mode 100644 index 0000000..51ed0d9 --- /dev/null +++ b/flags/1x1/sa.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/sb.svg b/flags/1x1/sb.svg new file mode 100644 index 0000000..ba71031 --- /dev/null +++ b/flags/1x1/sb.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/sc.svg b/flags/1x1/sc.svg new file mode 100644 index 0000000..164aa79 --- /dev/null +++ b/flags/1x1/sc.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/1x1/sd.svg b/flags/1x1/sd.svg new file mode 100644 index 0000000..8f78548 --- /dev/null +++ b/flags/1x1/sd.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/se.svg b/flags/1x1/se.svg new file mode 100644 index 0000000..85ea096 --- /dev/null +++ b/flags/1x1/se.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/1x1/sg.svg b/flags/1x1/sg.svg new file mode 100644 index 0000000..ff01b43 --- /dev/null +++ b/flags/1x1/sg.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/sh.svg b/flags/1x1/sh.svg new file mode 100644 index 0000000..2955284 --- /dev/null +++ b/flags/1x1/sh.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/si.svg b/flags/1x1/si.svg new file mode 100644 index 0000000..ae0f57a --- /dev/null +++ b/flags/1x1/si.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/sj.svg b/flags/1x1/sj.svg new file mode 100644 index 0000000..ecb9c79 --- /dev/null +++ b/flags/1x1/sj.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/sk.svg b/flags/1x1/sk.svg new file mode 100644 index 0000000..3e4ff50 --- /dev/null +++ b/flags/1x1/sk.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/1x1/sl.svg b/flags/1x1/sl.svg new file mode 100644 index 0000000..b649f1b --- /dev/null +++ b/flags/1x1/sl.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/flags/1x1/sm.svg b/flags/1x1/sm.svg new file mode 100644 index 0000000..6fb2410 --- /dev/null +++ b/flags/1x1/sm.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + L + + + I + + + B + + + E + + + R + + + T + + + A + + + S + + + + diff --git a/flags/1x1/sn.svg b/flags/1x1/sn.svg new file mode 100644 index 0000000..ff9cf2e --- /dev/null +++ b/flags/1x1/sn.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/1x1/so.svg b/flags/1x1/so.svg new file mode 100644 index 0000000..e37e086 --- /dev/null +++ b/flags/1x1/so.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/flags/1x1/sr.svg b/flags/1x1/sr.svg new file mode 100644 index 0000000..0ca3596 --- /dev/null +++ b/flags/1x1/sr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/1x1/ss.svg b/flags/1x1/ss.svg new file mode 100644 index 0000000..e950241 --- /dev/null +++ b/flags/1x1/ss.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/1x1/st.svg b/flags/1x1/st.svg new file mode 100644 index 0000000..6c834b3 --- /dev/null +++ b/flags/1x1/st.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/1x1/sv.svg b/flags/1x1/sv.svg new file mode 100644 index 0000000..95f1da0 --- /dev/null +++ b/flags/1x1/sv.svg @@ -0,0 +1,594 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/sx.svg b/flags/1x1/sx.svg new file mode 100644 index 0000000..eb95231 --- /dev/null +++ b/flags/1x1/sx.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/sy.svg b/flags/1x1/sy.svg new file mode 100644 index 0000000..c61f79a --- /dev/null +++ b/flags/1x1/sy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/1x1/sz.svg b/flags/1x1/sz.svg new file mode 100644 index 0000000..c16b641 --- /dev/null +++ b/flags/1x1/sz.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/ta.svg b/flags/1x1/ta.svg new file mode 100644 index 0000000..85fcad2 --- /dev/null +++ b/flags/1x1/ta.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/tc.svg b/flags/1x1/tc.svg new file mode 100644 index 0000000..7146041 --- /dev/null +++ b/flags/1x1/tc.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/td.svg b/flags/1x1/td.svg new file mode 100644 index 0000000..9bb0ce6 --- /dev/null +++ b/flags/1x1/td.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/tf.svg b/flags/1x1/tf.svg new file mode 100644 index 0000000..8d85a2b --- /dev/null +++ b/flags/1x1/tf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/1x1/tg.svg b/flags/1x1/tg.svg new file mode 100644 index 0000000..80cb09c --- /dev/null +++ b/flags/1x1/tg.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/1x1/th.svg b/flags/1x1/th.svg new file mode 100644 index 0000000..35141d3 --- /dev/null +++ b/flags/1x1/th.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/tj.svg b/flags/1x1/tj.svg new file mode 100644 index 0000000..93bb4a8 --- /dev/null +++ b/flags/1x1/tj.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/tk.svg b/flags/1x1/tk.svg new file mode 100644 index 0000000..e9f5b42 --- /dev/null +++ b/flags/1x1/tk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/1x1/tl.svg b/flags/1x1/tl.svg new file mode 100644 index 0000000..c5e2906 --- /dev/null +++ b/flags/1x1/tl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/tm.svg b/flags/1x1/tm.svg new file mode 100644 index 0000000..d6c2ab4 --- /dev/null +++ b/flags/1x1/tm.svg @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/tn.svg b/flags/1x1/tn.svg new file mode 100644 index 0000000..df9212f --- /dev/null +++ b/flags/1x1/tn.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/1x1/to.svg b/flags/1x1/to.svg new file mode 100644 index 0000000..3f1b600 --- /dev/null +++ b/flags/1x1/to.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/flags/1x1/tr.svg b/flags/1x1/tr.svg new file mode 100644 index 0000000..9a882a2 --- /dev/null +++ b/flags/1x1/tr.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/1x1/tt.svg b/flags/1x1/tt.svg new file mode 100644 index 0000000..8413969 --- /dev/null +++ b/flags/1x1/tt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/tv.svg b/flags/1x1/tv.svg new file mode 100644 index 0000000..f236724 --- /dev/null +++ b/flags/1x1/tv.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/1x1/tw.svg b/flags/1x1/tw.svg new file mode 100644 index 0000000..83f4e44 --- /dev/null +++ b/flags/1x1/tw.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/tz.svg b/flags/1x1/tz.svg new file mode 100644 index 0000000..8305300 --- /dev/null +++ b/flags/1x1/tz.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/1x1/ua.svg b/flags/1x1/ua.svg new file mode 100644 index 0000000..7d82ddf --- /dev/null +++ b/flags/1x1/ua.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/1x1/ug.svg b/flags/1x1/ug.svg new file mode 100644 index 0000000..688ea39 --- /dev/null +++ b/flags/1x1/ug.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/um.svg b/flags/1x1/um.svg new file mode 100644 index 0000000..4bc03a2 --- /dev/null +++ b/flags/1x1/um.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/1x1/un.svg b/flags/1x1/un.svg new file mode 100644 index 0000000..258cb01 --- /dev/null +++ b/flags/1x1/un.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/1x1/us.svg b/flags/1x1/us.svg new file mode 100644 index 0000000..360a20d --- /dev/null +++ b/flags/1x1/us.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/flags/1x1/uy.svg b/flags/1x1/uy.svg new file mode 100644 index 0000000..f4a502f --- /dev/null +++ b/flags/1x1/uy.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/uz.svg b/flags/1x1/uz.svg new file mode 100644 index 0000000..48d62e3 --- /dev/null +++ b/flags/1x1/uz.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/va.svg b/flags/1x1/va.svg new file mode 100644 index 0000000..5c8e878 --- /dev/null +++ b/flags/1x1/va.svg @@ -0,0 +1,479 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/vc.svg b/flags/1x1/vc.svg new file mode 100644 index 0000000..f347db9 --- /dev/null +++ b/flags/1x1/vc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/1x1/ve.svg b/flags/1x1/ve.svg new file mode 100644 index 0000000..2d02c6a --- /dev/null +++ b/flags/1x1/ve.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/vg.svg b/flags/1x1/vg.svg new file mode 100644 index 0000000..a231a19 --- /dev/null +++ b/flags/1x1/vg.svg @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/vi.svg b/flags/1x1/vi.svg new file mode 100644 index 0000000..114995e --- /dev/null +++ b/flags/1x1/vi.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/vn.svg b/flags/1x1/vn.svg new file mode 100644 index 0000000..b91a6f2 --- /dev/null +++ b/flags/1x1/vn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/flags/1x1/vu.svg b/flags/1x1/vu.svg new file mode 100644 index 0000000..371c8d9 --- /dev/null +++ b/flags/1x1/vu.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/wf.svg b/flags/1x1/wf.svg new file mode 100644 index 0000000..8905f90 --- /dev/null +++ b/flags/1x1/wf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/ws.svg b/flags/1x1/ws.svg new file mode 100644 index 0000000..ab08fdb --- /dev/null +++ b/flags/1x1/ws.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/xk.svg b/flags/1x1/xk.svg new file mode 100644 index 0000000..fb7f090 --- /dev/null +++ b/flags/1x1/xk.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/1x1/xx.svg b/flags/1x1/xx.svg new file mode 100644 index 0000000..a138f43 --- /dev/null +++ b/flags/1x1/xx.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/1x1/ye.svg b/flags/1x1/ye.svg new file mode 100644 index 0000000..4cac4a8 --- /dev/null +++ b/flags/1x1/ye.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/yt.svg b/flags/1x1/yt.svg new file mode 100644 index 0000000..3ab0ba9 --- /dev/null +++ b/flags/1x1/yt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/1x1/za.svg b/flags/1x1/za.svg new file mode 100644 index 0000000..909ce19 --- /dev/null +++ b/flags/1x1/za.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/zm.svg b/flags/1x1/zm.svg new file mode 100644 index 0000000..31ad046 --- /dev/null +++ b/flags/1x1/zm.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/1x1/zw.svg b/flags/1x1/zw.svg new file mode 100644 index 0000000..92f69e9 --- /dev/null +++ b/flags/1x1/zw.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/ac.svg b/flags/4x3/ac.svg new file mode 100644 index 0000000..ece63ea --- /dev/null +++ b/flags/4x3/ac.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/ad.svg b/flags/4x3/ad.svg new file mode 100644 index 0000000..726f981 --- /dev/null +++ b/flags/4x3/ad.svg @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/ae.svg b/flags/4x3/ae.svg new file mode 100644 index 0000000..b7acdbd --- /dev/null +++ b/flags/4x3/ae.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/4x3/af.svg b/flags/4x3/af.svg new file mode 100644 index 0000000..6e75539 --- /dev/null +++ b/flags/4x3/af.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/ag.svg b/flags/4x3/ag.svg new file mode 100644 index 0000000..6991413 --- /dev/null +++ b/flags/4x3/ag.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/4x3/ai.svg b/flags/4x3/ai.svg new file mode 100644 index 0000000..4080e86 --- /dev/null +++ b/flags/4x3/ai.svg @@ -0,0 +1,763 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/al.svg b/flags/4x3/al.svg new file mode 100644 index 0000000..9ec80b8 --- /dev/null +++ b/flags/4x3/al.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/4x3/am.svg b/flags/4x3/am.svg new file mode 100644 index 0000000..ecb2fa7 --- /dev/null +++ b/flags/4x3/am.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/4x3/ao.svg b/flags/4x3/ao.svg new file mode 100644 index 0000000..4dc39f6 --- /dev/null +++ b/flags/4x3/ao.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/aq.svg b/flags/4x3/aq.svg new file mode 100644 index 0000000..53840cc --- /dev/null +++ b/flags/4x3/aq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/4x3/ar.svg b/flags/4x3/ar.svg new file mode 100644 index 0000000..1daf9bb --- /dev/null +++ b/flags/4x3/ar.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/as.svg b/flags/4x3/as.svg new file mode 100644 index 0000000..28feeba --- /dev/null +++ b/flags/4x3/as.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/at.svg b/flags/4x3/at.svg new file mode 100644 index 0000000..c282508 --- /dev/null +++ b/flags/4x3/at.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/4x3/au.svg b/flags/4x3/au.svg new file mode 100644 index 0000000..aa33c93 --- /dev/null +++ b/flags/4x3/au.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/4x3/aw.svg b/flags/4x3/aw.svg new file mode 100644 index 0000000..32cabd5 --- /dev/null +++ b/flags/4x3/aw.svg @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/ax.svg b/flags/4x3/ax.svg new file mode 100644 index 0000000..0584d71 --- /dev/null +++ b/flags/4x3/ax.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/az.svg b/flags/4x3/az.svg new file mode 100644 index 0000000..8e56ef5 --- /dev/null +++ b/flags/4x3/az.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/4x3/ba.svg b/flags/4x3/ba.svg new file mode 100644 index 0000000..fcd1891 --- /dev/null +++ b/flags/4x3/ba.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/flags/4x3/bb.svg b/flags/4x3/bb.svg new file mode 100644 index 0000000..420a688 --- /dev/null +++ b/flags/4x3/bb.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/4x3/bd.svg b/flags/4x3/bd.svg new file mode 100644 index 0000000..16b794d --- /dev/null +++ b/flags/4x3/bd.svg @@ -0,0 +1,4 @@ + + + + diff --git a/flags/4x3/be.svg b/flags/4x3/be.svg new file mode 100644 index 0000000..327f28f --- /dev/null +++ b/flags/4x3/be.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/bf.svg b/flags/4x3/bf.svg new file mode 100644 index 0000000..4713822 --- /dev/null +++ b/flags/4x3/bf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/bg.svg b/flags/4x3/bg.svg new file mode 100644 index 0000000..b100dd0 --- /dev/null +++ b/flags/4x3/bg.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/bh.svg b/flags/4x3/bh.svg new file mode 100644 index 0000000..dee203d --- /dev/null +++ b/flags/4x3/bh.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/4x3/bi.svg b/flags/4x3/bi.svg new file mode 100644 index 0000000..1050838 --- /dev/null +++ b/flags/4x3/bi.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/4x3/bj.svg b/flags/4x3/bj.svg new file mode 100644 index 0000000..0846724 --- /dev/null +++ b/flags/4x3/bj.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/4x3/bl.svg b/flags/4x3/bl.svg new file mode 100644 index 0000000..15803ff --- /dev/null +++ b/flags/4x3/bl.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/bm.svg b/flags/4x3/bm.svg new file mode 100644 index 0000000..73906f3 --- /dev/null +++ b/flags/4x3/bm.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/bn.svg b/flags/4x3/bn.svg new file mode 100644 index 0000000..19f15fa --- /dev/null +++ b/flags/4x3/bn.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/bo.svg b/flags/4x3/bo.svg new file mode 100644 index 0000000..bc55bc3 --- /dev/null +++ b/flags/4x3/bo.svg @@ -0,0 +1,676 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/bq.svg b/flags/4x3/bq.svg new file mode 100644 index 0000000..0e6bc76 --- /dev/null +++ b/flags/4x3/bq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/4x3/br.svg b/flags/4x3/br.svg new file mode 100644 index 0000000..354a701 --- /dev/null +++ b/flags/4x3/br.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/bs.svg b/flags/4x3/bs.svg new file mode 100644 index 0000000..513be43 --- /dev/null +++ b/flags/4x3/bs.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/bt.svg b/flags/4x3/bt.svg new file mode 100644 index 0000000..cea6006 --- /dev/null +++ b/flags/4x3/bt.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/bv.svg b/flags/4x3/bv.svg new file mode 100644 index 0000000..40e16d9 --- /dev/null +++ b/flags/4x3/bv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/bw.svg b/flags/4x3/bw.svg new file mode 100644 index 0000000..a1c8db0 --- /dev/null +++ b/flags/4x3/bw.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/by.svg b/flags/4x3/by.svg new file mode 100644 index 0000000..8d25ee3 --- /dev/null +++ b/flags/4x3/by.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/bz.svg b/flags/4x3/bz.svg new file mode 100644 index 0000000..fbc6d7c --- /dev/null +++ b/flags/4x3/bz.svg @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/ca.svg b/flags/4x3/ca.svg new file mode 100644 index 0000000..496f1a1 --- /dev/null +++ b/flags/4x3/ca.svg @@ -0,0 +1,4 @@ + + + + diff --git a/flags/4x3/cc.svg b/flags/4x3/cc.svg new file mode 100644 index 0000000..c4457de --- /dev/null +++ b/flags/4x3/cc.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/cd.svg b/flags/4x3/cd.svg new file mode 100644 index 0000000..e106ddd --- /dev/null +++ b/flags/4x3/cd.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/4x3/cf.svg b/flags/4x3/cf.svg new file mode 100644 index 0000000..a6cd367 --- /dev/null +++ b/flags/4x3/cf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/4x3/cg.svg b/flags/4x3/cg.svg new file mode 100644 index 0000000..9128715 --- /dev/null +++ b/flags/4x3/cg.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/flags/4x3/ch.svg b/flags/4x3/ch.svg new file mode 100644 index 0000000..9abeff4 --- /dev/null +++ b/flags/4x3/ch.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/4x3/ci.svg b/flags/4x3/ci.svg new file mode 100644 index 0000000..e400f0c --- /dev/null +++ b/flags/4x3/ci.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/ck.svg b/flags/4x3/ck.svg new file mode 100644 index 0000000..5c46846 --- /dev/null +++ b/flags/4x3/ck.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/4x3/cl.svg b/flags/4x3/cl.svg new file mode 100644 index 0000000..01766fe --- /dev/null +++ b/flags/4x3/cl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/cm.svg b/flags/4x3/cm.svg new file mode 100644 index 0000000..d06f656 --- /dev/null +++ b/flags/4x3/cm.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/4x3/cn.svg b/flags/4x3/cn.svg new file mode 100644 index 0000000..3660d80 --- /dev/null +++ b/flags/4x3/cn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/flags/4x3/co.svg b/flags/4x3/co.svg new file mode 100644 index 0000000..ebd0a0f --- /dev/null +++ b/flags/4x3/co.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/cp.svg b/flags/4x3/cp.svg new file mode 100644 index 0000000..b179aad --- /dev/null +++ b/flags/4x3/cp.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/cr.svg b/flags/4x3/cr.svg new file mode 100644 index 0000000..5a409ee --- /dev/null +++ b/flags/4x3/cr.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/cu.svg b/flags/4x3/cu.svg new file mode 100644 index 0000000..e8af888 --- /dev/null +++ b/flags/4x3/cu.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/cv.svg b/flags/4x3/cv.svg new file mode 100644 index 0000000..5c251da --- /dev/null +++ b/flags/4x3/cv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/cw.svg b/flags/4x3/cw.svg new file mode 100644 index 0000000..3af2bdf --- /dev/null +++ b/flags/4x3/cw.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/4x3/cx.svg b/flags/4x3/cx.svg new file mode 100644 index 0000000..39fa9b0 --- /dev/null +++ b/flags/4x3/cx.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/4x3/cy.svg b/flags/4x3/cy.svg new file mode 100644 index 0000000..b72473a --- /dev/null +++ b/flags/4x3/cy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/4x3/cz.svg b/flags/4x3/cz.svg new file mode 100644 index 0000000..7913de3 --- /dev/null +++ b/flags/4x3/cz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/4x3/de.svg b/flags/4x3/de.svg new file mode 100644 index 0000000..b08334b --- /dev/null +++ b/flags/4x3/de.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/4x3/dg.svg b/flags/4x3/dg.svg new file mode 100644 index 0000000..6643929 --- /dev/null +++ b/flags/4x3/dg.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/dj.svg b/flags/4x3/dj.svg new file mode 100644 index 0000000..ebf2fc6 --- /dev/null +++ b/flags/4x3/dj.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/dk.svg b/flags/4x3/dk.svg new file mode 100644 index 0000000..563277f --- /dev/null +++ b/flags/4x3/dk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/4x3/dm.svg b/flags/4x3/dm.svg new file mode 100644 index 0000000..60457b7 --- /dev/null +++ b/flags/4x3/dm.svg @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/do.svg b/flags/4x3/do.svg new file mode 100644 index 0000000..7ff190b --- /dev/null +++ b/flags/4x3/do.svg @@ -0,0 +1,6745 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/dz.svg b/flags/4x3/dz.svg new file mode 100644 index 0000000..5ff29a7 --- /dev/null +++ b/flags/4x3/dz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/4x3/ea.svg b/flags/4x3/ea.svg new file mode 100644 index 0000000..cb3feb0 --- /dev/null +++ b/flags/4x3/ea.svg @@ -0,0 +1,544 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/ec.svg b/flags/4x3/ec.svg new file mode 100644 index 0000000..65b7885 --- /dev/null +++ b/flags/4x3/ec.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/ee.svg b/flags/4x3/ee.svg new file mode 100644 index 0000000..3151ad1 --- /dev/null +++ b/flags/4x3/ee.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/eg.svg b/flags/4x3/eg.svg new file mode 100644 index 0000000..728538b --- /dev/null +++ b/flags/4x3/eg.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/eh.svg b/flags/4x3/eh.svg new file mode 100644 index 0000000..2848b6a --- /dev/null +++ b/flags/4x3/eh.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/4x3/er.svg b/flags/4x3/er.svg new file mode 100644 index 0000000..2705295 --- /dev/null +++ b/flags/4x3/er.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/4x3/es-ct.svg b/flags/4x3/es-ct.svg new file mode 100644 index 0000000..4d85911 --- /dev/null +++ b/flags/4x3/es-ct.svg @@ -0,0 +1,4 @@ + + + + diff --git a/flags/4x3/es-ga.svg b/flags/4x3/es-ga.svg new file mode 100644 index 0000000..f571a89 --- /dev/null +++ b/flags/4x3/es-ga.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/es.svg b/flags/4x3/es.svg new file mode 100644 index 0000000..8060591 --- /dev/null +++ b/flags/4x3/es.svg @@ -0,0 +1,544 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/et.svg b/flags/4x3/et.svg new file mode 100644 index 0000000..a3378fd --- /dev/null +++ b/flags/4x3/et.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/4x3/eu.svg b/flags/4x3/eu.svg new file mode 100644 index 0000000..1bb04ec --- /dev/null +++ b/flags/4x3/eu.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/fi.svg b/flags/4x3/fi.svg new file mode 100644 index 0000000..83fa02b --- /dev/null +++ b/flags/4x3/fi.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/4x3/fj.svg b/flags/4x3/fj.svg new file mode 100644 index 0000000..c1020ff --- /dev/null +++ b/flags/4x3/fj.svg @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/fk.svg b/flags/4x3/fk.svg new file mode 100644 index 0000000..c08ccd9 --- /dev/null +++ b/flags/4x3/fk.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/fm.svg b/flags/4x3/fm.svg new file mode 100644 index 0000000..85f4f47 --- /dev/null +++ b/flags/4x3/fm.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/flags/4x3/fo.svg b/flags/4x3/fo.svg new file mode 100644 index 0000000..717ee20 --- /dev/null +++ b/flags/4x3/fo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/flags/4x3/fr.svg b/flags/4x3/fr.svg new file mode 100644 index 0000000..a8d12b8 --- /dev/null +++ b/flags/4x3/fr.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/ga.svg b/flags/4x3/ga.svg new file mode 100644 index 0000000..76edab4 --- /dev/null +++ b/flags/4x3/ga.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/gb-eng.svg b/flags/4x3/gb-eng.svg new file mode 100644 index 0000000..12e3b67 --- /dev/null +++ b/flags/4x3/gb-eng.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/4x3/gb-nir.svg b/flags/4x3/gb-nir.svg new file mode 100644 index 0000000..4179e89 --- /dev/null +++ b/flags/4x3/gb-nir.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/gb-sct.svg b/flags/4x3/gb-sct.svg new file mode 100644 index 0000000..f50cd32 --- /dev/null +++ b/flags/4x3/gb-sct.svg @@ -0,0 +1,4 @@ + + + + diff --git a/flags/4x3/gb-wls.svg b/flags/4x3/gb-wls.svg new file mode 100644 index 0000000..6e15fd0 --- /dev/null +++ b/flags/4x3/gb-wls.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/4x3/gb.svg b/flags/4x3/gb.svg new file mode 100644 index 0000000..dbac25e --- /dev/null +++ b/flags/4x3/gb.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/gd.svg b/flags/4x3/gd.svg new file mode 100644 index 0000000..dad1107 --- /dev/null +++ b/flags/4x3/gd.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/ge.svg b/flags/4x3/ge.svg new file mode 100644 index 0000000..453898b --- /dev/null +++ b/flags/4x3/ge.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/4x3/gf.svg b/flags/4x3/gf.svg new file mode 100644 index 0000000..63ed21c --- /dev/null +++ b/flags/4x3/gf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/gg.svg b/flags/4x3/gg.svg new file mode 100644 index 0000000..e40a838 --- /dev/null +++ b/flags/4x3/gg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/4x3/gh.svg b/flags/4x3/gh.svg new file mode 100644 index 0000000..a6497de --- /dev/null +++ b/flags/4x3/gh.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/4x3/gi.svg b/flags/4x3/gi.svg new file mode 100644 index 0000000..64a69e8 --- /dev/null +++ b/flags/4x3/gi.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/gl.svg b/flags/4x3/gl.svg new file mode 100644 index 0000000..eb5a52e --- /dev/null +++ b/flags/4x3/gl.svg @@ -0,0 +1,4 @@ + + + + diff --git a/flags/4x3/gm.svg b/flags/4x3/gm.svg new file mode 100644 index 0000000..8fe9d66 --- /dev/null +++ b/flags/4x3/gm.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/4x3/gn.svg b/flags/4x3/gn.svg new file mode 100644 index 0000000..40d6ad4 --- /dev/null +++ b/flags/4x3/gn.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/gp.svg b/flags/4x3/gp.svg new file mode 100644 index 0000000..86304c9 --- /dev/null +++ b/flags/4x3/gp.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/gq.svg b/flags/4x3/gq.svg new file mode 100644 index 0000000..ba2acf2 --- /dev/null +++ b/flags/4x3/gq.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/gr.svg b/flags/4x3/gr.svg new file mode 100644 index 0000000..c74e4dd --- /dev/null +++ b/flags/4x3/gr.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/4x3/gs.svg b/flags/4x3/gs.svg new file mode 100644 index 0000000..e6ead0c --- /dev/null +++ b/flags/4x3/gs.svg @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/gt.svg b/flags/4x3/gt.svg new file mode 100644 index 0000000..24c5f33 --- /dev/null +++ b/flags/4x3/gt.svg @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/gu.svg b/flags/4x3/gu.svg new file mode 100644 index 0000000..d6a35d0 --- /dev/null +++ b/flags/4x3/gu.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + G + + + U + + + A + + + M + + + + + + + + G + + + U + + + A + + + M + + diff --git a/flags/4x3/gw.svg b/flags/4x3/gw.svg new file mode 100644 index 0000000..9e0aeeb --- /dev/null +++ b/flags/4x3/gw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/gy.svg b/flags/4x3/gy.svg new file mode 100644 index 0000000..f4d9b8a --- /dev/null +++ b/flags/4x3/gy.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/4x3/hk.svg b/flags/4x3/hk.svg new file mode 100644 index 0000000..603ec22 --- /dev/null +++ b/flags/4x3/hk.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/hm.svg b/flags/4x3/hm.svg new file mode 100644 index 0000000..5493f78 --- /dev/null +++ b/flags/4x3/hm.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/4x3/hn.svg b/flags/4x3/hn.svg new file mode 100644 index 0000000..e019ab8 --- /dev/null +++ b/flags/4x3/hn.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/hr.svg b/flags/4x3/hr.svg new file mode 100644 index 0000000..70115ae --- /dev/null +++ b/flags/4x3/hr.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/ht.svg b/flags/4x3/ht.svg new file mode 100644 index 0000000..9cddb29 --- /dev/null +++ b/flags/4x3/ht.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/hu.svg b/flags/4x3/hu.svg new file mode 100644 index 0000000..baddf7f --- /dev/null +++ b/flags/4x3/hu.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/ic.svg b/flags/4x3/ic.svg new file mode 100644 index 0000000..81e6ee2 --- /dev/null +++ b/flags/4x3/ic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/id.svg b/flags/4x3/id.svg new file mode 100644 index 0000000..6a0a66b --- /dev/null +++ b/flags/4x3/id.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/4x3/ie.svg b/flags/4x3/ie.svg new file mode 100644 index 0000000..049be14 --- /dev/null +++ b/flags/4x3/ie.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/il.svg b/flags/4x3/il.svg new file mode 100644 index 0000000..41fda79 --- /dev/null +++ b/flags/4x3/il.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/4x3/im.svg b/flags/4x3/im.svg new file mode 100644 index 0000000..3d597a1 --- /dev/null +++ b/flags/4x3/im.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/in.svg b/flags/4x3/in.svg new file mode 100644 index 0000000..53c29b3 --- /dev/null +++ b/flags/4x3/in.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/io.svg b/flags/4x3/io.svg new file mode 100644 index 0000000..260f091 --- /dev/null +++ b/flags/4x3/io.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/iq.svg b/flags/4x3/iq.svg new file mode 100644 index 0000000..6891785 --- /dev/null +++ b/flags/4x3/iq.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/flags/4x3/ir.svg b/flags/4x3/ir.svg new file mode 100644 index 0000000..6d5a2f5 --- /dev/null +++ b/flags/4x3/ir.svg @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/is.svg b/flags/4x3/is.svg new file mode 100644 index 0000000..56cc977 --- /dev/null +++ b/flags/4x3/is.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/flags/4x3/it.svg b/flags/4x3/it.svg new file mode 100644 index 0000000..20a8bfd --- /dev/null +++ b/flags/4x3/it.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/je.svg b/flags/4x3/je.svg new file mode 100644 index 0000000..cabef52 --- /dev/null +++ b/flags/4x3/je.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/jm.svg b/flags/4x3/jm.svg new file mode 100644 index 0000000..e03a342 --- /dev/null +++ b/flags/4x3/jm.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/4x3/jo.svg b/flags/4x3/jo.svg new file mode 100644 index 0000000..5080291 --- /dev/null +++ b/flags/4x3/jo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/4x3/jp.svg b/flags/4x3/jp.svg new file mode 100644 index 0000000..a0a6791 --- /dev/null +++ b/flags/4x3/jp.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/flags/4x3/ke.svg b/flags/4x3/ke.svg new file mode 100644 index 0000000..ad190f5 --- /dev/null +++ b/flags/4x3/ke.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/kg.svg b/flags/4x3/kg.svg new file mode 100644 index 0000000..bc6ddf5 --- /dev/null +++ b/flags/4x3/kg.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/4x3/kh.svg b/flags/4x3/kh.svg new file mode 100644 index 0000000..984e84e --- /dev/null +++ b/flags/4x3/kh.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/ki.svg b/flags/4x3/ki.svg new file mode 100644 index 0000000..1697ffe --- /dev/null +++ b/flags/4x3/ki.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/km.svg b/flags/4x3/km.svg new file mode 100644 index 0000000..56d62c3 --- /dev/null +++ b/flags/4x3/km.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/4x3/kn.svg b/flags/4x3/kn.svg new file mode 100644 index 0000000..01a3a0a --- /dev/null +++ b/flags/4x3/kn.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/4x3/kp.svg b/flags/4x3/kp.svg new file mode 100644 index 0000000..94bc8e1 --- /dev/null +++ b/flags/4x3/kp.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/4x3/kr.svg b/flags/4x3/kr.svg new file mode 100644 index 0000000..6674373 --- /dev/null +++ b/flags/4x3/kr.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/kw.svg b/flags/4x3/kw.svg new file mode 100644 index 0000000..7ff91a8 --- /dev/null +++ b/flags/4x3/kw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/ky.svg b/flags/4x3/ky.svg new file mode 100644 index 0000000..3d77716 --- /dev/null +++ b/flags/4x3/ky.svg @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/kz.svg b/flags/4x3/kz.svg new file mode 100644 index 0000000..74a7957 --- /dev/null +++ b/flags/4x3/kz.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/la.svg b/flags/4x3/la.svg new file mode 100644 index 0000000..9723a78 --- /dev/null +++ b/flags/4x3/la.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/flags/4x3/lb.svg b/flags/4x3/lb.svg new file mode 100644 index 0000000..a688ab9 --- /dev/null +++ b/flags/4x3/lb.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/4x3/lc.svg b/flags/4x3/lc.svg new file mode 100644 index 0000000..46bbc6c --- /dev/null +++ b/flags/4x3/lc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/4x3/li.svg b/flags/4x3/li.svg new file mode 100644 index 0000000..d557d31 --- /dev/null +++ b/flags/4x3/li.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/lk.svg b/flags/4x3/lk.svg new file mode 100644 index 0000000..416c0f0 --- /dev/null +++ b/flags/4x3/lk.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/lr.svg b/flags/4x3/lr.svg new file mode 100644 index 0000000..a31377f --- /dev/null +++ b/flags/4x3/lr.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/4x3/ls.svg b/flags/4x3/ls.svg new file mode 100644 index 0000000..e701650 --- /dev/null +++ b/flags/4x3/ls.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/4x3/lt.svg b/flags/4x3/lt.svg new file mode 100644 index 0000000..90ec5d2 --- /dev/null +++ b/flags/4x3/lt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/lu.svg b/flags/4x3/lu.svg new file mode 100644 index 0000000..c31d2bf --- /dev/null +++ b/flags/4x3/lu.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/4x3/lv.svg b/flags/4x3/lv.svg new file mode 100644 index 0000000..6a9e75e --- /dev/null +++ b/flags/4x3/lv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/4x3/ly.svg b/flags/4x3/ly.svg new file mode 100644 index 0000000..14abcb2 --- /dev/null +++ b/flags/4x3/ly.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/ma.svg b/flags/4x3/ma.svg new file mode 100644 index 0000000..7ce56ef --- /dev/null +++ b/flags/4x3/ma.svg @@ -0,0 +1,4 @@ + + + + diff --git a/flags/4x3/mc.svg b/flags/4x3/mc.svg new file mode 100644 index 0000000..9cb6c9e --- /dev/null +++ b/flags/4x3/mc.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/4x3/md.svg b/flags/4x3/md.svg new file mode 100644 index 0000000..a806572 --- /dev/null +++ b/flags/4x3/md.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/me.svg b/flags/4x3/me.svg new file mode 100644 index 0000000..b56cce0 --- /dev/null +++ b/flags/4x3/me.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/mf.svg b/flags/4x3/mf.svg new file mode 100644 index 0000000..64d2b79 --- /dev/null +++ b/flags/4x3/mf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/mg.svg b/flags/4x3/mg.svg new file mode 100644 index 0000000..9ff92dd --- /dev/null +++ b/flags/4x3/mg.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/mh.svg b/flags/4x3/mh.svg new file mode 100644 index 0000000..46351e5 --- /dev/null +++ b/flags/4x3/mh.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/mk.svg b/flags/4x3/mk.svg new file mode 100644 index 0000000..4f5cae7 --- /dev/null +++ b/flags/4x3/mk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/4x3/ml.svg b/flags/4x3/ml.svg new file mode 100644 index 0000000..6f6b716 --- /dev/null +++ b/flags/4x3/ml.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/mm.svg b/flags/4x3/mm.svg new file mode 100644 index 0000000..b2590d9 --- /dev/null +++ b/flags/4x3/mm.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/4x3/mn.svg b/flags/4x3/mn.svg new file mode 100644 index 0000000..c869cf7 --- /dev/null +++ b/flags/4x3/mn.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/mo.svg b/flags/4x3/mo.svg new file mode 100644 index 0000000..ec8a4e1 --- /dev/null +++ b/flags/4x3/mo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/4x3/mp.svg b/flags/4x3/mp.svg new file mode 100644 index 0000000..6696fdb --- /dev/null +++ b/flags/4x3/mp.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/mq.svg b/flags/4x3/mq.svg new file mode 100644 index 0000000..750b396 --- /dev/null +++ b/flags/4x3/mq.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/mr.svg b/flags/4x3/mr.svg new file mode 100644 index 0000000..e9cc291 --- /dev/null +++ b/flags/4x3/mr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/4x3/ms.svg b/flags/4x3/ms.svg new file mode 100644 index 0000000..2675022 --- /dev/null +++ b/flags/4x3/ms.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/mt.svg b/flags/4x3/mt.svg new file mode 100644 index 0000000..676e801 --- /dev/null +++ b/flags/4x3/mt.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/mu.svg b/flags/4x3/mu.svg new file mode 100644 index 0000000..82d7a3b --- /dev/null +++ b/flags/4x3/mu.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/4x3/mv.svg b/flags/4x3/mv.svg new file mode 100644 index 0000000..10450f9 --- /dev/null +++ b/flags/4x3/mv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/4x3/mw.svg b/flags/4x3/mw.svg new file mode 100644 index 0000000..113aae5 --- /dev/null +++ b/flags/4x3/mw.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/flags/4x3/mx.svg b/flags/4x3/mx.svg new file mode 100644 index 0000000..4219195 --- /dev/null +++ b/flags/4x3/mx.svg @@ -0,0 +1,382 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/my.svg b/flags/4x3/my.svg new file mode 100644 index 0000000..3cee707 --- /dev/null +++ b/flags/4x3/my.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/flags/4x3/mz.svg b/flags/4x3/mz.svg new file mode 100644 index 0000000..eb02005 --- /dev/null +++ b/flags/4x3/mz.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/na.svg b/flags/4x3/na.svg new file mode 100644 index 0000000..799702e --- /dev/null +++ b/flags/4x3/na.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/4x3/nc.svg b/flags/4x3/nc.svg new file mode 100644 index 0000000..85bee56 --- /dev/null +++ b/flags/4x3/nc.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/4x3/ne.svg b/flags/4x3/ne.svg new file mode 100644 index 0000000..39a82b8 --- /dev/null +++ b/flags/4x3/ne.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/4x3/nf.svg b/flags/4x3/nf.svg new file mode 100644 index 0000000..ecdb4a3 --- /dev/null +++ b/flags/4x3/nf.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/4x3/ng.svg b/flags/4x3/ng.svg new file mode 100644 index 0000000..81eb35f --- /dev/null +++ b/flags/4x3/ng.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/4x3/ni.svg b/flags/4x3/ni.svg new file mode 100644 index 0000000..79ff9a9 --- /dev/null +++ b/flags/4x3/ni.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/nl.svg b/flags/4x3/nl.svg new file mode 100644 index 0000000..4faaf49 --- /dev/null +++ b/flags/4x3/nl.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/4x3/no.svg b/flags/4x3/no.svg new file mode 100644 index 0000000..a5f2a15 --- /dev/null +++ b/flags/4x3/no.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/np.svg b/flags/4x3/np.svg new file mode 100644 index 0000000..6d63ee1 --- /dev/null +++ b/flags/4x3/np.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/4x3/nr.svg b/flags/4x3/nr.svg new file mode 100644 index 0000000..e71ddcd --- /dev/null +++ b/flags/4x3/nr.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/flags/4x3/nu.svg b/flags/4x3/nu.svg new file mode 100644 index 0000000..2d0b4df --- /dev/null +++ b/flags/4x3/nu.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/nz.svg b/flags/4x3/nz.svg new file mode 100644 index 0000000..561745a --- /dev/null +++ b/flags/4x3/nz.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/om.svg b/flags/4x3/om.svg new file mode 100644 index 0000000..1c76217 --- /dev/null +++ b/flags/4x3/om.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/pa.svg b/flags/4x3/pa.svg new file mode 100644 index 0000000..8dc03bc --- /dev/null +++ b/flags/4x3/pa.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/4x3/pe.svg b/flags/4x3/pe.svg new file mode 100644 index 0000000..eeb29a3 --- /dev/null +++ b/flags/4x3/pe.svg @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/pf.svg b/flags/4x3/pf.svg new file mode 100644 index 0000000..16374f3 --- /dev/null +++ b/flags/4x3/pf.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/pg.svg b/flags/4x3/pg.svg new file mode 100644 index 0000000..1080add --- /dev/null +++ b/flags/4x3/pg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/4x3/ph.svg b/flags/4x3/ph.svg new file mode 100644 index 0000000..3a5b5de --- /dev/null +++ b/flags/4x3/ph.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/4x3/pk.svg b/flags/4x3/pk.svg new file mode 100644 index 0000000..fa02f6a --- /dev/null +++ b/flags/4x3/pk.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/4x3/pl.svg b/flags/4x3/pl.svg new file mode 100644 index 0000000..0fa5145 --- /dev/null +++ b/flags/4x3/pl.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/4x3/pm.svg b/flags/4x3/pm.svg new file mode 100644 index 0000000..839deed --- /dev/null +++ b/flags/4x3/pm.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/pn.svg b/flags/4x3/pn.svg new file mode 100644 index 0000000..d584def --- /dev/null +++ b/flags/4x3/pn.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/pr.svg b/flags/4x3/pr.svg new file mode 100644 index 0000000..3cb403b --- /dev/null +++ b/flags/4x3/pr.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/ps.svg b/flags/4x3/ps.svg new file mode 100644 index 0000000..8203148 --- /dev/null +++ b/flags/4x3/ps.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/4x3/pt.svg b/flags/4x3/pt.svg new file mode 100644 index 0000000..afd2e4a --- /dev/null +++ b/flags/4x3/pt.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/pw.svg b/flags/4x3/pw.svg new file mode 100644 index 0000000..089cbce --- /dev/null +++ b/flags/4x3/pw.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/flags/4x3/py.svg b/flags/4x3/py.svg new file mode 100644 index 0000000..bfbf01f --- /dev/null +++ b/flags/4x3/py.svg @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/qa.svg b/flags/4x3/qa.svg new file mode 100644 index 0000000..bd493c3 --- /dev/null +++ b/flags/4x3/qa.svg @@ -0,0 +1,4 @@ + + + + diff --git a/flags/4x3/re.svg b/flags/4x3/re.svg new file mode 100644 index 0000000..6c56aa4 --- /dev/null +++ b/flags/4x3/re.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/ro.svg b/flags/4x3/ro.svg new file mode 100644 index 0000000..fda0f7b --- /dev/null +++ b/flags/4x3/ro.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/rs.svg b/flags/4x3/rs.svg new file mode 100644 index 0000000..ad1a76a --- /dev/null +++ b/flags/4x3/rs.svg @@ -0,0 +1,292 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/ru.svg b/flags/4x3/ru.svg new file mode 100644 index 0000000..f4d27ef --- /dev/null +++ b/flags/4x3/ru.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/rw.svg b/flags/4x3/rw.svg new file mode 100644 index 0000000..2c6c5d9 --- /dev/null +++ b/flags/4x3/rw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/sa.svg b/flags/4x3/sa.svg new file mode 100644 index 0000000..3018468 --- /dev/null +++ b/flags/4x3/sa.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/sb.svg b/flags/4x3/sb.svg new file mode 100644 index 0000000..a011360 --- /dev/null +++ b/flags/4x3/sb.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/sc.svg b/flags/4x3/sc.svg new file mode 100644 index 0000000..65091a5 --- /dev/null +++ b/flags/4x3/sc.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/4x3/sd.svg b/flags/4x3/sd.svg new file mode 100644 index 0000000..b8e4b97 --- /dev/null +++ b/flags/4x3/sd.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/se.svg b/flags/4x3/se.svg new file mode 100644 index 0000000..c3c9bbe --- /dev/null +++ b/flags/4x3/se.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/4x3/sg.svg b/flags/4x3/sg.svg new file mode 100644 index 0000000..c4dd4ac --- /dev/null +++ b/flags/4x3/sg.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/sh.svg b/flags/4x3/sh.svg new file mode 100644 index 0000000..9bedb08 --- /dev/null +++ b/flags/4x3/sh.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/si.svg b/flags/4x3/si.svg new file mode 100644 index 0000000..f2aea01 --- /dev/null +++ b/flags/4x3/si.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/sj.svg b/flags/4x3/sj.svg new file mode 100644 index 0000000..bb2799c --- /dev/null +++ b/flags/4x3/sj.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/sk.svg b/flags/4x3/sk.svg new file mode 100644 index 0000000..a1953fa --- /dev/null +++ b/flags/4x3/sk.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flags/4x3/sl.svg b/flags/4x3/sl.svg new file mode 100644 index 0000000..a07baf7 --- /dev/null +++ b/flags/4x3/sl.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/sm.svg b/flags/4x3/sm.svg new file mode 100644 index 0000000..f14bede --- /dev/null +++ b/flags/4x3/sm.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + L + + + I + + + B + + + E + + + R + + + T + + + A + + + S + + + + diff --git a/flags/4x3/sn.svg b/flags/4x3/sn.svg new file mode 100644 index 0000000..7c0673d --- /dev/null +++ b/flags/4x3/sn.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/4x3/so.svg b/flags/4x3/so.svg new file mode 100644 index 0000000..ae582f1 --- /dev/null +++ b/flags/4x3/so.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/flags/4x3/sr.svg b/flags/4x3/sr.svg new file mode 100644 index 0000000..5e71c40 --- /dev/null +++ b/flags/4x3/sr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/4x3/ss.svg b/flags/4x3/ss.svg new file mode 100644 index 0000000..73804d8 --- /dev/null +++ b/flags/4x3/ss.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/4x3/st.svg b/flags/4x3/st.svg new file mode 100644 index 0000000..2259f31 --- /dev/null +++ b/flags/4x3/st.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/4x3/sv.svg b/flags/4x3/sv.svg new file mode 100644 index 0000000..752dd3d --- /dev/null +++ b/flags/4x3/sv.svg @@ -0,0 +1,594 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/sx.svg b/flags/4x3/sx.svg new file mode 100644 index 0000000..84844e0 --- /dev/null +++ b/flags/4x3/sx.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/sy.svg b/flags/4x3/sy.svg new file mode 100644 index 0000000..968f915 --- /dev/null +++ b/flags/4x3/sy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/4x3/sz.svg b/flags/4x3/sz.svg new file mode 100644 index 0000000..f3393e5 --- /dev/null +++ b/flags/4x3/sz.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/ta.svg b/flags/4x3/ta.svg new file mode 100644 index 0000000..27bc318 --- /dev/null +++ b/flags/4x3/ta.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/tc.svg b/flags/4x3/tc.svg new file mode 100644 index 0000000..09cce7b --- /dev/null +++ b/flags/4x3/tc.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/td.svg b/flags/4x3/td.svg new file mode 100644 index 0000000..9fadf85 --- /dev/null +++ b/flags/4x3/td.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/tf.svg b/flags/4x3/tf.svg new file mode 100644 index 0000000..4572f4e --- /dev/null +++ b/flags/4x3/tf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/4x3/tg.svg b/flags/4x3/tg.svg new file mode 100644 index 0000000..e20f40d --- /dev/null +++ b/flags/4x3/tg.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flags/4x3/th.svg b/flags/4x3/th.svg new file mode 100644 index 0000000..1e93a61 --- /dev/null +++ b/flags/4x3/th.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/tj.svg b/flags/4x3/tj.svg new file mode 100644 index 0000000..563c97b --- /dev/null +++ b/flags/4x3/tj.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/tk.svg b/flags/4x3/tk.svg new file mode 100644 index 0000000..65bab13 --- /dev/null +++ b/flags/4x3/tk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/4x3/tl.svg b/flags/4x3/tl.svg new file mode 100644 index 0000000..bcfc161 --- /dev/null +++ b/flags/4x3/tl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/tm.svg b/flags/4x3/tm.svg new file mode 100644 index 0000000..871e4ee --- /dev/null +++ b/flags/4x3/tm.svg @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/tn.svg b/flags/4x3/tn.svg new file mode 100644 index 0000000..dc6d067 --- /dev/null +++ b/flags/4x3/tn.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/to.svg b/flags/4x3/to.svg new file mode 100644 index 0000000..d072337 --- /dev/null +++ b/flags/4x3/to.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/flags/4x3/tr.svg b/flags/4x3/tr.svg new file mode 100644 index 0000000..a92804f --- /dev/null +++ b/flags/4x3/tr.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/4x3/tt.svg b/flags/4x3/tt.svg new file mode 100644 index 0000000..14adbe0 --- /dev/null +++ b/flags/4x3/tt.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/4x3/tv.svg b/flags/4x3/tv.svg new file mode 100644 index 0000000..aed967d --- /dev/null +++ b/flags/4x3/tv.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/4x3/tw.svg b/flags/4x3/tw.svg new file mode 100644 index 0000000..57fd98b --- /dev/null +++ b/flags/4x3/tw.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/tz.svg b/flags/4x3/tz.svg new file mode 100644 index 0000000..751c167 --- /dev/null +++ b/flags/4x3/tz.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flags/4x3/ua.svg b/flags/4x3/ua.svg new file mode 100644 index 0000000..3cafc1d --- /dev/null +++ b/flags/4x3/ua.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flags/4x3/ug.svg b/flags/4x3/ug.svg new file mode 100644 index 0000000..78252a4 --- /dev/null +++ b/flags/4x3/ug.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/um.svg b/flags/4x3/um.svg new file mode 100644 index 0000000..5f2822d --- /dev/null +++ b/flags/4x3/um.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/flags/4x3/un.svg b/flags/4x3/un.svg new file mode 100644 index 0000000..b04c3c4 --- /dev/null +++ b/flags/4x3/un.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/4x3/us.svg b/flags/4x3/us.svg new file mode 100644 index 0000000..3189d8e --- /dev/null +++ b/flags/4x3/us.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/flags/4x3/uy.svg b/flags/4x3/uy.svg new file mode 100644 index 0000000..1634d71 --- /dev/null +++ b/flags/4x3/uy.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/uz.svg b/flags/4x3/uz.svg new file mode 100644 index 0000000..8c6a532 --- /dev/null +++ b/flags/4x3/uz.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/va.svg b/flags/4x3/va.svg new file mode 100644 index 0000000..6a03dc4 --- /dev/null +++ b/flags/4x3/va.svg @@ -0,0 +1,479 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/vc.svg b/flags/4x3/vc.svg new file mode 100644 index 0000000..450f6f0 --- /dev/null +++ b/flags/4x3/vc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flags/4x3/ve.svg b/flags/4x3/ve.svg new file mode 100644 index 0000000..77bb549 --- /dev/null +++ b/flags/4x3/ve.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/vg.svg b/flags/4x3/vg.svg new file mode 100644 index 0000000..f18731d --- /dev/null +++ b/flags/4x3/vg.svg @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/vi.svg b/flags/4x3/vi.svg new file mode 100644 index 0000000..8a0941f --- /dev/null +++ b/flags/4x3/vi.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/vn.svg b/flags/4x3/vn.svg new file mode 100644 index 0000000..04433b9 --- /dev/null +++ b/flags/4x3/vn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/flags/4x3/vu.svg b/flags/4x3/vu.svg new file mode 100644 index 0000000..abd682c --- /dev/null +++ b/flags/4x3/vu.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/wf.svg b/flags/4x3/wf.svg new file mode 100644 index 0000000..68f369a --- /dev/null +++ b/flags/4x3/wf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/ws.svg b/flags/4x3/ws.svg new file mode 100644 index 0000000..0e758a7 --- /dev/null +++ b/flags/4x3/ws.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/xk.svg b/flags/4x3/xk.svg new file mode 100644 index 0000000..e6a6332 --- /dev/null +++ b/flags/4x3/xk.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/flags/4x3/xx.svg b/flags/4x3/xx.svg new file mode 100644 index 0000000..24bfd45 --- /dev/null +++ b/flags/4x3/xx.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/flags/4x3/ye.svg b/flags/4x3/ye.svg new file mode 100644 index 0000000..61f0ed6 --- /dev/null +++ b/flags/4x3/ye.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/yt.svg b/flags/4x3/yt.svg new file mode 100644 index 0000000..5ee2c60 --- /dev/null +++ b/flags/4x3/yt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flags/4x3/za.svg b/flags/4x3/za.svg new file mode 100644 index 0000000..1e0b8b2 --- /dev/null +++ b/flags/4x3/za.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/zm.svg b/flags/4x3/zm.svg new file mode 100644 index 0000000..b8fdd63 --- /dev/null +++ b/flags/4x3/zm.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flags/4x3/zw.svg b/flags/4x3/zw.svg new file mode 100644 index 0000000..5bfd7df --- /dev/null +++ b/flags/4x3/zw.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/fonts/KaTeX_AMS-Regular.ttf b/fonts/KaTeX_AMS-Regular.ttf new file mode 100644 index 0000000..c6f9a5e Binary files /dev/null and b/fonts/KaTeX_AMS-Regular.ttf differ diff --git a/fonts/KaTeX_AMS-Regular.woff b/fonts/KaTeX_AMS-Regular.woff new file mode 100644 index 0000000..b804d7b Binary files /dev/null and b/fonts/KaTeX_AMS-Regular.woff differ diff --git a/fonts/KaTeX_AMS-Regular.woff2 b/fonts/KaTeX_AMS-Regular.woff2 new file mode 100644 index 0000000..0acaaff Binary files /dev/null and b/fonts/KaTeX_AMS-Regular.woff2 differ diff --git a/fonts/KaTeX_Caligraphic-Bold.ttf b/fonts/KaTeX_Caligraphic-Bold.ttf new file mode 100644 index 0000000..9ff4a5e Binary files /dev/null and b/fonts/KaTeX_Caligraphic-Bold.ttf differ diff --git a/fonts/KaTeX_Caligraphic-Bold.woff b/fonts/KaTeX_Caligraphic-Bold.woff new file mode 100644 index 0000000..9759710 Binary files /dev/null and b/fonts/KaTeX_Caligraphic-Bold.woff differ diff --git a/fonts/KaTeX_Caligraphic-Bold.woff2 b/fonts/KaTeX_Caligraphic-Bold.woff2 new file mode 100644 index 0000000..f390922 Binary files /dev/null and b/fonts/KaTeX_Caligraphic-Bold.woff2 differ diff --git a/fonts/KaTeX_Caligraphic-Regular.ttf b/fonts/KaTeX_Caligraphic-Regular.ttf new file mode 100644 index 0000000..f522294 Binary files /dev/null and b/fonts/KaTeX_Caligraphic-Regular.ttf differ diff --git a/fonts/KaTeX_Caligraphic-Regular.woff b/fonts/KaTeX_Caligraphic-Regular.woff new file mode 100644 index 0000000..9bdd534 Binary files /dev/null and b/fonts/KaTeX_Caligraphic-Regular.woff differ diff --git a/fonts/KaTeX_Caligraphic-Regular.woff2 b/fonts/KaTeX_Caligraphic-Regular.woff2 new file mode 100644 index 0000000..75344a1 Binary files /dev/null and b/fonts/KaTeX_Caligraphic-Regular.woff2 differ diff --git a/fonts/KaTeX_Fraktur-Bold.ttf b/fonts/KaTeX_Fraktur-Bold.ttf new file mode 100644 index 0000000..4e98259 Binary files /dev/null and b/fonts/KaTeX_Fraktur-Bold.ttf differ diff --git a/fonts/KaTeX_Fraktur-Bold.woff b/fonts/KaTeX_Fraktur-Bold.woff new file mode 100644 index 0000000..e7730f6 Binary files /dev/null and b/fonts/KaTeX_Fraktur-Bold.woff differ diff --git a/fonts/KaTeX_Fraktur-Bold.woff2 b/fonts/KaTeX_Fraktur-Bold.woff2 new file mode 100644 index 0000000..395f28b Binary files /dev/null and b/fonts/KaTeX_Fraktur-Bold.woff2 differ diff --git a/fonts/KaTeX_Fraktur-Regular.ttf b/fonts/KaTeX_Fraktur-Regular.ttf new file mode 100644 index 0000000..b8461b2 Binary files /dev/null and b/fonts/KaTeX_Fraktur-Regular.ttf differ diff --git a/fonts/KaTeX_Fraktur-Regular.woff b/fonts/KaTeX_Fraktur-Regular.woff new file mode 100644 index 0000000..acab069 Binary files /dev/null and b/fonts/KaTeX_Fraktur-Regular.woff differ diff --git a/fonts/KaTeX_Fraktur-Regular.woff2 b/fonts/KaTeX_Fraktur-Regular.woff2 new file mode 100644 index 0000000..735f694 Binary files /dev/null and b/fonts/KaTeX_Fraktur-Regular.woff2 differ diff --git a/fonts/KaTeX_Main-Bold.ttf b/fonts/KaTeX_Main-Bold.ttf new file mode 100644 index 0000000..4060e62 Binary files /dev/null and b/fonts/KaTeX_Main-Bold.ttf differ diff --git a/fonts/KaTeX_Main-Bold.woff b/fonts/KaTeX_Main-Bold.woff new file mode 100644 index 0000000..f38136a Binary files /dev/null and b/fonts/KaTeX_Main-Bold.woff differ diff --git a/fonts/KaTeX_Main-Bold.woff2 b/fonts/KaTeX_Main-Bold.woff2 new file mode 100644 index 0000000..ab2ad21 Binary files /dev/null and b/fonts/KaTeX_Main-Bold.woff2 differ diff --git a/fonts/KaTeX_Main-BoldItalic.ttf b/fonts/KaTeX_Main-BoldItalic.ttf new file mode 100644 index 0000000..dc00797 Binary files /dev/null and b/fonts/KaTeX_Main-BoldItalic.ttf differ diff --git a/fonts/KaTeX_Main-BoldItalic.woff b/fonts/KaTeX_Main-BoldItalic.woff new file mode 100644 index 0000000..67807b0 Binary files /dev/null and b/fonts/KaTeX_Main-BoldItalic.woff differ diff --git a/fonts/KaTeX_Main-BoldItalic.woff2 b/fonts/KaTeX_Main-BoldItalic.woff2 new file mode 100644 index 0000000..5931794 Binary files /dev/null and b/fonts/KaTeX_Main-BoldItalic.woff2 differ diff --git a/fonts/KaTeX_Main-Italic.ttf b/fonts/KaTeX_Main-Italic.ttf new file mode 100644 index 0000000..0e9b0f3 Binary files /dev/null and b/fonts/KaTeX_Main-Italic.ttf differ diff --git a/fonts/KaTeX_Main-Italic.woff b/fonts/KaTeX_Main-Italic.woff new file mode 100644 index 0000000..6f43b59 Binary files /dev/null and b/fonts/KaTeX_Main-Italic.woff differ diff --git a/fonts/KaTeX_Main-Italic.woff2 b/fonts/KaTeX_Main-Italic.woff2 new file mode 100644 index 0000000..b50920e Binary files /dev/null and b/fonts/KaTeX_Main-Italic.woff2 differ diff --git a/fonts/KaTeX_Main-Regular.ttf b/fonts/KaTeX_Main-Regular.ttf new file mode 100644 index 0000000..dd45e1e Binary files /dev/null and b/fonts/KaTeX_Main-Regular.ttf differ diff --git a/fonts/KaTeX_Main-Regular.woff b/fonts/KaTeX_Main-Regular.woff new file mode 100644 index 0000000..21f5812 Binary files /dev/null and b/fonts/KaTeX_Main-Regular.woff differ diff --git a/fonts/KaTeX_Main-Regular.woff2 b/fonts/KaTeX_Main-Regular.woff2 new file mode 100644 index 0000000..eb24a7b Binary files /dev/null and b/fonts/KaTeX_Main-Regular.woff2 differ diff --git a/fonts/KaTeX_Math-BoldItalic.ttf b/fonts/KaTeX_Math-BoldItalic.ttf new file mode 100644 index 0000000..728ce7a Binary files /dev/null and b/fonts/KaTeX_Math-BoldItalic.ttf differ diff --git a/fonts/KaTeX_Math-BoldItalic.woff b/fonts/KaTeX_Math-BoldItalic.woff new file mode 100644 index 0000000..0ae390d Binary files /dev/null and b/fonts/KaTeX_Math-BoldItalic.woff differ diff --git a/fonts/KaTeX_Math-BoldItalic.woff2 b/fonts/KaTeX_Math-BoldItalic.woff2 new file mode 100644 index 0000000..2965702 Binary files /dev/null and b/fonts/KaTeX_Math-BoldItalic.woff2 differ diff --git a/fonts/KaTeX_Math-Italic.ttf b/fonts/KaTeX_Math-Italic.ttf new file mode 100644 index 0000000..70d559b Binary files /dev/null and b/fonts/KaTeX_Math-Italic.ttf differ diff --git a/fonts/KaTeX_Math-Italic.woff b/fonts/KaTeX_Math-Italic.woff new file mode 100644 index 0000000..eb5159d Binary files /dev/null and b/fonts/KaTeX_Math-Italic.woff differ diff --git a/fonts/KaTeX_Math-Italic.woff2 b/fonts/KaTeX_Math-Italic.woff2 new file mode 100644 index 0000000..215c143 Binary files /dev/null and b/fonts/KaTeX_Math-Italic.woff2 differ diff --git a/fonts/KaTeX_SansSerif-Bold.ttf b/fonts/KaTeX_SansSerif-Bold.ttf new file mode 100644 index 0000000..2f65a8a Binary files /dev/null and b/fonts/KaTeX_SansSerif-Bold.ttf differ diff --git a/fonts/KaTeX_SansSerif-Bold.woff b/fonts/KaTeX_SansSerif-Bold.woff new file mode 100644 index 0000000..8d47c02 Binary files /dev/null and b/fonts/KaTeX_SansSerif-Bold.woff differ diff --git a/fonts/KaTeX_SansSerif-Bold.woff2 b/fonts/KaTeX_SansSerif-Bold.woff2 new file mode 100644 index 0000000..cfaa3bd Binary files /dev/null and b/fonts/KaTeX_SansSerif-Bold.woff2 differ diff --git a/fonts/KaTeX_SansSerif-Italic.ttf b/fonts/KaTeX_SansSerif-Italic.ttf new file mode 100644 index 0000000..d5850df Binary files /dev/null and b/fonts/KaTeX_SansSerif-Italic.ttf differ diff --git a/fonts/KaTeX_SansSerif-Italic.woff b/fonts/KaTeX_SansSerif-Italic.woff new file mode 100644 index 0000000..7e02df9 Binary files /dev/null and b/fonts/KaTeX_SansSerif-Italic.woff differ diff --git a/fonts/KaTeX_SansSerif-Italic.woff2 b/fonts/KaTeX_SansSerif-Italic.woff2 new file mode 100644 index 0000000..349c06d Binary files /dev/null and b/fonts/KaTeX_SansSerif-Italic.woff2 differ diff --git a/fonts/KaTeX_SansSerif-Regular.ttf b/fonts/KaTeX_SansSerif-Regular.ttf new file mode 100644 index 0000000..537279f Binary files /dev/null and b/fonts/KaTeX_SansSerif-Regular.ttf differ diff --git a/fonts/KaTeX_SansSerif-Regular.woff b/fonts/KaTeX_SansSerif-Regular.woff new file mode 100644 index 0000000..31b8482 Binary files /dev/null and b/fonts/KaTeX_SansSerif-Regular.woff differ diff --git a/fonts/KaTeX_SansSerif-Regular.woff2 b/fonts/KaTeX_SansSerif-Regular.woff2 new file mode 100644 index 0000000..a90eea8 Binary files /dev/null and b/fonts/KaTeX_SansSerif-Regular.woff2 differ diff --git a/fonts/KaTeX_Script-Regular.ttf b/fonts/KaTeX_Script-Regular.ttf new file mode 100644 index 0000000..fd679bf Binary files /dev/null and b/fonts/KaTeX_Script-Regular.ttf differ diff --git a/fonts/KaTeX_Script-Regular.woff b/fonts/KaTeX_Script-Regular.woff new file mode 100644 index 0000000..0e7da82 Binary files /dev/null and b/fonts/KaTeX_Script-Regular.woff differ diff --git a/fonts/KaTeX_Script-Regular.woff2 b/fonts/KaTeX_Script-Regular.woff2 new file mode 100644 index 0000000..b3048fc Binary files /dev/null and b/fonts/KaTeX_Script-Regular.woff2 differ diff --git a/fonts/KaTeX_Size1-Regular.ttf b/fonts/KaTeX_Size1-Regular.ttf new file mode 100644 index 0000000..871fd7d Binary files /dev/null and b/fonts/KaTeX_Size1-Regular.ttf differ diff --git a/fonts/KaTeX_Size1-Regular.woff b/fonts/KaTeX_Size1-Regular.woff new file mode 100644 index 0000000..7f292d9 Binary files /dev/null and b/fonts/KaTeX_Size1-Regular.woff differ diff --git a/fonts/KaTeX_Size1-Regular.woff2 b/fonts/KaTeX_Size1-Regular.woff2 new file mode 100644 index 0000000..c5a8462 Binary files /dev/null and b/fonts/KaTeX_Size1-Regular.woff2 differ diff --git a/fonts/KaTeX_Size2-Regular.ttf b/fonts/KaTeX_Size2-Regular.ttf new file mode 100644 index 0000000..7a212ca Binary files /dev/null and b/fonts/KaTeX_Size2-Regular.ttf differ diff --git a/fonts/KaTeX_Size2-Regular.woff b/fonts/KaTeX_Size2-Regular.woff new file mode 100644 index 0000000..d241d9b Binary files /dev/null and b/fonts/KaTeX_Size2-Regular.woff differ diff --git a/fonts/KaTeX_Size2-Regular.woff2 b/fonts/KaTeX_Size2-Regular.woff2 new file mode 100644 index 0000000..e1bccfe Binary files /dev/null and b/fonts/KaTeX_Size2-Regular.woff2 differ diff --git a/fonts/KaTeX_Size3-Regular.ttf b/fonts/KaTeX_Size3-Regular.ttf new file mode 100644 index 0000000..00bff34 Binary files /dev/null and b/fonts/KaTeX_Size3-Regular.ttf differ diff --git a/fonts/KaTeX_Size3-Regular.woff b/fonts/KaTeX_Size3-Regular.woff new file mode 100644 index 0000000..e6e9b65 Binary files /dev/null and b/fonts/KaTeX_Size3-Regular.woff differ diff --git a/fonts/KaTeX_Size3-Regular.woff2 b/fonts/KaTeX_Size3-Regular.woff2 new file mode 100644 index 0000000..249a286 Binary files /dev/null and b/fonts/KaTeX_Size3-Regular.woff2 differ diff --git a/fonts/KaTeX_Size4-Regular.ttf b/fonts/KaTeX_Size4-Regular.ttf new file mode 100644 index 0000000..74f0892 Binary files /dev/null and b/fonts/KaTeX_Size4-Regular.ttf differ diff --git a/fonts/KaTeX_Size4-Regular.woff b/fonts/KaTeX_Size4-Regular.woff new file mode 100644 index 0000000..e1ec545 Binary files /dev/null and b/fonts/KaTeX_Size4-Regular.woff differ diff --git a/fonts/KaTeX_Size4-Regular.woff2 b/fonts/KaTeX_Size4-Regular.woff2 new file mode 100644 index 0000000..680c130 Binary files /dev/null and b/fonts/KaTeX_Size4-Regular.woff2 differ diff --git a/fonts/KaTeX_Typewriter-Regular.ttf b/fonts/KaTeX_Typewriter-Regular.ttf new file mode 100644 index 0000000..c83252c Binary files /dev/null and b/fonts/KaTeX_Typewriter-Regular.ttf differ diff --git a/fonts/KaTeX_Typewriter-Regular.woff b/fonts/KaTeX_Typewriter-Regular.woff new file mode 100644 index 0000000..2432419 Binary files /dev/null and b/fonts/KaTeX_Typewriter-Regular.woff differ diff --git a/fonts/KaTeX_Typewriter-Regular.woff2 b/fonts/KaTeX_Typewriter-Regular.woff2 new file mode 100644 index 0000000..771f1af Binary files /dev/null and b/fonts/KaTeX_Typewriter-Regular.woff2 differ diff --git a/icons/computer-svgrepo-com.svg b/icons/computer-svgrepo-com.svg new file mode 100644 index 0000000..1933caf --- /dev/null +++ b/icons/computer-svgrepo-com.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/moon-svgrepo-com.svg b/icons/moon-svgrepo-com.svg new file mode 100644 index 0000000..2192c65 --- /dev/null +++ b/icons/moon-svgrepo-com.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/sun-svgrepo-com.svg b/icons/sun-svgrepo-com.svg new file mode 100644 index 0000000..4031692 --- /dev/null +++ b/icons/sun-svgrepo-com.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/id/404.html b/id/404.html new file mode 100644 index 0000000..44404ee --- /dev/null +++ b/id/404.html @@ -0,0 +1,11 @@ +404 Page not found +
Page Not Found

404

The page you are looking for is not there yet.

\ No newline at end of file diff --git a/id/categories/index.html b/id/categories/index.html new file mode 100644 index 0000000..ac01e3f --- /dev/null +++ b/id/categories/index.html @@ -0,0 +1,15 @@ +Categories + \ No newline at end of file diff --git a/id/categories/index.xml b/id/categories/index.xml new file mode 100644 index 0000000..ef43677 --- /dev/null +++ b/id/categories/index.xml @@ -0,0 +1 @@ +Categories on RahmatAwehttps://www.rahmatawe.com/id/categories/Recent content in Categories on RahmatAweHugo -- gohugo.ioid \ No newline at end of file diff --git a/id/categories/page/1/index.html b/id/categories/page/1/index.html new file mode 100644 index 0000000..7c4a9cc --- /dev/null +++ b/id/categories/page/1/index.html @@ -0,0 +1,2 @@ +https://www.rahmatawe.com/id/categories/ + \ No newline at end of file diff --git a/id/index.html b/id/index.html new file mode 100644 index 0000000..a0d8f0e --- /dev/null +++ b/id/index.html @@ -0,0 +1,20 @@ +RahmatAwe +
Author Image

Hi, It's me Agung

Rahmat Agung Wibowo

Site Reliability Engineer +at Pintu

An IT Enthusiast interested in cloud computing, devops and security. Love automation and still trying to love coding.

Certified Kubernetes Administrator
AWS Certified Solutions Architect – Associate
Red Hat Certified System Administrator

Pengalaman

1
Site Reliability Engineer
Pintu Kemana Saja

Jan 2022 - Present, +Jakarta

Pintu is a mobile first digital asset (blockchain based) platform that offers customers the opportunity to safely buy, sell, manage, and utilize their blockchain based assets.


GDP Labs

Mar 2021 - Dec 2022, +Jakarta

GDP Labs is a software product development-centric organization based in Indonesia.

Senior Site Reliability Engineer

Apr 2022 - Dec 2022

    Site Reliability Engineer

    Mar 2021 - Apr 2022

    • Automate infrastructure provisioning on public cloud (GCP, AWS) using terraform
    • Automate boring tasks using Ansible
    • Support application development (Java, NodeJS, Python) using some CI/CD tools and platform such as Codeship/GCB/Buddy Works/Jenkins, Docker, Kubernetes, etc.
    2

    3
    Cloud Engineer
    Boer Technology

    Mar 2019 - Dec 2020, +Bogor

    Enterprise Cloud System Integrator and Tech Professional Solutions.

    Responsibilities:
    • Deploy and maintain Linux based OS such as Ubuntu Server and CentOS on customer site.
    • Deploy and maintain Openstack cluster on customer site.
    • Develop content and material for Devops training.
    • Collaborate with Ops team to plan and develop technology and architecture which will be implemented on customer site.
    • Collaborate with other teams on testing Open Source and Cloud Native related technology.
    \ No newline at end of file diff --git a/id/index.json b/id/index.json new file mode 100644 index 0000000..52f3967 --- /dev/null +++ b/id/index.json @@ -0,0 +1 @@ +[{"categories":null,"contents":"This is a sample post intended to test the followings:\nDefault hero image. Different shortcodes. Alert The following alerts are available in this theme.\nThis is sample alert with type=\u0026quot;success\u0026quot;. This is sample alert with type=\u0026quot;danger\u0026quot;. This is sample alert with type=\u0026quot;warning\u0026quot;. This is sample alert with type=\u0026quot;info\u0026quot;. This is sample alert with type=\u0026quot;dark\u0026quot;. This is sample alert with type=\u0026quot;primary\u0026quot;. This is sample alert with type=\u0026quot;secondary\u0026quot;. Image A sample image without any attribute. A sample image with height and width attributes. A center aligned image with height and width attributes. A image with float attribute. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras egestas lectus sed leo ultricies ultricies. Praesent tellus risus, eleifend vel efficitur ac, venenatis sit amet sem. Ut ut egestas erat. Fusce ut leo turpis. Morbi consectetur sed lacus vitae vehicula. Cras gravida turpis id eleifend volutpat. Suspendisse nec ipsum eu erat finibus dictum. Morbi volutpat nulla purus, vel maximus ex molestie id. Nullam posuere est urna, at fringilla eros venenatis quis.\nFusce vulputate dolor augue, ut porta sapien fringilla nec. Vivamus commodo erat felis, a sodales lectus finibus nec. In a pulvinar orci. Maecenas suscipit eget lorem non pretium. Nulla aliquam a augue nec blandit. Curabitur ac urna iaculis, ornare ligula nec, placerat nulla. Maecenas aliquam nisi vitae tempus vulputate.\nSplit This theme support splitting the page into as many columns as you wish.\nTwo column split Left Column Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras egestas lectus sed leo ultricies ultricies. Right Column Fusce ut leo turpis. Morbi consectetur sed lacus vitae vehicula. Cras gravida turpis id eleifend volutpat. Three column split Left Column Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras egestas lectus sed leo ultricies ultricies. Middle Column Aenean dignissim dictum ex. Donec a nunc vel nibh placerat interdum. Right Column Fusce ut leo turpis. Morbi consectetur sed lacus vitae vehicula. Cras gravida turpis id eleifend volutpat. Vertical Space Give vertical space between two lines.\nThis is line one. This is line two. It should have 4rem vertical space with previous line.\nVideo Video by Rahul Sharma from Pexels.\nMermaid Here, are few example of mermaid shortcode.\nGraph:\ngraph LR; A[Hard edge] --\u003e|Link text| B(Round edge) B --\u003e C{Decision} C --\u003e|One| D[Result one] C --\u003e|Two| E[Result two] Sequence Diagram:\nsequenceDiagram participant Alice participant Bob Alice-\u003e\u003eJohn: Hello John, how are you? loop Healthcheck John-\u003e\u003eJohn: Fight against hypochondria end Note right of John: Rational thoughts prevail! John--\u003e\u003eAlice: Great! John-\u003e\u003eBob: How about you? Bob--\u003e\u003eJohn: Jolly good! Gantt diagram:\ngantt dateFormat YYYY-MM-DD title Adding GANTT diagram to mermaid excludes weekdays 2014-01-10 section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d Class Diagram:\nclassDiagram Class01 \u003c|-- AveryLongClass : Cool Class03 *-- Class04 Class05 o-- Class06 Class07 .. Class08 Class09 --\u003e C2 : Where am i? Class09 --* C3 Class09 --|\u003e Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 \u003c--\u003e C2: Cool label Git Graph:\ngitGraph: options { \"nodeSpacing\": 150, \"nodeRadius\": 10 } end commit branch newbranch checkout newbranch commit commit checkout master commit commit merge newbranch ER Diagram:\nerDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses Gist ","date":"June 8, 2020","hero":"/images/default-hero.jpg","permalink":"https://www.rahmatawe.com/id/posts/tidy-up-prometheus/","summary":"This is a sample post intended to test the followings:\nDefault hero image. Different shortcodes. Alert The following alerts are available in this theme.\nThis is sample alert with type=\u0026quot;success\u0026quot;. This is sample alert with type=\u0026quot;danger\u0026quot;. This is sample alert with type=\u0026quot;warning\u0026quot;. This is sample alert with type=\u0026quot;info\u0026quot;. This is sample alert with type=\u0026quot;dark\u0026quot;. This is sample alert with type=\u0026quot;primary\u0026quot;. This is sample alert with type=\u0026quot;secondary\u0026quot;. Image A sample image without any attribute.","tags":null,"title":"Sampel Shortcodes"}] \ No newline at end of file diff --git a/id/index.xml b/id/index.xml new file mode 100644 index 0000000..0f9d431 --- /dev/null +++ b/id/index.xml @@ -0,0 +1,11 @@ +RahmatAwehttps://www.rahmatawe.com/id/Recent content on RahmatAweHugo -- gohugo.ioidMon, 08 Jun 2020 08:06:25 +0600Sampel Shortcodeshttps://www.rahmatawe.com/id/posts/tidy-up-prometheus/Mon, 08 Jun 2020 08:06:25 +0600https://www.rahmatawe.com/id/posts/tidy-up-prometheus/This is a sample post intended to test the followings: +Default hero image. Different shortcodes. Alert The following alerts are available in this theme. +This is sample alert with type=&quot;success&quot;. This is sample alert with type=&quot;danger&quot;. This is sample alert with type=&quot;warning&quot;. This is sample alert with type=&quot;info&quot;. This is sample alert with type=&quot;dark&quot;. This is sample alert with type=&quot;primary&quot;. This is sample alert with type=&quot;secondary&quot;. Image A sample image without any attribute.Search Resultshttps://www.rahmatawe.com/id/search/Tue, 08 Jun 2010 08:06:25 +0600https://www.rahmatawe.com/id/search/This file exists solely to respond to /search URL with the related search layout template. +No content shown here is rendered, all content is based in the template layouts/page/search.html +Setting a very low sitemap priority will tell search engines this is not important content. +This implementation uses Fusejs and mark.js +Initial setup Search depends on additional output content type of JSON in config.toml ``` [outputs] home = [&ldquo;HTML&rdquo;, &ldquo;JSON&rdquo;] ```Search Resultshttps://www.rahmatawe.com/id/search/Tue, 08 Jun 2010 08:06:25 +0600https://www.rahmatawe.com/id/search/This file exists solely to respond to /search URL with the related search layout template. +No content shown here is rendered, all content is based in the template layouts/page/search.html +Setting a very low sitemap priority will tell search engines this is not important content. +This implementation uses Fusejs and mark.js +Initial setup Search depends on additional output content type of JSON in config.toml ``` [outputs] home = [&ldquo;HTML&rdquo;, &ldquo;JSON&rdquo;] ``` \ No newline at end of file diff --git a/id/notes/index.html b/id/notes/index.html new file mode 100644 index 0000000..fb5f831 --- /dev/null +++ b/id/notes/index.html @@ -0,0 +1,15 @@ +Catatan + \ No newline at end of file diff --git a/id/notes/index.xml b/id/notes/index.xml new file mode 100644 index 0000000..4982b57 --- /dev/null +++ b/id/notes/index.xml @@ -0,0 +1,5 @@ +Catatan on RahmatAwehttps://www.rahmatawe.com/id/notes/Recent content in Catatan on RahmatAweHugo -- gohugo.ioidTue, 08 Jun 2010 08:06:25 +0600Search Resultshttps://www.rahmatawe.com/id/search/Tue, 08 Jun 2010 08:06:25 +0600https://www.rahmatawe.com/id/search/This file exists solely to respond to /search URL with the related search layout template. +No content shown here is rendered, all content is based in the template layouts/page/search.html +Setting a very low sitemap priority will tell search engines this is not important content. +This implementation uses Fusejs and mark.js +Initial setup Search depends on additional output content type of JSON in config.toml ``` [outputs] home = [&ldquo;HTML&rdquo;, &ldquo;JSON&rdquo;] ``` \ No newline at end of file diff --git a/id/notes/page/1/index.html b/id/notes/page/1/index.html new file mode 100644 index 0000000..63bd822 --- /dev/null +++ b/id/notes/page/1/index.html @@ -0,0 +1,2 @@ +https://www.rahmatawe.com/id/notes/ + \ No newline at end of file diff --git a/id/notes/sysadmin/index.html b/id/notes/sysadmin/index.html new file mode 100644 index 0000000..0a9ef57 --- /dev/null +++ b/id/notes/sysadmin/index.html @@ -0,0 +1,15 @@ +Catatan Bash + \ No newline at end of file diff --git a/id/notes/sysadmin/index.xml b/id/notes/sysadmin/index.xml new file mode 100644 index 0000000..a040cab --- /dev/null +++ b/id/notes/sysadmin/index.xml @@ -0,0 +1 @@ +Catatan Bash on RahmatAwehttps://www.rahmatawe.com/id/notes/sysadmin/Recent content in Catatan Bash on RahmatAweHugo -- gohugo.ioid \ No newline at end of file diff --git a/id/notes/sysadmin/page/1/index.html b/id/notes/sysadmin/page/1/index.html new file mode 100644 index 0000000..cca2dbc --- /dev/null +++ b/id/notes/sysadmin/page/1/index.html @@ -0,0 +1,2 @@ +https://www.rahmatawe.com/id/notes/sysadmin/ + \ No newline at end of file diff --git a/id/posts/index.html b/id/posts/index.html new file mode 100644 index 0000000..f8b6512 --- /dev/null +++ b/id/posts/index.html @@ -0,0 +1,18 @@ +Artikel + \ No newline at end of file diff --git a/id/posts/index.xml b/id/posts/index.xml new file mode 100644 index 0000000..e6ebc42 --- /dev/null +++ b/id/posts/index.xml @@ -0,0 +1,3 @@ +Artikel on RahmatAwehttps://www.rahmatawe.com/id/posts/Recent content in Artikel on RahmatAweHugo -- gohugo.ioidMon, 08 Jun 2020 08:06:25 +0600Sampel Shortcodeshttps://www.rahmatawe.com/id/posts/tidy-up-prometheus/Mon, 08 Jun 2020 08:06:25 +0600https://www.rahmatawe.com/id/posts/tidy-up-prometheus/This is a sample post intended to test the followings: +Default hero image. Different shortcodes. Alert The following alerts are available in this theme. +This is sample alert with type=&quot;success&quot;. This is sample alert with type=&quot;danger&quot;. This is sample alert with type=&quot;warning&quot;. This is sample alert with type=&quot;info&quot;. This is sample alert with type=&quot;dark&quot;. This is sample alert with type=&quot;primary&quot;. This is sample alert with type=&quot;secondary&quot;. Image A sample image without any attribute. \ No newline at end of file diff --git a/id/posts/page/1/index.html b/id/posts/page/1/index.html new file mode 100644 index 0000000..3f298d5 --- /dev/null +++ b/id/posts/page/1/index.html @@ -0,0 +1,2 @@ +https://www.rahmatawe.com/id/posts/ + \ No newline at end of file diff --git a/blog/tidy-up-prometheus-metrics/imgs/grafana-service-account.png b/id/posts/tidy-up-prometheus/imgs/grafana-service-account.png similarity index 100% rename from blog/tidy-up-prometheus-metrics/imgs/grafana-service-account.png rename to id/posts/tidy-up-prometheus/imgs/grafana-service-account.png diff --git a/blog/tidy-up-prometheus-metrics/imgs/prometheus-high-cardinality.png b/id/posts/tidy-up-prometheus/imgs/prometheus-high-cardinality.png similarity index 100% rename from blog/tidy-up-prometheus-metrics/imgs/prometheus-high-cardinality.png rename to id/posts/tidy-up-prometheus/imgs/prometheus-high-cardinality.png diff --git a/id/posts/tidy-up-prometheus/imgs/title.png b/id/posts/tidy-up-prometheus/imgs/title.png new file mode 100644 index 0000000..126c101 Binary files /dev/null and b/id/posts/tidy-up-prometheus/imgs/title.png differ diff --git a/id/posts/tidy-up-prometheus/index.html b/id/posts/tidy-up-prometheus/index.html new file mode 100644 index 0000000..75c6ba6 --- /dev/null +++ b/id/posts/tidy-up-prometheus/index.html @@ -0,0 +1,73 @@ +Sampel Shortcodes +
    Author Image
    Rahmat Agung Wibowo

    Senin, 08 Juni 2020 | 3 minutes

    Sampel Shortcodes

      This is a sample post intended to test the followings:

      • Default hero image.
      • Different shortcodes.

      Alert

      The following alerts are available in this theme.

      This is sample alert with type="success".
      This is sample alert with type="danger".
      This is sample alert with type="warning".
      This is sample alert with type="info".
      This is sample alert with type="dark".
      This is sample alert with type="primary".
      This is sample alert with type="secondary".

      Image

      A sample image without any attribute.

      A boat at the sea

      A sample image with height and width attributes.

      A boat at the sea

      A center aligned image with height and width attributes.

      A boat at the sea

      A image with float attribute.

      A boat at the sea

      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras egestas lectus sed leo ultricies ultricies. Praesent tellus risus, eleifend vel efficitur ac, venenatis sit amet sem. Ut ut egestas erat. Fusce ut leo turpis. Morbi consectetur sed lacus vitae vehicula. Cras gravida turpis id eleifend volutpat. Suspendisse nec ipsum eu erat finibus dictum. Morbi volutpat nulla purus, vel maximus ex molestie id. Nullam posuere est urna, at fringilla eros venenatis quis.

      Fusce vulputate dolor augue, ut porta sapien fringilla nec. Vivamus commodo erat felis, a sodales lectus finibus nec. In a pulvinar orci. Maecenas suscipit eget lorem non pretium. Nulla aliquam a augue nec blandit. Curabitur ac urna iaculis, ornare ligula nec, placerat nulla. Maecenas aliquam nisi vitae tempus vulputate.

      Split

      This theme support splitting the page into as many columns as you wish.

      Two column split

      Left Column

      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras egestas lectus sed leo ultricies ultricies.

      Right Column

      Fusce ut leo turpis. Morbi consectetur sed lacus vitae vehicula. Cras gravida turpis id eleifend volutpat.

      Three column split

      Left Column

      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras egestas lectus sed leo ultricies ultricies.

      Middle Column

      Aenean dignissim dictum ex. Donec a nunc vel nibh placerat interdum.

      Right Column

      Fusce ut leo turpis. Morbi consectetur sed lacus vitae vehicula. Cras gravida turpis id eleifend volutpat.

      Vertical Space

      Give vertical space between two lines.

      This is line one.

      This is line two. It should have 4rem vertical space with previous line.

      Video

      Video by Rahul Sharma from Pexels.

      Mermaid

      Here, are few example of mermaid shortcode.

      Graph:

      graph LR; +A[Hard edge] -->|Link text| B(Round edge) +B --> C{Decision} +C -->|One| D[Result one] +C -->|Two| E[Result two]

      Sequence Diagram:

      sequenceDiagram +participant Alice +participant Bob +Alice->>John: Hello John, how are you? +loop Healthcheck +John->>John: Fight against hypochondria +end +Note right of John: Rational thoughts
      prevail! +John-->>Alice: Great! +John->>Bob: How about you? +Bob-->>John: Jolly good!

      Gantt diagram:

      gantt +dateFormat YYYY-MM-DD +title Adding GANTT diagram to mermaid +excludes weekdays 2014-01-10 +section A section +Completed task :done, des1, 2014-01-06,2014-01-08 +Active task :active, des2, 2014-01-09, 3d +Future task : des3, after des2, 5d +Future task2 : des4, after des3, 5d

      Class Diagram:

      classDiagram +Class01 <|-- AveryLongClass : Cool +Class03 *-- Class04 +Class05 o-- Class06 +Class07 .. Class08 +Class09 --> C2 : Where am i? +Class09 --* C3 +Class09 --|> Class07 +Class07 : equals() +Class07 : Object[] elementData +Class01 : size() +Class01 : int chimp +Class01 : int gorilla +Class08 <--> C2: Cool label

      Git Graph:

      gitGraph: +options +{ +"nodeSpacing": 150, +"nodeRadius": 10 +} +end +commit +branch newbranch +checkout newbranch +commit +commit +checkout master +commit +commit +merge newbranch

      ER Diagram:

      erDiagram +CUSTOMER ||--o{ ORDER : places +ORDER ||--|{ LINE-ITEM : contains +CUSTOMER }|..|{ DELIVERY-ADDRESS : uses

      Gist



      \ No newline at end of file diff --git a/id/search/index.html b/id/search/index.html new file mode 100644 index 0000000..ba93698 --- /dev/null +++ b/id/search/index.html @@ -0,0 +1,33 @@ +Searches +
      \ No newline at end of file diff --git a/id/search/index.xml b/id/search/index.xml new file mode 100644 index 0000000..f4a4bd9 --- /dev/null +++ b/id/search/index.xml @@ -0,0 +1,5 @@ +Searches on RahmatAwehttps://www.rahmatawe.com/id/search/Recent content in Searches on RahmatAweHugo -- gohugo.ioidTue, 08 Jun 2010 08:06:25 +0600Search Resultshttps://www.rahmatawe.com/id/search/Tue, 08 Jun 2010 08:06:25 +0600https://www.rahmatawe.com/id/search/This file exists solely to respond to /search URL with the related search layout template. +No content shown here is rendered, all content is based in the template layouts/page/search.html +Setting a very low sitemap priority will tell search engines this is not important content. +This implementation uses Fusejs and mark.js +Initial setup Search depends on additional output content type of JSON in config.toml ``` [outputs] home = [&ldquo;HTML&rdquo;, &ldquo;JSON&rdquo;] ``` \ No newline at end of file diff --git a/id/sitemap.xml b/id/sitemap.xml new file mode 100644 index 0000000..42072b5 --- /dev/null +++ b/id/sitemap.xml @@ -0,0 +1 @@ +https://www.rahmatawe.com/id/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/id/search/2010-06-08T08:06:25+06:000.1https://www.rahmatawe.com/id/posts/2020-06-08T08:06:25+06:00https://www.rahmatawe.com/id/2020-06-08T08:06:25+06:00https://www.rahmatawe.com/id/posts/tidy-up-prometheus/2020-06-08T08:06:25+06:00https://www.rahmatawe.com/id/notes/2010-06-08T08:06:25+06:00https://www.rahmatawe.com/id/search/2010-06-08T08:06:25+06:00https://www.rahmatawe.com/id/notes/sysadmin/https://www.rahmatawe.com/id/categories/https://www.rahmatawe.com/id/tags/ \ No newline at end of file diff --git a/id/tags/index.html b/id/tags/index.html new file mode 100644 index 0000000..c48d6d9 --- /dev/null +++ b/id/tags/index.html @@ -0,0 +1,15 @@ +Tags + \ No newline at end of file diff --git a/id/tags/index.xml b/id/tags/index.xml new file mode 100644 index 0000000..41cc52a --- /dev/null +++ b/id/tags/index.xml @@ -0,0 +1 @@ +Tags on RahmatAwehttps://www.rahmatawe.com/id/tags/Recent content in Tags on RahmatAweHugo -- gohugo.ioid \ No newline at end of file diff --git a/id/tags/page/1/index.html b/id/tags/page/1/index.html new file mode 100644 index 0000000..e13f272 --- /dev/null +++ b/id/tags/page/1/index.html @@ -0,0 +1,2 @@ +https://www.rahmatawe.com/id/tags/ + \ No newline at end of file diff --git a/images/404_huf404c6818e5475c7870a4722b4efea20_110323_1500x0_resize_box_3.png b/images/404_huf404c6818e5475c7870a4722b4efea20_110323_1500x0_resize_box_3.png new file mode 100644 index 0000000..a2a2957 Binary files /dev/null and b/images/404_huf404c6818e5475c7870a4722b4efea20_110323_1500x0_resize_box_3.png differ diff --git a/images/author/john_hu16448ac429c38ba18c482778881986b4_77719_120x120_fit_box_3.png b/images/author/john_hu16448ac429c38ba18c482778881986b4_77719_120x120_fit_box_3.png new file mode 100644 index 0000000..1dfc93e Binary files /dev/null and b/images/author/john_hu16448ac429c38ba18c482778881986b4_77719_120x120_fit_box_3.png differ diff --git a/images/author/john_hu16448ac429c38ba18c482778881986b4_77719_148x148_fit_box_3.png b/images/author/john_hu16448ac429c38ba18c482778881986b4_77719_148x148_fit_box_3.png new file mode 100644 index 0000000..77ed6e8 Binary files /dev/null and b/images/author/john_hu16448ac429c38ba18c482778881986b4_77719_148x148_fit_box_3.png differ diff --git a/images/default-hero.jpg b/images/default-hero.jpg new file mode 100644 index 0000000..346fbf0 Binary files /dev/null and b/images/default-hero.jpg differ diff --git a/images/profile.jpg b/images/profile.jpg deleted file mode 100644 index 70738ef..0000000 Binary files a/images/profile.jpg and /dev/null differ diff --git a/images/site/background.jpg b/images/site/background.jpg new file mode 100644 index 0000000..6f631e4 Binary files /dev/null and b/images/site/background.jpg differ diff --git a/images/site/background_huf7bf61140cbbe2f18e9b45c94a0fd934_66702_1200x0_resize_q75_box.jpg b/images/site/background_huf7bf61140cbbe2f18e9b45c94a0fd934_66702_1200x0_resize_q75_box.jpg new file mode 100644 index 0000000..c2a208c Binary files /dev/null and b/images/site/background_huf7bf61140cbbe2f18e9b45c94a0fd934_66702_1200x0_resize_q75_box.jpg differ diff --git a/images/site/background_huf7bf61140cbbe2f18e9b45c94a0fd934_66702_1500x0_resize_q75_box.jpg b/images/site/background_huf7bf61140cbbe2f18e9b45c94a0fd934_66702_1500x0_resize_q75_box.jpg new file mode 100644 index 0000000..e306a3e Binary files /dev/null and b/images/site/background_huf7bf61140cbbe2f18e9b45c94a0fd934_66702_1500x0_resize_q75_box.jpg differ diff --git a/images/site/background_huf7bf61140cbbe2f18e9b45c94a0fd934_66702_500x0_resize_q75_box.jpg b/images/site/background_huf7bf61140cbbe2f18e9b45c94a0fd934_66702_500x0_resize_q75_box.jpg new file mode 100644 index 0000000..04c5d6e Binary files /dev/null and b/images/site/background_huf7bf61140cbbe2f18e9b45c94a0fd934_66702_500x0_resize_q75_box.jpg differ diff --git a/images/site/background_huf7bf61140cbbe2f18e9b45c94a0fd934_66702_800x0_resize_q75_box.jpg b/images/site/background_huf7bf61140cbbe2f18e9b45c94a0fd934_66702_800x0_resize_q75_box.jpg new file mode 100644 index 0000000..85a40e1 Binary files /dev/null and b/images/site/background_huf7bf61140cbbe2f18e9b45c94a0fd934_66702_800x0_resize_q75_box.jpg differ diff --git a/images/site/favicon_hua3f1c5b7c02379fe7fe265bd92e39364_213598_42x0_resize_box_3.png b/images/site/favicon_hua3f1c5b7c02379fe7fe265bd92e39364_213598_42x0_resize_box_3.png new file mode 100644 index 0000000..f5b7233 Binary files /dev/null and b/images/site/favicon_hua3f1c5b7c02379fe7fe265bd92e39364_213598_42x0_resize_box_3.png differ diff --git a/images/site/inverted-logo_hua3f1c5b7c02379fe7fe265bd92e39364_213598_42x0_resize_box_3.png b/images/site/inverted-logo_hua3f1c5b7c02379fe7fe265bd92e39364_213598_42x0_resize_box_3.png new file mode 100644 index 0000000..f5b7233 Binary files /dev/null and b/images/site/inverted-logo_hua3f1c5b7c02379fe7fe265bd92e39364_213598_42x0_resize_box_3.png differ diff --git a/images/site/main-logo_hua3f1c5b7c02379fe7fe265bd92e39364_213598_42x0_resize_box_3.png b/images/site/main-logo_hua3f1c5b7c02379fe7fe265bd92e39364_213598_42x0_resize_box_3.png new file mode 100644 index 0000000..f5b7233 Binary files /dev/null and b/images/site/main-logo_hua3f1c5b7c02379fe7fe265bd92e39364_213598_42x0_resize_box_3.png differ diff --git a/index.html b/index.html index 7d99ba6..2538e86 100644 --- a/index.html +++ b/index.html @@ -1,15 +1,17 @@ -RahmatAwe -
      Rahmat Agung Wibowo

      Rahmat Agung Wibowo

      SRE

      Jakarta, Indonesia

      -About Me

      An IT Enthusiast interested in cloud computing, devops and security. Love automation and still trying to love coding.

      -Experiences

      Site Reliability Engineer
      2023 - present -· -Pintu Kemana Saja
      Site Reliability Engineer
      2021 - 2022 -· -GDP Labs
      Cloud Engineer
      2019 - 2020 -· -PT. Boer Technology
      IT Support
      2018 - 2019 -· -Merapi Online

      -Hobbies

      • Reading
      • Gaming
      • Travelling
      \ No newline at end of file +RahmatAwe +
      Author Image

      Hi, It's me Agung

      Rahmat Agung Wibowo

      Site Reliability Engineer +at Pintu

      An IT Enthusiast interested in cloud computing, devops and security. Love automation and still trying to love coding.

      Certified Kubernetes Administrator
      AWS Certified Solutions Architect – Associate
      Red Hat Certified System Administrator

      Experiences

      1
      Site Reliability Engineer
      Pintu Kemana Saja

      Jan 2022 - Present, +Jakarta

      Pintu is a mobile first digital asset (blockchain based) platform that offers customers the opportunity to safely buy, sell, manage, and utilize their blockchain based assets.


      GDP Labs

      Mar 2021 - Dec 2022, +Jakarta

      GDP Labs is a software product development-centric organization based in Indonesia.

      Senior Site Reliability Engineer

      Apr 2022 - Dec 2022

        Site Reliability Engineer

        Mar 2021 - Apr 2022

        • Automate infrastructure provisioning on public cloud (GCP, AWS) using terraform
        • Automate boring tasks using Ansible
        • Support application development (Java, NodeJS, Python) using some CI/CD tools and platform such as Codeship/GCB/Buddy Works/Jenkins, Docker, Kubernetes, etc.
        2

        3
        Cloud Engineer
        Boer Technology

        Mar 2019 - Dec 2020, +Bogor

        Enterprise Cloud System Integrator and Tech Professional Solutions.

        Responsibilities:
        • Deploy and maintain Linux based OS such as Ubuntu Server and CentOS on customer site.
        • Deploy and maintain Openstack cluster on customer site.
        • Develop content and material for Devops training.
        • Collaborate with Ops team to plan and develop technology and architecture which will be implemented on customer site.
        • Collaborate with other teams on testing Open Source and Cloud Native related technology.
        \ No newline at end of file diff --git a/index.json b/index.json new file mode 100644 index 0000000..a4f7d3e --- /dev/null +++ b/index.json @@ -0,0 +1 @@ +[{"categories":null,"contents":" Rsync $ rsync -avzhe \u0026#39;ssh -p [port_number]\u0026#39; -P [user@remote_ip]:/path/to/file/source /path/to/file/destination Scan IP on Network $ nmap -sP [ip_address/prefix] Search Available Version of Spesific Package on Debian Based OS $ apt list -a \u0026lt;package_name\u0026gt; Install Spesific Kubernetes Version $ sudo apt update;sudo apt install -qy kubelet=1.15.5-00 kubectl=1.15.5-00 kubeadm=1.15.5-00 Open Spesific Port on Centos 7 iptables -I INPUT 5 -p tcp -m state --state NEW -m tcp --dport 9100 -j ACCEPT Replace String Using Sed sed -i \u0026#39;s/old-string/new-string/g\u0026#39; Find and copy files find /var/cache/dnf -iname \u0026#34;*.rpm\u0026#34; -exec cp {} packages/ \\; Encrypt secret envar value using Google KMS echo -n \u0026#34;This is my secret\u0026#34; | gcloud kms encrypt --plaintext-file=- --ciphertext-file=- --location=global --keyring=mykeyring --key=myappkey | base64 -w 0 Encrypt file using Google KMS gcloud kms encrypt \\ --key myappkey \\ --keyring mykeyring \\ --location global \\ --plaintext-file application.properties \\ --ciphertext-file application.properties.enc Check DNS record $ dig +noall +answer google.com google.com.\t204\tIN\tA\t74.125.24.102 google.com.\t204\tIN\tA\t74.125.24.138 google.com.\t204\tIN\tA\t74.125.24.139 google.com.\t204\tIN\tA\t74.125.24.101 google.com.\t204\tIN\tA\t74.125.24.100 google.com.\t204\tIN\tA\t74.125.24.113 Check service port $ getent services 53 domain 53/tcp Troubleshoot SELinux Issue on RHEL/CentOS # 1. Find your error from journalctl or audit.log then get the audit ID. # 2. Analyze grep 1624284378.419:2066 /var/log/audit/audit.log |audit2why Replace multiple file on OSX find /to/my/path -type f -name \u0026#34;*.yaml\u0026#34; -exec sed -i \u0026#39;\u0026#39; -e \u0026#39;s/halo.com/hai.id/g\u0026#39; {} \\; ","date":"January 1, 0001","hero":"/images/default-hero.jpg","permalink":"https://www.rahmatawe.com/notes/sysadmin/bash/","summary":"Rsync $ rsync -avzhe \u0026#39;ssh -p [port_number]\u0026#39; -P [user@remote_ip]:/path/to/file/source /path/to/file/destination Scan IP on Network $ nmap -sP [ip_address/prefix] Search Available Version of Spesific Package on Debian Based OS $ apt list -a \u0026lt;package_name\u0026gt; Install Spesific Kubernetes Version $ sudo apt update;sudo apt install -qy kubelet=1.15.5-00 kubectl=1.15.5-00 kubeadm=1.15.5-00 Open Spesific Port on Centos 7 iptables -I INPUT 5 -p tcp -m state --state NEW -m tcp --dport 9100 -j ACCEPT Replace String Using Sed sed -i \u0026#39;s/old-string/new-string/g\u0026#39; Find and copy files find /var/cache/dnf -iname \u0026#34;*.","tags":null,"title":"Bash Linux"},{"categories":null,"contents":" Generate Kubernetes secret and configmap YAML manifest # Secret kubectl create secret generic my-config --from-file=configuration/ -o yaml --dry-run # Configmap kubectl create configmap my-config --from-file=configuration/ -o yaml --dry-run Generate docker credential secret for Kubernetes kubectl create -n registry secret docker-registry registry-auth-dockerconfig-secret --docker-server=registry.rahmatawe.com --docker-username=[YOUR_USERNAME] --docker-password=[YOUR_REGISTRY_PASSWORD] --dry-run=client -oyaml Running short-lived container to compile source code $ sudo docker run --rm -it -v ${PWD}:/app -w /app openjdk:11-jdk-slim /bin/sh -c ./gradlew buildRun ","date":"January 1, 0001","hero":"/images/default-hero.jpg","permalink":"https://www.rahmatawe.com/notes/sysadmin/container/","summary":" Generate Kubernetes secret and configmap YAML manifest # Secret kubectl create secret generic my-config --from-file=configuration/ -o yaml --dry-run # Configmap kubectl create configmap my-config --from-file=configuration/ -o yaml --dry-run Generate docker credential secret for Kubernetes kubectl create -n registry secret docker-registry registry-auth-dockerconfig-secret --docker-server=registry.rahmatawe.com --docker-username=[YOUR_USERNAME] --docker-password=[YOUR_REGISTRY_PASSWORD] --dry-run=client -oyaml Running short-lived container to compile source code $ sudo docker run --rm -it -v ${PWD}:/app -w /app openjdk:11-jdk-slim /bin/sh -c ./gradlew buildRun ","tags":null,"title":"Container Linux"},{"categories":["devops"],"contents":"In this article I\u0026rsquo;ll explain my process of analyzing and setting up Prometheus, where I maybe effectively increase query performance and addressed challenges related to cardinality. FYI, I use this stack on my monitoring system: Grafana, Promethues, Thanos. The metrics itself gethered from several source: node exporter, kube-state-metrics, etc.\n1. List unused metrics Firs, we need to list metrcis that used in our Grafana. To do this task, we can use mimirtool.\n$ mimirtool analyze grafana --address=${GRAFANA_URL} --key=\u0026#34;${GRAFANA_API_TOKEN}\u0026#34; In my case, I execute this command:\n$ mimirtool analyze grafana --address=https://grafana.rahmatawe.com --key=\u0026#34;glsa_jLKvTx6RLkGXXXX6XKS6DXlrulepsy_xxxxx\u0026#34; Anw, you can get GRAFANA_API_TOKEN by creating service account on Grafana dashboard. Above command will generate file named metrics-in-grafana.json. Using this file, we will compare it to metrics stored in Prometheus.\n#port forward to prometheus $ kubectl port-forward prometheus-prometheus-0 9090:9090 -n monitoring # Compare grafana metrics and prometheus $ mimirtool analyze prometheus --grafana-metrics-file=\u0026#34;metrics-in-grafana.json\u0026#34; --address=http://localhost:9090 INFO[0002] 73815 active series are being used in dashboards INFO[0002] Found 2495 metric names INFO[0017] 434700 active series are NOT being used in dashboards INFO[0017] 467 in use active series metric count INFO[0017] 2028 not in use active series metric count NOTE: Adjust prometheus-prometheus-0 with your prometheus pod name and monitoring with namespace where your prometheus pod deployed.\nIt will generate file prometheus-metrics.json. Sort it.\n$ jq -r \u0026#34;.in_use_metric_counts[].metric\u0026#34; prometheus-metrics.json | sort \u0026gt; used_metrics.txt $ jq -r \u0026#34;.additional_metric_counts[].metric\u0026#34; prometheus-metrics.json | sort \u0026gt; unused_metrics.txt 2. Drop unused metrics On step 1, we have been list used metrics and unused metrics. Next step, we will check metrics which have high cardinality via Prometheus dashboard http://localhost:9090/tsdb-status. Hmm, let us check metrics apiserver_request_duration_seconds_bucket.\n$ grep apiserver_request_duration_seconds_bucket u*_metrics.txt unused_metrics.txt:apiserver_request_duration_seconds_bucket We can drop this metrics since it\u0026rsquo;s not used by Grafana. I will drop it via its ServiceMonitor. You can drop it other method (ex: prometheus config directly) depend on your setup.\n--- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: kube-apiserver namespace: monitoring labels: prometheus: main release: prometheus-operator ... metricRelabelings: - sourceLabels: [\u0026#34;__name__\u0026#34;] regex: \u0026#39;apiserver_request_duration_seconds_bucket\u0026#39; action: drop That\u0026rsquo;s it. Simple task to drop your bloated Prometheus metrics. Bye!\nRef:\nhttps://medium.com/@dotdc/prometheus-performance-and-cardinality-in-practice-74d5d9cd6230 https://www.robustperception.io/dropping-metrics-at-scrape-time-with-prometheus/ ","date":"December 1, 2022","hero":"/posts/tidy-up-prometheus/imgs/title.png","permalink":"https://www.rahmatawe.com/posts/tidy-up-prometheus/","summary":"In this article I\u0026rsquo;ll explain my process of analyzing and setting up Prometheus, where I maybe effectively increase query performance and addressed challenges related to cardinality. FYI, I use this stack on my monitoring system: Grafana, Promethues, Thanos. The metrics itself gethered from several source: node exporter, kube-state-metrics, etc.\n1. List unused metrics Firs, we need to list metrcis that used in our Grafana. To do this task, we can use mimirtool.","tags":["linux","monitoring"],"title":"Tidy up our Prometheus metrics!"},{"categories":["devops"],"contents":"It\u0026rsquo;s just PoC of collecting Windows logs using open source project such as Promtail, Loki and Grafana.\nEnvironment # Servers ag-rh2 : 10.54.54.6 (Grafana + Loki) win2k19 : 10.54.54.219 (Promtail) # OS Packages Release RHEL 8.4 Windows Server 2019 Loki 2.5 Grafana 8.4.6 Setup Loki 1. Download package Loki curl -O -L \u0026#34;https://github.com/grafana/loki/releases/download/v2.5.0/loki-linux-amd64.zip\u0026#34; 2. Setup loki binary # Unzip package unzip loki-linux-amd64.zip # Grant execute permission chmod +x loki-linux-amd64 # Create directory for loki installation sudo mkdir -p /opt/loki/{bin,conf,data} # Move loki binary mv loki-linux-amd64 /opt/loki/bin/loki 3. Setup loki configuration Default configuration can be retrieved from here. I create loki config on /opt/loki/config/loki-local-config.yaml using below content:\nauth_enabled: false server: http_listen_port: 3100 ingester: lifecycler: address: 127.0.0.1 ring: kvstore: store: inmemory replication_factor: 1 final_sleep: 0s chunk_idle_period: 1h # Any chunk not receiving new logs in this time will be flushed max_chunk_age: 1h # All chunks will be flushed when they hit this age, default is 1h chunk_target_size: 1048576 # Loki will attempt to build chunks up to 1.5MB, flushing first if chunk_idle_period or max_chunk_age is reached first chunk_retain_period: 30s # Must be greater than index read cache TTL if using an index cache (Default index read cache TTL is 5m) max_transfer_retries: 0 # Chunk transfers disabled wal: dir: /opt/loki/data/wal schema_config: configs: - from: 2020-10-24 store: boltdb-shipper object_store: filesystem schema: v11 index: prefix: index_ period: 24h storage_config: boltdb_shipper: active_index_directory: /opt/loki/data/boltdb-shipper-active cache_location: /opt/loki/data/boltdb-shipper-cache cache_ttl: 24h # Can be increased for faster performance over longer query periods, uses more disk space shared_store: filesystem filesystem: directory: /opt/loki/data/chunks compactor: working_directory: /opt/loki/data/boltdb-shipper-compactor shared_store: filesystem compaction_interval: 10m retention_enabled: true retention_delete_delay: 2h retention_delete_worker_count: 150 limits_config: reject_old_samples: true reject_old_samples_max_age: 168h chunk_store_config: max_look_back_period: 0s table_manager: retention_deletes_enabled: true retention_period: 30d ruler: storage: type: local local: directory: /opt/loki/data/rules rule_path: /opt/loki/data/rules-temp alertmanager_url: http://localhost:9093 ring: kvstore: store: inmemory enable_api: true analytics: reporting_enabled: false On above configuration, there is configuration for alertmanager but we will not include alertmanager installation in this post.\n4. Create system user for loki sudo useradd --system loki 5. Change permission on loki directory # Change ownership sudo chown -R loki:loki /opt/loki # Restore SELinux label sudo restorecon -vRF /opt/loki/ 6. Run loki service on systemd First, create systemd file for loki on /etc/systemd/system/loki.service. Paste below content.\n[Unit] Description=Loki service After=network.target [Service] Type=simple User=loki ExecStart=/opt/loki/bin/loki -config.file /opt/loki/conf/loki-local-config.yaml Restart=always [Install] WantedBy=multi-user.target Then, run loki service.\nsudo systemctl enable --now loki.service 7. Open port for loki service sudo firewall-cmd --add-port 3100/tcp --permanent sudo firewall-cmd --reload Setup Grafana 1. Download Grafana RPM package curl -O -L https://dl.grafana.com/oss/release/grafana-8.4.6-1.x86_64.rpm 2. Install package sudo yum localinstall grafana-8.4.6-1.x86_64.rpm 3. Start grafana service sudo systemctl enable --now grafana-server.service 4. Open port for grafana service sudo firewall-cmd --add-port 3000/tcp --permanent sudo firewall-cmd --reload 5. Add Loki datasource to Grafana. Open grafana URL on 10.54.54.6:3000 then add Loki as datasource. Setup Promtail 1. Download promtail binary To collect log from vent Viewer on Windows Server, we need to setup promtail. Binary file can be downloaded in here. Move the exctracted file to C:\\Program Files\\promtail, see below for detail. For new installation, it should be contain only the binary file promtail-windows-amd64.exe.\n2. Create promtail configuration Create promtail configuration file promtail-local-config.yaml with following content.\nserver: http_listen_port: 9080 grpc_listen_port: 0 clients: - url: http://10.54.54.6:3100/loki/api/v1/push scrape_configs: - job_name: windows-application windows_events: eventlog_name: \u0026#34;Application\u0026#34; xpath_query: \u0026#34;*[System[(Level=1 or Level=2 or Level=3)]]\u0026#34; # Critical, Error, Warning labels: logsource: windows-eventlog use_incoming_timestamp: true bookmark_path: \u0026#34;./bookmark-application.xml\u0026#34; exclude_event_data: true pipeline_stages: - json: expressions: level: levelText - labels: level: relabel_configs: - source_labels: [\u0026#39;computer\u0026#39;] target_label: \u0026#39;host\u0026#39; - job_name: windows-security windows_events: eventlog_name: \u0026#34;Security\u0026#34; xpath_query: \u0026#34;*[System[(Level=1 or Level=2 or Level=3)]]\u0026#34; labels: logsource: windows-eventlog use_incoming_timestamp: true bookmark_path: \u0026#34;./bookmark-security.xml\u0026#34; exclude_event_data: true exclude_user_data: true pipeline_stages: - json: expressions: level: levelText - labels: level: relabel_configs: - source_labels: [\u0026#39;computer\u0026#39;] target_label: \u0026#39;host\u0026#39; - job_name: windows-system windows_events: eventlog_name: \u0026#34;System\u0026#34; xpath_query: \u0026#34;*[System[(Level=1 or Level=2 or Level=3)]]\u0026#34; labels: logsource: windows-eventlog use_incoming_timestamp: true bookmark_path: \u0026#34;./bookmark-system.xml\u0026#34; exclude_event_data: true exclude_user_data: true pipeline_stages: - json: expressions: level: levelText - labels: level: relabel_configs: - source_labels: [\u0026#39;computer\u0026#39;] target_label: \u0026#39;host\u0026#39; 3. Test promtail Test the configuration by running promtail directly via Powershell. Use Ctrl+C to stop program.\n\u0026amp; \u0026#39;C:\\Program Files\\promtail\\promtail-windows-amd64.exe\u0026#39; --config.file=\u0026#39;C:\\Program Files\\promtail\\promtail-local-config.yaml\u0026#39; 4. Run promtail using windows service wrapper. There are some service wrapper on Windows, for example: sc.exe, nssm.exe and winsw. Windows has built in service wrapper: sc.exe, but when I use sc.exe to run promtail it always return error: StartService FAILED 1053. I\u0026rsquo;m not really familiar with Windows Server, so still figuring out why this error appear. So, I use nssm to wrap my promtail. You only need to download, unzip it and run below command.\n.\\nssm.exe install promtail Boom, GUI windows will appear. Set the setting like below. You can also bypass the GUI, with .\\nssm install \u0026lt;servicename\u0026gt; \u0026lt;application\u0026gt; [\u0026lt;options\u0026gt;].\nAfter service created, configure log file.\n.\\nssm.exe set promtail AppStderr \u0026#39;C:\\Program Files\\promtail\\promtail-error.log\u0026#39; .\\nssm.exe set promtail AppStdout \u0026#39;C:\\Program Files\\promtail\\promtail.log\u0026#39; Then, start the service.\n.\\nssm.exe start promtail 5. Open Grafana to check incoming logs References:\nGrafana Loki Storage Retention\nLog Scrapping made Easy with Grafana Loki in Windows\nPromtail Scraping (Service Discovery)\nStages\n","date":"April 15, 2022","hero":"/posts/send-event-viewer-log-to-grafana-loki/imgs/title.png","permalink":"https://www.rahmatawe.com/posts/send-event-viewer-log-to-grafana-loki/","summary":"It\u0026rsquo;s just PoC of collecting Windows logs using open source project such as Promtail, Loki and Grafana.\nEnvironment # Servers ag-rh2 : 10.54.54.6 (Grafana + Loki) win2k19 : 10.54.54.219 (Promtail) # OS Packages Release RHEL 8.4 Windows Server 2019 Loki 2.5 Grafana 8.4.6 Setup Loki 1. Download package Loki curl -O -L \u0026#34;https://github.com/grafana/loki/releases/download/v2.5.0/loki-linux-amd64.zip\u0026#34; 2. Setup loki binary # Unzip package unzip loki-linux-amd64.zip # Grant execute permission chmod +x loki-linux-amd64 # Create directory for loki installation sudo mkdir -p /opt/loki/{bin,conf,data} # Move loki binary mv loki-linux-amd64 /opt/loki/bin/loki 3.","tags":["linux","monitoring"],"title":"Send Log from Event Viewer on Windows Server 2019 to Grafana Loki"}] \ No newline at end of file diff --git a/index.xml b/index.xml index c85d764..1991b84 100644 --- a/index.xml +++ b/index.xml @@ -1,4 +1,3 @@ -<link>https://www.rahmatawe.com/</link><description>Recent content on</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sun, 26 Nov 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://www.rahmatawe.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Tidy up our Prometheus metrics!https://www.rahmatawe.com/blog/tidy-up-prometheus-metrics/Sun, 26 Nov 2023 00:00:00 +0000https://www.rahmatawe.com/blog/tidy-up-prometheus-metrics/In this article I&rsquo;ll explain my process of analyzing and setting up Prometheus, where I maybe effectively increase query performance and addressed challenges related to cardinality. FYI, I use this stack on my monitoring system: Grafana, Promethues, Thanos. The metrics itself gethered from several source: node exporter, kube-state-metrics, etc. -1. List unused metrics Firs, we need to list metrcis that used in our Grafana. To do this task, we can use mimirtool.Send Log from Event Viewer on Windows Server 2019 to Grafana Lokihttps://www.rahmatawe.com/blog/send-event-viewer-log-to-grafana-loki/Fri, 15 Apr 2022 00:00:00 +0000https://www.rahmatawe.com/blog/send-event-viewer-log-to-grafana-loki/Environment # Servers ag-rh2 : 10.54.54.6 (Grafana + Loki) win2k19 : 10.54.54.219 (Promtail) # OS Packages Release RHEL 8.4 Windows Server 2019 Loki 2.5 Grafana 8.4.6 Setup Loki 1. Download package Loki curl -O -L &#34;https://github.com/grafana/loki/releases/download/v2.5.0/loki-linux-amd64.zip&#34; 2. Setup loki binary # Unzip package unzip loki-linux-amd64.zip # Grant execute permission chmod +x loki-linux-amd64 # Create directory for loki installation sudo mkdir -p /opt/loki/{bin,conf,data} # Move loki binary mv loki-linux-amd64 /opt/loki/bin/loki 3. Setup loki configuration Default configuration can be retrieved from here.cheatsheethttps://www.rahmatawe.com/blog/cheatsheet/Mon, 01 Mar 2021 00:00:00 +0000https://www.rahmatawe.com/blog/cheatsheet/Running short-lived container to compile source code $ sudo docker run --rm -it -v ${PWD}:/app -w /app openjdk:11-jdk-slim /bin/sh -c ./gradlew buildRun Rsync over SSH on Spesific Port $ rsync -avzhe &#39;ssh -p [port_number]&#39; -P [user@remote_ip]:/path/to/file/source /path/to/file/destination Scan IP on Network $ nmap -sP [ip_address/prefix] Search Available Version of Spesific Package on Debian Based OS $ apt list -a &lt;package_name&gt; Install Spesific Kubernetes Version #example version 1.15.x# $ sudo apt update;sudo apt install -qy kubelet=1.Implementing LDAP Authentication for Kubernetes using Dex on Ubuntu 18.04https://www.rahmatawe.com/blog/ldap-kubernetes-integration/Fri, 06 Nov 2020 00:00:00 +0000https://www.rahmatawe.com/blog/ldap-kubernetes-integration/Environment # Servers ag-k8s-master0 : 10.54.54.10/24 (Kubernetes Master) ag-k8s-worker0 : 10.54.54.20/24 (Kubernetes Worker) ag-k8s-worker1 : 10.54.54.21/24 (Kubernetes Worker) ag-k8s-ldap : 10.54.54.30/24 (LDAP Server, DNS Server) # Packages Release Ubuntu 18.04 Kubernetes 1.19 OpenLDAP 2.4 Part 1: Pre-Flight 1. Setup DNS Server For simplicity, I used dnsmasq with minimal configuration. You can use your prefered DNS Server (ex: bind9). -1.1. Install DNSMASQ root@ag-k8s-ldap:~# apt -y install dnsmasq 1.2. Configure Dnsmasq. Uncomment line below.Deploying HCI Openstack using Kolla Ansiblehttps://www.rahmatawe.com/blog/deploying-openstack-hci/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/blog/deploying-openstack-hci/IP Information Hostname Storage Interface (enp1s0) Openstack Interface (enp7s0) server0 10.50.50.10 10.51.51.10 server1 10.50.50.11 10.51.51.11 server2 10.50.50.12 10.51.51.12 A. Deploy Ceph Cluster In this first stage, I will deploy Ceph Cluster using Ceph Ansible. Ceph Ansible has two different approach when deploy Ceph Cluster: 1) Systemd based and 2) Container based. In here, I will use container based deployment which is use Podman as container runtime. -1. Install required packages yum install git python3-pip vim -y pip3 install ansible 2.Deploying UPI OKD 4.5 Clusterhttps://www.rahmatawe.com/blog/deploying-upi-okd/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/blog/deploying-upi-okd/Environment IP Address Hostname OS Description 10.10.51.9 okd-bastion CentOS 8 DNS Server, DHCP Server, NTP Server, PXE Server, LDAP Server 10.10.51.10 okd-bootstrap Fedora COreOS Bootstrap Server. Temporary only, could be delete after bootstrapping done. 10.10.51.11 okd-master01 Fedora CoreOS Master 10.10.51.12 okd-master02 Fedora CoreOS Master 10.10.51.13 okd-master03 Fedora CoreOS Master 10.10.51.21 okd-worker01 Fedora CoreOS Worker 10.10.51.22 okd-worker02 Fedora CoreOS Worker 10.10.51.31 okd-lb1 CentOS 8 Load Balancer 10.10.51.32 okd-lb2 CentOS 8 Load Balancer Part 1: Bastion/Helper Server 1. \ No newline at end of file +RahmatAwehttps://www.rahmatawe.com/Recent content on RahmatAweHugo -- gohugo.ioenThu, 01 Dec 2022 08:06:25 +0600Tidy up our Prometheus metrics!https://www.rahmatawe.com/posts/tidy-up-prometheus/Thu, 01 Dec 2022 08:06:25 +0600https://www.rahmatawe.com/posts/tidy-up-prometheus/In this article I&rsquo;ll explain my process of analyzing and setting up Prometheus, where I maybe effectively increase query performance and addressed challenges related to cardinality. FYI, I use this stack on my monitoring system: Grafana, Promethues, Thanos. The metrics itself gethered from several source: node exporter, kube-state-metrics, etc. +1. List unused metrics Firs, we need to list metrcis that used in our Grafana. To do this task, we can use mimirtool.Send Log from Event Viewer on Windows Server 2019 to Grafana Lokihttps://www.rahmatawe.com/posts/send-event-viewer-log-to-grafana-loki/Fri, 15 Apr 2022 08:06:25 +0600https://www.rahmatawe.com/posts/send-event-viewer-log-to-grafana-loki/It&rsquo;s just PoC of collecting Windows logs using open source project such as Promtail, Loki and Grafana. +Environment # Servers ag-rh2 : 10.54.54.6 (Grafana + Loki) win2k19 : 10.54.54.219 (Promtail) # OS Packages Release RHEL 8.4 Windows Server 2019 Loki 2.5 Grafana 8.4.6 Setup Loki 1. Download package Loki curl -O -L &#34;https://github.com/grafana/loki/releases/download/v2.5.0/loki-linux-amd64.zip&#34; 2. Setup loki binary # Unzip package unzip loki-linux-amd64.zip # Grant execute permission chmod +x loki-linux-amd64 # Create directory for loki installation sudo mkdir -p /opt/loki/{bin,conf,data} # Move loki binary mv loki-linux-amd64 /opt/loki/bin/loki 3.Bash Linuxhttps://www.rahmatawe.com/notes/sysadmin/bash/Mon, 01 Jan 0001 00:00:00 +0000https://www.rahmatawe.com/notes/sysadmin/bash/Rsync $ rsync -avzhe &#39;ssh -p [port_number]&#39; -P [user@remote_ip]:/path/to/file/source /path/to/file/destination Scan IP on Network $ nmap -sP [ip_address/prefix] Search Available Version of Spesific Package on Debian Based OS $ apt list -a &lt;package_name&gt; Install Spesific Kubernetes Version $ sudo apt update;sudo apt install -qy kubelet=1.15.5-00 kubectl=1.15.5-00 kubeadm=1.15.5-00 Open Spesific Port on Centos 7 iptables -I INPUT 5 -p tcp -m state --state NEW -m tcp --dport 9100 -j ACCEPT Replace String Using Sed sed -i &#39;s/old-string/new-string/g&#39; Find and copy files find /var/cache/dnf -iname &#34;*.Container Linuxhttps://www.rahmatawe.com/notes/sysadmin/container/Mon, 01 Jan 0001 00:00:00 +0000https://www.rahmatawe.com/notes/sysadmin/container/ Generate Kubernetes secret and configmap YAML manifest # Secret kubectl create secret generic my-config --from-file=configuration/ -o yaml --dry-run # Configmap kubectl create configmap my-config --from-file=configuration/ -o yaml --dry-run Generate docker credential secret for Kubernetes kubectl create -n registry secret docker-registry registry-auth-dockerconfig-secret --docker-server=registry.rahmatawe.com --docker-username=[YOUR_USERNAME] --docker-password=[YOUR_REGISTRY_PASSWORD] --dry-run=client -oyaml Running short-lived container to compile source code $ sudo docker run --rm -it -v ${PWD}:/app -w /app openjdk:11-jdk-slim /bin/sh -c ./gradlew buildRun \ No newline at end of file diff --git a/js/accordion.js b/js/accordion.js deleted file mode 100644 index c27256f..0000000 --- a/js/accordion.js +++ /dev/null @@ -1,28 +0,0 @@ -const allPanels = Array.from(document.querySelectorAll(".panel")); -const allAccordion = Array.from(document.querySelectorAll(".accordion")); -const expandAccordion = elem => { - if (!elem.parentElement.classList.contains("active")) { - allAccordion.forEach(acc => { - acc.classList.remove("active"); - }); - elem.parentElement.classList.add("active"); - allPanels.forEach(function(elem) { - elem.style.maxHeight = null; - }); - let activePanel = elem.parentElement.nextElementSibling; - if ( - activePanel.id != "skill-panel" && - document.querySelector("#skill-panel") - ) { - let skillBars = Array.from(document.querySelectorAll("#skill-percent")); - skillBars.forEach(elem => { - elem.style.width = "0"; - }); - } //else { - //console.log("Skill Section Disabled"); - //} - activePanel.style.maxHeight = activePanel.scrollHeight + "px"; - } // else { - // console.log("Already Expanded"); - //} -}; diff --git a/mstile-150x150.png b/mstile-150x150.png deleted file mode 100644 index ca1474b..0000000 Binary files a/mstile-150x150.png and /dev/null differ diff --git a/notes/index.html b/notes/index.html new file mode 100644 index 0000000..83a718a --- /dev/null +++ b/notes/index.html @@ -0,0 +1,52 @@ +Notes +
        Rsync
        $ rsync -avzhe 'ssh -p [port_number]' -P [user@remote_ip]:/path/to/file/source /path/to/file/destination
        +
        Scan IP on Network
        $ nmap -sP [ip_address/prefix]
        +
        Search Available Version of Spesific Package on Debian Based OS
        $ apt list -a <package_name>
        +
        Install Spesific Kubernetes Version
        $ sudo apt update;sudo apt install -qy kubelet=1.15.5-00 kubectl=1.15.5-00 kubeadm=1.15.5-00
        +
        Open Spesific Port on Centos 7
        iptables -I INPUT 5 -p tcp -m state --state NEW -m tcp --dport 9100 -j ACCEPT
        +
        Replace String Using Sed
        sed -i 's/old-string/new-string/g'
        +
        Find and copy files
        find /var/cache/dnf -iname "*.rpm" -exec cp {} packages/ \;
        +
        Encrypt secret envar value using Google KMS
        echo -n "This is my secret" | gcloud kms encrypt --plaintext-file=- --ciphertext-file=- --location=global --keyring=mykeyring --key=myappkey | base64 -w 0
        +
        Encrypt file using Google KMS
        gcloud kms encrypt \
        +    --key myappkey \
        +    --keyring mykeyring \
        +    --location global  \
        +    --plaintext-file application.properties \
        +    --ciphertext-file application.properties.enc
        +
        Check DNS record
        $ dig +noall +answer google.com
        +
        +google.com.		204	IN	A	74.125.24.102
        +google.com.		204	IN	A	74.125.24.138
        +google.com.		204	IN	A	74.125.24.139
        +google.com.		204	IN	A	74.125.24.101
        +google.com.		204	IN	A	74.125.24.100
        +google.com.		204	IN	A	74.125.24.113
        +
        Check service port
        $ getent services 53
        +
        +domain                53/tcp
        +
        Troubleshoot SELinux Issue on RHEL/CentOS
        # 1. Find your error from journalctl or audit.log then get the audit ID.
        +
        +# 2. Analyze
        +grep 1624284378.419:2066 /var/log/audit/audit.log |audit2why
        +
        Replace multiple file on OSX
        find /to/my/path -type f -name "*.yaml" -exec sed -i '' -e 's/halo.com/hai.id/g' {} \;
        +
        Generate Kubernetes secret and configmap YAML manifest
        # Secret
        +kubectl create secret generic my-config --from-file=configuration/ -o yaml --dry-run
        +
        +# Configmap
        +kubectl create configmap my-config --from-file=configuration/ -o yaml --dry-run
        +
        Generate docker credential secret for Kubernetes
        kubectl create -n registry secret docker-registry registry-auth-dockerconfig-secret --docker-server=registry.rahmatawe.com --docker-username=[YOUR_USERNAME] --docker-password=[YOUR_REGISTRY_PASSWORD] --dry-run=client -oyaml
        +
        Running short-lived container to compile source code
        $ sudo docker run --rm -it -v ${PWD}:/app -w /app openjdk:11-jdk-slim /bin/sh -c ./gradlew buildRun
        +
        \ No newline at end of file diff --git a/notes/index.xml b/notes/index.xml new file mode 100644 index 0000000..84e71d7 --- /dev/null +++ b/notes/index.xml @@ -0,0 +1 @@ +Notes on RahmatAwehttps://www.rahmatawe.com/notes/Recent content in Notes on RahmatAweHugo -- gohugo.ioenTue, 08 Jun 2010 08:06:25 +0600Bash Linuxhttps://www.rahmatawe.com/notes/sysadmin/bash/Mon, 01 Jan 0001 00:00:00 +0000https://www.rahmatawe.com/notes/sysadmin/bash/Rsync $ rsync -avzhe &#39;ssh -p [port_number]&#39; -P [user@remote_ip]:/path/to/file/source /path/to/file/destination Scan IP on Network $ nmap -sP [ip_address/prefix] Search Available Version of Spesific Package on Debian Based OS $ apt list -a &lt;package_name&gt; Install Spesific Kubernetes Version $ sudo apt update;sudo apt install -qy kubelet=1.15.5-00 kubectl=1.15.5-00 kubeadm=1.15.5-00 Open Spesific Port on Centos 7 iptables -I INPUT 5 -p tcp -m state --state NEW -m tcp --dport 9100 -j ACCEPT Replace String Using Sed sed -i &#39;s/old-string/new-string/g&#39; Find and copy files find /var/cache/dnf -iname &#34;*.Container Linuxhttps://www.rahmatawe.com/notes/sysadmin/container/Mon, 01 Jan 0001 00:00:00 +0000https://www.rahmatawe.com/notes/sysadmin/container/ Generate Kubernetes secret and configmap YAML manifest # Secret kubectl create secret generic my-config --from-file=configuration/ -o yaml --dry-run # Configmap kubectl create configmap my-config --from-file=configuration/ -o yaml --dry-run Generate docker credential secret for Kubernetes kubectl create -n registry secret docker-registry registry-auth-dockerconfig-secret --docker-server=registry.rahmatawe.com --docker-username=[YOUR_USERNAME] --docker-password=[YOUR_REGISTRY_PASSWORD] --dry-run=client -oyaml Running short-lived container to compile source code $ sudo docker run --rm -it -v ${PWD}:/app -w /app openjdk:11-jdk-slim /bin/sh -c ./gradlew buildRun \ No newline at end of file diff --git a/notes/page/1/index.html b/notes/page/1/index.html new file mode 100644 index 0000000..6bc3a72 --- /dev/null +++ b/notes/page/1/index.html @@ -0,0 +1,2 @@ +https://www.rahmatawe.com/notes/ + \ No newline at end of file diff --git a/notes/page/2/index.html b/notes/page/2/index.html new file mode 100644 index 0000000..0ca501b --- /dev/null +++ b/notes/page/2/index.html @@ -0,0 +1,15 @@ +Notes + \ No newline at end of file diff --git a/notes/sysadmin/bash/index.html b/notes/sysadmin/bash/index.html new file mode 100644 index 0000000..332b7a3 --- /dev/null +++ b/notes/sysadmin/bash/index.html @@ -0,0 +1,41 @@ +Bash Linux +
        Rsync
        $ rsync -avzhe 'ssh -p [port_number]' -P [user@remote_ip]:/path/to/file/source /path/to/file/destination
        +
        Scan IP on Network
        $ nmap -sP [ip_address/prefix]
        +
        Search Available Version of Spesific Package on Debian Based OS
        $ apt list -a <package_name>
        +
        Install Spesific Kubernetes Version
        $ sudo apt update;sudo apt install -qy kubelet=1.15.5-00 kubectl=1.15.5-00 kubeadm=1.15.5-00
        +
        Open Spesific Port on Centos 7
        iptables -I INPUT 5 -p tcp -m state --state NEW -m tcp --dport 9100 -j ACCEPT
        +
        Replace String Using Sed
        sed -i 's/old-string/new-string/g'
        +
        Find and copy files
        find /var/cache/dnf -iname "*.rpm" -exec cp {} packages/ \;
        +
        Encrypt secret envar value using Google KMS
        echo -n "This is my secret" | gcloud kms encrypt --plaintext-file=- --ciphertext-file=- --location=global --keyring=mykeyring --key=myappkey | base64 -w 0
        +
        Encrypt file using Google KMS
        gcloud kms encrypt \
        +    --key myappkey \
        +    --keyring mykeyring \
        +    --location global  \
        +    --plaintext-file application.properties \
        +    --ciphertext-file application.properties.enc
        +
        Check DNS record
        $ dig +noall +answer google.com
        +
        +google.com.		204	IN	A	74.125.24.102
        +google.com.		204	IN	A	74.125.24.138
        +google.com.		204	IN	A	74.125.24.139
        +google.com.		204	IN	A	74.125.24.101
        +google.com.		204	IN	A	74.125.24.100
        +google.com.		204	IN	A	74.125.24.113
        +
        Check service port
        $ getent services 53
        +
        +domain                53/tcp
        +
        Troubleshoot SELinux Issue on RHEL/CentOS
        # 1. Find your error from journalctl or audit.log then get the audit ID.
        +
        +# 2. Analyze
        +grep 1624284378.419:2066 /var/log/audit/audit.log |audit2why
        +
        Replace multiple file on OSX
        find /to/my/path -type f -name "*.yaml" -exec sed -i '' -e 's/halo.com/hai.id/g' {} \;
        +
        \ No newline at end of file diff --git a/notes/sysadmin/container/index.html b/notes/sysadmin/container/index.html new file mode 100644 index 0000000..18a78e0 --- /dev/null +++ b/notes/sysadmin/container/index.html @@ -0,0 +1,18 @@ +Container Linux +
        Generate Kubernetes secret and configmap YAML manifest
        # Secret
        +kubectl create secret generic my-config --from-file=configuration/ -o yaml --dry-run
        +
        +# Configmap
        +kubectl create configmap my-config --from-file=configuration/ -o yaml --dry-run
        +
        Generate docker credential secret for Kubernetes
        kubectl create -n registry secret docker-registry registry-auth-dockerconfig-secret --docker-server=registry.rahmatawe.com --docker-username=[YOUR_USERNAME] --docker-password=[YOUR_REGISTRY_PASSWORD] --dry-run=client -oyaml
        +
        Running short-lived container to compile source code
        $ sudo docker run --rm -it -v ${PWD}:/app -w /app openjdk:11-jdk-slim /bin/sh -c ./gradlew buildRun
        +
        \ No newline at end of file diff --git a/notes/sysadmin/index.html b/notes/sysadmin/index.html new file mode 100644 index 0000000..dc4096b --- /dev/null +++ b/notes/sysadmin/index.html @@ -0,0 +1,52 @@ +Bash Notes +
        Rsync
        $ rsync -avzhe 'ssh -p [port_number]' -P [user@remote_ip]:/path/to/file/source /path/to/file/destination
        +
        Scan IP on Network
        $ nmap -sP [ip_address/prefix]
        +
        Search Available Version of Spesific Package on Debian Based OS
        $ apt list -a <package_name>
        +
        Install Spesific Kubernetes Version
        $ sudo apt update;sudo apt install -qy kubelet=1.15.5-00 kubectl=1.15.5-00 kubeadm=1.15.5-00
        +
        Open Spesific Port on Centos 7
        iptables -I INPUT 5 -p tcp -m state --state NEW -m tcp --dport 9100 -j ACCEPT
        +
        Replace String Using Sed
        sed -i 's/old-string/new-string/g'
        +
        Find and copy files
        find /var/cache/dnf -iname "*.rpm" -exec cp {} packages/ \;
        +
        Encrypt secret envar value using Google KMS
        echo -n "This is my secret" | gcloud kms encrypt --plaintext-file=- --ciphertext-file=- --location=global --keyring=mykeyring --key=myappkey | base64 -w 0
        +
        Encrypt file using Google KMS
        gcloud kms encrypt \
        +    --key myappkey \
        +    --keyring mykeyring \
        +    --location global  \
        +    --plaintext-file application.properties \
        +    --ciphertext-file application.properties.enc
        +
        Check DNS record
        $ dig +noall +answer google.com
        +
        +google.com.		204	IN	A	74.125.24.102
        +google.com.		204	IN	A	74.125.24.138
        +google.com.		204	IN	A	74.125.24.139
        +google.com.		204	IN	A	74.125.24.101
        +google.com.		204	IN	A	74.125.24.100
        +google.com.		204	IN	A	74.125.24.113
        +
        Check service port
        $ getent services 53
        +
        +domain                53/tcp
        +
        Troubleshoot SELinux Issue on RHEL/CentOS
        # 1. Find your error from journalctl or audit.log then get the audit ID.
        +
        +# 2. Analyze
        +grep 1624284378.419:2066 /var/log/audit/audit.log |audit2why
        +
        Replace multiple file on OSX
        find /to/my/path -type f -name "*.yaml" -exec sed -i '' -e 's/halo.com/hai.id/g' {} \;
        +
        Generate Kubernetes secret and configmap YAML manifest
        # Secret
        +kubectl create secret generic my-config --from-file=configuration/ -o yaml --dry-run
        +
        +# Configmap
        +kubectl create configmap my-config --from-file=configuration/ -o yaml --dry-run
        +
        Generate docker credential secret for Kubernetes
        kubectl create -n registry secret docker-registry registry-auth-dockerconfig-secret --docker-server=registry.rahmatawe.com --docker-username=[YOUR_USERNAME] --docker-password=[YOUR_REGISTRY_PASSWORD] --dry-run=client -oyaml
        +
        Running short-lived container to compile source code
        $ sudo docker run --rm -it -v ${PWD}:/app -w /app openjdk:11-jdk-slim /bin/sh -c ./gradlew buildRun
        +
        \ No newline at end of file diff --git a/notes/sysadmin/index.xml b/notes/sysadmin/index.xml new file mode 100644 index 0000000..1654b3f --- /dev/null +++ b/notes/sysadmin/index.xml @@ -0,0 +1 @@ +Bash Notes on RahmatAwehttps://www.rahmatawe.com/notes/sysadmin/Recent content in Bash Notes on RahmatAweHugo -- gohugo.ioenBash Linuxhttps://www.rahmatawe.com/notes/sysadmin/bash/Mon, 01 Jan 0001 00:00:00 +0000https://www.rahmatawe.com/notes/sysadmin/bash/Rsync $ rsync -avzhe &#39;ssh -p [port_number]&#39; -P [user@remote_ip]:/path/to/file/source /path/to/file/destination Scan IP on Network $ nmap -sP [ip_address/prefix] Search Available Version of Spesific Package on Debian Based OS $ apt list -a &lt;package_name&gt; Install Spesific Kubernetes Version $ sudo apt update;sudo apt install -qy kubelet=1.15.5-00 kubectl=1.15.5-00 kubeadm=1.15.5-00 Open Spesific Port on Centos 7 iptables -I INPUT 5 -p tcp -m state --state NEW -m tcp --dport 9100 -j ACCEPT Replace String Using Sed sed -i &#39;s/old-string/new-string/g&#39; Find and copy files find /var/cache/dnf -iname &#34;*.Container Linuxhttps://www.rahmatawe.com/notes/sysadmin/container/Mon, 01 Jan 0001 00:00:00 +0000https://www.rahmatawe.com/notes/sysadmin/container/ Generate Kubernetes secret and configmap YAML manifest # Secret kubectl create secret generic my-config --from-file=configuration/ -o yaml --dry-run # Configmap kubectl create configmap my-config --from-file=configuration/ -o yaml --dry-run Generate docker credential secret for Kubernetes kubectl create -n registry secret docker-registry registry-auth-dockerconfig-secret --docker-server=registry.rahmatawe.com --docker-username=[YOUR_USERNAME] --docker-password=[YOUR_REGISTRY_PASSWORD] --dry-run=client -oyaml Running short-lived container to compile source code $ sudo docker run --rm -it -v ${PWD}:/app -w /app openjdk:11-jdk-slim /bin/sh -c ./gradlew buildRun \ No newline at end of file diff --git a/notes/sysadmin/page/1/index.html b/notes/sysadmin/page/1/index.html new file mode 100644 index 0000000..62b30ab --- /dev/null +++ b/notes/sysadmin/page/1/index.html @@ -0,0 +1,2 @@ +https://www.rahmatawe.com/notes/sysadmin/ + \ No newline at end of file diff --git a/posts/index.html b/posts/index.html new file mode 100644 index 0000000..c58c7c5 --- /dev/null +++ b/posts/index.html @@ -0,0 +1,19 @@ +Posts +
        \ No newline at end of file diff --git a/posts/index.xml b/posts/index.xml new file mode 100644 index 0000000..c9da7bb --- /dev/null +++ b/posts/index.xml @@ -0,0 +1,3 @@ +Posts on RahmatAwehttps://www.rahmatawe.com/posts/Recent content in Posts on RahmatAweHugo -- gohugo.ioenThu, 01 Dec 2022 08:06:25 +0600Tidy up our Prometheus metrics!https://www.rahmatawe.com/posts/tidy-up-prometheus/Thu, 01 Dec 2022 08:06:25 +0600https://www.rahmatawe.com/posts/tidy-up-prometheus/In this article I&rsquo;ll explain my process of analyzing and setting up Prometheus, where I maybe effectively increase query performance and addressed challenges related to cardinality. FYI, I use this stack on my monitoring system: Grafana, Promethues, Thanos. The metrics itself gethered from several source: node exporter, kube-state-metrics, etc. +1. List unused metrics Firs, we need to list metrcis that used in our Grafana. To do this task, we can use mimirtool.Send Log from Event Viewer on Windows Server 2019 to Grafana Lokihttps://www.rahmatawe.com/posts/send-event-viewer-log-to-grafana-loki/Fri, 15 Apr 2022 08:06:25 +0600https://www.rahmatawe.com/posts/send-event-viewer-log-to-grafana-loki/It&rsquo;s just PoC of collecting Windows logs using open source project such as Promtail, Loki and Grafana. +Environment # Servers ag-rh2 : 10.54.54.6 (Grafana + Loki) win2k19 : 10.54.54.219 (Promtail) # OS Packages Release RHEL 8.4 Windows Server 2019 Loki 2.5 Grafana 8.4.6 Setup Loki 1. Download package Loki curl -O -L &#34;https://github.com/grafana/loki/releases/download/v2.5.0/loki-linux-amd64.zip&#34; 2. Setup loki binary # Unzip package unzip loki-linux-amd64.zip # Grant execute permission chmod +x loki-linux-amd64 # Create directory for loki installation sudo mkdir -p /opt/loki/{bin,conf,data} # Move loki binary mv loki-linux-amd64 /opt/loki/bin/loki 3. \ No newline at end of file diff --git a/posts/page/1/index.html b/posts/page/1/index.html new file mode 100644 index 0000000..025610e --- /dev/null +++ b/posts/page/1/index.html @@ -0,0 +1,2 @@ +https://www.rahmatawe.com/posts/ + \ No newline at end of file diff --git a/blog/send-event-viewer-log-to-grafana-loki/imgs/loki-diagram.png b/posts/send-event-viewer-log-to-grafana-loki/imgs/infra-diagram.png similarity index 100% rename from blog/send-event-viewer-log-to-grafana-loki/imgs/loki-diagram.png rename to posts/send-event-viewer-log-to-grafana-loki/imgs/infra-diagram.png diff --git a/blog/send-event-viewer-log-to-grafana-loki/imgs/loki-ds.png b/posts/send-event-viewer-log-to-grafana-loki/imgs/loki-ds.png similarity index 100% rename from blog/send-event-viewer-log-to-grafana-loki/imgs/loki-ds.png rename to posts/send-event-viewer-log-to-grafana-loki/imgs/loki-ds.png diff --git a/blog/send-event-viewer-log-to-grafana-loki/imgs/loki-query.png b/posts/send-event-viewer-log-to-grafana-loki/imgs/loki-query.png similarity index 100% rename from blog/send-event-viewer-log-to-grafana-loki/imgs/loki-query.png rename to posts/send-event-viewer-log-to-grafana-loki/imgs/loki-query.png diff --git a/blog/send-event-viewer-log-to-grafana-loki/imgs/nssm-config.png b/posts/send-event-viewer-log-to-grafana-loki/imgs/nssm-config.png similarity index 100% rename from blog/send-event-viewer-log-to-grafana-loki/imgs/nssm-config.png rename to posts/send-event-viewer-log-to-grafana-loki/imgs/nssm-config.png diff --git a/blog/send-event-viewer-log-to-grafana-loki/imgs/promtail-dir.png b/posts/send-event-viewer-log-to-grafana-loki/imgs/promtail-dir.png similarity index 100% rename from blog/send-event-viewer-log-to-grafana-loki/imgs/promtail-dir.png rename to posts/send-event-viewer-log-to-grafana-loki/imgs/promtail-dir.png diff --git a/posts/send-event-viewer-log-to-grafana-loki/imgs/title.png b/posts/send-event-viewer-log-to-grafana-loki/imgs/title.png new file mode 100644 index 0000000..126c101 Binary files /dev/null and b/posts/send-event-viewer-log-to-grafana-loki/imgs/title.png differ diff --git a/blog/send-event-viewer-log-to-grafana-loki/index.html b/posts/send-event-viewer-log-to-grafana-loki/index.html similarity index 65% rename from blog/send-event-viewer-log-to-grafana-loki/index.html rename to posts/send-event-viewer-log-to-grafana-loki/index.html index 46cd450..51c7967 100644 --- a/blog/send-event-viewer-log-to-grafana-loki/index.html +++ b/posts/send-event-viewer-log-to-grafana-loki/index.html @@ -1,7 +1,14 @@ -RahmatAwe -

        Send Log from Event Viewer on Windows Server 2019 to Grafana Loki

        April 15, 2022

        Environment

        Loki Diagram

        # Servers
        +Send Log from Event Viewer on Windows Server 2019 to Grafana Loki
        +
        Author Image
        Rahmat Agung Wibowo

        Friday, April 15, 2022 | 4 minutes

        Send Log from Event Viewer on Windows Server 2019 to Grafana Loki

        It’s just PoC of collecting Windows logs using open source project such as Promtail, Loki and Grafana.

        Environment

        # Servers
         ag-rh2 : 10.54.54.6 (Grafana + Loki)
         win2k19 : 10.54.54.219 (Promtail)
         
        @@ -10,8 +17,8 @@
         Windows Server 2019
         Loki 2.5
         Grafana 8.4.6
        -

        Setup Loki

        1. Download package Loki

        curl -O -L "https://github.com/grafana/loki/releases/download/v2.5.0/loki-linux-amd64.zip"
        -

        2. Setup loki binary

        # Unzip package
        +

        Setup Loki

        1. Download package Loki

        curl -O -L "https://github.com/grafana/loki/releases/download/v2.5.0/loki-linux-amd64.zip"
        +

        2. Setup loki binary

        # Unzip package
         unzip loki-linux-amd64.zip
         
         # Grant execute permission
        @@ -22,7 +29,7 @@
         
         # Move loki binary
         mv loki-linux-amd64 /opt/loki/bin/loki
        -

        3. Setup loki configuration

        Default configuration can be retrieved from here. I create loki config on /opt/loki/config/loki-local-config.yaml using below content:

        auth_enabled: false
        +

        3. Setup loki configuration

        Default configuration can be retrieved from here. I create loki config on /opt/loki/config/loki-local-config.yaml using below content:

        auth_enabled: false
          
         server:
           http_listen_port: 3100
        @@ -96,13 +103,13 @@
         
         analytics:
           reporting_enabled: false
        -

        On above configuration, there is configuration for alertmanager but we will not include alertmanager installation in this post.

        4. Create system user for loki

        sudo useradd --system loki
        -

        5. Change permission on loki directory

        # Change ownership
        +

        On above configuration, there is configuration for alertmanager but we will not include alertmanager installation in this post.

        4. Create system user for loki

        sudo useradd --system loki
        +

        5. Change permission on loki directory

        # Change ownership
         sudo chown -R loki:loki /opt/loki
         
         # Restore SELinux label
         sudo restorecon -vRF /opt/loki/
        -

        6. Run loki service on systemd

        First, create systemd file for loki on /etc/systemd/system/loki.service. Paste below content.

        [Unit]
        +

        6. Run loki service on systemd

        First, create systemd file for loki on /etc/systemd/system/loki.service. Paste below content.

        [Unit]
         Description=Loki service
         After=network.target
         
        @@ -115,17 +122,17 @@
         [Install]
         WantedBy=multi-user.target
         

        Then, run loki service.

        sudo systemctl enable --now loki.service
        -

        7. Open port for loki service

        sudo firewall-cmd --add-port 3100/tcp --permanent
        +

        7. Open port for loki service

        sudo firewall-cmd --add-port 3100/tcp --permanent
         sudo firewall-cmd --reload
        -

        Setup Grafana

        1. Download Grafana RPM package

        curl -O -L https://dl.grafana.com/oss/release/grafana-8.4.6-1.x86_64.rpm
        -

        2. Install package

        sudo yum localinstall grafana-8.4.6-1.x86_64.rpm
        -

        3. Start grafana service

        sudo systemctl enable --now grafana-server.service
        -

        4. Open port for grafana service

        sudo firewall-cmd --add-port 3000/tcp --permanent
        +

        Setup Grafana

        1. Download Grafana RPM package

        curl -O -L https://dl.grafana.com/oss/release/grafana-8.4.6-1.x86_64.rpm
        +

        2. Install package

        sudo yum localinstall grafana-8.4.6-1.x86_64.rpm
        +

        3. Start grafana service

        sudo systemctl enable --now grafana-server.service
        +

        4. Open port for grafana service

        sudo firewall-cmd --add-port 3000/tcp --permanent
         sudo firewall-cmd --reload
        -

        5. Add Loki datasource to Grafana.

        Open grafana URL on 10.54.54.6:3000 then add Loki as datasource. -lok datasource

        Setup Promtail

        1. Download promtail binary

        To collect log from vent Viewer on Windows Server, we need to setup promtail. Binary file can be downloaded in here. Move the exctracted file to C:\Program Files\promtail, see below for detail. +

        5. Add Loki datasource to Grafana.

        Open grafana URL on 10.54.54.6:3000 then add Loki as datasource. +lok datasource

        Setup Promtail

        1. Download promtail binary

        To collect log from vent Viewer on Windows Server, we need to setup promtail. Binary file can be downloaded in here. Move the exctracted file to C:\Program Files\promtail, see below for detail. Promtail Directory -For new installation, it should be contain only the binary file promtail-windows-amd64.exe.

        2. Create promtail configuration

        Create promtail configuration file promtail-local-config.yaml with following content.

        server:
        +For new installation, it should be contain only the binary file promtail-windows-amd64.exe.

        2. Create promtail configuration

        Create promtail configuration file promtail-local-config.yaml with following content.

        server:
           http_listen_port: 9080
           grpc_listen_port: 0
         
        @@ -189,13 +196,15 @@
             relabel_configs:
               - source_labels: ['computer']
                 target_label: 'host'
        -

        3. Test promtail

        Test the configuration by running promtail directly via Powershell. Use Ctrl+C to stop program.

        & 'C:\Program Files\promtail\promtail-windows-amd64.exe' --config.file='C:\Program Files\promtail\promtail-local-config.yaml'
        -

        4. Run promtail using windows service wrapper.

        There are some service wrapper on Windows, for example: sc.exe, nssm.exe and winsw. Windows has built in service wrapper: sc.exe, but when I use sc.exe to run promtail it always return error: StartService FAILED 1053. I’m not really familiar with Windows Server, so still figuring out why this error appear. So, I use nssm to wrap my promtail. You only need to download, unzip it and run below command.

        .\nssm.exe install promtail
        +

        3. Test promtail

        Test the configuration by running promtail directly via Powershell. Use Ctrl+C to stop program.

        & 'C:\Program Files\promtail\promtail-windows-amd64.exe' --config.file='C:\Program Files\promtail\promtail-local-config.yaml'
        +

        4. Run promtail using windows service wrapper.

        There are some service wrapper on Windows, for example: sc.exe, nssm.exe and winsw. Windows has built in service wrapper: sc.exe, but when I use sc.exe to run promtail it always return error: StartService FAILED 1053. I’m not really familiar with Windows Server, so still figuring out why this error appear. So, I use nssm to wrap my promtail. You only need to download, unzip it and run below command.

        .\nssm.exe install promtail
         

        Boom, GUI windows will appear. Set the setting like below. nssm GUI You can also bypass the GUI, with .\nssm install <servicename> <application> [<options>].

        After service created, configure log file.

        .\nssm.exe set promtail AppStderr 'C:\Program Files\promtail\promtail-error.log'
         .\nssm.exe set promtail AppStdout 'C:\Program Files\promtail\promtail.log'
         

        Then, start the service.

        .\nssm.exe start promtail
        -

        5. Open Grafana to check incoming logs

        grafana loki logs

        References:

        Grafana Loki Storage Retention

        Log Scrapping made Easy with Grafana Loki in Windows

        Promtail Scraping (Service Discovery)

        Stages

        \ No newline at end of file +

        5. Open Grafana to check incoming logs

        grafana loki logs

        References:

        Grafana Loki Storage Retention

        Log Scrapping made Easy with Grafana Loki in Windows

        Promtail Scraping (Service Discovery)

        Stages



        \ No newline at end of file diff --git a/posts/tidy-up-prometheus/imgs/grafana-service-account.png b/posts/tidy-up-prometheus/imgs/grafana-service-account.png new file mode 100644 index 0000000..45c5ea8 Binary files /dev/null and b/posts/tidy-up-prometheus/imgs/grafana-service-account.png differ diff --git a/posts/tidy-up-prometheus/imgs/prometheus-high-cardinality.png b/posts/tidy-up-prometheus/imgs/prometheus-high-cardinality.png new file mode 100644 index 0000000..344772b Binary files /dev/null and b/posts/tidy-up-prometheus/imgs/prometheus-high-cardinality.png differ diff --git a/posts/tidy-up-prometheus/imgs/title.png b/posts/tidy-up-prometheus/imgs/title.png new file mode 100644 index 0000000..126c101 Binary files /dev/null and b/posts/tidy-up-prometheus/imgs/title.png differ diff --git a/posts/tidy-up-prometheus/index.html b/posts/tidy-up-prometheus/index.html new file mode 100644 index 0000000..825fc22 --- /dev/null +++ b/posts/tidy-up-prometheus/index.html @@ -0,0 +1,54 @@ +Tidy up our Prometheus metrics! +
        Author Image
        Rahmat Agung Wibowo

        Thursday, December 1, 2022 | 2 minutes

        Tidy up our Prometheus metrics!

        In this article I’ll explain my process of analyzing and setting up Prometheus, where I maybe effectively increase query performance and addressed challenges related to cardinality. FYI, I use this stack on my monitoring system: Grafana, Promethues, Thanos. The metrics itself gethered from several source: node exporter, kube-state-metrics, etc.

        1. List unused metrics

        Firs, we need to list metrcis that used in our Grafana. To do this task, we can use mimirtool.

        $ mimirtool analyze grafana --address=${GRAFANA_URL} --key="${GRAFANA_API_TOKEN}"
        +

        In my case, I execute this command:

        $ mimirtool analyze grafana --address=https://grafana.rahmatawe.com --key="glsa_jLKvTx6RLkGXXXX6XKS6DXlrulepsy_xxxxx"
        +

        Anw, you can get GRAFANA_API_TOKEN by creating service account on Grafana dashboard. +image

        Above command will generate file named metrics-in-grafana.json. Using this file, we will compare it to metrics stored in Prometheus.

        #port forward to prometheus
        +$ kubectl port-forward prometheus-prometheus-0 9090:9090 -n monitoring
        +
        +# Compare grafana metrics and prometheus
        +$ mimirtool analyze prometheus --grafana-metrics-file="metrics-in-grafana.json" --address=http://localhost:9090
        +
        +INFO[0002] 73815 active series are being used in dashboards
        +INFO[0002] Found 2495 metric names
        +INFO[0017] 434700 active series are NOT being used in dashboards
        +INFO[0017] 467 in use active series metric count
        +INFO[0017] 2028 not in use active series metric count
        +

        NOTE: Adjust prometheus-prometheus-0 with your prometheus pod name and monitoring with namespace where your prometheus pod deployed.

        It will generate file prometheus-metrics.json. Sort it.

        $ jq -r ".in_use_metric_counts[].metric" prometheus-metrics.json | sort > used_metrics.txt
        +$ jq -r ".additional_metric_counts[].metric" prometheus-metrics.json | sort > unused_metrics.txt
        +

        2. Drop unused metrics

        On step 1, we have been list used metrics and unused metrics. Next step, we will check metrics which have high cardinality via Prometheus dashboard http://localhost:9090/tsdb-status. +image

        Hmm, let us check metrics apiserver_request_duration_seconds_bucket.

        $ grep apiserver_request_duration_seconds_bucket u*_metrics.txt
        +unused_metrics.txt:apiserver_request_duration_seconds_bucket
        +

        We can drop this metrics since it’s not used by Grafana. I will drop it via its ServiceMonitor. You can drop it other method (ex: prometheus config directly) depend on your setup.

        ---
        +apiVersion: monitoring.coreos.com/v1
        +kind: ServiceMonitor
        +metadata:
        +  name: kube-apiserver
        +  namespace: monitoring
        +  labels:
        +    prometheus: main
        +    release: prometheus-operator
        +
        +...
        +
        +      metricRelabelings:
        +      - sourceLabels: ["__name__"]
        +        regex: 'apiserver_request_duration_seconds_bucket'
        +        action: drop
        +

        That’s it. Simple task to drop your bloated Prometheus metrics. Bye!

        Ref:



        \ No newline at end of file diff --git a/safari-pinned-tab.svg b/safari-pinned-tab.svg deleted file mode 100644 index 19ee60a..0000000 --- a/safari-pinned-tab.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - -Created by potrace 1.11, written by Peter Selinger 2001-2013 - - - - - diff --git a/search/index.html b/search/index.html new file mode 100644 index 0000000..270a405 --- /dev/null +++ b/search/index.html @@ -0,0 +1,33 @@ +Searches +
        \ No newline at end of file diff --git a/search/index.xml b/search/index.xml new file mode 100644 index 0000000..7accecc --- /dev/null +++ b/search/index.xml @@ -0,0 +1 @@ +Searches on RahmatAwehttps://www.rahmatawe.com/search/Recent content in Searches on RahmatAweHugo -- gohugo.ioenTue, 08 Jun 2010 08:06:25 +0600 \ No newline at end of file diff --git a/series/index.html b/series/index.html deleted file mode 100644 index c5add6e..0000000 --- a/series/index.html +++ /dev/null @@ -1,4 +0,0 @@ -RahmatAwe -

        Series

        openshift 101

        Reading Time: 0 minutes

        October 17, 2020

        \ No newline at end of file diff --git a/series/index.xml b/series/index.xml deleted file mode 100644 index 1e567fd..0000000 --- a/series/index.xml +++ /dev/null @@ -1 +0,0 @@ -Series onhttps://www.rahmatawe.com/series/Recent content in Series onHugo -- gohugo.ioen-usSat, 17 Oct 2020 00:00:00 +0000openshift 101https://www.rahmatawe.com/series/openshift-101/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/series/openshift-101/ \ No newline at end of file diff --git a/series/openshift-101/index.html b/series/openshift-101/index.html deleted file mode 100644 index 5a9e6c6..0000000 --- a/series/openshift-101/index.html +++ /dev/null @@ -1,9 +0,0 @@ -RahmatAwe -

        openshift 101

        Deploying UPI OKD 4.5 Cluster

        Reading Time: 15 minutes

        October 17, 2020

        \ No newline at end of file diff --git a/series/openshift-101/index.xml b/series/openshift-101/index.xml deleted file mode 100644 index 090f458..0000000 --- a/series/openshift-101/index.xml +++ /dev/null @@ -1 +0,0 @@ -openshift 101 onhttps://www.rahmatawe.com/series/openshift-101/Recent content in openshift 101 onHugo -- gohugo.ioen-usSat, 17 Oct 2020 00:00:00 +0000Deploying UPI OKD 4.5 Clusterhttps://www.rahmatawe.com/blog/deploying-upi-okd/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/blog/deploying-upi-okd/Environment IP Address Hostname OS Description 10.10.51.9 okd-bastion CentOS 8 DNS Server, DHCP Server, NTP Server, PXE Server, LDAP Server 10.10.51.10 okd-bootstrap Fedora COreOS Bootstrap Server. Temporary only, could be delete after bootstrapping done. 10.10.51.11 okd-master01 Fedora CoreOS Master 10.10.51.12 okd-master02 Fedora CoreOS Master 10.10.51.13 okd-master03 Fedora CoreOS Master 10.10.51.21 okd-worker01 Fedora CoreOS Worker 10.10.51.22 okd-worker02 Fedora CoreOS Worker 10.10.51.31 okd-lb1 CentOS 8 Load Balancer 10.10.51.32 okd-lb2 CentOS 8 Load Balancer Part 1: Bastion/Helper Server 1. \ No newline at end of file diff --git a/series/openshift-101/page/1/index.html b/series/openshift-101/page/1/index.html deleted file mode 100644 index 8c857e8..0000000 --- a/series/openshift-101/page/1/index.html +++ /dev/null @@ -1,2 +0,0 @@ -https://www.rahmatawe.com/series/openshift-101/ - \ No newline at end of file diff --git a/series/page/1/index.html b/series/page/1/index.html deleted file mode 100644 index 890c74b..0000000 --- a/series/page/1/index.html +++ /dev/null @@ -1,2 +0,0 @@ -https://www.rahmatawe.com/series/ - \ No newline at end of file diff --git a/site.webmanifest b/site.webmanifest deleted file mode 100644 index 1edcfef..0000000 --- a/site.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "", - "short_name": "", - "icons": [ - { - "src": "android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/sitemap.xml b/sitemap.xml index b52665a..da2077e 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://www.rahmatawe.com/2023-11-26T00:00:00+00:00https://www.rahmatawe.com/blog/2023-11-26T00:00:00+00:00https://www.rahmatawe.com/categories/2023-11-26T00:00:00+00:00https://www.rahmatawe.com/categories/devops/2023-11-26T00:00:00+00:00https://www.rahmatawe.com/tags/monitoring/2023-11-26T00:00:00+00:00https://www.rahmatawe.com/tags/prometheus/2023-11-26T00:00:00+00:00https://www.rahmatawe.com/tags/2023-11-26T00:00:00+00:00https://www.rahmatawe.com/blog/tidy-up-prometheus-metrics/2023-11-26T00:00:00+00:00https://www.rahmatawe.com/tags/linux/2022-04-15T00:00:00+00:00https://www.rahmatawe.com/blog/send-event-viewer-log-to-grafana-loki/2022-04-15T00:00:00+00:00https://www.rahmatawe.com/categories/cheatsheet/2021-03-01T00:00:00+00:00https://www.rahmatawe.com/blog/cheatsheet/2021-03-01T00:00:00+00:00https://www.rahmatawe.com/blog/ldap-kubernetes-integration/2020-11-06T00:00:00+00:00https://www.rahmatawe.com/tags/kubernetes/2020-11-06T00:00:00+00:00https://www.rahmatawe.com/tags/ldap/2020-11-06T00:00:00+00:00https://www.rahmatawe.com/tags/ceph/2020-10-17T00:00:00+00:00https://www.rahmatawe.com/categories/cloud/2020-10-17T00:00:00+00:00https://www.rahmatawe.com/blog/deploying-openstack-hci/2020-10-17T00:00:00+00:00https://www.rahmatawe.com/blog/deploying-upi-okd/2020-10-17T00:00:00+00:00https://www.rahmatawe.com/tags/okd/2020-10-17T00:00:00+00:00https://www.rahmatawe.com/tags/openshift/2020-10-17T00:00:00+00:00https://www.rahmatawe.com/series/openshift-101/2020-10-17T00:00:00+00:00https://www.rahmatawe.com/tags/openstack/2020-10-17T00:00:00+00:00https://www.rahmatawe.com/series/2020-10-17T00:00:00+00:00 \ No newline at end of file +https://www.rahmatawe.com/en/sitemap.xml2022-12-01T08:06:25+06:00https://www.rahmatawe.com/id/sitemap.xml2020-06-08T08:06:25+06:00 \ No newline at end of file diff --git a/tags/ceph/index.html b/tags/ceph/index.html deleted file mode 100644 index 2d6c865..0000000 --- a/tags/ceph/index.html +++ /dev/null @@ -1,8 +0,0 @@ -RahmatAwe -

        ceph

        Deploying HCI Openstack using Kolla Ansible

        Reading Time: 5 minutes

        October 17, 2020

        \ No newline at end of file diff --git a/tags/ceph/index.xml b/tags/ceph/index.xml deleted file mode 100644 index 4e5e5a0..0000000 --- a/tags/ceph/index.xml +++ /dev/null @@ -1,2 +0,0 @@ -ceph onhttps://www.rahmatawe.com/tags/ceph/Recent content in ceph onHugo -- gohugo.ioen-usSat, 17 Oct 2020 00:00:00 +0000Deploying HCI Openstack using Kolla Ansiblehttps://www.rahmatawe.com/blog/deploying-openstack-hci/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/blog/deploying-openstack-hci/IP Information Hostname Storage Interface (enp1s0) Openstack Interface (enp7s0) server0 10.50.50.10 10.51.51.10 server1 10.50.50.11 10.51.51.11 server2 10.50.50.12 10.51.51.12 A. Deploy Ceph Cluster In this first stage, I will deploy Ceph Cluster using Ceph Ansible. Ceph Ansible has two different approach when deploy Ceph Cluster: 1) Systemd based and 2) Container based. In here, I will use container based deployment which is use Podman as container runtime. -1. Install required packages yum install git python3-pip vim -y pip3 install ansible 2. \ No newline at end of file diff --git a/tags/ceph/page/1/index.html b/tags/ceph/page/1/index.html deleted file mode 100644 index 1ae3dda..0000000 --- a/tags/ceph/page/1/index.html +++ /dev/null @@ -1,2 +0,0 @@ -https://www.rahmatawe.com/tags/ceph/ - \ No newline at end of file diff --git a/tags/index.html b/tags/index.html index 5b70004..07dc59e 100644 --- a/tags/index.html +++ b/tags/index.html @@ -1,4 +1,15 @@ -RahmatAwe -

        Tags

        monitoring

        Reading Time: 0 minutes

        November 26, 2023

        prometheus

        Reading Time: 0 minutes

        November 26, 2023

        linux

        Reading Time: 0 minutes

        April 15, 2022

        kubernetes

        Reading Time: 0 minutes

        November 6, 2020

        ldap

        Reading Time: 0 minutes

        November 6, 2020

        ceph

        Reading Time: 0 minutes

        October 17, 2020

        okd

        Reading Time: 0 minutes

        October 17, 2020

        openshift

        Reading Time: 0 minutes

        October 17, 2020

        openstack

        Reading Time: 0 minutes

        October 17, 2020

        \ No newline at end of file +Tags + \ No newline at end of file diff --git a/tags/index.xml b/tags/index.xml index 731ecdb..6461aa5 100644 --- a/tags/index.xml +++ b/tags/index.xml @@ -1 +1 @@ -Tags onhttps://www.rahmatawe.com/tags/Recent content in Tags onHugo -- gohugo.ioen-usSun, 26 Nov 2023 00:00:00 +0000monitoringhttps://www.rahmatawe.com/tags/monitoring/Sun, 26 Nov 2023 00:00:00 +0000https://www.rahmatawe.com/tags/monitoring/prometheushttps://www.rahmatawe.com/tags/prometheus/Sun, 26 Nov 2023 00:00:00 +0000https://www.rahmatawe.com/tags/prometheus/linuxhttps://www.rahmatawe.com/tags/linux/Fri, 15 Apr 2022 00:00:00 +0000https://www.rahmatawe.com/tags/linux/kuberneteshttps://www.rahmatawe.com/tags/kubernetes/Fri, 06 Nov 2020 00:00:00 +0000https://www.rahmatawe.com/tags/kubernetes/ldaphttps://www.rahmatawe.com/tags/ldap/Fri, 06 Nov 2020 00:00:00 +0000https://www.rahmatawe.com/tags/ldap/cephhttps://www.rahmatawe.com/tags/ceph/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/tags/ceph/okdhttps://www.rahmatawe.com/tags/okd/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/tags/okd/openshifthttps://www.rahmatawe.com/tags/openshift/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/tags/openshift/openstackhttps://www.rahmatawe.com/tags/openstack/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/tags/openstack/ \ No newline at end of file +Tags on RahmatAwehttps://www.rahmatawe.com/tags/Recent content in Tags on RahmatAweHugo -- gohugo.ioenThu, 01 Dec 2022 08:06:25 +0600 \ No newline at end of file diff --git a/tags/kubernetes/index.html b/tags/kubernetes/index.html deleted file mode 100644 index ce5826f..0000000 --- a/tags/kubernetes/index.html +++ /dev/null @@ -1,8 +0,0 @@ -RahmatAwe -

        kubernetes

        \ No newline at end of file diff --git a/tags/kubernetes/index.xml b/tags/kubernetes/index.xml deleted file mode 100644 index c0068ac..0000000 --- a/tags/kubernetes/index.xml +++ /dev/null @@ -1,2 +0,0 @@ -kubernetes onhttps://www.rahmatawe.com/tags/kubernetes/Recent content in kubernetes onHugo -- gohugo.ioen-usFri, 06 Nov 2020 00:00:00 +0000Implementing LDAP Authentication for Kubernetes using Dex on Ubuntu 18.04https://www.rahmatawe.com/blog/ldap-kubernetes-integration/Fri, 06 Nov 2020 00:00:00 +0000https://www.rahmatawe.com/blog/ldap-kubernetes-integration/Environment # Servers ag-k8s-master0 : 10.54.54.10/24 (Kubernetes Master) ag-k8s-worker0 : 10.54.54.20/24 (Kubernetes Worker) ag-k8s-worker1 : 10.54.54.21/24 (Kubernetes Worker) ag-k8s-ldap : 10.54.54.30/24 (LDAP Server, DNS Server) # Packages Release Ubuntu 18.04 Kubernetes 1.19 OpenLDAP 2.4 Part 1: Pre-Flight 1. Setup DNS Server For simplicity, I used dnsmasq with minimal configuration. You can use your prefered DNS Server (ex: bind9). -1.1. Install DNSMASQ root@ag-k8s-ldap:~# apt -y install dnsmasq 1.2. Configure Dnsmasq. Uncomment line below. \ No newline at end of file diff --git a/tags/kubernetes/page/1/index.html b/tags/kubernetes/page/1/index.html deleted file mode 100644 index e395f36..0000000 --- a/tags/kubernetes/page/1/index.html +++ /dev/null @@ -1,2 +0,0 @@ -https://www.rahmatawe.com/tags/kubernetes/ - \ No newline at end of file diff --git a/tags/ldap/index.html b/tags/ldap/index.html deleted file mode 100644 index 609f316..0000000 --- a/tags/ldap/index.html +++ /dev/null @@ -1,8 +0,0 @@ -RahmatAwe -

        ldap

        \ No newline at end of file diff --git a/tags/ldap/index.xml b/tags/ldap/index.xml deleted file mode 100644 index 7508d23..0000000 --- a/tags/ldap/index.xml +++ /dev/null @@ -1,2 +0,0 @@ -ldap onhttps://www.rahmatawe.com/tags/ldap/Recent content in ldap onHugo -- gohugo.ioen-usFri, 06 Nov 2020 00:00:00 +0000Implementing LDAP Authentication for Kubernetes using Dex on Ubuntu 18.04https://www.rahmatawe.com/blog/ldap-kubernetes-integration/Fri, 06 Nov 2020 00:00:00 +0000https://www.rahmatawe.com/blog/ldap-kubernetes-integration/Environment # Servers ag-k8s-master0 : 10.54.54.10/24 (Kubernetes Master) ag-k8s-worker0 : 10.54.54.20/24 (Kubernetes Worker) ag-k8s-worker1 : 10.54.54.21/24 (Kubernetes Worker) ag-k8s-ldap : 10.54.54.30/24 (LDAP Server, DNS Server) # Packages Release Ubuntu 18.04 Kubernetes 1.19 OpenLDAP 2.4 Part 1: Pre-Flight 1. Setup DNS Server For simplicity, I used dnsmasq with minimal configuration. You can use your prefered DNS Server (ex: bind9). -1.1. Install DNSMASQ root@ag-k8s-ldap:~# apt -y install dnsmasq 1.2. Configure Dnsmasq. Uncomment line below. \ No newline at end of file diff --git a/tags/ldap/page/1/index.html b/tags/ldap/page/1/index.html deleted file mode 100644 index 749f95f..0000000 --- a/tags/ldap/page/1/index.html +++ /dev/null @@ -1,2 +0,0 @@ -https://www.rahmatawe.com/tags/ldap/ - \ No newline at end of file diff --git a/tags/linux/index.html b/tags/linux/index.html index 654747f..936916d 100644 --- a/tags/linux/index.html +++ b/tags/linux/index.html @@ -1,21 +1,15 @@ -RahmatAwe -

        linux

        Send Log from Event Viewer on Windows Server 2019 to Grafana Loki

        Reading Time: 4 minutes

        April 15, 2022

        cheatsheet

        Reading Time: 2 minutes

        March 1, 2021

        Deploying HCI Openstack using Kolla Ansible

        Reading Time: 5 minutes

        October 17, 2020

        Deploying UPI OKD 4.5 Cluster

        Reading Time: 15 minutes

        October 17, 2020

        \ No newline at end of file +linux + \ No newline at end of file diff --git a/tags/linux/index.xml b/tags/linux/index.xml index 32d918b..fff4aeb 100644 --- a/tags/linux/index.xml +++ b/tags/linux/index.xml @@ -1,3 +1,3 @@ -linux onhttps://www.rahmatawe.com/tags/linux/Recent content in linux onHugo -- gohugo.ioen-usFri, 15 Apr 2022 00:00:00 +0000Send Log from Event Viewer on Windows Server 2019 to Grafana Lokihttps://www.rahmatawe.com/blog/send-event-viewer-log-to-grafana-loki/Fri, 15 Apr 2022 00:00:00 +0000https://www.rahmatawe.com/blog/send-event-viewer-log-to-grafana-loki/Environment # Servers ag-rh2 : 10.54.54.6 (Grafana + Loki) win2k19 : 10.54.54.219 (Promtail) # OS Packages Release RHEL 8.4 Windows Server 2019 Loki 2.5 Grafana 8.4.6 Setup Loki 1. Download package Loki curl -O -L &#34;https://github.com/grafana/loki/releases/download/v2.5.0/loki-linux-amd64.zip&#34; 2. Setup loki binary # Unzip package unzip loki-linux-amd64.zip # Grant execute permission chmod +x loki-linux-amd64 # Create directory for loki installation sudo mkdir -p /opt/loki/{bin,conf,data} # Move loki binary mv loki-linux-amd64 /opt/loki/bin/loki 3. Setup loki configuration Default configuration can be retrieved from here.cheatsheethttps://www.rahmatawe.com/blog/cheatsheet/Mon, 01 Mar 2021 00:00:00 +0000https://www.rahmatawe.com/blog/cheatsheet/Running short-lived container to compile source code $ sudo docker run --rm -it -v ${PWD}:/app -w /app openjdk:11-jdk-slim /bin/sh -c ./gradlew buildRun Rsync over SSH on Spesific Port $ rsync -avzhe &#39;ssh -p [port_number]&#39; -P [user@remote_ip]:/path/to/file/source /path/to/file/destination Scan IP on Network $ nmap -sP [ip_address/prefix] Search Available Version of Spesific Package on Debian Based OS $ apt list -a &lt;package_name&gt; Install Spesific Kubernetes Version #example version 1.15.x# $ sudo apt update;sudo apt install -qy kubelet=1.Implementing LDAP Authentication for Kubernetes using Dex on Ubuntu 18.04https://www.rahmatawe.com/blog/ldap-kubernetes-integration/Fri, 06 Nov 2020 00:00:00 +0000https://www.rahmatawe.com/blog/ldap-kubernetes-integration/Environment # Servers ag-k8s-master0 : 10.54.54.10/24 (Kubernetes Master) ag-k8s-worker0 : 10.54.54.20/24 (Kubernetes Worker) ag-k8s-worker1 : 10.54.54.21/24 (Kubernetes Worker) ag-k8s-ldap : 10.54.54.30/24 (LDAP Server, DNS Server) # Packages Release Ubuntu 18.04 Kubernetes 1.19 OpenLDAP 2.4 Part 1: Pre-Flight 1. Setup DNS Server For simplicity, I used dnsmasq with minimal configuration. You can use your prefered DNS Server (ex: bind9). -1.1. Install DNSMASQ root@ag-k8s-ldap:~# apt -y install dnsmasq 1.2. Configure Dnsmasq. Uncomment line below.Deploying HCI Openstack using Kolla Ansiblehttps://www.rahmatawe.com/blog/deploying-openstack-hci/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/blog/deploying-openstack-hci/IP Information Hostname Storage Interface (enp1s0) Openstack Interface (enp7s0) server0 10.50.50.10 10.51.51.10 server1 10.50.50.11 10.51.51.11 server2 10.50.50.12 10.51.51.12 A. Deploy Ceph Cluster In this first stage, I will deploy Ceph Cluster using Ceph Ansible. Ceph Ansible has two different approach when deploy Ceph Cluster: 1) Systemd based and 2) Container based. In here, I will use container based deployment which is use Podman as container runtime. -1. Install required packages yum install git python3-pip vim -y pip3 install ansible 2.Deploying UPI OKD 4.5 Clusterhttps://www.rahmatawe.com/blog/deploying-upi-okd/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/blog/deploying-upi-okd/Environment IP Address Hostname OS Description 10.10.51.9 okd-bastion CentOS 8 DNS Server, DHCP Server, NTP Server, PXE Server, LDAP Server 10.10.51.10 okd-bootstrap Fedora COreOS Bootstrap Server. Temporary only, could be delete after bootstrapping done. 10.10.51.11 okd-master01 Fedora CoreOS Master 10.10.51.12 okd-master02 Fedora CoreOS Master 10.10.51.13 okd-master03 Fedora CoreOS Master 10.10.51.21 okd-worker01 Fedora CoreOS Worker 10.10.51.22 okd-worker02 Fedora CoreOS Worker 10.10.51.31 okd-lb1 CentOS 8 Load Balancer 10.10.51.32 okd-lb2 CentOS 8 Load Balancer Part 1: Bastion/Helper Server 1. \ No newline at end of file +linux on RahmatAwehttps://www.rahmatawe.com/tags/linux/Recent content in linux on RahmatAweHugo -- gohugo.ioenThu, 01 Dec 2022 08:06:25 +0600Tidy up our Prometheus metrics!https://www.rahmatawe.com/posts/tidy-up-prometheus/Thu, 01 Dec 2022 08:06:25 +0600https://www.rahmatawe.com/posts/tidy-up-prometheus/In this article I&rsquo;ll explain my process of analyzing and setting up Prometheus, where I maybe effectively increase query performance and addressed challenges related to cardinality. FYI, I use this stack on my monitoring system: Grafana, Promethues, Thanos. The metrics itself gethered from several source: node exporter, kube-state-metrics, etc. +1. List unused metrics Firs, we need to list metrcis that used in our Grafana. To do this task, we can use mimirtool.Send Log from Event Viewer on Windows Server 2019 to Grafana Lokihttps://www.rahmatawe.com/posts/send-event-viewer-log-to-grafana-loki/Fri, 15 Apr 2022 08:06:25 +0600https://www.rahmatawe.com/posts/send-event-viewer-log-to-grafana-loki/It&rsquo;s just PoC of collecting Windows logs using open source project such as Promtail, Loki and Grafana. +Environment # Servers ag-rh2 : 10.54.54.6 (Grafana + Loki) win2k19 : 10.54.54.219 (Promtail) # OS Packages Release RHEL 8.4 Windows Server 2019 Loki 2.5 Grafana 8.4.6 Setup Loki 1. Download package Loki curl -O -L &#34;https://github.com/grafana/loki/releases/download/v2.5.0/loki-linux-amd64.zip&#34; 2. Setup loki binary # Unzip package unzip loki-linux-amd64.zip # Grant execute permission chmod +x loki-linux-amd64 # Create directory for loki installation sudo mkdir -p /opt/loki/{bin,conf,data} # Move loki binary mv loki-linux-amd64 /opt/loki/bin/loki 3. \ No newline at end of file diff --git a/tags/linux/page/1/index.html b/tags/linux/page/1/index.html index bde21ca..5332c51 100644 --- a/tags/linux/page/1/index.html +++ b/tags/linux/page/1/index.html @@ -1,2 +1,2 @@ -https://www.rahmatawe.com/tags/linux/ +https://www.rahmatawe.com/tags/linux/ \ No newline at end of file diff --git a/tags/monitoring/index.html b/tags/monitoring/index.html index ce83f52..d93e1f3 100644 --- a/tags/monitoring/index.html +++ b/tags/monitoring/index.html @@ -1,7 +1,15 @@ -RahmatAwe -

        monitoring

        Tidy up our Prometheus metrics!

        Reading Time: 2 minutes

        November 26, 2023

        \ No newline at end of file +monitoring + \ No newline at end of file diff --git a/tags/monitoring/index.xml b/tags/monitoring/index.xml index 9f64621..b0fa451 100644 --- a/tags/monitoring/index.xml +++ b/tags/monitoring/index.xml @@ -1,2 +1,3 @@ -monitoring onhttps://www.rahmatawe.com/tags/monitoring/Recent content in monitoring onHugo -- gohugo.ioen-usSun, 26 Nov 2023 00:00:00 +0000Tidy up our Prometheus metrics!https://www.rahmatawe.com/blog/tidy-up-prometheus-metrics/Sun, 26 Nov 2023 00:00:00 +0000https://www.rahmatawe.com/blog/tidy-up-prometheus-metrics/In this article I&rsquo;ll explain my process of analyzing and setting up Prometheus, where I maybe effectively increase query performance and addressed challenges related to cardinality. FYI, I use this stack on my monitoring system: Grafana, Promethues, Thanos. The metrics itself gethered from several source: node exporter, kube-state-metrics, etc. -1. List unused metrics Firs, we need to list metrcis that used in our Grafana. To do this task, we can use mimirtool. \ No newline at end of file +monitoring on RahmatAwehttps://www.rahmatawe.com/tags/monitoring/Recent content in monitoring on RahmatAweHugo -- gohugo.ioenThu, 01 Dec 2022 08:06:25 +0600Tidy up our Prometheus metrics!https://www.rahmatawe.com/posts/tidy-up-prometheus/Thu, 01 Dec 2022 08:06:25 +0600https://www.rahmatawe.com/posts/tidy-up-prometheus/In this article I&rsquo;ll explain my process of analyzing and setting up Prometheus, where I maybe effectively increase query performance and addressed challenges related to cardinality. FYI, I use this stack on my monitoring system: Grafana, Promethues, Thanos. The metrics itself gethered from several source: node exporter, kube-state-metrics, etc. +1. List unused metrics Firs, we need to list metrcis that used in our Grafana. To do this task, we can use mimirtool.Send Log from Event Viewer on Windows Server 2019 to Grafana Lokihttps://www.rahmatawe.com/posts/send-event-viewer-log-to-grafana-loki/Fri, 15 Apr 2022 08:06:25 +0600https://www.rahmatawe.com/posts/send-event-viewer-log-to-grafana-loki/It&rsquo;s just PoC of collecting Windows logs using open source project such as Promtail, Loki and Grafana. +Environment # Servers ag-rh2 : 10.54.54.6 (Grafana + Loki) win2k19 : 10.54.54.219 (Promtail) # OS Packages Release RHEL 8.4 Windows Server 2019 Loki 2.5 Grafana 8.4.6 Setup Loki 1. Download package Loki curl -O -L &#34;https://github.com/grafana/loki/releases/download/v2.5.0/loki-linux-amd64.zip&#34; 2. Setup loki binary # Unzip package unzip loki-linux-amd64.zip # Grant execute permission chmod +x loki-linux-amd64 # Create directory for loki installation sudo mkdir -p /opt/loki/{bin,conf,data} # Move loki binary mv loki-linux-amd64 /opt/loki/bin/loki 3. \ No newline at end of file diff --git a/tags/monitoring/page/1/index.html b/tags/monitoring/page/1/index.html index 3d18371..90ea33e 100644 --- a/tags/monitoring/page/1/index.html +++ b/tags/monitoring/page/1/index.html @@ -1,2 +1,2 @@ -https://www.rahmatawe.com/tags/monitoring/ +https://www.rahmatawe.com/tags/monitoring/ \ No newline at end of file diff --git a/tags/okd/index.html b/tags/okd/index.html deleted file mode 100644 index 808c370..0000000 --- a/tags/okd/index.html +++ /dev/null @@ -1,9 +0,0 @@ -RahmatAwe -

        okd

        Deploying UPI OKD 4.5 Cluster

        Reading Time: 15 minutes

        October 17, 2020

        \ No newline at end of file diff --git a/tags/okd/index.xml b/tags/okd/index.xml deleted file mode 100644 index cbacc87..0000000 --- a/tags/okd/index.xml +++ /dev/null @@ -1 +0,0 @@ -okd onhttps://www.rahmatawe.com/tags/okd/Recent content in okd onHugo -- gohugo.ioen-usSat, 17 Oct 2020 00:00:00 +0000Deploying UPI OKD 4.5 Clusterhttps://www.rahmatawe.com/blog/deploying-upi-okd/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/blog/deploying-upi-okd/Environment IP Address Hostname OS Description 10.10.51.9 okd-bastion CentOS 8 DNS Server, DHCP Server, NTP Server, PXE Server, LDAP Server 10.10.51.10 okd-bootstrap Fedora COreOS Bootstrap Server. Temporary only, could be delete after bootstrapping done. 10.10.51.11 okd-master01 Fedora CoreOS Master 10.10.51.12 okd-master02 Fedora CoreOS Master 10.10.51.13 okd-master03 Fedora CoreOS Master 10.10.51.21 okd-worker01 Fedora CoreOS Worker 10.10.51.22 okd-worker02 Fedora CoreOS Worker 10.10.51.31 okd-lb1 CentOS 8 Load Balancer 10.10.51.32 okd-lb2 CentOS 8 Load Balancer Part 1: Bastion/Helper Server 1. \ No newline at end of file diff --git a/tags/okd/page/1/index.html b/tags/okd/page/1/index.html deleted file mode 100644 index 21809bf..0000000 --- a/tags/okd/page/1/index.html +++ /dev/null @@ -1,2 +0,0 @@ -https://www.rahmatawe.com/tags/okd/ - \ No newline at end of file diff --git a/tags/openshift/index.html b/tags/openshift/index.html deleted file mode 100644 index 0e06e95..0000000 --- a/tags/openshift/index.html +++ /dev/null @@ -1,9 +0,0 @@ -RahmatAwe -

        openshift

        Deploying UPI OKD 4.5 Cluster

        Reading Time: 15 minutes

        October 17, 2020

        \ No newline at end of file diff --git a/tags/openshift/index.xml b/tags/openshift/index.xml deleted file mode 100644 index 8cc1aa4..0000000 --- a/tags/openshift/index.xml +++ /dev/null @@ -1 +0,0 @@ -openshift onhttps://www.rahmatawe.com/tags/openshift/Recent content in openshift onHugo -- gohugo.ioen-usSat, 17 Oct 2020 00:00:00 +0000Deploying UPI OKD 4.5 Clusterhttps://www.rahmatawe.com/blog/deploying-upi-okd/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/blog/deploying-upi-okd/Environment IP Address Hostname OS Description 10.10.51.9 okd-bastion CentOS 8 DNS Server, DHCP Server, NTP Server, PXE Server, LDAP Server 10.10.51.10 okd-bootstrap Fedora COreOS Bootstrap Server. Temporary only, could be delete after bootstrapping done. 10.10.51.11 okd-master01 Fedora CoreOS Master 10.10.51.12 okd-master02 Fedora CoreOS Master 10.10.51.13 okd-master03 Fedora CoreOS Master 10.10.51.21 okd-worker01 Fedora CoreOS Worker 10.10.51.22 okd-worker02 Fedora CoreOS Worker 10.10.51.31 okd-lb1 CentOS 8 Load Balancer 10.10.51.32 okd-lb2 CentOS 8 Load Balancer Part 1: Bastion/Helper Server 1. \ No newline at end of file diff --git a/tags/openshift/page/1/index.html b/tags/openshift/page/1/index.html deleted file mode 100644 index 93ec126..0000000 --- a/tags/openshift/page/1/index.html +++ /dev/null @@ -1,2 +0,0 @@ -https://www.rahmatawe.com/tags/openshift/ - \ No newline at end of file diff --git a/tags/openstack/index.html b/tags/openstack/index.html deleted file mode 100644 index ae7fd14..0000000 --- a/tags/openstack/index.html +++ /dev/null @@ -1,8 +0,0 @@ -RahmatAwe -

        openstack

        Deploying HCI Openstack using Kolla Ansible

        Reading Time: 5 minutes

        October 17, 2020

        \ No newline at end of file diff --git a/tags/openstack/index.xml b/tags/openstack/index.xml deleted file mode 100644 index 21b772b..0000000 --- a/tags/openstack/index.xml +++ /dev/null @@ -1,2 +0,0 @@ -openstack onhttps://www.rahmatawe.com/tags/openstack/Recent content in openstack onHugo -- gohugo.ioen-usSat, 17 Oct 2020 00:00:00 +0000Deploying HCI Openstack using Kolla Ansiblehttps://www.rahmatawe.com/blog/deploying-openstack-hci/Sat, 17 Oct 2020 00:00:00 +0000https://www.rahmatawe.com/blog/deploying-openstack-hci/IP Information Hostname Storage Interface (enp1s0) Openstack Interface (enp7s0) server0 10.50.50.10 10.51.51.10 server1 10.50.50.11 10.51.51.11 server2 10.50.50.12 10.51.51.12 A. Deploy Ceph Cluster In this first stage, I will deploy Ceph Cluster using Ceph Ansible. Ceph Ansible has two different approach when deploy Ceph Cluster: 1) Systemd based and 2) Container based. In here, I will use container based deployment which is use Podman as container runtime. -1. Install required packages yum install git python3-pip vim -y pip3 install ansible 2. \ No newline at end of file diff --git a/tags/openstack/page/1/index.html b/tags/openstack/page/1/index.html deleted file mode 100644 index 3720760..0000000 --- a/tags/openstack/page/1/index.html +++ /dev/null @@ -1,2 +0,0 @@ -https://www.rahmatawe.com/tags/openstack/ - \ No newline at end of file diff --git a/tags/page/1/index.html b/tags/page/1/index.html index a198f5d..e2719e1 100644 --- a/tags/page/1/index.html +++ b/tags/page/1/index.html @@ -1,2 +1,2 @@ -https://www.rahmatawe.com/tags/ +https://www.rahmatawe.com/tags/ \ No newline at end of file diff --git a/tags/prometheus/index.html b/tags/prometheus/index.html deleted file mode 100644 index bcdff7a..0000000 --- a/tags/prometheus/index.html +++ /dev/null @@ -1,7 +0,0 @@ -RahmatAwe -

        prometheus

        Tidy up our Prometheus metrics!

        Reading Time: 2 minutes

        November 26, 2023

        \ No newline at end of file diff --git a/tags/prometheus/index.xml b/tags/prometheus/index.xml deleted file mode 100644 index 1731209..0000000 --- a/tags/prometheus/index.xml +++ /dev/null @@ -1,2 +0,0 @@ -prometheus onhttps://www.rahmatawe.com/tags/prometheus/Recent content in prometheus onHugo -- gohugo.ioen-usSun, 26 Nov 2023 00:00:00 +0000Tidy up our Prometheus metrics!https://www.rahmatawe.com/blog/tidy-up-prometheus-metrics/Sun, 26 Nov 2023 00:00:00 +0000https://www.rahmatawe.com/blog/tidy-up-prometheus-metrics/In this article I&rsquo;ll explain my process of analyzing and setting up Prometheus, where I maybe effectively increase query performance and addressed challenges related to cardinality. FYI, I use this stack on my monitoring system: Grafana, Promethues, Thanos. The metrics itself gethered from several source: node exporter, kube-state-metrics, etc. -1. List unused metrics Firs, we need to list metrcis that used in our Grafana. To do this task, we can use mimirtool. \ No newline at end of file diff --git a/tags/prometheus/page/1/index.html b/tags/prometheus/page/1/index.html deleted file mode 100644 index 81b5235..0000000 --- a/tags/prometheus/page/1/index.html +++ /dev/null @@ -1,2 +0,0 @@ -https://www.rahmatawe.com/tags/prometheus/ - \ No newline at end of file