(window.webpackJsonp=window.webpackJsonp||[]).push([[58],{"+uyH":function(e,t,a){"use strict";var r=a("TqRt");Object.defineProperty(t,"__esModule",{value:!0}),t.Track=void 0;var i=r(a("pVnL")),n=r(a("lwsE")),o=r(a("W8MJ")),l=r(a("PJYZ")),s=r(a("7W2i")),d=r(a("LQ03")),c=r(a("lSNA")),u=r(a("3tO9")),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.currentSlide}},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,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},"/kpp":function(e,t,a){"use strict";var r=a("lSNA"),i=a.n(r),n=a("pVnL"),o=a.n(n),l=a("cDf5"),s=a.n(l),d=a("q1tI"),c=a("TSYQ"),u=a.n(c),f=a("o/2+"),p=a("H84U"),h=function(e,t){var a={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(a[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(a[r[i]]=e[r[i]])}return a};var g=d.forwardRef((function(e,t){var a=function(a){var r,n=a.getPrefixCls,l=a.direction,c=e.prefixCls,p=e.span,g=e.order,m=e.offset,v=e.push,b=e.pull,y=e.className,w=e.children,S=e.flex,k=e.style,x=h(e,["prefixCls","span","order","offset","push","pull","className","children","flex","style"]),O=n("col",c),T={};["xs","sm","md","lg","xl","xxl"].forEach((function(t){var a,r={},n=e[t];"number"==typeof n?r.span=n:"object"===s()(n)&&(r=n||{}),delete x[t],T=o()(o()({},T),(a={},i()(a,"".concat(O,"-").concat(t,"-").concat(r.span),void 0!==r.span),i()(a,"".concat(O,"-").concat(t,"-order-").concat(r.order),r.order||0===r.order),i()(a,"".concat(O,"-").concat(t,"-offset-").concat(r.offset),r.offset||0===r.offset),i()(a,"".concat(O,"-").concat(t,"-push-").concat(r.push),r.push||0===r.push),i()(a,"".concat(O,"-").concat(t,"-pull-").concat(r.pull),r.pull||0===r.pull),i()(a,"".concat(O,"-rtl"),"rtl"===l),a))}));var C=u()(O,(r={},i()(r,"".concat(O,"-").concat(p),void 0!==p),i()(r,"".concat(O,"-order-").concat(g),g),i()(r,"".concat(O,"-offset-").concat(m),m),i()(r,"".concat(O,"-push-").concat(v),v),i()(r,"".concat(O,"-pull-").concat(b),b),r),y,T);return d.createElement(f.a.Consumer,null,(function(e){var a=e.gutter,r=o()({},k);return a&&(r=o()(o()(o()({},a[0]>0?{paddingLeft:a[0]/2,paddingRight:a[0]/2}:{}),a[1]>0?{paddingTop:a[1]/2,paddingBottom:a[1]/2}:{}),r)),S&&(r.flex=function(e){return"number"==typeof e?"".concat(e," ").concat(e," auto"):/^\d+(\.\d+)?(px|em|rem|%)$/.test(e)?"0 0 ".concat(e):e}(S)),d.createElement("div",o()({},x,{style:r,className:C,ref:t}),w)}))};return d.createElement(p.a,null,a)}));g.displayName="Col",t.a=g},"3Fjq":function(e,t,a){"use strict";var r=a("TqRt");Object.defineProperty(t,"__esModule",{value:!0}),t.NextArrow=t.PrevArrow=void 0;var i=r(a("pVnL")),n=r(a("3tO9")),o=r(a("lwsE")),l=r(a("W8MJ")),s=r(a("7W2i")),d=r(a("LQ03")),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("TqRt");Object.defineProperty(t,"__esModule",{value:!0}),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("3tO9")),n=r(a("q1tI")),o=function(e){for(var t=[],a=l(e),r=s(e),i=a;i<r;i++)e.lazyLoadedList.indexOf(i)<0&&t.push(i);return t};t.getOnDemandLazySlides=o;t.getRequiredLazySlides=function(e){for(var t=[],a=l(e),r=s(e),i=a;i<r;i++)t.push(i);return t};var l=function(e){return e.currentSlide-d(e)};t.lazyStartIndex=l;var s=function(e){return e.currentSlide+c(e)};t.lazyEndIndex=s;var d=function(e){return e.centerMode?Math.floor(e.slidesToShow/2)+(parseInt(e.centerPadding)>0?1:0):0};t.lazySlidesOnLeft=d;var c=function(e){return e.centerMode?Math.floor((e.slidesToShow-1)/2)+1+(parseInt(e.centerPadding)>0?1:0):e.slidesToShow};t.lazySlidesOnRight=c;var u=function(e){return e&&e.offsetWidth||0};t.getWidth=u;var f=function(e){return e&&e.offsetHeight||0};t.getHeight=f;var p=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=p;var h=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=h;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,l=Math.ceil(u(r)),s=e.trackRef&&e.trackRef.node,d=Math.ceil(u(s));if(e.vertical)t=l;else{var c=e.centerMode&&2*parseInt(e.centerPadding);"string"==typeof e.centerPadding&&"%"===e.centerPadding.slice(-1)&&(c*=l/100),t=Math.ceil((l-c)/e.slidesToShow)}var p=r&&f(r.querySelector('[data-index="0"]')),h=p*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=o((0,i.default)((0,i.default)({},e),{},{currentSlide:g,lazyLoadedList:m}));m.concat(v);var b={slideCount:a,slideWidth:t,listWidth:l,trackWidth:d,currentSlide:g,slideHeight:p,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,l=e.index,s=e.slideCount,d=e.lazyLoadedList,c=e.lazyLoad,u=e.currentSlide,f=e.centerMode,p=e.slidesToScroll,g=e.slidesToShow,m=e.useCSS;if(t&&a)return{};var v,b,k,x=l,O={},T={};if(r){if(!n&&(l<0||l>=s))return{};l<0?x=l+s:l>=s&&(x=l-s),c&&d.indexOf(x)<0&&d.push(x),O={animating:!0,currentSlide:x,lazyLoadedList:d},T={animating:!1}}else v=x,x<0?(v=x+s,n?s%p!=0&&(v=s-s%p):v=0):!h(e)&&x>u?x=v=u:f&&x>=s?(x=n?s:s-1,v=n?0:s-1):x>=s&&(v=x-s,n?s%p!=0&&(v=0):v=s-g),b=S((0,i.default)((0,i.default)({},e),{},{slideIndex:x})),k=S((0,i.default)((0,i.default)({},e),{},{slideIndex:v})),n||(b===k&&(x=v),b=k),c&&d.concat(o((0,i.default)((0,i.default)({},e),{},{currentSlide:x}))),m?(O={animating:!0,currentSlide:v,trackStyle:w((0,i.default)((0,i.default)({},e),{},{left:b})),lazyLoadedList:d},T={animating:!1,currentSlide:v,trackStyle:y((0,i.default)((0,i.default)({},e),{},{left:k})),swipeLeft:null}):O={currentSlide:v,trackStyle:y((0,i.default)((0,i.default)({},e),{},{left:k})),lazyLoadedList:d};return{state:O,nextState:T}};t.changeSlide=function(e,t){var a,r,n,o,l=e.slidesToScroll,s=e.slidesToShow,d=e.slideCount,c=e.currentSlide,u=e.lazyLoad,f=e.infinite;if(a=d%l!=0?0:(d-c)%l,"previous"===t.message)o=c-(n=0===a?l:s-a),u&&!f&&(o=-1===(r=c-n)?d-1:r);else if("next"===t.message)o=c+(n=0===a?l:a),u&&!f&&(o=(c+l)%d+a);else if("dots"===t.message){if((o=t.index*t.slidesToScroll)===t.currentSlide)return null}else if("children"===t.message){if((o=t.index)===t.currentSlide)return null;if(f){var p=T((0,i.default)((0,i.default)({},e),{},{targetSlide:o}));o>t.currentSlide&&"left"===p?o-=d:o<t.currentSlide&&"right"===p&&(o+=d)}}else if("index"===t.message&&(o=Number(t.index))===t.currentSlide)return null;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,g=t.swiped,m=t.swiping,v=t.slideCount,b=t.slidesToScroll,w=t.infinite,k=t.touchObject,x=t.swipeEvent,O=t.listHeight,T=t.listWidth;if(!a){if(r)return e.preventDefault();n&&o&&l&&e.preventDefault();var C,E={},L=S(t);k.curX=e.touches?e.touches[0].pageX:e.clientX,k.curY=e.touches?e.touches[0].pageY:e.clientY,k.swipeLength=Math.round(Math.sqrt(Math.pow(k.curX-k.startX,2)));var z=Math.round(Math.sqrt(Math.pow(k.curY-k.startY,2)));if(!l&&!m&&z>10)return{scrolling:!0};l&&(k.swipeLength=z);var j=(s?-1:1)*(k.curX>k.startX?1:-1);l&&(j=k.curY>k.startY?1:-1);var M=Math.ceil(v/b),P=p(t.touchObject,l),N=k.swipeLength;return w||(0===d&&"right"===P||d+1>=M&&"left"===P||!h(t)&&"left"===P)&&(N=k.swipeLength*c,!1===u&&f&&(f(P),E.edgeDragged=!0)),!g&&x&&(x(P),E.swiped=!0),C=n?L+N*(O/T)*j:s?L-N*j:L+N*j,l&&(C=L+N*j),E=(0,i.default)((0,i.default)({},E),{},{touchObject:k,swipeLeft:C,trackStyle:y((0,i.default)((0,i.default)({},t),{},{left:C}))}),Math.abs(k.curX-k.startX)<.8*Math.abs(k.curY-k.startY)?E:(k.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.currentSlide,u=t.swipeToSlide,f=t.scrolling,h=t.onSwipe;if(!a)return r&&e.preventDefault(),{};var g=s?d/l:o/l,b=p(n,s),y={dragging:!1,edgeDragged:!1,scrolling:!1,swiping:!1,swiped:!1,swipeLeft:null,touchObject:{}};if(f)return y;if(!n.swipeLength)return y;if(n.swipeLength>g){var k,x;switch(e.preventDefault(),h&&h(b),b){case"left":case"up":x=c+v(t),k=u?m(t,x):x,y.currentDirection=0;break;case"right":case"down":x=c-v(t),k=u?m(t,x):x,y.currentDirection=1;break;default:k=c}y.triggerSlideHandler=k}else{var O=S(t);y.trackStyle=w((0,i.default)((0,i.default)({},t),{},{left:O}))}return y};var g=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=g;var m=function(e,t){var a=g(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=m;var v=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+f(r)/2>-1*e.swipeLeft)return a=r,!1}else if(r.offsetLeft-t+u(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=v;var b=function(e,t){return t.reduce((function(t,a){return t&&e.hasOwnProperty(a)}),!0)?null:console.error("Keys Missing:",e)};t.checkSpecKeys=b;var y=function(e){var t,a;b(e,["left","variableWidth","slideCount","slidesToShow","slideWidth"]);var r=e.slideCount+2*e.slidesToShow;e.vertical?a=r*e.slideHeight:t=O(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=y;var w=function(e){b(e,["left","variableWidth","slideCount","slidesToShow","slideWidth","speed","cssEase"]);var t=y(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=w;var S=function(e){if(e.unslick)return 0;b(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=-k(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,y=i&&i.node;if(v=r+k(e),t=(a=y&&y.childNodes[v])?-1*a.offsetLeft:0,!0===o){v=n?r+k(e):r,a=y&&y.children[v],t=0;for(var w=0;w<v;w++)t-=y&&y.children[w]&&y.children[w].offsetWidth;t-=parseInt(e.centerPadding),t+=a&&(u-a.offsetWidth)/2}}return t};t.getTrackLeft=S;var k=function(e){return e.unslick||!e.infinite?0:e.variableWidth?e.slideCount:e.slidesToShow+(e.centerMode?1:0)};t.getPreClones=k;var x=function(e){return e.unslick||!e.infinite?0:e.slideCount};t.getPostClones=x;var O=function(e){return 1===e.slideCount?1:k(e)+e.slideCount+x(e)};t.getTotalSlides=O;var T=function(e){return e.targetSlide>e.currentSlide?e.targetSlide>e.currentSlide+C(e)?"left":"right":e.targetSlide<e.currentSlide-E(e)?"right":"left"};t.siblingDirection=T;var C=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=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?t-1:0};t.slidesOnLeft=E;t.canUseDOM=function(){return!("undefined"==typeof window||!window.document||!window.document.createElement)}},"4t1q":function(e,t,a){"use strict";a("SchZ"),a("TZyB")},"9eSz":function(e,t,a){"use strict";var r=a("TqRt");t.__esModule=!0,t.default=void 0;var i,n=r(a("PJYZ")),o=r(a("VbXa")),l=r(a("8OQS")),s=r(a("pVnL")),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}),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 T(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?T(e,!0):"")+T(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>'},L=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 j=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},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.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,T=e.draggable,C=!1===this.state.fadeIn||this.state.imgLoaded,j=!0===this.state.fadeIn&&!this.state.imgCached,M=(0,s.default)({opacity:C?1:0,transition:j?"opacity "+b+"ms":"none"},l),P="boolean"==typeof v?"lightgray":v,N={transitionDelay:b+"ms"},R=(0,s.default)({opacity:this.state.imgLoaded?0:1},j&&N,l,f),H={title:t,alt:this.state.isVisible?"":a,style:R,className:p,itemProp:w};if(g){var I=g,D=h(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+"%"}}),P&&d.default.createElement(y,{"aria-hidden":!0,title:t,style:(0,s.default)({backgroundColor:P,position:"absolute",top:0,bottom:0,opacity:this.state.imgLoaded?0:1,right:0,left:0},j&&N)}),D.base64&&d.default.createElement(L,{ariaHidden:!0,ref:this.placeholderRef,src:D.base64,spreadProps:H,imageVariants:I,generateSources:O}),D.tracedSVG&&d.default.createElement(L,{ariaHidden:!0,ref:this.placeholderRef,src:D.tracedSVG,spreadProps:H,imageVariants:I,generateSources:x}),this.state.isVisible&&d.default.createElement("picture",null,S(I),d.default.createElement(z,{alt:a,title:t,sizes:D.sizes,src:D.src,crossOrigin:this.props.crossOrigin,srcSet:D.srcSet,style:M,ref:this.imageRef,onLoad:this.handleImageLoaded,onError:this.props.onError,itemProp:w,loading:k,draggable:T})),this.addNoScript&&d.default.createElement("noscript",{dangerouslySetInnerHTML:{__html:E((0,s.default)({alt:a,title:t,loading:k},D,{imageVariants:I}))}}))}if(m){var F=m,W=h(m),A=(0,s.default)({position:"relative",overflow:"hidden",display:"inline-block",width:W.width,height:W.height},n);return"inherit"===n.display&&delete A.display,d.default.createElement(y,{className:(r||"")+" gatsby-image-wrapper",style:A,ref:this.handleRef,key:"fixed-"+JSON.stringify(W.srcSet)},P&&d.default.createElement(y,{"aria-hidden":!0,title:t,style:(0,s.default)({backgroundColor:P,width:W.width,opacity:this.state.imgLoaded?0:1,height:W.height},j&&N)}),W.base64&&d.default.createElement(L,{ariaHidden:!0,ref:this.placeholderRef,src:W.base64,spreadProps:H,imageVariants:F,generateSources:O}),W.tracedSVG&&d.default.createElement(L,{ariaHidden:!0,ref:this.placeholderRef,src:W.tracedSVG,spreadProps:H,imageVariants:F,generateSources:x}),this.state.isVisible&&d.default.createElement("picture",null,S(F),d.default.createElement(z,{alt:a,title:t,width:W.width,height:W.height,sizes:W.sizes,src:W.src,crossOrigin:this.props.crossOrigin,srcSet:W.srcSet,style:M,ref:this.imageRef,onLoad:this.handleImageLoaded,onError:this.props.onError,itemProp:w,loading:k,draggable:T})),this.addNoScript&&d.default.createElement("noscript",{dangerouslySetInnerHTML:{__html:E((0,s.default)({alt:a,title:t,loading:k},W,{imageVariants:F}))}}))}return null},t}(d.default.Component);j.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)}}j.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=j;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};t.default=r},"N/JB":function(e,t,a){"use strict";var r=a("TqRt");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"},{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:"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("lSNA"),i=a.n(r),n=a("pVnL"),o=a.n(n),l=a("lwsE"),s=a.n(l),d=a("W8MJ"),c=a.n(d),u=a("7W2i"),f=a.n(u),p=a("LQ03"),h=a.n(p),g=a("q1tI"),m=a.n(g),v=a("sEfC"),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("rO+z");var T=a("kPKH"),C=(a("L/Qf"),a("2/Rp")),E=a("52AM"),L=a("Wbzz"),z=a("dCk4"),j=a("qKvR"),M=a("lOwS"),P={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"},N=a("6VBw"),R=function(e,t){return g.createElement(N.a,Object.assign({},e,{ref:t,icon:P}))};R.displayName="FireOutlined";var H=g.forwardRef(R),I={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(N.a,Object.assign({},e,{ref:t,icon:I}))};D.displayName="DatabaseOutlined";var F=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"},A=function(e,t){return g.createElement(N.a,Object.assign({},e,{ref:t,icon:W}))};A.displayName="DeploymentUnitOutlined";var _=g.forwardRef(A),q={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"},B=function(e,t){return g.createElement(N.a,Object.assign({},e,{ref:t,icon:q}))};B.displayName="DotChartOutlined";var V=g.forwardRef(B),G=a("rePB"),U=a("1OyB"),Y=a("vuIU"),Q=a("Ji7U"),X=a("md7G"),J=a("foSv");function K(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 Z(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?K(Object(a),!0).forEach((function(t){Object(G.a)(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):K(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function $(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=Object(J.a)(e);if(t){var i=Object(J.a)(this).constructor;a=Reflect.construct(r,arguments,i)}else a=r.apply(this,arguments);return Object(X.a)(this,a)}}var ee=function(e){Object(Q.a)(r,e);var t=$(r);function r(e){var a;return Object(U.a)(this,r),(a=t.call(this,e)).$=m.a.createRef(),a._=m.a.createRef(),a}return Object(Y.a)(r,[{key:"render",value:function(){return m.a.createElement("span",{ref:this.$},m.a.createElement("a",Z(Z({},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)}}]),r}(g.PureComponent),te=a("Oyq8"),ae=a("9Dj+"),re=a("wx14"),ie=a("zLVn"),ne=a("9eSz"),oe=a.n(ne),le=function(e){var t,a,r,i,n=e.imageName,o=e.type,l=e.width,s=e.height,d=Object(ie.a)(e,["imageName","type","width","height"]),c=Object(L.useStaticQuery)("2167773359"),u=c.getAllImages.edges.filter((function(e){return e.node.fixed.originalName===n})),f=l&&s?{width:l,height:s}:{};return"db"===o?Object(j.d)(oe.a,{fixed:null===(t=u[0])||void 0===t||null===(a=t.node)||void 0===a?void 0:a.fixed,style:f,imgStyle:f}):Object(j.d)(oe.a,Object(re.a)({fixed:null===(r=c[n])||void 0===r||null===(i=r.childImageSharp)||void 0===i?void 0:i.fixed},d))},se=le;void 0!==le&&le&&le===Object(le)&&Object.isExtensible(le)&&!le.hasOwnProperty("__filemeta")&&Object.defineProperty(le,"__filemeta",{configurable:!0,value:{name:"Image",filename:"src/components/image.tsx"}});a("TpwP");var de=a("vrFN"),ce=a("fT7D"),ue=a.n(ce),fe=M.supersetTheme.colors,pe={name:"m2sunj",styles:"position:relative;text-align:center;padding-top:131px;padding-bottom:80px;background-image:url('/images/data-point.jpg');background-size:cover;Button{margin-top:39px;}.github-section{margin-bottom:40px;margin-top:40px;.github-button{margin:5px;}}.logo-horiz{margin-top:20px;margin-bottom:20px;}.incubator{margin-top:40px;}.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;}"},he={name:"177fmpb",styles:"font-size:55px;text-align:center;"},ge=Object(j.c)("background:#fff;padding:5vw 0;margin-top:0px;margin-bottom:30px;.featureList{padding:0px;width:100%;list-style-type:none;margin:0 auto;max-width:1000px;margin-top:40px;.feature{display:flex;margin:10px;.imagePlaceHolder{display:block;position:relative;min-width:","160","px;min-height:","160","px;background:white;flex-grow:1;svg{position:absolute;width:60px;height:60px;right:10px;left:72px;top:35px;}}.featureText{display:block;padding-top:30px;flex-grow:6;font-size:16px;color:",fe.grayscale.dark2,";line-height:25px;strong{font-size:18px;}}}}.heading{font-size:25px;width:60%;margin:0 auto;}.anticon{color:#ccc;}"),me={name:"1gzpg9z",styles:"background:white;margin-bottom:150px;.databaseSub{text-align:center;display:block;margin-bottom:40px;font-size:18px;}.databaseList{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;a{margin:20px;}}"},ve=Object(j.c)(".toggleContainer{display:flex;flex-direction:column;margin-bottom:100px;.toggleBtns{display:flex;flex-direction:row;justify-content:center;.toggle{margin:15px;color:#666;border:1px solid #888;background-color:#20a7c911;border-radius:3px;padding:30px;transition:all 0.25s;&:hover{cursor:pointer;color:",fe.primary.base,";border:1px solid ",fe.primary.base,";}&.active{background:red;background:#20a7c933;}}}.imageContainer{img{height:400px;margin:0 auto;box-shadow:0 0 3px #aaa;margin-top:5px;margin-bottom:5px;}}}"),be=Object(E.b)()((function(){var e=Object(E.d)(),t=Object(g.useRef)(null),a=Object(g.useState)(0),r=a[0],i=a[1];return Object(j.d)(z.a,{theme:e},Object(j.d)(de.a,{title:"Superset"}),Object(j.d)(ae.a,null,Object(j.d)("div",{css:pe},Object(j.d)("img",{width:"600",className:"logo-horiz",src:ue.a,alt:"logo-horiz"}),Object(j.d)("h2",null,"Apache Superset is a modern data",Object(j.d)("br",null),"exploration and visualization platform"),Object(j.d)("div",{className:"github-section"},Object(j.d)("span",{className:"github-button"},Object(j.d)(ee,{href:"https://github.com/apache/incubator-superset","data-size":"large","data-show-count":"true","aria-label":"Star apache/incubator-superset on GitHub"},"Star")),Object(j.d)("span",{className:"github-button"},Object(j.d)(ee,{href:"https://github.com/apache/incubator-superset/subscription","data-size":"large","data-show-count":"true","aria-label":"Watch apache/incubator-superset on GitHub"},"Watch")),Object(j.d)("span",{className:"github-button"},Object(j.d)(ee,{href:"https://github.com/apache/incubator-superset/fork","data-size":"large","data-show-count":"true","aria-label":"Fork apache/incubator-superset on GitHub"},"Fork"))),Object(j.d)("div",{className:"incubator"},Object(j.d)(se,{imageName:"incubatorSm"})),Object(j.d)("div",null,Object(j.d)(L.Link,{to:"/docs/intro"},Object(j.d)(C.a,{type:"primary",size:"medium"},"Get Started")))),Object(j.d)("div",{css:ge},Object(j.d)("h2",{css:he},"Overview"),Object(j.d)("h4",{className:"heading"}," ","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(j.d)("ul",{className:"featureList ant-row"},Object(j.d)(T.a,{span:12},Object(j.d)("li",{className:"feature"},Object(j.d)("span",{className:"imagePlaceHolder"}," ",Object(j.d)(H,null)," "),Object(j.d)("span",{className:"featureText"},Object(j.d)("strong",null,"Powerful and easy to use "),Object(j.d)("br",null),"Quickly and easily integrate and explore your data, using either our simple no-code viz builder or state of the art SQL IDE.")),Object(j.d)("li",{className:"feature"},Object(j.d)("span",{className:"imagePlaceHolder"}," ",Object(j.d)(F,null)," "),Object(j.d)("span",{className:"featureText"},Object(j.d)("strong",null," Integrates with modern databases"),Object(j.d)("br",null)," Superset can connect to any SQL based datasource through SQL Alchemy, including modern cloud native databases and engines at petabyte scale."))),Object(j.d)(T.a,{span:12},Object(j.d)("li",{className:"feature"},Object(j.d)("span",{className:"imagePlaceHolder"}," ",Object(j.d)(_,null)," "),Object(j.d)("span",{className:"featureText"},Object(j.d)("strong",null," Modern architecture "),Object(j.d)("br",null),"Superset is lightweight and highly scalable, leveraging the power of your existing data infrastructure without requiring yet another ingestion layer.")),Object(j.d)("li",{className:"feature"},Object(j.d)("span",{className:"imagePlaceHolder"}," ",Object(j.d)(V,null)," "),Object(j.d)("span",{className:"featureText"},Object(j.d)("strong",null," Rich visualizations and dashboards ")," ",Object(j.d)("br",null),"Superset ships with a wide array of beautiful visualizations. Our visualization plug-in architecture makes it easy to build custom visualizations that drop directly into Superset."))))),Object(j.d)("div",{css:ve},Object(j.d)("h2",{css:he},"Explore"),Object(j.d)("div",{className:"toggleContainer"},Object(j.d)("div",{className:"toggleBtns"},Object(j.d)("div",{className:"toggle "+(0===r?"active":null),onClick:function(){return t.current.goTo(0)},role:"button"},Object(j.d)("h2",null,"Explore"),Object(j.d)("span",null,"Explore your data using the array of data visualizations.")),Object(j.d)("div",{className:"toggle "+(1===r?"active":null),onClick:function(){return t.current.goTo(1)},role:"button"},Object(j.d)("h2",null,"View"),Object(j.d)("span",null,"View your data through interactive dashboards")),Object(j.d)("div",{className:"toggle "+(2===r?"active":null),onClick:function(){return t.current.goTo(2)},role:"button"},Object(j.d)("h2",null,"Investigate"),Object(j.d)("span",null,"Use sqlab to write queries to explore your data"))),Object(j.d)(O,{ref:t,effect:"scrollx",afterChange:function(e){i(e)}},Object(j.d)("div",{className:"imageContainer"},Object(j.d)("img",{src:"/images/explorer.png",alt:""})),Object(j.d)("div",{className:"imageContainer"},Object(j.d)("img",{src:"/images/dashboard3.png",alt:""})),Object(j.d)("div",{className:"imageContainer"},Object(j.d)("img",{src:"/images/sqllab1.png",alt:""}))))),Object(j.d)("div",{css:me},Object(j.d)("h2",{css:he},"Supported Databases"),Object(j.d)("ul",{className:"databaseList"},te.a.map((function(e){var t=e.title,a=e.href,r=e.imgName,i=e.width,n=e.height;return Object(j.d)("a",{href:a,target:"_blank",key:r,rel:"noreferrer"},Object(j.d)(se,{imageName:r,type:"db",width:i,height:n,alt:t}))}))),Object(j.d)("span",{className:"databaseSub"}," ","... and any other SQLAlchemy"," ",Object(j.d)("a",{href:"https://superset.incubator.apache.org/installation.html#database-dependencies"}," ","compatible databases"," ")," "))))}));t.default=be;void 0!==be&&be&&be===Object(be)&&Object.isExtensible(be)&&!be.hasOwnProperty("__filemeta")&&Object.defineProperty(be,"__filemeta",{configurable:!0,value:{name:"__DOCZ_DUMMY_EXPORT_DEFAULT",filename:"src/pages/index.tsx"}})},TZyB:function(e,t,a){},ToDW:function(e,t,a){"use strict";var r=a("TqRt");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=r(a("pVnL")),n=r(a("3tO9")),o=r(a("lwsE")),l=r(a("W8MJ")),s=r(a("PJYZ")),d=r(a("7W2i")),c=r(a("LQ03")),u=r(a("lSNA")),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:"UNSAFE_componentWillMount",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("TqRt");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("TqRt");Object.defineProperty(t,"__esModule",{value:!0}),t.Dots=void 0;var i=r(a("3tO9")),n=r(a("lwsE")),o=r(a("W8MJ")),l=r(a("7W2i")),s=r(a("LQ03")),d=r(a("q1tI")),c=r(a("TSYQ")),u=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(){var e,t=this,a=(e={slideCount:this.props.slideCount,slidesToScroll:this.props.slidesToScroll,slidesToShow:this.props.slidesToShow,infinite:this.props.infinite}).infinite?Math.ceil(e.slideCount/e.slidesToScroll):Math.ceil((e.slideCount-e.slidesToShow)/e.slidesToScroll)+1,r=this.props,n={onMouseEnter:r.onMouseEnter,onMouseOver:r.onMouseOver,onMouseLeave:r.onMouseLeave},o=Array.apply(null,Array(a+1).join("0").split("")).map((function(e,a){var r=a*t.props.slidesToScroll,i=a*t.props.slidesToScroll+(t.props.slidesToScroll-1),n=(0,c.default)({"slick-active":t.props.currentSlide>=r&&t.props.currentSlide<=i}),o={message:"dots",index:a,slidesToScroll:t.props.slidesToScroll,currentSlide:t.props.currentSlide},l=t.clickHandler.bind(t,o);return d.default.createElement("li",{key:a,className:n},d.default.cloneElement(t.props.customPaging(a),{onClick:l}))}));return d.default.cloneElement(this.props.appendDots(o),(0,i.default)({className:this.props.dotsClass},n))}}]),a}(d.default.PureComponent);t.Dots=u},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("TqRt");Object.defineProperty(t,"__esModule",{value:!0}),t.InnerSlider=void 0;var i=r(a("pVnL")),n=r(a("QILm")),o=r(a("cDf5")),l=r(a("3tO9")),s=r(a("lwsE")),d=r(a("PJYZ")),c=r(a("7W2i")),u=r(a("LQ03")),f=r(a("lSNA")),p=r(a("q1tI")),h=r(a("F1Ou")),g=r(a("sEfC")),m=r(a("TSYQ")),v=a("3K4p"),b=a("+uyH"),y=a("coqV"),w=a("3Fjq"),S=r(a("bdgK")),k=function(e){(0,c.default)(a,e);var t=(0,u.default)(a);function a(e){var r;return(0,s.default)(this,a),r=t.call(this,e),(0,f.default)((0,d.default)(r),"listRefHandler",(function(e){return r.list=e})),(0,f.default)((0,d.default)(r),"trackRefHandler",(function(e){return r.track=e})),(0,f.default)((0,d.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,v.getHeight)(e)+"px"}})),(0,f.default)((0,d.default)(r),"UNSAFE_componentWillMount",(function(){if(r.ssrInit(),r.props.onInit&&r.props.onInit(),r.props.lazyLoad){var e=(0,v.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))}})),(0,f.default)((0,d.default)(r),"componentDidMount",(function(){var e=(0,l.default)({listRef:r.list,trackRef:r.track},r.props);r.updateState(e,!0,(function(){r.adaptHeight(),r.props.autoplay&&r.autoPlay("update")})),"progressive"===r.props.lazyLoad&&(r.lazyLoadTimer=setInterval(r.progressiveLazyLoad,1e3)),r.ro=new S.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,f.default)((0,d.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,f.default)((0,d.default)(r),"UNSAFE_componentWillReceiveProps",(function(e){for(var t=r.props,a=t.autoplay,i=t.autoplaySpeed,n=(0,l.default)((0,l.default)({listRef:r.list,trackRef:r.track},e),r.state),s=!1,d=0,c=Object.keys(r.props);d<c.length;d++){var u=c[d];if(!e.hasOwnProperty(u)){s=!0;break}if("object"!==(0,o.default)(e[u])&&"function"!=typeof e[u]&&e[u]!==r.props[u]){s=!0;break}}r.updateState(n,s,(function(){r.state.currentSlide>=p.default.Children.count(e.children)&&r.changeSlide({message:"index",index:p.default.Children.count(e.children)-e.slidesToShow,currentSlide:r.state.currentSlide}),a===e.autoplay&&i===e.autoplaySpeed||(e.autoplay?r.autoPlay("update"):r.pause("paused"))}))})),(0,f.default)((0,d.default)(r),"componentDidUpdate",(function(){if(r.checkImagesLoad(),r.props.onReInit&&r.props.onReInit(),r.props.lazyLoad){var e=(0,v.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))}r.adaptHeight()})),(0,f.default)((0,d.default)(r),"onWindowResized",(function(e){r.debouncedResize&&r.debouncedResize.cancel(),r.debouncedResize=(0,g.default)((function(){return r.resizeWindow(e)}),50),r.debouncedResize()})),(0,f.default)((0,d.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,f.default)((0,d.default)(r),"updateState",(function(e,t,a){var i=(0,v.initializedState)(e);e=(0,l.default)((0,l.default)((0,l.default)({},e),i),{},{slideIndex:i.currentSlide});var n=(0,v.getTrackLeft)(e);e=(0,l.default)((0,l.default)({},e),{},{left:n});var o=(0,v.getTrackCSS)(e);(t||p.default.Children.count(r.props.children)!==p.default.Children.count(e.children))&&(i.trackStyle=o),r.setState(i,a)})),(0,f.default)((0,d.default)(r),"ssrInit",(function(){if(r.props.variableWidth){var e=0,t=0,a=[],i=(0,v.getPreClones)((0,l.default)((0,l.default)((0,l.default)({},r.props),r.state),{},{slideCount:r.props.children.length})),n=(0,v.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 ) ")}r.setState({trackStyle:c})}else{var f=p.default.Children.count(r.props.children),h=(0,l.default)((0,l.default)((0,l.default)({},r.props),r.state),{},{slideCount:f}),g=(0,v.getPreClones)(h)+(0,v.getPostClones)(h)+f,m=100/r.props.slidesToShow*g,b=100/g,y=-b*((0,v.getPreClones)(h)+r.state.currentSlide)*m/100;r.props.centerMode&&(y+=(100-b*m/100)/2);var w={width:m+"%",left:y+"%"};r.setState({slideWidth:b+"%",trackStyle:w})}})),(0,f.default)((0,d.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,f.default)((0,d.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,v.getPostClones)(t);a++)if(r.state.lazyLoadedList.indexOf(a)<0){e.push(a);break}for(var i=r.state.currentSlide-1;i>=-(0,v.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,f.default)((0,d.default)(r),"slideHandler",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=r.props,i=a.asNavFor,o=a.beforeChange,s=a.onLazyLoad,d=a.speed,c=a.afterChange,u=r.state.currentSlide,f=(0,v.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){o&&o(u,p.currentSlide);var g=p.lazyLoadedList.filter((function(e){return r.state.lazyLoadedList.indexOf(e)<0}));s&&g.length>0&&s(g),r.setState(p,(function(){i&&i.innerSlider.slideHandler(e),h&&(r.animationEndCallback=setTimeout((function(){var e=h.animating,t=(0,n.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,f.default)((0,d.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,v.changeSlide)(a,e);(0===i||i)&&(!0===t?r.slideHandler(i,t):r.slideHandler(i))})),(0,f.default)((0,d.default)(r),"clickHandler",(function(e){!1===r.clickable&&(e.stopPropagation(),e.preventDefault()),r.clickable=!0})),(0,f.default)((0,d.default)(r),"keyHandler",(function(e){var t=(0,v.keyHandler)(e,r.props.accessibility,r.props.rtl);""!==t&&r.changeSlide({message:t})})),(0,f.default)((0,d.default)(r),"selectHandler",(function(e){r.changeSlide(e)})),(0,f.default)((0,d.default)(r),"disableBodyScroll",(function(){window.ontouchmove=function(e){(e=e||window.event).preventDefault&&e.preventDefault(),e.returnValue=!1}})),(0,f.default)((0,d.default)(r),"enableBodyScroll",(function(){window.ontouchmove=null})),(0,f.default)((0,d.default)(r),"swipeStart",(function(e){r.props.verticalSwiping&&r.disableBodyScroll();var t=(0,v.swipeStart)(e,r.props.swipe,r.props.draggable);""!==t&&r.setState(t)})),(0,f.default)((0,d.default)(r),"swipeMove",(function(e){var t=(0,v.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,f.default)((0,d.default)(r),"swipeEnd",(function(e){var t=(0,v.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,f.default)((0,d.default)(r),"slickPrev",(function(){r.callbackTimers.push(setTimeout((function(){return r.changeSlide({message:"previous"})}),0))})),(0,f.default)((0,d.default)(r),"slickNext",(function(){r.callbackTimers.push(setTimeout((function(){return r.changeSlide({message:"next"})}),0))})),(0,f.default)((0,d.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,f.default)((0,d.default)(r),"play",(function(){var e;if(r.props.rtl)e=r.state.currentSlide-r.props.slidesToScroll;else{if(!(0,v.canGoNext)((0,l.default)((0,l.default)({},r.props),r.state)))return!1;e=r.state.currentSlide+r.props.slidesToScroll}r.slideHandler(e)})),(0,f.default)((0,d.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,f.default)((0,d.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,f.default)((0,d.default)(r),"onDotsOver",(function(){return r.props.autoplay&&r.pause("hovered")})),(0,f.default)((0,d.default)(r),"onDotsLeave",(function(){return r.props.autoplay&&"hovered"===r.state.autoplaying&&r.autoPlay("leave")})),(0,f.default)((0,d.default)(r),"onTrackOver",(function(){return r.props.autoplay&&r.pause("hovered")})),(0,f.default)((0,d.default)(r),"onTrackLeave",(function(){return r.props.autoplay&&"hovered"===r.state.autoplaying&&r.autoPlay("leave")})),(0,f.default)((0,d.default)(r),"onSlideFocus",(function(){return r.props.autoplay&&r.pause("focused")})),(0,f.default)((0,d.default)(r),"onSlideBlur",(function(){return r.props.autoplay&&"focused"===r.state.autoplaying&&r.autoPlay("blur")})),(0,f.default)((0,d.default)(r),"render",(function(){var e,t,a,n=(0,m.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,v.extractObject)(o,["fade","cssEase","speed","infinite","centerMode","focusOnSelect","currentSlide","lazyLoad","lazyLoadedList","rtl","slideWidth","slideHeight","listHeight","vertical","slidesToShow","slidesToScroll","slideCount","trackStyle","variableWidth","unslick","centerPadding"]),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.selectHandler:null}),!0===r.props.dots&&r.state.slideCount>=r.props.slidesToShow){var c=(0,v.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=p.default.createElement(y.Dots,c)}var f=(0,v.extractObject)(o,["infinite","centerMode","currentSlide","slideCount","slidesToShow","prevArrow","nextArrow"]);f.clickHandler=r.changeSlide,r.props.arrows&&(t=p.default.createElement(w.PrevArrow,f),a=p.default.createElement(w.NextArrow,f));var h=null;r.props.vertical&&(h={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 S=(0,l.default)((0,l.default)({},h),g),k=r.props.touchMove,x={className:"slick-list",style:S,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.swipeEnd:null,onTouchCancel:r.state.dragging&&k?r.swipeEnd:null,onKeyDown:r.props.accessibility?r.keyHandler:null},O={className:n,dir:"ltr",style:r.props.style};return r.props.unslick&&(x={className:"slick-list"},O={className:n}),p.default.createElement("div",O,r.props.unslick?"":t,p.default.createElement("div",(0,i.default)({ref:r.listRefHandler},x),p.default.createElement(b.Track,(0,i.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)({},h.default),{},{currentSlide:r.props.initialSlide,slideCount:p.default.Children.count(r.props.children)}),r.callbackTimers=[],r.clickable=!0,r.debouncedResize=null,r}return a}(p.default.Component);t.InnerSlider=k},kPKH:function(e,t,a){"use strict";var r=a("/kpp");t.a=r.a},lOwS:function(e,t,a){"use strict";t.__esModule=!0,t.default=t.supersetTheme=t.styled=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=i.default;t.styled=o;var l={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=l;var s=o;t.default=s},mdmF:function(e,t,a){},"o/2+":function(e,t,a){"use strict";var r=a("q1tI"),i=Object(r.createContext)({});t.a=i},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,T=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,T(r.width)),a=i.max(a,T(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)}}},"rO+z":function(e,t,a){"use strict";a("SchZ"),a("4t1q")},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("lSNA"),i=a.n(r),n=a("q1tI"),o=a.n(n),l=a("qKvR"),s=a("gRFL"),d=a("pVnL"),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.b.Consumer,null,(function(t){return e.theme!==t&&(t=g(t)(e.theme)),Object(n.createElement)(l.b.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.b.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.b)}}}]);
//# sourceMappingURL=component---src-pages-index-tsx-f636c951c575d72e669b.js.map