/*! For license information please see component---src-pages-index-tsx-27f6c637f9a33a9d3d64.js.LICENSE.txt */
(window.webpackJsonp=window.webpackJsonp||[]).push([[75],{"+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},H=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:H.maxWidth?H.maxWidth+"px":null,maxHeight:H.maxHeight?H.maxHeight+"px":null},n),ref:this.handleRef,key:"fluid-"+JSON.stringify(H.srcSet)},d.default.createElement(y,{"aria-hidden":!0,style:{width:"100%",paddingBottom:100/H.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)}),H.base64&&d.default.createElement(T,{ariaHidden:!0,ref:this.placeholderRef,src:H.base64,spreadProps:F,imageVariants:C,generateSources:O}),H.tracedSVG&&d.default.createElement(T,{ariaHidden:!0,ref:this.placeholderRef,src:H.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:H.sizes,src:H.src,crossOrigin:this.props.crossOrigin,srcSet:H.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},H,{imageVariants:C}))}}));if(m){var D=(0,s.default)({position:"relative",overflow:"hidden",display:"inline-block",width:H.width,height:H.height},n);return"inherit"===n.display&&delete D.display,d.default.createElement(y,{className:(r||"")+" gatsby-image-wrapper",style:D,ref:this.handleRef,key:"fixed-"+JSON.stringify(H.srcSet)},N&&d.default.createElement(y,{"aria-hidden":!0,title:t,style:(0,s.default)({backgroundColor:N,width:H.width,opacity:this.state.imgLoaded?0:1,height:H.height},M&&R)}),H.base64&&d.default.createElement(T,{ariaHidden:!0,ref:this.placeholderRef,src:H.base64,spreadProps:F,imageVariants:C,generateSources:O}),H.tracedSVG&&d.default.createElement(T,{ariaHidden:!0,ref:this.placeholderRef,src:H.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:H.width,height:H.height,sizes:H.sizes,src:H.src,crossOrigin:this.props.crossOrigin,srcSet:H.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},H,{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 Ritter",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:"Trino",href:"https://trino.io/",imgName:"trino2.jpg"},{title:"Rockset",href:"https://rockset.com/",imgName:"rockset.png"},{title:"Vertica",href:"https://www.vertica.com/",imgName:"vertica.png"},{title:"Hologres",href:"https://www.alibabacloud.com/product/hologres",imgName:"hologres.png"},{title:"IBM Netezza Performance Server",href:"https://www.ibm.com/products/netezza",imgName:"netezza.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),H={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"},D=function(e,t){return g.createElement(R.a,Object.assign({},e,{ref:t,icon:H}))};D.displayName="DatabaseOutlined";var A=g.forwardRef(D),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 SQLAlchemy, 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-27f6c637f9a33a9d3d64.js.map