commit b3a887de94adb78c1898d15c63a83e870fc59e4c Author: <> Date: Sat Mar 19 19:37:48 2022 +0000 Generate Pelican site diff --git a/404.html b/404.html new file mode 100644 index 0000000..5f0c903 --- /dev/null +++ b/404.html @@ -0,0 +1,38 @@ + + + + + + Lost in Space! + + + + + + + + +
+

ME CHERCHEZ-VOUS?

+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..66a20fe --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +avinal.space \ No newline at end of file diff --git a/android-chrome-192x192.png b/android-chrome-192x192.png new file mode 100644 index 0000000..f48957a Binary files /dev/null and b/android-chrome-192x192.png differ diff --git a/android-chrome-512x512.png b/android-chrome-512x512.png new file mode 100644 index 0000000..363a011 Binary files /dev/null and b/android-chrome-512x512.png differ diff --git a/apple-touch-icon.png b/apple-touch-icon.png new file mode 100644 index 0000000..a40b120 Binary files /dev/null and b/apple-touch-icon.png differ diff --git a/archives.html b/archives.html new file mode 100644 index 0000000..b62706e --- /dev/null +++ b/archives.html @@ -0,0 +1,115 @@ + + + + + + + + + Archives | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Archives +

+
+
+
Sun 27 February 2022
+
Developing Minimal Tekton Server mks_logo
+
Fri 25 February 2022
+
My internship at Red Hat redhat_logo
+
Thu 19 August 2021
+
Google Summer of Code 2021
+
Sun 14 February 2021
+
reStructuredText in GitHub
+
Tue 02 February 2021
+
How I implemented WakaTime embeddable Coding Graph GHA?
+
Tue 26 January 2021
+
How I Created This Blog?
+
Sat 09 January 2021
+
Introduction to Prime Numbers
+
Mon 04 January 2021
+
HRT Systems Internship Interview Experience
+
Thu 31 December 2020
+
Move WSL 2 Safely to another Drive
+
Tue 01 December 2020
+
Create the VLC User Documentation for one Mobile Port(Android)
+
Mon 28 September 2020
+
The Interstellar Twilight
+
Sat 21 September 2019
+
प्रेम रतन धन पायो
+
Mon 27 February 2012
+
The Big Red Ants
+
+
+
+ + + + + + \ No newline at end of file diff --git a/author/avinal.html b/author/avinal.html new file mode 100644 index 0000000..364f20f --- /dev/null +++ b/author/avinal.html @@ -0,0 +1,214 @@ + + + + + + + + + Avinal Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Avinal Articles +

+
+
+
+ +
+
+

+ Developing Minimal Tekton Server mks_logo +

+
+ We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster. +
+
+
+
+
+
+ +
+
+

+ My internship at Red Hat redhat_logo +

+
+ I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project. +
+
+
+
+
+
+
    +
  • + + Thu 19 August 2021 +
  • +
  • + + report +
  • +
+
+
+

+ Google Summer of Code 2021 +

+
+ This is the final report of my Google Summer of Code 2021 at The FOSSology Project. +
+
+
+
+ +
+
+
+ +
+
+

+ How I implemented WakaTime embeddable Coding Graph GHA? +

+
+ f you use WakaTime to track your coding activity. You can add that to your README as a bar graph or embed it in your blog/portfolio. Just add this action to any of your repositories and there you have it. +
+
+
+
+ +
+
+ + + + + + \ No newline at end of file diff --git a/author/avinal2.html b/author/avinal2.html new file mode 100644 index 0000000..afa7f3c --- /dev/null +++ b/author/avinal2.html @@ -0,0 +1,220 @@ + + + + + + + + + Avinal Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Avinal Articles +

+
+
+
+ +
+
+

+ How I Created This Blog? +

+
+ As you would have guessed by now, this blog is created using one such awesome SSG named Pelican. Pelican is simple, customizable and offers lots of themes and plugins. Pelican is python based SSG and is available through pip. +
+
+
+
+
+
+
    +
  • + + Sat 09 January 2021 +
  • +
  • + + prime +
  • +
+
+
+

+ Introduction to Prime Numbers +

+
+ A prime is a positive integer p having exactly two positive divisors, namely 1 and p. An integer n is composite if n > 1 and n is not prime. (The number 1 is considered neither prime nor composite.) +
+
+
+
+
+
+
    +
  • + + Mon 04 January 2021 +
  • +
  • + + blog +
  • +
+
+
+

+ HRT Systems Internship Interview Experience +

+
+ I applied for Systems Internship - Summer 2021 back in December 2020 at Hudson River Trading , New York.....Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt. +
+
+
+
+
+
+ +
+
+

+ Move WSL 2 Safely to another Drive +

+
+ It is real pain when you have small SSD and Windows Subsystem for Linux (WSL) is growing exponentially in size. There is no easy way to move the WSL installation to another drive. Here in this blog I will discuss how to tackle this problem with bite size steps. +
+
+
+
+
+
+ +
+
+

+ Create the VLC User Documentation for one Mobile Port(Android) +

+
+ The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLC’s wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization. +
+
+
+
+ +
+
+ + + + + + \ No newline at end of file diff --git a/author/avinal3.html b/author/avinal3.html new file mode 100644 index 0000000..cf67c3b --- /dev/null +++ b/author/avinal3.html @@ -0,0 +1,168 @@ + + + + + + + + + Avinal Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Avinal Articles +

+
+
+
+
    +
  • + + Mon 28 September 2020 +
  • +
  • + + blog +
  • +
+
+
+

+ The Interstellar Twilight +

+
+ If in the Twilight of dreams we should meet once more, we shell talk again together and I shall sing to you a lullaby till you sleep again to meet me in the Twilight of another dream. +
+
+
+
+
+
+
    +
  • + + Sat 21 September 2019 +
  • +
  • + + article +
  • +
+
+
+

+ प्रेम रतन धन पायो +

+
+ टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं । दादा-दादी कहा करते थे ये जिंदा पहाड़ हैं । सारी बातें सुनते हैं लोगों की । उनके दुख दर्द दूर करते हैं, ये देवता हैं । +
+
+
+
+
+
+
    +
  • + + Mon 27 February 2012 +
  • +
  • + + article +
  • +
+
+
+

+ The Big Red Ants +

+
+ In a bird’s eye view if we see around us, ants are the common and tiniest living entitiy seen by naked eye. One of them are the big red ants, in my view they are unique from others in two ways, first they live on trees and second their anteenas are too long and bent in middle, seems like their fore legs. Their mandible (mouth) seems like eagle’s beak. +
+
+
+
+ +
+
+ + + + + + \ No newline at end of file diff --git a/browserconfig.xml b/browserconfig.xml new file mode 100644 index 0000000..5aecc91 --- /dev/null +++ b/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #00aba9 + + + diff --git a/categories.html b/categories.html new file mode 100644 index 0000000..30c88d6 --- /dev/null +++ b/categories.html @@ -0,0 +1,109 @@ + + + + + + + + + Categories | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Categories +

+
+ + + + + + + + + + + + + + + + + + + + + +
article2
blog2
development7
prime1
report1
+
+
+ + + + + + \ No newline at end of file diff --git a/category/article.html b/category/article.html new file mode 100644 index 0000000..43a92ba --- /dev/null +++ b/category/article.html @@ -0,0 +1,134 @@ + + + + + + + + + article Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Category: article +

+
+
+
+
    +
  • + + Sat 21 September 2019 +
  • +
  • + + article +
  • +
+
+
+

+ प्रेम रतन धन पायो +

+
+ टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं । दादा-दादी कहा करते थे ये जिंदा पहाड़ हैं । सारी बातें सुनते हैं लोगों की । उनके दुख दर्द दूर करते हैं, ये देवता हैं । +
+
+
+
+
+
+
    +
  • + + Mon 27 February 2012 +
  • +
  • + + article +
  • +
+
+
+

+ The Big Red Ants +

+
+ In a bird’s eye view if we see around us, ants are the common and tiniest living entitiy seen by naked eye. One of them are the big red ants, in my view they are unique from others in two ways, first they live on trees and second their anteenas are too long and bent in middle, seems like their fore legs. Their mandible (mouth) seems like eagle’s beak. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/category/blog.html b/category/blog.html new file mode 100644 index 0000000..e10ec02 --- /dev/null +++ b/category/blog.html @@ -0,0 +1,134 @@ + + + + + + + + + blog Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Category: blog +

+
+
+
+
    +
  • + + Mon 04 January 2021 +
  • +
  • + + blog +
  • +
+
+
+

+ HRT Systems Internship Interview Experience +

+
+ I applied for Systems Internship - Summer 2021 back in December 2020 at Hudson River Trading , New York.....Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt. +
+
+
+
+
+
+
    +
  • + + Mon 28 September 2020 +
  • +
  • + + blog +
  • +
+
+
+

+ The Interstellar Twilight +

+
+ If in the Twilight of dreams we should meet once more, we shell talk again together and I shall sing to you a lullaby till you sleep again to meet me in the Twilight of another dream. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/category/development.html b/category/development.html new file mode 100644 index 0000000..ecedee3 --- /dev/null +++ b/category/development.html @@ -0,0 +1,215 @@ + + + + + + + + + development Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Category: development +

+
+
+
+ +
+
+

+ Developing Minimal Tekton Server mks_logo +

+
+ We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster. +
+
+
+
+
+
+ +
+
+

+ My internship at Red Hat redhat_logo +

+
+ I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project. +
+
+
+
+ +
+
+
+ +
+
+

+ How I implemented WakaTime embeddable Coding Graph GHA? +

+
+ f you use WakaTime to track your coding activity. You can add that to your README as a bar graph or embed it in your blog/portfolio. Just add this action to any of your repositories and there you have it. +
+
+
+
+
+
+ +
+
+

+ How I Created This Blog? +

+
+ As you would have guessed by now, this blog is created using one such awesome SSG named Pelican. Pelican is simple, customizable and offers lots of themes and plugins. Pelican is python based SSG and is available through pip. +
+
+
+
+ +
+
+ + + + + + \ No newline at end of file diff --git a/category/development2.html b/category/development2.html new file mode 100644 index 0000000..622958c --- /dev/null +++ b/category/development2.html @@ -0,0 +1,146 @@ + + + + + + + + + development Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Category: development +

+
+
+
+ +
+
+

+ Move WSL 2 Safely to another Drive +

+
+ It is real pain when you have small SSD and Windows Subsystem for Linux (WSL) is growing exponentially in size. There is no easy way to move the WSL installation to another drive. Here in this blog I will discuss how to tackle this problem with bite size steps. +
+
+
+
+
+
+ +
+
+

+ Create the VLC User Documentation for one Mobile Port(Android) +

+
+ The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLC’s wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization. +
+
+
+
+ +
+
+ + + + + + \ No newline at end of file diff --git a/category/prime.html b/category/prime.html new file mode 100644 index 0000000..674916c --- /dev/null +++ b/category/prime.html @@ -0,0 +1,111 @@ + + + + + + + + + prime Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Category: prime +

+
+
+
+
    +
  • + + Sat 09 January 2021 +
  • +
  • + + prime +
  • +
+
+
+

+ Introduction to Prime Numbers +

+
+ A prime is a positive integer p having exactly two positive divisors, namely 1 and p. An integer n is composite if n > 1 and n is not prime. (The number 1 is considered neither prime nor composite.) +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/category/report.html b/category/report.html new file mode 100644 index 0000000..c43cae6 --- /dev/null +++ b/category/report.html @@ -0,0 +1,111 @@ + + + + + + + + + report Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Category: report +

+
+
+
+
    +
  • + + Thu 19 August 2021 +
  • +
  • + + report +
  • +
+
+
+

+ Google Summer of Code 2021 +

+
+ This is the final report of my Google Summer of Code 2021 at The FOSSology Project. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/custom/css/Exodar-Outline.woff b/custom/css/Exodar-Outline.woff new file mode 100644 index 0000000..f9ea529 Binary files /dev/null and b/custom/css/Exodar-Outline.woff differ diff --git a/custom/css/Exodar-Outline.woff2 b/custom/css/Exodar-Outline.woff2 new file mode 100644 index 0000000..78c6301 Binary files /dev/null and b/custom/css/Exodar-Outline.woff2 differ diff --git a/custom/css/Exodar.woff b/custom/css/Exodar.woff new file mode 100644 index 0000000..ca745dc Binary files /dev/null and b/custom/css/Exodar.woff differ diff --git a/custom/css/Exodar.woff2 b/custom/css/Exodar.woff2 new file mode 100644 index 0000000..9e52a5f Binary files /dev/null and b/custom/css/Exodar.woff2 differ diff --git a/custom/css/space404.css b/custom/css/space404.css new file mode 100644 index 0000000..cc78267 --- /dev/null +++ b/custom/css/space404.css @@ -0,0 +1,372 @@ +/* + Malik Dellidj - @Dathink + + Solar System orbit animation true time scaled + + Revolution of planets in earth days (from Wikipedia) + Mercury : ~87,5 days + Venus : ~224,7 days + Earth : ~365,2563 days + + Moon : ~27,3216 days (around earth) + Mars : ~687 days (~1,8 year) + Jupiter : ~4 331 days (~12 years) + Saturn : ~10 747 days (~30 years) + Uranus : ~30 589 days (~84 years) + Neptune : ~59 802 days (~165 years) + Pluto : ~90 580 days (~248 years) +*/ +*, *:before, *:after { + padding: 0; + margin: 0; + box-sizing: border-box; + } + + html, body { + height: 100%; + width: 100%; + } + + body { + font: normal 1em/1.45em "Helvetica Neue", Helvetica, Arial, sans-serif; + -webkit-font-smoothing: antialiased; + color: #fff; + background: radial-gradient(ellipse at bottom, #1C2837 0%, #050608 100%); + background-attachment: fixed; + } + + @font-face { + font-family: ExodarOut; + src: url(Exodar-Outline.woff2), + url(Exodar-Outline.woff); + } + + @font-face { + font-family: Exodar; + src: url(Exodar.woff), + url(Exodar.woff2); + } + + h1 { + font-weight: 500; + font-size: 2.5em; + text-transform: uppercase; + font-family: ExodarOut; + line-height: 1.6em; + letter-spacing: 0.1em; + } + + h2 { + font-weight: 300; + font-size: 1.5em; + text-transform: lowercase; + font-family: Lato; + } + + a, a:visited { + text-decoration: none; + color: rgb(255, 255, 255); + opacity: 0.7; + } + a:hover, a:visited:hover { + opacity: 1; + } + a.icon, a:visited.icon { + margin-right: 2px; + padding: 3px; + } + + .description { + padding: 30px; + position: absolute; + top: 50%; + left: 25%; + width: 50%; + z-index: 999; + } + + + hr { + margin: 26px 0; + border: 0; + border-top: 1px solid white; + background: transparent; + opacity: 0.1; + } + + @keyframes ripple { + 0% { + box-shadow: 0 0 0 .7rem rgba(228, 5, 90, 0.2); + } + 100% { + box-shadow: 0 0 0 8rem rgba(255, 255, 255, 0); + } + } + + + .solar-syst { + margin: 0 auto; + width: 100%; + height: 100%; + position: fixed; + } + .solar-syst:after { + content: ""; + position: absolute; + height: 2px; + width: 2px; + top: -2px; + background: white; + box-shadow: 1054px 977px 0 0px rgba(255, 255, 255, 0.827) , 1504px 134px 0 0px rgba(255,255,255, 0.087) , 322px 1112px 0 0px rgba(255,255,255, 0.111) , 135px 576px 0 0px rgba(255,255,255, 0.935) , 683px 599px 0 0px rgba(255,255,255, 0.166) , 538px 960px 0 0px rgba(255,255,255, 0.734) , 1634px 226px 0 0px rgba(255,255,255, 0.648) , 102px 1515px 0 0px rgba(255,255,255, 0.13) , 442px 1095px 0 0px rgba(255,255,255, 0.171) , 351px 92px 0 0px rgba(255,255,255, 0.882) , 393px 1271px 0 0px rgba(255,255,255, 0.401) , 1061px 1498px 0 0px rgba(255,255,255, 0.019) , 1448px 1590px 0 0px rgba(255,255,255, 0.3) , 766px 701px 0 0px rgba(255,255,255, 0.618) , 509px 1462px 0 0px rgba(255,255,255, 0.104) , 1519px 1273px 0 0px rgba(255,255,255, 0.851) , 1560px 1738px 0 0px rgba(255,255,255, 0.967) , 1186px 1417px 0 0px rgba(255,255,255, 0.042) , 39px 481px 0 0px rgba(255,255,255, 0.212) , 279px 1627px 0 0px rgba(255,255,255, 0.431) , 1439px 1032px 0 0px rgba(255,255,255, 0.285) , 914px 112px 0 0px rgba(255,255,255, 0.786) , 1623px 944px 0 0px rgba(255,255,255, 0.251) , 1560px 16px 0 0px rgba(255,255,255, 0.077) , 1262px 1163px 0 0px rgba(255,255,255, 0.935) , 711px 1634px 0 0px rgba(255,255,255, 0.77) , 1169px 403px 0 0px rgba(255,255,255, 0.242) , 920px 1273px 0 0px rgba(255,255,255, 0.375) , 1630px 991px 0 0px rgba(255,255,255, 0.018) , 105px 1084px 0 0px rgba(255,255,255, 0.813) , 61px 1638px 0 0px rgba(255,255,255, 0.565) , 959px 90px 0 0px rgba(255,255,255, 0.787) , 380px 392px 0 0px rgba(255,255,255, 0.72) , 311px 18px 0 0px rgba(255,255,255, 0.887) , 1693px 1621px 0 0px rgba(255,255,255, 0.348) , 1454px 445px 0 0px rgba(255,255,255, 0.18) , 906px 789px 0 0px rgba(255,255,255, 0.348) , 812px 125px 0 0px rgba(255,255,255, 0.246) , 667px 1330px 0 0px rgba(255,255,255, 0.402) , 159px 689px 0 0px rgba(255,255,255, 0.816) , 1383px 1138px 0 0px rgba(255,255,255, 0.865) , 502px 517px 0 0px rgba(255,255,255, 0.945) , 1386px 1415px 0 0px rgba(255,255,255, 0.656) , 831px 1450px 0 0px rgba(255,255,255, 0.713) , 1622px 1203px 0 0px rgba(255,255,255, 0.352) , 1712px 1766px 0 0px rgba(255,255,255, 0.925) , 892px 451px 0 0px rgba(255,255,255, 0.03) , 120px 23px 0 0px rgba(255,255,255, 0.448) , 1696px 873px 0 0px rgba(255,255,255, 0.362) , 1063px 333px 0 0px rgba(255,255,255, 0.449) , 1750px 1603px 0 0px rgba(255,255,255, 0.531) , 434px 1741px 0 0px rgba(255,255,255, 0.373) , 641px 1506px 0 0px rgba(255,255,255, 0.995) , 1280px 397px 0 0px rgba(255,255,255, 0.567) , 1799px 1186px 0 0px rgba(255,255,255, 0.837) , 734px 1280px 0 0px rgba(255,255,255, 0.792) , 1749px 1107px 0 0px rgba(255,255,255, 0.03) , 591px 410px 0 0px rgba(255,255,255, 0.027) , 1301px 966px 0 0px rgba(255,255,255, 0.072) , 768px 789px 0 0px rgba(255,255,255, 0.816) , 1437px 1414px 0 0px rgba(255,255,255, 0.687) , 675px 1580px 0 0px rgba(255,255,255, 0.691) , 677px 723px 0 0px rgba(255,255,255, 0.808) , 1709px 440px 0 0px rgba(255,255,255, 0.925) , 419px 1085px 0 0px rgba(255,255,255, 0.995) , 874px 1342px 0 0px rgba(255,255,255, 0.59) , 1755px 1641px 0 0px rgba(255,255,255, 0.397) , 986px 638px 0 0px rgba(255,255,255, 0.731) , 946px 1025px 0 0px rgba(255,255,255, 0.183) , 1206px 762px 0 0px rgba(255,255,255, 0.736) , 1768px 516px 0 0px rgba(255,255,255, 0.654) , 1461px 1576px 0 0px rgba(255,255,255, 0.666) , 1728px 51px 0 0px rgba(255,255,255, 0.282) , 688px 1686px 0 0px rgba(255,255,255, 0.416) , 357px 525px 0 0px rgba(255,255,255, 0.174) , 78px 1463px 0 0px rgba(255,255,255, 0.783) , 1058px 1206px 0 0px rgba(255,255,255, 0.674) , 532px 1471px 0 0px rgba(255,255,255, 0.045) , 1156px 709px 0 0px rgba(255,255,255, 0.155) , 1156px 1238px 0 0px rgba(255,255,255, 0.904) , 1289px 1335px 0 0px rgba(255,255,255, 0.603) , 201px 1213px 0 0px rgba(255,255,255, 0.246) , 656px 1800px 0 0px rgba(255,255,255, 0.708) , 1303px 813px 0 0px rgba(255,255,255, 0.15) , 13px 1203px 0 0px rgba(255,255,255, 0.303) , 185px 947px 0 0px rgba(255,255,255, 0.877) , 677px 700px 0 0px rgba(255,255,255, 0.159) , 472px 437px 0 0px rgba(255,255,255, 0.855) , 827px 1315px 0 0px rgba(255,255,255, 0.537) , 603px 903px 0 0px rgba(255,255,255, 0.098) , 26px 1650px 0 0px rgba(255,255,255, 0.558) , 1123px 1528px 0 0px rgba(255,255,255, 0.599) , 189px 284px 0 0px rgba(255,255,255, 0.052) , 152px 1751px 0 0px rgba(255,255,255, 0.301) , 216px 1181px 0 0px rgba(255,255,255, 0.442) , 1527px 1553px 0 0px rgba(255,255,255, 0.627) , 862px 689px 0 0px rgba(255,255,255, 0.733) , 1661px 1555px 0 0px rgba(255,255,255, 0.434) , 1295px 1799px 0 0px rgba(255,255,255, 0.422) , 356px 724px 0 0px rgba(255,255,255, 0.097) , 1752px 952px 0 0px rgba(255,255,255, 0.955) , 77px 112px 0 0px rgba(255,255,255, 0.529) , 1442px 891px 0 0px rgba(255,255,255, 0.829) , 1002px 1050px 0 0px rgba(255,255,255, 0.637) , 685px 47px 0 0px rgba(255,255,255, 0.604) , 1174px 1264px 0 0px rgba(255,255,255, 0.788) , 379px 1757px 0 0px rgba(255,255,255, 0.542) , 1354px 1690px 0 0px rgba(255,255,255, 0.227) , 583px 881px 0 0px rgba(255,255,255, 0.185) , 1014px 229px 0 0px rgba(255,255,255, 0.784) , 497px 1581px 0 0px rgba(255,255,255, 0.69) , 156px 1288px 0 0px rgba(255,255,255, 0.157) , 1089px 662px 0 0px rgba(255,255,255, 0.856) , 1324px 425px 0 0px rgba(255,255,255, 0.088) , 635px 1316px 0 0px rgba(255,255,255, 0.164) , 1055px 719px 0 0px rgba(255,255,255, 0.285) , 1254px 472px 0 0px rgba(255,255,255, 0.323) , 376px 1073px 0 0px rgba(255,255,255, 0.738) , 581px 697px 0 0px rgba(255,255,255, 0.65) , 1285px 357px 0 0px rgba(255,255,255, 0.639) , 977px 67px 0 0px rgba(255,255,255, 0.385) , 594px 459px 0 0px rgba(255,255,255, 0.74) , 710px 1550px 0 0px rgba(255,255,255, 0.731) , 1738px 1299px 0 0px rgba(255,255,255, 0.516) , 294px 1068px 0 0px rgba(255,255,255, 0.086) , 376px 1060px 0 0px rgba(255,255,255, 0.217) , 360px 1380px 0 0px rgba(255,255,255, 0.265) , 324px 752px 0 0px rgba(255,255,255, 0.969) , 192px 263px 0 0px rgba(255,255,255, 0.484) , 691px 459px 0 0px rgba(255,255,255, 0.823) , 245px 725px 0 0px rgba(255,255,255, 0.529) , 913px 85px 0 0px rgba(255,255,255, 0.989) , 288px 1596px 0 0px rgba(255,255,255, 0.102) , 887px 399px 0 0px rgba(255,255,255, 0.195) , 1687px 5px 0 0px rgba(255,255,255, 0.131) , 489px 1012px 0 0px rgba(255,255,255, 0.621) , 731px 1113px 0 0px rgba(255,255,255, 0.018) , 395px 1492px 0 0px rgba(255,255,255, 0.482) , 555px 533px 0 0px rgba(255,255,255, 0.938) , 303px 1309px 0 0px rgba(255,255,255, 0.42) , 319px 1028px 0 0px rgba(255,255,255, 0.396) , 690px 1386px 0 0px rgba(255,255,255, 0.373) , 523px 782px 0 0px rgba(255,255,255, 0.47) , 267px 1626px 0 0px rgba(255,255,255, 0.312) , 175px 1177px 0 0px rgba(255,255,255, 0.68) , 1189px 507px 0 0px rgba(255,255,255, 0.529) , 1346px 88px 0 0px rgba(255,255,255, 0.355) , 60px 1473px 0 0px rgba(255,255,255, 0.649) , 259px 1189px 0 0px rgba(255,255,255, 0.561) , 532px 1592px 0 0px rgba(255,255,255, 0.462) , 780px 1542px 0 0px rgba(255,255,255, 0.805) , 864px 1589px 0 0px rgba(255,255,255, 0.085) , 1427px 320px 0 0px rgba(255,255,255, 0.421) , 1036px 1785px 0 0px rgba(255,255,255, 0.682) , 1569px 208px 0 0px rgba(255,255,255, 0.024) , 1011px 449px 0 0px rgba(255,255,255, 0.477) , 1776px 415px 0 0px rgba(255,255,255, 0.989) , 473px 91px 0 0px rgba(255,255,255, 0.251) , 1176px 1357px 0 0px rgba(255,255,255, 0.753) , 1578px 870px 0 0px rgba(255,255,255, 0.149) , 1065px 1654px 0 0px rgba(255,255,255, 0.525) , 113px 484px 0 0px rgba(255,255,255, 0.102) , 504px 1590px 0 0px rgba(255,255,255, 0.447) , 445px 991px 0 0px rgba(255,255,255, 0.289) , 282px 1424px 0 0px rgba(255,255,255, 0.715) , 173px 1709px 0 0px rgba(255,255,255, 0.975) , 1175px 15px 0 0px rgba(255,255,255, 0.395) , 1790px 1040px 0 0px rgba(255,255,255, 0.694) , 1180px 557px 0 0px rgba(255,255,255, 0.525) , 1615px 21px 0 0px rgba(255,255,255, 0.129) , 1636px 56px 0 0px rgba(255,255,255, 0.179) , 224px 692px 0 0px rgba(255,255,255, 0.281) , 648px 1671px 0 0px rgba(255,255,255, 0.011) , 1603px 386px 0 0px rgba(255,255,255, 0.868) , 1723px 7px 0 0px rgba(255,255,255, 0.342) , 878px 1198px 0 0px rgba(255,255,255, 0.086) , 1043px 997px 0 0px rgba(255,255,255, 0.479) , 1702px 968px 0 0px rgba(255,255,255, 0.358) , 999px 566px 0 0px rgba(255,255,255, 0.647) , 26px 1436px 0 0px rgba(255,255,255, 0.343) , 91px 1638px 0 0px rgba(255,255,255, 0.943) , 1625px 270px 0 0px rgba(255,255,255, 0.251) , 76px 837px 0 0px rgba(255,255,255, 0.691) , 1588px 387px 0 0px rgba(255,255,255, 0.719) , 902px 374px 0 0px rgba(255,255,255, 0.629) , 1162px 1702px 0 0px rgba(255,255,255, 0.887) , 83px 628px 0 0px rgba(255,255,255, 0.619) , 1382px 1013px 0 0px rgba(255,255,255, 0.818) , 1161px 672px 0 0px rgba(255,255,255, 0.099) , 647px 1134px 0 0px rgba(255,255,255, 0.979) , 173px 843px 0 0px rgba(255,255,255, 0.02) , 892px 1277px 0 0px rgba(255,255,255, 0.977) , 121px 642px 0 0px rgba(255,255,255, 0.227) , 731px 1204px 0 0px rgba(255,255,255, 0.047) , 957px 1419px 0 0px rgba(255,255,255, 0.797) , 1326px 1715px 0 0px rgba(255,255,255, 0.802) , 1356px 546px 0 0px rgba(255,255,255, 0.5) , 1403px 380px 0 0px rgba(255,255,255, 0.608) , 85px 721px 0 0px rgba(255,255,255, 0.124) , 761px 292px 0 0px rgba(255,255,255, 0.249) , 281px 693px 0 0px rgba(255,255,255, 0.666) , 114px 1720px 0 0px rgba(255,255,255, 0.194) , 793px 1292px 0 0px rgba(255,255,255, 0.028) , 257px 1148px 0 0px rgba(255,255,255, 0.829) , 571px 131px 0 0px rgba(255,255,255, 0.119) , 1173px 1613px 0 0px rgba(255,255,255, 0.943) , 495px 664px 0 0px rgba(255,255,255, 0.629) , 583px 40px 0 0px rgba(255,255,255, 0.571) , 1093px 984px 0 0px rgba(255,255,255, 0.936) , 1394px 1553px 0 0px rgba(255,255,255, 0.512) , 1653px 55px 0 0px rgba(255,255,255, 0.081) , 1280px 1420px 0 0px rgba(255,255,255, 0.391) , 4px 1214px 0 0px rgba(255,255,255, 0.832) , 1242px 395px 0 0px rgba(255,255,255, 0.508) , 432px 1282px 0 0px rgba(255,255,255, 0.907) , 1039px 1800px 0 0px rgba(255,255,255, 0.409) , 802px 504px 0 0px rgba(255,255,255, 0.53) , 1308px 191px 0 0px rgba(255,255,255, 0.07) , 1276px 216px 0 0px rgba(255,255,255, 0.824) , 882px 726px 0 0px rgba(255,255,255, 0.95) , 1293px 1525px 0 0px rgba(255,255,255, 0.942) , 75px 1684px 0 0px rgba(255,255,255, 0.932) , 191px 685px 0 0px rgba(255,255,255, 0.817) , 1462px 867px 0 0px rgba(255,255,255, 0.974) , 195px 364px 0 0px rgba(255,255,255, 0.776) , 688px 1625px 0 0px rgba(255,255,255, 0.751) , 926px 926px 0 0px rgba(255,255,255, 0.801) , 63px 741px 0 0px rgba(255,255,255, 0.301) , 22px 1656px 0 0px rgba(255,255,255, 0.42) , 1573px 1596px 0 0px rgba(255,255,255, 0.724) , 664px 128px 0 0px rgba(255,255,255, 0.221) , 1125px 290px 0 0px rgba(255,255,255, 0.974) , 1176px 1653px 0 0px rgba(255,255,255, 0.587) , 573px 637px 0 0px rgba(255,255,255, 0.145) , 187px 1113px 0 0px rgba(255,255,255, 0.377) , 1763px 346px 0 0px rgba(255,255,255, 0.355) , 1168px 397px 0 0px rgba(255,255,255, 0.526) , 287px 1118px 0 0px rgba(255,255,255, 0.56) , 1151px 1064px 0 0px rgba(255,255,255, 0.936) , 169px 627px 0 0px rgba(255,255,255, 0.62) , 153px 1655px 0 0px rgba(255,255,255, 0.057) , 1423px 859px 0 0px rgba(255,255,255, 0.639) , 404px 76px 0 0px rgba(255,255,255, 0.8) , 1370px 1704px 0 0px rgba(255,255,255, 0.972) , 1747px 238px 0 0px rgba(255,255,255, 0.876) , 1536px 231px 0 0px rgba(255,255,255, 0.497) , 881px 918px 0 0px rgba(255,255,255, 0.153) , 431px 1283px 0 0px rgba(255,255,255, 0.738) , 917px 364px 0 0px rgba(255,255,255, 0.434) , 1753px 596px 0 0px rgba(255,255,255, 0.987) , 926px 1647px 0 0px rgba(255,255,255, 0.446) , 1293px 1275px 0 0px rgba(255,255,255, 0.916) , 641px 312px 0 0px rgba(255,255,255, 0.041) , 851px 1604px 0 0px rgba(255,255,255, 0.394) , 412px 1528px 0 0px rgba(255,255,255, 0.069) , 1134px 777px 0 0px rgba(255,255,255, 0.273) , 141px 1195px 0 0px rgba(255,255,255, 0.128) , 436px 1102px 0 0px rgba(255,255,255, 0.388) , 862px 1399px 0 0px rgba(255,255,255, 0.717) , 476px 1482px 0 0px rgba(255,255,255, 0.562) , 1426px 1291px 0 0px rgba(255,255,255, 0.058) , 1454px 1231px 0 0px rgba(255,255,255, 0.76) , 852px 1715px 0 0px rgba(255,255,255, 0.382) , 1800px 989px 0 0px rgba(255,255,255, 0.806) , 379px 1718px 0 0px rgba(255,255,255, 0.798) , 1562px 812px 0 0px rgba(255,255,255, 0.192) , 1333px 1426px 0 0px rgba(255,255,255, 0.918) , 519px 1731px 0 0px rgba(255,255,255, 0.037) , 129px 733px 0 0px rgba(255,255,255, 0.879) , 1389px 607px 0 0px rgba(255,255,255, 0.882) , 342px 839px 0 0px rgba(255,255,255, 0.347) , 1225px 1470px 0 0px rgba(255,255,255, 0.59) , 1212px 367px 0 0px rgba(255,255,255, 0.098) , 1234px 860px 0 0px rgba(255,255,255, 0.398) , 611px 1733px 0 0px rgba(255,255,255, 0.676) , 303px 474px 0 0px rgba(255,255,255, 0.268) , 403px 1353px 0 0px rgba(255,255,255, 0.794) , 494px 1355px 0 0px rgba(255,255,255, 0.037) , 27px 732px 0 0px rgba(255,255,255, 0.156) , 1532px 761px 0 0px rgba(255,255,255, 0.632) , 837px 730px 0 0px rgba(255,255,255, 0.328) , 365px 996px 0 0px rgba(255,255,255, 0.854) , 1398px 191px 0 0px rgba(255,255,255, 0.836) , 95px 33px 0 0px rgba(255,255,255, 0.749) , 112px 1380px 0 0px rgba(255,255,255, 0.505) , 50px 39px 0 0px rgba(255,255,255, 0.568) , 910px 1693px 0 0px rgba(255,255,255, 0.397) , 1003px 1040px 0 0px rgba(255,255,255, 0.55) , 1615px 1383px 0 0px rgba(255,255,255, 0.965) , 1406px 1440px 0 0px rgba(255,255,255, 0.889) , 1623px 1700px 0 0px rgba(255,255,255, 0.589) , 1379px 1411px 0 0px rgba(255,255,255, 0.987) , 99px 1633px 0 0px rgba(255,255,255, 0.693) , 1275px 1613px 0 0px rgba(255,255,255, 0.378) , 179px 365px 0 0px rgba(255,255,255, 0.939) , 428px 695px 0 0px rgba(255,255,255, 0.044) , 1517px 518px 0 0px rgba(255,255,255, 0.029) , 563px 129px 0 0px rgba(255,255,255, 0.111) , 1293px 368px 0 0px rgba(255,255,255, 0.212) , 1234px 527px 0 0px rgba(255,255,255, 0.135) , 1327px 910px 0 0px rgba(255,255,255, 0.153) , 1553px 1413px 0 0px rgba(255,255,255, 0.249) , 88px 93px 0 0px rgba(255,255,255, 0.875) , 244px 1135px 0 0px rgba(255,255,255, 0.259) , 1131px 617px 0 0px rgba(255,255,255, 0.438) , 1023px 1042px 0 0px rgba(255,255,255, 0.364) , 1251px 1707px 0 0px rgba(255,255,255, 0.662) , 22px 868px 0 0px rgba(255,255,255, 0.583) , 748px 677px 0 0px rgba(255,255,255, 0.521) , 1066px 750px 0 0px rgba(255,255,255, 0.637) , 977px 339px 0 0px rgba(255,255,255, 0.022) , 1129px 1610px 0 0px rgba(255,255,255, 0.277) , 439px 1304px 0 0px rgba(255,255,255, 0.999) , 285px 873px 0 0px rgba(255,255,255, 0.95) , 289px 611px 0 0px rgba(255,255,255, 0.925) , 1534px 1707px 0 0px rgba(255,255,255, 0.976) , 62px 1607px 0 0px rgba(255,255,255, 0.616) , 135px 336px 0 0px rgba(255,255,255, 0.048) , 1436px 999px 0 0px rgba(255,255,255, 0.948) , 784px 1085px 0 0px rgba(255,255,255, 0.943) , 1419px 1255px 0 0px rgba(255,255,255, 0.921) , 21px 722px 0 0px rgba(255,255,255, 0.358) , 1099px 1783px 0 0px rgba(255,255,255, 0.305) , 1316px 1362px 0 0px rgba(255,255,255, 0.444) , 1155px 927px 0 0px rgba(255,255,255, 0.55) , 266px 1613px 0 0px rgba(255,255,255, 0.518) , 1529px 928px 0 0px rgba(255,255,255, 0.838) , 30px 538px 0 0px rgba(255,255,255, 0.805) , 771px 1574px 0 0px rgba(255,255,255, 0.701) , 134px 1138px 0 0px rgba(255,255,255, 0.786) , 1488px 1393px 0 0px rgba(255,255,255, 0.528) , 1761px 1018px 0 0px rgba(255,255,255, 0.512) , 467px 1719px 0 0px rgba(255,255,255, 0.761) , 708px 372px 0 0px rgba(255,255,255, 0.543) , 884px 1078px 0 0px rgba(255,255,255, 0.208) , 1176px 615px 0 0px rgba(255,255,255, 0.759) , 436px 1079px 0 0px rgba(255,255,255, 0.652) , 1201px 1248px 0 0px rgba(255,255,255, 0.147) , 1314px 687px 0 0px rgba(255,255,255, 0.062) , 1591px 307px 0 0px rgba(255,255,255, 0.365) , 841px 925px 0 0px rgba(255,255,255, 0.221) , 892px 13px 0 0px rgba(255,255,255, 0.905) , 812px 354px 0 0px rgba(255,255,255, 0.56) , 1165px 489px 0 0px rgba(255,255,255, 0.306) , 757px 1563px 0 0px rgba(255,255,255, 0.411) , 16px 214px 0 0px rgba(255,255,255, 0.103) , 543px 331px 0 0px rgba(255,255,255, 0.901) , 324px 841px 0 0px rgba(255,255,255, 0.62) , 1383px 1566px 0 0px rgba(255,255,255, 0.617) , 825px 487px 0 0px rgba(255,255,255, 0.844) , 1668px 133px 0 0px rgba(255,255,255, 0.941) , 1518px 448px 0 0px rgba(255,255,255, 0.083) , 502px 1266px 0 0px rgba(255,255,255, 0.213) , 642px 332px 0 0px rgba(255,255,255, 0.357) , 1752px 770px 0 0px rgba(255,255,255, 0.774) , 1405px 736px 0 0px rgba(255,255,255, 0.753) , 1599px 1345px 0 0px rgba(255,255,255, 0.626) , 1344px 1323px 0 0px rgba(255,255,255, 0.632) , 676px 1637px 0 0px rgba(255,255,255, 0.377) , 1455px 1662px 0 0px rgba(255,255,255, 0.018) , 653px 645px 0 0px rgba(255,255,255, 0.357) , 1692px 968px 0 0px rgba(255,255,255, 0.101) , 854px 1166px 0 0px rgba(255,255,255, 0.706) , 1364px 401px 0 0px rgba(255,255,255, 0.039) , 458px 738px 0 0px rgba(255,255,255, 0.747) , 145px 877px 0 0px rgba(255,255,255, 0.756) , 1399px 727px 0 0px rgba(255,255,255, 0.607) , 1112px 199px 0 0px rgba(255,255,255, 0.06) , 557px 1174px 0 0px rgba(255,255,255, 0.833) , 154px 1545px 0 0px rgba(255,255,255, 0.507) , 140px 705px 0 0px rgba(255,255,255, 0.914) , 117px 1345px 0 0px rgba(255,255,255, 0.946) , 1428px 948px 0 0px rgba(255,255,255, 0.739) , 1603px 1636px 0 0px rgba(255,255,255, 0.222) , 765px 111px 0 0px rgba(255,255,255, 0.14) , 1584px 991px 0 0px rgba(255,255,255, 0.15) , 271px 942px 0 0px rgba(255,255,255, 0.887) , 851px 1206px 0 0px rgba(255,255,255, 0.064) , 1749px 738px 0 0px rgba(255,255,255, 0.487) , 1281px 156px 0 0px rgba(255,255,255, 0.21) , 1350px 1478px 0 0px rgba(255,255,255, 0.811) , 379px 1770px 0 0px rgba(255,255,255, 0.625) , 696px 697px 0 0px rgba(255,255,255, 0.549) , 837px 1382px 0 0px rgba(255,255,255, 0.149) , 221px 686px 0 0px rgba(255,255,255, 0.818) , 1514px 1518px 0 0px rgba(255,255,255, 0.215) , 404px 1222px 0 0px rgba(255,255,255, 0.432) , 1321px 155px 0 0px rgba(255,255,255, 0.332) , 1755px 1573px 0 0px rgba(255,255,255, 0.738) , 1250px 247px 0 0px rgba(255,255,255, 0.4) , 252px 1118px 0 0px rgba(255,255,255, 0.928) , 989px 1641px 0 0px rgba(255,255,255, 0.993) , 228px 173px 0 0px rgba(255,255,255, 0.79) , 322px 791px 0 0px rgba(255,255,255, 0.974) , 461px 1101px 0 0px rgba(255,255,255, 0.637) , 1367px 1277px 0 0px rgba(255,255,255, 0.343) , 1759px 1630px 0 0px rgba(255,255,255, 0.876) , 1644px 473px 0 0px rgba(255,255,255, 0.673) , 416px 1266px 0 0px rgba(255,255,255, 0.872) , 1175px 673px 0 0px rgba(255,255,255, 0.824) , 1231px 1499px 0 0px rgba(255,255,255, 0.661) , 1061px 129px 0 0px rgba(255,255,255, 0.874) , 322px 717px 0 0px rgba(255,255,255, 0.392) , 1207px 1462px 0 0px rgba(255,255,255, 0.279) , 249px 849px 0 0px rgba(255,255,255, 0.362) , 1170px 1673px 0 0px rgba(255,255,255, 0.742) , 1316px 1429px 0 0px rgba(255,255,255, 0.453) , 170px 1656px 0 0px rgba(255,255,255, 0.092) , 1522px 1617px 0 0px rgba(255,255,255, 0.67) , 1771px 1127px 0 0px rgba(255,255,255, 0.583) , 486px 1422px 0 0px rgba(255,255,255, 0.543) , 1613px 465px 0 0px rgba(255,255,255, 0.945) , 648px 1529px 0 0px rgba(255,255,255, 0.573) , 418px 250px 0 0px rgba(255,255,255, 0.242) , 504px 754px 0 0px rgba(255,255,255, 0.985) , 1757px 1047px 0 0px rgba(255,255,255, 0.358) , 104px 326px 0 0px rgba(255,255,255, 0.418) , 777px 16px 0 0px rgba(255,255,255, 0.691) , 904px 1728px 0 0px rgba(255,255,255, 0.857) , 1763px 349px 0 0px rgba(255,255,255, 0.058) , 1604px 1276px 0 0px rgba(255,255,255, 0.916) , 243px 1558px 0 0px rgba(255,255,255, 0.165) , 1346px 129px 0 0px rgba(255,255,255, 0.623) , 1509px 511px 0 0px rgba(255,255,255, 0.395) , 821px 736px 0 0px rgba(255,255,255, 0.618) , 1790px 1256px 0 0px rgba(255,255,255, 0.894) , 914px 359px 0 0px rgba(255,255,255, 0.261) , 57px 1232px 0 0px rgba(255,255,255, 0.326) , 1700px 1652px 0 0px rgba(255,255,255, 0.567) , 1183px 818px 0 0px rgba(255,255,255, 0.3) , 962px 1536px 0 0px rgba(255,255,255, 0.034) , 1392px 557px 0 0px rgba(255,255,255, 0.707) , 1161px 930px 0 0px rgba(255,255,255, 0.356) , 13px 945px 0 0px rgba(255,255,255, 0.306) , 1042px 176px 0 0px rgba(255,255,255, 0.647) , 611px 289px 0 0px rgba(255,255,255, 0.303) , 1745px 857px 0 0px rgba(255,255,255, 0.729) , 504px 1411px 0 0px rgba(255,255,255, 0.953) , 1535px 385px 0 0px rgba(255,255,255, 0.441) , 1203px 782px 0 0px rgba(255,255,255, 0.785) , 420px 15px 0 0px rgba(255,255,255, 0.13) , 290px 485px 0 0px rgba(255,255,255, 0.1) , 583px 776px 0 0px rgba(255,255,255, 0.777) , 1223px 1429px 0 0px rgba(255,255,255, 0.299) , 1694px 1184px 0 0px rgba(255,255,255, 0.987) , 1716px 1158px 0 0px rgba(255,255,255, 0.985) , 326px 1437px 0 0px rgba(255,255,255, 0.908) , 1719px 1067px 0 0px rgba(255,255,255, 0.094) , 721px 1146px 0 0px rgba(255,255,255, 0.757) , 1559px 49px 0 0px rgba(255,255,255, 0.68) , 599px 188px 0 0px rgba(255,255,255, 0.771) , 1350px 1455px 0 0px rgba(255,255,255, 0.675) , 545px 960px 0 0px rgba(255,255,255, 0.637) , 1055px 1671px 0 0px rgba(255,255,255, 0.419) , 543px 164px 0 0px rgba(255,255,255, 0.9) , 394px 711px 0 0px rgba(255,255,255, 0.54) , 970px 517px 0 0px rgba(255,255,255, 0.619) , 992px 1008px 0 0px rgba(255,255,255, 0.151) , 598px 480px 0 0px rgba(255,255,255, 0.112) , 336px 256px 0 0px rgba(255,255,255, 0.696) , 65px 906px 0 0px rgba(255,255,255, 0.987) , 225px 1646px 0 0px rgba(255,255,255, 0.718) , 1138px 1308px 0 0px rgba(255,255,255, 0.972) , 913px 711px 0 0px rgba(255,255,255, 0.184) , 77px 1233px 0 0px rgba(255,255,255, 0.387) , 1794px 1180px 0 0px rgba(255,255,255, 0.916) , 1034px 188px 0 0px rgba(255,255,255, 0.528) , 1374px 800px 0 0px rgba(255,255,255, 0.86) , 1400px 455px 0 0px rgba(255,255,255, 0.729) , 453px 272px 0 0px rgba(255,255,255, 0.146) , 1640px 838px 0 0px rgba(255,255,255, 0.463) , 786px 1353px 0 0px rgba(255,255,255, 0.955) , 446px 1572px 0 0px rgba(255,255,255, 0.062) , 1286px 102px 0 0px rgba(255,255,255, 0.72) , 748px 1786px 0 0px rgba(255,255,255, 0.935) , 39px 184px 0 0px rgba(255,255,255, 0.445) , 1398px 1387px 0 0px rgba(255,255,255, 0.08) , 1800px 787px 0 0px rgba(255,255,255, 0.03) , 651px 779px 0 0px rgba(255,255,255, 0.933) , 1292px 946px 0 0px rgba(255,255,255, 0.735) , 719px 1504px 0 0px rgba(255,255,255, 0.743) , 1460px 437px 0 0px rgba(255,255,255, 0.485) , 1332px 587px 0 0px rgba(255,255,255, 0.403) , 1299px 1782px 0 0px rgba(255,255,255, 0.618) , 1159px 1541px 0 0px rgba(255,255,255, 0.145) , 1048px 244px 0 0px rgba(255,255,255, 0.795) , 931px 324px 0 0px rgba(255,255,255, 0.236) , 798px 1276px 0 0px rgba(255,255,255, 0.306) , 196px 923px 0 0px rgba(255,255,255, 0.309) , 42px 1161px 0 0px rgba(255,255,255, 0.624) , 1298px 1232px 0 0px rgba(255,255,255, 0.151) , 1325px 1771px 0 0px rgba(255,255,255, 0.944) , 69px 1684px 0 0px rgba(255,255,255, 0.697) , 559px 1369px 0 0px rgba(255,255,255, 0.88) , 919px 721px 0 0px rgba(255,255,255, 0.407) , 1079px 583px 0 0px rgba(255,255,255, 0.858) , 267px 818px 0 0px rgba(255,255,255, 0.067) , 1508px 1178px 0 0px rgba(255,255,255, 0.66) , 1630px 883px 0 0px rgba(255,255,255, 0.075) , 498px 990px 0 0px rgba(255,255,255, 0.043); + border-radius: 100px; + z-index: -5; + } + .solar-syst div { + border-radius: 1000px; + top: 50%; + left: 50%; + position: absolute; + z-index: 999; + } + .solar-syst div:not(.sun) { + border: 1px solid rgba(102, 166, 229, 0.12); + } + .solar-syst div:not(.sun):before { + left: 50%; + border-radius: 100px; + content: ""; + position: absolute; + } + .solar-syst div:not(.asteroids-belt):before { + box-shadow: inset 0 6px 0 -2px rgba(0, 0, 0, 0.25); + } + + .sun { + background: radial-gradient(ellipse at center, #ffd000 1%, #f9b700 39%, #f9b700 39%, #e06317 100%); + height: 40px; + width: 40px; + margin-top: -20px; + margin-left: -20px; + background-clip: padding-box; + border: 0 !important; + background-position: -28px -103px; + background-size: 175%; + box-shadow: 0 0 10px 2px rgba(255, 107, 0, 0.4), 0 0 22px 11px rgba(255, 203, 0, 0.13); + } + + .mercury { + height: 70px; + width: 70px; + margin-top: -35px; + margin-left: -35px; + -webkit-animation: orb 7.1867343561s linear infinite; + animation: orb 7.1867343561s linear infinite; + } + .mercury:before { + height: 4px; + width: 4px; + background: #9f5e26; + margin-top: -2px; + margin-left: -2px; + } + + .venus { + height: 100px; + width: 100px; + margin-top: -50px; + margin-left: -50px; + -webkit-animation: orb 18.4555338265s linear infinite; + animation: orb 18.4555338265s linear infinite; + } + .venus:before { + height: 8px; + width: 8px; + background: #BEB768; + margin-top: -4px; + margin-left: -4px; + } + + .earth { + height: 145px; + width: 145px; + margin-top: -72.5px; + margin-left: -72.5px; + -webkit-animation: orb 30s linear infinite; + animation: orb 30s linear infinite; + } + .earth:before { + height: 6px; + width: 6px; + background: #11abe9; + margin-top: -3px; + margin-left: -3px; + } + .earth:after { + position: absolute; + content: ""; + height: 18px; + width: 18px; + left: 50%; + top: 0px; + margin-left: -9px; + margin-top: -9px; + border-radius: 100px; + box-shadow: 0 -10px 0 -8px grey; + -webkit-animation: orb 2.2440352158s linear infinite; + animation: orb 2.2440352158s linear infinite; + animation: ripple 5s linear infinite; + } + + .mars { + height: 190px; + width: 190px; + margin-top: -95px; + margin-left: -95px; + -webkit-animation: orb 56.4261314589s linear infinite; + animation: orb 56.4261314589s linear infinite; + } + .mars:before { + height: 6px; + width: 6px; + background: #cf3921; + margin-top: -3px; + margin-left: -3px; + } + + .jupiter { + height: 340px; + width: 340px; + margin-top: -170px; + margin-left: -170px; + -webkit-animation: orb 355.7228171013s linear infinite; + animation: orb 355.7228171013s linear infinite; + } + .jupiter:before { + height: 18px; + width: 18px; + background: #c76e2a; + margin-top: -9px; + margin-left: -9px; + } + + .saturn { + height: 440px; + width: 440px; + margin-top: -220px; + margin-left: -220px; + -webkit-animation: orb 882.6952471456s linear infinite; + animation: orb 882.6952471456s linear infinite; + } + .saturn:before { + height: 12px; + width: 12px; + background: #e7c194; + margin-top: -6px; + margin-left: -6px; + } + .saturn:after { + position: absolute; + content: ""; + height: 2.34%; + width: 4.676%; + left: 50%; + top: 0px; + transform: rotateZ(-52deg); + margin-left: -2.3%; + margin-top: -1.2%; + border-radius: 50% 50% 50% 50%; + box-shadow: 0 1px 0 1px #987641, 3px 1px 0 #987641, -3px 1px 0 #987641; + -webkit-animation: orb 882.6952471456s linear infinite; + animation: orb 882.6952471456s linear infinite; + animation-direction: reverse; + transform-origin: 52% 60%; + } + + .uranus { + height: 520px; + width: 520px; + margin-top: -260px; + margin-left: -260px; + -webkit-animation: orb 2512.4001967933s linear infinite; + animation: orb 2512.4001967933s linear infinite; + } + .uranus:before { + height: 10px; + width: 10px; + background: #b5e3e3; + margin-top: -5px; + margin-left: -5px; + } + + .neptune { + height: 630px; + width: 630px; + margin-top: -315px; + margin-left: -315px; + -webkit-animation: orb 4911.7838624549s linear infinite; + animation: orb 4911.7838624549s linear infinite; + } + .neptune:before { + height: 10px; + width: 10px; + background: #175e9e; + margin-top: -5px; + margin-left: -5px; + } + + .asteroids-belt { + opacity: 0.7; + border-color: transparent !important; + height: 300px; + width: 300px; + margin-top: -150px; + margin-left: -150px; + -webkit-animation: orb 179.9558282773s linear infinite; + animation: orb 179.9558282773s linear infinite; + overflow: hidden; + } + .asteroids-belt:before { + top: 50%; + height: 210px; + width: 210px; + margin-left: -105px; + margin-top: -105px; + background: transparent; + border-radius: 140px !important; + box-shadow: 98px 4px 0 -104px rgba(255, 255, 255, 0.818) , -135px -118px 0 -104px rgba(255,255,255, 0.28) , 105px -20px 0 -104px rgba(255,255,255, 0.842) , -65px 1px 0 -104px rgba(255,255,255, 0.096) , 55px -103px 0 -104px rgba(255,255,255, 0.384) , 2px -65px 0 -104px rgba(255,255,255, 0.031) , 0px 107px 0 -104px rgba(255,255,255, 0.27) , 65px 136px 0 -104px rgba(255,255,255, 0.805) , 44px -127px 0 -104px rgba(255,255,255, 0.804) , -28px -45px 0 -104px rgba(255,255,255, 0.452) , -96px 111px 0 -104px rgba(255,255,255, 0.4) , 11px -54px 0 -104px rgba(255,255,255, 0.705) , -62px 103px 0 -104px rgba(255,255,255, 0.334) , 24px 86px 0 -104px rgba(255,255,255, 0.74) , -116px -13px 0 -104px rgba(255,255,255, 0.037) , -138px 1px 0 -104px rgba(255,255,255, 0.341) , 13px 77px 0 -104px rgba(255,255,255, 0.625) , 131px 45px 0 -104px rgba(255,255,255, 0.467) , -140px -45px 0 -104px rgba(255,255,255, 0.41) , -84px -103px 0 -104px rgba(255,255,255, 0.924) , 124px 68px 0 -104px rgba(255,255,255, 0.544) , 50px 58px 0 -104px rgba(255,255,255, 0.264) , -64px -141px 0 -104px rgba(255,255,255, 0.385) , -93px 81px 0 -104px rgba(255,255,255, 0.683) , 81px -55px 0 -104px rgba(255,255,255, 0.827) , 59px 70px 0 -104px rgba(255,255,255, 0.058) , 121px -28px 0 -104px rgba(255,255,255, 0.974) , 82px 55px 0 -104px rgba(255,255,255, 0.801) , 86px -35px 0 -104px rgba(255,255,255, 0.249) , -83px 62px 0 -104px rgba(255,255,255, 0.953) , -32px 80px 0 -104px rgba(255,255,255, 0.682) , -84px -56px 0 -104px rgba(255,255,255, 0.226) , -66px -27px 0 -104px rgba(255,255,255, 0.568) , 57px 71px 0 -104px rgba(255,255,255, 0.475) , 35px 48px 0 -104px rgba(255,255,255, 0.754) , -26px -54px 0 -104px rgba(255,255,255, 0.834) , -103px 45px 0 -104px rgba(255,255,255, 0.714) , 120px 31px 0 -104px rgba(255,255,255, 0.524) , 98px -116px 0 -104px rgba(255,255,255, 0.338) , 61px 98px 0 -104px rgba(255,255,255, 0.841) , 113px 145px 0 -104px rgba(255,255,255, 0.674) , -120px -50px 0 -104px rgba(255,255,255, 0.334) , 126px -117px 0 -104px rgba(255,255,255, 0.667) , -110px 49px 0 -104px rgba(255,255,255, 0.264) , 52px -143px 0 -104px rgba(255,255,255, 0.389) , -74px 68px 0 -104px rgba(255,255,255, 0.515) , -109px 26px 0 -104px rgba(255,255,255, 0.732) , -70px -27px 0 -104px rgba(255,255,255, 0.594) , 7px -79px 0 -104px rgba(255,255,255, 0.019) , -78px -8px 0 -104px rgba(255,255,255, 0.1) , 89px 56px 0 -104px rgba(255,255,255, 0.216) , -21px -5px 0 -104px rgba(255,255,255, 0.806) , 85px 81px 0 -104px rgba(255,255,255, 0.215) , -132px -39px 0 -104px rgba(255,255,255, 0.813) , -4px 42px 0 -104px rgba(255,255,255, 0.188) , -9px -76px 0 -104px rgba(255,255,255, 0.532) , 51px -74px 0 -104px rgba(255,255,255, 0.778) , -94px 67px 0 -104px rgba(255,255,255, 0.384) , 2px -142px 0 -104px rgba(255,255,255, 0.347) , -69px -68px 0 -104px rgba(255,255,255, 0.592) , 56px -136px 0 -104px rgba(255,255,255, 0.129) , 141px 87px 0 -104px rgba(255,255,255, 0.994) , 130px -126px 0 -104px rgba(255,255,255, 0.861) , 13px -72px 0 -104px rgba(255,255,255, 0.268) , -111px 37px 0 -104px rgba(255,255,255, 0.424) , 142px -105px 0 -104px rgba(255,255,255, 0.537) , -61px 125px 0 -104px rgba(255,255,255, 0.931) , 81px 42px 0 -104px rgba(255,255,255, 0.877) , -131px -14px 0 -104px rgba(255,255,255, 0.593) , 35px -46px 0 -104px rgba(255,255,255, 0.682) , -87px 47px 0 -104px rgba(255,255,255, 0.938) , -132px -71px 0 -104px rgba(255,255,255, 0.484) , 20px 84px 0 -104px rgba(255,255,255, 0.878) , -135px 95px 0 -104px rgba(255,255,255, 0.478) , -76px -53px 0 -104px rgba(255,255,255, 0.276) , -52px 30px 0 -104px rgba(255,255,255, 0.664) , 132px 144px 0 -104px rgba(255,255,255, 0.427) , -56px 29px 0 -104px rgba(255,255,255, 0.202) , -52px -55px 0 -104px rgba(255,255,255, 0.448) , 99px 25px 0 -104px rgba(255,255,255, 0.615) , -54px 58px 0 -104px rgba(255,255,255, 0.458) , -22px 112px 0 -104px rgba(255,255,255, 0.444) , -105px 81px 0 -104px rgba(255,255,255, 0.497) , 66px 30px 0 -104px rgba(255,255,255, 0.26) , 119px -121px 0 -104px rgba(255,255,255, 0.79) , -100px 124px 0 -104px rgba(255,255,255, 0.264) , -16px 89px 0 -104px rgba(255,255,255, 0.758) , 61px -135px 0 -104px rgba(255,255,255, 0.866) , 136px -44px 0 -104px rgba(255,255,255, 0.363) , 132px 118px 0 -104px rgba(255,255,255, 0.154) , 71px 84px 0 -104px rgba(255,255,255, 0.584) , 73px 85px 0 -104px rgba(255,255,255, 0.345) , -106px -115px 0 -104px rgba(255,255,255, 0.979) , 139px -110px 0 -104px rgba(255,255,255, 0.472) , 26px -46px 0 -104px rgba(255,255,255, 0.775) , -127px -54px 0 -104px rgba(255,255,255, 0.692) , 72px 56px 0 -104px rgba(255,255,255, 0.961) , 69px 141px 0 -104px rgba(255,255,255, 0.171) , 25px -27px 0 -104px rgba(255,255,255, 0.407) , 18px -10px 0 -104px rgba(255,255,255, 0.915) , 3px -137px 0 -104px rgba(255,255,255, 0.285) , 143px 29px 0 -104px rgba(255,255,255, 0.856) , 89px 114px 0 -104px rgba(255,255,255, 0.832) , 39px -56px 0 -104px rgba(255,255,255, 0.697) , 104px -71px 0 -104px rgba(255,255,255, 0.252) , 98px -136px 0 -104px rgba(255,255,255, 0.603) , 11px -102px 0 -104px rgba(255,255,255, 0.005) , 91px -131px 0 -104px rgba(255,255,255, 0.193) , -2px -11px 0 -104px rgba(255,255,255, 0.287) , -144px -16px 0 -104px rgba(255,255,255, 0.83) , 129px -3px 0 -104px rgba(255,255,255, 0.644) , 127px -134px 0 -104px rgba(255,255,255, 0.881) , 111px 110px 0 -104px rgba(255,255,255, 0.032) , 130px 136px 0 -104px rgba(255,255,255, 0.888) , 137px 12px 0 -104px rgba(255,255,255, 0.148) , 3px -120px 0 -104px rgba(255,255,255, 0.264) , -136px -32px 0 -104px rgba(255,255,255, 0.712) , 55px -131px 0 -104px rgba(255,255,255, 0.555) , 30px 128px 0 -104px rgba(255,255,255, 0.636) , 75px 27px 0 -104px rgba(255,255,255, 0.43) , -48px 8px 0 -104px rgba(255,255,255, 0.414) , -97px 145px 0 -104px rgba(255,255,255, 0.78) , 108px -137px 0 -104px rgba(255,255,255, 0.442) , 97px -23px 0 -104px rgba(255,255,255, 0.476) , -20px -104px 0 -104px rgba(255,255,255, 0.484) , -33px -74px 0 -104px rgba(255,255,255, 0.564) , -47px 97px 0 -104px rgba(255,255,255, 0.01) , -43px -14px 0 -104px rgba(255,255,255, 0.437) , 118px -130px 0 -104px rgba(255,255,255, 0.139) , 128px -134px 0 -104px rgba(255,255,255, 0.773) , -69px 1px 0 -104px rgba(255,255,255, 0.418) , -41px -117px 0 -104px rgba(255,255,255, 0.099) , -107px 18px 0 -104px rgba(255,255,255, 0.923) , -20px -44px 0 -104px rgba(255,255,255, 0.402) , -34px 89px 0 -104px rgba(255,255,255, 0.737) , -114px -124px 0 -104px rgba(255,255,255, 0.92) , 55px 47px 0 -104px rgba(255,255,255, 0.893) , 68px -32px 0 -104px rgba(255,255,255, 0.237) , -59px -110px 0 -104px rgba(255,255,255, 0.424) , -140px 41px 0 -104px rgba(255,255,255, 0.227) , 27px -77px 0 -104px rgba(255,255,255, 0.749) , 123px 28px 0 -104px rgba(255,255,255, 0.333) , 73px -117px 0 -104px rgba(255,255,255, 0.081) , -34px 115px 0 -104px rgba(255,255,255, 0.51) , 29px 4px 0 -104px rgba(255,255,255, 0.794) , -13px -128px 0 -104px rgba(255,255,255, 0.993) , 82px 144px 0 -104px rgba(255,255,255, 0.131) , -89px 100px 0 -104px rgba(255,255,255, 0.212) , 60px -46px 0 -104px rgba(255,255,255, 0.059) , 5px 144px 0 -104px rgba(255,255,255, 0.664) , 128px 37px 0 -104px rgba(255,255,255, 0.772) , -83px 57px 0 -104px rgba(255,255,255, 0.803) , -57px 78px 0 -104px rgba(255,255,255, 0.992) , 29px -126px 0 -104px rgba(255,255,255, 0.304) , 82px -40px 0 -104px rgba(255,255,255, 0.511) , -132px -83px 0 -104px rgba(255,255,255, 0.242) , -80px 99px 0 -104px rgba(255,255,255, 0.196) , 112px 17px 0 -104px rgba(255,255,255, 0.487) , 109px 116px 0 -104px rgba(255,255,255, 0.079) , -13px -19px 0 -104px rgba(255,255,255, 0.567) , -138px -34px 0 -104px rgba(255,255,255, 0.669) , -95px 118px 0 -104px rgba(255,255,255, 0.779) , 14px 61px 0 -104px rgba(255,255,255, 0.992) , -1px -66px 0 -104px rgba(255,255,255, 0.909) , -112px 143px 0 -104px rgba(255,255,255, 0.356) , 34px 11px 0 -104px rgba(255,255,255, 0.939) , 111px -30px 0 -104px rgba(255,255,255, 0.464) , -30px -105px 0 -104px rgba(255,255,255, 0.892) , 18px 119px 0 -104px rgba(255,255,255, 0.599) , 91px 118px 0 -104px rgba(255,255,255, 0.82) , 9px -66px 0 -104px rgba(255,255,255, 0.036) , -27px -122px 0 -104px rgba(255,255,255, 0.735) , 87px 13px 0 -104px rgba(255,255,255, 0.677) , 109px -123px 0 -104px rgba(255,255,255, 0.148) , 69px -46px 0 -104px rgba(255,255,255, 0.941) , -38px 89px 0 -104px rgba(255,255,255, 0.527) , -74px 36px 0 -104px rgba(255,255,255, 0.153) , 36px -21px 0 -104px rgba(255,255,255, 0.093) , -31px 118px 0 -104px rgba(255,255,255, 0.647) , 22px 2px 0 -104px rgba(255,255,255, 0.166) , 106px -14px 0 -104px rgba(255,255,255, 0.329) , -85px -69px 0 -104px rgba(255,255,255, 0.41) , 145px -46px 0 -104px rgba(255,255,255, 0.29) , -12px -125px 0 -104px rgba(255,255,255, 0.45) , -143px 97px 0 -104px rgba(255,255,255, 0.217) , 140px -35px 0 -104px rgba(255,255,255, 0.363) , -46px 114px 0 -104px rgba(255,255,255, 0.996) , -141px -69px 0 -104px rgba(255,255,255, 0.072) , 108px -132px 0 -104px rgba(255,255,255, 0.777) , -134px -8px 0 -104px rgba(255,255,255, 0.872) , -67px 53px 0 -104px rgba(255,255,255, 0.428) , -13px -55px 0 -104px rgba(255,255,255, 0.406) , 27px 60px 0 -104px rgba(255,255,255, 0.951) , 64px -129px 0 -104px rgba(255,255,255, 0.867) , -7px 117px 0 -104px rgba(255,255,255, 0.296) , 135px 27px 0 -104px rgba(255,255,255, 0.282) , 71px -2px 0 -104px rgba(255,255,255, 0.825) , 11px 70px 0 -104px rgba(255,255,255, 0.518) , 58px 7px 0 -104px rgba(255,255,255, 0.427) , -61px 35px 0 -104px rgba(255,255,255, 0.701) , 31px 83px 0 -104px rgba(255,255,255, 0.146) , -85px -48px 0 -104px rgba(255,255,255, 0.305) , -63px 15px 0 -104px rgba(255,255,255, 0.51) , -32px 48px 0 -104px rgba(255,255,255, 0.45) , -28px -56px 0 -104px rgba(255,255,255, 0.325) , -140px 27px 0 -104px rgba(255,255,255, 0.384) , -120px -86px 0 -104px rgba(255,255,255, 0.644) , -69px -112px 0 -104px rgba(255,255,255, 0.833) , 122px 115px 0 -104px rgba(255,255,255, 0.975) , -124px -80px 0 -104px rgba(255,255,255, 0.054) , 36px 5px 0 -104px rgba(255,255,255, 0.882) , 135px 34px 0 -104px rgba(255,255,255, 0.181) , 128px -95px 0 -104px rgba(255,255,255, 0.583) , -106px -106px 0 -104px rgba(255,255,255, 0.024) , 96px 39px 0 -104px rgba(255,255,255, 0.986) , 1px -49px 0 -104px rgba(255,255,255, 0.439) , 99px 47px 0 -104px rgba(255,255,255, 0.194) , 142px -65px 0 -104px rgba(255,255,255, 0.043) , 81px -123px 0 -104px rgba(255,255,255, 0.957) , 135px 38px 0 -104px rgba(255,255,255, 0.97) , 99px 142px 0 -104px rgba(255,255,255, 0.209) , -103px -37px 0 -104px rgba(255,255,255, 0.62) , 44px -32px 0 -104px rgba(255,255,255, 0.34) , 91px 55px 0 -104px rgba(255,255,255, 0.43) , -33px 40px 0 -104px rgba(255,255,255, 0.57) , -74px -86px 0 -104px rgba(255,255,255, 0.256) , 34px -138px 0 -104px rgba(255,255,255, 0.431) , -11px 138px 0 -104px rgba(255,255,255, 0.056) , 20px -15px 0 -104px rgba(255,255,255, 0.55) , 0px -57px 0 -104px rgba(255,255,255, 0.166) , 118px 4px 0 -104px rgba(255,255,255, 0.705) , 6px -42px 0 -104px rgba(255,255,255, 0.366) , 67px 118px 0 -104px rgba(255,255,255, 0.83) , 40px 50px 0 -104px rgba(255,255,255, 0.138) , 30px 3px 0 -104px rgba(255,255,255, 0.488) , -54px 106px 0 -104px rgba(255,255,255, 0.236) , 98px -134px 0 -104px rgba(255,255,255, 0.736) , 56px 130px 0 -104px rgba(255,255,255, 0.514) , -83px 87px 0 -104px rgba(255,255,255, 0.297) , -8px -1px 0 -104px rgba(255,255,255, 0.658) , 43px 110px 0 -104px rgba(255,255,255, 0.269) , -11px -13px 0 -104px rgba(255,255,255, 0.598) , 119px -84px 0 -104px rgba(255,255,255, 0.971) , 125px 36px 0 -104px rgba(255,255,255, 0.175) , -108px -136px 0 -104px rgba(255,255,255, 0.935) , -135px 127px 0 -104px rgba(255,255,255, 0.368) , 46px 43px 0 -104px rgba(255,255,255, 0.737) , 99px 61px 0 -104px rgba(255,255,255, 0.124) , -35px 63px 0 -104px rgba(255,255,255, 0.12) , -56px 57px 0 -104px rgba(255,255,255, 0.168) , 30px -50px 0 -104px rgba(255,255,255, 0.444) , 136px -103px 0 -104px rgba(255,255,255, 0.892) , 104px 44px 0 -104px rgba(255,255,255, 0.033) , -89px 9px 0 -104px rgba(255,255,255, 0.883) , 86px 99px 0 -104px rgba(255,255,255, 0.267) , 142px 124px 0 -104px rgba(255,255,255, 0.016) , 33px -11px 0 -104px rgba(255,255,255, 0.971) , 29px 18px 0 -104px rgba(255,255,255, 0.554) , -113px -128px 0 -104px rgba(255,255,255, 0.007) , 104px 127px 0 -104px rgba(255,255,255, 0.698) , -22px -22px 0 -104px rgba(255,255,255, 0.102) , 9px 132px 0 -104px rgba(255,255,255, 0.83) , 70px -140px 0 -104px rgba(255,255,255, 0.811) , -134px -38px 0 -104px rgba(255,255,255, 0.293) , 20px -29px 0 -104px rgba(255,255,255, 0.009) , -102px 115px 0 -104px rgba(255,255,255, 0.165) , -27px 25px 0 -104px rgba(255,255,255, 0.605) , 137px -92px 0 -104px rgba(255,255,255, 0.741) , 51px -89px 0 -104px rgba(255,255,255, 0.093) , 133px -10px 0 -104px rgba(255,255,255, 0.52) , 111px -75px 0 -104px rgba(255,255,255, 0.155) , 87px 32px 0 -104px rgba(255,255,255, 0.202) , 14px -52px 0 -104px rgba(255,255,255, 0.229) , -124px 38px 0 -104px rgba(255,255,255, 0.316) , -120px 137px 0 -104px rgba(255,255,255, 0.732) , 140px 4px 0 -104px rgba(255,255,255, 0.821) , 68px -33px 0 -104px rgba(255,255,255, 0.835) , -37px 98px 0 -104px rgba(255,255,255, 0.681) , 2px 31px 0 -104px rgba(255,255,255, 0.749) , -8px -61px 0 -104px rgba(255,255,255, 0.323) , -63px -79px 0 -104px rgba(255,255,255, 0.897) , -17px 21px 0 -104px rgba(255,255,255, 0.976) , -53px -120px 0 -104px rgba(255,255,255, 0.005) , -133px 116px 0 -104px rgba(255,255,255, 0.547) , 81px 3px 0 -104px rgba(255,255,255, 0.445) , -43px 125px 0 -104px rgba(255,255,255, 0.028) , -108px -130px 0 -104px rgba(255,255,255, 0.821) , 122px -45px 0 -104px rgba(255,255,255, 0.528) , -16px 49px 0 -104px rgba(255,255,255, 0.795) , 52px -22px 0 -104px rgba(255,255,255, 0.61) , -78px 127px 0 -104px rgba(255,255,255, 0.929) , 57px 10px 0 -104px rgba(255,255,255, 0.353) , -79px 95px 0 -104px rgba(255,255,255, 0.174) , -125px -56px 0 -104px rgba(255,255,255, 0.367) , -135px 122px 0 -104px rgba(255,255,255, 0.958) , -46px 48px 0 -104px rgba(255,255,255, 0.713) , 93px 96px 0 -104px rgba(255,255,255, 0.403) , -124px -23px 0 -104px rgba(255,255,255, 0.197) , -73px -97px 0 -104px rgba(255,255,255, 0.281) , 63px -108px 0 -104px rgba(255,255,255, 0.592) , 59px 51px 0 -104px rgba(255,255,255, 0.712) , 103px -75px 0 -104px rgba(255,255,255, 0.008) , -134px 18px 0 -104px rgba(255,255,255, 0.144) , -51px 108px 0 -104px rgba(255,255,255, 0.681) , 34px -12px 0 -104px rgba(255,255,255, 0.025) , -8px 130px 0 -104px rgba(255,255,255, 0.573) , 43px 96px 0 -104px rgba(255,255,255, 0.687) , 52px 62px 0 -104px rgba(255,255,255, 0.445) , -55px -95px 0 -104px rgba(255,255,255, 0.397) , -50px 41px 0 -104px rgba(255,255,255, 0.637) , 114px 126px 0 -104px rgba(255,255,255, 0.32) , 13px -46px 0 -104px rgba(255,255,255, 0.883) , 127px -92px 0 -104px rgba(255,255,255, 0.757) , 101px -81px 0 -104px rgba(255,255,255, 0.852) , 100px -63px 0 -104px rgba(255,255,255, 0.129) , -87px -135px 0 -104px rgba(255,255,255, 0.996) , 116px 68px 0 -104px rgba(255,255,255, 0.918) , -75px 117px 0 -104px rgba(255,255,255, 0.167) , 6px 29px 0 -104px rgba(255,255,255, 0.257) , -29px -121px 0 -104px rgba(255,255,255, 0.468) , -81px -80px 0 -104px rgba(255,255,255, 0.487) , -63px -76px 0 -104px rgba(255,255,255, 0.441) , -131px 126px 0 -104px rgba(255,255,255, 0.997) , 139px -91px 0 -104px rgba(255,255,255, 0.718) , -94px 81px 0 -104px rgba(255,255,255, 0.363) , -48px -41px 0 -104px rgba(255,255,255, 0.576) , 115px 8px 0 -104px rgba(255,255,255, 0.754) , -71px -65px 0 -104px rgba(255,255,255, 0.789) , 13px 49px 0 -104px rgba(255,255,255, 0.025) , -71px 31px 0 -104px rgba(255,255,255, 0.618) , 84px -84px 0 -104px rgba(255,255,255, 0.621) , -3px -78px 0 -104px rgba(255,255,255, 0.265) , 116px 94px 0 -104px rgba(255,255,255, 0.961) , -138px -23px 0 -104px rgba(255,255,255, 0.213) , -62px -112px 0 -104px rgba(255,255,255, 0.763) , 83px -102px 0 -104px rgba(255,255,255, 0.167) , -135px 83px 0 -104px rgba(255,255,255, 0.149) , 93px 55px 0 -104px rgba(255,255,255, 0.985) , 77px -132px 0 -104px rgba(255,255,255, 0.276) , -114px 125px 0 -104px rgba(255,255,255, 0.078) , 132px -12px 0 -104px rgba(255,255,255, 0.441) , -47px 60px 0 -104px rgba(255,255,255, 0.385) , -114px -36px 0 -104px rgba(255,255,255, 0.803) , -129px -83px 0 -104px rgba(255,255,255, 0.611) , -65px 32px 0 -104px rgba(255,255,255, 0.072) , 119px 15px 0 -104px rgba(255,255,255, 0.998) , 141px -61px 0 -104px rgba(255,255,255, 0.839) , 85px -49px 0 -104px rgba(255,255,255, 0.454) , -140px -75px 0 -104px rgba(255,255,255, 0.251) , 123px 114px 0 -104px rgba(255,255,255, 0.472) , 9px 23px 0 -104px rgba(255,255,255, 0.524) , 143px -68px 0 -104px rgba(255,255,255, 0.044) , -70px -92px 0 -104px rgba(255,255,255, 0.921) , 137px 117px 0 -104px rgba(255,255,255, 0.938) , 11px -51px 0 -104px rgba(255,255,255, 0.2) , -68px 137px 0 -104px rgba(255,255,255, 0.892) , 7px 101px 0 -104px rgba(255,255,255, 0.062) , -143px 71px 0 -104px rgba(255,255,255, 0.763) , 2px -8px 0 -104px rgba(255,255,255, 0.267) , -125px -54px 0 -104px rgba(255,255,255, 0.724) , 118px 58px 0 -104px rgba(255,255,255, 0.88) , -135px -111px 0 -104px rgba(255,255,255, 0.958) , 49px 131px 0 -104px rgba(255,255,255, 0.4) , 134px 0px 0 -104px rgba(255,255,255, 0.592) , 14px 2px 0 -104px rgba(255,255,255, 0.608) , 90px -71px 0 -104px rgba(255,255,255, 0.567) , -121px 68px 0 -104px rgba(255,255,255, 0.603) , -53px -10px 0 -104px rgba(255,255,255, 0.456) , 64px -56px 0 -104px rgba(255,255,255, 0.594) , 99px -3px 0 -104px rgba(255,255,255, 0.935) , 130px 86px 0 -104px rgba(255,255,255, 0.351) , 130px -79px 0 -104px rgba(255,255,255, 0.984) , 106px 129px 0 -104px rgba(255,255,255, 0.473) , -86px 145px 0 -104px rgba(255,255,255, 0.525) , -77px -58px 0 -104px rgba(255,255,255, 0.786) , 47px -42px 0 -104px rgba(255,255,255, 0.354) , -16px 103px 0 -104px rgba(255,255,255, 0.309) , -77px -47px 0 -104px rgba(255,255,255, 0.918) , -35px -76px 0 -104px rgba(255,255,255, 0.767) , 64px -127px 0 -104px rgba(255,255,255, 0.752) , -130px 14px 0 -104px rgba(255,255,255, 0.165) , 121px 76px 0 -104px rgba(255,255,255, 0.507) , 70px -105px 0 -104px rgba(255,255,255, 0.215) , -114px -32px 0 -104px rgba(255,255,255, 0.538) , -78px -43px 0 -104px rgba(255,255,255, 0.083) , -81px -4px 0 -104px rgba(255,255,255, 0.701) , 5px -108px 0 -104px rgba(255,255,255, 0.847) , 35px -80px 0 -104px rgba(255,255,255, 0.221) , -33px 18px 0 -104px rgba(255,255,255, 0.256) , -124px 133px 0 -104px rgba(255,255,255, 0.738); + } + + .pluto { + height: 780px; + width: 780px; + margin-top: -450px; + margin-left: -320px; + -webkit-animation: orb 7439.7074054575s linear infinite; + animation: orb 7439.7074054575s linear infinite; + } + .pluto:before { + height: 3px; + width: 3px; + background: #fff; + margin-top: -1.5px; + margin-left: -1.5px; + } + + @-webkit-keyframes orb { + from { + transform: rotate(0deg); + } + to { + transform: rotate(-360deg); + } + } + + @keyframes orb { + from { + transform: rotate(0deg); + } + to { + transform: rotate(-360deg); + } + } + + \ No newline at end of file diff --git a/drafts/checklist.html b/drafts/checklist.html new file mode 100644 index 0000000..d29f6ef --- /dev/null +++ b/drafts/checklist.html @@ -0,0 +1,176 @@ + + + + + + + + + My Checklist | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

My Checklist +

+
+ +
+
+ +
+
+
+ + + + You may put your GitHub Username. +
+
+ + + I'll never share your email with anyone + else. +
+
+
+ + +
+ Please Enter something ! +
+ Enter upto 200 characters. +
+ +
+ +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/drafts/finally-gsoc.html b/drafts/finally-gsoc.html new file mode 100644 index 0000000..0cd1c07 --- /dev/null +++ b/drafts/finally-gsoc.html @@ -0,0 +1,177 @@ + + + + + + + + + Google Summer of Code 2021 Selection | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Google Summer of Code 2021 Selection +

+
+ +
+
+ +
+
+
+ + + + You may put your GitHub Username. +
+
+ + + I'll never share your email with anyone + else. +
+
+
+ + +
+ Please Enter something ! +
+ Enter upto 200 characters. +
+ +
+ +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/favicon-16x16.png b/favicon-16x16.png new file mode 100644 index 0000000..98eb2a9 Binary files /dev/null and b/favicon-16x16.png differ diff --git a/favicon-32x32.png b/favicon-32x32.png new file mode 100644 index 0000000..86b7974 Binary files /dev/null and b/favicon-32x32.png differ diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..a9856ae Binary files /dev/null and b/favicon.ico differ diff --git a/feeds/all.atom.xml b/feeds/all.atom.xml new file mode 100644 index 0000000..1348db8 --- /dev/null +++ b/feeds/all.atom.xml @@ -0,0 +1,1610 @@ + +Be My SpaceTimehttps://avinal.space/2022-03-07T22:47:00+05:30눈치Developing Minimal Tekton Server2022-02-27T20:47:00+05:302022-03-07T22:47:00+05:30Avinaltag:avinal.space,2022-02-27:/posts/development/lovely-dangerous-things-redhat.html<p class="first last">We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster.</p> +<p style="border: 2px solid var(--pink);border-radius: 7px;" align=center>This blog is a descreptive account of the development of Minimal Tekton Server. This is highly technical in nature, so please make sure that you have sufficient knowledge about Golang, Docker, Kubernetes and TektonCD. You can refer to my <a href="https://avinal.space/posts/development/i-am-loving-it-redhat.html">previous blog</a> to know about these topics.<p><p>As mentioned in my last blog, we were given to implement an application named <strong>Minimal Tekton Server</strong>. The problem statement reads:</p> +<blockquote class="epigraph"> +We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster. The application will expose some fields of the Tekton Resources which the user will provide and then this application will create Tekton resources by talking to Tekton APIs available on the cluster to create the resources based on the user-provided fields.</blockquote> +<p>There are three parts in this project for the application and two more parts for the CI/CD using TektonCD and Kubernetes/OpenShift. I will go through each part descriptively and try to explain what we did.</p> +<div class="section" id="the-architecture-of-mks"> +<h2>The Architecture of MKS</h2> +<p>The first task in the development of the Minimal Tekton Server was creating its architectural diagram. Our first diagram was trash compared to the final diagram. Yeah, we learned. I will be explaining our final(obviously) architectural diagram and try to make some sense out of band-aids and duct tapes.</p> +<img alt="The MKS Arhitecture" class="img-fluid my-3" src="/images/mks-architecture.png" /> +<p>Let me start with explaining <strong>What are MKS Resources?</strong>. I hope you know at least tidbits about Kubernetes and by the definition: <em>A resource is an endpoint in the Kubernetes API that stores a collection of API objects of a certain kind; for example, the built-in :code:`pods` resource contains a collection of Pod objects.</em> But developers soon realized that these in-built resources were not enough for the ever-growing applications of Kubernetes. Here <a class="reference external" href="https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/">custom resource</a> comes into the picture. <em>A custom resource is an extension of the Kubernetes API that is not necessarily available in a default Kubernetes installation.</em> To define a custom resource we use something called <a class="reference external" href="https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/">Custom Resource Definition</a>. So MKS Resources are such custom resources that correspond to the TektonCD custom resources.</p> +<img alt="A venus flytrap engulphing an insect." class="float-md-right ml-3" src="/images/venus-flytrap.gif" style="width: 250px;" /> +<p>Let us now focus on the box containing <code>Controller</code> and <code>API server</code>. The controller can be said as a stimulus-response mechanism. Take the analogy of a Venus Flytrap plant. The trap is initially open. There are <code>trigger</code> hairs on the inside of the trap. Once an insect is detected, there is a change of state and the trap closes in a blick on the eye. The controller works the same way. It listens for the change in the state of the MKS resources and immediately transfers the request to the Tekton API to reflect the change in the corresponding Tekton resources. The changes can be creation, deletion, or updating. The API server ensures that there is a working connection between our controller and the Tekton API.</p> +<p>MKS Server also exposes APIs to introduce a change of state in the MKS resources. In technical terms these are called <code>verbs</code>. There are five such verbs that we have exposed: <code>create</code>, <code>update</code>, <code>get</code>, <code>delete</code>, and <code>list</code>. They can be utilized by a REST client, or in our case <strong>MKS CLI</strong> to introduce desired change. The MKS command-line interface provides commands and subcommands to do the desired tasks.</p> +<p>Whenever there is a change in the state, there is a logic running inside the controller to react on that and that also affects our database. We store four datapoints in our database: <code>created</code>, <code>deleted</code>, <code>completed</code>, and <code>failed</code>. They tell us about the current statistcs of our MKS resource using a single-page web app called <strong>MKS Dashboard</strong> (or UI).</p> +<p>This was about the architecture of the Minimal Tekton Server. Let us jump into more technical stuff.</p> +</div> +<div class="section" id="how-to-implement-a-crd-controller"> +<h2>How to implement a CRD controller?</h2> +<p>During this assignment, something that took the most time and effort was the implementation of a controller for our custom resources. This isn't very hard if you go by the rules and do the things according to the well-defined documents and blogs since this is a standard step in the implementation of any custom resource controller. But did we follow the rules? Hell no! But this time, let us go step-by-step.</p> +<ol class="arabic simple"> +<li>The first step is to define a <code>CustomResourceDefinition</code> for our custom resource. Let us define a CRD called <code>spacetime</code>. To do this you can write a YAML file like below.</li> +</ol> +<div class="highlight"><pre><span></span><span class="c1"># file: spacetime-crd.yaml</span><span class="w"></span> +<span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">apiextensions.k8s.io/v1</span><span class="w"></span> +<span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">CustomResourceDefinition</span><span class="w"></span> +<span class="nt">metadata</span><span class="p">:</span><span class="w"></span> +<span class="c1"># name must match the spec fields below, and be in the form: &lt;plural&gt;.&lt;group&gt;</span><span class="w"></span> +<span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">spacetimes.example.com</span><span class="w"></span> +<span class="nt">spec</span><span class="p">:</span><span class="w"></span> +<span class="c1"># group name to use for REST API: /apis/&lt;group&gt;/&lt;version&gt;</span><span class="w"></span> +<span class="nt">group</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">example.com</span><span class="w"></span> +<span class="c1"># list of versions supported by this CustomResourceDefinition</span><span class="w"></span> +<span class="nt">versions</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v1alpha1</span><span class="w"></span> +<span class="w"> </span><span class="c1"># Each version can be enabled/disabled by Served flag.</span><span class="w"></span> +<span class="w"> </span><span class="nt">served</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span><span class="w"></span> +<span class="w"> </span><span class="c1"># One and only one version must be marked as the storage version.</span><span class="w"></span> +<span class="w"> </span><span class="nt">storage</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span><span class="w"></span> +<span class="w"> </span><span class="nt">schema</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">openAPIV3Schema</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">object</span><span class="w"></span> +<span class="w"> </span><span class="nt">properties</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">spec</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">object</span><span class="w"></span> +<span class="w"> </span><span class="nt">properties</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">message</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">string</span><span class="w"></span> +<span class="c1"># either Namespaced or Cluster</span><span class="w"></span> +<span class="nt">scope</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Namespaced</span><span class="w"></span> +<span class="nt">names</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="c1"># plural name to be used in the URL: /apis/&lt;group&gt;/&lt;version&gt;/&lt;plural&gt;</span><span class="w"></span> +<span class="w"> </span><span class="nt">plural</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">spacetimes</span><span class="w"></span> +<span class="w"> </span><span class="c1"># singular name to be used as an alias on the CLI and for display</span><span class="w"></span> +<span class="w"> </span><span class="nt">singular</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">spacetime</span><span class="w"></span> +<span class="w"> </span><span class="c1"># kind is normally the CamelCased singular type. Your resource manifests use this.</span><span class="w"></span> +<span class="w"> </span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">SpaceTime</span><span class="w"></span> +<span class="w"> </span><span class="c1"># shortNames allow shorter string to match your resource on the CLI</span><span class="w"></span> +<span class="w"> </span><span class="nt">shortNames</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">st</span><span class="w"></span> +</pre></div> +<p>You can learn more about the fields and options <a class="reference external" href="https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/">here</a>. The CRD that we defined above corresponds to the <code>CustomResource</code> given below. Once you apply the above file you will be able to see the <code>spacetime</code> custom resource on your Kubernetes/OpenShift cluster.</p> +<div class="highlight"><pre><span></span><span class="c1"># file: spacetime-cr.yaml</span><span class="w"></span> +<span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">spacetimes.example.com/v1alpha1</span><span class="w"></span> +<span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">SpaceTime</span><span class="w"></span> +<span class="nt">metadata</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">spacetime-cr</span><span class="w"></span> +<span class="nt">spec</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">message</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Hello</span><span class="nv"> </span><span class="s">from</span><span class="nv"> </span><span class="s">space!&quot;</span><span class="w"></span> +</pre></div> +<p>Apply them using the following commands:</p> +<div class="highlight"><pre><span></span>kubectl apply -f spacetime-crd.yaml +kubectl apply -f spacetime-cr.yaml +</pre></div> +<ol class="arabic simple" start="2"> +<li>Once we have defined our custom resources, we need to define the types that will correspond to this custom resource definition. This can be done using <code>k8s.io/apimachinery/pkg/apis/meta/v1</code> package written in golang. Did I tell you that this is all in golang? Well, now you know. Create a package structure for a golang project and add the definition of the type as given below.</li> +</ol> +<div class="highlight"><pre><span></span>mkdir -p pkg/api/spacetime/v1alpha1 +touch pkg/api/spacetime/v1alpha1/<span class="o">{</span>spacetime_types,register,doc<span class="o">}</span>.go pkg/api/spacetime/register.go +</pre></div> +<p>Add the following content to the corresponding files.</p> +<div class="highlight"><pre><span></span><span class="c1">// file: /pkg/api/spacetime/v1alpha1/spacetime_types.go</span><span class="w"></span> +<span class="kn">package</span><span class="w"> </span><span class="nx">v1alpha1</span><span class="w"></span> + +<span class="kn">import</span><span class="w"> </span><span class="p">(</span><span class="w"></span> +<span class="w"> </span><span class="nx">metav1</span><span class="w"> </span><span class="s">&quot;k8s.io/apimachinery/pkg/apis/meta/v1&quot;</span><span class="w"></span> +<span class="p">)</span><span class="w"></span> + +<span class="kd">type</span><span class="w"> </span><span class="nx">SpaceTime</span><span class="w"> </span><span class="kd">struct</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<span class="w"> </span><span class="nx">metav1</span><span class="p">.</span><span class="nx">TypeMeta</span><span class="w"> </span><span class="s">`json:&quot;,inline&quot;`</span><span class="w"></span> +<span class="w"> </span><span class="nx">metav1</span><span class="p">.</span><span class="nx">ObjectMeta</span><span class="w"> </span><span class="s">`json:&quot;metadata,omitempty&quot;`</span><span class="w"></span> + +<span class="w"> </span><span class="nx">Spec</span><span class="w"> </span><span class="nx">SpaceTimeSpec</span><span class="w"> </span><span class="s">`json:&quot;spec&quot;`</span><span class="w"></span> +<span class="p">}</span><span class="w"></span> + +<span class="kd">type</span><span class="w"> </span><span class="nx">SpaceTimeSpec</span><span class="w"> </span><span class="kd">struct</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<span class="w"> </span><span class="nx">Message</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="s">`json:&quot;message&quot;`</span><span class="w"></span> +<span class="p">}</span><span class="w"></span> + +<span class="kd">type</span><span class="w"> </span><span class="nx">SpaceTimeList</span><span class="w"> </span><span class="kd">struct</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<span class="w"> </span><span class="nx">metav1</span><span class="p">.</span><span class="nx">TypeMeta</span><span class="w"> </span><span class="s">`json:&quot;,inline&quot;`</span><span class="w"></span> +<span class="w"> </span><span class="nx">metav1</span><span class="p">.</span><span class="nx">ListMeta</span><span class="w"> </span><span class="s">`json:&quot;metadata&quot;`</span><span class="w"></span> + +<span class="w"> </span><span class="nx">Items</span><span class="w"> </span><span class="p">[]</span><span class="nx">SpaceTime</span><span class="w"> </span><span class="s">`json:&quot;items&quot;`</span><span class="w"></span> +<span class="p">}</span><span class="w"></span> +</pre></div> +<p><strong>To be Continued</strong></p> +</div> +My internship at Red Hat2022-02-25T20:47:00+05:302022-02-25T20:47:00+05:30Avinaltag:avinal.space,2022-02-25:/posts/development/i-am-loving-it-redhat.html<p class="first last">I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project.</p> +<p>I have been contributing to open source for the last 3 years and Red Hat was one of the companies that I was very fond of. I must say all my contributions and consistency paid off, and I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project.</p> +<p>On the first day of my internship, I met two amazing teammates <a class="reference external" href="https://github.com/">Saytam</a> and <a class="reference external" href="https://github.com/">Utkarsh</a>. We were also introduced to a Senior Software Engineer <a class="reference external" href="https://github.com">Piyush Garg</a> who later mentored us. The initial few meetings were more on the introduction and what to learn topics. Before I jump into more details let me explain first what does a <strong>DevTools Developer/Engineer</strong> do?</p> +<div class="section" id="what-does-a-devtools-developer-engineer-do"> +<h2>What does a DevTools Developer/Engineer do?</h2> +<p>From <a class="reference external" href="https://developer.mozilla.org/en-US/docs/Glossary/Developer_Tools">MDN Web Docs</a> <strong>Developer tools (or &quot;development tools&quot; or short &quot;DevTools&quot;) are programs that allow a developer to create, test, and debug software.</strong> At RedHat, a lot of open source developer tools of industry standards are developed. There are many, OpenShift, Tekton, CodeReady containers, and many more.</p> +</div> +<div class="section" id="learning-on-the-golang-logo"> +<h2>Learning on the <img alt="golang_logo" class="align-top" src="/images/golang.png" style="width: 2.5em;" /></h2> +<p>There was a lot of learning and still a lot to learn. In a meeting with my manager Pradeepto Bhattacharya, I was told that I will be working on TektonCD or OpenShift Pipelines, and both of them require a sound knowledge of Golang, CI/CD, Containers, Docker, and Kubernetes. I was familiar with CI/CD, containers, and Docker but never used Golang and Kubernetes. We were provided plenty of good resources and my teammates also helped with many awesome resources. I am listing all the resources with their category.</p> +<div class="section" id="golang-1"> +<h3><a class="reference external" href="https://go.dev/">Golang</a></h3> +<img alt="Gopher on the ladder" class="float-md-right rounded ml-3" src="/images/goladder.png" style="height: 20em;" /> +<p>One of Golang’s biggest advantages is that it offers the clarity and ease of use that other languages lack. Golang’s advantages make it easy for new programmers to quickly understand the language and for seasoned veterans to easily read each other’s code.</p> +<ul class="simple"> +<li><a class="reference external" href="https://go.dev/doc/">Official Go Documentation</a> - <em>Start from here</em></li> +<li><a class="reference external" href="https://gobyexample.com/">Go by Example</a> - <em>bite-size examples for most of the golang features</em></li> +<li><a class="reference external" href="https://golangbot.com/learn-golang-series/">Golang tutorial series - GOLANGBOT.COM</a> - <em>in-depth tutorial of golang</em></li> +<li><a class="reference external" href="https://go.dev/doc/effective_go">Effective Go</a> - <em>writing good golang programs</em></li> +<li><a class="reference external" href="https://go.dev/play/">The Go Playground</a> - <em>official online golang ide</em></li> +<li><a class="reference external" href="https://www.gopl.io/">The Go Programming Language - Book</a> <em>for learning advanced level golang</em></li> +<li><a class="reference external" href="https://youtu.be/yyUHQIec83I">Golang Tutorial for Beginners | Full Go Course - TechWorld with Nana</a> <em>if you prefer video tutorials, I don't :)</em></li> +</ul> +</div> +<div class="section" id="docker-1"> +<h3><a class="reference external" href="https://www.docker.com/">Docker</a></h3> +<p>Docker takes away repetitive, mundane configuration tasks and is used throughout the development lifecycle for fast, easy, and portable application development - desktop and cloud. Docker’s comprehensive end-to-end platform includes UIs, CLIs, APIs, and security that are engineered to work together across the entire application delivery lifecycle.</p> +<img alt="The Docker Architecture" class="float-md-right img-fluid my-3" src="/images/docker-architecture.png" /> +<ul class="simple"> +<li><a class="reference external" href="https://www.katacoda.com/courses/docker">Docker and Containers - Katacoda</a> <em>interactive lessons on docker and containers</em></li> +<li><a class="reference external" href="https://docker-curriculum.com/">Docker for beginners</a></li> +<li><a class="reference external" href="https://youtu.be/3c-iBn73dDE">Docker Tutorial for Beginners | TechWorld with Nana</a> <em>video tutorial</em></li> +</ul> +</div> +<div class="section" id="kubernetes-1"> +<h3><a class="reference external" href="https://kubernetes.io/">Kubernetes</a></h3> +<img alt="Kubernetes tech" class="float-md-left border mr-3" src="/images/kubernetes-meme.png" style="width: 200px;" /> +<p><strong>Kubernetes</strong> is the Greek word for a ship’s captain. We get the words Cybernetic and Gubernatorial from it. The Kubernetes project focuses on building a robust platform for running thousands of containers in production.</p> +<ul class="simple"> +<li><a class="reference external" href="https://www.katacoda.com/courses/kubernetes">Learn Kubernetes - Katacoda</a> <em>interactive lessons with kubernetes</em></li> +<li><a class="reference external" href="https://kubebyexample.com/">kube by example</a> <em>learn by doing</em></li> +<li><a class="reference external" href="https://youtu.be/X48VuDVv0do">Kubernetes Tutorial for Beginners</a> <em>video tutorial</em></li> +</ul> +</div> +</div> +<div class="section" id="not-so-minimal-tekton-server"> +<h2><em>Not so Minimal</em> Tekton Server</h2> +<p>In late January, we were asked to implement our learnings and deep dive into Kubernetes and TektonCD through an assignment project. Soon we realized that whatever we were learning so far was not even close to what we were going to implement. We were given a document containing the requirements of the applications we were supposed to create along with all the documentation and architectural diagrams.</p> +<p>The application was called <strong>Minimal Tekton Server</strong>. It is a set of three different applications, i.e a server, a CLI, and a dashboard. In short, this application is supposed to <em>listen to custom resources being created and then transfer the request to Tekton API to create the corresponding resource on the OpenShift/Kubernetes cluster.</em></p> +<p>So are you interested in how it went? Please follow up with my <a class="reference external" href="https://avinal.space/posts/development/lovely-dangerous-things-redhat.html">next blog</a>.</p> +</div> +Google Summer of Code 20212021-08-19T23:07:00+05:302021-08-19T23:07:00+05:30Avinaltag:avinal.space,2021-08-19:/posts/report/final-evaluation.html<p class="first last">This is the final report of my Google Summer of Code 2021 at The FOSSology Project.</p> +<style> +.rd {color:red;font-weight:bold} +.gr{color:green;font-weight:bold} +.or{color:orange;font-weight:medium} +ul{margin-bottom:0} +</style><div class="section" id="the-cmake-build-system"> +<h2>The CMake Build system</h2> +<p>FOSSology is quite an old and mature project. The project has been using bare metal <strong>Makefiles</strong>. As the project is growing with new agents and modernization it was required to have a modern build system.</p> +<p>The FOSSology is a suite of well-integrated and synchronized sub-projects (called agents) written in C, C++, and PHP. Most of the major agents are in C, C++ and that made CMake an obvious choice for a new build system for FOSSology. CMake is a versatile set of build, test, and packaging tools and is the most popular choice of C/C++ developers. CMake can be extended to create a build system for other languages too via custom scripts.</p> +</div> +<div class="section" id="github-actions-ci-cd"> +<h2>GitHub Actions CI/CD</h2> +<img alt="A CI Meme" class="float-md-right rounded border border-info ml-3" src="/images/ci.png" style="width: 350px;" /> +<p>Since the FOSSology project moved on Github, it has used only the free Travis CI service for OSS projects. +At the time of writing Travis CI has reduced its free tier CI services. GitHub Actions provides faster builds. Since GitHub Actions is a fully managed service by GitHub, we don’t need to know how to scale and operate the infrastructure to run it.</p> +<p>It is straightforward to use with GitHub because when we fork a repository, the actions automatically get forked. This allows you to test and build projects very efficiently and even run them closer to the developer. Also, you have readily available access to the GitHub API, making it more popular among developers.</p> +</div> +<div class="section" id="improvements-over-previous-build-system-and-ci"> +<h2>Improvements over previous build system and CI</h2> +<p>The new build system and CI brings a lot of improvements and features. The list below describes them.</p> +<ul class="simple"> +<li>CMake enforces out-of-source builds. This was already possible with the previous build system but not a strict requirement. This feature keeps the source code clean and makes cleaning the build artifacts easy. (Just remove the build folder :)</li> +<li>One of the major improvements over the previous build system is faster build times. CMake generates parallel build-enabled configurations for all generators. In our tests, the new build system is at least twice as fast as the previous one. With further improvement in configuration, we will be able to further cut the build times.</li> +<li>Previously FOSSology can only be built using <em>Unix Makefiles</em>. With CMake, we can now use many other popular generators such as <em>Ninja</em>.</li> +<li>Now it is also very flexible to choose different compilers. This will help support more platforms and architecture in the future. As of now, we are experimenting with Clang compilers.</li> +<li>FOSSology is quite an old project and a lot of agent testing code was written in the last decade. Initially, none of them were compatible with the new build system, but we were able to hack most of the test code using better-improved methods. Test times have also improved.</li> +<li>Migrating from Travis CI to GitHub Actions was another big move and for the most part, it removes the dependency on a third-party CI service. Along with that GitHub Actions provides better build times, tons of new features, and better integration with other GitHub services.</li> +</ul> +</div> +<div class="section" id="deliverables"> +<h2>Deliverables</h2> +<div class="alert alert-info" role="alert"> +<ul class="simple"> +<li>Final Pull Request <a class="badge badge-info" href="https://github.com/fossology/fossology/pull/2075">#2075</a></li> +<li>Pull Request Branch <a class="badge badge-info" href="https://github.com/avinal/fossology/tree/avinal/feat/buildsystem">avinal/feat/buildsystem</a></li> +<li>Working Branch (individual commits) <ul> +<li><a class="badge badge-info" href="https://github.com/avinal/fossology/tree/avinal/feat/cmake-buildsystem">avinal/feat/cmake-buildsystem</a></li> +<li><a class="badge badge-info" href="https://github.com/avinal/fossology/tree/avinal/feat/testing">avinal/feat/testing</a></li> +</ul></li> +<li>Project Issue <a class="badge badge-info" href="https://github.com/fossology/fossology/issues/1913">#1913</a></li> +<li>Project Discussion <a class="badge badge-info" href="https://github.com/fossology/fossology/discussions/1931">#1931</a></li> +<li>Weekly Reports<ul> +<li><a class="badge badge-info" href="https://gsoc.avinal.space">Personal Blog</a></li> +<li><a class="badge badge-info" href="https://fossology.github.io/gsoc/docs/2021/buildsystem/">FOSSology Official Blog</a></li> +</ul></li></ul> +</div><p><strong>CMake Build System Tasks</strong></p> +<table border="1" class="table table-sm table-hover table-bordered table-responsive docutils align-center"> +<colgroup> +<col width="5%" /> +<col width="15%" /> +<col width="10%" /> +<col width="10%" /> +<col width="20%" /> +<col width="15%" /> +<col width="25%" /> +</colgroup> +<thead valign="bottom"> +<tr><th class="head">#</th> +<th class="head">Agents</th> +<th class="head">Build</th> +<th class="head">Install</th> +<th class="head">Testing</th> +<th class="head">Packaging</th> +<th class="head">Remarks</th> +</tr> +</thead> +<tbody valign="top"> +<tr><td>1</td> +<td>adj2nest</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>2</td> +<td>buckets</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>3</td> +<td>cli</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="rd">Functional</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>4</td> +<td>copyright</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>5</td> +<td>debug</td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>6</td> +<td>decider</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>7</td> +<td>deciderjob</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>8</td> +<td>delagent</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="rd">Functional</span></li> +<li><span class="rd">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>9</td> +<td>demomod</td> +<td><span class="or">YES</span></td> +<td><span class="or">YES</span></td> +<td><ul class="first last simple"> +<li><span class="or">Functional</span></li> +<li><span class="or">Unit</span></li> +</ul> +</td> +<td><span class="or">NO</span></td> +<td><em>(Not Used)</em></td> +</tr> +<tr><td>10</td> +<td>example_wc_agent</td> +<td><span class="or">YES</span></td> +<td><span class="or">YES</span></td> +<td><ul class="first last simple"> +<li><span class="or">Functional</span></li> +<li><span class="or">Unit</span></li> +</ul> +</td> +<td><span class="or">NO</span></td> +<td><em>(Not Used)</em></td> +</tr> +<tr><td>11</td> +<td>clib</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>12</td> +<td>cpplib</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>13</td> +<td>phplib</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>1 functional +test needs fix</td> +</tr> +<tr><td>14</td> +<td>maintagent</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>15</td> +<td>mimetype</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>16</td> +<td>monk</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>17</td> +<td>ninka</td> +<td><span class="or">YES</span></td> +<td><span class="or">YES</span></td> +<td><ul class="first last simple"> +<li><span class="or">Functional</span></li> +<li><span class="or">Unit</span></li> +</ul> +</td> +<td><span class="or">NO</span></td> +<td><em>(Deprecated)</em></td> +</tr> +<tr><td>18</td> +<td>nomos</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>19</td> +<td>ojo</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>1 functional +test needs fix</td> +</tr> +<tr><td>20</td> +<td>pkgagent</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>21</td> +<td>readmeoss</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>22</td> +<td>regexscan</td> +<td><span class="or">YES</span></td> +<td><span class="or">YES</span></td> +<td>&nbsp;</td> +<td><span class="or">NO</span></td> +<td><em>(Deprecated)</em></td> +</tr> +<tr><td>23</td> +<td>reportImport</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>24</td> +<td>reuser</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>25</td> +<td>reso</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>26</td> +<td>scheduler</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="rd">Functional</span></li> +<li><span class="rd">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>Tests needs +fix</td> +</tr> +<tr><td>27</td> +<td>softwareHeritage</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>28</td> +<td>spasht</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>29</td> +<td>spdx2</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>1 Test failing +in CI</td> +</tr> +<tr><td>30</td> +<td>unifiedreport</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>31</td> +<td>ununpack</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="rd">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>Unit tests +needs fix</td> +</tr> +<tr><td>32</td> +<td>wget_agent</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>32</td> +<td>www</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="rd">UI</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +</tbody> +</table> +<p><strong>GitHub Actions CI Tasks</strong></p> +<table border="1" class="table table-sm table-hover table-bordered table-responsive docutils align-center"> +<colgroup> +<col width="5%" /> +<col width="25%" /> +<col width="70%" /> +</colgroup> +<thead valign="bottom"> +<tr><th class="head">#</th> +<th class="head">CI Tasks</th> +<th class="head">Status</th> +</tr> +</thead> +<tbody valign="top"> +<tr><td>1</td> +<td><span class="gr">build</span></td> +<td>Added Ubuntu 20.04 GCC 8, 9 and Clang, GCC 7 not working</td> +</tr> +<tr><td>2</td> +<td><span class="gr">c/cpp unit test</span></td> +<td>Added, delagent, scheduler and ununpack not working</td> +</tr> +<tr><td>3</td> +<td><span class="gr">phpunit tests</span></td> +<td>Added, delagent and scheduler functional not working</td> +</tr> +<tr><td>4</td> +<td><span class="rd">cahching</span></td> +<td>Not implemented</td> +</tr> +<tr><td>5</td> +<td><span class="rd">source install</span></td> +<td>Not implemented</td> +</tr> +</tbody> +</table> +<p>(<span class="gr">GREEN</span>: COMPLETED, <span class="rd">RED</span>: INCOMPLETE, <span class="or">ORANGE</span>: NOT NEEDED/DEPRECATED)</p> +</div> +<div class="section" id="how-does-it-work-and-how-to-use-it"> +<h2>How does it work and how to use it?</h2> +<div class="embed-responsive embed-responsive-16by9"> + <iframe class="embed-responsive-item" src="/images/second-build.webm" allowfullscreen></iframe> +</div><p>The new build system retains the modular and hierarchical structure of the previous build system. On the other hand, the new build system provides several new flags to control the build. The new build system forces out-of-source build instead of the previous in-source builds. This keeps the source clutter-free and reduces the chance of accidentally deleting source files. <em>Testing still needs some in-source artifacts, this will be solved once all the tests are fixed according to the new build system.</em></p> +<p>Each agent is a complete CMake sub-project with its independent configuration for building, installing, and testing. That means a single agent can be built and installed separately and even removed from the default build without breaking other builds. The directory structure is as below.</p> +<div class="highlight"><pre><span></span>. +├── build <span class="c1"># temporary directory for build artifacts</span> +├── cmake <span class="c1"># CMake modules for FOSSology</span> +│ ├── FoPackaging.cmake <span class="c1"># CMake Packaging configurations</span> +│ ├── FoUtilities.cmake <span class="c1"># Custom CMake utilities</span> +│ ├── FoVersionFile.cmake <span class="c1"># VERSION version.php CMake template file</span> +│ ├── SetDefaults.cmake <span class="c1"># CMake defaults for this project</span> +│ ├── TestInstall.make.in <span class="c1"># Template makefile for install during tests</span> +│ └── VERSION.in <span class="c1"># VERSION file template</span> +├── src +│ ├── agent-1 <span class="c1"># Agent sub-project</span> +│ │ ├── agent <span class="c1"># Agent&#39;s source code directory</span> +│ │ │ ├── agent-source-code +│ │ │ └── CMakeLists.txt +│ │ ├── agent_tests <span class="c1"># Agent&#39;s test directory</span> +│ │ │ ├── Unit +│ │ │ ├── Functional +│ │ │ └── CMakeLists.txt +│ │ ├── ui <span class="c1"># Agent&#39;s UI source code</span> +│ │ │ ├── templates +│ │ │ └── agent-ui-code +│ │ └── CMakeLists.txt <span class="c1"># Agent&#39;s top-level CMake configuration</span> +: : +│ ├── other agents +: : +│ └── CMakeLists.txt <span class="c1"># Source intermediate CMake configuration</span> +: +├── other directories and files +: +└── CMakeLists.txt <span class="c1"># FOSSology Top-level CMake configuration</span> +</pre></div> +<p>The <code>cmake</code> directory contains customized CMake modules and templates for FOSSology. This directory is required for all the operations. The general workflow of the new build system as well as how to use it is described below.</p> +<ol class="arabic"> +<li><p class="first">Since the new build system is still in review. You must fork FOSSology and pull the <a class="reference external" href="https://github.com/fossology/fossology/pull/2075">#2075</a> pull request branch. Once you are in FOSSology root, run these commands.</p> +<blockquote> +<div class="highlight"><pre><span></span>git fetch https://github.com/avinal/fossology avinal/feat/buildsystem:buildsystem +git checkout buildsystem +</pre></div> +</blockquote> +</li> +<li><p class="first">The first step towards building is to create a temporary directory for storing intermediate files and build artifacts. By convention we use a directory named <code>build</code>, but you can use any name. (<strong>NOTE: For testing do not use other names</strong>)</p> +<blockquote> +<div class="highlight"><pre><span></span>mkdir build +<span class="nb">cd</span> build +</pre></div> +</blockquote> +</li> +<li><p class="first">In the next steps, we will configure the CMake project and generate the required configurations. You can use several flags to control the build. Given below are the flags available for this project.</p> +<blockquote> +<table border="1" class="table table-sm table-hover table-bordered table-responsive docutils"> +<colgroup> +<col width="35%" /> +<col width="44%" /> +<col width="20%" /> +</colgroup> +<thead valign="bottom"> +<tr><th class="head">CMake Flags</th> +<th class="head">Description</th> +<th class="head">Default</th> +</tr> +</thead> +<tbody valign="top"> +<tr><td><strong>-DCMAKE_INSTALL_PREFIX=&lt;path&gt;</strong></td> +<td>Sets the install prefix.</td> +<td><code>/usr/local</code></td> +</tr> +<tr><td><strong>-DAGENTS=&quot;agent1;agent2...&quot;</strong></td> +<td>Only configure these agents.</td> +<td>ALL AGENTS</td> +</tr> +<tr><td><strong>-DOFFLINE=&lt;ON/OFF&gt;</strong></td> +<td>Controls vendor generation, ON=NO</td> +<td><strong>OFF</strong></td> +</tr> +<tr><td><p class="first"><strong>-DCMAKE_BUILD_TYPE=&lt;type&gt;</strong></p> +<blockquote class="last"> +<ul class="simple"> +<li>Controls build type aka +level optimisation</li> +</ul> +</blockquote> +</td> +<td><ul class="first last simple"> +<li><code>Debug</code></li> +<li><code>Release</code></li> +<li><code>RelWithDebInfo</code></li> +<li><code>MinSizeRel</code></li> +</ul> +</td> +<td><code>Debug</code></td> +</tr> +<tr><td><strong>-DTESTING=&lt;ON/OFF&gt;</strong></td> +<td>Controls testing config generation</td> +<td><strong>OFF</strong></td> +</tr> +<tr><td><strong>-DMONOPACK=&lt;ON/OFF&gt;</strong></td> +<td>Package adj2nest and ununpack seperately</td> +<td><strong>OFF</strong></td> +</tr> +<tr><td><strong>-GNinja</strong></td> +<td>Use Ninja instead of Unix Makefiles</td> +<td><em>Unix MakeFiles</em></td> +</tr> +</tbody> +</table> +<p>There are lots of inbuilt CMake command-line options you can see them in the official <a class="reference external" href="https://cmake.org/cmake/help/v3.10/manual/cmake.1.html">documentation</a>. Once you have chosen your flags we can now configure the project using the following commands.</p> +<div class="highlight"><pre><span></span><span class="c1"># From build folder</span> +<span class="nb">cd</span> &lt;name-of-build-directory&gt; +cmake &lt;flags&gt; .. +</pre></div> +</blockquote> +</li> +<li><p class="first">The next step is to build the project. You can use parallel jobs to build faster. For more options you can type <code>cmake --help</code> or <code>make --help</code> or <code>ninja --help</code>.</p> +<blockquote> +<div class="highlight"><pre><span></span><span class="c1"># Common build command for all generators,</span> +<span class="c1"># Default number of parallel builds depends on generator used</span> +cmake --build . --parallel &lt;no-of-processes&gt; + +<span class="c1"># For Unix Makefiles, no parallel build by default</span> +make -j &lt;no-of-processes&gt; + +<span class="c1"># For Ninja, 8+ parallel build by default (depends on system)</span> +ninja -j &lt;no-of-processes&gt; +</pre></div> +</blockquote> +</li> +<li><p class="first">Installing is also as easy as building. You can choose to install only certain components even if you have built the whole project. If you directly invoke the install command without building the project, it will automatically build the project first.</p> +<blockquote> +<div class="highlight"><pre><span></span><span class="c1"># For Unix Makefiles</span> +make install + +<span class="c1"># For Ninja</span> +ninja install +</pre></div> +</blockquote> +</li> +<li><p class="first">While testing has some issues, most of the testing is working fine. For now, you must build and run any test from the FOSSology root directory only. You can choose to configure a single agent if you want to test one agent only. See <code>ctest --help</code> for controlling test runs.</p> +<blockquote> +<div class="highlight"><pre><span></span><span class="c1"># Common testing command</span> +ctest --parallel &lt;no-of-processes&gt; + +<span class="c1"># For Unix Makefiles</span> +make <span class="nb">test</span> + +<span class="c1"># For Ninja</span> +ninja <span class="nb">test</span> +</pre></div> +</blockquote> +</li> +<li><p class="first">You can package FOSSology, the packaging currently lacks copyright and conf files. But for testing purposes, you can use the following commands. Similar to installing, if you run the package command without building the project, it will automatically build the project first. See <code>cpack --help</code> for more packaging options.</p> +<blockquote> +<div class="highlight"><pre><span></span><span class="c1"># Common testing command</span> +cpack + +<span class="c1"># For Unix Makefiles</span> +make package + +<span class="c1"># For Ninja</span> +ninja package +</pre></div> +</blockquote> +</li> +</ol> +</div> +<div class="section" id="known-issues-and-drawbacks"> +<h2>Known Issues and Drawbacks</h2> +<p>Although the transition from Makefiles to CMake and Travis CI to GitHub Actions is almost complete and working as expected. But it is not free of drawbacks and issues. This section outlines the known issues at the time of writing.</p> +<img alt="A Bug Meme" class="float-md-right rounded border border-info ml-3" src="https://imgs.xkcd.com/comics/conference_question.png" style="width: 350px;" /> +<ul class="simple"> +<li>Coverage builds may fail with linking errors.</li> +<li>Packaging prefix is the same as the install prefix. This requires the developer to set the install prefix manually before packaging to produce packages with the correct directory structure.</li> +<li>Testing and packaging must be used from the FOSSology root directory. Not doing so may or may not configure the project as intended.</li> +<li>Previously tests were written hardcoded for the Makefiles. But new build system requires all artifacts to be generated in a separate directory. This required me to add symbolic links wherever a generated script or file is expected. Tests can still leave some artifacts inside source folders.</li> +<li>There is no easy way to install a particular agent from the FOSSology root directory.</li> +<li>Packages don't contain copyright, readme, and license files. CMake doesn't provide a way to include these files. This is being tracked by issue <a class="reference external" href="https://gitlab.kitware.com/cmake/cmake/-/issues/21832">#21832</a>.</li> +<li>While packaging the symbolic links may or may not be dereferenced and hence results in copying the folder too in the target directory.</li> +<li>Running tests locally may require switching to <code>fossy</code> user.</li> +<li>While configured for testing, it may give permission errors.</li> +<li>Scheduler, Ununpack, and Delagent unit and functional tests are not working. I have added an issue <a class="reference external" href="https://github.com/fossology/fossology/issues/2084">#2084</a> to track the progress on fixing these tests.</li> +<li>CMake doesn't generate uninstall targets. The closest thing to uninstall is <a class="reference external" href="https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake">this snippet</a>. This will be later added to the FOSSology.</li> +</ul> +</div> +<div class="section" id="challenges-faced"> +<h2>Challenges Faced</h2> +<p>While this whole project was challenging, some aspects of it were unforeseen and more challenging. When I decided to go on with this project I just had enough CMake knowledge to write a configuration for a very small project. I had never used CMake on this big scale. On the other side, the FOSSology community is largely unknown to CMake so for all of us it was learned, practiced, and implement. With support from mentors, I was able to overcome this challenge with flying colors.</p> +<p>The other challenge was to understand the old build system, how they are all connected and what is the flow. The complexity can be imagined by the fact that the most of code and configurations were written in the decade before the last decade and haven't changed much since then.</p> +<p>The most challenging task was to make tests work with the new build system. Since tests were mostly hardcoded and the new build system refactored many of the files and directory, the tests were failing initially. The testing part took me the most time. All thanks to my mentor Gaurav and my friend Sarita I was able to hack them to suit the new build system.</p> +</div> +<div class="section" id="related-resources-and-links"> +<h2>Related Resources and Links</h2> +<ul class="simple"> +<li>Fix FOSSology agent tests issue <a class="reference external" href="https://github.com/fossology/fossology/issues/2084">#2084</a></li> +<li>feat(CI): Migrate API docs generation and deployment to GitHub Actions pull request <a class="reference external" href="https://github.com/fossology/fossology/pull/1917">#1917</a></li> +<li>feat(CI): Migrate Static Checks and Analysis to GitHub Actions from Travis CI <a class="reference external" href="https://github.com/fossology/fossology/pull/1919">#1919</a></li> +</ul> +</div> +<div class="section" id="future-development-plans"> +<h2>Future Development Plans</h2> +<p>There is a lot to do with the new build system and CI and it will probably take a year or to reach a maturity point. I was able to meet most of the goals but some of them are remaining.</p> +<ul class="simple"> +<li>Fix the tests, probably renovate them from the ground up.</li> +<li>Find a hack for packaging problems.</li> +<li>Improve and optimize the build.</li> +<li>Modernise the source code, remove old, bloated code and replace them according to new standards.</li> +</ul> +</div> +<div class="section" id="what-did-i-learn-from-this-project"> +<h2>What did I learn from this project?</h2> +<p>This Google Summer of Code was the busiest time of my life for all good reasons. I learned a lot about license compliance and how it all works in the software industry. The next big thing is CMake. As I mentioned I was just a novice user of CMake. Now I am confident that given any other large project I will be able to migrate it/improve it. I got to learn PHP, of which I did not know a single word before GSoC. And finally, I learned about packing and testing. I had these courses but implementing them myself and fixing them was a wholesome experience.</p> +<p>Other than that I improved on my communication and presentation skills. Collaborating with fellow participants was one of the great things that happened during GSoC.</p> +</div> +<div class="section" id="acknowledgments"> +<h2>Acknowledgments</h2> +<p>Google Summer of Code is the best thing that has happened to me this year so far. Although there are numerous people to say thanks to, I want to mention key people who were my motivation and support during this period.</p> +<p>First of all, I want to thank and appreciate my mentors <a class="reference external" href="https://github.com/GMishx">Gaurav Mishra</a>, <a class="reference external" href="https://github.com/mcjaeger">Michael C. Jaeger</a>, <a class="reference external" href="https://github.com/ag4ums">Anupam Ghosh</a>, and <a class="reference external" href="https://github.com/shaheemazmalmmd">Shaheem Azmal M MD</a>. Without the help and support from them, all this would not have been possible. They are very polite, knowledgeable, and helpful.</p> +<p>I want to thank my friend and <abbr title="Integrating ScanCode Toolkit to FOSSology">fellow participant</abbr> <a class="reference external" href="https://github.com/itssingh">Sarita</a>. Thank you for being a collaborator, support, and motivation for attempting GSoC.</p> +<p>Finally, I want to thank, my family and friends. I got to meet many awesome developers as my fellow participants from around the world, I wish we will do more collaboration in the future.</p> +</div> +reStructuredText in GitHub2021-02-14T22:47:00+05:302021-02-14T22:47:00+05:30Avinaltag:avinal.space,2021-02-14:/posts/development/rst-guide.html<p class="first last">reStructuredText syntax</p> +<ul> +<li><p class="first">Headers</p> +<div class="highlight"><pre><span></span><span class="gh">Top Title</span> +<span class="gh">=========</span> + +<span class="gh">Sub Title</span> +<span class="gh">---------</span> + +<span class="gh">Sub Sub Title</span> +<span class="gh">^^^^^^^^^^^^^</span> +</pre></div> +</li> +<li><p class="first">Images</p> +<ul> +<li><p class="first">Direct</p> +<div class="highlight"><pre><span></span><span class="p">..</span> <span class="ow">figure</span><span class="p">::</span> image-path-or-url + <span class="nc">:align:</span> center + <span class="nc">:target:</span> link-to-go-when-image-is-clicked + <span class="nc">:alt:</span> alternative-text-if-any +</pre></div> +</li> +<li><p class="first">Indirect</p> +<div class="highlight"><pre><span></span><span class="p">..</span> <span class="nt">|substitution|</span> <span class="ow">image</span><span class="p">::</span> image-path-or-url + <span class="nc">:target:</span> link-to-go-when-image-is-clicked +</pre></div> +<p>You can use <code>|substitution|</code> where you want to put your image.</p> +</li> +</ul> +</li> +<li><p class="first">Links</p> +<div class="highlight"><pre><span></span><span class="s">`Link Text </span><span class="si">&lt;link-itself&gt;</span><span class="s">`__</span> +</pre></div> +</li> +<li><p class="first">Lists</p> +<div class="highlight"><pre><span></span><span class="m">-</span> item 1 +<span class="m">-</span> item 2 + +<span class="m">*</span> item 1 +<span class="m">*</span> itme 2 + +<span class="m">#.</span> item 1 +<span class="m">#.</span> item 2 + +<span class="m">1.</span> item 1 +<span class="m">2.</span> item 2 +</pre></div> +<p>First two lists are unordered next two are ordered.</p> +</li> +<li><p class="first">Code</p> +<ul> +<li><p class="first">Inline</p> +<div class="highlight"><pre><span></span><span class="na">:code:</span><span class="nv">`your-code`</span> +</pre></div> +</li> +<li><p class="first">Code block</p> +<div class="highlight"><pre><span></span><span class="p">..</span> <span class="ow">code-block</span><span class="p">::</span> <span class="k">language(optional)</span> + +<span class="s"> Your code</span> +<span class="s"> in multiple lines. You may enable line numbers too.</span> +</pre></div> +</li> +</ul> +</li> +<li><p class="first">Tables</p> +<div class="highlight"><pre><span></span>+----------------+----------------+ +<span class="o">|</span> Header Cell | Header Cell | ++================+================+ +<span class="o">|</span> Data cell | Data Cell | ++----------------+----------------+ +<span class="o">|</span> Header Cell | Header Cell | ++----------------+----------------+ +</pre></div> +</li> +<li><p class="first">Raw HTML block</p> +<div class="highlight"><pre><span></span><span class="p">..</span> <span class="ow">raw</span><span class="p">::</span> html + + &lt;put&gt; + your html code here + &lt;/put&gt; +</pre></div> +</li> +<li><p class="first">Notes, warnings</p> +<div class="highlight"><pre><span></span><span class="p">..</span> <span class="ow">note</span><span class="p">::</span> + + Put your note here. + +<span class="p">..</span> <span class="ow">warning</span><span class="p">::</span> + + Put your warning here. + +<span class="p">..</span> <span class="ow">important</span><span class="p">::</span> + + Put instructions here. + +<span class="p">..</span> <span class="ow">admonition</span><span class="p">::</span> custom-text + + Custom description here. +</pre></div> +</li> +</ul> +<p>These all are supported by GitHub very well. For more exhautive list specific to Sphinx see <a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html">this</a> link.</p> +<div class="section" id="tips"> +<h2>Tips</h2> +<ul class="simple"> +<li>There must be a blank line before and after any directive. Such as after title or code block, tables etc.</li> +<li>The options and content of a directives must be 1 tab indented to the directives.</li> +</ul> +</div> +How I implemented WakaTime embeddable Coding Graph GHA?2021-02-02T21:47:00+05:302021-02-02T21:47:00+05:30Avinaltag:avinal.space,2021-02-02:/posts/development/wakatime-readme.html<p class="first last">f you use WakaTime to track your coding activity. You can add that to your README as a bar graph or embed it in your blog/portfolio. Just add this action to any of your repositories and there you have it.</p> +<a href="https://github.com/avinal/Profile-Readme-WakaTime"><img src="https://raw.githubusercontent.com/avinal/Profile-Readme-WakaTime/b281d074ee75f9626b39d10e2e518c6a297208a3/waka.png" class="img-fluid"></a><div class="section" id="implementation-details"> +<h2>Implementation Details</h2> +<p>This GitHub Action is divided into three parts. I didn't want to use Docker but it seems it doesn't work well without it. Let dive a little into technical details. Three parts are as below.</p> +<ol class="arabic simple"> +<li><a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py">main.py</a> python script. This script contains many procedures.</li> +</ol> +<ul> +<li><p class="first"><a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py#L52">Getting JSON data file via WakaTime API</a></p> +<blockquote> +<div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">get_stats</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">:</span> + <span class="o">...</span> + <span class="k">return</span> <span class="n">data_list</span> +</pre></div> +</blockquote> +<p>This function parses the JSON file received and scraps out the useful data as a list of lists. Data scraped are language list, time spent on each language, percentage of the time, start date, and end date. For this action, I have limited the number of languages to 5 however it should be very easy to increase that number.</p> +</li> +<li><p class="first"><a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py#L13">Setting the Timeline</a></p> +<blockquote> +<div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">this_week</span><span class="p">(</span><span class="n">dates</span><span class="p">:</span> <span class="nb">list</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span> +<span class="o">...</span> +<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;Coding Activity During: </span><span class="si">{</span><span class="n">week_start</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%d</span><span class="s1"> %B, %Y&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">week_end</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%d</span><span class="s1"> %B, %Y&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> +</pre></div> +</blockquote> +<p>The start date and end date scraped in the last function are used here to set the timeline. Because date in JSON is provided in UTC as below :</p> +<blockquote> +<div class="highlight"><pre><span></span><span class="err">da</span><span class="kc">te</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;YYYY-MM-DDTHH:MM:SSZ&quot;</span><span class="w"></span> +</pre></div> +</blockquote> +<p>I striped it to simple dates only. We can set them manually by taking the current time from the system. But that method is flawed. But this method ensures that JSON was received latest and the request was successful. Any anomaly will point to a failure in request.</p> +</li> +<li><p class="first"><a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py#L21">Creating a bar graph</a></p> +<blockquote> +<div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">make_graph</span><span class="p">(</span><span class="n">data</span><span class="p">:</span> <span class="nb">list</span><span class="p">):</span> + <span class="o">...</span> + <span class="n">savefig</span><span class="p">(</span><span class="o">...</span><span class="p">)</span> +</pre></div> +</blockquote> +<p>Lastly, it is time to generate the graph and save them as an image. This function uses the data scraped in the first step. Creating a bar graph using <cite>matplotlib</cite> is easy. Decorating was a bit difficult. I wanted this graph to merge with GitHub's look so I chose to color the bar as GitHub colors the languages. That data is stored as <cite>colors.json</cite>. Many of the languages have slightly different spelling in GitHub as compared to WakaTime. So some languages are shown in default color. That can be improved if we notice that language and change its color manually. Lastly, the graph is saved both as SVG and PNG. SVGs are better to put on a responsive page.</p> +</li> +</ul> +<ol class="arabic" start="2"> +<li><p class="first"><a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/entrypoint.sh">entrypoint.py</a> shell script. This shell script clones the repository copies the image and pushes changes to the master. There were several problems. First of all authentication. This was solved by using a remote repository address using GitHub Token. And it seems that GitHub doesn't allow to commit without a username and email. So I used <strong>github-actions</strong> bot email.</p> +<blockquote> +<div class="highlight"><pre><span></span>remote_repo-<span class="s2">&quot;https://</span><span class="si">${</span><span class="nv">GITHUB_ACTOR</span><span class="si">}</span><span class="s2">:</span><span class="si">${</span><span class="nv">INPUT_GITHUB_TOKEN</span><span class="si">}</span><span class="s2">@github.com/</span><span class="si">${</span><span class="nv">GITHUB_REPOSITORY</span><span class="si">}</span><span class="s2">.git&quot;</span> +git config user.email <span class="s2">&quot;41898282+github-actions[bot]@users.noreply.github.com&quot;</span> +git config user.name <span class="s2">&quot;GitHub Actions&quot;</span> +</pre></div> +</blockquote> +</li> +</ol> +<blockquote> +<p><code>41898282</code> is the id assigned to the github-actions bot. Don't ask where I found them 🙂.</p> +<p>Another problem was to separate repository name from combined <em>username/repository-name</em> provided by <cite>${GITHUB_REPOSITORY}</cite>. GitHub doesn't provides a direct way to get just the repo name. We used <em>Internal Field Separator</em>. It returns an array and works similar to <code>split()</code> command in Python and Java.</p> +<blockquote> +<div class="highlight"><pre><span></span><span class="c1"># &#39;/&#39; is the seperator</span> +IFS-<span class="s1">&#39;/&#39;</span> <span class="nb">read</span> -ra reponame <span class="o">&lt;&lt;&lt;</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">GITHUB_REPOSITORY</span><span class="si">}</span><span class="s2">&quot;</span> +<span class="c1"># returned {username, repository}</span> +repository-<span class="s2">&quot;</span><span class="si">${</span><span class="nv">reponame</span><span class="p">[1]</span><span class="si">}</span><span class="s2">&quot;</span> +</pre></div> +</blockquote> +</blockquote> +<p>After that, all other commands are pretty straight. Commit the added files and push them.</p> +<ol class="arabic simple" start="3"> +<li><a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/Dockerfile">Dockerfile</a> <strong>IMPORTANT</strong> It took a lot of time to reach this state 🥱. This is where all the magic happens. I am running <cite>ubuntu:latest</cite> inside the container. I first update the distribution. Then install the required python packages. Lastly, I invoke the python script and shell script.</li> +</ol> +<p>There was an almost impossible problem, I searched hundreds of posts that <em>how can I access the generated files inside Docker container</em>, but no luck. But at last, I found a workaround(obviously otherwise you wouldn't be reading this by now 🤣) each command is run in a separate virtual sub-container. As the command ends its output is also lost but not when you club multiple commands together. At least not until every command is finished. The generated files are available to the next clubbed process. I did that by combining the python script run and shell script run.</p> +<div class="highlight"><pre><span></span><span class="k">CMD</span><span class="w"> </span>python3 /main.py <span class="o">&amp;&amp;</span> /entrypoint.sh +</pre></div> +<p>This part is the smallest yet took the most time and tries while developing this action.</p> +</div> +<div class="section" id="how-to-use-this-github-actions"> +<h2>How to use this GitHub Actions?</h2> +<ol class="arabic"> +<li><p class="first">First get your WakaTime API Key. You can get it from your [WakaTime](<a class="reference external" href="https://wakatime.com">https://wakatime.com</a>) account settings.</p> +</li> +<li><p class="first">Save WakaTime API Key to Repository Secret. Find that by clicking the Settings tab. Keep the name of the secret as <strong>WAKATIME_API_KEY</strong>.</p> +</li> +<li><p class="first">Add the following line in your README.md of your repo.</p> +<blockquote> +<div class="highlight"><pre><span></span><span class="p">&lt;</span><span class="nt">img</span> <span class="na">src-</span><span class="err">&quot;</span><span class="na">https:</span><span class="err">//</span><span class="na">github</span><span class="err">.</span><span class="na">com</span><span class="err">/&lt;</span><span class="na">username</span><span class="p">&gt;</span>/<span class="p">&lt;</span><span class="nt">repository-name</span><span class="p">&gt;</span>/blob/<span class="p">&lt;</span><span class="nt">branch-name</span><span class="p">&gt;</span>/images/stat.svg&quot; alt-&quot;Alternative Text&quot;/&gt; +Example: <span class="p">&lt;</span><span class="nt">img</span> <span class="na">src-</span><span class="err">&quot;</span><span class="na">https:</span><span class="err">//</span><span class="na">github</span><span class="err">.</span><span class="na">com</span><span class="err">/</span><span class="na">avinal</span><span class="err">/</span><span class="na">avinal</span><span class="err">/</span><span class="na">blob</span><span class="err">/</span><span class="na">main</span><span class="err">/</span><span class="na">images</span><span class="err">/</span><span class="na">stat</span><span class="err">.</span><span class="na">svg</span><span class="err">&quot;</span> <span class="na">alt-</span><span class="err">&quot;</span><span class="na">Avinal</span> <span class="na">WakaTime</span> <span class="na">Activity</span><span class="err">&quot;</span><span class="p">/&gt;</span> +</pre></div> +</blockquote> +</li> +</ol> +<blockquote> +You can use this method to embed in web pages too. <strong>Do not use the markdown method of inserting images. It does not work sometimes.</strong></blockquote> +<ol class="arabic" start="4"> +<li><p class="first">Click the <strong>Action</strong> tab and <strong>choose to set up a workflow yourself</strong>.</p> +</li> +<li><p class="first">Copy the following code into the opened file, you can search for <strong>WakaTime Stat</strong> in the marketplace tab for assistance.</p> +<blockquote> +<div class="highlight"><pre><span></span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">WakaTime status update</span><span class="w"></span> + +<span class="nt">on</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">schedule</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="c1"># Runs at 12 am &#39;0 0 * * *&#39; UTC</span><span class="w"></span> +<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">cron</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;1</span><span class="nv"> </span><span class="s">0</span><span class="nv"> </span><span class="s">*</span><span class="nv"> </span><span class="s">*</span><span class="nv"> </span><span class="s">*&quot;</span><span class="w"></span> + +<span class="nt">jobs</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">update-readme</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Update the WakaTime Stat</span><span class="w"></span> +<span class="w"> </span><span class="nt">runs-on</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ubuntu-latest</span><span class="w"></span> +<span class="w"> </span><span class="nt">steps</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="c1"># Use avinal/Profile-Readme-WakaTime@&lt;latest-release-tag&gt; for latest stable release</span><span class="w"></span> +<span class="w"> </span><span class="c1"># Do not change the line below except the word master with tag number maybe</span><span class="w"></span> +<span class="w"> </span><span class="c1"># If you have forked this project you can use &lt;username&gt;/Profile-Readme-WakaTime@master instead</span><span class="w"></span> +<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">avinal/Profile-Readme-WakaTime@master</span><span class="w"></span> +<span class="w"> </span><span class="nt">with</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="c1"># WakaTime API key stored in secrets, do not directly paste it here</span><span class="w"></span> +<span class="w"> </span><span class="nt">WAKATIME_API_KEY</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.WAKATIME_API_KEY }}</span><span class="w"></span> +<span class="w"> </span><span class="c1"># Automatic github token</span><span class="w"></span> +<span class="w"> </span><span class="nt">GITHUB_TOKEN</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ github.token }}</span><span class="w"></span> +<span class="w"> </span><span class="c1"># Branch - newer GitHub repositories have &quot;main&quot; as default branch, change to main in that case, default is master</span><span class="w"></span> +<span class="w"> </span><span class="nt">BRANCH</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;master&quot;</span><span class="w"></span> +<span class="w"> </span><span class="c1"># Manual Commit messages - write your own messages here</span><span class="w"></span> +<span class="w"> </span><span class="nt">COMMIT_MSG</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Automated</span><span class="nv"> </span><span class="s">Coding</span><span class="nv"> </span><span class="s">Activity</span><span class="nv"> </span><span class="s">Update</span><span class="nv"> </span><span class="s">:alien:&quot;</span><span class="w"></span> +</pre></div> +</blockquote> +</li> +<li><p class="first">Please wait till 12 AM UTC to run this workflow automatically. Or you can force run it by going to the Actions tab. Or you can add the following lines under <cite>on:</cite> to run with every push. Search for 12 AM UTC to find the equivalent time in your time zone.</p> +<blockquote> +<div class="highlight"><pre><span></span><span class="nt">on</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">push</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">branches</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="w"> </span><span class="nv">master</span><span class="w"> </span><span class="p p-Indicator">]</span><span class="w"></span> +<span class="w"> </span><span class="nt">schedule</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">cron</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;1</span><span class="nv"> </span><span class="s">0</span><span class="nv"> </span><span class="s">*</span><span class="nv"> </span><span class="s">*</span><span class="nv"> </span><span class="s">*&#39;</span><span class="w"></span> +</pre></div> +</blockquote> +</li> +</ol> +</div> +<div class="section" id="my-coding-activity"> +<h2>My Coding Activity</h2> +<img class="img-fluid" src="https://raw.githubusercontent.com/avinal/avinal/main/images/stat.svg"></div> +How I Created This Blog?2021-01-26T16:47:00+05:302021-01-26T16:47:00+05:30Avinaltag:avinal.space,2021-01-26:/posts/development/twilight-blog.html<p class="first last">As you would have guessed by now, this blog is created using one such awesome SSG named <strong>Pelican</strong>. Pelican is simple, customizable and offers lots of themes and plugins. Pelican is python based SSG and is available through <tt class="docutils literal">pip</tt>.</p> +<p><span class="html-raw"><div class="alert alert-info" role="alert">This article may not be for you if you are a web developer. You already got better options. 😉</div></span></p> +<p>There are lots of ways to create a personal website or a blog. You can design your own user interface and write the backend code. But not everyone is a web developer. And here comes <abbr title="Static Site Generator">SSGs</abbr> to the rescue. <strong>Static Site Generators</strong> are little more than just website generators. In general, if you are looking for a simple blog, its better to use SSG than writing a lot of html and css. They are simple and elegant. Easy to maintain and you can add lots of customizations to your site without breaking or bloating your blog. There are lots of SSGs, <a class="reference external" href="https://jekyllrb.com/">Jekyll</a>, <a class="reference external" href="https://blog.getpelican.com/">Pelican</a> and more complex ones like <a class="reference external" href="https://www.gatsbyjs.com/">Gatsby</a>, <a class="reference external" href="https://gohugo.io/">Hugo</a> .</p> +<p>As you would have guessed by now, this blog is created using one such awesome SSG named <strong>Pelican</strong>. Pelican is simple, customizable and offers lots of <a class="reference external" href="http://www.pelicanthemes.com/">themes</a> and <a class="reference external" href="https://github.com/getpelican/pelican-plugins">plugins</a>. Pelican is python based SSG and is available through <code>pip</code>.</p> +<div class="highlight"><pre><span></span><span class="c1"># for reStructuredText only (recommended)</span> +python -m pip install pelican + +<span class="c1"># for markdown and reStructuredText both</span> +python -m pip install <span class="s2">&quot;pelican[markdown]&quot;</span> +</pre></div> +<p>You can start a pelican project by typing following command. It will create a basic template and build configurations.</p> +<div class="highlight"><pre><span></span>pelican-quickstart + +<span class="c1"># output</span> +yourproject/ +├── content <span class="c1"># Put your content here</span> +│ └── <span class="o">(</span>pages<span class="o">)</span> +├── output <span class="c1"># Output files</span> +├── tasks.py +├── Makefile <span class="c1"># Makefile to run build and publish command</span> +├── pelicanconf.py <span class="c1"># Main settings file</span> +└── publishconf.py <span class="c1"># Settings to use when ready to publish</span> +</pre></div> +<p>Next step is to choose themes. As I said earlier there are lots of <a class="reference external" href="http://www.pelicanthemes.com/">themes</a> . And it is easy to create your own theme. Check <a class="reference external" href="https://docs.getpelican.com/en/latest/themes.html">here</a> to create your own theme. My choice of theme was <a class="reference external" href="https://nairobilug.github.io/pelican-alchemy/">pelican-alchemy</a> . This is a simple and great theme. Installing and removing themes in pelican is very easy.</p> +<div class="highlight"><pre><span></span><span class="c1"># list all installed themes</span> +pelican-themes -l +<span class="c1"># output</span> +simple +alchemy +notmyidea + +<span class="c1"># install new theme</span> +pelican-themes -i theme-path + +<span class="c1"># remove a theme</span> +pelican-themes -r theme-name +</pre></div> +<p>To use a particular theme, set the <code>THEME</code> variable in the <strong>pelicanconf.py</strong> file.</p> +<div class="highlight"><pre><span></span><span class="n">THEME</span> <span class="o">=</span> <span class="s1">&#39;alchemy&#39;</span> +</pre></div> +<p>You can also use a theme that is not installed if you have all the required theme files. Just set this variable to its path.</p> +<div class="highlight"><pre><span></span><span class="n">THEME</span> <span class="o">=</span> <span class="s1">&#39;path-to-theme-directory&#39;</span> +</pre></div> +<p>Various themes will have different feature, choose according to your need, or you can always add a feature through plugin. The next step is to build and check your blog. Pelican got it all set up.</p> +<div class="highlight"><pre><span></span><span class="c1"># build your website</span> +make html +<span class="c1"># output</span> +<span class="s2">&quot;pelican&quot;</span> <span class="s2">&quot;/mnt/z/my_git/avinal.github.io/content&quot;</span> -o <span class="s2">&quot;/mnt/z/my_git/avinal.github.io/output&quot;</span> -s <span class="s2">&quot;/mnt/z/my_git/avinal.github.io/pelicanconf.py&quot;</span> +Done: Processed <span class="m">6</span> articles, <span class="m">0</span> drafts, <span class="m">1</span> page, <span class="m">0</span> hidden pages and <span class="m">0</span> draft pages <span class="k">in</span> <span class="m">2</span>.43 seconds. + +<span class="c1"># build and test/serve on localhost</span> +make serve +<span class="c1"># output</span> +<span class="s2">&quot;pelican&quot;</span> -l <span class="s2">&quot;/mnt/z/my_git/avinal.github.io/content&quot;</span> -o <span class="s2">&quot;/mnt/z/my_git/avinal.github.io/output&quot;</span> -s <span class="s2">&quot;/mnt/z/my_git/avinal.github.io/pelicanconf.py&quot;</span> + +Serving site at: <span class="m">127</span>.0.0.1:8000 - Tap CTRL-C to stop +</pre></div> +<p>Now open your browser and open <a class="reference external" href="127.0.0.1:8000">127.0.0.1:8000</a> or <a class="reference external" href="localhost:8000">localhost:8000</a>. You should be able to see your new blog. Stop local server using <code>CTRL+C</code>. Next step is to publish it to github pages. Pelican has tools for this too. But wait we can do something more interesting here. Why not let GitHub take care of both building and publishing? Just push this project to a GitHub repository and set up GitHub pages. See <a class="reference external" href="https://pages.github.com/">this</a> help for instructions on that. Before pushing to GitHub add this little script to your project.</p> +<div class="highlight"><pre><span></span><span class="ch">#! /bin/bash</span> +<span class="c1">## file: publi.sh</span> + +<span class="c1"># install tools</span> +sudo apt-get install -y git make python3 python3-pip python3-setuptools python3-wheel + +<span class="c1"># setup github config</span> +git config user.email <span class="s2">&quot;your-email&quot;</span> +git config user.name <span class="s2">&quot;your-username&quot;</span> + +<span class="c1"># install dependencies</span> +sudo pip3 install -r requirements.txt + +<span class="c1"># pelican commands - install theme put your theme in themes directory</span> +pelican-themes --install themes/theme-name + +<span class="c1"># publish to github pages</span> +ghp-import -m <span class="s2">&quot;Generate Pelican site&quot;</span> -b gh-pages output + git push -f origin gh-pages +</pre></div> +<p>Now once your project is on GitHub, go to the <strong>Actions</strong> tab and click on <em>set up a workflow yourself</em> and paste the following code into the file and commit it.</p> +<div class="highlight"><pre><span></span><span class="c1"># file: publish.yml</span><span class="w"></span> +<span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Publish Blog</span><span class="w"></span> +<span class="nt">on</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">push</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">branches</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="w"> </span><span class="nv">main</span><span class="w"> </span><span class="p p-Indicator">]</span><span class="w"></span> +<span class="w"> </span><span class="nt">pull_request</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">branches</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="w"> </span><span class="nv">main</span><span class="w"> </span><span class="p p-Indicator">]</span><span class="w"></span> + +<span class="nt">jobs</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">build</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">runs-on</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ubuntu-latest</span><span class="w"></span> +<span class="w"> </span><span class="nt">steps</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">actions/checkout@v2</span><span class="w"></span> +<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">set up permissions</span><span class="w"></span> +<span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">chmod +x publi.sh</span><span class="w"></span> +<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Run a multi-line script</span><span class="w"></span> +<span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">./publi.sh</span><span class="w"></span> +</pre></div> +<p>If you have done everything correctly then go to <em>https://username.github.io</em> and you should see your blog. From now on whenever you want to add an article, just write it, test locally and push. Yay your blog is ready.</p> +<p><span class="html-raw"><h2 style=font-family:Exodar;font-weight:lighter;">But My Blog is Special 🥰</h2></span></p> +<p>My blog looks different, that is because I customized this theme a lot, especially headers, footers, and link appearance. And sorry I won't be publish my theme any time sooner. But I am listing down all the resources I have used for finally getting this result. You can always get my help by sending me a <span class="html-raw"><a href="mailto:avinal.xlvii@gmail.com" class="fa fa-envelope" style="text-decoration: none;"></a></span> or starting a discussion on <span class="html-raw"><a href="https://github.com/avinal/avinal/discussions/2" class="fab fa-github" style="text-decoration: none;"></a></span>.</p> +<ul class="simple"> +<li><a class="reference external" href="https://blog.getpelican.com/">Pelican Blog</a></li> +<li><a class="reference external" href="https://docs.getpelican.com/en/latest/">Pelican Docs</a></li> +<li><a class="reference external" href="http://www.pelicanthemes.com/">Pelican Themes</a></li> +<li><a class="reference external" href="https://github.com/nairobilug/pelican-alchemy">Pelican Alchemy Theme</a></li> +<li><a class="reference external" href="https://codepen.io/saransh/pen/BKJun">Parallax Star background in CSS</a></li> +<li><a class="reference external" href="https://codepen.io/kowlor/pen/ZYYQoy">Solar System animation</a></li> +<li><span class="html-raw"><a href="https://www.dafont.com/exodar.font" style="font-family: Exodar;font-weight: lighter;text-decoration: none;">EXODAR Font</a></span></li> +<li><a class="reference external" href="https://fonts.google.com/specimen/Overpass+Mono">Overpass Mono</a></li> +<li><a class="reference external" href="https://fontawesome.com/how-to-use/on-the-web/setup/hosting-font-awesome-yourself">Font Awesome</a></li> +</ul> +<p><span class="html-raw"><div class="alert alert-warning" role="alert">Some of the fonts I have used in my blog may not be available for commercial use. Please check if you intend to do so. Alternatively you may use fonts from this wonderful collection, <a href="https://www.websiteplanet.com/blog/best-free-fonts/">70+ Best Free Fonts for Designers – Free for Commercial Use in 2021</a> <i>(Thanks Ritta Blens for this suggestion)</i></div></span></p> +<p><span class="html-raw"><p align=center>Thanks!</p></span></p> +Introduction to Prime Numbers2021-01-09T22:29:00+05:302021-01-09T22:29:00+05:30Avinaltag:avinal.space,2021-01-09:/posts/prime/prime1.html<p class="first last">A prime is a positive integer <em>p</em> having exactly two positive divisors, namely <em>1</em> and <em>p</em>. An integer <em>n</em> is composite if <em>n</em> &gt; <em>1</em> and <em>n</em> is not prime. (The number 1 is considered neither prime nor composite.)</p> +<blockquote class="epigraph"> +A prime is a positive integer <em>p</em> having exactly two positive divisors, namely <em>1</em> and <em>p</em>. An integer <em>n</em> is composite if <em>n</em> &gt; <em>1</em> and <em>n</em> is not prime. (The number 1 is considered neither prime nor composite.)</blockquote> +<p>We can frame a brute force algorithm for checking primality of numbers using the above statement.</p> +<div class="highlight"><pre><span></span><span class="kt">bool</span><span class="w"> </span><span class="nf">is_prime</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">number</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">factor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;=</span><span class="w"> </span><span class="n">number</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">number</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<span class="w"> </span><span class="n">factor</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<span class="w"> </span><span class="p">}</span><span class="w"></span> +<span class="w"> </span><span class="p">}</span><span class="w"></span> +<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="n">factor</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="o">?</span><span class="w"> </span><span class="nb">true</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">false</span><span class="p">;</span><span class="w"></span> +<span class="p">}</span><span class="w"></span> +</pre></div> +HRT Systems Internship Interview Experience2021-01-04T21:47:00+05:302021-01-04T21:47:00+05:30Avinaltag:avinal.space,2021-01-04:/posts/blog/hrt-interview-1.html<p class="first last">I applied for <strong>Systems Internship - Summer 2021</strong> back in December 2020 at <a class="reference external" href="https://www.hudsonrivertrading.com">Hudson River Trading</a> , New York.....Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt.</p> +<p>I applied for <strong>Systems Internship - Summer 2021</strong> back in December 2020 at <a class="reference external" href="https://www.hudsonrivertrading.com">Hudson River Trading</a> , New York. The internship description was: -</p> +<blockquote class="epigraph"> +<p>We are looking for highly motivated students who are eager to learn and excited about systems to join us for our summer internship +program. As a systems intern, you may have the opportunity to work on projects in the following areas:</p> +<ul class="simple"> +<li>Programming/scripting (Golang, Python, C++, C)</li> +<li>FOSS development</li> +<li>HPC, Cluster computing</li> +<li>System Administration</li> +<li>Linux, Debian</li> +<li>Linux-based computer security</li> +<li>Data Storage</li> +<li>Large deployment or config management</li> +</ul> +</blockquote> +<p>The first step was a coding test on the Codility platform. If you have used any of the online coding platforms, this is similar. It was a <abbr title="90 mins">2.5 hrs</abbr> test consisting of 3 questions. They let you use <abbr title="documentation, man pages, etc.">online references</abbr> but +<strong>do not copy the code</strong> as it will highly reduce your chances of qualifying for this first stage. You can choose between <strong>C/C++</strong>, +<strong>Python</strong> and <strong>Golang</strong> (no Java 😪).</p> +<p>Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt. +Also, they expected a clear and concise approach. Two of the most important points in their instructions were: -</p> +<blockquote class="epigraph"> +<ul class="simple"> +<li>While correctness and performance are the most important factors for evaluation, we will take test duration into account as well.</li> +<li>Please understand that this test is meant to be challenging. A perfect score is not necessary to move on to future interview rounds, so do the best you can!</li> +</ul> +</blockquote> +<p>So, you must be near perfect in your approach as well as on time. I did them kind of quickly. They will show you a summary of your +submission but not the results. It will take almost 2 weeks to get back to you for further steps.</p> +<p>Next, I received a mail invitation for a telephonic interview. <strong>This interview will last about 45 minutes and will be technical but will not require coding. Interview topics may include your background, programming languages, and Unix/Linux concepts</strong>. Once you receive this +mail you can then decide a time slot for an interview.</p> +<p>I was not sure what they will ask if this is not a coding interview. The interviewer was very polite, and he was explaining the questions +too. Questions were not so tricky but practical and real-life. Since it was <strong>not for SDE role</strong>, the questions were mostly related to +Linux/Unix, C++ (mainly pointers and memory), Python/Bash scripting, automation, knowledge of tools (IDEs, Editors, System Administration +Tools) and previous experiences. The interview would often explain why he is asking this question, this was very nice. Then some common +interview questions, why do you want to work for this role? What makes you fit for this role? etc.</p> +<p>One thing that I want to point out is that the interviewer was repeatedly checking my resume, and for the most part he did not ask +anything that was not on my resume. So, my tip is to create a nice resume with genuine work/tool experiences. And when you are applying +for such a role, it would be helpful if you mention mathematics or other courses that you have taken. <em>Do not lie on your resume</em>. They +will easily catch that.</p> +<p>The other thing is to keep your words short and clear; I was not great at communication, but you can be. If the interviewer allows then +use examples for the things you cannot explain. I used nice examples. At last, he gave me short feedback on how well I performed.</p> +<p>At last, I want to point out things I should not have done. The first is, I did not ask much about the role, you must do this at least +once. Second, I am talkative, I do not know if the interviewer was not faking his expressions (because he would often discuss in-depth), +but not all interviewers will be the same. So, do not talk too much, nor too less. At last work on your communication skill, mostly how +you to present things and how to answer technical as well as behavioral questions. I was not fluent, but my way of presentation might +have saved me.</p> +Move WSL 2 Safely to another Drive2020-12-31T19:07:00+05:302020-12-31T19:07:00+05:30Avinaltag:avinal.space,2020-12-31:/posts/development/wsl1.html<p class="first last">It is real pain when you have small SSD and Windows Subsystem for Linux (WSL) is growing exponentially in size. There is no easy way to move the WSL installation to another drive. Here in this blog I will discuss how to tackle this problem with bite size steps.</p> +<p>It is real pain when you have small SSD and Windows Subsystem for Linux (WSL) is growing exponentially in size. There is no easy way to move +the WSL installation to another drive. Here in this blog I will discuss how to tackle this problem with bite size steps.</p> +<ol class="arabic simple"> +<li>Open a PowerShell <img alt="powershell" class="align-middle" src="/images/powershell.png" style="width: 5%;" /> or Command Prompt <img alt="command-line" class="align-middle" src="/images/command-line.png" style="width: 5%;" /> with <em>Admin</em> access. For this you can use <img alt="WinKey" class="align-middle" src="/images/windows10.png" style="width: 5%;" /> + X shortcut and select <strong>Windows PowerShell(Admin)</strong>.</li> +<li>Check if the WSL 2 installation you are planning to move is is currently running/stopped.</li> +</ol> +<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="n">-l</span> <span class="n">-v</span> +<span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> + <span class="n">NAME</span> <span class="n">STATE</span> <span class="n">VERSION</span> +<span class="p">*</span> <span class="n">Ubuntu</span> <span class="n">Running</span> <span class="n">2</span> + <span class="n">Kali</span> <span class="n">Stopped</span> <span class="n">2</span> +</pre></div> +<ol class="arabic simple" start="3"> +<li>If its running then you must stop the particular WSL distribution. (<em>Ubuntu</em> used as example)</li> +</ol> +<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="n">-t</span> <span class="n">Ubuntu</span> +</pre></div> +<ol class="arabic simple" start="4"> +<li>Export to some folder. (Here exporting <em>Ubuntu</em> as <em>ubuntu-ex.tar</em> to <em>Z:wsl2</em>)</li> +</ol> +<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="p">-</span><span class="n">-export</span> <span class="n">Ubuntu</span> <span class="s2">&quot;Z:\export\ubuntu-ex.tar&quot;</span> +</pre></div> +<ol class="arabic simple" start="5"> +<li>Unregister previous WSL installation</li> +</ol> +<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="p">-</span><span class="n">-unregister</span> <span class="n">Ubuntu</span> +</pre></div> +<ol class="arabic simple" start="6"> +<li>Create a new folder and import your WSL installation to that folder.</li> +</ol> +<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="nb">New-Item</span> <span class="n">-Path</span> <span class="s2">&quot;Z:\wsl2&quot;</span> <span class="n">-ItemType</span> <span class="n">Directory</span> + + <span class="n">Directory</span><span class="p">:</span> <span class="n">Z</span><span class="p">:\</span> + +<span class="n">Mode</span> <span class="n">LastWriteTime</span> <span class="n">Length</span> <span class="n">Name</span> +<span class="p">----</span> <span class="p">-------------</span> <span class="p">------</span> <span class="p">----</span> +<span class="n">d</span><span class="p">-----</span> <span class="n">31</span><span class="p">-</span><span class="n">12</span><span class="p">-</span><span class="n">2020</span> <span class="n">21</span><span class="p">:</span><span class="n">03</span> <span class="n">wsl2</span> + +<span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="p">-</span><span class="n">-import</span> <span class="n">Ubuntu</span> <span class="s2">&quot;Z:\wsl2&quot;</span> <span class="s2">&quot;Z:\export\ubuntu-ex.tar&quot;</span> +</pre></div> +<ol class="arabic simple" start="7"> +<li>Check after import is complete</li> +</ol> +<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="n">-l</span> <span class="n">-v</span> +<span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> + <span class="n">NAME</span> <span class="n">STATE</span> <span class="n">VERSION</span> +<span class="p">*</span> <span class="n">Ubuntu</span> <span class="n">Running</span> <span class="n">2</span> + <span class="n">Kali</span> <span class="n">Stopped</span> <span class="n">2</span> +</pre></div> +<ol class="arabic simple" start="8"> +<li>Mark one of your WSL distribution as <em>(default)</em>.</li> +</ol> +<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="n">-s</span> <span class="n">Ubuntu</span> +</pre></div> +<ol class="arabic simple" start="9"> +<li>After exporting your default user will be set as <span class="html-raw"><i style="color:red">root</i></span> , to change it to your desired username, run following command</li> +</ol> +<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">ubuntu</span> <span class="n">config</span> <span class="p">-</span><span class="n">-default-user</span> <span class="n">user_name</span> +</pre></div> +<ol class="arabic simple" start="10"> +<li>Finally run <code>wsl</code> and you have successfully moved your WSL 2 installation to another drive.</li> +</ol> +Create the VLC User Documentation for one Mobile Port(Android)2020-12-01T23:47:00+05:302020-12-31T23:19:00+05:30Avinaltag:avinal.space,2020-12-01:/posts/development/vlc-gsod-report.html<p class="first last">The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLC’s wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization.</p> +<div class="section" id="overview"> +<h2>OVERVIEW</h2> +<p>VideoLAN is a non-profit organization that develops software for playing video and other media formats. VLC media player (commonly known as just VLC) is a free and Open Source cross-platform multimedia player and framework that plays most multimedia files as well as DVDs, Audio CDs, VCDs, and various streaming protocols built by the VideoLAN organization and a team of volunteers. VLC for Android is a port of the VLC for Android OS.</p> +<p>The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLC’s wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization and an engaging and easy to follow for both technical and non-technical users. The original proposal can be found here.</p> +</div> +<div class="section" id="project-goals"> +<h2>PROJECT GOALS</h2> +<ul class="simple"> +<li>Propose a new structure for documentation e.g. Chapter Separation, Sections etc</li> +<li>Proper balance between technical and non-technical descriptions to serve all kinds of users.</li> +<li>Adequate amount of screenshots in each section and other supporting media to make documentation more appealing.</li> +<li>Optimized for all Screen Sizes. Especially for Mobile Devices.</li> +<li>Ease of navigation</li> +</ul> +</div> +<div class="section" id="community-bonding"> +<h2>COMMUNITY BONDING</h2> +<p>This period was mostly utilized for collecting more information and many internal meetings to shape the projects and bonding with fellow writers, developers(mentors). I got to know more about the VLC organization and the project. We decided to create a skeleton of the project and then follow a Issue-Merge Request-Review-Merge system to keep the commit history clean and maintain the proper review of the work before it is merged.</p> +<p>I initially proposed that the new documentation should also use the same tools(Sphinx and GitLab Pages) because if in future we want to merge all the documentation into a single one, it will be easier to migrate and will provide a consistency across all documentations. Later I got to know that this will be an independent project and may not be merged since it solves a lot of problems. I was already familiar with the tools so it took no time to get started.</p> +<p>Nicolas Pomepuy, who is the lead developer of VLC for Android was assigned as my primary mentor and Simon Latapie as secondary mentor.</p> +</div> +<div class="section" id="documentation-development-phase"> +<h2>DOCUMENTATION DEVELOPMENT PHASE</h2> +<p>Initial Preparation +I first moved my existing demo documentation to an entirely new repository with only the skeleton at the suggestion of my mentor. It was necessary to keep the commit history clean. The skeleton contained the empty directories representing the chapter separation. I got to learn “how to properly develop a project and contribute to open source”. This was a major lesson that got me familiar with the Merge Request and Review system.</p> +<p>The Development +The next part was to frame the actual documentation pages and push to the repository. Since there was a significant time-zone difference we agreed to discuss by creating issues and sometimes my emails. There was one meeting every fortnight to check the process and discuss further development and blockers. Nicolas was really helpful and patient, answering each of my big-small queries.</p> +<p>Work Done</p> +<style> +table,td,th { +border-collapse:collapse; +border: 1px solid #000000; +} +</style> +<table> +<tr> +<td><strong>Documentation</strong></td> +<td><a href="https://avinal.videolan.me/vlc-android-user/">VLC for Android User Documentation </a> +</td> +</tr> +<tr> +<td><strong>Project Repository</strong> +</td> +<td><a href="https://code.videolan.org/avinal/vlc-android-user">Projects · Avinal Kumar / VLC for Android User Documentation</a> +</td> +</tr> +<tr> +<td><strong>Commits</strong> +</td> +<td><a href="https://code.videolan.org/avinal/vlc-android-user/-/commits/master">Commits · Avinal Kumar / VLC for Android User Documentation</a> +</td> +</tr> +<tr> +<td><strong>Issues/Discussions</strong> +</td> +<td><a href="https://code.videolan.org/avinal/vlc-android-user/-/issues">Issues · Avinal Kumar / VLC for Android User Documentation</a> +</td> +</tr> +<tr> +<td><strong>Merge Requests</strong> +</td> +<td><a href="https://code.videolan.org/avinal/vlc-android-user/-/merge_requests">Merge Requests · Avinal Kumar / VLC for Android User Documentation</a> +</td> +</tr> +</table><p>Since the Android port of VLC can be installed on Android Smartphones/Tablets, Android TVs, Amazon Fire Devices and Chromebooks too, a full documentation will cover these all devices. Although these are different form factors, the features provided on each of them is exactly the same and the same documentation can be used for all these devices. As of now only Smartphones/Tablets are covered. And later additional pages will be added to reference different features/User Interface. Regardless of this addition the current documentation can serve a major part for all these form factors. +Completed/Remaining</p> +<table> +<tr> +<td><strong>Chapters</strong> +</td> +<td><strong>Sections</strong> +</td> +<td><strong>Status</strong> +</td> +</tr> +<tr> +<td><strong>Settings</strong> +</td> +<td> +<ul> +<li>General Settings +<li>Interface +<li>Video +<li>Subtitles +<li>Audio +<li>Casting +<li>Advanced +</li> +</ul> +</td> +<td><strong>ALL COMPLETED</strong> +<p> +<strong>FOR ALL FORM FACTORS</strong> +</td> +</tr> +<tr> + <td><strong>Video</strong> + </td> + <td> + <ul> + <li>Video Explorer + <li>Video Player + </li> + </ul> + </td> + <td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong> + </td> +</tr> +<tr> + <td><strong>Audio</strong> + </td> + <td> + <ul> + <li>Audio Explorer + <li>Audio Player + </li> + </ul> + </td> + <td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong> + </td> +</tr> +<tr> + <td><strong>Browse</strong> + </td> + <td> + <ul> + <li>Explorer + <li>Local Network + </li> + </ul> + </td> + <td><strong>ONLY SMB IN LOCAL NETWORK COMPLETED</strong> + </td> +</tr> +<tr> + <td><strong>Installation</strong> + </td> + <td> + <ul> + <li>Smartphones/Tablets + <li>Android TV + <li>Fire Devices + <li>Chromebooks + </li> + </ul> + </td> + <td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong> + </td> +</tr> +<tr> + <td><strong>User Interface</strong> + </td> + <td> + <ul> + <li>Smartphones/Tablets + <li>Android TV + <li>Fire Devices + <li>Chromebooks + </li> + </ul> + </td> + <td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong> + </td> +</tr> +<tr> + <td><strong>Support</strong> + </td> + <td> + <ul> + <li>FAQs + <li>Help + </li> + </ul> + </td> + <td><strong>IN PROGRESS</strong> + </td> +</tr> +<tr> + <td><strong>Guidelines</strong> + </td> + <td> + <ul> + <li>Contribution Guideline + <li>Screenshot Guidelines + <li>READMEs + </li> + </ul> + </td> + <td><strong>IN PROGRESS</strong> + </td> +</tr> +</table></div> +<div class="section" id="challenges"> +<h2>CHALLENGES</h2> +<p>The major obstacle was to get screenshots for all form factors. Since screenshots were the major part of this documentation it was necessary to provide proper screenshots in each chapter and with every step. For Android TV and Smartphone this was solved by using emulators instead of actual devices, but to emulate the actual scenario in an emulator was sometimes very difficult. +There were many occasions where I was not able to gather the exact information about devices other than smartphones/tables. Since all form factors share a common pool of features, my mentor suggested that I focus on smartphones/tables. And to create issues mentioning missing parts so that it could be solved later.</p> +</div> +<div class="section" id="thanks"> +<h2>THANKS</h2> +<p>I want to thank my mentors for being supporting and helpful. I want to thank every person at VLC and Google who were involved in this whole process. Thanks and Congrats to my fellow writer Abhishek Pratap Singh. This was a great opportunity to learn and meet awesome people. I learned a lot about Sphinx, reStructured Text and many other things.</p> +</div> +The Interstellar Twilight2020-09-28T22:47:00+05:302020-09-28T22:47:00+05:30Avinaltag:avinal.space,2020-09-28:/posts/blog/this-is-for-you.html<p class="first last">If in the Twilight of dreams we should meet once more, we shell talk again together and I shall sing to you a lullaby till you sleep again to meet me in the Twilight of another dream.</p> +<p>Yeah, it was a dream someday. I never imagined you. But I do remember glimpses of a wonderful person +in my deep slumber. When I go back to last year about the same time, I find myself a manic who gets +carried away with every emotion. Becoming too happy about something and then becoming too sad was so +common that I never noticed what I was risking.</p> +<p><strong>&quot;If in the Twilight of dreams we should meet once more, we shell talk again together and I shall sing to you a lullaby till you sleep again to meet me in the Twilight of another dream.&quot;</strong></p> +<p>But 1 year ago many things changed. A never seen dream came true. To be honest I was skeptical if all +this happening to me was true. Even until last December. Gradually things started falling into places. +And for the most part, the reality became more real. I can now easily see what is happening and why it +happened. Everything was so nice until we had a fight. Then another, and now it was every other day +story. It was a really hard time collecting everything together and act as nothing happened after every +single of those. Everything was plunging. I started imagining the end of something that I did not +imagine to happen in the first place.</p> +<p>But during all those times, there was a continual intuition that maybe there is something that we both +are missing. And that was maybe the root of all chaos. I never came to know that what it was neither did +you. But I do realize many mistakes I have been doing since we met.</p> +<p>I want to thank you for not losing hope in me. We both always tried to reduce tension as much as we could. +And thank you for many other ineffable things happened because of you.</p> +<p>As of now I can see things making sense. Every message, every talk now seems to make sense. I am more +deeply into this friendship if I was not ever before. The ecstasy of having you is other-worldly. I don't +know if I could ever adore a person this much but I adore this ravishing friendship. Only you or only +this friendship may mean nothing to me. But I am delighted to say that I have both and I have you.</p> +<p>Now, what is all with The Interstellar Twilight. Why this name ? Let me explain it for you. <strong>Interstellar</strong> +means between stars and <strong>Twilight</strong> means the soft glow when the sun is below the horizon. +<strong>The Interstellar Twilight</strong> means the glow between the stars or simply glow of a cluster of stars. A +single star shines but the glow is too low to be noticed against its brightness. But a lot stars together +gets a glow. So my friend we are such two stars and our friendship is that glow.</p> +प्रेम रतन धन पायो2019-09-21T15:47:00+05:302019-09-21T15:47:00+05:30Avinaltag:avinal.space,2019-09-21:/posts/article/for-sunshine.html<p class="first last">टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं । दादा-दादी कहा करते थे ये जिंदा पहाड़ हैं । सारी बातें सुनते हैं लोगों की । उनके दुख दर्द दूर करते हैं, ये देवता हैं ।</p> +<p style="border: 2px solid var(--cyan);border-radius: 7px;" align=center>This article was published in 18th edition of SRIJAN, the official magazine of <a href="https://nith.ac.in" style="text-decoration: none;">National Institute of Technology, Hamirpur</a>, India. The magazine can be accessed <a href="https://issuu.com/srijandesk/docs/srijan2020" style="text-decoration: none;">here</a>.<p><p>टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं । +दादा-दादी कहा करते थे ये जिंदा पहाड़ हैं । सारी बातें सुनते हैं लोगों की । उनके दुख दर्द दूर करते हैं, ये देवता हैं । आजकल जब रोज़ क्लास +आते जाते दूर पहाड़ों की चोटियाँ देखता हूँ तो उनकी विशालता का अनुभव होता हैं । एक पल को अगर ये मान लिया जाए की हमारी सारी धार्मिक किताबें +वो कहानियाँ हैं जो पथिक लेखकों के द्वारा लिखी गयी हैं तो सारी बातें साफ हो जाती है कि क्यूँ देवी-देवताओं ने हिमालय को अपनाया है। टूटता +तारा देखना अलौकिक है पर हिमालय की श्रेणियों से टूटता तारा देखना दैविक है । और वो कहते हैं न जिसमें न कोई तर्क हो न ही हाथों की सफाई वो +दैविक है। टूटते तारो के बारे में लोगों के बहुत सारे विश्वास हैं । कभी विभीषिका का पूर्वाभास माने जाने वाले इन टूटते तारे आज इच्छा पूरक के +प्रतीक हैं । कुछ लोगों का ये भी मानना है कि टूटते तारे दिवंगत लोगों का संकेत हैं । हिमालय की कन्दराओं में न जाने कितने ही ऋषि-मुनियों ने +तप करते हुए अपना जीवन अर्पित कर दिया । इसलिए हिमालय की पहाड़ों से टूटता तारा देखना दैविक हैं क्योंकि शायद वो तारे उन ऋषि-मुनियों की पवित्र +आत्माओं का संकेत हैं ।</p> +<p>प्रकृति की सुंदरता और कलाकारी हिमालय की कण-कण में झलकती है। प्रकृति ने प्रेम को भी हिमालय के जितना ही विशाल और अलौकिक बनाया है । ये एक +अलग चर्चा का विषय है कि हिमालय पहले आया या प्रेम। मैं तो प्रेम के पक्ष में हूँ । वो हर अणु-परमाणु जिन्होंने इतने बड़ा पहाड़ खड़ा किया वो सब +आपस में प्रेम से बंधे हुए हैं। ये पृथ्वी, सूर्य, चंद्रमा, आकाश-गंगा इत्यादि सब प्रेम से बंधे हुए हैं । और हिमाद्रि के छत पर मैं इसी प्रेम +के आगोश में आकर भावशून्य होकर तारों को निहार रहा था । तभी मानो सदियों की मन्नत पूरी हुई और मुझे एक टूटता तारा दिखा । आप मेरी स्थिति की +जटिलता का अनुभव इस प्रकार से लगा सकते हैं कि लोग टूटते तारे से मन्नत मांगते हैं और मैं टूटता तारा ही मन्नत में मांग रहा था । इससे पहले की +मैं पिछली जटिलता से बाहर आता की दूसरी जटिलता सामने आ पड़ी की तारा तो दिख गया पर मैं माँगूँ क्या ? और अगर आप सोच रहे की भाई पैसे मांग लो +शोहरत , नाम , शक्ति और पता नहीं क्या-क्या ? मांग तो लेता पर अगर आप मेरी जगह इसी स्थिति में होते तो शायद आपको भी ये सब याद न आता । तो मैं +एक पल को ये आकलन करने लगा की क्या कुछ ऐसा है जिसकी मुझे बहुत जरूरत है पर मेरे पास हो नहीं । और आपको पता है की गहरी सोच में जाने पर अक्सर +क्या होता है। अब वो लोग जो ये सोच रहे की भाईसाब आप हर कहानी(सच्ची घटना का विवरण वाली कहानी 😊) में सो क्यूँ जाते हैं। सच बताऊँ तो इसका +कोई सटीक जबाव नहीं है मेरे पास, पर अध्यात्म ये कहता है की जब आप सो रहे होते हैं तो आपका मन चेतना के कई स्थिति से गुजरता है। जब आप परम +चैतन्य अवस्था में होते हैं तो रहस्य, प्रतिभज्ञान इत्यादि के रास्ते खुल जाते हैं। और विज्ञान ये भी कहता है कि निद्रा के माध्यम से इस +अवस्था में जाना उतना ही अनिश्चित है जितना किसी बाला का मेरे लिए प्रेम-प्रस्ताव । सरल शब्दों में – मैं कुछ समय के लिए सो गया।</p> +<p>आज से ठीक 2 महीने पहले अगर ये मुझसे कोई पूछता की क्या चाहिए तुम्हें तो शायद मेरे पास जबाव होता। दोस्त तो बहुत हैं पर जब कोई ऐसा हो जो +आपके अधूरे वाक्य पूरे कर सके, कोई ऐसा जो आपकी भावनाओं को आपकी तरह समझ सके, कोई ऐसा जो आपको आपके असल रूप में पसंद करता हो । आपको लग रहा +होगा की मैं एक प्रेमिका का विवरण दे रहा हूँ, पर नहीं या शायद हाँ , मैं समझता हूँ की अधिकतर लोग प्रेमिका शब्द का प्रयोग अनुचित ढंग से करते +हैं। जहां प्रेम है वहाँ प्रेमी-प्रेमिका होंगे फिर वो भाई-बहन का रिश्ता हो या माँ-बेटे का । एक पल को सोचो तो ऊपर के विवरण के लिए कोई सबसे +सटीक उत्तर है तो वो है माँ। जब आप उन माँ-बाप जिन्होंने आपको जन्म दिया, आपका पालन-पोषण किया , आपको इस लायक बनाया कि आप इस वक़्त ये लेख पढ़ +पा रहे हैं , उनको अपनी प्रेमी-प्रेमिका नहीं कह सकते तो शायद किसी और लड़के-लड़की को कहने का आपको कोई हक़ नहीं है। पर ये बात निजी समझदारी की +है और मैं माँ-बाप के बारे में बिलकुल भी बात नहीं कर रहा, इन 2-4 पन्ने में उनको चित्रित कर पाना दुष्कर है। अगर माँ है तो ये अलग व्यक्ति +क्यूँ ? लोग कहते हैं क्योंकि भगवान हर जगह नहीं हो सकते इसलिए उन्होंने माँ बनाई। पर मैं कहता हूँ माँ भी हर जगह नहीं हो सकती इसलिए भगवान ने +दोस्त बनाए और विशेष लोग भी बनाए। आज तक बहुत सारे लोग आए-गए , कई बार लगा की शायद वो विशेष व्यक्ति मिलने ही वाला है पर वो भ्रम था शायद ये +भी हो। मैं ये नहीं कह सकता की मेरी खोज पूर्ण हो गयी पर हाँ एक पड़ाव तो जरूर आ गया है। उस पहली मुलाक़ात में एक पल को ऐसा लगा मानो किसी +चमत्कारी दर्जी ने कपड़े की जगह एक पूरा आदमी सिल कर दिया हो। सब कुछ एकदम नाप के अनुरूप। शायद कई सालों के बाद मैं खुशियों का बवंडर अपने अंदर +महसूस कर रहा था। आप पूछेंगे इसमें प्रेम कहाँ है? हिमालय जितना विशाल है उतना ही गहरा भी है , यहाँ भी प्रेम गहराई में है । प्रेम का होना +जरूरी है दिखावा तो हर कोई कर लेता है। कबीर ने अपने एक दोहे में कहा है :</p> +<p><strong>बूंद समानी समूंद में , जानत है सब कोई; समूंद समाना बूंद में , बूझे बिरला कोई।</strong></p> +<p>मैं इस दोहे को प्रेम के संदर्भ में व्याख्या करना चाहूँगा। लोग बूंद हैं और प्रेम समुद्र, लोगों को प्रेम में पड़ते सबने देखा है या सुना है, +पर जो प्रेम लोगों के अंदर व्याप्त है ये हर कोई नहीं समझता। मैं उस विशेष व्यक्ति का कृतज्ञ हूँ जिसने ने मुझे इस दोहे के मूल भाव का अहसास +करवाया।</p> +<p>कभी-कभी डर लगता है, खोने का उसे। आजकल दुनिया में सब अनिश्चित है। कब-क्या हो जाए ये कोई नहीं बता सकता। पहले सिर्फ पृथ्वी थी फिर लोग हुए और +तब से पृथ्वी अस्थमा की मरीज है। किसी प्रसिद्ध कवि ने लिखा है :</p> +<p><strong>आज आदमी में विष इतना भर गया है, की विषधरों का वंश उनसे डर गया है,</strong> +<strong>कल को कहते सुनोगे , आदमी काटा और साँप मर गया है।</strong></p> +<p>ठंडी-ठंडी हवाओं ने मेरी सारी नींद उड़ा दी। प्रकृति शायद मुझे खुश करके मारना चाहती थी। आसमान ने एक बड़े काले पर्दे का रूप ले लिया था और उस +पर्दे पर दसियो उजले साँप रेंगते नज़र आ रहे थे। मानो दस सालो के टूटते तारे एक साथ दिख रहे हों और आसमान कह रहा हो – जो चाहिए, जितना चाहिए +माँग लो। और मैंने सच में माँग लिए , लगभग सब कुछ । और उसको हमेशा पास रखने की दुआ तो नहीं माँग सका , पर वो जहां रहे, खुश रहे, सलामत रहे।</p> +The Big Red Ants2012-02-27T22:47:00+05:302012-02-27T22:47:00+05:30Avinaltag:avinal.space,2012-02-27:/posts/article/red-big-ants.html<p class="first last">In a bird’s eye view if we see around us, ants are the common and tiniest living entitiy seen by naked eye. One of them are the big red ants, in my view they are unique from others in two ways, first they live on trees and second their anteenas are too long and bent in middle, seems like their fore legs. Their mandible (mouth) seems like eagle’s beak.</p> +<p style="border: 2px solid var(--cyan);border-radius: 7px;" align=center>This article was published in 3rd edition of नवांकुर , the official magazine of Simultala Awasiya Vidyalaya, Bihar, India.<p><p>In a bird’s eye view if we see around us, ants are the common and tiniest living entitiy seen by naked eye. One of them are the big red ants, in my view they are unique from others in two ways, first they live on trees and second their anteenas are too long and bent in middle, seems like their fore legs. Their mandible (mouth) seems like eagle’s beak.</p> +<p>As I observed them making and reparing their nests, I concluded that they are very laborious and intellectual. They create their nests by binding two or more leaves (maybe up to 500) together. They stich the leaves using a stinky white substance either excreted by themselves or from trees. This substance is like web of spider. At first builder ants creates an array at the blade of two leaves. Then they make ant-cranes or ant-chain like chain of monomer to form a polymer. They catch the leaves and pull each other to stich. After some time, the parliament of leaves transforms into a leaf-sac called their nest. They also weave translucent cloth like structure to cover remainings of leaf. A nest hangs by a branch of the trees.</p> +<p>A nest is skillfully divided into living rooms, barracks, storehouse, egg room and queen’s room. The eggroom, lies at the center of nest to protect from outer attack until last time. Besides that, lies queen’s room. Living rooms are sequenncly joined with eggroom. There are different rooms for workers, food searchers etc. The partition of the room resembles atom’s electron shell, one upon another. At last barracks are the outermost rooms, just like outermost orbit of electron. The defence system is strongest at the nest’s opening. A nest may size as 2-3 footballs and have 50 to 10000 ants. There may be more openings.</p> +<p>Now about their attacking and protecting skills. A solider is unique from other ants. It is equipped with many attacking and defending skills. Normally they do not attack. They are social insects. If someone attacks, all other ants go inside, and soldiers come out. They spread allover the nest. They are very sensetive and have sharp vision. If any one of them see their enemy the stand on their hind legs, swinging, their forelegs and anteens in their air as scolding someone. Their spit contains formic acid, present at the end of the abdomen below the rectum. If their nest is broken and eggs fall on ground then the ants make a dome, like the dome of Taj mahal to save the eggs till last their breadth. This shows their caring skills.</p> +<p>The most amazing is their discipline. They can easily beat a human in race of discipline. Humans must learn from it. When two ants meet, they touch their anteena to communicate. When they walk in a queue, they seem like twinkling dots and dashes. I want to conclude that <strong>All tiny things are not really tiny. It may be as a space having infinite mysteries one has to explore it.</strong></p> + \ No newline at end of file diff --git a/feeds/article.atom.xml b/feeds/article.atom.xml new file mode 100644 index 0000000..cddad9f --- /dev/null +++ b/feeds/article.atom.xml @@ -0,0 +1,54 @@ + +Be My SpaceTime - articlehttps://avinal.space/2019-09-21T15:47:00+05:30눈치प्रेम रतन धन पायो2019-09-21T15:47:00+05:302019-09-21T15:47:00+05:30Avinaltag:avinal.space,2019-09-21:/posts/article/for-sunshine.html<p class="first last">टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं । दादा-दादी कहा करते थे ये जिंदा पहाड़ हैं । सारी बातें सुनते हैं लोगों की । उनके दुख दर्द दूर करते हैं, ये देवता हैं ।</p> +<p style="border: 2px solid var(--cyan);border-radius: 7px;" align=center>This article was published in 18th edition of SRIJAN, the official magazine of <a href="https://nith.ac.in" style="text-decoration: none;">National Institute of Technology, Hamirpur</a>, India. The magazine can be accessed <a href="https://issuu.com/srijandesk/docs/srijan2020" style="text-decoration: none;">here</a>.<p><p>टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं । +दादा-दादी कहा करते थे ये जिंदा पहाड़ हैं । सारी बातें सुनते हैं लोगों की । उनके दुख दर्द दूर करते हैं, ये देवता हैं । आजकल जब रोज़ क्लास +आते जाते दूर पहाड़ों की चोटियाँ देखता हूँ तो उनकी विशालता का अनुभव होता हैं । एक पल को अगर ये मान लिया जाए की हमारी सारी धार्मिक किताबें +वो कहानियाँ हैं जो पथिक लेखकों के द्वारा लिखी गयी हैं तो सारी बातें साफ हो जाती है कि क्यूँ देवी-देवताओं ने हिमालय को अपनाया है। टूटता +तारा देखना अलौकिक है पर हिमालय की श्रेणियों से टूटता तारा देखना दैविक है । और वो कहते हैं न जिसमें न कोई तर्क हो न ही हाथों की सफाई वो +दैविक है। टूटते तारो के बारे में लोगों के बहुत सारे विश्वास हैं । कभी विभीषिका का पूर्वाभास माने जाने वाले इन टूटते तारे आज इच्छा पूरक के +प्रतीक हैं । कुछ लोगों का ये भी मानना है कि टूटते तारे दिवंगत लोगों का संकेत हैं । हिमालय की कन्दराओं में न जाने कितने ही ऋषि-मुनियों ने +तप करते हुए अपना जीवन अर्पित कर दिया । इसलिए हिमालय की पहाड़ों से टूटता तारा देखना दैविक हैं क्योंकि शायद वो तारे उन ऋषि-मुनियों की पवित्र +आत्माओं का संकेत हैं ।</p> +<p>प्रकृति की सुंदरता और कलाकारी हिमालय की कण-कण में झलकती है। प्रकृति ने प्रेम को भी हिमालय के जितना ही विशाल और अलौकिक बनाया है । ये एक +अलग चर्चा का विषय है कि हिमालय पहले आया या प्रेम। मैं तो प्रेम के पक्ष में हूँ । वो हर अणु-परमाणु जिन्होंने इतने बड़ा पहाड़ खड़ा किया वो सब +आपस में प्रेम से बंधे हुए हैं। ये पृथ्वी, सूर्य, चंद्रमा, आकाश-गंगा इत्यादि सब प्रेम से बंधे हुए हैं । और हिमाद्रि के छत पर मैं इसी प्रेम +के आगोश में आकर भावशून्य होकर तारों को निहार रहा था । तभी मानो सदियों की मन्नत पूरी हुई और मुझे एक टूटता तारा दिखा । आप मेरी स्थिति की +जटिलता का अनुभव इस प्रकार से लगा सकते हैं कि लोग टूटते तारे से मन्नत मांगते हैं और मैं टूटता तारा ही मन्नत में मांग रहा था । इससे पहले की +मैं पिछली जटिलता से बाहर आता की दूसरी जटिलता सामने आ पड़ी की तारा तो दिख गया पर मैं माँगूँ क्या ? और अगर आप सोच रहे की भाई पैसे मांग लो +शोहरत , नाम , शक्ति और पता नहीं क्या-क्या ? मांग तो लेता पर अगर आप मेरी जगह इसी स्थिति में होते तो शायद आपको भी ये सब याद न आता । तो मैं +एक पल को ये आकलन करने लगा की क्या कुछ ऐसा है जिसकी मुझे बहुत जरूरत है पर मेरे पास हो नहीं । और आपको पता है की गहरी सोच में जाने पर अक्सर +क्या होता है। अब वो लोग जो ये सोच रहे की भाईसाब आप हर कहानी(सच्ची घटना का विवरण वाली कहानी 😊) में सो क्यूँ जाते हैं। सच बताऊँ तो इसका +कोई सटीक जबाव नहीं है मेरे पास, पर अध्यात्म ये कहता है की जब आप सो रहे होते हैं तो आपका मन चेतना के कई स्थिति से गुजरता है। जब आप परम +चैतन्य अवस्था में होते हैं तो रहस्य, प्रतिभज्ञान इत्यादि के रास्ते खुल जाते हैं। और विज्ञान ये भी कहता है कि निद्रा के माध्यम से इस +अवस्था में जाना उतना ही अनिश्चित है जितना किसी बाला का मेरे लिए प्रेम-प्रस्ताव । सरल शब्दों में – मैं कुछ समय के लिए सो गया।</p> +<p>आज से ठीक 2 महीने पहले अगर ये मुझसे कोई पूछता की क्या चाहिए तुम्हें तो शायद मेरे पास जबाव होता। दोस्त तो बहुत हैं पर जब कोई ऐसा हो जो +आपके अधूरे वाक्य पूरे कर सके, कोई ऐसा जो आपकी भावनाओं को आपकी तरह समझ सके, कोई ऐसा जो आपको आपके असल रूप में पसंद करता हो । आपको लग रहा +होगा की मैं एक प्रेमिका का विवरण दे रहा हूँ, पर नहीं या शायद हाँ , मैं समझता हूँ की अधिकतर लोग प्रेमिका शब्द का प्रयोग अनुचित ढंग से करते +हैं। जहां प्रेम है वहाँ प्रेमी-प्रेमिका होंगे फिर वो भाई-बहन का रिश्ता हो या माँ-बेटे का । एक पल को सोचो तो ऊपर के विवरण के लिए कोई सबसे +सटीक उत्तर है तो वो है माँ। जब आप उन माँ-बाप जिन्होंने आपको जन्म दिया, आपका पालन-पोषण किया , आपको इस लायक बनाया कि आप इस वक़्त ये लेख पढ़ +पा रहे हैं , उनको अपनी प्रेमी-प्रेमिका नहीं कह सकते तो शायद किसी और लड़के-लड़की को कहने का आपको कोई हक़ नहीं है। पर ये बात निजी समझदारी की +है और मैं माँ-बाप के बारे में बिलकुल भी बात नहीं कर रहा, इन 2-4 पन्ने में उनको चित्रित कर पाना दुष्कर है। अगर माँ है तो ये अलग व्यक्ति +क्यूँ ? लोग कहते हैं क्योंकि भगवान हर जगह नहीं हो सकते इसलिए उन्होंने माँ बनाई। पर मैं कहता हूँ माँ भी हर जगह नहीं हो सकती इसलिए भगवान ने +दोस्त बनाए और विशेष लोग भी बनाए। आज तक बहुत सारे लोग आए-गए , कई बार लगा की शायद वो विशेष व्यक्ति मिलने ही वाला है पर वो भ्रम था शायद ये +भी हो। मैं ये नहीं कह सकता की मेरी खोज पूर्ण हो गयी पर हाँ एक पड़ाव तो जरूर आ गया है। उस पहली मुलाक़ात में एक पल को ऐसा लगा मानो किसी +चमत्कारी दर्जी ने कपड़े की जगह एक पूरा आदमी सिल कर दिया हो। सब कुछ एकदम नाप के अनुरूप। शायद कई सालों के बाद मैं खुशियों का बवंडर अपने अंदर +महसूस कर रहा था। आप पूछेंगे इसमें प्रेम कहाँ है? हिमालय जितना विशाल है उतना ही गहरा भी है , यहाँ भी प्रेम गहराई में है । प्रेम का होना +जरूरी है दिखावा तो हर कोई कर लेता है। कबीर ने अपने एक दोहे में कहा है :</p> +<p><strong>बूंद समानी समूंद में , जानत है सब कोई; समूंद समाना बूंद में , बूझे बिरला कोई।</strong></p> +<p>मैं इस दोहे को प्रेम के संदर्भ में व्याख्या करना चाहूँगा। लोग बूंद हैं और प्रेम समुद्र, लोगों को प्रेम में पड़ते सबने देखा है या सुना है, +पर जो प्रेम लोगों के अंदर व्याप्त है ये हर कोई नहीं समझता। मैं उस विशेष व्यक्ति का कृतज्ञ हूँ जिसने ने मुझे इस दोहे के मूल भाव का अहसास +करवाया।</p> +<p>कभी-कभी डर लगता है, खोने का उसे। आजकल दुनिया में सब अनिश्चित है। कब-क्या हो जाए ये कोई नहीं बता सकता। पहले सिर्फ पृथ्वी थी फिर लोग हुए और +तब से पृथ्वी अस्थमा की मरीज है। किसी प्रसिद्ध कवि ने लिखा है :</p> +<p><strong>आज आदमी में विष इतना भर गया है, की विषधरों का वंश उनसे डर गया है,</strong> +<strong>कल को कहते सुनोगे , आदमी काटा और साँप मर गया है।</strong></p> +<p>ठंडी-ठंडी हवाओं ने मेरी सारी नींद उड़ा दी। प्रकृति शायद मुझे खुश करके मारना चाहती थी। आसमान ने एक बड़े काले पर्दे का रूप ले लिया था और उस +पर्दे पर दसियो उजले साँप रेंगते नज़र आ रहे थे। मानो दस सालो के टूटते तारे एक साथ दिख रहे हों और आसमान कह रहा हो – जो चाहिए, जितना चाहिए +माँग लो। और मैंने सच में माँग लिए , लगभग सब कुछ । और उसको हमेशा पास रखने की दुआ तो नहीं माँग सका , पर वो जहां रहे, खुश रहे, सलामत रहे।</p> +The Big Red Ants2012-02-27T22:47:00+05:302012-02-27T22:47:00+05:30Avinaltag:avinal.space,2012-02-27:/posts/article/red-big-ants.html<p class="first last">In a bird’s eye view if we see around us, ants are the common and tiniest living entitiy seen by naked eye. One of them are the big red ants, in my view they are unique from others in two ways, first they live on trees and second their anteenas are too long and bent in middle, seems like their fore legs. Their mandible (mouth) seems like eagle’s beak.</p> +<p style="border: 2px solid var(--cyan);border-radius: 7px;" align=center>This article was published in 3rd edition of नवांकुर , the official magazine of Simultala Awasiya Vidyalaya, Bihar, India.<p><p>In a bird’s eye view if we see around us, ants are the common and tiniest living entitiy seen by naked eye. One of them are the big red ants, in my view they are unique from others in two ways, first they live on trees and second their anteenas are too long and bent in middle, seems like their fore legs. Their mandible (mouth) seems like eagle’s beak.</p> +<p>As I observed them making and reparing their nests, I concluded that they are very laborious and intellectual. They create their nests by binding two or more leaves (maybe up to 500) together. They stich the leaves using a stinky white substance either excreted by themselves or from trees. This substance is like web of spider. At first builder ants creates an array at the blade of two leaves. Then they make ant-cranes or ant-chain like chain of monomer to form a polymer. They catch the leaves and pull each other to stich. After some time, the parliament of leaves transforms into a leaf-sac called their nest. They also weave translucent cloth like structure to cover remainings of leaf. A nest hangs by a branch of the trees.</p> +<p>A nest is skillfully divided into living rooms, barracks, storehouse, egg room and queen’s room. The eggroom, lies at the center of nest to protect from outer attack until last time. Besides that, lies queen’s room. Living rooms are sequenncly joined with eggroom. There are different rooms for workers, food searchers etc. The partition of the room resembles atom’s electron shell, one upon another. At last barracks are the outermost rooms, just like outermost orbit of electron. The defence system is strongest at the nest’s opening. A nest may size as 2-3 footballs and have 50 to 10000 ants. There may be more openings.</p> +<p>Now about their attacking and protecting skills. A solider is unique from other ants. It is equipped with many attacking and defending skills. Normally they do not attack. They are social insects. If someone attacks, all other ants go inside, and soldiers come out. They spread allover the nest. They are very sensetive and have sharp vision. If any one of them see their enemy the stand on their hind legs, swinging, their forelegs and anteens in their air as scolding someone. Their spit contains formic acid, present at the end of the abdomen below the rectum. If their nest is broken and eggs fall on ground then the ants make a dome, like the dome of Taj mahal to save the eggs till last their breadth. This shows their caring skills.</p> +<p>The most amazing is their discipline. They can easily beat a human in race of discipline. Humans must learn from it. When two ants meet, they touch their anteena to communicate. When they walk in a queue, they seem like twinkling dots and dashes. I want to conclude that <strong>All tiny things are not really tiny. It may be as a space having infinite mysteries one has to explore it.</strong></p> + \ No newline at end of file diff --git a/feeds/blog.atom.xml b/feeds/blog.atom.xml new file mode 100644 index 0000000..9b10cbc --- /dev/null +++ b/feeds/blog.atom.xml @@ -0,0 +1,76 @@ + +Be My SpaceTime - bloghttps://avinal.space/2021-01-04T21:47:00+05:30눈치HRT Systems Internship Interview Experience2021-01-04T21:47:00+05:302021-01-04T21:47:00+05:30Avinaltag:avinal.space,2021-01-04:/posts/blog/hrt-interview-1.html<p class="first last">I applied for <strong>Systems Internship - Summer 2021</strong> back in December 2020 at <a class="reference external" href="https://www.hudsonrivertrading.com">Hudson River Trading</a> , New York.....Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt.</p> +<p>I applied for <strong>Systems Internship - Summer 2021</strong> back in December 2020 at <a class="reference external" href="https://www.hudsonrivertrading.com">Hudson River Trading</a> , New York. The internship description was: -</p> +<blockquote class="epigraph"> +<p>We are looking for highly motivated students who are eager to learn and excited about systems to join us for our summer internship +program. As a systems intern, you may have the opportunity to work on projects in the following areas:</p> +<ul class="simple"> +<li>Programming/scripting (Golang, Python, C++, C)</li> +<li>FOSS development</li> +<li>HPC, Cluster computing</li> +<li>System Administration</li> +<li>Linux, Debian</li> +<li>Linux-based computer security</li> +<li>Data Storage</li> +<li>Large deployment or config management</li> +</ul> +</blockquote> +<p>The first step was a coding test on the Codility platform. If you have used any of the online coding platforms, this is similar. It was a <abbr title="90 mins">2.5 hrs</abbr> test consisting of 3 questions. They let you use <abbr title="documentation, man pages, etc.">online references</abbr> but +<strong>do not copy the code</strong> as it will highly reduce your chances of qualifying for this first stage. You can choose between <strong>C/C++</strong>, +<strong>Python</strong> and <strong>Golang</strong> (no Java 😪).</p> +<p>Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt. +Also, they expected a clear and concise approach. Two of the most important points in their instructions were: -</p> +<blockquote class="epigraph"> +<ul class="simple"> +<li>While correctness and performance are the most important factors for evaluation, we will take test duration into account as well.</li> +<li>Please understand that this test is meant to be challenging. A perfect score is not necessary to move on to future interview rounds, so do the best you can!</li> +</ul> +</blockquote> +<p>So, you must be near perfect in your approach as well as on time. I did them kind of quickly. They will show you a summary of your +submission but not the results. It will take almost 2 weeks to get back to you for further steps.</p> +<p>Next, I received a mail invitation for a telephonic interview. <strong>This interview will last about 45 minutes and will be technical but will not require coding. Interview topics may include your background, programming languages, and Unix/Linux concepts</strong>. Once you receive this +mail you can then decide a time slot for an interview.</p> +<p>I was not sure what they will ask if this is not a coding interview. The interviewer was very polite, and he was explaining the questions +too. Questions were not so tricky but practical and real-life. Since it was <strong>not for SDE role</strong>, the questions were mostly related to +Linux/Unix, C++ (mainly pointers and memory), Python/Bash scripting, automation, knowledge of tools (IDEs, Editors, System Administration +Tools) and previous experiences. The interview would often explain why he is asking this question, this was very nice. Then some common +interview questions, why do you want to work for this role? What makes you fit for this role? etc.</p> +<p>One thing that I want to point out is that the interviewer was repeatedly checking my resume, and for the most part he did not ask +anything that was not on my resume. So, my tip is to create a nice resume with genuine work/tool experiences. And when you are applying +for such a role, it would be helpful if you mention mathematics or other courses that you have taken. <em>Do not lie on your resume</em>. They +will easily catch that.</p> +<p>The other thing is to keep your words short and clear; I was not great at communication, but you can be. If the interviewer allows then +use examples for the things you cannot explain. I used nice examples. At last, he gave me short feedback on how well I performed.</p> +<p>At last, I want to point out things I should not have done. The first is, I did not ask much about the role, you must do this at least +once. Second, I am talkative, I do not know if the interviewer was not faking his expressions (because he would often discuss in-depth), +but not all interviewers will be the same. So, do not talk too much, nor too less. At last work on your communication skill, mostly how +you to present things and how to answer technical as well as behavioral questions. I was not fluent, but my way of presentation might +have saved me.</p> +The Interstellar Twilight2020-09-28T22:47:00+05:302020-09-28T22:47:00+05:30Avinaltag:avinal.space,2020-09-28:/posts/blog/this-is-for-you.html<p class="first last">If in the Twilight of dreams we should meet once more, we shell talk again together and I shall sing to you a lullaby till you sleep again to meet me in the Twilight of another dream.</p> +<p>Yeah, it was a dream someday. I never imagined you. But I do remember glimpses of a wonderful person +in my deep slumber. When I go back to last year about the same time, I find myself a manic who gets +carried away with every emotion. Becoming too happy about something and then becoming too sad was so +common that I never noticed what I was risking.</p> +<p><strong>&quot;If in the Twilight of dreams we should meet once more, we shell talk again together and I shall sing to you a lullaby till you sleep again to meet me in the Twilight of another dream.&quot;</strong></p> +<p>But 1 year ago many things changed. A never seen dream came true. To be honest I was skeptical if all +this happening to me was true. Even until last December. Gradually things started falling into places. +And for the most part, the reality became more real. I can now easily see what is happening and why it +happened. Everything was so nice until we had a fight. Then another, and now it was every other day +story. It was a really hard time collecting everything together and act as nothing happened after every +single of those. Everything was plunging. I started imagining the end of something that I did not +imagine to happen in the first place.</p> +<p>But during all those times, there was a continual intuition that maybe there is something that we both +are missing. And that was maybe the root of all chaos. I never came to know that what it was neither did +you. But I do realize many mistakes I have been doing since we met.</p> +<p>I want to thank you for not losing hope in me. We both always tried to reduce tension as much as we could. +And thank you for many other ineffable things happened because of you.</p> +<p>As of now I can see things making sense. Every message, every talk now seems to make sense. I am more +deeply into this friendship if I was not ever before. The ecstasy of having you is other-worldly. I don't +know if I could ever adore a person this much but I adore this ravishing friendship. Only you or only +this friendship may mean nothing to me. But I am delighted to say that I have both and I have you.</p> +<p>Now, what is all with The Interstellar Twilight. Why this name ? Let me explain it for you. <strong>Interstellar</strong> +means between stars and <strong>Twilight</strong> means the soft glow when the sun is below the horizon. +<strong>The Interstellar Twilight</strong> means the glow between the stars or simply glow of a cluster of stars. A +single star shines but the glow is too low to be noticed against its brightness. But a lot stars together +gets a glow. So my friend we are such two stars and our friendship is that glow.</p> + \ No newline at end of file diff --git a/feeds/development.atom.xml b/feeds/development.atom.xml new file mode 100644 index 0000000..42a1408 --- /dev/null +++ b/feeds/development.atom.xml @@ -0,0 +1,783 @@ + +Be My SpaceTime - developmenthttps://avinal.space/2022-03-07T22:47:00+05:30눈치Developing Minimal Tekton Server2022-02-27T20:47:00+05:302022-03-07T22:47:00+05:30Avinaltag:avinal.space,2022-02-27:/posts/development/lovely-dangerous-things-redhat.html<p class="first last">We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster.</p> +<p style="border: 2px solid var(--pink);border-radius: 7px;" align=center>This blog is a descreptive account of the development of Minimal Tekton Server. This is highly technical in nature, so please make sure that you have sufficient knowledge about Golang, Docker, Kubernetes and TektonCD. You can refer to my <a href="https://avinal.space/posts/development/i-am-loving-it-redhat.html">previous blog</a> to know about these topics.<p><p>As mentioned in my last blog, we were given to implement an application named <strong>Minimal Tekton Server</strong>. The problem statement reads:</p> +<blockquote class="epigraph"> +We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster. The application will expose some fields of the Tekton Resources which the user will provide and then this application will create Tekton resources by talking to Tekton APIs available on the cluster to create the resources based on the user-provided fields.</blockquote> +<p>There are three parts in this project for the application and two more parts for the CI/CD using TektonCD and Kubernetes/OpenShift. I will go through each part descriptively and try to explain what we did.</p> +<div class="section" id="the-architecture-of-mks"> +<h2>The Architecture of MKS</h2> +<p>The first task in the development of the Minimal Tekton Server was creating its architectural diagram. Our first diagram was trash compared to the final diagram. Yeah, we learned. I will be explaining our final(obviously) architectural diagram and try to make some sense out of band-aids and duct tapes.</p> +<img alt="The MKS Arhitecture" class="img-fluid my-3" src="/images/mks-architecture.png" /> +<p>Let me start with explaining <strong>What are MKS Resources?</strong>. I hope you know at least tidbits about Kubernetes and by the definition: <em>A resource is an endpoint in the Kubernetes API that stores a collection of API objects of a certain kind; for example, the built-in :code:`pods` resource contains a collection of Pod objects.</em> But developers soon realized that these in-built resources were not enough for the ever-growing applications of Kubernetes. Here <a class="reference external" href="https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/">custom resource</a> comes into the picture. <em>A custom resource is an extension of the Kubernetes API that is not necessarily available in a default Kubernetes installation.</em> To define a custom resource we use something called <a class="reference external" href="https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/">Custom Resource Definition</a>. So MKS Resources are such custom resources that correspond to the TektonCD custom resources.</p> +<img alt="A venus flytrap engulphing an insect." class="float-md-right ml-3" src="/images/venus-flytrap.gif" style="width: 250px;" /> +<p>Let us now focus on the box containing <code>Controller</code> and <code>API server</code>. The controller can be said as a stimulus-response mechanism. Take the analogy of a Venus Flytrap plant. The trap is initially open. There are <code>trigger</code> hairs on the inside of the trap. Once an insect is detected, there is a change of state and the trap closes in a blick on the eye. The controller works the same way. It listens for the change in the state of the MKS resources and immediately transfers the request to the Tekton API to reflect the change in the corresponding Tekton resources. The changes can be creation, deletion, or updating. The API server ensures that there is a working connection between our controller and the Tekton API.</p> +<p>MKS Server also exposes APIs to introduce a change of state in the MKS resources. In technical terms these are called <code>verbs</code>. There are five such verbs that we have exposed: <code>create</code>, <code>update</code>, <code>get</code>, <code>delete</code>, and <code>list</code>. They can be utilized by a REST client, or in our case <strong>MKS CLI</strong> to introduce desired change. The MKS command-line interface provides commands and subcommands to do the desired tasks.</p> +<p>Whenever there is a change in the state, there is a logic running inside the controller to react on that and that also affects our database. We store four datapoints in our database: <code>created</code>, <code>deleted</code>, <code>completed</code>, and <code>failed</code>. They tell us about the current statistcs of our MKS resource using a single-page web app called <strong>MKS Dashboard</strong> (or UI).</p> +<p>This was about the architecture of the Minimal Tekton Server. Let us jump into more technical stuff.</p> +</div> +<div class="section" id="how-to-implement-a-crd-controller"> +<h2>How to implement a CRD controller?</h2> +<p>During this assignment, something that took the most time and effort was the implementation of a controller for our custom resources. This isn't very hard if you go by the rules and do the things according to the well-defined documents and blogs since this is a standard step in the implementation of any custom resource controller. But did we follow the rules? Hell no! But this time, let us go step-by-step.</p> +<ol class="arabic simple"> +<li>The first step is to define a <code>CustomResourceDefinition</code> for our custom resource. Let us define a CRD called <code>spacetime</code>. To do this you can write a YAML file like below.</li> +</ol> +<div class="highlight"><pre><span></span><span class="c1"># file: spacetime-crd.yaml</span><span class="w"></span> +<span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">apiextensions.k8s.io/v1</span><span class="w"></span> +<span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">CustomResourceDefinition</span><span class="w"></span> +<span class="nt">metadata</span><span class="p">:</span><span class="w"></span> +<span class="c1"># name must match the spec fields below, and be in the form: &lt;plural&gt;.&lt;group&gt;</span><span class="w"></span> +<span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">spacetimes.example.com</span><span class="w"></span> +<span class="nt">spec</span><span class="p">:</span><span class="w"></span> +<span class="c1"># group name to use for REST API: /apis/&lt;group&gt;/&lt;version&gt;</span><span class="w"></span> +<span class="nt">group</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">example.com</span><span class="w"></span> +<span class="c1"># list of versions supported by this CustomResourceDefinition</span><span class="w"></span> +<span class="nt">versions</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v1alpha1</span><span class="w"></span> +<span class="w"> </span><span class="c1"># Each version can be enabled/disabled by Served flag.</span><span class="w"></span> +<span class="w"> </span><span class="nt">served</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span><span class="w"></span> +<span class="w"> </span><span class="c1"># One and only one version must be marked as the storage version.</span><span class="w"></span> +<span class="w"> </span><span class="nt">storage</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span><span class="w"></span> +<span class="w"> </span><span class="nt">schema</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">openAPIV3Schema</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">object</span><span class="w"></span> +<span class="w"> </span><span class="nt">properties</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">spec</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">object</span><span class="w"></span> +<span class="w"> </span><span class="nt">properties</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">message</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">string</span><span class="w"></span> +<span class="c1"># either Namespaced or Cluster</span><span class="w"></span> +<span class="nt">scope</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Namespaced</span><span class="w"></span> +<span class="nt">names</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="c1"># plural name to be used in the URL: /apis/&lt;group&gt;/&lt;version&gt;/&lt;plural&gt;</span><span class="w"></span> +<span class="w"> </span><span class="nt">plural</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">spacetimes</span><span class="w"></span> +<span class="w"> </span><span class="c1"># singular name to be used as an alias on the CLI and for display</span><span class="w"></span> +<span class="w"> </span><span class="nt">singular</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">spacetime</span><span class="w"></span> +<span class="w"> </span><span class="c1"># kind is normally the CamelCased singular type. Your resource manifests use this.</span><span class="w"></span> +<span class="w"> </span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">SpaceTime</span><span class="w"></span> +<span class="w"> </span><span class="c1"># shortNames allow shorter string to match your resource on the CLI</span><span class="w"></span> +<span class="w"> </span><span class="nt">shortNames</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">st</span><span class="w"></span> +</pre></div> +<p>You can learn more about the fields and options <a class="reference external" href="https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/">here</a>. The CRD that we defined above corresponds to the <code>CustomResource</code> given below. Once you apply the above file you will be able to see the <code>spacetime</code> custom resource on your Kubernetes/OpenShift cluster.</p> +<div class="highlight"><pre><span></span><span class="c1"># file: spacetime-cr.yaml</span><span class="w"></span> +<span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">spacetimes.example.com/v1alpha1</span><span class="w"></span> +<span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">SpaceTime</span><span class="w"></span> +<span class="nt">metadata</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">spacetime-cr</span><span class="w"></span> +<span class="nt">spec</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">message</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Hello</span><span class="nv"> </span><span class="s">from</span><span class="nv"> </span><span class="s">space!&quot;</span><span class="w"></span> +</pre></div> +<p>Apply them using the following commands:</p> +<div class="highlight"><pre><span></span>kubectl apply -f spacetime-crd.yaml +kubectl apply -f spacetime-cr.yaml +</pre></div> +<ol class="arabic simple" start="2"> +<li>Once we have defined our custom resources, we need to define the types that will correspond to this custom resource definition. This can be done using <code>k8s.io/apimachinery/pkg/apis/meta/v1</code> package written in golang. Did I tell you that this is all in golang? Well, now you know. Create a package structure for a golang project and add the definition of the type as given below.</li> +</ol> +<div class="highlight"><pre><span></span>mkdir -p pkg/api/spacetime/v1alpha1 +touch pkg/api/spacetime/v1alpha1/<span class="o">{</span>spacetime_types,register,doc<span class="o">}</span>.go pkg/api/spacetime/register.go +</pre></div> +<p>Add the following content to the corresponding files.</p> +<div class="highlight"><pre><span></span><span class="c1">// file: /pkg/api/spacetime/v1alpha1/spacetime_types.go</span><span class="w"></span> +<span class="kn">package</span><span class="w"> </span><span class="nx">v1alpha1</span><span class="w"></span> + +<span class="kn">import</span><span class="w"> </span><span class="p">(</span><span class="w"></span> +<span class="w"> </span><span class="nx">metav1</span><span class="w"> </span><span class="s">&quot;k8s.io/apimachinery/pkg/apis/meta/v1&quot;</span><span class="w"></span> +<span class="p">)</span><span class="w"></span> + +<span class="kd">type</span><span class="w"> </span><span class="nx">SpaceTime</span><span class="w"> </span><span class="kd">struct</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<span class="w"> </span><span class="nx">metav1</span><span class="p">.</span><span class="nx">TypeMeta</span><span class="w"> </span><span class="s">`json:&quot;,inline&quot;`</span><span class="w"></span> +<span class="w"> </span><span class="nx">metav1</span><span class="p">.</span><span class="nx">ObjectMeta</span><span class="w"> </span><span class="s">`json:&quot;metadata,omitempty&quot;`</span><span class="w"></span> + +<span class="w"> </span><span class="nx">Spec</span><span class="w"> </span><span class="nx">SpaceTimeSpec</span><span class="w"> </span><span class="s">`json:&quot;spec&quot;`</span><span class="w"></span> +<span class="p">}</span><span class="w"></span> + +<span class="kd">type</span><span class="w"> </span><span class="nx">SpaceTimeSpec</span><span class="w"> </span><span class="kd">struct</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<span class="w"> </span><span class="nx">Message</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="s">`json:&quot;message&quot;`</span><span class="w"></span> +<span class="p">}</span><span class="w"></span> + +<span class="kd">type</span><span class="w"> </span><span class="nx">SpaceTimeList</span><span class="w"> </span><span class="kd">struct</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<span class="w"> </span><span class="nx">metav1</span><span class="p">.</span><span class="nx">TypeMeta</span><span class="w"> </span><span class="s">`json:&quot;,inline&quot;`</span><span class="w"></span> +<span class="w"> </span><span class="nx">metav1</span><span class="p">.</span><span class="nx">ListMeta</span><span class="w"> </span><span class="s">`json:&quot;metadata&quot;`</span><span class="w"></span> + +<span class="w"> </span><span class="nx">Items</span><span class="w"> </span><span class="p">[]</span><span class="nx">SpaceTime</span><span class="w"> </span><span class="s">`json:&quot;items&quot;`</span><span class="w"></span> +<span class="p">}</span><span class="w"></span> +</pre></div> +<p><strong>To be Continued</strong></p> +</div> +My internship at Red Hat2022-02-25T20:47:00+05:302022-02-25T20:47:00+05:30Avinaltag:avinal.space,2022-02-25:/posts/development/i-am-loving-it-redhat.html<p class="first last">I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project.</p> +<p>I have been contributing to open source for the last 3 years and Red Hat was one of the companies that I was very fond of. I must say all my contributions and consistency paid off, and I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project.</p> +<p>On the first day of my internship, I met two amazing teammates <a class="reference external" href="https://github.com/">Saytam</a> and <a class="reference external" href="https://github.com/">Utkarsh</a>. We were also introduced to a Senior Software Engineer <a class="reference external" href="https://github.com">Piyush Garg</a> who later mentored us. The initial few meetings were more on the introduction and what to learn topics. Before I jump into more details let me explain first what does a <strong>DevTools Developer/Engineer</strong> do?</p> +<div class="section" id="what-does-a-devtools-developer-engineer-do"> +<h2>What does a DevTools Developer/Engineer do?</h2> +<p>From <a class="reference external" href="https://developer.mozilla.org/en-US/docs/Glossary/Developer_Tools">MDN Web Docs</a> <strong>Developer tools (or &quot;development tools&quot; or short &quot;DevTools&quot;) are programs that allow a developer to create, test, and debug software.</strong> At RedHat, a lot of open source developer tools of industry standards are developed. There are many, OpenShift, Tekton, CodeReady containers, and many more.</p> +</div> +<div class="section" id="learning-on-the-golang-logo"> +<h2>Learning on the <img alt="golang_logo" class="align-top" src="/images/golang.png" style="width: 2.5em;" /></h2> +<p>There was a lot of learning and still a lot to learn. In a meeting with my manager Pradeepto Bhattacharya, I was told that I will be working on TektonCD or OpenShift Pipelines, and both of them require a sound knowledge of Golang, CI/CD, Containers, Docker, and Kubernetes. I was familiar with CI/CD, containers, and Docker but never used Golang and Kubernetes. We were provided plenty of good resources and my teammates also helped with many awesome resources. I am listing all the resources with their category.</p> +<div class="section" id="golang-1"> +<h3><a class="reference external" href="https://go.dev/">Golang</a></h3> +<img alt="Gopher on the ladder" class="float-md-right rounded ml-3" src="/images/goladder.png" style="height: 20em;" /> +<p>One of Golang’s biggest advantages is that it offers the clarity and ease of use that other languages lack. Golang’s advantages make it easy for new programmers to quickly understand the language and for seasoned veterans to easily read each other’s code.</p> +<ul class="simple"> +<li><a class="reference external" href="https://go.dev/doc/">Official Go Documentation</a> - <em>Start from here</em></li> +<li><a class="reference external" href="https://gobyexample.com/">Go by Example</a> - <em>bite-size examples for most of the golang features</em></li> +<li><a class="reference external" href="https://golangbot.com/learn-golang-series/">Golang tutorial series - GOLANGBOT.COM</a> - <em>in-depth tutorial of golang</em></li> +<li><a class="reference external" href="https://go.dev/doc/effective_go">Effective Go</a> - <em>writing good golang programs</em></li> +<li><a class="reference external" href="https://go.dev/play/">The Go Playground</a> - <em>official online golang ide</em></li> +<li><a class="reference external" href="https://www.gopl.io/">The Go Programming Language - Book</a> <em>for learning advanced level golang</em></li> +<li><a class="reference external" href="https://youtu.be/yyUHQIec83I">Golang Tutorial for Beginners | Full Go Course - TechWorld with Nana</a> <em>if you prefer video tutorials, I don't :)</em></li> +</ul> +</div> +<div class="section" id="docker-1"> +<h3><a class="reference external" href="https://www.docker.com/">Docker</a></h3> +<p>Docker takes away repetitive, mundane configuration tasks and is used throughout the development lifecycle for fast, easy, and portable application development - desktop and cloud. Docker’s comprehensive end-to-end platform includes UIs, CLIs, APIs, and security that are engineered to work together across the entire application delivery lifecycle.</p> +<img alt="The Docker Architecture" class="float-md-right img-fluid my-3" src="/images/docker-architecture.png" /> +<ul class="simple"> +<li><a class="reference external" href="https://www.katacoda.com/courses/docker">Docker and Containers - Katacoda</a> <em>interactive lessons on docker and containers</em></li> +<li><a class="reference external" href="https://docker-curriculum.com/">Docker for beginners</a></li> +<li><a class="reference external" href="https://youtu.be/3c-iBn73dDE">Docker Tutorial for Beginners | TechWorld with Nana</a> <em>video tutorial</em></li> +</ul> +</div> +<div class="section" id="kubernetes-1"> +<h3><a class="reference external" href="https://kubernetes.io/">Kubernetes</a></h3> +<img alt="Kubernetes tech" class="float-md-left border mr-3" src="/images/kubernetes-meme.png" style="width: 200px;" /> +<p><strong>Kubernetes</strong> is the Greek word for a ship’s captain. We get the words Cybernetic and Gubernatorial from it. The Kubernetes project focuses on building a robust platform for running thousands of containers in production.</p> +<ul class="simple"> +<li><a class="reference external" href="https://www.katacoda.com/courses/kubernetes">Learn Kubernetes - Katacoda</a> <em>interactive lessons with kubernetes</em></li> +<li><a class="reference external" href="https://kubebyexample.com/">kube by example</a> <em>learn by doing</em></li> +<li><a class="reference external" href="https://youtu.be/X48VuDVv0do">Kubernetes Tutorial for Beginners</a> <em>video tutorial</em></li> +</ul> +</div> +</div> +<div class="section" id="not-so-minimal-tekton-server"> +<h2><em>Not so Minimal</em> Tekton Server</h2> +<p>In late January, we were asked to implement our learnings and deep dive into Kubernetes and TektonCD through an assignment project. Soon we realized that whatever we were learning so far was not even close to what we were going to implement. We were given a document containing the requirements of the applications we were supposed to create along with all the documentation and architectural diagrams.</p> +<p>The application was called <strong>Minimal Tekton Server</strong>. It is a set of three different applications, i.e a server, a CLI, and a dashboard. In short, this application is supposed to <em>listen to custom resources being created and then transfer the request to Tekton API to create the corresponding resource on the OpenShift/Kubernetes cluster.</em></p> +<p>So are you interested in how it went? Please follow up with my <a class="reference external" href="https://avinal.space/posts/development/lovely-dangerous-things-redhat.html">next blog</a>.</p> +</div> +reStructuredText in GitHub2021-02-14T22:47:00+05:302021-02-14T22:47:00+05:30Avinaltag:avinal.space,2021-02-14:/posts/development/rst-guide.html<p class="first last">reStructuredText syntax</p> +<ul> +<li><p class="first">Headers</p> +<div class="highlight"><pre><span></span><span class="gh">Top Title</span> +<span class="gh">=========</span> + +<span class="gh">Sub Title</span> +<span class="gh">---------</span> + +<span class="gh">Sub Sub Title</span> +<span class="gh">^^^^^^^^^^^^^</span> +</pre></div> +</li> +<li><p class="first">Images</p> +<ul> +<li><p class="first">Direct</p> +<div class="highlight"><pre><span></span><span class="p">..</span> <span class="ow">figure</span><span class="p">::</span> image-path-or-url + <span class="nc">:align:</span> center + <span class="nc">:target:</span> link-to-go-when-image-is-clicked + <span class="nc">:alt:</span> alternative-text-if-any +</pre></div> +</li> +<li><p class="first">Indirect</p> +<div class="highlight"><pre><span></span><span class="p">..</span> <span class="nt">|substitution|</span> <span class="ow">image</span><span class="p">::</span> image-path-or-url + <span class="nc">:target:</span> link-to-go-when-image-is-clicked +</pre></div> +<p>You can use <code>|substitution|</code> where you want to put your image.</p> +</li> +</ul> +</li> +<li><p class="first">Links</p> +<div class="highlight"><pre><span></span><span class="s">`Link Text </span><span class="si">&lt;link-itself&gt;</span><span class="s">`__</span> +</pre></div> +</li> +<li><p class="first">Lists</p> +<div class="highlight"><pre><span></span><span class="m">-</span> item 1 +<span class="m">-</span> item 2 + +<span class="m">*</span> item 1 +<span class="m">*</span> itme 2 + +<span class="m">#.</span> item 1 +<span class="m">#.</span> item 2 + +<span class="m">1.</span> item 1 +<span class="m">2.</span> item 2 +</pre></div> +<p>First two lists are unordered next two are ordered.</p> +</li> +<li><p class="first">Code</p> +<ul> +<li><p class="first">Inline</p> +<div class="highlight"><pre><span></span><span class="na">:code:</span><span class="nv">`your-code`</span> +</pre></div> +</li> +<li><p class="first">Code block</p> +<div class="highlight"><pre><span></span><span class="p">..</span> <span class="ow">code-block</span><span class="p">::</span> <span class="k">language(optional)</span> + +<span class="s"> Your code</span> +<span class="s"> in multiple lines. You may enable line numbers too.</span> +</pre></div> +</li> +</ul> +</li> +<li><p class="first">Tables</p> +<div class="highlight"><pre><span></span>+----------------+----------------+ +<span class="o">|</span> Header Cell | Header Cell | ++================+================+ +<span class="o">|</span> Data cell | Data Cell | ++----------------+----------------+ +<span class="o">|</span> Header Cell | Header Cell | ++----------------+----------------+ +</pre></div> +</li> +<li><p class="first">Raw HTML block</p> +<div class="highlight"><pre><span></span><span class="p">..</span> <span class="ow">raw</span><span class="p">::</span> html + + &lt;put&gt; + your html code here + &lt;/put&gt; +</pre></div> +</li> +<li><p class="first">Notes, warnings</p> +<div class="highlight"><pre><span></span><span class="p">..</span> <span class="ow">note</span><span class="p">::</span> + + Put your note here. + +<span class="p">..</span> <span class="ow">warning</span><span class="p">::</span> + + Put your warning here. + +<span class="p">..</span> <span class="ow">important</span><span class="p">::</span> + + Put instructions here. + +<span class="p">..</span> <span class="ow">admonition</span><span class="p">::</span> custom-text + + Custom description here. +</pre></div> +</li> +</ul> +<p>These all are supported by GitHub very well. For more exhautive list specific to Sphinx see <a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html">this</a> link.</p> +<div class="section" id="tips"> +<h2>Tips</h2> +<ul class="simple"> +<li>There must be a blank line before and after any directive. Such as after title or code block, tables etc.</li> +<li>The options and content of a directives must be 1 tab indented to the directives.</li> +</ul> +</div> +How I implemented WakaTime embeddable Coding Graph GHA?2021-02-02T21:47:00+05:302021-02-02T21:47:00+05:30Avinaltag:avinal.space,2021-02-02:/posts/development/wakatime-readme.html<p class="first last">f you use WakaTime to track your coding activity. You can add that to your README as a bar graph or embed it in your blog/portfolio. Just add this action to any of your repositories and there you have it.</p> +<a href="https://github.com/avinal/Profile-Readme-WakaTime"><img src="https://raw.githubusercontent.com/avinal/Profile-Readme-WakaTime/b281d074ee75f9626b39d10e2e518c6a297208a3/waka.png" class="img-fluid"></a><div class="section" id="implementation-details"> +<h2>Implementation Details</h2> +<p>This GitHub Action is divided into three parts. I didn't want to use Docker but it seems it doesn't work well without it. Let dive a little into technical details. Three parts are as below.</p> +<ol class="arabic simple"> +<li><a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py">main.py</a> python script. This script contains many procedures.</li> +</ol> +<ul> +<li><p class="first"><a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py#L52">Getting JSON data file via WakaTime API</a></p> +<blockquote> +<div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">get_stats</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">:</span> + <span class="o">...</span> + <span class="k">return</span> <span class="n">data_list</span> +</pre></div> +</blockquote> +<p>This function parses the JSON file received and scraps out the useful data as a list of lists. Data scraped are language list, time spent on each language, percentage of the time, start date, and end date. For this action, I have limited the number of languages to 5 however it should be very easy to increase that number.</p> +</li> +<li><p class="first"><a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py#L13">Setting the Timeline</a></p> +<blockquote> +<div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">this_week</span><span class="p">(</span><span class="n">dates</span><span class="p">:</span> <span class="nb">list</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span> +<span class="o">...</span> +<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;Coding Activity During: </span><span class="si">{</span><span class="n">week_start</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%d</span><span class="s1"> %B, %Y&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">week_end</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%d</span><span class="s1"> %B, %Y&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> +</pre></div> +</blockquote> +<p>The start date and end date scraped in the last function are used here to set the timeline. Because date in JSON is provided in UTC as below :</p> +<blockquote> +<div class="highlight"><pre><span></span><span class="err">da</span><span class="kc">te</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;YYYY-MM-DDTHH:MM:SSZ&quot;</span><span class="w"></span> +</pre></div> +</blockquote> +<p>I striped it to simple dates only. We can set them manually by taking the current time from the system. But that method is flawed. But this method ensures that JSON was received latest and the request was successful. Any anomaly will point to a failure in request.</p> +</li> +<li><p class="first"><a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py#L21">Creating a bar graph</a></p> +<blockquote> +<div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">make_graph</span><span class="p">(</span><span class="n">data</span><span class="p">:</span> <span class="nb">list</span><span class="p">):</span> + <span class="o">...</span> + <span class="n">savefig</span><span class="p">(</span><span class="o">...</span><span class="p">)</span> +</pre></div> +</blockquote> +<p>Lastly, it is time to generate the graph and save them as an image. This function uses the data scraped in the first step. Creating a bar graph using <cite>matplotlib</cite> is easy. Decorating was a bit difficult. I wanted this graph to merge with GitHub's look so I chose to color the bar as GitHub colors the languages. That data is stored as <cite>colors.json</cite>. Many of the languages have slightly different spelling in GitHub as compared to WakaTime. So some languages are shown in default color. That can be improved if we notice that language and change its color manually. Lastly, the graph is saved both as SVG and PNG. SVGs are better to put on a responsive page.</p> +</li> +</ul> +<ol class="arabic" start="2"> +<li><p class="first"><a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/entrypoint.sh">entrypoint.py</a> shell script. This shell script clones the repository copies the image and pushes changes to the master. There were several problems. First of all authentication. This was solved by using a remote repository address using GitHub Token. And it seems that GitHub doesn't allow to commit without a username and email. So I used <strong>github-actions</strong> bot email.</p> +<blockquote> +<div class="highlight"><pre><span></span>remote_repo-<span class="s2">&quot;https://</span><span class="si">${</span><span class="nv">GITHUB_ACTOR</span><span class="si">}</span><span class="s2">:</span><span class="si">${</span><span class="nv">INPUT_GITHUB_TOKEN</span><span class="si">}</span><span class="s2">@github.com/</span><span class="si">${</span><span class="nv">GITHUB_REPOSITORY</span><span class="si">}</span><span class="s2">.git&quot;</span> +git config user.email <span class="s2">&quot;41898282+github-actions[bot]@users.noreply.github.com&quot;</span> +git config user.name <span class="s2">&quot;GitHub Actions&quot;</span> +</pre></div> +</blockquote> +</li> +</ol> +<blockquote> +<p><code>41898282</code> is the id assigned to the github-actions bot. Don't ask where I found them 🙂.</p> +<p>Another problem was to separate repository name from combined <em>username/repository-name</em> provided by <cite>${GITHUB_REPOSITORY}</cite>. GitHub doesn't provides a direct way to get just the repo name. We used <em>Internal Field Separator</em>. It returns an array and works similar to <code>split()</code> command in Python and Java.</p> +<blockquote> +<div class="highlight"><pre><span></span><span class="c1"># &#39;/&#39; is the seperator</span> +IFS-<span class="s1">&#39;/&#39;</span> <span class="nb">read</span> -ra reponame <span class="o">&lt;&lt;&lt;</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">GITHUB_REPOSITORY</span><span class="si">}</span><span class="s2">&quot;</span> +<span class="c1"># returned {username, repository}</span> +repository-<span class="s2">&quot;</span><span class="si">${</span><span class="nv">reponame</span><span class="p">[1]</span><span class="si">}</span><span class="s2">&quot;</span> +</pre></div> +</blockquote> +</blockquote> +<p>After that, all other commands are pretty straight. Commit the added files and push them.</p> +<ol class="arabic simple" start="3"> +<li><a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/Dockerfile">Dockerfile</a> <strong>IMPORTANT</strong> It took a lot of time to reach this state 🥱. This is where all the magic happens. I am running <cite>ubuntu:latest</cite> inside the container. I first update the distribution. Then install the required python packages. Lastly, I invoke the python script and shell script.</li> +</ol> +<p>There was an almost impossible problem, I searched hundreds of posts that <em>how can I access the generated files inside Docker container</em>, but no luck. But at last, I found a workaround(obviously otherwise you wouldn't be reading this by now 🤣) each command is run in a separate virtual sub-container. As the command ends its output is also lost but not when you club multiple commands together. At least not until every command is finished. The generated files are available to the next clubbed process. I did that by combining the python script run and shell script run.</p> +<div class="highlight"><pre><span></span><span class="k">CMD</span><span class="w"> </span>python3 /main.py <span class="o">&amp;&amp;</span> /entrypoint.sh +</pre></div> +<p>This part is the smallest yet took the most time and tries while developing this action.</p> +</div> +<div class="section" id="how-to-use-this-github-actions"> +<h2>How to use this GitHub Actions?</h2> +<ol class="arabic"> +<li><p class="first">First get your WakaTime API Key. You can get it from your [WakaTime](<a class="reference external" href="https://wakatime.com">https://wakatime.com</a>) account settings.</p> +</li> +<li><p class="first">Save WakaTime API Key to Repository Secret. Find that by clicking the Settings tab. Keep the name of the secret as <strong>WAKATIME_API_KEY</strong>.</p> +</li> +<li><p class="first">Add the following line in your README.md of your repo.</p> +<blockquote> +<div class="highlight"><pre><span></span><span class="p">&lt;</span><span class="nt">img</span> <span class="na">src-</span><span class="err">&quot;</span><span class="na">https:</span><span class="err">//</span><span class="na">github</span><span class="err">.</span><span class="na">com</span><span class="err">/&lt;</span><span class="na">username</span><span class="p">&gt;</span>/<span class="p">&lt;</span><span class="nt">repository-name</span><span class="p">&gt;</span>/blob/<span class="p">&lt;</span><span class="nt">branch-name</span><span class="p">&gt;</span>/images/stat.svg&quot; alt-&quot;Alternative Text&quot;/&gt; +Example: <span class="p">&lt;</span><span class="nt">img</span> <span class="na">src-</span><span class="err">&quot;</span><span class="na">https:</span><span class="err">//</span><span class="na">github</span><span class="err">.</span><span class="na">com</span><span class="err">/</span><span class="na">avinal</span><span class="err">/</span><span class="na">avinal</span><span class="err">/</span><span class="na">blob</span><span class="err">/</span><span class="na">main</span><span class="err">/</span><span class="na">images</span><span class="err">/</span><span class="na">stat</span><span class="err">.</span><span class="na">svg</span><span class="err">&quot;</span> <span class="na">alt-</span><span class="err">&quot;</span><span class="na">Avinal</span> <span class="na">WakaTime</span> <span class="na">Activity</span><span class="err">&quot;</span><span class="p">/&gt;</span> +</pre></div> +</blockquote> +</li> +</ol> +<blockquote> +You can use this method to embed in web pages too. <strong>Do not use the markdown method of inserting images. It does not work sometimes.</strong></blockquote> +<ol class="arabic" start="4"> +<li><p class="first">Click the <strong>Action</strong> tab and <strong>choose to set up a workflow yourself</strong>.</p> +</li> +<li><p class="first">Copy the following code into the opened file, you can search for <strong>WakaTime Stat</strong> in the marketplace tab for assistance.</p> +<blockquote> +<div class="highlight"><pre><span></span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">WakaTime status update</span><span class="w"></span> + +<span class="nt">on</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">schedule</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="c1"># Runs at 12 am &#39;0 0 * * *&#39; UTC</span><span class="w"></span> +<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">cron</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;1</span><span class="nv"> </span><span class="s">0</span><span class="nv"> </span><span class="s">*</span><span class="nv"> </span><span class="s">*</span><span class="nv"> </span><span class="s">*&quot;</span><span class="w"></span> + +<span class="nt">jobs</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">update-readme</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Update the WakaTime Stat</span><span class="w"></span> +<span class="w"> </span><span class="nt">runs-on</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ubuntu-latest</span><span class="w"></span> +<span class="w"> </span><span class="nt">steps</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="c1"># Use avinal/Profile-Readme-WakaTime@&lt;latest-release-tag&gt; for latest stable release</span><span class="w"></span> +<span class="w"> </span><span class="c1"># Do not change the line below except the word master with tag number maybe</span><span class="w"></span> +<span class="w"> </span><span class="c1"># If you have forked this project you can use &lt;username&gt;/Profile-Readme-WakaTime@master instead</span><span class="w"></span> +<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">avinal/Profile-Readme-WakaTime@master</span><span class="w"></span> +<span class="w"> </span><span class="nt">with</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="c1"># WakaTime API key stored in secrets, do not directly paste it here</span><span class="w"></span> +<span class="w"> </span><span class="nt">WAKATIME_API_KEY</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.WAKATIME_API_KEY }}</span><span class="w"></span> +<span class="w"> </span><span class="c1"># Automatic github token</span><span class="w"></span> +<span class="w"> </span><span class="nt">GITHUB_TOKEN</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ github.token }}</span><span class="w"></span> +<span class="w"> </span><span class="c1"># Branch - newer GitHub repositories have &quot;main&quot; as default branch, change to main in that case, default is master</span><span class="w"></span> +<span class="w"> </span><span class="nt">BRANCH</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;master&quot;</span><span class="w"></span> +<span class="w"> </span><span class="c1"># Manual Commit messages - write your own messages here</span><span class="w"></span> +<span class="w"> </span><span class="nt">COMMIT_MSG</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Automated</span><span class="nv"> </span><span class="s">Coding</span><span class="nv"> </span><span class="s">Activity</span><span class="nv"> </span><span class="s">Update</span><span class="nv"> </span><span class="s">:alien:&quot;</span><span class="w"></span> +</pre></div> +</blockquote> +</li> +<li><p class="first">Please wait till 12 AM UTC to run this workflow automatically. Or you can force run it by going to the Actions tab. Or you can add the following lines under <cite>on:</cite> to run with every push. Search for 12 AM UTC to find the equivalent time in your time zone.</p> +<blockquote> +<div class="highlight"><pre><span></span><span class="nt">on</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">push</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">branches</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="w"> </span><span class="nv">master</span><span class="w"> </span><span class="p p-Indicator">]</span><span class="w"></span> +<span class="w"> </span><span class="nt">schedule</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">cron</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;1</span><span class="nv"> </span><span class="s">0</span><span class="nv"> </span><span class="s">*</span><span class="nv"> </span><span class="s">*</span><span class="nv"> </span><span class="s">*&#39;</span><span class="w"></span> +</pre></div> +</blockquote> +</li> +</ol> +</div> +<div class="section" id="my-coding-activity"> +<h2>My Coding Activity</h2> +<img class="img-fluid" src="https://raw.githubusercontent.com/avinal/avinal/main/images/stat.svg"></div> +How I Created This Blog?2021-01-26T16:47:00+05:302021-01-26T16:47:00+05:30Avinaltag:avinal.space,2021-01-26:/posts/development/twilight-blog.html<p class="first last">As you would have guessed by now, this blog is created using one such awesome SSG named <strong>Pelican</strong>. Pelican is simple, customizable and offers lots of themes and plugins. Pelican is python based SSG and is available through <tt class="docutils literal">pip</tt>.</p> +<p><span class="html-raw"><div class="alert alert-info" role="alert">This article may not be for you if you are a web developer. You already got better options. 😉</div></span></p> +<p>There are lots of ways to create a personal website or a blog. You can design your own user interface and write the backend code. But not everyone is a web developer. And here comes <abbr title="Static Site Generator">SSGs</abbr> to the rescue. <strong>Static Site Generators</strong> are little more than just website generators. In general, if you are looking for a simple blog, its better to use SSG than writing a lot of html and css. They are simple and elegant. Easy to maintain and you can add lots of customizations to your site without breaking or bloating your blog. There are lots of SSGs, <a class="reference external" href="https://jekyllrb.com/">Jekyll</a>, <a class="reference external" href="https://blog.getpelican.com/">Pelican</a> and more complex ones like <a class="reference external" href="https://www.gatsbyjs.com/">Gatsby</a>, <a class="reference external" href="https://gohugo.io/">Hugo</a> .</p> +<p>As you would have guessed by now, this blog is created using one such awesome SSG named <strong>Pelican</strong>. Pelican is simple, customizable and offers lots of <a class="reference external" href="http://www.pelicanthemes.com/">themes</a> and <a class="reference external" href="https://github.com/getpelican/pelican-plugins">plugins</a>. Pelican is python based SSG and is available through <code>pip</code>.</p> +<div class="highlight"><pre><span></span><span class="c1"># for reStructuredText only (recommended)</span> +python -m pip install pelican + +<span class="c1"># for markdown and reStructuredText both</span> +python -m pip install <span class="s2">&quot;pelican[markdown]&quot;</span> +</pre></div> +<p>You can start a pelican project by typing following command. It will create a basic template and build configurations.</p> +<div class="highlight"><pre><span></span>pelican-quickstart + +<span class="c1"># output</span> +yourproject/ +├── content <span class="c1"># Put your content here</span> +│ └── <span class="o">(</span>pages<span class="o">)</span> +├── output <span class="c1"># Output files</span> +├── tasks.py +├── Makefile <span class="c1"># Makefile to run build and publish command</span> +├── pelicanconf.py <span class="c1"># Main settings file</span> +└── publishconf.py <span class="c1"># Settings to use when ready to publish</span> +</pre></div> +<p>Next step is to choose themes. As I said earlier there are lots of <a class="reference external" href="http://www.pelicanthemes.com/">themes</a> . And it is easy to create your own theme. Check <a class="reference external" href="https://docs.getpelican.com/en/latest/themes.html">here</a> to create your own theme. My choice of theme was <a class="reference external" href="https://nairobilug.github.io/pelican-alchemy/">pelican-alchemy</a> . This is a simple and great theme. Installing and removing themes in pelican is very easy.</p> +<div class="highlight"><pre><span></span><span class="c1"># list all installed themes</span> +pelican-themes -l +<span class="c1"># output</span> +simple +alchemy +notmyidea + +<span class="c1"># install new theme</span> +pelican-themes -i theme-path + +<span class="c1"># remove a theme</span> +pelican-themes -r theme-name +</pre></div> +<p>To use a particular theme, set the <code>THEME</code> variable in the <strong>pelicanconf.py</strong> file.</p> +<div class="highlight"><pre><span></span><span class="n">THEME</span> <span class="o">=</span> <span class="s1">&#39;alchemy&#39;</span> +</pre></div> +<p>You can also use a theme that is not installed if you have all the required theme files. Just set this variable to its path.</p> +<div class="highlight"><pre><span></span><span class="n">THEME</span> <span class="o">=</span> <span class="s1">&#39;path-to-theme-directory&#39;</span> +</pre></div> +<p>Various themes will have different feature, choose according to your need, or you can always add a feature through plugin. The next step is to build and check your blog. Pelican got it all set up.</p> +<div class="highlight"><pre><span></span><span class="c1"># build your website</span> +make html +<span class="c1"># output</span> +<span class="s2">&quot;pelican&quot;</span> <span class="s2">&quot;/mnt/z/my_git/avinal.github.io/content&quot;</span> -o <span class="s2">&quot;/mnt/z/my_git/avinal.github.io/output&quot;</span> -s <span class="s2">&quot;/mnt/z/my_git/avinal.github.io/pelicanconf.py&quot;</span> +Done: Processed <span class="m">6</span> articles, <span class="m">0</span> drafts, <span class="m">1</span> page, <span class="m">0</span> hidden pages and <span class="m">0</span> draft pages <span class="k">in</span> <span class="m">2</span>.43 seconds. + +<span class="c1"># build and test/serve on localhost</span> +make serve +<span class="c1"># output</span> +<span class="s2">&quot;pelican&quot;</span> -l <span class="s2">&quot;/mnt/z/my_git/avinal.github.io/content&quot;</span> -o <span class="s2">&quot;/mnt/z/my_git/avinal.github.io/output&quot;</span> -s <span class="s2">&quot;/mnt/z/my_git/avinal.github.io/pelicanconf.py&quot;</span> + +Serving site at: <span class="m">127</span>.0.0.1:8000 - Tap CTRL-C to stop +</pre></div> +<p>Now open your browser and open <a class="reference external" href="127.0.0.1:8000">127.0.0.1:8000</a> or <a class="reference external" href="localhost:8000">localhost:8000</a>. You should be able to see your new blog. Stop local server using <code>CTRL+C</code>. Next step is to publish it to github pages. Pelican has tools for this too. But wait we can do something more interesting here. Why not let GitHub take care of both building and publishing? Just push this project to a GitHub repository and set up GitHub pages. See <a class="reference external" href="https://pages.github.com/">this</a> help for instructions on that. Before pushing to GitHub add this little script to your project.</p> +<div class="highlight"><pre><span></span><span class="ch">#! /bin/bash</span> +<span class="c1">## file: publi.sh</span> + +<span class="c1"># install tools</span> +sudo apt-get install -y git make python3 python3-pip python3-setuptools python3-wheel + +<span class="c1"># setup github config</span> +git config user.email <span class="s2">&quot;your-email&quot;</span> +git config user.name <span class="s2">&quot;your-username&quot;</span> + +<span class="c1"># install dependencies</span> +sudo pip3 install -r requirements.txt + +<span class="c1"># pelican commands - install theme put your theme in themes directory</span> +pelican-themes --install themes/theme-name + +<span class="c1"># publish to github pages</span> +ghp-import -m <span class="s2">&quot;Generate Pelican site&quot;</span> -b gh-pages output + git push -f origin gh-pages +</pre></div> +<p>Now once your project is on GitHub, go to the <strong>Actions</strong> tab and click on <em>set up a workflow yourself</em> and paste the following code into the file and commit it.</p> +<div class="highlight"><pre><span></span><span class="c1"># file: publish.yml</span><span class="w"></span> +<span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Publish Blog</span><span class="w"></span> +<span class="nt">on</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">push</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">branches</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="w"> </span><span class="nv">main</span><span class="w"> </span><span class="p p-Indicator">]</span><span class="w"></span> +<span class="w"> </span><span class="nt">pull_request</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">branches</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="w"> </span><span class="nv">main</span><span class="w"> </span><span class="p p-Indicator">]</span><span class="w"></span> + +<span class="nt">jobs</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">build</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="nt">runs-on</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ubuntu-latest</span><span class="w"></span> +<span class="w"> </span><span class="nt">steps</span><span class="p">:</span><span class="w"></span> +<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">actions/checkout@v2</span><span class="w"></span> +<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">set up permissions</span><span class="w"></span> +<span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">chmod +x publi.sh</span><span class="w"></span> +<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Run a multi-line script</span><span class="w"></span> +<span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">./publi.sh</span><span class="w"></span> +</pre></div> +<p>If you have done everything correctly then go to <em>https://username.github.io</em> and you should see your blog. From now on whenever you want to add an article, just write it, test locally and push. Yay your blog is ready.</p> +<p><span class="html-raw"><h2 style=font-family:Exodar;font-weight:lighter;">But My Blog is Special 🥰</h2></span></p> +<p>My blog looks different, that is because I customized this theme a lot, especially headers, footers, and link appearance. And sorry I won't be publish my theme any time sooner. But I am listing down all the resources I have used for finally getting this result. You can always get my help by sending me a <span class="html-raw"><a href="mailto:avinal.xlvii@gmail.com" class="fa fa-envelope" style="text-decoration: none;"></a></span> or starting a discussion on <span class="html-raw"><a href="https://github.com/avinal/avinal/discussions/2" class="fab fa-github" style="text-decoration: none;"></a></span>.</p> +<ul class="simple"> +<li><a class="reference external" href="https://blog.getpelican.com/">Pelican Blog</a></li> +<li><a class="reference external" href="https://docs.getpelican.com/en/latest/">Pelican Docs</a></li> +<li><a class="reference external" href="http://www.pelicanthemes.com/">Pelican Themes</a></li> +<li><a class="reference external" href="https://github.com/nairobilug/pelican-alchemy">Pelican Alchemy Theme</a></li> +<li><a class="reference external" href="https://codepen.io/saransh/pen/BKJun">Parallax Star background in CSS</a></li> +<li><a class="reference external" href="https://codepen.io/kowlor/pen/ZYYQoy">Solar System animation</a></li> +<li><span class="html-raw"><a href="https://www.dafont.com/exodar.font" style="font-family: Exodar;font-weight: lighter;text-decoration: none;">EXODAR Font</a></span></li> +<li><a class="reference external" href="https://fonts.google.com/specimen/Overpass+Mono">Overpass Mono</a></li> +<li><a class="reference external" href="https://fontawesome.com/how-to-use/on-the-web/setup/hosting-font-awesome-yourself">Font Awesome</a></li> +</ul> +<p><span class="html-raw"><div class="alert alert-warning" role="alert">Some of the fonts I have used in my blog may not be available for commercial use. Please check if you intend to do so. Alternatively you may use fonts from this wonderful collection, <a href="https://www.websiteplanet.com/blog/best-free-fonts/">70+ Best Free Fonts for Designers – Free for Commercial Use in 2021</a> <i>(Thanks Ritta Blens for this suggestion)</i></div></span></p> +<p><span class="html-raw"><p align=center>Thanks!</p></span></p> +Move WSL 2 Safely to another Drive2020-12-31T19:07:00+05:302020-12-31T19:07:00+05:30Avinaltag:avinal.space,2020-12-31:/posts/development/wsl1.html<p class="first last">It is real pain when you have small SSD and Windows Subsystem for Linux (WSL) is growing exponentially in size. There is no easy way to move the WSL installation to another drive. Here in this blog I will discuss how to tackle this problem with bite size steps.</p> +<p>It is real pain when you have small SSD and Windows Subsystem for Linux (WSL) is growing exponentially in size. There is no easy way to move +the WSL installation to another drive. Here in this blog I will discuss how to tackle this problem with bite size steps.</p> +<ol class="arabic simple"> +<li>Open a PowerShell <img alt="powershell" class="align-middle" src="/images/powershell.png" style="width: 5%;" /> or Command Prompt <img alt="command-line" class="align-middle" src="/images/command-line.png" style="width: 5%;" /> with <em>Admin</em> access. For this you can use <img alt="WinKey" class="align-middle" src="/images/windows10.png" style="width: 5%;" /> + X shortcut and select <strong>Windows PowerShell(Admin)</strong>.</li> +<li>Check if the WSL 2 installation you are planning to move is is currently running/stopped.</li> +</ol> +<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="n">-l</span> <span class="n">-v</span> +<span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> + <span class="n">NAME</span> <span class="n">STATE</span> <span class="n">VERSION</span> +<span class="p">*</span> <span class="n">Ubuntu</span> <span class="n">Running</span> <span class="n">2</span> + <span class="n">Kali</span> <span class="n">Stopped</span> <span class="n">2</span> +</pre></div> +<ol class="arabic simple" start="3"> +<li>If its running then you must stop the particular WSL distribution. (<em>Ubuntu</em> used as example)</li> +</ol> +<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="n">-t</span> <span class="n">Ubuntu</span> +</pre></div> +<ol class="arabic simple" start="4"> +<li>Export to some folder. (Here exporting <em>Ubuntu</em> as <em>ubuntu-ex.tar</em> to <em>Z:wsl2</em>)</li> +</ol> +<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="p">-</span><span class="n">-export</span> <span class="n">Ubuntu</span> <span class="s2">&quot;Z:\export\ubuntu-ex.tar&quot;</span> +</pre></div> +<ol class="arabic simple" start="5"> +<li>Unregister previous WSL installation</li> +</ol> +<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="p">-</span><span class="n">-unregister</span> <span class="n">Ubuntu</span> +</pre></div> +<ol class="arabic simple" start="6"> +<li>Create a new folder and import your WSL installation to that folder.</li> +</ol> +<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="nb">New-Item</span> <span class="n">-Path</span> <span class="s2">&quot;Z:\wsl2&quot;</span> <span class="n">-ItemType</span> <span class="n">Directory</span> + + <span class="n">Directory</span><span class="p">:</span> <span class="n">Z</span><span class="p">:\</span> + +<span class="n">Mode</span> <span class="n">LastWriteTime</span> <span class="n">Length</span> <span class="n">Name</span> +<span class="p">----</span> <span class="p">-------------</span> <span class="p">------</span> <span class="p">----</span> +<span class="n">d</span><span class="p">-----</span> <span class="n">31</span><span class="p">-</span><span class="n">12</span><span class="p">-</span><span class="n">2020</span> <span class="n">21</span><span class="p">:</span><span class="n">03</span> <span class="n">wsl2</span> + +<span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="p">-</span><span class="n">-import</span> <span class="n">Ubuntu</span> <span class="s2">&quot;Z:\wsl2&quot;</span> <span class="s2">&quot;Z:\export\ubuntu-ex.tar&quot;</span> +</pre></div> +<ol class="arabic simple" start="7"> +<li>Check after import is complete</li> +</ol> +<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="n">-l</span> <span class="n">-v</span> +<span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> + <span class="n">NAME</span> <span class="n">STATE</span> <span class="n">VERSION</span> +<span class="p">*</span> <span class="n">Ubuntu</span> <span class="n">Running</span> <span class="n">2</span> + <span class="n">Kali</span> <span class="n">Stopped</span> <span class="n">2</span> +</pre></div> +<ol class="arabic simple" start="8"> +<li>Mark one of your WSL distribution as <em>(default)</em>.</li> +</ol> +<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="n">-s</span> <span class="n">Ubuntu</span> +</pre></div> +<ol class="arabic simple" start="9"> +<li>After exporting your default user will be set as <span class="html-raw"><i style="color:red">root</i></span> , to change it to your desired username, run following command</li> +</ol> +<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">ubuntu</span> <span class="n">config</span> <span class="p">-</span><span class="n">-default-user</span> <span class="n">user_name</span> +</pre></div> +<ol class="arabic simple" start="10"> +<li>Finally run <code>wsl</code> and you have successfully moved your WSL 2 installation to another drive.</li> +</ol> +Create the VLC User Documentation for one Mobile Port(Android)2020-12-01T23:47:00+05:302020-12-31T23:19:00+05:30Avinaltag:avinal.space,2020-12-01:/posts/development/vlc-gsod-report.html<p class="first last">The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLC’s wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization.</p> +<div class="section" id="overview"> +<h2>OVERVIEW</h2> +<p>VideoLAN is a non-profit organization that develops software for playing video and other media formats. VLC media player (commonly known as just VLC) is a free and Open Source cross-platform multimedia player and framework that plays most multimedia files as well as DVDs, Audio CDs, VCDs, and various streaming protocols built by the VideoLAN organization and a team of volunteers. VLC for Android is a port of the VLC for Android OS.</p> +<p>The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLC’s wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization and an engaging and easy to follow for both technical and non-technical users. The original proposal can be found here.</p> +</div> +<div class="section" id="project-goals"> +<h2>PROJECT GOALS</h2> +<ul class="simple"> +<li>Propose a new structure for documentation e.g. Chapter Separation, Sections etc</li> +<li>Proper balance between technical and non-technical descriptions to serve all kinds of users.</li> +<li>Adequate amount of screenshots in each section and other supporting media to make documentation more appealing.</li> +<li>Optimized for all Screen Sizes. Especially for Mobile Devices.</li> +<li>Ease of navigation</li> +</ul> +</div> +<div class="section" id="community-bonding"> +<h2>COMMUNITY BONDING</h2> +<p>This period was mostly utilized for collecting more information and many internal meetings to shape the projects and bonding with fellow writers, developers(mentors). I got to know more about the VLC organization and the project. We decided to create a skeleton of the project and then follow a Issue-Merge Request-Review-Merge system to keep the commit history clean and maintain the proper review of the work before it is merged.</p> +<p>I initially proposed that the new documentation should also use the same tools(Sphinx and GitLab Pages) because if in future we want to merge all the documentation into a single one, it will be easier to migrate and will provide a consistency across all documentations. Later I got to know that this will be an independent project and may not be merged since it solves a lot of problems. I was already familiar with the tools so it took no time to get started.</p> +<p>Nicolas Pomepuy, who is the lead developer of VLC for Android was assigned as my primary mentor and Simon Latapie as secondary mentor.</p> +</div> +<div class="section" id="documentation-development-phase"> +<h2>DOCUMENTATION DEVELOPMENT PHASE</h2> +<p>Initial Preparation +I first moved my existing demo documentation to an entirely new repository with only the skeleton at the suggestion of my mentor. It was necessary to keep the commit history clean. The skeleton contained the empty directories representing the chapter separation. I got to learn “how to properly develop a project and contribute to open source”. This was a major lesson that got me familiar with the Merge Request and Review system.</p> +<p>The Development +The next part was to frame the actual documentation pages and push to the repository. Since there was a significant time-zone difference we agreed to discuss by creating issues and sometimes my emails. There was one meeting every fortnight to check the process and discuss further development and blockers. Nicolas was really helpful and patient, answering each of my big-small queries.</p> +<p>Work Done</p> +<style> +table,td,th { +border-collapse:collapse; +border: 1px solid #000000; +} +</style> +<table> +<tr> +<td><strong>Documentation</strong></td> +<td><a href="https://avinal.videolan.me/vlc-android-user/">VLC for Android User Documentation </a> +</td> +</tr> +<tr> +<td><strong>Project Repository</strong> +</td> +<td><a href="https://code.videolan.org/avinal/vlc-android-user">Projects · Avinal Kumar / VLC for Android User Documentation</a> +</td> +</tr> +<tr> +<td><strong>Commits</strong> +</td> +<td><a href="https://code.videolan.org/avinal/vlc-android-user/-/commits/master">Commits · Avinal Kumar / VLC for Android User Documentation</a> +</td> +</tr> +<tr> +<td><strong>Issues/Discussions</strong> +</td> +<td><a href="https://code.videolan.org/avinal/vlc-android-user/-/issues">Issues · Avinal Kumar / VLC for Android User Documentation</a> +</td> +</tr> +<tr> +<td><strong>Merge Requests</strong> +</td> +<td><a href="https://code.videolan.org/avinal/vlc-android-user/-/merge_requests">Merge Requests · Avinal Kumar / VLC for Android User Documentation</a> +</td> +</tr> +</table><p>Since the Android port of VLC can be installed on Android Smartphones/Tablets, Android TVs, Amazon Fire Devices and Chromebooks too, a full documentation will cover these all devices. Although these are different form factors, the features provided on each of them is exactly the same and the same documentation can be used for all these devices. As of now only Smartphones/Tablets are covered. And later additional pages will be added to reference different features/User Interface. Regardless of this addition the current documentation can serve a major part for all these form factors. +Completed/Remaining</p> +<table> +<tr> +<td><strong>Chapters</strong> +</td> +<td><strong>Sections</strong> +</td> +<td><strong>Status</strong> +</td> +</tr> +<tr> +<td><strong>Settings</strong> +</td> +<td> +<ul> +<li>General Settings +<li>Interface +<li>Video +<li>Subtitles +<li>Audio +<li>Casting +<li>Advanced +</li> +</ul> +</td> +<td><strong>ALL COMPLETED</strong> +<p> +<strong>FOR ALL FORM FACTORS</strong> +</td> +</tr> +<tr> + <td><strong>Video</strong> + </td> + <td> + <ul> + <li>Video Explorer + <li>Video Player + </li> + </ul> + </td> + <td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong> + </td> +</tr> +<tr> + <td><strong>Audio</strong> + </td> + <td> + <ul> + <li>Audio Explorer + <li>Audio Player + </li> + </ul> + </td> + <td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong> + </td> +</tr> +<tr> + <td><strong>Browse</strong> + </td> + <td> + <ul> + <li>Explorer + <li>Local Network + </li> + </ul> + </td> + <td><strong>ONLY SMB IN LOCAL NETWORK COMPLETED</strong> + </td> +</tr> +<tr> + <td><strong>Installation</strong> + </td> + <td> + <ul> + <li>Smartphones/Tablets + <li>Android TV + <li>Fire Devices + <li>Chromebooks + </li> + </ul> + </td> + <td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong> + </td> +</tr> +<tr> + <td><strong>User Interface</strong> + </td> + <td> + <ul> + <li>Smartphones/Tablets + <li>Android TV + <li>Fire Devices + <li>Chromebooks + </li> + </ul> + </td> + <td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong> + </td> +</tr> +<tr> + <td><strong>Support</strong> + </td> + <td> + <ul> + <li>FAQs + <li>Help + </li> + </ul> + </td> + <td><strong>IN PROGRESS</strong> + </td> +</tr> +<tr> + <td><strong>Guidelines</strong> + </td> + <td> + <ul> + <li>Contribution Guideline + <li>Screenshot Guidelines + <li>READMEs + </li> + </ul> + </td> + <td><strong>IN PROGRESS</strong> + </td> +</tr> +</table></div> +<div class="section" id="challenges"> +<h2>CHALLENGES</h2> +<p>The major obstacle was to get screenshots for all form factors. Since screenshots were the major part of this documentation it was necessary to provide proper screenshots in each chapter and with every step. For Android TV and Smartphone this was solved by using emulators instead of actual devices, but to emulate the actual scenario in an emulator was sometimes very difficult. +There were many occasions where I was not able to gather the exact information about devices other than smartphones/tables. Since all form factors share a common pool of features, my mentor suggested that I focus on smartphones/tables. And to create issues mentioning missing parts so that it could be solved later.</p> +</div> +<div class="section" id="thanks"> +<h2>THANKS</h2> +<p>I want to thank my mentors for being supporting and helpful. I want to thank every person at VLC and Google who were involved in this whole process. Thanks and Congrats to my fellow writer Abhishek Pratap Singh. This was a great opportunity to learn and meet awesome people. I learned a lot about Sphinx, reStructured Text and many other things.</p> +</div> + \ No newline at end of file diff --git a/feeds/prime.atom.xml b/feeds/prime.atom.xml new file mode 100644 index 0000000..01a02fa --- /dev/null +++ b/feeds/prime.atom.xml @@ -0,0 +1,16 @@ + +Be My SpaceTime - primehttps://avinal.space/2021-01-09T22:29:00+05:30눈치Introduction to Prime Numbers2021-01-09T22:29:00+05:302021-01-09T22:29:00+05:30Avinaltag:avinal.space,2021-01-09:/posts/prime/prime1.html<p class="first last">A prime is a positive integer <em>p</em> having exactly two positive divisors, namely <em>1</em> and <em>p</em>. An integer <em>n</em> is composite if <em>n</em> &gt; <em>1</em> and <em>n</em> is not prime. (The number 1 is considered neither prime nor composite.)</p> +<blockquote class="epigraph"> +A prime is a positive integer <em>p</em> having exactly two positive divisors, namely <em>1</em> and <em>p</em>. An integer <em>n</em> is composite if <em>n</em> &gt; <em>1</em> and <em>n</em> is not prime. (The number 1 is considered neither prime nor composite.)</blockquote> +<p>We can frame a brute force algorithm for checking primality of numbers using the above statement.</p> +<div class="highlight"><pre><span></span><span class="kt">bool</span><span class="w"> </span><span class="nf">is_prime</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">number</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">factor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;=</span><span class="w"> </span><span class="n">number</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">number</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<span class="w"> </span><span class="n">factor</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<span class="w"> </span><span class="p">}</span><span class="w"></span> +<span class="w"> </span><span class="p">}</span><span class="w"></span> +<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="n">factor</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="o">?</span><span class="w"> </span><span class="nb">true</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">false</span><span class="p">;</span><span class="w"></span> +<span class="p">}</span><span class="w"></span> +</pre></div> + \ No newline at end of file diff --git a/feeds/report.atom.xml b/feeds/report.atom.xml new file mode 100644 index 0000000..fa511ea --- /dev/null +++ b/feeds/report.atom.xml @@ -0,0 +1,689 @@ + +Be My SpaceTime - reporthttps://avinal.space/2021-08-19T23:07:00+05:30눈치Google Summer of Code 20212021-08-19T23:07:00+05:302021-08-19T23:07:00+05:30Avinaltag:avinal.space,2021-08-19:/posts/report/final-evaluation.html<p class="first last">This is the final report of my Google Summer of Code 2021 at The FOSSology Project.</p> +<style> +.rd {color:red;font-weight:bold} +.gr{color:green;font-weight:bold} +.or{color:orange;font-weight:medium} +ul{margin-bottom:0} +</style><div class="section" id="the-cmake-build-system"> +<h2>The CMake Build system</h2> +<p>FOSSology is quite an old and mature project. The project has been using bare metal <strong>Makefiles</strong>. As the project is growing with new agents and modernization it was required to have a modern build system.</p> +<p>The FOSSology is a suite of well-integrated and synchronized sub-projects (called agents) written in C, C++, and PHP. Most of the major agents are in C, C++ and that made CMake an obvious choice for a new build system for FOSSology. CMake is a versatile set of build, test, and packaging tools and is the most popular choice of C/C++ developers. CMake can be extended to create a build system for other languages too via custom scripts.</p> +</div> +<div class="section" id="github-actions-ci-cd"> +<h2>GitHub Actions CI/CD</h2> +<img alt="A CI Meme" class="float-md-right rounded border border-info ml-3" src="/images/ci.png" style="width: 350px;" /> +<p>Since the FOSSology project moved on Github, it has used only the free Travis CI service for OSS projects. +At the time of writing Travis CI has reduced its free tier CI services. GitHub Actions provides faster builds. Since GitHub Actions is a fully managed service by GitHub, we don’t need to know how to scale and operate the infrastructure to run it.</p> +<p>It is straightforward to use with GitHub because when we fork a repository, the actions automatically get forked. This allows you to test and build projects very efficiently and even run them closer to the developer. Also, you have readily available access to the GitHub API, making it more popular among developers.</p> +</div> +<div class="section" id="improvements-over-previous-build-system-and-ci"> +<h2>Improvements over previous build system and CI</h2> +<p>The new build system and CI brings a lot of improvements and features. The list below describes them.</p> +<ul class="simple"> +<li>CMake enforces out-of-source builds. This was already possible with the previous build system but not a strict requirement. This feature keeps the source code clean and makes cleaning the build artifacts easy. (Just remove the build folder :)</li> +<li>One of the major improvements over the previous build system is faster build times. CMake generates parallel build-enabled configurations for all generators. In our tests, the new build system is at least twice as fast as the previous one. With further improvement in configuration, we will be able to further cut the build times.</li> +<li>Previously FOSSology can only be built using <em>Unix Makefiles</em>. With CMake, we can now use many other popular generators such as <em>Ninja</em>.</li> +<li>Now it is also very flexible to choose different compilers. This will help support more platforms and architecture in the future. As of now, we are experimenting with Clang compilers.</li> +<li>FOSSology is quite an old project and a lot of agent testing code was written in the last decade. Initially, none of them were compatible with the new build system, but we were able to hack most of the test code using better-improved methods. Test times have also improved.</li> +<li>Migrating from Travis CI to GitHub Actions was another big move and for the most part, it removes the dependency on a third-party CI service. Along with that GitHub Actions provides better build times, tons of new features, and better integration with other GitHub services.</li> +</ul> +</div> +<div class="section" id="deliverables"> +<h2>Deliverables</h2> +<div class="alert alert-info" role="alert"> +<ul class="simple"> +<li>Final Pull Request <a class="badge badge-info" href="https://github.com/fossology/fossology/pull/2075">#2075</a></li> +<li>Pull Request Branch <a class="badge badge-info" href="https://github.com/avinal/fossology/tree/avinal/feat/buildsystem">avinal/feat/buildsystem</a></li> +<li>Working Branch (individual commits) <ul> +<li><a class="badge badge-info" href="https://github.com/avinal/fossology/tree/avinal/feat/cmake-buildsystem">avinal/feat/cmake-buildsystem</a></li> +<li><a class="badge badge-info" href="https://github.com/avinal/fossology/tree/avinal/feat/testing">avinal/feat/testing</a></li> +</ul></li> +<li>Project Issue <a class="badge badge-info" href="https://github.com/fossology/fossology/issues/1913">#1913</a></li> +<li>Project Discussion <a class="badge badge-info" href="https://github.com/fossology/fossology/discussions/1931">#1931</a></li> +<li>Weekly Reports<ul> +<li><a class="badge badge-info" href="https://gsoc.avinal.space">Personal Blog</a></li> +<li><a class="badge badge-info" href="https://fossology.github.io/gsoc/docs/2021/buildsystem/">FOSSology Official Blog</a></li> +</ul></li></ul> +</div><p><strong>CMake Build System Tasks</strong></p> +<table border="1" class="table table-sm table-hover table-bordered table-responsive docutils align-center"> +<colgroup> +<col width="5%" /> +<col width="15%" /> +<col width="10%" /> +<col width="10%" /> +<col width="20%" /> +<col width="15%" /> +<col width="25%" /> +</colgroup> +<thead valign="bottom"> +<tr><th class="head">#</th> +<th class="head">Agents</th> +<th class="head">Build</th> +<th class="head">Install</th> +<th class="head">Testing</th> +<th class="head">Packaging</th> +<th class="head">Remarks</th> +</tr> +</thead> +<tbody valign="top"> +<tr><td>1</td> +<td>adj2nest</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>2</td> +<td>buckets</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>3</td> +<td>cli</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="rd">Functional</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>4</td> +<td>copyright</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>5</td> +<td>debug</td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>6</td> +<td>decider</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>7</td> +<td>deciderjob</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>8</td> +<td>delagent</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="rd">Functional</span></li> +<li><span class="rd">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>9</td> +<td>demomod</td> +<td><span class="or">YES</span></td> +<td><span class="or">YES</span></td> +<td><ul class="first last simple"> +<li><span class="or">Functional</span></li> +<li><span class="or">Unit</span></li> +</ul> +</td> +<td><span class="or">NO</span></td> +<td><em>(Not Used)</em></td> +</tr> +<tr><td>10</td> +<td>example_wc_agent</td> +<td><span class="or">YES</span></td> +<td><span class="or">YES</span></td> +<td><ul class="first last simple"> +<li><span class="or">Functional</span></li> +<li><span class="or">Unit</span></li> +</ul> +</td> +<td><span class="or">NO</span></td> +<td><em>(Not Used)</em></td> +</tr> +<tr><td>11</td> +<td>clib</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>12</td> +<td>cpplib</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>13</td> +<td>phplib</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>1 functional +test needs fix</td> +</tr> +<tr><td>14</td> +<td>maintagent</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>15</td> +<td>mimetype</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>16</td> +<td>monk</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>17</td> +<td>ninka</td> +<td><span class="or">YES</span></td> +<td><span class="or">YES</span></td> +<td><ul class="first last simple"> +<li><span class="or">Functional</span></li> +<li><span class="or">Unit</span></li> +</ul> +</td> +<td><span class="or">NO</span></td> +<td><em>(Deprecated)</em></td> +</tr> +<tr><td>18</td> +<td>nomos</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>19</td> +<td>ojo</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>1 functional +test needs fix</td> +</tr> +<tr><td>20</td> +<td>pkgagent</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>21</td> +<td>readmeoss</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>22</td> +<td>regexscan</td> +<td><span class="or">YES</span></td> +<td><span class="or">YES</span></td> +<td>&nbsp;</td> +<td><span class="or">NO</span></td> +<td><em>(Deprecated)</em></td> +</tr> +<tr><td>23</td> +<td>reportImport</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>24</td> +<td>reuser</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>25</td> +<td>reso</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>26</td> +<td>scheduler</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="rd">Functional</span></li> +<li><span class="rd">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>Tests needs +fix</td> +</tr> +<tr><td>27</td> +<td>softwareHeritage</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>28</td> +<td>spasht</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>29</td> +<td>spdx2</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>1 Test failing +in CI</td> +</tr> +<tr><td>30</td> +<td>unifiedreport</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>31</td> +<td>ununpack</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="rd">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>Unit tests +needs fix</td> +</tr> +<tr><td>32</td> +<td>wget_agent</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="gr">Functional</span></li> +<li><span class="gr">Unit</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +<tr><td>32</td> +<td>www</td> +<td><span class="gr">YES</span></td> +<td><span class="gr">YES</span></td> +<td><ul class="first last simple"> +<li><span class="rd">UI</span></li> +</ul> +</td> +<td><span class="gr">YES</span></td> +<td>&nbsp;</td> +</tr> +</tbody> +</table> +<p><strong>GitHub Actions CI Tasks</strong></p> +<table border="1" class="table table-sm table-hover table-bordered table-responsive docutils align-center"> +<colgroup> +<col width="5%" /> +<col width="25%" /> +<col width="70%" /> +</colgroup> +<thead valign="bottom"> +<tr><th class="head">#</th> +<th class="head">CI Tasks</th> +<th class="head">Status</th> +</tr> +</thead> +<tbody valign="top"> +<tr><td>1</td> +<td><span class="gr">build</span></td> +<td>Added Ubuntu 20.04 GCC 8, 9 and Clang, GCC 7 not working</td> +</tr> +<tr><td>2</td> +<td><span class="gr">c/cpp unit test</span></td> +<td>Added, delagent, scheduler and ununpack not working</td> +</tr> +<tr><td>3</td> +<td><span class="gr">phpunit tests</span></td> +<td>Added, delagent and scheduler functional not working</td> +</tr> +<tr><td>4</td> +<td><span class="rd">cahching</span></td> +<td>Not implemented</td> +</tr> +<tr><td>5</td> +<td><span class="rd">source install</span></td> +<td>Not implemented</td> +</tr> +</tbody> +</table> +<p>(<span class="gr">GREEN</span>: COMPLETED, <span class="rd">RED</span>: INCOMPLETE, <span class="or">ORANGE</span>: NOT NEEDED/DEPRECATED)</p> +</div> +<div class="section" id="how-does-it-work-and-how-to-use-it"> +<h2>How does it work and how to use it?</h2> +<div class="embed-responsive embed-responsive-16by9"> + <iframe class="embed-responsive-item" src="/images/second-build.webm" allowfullscreen></iframe> +</div><p>The new build system retains the modular and hierarchical structure of the previous build system. On the other hand, the new build system provides several new flags to control the build. The new build system forces out-of-source build instead of the previous in-source builds. This keeps the source clutter-free and reduces the chance of accidentally deleting source files. <em>Testing still needs some in-source artifacts, this will be solved once all the tests are fixed according to the new build system.</em></p> +<p>Each agent is a complete CMake sub-project with its independent configuration for building, installing, and testing. That means a single agent can be built and installed separately and even removed from the default build without breaking other builds. The directory structure is as below.</p> +<div class="highlight"><pre><span></span>. +├── build <span class="c1"># temporary directory for build artifacts</span> +├── cmake <span class="c1"># CMake modules for FOSSology</span> +│ ├── FoPackaging.cmake <span class="c1"># CMake Packaging configurations</span> +│ ├── FoUtilities.cmake <span class="c1"># Custom CMake utilities</span> +│ ├── FoVersionFile.cmake <span class="c1"># VERSION version.php CMake template file</span> +│ ├── SetDefaults.cmake <span class="c1"># CMake defaults for this project</span> +│ ├── TestInstall.make.in <span class="c1"># Template makefile for install during tests</span> +│ └── VERSION.in <span class="c1"># VERSION file template</span> +├── src +│ ├── agent-1 <span class="c1"># Agent sub-project</span> +│ │ ├── agent <span class="c1"># Agent&#39;s source code directory</span> +│ │ │ ├── agent-source-code +│ │ │ └── CMakeLists.txt +│ │ ├── agent_tests <span class="c1"># Agent&#39;s test directory</span> +│ │ │ ├── Unit +│ │ │ ├── Functional +│ │ │ └── CMakeLists.txt +│ │ ├── ui <span class="c1"># Agent&#39;s UI source code</span> +│ │ │ ├── templates +│ │ │ └── agent-ui-code +│ │ └── CMakeLists.txt <span class="c1"># Agent&#39;s top-level CMake configuration</span> +: : +│ ├── other agents +: : +│ └── CMakeLists.txt <span class="c1"># Source intermediate CMake configuration</span> +: +├── other directories and files +: +└── CMakeLists.txt <span class="c1"># FOSSology Top-level CMake configuration</span> +</pre></div> +<p>The <code>cmake</code> directory contains customized CMake modules and templates for FOSSology. This directory is required for all the operations. The general workflow of the new build system as well as how to use it is described below.</p> +<ol class="arabic"> +<li><p class="first">Since the new build system is still in review. You must fork FOSSology and pull the <a class="reference external" href="https://github.com/fossology/fossology/pull/2075">#2075</a> pull request branch. Once you are in FOSSology root, run these commands.</p> +<blockquote> +<div class="highlight"><pre><span></span>git fetch https://github.com/avinal/fossology avinal/feat/buildsystem:buildsystem +git checkout buildsystem +</pre></div> +</blockquote> +</li> +<li><p class="first">The first step towards building is to create a temporary directory for storing intermediate files and build artifacts. By convention we use a directory named <code>build</code>, but you can use any name. (<strong>NOTE: For testing do not use other names</strong>)</p> +<blockquote> +<div class="highlight"><pre><span></span>mkdir build +<span class="nb">cd</span> build +</pre></div> +</blockquote> +</li> +<li><p class="first">In the next steps, we will configure the CMake project and generate the required configurations. You can use several flags to control the build. Given below are the flags available for this project.</p> +<blockquote> +<table border="1" class="table table-sm table-hover table-bordered table-responsive docutils"> +<colgroup> +<col width="35%" /> +<col width="44%" /> +<col width="20%" /> +</colgroup> +<thead valign="bottom"> +<tr><th class="head">CMake Flags</th> +<th class="head">Description</th> +<th class="head">Default</th> +</tr> +</thead> +<tbody valign="top"> +<tr><td><strong>-DCMAKE_INSTALL_PREFIX=&lt;path&gt;</strong></td> +<td>Sets the install prefix.</td> +<td><code>/usr/local</code></td> +</tr> +<tr><td><strong>-DAGENTS=&quot;agent1;agent2...&quot;</strong></td> +<td>Only configure these agents.</td> +<td>ALL AGENTS</td> +</tr> +<tr><td><strong>-DOFFLINE=&lt;ON/OFF&gt;</strong></td> +<td>Controls vendor generation, ON=NO</td> +<td><strong>OFF</strong></td> +</tr> +<tr><td><p class="first"><strong>-DCMAKE_BUILD_TYPE=&lt;type&gt;</strong></p> +<blockquote class="last"> +<ul class="simple"> +<li>Controls build type aka +level optimisation</li> +</ul> +</blockquote> +</td> +<td><ul class="first last simple"> +<li><code>Debug</code></li> +<li><code>Release</code></li> +<li><code>RelWithDebInfo</code></li> +<li><code>MinSizeRel</code></li> +</ul> +</td> +<td><code>Debug</code></td> +</tr> +<tr><td><strong>-DTESTING=&lt;ON/OFF&gt;</strong></td> +<td>Controls testing config generation</td> +<td><strong>OFF</strong></td> +</tr> +<tr><td><strong>-DMONOPACK=&lt;ON/OFF&gt;</strong></td> +<td>Package adj2nest and ununpack seperately</td> +<td><strong>OFF</strong></td> +</tr> +<tr><td><strong>-GNinja</strong></td> +<td>Use Ninja instead of Unix Makefiles</td> +<td><em>Unix MakeFiles</em></td> +</tr> +</tbody> +</table> +<p>There are lots of inbuilt CMake command-line options you can see them in the official <a class="reference external" href="https://cmake.org/cmake/help/v3.10/manual/cmake.1.html">documentation</a>. Once you have chosen your flags we can now configure the project using the following commands.</p> +<div class="highlight"><pre><span></span><span class="c1"># From build folder</span> +<span class="nb">cd</span> &lt;name-of-build-directory&gt; +cmake &lt;flags&gt; .. +</pre></div> +</blockquote> +</li> +<li><p class="first">The next step is to build the project. You can use parallel jobs to build faster. For more options you can type <code>cmake --help</code> or <code>make --help</code> or <code>ninja --help</code>.</p> +<blockquote> +<div class="highlight"><pre><span></span><span class="c1"># Common build command for all generators,</span> +<span class="c1"># Default number of parallel builds depends on generator used</span> +cmake --build . --parallel &lt;no-of-processes&gt; + +<span class="c1"># For Unix Makefiles, no parallel build by default</span> +make -j &lt;no-of-processes&gt; + +<span class="c1"># For Ninja, 8+ parallel build by default (depends on system)</span> +ninja -j &lt;no-of-processes&gt; +</pre></div> +</blockquote> +</li> +<li><p class="first">Installing is also as easy as building. You can choose to install only certain components even if you have built the whole project. If you directly invoke the install command without building the project, it will automatically build the project first.</p> +<blockquote> +<div class="highlight"><pre><span></span><span class="c1"># For Unix Makefiles</span> +make install + +<span class="c1"># For Ninja</span> +ninja install +</pre></div> +</blockquote> +</li> +<li><p class="first">While testing has some issues, most of the testing is working fine. For now, you must build and run any test from the FOSSology root directory only. You can choose to configure a single agent if you want to test one agent only. See <code>ctest --help</code> for controlling test runs.</p> +<blockquote> +<div class="highlight"><pre><span></span><span class="c1"># Common testing command</span> +ctest --parallel &lt;no-of-processes&gt; + +<span class="c1"># For Unix Makefiles</span> +make <span class="nb">test</span> + +<span class="c1"># For Ninja</span> +ninja <span class="nb">test</span> +</pre></div> +</blockquote> +</li> +<li><p class="first">You can package FOSSology, the packaging currently lacks copyright and conf files. But for testing purposes, you can use the following commands. Similar to installing, if you run the package command without building the project, it will automatically build the project first. See <code>cpack --help</code> for more packaging options.</p> +<blockquote> +<div class="highlight"><pre><span></span><span class="c1"># Common testing command</span> +cpack + +<span class="c1"># For Unix Makefiles</span> +make package + +<span class="c1"># For Ninja</span> +ninja package +</pre></div> +</blockquote> +</li> +</ol> +</div> +<div class="section" id="known-issues-and-drawbacks"> +<h2>Known Issues and Drawbacks</h2> +<p>Although the transition from Makefiles to CMake and Travis CI to GitHub Actions is almost complete and working as expected. But it is not free of drawbacks and issues. This section outlines the known issues at the time of writing.</p> +<img alt="A Bug Meme" class="float-md-right rounded border border-info ml-3" src="https://imgs.xkcd.com/comics/conference_question.png" style="width: 350px;" /> +<ul class="simple"> +<li>Coverage builds may fail with linking errors.</li> +<li>Packaging prefix is the same as the install prefix. This requires the developer to set the install prefix manually before packaging to produce packages with the correct directory structure.</li> +<li>Testing and packaging must be used from the FOSSology root directory. Not doing so may or may not configure the project as intended.</li> +<li>Previously tests were written hardcoded for the Makefiles. But new build system requires all artifacts to be generated in a separate directory. This required me to add symbolic links wherever a generated script or file is expected. Tests can still leave some artifacts inside source folders.</li> +<li>There is no easy way to install a particular agent from the FOSSology root directory.</li> +<li>Packages don't contain copyright, readme, and license files. CMake doesn't provide a way to include these files. This is being tracked by issue <a class="reference external" href="https://gitlab.kitware.com/cmake/cmake/-/issues/21832">#21832</a>.</li> +<li>While packaging the symbolic links may or may not be dereferenced and hence results in copying the folder too in the target directory.</li> +<li>Running tests locally may require switching to <code>fossy</code> user.</li> +<li>While configured for testing, it may give permission errors.</li> +<li>Scheduler, Ununpack, and Delagent unit and functional tests are not working. I have added an issue <a class="reference external" href="https://github.com/fossology/fossology/issues/2084">#2084</a> to track the progress on fixing these tests.</li> +<li>CMake doesn't generate uninstall targets. The closest thing to uninstall is <a class="reference external" href="https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake">this snippet</a>. This will be later added to the FOSSology.</li> +</ul> +</div> +<div class="section" id="challenges-faced"> +<h2>Challenges Faced</h2> +<p>While this whole project was challenging, some aspects of it were unforeseen and more challenging. When I decided to go on with this project I just had enough CMake knowledge to write a configuration for a very small project. I had never used CMake on this big scale. On the other side, the FOSSology community is largely unknown to CMake so for all of us it was learned, practiced, and implement. With support from mentors, I was able to overcome this challenge with flying colors.</p> +<p>The other challenge was to understand the old build system, how they are all connected and what is the flow. The complexity can be imagined by the fact that the most of code and configurations were written in the decade before the last decade and haven't changed much since then.</p> +<p>The most challenging task was to make tests work with the new build system. Since tests were mostly hardcoded and the new build system refactored many of the files and directory, the tests were failing initially. The testing part took me the most time. All thanks to my mentor Gaurav and my friend Sarita I was able to hack them to suit the new build system.</p> +</div> +<div class="section" id="related-resources-and-links"> +<h2>Related Resources and Links</h2> +<ul class="simple"> +<li>Fix FOSSology agent tests issue <a class="reference external" href="https://github.com/fossology/fossology/issues/2084">#2084</a></li> +<li>feat(CI): Migrate API docs generation and deployment to GitHub Actions pull request <a class="reference external" href="https://github.com/fossology/fossology/pull/1917">#1917</a></li> +<li>feat(CI): Migrate Static Checks and Analysis to GitHub Actions from Travis CI <a class="reference external" href="https://github.com/fossology/fossology/pull/1919">#1919</a></li> +</ul> +</div> +<div class="section" id="future-development-plans"> +<h2>Future Development Plans</h2> +<p>There is a lot to do with the new build system and CI and it will probably take a year or to reach a maturity point. I was able to meet most of the goals but some of them are remaining.</p> +<ul class="simple"> +<li>Fix the tests, probably renovate them from the ground up.</li> +<li>Find a hack for packaging problems.</li> +<li>Improve and optimize the build.</li> +<li>Modernise the source code, remove old, bloated code and replace them according to new standards.</li> +</ul> +</div> +<div class="section" id="what-did-i-learn-from-this-project"> +<h2>What did I learn from this project?</h2> +<p>This Google Summer of Code was the busiest time of my life for all good reasons. I learned a lot about license compliance and how it all works in the software industry. The next big thing is CMake. As I mentioned I was just a novice user of CMake. Now I am confident that given any other large project I will be able to migrate it/improve it. I got to learn PHP, of which I did not know a single word before GSoC. And finally, I learned about packing and testing. I had these courses but implementing them myself and fixing them was a wholesome experience.</p> +<p>Other than that I improved on my communication and presentation skills. Collaborating with fellow participants was one of the great things that happened during GSoC.</p> +</div> +<div class="section" id="acknowledgments"> +<h2>Acknowledgments</h2> +<p>Google Summer of Code is the best thing that has happened to me this year so far. Although there are numerous people to say thanks to, I want to mention key people who were my motivation and support during this period.</p> +<p>First of all, I want to thank and appreciate my mentors <a class="reference external" href="https://github.com/GMishx">Gaurav Mishra</a>, <a class="reference external" href="https://github.com/mcjaeger">Michael C. Jaeger</a>, <a class="reference external" href="https://github.com/ag4ums">Anupam Ghosh</a>, and <a class="reference external" href="https://github.com/shaheemazmalmmd">Shaheem Azmal M MD</a>. Without the help and support from them, all this would not have been possible. They are very polite, knowledgeable, and helpful.</p> +<p>I want to thank my friend and <abbr title="Integrating ScanCode Toolkit to FOSSology">fellow participant</abbr> <a class="reference external" href="https://github.com/itssingh">Sarita</a>. Thank you for being a collaborator, support, and motivation for attempting GSoC.</p> +<p>Finally, I want to thank, my family and friends. I got to meet many awesome developers as my fellow participants from around the world, I wish we will do more collaboration in the future.</p> +</div> + \ No newline at end of file diff --git a/images/butterfly.gif b/images/butterfly.gif new file mode 100644 index 0000000..d517a17 Binary files /dev/null and b/images/butterfly.gif differ diff --git a/images/ci.png b/images/ci.png new file mode 100644 index 0000000..90a381a Binary files /dev/null and b/images/ci.png differ diff --git a/images/command-line.png b/images/command-line.png new file mode 100644 index 0000000..0148258 Binary files /dev/null and b/images/command-line.png differ diff --git a/images/docker-architecture.png b/images/docker-architecture.png new file mode 100644 index 0000000..4bbbcd5 Binary files /dev/null and b/images/docker-architecture.png differ diff --git a/images/dog.gif b/images/dog.gif new file mode 100644 index 0000000..d93a543 Binary files /dev/null and b/images/dog.gif differ diff --git a/images/goladder.png b/images/goladder.png new file mode 100644 index 0000000..686a1bb Binary files /dev/null and b/images/goladder.png differ diff --git a/images/golang.png b/images/golang.png new file mode 100644 index 0000000..b782e87 Binary files /dev/null and b/images/golang.png differ diff --git a/images/kubernetes-meme.png b/images/kubernetes-meme.png new file mode 100644 index 0000000..6c848fa Binary files /dev/null and b/images/kubernetes-meme.png differ diff --git a/images/mks-architecture.png b/images/mks-architecture.png new file mode 100644 index 0000000..0d3bab6 Binary files /dev/null and b/images/mks-architecture.png differ diff --git a/images/mks_logo.png b/images/mks_logo.png new file mode 100644 index 0000000..e5c1e45 Binary files /dev/null and b/images/mks_logo.png differ diff --git a/images/powershell.png b/images/powershell.png new file mode 100644 index 0000000..5f7ffbb Binary files /dev/null and b/images/powershell.png differ diff --git a/images/profile.png b/images/profile.png new file mode 100644 index 0000000..2ba1b89 Binary files /dev/null and b/images/profile.png differ diff --git a/images/redhat_logo.png b/images/redhat_logo.png new file mode 100644 index 0000000..f9ab454 Binary files /dev/null and b/images/redhat_logo.png differ diff --git a/images/second-build.webm b/images/second-build.webm new file mode 100644 index 0000000..68aabf0 Binary files /dev/null and b/images/second-build.webm differ diff --git a/images/venus-flytrap.gif b/images/venus-flytrap.gif new file mode 100644 index 0000000..61690fa Binary files /dev/null and b/images/venus-flytrap.gif differ diff --git a/images/windows10.png b/images/windows10.png new file mode 100644 index 0000000..3322ace Binary files /dev/null and b/images/windows10.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..5680876 --- /dev/null +++ b/index.html @@ -0,0 +1,214 @@ + + + + + + + + + Be My SpaceTime | 눈치 + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Articles +

+
+
+
+ +
+
+

+ Developing Minimal Tekton Server mks_logo +

+
+ We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster. +
+
+
+
+
+
+ +
+
+

+ My internship at Red Hat redhat_logo +

+
+ I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project. +
+
+
+
+
+
+
    +
  • + + Thu 19 August 2021 +
  • +
  • + + report +
  • +
+
+
+

+ Google Summer of Code 2021 +

+
+ This is the final report of my Google Summer of Code 2021 at The FOSSology Project. +
+
+
+
+ +
+
+
+ +
+
+

+ How I implemented WakaTime embeddable Coding Graph GHA? +

+
+ f you use WakaTime to track your coding activity. You can add that to your README as a bar graph or embed it in your blog/portfolio. Just add this action to any of your repositories and there you have it. +
+
+
+
+ +
+
+ + + + + + \ No newline at end of file diff --git a/index2.html b/index2.html new file mode 100644 index 0000000..43fa5db --- /dev/null +++ b/index2.html @@ -0,0 +1,220 @@ + + + + + + + + + Be My SpaceTime | 눈치 + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Articles +

+
+
+
+ +
+
+

+ How I Created This Blog? +

+
+ As you would have guessed by now, this blog is created using one such awesome SSG named Pelican. Pelican is simple, customizable and offers lots of themes and plugins. Pelican is python based SSG and is available through pip. +
+
+
+
+
+
+
    +
  • + + Sat 09 January 2021 +
  • +
  • + + prime +
  • +
+
+
+

+ Introduction to Prime Numbers +

+
+ A prime is a positive integer p having exactly two positive divisors, namely 1 and p. An integer n is composite if n > 1 and n is not prime. (The number 1 is considered neither prime nor composite.) +
+
+
+
+
+
+
    +
  • + + Mon 04 January 2021 +
  • +
  • + + blog +
  • +
+
+
+

+ HRT Systems Internship Interview Experience +

+
+ I applied for Systems Internship - Summer 2021 back in December 2020 at Hudson River Trading , New York.....Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt. +
+
+
+
+
+
+ +
+
+

+ Move WSL 2 Safely to another Drive +

+
+ It is real pain when you have small SSD and Windows Subsystem for Linux (WSL) is growing exponentially in size. There is no easy way to move the WSL installation to another drive. Here in this blog I will discuss how to tackle this problem with bite size steps. +
+
+
+
+
+
+ +
+
+

+ Create the VLC User Documentation for one Mobile Port(Android) +

+
+ The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLC’s wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization. +
+
+
+
+ +
+
+ + + + + + \ No newline at end of file diff --git a/index3.html b/index3.html new file mode 100644 index 0000000..065aae8 --- /dev/null +++ b/index3.html @@ -0,0 +1,168 @@ + + + + + + + + + Be My SpaceTime | 눈치 + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Articles +

+
+
+
+
    +
  • + + Mon 28 September 2020 +
  • +
  • + + blog +
  • +
+
+
+

+ The Interstellar Twilight +

+
+ If in the Twilight of dreams we should meet once more, we shell talk again together and I shall sing to you a lullaby till you sleep again to meet me in the Twilight of another dream. +
+
+
+
+
+
+
    +
  • + + Sat 21 September 2019 +
  • +
  • + + article +
  • +
+
+
+

+ प्रेम रतन धन पायो +

+
+ टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं । दादा-दादी कहा करते थे ये जिंदा पहाड़ हैं । सारी बातें सुनते हैं लोगों की । उनके दुख दर्द दूर करते हैं, ये देवता हैं । +
+
+
+
+
+
+
    +
  • + + Mon 27 February 2012 +
  • +
  • + + article +
  • +
+
+
+

+ The Big Red Ants +

+
+ In a bird’s eye view if we see around us, ants are the common and tiniest living entitiy seen by naked eye. One of them are the big red ants, in my view they are unique from others in two ways, first they live on trees and second their anteenas are too long and bent in middle, seems like their fore legs. Their mandible (mouth) seems like eagle’s beak. +
+
+
+
+ +
+
+ + + + + + \ No newline at end of file diff --git a/mstile-144x144.png b/mstile-144x144.png new file mode 100644 index 0000000..e9896c9 Binary files /dev/null and b/mstile-144x144.png differ diff --git a/mstile-150x150.png b/mstile-150x150.png new file mode 100644 index 0000000..50ec8c3 Binary files /dev/null and b/mstile-150x150.png differ diff --git a/mstile-310x310.png b/mstile-310x310.png new file mode 100644 index 0000000..fae508f Binary files /dev/null and b/mstile-310x310.png differ diff --git a/mstile-70x70.png b/mstile-70x70.png new file mode 100644 index 0000000..c5758f4 Binary files /dev/null and b/mstile-70x70.png differ diff --git a/pages/about-me.html b/pages/about-me.html new file mode 100644 index 0000000..9239173 --- /dev/null +++ b/pages/about-me.html @@ -0,0 +1,94 @@ + + + + + + + + + About Me | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

About Me +

+
+
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/posts/article/for-sunshine.html b/posts/article/for-sunshine.html new file mode 100644 index 0000000..8682ca5 --- /dev/null +++ b/posts/article/for-sunshine.html @@ -0,0 +1,221 @@ + + + + + + + + + प्रेम रतन धन पायो | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

प्रेम रतन धन पायो +

+
+
+
+ +
+
+

This article was published in 18th edition of SRIJAN, the official magazine of National Institute of Technology, Hamirpur, India. The magazine can be accessed here.

टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं । +दादा-दादी कहा करते थे ये जिंदा पहाड़ हैं । सारी बातें सुनते हैं लोगों की । उनके दुख दर्द दूर करते हैं, ये देवता हैं । आजकल जब रोज़ क्लास +आते जाते दूर पहाड़ों की चोटियाँ देखता हूँ तो उनकी विशालता का अनुभव होता हैं । एक पल को अगर ये मान लिया जाए की हमारी सारी धार्मिक किताबें +वो कहानियाँ हैं जो पथिक लेखकों के द्वारा लिखी गयी हैं तो सारी बातें साफ हो जाती है कि क्यूँ देवी-देवताओं ने हिमालय को अपनाया है। टूटता +तारा देखना अलौकिक है पर हिमालय की श्रेणियों से टूटता तारा देखना दैविक है । और वो कहते हैं न जिसमें न कोई तर्क हो न ही हाथों की सफाई वो +दैविक है। टूटते तारो के बारे में लोगों के बहुत सारे विश्वास हैं । कभी विभीषिका का पूर्वाभास माने जाने वाले इन टूटते तारे आज इच्छा पूरक के +प्रतीक हैं । कुछ लोगों का ये भी मानना है कि टूटते तारे दिवंगत लोगों का संकेत हैं । हिमालय की कन्दराओं में न जाने कितने ही ऋषि-मुनियों ने +तप करते हुए अपना जीवन अर्पित कर दिया । इसलिए हिमालय की पहाड़ों से टूटता तारा देखना दैविक हैं क्योंकि शायद वो तारे उन ऋषि-मुनियों की पवित्र +आत्माओं का संकेत हैं ।

+

प्रकृति की सुंदरता और कलाकारी हिमालय की कण-कण में झलकती है। प्रकृति ने प्रेम को भी हिमालय के जितना ही विशाल और अलौकिक बनाया है । ये एक +अलग चर्चा का विषय है कि हिमालय पहले आया या प्रेम। मैं तो प्रेम के पक्ष में हूँ । वो हर अणु-परमाणु जिन्होंने इतने बड़ा पहाड़ खड़ा किया वो सब +आपस में प्रेम से बंधे हुए हैं। ये पृथ्वी, सूर्य, चंद्रमा, आकाश-गंगा इत्यादि सब प्रेम से बंधे हुए हैं । और हिमाद्रि के छत पर मैं इसी प्रेम +के आगोश में आकर भावशून्य होकर तारों को निहार रहा था । तभी मानो सदियों की मन्नत पूरी हुई और मुझे एक टूटता तारा दिखा । आप मेरी स्थिति की +जटिलता का अनुभव इस प्रकार से लगा सकते हैं कि लोग टूटते तारे से मन्नत मांगते हैं और मैं टूटता तारा ही मन्नत में मांग रहा था । इससे पहले की +मैं पिछली जटिलता से बाहर आता की दूसरी जटिलता सामने आ पड़ी की तारा तो दिख गया पर मैं माँगूँ क्या ? और अगर आप सोच रहे की भाई पैसे मांग लो +शोहरत , नाम , शक्ति और पता नहीं क्या-क्या ? मांग तो लेता पर अगर आप मेरी जगह इसी स्थिति में होते तो शायद आपको भी ये सब याद न आता । तो मैं +एक पल को ये आकलन करने लगा की क्या कुछ ऐसा है जिसकी मुझे बहुत जरूरत है पर मेरे पास हो नहीं । और आपको पता है की गहरी सोच में जाने पर अक्सर +क्या होता है। अब वो लोग जो ये सोच रहे की भाईसाब आप हर कहानी(सच्ची घटना का विवरण वाली कहानी 😊) में सो क्यूँ जाते हैं। सच बताऊँ तो इसका +कोई सटीक जबाव नहीं है मेरे पास, पर अध्यात्म ये कहता है की जब आप सो रहे होते हैं तो आपका मन चेतना के कई स्थिति से गुजरता है। जब आप परम +चैतन्य अवस्था में होते हैं तो रहस्य, प्रतिभज्ञान इत्यादि के रास्ते खुल जाते हैं। और विज्ञान ये भी कहता है कि निद्रा के माध्यम से इस +अवस्था में जाना उतना ही अनिश्चित है जितना किसी बाला का मेरे लिए प्रेम-प्रस्ताव । सरल शब्दों में – मैं कुछ समय के लिए सो गया।

+

आज से ठीक 2 महीने पहले अगर ये मुझसे कोई पूछता की क्या चाहिए तुम्हें तो शायद मेरे पास जबाव होता। दोस्त तो बहुत हैं पर जब कोई ऐसा हो जो +आपके अधूरे वाक्य पूरे कर सके, कोई ऐसा जो आपकी भावनाओं को आपकी तरह समझ सके, कोई ऐसा जो आपको आपके असल रूप में पसंद करता हो । आपको लग रहा +होगा की मैं एक प्रेमिका का विवरण दे रहा हूँ, पर नहीं या शायद हाँ , मैं समझता हूँ की अधिकतर लोग प्रेमिका शब्द का प्रयोग अनुचित ढंग से करते +हैं। जहां प्रेम है वहाँ प्रेमी-प्रेमिका होंगे फिर वो भाई-बहन का रिश्ता हो या माँ-बेटे का । एक पल को सोचो तो ऊपर के विवरण के लिए कोई सबसे +सटीक उत्तर है तो वो है माँ। जब आप उन माँ-बाप जिन्होंने आपको जन्म दिया, आपका पालन-पोषण किया , आपको इस लायक बनाया कि आप इस वक़्त ये लेख पढ़ +पा रहे हैं , उनको अपनी प्रेमी-प्रेमिका नहीं कह सकते तो शायद किसी और लड़के-लड़की को कहने का आपको कोई हक़ नहीं है। पर ये बात निजी समझदारी की +है और मैं माँ-बाप के बारे में बिलकुल भी बात नहीं कर रहा, इन 2-4 पन्ने में उनको चित्रित कर पाना दुष्कर है। अगर माँ है तो ये अलग व्यक्ति +क्यूँ ? लोग कहते हैं क्योंकि भगवान हर जगह नहीं हो सकते इसलिए उन्होंने माँ बनाई। पर मैं कहता हूँ माँ भी हर जगह नहीं हो सकती इसलिए भगवान ने +दोस्त बनाए और विशेष लोग भी बनाए। आज तक बहुत सारे लोग आए-गए , कई बार लगा की शायद वो विशेष व्यक्ति मिलने ही वाला है पर वो भ्रम था शायद ये +भी हो। मैं ये नहीं कह सकता की मेरी खोज पूर्ण हो गयी पर हाँ एक पड़ाव तो जरूर आ गया है। उस पहली मुलाक़ात में एक पल को ऐसा लगा मानो किसी +चमत्कारी दर्जी ने कपड़े की जगह एक पूरा आदमी सिल कर दिया हो। सब कुछ एकदम नाप के अनुरूप। शायद कई सालों के बाद मैं खुशियों का बवंडर अपने अंदर +महसूस कर रहा था। आप पूछेंगे इसमें प्रेम कहाँ है? हिमालय जितना विशाल है उतना ही गहरा भी है , यहाँ भी प्रेम गहराई में है । प्रेम का होना +जरूरी है दिखावा तो हर कोई कर लेता है। कबीर ने अपने एक दोहे में कहा है :

+

बूंद समानी समूंद में , जानत है सब कोई; समूंद समाना बूंद में , बूझे बिरला कोई।

+

मैं इस दोहे को प्रेम के संदर्भ में व्याख्या करना चाहूँगा। लोग बूंद हैं और प्रेम समुद्र, लोगों को प्रेम में पड़ते सबने देखा है या सुना है, +पर जो प्रेम लोगों के अंदर व्याप्त है ये हर कोई नहीं समझता। मैं उस विशेष व्यक्ति का कृतज्ञ हूँ जिसने ने मुझे इस दोहे के मूल भाव का अहसास +करवाया।

+

कभी-कभी डर लगता है, खोने का उसे। आजकल दुनिया में सब अनिश्चित है। कब-क्या हो जाए ये कोई नहीं बता सकता। पहले सिर्फ पृथ्वी थी फिर लोग हुए और +तब से पृथ्वी अस्थमा की मरीज है। किसी प्रसिद्ध कवि ने लिखा है :

+

आज आदमी में विष इतना भर गया है, की विषधरों का वंश उनसे डर गया है, +कल को कहते सुनोगे , आदमी काटा और साँप मर गया है।

+

ठंडी-ठंडी हवाओं ने मेरी सारी नींद उड़ा दी। प्रकृति शायद मुझे खुश करके मारना चाहती थी। आसमान ने एक बड़े काले पर्दे का रूप ले लिया था और उस +पर्दे पर दसियो उजले साँप रेंगते नज़र आ रहे थे। मानो दस सालो के टूटते तारे एक साथ दिख रहे हों और आसमान कह रहा हो – जो चाहिए, जितना चाहिए +माँग लो। और मैंने सच में माँग लिए , लगभग सब कुछ । और उसको हमेशा पास रखने की दुआ तो नहीं माँग सका , पर वो जहां रहे, खुश रहे, सलामत रहे।

+ +
+

+ This Blog is licensed under Attribution-NonCommercial 4.0 International + +

+
+
+
+
+ +
+
+
+ + + + You may put your GitHub Username. +
+
+ + + I'll never share your email with anyone + else. +
+
+
+ + +
+ Please Enter something ! +
+ Enter upto 200 characters. +
+ +
+ +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/posts/article/red-big-ants.html b/posts/article/red-big-ants.html new file mode 100644 index 0000000..67ce480 --- /dev/null +++ b/posts/article/red-big-ants.html @@ -0,0 +1,181 @@ + + + + + + + + + The Big Red Ants | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

The Big Red Ants +

+
+
+
+ +
+
+

This article was published in 3rd edition of नवांकुर , the official magazine of Simultala Awasiya Vidyalaya, Bihar, India.

In a bird’s eye view if we see around us, ants are the common and tiniest living entitiy seen by naked eye. One of them are the big red ants, in my view they are unique from others in two ways, first they live on trees and second their anteenas are too long and bent in middle, seems like their fore legs. Their mandible (mouth) seems like eagle’s beak.

+

As I observed them making and reparing their nests, I concluded that they are very laborious and intellectual. They create their nests by binding two or more leaves (maybe up to 500) together. They stich the leaves using a stinky white substance either excreted by themselves or from trees. This substance is like web of spider. At first builder ants creates an array at the blade of two leaves. Then they make ant-cranes or ant-chain like chain of monomer to form a polymer. They catch the leaves and pull each other to stich. After some time, the parliament of leaves transforms into a leaf-sac called their nest. They also weave translucent cloth like structure to cover remainings of leaf. A nest hangs by a branch of the trees.

+

A nest is skillfully divided into living rooms, barracks, storehouse, egg room and queen’s room. The eggroom, lies at the center of nest to protect from outer attack until last time. Besides that, lies queen’s room. Living rooms are sequenncly joined with eggroom. There are different rooms for workers, food searchers etc. The partition of the room resembles atom’s electron shell, one upon another. At last barracks are the outermost rooms, just like outermost orbit of electron. The defence system is strongest at the nest’s opening. A nest may size as 2-3 footballs and have 50 to 10000 ants. There may be more openings.

+

Now about their attacking and protecting skills. A solider is unique from other ants. It is equipped with many attacking and defending skills. Normally they do not attack. They are social insects. If someone attacks, all other ants go inside, and soldiers come out. They spread allover the nest. They are very sensetive and have sharp vision. If any one of them see their enemy the stand on their hind legs, swinging, their forelegs and anteens in their air as scolding someone. Their spit contains formic acid, present at the end of the abdomen below the rectum. If their nest is broken and eggs fall on ground then the ants make a dome, like the dome of Taj mahal to save the eggs till last their breadth. This shows their caring skills.

+

The most amazing is their discipline. They can easily beat a human in race of discipline. Humans must learn from it. When two ants meet, they touch their anteena to communicate. When they walk in a queue, they seem like twinkling dots and dashes. I want to conclude that All tiny things are not really tiny. It may be as a space having infinite mysteries one has to explore it.

+ +
+

+ This Blog is licensed under Attribution-NonCommercial 4.0 International + +

+
+
+
+
+ +
+
+
+ + + + You may put your GitHub Username. +
+
+ + + I'll never share your email with anyone + else. +
+
+
+ + +
+ Please Enter something ! +
+ Enter upto 200 characters. +
+ +
+ +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/posts/blog/hrt-interview-1.html b/posts/blog/hrt-interview-1.html new file mode 100644 index 0000000..11d51c3 --- /dev/null +++ b/posts/blog/hrt-interview-1.html @@ -0,0 +1,222 @@ + + + + + + + + + HRT Systems Internship Interview Experience | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

HRT Systems Internship Interview Experience +

+
+
+
+ +
+
+

I applied for Systems Internship - Summer 2021 back in December 2020 at Hudson River Trading , New York. The internship description was: -

+
+

We are looking for highly motivated students who are eager to learn and excited about systems to join us for our summer internship +program. As a systems intern, you may have the opportunity to work on projects in the following areas:

+
    +
  • Programming/scripting (Golang, Python, C++, C)
  • +
  • FOSS development
  • +
  • HPC, Cluster computing
  • +
  • System Administration
  • +
  • Linux, Debian
  • +
  • Linux-based computer security
  • +
  • Data Storage
  • +
  • Large deployment or config management
  • +
+
+

The first step was a coding test on the Codility platform. If you have used any of the online coding platforms, this is similar. It was a 2.5 hrs test consisting of 3 questions. They let you use online references but +do not copy the code as it will highly reduce your chances of qualifying for this first stage. You can choose between C/C++, +Python and Golang (no Java 😪).

+

Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt. +Also, they expected a clear and concise approach. Two of the most important points in their instructions were: -

+
+
    +
  • While correctness and performance are the most important factors for evaluation, we will take test duration into account as well.
  • +
  • Please understand that this test is meant to be challenging. A perfect score is not necessary to move on to future interview rounds, so do the best you can!
  • +
+
+

So, you must be near perfect in your approach as well as on time. I did them kind of quickly. They will show you a summary of your +submission but not the results. It will take almost 2 weeks to get back to you for further steps.

+

Next, I received a mail invitation for a telephonic interview. This interview will last about 45 minutes and will be technical but will not require coding. Interview topics may include your background, programming languages, and Unix/Linux concepts. Once you receive this +mail you can then decide a time slot for an interview.

+

I was not sure what they will ask if this is not a coding interview. The interviewer was very polite, and he was explaining the questions +too. Questions were not so tricky but practical and real-life. Since it was not for SDE role, the questions were mostly related to +Linux/Unix, C++ (mainly pointers and memory), Python/Bash scripting, automation, knowledge of tools (IDEs, Editors, System Administration +Tools) and previous experiences. The interview would often explain why he is asking this question, this was very nice. Then some common +interview questions, why do you want to work for this role? What makes you fit for this role? etc.

+

One thing that I want to point out is that the interviewer was repeatedly checking my resume, and for the most part he did not ask +anything that was not on my resume. So, my tip is to create a nice resume with genuine work/tool experiences. And when you are applying +for such a role, it would be helpful if you mention mathematics or other courses that you have taken. Do not lie on your resume. They +will easily catch that.

+

The other thing is to keep your words short and clear; I was not great at communication, but you can be. If the interviewer allows then +use examples for the things you cannot explain. I used nice examples. At last, he gave me short feedback on how well I performed.

+

At last, I want to point out things I should not have done. The first is, I did not ask much about the role, you must do this at least +once. Second, I am talkative, I do not know if the interviewer was not faking his expressions (because he would often discuss in-depth), +but not all interviewers will be the same. So, do not talk too much, nor too less. At last work on your communication skill, mostly how +you to present things and how to answer technical as well as behavioral questions. I was not fluent, but my way of presentation might +have saved me.

+ +
+

+ This Blog is licensed under Attribution-NonCommercial 4.0 International + +

+
+
+
+
+ +
+
+
+ + + + You may put your GitHub Username. +
+
+ + + I'll never share your email with anyone + else. +
+
+
+ + +
+ Please Enter something ! +
+ Enter upto 200 characters. +
+ +
+ +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/posts/blog/this-is-for-you.html b/posts/blog/this-is-for-you.html new file mode 100644 index 0000000..21da449 --- /dev/null +++ b/posts/blog/this-is-for-you.html @@ -0,0 +1,202 @@ + + + + + + + + + The Interstellar Twilight | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

The Interstellar Twilight +

+
+
+
+ +
+
+

Yeah, it was a dream someday. I never imagined you. But I do remember glimpses of a wonderful person +in my deep slumber. When I go back to last year about the same time, I find myself a manic who gets +carried away with every emotion. Becoming too happy about something and then becoming too sad was so +common that I never noticed what I was risking.

+

"If in the Twilight of dreams we should meet once more, we shell talk again together and I shall sing to you a lullaby till you sleep again to meet me in the Twilight of another dream."

+

But 1 year ago many things changed. A never seen dream came true. To be honest I was skeptical if all +this happening to me was true. Even until last December. Gradually things started falling into places. +And for the most part, the reality became more real. I can now easily see what is happening and why it +happened. Everything was so nice until we had a fight. Then another, and now it was every other day +story. It was a really hard time collecting everything together and act as nothing happened after every +single of those. Everything was plunging. I started imagining the end of something that I did not +imagine to happen in the first place.

+

But during all those times, there was a continual intuition that maybe there is something that we both +are missing. And that was maybe the root of all chaos. I never came to know that what it was neither did +you. But I do realize many mistakes I have been doing since we met.

+

I want to thank you for not losing hope in me. We both always tried to reduce tension as much as we could. +And thank you for many other ineffable things happened because of you.

+

As of now I can see things making sense. Every message, every talk now seems to make sense. I am more +deeply into this friendship if I was not ever before. The ecstasy of having you is other-worldly. I don't +know if I could ever adore a person this much but I adore this ravishing friendship. Only you or only +this friendship may mean nothing to me. But I am delighted to say that I have both and I have you.

+

Now, what is all with The Interstellar Twilight. Why this name ? Let me explain it for you. Interstellar +means between stars and Twilight means the soft glow when the sun is below the horizon. +The Interstellar Twilight means the glow between the stars or simply glow of a cluster of stars. A +single star shines but the glow is too low to be noticed against its brightness. But a lot stars together +gets a glow. So my friend we are such two stars and our friendship is that glow.

+ +
+

+ This Blog is licensed under Attribution-NonCommercial 4.0 International + +

+
+
+
+
+ +
+
+
+ + + + You may put your GitHub Username. +
+
+ + + I'll never share your email with anyone + else. +
+
+
+ + +
+ Please Enter something ! +
+ Enter upto 200 characters. +
+ +
+ +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/posts/development/i-am-loving-it-redhat.html b/posts/development/i-am-loving-it-redhat.html new file mode 100644 index 0000000..5be2ff5 --- /dev/null +++ b/posts/development/i-am-loving-it-redhat.html @@ -0,0 +1,226 @@ + + + + + + + + + My internship at Red Hat | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

My internship at Red Hat redhat_logo +

+
+
+
+ +
+
+

I have been contributing to open source for the last 3 years and Red Hat was one of the companies that I was very fond of. I must say all my contributions and consistency paid off, and I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project.

+

On the first day of my internship, I met two amazing teammates Saytam and Utkarsh. We were also introduced to a Senior Software Engineer Piyush Garg who later mentored us. The initial few meetings were more on the introduction and what to learn topics. Before I jump into more details let me explain first what does a DevTools Developer/Engineer do?

+
+

What does a DevTools Developer/Engineer do?

+

From MDN Web Docs Developer tools (or "development tools" or short "DevTools") are programs that allow a developer to create, test, and debug software. At RedHat, a lot of open source developer tools of industry standards are developed. There are many, OpenShift, Tekton, CodeReady containers, and many more.

+
+ +
+

Not so Minimal Tekton Server

+

In late January, we were asked to implement our learnings and deep dive into Kubernetes and TektonCD through an assignment project. Soon we realized that whatever we were learning so far was not even close to what we were going to implement. We were given a document containing the requirements of the applications we were supposed to create along with all the documentation and architectural diagrams.

+

The application was called Minimal Tekton Server. It is a set of three different applications, i.e a server, a CLI, and a dashboard. In short, this application is supposed to listen to custom resources being created and then transfer the request to Tekton API to create the corresponding resource on the OpenShift/Kubernetes cluster.

+

So are you interested in how it went? Please follow up with my next blog.

+
+ +
+

+ This Blog is licensed under Attribution-NonCommercial 4.0 International + +

+
+
+
+
+ +
+
+
+ + + + You may put your GitHub Username. +
+
+ + + I'll never share your email with anyone + else. +
+
+
+ + +
+ Please Enter something ! +
+ Enter upto 200 characters. +
+ +
+ +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/posts/development/lovely-dangerous-things-redhat.html b/posts/development/lovely-dangerous-things-redhat.html new file mode 100644 index 0000000..aa1a7e2 --- /dev/null +++ b/posts/development/lovely-dangerous-things-redhat.html @@ -0,0 +1,282 @@ + + + + + + + + + Developing Minimal Tekton Server | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Developing Minimal Tekton Server mks_logo +

+
+
+
+ +
+
+

This blog is a descreptive account of the development of Minimal Tekton Server. This is highly technical in nature, so please make sure that you have sufficient knowledge about Golang, Docker, Kubernetes and TektonCD. You can refer to my previous blog to know about these topics.

As mentioned in my last blog, we were given to implement an application named Minimal Tekton Server. The problem statement reads:

+
+We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster. The application will expose some fields of the Tekton Resources which the user will provide and then this application will create Tekton resources by talking to Tekton APIs available on the cluster to create the resources based on the user-provided fields.
+

There are three parts in this project for the application and two more parts for the CI/CD using TektonCD and Kubernetes/OpenShift. I will go through each part descriptively and try to explain what we did.

+
+

The Architecture of MKS

+

The first task in the development of the Minimal Tekton Server was creating its architectural diagram. Our first diagram was trash compared to the final diagram. Yeah, we learned. I will be explaining our final(obviously) architectural diagram and try to make some sense out of band-aids and duct tapes.

+The MKS Arhitecture +

Let me start with explaining What are MKS Resources?. I hope you know at least tidbits about Kubernetes and by the definition: A resource is an endpoint in the Kubernetes API that stores a collection of API objects of a certain kind; for example, the built-in :code:`pods` resource contains a collection of Pod objects. But developers soon realized that these in-built resources were not enough for the ever-growing applications of Kubernetes. Here custom resource comes into the picture. A custom resource is an extension of the Kubernetes API that is not necessarily available in a default Kubernetes installation. To define a custom resource we use something called Custom Resource Definition. So MKS Resources are such custom resources that correspond to the TektonCD custom resources.

+A venus flytrap engulphing an insect. +

Let us now focus on the box containing Controller and API server. The controller can be said as a stimulus-response mechanism. Take the analogy of a Venus Flytrap plant. The trap is initially open. There are trigger hairs on the inside of the trap. Once an insect is detected, there is a change of state and the trap closes in a blick on the eye. The controller works the same way. It listens for the change in the state of the MKS resources and immediately transfers the request to the Tekton API to reflect the change in the corresponding Tekton resources. The changes can be creation, deletion, or updating. The API server ensures that there is a working connection between our controller and the Tekton API.

+

MKS Server also exposes APIs to introduce a change of state in the MKS resources. In technical terms these are called verbs. There are five such verbs that we have exposed: create, update, get, delete, and list. They can be utilized by a REST client, or in our case MKS CLI to introduce desired change. The MKS command-line interface provides commands and subcommands to do the desired tasks.

+

Whenever there is a change in the state, there is a logic running inside the controller to react on that and that also affects our database. We store four datapoints in our database: created, deleted, completed, and failed. They tell us about the current statistcs of our MKS resource using a single-page web app called MKS Dashboard (or UI).

+

This was about the architecture of the Minimal Tekton Server. Let us jump into more technical stuff.

+
+
+

How to implement a CRD controller?

+

During this assignment, something that took the most time and effort was the implementation of a controller for our custom resources. This isn't very hard if you go by the rules and do the things according to the well-defined documents and blogs since this is a standard step in the implementation of any custom resource controller. But did we follow the rules? Hell no! But this time, let us go step-by-step.

+
    +
  1. The first step is to define a CustomResourceDefinition for our custom resource. Let us define a CRD called spacetime. To do this you can write a YAML file like below.
  2. +
+
# file: spacetime-crd.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+# name must match the spec fields below, and be in the form: <plural>.<group>
+name: spacetimes.example.com
+spec:
+# group name to use for REST API: /apis/<group>/<version>
+group: example.com
+# list of versions supported by this CustomResourceDefinition
+versions:
+  - name: v1alpha1
+  # Each version can be enabled/disabled by Served flag.
+  served: true
+  # One and only one version must be marked as the storage version.
+  storage: true
+  schema:
+    openAPIV3Schema:
+    type: object
+    properties:
+      spec:
+      type: object
+      properties:
+        message:
+        type: string
+# either Namespaced or Cluster
+scope: Namespaced
+names:
+  # plural name to be used in the URL: /apis/<group>/<version>/<plural>
+  plural: spacetimes
+  # singular name to be used as an alias on the CLI and for display
+  singular: spacetime
+  # kind is normally the CamelCased singular type. Your resource manifests use this.
+  kind: SpaceTime
+  # shortNames allow shorter string to match your resource on the CLI
+  shortNames:
+  - st
+
+

You can learn more about the fields and options here. The CRD that we defined above corresponds to the CustomResource given below. Once you apply the above file you will be able to see the spacetime custom resource on your Kubernetes/OpenShift cluster.

+
# file: spacetime-cr.yaml
+apiVersion: spacetimes.example.com/v1alpha1
+kind: SpaceTime
+metadata:
+  name: spacetime-cr
+spec:
+  message: "Hello from space!"
+
+

Apply them using the following commands:

+
kubectl apply -f spacetime-crd.yaml
+kubectl apply -f spacetime-cr.yaml
+
+
    +
  1. Once we have defined our custom resources, we need to define the types that will correspond to this custom resource definition. This can be done using k8s.io/apimachinery/pkg/apis/meta/v1 package written in golang. Did I tell you that this is all in golang? Well, now you know. Create a package structure for a golang project and add the definition of the type as given below.
  2. +
+
mkdir -p pkg/api/spacetime/v1alpha1
+touch pkg/api/spacetime/v1alpha1/{spacetime_types,register,doc}.go pkg/api/spacetime/register.go
+
+

Add the following content to the corresponding files.

+
// file: /pkg/api/spacetime/v1alpha1/spacetime_types.go
+package v1alpha1
+
+import (
+  metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+type SpaceTime struct {
+  metav1.TypeMeta   `json:",inline"`
+  metav1.ObjectMeta `json:"metadata,omitempty"`
+
+  Spec SpaceTimeSpec `json:"spec"`
+}
+
+type SpaceTimeSpec struct {
+  Message string  `json:"message"`
+}
+
+type SpaceTimeList struct {
+  metav1.TypeMeta     `json:",inline"`
+  metav1.ListMeta     `json:"metadata"`
+
+  Items []SpaceTime   `json:"items"`
+}
+
+

To be Continued

+
+ +
+

+ This Blog is licensed under Attribution-NonCommercial 4.0 International + +

+
+
+
+
+ +
+
+
+ + + + You may put your GitHub Username. +
+
+ + + I'll never share your email with anyone + else. +
+
+
+ + +
+ Please Enter something ! +
+ Enter upto 200 characters. +
+ +
+ +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/posts/development/rst-guide.html b/posts/development/rst-guide.html new file mode 100644 index 0000000..7cfa630 --- /dev/null +++ b/posts/development/rst-guide.html @@ -0,0 +1,284 @@ + + + + + + + + + reStructuredText in GitHub | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

reStructuredText in GitHub +

+
+
+
+ +
+
+
    +
  • Headers

    +
    Top Title
    +=========
    +
    +Sub Title
    +---------
    +
    +Sub Sub Title
    +^^^^^^^^^^^^^
    +
    +
  • +
  • Images

    +
      +
    • Direct

      +
      .. figure:: image-path-or-url
      +    :align: center
      +    :target: link-to-go-when-image-is-clicked
      +    :alt: alternative-text-if-any
      +
      +
    • +
    • Indirect

      +
      .. |substitution| image:: image-path-or-url
      +    :target: link-to-go-when-image-is-clicked
      +
      +

      You can use |substitution| where you want to put your image.

      +
    • +
    +
  • +
  • Links

    +
    `Link Text <link-itself>`__
    +
    +
  • +
  • Lists

    +
    - item 1
    +- item 2
    +
    +* item 1
    +* itme 2
    +
    +#. item 1
    +#. item 2
    +
    +1. item 1
    +2. item 2
    +
    +

    First two lists are unordered next two are ordered.

    +
  • +
  • Code

    +
      +
    • Inline

      +
      :code:`your-code`
      +
      +
    • +
    • Code block

      +
      .. code-block:: language(optional)
      +
      +    Your code
      +    in multiple lines. You may enable line numbers too.
      +
      +
    • +
    +
  • +
  • Tables

    +
    +----------------+----------------+
    +| Header Cell    | Header Cell    |
    ++================+================+
    +| Data cell      | Data Cell      |
    ++----------------+----------------+
    +| Header Cell    | Header Cell    |
    ++----------------+----------------+
    +
    +
  • +
  • Raw HTML block

    +
    .. raw:: html
    +
    +    <put>
    +        your html code here
    +    </put>
    +
    +
  • +
  • Notes, warnings

    +
    .. note::
    +
    +    Put your note here.
    +
    +.. warning::
    +
    +    Put your warning here.
    +
    +.. important::
    +
    +    Put instructions here.
    +
    +.. admonition:: custom-text
    +
    +    Custom description here.
    +
    +
  • +
+

These all are supported by GitHub very well. For more exhautive list specific to Sphinx see this link.

+
+

Tips

+
    +
  • There must be a blank line before and after any directive. Such as after title or code block, tables etc.
  • +
  • The options and content of a directives must be 1 tab indented to the directives.
  • +
+
+ +
+

+ This Blog is licensed under Attribution-NonCommercial 4.0 International + +

+
+
+
+
+ +
+
+
+ + + + You may put your GitHub Username. +
+
+ + + I'll never share your email with anyone + else. +
+
+
+ + +
+ Please Enter something ! +
+ Enter upto 200 characters. +
+ +
+ +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/posts/development/twilight-blog.html b/posts/development/twilight-blog.html new file mode 100644 index 0000000..0cff1a0 --- /dev/null +++ b/posts/development/twilight-blog.html @@ -0,0 +1,288 @@ + + + + + + + + + How I Created This Blog? | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

How I Created This Blog? +

+
+
+
+ +
+
+

+

There are lots of ways to create a personal website or a blog. You can design your own user interface and write the backend code. But not everyone is a web developer. And here comes SSGs to the rescue. Static Site Generators are little more than just website generators. In general, if you are looking for a simple blog, its better to use SSG than writing a lot of html and css. They are simple and elegant. Easy to maintain and you can add lots of customizations to your site without breaking or bloating your blog. There are lots of SSGs, Jekyll, Pelican and more complex ones like Gatsby, Hugo .

+

As you would have guessed by now, this blog is created using one such awesome SSG named Pelican. Pelican is simple, customizable and offers lots of themes and plugins. Pelican is python based SSG and is available through pip.

+
# for reStructuredText only (recommended)
+python -m pip install pelican
+
+# for markdown and reStructuredText both
+python -m pip install "pelican[markdown]"
+
+

You can start a pelican project by typing following command. It will create a basic template and build configurations.

+
pelican-quickstart
+
+# output
+yourproject/
+├── content              # Put your content here
+│   └── (pages)
+├── output               # Output files
+├── tasks.py
+├── Makefile             # Makefile to run build and publish command
+├── pelicanconf.py       # Main settings file
+└── publishconf.py       # Settings to use when ready to publish
+
+

Next step is to choose themes. As I said earlier there are lots of themes . And it is easy to create your own theme. Check here to create your own theme. My choice of theme was pelican-alchemy . This is a simple and great theme. Installing and removing themes in pelican is very easy.

+
# list all installed themes
+pelican-themes -l
+# output
+simple
+alchemy
+notmyidea
+
+# install new theme
+pelican-themes -i theme-path
+
+# remove a theme
+pelican-themes -r theme-name
+
+

To use a particular theme, set the THEME variable in the pelicanconf.py file.

+
THEME = 'alchemy'
+
+

You can also use a theme that is not installed if you have all the required theme files. Just set this variable to its path.

+
THEME = 'path-to-theme-directory'
+
+

Various themes will have different feature, choose according to your need, or you can always add a feature through plugin. The next step is to build and check your blog. Pelican got it all set up.

+
# build your website
+make html
+# output
+"pelican" "/mnt/z/my_git/avinal.github.io/content" -o "/mnt/z/my_git/avinal.github.io/output" -s "/mnt/z/my_git/avinal.github.io/pelicanconf.py"
+Done: Processed 6 articles, 0 drafts, 1 page, 0 hidden pages and 0 draft pages in 2.43 seconds.
+
+# build and test/serve on localhost
+make serve
+# output
+"pelican" -l "/mnt/z/my_git/avinal.github.io/content" -o "/mnt/z/my_git/avinal.github.io/output" -s "/mnt/z/my_git/avinal.github.io/pelicanconf.py"
+
+Serving site at: 127.0.0.1:8000 - Tap CTRL-C to stop
+
+

Now open your browser and open 127.0.0.1:8000 or localhost:8000. You should be able to see your new blog. Stop local server using CTRL+C. Next step is to publish it to github pages. Pelican has tools for this too. But wait we can do something more interesting here. Why not let GitHub take care of both building and publishing? Just push this project to a GitHub repository and set up GitHub pages. See this help for instructions on that. Before pushing to GitHub add this little script to your project.

+
#! /bin/bash
+## file: publi.sh
+
+# install tools
+sudo apt-get install -y git make python3 python3-pip python3-setuptools python3-wheel
+
+# setup github config
+git config user.email "your-email"
+git config user.name "your-username"
+
+# install dependencies
+sudo pip3 install -r requirements.txt
+
+# pelican commands - install theme put your theme in themes directory
+pelican-themes --install themes/theme-name
+
+# publish to github pages
+ghp-import -m "Generate Pelican site" -b gh-pages output
+    git push -f origin gh-pages
+
+

Now once your project is on GitHub, go to the Actions tab and click on set up a workflow yourself and paste the following code into the file and commit it.

+
# file: publish.yml
+name: Publish Blog
+on:
+  push:
+    branches: [ main ]
+  pull_request:
+    branches: [ main ]
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - name: set up permissions
+        run: chmod +x publi.sh
+      - name: Run a multi-line script
+        run: ./publi.sh
+
+

If you have done everything correctly then go to https://username.github.io and you should see your blog. From now on whenever you want to add an article, just write it, test locally and push. Yay your blog is ready.

+

But My Blog is Special 🥰

+

My blog looks different, that is because I customized this theme a lot, especially headers, footers, and link appearance. And sorry I won't be publish my theme any time sooner. But I am listing down all the resources I have used for finally getting this result. You can always get my help by sending me a or starting a discussion on .

+ +

+

Thanks!

+ +
+

+ This Blog is licensed under Attribution-NonCommercial 4.0 International + +

+
+
+
+
+ +
+
+
+ + + + You may put your GitHub Username. +
+
+ + + I'll never share your email with anyone + else. +
+
+
+ + +
+ Please Enter something ! +
+ Enter upto 200 characters. +
+ +
+ +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/posts/development/vlc-gsod-report.html b/posts/development/vlc-gsod-report.html new file mode 100644 index 0000000..a719b87 --- /dev/null +++ b/posts/development/vlc-gsod-report.html @@ -0,0 +1,377 @@ + + + + + + + + + Create the VLC User Documentation for one Mobile Port(Android) | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Create the VLC User Documentation for one Mobile Port(Android) +

+
+
+
+ +
+
+
+

OVERVIEW

+

VideoLAN is a non-profit organization that develops software for playing video and other media formats. VLC media player (commonly known as just VLC) is a free and Open Source cross-platform multimedia player and framework that plays most multimedia files as well as DVDs, Audio CDs, VCDs, and various streaming protocols built by the VideoLAN organization and a team of volunteers. VLC for Android is a port of the VLC for Android OS.

+

The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLC’s wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization and an engaging and easy to follow for both technical and non-technical users. The original proposal can be found here.

+
+
+

PROJECT GOALS

+
    +
  • Propose a new structure for documentation e.g. Chapter Separation, Sections etc
  • +
  • Proper balance between technical and non-technical descriptions to serve all kinds of users.
  • +
  • Adequate amount of screenshots in each section and other supporting media to make documentation more appealing.
  • +
  • Optimized for all Screen Sizes. Especially for Mobile Devices.
  • +
  • Ease of navigation
  • +
+
+
+

COMMUNITY BONDING

+

This period was mostly utilized for collecting more information and many internal meetings to shape the projects and bonding with fellow writers, developers(mentors). I got to know more about the VLC organization and the project. We decided to create a skeleton of the project and then follow a Issue-Merge Request-Review-Merge system to keep the commit history clean and maintain the proper review of the work before it is merged.

+

I initially proposed that the new documentation should also use the same tools(Sphinx and GitLab Pages) because if in future we want to merge all the documentation into a single one, it will be easier to migrate and will provide a consistency across all documentations. Later I got to know that this will be an independent project and may not be merged since it solves a lot of problems. I was already familiar with the tools so it took no time to get started.

+

Nicolas Pomepuy, who is the lead developer of VLC for Android was assigned as my primary mentor and Simon Latapie as secondary mentor.

+
+
+

DOCUMENTATION DEVELOPMENT PHASE

+

Initial Preparation +I first moved my existing demo documentation to an entirely new repository with only the skeleton at the suggestion of my mentor. It was necessary to keep the commit history clean. The skeleton contained the empty directories representing the chapter separation. I got to learn “how to properly develop a project and contribute to open source”. This was a major lesson that got me familiar with the Merge Request and Review system.

+

The Development +The next part was to frame the actual documentation pages and push to the repository. Since there was a significant time-zone difference we agreed to discuss by creating issues and sometimes my emails. There was one meeting every fortnight to check the process and discuss further development and blockers. Nicolas was really helpful and patient, answering each of my big-small queries.

+

Work Done

+ + + + + + + + + + + + + + + + + + + + + + +
DocumentationVLC for Android User Documentation +
Project Repository +Projects · Avinal Kumar / VLC for Android User Documentation +
Commits +Commits · Avinal Kumar / VLC for Android User Documentation +
Issues/Discussions +Issues · Avinal Kumar / VLC for Android User Documentation +
Merge Requests +Merge Requests · Avinal Kumar / VLC for Android User Documentation +

Since the Android port of VLC can be installed on Android Smartphones/Tablets, Android TVs, Amazon Fire Devices and Chromebooks too, a full documentation will cover these all devices. Although these are different form factors, the features provided on each of them is exactly the same and the same documentation can be used for all these devices. As of now only Smartphones/Tablets are covered. And later additional pages will be added to reference different features/User Interface. Regardless of this addition the current documentation can serve a major part for all these form factors. +Completed/Remaining

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Chapters +Sections +Status +
Settings + +
    +
  • General Settings +
  • Interface +
  • Video +
  • Subtitles +
  • Audio +
  • Casting +
  • Advanced +
  • +
+
ALL COMPLETED +

+FOR ALL FORM FACTORS +

Video + +
    +
  • Video Explorer +
  • Video Player +
  • +
+
COMPLETED FOR SMARTPHONES/TABLETS +
Audio + +
    +
  • Audio Explorer +
  • Audio Player +
  • +
+
COMPLETED FOR SMARTPHONES/TABLETS +
Browse + +
    +
  • Explorer +
  • Local Network +
  • +
+
ONLY SMB IN LOCAL NETWORK COMPLETED +
Installation + +
    +
  • Smartphones/Tablets +
  • Android TV +
  • Fire Devices +
  • Chromebooks +
  • +
+
COMPLETED FOR SMARTPHONES/TABLETS +
User Interface + +
    +
  • Smartphones/Tablets +
  • Android TV +
  • Fire Devices +
  • Chromebooks +
  • +
+
COMPLETED FOR SMARTPHONES/TABLETS +
Support + +
    +
  • FAQs +
  • Help +
  • +
+
IN PROGRESS +
Guidelines + +
    +
  • Contribution Guideline +
  • Screenshot Guidelines +
  • READMEs +
  • +
+
IN PROGRESS +
+
+

CHALLENGES

+

The major obstacle was to get screenshots for all form factors. Since screenshots were the major part of this documentation it was necessary to provide proper screenshots in each chapter and with every step. For Android TV and Smartphone this was solved by using emulators instead of actual devices, but to emulate the actual scenario in an emulator was sometimes very difficult. +There were many occasions where I was not able to gather the exact information about devices other than smartphones/tables. Since all form factors share a common pool of features, my mentor suggested that I focus on smartphones/tables. And to create issues mentioning missing parts so that it could be solved later.

+
+
+

THANKS

+

I want to thank my mentors for being supporting and helpful. I want to thank every person at VLC and Google who were involved in this whole process. Thanks and Congrats to my fellow writer Abhishek Pratap Singh. This was a great opportunity to learn and meet awesome people. I learned a lot about Sphinx, reStructured Text and many other things.

+
+ +
+

+ This Blog is licensed under Attribution-NonCommercial 4.0 International + +

+
+
+
+
+ +
+
+
+ + + + You may put your GitHub Username. +
+
+ + + I'll never share your email with anyone + else. +
+
+
+ + +
+ Please Enter something ! +
+ Enter upto 200 characters. +
+ +
+ +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/posts/development/wakatime-readme.html b/posts/development/wakatime-readme.html new file mode 100644 index 0000000..f1a8d81 --- /dev/null +++ b/posts/development/wakatime-readme.html @@ -0,0 +1,311 @@ + + + + + + + + + How I implemented WakaTime embeddable Coding Graph GHA? | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

How I implemented WakaTime embeddable Coding Graph GHA? +

+
+
+
+ +
+
+
+

Implementation Details

+

This GitHub Action is divided into three parts. I didn't want to use Docker but it seems it doesn't work well without it. Let dive a little into technical details. Three parts are as below.

+
    +
  1. main.py python script. This script contains many procedures.
  2. +
+
    +
  • Getting JSON data file via WakaTime API

    +
    +
    def get_stats() -> list:
    +        ...
    +        return data_list
    +
    +
    +

    This function parses the JSON file received and scraps out the useful data as a list of lists. Data scraped are language list, time spent on each language, percentage of the time, start date, and end date. For this action, I have limited the number of languages to 5 however it should be very easy to increase that number.

    +
  • +
  • Setting the Timeline

    +
    +
    def this_week(dates: list) -> str:
    +...
    +return f"Coding Activity During: {week_start.strftime('%d %B, %Y')} to {week_end.strftime('%d %B, %Y')}"
    +
    +
    +

    The start date and end date scraped in the last function are used here to set the timeline. Because date in JSON is provided in UTC as below :

    +
    +
    date:   "YYYY-MM-DDTHH:MM:SSZ"
    +
    +
    +

    I striped it to simple dates only. We can set them manually by taking the current time from the system. But that method is flawed. But this method ensures that JSON was received latest and the request was successful. Any anomaly will point to a failure in request.

    +
  • +
  • Creating a bar graph

    +
    +
    def make_graph(data: list):
    +                ...
    +        savefig(...)
    +
    +
    +

    Lastly, it is time to generate the graph and save them as an image. This function uses the data scraped in the first step. Creating a bar graph using matplotlib is easy. Decorating was a bit difficult. I wanted this graph to merge with GitHub's look so I chose to color the bar as GitHub colors the languages. That data is stored as colors.json. Many of the languages have slightly different spelling in GitHub as compared to WakaTime. So some languages are shown in default color. That can be improved if we notice that language and change its color manually. Lastly, the graph is saved both as SVG and PNG. SVGs are better to put on a responsive page.

    +
  • +
+
    +
  1. entrypoint.py shell script. This shell script clones the repository copies the image and pushes changes to the master. There were several problems. First of all authentication. This was solved by using a remote repository address using GitHub Token. And it seems that GitHub doesn't allow to commit without a username and email. So I used github-actions bot email.

    +
    +
    remote_repo-"https://${GITHUB_ACTOR}:${INPUT_GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
    +git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
    +git config user.name "GitHub Actions"
    +
    +
    +
  2. +
+
+

41898282 is the id assigned to the github-actions bot. Don't ask where I found them 🙂.

+

Another problem was to separate repository name from combined username/repository-name provided by ${GITHUB_REPOSITORY}. GitHub doesn't provides a direct way to get just the repo name. We used Internal Field Separator. It returns an array and works similar to split() command in Python and Java.

+
+
# '/' is the seperator
+IFS-'/' read -ra reponame <<< "${GITHUB_REPOSITORY}"
+# returned {username, repository}
+repository-"${reponame[1]}"
+
+
+
+

After that, all other commands are pretty straight. Commit the added files and push them.

+
    +
  1. Dockerfile IMPORTANT It took a lot of time to reach this state 🥱. This is where all the magic happens. I am running ubuntu:latest inside the container. I first update the distribution. Then install the required python packages. Lastly, I invoke the python script and shell script.
  2. +
+

There was an almost impossible problem, I searched hundreds of posts that how can I access the generated files inside Docker container, but no luck. But at last, I found a workaround(obviously otherwise you wouldn't be reading this by now 🤣) each command is run in a separate virtual sub-container. As the command ends its output is also lost but not when you club multiple commands together. At least not until every command is finished. The generated files are available to the next clubbed process. I did that by combining the python script run and shell script run.

+
CMD python3 /main.py && /entrypoint.sh
+
+

This part is the smallest yet took the most time and tries while developing this action.

+
+
+

How to use this GitHub Actions?

+
    +
  1. First get your WakaTime API Key. You can get it from your [WakaTime](https://wakatime.com) account settings.

    +
  2. +
  3. Save WakaTime API Key to Repository Secret. Find that by clicking the Settings tab. Keep the name of the secret as WAKATIME_API_KEY.

    +
  4. +
  5. Add the following line in your README.md of your repo.

    +
    +
    <img src-"https://github.com/<username>/<repository-name>/blob/<branch-name>/images/stat.svg" alt-"Alternative Text"/>
    +Example: <img src-"https://github.com/avinal/avinal/blob/main/images/stat.svg" alt-"Avinal WakaTime Activity"/>
    +
    +
    +
  6. +
+
+You can use this method to embed in web pages too. Do not use the markdown method of inserting images. It does not work sometimes.
+
    +
  1. Click the Action tab and choose to set up a workflow yourself.

    +
  2. +
  3. Copy the following code into the opened file, you can search for WakaTime Stat in the marketplace tab for assistance.

    +
    +
    name: WakaTime status update
    +
    +on:
    +  schedule:
    +        # Runs at 12 am  '0 0 * * *'  UTC
    +        - cron: "1 0 * * *"
    +
    +jobs:
    +  update-readme:
    +        name: Update the WakaTime Stat
    +        runs-on: ubuntu-latest
    +        steps:
    +          # Use avinal/Profile-Readme-WakaTime@<latest-release-tag> for latest stable release
    +          # Do not change the line below except the word master with tag number maybe
    +          # If you have forked this project you can use <username>/Profile-Readme-WakaTime@master instead
    +          - uses: avinal/Profile-Readme-WakaTime@master
    +            with:
    +                  # WakaTime API key stored in secrets, do not directly paste it here
    +                  WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }}
    +                  # Automatic github token
    +                  GITHUB_TOKEN: ${{ github.token }}
    +                  # Branch - newer GitHub repositories have "main" as default branch, change to main in that case, default is master
    +                  BRANCH: "master"
    +                  # Manual Commit messages - write your own messages here
    +                  COMMIT_MSG: "Automated Coding Activity Update :alien:"
    +
    +
    +
  4. +
  5. Please wait till 12 AM UTC to run this workflow automatically. Or you can force run it by going to the Actions tab. Or you can add the following lines under on: to run with every push. Search for 12 AM UTC to find the equivalent time in your time zone.

    +
    +
    on:
    +  push:
    +        branches: [ master ]
    +  schedule:
    +        - cron: '1 0 * * *'
    +
    +
    +
  6. +
+
+
+

My Coding Activity

+
+ +
+

+ This Blog is licensed under Attribution-NonCommercial 4.0 International + +

+
+
+
+
+ +
+
+
+ + + + You may put your GitHub Username. +
+
+ + + I'll never share your email with anyone + else. +
+
+
+ + +
+ Please Enter something ! +
+ Enter upto 200 characters. +
+ +
+ +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/posts/development/wsl1.html b/posts/development/wsl1.html new file mode 100644 index 0000000..3740188 --- /dev/null +++ b/posts/development/wsl1.html @@ -0,0 +1,238 @@ + + + + + + + + + Move WSL 2 Safely to another Drive | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Move WSL 2 Safely to another Drive +

+
+
+
+ +
+
+

It is real pain when you have small SSD and Windows Subsystem for Linux (WSL) is growing exponentially in size. There is no easy way to move +the WSL installation to another drive. Here in this blog I will discuss how to tackle this problem with bite size steps.

+
    +
  1. Open a PowerShell powershell or Command Prompt command-line with Admin access. For this you can use WinKey + X shortcut and select Windows PowerShell(Admin).
  2. +
  3. Check if the WSL 2 installation you are planning to move is is currently running/stopped.
  4. +
+
PS C:\Users\Avinal> wsl -l -v
+PS C:\Users\Avinal>
+  NAME      STATE           VERSION
+* Ubuntu    Running         2
+  Kali      Stopped         2
+
+
    +
  1. If its running then you must stop the particular WSL distribution. (Ubuntu used as example)
  2. +
+
PS C:\Users\Avinal> wsl -t Ubuntu
+
+
    +
  1. Export to some folder. (Here exporting Ubuntu as ubuntu-ex.tar to Z:wsl2)
  2. +
+
PS C:\Users\Avinal> wsl --export Ubuntu "Z:\export\ubuntu-ex.tar"
+
+
    +
  1. Unregister previous WSL installation
  2. +
+
PS C:\Users\Avinal> wsl --unregister Ubuntu
+
+
    +
  1. Create a new folder and import your WSL installation to that folder.
  2. +
+
PS C:\Users\Avinal> New-Item -Path "Z:\wsl2" -ItemType Directory
+
+    Directory: Z:\
+
+Mode                 LastWriteTime         Length Name
+----                 -------------         ------ ----
+d-----        31-12-2020     21:03                wsl2
+
+PS C:\Users\Avinal> wsl --import Ubuntu "Z:\wsl2" "Z:\export\ubuntu-ex.tar"
+
+
    +
  1. Check after import is complete
  2. +
+
PS C:\Users\Avinal> wsl -l -v
+PS C:\Users\Avinal>
+  NAME      STATE           VERSION
+* Ubuntu    Running         2
+  Kali      Stopped         2
+
+
    +
  1. Mark one of your WSL distribution as (default).
  2. +
+
PS C:\Users\Avinal> wsl -s Ubuntu
+
+
    +
  1. After exporting your default user will be set as root , to change it to your desired username, run following command
  2. +
+
PS C:\Users\Avinal> ubuntu config --default-user user_name
+
+
    +
  1. Finally run wsl and you have successfully moved your WSL 2 installation to another drive.
  2. +
+ +
+

+ This Blog is licensed under Attribution-NonCommercial 4.0 International + +

+
+
+
+
+ +
+
+
+ + + + You may put your GitHub Username. +
+
+ + + I'll never share your email with anyone + else. +
+
+
+ + +
+ Please Enter something ! +
+ Enter upto 200 characters. +
+ +
+ +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/posts/prime/prime1.html b/posts/prime/prime1.html new file mode 100644 index 0000000..9344fcc --- /dev/null +++ b/posts/prime/prime1.html @@ -0,0 +1,189 @@ + + + + + + + + + Introduction to Prime Numbers | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Introduction to Prime Numbers +

+
+
+
+ +
+
+
+A prime is a positive integer p having exactly two positive divisors, namely 1 and p. An integer n is composite if n > 1 and n is not prime. (The number 1 is considered neither prime nor composite.)
+

We can frame a brute force algorithm for checking primality of numbers using the above statement.

+
bool is_prime(int number) {
+    int factor = 0;
+    for (int i = 0; i <= number; ++i) {
+        if (number % i == 0) {
+            factor++;
+        }
+    }
+    return (factor == 2)? true : false;
+}
+
+ +
+

+ This Blog is licensed under Attribution-NonCommercial 4.0 International + +

+
+
+
+
+ +
+
+
+ + + + You may put your GitHub Username. +
+
+ + + I'll never share your email with anyone + else. +
+
+
+ + +
+ Please Enter something ! +
+ Enter upto 200 characters. +
+ +
+ +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/posts/report/final-evaluation.html b/posts/report/final-evaluation.html new file mode 100644 index 0000000..b23d1de --- /dev/null +++ b/posts/report/final-evaluation.html @@ -0,0 +1,862 @@ + + + + + + + + + Google Summer of Code 2021 | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Google Summer of Code 2021 +

+
+
+
+ +
+
+
+

The CMake Build system

+

FOSSology is quite an old and mature project. The project has been using bare metal Makefiles. As the project is growing with new agents and modernization it was required to have a modern build system.

+

The FOSSology is a suite of well-integrated and synchronized sub-projects (called agents) written in C, C++, and PHP. Most of the major agents are in C, C++ and that made CMake an obvious choice for a new build system for FOSSology. CMake is a versatile set of build, test, and packaging tools and is the most popular choice of C/C++ developers. CMake can be extended to create a build system for other languages too via custom scripts.

+
+
+

GitHub Actions CI/CD

+A CI Meme +

Since the FOSSology project moved on Github, it has used only the free Travis CI service for OSS projects. +At the time of writing Travis CI has reduced its free tier CI services. GitHub Actions provides faster builds. Since GitHub Actions is a fully managed service by GitHub, we don’t need to know how to scale and operate the infrastructure to run it.

+

It is straightforward to use with GitHub because when we fork a repository, the actions automatically get forked. This allows you to test and build projects very efficiently and even run them closer to the developer. Also, you have readily available access to the GitHub API, making it more popular among developers.

+
+
+

Improvements over previous build system and CI

+

The new build system and CI brings a lot of improvements and features. The list below describes them.

+
    +
  • CMake enforces out-of-source builds. This was already possible with the previous build system but not a strict requirement. This feature keeps the source code clean and makes cleaning the build artifacts easy. (Just remove the build folder :)
  • +
  • One of the major improvements over the previous build system is faster build times. CMake generates parallel build-enabled configurations for all generators. In our tests, the new build system is at least twice as fast as the previous one. With further improvement in configuration, we will be able to further cut the build times.
  • +
  • Previously FOSSology can only be built using Unix Makefiles. With CMake, we can now use many other popular generators such as Ninja.
  • +
  • Now it is also very flexible to choose different compilers. This will help support more platforms and architecture in the future. As of now, we are experimenting with Clang compilers.
  • +
  • FOSSology is quite an old project and a lot of agent testing code was written in the last decade. Initially, none of them were compatible with the new build system, but we were able to hack most of the test code using better-improved methods. Test times have also improved.
  • +
  • Migrating from Travis CI to GitHub Actions was another big move and for the most part, it removes the dependency on a third-party CI service. Along with that GitHub Actions provides better build times, tons of new features, and better integration with other GitHub services.
  • +
+
+
+

Deliverables

+

CMake Build System Tasks

+ +++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#AgentsBuildInstallTestingPackagingRemarks
1adj2nestYESYES YES 
2bucketsYESYES YES 
3cliYESYES
    +
  • Functional
  • +
+
YES 
4copyrightYESYES
    +
  • Functional
  • +
  • Unit
  • +
+
YES 
5debug YES YES 
6deciderYESYES
    +
  • Functional
  • +
  • Unit
  • +
+
YES 
7deciderjobYESYES
    +
  • Functional
  • +
+
YES 
8delagentYESYES
    +
  • Functional
  • +
  • Unit
  • +
+
YES 
9demomodYESYES
    +
  • Functional
  • +
  • Unit
  • +
+
NO(Not Used)
10example_wc_agentYESYES
    +
  • Functional
  • +
  • Unit
  • +
+
NO(Not Used)
11clibYESYES
    +
  • Functional
  • +
  • Unit
  • +
+
YES 
12cpplibYESYES
    +
  • Unit
  • +
+
YES 
13phplibYESYES
    +
  • Functional
  • +
  • Unit
  • +
+
YES1 functional +test needs fix
14maintagentYESYES YES 
15mimetypeYESYES
    +
  • Functional
  • +
  • Unit
  • +
+
YES 
16monkYESYES
    +
  • Functional
  • +
  • Unit
  • +
+
YES 
17ninkaYESYES
    +
  • Functional
  • +
  • Unit
  • +
+
NO(Deprecated)
18nomosYESYES
    +
  • Functional
  • +
  • Unit
  • +
+
YES 
19ojoYESYES
    +
  • Functional
  • +
  • Unit
  • +
+
YES1 functional +test needs fix
20pkgagentYESYES
    +
  • Functional
  • +
  • Unit
  • +
+
YES 
21readmeossYESYES YES 
22regexscanYESYES NO(Deprecated)
23reportImportYESYES YES 
24reuserYESYES
    +
  • Functional
  • +
+
YES 
25resoYESYES YES 
26schedulerYESYES
    +
  • Functional
  • +
  • Unit
  • +
+
YESTests needs +fix
27softwareHeritageYESYES YES 
28spashtYESYES YES 
29spdx2YESYES
    +
  • Functional
  • +
  • Unit
  • +
+
YES1 Test failing +in CI
30unifiedreportYESYES
    +
  • Functional
  • +
+
YES 
31ununpackYESYES
    +
  • Functional
  • +
  • Unit
  • +
+
YESUnit tests +needs fix
32wget_agentYESYES
    +
  • Functional
  • +
  • Unit
  • +
+
YES 
32wwwYESYES
    +
  • UI
  • +
+
YES 
+

GitHub Actions CI Tasks

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#CI TasksStatus
1buildAdded Ubuntu 20.04 GCC 8, 9 and Clang, GCC 7 not working
2c/cpp unit testAdded, delagent, scheduler and ununpack not working
3phpunit testsAdded, delagent and scheduler functional not working
4cahchingNot implemented
5source installNot implemented
+

(GREEN: COMPLETED, RED: INCOMPLETE, ORANGE: NOT NEEDED/DEPRECATED)

+
+
+

How does it work and how to use it?

+
+ +

The new build system retains the modular and hierarchical structure of the previous build system. On the other hand, the new build system provides several new flags to control the build. The new build system forces out-of-source build instead of the previous in-source builds. This keeps the source clutter-free and reduces the chance of accidentally deleting source files. Testing still needs some in-source artifacts, this will be solved once all the tests are fixed according to the new build system.

+

Each agent is a complete CMake sub-project with its independent configuration for building, installing, and testing. That means a single agent can be built and installed separately and even removed from the default build without breaking other builds. The directory structure is as below.

+
.
+├── build                           # temporary directory for build artifacts
+├── cmake                           # CMake modules for FOSSology
+│   ├── FoPackaging.cmake           # CMake Packaging configurations
+│   ├── FoUtilities.cmake           # Custom CMake utilities
+│   ├── FoVersionFile.cmake         # VERSION version.php CMake template file
+│   ├── SetDefaults.cmake           # CMake defaults for this project
+│   ├── TestInstall.make.in         # Template makefile for install during tests
+│   └── VERSION.in                  # VERSION file template
+├── src
+│   ├── agent-1                     # Agent sub-project
+│   │   ├── agent                   # Agent's source code directory
+│   │   │   ├── agent-source-code
+│   │   │   └── CMakeLists.txt
+│   │   ├── agent_tests             # Agent's test directory
+│   │   │   ├── Unit
+│   │   │   ├── Functional
+│   │   │   └── CMakeLists.txt
+│   │   ├── ui                      # Agent's UI source code
+│   │   │   ├── templates
+│   │   │   └── agent-ui-code
+│   │   └── CMakeLists.txt          # Agent's top-level CMake configuration
+:   :
+│   ├── other agents
+:   :
+│   └── CMakeLists.txt              # Source intermediate CMake configuration
+:
+├── other directories and files
+:
+└── CMakeLists.txt                  # FOSSology Top-level CMake configuration
+
+

The cmake directory contains customized CMake modules and templates for FOSSology. This directory is required for all the operations. The general workflow of the new build system as well as how to use it is described below.

+
    +
  1. Since the new build system is still in review. You must fork FOSSology and pull the #2075 pull request branch. Once you are in FOSSology root, run these commands.

    +
    +
    git fetch https://github.com/avinal/fossology avinal/feat/buildsystem:buildsystem
    +git checkout buildsystem
    +
    +
    +
  2. +
  3. The first step towards building is to create a temporary directory for storing intermediate files and build artifacts. By convention we use a directory named build, but you can use any name. (NOTE: For testing do not use other names)

    +
    +
    mkdir build
    +cd build
    +
    +
    +
  4. +
  5. In the next steps, we will configure the CMake project and generate the required configurations. You can use several flags to control the build. Given below are the flags available for this project.

    +
    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CMake FlagsDescriptionDefault
    -DCMAKE_INSTALL_PREFIX=<path>Sets the install prefix./usr/local
    -DAGENTS="agent1;agent2..."Only configure these agents.ALL AGENTS
    -DOFFLINE=<ON/OFF>Controls vendor generation, ON=NOOFF

    -DCMAKE_BUILD_TYPE=<type>

    +
    +
      +
    • Controls build type aka +level optimisation
    • +
    +
    +
      +
    • Debug
    • +
    • Release
    • +
    • RelWithDebInfo
    • +
    • MinSizeRel
    • +
    +
    Debug
    -DTESTING=<ON/OFF>Controls testing config generationOFF
    -DMONOPACK=<ON/OFF>Package adj2nest and ununpack seperatelyOFF
    -GNinjaUse Ninja instead of Unix MakefilesUnix MakeFiles
    +

    There are lots of inbuilt CMake command-line options you can see them in the official documentation. Once you have chosen your flags we can now configure the project using the following commands.

    +
    # From build folder
    +cd <name-of-build-directory>
    +cmake <flags> ..
    +
    +
    +
  6. +
  7. The next step is to build the project. You can use parallel jobs to build faster. For more options you can type cmake --help or make --help or ninja --help.

    +
    +
    # Common build command for all generators,
    +# Default number of parallel builds depends on generator used
    +cmake --build . --parallel <no-of-processes>
    +
    +# For Unix Makefiles, no parallel build by default
    +make -j <no-of-processes>
    +
    +# For Ninja, 8+ parallel build by default (depends on system)
    +ninja -j <no-of-processes>
    +
    +
    +
  8. +
  9. Installing is also as easy as building. You can choose to install only certain components even if you have built the whole project. If you directly invoke the install command without building the project, it will automatically build the project first.

    +
    +
    # For Unix Makefiles
    +make install
    +
    +# For Ninja
    +ninja install
    +
    +
    +
  10. +
  11. While testing has some issues, most of the testing is working fine. For now, you must build and run any test from the FOSSology root directory only. You can choose to configure a single agent if you want to test one agent only. See ctest --help for controlling test runs.

    +
    +
    # Common testing command
    +ctest --parallel <no-of-processes>
    +
    +# For Unix Makefiles
    +make test
    +
    +# For Ninja
    +ninja test
    +
    +
    +
  12. +
  13. You can package FOSSology, the packaging currently lacks copyright and conf files. But for testing purposes, you can use the following commands. Similar to installing, if you run the package command without building the project, it will automatically build the project first. See cpack --help for more packaging options.

    +
    +
    # Common testing command
    +cpack
    +
    +# For Unix Makefiles
    +make package
    +
    +# For Ninja
    +ninja package
    +
    +
    +
  14. +
+
+
+

Known Issues and Drawbacks

+

Although the transition from Makefiles to CMake and Travis CI to GitHub Actions is almost complete and working as expected. But it is not free of drawbacks and issues. This section outlines the known issues at the time of writing.

+A Bug Meme +
    +
  • Coverage builds may fail with linking errors.
  • +
  • Packaging prefix is the same as the install prefix. This requires the developer to set the install prefix manually before packaging to produce packages with the correct directory structure.
  • +
  • Testing and packaging must be used from the FOSSology root directory. Not doing so may or may not configure the project as intended.
  • +
  • Previously tests were written hardcoded for the Makefiles. But new build system requires all artifacts to be generated in a separate directory. This required me to add symbolic links wherever a generated script or file is expected. Tests can still leave some artifacts inside source folders.
  • +
  • There is no easy way to install a particular agent from the FOSSology root directory.
  • +
  • Packages don't contain copyright, readme, and license files. CMake doesn't provide a way to include these files. This is being tracked by issue #21832.
  • +
  • While packaging the symbolic links may or may not be dereferenced and hence results in copying the folder too in the target directory.
  • +
  • Running tests locally may require switching to fossy user.
  • +
  • While configured for testing, it may give permission errors.
  • +
  • Scheduler, Ununpack, and Delagent unit and functional tests are not working. I have added an issue #2084 to track the progress on fixing these tests.
  • +
  • CMake doesn't generate uninstall targets. The closest thing to uninstall is this snippet. This will be later added to the FOSSology.
  • +
+
+
+

Challenges Faced

+

While this whole project was challenging, some aspects of it were unforeseen and more challenging. When I decided to go on with this project I just had enough CMake knowledge to write a configuration for a very small project. I had never used CMake on this big scale. On the other side, the FOSSology community is largely unknown to CMake so for all of us it was learned, practiced, and implement. With support from mentors, I was able to overcome this challenge with flying colors.

+

The other challenge was to understand the old build system, how they are all connected and what is the flow. The complexity can be imagined by the fact that the most of code and configurations were written in the decade before the last decade and haven't changed much since then.

+

The most challenging task was to make tests work with the new build system. Since tests were mostly hardcoded and the new build system refactored many of the files and directory, the tests were failing initially. The testing part took me the most time. All thanks to my mentor Gaurav and my friend Sarita I was able to hack them to suit the new build system.

+
+ +
+

Future Development Plans

+

There is a lot to do with the new build system and CI and it will probably take a year or to reach a maturity point. I was able to meet most of the goals but some of them are remaining.

+
    +
  • Fix the tests, probably renovate them from the ground up.
  • +
  • Find a hack for packaging problems.
  • +
  • Improve and optimize the build.
  • +
  • Modernise the source code, remove old, bloated code and replace them according to new standards.
  • +
+
+
+

What did I learn from this project?

+

This Google Summer of Code was the busiest time of my life for all good reasons. I learned a lot about license compliance and how it all works in the software industry. The next big thing is CMake. As I mentioned I was just a novice user of CMake. Now I am confident that given any other large project I will be able to migrate it/improve it. I got to learn PHP, of which I did not know a single word before GSoC. And finally, I learned about packing and testing. I had these courses but implementing them myself and fixing them was a wholesome experience.

+

Other than that I improved on my communication and presentation skills. Collaborating with fellow participants was one of the great things that happened during GSoC.

+
+
+

Acknowledgments

+

Google Summer of Code is the best thing that has happened to me this year so far. Although there are numerous people to say thanks to, I want to mention key people who were my motivation and support during this period.

+

First of all, I want to thank and appreciate my mentors Gaurav Mishra, Michael C. Jaeger, Anupam Ghosh, and Shaheem Azmal M MD. Without the help and support from them, all this would not have been possible. They are very polite, knowledgeable, and helpful.

+

I want to thank my friend and fellow participant Sarita. Thank you for being a collaborator, support, and motivation for attempting GSoC.

+

Finally, I want to thank, my family and friends. I got to meet many awesome developers as my fellow participants from around the world, I wish we will do more collaboration in the future.

+
+ +
+

+ This Blog is licensed under Attribution-NonCommercial 4.0 International + +

+
+
+
+
+ +
+
+
+ + + + You may put your GitHub Username. +
+
+ + + I'll never share your email with anyone + else. +
+
+
+ + +
+ Please Enter something ! +
+ Enter upto 200 characters. +
+ +
+ +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/safari-pinned-tab.svg b/safari-pinned-tab.svg new file mode 100644 index 0000000..a571881 --- /dev/null +++ b/safari-pinned-tab.svg @@ -0,0 +1,29 @@ + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + diff --git a/site.webmanifest b/site.webmanifest new file mode 100644 index 0000000..309cc18 --- /dev/null +++ b/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "Avinal", + "short_name": "Avinal", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#00aba9", + "background_color": "#00aba9", + "display": "standalone" +} diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..ce63c27 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,76 @@ + + + + + https://avinal.space/posts/development/lovely-dangerous-things-redhat.html + 0.8 + + + + https://avinal.space/posts/development/i-am-loving-it-redhat.html + 0.8 + + + + https://avinal.space/posts/report/final-evaluation.html + 0.8 + + + + https://avinal.space/posts/development/rst-guide.html + 0.8 + + + + https://avinal.space/posts/development/wakatime-readme.html + 0.8 + + + + https://avinal.space/posts/development/twilight-blog.html + 0.8 + + + + https://avinal.space/posts/prime/prime1.html + 0.8 + + + + https://avinal.space/posts/blog/hrt-interview-1.html + 0.8 + + + + https://avinal.space/posts/development/wsl1.html + 0.8 + + + + https://avinal.space/posts/development/vlc-gsod-report.html + 0.8 + + + + https://avinal.space/posts/blog/this-is-for-you.html + 0.8 + + + + https://avinal.space/posts/article/for-sunshine.html + 0.8 + + + + https://avinal.space/posts/article/red-big-ants.html + 0.8 + + + + + https://avinal.space/pages/about-me.html + 1.0 + + + + \ No newline at end of file diff --git a/tag/ants.html b/tag/ants.html new file mode 100644 index 0000000..97492a4 --- /dev/null +++ b/tag/ants.html @@ -0,0 +1,110 @@ + + + + + + + + + #ants Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #ants +

+
+
+
+
    +
  • + + Mon 27 February 2012 +
  • +
  • + + article +
  • +
+
+
+

+ The Big Red Ants +

+
+ In a bird’s eye view if we see around us, ants are the common and tiniest living entitiy seen by naked eye. One of them are the big red ants, in my view they are unique from others in two ways, first they live on trees and second their anteenas are too long and bent in middle, seems like their fore legs. Their mandible (mouth) seems like eagle’s beak. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/article.html b/tag/article.html new file mode 100644 index 0000000..caf3d4f --- /dev/null +++ b/tag/article.html @@ -0,0 +1,110 @@ + + + + + + + + + #article Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #article +

+
+
+
+
    +
  • + + Sat 21 September 2019 +
  • +
  • + + article +
  • +
+
+
+

+ प्रेम रतन धन पायो +

+
+ टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं । दादा-दादी कहा करते थे ये जिंदा पहाड़ हैं । सारी बातें सुनते हैं लोगों की । उनके दुख दर्द दूर करते हैं, ये देवता हैं । +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/blog.html b/tag/blog.html new file mode 100644 index 0000000..45800fc --- /dev/null +++ b/tag/blog.html @@ -0,0 +1,110 @@ + + + + + + + + + #blog Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #blog +

+
+
+
+ +
+
+

+ How I Created This Blog? +

+
+ As you would have guessed by now, this blog is created using one such awesome SSG named Pelican. Pelican is simple, customizable and offers lots of themes and plugins. Pelican is python based SSG and is available through pip. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/coding.html b/tag/coding.html new file mode 100644 index 0000000..c4d6136 --- /dev/null +++ b/tag/coding.html @@ -0,0 +1,110 @@ + + + + + + + + + #coding Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #coding +

+
+
+
+ +
+
+

+ How I implemented WakaTime embeddable Coding Graph GHA? +

+
+ f you use WakaTime to track your coding activity. You can add that to your README as a bar graph or embed it in your blog/portfolio. Just add this action to any of your repositories and there you have it. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/docker.html b/tag/docker.html new file mode 100644 index 0000000..3b88d50 --- /dev/null +++ b/tag/docker.html @@ -0,0 +1,133 @@ + + + + + + + + + #docker Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #docker +

+
+
+
+ +
+
+

+ Developing Minimal Tekton Server mks_logo +

+
+ We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster. +
+
+
+
+
+
+ +
+
+

+ My internship at Red Hat redhat_logo +

+
+ I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/fossology.html b/tag/fossology.html new file mode 100644 index 0000000..c6842ec --- /dev/null +++ b/tag/fossology.html @@ -0,0 +1,110 @@ + + + + + + + + + #FOSSology Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #FOSSology +

+
+
+
+
    +
  • + + Thu 19 August 2021 +
  • +
  • + + report +
  • +
+
+
+

+ Google Summer of Code 2021 +

+
+ This is the final report of my Google Summer of Code 2021 at The FOSSology Project. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/github-action.html b/tag/github-action.html new file mode 100644 index 0000000..614274a --- /dev/null +++ b/tag/github-action.html @@ -0,0 +1,110 @@ + + + + + + + + + #github-action Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #github-action +

+
+
+
+ +
+
+

+ How I implemented WakaTime embeddable Coding Graph GHA? +

+
+ f you use WakaTime to track your coding activity. You can add that to your README as a bar graph or embed it in your blog/portfolio. Just add this action to any of your repositories and there you have it. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/github.html b/tag/github.html new file mode 100644 index 0000000..5298008 --- /dev/null +++ b/tag/github.html @@ -0,0 +1,110 @@ + + + + + + + + + #github Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #github +

+
+ +
+
+ + + + + + \ No newline at end of file diff --git a/tag/golang.html b/tag/golang.html new file mode 100644 index 0000000..4577eb5 --- /dev/null +++ b/tag/golang.html @@ -0,0 +1,133 @@ + + + + + + + + + #golang Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #golang +

+
+
+
+ +
+
+

+ Developing Minimal Tekton Server mks_logo +

+
+ We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster. +
+
+
+
+
+
+ +
+
+

+ My internship at Red Hat redhat_logo +

+
+ I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/gsoc.html b/tag/gsoc.html new file mode 100644 index 0000000..fbead66 --- /dev/null +++ b/tag/gsoc.html @@ -0,0 +1,110 @@ + + + + + + + + + #gsoc Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #gsoc +

+
+
+
+
    +
  • + + Thu 19 August 2021 +
  • +
  • + + report +
  • +
+
+
+

+ Google Summer of Code 2021 +

+
+ This is the final report of my Google Summer of Code 2021 at The FOSSology Project. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/gsod.html b/tag/gsod.html new file mode 100644 index 0000000..823cb3f --- /dev/null +++ b/tag/gsod.html @@ -0,0 +1,110 @@ + + + + + + + + + #gsod Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #gsod +

+
+
+
+ +
+
+

+ Create the VLC User Documentation for one Mobile Port(Android) +

+
+ The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLC’s wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/gsod2020.html b/tag/gsod2020.html new file mode 100644 index 0000000..f358a41 --- /dev/null +++ b/tag/gsod2020.html @@ -0,0 +1,110 @@ + + + + + + + + + #gsod2020 Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #gsod2020 +

+
+
+
+ +
+
+

+ Create the VLC User Documentation for one Mobile Port(Android) +

+
+ The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLC’s wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/hindi.html b/tag/hindi.html new file mode 100644 index 0000000..b882926 --- /dev/null +++ b/tag/hindi.html @@ -0,0 +1,110 @@ + + + + + + + + + #hindi Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #hindi +

+
+
+
+
    +
  • + + Sat 21 September 2019 +
  • +
  • + + article +
  • +
+
+
+

+ प्रेम रतन धन पायो +

+
+ टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं । दादा-दादी कहा करते थे ये जिंदा पहाड़ हैं । सारी बातें सुनते हैं लोगों की । उनके दुख दर्द दूर करते हैं, ये देवता हैं । +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/hrt.html b/tag/hrt.html new file mode 100644 index 0000000..070221d --- /dev/null +++ b/tag/hrt.html @@ -0,0 +1,110 @@ + + + + + + + + + #HRT Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #HRT +

+
+
+
+
    +
  • + + Mon 04 January 2021 +
  • +
  • + + blog +
  • +
+
+
+

+ HRT Systems Internship Interview Experience +

+
+ I applied for Systems Internship - Summer 2021 back in December 2020 at Hudson River Trading , New York.....Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/hudsonrivertrading.html b/tag/hudsonrivertrading.html new file mode 100644 index 0000000..5cf3ef0 --- /dev/null +++ b/tag/hudsonrivertrading.html @@ -0,0 +1,110 @@ + + + + + + + + + #hudsonrivertrading Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #hudsonrivertrading +

+
+
+
+
    +
  • + + Mon 04 January 2021 +
  • +
  • + + blog +
  • +
+
+
+

+ HRT Systems Internship Interview Experience +

+
+ I applied for Systems Internship - Summer 2021 back in December 2020 at Hudson River Trading , New York.....Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/intern.html b/tag/intern.html new file mode 100644 index 0000000..d892ba3 --- /dev/null +++ b/tag/intern.html @@ -0,0 +1,133 @@ + + + + + + + + + #intern Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #intern +

+
+
+
+ +
+
+

+ Developing Minimal Tekton Server mks_logo +

+
+ We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster. +
+
+
+
+
+
+ +
+
+

+ My internship at Red Hat redhat_logo +

+
+ I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/internship.html b/tag/internship.html new file mode 100644 index 0000000..10d6079 --- /dev/null +++ b/tag/internship.html @@ -0,0 +1,110 @@ + + + + + + + + + #internship Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #internship +

+
+
+
+
    +
  • + + Mon 04 January 2021 +
  • +
  • + + blog +
  • +
+
+
+

+ HRT Systems Internship Interview Experience +

+
+ I applied for Systems Internship - Summer 2021 back in December 2020 at Hudson River Trading , New York.....Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/interstellar.html b/tag/interstellar.html new file mode 100644 index 0000000..e5b9f1d --- /dev/null +++ b/tag/interstellar.html @@ -0,0 +1,110 @@ + + + + + + + + + #interstellar Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #interstellar +

+
+
+
+
    +
  • + + Mon 28 September 2020 +
  • +
  • + + blog +
  • +
+
+
+

+ The Interstellar Twilight +

+
+ If in the Twilight of dreams we should meet once more, we shell talk again together and I shall sing to you a lullaby till you sleep again to meet me in the Twilight of another dream. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/interview.html b/tag/interview.html new file mode 100644 index 0000000..a8cece7 --- /dev/null +++ b/tag/interview.html @@ -0,0 +1,110 @@ + + + + + + + + + #interview Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #interview +

+
+
+
+
    +
  • + + Mon 04 January 2021 +
  • +
  • + + blog +
  • +
+
+
+

+ HRT Systems Internship Interview Experience +

+
+ I applied for Systems Internship - Summer 2021 back in December 2020 at Hudson River Trading , New York.....Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/kubernetes.html b/tag/kubernetes.html new file mode 100644 index 0000000..fafe0da --- /dev/null +++ b/tag/kubernetes.html @@ -0,0 +1,133 @@ + + + + + + + + + #kubernetes Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #kubernetes +

+
+
+
+ +
+
+

+ Developing Minimal Tekton Server mks_logo +

+
+ We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster. +
+
+
+
+
+
+ +
+
+

+ My internship at Red Hat redhat_logo +

+
+ I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/love.html b/tag/love.html new file mode 100644 index 0000000..f971439 --- /dev/null +++ b/tag/love.html @@ -0,0 +1,110 @@ + + + + + + + + + #love Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #love +

+
+
+
+
    +
  • + + Sat 21 September 2019 +
  • +
  • + + article +
  • +
+
+
+

+ प्रेम रतन धन पायो +

+
+ टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं । दादा-दादी कहा करते थे ये जिंदा पहाड़ हैं । सारी बातें सुनते हैं लोगों की । उनके दुख दर्द दूर करते हैं, ये देवता हैं । +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/openshift.html b/tag/openshift.html new file mode 100644 index 0000000..9d5cd1e --- /dev/null +++ b/tag/openshift.html @@ -0,0 +1,133 @@ + + + + + + + + + #openshift Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #openshift +

+
+
+
+ +
+
+

+ Developing Minimal Tekton Server mks_logo +

+
+ We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster. +
+
+
+
+
+
+ +
+
+

+ My internship at Red Hat redhat_logo +

+
+ I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/pelican.html b/tag/pelican.html new file mode 100644 index 0000000..f380171 --- /dev/null +++ b/tag/pelican.html @@ -0,0 +1,110 @@ + + + + + + + + + #pelican Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #pelican +

+
+
+
+ +
+
+

+ How I Created This Blog? +

+
+ As you would have guessed by now, this blog is created using one such awesome SSG named Pelican. Pelican is simple, customizable and offers lots of themes and plugins. Pelican is python based SSG and is available through pip. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/prime.html b/tag/prime.html new file mode 100644 index 0000000..488e5e2 --- /dev/null +++ b/tag/prime.html @@ -0,0 +1,110 @@ + + + + + + + + + #prime Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #prime +

+
+
+
+
    +
  • + + Sat 09 January 2021 +
  • +
  • + + prime +
  • +
+
+
+

+ Introduction to Prime Numbers +

+
+ A prime is a positive integer p having exactly two positive divisors, namely 1 and p. An integer n is composite if n > 1 and n is not prime. (The number 1 is considered neither prime nor composite.) +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/primenumbers.html b/tag/primenumbers.html new file mode 100644 index 0000000..0e9e78f --- /dev/null +++ b/tag/primenumbers.html @@ -0,0 +1,110 @@ + + + + + + + + + #primenumbers Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #primenumbers +

+
+
+
+
    +
  • + + Sat 09 January 2021 +
  • +
  • + + prime +
  • +
+
+
+

+ Introduction to Prime Numbers +

+
+ A prime is a positive integer p having exactly two positive divisors, namely 1 and p. An integer n is composite if n > 1 and n is not prime. (The number 1 is considered neither prime nor composite.) +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/redhat.html b/tag/redhat.html new file mode 100644 index 0000000..61e9962 --- /dev/null +++ b/tag/redhat.html @@ -0,0 +1,133 @@ + + + + + + + + + #redhat Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #redhat +

+
+
+
+ +
+
+

+ Developing Minimal Tekton Server mks_logo +

+
+ We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster. +
+
+
+
+
+
+ +
+
+

+ My internship at Red Hat redhat_logo +

+
+ I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/rst.html b/tag/rst.html new file mode 100644 index 0000000..90828e7 --- /dev/null +++ b/tag/rst.html @@ -0,0 +1,110 @@ + + + + + + + + + #rst Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #rst +

+
+ +
+
+ + + + + + \ No newline at end of file diff --git a/tag/sav.html b/tag/sav.html new file mode 100644 index 0000000..3053781 --- /dev/null +++ b/tag/sav.html @@ -0,0 +1,110 @@ + + + + + + + + + #sav Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #sav +

+
+
+
+
    +
  • + + Mon 27 February 2012 +
  • +
  • + + article +
  • +
+
+
+

+ The Big Red Ants +

+
+ In a bird’s eye view if we see around us, ants are the common and tiniest living entitiy seen by naked eye. One of them are the big red ants, in my view they are unique from others in two ways, first they live on trees and second their anteenas are too long and bent in middle, seems like their fore legs. Their mandible (mouth) seems like eagle’s beak. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/ssg.html b/tag/ssg.html new file mode 100644 index 0000000..9f8225b --- /dev/null +++ b/tag/ssg.html @@ -0,0 +1,110 @@ + + + + + + + + + #ssg Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #ssg +

+
+
+
+ +
+
+

+ How I Created This Blog? +

+
+ As you would have guessed by now, this blog is created using one such awesome SSG named Pelican. Pelican is simple, customizable and offers lots of themes and plugins. Pelican is python based SSG and is available through pip. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/tekton.html b/tag/tekton.html new file mode 100644 index 0000000..fb16309 --- /dev/null +++ b/tag/tekton.html @@ -0,0 +1,133 @@ + + + + + + + + + #tekton Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #tekton +

+
+
+
+ +
+
+

+ Developing Minimal Tekton Server mks_logo +

+
+ We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster. +
+
+
+
+
+
+ +
+
+

+ My internship at Red Hat redhat_logo +

+
+ I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/twilight.html b/tag/twilight.html new file mode 100644 index 0000000..dc3e330 --- /dev/null +++ b/tag/twilight.html @@ -0,0 +1,110 @@ + + + + + + + + + #twilight Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #twilight +

+
+
+
+
    +
  • + + Mon 28 September 2020 +
  • +
  • + + blog +
  • +
+
+
+

+ The Interstellar Twilight +

+
+ If in the Twilight of dreams we should meet once more, we shell talk again together and I shall sing to you a lullaby till you sleep again to meet me in the Twilight of another dream. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/vlc.html b/tag/vlc.html new file mode 100644 index 0000000..8307227 --- /dev/null +++ b/tag/vlc.html @@ -0,0 +1,110 @@ + + + + + + + + + #vlc Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #vlc +

+
+
+
+ +
+
+

+ Create the VLC User Documentation for one Mobile Port(Android) +

+
+ The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLC’s wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/wakatime.html b/tag/wakatime.html new file mode 100644 index 0000000..5b43e4b --- /dev/null +++ b/tag/wakatime.html @@ -0,0 +1,110 @@ + + + + + + + + + #wakatime Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #wakatime +

+
+
+
+ +
+
+

+ How I implemented WakaTime embeddable Coding Graph GHA? +

+
+ f you use WakaTime to track your coding activity. You can add that to your README as a bar graph or embed it in your blog/portfolio. Just add this action to any of your repositories and there you have it. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/wsl.html b/tag/wsl.html new file mode 100644 index 0000000..913b407 --- /dev/null +++ b/tag/wsl.html @@ -0,0 +1,110 @@ + + + + + + + + + #wsl Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #wsl +

+
+
+
+ +
+
+

+ Move WSL 2 Safely to another Drive +

+
+ It is real pain when you have small SSD and Windows Subsystem for Linux (WSL) is growing exponentially in size. There is no easy way to move the WSL installation to another drive. Here in this blog I will discuss how to tackle this problem with bite size steps. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tag/wsl2.html b/tag/wsl2.html new file mode 100644 index 0000000..29c200d --- /dev/null +++ b/tag/wsl2.html @@ -0,0 +1,110 @@ + + + + + + + + + #wsl2 Articles | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tag: #wsl2 +

+
+
+
+ +
+
+

+ Move WSL 2 Safely to another Drive +

+
+ It is real pain when you have small SSD and Windows Subsystem for Linux (WSL) is growing exponentially in size. There is no easy way to move the WSL installation to another drive. Here in this blog I will discuss how to tackle this problem with bite size steps. +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tags.html b/tags.html new file mode 100644 index 0000000..26a18c5 --- /dev/null +++ b/tags.html @@ -0,0 +1,229 @@ + + + + + + + + + Tags | Be My SpaceTime + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Be My SpaceTime +

+ + +
+
+
+ +
+
+

Tags +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#ants1
#article1
#blog1
#coding1
#docker2
#FOSSology1
#github1
#github-action1
#golang2
#gsoc1
#gsod1
#gsod20201
#hindi1
#HRT1
#hudsonrivertrading1
#intern2
#internship1
#interstellar1
#interview1
#kubernetes2
#love1
#openshift2
#pelican1
#prime1
#primenumbers1
#redhat2
#rst1
#sav1
#ssg1
#tekton2
#twilight1
#vlc1
#wakatime1
#wsl1
#wsl21
+
+
+ + + + + + \ No newline at end of file diff --git a/theme/css/Exodar-Outline.woff b/theme/css/Exodar-Outline.woff new file mode 100644 index 0000000..f9ea529 Binary files /dev/null and b/theme/css/Exodar-Outline.woff differ diff --git a/theme/css/Exodar-Outline.woff2 b/theme/css/Exodar-Outline.woff2 new file mode 100644 index 0000000..78c6301 Binary files /dev/null and b/theme/css/Exodar-Outline.woff2 differ diff --git a/theme/css/Exodar.woff b/theme/css/Exodar.woff new file mode 100644 index 0000000..ca745dc Binary files /dev/null and b/theme/css/Exodar.woff differ diff --git a/theme/css/Exodar.woff2 b/theme/css/Exodar.woff2 new file mode 100644 index 0000000..9e52a5f Binary files /dev/null and b/theme/css/Exodar.woff2 differ diff --git a/theme/css/all.css b/theme/css/all.css new file mode 100644 index 0000000..934c5ca --- /dev/null +++ b/theme/css/all.css @@ -0,0 +1,4586 @@ +/*! + * Font Awesome Free 5.14.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa, +.fas, +.far, +.fal, +.fad, +.fab { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; } + +.fa-lg { + font-size: 1.33333em; + line-height: 0.75em; + vertical-align: -.0667em; } + +.fa-xs { + font-size: .75em; } + +.fa-sm { + font-size: .875em; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: 2.5em; + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: -2em; + position: absolute; + text-align: center; + width: 2em; + line-height: inherit; } + +.fa-border { + border: solid 0.08em #eee; + border-radius: .1em; + padding: .2em .25em .15em; } + +.fa-pull-left { + float: left; } + +.fa-pull-right { + float: right; } + +.fa.fa-pull-left, +.fas.fa-pull-left, +.far.fa-pull-left, +.fal.fa-pull-left, +.fab.fa-pull-left { + margin-right: .3em; } + +.fa.fa-pull-right, +.fas.fa-pull-right, +.far.fa-pull-right, +.fal.fa-pull-right, +.fab.fa-pull-right { + margin-left: .3em; } + +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; } + +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical, +:root .fa-flip-both { + -webkit-filter: none; + filter: none; } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: #fff; } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ +.fa-500px:before { + content: "\f26e"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-acquisitions-incorporated:before { + content: "\f6af"; } + +.fa-ad:before { + content: "\f641"; } + +.fa-address-book:before { + content: "\f2b9"; } + +.fa-address-card:before { + content: "\f2bb"; } + +.fa-adjust:before { + content: "\f042"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-adobe:before { + content: "\f778"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-air-freshener:before { + content: "\f5d0"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-align-center:before { + content: "\f037"; } + +.fa-align-justify:before { + content: "\f039"; } + +.fa-align-left:before { + content: "\f036"; } + +.fa-align-right:before { + content: "\f038"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-allergies:before { + content: "\f461"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-ambulance:before { + content: "\f0f9"; } + +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-anchor:before { + content: "\f13d"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-angle-double-down:before { + content: "\f103"; } + +.fa-angle-double-left:before { + content: "\f100"; } + +.fa-angle-double-right:before { + content: "\f101"; } + +.fa-angle-double-up:before { + content: "\f102"; } + +.fa-angle-down:before { + content: "\f107"; } + +.fa-angle-left:before { + content: "\f104"; } + +.fa-angle-right:before { + content: "\f105"; } + +.fa-angle-up:before { + content: "\f106"; } + +.fa-angry:before { + content: "\f556"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-ankh:before { + content: "\f644"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-apple-alt:before { + content: "\f5d1"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-archive:before { + content: "\f187"; } + +.fa-archway:before { + content: "\f557"; } + +.fa-arrow-alt-circle-down:before { + content: "\f358"; } + +.fa-arrow-alt-circle-left:before { + content: "\f359"; } + +.fa-arrow-alt-circle-right:before { + content: "\f35a"; } + +.fa-arrow-alt-circle-up:before { + content: "\f35b"; } + +.fa-arrow-circle-down:before { + content: "\f0ab"; } + +.fa-arrow-circle-left:before { + content: "\f0a8"; } + +.fa-arrow-circle-right:before { + content: "\f0a9"; } + +.fa-arrow-circle-up:before { + content: "\f0aa"; } + +.fa-arrow-down:before { + content: "\f063"; } + +.fa-arrow-left:before { + content: "\f060"; } + +.fa-arrow-right:before { + content: "\f061"; } + +.fa-arrow-up:before { + content: "\f062"; } + +.fa-arrows-alt:before { + content: "\f0b2"; } + +.fa-arrows-alt-h:before { + content: "\f337"; } + +.fa-arrows-alt-v:before { + content: "\f338"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-assistive-listening-systems:before { + content: "\f2a2"; } + +.fa-asterisk:before { + content: "\f069"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-at:before { + content: "\f1fa"; } + +.fa-atlas:before { + content: "\f558"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-atom:before { + content: "\f5d2"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-audio-description:before { + content: "\f29e"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-award:before { + content: "\f559"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-baby:before { + content: "\f77c"; } + +.fa-baby-carriage:before { + content: "\f77d"; } + +.fa-backspace:before { + content: "\f55a"; } + +.fa-backward:before { + content: "\f04a"; } + +.fa-bacon:before { + content: "\f7e5"; } + +.fa-bacteria:before { + content: "\e059"; } + +.fa-bacterium:before { + content: "\e05a"; } + +.fa-bahai:before { + content: "\f666"; } + +.fa-balance-scale:before { + content: "\f24e"; } + +.fa-balance-scale-left:before { + content: "\f515"; } + +.fa-balance-scale-right:before { + content: "\f516"; } + +.fa-ban:before { + content: "\f05e"; } + +.fa-band-aid:before { + content: "\f462"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-barcode:before { + content: "\f02a"; } + +.fa-bars:before { + content: "\f0c9"; } + +.fa-baseball-ball:before { + content: "\f433"; } + +.fa-basketball-ball:before { + content: "\f434"; } + +.fa-bath:before { + content: "\f2cd"; } + +.fa-battery-empty:before { + content: "\f244"; } + +.fa-battery-full:before { + content: "\f240"; } + +.fa-battery-half:before { + content: "\f242"; } + +.fa-battery-quarter:before { + content: "\f243"; } + +.fa-battery-three-quarters:before { + content: "\f241"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-bed:before { + content: "\f236"; } + +.fa-beer:before { + content: "\f0fc"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-bell:before { + content: "\f0f3"; } + +.fa-bell-slash:before { + content: "\f1f6"; } + +.fa-bezier-curve:before { + content: "\f55b"; } + +.fa-bible:before { + content: "\f647"; } + +.fa-bicycle:before { + content: "\f206"; } + +.fa-biking:before { + content: "\f84a"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-binoculars:before { + content: "\f1e5"; } + +.fa-biohazard:before { + content: "\f780"; } + +.fa-birthday-cake:before { + content: "\f1fd"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-blender:before { + content: "\f517"; } + +.fa-blender-phone:before { + content: "\f6b6"; } + +.fa-blind:before { + content: "\f29d"; } + +.fa-blog:before { + content: "\f781"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-bold:before { + content: "\f032"; } + +.fa-bolt:before { + content: "\f0e7"; } + +.fa-bomb:before { + content: "\f1e2"; } + +.fa-bone:before { + content: "\f5d7"; } + +.fa-bong:before { + content: "\f55c"; } + +.fa-book:before { + content: "\f02d"; } + +.fa-book-dead:before { + content: "\f6b7"; } + +.fa-book-medical:before { + content: "\f7e6"; } + +.fa-book-open:before { + content: "\f518"; } + +.fa-book-reader:before { + content: "\f5da"; } + +.fa-bookmark:before { + content: "\f02e"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-border-all:before { + content: "\f84c"; } + +.fa-border-none:before { + content: "\f850"; } + +.fa-border-style:before { + content: "\f853"; } + +.fa-bowling-ball:before { + content: "\f436"; } + +.fa-box:before { + content: "\f466"; } + +.fa-box-open:before { + content: "\f49e"; } + +.fa-box-tissue:before { + content: "\e05b"; } + +.fa-boxes:before { + content: "\f468"; } + +.fa-braille:before { + content: "\f2a1"; } + +.fa-brain:before { + content: "\f5dc"; } + +.fa-bread-slice:before { + content: "\f7ec"; } + +.fa-briefcase:before { + content: "\f0b1"; } + +.fa-briefcase-medical:before { + content: "\f469"; } + +.fa-broadcast-tower:before { + content: "\f519"; } + +.fa-broom:before { + content: "\f51a"; } + +.fa-brush:before { + content: "\f55d"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-bug:before { + content: "\f188"; } + +.fa-building:before { + content: "\f1ad"; } + +.fa-bullhorn:before { + content: "\f0a1"; } + +.fa-bullseye:before { + content: "\f140"; } + +.fa-burn:before { + content: "\f46a"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-bus:before { + content: "\f207"; } + +.fa-bus-alt:before { + content: "\f55e"; } + +.fa-business-time:before { + content: "\f64a"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-calculator:before { + content: "\f1ec"; } + +.fa-calendar:before { + content: "\f133"; } + +.fa-calendar-alt:before { + content: "\f073"; } + +.fa-calendar-check:before { + content: "\f274"; } + +.fa-calendar-day:before { + content: "\f783"; } + +.fa-calendar-minus:before { + content: "\f272"; } + +.fa-calendar-plus:before { + content: "\f271"; } + +.fa-calendar-times:before { + content: "\f273"; } + +.fa-calendar-week:before { + content: "\f784"; } + +.fa-camera:before { + content: "\f030"; } + +.fa-camera-retro:before { + content: "\f083"; } + +.fa-campground:before { + content: "\f6bb"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-candy-cane:before { + content: "\f786"; } + +.fa-cannabis:before { + content: "\f55f"; } + +.fa-capsules:before { + content: "\f46b"; } + +.fa-car:before { + content: "\f1b9"; } + +.fa-car-alt:before { + content: "\f5de"; } + +.fa-car-battery:before { + content: "\f5df"; } + +.fa-car-crash:before { + content: "\f5e1"; } + +.fa-car-side:before { + content: "\f5e4"; } + +.fa-caravan:before { + content: "\f8ff"; } + +.fa-caret-down:before { + content: "\f0d7"; } + +.fa-caret-left:before { + content: "\f0d9"; } + +.fa-caret-right:before { + content: "\f0da"; } + +.fa-caret-square-down:before { + content: "\f150"; } + +.fa-caret-square-left:before { + content: "\f191"; } + +.fa-caret-square-right:before { + content: "\f152"; } + +.fa-caret-square-up:before { + content: "\f151"; } + +.fa-caret-up:before { + content: "\f0d8"; } + +.fa-carrot:before { + content: "\f787"; } + +.fa-cart-arrow-down:before { + content: "\f218"; } + +.fa-cart-plus:before { + content: "\f217"; } + +.fa-cash-register:before { + content: "\f788"; } + +.fa-cat:before { + content: "\f6be"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-certificate:before { + content: "\f0a3"; } + +.fa-chair:before { + content: "\f6c0"; } + +.fa-chalkboard:before { + content: "\f51b"; } + +.fa-chalkboard-teacher:before { + content: "\f51c"; } + +.fa-charging-station:before { + content: "\f5e7"; } + +.fa-chart-area:before { + content: "\f1fe"; } + +.fa-chart-bar:before { + content: "\f080"; } + +.fa-chart-line:before { + content: "\f201"; } + +.fa-chart-pie:before { + content: "\f200"; } + +.fa-check:before { + content: "\f00c"; } + +.fa-check-circle:before { + content: "\f058"; } + +.fa-check-double:before { + content: "\f560"; } + +.fa-check-square:before { + content: "\f14a"; } + +.fa-cheese:before { + content: "\f7ef"; } + +.fa-chess:before { + content: "\f439"; } + +.fa-chess-bishop:before { + content: "\f43a"; } + +.fa-chess-board:before { + content: "\f43c"; } + +.fa-chess-king:before { + content: "\f43f"; } + +.fa-chess-knight:before { + content: "\f441"; } + +.fa-chess-pawn:before { + content: "\f443"; } + +.fa-chess-queen:before { + content: "\f445"; } + +.fa-chess-rook:before { + content: "\f447"; } + +.fa-chevron-circle-down:before { + content: "\f13a"; } + +.fa-chevron-circle-left:before { + content: "\f137"; } + +.fa-chevron-circle-right:before { + content: "\f138"; } + +.fa-chevron-circle-up:before { + content: "\f139"; } + +.fa-chevron-down:before { + content: "\f078"; } + +.fa-chevron-left:before { + content: "\f053"; } + +.fa-chevron-right:before { + content: "\f054"; } + +.fa-chevron-up:before { + content: "\f077"; } + +.fa-child:before { + content: "\f1ae"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-church:before { + content: "\f51d"; } + +.fa-circle:before { + content: "\f111"; } + +.fa-circle-notch:before { + content: "\f1ce"; } + +.fa-city:before { + content: "\f64f"; } + +.fa-clinic-medical:before { + content: "\f7f2"; } + +.fa-clipboard:before { + content: "\f328"; } + +.fa-clipboard-check:before { + content: "\f46c"; } + +.fa-clipboard-list:before { + content: "\f46d"; } + +.fa-clock:before { + content: "\f017"; } + +.fa-clone:before { + content: "\f24d"; } + +.fa-closed-captioning:before { + content: "\f20a"; } + +.fa-cloud:before { + content: "\f0c2"; } + +.fa-cloud-download-alt:before { + content: "\f381"; } + +.fa-cloud-meatball:before { + content: "\f73b"; } + +.fa-cloud-moon:before { + content: "\f6c3"; } + +.fa-cloud-moon-rain:before { + content: "\f73c"; } + +.fa-cloud-rain:before { + content: "\f73d"; } + +.fa-cloud-showers-heavy:before { + content: "\f740"; } + +.fa-cloud-sun:before { + content: "\f6c4"; } + +.fa-cloud-sun-rain:before { + content: "\f743"; } + +.fa-cloud-upload-alt:before { + content: "\f382"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-cocktail:before { + content: "\f561"; } + +.fa-code:before { + content: "\f121"; } + +.fa-code-branch:before { + content: "\f126"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-coffee:before { + content: "\f0f4"; } + +.fa-cog:before { + content: "\f013"; } + +.fa-cogs:before { + content: "\f085"; } + +.fa-coins:before { + content: "\f51e"; } + +.fa-columns:before { + content: "\f0db"; } + +.fa-comment:before { + content: "\f075"; } + +.fa-comment-alt:before { + content: "\f27a"; } + +.fa-comment-dollar:before { + content: "\f651"; } + +.fa-comment-dots:before { + content: "\f4ad"; } + +.fa-comment-medical:before { + content: "\f7f5"; } + +.fa-comment-slash:before { + content: "\f4b3"; } + +.fa-comments:before { + content: "\f086"; } + +.fa-comments-dollar:before { + content: "\f653"; } + +.fa-compact-disc:before { + content: "\f51f"; } + +.fa-compass:before { + content: "\f14e"; } + +.fa-compress:before { + content: "\f066"; } + +.fa-compress-alt:before { + content: "\f422"; } + +.fa-compress-arrows-alt:before { + content: "\f78c"; } + +.fa-concierge-bell:before { + content: "\f562"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-cookie:before { + content: "\f563"; } + +.fa-cookie-bite:before { + content: "\f564"; } + +.fa-copy:before { + content: "\f0c5"; } + +.fa-copyright:before { + content: "\f1f9"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-couch:before { + content: "\f4b8"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-credit-card:before { + content: "\f09d"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-crop:before { + content: "\f125"; } + +.fa-crop-alt:before { + content: "\f565"; } + +.fa-cross:before { + content: "\f654"; } + +.fa-crosshairs:before { + content: "\f05b"; } + +.fa-crow:before { + content: "\f520"; } + +.fa-crown:before { + content: "\f521"; } + +.fa-crutch:before { + content: "\f7f7"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-cube:before { + content: "\f1b2"; } + +.fa-cubes:before { + content: "\f1b3"; } + +.fa-cut:before { + content: "\f0c4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-database:before { + content: "\f1c0"; } + +.fa-deaf:before { + content: "\f2a4"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-democrat:before { + content: "\f747"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-desktop:before { + content: "\f108"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-dharmachakra:before { + content: "\f655"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-diagnoses:before { + content: "\f470"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-dice:before { + content: "\f522"; } + +.fa-dice-d20:before { + content: "\f6cf"; } + +.fa-dice-d6:before { + content: "\f6d1"; } + +.fa-dice-five:before { + content: "\f523"; } + +.fa-dice-four:before { + content: "\f524"; } + +.fa-dice-one:before { + content: "\f525"; } + +.fa-dice-six:before { + content: "\f526"; } + +.fa-dice-three:before { + content: "\f527"; } + +.fa-dice-two:before { + content: "\f528"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-digital-tachograph:before { + content: "\f566"; } + +.fa-directions:before { + content: "\f5eb"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-disease:before { + content: "\f7fa"; } + +.fa-divide:before { + content: "\f529"; } + +.fa-dizzy:before { + content: "\f567"; } + +.fa-dna:before { + content: "\f471"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-dog:before { + content: "\f6d3"; } + +.fa-dollar-sign:before { + content: "\f155"; } + +.fa-dolly:before { + content: "\f472"; } + +.fa-dolly-flatbed:before { + content: "\f474"; } + +.fa-donate:before { + content: "\f4b9"; } + +.fa-door-closed:before { + content: "\f52a"; } + +.fa-door-open:before { + content: "\f52b"; } + +.fa-dot-circle:before { + content: "\f192"; } + +.fa-dove:before { + content: "\f4ba"; } + +.fa-download:before { + content: "\f019"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-drafting-compass:before { + content: "\f568"; } + +.fa-dragon:before { + content: "\f6d5"; } + +.fa-draw-polygon:before { + content: "\f5ee"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-drum:before { + content: "\f569"; } + +.fa-drum-steelpan:before { + content: "\f56a"; } + +.fa-drumstick-bite:before { + content: "\f6d7"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-dumbbell:before { + content: "\f44b"; } + +.fa-dumpster:before { + content: "\f793"; } + +.fa-dumpster-fire:before { + content: "\f794"; } + +.fa-dungeon:before { + content: "\f6d9"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-edit:before { + content: "\f044"; } + +.fa-egg:before { + content: "\f7fb"; } + +.fa-eject:before { + content: "\f052"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-ellipsis-h:before { + content: "\f141"; } + +.fa-ellipsis-v:before { + content: "\f142"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envelope:before { + content: "\f0e0"; } + +.fa-envelope-open:before { + content: "\f2b6"; } + +.fa-envelope-open-text:before { + content: "\f658"; } + +.fa-envelope-square:before { + content: "\f199"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-equals:before { + content: "\f52c"; } + +.fa-eraser:before { + content: "\f12d"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-ethernet:before { + content: "\f796"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-euro-sign:before { + content: "\f153"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-exchange-alt:before { + content: "\f362"; } + +.fa-exclamation:before { + content: "\f12a"; } + +.fa-exclamation-circle:before { + content: "\f06a"; } + +.fa-exclamation-triangle:before { + content: "\f071"; } + +.fa-expand:before { + content: "\f065"; } + +.fa-expand-alt:before { + content: "\f424"; } + +.fa-expand-arrows-alt:before { + content: "\f31e"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-external-link-alt:before { + content: "\f35d"; } + +.fa-external-link-square-alt:before { + content: "\f360"; } + +.fa-eye:before { + content: "\f06e"; } + +.fa-eye-dropper:before { + content: "\f1fb"; } + +.fa-eye-slash:before { + content: "\f070"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-fan:before { + content: "\f863"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-fast-backward:before { + content: "\f049"; } + +.fa-fast-forward:before { + content: "\f050"; } + +.fa-faucet:before { + content: "\e005"; } + +.fa-fax:before { + content: "\f1ac"; } + +.fa-feather:before { + content: "\f52d"; } + +.fa-feather-alt:before { + content: "\f56b"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-female:before { + content: "\f182"; } + +.fa-fighter-jet:before { + content: "\f0fb"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-file:before { + content: "\f15b"; } + +.fa-file-alt:before { + content: "\f15c"; } + +.fa-file-archive:before { + content: "\f1c6"; } + +.fa-file-audio:before { + content: "\f1c7"; } + +.fa-file-code:before { + content: "\f1c9"; } + +.fa-file-contract:before { + content: "\f56c"; } + +.fa-file-csv:before { + content: "\f6dd"; } + +.fa-file-download:before { + content: "\f56d"; } + +.fa-file-excel:before { + content: "\f1c3"; } + +.fa-file-export:before { + content: "\f56e"; } + +.fa-file-image:before { + content: "\f1c5"; } + +.fa-file-import:before { + content: "\f56f"; } + +.fa-file-invoice:before { + content: "\f570"; } + +.fa-file-invoice-dollar:before { + content: "\f571"; } + +.fa-file-medical:before { + content: "\f477"; } + +.fa-file-medical-alt:before { + content: "\f478"; } + +.fa-file-pdf:before { + content: "\f1c1"; } + +.fa-file-powerpoint:before { + content: "\f1c4"; } + +.fa-file-prescription:before { + content: "\f572"; } + +.fa-file-signature:before { + content: "\f573"; } + +.fa-file-upload:before { + content: "\f574"; } + +.fa-file-video:before { + content: "\f1c8"; } + +.fa-file-word:before { + content: "\f1c2"; } + +.fa-fill:before { + content: "\f575"; } + +.fa-fill-drip:before { + content: "\f576"; } + +.fa-film:before { + content: "\f008"; } + +.fa-filter:before { + content: "\f0b0"; } + +.fa-fingerprint:before { + content: "\f577"; } + +.fa-fire:before { + content: "\f06d"; } + +.fa-fire-alt:before { + content: "\f7e4"; } + +.fa-fire-extinguisher:before { + content: "\f134"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-first-aid:before { + content: "\f479"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-fish:before { + content: "\f578"; } + +.fa-fist-raised:before { + content: "\f6de"; } + +.fa-flag:before { + content: "\f024"; } + +.fa-flag-checkered:before { + content: "\f11e"; } + +.fa-flag-usa:before { + content: "\f74d"; } + +.fa-flask:before { + content: "\f0c3"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-flushed:before { + content: "\f579"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-folder:before { + content: "\f07b"; } + +.fa-folder-minus:before { + content: "\f65d"; } + +.fa-folder-open:before { + content: "\f07c"; } + +.fa-folder-plus:before { + content: "\f65e"; } + +.fa-font:before { + content: "\f031"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-font-awesome-flag:before { + content: "\f425"; } + +.fa-font-awesome-logo-full:before { + content: "\f4e6"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-football-ball:before { + content: "\f44e"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-forward:before { + content: "\f04e"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-frog:before { + content: "\f52e"; } + +.fa-frown:before { + content: "\f119"; } + +.fa-frown-open:before { + content: "\f57a"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-funnel-dollar:before { + content: "\f662"; } + +.fa-futbol:before { + content: "\f1e3"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-gamepad:before { + content: "\f11b"; } + +.fa-gas-pump:before { + content: "\f52f"; } + +.fa-gavel:before { + content: "\f0e3"; } + +.fa-gem:before { + content: "\f3a5"; } + +.fa-genderless:before { + content: "\f22d"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-ghost:before { + content: "\f6e2"; } + +.fa-gift:before { + content: "\f06b"; } + +.fa-gifts:before { + content: "\f79c"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-glass-cheers:before { + content: "\f79f"; } + +.fa-glass-martini:before { + content: "\f000"; } + +.fa-glass-martini-alt:before { + content: "\f57b"; } + +.fa-glass-whiskey:before { + content: "\f7a0"; } + +.fa-glasses:before { + content: "\f530"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-globe:before { + content: "\f0ac"; } + +.fa-globe-africa:before { + content: "\f57c"; } + +.fa-globe-americas:before { + content: "\f57d"; } + +.fa-globe-asia:before { + content: "\f57e"; } + +.fa-globe-europe:before { + content: "\f7a2"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-golf-ball:before { + content: "\f450"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-gopuram:before { + content: "\f664"; } + +.fa-graduation-cap:before { + content: "\f19d"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-greater-than:before { + content: "\f531"; } + +.fa-greater-than-equal:before { + content: "\f532"; } + +.fa-grimace:before { + content: "\f57f"; } + +.fa-grin:before { + content: "\f580"; } + +.fa-grin-alt:before { + content: "\f581"; } + +.fa-grin-beam:before { + content: "\f582"; } + +.fa-grin-beam-sweat:before { + content: "\f583"; } + +.fa-grin-hearts:before { + content: "\f584"; } + +.fa-grin-squint:before { + content: "\f585"; } + +.fa-grin-squint-tears:before { + content: "\f586"; } + +.fa-grin-stars:before { + content: "\f587"; } + +.fa-grin-tears:before { + content: "\f588"; } + +.fa-grin-tongue:before { + content: "\f589"; } + +.fa-grin-tongue-squint:before { + content: "\f58a"; } + +.fa-grin-tongue-wink:before { + content: "\f58b"; } + +.fa-grin-wink:before { + content: "\f58c"; } + +.fa-grip-horizontal:before { + content: "\f58d"; } + +.fa-grip-lines:before { + content: "\f7a4"; } + +.fa-grip-lines-vertical:before { + content: "\f7a5"; } + +.fa-grip-vertical:before { + content: "\f58e"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-guitar:before { + content: "\f7a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-h-square:before { + content: "\f0fd"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-hamburger:before { + content: "\f805"; } + +.fa-hammer:before { + content: "\f6e3"; } + +.fa-hamsa:before { + content: "\f665"; } + +.fa-hand-holding:before { + content: "\f4bd"; } + +.fa-hand-holding-heart:before { + content: "\f4be"; } + +.fa-hand-holding-medical:before { + content: "\e05c"; } + +.fa-hand-holding-usd:before { + content: "\f4c0"; } + +.fa-hand-holding-water:before { + content: "\f4c1"; } + +.fa-hand-lizard:before { + content: "\f258"; } + +.fa-hand-middle-finger:before { + content: "\f806"; } + +.fa-hand-paper:before { + content: "\f256"; } + +.fa-hand-peace:before { + content: "\f25b"; } + +.fa-hand-point-down:before { + content: "\f0a7"; } + +.fa-hand-point-left:before { + content: "\f0a5"; } + +.fa-hand-point-right:before { + content: "\f0a4"; } + +.fa-hand-point-up:before { + content: "\f0a6"; } + +.fa-hand-pointer:before { + content: "\f25a"; } + +.fa-hand-rock:before { + content: "\f255"; } + +.fa-hand-scissors:before { + content: "\f257"; } + +.fa-hand-sparkles:before { + content: "\e05d"; } + +.fa-hand-spock:before { + content: "\f259"; } + +.fa-hands:before { + content: "\f4c2"; } + +.fa-hands-helping:before { + content: "\f4c4"; } + +.fa-hands-wash:before { + content: "\e05e"; } + +.fa-handshake:before { + content: "\f2b5"; } + +.fa-handshake-alt-slash:before { + content: "\e05f"; } + +.fa-handshake-slash:before { + content: "\e060"; } + +.fa-hanukiah:before { + content: "\f6e6"; } + +.fa-hard-hat:before { + content: "\f807"; } + +.fa-hashtag:before { + content: "\f292"; } + +.fa-hat-cowboy:before { + content: "\f8c0"; } + +.fa-hat-cowboy-side:before { + content: "\f8c1"; } + +.fa-hat-wizard:before { + content: "\f6e8"; } + +.fa-hdd:before { + content: "\f0a0"; } + +.fa-head-side-cough:before { + content: "\e061"; } + +.fa-head-side-cough-slash:before { + content: "\e062"; } + +.fa-head-side-mask:before { + content: "\e063"; } + +.fa-head-side-virus:before { + content: "\e064"; } + +.fa-heading:before { + content: "\f1dc"; } + +.fa-headphones:before { + content: "\f025"; } + +.fa-headphones-alt:before { + content: "\f58f"; } + +.fa-headset:before { + content: "\f590"; } + +.fa-heart:before { + content: "\f004"; } + +.fa-heart-broken:before { + content: "\f7a9"; } + +.fa-heartbeat:before { + content: "\f21e"; } + +.fa-helicopter:before { + content: "\f533"; } + +.fa-highlighter:before { + content: "\f591"; } + +.fa-hiking:before { + content: "\f6ec"; } + +.fa-hippo:before { + content: "\f6ed"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-history:before { + content: "\f1da"; } + +.fa-hockey-puck:before { + content: "\f453"; } + +.fa-holly-berry:before { + content: "\f7aa"; } + +.fa-home:before { + content: "\f015"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-horse:before { + content: "\f6f0"; } + +.fa-horse-head:before { + content: "\f7ab"; } + +.fa-hospital:before { + content: "\f0f8"; } + +.fa-hospital-alt:before { + content: "\f47d"; } + +.fa-hospital-symbol:before { + content: "\f47e"; } + +.fa-hospital-user:before { + content: "\f80d"; } + +.fa-hot-tub:before { + content: "\f593"; } + +.fa-hotdog:before { + content: "\f80f"; } + +.fa-hotel:before { + content: "\f594"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-hourglass:before { + content: "\f254"; } + +.fa-hourglass-end:before { + content: "\f253"; } + +.fa-hourglass-half:before { + content: "\f252"; } + +.fa-hourglass-start:before { + content: "\f251"; } + +.fa-house-damage:before { + content: "\f6f1"; } + +.fa-house-user:before { + content: "\e065"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-hryvnia:before { + content: "\f6f2"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-i-cursor:before { + content: "\f246"; } + +.fa-ice-cream:before { + content: "\f810"; } + +.fa-icicles:before { + content: "\f7ad"; } + +.fa-icons:before { + content: "\f86d"; } + +.fa-id-badge:before { + content: "\f2c1"; } + +.fa-id-card:before { + content: "\f2c2"; } + +.fa-id-card-alt:before { + content: "\f47f"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-igloo:before { + content: "\f7ae"; } + +.fa-image:before { + content: "\f03e"; } + +.fa-images:before { + content: "\f302"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-inbox:before { + content: "\f01c"; } + +.fa-indent:before { + content: "\f03c"; } + +.fa-industry:before { + content: "\f275"; } + +.fa-infinity:before { + content: "\f534"; } + +.fa-info:before { + content: "\f129"; } + +.fa-info-circle:before { + content: "\f05a"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-italic:before { + content: "\f033"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-jedi:before { + content: "\f669"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-joint:before { + content: "\f595"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-journal-whills:before { + content: "\f66a"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-kaaba:before { + content: "\f66b"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-key:before { + content: "\f084"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-keyboard:before { + content: "\f11c"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-khanda:before { + content: "\f66d"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-kiss:before { + content: "\f596"; } + +.fa-kiss-beam:before { + content: "\f597"; } + +.fa-kiss-wink-heart:before { + content: "\f598"; } + +.fa-kiwi-bird:before { + content: "\f535"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-landmark:before { + content: "\f66f"; } + +.fa-language:before { + content: "\f1ab"; } + +.fa-laptop:before { + content: "\f109"; } + +.fa-laptop-code:before { + content: "\f5fc"; } + +.fa-laptop-house:before { + content: "\e066"; } + +.fa-laptop-medical:before { + content: "\f812"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-laugh:before { + content: "\f599"; } + +.fa-laugh-beam:before { + content: "\f59a"; } + +.fa-laugh-squint:before { + content: "\f59b"; } + +.fa-laugh-wink:before { + content: "\f59c"; } + +.fa-layer-group:before { + content: "\f5fd"; } + +.fa-leaf:before { + content: "\f06c"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-lemon:before { + content: "\f094"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-less-than:before { + content: "\f536"; } + +.fa-less-than-equal:before { + content: "\f537"; } + +.fa-level-down-alt:before { + content: "\f3be"; } + +.fa-level-up-alt:before { + content: "\f3bf"; } + +.fa-life-ring:before { + content: "\f1cd"; } + +.fa-lightbulb:before { + content: "\f0eb"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-link:before { + content: "\f0c1"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-lira-sign:before { + content: "\f195"; } + +.fa-list:before { + content: "\f03a"; } + +.fa-list-alt:before { + content: "\f022"; } + +.fa-list-ol:before { + content: "\f0cb"; } + +.fa-list-ul:before { + content: "\f0ca"; } + +.fa-location-arrow:before { + content: "\f124"; } + +.fa-lock:before { + content: "\f023"; } + +.fa-lock-open:before { + content: "\f3c1"; } + +.fa-long-arrow-alt-down:before { + content: "\f309"; } + +.fa-long-arrow-alt-left:before { + content: "\f30a"; } + +.fa-long-arrow-alt-right:before { + content: "\f30b"; } + +.fa-long-arrow-alt-up:before { + content: "\f30c"; } + +.fa-low-vision:before { + content: "\f2a8"; } + +.fa-luggage-cart:before { + content: "\f59d"; } + +.fa-lungs:before { + content: "\f604"; } + +.fa-lungs-virus:before { + content: "\e067"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-magic:before { + content: "\f0d0"; } + +.fa-magnet:before { + content: "\f076"; } + +.fa-mail-bulk:before { + content: "\f674"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-male:before { + content: "\f183"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-map:before { + content: "\f279"; } + +.fa-map-marked:before { + content: "\f59f"; } + +.fa-map-marked-alt:before { + content: "\f5a0"; } + +.fa-map-marker:before { + content: "\f041"; } + +.fa-map-marker-alt:before { + content: "\f3c5"; } + +.fa-map-pin:before { + content: "\f276"; } + +.fa-map-signs:before { + content: "\f277"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-marker:before { + content: "\f5a1"; } + +.fa-mars:before { + content: "\f222"; } + +.fa-mars-double:before { + content: "\f227"; } + +.fa-mars-stroke:before { + content: "\f229"; } + +.fa-mars-stroke-h:before { + content: "\f22b"; } + +.fa-mars-stroke-v:before { + content: "\f22a"; } + +.fa-mask:before { + content: "\f6fa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-medal:before { + content: "\f5a2"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f3c7"; } + +.fa-medkit:before { + content: "\f0fa"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-meh:before { + content: "\f11a"; } + +.fa-meh-blank:before { + content: "\f5a4"; } + +.fa-meh-rolling-eyes:before { + content: "\f5a5"; } + +.fa-memory:before { + content: "\f538"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-menorah:before { + content: "\f676"; } + +.fa-mercury:before { + content: "\f223"; } + +.fa-meteor:before { + content: "\f753"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-microchip:before { + content: "\f2db"; } + +.fa-microphone:before { + content: "\f130"; } + +.fa-microphone-alt:before { + content: "\f3c9"; } + +.fa-microphone-alt-slash:before { + content: "\f539"; } + +.fa-microphone-slash:before { + content: "\f131"; } + +.fa-microscope:before { + content: "\f610"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-minus:before { + content: "\f068"; } + +.fa-minus-circle:before { + content: "\f056"; } + +.fa-minus-square:before { + content: "\f146"; } + +.fa-mitten:before { + content: "\f7b5"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-mobile:before { + content: "\f10b"; } + +.fa-mobile-alt:before { + content: "\f3cd"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-money-bill:before { + content: "\f0d6"; } + +.fa-money-bill-alt:before { + content: "\f3d1"; } + +.fa-money-bill-wave:before { + content: "\f53a"; } + +.fa-money-bill-wave-alt:before { + content: "\f53b"; } + +.fa-money-check:before { + content: "\f53c"; } + +.fa-money-check-alt:before { + content: "\f53d"; } + +.fa-monument:before { + content: "\f5a6"; } + +.fa-moon:before { + content: "\f186"; } + +.fa-mortar-pestle:before { + content: "\f5a7"; } + +.fa-mosque:before { + content: "\f678"; } + +.fa-motorcycle:before { + content: "\f21c"; } + +.fa-mountain:before { + content: "\f6fc"; } + +.fa-mouse:before { + content: "\f8cc"; } + +.fa-mouse-pointer:before { + content: "\f245"; } + +.fa-mug-hot:before { + content: "\f7b6"; } + +.fa-music:before { + content: "\f001"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-network-wired:before { + content: "\f6ff"; } + +.fa-neuter:before { + content: "\f22c"; } + +.fa-newspaper:before { + content: "\f1ea"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-node:before { + content: "\f419"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-not-equal:before { + content: "\f53e"; } + +.fa-notes-medical:before { + content: "\f481"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-object-group:before { + content: "\f247"; } + +.fa-object-ungroup:before { + content: "\f248"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-oil-can:before { + content: "\f613"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-om:before { + content: "\f679"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-otter:before { + content: "\f700"; } + +.fa-outdent:before { + content: "\f03b"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-pager:before { + content: "\f815"; } + +.fa-paint-brush:before { + content: "\f1fc"; } + +.fa-paint-roller:before { + content: "\f5aa"; } + +.fa-palette:before { + content: "\f53f"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-pallet:before { + content: "\f482"; } + +.fa-paper-plane:before { + content: "\f1d8"; } + +.fa-paperclip:before { + content: "\f0c6"; } + +.fa-parachute-box:before { + content: "\f4cd"; } + +.fa-paragraph:before { + content: "\f1dd"; } + +.fa-parking:before { + content: "\f540"; } + +.fa-passport:before { + content: "\f5ab"; } + +.fa-pastafarianism:before { + content: "\f67b"; } + +.fa-paste:before { + content: "\f0ea"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-pause:before { + content: "\f04c"; } + +.fa-pause-circle:before { + content: "\f28b"; } + +.fa-paw:before { + content: "\f1b0"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-peace:before { + content: "\f67c"; } + +.fa-pen:before { + content: "\f304"; } + +.fa-pen-alt:before { + content: "\f305"; } + +.fa-pen-fancy:before { + content: "\f5ac"; } + +.fa-pen-nib:before { + content: "\f5ad"; } + +.fa-pen-square:before { + content: "\f14b"; } + +.fa-pencil-alt:before { + content: "\f303"; } + +.fa-pencil-ruler:before { + content: "\f5ae"; } + +.fa-penny-arcade:before { + content: "\f704"; } + +.fa-people-arrows:before { + content: "\e068"; } + +.fa-people-carry:before { + content: "\f4ce"; } + +.fa-pepper-hot:before { + content: "\f816"; } + +.fa-percent:before { + content: "\f295"; } + +.fa-percentage:before { + content: "\f541"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-person-booth:before { + content: "\f756"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-phone:before { + content: "\f095"; } + +.fa-phone-alt:before { + content: "\f879"; } + +.fa-phone-slash:before { + content: "\f3dd"; } + +.fa-phone-square:before { + content: "\f098"; } + +.fa-phone-square-alt:before { + content: "\f87b"; } + +.fa-phone-volume:before { + content: "\f2a0"; } + +.fa-photo-video:before { + content: "\f87c"; } + +.fa-php:before { + content: "\f457"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-piggy-bank:before { + content: "\f4d3"; } + +.fa-pills:before { + content: "\f484"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-pizza-slice:before { + content: "\f818"; } + +.fa-place-of-worship:before { + content: "\f67f"; } + +.fa-plane:before { + content: "\f072"; } + +.fa-plane-arrival:before { + content: "\f5af"; } + +.fa-plane-departure:before { + content: "\f5b0"; } + +.fa-plane-slash:before { + content: "\e069"; } + +.fa-play:before { + content: "\f04b"; } + +.fa-play-circle:before { + content: "\f144"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-plug:before { + content: "\f1e6"; } + +.fa-plus:before { + content: "\f067"; } + +.fa-plus-circle:before { + content: "\f055"; } + +.fa-plus-square:before { + content: "\f0fe"; } + +.fa-podcast:before { + content: "\f2ce"; } + +.fa-poll:before { + content: "\f681"; } + +.fa-poll-h:before { + content: "\f682"; } + +.fa-poo:before { + content: "\f2fe"; } + +.fa-poo-storm:before { + content: "\f75a"; } + +.fa-poop:before { + content: "\f619"; } + +.fa-portrait:before { + content: "\f3e0"; } + +.fa-pound-sign:before { + content: "\f154"; } + +.fa-power-off:before { + content: "\f011"; } + +.fa-pray:before { + content: "\f683"; } + +.fa-praying-hands:before { + content: "\f684"; } + +.fa-prescription:before { + content: "\f5b1"; } + +.fa-prescription-bottle:before { + content: "\f485"; } + +.fa-prescription-bottle-alt:before { + content: "\f486"; } + +.fa-print:before { + content: "\f02f"; } + +.fa-procedures:before { + content: "\f487"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-project-diagram:before { + content: "\f542"; } + +.fa-pump-medical:before { + content: "\e06a"; } + +.fa-pump-soap:before { + content: "\e06b"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-puzzle-piece:before { + content: "\f12e"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-qrcode:before { + content: "\f029"; } + +.fa-question:before { + content: "\f128"; } + +.fa-question-circle:before { + content: "\f059"; } + +.fa-quidditch:before { + content: "\f458"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-quote-left:before { + content: "\f10d"; } + +.fa-quote-right:before { + content: "\f10e"; } + +.fa-quran:before { + content: "\f687"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-radiation:before { + content: "\f7b9"; } + +.fa-radiation-alt:before { + content: "\f7ba"; } + +.fa-rainbow:before { + content: "\f75b"; } + +.fa-random:before { + content: "\f074"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-receipt:before { + content: "\f543"; } + +.fa-record-vinyl:before { + content: "\f8d9"; } + +.fa-recycle:before { + content: "\f1b8"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-redo:before { + content: "\f01e"; } + +.fa-redo-alt:before { + content: "\f2f9"; } + +.fa-registered:before { + content: "\f25d"; } + +.fa-remove-format:before { + content: "\f87d"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-reply:before { + content: "\f3e5"; } + +.fa-reply-all:before { + content: "\f122"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-republican:before { + content: "\f75e"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-restroom:before { + content: "\f7bd"; } + +.fa-retweet:before { + content: "\f079"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-ribbon:before { + content: "\f4d6"; } + +.fa-ring:before { + content: "\f70b"; } + +.fa-road:before { + content: "\f018"; } + +.fa-robot:before { + content: "\f544"; } + +.fa-rocket:before { + content: "\f135"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-route:before { + content: "\f4d7"; } + +.fa-rss:before { + content: "\f09e"; } + +.fa-rss-square:before { + content: "\f143"; } + +.fa-ruble-sign:before { + content: "\f158"; } + +.fa-ruler:before { + content: "\f545"; } + +.fa-ruler-combined:before { + content: "\f546"; } + +.fa-ruler-horizontal:before { + content: "\f547"; } + +.fa-ruler-vertical:before { + content: "\f548"; } + +.fa-running:before { + content: "\f70c"; } + +.fa-rupee-sign:before { + content: "\f156"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-sad-cry:before { + content: "\f5b3"; } + +.fa-sad-tear:before { + content: "\f5b4"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-satellite:before { + content: "\f7bf"; } + +.fa-satellite-dish:before { + content: "\f7c0"; } + +.fa-save:before { + content: "\f0c7"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-school:before { + content: "\f549"; } + +.fa-screwdriver:before { + content: "\f54a"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-scroll:before { + content: "\f70e"; } + +.fa-sd-card:before { + content: "\f7c2"; } + +.fa-search:before { + content: "\f002"; } + +.fa-search-dollar:before { + content: "\f688"; } + +.fa-search-location:before { + content: "\f689"; } + +.fa-search-minus:before { + content: "\f010"; } + +.fa-search-plus:before { + content: "\f00e"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-seedling:before { + content: "\f4d8"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-server:before { + content: "\f233"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-shapes:before { + content: "\f61f"; } + +.fa-share:before { + content: "\f064"; } + +.fa-share-alt:before { + content: "\f1e0"; } + +.fa-share-alt-square:before { + content: "\f1e1"; } + +.fa-share-square:before { + content: "\f14d"; } + +.fa-shekel-sign:before { + content: "\f20b"; } + +.fa-shield-alt:before { + content: "\f3ed"; } + +.fa-shield-virus:before { + content: "\e06c"; } + +.fa-ship:before { + content: "\f21a"; } + +.fa-shipping-fast:before { + content: "\f48b"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-shoe-prints:before { + content: "\f54b"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-shopping-bag:before { + content: "\f290"; } + +.fa-shopping-basket:before { + content: "\f291"; } + +.fa-shopping-cart:before { + content: "\f07a"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-shower:before { + content: "\f2cc"; } + +.fa-shuttle-van:before { + content: "\f5b6"; } + +.fa-sign:before { + content: "\f4d9"; } + +.fa-sign-in-alt:before { + content: "\f2f6"; } + +.fa-sign-language:before { + content: "\f2a7"; } + +.fa-sign-out-alt:before { + content: "\f2f5"; } + +.fa-signal:before { + content: "\f012"; } + +.fa-signature:before { + content: "\f5b7"; } + +.fa-sim-card:before { + content: "\f7c4"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-sink:before { + content: "\e06d"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-sitemap:before { + content: "\f0e8"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-skating:before { + content: "\f7c5"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-skiing:before { + content: "\f7c9"; } + +.fa-skiing-nordic:before { + content: "\f7ca"; } + +.fa-skull:before { + content: "\f54c"; } + +.fa-skull-crossbones:before { + content: "\f714"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f3ef"; } + +.fa-slash:before { + content: "\f715"; } + +.fa-sleigh:before { + content: "\f7cc"; } + +.fa-sliders-h:before { + content: "\f1de"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-smile:before { + content: "\f118"; } + +.fa-smile-beam:before { + content: "\f5b8"; } + +.fa-smile-wink:before { + content: "\f4da"; } + +.fa-smog:before { + content: "\f75f"; } + +.fa-smoking:before { + content: "\f48d"; } + +.fa-smoking-ban:before { + content: "\f54d"; } + +.fa-sms:before { + content: "\f7cd"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ac"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-snowboarding:before { + content: "\f7ce"; } + +.fa-snowflake:before { + content: "\f2dc"; } + +.fa-snowman:before { + content: "\f7d0"; } + +.fa-snowplow:before { + content: "\f7d2"; } + +.fa-soap:before { + content: "\e06e"; } + +.fa-socks:before { + content: "\f696"; } + +.fa-solar-panel:before { + content: "\f5ba"; } + +.fa-sort:before { + content: "\f0dc"; } + +.fa-sort-alpha-down:before { + content: "\f15d"; } + +.fa-sort-alpha-down-alt:before { + content: "\f881"; } + +.fa-sort-alpha-up:before { + content: "\f15e"; } + +.fa-sort-alpha-up-alt:before { + content: "\f882"; } + +.fa-sort-amount-down:before { + content: "\f160"; } + +.fa-sort-amount-down-alt:before { + content: "\f884"; } + +.fa-sort-amount-up:before { + content: "\f161"; } + +.fa-sort-amount-up-alt:before { + content: "\f885"; } + +.fa-sort-down:before { + content: "\f0dd"; } + +.fa-sort-numeric-down:before { + content: "\f162"; } + +.fa-sort-numeric-down-alt:before { + content: "\f886"; } + +.fa-sort-numeric-up:before { + content: "\f163"; } + +.fa-sort-numeric-up-alt:before { + content: "\f887"; } + +.fa-sort-up:before { + content: "\f0de"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-spa:before { + content: "\f5bb"; } + +.fa-space-shuttle:before { + content: "\f197"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-spell-check:before { + content: "\f891"; } + +.fa-spider:before { + content: "\f717"; } + +.fa-spinner:before { + content: "\f110"; } + +.fa-splotch:before { + content: "\f5bc"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-spray-can:before { + content: "\f5bd"; } + +.fa-square:before { + content: "\f0c8"; } + +.fa-square-full:before { + content: "\f45c"; } + +.fa-square-root-alt:before { + content: "\f698"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-stamp:before { + content: "\f5bf"; } + +.fa-star:before { + content: "\f005"; } + +.fa-star-and-crescent:before { + content: "\f699"; } + +.fa-star-half:before { + content: "\f089"; } + +.fa-star-half-alt:before { + content: "\f5c0"; } + +.fa-star-of-david:before { + content: "\f69a"; } + +.fa-star-of-life:before { + content: "\f621"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } + +.fa-step-backward:before { + content: "\f048"; } + +.fa-step-forward:before { + content: "\f051"; } + +.fa-stethoscope:before { + content: "\f0f1"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-sticky-note:before { + content: "\f249"; } + +.fa-stop:before { + content: "\f04d"; } + +.fa-stop-circle:before { + content: "\f28d"; } + +.fa-stopwatch:before { + content: "\f2f2"; } + +.fa-stopwatch-20:before { + content: "\e06f"; } + +.fa-store:before { + content: "\f54e"; } + +.fa-store-alt:before { + content: "\f54f"; } + +.fa-store-alt-slash:before { + content: "\e070"; } + +.fa-store-slash:before { + content: "\e071"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-stream:before { + content: "\f550"; } + +.fa-street-view:before { + content: "\f21d"; } + +.fa-strikethrough:before { + content: "\f0cc"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-stroopwafel:before { + content: "\f551"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-subscript:before { + content: "\f12c"; } + +.fa-subway:before { + content: "\f239"; } + +.fa-suitcase:before { + content: "\f0f2"; } + +.fa-suitcase-rolling:before { + content: "\f5c1"; } + +.fa-sun:before { + content: "\f185"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-superscript:before { + content: "\f12b"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-surprise:before { + content: "\f5c2"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-swatchbook:before { + content: "\f5c3"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-swimmer:before { + content: "\f5c4"; } + +.fa-swimming-pool:before { + content: "\f5c5"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-synagogue:before { + content: "\f69b"; } + +.fa-sync:before { + content: "\f021"; } + +.fa-sync-alt:before { + content: "\f2f1"; } + +.fa-syringe:before { + content: "\f48e"; } + +.fa-table:before { + content: "\f0ce"; } + +.fa-table-tennis:before { + content: "\f45d"; } + +.fa-tablet:before { + content: "\f10a"; } + +.fa-tablet-alt:before { + content: "\f3fa"; } + +.fa-tablets:before { + content: "\f490"; } + +.fa-tachometer-alt:before { + content: "\f3fd"; } + +.fa-tag:before { + content: "\f02b"; } + +.fa-tags:before { + content: "\f02c"; } + +.fa-tape:before { + content: "\f4db"; } + +.fa-tasks:before { + content: "\f0ae"; } + +.fa-taxi:before { + content: "\f1ba"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-teeth:before { + content: "\f62e"; } + +.fa-teeth-open:before { + content: "\f62f"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f3fe"; } + +.fa-temperature-high:before { + content: "\f769"; } + +.fa-temperature-low:before { + content: "\f76b"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-tenge:before { + content: "\f7d7"; } + +.fa-terminal:before { + content: "\f120"; } + +.fa-text-height:before { + content: "\f034"; } + +.fa-text-width:before { + content: "\f035"; } + +.fa-th:before { + content: "\f00a"; } + +.fa-th-large:before { + content: "\f009"; } + +.fa-th-list:before { + content: "\f00b"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-theater-masks:before { + content: "\f630"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-thermometer:before { + content: "\f491"; } + +.fa-thermometer-empty:before { + content: "\f2cb"; } + +.fa-thermometer-full:before { + content: "\f2c7"; } + +.fa-thermometer-half:before { + content: "\f2c9"; } + +.fa-thermometer-quarter:before { + content: "\f2ca"; } + +.fa-thermometer-three-quarters:before { + content: "\f2c8"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-thumbs-down:before { + content: "\f165"; } + +.fa-thumbs-up:before { + content: "\f164"; } + +.fa-thumbtack:before { + content: "\f08d"; } + +.fa-ticket-alt:before { + content: "\f3ff"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-times:before { + content: "\f00d"; } + +.fa-times-circle:before { + content: "\f057"; } + +.fa-tint:before { + content: "\f043"; } + +.fa-tint-slash:before { + content: "\f5c7"; } + +.fa-tired:before { + content: "\f5c8"; } + +.fa-toggle-off:before { + content: "\f204"; } + +.fa-toggle-on:before { + content: "\f205"; } + +.fa-toilet:before { + content: "\f7d8"; } + +.fa-toilet-paper:before { + content: "\f71e"; } + +.fa-toilet-paper-slash:before { + content: "\e072"; } + +.fa-toolbox:before { + content: "\f552"; } + +.fa-tools:before { + content: "\f7d9"; } + +.fa-tooth:before { + content: "\f5c9"; } + +.fa-torah:before { + content: "\f6a0"; } + +.fa-torii-gate:before { + content: "\f6a1"; } + +.fa-tractor:before { + content: "\f722"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-trademark:before { + content: "\f25c"; } + +.fa-traffic-light:before { + content: "\f637"; } + +.fa-trailer:before { + content: "\e041"; } + +.fa-train:before { + content: "\f238"; } + +.fa-tram:before { + content: "\f7da"; } + +.fa-transgender:before { + content: "\f224"; } + +.fa-transgender-alt:before { + content: "\f225"; } + +.fa-trash:before { + content: "\f1f8"; } + +.fa-trash-alt:before { + content: "\f2ed"; } + +.fa-trash-restore:before { + content: "\f829"; } + +.fa-trash-restore-alt:before { + content: "\f82a"; } + +.fa-tree:before { + content: "\f1bb"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-tripadvisor:before { + content: "\f262"; } + +.fa-trophy:before { + content: "\f091"; } + +.fa-truck:before { + content: "\f0d1"; } + +.fa-truck-loading:before { + content: "\f4de"; } + +.fa-truck-monster:before { + content: "\f63b"; } + +.fa-truck-moving:before { + content: "\f4df"; } + +.fa-truck-pickup:before { + content: "\f63c"; } + +.fa-tshirt:before { + content: "\f553"; } + +.fa-tty:before { + content: "\f1e4"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-tv:before { + content: "\f26c"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-umbrella:before { + content: "\f0e9"; } + +.fa-umbrella-beach:before { + content: "\f5ca"; } + +.fa-underline:before { + content: "\f0cd"; } + +.fa-undo:before { + content: "\f0e2"; } + +.fa-undo-alt:before { + content: "\f2ea"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-universal-access:before { + content: "\f29a"; } + +.fa-university:before { + content: "\f19c"; } + +.fa-unlink:before { + content: "\f127"; } + +.fa-unlock:before { + content: "\f09c"; } + +.fa-unlock-alt:before { + content: "\f13e"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-upload:before { + content: "\f093"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-user:before { + content: "\f007"; } + +.fa-user-alt:before { + content: "\f406"; } + +.fa-user-alt-slash:before { + content: "\f4fa"; } + +.fa-user-astronaut:before { + content: "\f4fb"; } + +.fa-user-check:before { + content: "\f4fc"; } + +.fa-user-circle:before { + content: "\f2bd"; } + +.fa-user-clock:before { + content: "\f4fd"; } + +.fa-user-cog:before { + content: "\f4fe"; } + +.fa-user-edit:before { + content: "\f4ff"; } + +.fa-user-friends:before { + content: "\f500"; } + +.fa-user-graduate:before { + content: "\f501"; } + +.fa-user-injured:before { + content: "\f728"; } + +.fa-user-lock:before { + content: "\f502"; } + +.fa-user-md:before { + content: "\f0f0"; } + +.fa-user-minus:before { + content: "\f503"; } + +.fa-user-ninja:before { + content: "\f504"; } + +.fa-user-nurse:before { + content: "\f82f"; } + +.fa-user-plus:before { + content: "\f234"; } + +.fa-user-secret:before { + content: "\f21b"; } + +.fa-user-shield:before { + content: "\f505"; } + +.fa-user-slash:before { + content: "\f506"; } + +.fa-user-tag:before { + content: "\f507"; } + +.fa-user-tie:before { + content: "\f508"; } + +.fa-user-times:before { + content: "\f235"; } + +.fa-users:before { + content: "\f0c0"; } + +.fa-users-cog:before { + content: "\f509"; } + +.fa-users-slash:before { + content: "\e073"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-utensil-spoon:before { + content: "\f2e5"; } + +.fa-utensils:before { + content: "\f2e7"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-vector-square:before { + content: "\f5cb"; } + +.fa-venus:before { + content: "\f221"; } + +.fa-venus-double:before { + content: "\f226"; } + +.fa-venus-mars:before { + content: "\f228"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-vial:before { + content: "\f492"; } + +.fa-vials:before { + content: "\f493"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-video:before { + content: "\f03d"; } + +.fa-video-slash:before { + content: "\f4e2"; } + +.fa-vihara:before { + content: "\f6a7"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-virus:before { + content: "\e074"; } + +.fa-virus-slash:before { + content: "\e075"; } + +.fa-viruses:before { + content: "\e076"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-voicemail:before { + content: "\f897"; } + +.fa-volleyball-ball:before { + content: "\f45f"; } + +.fa-volume-down:before { + content: "\f027"; } + +.fa-volume-mute:before { + content: "\f6a9"; } + +.fa-volume-off:before { + content: "\f026"; } + +.fa-volume-up:before { + content: "\f028"; } + +.fa-vote-yea:before { + content: "\f772"; } + +.fa-vr-cardboard:before { + content: "\f729"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-walking:before { + content: "\f554"; } + +.fa-wallet:before { + content: "\f555"; } + +.fa-warehouse:before { + content: "\f494"; } + +.fa-water:before { + content: "\f773"; } + +.fa-wave-square:before { + content: "\f83e"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-weight:before { + content: "\f496"; } + +.fa-weight-hanging:before { + content: "\f5cd"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-wheelchair:before { + content: "\f193"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-wifi:before { + content: "\f1eb"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wind:before { + content: "\f72e"; } + +.fa-window-close:before { + content: "\f410"; } + +.fa-window-maximize:before { + content: "\f2d0"; } + +.fa-window-minimize:before { + content: "\f2d1"; } + +.fa-window-restore:before { + content: "\f2d2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wine-bottle:before { + content: "\f72f"; } + +.fa-wine-glass:before { + content: "\f4e3"; } + +.fa-wine-glass-alt:before { + content: "\f5ce"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-won-sign:before { + content: "\f159"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-wrench:before { + content: "\f0ad"; } + +.fa-x-ray:before { + content: "\f497"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-yen-sign:before { + content: "\f157"; } + +.fa-yin-yang:before { + content: "\f6ad"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.sr-only { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; } + +.sr-only-focusable:active, .sr-only-focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; } +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.eot"); + src: url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.woff") format("woff"), url("../webfonts/fa-brands-400.ttf") format("truetype"), url("../webfonts/fa-brands-400.svg#fontawesome") format("svg"); } + +.fab { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } +@font-face { + font-family: 'Font Awesome 5 Free'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-regular-400.eot"); + src: url("../webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.woff") format("woff"), url("../webfonts/fa-regular-400.ttf") format("truetype"), url("../webfonts/fa-regular-400.svg#fontawesome") format("svg"); } + +.far { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } +@font-face { + font-family: 'Font Awesome 5 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.eot"); + src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.woff") format("woff"), url("../webfonts/fa-solid-900.ttf") format("truetype"), url("../webfonts/fa-solid-900.svg#fontawesome") format("svg"); } + +.fa, +.fas { + font-family: 'Font Awesome 5 Free'; + font-weight: 900; } diff --git a/theme/css/bootstrap.min.css b/theme/css/bootstrap.min.css new file mode 100644 index 0000000..d92e8af --- /dev/null +++ b/theme/css/bootstrap.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:var(--cyan);text-decoration:none;background-color:transparent}a:hover{color:var(--pink);text-decoration:none}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:0s .6s opacity}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/theme/css/oldstyle.css b/theme/css/oldstyle.css new file mode 100644 index 0000000..f9938fa --- /dev/null +++ b/theme/css/oldstyle.css @@ -0,0 +1,48 @@ +/* Restore colors as they were before adding Boostwatch support + * https://github.com/nairobilug/pelican-alchemy/pull/79 + * + * Add THEME_CSS_OVERRIDES = ['theme/css/oldstyle.css'] + * to your pelicanconf.py to enable this stylesheet */ + +::selection { + background: #0085a1; + color: #fff; +} + +body { + background-color: #f5f5f5; +} + +a { + color: #333; +} + +a:focus, +a:hover { + color: #0085a1; +} + +blockquote { + color: #818a91; + opacity: inherit; +} + +.header { + border-bottom: 1px solid rgba(0,0,0,.1) +} + +.main { + background-color: #fff; +} + +.footer { + border-top: 1px solid rgba(0,0,0,.1) +} + +.highlight pre { + border: 1px solid rgba(0,0,0,.1) +} + +.pagination .page-link { + color: #333; +} diff --git a/theme/css/pygments/algol.min.css b/theme/css/pygments/algol.min.css new file mode 100644 index 0000000..58fbfa6 --- /dev/null +++ b/theme/css/pygments/algol.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#fff}.highlight pre .c{color:#888;font-style:italic}.highlight pre .err{border:1px solid #f00}.highlight pre .k{font-weight:bold;text-decoration:underline}.highlight pre .ch{color:#888;font-style:italic}.highlight pre .cm{color:#888;font-style:italic}.highlight pre .cp{color:#888;font-weight:bold}.highlight pre .cpf{color:#888;font-style:italic}.highlight pre .c1{color:#888;font-style:italic}.highlight pre .cs{color:#888;font-weight:bold}.highlight pre .kc{font-weight:bold;text-decoration:underline}.highlight pre .kd{font-weight:bold;font-style:italic;text-decoration:underline}.highlight pre .kn{font-weight:bold;text-decoration:underline}.highlight pre .kp{font-weight:bold;text-decoration:underline}.highlight pre .kr{font-weight:bold;text-decoration:underline}.highlight pre .kt{font-weight:bold;text-decoration:underline}.highlight pre .s{color:#666;font-style:italic}.highlight pre .nb{font-weight:bold;font-style:italic}.highlight pre .nc{color:#666;font-weight:bold;font-style:italic}.highlight pre .no{color:#666;font-weight:bold;font-style:italic}.highlight pre .nf{color:#666;font-weight:bold;font-style:italic}.highlight pre .nn{color:#666;font-weight:bold;font-style:italic}.highlight pre .nv{color:#666;font-weight:bold;font-style:italic}.highlight pre .ow{font-weight:bold}.highlight pre .sb{color:#666;font-style:italic}.highlight pre .sc{color:#666;font-style:italic}.highlight pre .sd{color:#666;font-style:italic}.highlight pre .s2{color:#666;font-style:italic}.highlight pre .se{color:#666;font-style:italic}.highlight pre .sh{color:#666;font-style:italic}.highlight pre .si{color:#666;font-style:italic}.highlight pre .sx{color:#666;font-style:italic}.highlight pre .sr{color:#666;font-style:italic}.highlight pre .s1{color:#666;font-style:italic}.highlight pre .ss{color:#666;font-style:italic}.highlight pre .bp{font-weight:bold;font-style:italic}.highlight pre .vc{color:#666;font-weight:bold;font-style:italic}.highlight pre .vg{color:#666;font-weight:bold;font-style:italic}.highlight pre .vi{color:#666;font-weight:bold;font-style:italic} \ No newline at end of file diff --git a/theme/css/pygments/algol_nu.min.css b/theme/css/pygments/algol_nu.min.css new file mode 100644 index 0000000..73fedcb --- /dev/null +++ b/theme/css/pygments/algol_nu.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#fff}.highlight pre .c{color:#888;font-style:italic}.highlight pre .err{border:1px solid #f00}.highlight pre .k{font-weight:bold}.highlight pre .ch{color:#888;font-style:italic}.highlight pre .cm{color:#888;font-style:italic}.highlight pre .cp{color:#888;font-weight:bold}.highlight pre .cpf{color:#888;font-style:italic}.highlight pre .c1{color:#888;font-style:italic}.highlight pre .cs{color:#888;font-weight:bold}.highlight pre .kc{font-weight:bold}.highlight pre .kd{font-weight:bold;font-style:italic}.highlight pre .kn{font-weight:bold}.highlight pre .kp{font-weight:bold}.highlight pre .kr{font-weight:bold}.highlight pre .kt{font-weight:bold}.highlight pre .s{color:#666;font-style:italic}.highlight pre .nb{font-weight:bold;font-style:italic}.highlight pre .nc{color:#666;font-weight:bold;font-style:italic}.highlight pre .no{color:#666;font-weight:bold;font-style:italic}.highlight pre .nf{color:#666;font-weight:bold;font-style:italic}.highlight pre .nn{color:#666;font-weight:bold;font-style:italic}.highlight pre .nv{color:#666;font-weight:bold;font-style:italic}.highlight pre .ow{font-weight:bold}.highlight pre .sb{color:#666;font-style:italic}.highlight pre .sc{color:#666;font-style:italic}.highlight pre .sd{color:#666;font-style:italic}.highlight pre .s2{color:#666;font-style:italic}.highlight pre .se{color:#666;font-style:italic}.highlight pre .sh{color:#666;font-style:italic}.highlight pre .si{color:#666;font-style:italic}.highlight pre .sx{color:#666;font-style:italic}.highlight pre .sr{color:#666;font-style:italic}.highlight pre .s1{color:#666;font-style:italic}.highlight pre .ss{color:#666;font-style:italic}.highlight pre .bp{font-weight:bold;font-style:italic}.highlight pre .vc{color:#666;font-weight:bold;font-style:italic}.highlight pre .vg{color:#666;font-weight:bold;font-style:italic}.highlight pre .vi{color:#666;font-weight:bold;font-style:italic} \ No newline at end of file diff --git a/theme/css/pygments/autumn.min.css b/theme/css/pygments/autumn.min.css new file mode 100644 index 0000000..cf4ad84 --- /dev/null +++ b/theme/css/pygments/autumn.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#fff}.highlight pre .c{color:#aaa;font-style:italic}.highlight pre .err{color:#f00;background-color:#faa}.highlight pre .k{color:#00a}.highlight pre .ch{color:#aaa;font-style:italic}.highlight pre .cm{color:#aaa;font-style:italic}.highlight pre .cp{color:#4c8317}.highlight pre .cpf{color:#aaa;font-style:italic}.highlight pre .c1{color:#aaa;font-style:italic}.highlight pre .cs{color:#00a;font-style:italic}.highlight pre .gd{color:#a00}.highlight pre .ge{font-style:italic}.highlight pre .gr{color:#a00}.highlight pre .gh{color:#000080;font-weight:bold}.highlight pre .gi{color:#0a0}.highlight pre .go{color:#888}.highlight pre .gp{color:#555}.highlight pre .gs{font-weight:bold}.highlight pre .gu{color:#800080;font-weight:bold}.highlight pre .gt{color:#a00}.highlight pre .kc{color:#00a}.highlight pre .kd{color:#00a}.highlight pre .kn{color:#00a}.highlight pre .kp{color:#00a}.highlight pre .kr{color:#00a}.highlight pre .kt{color:#0aa}.highlight pre .m{color:#099}.highlight pre .s{color:#a50}.highlight pre .na{color:#1e90ff}.highlight pre .nb{color:#0aa}.highlight pre .nc{color:#0a0;text-decoration:underline}.highlight pre .no{color:#a00}.highlight pre .nd{color:#888}.highlight pre .ni{color:#800;font-weight:bold}.highlight pre .nf{color:#0a0}.highlight pre .nn{color:#0aa;text-decoration:underline}.highlight pre .nt{color:#1e90ff;font-weight:bold}.highlight pre .nv{color:#a00}.highlight pre .ow{color:#00a}.highlight pre .w{color:#bbb}.highlight pre .mb{color:#099}.highlight pre .mf{color:#099}.highlight pre .mh{color:#099}.highlight pre .mi{color:#099}.highlight pre .mo{color:#099}.highlight pre .sb{color:#a50}.highlight pre .sc{color:#a50}.highlight pre .sd{color:#a50}.highlight pre .s2{color:#a50}.highlight pre .se{color:#a50}.highlight pre .sh{color:#a50}.highlight pre .si{color:#a50}.highlight pre .sx{color:#a50}.highlight pre .sr{color:#099}.highlight pre .s1{color:#a50}.highlight pre .ss{color:#00a}.highlight pre .bp{color:#0aa}.highlight pre .vc{color:#a00}.highlight pre .vg{color:#a00}.highlight pre .vi{color:#a00}.highlight pre .il{color:#099} \ No newline at end of file diff --git a/theme/css/pygments/borland.min.css b/theme/css/pygments/borland.min.css new file mode 100644 index 0000000..e511e91 --- /dev/null +++ b/theme/css/pygments/borland.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#fff}.highlight pre .c{color:#080;font-style:italic}.highlight pre .err{color:#a61717;background-color:#e3d2d2}.highlight pre .k{color:#000080;font-weight:bold}.highlight pre .ch{color:#080;font-style:italic}.highlight pre .cm{color:#080;font-style:italic}.highlight pre .cp{color:#008080}.highlight pre .cpf{color:#080;font-style:italic}.highlight pre .c1{color:#080;font-style:italic}.highlight pre .cs{color:#080;font-weight:bold}.highlight pre .gd{color:#000;background-color:#fdd}.highlight pre .ge{font-style:italic}.highlight pre .gr{color:#a00}.highlight pre .gh{color:#999}.highlight pre .gi{color:#000;background-color:#dfd}.highlight pre .go{color:#888}.highlight pre .gp{color:#555}.highlight pre .gs{font-weight:bold}.highlight pre .gu{color:#aaa}.highlight pre .gt{color:#a00}.highlight pre .kc{color:#000080;font-weight:bold}.highlight pre .kd{color:#000080;font-weight:bold}.highlight pre .kn{color:#000080;font-weight:bold}.highlight pre .kp{color:#000080;font-weight:bold}.highlight pre .kr{color:#000080;font-weight:bold}.highlight pre .kt{color:#000080;font-weight:bold}.highlight pre .m{color:#00f}.highlight pre .s{color:#00f}.highlight pre .na{color:#f00}.highlight pre .nt{color:#000080;font-weight:bold}.highlight pre .ow{font-weight:bold}.highlight pre .w{color:#bbb}.highlight pre .mb{color:#00f}.highlight pre .mf{color:#00f}.highlight pre .mh{color:#00f}.highlight pre .mi{color:#00f}.highlight pre .mo{color:#00f}.highlight pre .sb{color:#00f}.highlight pre .sc{color:#800080}.highlight pre .sd{color:#00f}.highlight pre .s2{color:#00f}.highlight pre .se{color:#00f}.highlight pre .sh{color:#00f}.highlight pre .si{color:#00f}.highlight pre .sx{color:#00f}.highlight pre .sr{color:#00f}.highlight pre .s1{color:#00f}.highlight pre .ss{color:#00f}.highlight pre .il{color:#00f} \ No newline at end of file diff --git a/theme/css/pygments/bw.min.css b/theme/css/pygments/bw.min.css new file mode 100644 index 0000000..124255d --- /dev/null +++ b/theme/css/pygments/bw.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#fff}.highlight pre .c{font-style:italic}.highlight pre .err{border:1px solid #f00}.highlight pre .k{font-weight:bold}.highlight pre .ch{font-style:italic}.highlight pre .cm{font-style:italic}.highlight pre .cpf{font-style:italic}.highlight pre .c1{font-style:italic}.highlight pre .cs{font-style:italic}.highlight pre .ge{font-style:italic}.highlight pre .gh{font-weight:bold}.highlight pre .gp{font-weight:bold}.highlight pre .gs{font-weight:bold}.highlight pre .gu{font-weight:bold}.highlight pre .kc{font-weight:bold}.highlight pre .kd{font-weight:bold}.highlight pre .kn{font-weight:bold}.highlight pre .kr{font-weight:bold}.highlight pre .s{font-style:italic}.highlight pre .nc{font-weight:bold}.highlight pre .ni{font-weight:bold}.highlight pre .ne{font-weight:bold}.highlight pre .nn{font-weight:bold}.highlight pre .nt{font-weight:bold}.highlight pre .ow{font-weight:bold}.highlight pre .sb{font-style:italic}.highlight pre .sc{font-style:italic}.highlight pre .sd{font-style:italic}.highlight pre .s2{font-style:italic}.highlight pre .se{font-weight:bold;font-style:italic}.highlight pre .sh{font-style:italic}.highlight pre .si{font-weight:bold;font-style:italic}.highlight pre .sx{font-style:italic}.highlight pre .sr{font-style:italic}.highlight pre .s1{font-style:italic}.highlight pre .ss{font-style:italic} \ No newline at end of file diff --git a/theme/css/pygments/colorful.min.css b/theme/css/pygments/colorful.min.css new file mode 100644 index 0000000..882c43b --- /dev/null +++ b/theme/css/pygments/colorful.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#fff}.highlight pre .c{color:#888}.highlight pre .err{color:#f00;background-color:#faa}.highlight pre .k{color:#080;font-weight:bold}.highlight pre .o{color:#333}.highlight pre .ch{color:#888}.highlight pre .cm{color:#888}.highlight pre .cp{color:#579}.highlight pre .cpf{color:#888}.highlight pre .c1{color:#888}.highlight pre .cs{color:#c00;font-weight:bold}.highlight pre .gd{color:#a00000}.highlight pre .ge{font-style:italic}.highlight pre .gr{color:#f00}.highlight pre .gh{color:#000080;font-weight:bold}.highlight pre .gi{color:#00a000}.highlight pre .go{color:#888}.highlight pre .gp{color:#c65d09;font-weight:bold}.highlight pre .gs{font-weight:bold}.highlight pre .gu{color:#800080;font-weight:bold}.highlight pre .gt{color:#04d}.highlight pre .kc{color:#080;font-weight:bold}.highlight pre .kd{color:#080;font-weight:bold}.highlight pre .kn{color:#080;font-weight:bold}.highlight pre .kp{color:#038;font-weight:bold}.highlight pre .kr{color:#080;font-weight:bold}.highlight pre .kt{color:#339;font-weight:bold}.highlight pre .m{color:#60e;font-weight:bold}.highlight pre .s{background-color:#fff0f0}.highlight pre .na{color:#00c}.highlight pre .nb{color:#007020}.highlight pre .nc{color:#b06;font-weight:bold}.highlight pre .no{color:#036;font-weight:bold}.highlight pre .nd{color:#555;font-weight:bold}.highlight pre .ni{color:#800;font-weight:bold}.highlight pre .ne{color:#f00;font-weight:bold}.highlight pre .nf{color:#06b;font-weight:bold}.highlight pre .nl{color:#970;font-weight:bold}.highlight pre .nn{color:#0e84b5;font-weight:bold}.highlight pre .nt{color:#070}.highlight pre .nv{color:#963}.highlight pre .ow{color:#000;font-weight:bold}.highlight pre .w{color:#bbb}.highlight pre .mb{color:#60e;font-weight:bold}.highlight pre .mf{color:#60e;font-weight:bold}.highlight pre .mh{color:#058;font-weight:bold}.highlight pre .mi{color:#00d;font-weight:bold}.highlight pre .mo{color:#40e;font-weight:bold}.highlight pre .sb{background-color:#fff0f0}.highlight pre .sc{color:#04d}.highlight pre .sd{color:#d42}.highlight pre .s2{background-color:#fff0f0}.highlight pre .se{color:#666;font-weight:bold;background-color:#fff0f0}.highlight pre .sh{background-color:#fff0f0}.highlight pre .si{background-color:#eee}.highlight pre .sx{color:#d20;background-color:#fff0f0}.highlight pre .sr{color:#000;background-color:#fff0ff}.highlight pre .s1{background-color:#fff0f0}.highlight pre .ss{color:#a60}.highlight pre .bp{color:#007020}.highlight pre .vc{color:#369}.highlight pre .vg{color:#d70;font-weight:bold}.highlight pre .vi{color:#33b}.highlight pre .il{color:#00d;font-weight:bold} \ No newline at end of file diff --git a/theme/css/pygments/default.min.css b/theme/css/pygments/default.min.css new file mode 100644 index 0000000..013ae43 --- /dev/null +++ b/theme/css/pygments/default.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#f8f8f8}.highlight pre .c{color:#408080;font-style:italic}.highlight pre .err{border:1px solid #f00}.highlight pre .k{color:#008000;font-weight:bold}.highlight pre .o{color:#666}.highlight pre .ch{color:#408080;font-style:italic}.highlight pre .cm{color:#408080;font-style:italic}.highlight pre .cp{color:#bc7a00}.highlight pre .cpf{color:#408080;font-style:italic}.highlight pre .c1{color:#408080;font-style:italic}.highlight pre .cs{color:#408080;font-style:italic}.highlight pre .gd{color:#a00000}.highlight pre .ge{font-style:italic}.highlight pre .gr{color:#f00}.highlight pre .gh{color:#000080;font-weight:bold}.highlight pre .gi{color:#00a000}.highlight pre .go{color:#888}.highlight pre .gp{color:#000080;font-weight:bold}.highlight pre .gs{font-weight:bold}.highlight pre .gu{color:#800080;font-weight:bold}.highlight pre .gt{color:#04d}.highlight pre .kc{color:#008000;font-weight:bold}.highlight pre .kd{color:#008000;font-weight:bold}.highlight pre .kn{color:#008000;font-weight:bold}.highlight pre .kp{color:#008000}.highlight pre .kr{color:#008000;font-weight:bold}.highlight pre .kt{color:#b00040}.highlight pre .m{color:#666}.highlight pre .s{color:#ba2121}.highlight pre .na{color:#7d9029}.highlight pre .nb{color:#008000}.highlight pre .nc{color:#00f;font-weight:bold}.highlight pre .no{color:#800}.highlight pre .nd{color:#a2f}.highlight pre .ni{color:#999;font-weight:bold}.highlight pre .ne{color:#d2413a;font-weight:bold}.highlight pre .nf{color:#00f}.highlight pre .nl{color:#a0a000}.highlight pre .nn{color:#00f;font-weight:bold}.highlight pre .nt{color:#008000;font-weight:bold}.highlight pre .nv{color:#19177c}.highlight pre .ow{color:#a2f;font-weight:bold}.highlight pre .w{color:#bbb}.highlight pre .mb{color:#666}.highlight pre .mf{color:#666}.highlight pre .mh{color:#666}.highlight pre .mi{color:#666}.highlight pre .mo{color:#666}.highlight pre .sb{color:#ba2121}.highlight pre .sc{color:#ba2121}.highlight pre .sd{color:#ba2121;font-style:italic}.highlight pre .s2{color:#ba2121}.highlight pre .se{color:#b62;font-weight:bold}.highlight pre .sh{color:#ba2121}.highlight pre .si{color:#b68;font-weight:bold}.highlight pre .sx{color:#008000}.highlight pre .sr{color:#b68}.highlight pre .s1{color:#ba2121}.highlight pre .ss{color:#19177c}.highlight pre .bp{color:#008000}.highlight pre .vc{color:#19177c}.highlight pre .vg{color:#19177c}.highlight pre .vi{color:#19177c}.highlight pre .il{color:#666} \ No newline at end of file diff --git a/theme/css/pygments/emacs.min.css b/theme/css/pygments/emacs.min.css new file mode 100644 index 0000000..132da7c --- /dev/null +++ b/theme/css/pygments/emacs.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#f8f8f8}.highlight pre .c{color:#080;font-style:italic}.highlight pre .err{border:1px solid #f00}.highlight pre .k{color:#a2f;font-weight:bold}.highlight pre .o{color:#666}.highlight pre .ch{color:#080;font-style:italic}.highlight pre .cm{color:#080;font-style:italic}.highlight pre .cp{color:#080}.highlight pre .cpf{color:#080;font-style:italic}.highlight pre .c1{color:#080;font-style:italic}.highlight pre .cs{color:#080;font-weight:bold}.highlight pre .gd{color:#a00000}.highlight pre .ge{font-style:italic}.highlight pre .gr{color:#f00}.highlight pre .gh{color:#000080;font-weight:bold}.highlight pre .gi{color:#00a000}.highlight pre .go{color:#888}.highlight pre .gp{color:#000080;font-weight:bold}.highlight pre .gs{font-weight:bold}.highlight pre .gu{color:#800080;font-weight:bold}.highlight pre .gt{color:#04d}.highlight pre .kc{color:#a2f;font-weight:bold}.highlight pre .kd{color:#a2f;font-weight:bold}.highlight pre .kn{color:#a2f;font-weight:bold}.highlight pre .kp{color:#a2f}.highlight pre .kr{color:#a2f;font-weight:bold}.highlight pre .kt{color:#0b0;font-weight:bold}.highlight pre .m{color:#666}.highlight pre .s{color:#b44}.highlight pre .na{color:#b44}.highlight pre .nb{color:#a2f}.highlight pre .nc{color:#00f}.highlight pre .no{color:#800}.highlight pre .nd{color:#a2f}.highlight pre .ni{color:#999;font-weight:bold}.highlight pre .ne{color:#d2413a;font-weight:bold}.highlight pre .nf{color:#00a000}.highlight pre .nl{color:#a0a000}.highlight pre .nn{color:#00f;font-weight:bold}.highlight pre .nt{color:#008000;font-weight:bold}.highlight pre .nv{color:#b8860b}.highlight pre .ow{color:#a2f;font-weight:bold}.highlight pre .w{color:#bbb}.highlight pre .mb{color:#666}.highlight pre .mf{color:#666}.highlight pre .mh{color:#666}.highlight pre .mi{color:#666}.highlight pre .mo{color:#666}.highlight pre .sb{color:#b44}.highlight pre .sc{color:#b44}.highlight pre .sd{color:#b44;font-style:italic}.highlight pre .s2{color:#b44}.highlight pre .se{color:#b62;font-weight:bold}.highlight pre .sh{color:#b44}.highlight pre .si{color:#b68;font-weight:bold}.highlight pre .sx{color:#008000}.highlight pre .sr{color:#b68}.highlight pre .s1{color:#b44}.highlight pre .ss{color:#b8860b}.highlight pre .bp{color:#a2f}.highlight pre .vc{color:#b8860b}.highlight pre .vg{color:#b8860b}.highlight pre .vi{color:#b8860b}.highlight pre .il{color:#666} \ No newline at end of file diff --git a/theme/css/pygments/friendly.min.css b/theme/css/pygments/friendly.min.css new file mode 100644 index 0000000..325d77d --- /dev/null +++ b/theme/css/pygments/friendly.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#f0f0f0}.highlight pre .c{color:#60a0b0;font-style:italic}.highlight pre .err{border:1px solid #f00}.highlight pre .k{color:#007020;font-weight:bold}.highlight pre .o{color:#666}.highlight pre .ch{color:#60a0b0;font-style:italic}.highlight pre .cm{color:#60a0b0;font-style:italic}.highlight pre .cp{color:#007020}.highlight pre .cpf{color:#60a0b0;font-style:italic}.highlight pre .c1{color:#60a0b0;font-style:italic}.highlight pre .cs{color:#60a0b0;background-color:#fff0f0}.highlight pre .gd{color:#a00000}.highlight pre .ge{font-style:italic}.highlight pre .gr{color:#f00}.highlight pre .gh{color:#000080;font-weight:bold}.highlight pre .gi{color:#00a000}.highlight pre .go{color:#888}.highlight pre .gp{color:#c65d09;font-weight:bold}.highlight pre .gs{font-weight:bold}.highlight pre .gu{color:#800080;font-weight:bold}.highlight pre .gt{color:#04d}.highlight pre .kc{color:#007020;font-weight:bold}.highlight pre .kd{color:#007020;font-weight:bold}.highlight pre .kn{color:#007020;font-weight:bold}.highlight pre .kp{color:#007020}.highlight pre .kr{color:#007020;font-weight:bold}.highlight pre .kt{color:#902000}.highlight pre .m{color:#40a070}.highlight pre .s{color:#4070a0}.highlight pre .na{color:#4070a0}.highlight pre .nb{color:#007020}.highlight pre .nc{color:#0e84b5;font-weight:bold}.highlight pre .no{color:#60add5}.highlight pre .nd{color:#555;font-weight:bold}.highlight pre .ni{color:#d55537;font-weight:bold}.highlight pre .ne{color:#007020}.highlight pre .nf{color:#06287e}.highlight pre .nl{color:#002070;font-weight:bold}.highlight pre .nn{color:#0e84b5;font-weight:bold}.highlight pre .nt{color:#062873;font-weight:bold}.highlight pre .nv{color:#bb60d5}.highlight pre .ow{color:#007020;font-weight:bold}.highlight pre .w{color:#bbb}.highlight pre .mb{color:#40a070}.highlight pre .mf{color:#40a070}.highlight pre .mh{color:#40a070}.highlight pre .mi{color:#40a070}.highlight pre .mo{color:#40a070}.highlight pre .sb{color:#4070a0}.highlight pre .sc{color:#4070a0}.highlight pre .sd{color:#4070a0;font-style:italic}.highlight pre .s2{color:#4070a0}.highlight pre .se{color:#4070a0;font-weight:bold}.highlight pre .sh{color:#4070a0}.highlight pre .si{color:#70a0d0;font-style:italic}.highlight pre .sx{color:#c65d09}.highlight pre .sr{color:#235388}.highlight pre .s1{color:#4070a0}.highlight pre .ss{color:#517918}.highlight pre .bp{color:#007020}.highlight pre .vc{color:#bb60d5}.highlight pre .vg{color:#bb60d5}.highlight pre .vi{color:#bb60d5}.highlight pre .il{color:#40a070} \ No newline at end of file diff --git a/theme/css/pygments/fruity.min.css b/theme/css/pygments/fruity.min.css new file mode 100644 index 0000000..1608531 --- /dev/null +++ b/theme/css/pygments/fruity.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#333}.highlight pre{background:#111;color:#fff}.highlight pre .c{color:#080;font-style:italic;background-color:#0f140f}.highlight pre .err{color:#fff}.highlight pre .esc{color:#fff}.highlight pre .g{color:#fff}.highlight pre .k{color:#fb660a;font-weight:bold}.highlight pre .l{color:#fff}.highlight pre .n{color:#fff}.highlight pre .o{color:#fff}.highlight pre .x{color:#fff}.highlight pre .p{color:#fff}.highlight pre .ch{color:#080;font-style:italic;background-color:#0f140f}.highlight pre .cm{color:#080;font-style:italic;background-color:#0f140f}.highlight pre .cp{color:#ff0007;font-weight:bold;font-style:italic;background-color:#0f140f}.highlight pre .cpf{color:#080;font-style:italic;background-color:#0f140f}.highlight pre .c1{color:#080;font-style:italic;background-color:#0f140f}.highlight pre .cs{color:#080;font-style:italic;background-color:#0f140f}.highlight pre .gd{color:#fff}.highlight pre .ge{color:#fff}.highlight pre .gr{color:#fff}.highlight pre .gh{color:#fff;font-weight:bold}.highlight pre .gi{color:#fff}.highlight pre .go{color:#444;background-color:#222}.highlight pre .gp{color:#fff}.highlight pre .gs{color:#fff}.highlight pre .gu{color:#fff;font-weight:bold}.highlight pre .gt{color:#fff}.highlight pre .kc{color:#fb660a;font-weight:bold}.highlight pre .kd{color:#fb660a;font-weight:bold}.highlight pre .kn{color:#fb660a;font-weight:bold}.highlight pre .kp{color:#fb660a}.highlight pre .kr{color:#fb660a;font-weight:bold}.highlight pre .kt{color:#cdcaa9;font-weight:bold}.highlight pre .ld{color:#fff}.highlight pre .m{color:#0086f7;font-weight:bold}.highlight pre .s{color:#0086d2}.highlight pre .na{color:#ff0086;font-weight:bold}.highlight pre .nb{color:#fff}.highlight pre .nc{color:#fff}.highlight pre .no{color:#0086d2}.highlight pre .nd{color:#fff}.highlight pre .ni{color:#fff}.highlight pre .ne{color:#fff}.highlight pre .nf{color:#ff0086;font-weight:bold}.highlight pre .nl{color:#fff}.highlight pre .nn{color:#fff}.highlight pre .nx{color:#fff}.highlight pre .py{color:#fff}.highlight pre .nt{color:#fb660a;font-weight:bold}.highlight pre .nv{color:#fb660a}.highlight pre .ow{color:#fff}.highlight pre .w{color:#888}.highlight pre .mb{color:#0086f7;font-weight:bold}.highlight pre .mf{color:#0086f7;font-weight:bold}.highlight pre .mh{color:#0086f7;font-weight:bold}.highlight pre .mi{color:#0086f7;font-weight:bold}.highlight pre .mo{color:#0086f7;font-weight:bold}.highlight pre .sb{color:#0086d2}.highlight pre .sc{color:#0086d2}.highlight pre .sd{color:#0086d2}.highlight pre .s2{color:#0086d2}.highlight pre .se{color:#0086d2}.highlight pre .sh{color:#0086d2}.highlight pre .si{color:#0086d2}.highlight pre .sx{color:#0086d2}.highlight pre .sr{color:#0086d2}.highlight pre .s1{color:#0086d2}.highlight pre .ss{color:#0086d2}.highlight pre .bp{color:#fff}.highlight pre .vc{color:#fb660a}.highlight pre .vg{color:#fb660a}.highlight pre .vi{color:#fb660a}.highlight pre .il{color:#0086f7;font-weight:bold} \ No newline at end of file diff --git a/theme/css/pygments/igor.min.css b/theme/css/pygments/igor.min.css new file mode 100644 index 0000000..0a2e03e --- /dev/null +++ b/theme/css/pygments/igor.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#fff}.highlight pre .c{color:#f00;font-style:italic}.highlight pre .k{color:#00f}.highlight pre .ch{color:#f00;font-style:italic}.highlight pre .cm{color:#f00;font-style:italic}.highlight pre .cp{color:#f00;font-style:italic}.highlight pre .cpf{color:#f00;font-style:italic}.highlight pre .c1{color:#f00;font-style:italic}.highlight pre .cs{color:#f00;font-style:italic}.highlight pre .kc{color:#00f}.highlight pre .kd{color:#00f}.highlight pre .kn{color:#00f}.highlight pre .kp{color:#00f}.highlight pre .kr{color:#00f}.highlight pre .kt{color:#00f}.highlight pre .s{color:#009c00}.highlight pre .nc{color:#007575}.highlight pre .nd{color:#cc00a3}.highlight pre .nf{color:#c34e00}.highlight pre .sb{color:#009c00}.highlight pre .sc{color:#009c00}.highlight pre .sd{color:#009c00}.highlight pre .s2{color:#009c00}.highlight pre .se{color:#009c00}.highlight pre .sh{color:#009c00}.highlight pre .si{color:#009c00}.highlight pre .sx{color:#009c00}.highlight pre .sr{color:#009c00}.highlight pre .s1{color:#009c00}.highlight pre .ss{color:#009c00} \ No newline at end of file diff --git a/theme/css/pygments/lovelace.min.css b/theme/css/pygments/lovelace.min.css new file mode 100644 index 0000000..9b0a65a --- /dev/null +++ b/theme/css/pygments/lovelace.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#fff}.highlight pre .c{color:#888;font-style:italic}.highlight pre .err{background-color:#a848a8}.highlight pre .k{color:#2838b0}.highlight pre .o{color:#666}.highlight pre .p{color:#888}.highlight pre .ch{color:#287088;font-style:italic}.highlight pre .cm{color:#888;font-style:italic}.highlight pre .cp{color:#289870}.highlight pre .cpf{color:#888;font-style:italic}.highlight pre .c1{color:#888;font-style:italic}.highlight pre .cs{color:#888;font-style:italic}.highlight pre .gd{color:#c02828}.highlight pre .ge{font-style:italic}.highlight pre .gr{color:#c02828}.highlight pre .gh{color:#666}.highlight pre .gi{color:#388038}.highlight pre .go{color:#666}.highlight pre .gp{color:#444}.highlight pre .gs{font-weight:bold}.highlight pre .gu{color:#444}.highlight pre .gt{color:#2838b0}.highlight pre .kc{color:#444;font-style:italic}.highlight pre .kd{color:#2838b0;font-style:italic}.highlight pre .kn{color:#2838b0}.highlight pre .kp{color:#2838b0}.highlight pre .kr{color:#2838b0}.highlight pre .kt{color:#2838b0;font-style:italic}.highlight pre .m{color:#444}.highlight pre .s{color:#b83838}.highlight pre .na{color:#388038}.highlight pre .nb{color:#388038}.highlight pre .nc{color:#287088}.highlight pre .no{color:#b85820}.highlight pre .nd{color:#287088}.highlight pre .ni{color:#709030}.highlight pre .ne{color:#908828}.highlight pre .nf{color:#785840}.highlight pre .nl{color:#289870}.highlight pre .nn{color:#289870}.highlight pre .nt{color:#2838b0}.highlight pre .nv{color:#b04040}.highlight pre .ow{color:#a848a8}.highlight pre .w{color:#a89028}.highlight pre .mb{color:#444}.highlight pre .mf{color:#444}.highlight pre .mh{color:#444}.highlight pre .mi{color:#444}.highlight pre .mo{color:#444}.highlight pre .sb{color:#b83838}.highlight pre .sc{color:#a848a8}.highlight pre .sd{color:#b85820;font-style:italic}.highlight pre .s2{color:#b83838}.highlight pre .se{color:#709030}.highlight pre .sh{color:#b83838}.highlight pre .si{color:#b83838;text-decoration:underline}.highlight pre .sx{color:#a848a8}.highlight pre .sr{color:#a848a8}.highlight pre .s1{color:#b83838}.highlight pre .ss{color:#b83838}.highlight pre .bp{color:#388038;font-style:italic}.highlight pre .vc{color:#b04040}.highlight pre .vg{color:#908828}.highlight pre .vi{color:#b04040}.highlight pre .il{color:#444} \ No newline at end of file diff --git a/theme/css/pygments/manni.min.css b/theme/css/pygments/manni.min.css new file mode 100644 index 0000000..747b5c9 --- /dev/null +++ b/theme/css/pygments/manni.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#f0f3f3}.highlight pre .c{color:#09f;font-style:italic}.highlight pre .err{color:#a00;background-color:#faa}.highlight pre .k{color:#069;font-weight:bold}.highlight pre .o{color:#555}.highlight pre .ch{color:#09f;font-style:italic}.highlight pre .cm{color:#09f;font-style:italic}.highlight pre .cp{color:#099}.highlight pre .cpf{color:#09f;font-style:italic}.highlight pre .c1{color:#09f;font-style:italic}.highlight pre .cs{color:#09f;font-weight:bold;font-style:italic}.highlight pre .gd{background-color:#fcc;border:1px solid #c00}.highlight pre .ge{font-style:italic}.highlight pre .gr{color:#f00}.highlight pre .gh{color:#030;font-weight:bold}.highlight pre .gi{background-color:#cfc;border:1px solid #0c0}.highlight pre .go{color:#aaa}.highlight pre .gp{color:#009;font-weight:bold}.highlight pre .gs{font-weight:bold}.highlight pre .gu{color:#030;font-weight:bold}.highlight pre .gt{color:#9c6}.highlight pre .kc{color:#069;font-weight:bold}.highlight pre .kd{color:#069;font-weight:bold}.highlight pre .kn{color:#069;font-weight:bold}.highlight pre .kp{color:#069}.highlight pre .kr{color:#069;font-weight:bold}.highlight pre .kt{color:#078;font-weight:bold}.highlight pre .m{color:#f60}.highlight pre .s{color:#c30}.highlight pre .na{color:#309}.highlight pre .nb{color:#366}.highlight pre .nc{color:#0a8;font-weight:bold}.highlight pre .no{color:#360}.highlight pre .nd{color:#99f}.highlight pre .ni{color:#999;font-weight:bold}.highlight pre .ne{color:#c00;font-weight:bold}.highlight pre .nf{color:#c0f}.highlight pre .nl{color:#99f}.highlight pre .nn{color:#0cf;font-weight:bold}.highlight pre .nt{color:#309;font-weight:bold}.highlight pre .nv{color:#033}.highlight pre .ow{color:#000;font-weight:bold}.highlight pre .w{color:#bbb}.highlight pre .mb{color:#f60}.highlight pre .mf{color:#f60}.highlight pre .mh{color:#f60}.highlight pre .mi{color:#f60}.highlight pre .mo{color:#f60}.highlight pre .sb{color:#c30}.highlight pre .sc{color:#c30}.highlight pre .sd{color:#c30;font-style:italic}.highlight pre .s2{color:#c30}.highlight pre .se{color:#c30;font-weight:bold}.highlight pre .sh{color:#c30}.highlight pre .si{color:#a00}.highlight pre .sx{color:#c30}.highlight pre .sr{color:#3aa}.highlight pre .s1{color:#c30}.highlight pre .ss{color:#fc3}.highlight pre .bp{color:#366}.highlight pre .vc{color:#033}.highlight pre .vg{color:#033}.highlight pre .vi{color:#033}.highlight pre .il{color:#f60} \ No newline at end of file diff --git a/theme/css/pygments/monokai.min.css b/theme/css/pygments/monokai.min.css new file mode 100644 index 0000000..ac9fec3 --- /dev/null +++ b/theme/css/pygments/monokai.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#49483e}.highlight pre{background:#272822;color:#f8f8f2}.highlight pre .c{color:#75715e}.highlight pre .err{color:#960050;background-color:#1e0010}.highlight pre .k{color:#66d9ef}.highlight pre .l{color:#ae81ff}.highlight pre .n{color:#f8f8f2}.highlight pre .o{color:#f92672}.highlight pre .p{color:#f8f8f2}.highlight pre .ch{color:#75715e}.highlight pre .cm{color:#75715e}.highlight pre .cp{color:#75715e}.highlight pre .cpf{color:#75715e}.highlight pre .c1{color:#75715e}.highlight pre .cs{color:#75715e}.highlight pre .gd{color:#f92672}.highlight pre .ge{font-style:italic}.highlight pre .gi{color:#a6e22e}.highlight pre .gs{font-weight:bold}.highlight pre .gu{color:#75715e}.highlight pre .kc{color:#66d9ef}.highlight pre .kd{color:#66d9ef}.highlight pre .kn{color:#f92672}.highlight pre .kp{color:#66d9ef}.highlight pre .kr{color:#66d9ef}.highlight pre .kt{color:#66d9ef}.highlight pre .ld{color:#e6db74}.highlight pre .m{color:#ae81ff}.highlight pre .s{color:#e6db74}.highlight pre .na{color:#a6e22e}.highlight pre .nb{color:#f8f8f2}.highlight pre .nc{color:#a6e22e}.highlight pre .no{color:#66d9ef}.highlight pre .nd{color:#a6e22e}.highlight pre .ni{color:#f8f8f2}.highlight pre .ne{color:#a6e22e}.highlight pre .nf{color:#a6e22e}.highlight pre .nl{color:#f8f8f2}.highlight pre .nn{color:#f8f8f2}.highlight pre .nx{color:#a6e22e}.highlight pre .py{color:#f8f8f2}.highlight pre .nt{color:#f92672}.highlight pre .nv{color:#f8f8f2}.highlight pre .ow{color:#f92672}.highlight pre .w{color:#f8f8f2}.highlight pre .mb{color:#ae81ff}.highlight pre .mf{color:#ae81ff}.highlight pre .mh{color:#ae81ff}.highlight pre .mi{color:#ae81ff}.highlight pre .mo{color:#ae81ff}.highlight pre .sb{color:#e6db74}.highlight pre .sc{color:#e6db74}.highlight pre .sd{color:#e6db74}.highlight pre .s2{color:#e6db74}.highlight pre .se{color:#ae81ff}.highlight pre .sh{color:#e6db74}.highlight pre .si{color:#e6db74}.highlight pre .sx{color:#e6db74}.highlight pre .sr{color:#e6db74}.highlight pre .s1{color:#e6db74}.highlight pre .ss{color:#e6db74}.highlight pre .bp{color:#f8f8f2}.highlight pre .vc{color:#f8f8f2}.highlight pre .vg{color:#f8f8f2}.highlight pre .vi{color:#f8f8f2}.highlight pre .il{color:#ae81ff} \ No newline at end of file diff --git a/theme/css/pygments/murphy.min.css b/theme/css/pygments/murphy.min.css new file mode 100644 index 0000000..1eafc7a --- /dev/null +++ b/theme/css/pygments/murphy.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#fff}.highlight pre .c{color:#666;font-style:italic}.highlight pre .err{color:#f00;background-color:#faa}.highlight pre .k{color:#289;font-weight:bold}.highlight pre .o{color:#333}.highlight pre .ch{color:#666;font-style:italic}.highlight pre .cm{color:#666;font-style:italic}.highlight pre .cp{color:#579}.highlight pre .cpf{color:#666;font-style:italic}.highlight pre .c1{color:#666;font-style:italic}.highlight pre .cs{color:#c00;font-weight:bold;font-style:italic}.highlight pre .gd{color:#a00000}.highlight pre .ge{font-style:italic}.highlight pre .gr{color:#f00}.highlight pre .gh{color:#000080;font-weight:bold}.highlight pre .gi{color:#00a000}.highlight pre .go{color:#888}.highlight pre .gp{color:#c65d09;font-weight:bold}.highlight pre .gs{font-weight:bold}.highlight pre .gu{color:#800080;font-weight:bold}.highlight pre .gt{color:#04d}.highlight pre .kc{color:#289;font-weight:bold}.highlight pre .kd{color:#289;font-weight:bold}.highlight pre .kn{color:#289;font-weight:bold}.highlight pre .kp{color:#08f;font-weight:bold}.highlight pre .kr{color:#289;font-weight:bold}.highlight pre .kt{color:#66f;font-weight:bold}.highlight pre .m{color:#60e;font-weight:bold}.highlight pre .s{background-color:#e0e0ff}.highlight pre .na{color:#007}.highlight pre .nb{color:#072}.highlight pre .nc{color:#e9e;font-weight:bold}.highlight pre .no{color:#5ed;font-weight:bold}.highlight pre .nd{color:#555;font-weight:bold}.highlight pre .ni{color:#800}.highlight pre .ne{color:#f00;font-weight:bold}.highlight pre .nf{color:#5ed;font-weight:bold}.highlight pre .nl{color:#970;font-weight:bold}.highlight pre .nn{color:#0e84b5;font-weight:bold}.highlight pre .nt{color:#070}.highlight pre .nv{color:#036}.highlight pre .ow{color:#000;font-weight:bold}.highlight pre .w{color:#bbb}.highlight pre .mb{color:#60e;font-weight:bold}.highlight pre .mf{color:#60e;font-weight:bold}.highlight pre .mh{color:#058;font-weight:bold}.highlight pre .mi{color:#66f;font-weight:bold}.highlight pre .mo{color:#40e;font-weight:bold}.highlight pre .sb{background-color:#e0e0ff}.highlight pre .sc{color:#88f}.highlight pre .sd{color:#d42}.highlight pre .s2{background-color:#e0e0ff}.highlight pre .se{color:#666;font-weight:bold;background-color:#e0e0ff}.highlight pre .sh{background-color:#e0e0ff}.highlight pre .si{background-color:#eee}.highlight pre .sx{color:#f88;background-color:#e0e0ff}.highlight pre .sr{color:#000;background-color:#e0e0ff}.highlight pre .s1{background-color:#e0e0ff}.highlight pre .ss{color:#fc8}.highlight pre .bp{color:#072}.highlight pre .vc{color:#ccf}.highlight pre .vg{color:#f84}.highlight pre .vi{color:#aaf}.highlight pre .il{color:#66f;font-weight:bold} \ No newline at end of file diff --git a/theme/css/pygments/native.min.css b/theme/css/pygments/native.min.css new file mode 100644 index 0000000..1534823 --- /dev/null +++ b/theme/css/pygments/native.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#404040}.highlight pre{background:#202020;color:#d0d0d0}.highlight pre .c{color:#999;font-style:italic}.highlight pre .err{color:#a61717;background-color:#e3d2d2}.highlight pre .esc{color:#d0d0d0}.highlight pre .g{color:#d0d0d0}.highlight pre .k{color:#6ab825;font-weight:bold}.highlight pre .l{color:#d0d0d0}.highlight pre .n{color:#d0d0d0}.highlight pre .o{color:#d0d0d0}.highlight pre .x{color:#d0d0d0}.highlight pre .p{color:#d0d0d0}.highlight pre .ch{color:#999;font-style:italic}.highlight pre .cm{color:#999;font-style:italic}.highlight pre .cp{color:#cd2828;font-weight:bold}.highlight pre .cpf{color:#999;font-style:italic}.highlight pre .c1{color:#999;font-style:italic}.highlight pre .cs{color:#e50808;font-weight:bold;background-color:#520000}.highlight pre .gd{color:#d22323}.highlight pre .ge{color:#d0d0d0;font-style:italic}.highlight pre .gr{color:#d22323}.highlight pre .gh{color:#fff;font-weight:bold}.highlight pre .gi{color:#589819}.highlight pre .go{color:#ccc}.highlight pre .gp{color:#aaa}.highlight pre .gs{color:#d0d0d0;font-weight:bold}.highlight pre .gu{color:#fff;text-decoration:underline}.highlight pre .gt{color:#d22323}.highlight pre .kc{color:#6ab825;font-weight:bold}.highlight pre .kd{color:#6ab825;font-weight:bold}.highlight pre .kn{color:#6ab825;font-weight:bold}.highlight pre .kp{color:#6ab825}.highlight pre .kr{color:#6ab825;font-weight:bold}.highlight pre .kt{color:#6ab825;font-weight:bold}.highlight pre .ld{color:#d0d0d0}.highlight pre .m{color:#3677a9}.highlight pre .s{color:#ed9d13}.highlight pre .na{color:#bbb}.highlight pre .nb{color:#24909d}.highlight pre .nc{color:#447fcf;text-decoration:underline}.highlight pre .no{color:#40ffff}.highlight pre .nd{color:#ffa500}.highlight pre .ni{color:#d0d0d0}.highlight pre .ne{color:#bbb}.highlight pre .nf{color:#447fcf}.highlight pre .nl{color:#d0d0d0}.highlight pre .nn{color:#447fcf;text-decoration:underline}.highlight pre .nx{color:#d0d0d0}.highlight pre .py{color:#d0d0d0}.highlight pre .nt{color:#6ab825;font-weight:bold}.highlight pre .nv{color:#40ffff}.highlight pre .ow{color:#6ab825;font-weight:bold}.highlight pre .w{color:#666}.highlight pre .mb{color:#3677a9}.highlight pre .mf{color:#3677a9}.highlight pre .mh{color:#3677a9}.highlight pre .mi{color:#3677a9}.highlight pre .mo{color:#3677a9}.highlight pre .sb{color:#ed9d13}.highlight pre .sc{color:#ed9d13}.highlight pre .sd{color:#ed9d13}.highlight pre .s2{color:#ed9d13}.highlight pre .se{color:#ed9d13}.highlight pre .sh{color:#ed9d13}.highlight pre .si{color:#ed9d13}.highlight pre .sx{color:#ffa500}.highlight pre .sr{color:#ed9d13}.highlight pre .s1{color:#ed9d13}.highlight pre .ss{color:#ed9d13}.highlight pre .bp{color:#24909d}.highlight pre .vc{color:#40ffff}.highlight pre .vg{color:#40ffff}.highlight pre .vi{color:#40ffff}.highlight pre .il{color:#3677a9} \ No newline at end of file diff --git a/theme/css/pygments/paraiso-dark.min.css b/theme/css/pygments/paraiso-dark.min.css new file mode 100644 index 0000000..21ae7ae --- /dev/null +++ b/theme/css/pygments/paraiso-dark.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#4f424c}.highlight pre{background:#2f1e2e;color:#e7e9db}.highlight pre .c{color:#776e71}.highlight pre .err{color:#ef6155}.highlight pre .k{color:#815ba4}.highlight pre .l{color:#f99b15}.highlight pre .n{color:#e7e9db}.highlight pre .o{color:#5bc4bf}.highlight pre .p{color:#e7e9db}.highlight pre .ch{color:#776e71}.highlight pre .cm{color:#776e71}.highlight pre .cp{color:#776e71}.highlight pre .cpf{color:#776e71}.highlight pre .c1{color:#776e71}.highlight pre .cs{color:#776e71}.highlight pre .gd{color:#ef6155}.highlight pre .ge{font-style:italic}.highlight pre .gh{color:#e7e9db;font-weight:bold}.highlight pre .gi{color:#48b685}.highlight pre .gp{color:#776e71;font-weight:bold}.highlight pre .gs{font-weight:bold}.highlight pre .gu{color:#5bc4bf;font-weight:bold}.highlight pre .kc{color:#815ba4}.highlight pre .kd{color:#815ba4}.highlight pre .kn{color:#5bc4bf}.highlight pre .kp{color:#815ba4}.highlight pre .kr{color:#815ba4}.highlight pre .kt{color:#fec418}.highlight pre .ld{color:#48b685}.highlight pre .m{color:#f99b15}.highlight pre .s{color:#48b685}.highlight pre .na{color:#06b6ef}.highlight pre .nb{color:#e7e9db}.highlight pre .nc{color:#fec418}.highlight pre .no{color:#ef6155}.highlight pre .nd{color:#5bc4bf}.highlight pre .ni{color:#e7e9db}.highlight pre .ne{color:#ef6155}.highlight pre .nf{color:#06b6ef}.highlight pre .nl{color:#e7e9db}.highlight pre .nn{color:#fec418}.highlight pre .nx{color:#06b6ef}.highlight pre .py{color:#e7e9db}.highlight pre .nt{color:#5bc4bf}.highlight pre .nv{color:#ef6155}.highlight pre .ow{color:#5bc4bf}.highlight pre .w{color:#e7e9db}.highlight pre .mb{color:#f99b15}.highlight pre .mf{color:#f99b15}.highlight pre .mh{color:#f99b15}.highlight pre .mi{color:#f99b15}.highlight pre .mo{color:#f99b15}.highlight pre .sb{color:#48b685}.highlight pre .sc{color:#e7e9db}.highlight pre .sd{color:#776e71}.highlight pre .s2{color:#48b685}.highlight pre .se{color:#f99b15}.highlight pre .sh{color:#48b685}.highlight pre .si{color:#f99b15}.highlight pre .sx{color:#48b685}.highlight pre .sr{color:#48b685}.highlight pre .s1{color:#48b685}.highlight pre .ss{color:#48b685}.highlight pre .bp{color:#e7e9db}.highlight pre .vc{color:#ef6155}.highlight pre .vg{color:#ef6155}.highlight pre .vi{color:#ef6155}.highlight pre .il{color:#f99b15} \ No newline at end of file diff --git a/theme/css/pygments/paraiso-light.min.css b/theme/css/pygments/paraiso-light.min.css new file mode 100644 index 0000000..82797eb --- /dev/null +++ b/theme/css/pygments/paraiso-light.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#a39e9b}.highlight pre{background:#e7e9db;color:#2f1e2e}.highlight pre .c{color:#8d8687}.highlight pre .err{color:#ef6155}.highlight pre .k{color:#815ba4}.highlight pre .l{color:#f99b15}.highlight pre .n{color:#2f1e2e}.highlight pre .o{color:#5bc4bf}.highlight pre .p{color:#2f1e2e}.highlight pre .ch{color:#8d8687}.highlight pre .cm{color:#8d8687}.highlight pre .cp{color:#8d8687}.highlight pre .cpf{color:#8d8687}.highlight pre .c1{color:#8d8687}.highlight pre .cs{color:#8d8687}.highlight pre .gd{color:#ef6155}.highlight pre .ge{font-style:italic}.highlight pre .gh{color:#2f1e2e;font-weight:bold}.highlight pre .gi{color:#48b685}.highlight pre .gp{color:#8d8687;font-weight:bold}.highlight pre .gs{font-weight:bold}.highlight pre .gu{color:#5bc4bf;font-weight:bold}.highlight pre .kc{color:#815ba4}.highlight pre .kd{color:#815ba4}.highlight pre .kn{color:#5bc4bf}.highlight pre .kp{color:#815ba4}.highlight pre .kr{color:#815ba4}.highlight pre .kt{color:#fec418}.highlight pre .ld{color:#48b685}.highlight pre .m{color:#f99b15}.highlight pre .s{color:#48b685}.highlight pre .na{color:#06b6ef}.highlight pre .nb{color:#2f1e2e}.highlight pre .nc{color:#fec418}.highlight pre .no{color:#ef6155}.highlight pre .nd{color:#5bc4bf}.highlight pre .ni{color:#2f1e2e}.highlight pre .ne{color:#ef6155}.highlight pre .nf{color:#06b6ef}.highlight pre .nl{color:#2f1e2e}.highlight pre .nn{color:#fec418}.highlight pre .nx{color:#06b6ef}.highlight pre .py{color:#2f1e2e}.highlight pre .nt{color:#5bc4bf}.highlight pre .nv{color:#ef6155}.highlight pre .ow{color:#5bc4bf}.highlight pre .w{color:#2f1e2e}.highlight pre .mb{color:#f99b15}.highlight pre .mf{color:#f99b15}.highlight pre .mh{color:#f99b15}.highlight pre .mi{color:#f99b15}.highlight pre .mo{color:#f99b15}.highlight pre .sb{color:#48b685}.highlight pre .sc{color:#2f1e2e}.highlight pre .sd{color:#8d8687}.highlight pre .s2{color:#48b685}.highlight pre .se{color:#f99b15}.highlight pre .sh{color:#48b685}.highlight pre .si{color:#f99b15}.highlight pre .sx{color:#48b685}.highlight pre .sr{color:#48b685}.highlight pre .s1{color:#48b685}.highlight pre .ss{color:#48b685}.highlight pre .bp{color:#2f1e2e}.highlight pre .vc{color:#ef6155}.highlight pre .vg{color:#ef6155}.highlight pre .vi{color:#ef6155}.highlight pre .il{color:#f99b15} \ No newline at end of file diff --git a/theme/css/pygments/pastie.min.css b/theme/css/pygments/pastie.min.css new file mode 100644 index 0000000..57e6436 --- /dev/null +++ b/theme/css/pygments/pastie.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#fff}.highlight pre .c{color:#888}.highlight pre .err{color:#a61717;background-color:#e3d2d2}.highlight pre .k{color:#080;font-weight:bold}.highlight pre .ch{color:#888}.highlight pre .cm{color:#888}.highlight pre .cp{color:#c00;font-weight:bold}.highlight pre .cpf{color:#888}.highlight pre .c1{color:#888}.highlight pre .cs{color:#c00;font-weight:bold;background-color:#fff0f0}.highlight pre .gd{color:#000;background-color:#fdd}.highlight pre .ge{font-style:italic}.highlight pre .gr{color:#a00}.highlight pre .gh{color:#333}.highlight pre .gi{color:#000;background-color:#dfd}.highlight pre .go{color:#888}.highlight pre .gp{color:#555}.highlight pre .gs{font-weight:bold}.highlight pre .gu{color:#666}.highlight pre .gt{color:#a00}.highlight pre .kc{color:#080;font-weight:bold}.highlight pre .kd{color:#080;font-weight:bold}.highlight pre .kn{color:#080;font-weight:bold}.highlight pre .kp{color:#080}.highlight pre .kr{color:#080;font-weight:bold}.highlight pre .kt{color:#888;font-weight:bold}.highlight pre .m{color:#00d;font-weight:bold}.highlight pre .s{color:#d20;background-color:#fff0f0}.highlight pre .na{color:#369}.highlight pre .nb{color:#038}.highlight pre .nc{color:#b06;font-weight:bold}.highlight pre .no{color:#036;font-weight:bold}.highlight pre .nd{color:#555}.highlight pre .ne{color:#b06;font-weight:bold}.highlight pre .nf{color:#06b;font-weight:bold}.highlight pre .nl{color:#369;font-style:italic}.highlight pre .nn{color:#b06;font-weight:bold}.highlight pre .py{color:#369;font-weight:bold}.highlight pre .nt{color:#b06;font-weight:bold}.highlight pre .nv{color:#369}.highlight pre .ow{color:#080}.highlight pre .w{color:#bbb}.highlight pre .mb{color:#00d;font-weight:bold}.highlight pre .mf{color:#00d;font-weight:bold}.highlight pre .mh{color:#00d;font-weight:bold}.highlight pre .mi{color:#00d;font-weight:bold}.highlight pre .mo{color:#00d;font-weight:bold}.highlight pre .sb{color:#d20;background-color:#fff0f0}.highlight pre .sc{color:#d20;background-color:#fff0f0}.highlight pre .sd{color:#d20;background-color:#fff0f0}.highlight pre .s2{color:#d20;background-color:#fff0f0}.highlight pre .se{color:#04d;background-color:#fff0f0}.highlight pre .sh{color:#d20;background-color:#fff0f0}.highlight pre .si{color:#33b;background-color:#fff0f0}.highlight pre .sx{color:#2b2;background-color:#f0fff0}.highlight pre .sr{color:#080;background-color:#fff0ff}.highlight pre .s1{color:#d20;background-color:#fff0f0}.highlight pre .ss{color:#a60;background-color:#fff0f0}.highlight pre .bp{color:#038}.highlight pre .vc{color:#369}.highlight pre .vg{color:#d70}.highlight pre .vi{color:#33b}.highlight pre .il{color:#00d;font-weight:bold} \ No newline at end of file diff --git a/theme/css/pygments/perldoc.min.css b/theme/css/pygments/perldoc.min.css new file mode 100644 index 0000000..b2f856d --- /dev/null +++ b/theme/css/pygments/perldoc.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#eed}.highlight pre .c{color:#228b22}.highlight pre .err{color:#a61717;background-color:#e3d2d2}.highlight pre .k{color:#8b008b;font-weight:bold}.highlight pre .ch{color:#228b22}.highlight pre .cm{color:#228b22}.highlight pre .cp{color:#1e889b}.highlight pre .cpf{color:#228b22}.highlight pre .c1{color:#228b22}.highlight pre .cs{color:#8b008b;font-weight:bold}.highlight pre .gd{color:#a00}.highlight pre .ge{font-style:italic}.highlight pre .gr{color:#a00}.highlight pre .gh{color:#000080;font-weight:bold}.highlight pre .gi{color:#0a0}.highlight pre .go{color:#888}.highlight pre .gp{color:#555}.highlight pre .gs{font-weight:bold}.highlight pre .gu{color:#800080;font-weight:bold}.highlight pre .gt{color:#a00}.highlight pre .kc{color:#8b008b;font-weight:bold}.highlight pre .kd{color:#8b008b;font-weight:bold}.highlight pre .kn{color:#8b008b;font-weight:bold}.highlight pre .kp{color:#8b008b;font-weight:bold}.highlight pre .kr{color:#8b008b;font-weight:bold}.highlight pre .kt{color:#a7a7a7;font-weight:bold}.highlight pre .m{color:#b452cd}.highlight pre .s{color:#cd5555}.highlight pre .na{color:#658b00}.highlight pre .nb{color:#658b00}.highlight pre .nc{color:#008b45;font-weight:bold}.highlight pre .no{color:#00688b}.highlight pre .nd{color:#707a7c}.highlight pre .ne{color:#008b45;font-weight:bold}.highlight pre .nf{color:#008b45}.highlight pre .nn{color:#008b45;text-decoration:underline}.highlight pre .nt{color:#8b008b;font-weight:bold}.highlight pre .nv{color:#00688b}.highlight pre .ow{color:#8b008b}.highlight pre .w{color:#bbb}.highlight pre .mb{color:#b452cd}.highlight pre .mf{color:#b452cd}.highlight pre .mh{color:#b452cd}.highlight pre .mi{color:#b452cd}.highlight pre .mo{color:#b452cd}.highlight pre .sb{color:#cd5555}.highlight pre .sc{color:#cd5555}.highlight pre .sd{color:#cd5555}.highlight pre .s2{color:#cd5555}.highlight pre .se{color:#cd5555}.highlight pre .sh{color:#1c7e71;font-style:italic}.highlight pre .si{color:#cd5555}.highlight pre .sx{color:#cb6c20}.highlight pre .sr{color:#1c7e71}.highlight pre .s1{color:#cd5555}.highlight pre .ss{color:#cd5555}.highlight pre .bp{color:#658b00}.highlight pre .vc{color:#00688b}.highlight pre .vg{color:#00688b}.highlight pre .vi{color:#00688b}.highlight pre .il{color:#b452cd} \ No newline at end of file diff --git a/theme/css/pygments/rrt.min.css b/theme/css/pygments/rrt.min.css new file mode 100644 index 0000000..c98456a --- /dev/null +++ b/theme/css/pygments/rrt.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#00f}.highlight pre{background:#000}.highlight pre .c{color:#0f0}.highlight pre .k{color:#f00}.highlight pre .ch{color:#0f0}.highlight pre .cm{color:#0f0}.highlight pre .cp{color:#e5e5e5}.highlight pre .cpf{color:#0f0}.highlight pre .c1{color:#0f0}.highlight pre .cs{color:#0f0}.highlight pre .kc{color:#f00}.highlight pre .kd{color:#f00}.highlight pre .kn{color:#f00}.highlight pre .kp{color:#f00}.highlight pre .kr{color:#f00}.highlight pre .kt{color:#ee82ee}.highlight pre .s{color:#87ceeb}.highlight pre .no{color:#7fffd4}.highlight pre .nf{color:#ff0}.highlight pre .nv{color:#eedd82}.highlight pre .sb{color:#87ceeb}.highlight pre .sc{color:#87ceeb}.highlight pre .sd{color:#87ceeb}.highlight pre .s2{color:#87ceeb}.highlight pre .se{color:#87ceeb}.highlight pre .sh{color:#87ceeb}.highlight pre .si{color:#87ceeb}.highlight pre .sx{color:#87ceeb}.highlight pre .sr{color:#87ceeb}.highlight pre .s1{color:#87ceeb}.highlight pre .ss{color:#87ceeb}.highlight pre .vc{color:#eedd82}.highlight pre .vg{color:#eedd82}.highlight pre .vi{color:#eedd82} \ No newline at end of file diff --git a/theme/css/pygments/tango.min.css b/theme/css/pygments/tango.min.css new file mode 100644 index 0000000..b01b1cc --- /dev/null +++ b/theme/css/pygments/tango.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#f8f8f8}.highlight pre .c{color:#8f5902;font-style:italic}.highlight pre .err{color:#a40000;border:1px solid #ef2929}.highlight pre .g{color:#000}.highlight pre .k{color:#204a87;font-weight:bold}.highlight pre .l{color:#000}.highlight pre .n{color:#000}.highlight pre .o{color:#ce5c00;font-weight:bold}.highlight pre .x{color:#000}.highlight pre .p{color:#000;font-weight:bold}.highlight pre .ch{color:#8f5902;font-style:italic}.highlight pre .cm{color:#8f5902;font-style:italic}.highlight pre .cp{color:#8f5902;font-style:italic}.highlight pre .cpf{color:#8f5902;font-style:italic}.highlight pre .c1{color:#8f5902;font-style:italic}.highlight pre .cs{color:#8f5902;font-style:italic}.highlight pre .gd{color:#a40000}.highlight pre .ge{color:#000;font-style:italic}.highlight pre .gr{color:#ef2929}.highlight pre .gh{color:#000080;font-weight:bold}.highlight pre .gi{color:#00a000}.highlight pre .go{color:#000;font-style:italic}.highlight pre .gp{color:#8f5902}.highlight pre .gs{color:#000;font-weight:bold}.highlight pre .gu{color:#800080;font-weight:bold}.highlight pre .gt{color:#a40000;font-weight:bold}.highlight pre .kc{color:#204a87;font-weight:bold}.highlight pre .kd{color:#204a87;font-weight:bold}.highlight pre .kn{color:#204a87;font-weight:bold}.highlight pre .kp{color:#204a87;font-weight:bold}.highlight pre .kr{color:#204a87;font-weight:bold}.highlight pre .kt{color:#204a87;font-weight:bold}.highlight pre .ld{color:#000}.highlight pre .m{color:#0000cf;font-weight:bold}.highlight pre .s{color:#4e9a06}.highlight pre .na{color:#c4a000}.highlight pre .nb{color:#204a87}.highlight pre .nc{color:#000}.highlight pre .no{color:#000}.highlight pre .nd{color:#5c35cc;font-weight:bold}.highlight pre .ni{color:#ce5c00}.highlight pre .ne{color:#c00;font-weight:bold}.highlight pre .nf{color:#000}.highlight pre .nl{color:#f57900}.highlight pre .nn{color:#000}.highlight pre .nx{color:#000}.highlight pre .py{color:#000}.highlight pre .nt{color:#204a87;font-weight:bold}.highlight pre .nv{color:#000}.highlight pre .ow{color:#204a87;font-weight:bold}.highlight pre .w{color:#f8f8f8;text-decoration:underline}.highlight pre .mb{color:#0000cf;font-weight:bold}.highlight pre .mf{color:#0000cf;font-weight:bold}.highlight pre .mh{color:#0000cf;font-weight:bold}.highlight pre .mi{color:#0000cf;font-weight:bold}.highlight pre .mo{color:#0000cf;font-weight:bold}.highlight pre .sb{color:#4e9a06}.highlight pre .sc{color:#4e9a06}.highlight pre .sd{color:#8f5902;font-style:italic}.highlight pre .s2{color:#4e9a06}.highlight pre .se{color:#4e9a06}.highlight pre .sh{color:#4e9a06}.highlight pre .si{color:#4e9a06}.highlight pre .sx{color:#4e9a06}.highlight pre .sr{color:#4e9a06}.highlight pre .s1{color:#4e9a06}.highlight pre .ss{color:#4e9a06}.highlight pre .bp{color:#3465a4}.highlight pre .vc{color:#000}.highlight pre .vg{color:#000}.highlight pre .vi{color:#000}.highlight pre .il{color:#0000cf;font-weight:bold} \ No newline at end of file diff --git a/theme/css/pygments/trac.min.css b/theme/css/pygments/trac.min.css new file mode 100644 index 0000000..575ff83 --- /dev/null +++ b/theme/css/pygments/trac.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#fff}.highlight pre .c{color:#998;font-style:italic}.highlight pre .err{color:#a61717;background-color:#e3d2d2}.highlight pre .k{font-weight:bold}.highlight pre .o{font-weight:bold}.highlight pre .ch{color:#998;font-style:italic}.highlight pre .cm{color:#998;font-style:italic}.highlight pre .cp{color:#999;font-weight:bold}.highlight pre .cpf{color:#998;font-style:italic}.highlight pre .c1{color:#998;font-style:italic}.highlight pre .cs{color:#999;font-weight:bold;font-style:italic}.highlight pre .gd{color:#000;background-color:#fdd}.highlight pre .ge{font-style:italic}.highlight pre .gr{color:#a00}.highlight pre .gh{color:#999}.highlight pre .gi{color:#000;background-color:#dfd}.highlight pre .go{color:#888}.highlight pre .gp{color:#555}.highlight pre .gs{font-weight:bold}.highlight pre .gu{color:#aaa}.highlight pre .gt{color:#a00}.highlight pre .kc{font-weight:bold}.highlight pre .kd{font-weight:bold}.highlight pre .kn{font-weight:bold}.highlight pre .kp{font-weight:bold}.highlight pre .kr{font-weight:bold}.highlight pre .kt{color:#458;font-weight:bold}.highlight pre .m{color:#099}.highlight pre .s{color:#b84}.highlight pre .na{color:#008080}.highlight pre .nb{color:#999}.highlight pre .nc{color:#458;font-weight:bold}.highlight pre .no{color:#008080}.highlight pre .ni{color:#800080}.highlight pre .ne{color:#900;font-weight:bold}.highlight pre .nf{color:#900;font-weight:bold}.highlight pre .nn{color:#555}.highlight pre .nt{color:#000080}.highlight pre .nv{color:#008080}.highlight pre .ow{font-weight:bold}.highlight pre .w{color:#bbb}.highlight pre .mb{color:#099}.highlight pre .mf{color:#099}.highlight pre .mh{color:#099}.highlight pre .mi{color:#099}.highlight pre .mo{color:#099}.highlight pre .sb{color:#b84}.highlight pre .sc{color:#b84}.highlight pre .sd{color:#b84}.highlight pre .s2{color:#b84}.highlight pre .se{color:#b84}.highlight pre .sh{color:#b84}.highlight pre .si{color:#b84}.highlight pre .sx{color:#b84}.highlight pre .sr{color:#808000}.highlight pre .s1{color:#b84}.highlight pre .ss{color:#b84}.highlight pre .bp{color:#999}.highlight pre .vc{color:#008080}.highlight pre .vg{color:#008080}.highlight pre .vi{color:#008080}.highlight pre .il{color:#099} \ No newline at end of file diff --git a/theme/css/pygments/vim.min.css b/theme/css/pygments/vim.min.css new file mode 100644 index 0000000..254557b --- /dev/null +++ b/theme/css/pygments/vim.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#222}.highlight pre{background:#000;color:#ccc}.highlight pre .c{color:#000080}.highlight pre .err{color:#ccc;border:1px solid #f00}.highlight pre .esc{color:#ccc}.highlight pre .g{color:#ccc}.highlight pre .k{color:#cdcd00}.highlight pre .l{color:#ccc}.highlight pre .n{color:#ccc}.highlight pre .o{color:#39c}.highlight pre .x{color:#ccc}.highlight pre .p{color:#ccc}.highlight pre .ch{color:#000080}.highlight pre .cm{color:#000080}.highlight pre .cp{color:#000080}.highlight pre .cpf{color:#000080}.highlight pre .c1{color:#000080}.highlight pre .cs{color:#cd0000;font-weight:bold}.highlight pre .gd{color:#cd0000}.highlight pre .ge{color:#ccc;font-style:italic}.highlight pre .gr{color:#f00}.highlight pre .gh{color:#000080;font-weight:bold}.highlight pre .gi{color:#00cd00}.highlight pre .go{color:#888}.highlight pre .gp{color:#000080;font-weight:bold}.highlight pre .gs{color:#ccc;font-weight:bold}.highlight pre .gu{color:#800080;font-weight:bold}.highlight pre .gt{color:#04d}.highlight pre .kc{color:#cdcd00}.highlight pre .kd{color:#00cd00}.highlight pre .kn{color:#cd00cd}.highlight pre .kp{color:#cdcd00}.highlight pre .kr{color:#cdcd00}.highlight pre .kt{color:#00cd00}.highlight pre .ld{color:#ccc}.highlight pre .m{color:#cd00cd}.highlight pre .s{color:#cd0000}.highlight pre .na{color:#ccc}.highlight pre .nb{color:#cd00cd}.highlight pre .nc{color:#00cdcd}.highlight pre .no{color:#ccc}.highlight pre .nd{color:#ccc}.highlight pre .ni{color:#ccc}.highlight pre .ne{color:#669;font-weight:bold}.highlight pre .nf{color:#ccc}.highlight pre .nl{color:#ccc}.highlight pre .nn{color:#ccc}.highlight pre .nx{color:#ccc}.highlight pre .py{color:#ccc}.highlight pre .nt{color:#ccc}.highlight pre .nv{color:#00cdcd}.highlight pre .ow{color:#cdcd00}.highlight pre .w{color:#ccc}.highlight pre .mb{color:#cd00cd}.highlight pre .mf{color:#cd00cd}.highlight pre .mh{color:#cd00cd}.highlight pre .mi{color:#cd00cd}.highlight pre .mo{color:#cd00cd}.highlight pre .sb{color:#cd0000}.highlight pre .sc{color:#cd0000}.highlight pre .sd{color:#cd0000}.highlight pre .s2{color:#cd0000}.highlight pre .se{color:#cd0000}.highlight pre .sh{color:#cd0000}.highlight pre .si{color:#cd0000}.highlight pre .sx{color:#cd0000}.highlight pre .sr{color:#cd0000}.highlight pre .s1{color:#cd0000}.highlight pre .ss{color:#cd0000}.highlight pre .bp{color:#cd00cd}.highlight pre .vc{color:#00cdcd}.highlight pre .vg{color:#00cdcd}.highlight pre .vi{color:#00cdcd}.highlight pre .il{color:#cd00cd} \ No newline at end of file diff --git a/theme/css/pygments/vs.min.css b/theme/css/pygments/vs.min.css new file mode 100644 index 0000000..5dc324b --- /dev/null +++ b/theme/css/pygments/vs.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#fff}.highlight pre .c{color:#008000}.highlight pre .err{border:1px solid #f00}.highlight pre .k{color:#00f}.highlight pre .ch{color:#008000}.highlight pre .cm{color:#008000}.highlight pre .cp{color:#00f}.highlight pre .cpf{color:#008000}.highlight pre .c1{color:#008000}.highlight pre .cs{color:#008000}.highlight pre .ge{font-style:italic}.highlight pre .gh{font-weight:bold}.highlight pre .gp{font-weight:bold}.highlight pre .gs{font-weight:bold}.highlight pre .gu{font-weight:bold}.highlight pre .kc{color:#00f}.highlight pre .kd{color:#00f}.highlight pre .kn{color:#00f}.highlight pre .kp{color:#00f}.highlight pre .kr{color:#00f}.highlight pre .kt{color:#2b91af}.highlight pre .s{color:#a31515}.highlight pre .nc{color:#2b91af}.highlight pre .ow{color:#00f}.highlight pre .sb{color:#a31515}.highlight pre .sc{color:#a31515}.highlight pre .sd{color:#a31515}.highlight pre .s2{color:#a31515}.highlight pre .se{color:#a31515}.highlight pre .sh{color:#a31515}.highlight pre .si{color:#a31515}.highlight pre .sx{color:#a31515}.highlight pre .sr{color:#a31515}.highlight pre .s1{color:#a31515}.highlight pre .ss{color:#a31515} \ No newline at end of file diff --git a/theme/css/pygments/xcode.min.css b/theme/css/pygments/xcode.min.css new file mode 100644 index 0000000..c85e586 --- /dev/null +++ b/theme/css/pygments/xcode.min.css @@ -0,0 +1 @@ +.highlight pre .hll{background-color:#ffc}.highlight pre{background:#fff}.highlight pre .c{color:#177500}.highlight pre .err{color:#000}.highlight pre .k{color:#a90d91}.highlight pre .l{color:#1c01ce}.highlight pre .n{color:#000}.highlight pre .o{color:#000}.highlight pre .ch{color:#177500}.highlight pre .cm{color:#177500}.highlight pre .cp{color:#633820}.highlight pre .cpf{color:#177500}.highlight pre .c1{color:#177500}.highlight pre .cs{color:#177500}.highlight pre .kc{color:#a90d91}.highlight pre .kd{color:#a90d91}.highlight pre .kn{color:#a90d91}.highlight pre .kp{color:#a90d91}.highlight pre .kr{color:#a90d91}.highlight pre .kt{color:#a90d91}.highlight pre .ld{color:#1c01ce}.highlight pre .m{color:#1c01ce}.highlight pre .s{color:#c41a16}.highlight pre .na{color:#836c28}.highlight pre .nb{color:#a90d91}.highlight pre .nc{color:#3f6e75}.highlight pre .no{color:#000}.highlight pre .nd{color:#000}.highlight pre .ni{color:#000}.highlight pre .ne{color:#000}.highlight pre .nf{color:#000}.highlight pre .nl{color:#000}.highlight pre .nn{color:#000}.highlight pre .nx{color:#000}.highlight pre .py{color:#000}.highlight pre .nt{color:#000}.highlight pre .nv{color:#000}.highlight pre .ow{color:#000}.highlight pre .mb{color:#1c01ce}.highlight pre .mf{color:#1c01ce}.highlight pre .mh{color:#1c01ce}.highlight pre .mi{color:#1c01ce}.highlight pre .mo{color:#1c01ce}.highlight pre .sb{color:#c41a16}.highlight pre .sc{color:#2300ce}.highlight pre .sd{color:#c41a16}.highlight pre .s2{color:#c41a16}.highlight pre .se{color:#c41a16}.highlight pre .sh{color:#c41a16}.highlight pre .si{color:#c41a16}.highlight pre .sx{color:#c41a16}.highlight pre .sr{color:#c41a16}.highlight pre .s1{color:#c41a16}.highlight pre .ss{color:#c41a16}.highlight pre .bp{color:#5b269a}.highlight pre .vc{color:#000}.highlight pre .vg{color:#000}.highlight pre .vi{color:#000}.highlight pre .il{color:#1c01ce} \ No newline at end of file diff --git a/theme/css/space.css b/theme/css/space.css new file mode 100644 index 0000000..05725de --- /dev/null +++ b/theme/css/space.css @@ -0,0 +1,77 @@ +.star { + height: 100%; + background: radial-gradient(ellipse at bottom, #1b2735 0%, #090a0f 100%); + overflow: hidden; +} + +#stars { + width: 1px; + height: 1px; + background: transparent; + box-shadow: 1036px 1626px #FFF , 1578px 1318px #FFF , 705px 855px #FFF , 1278px 1107px #FFF , 666px 551px #FFF , 1030px 708px #FFF , 1665px 545px #FFF , 742px 1400px #FFF , 264px 725px #FFF , 526px 1898px #FFF , 1529px 231px #FFF , 1281px 158px #FFF , 265px 1291px #FFF , 187px 1328px #FFF , 531px 278px #FFF , 1167px 1909px #FFF , 867px 349px #FFF , 504px 529px #FFF , 112px 1302px #FFF , 1551px 1554px #FFF , 1222px 1408px #FFF , 1566px 649px #FFF , 222px 1911px #FFF , 227px 1627px #FFF , 1128px 1822px #FFF , 1502px 1199px #FFF , 30px 1916px #FFF , 289px 844px #FFF , 433px 1473px #FFF , 1420px 1005px #FFF , 109px 1135px #FFF , 304px 178px #FFF , 630px 1594px #FFF , 340px 1322px #FFF , 1376px 119px #FFF , 145px 1154px #FFF , 559px 651px #FFF , 1393px 1237px #FFF , 1395px 801px #FFF , 343px 969px #FFF , 157px 273px #FFF , 1774px 453px #FFF , 1693px 1784px #FFF , 528px 1167px #FFF , 831px 1704px #FFF , 1256px 526px #FFF , 936px 1464px #FFF , 871px 38px #FFF , 247px 11px #FFF , 1480px 596px #FFF , 197px 710px #FFF , 1859px 78px #FFF , 356px 1586px #FFF , 1832px 491px #FFF , 772px 52px #FFF , 1910px 1968px #FFF , 764px 1396px #FFF , 1258px 1082px #FFF , 1852px 1769px #FFF , 1572px 785px #FFF , 1906px 464px #FFF , 968px 772px #FFF , 470px 966px #FFF , 769px 1165px #FFF , 310px 1297px #FFF , 902px 572px #FFF , 1612px 940px #FFF , 1335px 1161px #FFF , 475px 348px #FFF , 1558px 897px #FFF , 430px 1524px #FFF , 1391px 1991px #FFF , 854px 1085px #FFF , 320px 1019px #FFF , 1728px 402px #FFF , 1633px 408px #FFF , 943px 84px #FFF , 517px 812px #FFF , 1207px 1423px #FFF , 1705px 424px #FFF , 861px 1040px #FFF , 987px 1839px #FFF , 1062px 1660px #FFF , 351px 1819px #FFF , 375px 1189px #FFF , 1819px 337px #FFF , 309px 265px #FFF , 1881px 39px #FFF , 1419px 310px #FFF , 1686px 533px #FFF , 604px 365px #FFF , 1754px 113px #FFF , 1401px 1912px #FFF , 1387px 1329px #FFF , 87px 820px #FFF , 1004px 65px #FFF , 1590px 1674px #FFF , 1527px 1091px #FFF , 1806px 1818px #FFF , 459px 638px #FFF , 482px 825px #FFF , 1126px 1135px #FFF , 8px 940px #FFF , 1294px 36px #FFF , 48px 708px #FFF , 1388px 1108px #FFF , 1211px 650px #FFF , 1206px 1331px #FFF , 132px 1980px #FFF , 1312px 1042px #FFF , 1049px 512px #FFF , 571px 1833px #FFF , 387px 513px #FFF , 1599px 1836px #FFF , 1779px 209px #FFF , 1880px 852px #FFF , 1858px 834px #FFF , 1515px 677px #FFF , 468px 378px #FFF , 255px 884px #FFF , 1290px 1738px #FFF , 1745px 1683px #FFF , 1549px 1293px #FFF , 1166px 1103px #FFF , 1607px 463px #FFF , 1021px 1540px #FFF , 957px 1098px #FFF , 744px 772px #FFF , 1440px 577px #FFF , 222px 1621px #FFF , 1330px 715px #FFF , 490px 1002px #FFF , 870px 30px #FFF , 862px 727px #FFF , 1968px 119px #FFF , 835px 56px #FFF , 1365px 1445px #FFF , 670px 131px #FFF , 190px 953px #FFF , 1242px 773px #FFF , 1784px 1044px #FFF , 319px 1857px #FFF , 1915px 806px #FFF , 1575px 1664px #FFF , 1372px 1802px #FFF , 1687px 28px #FFF , 542px 611px #FFF , 637px 1144px #FFF , 644px 58px #FFF , 290px 127px #FFF , 1168px 168px #FFF , 95px 415px #FFF , 1320px 1380px #FFF , 1580px 1550px #FFF , 337px 273px #FFF , 178px 1328px #FFF , 1343px 307px #FFF , 932px 233px #FFF , 452px 1008px #FFF , 948px 486px #FFF , 260px 690px #FFF , 1818px 1081px #FFF , 1714px 519px #FFF , 74px 1374px #FFF , 256px 1889px #FFF , 1437px 551px #FFF , 708px 191px #FFF , 1257px 122px #FFF , 433px 1682px #FFF , 1480px 491px #FFF , 1488px 1446px #FFF , 1588px 1553px #FFF , 821px 631px #FFF , 527px 1751px #FFF , 503px 803px #FFF , 1625px 1811px #FFF , 409px 1654px #FFF , 363px 1925px #FFF , 879px 654px #FFF , 1430px 1463px #FFF , 1484px 227px #FFF , 999px 1107px #FFF , 1544px 1780px #FFF , 6px 1287px #FFF , 1772px 393px #FFF , 842px 1888px #FFF , 219px 1835px #FFF , 1230px 899px #FFF , 832px 652px #FFF , 1464px 583px #FFF , 823px 649px #FFF , 696px 1027px #FFF , 1568px 622px #FFF , 1711px 1523px #FFF , 712px 458px #FFF , 1322px 1528px #FFF , 1529px 1470px #FFF , 1784px 1989px #FFF , 83px 430px #FFF , 775px 1701px #FFF , 1169px 1531px #FFF , 1703px 1136px #FFF , 1117px 422px #FFF , 193px 1929px #FFF , 1889px 48px #FFF , 1127px 737px #FFF , 975px 160px #FFF , 860px 402px #FFF , 596px 1121px #FFF , 1702px 351px #FFF , 1276px 828px #FFF , 800px 150px #FFF , 1808px 1437px #FFF , 384px 924px #FFF , 1060px 450px #FFF , 872px 628px #FFF , 1126px 1367px #FFF , 545px 724px #FFF , 1046px 31px #FFF , 64px 393px #FFF , 1229px 784px #FFF , 1504px 1495px #FFF , 1714px 1468px #FFF , 1758px 1993px #FFF , 61px 1904px #FFF , 276px 690px #FFF , 1033px 1104px #FFF , 1643px 250px #FFF , 179px 1297px #FFF , 1440px 542px #FFF , 930px 1527px #FFF , 1395px 1318px #FFF , 1554px 320px #FFF , 146px 966px #FFF , 465px 792px #FFF , 546px 468px #FFF , 1145px 872px #FFF , 1192px 1979px #FFF , 1282px 1461px #FFF , 1046px 280px #FFF , 623px 648px #FFF , 1142px 675px #FFF , 1068px 1840px #FFF , 1908px 1150px #FFF , 146px 567px #FFF , 1628px 744px #FFF , 846px 1163px #FFF , 1775px 3px #FFF , 1923px 379px #FFF , 1885px 1588px #FFF , 521px 1457px #FFF , 318px 700px #FFF , 1497px 1780px #FFF , 1307px 360px #FFF , 1073px 486px #FFF , 12px 968px #FFF , 63px 1537px #FFF , 1427px 1300px #FFF , 824px 1724px #FFF , 281px 1370px #FFF , 1257px 654px #FFF , 1043px 911px #FFF , 1595px 1631px #FFF , 1490px 1846px #FFF , 1849px 1394px #FFF , 481px 1599px #FFF , 1386px 1428px #FFF , 1563px 1642px #FFF , 1261px 1149px #FFF , 690px 1618px #FFF , 1243px 288px #FFF , 1012px 1366px #FFF , 573px 115px #FFF , 803px 1524px #FFF , 536px 917px #FFF , 1636px 471px #FFF , 8px 287px #FFF , 1450px 674px #FFF , 1367px 148px #FFF , 1420px 1043px #FFF , 1533px 1770px #FFF , 435px 195px #FFF , 347px 1881px #FFF , 219px 375px #FFF , 200px 1198px #FFF , 694px 609px #FFF , 217px 200px #FFF , 536px 480px #FFF , 1148px 1455px #FFF , 634px 1757px #FFF , 1873px 5px #FFF , 1195px 245px #FFF , 1904px 1475px #FFF , 1422px 1131px #FFF , 1796px 1865px #FFF , 1575px 67px #FFF , 1018px 1725px #FFF , 1359px 307px #FFF , 1088px 1546px #FFF , 612px 1434px #FFF , 229px 417px #FFF , 1247px 728px #FFF , 221px 939px #FFF , 1391px 1880px #FFF , 1350px 501px #FFF , 121px 541px #FFF , 80px 1496px #FFF , 1928px 661px #FFF , 941px 411px #FFF , 1535px 1903px #FFF , 1729px 653px #FFF , 732px 1331px #FFF , 485px 965px #FFF , 577px 1319px #FFF , 384px 446px #FFF , 833px 20px #FFF , 55px 1199px #FFF , 1274px 1495px #FFF , 230px 1657px #FFF , 289px 39px #FFF , 295px 946px #FFF , 1278px 363px #FFF , 1144px 1193px #FFF , 1562px 1955px #FFF , 777px 1757px #FFF , 41px 113px #FFF , 1070px 1927px #FFF , 397px 1569px #FFF , 119px 1857px #FFF , 885px 1028px #FFF , 1308px 1577px #FFF , 902px 1201px #FFF , 1445px 253px #FFF , 1068px 640px #FFF , 1296px 1415px #FFF , 1312px 1557px #FFF , 1197px 1081px #FFF , 412px 313px #FFF , 1269px 1302px #FFF , 1652px 1767px #FFF , 1386px 1898px #FFF , 1582px 710px #FFF , 1831px 731px #FFF , 16px 434px #FFF , 1107px 1562px #FFF , 1197px 243px #FFF , 496px 1930px #FFF , 1649px 1217px #FFF , 872px 964px #FFF , 243px 1234px #FFF , 378px 259px #FFF , 1892px 1518px #FFF , 881px 1416px #FFF , 49px 1451px #FFF , 482px 1297px #FFF , 1898px 1037px #FFF , 4px 1899px #FFF , 1718px 1899px #FFF , 875px 1523px #FFF , 945px 1189px #FFF , 1014px 1395px #FFF , 1884px 1343px #FFF , 1571px 1166px #FFF , 493px 871px #FFF , 842px 155px #FFF , 1386px 669px #FFF , 1010px 875px #FFF , 1504px 1445px #FFF , 1077px 479px #FFF , 1347px 1888px #FFF , 1014px 139px #FFF , 323px 63px #FFF , 1819px 172px #FFF , 1688px 62px #FFF , 1509px 1735px #FFF , 641px 1299px #FFF , 996px 538px #FFF , 985px 1005px #FFF , 993px 1110px #FFF , 94px 61px #FFF , 1056px 1875px #FFF , 1799px 85px #FFF , 22px 1145px #FFF , 721px 992px #FFF , 1112px 1141px #FFF , 1621px 304px #FFF , 1233px 1373px #FFF , 1445px 785px #FFF , 191px 570px #FFF , 1303px 1831px #FFF , 494px 918px #FFF , 1200px 23px #FFF , 1792px 514px #FFF , 1977px 1059px #FFF , 1898px 1853px #FFF , 1787px 1065px #FFF , 1124px 1899px #FFF , 1222px 1620px #FFF , 1021px 45px #FFF , 485px 722px #FFF , 888px 537px #FFF , 1070px 710px #FFF , 1447px 1013px #FFF , 970px 1780px #FFF , 1713px 135px #FFF , 838px 297px #FFF , 1001px 1322px #FFF , 853px 1255px #FFF , 1686px 760px #FFF , 285px 942px #FFF , 1537px 1228px #FFF , 1647px 1686px #FFF , 992px 436px #FFF , 1898px 1008px #FFF , 1449px 1330px #FFF , 1605px 145px #FFF , 1567px 1175px #FFF , 574px 1777px #FFF , 512px 41px #FFF , 848px 306px #FFF , 659px 152px #FFF , 822px 1925px #FFF , 1659px 1392px #FFF , 1713px 765px #FFF , 483px 1084px #FFF , 1260px 1712px #FFF , 743px 1930px #FFF , 148px 1331px #FFF , 1735px 1105px #FFF , 599px 342px #FFF , 412px 1595px #FFF , 1058px 1851px #FFF , 81px 950px #FFF , 80px 1088px #FFF , 606px 1162px #FFF , 795px 1695px #FFF , 995px 1686px #FFF , 25px 691px #FFF , 1557px 479px #FFF , 1926px 582px #FFF , 353px 718px #FFF , 1148px 597px #FFF , 1201px 408px #FFF , 475px 553px #FFF , 1670px 1451px #FFF , 939px 1309px #FFF , 637px 411px #FFF , 682px 641px #FFF , 1355px 1099px #FFF , 1688px 1573px #FFF , 949px 1623px #FFF , 371px 360px #FFF , 85px 1728px #FFF , 95px 1692px #FFF , 1848px 1876px #FFF , 1984px 336px #FFF , 873px 1248px #FFF , 501px 1957px #FFF , 1935px 412px #FFF , 946px 352px #FFF , 273px 396px #FFF , 1523px 1594px #FFF , 302px 1201px #FFF , 1553px 1019px #FFF , 1731px 65px #FFF , 984px 717px #FFF , 574px 1075px #FFF , 1407px 1317px #FFF , 623px 230px #FFF , 226px 1092px #FFF , 123px 1087px #FFF , 1649px 1915px #FFF , 1609px 810px #FFF , 351px 1708px #FFF , 803px 181px #FFF , 1193px 1413px #FFF , 1598px 1632px #FFF , 102px 1609px #FFF , 994px 186px #FFF , 1867px 724px #FFF , 568px 170px #FFF , 1948px 1340px #FFF , 1492px 412px #FFF , 1857px 1638px #FFF , 1617px 1061px #FFF , 374px 1711px #FFF , 853px 69px #FFF , 1820px 1001px #FFF , 614px 996px #FFF , 654px 196px #FFF , 233px 1879px #FFF , 100px 1966px #FFF , 695px 1162px #FFF , 1728px 637px #FFF , 1110px 1158px #FFF , 97px 1762px #FFF , 1752px 169px #FFF , 1337px 788px #FFF , 1110px 408px #FFF , 504px 150px #FFF , 1549px 1518px #FFF , 1471px 790px #FFF , 1074px 1555px #FFF , 1234px 1764px #FFF , 1537px 1555px #FFF , 1236px 625px #FFF , 1270px 1549px #FFF , 234px 465px #FFF , 1341px 1253px #FFF , 1332px 1641px #FFF , 649px 1661px #FFF , 633px 427px #FFF , 1745px 1603px #FFF , 1207px 877px #FFF , 577px 1821px #FFF , 1440px 972px #FFF , 1441px 676px #FFF , 1048px 937px #FFF , 378px 1281px #FFF , 1136px 728px #FFF , 558px 1004px #FFF , 315px 752px #FFF , 1032px 1529px #FFF , 836px 1636px #FFF , 673px 97px #FFF , 1363px 1834px #FFF , 1113px 1273px #FFF , 215px 118px #FFF , 1685px 1629px #FFF , 1371px 517px #FFF , 1320px 556px #FFF , 532px 552px #FFF , 1095px 1266px #FFF , 136px 73px #FFF , 21px 39px #FFF , 334px 439px #FFF , 1559px 1029px #FFF , 371px 684px #FFF , 1761px 897px #FFF , 282px 1537px #FFF , 1942px 1064px #FFF , 370px 1992px #FFF , 1795px 1557px #FFF , 1897px 1929px #FFF , 68px 1741px #FFF , 456px 1810px #FFF , 1530px 1458px #FFF , 898px 1833px #FFF , 394px 703px #FFF , 231px 648px #FFF , 1980px 1785px #FFF , 117px 346px #FFF , 1407px 1027px #FFF , 745px 960px #FFF , 431px 1228px #FFF , 646px 956px #FFF , 1944px 540px #FFF , 1554px 834px #FFF , 220px 1644px #FFF , 1378px 766px #FFF , 144px 539px #FFF , 670px 1232px #FFF , 989px 929px #FFF , 1877px 1408px #FFF , 827px 649px #FFF , 1743px 105px #FFF , 1260px 43px #FFF , 1455px 1141px #FFF , 203px 609px #FFF , 210px 561px #FFF , 39px 1046px #FFF , 1407px 1215px #FFF , 1137px 559px #FFF , 838px 487px #FFF , 1884px 27px #FFF , 1912px 967px #FFF , 1864px 1940px #FFF , 1253px 465px #FFF , 247px 1333px #FFF , 566px 1524px #FFF , 1080px 674px #FFF , 1012px 1875px #FFF , 1591px 872px #FFF , 1586px 434px #FFF , 1352px 1306px #FFF , 1063px 406px #FFF , 2000px 1572px #FFF , 194px 432px #FFF , 352px 390px #FFF , 439px 1012px #FFF , 1368px 1245px #FFF , 1057px 993px #FFF , 1241px 192px #FFF , 65px 425px #FFF , 436px 1619px #FFF , 975px 320px #FFF , 1688px 872px #FFF , 1654px 249px #FFF , 1882px 1662px #FFF , 1534px 508px #FFF , 1600px 948px #FFF , 460px 1352px #FFF , 271px 932px #FFF , 859px 1488px #FFF , 869px 170px #FFF , 420px 292px #FFF , 1199px 717px #FFF , 1136px 1482px #FFF , 1189px 676px #FFF , 1487px 815px #FFF , 1905px 555px #FFF , 787px 1347px #FFF , 828px 36px #FFF , 282px 736px #FFF , 1680px 453px #FFF , 164px 1651px #FFF , 1384px 1852px #FFF , 781px 231px #FFF , 1731px 1180px #FFF , 1413px 640px #FFF , 1994px 1459px #FFF , 914px 1026px #FFF , 450px 983px #FFF , 1676px 1562px #FFF , 256px 1403px #FFF , 125px 1471px #FFF , 1012px 52px #FFF , 1899px 1746px #FFF , 1486px 868px #FFF , 1004px 1635px #FFF , 208px 1328px #FFF , 1127px 1303px #FFF , 1980px 857px #FFF , 666px 1295px #FFF , 1345px 336px #FFF , 1416px 1860px #FFF , 1696px 1084px #FFF , 275px 716px #FFF , 1154px 373px #FFF , 543px 1929px #FFF , 1467px 550px #FFF , 1691px 1899px #FFF , 1599px 954px #FFF , 1913px 1026px #FFF , 195px 515px #FFF , 1385px 617px #FFF , 157px 176px #FFF , 538px 447px #FFF , 1677px 1269px #FFF , 121px 478px #FFF , 166px 1236px #FFF , 1400px 1217px #FFF , 1645px 1785px #FFF , 1862px 1479px #FFF , 413px 934px #FFF , 961px 175px #FFF , 570px 1778px #FFF , 130px 31px #FFF , 1590px 81px #FFF , 50px 550px #FFF , 680px 398px #FFF , 1913px 1193px #FFF , 1025px 1867px #FFF , 900px 841px #FFF , 658px 1541px #FFF , 1353px 1930px #FFF , 412px 1272px #FFF , 419px 1453px #FFF , 125px 1708px #FFF , 1956px 1024px #FFF , 450px 971px #FFF , 1051px 1532px #FFF , 1925px 312px #FFF , 1565px 1931px #FFF , 36px 494px #FFF , 1340px 1719px #FFF , 1461px 1589px #FFF , 831px 1652px #FFF , 298px 766px #FFF , 260px 1099px #FFF , 1993px 203px #FFF , 1155px 69px #FFF , 1376px 416px #FFF , 173px 832px #FFF , 134px 1916px #FFF , 675px 823px #FFF , 468px 41px #FFF , 177px 1508px #FFF , 913px 1223px #FFF , 1507px 757px #FFF , 256px 1737px #FFF , 1619px 654px #FFF , 523px 48px #FFF , 627px 1243px #FFF , 1818px 1622px #FFF , 1657px 1720px #FFF , 1412px 1286px #FFF , 619px 345px #FFF , 704px 1171px #FFF , 1584px 732px #FFF; + animation: animStar 50s linear infinite; +} +#stars:after { + content: " "; + position: absolute; + top: 2000px; + width: 1px; + height: 1px; + background: transparent; + box-shadow: 1036px 1626px #FFF , 1578px 1318px #FFF , 705px 855px #FFF , 1278px 1107px #FFF , 666px 551px #FFF , 1030px 708px #FFF , 1665px 545px #FFF , 742px 1400px #FFF , 264px 725px #FFF , 526px 1898px #FFF , 1529px 231px #FFF , 1281px 158px #FFF , 265px 1291px #FFF , 187px 1328px #FFF , 531px 278px #FFF , 1167px 1909px #FFF , 867px 349px #FFF , 504px 529px #FFF , 112px 1302px #FFF , 1551px 1554px #FFF , 1222px 1408px #FFF , 1566px 649px #FFF , 222px 1911px #FFF , 227px 1627px #FFF , 1128px 1822px #FFF , 1502px 1199px #FFF , 30px 1916px #FFF , 289px 844px #FFF , 433px 1473px #FFF , 1420px 1005px #FFF , 109px 1135px #FFF , 304px 178px #FFF , 630px 1594px #FFF , 340px 1322px #FFF , 1376px 119px #FFF , 145px 1154px #FFF , 559px 651px #FFF , 1393px 1237px #FFF , 1395px 801px #FFF , 343px 969px #FFF , 157px 273px #FFF , 1774px 453px #FFF , 1693px 1784px #FFF , 528px 1167px #FFF , 831px 1704px #FFF , 1256px 526px #FFF , 936px 1464px #FFF , 871px 38px #FFF , 247px 11px #FFF , 1480px 596px #FFF , 197px 710px #FFF , 1859px 78px #FFF , 356px 1586px #FFF , 1832px 491px #FFF , 772px 52px #FFF , 1910px 1968px #FFF , 764px 1396px #FFF , 1258px 1082px #FFF , 1852px 1769px #FFF , 1572px 785px #FFF , 1906px 464px #FFF , 968px 772px #FFF , 470px 966px #FFF , 769px 1165px #FFF , 310px 1297px #FFF , 902px 572px #FFF , 1612px 940px #FFF , 1335px 1161px #FFF , 475px 348px #FFF , 1558px 897px #FFF , 430px 1524px #FFF , 1391px 1991px #FFF , 854px 1085px #FFF , 320px 1019px #FFF , 1728px 402px #FFF , 1633px 408px #FFF , 943px 84px #FFF , 517px 812px #FFF , 1207px 1423px #FFF , 1705px 424px #FFF , 861px 1040px #FFF , 987px 1839px #FFF , 1062px 1660px #FFF , 351px 1819px #FFF , 375px 1189px #FFF , 1819px 337px #FFF , 309px 265px #FFF , 1881px 39px #FFF , 1419px 310px #FFF , 1686px 533px #FFF , 604px 365px #FFF , 1754px 113px #FFF , 1401px 1912px #FFF , 1387px 1329px #FFF , 87px 820px #FFF , 1004px 65px #FFF , 1590px 1674px #FFF , 1527px 1091px #FFF , 1806px 1818px #FFF , 459px 638px #FFF , 482px 825px #FFF , 1126px 1135px #FFF , 8px 940px #FFF , 1294px 36px #FFF , 48px 708px #FFF , 1388px 1108px #FFF , 1211px 650px #FFF , 1206px 1331px #FFF , 132px 1980px #FFF , 1312px 1042px #FFF , 1049px 512px #FFF , 571px 1833px #FFF , 387px 513px #FFF , 1599px 1836px #FFF , 1779px 209px #FFF , 1880px 852px #FFF , 1858px 834px #FFF , 1515px 677px #FFF , 468px 378px #FFF , 255px 884px #FFF , 1290px 1738px #FFF , 1745px 1683px #FFF , 1549px 1293px #FFF , 1166px 1103px #FFF , 1607px 463px #FFF , 1021px 1540px #FFF , 957px 1098px #FFF , 744px 772px #FFF , 1440px 577px #FFF , 222px 1621px #FFF , 1330px 715px #FFF , 490px 1002px #FFF , 870px 30px #FFF , 862px 727px #FFF , 1968px 119px #FFF , 835px 56px #FFF , 1365px 1445px #FFF , 670px 131px #FFF , 190px 953px #FFF , 1242px 773px #FFF , 1784px 1044px #FFF , 319px 1857px #FFF , 1915px 806px #FFF , 1575px 1664px #FFF , 1372px 1802px #FFF , 1687px 28px #FFF , 542px 611px #FFF , 637px 1144px #FFF , 644px 58px #FFF , 290px 127px #FFF , 1168px 168px #FFF , 95px 415px #FFF , 1320px 1380px #FFF , 1580px 1550px #FFF , 337px 273px #FFF , 178px 1328px #FFF , 1343px 307px #FFF , 932px 233px #FFF , 452px 1008px #FFF , 948px 486px #FFF , 260px 690px #FFF , 1818px 1081px #FFF , 1714px 519px #FFF , 74px 1374px #FFF , 256px 1889px #FFF , 1437px 551px #FFF , 708px 191px #FFF , 1257px 122px #FFF , 433px 1682px #FFF , 1480px 491px #FFF , 1488px 1446px #FFF , 1588px 1553px #FFF , 821px 631px #FFF , 527px 1751px #FFF , 503px 803px #FFF , 1625px 1811px #FFF , 409px 1654px #FFF , 363px 1925px #FFF , 879px 654px #FFF , 1430px 1463px #FFF , 1484px 227px #FFF , 999px 1107px #FFF , 1544px 1780px #FFF , 6px 1287px #FFF , 1772px 393px #FFF , 842px 1888px #FFF , 219px 1835px #FFF , 1230px 899px #FFF , 832px 652px #FFF , 1464px 583px #FFF , 823px 649px #FFF , 696px 1027px #FFF , 1568px 622px #FFF , 1711px 1523px #FFF , 712px 458px #FFF , 1322px 1528px #FFF , 1529px 1470px #FFF , 1784px 1989px #FFF , 83px 430px #FFF , 775px 1701px #FFF , 1169px 1531px #FFF , 1703px 1136px #FFF , 1117px 422px #FFF , 193px 1929px #FFF , 1889px 48px #FFF , 1127px 737px #FFF , 975px 160px #FFF , 860px 402px #FFF , 596px 1121px #FFF , 1702px 351px #FFF , 1276px 828px #FFF , 800px 150px #FFF , 1808px 1437px #FFF , 384px 924px #FFF , 1060px 450px #FFF , 872px 628px #FFF , 1126px 1367px #FFF , 545px 724px #FFF , 1046px 31px #FFF , 64px 393px #FFF , 1229px 784px #FFF , 1504px 1495px #FFF , 1714px 1468px #FFF , 1758px 1993px #FFF , 61px 1904px #FFF , 276px 690px #FFF , 1033px 1104px #FFF , 1643px 250px #FFF , 179px 1297px #FFF , 1440px 542px #FFF , 930px 1527px #FFF , 1395px 1318px #FFF , 1554px 320px #FFF , 146px 966px #FFF , 465px 792px #FFF , 546px 468px #FFF , 1145px 872px #FFF , 1192px 1979px #FFF , 1282px 1461px #FFF , 1046px 280px #FFF , 623px 648px #FFF , 1142px 675px #FFF , 1068px 1840px #FFF , 1908px 1150px #FFF , 146px 567px #FFF , 1628px 744px #FFF , 846px 1163px #FFF , 1775px 3px #FFF , 1923px 379px #FFF , 1885px 1588px #FFF , 521px 1457px #FFF , 318px 700px #FFF , 1497px 1780px #FFF , 1307px 360px #FFF , 1073px 486px #FFF , 12px 968px #FFF , 63px 1537px #FFF , 1427px 1300px #FFF , 824px 1724px #FFF , 281px 1370px #FFF , 1257px 654px #FFF , 1043px 911px #FFF , 1595px 1631px #FFF , 1490px 1846px #FFF , 1849px 1394px #FFF , 481px 1599px #FFF , 1386px 1428px #FFF , 1563px 1642px #FFF , 1261px 1149px #FFF , 690px 1618px #FFF , 1243px 288px #FFF , 1012px 1366px #FFF , 573px 115px #FFF , 803px 1524px #FFF , 536px 917px #FFF , 1636px 471px #FFF , 8px 287px #FFF , 1450px 674px #FFF , 1367px 148px #FFF , 1420px 1043px #FFF , 1533px 1770px #FFF , 435px 195px #FFF , 347px 1881px #FFF , 219px 375px #FFF , 200px 1198px #FFF , 694px 609px #FFF , 217px 200px #FFF , 536px 480px #FFF , 1148px 1455px #FFF , 634px 1757px #FFF , 1873px 5px #FFF , 1195px 245px #FFF , 1904px 1475px #FFF , 1422px 1131px #FFF , 1796px 1865px #FFF , 1575px 67px #FFF , 1018px 1725px #FFF , 1359px 307px #FFF , 1088px 1546px #FFF , 612px 1434px #FFF , 229px 417px #FFF , 1247px 728px #FFF , 221px 939px #FFF , 1391px 1880px #FFF , 1350px 501px #FFF , 121px 541px #FFF , 80px 1496px #FFF , 1928px 661px #FFF , 941px 411px #FFF , 1535px 1903px #FFF , 1729px 653px #FFF , 732px 1331px #FFF , 485px 965px #FFF , 577px 1319px #FFF , 384px 446px #FFF , 833px 20px #FFF , 55px 1199px #FFF , 1274px 1495px #FFF , 230px 1657px #FFF , 289px 39px #FFF , 295px 946px #FFF , 1278px 363px #FFF , 1144px 1193px #FFF , 1562px 1955px #FFF , 777px 1757px #FFF , 41px 113px #FFF , 1070px 1927px #FFF , 397px 1569px #FFF , 119px 1857px #FFF , 885px 1028px #FFF , 1308px 1577px #FFF , 902px 1201px #FFF , 1445px 253px #FFF , 1068px 640px #FFF , 1296px 1415px #FFF , 1312px 1557px #FFF , 1197px 1081px #FFF , 412px 313px #FFF , 1269px 1302px #FFF , 1652px 1767px #FFF , 1386px 1898px #FFF , 1582px 710px #FFF , 1831px 731px #FFF , 16px 434px #FFF , 1107px 1562px #FFF , 1197px 243px #FFF , 496px 1930px #FFF , 1649px 1217px #FFF , 872px 964px #FFF , 243px 1234px #FFF , 378px 259px #FFF , 1892px 1518px #FFF , 881px 1416px #FFF , 49px 1451px #FFF , 482px 1297px #FFF , 1898px 1037px #FFF , 4px 1899px #FFF , 1718px 1899px #FFF , 875px 1523px #FFF , 945px 1189px #FFF , 1014px 1395px #FFF , 1884px 1343px #FFF , 1571px 1166px #FFF , 493px 871px #FFF , 842px 155px #FFF , 1386px 669px #FFF , 1010px 875px #FFF , 1504px 1445px #FFF , 1077px 479px #FFF , 1347px 1888px #FFF , 1014px 139px #FFF , 323px 63px #FFF , 1819px 172px #FFF , 1688px 62px #FFF , 1509px 1735px #FFF , 641px 1299px #FFF , 996px 538px #FFF , 985px 1005px #FFF , 993px 1110px #FFF , 94px 61px #FFF , 1056px 1875px #FFF , 1799px 85px #FFF , 22px 1145px #FFF , 721px 992px #FFF , 1112px 1141px #FFF , 1621px 304px #FFF , 1233px 1373px #FFF , 1445px 785px #FFF , 191px 570px #FFF , 1303px 1831px #FFF , 494px 918px #FFF , 1200px 23px #FFF , 1792px 514px #FFF , 1977px 1059px #FFF , 1898px 1853px #FFF , 1787px 1065px #FFF , 1124px 1899px #FFF , 1222px 1620px #FFF , 1021px 45px #FFF , 485px 722px #FFF , 888px 537px #FFF , 1070px 710px #FFF , 1447px 1013px #FFF , 970px 1780px #FFF , 1713px 135px #FFF , 838px 297px #FFF , 1001px 1322px #FFF , 853px 1255px #FFF , 1686px 760px #FFF , 285px 942px #FFF , 1537px 1228px #FFF , 1647px 1686px #FFF , 992px 436px #FFF , 1898px 1008px #FFF , 1449px 1330px #FFF , 1605px 145px #FFF , 1567px 1175px #FFF , 574px 1777px #FFF , 512px 41px #FFF , 848px 306px #FFF , 659px 152px #FFF , 822px 1925px #FFF , 1659px 1392px #FFF , 1713px 765px #FFF , 483px 1084px #FFF , 1260px 1712px #FFF , 743px 1930px #FFF , 148px 1331px #FFF , 1735px 1105px #FFF , 599px 342px #FFF , 412px 1595px #FFF , 1058px 1851px #FFF , 81px 950px #FFF , 80px 1088px #FFF , 606px 1162px #FFF , 795px 1695px #FFF , 995px 1686px #FFF , 25px 691px #FFF , 1557px 479px #FFF , 1926px 582px #FFF , 353px 718px #FFF , 1148px 597px #FFF , 1201px 408px #FFF , 475px 553px #FFF , 1670px 1451px #FFF , 939px 1309px #FFF , 637px 411px #FFF , 682px 641px #FFF , 1355px 1099px #FFF , 1688px 1573px #FFF , 949px 1623px #FFF , 371px 360px #FFF , 85px 1728px #FFF , 95px 1692px #FFF , 1848px 1876px #FFF , 1984px 336px #FFF , 873px 1248px #FFF , 501px 1957px #FFF , 1935px 412px #FFF , 946px 352px #FFF , 273px 396px #FFF , 1523px 1594px #FFF , 302px 1201px #FFF , 1553px 1019px #FFF , 1731px 65px #FFF , 984px 717px #FFF , 574px 1075px #FFF , 1407px 1317px #FFF , 623px 230px #FFF , 226px 1092px #FFF , 123px 1087px #FFF , 1649px 1915px #FFF , 1609px 810px #FFF , 351px 1708px #FFF , 803px 181px #FFF , 1193px 1413px #FFF , 1598px 1632px #FFF , 102px 1609px #FFF , 994px 186px #FFF , 1867px 724px #FFF , 568px 170px #FFF , 1948px 1340px #FFF , 1492px 412px #FFF , 1857px 1638px #FFF , 1617px 1061px #FFF , 374px 1711px #FFF , 853px 69px #FFF , 1820px 1001px #FFF , 614px 996px #FFF , 654px 196px #FFF , 233px 1879px #FFF , 100px 1966px #FFF , 695px 1162px #FFF , 1728px 637px #FFF , 1110px 1158px #FFF , 97px 1762px #FFF , 1752px 169px #FFF , 1337px 788px #FFF , 1110px 408px #FFF , 504px 150px #FFF , 1549px 1518px #FFF , 1471px 790px #FFF , 1074px 1555px #FFF , 1234px 1764px #FFF , 1537px 1555px #FFF , 1236px 625px #FFF , 1270px 1549px #FFF , 234px 465px #FFF , 1341px 1253px #FFF , 1332px 1641px #FFF , 649px 1661px #FFF , 633px 427px #FFF , 1745px 1603px #FFF , 1207px 877px #FFF , 577px 1821px #FFF , 1440px 972px #FFF , 1441px 676px #FFF , 1048px 937px #FFF , 378px 1281px #FFF , 1136px 728px #FFF , 558px 1004px #FFF , 315px 752px #FFF , 1032px 1529px #FFF , 836px 1636px #FFF , 673px 97px #FFF , 1363px 1834px #FFF , 1113px 1273px #FFF , 215px 118px #FFF , 1685px 1629px #FFF , 1371px 517px #FFF , 1320px 556px #FFF , 532px 552px #FFF , 1095px 1266px #FFF , 136px 73px #FFF , 21px 39px #FFF , 334px 439px #FFF , 1559px 1029px #FFF , 371px 684px #FFF , 1761px 897px #FFF , 282px 1537px #FFF , 1942px 1064px #FFF , 370px 1992px #FFF , 1795px 1557px #FFF , 1897px 1929px #FFF , 68px 1741px #FFF , 456px 1810px #FFF , 1530px 1458px #FFF , 898px 1833px #FFF , 394px 703px #FFF , 231px 648px #FFF , 1980px 1785px #FFF , 117px 346px #FFF , 1407px 1027px #FFF , 745px 960px #FFF , 431px 1228px #FFF , 646px 956px #FFF , 1944px 540px #FFF , 1554px 834px #FFF , 220px 1644px #FFF , 1378px 766px #FFF , 144px 539px #FFF , 670px 1232px #FFF , 989px 929px #FFF , 1877px 1408px #FFF , 827px 649px #FFF , 1743px 105px #FFF , 1260px 43px #FFF , 1455px 1141px #FFF , 203px 609px #FFF , 210px 561px #FFF , 39px 1046px #FFF , 1407px 1215px #FFF , 1137px 559px #FFF , 838px 487px #FFF , 1884px 27px #FFF , 1912px 967px #FFF , 1864px 1940px #FFF , 1253px 465px #FFF , 247px 1333px #FFF , 566px 1524px #FFF , 1080px 674px #FFF , 1012px 1875px #FFF , 1591px 872px #FFF , 1586px 434px #FFF , 1352px 1306px #FFF , 1063px 406px #FFF , 2000px 1572px #FFF , 194px 432px #FFF , 352px 390px #FFF , 439px 1012px #FFF , 1368px 1245px #FFF , 1057px 993px #FFF , 1241px 192px #FFF , 65px 425px #FFF , 436px 1619px #FFF , 975px 320px #FFF , 1688px 872px #FFF , 1654px 249px #FFF , 1882px 1662px #FFF , 1534px 508px #FFF , 1600px 948px #FFF , 460px 1352px #FFF , 271px 932px #FFF , 859px 1488px #FFF , 869px 170px #FFF , 420px 292px #FFF , 1199px 717px #FFF , 1136px 1482px #FFF , 1189px 676px #FFF , 1487px 815px #FFF , 1905px 555px #FFF , 787px 1347px #FFF , 828px 36px #FFF , 282px 736px #FFF , 1680px 453px #FFF , 164px 1651px #FFF , 1384px 1852px #FFF , 781px 231px #FFF , 1731px 1180px #FFF , 1413px 640px #FFF , 1994px 1459px #FFF , 914px 1026px #FFF , 450px 983px #FFF , 1676px 1562px #FFF , 256px 1403px #FFF , 125px 1471px #FFF , 1012px 52px #FFF , 1899px 1746px #FFF , 1486px 868px #FFF , 1004px 1635px #FFF , 208px 1328px #FFF , 1127px 1303px #FFF , 1980px 857px #FFF , 666px 1295px #FFF , 1345px 336px #FFF , 1416px 1860px #FFF , 1696px 1084px #FFF , 275px 716px #FFF , 1154px 373px #FFF , 543px 1929px #FFF , 1467px 550px #FFF , 1691px 1899px #FFF , 1599px 954px #FFF , 1913px 1026px #FFF , 195px 515px #FFF , 1385px 617px #FFF , 157px 176px #FFF , 538px 447px #FFF , 1677px 1269px #FFF , 121px 478px #FFF , 166px 1236px #FFF , 1400px 1217px #FFF , 1645px 1785px #FFF , 1862px 1479px #FFF , 413px 934px #FFF , 961px 175px #FFF , 570px 1778px #FFF , 130px 31px #FFF , 1590px 81px #FFF , 50px 550px #FFF , 680px 398px #FFF , 1913px 1193px #FFF , 1025px 1867px #FFF , 900px 841px #FFF , 658px 1541px #FFF , 1353px 1930px #FFF , 412px 1272px #FFF , 419px 1453px #FFF , 125px 1708px #FFF , 1956px 1024px #FFF , 450px 971px #FFF , 1051px 1532px #FFF , 1925px 312px #FFF , 1565px 1931px #FFF , 36px 494px #FFF , 1340px 1719px #FFF , 1461px 1589px #FFF , 831px 1652px #FFF , 298px 766px #FFF , 260px 1099px #FFF , 1993px 203px #FFF , 1155px 69px #FFF , 1376px 416px #FFF , 173px 832px #FFF , 134px 1916px #FFF , 675px 823px #FFF , 468px 41px #FFF , 177px 1508px #FFF , 913px 1223px #FFF , 1507px 757px #FFF , 256px 1737px #FFF , 1619px 654px #FFF , 523px 48px #FFF , 627px 1243px #FFF , 1818px 1622px #FFF , 1657px 1720px #FFF , 1412px 1286px #FFF , 619px 345px #FFF , 704px 1171px #FFF , 1584px 732px #FFF; +} + +#stars2 { + width: 2px; + height: 2px; + background: transparent; + box-shadow: 1791px 1401px #FFF , 343px 657px #FFF , 880px 1571px #FFF , 1955px 1360px #FFF , 250px 1712px #FFF , 1006px 1209px #FFF , 1561px 653px #FFF , 1900px 370px #FFF , 886px 436px #FFF , 1200px 1771px #FFF , 936px 578px #FFF , 931px 1868px #FFF , 1306px 191px #FFF , 906px 1972px #FFF , 512px 544px #FFF , 1378px 739px #FFF , 754px 1803px #FFF , 1304px 800px #FFF , 715px 841px #FFF , 429px 1769px #FFF , 107px 791px #FFF , 1912px 318px #FFF , 291px 1064px #FFF , 1159px 138px #FFF , 216px 1195px #FFF , 1863px 1215px #FFF , 1034px 882px #FFF , 1627px 37px #FFF , 1481px 316px #FFF , 1917px 1850px #FFF , 1580px 901px #FFF , 1881px 1470px #FFF , 510px 864px #FFF , 60px 860px #FFF , 563px 1496px #FFF , 1874px 1256px #FFF , 934px 888px #FFF , 1893px 44px #FFF , 424px 1742px #FFF , 750px 1927px #FFF , 1856px 436px #FFF , 233px 213px #FFF , 1846px 1149px #FFF , 599px 282px #FFF , 557px 297px #FFF , 1015px 962px #FFF , 62px 305px #FFF , 430px 645px #FFF , 1884px 1070px #FFF , 25px 1084px #FFF , 467px 1648px #FFF , 919px 1557px #FFF , 1089px 1090px #FFF , 1504px 66px #FFF , 1499px 1019px #FFF , 437px 231px #FFF , 606px 240px #FFF , 663px 422px #FFF , 49px 298px #FFF , 1026px 233px #FFF , 813px 682px #FFF , 1068px 1921px #FFF , 1075px 1885px #FFF , 1507px 1869px #FFF , 858px 55px #FFF , 1647px 696px #FFF , 772px 1886px #FFF , 105px 1660px #FFF , 1030px 35px #FFF , 1063px 1824px #FFF , 1028px 871px #FFF , 594px 1239px #FFF , 1315px 1192px #FFF , 1666px 606px #FFF , 1552px 1449px #FFF , 1065px 1133px #FFF , 1585px 159px #FFF , 305px 280px #FFF , 608px 1238px #FFF , 1044px 1756px #FFF , 1598px 667px #FFF , 1452px 1904px #FFF , 1018px 202px #FFF , 161px 1537px #FFF , 1230px 349px #FFF , 1555px 319px #FFF , 536px 1322px #FFF , 925px 1271px #FFF , 689px 279px #FFF , 742px 1303px #FFF , 1818px 736px #FFF , 86px 282px #FFF , 980px 1212px #FFF , 1489px 756px #FFF , 1522px 497px #FFF , 1498px 735px #FFF , 230px 1816px #FFF , 527px 1192px #FFF , 1613px 1791px #FFF , 121px 435px #FFF , 337px 1017px #FFF , 1049px 1102px #FFF , 1700px 1203px #FFF , 1977px 17px #FFF , 765px 1701px #FFF , 734px 1091px #FFF , 1445px 1024px #FFF , 1918px 735px #FFF , 21px 1274px #FFF , 1672px 1302px #FFF , 61px 192px #FFF , 1717px 451px #FFF , 1447px 937px #FFF , 1134px 1487px #FFF , 536px 215px #FFF , 761px 1768px #FFF , 329px 1652px #FFF , 1019px 1257px #FFF , 1852px 1362px #FFF , 477px 1725px #FFF , 1985px 1412px #FFF , 1007px 839px #FFF , 852px 215px #FFF , 940px 77px #FFF , 1093px 129px #FFF , 248px 1649px #FFF , 681px 541px #FFF , 80px 1342px #FFF , 1697px 151px #FFF , 900px 1262px #FFF , 1807px 1837px #FFF , 986px 1393px #FFF , 1469px 678px #FFF , 1491px 71px #FFF , 1736px 817px #FFF , 1217px 607px #FFF , 743px 112px #FFF , 1080px 514px #FFF , 85px 53px #FFF , 326px 1201px #FFF , 434px 1446px #FFF , 94px 620px #FFF , 733px 859px #FFF , 1860px 1128px #FFF , 409px 687px #FFF , 210px 1293px #FFF , 1047px 107px #FFF , 407px 1834px #FFF , 631px 904px #FFF , 1189px 1829px #FFF , 1305px 608px #FFF , 1449px 1195px #FFF , 264px 1620px #FFF , 392px 1543px #FFF , 1224px 628px #FFF , 1542px 1004px #FFF , 827px 1723px #FFF , 1110px 874px #FFF , 363px 1044px #FFF , 711px 490px #FFF , 341px 224px #FFF , 411px 1693px #FFF , 189px 290px #FFF , 606px 1299px #FFF , 994px 1257px #FFF , 1016px 1361px #FFF , 1632px 1969px #FFF , 1857px 1613px #FFF , 1695px 1047px #FFF , 973px 922px #FFF , 340px 1382px #FFF , 559px 1337px #FFF , 1151px 1185px #FFF , 874px 1785px #FFF , 1416px 1167px #FFF , 1828px 791px #FFF , 84px 1567px #FFF , 515px 1901px #FFF , 796px 1784px #FFF , 1949px 1258px #FFF , 175px 264px #FFF , 104px 1434px #FFF , 424px 588px #FFF , 167px 405px #FFF , 1144px 598px #FFF , 1806px 92px #FFF , 730px 1285px #FFF , 1204px 1380px #FFF , 1250px 1502px #FFF , 72px 216px #FFF , 644px 181px #FFF , 965px 1900px #FFF , 1582px 549px #FFF , 880px 1347px #FFF , 1906px 1966px #FFF , 881px 1888px #FFF , 1732px 1543px #FFF , 220px 1343px #FFF , 1737px 622px #FFF , 1697px 713px #FFF; + animation: animStar 100s linear infinite; +} +#stars2:after { + content: " "; + position: absolute; + top: 2000px; + width: 2px; + height: 2px; + background: transparent; + box-shadow: 1791px 1401px #FFF , 343px 657px #FFF , 880px 1571px #FFF , 1955px 1360px #FFF , 250px 1712px #FFF , 1006px 1209px #FFF , 1561px 653px #FFF , 1900px 370px #FFF , 886px 436px #FFF , 1200px 1771px #FFF , 936px 578px #FFF , 931px 1868px #FFF , 1306px 191px #FFF , 906px 1972px #FFF , 512px 544px #FFF , 1378px 739px #FFF , 754px 1803px #FFF , 1304px 800px #FFF , 715px 841px #FFF , 429px 1769px #FFF , 107px 791px #FFF , 1912px 318px #FFF , 291px 1064px #FFF , 1159px 138px #FFF , 216px 1195px #FFF , 1863px 1215px #FFF , 1034px 882px #FFF , 1627px 37px #FFF , 1481px 316px #FFF , 1917px 1850px #FFF , 1580px 901px #FFF , 1881px 1470px #FFF , 510px 864px #FFF , 60px 860px #FFF , 563px 1496px #FFF , 1874px 1256px #FFF , 934px 888px #FFF , 1893px 44px #FFF , 424px 1742px #FFF , 750px 1927px #FFF , 1856px 436px #FFF , 233px 213px #FFF , 1846px 1149px #FFF , 599px 282px #FFF , 557px 297px #FFF , 1015px 962px #FFF , 62px 305px #FFF , 430px 645px #FFF , 1884px 1070px #FFF , 25px 1084px #FFF , 467px 1648px #FFF , 919px 1557px #FFF , 1089px 1090px #FFF , 1504px 66px #FFF , 1499px 1019px #FFF , 437px 231px #FFF , 606px 240px #FFF , 663px 422px #FFF , 49px 298px #FFF , 1026px 233px #FFF , 813px 682px #FFF , 1068px 1921px #FFF , 1075px 1885px #FFF , 1507px 1869px #FFF , 858px 55px #FFF , 1647px 696px #FFF , 772px 1886px #FFF , 105px 1660px #FFF , 1030px 35px #FFF , 1063px 1824px #FFF , 1028px 871px #FFF , 594px 1239px #FFF , 1315px 1192px #FFF , 1666px 606px #FFF , 1552px 1449px #FFF , 1065px 1133px #FFF , 1585px 159px #FFF , 305px 280px #FFF , 608px 1238px #FFF , 1044px 1756px #FFF , 1598px 667px #FFF , 1452px 1904px #FFF , 1018px 202px #FFF , 161px 1537px #FFF , 1230px 349px #FFF , 1555px 319px #FFF , 536px 1322px #FFF , 925px 1271px #FFF , 689px 279px #FFF , 742px 1303px #FFF , 1818px 736px #FFF , 86px 282px #FFF , 980px 1212px #FFF , 1489px 756px #FFF , 1522px 497px #FFF , 1498px 735px #FFF , 230px 1816px #FFF , 527px 1192px #FFF , 1613px 1791px #FFF , 121px 435px #FFF , 337px 1017px #FFF , 1049px 1102px #FFF , 1700px 1203px #FFF , 1977px 17px #FFF , 765px 1701px #FFF , 734px 1091px #FFF , 1445px 1024px #FFF , 1918px 735px #FFF , 21px 1274px #FFF , 1672px 1302px #FFF , 61px 192px #FFF , 1717px 451px #FFF , 1447px 937px #FFF , 1134px 1487px #FFF , 536px 215px #FFF , 761px 1768px #FFF , 329px 1652px #FFF , 1019px 1257px #FFF , 1852px 1362px #FFF , 477px 1725px #FFF , 1985px 1412px #FFF , 1007px 839px #FFF , 852px 215px #FFF , 940px 77px #FFF , 1093px 129px #FFF , 248px 1649px #FFF , 681px 541px #FFF , 80px 1342px #FFF , 1697px 151px #FFF , 900px 1262px #FFF , 1807px 1837px #FFF , 986px 1393px #FFF , 1469px 678px #FFF , 1491px 71px #FFF , 1736px 817px #FFF , 1217px 607px #FFF , 743px 112px #FFF , 1080px 514px #FFF , 85px 53px #FFF , 326px 1201px #FFF , 434px 1446px #FFF , 94px 620px #FFF , 733px 859px #FFF , 1860px 1128px #FFF , 409px 687px #FFF , 210px 1293px #FFF , 1047px 107px #FFF , 407px 1834px #FFF , 631px 904px #FFF , 1189px 1829px #FFF , 1305px 608px #FFF , 1449px 1195px #FFF , 264px 1620px #FFF , 392px 1543px #FFF , 1224px 628px #FFF , 1542px 1004px #FFF , 827px 1723px #FFF , 1110px 874px #FFF , 363px 1044px #FFF , 711px 490px #FFF , 341px 224px #FFF , 411px 1693px #FFF , 189px 290px #FFF , 606px 1299px #FFF , 994px 1257px #FFF , 1016px 1361px #FFF , 1632px 1969px #FFF , 1857px 1613px #FFF , 1695px 1047px #FFF , 973px 922px #FFF , 340px 1382px #FFF , 559px 1337px #FFF , 1151px 1185px #FFF , 874px 1785px #FFF , 1416px 1167px #FFF , 1828px 791px #FFF , 84px 1567px #FFF , 515px 1901px #FFF , 796px 1784px #FFF , 1949px 1258px #FFF , 175px 264px #FFF , 104px 1434px #FFF , 424px 588px #FFF , 167px 405px #FFF , 1144px 598px #FFF , 1806px 92px #FFF , 730px 1285px #FFF , 1204px 1380px #FFF , 1250px 1502px #FFF , 72px 216px #FFF , 644px 181px #FFF , 965px 1900px #FFF , 1582px 549px #FFF , 880px 1347px #FFF , 1906px 1966px #FFF , 881px 1888px #FFF , 1732px 1543px #FFF , 220px 1343px #FFF , 1737px 622px #FFF , 1697px 713px #FFF; +} + +#stars3 { + width: 3px; + height: 3px; + background: transparent; + box-shadow: 929px 128px #FFF , 1548px 1585px #FFF , 1173px 928px #FFF , 483px 1413px #FFF , 1407px 1047px #FFF , 525px 736px #FFF , 1013px 1698px #FFF , 990px 867px #FFF , 1644px 1498px #FFF , 1072px 346px #FFF , 922px 166px #FFF , 1327px 1315px #FFF , 661px 795px #FFF , 333px 227px #FFF , 389px 612px #FFF , 574px 122px #FFF , 1985px 538px #FFF , 648px 50px #FFF , 1434px 1829px #FFF , 465px 1906px #FFF , 714px 748px #FFF , 1332px 720px #FFF , 341px 339px #FFF , 1992px 1079px #FFF , 1459px 642px #FFF , 1556px 657px #FFF , 1619px 249px #FFF , 83px 1231px #FFF , 1203px 259px #FFF , 327px 1891px #FFF , 1613px 867px #FFF , 129px 1932px #FFF , 405px 276px #FFF , 661px 1186px #FFF , 781px 1570px #FFF , 1648px 44px #FFF , 1342px 1514px #FFF , 685px 661px #FFF , 730px 354px #FFF , 462px 1755px #FFF , 1102px 664px #FFF , 1609px 86px #FFF , 328px 927px #FFF , 1410px 1287px #FFF , 1087px 1381px #FFF , 1729px 631px #FFF , 1261px 1987px #FFF , 74px 622px #FFF , 1237px 717px #FFF , 641px 1673px #FFF , 1072px 1593px #FFF , 319px 1324px #FFF , 1768px 941px #FFF , 217px 38px #FFF , 624px 1265px #FFF , 1929px 1594px #FFF , 99px 1899px #FFF , 297px 1485px #FFF , 1006px 1495px #FFF , 1118px 1520px #FFF , 496px 1720px #FFF , 1513px 844px #FFF , 219px 1363px #FFF , 1072px 657px #FFF , 963px 1532px #FFF , 445px 943px #FFF , 1508px 1273px #FFF , 1092px 1686px #FFF , 689px 1420px #FFF , 1938px 1673px #FFF , 914px 810px #FFF , 818px 1339px #FFF , 1408px 1641px #FFF , 1472px 1117px #FFF , 821px 592px #FFF , 49px 177px #FFF , 1560px 955px #FFF , 1985px 1360px #FFF , 193px 594px #FFF , 745px 1391px #FFF , 1350px 1972px #FFF , 974px 495px #FFF , 1481px 1901px #FFF , 1217px 25px #FFF , 1494px 1241px #FFF , 188px 1932px #FFF , 1462px 143px #FFF , 435px 32px #FFF , 882px 3px #FFF , 1774px 1891px #FFF , 1100px 1030px #FFF , 879px 641px #FFF , 537px 346px #FFF , 855px 223px #FFF , 1487px 1333px #FFF , 689px 1788px #FFF , 1269px 516px #FFF , 1879px 1619px #FFF , 732px 1200px #FFF , 731px 244px #FFF; + animation: animStar 150s linear infinite; +} +#stars3:after { + content: " "; + position: absolute; + top: 2000px; + width: 3px; + height: 3px; + background: transparent; + box-shadow: 929px 128px #FFF , 1548px 1585px #FFF , 1173px 928px #FFF , 483px 1413px #FFF , 1407px 1047px #FFF , 525px 736px #FFF , 1013px 1698px #FFF , 990px 867px #FFF , 1644px 1498px #FFF , 1072px 346px #FFF , 922px 166px #FFF , 1327px 1315px #FFF , 661px 795px #FFF , 333px 227px #FFF , 389px 612px #FFF , 574px 122px #FFF , 1985px 538px #FFF , 648px 50px #FFF , 1434px 1829px #FFF , 465px 1906px #FFF , 714px 748px #FFF , 1332px 720px #FFF , 341px 339px #FFF , 1992px 1079px #FFF , 1459px 642px #FFF , 1556px 657px #FFF , 1619px 249px #FFF , 83px 1231px #FFF , 1203px 259px #FFF , 327px 1891px #FFF , 1613px 867px #FFF , 129px 1932px #FFF , 405px 276px #FFF , 661px 1186px #FFF , 781px 1570px #FFF , 1648px 44px #FFF , 1342px 1514px #FFF , 685px 661px #FFF , 730px 354px #FFF , 462px 1755px #FFF , 1102px 664px #FFF , 1609px 86px #FFF , 328px 927px #FFF , 1410px 1287px #FFF , 1087px 1381px #FFF , 1729px 631px #FFF , 1261px 1987px #FFF , 74px 622px #FFF , 1237px 717px #FFF , 641px 1673px #FFF , 1072px 1593px #FFF , 319px 1324px #FFF , 1768px 941px #FFF , 217px 38px #FFF , 624px 1265px #FFF , 1929px 1594px #FFF , 99px 1899px #FFF , 297px 1485px #FFF , 1006px 1495px #FFF , 1118px 1520px #FFF , 496px 1720px #FFF , 1513px 844px #FFF , 219px 1363px #FFF , 1072px 657px #FFF , 963px 1532px #FFF , 445px 943px #FFF , 1508px 1273px #FFF , 1092px 1686px #FFF , 689px 1420px #FFF , 1938px 1673px #FFF , 914px 810px #FFF , 818px 1339px #FFF , 1408px 1641px #FFF , 1472px 1117px #FFF , 821px 592px #FFF , 49px 177px #FFF , 1560px 955px #FFF , 1985px 1360px #FFF , 193px 594px #FFF , 745px 1391px #FFF , 1350px 1972px #FFF , 974px 495px #FFF , 1481px 1901px #FFF , 1217px 25px #FFF , 1494px 1241px #FFF , 188px 1932px #FFF , 1462px 143px #FFF , 435px 32px #FFF , 882px 3px #FFF , 1774px 1891px #FFF , 1100px 1030px #FFF , 879px 641px #FFF , 537px 346px #FFF , 855px 223px #FFF , 1487px 1333px #FFF , 689px 1788px #FFF , 1269px 516px #FFF , 1879px 1619px #FFF , 732px 1200px #FFF , 731px 244px #FFF; +} + +@keyframes animStar { + from { + transform: translateY(0px); + } + to { + transform: translateY(-2000px); + } +} + +@font-face { + font-family: ExodarOut; + src: url(Exodar-Outline.woff2), + url(Exodar-Outline.woff); +} + +@font-face { + font-family: Exodar; + src: url(Exodar.woff), + url(Exodar.woff2); +} diff --git a/theme/css/theme.css b/theme/css/theme.css new file mode 100644 index 0000000..18877a2 --- /dev/null +++ b/theme/css/theme.css @@ -0,0 +1,132 @@ +:root { + --alchemy-border: rgba(0,0,0,.1); +} + +::selection { + background: #0085a1; + color: #fff; +} + +::-moz-selection { + background: #05bce0a9; + color: #fff; +} + +::-o-selection { + background: #0085a1; + color: #fff; +} + +::-ms-selection { + background: #0085a1; + color: #fff; +} + +::-webkit-selection { + background: #0085a1; + color: #fff; +} + +blockquote { + opacity: .7; + font-style: italic; +} + +hr { + margin: 1.5rem 0; +} + +/* ------------------------------------------------------------------------- */ + +.container { + max-width: 960px; +} + +.header, +.footer { + padding: 1.5rem 0 .5rem; +} + +.header { + border-bottom: 1px solid var(--alchemy-border); +} + +.header img { + margin-bottom: 1rem; +} + +.header .title { + font-weight: bold; + margin-bottom: 1rem; +} + +.header ul, +.header li { + margin-bottom: .5rem; +} + +.header ul { + font-size: 1.25rem; + font-weight: 300; + text-transform: lowercase; +} + +.main { + padding: 1.5rem 0; +} + +.footer { + border-top: 1px solid var(--alchemy-border); +} + +.highlight pre { + border: 1px solid var(--alchemy-border); + padding: 1rem; +} + +.teaser header ul { + list-style: none; + padding-left: 0; +} + +.teaser header li { + margin-bottom: .5rem; +} + +.teaser .content p { + margin-bottom: 0; +} + +.article header ul, +.article header li { + margin-bottom: .5rem; +} + +.article header li:not(:last-child) { + margin-right: 10px; +} + +.article .content a { + text-decoration: underline +} + +@media (min-width: 576px) { + .header .title { + font-size: 3rem; + } +} + +@media (max-width: 576px) { + .header, + .footer { + text-align: center; + } + + .teaser header li { + display: inline-block; + } + + .teaser header li:not(:last-child) { + margin-right: 10px; + } +} diff --git a/theme/webfonts/fa-brands-400.eot b/theme/webfonts/fa-brands-400.eot new file mode 100644 index 0000000..54ad8d7 Binary files /dev/null and b/theme/webfonts/fa-brands-400.eot differ diff --git a/theme/webfonts/fa-brands-400.svg b/theme/webfonts/fa-brands-400.svg new file mode 100644 index 0000000..2c8659c --- /dev/null +++ b/theme/webfonts/fa-brands-400.svg @@ -0,0 +1,3637 @@ + + + + + +Created by FontForge 20200314 at Wed Jul 15 11:59:41 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/theme/webfonts/fa-brands-400.ttf b/theme/webfonts/fa-brands-400.ttf new file mode 100644 index 0000000..16852bf Binary files /dev/null and b/theme/webfonts/fa-brands-400.ttf differ diff --git a/theme/webfonts/fa-brands-400.woff b/theme/webfonts/fa-brands-400.woff new file mode 100644 index 0000000..6cf6fb3 Binary files /dev/null and b/theme/webfonts/fa-brands-400.woff differ diff --git a/theme/webfonts/fa-brands-400.woff2 b/theme/webfonts/fa-brands-400.woff2 new file mode 100644 index 0000000..f2a4e36 Binary files /dev/null and b/theme/webfonts/fa-brands-400.woff2 differ diff --git a/theme/webfonts/fa-regular-400.eot b/theme/webfonts/fa-regular-400.eot new file mode 100644 index 0000000..479b32c Binary files /dev/null and b/theme/webfonts/fa-regular-400.eot differ diff --git a/theme/webfonts/fa-regular-400.svg b/theme/webfonts/fa-regular-400.svg new file mode 100644 index 0000000..7947ca8 --- /dev/null +++ b/theme/webfonts/fa-regular-400.svg @@ -0,0 +1,805 @@ + + + + + +Created by FontForge 20200314 at Wed Jul 15 11:59:40 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/theme/webfonts/fa-regular-400.ttf b/theme/webfonts/fa-regular-400.ttf new file mode 100644 index 0000000..42a04fd Binary files /dev/null and b/theme/webfonts/fa-regular-400.ttf differ diff --git a/theme/webfonts/fa-regular-400.woff b/theme/webfonts/fa-regular-400.woff new file mode 100644 index 0000000..c390c60 Binary files /dev/null and b/theme/webfonts/fa-regular-400.woff differ diff --git a/theme/webfonts/fa-regular-400.woff2 b/theme/webfonts/fa-regular-400.woff2 new file mode 100644 index 0000000..11c71d2 Binary files /dev/null and b/theme/webfonts/fa-regular-400.woff2 differ diff --git a/theme/webfonts/fa-solid-900.eot b/theme/webfonts/fa-solid-900.eot new file mode 100644 index 0000000..52883b9 Binary files /dev/null and b/theme/webfonts/fa-solid-900.eot differ diff --git a/theme/webfonts/fa-solid-900.svg b/theme/webfonts/fa-solid-900.svg new file mode 100644 index 0000000..d5e4d52 --- /dev/null +++ b/theme/webfonts/fa-solid-900.svg @@ -0,0 +1,5015 @@ + + + + + +Created by FontForge 20200314 at Wed Jul 15 11:59:41 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/theme/webfonts/fa-solid-900.ttf b/theme/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000..7c59512 Binary files /dev/null and b/theme/webfonts/fa-solid-900.ttf differ diff --git a/theme/webfonts/fa-solid-900.woff b/theme/webfonts/fa-solid-900.woff new file mode 100644 index 0000000..aff125d Binary files /dev/null and b/theme/webfonts/fa-solid-900.woff differ diff --git a/theme/webfonts/fa-solid-900.woff2 b/theme/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000..aa2b791 Binary files /dev/null and b/theme/webfonts/fa-solid-900.woff2 differ