/*! For license information please see component---src-pages-index-tsx-2c1af854032621c8e39a.js.LICENSE.txt */
(window.webpackJsonp=window.webpackJsonp||[]).push([[67],{"+uyH":function(e,t,a){"use strict";var r=a("5NKs");Object.defineProperty(t,"__esModule",{value:!0}),t.Track=void 0;var i=r(a("j8BX")),n=r(a("phZJ")),o=r(a("lFqo")),l=r(a("v06X")),s=r(a("IVAY")),d=r(a("CPqs")),c=r(a("0jh0")),u=r(a("hrfQ")),f=r(a("q1tI")),p=r(a("TSYQ")),h=a("3K4p"),g=function(e){var t,a,r,i,n;return r=(n=e.rtl?e.slideCount-1-e.index:e.index)<0||n>=e.slideCount,e.centerMode?(i=Math.floor(e.slidesToShow/2),a=(n-e.currentSlide)%e.slideCount==0,n>e.currentSlide-i-1&&n<=e.currentSlide+i&&(t=!0)):t=e.currentSlide<=n&&n<e.currentSlide+e.slidesToShow,{"slick-slide":!0,"slick-active":t,"slick-center":a,"slick-cloned":r,"slick-current":n===(e.targetSlide<0?e.targetSlide+e.slideCount:e.targetSlide>=e.slideCount?e.targetSlide-e.slideCount:e.targetSlide)}},m=function(e,t){return e.key+"-"+t},v=function(e){var t,a=[],r=[],i=[],n=f.default.Children.count(e.children),o=(0,h.lazyStartIndex)(e),l=(0,h.lazyEndIndex)(e);return f.default.Children.forEach(e.children,(function(s,d){var c,v={message:"children",index:d,slidesToScroll:e.slidesToScroll,currentSlide:e.currentSlide};c=!e.lazyLoad||e.lazyLoad&&e.lazyLoadedList.indexOf(d)>=0?s:f.default.createElement("div",null);var b=function(e){var t={};return void 0!==e.variableWidth&&!1!==e.variableWidth||(t.width=e.slideWidth),e.fade&&(t.position="relative",e.vertical?t.top=-e.index*parseInt(e.slideHeight):t.left=-e.index*parseInt(e.slideWidth),t.opacity=e.currentSlide===e.index?1:0,e.useCSS&&(t.transition="opacity "+e.speed+"ms "+e.cssEase+", visibility "+e.speed+"ms "+e.cssEase)),t}((0,u.default)((0,u.default)({},e),{},{index:d})),y=c.props.className||"",w=g((0,u.default)((0,u.default)({},e),{},{index:d}));if(a.push(f.default.cloneElement(c,{key:"original"+m(c,d),"data-index":d,className:(0,p.default)(w,y),tabIndex:"-1","aria-hidden":!w["slick-active"],style:(0,u.default)((0,u.default)({outline:"none"},c.props.style||{}),b),onClick:function(t){c.props&&c.props.onClick&&c.props.onClick(t),e.focusOnSelect&&e.focusOnSelect(v)}})),e.infinite&&!1===e.fade){var S=n-d;S<=(0,h.getPreClones)(e)&&n!==e.slidesToShow&&((t=-S)>=o&&(c=s),w=g((0,u.default)((0,u.default)({},e),{},{index:t})),r.push(f.default.cloneElement(c,{key:"precloned"+m(c,t),"data-index":t,tabIndex:"-1",className:(0,p.default)(w,y),"aria-hidden":!w["slick-active"],style:(0,u.default)((0,u.default)({},c.props.style||{}),b),onClick:function(t){c.props&&c.props.onClick&&c.props.onClick(t),e.focusOnSelect&&e.focusOnSelect(v)}}))),n!==e.slidesToShow&&((t=n+d)<l&&(c=s),w=g((0,u.default)((0,u.default)({},e),{},{index:t})),i.push(f.default.cloneElement(c,{key:"postcloned"+m(c,t),"data-index":t,tabIndex:"-1",className:(0,p.default)(w,y),"aria-hidden":!w["slick-active"],style:(0,u.default)((0,u.default)({},c.props.style||{}),b),onClick:function(t){c.props&&c.props.onClick&&c.props.onClick(t),e.focusOnSelect&&e.focusOnSelect(v)}})))}})),e.rtl?r.concat(a,i).reverse():r.concat(a,i)},b=function(e){(0,s.default)(a,e);var t=(0,d.default)(a);function a(){var e;(0,n.default)(this,a);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return e=t.call.apply(t,[this].concat(i)),(0,c.default)((0,l.default)(e),"node",null),(0,c.default)((0,l.default)(e),"handleRef",(function(t){e.node=t})),e}return(0,o.default)(a,[{key:"render",value:function(){var e=v(this.props),t=this.props,a={onMouseEnter:t.onMouseEnter,onMouseOver:t.onMouseOver,onMouseLeave:t.onMouseLeave};return f.default.createElement("div",(0,i.default)({ref:this.handleRef,className:"slick-track",style:this.props.trackStyle},a),e)}}]),a}(f.default.PureComponent);t.Track=b},"3Fjq":function(e,t,a){"use strict";var r=a("5NKs");Object.defineProperty(t,"__esModule",{value:!0}),t.NextArrow=t.PrevArrow=void 0;var i=r(a("j8BX")),n=r(a("hrfQ")),o=r(a("phZJ")),l=r(a("lFqo")),s=r(a("IVAY")),d=r(a("CPqs")),c=r(a("q1tI")),u=r(a("TSYQ")),f=a("3K4p"),p=function(e){(0,s.default)(a,e);var t=(0,d.default)(a);function a(){return(0,o.default)(this,a),t.apply(this,arguments)}return(0,l.default)(a,[{key:"clickHandler",value:function(e,t){t&&t.preventDefault(),this.props.clickHandler(e,t)}},{key:"render",value:function(){var e={"slick-arrow":!0,"slick-prev":!0},t=this.clickHandler.bind(this,{message:"previous"});!this.props.infinite&&(0===this.props.currentSlide||this.props.slideCount<=this.props.slidesToShow)&&(e["slick-disabled"]=!0,t=null);var a={key:"0","data-role":"none",className:(0,u.default)(e),style:{display:"block"},onClick:t},r={currentSlide:this.props.currentSlide,slideCount:this.props.slideCount};return this.props.prevArrow?c.default.cloneElement(this.props.prevArrow,(0,n.default)((0,n.default)({},a),r)):c.default.createElement("button",(0,i.default)({key:"0",type:"button"},a)," ","Previous")}}]),a}(c.default.PureComponent);t.PrevArrow=p;var h=function(e){(0,s.default)(a,e);var t=(0,d.default)(a);function a(){return(0,o.default)(this,a),t.apply(this,arguments)}return(0,l.default)(a,[{key:"clickHandler",value:function(e,t){t&&t.preventDefault(),this.props.clickHandler(e,t)}},{key:"render",value:function(){var e={"slick-arrow":!0,"slick-next":!0},t=this.clickHandler.bind(this,{message:"next"});(0,f.canGoNext)(this.props)||(e["slick-disabled"]=!0,t=null);var a={key:"1","data-role":"none",className:(0,u.default)(e),style:{display:"block"},onClick:t},r={currentSlide:this.props.currentSlide,slideCount:this.props.slideCount};return this.props.nextArrow?c.default.cloneElement(this.props.nextArrow,(0,n.default)((0,n.default)({},a),r)):c.default.createElement("button",(0,i.default)({key:"1",type:"button"},a)," ","Next")}}]),a}(c.default.PureComponent);t.NextArrow=h},"3K4p":function(e,t,a){"use strict";var r=a("5NKs");Object.defineProperty(t,"__esModule",{value:!0}),t.clamp=o,t.canUseDOM=t.slidesOnLeft=t.slidesOnRight=t.siblingDirection=t.getTotalSlides=t.getPostClones=t.getPreClones=t.getTrackLeft=t.getTrackAnimateCSS=t.getTrackCSS=t.checkSpecKeys=t.getSlideCount=t.checkNavigable=t.getNavigableIndexes=t.swipeEnd=t.swipeMove=t.swipeStart=t.keyHandler=t.changeSlide=t.slideHandler=t.initializedState=t.extractObject=t.canGoNext=t.getSwipeDirection=t.getHeight=t.getWidth=t.lazySlidesOnRight=t.lazySlidesOnLeft=t.lazyEndIndex=t.lazyStartIndex=t.getRequiredLazySlides=t.getOnDemandLazySlides=void 0;var i=r(a("hrfQ")),n=r(a("q1tI"));function o(e,t,a){return Math.max(t,Math.min(e,a))}var l=function(e){for(var t=[],a=s(e),r=d(e),i=a;i<r;i++)e.lazyLoadedList.indexOf(i)<0&&t.push(i);return t};t.getOnDemandLazySlides=l;t.getRequiredLazySlides=function(e){for(var t=[],a=s(e),r=d(e),i=a;i<r;i++)t.push(i);return t};var s=function(e){return e.currentSlide-c(e)};t.lazyStartIndex=s;var d=function(e){return e.currentSlide+u(e)};t.lazyEndIndex=d;var c=function(e){return e.centerMode?Math.floor(e.slidesToShow/2)+(parseInt(e.centerPadding)>0?1:0):0};t.lazySlidesOnLeft=c;var u=function(e){return e.centerMode?Math.floor((e.slidesToShow-1)/2)+1+(parseInt(e.centerPadding)>0?1:0):e.slidesToShow};t.lazySlidesOnRight=u;var f=function(e){return e&&e.offsetWidth||0};t.getWidth=f;var p=function(e){return e&&e.offsetHeight||0};t.getHeight=p;var h=function(e){var t,a,r,i,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return t=e.startX-e.curX,a=e.startY-e.curY,r=Math.atan2(a,t),(i=Math.round(180*r/Math.PI))<0&&(i=360-Math.abs(i)),i<=45&&i>=0||i<=360&&i>=315?"left":i>=135&&i<=225?"right":!0===n?i>=35&&i<=135?"up":"down":"vertical"};t.getSwipeDirection=h;var g=function(e){var t=!0;return e.infinite||(e.centerMode&&e.currentSlide>=e.slideCount-1||e.slideCount<=e.slidesToShow||e.currentSlide>=e.slideCount-e.slidesToShow)&&(t=!1),t};t.canGoNext=g;t.extractObject=function(e,t){var a={};return t.forEach((function(t){return a[t]=e[t]})),a};t.initializedState=function(e){var t,a=n.default.Children.count(e.children),r=e.listRef,o=Math.ceil(f(r)),s=e.trackRef&&e.trackRef.node,d=Math.ceil(f(s));if(e.vertical)t=o;else{var c=e.centerMode&&2*parseInt(e.centerPadding);"string"==typeof e.centerPadding&&"%"===e.centerPadding.slice(-1)&&(c*=o/100),t=Math.ceil((o-c)/e.slidesToShow)}var u=r&&p(r.querySelector('[data-index="0"]')),h=u*e.slidesToShow,g=void 0===e.currentSlide?e.initialSlide:e.currentSlide;e.rtl&&void 0===e.currentSlide&&(g=a-1-e.initialSlide);var m=e.lazyLoadedList||[],v=l((0,i.default)((0,i.default)({},e),{},{currentSlide:g,lazyLoadedList:m}));m.concat(v);var b={slideCount:a,slideWidth:t,listWidth:o,trackWidth:d,currentSlide:g,slideHeight:u,listHeight:h,lazyLoadedList:m};return null===e.autoplaying&&e.autoplay&&(b.autoplaying="playing"),b};t.slideHandler=function(e){var t=e.waitForAnimate,a=e.animating,r=e.fade,n=e.infinite,s=e.index,d=e.slideCount,c=e.lazyLoadedList,u=e.lazyLoad,f=e.currentSlide,p=e.centerMode,h=e.slidesToScroll,m=e.slidesToShow,v=e.useCSS;if(t&&a)return{};var b,y,x,O=s,j={},C={},E=n?s:o(s,0,d-1);if(r){if(!n&&(s<0||s>=d))return{};s<0?O=s+d:s>=d&&(O=s-d),u&&c.indexOf(O)<0&&c.push(O),j={animating:!0,currentSlide:O,lazyLoadedList:c,targetSlide:O},C={animating:!1,targetSlide:O}}else b=O,O<0?(b=O+d,n?d%h!=0&&(b=d-d%h):b=0):!g(e)&&O>f?O=b=f:p&&O>=d?(O=n?d:d-1,b=n?0:d-1):O>=d&&(b=O-d,n?d%h!=0&&(b=0):b=d-m),!n&&O+m>=d&&(b=d-m),y=k((0,i.default)((0,i.default)({},e),{},{slideIndex:O})),x=k((0,i.default)((0,i.default)({},e),{},{slideIndex:b})),n||(y===x&&(O=b),y=x),u&&c.concat(l((0,i.default)((0,i.default)({},e),{},{currentSlide:O}))),v?(j={animating:!0,currentSlide:b,trackStyle:S((0,i.default)((0,i.default)({},e),{},{left:y})),lazyLoadedList:c,targetSlide:E},C={animating:!1,currentSlide:b,trackStyle:w((0,i.default)((0,i.default)({},e),{},{left:x})),swipeLeft:null,targetSlide:E}):j={currentSlide:b,trackStyle:w((0,i.default)((0,i.default)({},e),{},{left:x})),lazyLoadedList:c,targetSlide:E};return{state:j,nextState:C}};t.changeSlide=function(e,t){var a,r,n,o,l=e.slidesToScroll,s=e.slidesToShow,d=e.slideCount,c=e.currentSlide,u=e.targetSlide,f=e.lazyLoad,p=e.infinite;if(a=d%l!=0?0:(d-c)%l,"previous"===t.message)o=c-(n=0===a?l:s-a),f&&!p&&(o=-1===(r=c-n)?d-1:r),p||(o=u-l);else if("next"===t.message)o=c+(n=0===a?l:a),f&&!p&&(o=(c+l)%d+a),p||(o=u+l);else if("dots"===t.message)o=t.index*t.slidesToScroll;else if("children"===t.message){if(o=t.index,p){var h=C((0,i.default)((0,i.default)({},e),{},{targetSlide:o}));o>t.currentSlide&&"left"===h?o-=d:o<t.currentSlide&&"right"===h&&(o+=d)}}else"index"===t.message&&(o=Number(t.index));return o};t.keyHandler=function(e,t,a){return e.target.tagName.match("TEXTAREA|INPUT|SELECT")||!t?"":37===e.keyCode?a?"next":"previous":39===e.keyCode?a?"previous":"next":""};t.swipeStart=function(e,t,a){return"IMG"===e.target.tagName&&e.preventDefault(),!t||!a&&-1!==e.type.indexOf("mouse")?"":{dragging:!0,touchObject:{startX:e.touches?e.touches[0].pageX:e.clientX,startY:e.touches?e.touches[0].pageY:e.clientY,curX:e.touches?e.touches[0].pageX:e.clientX,curY:e.touches?e.touches[0].pageY:e.clientY}}};t.swipeMove=function(e,t){var a=t.scrolling,r=t.animating,n=t.vertical,o=t.swipeToSlide,l=t.verticalSwiping,s=t.rtl,d=t.currentSlide,c=t.edgeFriction,u=t.edgeDragged,f=t.onEdge,p=t.swiped,m=t.swiping,v=t.slideCount,b=t.slidesToScroll,y=t.infinite,S=t.touchObject,x=t.swipeEvent,O=t.listHeight,j=t.listWidth;if(!a){if(r)return e.preventDefault();n&&o&&l&&e.preventDefault();var C,E={},T=k(t);S.curX=e.touches?e.touches[0].pageX:e.clientX,S.curY=e.touches?e.touches[0].pageY:e.clientY,S.swipeLength=Math.round(Math.sqrt(Math.pow(S.curX-S.startX,2)));var z=Math.round(Math.sqrt(Math.pow(S.curY-S.startY,2)));if(!l&&!m&&z>10)return{scrolling:!0};l&&(S.swipeLength=z);var L=(s?-1:1)*(S.curX>S.startX?1:-1);l&&(L=S.curY>S.startY?1:-1);var M=Math.ceil(v/b),P=h(t.touchObject,l),N=S.swipeLength;return y||(0===d&&"right"===P||d+1>=M&&"left"===P||!g(t)&&"left"===P)&&(N=S.swipeLength*c,!1===u&&f&&(f(P),E.edgeDragged=!0)),!p&&x&&(x(P),E.swiped=!0),C=n?T+N*(O/j)*L:s?T-N*L:T+N*L,l&&(C=T+N*L),E=(0,i.default)((0,i.default)({},E),{},{touchObject:S,swipeLeft:C,trackStyle:w((0,i.default)((0,i.default)({},t),{},{left:C}))}),Math.abs(S.curX-S.startX)<.8*Math.abs(S.curY-S.startY)?E:(S.swipeLength>10&&(E.swiping=!0,e.preventDefault()),E)}};t.swipeEnd=function(e,t){var a=t.dragging,r=t.swipe,n=t.touchObject,o=t.listWidth,l=t.touchThreshold,s=t.verticalSwiping,d=t.listHeight,c=t.swipeToSlide,u=t.scrolling,f=t.onSwipe,p=t.targetSlide,g=t.currentSlide,m=t.infinite;if(!a)return r&&e.preventDefault(),{};var y=s?d/l:o/l,w=h(n,s),x={dragging:!1,edgeDragged:!1,scrolling:!1,swiping:!1,swiped:!1,swipeLeft:null,touchObject:{}};if(u)return x;if(!n.swipeLength)return x;if(n.swipeLength>y){var O,j;e.preventDefault(),f&&f(w);var C=m?g:p;switch(w){case"left":case"up":j=C+b(t),O=c?v(t,j):j,x.currentDirection=0;break;case"right":case"down":j=C-b(t),O=c?v(t,j):j,x.currentDirection=1;break;default:O=C}x.triggerSlideHandler=O}else{var E=k(t);x.trackStyle=S((0,i.default)((0,i.default)({},t),{},{left:E}))}return x};var m=function(e){for(var t=e.infinite?2*e.slideCount:e.slideCount,a=e.infinite?-1*e.slidesToShow:0,r=e.infinite?-1*e.slidesToShow:0,i=[];a<t;)i.push(a),a=r+e.slidesToScroll,r+=Math.min(e.slidesToScroll,e.slidesToShow);return i};t.getNavigableIndexes=m;var v=function(e,t){var a=m(e),r=0;if(t>a[a.length-1])t=a[a.length-1];else for(var i in a){if(t<a[i]){t=r;break}r=a[i]}return t};t.checkNavigable=v;var b=function(e){var t=e.centerMode?e.slideWidth*Math.floor(e.slidesToShow/2):0;if(e.swipeToSlide){var a,r=e.listRef.querySelectorAll(".slick-slide");if(Array.from(r).every((function(r){if(e.vertical){if(r.offsetTop+p(r)/2>-1*e.swipeLeft)return a=r,!1}else if(r.offsetLeft-t+f(r)/2>-1*e.swipeLeft)return a=r,!1;return!0})),!a)return 0;var i=!0===e.rtl?e.slideCount-e.currentSlide:e.currentSlide;return Math.abs(a.dataset.index-i)||1}return e.slidesToScroll};t.getSlideCount=b;var y=function(e,t){return t.reduce((function(t,a){return t&&e.hasOwnProperty(a)}),!0)?null:console.error("Keys Missing:",e)};t.checkSpecKeys=y;var w=function(e){var t,a;y(e,["left","variableWidth","slideCount","slidesToShow","slideWidth"]);var r=e.slideCount+2*e.slidesToShow;e.vertical?a=r*e.slideHeight:t=j(e)*e.slideWidth;var n={opacity:1,transition:"",WebkitTransition:""};if(e.useTransform){var o=e.vertical?"translate3d(0px, "+e.left+"px, 0px)":"translate3d("+e.left+"px, 0px, 0px)",l=e.vertical?"translate3d(0px, "+e.left+"px, 0px)":"translate3d("+e.left+"px, 0px, 0px)",s=e.vertical?"translateY("+e.left+"px)":"translateX("+e.left+"px)";n=(0,i.default)((0,i.default)({},n),{},{WebkitTransform:o,transform:l,msTransform:s})}else e.vertical?n.top=e.left:n.left=e.left;return e.fade&&(n={opacity:1}),t&&(n.width=t),a&&(n.height=a),window&&!window.addEventListener&&window.attachEvent&&(e.vertical?n.marginTop=e.left+"px":n.marginLeft=e.left+"px"),n};t.getTrackCSS=w;var S=function(e){y(e,["left","variableWidth","slideCount","slidesToShow","slideWidth","speed","cssEase"]);var t=w(e);return e.useTransform?(t.WebkitTransition="-webkit-transform "+e.speed+"ms "+e.cssEase,t.transition="transform "+e.speed+"ms "+e.cssEase):e.vertical?t.transition="top "+e.speed+"ms "+e.cssEase:t.transition="left "+e.speed+"ms "+e.cssEase,t};t.getTrackAnimateCSS=S;var k=function(e){if(e.unslick)return 0;y(e,["slideIndex","trackRef","infinite","centerMode","slideCount","slidesToShow","slidesToScroll","slideWidth","listWidth","variableWidth","slideHeight"]);var t,a,r=e.slideIndex,i=e.trackRef,n=e.infinite,o=e.centerMode,l=e.slideCount,s=e.slidesToShow,d=e.slidesToScroll,c=e.slideWidth,u=e.listWidth,f=e.variableWidth,p=e.slideHeight,h=e.fade,g=e.vertical;if(h||1===e.slideCount)return 0;var m=0;if(n?(m=-x(e),l%d!=0&&r+d>l&&(m=-(r>l?s-(r-l):l%d)),o&&(m+=parseInt(s/2))):(l%d!=0&&r+d>l&&(m=s-l%d),o&&(m=parseInt(s/2))),t=g?r*p*-1+m*p:r*c*-1+m*c,!0===f){var v,b=i&&i.node;if(v=r+x(e),t=(a=b&&b.childNodes[v])?-1*a.offsetLeft:0,!0===o){v=n?r+x(e):r,a=b&&b.children[v],t=0;for(var w=0;w<v;w++)t-=b&&b.children[w]&&b.children[w].offsetWidth;t-=parseInt(e.centerPadding),t+=a&&(u-a.offsetWidth)/2}}return t};t.getTrackLeft=k;var x=function(e){return e.unslick||!e.infinite?0:e.variableWidth?e.slideCount:e.slidesToShow+(e.centerMode?1:0)};t.getPreClones=x;var O=function(e){return e.unslick||!e.infinite?0:e.slideCount};t.getPostClones=O;var j=function(e){return 1===e.slideCount?1:x(e)+e.slideCount+O(e)};t.getTotalSlides=j;var C=function(e){return e.targetSlide>e.currentSlide?e.targetSlide>e.currentSlide+E(e)?"left":"right":e.targetSlide<e.currentSlide-T(e)?"right":"left"};t.siblingDirection=C;var E=function(e){var t=e.slidesToShow,a=e.centerMode,r=e.rtl,i=e.centerPadding;if(a){var n=(t-1)/2+1;return parseInt(i)>0&&(n+=1),r&&t%2==0&&(n+=1),n}return r?0:t-1};t.slidesOnRight=E;var T=function(e){var t=e.slidesToShow,a=e.centerMode,r=e.rtl,i=e.centerPadding;if(a){var n=(t-1)/2+1;return parseInt(i)>0&&(n+=1),r||t%2!=0||(n+=1),n}return r?t-1:0};t.slidesOnLeft=T;t.canUseDOM=function(){return!("undefined"==typeof window||!window.document||!window.document.createElement)}},"9eSz":function(e,t,a){"use strict";var r=a("5NKs");t.__esModule=!0,t.default=void 0;var i,n=r(a("v06X")),o=r(a("XEEL")),l=r(a("uDP2")),s=r(a("j8BX")),d=r(a("q1tI")),c=r(a("17x9")),u=function(e){var t=(0,s.default)({},e),a=t.resolutions,r=t.sizes,i=t.critical;return a&&(t.fixed=a,delete t.resolutions),r&&(t.fluid=r,delete t.sizes),i&&(t.loading="eager"),t.fluid&&(t.fluid=k([].concat(t.fluid))),t.fixed&&(t.fixed=k([].concat(t.fixed))),t},f=function(e){var t=e.media;return!!t&&(b&&!!window.matchMedia(t).matches)},p=function(e){var t=e.fluid,a=e.fixed,r=h(t||a||[]);return r&&r.src},h=function(e){if(b&&function(e){return!!e&&Array.isArray(e)&&e.some((function(e){return void 0!==e.media}))}(e)){var t=e.findIndex(f);if(-1!==t)return e[t];var a=e.findIndex((function(e){return void 0===e.media}));if(-1!==a)return e[a]}return e[0]},g=Object.create({}),m=function(e){var t=u(e),a=p(t);return g[a]||!1},v="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype,b="undefined"!=typeof window,y=b&&window.IntersectionObserver,w=new WeakMap;function S(e){return e.map((function(e){var t=e.src,a=e.srcSet,r=e.srcSetWebp,i=e.media,n=e.sizes;return d.default.createElement(d.default.Fragment,{key:t},r&&d.default.createElement("source",{type:"image/webp",media:i,srcSet:r,sizes:n}),a&&d.default.createElement("source",{media:i,srcSet:a,sizes:n}))}))}function k(e){var t=[],a=[];return e.forEach((function(e){return(e.media?t:a).push(e)})),[].concat(t,a)}function x(e){return e.map((function(e){var t=e.src,a=e.media,r=e.tracedSVG;return d.default.createElement("source",{key:t,media:a,srcSet:r})}))}function O(e){return e.map((function(e){var t=e.src,a=e.media,r=e.base64;return d.default.createElement("source",{key:t,media:a,srcSet:r})}))}function j(e,t){var a=e.srcSet,r=e.srcSetWebp,i=e.media,n=e.sizes;return"<source "+(t?"type='image/webp' ":"")+(i?'media="'+i+'" ':"")+'srcset="'+(t?r:a)+'" '+(n?'sizes="'+n+'" ':"")+"/>"}var C=function(e,t){var a=(void 0===i&&"undefined"!=typeof window&&window.IntersectionObserver&&(i=new window.IntersectionObserver((function(e){e.forEach((function(e){if(w.has(e.target)){var t=w.get(e.target);(e.isIntersecting||e.intersectionRatio>0)&&(i.unobserve(e.target),w.delete(e.target),t())}}))}),{rootMargin:"200px"})),i);return a&&(a.observe(e),w.set(e,t)),function(){a.unobserve(e),w.delete(e)}},E=function(e){var t=e.src?'src="'+e.src+'" ':'src="" ',a=e.sizes?'sizes="'+e.sizes+'" ':"",r=e.srcSet?'srcset="'+e.srcSet+'" ':"",i=e.title?'title="'+e.title+'" ':"",n=e.alt?'alt="'+e.alt+'" ':'alt="" ',o=e.width?'width="'+e.width+'" ':"",l=e.height?'height="'+e.height+'" ':"",s=e.crossOrigin?'crossorigin="'+e.crossOrigin+'" ':"",d=e.loading?'loading="'+e.loading+'" ':"",c=e.draggable?'draggable="'+e.draggable+'" ':"";return"<picture>"+e.imageVariants.map((function(e){return(e.srcSetWebp?j(e,!0):"")+j(e)})).join("")+"<img "+d+o+l+a+r+t+n+i+s+c+'style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture>'},T=d.default.forwardRef((function(e,t){var a=e.src,r=e.imageVariants,i=e.generateSources,n=e.spreadProps,o=e.ariaHidden,l=d.default.createElement(z,(0,s.default)({ref:t,src:a},n,{ariaHidden:o}));return r.length>1?d.default.createElement("picture",null,i(r),l):l})),z=d.default.forwardRef((function(e,t){var a=e.sizes,r=e.srcSet,i=e.src,n=e.style,o=e.onLoad,c=e.onError,u=e.loading,f=e.draggable,p=e.ariaHidden,h=(0,l.default)(e,["sizes","srcSet","src","style","onLoad","onError","loading","draggable","ariaHidden"]);return d.default.createElement("img",(0,s.default)({"aria-hidden":p,sizes:a,srcSet:r,src:i},h,{onLoad:o,onError:c,ref:t,loading:u,draggable:f,style:(0,s.default)({position:"absolute",top:0,left:0,width:"100%",height:"100%",objectFit:"cover",objectPosition:"center"},n)}))}));z.propTypes={style:c.default.object,onError:c.default.func,onLoad:c.default.func};var L=function(e){function t(t){var a;(a=e.call(this,t)||this).seenBefore=b&&m(t),a.isCritical="eager"===t.loading||t.critical,a.addNoScript=!(a.isCritical&&!t.fadeIn),a.useIOSupport=!v&&y&&!a.isCritical&&!a.seenBefore;var r=a.isCritical||b&&(v||!a.useIOSupport);return a.state={isVisible:r,imgLoaded:!1,imgCached:!1,fadeIn:!a.seenBefore&&t.fadeIn,isHydrated:!1},a.imageRef=d.default.createRef(),a.placeholderRef=t.placeholderRef||d.default.createRef(),a.handleImageLoaded=a.handleImageLoaded.bind((0,n.default)(a)),a.handleRef=a.handleRef.bind((0,n.default)(a)),a}(0,o.default)(t,e);var a=t.prototype;return a.componentDidMount=function(){if(this.setState({isHydrated:b}),this.state.isVisible&&"function"==typeof this.props.onStartLoad&&this.props.onStartLoad({wasCached:m(this.props)}),this.isCritical){var e=this.imageRef.current;e&&e.complete&&this.handleImageLoaded()}},a.componentWillUnmount=function(){this.cleanUpListeners&&this.cleanUpListeners()},a.handleRef=function(e){var t=this;this.useIOSupport&&e&&(this.cleanUpListeners=C(e,(function(){var e=m(t.props);t.state.isVisible||"function"!=typeof t.props.onStartLoad||t.props.onStartLoad({wasCached:e}),t.setState({isVisible:!0},(function(){t.setState({imgLoaded:e,imgCached:!(!t.imageRef.current||!t.imageRef.current.currentSrc)})}))})))},a.handleImageLoaded=function(){var e,t,a;e=this.props,t=u(e),(a=p(t))&&(g[a]=!0),this.setState({imgLoaded:!0}),this.props.onLoad&&this.props.onLoad()},a.render=function(){var e=u(this.props),t=e.title,a=e.alt,r=e.className,i=e.style,n=void 0===i?{}:i,o=e.imgStyle,l=void 0===o?{}:o,c=e.placeholderStyle,f=void 0===c?{}:c,p=e.placeholderClassName,g=e.fluid,m=e.fixed,v=e.backgroundColor,b=e.durationFadeIn,y=e.Tag,w=e.itemProp,k=e.loading,j=e.draggable,C=g||m;if(!C)return null;var L=!1===this.state.fadeIn||this.state.imgLoaded,M=!0===this.state.fadeIn&&!this.state.imgCached,P=(0,s.default)({opacity:L?1:0,transition:M?"opacity "+b+"ms":"none"},l),N="boolean"==typeof v?"lightgray":v,R={transitionDelay:b+"ms"},I=(0,s.default)({opacity:this.state.imgLoaded?0:1},M&&R,l,f),F={title:t,alt:this.state.isVisible?"":a,style:I,className:p,itemProp:w},D=this.state.isHydrated?h(C):C[0];if(g)return d.default.createElement(y,{className:(r||"")+" gatsby-image-wrapper",style:(0,s.default)({position:"relative",overflow:"hidden",maxWidth:D.maxWidth?D.maxWidth+"px":null,maxHeight:D.maxHeight?D.maxHeight+"px":null},n),ref:this.handleRef,key:"fluid-"+JSON.stringify(D.srcSet)},d.default.createElement(y,{"aria-hidden":!0,style:{width:"100%",paddingBottom:100/D.aspectRatio+"%"}}),N&&d.default.createElement(y,{"aria-hidden":!0,title:t,style:(0,s.default)({backgroundColor:N,position:"absolute",top:0,bottom:0,opacity:this.state.imgLoaded?0:1,right:0,left:0},M&&R)}),D.base64&&d.default.createElement(T,{ariaHidden:!0,ref:this.placeholderRef,src:D.base64,spreadProps:F,imageVariants:C,generateSources:O}),D.tracedSVG&&d.default.createElement(T,{ariaHidden:!0,ref:this.placeholderRef,src:D.tracedSVG,spreadProps:F,imageVariants:C,generateSources:x}),this.state.isVisible&&d.default.createElement("picture",null,S(C),d.default.createElement(z,{alt:a,title:t,sizes:D.sizes,src:D.src,crossOrigin:this.props.crossOrigin,srcSet:D.srcSet,style:P,ref:this.imageRef,onLoad:this.handleImageLoaded,onError:this.props.onError,itemProp:w,loading:k,draggable:j})),this.addNoScript&&d.default.createElement("noscript",{dangerouslySetInnerHTML:{__html:E((0,s.default)({alt:a,title:t,loading:k},D,{imageVariants:C}))}}));if(m){var H=(0,s.default)({position:"relative",overflow:"hidden",display:"inline-block",width:D.width,height:D.height},n);return"inherit"===n.display&&delete H.display,d.default.createElement(y,{className:(r||"")+" gatsby-image-wrapper",style:H,ref:this.handleRef,key:"fixed-"+JSON.stringify(D.srcSet)},N&&d.default.createElement(y,{"aria-hidden":!0,title:t,style:(0,s.default)({backgroundColor:N,width:D.width,opacity:this.state.imgLoaded?0:1,height:D.height},M&&R)}),D.base64&&d.default.createElement(T,{ariaHidden:!0,ref:this.placeholderRef,src:D.base64,spreadProps:F,imageVariants:C,generateSources:O}),D.tracedSVG&&d.default.createElement(T,{ariaHidden:!0,ref:this.placeholderRef,src:D.tracedSVG,spreadProps:F,imageVariants:C,generateSources:x}),this.state.isVisible&&d.default.createElement("picture",null,S(C),d.default.createElement(z,{alt:a,title:t,width:D.width,height:D.height,sizes:D.sizes,src:D.src,crossOrigin:this.props.crossOrigin,srcSet:D.srcSet,style:P,ref:this.imageRef,onLoad:this.handleImageLoaded,onError:this.props.onError,itemProp:w,loading:k,draggable:j})),this.addNoScript&&d.default.createElement("noscript",{dangerouslySetInnerHTML:{__html:E((0,s.default)({alt:a,title:t,loading:k},D,{imageVariants:C}))}}))}return null},t}(d.default.Component);L.defaultProps={fadeIn:!0,durationFadeIn:500,alt:"",Tag:"div",loading:"lazy"};var M=c.default.shape({width:c.default.number.isRequired,height:c.default.number.isRequired,src:c.default.string.isRequired,srcSet:c.default.string.isRequired,base64:c.default.string,tracedSVG:c.default.string,srcWebp:c.default.string,srcSetWebp:c.default.string,media:c.default.string}),P=c.default.shape({aspectRatio:c.default.number.isRequired,src:c.default.string.isRequired,srcSet:c.default.string.isRequired,sizes:c.default.string.isRequired,base64:c.default.string,tracedSVG:c.default.string,srcWebp:c.default.string,srcSetWebp:c.default.string,media:c.default.string,maxWidth:c.default.number,maxHeight:c.default.number});function N(e){return function(t,a,r){var i;if(!t.fixed&&!t.fluid)throw new Error("The prop `fluid` or `fixed` is marked as required in `"+r+"`, but their values are both `undefined`.");c.default.checkPropTypes(((i={})[a]=e,i),t,"prop",r)}}L.propTypes={resolutions:M,sizes:P,fixed:N(c.default.oneOfType([M,c.default.arrayOf(M)])),fluid:N(c.default.oneOfType([P,c.default.arrayOf(P)])),fadeIn:c.default.bool,durationFadeIn:c.default.number,title:c.default.string,alt:c.default.string,className:c.default.oneOfType([c.default.string,c.default.object]),critical:c.default.bool,crossOrigin:c.default.oneOfType([c.default.string,c.default.bool]),style:c.default.object,imgStyle:c.default.object,placeholderStyle:c.default.object,placeholderClassName:c.default.string,backgroundColor:c.default.oneOfType([c.default.string,c.default.bool]),onLoad:c.default.func,onError:c.default.func,onStartLoad:c.default.func,Tag:c.default.string,itemProp:c.default.string,loading:c.default.oneOf(["auto","lazy","eager"]),draggable:c.default.bool};var R=L;t.default=R},BJfS:function(e,t){e.exports=function(e){return e.replace(/[A-Z]/g,(function(e){return"-"+e.toLowerCase()})).toLowerCase()}},F1Ou:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r={animating:!1,autoplaying:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,dragging:!1,edgeDragged:!1,initialized:!1,lazyLoadedList:[],listHeight:null,listWidth:null,scrolling:!1,slideCount:null,slideHeight:null,slideWidth:null,swipeLeft:null,swiped:!1,swiping:!1,touchObject:{startX:0,startY:0,curX:0,curY:0},trackStyle:{},trackWidth:0,targetSlide:0};t.default=r},"N/JB":function(e,t,a){"use strict";var r=a("5NKs");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=r(a("ToDW")).default;t.default=i},Oyq8:function(e,t,a){"use strict";a.d(t,"b",(function(){return r})),a.d(t,"a",(function(){return i}));var r=[{name:" Aaron Suddjian",github:"https://github.com/suddjian",image:"https://github.com/suddjian.png"},{name:"Beto Dealmeida",github:"https://github.com/betodealmeida",image:"https://github.com/betodealmeida.png"},{name:"Bogdan Kyryliuk",github:"https://github.com/bkyryliuk",image:"https://github.com/bkyryliuk.png"},{name:"Chris Williams",github:"https://github.com/williaster",image:"https://github.com/williaster.png"},{name:"Craig Rueda",github:"https://github.com/craig-rueda",image:"https://github.com/craig-rueda.png"},{name:"Daniel Gaspar",github:"https://github.com/dpgaspar",image:"https://github.com/dpgaspar.png"},{name:"Erik Ritker",github:"https://github.com/etr2460",image:"https://github.com/etr2460.png"},{name:"Evan Rusackas",github:"https://github.com/rusackas",image:"https://github.com/rusackas.png"},{name:"Grace Guo",github:"https://github.com/graceguo-supercat",image:"https://github.com/graceguo-supercat.png"},{name:"Jeff Feng",github:"https://github.com/jfeng15",image:"https://github.com/jfeng15.png"},{name:"Jesse Yang",github:"https://github.com/ktmud",image:"https://github.com/ktmud.png"},{name:"John Bodley",github:"https://github.com/john-bodley",image:"https://github.com/john-bodley.png"},{name:"Krist Wongsuphasawat",github:"https://github.com/kristw",image:"https://github.com/kristw.png"},{name:"Maxime Beauchemin",github:"https://github.com/mistercrunch",image:"https://github.com/mistercrunch.png"},{name:"Michelle Thomas",github:"https://github.com/michellethomas",image:"https://github.com/michellethomas.png"},{name:"Nishant Bangarwa",github:"https://github.com/nishantmonu51",image:"https://github.com/nishantmonu51.png"},{name:"Tai Dupree",github:"https://github.com/nytai",image:"https://github.com/nytai.png"},{name:"Ville Brofeldt",github:"https://github.com/villebro",image:"https://github.com/villebro.png"},{name:"Will Barrett",github:"https://github.com/willbarrett",image:"https://github.com/willbarrett.png"}];void 0!==r&&r&&r===Object(r)&&Object.isExtensible(r)&&!r.hasOwnProperty("__filemeta")&&Object.defineProperty(r,"__filemeta",{configurable:!0,value:{name:"pmc",filename:"src/resources/data.js"}}),void 0!==r&&r&&r===Object(r)&&Object.isExtensible(r)&&!r.hasOwnProperty("__filemeta")&&Object.defineProperty(r,"__filemeta",{configurable:!0,value:{name:"pmc",filename:"src/resources/data.js"}});var i=[{title:"Amazon Redshfit",href:"https://aws.amazon.com/redshift/",imgName:"aws-redshift.png",width:50},{title:"Apache Druid",href:"http://druid.io/",imgName:"druid.png"},{title:"Apache Kylin",href:"http://kylin.apache.org/",imgName:"apache-kylin.png"},{title:"BigQuery",href:"https://cloud.google.com/bigquery/",imgName:"googleBQ.png"},{title:"ClickHouse",href:"https://clickhouse.tech/",imgName:"clickhouse.png"},{title:"Dremio",href:"https://dremio.com/",imgName:"dremio.png"},{title:"Exasol",href:"https://www.exasol.com/en/",imgName:"exasol.png"},{title:"FireBirdSql",href:"https://firebirdsql.org/",imgName:"firebird.png"},{title:"Green Plum",href:"https://greenplum.org/",imgName:"greenplum.png"},{title:"IBM Db2",href:"https://www.ibm.com/analytics/db2",imgName:"ibmdb2.png"},{title:"MySQL",href:"https://www.mysql.com/",imgName:"mysql.png"},{title:"Microsoft SqlServer",href:"https://www.microsoft.com/en-us/sql-server",imgName:"msql.png"},{title:"MonetDB",href:"https://www.monetdb.org/",imgName:"monet.png"},{title:"Oracle",href:"https://www.oracle.com/database/",imgName:"oraclelogo.png"},{title:"PostgresSQL",href:"https://www.postgresql.org/",imgName:"postsql.png"},{title:"Presto",href:"https://prestodb.io/",imgName:"presto-og.png"},{title:"Snowflake",href:"https://www.snowflake.com/",imgName:"snowflake.png"},{title:"SQLite",href:"https://www.sqlite.org/index.html",imgName:"sqllite.png"},{title:"Vertica",href:"https://www.vertica.com/",imgName:"vertica.png"}];void 0!==i&&i&&i===Object(i)&&Object.isExtensible(i)&&!i.hasOwnProperty("__filemeta")&&Object.defineProperty(i,"__filemeta",{configurable:!0,value:{name:"Databases",filename:"src/resources/data.js"}}),void 0!==i&&i&&i===Object(i)&&Object.isExtensible(i)&&!i.hasOwnProperty("__filemeta")&&Object.defineProperty(i,"__filemeta",{configurable:!0,value:{name:"Databases",filename:"src/resources/data.js"}})},QeBL:function(e,t,a){"use strict";a.r(t);a("SchZ"),a("mdmF");var r=a("0jh0"),i=a.n(r),n=a("j8BX"),o=a.n(n),l=a("phZJ"),s=a.n(l),d=a("lFqo"),c=a.n(d),u=a("IVAY"),f=a.n(u),p=a("CPqs"),h=a.n(p),g=a("q1tI"),m=a.n(g),v=a("lAhR"),b=a.n(v),y=a("N/JB"),w=a.n(y),S=a("TSYQ"),k=a.n(S),x=a("H84U"),O=function(e){f()(a,e);var t=h()(a);function a(e){var r;return s()(this,a),(r=t.call(this,e)).saveSlick=function(e){r.slick=e},r.onWindowResized=function(){r.props.autoplay&&r.slick&&r.slick.innerSlider&&r.slick.innerSlider.autoPlay&&r.slick.innerSlider.autoPlay()},r.renderCarousel=function(e){var t,a,n=e.getPrefixCls,l=e.direction,s=o()({},r.props);"fade"===s.effect&&(s.fade=!0);var d=n("carousel",s.prefixCls),c=r.getDotPosition();s.vertical="left"===c||"right"===c;var u=!!s.dots,f=k()("slick-dots","".concat("slick-dots","-").concat(c||"bottom"),"boolean"!=typeof s.dots&&(null===(a=s.dots)||void 0===a?void 0:a.className)),p=k()(d,(t={},i()(t,"".concat(d,"-rtl"),"rtl"===l),i()(t,"".concat(d,"-vertical"),s.vertical),t));return g.createElement("div",{className:p},g.createElement(w.a,o()({ref:r.saveSlick},s,{dots:u,dotsClass:f})))},r.onWindowResized=b()(r.onWindowResized,500,{leading:!1}),r}return c()(a,[{key:"componentDidMount",value:function(){this.props.autoplay&&window.addEventListener("resize",this.onWindowResized),this.innerSlider=this.slick&&this.slick.innerSlider}},{key:"componentDidUpdate",value:function(e){g.Children.count(this.props.children)!==g.Children.count(e.children)&&this.goTo(this.props.initialSlide||0,!1)}},{key:"componentWillUnmount",value:function(){this.props.autoplay&&(window.removeEventListener("resize",this.onWindowResized),this.onWindowResized.cancel())}},{key:"getDotPosition",value:function(){var e=this.props.dotPosition;return void 0===e?"bottom":e}},{key:"next",value:function(){this.slick.slickNext()}},{key:"prev",value:function(){this.slick.slickPrev()}},{key:"goTo",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.slick.slickGoTo(e,t)}},{key:"render",value:function(){return g.createElement(x.a,null,this.renderCarousel)}}]),a}(g.Component);O.defaultProps={dots:!0,arrows:!1,draggable:!1};a("Jmwx");var j=a("BMrR"),C=(a("rO+z"),a("kPKH")),E=(a("L/Qf"),a("2/Rp")),T=a("52AM"),z=a("Wbzz"),L=a("dCk4"),M=a("qKvR"),P=a("lOwS"),N={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M834.1 469.2A347.49 347.49 0 00751.2 354l-29.1-26.7a8.09 8.09 0 00-13 3.3l-13 37.3c-8.1 23.4-23 47.3-44.1 70.8-1.4 1.5-3 1.9-4.1 2-1.1.1-2.8-.1-4.3-1.5-1.4-1.2-2.1-3-2-4.8 3.7-60.2-14.3-128.1-53.7-202C555.3 171 510 123.1 453.4 89.7l-41.3-24.3c-5.4-3.2-12.3 1-12 7.3l2.2 48c1.5 32.8-2.3 61.8-11.3 85.9-11 29.5-26.8 56.9-47 81.5a295.64 295.64 0 01-47.5 46.1 352.6 352.6 0 00-100.3 121.5A347.75 347.75 0 00160 610c0 47.2 9.3 92.9 27.7 136a349.4 349.4 0 0075.5 110.9c32.4 32 70 57.2 111.9 74.7C418.5 949.8 464.5 959 512 959s93.5-9.2 136.9-27.3A348.6 348.6 0 00760.8 857c32.4-32 57.8-69.4 75.5-110.9a344.2 344.2 0 0027.7-136c0-48.8-10-96.2-29.9-140.9zM713 808.5c-53.7 53.2-125 82.4-201 82.4s-147.3-29.2-201-82.4c-53.5-53.1-83-123.5-83-198.4 0-43.5 9.8-85.2 29.1-124 18.8-37.9 46.8-71.8 80.8-97.9a349.6 349.6 0 0058.6-56.8c25-30.5 44.6-64.5 58.2-101a240 240 0 0012.1-46.5c24.1 22.2 44.3 49 61.2 80.4 33.4 62.6 48.8 118.3 45.8 165.7a74.01 74.01 0 0024.4 59.8 73.36 73.36 0 0053.4 18.8c19.7-1 37.8-9.7 51-24.4 13.3-14.9 24.8-30.1 34.4-45.6 14 17.9 25.7 37.4 35 58.4 15.9 35.8 24 73.9 24 113.1 0 74.9-29.5 145.4-83 198.4z"}}]},name:"fire",theme:"outlined"},R=a("6VBw"),I=function(e,t){return g.createElement(R.a,Object.assign({},e,{ref:t,icon:N}))};I.displayName="FireOutlined";var F=g.forwardRef(I),D={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M832 64H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V96c0-17.7-14.3-32-32-32zm-600 72h560v208H232V136zm560 480H232V408h560v208zm0 272H232V680h560v208zM304 240a40 40 0 1080 0 40 40 0 10-80 0zm0 272a40 40 0 1080 0 40 40 0 10-80 0zm0 272a40 40 0 1080 0 40 40 0 10-80 0z"}}]},name:"database",theme:"outlined"},H=function(e,t){return g.createElement(R.a,Object.assign({},e,{ref:t,icon:D}))};H.displayName="DatabaseOutlined";var A=g.forwardRef(H),W={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M888.3 693.2c-42.5-24.6-94.3-18-129.2 12.8l-53-30.7V523.6c0-15.7-8.4-30.3-22-38.1l-136-78.3v-67.1c44.2-15 76-56.8 76-106.1 0-61.9-50.1-112-112-112s-112 50.1-112 112c0 49.3 31.8 91.1 76 106.1v67.1l-136 78.3c-13.6 7.8-22 22.4-22 38.1v151.6l-53 30.7c-34.9-30.8-86.8-37.4-129.2-12.8-53.5 31-71.7 99.4-41 152.9 30.8 53.5 98.9 71.9 152.2 41 42.5-24.6 62.7-73 53.6-118.8l48.7-28.3 140.6 81c6.8 3.9 14.4 5.9 22 5.9s15.2-2 22-5.9L674.5 740l48.7 28.3c-9.1 45.7 11.2 94.2 53.6 118.8 53.3 30.9 121.5 12.6 152.2-41 30.8-53.6 12.6-122-40.7-152.9zm-673 138.4a47.6 47.6 0 01-65.2-17.6c-13.2-22.9-5.4-52.3 17.5-65.5a47.6 47.6 0 0165.2 17.6c13.2 22.9 5.4 52.3-17.5 65.5zM522 463.8zM464 234a48.01 48.01 0 0196 0 48.01 48.01 0 01-96 0zm170 446.2l-122 70.3-122-70.3V539.8l122-70.3 122 70.3v140.4zm239.9 133.9c-13.2 22.9-42.4 30.8-65.2 17.6-22.8-13.2-30.7-42.6-17.5-65.5s42.4-30.8 65.2-17.6c22.9 13.2 30.7 42.5 17.5 65.5z"}}]},name:"deployment-unit",theme:"outlined"},_=function(e,t){return g.createElement(R.a,Object.assign({},e,{ref:t,icon:W}))};_.displayName="DeploymentUnitOutlined";var q=g.forwardRef(_),B={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M888 792H200V168c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v688c0 4.4 3.6 8 8 8h752c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM288 604a64 64 0 10128 0 64 64 0 10-128 0zm118-224a48 48 0 1096 0 48 48 0 10-96 0zm158 228a96 96 0 10192 0 96 96 0 10-192 0zm148-314a56 56 0 10112 0 56 56 0 10-112 0z"}}]},name:"dot-chart",theme:"outlined"},V=function(e,t){return g.createElement(R.a,Object.assign({},e,{ref:t,icon:B}))};V.displayName="DotChartOutlined";var G=g.forwardRef(V);function X(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function Y(e,t){for(var a=0;a<t.length;a++){var r=t[a];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var U=a("gUOe");var K=a("0QZy"),Q=a("uRdJ");function J(e,t){return!t||"object"!==Object(K.a)(t)&&"function"!=typeof t?Object(Q.a)(e):t}function Z(e){return(Z=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function $(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function ee(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?$(Object(a),!0).forEach((function(t){X(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):$(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function te(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var a,r=Z(e);if(t){var i=Z(this).constructor;a=Reflect.construct(r,arguments,i)}else a=r.apply(this,arguments);return J(this,a)}}var ae=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&Object(U.a)(e,t)}(o,e);var t,r,i,n=te(o);function o(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,o),(t=n.call(this,e)).$=m.a.createRef(),t._=m.a.createRef(),t}return t=o,(r=[{key:"render",value:function(){return m.a.createElement("span",{ref:this.$},m.a.createElement("a",ee(ee({},this.props),{},{ref:this._}),this.props.children))}},{key:"componentDidMount",value:function(){this.paint()}},{key:"getSnapshotBeforeUpdate",value:function(){return this.reset(),null}},{key:"componentDidUpdate",value:function(){this.paint()}},{key:"componentWillUnmount",value:function(){this.reset()}},{key:"paint",value:function(){var e=this,t=this.$.current.appendChild(document.createElement("span"));Promise.resolve().then(a.bind(null,"q01k")).then((function(a){(0,a.render)(t.appendChild(e._.current),(function(e){try{t.parentNode.replaceChild(e,t)}catch(t){}}))}))}},{key:"reset",value:function(){this.$.current.replaceChild(this._.current,this.$.current.lastChild)}}])&&Y(t.prototype,r),i&&Y(t,i),o}(g.PureComponent),re=a("Oyq8"),ie=a("9Dj+"),ne=a("9eSz"),oe=a.n(ne),le=function(e){var t=e.imageName,a=Object(z.useStaticQuery)("1341666470").allImages.edges.map((function(e){var t,a;return null===(t=e.node)||void 0===t||null===(a=t.childImageSharp)||void 0===a?void 0:a.fixed})).filter((function(e){return(null==e?void 0:e.originalName)===t}));return Object(M.jsx)(oe.a,{fixed:a[0]})},se=le;void 0!==le&&le&&le===Object(le)&&Object.isExtensible(le)&&!le.hasOwnProperty("__filemeta")&&Object.defineProperty(le,"__filemeta",{configurable:!0,value:{name:"DbImage",filename:"src/components/DbImage.tsx"}});a("TpwP");var de=a("vrFN"),ce=a("fT7D"),ue=a.n(ce),fe=a("Al62");var pe=P.supersetTheme.colors,he=Object(M.css)("text-align:center;.alert{color:",pe.alert.base,";}.error{color:",pe.error.base,";}.warning{color:",pe.warning.base,";}.info{color:",pe.info.base,";}.success{color:",pe.success.base,";}.secondary{color:",pe.secondary.base,";}.info-text{font-size:32px;font-weight:normal;max-width:600px;margin:auto;}.info-text-smaller{font-size:24px;max-width:800px;}"),ge=Object(M.css)("position:relative;padding-top:131px;padding-bottom:80px;padding-left:20px;padding-right:20px;background-image:url('/images/data-point.jpg');background-size:cover;background-position-x:right;.github-section{margin-bottom:40px;margin-top:40px;.github-button{margin:5px;}}.logo-horiz{margin-top:20px;margin-bottom:20px;width:600px;max-width:100%;",[fe.d[3]],"{width:550px;}",[fe.d[2]],"{width:450px;}",[fe.d[1]],"{width:425px;}",[fe.d[0]],"{width:400px;}}.alert{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb;max-width:600px;margin:0 auto;padding:0.75rem 1.25rem;margin-top:83px;border:1px solid transparent;border-radius:0.25rem;}"),me={name:"177fmpb",styles:"font-size:55px;text-align:center;"},ve=Object(M.css)("background:#fff;padding:5vw 0;margin-top:0px;margin-bottom:30px;.featureList{padding:40px;width:100%;list-style-type:none;margin:0 auto;max-width:1000px;.feature{padding:20px;text-align:center;margin-bottom:40px;.imagePlaceHolder{svg{width:70px;height:70px;}margin-bottom:15px;}.featureText{color:",pe.grayscale.dark2,";font-size:16px;strong{font-size:22px;}}}}.heading{font-size:22px;margin:0 auto;text-align:center;}"),be={name:"1as7kk4",styles:"background:white;margin-bottom:64px;.databaseSub{text-align:center;display:block;margin-bottom:40px;font-size:18px;}.database-list{margin-top:100px;list-style-type:none;padding:0px;max-width:1000px;margin:0 auto;display:flex;flex-wrap:wrap;justify-content:space-around;margin-bottom:50px;li{padding:15px;}}"},ye=Object(M.css)(".toggleContainer{display:flex;flex-direction:column;margin-bottom:100px;position:relative;.toggleBtns{display:flex;flex-direction:row;justify-content:center;.toggle{margin:10px;color:#666;border:1px solid #888;background-color:#20a7c911;border-radius:3px;padding:16px;transition:all 0.25s;overflow:visible;",[fe.d[0]],"{> span{display:none;position:absolute;bottom:0px;left:50%;width:100%;transform:translate(-50%,100%);}h2{font-size:14px;margin:0;}}&:hover{cursor:pointer;color:",pe.primary.base,";border:1px solid ",pe.primary.base,";}&.active{background:red;background:#20a7c933;",[fe.d[0]],"{> span{display:block;}}}}}.imageContainer{img{margin:0 auto;width:80%;box-shadow:0 0 3px #aaa;margin-top:5px;margin-bottom:5px;}}}"),we=function(e){var t=e.icon,a=e.title,r=e.descr;return Object(M.jsx)("li",{className:"feature"},Object(M.jsx)("div",{className:"imagePlaceHolder"},t),Object(M.jsx)("div",{className:"featureText"},Object(M.jsx)("h3",null,a),r))},Se=Object(T.b)()((function(){var e=Object(T.d)(),t=Object(g.useRef)(null),a=Object(g.useState)(0),r=a[0],i=a[1];return Object(M.jsx)(L.a,{theme:e},Object(M.jsx)(de.a,{title:"Superset"}),Object(M.jsx)(ie.a,null,Object(M.jsx)("div",{css:he},Object(M.jsx)("div",{css:ge},Object(M.jsx)("img",{className:"logo-horiz",src:ue.a,alt:"logo-horiz"}),Object(M.jsx)("div",{className:"info-text"},"Apache Superset is a modern data exploration and visualization platform"),Object(M.jsx)("div",{className:"github-section"},Object(M.jsx)("span",{className:"github-button"},Object(M.jsx)(ae,{href:"https://github.com/apache/superset","data-size":"large","data-show-count":"true","aria-label":"Star apache/superset on GitHub"},"Star")),Object(M.jsx)("span",{className:"github-button"},Object(M.jsx)(ae,{href:"https://github.com/apache/superset/subscription","data-size":"large","data-show-count":"true","aria-label":"Watch apache/superset on GitHub"},"Watch")),Object(M.jsx)("span",{className:"github-button"},Object(M.jsx)(ae,{href:"https://github.com/apache/superset/fork","data-size":"large","data-show-count":"true","aria-label":"Fork apache/superset on GitHub"},"Fork"))),Object(M.jsx)("div",null,Object(M.jsx)(z.Link,{to:"/docs/intro"},Object(M.jsx)(E.a,{type:"primary",size:"medium"},"Get Started")))),Object(M.jsx)("div",{css:ve},Object(M.jsx)("h2",{css:me},"Overview"),Object(M.jsx)("div",{className:"info-text info-text-smaller"},"Superset is fast, lightweight, intuitive, and loaded with options that make it easy for users of all skill sets to explore and visualize their data, from simple line charts to highly detailed geospatial charts."),Object(M.jsx)("ul",{className:"featureList ant-row"},Object(M.jsx)(j.a,null,Object(M.jsx)(C.a,{sm:24,md:12},Object(M.jsx)(we,{icon:Object(M.jsx)(F,{className:"warning"}),title:"Powerful yet easy to use",descr:"\n                    Quickly and easily integrate and explore your data, using\n                    either our simple no-code viz builder or state of the art SQL\n                    IDE.\n                  "})),Object(M.jsx)(C.a,{sm:24,md:12},Object(M.jsx)(we,{icon:Object(M.jsx)(A,{className:"info"}),title:"Integrates with modern databases",descr:"\n                    Superset can connect to any SQL based datasource\n                    through SQL Alchemy, including modern cloud native databases\n                    and engines at petabyte scale.\n                  "}))),Object(M.jsx)(j.a,null,Object(M.jsx)(C.a,{sm:24,md:12},Object(M.jsx)(we,{icon:Object(M.jsx)(q,{className:"success"}),title:"Modern architecture",descr:"\n                    Superset is lightweight and highly scalable, leveraging the\n                    power of your existing data infrastructure without requiring\n                    yet another ingestion layer.\n                  "})),Object(M.jsx)(C.a,{sm:24,md:12},Object(M.jsx)(we,{icon:Object(M.jsx)(G,{className:"alert"}),title:"Rich visualizations and dashboards",descr:"\n                    Superset ships with a wide array of beautiful visualizations.\n                    Our visualization plug-in architecture makes it easy to build\n                    custom visualizations that drop directly into Superset.\n                  "}))))),Object(M.jsx)("div",{css:ye},Object(M.jsx)("h2",{css:me},"Explore"),Object(M.jsx)("div",{className:"toggleContainer"},Object(M.jsx)("div",{className:"toggleBtns"},Object(M.jsx)("div",{className:"toggle "+(0===r?"active":null),onClick:function(){return t.current.goTo(0)},role:"button"},Object(M.jsx)("h2",null,"Explore"),Object(M.jsx)("span",null,"Explore your data using the array of data visualizations.")),Object(M.jsx)("div",{className:"toggle "+(1===r?"active":null),onClick:function(){return t.current.goTo(1)},role:"button"},Object(M.jsx)("h2",null,"View"),Object(M.jsx)("span",null,"View your data through interactive dashboards")),Object(M.jsx)("div",{className:"toggle "+(2===r?"active":null),onClick:function(){return t.current.goTo(2)},role:"button"},Object(M.jsx)("h2",null,"Investigate"),Object(M.jsx)("span",null,"Use SQL Lab to write queries to explore your data"))),Object(M.jsx)(O,{ref:t,effect:"scrollx",afterChange:function(e){i(e)}},Object(M.jsx)("div",{className:"imageContainer"},Object(M.jsx)("img",{src:"/images/explorer5.jpg",alt:""})),Object(M.jsx)("div",{className:"imageContainer"},Object(M.jsx)("img",{src:"/images/dashboard3.png",alt:""})),Object(M.jsx)("div",{className:"imageContainer"},Object(M.jsx)("img",{src:"/images/sqllab5.jpg",alt:""})))),Object(M.jsx)("div",{css:be},Object(M.jsx)("h2",{css:me},"Supported Databases"),Object(M.jsx)("ul",{className:"database-list"},re.a.map((function(e){var t=e.title,a=e.imgName,r=e.width,i=e.height;return Object(M.jsx)("li",null,Object(M.jsx)(se,{imageName:a,width:r,height:i,alt:t}))}))),Object(M.jsx)("span",{className:"databaseSub"},"... and many other",Object(M.jsx)("a",{href:"docs/databases/installing-database-drivers"}," ","compatible databases"," ")))))))}));t.default=Se;void 0!==Se&&Se&&Se===Object(Se)&&Object.isExtensible(Se)&&!Se.hasOwnProperty("__filemeta")&&Object.defineProperty(Se,"__filemeta",{configurable:!0,value:{name:"__DOCZ_DUMMY_EXPORT_DEFAULT",filename:"src/pages/index.tsx"}})},ToDW:function(e,t,a){"use strict";var r=a("5NKs");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=r(a("j8BX")),n=r(a("hrfQ")),o=r(a("phZJ")),l=r(a("lFqo")),s=r(a("v06X")),d=r(a("IVAY")),c=r(a("CPqs")),u=r(a("0jh0")),f=r(a("q1tI")),p=a("hQUZ"),h=r(a("pIsd")),g=r(a("cZFH")),m=a("3K4p"),v=function(e){(0,d.default)(a,e);var t=(0,c.default)(a);function a(e){var r;return(0,o.default)(this,a),r=t.call(this,e),(0,u.default)((0,s.default)(r),"innerSliderRefHandler",(function(e){return r.innerSlider=e})),(0,u.default)((0,s.default)(r),"slickPrev",(function(){return r.innerSlider.slickPrev()})),(0,u.default)((0,s.default)(r),"slickNext",(function(){return r.innerSlider.slickNext()})),(0,u.default)((0,s.default)(r),"slickGoTo",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return r.innerSlider.slickGoTo(e,t)})),(0,u.default)((0,s.default)(r),"slickPause",(function(){return r.innerSlider.pause("paused")})),(0,u.default)((0,s.default)(r),"slickPlay",(function(){return r.innerSlider.autoPlay("play")})),r.state={breakpoint:null},r._responsiveMediaHandlers=[],r}return(0,l.default)(a,[{key:"media",value:function(e,t){var a=window.matchMedia(e),r=function(e){e.matches&&t()};a.addListener(r),r(a),this._responsiveMediaHandlers.push({mql:a,query:e,listener:r})}},{key:"componentDidMount",value:function(){var e=this;if(this.props.responsive){var t=this.props.responsive.map((function(e){return e.breakpoint}));t.sort((function(e,t){return e-t})),t.forEach((function(a,r){var i;i=0===r?(0,h.default)({minWidth:0,maxWidth:a}):(0,h.default)({minWidth:t[r-1]+1,maxWidth:a}),(0,m.canUseDOM)()&&e.media(i,(function(){e.setState({breakpoint:a})}))}));var a=(0,h.default)({minWidth:t.slice(-1)[0]});(0,m.canUseDOM)()&&this.media(a,(function(){e.setState({breakpoint:null})}))}}},{key:"componentWillUnmount",value:function(){this._responsiveMediaHandlers.forEach((function(e){e.mql.removeListener(e.listener)}))}},{key:"render",value:function(){var e,t,a=this;(e=this.state.breakpoint?"unslick"===(t=this.props.responsive.filter((function(e){return e.breakpoint===a.state.breakpoint})))[0].settings?"unslick":(0,n.default)((0,n.default)((0,n.default)({},g.default),this.props),t[0].settings):(0,n.default)((0,n.default)({},g.default),this.props)).centerMode&&(e.slidesToScroll,e.slidesToScroll=1),e.fade&&(e.slidesToShow,e.slidesToScroll,e.slidesToShow=1,e.slidesToScroll=1);var r=f.default.Children.toArray(this.props.children);r=r.filter((function(e){return"string"==typeof e?!!e.trim():!!e})),e.variableWidth&&(e.rows>1||e.slidesPerRow>1)&&(console.warn("variableWidth is not supported in case of rows > 1 or slidesPerRow > 1"),e.variableWidth=!1);for(var o=[],l=null,s=0;s<r.length;s+=e.rows*e.slidesPerRow){for(var d=[],c=s;c<s+e.rows*e.slidesPerRow;c+=e.slidesPerRow){for(var u=[],h=c;h<c+e.slidesPerRow&&(e.variableWidth&&r[h].props.style&&(l=r[h].props.style.width),!(h>=r.length));h+=1)u.push(f.default.cloneElement(r[h],{key:100*s+10*c+h,tabIndex:-1,style:{width:"".concat(100/e.slidesPerRow,"%"),display:"inline-block"}}));d.push(f.default.createElement("div",{key:10*s+c},u))}e.variableWidth?o.push(f.default.createElement("div",{key:s,style:{width:l}},d)):o.push(f.default.createElement("div",{key:s},d))}if("unslick"===e){var m="regular slider "+(this.props.className||"");return f.default.createElement("div",{className:m},r)}return o.length<=e.slidesToShow&&(e.unslick=!0),f.default.createElement(p.InnerSlider,(0,i.default)({style:this.props.style,ref:this.innerSliderRefHandler},e),o)}}]),a}(f.default.Component);t.default=v},cZFH:function(e,t,a){"use strict";var r=a("5NKs");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=r(a("q1tI")),n={accessibility:!0,adaptiveHeight:!1,afterChange:null,appendDots:function(e){return i.default.createElement("ul",{style:{display:"block"}},e)},arrows:!0,autoplay:!1,autoplaySpeed:3e3,beforeChange:null,centerMode:!1,centerPadding:"50px",className:"",cssEase:"ease",customPaging:function(e){return i.default.createElement("button",null,e+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,infinite:!0,initialSlide:0,lazyLoad:null,nextArrow:null,onEdge:null,onInit:null,onLazyLoadError:null,onReInit:null,pauseOnDotsHover:!1,pauseOnFocus:!1,pauseOnHover:!0,prevArrow:null,responsive:null,rows:1,rtl:!1,slide:"div",slidesPerRow:1,slidesToScroll:1,slidesToShow:1,speed:500,swipe:!0,swipeEvent:null,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,waitForAnimate:!0};t.default=n},coqV:function(e,t,a){"use strict";var r=a("5NKs");Object.defineProperty(t,"__esModule",{value:!0}),t.Dots=void 0;var i=r(a("hrfQ")),n=r(a("phZJ")),o=r(a("lFqo")),l=r(a("IVAY")),s=r(a("CPqs")),d=r(a("q1tI")),c=r(a("TSYQ")),u=a("3K4p"),f=function(e){(0,l.default)(a,e);var t=(0,s.default)(a);function a(){return(0,n.default)(this,a),t.apply(this,arguments)}return(0,o.default)(a,[{key:"clickHandler",value:function(e,t){t.preventDefault(),this.props.clickHandler(e)}},{key:"render",value:function(){for(var e,t=this.props,a=t.onMouseEnter,r=t.onMouseOver,n=t.onMouseLeave,o=t.infinite,l=t.slidesToScroll,s=t.slidesToShow,f=t.slideCount,p=t.currentSlide,h=(e={slideCount:f,slidesToScroll:l,slidesToShow:s,infinite:o}).infinite?Math.ceil(e.slideCount/e.slidesToScroll):Math.ceil((e.slideCount-e.slidesToShow)/e.slidesToScroll)+1,g={onMouseEnter:a,onMouseOver:r,onMouseLeave:n},m=[],v=0;v<h;v++){var b=(v+1)*l-1,y=o?b:(0,u.clamp)(b,0,f-1),w=y-(l-1),S=o?w:(0,u.clamp)(w,0,f-1),k=(0,c.default)({"slick-active":o?p>=S&&p<=y:p===S}),x={message:"dots",index:v,slidesToScroll:l,currentSlide:p},O=this.clickHandler.bind(this,x);m=m.concat(d.default.createElement("li",{key:v,className:k},d.default.cloneElement(this.props.customPaging(v),{onClick:O})))}return d.default.cloneElement(this.props.appendDots(m),(0,i.default)({className:this.props.dotsClass},g))}}]),a}(d.default.PureComponent);t.Dots=f},fT7D:function(e,t,a){e.exports=a.p+"static/superset-logo-horiz-apache-ac1a91de27eed9f5c53944c555a39c6f.svg"},hQUZ:function(e,t,a){"use strict";var r=a("5NKs");Object.defineProperty(t,"__esModule",{value:!0}),t.InnerSlider=void 0;var i=r(a("cjBy")),n=r(a("j8BX")),o=r(a("xK7m")),l=r(a("hrfQ")),s=r(a("phZJ")),d=r(a("lFqo")),c=r(a("v06X")),u=r(a("IVAY")),f=r(a("CPqs")),p=r(a("0jh0")),h=r(a("q1tI")),g=r(a("F1Ou")),m=r(a("sEfC")),v=r(a("TSYQ")),b=a("3K4p"),y=a("+uyH"),w=a("coqV"),S=a("3Fjq"),k=r(a("bdgK")),x=function(e){(0,u.default)(a,e);var t=(0,f.default)(a);function a(e){var r;(0,s.default)(this,a),r=t.call(this,e),(0,p.default)((0,c.default)(r),"listRefHandler",(function(e){return r.list=e})),(0,p.default)((0,c.default)(r),"trackRefHandler",(function(e){return r.track=e})),(0,p.default)((0,c.default)(r),"adaptHeight",(function(){if(r.props.adaptiveHeight&&r.list){var e=r.list.querySelector('[data-index="'.concat(r.state.currentSlide,'"]'));r.list.style.height=(0,b.getHeight)(e)+"px"}})),(0,p.default)((0,c.default)(r),"componentDidMount",(function(){if(r.props.onInit&&r.props.onInit(),r.props.lazyLoad){var e=(0,b.getOnDemandLazySlides)((0,l.default)((0,l.default)({},r.props),r.state));e.length>0&&(r.setState((function(t){return{lazyLoadedList:t.lazyLoadedList.concat(e)}})),r.props.onLazyLoad&&r.props.onLazyLoad(e))}var t=(0,l.default)({listRef:r.list,trackRef:r.track},r.props);r.updateState(t,!0,(function(){r.adaptHeight(),r.props.autoplay&&r.autoPlay("update")})),"progressive"===r.props.lazyLoad&&(r.lazyLoadTimer=setInterval(r.progressiveLazyLoad,1e3)),r.ro=new k.default((function(){r.state.animating?(r.onWindowResized(!1),r.callbackTimers.push(setTimeout((function(){return r.onWindowResized()}),r.props.speed))):r.onWindowResized()})),r.ro.observe(r.list),Array.prototype.forEach.call(document.querySelectorAll(".slick-slide"),(function(e){e.onfocus=r.props.pauseOnFocus?r.onSlideFocus:null,e.onblur=r.props.pauseOnFocus?r.onSlideBlur:null})),window.addEventListener?window.addEventListener("resize",r.onWindowResized):window.attachEvent("onresize",r.onWindowResized)})),(0,p.default)((0,c.default)(r),"componentWillUnmount",(function(){r.animationEndCallback&&clearTimeout(r.animationEndCallback),r.lazyLoadTimer&&clearInterval(r.lazyLoadTimer),r.callbackTimers.length&&(r.callbackTimers.forEach((function(e){return clearTimeout(e)})),r.callbackTimers=[]),window.addEventListener?window.removeEventListener("resize",r.onWindowResized):window.detachEvent("onresize",r.onWindowResized),r.autoplayTimer&&clearInterval(r.autoplayTimer),r.ro.disconnect()})),(0,p.default)((0,c.default)(r),"componentDidUpdate",(function(e){if(r.checkImagesLoad(),r.props.onReInit&&r.props.onReInit(),r.props.lazyLoad){var t=(0,b.getOnDemandLazySlides)((0,l.default)((0,l.default)({},r.props),r.state));t.length>0&&(r.setState((function(e){return{lazyLoadedList:e.lazyLoadedList.concat(t)}})),r.props.onLazyLoad&&r.props.onLazyLoad(t))}r.adaptHeight();var a=(0,l.default)((0,l.default)({listRef:r.list,trackRef:r.track},r.props),r.state),i=r.didPropsChange(e);i&&r.updateState(a,i,(function(){r.state.currentSlide>=h.default.Children.count(r.props.children)&&r.changeSlide({message:"index",index:h.default.Children.count(r.props.children)-r.props.slidesToShow,currentSlide:r.state.currentSlide}),e.autoplay===r.props.autoplay&&e.autoplaySpeed===r.props.autoplaySpeed||(r.props.autoplay?r.autoPlay("update"):r.pause("paused"))}))})),(0,p.default)((0,c.default)(r),"onWindowResized",(function(e){r.debouncedResize&&r.debouncedResize.cancel(),r.debouncedResize=(0,m.default)((function(){return r.resizeWindow(e)}),50),r.debouncedResize()})),(0,p.default)((0,c.default)(r),"resizeWindow",(function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=Boolean(r.track&&r.track.node);if(t){var a=(0,l.default)((0,l.default)({listRef:r.list,trackRef:r.track},r.props),r.state);r.updateState(a,e,(function(){r.props.autoplay?r.autoPlay("update"):r.pause("paused")})),r.setState({animating:!1}),clearTimeout(r.animationEndCallback),delete r.animationEndCallback}})),(0,p.default)((0,c.default)(r),"updateState",(function(e,t,a){var i=(0,b.initializedState)(e);e=(0,l.default)((0,l.default)((0,l.default)({},e),i),{},{slideIndex:i.currentSlide});var n=(0,b.getTrackLeft)(e);e=(0,l.default)((0,l.default)({},e),{},{left:n});var o=(0,b.getTrackCSS)(e);(t||h.default.Children.count(r.props.children)!==h.default.Children.count(e.children))&&(i.trackStyle=o),r.setState(i,a)})),(0,p.default)((0,c.default)(r),"ssrInit",(function(){if(r.props.variableWidth){var e=0,t=0,a=[],i=(0,b.getPreClones)((0,l.default)((0,l.default)((0,l.default)({},r.props),r.state),{},{slideCount:r.props.children.length})),n=(0,b.getPostClones)((0,l.default)((0,l.default)((0,l.default)({},r.props),r.state),{},{slideCount:r.props.children.length}));r.props.children.forEach((function(t){a.push(t.props.style.width),e+=t.props.style.width}));for(var o=0;o<i;o++)t+=a[a.length-1-o],e+=a[a.length-1-o];for(var s=0;s<n;s++)e+=a[s];for(var d=0;d<r.state.currentSlide;d++)t+=a[d];var c={width:e+"px",left:-t+"px"};if(r.props.centerMode){var u="".concat(a[r.state.currentSlide],"px");c.left="calc(".concat(c.left," + (100% - ").concat(u,") / 2 ) ")}return{trackStyle:c}}var f=h.default.Children.count(r.props.children),p=(0,l.default)((0,l.default)((0,l.default)({},r.props),r.state),{},{slideCount:f}),g=(0,b.getPreClones)(p)+(0,b.getPostClones)(p)+f,m=100/r.props.slidesToShow*g,v=100/g,y=-v*((0,b.getPreClones)(p)+r.state.currentSlide)*m/100;return r.props.centerMode&&(y+=(100-v*m/100)/2),{slideWidth:v+"%",trackStyle:{width:m+"%",left:y+"%"}}})),(0,p.default)((0,c.default)(r),"checkImagesLoad",(function(){var e=r.list.querySelectorAll(".slick-slide img"),t=e.length,a=0;Array.prototype.forEach.call(e,(function(e){var i=function(){return++a&&a>=t&&r.onWindowResized()};if(e.onclick){var n=e.onclick;e.onclick=function(){n(),e.parentNode.focus()}}else e.onclick=function(){return e.parentNode.focus()};e.onload||(r.props.lazyLoad?e.onload=function(){r.adaptHeight(),r.callbackTimers.push(setTimeout(r.onWindowResized,r.props.speed))}:(e.onload=i,e.onerror=function(){i(),r.props.onLazyLoadError&&r.props.onLazyLoadError()}))}))})),(0,p.default)((0,c.default)(r),"progressiveLazyLoad",(function(){for(var e=[],t=(0,l.default)((0,l.default)({},r.props),r.state),a=r.state.currentSlide;a<r.state.slideCount+(0,b.getPostClones)(t);a++)if(r.state.lazyLoadedList.indexOf(a)<0){e.push(a);break}for(var i=r.state.currentSlide-1;i>=-(0,b.getPreClones)(t);i--)if(r.state.lazyLoadedList.indexOf(i)<0){e.push(i);break}e.length>0?(r.setState((function(t){return{lazyLoadedList:t.lazyLoadedList.concat(e)}})),r.props.onLazyLoad&&r.props.onLazyLoad(e)):r.lazyLoadTimer&&(clearInterval(r.lazyLoadTimer),delete r.lazyLoadTimer)})),(0,p.default)((0,c.default)(r),"slideHandler",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=r.props,i=a.asNavFor,n=a.beforeChange,s=a.onLazyLoad,d=a.speed,c=a.afterChange,u=r.state.currentSlide,f=(0,b.slideHandler)((0,l.default)((0,l.default)((0,l.default)({index:e},r.props),r.state),{},{trackRef:r.track,useCSS:r.props.useCSS&&!t})),p=f.state,h=f.nextState;if(p){n&&n(u,p.currentSlide);var g=p.lazyLoadedList.filter((function(e){return r.state.lazyLoadedList.indexOf(e)<0}));s&&g.length>0&&s(g),!r.props.waitForAnimate&&r.animationEndCallback&&(clearTimeout(r.animationEndCallback),c&&c(u),delete r.animationEndCallback),r.setState(p,(function(){i&&r.asNavForIndex!==e&&(r.asNavForIndex=e,i.innerSlider.slideHandler(e)),h&&(r.animationEndCallback=setTimeout((function(){var e=h.animating,t=(0,o.default)(h,["animating"]);r.setState(t,(function(){r.callbackTimers.push(setTimeout((function(){return r.setState({animating:e})}),10)),c&&c(p.currentSlide),delete r.animationEndCallback}))}),d))}))}})),(0,p.default)((0,c.default)(r),"changeSlide",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=(0,l.default)((0,l.default)({},r.props),r.state),i=(0,b.changeSlide)(a,e);if((0===i||i)&&(!0===t?r.slideHandler(i,t):r.slideHandler(i),r.props.autoplay&&r.autoPlay("update"),r.props.focusOnSelect)){var n=r.list.querySelectorAll(".slick-current");n[0]&&n[0].focus()}})),(0,p.default)((0,c.default)(r),"clickHandler",(function(e){!1===r.clickable&&(e.stopPropagation(),e.preventDefault()),r.clickable=!0})),(0,p.default)((0,c.default)(r),"keyHandler",(function(e){var t=(0,b.keyHandler)(e,r.props.accessibility,r.props.rtl);""!==t&&r.changeSlide({message:t})})),(0,p.default)((0,c.default)(r),"selectHandler",(function(e){r.changeSlide(e)})),(0,p.default)((0,c.default)(r),"disableBodyScroll",(function(){window.ontouchmove=function(e){(e=e||window.event).preventDefault&&e.preventDefault(),e.returnValue=!1}})),(0,p.default)((0,c.default)(r),"enableBodyScroll",(function(){window.ontouchmove=null})),(0,p.default)((0,c.default)(r),"swipeStart",(function(e){r.props.verticalSwiping&&r.disableBodyScroll();var t=(0,b.swipeStart)(e,r.props.swipe,r.props.draggable);""!==t&&r.setState(t)})),(0,p.default)((0,c.default)(r),"swipeMove",(function(e){var t=(0,b.swipeMove)(e,(0,l.default)((0,l.default)((0,l.default)({},r.props),r.state),{},{trackRef:r.track,listRef:r.list,slideIndex:r.state.currentSlide}));t&&(t.swiping&&(r.clickable=!1),r.setState(t))})),(0,p.default)((0,c.default)(r),"swipeEnd",(function(e){var t=(0,b.swipeEnd)(e,(0,l.default)((0,l.default)((0,l.default)({},r.props),r.state),{},{trackRef:r.track,listRef:r.list,slideIndex:r.state.currentSlide}));if(t){var a=t.triggerSlideHandler;delete t.triggerSlideHandler,r.setState(t),void 0!==a&&(r.slideHandler(a),r.props.verticalSwiping&&r.enableBodyScroll())}})),(0,p.default)((0,c.default)(r),"touchEnd",(function(e){r.swipeEnd(e),r.clickable=!0})),(0,p.default)((0,c.default)(r),"slickPrev",(function(){r.callbackTimers.push(setTimeout((function(){return r.changeSlide({message:"previous"})}),0))})),(0,p.default)((0,c.default)(r),"slickNext",(function(){r.callbackTimers.push(setTimeout((function(){return r.changeSlide({message:"next"})}),0))})),(0,p.default)((0,c.default)(r),"slickGoTo",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(e=Number(e),isNaN(e))return"";r.callbackTimers.push(setTimeout((function(){return r.changeSlide({message:"index",index:e,currentSlide:r.state.currentSlide},t)}),0))})),(0,p.default)((0,c.default)(r),"play",(function(){var e;if(r.props.rtl)e=r.state.currentSlide-r.props.slidesToScroll;else{if(!(0,b.canGoNext)((0,l.default)((0,l.default)({},r.props),r.state)))return!1;e=r.state.currentSlide+r.props.slidesToScroll}r.slideHandler(e)})),(0,p.default)((0,c.default)(r),"autoPlay",(function(e){r.autoplayTimer&&clearInterval(r.autoplayTimer);var t=r.state.autoplaying;if("update"===e){if("hovered"===t||"focused"===t||"paused"===t)return}else if("leave"===e){if("paused"===t||"focused"===t)return}else if("blur"===e&&("paused"===t||"hovered"===t))return;r.autoplayTimer=setInterval(r.play,r.props.autoplaySpeed+50),r.setState({autoplaying:"playing"})})),(0,p.default)((0,c.default)(r),"pause",(function(e){r.autoplayTimer&&(clearInterval(r.autoplayTimer),r.autoplayTimer=null);var t=r.state.autoplaying;"paused"===e?r.setState({autoplaying:"paused"}):"focused"===e?"hovered"!==t&&"playing"!==t||r.setState({autoplaying:"focused"}):"playing"===t&&r.setState({autoplaying:"hovered"})})),(0,p.default)((0,c.default)(r),"onDotsOver",(function(){return r.props.autoplay&&r.pause("hovered")})),(0,p.default)((0,c.default)(r),"onDotsLeave",(function(){return r.props.autoplay&&"hovered"===r.state.autoplaying&&r.autoPlay("leave")})),(0,p.default)((0,c.default)(r),"onTrackOver",(function(){return r.props.autoplay&&r.pause("hovered")})),(0,p.default)((0,c.default)(r),"onTrackLeave",(function(){return r.props.autoplay&&"hovered"===r.state.autoplaying&&r.autoPlay("leave")})),(0,p.default)((0,c.default)(r),"onSlideFocus",(function(){return r.props.autoplay&&r.pause("focused")})),(0,p.default)((0,c.default)(r),"onSlideBlur",(function(){return r.props.autoplay&&"focused"===r.state.autoplaying&&r.autoPlay("blur")})),(0,p.default)((0,c.default)(r),"render",(function(){var e,t,a,i=(0,v.default)("slick-slider",r.props.className,{"slick-vertical":r.props.vertical,"slick-initialized":!0}),o=(0,l.default)((0,l.default)({},r.props),r.state),s=(0,b.extractObject)(o,["fade","cssEase","speed","infinite","centerMode","focusOnSelect","currentSlide","lazyLoad","lazyLoadedList","rtl","slideWidth","slideHeight","listHeight","vertical","slidesToShow","slidesToScroll","slideCount","trackStyle","variableWidth","unslick","centerPadding","targetSlide","useCSS"]),d=r.props.pauseOnHover;if(s=(0,l.default)((0,l.default)({},s),{},{onMouseEnter:d?r.onTrackOver:null,onMouseLeave:d?r.onTrackLeave:null,onMouseOver:d?r.onTrackOver:null,focusOnSelect:r.props.focusOnSelect&&r.clickable?r.selectHandler:null}),!0===r.props.dots&&r.state.slideCount>=r.props.slidesToShow){var c=(0,b.extractObject)(o,["dotsClass","slideCount","slidesToShow","currentSlide","slidesToScroll","clickHandler","children","customPaging","infinite","appendDots"]),u=r.props.pauseOnDotsHover;c=(0,l.default)((0,l.default)({},c),{},{clickHandler:r.changeSlide,onMouseEnter:u?r.onDotsLeave:null,onMouseOver:u?r.onDotsOver:null,onMouseLeave:u?r.onDotsLeave:null}),e=h.default.createElement(w.Dots,c)}var f=(0,b.extractObject)(o,["infinite","centerMode","currentSlide","slideCount","slidesToShow","prevArrow","nextArrow"]);f.clickHandler=r.changeSlide,r.props.arrows&&(t=h.default.createElement(S.PrevArrow,f),a=h.default.createElement(S.NextArrow,f));var p=null;r.props.vertical&&(p={height:r.state.listHeight});var g=null;!1===r.props.vertical?!0===r.props.centerMode&&(g={padding:"0px "+r.props.centerPadding}):!0===r.props.centerMode&&(g={padding:r.props.centerPadding+" 0px"});var m=(0,l.default)((0,l.default)({},p),g),k=r.props.touchMove,x={className:"slick-list",style:m,onClick:r.clickHandler,onMouseDown:k?r.swipeStart:null,onMouseMove:r.state.dragging&&k?r.swipeMove:null,onMouseUp:k?r.swipeEnd:null,onMouseLeave:r.state.dragging&&k?r.swipeEnd:null,onTouchStart:k?r.swipeStart:null,onTouchMove:r.state.dragging&&k?r.swipeMove:null,onTouchEnd:k?r.touchEnd:null,onTouchCancel:r.state.dragging&&k?r.swipeEnd:null,onKeyDown:r.props.accessibility?r.keyHandler:null},O={className:i,dir:"ltr",style:r.props.style};return r.props.unslick&&(x={className:"slick-list"},O={className:i}),h.default.createElement("div",O,r.props.unslick?"":t,h.default.createElement("div",(0,n.default)({ref:r.listRefHandler},x),h.default.createElement(y.Track,(0,n.default)({ref:r.trackRefHandler},s),r.props.children)),r.props.unslick?"":a,r.props.unslick?"":e)})),r.list=null,r.track=null,r.state=(0,l.default)((0,l.default)({},g.default),{},{currentSlide:r.props.initialSlide,slideCount:h.default.Children.count(r.props.children)}),r.callbackTimers=[],r.clickable=!0,r.debouncedResize=null;var i=r.ssrInit();return r.state=(0,l.default)((0,l.default)({},r.state),i),r}return(0,d.default)(a,[{key:"didPropsChange",value:function(e){for(var t=!1,a=0,r=Object.keys(this.props);a<r.length;a++){var n=r[a];if(!e.hasOwnProperty(n)){t=!0;break}if("object"!==(0,i.default)(e[n])&&"function"!=typeof e[n]&&e[n]!==this.props[n]){t=!0;break}}return t||h.default.Children.count(this.props.children)!==h.default.Children.count(e.children)}}]),a}(h.default.Component);t.InnerSlider=x},lOwS:function(e,t,a){"use strict";t.__esModule=!0,t.default=t.supersetTheme=t.styled=t.css=t.withTheme=t.ThemeProvider=t.useTheme=void 0;var r,i=(r=a("5D9J"))&&r.__esModule?r:{default:r},n=a("wLTh");t.useTheme=n.useTheme,t.ThemeProvider=n.ThemeProvider,t.withTheme=n.withTheme;var o=a("qKvR");t.css=o.css;var l=i.default;t.styled=l;var s={borderRadius:4,colors:{primary:{base:"#20A7C9",dark1:"#1A85A0",dark2:"#156378",light1:"#79CADE",light2:"#A5DAE9",light3:"#D2EDF4",light4:"#E9F6F9",light5:"#F3F8FA"},secondary:{base:"#444E7C",dark1:"#363E63",dark2:"#282E4A",dark3:"#1B1F31",light1:"#8E94B0",light2:"#B4B8CA",light3:"#D9DBE4",light4:"#ECEEF2",light5:"#F5F5F8"},grayscale:{base:"#666666",dark1:"#323232",dark2:"#000000",light1:"#B2B2B2",light2:"#E0E0E0",light3:"#F0F0F0",light4:"#F7F7F7",light5:"#FFFFFF"},error:{base:"#E04355",dark1:"#A7323F",dark2:"#6F212A",light1:"#EFA1AA",light2:"#FAEDEE"},warning:{base:"#FF7F44",dark1:"#BF5E33",dark2:"#7F3F21",light1:"#FEC0A1",light2:"#FFF2EC"},alert:{base:"#FCC700",dark1:"#BC9501",dark2:"#7D6300",light1:"#FDE380",light2:"#FEF9E6"},success:{base:"#5AC189",dark1:"#439066",dark2:"#2B6144",light1:"#ACE1C4",light2:"#EEF8F3"},info:{base:"#66BCFE",dark1:"#4D8CBE",dark2:"#315E7E",light1:"#B3DEFE",light2:"#EFF8FE"}},opacity:{light:"10%",mediumLight:"35%",mediumHeavy:"60%",heavy:"80%"},typography:{families:{sansSerif:"'Inter', Helvetica, Arial",serif:"Georgia, 'Times New Roman', Times, serif",monospace:"'Fira Code', 'Courier New', monospace"},weights:{light:200,normal:400,bold:700},sizes:{xxs:9,xs:10,s:12,m:14,l:16,xl:21,xxl:28}},zIndex:{aboveDashboardCharts:10,dropdown:11,max:3e3},transitionTiming:.3,gridUnit:4};t.supersetTheme=s;var d=l;t.default=d},mdmF:function(e,t,a){},pIsd:function(e,t,a){var r=a("BJfS"),i=function(e){var t="",a=Object.keys(e);return a.forEach((function(i,n){var o=e[i];(function(e){return/[height|width]$/.test(e)})(i=r(i))&&"number"==typeof o&&(o+="px"),t+=!0===o?i:!1===o?"not "+i:"("+i+": "+o+")",n<a.length-1&&(t+=" and ")})),t};e.exports=function(e){var t="";return"string"==typeof e?e:e instanceof Array?(e.forEach((function(a,r){t+=i(a),r<e.length-1&&(t+=", ")})),t):i(e)}},q01k:function(e,t,a){"use strict";a.r(t),a.d(t,"render",(function(){return E}));var r=window.document,i=window.Math,n=window.HTMLElement,o=window.XMLHttpRequest,l=function(e){return function(t,a,r){var i=e.createElement(t);if(null!=a)for(var n in a){var o=a[n];null!=o&&(null!=i[n]?i[n]=o:i.setAttribute(n,o))}if(null!=r)for(var l=0,s=r.length;l<s;l++){var d=r[l];i.appendChild("string"==typeof d?e.createTextNode(d):d)}return i}},s=l(r),d=function(e,t){return{}.hasOwnProperty.call(e,t)},c=function(e){return(""+e).toLowerCase()},u="github.com",f=o&&"prototype"in o&&"withCredentials"in o.prototype,p=f&&n&&"attachShadow"in n.prototype&&!("prototype"in n.prototype.attachShadow),h=function(e,t,a){e.addEventListener?e.addEventListener(t,a,!1):e.attachEvent("on"+t,a)},g=function(e,t,a){e.removeEventListener?e.removeEventListener(t,a,!1):e.detachEvent("on"+t,a)},m={light:".btn{color:#24292e;background-color:#eff3f6;border-color:#c5c9cc;border-color:rgba(27,31,35,.2);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23fafbfc'/%3e%3cstop offset='90%25' stop-color='%23eff3f6'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #fafbfc, #eff3f6 90%);background-image:linear-gradient(180deg, #fafbfc, #eff3f6 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FFFAFBFC', endColorstr='#FFEEF2F5')}:root .btn{filter:none}.btn:focus,.btn:hover{background-color:#e6ebf1;background-position:-0.5em;border-color:#9fa4a9;border-color:rgba(27,31,35,.35);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23f0f3f6'/%3e%3cstop offset='90%25' stop-color='%23e6ebf1'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #f0f3f6, #e6ebf1 90%);background-image:linear-gradient(180deg, #f0f3f6, #e6ebf1 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FFF0F3F6', endColorstr='#FFE5EAF0')}:root .btn:focus,:root .btn:hover{filter:none}.btn:active{background-color:#e9ecef;border-color:#a1a4a8;border-color:rgba(27,31,35,.35);box-shadow:inset 0 .15em .3em rgba(27,31,35,.15);background-image:none;filter:none}.social-count{color:#24292e;background-color:#fff;border-color:#d1d2d3;border-color:rgba(27,31,35,.2)}.social-count:focus,.social-count:hover{color:#0366d6}.octicon-heart{color:#ea4aaa}",dark:".btn{color:#fafbfc;background-color:#202428;border-color:#1f2327;border-color:rgba(27,31,35,.2);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%232f363d'/%3e%3cstop offset='90%25' stop-color='%23202428'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #2f363d, #202428 90%);background-image:linear-gradient(180deg, #2f363d, #202428 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF2F363D', endColorstr='#FF1E2226')}:root .btn{filter:none}.btn:focus,.btn:hover{background-color:#1b1f23;background-position:-0.5em;border-color:#1b1f23;border-color:rgba(27,31,35,.5);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%232b3137'/%3e%3cstop offset='90%25' stop-color='%231b1f23'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #2b3137, #1b1f23 90%);background-image:linear-gradient(180deg, #2b3137, #1b1f23 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF2B3137', endColorstr='#FF191D21')}:root .btn:focus,:root .btn:hover{filter:none}.btn:active{background-color:#181b1f;border-color:#1a1d21;border-color:rgba(27,31,35,.5);box-shadow:inset 0 .15em .3em rgba(27,31,35,.15);background-image:none;filter:none}.social-count{color:#fafbfc;background-color:#1b1f23;border-color:#1b1f23;border-color:rgba(27,31,35,.2)}.social-count:focus,.social-count:hover{color:#2188ff}.octicon-heart{color:#ec6cb9}"},v=function(e,t){return"@media(prefers-color-scheme:"+e+"){"+m[d(m,t)?t:e]+"}"},b=function(e){if(null==e)return m.light;if(d(m,e))return m[e];var t=function(e,t,a,r){null==t&&(t="&"),null==a&&(a="="),null==r&&(r=window.decodeURIComponent);for(var i={},n=e.split(t),o=0,l=n.length;o<l;o++){var s=n[o];if(""!==s){var d=s.split(a);i[r(d[0])]=null!=d[1]?r(d.slice(1).join(a)):void 0}}return i}(e,";",":",(function(e){return e.replace(/^[ \t\n\f\r]+|[ \t\n\f\r]+$/g,"")}));return m[d(m,t["no-preference"])?t["no-preference"]:"light"]+v("light",t.light)+v("dark",t.dark)},y={"mark-github":{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path>'}}},heart:{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"></path>'}}},eye:{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"></path>'}}},star:{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"></path>'}}},"repo-forked":{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"></path>'}}},"repo-template":{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M6 .75A.75.75 0 016.75 0h2.5a.75.75 0 010 1.5h-2.5A.75.75 0 016 .75zm5 0a.75.75 0 01.75-.75h1.5a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0V1.5h-.75A.75.75 0 0111 .75zM4.992.662a.75.75 0 01-.636.848c-.436.063-.783.41-.846.846a.75.75 0 01-1.485-.212A2.501 2.501 0 014.144.025a.75.75 0 01.848.637zM2.75 4a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 012.75 4zm10.5 0a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5a.75.75 0 01.75-.75zM2.75 8a.75.75 0 01.75.75v.268A1.72 1.72 0 013.75 9h.5a.75.75 0 010 1.5h-.5a.25.25 0 00-.25.25v.75c0 .28.114.532.3.714a.75.75 0 01-1.05 1.072A2.495 2.495 0 012 11.5V8.75A.75.75 0 012.75 8zm10.5 0a.75.75 0 01.75.75v4.5a.75.75 0 01-.75.75h-2.5a.75.75 0 010-1.5h1.75v-2h-.75a.75.75 0 010-1.5h.75v-.25a.75.75 0 01.75-.75zM6 9.75A.75.75 0 016.75 9h2.5a.75.75 0 010 1.5h-2.5A.75.75 0 016 9.75zm-1 2.5v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>'}}},"issue-opened":{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm9 3a1 1 0 11-2 0 1 1 0 012 0zm-.25-6.25a.75.75 0 00-1.5 0v3.5a.75.75 0 001.5 0v-3.5z"></path>'}}},download:{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M7.47 10.78a.75.75 0 001.06 0l3.75-3.75a.75.75 0 00-1.06-1.06L8.75 8.44V1.75a.75.75 0 00-1.5 0v6.69L4.78 5.97a.75.75 0 00-1.06 1.06l3.75 3.75zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"></path>'}}}},w=function(e,t){e=c(e).replace(/^octicon-/,""),d(y,e)||(e="mark-github");var a=t>=24&&24 in y[e].heights?24:16,r=y[e].heights[a];return'<svg viewBox="0 0 '+r.width+" "+a+'" width="'+t*r.width/a+'" height="'+t+'" class="octicon octicon-'+e+'" aria-hidden="true">'+r.path+"</svg>"},S={},k=function(e,t){var a=S[e]||(S[e]=[]);if(!(a.push(t)>1)){var r=function(e){var t;return function(){t||(t=1,e.apply(this,arguments))}}((function(){for(delete S[e];t=a.shift();)t.apply(null,arguments)}));if(f){var i=new o;h(i,"abort",r),h(i,"error",r),h(i,"load",(function(){var e;try{e=JSON.parse(this.responseText)}catch(t){return void r(t)}r(200!==this.status,e)})),i.open("GET",e),i.send()}else{var n=this||window;n._=function(e){n._=null,r(200!==e.meta.status,e.data)};var s=l(n.document)("script",{async:!0,src:e+(-1!==e.indexOf("?")?"&":"?")+"callback=_"}),d=function(){n._&&n._({meta:{}})};h(s,"load",d),h(s,"error",d),s.readyState&&function(e,t,a){h(e,"readystatechange",(function r(){if(t.test(e.readyState))return g(e,"readystatechange",r),a.apply(this,arguments)}))}(s,/de|m/,d),n.document.getElementsByTagName("head")[0].appendChild(s)}}},x=function(e,t,a){var r=l(e.ownerDocument),i=e.appendChild(r("style",{type:"text/css"})),n="body{margin:0}a{text-decoration:none;outline:0}.widget{display:inline-block;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;font-size:0;line-height:0;white-space:nowrap}.btn,.social-count{position:relative;display:inline-block;height:14px;padding:2px 5px;font-size:11px;font-weight:600;line-height:14px;vertical-align:bottom;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-repeat:repeat-x;background-position:-1px -1px;background-size:110% 110%;border:1px solid}.btn{border-radius:.25em}.btn:not(:last-child){border-radius:.25em 0 0 .25em}.social-count{border-left:0;border-radius:0 .25em .25em 0}.widget-lg .btn,.widget-lg .social-count{height:20px;padding:3px 10px;font-size:12px;line-height:20px}.octicon{display:inline-block;vertical-align:text-top;fill:currentColor}"+b(t["data-color-scheme"]);i.styleSheet?i.styleSheet.cssText=n:i.appendChild(e.ownerDocument.createTextNode(n));var o="large"===c(t["data-size"]),s=r("a",{className:"btn",href:t.href,rel:"noopener",target:"_blank",title:t.title||void 0,"aria-label":t["aria-label"]||void 0,innerHTML:w(t["data-icon"],o?16:14)},[" ",r("span",{},[t["data-text"]||""])]),d=e.appendChild(r("div",{className:"widget"+(o?" widget-lg":"")},[s])),f=s.hostname.replace(/\.$/,"");if(f.length<u.length||("."+f).substring(f.length-u.length)!=="."+u)return s.removeAttribute("href"),void a(d);var p=(" /"+s.pathname).split(/\/+/);if(((f===u||f==="gist."+u)&&"archive"===p[3]||f===u&&"releases"===p[3]&&("download"===p[4]||"latest"===p[4]&&"download"===p[5])||f==="codeload."+u)&&(s.target="_top"),"true"===c(t["data-show-count"])&&f===u){var h,g;if(!p[2]&&p[1])g="followers",h="?tab=followers";else if(!p[3]&&p[2])g="stargazers_count",h="/stargazers";else if(p[4]||"subscription"!==p[3])if(p[4]||"fork"!==p[3]){if("issues"!==p[3])return void a(d);g="open_issues_count",h="/issues"}else g="forks_count",h="/network/members";else g="subscribers_count",h="/watchers";var m=p[2]?"/repos/"+p[1]+"/"+p[2]:"/users/"+p[1];k.call(this,"https://api.github.com"+m,(function(e,t){if(!e){var i=t[g];d.appendChild(r("a",{className:"social-count",href:t.html_url+h,rel:"noopener",target:"_blank","aria-label":i+" "+g.replace(/_count$/,"").replace("_"," ").slice(0,i<2?-1:void 0)+" on GitHub"},[(""+i).replace(/\B(?=(\d{3})+(?!\d))/g,",")]))}a(d)}))}else a(d)},O=window.devicePixelRatio||1,j=function(e){return(O>1?i.ceil(i.round(e*O)/O*2)/2:i.ceil(e))||0},C=function(e,t){e.style.width=t[0]+"px",e.style.height=t[1]+"px"},E=function(e,t){if(null!=e&&null!=t)if(e.getAttribute&&(e=function(e){for(var t={href:e.href,title:e.title,"aria-label":e.getAttribute("aria-label")},a=["icon","color-scheme","text","size","show-count"],r=0,i=a.length;r<i;r++){var n="data-"+a[r];t[n]=e.getAttribute(n)}return null==t["data-text"]&&(t["data-text"]=e.textContent||e.innerText),t}(e)),p){var a=s("span");x(a.attachShadow({mode:"closed"}),e,(function(){t(a)}))}else{var n=s("iframe",{src:"javascript:0",title:e.title||void 0,allowtransparency:!0,scrolling:"no",frameBorder:0});C(n,[0,0]),n.style.border="none";h(n,"load",(function a(){var o,l=n.contentWindow;try{o=l.document.body}catch(s){return void r.body.appendChild(n.parentNode.removeChild(n))}g(n,"load",a),x.call(l,o,e,(function(a){var r=function(e){var t=e.offsetWidth,a=e.offsetHeight;if(e.getBoundingClientRect){var r=e.getBoundingClientRect();t=i.max(t,j(r.width)),a=i.max(a,j(r.height))}return[t,a]}(a);n.parentNode.removeChild(n),function(e,t,a){h(e,t,(function r(){return g(e,t,r),a.apply(this,arguments)}))}(n,"load",(function(){C(n,r)})),n.src="https://unpkg.com/github-buttons@2.14.0/dist/buttons.html#"+(n.name=function(e,t,a,r){null==t&&(t="&"),null==a&&(a="="),null==r&&(r=window.encodeURIComponent);var i=[];for(var n in e){var o=e[n];null!=o&&i.push(r(n)+a+r(o))}return i.join(t)}(e)),t(n)}))})),r.body.appendChild(n)}}},wLTh:function(e,t,a){"use strict";a.r(t),a.d(t,"ThemeProvider",(function(){return m})),a.d(t,"useTheme",(function(){return b})),a.d(t,"withTheme",(function(){return v}));var r=a("0jh0"),i=a.n(r),n=a("q1tI"),o=a.n(n),l=a("qKvR"),s=a("gRFL"),d=a("j8BX"),c=a.n(d),u=a("2mql"),f=a.n(u);function p(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}var h=function(e,t){return"function"==typeof t?t(e):function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?p(a,!0).forEach((function(t){i()(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):p(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}({},e,{},t)},g=Object(s.a)((function(e){return Object(s.a)((function(t){return h(e,t)}))})),m=function(e){return Object(n.createElement)(l.ThemeContext.Consumer,null,(function(t){return e.theme!==t&&(t=g(t)(e.theme)),Object(n.createElement)(l.ThemeContext.Provider,{value:t},e.children)}))};function v(e){var t=e.displayName||e.name||"Component",a=Object(n.forwardRef)((function(t,a){return Object(n.createElement)(l.ThemeContext.Consumer,null,(function(r){return Object(n.createElement)(e,c()({theme:r,ref:a},t))}))}));return a.displayName="WithTheme("+t+")",f()(a,e)}function b(){return o.a.useContext(l.ThemeContext)}}}]);
//# sourceMappingURL=component---src-pages-index-tsx-2c1af854032621c8e39a.js.map