< html>
< head>
< style>
@import url( 'https://f...content-available-to-author-only...s.com/css2?family=Ephesis&family=Roboto:wght@500&display=swap' ) ;
body {
background- color: #151522;
overflow: hidden;
display: flex;
align- items: center;
justify- content: center;
}
body,
html {
height: 100 %;
width: 100 %;
margin: 0 ;
padding: 0 ;
/* background: url('https://h...content-available-to-author-only...x.com/wp-content/uploads/2023/09/iPhone-14-Pro-Christmas-Wallpaper.jpg'); */
}
svg {
width: 90 %;
height: 90 %;
visibility: hidden;
}
.sparkle {
/* mix-blend-mode:luminosity */
}
.text {
padding: 15px 15px 15px 15px;
font- family: "Ephesis" , sans- serif;
font- size: 83px;
color: #fffefe;
position: fixed;
top: calc( 50 % - 500px) ;
text- align: center;
opacity: 0 ;
}
.typewriter {
overflow: hidden;
/* Ensures the content is not revealed until the animation */
border- right: 2px solid white;
/* The typwriter cursor */
white- space: nowrap;
/* Keeps the content on a single line */
margin: 0 auto ;
/* Gives that scrolling effect as the typing happens */
letter- spacing: .15em;
/* Adjust as needed */
animation:
typing 3.5s steps( 40 , end) forwards,
blink- caret .75s step- end forwards;
animation- delay: 5s;
}
.santa - claus {
animation: santa 2s forwards;
animation- delay: 6s;
width: 300px;
height: 300px;
position: fixed;
top: calc( 50 % + 30px) ;
left: calc( 50 % + 200px) ;
opacity: 0 ;
}
/* The typing effect */
@keyframes typing {
from {
width: 0 ;
opacity: 0 ;
}
to {
width: 100 %;
opacity: 1 ;
}
}
/* The typing effect */
@keyframes santa {
from {
opacity: 0 ;
}
to {
opacity: 1 ;
}
}
/* The typewriter cursor effect */
@keyframes blink- caret {
from,
to {
border- color: transparent
}
50 % {
border- color: #fff;
}
}
</ style>
< body>
< svg class= "mainSVG" xmlns= "http://w...content-available-to-author-only...3.org/2000/svg" xmlns: xlink= "http://w...content-available-to-author-only...3.org/1999/xlink"
viewBox= "0 0 800 600" >
< defs>
< circle id= "circ" class= "particle" cx= "0" cy= "0" r= "1" />
< polygon id= "star" class= "particle"
points= "4.55,0 5.95,2.85 9.1,3.3 6.82,5.52 7.36,8.65 4.55,7.17 1.74,8.65 2.27,5.52 0,3.3 3.14,2.85 " />
< polygon id= "cross" class= "particle"
points= "4,3.5 2.5,2 4,0.5 3.5,0 2,1.5 0.5,0 0,0.5 1.5,2 0,3.5 0.5,4 2,2.5 3.5,4 " />
< path id= "heart" class= "particle" d= "M2.9,0C2.53,0,2.2,0.18,2,0.47C1.8,0.18,1.47,0,1.1,0C0.49,0,0,0.49,0,1.1
C0,2.6,1.56,4,2,4s2-1.4,2-2.9C4,0.49,3.51,0,2.9,0z" />
< radialGradient id= "grad" cx= "3" cy= "3" r= "6" gradientUnits= "userSpaceOnUse" >
< stop offset= "0" style= "stop-color:red" />
< stop offset= "0.4" style= "stop-color:#334673" />
< stop offset= "0.6" style= "stop-color:#EDDDC4" />
< stop offset= "0.9" style= "stop-color:#FEE8C7" />
< stop offset= "1" style= "stop-color:red" />
</ radialGradient>
< radialGradient id= "dotGrad" cx= "0" cy= "0" r= "50" gradientUnits= "userSpaceOnUse" >
< stop offset= "0" style= "stop-color:#FFFFFF;stop-opacity:1" />
< stop offset= "0.1" style= "stop-color:#0867C7;stop-opacity:0.6" />
< stop offset= "1" style= "stop-color:#081029;stop-opacity:0" />
</ radialGradient>
< mask id= "treePathMask" >
< path class= "treePathMask" fill= "none" stroke- width= "18" stroke= "#FFF" d= "M252.9,447.9c0,0-30.8-21.6,33.9-44.7c64.7-23.1,46.2-37,33.9-41.6
c-12.3-4.6-59.3-11.6-42.4-28.5s114-52.4,81.7-66.2c-32.4-13.9-58.5-10.8-35.4-29.3s66.2-101.7,70.9-115.6
c4.4-13.2,16.9-18.5,24.7,0c7.7,18.5,44.7,100.1,67.8,115.6c23.1,15.4-10.8,21.6-26.2,24.7c-15.4,3.1-20,33.9,33.9,49.3
c53.9,15.4,47.8,40.1,27.7,44.7c-20,4.6-63.2,4.6-27.7,32.4s98.6,21.6,61.6,60.1" />
</ mask>
< mask id= "treeBottomMask" >
< path class= "treeBottomMask" stroke= "#FFF" stroke- width= "8"
d= "M207.5,484.1c0,0,58.5-43.1,211.1-3.1s191-16.9,191-16.9" />
</ mask>
< mask id= "treePotMask" >
< path class= "treePotMask" stroke= "#FFF" stroke- width= "8"
d= "M374.3,502.5c0,0-4.6,20,7.7,29.3c12.3,9.2,40.1,7.7,50.8,0s10.8-23.1,10.8-29.3" />
</ mask>
< filter id= "glow" x= "-150%" y= "-150%" width= "280%" height= "280%" >
< feOffset result= "offOut" in= "SourceGraphic" dx= "0" dy= "0" />
< feGaussianBlur in= "offOut" stdDeviation= "16" result= "blur" />
< feComponentTransfer>
< feFuncR type= "discrete" tableValues= "0.8" />
< feFuncG type= "discrete" tableValues= "0.3" />
< feFuncB type= "discrete" tableValues= "0.2" />
<!--< feFuncA type= "linear" slope= "1" intercept= "0" />-->
</ feComponentTransfer>
< feComposite in= "SourceGraphic" operator= "over" />
</ filter>
</ defs>
< g class= "whole" >
< g class= "pContainer" ></ g>
< g class= "tree" mask= "url(#treePathMask)" >
< path
d= "M252.95,447.85a20.43,20.43,0,0,1-5.64-6.24,14,14,0,0,1-1.91-8.22,16.93,16.93,0,0,1,3.06-8,33.16,33.16,0,0,1,5.79-6.28A74.78,74.78,0,0,1,268.54,410a163.48,163.48,0,0,1,15.52-6.84c10.54-3.93,21-8.07,30.72-13.46a80.83,80.83,0,0,0,7-4.37,37.51,37.51,0,0,0,6.13-5.24c1.75-1.92,3.14-4.18,3.25-6.35s-1.12-4.18-3-5.81a25,25,0,0,0-6.72-3.91,61.25,61.25,0,0,0-7.8-2.42c-5.41-1.4-10.91-2.72-16.38-4.32a84.17,84.17,0,0,1-16.2-6.19,28.26,28.26,0,0,1-3.86-2.5,15.06,15.06,0,0,1-3.44-3.63,9,9,0,0,1-1.51-5.47,10.22,10.22,0,0,1,.61-2.78,12.88,12.88,0,0,1,1.2-2.34,26.73,26.73,0,0,1,6.58-6.56c2.35-1.76,4.76-3.33,7.19-4.84,4.87-3,9.82-5.75,14.77-8.46,9.91-5.4,19.88-10.59,29.63-16.08,4.87-2.75,9.68-5.56,14.33-8.56A81.88,81.88,0,0,0,359.45,280a23,23,0,0,0,2.41-2.79,8.36,8.36,0,0,0,1.35-2.65,2.13,2.13,0,0,0-.17-1.7,5.53,5.53,0,0,0-1.88-1.77,13.15,13.15,0,0,0-1.49-.83c-.52-.26-1.1-.49-1.76-.77-1.27-.53-2.55-1-3.83-1.53q-3.86-1.48-7.8-2.77c-5.26-1.74-10.6-3.23-16-4.79-2.72-.79-5.47-1.58-8.29-2.61a31.74,31.74,0,0,1-4.33-1.92,14.39,14.39,0,0,1-2.29-1.53,8.74,8.74,0,0,1-2.22-2.66,7.2,7.2,0,0,1-.78-4,9.09,9.09,0,0,1,1-3.24,18.93,18.93,0,0,1,3-4.21,44.88,44.88,0,0,1,3.29-3.19c.56-.5,1.12-1,1.68-1.45l1.61-1.33a84,84,0,0,0,10.88-11.88,326.2,326.2,0,0,0,18.79-27.53c5.88-9.5,11.48-19.19,16.89-29S380.1,146.16,385,136.13c1.22-2.51,2.42-5,3.57-7.54s2.29-5.09,3.14-7.45l.36-1c.14-.38.26-.75.42-1.12.29-.75.64-1.48,1-2.21a25.51,25.51,0,0,1,2.65-4.21,19.15,19.15,0,0,1,3.76-3.69,13.74,13.74,0,0,1,5.24-2.42,12.11,12.11,0,0,1,6.12.25,14.59,14.59,0,0,1,5,2.79,20.59,20.59,0,0,1,3.47,3.79,30.33,30.33,0,0,1,2.5,4.1c.35.7.7,1.39,1,2.1l.46,1.05.4,1,1.64,3.84,3.39,7.67q6.88,15.32,14.36,30.37c5,10,10.18,19.94,15.69,29.65a274.94,274.94,0,0,0,17.9,28A73.36,73.36,0,0,0,487.74,233c.49.4,1,.8,1.48,1.15l1.7,1.19a35,35,0,0,1,3.66,3,17.84,17.84,0,0,1,3.32,4.08,10.83,10.83,0,0,1,1.14,2.94,8.54,8.54,0,0,1,0,3.54,10.27,10.27,0,0,1-3.22,5.39,20.71,20.71,0,0,1-4.15,2.91,49,49,0,0,1-8.4,3.46,154,154,0,0,1-16.77,4.09l-4.15.81a9.18,9.18,0,0,0-2.87,1.08,9.51,9.51,0,0,0-4,4.7,12.55,12.55,0,0,0-.67,6.58,19.5,19.5,0,0,0,2.46,6.74A37.19,37.19,0,0,0,468,295.75a75,75,0,0,0,14.14,7.86,129.67,129.67,0,0,0,15.58,5.49A141.4,141.4,0,0,1,513.88,315a75,75,0,0,1,15.19,8.65,37.29,37.29,0,0,1,6.55,6.24,21.05,21.05,0,0,1,4.31,8.49,14.43,14.43,0,0,1-1.24,9.88,18.08,18.08,0,0,1-6.66,6.94,26.74,26.74,0,0,1-8.56,3.33c-2.84.61-5.65,1.06-8.44,1.49-5.58.86-11.13,1.61-16.52,2.77a53.48,53.48,0,0,0-7.81,2.22c-2.43.94-4.81,2.22-6,3.93a4.34,4.34,0,0,0-.77,2.82,8.45,8.45,0,0,0,1,3.29,28,28,0,0,0,4.82,6.25,80.74,80.74,0,0,0,12.81,10.4c9.29,6,19.72,10.29,30.24,14.17,5.27,1.95,10.59,3.79,15.85,5.86,2.63,1,5.24,2.14,7.79,3.39a37.94,37.94,0,0,1,7.28,4.51,11.9,11.9,0,0,1,3.63,15.57,34.68,34.68,0,0,1-4.53,7.16,77.45,77.45,0,0,1-5.64,6.29,77.31,77.31,0,0,0,5.41-6.46,34.27,34.27,0,0,0,4.22-7.21,12.64,12.64,0,0,0,.88-8,12.44,12.44,0,0,0-4.71-6.43,37.71,37.71,0,0,0-7.15-4.16c-2.53-1.16-5.13-2.18-7.76-3.14-5.26-1.91-10.62-3.62-16-5.44-10.65-3.63-21.34-7.64-31.11-13.64a83.84,83.84,0,0,1-13.61-10.49,31.27,31.27,0,0,1-5.6-6.94,12,12,0,0,1-1.55-4.68,8.17,8.17,0,0,1,.19-2.7,8.56,8.56,0,0,1,1.09-2.5,12.1,12.1,0,0,1,3.6-3.44,24.27,24.27,0,0,1,4.08-2.08,57.3,57.3,0,0,1,8.36-2.56c5.59-1.31,11.19-2.17,16.71-3.12,2.76-.48,5.5-1,8.15-1.59a22.1,22.1,0,0,0,7-2.87,13.3,13.3,0,0,0,4.82-5.15,9.42,9.42,0,0,0,.69-6.53,16,16,0,0,0-3.42-6.33,33.25,33.25,0,0,0-5.73-5.27,69.74,69.74,0,0,0-14.19-7.8,135.81,135.81,0,0,0-15.61-5.42,135.53,135.53,0,0,1-16.3-5.51,81,81,0,0,1-15.41-8.31,43.39,43.39,0,0,1-12.6-13,25.53,25.53,0,0,1-3.34-9,19.13,19.13,0,0,1,1-10,16.17,16.17,0,0,1,6.69-8,15.88,15.88,0,0,1,5-1.93l4.13-.84a147.75,147.75,0,0,0,16-4,42.41,42.41,0,0,0,7.17-3,14,14,0,0,0,2.74-1.92,3.42,3.42,0,0,0,1.12-1.68,2.41,2.41,0,0,0-.43-1.61,11.07,11.07,0,0,0-2-2.4,28,28,0,0,0-2.92-2.31l-1.76-1.22c-.65-.46-1.26-.94-1.86-1.43a59,59,0,0,1-6.43-6.27c-2-2.19-3.79-4.44-5.54-6.74a267,267,0,0,1-18.55-28.74c-5.63-9.85-10.89-19.86-16-30s-9.91-20.31-14.57-30.61l-3.45-7.76L417,124.48l-.42-1-.39-.88c-.25-.59-.54-1.15-.82-1.71a22.74,22.74,0,0,0-1.89-3.09,13,13,0,0,0-2.2-2.42,7,7,0,0,0-2.31-1.33,4.49,4.49,0,0,0-2.22-.09,8.55,8.55,0,0,0-4.59,3.32,17.85,17.85,0,0,0-1.84,2.92c-.26.54-.51,1.07-.73,1.64-.12.27-.22.56-.32.85l-.35,1c-1.06,2.93-2.23,5.47-3.42,8.1s-2.42,5.16-3.67,7.7c-5,10.18-10.29,20.16-15.77,30.05s-11.17,19.66-17.16,29.28a310.2,310.2,0,0,1-19.39,28.11,90.46,90.46,0,0,1-12,12.85l-1.65,1.35c-.52.43-1,.85-1.53,1.29a38,38,0,0,0-2.79,2.65,12.42,12.42,0,0,0-1.94,2.57,2.33,2.33,0,0,0-.28.76c0,.11,0,0,0,.09a4.57,4.57,0,0,0,1.7,1.35,25.15,25.15,0,0,0,3.36,1.51c2.46.92,5.11,1.72,7.79,2.52,5.36,1.58,10.84,3.16,16.25,5q4.06,1.37,8.08,2.94c1.34.53,2.67,1.07,4,1.63.64.27,1.36.57,2.1.94a19.66,19.66,0,0,1,2.18,1.24,11.85,11.85,0,0,1,4,4.13,8.64,8.64,0,0,1,1,3.24,9.11,9.11,0,0,1-.27,3.23,14.48,14.48,0,0,1-2.42,4.85,29.32,29.32,0,0,1-3.14,3.56,87.46,87.46,0,0,1-14,10.47c-4.85,3-9.79,5.84-14.76,8.55-9.94,5.42-20,10.49-29.91,15.72-5,2.62-9.88,5.28-14.63,8.12-2.37,1.42-4.7,2.89-6.88,4.46a22.06,22.06,0,0,0-5.45,5.14,8,8,0,0,0-.76,1.39,5.36,5.36,0,0,0-.33,1.32,4.1,4.1,0,0,0,.69,2.53,15.62,15.62,0,0,0,5.49,4.62A80.14,80.14,0,0,0,298.56,353c5.31,1.66,10.73,3.06,16.18,4.58a64.81,64.81,0,0,1,8.26,2.74,27.74,27.74,0,0,1,7.69,4.74,13.65,13.65,0,0,1,3,3.81,9.27,9.27,0,0,1,1,5,11.14,11.14,0,0,1-1.54,4.7,19.09,19.09,0,0,1-2.8,3.67,40.6,40.6,0,0,1-6.81,5.54,83.78,83.78,0,0,1-7.41,4.35c-10.11,5.26-20.76,9.16-31.39,12.82a161.69,161.69,0,0,0-15.52,6.37A74.57,74.57,0,0,0,255,420a32.17,32.17,0,0,0-5.82,5.89,16.21,16.21,0,0,0-3.19,7.52,13.61,13.61,0,0,0,1.59,8A20.29,20.29,0,0,0,252.95,447.85Z"
fill= "#cb9866" />
< path
d= "M207.5,484.06c7.05-5.11,15.14-8.66,23.34-11.63a177.13,177.13,0,0,1,25.29-6.88,263.65,263.65,0,0,1,52.22-4.49h3.28l3.28.09,6.56.19,6.55.39c2.18.13,4.37.26,6.54.48,4.35.39,8.71.74,13,1.28l6.51.75,6.49.91c17.3,2.5,34.41,6,51.36,10.19l12.62,3.2c4.18,1,8.34,2.18,12.55,3.06,8.38,2,16.82,3.63,25.29,5.13a353.5,353.5,0,0,0,51.17,5.47c17.11.32,34.36-.66,51-4.7a118.55,118.55,0,0,0,24.21-8.47,84.82,84.82,0,0,0,11.11-6.49,47.55,47.55,0,0,0,9.69-8.53,48.1,48.1,0,0,1-9,9.45,85.1,85.1,0,0,1-10.81,7.45,116.56,116.56,0,0,1-24.23,10.24,165.66,165.66,0,0,1-25.79,5.35,232.1,232.1,0,0,1-26.27,1.71c-8.77,0-17.55-.24-26.26-1.09-2.18-.2-4.37-.35-6.54-.6l-6.52-.78c-4.36-.46-8.67-1.19-13-1.82-8.64-1.37-17.22-3.09-25.74-5-4.28-.87-8.5-2-12.75-3l-12.62-3.11q-25.06-6.37-50.58-10.47a426.37,426.37,0,0,0-51.3-5.3c-8.59-.42-17.19-.29-25.78,0a240.1,240.1,0,0,0-25.68,2.24,186.57,186.57,0,0,0-25.27,5.19c-4.15,1.16-8.26,2.49-12.28,4.05-2,.79-4,1.6-6,2.52A50.82,50.82,0,0,0,207.5,484.06Z"
fill= "#cb9866" />
< path
d= "M374.32,502.55a48.15,48.15,0,0,0,1.24,14.35c1.15,4.52,3.29,8.64,6.49,11.35a18.5,18.5,0,0,0,5.51,3.14,39.06,39.06,0,0,0,6.41,1.82,65.78,65.78,0,0,0,13.68,1.12,72.9,72.9,0,0,0,13.72-1.44,44.51,44.51,0,0,0,6.46-1.85,17.75,17.75,0,0,0,5.51-3.15,25.45,25.45,0,0,0,7.24-11.17,52,52,0,0,0,1.9-6.91c.48-2.37.83-4.8,1.18-7.25a55.16,55.16,0,0,1,.64,7.42,40.11,40.11,0,0,1-.52,7.56,31.23,31.23,0,0,1-2.19,7.5,24.37,24.37,0,0,1-4.46,6.79,25.16,25.16,0,0,1-6.61,5,39.72,39.72,0,0,1-7.4,3A58.55,58.55,0,0,1,407.75,542a55,55,0,0,1-15.47-1.9,36.65,36.65,0,0,1-7.46-3,25.3,25.3,0,0,1-6.6-5,19.63,19.63,0,0,1-2.5-3.34,21.72,21.72,0,0,1-1.79-3.67,27.66,27.66,0,0,1-1.65-7.7,38.16,38.16,0,0,1,2-14.87Z"
fill= "#cb9866" />
</ g>
< path class= "treeBottomPath" stroke= "none" fill= "none" stroke- width= "8"
d= "M207.5,484.1c0,0,58.5-43.1,211.1-3.1s191-16.9,191-16.9" />
< path class= "treePath" fill= "none" stroke= "none" stroke- miterlimit= "10"
d= "M252.95,447.85s-30.81-21.57,33.89-44.68,46.22-37,33.89-41.6-59.32-11.56-42.37-28.5,114-52.38,81.66-66.25S301.48,256,324.59,237.55,390.84,135.87,395.46,122c4.41-13.24,16.95-18.49,24.65,0s44.68,100.14,67.79,115.55-10.78,21.57-26.19,24.65-20,33.89,33.89,49.3,47.76,40.06,27.73,44.68-63.17,4.62-27.73,32.35,98.6,21.57,61.63,60.09" />
< path class= "treeBottom" mask= "url(#treeBottomMask)"
d= "M207.5,484.06c7.05-5.11,15.14-8.66,23.34-11.63a177.13,177.13,0,0,1,25.29-6.88,263.65,263.65,0,0,1,52.22-4.49h3.28l3.28.09,6.56.19,6.55.39c2.18.13,4.37.26,6.54.48,4.35.39,8.71.74,13,1.28l6.51.75,6.49.91c17.3,2.5,34.41,6,51.36,10.19l12.62,3.2c4.18,1,8.34,2.18,12.55,3.06,8.38,2,16.82,3.63,25.29,5.13a353.5,353.5,0,0,0,51.17,5.47c17.11.32,34.36-.66,51-4.7a118.55,118.55,0,0,0,24.21-8.47,84.82,84.82,0,0,0,11.11-6.49,47.55,47.55,0,0,0,9.69-8.53,48.1,48.1,0,0,1-9,9.45,85.1,85.1,0,0,1-10.81,7.45,116.56,116.56,0,0,1-24.23,10.24,165.66,165.66,0,0,1-25.79,5.35,232.1,232.1,0,0,1-26.27,1.71c-8.77,0-17.55-.24-26.26-1.09-2.18-.2-4.37-.35-6.54-.6l-6.52-.78c-4.36-.46-8.67-1.19-13-1.82-8.64-1.37-17.22-3.09-25.74-5-4.28-.87-8.5-2-12.75-3l-12.62-3.11q-25.06-6.37-50.58-10.47a426.37,426.37,0,0,0-51.3-5.3c-8.59-.42-17.19-.29-25.78,0a240.1,240.1,0,0,0-25.68,2.24,186.57,186.57,0,0,0-25.27,5.19c-4.15,1.16-8.26,2.49-12.28,4.05-2,.79-4,1.6-6,2.52A50.82,50.82,0,0,0,207.5,484.06Z"
fill= "#cb9866" />
< path class= "treePot" mask= "url(#treePotMask)"
d= "M374.32,502.55a48.15,48.15,0,0,0,1.24,14.35c1.15,4.52,3.29,8.64,6.49,11.35a18.5,18.5,0,0,0,5.51,3.14,39.06,39.06,0,0,0,6.41,1.82,65.78,65.78,0,0,0,13.68,1.12,72.9,72.9,0,0,0,13.72-1.44,44.51,44.51,0,0,0,6.46-1.85,17.75,17.75,0,0,0,5.51-3.15,25.45,25.45,0,0,0,7.24-11.17,52,52,0,0,0,1.9-6.91c.48-2.37.83-4.8,1.18-7.25a55.16,55.16,0,0,1,.64,7.42,40.11,40.11,0,0,1-.52,7.56,31.23,31.23,0,0,1-2.19,7.5,24.37,24.37,0,0,1-4.46,6.79,25.16,25.16,0,0,1-6.61,5,39.72,39.72,0,0,1-7.4,3A58.55,58.55,0,0,1,407.75,542a55,55,0,0,1-15.47-1.9,36.65,36.65,0,0,1-7.46-3,25.3,25.3,0,0,1-6.6-5,19.63,19.63,0,0,1-2.5-3.34,21.72,21.72,0,0,1-1.79-3.67,27.66,27.66,0,0,1-1.65-7.7,38.16,38.16,0,0,1,2-14.87Z"
fill= "#cb9866" />
< g class= "treeStar" >
< path class= "treeStarOutline" opacity= "0"
d= "M421,53.27c5,.83,10.08,1.52,15.15,2.13l3.8.45,1.9.21c.33,0,.6.06,1,.12a2.41,2.41,0,0,1,1.27.66,2.52,2.52,0,0,1,.56,2.76,3.42,3.42,0,0,1-.78,1.07l-.66.69-2.65,2.77c-1.78,1.83-3.54,3.68-5.35,5.48l-2.7,2.71L429.81,75l-.69.67-.34.33,0,0h0a.14.14,0,0,0,0-.08s0-.07,0,0l0,.24.07.47.57,3.78c.4,2.52.71,5,1.06,7.57l.94,7.59.22,1.9c0,.06,0,.19,0,.34a2.21,2.21,0,0,1,0,.43,2.72,2.72,0,0,1-.21.84,2.85,2.85,0,0,1-2.65,1.75,2.57,2.57,0,0,1-.82-.14,3.12,3.12,0,0,1-.65-.3l-1.64-1-6.58-3.91-6.63-3.81-3.34-1.86-.42-.23-.21-.12-.14-.07a1,1,0,0,0-.59,0,1.15,1.15,0,0,0-.31.12l-.43.22-.85.44c-2.27,1.17-4.54,2.31-6.79,3.52s-4.51,2.38-6.74,3.61l-3.36,1.83-.84.46a3.07,3.07,0,0,1-1.28.44,2.68,2.68,0,0,1-2.84-3l.15-1,.29-1.89.57-3.78,1.18-7.56,1.24-7.52a.13.13,0,0,0,0,.08l0,0-.1-.09-.17-.17-1.37-1.34-2.73-2.68-10.93-10.7-.34-.33a4,4,0,0,1-.64-.84,3.63,3.63,0,0,1-.43-2.12,3.68,3.68,0,0,1,2.64-3.17l.52-.11.25,0,.47-.06.95-.12,1.9-.25,7.58-1,7.6-.9,1.9-.23.95-.11c.24,0,.11,0,.09,0l-.09.05-.07.08,0,0,.09-.16.46-.84.91-1.68c2.41-4.5,4.95-8.92,7.51-13.34l1-1.66.48-.83.24-.41.13-.23a3.49,3.49,0,0,1,.22-.33,2.66,2.66,0,0,1,2.83-.9,2.52,2.52,0,0,1,1.26.84,2.85,2.85,0,0,1,.37.62l.18.44q1.45,3.54,3,7.06c1,2.36,2,4.68,3.06,7,.51,1.17,1.06,2.32,1.59,3.48l.8,1.74a2.12,2.12,0,0,0,.45.75A1.42,1.42,0,0,0,421,53.27Zm-.06.39a1.82,1.82,0,0,1-1-.46,2.52,2.52,0,0,1-.56-.86l-.84-1.72c-.56-1.14-1.11-2.3-1.69-3.43-1.17-2.27-2.29-4.56-3.5-6.81s-2.39-4.51-3.6-6.76l-.23-.42a.8.8,0,0,0-.14-.18.58.58,0,0,0-.33-.15.56.56,0,0,0-.57.28L407,36.48c-2.09,4.66-4.2,9.31-6.45,13.88l-.83,1.72-.42.86-.13.27a3.57,3.57,0,0,1-2,1.67,4.26,4.26,0,0,1-.84.18l-.95.13-1.89.27L386,56.53l-7.58,1-3.49.44a.45.45,0,0,0,.34-.4.51.51,0,0,0-.07-.28s-.06-.08-.07-.08l.33.34,10.65,11,2.66,2.75,1.33,1.37.4.42a3.41,3.41,0,0,1,.53.84,3.36,3.36,0,0,1,.24,1.95c-.53,2.56-1,5-1.57,7.52L388,90.85l-.83,3.73-.42,1.87-.2.9a.5.5,0,0,0,0,.3.58.58,0,0,0,.52.37,6.28,6.28,0,0,0,1.38-.58l3.46-1.62q3.47-1.61,6.9-3.3c2.3-1.1,4.57-2.26,6.85-3.39l.86-.43.43-.21a2.55,2.55,0,0,1,.57-.22,2.21,2.21,0,0,1,1.29.08l.29.13.21.11.42.23,3.37,1.81,6.8,3.51,6.85,3.41,1.71.85c.19.09.15.07.22.08a.25.25,0,0,0,.12,0,.42.42,0,0,0,.21-.1.33.33,0,0,0,.1-.19.2.2,0,0,0,0-.09.1.1,0,0,0,0,0l0-.13L428.74,96l-1.42-7.52c-.43-2.51-.9-5-1.29-7.54l-.6-3.78-.08-.47,0-.24a3.75,3.75,0,0,1,0-.45,3.37,3.37,0,0,1,.52-1.9,3.33,3.33,0,0,1,.3-.4,3.73,3.73,0,0,1,.3-.3l.35-.32.7-.65,2.81-2.59,2.86-2.54c1.9-1.71,3.84-3.36,5.77-5l2.91-2.49a12.91,12.91,0,0,0,1.15-1,.7.7,0,0,0-.06-.79.73.73,0,0,0-.37-.26c-.23-.06-.6-.13-.89-.2l-1.87-.4L436,56.39C431,55.39,426,54.45,420.95,53.66Z"
fill= "#FFFCF9" />
< path
d= "M408.12,83.45l-17.78,8.94,3.72-19.55-14-14.15,19.74-2.5,9.13-17.68,8.48,18L437,59.73l-14.5,13.63,3,19.67Z"
fill= "#C89568" />
</ g>
< circle class= "sparkle" fill= "url(#dotGrad)" cx= "0" cy= "0" r= "50" />
</ g>
</ svg>
< h1 class= "text typewriter" > Merry Christmas</ h1>
< script src= "https://u...content-available-to-author-only...g.co/gsap@3/dist/gsap.min.js" ></ script>
< script src= "https://s...content-available-to-author-only...s.com/s.cdpn.io/16327/MorphSVGPlugin3.min.js" ></ script>
< script src= "https://s...content-available-to-author-only...s.com/s.cdpn.io/16327/DrawSVGPlugin3.min.js" ></ script>
< script src= "https://s...content-available-to-author-only...s.com/s.cdpn.io/16327/MotionPathPlugin.min.js" ></ script>
< script src= "https://s...content-available-to-author-only...s.com/s.cdpn.io/16327/Physics2DPlugin3.min.js" ></ script>
< script src= "https://s...content-available-to-author-only...s.com/s.cdpn.io/16327/EasePack3.min.js" ></ script>
< script>
MorphSVGPlugin.convertToPath ( 'polygon' ) ;
var xmlns = "http://w...content-available-to-author-only...3.org/2000/svg" ,
xlinkns = "http://w...content-available-to-author-only...3.org/1999/xlink" ,
select = function ( s) {
return document.querySelector ( s) ;
} ,
selectAll = function ( s) {
return document.querySelectorAll ( s) ;
} ,
pContainer = select( '.pContainer' ) ,
mainSVG = select( '.mainSVG' ) ,
star = select( '#star' ) ,
sparkle = select( '.sparkle' ) ,
tree = select( '#tree' ) ,
showParticle = true ,
particleColorArray = [ '#E8F6F8' , '#ACE8F8' , '#F6FBFE' , '#A2CBDC' , '#B74551' , '#5DBA72' , '#910B28' , '#910B28' , '#446D39' ] ,
particleTypeArray = [ '#star' , '#circ' , '#cross' , '#heart' ] ,
// particleTypeArray = ['#star'],
particlePool = [ ] ,
particleCount = 0 ,
numParticles = 201
gsap.set ( 'svg' , {
visibility: 'visible'
} )
gsap.set ( sparkle, {
transformOrigin: '50% 50%' ,
y: - 100
} )
let getSVGPoints = ( path) => {
let arr = [ ]
var rawPath = MotionPathPlugin.getRawPath ( path) [ 0 ] ;
rawPath.forEach ( ( el, value) => {
let obj = { }
obj.x = rawPath[ value * 2 ]
obj.y = rawPath[ ( value * 2 ) + 1 ]
if ( value % 2 ) {
arr.push ( obj)
}
//console.log(value)
} )
return arr;
}
let treePath = getSVGPoints( '.treePath' ) ,
treeBottomPath = getSVGPoints( '.treeBottomPath' ) ,
mainTl = gsap.timeline ( { delay: 0 , repeat: 0 } ) ,
starTl;
function flicker( p) {
gsap.killTweensOf ( p, { opacity: true } ) ;
gsap.fromTo ( p, {
opacity: 1
} , {
duration: 0.07 ,
opacity: Math.random ( ) ,
repeat: - 1
} )
}
function createParticles( ) {
var i = numParticles, p, particleTl, step = numParticles / treePath.length , pos;
while ( -- i > - 1 ) {
p = select( particleTypeArray[ i % particleTypeArray.length ] ) .cloneNode ( true ) ;
mainSVG.appendChild ( p) ;
p.setAttribute ( 'fill' , particleColorArray[ i % particleColorArray.length ] ) ;
p.setAttribute ( 'class' , "particle" ) ;
particlePool.push ( p) ;
//hide them initially
gsap.set ( p, {
x: - 100 ,
y: - 100 ,
transformOrigin: '50% 50%'
} )
}
}
var getScale = gsap.utils .random ( 0.5 , 3 , 0.001 , true ) ;
function playParticle( p) {
if ( ! showParticle) { return } ;
var p = particlePool[ particleCount]
gsap.set ( p, {
x: gsap.getProperty ( '.pContainer' , 'x' ) ,
y: gsap.getProperty ( '.pContainer' , 'y' ) ,
scale: getScale( )
}
) ;
var tl = gsap.timeline ( ) ;
tl.to ( p, {
duration: gsap.utils .random ( 0.61 , 6 ) ,
physics2D: {
velocity: gsap.utils .random ( - 23 , 23 ) ,
angle: gsap.utils .random ( - 180 , 180 ) ,
gravity: gsap.utils .random ( - 6 , 50 )
} ,
scale: 0 ,
rotation: gsap.utils .random ( - 123 , 360 ) ,
ease: 'power1' ,
onStart: flicker,
onStartParams: [ p] ,
onRepeat: ( p) => {
gsap.set ( p, {
scale: getScale( )
} )
} ,
onRepeatParams: [ p]
} ) ;
particleCount++;
particleCount = ( particleCount >= numParticles) ? 0 : particleCount
}
function drawStar( ) {
starTl = gsap.timeline ( { onUpdate: playParticle } )
starTl.to ( '.pContainer, .sparkle' , {
duration: 6 ,
motionPath: {
path: '.treePath' ,
autoRotate: false
} ,
ease: 'linear'
} )
.to ( '.pContainer, .sparkle' , {
duration: 1 ,
onStart: function ( ) { showParticle = false } ,
x: treeBottomPath[ 0 ] .x ,
y: treeBottomPath[ 0 ] .y
} )
.to ( '.pContainer, .sparkle' , {
duration: 2 ,
onStart: function ( ) { showParticle = true } ,
motionPath: {
path: '.treeBottomPath' ,
autoRotate: false
} ,
ease: 'linear'
} , '-=0' )
.from ( '.treeBottomMask' , {
duration: 2 ,
drawSVG: '0% 0%' ,
stroke: '#FFF' ,
ease: 'linear'
} , '-=2' )
}
createParticles( ) ;
drawStar( ) ;
mainTl.from ( [ '.treePathMask' , '.treePotMask' ] , {
duration: 6 ,
drawSVG: '0% 0%' ,
stroke: '#FFF' ,
stagger: {
each: 6
} ,
duration: gsap.utils .wrap ( [ 6 , 1 , 2 ] ) ,
ease: 'linear'
} )
.from ( '.treeStar' , {
duration: 3 ,
scaleY: 0 ,
scaleX: 0.15 ,
transformOrigin: '50% 50%' ,
ease: 'elastic(1,0.5)'
} , '-=4' )
.to ( '.sparkle' , {
duration: 3 ,
opacity: 0 ,
ease: "rough({strength: 2, points: 100, template: linear, taper: both, randomize: true, clamp: false})"
} , '-=0' )
.to ( '.treeStarOutline' , {
duration: 1 ,
opacity: 1 ,
ease: "rough({strength: 2, points: 16, template: linear, taper: none, randomize: true, clamp: false})"
} , '+=1' )
mainTl.add ( starTl, 0 )
gsap.globalTimeline .timeScale ( 1.5 ) ;
</ script>
< script src= "https://u...content-available-to-author-only...g.com/@dotlottie/player-component@latest/dist/dotlottie-player.mjs" type= "module" ></ script>
< dotlottie- player class= "santa-claus" src= "https://l...content-available-to-author-only...e.host/6d0dfa5c-028c-4847-8389-06304eb1b01e/5TtJvD6xoM.json" background= "transparent" speed= "1" style= "width: 300px; height: 300px;" loop autoplay></ dotlottie- player>
</ body>
</ html>
PGh0bWw+Cgo8aGVhZD4KICAgICAgCiAgICA8c3R5bGU+CiAgICAgICAgQGltcG9ydCB1cmwoJ2h0dHBzOi8vZi4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4ucy5jb20vY3NzMj9mYW1pbHk9RXBoZXNpcyZmYW1pbHk9Um9ib3RvOndnaHRANTAwJmRpc3BsYXk9c3dhcCcpOwoKICAgICAgICBib2R5IHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzE1MTUyMjsKICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICBib2R5LAogICAgICAgIGh0bWwgewogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICAgIC8qIGJhY2tncm91bmQ6IHVybCgnaHR0cHM6Ly9oLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi54LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyMy8wOS9pUGhvbmUtMTQtUHJvLUNocmlzdG1hcy1XYWxscGFwZXIuanBnJyk7ICovCiAgICAgICAgfQoKCiAgICAgICAgc3ZnIHsKICAgICAgICAgICAgd2lkdGg6IDkwJTsKICAgICAgICAgICAgaGVpZ2h0OiA5MCU7CiAgICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKCiAgICAgICAgfQoKICAgICAgICAuc3BhcmtsZSB7CiAgICAgICAgICAgIC8qIG1peC1ibGVuZC1tb2RlOmx1bWlub3NpdHkgKi8KICAgICAgICB9CgogICAgICAgIC50ZXh0IHsKICAgICAgICAgICAgcGFkZGluZzogMTVweCAxNXB4IDE1cHggMTVweDsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICJFcGhlc2lzIiwgc2Fucy1zZXJpZjsKICAgICAgICAgICAgZm9udC1zaXplOiA4M3B4OwogICAgICAgICAgICBjb2xvcjogI2ZmZmVmZTsKICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgICAgICB0b3A6IGNhbGMoNTAlIC0gNTAwcHgpOwogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQoKICAgICAgICAudHlwZXdyaXRlciB7CiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgICAgIC8qIEVuc3VyZXMgdGhlIGNvbnRlbnQgaXMgbm90IHJldmVhbGVkIHVudGlsIHRoZSBhbmltYXRpb24gKi8KICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgd2hpdGU7CiAgICAgICAgICAgIC8qIFRoZSB0eXB3cml0ZXIgY3Vyc29yICovCiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgICAgIC8qIEtlZXBzIHRoZSBjb250ZW50IG9uIGEgc2luZ2xlIGxpbmUgKi8KICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgICAgIC8qIEdpdmVzIHRoYXQgc2Nyb2xsaW5nIGVmZmVjdCBhcyB0aGUgdHlwaW5nIGhhcHBlbnMgKi8KICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC4xNWVtOwogICAgICAgICAgICAvKiBBZGp1c3QgYXMgbmVlZGVkICovCiAgICAgICAgICAgIGFuaW1hdGlvbjoKICAgICAgICAgICAgICAgIHR5cGluZyAzLjVzIHN0ZXBzKDQwLCBlbmQpIGZvcndhcmRzLAogICAgICAgICAgICAgICAgYmxpbmstY2FyZXQgLjc1cyBzdGVwLWVuZCBmb3J3YXJkczsKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiA1czsKICAgICAgICB9CiAgICAgICAgLnNhbnRhLWNsYXVzIHsKICAgICAgICAgICAgYW5pbWF0aW9uOiBzYW50YSAycyBmb3J3YXJkczsKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiA2czsKICAgICAgICAgICAgd2lkdGg6IDMwMHB4OwogICAgICAgICAgICBoZWlnaHQ6IDMwMHB4OwogICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICAgIHRvcDogY2FsYyg1MCUgKyAzMHB4KTsKICAgICAgICAgICAgbGVmdDogY2FsYyg1MCUgKyAyMDBweCk7CiAgICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQoKICAgICAgICAvKiBUaGUgdHlwaW5nIGVmZmVjdCAqLwogICAgICAgIEBrZXlmcmFtZXMgdHlwaW5nIHsKICAgICAgICAgICAgZnJvbSB7CiAgICAgICAgICAgICAgICB3aWR0aDogMDsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRvIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvKiBUaGUgdHlwaW5nIGVmZmVjdCAqLwogICAgICAgIEBrZXlmcmFtZXMgc2FudGEgewogICAgICAgICAgICBmcm9tIHsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRvIHsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qIFRoZSB0eXBld3JpdGVyIGN1cnNvciBlZmZlY3QgKi8KICAgICAgICBAa2V5ZnJhbWVzIGJsaW5rLWNhcmV0IHsKCiAgICAgICAgICAgIGZyb20sCiAgICAgICAgICAgIHRvIHsKICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQKICAgICAgICAgICAgfQoKICAgICAgICAgICAgNTAlIHsKICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2ZmZjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIDwvc3R5bGU+Cgo8Ym9keT4KICAgIDxzdmcgY2xhc3M9Im1haW5TVkciIHhtbG5zPSJodHRwOi8vdy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uMy5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vdy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uMy5vcmcvMTk5OS94bGluayIKICAgICAgICB2aWV3Qm94PSIwIDAgODAwIDYwMCI+CiAgICAgICAgPGRlZnM+CiAgICAgICAgICAgIDxjaXJjbGUgaWQ9ImNpcmMiIGNsYXNzPSJwYXJ0aWNsZSIgY3g9IjAiIGN5PSIwIiByPSIxIiAvPgogICAgICAgICAgICA8cG9seWdvbiBpZD0ic3RhciIgY2xhc3M9InBhcnRpY2xlIgogICAgICAgICAgICAgICAgcG9pbnRzPSI0LjU1LDAgNS45NSwyLjg1IDkuMSwzLjMgNi44Miw1LjUyIDcuMzYsOC42NSA0LjU1LDcuMTcgMS43NCw4LjY1IDIuMjcsNS41MiAwLDMuMyAzLjE0LDIuODUgIiAvPgogICAgICAgICAgICA8cG9seWdvbiBpZD0iY3Jvc3MiIGNsYXNzPSJwYXJ0aWNsZSIKICAgICAgICAgICAgICAgIHBvaW50cz0iNCwzLjUgMi41LDIgNCwwLjUgMy41LDAgMiwxLjUgMC41LDAgMCwwLjUgMS41LDIgMCwzLjUgMC41LDQgMiwyLjUgMy41LDQgIiAvPgogICAgICAgICAgICA8cGF0aCBpZD0iaGVhcnQiIGNsYXNzPSJwYXJ0aWNsZSIgZD0iTTIuOSwwQzIuNTMsMCwyLjIsMC4xOCwyLDAuNDdDMS44LDAuMTgsMS40NywwLDEuMSwwQzAuNDksMCwwLDAuNDksMCwxLjEKCUMwLDIuNiwxLjU2LDQsMiw0czItMS40LDItMi45QzQsMC40OSwzLjUxLDAsMi45LDB6IiAvPgoKCiAgICAgICAgICAgIDxyYWRpYWxHcmFkaWVudCBpZD0iZ3JhZCIgY3g9IjMiIGN5PSIzIiByPSI2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOnJlZCIgLz4KICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD0iMC40IiBzdHlsZT0ic3RvcC1jb2xvcjojMzM0NjczIiAvPgogICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PSIwLjYiIHN0eWxlPSJzdG9wLWNvbG9yOiNFREREQzQiIC8+CiAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjAuOSIgc3R5bGU9InN0b3AtY29sb3I6I0ZFRThDNyIgLz4KICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6cmVkIiAvPgogICAgICAgICAgICA8L3JhZGlhbEdyYWRpZW50PgogICAgICAgICAgICA8cmFkaWFsR3JhZGllbnQgaWQ9ImRvdEdyYWQiIGN4PSIwIiBjeT0iMCIgcj0iNTAiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6I0ZGRkZGRjtzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD0iMC4xIiBzdHlsZT0ic3RvcC1jb2xvcjojMDg2N0M3O3N0b3Atb3BhY2l0eTowLjYiIC8+CiAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiMwODEwMjk7c3RvcC1vcGFjaXR5OjAiIC8+CiAgICAgICAgICAgIDwvcmFkaWFsR3JhZGllbnQ+CgogICAgICAgICAgICA8bWFzayBpZD0idHJlZVBhdGhNYXNrIj4KICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJ0cmVlUGF0aE1hc2siIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMTgiIHN0cm9rZT0iI0ZGRiIgZD0iTTI1Mi45LDQ0Ny45YzAsMC0zMC44LTIxLjYsMzMuOS00NC43YzY0LjctMjMuMSw0Ni4yLTM3LDMzLjktNDEuNgogICAgYy0xMi4zLTQuNi01OS4zLTExLjYtNDIuNC0yOC41czExNC01Mi40LDgxLjctNjYuMmMtMzIuNC0xMy45LTU4LjUtMTAuOC0zNS40LTI5LjNzNjYuMi0xMDEuNyw3MC45LTExNS42CiAgICBjNC40LTEzLjIsMTYuOS0xOC41LDI0LjcsMGM3LjcsMTguNSw0NC43LDEwMC4xLDY3LjgsMTE1LjZjMjMuMSwxNS40LTEwLjgsMjEuNi0yNi4yLDI0LjdjLTE1LjQsMy4xLTIwLDMzLjksMzMuOSw0OS4zCiAgICBjNTMuOSwxNS40LDQ3LjgsNDAuMSwyNy43LDQ0LjdjLTIwLDQuNi02My4yLDQuNi0yNy43LDMyLjRzOTguNiwyMS42LDYxLjYsNjAuMSIgLz4KICAgICAgICAgICAgPC9tYXNrPgogICAgICAgICAgICA8bWFzayBpZD0idHJlZUJvdHRvbU1hc2siPgogICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9InRyZWVCb3R0b21NYXNrIiBzdHJva2U9IiNGRkYiIHN0cm9rZS13aWR0aD0iOCIKICAgICAgICAgICAgICAgICAgICBkPSJNMjA3LjUsNDg0LjFjMCwwLDU4LjUtNDMuMSwyMTEuMS0zLjFzMTkxLTE2LjksMTkxLTE2LjkiIC8+CiAgICAgICAgICAgIDwvbWFzaz4KICAgICAgICAgICAgPG1hc2sgaWQ9InRyZWVQb3RNYXNrIj4KICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJ0cmVlUG90TWFzayIgc3Ryb2tlPSIjRkZGIiBzdHJva2Utd2lkdGg9IjgiCiAgICAgICAgICAgICAgICAgICAgZD0iTTM3NC4zLDUwMi41YzAsMC00LjYsMjAsNy43LDI5LjNjMTIuMyw5LjIsNDAuMSw3LjcsNTAuOCwwczEwLjgtMjMuMSwxMC44LTI5LjMiIC8+CiAgICAgICAgICAgIDwvbWFzaz4KCiAgICAgICAgICAgIDxmaWx0ZXIgaWQ9Imdsb3ciIHg9Ii0xNTAlIiB5PSItMTUwJSIgd2lkdGg9IjI4MCUiIGhlaWdodD0iMjgwJSI+CiAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgcmVzdWx0PSJvZmZPdXQiIGluPSJTb3VyY2VHcmFwaGljIiBkeD0iMCIgZHk9IjAiIC8+CiAgICAgICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgaW49Im9mZk91dCIgc3RkRGV2aWF0aW9uPSIxNiIgcmVzdWx0PSJibHVyIiAvPgoKICAgICAgICAgICAgICAgIDxmZUNvbXBvbmVudFRyYW5zZmVyPgogICAgICAgICAgICAgICAgICAgIDxmZUZ1bmNSIHR5cGU9ImRpc2NyZXRlIiB0YWJsZVZhbHVlcz0iMC44IiAvPgogICAgICAgICAgICAgICAgICAgIDxmZUZ1bmNHIHR5cGU9ImRpc2NyZXRlIiB0YWJsZVZhbHVlcz0iMC4zIiAvPgogICAgICAgICAgICAgICAgICAgIDxmZUZ1bmNCIHR5cGU9ImRpc2NyZXRlIiB0YWJsZVZhbHVlcz0iMC4yIiAvPgogICAgICAgICAgICAgICAgICAgIDwhLS08ZmVGdW5jQSB0eXBlPSJsaW5lYXIiIHNsb3BlPSIxIiBpbnRlcmNlcHQ9IjAiIC8+LS0+CiAgICAgICAgICAgICAgICA8L2ZlQ29tcG9uZW50VHJhbnNmZXI+CgogICAgICAgICAgICAgICAgPGZlQ29tcG9zaXRlIGluPSJTb3VyY2VHcmFwaGljIiBvcGVyYXRvcj0ib3ZlciIgLz4KCiAgICAgICAgICAgIDwvZmlsdGVyPgoKICAgICAgICA8L2RlZnM+CiAgICAgICAgPGcgY2xhc3M9Indob2xlIj4KCiAgICAgICAgICAgIDxnIGNsYXNzPSJwQ29udGFpbmVyIj48L2c+CgogICAgICAgICAgICA8ZyBjbGFzcz0idHJlZSIgbWFzaz0idXJsKCN0cmVlUGF0aE1hc2spIj4KICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgZD0iTTI1Mi45NSw0NDcuODVhMjAuNDMsMjAuNDMsMCwwLDEtNS42NC02LjI0LDE0LDE0LDAsMCwxLTEuOTEtOC4yMiwxNi45MywxNi45MywwLDAsMSwzLjA2LTgsMzMuMTYsMzMuMTYsMCwwLDEsNS43OS02LjI4QTc0Ljc4LDc0Ljc4LDAsMCwxLDI2OC41NCw0MTBhMTYzLjQ4LDE2My40OCwwLDAsMSwxNS41Mi02Ljg0YzEwLjU0LTMuOTMsMjEtOC4wNywzMC43Mi0xMy40NmE4MC44Myw4MC44MywwLDAsMCw3LTQuMzcsMzcuNTEsMzcuNTEsMCwwLDAsNi4xMy01LjI0YzEuNzUtMS45MiwzLjE0LTQuMTgsMy4yNS02LjM1cy0xLjEyLTQuMTgtMy01LjgxYTI1LDI1LDAsMCwwLTYuNzItMy45MSw2MS4yNSw2MS4yNSwwLDAsMC03LjgtMi40MmMtNS40MS0xLjQtMTAuOTEtMi43Mi0xNi4zOC00LjMyYTg0LjE3LDg0LjE3LDAsMCwxLTE2LjItNi4xOSwyOC4yNiwyOC4yNiwwLDAsMS0zLjg2LTIuNSwxNS4wNiwxNS4wNiwwLDAsMS0zLjQ0LTMuNjMsOSw5LDAsMCwxLTEuNTEtNS40NywxMC4yMiwxMC4yMiwwLDAsMSwuNjEtMi43OCwxMi44OCwxMi44OCwwLDAsMSwxLjItMi4zNCwyNi43MywyNi43MywwLDAsMSw2LjU4LTYuNTZjMi4zNS0xLjc2LDQuNzYtMy4zMyw3LjE5LTQuODQsNC44Ny0zLDkuODItNS43NSwxNC43Ny04LjQ2LDkuOTEtNS40LDE5Ljg4LTEwLjU5LDI5LjYzLTE2LjA4LDQuODctMi43NSw5LjY4LTUuNTYsMTQuMzMtOC41NkE4MS44OCw4MS44OCwwLDAsMCwzNTkuNDUsMjgwYTIzLDIzLDAsMCwwLDIuNDEtMi43OSw4LjM2LDguMzYsMCwwLDAsMS4zNS0yLjY1LDIuMTMsMi4xMywwLDAsMC0uMTctMS43LDUuNTMsNS41MywwLDAsMC0xLjg4LTEuNzcsMTMuMTUsMTMuMTUsMCwwLDAtMS40OS0uODNjLS41Mi0uMjYtMS4xLS40OS0xLjc2LS43Ny0xLjI3LS41My0yLjU1LTEtMy44My0xLjUzcS0zLjg2LTEuNDgtNy44LTIuNzdjLTUuMjYtMS43NC0xMC42LTMuMjMtMTYtNC43OS0yLjcyLS43OS01LjQ3LTEuNTgtOC4yOS0yLjYxYTMxLjc0LDMxLjc0LDAsMCwxLTQuMzMtMS45MiwxNC4zOSwxNC4zOSwwLDAsMS0yLjI5LTEuNTMsOC43NCw4Ljc0LDAsMCwxLTIuMjItMi42Niw3LjIsNy4yLDAsMCwxLS43OC00LDkuMDksOS4wOSwwLDAsMSwxLTMuMjQsMTguOTMsMTguOTMsMCwwLDEsMy00LjIxLDQ0Ljg4LDQ0Ljg4LDAsMCwxLDMuMjktMy4xOWMuNTYtLjUsMS4xMi0xLDEuNjgtMS40NWwxLjYxLTEuMzNhODQsODQsMCwwLDAsMTAuODgtMTEuODgsMzI2LjIsMzI2LjIsMCwwLDAsMTguNzktMjcuNTNjNS44OC05LjUsMTEuNDgtMTkuMTksMTYuODktMjlTMzgwLjEsMTQ2LjE2LDM4NSwxMzYuMTNjMS4yMi0yLjUxLDIuNDItNSwzLjU3LTcuNTRzMi4yOS01LjA5LDMuMTQtNy40NWwuMzYtMWMuMTQtLjM4LjI2LS43NS40Mi0xLjEyLjI5LS43NS42NC0xLjQ4LDEtMi4yMWEyNS41MSwyNS41MSwwLDAsMSwyLjY1LTQuMjEsMTkuMTUsMTkuMTUsMCwwLDEsMy43Ni0zLjY5LDEzLjc0LDEzLjc0LDAsMCwxLDUuMjQtMi40MiwxMi4xMSwxMi4xMSwwLDAsMSw2LjEyLjI1LDE0LjU5LDE0LjU5LDAsMCwxLDUsMi43OSwyMC41OSwyMC41OSwwLDAsMSwzLjQ3LDMuNzksMzAuMzMsMzAuMzMsMCwwLDEsMi41LDQuMWMuMzUuNy43LDEuMzksMSwyLjFsLjQ2LDEuMDUuNCwxLDEuNjQsMy44NCwzLjM5LDcuNjdxNi44OCwxNS4zMiwxNC4zNiwzMC4zN2M1LDEwLDEwLjE4LDE5Ljk0LDE1LjY5LDI5LjY1YTI3NC45NCwyNzQuOTQsMCwwLDAsMTcuOSwyOEE3My4zNiw3My4zNiwwLDAsMCw0ODcuNzQsMjMzYy40OS40LDEsLjgsMS40OCwxLjE1bDEuNywxLjE5YTM1LDM1LDAsMCwxLDMuNjYsMywxNy44NCwxNy44NCwwLDAsMSwzLjMyLDQuMDgsMTAuODMsMTAuODMsMCwwLDEsMS4xNCwyLjk0LDguNTQsOC41NCwwLDAsMSwwLDMuNTQsMTAuMjcsMTAuMjcsMCwwLDEtMy4yMiw1LjM5LDIwLjcxLDIwLjcxLDAsMCwxLTQuMTUsMi45MSw0OSw0OSwwLDAsMS04LjQsMy40NiwxNTQsMTU0LDAsMCwxLTE2Ljc3LDQuMDlsLTQuMTUuODFhOS4xOCw5LjE4LDAsMCwwLTIuODcsMS4wOCw5LjUxLDkuNTEsMCwwLDAtNCw0LjcsMTIuNTUsMTIuNTUsMCwwLDAtLjY3LDYuNTgsMTkuNSwxOS41LDAsMCwwLDIuNDYsNi43NEEzNy4xOSwzNy4xOSwwLDAsMCw0NjgsMjk1Ljc1YTc1LDc1LDAsMCwwLDE0LjE0LDcuODYsMTI5LjY3LDEyOS42NywwLDAsMCwxNS41OCw1LjQ5QTE0MS40LDE0MS40LDAsMCwxLDUxMy44OCwzMTVhNzUsNzUsMCwwLDEsMTUuMTksOC42NSwzNy4yOSwzNy4yOSwwLDAsMSw2LjU1LDYuMjQsMjEuMDUsMjEuMDUsMCwwLDEsNC4zMSw4LjQ5LDE0LjQzLDE0LjQzLDAsMCwxLTEuMjQsOS44OCwxOC4wOCwxOC4wOCwwLDAsMS02LjY2LDYuOTQsMjYuNzQsMjYuNzQsMCwwLDEtOC41NiwzLjMzYy0yLjg0LjYxLTUuNjUsMS4wNi04LjQ0LDEuNDktNS41OC44Ni0xMS4xMywxLjYxLTE2LjUyLDIuNzdhNTMuNDgsNTMuNDgsMCwwLDAtNy44MSwyLjIyYy0yLjQzLjk0LTQuODEsMi4yMi02LDMuOTNhNC4zNCw0LjM0LDAsMCwwLS43NywyLjgyLDguNDUsOC40NSwwLDAsMCwxLDMuMjksMjgsMjgsMCwwLDAsNC44Miw2LjI1LDgwLjc0LDgwLjc0LDAsMCwwLDEyLjgxLDEwLjRjOS4yOSw2LDE5LjcyLDEwLjI5LDMwLjI0LDE0LjE3LDUuMjcsMS45NSwxMC41OSwzLjc5LDE1Ljg1LDUuODYsMi42MywxLDUuMjQsMi4xNCw3Ljc5LDMuMzlhMzcuOTQsMzcuOTQsMCwwLDEsNy4yOCw0LjUxLDExLjksMTEuOSwwLDAsMSwzLjYzLDE1LjU3LDM0LjY4LDM0LjY4LDAsMCwxLTQuNTMsNy4xNiw3Ny40NSw3Ny40NSwwLDAsMS01LjY0LDYuMjksNzcuMzEsNzcuMzEsMCwwLDAsNS40MS02LjQ2LDM0LjI3LDM0LjI3LDAsMCwwLDQuMjItNy4yMSwxMi42NCwxMi42NCwwLDAsMCwuODgtOCwxMi40NCwxMi40NCwwLDAsMC00LjcxLTYuNDMsMzcuNzEsMzcuNzEsMCwwLDAtNy4xNS00LjE2Yy0yLjUzLTEuMTYtNS4xMy0yLjE4LTcuNzYtMy4xNC01LjI2LTEuOTEtMTAuNjItMy42Mi0xNi01LjQ0LTEwLjY1LTMuNjMtMjEuMzQtNy42NC0zMS4xMS0xMy42NGE4My44NCw4My44NCwwLDAsMS0xMy42MS0xMC40OSwzMS4yNywzMS4yNywwLDAsMS01LjYtNi45NCwxMiwxMiwwLDAsMS0xLjU1LTQuNjgsOC4xNyw4LjE3LDAsMCwxLC4xOS0yLjcsOC41Niw4LjU2LDAsMCwxLDEuMDktMi41LDEyLjEsMTIuMSwwLDAsMSwzLjYtMy40NCwyNC4yNywyNC4yNywwLDAsMSw0LjA4LTIuMDgsNTcuMyw1Ny4zLDAsMCwxLDguMzYtMi41NmM1LjU5LTEuMzEsMTEuMTktMi4xNywxNi43MS0zLjEyLDIuNzYtLjQ4LDUuNS0xLDguMTUtMS41OWEyMi4xLDIyLjEsMCwwLDAsNy0yLjg3LDEzLjMsMTMuMywwLDAsMCw0LjgyLTUuMTUsOS40Miw5LjQyLDAsMCwwLC42OS02LjUzLDE2LDE2LDAsMCwwLTMuNDItNi4zMywzMy4yNSwzMy4yNSwwLDAsMC01LjczLTUuMjcsNjkuNzQsNjkuNzQsMCwwLDAtMTQuMTktNy44LDEzNS44MSwxMzUuODEsMCwwLDAtMTUuNjEtNS40MiwxMzUuNTMsMTM1LjUzLDAsMCwxLTE2LjMtNS41MSw4MSw4MSwwLDAsMS0xNS40MS04LjMxLDQzLjM5LDQzLjM5LDAsMCwxLTEyLjYtMTMsMjUuNTMsMjUuNTMsMCwwLDEtMy4zNC05LDE5LjEzLDE5LjEzLDAsMCwxLDEtMTAsMTYuMTcsMTYuMTcsMCwwLDEsNi42OS04LDE1Ljg4LDE1Ljg4LDAsMCwxLDUtMS45M2w0LjEzLS44NGExNDcuNzUsMTQ3Ljc1LDAsMCwwLDE2LTQsNDIuNDEsNDIuNDEsMCwwLDAsNy4xNy0zLDE0LDE0LDAsMCwwLDIuNzQtMS45MiwzLjQyLDMuNDIsMCwwLDAsMS4xMi0xLjY4LDIuNDEsMi40MSwwLDAsMC0uNDMtMS42MSwxMS4wNywxMS4wNywwLDAsMC0yLTIuNCwyOCwyOCwwLDAsMC0yLjkyLTIuMzFsLTEuNzYtMS4yMmMtLjY1LS40Ni0xLjI2LS45NC0xLjg2LTEuNDNhNTksNTksMCwwLDEtNi40My02LjI3Yy0yLTIuMTktMy43OS00LjQ0LTUuNTQtNi43NGEyNjcsMjY3LDAsMCwxLTE4LjU1LTI4Ljc0Yy01LjYzLTkuODUtMTAuODktMTkuODYtMTYtMzBzLTkuOTEtMjAuMzEtMTQuNTctMzAuNjFsLTMuNDUtNy43Nkw0MTcsMTI0LjQ4bC0uNDItMS0uMzktLjg4Yy0uMjUtLjU5LS41NC0xLjE1LS44Mi0xLjcxYTIyLjc0LDIyLjc0LDAsMCwwLTEuODktMy4wOSwxMywxMywwLDAsMC0yLjItMi40Miw3LDcsMCwwLDAtMi4zMS0xLjMzLDQuNDksNC40OSwwLDAsMC0yLjIyLS4wOSw4LjU1LDguNTUsMCwwLDAtNC41OSwzLjMyLDE3Ljg1LDE3Ljg1LDAsMCwwLTEuODQsMi45MmMtLjI2LjU0LS41MSwxLjA3LS43MywxLjY0LS4xMi4yNy0uMjIuNTYtLjMyLjg1bC0uMzUsMWMtMS4wNiwyLjkzLTIuMjMsNS40Ny0zLjQyLDguMXMtMi40Miw1LjE2LTMuNjcsNy43Yy01LDEwLjE4LTEwLjI5LDIwLjE2LTE1Ljc3LDMwLjA1cy0xMS4xNywxOS42Ni0xNy4xNiwyOS4yOGEzMTAuMiwzMTAuMiwwLDAsMS0xOS4zOSwyOC4xMSw5MC40Niw5MC40NiwwLDAsMS0xMiwxMi44NWwtMS42NSwxLjM1Yy0uNTIuNDMtMSwuODUtMS41MywxLjI5YTM4LDM4LDAsMCwwLTIuNzksMi42NSwxMi40MiwxMi40MiwwLDAsMC0xLjk0LDIuNTcsMi4zMywyLjMzLDAsMCwwLS4yOC43NmMwLC4xMSwwLDAsMCwuMDlhNC41Nyw0LjU3LDAsMCwwLDEuNywxLjM1LDI1LjE1LDI1LjE1LDAsMCwwLDMuMzYsMS41MWMyLjQ2LjkyLDUuMTEsMS43Miw3Ljc5LDIuNTIsNS4zNiwxLjU4LDEwLjg0LDMuMTYsMTYuMjUsNXE0LjA2LDEuMzcsOC4wOCwyLjk0YzEuMzQuNTMsMi42NywxLjA3LDQsMS42My42NC4yNywxLjM2LjU3LDIuMS45NGExOS42NiwxOS42NiwwLDAsMSwyLjE4LDEuMjQsMTEuODUsMTEuODUsMCwwLDEsNCw0LjEzLDguNjQsOC42NCwwLDAsMSwxLDMuMjQsOS4xMSw5LjExLDAsMCwxLS4yNywzLjIzLDE0LjQ4LDE0LjQ4LDAsMCwxLTIuNDIsNC44NSwyOS4zMiwyOS4zMiwwLDAsMS0zLjE0LDMuNTYsODcuNDYsODcuNDYsMCwwLDEtMTQsMTAuNDdjLTQuODUsMy05Ljc5LDUuODQtMTQuNzYsOC41NS05Ljk0LDUuNDItMjAsMTAuNDktMjkuOTEsMTUuNzItNSwyLjYyLTkuODgsNS4yOC0xNC42Myw4LjEyLTIuMzcsMS40Mi00LjcsMi44OS02Ljg4LDQuNDZhMjIuMDYsMjIuMDYsMCwwLDAtNS40NSw1LjE0LDgsOCwwLDAsMC0uNzYsMS4zOSw1LjM2LDUuMzYsMCwwLDAtLjMzLDEuMzIsNC4xLDQuMSwwLDAsMCwuNjksMi41MywxNS42MiwxNS42MiwwLDAsMCw1LjQ5LDQuNjJBODAuMTQsODAuMTQsMCwwLDAsMjk4LjU2LDM1M2M1LjMxLDEuNjYsMTAuNzMsMy4wNiwxNi4xOCw0LjU4YTY0LjgxLDY0LjgxLDAsMCwxLDguMjYsMi43NCwyNy43NCwyNy43NCwwLDAsMSw3LjY5LDQuNzQsMTMuNjUsMTMuNjUsMCwwLDEsMywzLjgxLDkuMjcsOS4yNywwLDAsMSwxLDUsMTEuMTQsMTEuMTQsMCwwLDEtMS41NCw0LjcsMTkuMDksMTkuMDksMCwwLDEtMi44LDMuNjcsNDAuNiw0MC42LDAsMCwxLTYuODEsNS41NCw4My43OCw4My43OCwwLDAsMS03LjQxLDQuMzVjLTEwLjExLDUuMjYtMjAuNzYsOS4xNi0zMS4zOSwxMi44MmExNjEuNjksMTYxLjY5LDAsMCwwLTE1LjUyLDYuMzdBNzQuNTcsNzQuNTcsMCwwLDAsMjU1LDQyMGEzMi4xNywzMi4xNywwLDAsMC01LjgyLDUuODksMTYuMjEsMTYuMjEsMCwwLDAtMy4xOSw3LjUyLDEzLjYxLDEzLjYxLDAsMCwwLDEuNTksOEEyMC4yOSwyMC4yOSwwLDAsMCwyNTIuOTUsNDQ3Ljg1WiIKICAgICAgICAgICAgICAgICAgICBmaWxsPSIjY2I5ODY2IiAvPgogICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICBkPSJNMjA3LjUsNDg0LjA2YzcuMDUtNS4xMSwxNS4xNC04LjY2LDIzLjM0LTExLjYzYTE3Ny4xMywxNzcuMTMsMCwwLDEsMjUuMjktNi44OCwyNjMuNjUsMjYzLjY1LDAsMCwxLDUyLjIyLTQuNDloMy4yOGwzLjI4LjA5LDYuNTYuMTksNi41NS4zOWMyLjE4LjEzLDQuMzcuMjYsNi41NC40OCw0LjM1LjM5LDguNzEuNzQsMTMsMS4yOGw2LjUxLjc1LDYuNDkuOTFjMTcuMywyLjUsMzQuNDEsNiw1MS4zNiwxMC4xOWwxMi42MiwzLjJjNC4xOCwxLDguMzQsMi4xOCwxMi41NSwzLjA2LDguMzgsMiwxNi44MiwzLjYzLDI1LjI5LDUuMTNhMzUzLjUsMzUzLjUsMCwwLDAsNTEuMTcsNS40N2MxNy4xMS4zMiwzNC4zNi0uNjYsNTEtNC43YTExOC41NSwxMTguNTUsMCwwLDAsMjQuMjEtOC40Nyw4NC44Miw4NC44MiwwLDAsMCwxMS4xMS02LjQ5LDQ3LjU1LDQ3LjU1LDAsMCwwLDkuNjktOC41Myw0OC4xLDQ4LjEsMCwwLDEtOSw5LjQ1LDg1LjEsODUuMSwwLDAsMS0xMC44MSw3LjQ1LDExNi41NiwxMTYuNTYsMCwwLDEtMjQuMjMsMTAuMjQsMTY1LjY2LDE2NS42NiwwLDAsMS0yNS43OSw1LjM1LDIzMi4xLDIzMi4xLDAsMCwxLTI2LjI3LDEuNzFjLTguNzcsMC0xNy41NS0uMjQtMjYuMjYtMS4wOS0yLjE4LS4yLTQuMzctLjM1LTYuNTQtLjZsLTYuNTItLjc4Yy00LjM2LS40Ni04LjY3LTEuMTktMTMtMS44Mi04LjY0LTEuMzctMTcuMjItMy4wOS0yNS43NC01LTQuMjgtLjg3LTguNS0yLTEyLjc1LTNsLTEyLjYyLTMuMTFxLTI1LjA2LTYuMzctNTAuNTgtMTAuNDdhNDI2LjM3LDQyNi4zNywwLDAsMC01MS4zLTUuM2MtOC41OS0uNDItMTcuMTktLjI5LTI1Ljc4LDBhMjQwLjEsMjQwLjEsMCwwLDAtMjUuNjgsMi4yNCwxODYuNTcsMTg2LjU3LDAsMCwwLTI1LjI3LDUuMTljLTQuMTUsMS4xNi04LjI2LDIuNDktMTIuMjgsNC4wNS0yLC43OS00LDEuNi02LDIuNTJBNTAuODIsNTAuODIsMCwwLDAsMjA3LjUsNDg0LjA2WiIKICAgICAgICAgICAgICAgICAgICBmaWxsPSIjY2I5ODY2IiAvPgogICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICBkPSJNMzc0LjMyLDUwMi41NWE0OC4xNSw0OC4xNSwwLDAsMCwxLjI0LDE0LjM1YzEuMTUsNC41MiwzLjI5LDguNjQsNi40OSwxMS4zNWExOC41LDE4LjUsMCwwLDAsNS41MSwzLjE0LDM5LjA2LDM5LjA2LDAsMCwwLDYuNDEsMS44Miw2NS43OCw2NS43OCwwLDAsMCwxMy42OCwxLjEyLDcyLjksNzIuOSwwLDAsMCwxMy43Mi0xLjQ0LDQ0LjUxLDQ0LjUxLDAsMCwwLDYuNDYtMS44NSwxNy43NSwxNy43NSwwLDAsMCw1LjUxLTMuMTUsMjUuNDUsMjUuNDUsMCwwLDAsNy4yNC0xMS4xNyw1Miw1MiwwLDAsMCwxLjktNi45MWMuNDgtMi4zNy44My00LjgsMS4xOC03LjI1YTU1LjE2LDU1LjE2LDAsMCwxLC42NCw3LjQyLDQwLjExLDQwLjExLDAsMCwxLS41Miw3LjU2LDMxLjIzLDMxLjIzLDAsMCwxLTIuMTksNy41LDI0LjM3LDI0LjM3LDAsMCwxLTQuNDYsNi43OSwyNS4xNiwyNS4xNiwwLDAsMS02LjYxLDUsMzkuNzIsMzkuNzIsMCwwLDEtNy40LDNBNTguNTUsNTguNTUsMCwwLDEsNDA3Ljc1LDU0MmE1NSw1NSwwLDAsMS0xNS40Ny0xLjksMzYuNjUsMzYuNjUsMCwwLDEtNy40Ni0zLDI1LjMsMjUuMywwLDAsMS02LjYtNSwxOS42MywxOS42MywwLDAsMS0yLjUtMy4zNCwyMS43MiwyMS43MiwwLDAsMS0xLjc5LTMuNjcsMjcuNjYsMjcuNjYsMCwwLDEtMS42NS03LjcsMzguMTYsMzguMTYsMCwwLDEsMi0xNC44N1oiCiAgICAgICAgICAgICAgICAgICAgZmlsbD0iI2NiOTg2NiIgLz4KCiAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InRyZWVCb3R0b21QYXRoIiBzdHJva2U9Im5vbmUiIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iOCIKICAgICAgICAgICAgICAgIGQ9Ik0yMDcuNSw0ODQuMWMwLDAsNTguNS00My4xLDIxMS4xLTMuMXMxOTEtMTYuOSwxOTEtMTYuOSIgLz4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InRyZWVQYXRoIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIKICAgICAgICAgICAgICAgIGQ9Ik0yNTIuOTUsNDQ3Ljg1cy0zMC44MS0yMS41NywzMy44OS00NC42OCw0Ni4yMi0zNywzMy44OS00MS42LTU5LjMyLTExLjU2LTQyLjM3LTI4LjUsMTE0LTUyLjM4LDgxLjY2LTY2LjI1UzMwMS40OCwyNTYsMzI0LjU5LDIzNy41NSwzOTAuODQsMTM1Ljg3LDM5NS40NiwxMjJjNC40MS0xMy4yNCwxNi45NS0xOC40OSwyNC42NSwwczQ0LjY4LDEwMC4xNCw2Ny43OSwxMTUuNTUtMTAuNzgsMjEuNTctMjYuMTksMjQuNjUtMjAsMzMuODksMzMuODksNDkuMyw0Ny43Niw0MC4wNiwyNy43Myw0NC42OC02My4xNyw0LjYyLTI3LjczLDMyLjM1LDk4LjYsMjEuNTcsNjEuNjMsNjAuMDkiIC8+CiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJ0cmVlQm90dG9tIiBtYXNrPSJ1cmwoI3RyZWVCb3R0b21NYXNrKSIKICAgICAgICAgICAgICAgIGQ9Ik0yMDcuNSw0ODQuMDZjNy4wNS01LjExLDE1LjE0LTguNjYsMjMuMzQtMTEuNjNhMTc3LjEzLDE3Ny4xMywwLDAsMSwyNS4yOS02Ljg4LDI2My42NSwyNjMuNjUsMCwwLDEsNTIuMjItNC40OWgzLjI4bDMuMjguMDksNi41Ni4xOSw2LjU1LjM5YzIuMTguMTMsNC4zNy4yNiw2LjU0LjQ4LDQuMzUuMzksOC43MS43NCwxMywxLjI4bDYuNTEuNzUsNi40OS45MWMxNy4zLDIuNSwzNC40MSw2LDUxLjM2LDEwLjE5bDEyLjYyLDMuMmM0LjE4LDEsOC4zNCwyLjE4LDEyLjU1LDMuMDYsOC4zOCwyLDE2LjgyLDMuNjMsMjUuMjksNS4xM2EzNTMuNSwzNTMuNSwwLDAsMCw1MS4xNyw1LjQ3YzE3LjExLjMyLDM0LjM2LS42Niw1MS00LjdhMTE4LjU1LDExOC41NSwwLDAsMCwyNC4yMS04LjQ3LDg0LjgyLDg0LjgyLDAsMCwwLDExLjExLTYuNDksNDcuNTUsNDcuNTUsMCwwLDAsOS42OS04LjUzLDQ4LjEsNDguMSwwLDAsMS05LDkuNDUsODUuMSw4NS4xLDAsMCwxLTEwLjgxLDcuNDUsMTE2LjU2LDExNi41NiwwLDAsMS0yNC4yMywxMC4yNCwxNjUuNjYsMTY1LjY2LDAsMCwxLTI1Ljc5LDUuMzUsMjMyLjEsMjMyLjEsMCwwLDEtMjYuMjcsMS43MWMtOC43NywwLTE3LjU1LS4yNC0yNi4yNi0xLjA5LTIuMTgtLjItNC4zNy0uMzUtNi41NC0uNmwtNi41Mi0uNzhjLTQuMzYtLjQ2LTguNjctMS4xOS0xMy0xLjgyLTguNjQtMS4zNy0xNy4yMi0zLjA5LTI1Ljc0LTUtNC4yOC0uODctOC41LTItMTIuNzUtM2wtMTIuNjItMy4xMXEtMjUuMDYtNi4zNy01MC41OC0xMC40N2E0MjYuMzcsNDI2LjM3LDAsMCwwLTUxLjMtNS4zYy04LjU5LS40Mi0xNy4xOS0uMjktMjUuNzgsMGEyNDAuMSwyNDAuMSwwLDAsMC0yNS42OCwyLjI0LDE4Ni41NywxODYuNTcsMCwwLDAtMjUuMjcsNS4xOWMtNC4xNSwxLjE2LTguMjYsMi40OS0xMi4yOCw0LjA1LTIsLjc5LTQsMS42LTYsMi41MkE1MC44Miw1MC44MiwwLDAsMCwyMDcuNSw0ODQuMDZaIgogICAgICAgICAgICAgICAgZmlsbD0iI2NiOTg2NiIgLz4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InRyZWVQb3QiIG1hc2s9InVybCgjdHJlZVBvdE1hc2spIgogICAgICAgICAgICAgICAgZD0iTTM3NC4zMiw1MDIuNTVhNDguMTUsNDguMTUsMCwwLDAsMS4yNCwxNC4zNWMxLjE1LDQuNTIsMy4yOSw4LjY0LDYuNDksMTEuMzVhMTguNSwxOC41LDAsMCwwLDUuNTEsMy4xNCwzOS4wNiwzOS4wNiwwLDAsMCw2LjQxLDEuODIsNjUuNzgsNjUuNzgsMCwwLDAsMTMuNjgsMS4xMiw3Mi45LDcyLjksMCwwLDAsMTMuNzItMS40NCw0NC41MSw0NC41MSwwLDAsMCw2LjQ2LTEuODUsMTcuNzUsMTcuNzUsMCwwLDAsNS41MS0zLjE1LDI1LjQ1LDI1LjQ1LDAsMCwwLDcuMjQtMTEuMTcsNTIsNTIsMCwwLDAsMS45LTYuOTFjLjQ4LTIuMzcuODMtNC44LDEuMTgtNy4yNWE1NS4xNiw1NS4xNiwwLDAsMSwuNjQsNy40Miw0MC4xMSw0MC4xMSwwLDAsMS0uNTIsNy41NiwzMS4yMywzMS4yMywwLDAsMS0yLjE5LDcuNSwyNC4zNywyNC4zNywwLDAsMS00LjQ2LDYuNzksMjUuMTYsMjUuMTYsMCwwLDEtNi42MSw1LDM5LjcyLDM5LjcyLDAsMCwxLTcuNCwzQTU4LjU1LDU4LjU1LDAsMCwxLDQwNy43NSw1NDJhNTUsNTUsMCwwLDEtMTUuNDctMS45LDM2LjY1LDM2LjY1LDAsMCwxLTcuNDYtMywyNS4zLDI1LjMsMCwwLDEtNi42LTUsMTkuNjMsMTkuNjMsMCwwLDEtMi41LTMuMzQsMjEuNzIsMjEuNzIsMCwwLDEtMS43OS0zLjY3LDI3LjY2LDI3LjY2LDAsMCwxLTEuNjUtNy43LDM4LjE2LDM4LjE2LDAsMCwxLDItMTQuODdaIgogICAgICAgICAgICAgICAgZmlsbD0iI2NiOTg2NiIgLz4KICAgICAgICAgICAgPGcgY2xhc3M9InRyZWVTdGFyIj4KICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJ0cmVlU3Rhck91dGxpbmUiIG9wYWNpdHk9IjAiCiAgICAgICAgICAgICAgICAgICAgZD0iTTQyMSw1My4yN2M1LC44MywxMC4wOCwxLjUyLDE1LjE1LDIuMTNsMy44LjQ1LDEuOS4yMWMuMzMsMCwuNi4wNiwxLC4xMmEyLjQxLDIuNDEsMCwwLDEsMS4yNy42NiwyLjUyLDIuNTIsMCwwLDEsLjU2LDIuNzYsMy40MiwzLjQyLDAsMCwxLS43OCwxLjA3bC0uNjYuNjktMi42NSwyLjc3Yy0xLjc4LDEuODMtMy41NCwzLjY4LTUuMzUsNS40OGwtMi43LDIuNzFMNDI5LjgxLDc1bC0uNjkuNjctLjM0LjMzLDAsMGgwYS4xNC4xNCwwLDAsMCwwLS4wOHMwLS4wNywwLDBsMCwuMjQuMDcuNDcuNTcsMy43OGMuNCwyLjUyLjcxLDUsMS4wNiw3LjU3bC45NCw3LjU5LjIyLDEuOWMwLC4wNiwwLC4xOSwwLC4zNGEyLjIxLDIuMjEsMCwwLDEsMCwuNDMsMi43MiwyLjcyLDAsMCwxLS4yMS44NCwyLjg1LDIuODUsMCwwLDEtMi42NSwxLjc1LDIuNTcsMi41NywwLDAsMS0uODItLjE0LDMuMTIsMy4xMiwwLDAsMS0uNjUtLjNsLTEuNjQtMS02LjU4LTMuOTEtNi42My0zLjgxLTMuMzQtMS44Ni0uNDItLjIzLS4yMS0uMTItLjE0LS4wN2ExLDEsMCwwLDAtLjU5LDAsMS4xNSwxLjE1LDAsMCwwLS4zMS4xMmwtLjQzLjIyLS44NS40NGMtMi4yNywxLjE3LTQuNTQsMi4zMS02Ljc5LDMuNTJzLTQuNTEsMi4zOC02Ljc0LDMuNjFsLTMuMzYsMS44My0uODQuNDZhMy4wNywzLjA3LDAsMCwxLTEuMjguNDQsMi42OCwyLjY4LDAsMCwxLTIuODQtM2wuMTUtMSwuMjktMS44OS41Ny0zLjc4LDEuMTgtNy41NiwxLjI0LTcuNTJhLjEzLjEzLDAsMCwwLDAsLjA4bDAsMC0uMS0uMDktLjE3LS4xNy0xLjM3LTEuMzQtMi43My0yLjY4LTEwLjkzLTEwLjctLjM0LS4zM2E0LDQsMCwwLDEtLjY0LS44NCwzLjYzLDMuNjMsMCwwLDEtLjQzLTIuMTIsMy42OCwzLjY4LDAsMCwxLDIuNjQtMy4xN2wuNTItLjExLjI1LDAsLjQ3LS4wNi45NS0uMTIsMS45LS4yNSw3LjU4LTEsNy42LS45LDEuOS0uMjMuOTUtLjExYy4yNCwwLC4xMSwwLC4wOSwwbC0uMDkuMDUtLjA3LjA4LDAsMCwuMDktLjE2LjQ2LS44NC45MS0xLjY4YzIuNDEtNC41LDQuOTUtOC45Miw3LjUxLTEzLjM0bDEtMS42Ni40OC0uODMuMjQtLjQxLjEzLS4yM2EzLjQ5LDMuNDksMCwwLDEsLjIyLS4zMywyLjY2LDIuNjYsMCwwLDEsMi44My0uOSwyLjUyLDIuNTIsMCwwLDEsMS4yNi44NCwyLjg1LDIuODUsMCwwLDEsLjM3LjYybC4xOC40NHExLjQ1LDMuNTQsMyw3LjA2YzEsMi4zNiwyLDQuNjgsMy4wNiw3LC41MSwxLjE3LDEuMDYsMi4zMiwxLjU5LDMuNDhsLjgsMS43NGEyLjEyLDIuMTIsMCwwLDAsLjQ1Ljc1QTEuNDIsMS40MiwwLDAsMCw0MjEsNTMuMjdabS0uMDYuMzlhMS44MiwxLjgyLDAsMCwxLTEtLjQ2LDIuNTIsMi41MiwwLDAsMS0uNTYtLjg2bC0uODQtMS43MmMtLjU2LTEuMTQtMS4xMS0yLjMtMS42OS0zLjQzLTEuMTctMi4yNy0yLjI5LTQuNTYtMy41LTYuODFzLTIuMzktNC41MS0zLjYtNi43NmwtLjIzLS40MmEuOC44LDAsMCwwLS4xNC0uMTguNTguNTgsMCwwLDAtLjMzLS4xNS41Ni41NiwwLDAsMC0uNTcuMjhMNDA3LDM2LjQ4Yy0yLjA5LDQuNjYtNC4yLDkuMzEtNi40NSwxMy44OGwtLjgzLDEuNzItLjQyLjg2LS4xMy4yN2EzLjU3LDMuNTcsMCwwLDEtMiwxLjY3LDQuMjYsNC4yNiwwLDAsMS0uODQuMThsLS45NS4xMy0xLjg5LjI3TDM4Niw1Ni41M2wtNy41OCwxLTMuNDkuNDRhLjQ1LjQ1LDAsMCwwLC4zNC0uNC41MS41MSwwLDAsMC0uMDctLjI4cy0uMDYtLjA4LS4wNy0uMDhsLjMzLjM0LDEwLjY1LDExLDIuNjYsMi43NSwxLjMzLDEuMzcuNC40MmEzLjQxLDMuNDEsMCwwLDEsLjUzLjg0LDMuMzYsMy4zNiwwLDAsMSwuMjQsMS45NWMtLjUzLDIuNTYtMSw1LTEuNTcsNy41MkwzODgsOTAuODVsLS44MywzLjczLS40MiwxLjg3LS4yLjlhLjUuNSwwLDAsMCwwLC4zLjU4LjU4LDAsMCwwLC41Mi4zNyw2LjI4LDYuMjgsMCwwLDAsMS4zOC0uNThsMy40Ni0xLjYycTMuNDctMS42MSw2LjktMy4zYzIuMy0xLjEsNC41Ny0yLjI2LDYuODUtMy4zOWwuODYtLjQzLjQzLS4yMWEyLjU1LDIuNTUsMCwwLDEsLjU3LS4yMiwyLjIxLDIuMjEsMCwwLDEsMS4yOS4wOGwuMjkuMTMuMjEuMTEuNDIuMjMsMy4zNywxLjgxLDYuOCwzLjUxLDYuODUsMy40MSwxLjcxLjg1Yy4xOS4wOS4xNS4wNy4yMi4wOGEuMjUuMjUsMCwwLDAsLjEyLDAsLjQyLjQyLDAsMCwwLC4yMS0uMS4zMy4zMywwLDAsMCwuMS0uMTkuMi4yLDAsMCwwLDAtLjA5LjEuMSwwLDAsMCwwLDBsMC0uMTNMNDI4Ljc0LDk2bC0xLjQyLTcuNTJjLS40My0yLjUxLS45LTUtMS4yOS03LjU0bC0uNi0zLjc4LS4wOC0uNDcsMC0uMjRhMy43NSwzLjc1LDAsMCwxLDAtLjQ1LDMuMzcsMy4zNywwLDAsMSwuNTItMS45LDMuMzMsMy4zMywwLDAsMSwuMy0uNCwzLjczLDMuNzMsMCwwLDEsLjMtLjNsLjM1LS4zMi43LS42NSwyLjgxLTIuNTksMi44Ni0yLjU0YzEuOS0xLjcxLDMuODQtMy4zNiw1Ljc3LTVsMi45MS0yLjQ5YTEyLjkxLDEyLjkxLDAsMCwwLDEuMTUtMSwuNy43LDAsMCwwLS4wNi0uNzkuNzMuNzMsMCwwLDAtLjM3LS4yNmMtLjIzLS4wNi0uNi0uMTMtLjg5LS4ybC0xLjg3LS40TDQzNiw1Ni4zOUM0MzEsNTUuMzksNDI2LDU0LjQ1LDQyMC45NSw1My42NloiCiAgICAgICAgICAgICAgICAgICAgZmlsbD0iI0ZGRkNGOSIgLz4KICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgZD0iTTQwOC4xMiw4My40NWwtMTcuNzgsOC45NCwzLjcyLTE5LjU1LTE0LTE0LjE1LDE5Ljc0LTIuNSw5LjEzLTE3LjY4LDguNDgsMThMNDM3LDU5LjczbC0xNC41LDEzLjYzLDMsMTkuNjdaIgogICAgICAgICAgICAgICAgICAgIGZpbGw9IiNDODk1NjgiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0ic3BhcmtsZSIgZmlsbD0idXJsKCNkb3RHcmFkKSIgY3g9IjAiIGN5PSIwIiByPSI1MCIgLz4KCiAgICAgICAgPC9nPgogICAgPC9zdmc+CiAgICA8aDEgY2xhc3M9InRleHQgdHlwZXdyaXRlciI+TWVycnkgQ2hyaXN0bWFzPC9oMT4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL3UuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmcuY28vZ3NhcEAzL2Rpc3QvZ3NhcC5taW4uanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vcy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4ucy5jb20vcy5jZHBuLmlvLzE2MzI3L01vcnBoU1ZHUGx1Z2luMy5taW4uanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vcy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4ucy5jb20vcy5jZHBuLmlvLzE2MzI3L0RyYXdTVkdQbHVnaW4zLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9zLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5zLmNvbS9zLmNkcG4uaW8vMTYzMjcvTW90aW9uUGF0aFBsdWdpbi5taW4uanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vcy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4ucy5jb20vcy5jZHBuLmlvLzE2MzI3L1BoeXNpY3MyRFBsdWdpbjMubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL3MuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnMuY29tL3MuY2Rwbi5pby8xNjMyNy9FYXNlUGFjazMubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQ+CiAgICAgICAgTW9ycGhTVkdQbHVnaW4uY29udmVydFRvUGF0aCgncG9seWdvbicpOwogICAgICAgIHZhciB4bWxucyA9ICJodHRwOi8vdy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uMy5vcmcvMjAwMC9zdmciLAogICAgICAgICAgICB4bGlua25zID0gImh0dHA6Ly93Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi4zLm9yZy8xOTk5L3hsaW5rIiwKICAgICAgICAgICAgc2VsZWN0ID0gZnVuY3Rpb24gKHMpIHsKICAgICAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHMpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBzZWxlY3RBbGwgPSBmdW5jdGlvbiAocykgewogICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocyk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHBDb250YWluZXIgPSBzZWxlY3QoJy5wQ29udGFpbmVyJyksCiAgICAgICAgICAgIG1haW5TVkcgPSBzZWxlY3QoJy5tYWluU1ZHJyksCiAgICAgICAgICAgIHN0YXIgPSBzZWxlY3QoJyNzdGFyJyksCiAgICAgICAgICAgIHNwYXJrbGUgPSBzZWxlY3QoJy5zcGFya2xlJyksCiAgICAgICAgICAgIHRyZWUgPSBzZWxlY3QoJyN0cmVlJyksCiAgICAgICAgICAgIHNob3dQYXJ0aWNsZSA9IHRydWUsCiAgICAgICAgICAgIHBhcnRpY2xlQ29sb3JBcnJheSA9IFsnI0U4RjZGOCcsICcjQUNFOEY4JywgJyNGNkZCRkUnLCAnI0EyQ0JEQycsICcjQjc0NTUxJywgJyM1REJBNzInLCAnIzkxMEIyOCcsICcjOTEwQjI4JywgJyM0NDZEMzknXSwKICAgICAgICAgICAgcGFydGljbGVUeXBlQXJyYXkgPSBbJyNzdGFyJywgJyNjaXJjJywgJyNjcm9zcycsICcjaGVhcnQnXSwKICAgICAgICAgICAgLy8gcGFydGljbGVUeXBlQXJyYXkgPSBbJyNzdGFyJ10sCiAgICAgICAgICAgIHBhcnRpY2xlUG9vbCA9IFtdLAogICAgICAgICAgICBwYXJ0aWNsZUNvdW50ID0gMCwKICAgICAgICAgICAgbnVtUGFydGljbGVzID0gMjAxCgoKICAgICAgICBnc2FwLnNldCgnc3ZnJywgewogICAgICAgICAgICB2aXNpYmlsaXR5OiAndmlzaWJsZScKICAgICAgICB9KQoKICAgICAgICBnc2FwLnNldChzcGFya2xlLCB7CiAgICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzUwJSA1MCUnLAogICAgICAgICAgICB5OiAtMTAwCiAgICAgICAgfSkKCiAgICAgICAgbGV0IGdldFNWR1BvaW50cyA9IChwYXRoKSA9PiB7CgogICAgICAgICAgICBsZXQgYXJyID0gW10KICAgICAgICAgICAgdmFyIHJhd1BhdGggPSBNb3Rpb25QYXRoUGx1Z2luLmdldFJhd1BhdGgocGF0aClbMF07CiAgICAgICAgICAgIHJhd1BhdGguZm9yRWFjaCgoZWwsIHZhbHVlKSA9PiB7CiAgICAgICAgICAgICAgICBsZXQgb2JqID0ge30KICAgICAgICAgICAgICAgIG9iai54ID0gcmF3UGF0aFt2YWx1ZSAqIDJdCiAgICAgICAgICAgICAgICBvYmoueSA9IHJhd1BhdGhbKHZhbHVlICogMikgKyAxXQogICAgICAgICAgICAgICAgaWYgKHZhbHVlICUgMikgewogICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKG9iaikKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2codmFsdWUpCiAgICAgICAgICAgIH0pCgogICAgICAgICAgICByZXR1cm4gYXJyOwogICAgICAgIH0KICAgICAgICBsZXQgdHJlZVBhdGggPSBnZXRTVkdQb2ludHMoJy50cmVlUGF0aCcpLAogICAgICAgICAgICB0cmVlQm90dG9tUGF0aCA9IGdldFNWR1BvaW50cygnLnRyZWVCb3R0b21QYXRoJyksCiAgICAgICAgICAgIG1haW5UbCA9IGdzYXAudGltZWxpbmUoeyBkZWxheTogMCwgcmVwZWF0OiAwIH0pLAogICAgICAgICAgICBzdGFyVGw7CgogICAgICAgIGZ1bmN0aW9uIGZsaWNrZXIocCkgewoKICAgICAgICAgICAgZ3NhcC5raWxsVHdlZW5zT2YocCwgeyBvcGFjaXR5OiB0cnVlIH0pOwogICAgICAgICAgICBnc2FwLmZyb21UbyhwLCB7CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwLjA3LAogICAgICAgICAgICAgICAgb3BhY2l0eTogTWF0aC5yYW5kb20oKSwKICAgICAgICAgICAgICAgIHJlcGVhdDogLTEKICAgICAgICAgICAgfSkKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVBhcnRpY2xlcygpIHsKCiAgICAgICAgICAgIHZhciBpID0gbnVtUGFydGljbGVzLCBwLCBwYXJ0aWNsZVRsLCBzdGVwID0gbnVtUGFydGljbGVzIC8gdHJlZVBhdGgubGVuZ3RoLCBwb3M7CiAgICAgICAgICAgIHdoaWxlICgtLWkgPiAtMSkgewoKICAgICAgICAgICAgICAgIHAgPSBzZWxlY3QocGFydGljbGVUeXBlQXJyYXlbaSAlIHBhcnRpY2xlVHlwZUFycmF5Lmxlbmd0aF0pLmNsb25lTm9kZSh0cnVlKTsKICAgICAgICAgICAgICAgIG1haW5TVkcuYXBwZW5kQ2hpbGQocCk7CiAgICAgICAgICAgICAgICBwLnNldEF0dHJpYnV0ZSgnZmlsbCcsIHBhcnRpY2xlQ29sb3JBcnJheVtpICUgcGFydGljbGVDb2xvckFycmF5Lmxlbmd0aF0pOwogICAgICAgICAgICAgICAgcC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgInBhcnRpY2xlIik7CiAgICAgICAgICAgICAgICBwYXJ0aWNsZVBvb2wucHVzaChwKTsKICAgICAgICAgICAgICAgIC8vaGlkZSB0aGVtIGluaXRpYWxseQogICAgICAgICAgICAgICAgZ3NhcC5zZXQocCwgewogICAgICAgICAgICAgICAgICAgIHg6IC0xMDAsCiAgICAgICAgICAgICAgICAgICAgeTogLTEwMCwKICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW46ICc1MCUgNTAlJwogICAgICAgICAgICAgICAgfSkKCgoKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIHZhciBnZXRTY2FsZSA9IGdzYXAudXRpbHMucmFuZG9tKDAuNSwgMywgMC4wMDEsIHRydWUpOwoKICAgICAgICBmdW5jdGlvbiBwbGF5UGFydGljbGUocCkgewogICAgICAgICAgICBpZiAoIXNob3dQYXJ0aWNsZSkgeyByZXR1cm4gfTsKICAgICAgICAgICAgdmFyIHAgPSBwYXJ0aWNsZVBvb2xbcGFydGljbGVDb3VudF0KICAgICAgICAgICAgZ3NhcC5zZXQocCwgewogICAgICAgICAgICAgICAgeDogZ3NhcC5nZXRQcm9wZXJ0eSgnLnBDb250YWluZXInLCAneCcpLAogICAgICAgICAgICAgICAgeTogZ3NhcC5nZXRQcm9wZXJ0eSgnLnBDb250YWluZXInLCAneScpLAogICAgICAgICAgICAgICAgc2NhbGU6IGdldFNjYWxlKCkKICAgICAgICAgICAgfQogICAgICAgICAgICApOwogICAgICAgICAgICB2YXIgdGwgPSBnc2FwLnRpbWVsaW5lKCk7CiAgICAgICAgICAgIHRsLnRvKHAsIHsKICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBnc2FwLnV0aWxzLnJhbmRvbSgwLjYxLCA2KSwKICAgICAgICAgICAgICAgIHBoeXNpY3MyRDogewogICAgICAgICAgICAgICAgICAgIHZlbG9jaXR5OiBnc2FwLnV0aWxzLnJhbmRvbSgtMjMsIDIzKSwKICAgICAgICAgICAgICAgICAgICBhbmdsZTogZ3NhcC51dGlscy5yYW5kb20oLTE4MCwgMTgwKSwKICAgICAgICAgICAgICAgICAgICBncmF2aXR5OiBnc2FwLnV0aWxzLnJhbmRvbSgtNiwgNTApCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgc2NhbGU6IDAsCiAgICAgICAgICAgICAgICByb3RhdGlvbjogZ3NhcC51dGlscy5yYW5kb20oLTEyMywgMzYwKSwKICAgICAgICAgICAgICAgIGVhc2U6ICdwb3dlcjEnLAogICAgICAgICAgICAgICAgb25TdGFydDogZmxpY2tlciwKICAgICAgICAgICAgICAgIG9uU3RhcnRQYXJhbXM6IFtwXSwKICAgICAgICAgICAgICAgIG9uUmVwZWF0OiAocCkgPT4gewogICAgICAgICAgICAgICAgICAgIGdzYXAuc2V0KHAsIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGU6IGdldFNjYWxlKCkKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIG9uUmVwZWF0UGFyYW1zOiBbcF0KCiAgICAgICAgICAgIH0pOwoKCiAgICAgICAgICAgIHBhcnRpY2xlQ291bnQrKzsKICAgICAgICAgICAgcGFydGljbGVDb3VudCA9IChwYXJ0aWNsZUNvdW50ID49IG51bVBhcnRpY2xlcykgPyAwIDogcGFydGljbGVDb3VudAoKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGRyYXdTdGFyKCkgewoKICAgICAgICAgICAgc3RhclRsID0gZ3NhcC50aW1lbGluZSh7IG9uVXBkYXRlOiBwbGF5UGFydGljbGUgfSkKICAgICAgICAgICAgc3RhclRsLnRvKCcucENvbnRhaW5lciwgLnNwYXJrbGUnLCB7CiAgICAgICAgICAgICAgICBkdXJhdGlvbjogNiwKICAgICAgICAgICAgICAgIG1vdGlvblBhdGg6IHsKICAgICAgICAgICAgICAgICAgICBwYXRoOiAnLnRyZWVQYXRoJywKICAgICAgICAgICAgICAgICAgICBhdXRvUm90YXRlOiBmYWxzZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGVhc2U6ICdsaW5lYXInCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAudG8oJy5wQ29udGFpbmVyLCAuc3BhcmtsZScsIHsKICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMSwKICAgICAgICAgICAgICAgICAgICBvblN0YXJ0OiBmdW5jdGlvbiAoKSB7IHNob3dQYXJ0aWNsZSA9IGZhbHNlIH0sCiAgICAgICAgICAgICAgICAgICAgeDogdHJlZUJvdHRvbVBhdGhbMF0ueCwKICAgICAgICAgICAgICAgICAgICB5OiB0cmVlQm90dG9tUGF0aFswXS55CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLnRvKCcucENvbnRhaW5lciwgLnNwYXJrbGUnLCB7CiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDIsCiAgICAgICAgICAgICAgICAgICAgb25TdGFydDogZnVuY3Rpb24gKCkgeyBzaG93UGFydGljbGUgPSB0cnVlIH0sCiAgICAgICAgICAgICAgICAgICAgbW90aW9uUGF0aDogewogICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiAnLnRyZWVCb3R0b21QYXRoJywKICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1JvdGF0ZTogZmFsc2UKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVhc2U6ICdsaW5lYXInCiAgICAgICAgICAgICAgICB9LCAnLT0wJykKICAgICAgICAgICAgICAgIC5mcm9tKCcudHJlZUJvdHRvbU1hc2snLCB7CiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDIsCiAgICAgICAgICAgICAgICAgICAgZHJhd1NWRzogJzAlIDAlJywKICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjRkZGJywKICAgICAgICAgICAgICAgICAgICBlYXNlOiAnbGluZWFyJwogICAgICAgICAgICAgICAgfSwgJy09MicpCgogICAgICAgIH0KCgogICAgICAgIGNyZWF0ZVBhcnRpY2xlcygpOwogICAgICAgIGRyYXdTdGFyKCk7CgogICAgICAgIG1haW5UbC5mcm9tKFsnLnRyZWVQYXRoTWFzaycsICcudHJlZVBvdE1hc2snXSwgewogICAgICAgICAgICBkdXJhdGlvbjogNiwKICAgICAgICAgICAgZHJhd1NWRzogJzAlIDAlJywKICAgICAgICAgICAgc3Ryb2tlOiAnI0ZGRicsCiAgICAgICAgICAgIHN0YWdnZXI6IHsKICAgICAgICAgICAgICAgIGVhY2g6IDYKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZHVyYXRpb246IGdzYXAudXRpbHMud3JhcChbNiwgMSwgMl0pLAogICAgICAgICAgICBlYXNlOiAnbGluZWFyJwogICAgICAgIH0pCiAgICAgICAgICAgIC5mcm9tKCcudHJlZVN0YXInLCB7CiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMywKICAgICAgICAgICAgICAgIHNjYWxlWTogMCwKICAgICAgICAgICAgICAgIHNjYWxlWDogMC4xNSwKICAgICAgICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzUwJSA1MCUnLAogICAgICAgICAgICAgICAgZWFzZTogJ2VsYXN0aWMoMSwwLjUpJwogICAgICAgICAgICB9LCAnLT00JykKCiAgICAgICAgICAgIC50bygnLnNwYXJrbGUnLCB7CiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMywKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAsCiAgICAgICAgICAgICAgICBlYXNlOiAicm91Z2goe3N0cmVuZ3RoOiAyLCBwb2ludHM6IDEwMCwgdGVtcGxhdGU6IGxpbmVhciwgdGFwZXI6IGJvdGgsIHJhbmRvbWl6ZTogdHJ1ZSwgY2xhbXA6IGZhbHNlfSkiCiAgICAgICAgICAgIH0sICctPTAnKQogICAgICAgICAgICAudG8oJy50cmVlU3Rhck91dGxpbmUnLCB7CiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMSwKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsCiAgICAgICAgICAgICAgICBlYXNlOiAicm91Z2goe3N0cmVuZ3RoOiAyLCBwb2ludHM6IDE2LCB0ZW1wbGF0ZTogbGluZWFyLCB0YXBlcjogbm9uZSwgcmFuZG9taXplOiB0cnVlLCBjbGFtcDogZmFsc2V9KSIKICAgICAgICAgICAgfSwgJys9MScpCgogICAgICAgIG1haW5UbC5hZGQoc3RhclRsLCAwKQogICAgICAgIGdzYXAuZ2xvYmFsVGltZWxpbmUudGltZVNjYWxlKDEuNSk7CgogICAgPC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly91Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5nLmNvbS9AZG90bG90dGllL3BsYXllci1jb21wb25lbnRAbGF0ZXN0L2Rpc3QvZG90bG90dGllLXBsYXllci5tanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+IAoKICAgIDxkb3Rsb3R0aWUtcGxheWVyIGNsYXNzPSJzYW50YS1jbGF1cyIgc3JjPSJodHRwczovL2wuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmUuaG9zdC82ZDBkZmE1Yy0wMjhjLTQ4NDctODM4OS0wNjMwNGViMWIwMWUvNVR0SnZENnhvTS5qc29uIiBiYWNrZ3JvdW5kPSJ0cmFuc3BhcmVudCIgc3BlZWQ9IjEiIHN0eWxlPSJ3aWR0aDogMzAwcHg7IGhlaWdodDogMzAwcHg7IiBsb29wIGF1dG9wbGF5PjwvZG90bG90dGllLXBsYXllcj4KPC9ib2R5PgoKPC9odG1sPgo=